public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/3121: ICE whilst compiling omniORB
@ 2001-06-11  4:06 teemu
  0 siblings, 0 replies; 2+ messages in thread
From: teemu @ 2001-06-11  4:06 UTC (permalink / raw)
  To: gcc-gnats

>Number:         3121
>Category:       c++
>Synopsis:       ICE whilst compiling omniORB
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Mon Jun 11 04:06:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     teemu@torma.org
>Release:        3.0 20010611
>Organization:
>Environment:
i686-redhat-linux (RedHat 6.2)	
>Description:
Internal compiler error whilst compiling omniORB 3. 
This is new, it did not exists last week's version,
and is regression from 2.95.2.
>How-To-Repeat:
$ /usr/local/gcc3/bin/g++  -v   -c -g -mcpu=i686 -march=i686 -g -D_GNU_SOURCE -D_REENTRANT -DSVR4 -DPOSIX -DLINUX   -D_REENTRANT -I. -I./.. -I./../.. -DUSE_omniORB_logStream -D_OMNIORB_LIBRARY  -I.  -I../../../../include -D__x86__ -D__linux__ -D__OSVERSION__=2 -o portableserver.o portableserver.cc
Reading specs from /usr/local/gcc3/lib/gcc-lib/i686-pc-linux-gnu/3.0/specs
Configured with: ../gcc-3.0-branch/configure --with-gcc-version-trigger=/work/tot/gcc/3.0/gcc-3.0-branch/gcc/version.c --host=i686-pc-linux-gnu --prefix=/usr/local/gcc3 --enable-version-specific-runtime-libs --enable-long-long --enable-threads
Thread model: posix
gcc version 3.0 20010611 (prerelease)
 /usr/local/gcc3/lib/gcc-lib/i686-pc-linux-gnu/3.0/cc1plus -v -I. -I./.. -I./../.. -I. -I../../../../include -D__GNUC__=3 -D__GNUC_MINOR__=0 -D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__NO_INLINE__ -D__STDC_HOSTED__=1 -D_GNU_SOURCE -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__i686 -D__i686__ -D__pentiumpro -D__pentiumpro__ -D__tune_i686__ -D__tune_pentiumpro__ -D_GNU_SOURCE -D_REENTRANT -DSVR4 -DPOSIX -DLINUX -D_REENTRANT -DUSE_omniORB_logStream -D_OMNIORB_LIBRARY -D__x86__ -D__linux__ -D__OSVERSION__=2 portableserver.cc -D__GNUG__=3 -D__GXX_DEPRECATED -D__EXCEPTIONS -D__GXX_ABI_VERSION=100 -quiet -dumpbase portableserver.cc -mcpu=i686 -march=i686 -g -g -version -o /tmp/ccxcMqd0.s
GNU CPP version 3.0 20010611 (prerelease) (cpplib) (i386 Linux/ELF)
GNU C++ version 3.0 20010611 (prerelease) (i686-pc-linux-gnu)
	compiled by GNU C version 3.0 20010611 (prerelease).
ignoring duplicate directory "."
#include "..." search starts here:
#include <...> search starts here:
 .
 ..
 ../..
 ../../../../include
 /usr/local/gcc3/lib/gcc-lib/i686-pc-linux-gnu/3.0/include/g++
 /usr/local/gcc3/lib/gcc-lib/i686-pc-linux-gnu/3.0/include/g++/i686-pc-linux-gnu
 /usr/local/gcc3/lib/gcc-lib/i686-pc-linux-gnu/3.0/include/g++/backward
 /usr/local/include
 /usr/local/gcc3/lib/gcc-lib/i686-pc-linux-gnu/3.0/include
 /usr/local/gcc3/i686-pc-linux-gnu/include
 /usr/include
End of search list.
In file included from ../../../../include/omniORB3/CORBA.h:2653,
                 from portableserver.cc:78:
../omniORB3/ir_poa.hh:107: Internal error #20010126.
../omniORB3/ir_poa.hh:107: Internal compiler error in dfs_accumulate_vtbl_inits
   , at cp/class.c:7620
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions.
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/x-csrc; name="portableserver.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="portableserver.ii"

IyA3OCAicG9ydGFibGVzZXJ2ZXIuY2MiCiMgMSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JC
My9DT1JCQS5oIiAxCiMgMjU1ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL0NPUkJBLmgi
CiMgMSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9vbW5pSW50ZXJuYWwuaCIgMQojIDEz
OSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9vbW5pSW50ZXJuYWwuaCIKIyAxICIvdXNy
L2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3Rk
ZGVmLmgiIDEgMwojIDE0NyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyAx
OTkgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j
bHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgMTQwICIuLi8u
Li8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL29tbmlJbnRlcm5hbC5oIiAyCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvc3RyaW5ncy5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL3N0cmluZ3MuaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNTAgIi91c3IvaW5jbHVkZS9mZWF0dXJl
cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAyNTEgIi91c3IvaW5j
bHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyNzggIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAyNzkgIi91c3IvaW5jbHVkZS9mZWF0
dXJlcy5oIiAyIDMKIyAyMyAiL3Vzci9pbmNsdWRlL3N0cmluZ3MuaCIgMiAzCgojIDEgIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRk
ZWYuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9zdHJpbmdzLmgiIDIgMwoKZXh0ZXJuICJDIiB7
CgoKZXh0ZXJuIGludCBiY21wIChfX2NvbnN0IHZvaWQgKiBfX3MxLCBfX2NvbnN0IHZvaWQgKiBf
X3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2
b2lkICogX19zcmMsIHZvaWQgKiBfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVy
biB2b2lkIGJ6ZXJvICh2b2lkICogX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBmZnMgKGludCBfX2kpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25z
dCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9f
Y29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0cmNhc2Vj
bXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq
X19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKfQojIDE0MyAiLi4vLi4vLi4vLi4vaW5jbHVk
ZS9vbW5pT1JCMy9vbW5pSW50ZXJuYWwuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIg
MSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0
dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCmV4dGVybiAiQyIg
ewoKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIg
MwoKCgpleHRlcm4gdm9pZCAqIG1lbWNweSAodm9pZCAqIF9fcmVzdHJpY3QgX19kZXN0LCBfX2Nv
bnN0IHZvaWQgKiBfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIHZvaWQgKiBtZW1tb3ZlICh2b2lkICogX19kZXN0LCBfX2NvbnN0IHZvaWQgKiBfX3NyYywg
c2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkICogbWVtY2NweSAodm9pZCAq
IF9fZGVzdCwgX19jb25zdCB2b2lkICogX19zcmMsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93
ICgpOwoKCgoKCmV4dGVybiB2b2lkICogbWVtc2V0ICh2b2lkICogX19zLCBpbnQgX19jLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICogX19z
MSwgX19jb25zdCB2b2lkICogX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2
b2lkICogbWVtY2hyIChfX2NvbnN0IHZvaWQgKiBfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgKiByYXdtZW1jaHIgKF9fY29uc3Qgdm9pZCAqIF9fcywg
aW50IF9fYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3Ry
aWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCgpl
eHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy
ICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19zcmMpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpfX3Jlc3Ry
aWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25z
dCBjaGFyICpfX3MyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFy
ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpIHRo
cm93ICgpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoK
CgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3hs
b2NhbGUuaCIgMwp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewogIHN0cnVjdCBsb2Nh
bGVfZGF0YSAqX19sb2NhbGVzWzZdOwoKCiAgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0
eXBlX2I7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7CiAgY29uc3QgaW50ICpfX2N0eXBl
X3RvdXBwZXI7Cn0gKl9fbG9jYWxlX3Q7CiMgMTAwICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIg
MwoKCmV4dGVybiBpbnQgX19zdHJjb2xsX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj
aGFyICpfX3MyLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCBfX3N0
cnhmcm1fbCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3QgX19uLCBf
X2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKl9fc3RyZHVwIChfX2Nv
bnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hh
ciAqX19zKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKF9fY29uc3QgY2hh
ciAqX19zdHJpbmcsIHNpemVfdCBfX24pIHRocm93ICgpOwojIDE0NiAiL3Vzci9pbmNsdWRlL3N0
cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19j
KSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50
IF9fYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIg
Kl9fcywgaW50IF9fYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29u
c3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KSB0aHJvdyAoKTsKCgpleHRlcm4g
c2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQp
IHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2Nv
bnN0IGNoYXIgKl9fYWNjZXB0KSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29u
c3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkgdGhyb3cgKCk7CgoK
CmV4dGVybiBjaGFyICpfX3N0cmNhc2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19j
b25zdCBjaGFyICpfX25lZWRsZSkgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAo
X19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX19z
dHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2RlbGltLCBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZGVsaW0sIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoj
IDE5NCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiB2b2lkICogbWVtbWVtIChfX2Nv
bnN0IHZvaWQgKiBfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwgX19jb25zdCB2b2lk
ICogX19uZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9p
ZCAqIF9fbWVtcGNweSAodm9pZCAqIF9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKiBf
X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkICogbWVt
cGNweSAodm9pZCAqIF9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKiBfX3Jlc3RyaWN0
IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAo
X19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChf
X2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRocm93ICgpOwoKCgpleHRlcm4gY2hh
ciAqX19zdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZs
ZW4pIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFy
ICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnpl
cm8gKHZvaWQgKiBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29w
eSAoX19jb25zdCB2b2lkICogX19zcmMsIHZvaWQgKiBfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93
ICgpOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICogX19zLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqIF9fczEsIF9fY29uc3Qgdm9pZCAq
IF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25z
dCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9f
Y29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZmcyAo
aW50IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CmV4dGVybiBpbnQgZmZz
IChpbnQgX19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4dGVybiBp
bnQgZmZzbCAobG9uZyBpbnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsK
Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25nIGludCBfX2xsKSB0aHJv
dyAoKQogICAgIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoKCgoKZXh0ZXJuIGludCBfX3N0cmNh
c2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq
X19zMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpf
X3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gaW50IF9fc3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq
X19zMiwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3N0cm5jYXNl
Y21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19u
LCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAo
Y2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19k
ZWxpbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIg
Kl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNp
Z25hbCAoaW50IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqX19zdHBjcHkgKGNoYXIg
Kl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93
ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX19z
dHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHBuY3B5IChjaGFy
ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcp
IHRocm93ICgpOwoKCmV4dGVybiB2b2lkICogbWVtZnJvYiAodm9pZCAqIF9fcywgc2l6ZV90IF9f
bikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpf
X2ZpbGVuYW1lKSB0aHJvdyAoKTsKIyAzNTAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwp9CiMg
MTQ0ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL29tbmlJbnRlcm5hbC5oIiAyCgoKCiMg
MSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pdGhyZWFkLmgiIDEKIyA0MiAiLi4vLi4vLi4vLi4v
aW5jbHVkZS9vbW5pdGhyZWFkLmgiCmNsYXNzIG9tbmlfbXV0ZXg7CmNsYXNzIG9tbmlfY29uZGl0
aW9uOwpjbGFzcyBvbW5pX3NlbWFwaG9yZTsKY2xhc3Mgb21uaV90aHJlYWQ7CiMgMTMwICIuLi8u
Li8uLi8uLi9pbmNsdWRlL29tbml0aHJlYWQuaCIKIyAxICIuLi8uLi8uLi8uLi9pbmNsdWRlL29t
bml0aHJlYWQvcG9zaXguaCIgMQojIDM4ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbml0aHJlYWQv
cG9zaXguaCIKIyAxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAxIDMKIyAxOCAiL3Vzci9pbmNs
dWRlL3B0aHJlYWQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAxOSAi
L3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAx
IDMKIyAyMyAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVy
ZXMuaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0
cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9i
aXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7
CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1
bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBs
b25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAz
CnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3Vp
bnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWdu
ZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5
cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2ln
bmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90
OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYgX191X2ludCBfX3VpZF90Owp0
eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190Owp0eXBlZGVm
IF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9u
ZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQgX19w
aWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIGxvbmcgaW50IF9fcmxpbV90Owp0
eXBlZGVmIF9fcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBl
ZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90OwoKCnR5cGVkZWYg
aW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQg
X190aW1lX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBf
X2Nsb2NrX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2ZkX21hc2s7CiMgMTAwICIv
dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVkZWYgc3RydWN0CiAgewoKCgogICAgX19m
ZF9tYXNrIGZkc19iaXRzWzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOwoKCgoKCiAg
fSBfX2ZkX3NldDsKCgp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hv
cnQgaW50IF9faXBjX3BpZF90OwoKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlw
ZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250
X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25n
IF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVk
ZWYgX191X2xvbmcgX19pbm82NF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90OwoKCnR5
cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9f
dF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgoKCiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhy
ZWFkdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY4ICIv
dXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAg
aW50IHNjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0
eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3Rh
dHVzOwogIGludCBfX3NwaW5sb2NrOwp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNj
cl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19k
ZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBf
X3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVf
dCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRy
OwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1
Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNj
ciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGlu
dCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBw
dGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwog
IGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2lu
ZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90
OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhh
dHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3Qg
X3B0aHJlYWRfcndsb2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7
CiAgaW50IF9fcndfcmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRo
cmVhZF9kZXNjciBfX3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRl
X3dhaXRpbmc7CiAgaW50IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRf
cndsb2NrX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19w
c2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25n
IGludCBwdGhyZWFkX3Q7CiMgMTUxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyAy
NyAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
MSAzCiMgODMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKc3RydWN0IHRpbWVzcGVjCiAgewogICAg
bG9uZyBpbnQgdHZfc2VjOwogICAgbG9uZyBpbnQgdHZfbnNlYzsKICB9OwojIDMwICIvdXNyL2lu
Y2x1ZGUvc2NoZWQuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMK
IyA0NyAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3Qgc2NoZWRfcGFyYW0KICB7
CiAgICBpbnQgc2NoZWRfcHJpb3JpdHk7CiAgfTsKCmV4dGVybiAiQyIgewoKCgpleHRlcm4gaW50
IGNsb25lIChpbnQgKCpfX2ZuKSAodm9pZCAqX19hcmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLCBp
bnQgX19mbGFncywgdm9pZCAqX19hcmcpIHRocm93ICgpOwoKCgp9CiMgMzMgIi91c3IvaW5jbHVk
ZS9zY2hlZC5oIiAyIDMKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX19zY2hlZF9zZXRwYXJh
bSAoX19waWRfdCBfX3BpZCwgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBzY2hlZF9zZXRwYXJhbSAoX19waWRfdCBfX3BpZCwgX19jb25z
dCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9f
c2NoZWRfZ2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJh
bSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgc2NoZWRfZ2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0
cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3NjaGVk
X3NldHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LCBfX2NvbnN0IHN0cnVj
dCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjaGVkX3NldHNj
aGVkdWxlciAoX19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LCBfX2NvbnN0IHN0cnVjdCBzY2hl
ZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19zY2hlZF9nZXRzY2hl
ZHVsZXIgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwpleHRlcm4gaW50IHNjaGVkX2dldHNjaGVk
dWxlciAoX19waWRfdCBfX3BpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3NjaGVkX3lpZWxk
ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAodm9pZCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBfX3NjaGVkX2dldF9wcmlvcml0eV9tYXggKGludCBfX2FsZ29yaXRobSkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3Jp
dGhtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50
IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWlu
IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19zY2hlZF9ycl9nZXRf
aW50ZXJ2YWwgKF9fcGlkX3QgX19waWQsIHN0cnVjdCB0aW1lc3BlYyAqX190KSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlkX3QgX19waWQsIHN0cnVjdCB0
aW1lc3BlYyAqX190KSB0aHJvdyAoKTsKCn0KIyAyMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIg
MiAzCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS90aW1l
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVk
ZS90aW1lLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
MzkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Rp
bWUuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDU3ICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgNTggIi91
c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CgoKCgoK
CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDY5ICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKIyA5NSAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMwpzdHJ1Y3QgdG0KewogIGludCB0bV9zZWM7CiAgaW50IHRtX21pbjsKICBpbnQg
dG1faG91cjsKICBpbnQgdG1fbWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0bV95ZWFyOwogIGlu
dCB0bV93ZGF5OwogIGludCB0bV95ZGF5OwogIGludCB0bV9pc2RzdDsKCgogIGxvbmcgaW50IHRt
X2dtdG9mZjsKICBfX2NvbnN0IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoKCgoKZXh0ZXJuIGNsb2Nr
X3QgY2xvY2sgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3QgdGltZSAodGltZV90ICpf
X3RpbWVyKSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGRpZmZ0aW1lICh0aW1lX3QgX190aW1l
MSwgdGltZV90IF9fdGltZTApIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCmV4dGVybiB0aW1lX3QgbWt0aW1lIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoK
CgoKCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg
X19tYXhzaXplLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fY29uc3Qgc3Ry
dWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqc3Ry
cHRpbWUgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fZm10LCBzdHJ1Y3QgdG0g
Kl9fdHApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUgKF9fY29uc3Qg
dGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1l
IChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc3RydWN0IHRt
ICpfX2dtdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLCBzdHJ1Y3Qg
dG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVf
ciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwgc3RydWN0IHRtICpfX3Jlc3Ry
aWN0IF9fdHApIHRocm93ICgpOwoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IgKF9f
Y29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsIHN0cnVjdCB0bSAqX19yZXN0cmljdCBf
X3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3Qg
dG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpjdGltZSAoX19jb25zdCB0aW1lX3Qg
Kl9fdGltZXIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0
IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmN0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0
IF9fdGltZXIsIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKCmV4dGVybiBj
aGFyICpfX3R6bmFtZVsyXTsKZXh0ZXJuIGludCBfX2RheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQg
X190aW1lem9uZTsKCgoKCmV4dGVybiBjaGFyICp0em5hbWVbMl07CgoKCmV4dGVybiB2b2lkIHR6
c2V0ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBkYXlsaWdodDsKZXh0ZXJuIGxvbmcg
aW50IHRpbWV6b25lOwoKCgoKCmV4dGVybiBpbnQgc3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3do
ZW4pIHRocm93ICgpOwojIDIyOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gdGltZV90
IHRpbWVnbSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWVs
b2NhbCAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGR5c2l6ZSAoaW50
IF9feWVhcikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3Ry
dWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWlu
aW5nKSB0aHJvdyAoKTsKIyAyNTcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIGludCBn
ZXRkYXRlX2VycjsKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlIChfX2NvbnN0IGNoYXIg
Kl9fc3RyaW5nKSB0aHJvdyAoKTsKIyAyNzIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJu
IGludCBnZXRkYXRlX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3N0cmluZywgc3RydWN0
IHRtICpfX3Jlc3RyaWN0IF9fcmVzYnVmcCkgdGhyb3cgKCk7CgoKCgp9CiMgMjIgIi91c3IvaW5j
bHVkZS9wdGhyZWFkLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMKIyAy
OSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi
IDEgMwojIDMwICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMv
c2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVj
dAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVu
c2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzQgIi91c3IvaW5jbHVkZS9z
aWduYWwuaCIgMiAzCiMgNDkgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp0eXBlZGVmIF9fc2ln
c2V0X3Qgc2lnc2V0X3Q7CiMgMzYyICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKfQojIDI1ICIv
dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFk
dHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKCmV4dGVybiAi
QyIgewojIDQ5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmVudW0KewogIFBUSFJFQURfQ1JF
QVRFX0pPSU5BQkxFLAoKICBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRAoKfTsKCmVudW0KewogIFBU
SFJFQURfSU5IRVJJVF9TQ0hFRCwKCiAgUFRIUkVBRF9FWFBMSUNJVF9TQ0hFRAoKfTsKCmVudW0K
ewogIFBUSFJFQURfU0NPUEVfU1lTVEVNLAoKICBQVEhSRUFEX1NDT1BFX1BST0NFU1MKCn07Cgpl
bnVtCnsKICBQVEhSRUFEX01VVEVYX0ZBU1RfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVf
TlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QCgogICwKICBQVEhSRUFEX01VVEVYX05P
Uk1BTCA9IFBUSFJFQURfTVVURVhfRkFTVF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSA9
IFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJST1JDSEVDSyA9
IFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhSRUFEX01VVEVYX0RFRkFVTFQgPSBQ
VEhSRUFEX01VVEVYX05PUk1BTAoKfTsKCmVudW0KewogIFBUSFJFQURfUFJPQ0VTU19QUklWQVRF
LAoKICBQVEhSRUFEX1BST0NFU1NfU0hBUkVECgp9OwoKCmVudW0KewogIFBUSFJFQURfUldMT0NL
X1BSRUZFUl9SRUFERVJfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUCwKICBQ
VEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05PTlJFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX1JX
TE9DS19ERUZBVUxUX05QID0gUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUAp9OwoKCgoK
CgpzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpfX3JvdXRpbmUpICh2
b2lkICopOwogIHZvaWQgKl9fYXJnOwogIGludCBfX2NhbmNlbHR5cGU7CiAgc3RydWN0IF9wdGhy
ZWFkX2NsZWFudXBfYnVmZmVyICpfX3ByZXY7Cn07CgoKCmVudW0KewogIFBUSFJFQURfQ0FOQ0VM
X0VOQUJMRSwKCiAgUFRIUkVBRF9DQU5DRUxfRElTQUJMRQoKfTsKZW51bQp7CiAgUFRIUkVBRF9D
QU5DRUxfREVGRVJSRUQsCgogIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUwoKfTsKIyAxNDEg
Ii91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZSAocHRo
cmVhZF90ICpfX3RocmVhZCwgX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICoo
Kl9fc3RhcnRfcm91dGluZSkgKHZvaWQgKiksIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gcHRocmVhZF90IHB0aHJlYWRfc2VsZiAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2VxdWFsIChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3QgX190aHJlYWQy
KSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKl9fcmV0dmFsKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gaW50IHB0
aHJlYWRfam9pbiAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pIHRocm93
ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBfX3RoKSB0aHJv
dyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQgKHB0aHJlYWRfYXR0cl90
ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0
aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X3NldGRldGFjaHN0YXRlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19kZXRhY2hzdGF0
ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlIChf
X2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCAqX19kZXRhY2hzdGF0ZSkgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfYXR0
cl90ICpfX2F0dHIsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbSAoX19jb25zdCBwdGhy
ZWFkX2F0dHJfdCAqX19hdHRyLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeSAocHRocmVhZF9hdHRy
X3QgKl9fYXR0ciwgaW50IF9fcG9saWN5KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFk
X2F0dHJfZ2V0c2NoZWRwb2xpY3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50
ICpfX3BvbGljeSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVy
aXRzY2hlZCAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9faW5oZXJpdCkgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAoX19jb25zdCBwdGhy
ZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgKl9faW5oZXJpdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgcHRocmVhZF9hdHRyX3NldHNjb3BlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19z
Y29wZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUgKF9fY29u
c3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50ICpfX3Njb3BlKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0
ciwgc2l6ZV90IF9fZ3VhcmRzaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0
dHJfZ2V0Z3VhcmRzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIHNpemVfdCAq
X19ndWFyZHNpemUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0
c3RhY2thZGRyIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICpfX3N0YWNrYWRkcikgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkciAoX19jb25zdCBw
dGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICoqX19zdGFja2FkZHIpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRocmVhZF9hdHRyX3QgKl9f
YXR0ciwgc2l6ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFk
X2F0dHJfZ2V0c3RhY2tzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIHNpemVf
dCAqX19zdGFja3NpemUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2No
ZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50IF9fcG9saWN5LCBfX2NvbnN0
IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRo
cmVhZF9nZXRzY2hlZHBhcmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLCBpbnQgKl9fcG9s
aWN5LCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBp
bnQgcHRocmVhZF9nZXRjb25jdXJyZW5jeSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw
dGhyZWFkX3NldGNvbmN1cnJlbmN5IChpbnQgX19sZXZlbCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBpbnQgX19wdGhyZWFkX211dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCwgX19j
b25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX211dGV4X2F0dHIpIHRocm93ICgpOwoKZXh0ZXJu
IGludCBwdGhyZWFkX211dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCwgX19jb25z
dCBwdGhyZWFkX211dGV4YXR0cl90ICpfX211dGV4X2F0dHIpIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IF9fcHRocmVhZF9tdXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRo
cm93ICgpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90
ICpfX211dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF90cnlsb2Nr
IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwpleHRlcm4gaW50IHB0aHJlYWRf
bXV0ZXhfdHJ5bG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IF9fcHRocmVhZF9tdXRleF9sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRo
cm93ICgpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9tdXRleF90ICpf
X211dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF91bmxvY2sgKHB0
aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRl
eF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBpbnQgX19wdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0
dHIpIHRocm93ICgpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQgKHB0aHJlYWRf
bXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0
ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CmV4
dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAocHRocmVhZF9tdXRleGF0dHJfdCAq
X19hdHRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleGF0dHJfc2V0
dHlwZSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKSB0aHJvdyAoKTsK
CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSAocHRocmVhZF9tdXRleGF0dHJf
dCAqX19hdHRyLCBpbnQgX19raW5kKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211
dGV4YXR0cl9nZXR0eXBlIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwgaW50
ICpfX2tpbmQpIHRocm93ICgpOwojIDMyMyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRl
cm4gaW50IHB0aHJlYWRfY29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kLCBfX2NvbnN0
IHB0aHJlYWRfY29uZGF0dHJfdCAqX19jb25kX2F0dHIpIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IHB0aHJlYWRfY29uZF9kZXN0cm95IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9zaWduYWwgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAocHRocmVhZF9j
b25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dhaXQg
KHB0aHJlYWRfY29uZF90ICpfX2NvbmQsIHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAocHRocmVhZF9jb25k
X3QgKl9fY29uZCwgcHRocmVhZF9tdXRleF90ICpfX211dGV4LCBfX2NvbnN0IHN0cnVjdCB0aW1l
c3BlYyAqX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRh
dHRyX2luaXQgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB0aHJlYWRfY29uZGF0dHJfZGVzdHJveSAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIp
IHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19pbml0IChwdGhyZWFk
X3J3bG9ja190ICpfX3J3bG9jaywgX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRy
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95IChwdGhyZWFk
X3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9j
a19yZGxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB0aHJlYWRfcndsb2NrX3RyeXJkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2sp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrIChwdGhyZWFkX3J3
bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190
cnl3cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB0aHJlYWRfcndsb2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRo
cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQgKHB0aHJlYWRf
cndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xv
Y2thdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVh
ZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwgaW50ICpfX3BzaGFyZWQpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9yd2xvY2thdHRy
X3QgKl9fYXR0ciwgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVh
ZF9yd2xvY2thdHRyX2dldGtpbmRfbnAgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9f
YXR0ciwgaW50ICpfX3ByZWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9j
a2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwgaW50IF9fcHJl
ZikgdGhyb3cgKCk7CiMgNDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQg
X19wdGhyZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LCB2b2lkICgqX19kZXN0
cl9mdW5jdGlvbikgKHZvaWQgKikpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9j
cmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LCB2b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZv
aWQgKikpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZSAocHRocmVh
ZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfc2V0c3BlY2lm
aWMgKHB0aHJlYWRfa2V5X3QgX19rZXksIF9fY29uc3Qgdm9pZCAqX19wb2ludGVyKSB0aHJvdyAo
KTsKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSwg
X19jb25zdCB2b2lkICpfX3BvaW50ZXIpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCAqX19wdGhy
ZWFkX2dldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsKZXh0ZXJuIHZv
aWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgpOwoj
IDQ0NSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IF9fcHRocmVhZF9vbmNl
IChwdGhyZWFkX29uY2VfdCAqX19vbmNlX2NvbnRyb2wsIHZvaWQgKCpfX2luaXRfcm91dGluZSkg
KHZvaWQpKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2Vf
dCAqX19vbmNlX2NvbnRyb2wsIHZvaWQgKCpfX2luaXRfcm91dGluZSkgKHZvaWQpKSB0aHJvdyAo
KTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZSAoaW50IF9fc3RhdGUs
IGludCAqX19vbGRzdGF0ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5j
ZWx0eXBlIChpbnQgX190eXBlLCBpbnQgKl9fb2xkdHlwZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2NhbmNlbCAocHRocmVhZF90IF9fdGhyZWFkKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biB2b2lkIHB0aHJlYWRfdGVzdGNhbmNlbCAodm9pZCkgdGhyb3cgKCk7CiMgNDgxICIvdXNyL2lu
Y2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaCAoc3Ry
dWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwgdm9pZCAoKl9fcm91dGluZSkg
KHZvaWQgKiksIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKIyA0OTEgIi91c3IvaW5jbHVkZS9wdGhy
ZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVh
ZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwojIDUw
MiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVw
X3B1c2hfZGVmZXIgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsIHZv
aWQgKCpfX3JvdXRpbmUpICh2b2lkICopLCB2b2lkICpfX2FyZykgdGhyb3cgKCk7CiMgNTEzICIv
dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9w
X3Jlc3RvcmUgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsIGludCBf
X2V4ZWN1dGUpIHRocm93ICgpOwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQu
aCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAzCmV4dGVybiBpbnQg
cHRocmVhZF9zaWdtYXNrIChpbnQgX19ob3csIF9fY29uc3QgX19zaWdzZXRfdCAqX19uZXdtYXNr
LCBfX3NpZ3NldF90ICpfX29sZG1hc2spIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRf
a2lsbCAocHRocmVhZF90IF9fdGhyZWFkLCBpbnQgX19zaWdubykgdGhyb3cgKCk7CiMgNTE5ICIv
dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyA1MzQgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgi
IDMKZXh0ZXJuIGludCBfX3B0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCks
IHZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLCB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCks
IHZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLCB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9raWxsX290aGVyX3RocmVhZHNfbnAgKHZvaWQp
IHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBfX3B0aHJlYWRfaW5pdGlhbGl6ZSAodm9pZCkgdGhy
b3cgKCk7Cgp9CiMgMzkgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaXRocmVhZC9wb3NpeC5oIiAy
CgoKCgpleHRlcm4gIkMiIHZvaWQqIG9tbmlfdGhyZWFkX3dyYXBwZXIodm9pZCogcHRyKTsKIyAx
MzEgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaXRocmVhZC5oIiAyCiMgMTc3ICIuLi8uLi8uLi8u
Li9pbmNsdWRlL29tbml0aHJlYWQuaCIKY2xhc3Mgb21uaV90aHJlYWRfZmF0YWwgewpwdWJsaWM6
CiAgICBpbnQgZXJyb3I7CiAgICBvbW5pX3RocmVhZF9mYXRhbChpbnQgZSA9IDApIDogZXJyb3Io
ZSkge30KfTsKCgoKCgoKCmNsYXNzIG9tbmlfdGhyZWFkX2ludmFsaWQge307CiMgMTk4ICIuLi8u
Li8uLi8uLi9pbmNsdWRlL29tbml0aHJlYWQuaCIKY2xhc3Mgb21uaV9tdXRleCB7CgpwdWJsaWM6
CiAgICBvbW5pX211dGV4KHZvaWQpOwogICAgfm9tbmlfbXV0ZXgodm9pZCk7CgogICAgdm9pZCBs
b2NrKHZvaWQpOwogICAgdm9pZCB1bmxvY2sodm9pZCk7CiAgICB2b2lkIGFjcXVpcmUodm9pZCkg
eyBsb2NrKCk7IH0KICAgIHZvaWQgcmVsZWFzZSh2b2lkKSB7IHVubG9jaygpOyB9CgoKCiAgICBm
cmllbmQgY2xhc3Mgb21uaV9jb25kaXRpb247Cgpwcml2YXRlOgoKICAgIG9tbmlfbXV0ZXgoY29u
c3Qgb21uaV9tdXRleCYpOwogICAgb21uaV9tdXRleCYgb3BlcmF0b3I9KGNvbnN0IG9tbmlfbXV0
ZXgmKTsKCnByaXZhdGU6CiAgICBwdGhyZWFkX211dGV4X3QgcG9zaXhfbXV0ZXg7Cn07CiMgMjQx
ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbml0aHJlYWQuaCIKY2xhc3Mgb21uaV9tdXRleF9sb2Nr
IHsKICAgIG9tbmlfbXV0ZXgmIG11dGV4OwpwdWJsaWM6CiAgICBvbW5pX211dGV4X2xvY2sob21u
aV9tdXRleCYgbSkgOiBtdXRleChtKSB7IG11dGV4LmxvY2soKTsgfQogICAgfm9tbmlfbXV0ZXhf
bG9jayh2b2lkKSB7IG11dGV4LnVubG9jaygpOyB9CnByaXZhdGU6CgogICAgb21uaV9tdXRleF9s
b2NrKGNvbnN0IG9tbmlfbXV0ZXhfbG9jayYpOwogICAgb21uaV9tdXRleF9sb2NrJiBvcGVyYXRv
cj0oY29uc3Qgb21uaV9tdXRleF9sb2NrJik7Cn07CiMgMjU5ICIuLi8uLi8uLi8uLi9pbmNsdWRl
L29tbml0aHJlYWQuaCIKY2xhc3Mgb21uaV9jb25kaXRpb24gewoKICAgIG9tbmlfbXV0ZXgqIG11
dGV4OwoKcHVibGljOgogICAgb21uaV9jb25kaXRpb24ob21uaV9tdXRleCogbSk7CgoKCgogICAg
fm9tbmlfY29uZGl0aW9uKHZvaWQpOwoKICAgIHZvaWQgd2FpdCh2b2lkKTsKCgoKCgogICAgaW50
IHRpbWVkd2FpdCh1bnNpZ25lZCBsb25nIHNlY3MsIHVuc2lnbmVkIGxvbmcgbmFub3NlY3MgPSAw
KTsKCgoKCgoKICAgIHZvaWQgc2lnbmFsKHZvaWQpOwoKCgoKICAgIHZvaWQgYnJvYWRjYXN0KHZv
aWQpOwoKCgpwcml2YXRlOgoKICAgIG9tbmlfY29uZGl0aW9uKGNvbnN0IG9tbmlfY29uZGl0aW9u
Jik7CiAgICBvbW5pX2NvbmRpdGlvbiYgb3BlcmF0b3I9KGNvbnN0IG9tbmlfY29uZGl0aW9uJik7
Cgpwcml2YXRlOgogICAgcHRocmVhZF9jb25kX3QgcG9zaXhfY29uZDsKfTsKIyAzMDkgIi4uLy4u
Ly4uLy4uL2luY2x1ZGUvb21uaXRocmVhZC5oIgpjbGFzcyBvbW5pX3NlbWFwaG9yZSB7CgpwdWJs
aWM6CiAgICBvbW5pX3NlbWFwaG9yZSh1bnNpZ25lZCBpbnQgaW5pdGlhbCA9IDEpOwogICAgfm9t
bmlfc2VtYXBob3JlKHZvaWQpOwoKICAgIHZvaWQgd2FpdCh2b2lkKTsKCgoKICAgIGludCB0cnl3
YWl0KHZvaWQpOwoKCgogICAgdm9pZCBwb3N0KHZvaWQpOwoKCgpwcml2YXRlOgoKICAgIG9tbmlf
c2VtYXBob3JlKGNvbnN0IG9tbmlfc2VtYXBob3JlJik7CiAgICBvbW5pX3NlbWFwaG9yZSYgb3Bl
cmF0b3I9KGNvbnN0IG9tbmlfc2VtYXBob3JlJik7Cgpwcml2YXRlOgogICAgb21uaV9tdXRleCBt
OyBvbW5pX2NvbmRpdGlvbiBjOyBpbnQgdmFsdWU7Cn07CgoKCgoKY2xhc3Mgb21uaV9zZW1hcGhv
cmVfbG9jayB7CiAgICBvbW5pX3NlbWFwaG9yZSYgc2VtOwpwdWJsaWM6CiAgICBvbW5pX3NlbWFw
aG9yZV9sb2NrKG9tbmlfc2VtYXBob3JlJiBzKSA6IHNlbShzKSB7IHNlbS53YWl0KCk7IH0KICAg
IH5vbW5pX3NlbWFwaG9yZV9sb2NrKHZvaWQpIHsgc2VtLnBvc3QoKTsgfQpwcml2YXRlOgoKICAg
IG9tbmlfc2VtYXBob3JlX2xvY2soY29uc3Qgb21uaV9zZW1hcGhvcmVfbG9jayYpOwogICAgb21u
aV9zZW1hcGhvcmVfbG9jayYgb3BlcmF0b3I9KGNvbnN0IG9tbmlfc2VtYXBob3JlX2xvY2smKTsK
fTsKIyAzNTggIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaXRocmVhZC5oIgpjbGFzcyBvbW5pX3Ro
cmVhZCB7CgpwdWJsaWM6CgogICAgZW51bSBwcmlvcml0eV90IHsKICAgICAgICBQUklPUklUWV9M
T1csCiAgICAgICAgUFJJT1JJVFlfTk9STUFMLAogICAgICAgIFBSSU9SSVRZX0hJR0gKICAgIH07
CgogICAgZW51bSBzdGF0ZV90IHsKICAgICAgICBTVEFURV9ORVcsCgogICAgICAgIFNUQVRFX1JV
Tk5JTkcsCiAgICAgICAgU1RBVEVfVEVSTUlOQVRFRAoKICAgIH07CgoKCgoKCgogICAgb21uaV90
aHJlYWQodm9pZCAoKmZuKSh2b2lkKiksIHZvaWQqIGFyZyA9IF9fbnVsbCwKICAgICAgICAgICAg
ICAgIHByaW9yaXR5X3QgcHJpID0gUFJJT1JJVFlfTk9STUFMKTsKICAgIG9tbmlfdGhyZWFkKHZv
aWQqICgqZm4pKHZvaWQqKSwgdm9pZCogYXJnID0gX19udWxsLAogICAgICAgICAgICAgICAgcHJp
b3JpdHlfdCBwcmkgPSBQUklPUklUWV9OT1JNQUwpOwoKCgoKCgoKICAgIHZvaWQgc3RhcnQodm9p
ZCk7CgoKCnByb3RlY3RlZDoKCiAgICBvbW5pX3RocmVhZCh2b2lkKiBhcmcgPSBfX251bGwsIHBy
aW9yaXR5X3QgcHJpID0gUFJJT1JJVFlfTk9STUFMKTsKCgoKCiAgICB2b2lkIHN0YXJ0X3VuZGV0
YWNoZWQodm9pZCk7CgoKCgogICAgdmlydHVhbCB+b21uaV90aHJlYWQodm9pZCk7CgoKCgoKCgpw
dWJsaWM6CgogICAgdm9pZCBqb2luKHZvaWQqKik7CgoKCgoKICAgIHZvaWQgc2V0X3ByaW9yaXR5
KHByaW9yaXR5X3QpOwoKCiAgICBzdGF0aWMgb21uaV90aHJlYWQqIGNyZWF0ZSh2b2lkICgqZm4p
KHZvaWQqKSwgdm9pZCogYXJnID0gX19udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJpb3JpdHlfdCBwcmkgPSBQUklPUklUWV9OT1JNQUwpOwogICAgc3RhdGljIG9tbmlfdGhy
ZWFkKiBjcmVhdGUodm9pZCogKCpmbikodm9pZCopLCB2b2lkKiBhcmcgPSBfX251bGwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eV90IHByaSA9IFBSSU9SSVRZX05PUk1B
TCk7CgoKCgoKICAgIHN0YXRpYyB2b2lkIGV4aXQodm9pZCogcmV0dXJuX3ZhbHVlID0gX19udWxs
KTsKCgogICAgc3RhdGljIG9tbmlfdGhyZWFkKiBzZWxmKHZvaWQpOwoKCgoKICAgIHN0YXRpYyB2
b2lkIHlpZWxkKHZvaWQpOwoKCiAgICBzdGF0aWMgdm9pZCBzbGVlcCh1bnNpZ25lZCBsb25nIHNl
Y3MsIHVuc2lnbmVkIGxvbmcgbmFub3NlY3MgPSAwKTsKCgogICAgc3RhdGljIHZvaWQgZ2V0X3Rp
bWUodW5zaWduZWQgbG9uZyogYWJzX3NlYywgdW5zaWduZWQgbG9uZyogYWJzX25zZWMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHJlbF9zZWMgPSAwLCB1bnNpZ25lZCBs
b25nIHJlbF9uc2VjPTApOwoKCgoKCiAgICBzdGF0aWMgdm9pZCBzdGFja3NpemUodW5zaWduZWQg
bG9uZyBzeik7CiAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdGFja3NpemUoKTsKCgoKCnByaXZh
dGU6CgogICAgdmlydHVhbCB2b2lkIHJ1bih2b2lkKiBhcmcpIHt9CiAgICB2aXJ0dWFsIHZvaWQq
IHJ1bl91bmRldGFjaGVkKHZvaWQqIGFyZykgeyByZXR1cm4gX19udWxsOyB9CgoKCgogICAgdm9p
ZCBjb21tb25fY29uc3RydWN0b3Iodm9pZCogYXJnLCBwcmlvcml0eV90IHByaSwgaW50IGRldCk7
CgoKICAgIG9tbmlfbXV0ZXggbXV0ZXg7CgoKCiAgICBzdGF0ZV90IF9zdGF0ZTsKICAgIHByaW9y
aXR5X3QgX3ByaW9yaXR5OwoKICAgIHN0YXRpYyBvbW5pX211dGV4KiBuZXh0X2lkX211dGV4Owog
ICAgc3RhdGljIGludCBuZXh0X2lkOwogICAgaW50IF9pZDsKCiAgICB2b2lkICgqZm5fdm9pZCko
dm9pZCopOwogICAgdm9pZCogKCpmbl9yZXQpKHZvaWQqKTsKICAgIHZvaWQqIHRocmVhZF9hcmc7
CiAgICBpbnQgZGV0YWNoZWQ7CgpwdWJsaWM6CgogICAgcHJpb3JpdHlfdCBwcmlvcml0eSh2b2lk
KSB7CgoKCiAgICAgICAgb21uaV9tdXRleF9sb2NrIGwobXV0ZXgpOwogICAgICAgIHJldHVybiBf
cHJpb3JpdHk7CiAgICB9CgogICAgc3RhdGVfdCBzdGF0ZSh2b2lkKSB7CgoKCiAgICAgICAgb21u
aV9tdXRleF9sb2NrIGwobXV0ZXgpOwogICAgICAgIHJldHVybiBfc3RhdGU7CiAgICB9CgogICAg
aW50IGlkKHZvaWQpIHsgcmV0dXJuIF9pZDsgfQoKCgoKCgogICAgY2xhc3MgaW5pdF90IHsKICAg
ICAgICBzdGF0aWMgaW50IGNvdW50OwogICAgcHVibGljOgogICAgICAgIGluaXRfdCh2b2lkKTsK
ICAgIH07CgogICAgZnJpZW5kIGNsYXNzIGluaXRfdDsKCnByaXZhdGU6CiAgICBwdGhyZWFkX3Qg
cG9zaXhfdGhyZWFkOyBzdGF0aWMgaW50IHBvc2l4X3ByaW9yaXR5KHByaW9yaXR5X3QpOyBmcmll
bmQgdm9pZCogb21uaV90aHJlYWRfd3JhcHBlcih2b2lkKiBwdHIpOwp9OwoKCnN0YXRpYyBvbW5p
X3RocmVhZDo6aW5pdF90IG9tbmlfdGhyZWFkX2luaXQ7CiMgMTQ4ICIuLi8uLi8uLi8uLi9pbmNs
dWRlL29tbmlPUkIzL29tbmlJbnRlcm5hbC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9v
bW5pT1JCMy9DT1JCQV9zeXNkZXAuaCIgMQojIDE0OSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5p
T1JCMy9vbW5pSW50ZXJuYWwuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMv
Q09SQkFfYmFzZXR5cGVzLmgiIDEKIyA3NSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9D
T1JCQV9iYXNldHlwZXMuaCIKdHlwZWRlZiBib29sIF9DT1JCQV9Cb29sZWFuOwoKCgoKdHlwZWRl
ZiB1bnNpZ25lZCBjaGFyIF9DT1JCQV9DaGFyOwoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9DT1JC
QV9PY3RldDsKCnR5cGVkZWYgc2hvcnQgX0NPUkJBX1Nob3J0OwoKdHlwZWRlZiB1bnNpZ25lZCBz
aG9ydCBfQ09SQkFfVVNob3J0OwoKCnR5cGVkZWYgbG9uZyBfQ09SQkFfTG9uZzsKCnR5cGVkZWYg
dW5zaWduZWQgbG9uZyBfQ09SQkFfVUxvbmc7CiMgMTAxICIuLi8uLi8uLi8uLi9pbmNsdWRlL29t
bmlPUkIzL0NPUkJBX2Jhc2V0eXBlcy5oIgp0eXBlZGVmIGxvbmcgbG9uZyBfQ09SQkFfTG9uZ0xv
bmc7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9DT1JCQV9VTG9uZ0xvbmc7CiMgMTExICIu
Li8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL0NPUkJBX2Jhc2V0eXBlcy5oIgp0eXBlZGVmIGZs
b2F0IF9DT1JCQV9GbG9hdDsKdHlwZWRlZiBkb3VibGUgX0NPUkJBX0RvdWJsZTsKIyAxNzcgIi4u
Ly4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvQ09SQkFfYmFzZXR5cGVzLmgiCmV4dGVybiB2b2lk
IF9DT1JCQV9uZXdfb3BlcmF0b3JfcmV0dXJuX251bGwoKTsKZXh0ZXJuIHZvaWQgX0NPUkJBX2Jv
dW5kX2NoZWNrX2Vycm9yKCk7CmV4dGVybiB2b2lkIF9DT1JCQV9tYXJzaGFsX2Vycm9yKCk7CmV4
dGVybiBfQ09SQkFfQm9vbGVhbiBfQ09SQkFfdXNlX25pbF9wdHJfYXNfbmlsX29ianJlZigpOwpl
eHRlcm4gdm9pZCBfQ09SQkFfbnVsbF9zdHJpbmdfcHRyKF9DT1JCQV9Cb29sZWFuKTsKZXh0ZXJu
IHZvaWQgX0NPUkJBX2ludm9rZWRfbmlsX3BzZXVkb19yZWYoKTsKZXh0ZXJuIHZvaWQgX0NPUkJB
X2ludm9rZWRfbmlsX29ianJlZigpOwpleHRlcm4gX0NPUkJBX0Jvb2xlYW4KX0NPUkJBX3VzZV9u
aWxfcHRyX2FzX25pbF9wc2V1ZG9fb2JqcmVmKGNvbnN0IGNoYXIqIG9ialR5cGUpOwpleHRlcm4g
dm9pZCBfQ09SQkFfYmFkX3BhcmFtX2ZyZWVidWYoKTsKIyAxNTAgIi4uLy4uLy4uLy4uL2luY2x1
ZGUvb21uaU9SQjMvb21uaUludGVybmFsLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9pbmNsdWRlL29t
bmlPUkIzL3NlcXRlbXBsYXRlcy5oIiAxCiMgOTMgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9S
QjMvc2VxdGVtcGxhdGVzLmgiCmNsYXNzIE5ldEJ1ZmZlcmVkU3RyZWFtOwpjbGFzcyBNZW1CdWZm
ZXJlZFN0cmVhbTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgX0NPUkJBX1NlcXVlbmNl
IHsKcHVibGljOgogIHR5cGVkZWYgX0NPUkJBX1NlcXVlbmNlPFQ+IFRfc2VxOwoKICBpbmxpbmUg
X0NPUkJBX1VMb25nIG1heGltdW0oKSBjb25zdCB7IHJldHVybiBwZF9tYXg7IH0KICBpbmxpbmUg
X0NPUkJBX1VMb25nIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHBkX2xlbjsgfQogIGlubGluZSB2
b2lkIGxlbmd0aChfQ09SQkFfVUxvbmcgbGVuKQogIHsKICAgIGlmIChwZF9ib3VuZGVkICYmIGxl
biA+IHBkX21heCkgewogICAgICBfQ09SQkFfYm91bmRfY2hlY2tfZXJyb3IoKTsKCiAgICB9Cgog
ICAgaWYgKGxlbikgewoKCiAgICAgIGlmICghcGRfYnVmIHx8IGxlbiA+IHBkX21heCkgewogICAg
ICAgIGNvcHlidWZmZXIoKChsZW4gPiBwZF9tYXgpID8gbGVuIDogcGRfbWF4KSk7CiAgICAgIH0K
ICAgIH0KCiAgICBwZF9sZW4gPSBsZW47CiAgfQogIGlubGluZSBUICZvcGVyYXRvcltdIChfQ09S
QkFfVUxvbmcgaW5kZXgpIHsKICAgIGlmIChpbmRleCA+PSBwZF9sZW4pIF9DT1JCQV9ib3VuZF9j
aGVja19lcnJvcigpOwogICAgcmV0dXJuIHBkX2J1ZltpbmRleF07CiAgfQogIGlubGluZSBjb25z
dCBUJiBvcGVyYXRvcltdIChfQ09SQkFfVUxvbmcgaW5kZXgpIGNvbnN0IHsKICAgIGlmIChpbmRl
eCA+PSBwZF9sZW4pIF9DT1JCQV9ib3VuZF9jaGVja19lcnJvcigpOwogICAgcmV0dXJuIHBkX2J1
ZltpbmRleF07CiAgfQogIHN0YXRpYyBpbmxpbmUgVCogYWxsb2NidWYoX0NPUkJBX1VMb25nIG5l
bGVtcykgewogICAgVCogdG1wID0gMDsKICAgIGlmIChuZWxlbXMpIHsKICAgICAgdG1wID0gbmV3
IFRbbmVsZW1zXTsKICAgIH0KICAgIHJldHVybiB0bXA7CiAgfQogIHN0YXRpYyBpbmxpbmUgdm9p
ZCBmcmVlYnVmKFQgKiBiKSB7CiAgICBpZiAoYikgZGVsZXRlIFtdIGI7CiAgfQoKCiAgaW5saW5l
IF9DT1JCQV9Cb29sZWFuIHJlbGVhc2UoKSBjb25zdCB7IHJldHVybiBwZF9yZWw7IH0KCiAgaW5s
aW5lIFQqIGdldF9idWZmZXIoX0NPUkJBX0Jvb2xlYW4gb3JwaGFuID0gMCkgewogICAgaWYgKHBk
X21heCAmJiAhcGRfYnVmKSB7CiAgICAgIGNvcHlidWZmZXIocGRfbWF4KTsKICAgIH0KICAgIGlm
ICghb3JwaGFuKSB7CiAgICAgIHJldHVybiBwZF9idWY7CiAgICB9CiAgICBlbHNlIHsKICAgICAg
aWYgKCFwZF9yZWwpCiAgICAgICAgcmV0dXJuIDA7CiAgICAgIGVsc2UgewogICAgICAgIFQqIHRt
cCA9IHBkX2J1ZjsKICAgICAgICBwZF9idWYgPSAwOwogICAgICAgIGlmICghcGRfYm91bmRlZCkg
ewogICAgICAgICAgcGRfbWF4ID0gMDsKICAgICAgICB9CiAgICAgICAgcGRfbGVuID0gMDsKICAg
ICAgICBwZF9yZWwgPSAxOwogICAgICAgIHJldHVybiB0bXA7CiAgICAgIH0KICAgIH0KICB9Cgog
IGlubGluZSBjb25zdCBUKiBnZXRfYnVmZmVyKCkgY29uc3QgewogICAgaWYgKHBkX21heCAmJiAh
cGRfYnVmKSB7CgogICAgICBUX3NlcSogcyA9IGNvbnN0X2Nhc3Q8VF9zZXEqPih0aGlzKTsKCgoK
ICAgICAgcy0+Y29weWJ1ZmZlcihwZF9tYXgpOwogICAgfQogICAgcmV0dXJuIHBkX2J1ZjsKICB9
CgogIGlubGluZSB+X0NPUkJBX1NlcXVlbmNlKCkgewogICAgaWYgKHBkX3JlbCAmJiBwZF9idWYp
IGZyZWVidWYocGRfYnVmKTsKICAgIHBkX2J1ZiA9IDA7CiAgfQoKCiAgaW5saW5lIFQqIE5QX2Rh
dGEoKSBjb25zdCB7IHJldHVybiBwZF9idWY7IH0KICBpbmxpbmUgdm9pZCBOUF9ub3JlbGVhc2Uo
KSB7IHBkX3JlbCA9IDA7IH0KCiAgaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0gKE5ldEJ1ZmZlcmVk
U3RyZWFtICZzKSBjb25zdDsKICBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PSAoTmV0QnVmZmVyZWRT
dHJlYW0gJnMpOwogIGlubGluZSB2b2lkIG9wZXJhdG9yPj49IChNZW1CdWZmZXJlZFN0cmVhbSAm
cykgY29uc3Q7CiAgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKE1lbUJ1ZmZlcmVkU3RyZWFtICZz
KTsKCnByb3RlY3RlZDoKICBpbmxpbmUgX0NPUkJBX1NlcXVlbmNlKCkgOiBwZF9tYXgoMCksIHBk
X2xlbigwKSwgcGRfcmVsKDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkX2JvdW5k
ZWQoMCksIHBkX2J1ZigwKSB7IH0KCiAgaW5saW5lIF9DT1JCQV9TZXF1ZW5jZShfQ09SQkFfVUxv
bmcgbWF4LCBfQ09SQkFfQm9vbGVhbiBib3VuZGVkPTApIDoKICAgIHBkX21heChtYXgpLCBwZF9s
ZW4oMCksIHBkX3JlbCgxKSwgcGRfYm91bmRlZChib3VuZGVkKSwgcGRfYnVmKDApIHt9CgogIGlu
bGluZSBfQ09SQkFfU2VxdWVuY2UoY29uc3QgX0NPUkJBX1NlcXVlbmNlPFQ+JiBzKQogICAgICAg
ICAgICAgIDogcGRfbWF4KHMucGRfbWF4KSwKICAgICAgICAgICAgICAgIHBkX2xlbigwKSwKICAg
ICAgICAgICAgICAgIHBkX3JlbCgxKSwKICAgICAgICAgICAgICAgIHBkX2JvdW5kZWQocy5wZF9i
b3VuZGVkKSwgcGRfYnVmKDApIHsKICAgIGxlbmd0aChzLnBkX2xlbik7CiAgICBmb3IgKF9DT1JC
QV9VTG9uZyBpPTA7IGkgPCBwZF9sZW47IGkrKykgewogICAgICBwZF9idWZbaV0gPSBzLnBkX2J1
ZltpXTsKICAgIH0KICB9CgogIGlubGluZSBfQ09SQkFfU2VxdWVuY2UoX0NPUkJBX1VMb25nIG1h
eCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9VTG9uZyBsZW4sCiAgICAgICAgICAg
ICAgICAgICAgICAgICBUICp2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9C
b29sZWFuIHJlbGVhc2UgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xl
YW4gYm91bmRlZCA9IDAKICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgOiBwZF9tYXgo
bWF4KSwKICAgICAgICBwZF9sZW4obGVuKSwKICAgICAgICBwZF9yZWwocmVsZWFzZSksCiAgICAg
ICAgcGRfYm91bmRlZChib3VuZGVkKSwKICAgICAgICBwZF9idWYodmFsdWUpCiAgewogICAgaWYg
KGxlbiA+IG1heCB8fCAobGVuICYmICF2YWx1ZSkpIHsKICAgICAgX0NPUkJBX2JvdW5kX2NoZWNr
X2Vycm9yKCk7CgogICAgfQogIH0KCiAgaW5saW5lIF9DT1JCQV9TZXF1ZW5jZTxUPiAmb3BlcmF0
b3I9IChjb25zdCBfQ09SQkFfU2VxdWVuY2U8VD4gJnMpCiAgewogICAgbGVuZ3RoKHMucGRfbGVu
KTsKICAgIGZvciAodW5zaWduZWQgbG9uZyBpPTA7IGkgPCBwZF9sZW47IGkrKykgewogICAgICBw
ZF9idWZbaV0gPSBzLnBkX2J1ZltpXTsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAg
aW5saW5lIHZvaWQgcmVwbGFjZShfQ09SQkFfVUxvbmcgbWF4LCBfQ09SQkFfVUxvbmcgbGVuLCBU
KiBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSA9IDAp
IHsKICAgIGlmIChsZW4gPiBtYXggfHwgKGxlbiAmJiAhZGF0YSkpIHsKICAgICAgX0NPUkJBX2Jv
dW5kX2NoZWNrX2Vycm9yKCk7CgogICAgfQogICAgaWYgKHBkX3JlbCAmJiBwZF9idWYpIHsKICAg
ICAgZnJlZWJ1ZihwZF9idWYpOwogICAgfQogICAgcGRfbWF4ID0gbWF4OwogICAgcGRfbGVuID0g
bGVuOwogICAgcGRfYnVmID0gZGF0YTsKICAgIHBkX3JlbCA9IHJlbGVhc2U7CiAgfQoKCnByaXZh
dGU6CgogIHZvaWQgY29weWJ1ZmZlcihfQ09SQkFfVUxvbmcgbmV3bWF4KSB7CgoKCiAgICBUKiBu
ZXdidWYgPSBhbGxvY2J1ZihuZXdtYXgpOwogICAgaWYgKCFuZXdidWYpIHsKICAgICAgX0NPUkJB
X25ld19vcGVyYXRvcl9yZXR1cm5fbnVsbCgpOwoKICAgIH0KICAgIGZvciAodW5zaWduZWQgbG9u
ZyBpPTA7IGkgPCBwZF9sZW47IGkrKykgewogICAgICAgbmV3YnVmW2ldID0gcGRfYnVmW2ldOwog
ICAgfQogICAgaWYgKHBkX3JlbCAmJiBwZF9idWYpIHsKICAgICAgZnJlZWJ1ZihwZF9idWYpOwog
ICAgfQogICAgZWxzZSB7CiAgICAgIHBkX3JlbCA9IDE7CiAgICB9CiAgICBwZF9idWYgPSBuZXdi
dWY7CiAgICBwZF9tYXggPSBuZXdtYXg7CiAgfQoKICBfQ09SQkFfVUxvbmcgcGRfbWF4OwogIF9D
T1JCQV9VTG9uZyBwZF9sZW47CiAgX0NPUkJBX0Jvb2xlYW4gcGRfcmVsOwogIF9DT1JCQV9Cb29s
ZWFuIHBkX2JvdW5kZWQ7CiAgVCAqcGRfYnVmOwp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpj
bGFzcyBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlIDogcHVibGljIF9DT1JCQV9TZXF1ZW5jZTxU
PiB7CnB1YmxpYzoKICB0eXBlZGVmIF9DT1JCQV9TZXF1ZW5jZTxUPiBCYXNlVCA7CiAgaW5saW5l
IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2UoKSB7fQogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVk
X1NlcXVlbmNlKF9DT1JCQV9VTG9uZyBtYXgpIDogX0NPUkJBX1NlcXVlbmNlPFQ+KG1heCkge30K
ICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZShjb25zdCBfQ09SQkFfVW5ib3VuZGVk
X1NlcXVlbmNlPFQ+JiBzKQogICAgIDogX0NPUkJBX1NlcXVlbmNlPFQ+KHMpIHt9CiAgaW5saW5l
IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2UoX0NPUkJBX1VMb25nIG1heCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfVUxvbmcgbGVuLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFQgKnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9DT1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAwKQogICAgIDogX0NPUkJBX1NlcXVlbmNl
PFQ+KG1heCxsZW4sdmFsdWUscmVsZWFzZSkge30KICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9T
ZXF1ZW5jZTxUPiAmb3BlcmF0b3I9IChjb25zdCBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlPFQ+
ICZzKSB7CiAgICBfQ09SQkFfU2VxdWVuY2U8VD46Om9wZXJhdG9yPSAocyk7CiAgICByZXR1cm4g
KnRoaXM7CiAgfQoKICBpbmxpbmUgfl9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2UoKSB7fQoKCgog
IGlubGluZSB2b2lkIHJlcGxhY2UoX0NPUkJBX1VMb25nIG1heCwgX0NPUkJBX1VMb25nIGxlbiwg
VCogZGF0YSwKICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAw
KSB7CiAgICBfQ09SQkFfU2VxdWVuY2U8VD46OnJlcGxhY2UobWF4LGxlbixkYXRhLHJlbGVhc2Up
OwogIH0KCiAgaW5saW5lIHNpemVfdCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90IGluaXRpYWxvZmZz
ZXQpIGNvbnN0IHsKICAgIHNpemVfdCBhbGlnbmVkc2l6ZSA9ICgoaW5pdGlhbG9mZnNldCszKSAm
IH4oKGludCkzKSkrc2l6ZW9mKF9DT1JCQV9VTG9uZyk7CiAgICBmb3IgKHVuc2lnbmVkIGxvbmcg
aT0wOyBpIDwgQmFzZVQ6Omxlbmd0aCgpOyBpKyspIHsKICAgICAgYWxpZ25lZHNpemUgPSBCYXNl
VDo6TlBfZGF0YSgpW2ldLl9OUF9hbGlnbmVkU2l6ZShhbGlnbmVkc2l6ZSk7CiAgICB9CiAgICBy
ZXR1cm4gYWxpZ25lZHNpemU7CiAgfQp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBULGludCBlbG1T
aXplLGludCBlbG1BbGlnbm1lbnQ+CmNsYXNzIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2Vfd19G
aXhTaXplRWxlbWVudAogICA6IHB1YmxpYyBfQ09SQkFfU2VxdWVuY2U8VD4KewpwdWJsaWM6CiAg
dHlwZWRlZiBfQ09SQkFfU2VxdWVuY2U8VD4gQmFzZVQgOwogIGlubGluZSBfQ09SQkFfVW5ib3Vu
ZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVsZW1lbnQoKSB7fQogIGlubGluZSBfQ09SQkFfVW5ib3Vu
ZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVsZW1lbnQoX0NPUkJBX1VMb25nIG1heCkKICAgIDogX0NP
UkJBX1NlcXVlbmNlPFQ+KG1heCkge30KICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5j
ZV93X0ZpeFNpemVFbGVtZW50IChjb25zdAogICAgICAgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5j
ZV93X0ZpeFNpemVFbGVtZW50PFQsZWxtU2l6ZSxlbG1BbGlnbm1lbnQ+JiBzKQogICAgOiBfQ09S
QkFfU2VxdWVuY2U8VD4ocykge30KICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV93
X0ZpeFNpemVFbGVtZW50KF9DT1JCQV9VTG9uZyBtYXgsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfVUxvbmcgbGVuLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCAqdmFsdWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm9v
bGVhbiByZWxlYXNlID0gMCkKICAgIDogX0NPUkJBX1NlcXVlbmNlPFQ+KG1heCxsZW4sdmFsdWUs
cmVsZWFzZSkge30KICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV93X0ZpeFNpemVF
bGVtZW50PFQsZWxtU2l6ZSxlbG1BbGlnbm1lbnQ+ICYKICAgICAgb3BlcmF0b3I9CiAgICAgICAg
KGNvbnN0CiAgICAgICAgICBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVsZW1l
bnQ8VCxlbG1TaXplLGVsbUFsaWdubWVudD4gJgogICAgICAgICBzKQogIHsKICAgIF9DT1JCQV9T
ZXF1ZW5jZTxUPjo6b3BlcmF0b3I9IChzKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5saW5l
IH5fQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVsZW1lbnQoKSB7fQoKCgogIGlu
bGluZSB2b2lkIHJlcGxhY2UoX0NPUkJBX1VMb25nIG1heCwgX0NPUkJBX1VMb25nIGxlbiwgVCog
ZGF0YSwKICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAwKSB7
CiAgICBfQ09SQkFfU2VxdWVuY2U8VD46OnJlcGxhY2UobWF4LGxlbixkYXRhLHJlbGVhc2UpOwog
IH0KCiAgaW5saW5lIHNpemVfdCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90IGluaXRpYWxvZmZzZXQp
IGNvbnN0IHsKICAgIHNpemVfdCBhbGlnbmVkc2l6ZSA9ICgoaW5pdGlhbG9mZnNldCszKSAmIH4o
KGludCkzKSkrc2l6ZW9mKF9DT1JCQV9VTG9uZyk7CiAgICBpZiAoQmFzZVQ6Omxlbmd0aCgpKSB7
CiAgICAgIGFsaWduZWRzaXplID0gKChhbGlnbmVkc2l6ZSsoZWxtQWxpZ25tZW50LTEpKSAmIH4o
ZWxtQWxpZ25tZW50LTEpKTsKICAgICAgYWxpZ25lZHNpemUgKz0gQmFzZVQ6Omxlbmd0aCgpICog
ZWxtU2l6ZTsKICAgIH0KICAgIHJldHVybiBhbGlnbmVkc2l6ZTsKICB9CgogIGlubGluZSB2b2lk
IG9wZXJhdG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSAmcykgY29uc3Q7CiAgaW5saW5lIHZvaWQg
b3BlcmF0b3I8PD0gKE5ldEJ1ZmZlcmVkU3RyZWFtICZzKTsKICBpbmxpbmUgdm9pZCBvcGVyYXRv
cj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0gJnMpIGNvbnN0OwogIGlubGluZSB2b2lkIG9wZXJhdG9y
PDw9IChNZW1CdWZmZXJlZFN0cmVhbSAmcyk7Cn07CgoKCgoKY2xhc3MgX0NPUkJBX1VuYm91bmRl
ZF9TZXF1ZW5jZV9fQm9vbGVhbgogICA6IHB1YmxpYyBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNl
X3dfRml4U2l6ZUVsZW1lbnQ8X0NPUkJBX0Jvb2xlYW4sMSwxPgp7CnB1YmxpYzoKICB0eXBlZGVm
IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2Vfd19GaXhTaXplRWxlbWVudDxfQ09SQkFfQm9vbGVh
biwxLDE+IEJhc2VUIDsKICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fQm9vbGVh
bigpIHt9CiAgaW5saW5lIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX0Jvb2xlYW4oX0NPUkJB
X1VMb25nIG1heCkKICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV93X0ZpeFNpemVFbGVt
ZW50PF9DT1JCQV9Cb29sZWFuLDEsMT4obWF4KSB7fQogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVk
X1NlcXVlbmNlX19Cb29sZWFuKF9DT1JCQV9VTG9uZyBtYXgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfVUxvbmcgbGVuLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xl
YW4gKnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSA9IDApCiAgICA6IF9DT1JCQV9VbmJvdW5kZWRf
U2VxdWVuY2Vfd19GaXhTaXplRWxlbWVudDxfQ09SQkFfQm9vbGVhbiwxLDE+KG1heCxsZW4sdmFs
dWUscmVsZWFzZSkge30KICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fQm9vbGVh
biAoY29uc3QKICAgICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX0Jvb2xlYW4mIHMpCiAg
ICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2Vfd19GaXhTaXplRWxlbWVudDxfQ09SQkFfQm9v
bGVhbiwxLDE+KHMpIHt9CiAgaW5saW5lIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX0Jvb2xl
YW4mIG9wZXJhdG9yPSAoY29uc3QKICAgICAgICAgICAgICAgICBfQ09SQkFfVW5ib3VuZGVkX1Nl
cXVlbmNlX19Cb29sZWFuJiBzKSB7CiAgICAgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV93X0Zp
eFNpemVFbGVtZW50PF9DT1JCQV9Cb29sZWFuLDEsMT46Om9wZXJhdG9yPSAocyk7CiAgICAgcmV0
dXJuICp0aGlzOwogIH0KICBpbmxpbmUgfl9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX0Jvb2xl
YW4oKSB7fQoKICBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PSAoTmV0QnVmZmVyZWRTdHJlYW0gJnMp
IGNvbnN0OwogIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9IChOZXRCdWZmZXJlZFN0cmVhbSAmcyk7
CiAgaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0gKE1lbUJ1ZmZlcmVkU3RyZWFtICZzKSBjb25zdDsK
ICBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PSAoTWVtQnVmZmVyZWRTdHJlYW0gJnMpOwoKfTsKCgoK
CgpjbGFzcyBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19PY3RldAogICA6IHB1YmxpYyBfQ09S
QkFfVW5ib3VuZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVsZW1lbnQ8X0NPUkJBX09jdGV0LDEsMT4K
ewpwdWJsaWM6CiAgaW5saW5lIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX09jdGV0KCkge30K
ICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fT2N0ZXQoX0NPUkJBX1VMb25nIG1h
eCkKICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV93X0ZpeFNpemVFbGVtZW50PF9DT1JC
QV9PY3RldCwxLDEgPihtYXgpIHt9CiAgaW5saW5lIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2Vf
X09jdGV0KF9DT1JCQV9VTG9uZyBtYXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQ09SQkFfVUxvbmcgbGVuLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX09jdGV0ICp2YWx1ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9C
b29sZWFuIHJlbGVhc2UgPSAwKQogICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX3dfRml4
U2l6ZUVsZW1lbnQ8X0NPUkJBX09jdGV0LDEsMSA+KG1heCxsZW4sdmFsdWUscmVsZWFzZSkge30K
ICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fT2N0ZXQgKGNvbnN0CiAgICAgICBf
Q09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19PY3RldCYgcykKICAgIDogX0NPUkJBX1VuYm91bmRl
ZF9TZXF1ZW5jZV93X0ZpeFNpemVFbGVtZW50PF9DT1JCQV9PY3RldCwxLDEgPihzKSB7fQogIGlu
bGluZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19PY3RldCYgb3BlcmF0b3I9IChjb25zdAog
ICAgICAgICAgICAgICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX09jdGV0JiBzKSB7CiAg
ICAgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV93X0ZpeFNpemVFbGVtZW50PF9DT1JCQV9PY3Rl
dCwxLDE+OjpvcGVyYXRvcj0gKHMpOwogICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5saW5lIH5f
Q09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19PY3RldCgpIHt9Cn07CgoKCgoKdGVtcGxhdGUgPGNs
YXNzIFQsaW50IG1heD4KY2xhc3MgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2UgOiBwdWJsaWMgX0NP
UkJBX1NlcXVlbmNlPFQ+IHsKcHVibGljOgogIHR5cGVkZWYgX0NPUkJBX1NlcXVlbmNlPFQ+IEJh
c2VUIDsKICBpbmxpbmUgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2UoKSA6IF9DT1JCQV9TZXF1ZW5j
ZTxUPihtYXgsMSkge30KICBpbmxpbmUgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2UoX0NPUkJBX1VM
b25nIGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCAqdmFsdWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAwKQog
ICAgICAgICAgICA6IF9DT1JCQV9TZXF1ZW5jZTxUPihtYXgsbGVuLHZhbHVlLHJlbGVhc2UsMSkg
e30KICBpbmxpbmUgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2UoY29uc3QgX0NPUkJBX0JvdW5kZWRf
U2VxdWVuY2U8VCxtYXg+JiBzKQogICAgICAgICAgICA6IF9DT1JCQV9TZXF1ZW5jZTxUPihzKSB7
fQogIGlubGluZSB+X0NPUkJBX0JvdW5kZWRfU2VxdWVuY2UoKSB7fQogIGlubGluZSBfQ09SQkFf
Qm91bmRlZF9TZXF1ZW5jZTxULG1heD4gJm9wZXJhdG9yPSAoY29uc3QgX0NPUkJBX0JvdW5kZWRf
U2VxdWVuY2U8VCxtYXg+ICZzKSB7CiAgICBfQ09SQkFfU2VxdWVuY2U8VD46Om9wZXJhdG9yPSAo
cyk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgaW5saW5lIHZvaWQgcmVwbGFjZShfQ09SQkFf
VUxvbmcgbGVuLCBUKiBkYXRhLF9DT1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAwKSB7CiAgICBfQ09S
QkFfU2VxdWVuY2U8VD46OnJlcGxhY2UobWF4LGxlbixkYXRhLHJlbGVhc2UpOwogIH0KCgogIGlu
bGluZSBzaXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBpbml0aWFsb2Zmc2V0KSBjb25zdCB7
CiAgICBzaXplX3QgYWxpZ25lZHNpemUgPSAoKGluaXRpYWxvZmZzZXQrMykgJiB+KChpbnQpMykp
K3NpemVvZihfQ09SQkFfVUxvbmcpOwogICAgZm9yICh1bnNpZ25lZCBsb25nIGk9MDsgaSA8IEJh
c2VUOjpsZW5ndGgoKTsgaSsrKSB7CiAgICAgIGFsaWduZWRzaXplID0gQmFzZVQ6Ok5QX2RhdGEo
KVtpXS5fTlBfYWxpZ25lZFNpemUoYWxpZ25lZHNpemUpOwogICAgfQogICAgcmV0dXJuIGFsaWdu
ZWRzaXplOwogIH0KCn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQsaW50IG1heCxpbnQgZWxtU2l6
ZSwgaW50IGVsbUFsaWdubWVudD4KY2xhc3MgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2Vfd19GaXhT
aXplRWxlbWVudAogIDogcHVibGljIF9DT1JCQV9TZXF1ZW5jZTxUPgp7CnB1YmxpYzoKICB0eXBl
ZGVmIF9DT1JCQV9TZXF1ZW5jZTxUPiBCYXNlVCA7CiAgaW5saW5lIF9DT1JCQV9Cb3VuZGVkX1Nl
cXVlbmNlX3dfRml4U2l6ZUVsZW1lbnQoKSA6IF9DT1JCQV9TZXF1ZW5jZTxUPihtYXgsMSkge30K
ICBpbmxpbmUgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2Vfd19GaXhTaXplRWxlbWVudChfQ09SQkFf
VUxvbmcgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCAq
dmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFf
Qm9vbGVhbiByZWxlYXNlID0gMCkKICAgIDogX0NPUkJBX1NlcXVlbmNlPFQ+KG1heCxsZW4sdmFs
dWUscmVsZWFzZSwxKSB7fQogIGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV93X0ZpeFNp
emVFbGVtZW50KGNvbnN0CiAgICAgIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVs
ZW1lbnQ8VCxtYXgsZWxtU2l6ZSxlbG1BbGlnbm1lbnQ+JiBzKQogICAgOiBfQ09SQkFfU2VxdWVu
Y2U8VD4ocykge30KICBpbmxpbmUgfl9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVs
ZW1lbnQoKSB7fQoKICBpbmxpbmUgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2Vfd19GaXhTaXplRWxl
bWVudDxULG1heCxlbG1TaXplLGVsbUFsaWdubWVudD4mIG9wZXJhdG9yPShjb25zdCBfQ09SQkFf
Qm91bmRlZF9TZXF1ZW5jZV93X0ZpeFNpemVFbGVtZW50PFQsbWF4LGVsbVNpemUsZWxtQWxpZ25t
ZW50PiYgcykgewogICAgX0NPUkJBX1NlcXVlbmNlPFQ+OjpvcGVyYXRvcj0gKHMpOwogICAgcmV0
dXJuICp0aGlzOwogIH0KCgoKICBpbmxpbmUgdm9pZCByZXBsYWNlKF9DT1JCQV9VTG9uZyBsZW4s
IFQqIGRhdGEsX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSA9IDApIHsKICAgIF9DT1JCQV9TZXF1ZW5j
ZTxUPjo6cmVwbGFjZShtYXgsbGVuLGRhdGEscmVsZWFzZSk7CiAgfQoKCiAgaW5saW5lIHNpemVf
dCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90IGluaXRpYWxvZmZzZXQpIGNvbnN0IHsKICAgIHNpemVf
dCBhbGlnbmVkc2l6ZSA9ICgoaW5pdGlhbG9mZnNldCszKSAmIH4oKGludCkzKSkrc2l6ZW9mKF9D
T1JCQV9VTG9uZyk7CiAgICBpZiAoQmFzZVQ6Omxlbmd0aCgpKSB7CiAgICAgIGFsaWduZWRzaXpl
ID0gKChhbGlnbmVkc2l6ZSsoZWxtQWxpZ25tZW50LTEpKSAmIH4oZWxtQWxpZ25tZW50LTEpKTsK
ICAgICAgYWxpZ25lZHNpemUgKz0gQmFzZVQ6Omxlbmd0aCgpICogZWxtU2l6ZTsKICAgIH0KICAg
IHJldHVybiBhbGlnbmVkc2l6ZTsKICB9CgogIGlubGluZSB2b2lkIG9wZXJhdG9yPj49IChOZXRC
dWZmZXJlZFN0cmVhbSAmcykgY29uc3Q7CiAgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKE5ldEJ1
ZmZlcmVkU3RyZWFtICZzKTsKICBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRT
dHJlYW0gJnMpIGNvbnN0OwogIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9IChNZW1CdWZmZXJlZFN0
cmVhbSAmcyk7Cn07CgoKCgoKdGVtcGxhdGUgPGludCBtYXg+CmNsYXNzIF9DT1JCQV9Cb3VuZGVk
X1NlcXVlbmNlX19Cb29sZWFuCiAgIDogcHVibGljIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX3df
Rml4U2l6ZUVsZW1lbnQ8X0NPUkJBX0Jvb2xlYW4sbWF4LDEsMT4KewpwdWJsaWM6CiAgdHlwZWRl
ZiBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV93X0ZpeFNpemVFbGVtZW50PF9DT1JCQV9Cb29sZWFu
LG1heCwxLDE+IEJhc2VUIDsKICBpbmxpbmUgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfX0Jvb2xl
YW4oKSB7fQogIGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9fQm9vbGVhbihfQ09SQkFf
VUxvbmcgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NP
UkJBX0Jvb2xlYW4gKnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSA9IDApCiAgICA6IEJhc2VUKGxlbix2YWx1ZSxy
ZWxlYXNlKSB7fQogIGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9fQm9vbGVhbihjb25z
dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2Vf
X0Jvb2xlYW48bWF4PiYgcykKICAgIDogX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2Vfd19GaXhTaXpl
RWxlbWVudDxfQ09SQkFfQm9vbGVhbixtYXgsMSwxPihzKSB7fQogIGlubGluZSBfQ09SQkFfQm91
bmRlZF9TZXF1ZW5jZV9fQm9vbGVhbiYgb3BlcmF0b3I9IChjb25zdAogICAgICAgICAgICAgICAg
IF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX19Cb29sZWFuJiBzKSB7CiAgICAgQmFzZVQ6Om9wZXJh
dG9yPSAocyk7CiAgICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIH5fQ09SQkFfQm91bmRl
ZF9TZXF1ZW5jZV9fQm9vbGVhbigpIHt9CgogIGlubGluZSB2b2lkIG9wZXJhdG9yPj49IChOZXRC
dWZmZXJlZFN0cmVhbSAmcykgY29uc3Q7CiAgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKE5ldEJ1
ZmZlcmVkU3RyZWFtICZzKTsKICBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRT
dHJlYW0gJnMpIGNvbnN0OwogIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9IChNZW1CdWZmZXJlZFN0
cmVhbSAmcyk7Cgp9OwoKCgoKCnRlbXBsYXRlIDxpbnQgbWF4PgpjbGFzcyBfQ09SQkFfQm91bmRl
ZF9TZXF1ZW5jZV9fT2N0ZXQKICAgOiBwdWJsaWMgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2Vfd19G
aXhTaXplRWxlbWVudDxfQ09SQkFfT2N0ZXQsbWF4LDEsMT4KewpwdWJsaWM6CiAgaW5saW5lIF9D
T1JCQV9Cb3VuZGVkX1NlcXVlbmNlX19PY3RldCgpIHt9CiAgaW5saW5lIF9DT1JCQV9Cb3VuZGVk
X1NlcXVlbmNlX19PY3RldChfQ09SQkFfVUxvbmcgbGVuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX09jdGV0ICp2YWx1ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAwKQog
ICAgOiBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV93X0ZpeFNpemVFbGVtZW50PF9DT1JCQV9PY3Rl
dCxtYXgsMSwxPihsZW4sdmFsdWUscmVsZWFzZSkge30KICBpbmxpbmUgX0NPUkJBX0JvdW5kZWRf
U2VxdWVuY2VfX09jdGV0KGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9D
T1JCQV9Cb3VuZGVkX1NlcXVlbmNlX19PY3RldDxtYXg+JiBzKQogICAgOiBfQ09SQkFfQm91bmRl
ZF9TZXF1ZW5jZV93X0ZpeFNpemVFbGVtZW50PF9DT1JCQV9PY3RldCxtYXgsMSwxPihzKSB7fQog
IGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9fT2N0ZXQmIG9wZXJhdG9yPSAoY29uc3QK
ICAgICAgICAgICAgICAgICBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9fT2N0ZXQmIHMpIHsKICAg
ICBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV93X0ZpeFNpemVFbGVtZW50PF9DT1JCQV9PY3RldCxt
YXgsMSwxPjo6b3BlcmF0b3I9IChzKTsKICAgICByZXR1cm4gKnRoaXM7CiAgfQogIGlubGluZSB+
X0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfX09jdGV0KCkge30KfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgVCxjbGFzcyBUX3NsaWNlLGNsYXNzIFRlbG0saW50IGRpbWVuc2lvbj4KY2xhc3MgX0NPUkJB
X1NlcXVlbmNlX0FycmF5IHsKcHVibGljOgogIHR5cGVkZWYgX0NPUkJBX1NlcXVlbmNlX0FycmF5
PFQsVF9zbGljZSxUZWxtLGRpbWVuc2lvbj4gVF9zZXE7CgogIGlubGluZSBfQ09SQkFfVUxvbmcg
bWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIHBkX21heDsgfQogIGlubGluZSBfQ09SQkFfVUxvbmcg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gcGRfbGVuOyB9CiAgaW5saW5lIHZvaWQgbGVuZ3RoKF9D
T1JCQV9VTG9uZyBsZW4pCiAgewogICAgaWYgKHBkX2JvdW5kZWQgJiYgbGVuID4gcGRfbWF4KSB7
CiAgICAgIF9DT1JCQV9ib3VuZF9jaGVja19lcnJvcigpOwoKICAgIH0KCiAgICBpZiAobGVuKSB7
CgoKICAgICAgaWYgKCFwZF9idWYgfHwgbGVuID4gcGRfbWF4KSB7CiAgICAgICAgY29weWJ1ZmZl
cigoKGxlbiA+IHBkX21heCkgPyBsZW4gOiBwZF9tYXgpKTsKICAgICAgfQogICAgfQoKICAgIHBk
X2xlbiA9IGxlbjsKCiAgfQoKCiAgaW5saW5lIFRfc2xpY2UqIG9wZXJhdG9yW10gKF9DT1JCQV9V
TG9uZyBpbmRleCkKICB7CiAgICBpZiAoaW5kZXggPj0gcGRfbGVuKSBfQ09SQkFfYm91bmRfY2hl
Y2tfZXJyb3IoKTsKICAgIHJldHVybiAoVF9zbGljZSopKHBkX2J1ZltpbmRleF0pOwogIH0KICBp
bmxpbmUgY29uc3QgVF9zbGljZSogb3BlcmF0b3JbXSAoX0NPUkJBX1VMb25nIGluZGV4KSBjb25z
dAogIHsKICAgIGlmIChpbmRleCA+PSBwZF9sZW4pIF9DT1JCQV9ib3VuZF9jaGVja19lcnJvcigp
OwogICAgcmV0dXJuIChjb25zdCBUX3NsaWNlKikocGRfYnVmW2luZGV4XSk7CiAgfQogIHN0YXRp
YyBpbmxpbmUgVCogYWxsb2NidWYoX0NPUkJBX1VMb25nIG5lbGVtcykKICB7CiAgICBpZiAobmVs
ZW1zKSByZXR1cm4gbmV3IFRbbmVsZW1zXTsKICAgIGVsc2UgcmV0dXJuIDA7CiAgfQogIHN0YXRp
YyBpbmxpbmUgdm9pZCBmcmVlYnVmKFQgKiBiKQogIHsKICAgIGlmIChiKSBkZWxldGUgW10gYjsK
ICAgIHJldHVybjsKICB9CgoKICBpbmxpbmUgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSgpIGNvbnN0
IHsgcmV0dXJuIHBkX3JlbDsgfQoKICBpbmxpbmUgVCogZ2V0X2J1ZmZlcihfQ09SQkFfQm9vbGVh
biBvcnBoYW4gPSAwKSB7CiAgICBpZiAocGRfbWF4ICYmICFwZF9idWYpIHsKICAgICAgY29weWJ1
ZmZlcihwZF9tYXgpOwogICAgfQogICAgaWYgKCFvcnBoYW4pIHsKICAgICAgcmV0dXJuIHBkX2J1
ZjsKICAgIH0KICAgIGVsc2UgewogICAgICBpZiAoIXBkX3JlbCkKICAgICAgICByZXR1cm4gMDsK
ICAgICAgZWxzZSB7CiAgICAgICAgVCogdG1wID0gcGRfYnVmOwogICAgICAgIHBkX2J1ZiA9IDA7
CiAgICAgICAgaWYgKCFwZF9ib3VuZGVkKSB7CiAgICAgICAgICBwZF9tYXggPSAwOwogICAgICAg
IH0KICAgICAgICBwZF9sZW4gPSAwOwogICAgICAgIHBkX3JlbCA9IDE7CiAgICAgICAgcmV0dXJu
IHRtcDsKICAgICAgfQogICAgfQogIH0KCiAgaW5saW5lIFQqIGdldF9idWZmZXIoKSBjb25zdCB7
CiAgICBpZiAocGRfbWF4ICYmICFwZF9idWYpIHsKCiAgICAgIFRfc2VxKiBzID0gY29uc3RfY2Fz
dDxUX3NlcSo+KHRoaXMpOwoKCgogICAgICBzLT5jb3B5YnVmZmVyKHBkX21heCk7CiAgICB9CiAg
ICByZXR1cm4gcGRfYnVmOwogIH0KCiAgaW5saW5lIH5fQ09SQkFfU2VxdWVuY2VfQXJyYXkoKSB7
CiAgICBpZiAocGRfcmVsICYmIHBkX2J1ZikgZnJlZWJ1ZihwZF9idWYpOwogICAgcGRfYnVmID0g
MDsKICAgIHJldHVybjsKICB9CgoKICBpbmxpbmUgVCAqTlBfZGF0YSgpIGNvbnN0IHsgcmV0dXJu
IHBkX2J1ZjsgfQogIGlubGluZSB2b2lkIE5QX25vcmVsZWFzZSgpIHsgcGRfcmVsID0gMDsgfQog
IGlubGluZSB2b2lkIG9wZXJhdG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSAmcykgY29uc3Q7CiAg
aW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKE5ldEJ1ZmZlcmVkU3RyZWFtICZzKTsKICBpbmxpbmUg
dm9pZCBvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0gJnMpIGNvbnN0OwogIGlubGluZSB2
b2lkIG9wZXJhdG9yPDw9IChNZW1CdWZmZXJlZFN0cmVhbSAmcyk7Cgpwcm90ZWN0ZWQ6CiAgaW5s
aW5lIF9DT1JCQV9TZXF1ZW5jZV9BcnJheSgpIDogcGRfbWF4KDApLCBwZF9sZW4oMCksIHBkX3Jl
bCgxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZF9ib3VuZGVkKDApLCBw
ZF9idWYoMCkgeyB9CgogIGlubGluZSBfQ09SQkFfU2VxdWVuY2VfQXJyYXkoX0NPUkJBX1VMb25n
IG1heCwgX0NPUkJBX0Jvb2xlYW4gYm91bmRlZD0wKSA6CiAgICBwZF9tYXgobWF4KSwgcGRfbGVu
KDApLCBwZF9yZWwoMSksIHBkX2JvdW5kZWQoYm91bmRlZCksIHBkX2J1ZigwKSB7fQoKICBpbmxp
bmUgX0NPUkJBX1NlcXVlbmNlX0FycmF5KGNvbnN0IF9DT1JCQV9TZXF1ZW5jZV9BcnJheTxULFRf
c2xpY2UsVGVsbSxkaW1lbnNpb24+JiBzKQogICAgICAgICAgICAgIDogcGRfbWF4KHMucGRfbWF4
KSwKICAgICAgICAgICAgICAgIHBkX2xlbigwKSwKICAgICAgICAgICAgICAgIHBkX3JlbCgxKSwK
ICAgICAgICAgICAgICAgIHBkX2JvdW5kZWQocy5wZF9ib3VuZGVkKSwgcGRfYnVmKDApCiAgewog
ICAgbGVuZ3RoKHMucGRfbGVuKTsKICAgIGZvciAoX0NPUkJBX1VMb25nIGk9MDsgaSA8IHBkX2xl
bjsgaSsrKSB7CiAgICAgIGZvciAoX0NPUkJBX1VMb25nIGo9MDsgaiA8IGRpbWVuc2lvbjsgaisr
KSB7CiAgICAgICAgKigoVGVsbSopKHBkX2J1ZltpXSkgKyBqKSA9ICooKFRlbG0qKShzLnBkX2J1
ZltpXSkgKyBqKTsKICAgICAgfQogICAgfQogIH0KCiAgaW5saW5lIF9DT1JCQV9TZXF1ZW5jZV9B
cnJheShfQ09SQkFfVUxvbmcgbWF4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NP
UkJBX1VMb25nIGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQgKnZhbHVlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSA9IDAs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiBib3VuZGVkID0g
MAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICA6IHBkX21heChtYXgpLAog
ICAgICAgIHBkX2xlbihsZW4pLAogICAgICAgIHBkX3JlbChyZWxlYXNlKSwKICAgICAgICBwZF9i
b3VuZGVkKGJvdW5kZWQpLAogICAgICAgIHBkX2J1Zih2YWx1ZSkKICB7CiAgICBpZiAobGVuID4g
bWF4IHx8IChsZW4gJiYgIXZhbHVlKSkgewogICAgICBfQ09SQkFfYm91bmRfY2hlY2tfZXJyb3Io
KTsKCiAgICB9CiAgfQoKCiAgaW5saW5lIF9DT1JCQV9TZXF1ZW5jZV9BcnJheTxULFRfc2xpY2Us
VGVsbSxkaW1lbnNpb24+ICZvcGVyYXRvcj0gKGNvbnN0IF9DT1JCQV9TZXF1ZW5jZV9BcnJheTxU
LFRfc2xpY2UsVGVsbSxkaW1lbnNpb24+ICZzKQogIHsKICAgIGxlbmd0aChzLnBkX2xlbik7CiAg
ICBmb3IgKHVuc2lnbmVkIGxvbmcgaT0wOyBpIDwgcGRfbGVuOyBpKyspIHsKICAgICAgZm9yIChf
Q09SQkFfVUxvbmcgaj0wOyBqIDwgZGltZW5zaW9uOyBqKyspIHsKICAgICAgICAqKChUZWxtKiko
cGRfYnVmW2ldKSArIGopID0gKigoVGVsbSopKHMucGRfYnVmW2ldKSArIGopOwogICAgICB9CiAg
ICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgaW5saW5lIHZvaWQgcmVwbGFjZShfQ09SQkFf
VUxvbmcgbWF4LCBfQ09SQkFfVUxvbmcgbGVuLCBUKiBkYXRhLAogICAgICAgICAgICAgICAgICAg
ICAgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSA9IDApIHsKICAgIGlmIChsZW4gPiBtYXggfHwgKGxl
biAmJiAhZGF0YSkpIHsKICAgICAgX0NPUkJBX2JvdW5kX2NoZWNrX2Vycm9yKCk7CgogICAgfQog
ICAgaWYgKHBkX3JlbCAmJiBwZF9idWYpIHsKICAgICAgZnJlZWJ1ZihwZF9idWYpOwogICAgfQog
ICAgcGRfbWF4ID0gbWF4OwogICAgcGRfbGVuID0gbGVuOwogICAgcGRfYnVmID0gZGF0YTsKICAg
IHBkX3JlbCA9IHJlbGVhc2U7CiAgfQoKCnByaXZhdGU6CgogIHZvaWQgY29weWJ1ZmZlcihfQ09S
QkFfVUxvbmcgbmV3bWF4KSB7CgoKCiAgICBUKiBuZXdidWYgPSBhbGxvY2J1ZihuZXdtYXgpOwog
ICAgaWYgKCFuZXdidWYpIHsKICAgICAgX0NPUkJBX25ld19vcGVyYXRvcl9yZXR1cm5fbnVsbCgp
OwoKICAgIH0KICAgIGZvciAodW5zaWduZWQgbG9uZyBpPTA7IGkgPCBwZF9sZW47IGkrKykgewog
ICAgICBmb3IgKF9DT1JCQV9VTG9uZyBqPTA7IGogPCBkaW1lbnNpb247IGorKykgewogICAgICAg
ICooKFRlbG0qKShuZXdidWZbaV0pICsgaikgPSAqKChUZWxtKikocGRfYnVmW2ldKSArIGopOwog
ICAgICB9CiAgICB9CiAgICBpZiAocGRfcmVsICYmIHBkX2J1ZikgewogICAgICBmcmVlYnVmKHBk
X2J1Zik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgcGRfcmVsID0gMTsKICAgIH0KICAgIHBkX2J1
ZiA9IG5ld2J1ZjsKICAgIHBkX21heCA9IG5ld21heDsKICB9CgogIF9DT1JCQV9VTG9uZyBwZF9t
YXg7CiAgX0NPUkJBX1VMb25nIHBkX2xlbjsKICBfQ09SQkFfQm9vbGVhbiBwZF9yZWw7CiAgX0NP
UkJBX0Jvb2xlYW4gcGRfYm91bmRlZDsKICBUKiBwZF9idWY7Cn07CgoKCgoKdGVtcGxhdGUgPGNs
YXNzIFQsY2xhc3MgVF9zbGljZSxjbGFzcyBUZWxtLGludCBkaW1lbnNpb24+CmNsYXNzIF9DT1JC
QV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXkgOiBwdWJsaWMgX0NPUkJBX1NlcXVlbmNlX0FycmF5
PFQsVF9zbGljZSxUZWxtLGRpbWVuc2lvbj4gewpwdWJsaWM6CiAgdHlwZWRlZiBfQ09SQkFfU2Vx
dWVuY2VfQXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uPiBCYXNlVCA7CiAgaW5saW5lIF9D
T1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXkoKSB7fQogIGlubGluZSBfQ09SQkFfVW5ib3Vu
ZGVkX1NlcXVlbmNlX0FycmF5KF9DT1JCQV9VTG9uZyBtYXgpIDogX0NPUkJBX1NlcXVlbmNlX0Fy
cmF5PFQsVF9zbGljZSxUZWxtLGRpbWVuc2lvbj4obWF4KSB7fQogIGlubGluZSBfQ09SQkFfVW5i
b3VuZGVkX1NlcXVlbmNlX0FycmF5KGNvbnN0IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJy
YXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uPiYgcykKICAgICA6IF9DT1JCQV9TZXF1ZW5jZV9B
cnJheTxULFRfc2xpY2UsVGVsbSxkaW1lbnNpb24+KHMpIHt9CiAgaW5saW5lIF9DT1JCQV9VbmJv
dW5kZWRfU2VxdWVuY2VfQXJyYXkoX0NPUkJBX1VMb25nIG1heCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfVUxvbmcgbGVuLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFQgKnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAwKQogICAgIDogX0NP
UkJBX1NlcXVlbmNlX0FycmF5PFQsVF9zbGljZSxUZWxtLGRpbWVuc2lvbj4obWF4LGxlbix2YWx1
ZSxyZWxlYXNlKSB7fQogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5PFQs
VF9zbGljZSxUZWxtLGRpbWVuc2lvbj4gJm9wZXJhdG9yPSAoY29uc3QgX0NPUkJBX1VuYm91bmRl
ZF9TZXF1ZW5jZV9BcnJheTxULFRfc2xpY2UsVGVsbSxkaW1lbnNpb24+ICZzKSB7CiAgICBCYXNl
VDo6b3BlcmF0b3I9IChzKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5saW5lIH5fQ09SQkFf
VW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5KCkge30KCgoKICBpbmxpbmUgdm9pZCByZXBsYWNlKF9D
T1JCQV9VTG9uZyBtYXgsIF9DT1JCQV9VTG9uZyBsZW4sIFQqIGRhdGEsCiAgICAgICAgICAgICAg
ICAgICAgICBfQ09SQkFfQm9vbGVhbiByZWxlYXNlID0gMCkgewogICAgQmFzZVQ6OnJlcGxhY2Uo
bWF4LGxlbixkYXRhLHJlbGVhc2UpOwogIH0KCgoKCgoKICBpbmxpbmUgc2l6ZV90IF9OUF9hbGln
bmVkU2l6ZShzaXplX3QgaW5pdGlhbG9mZnNldCkgY29uc3QgewogICAgc2l6ZV90IGFsaWduZWRz
aXplID0gKChpbml0aWFsb2Zmc2V0KzMpICYgfigoaW50KTMpKStzaXplb2YoX0NPUkJBX1VMb25n
KTsKICAgIGZvciAoX0NPUkJBX1VMb25nIGk9MDsKICAgICAgICAgaSA8IEJhc2VUOjpsZW5ndGgo
KTsKICAgICAgICAgaSsrKSB7CiAgICAgIGZvciAoX0NPUkJBX1VMb25nIGo9MDsgajxkaW1lbnNp
b247IGorKykgewogICAgICAgIGFsaWduZWRzaXplID0gKChUZWxtKikoQmFzZVQ6Ok5QX2RhdGEo
KVtpXSkgKyBqKS0+X05QX2FsaWduZWRTaXplKGFsaWduZWRzaXplKTsKICAgICAgfQogICAgfQog
ICAgcmV0dXJuIGFsaWduZWRzaXplOwogIH0KfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCxjbGFz
cyBUX3NsaWNlLCBjbGFzcyBUZWxtLGludCBkaW1lbnNpb24saW50IGVsbVNpemUsaW50IGVsbUFs
aWdubWVudD4KY2xhc3MgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJheV93X0ZpeFNpemVF
bGVtZW50CiAgIDogcHVibGljIF9DT1JCQV9TZXF1ZW5jZV9BcnJheTxULFRfc2xpY2UsVGVsbSxk
aW1lbnNpb24+CnsKcHVibGljOgogIHR5cGVkZWYgX0NPUkJBX1NlcXVlbmNlX0FycmF5PFQsVF9z
bGljZSxUZWxtLGRpbWVuc2lvbj4gQmFzZVQgOwogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVkX1Nl
cXVlbmNlX0FycmF5X3dfRml4U2l6ZUVsZW1lbnQoKSB7fQogIGlubGluZSBfQ09SQkFfVW5ib3Vu
ZGVkX1NlcXVlbmNlX0FycmF5X3dfRml4U2l6ZUVsZW1lbnQoX0NPUkJBX1VMb25nIG1heCkKICAg
IDogX0NPUkJBX1NlcXVlbmNlX0FycmF5PFQsVF9zbGljZSxUZWxtLGRpbWVuc2lvbj4obWF4KSB7
fQogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5X3dfRml4U2l6ZUVsZW1l
bnQgKGNvbnN0CiAgICAgICBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5X3dfRml4U2l6
ZUVsZW1lbnQ8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uLGVsbVNpemUsZWxtQWxpZ25tZW50PiYg
cykKICAgIDogX0NPUkJBX1NlcXVlbmNlX0FycmF5PFQsVF9zbGljZSxUZWxtLGRpbWVuc2lvbj4o
cykge30KICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJheV93X0ZpeFNpemVF
bGVtZW50KF9DT1JCQV9VTG9uZyBtYXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfVUxvbmcgbGVuLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCAqdmFsdWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
Q09SQkFfQm9vbGVhbiByZWxlYXNlID0gMCkKICAgIDogX0NPUkJBX1NlcXVlbmNlX0FycmF5PFQs
VF9zbGljZSxUZWxtLGRpbWVuc2lvbj4obWF4LGxlbix2YWx1ZSxyZWxlYXNlKSB7fQogIGlubGlu
ZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5X3dfRml4U2l6ZUVsZW1lbnQ8VCxUX3Ns
aWNlLFRlbG0sZGltZW5zaW9uLGVsbVNpemUsZWxtQWxpZ25tZW50PiAmCiAgICAgIG9wZXJhdG9y
PQogICAgICAgIChjb25zdAogICAgICAgICAgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJh
eV93X0ZpeFNpemVFbGVtZW50PFQsVF9zbGljZSxUZWxtLGRpbWVuc2lvbixlbG1TaXplLGVsbUFs
aWdubWVudD4gJgogICAgICAgICBzKQogIHsKICAgIEJhc2VUOjpvcGVyYXRvcj0gKHMpOwogICAg
cmV0dXJuICp0aGlzOwogIH0KICBpbmxpbmUgfl9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJy
YXlfd19GaXhTaXplRWxlbWVudCgpIHt9CgoKCiAgaW5saW5lIHZvaWQgcmVwbGFjZShfQ09SQkFf
VUxvbmcgbWF4LCBfQ09SQkFfVUxvbmcgbGVuLCBUKiBkYXRhLAogICAgICAgICAgICAgICAgICAg
ICAgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSA9IDApIHsKICAgIEJhc2VUOjpyZXBsYWNlKG1heCxs
ZW4sZGF0YSxyZWxlYXNlKTsKICB9CgoKCgoKCiAgaW5saW5lIHNpemVfdCBfTlBfYWxpZ25lZFNp
emUoc2l6ZV90IGluaXRpYWxvZmZzZXQpIGNvbnN0IHsKICAgIHNpemVfdCBhbGlnbmVkc2l6ZSA9
ICgoaW5pdGlhbG9mZnNldCszKSAmIH4oKGludCkzKSkrc2l6ZW9mKF9DT1JCQV9VTG9uZyk7CiAg
ICBpZiAoQmFzZVQ6Omxlbmd0aCgpKSB7CiAgICAgIGFsaWduZWRzaXplID0gKChhbGlnbmVkc2l6
ZSsoZWxtQWxpZ25tZW50LTEpKSAmIH4oZWxtQWxpZ25tZW50LTEpKTsKICAgICAgYWxpZ25lZHNp
emUgKz1CYXNlVDo6bGVuZ3RoKCkgKgogICAgICAgIGRpbWVuc2lvbiAqIGVsbVNpemU7CiAgICB9
CiAgICByZXR1cm4gYWxpZ25lZHNpemU7CiAgfQoKICBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PSAo
TmV0QnVmZmVyZWRTdHJlYW0gJnMpIGNvbnN0OwogIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9IChO
ZXRCdWZmZXJlZFN0cmVhbSAmcyk7CiAgaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0gKE1lbUJ1ZmZl
cmVkU3RyZWFtICZzKSBjb25zdDsKICBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PSAoTWVtQnVmZmVy
ZWRTdHJlYW0gJnMpOwp9OwoKCgoKCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFRfc2xpY2UsIGlu
dCBkaW1lbnNpb24+CmNsYXNzIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlfX0Jvb2xl
YW4KICAgOiBwdWJsaWMgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJheV93X0ZpeFNpemVF
bGVtZW50PFQsVF9zbGljZSxfQ09SQkFfQm9vbGVhbixkaW1lbnNpb24sMSwxPgp7CnB1YmxpYzoK
ICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJheV9fQm9vbGVhbigpIHt9CiAg
aW5saW5lIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlfX0Jvb2xlYW4oX0NPUkJBX1VM
b25nIG1heCkKICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJheV93X0ZpeFNpemVF
bGVtZW50PFQsVF9zbGljZSxfQ09SQkFfQm9vbGVhbixkaW1lbnNpb24sMSwxPihtYXgpIHt9CiAg
aW5saW5lIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlfX0Jvb2xlYW4oX0NPUkJBX1VM
b25nIG1heCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0NPUkJBX1VMb25nIGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVCAqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIHJlbGVh
c2UgPSAwKQogICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5X3dfRml4U2l6ZUVs
ZW1lbnQ8VCxUX3NsaWNlLF9DT1JCQV9Cb29sZWFuLGRpbWVuc2lvbiwxLDE+KG1heCxsZW4sdmFs
dWUscmVsZWFzZSkge30KICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJheV9f
Qm9vbGVhbiAoY29uc3QKICAgICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlfX0Jv
b2xlYW48VCxUX3NsaWNlLGRpbWVuc2lvbj4mIHMpCiAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2Vx
dWVuY2VfQXJyYXlfd19GaXhTaXplRWxlbWVudDxULFRfc2xpY2UsX0NPUkJBX0Jvb2xlYW4sZGlt
ZW5zaW9uLDEsMT4ocykge30KICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJh
eV9fQm9vbGVhbjxULFRfc2xpY2UsZGltZW5zaW9uPiYKICAgICAgb3BlcmF0b3I9IChjb25zdAog
ICAgICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlfX0Jvb2xlYW48VCxUX3NsaWNl
LGRpbWVuc2lvbj4mIHMpIHsKICAgICAgICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJy
YXlfd19GaXhTaXplRWxlbWVudDxULFRfc2xpY2UsX0NPUkJBX0Jvb2xlYW4sZGltZW5zaW9uLDEs
MT46Om9wZXJhdG9yPSAocyk7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUg
fl9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlfX0Jvb2xlYW4oKSB7fQoKICBpbmxpbmUg
dm9pZCBvcGVyYXRvcj4+PSAoTmV0QnVmZmVyZWRTdHJlYW0gJnMpIGNvbnN0OwogIGlubGluZSB2
b2lkIG9wZXJhdG9yPDw9IChOZXRCdWZmZXJlZFN0cmVhbSAmcyk7CiAgaW5saW5lIHZvaWQgb3Bl
cmF0b3I+Pj0gKE1lbUJ1ZmZlcmVkU3RyZWFtICZzKSBjb25zdDsKICBpbmxpbmUgdm9pZCBvcGVy
YXRvcjw8PSAoTWVtQnVmZmVyZWRTdHJlYW0gJnMpOwoKfTsKCgoKCgp0ZW1wbGF0ZTxjbGFzcyBU
LCBjbGFzcyBUX3NsaWNlLCBpbnQgZGltZW5zaW9uPgpjbGFzcyBfQ09SQkFfVW5ib3VuZGVkX1Nl
cXVlbmNlX0FycmF5X19PY3RldAogICA6IHB1YmxpYyBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNl
X0FycmF5X3dfRml4U2l6ZUVsZW1lbnQ8VCxUX3NsaWNlLF9DT1JCQV9PY3RldCxkaW1lbnNpb24s
MSwxPgp7CnB1YmxpYzoKICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJheV9f
T2N0ZXQoKSB7fQogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5X19PY3Rl
dChfQ09SQkFfVUxvbmcgbWF4KQogICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5
X3dfRml4U2l6ZUVsZW1lbnQ8VCxUX3NsaWNlLF9DT1JCQV9PY3RldCxkaW1lbnNpb24sMSwxPiht
YXgpIHt9CiAgaW5saW5lIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlfX09jdGV0KF9D
T1JCQV9VTG9uZyBtYXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9DT1JCQV9VTG9uZyBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQgKnZhbHVlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVh
biByZWxlYXNlID0gMCkKICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJheV93X0Zp
eFNpemVFbGVtZW50PFQsVF9zbGljZSxfQ09SQkFfT2N0ZXQsZGltZW5zaW9uLDEsMT4obWF4LGxl
bix2YWx1ZSxyZWxlYXNlKSB7fQogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX0Fy
cmF5X19PY3RldCAoY29uc3QKICAgICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlf
X09jdGV0PFQsVF9zbGljZSxkaW1lbnNpb24+JiBzKQogICAgOiBfQ09SQkFfVW5ib3VuZGVkX1Nl
cXVlbmNlX0FycmF5X3dfRml4U2l6ZUVsZW1lbnQ8VCxUX3NsaWNlLF9DT1JCQV9PY3RldCxkaW1l
bnNpb24sMSwxPihzKSB7fQogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5
X19PY3RldDxULFRfc2xpY2UsZGltZW5zaW9uPiYKICAgICAgb3BlcmF0b3I9IChjb25zdAogICAg
ICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlfX09jdGV0PFQsVF9zbGljZSxkaW1l
bnNpb24+JiBzKSB7CiAgICAgICAgICBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5X3df
Rml4U2l6ZUVsZW1lbnQ8VCxUX3NsaWNlLF9DT1JCQV9PY3RldCxkaW1lbnNpb24sMSwxPjo6b3Bl
cmF0b3I9IChzKTsKICAgICAgICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSB+X0NPUkJB
X1VuYm91bmRlZF9TZXF1ZW5jZV9BcnJheV9fT2N0ZXQoKSB7fQp9OwoKCgoKCnRlbXBsYXRlIDxj
bGFzcyBULGNsYXNzIFRfc2xpY2UsY2xhc3MgVGVsbSxpbnQgZGltZW5zaW9uLGludCBtYXg+CmNs
YXNzIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX0FycmF5IDogcHVibGljIF9DT1JCQV9TZXF1ZW5j
ZV9BcnJheTxULFRfc2xpY2UsVGVsbSxkaW1lbnNpb24+IHsKcHVibGljOgogIHR5cGVkZWYgX0NP
UkJBX1NlcXVlbmNlX0FycmF5PFQsVF9zbGljZSxUZWxtLGRpbWVuc2lvbj4gQmFzZVQgOwogIGlu
bGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9BcnJheSgpIDogX0NPUkJBX1NlcXVlbmNlX0Fy
cmF5PFQsVF9zbGljZSxUZWxtLGRpbWVuc2lvbj4obWF4LDEpIHt9CiAgaW5saW5lIF9DT1JCQV9C
b3VuZGVkX1NlcXVlbmNlX0FycmF5KF9DT1JCQV9VTG9uZyBsZW4sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFQgKnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiByZWxlYXNlID0gMCkKICAgICAgICAgICAgOiBf
Q09SQkFfU2VxdWVuY2VfQXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uPihtYXgsbGVuLHZh
bHVlLHJlbGVhc2UsMSkge30KICBpbmxpbmUgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJyYXko
Y29uc3QgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5z
aW9uLG1heD4mIHMpCiAgICAgICAgICAgIDogX0NPUkJBX1NlcXVlbmNlX0FycmF5PFQsVF9zbGlj
ZSxUZWxtLGRpbWVuc2lvbj4ocykge30KICBpbmxpbmUgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2Vf
QXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uLG1heD4gJm9wZXJhdG9yPSAoY29uc3QgX0NP
UkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uLG1heD4g
JnMpIHsKICAgIEJhc2VUOjpvcGVyYXRvcj0gKHMpOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAg
aW5saW5lIH5fQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9BcnJheSgpIHt9CgoKCiAgaW5saW5lIHZv
aWQgcmVwbGFjZShfQ09SQkFfVUxvbmcgbGVuLCBUKiBkYXRhLF9DT1JCQV9Cb29sZWFuIHJlbGVh
c2UgPSAwKSB7CiAgICBCYXNlVDo6cmVwbGFjZShtYXgsbGVuLGRhdGEscmVsZWFzZSk7CiAgfQoK
ICBpbmxpbmUgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3QgaW5pdGlhbG9mZnNldCkgY29u
c3QgewogICAgc2l6ZV90IGFsaWduZWRzaXplID0gKChpbml0aWFsb2Zmc2V0KzMpICYgfigoaW50
KTMpKStzaXplb2YoX0NPUkJBX1VMb25nKTsKICAgIGZvciAoX0NPUkJBX1VMb25nIGk9MDsgaSA8
IEJhc2VUOjpsZW5ndGgoKTsgaSsrKSB7CiAgICAgIGZvciAoX0NPUkJBX1VMb25nIGo9MDsgaiA8
IGRpbWVuc2lvbjsgaisrKSB7CiAgICAgICAgYWxpZ25lZHNpemUgPSAoKFRlbG0qKShCYXNlVDo6
TlBfZGF0YSgpW2ldKStqKS0+X05QX2FsaWduZWRTaXplKGFsaWduZWRzaXplKTsKICAgICAgfQog
ICAgfQogICAgcmV0dXJuIGFsaWduZWRzaXplOwogIH0KfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
VCxjbGFzcyBUX3NsaWNlLGNsYXNzIFRlbG0saW50IGRpbWVuc2lvbixpbnQgbWF4LGludCBlbG1T
aXplLCBpbnQgZWxtQWxpZ25tZW50PgpjbGFzcyBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9BcnJh
eV93X0ZpeFNpemVFbGVtZW50CiAgOiBwdWJsaWMgX0NPUkJBX1NlcXVlbmNlX0FycmF5PFQsVF9z
bGljZSxUZWxtLGRpbWVuc2lvbj4KewpwdWJsaWM6CiAgdHlwZWRlZiBfQ09SQkFfU2VxdWVuY2Vf
QXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uPiBCYXNlVCA7CiAgaW5saW5lIF9DT1JCQV9C
b3VuZGVkX1NlcXVlbmNlX0FycmF5X3dfRml4U2l6ZUVsZW1lbnQoKQogICAgOiBfQ09SQkFfU2Vx
dWVuY2VfQXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uPihtYXgsMSkge30KICBpbmxpbmUg
X0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJyYXlfd19GaXhTaXplRWxlbWVudChfQ09SQkFfVUxv
bmcgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
KiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSA9IDApCiAgICA6IF9DT1JCQV9TZXF1ZW5jZV9BcnJheTxU
LFRfc2xpY2UsVGVsbSxkaW1lbnNpb24+KG1heCxsZW4sdmFsdWUscmVsZWFzZSwxKSB7fQogIGlu
bGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9BcnJheV93X0ZpeFNpemVFbGVtZW50KGNvbnN0
CiAgICAgIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX0FycmF5X3dfRml4U2l6ZUVsZW1lbnQ8VCxU
X3NsaWNlLFRlbG0sZGltZW5zaW9uLG1heCxlbG1TaXplLGVsbUFsaWdubWVudD4mIHMpCiAgICA6
IF9DT1JCQV9TZXF1ZW5jZV9BcnJheTxULFRfc2xpY2UsVGVsbSxkaW1lbnNpb24+KHMpIHt9CiAg
aW5saW5lIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX0FycmF5X3dfRml4U2l6ZUVsZW1lbnQ8VCxU
X3NsaWNlLFRlbG0sZGltZW5zaW9uLG1heCxlbG1TaXplLGVsbUFsaWdubWVudD4mIG9wZXJhdG9y
PShjb25zdCBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9BcnJheV93X0ZpeFNpemVFbGVtZW50PFQs
VF9zbGljZSxUZWxtLGRpbWVuc2lvbixtYXgsZWxtU2l6ZSxlbG1BbGlnbm1lbnQ+JiBzKSB7CiAg
ICBfQ09SQkFfU2VxdWVuY2VfQXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uPjo6b3BlcmF0
b3I9IChzKTsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSB+X0NPUkJBX0JvdW5kZWRf
U2VxdWVuY2VfQXJyYXlfd19GaXhTaXplRWxlbWVudCgpIHt9CgoKCiAgaW5saW5lIHZvaWQgcmVw
bGFjZShfQ09SQkFfVUxvbmcgbGVuLCBUKiBkYXRhLF9DT1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAw
KSB7CiAgICBfQ09SQkFfU2VxdWVuY2VfQXJyYXk8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uPjo6
cmVwbGFjZShtYXgsbGVuLGRhdGEscmVsZWFzZSk7CiAgfQoKCiAgaW5saW5lIHNpemVfdCBfTlBf
YWxpZ25lZFNpemUoc2l6ZV90IGluaXRpYWxvZmZzZXQpIGNvbnN0IHsKICAgIHNpemVfdCBhbGln
bmVkc2l6ZSA9ICgoaW5pdGlhbG9mZnNldCszKSAmIH4oKGludCkzKSkrc2l6ZW9mKF9DT1JCQV9V
TG9uZyk7CiAgICBpZiAoQmFzZVQ6Omxlbmd0aCgpKSB7CiAgICAgIGFsaWduZWRzaXplID0gKChh
bGlnbmVkc2l6ZSsoZWxtQWxpZ25tZW50LTEpKSAmIH4oZWxtQWxpZ25tZW50LTEpKTsKICAgICAg
YWxpZ25lZHNpemUgKz0gQmFzZVQ6Omxlbmd0aCgpICogZGltZW5zaW9uICogZWxtU2l6ZTsKICAg
IH0KICAgIHJldHVybiBhbGlnbmVkc2l6ZTsKICB9CgogIGlubGluZSB2b2lkIG9wZXJhdG9yPj49
IChOZXRCdWZmZXJlZFN0cmVhbSAmcykgY29uc3Q7CiAgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0g
KE5ldEJ1ZmZlcmVkU3RyZWFtICZzKTsKICBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PSAoTWVtQnVm
ZmVyZWRTdHJlYW0gJnMpIGNvbnN0OwogIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9IChNZW1CdWZm
ZXJlZFN0cmVhbSAmcyk7Cn07CgoKCgoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVF9zbGljZSwg
aW50IGRpbWVuc2lvbiwgaW50IG1heD4KY2xhc3MgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJy
YXlfX0Jvb2xlYW4KICAgOiBwdWJsaWMgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJyYXlfd19G
aXhTaXplRWxlbWVudDxULFRfc2xpY2UsX0NPUkJBX0Jvb2xlYW4sZGltZW5zaW9uLG1heCwxLDE+
CnsKcHVibGljOgogIHR5cGVkZWYgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJyYXlfd19GaXhT
aXplRWxlbWVudDxULFRfc2xpY2UsX0NPUkJBX0Jvb2xlYW4sZGltZW5zaW9uLG1heCwxLDE+IEJh
c2VUIDsKICBpbmxpbmUgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJyYXlfX0Jvb2xlYW4oKSB7
fQogIGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9BcnJheV9fQm9vbGVhbihfQ09SQkFf
VUxvbmcgbGVuLCBUKiB2YWx1ZSwgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZT0wKQogICAgOiBCYXNl
VCAobGVuLHZhbHVlLHJlbGVhc2UpIHt9CiAgaW5saW5lIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNl
X0FycmF5X19Cb29sZWFuKGNvbnN0IF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX0FycmF5X19Cb29s
ZWFuPFQsVF9zbGljZSxkaW1lbnNpb24sbWF4PiYgcykKICAgIDogQmFzZVQgKHMpIHt9CiAgaW5s
aW5lIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX0FycmF5X19Cb29sZWFuPFQsVF9zbGljZSxkaW1l
bnNpb24sbWF4PiYKICAgICAgb3BlcmF0b3I9IChjb25zdAogICAgICAgIF9DT1JCQV9Cb3VuZGVk
X1NlcXVlbmNlX0FycmF5X19Cb29sZWFuPFQsVF9zbGljZSxkaW1lbnNpb24sbWF4PiYgcykgewog
ICAgICAgICAgQmFzZVQgOjpvcGVyYXRvcj0gKHMpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwog
IH0KCiAgaW5saW5lIH5fQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9BcnJheV9fQm9vbGVhbigpIHt9
CgogIGlubGluZSB2b2lkIG9wZXJhdG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSAmcykgY29uc3Q7
CiAgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKE5ldEJ1ZmZlcmVkU3RyZWFtICZzKTsKICBpbmxp
bmUgdm9pZCBvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0gJnMpIGNvbnN0OwogIGlubGlu
ZSB2b2lkIG9wZXJhdG9yPDw9IChNZW1CdWZmZXJlZFN0cmVhbSAmcyk7Cgp9OwoKCgoKCnRlbXBs
YXRlPGNsYXNzIFQsIGNsYXNzIFRfc2xpY2UsIGludCBkaW1lbnNpb24sIGludCBtYXg+CmNsYXNz
IF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX0FycmF5X19PY3RldAogICA6IHB1YmxpYyBfQ09SQkFf
Qm91bmRlZF9TZXF1ZW5jZV9BcnJheV93X0ZpeFNpemVFbGVtZW50PFQsVF9zbGljZSxfQ09SQkFf
T2N0ZXQsZGltZW5zaW9uLG1heCwxLDE+CnsKcHVibGljOgogIHR5cGVkZWYgX0NPUkJBX0JvdW5k
ZWRfU2VxdWVuY2VfQXJyYXlfd19GaXhTaXplRWxlbWVudDxULFRfc2xpY2UsX0NPUkJBX09jdGV0
LGRpbWVuc2lvbixtYXgsMSwxPiBCYXNlVCA7CiAgaW5saW5lIF9DT1JCQV9Cb3VuZGVkX1NlcXVl
bmNlX0FycmF5X19PY3RldCgpIHt9CiAgaW5saW5lIF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX0Fy
cmF5X19PY3RldChfQ09SQkFfVUxvbmcgbGVuLCBUICp2YWx1ZSwgX0NPUkJBX0Jvb2xlYW4gcmVs
ZWFzZSA9IDApCiAgICA6IEJhc2VUIChsZW4sdmFsdWUscmVsZWFzZSkge30KICBpbmxpbmUgX0NP
UkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJyYXlfX09jdGV0KGNvbnN0IF9DT1JCQV9Cb3VuZGVkX1Nl
cXVlbmNlX0FycmF5X19PY3RldDxULFRfc2xpY2UsZGltZW5zaW9uLG1heD4mIHMpCiAgICA6IEJh
c2VUIChzKSB7fQogIGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9BcnJheV9fT2N0ZXQ8
VCxUX3NsaWNlLGRpbWVuc2lvbixtYXg+JgogICAgICBvcGVyYXRvcj0gKGNvbnN0CiAgICAgICAg
X0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfQXJyYXlfX09jdGV0PFQsVF9zbGljZSxkaW1lbnNpb24s
bWF4PiYgcykgewogICAgICAgICAgQmFzZVQgOjpvcGVyYXRvcj0gKHMpOwogICAgICAgICAgcmV0
dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIH5fQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9BcnJheV9f
T2N0ZXQoKSB7fQp9OwoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRWxlbVQsIGNsYXNz
IFRfSGVscGVyPgpjbGFzcyBfQ09SQkFfU2VxdWVuY2VfT2JqUmVmIHsKcHVibGljOgogIHR5cGVk
ZWYgX0NPUkJBX1NlcXVlbmNlX09ialJlZjxULEVsZW1ULFRfSGVscGVyPiBUX3NlcTsKCiAgaW5s
aW5lIF9DT1JCQV9VTG9uZyBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gcGRfbWF4OyB9CiAgaW5s
aW5lIF9DT1JCQV9VTG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBwZF9sZW47IH0KICBpbmxp
bmUgdm9pZCBsZW5ndGgoX0NPUkJBX1VMb25nIGxlbikgewogICAgaWYgKHBkX2JvdW5kZWQgJiYg
bGVuID4gcGRfbWF4KSB7CiAgICAgIF9DT1JCQV9ib3VuZF9jaGVja19lcnJvcigpOwoKICAgIH0K
CgogICAgZm9yKCBfQ09SQkFfVUxvbmcgaSA9IGxlbjsgaSA8IHBkX2xlbjsgaSsrICkKICAgICAg
b3BlcmF0b3JbXShpKSA9IFRfSGVscGVyOjpfbmlsKCk7CgogICAgaWYgKGxlbikgewoKCiAgICAg
IGlmICghcGRfZGF0YSB8fCBsZW4gPiBwZF9tYXgpIHsKICAgICAgICBjb3B5YnVmZmVyKCgobGVu
ID4gcGRfbWF4KSA/IGxlbiA6IHBkX21heCkpOwogICAgICB9CiAgICB9CgogICAgcGRfbGVuID0g
bGVuOwogIH0KCiAgaW5saW5lIEVsZW1UIG9wZXJhdG9yW10gKF9DT1JCQV9VTG9uZyBpKSB7CiAg
ICBpZiggaSA+PSBwZF9sZW4gKSBfQ09SQkFfYm91bmRfY2hlY2tfZXJyb3IoKTsKICAgIHJldHVy
biBFbGVtVChwZF9kYXRhW2ldLHBkX3JlbCk7CiAgfQogIGlubGluZSBjb25zdCBFbGVtVCBvcGVy
YXRvcltdIChfQ09SQkFfVUxvbmcgaSkgY29uc3QgewogICAgaWYoIGkgPj0gcGRfbGVuICkgX0NP
UkJBX2JvdW5kX2NoZWNrX2Vycm9yKCk7CiAgICByZXR1cm4gRWxlbVQocGRfZGF0YVtpXSxwZF9y
ZWwpOwogIH0KCgogIHR5cGVkZWYgbG9uZyBwdHJfYXJpdGhfdDsKCgoKCgoKICBzdGF0aWMgaW5s
aW5lIFQqKiBhbGxvY2J1ZihfQ09SQkFfVUxvbmcgbmVsZW1zKSB7CiAgICBpZiAoIW5lbGVtcykg
cmV0dXJuIDA7CiAgICBUKiogYiA9IG5ldyBUKltuZWxlbXMrMl07CiAgICBwdHJfYXJpdGhfdCBs
ID0gbmVsZW1zOwogICAgZm9yIChfQ09SQkFfVUxvbmcgaSA9IDI7IGkgPCBuZWxlbXMrMjsgaSsr
KSB7CiAgICAgIGJbaV0gPSBUX0hlbHBlcjo6X25pbCgpOwogICAgfQogICAgYlswXSA9IChUKikg
KChwdHJfYXJpdGhfdCkweDUzNTE0RjRBVSk7CiAgICBiWzFdID0gKFQqKSBsOwogICAgcmV0dXJu
IGIrMjsKICB9CgogIHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlYnVmKFQqKiBidWYpIHsKICAgIGlm
ICghYnVmKSByZXR1cm47CiAgICBUKiogYiA9IGJ1Zi0yOwogICAgaWYgKChwdHJfYXJpdGhfdCli
WzBdICE9ICgocHRyX2FyaXRoX3QpIDB4NTM1MTRGNEFVKSkgewogICAgICBfQ09SQkFfYmFkX3Bh
cmFtX2ZyZWVidWYoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgcHRyX2FyaXRoX3QgbCA9IChw
dHJfYXJpdGhfdCkgYlsxXTsKICAgIGZvciAoX0NPUkJBX1VMb25nIGkgPSAwOyBpIDwgKF9DT1JC
QV9VTG9uZykgbDsgaSsrKSB7CiAgICAgIGlmICghVF9IZWxwZXI6OmlzX25pbChidWZbaV0pKQog
ICAgICAgIFRfSGVscGVyOjpyZWxlYXNlKGJ1ZltpXSk7CiAgICB9CiAgICBiWzBdID0gKFQqKSAw
OwogICAgZGVsZXRlIFtdIGI7CiAgfQoKCiAgaW5saW5lIF9DT1JCQV9Cb29sZWFuIHJlbGVhc2Uo
KSBjb25zdCB7IHJldHVybiBwZF9yZWw7IH0KCiAgaW5saW5lIFQqKiBnZXRfYnVmZmVyKF9DT1JC
QV9Cb29sZWFuIG9ycGhhbiA9IDApIHsKICAgIGlmIChwZF9tYXggJiYgIXBkX2RhdGEpIHsKICAg
ICAgY29weWJ1ZmZlcihwZF9tYXgpOwogICAgfQogICAgaWYgKCFvcnBoYW4pIHsKICAgICAgcmV0
dXJuIHBkX2RhdGE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgaWYgKCFwZF9yZWwpCiAgICAgICAg
cmV0dXJuIDA7CiAgICAgIGVsc2UgewogICAgICAgIFQqKiB0bXAgPSBwZF9kYXRhOwogICAgICAg
IHBkX2RhdGEgPSAwOwogICAgICAgIGlmICghcGRfYm91bmRlZCkgewogICAgICAgICAgcGRfbWF4
ID0gMDsKICAgICAgICB9CiAgICAgICAgcGRfbGVuID0gMDsKICAgICAgICBwZF9yZWwgPSAxOwog
ICAgICAgIHJldHVybiB0bXA7CiAgICAgIH0KICAgIH0KICB9CgogIGlubGluZSBUKmNvbnN0ICog
Z2V0X2J1ZmZlcigpIGNvbnN0IHsKICAgIGlmIChwZF9tYXggJiYgIXBkX2RhdGEpIHsKCiAgICAg
IFRfc2VxKiBzID0gY29uc3RfY2FzdDxUX3NlcSo+KHRoaXMpOwoKCgogICAgICBzLT5jb3B5YnVm
ZmVyKHBkX21heCk7CiAgICB9CiAgICByZXR1cm4gcGRfZGF0YTsKICB9CgogIGlubGluZSB+X0NP
UkJBX1NlcXVlbmNlX09ialJlZigpIHsKICAgIGlmIChwZF9yZWwgJiYgcGRfZGF0YSkgZnJlZWJ1
ZihwZF9kYXRhKTsKICAgIHBkX2RhdGEgPSAwOwogIH0KCgoKICBpbmxpbmUgc2l6ZV90IF9OUF9h
bGlnbmVkU2l6ZShzaXplX3QgaW5pdGlhbG9mZnNldCkgY29uc3QgewogICAgc2l6ZV90IGFsaWdu
ZWRzaXplID0gKChpbml0aWFsb2Zmc2V0KzMpICYgfigoaW50KTMpKStzaXplb2YoX0NPUkJBX1VM
b25nKTsKICAgIGZvciAodW5zaWduZWQgbG9uZyBpPTA7IGkgPCBsZW5ndGgoKTsgaSsrKSB7CiAg
ICAgIGFsaWduZWRzaXplID0gVF9IZWxwZXI6Ok5QX2FsaWduZWRTaXplKHBkX2RhdGFbaV0sYWxp
Z25lZHNpemUpOwogICAgfQogICAgcmV0dXJuIGFsaWduZWRzaXplOwogIH0KCiAgaW5saW5lIHZv
aWQgb3BlcmF0b3I+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtICZzKSBjb25zdDsKICBpbmxpbmUgdm9p
ZCBvcGVyYXRvcjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0gJnMpOwogIGlubGluZSB2b2lkIG9wZXJh
dG9yPj49IChNZW1CdWZmZXJlZFN0cmVhbSAmcykgY29uc3Q7CiAgaW5saW5lIHZvaWQgb3BlcmF0
b3I8PD0gKE1lbUJ1ZmZlcmVkU3RyZWFtICZzKTsKCnByb3RlY3RlZDoKICBpbmxpbmUgX0NPUkJB
X1NlcXVlbmNlX09ialJlZigpCiAgICA6IHBkX21heCgwKSwgcGRfbGVuKDApLCBwZF9yZWwoMSks
IHBkX2JvdW5kZWQoMCksIHBkX2RhdGEoMCkge30KCiAgaW5saW5lIF9DT1JCQV9TZXF1ZW5jZV9P
YmpSZWYoX0NPUkJBX1VMb25nIG1heCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
Q09SQkFfQm9vbGVhbiBib3VuZGVkPTApCiAgICA6IHBkX21heChtYXgpLCBwZF9sZW4oMCksIHBk
X3JlbCgxKSwgcGRfYm91bmRlZChib3VuZGVkKSwgcGRfZGF0YSgwKSB7fQoKICBpbmxpbmUgX0NP
UkJBX1NlcXVlbmNlX09ialJlZihfQ09SQkFfVUxvbmcgbWF4LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQ09SQkFfVUxvbmcgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUKiogdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJB
X0Jvb2xlYW4gcmVsZWFzZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NP
UkJBX0Jvb2xlYW4gYm91bmRlZCA9IDApCiAgICA6IHBkX21heChtYXgpLCBwZF9sZW4obGVuKSwg
cGRfcmVsKHJlbGVhc2UpLAogICAgICBwZF9ib3VuZGVkKGJvdW5kZWQpLCBwZF9kYXRhKHZhbHVl
KQogIHsKICAgIGlmIChsZW4gPiBtYXggfHwgKGxlbiAmJiAhdmFsdWUpKSB7CiAgICAgIF9DT1JC
QV9ib3VuZF9jaGVja19lcnJvcigpOwoKICAgIH0KICB9CgogIGlubGluZSBfQ09SQkFfU2VxdWVu
Y2VfT2JqUmVmKGNvbnN0IFRfc2VxJiBzKQogICAgOiBwZF9tYXgocy5wZF9tYXgpLCBwZF9sZW4o
MCksIHBkX3JlbCgxKSwKICAgICAgcGRfYm91bmRlZChzLnBkX2JvdW5kZWQpLCBwZF9kYXRhKDAp
IHsKICAgIGxlbmd0aChzLnBkX2xlbik7CiAgICBmb3IoIF9DT1JCQV9VTG9uZyBpID0gMDsgaSA8
IHBkX2xlbjsgaSsrICkKICAgICAgb3BlcmF0b3JbXShpKSA9IHNbaV07CiAgfQoKICBpbmxpbmUg
VF9zZXEmIG9wZXJhdG9yPSAoY29uc3QgVF9zZXEmIHMpIHsKICAgIGxlbmd0aChzLnBkX2xlbik7
CiAgICBmb3IoIF9DT1JCQV9VTG9uZyBpID0gMDsgaSA8IHBkX2xlbjsgaSsrICkKICAgICAgb3Bl
cmF0b3JbXShpKSA9IHNbaV07CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgaW5saW5lIHZvaWQg
cmVwbGFjZShfQ09SQkFfVUxvbmcgbWF4LCBfQ09SQkFfVUxvbmcgbGVuLCBUKiogZGF0YSwKICAg
ICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAwKSB7CiAgICBpZiAo
bGVuID4gbWF4IHx8IChsZW4gJiYgIWRhdGEpKSB7CiAgICAgIF9DT1JCQV9ib3VuZF9jaGVja19l
cnJvcigpOwoKICAgIH0KICAgIGlmIChwZF9yZWwgJiYgcGRfZGF0YSkgewogICAgICBmcmVlYnVm
KHBkX2RhdGEpOwogICAgfQogICAgcGRfbWF4ID0gbWF4OwogICAgcGRfbGVuID0gbGVuOwogICAg
cGRfZGF0YSA9IGRhdGE7CiAgICBwZF9yZWwgPSByZWxlYXNlOwogIH0KCgpwcml2YXRlOgoKICB2
b2lkIGNvcHlidWZmZXIoX0NPUkJBX1VMb25nIG5ld21heCkgewoKCgogICAgVCoqIG5ld2RhdGEg
PSBhbGxvY2J1ZihuZXdtYXgpOwogICAgaWYgKCFuZXdkYXRhKSB7CiAgICAgIF9DT1JCQV9uZXdf
b3BlcmF0b3JfcmV0dXJuX251bGwoKTsKCiAgICB9CiAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaT0w
OyBpIDwgcGRfbGVuOyBpKyspIHsKICAgICAgaWYgKHBkX3JlbCkgewogICAgICAgIG5ld2RhdGFb
aV0gPSBwZF9kYXRhW2ldOwogICAgICAgIHBkX2RhdGFbaV0gPSBUX0hlbHBlcjo6X25pbCgpOwog
ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIFRfSGVscGVyOjpkdXBsaWNhdGUocGRfZGF0YVtp
XSk7CiAgICAgICAgbmV3ZGF0YVtpXSA9IHBkX2RhdGFbaV07CiAgICAgIH0KICAgIH0KICAgIGlm
IChwZF9yZWwgJiYgcGRfZGF0YSkgewogICAgICBmcmVlYnVmKHBkX2RhdGEpOwogICAgfQogICAg
ZWxzZSB7CiAgICAgIHBkX3JlbCA9IDE7CiAgICB9CiAgICBwZF9kYXRhID0gbmV3ZGF0YTsKICAg
IHBkX21heCA9IG5ld21heDsKICB9CgogIF9DT1JCQV9VTG9uZyBwZF9tYXg7CiAgX0NPUkJBX1VM
b25nIHBkX2xlbjsKICBfQ09SQkFfQm9vbGVhbiBwZF9yZWw7CiAgX0NPUkJBX0Jvb2xlYW4gcGRf
Ym91bmRlZDsKICBUKiogcGRfZGF0YTsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mg
RWxlbVQsIGNsYXNzIFRfSGVscGVyPgpjbGFzcyBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX09i
alJlZiA6IHB1YmxpYyBfQ09SQkFfU2VxdWVuY2VfT2JqUmVmPFQsRWxlbVQsVF9IZWxwZXI+IHsK
cHVibGljOgogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX09ialJlZigpIHt9CiAg
aW5saW5lIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfT2JqUmVmKF9DT1JCQV9VTG9uZyBtYXgp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfQ09SQkFfU2VxdWVuY2VfT2JqUmVmPFQsRWxl
bVQsVF9IZWxwZXI+KG1heCkge30KICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9P
YmpSZWYoX0NPUkJBX1VMb25nIG1heCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0NPUkJBX1VMb25nIGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVCAqKnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQ09SQkFfQm9vbGVhbiByZWxlYXNlID0gMCkKICAgICA6IF9DT1JCQV9TZXF1ZW5j
ZV9PYmpSZWY8VCxFbGVtVCxUX0hlbHBlcj4obWF4LGxlbix2YWx1ZSxyZWxlYXNlKSB7fQogIGlu
bGluZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX09ialJlZihjb25zdCBfQ09SQkFfVW5ib3Vu
ZGVkX1NlcXVlbmNlX09ialJlZjxULEVsZW1ULFRfSGVscGVyPiYgcykKICAgICA6IF9DT1JCQV9T
ZXF1ZW5jZV9PYmpSZWY8VCxFbGVtVCxUX0hlbHBlcj4ocykge30KICBpbmxpbmUgfl9DT1JCQV9V
bmJvdW5kZWRfU2VxdWVuY2VfT2JqUmVmKCkge30KICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9T
ZXF1ZW5jZV9PYmpSZWY8VCxFbGVtVCxUX0hlbHBlcj4gJm9wZXJhdG9yPSAoY29uc3QgX0NPUkJB
X1VuYm91bmRlZF9TZXF1ZW5jZV9PYmpSZWY8VCxFbGVtVCxUX0hlbHBlcj4gJnMpIHsKICAgIF9D
T1JCQV9TZXF1ZW5jZV9PYmpSZWY8VCxFbGVtVCxUX0hlbHBlcj46Om9wZXJhdG9yPSAocyk7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgaW5saW5lIHZvaWQgcmVwbGFjZShfQ09SQkFfVUxvbmcg
bWF4LCBfQ09SQkFfVUxvbmcgbGVuLCBUKiogZGF0YSwKICAgICAgICAgICAgICAgICAgICAgIF9D
T1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAwKSB7CiAgICBfQ09SQkFfU2VxdWVuY2VfT2JqUmVmPFQs
RWxlbVQsVF9IZWxwZXI+OjpyZXBsYWNlKG1heCxsZW4sZGF0YSxyZWxlYXNlKTsKICB9Cn07CgoK
CgoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgRWxlbVQsY2xhc3MgVF9IZWxwZXIsaW50IG1heD4K
Y2xhc3MgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfT2JqUmVmCiAgOiBwdWJsaWMgX0NPUkJBX1Nl
cXVlbmNlX09ialJlZjxULEVsZW1ULFRfSGVscGVyPgp7CnB1YmxpYzoKICBpbmxpbmUgX0NPUkJB
X0JvdW5kZWRfU2VxdWVuY2VfT2JqUmVmKCkgOgogICAgICAgICAgICAgICAgICAgICAgX0NPUkJB
X1NlcXVlbmNlX09ialJlZjxULEVsZW1ULFRfSGVscGVyPihtYXgsMSl7fQogIGlubGluZSBfQ09S
QkFfQm91bmRlZF9TZXF1ZW5jZV9PYmpSZWYoX0NPUkJBX1VMb25nIGxlbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQgKip2YWx1ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAwKQogICAgIDog
X0NPUkJBX1NlcXVlbmNlX09ialJlZjxULEVsZW1ULFRfSGVscGVyPihtYXgsbGVuLHZhbHVlLHJl
bGVhc2UsMSkge30KICBpbmxpbmUgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfT2JqUmVmKGNvbnN0
IF9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX09ialJlZjxULEVsZW1ULFRfSGVscGVyLG1heD4mIHMp
IDogX0NPUkJBX1NlcXVlbmNlX09ialJlZjxULEVsZW1ULFRfSGVscGVyPihzKSB7fQogIGlubGlu
ZSB+X0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfT2JqUmVmKCkge30KICBpbmxpbmUgX0NPUkJBX0Jv
dW5kZWRfU2VxdWVuY2VfT2JqUmVmPFQsRWxlbVQsVF9IZWxwZXIsbWF4PiAmb3BlcmF0b3I9IChj
b25zdCBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9PYmpSZWY8VCxFbGVtVCxUX0hlbHBlcixtYXg+
ICZzKSB7CiAgICBfQ09SQkFfU2VxdWVuY2VfT2JqUmVmPFQsRWxlbVQsVF9IZWxwZXI+OjpvcGVy
YXRvcj0gKHMpOwogICAgcmV0dXJuICp0aGlzOwogIH0KCgogIGlubGluZSB2b2lkIHJlcGxhY2Uo
X0NPUkJBX1VMb25nIGxlbiwgVCoqIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFf
Qm9vbGVhbiByZWxlYXNlID0gMCkgewogICAgX0NPUkJBX1NlcXVlbmNlX09ialJlZjxULEVsZW1U
LFRfSGVscGVyPjo6cmVwbGFjZShtYXgsbGVuLGRhdGEscmVsZWFzZSk7CiAgfQp9OwoKCnR5cGVk
ZWYgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fT2N0ZXQgX0NPUkJBX1VuYm91bmRlZF9TZXF1
ZW5jZV9PY3RldDsKIyAxNTEgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvb21uaUludGVy
bmFsLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL0dJT1AuaCIgMQojIDQ4
ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL0dJT1AuaCIKIyAxICIuLi8uLi8uLi8uLi9p
bmNsdWRlL29tbmlPUkIzL0NPUkJBX3N5c2RlcC5oIiAxCiMgNDkgIi4uLy4uLy4uLy4uL2luY2x1
ZGUvb21uaU9SQjMvR0lPUC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9D
T1JCQV9iYXNldHlwZXMuaCIgMQojIDUwICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL0dJ
T1AuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvSU9QLmgiIDEKIyA2MiAi
Li4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9JT1AuaCIKY2xhc3MgSU9QIHsKcHVibGljOgog
IHR5cGVkZWYgX0NPUkJBX1VMb25nIFByb2ZpbGVJZDsKICBzdGF0aWMgY29uc3QgUHJvZmlsZUlk
IFRBR19JTlRFUk5FVF9JT1A7CiAgc3RhdGljIGNvbnN0IFByb2ZpbGVJZCBUQUdfTVVMVElQTEVf
Q09NUE9ORU5UUzsKCiAgc3RydWN0IFRhZ2dlZFByb2ZpbGUgewogICAgUHJvZmlsZUlkIHRhZzsK
ICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfT2N0ZXQgcHJvZmlsZV9kYXRhOwoKCiAgICBz
aXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBpbml0aWFsb2Zmc2V0KSB7CiAgICAgIHNpemVf
dCBhbGlnbmVkc2l6ZSA9ICgoaW5pdGlhbG9mZnNldCszKSAmIH4oKGludCkzKSkKICAgICAgICAg
ICAgICsgc2l6ZW9mKFByb2ZpbGVJZCk7CiAgICAgIHJldHVybiBwcm9maWxlX2RhdGEuX05QX2Fs
aWduZWRTaXplKGFsaWduZWRzaXplKTsKICAgIH0KICAgIHZvaWQgb3BlcmF0b3I+Pj0gKE5ldEJ1
ZmZlcmVkU3RyZWFtICZzKTsKICAgIHZvaWQgb3BlcmF0b3I8PD0gKE5ldEJ1ZmZlcmVkU3RyZWFt
ICZzKTsKICAgIHZvaWQgb3BlcmF0b3I+Pj0gKE1lbUJ1ZmZlcmVkU3RyZWFtICZzKTsKICAgIHZv
aWQgb3BlcmF0b3I8PD0gKE1lbUJ1ZmZlcmVkU3RyZWFtICZzKTsKICB9OwoKICB0eXBlZGVmIF9D
T1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8VGFnZ2VkUHJvZmlsZT4gVGFnZ2VkUHJvZmlsZUxpc3Q7
CgogIGNsYXNzIFRhZ2dlZFByb2ZpbGVMaXN0X3ZhciB7CiAgcHVibGljOgogICAgVGFnZ2VkUHJv
ZmlsZUxpc3RfdmFyKCkgeyBfcHRyID0gMDsgfQogICAgVGFnZ2VkUHJvZmlsZUxpc3RfdmFyKFRh
Z2dlZFByb2ZpbGVMaXN0KiBwKSB7IF9wdHIgPSBwOyB9CiAgICBUYWdnZWRQcm9maWxlTGlzdF92
YXIoVGFnZ2VkUHJvZmlsZUxpc3RfdmFyJiBwKTsKICAgIH5UYWdnZWRQcm9maWxlTGlzdF92YXIo
KSB7IGlmIChfcHRyKSBkZWxldGUgX3B0cjsgfQogICAgVGFnZ2VkUHJvZmlsZUxpc3RfdmFyJiBv
cGVyYXRvcj0gKGNvbnN0IFRhZ2dlZFByb2ZpbGVMaXN0X3ZhciYgcCkgewogICAgICBpZiAocC5f
cHRyKSB7CiAgICAgICAgaWYgKCFfcHRyKSB7CiAgICAgICAgICBfcHRyID0gbmV3IFRhZ2dlZFBy
b2ZpbGVMaXN0OwogICAgICAgICAgaWYgKCFfcHRyKSB7CiAgICAgICAgICAgIF9DT1JCQV9uZXdf
b3BlcmF0b3JfcmV0dXJuX251bGwoKTsKCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICpf
cHRyID0gKnAuX3B0cjsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBpZiAoX3B0cikgZGVs
ZXRlIF9wdHI7CiAgICAgICAgX3B0ciA9IDA7CiAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQogICAgVGFnZ2VkUHJvZmlsZUxpc3RfdmFyJiBvcGVyYXRvcj0gKFRhZ2dlZFByb2ZpbGVM
aXN0KiBwKSB7CiAgICAgIGlmIChfcHRyKSBkZWxldGUgX3B0cjsKICAgICAgX3B0ciA9IHA7CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIFRhZ2dlZFByb2ZpbGUmIG9wZXJhdG9yW10gKF9D
T1JCQV9VTG9uZyBpbmRleCkgewogICAgICByZXR1cm4gKF9wdHItPk5QX2RhdGEoKSlbaW5kZXhd
OwogICAgfQogICAgY29uc3QgVGFnZ2VkUHJvZmlsZSYgb3BlcmF0b3JbXSAoX0NPUkJBX1VMb25n
IGluZGV4KSBjb25zdCB7CiAgICAgIHJldHVybiAoX3B0ci0+TlBfZGF0YSgpKVtpbmRleF07CiAg
ICB9CiAgICBpbmxpbmUgVGFnZ2VkUHJvZmlsZUxpc3QqIG9wZXJhdG9yLT4oKSBjb25zdCB7CiAg
ICAgIHJldHVybiAoVGFnZ2VkUHJvZmlsZUxpc3QqKV9wdHI7CiAgICB9CiAgICBUYWdnZWRQcm9m
aWxlTGlzdCogX3B0cjsKICB9OwoKICBzdHJ1Y3QgSU9SIHsKICAgIF9DT1JCQV9DaGFyICp0eXBl
X2lkOwogICAgVGFnZ2VkUHJvZmlsZUxpc3QgcHJvZmlsZXM7CgoKICAgIHNpemVfdCBfTlBfYWxp
Z25lZFNpemUoc2l6ZV90IGluaXRpYWxvZmZzZXQpIHsKICAgICAgc2l6ZV90IGFsaWduZWRzaXpl
ID0gKChpbml0aWFsb2Zmc2V0KzMpICYgfigoaW50KTMpKQogICAgICAgICAgICAgKyBzaXplb2Yo
X0NPUkJBX1VMb25nKTsKICAgICAgYWxpZ25lZHNpemUgKz0gc3RybGVuKChjb25zdCBjaGFyICop
dHlwZV9pZCkgKyAxOwogICAgICByZXR1cm4gcHJvZmlsZXMuX05QX2FsaWduZWRTaXplKGFsaWdu
ZWRzaXplKTsKICAgIH0KICB9OwoKICB0eXBlZGVmIF9DT1JCQV9VTG9uZyBDb21wb25lbnRJZDsK
CiAgc3RydWN0IFRhZ2dlZENvbXBvbmVudCB7CiAgICBDb21wb25lbnRJZCB0YWc7CiAgICBfQ09S
QkFfVW5ib3VuZGVkX1NlcXVlbmNlX09jdGV0IGNvbXBvbmVudF9kYXRhOwoKCiAgICBzaXplX3Qg
X05QX2FsaWduZWRTaXplKHNpemVfdCBpbml0aWFsb2Zmc2V0KSB7CiAgICAgIHNpemVfdCBhbGln
bmVkc2l6ZSA9ICgoaW5pdGlhbG9mZnNldCszKSAmIH4oKGludCkzKSkKICAgICAgICAgICAgICsg
c2l6ZW9mKF9DT1JCQV9VTG9uZyk7CiAgICAgIHJldHVybiBjb21wb25lbnRfZGF0YS5fTlBfYWxp
Z25lZFNpemUoYWxpZ25lZHNpemUpOwogICAgfQogICAgdm9pZCBvcGVyYXRvcj4+PSAoTmV0QnVm
ZmVyZWRTdHJlYW0gJnMpOwogICAgdm9pZCBvcGVyYXRvcjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0g
JnMpOwogICAgdm9pZCBvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0gJnMpOwogICAgdm9p
ZCBvcGVyYXRvcjw8PSAoTWVtQnVmZmVyZWRTdHJlYW0gJnMpOwogIH07CgogIHR5cGVkZWYgX0NP
UkJBX1VuYm91bmRlZF9TZXF1ZW5jZTxUYWdnZWRDb21wb25lbnQ+IE11bHRpcGxlQ29tcG9uZW50
UHJvZmlsZTsKCiAgdHlwZWRlZiBfQ09SQkFfVUxvbmcgU2VydmljZUlEOwoKICBzdHJ1Y3QgU2Vy
dmljZUNvbnRleHQgewogICAgU2VydmljZUlEIGNvbnRleHRfaWQ7CiAgICBfQ09SQkFfVW5ib3Vu
ZGVkX1NlcXVlbmNlX19PY3RldCBjb250ZXh0X2RhdGE7CgoKICAgIHNpemVfdCBfTlBfYWxpZ25l
ZFNpemUoc2l6ZV90IGluaXRpYWxvZmZzZXQpIHsKICAgICAgc2l6ZV90IGFsaWduZWRzaXplID0g
KChpbml0aWFsb2Zmc2V0KzMpICYgfigoaW50KTMpKQogICAgICAgICAgICAgKyBzaXplb2YoX0NP
UkJBX1VMb25nKTsKICAgICAgcmV0dXJuIGNvbnRleHRfZGF0YS5fTlBfYWxpZ25lZFNpemUoYWxp
Z25lZHNpemUpOwogICAgfQogICAgdm9pZCBvcGVyYXRvcj4+PSAoTmV0QnVmZmVyZWRTdHJlYW0g
JnMpOwogICAgdm9pZCBvcGVyYXRvcjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0gJnMpOwogICAgdm9p
ZCBvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0gJnMpOwogICAgdm9pZCBvcGVyYXRvcjw8
PSAoTWVtQnVmZmVyZWRTdHJlYW0gJnMpOwogIH07CgogIHR5cGVkZWYgX0NPUkJBX1VuYm91bmRl
ZF9TZXF1ZW5jZTxTZXJ2aWNlQ29udGV4dD4gU2VydmljZUNvbnRleHRMaXN0OwoKICBzdGF0aWMg
Y29uc3QgU2VydmljZUlEIFRyYW5zYWN0aW9uU2VydmljZTsKCgoKICBzdGF0aWMgX0NPUkJBX0No
YXIgKiBpb3JUb0VuY2FwU3RyKGNvbnN0IF9DT1JCQV9DaGFyICp0eXBlX2lkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGFnZ2VkUHJvZmlsZUxpc3QgKnByb2Zp
bGVzKTsKCgoKCiAgc3RhdGljIHZvaWQgRW5jYXBTdHJUb0lvcihjb25zdCBfQ09SQkFfQ2hhciAq
c3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0NoYXIgKiZ0eXBlX2lkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFnZ2VkUHJvZmlsZUxpc3QgKiZwcm9maWxlcyk7
CgoKCgoKfTsKIyA1MSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9HSU9QLmgiIDIKCgpj
bGFzcyBHSU9QIHsKcHVibGljOgogIGVudW0gTXNnVHlwZSB7CiAgICBSZXF1ZXN0ID0gMCwKICAg
IFJlcGx5ID0gMSwKICAgIENhbmNlbFJlcXVlc3QgPSAyLAogICAgTG9jYXRlUmVxdWVzdCA9IDMs
CiAgICBMb2NhdGVSZXBseSA9IDQsCiAgICBDbG9zZUNvbm5lY3Rpb24gPSA1LAogICAgTWVzc2Fn
ZUVycm9yID0gNgogIH07CgogIHN0cnVjdCBWZXJzaW9uIHsKICAgIF9DT1JCQV9DaGFyIG1ham9y
OwogICAgX0NPUkJBX0NoYXIgbWlub3I7CiAgfTsKCiAgc3RydWN0IE1lc3NhZ2VIZWFkZXIgewog
ICAgX0NPUkJBX0NoYXIgbWFnaWMgWzRdOwogICAgVmVyc2lvbiBHSU9QX3ZlcnNpb247CiAgICBf
Q09SQkFfQm9vbGVhbiBieXRlX29yZGVyOwogICAgX0NPUkJBX09jdGV0IG1lc3NhZ2VfdHlwZTsK
ICAgIF9DT1JCQV9VTG9uZyBtZXNzYWdlX3NpemU7CiAgfTsKCiAgY2xhc3MgUmVxdWVzdEhlYWRl
ciB7CiAgcHVibGljOgogICAgSU9QOjpTZXJ2aWNlQ29udGV4dExpc3Qgc2VydmljZV9jb250ZXh0
OwogICAgX0NPUkJBX1VMb25nIHJlcXVlc3RfaWQ7CiAgICBfQ09SQkFfQm9vbGVhbiByZXNwb25z
ZV9leHBlY3RlZDsKICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX09jdGV0IG9iamVjdF9r
ZXk7CiAgICBfQ09SQkFfQ2hhciogb3BlcmF0aW9uOwogICAgX0NPUkJBX1VuYm91bmRlZF9TZXF1
ZW5jZV9fT2N0ZXQgcmVxdWVzdGluZ19wcmluY2lwYWw7CiAgfTsKCiAgZW51bSBSZXBseVN0YXR1
c1R5cGUgewogICAgTk9fRVhDRVBUSU9OLAogICAgVVNFUl9FWENFUFRJT04sCiAgICBTWVNURU1f
RVhDRVBUSU9OLAogICAgTE9DQVRJT05fRk9SV0FSRAogIH07CgogIGNsYXNzIFJlcGx5SGVhZGVy
IHsKICBwdWJsaWM6CiAgICBJT1A6OlNlcnZpY2VDb250ZXh0TGlzdCBzZXJ2aWNlX2NvbnRleHQ7
CiAgICBfQ09SQkFfVUxvbmcgcmVxdWVzdF9pZDsKICAgIFJlcGx5U3RhdHVzVHlwZSByZXBseV9z
dGF0dXM7CiAgfTsKCiAgc3RydWN0IENhbmNlbFJlcXVlc3RIZWFkZXIgewogICAgX0NPUkJBX1VM
b25nIHJlcXVlc3RfaWQ7CiAgfTsKCiAgc3RydWN0IExvY2F0ZVJlcXVlc3RIZWFkZXIgewogIHB1
YmxpYzoKICAgIF9DT1JCQV9VTG9uZyByZXF1ZXN0X2lkOwogICAgX0NPUkJBX1VuYm91bmRlZF9T
ZXF1ZW5jZV9fT2N0ZXQgb2JqZWN0X2tleTsKICB9OwoKICBlbnVtIExvY2F0ZVN0YXR1c1R5cGUg
ewogICAgVU5LTk9XTl9PQkpFQ1QsCiAgICBPQkpFQ1RfSEVSRSwKICAgIE9CSkVDVF9GT1JXQVJE
CiAgfTsKCiAgc3RydWN0IExvY2F0ZVJlcGx5SGVhZGVyIHsKICAgIF9DT1JCQV9VTG9uZyByZXF1
ZXN0X2lkOwogICAgTG9jYXRlU3RhdHVzVHlwZSBsb2NhdGVfc3RhdHVzOwogIH07Cn07CiMgMTUy
ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL29tbmlJbnRlcm5hbC5oIiAyCiMgMSAiLi4v
Li4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9JSU9QLmgiIDEKIyA3NiAiLi4vLi4vLi4vLi4vaW5j
bHVkZS9vbW5pT1JCMy9JSU9QLmgiCmNsYXNzIElJT1AgewpwdWJsaWM6CgogIHN0cnVjdCBWZXJz
aW9uIHsKICAgIF9DT1JCQV9DaGFyIG1ham9yOwogICAgX0NPUkJBX0NoYXIgbWlub3I7CiAgfTsK
CgogIHN0YXRpYyBjb25zdCBfQ09SQkFfQ2hhciBjdXJyZW50X21ham9yOwogIHN0YXRpYyBjb25z
dCBfQ09SQkFfQ2hhciBjdXJyZW50X21pbm9yOwoKICBzdHJ1Y3QgUHJvZmlsZUJvZHkgewogICAg
VmVyc2lvbiBpaW9wX3ZlcnNpb247CiAgICBfQ09SQkFfQ2hhciogaG9zdDsKICAgIF9DT1JCQV9V
U2hvcnQgcG9ydDsKICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfT2N0ZXQgb2JqZWN0X2tl
eTsKCiAgICB+UHJvZmlsZUJvZHkoKSB7IGlmIChob3N0KSBkZWxldGUgW10gaG9zdDsgfQogIH07
CgogIHN0YXRpYyBjb25zdCBfQ09SQkFfVVNob3J0IERFRkFVTFRfQ09SQkFMT0NfUE9SVDsKfTsK
IyAxNTMgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvb21uaUludGVybmFsLmgiIDIKIyAx
ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL29tbmlPYmpLZXkuaCIgMQojIDQwICIuLi8u
Li8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL29tbmlPYmpLZXkuaCIKIyAxICIvdXNyL2luY2x1ZGUv
c3RyaW5nLmgiIDEgMwojIDQxICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL29tbmlPYmpL
ZXkuaCIgMgoKCmNsYXNzIE1lbUJ1ZmZlcmVkU3RyZWFtOwpjbGFzcyBOZXRCdWZmZXJlZFN0cmVh
bTsKCgoKCgoKY2xhc3Mgb21uaU9iaktleSB7CnB1YmxpYzoKICBpbmxpbmUgb21uaU9iaktleSgp
IDogcGRfa2V5KHBkX2lubGluZV9idWYpLCBwZF9zaXplKDApIHt9CgogIGlubGluZSBvbW5pT2Jq
S2V5KGNvbnN0IF9DT1JCQV9PY3RldCoga2V5LCBpbnQgc2l6ZSkKICAgIDogcGRfa2V5KHBkX2lu
bGluZV9idWYpLCBwZF9zaXplKHNpemUpIHsKICAgIGlmKCBzaXplID4gMTQgKSBwZF9rZXkgPSBu
ZXcgX0NPUkJBX09jdGV0W3NpemVdOwogICAgbWVtY3B5KHBkX2tleSwga2V5LCBzaXplKTsKICB9
CgoKICBpbmxpbmUgb21uaU9iaktleShfQ09SQkFfT2N0ZXQqIGtleSwgaW50IHNpemUpCiAgICA6
IHBkX2tleShrZXkpLCBwZF9zaXplKHNpemUpIHsKICAgIGlmKCBzaXplIDw9IDE0ICkgewogICAg
ICBwZF9rZXkgPSBwZF9pbmxpbmVfYnVmOwogICAgICBtZW1jcHkocGRfa2V5LCBrZXksIHNpemUp
OwogICAgICBkZWxldGVbXSBrZXk7CiAgICB9CiAgfQoKCiAgaW5saW5lIG9tbmlPYmpLZXkob21u
aU9iaktleSYgaywgaW50IHJlbGVhc2UpCiAgICA6IHBkX3NpemUoay5wZF9zaXplKSB7CiAgICBp
ZiggcGRfc2l6ZSA8PSAxNCApIHsKICAgICAgcGRfa2V5ID0gcGRfaW5saW5lX2J1ZjsKICAgIH0K
ICAgIGVsc2UgaWYoIHJlbGVhc2UgKSB7CgogICAgICBwZF9rZXkgPSBrLnBkX2tleTsKICAgICAg
ay5wZF9rZXkgPSBrLnBkX2lubGluZV9idWY7CiAgICAgIGsucGRfc2l6ZSA9IDA7CiAgICAgIHJl
dHVybjsKICAgIH0KICAgIGVsc2UgewogICAgICBwZF9rZXkgPSBuZXcgX0NPUkJBX09jdGV0W3Bk
X3NpemVdOwogICAgfQogICAgbWVtY3B5KHBkX2tleSwgay5wZF9rZXksIHBkX3NpemUpOwogIH0K
CgoKCiAgaW5saW5lIH5vbW5pT2JqS2V5KCkgewogICAgaWYoIHBkX2tleSAhPSBwZF9pbmxpbmVf
YnVmICkgZGVsZXRlW10gcGRfa2V5OwogIH0KCiAgaW5saW5lIGNvbnN0IF9DT1JCQV9PY3RldCog
a2V5KCkgY29uc3QgeyByZXR1cm4gcGRfa2V5OyB9CiAgaW5saW5lIGludCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gcGRfc2l6ZTsgfQoKICBpbmxpbmUgaW50IGlzX2VxdWFsKGNvbnN0IF9DT1JCQV9P
Y3RldCoga2V5LCBpbnQga2V5c2l6ZSkgY29uc3QgewogICAgcmV0dXJuIGtleXNpemUgPT0gcGRf
c2l6ZSAmJiAhbWVtY21wKGtleSwgcGRfa2V5LCBrZXlzaXplKTsKICB9CgogIGlubGluZSB2b2lk
IHNldF9zaXplKGludCBzaXplKSB7CiAgICBpZiggc2l6ZSA+IHBkX3NpemUgJiYgc2l6ZSA+IDE0
ICkgewogICAgICBpZiggcGRfa2V5ICE9IHBkX2lubGluZV9idWYgKSBkZWxldGVbXSBwZF9rZXk7
CiAgICAgIHBkX2tleSA9IG5ldyBfQ09SQkFfT2N0ZXRbc2l6ZV07CiAgICB9CiAgICBwZF9zaXpl
ID0gc2l6ZTsKICB9CiAgaW5saW5lIF9DT1JCQV9PY3RldCogd3JpdGVfa2V5KCkgeyByZXR1cm4g
cGRfa2V5OyB9CgogIGlubGluZSB2b2lkIGNvcHkoY29uc3QgX0NPUkJBX09jdGV0KiBrZXksIGlu
dCBrZXlzaXplKSB7CiAgICBzZXRfc2l6ZShrZXlzaXplKTsKICAgIG1lbWNweShwZF9rZXksIGtl
eSwga2V5c2l6ZSk7CiAgfQoKCgoKCgoKICBpbmxpbmUgX0NPUkJBX09jdGV0KiByZXR1cm5fa2V5
KCkgewogICAgaWYoIHBkX2tleSAhPSBwZF9pbmxpbmVfYnVmICkgewogICAgICBfQ09SQkFfT2N0
ZXQqIHRtcCA9IHBkX2tleTsKICAgICAgcGRfa2V5ID0gcGRfaW5saW5lX2J1ZjsKICAgICAgcGRf
c2l6ZSA9IDA7CiAgICAgIHJldHVybiB0bXA7CiAgICB9CiAgICBfQ09SQkFfT2N0ZXQqIHRtcCA9
IG5ldyBfQ09SQkFfT2N0ZXRbcGRfc2l6ZV07CiAgICBtZW1jcHkodG1wLCBwZF9rZXksIHBkX3Np
emUpOwogICAgcmV0dXJuIHRtcDsKICB9Cgpwcml2YXRlOgogIF9DT1JCQV9PY3RldCBwZF9pbmxp
bmVfYnVmWzE0XTsKICBfQ09SQkFfT2N0ZXQqIHBkX2tleTsKICBpbnQgcGRfc2l6ZTsKfTsKIyAx
NTQgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvb21uaUludGVybmFsLmgiIDIKIyAxICIu
Li8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL3RyYWNlZHRocmVhZC5oIiAxCiMgNjAgIi4uLy4u
Ly4uLy4uL2luY2x1ZGUvb21uaU9SQjMvdHJhY2VkdGhyZWFkLmgiCnR5cGVkZWYgb21uaV9tdXRl
eCBvbW5pX3RyYWNlZG11dGV4Owp0eXBlZGVmIG9tbmlfbXV0ZXhfbG9jayBvbW5pX3RyYWNlZG11
dGV4X2xvY2s7CnR5cGVkZWYgb21uaV9jb25kaXRpb24gb21uaV90cmFjZWRjb25kaXRpb247CiMg
MTQzICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL3RyYWNlZHRocmVhZC5oIgpjbGFzcyBv
bW5pX29wdGlvbmFsX2xvY2sgewpwdWJsaWM6CiAgaW5saW5lIG9tbmlfb3B0aW9uYWxfbG9jayhv
bW5pX3RyYWNlZG11dGV4JiBtLCBpbnQgbG9ja2VkLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGxvY2tlZF9vbl9leGl0KQogICAgOiBwZF9sb2NrZWQobG9ja2VkX29uX2V4aXQpLCBw
ZF9tKG0pCiAgICB7IGlmKCAhbG9ja2VkICkgcGRfbS5sb2NrKCk7IH0KCiAgaW5saW5lIH5vbW5p
X29wdGlvbmFsX2xvY2soKSB7IGlmKCAhcGRfbG9ja2VkICkgcGRfbS51bmxvY2soKTsgfQoKcHJp
dmF0ZToKICBvbW5pX29wdGlvbmFsX2xvY2soY29uc3Qgb21uaV9vcHRpb25hbF9sb2NrJik7CiAg
b21uaV9vcHRpb25hbF9sb2NrJiBvcGVyYXRvciA9IChjb25zdCBvbW5pX29wdGlvbmFsX2xvY2sm
KTsKCiAgaW50IHBkX2xvY2tlZDsKICBvbW5pX3RyYWNlZG11dGV4JiBwZF9tOwp9OwojIDE1NSAi
Li4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9vbW5pSW50ZXJuYWwuaCIgMgoKCgpjbGFzcyBS
b3BlOwpjbGFzcyBHSU9QX1M7CmNsYXNzIEdJT1BfQzsKY2xhc3Mgb21uaU9ialJlZjsKY2xhc3Mg
b21uaVNlcnZhbnQ7CmNsYXNzIG9tbmlJZGVudGl0eTsKY2xhc3Mgb21uaUxvY2FsSWRlbnRpdHk7
CmNsYXNzIG9tbmlPYmpBZGFwdGVyOwpjbGFzcyBOZXRCdWZmZXJlZFN0cmVhbTsKY2xhc3MgTWVt
QnVmZmVyZWRTdHJlYW07CiMgMTc5ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL29tbmlJ
bnRlcm5hbC5oIgpleHRlcm4gY29uc3QgY2hhciogb21uaU9SQl8zXzA7CgoKIyAxICIuLi8uLi8u
Li8uLi9pbmNsdWRlL29tbmlPUkIzL3JvcGUuaCIgMQojIDEwNyAiLi4vLi4vLi4vLi4vaW5jbHVk
ZS9vbW5pT1JCMy9yb3BlLmgiCmNsYXNzIFJvcGU7CmNsYXNzIEVuZHBvaW50OwpjbGFzcyBOZXRC
dWZmZXJlZFN0cmVhbTsKY2xhc3MgU3RyYW5kX2l0ZXJhdG9yOwpjbGFzcyBSb3BlX2l0ZXJhdG9y
OwoKY2xhc3MgU3RyYW5kIHsKcHVibGljOgoKICBTdHJhbmQoUm9wZSAqcik7CgoKCgoKCgogIHZp
cnR1YWwgflN0cmFuZCgpOwoKCgoKCgoKICB2aXJ0dWFsIHNpemVfdCBNYXhNVFUoKSBjb25zdCA9
IDA7CgoKICBzdHJ1Y3Qgc2J1ZiB7CiAgICB2b2lkICpidWZmZXI7CiAgICBzaXplX3Qgc2l6ZTsK
ICB9OwoKICB2aXJ0dWFsIHNidWYgcmVjZWl2ZShzaXplX3Qgc2l6ZSxfQ09SQkFfQm9vbGVhbiBl
eGFjdGx5LAogICAgICAgICAgICAgICAgICAgICAgIGludCBhbGlnbixfQ09SQkFfQm9vbGVhbiBz
dGFydE1UVT0wKT0wOwojIDE3OCAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9yb3BlLmgi
CiAgdmlydHVhbCB2b2lkIGdpdmViYWNrX3JlY2VpdmVkKHNpemVfdCBsZWZ0b3Zlcik9MDsKIyAx
OTMgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvcm9wZS5oIgogIHZpcnR1YWwgc2l6ZV90
IG1heF9yZWNlaXZlX2J1ZmZlcl9zaXplKCk9MDsKCgoKCiAgdmlydHVhbCB2b2lkIHJlY2VpdmVf
YW5kX2NvcHkoc2J1ZiBiLF9DT1JCQV9Cb29sZWFuIHN0YXJ0TVRVPTApID0gMDsKIyAyMjMgIi4u
Ly4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvcm9wZS5oIgogIHZpcnR1YWwgdm9pZCBza2lwKHNp
emVfdCBzaXplLF9DT1JCQV9Cb29sZWFuIHN0YXJ0TVRVPTApID0gMDsKIyAyNDEgIi4uLy4uLy4u
Ly4uL2luY2x1ZGUvb21uaU9SQjMvcm9wZS5oIgogIHZpcnR1YWwgc2J1ZiByZXNlcnZlKHNpemVf
dCBzaXplLF9DT1JCQV9Cb29sZWFuIGV4YWN0bHksaW50IGFsaWduLAogICAgICAgICAgICAgICAg
ICAgICAgIF9DT1JCQV9Cb29sZWFuIHRyYW5zbWl0PTAsX0NPUkJBX0Jvb2xlYW4gZW5kTVRVPTAp
PTA7CiMgMjc1ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL3JvcGUuaCIKICB2aXJ0dWFs
IHNidWYgcmVzZXJ2ZV9hbmRfc3RhcnRNVFUoc2l6ZV90IHNpemUsX0NPUkJBX0Jvb2xlYW4gZXhh
Y3RseSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsaWduLF9DT1JC
QV9Cb29sZWFuIHRyYW5zbWl0PTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9DT1JCQV9Cb29sZWFuIGF0X21vc3Rfb25jZT0wKT0wOwoKCgoKICB2aXJ0dWFsIHZvaWQgZ2l2
ZWJhY2tfcmVzZXJ2ZWQoc2l6ZV90IGxlZnRvdmVyLF9DT1JCQV9Cb29sZWFuIHRyYW5zbWl0PTAs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIGVuZE1UVT0w
KT0wOwojIDMwOCAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9yb3BlLmgiCiAgdmlydHVh
bCBzaXplX3QgbWF4X3Jlc2VydmVfYnVmZmVyX3NpemUoKSA9IDA7CgoKCgogIHZpcnR1YWwgdm9p
ZCByZXNlcnZlX2FuZF9jb3B5KHNidWYgYixfQ09SQkFfQm9vbGVhbiB0cmFuc21pdD0wLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIGVuZE1UVT0wKSA9IDA7
CiMgMzM4ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL3JvcGUuaCIKICBpbmxpbmUgX0NP
UkJBX1VMb25nIHNlcXVlbmNlTnVtYmVyKCkgeyByZXR1cm4gcGRfc2VxTnVtYmVyKys7IH0KIyAz
NTAgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvcm9wZS5oIgogIHZvaWQgc2h1dGRvd24o
KTsKIyAzNjIgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvcm9wZS5oIgogIHZpcnR1YWwg
dm9pZCByZWFsX3NodXRkb3duKCkgPSAwOwojIDM3NCAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5p
T1JCMy9yb3BlLmgiCiAgdm9pZCBpbmNyUmVmQ291bnQoX0NPUkJBX0Jvb2xlYW4gaGVsZF9yb3Bl
X211dGV4ID0gMCk7CiMgMzgzICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL3JvcGUuaCIK
ICB2b2lkIGRlY3JSZWZDb3VudChfQ09SQkFfQm9vbGVhbiBoZWxkX3JvcGVfbXV0ZXggPSAwKTsK
IyAzOTIgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvcm9wZS5oIgogIF9DT1JCQV9Cb29s
ZWFuIGlzX2lkbGUoX0NPUkJBX0Jvb2xlYW4gaGVsZF9yb3BlX211dGV4ID0gMCk7CiMgNDAzICIu
Li8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL3JvcGUuaCIKICBfQ09SQkFfQm9vbGVhbiBpc191
bnVzZWQoX0NPUkJBX0Jvb2xlYW4gaGVsZF9yb3BlX211dGV4ID0gMCk7CiMgNDE1ICIuLi8uLi8u
Li8uLi9pbmNsdWRlL29tbmlPUkIzL3JvcGUuaCIKICBjbGFzcyBTeW5jIHsKCiAgcHVibGljOgog
ICAgU3luYyhTdHJhbmQgKnMsX0NPUkJBX0Jvb2xlYW4gUmRMb2NrPTEsX0NPUkJBX0Jvb2xlYW4g
V3JMb2NrPTEpOwojIDQzNyAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9yb3BlLmgiCiAg
ICBTeW5jKFJvcGUgKnIsX0NPUkJBX0Jvb2xlYW4gUmRMb2NrPTEsX0NPUkJBX0Jvb2xlYW4gV3JM
b2NrPTEpOwojIDQ0OSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9yb3BlLmgiCiAgICB+
U3luYygpOwojIDQ2OCAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9yb3BlLmgiCiAgICBf
Q09SQkFfQm9vbGVhbiBpc1JlVXNpbmdFeGlzdGluZ0Nvbm5lY3Rpb24oKSBjb25zdDsKIyA0ODEg
Ii4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvcm9wZS5oIgogIHByb3RlY3RlZDoKICAgIHZv
aWQgUmRMb2NrKF9DT1JCQV9Cb29sZWFuIGhlbGRfcm9wZV9tdXRleD0wKTsKICAgIHZvaWQgV3JM
b2NrKF9DT1JCQV9Cb29sZWFuIGhlbGRfcm9wZV9tdXRleD0wKTsKICAgIHZvaWQgUmRVbmxvY2so
X0NPUkJBX0Jvb2xlYW4gaGVsZF9yb3BlX211dGV4PTApOwogICAgdm9pZCBXclVubG9jayhfQ09S
QkFfQm9vbGVhbiBoZWxkX3JvcGVfbXV0ZXg9MCk7CiMgNTA1ICIuLi8uLi8uLi8uLi9pbmNsdWRl
L29tbmlPUkIzL3JvcGUuaCIKICBwdWJsaWM6CiAgICBzdGF0aWMgaW50IGNsaWNrc0RlY3JBbmRH
ZXQoU3RyYW5kKnMpOwojIDUxNSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9yb3BlLmgi
CiAgICBzdGF0aWMgaW50IGNsaWNrc0dldChTdHJhbmQqcyk7CiMgNTI0ICIuLi8uLi8uLi8uLi9p
bmNsdWRlL29tbmlPUkIzL3JvcGUuaCIKICBwcm90ZWN0ZWQ6CiAgICB2b2lkIGNsaWNrc1NldChp
bnQgY2xpY2tzLCBfQ09SQkFfQm9vbGVhbiBoZWxkX3JvcGVfbXV0ZXg9MCk7CiMgNTM1ICIuLi8u
Li8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL3JvcGUuaCIKICAgIGlubGluZSBTdHJhbmQgKmdldF9z
dHJhbmQoKSB7IHJldHVybiBwZF9zdHJhbmQ7IH0KCgoKICAgIHZvaWQgc2V0U3RyYW5kSXNEeWlu
ZygpOwoKCgoKICAgIF9DT1JCQV9Cb29sZWFuIHN0cmFuZElzRHlpbmcoKTsKCgoKCiAgcHJpdmF0
ZToKICAgIFN0cmFuZCogZ2V0TG9ja2FibGVTdHJhbmQoUm9wZSogcm9wZSwgX0NPUkJBX0Jvb2xl
YW4mIHNlY29uZEhhbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29s
ZWFuIHJkbG9jaywgX0NPUkJBX0Jvb2xlYW4gd3Jsb2NrKTsKCgoKCgogICAgU3RyYW5kKiBnZXRM
b2NrZWRTdHJhbmQoUm9wZSogcm9wZSwgX0NPUkJBX0Jvb2xlYW4mIHNlY29uZEhhbmQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiByZGxvY2ssIF9DT1JCQV9Cb29s
ZWFuIHdybG9jayk7CgoKCgogICAgU3RyYW5kICpwZF9zdHJhbmQ7CiAgICBfQ09SQkFfQm9vbGVh
biBwZF9zZWNvbmRIYW5kOwogICAgU3luYygpOwogIH07CgogIGlubGluZSBfQ09SQkFfQm9vbGVh
biBfc3RyYW5kSXNEeWluZygpIHsgcmV0dXJuIHBkX2R5aW5nOyB9Cgpwcm90ZWN0ZWQ6CgogIGlu
bGluZSB2b2lkIF9zZXRTdHJhbmRJc0R5aW5nKCkgeyBwZF9keWluZyA9IDE7IH0KICBpbmxpbmUg
X0NPUkJBX0Jvb2xlYW4gaXNPdXRnb2luZygpOwoKICBmcmllbmQgY2xhc3MgU3luYzsKICBmcmll
bmQgY2xhc3MgU3RyYW5kX2l0ZXJhdG9yOwogIGZyaWVuZCBjbGFzcyBSb3BlOwogIGZyaWVuZCBj
bGFzcyBSb3BlX2l0ZXJhdG9yOwoKcHJpdmF0ZToKICBvbW5pX2NvbmRpdGlvbiBwZF9yZGNvbmQ7
CiAgaW50IHBkX3JkX253YWl0aW5nOwoKICBvbW5pX2NvbmRpdGlvbiBwZF93cmNvbmQ7CiAgaW50
IHBkX3dyX253YWl0aW5nOwoKICBpbnQgcGRfdXNlQ291bnQ7CgoKCiAgU3RyYW5kICpwZF9uZXh0
OwogIFJvcGUgKnBkX3JvcGU7CiAgX0NPUkJBX0Jvb2xlYW4gcGRfZHlpbmc7CiAgaW50IHBkX3Jl
ZmNvdW50OwogIF9DT1JCQV9VTG9uZyBwZF9zZXFOdW1iZXI7CiAgaW50IHBkX2NsaWNrczsKCnB1
YmxpYzoKICBTdHJhbmQgKnBkX3JpcHBlcl9uZXh0OwoKCgogIFN0cmFuZCgpOwogIFN0cmFuZChj
b25zdCBTdHJhbmQmKTsKICBTdHJhbmQgJm9wZXJhdG9yPShjb25zdCBTdHJhbmQmKTsKfTsKCnR5
cGVkZWYgU3RyYW5kOjpTeW5jIFN0cmFuZF9TeW5jOwoKY2xhc3MgRW5kcG9pbnQgewpwdWJsaWM6
CiAgaW5saW5lIEVuZHBvaW50KF9DT1JCQV9DaGFyICpwcm90b2NvbCkgewogICAgcGRfcHJvdG9j
b2xuYW1lID0gbmV3IF9DT1JCQV9DaGFyIFtzdHJsZW4oKGNoYXIgKilwcm90b2NvbCkrMV07CiAg
ICBzdHJjcHkoKGNoYXIgKilwZF9wcm90b2NvbG5hbWUsKGNoYXIgKilwcm90b2NvbCk7CiAgICBy
ZXR1cm47CiAgfQoKICBpbmxpbmUgRW5kcG9pbnQoY29uc3QgRW5kcG9pbnQgJmUpIHsKICAgIHBk
X3Byb3RvY29sbmFtZSA9IG5ldyBfQ09SQkFfQ2hhciBbc3RybGVuKChjaGFyICopZS5wZF9wcm90
b2NvbG5hbWUpKzFdOwogICAgc3RyY3B5KChjaGFyICopcGRfcHJvdG9jb2xuYW1lLChjaGFyICop
ZS5wZF9wcm90b2NvbG5hbWUpOwogICAgcmV0dXJuOwogIH0KCiAgaW5saW5lIEVuZHBvaW50ICZv
cGVyYXRvcj0oY29uc3QgRW5kcG9pbnQgJmUpIHsKICAgIGRlbGV0ZSBbXSBwZF9wcm90b2NvbG5h
bWU7CiAgICBwZF9wcm90b2NvbG5hbWUgPSBuZXcgX0NPUkJBX0NoYXIgW3N0cmxlbigoY2hhciAq
KWUucGRfcHJvdG9jb2xuYW1lKSsxXTsKICAgIHN0cmNweSgoY2hhciAqKXBkX3Byb3RvY29sbmFt
ZSwoY2hhciAqKWUucGRfcHJvdG9jb2xuYW1lKTsKICAgIHJldHVybiAqdGhpczsKICB9CgogIHZp
cnR1YWwgfkVuZHBvaW50KCk7CgogIGlubGluZSBfQ09SQkFfQm9vbGVhbiBpc19wcm90b2NvbChj
b25zdCBfQ09SQkFfQ2hhciAqbmFtZSkgY29uc3QgewogICAgaWYgKHN0cmNtcCgoY29uc3QgY2hh
ciAqKW5hbWUsKGNoYXIgKilwZF9wcm90b2NvbG5hbWUpID09IDApIHsKICAgICAgcmV0dXJuIDE7
CiAgICB9CiAgICBlbHNlIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgfQoKICBpbmxpbmUgX0NP
UkJBX0NoYXIqIHByb3RvY29sKCkgY29uc3QgewogICAgcmV0dXJuIHBkX3Byb3RvY29sbmFtZTsK
ICB9Cgpwcml2YXRlOgogIF9DT1JCQV9DaGFyICogcGRfcHJvdG9jb2xuYW1lOwogIEVuZHBvaW50
KCk7Cn07CgpjbGFzcyBFbmRwb2ludF92YXIgewpwdWJsaWM6CiAgaW5saW5lIEVuZHBvaW50X3Zh
cigpIDogcGRfcCgwKSB7fQogIGlubGluZSBFbmRwb2ludF92YXIoRW5kcG9pbnQqIHApIDogcGRf
cChwKSB7fQogIGlubGluZSB+RW5kcG9pbnRfdmFyKCkgeyBpZiAocGRfcCkgZGVsZXRlIHBkX3A7
IH0KICBpbmxpbmUgRW5kcG9pbnRfdmFyJiBvcGVyYXRvcj0oRW5kcG9pbnQqIHApIHsKICAgIGlm
IChwZF9wKSBkZWxldGUgcGRfcDsKICAgIHBkX3AgPSBwOwogICAgcmV0dXJuICp0aGlzOwogIH0K
ICBpbmxpbmUgb3BlcmF0b3IgRW5kcG9pbnQqKCkgY29uc3QgeyByZXR1cm4gcGRfcDsgfQpwcml2
YXRlOgogIEVuZHBvaW50KiBwZF9wOwogIEVuZHBvaW50X3ZhciYgb3BlcmF0b3I9KGNvbnN0IEVu
ZHBvaW50X3ZhciYpOwp9OwoKY2xhc3MgU3RyYW5kX2l0ZXJhdG9yIHsKcHVibGljOgogIFN0cmFu
ZF9pdGVyYXRvcihjb25zdCBSb3BlICpyLF9DT1JCQV9Cb29sZWFuIGhlbGRfcm9wZV9tdXRleCA9
IDApOwojIDY3OCAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9yb3BlLmgiCiAgflN0cmFu
ZF9pdGVyYXRvcigpOwojIDY4NyAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9yb3BlLmgi
CiAgU3RyYW5kICpvcGVyYXRvcigpICgpOwoKCgoKcHJpdmF0ZToKICBjb25zdCBSb3BlICpwZF9y
b3BlOwogIF9DT1JCQV9Cb29sZWFuIHBkX2xlYXZlX211dGV4OwogIF9DT1JCQV9Cb29sZWFuIHBk
X2luaXRpYWxpc2VkOwogIFN0cmFuZCAqcGRfczsKICBTdHJhbmRfaXRlcmF0b3IoKTsKfTsKCmNs
YXNzIEFuY2hvciB7CnB1YmxpYzoKICBBbmNob3IoKTsKICB+QW5jaG9yKCk7Cgpwcml2YXRlOgog
IGZyaWVuZCBjbGFzcyBSb3BlOwogIGZyaWVuZCBjbGFzcyBSb3BlX2l0ZXJhdG9yOwoKICBvbW5p
X211dGV4IHBkX2xvY2s7CiAgUm9wZSAqcGRfaGVhZDsKfTsKCgoKY2xhc3MgUm9wZSB7CnB1Ymxp
YzoKICBSb3BlKEFuY2hvciAqYSwKICAgICAgIHVuc2lnbmVkIGludCBtYXhTdHJhbmRzKTsKCgoK
CgoKCiAgdmlydHVhbCB+Um9wZSgpOwoKCgoKCgoKICB2aXJ0dWFsIHZvaWQgQ3V0U3RyYW5kcyhf
Q09SQkFfQm9vbGVhbiBoZWxkX3JvcGVfbXV0ZXggPSAwKTsKIyA3NDMgIi4uLy4uLy4uLy4uL2lu
Y2x1ZGUvb21uaU9SQjMvcm9wZS5oIgogIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gaXNfaW5jb21p
bmcoKSBjb25zdCA9IDA7CgoKCgogIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gaXNfb3V0Z29pbmco
KSBjb25zdCA9IDA7CgoKCgogIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gcmVtb3RlX2lzKEVuZHBv
aW50IComZSkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIHRoaXNfaXMoRW5k
cG9pbnQgKiZlKSA9IDA7CgoKCgoKCiAgdm9pZCBpbmNyUmVmQ291bnQoX0NPUkJBX0Jvb2xlYW4g
aGVsZF9hbmNob3JfbXV0ZXggPSAwKTsKIyA3NzcgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9S
QjMvcm9wZS5oIgogIHZvaWQgZGVjclJlZkNvdW50KF9DT1JCQV9Cb29sZWFuIGhlbGRfYW5jaG9y
X211dGV4ID0gMCk7CiMgNzg2ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL3JvcGUuaCIK
ICBfQ09SQkFfQm9vbGVhbiBpc19pZGxlKF9DT1JCQV9Cb29sZWFuIGhlbGRfYW5jaG9yX211dGV4
ID0gMCk7CiMgNzk2ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL3JvcGUuaCIKICBpbmxp
bmUgQW5jaG9yKiBhbmNob3IoKSBjb25zdCB7IHJldHVybiBwZF9hbmNob3I7IH0KCiAgZnJpZW5k
IGNsYXNzIFN0cmFuZDsKICBmcmllbmQgY2xhc3MgU3RyYW5kX2l0ZXJhdG9yOwogIGZyaWVuZCBj
bGFzcyBSb3BlX2l0ZXJhdG9yOwogIGZyaWVuZCBjbGFzcyBTdHJhbmQ6OlN5bmM7Cgpwcm90ZWN0
ZWQ6CgogIG9tbmlfbXV0ZXggcGRfbG9jazsKICBvbW5pX2NvbmRpdGlvbiBwZF9jb25kOwogIGlu
dCBwZF9jb25kX2NvdW50ZXI7CgogIHZpcnR1YWwgU3RyYW5kKiBnZXRTdHJhbmQoX0NPUkJBX0Jv
b2xlYW4mIHNlY29uZEhhbmQpOwojIDgyOSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9y
b3BlLmgiCiAgdmlydHVhbCBTdHJhbmQgKm5ld1N0cmFuZCgpID0gMDsKIyA4NTMgIi4uLy4uLy4u
Ly4uL2luY2x1ZGUvb21uaU9SQjMvcm9wZS5oIgpwcml2YXRlOgoKCiAgdW5zaWduZWQgaW50IHBk
X21heFN0cmFuZHM7CgogIFN0cmFuZCAqcGRfaGVhZDsKICBSb3BlICpwZF9uZXh0OwogIEFuY2hv
ciAqcGRfYW5jaG9yOwogIGludCBwZF9yZWZjb3VudDsKCiAgUm9wZSgpOwp9OwoKY2xhc3MgUm9w
ZV92YXIgewpwdWJsaWM6CiAgaW5saW5lIFJvcGVfdmFyKCkgOiBfcHRyKDApIHt9CgogIGlubGlu
ZSBSb3BlX3ZhcihSb3BlKiBwKSB7IF9wdHIgPSBwOyB9CgogIGlubGluZSB+Um9wZV92YXIoKSB7
CiAgICBpZiAoX3B0cikKICAgICAgX3B0ci0+ZGVjclJlZkNvdW50KCk7CiAgfQoKICBpbmxpbmUg
Um9wZV92YXIoY29uc3QgUm9wZV92YXImIHApIHsKICAgIGlmIChwLl9wdHIpIHsKICAgICAgcC5f
cHRyLT5pbmNyUmVmQ291bnQoKTsKICAgIH0KICAgIF9wdHIgPSBwLl9wdHI7CiAgfQoKICBpbmxp
bmUgUm9wZV92YXImIG9wZXJhdG9yPSAoY29uc3QgUm9wZV92YXImIHApIHsKICAgIGlmIChfcHRy
KSB7CiAgICAgIF9wdHItPmRlY3JSZWZDb3VudCgpOwogICAgICBfcHRyID0gMDsKICAgIH0KICAg
IGlmIChwLl9wdHIpIHsKICAgICAgcC5fcHRyLT5pbmNyUmVmQ291bnQoKTsKICAgIH0KICAgIF9w
dHIgPSBwLl9wdHI7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgUm9wZV92YXImIG9w
ZXJhdG9yPSAoUm9wZSogcCkgewogICAgaWYgKF9wdHIpIHsKICAgICAgX3B0ci0+ZGVjclJlZkNv
dW50KCk7CiAgICAgIF9wdHIgPSAwOwogICAgfQogICAgX3B0ciA9IHA7CiAgICByZXR1cm4gKnRo
aXM7CiAgfQoKICBpbmxpbmUgUm9wZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIF9wdHI7
IH0KCiAgaW5saW5lIG9wZXJhdG9yIFJvcGUqKCkgY29uc3QgeyByZXR1cm4gX3B0cjsgfQoKICBS
b3BlKiBfcHRyOwp9OwoKY2xhc3Mgcm9wZUZhY3Rvcnk7CgpjbGFzcyBSb3BlX2l0ZXJhdG9yIHsK
cHVibGljOgogIFJvcGVfaXRlcmF0b3IoY29uc3QgQW5jaG9yICphKTsKCgoKCgoKCiAgUm9wZV9p
dGVyYXRvcihyb3BlRmFjdG9yeSogcmYpOwojIDkzMyAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5p
T1JCMy9yb3BlLmgiCiAgflJvcGVfaXRlcmF0b3IoKTsKCgoKCgoKCiAgUm9wZSAqb3BlcmF0b3Io
KSAoKTsKCnByaXZhdGU6CiAgY29uc3QgQW5jaG9yICpwZF9hbmNob3I7CiAgUm9wZSAqcGRfcjsK
ICBSb3BlX2l0ZXJhdG9yKCk7Cn07CgoKaW5saW5lCl9DT1JCQV9Cb29sZWFuClN0cmFuZDo6aXNP
dXRnb2luZygpIHsKICByZXR1cm4gcGRfcm9wZS0+aXNfb3V0Z29pbmcoKTsKfQojIDE4MyAiLi4v
Li4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9vbW5pSW50ZXJuYWwuaCIgMgoKCgoKCgpjbGFzcyBv
bW5pIHsKCnB1YmxpYzoKCgogIHR5cGVkZWYgbG9uZyBwdHJfYXJpdGhfdDsKCgoKCgoKICBlbnVt
IGFsaWdubWVudF90IHsgQUxJR05fMSA9IDEsIEFMSUdOXzIgPSAyLCBBTElHTl80ID0gNCwgQUxJ
R05fOCA9IDggfTsKCgogIHN0YXRpYyBjb25zdCBfQ09SQkFfQ2hhciBteUJ5dGVPcmRlcjsKICBz
dGF0aWMgb21uaV90cmFjZWRtdXRleCogaW50ZXJuYWxMb2NrOwogIHN0YXRpYyBvbW5pX3RyYWNl
ZG11dGV4KiBvYmpyZWZfcmNfbG9jazsKCiAgc3RhdGljIG9tbmlfdHJhY2VkbXV0ZXgqIHBvUmNM
b2NrOwoKCiAgc3RhdGljIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX09jdGV0IG15UHJpbmNp
cGFsSUQ7CiAgc3RhdGljIGNvbnN0IGFsaWdubWVudF90IG1heF9hbGlnbm1lbnQ7CgoKICBzdGF0
aWMgY29uc3QgY2hhcipjb25zdCBlbXB0eV9zdHJpbmc7CgoKCiAgc3RhdGljIGludCByZW1vdGVJ
bnZvY2F0aW9uQ291bnQ7CiAgc3RhdGljIGludCBsb2NhbEludm9jYXRpb25Db3VudDsKCgoKCgog
IHN0YXRpYyBpbmxpbmUgcHRyX2FyaXRoX3QgYWxpZ25fdG8ocHRyX2FyaXRoX3QgcCwgYWxpZ25t
ZW50X3QgYWxpZ24pIHsKICAgIHJldHVybiAocCArICgoaW50KSBhbGlnbiAtIDEpKSAmIH4oKGlu
dCkgYWxpZ24gLSAxKTsKICB9CgogIHN0YXRpYyBfQ09SQkFfVUxvbmcgaGFzaChjb25zdCBfQ09S
QkFfT2N0ZXQqIGtleSwgaW50IGtleXNpemUpOwoKCgogIHN0YXRpYyBpbmxpbmUgY2hhciogYWxs
b2NTdHJpbmcoaW50IGxlbikgeyByZXR1cm4gbmV3IGNoYXJbbGVuICsgMV07IH0KCgoKCiAgc3Rh
dGljIGlubGluZSB2b2lkIGZyZWVTdHJpbmcoY2hhciogcykgewogICAgaWYgKHMgJiYgcyAhPSBl
bXB0eV9zdHJpbmcpIGRlbGV0ZVtdIHM7CiAgfQoKCiAgc3RhdGljIG9tbmlfdHJhY2VkbXV0ZXgm
IG5pbFJlZkxvY2soKTsKCgoKCiAgc3RhdGljIHZvaWQgZHVwbGljYXRlT2JqUmVmKG9tbmlPYmpS
ZWYqKTsKCgogIHN0YXRpYyB2b2lkIHJlbGVhc2VPYmpSZWYob21uaU9ialJlZiopOwoKCiAgc3Rh
dGljIG9tbmlTZXJ2YW50KiBvYmpSZWZUb1NlcnZhbnQob21uaU9ialJlZiogb2JqKTsKCgoKCgoK
ICBzdGF0aWMgb21uaUxvY2FsSWRlbnRpdHkqIGxvY2F0ZUlkZW50aXR5KGNvbnN0IF9DT1JCQV9P
Y3RldCoga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGtleXNpemUsIF9DT1JCQV9VTG9uZyBoYXNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xlYW4gY3JlYXRlX2R1bW15ID0gMCk7CgoKCgoKCiAg
c3RhdGljIG9tbmlMb2NhbElkZW50aXR5KiBhY3RpdmF0ZU9iamVjdChvbW5pU2VydmFudCogc2Vy
dmFudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9tbmlPYmpB
ZGFwdGVyKiBhZGFwdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb21uaU9iaktleSYga2V5KTsKIyAyODMgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMv
b21uaUludGVybmFsLmgiCiAgc3RhdGljIG9tbmlMb2NhbElkZW50aXR5KiBkZWFjdGl2YXRlT2Jq
ZWN0KGNvbnN0IF9DT1JCQV9PY3RldCoga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQga2V5c2l6ZSk7CiMgMzAyICIuLi8uLi8uLi8uLi9pbmNsdWRl
L29tbmlPUkIzL29tbmlJbnRlcm5hbC5oIgogIHN0YXRpYyBvbW5pT2JqUmVmKiBjcmVhdGVPYmpS
ZWYoY29uc3QgY2hhciogbW9zdERlcml2ZWRSZXBvSWQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiB0YXJnZXRSZXBvSWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0KiBwcm9maWxlcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIHJlbGVhc2VfcHJvZmlsZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiBsb2NrZWQp
OwoKCgoKCgoKICBzdGF0aWMgb21uaU9ialJlZiogY3JlYXRlT2JqUmVmKGNvbnN0IGNoYXIqIG1v
c3REZXJpdmVkUmVwb0lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogdGFyZ2V0UmVwb0lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb21u
aUxvY2FsSWRlbnRpdHkqIGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9Q
OjpUYWdnZWRQcm9maWxlTGlzdCogcHJvZmlsZXMgPSAwLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZV9wcm9maWxlcyA9IDAsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfT2N0ZXQqIGtleSA9IDApOwojIDMzMSAi
Li4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9vbW5pSW50ZXJuYWwuaCIKICBzdGF0aWMgdm9p
ZCByZXZlcnRUb09yaWdpbmFsUHJvZmlsZShvbW5pT2JqUmVmKiBvYmpyZWYpOwoKCgoKCgoKICBz
dGF0aWMgdm9pZCBsb2NhdGlvbkZvcndhcmQob21uaU9ialJlZiogb2JqLCBvbW5pT2JqUmVmKiBu
ZXdfbG9jYXRpb24pOwojIDM0OSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9vbW5pSW50
ZXJuYWwuaCIKICBzdGF0aWMgdm9pZCBhc3NlcnRGYWlsKGNvbnN0IGNoYXIqIGZpbGUsIGludCBs
aW5lLCBjb25zdCBjaGFyKiBleHApOwogIHN0YXRpYyB2b2lkIHVjaGVja0ZhaWwoY29uc3QgY2hh
ciogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIqIGV4cCk7Cgp9OwoKCgoKCmNsYXNzIG9tbmlS
b3BlQW5kS2V5IHsKcHVibGljOgogIGlubGluZSBvbW5pUm9wZUFuZEtleShSb3BlKiByLCBjb25z
dCBfQ09SQkFfT2N0ZXQqIGssIGludCBrc2l6ZSkKICAgIDogcGRfcm9wZShyKSwgcGRfa2V5KGss
IGtzaXplKQogICAgeyByLT5pbmNyUmVmQ291bnQoKTsgfQoKICBpbmxpbmUgb21uaVJvcGVBbmRL
ZXkoKSA6IHBkX3JvcGUoMCkge30KCiAgaW5saW5lIH5vbW5pUm9wZUFuZEtleSgpIHsgaWYoIHBk
X3JvcGUgKSBwZF9yb3BlLT5kZWNyUmVmQ291bnQoKTsgfQoKICBpbmxpbmUgUm9wZSogcm9wZSgp
IGNvbnN0IHsgcmV0dXJuIHBkX3JvcGU7IH0KICBpbmxpbmUgY29uc3QgX0NPUkJBX09jdGV0KiBr
ZXkoKSBjb25zdCB7CiAgICByZXR1cm4gcGRfa2V5LmtleSgpOwogIH0KICBpbmxpbmUgX0NPUkJB
X1VMb25nIGtleXNpemUoKSBjb25zdCB7IHJldHVybiBwZF9rZXkuc2l6ZSgpOyB9CgogIGlubGlu
ZSB2b2lkIHJvcGUoUm9wZSogcikgeyBwZF9yb3BlID0gcjsgci0+aW5jclJlZkNvdW50KCk7IH0K
ICBpbmxpbmUgdm9pZCBrZXkoY29uc3QgX0NPUkJBX09jdGV0KiBrLCBpbnQga3NpemUpIHsgcGRf
a2V5LmNvcHkoaywga3NpemUpOyB9Cgpwcml2YXRlOgogIG9tbmlSb3BlQW5kS2V5JiBvcGVyYXRv
cj0oY29uc3Qgb21uaVJvcGVBbmRLZXkmKTsKICBvbW5pUm9wZUFuZEtleShjb25zdCBvbW5pUm9w
ZUFuZEtleSYpOwoKCiAgUm9wZSogcGRfcm9wZTsKICBvbW5pT2JqS2V5IHBkX2tleTsKfTsKIyA0
MDcgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvb21uaUludGVybmFsLmgiCiMgMSAiLi4v
Li4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9idWZmZXJlZFN0cmVhbS5oIiAxCiMgMTY2ICIuLi8u
Li8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL2J1ZmZlcmVkU3RyZWFtLmgiCmNsYXNzIE5ldEJ1ZmZl
cmVkU3RyZWFtIDogcHVibGljIFN0cmFuZF9TeW5jIHsKcHVibGljOgogIE5ldEJ1ZmZlcmVkU3Ry
ZWFtKFN0cmFuZCAqcywKICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiBSZExvY2s9
MSwKICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiBXckxvY2s9MSwKICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgQnVmc2l6ZT0wKTsKICBOZXRCdWZmZXJlZFN0cmVhbShSb3BlICpy
LAogICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIFJkTG9jaz0xLAogICAgICAgICAg
ICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIFdyTG9jaz0xLAogICAgICAgICAgICAgICAgICAgIHNp
emVfdCBCdWZzaXplPTApOwogIH5OZXRCdWZmZXJlZFN0cmVhbSgpOwoKICBmcmllbmQgaW5saW5l
IHZvaWQgb3BlcmF0b3I+Pj0gKF9DT1JCQV9DaGFyIGEsIE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7
CiAgICB7IF9DT1JCQV9DaGFyICpwID0gKF9DT1JCQV9DaGFyICopIChzKS5hbGlnbl9hbmRfcHV0
X2J5dGVzKG9tbmk6OkFMSUdOXzEsc2l6ZW9mKF9DT1JCQV9DaGFyKSk7ICpwID0gYTsgfTsKICB9
CgogIGZyaWVuZCBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PSAoX0NPUkJBX0NoYXImIGEsIE5ldEJ1
ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICB7IF9DT1JCQV9DaGFyICpwID0gKF9DT1JCQV9DaGFyICop
IChzKS5hbGlnbl9hbmRfZ2V0X2J5dGVzKG9tbmk6OkFMSUdOXzEsc2l6ZW9mKF9DT1JCQV9DaGFy
KSk7IGEgPSAqcDsgfTsKICB9CgoKCiAgZnJpZW5kIGlubGluZSB2b2lkIG9wZXJhdG9yPj49IChf
Q09SQkFfQm9vbGVhbiBiLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgX0NPUkJBX0NoYXIg
YyA9IGIgPyAxIDogMDsKICAgIHsgX0NPUkJBX0NoYXIgKnAgPSAoX0NPUkJBX0NoYXIgKikgKHMp
LmFsaWduX2FuZF9wdXRfYnl0ZXMob21uaTo6QUxJR05fMSxzaXplb2YoX0NPUkJBX0NoYXIpKTsg
KnAgPSBjOyB9OwogIH0KCiAgZnJpZW5kIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9IChfQ09SQkFf
Qm9vbGVhbiYgYiwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIF9DT1JCQV9DaGFyIGM7CiAg
ICB7IF9DT1JCQV9DaGFyICpwID0gKF9DT1JCQV9DaGFyICopIChzKS5hbGlnbl9hbmRfZ2V0X2J5
dGVzKG9tbmk6OkFMSUdOXzEsc2l6ZW9mKF9DT1JCQV9DaGFyKSk7IGMgPSAqcDsgfTsKICAgIGIg
PSBjID8gdHJ1ZSA6IGZhbHNlOwogIH0KCgoKICBmcmllbmQgaW5saW5lIHZvaWQgb3BlcmF0b3I+
Pj0gKF9DT1JCQV9TaG9ydCBhLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgeyBfQ09SQkFf
U2hvcnQgKnAgPSAoX0NPUkJBX1Nob3J0ICopIChzKS5hbGlnbl9hbmRfcHV0X2J5dGVzKG9tbmk6
OkFMSUdOXzIsc2l6ZW9mKF9DT1JCQV9TaG9ydCkpOyAqcCA9IGE7IH07CiAgfQoKICBmcmllbmQg
aW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKF9DT1JCQV9TaG9ydCYgYSwgTmV0QnVmZmVyZWRTdHJl
YW0mIHMpIHsKICAgIGlmIChzLlJkTWVzc2FnZUJ5dGVPcmRlcigpICE9IG9tbmk6Om15Qnl0ZU9y
ZGVyKSB7CiAgICAgIF9DT1JCQV9TaG9ydCB0OwogICAgICB7IF9DT1JCQV9TaG9ydCAqcCA9IChf
Q09SQkFfU2hvcnQgKikgKHMpLmFsaWduX2FuZF9nZXRfYnl0ZXMob21uaTo6QUxJR05fMixzaXpl
b2YoX0NPUkJBX1Nob3J0KSk7IHQgPSAqcDsgfTsKICAgICAgYSA9ICgoKCh0KSAmIDB4ZmYpIDw8
IDgpIHwgKCgodCkgPj4gOCkgJiAweGZmKSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgeyBfQ09S
QkFfU2hvcnQgKnAgPSAoX0NPUkJBX1Nob3J0ICopIChzKS5hbGlnbl9hbmRfZ2V0X2J5dGVzKG9t
bmk6OkFMSUdOXzIsc2l6ZW9mKF9DT1JCQV9TaG9ydCkpOyBhID0gKnA7IH07CiAgICB9CiAgICBy
ZXR1cm47CiAgfQoKICBmcmllbmQgaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0gKF9DT1JCQV9VU2hv
cnQgYSwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIHsgX0NPUkJBX1VTaG9ydCAqcCA9IChf
Q09SQkFfVVNob3J0ICopIChzKS5hbGlnbl9hbmRfcHV0X2J5dGVzKG9tbmk6OkFMSUdOXzIsc2l6
ZW9mKF9DT1JCQV9VU2hvcnQpKTsgKnAgPSBhOyB9OwogIH0KCiAgZnJpZW5kIGlubGluZSB2b2lk
IG9wZXJhdG9yPDw9IChfQ09SQkFfVVNob3J0JiBhLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewog
ICAgaWYgKHMuUmRNZXNzYWdlQnl0ZU9yZGVyKCkgIT0gb21uaTo6bXlCeXRlT3JkZXIpIHsKICAg
ICAgX0NPUkJBX1VTaG9ydCB0OwogICAgICB7IF9DT1JCQV9VU2hvcnQgKnAgPSAoX0NPUkJBX1VT
aG9ydCAqKSAocykuYWxpZ25fYW5kX2dldF9ieXRlcyhvbW5pOjpBTElHTl8yLHNpemVvZihfQ09S
QkFfVVNob3J0KSk7IHQgPSAqcDsgfTsKICAgICAgYSA9ICgoKCh0KSAmIDB4ZmYpIDw8IDgpIHwg
KCgodCkgPj4gOCkgJiAweGZmKSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgeyBfQ09SQkFfVVNo
b3J0ICpwID0gKF9DT1JCQV9VU2hvcnQgKikgKHMpLmFsaWduX2FuZF9nZXRfYnl0ZXMob21uaTo6
QUxJR05fMixzaXplb2YoX0NPUkJBX1VTaG9ydCkpOyBhID0gKnA7IH07CiAgICB9CiAgICByZXR1
cm47CiAgfQoKCiAgZnJpZW5kIGlubGluZSB2b2lkIG9wZXJhdG9yPj49IChfQ09SQkFfTG9uZyBh
LCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgeyBfQ09SQkFfTG9uZyAqcCA9IChfQ09SQkFf
TG9uZyAqKSAocykuYWxpZ25fYW5kX3B1dF9ieXRlcyhvbW5pOjpBTElHTl80LHNpemVvZihfQ09S
QkFfTG9uZykpOyAqcCA9IGE7IH07CiAgfQoKICBmcmllbmQgaW5saW5lIHZvaWQgb3BlcmF0b3I8
PD0gKF9DT1JCQV9Mb25nJiBhLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgaWYgKHMuUmRN
ZXNzYWdlQnl0ZU9yZGVyKCkgIT0gb21uaTo6bXlCeXRlT3JkZXIpIHsKICAgICAgX0NPUkJBX0xv
bmcgdDsKICAgICAgeyBfQ09SQkFfTG9uZyAqcCA9IChfQ09SQkFfTG9uZyAqKSAocykuYWxpZ25f
YW5kX2dldF9ieXRlcyhvbW5pOjpBTElHTl80LHNpemVvZihfQ09SQkFfTG9uZykpOyB0ID0gKnA7
IH07CiAgICAgIGEgPSAoKCgodCkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKCh0KSAmIDB4MDBm
ZjAwMDApID4+IDgpIHwgKCgodCkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKHQpICYgMHgwMDAw
MDBmZikgPDwgMjQpKTsKICAgIH0KICAgIGVsc2UgewogICAgICB7IF9DT1JCQV9Mb25nICpwID0g
KF9DT1JCQV9Mb25nICopIChzKS5hbGlnbl9hbmRfZ2V0X2J5dGVzKG9tbmk6OkFMSUdOXzQsc2l6
ZW9mKF9DT1JCQV9Mb25nKSk7IGEgPSAqcDsgfTsKICAgIH0KICAgIHJldHVybjsKICB9CgogIGZy
aWVuZCBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PSAoX0NPUkJBX1VMb25nIGEsIE5ldEJ1ZmZlcmVk
U3RyZWFtJiBzKSB7CiAgICB7IF9DT1JCQV9VTG9uZyAqcCA9IChfQ09SQkFfVUxvbmcgKikgKHMp
LmFsaWduX2FuZF9wdXRfYnl0ZXMob21uaTo6QUxJR05fNCxzaXplb2YoX0NPUkJBX1VMb25nKSk7
ICpwID0gYTsgfTsKICB9CgogIGZyaWVuZCBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PSAoX0NPUkJB
X1VMb25nJiBhLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgaWYgKHMuUmRNZXNzYWdlQnl0
ZU9yZGVyKCkgIT0gb21uaTo6bXlCeXRlT3JkZXIpIHsKICAgICAgX0NPUkJBX1VMb25nIHQ7CiAg
ICAgIHsgX0NPUkJBX1VMb25nICpwID0gKF9DT1JCQV9VTG9uZyAqKSAocykuYWxpZ25fYW5kX2dl
dF9ieXRlcyhvbW5pOjpBTElHTl80LHNpemVvZihfQ09SQkFfVUxvbmcpKTsgdCA9ICpwOyB9Owog
ICAgICBhID0gKCgoKHQpICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgodCkgJiAweDAwZmYwMDAw
KSA+PiA4KSB8ICgoKHQpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKCh0KSAmIDB4MDAwMDAwZmYp
IDw8IDI0KSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgeyBfQ09SQkFfVUxvbmcgKnAgPSAoX0NP
UkJBX1VMb25nICopIChzKS5hbGlnbl9hbmRfZ2V0X2J5dGVzKG9tbmk6OkFMSUdOXzQsc2l6ZW9m
KF9DT1JCQV9VTG9uZykpOyBhID0gKnA7IH07CiAgICB9CiAgICByZXR1cm47CiAgfQoKCgogIGZy
aWVuZCBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PSAoX0NPUkJBX0xvbmdMb25nIGEsIE5ldEJ1ZmZl
cmVkU3RyZWFtJiBzKSB7CiAgICB7IF9DT1JCQV9Mb25nTG9uZyAqcCA9IChfQ09SQkFfTG9uZ0xv
bmcgKikgKHMpLmFsaWduX2FuZF9wdXRfYnl0ZXMob21uaTo6QUxJR05fOCxzaXplb2YoX0NPUkJB
X0xvbmdMb25nKSk7ICpwID0gYTsgfTsKICB9CgogIGZyaWVuZCBpbmxpbmUgdm9pZCBvcGVyYXRv
cjw8PSAoX0NPUkJBX0xvbmdMb25nJiBhLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgaWYg
KHMuUmRNZXNzYWdlQnl0ZU9yZGVyKCkgIT0gb21uaTo6bXlCeXRlT3JkZXIpIHsKICAgICAgX0NP
UkJBX0xvbmdMb25nIHQ7CiAgICAgIHsgX0NPUkJBX0xvbmdMb25nICpwID0gKF9DT1JCQV9Mb25n
TG9uZyAqKSAocykuYWxpZ25fYW5kX2dldF9ieXRlcyhvbW5pOjpBTElHTl84LHNpemVvZihfQ09S
QkFfTG9uZ0xvbmcpKTsgdCA9ICpwOyB9OwogICAgICBhID0gKCgoKHQpICYgKDB4ZmYwMDAwMDAw
MDAwMDAwMExMKSkgPj4gNTYpIHwgKCgodCkgJiAoMHgwMGZmMDAwMDAwMDAwMDAwTEwpKSA+PiA0
MCkgfCAoKCh0KSAmICgweDAwMDBmZjAwMDAwMDAwMDBMTCkpID4+IDI0KSB8ICgoKHQpICYgKDB4
MDAwMDAwZmYwMDAwMDAwMExMKSkgPj4gOCkgfCAoKCh0KSAmICgweDAwMDAwMDAwZmYwMDAwMDBM
TCkpIDw8IDgpIHwgKCgodCkgJiAoMHgwMDAwMDAwMDAwZmYwMDAwTEwpKSA8PCAyNCkgfCAoKCh0
KSAmICgweDAwMDAwMDAwMDAwMGZmMDBMTCkpIDw8IDQwKSB8ICgoKHQpICYgKDB4MDAwMDAwMDAw
MDAwMDBmZkxMKSkgPDwgNTYpKTsKICAgIH0KICAgIGVsc2UgewogICAgICB7IF9DT1JCQV9Mb25n
TG9uZyAqcCA9IChfQ09SQkFfTG9uZ0xvbmcgKikgKHMpLmFsaWduX2FuZF9nZXRfYnl0ZXMob21u
aTo6QUxJR05fOCxzaXplb2YoX0NPUkJBX0xvbmdMb25nKSk7IGEgPSAqcDsgfTsKICAgIH0KICAg
IHJldHVybjsKICB9CgogIGZyaWVuZCBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PSAoX0NPUkJBX1VM
b25nTG9uZyBhLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgeyBfQ09SQkFfVUxvbmdMb25n
ICpwID0gKF9DT1JCQV9VTG9uZ0xvbmcgKikgKHMpLmFsaWduX2FuZF9wdXRfYnl0ZXMob21uaTo6
QUxJR05fOCxzaXplb2YoX0NPUkJBX1VMb25nTG9uZykpOyAqcCA9IGE7IH07CiAgfQoKICBmcmll
bmQgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKF9DT1JCQV9VTG9uZ0xvbmcmIGEsIE5ldEJ1ZmZl
cmVkU3RyZWFtJiBzKSB7CiAgICBpZiAocy5SZE1lc3NhZ2VCeXRlT3JkZXIoKSAhPSBvbW5pOjpt
eUJ5dGVPcmRlcikgewogICAgICBfQ09SQkFfVUxvbmdMb25nIHQ7CiAgICAgIHsgX0NPUkJBX1VM
b25nTG9uZyAqcCA9IChfQ09SQkFfVUxvbmdMb25nICopIChzKS5hbGlnbl9hbmRfZ2V0X2J5dGVz
KG9tbmk6OkFMSUdOXzgsc2l6ZW9mKF9DT1JCQV9VTG9uZ0xvbmcpKTsgdCA9ICpwOyB9OwogICAg
ICBhID0gKCgoKHQpICYgKDB4ZmYwMDAwMDAwMDAwMDAwMExMKSkgPj4gNTYpIHwgKCgodCkgJiAo
MHgwMGZmMDAwMDAwMDAwMDAwTEwpKSA+PiA0MCkgfCAoKCh0KSAmICgweDAwMDBmZjAwMDAwMDAw
MDBMTCkpID4+IDI0KSB8ICgoKHQpICYgKDB4MDAwMDAwZmYwMDAwMDAwMExMKSkgPj4gOCkgfCAo
KCh0KSAmICgweDAwMDAwMDAwZmYwMDAwMDBMTCkpIDw8IDgpIHwgKCgodCkgJiAoMHgwMDAwMDAw
MDAwZmYwMDAwTEwpKSA8PCAyNCkgfCAoKCh0KSAmICgweDAwMDAwMDAwMDAwMGZmMDBMTCkpIDw8
IDQwKSB8ICgoKHQpICYgKDB4MDAwMDAwMDAwMDAwMDBmZkxMKSkgPDwgNTYpKTsKICAgIH0KICAg
IGVsc2UgewogICAgICB7IF9DT1JCQV9VTG9uZ0xvbmcgKnAgPSAoX0NPUkJBX1VMb25nTG9uZyAq
KSAocykuYWxpZ25fYW5kX2dldF9ieXRlcyhvbW5pOjpBTElHTl84LHNpemVvZihfQ09SQkFfVUxv
bmdMb25nKSk7IGEgPSAqcDsgfTsKICAgIH0KICAgIHJldHVybjsKICB9CgoKCgoKICBmcmllbmQg
aW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0gKF9DT1JCQV9GbG9hdCBhLCBOZXRCdWZmZXJlZFN0cmVh
bSYgcykgewogICAgeyBfQ09SQkFfRmxvYXQgKnAgPSAoX0NPUkJBX0Zsb2F0ICopIChzKS5hbGln
bl9hbmRfcHV0X2J5dGVzKG9tbmk6OkFMSUdOXzQsc2l6ZW9mKF9DT1JCQV9GbG9hdCkpOyAqcCA9
IGE7IH07CiAgfQoKICBmcmllbmQgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKF9DT1JCQV9GbG9h
dCYgYSwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIGlmIChzLlJkTWVzc2FnZUJ5dGVPcmRl
cigpICE9IG9tbmk6Om15Qnl0ZU9yZGVyKSB7CiAgICAgIF9DT1JCQV9GbG9hdCB0OwogICAgICB7
IF9DT1JCQV9GbG9hdCAqcCA9IChfQ09SQkFfRmxvYXQgKikgKHMpLmFsaWduX2FuZF9nZXRfYnl0
ZXMob21uaTo6QUxJR05fNCxzaXplb2YoX0NPUkJBX0Zsb2F0KSk7IHQgPSAqcDsgfTsKICAgICAg
X0NPUkJBX1VMb25nIHRsMSA9ICooKF9DT1JCQV9VTG9uZyAqKSZ0KTsKICAgICAgX0NPUkJBX1VM
b25nIHRsMiA9ICgoKCh0bDEpICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgodGwxKSAmIDB4MDBm
ZjAwMDApID4+IDgpIHwgKCgodGwxKSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgodGwxKSAmIDB4
MDAwMDAwZmYpIDw8IDI0KSk7CiAgICAgIGEgPSAqKChfQ09SQkFfRmxvYXQgKikgJnRsMik7CiAg
ICB9CiAgICBlbHNlIHsKICAgICAgeyBfQ09SQkFfRmxvYXQgKnAgPSAoX0NPUkJBX0Zsb2F0ICop
IChzKS5hbGlnbl9hbmRfZ2V0X2J5dGVzKG9tbmk6OkFMSUdOXzQsc2l6ZW9mKF9DT1JCQV9GbG9h
dCkpOyBhID0gKnA7IH07CiAgICB9CiAgICByZXR1cm47CiAgfQoKICBmcmllbmQgaW5saW5lIHZv
aWQgb3BlcmF0b3I+Pj0gKF9DT1JCQV9Eb3VibGUgYSwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsK
ICAgIHsgX0NPUkJBX0RvdWJsZSAqcCA9IChfQ09SQkFfRG91YmxlICopIChzKS5hbGlnbl9hbmRf
cHV0X2J5dGVzKG9tbmk6OkFMSUdOXzgsc2l6ZW9mKF9DT1JCQV9Eb3VibGUpKTsgKnAgPSBhOyB9
OwogIH0KCiAgZnJpZW5kIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9IChfQ09SQkFfRG91YmxlJiBh
LCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgaWYgKHMuUmRNZXNzYWdlQnl0ZU9yZGVyKCkg
IT0gb21uaTo6bXlCeXRlT3JkZXIpIHsKICAgICAgX0NPUkJBX0RvdWJsZSB0OwogICAgICB7IF9D
T1JCQV9Eb3VibGUgKnAgPSAoX0NPUkJBX0RvdWJsZSAqKSAocykuYWxpZ25fYW5kX2dldF9ieXRl
cyhvbW5pOjpBTElHTl84LHNpemVvZihfQ09SQkFfRG91YmxlKSk7IHQgPSAqcDsgfTsKICAgICAg
X0NPUkJBX1VMb25nIHRsMSA9ICgoX0NPUkJBX1VMb25nICopJnQpWzFdOwogICAgICBfQ09SQkFf
VUxvbmcgdGwyID0gKCgoKHRsMSkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKCh0bDEpICYgMHgw
MGZmMDAwMCkgPj4gOCkgfCAoKCh0bDEpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKCh0bDEpICYg
MHgwMDAwMDBmZikgPDwgMjQpKTsKICAgICAgKChfQ09SQkFfVUxvbmcgKikmYSlbMF0gPSB0bDI7
CiAgICAgIHRsMSA9ICgoX0NPUkJBX1VMb25nICopJnQpWzBdOwogICAgICB0bDIgPSAoKCgodGwx
KSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgoKHRsMSkgJiAweDAwZmYwMDAwKSA+PiA4KSB8ICgo
KHRsMSkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKHRsMSkgJiAweDAwMDAwMGZmKSA8PCAyNCkp
OwogICAgICAoKF9DT1JCQV9VTG9uZyAqKSZhKVsxXSA9IHRsMjsKICAgIH0KICAgIGVsc2Ugewog
ICAgICB7IF9DT1JCQV9Eb3VibGUgKnAgPSAoX0NPUkJBX0RvdWJsZSAqKSAocykuYWxpZ25fYW5k
X2dldF9ieXRlcyhvbW5pOjpBTElHTl84LHNpemVvZihfQ09SQkFfRG91YmxlKSk7IGEgPSAqcDsg
fTsKICAgIH0KICAgIHJldHVybjsKICB9CgoKCgoKCgogIHZvaWQgcHV0X2NoYXJfYXJyYXkoY29u
c3QgX0NPUkJBX0NoYXIqIGIsIGludCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgIG9t
bmk6OmFsaWdubWVudF90IGFsaWduPW9tbmk6OkFMSUdOXzEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0NPUkJBX0Jvb2xlYW4gc3RhcnRNVFU9MCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfQ09SQkFfQm9vbGVhbiBhdF9tb3N0X29uY2U9MCk7CgoKCgoKICB2b2lkIGdldF9jaGFyX2Fy
cmF5KF9DT1JCQV9DaGFyKiBiLGludCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgIG9t
bmk6OmFsaWdubWVudF90IGFsaWduPW9tbmk6OkFMSUdOXzEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0NPUkJBX0Jvb2xlYW4gc3RhcnRNVFU9MCk7CgoKCgoKICB2b2lkIHNraXAoX0NPUkJB
X1VMb25nIHNpemUsX0NPUkJBX0Jvb2xlYW4gc3RhcnRNVFU9MCk7CgoKCgogIHZvaWQgZmx1c2go
X0NPUkJBX0Jvb2xlYW4gZW5kTVRVPTApOwoKCgogIHZvaWQgY29weV9mcm9tKE1lbUJ1ZmZlcmVk
U3RyZWFtJiwgc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAgb21uaTo6YWxpZ25tZW50X3Qg
YWxpZ249b21uaTo6QUxJR05fMSk7CiMgNDA1ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIz
L2J1ZmZlcmVkU3RyZWFtLmgiCiAgaW5saW5lIHNpemVfdCBNYXhNZXNzYWdlU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIHBkX3N0cmFuZC0+TWF4TVRVKCk7IH0KCiAgaW5saW5lIHNpemVfdCBXck1lc3Nh
Z2VTaXplKCkgY29uc3QgeyByZXR1cm4gcGRfd3Jtc2dfc2l6ZTsgfQoKCiAgaW5saW5lIHNpemVf
dCBSZE1lc3NhZ2VTaXplKCkgY29uc3QgeyByZXR1cm4gcGRfcmRtc2dfc2l6ZTsgfQoKCiAgc2l6
ZV90IFJkTWVzc2FnZUFscmVhZHlSZWFkKCkgY29uc3Q7CgoKCiAgc2l6ZV90IFJkTWVzc2FnZVVu
UmVhZCgpIGNvbnN0OwoKCgogIGlubGluZSBfQ09SQkFfQm9vbGVhbiBvdmVycnVuKF9DT1JCQV9V
TG9uZyBsZW4pIGNvbnN0IHsKICAgIHJldHVybiBsZW4gPiAoX0NPUkJBX1VMb25nKSBSZE1lc3Nh
Z2VVblJlYWQoKTsKICB9CgoKCiAgaW5saW5lIGludCByZEN1cnJlbnRBbGlnbm1lbnQoKSBjb25z
dCB7CiAgICByZXR1cm4gY3VycmVudF9pbmJfYWxpZ25tZW50KCk7CiAgfQoKICBzaXplX3QgV3JN
ZXNzYWdlQWxyZWFkeVdyaXR0ZW4oKSBjb25zdDsKCgoKICBzaXplX3QgV3JNZXNzYWdlU3BhY2VM
ZWZ0KCkgY29uc3Q7CgoKCiAgaW5saW5lIGludCB3ckN1cnJlbnRBbGlnbm1lbnQoKSBjb25zdCB7
CiAgICByZXR1cm4gY3VycmVudF9vdXRiX2FsaWdubWVudCgpOwogIH0KCiAgaW5saW5lIF9DT1JC
QV9DaGFyIFJkTWVzc2FnZUJ5dGVPcmRlcigpIGNvbnN0IHsKICAgIHJldHVybiBwZF9yZG1zZ19i
eXRlX29yZGVyOwogIH0KCnByb3RlY3RlZDoKICB2b2lkIFJkTG9jaygpOwogIHZvaWQgUmRVbmxv
Y2soKTsKICB2b2lkIFdyTG9jaygpOwogIHZvaWQgV3JVbmxvY2soKTsKCiAgaW5saW5lIF9DT1JC
QV9Mb25nIG5ld1JlcXVlc3RJRCgpIHsgcmV0dXJuIHBkX3N0cmFuZC0+c2VxdWVuY2VOdW1iZXIo
KTsgfQoKICB2b2lkIFdyTWVzc2FnZVNpemUoc2l6ZV90IG1zZ3NpemUpOwoKCiAgdm9pZCBSZE1l
c3NhZ2VTaXplKHNpemVfdCBtc2dzaXplLCBfQ09SQkFfQ2hhciBieXRlb3JkZXIpOwoKCnByaXZh
dGU6CiAgU3RyYW5kKiBwZF9zdHJhbmQ7CiAgc2l6ZV90IHBkX2lkZWFsX2J1Zl9zaXplOwogIHZv
aWQqIHBkX2luYl9lbmQ7CiAgdm9pZCogcGRfb3V0Yl9lbmQ7CiAgdm9pZCogcGRfaW5iX21rcjsK
ICB2b2lkKiBwZF9vdXRiX21rcjsKICBfQ09SQkFfQm9vbGVhbiBwZF9SZExvY2s7CiAgX0NPUkJB
X0Jvb2xlYW4gcGRfV3JMb2NrOwoKICBzaXplX3QgcGRfcmRtc2dfc2l6ZTsKICBzaXplX3QgcGRf
d3Jtc2dfc2l6ZTsKICBzaXplX3QgcGRfcmVhZDsKICBzaXplX3QgcGRfd3JpdHRlbjsKICBfQ09S
QkFfQ2hhciBwZF9yZG1zZ19ieXRlX29yZGVyOwoKICB2b2lkIGVuc3VyZV9yZGxvY2tlZCgpOwog
IHZvaWQgZW5zdXJlX3dybG9ja2VkKCk7CiAgdm9pZCByZXNlcnZlKHNpemVfdCBtaW5pbXVtLF9D
T1JCQV9Cb29sZWFuIHN0YXJ0TVRVPTAsCiAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIGF0
X21vc3Rfb25jZT0wKTsKICB2b2lkIGdpdmViYWNrX3Jlc2VydmVkKF9DT1JCQV9Cb29sZWFuIHRy
YW5zbWl0ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIGVuZE1U
VT0wKTsKICB2b2lkIHJlY2VpdmUoc2l6ZV90IG1pbmltdW0sX0NPUkJBX0Jvb2xlYW4gc3RhcnRN
VFU9MCk7CiAgdm9pZCBnaXZlYmFja19yZWNlaXZlZChfQ09SQkFfQm9vbGVhbiBzdGFydE1UVT0w
KTsKICBpbnQgY3VycmVudF9vdXRiX2FsaWdubWVudCgpIGNvbnN0OwogIGludCBjdXJyZW50X2lu
Yl9hbGlnbm1lbnQoKSBjb25zdDsKICB2b2lkIHJld2luZF9vdXRiX21rcihpbnQgb2xkYWxpZ25t
ZW50KTsKICB2b2lkIHJld2luZF9pbmJfbWtyKGludCBvbGRhbGlnbm1lbnQpOwoKICBpbmxpbmUg
dm9pZCogYWxpZ25fYW5kX3B1dF9ieXRlcyhvbW5pOjphbGlnbm1lbnRfdCBhbGlnbiwgc2l6ZV90
IG5ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVh
biBzdGFydE1UVT0wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9C
b29sZWFuIGF0X21vc3Rfb25jZT0wKQogIHsKCgoKCiAgICBpZiAoc3RhcnRNVFUpIGdpdmViYWNr
X3Jlc2VydmVkKDEsMSk7CiAgICBvbW5pOjpwdHJfYXJpdGhfdCBwMSA9b21uaTo6YWxpZ25fdG8o
KG9tbmk6OnB0cl9hcml0aF90KXBkX291dGJfbWtyLGFsaWduKTsKICAgIG9tbmk6OnB0cl9hcml0
aF90IHAyID0gcDEgKyBuYnl0ZXM7CiAgICBpZiggKHZvaWQqKXAyID4gcGRfb3V0Yl9lbmQgKSB7
CiAgICAgIHJlc2VydmUocDIgLSAob21uaTo6cHRyX2FyaXRoX3QpcGRfb3V0Yl9ta3IsIHN0YXJ0
TVRVLCBhdF9tb3N0X29uY2UpOwogICAgICBwMSA9IG9tbmk6OmFsaWduX3RvKChvbW5pOjpwdHJf
YXJpdGhfdClwZF9vdXRiX21rciwgYWxpZ24pOwogICAgICBwMiA9IHAxICsgbmJ5dGVzOwogICAg
fQogICAgcGRfb3V0Yl9ta3IgPSAodm9pZCopIHAyOwogICAgcmV0dXJuICh2b2lkKikgcDE7CiAg
fQoKICBpbmxpbmUgdm9pZCAqYWxpZ25fYW5kX2dldF9ieXRlcyhvbW5pOjphbGlnbm1lbnRfdCBh
bGlnbixzaXplX3QgbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9D
T1JCQV9Cb29sZWFuIHN0YXJ0TVRVPTApIHsKCgoKCiAgICBpZiAoc3RhcnRNVFUpIGdpdmViYWNr
X3JlY2VpdmVkKDEpOwogICAgb21uaTo6cHRyX2FyaXRoX3QgcDEgPSBvbW5pOjphbGlnbl90bygo
b21uaTo6cHRyX2FyaXRoX3QpcGRfaW5iX21rcixhbGlnbik7CiAgICBvbW5pOjpwdHJfYXJpdGhf
dCBwMiA9IHAxICsgbmJ5dGVzOwogICAgaWYgKCh2b2lkICopcDIgPiBwZF9pbmJfZW5kKSB7CiAg
ICAgIHJlY2VpdmUocDIgLSAob21uaTo6cHRyX2FyaXRoX3QpcGRfaW5iX21rciwgc3RhcnRNVFUp
OwogICAgICBwMSA9IG9tbmk6OmFsaWduX3RvKChvbW5pOjpwdHJfYXJpdGhfdClwZF9pbmJfbWty
LCBhbGlnbik7CiAgICAgIHAyID0gcDEgKyBuYnl0ZXM7CiAgICB9CiAgICBwZF9pbmJfbWtyID0g
KHZvaWQqKSBwMjsKICAgIHJldHVybiAodm9pZCopIHAxOwogIH0KCiAgTmV0QnVmZmVyZWRTdHJl
YW0oKTsKICBOZXRCdWZmZXJlZFN0cmVhbShjb25zdCBOZXRCdWZmZXJlZFN0cmVhbSYpOwogIE5l
dEJ1ZmZlcmVkU3RyZWFtJiBvcGVyYXRvcj0oY29uc3QgTmV0QnVmZmVyZWRTdHJlYW0mKTsKfTsK
CgoKCgpjbGFzcyBNZW1CdWZmZXJlZFN0cmVhbSB7CnB1YmxpYzoKICBNZW1CdWZmZXJlZFN0cmVh
bShzaXplX3QgaW5pdGlhbEJ1ZnNpemU9MCk7CiAgfk1lbUJ1ZmZlcmVkU3RyZWFtKCk7CgogIE1l
bUJ1ZmZlcmVkU3RyZWFtKGNvbnN0IE1lbUJ1ZmZlcmVkU3RyZWFtJik7CiAgTWVtQnVmZmVyZWRT
dHJlYW0mIG9wZXJhdG9yPShjb25zdCBNZW1CdWZmZXJlZFN0cmVhbSYpOwoKICBNZW1CdWZmZXJl
ZFN0cmVhbSh2b2lkKiBkYXRhYnVmZmVyKTsKICBNZW1CdWZmZXJlZFN0cmVhbSh2b2lkKiBkYXRh
YnVmZmVyLCBzaXplX3QgbWF4TGVuKTsKCgogIGZyaWVuZCBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+
PSAoX0NPUkJBX0NoYXIgYSwgTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIHsgX0NPUkJBX0No
YXIgKnAgPSAoX0NPUkJBX0NoYXIgKikgKHMpLmFsaWduX2FuZF9wdXRfYnl0ZXMob21uaTo6QUxJ
R05fMSxzaXplb2YoX0NPUkJBX0NoYXIpKTsgKnAgPSBhOyB9OwogIH0KCiAgZnJpZW5kIGlubGlu
ZSB2b2lkIG9wZXJhdG9yPDw9IChfQ09SQkFfQ2hhciYgYSwgTWVtQnVmZmVyZWRTdHJlYW0mIHMp
IHsKICAgIHsgX0NPUkJBX0NoYXIgKnAgPSAoX0NPUkJBX0NoYXIgKikgKHMpLmFsaWduX2FuZF9n
ZXRfYnl0ZXMob21uaTo6QUxJR05fMSxzaXplb2YoX0NPUkJBX0NoYXIpKTsgYSA9ICpwOyB9Owog
IH0KCgoKICBmcmllbmQgaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0gKF9DT1JCQV9Cb29sZWFuIGIs
IE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBfQ09SQkFfQ2hhciBjID0gYiA/IDEgOiAwOwog
ICAgeyBfQ09SQkFfQ2hhciAqcCA9IChfQ09SQkFfQ2hhciAqKSAocykuYWxpZ25fYW5kX3B1dF9i
eXRlcyhvbW5pOjpBTElHTl8xLHNpemVvZihfQ09SQkFfQ2hhcikpOyAqcCA9IGM7IH07CiAgfQoK
ICBmcmllbmQgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKF9DT1JCQV9Cb29sZWFuJiBiLCBNZW1C
dWZmZXJlZFN0cmVhbSYgcykgewogICAgX0NPUkJBX0NoYXIgYzsKICAgIHsgX0NPUkJBX0NoYXIg
KnAgPSAoX0NPUkJBX0NoYXIgKikgKHMpLmFsaWduX2FuZF9nZXRfYnl0ZXMob21uaTo6QUxJR05f
MSxzaXplb2YoX0NPUkJBX0NoYXIpKTsgYyA9ICpwOyB9OwogICAgYiA9IGMgPyB0cnVlIDogZmFs
c2U7CiAgfQoKCgogIGZyaWVuZCBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PSAoX0NPUkJBX1Nob3J0
IGEsIE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICB7IF9DT1JCQV9TaG9ydCAqcCA9IChfQ09S
QkFfU2hvcnQgKikgKHMpLmFsaWduX2FuZF9wdXRfYnl0ZXMob21uaTo6QUxJR05fMixzaXplb2Yo
X0NPUkJBX1Nob3J0KSk7ICpwID0gYTsgfTsKICB9CgogIGZyaWVuZCBpbmxpbmUgdm9pZCBvcGVy
YXRvcjw8PSAoX0NPUkJBX1Nob3J0JiBhLCBNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgaWYg
KHMuYnl0ZU9yZGVyKCkgIT0gb21uaTo6bXlCeXRlT3JkZXIpIHsKICAgICAgX0NPUkJBX1Nob3J0
IHQ7CiAgICAgIHsgX0NPUkJBX1Nob3J0ICpwID0gKF9DT1JCQV9TaG9ydCAqKSAocykuYWxpZ25f
YW5kX2dldF9ieXRlcyhvbW5pOjpBTElHTl8yLHNpemVvZihfQ09SQkFfU2hvcnQpKTsgdCA9ICpw
OyB9OwogICAgICBhID0gKCgoKHQpICYgMHhmZikgPDwgOCkgfCAoKCh0KSA+PiA4KSAmIDB4ZmYp
KTsKICAgIH0KICAgIGVsc2UgewogICAgICB7IF9DT1JCQV9TaG9ydCAqcCA9IChfQ09SQkFfU2hv
cnQgKikgKHMpLmFsaWduX2FuZF9nZXRfYnl0ZXMob21uaTo6QUxJR05fMixzaXplb2YoX0NPUkJB
X1Nob3J0KSk7IGEgPSAqcDsgfTsKICAgIH0KICAgIHJldHVybjsKICB9CgogIGZyaWVuZCBpbmxp
bmUgdm9pZCBvcGVyYXRvcj4+PSAoX0NPUkJBX1VTaG9ydCBhLCBNZW1CdWZmZXJlZFN0cmVhbSYg
cykgewogICAgeyBfQ09SQkFfVVNob3J0ICpwID0gKF9DT1JCQV9VU2hvcnQgKikgKHMpLmFsaWdu
X2FuZF9wdXRfYnl0ZXMob21uaTo6QUxJR05fMixzaXplb2YoX0NPUkJBX1VTaG9ydCkpOyAqcCA9
IGE7IH07CiAgfQoKICBmcmllbmQgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKF9DT1JCQV9VU2hv
cnQmIGEsIE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBpZiAocy5ieXRlT3JkZXIoKSAhPSBv
bW5pOjpteUJ5dGVPcmRlcikgewogICAgICBfQ09SQkFfVVNob3J0IHQ7CiAgICAgIHsgX0NPUkJB
X1VTaG9ydCAqcCA9IChfQ09SQkFfVVNob3J0ICopIChzKS5hbGlnbl9hbmRfZ2V0X2J5dGVzKG9t
bmk6OkFMSUdOXzIsc2l6ZW9mKF9DT1JCQV9VU2hvcnQpKTsgdCA9ICpwOyB9OwogICAgICBhID0g
KCgoKHQpICYgMHhmZikgPDwgOCkgfCAoKCh0KSA+PiA4KSAmIDB4ZmYpKTsKICAgIH0KICAgIGVs
c2UgewogICAgICB7IF9DT1JCQV9VU2hvcnQgKnAgPSAoX0NPUkJBX1VTaG9ydCAqKSAocykuYWxp
Z25fYW5kX2dldF9ieXRlcyhvbW5pOjpBTElHTl8yLHNpemVvZihfQ09SQkFfVVNob3J0KSk7IGEg
PSAqcDsgfTsKICAgIH0KICAgIHJldHVybjsKICB9CgoKICBmcmllbmQgaW5saW5lIHZvaWQgb3Bl
cmF0b3I+Pj0gKF9DT1JCQV9Mb25nIGEsIE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICB7IF9D
T1JCQV9Mb25nICpwID0gKF9DT1JCQV9Mb25nICopIChzKS5hbGlnbl9hbmRfcHV0X2J5dGVzKG9t
bmk6OkFMSUdOXzQsc2l6ZW9mKF9DT1JCQV9Mb25nKSk7ICpwID0gYTsgfTsKICB9CgogIGZyaWVu
ZCBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PSAoX0NPUkJBX0xvbmcmIGEsIE1lbUJ1ZmZlcmVkU3Ry
ZWFtJiBzKSB7CiAgICBpZiAocy5ieXRlT3JkZXIoKSAhPSBvbW5pOjpteUJ5dGVPcmRlcikgewog
ICAgICBfQ09SQkFfTG9uZyB0OwogICAgICB7IF9DT1JCQV9Mb25nICpwID0gKF9DT1JCQV9Mb25n
ICopIChzKS5hbGlnbl9hbmRfZ2V0X2J5dGVzKG9tbmk6OkFMSUdOXzQsc2l6ZW9mKF9DT1JCQV9M
b25nKSk7IHQgPSAqcDsgfTsKICAgICAgYSA9ICgoKCh0KSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8
ICgoKHQpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKCh0KSAmIDB4MDAwMGZmMDApIDw8IDgpIHwg
KCgodCkgJiAweDAwMDAwMGZmKSA8PCAyNCkpOwogICAgfQogICAgZWxzZSB7CiAgICAgIHsgX0NP
UkJBX0xvbmcgKnAgPSAoX0NPUkJBX0xvbmcgKikgKHMpLmFsaWduX2FuZF9nZXRfYnl0ZXMob21u
aTo6QUxJR05fNCxzaXplb2YoX0NPUkJBX0xvbmcpKTsgYSA9ICpwOyB9OwogICAgfQogICAgcmV0
dXJuOwogIH0KCiAgZnJpZW5kIGlubGluZSB2b2lkIG9wZXJhdG9yPj49IChfQ09SQkFfVUxvbmcg
YSwgTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIHsgX0NPUkJBX1VMb25nICpwID0gKF9DT1JC
QV9VTG9uZyAqKSAocykuYWxpZ25fYW5kX3B1dF9ieXRlcyhvbW5pOjpBTElHTl80LHNpemVvZihf
Q09SQkFfVUxvbmcpKTsgKnAgPSBhOyB9OwogIH0KCiAgZnJpZW5kIGlubGluZSB2b2lkIG9wZXJh
dG9yPDw9IChfQ09SQkFfVUxvbmcmIGEsIE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBpZiAo
cy5ieXRlT3JkZXIoKSAhPSBvbW5pOjpteUJ5dGVPcmRlcikgewogICAgICBfQ09SQkFfVUxvbmcg
dDsKICAgICAgeyBfQ09SQkFfVUxvbmcgKnAgPSAoX0NPUkJBX1VMb25nICopIChzKS5hbGlnbl9h
bmRfZ2V0X2J5dGVzKG9tbmk6OkFMSUdOXzQsc2l6ZW9mKF9DT1JCQV9VTG9uZykpOyB0ID0gKnA7
IH07CiAgICAgIGEgPSAoKCgodCkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKCh0KSAmIDB4MDBm
ZjAwMDApID4+IDgpIHwgKCgodCkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKHQpICYgMHgwMDAw
MDBmZikgPDwgMjQpKTsKICAgIH0KICAgIGVsc2UgewogICAgICB7IF9DT1JCQV9VTG9uZyAqcCA9
IChfQ09SQkFfVUxvbmcgKikgKHMpLmFsaWduX2FuZF9nZXRfYnl0ZXMob21uaTo6QUxJR05fNCxz
aXplb2YoX0NPUkJBX1VMb25nKSk7IGEgPSAqcDsgfTsKICAgIH0KICAgIHJldHVybjsKICB9CgoK
CiAgZnJpZW5kIGlubGluZSB2b2lkIG9wZXJhdG9yPj49IChfQ09SQkFfTG9uZ0xvbmcgYSwgTWVt
QnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIHsgX0NPUkJBX0xvbmdMb25nICpwID0gKF9DT1JCQV9M
b25nTG9uZyAqKSAocykuYWxpZ25fYW5kX3B1dF9ieXRlcyhvbW5pOjpBTElHTl84LHNpemVvZihf
Q09SQkFfTG9uZ0xvbmcpKTsgKnAgPSBhOyB9OwogIH0KCiAgZnJpZW5kIGlubGluZSB2b2lkIG9w
ZXJhdG9yPDw9IChfQ09SQkFfTG9uZ0xvbmcmIGEsIE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAg
ICBpZiAocy5SZE1lc3NhZ2VCeXRlT3JkZXIoKSAhPSBvbW5pOjpteUJ5dGVPcmRlcikgewogICAg
ICBfQ09SQkFfTG9uZ0xvbmcgdDsKICAgICAgeyBfQ09SQkFfTG9uZ0xvbmcgKnAgPSAoX0NPUkJB
X0xvbmdMb25nICopIChzKS5hbGlnbl9hbmRfZ2V0X2J5dGVzKG9tbmk6OkFMSUdOXzgsc2l6ZW9m
KF9DT1JCQV9Mb25nTG9uZykpOyB0ID0gKnA7IH07CiAgICAgIGEgPSAoKCgodCkgJiAoMHhmZjAw
MDAwMDAwMDAwMDAwTEwpKSA+PiA1NikgfCAoKCh0KSAmICgweDAwZmYwMDAwMDAwMDAwMDBMTCkp
ID4+IDQwKSB8ICgoKHQpICYgKDB4MDAwMGZmMDAwMDAwMDAwMExMKSkgPj4gMjQpIHwgKCgodCkg
JiAoMHgwMDAwMDBmZjAwMDAwMDAwTEwpKSA+PiA4KSB8ICgoKHQpICYgKDB4MDAwMDAwMDBmZjAw
MDAwMExMKSkgPDwgOCkgfCAoKCh0KSAmICgweDAwMDAwMDAwMDBmZjAwMDBMTCkpIDw8IDI0KSB8
ICgoKHQpICYgKDB4MDAwMDAwMDAwMDAwZmYwMExMKSkgPDwgNDApIHwgKCgodCkgJiAoMHgwMDAw
MDAwMDAwMDAwMGZmTEwpKSA8PCA1NikpOwogICAgfQogICAgZWxzZSB7CiAgICAgIHsgX0NPUkJB
X0xvbmdMb25nICpwID0gKF9DT1JCQV9Mb25nTG9uZyAqKSAocykuYWxpZ25fYW5kX2dldF9ieXRl
cyhvbW5pOjpBTElHTl84LHNpemVvZihfQ09SQkFfTG9uZ0xvbmcpKTsgYSA9ICpwOyB9OwogICAg
fQogICAgcmV0dXJuOwogIH0KCiAgZnJpZW5kIGlubGluZSB2b2lkIG9wZXJhdG9yPj49IChfQ09S
QkFfVUxvbmdMb25nIGEsIE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICB7IF9DT1JCQV9VTG9u
Z0xvbmcgKnAgPSAoX0NPUkJBX1VMb25nTG9uZyAqKSAocykuYWxpZ25fYW5kX3B1dF9ieXRlcyhv
bW5pOjpBTElHTl84LHNpemVvZihfQ09SQkFfVUxvbmdMb25nKSk7ICpwID0gYTsgfTsKICB9Cgog
IGZyaWVuZCBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PSAoX0NPUkJBX1VMb25nTG9uZyYgYSwgTWVt
QnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIGlmIChzLlJkTWVzc2FnZUJ5dGVPcmRlcigpICE9IG9t
bmk6Om15Qnl0ZU9yZGVyKSB7CiAgICAgIF9DT1JCQV9VTG9uZ0xvbmcgdDsKICAgICAgeyBfQ09S
QkFfVUxvbmdMb25nICpwID0gKF9DT1JCQV9VTG9uZ0xvbmcgKikgKHMpLmFsaWduX2FuZF9nZXRf
Ynl0ZXMob21uaTo6QUxJR05fOCxzaXplb2YoX0NPUkJBX1VMb25nTG9uZykpOyB0ID0gKnA7IH07
CiAgICAgIGEgPSAoKCgodCkgJiAoMHhmZjAwMDAwMDAwMDAwMDAwTEwpKSA+PiA1NikgfCAoKCh0
KSAmICgweDAwZmYwMDAwMDAwMDAwMDBMTCkpID4+IDQwKSB8ICgoKHQpICYgKDB4MDAwMGZmMDAw
MDAwMDAwMExMKSkgPj4gMjQpIHwgKCgodCkgJiAoMHgwMDAwMDBmZjAwMDAwMDAwTEwpKSA+PiA4
KSB8ICgoKHQpICYgKDB4MDAwMDAwMDBmZjAwMDAwMExMKSkgPDwgOCkgfCAoKCh0KSAmICgweDAw
MDAwMDAwMDBmZjAwMDBMTCkpIDw8IDI0KSB8ICgoKHQpICYgKDB4MDAwMDAwMDAwMDAwZmYwMExM
KSkgPDwgNDApIHwgKCgodCkgJiAoMHgwMDAwMDAwMDAwMDAwMGZmTEwpKSA8PCA1NikpOwogICAg
fQogICAgZWxzZSB7CiAgICAgIHsgX0NPUkJBX1VMb25nTG9uZyAqcCA9IChfQ09SQkFfVUxvbmdM
b25nICopIChzKS5hbGlnbl9hbmRfZ2V0X2J5dGVzKG9tbmk6OkFMSUdOXzgsc2l6ZW9mKF9DT1JC
QV9VTG9uZ0xvbmcpKTsgYSA9ICpwOyB9OwogICAgfQogICAgcmV0dXJuOwogIH0KCgoKCgogIGZy
aWVuZCBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PSAoX0NPUkJBX0Zsb2F0IGEsIE1lbUJ1ZmZlcmVk
U3RyZWFtJiBzKSB7CiAgICB7IF9DT1JCQV9GbG9hdCAqcCA9IChfQ09SQkFfRmxvYXQgKikgKHMp
LmFsaWduX2FuZF9wdXRfYnl0ZXMob21uaTo6QUxJR05fNCxzaXplb2YoX0NPUkJBX0Zsb2F0KSk7
ICpwID0gYTsgfTsKICB9CgogIGZyaWVuZCBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PSAoX0NPUkJB
X0Zsb2F0JiBhLCBNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgaWYgKHMuYnl0ZU9yZGVyKCkg
IT0gb21uaTo6bXlCeXRlT3JkZXIpIHsKICAgICAgX0NPUkJBX0Zsb2F0IHQ7CiAgICAgIHsgX0NP
UkJBX0Zsb2F0ICpwID0gKF9DT1JCQV9GbG9hdCAqKSAocykuYWxpZ25fYW5kX2dldF9ieXRlcyhv
bW5pOjpBTElHTl80LHNpemVvZihfQ09SQkFfRmxvYXQpKTsgdCA9ICpwOyB9OwogICAgICBfQ09S
QkFfVUxvbmcgdGwxID0gKigoX0NPUkJBX1VMb25nICopJnQpOwogICAgICBfQ09SQkFfVUxvbmcg
dGwyID0gKCgoKHRsMSkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKCh0bDEpICYgMHgwMGZmMDAw
MCkgPj4gOCkgfCAoKCh0bDEpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKCh0bDEpICYgMHgwMDAw
MDBmZikgPDwgMjQpKTsKICAgICAgYSA9ICooKF9DT1JCQV9GbG9hdCAqKSAmdGwyKTsKICAgIH0K
ICAgIGVsc2UgewogICAgICB7IF9DT1JCQV9GbG9hdCAqcCA9IChfQ09SQkFfRmxvYXQgKikgKHMp
LmFsaWduX2FuZF9nZXRfYnl0ZXMob21uaTo6QUxJR05fNCxzaXplb2YoX0NPUkJBX0Zsb2F0KSk7
IGEgPSAqcDsgfTsKICAgIH0KICAgIHJldHVybjsKICB9CgogIGZyaWVuZCBpbmxpbmUgdm9pZCBv
cGVyYXRvcj4+PSAoX0NPUkJBX0RvdWJsZSBhLCBNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAg
eyBfQ09SQkFfRG91YmxlICpwID0gKF9DT1JCQV9Eb3VibGUgKikgKHMpLmFsaWduX2FuZF9wdXRf
Ynl0ZXMob21uaTo6QUxJR05fOCxzaXplb2YoX0NPUkJBX0RvdWJsZSkpOyAqcCA9IGE7IH07CiAg
fQoKICBmcmllbmQgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKF9DT1JCQV9Eb3VibGUmIGEsIE1l
bUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBpZiAocy5ieXRlT3JkZXIoKSAhPSBvbW5pOjpteUJ5
dGVPcmRlcikgewogICAgICBfQ09SQkFfRG91YmxlIHQ7CiAgICAgIHsgX0NPUkJBX0RvdWJsZSAq
cCA9IChfQ09SQkFfRG91YmxlICopIChzKS5hbGlnbl9hbmRfZ2V0X2J5dGVzKG9tbmk6OkFMSUdO
Xzgsc2l6ZW9mKF9DT1JCQV9Eb3VibGUpKTsgdCA9ICpwOyB9OwogICAgICBfQ09SQkFfVUxvbmcg
dGwxID0gKChfQ09SQkFfVUxvbmcgKikmdClbMV07CiAgICAgIF9DT1JCQV9VTG9uZyB0bDIgPSAo
KCgodGwxKSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgoKHRsMSkgJiAweDAwZmYwMDAwKSA+PiA4
KSB8ICgoKHRsMSkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKHRsMSkgJiAweDAwMDAwMGZmKSA8
PCAyNCkpOwogICAgICAoKF9DT1JCQV9VTG9uZyAqKSZhKVswXSA9IHRsMjsKICAgICAgdGwxID0g
KChfQ09SQkFfVUxvbmcgKikmdClbMF07CiAgICAgIHRsMiA9ICgoKCh0bDEpICYgMHhmZjAwMDAw
MCkgPj4gMjQpIHwgKCgodGwxKSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgodGwxKSAmIDB4MDAw
MGZmMDApIDw8IDgpIHwgKCgodGwxKSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7CiAgICAgICgoX0NP
UkJBX1VMb25nICopJmEpWzFdID0gdGwyOwogICAgfQogICAgZWxzZSB7CiAgICAgIHsgX0NPUkJB
X0RvdWJsZSAqcCA9IChfQ09SQkFfRG91YmxlICopIChzKS5hbGlnbl9hbmRfZ2V0X2J5dGVzKG9t
bmk6OkFMSUdOXzgsc2l6ZW9mKF9DT1JCQV9Eb3VibGUpKTsgYSA9ICpwOyB9OwogICAgfQogICAg
cmV0dXJuOwogIH0KCgoKCgoKCiAgdm9pZCBwdXRfY2hhcl9hcnJheShjb25zdCBfQ09SQkFfQ2hh
ciogc3JjLGludCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgb21uaTo6YWxpZ25tZW50X3Qg
YWxpZ249b21uaTo6QUxJR05fMSk7CiAgdm9pZCBnZXRfY2hhcl9hcnJheShfQ09SQkFfQ2hhciog
ZHN0LCBpbnQgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIG9tbmk6OmFsaWdubWVudF90IGFs
aWduPW9tbmk6OkFMSUdOXzEpOwoKICBmcmllbmQgY2xhc3MgTmV0QnVmZmVyZWRTdHJlYW07Cgog
IHZvaWQgY29weV9mcm9tKE1lbUJ1ZmZlcmVkU3RyZWFtJiBmcm9tLCBzaXplX3Qgc2l6ZSwKICAg
ICAgICAgICAgICAgICBvbW5pOjphbGlnbm1lbnRfdCBhbGlnbj1vbW5pOjpBTElHTl8xKTsKICB2
b2lkIGNvcHlfZnJvbShOZXRCdWZmZXJlZFN0cmVhbSYgZnJvbSwgc2l6ZV90IHNpemUsCiAgICAg
ICAgICAgICAgICAgb21uaTo6YWxpZ25tZW50X3QgYWxpZ249b21uaTo6QUxJR05fMSk7CgoKCgog
IGlubGluZSB2b2lkIHJld2luZF9pbl9ta3IoKSB7CiAgICBwZF9pbl9ta3IgPSBzdGFydG9mc3Ry
ZWFtKCk7CiAgfQogIGlubGluZSB2b2lkIHJld2luZF9pbm91dF9ta3IoKSB7CiAgICByZXdpbmRf
aW5fbWtyKCk7CiAgICBwZF9vdXRfbWtyID0gcGRfaW5fbWtyOwogIH0KCiAgaW5saW5lIF9DT1JC
QV9DaGFyIGJ5dGVPcmRlcigpIGNvbnN0IHsKICAgIHJldHVybiBfQ09SQkFfQ2hhcihwZF9ieXRl
X29yZGVyKTsKICB9CgogIGlubGluZSB2b2lkIGJ5dGVPcmRlcihfQ09SQkFfQ2hhciBiKSB7CiAg
ICBwZF9ieXRlX29yZGVyID0gYiA/IDEgOiAwOwogIH0KCiAgaW5saW5lIF9DT1JCQV9DaGFyIFJk
TWVzc2FnZUJ5dGVPcmRlcigpIGNvbnN0IHsKICAgIHJldHVybiBieXRlT3JkZXIoKTsKICB9Cgog
IGlubGluZSBzaXplX3QgYWxyZWFkeVJlYWQoKSBjb25zdCB7CiAgICBpZiAocGRfaW5fbWtyIDwg
cGRfb3V0X21rcikKICAgICAgcmV0dXJuICgob21uaTo6cHRyX2FyaXRoX3QpcGRfaW5fbWtyIC0K
ICAgICAgICAgICAgICAob21uaTo6cHRyX2FyaXRoX3Qpc3RhcnRvZnN0cmVhbSgpKTsKICAgIGVs
c2UKICAgICAgcmV0dXJuICgob21uaTo6cHRyX2FyaXRoX3QpcGRfb3V0X21rciAtCiAgICAgICAg
ICAgICAgKG9tbmk6OnB0cl9hcml0aF90KXN0YXJ0b2ZzdHJlYW0oKSk7CiAgfQoKICBpbmxpbmUg
c2l6ZV90IFJkTWVzc2FnZUFscmVhZHlSZWFkKCkgY29uc3QgewogICAgcmV0dXJuIGFscmVhZHlS
ZWFkKCk7CiAgfQoKICBpbmxpbmUgc2l6ZV90IHVuUmVhZCgpIGNvbnN0IHsKICAgIGlmIChwZF9p
bl9ta3IgPCBwZF9vdXRfbWtyKQogICAgICByZXR1cm4gKChvbW5pOjpwdHJfYXJpdGhfdClwZF9v
dXRfbWtyIC0KICAgICAgICAgICAgICAob21uaTo6cHRyX2FyaXRoX3QpcGRfaW5fbWtyKTsKICAg
IGVsc2UKICAgICAgcmV0dXJuIDA7CiAgfQoKICBpbmxpbmUgc2l6ZV90IFJkTWVzc2FnZVVuUmVh
ZCgpIGNvbnN0IHsKICAgIHJldHVybiB1blJlYWQoKTsKICB9CgogIGlubGluZSBfQ09SQkFfQm9v
bGVhbiBvdmVycnVuKF9DT1JCQV9VTG9uZyBsZW4pIGNvbnN0IHsKICAgIHJldHVybiBsZW4gPiAo
X0NPUkJBX1VMb25nKSB1blJlYWQoKTsKICB9CgogIGlubGluZSBpbnQgcmRDdXJyZW50QWxpZ25t
ZW50KCkgY29uc3QgewogICAgaW50IGFsaWduPSgob21uaTo6cHRyX2FyaXRoX3QpcGRfaW5fbWty
ICYgKChpbnQpb21uaTo6bWF4X2FsaWdubWVudCAtIDEpKTsKICAgIHJldHVybiAoKGFsaWduKT8g
YWxpZ246KGludClvbW5pOjptYXhfYWxpZ25tZW50KTsKICB9CgogIGlubGluZSBzaXplX3QgYWxy
ZWFkeVdyaXR0ZW4oKSBjb25zdCB7CiAgICByZXR1cm4gKChvbW5pOjpwdHJfYXJpdGhfdClwZF9v
dXRfbWtyIC0KICAgICAgICAgICAgKG9tbmk6OnB0cl9hcml0aF90KXN0YXJ0b2ZzdHJlYW0oKSk7
CiAgfQoKICBpbmxpbmUgc2l6ZV90IFdyTWVzc2FnZUFscmVhZHlXcml0dGVuKCkgY29uc3Qgewog
ICAgcmV0dXJuICgob21uaTo6cHRyX2FyaXRoX3QpcGRfb3V0X21rciAtCiAgICAgICAgICAgIChv
bW5pOjpwdHJfYXJpdGhfdClzdGFydG9mc3RyZWFtKCkpOwogIH0KCiAgaW5saW5lIGludCB3ckN1
cnJlbnRBbGlnbm1lbnQoKSBjb25zdCB7CiAgICBpbnQgYWxpZ249KChvbW5pOjpwdHJfYXJpdGhf
dClwZF9vdXRfbWtyICYgKChpbnQpb21uaTo6bWF4X2FsaWdubWVudCAtIDEpKTsKICAgIHJldHVy
biAoKGFsaWduKT9hbGlnbjooaW50KW9tbmk6Om1heF9hbGlnbm1lbnQpOwogIH0KCiAgdm9pZCBz
a2lwKF9DT1JCQV9VTG9uZyBzaXplKTsKCiAgaW5saW5lIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJl
dHVybiBwZF9pbl9ta3I7IH0KCnByaXZhdGU6CgoKCiAgX0NPUkJBX0Jvb2xlYW4gcGRfZXh0ZXJu
YWxfYnVmZmVyOwogIHZvaWQqIHBkX2J1ZnA7CiAgdm9pZCogcGRfYnVmZW5kOwogIHZvaWQqIHBk
X2luX21rcjsKICB2b2lkKiBwZF9vdXRfbWtyOwogIHN0YXRpYyBjb25zdCBpbnQgcGRfaW5saW5l
X2J1Zl9zaXplOwogIGNoYXIgcGRfYnVmZmVyWzMyXTsKICBfQ09SQkFfQm9vbGVhbiBwZF9ieXRl
X29yZGVyOwoKICBpbmxpbmUgdm9pZCogYWxpZ25fYW5kX3B1dF9ieXRlcyhvbW5pOjphbGlnbm1l
bnRfdCBhbGlnbiwgc2l6ZV90IG5ieXRlcykKICB7CiAgICBpZiggcGRfZXh0ZXJuYWxfYnVmZmVy
ICkgd3JpdGVfdG9fcmVhZG9ubHlfZXJyb3IoIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMv
YnVmZmVyZWRTdHJlYW0uaCIsIDgyMyk7CgogICAgb21uaTo6cHRyX2FyaXRoX3QgcDEgPSBvbW5p
OjphbGlnbl90bygob21uaTo6cHRyX2FyaXRoX3QpcGRfb3V0X21rcixhbGlnbik7CiAgICBvbW5p
OjpwdHJfYXJpdGhfdCBwMiA9IHAxICsgbmJ5dGVzOwogICAgaWYoICh2b2lkKilwMiA+IHBkX2J1
ZmVuZCApIHsKICAgICAgZ3JvdyhwMiAtIChvbW5pOjpwdHJfYXJpdGhfdClwZF9vdXRfbWtyKTsK
ICAgICAgcDEgPSBvbW5pOjphbGlnbl90bygob21uaTo6cHRyX2FyaXRoX3QpcGRfb3V0X21rciwg
YWxpZ24pOwogICAgICBwMiA9IHAxICsgbmJ5dGVzOwogICAgfQogICAgcGRfb3V0X21rciA9ICh2
b2lkKikgcDI7CiAgICByZXR1cm4gKHZvaWQqKSBwMTsKICB9CgogIGlubGluZSB2b2lkKiBhbGln
bl9hbmRfZ2V0X2J5dGVzKG9tbmk6OmFsaWdubWVudF90IGFsaWduLHNpemVfdCBuYnl0ZXMpIHsK
ICAgIG9tbmk6OnB0cl9hcml0aF90IHAxID0gb21uaTo6YWxpZ25fdG8oKG9tbmk6OnB0cl9hcml0
aF90KXBkX2luX21rciwgYWxpZ24pOwogICAgcGRfaW5fbWtyID0gKHZvaWQqKSAocDEgKyBuYnl0
ZXMpOwogICAgaWYoIHBkX2luX21rciA+IHBkX291dF9ta3IgKSBvdmVycnVuX2Vycm9yKCk7CiAg
ICByZXR1cm4gKHZvaWQqKSBwMTsKICB9CgogIHZvaWQqIHN0YXJ0b2ZzdHJlYW0oKSBjb25zdDsK
ICBpbmxpbmUgc2l6ZV90IHNpemUoKSB7CiAgICByZXR1cm4gKG9tbmk6OnB0cl9hcml0aF90KSBw
ZF9idWZlbmQgLSAob21uaTo6cHRyX2FyaXRoX3QpIHN0YXJ0b2ZzdHJlYW0oKTsKICB9CiAgdm9p
ZCBncm93KHNpemVfdCBtaW5pbXVtKTsKICB2b2lkIGNvcHkoY29uc3QgTWVtQnVmZmVyZWRTdHJl
YW0mKTsKICB2b2lkIG92ZXJydW5fZXJyb3IoKTsKICB2b2lkIHdyaXRlX3RvX3JlYWRvbmx5X2Vy
cm9yKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lKTsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
YnVmX3Q+CmlubGluZSB2b2lkCkNkclN0cmVhbUhlbHBlcl91bm1hcnNoYWxBcnJheVNob3J0KGJ1
Zl90JiBzLCBfQ09SQkFfU2hvcnQqIGEsIGludCBsZW5ndGgpCnsKICBzLmdldF9jaGFyX2FycmF5
KChfQ09SQkFfQ2hhciopIGEsIGxlbmd0aCAqIDIsIG9tbmk6OkFMSUdOXzIpOwoKICBpZiggcy5S
ZE1lc3NhZ2VCeXRlT3JkZXIoKSAhPSBvbW5pOjpteUJ5dGVPcmRlciApCiAgICBmb3IoIGludCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrICkKICAgICAgYVtpXSA9ICgoKChhW2ldKSAmIDB4ZmYpIDw8
IDgpIHwgKCgoYVtpXSkgPj4gOCkgJiAweGZmKSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgYnVmX3Q+
CmlubGluZSB2b2lkCkNkclN0cmVhbUhlbHBlcl91bm1hcnNoYWxBcnJheVVTaG9ydChidWZfdCYg
cywgX0NPUkJBX1VTaG9ydCogYSwgaW50IGxlbmd0aCkKewogIHMuZ2V0X2NoYXJfYXJyYXkoKF9D
T1JCQV9DaGFyKikgYSwgbGVuZ3RoICogMiwgb21uaTo6QUxJR05fMik7CgogIGlmKCBzLlJkTWVz
c2FnZUJ5dGVPcmRlcigpICE9IG9tbmk6Om15Qnl0ZU9yZGVyICkKICAgIGZvciggaW50IGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKysgKQogICAgICBhW2ldID0gKCgoKGFbaV0pICYgMHhmZikgPDwgOCkg
fCAoKChhW2ldKSA+PiA4KSAmIDB4ZmYpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBidWZfdD4KaW5s
aW5lIHZvaWQKQ2RyU3RyZWFtSGVscGVyX3VubWFyc2hhbEFycmF5TG9uZyhidWZfdCYgcywgX0NP
UkJBX0xvbmcqIGEsIGludCBsZW5ndGgpCnsKICBzLmdldF9jaGFyX2FycmF5KChfQ09SQkFfQ2hh
ciopIGEsIGxlbmd0aCAqIDQsIG9tbmk6OkFMSUdOXzQpOwoKICBpZiggcy5SZE1lc3NhZ2VCeXRl
T3JkZXIoKSAhPSBvbW5pOjpteUJ5dGVPcmRlciApCiAgICBmb3IoIGludCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrICkKICAgICAgYVtpXSA9ICgoKChhW2ldKSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8
ICgoKGFbaV0pICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKChhW2ldKSAmIDB4MDAwMGZmMDApIDw8
IDgpIHwgKCgoYVtpXSkgJiAweDAwMDAwMGZmKSA8PCAyNCkpOwp9CgoKdGVtcGxhdGUgPGNsYXNz
IGJ1Zl90PgppbmxpbmUgdm9pZApDZHJTdHJlYW1IZWxwZXJfdW5tYXJzaGFsQXJyYXlVTG9uZyhi
dWZfdCYgcywgX0NPUkJBX1VMb25nKiBhLCBpbnQgbGVuZ3RoKQp7CiAgcy5nZXRfY2hhcl9hcnJh
eSgoX0NPUkJBX0NoYXIqKSBhLCBsZW5ndGggKiA0LCBvbW5pOjpBTElHTl80KTsKCiAgaWYoIHMu
UmRNZXNzYWdlQnl0ZU9yZGVyKCkgIT0gb21uaTo6bXlCeXRlT3JkZXIgKQogICAgZm9yKCBpbnQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKyApCiAgICAgIGFbaV0gPSAoKCgoYVtpXSkgJiAweGZmMDAw
MDAwKSA+PiAyNCkgfCAoKChhW2ldKSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgoYVtpXSkgJiAw
eDAwMDBmZjAwKSA8PCA4KSB8ICgoKGFbaV0pICYgMHgwMDAwMDBmZikgPDwgMjQpKTsKfQoKCnRl
bXBsYXRlIDxjbGFzcyBidWZfdD4KaW5saW5lIHZvaWQKQ2RyU3RyZWFtSGVscGVyX3VubWFyc2hh
bEFycmF5RmxvYXQoYnVmX3QmIHMsIF9DT1JCQV9GbG9hdCogYSwgaW50IGxlbmd0aCkKewogIHMu
Z2V0X2NoYXJfYXJyYXkoKF9DT1JCQV9DaGFyKikgYSwgbGVuZ3RoICogNCwgb21uaTo6QUxJR05f
NCk7CgogIGlmKCBzLlJkTWVzc2FnZUJ5dGVPcmRlcigpICE9IG9tbmk6Om15Qnl0ZU9yZGVyICkK
ICAgIGZvciggaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysgKSB7CiAgICAgIF9DT1JCQV9VTG9u
ZyB0bXAgPSAoKCgoKiAoX0NPUkJBX1VMb25nKikgKGEgKyBpKSkgJiAweGZmMDAwMDAwKSA+PiAy
NCkgfCAoKCgqIChfQ09SQkFfVUxvbmcqKSAoYSArIGkpKSAmIDB4MDBmZjAwMDApID4+IDgpIHwg
KCgoKiAoX0NPUkJBX1VMb25nKikgKGEgKyBpKSkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKCog
KF9DT1JCQV9VTG9uZyopIChhICsgaSkpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsKICAgICAgYVtp
XSA9ICogKF9DT1JCQV9GbG9hdCopICZ0bXA7CiAgICB9Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgYnVm
X3Q+CmlubGluZSB2b2lkCkNkclN0cmVhbUhlbHBlcl91bm1hcnNoYWxBcnJheURvdWJsZShidWZf
dCYgcywgX0NPUkJBX0RvdWJsZSogYSwgaW50IGxlbmd0aCkKewogIHMuZ2V0X2NoYXJfYXJyYXko
KF9DT1JCQV9DaGFyKikgYSwgbGVuZ3RoICogOCwgb21uaTo6QUxJR05fOCk7CgogIGlmKCBzLlJk
TWVzc2FnZUJ5dGVPcmRlcigpICE9IG9tbmk6Om15Qnl0ZU9yZGVyICkKICAgIGZvciggaW50IGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKysgKSB7CiAgICAgIF9DT1JCQV9VTG9uZyB0bXAwID0gKCgoKCgo
X0NPUkJBX1VMb25nKikgKGEgKyBpKSlbMF0pICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgoKChf
Q09SQkFfVUxvbmcqKSAoYSArIGkpKVswXSkgJiAweDAwZmYwMDAwKSA+PiA4KSB8ICgoKCgoX0NP
UkJBX1VMb25nKikgKGEgKyBpKSlbMF0pICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKCgoKF9DT1JC
QV9VTG9uZyopIChhICsgaSkpWzBdKSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7CiAgICAgIF9DT1JC
QV9VTG9uZyB0bXAxID0gKCgoKCgoX0NPUkJBX1VMb25nKikgKGEgKyBpKSlbMV0pICYgMHhmZjAw
MDAwMCkgPj4gMjQpIHwgKCgoKChfQ09SQkFfVUxvbmcqKSAoYSArIGkpKVsxXSkgJiAweDAwZmYw
MDAwKSA+PiA4KSB8ICgoKCgoX0NPUkJBX1VMb25nKikgKGEgKyBpKSlbMV0pICYgMHgwMDAwZmYw
MCkgPDwgOCkgfCAoKCgoKF9DT1JCQV9VTG9uZyopIChhICsgaSkpWzFdKSAmIDB4MDAwMDAwZmYp
IDw8IDI0KSk7CiAgICAgICgoX0NPUkJBX1VMb25nKikgKGEgKyBpKSlbMV0gPSB0bXAwOwogICAg
ICAoKF9DT1JCQV9VTG9uZyopIChhICsgaSkpWzBdID0gdG1wMTsKICAgIH0KfQoKCnRlbXBsYXRl
IDxjbGFzcyBidWZfdD4KaW5saW5lIHZvaWQKQ2RyU3RyZWFtSGVscGVyX3VubWFyc2hhbEFycmF5
TG9uZ0xvbmcoYnVmX3QmIHMsIF9DT1JCQV9Mb25nTG9uZyogYSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCkKewogIHMuZ2V0X2NoYXJfYXJyYXkoKF9D
T1JCQV9DaGFyKikgYSwgbGVuZ3RoICogOCwgb21uaTo6QUxJR05fOCk7CgogIGlmKCBzLlJkTWVz
c2FnZUJ5dGVPcmRlcigpICE9IG9tbmk6Om15Qnl0ZU9yZGVyICkKICAgIGZvciggaW50IGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKysgKQogICAgICBhW2ldID0gKCgoKGFbaV0pICYgKDB4ZmYwMDAwMDAw
MDAwMDAwMExMKSkgPj4gNTYpIHwgKCgoYVtpXSkgJiAoMHgwMGZmMDAwMDAwMDAwMDAwTEwpKSA+
PiA0MCkgfCAoKChhW2ldKSAmICgweDAwMDBmZjAwMDAwMDAwMDBMTCkpID4+IDI0KSB8ICgoKGFb
aV0pICYgKDB4MDAwMDAwZmYwMDAwMDAwMExMKSkgPj4gOCkgfCAoKChhW2ldKSAmICgweDAwMDAw
MDAwZmYwMDAwMDBMTCkpIDw8IDgpIHwgKCgoYVtpXSkgJiAoMHgwMDAwMDAwMDAwZmYwMDAwTEwp
KSA8PCAyNCkgfCAoKChhW2ldKSAmICgweDAwMDAwMDAwMDAwMGZmMDBMTCkpIDw8IDQwKSB8ICgo
KGFbaV0pICYgKDB4MDAwMDAwMDAwMDAwMDBmZkxMKSkgPDwgNTYpKTsKfQoKCnRlbXBsYXRlIDxj
bGFzcyBidWZfdD4KaW5saW5lIHZvaWQKQ2RyU3RyZWFtSGVscGVyX3VubWFyc2hhbEFycmF5VUxv
bmdMb25nKGJ1Zl90JiBzLCBfQ09SQkFfVUxvbmdMb25nKiBhLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCkKewogIHMuZ2V0X2NoYXJfYXJyYXkoKF9D
T1JCQV9DaGFyKikgYSwgbGVuZ3RoICogOCwgb21uaTo6QUxJR05fOCk7CgogIGlmKCBzLlJkTWVz
c2FnZUJ5dGVPcmRlcigpICE9IG9tbmk6Om15Qnl0ZU9yZGVyICkKICAgIGZvciggaW50IGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKysgKQogICAgICBhW2ldID0gKCgoKGFbaV0pICYgKDB4ZmYwMDAwMDAw
MDAwMDAwMExMKSkgPj4gNTYpIHwgKCgoYVtpXSkgJiAoMHgwMGZmMDAwMDAwMDAwMDAwTEwpKSA+
PiA0MCkgfCAoKChhW2ldKSAmICgweDAwMDBmZjAwMDAwMDAwMDBMTCkpID4+IDI0KSB8ICgoKGFb
aV0pICYgKDB4MDAwMDAwZmYwMDAwMDAwMExMKSkgPj4gOCkgfCAoKChhW2ldKSAmICgweDAwMDAw
MDAwZmYwMDAwMDBMTCkpIDw8IDgpIHwgKCgoYVtpXSkgJiAoMHgwMDAwMDAwMDAwZmYwMDAwTEwp
KSA8PCAyNCkgfCAoKChhW2ldKSAmICgweDAwMDAwMDAwMDAwMGZmMDBMTCkpIDw8IDQwKSB8ICgo
KGFbaV0pICYgKDB4MDAwMDAwMDAwMDAwMDBmZkxMKSkgPDwgNTYpKTsKfQojIDk3MyAiLi4vLi4v
Li4vLi4vaW5jbHVkZS9vbW5pT1JCMy9idWZmZXJlZFN0cmVhbS5oIgp0ZW1wbGF0ZSA8Y2xhc3Mg
VD4KaW5saW5lIHZvaWQKX0NPUkJBX1NlcXVlbmNlPFQ+OjpvcGVyYXRvcj4+PSAoTmV0QnVmZmVy
ZWRTdHJlYW0mIHMpIGNvbnN0CnsKICA6Om9wZXJhdG9yPj49KF9DT1JCQV9VTG9uZyhwZF9sZW4p
LCBzKTsKICBmb3IoIGludCBpID0gMDsgaSA8IChpbnQpcGRfbGVuOyBpKysgKQogICAgcGRfYnVm
W2ldID4+PSBzOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSB2b2lkCl9DT1JCQV9TZXF1
ZW5jZTxUPjo6b3BlcmF0b3I8PD0gKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKQp7CiAgX0NPUkJBX1VM
b25nIGw7CiAgbCA8PD0gczsKICBpZiAobCA+IHMuUmRNZXNzYWdlVW5SZWFkKCkgfHwgKHBkX2Jv
dW5kZWQgJiYgbCA+IHBkX21heCkpIHsKICAgIF9DT1JCQV9tYXJzaGFsX2Vycm9yKCk7CgogIH0K
ICBsZW5ndGgobCk7CiAgZm9yKCBfQ09SQkFfVUxvbmcgaSA9IDA7IGkgPCBsOyBpKysgKQogICAg
cGRfYnVmW2ldIDw8PSBzOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSB2b2lkCl9DT1JC
QV9TZXF1ZW5jZTxUPjo6b3BlcmF0b3I+Pj0gKE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSBjb25zdAp7
CiAgcGRfbGVuID4+PSBzOwogIGZvciAoaW50IGk9MDsgaTwoaW50KXBkX2xlbjsgaSsrKQogICAg
cGRfYnVmW2ldID4+PSBzOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSB2b2lkCl9DT1JC
QV9TZXF1ZW5jZTxUPjo6b3BlcmF0b3I8PD0gKE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKQp7CiAgX0NP
UkJBX1VMb25nIGw7CiAgbCA8PD0gczsKICBpZiAocy51blJlYWQoKSA8IGwgfHwgKHBkX2JvdW5k
ZWQgJiYgbCA+IHBkX21heCkpIHsKICAgIF9DT1JCQV9tYXJzaGFsX2Vycm9yKCk7CgogIH0KICBs
ZW5ndGgobCk7CiAgZm9yIChfQ09SQkFfVUxvbmcgaT0wOyBpPGw7IGkrKykKICAgIHBkX2J1Zltp
XSA8PD0gczsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsaW50IGVsbVNpemUsaW50IGVsbUFsaWdubWVu
dD4KaW5saW5lCnZvaWQKX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV93X0ZpeFNpemVFbGVtZW50
PFQsZWxtU2l6ZSxlbG1BbGlnbm1lbnQ+OjpvcGVyYXRvcj4+PSAoTmV0QnVmZmVyZWRTdHJlYW0m
IHMpIGNvbnN0CnsKICBfQ09SQkFfVUxvbmcgbCA9IEJhc2VUOjpsZW5ndGgoKTsKICBsID4+PSBz
OwogIGlmIChsPT0wKSByZXR1cm47CiAgaWYgKChpbnQpZWxtQWxpZ25tZW50ID09IChpbnQpb21u
aTo6QUxJR05fOCkgewogICAgX0NPUkJBX1VMb25nIHBhZGRpbmcgPSAwOwogICAgaWYgKHMud3JD
dXJyZW50QWxpZ25tZW50KCkgIT0gKGludClvbW5pOjpBTElHTl84KQogICAgICBwYWRkaW5nID4+
PSBzOwogIH0KICBzLnB1dF9jaGFyX2FycmF5KChfQ09SQkFfQ2hhciopQmFzZVQ6Ok5QX2RhdGEo
KSwoaW50KWwqZWxtU2l6ZSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVCxpbnQgZWxtU2l6ZSxpbnQg
ZWxtQWxpZ25tZW50PgppbmxpbmUKdm9pZApfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX3dfRml4
U2l6ZUVsZW1lbnQ8VCxlbG1TaXplLGVsbUFsaWdubWVudD46Om9wZXJhdG9yPDw9IChOZXRCdWZm
ZXJlZFN0cmVhbSYgcykKewogIF9DT1JCQV9VTG9uZyBsOwogIGwgPDw9IHM7CiAgaWYgKGwqZWxt
U2l6ZSA+IHMuUmRNZXNzYWdlVW5SZWFkKCkpIHsKICAgIF9DT1JCQV9tYXJzaGFsX2Vycm9yKCk7
CgogIH0KICBCYXNlVDo6bGVuZ3RoKGwpOwogIGlmIChsPT0wKSByZXR1cm47CiAgaWYgKChpbnQp
ZWxtQWxpZ25tZW50ID09IChpbnQpb21uaTo6QUxJR05fOCkgewogICAgaWYgKHMucmRDdXJyZW50
QWxpZ25tZW50KCkgIT0gKGludClvbW5pOjpBTElHTl84KQogICAgICBzLnNraXAoc2l6ZW9mKF9D
T1JCQV9VTG9uZykpOwogIH0KICBzLmdldF9jaGFyX2FycmF5KChfQ09SQkFfQ2hhciopQmFzZVQ6
Ok5QX2RhdGEoKSwoaW50KWwqZWxtU2l6ZSk7CiAgaWYgKHMuUmRNZXNzYWdlQnl0ZU9yZGVyKCkg
IT0gb21uaTo6bXlCeXRlT3JkZXIgJiYgZWxtQWxpZ25tZW50ICE9IDEpIHsKICAgIGlmIChlbG1T
aXplID09IDIpIHsKICAgICAgZm9yIChfQ09SQkFfVUxvbmcgaT0wOyBpPGw7IGkrKykgewogICAg
ICAgIF9DT1JCQV9VU2hvcnQgdCA9ICgoX0NPUkJBX1VTaG9ydCopQmFzZVQ6Ok5QX2RhdGEoKSlb
aV07CiAgICAgICAgKChfQ09SQkFfVVNob3J0KilCYXNlVDo6TlBfZGF0YSgpKVtpXSA9ICgoKCh0
KSAmIDB4ZmYpIDw8IDgpIHwgKCgodCkgPj4gOCkgJiAweGZmKSk7CiAgICAgIH0KICAgIH0KICAg
IGVsc2UgaWYgKGVsbVNpemUgPT0gNCkgewogICAgICBmb3IgKF9DT1JCQV9VTG9uZyBpPTA7IGk8
bDsgaSsrKSB7CiAgICAgICAgX0NPUkJBX1VMb25nIHQgPSAoKF9DT1JCQV9VTG9uZyopQmFzZVQ6
Ok5QX2RhdGEoKSlbaV07CiAgICAgICAgKChfQ09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRhKCkp
W2ldID0gKCgoKHQpICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgodCkgJiAweDAwZmYwMDAwKSA+
PiA4KSB8ICgoKHQpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKCh0KSAmIDB4MDAwMDAwZmYpIDw8
IDI0KSk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKGVsbVNpemUgPT0gOCkgewogICAgICBs
ICo9IDI7CiAgICAgIGZvciAoX0NPUkJBX1VMb25nIGk9MDsgaTxsOyBpKz0yKSB7CiAgICAgICAg
X0NPUkJBX1VMb25nIHRsMSA9ICgoX0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgpKVtpKzFd
OwogICAgICAgIF9DT1JCQV9VTG9uZyB0bDIgPSAoKCgodGwxKSAmIDB4ZmYwMDAwMDApID4+IDI0
KSB8ICgoKHRsMSkgJiAweDAwZmYwMDAwKSA+PiA4KSB8ICgoKHRsMSkgJiAweDAwMDBmZjAwKSA8
PCA4KSB8ICgoKHRsMSkgJiAweDAwMDAwMGZmKSA8PCAyNCkpOwogICAgICAgIHRsMSA9ICgoX0NP
UkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgpKVtpXTsKICAgICAgICAoKF9DT1JCQV9VTG9uZyop
QmFzZVQ6Ok5QX2RhdGEoKSlbaV0gPSB0bDI7CiAgICAgICAgKChfQ09SQkFfVUxvbmcqKUJhc2VU
OjpOUF9kYXRhKCkpW2krMV0gPSAoKCgodGwxKSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgoKHRs
MSkgJiAweDAwZmYwMDAwKSA+PiA4KSB8ICgoKHRsMSkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgo
KHRsMSkgJiAweDAwMDAwMGZmKSA8PCAyNCkpOwogICAgICB9CiAgICB9CiAgfQp9CgoKdGVtcGxh
dGUgPGNsYXNzIFQsaW50IGVsbVNpemUsaW50IGVsbUFsaWdubWVudD4KaW5saW5lCnZvaWQKX0NP
UkJBX1VuYm91bmRlZF9TZXF1ZW5jZV93X0ZpeFNpemVFbGVtZW50PFQsZWxtU2l6ZSxlbG1BbGln
bm1lbnQ+OjpvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0mIHMpIGNvbnN0CnsKICBfQ09S
QkFfVUxvbmcgbCA9IEJhc2VUOjpsZW5ndGgoKTsKICBsID4+PSBzOwogIGlmIChsPT0wKSByZXR1
cm47CiAgaWYgKChpbnQpZWxtQWxpZ25tZW50ID09IChpbnQpb21uaTo6QUxJR05fOCkgewogICAg
X0NPUkJBX1VMb25nIHBhZGRpbmcgPSAwOwogICAgaWYgKHMud3JDdXJyZW50QWxpZ25tZW50KCkg
IT0gKGludClvbW5pOjpBTElHTl84KQogICAgICBwYWRkaW5nID4+PSBzOwogIH0KICBzLnB1dF9j
aGFyX2FycmF5KChfQ09SQkFfQ2hhciopQmFzZVQ6Ok5QX2RhdGEoKSwoaW50KWwqZWxtU2l6ZSk7
Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVCxpbnQgZWxtU2l6ZSxpbnQgZWxtQWxpZ25tZW50Pgppbmxp
bmUKdm9pZApfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVsZW1lbnQ8VCxlbG1T
aXplLGVsbUFsaWdubWVudD46Om9wZXJhdG9yPDw9IChNZW1CdWZmZXJlZFN0cmVhbSYgcykKewog
IF9DT1JCQV9VTG9uZyBsOwogIGwgPDw9IHM7CiAgaWYgKHMudW5SZWFkKCkgPCAobCplbG1TaXpl
KSkgewogICAgX0NPUkJBX21hcnNoYWxfZXJyb3IoKTsKCiAgfQogIEJhc2VUOjpsZW5ndGgobCk7
CiAgaWYgKGw9PTApIHJldHVybjsKICBpZiAoKGludCllbG1BbGlnbm1lbnQgPT0gKGludClvbW5p
OjpBTElHTl84KSB7CiAgICBpZiAocy5yZEN1cnJlbnRBbGlnbm1lbnQoKSAhPSAoaW50KW9tbmk6
OkFMSUdOXzgpCiAgICAgIHMuc2tpcChzaXplb2YoX0NPUkJBX1VMb25nKSk7CiAgfQogIHMuZ2V0
X2NoYXJfYXJyYXkoKF9DT1JCQV9DaGFyKilCYXNlVDo6TlBfZGF0YSgpLChpbnQpbCplbG1TaXpl
KTsKICBpZiAocy5ieXRlT3JkZXIoKSAhPSBvbW5pOjpteUJ5dGVPcmRlciAmJiBlbG1BbGlnbm1l
bnQgIT0gMSkgewogICAgaWYgKGVsbVNpemUgPT0gMikgewogICAgICBmb3IgKF9DT1JCQV9VTG9u
ZyBpPTA7IGk8bDsgaSsrKSB7CiAgICAgICAgX0NPUkJBX1VTaG9ydCB0ID0gKChfQ09SQkFfVVNo
b3J0KilCYXNlVDo6TlBfZGF0YSgpKVtpXTsKICAgICAgICAoKF9DT1JCQV9VU2hvcnQqKUJhc2VU
OjpOUF9kYXRhKCkpW2ldID0gKCgoKHQpICYgMHhmZikgPDwgOCkgfCAoKCh0KSA+PiA4KSAmIDB4
ZmYpKTsKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoZWxtU2l6ZSA9PSA0KSB7CiAgICAgIGZv
ciAoX0NPUkJBX1VMb25nIGk9MDsgaTxsOyBpKyspIHsKICAgICAgICBfQ09SQkFfVUxvbmcgdCA9
ICgoX0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgpKVtpXTsKICAgICAgICAoKF9DT1JCQV9V
TG9uZyopQmFzZVQ6Ok5QX2RhdGEoKSlbaV0gPSAoKCgodCkgJiAweGZmMDAwMDAwKSA+PiAyNCkg
fCAoKCh0KSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgodCkgJiAweDAwMDBmZjAwKSA8PCA4KSB8
ICgoKHQpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAo
ZWxtU2l6ZSA9PSA4KSB7CiAgICAgIGwgKj0gMjsKICAgICAgZm9yIChfQ09SQkFfVUxvbmcgaT0w
OyBpPGw7IGkrPTIpIHsKICAgICAgICBfQ09SQkFfVUxvbmcgdGwxID0gKChfQ09SQkFfVUxvbmcq
KUJhc2VUOjpOUF9kYXRhKCkpW2krMV07CiAgICAgICAgX0NPUkJBX1VMb25nIHRsMiA9ICgoKCh0
bDEpICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgodGwxKSAmIDB4MDBmZjAwMDApID4+IDgpIHwg
KCgodGwxKSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgodGwxKSAmIDB4MDAwMDAwZmYpIDw8IDI0
KSk7CiAgICAgICAgdGwxID0gKChfQ09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRhKCkpW2ldOwog
ICAgICAgICgoX0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgpKVtpXSA9IHRsMjsKICAgICAg
ICAoKF9DT1JCQV9VTG9uZyopQmFzZVQ6Ok5QX2RhdGEoKSlbaSsxXSA9ICgoKCh0bDEpICYgMHhm
ZjAwMDAwMCkgPj4gMjQpIHwgKCgodGwxKSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgodGwxKSAm
IDB4MDAwMGZmMDApIDw8IDgpIHwgKCgodGwxKSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7CiAgICAg
IH0KICAgIH0KICB9Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVCxpbnQgbWF4LGludCBlbG1TaXplLCBp
bnQgZWxtQWxpZ25tZW50PgppbmxpbmUKdm9pZApfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV93X0Zp
eFNpemVFbGVtZW50PFQsbWF4LGVsbVNpemUsZWxtQWxpZ25tZW50Pjo6b3BlcmF0b3I+Pj0gKE5l
dEJ1ZmZlcmVkU3RyZWFtJiBzKSBjb25zdAp7CiAgX0NPUkJBX1VMb25nIGwgPSBCYXNlVDo6bGVu
Z3RoKCk7CiAgbCA+Pj0gczsKICBpZiAobD09MCkgcmV0dXJuOwogIGlmICgoaW50KWVsbUFsaWdu
bWVudCA9PSAoaW50KW9tbmk6OkFMSUdOXzgpIHsKICAgIF9DT1JCQV9VTG9uZyBwYWRkaW5nID0g
MDsKICAgIGlmIChzLndyQ3VycmVudEFsaWdubWVudCgpICE9IChpbnQpb21uaTo6QUxJR05fOCkK
ICAgICAgcGFkZGluZyA+Pj0gczsKICB9CiAgcy5wdXRfY2hhcl9hcnJheSgoX0NPUkJBX0NoYXIq
KUJhc2VUOjpOUF9kYXRhKCksKGludClsKmVsbVNpemUpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFQs
aW50IG1heCxpbnQgZWxtU2l6ZSwgaW50IGVsbUFsaWdubWVudD4KaW5saW5lCnZvaWQKX0NPUkJB
X0JvdW5kZWRfU2VxdWVuY2Vfd19GaXhTaXplRWxlbWVudDxULG1heCxlbG1TaXplLGVsbUFsaWdu
bWVudD46Om9wZXJhdG9yPDw9IChOZXRCdWZmZXJlZFN0cmVhbSYgcykKewogIF9DT1JCQV9VTG9u
ZyBsOwogIGwgPDw9IHM7CiAgaWYgKGwqZWxtU2l6ZSA+IHMuUmRNZXNzYWdlVW5SZWFkKCkgfHwg
bCA+IG1heCkgewogICAgX0NPUkJBX21hcnNoYWxfZXJyb3IoKTsKCiAgfQoKICBCYXNlVDo6bGVu
Z3RoKGwpOwogIGlmIChsPT0wKSByZXR1cm47CiAgaWYgKChpbnQpZWxtQWxpZ25tZW50ID09IChp
bnQpb21uaTo6QUxJR05fOCkgewogICAgaWYgKHMucmRDdXJyZW50QWxpZ25tZW50KCkgIT0gKGlu
dClvbW5pOjpBTElHTl84KQogICAgICBzLnNraXAoc2l6ZW9mKF9DT1JCQV9VTG9uZykpOwogIH0K
ICBzLmdldF9jaGFyX2FycmF5KChfQ09SQkFfQ2hhciopQmFzZVQ6Ok5QX2RhdGEoKSwoaW50KWwq
ZWxtU2l6ZSk7CiAgaWYgKHMuUmRNZXNzYWdlQnl0ZU9yZGVyKCkgIT0gb21uaTo6bXlCeXRlT3Jk
ZXIgJiYgZWxtQWxpZ25tZW50ICE9IDEpIHsKICAgIGlmIChlbG1TaXplID09IDIpIHsKICAgICAg
Zm9yIChfQ09SQkFfVUxvbmcgaT0wOyBpPGw7IGkrKykgewogICAgICAgIF9DT1JCQV9VU2hvcnQg
dCA9ICgoX0NPUkJBX1VTaG9ydCopQmFzZVQ6Ok5QX2RhdGEoKSlbaV07CiAgICAgICAgKChfQ09S
QkFfVVNob3J0KilCYXNlVDo6TlBfZGF0YSgpKVtpXSA9ICgoKCh0KSAmIDB4ZmYpIDw8IDgpIHwg
KCgodCkgPj4gOCkgJiAweGZmKSk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKGVsbVNpemUg
PT0gNCkgewogICAgICBmb3IgKF9DT1JCQV9VTG9uZyBpPTA7IGk8bDsgaSsrKSB7CiAgICAgICAg
X0NPUkJBX1VMb25nIHQgPSAoKF9DT1JCQV9VTG9uZyopQmFzZVQ6Ok5QX2RhdGEoKSlbaV07CiAg
ICAgICAgKChfQ09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRhKCkpW2ldID0gKCgoKHQpICYgMHhm
ZjAwMDAwMCkgPj4gMjQpIHwgKCgodCkgJiAweDAwZmYwMDAwKSA+PiA4KSB8ICgoKHQpICYgMHgw
MDAwZmYwMCkgPDwgOCkgfCAoKCh0KSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7CiAgICAgIH0KICAg
IH0KICAgIGVsc2UgaWYgKGVsbVNpemUgPT0gOCkgewogICAgICBsICo9IDI7CiAgICAgIGZvciAo
X0NPUkJBX1VMb25nIGk9MDsgaTxsOyBpKz0yKSB7CiAgICAgICAgX0NPUkJBX1VMb25nIHRsMSA9
ICgoX0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgpKVtpKzFdOwogICAgICAgIF9DT1JCQV9V
TG9uZyB0bDIgPSAoKCgodGwxKSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgoKHRsMSkgJiAweDAw
ZmYwMDAwKSA+PiA4KSB8ICgoKHRsMSkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKHRsMSkgJiAw
eDAwMDAwMGZmKSA8PCAyNCkpOwogICAgICAgIHRsMSA9ICgoX0NPUkJBX1VMb25nKilCYXNlVDo6
TlBfZGF0YSgpKVtpXTsKICAgICAgICAoKF9DT1JCQV9VTG9uZyopQmFzZVQ6Ok5QX2RhdGEoKSlb
aV0gPSB0bDI7CiAgICAgICAgKChfQ09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRhKCkpW2krMV0g
PSAoKCgodGwxKSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgoKHRsMSkgJiAweDAwZmYwMDAwKSA+
PiA4KSB8ICgoKHRsMSkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKHRsMSkgJiAweDAwMDAwMGZm
KSA8PCAyNCkpOwogICAgICB9CiAgICB9CiAgfQp9CgoKdGVtcGxhdGUgPGNsYXNzIFQsaW50IG1h
eCxpbnQgZWxtU2l6ZSwgaW50IGVsbUFsaWdubWVudD4KaW5saW5lCnZvaWQKX0NPUkJBX0JvdW5k
ZWRfU2VxdWVuY2Vfd19GaXhTaXplRWxlbWVudDxULG1heCxlbG1TaXplLGVsbUFsaWdubWVudD46
Om9wZXJhdG9yPj49IChNZW1CdWZmZXJlZFN0cmVhbSYgcykgY29uc3QKewogIF9DT1JCQV9VTG9u
ZyBsID0gQmFzZVQ6Omxlbmd0aCgpOwogIGwgPj49IHM7CiAgaWYgKGw9PTApIHJldHVybjsKICBp
ZiAoKGludCllbG1BbGlnbm1lbnQgPT0gKGludClvbW5pOjpBTElHTl84KSB7CiAgICBfQ09SQkFf
VUxvbmcgcGFkZGluZyA9IDA7CiAgICBpZiAocy53ckN1cnJlbnRBbGlnbm1lbnQoKSAhPSAoaW50
KW9tbmk6OkFMSUdOXzgpCiAgICAgIHBhZGRpbmcgPj49IHM7CiAgfQogIHMucHV0X2NoYXJfYXJy
YXkoKF9DT1JCQV9DaGFyKilCYXNlVDo6TlBfZGF0YSgpLChpbnQpbCplbG1TaXplKTsKfQoKCnRl
bXBsYXRlIDxjbGFzcyBULGludCBtYXgsaW50IGVsbVNpemUsIGludCBlbG1BbGlnbm1lbnQ+Cmlu
bGluZQp2b2lkCl9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX3dfRml4U2l6ZUVsZW1lbnQ8VCxtYXgs
ZWxtU2l6ZSxlbG1BbGlnbm1lbnQ+OjpvcGVyYXRvcjw8PSAoTWVtQnVmZmVyZWRTdHJlYW0mIHMp
CnsKICBfQ09SQkFfVUxvbmcgbDsKICBsIDw8PSBzOwogIGlmICgocy51blJlYWQoKSA8IChsKmVs
bVNpemUpKSB8fCBsID4gbWF4KSB7CiAgICBfQ09SQkFfbWFyc2hhbF9lcnJvcigpOwoKICB9Cgog
IEJhc2VUOjpsZW5ndGgobCk7CiAgaWYgKGw9PTApIHJldHVybjsKICBpZiAoKGludCllbG1BbGln
bm1lbnQgPT0gKGludClvbW5pOjpBTElHTl84KSB7CiAgICBpZiAocy5yZEN1cnJlbnRBbGlnbm1l
bnQoKSAhPSAoaW50KW9tbmk6OkFMSUdOXzgpCiAgICAgIHMuc2tpcChzaXplb2YoX0NPUkJBX1VM
b25nKSk7CiAgfQogIHMuZ2V0X2NoYXJfYXJyYXkoKF9DT1JCQV9DaGFyKilCYXNlVDo6TlBfZGF0
YSgpLChpbnQpbCplbG1TaXplKTsKICBpZiAocy5ieXRlT3JkZXIoKSAhPSBvbW5pOjpteUJ5dGVP
cmRlciAmJiBlbG1BbGlnbm1lbnQgIT0gMSkgewogICAgaWYgKGVsbVNpemUgPT0gMikgewogICAg
ICBmb3IgKF9DT1JCQV9VTG9uZyBpPTA7IGk8bDsgaSsrKSB7CiAgICAgICAgX0NPUkJBX1VTaG9y
dCB0ID0gKChfQ09SQkFfVVNob3J0KilCYXNlVDo6TlBfZGF0YSgpKVtpXTsKICAgICAgICAoKF9D
T1JCQV9VU2hvcnQqKUJhc2VUOjpOUF9kYXRhKCkpW2ldID0gKCgoKHQpICYgMHhmZikgPDwgOCkg
fCAoKCh0KSA+PiA4KSAmIDB4ZmYpKTsKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoZWxtU2l6
ZSA9PSA0KSB7CiAgICAgIGZvciAoX0NPUkJBX1VMb25nIGk9MDsgaTxsOyBpKyspIHsKICAgICAg
ICBfQ09SQkFfVUxvbmcgdCA9ICgoX0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgpKVtpXTsK
ICAgICAgICAoKF9DT1JCQV9VTG9uZyopQmFzZVQ6Ok5QX2RhdGEoKSlbaV0gPSAoKCgodCkgJiAw
eGZmMDAwMDAwKSA+PiAyNCkgfCAoKCh0KSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgodCkgJiAw
eDAwMDBmZjAwKSA8PCA4KSB8ICgoKHQpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsKICAgICAgfQog
ICAgfQogICAgZWxzZSBpZiAoZWxtU2l6ZSA9PSA4KSB7CiAgICAgIGwgKj0gMjsKICAgICAgZm9y
IChfQ09SQkFfVUxvbmcgaT0wOyBpPGw7IGkrPTIpIHsKICAgICAgICBfQ09SQkFfVUxvbmcgdGwx
ID0gKChfQ09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRhKCkpW2krMV07CiAgICAgICAgX0NPUkJB
X1VMb25nIHRsMiA9ICgoKCh0bDEpICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgodGwxKSAmIDB4
MDBmZjAwMDApID4+IDgpIHwgKCgodGwxKSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgodGwxKSAm
IDB4MDAwMDAwZmYpIDw8IDI0KSk7CiAgICAgICAgdGwxID0gKChfQ09SQkFfVUxvbmcqKUJhc2VU
OjpOUF9kYXRhKCkpW2ldOwogICAgICAgICgoX0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgp
KVtpXSA9IHRsMjsKICAgICAgICAoKF9DT1JCQV9VTG9uZyopQmFzZVQ6Ok5QX2RhdGEoKSlbaSsx
XSA9ICgoKCh0bDEpICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgodGwxKSAmIDB4MDBmZjAwMDAp
ID4+IDgpIHwgKCgodGwxKSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgodGwxKSAmIDB4MDAwMDAw
ZmYpIDw8IDI0KSk7CiAgICAgIH0KICAgIH0KICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIFQsY2xh
c3MgVF9zbGljZSxjbGFzcyBUZWxtLGludCBkaW1lbnNpb24+CmlubGluZSB2b2lkCl9DT1JCQV9T
ZXF1ZW5jZV9BcnJheTxULFRfc2xpY2UsVGVsbSxkaW1lbnNpb24+OjpvcGVyYXRvcj4+PSAoTmV0
QnVmZmVyZWRTdHJlYW0mIHMpIGNvbnN0CnsKICBwZF9sZW4gPj49IHM7CiAgZm9yIChfQ09SQkFf
VUxvbmcgaT0wOyBpPHBkX2xlbjsgaSsrKSB7CiAgICBmb3IgKF9DT1JCQV9VTG9uZyBqPTA7IGo8
ZGltZW5zaW9uOyBqKyspIHsKICAgICAgKigoVGVsbSopKHBkX2J1ZltpXSkraikgPj49IHM7CiAg
ICB9CiAgfQogIHJldHVybjsKfQoKCnRlbXBsYXRlIDxjbGFzcyBULGNsYXNzIFRfc2xpY2UsY2xh
c3MgVGVsbSxpbnQgZGltZW5zaW9uPgppbmxpbmUgdm9pZApfQ09SQkFfU2VxdWVuY2VfQXJyYXk8
VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uPjo6b3BlcmF0b3I8PD0gKE5ldEJ1ZmZlcmVkU3RyZWFt
JiBzKQp7CiAgX0NPUkJBX1VMb25nIGw7CiAgbCA8PD0gczsKICBpZiAobCA+IHMuUmRNZXNzYWdl
VW5SZWFkKCkgfHwgKHBkX2JvdW5kZWQgJiYgbCA+IHBkX21heCkpIHsKICAgIF9DT1JCQV9tYXJz
aGFsX2Vycm9yKCk7CgogIH0KICBsZW5ndGgobCk7CiAgZm9yIChfQ09SQkFfVUxvbmcgaT0wOyBp
PGw7IGkrKykgewogICAgZm9yIChfQ09SQkFfVUxvbmcgaj0wOyBqPGRpbWVuc2lvbjsgaisrKSB7
CiAgICAgICooKFRlbG0qKShwZF9idWZbaV0pK2opIDw8PSBzOwogICAgfQogIH0KICByZXR1cm47
Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVCxjbGFzcyBUX3NsaWNlLGNsYXNzIFRlbG0saW50IGRpbWVu
c2lvbj4KaW5saW5lIHZvaWQKX0NPUkJBX1NlcXVlbmNlX0FycmF5PFQsVF9zbGljZSxUZWxtLGRp
bWVuc2lvbj46Om9wZXJhdG9yPj49IChNZW1CdWZmZXJlZFN0cmVhbSYgcykgY29uc3QKewogIHBk
X2xlbiA+Pj0gczsKICBmb3IgKF9DT1JCQV9VTG9uZyBpPTA7IGk8cGRfbGVuOyBpKyspIHsKICAg
IGZvciAoX0NPUkJBX1VMb25nIGo9MDsgajxkaW1lbnNpb247IGorKykgewogICAgICAqKChUZWxt
KikocGRfYnVmW2ldKStqKSA+Pj0gczsKICAgIH0KICB9CiAgcmV0dXJuOwp9CgoKdGVtcGxhdGUg
PGNsYXNzIFQsY2xhc3MgVF9zbGljZSxjbGFzcyBUZWxtLGludCBkaW1lbnNpb24+CmlubGluZSB2
b2lkCl9DT1JCQV9TZXF1ZW5jZV9BcnJheTxULFRfc2xpY2UsVGVsbSxkaW1lbnNpb24+OjpvcGVy
YXRvcjw8PSAoTWVtQnVmZmVyZWRTdHJlYW0mIHMpCnsKICBfQ09SQkFfVUxvbmcgbDsKICBsIDw8
PSBzOwogIGlmIChzLnVuUmVhZCgpIDwgbCB8fCAocGRfYm91bmRlZCAmJiBsID4gcGRfbWF4KSkg
ewogICAgX0NPUkJBX21hcnNoYWxfZXJyb3IoKTsKCiAgfQogIGxlbmd0aChsKTsKICBmb3IgKF9D
T1JCQV9VTG9uZyBpPTA7IGk8bDsgaSsrKSB7CiAgICBmb3IgKF9DT1JCQV9VTG9uZyBqPTA7IGo8
ZGltZW5zaW9uOyBqKyspIHsKICAgICAgKigoVGVsbSopKHBkX2J1ZltpXSkraikgPDw9IHM7CiAg
ICB9CiAgfQogIHJldHVybjsKfQoKCnRlbXBsYXRlIDxjbGFzcyBULGNsYXNzIFRfc2xpY2UsY2xh
c3MgVGVsbSxpbnQgZGltZW5zaW9uLGludCBlbG1TaXplLGludCBlbG1BbGlnbm1lbnQ+CmlubGlu
ZQp2b2lkCl9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlfd19GaXhTaXplRWxlbWVudDxU
LFRfc2xpY2UsVGVsbSxkaW1lbnNpb24sZWxtU2l6ZSxlbG1BbGlnbm1lbnQ+OjpvcGVyYXRvcj4+
PSAoTmV0QnVmZmVyZWRTdHJlYW0mIHMpIGNvbnN0CnsKICBfQ09SQkFfVUxvbmcgbCA9IEJhc2VU
OjpsZW5ndGgoKTsKICBsID4+PSBzOwogIGlmIChsPT0wKSByZXR1cm47CiAgaWYgKChpbnQpZWxt
QWxpZ25tZW50ID09IChpbnQpb21uaTo6QUxJR05fOCkgewogICAgX0NPUkJBX1VMb25nIHBhZGRp
bmcgPSAwOwogICAgaWYgKHMud3JDdXJyZW50QWxpZ25tZW50KCkgIT0gKGludClvbW5pOjpBTElH
Tl84KQogICAgICBwYWRkaW5nID4+PSBzOwogIH0KICBzLnB1dF9jaGFyX2FycmF5KChfQ09SQkFf
Q2hhciopQmFzZVQ6Ok5QX2RhdGEoKSwoaW50KWwqZGltZW5zaW9uKmVsbVNpemUpOwp9CgoKdGVt
cGxhdGUgPGNsYXNzIFQsY2xhc3MgVF9zbGljZSxjbGFzcyBUZWxtLGludCBkaW1lbnNpb24saW50
IGVsbVNpemUsaW50IGVsbUFsaWdubWVudD4KaW5saW5lCnZvaWQKX0NPUkJBX1VuYm91bmRlZF9T
ZXF1ZW5jZV9BcnJheV93X0ZpeFNpemVFbGVtZW50PFQsVF9zbGljZSxUZWxtLGRpbWVuc2lvbixl
bG1TaXplLGVsbUFsaWdubWVudD46Om9wZXJhdG9yPDw9IChOZXRCdWZmZXJlZFN0cmVhbSYgcykK
ewogIF9DT1JCQV9VTG9uZyBsOwogIGwgPDw9IHM7CiAgaWYgKGwqZGltZW5zaW9uKmVsbVNpemUg
PiBzLlJkTWVzc2FnZVVuUmVhZCgpKSB7CiAgICBfQ09SQkFfbWFyc2hhbF9lcnJvcigpOwoKICB9
CiAgQmFzZVQ6Omxlbmd0aChsKTsKICBpZiAobD09MCkgcmV0dXJuOwogIGlmICgoaW50KWVsbUFs
aWdubWVudCA9PSAoaW50KW9tbmk6OkFMSUdOXzgpIHsKICAgIGlmIChzLnJkQ3VycmVudEFsaWdu
bWVudCgpICE9IChpbnQpb21uaTo6QUxJR05fOCkKICAgICAgcy5za2lwKHNpemVvZihfQ09SQkFf
VUxvbmcpKTsKICB9CiAgcy5nZXRfY2hhcl9hcnJheSgoX0NPUkJBX0NoYXIqKUJhc2VUOjpOUF9k
YXRhKCksKGludClsKmRpbWVuc2lvbiplbG1TaXplKTsKICBpZiAocy5SZE1lc3NhZ2VCeXRlT3Jk
ZXIoKSAhPSBvbW5pOjpteUJ5dGVPcmRlciAmJiBlbG1BbGlnbm1lbnQgIT0gMSkgewogICAgaWYg
KGVsbVNpemUgPT0gMikgewogICAgICBsICo9IGRpbWVuc2lvbjsKICAgICAgZm9yIChfQ09SQkFf
VUxvbmcgaT0wOyBpPGw7IGkrKykgewogICAgICAgIF9DT1JCQV9VU2hvcnQgdCA9ICgoX0NPUkJB
X1VTaG9ydCopQmFzZVQ6Ok5QX2RhdGEoKSlbaV07CiAgICAgICAgKChfQ09SQkFfVVNob3J0KilC
YXNlVDo6TlBfZGF0YSgpKVtpXSA9ICgoKCh0KSAmIDB4ZmYpIDw8IDgpIHwgKCgodCkgPj4gOCkg
JiAweGZmKSk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKGVsbVNpemUgPT0gNCkgewogICAg
ICBsICo9IGRpbWVuc2lvbjsKICAgICAgZm9yIChfQ09SQkFfVUxvbmcgaT0wOyBpPGw7IGkrKykg
ewogICAgICAgIF9DT1JCQV9VTG9uZyB0ID0gKChfQ09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRh
KCkpW2ldOwogICAgICAgICgoX0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgpKVtpXSA9ICgo
KCh0KSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgoKHQpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAo
KCh0KSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgodCkgJiAweDAwMDAwMGZmKSA8PCAyNCkpOwog
ICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChlbG1TaXplID09IDgpIHsKICAgICAgbCAqPSAyKmRp
bWVuc2lvbjsKICAgICAgZm9yIChfQ09SQkFfVUxvbmcgaT0wOyBpPGw7IGkrPTIpIHsKICAgICAg
ICBfQ09SQkFfVUxvbmcgdGwxID0gKChfQ09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRhKCkpW2kr
MV07CiAgICAgICAgX0NPUkJBX1VMb25nIHRsMiA9ICgoKCh0bDEpICYgMHhmZjAwMDAwMCkgPj4g
MjQpIHwgKCgodGwxKSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgodGwxKSAmIDB4MDAwMGZmMDAp
IDw8IDgpIHwgKCgodGwxKSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7CiAgICAgICAgdGwxID0gKChf
Q09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRhKCkpW2ldOwogICAgICAgICgoX0NPUkJBX1VMb25n
KilCYXNlVDo6TlBfZGF0YSgpKVtpXSA9IHRsMjsKICAgICAgICAoKF9DT1JCQV9VTG9uZyopQmFz
ZVQ6Ok5QX2RhdGEoKSlbaSsxXSA9ICgoKCh0bDEpICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgo
dGwxKSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgodGwxKSAmIDB4MDAwMGZmMDApIDw8IDgpIHwg
KCgodGwxKSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7CiAgICAgIH0KICAgIH0KICB9Cn0KCgp0ZW1w
bGF0ZSA8Y2xhc3MgVCxjbGFzcyBUX3NsaWNlLGNsYXNzIFRlbG0saW50IGRpbWVuc2lvbixpbnQg
ZWxtU2l6ZSxpbnQgZWxtQWxpZ25tZW50PgppbmxpbmUKdm9pZApfQ09SQkFfVW5ib3VuZGVkX1Nl
cXVlbmNlX0FycmF5X3dfRml4U2l6ZUVsZW1lbnQ8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uLGVs
bVNpemUsZWxtQWxpZ25tZW50Pjo6b3BlcmF0b3I+Pj0gKE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSBj
b25zdAp7CiAgX0NPUkJBX1VMb25nIGwgPSBCYXNlVDo6bGVuZ3RoKCk7CiAgbCA+Pj0gczsKICBp
ZiAobD09MCkgcmV0dXJuOwogIGlmICgoaW50KWVsbUFsaWdubWVudCA9PSAoaW50KW9tbmk6OkFM
SUdOXzgpIHsKICAgIF9DT1JCQV9VTG9uZyBwYWRkaW5nID0gMDsKICAgIGlmIChzLndyQ3VycmVu
dEFsaWdubWVudCgpICE9IChpbnQpb21uaTo6QUxJR05fOCkKICAgICAgcGFkZGluZyA+Pj0gczsK
ICB9CiAgcy5wdXRfY2hhcl9hcnJheSgoX0NPUkJBX0NoYXIqKUJhc2VUOjpOUF9kYXRhKCksKGlu
dClsKmRpbWVuc2lvbiplbG1TaXplKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBULGNsYXNzIFRfc2xp
Y2UsY2xhc3MgVGVsbSxpbnQgZGltZW5zaW9uLGludCBlbG1TaXplLGludCBlbG1BbGlnbm1lbnQ+
CmlubGluZQp2b2lkCl9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlfd19GaXhTaXplRWxl
bWVudDxULFRfc2xpY2UsVGVsbSxkaW1lbnNpb24sZWxtU2l6ZSxlbG1BbGlnbm1lbnQ+OjpvcGVy
YXRvcjw8PSAoTWVtQnVmZmVyZWRTdHJlYW0mIHMpCnsKICBfQ09SQkFfVUxvbmcgbDsKICBsIDw8
PSBzOwogIGlmKCBzLnVuUmVhZCgpIDwgbCAqIGRpbWVuc2lvbiAqIGVsbVNpemUgKSB7CiAgICBf
Q09SQkFfbWFyc2hhbF9lcnJvcigpOwoKICB9CiAgQmFzZVQ6Omxlbmd0aChsKTsKICBpZiAobD09
MCkgcmV0dXJuOwogIGlmICgoaW50KWVsbUFsaWdubWVudCA9PSAoaW50KW9tbmk6OkFMSUdOXzgp
IHsKICAgIGlmIChzLnJkQ3VycmVudEFsaWdubWVudCgpICE9IChpbnQpb21uaTo6QUxJR05fOCkK
ICAgICAgcy5za2lwKHNpemVvZihfQ09SQkFfVUxvbmcpKTsKICB9CiAgcy5nZXRfY2hhcl9hcnJh
eSgoX0NPUkJBX0NoYXIqKUJhc2VUOjpOUF9kYXRhKCksKGludClsKmRpbWVuc2lvbiplbG1TaXpl
KTsKICBpZiAocy5ieXRlT3JkZXIoKSAhPSBvbW5pOjpteUJ5dGVPcmRlciAmJiBlbG1BbGlnbm1l
bnQgIT0gMSkgewogICAgaWYgKGVsbVNpemUgPT0gMikgewogICAgICBsICo9IGRpbWVuc2lvbjsK
ICAgICAgZm9yIChfQ09SQkFfVUxvbmcgaT0wOyBpPGw7IGkrKykgewogICAgICAgIF9DT1JCQV9V
U2hvcnQgdCA9ICgoX0NPUkJBX1VTaG9ydCopQmFzZVQ6Ok5QX2RhdGEoKSlbaV07CiAgICAgICAg
KChfQ09SQkFfVVNob3J0KilCYXNlVDo6TlBfZGF0YSgpKVtpXSA9ICgoKCh0KSAmIDB4ZmYpIDw8
IDgpIHwgKCgodCkgPj4gOCkgJiAweGZmKSk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKGVs
bVNpemUgPT0gNCkgewogICAgICBsICo9IGRpbWVuc2lvbjsKICAgICAgZm9yIChfQ09SQkFfVUxv
bmcgaT0wOyBpPGw7IGkrKykgewogICAgICAgIF9DT1JCQV9VTG9uZyB0ID0gKChfQ09SQkFfVUxv
bmcqKUJhc2VUOjpOUF9kYXRhKCkpW2ldOwogICAgICAgICgoX0NPUkJBX1VMb25nKilCYXNlVDo6
TlBfZGF0YSgpKVtpXSA9ICgoKCh0KSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgoKHQpICYgMHgw
MGZmMDAwMCkgPj4gOCkgfCAoKCh0KSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgodCkgJiAweDAw
MDAwMGZmKSA8PCAyNCkpOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChlbG1TaXplID09IDgp
IHsKICAgICAgbCAqPSAyKmRpbWVuc2lvbjsKICAgICAgZm9yIChfQ09SQkFfVUxvbmcgaT0wOyBp
PGw7IGkrPTIpIHsKICAgICAgICBfQ09SQkFfVUxvbmcgdGwxID0gKChfQ09SQkFfVUxvbmcqKUJh
c2VUOjpOUF9kYXRhKCkpW2krMV07CiAgICAgICAgX0NPUkJBX1VMb25nIHRsMiA9ICgoKCh0bDEp
ICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgodGwxKSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgo
dGwxKSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgodGwxKSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7
CiAgICAgICAgdGwxID0gKChfQ09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRhKCkpW2ldOwogICAg
ICAgICgoX0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgpKVtpXSA9IHRsMjsKICAgICAgICAo
KF9DT1JCQV9VTG9uZyopQmFzZVQ6Ok5QX2RhdGEoKSlbaSsxXSA9ICgoKCh0bDEpICYgMHhmZjAw
MDAwMCkgPj4gMjQpIHwgKCgodGwxKSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgodGwxKSAmIDB4
MDAwMGZmMDApIDw8IDgpIHwgKCgodGwxKSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7CiAgICAgIH0K
ICAgIH0KICB9Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVCxjbGFzcyBUX3NsaWNlLGNsYXNzIFRlbG0s
aW50IGRpbWVuc2lvbixpbnQgbWF4LGludCBlbG1TaXplLCBpbnQgZWxtQWxpZ25tZW50Pgppbmxp
bmUKdm9pZApfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9BcnJheV93X0ZpeFNpemVFbGVtZW50PFQs
VF9zbGljZSxUZWxtLGRpbWVuc2lvbixtYXgsZWxtU2l6ZSxlbG1BbGlnbm1lbnQ+OjpvcGVyYXRv
cj4+PSAoTmV0QnVmZmVyZWRTdHJlYW0mIHMpIGNvbnN0CnsKICBfQ09SQkFfVUxvbmcgbCA9IEJh
c2VUOjpsZW5ndGgoKTsKICBsID4+PSBzOwogIGlmIChsPT0wKSByZXR1cm47CiAgaWYgKChpbnQp
ZWxtQWxpZ25tZW50ID09IChpbnQpb21uaTo6QUxJR05fOCkgewogICAgX0NPUkJBX1VMb25nIHBh
ZGRpbmcgPSAwOwogICAgaWYgKHMud3JDdXJyZW50QWxpZ25tZW50KCkgIT0gKGludClvbW5pOjpB
TElHTl84KQogICAgICBwYWRkaW5nID4+PSBzOwogIH0KICBzLnB1dF9jaGFyX2FycmF5KChfQ09S
QkFfQ2hhciopQmFzZVQ6Ok5QX2RhdGEoKSwoaW50KWwqZGltZW5zaW9uKmVsbVNpemUpOwp9CgoK
dGVtcGxhdGUgPGNsYXNzIFQsY2xhc3MgVF9zbGljZSxjbGFzcyBUZWxtLGludCBkaW1lbnNpb24s
aW50IG1heCxpbnQgZWxtU2l6ZSwgaW50IGVsbUFsaWdubWVudD4KaW5saW5lCnZvaWQKX0NPUkJB
X0JvdW5kZWRfU2VxdWVuY2VfQXJyYXlfd19GaXhTaXplRWxlbWVudDxULFRfc2xpY2UsVGVsbSxk
aW1lbnNpb24sbWF4LGVsbVNpemUsZWxtQWxpZ25tZW50Pjo6b3BlcmF0b3I8PD0gKE5ldEJ1ZmZl
cmVkU3RyZWFtJiBzKQp7CiAgX0NPUkJBX1VMb25nIGw7CiAgbCA8PD0gczsKICBpZiAobCpkaW1l
bnNpb24qZWxtU2l6ZSA+IHMuUmRNZXNzYWdlVW5SZWFkKCkgfHwgbCA+IG1heCkgewogICAgX0NP
UkJBX21hcnNoYWxfZXJyb3IoKTsKCiAgfQoKICBCYXNlVDo6bGVuZ3RoKGwpOwogIGlmIChsPT0w
KSByZXR1cm47CiAgaWYgKChpbnQpZWxtQWxpZ25tZW50ID09IChpbnQpb21uaTo6QUxJR05fOCkg
ewogICAgaWYgKHMucmRDdXJyZW50QWxpZ25tZW50KCkgIT0gKGludClvbW5pOjpBTElHTl84KQog
ICAgICBzLnNraXAoc2l6ZW9mKF9DT1JCQV9VTG9uZykpOwogIH0KICBzLmdldF9jaGFyX2FycmF5
KChfQ09SQkFfQ2hhciopQmFzZVQ6Ok5QX2RhdGEoKSwoaW50KWwqZGltZW5zaW9uKmVsbVNpemUp
OwogIGlmIChzLlJkTWVzc2FnZUJ5dGVPcmRlcigpICE9IG9tbmk6Om15Qnl0ZU9yZGVyICYmIGVs
bUFsaWdubWVudCAhPSAxKSB7CiAgICBpZiAoZWxtU2l6ZSA9PSAyKSB7CiAgICAgIGwgKj0gZGlt
ZW5zaW9uOwogICAgICBmb3IgKF9DT1JCQV9VTG9uZyBpPTA7IGk8bDsgaSsrKSB7CiAgICAgICAg
X0NPUkJBX1VTaG9ydCB0ID0gKChfQ09SQkFfVVNob3J0KilCYXNlVDo6TlBfZGF0YSgpKVtpXTsK
ICAgICAgICAoKF9DT1JCQV9VU2hvcnQqKUJhc2VUOjpOUF9kYXRhKCkpW2ldID0gKCgoKHQpICYg
MHhmZikgPDwgOCkgfCAoKCh0KSA+PiA4KSAmIDB4ZmYpKTsKICAgICAgfQogICAgfQogICAgZWxz
ZSBpZiAoZWxtU2l6ZSA9PSA0KSB7CiAgICAgIGwgKj0gZGltZW5zaW9uOwogICAgICBmb3IgKF9D
T1JCQV9VTG9uZyBpPTA7IGk8bDsgaSsrKSB7CiAgICAgICAgX0NPUkJBX1VMb25nIHQgPSAoKF9D
T1JCQV9VTG9uZyopQmFzZVQ6Ok5QX2RhdGEoKSlbaV07CiAgICAgICAgKChfQ09SQkFfVUxvbmcq
KUJhc2VUOjpOUF9kYXRhKCkpW2ldID0gKCgoKHQpICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgo
dCkgJiAweDAwZmYwMDAwKSA+PiA4KSB8ICgoKHQpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKCh0
KSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKGVsbVNp
emUgPT0gOCkgewogICAgICBsICo9IDIqZGltZW5zaW9uOwogICAgICBmb3IgKF9DT1JCQV9VTG9u
ZyBpPTA7IGk8bDsgaSs9MikgewogICAgICAgIF9DT1JCQV9VTG9uZyB0bDEgPSAoKF9DT1JCQV9V
TG9uZyopQmFzZVQ6Ok5QX2RhdGEoKSlbaSsxXTsKICAgICAgICBfQ09SQkFfVUxvbmcgdGwyID0g
KCgoKHRsMSkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKCh0bDEpICYgMHgwMGZmMDAwMCkgPj4g
OCkgfCAoKCh0bDEpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKCh0bDEpICYgMHgwMDAwMDBmZikg
PDwgMjQpKTsKICAgICAgICB0bDEgPSAoKF9DT1JCQV9VTG9uZyopQmFzZVQ6Ok5QX2RhdGEoKSlb
aV07CiAgICAgICAgKChfQ09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRhKCkpW2ldID0gdGwyOwog
ICAgICAgICgoX0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgpKVtpKzFdID0gKCgoKHRsMSkg
JiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKCh0bDEpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKCh0
bDEpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKCh0bDEpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsK
ICAgICAgfQogICAgfQogIH0KfQoKCnRlbXBsYXRlIDxjbGFzcyBULGNsYXNzIFRfc2xpY2UsY2xh
c3MgVGVsbSxpbnQgZGltZW5zaW9uLGludCBtYXgsaW50IGVsbVNpemUsIGludCBlbG1BbGlnbm1l
bnQ+CmlubGluZQp2b2lkCl9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX0FycmF5X3dfRml4U2l6ZUVs
ZW1lbnQ8VCxUX3NsaWNlLFRlbG0sZGltZW5zaW9uLG1heCxlbG1TaXplLGVsbUFsaWdubWVudD46
Om9wZXJhdG9yPj49IChNZW1CdWZmZXJlZFN0cmVhbSYgcykgY29uc3QKewogIF9DT1JCQV9VTG9u
ZyBsID0gQmFzZVQ6Omxlbmd0aCgpOwogIGwgPj49IHM7CiAgaWYgKGw9PTApIHJldHVybjsKICBp
ZiAoKGludCllbG1BbGlnbm1lbnQgPT0gKGludClvbW5pOjpBTElHTl84KSB7CiAgICBfQ09SQkFf
VUxvbmcgcGFkZGluZyA9IDA7CiAgICBpZiAocy53ckN1cnJlbnRBbGlnbm1lbnQoKSAhPSAoaW50
KW9tbmk6OkFMSUdOXzgpCiAgICAgIHBhZGRpbmcgPj49IHM7CiAgfQogIHMucHV0X2NoYXJfYXJy
YXkoKF9DT1JCQV9DaGFyKilCYXNlVDo6TlBfZGF0YSgpLChpbnQpbCpkaW1lbnNpb24qZWxtU2l6
ZSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVCxjbGFzcyBUX3NsaWNlLGNsYXNzIFRlbG0saW50IGRp
bWVuc2lvbixpbnQgbWF4LGludCBlbG1TaXplLCBpbnQgZWxtQWxpZ25tZW50PgppbmxpbmUKdm9p
ZApfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9BcnJheV93X0ZpeFNpemVFbGVtZW50PFQsVF9zbGlj
ZSxUZWxtLGRpbWVuc2lvbixtYXgsZWxtU2l6ZSxlbG1BbGlnbm1lbnQ+OjpvcGVyYXRvcjw8PSAo
TWVtQnVmZmVyZWRTdHJlYW0mIHMpCnsKICBfQ09SQkFfVUxvbmcgbDsKICBsIDw8PSBzOwogIGlm
ICgocy51blJlYWQoKSA8IChsKmRpbWVuc2lvbiplbG1TaXplKSkgfHwgbCA+IG1heCkgewogICAg
X0NPUkJBX21hcnNoYWxfZXJyb3IoKTsKCiAgfQoKICBCYXNlVDo6bGVuZ3RoKGwpOwogIGlmIChs
PT0wKSByZXR1cm47CiAgaWYgKChpbnQpZWxtQWxpZ25tZW50ID09IChpbnQpb21uaTo6QUxJR05f
OCkgewogICAgaWYgKHMucmRDdXJyZW50QWxpZ25tZW50KCkgIT0gKGludClvbW5pOjpBTElHTl84
KQogICAgICBzLnNraXAoc2l6ZW9mKF9DT1JCQV9VTG9uZykpOwogIH0KICBzLmdldF9jaGFyX2Fy
cmF5KChfQ09SQkFfQ2hhciopQmFzZVQ6Ok5QX2RhdGEoKSwoaW50KWwqZGltZW5zaW9uKmVsbVNp
emUpOwogIGlmIChzLmJ5dGVPcmRlcigpICE9IG9tbmk6Om15Qnl0ZU9yZGVyICYmIGVsbUFsaWdu
bWVudCAhPSAxKSB7CiAgICBpZiAoZWxtU2l6ZSA9PSAyKSB7CiAgICAgIGwgKj0gZGltZW5zaW9u
OwogICAgICBmb3IgKF9DT1JCQV9VTG9uZyBpPTA7IGk8bDsgaSsrKSB7CiAgICAgICAgX0NPUkJB
X1VTaG9ydCB0ID0gKChfQ09SQkFfVVNob3J0KilCYXNlVDo6TlBfZGF0YSgpKVtpXTsKICAgICAg
ICAoKF9DT1JCQV9VU2hvcnQqKUJhc2VUOjpOUF9kYXRhKCkpW2ldID0gKCgoKHQpICYgMHhmZikg
PDwgOCkgfCAoKCh0KSA+PiA4KSAmIDB4ZmYpKTsKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAo
ZWxtU2l6ZSA9PSA0KSB7CiAgICAgIGwgKj0gZGltZW5zaW9uOwogICAgICBmb3IgKF9DT1JCQV9V
TG9uZyBpPTA7IGk8bDsgaSsrKSB7CiAgICAgICAgX0NPUkJBX1VMb25nIHQgPSAoKF9DT1JCQV9V
TG9uZyopQmFzZVQ6Ok5QX2RhdGEoKSlbaV07CiAgICAgICAgKChfQ09SQkFfVUxvbmcqKUJhc2VU
OjpOUF9kYXRhKCkpW2ldID0gKCgoKHQpICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgodCkgJiAw
eDAwZmYwMDAwKSA+PiA4KSB8ICgoKHQpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKCh0KSAmIDB4
MDAwMDAwZmYpIDw8IDI0KSk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKGVsbVNpemUgPT0g
OCkgewogICAgICBsICo9IDIqZGltZW5zaW9uOwogICAgICBmb3IgKF9DT1JCQV9VTG9uZyBpPTA7
IGk8bDsgaSs9MikgewogICAgICAgIF9DT1JCQV9VTG9uZyB0bDEgPSAoKF9DT1JCQV9VTG9uZyop
QmFzZVQ6Ok5QX2RhdGEoKSlbaSsxXTsKICAgICAgICBfQ09SQkFfVUxvbmcgdGwyID0gKCgoKHRs
MSkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKCh0bDEpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAo
KCh0bDEpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKCh0bDEpICYgMHgwMDAwMDBmZikgPDwgMjQp
KTsKICAgICAgICB0bDEgPSAoKF9DT1JCQV9VTG9uZyopQmFzZVQ6Ok5QX2RhdGEoKSlbaV07CiAg
ICAgICAgKChfQ09SQkFfVUxvbmcqKUJhc2VUOjpOUF9kYXRhKCkpW2ldID0gdGwyOwogICAgICAg
ICgoX0NPUkJBX1VMb25nKilCYXNlVDo6TlBfZGF0YSgpKVtpKzFdID0gKCgoKHRsMSkgJiAweGZm
MDAwMDAwKSA+PiAyNCkgfCAoKCh0bDEpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKCh0bDEpICYg
MHgwMDAwZmYwMCkgPDwgOCkgfCAoKCh0bDEpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsKICAgICAg
fQogICAgfQogIH0KfQojIDE2MDcgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvYnVmZmVy
ZWRTdHJlYW0uaCIKdm9pZApfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19Cb29sZWFuOjpvcGVy
YXRvcj4+PSAoTmV0QnVmZmVyZWRTdHJlYW0mIHMpIGNvbnN0CnsKICBfQ09SQkFfU2VxdWVuY2U8
X0NPUkJBX0Jvb2xlYW4+OjpvcGVyYXRvcj4+PShzKTsKfQoKCnZvaWQKX0NPUkJBX1VuYm91bmRl
ZF9TZXF1ZW5jZV9fQm9vbGVhbjo6b3BlcmF0b3I8PD0gKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKQp7
CiAgX0NPUkJBX1NlcXVlbmNlPF9DT1JCQV9Cb29sZWFuPjo6b3BlcmF0b3I8PD0ocyk7Cn0KCgp2
b2lkCl9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX0Jvb2xlYW46Om9wZXJhdG9yPj49IChNZW1C
dWZmZXJlZFN0cmVhbSYgcykgY29uc3QKewogIF9DT1JCQV9TZXF1ZW5jZTxfQ09SQkFfQm9vbGVh
bj46Om9wZXJhdG9yPj49KHMpOwp9CgoKdm9pZApfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19C
b29sZWFuOjpvcGVyYXRvcjw8PSAoTWVtQnVmZmVyZWRTdHJlYW0mIHMpCnsKICBfQ09SQkFfU2Vx
dWVuY2U8X0NPUkJBX0Jvb2xlYW4+OjpvcGVyYXRvcjw8PShzKTsKfQoKCnRlbXBsYXRlIDxpbnQg
bWF4Pgp2b2lkCl9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX19Cb29sZWFuPG1heD46Om9wZXJhdG9y
Pj49IChOZXRCdWZmZXJlZFN0cmVhbSYgcykgY29uc3QKewogIF9DT1JCQV9TZXF1ZW5jZTxfQ09S
QkFfQm9vbGVhbj46Om9wZXJhdG9yPj49KHMpOwp9CgoKdGVtcGxhdGUgPGludCBtYXg+CnZvaWQK
X0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfX0Jvb2xlYW48bWF4Pjo6b3BlcmF0b3I8PD0gKE5ldEJ1
ZmZlcmVkU3RyZWFtJiBzKQp7CiAgX0NPUkJBX1VMb25nIGw7CiAgbCA8PD0gczsKICBpZiAobCA+
IHMuUmRNZXNzYWdlVW5SZWFkKCkgfHwgbCA+IG1heCkgewogICAgX0NPUkJBX21hcnNoYWxfZXJy
b3IoKTsKCiAgfQoKICBCYXNlVDo6bGVuZ3RoKGwpOwogIGZvciAoX0NPUkJBX1VMb25nIGk9MDsg
aTxsOyBpKyspIHsKICAgIF9DT1JCQV9TZXF1ZW5jZTxfQ09SQkFfQm9vbGVhbj46Ok5QX2RhdGEo
KVtpXSA8PD0gczsKICB9CiAgcmV0dXJuOwp9CgoKdGVtcGxhdGUgPGludCBtYXg+CnZvaWQKX0NP
UkJBX0JvdW5kZWRfU2VxdWVuY2VfX0Jvb2xlYW48bWF4Pjo6b3BlcmF0b3I+Pj0gKE1lbUJ1ZmZl
cmVkU3RyZWFtJiBzKSBjb25zdAp7CiAgX0NPUkJBX1NlcXVlbmNlPF9DT1JCQV9Cb29sZWFuPjo6
b3BlcmF0b3I+Pj0ocyk7Cn0KCgp0ZW1wbGF0ZSA8aW50IG1heD4Kdm9pZApfQ09SQkFfQm91bmRl
ZF9TZXF1ZW5jZV9fQm9vbGVhbjxtYXg+OjpvcGVyYXRvcjw8PSAoTWVtQnVmZmVyZWRTdHJlYW0m
IHMpCnsKICBfQ09SQkFfVUxvbmcgbDsKICBsIDw8PSBzOwogIGlmICgocy51blJlYWQoKSA8IGwp
IHx8IGwgPiBtYXgpIHsKICAgIF9DT1JCQV9tYXJzaGFsX2Vycm9yKCk7CgogIH0KICBCYXNlVDo6
bGVuZ3RoKGwpOwogIGZvciAoX0NPUkJBX1VMb25nIGk9MDsgaTxsOyBpKyspIHsKICAgIF9DT1JC
QV9TZXF1ZW5jZTxfQ09SQkFfQm9vbGVhbj46Ok5QX2RhdGEoKVtpXSA8PD0gczsKICB9CiAgcmV0
dXJuOwp9CgoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVF9zbGljZSwgaW50IGRpbWVuc2lvbj4K
dm9pZApfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5X19Cb29sZWFuPFQsVF9zbGljZSxk
aW1lbnNpb24+OjoKICAgIG9wZXJhdG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSYgcykgY29uc3QK
ewogIF9DT1JCQV9TZXF1ZW5jZV9BcnJheTxULFRfc2xpY2UsX0NPUkJBX0Jvb2xlYW4sZGltZW5z
aW9uPjo6b3BlcmF0b3I+Pj0ocyk7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUX3NsaWNl
LCBpbnQgZGltZW5zaW9uPgp2b2lkCl9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfQXJyYXlfX0Jv
b2xlYW48VCxUX3NsaWNlLGRpbWVuc2lvbj46OgogICAgb3BlcmF0b3I8PD0gKE5ldEJ1ZmZlcmVk
U3RyZWFtJiBzKQp7CiAgX0NPUkJBX1NlcXVlbmNlX0FycmF5PFQsVF9zbGljZSxfQ09SQkFfQm9v
bGVhbixkaW1lbnNpb24+OjpvcGVyYXRvcjw8PShzKTsKfQoKCnRlbXBsYXRlPGNsYXNzIFQsIGNs
YXNzIFRfc2xpY2UsIGludCBkaW1lbnNpb24+CnZvaWQKX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5j
ZV9BcnJheV9fQm9vbGVhbjxULFRfc2xpY2UsZGltZW5zaW9uPjo6CiAgICBvcGVyYXRvcj4+PSAo
TWVtQnVmZmVyZWRTdHJlYW0mIHMpIGNvbnN0CnsKICBfQ09SQkFfU2VxdWVuY2VfQXJyYXk8VCxU
X3NsaWNlLF9DT1JCQV9Cb29sZWFuLGRpbWVuc2lvbj46Om9wZXJhdG9yPj49KHMpOwp9CgoKdGVt
cGxhdGU8Y2xhc3MgVCwgY2xhc3MgVF9zbGljZSwgaW50IGRpbWVuc2lvbj4Kdm9pZApfQ09SQkFf
VW5ib3VuZGVkX1NlcXVlbmNlX0FycmF5X19Cb29sZWFuPFQsVF9zbGljZSxkaW1lbnNpb24+OjoK
ICAgIG9wZXJhdG9yPDw9IChNZW1CdWZmZXJlZFN0cmVhbSYgcykKewogIF9DT1JCQV9TZXF1ZW5j
ZV9BcnJheTxULFRfc2xpY2UsX0NPUkJBX0Jvb2xlYW4sZGltZW5zaW9uPjo6b3BlcmF0b3I8PD0o
cyk7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUX3NsaWNlLCBpbnQgZGltZW5zaW9uLCBp
bnQgbWF4Pgp2b2lkCl9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX0FycmF5X19Cb29sZWFuPFQsVF9z
bGljZSxkaW1lbnNpb24sbWF4Pjo6CiAgIG9wZXJhdG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSYg
cykgY29uc3QKewogIF9DT1JCQV9TZXF1ZW5jZV9BcnJheTxULFRfc2xpY2UsX0NPUkJBX0Jvb2xl
YW4sZGltZW5zaW9uPjo6b3BlcmF0b3I+Pj0ocyk7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFz
cyBUX3NsaWNlLCBpbnQgZGltZW5zaW9uLCBpbnQgbWF4Pgp2b2lkCl9DT1JCQV9Cb3VuZGVkX1Nl
cXVlbmNlX0FycmF5X19Cb29sZWFuPFQsVF9zbGljZSxkaW1lbnNpb24sbWF4Pjo6CiAgICBvcGVy
YXRvcjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0mIHMpCnsKICBfQ09SQkFfVUxvbmcgbDsKICBsIDw8
PSBzOwogIGlmIChsID4gcy5SZE1lc3NhZ2VVblJlYWQoKSB8fCBsID4gbWF4KSB7CiAgICBfQ09S
QkFfbWFyc2hhbF9lcnJvcigpOwoKICB9CgogIEJhc2VUOjpsZW5ndGgobCk7CiAgZm9yIChfQ09S
QkFfVUxvbmcgaT0wOyBpPGw7IGkrKykgewogICAgZm9yIChfQ09SQkFfVUxvbmcgaj0wOyBqPGRp
bWVuc2lvbjsgaisrKSB7CiAgICAgICooKF9DT1JCQV9Cb29sZWFuKikoQmFzZVQ6Ok5QX2RhdGEo
KVtpXSkraikgPDw9IHM7CiAgICB9CiAgfQogIHJldHVybjsKfQoKCnRlbXBsYXRlPGNsYXNzIFQs
IGNsYXNzIFRfc2xpY2UsIGludCBkaW1lbnNpb24sIGludCBtYXg+CnZvaWQKX0NPUkJBX0JvdW5k
ZWRfU2VxdWVuY2VfQXJyYXlfX0Jvb2xlYW48VCxUX3NsaWNlLGRpbWVuc2lvbixtYXg+OjoKICAg
IG9wZXJhdG9yPj49IChNZW1CdWZmZXJlZFN0cmVhbSYgcykgY29uc3QKewogIF9DT1JCQV9TZXF1
ZW5jZV9BcnJheTxULFRfc2xpY2UsX0NPUkJBX0Jvb2xlYW4sZGltZW5zaW9uPjo6b3BlcmF0b3I+
Pj0ocyk7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUX3NsaWNlLCBpbnQgZGltZW5zaW9u
LCBpbnQgbWF4Pgp2b2lkCl9DT1JCQV9Cb3VuZGVkX1NlcXVlbmNlX0FycmF5X19Cb29sZWFuPFQs
VF9zbGljZSxkaW1lbnNpb24sbWF4Pjo6CiAgICBvcGVyYXRvcjw8PSAoTWVtQnVmZmVyZWRTdHJl
YW0mIHMpCnsKICBfQ09SQkFfVUxvbmcgbDsKICBsIDw8PSBzOwogIGlmICgocy51blJlYWQoKSA8
IGwpIHx8IGwgPiBtYXgpIHsKICAgIF9DT1JCQV9tYXJzaGFsX2Vycm9yKCk7CgogIH0KICBCYXNl
VDo6bGVuZ3RoKGwpOwogIGZvciAoX0NPUkJBX1VMb25nIGk9MDsgaTxsOyBpKyspIHsKICAgIGZv
ciAoX0NPUkJBX1VMb25nIGo9MDsgajxkaW1lbnNpb247IGorKykgewogICAgICAqKChfQ09SQkFf
Qm9vbGVhbiopKEJhc2VUOjpOUF9kYXRhKClbaV0pK2opIDw8PSBzOwogICAgfQogIH0KICByZXR1
cm47Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFbGVtVCxjbGFzcyBUX0hlbHBlcj4K
aW5saW5lIHZvaWQKX0NPUkJBX1NlcXVlbmNlX09ialJlZjxULEVsZW1ULFRfSGVscGVyPjo6b3Bl
cmF0b3I+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSBjb25zdAp7CiAgOjpvcGVyYXRvcj4+PShf
Q09SQkFfVUxvbmcocGRfbGVuKSwgcyk7CiAgZm9yKCBpbnQgaSA9IDA7IGkgPCAoaW50KXBkX2xl
bjsgaSsrICkKICAgIFRfSGVscGVyOjptYXJzaGFsT2JqUmVmKHBkX2RhdGFbaV0scyk7Cn0KCgoK
CgppbmxpbmUgdm9pZCBvcGVyYXRvciA8PD0gKG9tbmlPYmpLZXkmIGssIE5ldEJ1ZmZlcmVkU3Ry
ZWFtJiBzKSB7CiAgX0NPUkJBX1VMb25nIHNpemU7CiAgc2l6ZSA8PD0gczsKICBrLnNldF9zaXpl
KHNpemUpOwogIHMuZ2V0X2NoYXJfYXJyYXkoKF9DT1JCQV9DaGFyKikgay53cml0ZV9rZXkoKSwg
c2l6ZSk7Cn0KaW5saW5lIHZvaWQgb3BlcmF0b3IgPDw9IChvbW5pT2JqS2V5JiBrLCBNZW1CdWZm
ZXJlZFN0cmVhbSYgcykgewogIF9DT1JCQV9VTG9uZyBzaXplOwogIHNpemUgPDw9IHM7CiAgay5z
ZXRfc2l6ZShzaXplKTsKICBzLmdldF9jaGFyX2FycmF5KChfQ09SQkFfQ2hhciopIGsud3JpdGVf
a2V5KCksIHNpemUpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEVsZW1ULGNsYXNz
IFRfSGVscGVyPgppbmxpbmUgdm9pZApfQ09SQkFfU2VxdWVuY2VfT2JqUmVmPFQsRWxlbVQsVF9I
ZWxwZXI+OjpvcGVyYXRvcjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0mIHMpCnsKICBfQ09SQkFfVUxv
bmcgbDsKICBsIDw8PSBzOwogIGlmIChsID4gcy5SZE1lc3NhZ2VVblJlYWQoKSB8fCAocGRfYm91
bmRlZCAmJiBsID4gcGRfbWF4KSkgewogICAgX0NPUkJBX21hcnNoYWxfZXJyb3IoKTsKCiAgfQog
IGxlbmd0aChsKTsKICBmb3IoIF9DT1JCQV9VTG9uZyBpID0gMDsgaSA8IGw7IGkrKyApCiAgICBv
cGVyYXRvcltdKGkpID0gVF9IZWxwZXI6OnVubWFyc2hhbE9ialJlZihzKTsKfQoKCnRlbXBsYXRl
IDxjbGFzcyBULCBjbGFzcyBFbGVtVCxjbGFzcyBUX0hlbHBlcj4KaW5saW5lIHZvaWQKX0NPUkJB
X1NlcXVlbmNlX09ialJlZjxULEVsZW1ULFRfSGVscGVyPjo6b3BlcmF0b3I+Pj0gKE1lbUJ1ZmZl
cmVkU3RyZWFtJiBzKSBjb25zdAp7CiAgcGRfbGVuID4+PSBzOwogIGZvciAoaW50IGk9MDsgaTwo
aW50KXBkX2xlbjsgaSsrKQogICAgVF9IZWxwZXI6Om1hcnNoYWxPYmpSZWYocGRfZGF0YVtpXSxz
KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFbGVtVCwgY2xhc3MgVF9IZWxwZXI+Cmlu
bGluZSB2b2lkCl9DT1JCQV9TZXF1ZW5jZV9PYmpSZWY8VCxFbGVtVCxUX0hlbHBlcj46Om9wZXJh
dG9yPDw9IChNZW1CdWZmZXJlZFN0cmVhbSYgcykKewogIF9DT1JCQV9VTG9uZyBsOwogIGwgPDw9
IHM7CiAgaWYgKHMudW5SZWFkKCkgPCBsIHx8IChwZF9ib3VuZGVkICYmIGwgPiBwZF9tYXgpKSB7
CiAgICBfQ09SQkFfbWFyc2hhbF9lcnJvcigpOwoKICB9CiAgbGVuZ3RoKGwpOwogIGZvciAoX0NP
UkJBX1VMb25nIGk9MDsgaTxsOyBpKyspCiAgICBvcGVyYXRvcltdKGkpID0gVF9IZWxwZXI6OnVu
bWFyc2hhbE9ialJlZihzKTsKfQojIDQwOCAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9v
bW5pSW50ZXJuYWwuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvZ2lvcERy
aXZlci5oIiAxCiMgODQgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvZ2lvcERyaXZlci5o
IgpjbGFzcyBHSU9QX0Jhc2V0eXBlcyB7CnB1YmxpYzoKICBjbGFzcyBNZXNzYWdlSGVhZGVyIHsK
ICBwdWJsaWM6CiAgICB0eXBlZGVmIF9DT1JCQV9DaGFyIEhlYWRlclR5cGVbOF07CiAgICBzdGF0
aWMgY29uc3QgSGVhZGVyVHlwZSBSZXF1ZXN0OwogICAgc3RhdGljIGNvbnN0IEhlYWRlclR5cGUg
UmVwbHk7CiAgICBzdGF0aWMgY29uc3QgSGVhZGVyVHlwZSBDYW5jZWxSZXF1ZXN0OwogICAgc3Rh
dGljIGNvbnN0IEhlYWRlclR5cGUgTG9jYXRlUmVxdWVzdDsKICAgIHN0YXRpYyBjb25zdCBIZWFk
ZXJUeXBlIExvY2F0ZVJlcGx5OwogICAgc3RhdGljIGNvbnN0IEhlYWRlclR5cGUgQ2xvc2VDb25u
ZWN0aW9uOwogICAgc3RhdGljIGNvbnN0IEhlYWRlclR5cGUgTWVzc2FnZUVycm9yOwogIH07CiAg
c3RydWN0IF9TeXNFeGNlcHRSZXBvSUQgewogICAgX0NPUkJBX0NoYXIgKmlkOwogICAgX0NPUkJB
X1VMb25nIGxlbjsKCiAgICBfU3lzRXhjZXB0UmVwb0lEKF9DT1JCQV9DaGFyICppKSB7CiAgICAg
IGlkID0gaTsgbGVuID0gc3RybGVuKChjb25zdCBjaGFyICopaSk7CiAgICB9CiAgfTsKICBjbGFz
cyBTeXNFeGNlcHRSZXBvSUQgewogIHB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBfU3lzRXhjZXB0
UmVwb0lEIFVOS05PV047CiAgICBzdGF0aWMgY29uc3QgX1N5c0V4Y2VwdFJlcG9JRCBCQURfUEFS
QU07CiAgICBzdGF0aWMgY29uc3QgX1N5c0V4Y2VwdFJlcG9JRCBOT19NRU1PUlk7CiAgICBzdGF0
aWMgY29uc3QgX1N5c0V4Y2VwdFJlcG9JRCBJTVBfTElNSVQ7CiAgICBzdGF0aWMgY29uc3QgX1N5
c0V4Y2VwdFJlcG9JRCBDT01NX0ZBSUxVUkU7CiAgICBzdGF0aWMgY29uc3QgX1N5c0V4Y2VwdFJl
cG9JRCBJTlZfT0JKUkVGOwogICAgc3RhdGljIGNvbnN0IF9TeXNFeGNlcHRSZXBvSUQgT0JKRUNU
X05PVF9FWElTVDsKICAgIHN0YXRpYyBjb25zdCBfU3lzRXhjZXB0UmVwb0lEIE5PX1BFUk1JU1NJ
T047CiAgICBzdGF0aWMgY29uc3QgX1N5c0V4Y2VwdFJlcG9JRCBJTlRFUk5BTDsKICAgIHN0YXRp
YyBjb25zdCBfU3lzRXhjZXB0UmVwb0lEIE1BUlNIQUw7CiAgICBzdGF0aWMgY29uc3QgX1N5c0V4
Y2VwdFJlcG9JRCBJTklUSUFMSVpFOwogICAgc3RhdGljIGNvbnN0IF9TeXNFeGNlcHRSZXBvSUQg
Tk9fSU1QTEVNRU5UOwogICAgc3RhdGljIGNvbnN0IF9TeXNFeGNlcHRSZXBvSUQgQkFEX1RZUEVD
T0RFOwogICAgc3RhdGljIGNvbnN0IF9TeXNFeGNlcHRSZXBvSUQgQkFEX09QRVJBVElPTjsKICAg
IHN0YXRpYyBjb25zdCBfU3lzRXhjZXB0UmVwb0lEIE5PX1JFU09VUkNFUzsKICAgIHN0YXRpYyBj
b25zdCBfU3lzRXhjZXB0UmVwb0lEIE5PX1JFU1BPTlNFOwogICAgc3RhdGljIGNvbnN0IF9TeXNF
eGNlcHRSZXBvSUQgUEVSU0lTVF9TVE9SRTsKICAgIHN0YXRpYyBjb25zdCBfU3lzRXhjZXB0UmVw
b0lEIEJBRF9JTlZfT1JERVI7CiAgICBzdGF0aWMgY29uc3QgX1N5c0V4Y2VwdFJlcG9JRCBUUkFO
U0lFTlQ7CiAgICBzdGF0aWMgY29uc3QgX1N5c0V4Y2VwdFJlcG9JRCBGUkVFX01FTTsKICAgIHN0
YXRpYyBjb25zdCBfU3lzRXhjZXB0UmVwb0lEIElOVl9JREVOVDsKICAgIHN0YXRpYyBjb25zdCBf
U3lzRXhjZXB0UmVwb0lEIElOVl9GTEFHOwogICAgc3RhdGljIGNvbnN0IF9TeXNFeGNlcHRSZXBv
SUQgSU5URl9SRVBPUzsKICAgIHN0YXRpYyBjb25zdCBfU3lzRXhjZXB0UmVwb0lEIEJBRF9DT05U
RVhUOwogICAgc3RhdGljIGNvbnN0IF9TeXNFeGNlcHRSZXBvSUQgT0JKX0FEQVBURVI7CiAgICBz
dGF0aWMgY29uc3QgX1N5c0V4Y2VwdFJlcG9JRCBEQVRBX0NPTlZFUlNJT047CiAgICBzdGF0aWMg
Y29uc3QgX1N5c0V4Y2VwdFJlcG9JRCBUUkFOU0FDVElPTl9SRVFVSVJFRDsKICAgIHN0YXRpYyBj
b25zdCBfU3lzRXhjZXB0UmVwb0lEIFRSQU5TQUNUSU9OX1JPTExFREJBQ0s7CiAgICBzdGF0aWMg
Y29uc3QgX1N5c0V4Y2VwdFJlcG9JRCBJTlZBTElEX1RSQU5TQUNUSU9OOwogICAgc3RhdGljIGNv
bnN0IF9TeXNFeGNlcHRSZXBvSUQgV1JPTkdfVFJBTlNBQ1RJT047CiAgICBzdGF0aWMgY29uc3Qg
X0NPUkJBX1VMb25nIG1heElETGVuOwogICAgc3RhdGljIGNvbnN0IF9DT1JCQV9DaGFyICp2ZXJz
aW9uOwogICAgc3RhdGljIGNvbnN0IF9DT1JCQV9VTG9uZyB2ZXJzaW9uTGVuOwoKICB9OwogIHN0
YXRpYyBzaXplX3QgbWF4X2dpb3BfbWVzc2FnZV9zaXplOwp9OwoKCmNsYXNzIEdJT1BfQyA6IHB1
YmxpYyBHSU9QX0Jhc2V0eXBlcywgcHVibGljIE5ldEJ1ZmZlcmVkU3RyZWFtIHsKcHVibGljOgoK
ICBHSU9QX0MoUm9wZSAqcik7CiAgfkdJT1BfQygpOwoKICBlbnVtIFN0YXRlIHsgSWRsZSwKICAg
ICAgICAgICAgICAgUmVxdWVzdEluUHJvZ3Jlc3MsCiAgICAgICAgICAgICAgIFdhaXRpbmdGb3JS
ZXBseSwKICAgICAgICAgICAgICAgUmVwbHlJc0JlaW5nUHJvY2Vzc2VkLAogICAgICAgICAgICAg
ICBab21iaWUKICB9OwojIDIyMSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9naW9wRHJp
dmVyLmgiCiAgdm9pZCBJbml0aWFsaXNlUmVxdWVzdChjb25zdCB2b2lkKiBvYmprZXksCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgb2Jqa2V5c2l6ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG9wbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHNpemVfdCBvcG5hbWVzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c2l6ZV90IG1zZ3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ09SQkFfQm9v
bGVhbiBvbmV3YXkpOwoKCgoKCiAgR0lPUDo6UmVwbHlTdGF0dXNUeXBlIFJlY2VpdmVSZXBseSgp
OwoKICB2b2lkIFJlcXVlc3RDb21wbGV0ZWQoX0NPUkJBX0Jvb2xlYW4gc2tpcD0wKTsKCiAgR0lP
UDo6TG9jYXRlU3RhdHVzVHlwZSBJc3N1ZUxvY2F0ZVJlcXVlc3QoY29uc3Qgdm9pZCAqb2Jqa2V5
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVf
dCBvYmprZXlzaXplKTsKCiAgc3RhdGljIHNpemVfdCBSZXF1ZXN0SGVhZGVyU2l6ZShjb25zdCBz
aXplX3Qgb2Jqa2V5c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHNpemVfdCBvcG5hbWVzaXplKTsKCgoKICBzaXplX3QgTWF4TWVzc2FnZVNpemUoKSBjb25zdCB7
IHJldHVybiBwZF9tYXhfbWVzc2FnZV9zaXplOyB9CiMgMjU2ICIuLi8uLi8uLi8uLi9pbmNsdWRl
L29tbmlPUkIzL2dpb3BEcml2ZXIuaCIKcHJpdmF0ZToKICBTdGF0ZSBwZF9zdGF0ZTsKICBfQ09S
QkFfVUxvbmcgcGRfcmVxdWVzdF9pZDsKICBfQ09SQkFfQm9vbGVhbiBwZF9yZXNwb25zZV9leHBl
Y3RlZDsKICBzaXplX3QgcGRfbWF4X21lc3NhZ2Vfc2l6ZTsKCiAgdm9pZCBVbk1hcnNoYWxsU3lz
dGVtRXhjZXB0aW9uKCk7Cgp9OwoKCmNsYXNzIEdJT1BfUyA6IHB1YmxpYyBHSU9QX0Jhc2V0eXBl
cywgcHVibGljIE5ldEJ1ZmZlcmVkU3RyZWFtIHsKcHVibGljOgoKICBzdGF0aWMgdm9pZCBkaXNw
YXRjaGVyKFN0cmFuZCAqcyk7CiMgMjg4ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL2dp
b3BEcml2ZXIuaCIKICBHSU9QX1MoU3RyYW5kICpzKTsKICB+R0lPUF9TKCk7CgogIGVudW0gU3Rh
dGUgeyBJZGxlLAogICAgICAgICAgICAgICBSZXF1ZXN0SXNCZWluZ1Byb2Nlc3NlZCwKICAgICAg
ICAgICAgICAgV2FpdGluZ0ZvclJlcGx5LAogICAgICAgICAgICAgICBSZXBseUlzQmVpbmdDb21w
b3NlZCwKICAgICAgICAgICAgICAgWm9tYmllCiAgfTsKIyAzNjUgIi4uLy4uLy4uLy4uL2luY2x1
ZGUvb21uaU9SQjMvZ2lvcERyaXZlci5oIgogIHZvaWQgUmVxdWVzdFJlY2VpdmVkKF9DT1JCQV9C
b29sZWFuIHNraXA9MCk7CgogIHZvaWQgSW5pdGlhbGlzZVJlcGx5KGNvbnN0IEdJT1A6OlJlcGx5
U3RhdHVzVHlwZSBzdGF0dXMsIHNpemVfdCBtc2dzaXplKTsKCgoKCiAgdm9pZCBSZXBseUNvbXBs
ZXRlZCgpOwoKICBzdGF0aWMgc2l6ZV90IFJlcGx5SGVhZGVyU2l6ZSgpOwoKCgogIGlubGluZSBz
aXplX3QgTWF4TWVzc2FnZVNpemUoKSBjb25zdCB7IHJldHVybiBwZF9tYXhfbWVzc2FnZV9zaXpl
OyB9CiMgMzkwICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL2dpb3BEcml2ZXIuaCIKICBp
bmxpbmUgY29uc3QgX0NPUkJBX09jdGV0KiBrZXkoKSBjb25zdCB7IHJldHVybiBwZF9rZXkua2V5
KCk7IH0KICBpbmxpbmUgaW50IGtleXNpemUoKSBjb25zdCB7IHJldHVybiBwZF9rZXkuc2l6ZSgp
OyB9CiAgaW5saW5lIGNvbnN0IGNoYXIqIG9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIChjb25z
dCBjaGFyKikgcGRfb3BlcmF0aW9uOyB9CiAgaW5saW5lIF9DT1JCQV9Cb29sZWFuIHJlc3BvbnNl
X2V4cGVjdGVkKCkgY29uc3QgewogICAgcmV0dXJuIHBkX3Jlc3BvbnNlX2V4cGVjdGVkOwogIH0K
ICBpbmxpbmUgdm9pZCBzZXRfdXNlcl9leGNlcHRpb25zKGNvbnN0IGNoYXIqY29uc3QqIHVlcywg
aW50IG4pIHsKICAgIHBkX3VzZXJfZXhucyA9IHVlczsgcGRfbl91c2VyX2V4bnMgPSBuOwogIH0K
CgogIHZvaWQgU2VuZE1zZ0Vycm9yTWVzc2FnZSgpOwoKICBjbGFzcyB0ZXJtaW5hdGVQcm9jZXNz
aW5nIHsKICBwdWJsaWM6CgoKICAgIGlubGluZSB0ZXJtaW5hdGVQcm9jZXNzaW5nKCkge30KICAg
IGlubGluZSB+dGVybWluYXRlUHJvY2Vzc2luZygpIHt9CiAgfTsKCnByaXZhdGU6CiAgU3RhdGUg
cGRfc3RhdGU7CiAgX0NPUkJBX1VMb25nIHBkX3JlcXVlc3RfaWQ7CiAgX0NPUkJBX0Jvb2xlYW4g
cGRfcmVzcG9uc2VfZXhwZWN0ZWQ7CiAgc2l6ZV90IHBkX21heF9tZXNzYWdlX3NpemU7CgoKCiAg
X0NPUkJBX09jdGV0KiBwZF9vcGVyYXRpb247CiAgX0NPUkJBX09jdGV0IHBkX29wX2J1ZmZlclsz
Ml07CiAgX0NPUkJBX09jdGV0KiBwZF9wcmluY2lwYWw7CiAgX0NPUkJBX09jdGV0IHBkX3ByX2J1
ZmZlclszMl07CgogIG9tbmlPYmpLZXkgcGRfa2V5OwoKCgogIGNvbnN0IGNoYXIqY29uc3QqIHBk
X3VzZXJfZXhuczsKICBpbnQgcGRfbl91c2VyX2V4bnM7CgoKCiAgdm9pZCBIYW5kbGVSZXF1ZXN0
KF9DT1JCQV9Cb29sZWFuIGJ5dGVvcmRlcik7CiAgdm9pZCBIYW5kbGVMb2NhdGVSZXF1ZXN0KF9D
T1JCQV9Cb29sZWFuIGJ5dGVvcmRlcik7CiAgdm9pZCBIYW5kbGVDYW5jZWxSZXF1ZXN0KF9DT1JC
QV9Cb29sZWFuIGJ5dGVvcmRlcik7CiAgdm9pZCBIYW5kbGVNZXNzYWdlRXJyb3IoKTsKICB2b2lk
IEhhbmRsZUNsb3NlQ29ubmVjdGlvbigpOwoKICB2b2lkIE1heWJlTWFyc2hhbFVzZXJFeGNlcHRp
b24odm9pZCopOwoKCn07CiMgNDA5ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL29tbmlJ
bnRlcm5hbC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9vbW5pT2JqUmVm
LmgiIDEKIyA1MiAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9vbW5pT2JqUmVmLmgiCmNs
YXNzIG9tbmk7CmNsYXNzIG9tbmlJbnRlcm5hbDsKY2xhc3Mgb21uaU9iaktleTsKY2xhc3Mgb21u
aUlkZW50aXR5OwpjbGFzcyBvbW5pTG9jYWxJZGVudGl0eTsKY2xhc3Mgb21uaVJlbW90ZUlkZW50
aXR5OwpjbGFzcyBvbW5pQ2FsbERlc2NyaXB0b3I7CmNsYXNzIG9tbmlTZXJ2YW50OwoKCmNsYXNz
IG9tbmlPYmpSZWYgewpwdWJsaWM6CiAgdmlydHVhbCB2b2lkKiBfcHRyVG9PYmpSZWYoY29uc3Qg
Y2hhciogcmVwb0lkKSA9IDA7CiMgNzcgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvb21u
aU9ialJlZi5oIgogIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gX2NvbXBhdGlibGVTZXJ2YW50KG9t
bmlTZXJ2YW50KiBzdm50KTsKCgoKCgoKICBpbnQgX2dldFJvcGVBbmRLZXkob21uaVJvcGVBbmRL
ZXkmIHJhaywgX0NPUkJBX0Jvb2xlYW4qIGlzX2xvY2FsPTApIGNvbnN0OwoKCgoKCgogIHZvaWQg
X2dldFRoZUtleShvbW5pT2JqS2V5JiBrZXksIGludCBsb2NrZWQ9MCkgY29uc3Q7CgoKCiAgaW5s
aW5lIGNvbnN0IGNoYXIqIF9tb3N0RGVyaXZlZFJlcG9JZCgpIGNvbnN0IHsKICAgIHJldHVybiBw
ZF9tb3N0RGVyaXZlZFJlcG9JZDsKICB9CgoKCgogIGlubGluZSBJT1A6OlRhZ2dlZFByb2ZpbGVM
aXN0KiBfaW9wUHJvZmlsZXMoKSBjb25zdCB7CiAgICByZXR1cm4gcGRfaW9wcHJvZmlsZXM7CiAg
fQoKCgoKCiAgX0NPUkJBX0Jvb2xlYW4gX3JlYWxfaXNfYShjb25zdCBjaGFyKiByZXBvSWQpOwoK
CgoKCgoKICB2b2lkKiBfcmVhbE5hcnJvdyhjb25zdCBjaGFyKiByZXBvSWQpOwojIDEyOSAiLi4v
Li4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9vbW5pT2JqUmVmLmgiCiAgdm9pZCBfYXNzZXJ0RXhp
c3RzQW5kVHlwZVZlcmlmaWVkKCk7CgoKCgoKCiAgX0NPUkJBX0Jvb2xlYW4gX3JlbW90ZV9pc19h
KGNvbnN0IGNoYXIqIHJlcG9JZCk7CgoKCgoKCiAgX0NPUkJBX0Jvb2xlYW4gX3JlbW90ZV9ub25f
ZXhpc3RlbnQoKTsKCgoKCgoKICB2b2lkKiBfdHJhbnNpZW50RXhjZXB0aW9uSGFuZGxlcih2b2lk
KiYgY29va2llKTsKCgoKCgoKICB2b2lkIF90cmFuc2llbnRFeGNlcHRpb25IYW5kbGVyKHZvaWQq
IG5ld19oYW5kbGVyLCB2b2lkKiBjb29raWUpOwojIDE2NiAiLi4vLi4vLi4vLi4vaW5jbHVkZS9v
bW5pT1JCMy9vbW5pT2JqUmVmLmgiCiAgdm9pZCogX2NvbW1GYWlsdXJlRXhjZXB0aW9uSGFuZGxl
cih2b2lkKiYgY29va2llKTsKCgoKCgoKICB2b2lkIF9jb21tRmFpbHVyZUV4Y2VwdGlvbkhhbmRs
ZXIodm9pZCogbmV3X2hhbmRsZXIsIHZvaWQqIGNvb2tpZSk7CiMgMTgyICIuLi8uLi8uLi8uLi9p
bmNsdWRlL29tbmlPUkIzL29tbmlPYmpSZWYuaCIKICB2b2lkKiBfc3lzdGVtRXhjZXB0aW9uSGFu
ZGxlcih2b2lkKiYgY29va2llKTsKCgoKCgoKICB2b2lkIF9zeXN0ZW1FeGNlcHRpb25IYW5kbGVy
KHZvaWQqIG5ld19oYW5kbGVyLCB2b2lkKiBjb29raWUpOwojIDIwMCAiLi4vLi4vLi4vLi4vaW5j
bHVkZS9vbW5pT1JCMy9vbW5pT2JqUmVmLmgiCiAgaW5saW5lIG9tbmlPYmpSZWYqKiBfYWRkck9m
TG9jYWxSZWZMaXN0KCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICAgIHJldHVybiAmcGRfbmV4dEluTG9jYWxSZWZMaXN0OwogIH0K
ICBpbmxpbmUgb21uaU9ialJlZiogX25leHRJbkxvY2FsUmVmTGlzdCgpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICByZXR1cm4g
cGRfbmV4dEluTG9jYWxSZWZMaXN0OwogIH0KCgoKICBpbmxpbmUgb21uaUlkZW50aXR5KiBfaWRl
bnRpdHkoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogICAgcmV0dXJuIHBkX2lkOwogIH0KCgogIGlubGluZSBvbW5pTG9jYWxJZGVu
dGl0eSogX2xvY2FsSWQoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgcmV0dXJuIHBkX2xvY2FsSWQ7CiAgfQoKCiAgaW5saW5l
IGludCBfaXNGb3J3YXJkTG9jYXRpb24oKSBjb25zdCB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgcmV0dXJuIHBkX2ZsYWdzLmZv
cndhcmRfbG9jYXRpb247CiAgfQoKCiAgaW5saW5lIF9DT1JCQV9Cb29sZWFuIF9pc19uaWwoKSB7
IHJldHVybiAhcGRfaWQ7IH0KCgogIGlubGluZSB2b2lkIF9ub0V4aXN0ZW50Q2hlY2soKSB7CiAg
ICBwZF9mbGFncy50eXBlX3ZlcmlmaWVkID0gMTsKICAgIHBkX2ZsYWdzLm9iamVjdF9leGlzdHMg
PSAxOwogIH0KCgoKCgogIHZvaWQgX2ludm9rZShvbW5pQ2FsbERlc2NyaXB0b3ImLCBfQ09SQkFf
Qm9vbGVhbiBkb19hc3NlcnQ9MSk7CgoKCgoKcHJvdGVjdGVkOgogIHZpcnR1YWwgfm9tbmlPYmpS
ZWYoKTsKCgogIG9tbmlPYmpSZWYoKTsKCgoKCiAgb21uaU9ialJlZihjb25zdCBjaGFyKiBpbnRm
UmVwb0lkLCBjb25zdCBjaGFyKiBtb3N0RGVyaXZlZElkLAogICAgICAgICAgICAgSU9QOjpUYWdn
ZWRQcm9maWxlTGlzdCogcHJvZmlsZXMsCiAgICAgICAgICAgICBvbW5pSWRlbnRpdHkqIGlkLCBv
bW5pTG9jYWxJZGVudGl0eSogbGlkKTsKCgogIHZvaWQgX2xvY2F0ZVJlcXVlc3QoKTsKCgoKCgpw
cml2YXRlOgogIG9tbmlPYmpSZWYoY29uc3Qgb21uaU9ialJlZiYpOwogIG9tbmlPYmpSZWYmIG9w
ZXJhdG9yID0gKGNvbnN0IG9tbmlPYmpSZWYmKTsKCgoKCgoKICBmcmllbmQgY2xhc3Mgb21uaTsK
ICBmcmllbmQgY2xhc3Mgb21uaUludGVybmFsOwogIGZyaWVuZCBjbGFzcyBvbW5pUHk7CgogIGlu
bGluZSB2b2lkIF9zZXRJZGVudGl0eShvbW5pSWRlbnRpdHkqIGlkLCBvbW5pTG9jYWxJZGVudGl0
eSogbGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogICAgcGRfaWQgPSBpZDsKICAgIHBkX2xvY2FsSWQgPSBsaWQ7CiAgfQoKCgoK
CgoKICBpbnQgcGRfcmVmQ291bnQ7CgoKICBjaGFyKiBwZF9tb3N0RGVyaXZlZFJlcG9JZDsKIyAz
MDQgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvb21uaU9ialJlZi5oIgogIGNoYXIqIHBk
X2ludGZSZXBvSWQ7CiMgMzE1ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL29tbmlPYmpS
ZWYuaCIKICBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0KiBwZF9pb3Bwcm9maWxlczsKCgogIG9tbmlJ
ZGVudGl0eSogcGRfaWQ7CgoKCgoKICBvbW5pTG9jYWxJZGVudGl0eSogcGRfbG9jYWxJZDsKCgoK
CgogIHN0cnVjdCB7CiAgICB1bnNpZ25lZCBmb3J3YXJkX2xvY2F0aW9uIDogMTsKCgoKCiAgICB1
bnNpZ25lZCB0eXBlX3ZlcmlmaWVkIDogMTsKCgoKCgogICAgdW5zaWduZWQgb2JqZWN0X2V4aXN0
cyA6IDE7CgoKCgoKICAgIHVuc2lnbmVkIHRyYW5zaWVudF9leGNlcHRpb25faGFuZGxlciA6IDE7
CiAgICB1bnNpZ25lZCBjb21tZmFpbF9leGNlcHRpb25faGFuZGxlciA6IDE7CiAgICB1bnNpZ25l
ZCBzeXN0ZW1fZXhjZXB0aW9uX2hhbmRsZXIgOiAxOwoKCgogIH0gcGRfZmxhZ3M7CgoKICBvbW5p
T2JqUmVmKiBwZF9uZXh0SW5Mb2NhbFJlZkxpc3Q7CgoKfTsKIyA0MTAgIi4uLy4uLy4uLy4uL2lu
Y2x1ZGUvb21uaU9SQjMvb21uaUludGVybmFsLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9pbmNsdWRl
L29tbmlPUkIzL3Byb3h5RmFjdG9yeS5oIiAxCiMgNTEgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21u
aU9SQjMvcHJveHlGYWN0b3J5LmgiCmNsYXNzIG9tbmlMb2NhbElkZW50aXR5OwpjbGFzcyBvbW5p
T2JqUmVmOwoKCmNsYXNzIHByb3h5T2JqZWN0RmFjdG9yeSB7CnB1YmxpYzoKICB2aXJ0dWFsIH5w
cm94eU9iamVjdEZhY3RvcnkoKTsKICBwcm94eU9iamVjdEZhY3RvcnkoY29uc3QgY2hhciogcmVw
b0lkKTsKCgoKCgogIHN0YXRpYyB2b2lkIHNodXRkb3duKCk7CgoKCiAgc3RhdGljIHByb3h5T2Jq
ZWN0RmFjdG9yeSogbG9va3VwKGNvbnN0IGNoYXIqIHJlcG9JZCk7CgogIGlubGluZSBjb25zdCBj
aGFyKiBpclJlcG9JZCgpIGNvbnN0IHsgcmV0dXJuIHBkX3JlcG9JZDsgfQoKCgogIHZpcnR1YWwg
b21uaU9ialJlZiogbmV3T2JqUmVmKGNvbnN0IGNoYXIqIG1vc3REZXJpdmVkVHlwZUlkLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPUDo6VGFnZ2VkUHJvZmlsZUxpc3QqIHByb2Zp
bGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9tbmlJZGVudGl0eSogaWQsIG9t
bmlMb2NhbElkZW50aXR5KiBsaWQpID0gMDsKCgogIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gaXNf
YShjb25zdCBjaGFyKiBiYXNlX3JlcG9JZCkgY29uc3QgPSAwOwoKCgoKcHJpdmF0ZToKICBjb25z
dCBjaGFyKiBwZF9yZXBvSWQ7Cn07CiMgNDExICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIz
L29tbmlJbnRlcm5hbC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9vbW5p
U2VydmFudC5oIiAxCiMgNDQgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvb21uaVNlcnZh
bnQuaCIKY2xhc3Mgb21uaU9ialJlZjsKY2xhc3Mgb21uaUlkZW50aXR5OwoKCgoKCmNsYXNzIG9t
bmlTZXJ2YW50IHsKcHJvdGVjdGVkOgogIGlubGluZSBvbW5pU2VydmFudCgpIDogcGRfaWRlbnRp
dGllcygwKSB7fQogIGlubGluZSBvbW5pU2VydmFudChjb25zdCBvbW5pU2VydmFudCYpIDogcGRf
aWRlbnRpdGllcygwKSB7fQogIGlubGluZSBvbW5pU2VydmFudCYgb3BlcmF0b3IgPSAoY29uc3Qg
b21uaVNlcnZhbnQmKSB7IHJldHVybiAqdGhpczsgfQoKcHVibGljOgogIHZpcnR1YWwgfm9tbmlT
ZXJ2YW50KCk7CgogIHZpcnR1YWwgdm9pZCogX3B0clRvSW50ZXJmYWNlKGNvbnN0IGNoYXIqIHJl
cG9JZCk7CiMgNzQgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvb21uaVNlcnZhbnQuaCIK
ICB2aXJ0dWFsIHZvaWQqIF9kb3duY2FzdCgpOwoKCgoKCgoKICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IF9tb3N0RGVyaXZlZFJlcG9JZCgpOwojIDkxICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIz
L29tbmlTZXJ2YW50LmgiCiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBfaXNfYShjb25zdCBjaGFy
KiBsb2dpY2FsX3R5cGVfaWQpOwoKCgoKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIF9ub25fZXhp
c3RlbnQoKTsKCgoKICB2aXJ0dWFsIG9tbmlPYmpSZWYqIF9kb19nZXRfaW50ZXJmYWNlKCkgPSAw
OwoKCgoKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIF9kaXNwYXRjaChHSU9QX1MmKTsKIyAxMjAg
Ii4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvb21uaVNlcnZhbnQuaCIKICB2b2lkIF9hZGRJ
ZGVudGl0eShvbW5pTG9jYWxJZGVudGl0eSopOwoKCgogIHZvaWQgX3JlbW92ZUlkZW50aXR5KG9t
bmlMb2NhbElkZW50aXR5Kik7CgoKCiAgaW5saW5lIG9tbmlMb2NhbElkZW50aXR5KiBfaWRlbnRp
dGllcygpIGNvbnN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICByZXR1cm4gcGRfaWRlbnRpdGllczsKICB9CgoKCnByaXZhdGU6
CiAgb21uaUxvY2FsSWRlbnRpdHkqIHBkX2lkZW50aXRpZXM7CgoKCgoKfTsKIyA0MTIgIi4uLy4u
Ly4uLy4uL2luY2x1ZGUvb21uaU9SQjMvb21uaUludGVybmFsLmgiIDIKCgoKdGVtcGxhdGUgPGNs
YXNzIFQ+CmNsYXNzIF9DT1JCQV9Db25zdHJUeXBlX1ZhcmlhYmxlX1ZhcjsKIyAyNTYgIi4uLy4u
Ly4uLy4uL2luY2x1ZGUvb21uaU9SQjMvQ09SQkEuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2luY2x1
ZGUvb21uaU9SQjMvdGVtcGxhdGVkZWNscy5oIiAxCiMgMzcgIi4uLy4uLy4uLy4uL2luY2x1ZGUv
b21uaU9SQjMvdGVtcGxhdGVkZWNscy5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+
IGNsYXNzIF9DT1JCQV9Qc2V1ZG9PYmpfTWVtYmVyOwp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mg
VF92YXI+IGNsYXNzIF9DT1JCQV9Qc2V1ZG9PYmpfT3V0OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNs
YXNzIF9DT1JCQV9Qc2V1ZG9PYmpfVmFyIHsKcHVibGljOgogIHR5cGVkZWYgVCogVF9wdHI7CiAg
dHlwZWRlZiBfQ09SQkFfUHNldWRvT2JqX1ZhcjxUPiBUX3ZhcjsKICB0eXBlZGVmIF9DT1JCQV9Q
c2V1ZG9PYmpfTWVtYmVyPFQsVF92YXI+IFRfbWVtYmVyOwoKICBpbmxpbmUgX0NPUkJBX1BzZXVk
b09ial9WYXIoKTsKICBpbmxpbmUgX0NPUkJBX1BzZXVkb09ial9WYXIoVF9wdHIgcCkgOiBwZF9k
YXRhKHApIHt9CiAgaW5saW5lIF9DT1JCQV9Qc2V1ZG9PYmpfVmFyKGNvbnN0IFRfdmFyJiB2KTsK
ICBpbmxpbmUgX0NPUkJBX1BzZXVkb09ial9WYXIoY29uc3QgVF9tZW1iZXImIG0pOwoKICBpbmxp
bmUgfl9DT1JCQV9Qc2V1ZG9PYmpfVmFyKCk7CgogIGlubGluZSBUX3ZhciYgb3BlcmF0b3I9KFRf
cHRyIHApOwogIGlubGluZSBUX3ZhciYgb3BlcmF0b3I9KGNvbnN0IFRfdmFyJiB2KTsKICBpbmxp
bmUgVF92YXImIG9wZXJhdG9yPShjb25zdCBUX21lbWJlciYgdik7CgogIGlubGluZSBUX3B0ciBv
cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gcGRfZGF0YTsgfQogIGlubGluZSBvcGVyYXRvciBU
X3B0ciAoKSBjb25zdCB7IHJldHVybiBwZF9kYXRhOyB9CgogIGlubGluZSBUKiBpbigpIGNvbnN0
IHsgcmV0dXJuIHBkX2RhdGE7IH0KICBpbmxpbmUgVF9wdHImIGlub3V0KCkgeyByZXR1cm4gcGRf
ZGF0YTsgfQogIGlubGluZSBUX3B0ciYgb3V0KCk7CiAgaW5saW5lIFRfcHRyIF9yZXRuKCk7Cgog
IGZyaWVuZCBjbGFzcyBfQ09SQkFfUHNldWRvT2JqX091dDxULCBfQ09SQkFfUHNldWRvT2JqX1Zh
cjxUPiA+OwogIGZyaWVuZCBjbGFzcyBfQ09SQkFfUHNldWRvT2JqX01lbWJlcjxULCBfQ09SQkFf
UHNldWRvT2JqX1ZhcjxUPiA+OwoKcHJvdGVjdGVkOgogIFRfcHRyIHBkX2RhdGE7Cn07CgoKCgoK
dGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPgpjbGFzcyBfQ09SQkFfUHNldWRvT2JqX01l
bWJlciB7CnB1YmxpYzoKICB0eXBlZGVmIFQqIFRfcHRyOwogIHR5cGVkZWYgX0NPUkJBX1BzZXVk
b09ial9NZW1iZXI8VCxUX3Zhcj4gVF9tZW1iZXI7CgogIGlubGluZSBfQ09SQkFfUHNldWRvT2Jq
X01lbWJlcigpOwogIGlubGluZSBfQ09SQkFfUHNldWRvT2JqX01lbWJlcihUX3B0ciBwKSA6IF9w
dHIocCkge30KICBpbmxpbmUgX0NPUkJBX1BzZXVkb09ial9NZW1iZXIoY29uc3QgVF9tZW1iZXIm
IHApOwogIGlubGluZSB+X0NPUkJBX1BzZXVkb09ial9NZW1iZXIoKTsKCiAgaW5saW5lIFRfbWVt
YmVyJiBvcGVyYXRvcj0oVF9wdHIgcCk7CiAgaW5saW5lIFRfbWVtYmVyJiBvcGVyYXRvcj0oY29u
c3QgVF9tZW1iZXImIHApOwogIGlubGluZSBUX21lbWJlciYgb3BlcmF0b3I9KGNvbnN0IFRfdmFy
JiBwKTsKCiAgaW5saW5lIFRfcHRyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBfcHRyOyB9
CiAgaW5saW5lIG9wZXJhdG9yIFRfcHRyICgpIGNvbnN0IHsgcmV0dXJuIF9wdHI7IH0KCiAgVF9w
dHIgX3B0cjsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIGNsYXNzIFRf
bWJyPgpjbGFzcyBfQ09SQkFfUHNldWRvT2JqX0luT3V0IHsKcHVibGljOgogIGlubGluZSBfQ09S
QkFfUHNldWRvT2JqX0luT3V0KFQqIHApIDogX2RhdGEocCkge30KICBpbmxpbmUgX0NPUkJBX1Bz
ZXVkb09ial9Jbk91dChUX3ZhciYgdikgOiBfZGF0YSh2KSB7fQogIGlubGluZSBfQ09SQkFfUHNl
dWRvT2JqX0luT3V0KFRfbWJyJiBtKSA6IF9kYXRhKG0uX3B0cikge30KCiAgVCogX2RhdGE7Cgpw
cml2YXRlOgogIF9DT1JCQV9Qc2V1ZG9PYmpfSW5PdXQoKTsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgVCwgY2xhc3MgVF92YXI+CmNsYXNzIF9DT1JCQV9Qc2V1ZG9PYmpfT3V0IHsKcHVibGljOgog
IGlubGluZSBfQ09SQkFfUHNldWRvT2JqX091dChUKiYgcCkgOiBfZGF0YShwKSB7fQogIGlubGlu
ZSBfQ09SQkFfUHNldWRvT2JqX091dChUX3ZhciYgcCk7CgogIGlubGluZSBfQ09SQkFfUHNldWRv
T2JqX091dDxULFRfdmFyPiYgb3BlcmF0b3I9KFQqIHApIHsKICAgIF9kYXRhID0gcDsKICAgIHJl
dHVybiAqdGhpczsKICB9CgogIFQqJiBfZGF0YTsKCnByaXZhdGU6CiAgX0NPUkJBX1BzZXVkb09i
al9PdXQoKTsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRWxlbVQ+CmNsYXNzIF9D
T1JCQV9Qc2V1ZG9fVW5ib3VuZGVkX1NlcXVlbmNlIHsKcHVibGljOgogIHR5cGVkZWYgX0NPUkJB
X1BzZXVkb19VbmJvdW5kZWRfU2VxdWVuY2U8VCxFbGVtVD4gVF9zZXE7CgogIGlubGluZSBfQ09S
QkFfUHNldWRvX1VuYm91bmRlZF9TZXF1ZW5jZSgpCiAgICA6IHBkX21heCgwKSwgcGRfbGVuKDAp
LCBwZF9yZWwoMSksIHBkX2J1ZigwKSB7IH0KICBpbmxpbmUgX0NPUkJBX1BzZXVkb19VbmJvdW5k
ZWRfU2VxdWVuY2UoX0NPUkJBX1VMb25nIG1heCkKICAgIDogcGRfbWF4KG1heCksIHBkX2xlbigw
KSwgcGRfcmVsKDEpCiAgewogICAgaWYoICEocGRfYnVmID0gbmV3IEVsZW1UW21heF0pICkKICAg
ICAgX0NPUkJBX25ld19vcGVyYXRvcl9yZXR1cm5fbnVsbCgpOwogIH0KCiAgaW5saW5lIF9DT1JC
QV9Qc2V1ZG9fVW5ib3VuZGVkX1NlcXVlbmNlKF9DT1JCQV9VTG9uZyBtYXgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9VTG9uZyBsZW5ndGgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQqKiB2YWx1ZSwgX0NPUkJBX0Jv
b2xlYW4gcmVsZWFzZSA9IDApCiAgICA6IHBkX21heChtYXgpLCBwZF9sZW4obGVuZ3RoKQogIHsK
ICAgIGlmKCBsZW5ndGggPiBtYXggKSBfQ09SQkFfYm91bmRfY2hlY2tfZXJyb3IoKTsKICAgIHBk
X2J1ZiA9IG5ldyBFbGVtVFtsZW5ndGhdOwogICAgaWYoIHJlbGVhc2UgKSB7CiAgICAgIGZvcigg
X0NPUkJBX1VMb25nIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysgKSBwZF9idWZbaV0gPSB2YWx1ZVtp
XTsKICAgICAgZGVsZXRlW10gdmFsdWU7CiAgICB9CiAgICBlbHNlIHsKICAgICAgZm9yKCBfQ09S
QkFfVUxvbmcgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyApCiAgICAgICAgcGRfYnVmW2ldID0gdmFs
dWVbaV07CiAgICB9CiAgfQoKICBpbmxpbmUgX0NPUkJBX1BzZXVkb19VbmJvdW5kZWRfU2VxdWVu
Y2UoY29uc3QgVF9zZXEmIHMpCiAgICA6IHBkX21heChzLnBkX21heCksIHBkX2xlbihzLnBkX2xl
biksIHBkX3JlbCgxKQogIHsKICAgIGlmKCAhKHBkX2J1ZiA9IG5ldyBFbGVtVFtzLnBkX21heF0p
ICkKICAgICAgX0NPUkJBX25ld19vcGVyYXRvcl9yZXR1cm5fbnVsbCgpOwogICAgZm9yKCBfQ09S
QkFfVUxvbmcgaT0wOyBpIDwgcy5wZF9sZW47IGkrKyApIHsKICAgICAgcGRfYnVmW2ldID0gcy5w
ZF9idWZbaV07CiAgICB9CiAgfQoKICBpbmxpbmUgfl9DT1JCQV9Qc2V1ZG9fVW5ib3VuZGVkX1Nl
cXVlbmNlKCkgewogICAgaWYoIHBkX3JlbCAmJiBwZF9idWYgKSBkZWxldGVbXSBwZF9idWY7CiAg
fQoKICBpbmxpbmUgVF9zZXEmIG9wZXJhdG9yPSAoY29uc3QgVF9zZXEmIHMpIHsKICAgIGlmKCAm
cyA9PSB0aGlzICkgcmV0dXJuICp0aGlzOwogICAgaWYoIHBkX21heCA8IHMucGRfbWF4ICkgewog
ICAgICBFbGVtVCogbmV3YnVmID0gbmV3IEVsZW1UW3MucGRfbWF4XTsKICAgICAgaWYoICFuZXdi
dWYgKSBfQ09SQkFfbmV3X29wZXJhdG9yX3JldHVybl9udWxsKCk7CiAgICAgIHBkX21heCA9IHMu
cGRfbWF4OwogICAgICBpZiggcGRfcmVsICYmIHBkX2J1ZiApIGRlbGV0ZVtdIHBkX2J1ZjsKICAg
ICAgZWxzZSBwZF9yZWwgPSAxOwogICAgICBwZF9idWYgPSBuZXdidWY7CiAgICB9CiAgICBwZF9s
ZW4gPSBzLnBkX2xlbjsKICAgIGZvciggdW5zaWduZWQgbG9uZyBpPTA7IGkgPCBwZF9sZW47IGkr
KyApIHBkX2J1ZltpXSA9IHMucGRfYnVmW2ldOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5s
aW5lIF9DT1JCQV9VTG9uZyBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gcGRfbWF4OyB9CiAgaW5s
aW5lIF9DT1JCQV9VTG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBwZF9sZW47IH0KICBpbmxp
bmUgdm9pZCBsZW5ndGgoX0NPUkJBX1VMb25nIGxlbmd0aCkgewogICAgaWYgKGxlbmd0aCA+IHBk
X21heCkgewogICAgICBFbGVtVCogbmV3YnVmID0gbmV3IEVsZW1UW2xlbmd0aF07CiAgICAgIGlm
KCAhbmV3YnVmICkgX0NPUkJBX25ld19vcGVyYXRvcl9yZXR1cm5fbnVsbCgpOwogICAgICBmb3Io
IHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBwZF9sZW47IGkrKyApCiAgICAgICAgbmV3YnVmW2ld
ID0gcGRfYnVmW2ldOwogICAgICBwZF9tYXggPSBsZW5ndGg7CiAgICAgIGlmKCBwZF9yZWwgJiYg
cGRfYnVmICkgZGVsZXRlW10gcGRfYnVmOwogICAgICBlbHNlIHBkX3JlbCA9IDE7CiAgICAgIHBk
X2J1ZiA9IG5ld2J1ZjsKICAgIH0KICAgIHBkX2xlbiA9IGxlbmd0aDsKICB9CiAgaW5saW5lIEVs
ZW1UJiBvcGVyYXRvcltdIChfQ09SQkFfVUxvbmcgaW5kZXgpIHsKICAgIGlmKCBpbmRleCA+PSBw
ZF9sZW4gKSBfQ09SQkFfYm91bmRfY2hlY2tfZXJyb3IoKTsKICAgIHJldHVybiBwZF9idWZbaW5k
ZXhdOwogIH0KICBpbmxpbmUgY29uc3QgRWxlbVQmIG9wZXJhdG9yW10gKF9DT1JCQV9VTG9uZyBp
bmRleCkgY29uc3QgewogICAgaWYoIGluZGV4ID49IHBkX2xlbiApIF9DT1JCQV9ib3VuZF9jaGVj
a19lcnJvcigpOwogICAgcmV0dXJuIHBkX2J1ZltpbmRleF07CiAgfQogIHN0YXRpYyBpbmxpbmUg
VCoqIGFsbG9jYnVmKF9DT1JCQV9VTG9uZyBuZWxlbXMpIHsKICAgIFQqKiB2ID0gbmV3IFQqW25l
bGVtc107CiAgICBmb3IgKF9DT1JCQV9VTG9uZyBpPTA7IGkgPCBuZWxlbXM7IGkrKykgdltpXSA9
IFQ6Ol9uaWwoKTsKICAgIHJldHVybiB2OwogIH0KICBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZWJ1
ZihUKiogYikgeyBpZiggYiApIGRlbGV0ZVtdIGI7IH0KCiAgaW5saW5lIEVsZW1UKiBOUF9kYXRh
KCkgeyByZXR1cm4gcGRfYnVmOyB9Cgpwcm90ZWN0ZWQ6CiAgX0NPUkJBX1VMb25nIHBkX21heDsK
ICBfQ09SQkFfVUxvbmcgcGRfbGVuOwogIF9DT1JCQV9Cb29sZWFuIHBkX3JlbDsKICBFbGVtVCog
cGRfYnVmOwp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBfQ09SQkFfUHNldWRvVmFs
dWVfU2VxdWVuY2UgewpwdWJsaWM6CiAgdHlwZWRlZiBfQ09SQkFfUHNldWRvVmFsdWVfU2VxdWVu
Y2U8VD4gVF9zZXE7CgogIGlubGluZSBfQ09SQkFfUHNldWRvVmFsdWVfU2VxdWVuY2UoKQogICAg
OiBwZF9tYXgoMCksIHBkX2xlbigwKSwgcGRfcmVsKDEpLCBwZF9idWYoMCkgeyB9CiAgaW5saW5l
IF9DT1JCQV9Qc2V1ZG9WYWx1ZV9TZXF1ZW5jZShfQ09SQkFfVUxvbmcgbWF4KQogICAgOiBwZF9t
YXgobWF4KSwgcGRfbGVuKDApLCBwZF9yZWwoMSkKICB7CiAgICBpZiggIShwZF9idWYgPSBhbGxv
Y2J1ZihtYXgpKSApCiAgICAgIF9DT1JCQV9uZXdfb3BlcmF0b3JfcmV0dXJuX251bGwoKTsKICB9
CgogIGlubGluZSBfQ09SQkFfUHNldWRvVmFsdWVfU2VxdWVuY2UoX0NPUkJBX1VMb25nIG1heCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9VTG9uZyBsZW5ndGgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUKiB2YWx1ZSwgX0NPUkJBX0Jv
b2xlYW4gcmVsZWFzZSA9IDApCiAgICA6IHBkX21heChtYXgpLCBwZF9sZW4obGVuZ3RoKSwgcGRf
cmVsKHJlbGVhc2UpLCBwZF9idWYodmFsdWUpCiAgewogICAgaWYoIGxlbmd0aCA+IG1heCApIF9D
T1JCQV9ib3VuZF9jaGVja19lcnJvcigpOwogIH0KCiAgaW5saW5lIF9DT1JCQV9Qc2V1ZG9WYWx1
ZV9TZXF1ZW5jZShjb25zdCBUX3NlcSYgcykKICAgIDogcGRfbWF4KHMucGRfbWF4KSwgcGRfbGVu
KHMucGRfbGVuKSwgcGRfcmVsKDEpCiAgewogICAgaWYoICEocGRfYnVmID0gYWxsb2NidWYocy5w
ZF9tYXgpKSApCiAgICAgIF9DT1JCQV9uZXdfb3BlcmF0b3JfcmV0dXJuX251bGwoKTsKICAgIGZv
ciggX0NPUkJBX1VMb25nIGk9MDsgaSA8IHMucGRfbGVuOyBpKysgKSB7CiAgICAgIHBkX2J1Zltp
XSA9IHMucGRfYnVmW2ldOwogICAgfQogIH0KCiAgaW5saW5lIH5fQ09SQkFfUHNldWRvVmFsdWVf
U2VxdWVuY2UoKSB7CiAgICBpZiggcGRfcmVsICYmIHBkX2J1ZiApIGRlbGV0ZVtdIHBkX2J1ZjsK
ICB9CgogIGlubGluZSBUX3NlcSYgb3BlcmF0b3I9IChjb25zdCBUX3NlcSYgcykgewogICAgaWYo
ICZzID09IHRoaXMgKSByZXR1cm4gKnRoaXM7CiAgICBpZiggcGRfbWF4IDwgcy5wZF9tYXggKSB7
CiAgICAgIFQqIG5ld2J1ZiA9IGFsbG9jYnVmKHMucGRfbWF4KTsKICAgICAgaWYoICFuZXdidWYg
KSBfQ09SQkFfbmV3X29wZXJhdG9yX3JldHVybl9udWxsKCk7CiAgICAgIHBkX21heCA9IHMucGRf
bWF4OwogICAgICBpZiggcGRfcmVsICYmIHBkX2J1ZiApIGRlbGV0ZVtdIHBkX2J1ZjsKICAgICAg
ZWxzZSBwZF9yZWwgPSAxOwogICAgICBwZF9idWYgPSBuZXdidWY7CiAgICB9CiAgICBwZF9sZW4g
PSBzLnBkX2xlbjsKICAgIGZvciggdW5zaWduZWQgbG9uZyBpPTA7IGkgPCBwZF9sZW47IGkrKyAp
IHBkX2J1ZltpXSA9IHMucGRfYnVmW2ldOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5l
IF9DT1JCQV9VTG9uZyBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gcGRfbWF4OyB9CiAgaW5saW5l
IF9DT1JCQV9VTG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBwZF9sZW47IH0KICBpbmxpbmUg
dm9pZCBsZW5ndGgoX0NPUkJBX1VMb25nIGxlbmd0aCkgewogICAgaWYgKGxlbmd0aCA+IHBkX21h
eCkgewogICAgICBUKiBuZXdidWYgPSBhbGxvY2J1ZihsZW5ndGgpOwogICAgICBpZiggIW5ld2J1
ZiApIF9DT1JCQV9uZXdfb3BlcmF0b3JfcmV0dXJuX251bGwoKTsKICAgICAgZm9yKCB1bnNpZ25l
ZCBsb25nIGkgPSAwOyBpIDwgcGRfbGVuOyBpKysgKQogICAgICAgIG5ld2J1ZltpXSA9IHBkX2J1
ZltpXTsKICAgICAgcGRfbWF4ID0gbGVuZ3RoOwogICAgICBpZiggcGRfcmVsICYmIHBkX2J1ZiAp
IGRlbGV0ZVtdIHBkX2J1ZjsKICAgICAgZWxzZSBwZF9yZWwgPSAxOwogICAgICBwZF9idWYgPSBu
ZXdidWY7CiAgICB9CiAgICBwZF9sZW4gPSBsZW5ndGg7CiAgfQogIGlubGluZSBUJiBvcGVyYXRv
cltdIChfQ09SQkFfVUxvbmcgaW5kZXgpIHsKICAgIGlmKCBpbmRleCA+PSBwZF9sZW4gKSBfQ09S
QkFfYm91bmRfY2hlY2tfZXJyb3IoKTsKICAgIHJldHVybiBwZF9idWZbaW5kZXhdOwogIH0KICBp
bmxpbmUgY29uc3QgVCYgb3BlcmF0b3JbXSAoX0NPUkJBX1VMb25nIGluZGV4KSBjb25zdCB7CiAg
ICBpZiggaW5kZXggPj0gcGRfbGVuICkgX0NPUkJBX2JvdW5kX2NoZWNrX2Vycm9yKCk7CiAgICBy
ZXR1cm4gcGRfYnVmW2luZGV4XTsKICB9CiAgc3RhdGljIGlubGluZSBUKiBhbGxvY2J1ZihfQ09S
QkFfVUxvbmcgbmVsZW1zKSB7IHJldHVybiBuZXcgVFtuZWxlbXNdOyB9CiAgc3RhdGljIGlubGlu
ZSB2b2lkIGZyZWVidWYoVCogYikgeyBpZiggYiApIGRlbGV0ZVtdIGI7IH0KCiAgaW5saW5lIFQq
IE5QX2RhdGEoKSB7IHJldHVybiBwZF9idWY7IH0KCnByb3RlY3RlZDoKICBfQ09SQkFfVUxvbmcg
cGRfbWF4OwogIF9DT1JCQV9VTG9uZyBwZF9sZW47CiAgX0NPUkJBX0Jvb2xlYW4gcGRfcmVsOwog
IFQqIHBkX2J1ZjsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCxjbGFzcyBUX0hlbHBlcj4KY2xh
c3MgX0NPUkJBX09ialJlZl9NZW1iZXI7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCxjbGFzcyBUX0hlbHBl
cj4KY2xhc3MgX0NPUkJBX09ialJlZl9FbGVtZW50OwoKdGVtcGxhdGUgPGNsYXNzIFQsY2xhc3Mg
VF9IZWxwZXI+CmNsYXNzIF9DT1JCQV9PYmpSZWZfSU5PVVRfYXJnOwoKdGVtcGxhdGUgPGNsYXNz
IFQsY2xhc3MgVF9IZWxwZXI+CmNsYXNzIF9DT1JCQV9PYmpSZWZfT1VUX2FyZzsKCnRlbXBsYXRl
IDxjbGFzcyBULGNsYXNzIFRfSGVscGVyPgpjbGFzcyBfQ09SQkFfT2JqUmVmX3RjRGVzY19hcmc7
Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF9IZWxwZXI+CmNsYXNzIF9DT1JCQV9PYmpSZWZf
VmFyIHsKcHVibGljOgogIHR5cGVkZWYgVCogcHRyX3Q7CiAgdHlwZWRlZiBUKiBUX3B0cjsKICB0
eXBlZGVmIF9DT1JCQV9PYmpSZWZfTWVtYmVyPFQsVF9IZWxwZXI+IFRfbWVtYmVyOwogIHR5cGVk
ZWYgX0NPUkJBX09ialJlZl9FbGVtZW50PFQsVF9IZWxwZXI+IFRfZWxlbWVudDsKICB0eXBlZGVm
IF9DT1JCQV9PYmpSZWZfVmFyPFQsVF9IZWxwZXI+IFRfdmFyOwoKICBpbmxpbmUgX0NPUkJBX09i
alJlZl9WYXIoKSA6IHBkX29ianJlZihUX0hlbHBlcjo6X25pbCgpKSB7fQogIGlubGluZSBfQ09S
QkFfT2JqUmVmX1ZhcihUX3B0ciBwKSA6IHBkX29ianJlZihwKSB7fQogIGlubGluZSBfQ09SQkFf
T2JqUmVmX1Zhcihjb25zdCBUX3ZhciYgcCkgOiBwZF9vYmpyZWYocC5wZF9vYmpyZWYpIHsKICAg
IFRfSGVscGVyOjpkdXBsaWNhdGUocC5wZF9vYmpyZWYpOwogIH0KCiAgaW5saW5lIF9DT1JCQV9P
YmpSZWZfVmFyKGNvbnN0IFRfbWVtYmVyJiBtKTsKICBpbmxpbmUgX0NPUkJBX09ialJlZl9WYXIo
Y29uc3QgVF9lbGVtZW50JiBtKTsKCiAgaW5saW5lIH5fQ09SQkFfT2JqUmVmX1ZhcigpIHsKCiAg
ICBUX0hlbHBlcjo6cmVsZWFzZShwZF9vYmpyZWYpOwoKCgogIH0KCiAgaW5saW5lIFRfdmFyJiBv
cGVyYXRvcj0gKFRfcHRyIHApIHsKICAgIFRfSGVscGVyOjpyZWxlYXNlKHBkX29ianJlZik7CiAg
ICBwZF9vYmpyZWYgPSBwOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIFRfdmFyJiBv
cGVyYXRvcj0gKGNvbnN0IFRfdmFyJiBwKSB7CiAgICBpZiggJnAgIT0gdGhpcyApIHsKICAgICAg
VF9IZWxwZXI6OmR1cGxpY2F0ZShwLnBkX29ianJlZik7CiAgICAgIFRfSGVscGVyOjpyZWxlYXNl
KHBkX29ianJlZik7CiAgICAgIHBkX29ianJlZiA9IHAucGRfb2JqcmVmOwogICAgfQogICAgcmV0
dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIFRfdmFyJiBvcGVyYXRvcj0gKGNvbnN0IFRfbWVtYmVy
JiBtKTsKICBpbmxpbmUgVF92YXImIG9wZXJhdG9yPSAoY29uc3QgVF9lbGVtZW50JiBtKTsKICBp
bmxpbmUgVF9wdHIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIHBkX29ianJlZjsgfQogIGlu
bGluZSBvcGVyYXRvciBUX3B0ciAoKSBjb25zdCB7IHJldHVybiBwZF9vYmpyZWY7IH0KCiAgaW5s
aW5lIFRfcHRyIGluKCkgY29uc3QgeyByZXR1cm4gcGRfb2JqcmVmOyB9CiAgaW5saW5lIFRfcHRy
JiBpbm91dCgpIHsgcmV0dXJuIHBkX29ianJlZjsgfQogIGlubGluZSBUX3B0ciYgb3V0KCkgewog
ICAgVF9IZWxwZXI6OnJlbGVhc2UocGRfb2JqcmVmKTsKICAgIHBkX29ianJlZiA9IFRfSGVscGVy
OjpfbmlsKCk7CiAgICByZXR1cm4gcGRfb2JqcmVmOwogIH0KICBpbmxpbmUgVF9wdHIgX3JldG4o
KSB7CiAgICBUX3B0ciB0bXAgPSBwZF9vYmpyZWY7CiAgICBwZF9vYmpyZWYgPSBUX0hlbHBlcjo6
X25pbCgpOwogICAgcmV0dXJuIHRtcDsKICB9CgogIGZyaWVuZCBjbGFzcyBfQ09SQkFfT2JqUmVm
X0lOT1VUX2FyZzxULFRfSGVscGVyPjsKICBmcmllbmQgY2xhc3MgX0NPUkJBX09ialJlZl9PVVRf
YXJnPFQsVF9IZWxwZXI+OwogIGZyaWVuZCBjbGFzcyBfQ09SQkFfT2JqUmVmX3RjRGVzY19hcmc8
VCxUX0hlbHBlcj47Cgpwcml2YXRlOgogIFRfcHRyIHBkX29ianJlZjsKfTsKCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgVCxjbGFzcyBUX0hlbHBlcj4KY2xhc3MgX0NPUkJBX09ialJlZl9NZW1iZXIgewpw
dWJsaWM6CiAgdHlwZWRlZiBUKiBUX3B0cjsKICB0eXBlZGVmIF9DT1JCQV9PYmpSZWZfTWVtYmVy
PFQsVF9IZWxwZXI+IFRfbWVtYmVyOwogIHR5cGVkZWYgX0NPUkJBX09ialJlZl9FbGVtZW50PFQs
VF9IZWxwZXI+IFRfZWxlbWVudDsKICB0eXBlZGVmIF9DT1JCQV9PYmpSZWZfVmFyPFQsVF9IZWxw
ZXI+IFRfdmFyOwoKICBpbmxpbmUgX0NPUkJBX09ialJlZl9NZW1iZXIoKSB7CiAgICBfcHRyID0g
VF9IZWxwZXI6Ol9uaWwoKTsKICB9CgogIGlubGluZSBfQ09SQkFfT2JqUmVmX01lbWJlcihjb25z
dCBUX21lbWJlciYgcCkgewogICAgVF9IZWxwZXI6OmR1cGxpY2F0ZShwLl9wdHIpOwogICAgX3B0
ciA9IHAuX3B0cjsKICB9CgppbmxpbmUgfl9DT1JCQV9PYmpSZWZfTWVtYmVyKCkgewoKICAgIFRf
SGVscGVyOjpyZWxlYXNlKF9wdHIpOwoKCgogIH0KCiAgaW5saW5lIFRfbWVtYmVyJiBvcGVyYXRv
cj0gKFRfcHRyIHApIHsKICAgIFRfSGVscGVyOjpyZWxlYXNlKF9wdHIpOwogICAgX3B0ciA9IHA7
CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgVF9tZW1iZXImIG9wZXJhdG9yPSAoY29u
c3QgVF9tZW1iZXImIHApIHsKICAgIGlmKCAmcCAhPSB0aGlzICkgewogICAgICBUX0hlbHBlcjo6
cmVsZWFzZShfcHRyKTsKICAgICAgVF9IZWxwZXI6OmR1cGxpY2F0ZShwLl9wdHIpOwogICAgICBf
cHRyID0gcC5fcHRyOwogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIFRfbWVt
YmVyJiBvcGVyYXRvcj0gKGNvbnN0IFRfdmFyJiBwKSB7CiAgICBUX0hlbHBlcjo6cmVsZWFzZShf
cHRyKTsKICAgIFRfSGVscGVyOjpkdXBsaWNhdGUocCk7CiAgICBfcHRyID0gKFRfcHRyKSBwOwog
ICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIFRfbWVtYmVyJiBvcGVyYXRvcj0gKGNvbnN0
IFRfZWxlbWVudCYgcCk7CgogIGlubGluZSBUX3B0ciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1
cm4gX3B0cjsgfQoKICBpbmxpbmUgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3QgaW5pdGlh
bG9mZnNldCkgY29uc3QgewogICAgcmV0dXJuIFRfSGVscGVyOjpOUF9hbGlnbmVkU2l6ZShfcHRy
LGluaXRpYWxvZmZzZXQpOwogIH0KCiAgaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0gKE5ldEJ1ZmZl
cmVkU3RyZWFtJiBzKSBjb25zdCB7CiAgICBUX0hlbHBlcjo6bWFyc2hhbE9ialJlZihfcHRyLHMp
OwogIH0KCiAgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0gKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7
CiAgICBUX3B0ciBfcmVzdWx0ID0gVF9IZWxwZXI6OnVubWFyc2hhbE9ialJlZihzKTsKICAgIFRf
SGVscGVyOjpyZWxlYXNlKF9wdHIpOwogICAgX3B0ciA9IF9yZXN1bHQ7CiAgfQoKICBpbmxpbmUg
dm9pZCBvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0mIHMpIGNvbnN0IHsKICAgIFRfSGVs
cGVyOjptYXJzaGFsT2JqUmVmKF9wdHIscyk7CiAgfQoKICBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8
PSAoTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIFRfcHRyIF9yZXN1bHQgPSBUX0hlbHBlcjo6
dW5tYXJzaGFsT2JqUmVmKHMpOwogICAgVF9IZWxwZXI6OnJlbGVhc2UoX3B0cik7CiAgICBfcHRy
ID0gX3Jlc3VsdDsKICB9CgoKCgogIGlubGluZSBvcGVyYXRvciBUX3B0ciAoKSBjb25zdCB7IHJl
dHVybiBfcHRyOyB9CgogIGlubGluZSBUX3B0ciBpbigpIGNvbnN0IHsgcmV0dXJuIF9wdHI7IH0K
ICBpbmxpbmUgVF9wdHImIGlub3V0KCkgeyByZXR1cm4gX3B0cjsgfQogIGlubGluZSBUX3B0ciYg
b3V0KCkgewogICAgVF9IZWxwZXI6OnJlbGVhc2UoX3B0cik7CiAgICBfcHRyID0gVF9IZWxwZXI6
Ol9uaWwoKTsKICAgIHJldHVybiBfcHRyOwogIH0KICBpbmxpbmUgVF9wdHIgX3JldG4oKSB7CiAg
ICBUX3B0ciB0bXA7CiAgICB0bXAgPSBfcHRyOwogICAgX3B0ciA9IFRfSGVscGVyOjpfbmlsKCk7
CiAgICByZXR1cm4gdG1wOwogIH0KCiAgVF9wdHIgX3B0cjsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgVCxjbGFzcyBUX0hlbHBlcj4KY2xhc3MgX0NPUkJBX09ialJlZl9FbGVtZW50IHsKcHVibGlj
OgogIHR5cGVkZWYgVCogVF9wdHI7CiAgdHlwZWRlZiBfQ09SQkFfT2JqUmVmX0VsZW1lbnQ8VCxU
X0hlbHBlcj4gVF9lbGVtZW50OwogIHR5cGVkZWYgX0NPUkJBX09ialJlZl9NZW1iZXI8VCxUX0hl
bHBlcj4gVF9tZW1iZXI7CiAgdHlwZWRlZiBfQ09SQkFfT2JqUmVmX1ZhcjxULFRfSGVscGVyPiBU
X3ZhcjsKCiAgaW5saW5lIF9DT1JCQV9PYmpSZWZfRWxlbWVudChUX3B0ciYgcCwgX0NPUkJBX0Jv
b2xlYW4gcmVsKQogICAgOiBwZF9yZWwocmVsKSwgcGRfZGF0YShwKSB7fQoKICBpbmxpbmUgX0NP
UkJBX09ialJlZl9FbGVtZW50KGNvbnN0IFRfZWxlbWVudCYgcCkKICAgIDogcGRfcmVsKHAucGRf
cmVsKSwgcGRfZGF0YShwLnBkX2RhdGEpIHt9CgogIGlubGluZSB+X0NPUkJBX09ialJlZl9FbGVt
ZW50KCkgewoKICB9CgogIGlubGluZSBUX2VsZW1lbnQmIG9wZXJhdG9yPSAoVF9wdHIgcCkgewog
ICAgaWYoIHBkX3JlbCApIFRfSGVscGVyOjpyZWxlYXNlKHBkX2RhdGEpOwogICAgcGRfZGF0YSA9
IHA7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgVF9lbGVtZW50JiBvcGVyYXRvcj0g
KGNvbnN0IFRfZWxlbWVudCYgcCkgewogICAgaWYoIHBkX3JlbCApIHsKICAgICAgVF9IZWxwZXI6
OnJlbGVhc2UocGRfZGF0YSk7CiAgICAgIFRfSGVscGVyOjpkdXBsaWNhdGUocC5wZF9kYXRhKTsK
ICAgICAgcGRfZGF0YSA9IHAucGRfZGF0YTsKICAgIH0KICAgIGVsc2UKICAgICAgcGRfZGF0YSA9
IHAucGRfZGF0YTsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBUX2VsZW1lbnQmIG9w
ZXJhdG9yPSAoY29uc3QgVF92YXImIHApIHsKICAgIGlmKCBwZF9yZWwgKSB7CiAgICAgIFRfSGVs
cGVyOjpyZWxlYXNlKHBkX2RhdGEpOwogICAgICBUX0hlbHBlcjo6ZHVwbGljYXRlKHApOwogICAg
fQogICAgcGRfZGF0YSA9IChUX3B0cikgcDsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGlu
ZSBUX2VsZW1lbnQmIG9wZXJhdG9yPSAoY29uc3QgVF9tZW1iZXImIHApIHsKICAgIGlmKCBwZF9y
ZWwgKSB7CiAgICAgIFRfSGVscGVyOjpyZWxlYXNlKHBkX2RhdGEpOwogICAgICBUX0hlbHBlcjo6
ZHVwbGljYXRlKHApOwogICAgfQogICAgcGRfZGF0YSA9IChUX3B0cikgcDsKICAgIHJldHVybiAq
dGhpczsKICB9CgogIGlubGluZSBUX3B0ciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gcGRf
ZGF0YTsgfQoKCgoKICBpbmxpbmUgb3BlcmF0b3IgVF9wdHIgKCkgY29uc3QgeyByZXR1cm4gcGRf
ZGF0YTsgfQoKCiAgaW5saW5lIFRfcHRyIGluKCkgY29uc3QgeyByZXR1cm4gcGRfZGF0YTsgfQog
IGlubGluZSBUX3B0ciYgaW5vdXQoKSB7IHJldHVybiBwZF9kYXRhOyB9CiAgaW5saW5lIFRfcHRy
JiBvdXQoKSB7CiAgICBpZiAocGRfcmVsKSB7CiAgICAgIFRfSGVscGVyOjpyZWxlYXNlKHBkX2Rh
dGEpOwogICAgfQogICAgcGRfZGF0YSA9IFRfSGVscGVyOjpfbmlsKCk7CiAgICByZXR1cm4gcGRf
ZGF0YTsKICB9CiAgaW5saW5lIFRfcHRyIF9yZXRuKCkgewogICAgVF9wdHIgdG1wID0gcGRfZGF0
YTsKICAgIGlmICghcGRfcmVsKQogICAgICBUX0hlbHBlcjo6ZHVwbGljYXRlKHBkX2RhdGEpOwog
ICAgcGRfZGF0YSA9IFRfSGVscGVyOjpfbmlsKCk7CiAgICByZXR1cm4gdG1wOwogIH0KCiAgaW5s
aW5lIFRfcHRyJiBfTlBfcmVmKCkgY29uc3Qge3JldHVybiBwZF9kYXRhO30KICBpbmxpbmUgX0NP
UkJBX0Jvb2xlYW4gX05QX3JlbGVhc2UoKSBjb25zdCB7cmV0dXJuIHBkX3JlbDt9CgogIF9DT1JC
QV9Cb29sZWFuIHBkX3JlbDsKICBUX3B0ciYgcGRfZGF0YTsKfTsKCgoKCgoKCnRlbXBsYXRlIDxj
bGFzcyBULCBjbGFzcyBUX0hlbHBlcj4KaW5saW5lCl9DT1JCQV9PYmpSZWZfVmFyPFQsVF9IZWxw
ZXI+OjoKX0NPUkJBX09ialJlZl9WYXIoY29uc3QgX0NPUkJBX09ialJlZl9NZW1iZXI8VCxUX0hl
bHBlcj4mIG0pCnsKICBUX0hlbHBlcjo6ZHVwbGljYXRlKG0uX3B0cik7CiAgcGRfb2JqcmVmID0g
bS5fcHRyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF9IZWxwZXI+CmlubGluZQpfQ09S
QkFfT2JqUmVmX1ZhcjxULFRfSGVscGVyPjo6Cl9DT1JCQV9PYmpSZWZfVmFyKGNvbnN0IF9DT1JC
QV9PYmpSZWZfRWxlbWVudDxULFRfSGVscGVyPiYgbSkKewogIFRfSGVscGVyOjpkdXBsaWNhdGUo
bSk7CiAgcGRfb2JqcmVmID0gKFQqKW07Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF9I
ZWxwZXI+CmlubGluZSBfQ09SQkFfT2JqUmVmX1ZhcjxULFRfSGVscGVyPiYKX0NPUkJBX09ialJl
Zl9WYXI8VCxUX0hlbHBlcj46Om9wZXJhdG9yPSAoY29uc3QgX0NPUkJBX09ialJlZl9NZW1iZXI8
VCxUX0hlbHBlcj4mIHApCnsKICBUX0hlbHBlcjo6cmVsZWFzZShwZF9vYmpyZWYpOwogIFRfSGVs
cGVyOjpkdXBsaWNhdGUocC5fcHRyKTsKICBwZF9vYmpyZWYgPSBwLl9wdHI7CiAgcmV0dXJuICp0
aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF9IZWxwZXI+CmlubGluZSBfQ09SQkFf
T2JqUmVmX1ZhcjxULFRfSGVscGVyPiYKX0NPUkJBX09ialJlZl9WYXI8VCxUX0hlbHBlcj46Om9w
ZXJhdG9yPSAoY29uc3QgX0NPUkJBX09ialJlZl9FbGVtZW50PFQsVF9IZWxwZXI+JiBwKQp7CiAg
VF9IZWxwZXI6OnJlbGVhc2UocGRfb2JqcmVmKTsKICBUX0hlbHBlcjo6ZHVwbGljYXRlKHApOwog
IHBkX29ianJlZiA9IChUKilwOwogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIFQs
IGNsYXNzIFRfSGVscGVyPgppbmxpbmUgX0NPUkJBX09ialJlZl9NZW1iZXI8VCxUX0hlbHBlcj4m
Cl9DT1JCQV9PYmpSZWZfTWVtYmVyPFQsVF9IZWxwZXI+OjpvcGVyYXRvcj0gKGNvbnN0IF9DT1JC
QV9PYmpSZWZfRWxlbWVudDxULFRfSGVscGVyPiYgcCkKewogIFRfSGVscGVyOjpyZWxlYXNlKF9w
dHIpOwogIFRfSGVscGVyOjpkdXBsaWNhdGUocCk7CiAgX3B0ciA9IChUKilwOwogIHJldHVybiAq
dGhpczsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBULGNsYXNzIFRfSGVscGVyPgpjbGFzcyBfQ09S
QkFfT2JqUmVmX0lOT1VUX2FyZyB7CnB1YmxpYzoKICB0eXBlZGVmIF9DT1JCQV9PYmpSZWZfTWVt
YmVyPFQsVF9IZWxwZXI+IFRfbWVtYmVyOwogIHR5cGVkZWYgX0NPUkJBX09ialJlZl9FbGVtZW50
PFQsVF9IZWxwZXI+IFRfZWxlbWVudDsKICB0eXBlZGVmIF9DT1JCQV9PYmpSZWZfVmFyPFQsVF9I
ZWxwZXI+IFRfdmFyOwogIGlubGluZSBfQ09SQkFfT2JqUmVmX0lOT1VUX2FyZyhUKiYgcCkgOiBf
ZGF0YShwKSB7fQogIGlubGluZSBfQ09SQkFfT2JqUmVmX0lOT1VUX2FyZyhUX3ZhciYgcCkgOiBf
ZGF0YShwLnBkX29ianJlZikge30KICBpbmxpbmUgX0NPUkJBX09ialJlZl9JTk9VVF9hcmcoVF9t
ZW1iZXImIHApIDogX2RhdGEocC5fcHRyKSB7fQogIGlubGluZSBfQ09SQkFfT2JqUmVmX0lOT1VU
X2FyZyhUX2VsZW1lbnQmIHApIDogX2RhdGEocC5fTlBfcmVmKCkpIHsKCgoKCgoKICAgIGlmKCAh
cC5OUF9yZWxlYXNlKCkgKQogICAgICBUX0hlbHBlcjo6ZHVwbGljYXRlKHAuX05QX3JlZigpKTsK
ICB9CiAgaW5saW5lIH5fQ09SQkFfT2JqUmVmX0lOT1VUX2FyZygpIHt9CgogIGlubGluZSBvcGVy
YXRvciBUKiYoKSB7IHJldHVybiBfZGF0YTsgfQoKICBUKiYgX2RhdGE7Cgpwcml2YXRlOgogIF9D
T1JCQV9PYmpSZWZfSU5PVVRfYXJnKCk7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQsY2xhc3Mg
VF9IZWxwZXI+CmNsYXNzIF9DT1JCQV9PYmpSZWZfT1VUX2FyZyB7CnB1YmxpYzoKICB0eXBlZGVm
IF9DT1JCQV9PYmpSZWZfT1VUX2FyZzxULFRfSGVscGVyPiBUX291dDsKICB0eXBlZGVmIF9DT1JC
QV9PYmpSZWZfTWVtYmVyPFQsVF9IZWxwZXI+IFRfbWVtYmVyOwogIHR5cGVkZWYgX0NPUkJBX09i
alJlZl9FbGVtZW50PFQsVF9IZWxwZXI+IFRfZWxlbWVudDsKICB0eXBlZGVmIF9DT1JCQV9PYmpS
ZWZfVmFyPFQsVF9IZWxwZXI+IFRfdmFyOwoKICBpbmxpbmUgX0NPUkJBX09ialJlZl9PVVRfYXJn
KFQqJiBwKSA6IF9kYXRhKHApIHsgX2RhdGEgPSBUX0hlbHBlcjo6X25pbCgpOyB9CiAgaW5saW5l
IF9DT1JCQV9PYmpSZWZfT1VUX2FyZyhUX3ZhciYgcCkgOiBfZGF0YShwLnBkX29ianJlZikgewog
ICAgcCA9IFRfSGVscGVyOjpfbmlsKCk7CiAgfQogIGlubGluZSBfQ09SQkFfT2JqUmVmX09VVF9h
cmcoVF9tZW1iZXImIHApIDogX2RhdGEocC5fcHRyKSB7CiAgICBwID0gVF9IZWxwZXI6Ol9uaWwo
KTsKICB9CiAgaW5saW5lIF9DT1JCQV9PYmpSZWZfT1VUX2FyZyhUX2VsZW1lbnQmIHApIDogX2Rh
dGEocC5fTlBfcmVmKCkpIHsKICAgIHAgPSBUX0hlbHBlcjo6X25pbCgpOwogIH0KCiAgaW5saW5l
IF9DT1JCQV9PYmpSZWZfT1VUX2FyZyhjb25zdCBUX291dCYgcCkgOiBfZGF0YShwLl9kYXRhKSB7
fQogIGlubGluZSB+X0NPUkJBX09ialJlZl9PVVRfYXJnKCkge30KCiAgaW5saW5lIFRfb3V0JiBv
cGVyYXRvcj0oY29uc3QgVF9vdXQmIHApIHsgX2RhdGEgPSBwLl9kYXRhOyByZXR1cm4gKnRoaXM7
IH0KICBpbmxpbmUgVF9vdXQmIG9wZXJhdG9yPShUKiBwKSB7IF9kYXRhID0gcDsgcmV0dXJuICp0
aGlzOyB9CgogIGlubGluZSBvcGVyYXRvciBUKiYoKSB7IHJldHVybiBfZGF0YTsgfQogIGlubGlu
ZSBUKiYgcHRyKCkgeyByZXR1cm4gX2RhdGE7IH0KICBpbmxpbmUgVCogb3BlcmF0b3ItPigpIGNv
bnN0IHsgcmV0dXJuIF9kYXRhOyB9CgogIFQqJiBfZGF0YTsKcHJpdmF0ZToKICBfQ09SQkFfT2Jq
UmVmX09VVF9hcmcoKTsKICBUX291dCYgb3BlcmF0b3I9KGNvbnN0IFRfbWVtYmVyJiBwKTsKICBU
X291dCYgb3BlcmF0b3I9KGNvbnN0IFRfZWxlbWVudCYgcCk7CiAgVF9vdXQmIG9wZXJhdG9yPShj
b25zdCBUX3ZhciYgcCk7CgoKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCxjbGFzcyBUX0hlbHBl
cj4KY2xhc3MgX0NPUkJBX09ialJlZl90Y0Rlc2NfYXJnIHsKcHVibGljOgoKCgoKCgogIHR5cGVk
ZWYgVCogVF9wdHI7CiAgdHlwZWRlZiBfQ09SQkFfT2JqUmVmX01lbWJlcjxULFRfSGVscGVyPiBU
X21lbWJlcjsKICB0eXBlZGVmIF9DT1JCQV9PYmpSZWZfRWxlbWVudDxULFRfSGVscGVyPiBUX2Vs
ZW1lbnQ7CiAgdHlwZWRlZiBfQ09SQkFfT2JqUmVmX1ZhcjxULFRfSGVscGVyPiBUX3ZhcjsKICBp
bmxpbmUgX0NPUkJBX09ialJlZl90Y0Rlc2NfYXJnKFRfcHRyJiBwLCBfQ09SQkFfQm9vbGVhbiBy
ZWwpCiAgICA6IF9kYXRhKHApLCBfcmVsKHJlbCkge30KICBpbmxpbmUgX0NPUkJBX09ialJlZl90
Y0Rlc2NfYXJnKFRfdmFyJiBwKSA6IF9kYXRhKHAucGRfb2JqcmVmKSwgX3JlbCgxKSB7fQogIGlu
bGluZSBfQ09SQkFfT2JqUmVmX3RjRGVzY19hcmcoVF9tZW1iZXImIHApIDogX2RhdGEocC5fcHRy
KSwgX3JlbCgxKSB7fQogIGlubGluZSBfQ09SQkFfT2JqUmVmX3RjRGVzY19hcmcoVF9lbGVtZW50
IHApCiAgICA6IF9kYXRhKHAuX05QX3JlZigpKSwgX3JlbChwLl9OUF9yZWxlYXNlKCkpIHt9CiAg
aW5saW5lIH5fQ09SQkFfT2JqUmVmX3RjRGVzY19hcmcoKSB7fQoKICBUKiYgX2RhdGE7CiAgX0NP
UkJBX0Jvb2xlYW4gX3JlbDsKCnByaXZhdGU6CiAgX0NPUkJBX09ialJlZl90Y0Rlc2NfYXJnKCk7
Cn07CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4KY2xhc3MgX0NPUkJBX0Nv
bnN0clR5cGVfRml4X09VVF9hcmc7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgX0NPUkJBX0Nv
bnN0clR5cGVfRml4X1ZhciB7CnB1YmxpYzoKICB0eXBlZGVmIF9DT1JCQV9Db25zdHJUeXBlX0Zp
eF9WYXI8VD4gVF92YXI7CgogIGlubGluZSBfQ09SQkFfQ29uc3RyVHlwZV9GaXhfVmFyKCkge30K
ICBpbmxpbmUgX0NPUkJBX0NvbnN0clR5cGVfRml4X1ZhcihUKiBwKSB7IHBkX2RhdGEgPSAqcDsg
ZGVsZXRlIHA7IH0KICBpbmxpbmUgX0NPUkJBX0NvbnN0clR5cGVfRml4X1Zhcihjb25zdCBUX3Zh
ciYgcCkgewogICAgcGRfZGF0YSA9IHAucGRfZGF0YTsKICB9CiAgaW5saW5lIH5fQ09SQkFfQ29u
c3RyVHlwZV9GaXhfVmFyKCkge30KICBpbmxpbmUgVF92YXImb3BlcmF0b3I9IChUKiBwKSB7CiAg
ICBwZF9kYXRhID0gKnA7CiAgICBkZWxldGUgcDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5s
aW5lIFRfdmFyJiBvcGVyYXRvcj0gKGNvbnN0IFRfdmFyJiBwKSB7CiAgICBwZF9kYXRhID0gcC5w
ZF9kYXRhOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbmxpbmUgVF92YXImIG9wZXJhdG9yPSAo
VCBwKSB7CiAgICBwZF9kYXRhID0gcDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5saW5lIFQq
IG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAoVCopICZwZF9kYXRhOyB9CgoKCgogIGlubGlu
ZSBvcGVyYXRvciBjb25zdCBUJiAoKSBjb25zdCB7IHJldHVybiBwZF9kYXRhOyB9CiAgaW5saW5l
IG9wZXJhdG9yIFQmICgpIHsgcmV0dXJuIHBkX2RhdGE7IH0KIyA4MTkgIi4uLy4uLy4uLy4uL2lu
Y2x1ZGUvb21uaU9SQjMvdGVtcGxhdGVkZWNscy5oIgogIGNvbnN0IFQmIGluKCkgY29uc3QgeyBy
ZXR1cm4gcGRfZGF0YTsgfQogIFQmIGlub3V0KCkgeyByZXR1cm4gcGRfZGF0YTsgfQogIFQmIG91
dCgpIHsgcmV0dXJuIHBkX2RhdGE7IH0KICBUIF9yZXRuKCkgeyByZXR1cm4gcGRfZGF0YTsgfQoK
ICBmcmllbmQgY2xhc3MgX0NPUkJBX0NvbnN0clR5cGVfRml4X09VVF9hcmc8VCwgVF92YXI+OwoK
cHJvdGVjdGVkOgogIFQgcGRfZGF0YTsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mg
VF92YXI+CmNsYXNzIF9DT1JCQV9Db25zdHJUeXBlX0ZpeF9PVVRfYXJnIHsKcHVibGljOgogIHR5
cGVkZWYgX0NPUkJBX0NvbnN0clR5cGVfRml4X09VVF9hcmc8VCxUX3Zhcj4gVF9vdXQ7CiAgaW5s
aW5lIF9DT1JCQV9Db25zdHJUeXBlX0ZpeF9PVVRfYXJnKFQqJiBwKSA6IF9kYXRhKHApIHsgX2Rh
dGEgPSAwOyB9CiAgaW5saW5lIF9DT1JCQV9Db25zdHJUeXBlX0ZpeF9PVVRfYXJnKFRfdmFyJiBw
KSA6IF9kYXRhKCZwLnBkX2RhdGEpIHt9CiAgaW5saW5lIF9DT1JCQV9Db25zdHJUeXBlX0ZpeF9P
VVRfYXJnKGNvbnN0IFRfb3V0JiBwKSA6IF9kYXRhKHAuX2RhdGEpIHt9CiAgaW5saW5lIFRfb3V0
JiBvcGVyYXRvcj0oY29uc3QgVF9vdXQmIHApIHsgX2RhdGEgPSBwLl9kYXRhOyByZXR1cm4gKnRo
aXM7IH0KICBpbmxpbmUgVF9vdXQmIG9wZXJhdG9yPShUKiBwKSB7IF9kYXRhID0gcDsgcmV0dXJu
ICp0aGlzOyB9CiAgaW5saW5lIG9wZXJhdG9yIFQqJigpIHsgcmV0dXJuIF9kYXRhOyB9CiAgaW5s
aW5lIFQqJiBwdHIoKSB7IHJldHVybiBfZGF0YTsgfQogIGlubGluZSBUKiYgb3BlcmF0b3ItPigp
IHsgcmV0dXJuIF9kYXRhOyB9CgogIFQqJiBfZGF0YTsKCnByaXZhdGU6CiAgX0NPUkJBX0NvbnN0
clR5cGVfRml4X09VVF9hcmcoKTsKICBUX291dCYgb3BlcmF0b3I9KGNvbnN0IFRfdmFyJik7Cn07
CgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPgpjbGFzcyBfQ09SQkFfQ29uc3Ry
VHlwZV9WYXJpYWJsZV9PVVRfYXJnOwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIF9DT1JCQV9D
b25zdHJUeXBlX1ZhcmlhYmxlX1ZhciB7CnB1YmxpYzoKICB0eXBlZGVmIF9DT1JCQV9Db25zdHJU
eXBlX1ZhcmlhYmxlX1ZhcjxUPiBUX3ZhcjsKCiAgaW5saW5lIF9DT1JCQV9Db25zdHJUeXBlX1Zh
cmlhYmxlX1ZhcigpIHsgcGRfZGF0YSA9IDA7IH0KICBpbmxpbmUgX0NPUkJBX0NvbnN0clR5cGVf
VmFyaWFibGVfVmFyKFQqIHApIHsgcGRfZGF0YSA9IHA7IH0KICBpbmxpbmUgX0NPUkJBX0NvbnN0
clR5cGVfVmFyaWFibGVfVmFyKGNvbnN0IFRfdmFyJiBwKSB7CiAgICBpZiggIXAucGRfZGF0YSAp
IHBkX2RhdGEgPSAwOwogICAgZWxzZSB7CiAgICAgIHBkX2RhdGEgPSBuZXcgVDsKICAgICAgaWYo
ICFwZF9kYXRhICkgX0NPUkJBX25ld19vcGVyYXRvcl9yZXR1cm5fbnVsbCgpOwogICAgICAqcGRf
ZGF0YSA9ICpwLnBkX2RhdGE7CiAgICB9CiAgfQoKICBpbmxpbmUgfl9DT1JCQV9Db25zdHJUeXBl
X1ZhcmlhYmxlX1ZhcigpIHsgaWYoIHBkX2RhdGEgKSBkZWxldGUgcGRfZGF0YTsgfQoKICBpbmxp
bmUgVF92YXImIG9wZXJhdG9yPSAoVCogcCkgewogICAgaWYoIHBkX2RhdGEgKSBkZWxldGUgcGRf
ZGF0YTsKICAgIHBkX2RhdGEgPSBwOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIFRf
dmFyJiBvcGVyYXRvcj0gKGNvbnN0IFRfdmFyJiBwKSB7CiAgICBpZiggJnAgPT0gdGhpcyApIHJl
dHVybiAqdGhpczsKICAgIGlmKCBwLnBkX2RhdGEgKSB7CiAgICAgIGlmKCAhcGRfZGF0YSApIHsK
ICAgICAgICBwZF9kYXRhID0gbmV3IFQ7CiAgICAgICAgaWYoICFwZF9kYXRhICkgX0NPUkJBX25l
d19vcGVyYXRvcl9yZXR1cm5fbnVsbCgpOwogICAgICB9CiAgICAgICpwZF9kYXRhID0gKnAucGRf
ZGF0YTsKICAgIH0KICAgIGVsc2UgewogICAgICBpZiggcGRfZGF0YSApIGRlbGV0ZSBwZF9kYXRh
OwogICAgICBwZF9kYXRhID0gMDsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGlu
ZSBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gKFQqKXBkX2RhdGE7IH0KCgoKCiAgaW5s
aW5lIG9wZXJhdG9yIGNvbnN0IFQmICgpIGNvbnN0IHsgcmV0dXJuICpwZF9kYXRhOyB9CiAgaW5s
aW5lIG9wZXJhdG9yIFQmICgpIHsgcmV0dXJuICpwZF9kYXRhOyB9CiMgOTIwICIuLi8uLi8uLi8u
Li9pbmNsdWRlL29tbmlPUkIzL3RlbXBsYXRlZGVjbHMuaCIKICBjb25zdCBUJiBpbigpIGNvbnN0
IHsgcmV0dXJuICpwZF9kYXRhOyB9CiAgVCYgaW5vdXQoKSB7IHJldHVybiAqcGRfZGF0YTsgfQog
IFQqJiBvdXQoKSB7IGlmIChwZF9kYXRhKSB7IGRlbGV0ZSBwZF9kYXRhOyBwZF9kYXRhID0gMDsg
fSByZXR1cm4gcGRfZGF0YTsgfQogIFQqIF9yZXRuKCkgeyBUKiB0bXAgPSBwZF9kYXRhOyBwZF9k
YXRhID0gMDsgcmV0dXJuIHRtcDsgfQoKICBmcmllbmQgY2xhc3MgX0NPUkJBX0NvbnN0clR5cGVf
VmFyaWFibGVfT1VUX2FyZzxULCBUX3Zhcj47Cgpwcm90ZWN0ZWQ6CiAgVCogcGRfZGF0YTsKfTsK
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+CmNsYXNzIF9DT1JCQV9Db25zdHJU
eXBlX1ZhcmlhYmxlX09VVF9hcmcgewpwdWJsaWM6CiAgdHlwZWRlZiBfQ09SQkFfQ29uc3RyVHlw
ZV9WYXJpYWJsZV9PVVRfYXJnPFQsVF92YXI+IFRfb3V0OwogIGlubGluZSBfQ09SQkFfQ29uc3Ry
VHlwZV9WYXJpYWJsZV9PVVRfYXJnKFQqJiBwKSA6IF9kYXRhKHApIHsgX2RhdGEgPSAwOyB9CiAg
aW5saW5lIF9DT1JCQV9Db25zdHJUeXBlX1ZhcmlhYmxlX09VVF9hcmcoVF92YXImIHApIDogX2Rh
dGEocC5wZF9kYXRhKSB7CiAgICBwID0gKFQqKTA7CiAgfQogIGlubGluZSBfQ09SQkFfQ29uc3Ry
VHlwZV9WYXJpYWJsZV9PVVRfYXJnKGNvbnN0IFRfb3V0JiBwKSA6IF9kYXRhKHAuX2RhdGEpIHt9
CiAgaW5saW5lIFRfb3V0JiBvcGVyYXRvcj0oY29uc3QgVF9vdXQmIHApIHsgX2RhdGEgPSBwLl9k
YXRhOyByZXR1cm4gKnRoaXM7IH0KICBpbmxpbmUgVF9vdXQmIG9wZXJhdG9yPShUKiBwKSB7IF9k
YXRhID0gcDsgcmV0dXJuICp0aGlzOyB9CiAgaW5saW5lIG9wZXJhdG9yIFQqJigpIHsgcmV0dXJu
IF9kYXRhOyB9CiAgaW5saW5lIFQqJiBwdHIoKSB7IHJldHVybiBfZGF0YTsgfQogIGlubGluZSBU
KiYgb3BlcmF0b3ItPigpIHsgcmV0dXJuIF9kYXRhOyB9CgogIFQqJiBfZGF0YTsKCnByaXZhdGU6
CiAgX0NPUkJBX0NvbnN0clR5cGVfVmFyaWFibGVfT1VUX2FyZygpOwogIFRfb3V0JiBvcGVyYXRv
cj0oY29uc3QgVF92YXImKTsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+
CmNsYXNzIF9DT1JCQV9BcnJheV9PVVRfYXJnOwoKdGVtcGxhdGUgPGNsYXNzIFRfSGVscGVyLCBj
bGFzcyBUPgpjbGFzcyBfQ09SQkFfQXJyYXlfVmFyIHsKcHVibGljOgogIHR5cGVkZWYgX0NPUkJB
X0FycmF5X1ZhcjxUX0hlbHBlcixUPiBUX3ZhcjsKCiAgaW5saW5lIF9DT1JCQV9BcnJheV9WYXIg
KCkgeyBwZF9kYXRhID0gMDsgfQogIGlubGluZSBfQ09SQkFfQXJyYXlfVmFyIChUKiBwKSB7IHBk
X2RhdGEgPSBwOyB9CiAgaW5saW5lIF9DT1JCQV9BcnJheV9WYXIgKGNvbnN0IFRfdmFyJiBwKSB7
CiAgICBpZiggIXAucGRfZGF0YSApIHBkX2RhdGEgPSAwOwogICAgZWxzZSB7CiAgICAgIHBkX2Rh
dGEgPSBUX0hlbHBlcjo6ZHVwKHAucGRfZGF0YSk7CiAgICAgIGlmKCAhcGRfZGF0YSApIF9DT1JC
QV9uZXdfb3BlcmF0b3JfcmV0dXJuX251bGwoKTsKICAgIH0KICB9CgogIGlubGluZSB+X0NPUkJB
X0FycmF5X1ZhcigpIHsgaWYoIHBkX2RhdGEgKSBUX0hlbHBlcjo6ZnJlZShwZF9kYXRhKTsgfQoK
ICBpbmxpbmUgVF92YXImIG9wZXJhdG9yPSAoVCogcCkgewogICAgaWYgKHBkX2RhdGEpIFRfSGVs
cGVyOjpmcmVlKHBkX2RhdGEpOwogICAgcGRfZGF0YSA9IHA7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQoKICBpbmxpbmUgVF92YXImIG9wZXJhdG9yPSAoY29uc3QgVF92YXImIHApIHsKICAgIGlmKCAm
cCA9PSB0aGlzICkgcmV0dXJuICp0aGlzOwogICAgaWYoIHBkX2RhdGEgKSBUX0hlbHBlcjo6ZnJl
ZShwZF9kYXRhKTsKCiAgICBpZiggcC5wZF9kYXRhICkgewogICAgICBwZF9kYXRhID0gVF9IZWxw
ZXI6OmR1cChwLnBkX2RhdGEpOwogICAgICBpZiggIXBkX2RhdGEgKSBfQ09SQkFfbmV3X29wZXJh
dG9yX3JldHVybl9udWxsKCk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgcGRfZGF0YSA9IDA7CiAg
ICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgaW5saW5lIFQmIG9wZXJhdG9yW10gKF9DT1JC
QV9VTG9uZyBpbmRleCkgewogICAgcmV0dXJuICoocGRfZGF0YSArIGluZGV4KTsKICB9CiAgaW5s
aW5lIGNvbnN0IFQmIG9wZXJhdG9yW10gKF9DT1JCQV9VTG9uZyBpbmRleCkgY29uc3QgewogICAg
cmV0dXJuICooKGNvbnN0IFQqKSAocGRfZGF0YSArIGluZGV4KSk7CiAgfQogIGlubGluZSBvcGVy
YXRvciBUKiAoKSBjb25zdCB7IHJldHVybiBwZF9kYXRhOyB9CgoKCgoKCiAgY29uc3QgVCogaW4o
KSBjb25zdCB7IHJldHVybiBwZF9kYXRhOyB9CiAgVCogaW5vdXQoKSB7IHJldHVybiBwZF9kYXRh
OyB9CiAgVComIG91dCgpIHsKICAgIGlmIChwZF9kYXRhKSB7CiAgICAgIFRfSGVscGVyOjpmcmVl
KHBkX2RhdGEpOwogICAgICBwZF9kYXRhID0gMDsKICAgIH0KICAgIHJldHVybiBwZF9kYXRhOwog
IH0KICBUKiBfcmV0bigpIHsgVCogdG1wID0gcGRfZGF0YTsgcGRfZGF0YSA9IDA7IHJldHVybiB0
bXA7IH0KCiAgZnJpZW5kIGNsYXNzIF9DT1JCQV9BcnJheV9PVVRfYXJnPFQsIFRfdmFyPjsKCnBy
aXZhdGU6CiAgVCogcGRfZGF0YTsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92
YXI+CmNsYXNzIF9DT1JCQV9BcnJheV9PVVRfYXJnIHsKcHVibGljOgogIHR5cGVkZWYgX0NPUkJB
X0FycmF5X09VVF9hcmc8VCxUX3Zhcj4gVF9vdXQ7CiAgaW5saW5lIF9DT1JCQV9BcnJheV9PVVRf
YXJnKFQqJiBwKSA6IF9kYXRhKHApIHsgX2RhdGEgPSAwOyB9CiAgaW5saW5lIF9DT1JCQV9BcnJh
eV9PVVRfYXJnKFRfdmFyJiBwKSA6IF9kYXRhKHAucGRfZGF0YSkgewogICAgcCA9IChUKikwOwog
IH0KICBpbmxpbmUgX0NPUkJBX0FycmF5X09VVF9hcmcoY29uc3QgVF9vdXQmIHApIDogX2RhdGEo
cC5fZGF0YSkge30KICBpbmxpbmUgVF9vdXQmIG9wZXJhdG9yPShjb25zdCBUX291dCYgcCkgeyBf
ZGF0YSA9IHAuX2RhdGE7IHJldHVybiAqdGhpczsgfQogIGlubGluZSBUX291dCYgb3BlcmF0b3I9
KFQqIHApIHsgX2RhdGEgPSBwOyByZXR1cm4gKnRoaXM7IH0KICBpbmxpbmUgb3BlcmF0b3IgVCom
KCkgeyByZXR1cm4gX2RhdGE7IH0KICBpbmxpbmUgVComIHB0cigpIHsgcmV0dXJuIF9kYXRhOyB9
CiAgaW5saW5lIFQmIG9wZXJhdG9yW10gKF9DT1JCQV9VTG9uZyBpbmRleCkgewogICAgcmV0dXJu
IF9kYXRhW2luZGV4XTsKICB9CgogIFQqJiBfZGF0YTsKcHJpdmF0ZToKICBfQ09SQkFfQXJyYXlf
T1VUX2FyZygpOwogIFRfb3V0JiBvcGVyYXRvcj0oY29uc3QgVF92YXImKTsKfTsKCgoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgVF9IZWxwZXIsY2xhc3MgVD4KY2xhc3MgX0NPUkJBX0FycmF5X0ZvcmFueSB7
CnB1YmxpYzoKICBpbmxpbmUgX0NPUkJBX0FycmF5X0ZvcmFueSAoKSB7IHBkX2RhdGEgPSAwOyBw
ZF9ub2NvcHkgPSAwOyB9CgoKCgoKICBpbmxpbmUgX0NPUkJBX0FycmF5X0ZvcmFueSAoVCogcCxf
Q09SQkFfQm9vbGVhbiBub2NvcHkgPSAwKSB7CiAgICBwZF9kYXRhID0gcDsgcGRfbm9jb3B5ID0g
bm9jb3B5OwogIH0KCiAgaW5saW5lIF9DT1JCQV9BcnJheV9Gb3JhbnkgKGNvbnN0IF9DT1JCQV9B
cnJheV9Gb3Jhbnk8VF9IZWxwZXIsVD4mIHApIHsKICAgIHBkX2RhdGEgPSBwLnBkX2RhdGE7IHBk
X25vY29weSA9IDA7CiAgfQoKICBpbmxpbmUgfl9DT1JCQV9BcnJheV9Gb3JhbnkoKSB7CgogIH0K
CiAgaW5saW5lIF9DT1JCQV9BcnJheV9Gb3Jhbnk8VF9IZWxwZXIsVD4mIG9wZXJhdG9yPSAoVCog
cCkgewogICAgcGRfZGF0YSA9IHA7IHBkX25vY29weSA9IDA7IHJldHVybiAqdGhpczsKICB9Cgog
IGlubGluZSBUJiBvcGVyYXRvcltdIChfQ09SQkFfVUxvbmcgaW5kZXgpIHsgcmV0dXJuICoocGRf
ZGF0YSArIGluZGV4KTsgfQogIGlubGluZSBjb25zdCBUJiBvcGVyYXRvcltdIChfQ09SQkFfVUxv
bmcgaW5kZXgpIGNvbnN0IHsKICAgIHJldHVybiAqKCAoY29uc3QgVCopIChwZF9kYXRhICsgaW5k
ZXgpKTsKICB9CgogIGlubGluZSBvcGVyYXRvciBUKiAoKSBjb25zdCB7IHJldHVybiBwZF9kYXRh
OyB9CiAgaW5saW5lIG9wZXJhdG9yIGNvbnN0IFQqICgpIGNvbnN0IHsgcmV0dXJuIChjb25zdCBU
KilwZF9kYXRhOyB9CgogIGlubGluZSBUKiBOUF9nZXRTbGljZSgpIGNvbnN0IHsgcmV0dXJuIHBk
X2RhdGE7IH0KICBpbmxpbmUgX0NPUkJBX0Jvb2xlYW4gTlBfbm9jb3B5KCkgY29uc3QgeyByZXR1
cm4gcGRfbm9jb3B5OyB9Cgpwcml2YXRlOgogIFQqIHBkX2RhdGE7CiAgX0NPUkJBX0Jvb2xlYW4g
cGRfbm9jb3B5Owp9OwojIDI1NyAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9DT1JCQS5o
IiAyCiMgMSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9zdHJpbmd0eXBlcy5oIiAxCiMg
NjcgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvc3RyaW5ndHlwZXMuaCIKY2xhc3MgX0NP
UkJBX1N0cmluZ19tZW1iZXI7CmNsYXNzIF9DT1JCQV9TdHJpbmdfZWxlbWVudDsKY2xhc3MgX0NP
UkJBX1N0cmluZ19pbm91dDsKY2xhc3MgX0NPUkJBX1N0cmluZ19vdXQ7CgoKCgoKY2xhc3MgX0NP
UkJBX1N0cmluZ192YXIgewpwdWJsaWM6CgoKCgoKICB0eXBlZGVmIGNoYXIqIHB0cl90OwoKICBz
dGF0aWMgaW5saW5lIGNoYXIqIHN0cmluZ19kdXAoY29uc3QgY2hhciogcCkgewogICAgY2hhciog
ciA9IG9tbmk6OmFsbG9jU3RyaW5nKHN0cmxlbihwKSk7CiAgICBzdHJjcHkociwgcCk7CiAgICBy
ZXR1cm4gcjsKICB9CgogIGlubGluZSBfQ09SQkFfU3RyaW5nX3ZhcigpIHsgX2RhdGEgPSAwOyB9
CiAgaW5saW5lIF9DT1JCQV9TdHJpbmdfdmFyKGNoYXIgKnApIHsgX2RhdGEgPSBwOyB9CgogIGlu
bGluZSBfQ09SQkFfU3RyaW5nX3Zhcihjb25zdCBjaGFyKiBwKSB7CiAgICBpZiggcCApIF9kYXRh
ID0gc3RyaW5nX2R1cChwKTsKICAgIGVsc2UgX2RhdGEgPSAwOwogIH0KCiAgaW5saW5lIF9DT1JC
QV9TdHJpbmdfdmFyKGNvbnN0IF9DT1JCQV9TdHJpbmdfdmFyJiBzKSB7CiAgICBpZiggKGNvbnN0
IGNoYXIgKilzICkgX2RhdGEgPSBzdHJpbmdfZHVwKHMpOwogICAgZWxzZSBfZGF0YSA9IDA7CiAg
fQoKICBpbmxpbmUgX0NPUkJBX1N0cmluZ192YXIoY29uc3QgX0NPUkJBX1N0cmluZ19tZW1iZXIm
IHMpOwoKICBpbmxpbmUgX0NPUkJBX1N0cmluZ192YXIoY29uc3QgX0NPUkJBX1N0cmluZ19lbGVt
ZW50JiBzKTsKCiAgaW5saW5lIH5fQ09SQkFfU3RyaW5nX3ZhcigpIHsKICAgIG9tbmk6OmZyZWVT
dHJpbmcoX2RhdGEpOwogIH0KCiAgaW5saW5lIF9DT1JCQV9TdHJpbmdfdmFyJiBvcGVyYXRvcj0o
Y2hhciogcCkgewogICAgb21uaTo6ZnJlZVN0cmluZyhfZGF0YSk7CiAgICBfZGF0YSA9IHA7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgX0NPUkJBX1N0cmluZ192YXImIG9wZXJhdG9y
PShjb25zdCBjaGFyKiBwKSB7CiAgICBvbW5pOjpmcmVlU3RyaW5nKF9kYXRhKTsKICAgIF9kYXRh
ID0gMDsKICAgIGlmIChwKSBfZGF0YSA9IHN0cmluZ19kdXAocCk7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQoKICBpbmxpbmUgX0NPUkJBX1N0cmluZ192YXImIG9wZXJhdG9yPShjb25zdCBfQ09SQkFf
U3RyaW5nX3ZhciYgcykgewogICAgaWYgKCZzICE9IHRoaXMpIHsKICAgICAgb21uaTo6ZnJlZVN0
cmluZyhfZGF0YSk7CiAgICAgIF9kYXRhID0gMDsKICAgICAgaWYoIChjb25zdCBjaGFyKilzICkg
X2RhdGEgPSBzdHJpbmdfZHVwKHMpOwogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5s
aW5lIF9DT1JCQV9TdHJpbmdfdmFyJiBvcGVyYXRvcj0oY29uc3QgX0NPUkJBX1N0cmluZ19tZW1i
ZXImIHMpOwoKICBpbmxpbmUgX0NPUkJBX1N0cmluZ192YXImIG9wZXJhdG9yPShjb25zdCBfQ09S
QkFfU3RyaW5nX2VsZW1lbnQmIHMpOwoKCiAgaW5saW5lIG9wZXJhdG9yIGNoYXIqICgpIHsgcmV0
dXJuIF9kYXRhOyB9CiAgaW5saW5lIG9wZXJhdG9yIGNvbnN0IGNoYXIqICgpIGNvbnN0IHsgcmV0
dXJuIF9kYXRhOyB9CgoKCgogIGlubGluZSBjaGFyJiBvcGVyYXRvcltdIChfQ09SQkFfVUxvbmcg
aW5kZXgpIHsKICAgIGlmICghX2RhdGEgfHwgKF9DT1JCQV9VTG9uZylzdHJsZW4oX2RhdGEpIDwg
aW5kZXgpIHsKICAgICAgX0NPUkJBX2JvdW5kX2NoZWNrX2Vycm9yKCk7CiAgICB9CiAgICByZXR1
cm4gX2RhdGFbaW5kZXhdOwogIH0KCiAgaW5saW5lIGNoYXIgb3BlcmF0b3JbXSAoX0NPUkJBX1VM
b25nIGluZGV4KSBjb25zdCB7CiAgICBpZiAoIV9kYXRhIHx8IChfQ09SQkFfVUxvbmcpc3RybGVu
KF9kYXRhKSA8IGluZGV4KSB7CiAgICAgIF9DT1JCQV9ib3VuZF9jaGVja19lcnJvcigpOwogICAg
fQogICAgcmV0dXJuIF9kYXRhW2luZGV4XTsKICB9CgogIGlubGluZSBjb25zdCBjaGFyKiBpbigp
IGNvbnN0IHsgcmV0dXJuIF9kYXRhOyB9CiAgaW5saW5lIGNoYXIqJiBpbm91dCgpIHsgcmV0dXJu
IF9kYXRhOyB9CiAgaW5saW5lIGNoYXIqJiBvdXQoKSB7CiAgICBpZiggX2RhdGEgKXsKICAgICAg
b21uaTo6ZnJlZVN0cmluZyhfZGF0YSk7CiAgICAgIF9kYXRhID0gMDsKICAgIH0KICAgIHJldHVy
biBfZGF0YTsKICB9CiAgaW5saW5lIGNoYXIqIF9yZXRuKCkgewogICAgY2hhciogdG1wID0gX2Rh
dGE7CiAgICBfZGF0YSA9IDA7CiAgICByZXR1cm4gdG1wOwogIH0KCiAgZnJpZW5kIGNsYXNzIF9D
T1JCQV9TdHJpbmdfaW5vdXQ7CiAgZnJpZW5kIGNsYXNzIF9DT1JCQV9TdHJpbmdfb3V0OwoKcHJp
dmF0ZToKICBjaGFyKiBfZGF0YTsKfTsKCgoKCgpjbGFzcyBfQ09SQkFfU3RyaW5nX21lbWJlciB7
CnB1YmxpYzoKICB0eXBlZGVmIGNoYXIqIHB0cl90OwoKICBpbmxpbmUgX0NPUkJBX1N0cmluZ19t
ZW1iZXIoKQogICAgOiBfcHRyKChjaGFyKikgb21uaTo6ZW1wdHlfc3RyaW5nKSB7fQoKICBpbmxp
bmUgX0NPUkJBX1N0cmluZ19tZW1iZXIoY29uc3QgX0NPUkJBX1N0cmluZ19tZW1iZXImIHMpCiAg
ICAgICAgICAgOiBfcHRyKChjaGFyKilvbW5pOjplbXB0eV9zdHJpbmcpIHsKICAgIGlmIChzLl9w
dHIgJiYgcy5fcHRyICE9IG9tbmk6OmVtcHR5X3N0cmluZykKICAgICAgX3B0ciA9IF9DT1JCQV9T
dHJpbmdfdmFyOjpzdHJpbmdfZHVwKHMuX3B0cik7CiAgfQoKICBpbmxpbmUgfl9DT1JCQV9TdHJp
bmdfbWVtYmVyKCkgewogICAgb21uaTo6ZnJlZVN0cmluZyhfcHRyKTsKICB9CgogIGlubGluZSBf
Q09SQkFfU3RyaW5nX21lbWJlciYgb3BlcmF0b3I9KGNoYXIqIHMpIHsKICAgIG9tbmk6OmZyZWVT
dHJpbmcoX3B0cik7CiAgICBfcHRyID0gczsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGlu
ZSBfQ09SQkFfU3RyaW5nX21lbWJlciYgb3BlcmF0b3I9IChjb25zdCBjaGFyKiBzKSB7CiAgICBv
bW5pOjpmcmVlU3RyaW5nKF9wdHIpOwogICAgaWYgKHMpCiAgICAgIF9wdHIgPSBfQ09SQkFfU3Ry
aW5nX3Zhcjo6c3RyaW5nX2R1cChzKTsKICAgIGVsc2UKICAgICAgX3B0ciA9IDA7CiAgICByZXR1
cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgX0NPUkJBX1N0cmluZ19tZW1iZXImIG9wZXJhdG9yPShj
b25zdCBfQ09SQkFfU3RyaW5nX21lbWJlciYgcykgewogICAgaWYgKCZzICE9IHRoaXMpIHsKICAg
ICAgb21uaTo6ZnJlZVN0cmluZyhfcHRyKTsKICAgICAgaWYgKHMuX3B0ciAmJiBzLl9wdHIgIT0g
b21uaTo6ZW1wdHlfc3RyaW5nKQogICAgICAgIF9wdHIgPSBfQ09SQkFfU3RyaW5nX3Zhcjo6c3Ry
aW5nX2R1cChzLl9wdHIpOwogICAgICBlbHNlCiAgICAgICAgX3B0ciA9IHMuX3B0cjsKICAgIH0K
ICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBfQ09SQkFfU3RyaW5nX21lbWJlciYgb3Bl
cmF0b3I9KGNvbnN0IF9DT1JCQV9TdHJpbmdfdmFyJiBzKSB7CiAgICBvbW5pOjpmcmVlU3RyaW5n
KF9wdHIpOwogICAgaWYoIChjb25zdCBjaGFyKilzICkgewogICAgICBfcHRyID0gX0NPUkJBX1N0
cmluZ192YXI6OnN0cmluZ19kdXAoKGNvbnN0IGNoYXIqKXMpOwogICAgfQogICAgZWxzZSB7CiAg
ICAgIF9wdHIgPSAoY2hhciopIDA7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxp
bmUgX0NPUkJBX1N0cmluZ19tZW1iZXImIG9wZXJhdG9yPShjb25zdCBfQ09SQkFfU3RyaW5nX2Vs
ZW1lbnQmIHMpOwoKICBpbmxpbmUgY2hhciYgb3BlcmF0b3JbXSAoX0NPUkJBX1VMb25nIGluZGV4
KSB7CiAgICBpZiAoIV9wdHIgfHwgKF9DT1JCQV9VTG9uZylzdHJsZW4oX3B0cikgPCBpbmRleCkg
ewogICAgICBfQ09SQkFfYm91bmRfY2hlY2tfZXJyb3IoKTsKICAgIH0KICAgIHJldHVybiBfcHRy
W2luZGV4XTsKICB9CgogIGlubGluZSBjaGFyIG9wZXJhdG9yW10gKF9DT1JCQV9VTG9uZyBpbmRl
eCkgY29uc3QgewogICAgaWYgKCFfcHRyIHx8IChfQ09SQkFfVUxvbmcpc3RybGVuKF9wdHIpIDwg
aW5kZXgpIHsKICAgICAgX0NPUkJBX2JvdW5kX2NoZWNrX2Vycm9yKCk7CiAgICB9CiAgICByZXR1
cm4gX3B0cltpbmRleF07CiAgfQoKCiAgaW5saW5lIG9wZXJhdG9yIGNoYXIqICgpIHsgcmV0dXJu
IF9wdHI7IH0KICBpbmxpbmUgb3BlcmF0b3IgY29uc3QgY2hhciogKCkgY29uc3QgeyByZXR1cm4g
X3B0cjsgfQoKCgoKICBpbmxpbmUgY29uc3QgY2hhciogaW4oKSBjb25zdCB7IHJldHVybiBfcHRy
OyB9CiAgaW5saW5lIGNoYXIqJiBpbm91dCgpIHsgcmV0dXJuIF9wdHI7IH0KICBpbmxpbmUgY2hh
ciomIG91dCgpIHsKICAgIG9tbmk6OmZyZWVTdHJpbmcoX3B0cik7CiAgICBfcHRyID0gMDsKICAg
IHJldHVybiBfcHRyOwogIH0KCiAgaW5saW5lIGNoYXIqIF9yZXRuKCkgewogICAgY2hhciAqdG1w
OwogICAgdG1wID0gX3B0cjsKICAgIF9wdHIgPSAwOwogICAgcmV0dXJuIHRtcDsKICB9CgogIHZv
aWQgb3BlcmF0b3IgPj49IChOZXRCdWZmZXJlZFN0cmVhbSYgcykgY29uc3Q7CiAgdm9pZCBvcGVy
YXRvciA8PD0gKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKTsKICB2b2lkIG9wZXJhdG9yID4+PSAoTWVt
QnVmZmVyZWRTdHJlYW0mIHMpIGNvbnN0OwogIHZvaWQgb3BlcmF0b3IgPDw9IChNZW1CdWZmZXJl
ZFN0cmVhbSYgcyk7CiAgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3QgaW5pdGlhbG9mZnNl
dCkgY29uc3Q7CgogIGlubGluZSBjaGFyKiYgX05QX3JlZigpIHtyZXR1cm4gX3B0cjt9CgogIGNo
YXIqIF9wdHI7Cgp9OwoKCgoKCmNsYXNzIF9DT1JCQV9TdHJpbmdfZWxlbWVudCB7CgpwdWJsaWM6
CgogIGlubGluZSBfQ09SQkFfU3RyaW5nX2VsZW1lbnQoY2hhciomIHAsIF9DT1JCQV9Cb29sZWFu
IHJlbCkKICAgIDogcGRfcmVsKHJlbCksIHBkX2RhdGEocCkge30KCiAgaW5saW5lIF9DT1JCQV9T
dHJpbmdfZWxlbWVudChjb25zdCBfQ09SQkFfU3RyaW5nX2VsZW1lbnQmIHMpCiAgOiBwZF9yZWwo
cy5wZF9yZWwpLCBwZF9kYXRhKHMucGRfZGF0YSkge30KCiAgaW5saW5lIH5fQ09SQkFfU3RyaW5n
X2VsZW1lbnQoKSB7CgogIH0KCiAgaW5saW5lIF9DT1JCQV9TdHJpbmdfZWxlbWVudCYgb3BlcmF0
b3I9KGNoYXIqIHMpIHsKICAgIGlmIChwZF9yZWwpCiAgICAgIG9tbmk6OmZyZWVTdHJpbmcocGRf
ZGF0YSk7CiAgICBwZF9kYXRhID0gczsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBf
Q09SQkFfU3RyaW5nX2VsZW1lbnQmIG9wZXJhdG9yPSAoY29uc3QgY2hhciogcykgewogICAgaWYg
KHBkX3JlbCkgewogICAgICBvbW5pOjpmcmVlU3RyaW5nKHBkX2RhdGEpOwogICAgICBpZiAocykK
ICAgICAgICBwZF9kYXRhID0gX0NPUkJBX1N0cmluZ192YXI6OnN0cmluZ19kdXAocyk7CiAgICAg
IGVsc2UKICAgICAgICBwZF9kYXRhID0gMDsKICAgIH0gZWxzZSB7CiAgICAgIHBkX2RhdGEgPSAo
Y2hhciopczsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBfQ09SQkFfU3Ry
aW5nX2VsZW1lbnQmIG9wZXJhdG9yPShjb25zdCBfQ09SQkFfU3RyaW5nX2VsZW1lbnQmIHMpIHsK
ICAgIGlmICgmcyAhPSB0aGlzKSB7CiAgICAgIGlmIChwZF9yZWwpIHsKICAgICAgICBvbW5pOjpm
cmVlU3RyaW5nKHBkX2RhdGEpOwogICAgICAgIGlmIChzLnBkX2RhdGEgJiYgcy5wZF9kYXRhICE9
IG9tbmk6OmVtcHR5X3N0cmluZykKICAgICAgICAgIHBkX2RhdGEgPSBfQ09SQkFfU3RyaW5nX3Zh
cjo6c3RyaW5nX2R1cChzLnBkX2RhdGEpOwogICAgICAgIGVsc2UKICAgICAgICAgIHBkX2RhdGEg
PSAoY2hhciopcy5wZF9kYXRhOwogICAgICB9IGVsc2UKICAgICAgICBwZF9kYXRhID0gKGNoYXIq
KXMucGRfZGF0YTsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBfQ09SQkFf
U3RyaW5nX2VsZW1lbnQmIG9wZXJhdG9yPShjb25zdCBfQ09SQkFfU3RyaW5nX3ZhciYgcykgewog
ICAgaWYgKHBkX3JlbCkgewogICAgICBvbW5pOjpmcmVlU3RyaW5nKHBkX2RhdGEpOwogICAgICBp
ZiggKGNvbnN0IGNoYXIqKXMgKQogICAgICAgIHBkX2RhdGEgPSBfQ09SQkFfU3RyaW5nX3Zhcjo6
c3RyaW5nX2R1cCgoY29uc3QgY2hhciopcyk7CiAgICAgIGVsc2UKICAgICAgICBwZF9kYXRhID0g
MDsKICAgIH0gZWxzZQogICAgICBwZF9kYXRhID0gKGNoYXIqKShjb25zdCBjaGFyKilzOwogICAg
cmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIF9DT1JCQV9TdHJpbmdfZWxlbWVudCYgb3BlcmF0
b3I9KGNvbnN0IF9DT1JCQV9TdHJpbmdfbWVtYmVyJiBzKSB7CiAgICBpZiAocGRfcmVsKSB7CiAg
ICAgIG9tbmk6OmZyZWVTdHJpbmcocGRfZGF0YSk7CiAgICAgIGlmKCAoY29uc3QgY2hhciopcyAm
JiAoY29uc3QgY2hhciopIHMgIT0gb21uaTo6ZW1wdHlfc3RyaW5nKQogICAgICAgIHBkX2RhdGEg
PSBfQ09SQkFfU3RyaW5nX3Zhcjo6c3RyaW5nX2R1cCgoY29uc3QgY2hhciopcyk7CiAgICAgIGVs
c2UKICAgICAgICBwZF9kYXRhID0gKGNoYXIqKShjb25zdCBjaGFyKilzOwogICAgfSBlbHNlCiAg
ICAgIHBkX2RhdGEgPSAoY2hhciopKGNvbnN0IGNoYXIqKXM7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQoKICBpbmxpbmUgY2hhciYgb3BlcmF0b3JbXSAoX0NPUkJBX1VMb25nIGluZGV4KSB7CiAgICBp
ZiAoISgoY2hhciopcGRfZGF0YSkgfHwgKF9DT1JCQV9VTG9uZylzdHJsZW4ocGRfZGF0YSkgPCBp
bmRleCkgewogICAgICBfQ09SQkFfYm91bmRfY2hlY2tfZXJyb3IoKTsKICAgIH0KICAgIHJldHVy
biBwZF9kYXRhW2luZGV4XTsKICB9CgogIGlubGluZSBjaGFyIG9wZXJhdG9yW10gKF9DT1JCQV9V
TG9uZyBpbmRleCkgY29uc3QgewogICAgaWYgKCEoKGNoYXIqKXBkX2RhdGEpIHx8IChfQ09SQkFf
VUxvbmcpc3RybGVuKHBkX2RhdGEpIDwgaW5kZXgpIHsKICAgICAgX0NPUkJBX2JvdW5kX2NoZWNr
X2Vycm9yKCk7CiAgICB9CiAgICByZXR1cm4gcGRfZGF0YVtpbmRleF07CiAgfQoKCiAgaW5saW5l
IG9wZXJhdG9yIGNoYXIqICgpIHsgcmV0dXJuIHBkX2RhdGE7IH0KICBpbmxpbmUgb3BlcmF0b3Ig
Y29uc3QgY2hhciogKCkgY29uc3QgeyByZXR1cm4gcGRfZGF0YTsgfQoKCgoKICBpbmxpbmUgY29u
c3QgY2hhciogaW4oKSBjb25zdCB7IHJldHVybiBwZF9kYXRhOyB9CiAgaW5saW5lIGNoYXIqJiBp
bm91dCgpIHsgcmV0dXJuIHBkX2RhdGE7IH0KICBpbmxpbmUgY2hhciomIG91dCgpIHsKICAgIGlm
IChwZF9yZWwpIHsKICAgICAgb21uaTo6ZnJlZVN0cmluZyhwZF9kYXRhKTsKICAgICAgcGRfZGF0
YSA9IDA7CiAgICB9CiAgICBlbHNlIHsKICAgICAgcGRfZGF0YSA9IDA7CiAgICB9CiAgICByZXR1
cm4gcGRfZGF0YTsKICB9CiAgaW5saW5lIGNoYXIqIF9yZXRuKCkgewogICAgY2hhciAqdG1wOwog
ICAgaWYgKHBkX3JlbCkgewogICAgICB0bXAgPSBwZF9kYXRhOwogICAgICBwZF9kYXRhID0gMDsK
ICAgIH0KICAgIGVsc2UgewogICAgICB0bXAgPSAoKChjaGFyKilwZF9kYXRhKSA/IF9DT1JCQV9T
dHJpbmdfdmFyOjpzdHJpbmdfZHVwKHBkX2RhdGEpIDogMCk7CiAgICAgIHBkX2RhdGEgPSAwOwog
ICAgfQogICAgcmV0dXJuIHRtcDsKICB9CgoKICBpbmxpbmUgY2hhciomIF9OUF9yZWYoKSBjb25z
dCB7cmV0dXJuIHBkX2RhdGE7fQogIGlubGluZSBfQ09SQkFfQm9vbGVhbiBfTlBfcmVsZWFzZSgp
IGNvbnN0IHtyZXR1cm4gcGRfcmVsO30KCiAgX0NPUkJBX0Jvb2xlYW4gcGRfcmVsOwogIGNoYXIq
JiBwZF9kYXRhOwp9OwojIDQyNiAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9zdHJpbmd0
eXBlcy5oIgppbmxpbmUgX0NPUkJBX1N0cmluZ192YXI6Ol9DT1JCQV9TdHJpbmdfdmFyKGNvbnN0
IF9DT1JCQV9TdHJpbmdfbWVtYmVyJiBzKQp7CiAgaWYgKChjb25zdCBjaGFyKilzKSB7CiAgICBf
ZGF0YSA9IF9DT1JCQV9TdHJpbmdfdmFyOjpzdHJpbmdfZHVwKHMpOwogIH0KICBlbHNlCiAgICBf
ZGF0YSA9IDA7Cn0KCmlubGluZSBfQ09SQkFfU3RyaW5nX3Zhcjo6X0NPUkJBX1N0cmluZ192YXIo
Y29uc3QgX0NPUkJBX1N0cmluZ19lbGVtZW50JiBzKQp7CiAgaWYgKChjb25zdCBjaGFyKilzKSB7
CiAgICBfZGF0YSA9IF9DT1JCQV9TdHJpbmdfdmFyOjpzdHJpbmdfZHVwKHMpOwogIH0KICBlbHNl
CiAgICBfZGF0YSA9IDA7Cn0KCmlubGluZSBfQ09SQkFfU3RyaW5nX3ZhciYKX0NPUkJBX1N0cmlu
Z192YXI6Om9wZXJhdG9yPSAoY29uc3QgX0NPUkJBX1N0cmluZ19tZW1iZXImIHMpCnsKICBvbW5p
OjpmcmVlU3RyaW5nKF9kYXRhKTsKICBpZiAoKGNvbnN0IGNoYXIqKXMpCiAgICBfZGF0YSA9IF9D
T1JCQV9TdHJpbmdfdmFyOjpzdHJpbmdfZHVwKHMpOwogIGVsc2UKICAgIF9kYXRhID0gMDsKICBy
ZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBfQ09SQkFfU3RyaW5nX3ZhciYKX0NPUkJBX1N0cmluZ192
YXI6Om9wZXJhdG9yPSAoY29uc3QgX0NPUkJBX1N0cmluZ19lbGVtZW50JiBzKQp7CiAgb21uaTo6
ZnJlZVN0cmluZyhfZGF0YSk7CiAgaWYgKChjb25zdCBjaGFyKilzKQogICAgX2RhdGEgPSBfQ09S
QkFfU3RyaW5nX3Zhcjo6c3RyaW5nX2R1cChzKTsKICBlbHNlCiAgICBfZGF0YSA9IDA7CiAgcmV0
dXJuICp0aGlzOwp9CgppbmxpbmUgX0NPUkJBX1N0cmluZ19tZW1iZXImCl9DT1JCQV9TdHJpbmdf
bWVtYmVyOjpvcGVyYXRvcj0oY29uc3QgX0NPUkJBX1N0cmluZ19lbGVtZW50JiBzKSB7CiAgb21u
aTo6ZnJlZVN0cmluZyhfcHRyKTsKICBpZiggKGNvbnN0IGNoYXIqKXMgKQogICAgX3B0ciA9IF9D
T1JCQV9TdHJpbmdfdmFyOjpzdHJpbmdfZHVwKChjb25zdCBjaGFyKilzKTsKICBlbHNlCiAgICBf
cHRyID0gMDsKICByZXR1cm4gKnRoaXM7Cn0KCgoKCgoKY2xhc3MgX0NPUkJBX1N0cmluZ19pbm91
dCB7CnB1YmxpYzoKICBpbmxpbmUgX0NPUkJBX1N0cmluZ19pbm91dChjaGFyKiYgcCkgOiBfZGF0
YShwKSB7fQogIGlubGluZSBfQ09SQkFfU3RyaW5nX2lub3V0KF9DT1JCQV9TdHJpbmdfdmFyJiBw
KSA6IF9kYXRhKHAuX2RhdGEpIHt9CiAgaW5saW5lIF9DT1JCQV9TdHJpbmdfaW5vdXQoX0NPUkJB
X1N0cmluZ19tZW1iZXImIHApIDogX2RhdGEocC5fcHRyKSB7fQogIGlubGluZSBfQ09SQkFfU3Ry
aW5nX2lub3V0KF9DT1JCQV9TdHJpbmdfZWxlbWVudCYgcCkgOiBfZGF0YShwLl9OUF9yZWYoKSkg
ewoKCgoKCgogICAgaWYgKCFwLl9OUF9yZWxlYXNlKCkgJiYgKHAuX05QX3JlZigpKSkgewogICAg
ICBwLl9OUF9yZWYoKSA9ICgocC5fTlBfcmVmKCkpID8KICAgICAgICAgICAgICAgICAgICAgX0NP
UkJBX1N0cmluZ192YXI6OnN0cmluZ19kdXAocC5fTlBfcmVmKCkpIDogMCk7CiAgICB9CiAgfQog
IGlubGluZSB+X0NPUkJBX1N0cmluZ19pbm91dCgpIHt9CgogIGlubGluZSBvcGVyYXRvciBjaGFy
KiYoKSB7IHJldHVybiBfZGF0YTsgfQoKICBjaGFyKiYgX2RhdGE7Cgpwcml2YXRlOgogIF9DT1JC
QV9TdHJpbmdfaW5vdXQoKTsKfTsKCgoKCgpjbGFzcyBfQ09SQkFfU3RyaW5nX291dCB7CnB1Ymxp
YzoKICBpbmxpbmUgX0NPUkJBX1N0cmluZ19vdXQoY2hhciomIHApIDogX2RhdGEocCkgeyBfZGF0
YSA9IDA7IH0KICBpbmxpbmUgX0NPUkJBX1N0cmluZ19vdXQoX0NPUkJBX1N0cmluZ192YXImIHAp
IDogX2RhdGEocC5fZGF0YSkgeyBwID0gKGNoYXIqKTA7IH0KICBpbmxpbmUgX0NPUkJBX1N0cmlu
Z19vdXQoX0NPUkJBX1N0cmluZ19tZW1iZXImIHApIDogX2RhdGEocC5fcHRyKSB7IHAgPSAoY2hh
ciopMDsgfQogIGlubGluZSBfQ09SQkFfU3RyaW5nX291dChfQ09SQkFfU3RyaW5nX2VsZW1lbnQm
IHApIDogX2RhdGEocC5fTlBfcmVmKCkpIHsgcCA9IChjaGFyKikwOyB9CiAgaW5saW5lIH5fQ09S
QkFfU3RyaW5nX291dCgpIHt9CiAgaW5saW5lIF9DT1JCQV9TdHJpbmdfb3V0KGNvbnN0IF9DT1JC
QV9TdHJpbmdfb3V0JiBwKSA6IF9kYXRhKHAuX2RhdGEpIHt9CiAgaW5saW5lIF9DT1JCQV9TdHJp
bmdfb3V0JiBvcGVyYXRvcj0oY29uc3QgX0NPUkJBX1N0cmluZ19vdXQmIHApIHsKICAgIF9kYXRh
ID0gcC5fZGF0YTsgcmV0dXJuICp0aGlzOwogIH0KICBpbmxpbmUgX0NPUkJBX1N0cmluZ19vdXQm
IG9wZXJhdG9yPShjaGFyKiBwKSB7CiAgICBfZGF0YSA9IHA7IHJldHVybiAqdGhpczsKICB9CiAg
aW5saW5lIF9DT1JCQV9TdHJpbmdfb3V0JiBvcGVyYXRvcj0oY29uc3QgY2hhciogcCkgewogICAg
X2RhdGEgPSAoKHApID8gX0NPUkJBX1N0cmluZ192YXI6OnN0cmluZ19kdXAocCkgOiAwKTsgcmV0
dXJuICp0aGlzOwogIH0KCiAgb3BlcmF0b3IgY2hhciomICgpIHsgcmV0dXJuIF9kYXRhOyB9CiAg
Y2hhciomIHB0cigpIHsgcmV0dXJuIF9kYXRhOyB9CgogIGNoYXIqJiBfZGF0YTsKCnByaXZhdGU6
CiAgX0NPUkJBX1N0cmluZ19vdXQoKTsKICBfQ09SQkFfU3RyaW5nX291dCYgb3BlcmF0b3I9KGNv
bnN0IF9DT1JCQV9TdHJpbmdfdmFyJiApOwogIF9DT1JCQV9TdHJpbmdfb3V0JiBvcGVyYXRvcj0o
Y29uc3QgX0NPUkJBX1N0cmluZ19tZW1iZXImICk7CiAgX0NPUkJBX1N0cmluZ19vdXQmIG9wZXJh
dG9yPShjb25zdCBfQ09SQkFfU3RyaW5nX2VsZW1lbnQmICk7Cn07CgoKCgoKY2xhc3MgX0NPUkJB
X1NlcXVlbmNlX19TdHJpbmcKewpwdWJsaWM6CiAgdHlwZWRlZiBfQ09SQkFfU3RyaW5nX2VsZW1l
bnQgRWxlbVQ7CiAgdHlwZWRlZiBfQ09SQkFfU2VxdWVuY2VfX1N0cmluZyBTZXFUOwoKICBpbmxp
bmUgX0NPUkJBX1VMb25nIG1heGltdW0oKSBjb25zdCB7IHJldHVybiBwZF9tYXg7IH0KICBpbmxp
bmUgX0NPUkJBX1VMb25nIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHBkX2xlbjsgfQogIGlubGlu
ZSB2b2lkIGxlbmd0aChfQ09SQkFfVUxvbmcgbGVuKSB7CiAgICBpZiAocGRfYm91bmRlZCAmJiBs
ZW4gPiBwZF9tYXgpIHsKICAgICAgX0NPUkJBX2JvdW5kX2NoZWNrX2Vycm9yKCk7CgogICAgfQoK
CiAgICBmb3IoIF9DT1JCQV9VTG9uZyBpID0gbGVuOyBpIDwgcGRfbGVuOyBpKysgKQogICAgICBv
cGVyYXRvcltdKGkpID0gKGNoYXIqKSBvbW5pOjplbXB0eV9zdHJpbmc7CgogICAgaWYgKGxlbikg
ewoKCiAgICAgIGlmICghcGRfZGF0YSB8fCBsZW4gPiBwZF9tYXgpIHsKICAgICAgICBjb3B5YnVm
ZmVyKCgobGVuID4gcGRfbWF4KSA/IGxlbiA6IHBkX21heCkpOwogICAgICB9CiAgICB9CiAgICBw
ZF9sZW4gPSBsZW47CiAgfQoKICBpbmxpbmUgRWxlbVQgb3BlcmF0b3JbXSAoX0NPUkJBX1VMb25n
IGkpIHsKICAgIGlmKCBpID49IHBkX2xlbiApIF9DT1JCQV9ib3VuZF9jaGVja19lcnJvcigpOwog
ICAgcmV0dXJuIEVsZW1UKHBkX2RhdGFbaV0scGRfcmVsKTsKICB9CiAgaW5saW5lIGNvbnN0IEVs
ZW1UIG9wZXJhdG9yW10gKF9DT1JCQV9VTG9uZyBpKSBjb25zdCB7CiAgICBpZiggaSA+PSBwZF9s
ZW4gKSBfQ09SQkFfYm91bmRfY2hlY2tfZXJyb3IoKTsKICAgIHJldHVybiBFbGVtVChwZF9kYXRh
W2ldLHBkX3JlbCk7CiAgfQoKICBzdGF0aWMgaW5saW5lIGNoYXIqKiBhbGxvY2J1ZihfQ09SQkFf
VUxvbmcgbmVsZW1zKSB7CiAgICBpZiAoIW5lbGVtcykgcmV0dXJuIDA7CiAgICBjaGFyKiogYiA9
IG5ldyBjaGFyKltuZWxlbXMrMl07CiAgICBvbW5pOjpwdHJfYXJpdGhfdCBsID0gbmVsZW1zOwog
ICAgYlswXSA9IChjaGFyKikgKChvbW5pOjpwdHJfYXJpdGhfdCkgMHg1MzUxNTM1NFUpOwogICAg
YlsxXSA9IChjaGFyKikgbDsKICAgIGZvciAoX0NPUkJBX1VMb25nIGluZGV4ID0gMjsgaW5kZXgg
PCAobmVsZW1zKzIpOyBpbmRleCsrKQogICAgICBiW2luZGV4XSA9IChjaGFyKilvbW5pOjplbXB0
eV9zdHJpbmc7CiAgICByZXR1cm4gYisyOwogIH0KCiAgc3RhdGljIGlubGluZSB2b2lkIGZyZWVi
dWYoY2hhcioqIGJ1ZikgewogICAgaWYgKCFidWYpIHJldHVybjsKICAgIGNoYXIqKiBiID0gYnVm
LTI7CiAgICBpZiAoKG9tbmk6OnB0cl9hcml0aF90KWJbMF0gIT0gKChvbW5pOjpwdHJfYXJpdGhf
dCkgMHg1MzUxNTM1NFUpKSB7CiAgICAgIF9DT1JCQV9iYWRfcGFyYW1fZnJlZWJ1ZigpOwogICAg
ICByZXR1cm47CiAgICB9CiAgICBvbW5pOjpwdHJfYXJpdGhfdCBsID0gKG9tbmk6OnB0cl9hcml0
aF90KSBiWzFdOwogICAgZm9yIChfQ09SQkFfVUxvbmcgaSA9IDA7IGkgPCAoX0NPUkJBX1VMb25n
KSBsOyBpKyspIHsKICAgICAgb21uaTo6ZnJlZVN0cmluZyhidWZbaV0pOwogICAgfQogICAgYlsw
XSA9IChjaGFyKikgMDsKICAgIGRlbGV0ZSBbXSBiOwogIH0KCgoKICBpbmxpbmUgX0NPUkJBX0Jv
b2xlYW4gcmVsZWFzZSgpIGNvbnN0IHsgcmV0dXJuIHBkX3JlbDsgfQoKICBpbmxpbmUgY2hhcioq
IGdldF9idWZmZXIoX0NPUkJBX0Jvb2xlYW4gb3JwaGFuID0gMCkgewogICAgaWYgKHBkX21heCAm
JiAhcGRfZGF0YSkgewogICAgICBjb3B5YnVmZmVyKHBkX21heCk7CiAgICB9CiAgICBpZiAoIW9y
cGhhbikgewogICAgICByZXR1cm4gcGRfZGF0YTsKICAgIH0KICAgIGVsc2UgewogICAgICBpZiAo
IXBkX3JlbCkKICAgICAgICByZXR1cm4gMDsKICAgICAgZWxzZSB7CiAgICAgICAgY2hhcioqIHRt
cCA9IHBkX2RhdGE7CiAgICAgICAgcGRfZGF0YSA9IDA7CiAgICAgICAgaWYgKCFwZF9ib3VuZGVk
KSB7CiAgICAgICAgICBwZF9tYXggPSAwOwogICAgICAgIH0KICAgICAgICBwZF9sZW4gPSAwOwog
ICAgICAgIHBkX3JlbCA9IDE7CiAgICAgICAgcmV0dXJuIHRtcDsKICAgICAgfQogICAgfQogIH0K
CiAgaW5saW5lIGNvbnN0IGNoYXIqIGNvbnN0KiBnZXRfYnVmZmVyKCkgY29uc3QgewogICAgaWYg
KHBkX21heCAmJiAhcGRfZGF0YSkgewoKICAgICAgX0NPUkJBX1NlcXVlbmNlX19TdHJpbmcqIHMg
PSBjb25zdF9jYXN0PF9DT1JCQV9TZXF1ZW5jZV9fU3RyaW5nKj4odGhpcyk7CgoKCiAgICAgIHMt
PmNvcHlidWZmZXIocGRfbWF4KTsKICAgIH0KCiAgICByZXR1cm4gcGRfZGF0YTsKCgoKICB9CgoK
ICBpbmxpbmUgfl9DT1JCQV9TZXF1ZW5jZV9fU3RyaW5nKCkgewogICAgaWYgKHBkX3JlbCAmJiBw
ZF9kYXRhKSBmcmVlYnVmKHBkX2RhdGEpOwogICAgcGRfZGF0YSA9IDA7CiAgfQoKCiAgc2l6ZV90
IF9OUF9hbGlnbmVkU2l6ZShzaXplX3QgaW5pdGlhbG9mZnNldCkgY29uc3Q7CiAgdm9pZCBvcGVy
YXRvciA+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSBjb25zdDsKICB2b2lkIG9wZXJhdG9yIDw8
PSAoTmV0QnVmZmVyZWRTdHJlYW0mIHMpOwogIHZvaWQgb3BlcmF0b3IgPj49IChNZW1CdWZmZXJl
ZFN0cmVhbSYgcykgY29uc3Q7CiAgdm9pZCBvcGVyYXRvciA8PD0gKE1lbUJ1ZmZlcmVkU3RyZWFt
JiBzKTsKCnByb3RlY3RlZDoKICBpbmxpbmUgX0NPUkJBX1NlcXVlbmNlX19TdHJpbmcoKQogICAg
OiBwZF9tYXgoMCksIHBkX2xlbigwKSwgcGRfcmVsKDEpLCBwZF9ib3VuZGVkKDApLCBwZF9kYXRh
KDApIHt9CgogIGlubGluZSBfQ09SQkFfU2VxdWVuY2VfX1N0cmluZyhfQ09SQkFfVUxvbmcgbWF4
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiBib3VuZGVk
PTApCiAgICA6IHBkX21heChtYXgpLCBwZF9sZW4oMCksIHBkX3JlbCgxKSwgcGRfYm91bmRlZChi
b3VuZGVkKSwgcGRfZGF0YSgwKSB7CiAgfQoKICBpbmxpbmUgX0NPUkJBX1NlcXVlbmNlX19TdHJp
bmcoX0NPUkJBX1VMb25nIG1heCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NP
UkJBX1VMb25nIGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcioqIHZh
bHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09SQkFfQm9vbGVhbiByZWxl
YXNlID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xlYW4g
Ym91bmRlZCA9IDApCiAgICAgOiBwZF9tYXgobWF4KSwgcGRfbGVuKGxlbiksIHBkX3JlbChyZWxl
YXNlKSwKICAgICAgIHBkX2JvdW5kZWQoYm91bmRlZCksIHBkX2RhdGEodmFsdWUpIHsKICAgIGlm
IChsZW4gPiBtYXggfHwgKGxlbiAmJiAhdmFsdWUpKSB7CiAgICAgIF9DT1JCQV9ib3VuZF9jaGVj
a19lcnJvcigpOwoKICAgIH0KICB9CgogIGlubGluZSBfQ09SQkFfU2VxdWVuY2VfX1N0cmluZyhj
b25zdCBTZXFUJiBzKQogICAgOiBwZF9tYXgocy5wZF9tYXgpLCBwZF9sZW4oMCksIHBkX3JlbCgx
KSwKICAgICAgcGRfYm91bmRlZChzLnBkX2JvdW5kZWQpLCBwZF9kYXRhKDApIHsKICAgIGxlbmd0
aChzLnBkX2xlbik7CiAgICBmb3IoIF9DT1JCQV9VTG9uZyBpID0gMDsgaSA8IHBkX2xlbjsgaSsr
ICkKICAgICAgb3BlcmF0b3JbXShpKSA9IHNbaV07CiAgfQoKICBpbmxpbmUgU2VxVCYgb3BlcmF0
b3IgPSAoY29uc3QgU2VxVCYgcykgewogICAgbGVuZ3RoKHMucGRfbGVuKTsKICAgIGZvciggX0NP
UkJBX1VMb25nIGkgPSAwOyBpIDwgcGRfbGVuOyBpKysgKQogICAgICBvcGVyYXRvcltdKGkpID0g
c1tpXTsKICAgIHJldHVybiAqdGhpczsKICB9CgoKICBpbmxpbmUgdm9pZCByZXBsYWNlKF9DT1JC
QV9VTG9uZyBtYXgsIF9DT1JCQV9VTG9uZyBsZW4sIGNoYXIqKiBkYXRhLAogICAgICAgICAgICAg
ICAgICAgICAgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSA9IDApIHsKICAgIGlmIChsZW4gPiBtYXgg
fHwgKGxlbiAmJiAhZGF0YSkpIHsKICAgICAgX0NPUkJBX2JvdW5kX2NoZWNrX2Vycm9yKCk7Cgog
ICAgfQogICAgaWYgKHBkX3JlbCAmJiBwZF9kYXRhKSB7CiAgICAgIGZyZWVidWYocGRfZGF0YSk7
CiAgICB9CiAgICBwZF9tYXggPSBtYXg7CiAgICBwZF9sZW4gPSBsZW47CiAgICBwZF9kYXRhID0g
ZGF0YTsKICAgIHBkX3JlbCA9IHJlbGVhc2U7CiAgfQoKCnByaXZhdGU6CgogIHZvaWQgY29weWJ1
ZmZlcihfQ09SQkFfVUxvbmcgbmV3bWF4KSB7CgoKCiAgICBjaGFyKiogbmV3ZGF0YSA9IGFsbG9j
YnVmKG5ld21heCk7CiAgICBpZiAoIW5ld2RhdGEpIHsKICAgICAgX0NPUkJBX25ld19vcGVyYXRv
cl9yZXR1cm5fbnVsbCgpOwoKICAgIH0KICAgIGZvciAodW5zaWduZWQgbG9uZyBpPTA7IGkgPCBw
ZF9sZW47IGkrKykgewogICAgICBpZiAocGRfcmVsKSB7CiAgICAgICAgbmV3ZGF0YVtpXSA9IHBk
X2RhdGFbaV07CiAgICAgICAgcGRfZGF0YVtpXSA9IDA7CiAgICAgIH0KICAgICAgZWxzZSB7CiAg
ICAgICAgbmV3ZGF0YVtpXSA9ICgocGRfZGF0YVtpXSkgPwogICAgICAgICAgICAgICAgICAgICAg
X0NPUkJBX1N0cmluZ192YXI6OnN0cmluZ19kdXAocGRfZGF0YVtpXSkgOiAwKTsKICAgICAgfQog
ICAgfQogICAgaWYgKHBkX3JlbCkgewogICAgICBpZiAocGRfZGF0YSkgZnJlZWJ1ZihwZF9kYXRh
KTsKICAgIH0KICAgIGVsc2UgewogICAgICBwZF9yZWwgPSAxOwogICAgfQogICAgcGRfZGF0YSA9
IG5ld2RhdGE7CiAgICBwZF9tYXggPSBuZXdtYXg7CiAgfQoKICBfQ09SQkFfVUxvbmcgcGRfbWF4
OwogIF9DT1JCQV9VTG9uZyBwZF9sZW47CiAgX0NPUkJBX0Jvb2xlYW4gcGRfcmVsOwogIF9DT1JC
QV9Cb29sZWFuIHBkX2JvdW5kZWQ7CiAgY2hhcioqIHBkX2RhdGE7Cn07CgoKCgoKdGVtcGxhdGU8
aW50IG1heD4KY2xhc3MgX0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfX1N0cmluZwogIDogcHVibGlj
IF9DT1JCQV9TZXF1ZW5jZV9fU3RyaW5nCnsKcHVibGljOgogIHR5cGVkZWYgX0NPUkJBX0JvdW5k
ZWRfU2VxdWVuY2VfX1N0cmluZzxtYXg+IFNlcVQ7CgogIGlubGluZSBfQ09SQkFfQm91bmRlZF9T
ZXF1ZW5jZV9fU3RyaW5nKCkKICAgIDogX0NPUkJBX1NlcXVlbmNlX19TdHJpbmcobWF4LDEpIHt9
CgogIGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5jZV9fU3RyaW5nKF9DT1JCQV9VTG9uZyBs
ZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcioqIHZh
bHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29s
ZWFuIHJlbGVhc2UgPSAwKQogICAgOiBfQ09SQkFfU2VxdWVuY2VfX1N0cmluZyhtYXgsIGxlbmd0
aCwgdmFsdWUsIHJlbGVhc2UsIDEpIHt9CgogIGlubGluZSBfQ09SQkFfQm91bmRlZF9TZXF1ZW5j
ZV9fU3RyaW5nKGNvbnN0IFNlcVQmIHMpCiAgICA6IF9DT1JCQV9TZXF1ZW5jZV9fU3RyaW5nKHMp
IHt9CgogIGlubGluZSB+X0NPUkJBX0JvdW5kZWRfU2VxdWVuY2VfX1N0cmluZygpIHt9CgogIGlu
bGluZSBTZXFUJiBvcGVyYXRvciA9IChjb25zdCBTZXFUJiBzKSB7CiAgICBfQ09SQkFfU2VxdWVu
Y2VfX1N0cmluZzo6b3BlcmF0b3IgPSAocyk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgaW5s
aW5lIHZvaWQgcmVwbGFjZShfQ09SQkFfVUxvbmcgbGVuLCBjaGFyKiogZGF0YSwKICAgICAgICAg
ICAgICAgICAgICAgIF9DT1JCQV9Cb29sZWFuIHJlbGVhc2UgPSAwKSB7CiAgICBfQ09SQkFfU2Vx
dWVuY2VfX1N0cmluZzo6cmVwbGFjZShtYXgsbGVuLGRhdGEscmVsZWFzZSk7CiAgfQp9OwoKCgoK
CmNsYXNzIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX1N0cmluZwogIDogcHVibGljIF9DT1JC
QV9TZXF1ZW5jZV9fU3RyaW5nCnsKcHVibGljOgogIHR5cGVkZWYgX0NPUkJBX1VuYm91bmRlZF9T
ZXF1ZW5jZV9fU3RyaW5nIFNlcVQ7CgogIGlubGluZSBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNl
X19TdHJpbmcoKSB7fQoKICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fU3RyaW5n
KF9DT1JCQV9VTG9uZyBtYXgpIDoKICAgICAgICAgX0NPUkJBX1NlcXVlbmNlX19TdHJpbmcobWF4
KSB7fQoKICBpbmxpbmUgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fU3RyaW5nKF9DT1JCQV9V
TG9uZyBtYXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09S
QkFfVUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhcioqIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0NPUkJBX0Jvb2xlYW4gcmVsZWFzZSA9IDApCiAgICA6IF9DT1JCQV9TZXF1ZW5jZV9fU3Ry
aW5nKG1heCwgbGVuZ3RoLCB2YWx1ZSwgcmVsZWFzZSkge30KCiAgaW5saW5lIF9DT1JCQV9VbmJv
dW5kZWRfU2VxdWVuY2VfX1N0cmluZyhjb25zdCBTZXFUJiBzKQogICAgOiBfQ09SQkFfU2VxdWVu
Y2VfX1N0cmluZyhzKSB7fQoKICBpbmxpbmUgfl9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX1N0
cmluZygpIHt9CgogIGlubGluZSBTZXFUJiBvcGVyYXRvciA9IChjb25zdCBTZXFUJiBzKSB7CiAg
ICBfQ09SQkFfU2VxdWVuY2VfX1N0cmluZzo6b3BlcmF0b3IgPSAocyk7CiAgICByZXR1cm4gKnRo
aXM7CiAgfQoKCiAgaW5saW5lIHZvaWQgcmVwbGFjZShfQ09SQkFfVUxvbmcgbWF4LCBfQ09SQkFf
VUxvbmcgbGVuLCBjaGFyKiogZGF0YSwKICAgICAgICAgICAgICAgICAgICAgIF9DT1JCQV9Cb29s
ZWFuIHJlbGVhc2UgPSAwKSB7CiAgICBfQ09SQkFfU2VxdWVuY2VfX1N0cmluZzo6cmVwbGFjZSht
YXgsbGVuLGRhdGEscmVsZWFzZSk7CiAgfQoKfTsKIyAyNTggIi4uLy4uLy4uLy4uL2luY2x1ZGUv
b21uaU9SQjMvQ09SQkEuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvdXNl
cmV4Y2VwdGlvbi5oIiAxCiMgMjU5ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL0NPUkJB
LmgiIDIKCgoKY2xhc3Mgb21uaU9yYkJvYVNlcnZhbnQ7CgoKbmFtZXNwYWNlIENPUkJBCgp7CgoK
CiAgdHlwZWRlZiB2b2lkKiBTdGF0dXM7CgoKCgoKCgogIHR5cGVkZWYgX0NPUkJBX0Jvb2xlYW4g
Qm9vbGVhbjsKICB0eXBlZGVmIF9DT1JCQV9DaGFyIENoYXI7CiAgdHlwZWRlZiBfQ09SQkFfT2N0
ZXQgT2N0ZXQ7CiAgdHlwZWRlZiBfQ09SQkFfU2hvcnQgU2hvcnQ7CiAgdHlwZWRlZiBfQ09SQkFf
VVNob3J0IFVTaG9ydDsKICB0eXBlZGVmIF9DT1JCQV9Mb25nIExvbmc7CiAgdHlwZWRlZiBfQ09S
QkFfVUxvbmcgVUxvbmc7CgogIHR5cGVkZWYgX0NPUkJBX0xvbmdMb25nIExvbmdMb25nOwogIHR5
cGVkZWYgX0NPUkJBX1VMb25nTG9uZyBVTG9uZ0xvbmc7CgoKICB0eXBlZGVmIF9DT1JCQV9GbG9h
dCBGbG9hdDsKICB0eXBlZGVmIF9DT1JCQV9Eb3VibGUgRG91YmxlOwoKCgoKCiAgdHlwZWRlZiBf
Q09SQkFfQm9vbGVhbiYgQm9vbGVhbl9vdXQ7CiAgdHlwZWRlZiBfQ09SQkFfQ2hhciYgQ2hhcl9v
dXQ7CiAgdHlwZWRlZiBfQ09SQkFfT2N0ZXQmIE9jdGV0X291dDsKICB0eXBlZGVmIF9DT1JCQV9T
aG9ydCYgU2hvcnRfb3V0OwogIHR5cGVkZWYgX0NPUkJBX1VTaG9ydCYgVVNob3J0X291dDsKICB0
eXBlZGVmIF9DT1JCQV9Mb25nJiBMb25nX291dDsKICB0eXBlZGVmIF9DT1JCQV9VTG9uZyYgVUxv
bmdfb3V0OwoKICB0eXBlZGVmIF9DT1JCQV9GbG9hdCYgRmxvYXRfb3V0OwogIHR5cGVkZWYgX0NP
UkJBX0RvdWJsZSYgRG91YmxlX291dDsKCgoKCgoKCiAgICAgICAgICAgICAgICAgICBjaGFyKiBz
dHJpbmdfYWxsb2MoVUxvbmcgbGVuKTsKICAgICAgICAgICAgICAgICAgIHZvaWQgc3RyaW5nX2Zy
ZWUoY2hhciopOwogICAgICAgICAgICAgICAgICAgY2hhciogc3RyaW5nX2R1cChjb25zdCBjaGFy
Kik7CgogIHR5cGVkZWYgX0NPUkJBX1N0cmluZ192YXIgU3RyaW5nX3ZhcjsKICB0eXBlZGVmIF9D
T1JCQV9TdHJpbmdfbWVtYmVyIFN0cmluZ19tZW1iZXI7CiAgdHlwZWRlZiBfQ09SQkFfU3RyaW5n
X2lub3V0IFN0cmluZ19JTk9VVF9hcmc7CiAgdHlwZWRlZiBfQ09SQkFfU3RyaW5nX291dCBTdHJp
bmdfT1VUX2FyZzsKICB0eXBlZGVmIFN0cmluZ19PVVRfYXJnIFN0cmluZ19vdXQ7CgoKCgoKCiAg
Y2xhc3MgT2JqZWN0OwogIGNsYXNzIE9iamVjdF92YXI7CiAgdHlwZWRlZiBPYmplY3QqIE9iamVj
dF9wdHI7CiAgdHlwZWRlZiBPYmplY3RfcHRyIE9iamVjdFJlZjsKCiAgY2xhc3MgVHlwZUNvZGU7
CiAgdHlwZWRlZiBjbGFzcyBUeXBlQ29kZSogVHlwZUNvZGVfcHRyOwogIHR5cGVkZWYgVHlwZUNv
ZGVfcHRyIFR5cGVDb2RlUmVmOwoKCiAgY2xhc3MgQW55IHsKICBwdWJsaWM6CiAgICBBbnkoKTsK
CiAgICB+QW55KCk7CgogICAgQW55KGNvbnN0IEFueSYgYSk7CgogICAgQW55KFR5cGVDb2RlX3B0
ciB0Yywgdm9pZCogdmFsdWUsIEJvb2xlYW4gcmVsZWFzZSA9IDApOwoKCiAgICB2b2lkIG9wZXJh
dG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSYgcykgY29uc3Q7CiAgICB2b2lkIG9wZXJhdG9yPDw9
IChOZXRCdWZmZXJlZFN0cmVhbSYgcyk7CgogICAgdm9pZCBvcGVyYXRvcj4+PSAoTWVtQnVmZmVy
ZWRTdHJlYW0mIHMpIGNvbnN0OwogICAgdm9pZCBvcGVyYXRvcjw8PSAoTWVtQnVmZmVyZWRTdHJl
YW0mIHMpOwoKICAgIHNpemVfdCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90IGluaXRpYWxvZmZzZXQp
IGNvbnN0OwoKICAgIHZvaWQqIE5QX3BkKCkgeyByZXR1cm4gcGRfcHRyOyB9CiAgICB2b2lkKiBO
UF9wZCgpIGNvbnN0IHsgcmV0dXJuIHBkX3B0cjsgfQoKCiAgICB2b2lkIE5QX21hcnNoYWxEYXRh
T25seShOZXRCdWZmZXJlZFN0cmVhbSYgcykgY29uc3Q7CiAgICB2b2lkIE5QX3VubWFyc2hhbERh
dGFPbmx5KE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKTsKCiAgICB2b2lkIE5QX21hcnNoYWxEYXRhT25s
eShNZW1CdWZmZXJlZFN0cmVhbSYgcykgY29uc3Q7CiAgICB2b2lkIE5QX3VubWFyc2hhbERhdGFP
bmx5KE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKTsKCiAgICBzaXplX3QgTlBfYWxpZ25lZERhdGFPbmx5
U2l6ZShzaXplX3QgaW5pdGlhbG9mZnNldCkgY29uc3Q7CgoKICAgIHZvaWQgUFJfcGFja0Zyb20o
VHlwZUNvZGVfcHRyIG5ld3RjLCB2b2lkKiB0Y2Rlc2MpOwogICAgQm9vbGVhbiBQUl91bnBhY2tU
byhUeXBlQ29kZV9wdHIgdGMsIHZvaWQqIHRjZGVzYykgY29uc3Q7CgogICAgdm9pZCAqUFJfZ2V0
Q2FjaGVkRGF0YSgpIGNvbnN0OwogICAgdm9pZCBQUl9zZXRDYWNoZWREYXRhKHZvaWQgKmRhdGEs
IHZvaWQoKmRlc3RydWN0b3IpKHZvaWQgKikpOwoKCiAgICBBbnkmIG9wZXJhdG9yPShjb25zdCBB
bnkmIGEpOwoKICAgIHZvaWQgb3BlcmF0b3I8PD0oU2hvcnQgcyk7CgogICAgdm9pZCBvcGVyYXRv
cjw8PShVU2hvcnQgdSk7CgogICAgdm9pZCBvcGVyYXRvcjw8PShMb25nIGwpOwoKICAgIHZvaWQg
b3BlcmF0b3I8PD0oVUxvbmcgdSk7CgoKICAgIHZvaWQgb3BlcmF0b3I8PD0oRmxvYXQgZik7Cgog
ICAgdm9pZCBvcGVyYXRvcjw8PShEb3VibGUgZCk7CgoKICAgIHZvaWQgb3BlcmF0b3I8PD0oY29u
c3QgQW55JiBhKTsKCiAgICB2b2lkIG9wZXJhdG9yPDw9KEFueSogYSk7CgogICAgdm9pZCBvcGVy
YXRvcjw8PShUeXBlQ29kZV9wdHIgdGMpOwoKICAgIHZvaWQgb3BlcmF0b3I8PD0oT2JqZWN0X3B0
ciBvYmopOwoKICAgIHZvaWQgb3BlcmF0b3I8PD0oY29uc3QgY2hhciogcyk7CgogICAgc3RydWN0
IGZyb21fYm9vbGVhbiB7CiAgICAgIGZyb21fYm9vbGVhbihCb29sZWFuIGIpIDogdmFsKGIpIHt9
CiAgICAgIEJvb2xlYW4gdmFsOwogICAgfTsKCiAgICBzdHJ1Y3QgZnJvbV9vY3RldCB7CiAgICAg
IGZyb21fb2N0ZXQoT2N0ZXQgYikgOiB2YWwoYikge30KICAgICAgT2N0ZXQgdmFsOwogICAgfTsK
CiAgICBzdHJ1Y3QgZnJvbV9jaGFyIHsKICAgICAgZnJvbV9jaGFyKENoYXIgYikgOiB2YWwoYikg
e30KICAgICAgQ2hhciB2YWw7CiAgICB9OwoKICAgIHN0cnVjdCBmcm9tX3N0cmluZyB7CiAgICAg
IGZyb21fc3RyaW5nKGNvbnN0IGNoYXIqIHMsIFVMb25nIGIsIEJvb2xlYW4gbm9jb3B5ID0gMCkK
ICAgICAgICA6IHZhbCgoY2hhciopcyksIGJvdW5kKGIpLCBuYyhub2NvcHkpIHsgfQogICAgICBm
cm9tX3N0cmluZyhjaGFyKiBzLCBVTG9uZyBiLCBCb29sZWFuIG5vY29weSA9IDApCiAgICAgICAg
OiB2YWwocyksIGJvdW5kKGIpLCBuYyhub2NvcHkpIHsgfQoKICAgICAgY2hhciogdmFsOwogICAg
ICBVTG9uZyBib3VuZDsKICAgICAgQm9vbGVhbiBuYzsKICAgIH07CgoKICAgIHZvaWQgb3BlcmF0
b3I8PD0oZnJvbV9ib29sZWFuIGYpOwoKICAgIHZvaWQgb3BlcmF0b3I8PD0oZnJvbV9jaGFyIGMp
OwoKICAgIHZvaWQgb3BlcmF0b3I8PD0oZnJvbV9vY3RldCBvKTsKCiAgICB2b2lkIG9wZXJhdG9y
PDw9KGZyb21fc3RyaW5nIHMpOwoKCiAgICBCb29sZWFuIG9wZXJhdG9yPj49KFNob3J0JiBzKSBj
b25zdDsKCiAgICBCb29sZWFuIG9wZXJhdG9yPj49KFVTaG9ydCYgdSkgY29uc3Q7CgogICAgQm9v
bGVhbiBvcGVyYXRvcj4+PShMb25nJiBsKSBjb25zdDsKCiAgICBCb29sZWFuIG9wZXJhdG9yPj49
KFVMb25nJiB1KSBjb25zdDsKCgogICAgQm9vbGVhbiBvcGVyYXRvcj4+PShGbG9hdCYgZikgY29u
c3Q7CgogICAgQm9vbGVhbiBvcGVyYXRvcj4+PShEb3VibGUmIGQpIGNvbnN0OwoKCiAgICBCb29s
ZWFuIG9wZXJhdG9yPj49KGNvbnN0IEFueSomIGEpIGNvbnN0OwogICAgQm9vbGVhbiBvcGVyYXRv
cj4+PShBbnkqJiBhKSBjb25zdDsKICAgIEJvb2xlYW4gb3BlcmF0b3I+Pj0oQW55JiBhKSBjb25z
dDsKCiAgICBCb29sZWFuIG9wZXJhdG9yPj49KFR5cGVDb2RlX3B0ciYgdGMpIGNvbnN0OwoKICAg
IEJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgY2hhciomIHMpIGNvbnN0OwoKICAgIEJvb2xlYW4g
b3BlcmF0b3I+Pj0oY2hhciomIHMpIGNvbnN0OwoKCiAgICBzdHJ1Y3QgdG9fYm9vbGVhbiB7CiAg
ICAgIHRvX2Jvb2xlYW4oQm9vbGVhbiYgYikgOiByZWYoYikge30KICAgICAgQm9vbGVhbiYgcmVm
OwogICAgfTsKCiAgICBzdHJ1Y3QgdG9fY2hhciB7CiAgICAgIHRvX2NoYXIoQ2hhciYgYikgOiBy
ZWYoYikge30KICAgICAgQ2hhciYgcmVmOwogICAgfTsKCiAgICBzdHJ1Y3QgdG9fb2N0ZXQgewog
ICAgICB0b19vY3RldChPY3RldCYgYikgOiByZWYoYikge30KICAgICAgT2N0ZXQmIHJlZjsKICAg
IH07CgogICAgc3RydWN0IHRvX3N0cmluZyB7CiAgICAgIHRvX3N0cmluZyhjb25zdCBjaGFyKiYg
cywgVUxvbmcgYikgOiB2YWwoKGNoYXIqJilzKSwgYm91bmQoYikgeyB9CiAgICAgIHRvX3N0cmlu
ZyhjaGFyKiYgcywgVUxvbmcgYikgOiB2YWwocyksIGJvdW5kKGIpIHsgfQoKICAgICAgY2hhciom
IHZhbDsKICAgICAgVUxvbmcgYm91bmQ7CiAgICB9OwoKICAgIHN0cnVjdCB0b19vYmplY3Qgewog
ICAgICB0b19vYmplY3QoT2JqZWN0X3B0ciYgb2JqKSA6IHJlZihvYmopIHsgfQogICAgICBPYmpl
Y3RfcHRyJiByZWY7CiAgICB9OwoKICAgIEJvb2xlYW4gb3BlcmF0b3I+Pj0odG9fYm9vbGVhbiBi
KSBjb25zdDsKCiAgICBCb29sZWFuIG9wZXJhdG9yPj49KHRvX2NoYXIgYykgY29uc3Q7CgogICAg
Qm9vbGVhbiBvcGVyYXRvcj4+PSh0b19vY3RldCBvKSBjb25zdDsKCgogICAgQm9vbGVhbiBvcGVy
YXRvcj4+PSh0b19zdHJpbmcgcykgY29uc3Q7CgoKICAgIEJvb2xlYW4gb3BlcmF0b3I+Pj0odG9f
b2JqZWN0IG8pIGNvbnN0OwoKICAgIHZvaWQgcmVwbGFjZShUeXBlQ29kZV9wdHIgVENwLCB2b2lk
KiB2YWx1ZSwgQm9vbGVhbiByZWxlYXNlID0gMCk7CgogICAgVHlwZUNvZGVfcHRyIHR5cGUoKSBj
b25zdDsKICAgIHZvaWQgdHlwZShUeXBlQ29kZV9wdHIpOwoKICAgIGNvbnN0IHZvaWQqIHZhbHVl
KCkgY29uc3Q7CgogIHByaXZhdGU6CiAgICB2b2lkICpwZF9wdHI7CiAgfTsKCgogIGNsYXNzIEFu
eV9PVVRfYXJnOwoKCiAgY2xhc3MgQW55X3ZhciB7CiAgcHVibGljOgogICAgaW5saW5lIEFueV92
YXIoKSB7IHBkX2RhdGEgPSAwOyB9CiAgICBpbmxpbmUgQW55X3ZhcihBbnkqIHApIHsgcGRfZGF0
YSA9IHA7IH0KICAgIGlubGluZSBBbnlfdmFyKGNvbnN0IEFueV92YXImIHApIHsKICAgICAgaWYg
KCFwLnBkX2RhdGEpIHsKICAgICAgICBwZF9kYXRhID0gMDsKICAgICAgICByZXR1cm47CiAgICAg
IH0KICAgICAgZWxzZSB7CiAgICAgICAgcGRfZGF0YSA9IG5ldyBBbnk7CiAgICAgICAgaWYgKCFw
ZF9kYXRhKSB7CiAgICAgICAgICBfQ09SQkFfbmV3X29wZXJhdG9yX3JldHVybl9udWxsKCk7Cgog
ICAgICAgIH0KICAgICAgICAqcGRfZGF0YSA9ICpwLnBkX2RhdGE7CiAgICAgIH0KICAgIH0KCiAg
ICBpbmxpbmUgfkFueV92YXIoKSB7IGlmIChwZF9kYXRhKSBkZWxldGUgcGRfZGF0YTsgfQogICAg
aW5saW5lIEFueV92YXImIG9wZXJhdG9yPSAoQW55KiBwKSB7CiAgICAgIGlmIChwZF9kYXRhKSBk
ZWxldGUgcGRfZGF0YTsKICAgICAgcGRfZGF0YSA9IHA7CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgICBpbmxpbmUgQW55X3ZhciYgb3BlcmF0b3I9IChjb25zdCBBbnlfdmFyJiBwKSB7CiAg
ICAgICAgaWYgKHAucGRfZGF0YSkgewogICAgICAgICAgaWYgKCFwZF9kYXRhKSB7CiAgICAgICAg
ICAgIHBkX2RhdGEgPSBuZXcgQW55OwogICAgICAgICAgICBpZiAoIXBkX2RhdGEpIHsKICAgICAg
ICAgICAgICBfQ09SQkFfbmV3X29wZXJhdG9yX3JldHVybl9udWxsKCk7CgogICAgICAgICAgICB9
CiAgICAgICAgICB9CiAgICAgICAgICAqcGRfZGF0YSA9ICpwLnBkX2RhdGE7CiAgICAgICAgfQog
ICAgICAgIGVsc2UgewogICAgICAgICAgaWYgKHBkX2RhdGEpIGRlbGV0ZSBwZF9kYXRhOwogICAg
ICAgICAgcGRfZGF0YSA9IDA7CiAgICAgICAgfQogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgICBpbmxpbmUgQW55KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gKEFueSopcGRfZGF0
YTsgfQoKCgoKICAgIGlubGluZSBvcGVyYXRvciBjb25zdCBBbnkmICgpIGNvbnN0IHsgcmV0dXJu
ICpwZF9kYXRhOyB9CiAgICBpbmxpbmUgb3BlcmF0b3IgQW55JiAoKSB7IHJldHVybiAqcGRfZGF0
YTsgfQoKCiAgICBpbmxpbmUgY29uc3QgQW55JiBpbigpIGNvbnN0IHsgcmV0dXJuICpwZF9kYXRh
OyB9CiAgICBpbmxpbmUgQW55JiBpbm91dCgpIHsgcmV0dXJuICpwZF9kYXRhOyB9CiAgICBpbmxp
bmUgQW55KiYgb3V0KCkgewogICAgICBpZiggcGRfZGF0YSApewogICAgICAgIGRlbGV0ZSBwZF9k
YXRhOwogICAgICAgIHBkX2RhdGEgPSAwOwogICAgICB9CiAgICAgIHJldHVybiBwZF9kYXRhOwog
ICAgfQogICAgaW5saW5lIEFueSogX3JldG4oKSB7CiAgICAgIEFueSogdG1wID0gcGRfZGF0YTsK
ICAgICAgcGRfZGF0YSA9IDA7CiAgICAgIHJldHVybiB0bXA7CiAgICB9CgoKCiAgICBpbmxpbmUg
dm9pZCBvcGVyYXRvcjw8PShTaG9ydCBzKSB7CiAgICAgICpwZF9kYXRhIDw8PSBzOwogICAgfQoK
ICAgIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KFVTaG9ydCB1KSB7CiAgICAgICpwZF9kYXRhIDw8
PSB1OwogICAgfQoKICAgIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KExvbmcgbCkgewogICAgICAq
cGRfZGF0YSA8PD0gbDsKICAgIH0KCiAgICBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShVTG9uZyB1
KSB7CiAgICAgICpwZF9kYXRhIDw8PSB1OwogICAgfQoKCiAgICBpbmxpbmUgdm9pZCBvcGVyYXRv
cjw8PShGbG9hdCBmKSB7CiAgICAgICpwZF9kYXRhIDw8PSBmOwogICAgfQoKICAgIGlubGluZSB2
b2lkIG9wZXJhdG9yPDw9KERvdWJsZSBkKSB7CiAgICAgICpwZF9kYXRhIDw8PSBkOwogICAgfQoK
CiAgICBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShjb25zdCBBbnkmIGEpIHsKICAgICAgKnBkX2Rh
dGEgPDw9IGE7CiAgICB9CgogICAgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oQW55KiBhKSB7CiAg
ICAgICpwZF9kYXRhIDw8PSBhOwogICAgfQoKICAgIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KFR5
cGVDb2RlX3B0ciB0YykgewogICAgICAqcGRfZGF0YSA8PD0gdGM7CiAgICB9CgogICAgaW5saW5l
IHZvaWQgb3BlcmF0b3I8PD0oT2JqZWN0X3B0ciBvYmopIHsKICAgICAgKnBkX2RhdGEgPDw9IG9i
ajsKICAgIH0KCiAgICBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShjb25zdCBjaGFyKiBzKSB7CiAg
ICAgICpwZF9kYXRhIDw8PSBzOwogICAgfQoKICAgIGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KEFu
eTo6ZnJvbV9ib29sZWFuIGYpIHsKICAgICAgKnBkX2RhdGEgPDw9IGY7CiAgICB9CgogICAgaW5s
aW5lIHZvaWQgb3BlcmF0b3I8PD0oQW55Ojpmcm9tX2NoYXIgYykgewogICAgICAqcGRfZGF0YSA8
PD0gYzsKICAgIH0KCgogICAgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oQW55Ojpmcm9tX29jdGV0
IG8pIHsKICAgICAgKnBkX2RhdGEgPDw9IG87CiAgICB9CgogICAgaW5saW5lIHZvaWQgb3BlcmF0
b3I8PD0oQW55Ojpmcm9tX3N0cmluZyBzKXsKICAgICAgKnBkX2RhdGEgPDw9IHM7CiAgICB9CgoK
CgogICAgaW5saW5lIEJvb2xlYW4gb3BlcmF0b3I+Pj0oU2hvcnQmIHMpIGNvbnN0IHsKICAgICAg
cmV0dXJuICgqcGRfZGF0YSA+Pj0gcyk7CiAgICB9CgogICAgaW5saW5lIEJvb2xlYW4gb3BlcmF0
b3I+Pj0oVVNob3J0JiB1KSBjb25zdCB7CiAgICAgIHJldHVybiAoKnBkX2RhdGEgPj49IHUpOwog
ICAgfQoKICAgIGlubGluZSBCb29sZWFuIG9wZXJhdG9yPj49KExvbmcmIGwpIGNvbnN0IHsKICAg
ICAgcmV0dXJuICgqcGRfZGF0YSA+Pj0gbCk7CiAgICB9CgogICAgaW5saW5lIEJvb2xlYW4gb3Bl
cmF0b3I+Pj0oVUxvbmcmIHUpIGNvbnN0IHsKICAgICAgcmV0dXJuICgqcGRfZGF0YSA+Pj0gdSk7
CiAgICB9CgoKICAgIGlubGluZSBCb29sZWFuIG9wZXJhdG9yPj49KEZsb2F0JiBmKSBjb25zdCB7
CiAgICAgIHJldHVybiAoKnBkX2RhdGEgPj49IGYpOwogICAgICB9CgogICAgaW5saW5lIEJvb2xl
YW4gb3BlcmF0b3I+Pj0oRG91YmxlJiBkKSBjb25zdCB7CiAgICAgIHJldHVybiAoKnBkX2RhdGEg
Pj49IGQpOwogICAgfQoKCgogICAgaW5saW5lIEJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQW55
KiYgYSkgY29uc3QgewogICAgICByZXR1cm4gKCpwZF9kYXRhID4+PSBhKTsKICAgIH0KCiAgICBp
bmxpbmUgQm9vbGVhbiBvcGVyYXRvcj4+PShBbnkqJiBhKSBjb25zdCB7CiAgICAgIHJldHVybiAo
KnBkX2RhdGEgPj49IGEpOwogICAgfQoKICAgIEJvb2xlYW4gb3BlcmF0b3I+Pj0oQW55JiBhKSBj
b25zdCB7CiAgICAgIHJldHVybiAoKnBkX2RhdGEgPj49IGEpOwogICAgfQoKICAgIGlubGluZSBC
b29sZWFuIG9wZXJhdG9yPj49KFR5cGVDb2RlX3B0ciYgdGMpIGNvbnN0IHsKICAgICAgcmV0dXJu
ICgqcGRfZGF0YSA+Pj0gdGMpOwogICAgfQoKICAgIGlubGluZSBCb29sZWFuIG9wZXJhdG9yPj49
KGNvbnN0IGNoYXIqJiBzKSBjb25zdCB7CiAgICAgIHJldHVybiAoKnBkX2RhdGEgPj49IHMpOwog
ICAgfQoKCiAgICBpbmxpbmUgQm9vbGVhbiBvcGVyYXRvcj4+PShjaGFyKiYgcykgY29uc3Qgewog
ICAgICByZXR1cm4gKCpwZF9kYXRhID4+PSBzKTsKICAgIH0KCgogICAgaW5saW5lIEJvb2xlYW4g
b3BlcmF0b3I+Pj0oQW55Ojp0b19ib29sZWFuIGIpIGNvbnN0IHsKICAgICAgcmV0dXJuICgqcGRf
ZGF0YSA+Pj0gYik7CiAgICB9CgogICAgaW5saW5lIEJvb2xlYW4gb3BlcmF0b3I+Pj0oQW55Ojp0
b19jaGFyIGMpIGNvbnN0IHsKICAgICAgcmV0dXJuICgqcGRfZGF0YSA+Pj0gYyk7CiAgICB9Cgog
ICAgaW5saW5lIEJvb2xlYW4gb3BlcmF0b3I+Pj0oQW55Ojp0b19vY3RldCBvKSBjb25zdCB7CiAg
ICAgIHJldHVybiAoKnBkX2RhdGEgPj49IG8pOwogICAgfQoKCiAgICBpbmxpbmUgQm9vbGVhbiBv
cGVyYXRvcj4+PShBbnk6OnRvX3N0cmluZyBzKSBjb25zdCB7CiAgICAgIHJldHVybiAoKnBkX2Rh
dGEgPj49IHMpOwogICAgfQoKCiAgICBpbmxpbmUgQm9vbGVhbiBvcGVyYXRvcj4+PShBbnk6OnRv
X29iamVjdCBvKSBjb25zdCB7CiAgICAgIHJldHVybiAoKnBkX2RhdGEgPj49IG8pOwogICAgfQoK
ICAgIGZyaWVuZCBjbGFzcyBBbnlfT1VUX2FyZzsKCiAgcHJpdmF0ZToKICAgIEFueSogcGRfZGF0
YTsKICB9OwoKCiAgY2xhc3MgQW55X09VVF9hcmcgewogIHB1YmxpYzoKICAgIGlubGluZSBBbnlf
T1VUX2FyZyhBbnkqJiBwKSA6IF9kYXRhKHApIHsgX2RhdGEgPSAoQW55KikgMDsgfQogICAgaW5s
aW5lIEFueV9PVVRfYXJnKEFueV92YXImIHApIDogX2RhdGEocC5wZF9kYXRhKSB7CiAgICAgIHAg
PSAoQW55KikwOwogICAgfQogICAgaW5saW5lIEFueV9PVVRfYXJnKGNvbnN0IEFueV9PVVRfYXJn
JiBwKSA6IF9kYXRhKHAuX2RhdGEpIHt9CiAgICBpbmxpbmUgQW55X09VVF9hcmcmIG9wZXJhdG9y
PShjb25zdCBBbnlfT1VUX2FyZyYgcCkgewogICAgICBfZGF0YSA9IHAuX2RhdGE7IHJldHVybiAq
dGhpczsKICAgIH0KICAgIGlubGluZSBBbnlfT1VUX2FyZyYgb3BlcmF0b3I9KEFueSogcCkgeyBf
ZGF0YSA9IHA7IHJldHVybiAqdGhpczsgfQoKICAgIG9wZXJhdG9yIEFueSomICgpIHsgcmV0dXJu
IF9kYXRhOyB9CiAgICBBbnkqJiBwdHIoKSB7IHJldHVybiBfZGF0YTsgfQoKICAgIEFueSomIF9k
YXRhOwogIHByaXZhdGU6CiAgICBBbnlfT1VUX2FyZygpOwogICAgQW55X09VVF9hcmcmIG9wZXJh
dG9yPShjb25zdCBBbnlfdmFyJik7CiAgfTsKCiAgdHlwZWRlZiBBbnlfT1VUX2FyZyBBbnlfb3V0
OwoKCgoKCgogIGNsYXNzIEV4Y2VwdGlvbiB7CiAgcHVibGljOgogICAgdmlydHVhbCB+RXhjZXB0
aW9uKCk7CgogICAgdmlydHVhbCB2b2lkIF9yYWlzZSgpID0gMDsKCgogICAgc3RhdGljIGlubGlu
ZSBFeGNlcHRpb24qIF9kb3duY2FzdChFeGNlcHRpb24qIGUpIHsgcmV0dXJuIGU7IH0KCgoKICAg
IHN0YXRpYyBpbmxpbmUgY29uc3QgRXhjZXB0aW9uKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9u
KiBlKSB7IHJldHVybiBlOyB9CgoKCiAgICBzdGF0aWMgaW5saW5lIEV4Y2VwdGlvbiogX25hcnJv
dyhFeGNlcHRpb24qIGUpIHsgcmV0dXJuIGU7IH0KCgoKCiAgICBzdGF0aWMgRXhjZXB0aW9uKiBf
ZHVwbGljYXRlKEV4Y2VwdGlvbiogZSk7CgoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX05QX3Jl
cG9JZChpbnQqIHNpemUpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgc2l6ZV90IF9OUF9hbGlnbmVk
U2l6ZShzaXplX3QpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE5ldEJ1ZmZl
cmVkU3RyZWFtJikgY29uc3QgPSAwOwogICAgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE1lbUJ1
ZmZlcmVkU3RyZWFtJikgY29uc3QgPSAwOwoKICAgIHN0YXRpYyBpbmxpbmUgX0NPUkJBX0Jvb2xl
YW4gUFJfaXNfdmFsaWQoRXhjZXB0aW9uKiBwICkgewogICAgICByZXR1cm4gKChwKSA/IChwLT5w
ZF9tYWdpYyA9PSBQUl9tYWdpYykgOiAxKTsKICAgIH0KICAgIHN0YXRpYyBjb25zdCBfQ09SQkFf
VUxvbmcgUFJfbWFnaWM7CgogICAgdHlwZWRlZiB2b2lkICgqaW5zZXJ0RXhjZXB0aW9uVG9Bbnkp
IChBbnkmLCBjb25zdCBFeGNlcHRpb24mKTsKICAgIHR5cGVkZWYgdm9pZCAoKmluc2VydEV4Y2Vw
dGlvblRvQW55TkNQKSAoQW55JiwgY29uc3QgRXhjZXB0aW9uKik7CgogICAgaW5saW5lIGluc2Vy
dEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm4oKSBjb25zdCB7CiAgICAgIHJldHVybiBwZF9p
bnNlcnRUb0FueUZuOwogICAgfQogICAgaW5saW5lIGluc2VydEV4Y2VwdGlvblRvQW55TkNQIGlu
c2VydFRvQW55Rm5OQ1AoKSBjb25zdCB7CiAgICAgIHJldHVybiBwZF9pbnNlcnRUb0FueUZuTkNQ
OwogICAgfQoKICBwcm90ZWN0ZWQ6CiAgICBpbmxpbmUgRXhjZXB0aW9uKCkgOgogICAgICBwZF9p
bnNlcnRUb0FueUZuKDApLAogICAgICBwZF9pbnNlcnRUb0FueUZuTkNQKDApLAogICAgICBwZF9t
YWdpYyhQUl9tYWdpYykKICAgICAge30KICAgIGlubGluZSBFeGNlcHRpb24mIG9wZXJhdG9yID0g
KGNvbnN0IEV4Y2VwdGlvbiYgZXgpIHsKICAgICAgcGRfbWFnaWMgPSBleC5wZF9tYWdpYzsKICAg
ICAgcGRfaW5zZXJ0VG9BbnlGbiA9IGV4LnBkX2luc2VydFRvQW55Rm47CiAgICAgIHBkX2luc2Vy
dFRvQW55Rm5OQ1AgPSBleC5wZF9pbnNlcnRUb0FueUZuTkNQOwogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CiAgICBzdGF0aWMgRXhjZXB0aW9uKiBfTlBfaXNfYShjb25zdCBFeGNlcHRpb24qIGUs
IGNvbnN0IGNoYXIqIHR5cGVJZCk7CgogICAgaW5zZXJ0RXhjZXB0aW9uVG9BbnkgcGRfaW5zZXJ0
VG9BbnlGbjsKICAgIGluc2VydEV4Y2VwdGlvblRvQW55TkNQIHBkX2luc2VydFRvQW55Rm5OQ1A7
CgoKCgoKICAgIGlubGluZSBFeGNlcHRpb24oY29uc3QgRXhjZXB0aW9uJiBleCkgOgogICAgICBw
ZF9pbnNlcnRUb0FueUZuKGV4LnBkX2luc2VydFRvQW55Rm4pLAogICAgICBwZF9pbnNlcnRUb0Fu
eUZuTkNQKGV4LnBkX2luc2VydFRvQW55Rm5OQ1ApLAogICAgICBwZF9tYWdpYyhleC5wZF9tYWdp
YykKICAgICAge30KCiAgcHJpdmF0ZToKICAgIHZpcnR1YWwgRXhjZXB0aW9uKiBfTlBfZHVwbGlj
YXRlKCkgY29uc3QgPSAwOwoKCgogICAgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkg
Y29uc3QgPSAwOwoKCgoKICAgIFVMb25nIHBkX21hZ2ljOwogIH07CgoKCgoKCiAgZW51bSBDb21w
bGV0aW9uU3RhdHVzIHsgQ09NUExFVEVEX1lFUywgQ09NUExFVEVEX05PLCBDT01QTEVURURfTUFZ
QkUgfTsKICBlbnVtIGV4Y2VwdGlvbl90eXBlIHsgTk9fRVhDRVBUSU9OLCBVU0VSX0VYQ0VQVElP
TiwgU1lTVEVNX0VYQ0VQVElPTiB9OwoKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVTG9u
ZwogICAgICAgT01HVk1DSUQgPSAxMzMwNDQ2MzM2OwoKCiAgY2xhc3MgU3lzdGVtRXhjZXB0aW9u
IDogcHVibGljIEV4Y2VwdGlvbiB7CiAgcHVibGljOgogICAgdmlydHVhbCB+U3lzdGVtRXhjZXB0
aW9uKCk7CgoKCgoKCgogICAgaW5saW5lIFVMb25nIG1pbm9yKCkgY29uc3QgeyByZXR1cm4gcGRf
bWlub3I7IH0KICAgIGlubGluZSB2b2lkIG1pbm9yKFVMb25nIG0pIHsgcGRfbWlub3IgPSBtOyB9
CgogICAgaW5saW5lIENvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkKCkgY29uc3QgeyByZXR1cm4g
cGRfc3RhdHVzOyB9CiAgICBpbmxpbmUgdm9pZCBjb21wbGV0ZWQoQ29tcGxldGlvblN0YXR1cyBz
KSB7IHBkX3N0YXR1cyA9IHM7IH0KCiAgICBzdGF0aWMgU3lzdGVtRXhjZXB0aW9uKiBfZG93bmNh
c3QoRXhjZXB0aW9uKik7CiAgICBzdGF0aWMgY29uc3QgU3lzdGVtRXhjZXB0aW9uKiBfZG93bmNh
c3QoY29uc3QgRXhjZXB0aW9uKik7CiAgICBzdGF0aWMgaW5saW5lIFN5c3RlbUV4Y2VwdGlvbiog
X25hcnJvdyhFeGNlcHRpb24qIGUpIHsKICAgICAgcmV0dXJuIF9kb3duY2FzdChlKTsKICAgIH0K
CiAgICBpbmxpbmUgU3lzdGVtRXhjZXB0aW9uKCkgewogICAgICBwZF9taW5vciA9IDA7CiAgICAg
IHBkX3N0YXR1cyA9IENPTVBMRVRFRF9OTzsKICAgIH0KICAgIGlubGluZSBTeXN0ZW1FeGNlcHRp
b24oY29uc3QgU3lzdGVtRXhjZXB0aW9uJiBlKSA6IEV4Y2VwdGlvbihlKSB7CiAgICAgIHBkX21p
bm9yID0gZS5wZF9taW5vcjsKICAgICAgcGRfc3RhdHVzID0gZS5wZF9zdGF0dXM7CiAgICB9CiAg
ICBpbmxpbmUgU3lzdGVtRXhjZXB0aW9uKFVMb25nIG1pbm9yLCBDb21wbGV0aW9uU3RhdHVzIHN0
YXR1cykgewogICAgICBwZF9taW5vciA9IG1pbm9yOwogICAgICBwZF9zdGF0dXMgPSBzdGF0dXM7
CiAgICB9CiAgICBpbmxpbmUgU3lzdGVtRXhjZXB0aW9uJiBvcGVyYXRvcj0oY29uc3QgU3lzdGVt
RXhjZXB0aW9uJiBlKSB7CiAgICAgIEV4Y2VwdGlvbjo6b3BlcmF0b3I9KGUpOwogICAgICBwZF9t
aW5vciA9IGUucGRfbWlub3I7CiAgICAgIHBkX3N0YXR1cyA9IGUucGRfc3RhdHVzOwogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHByb3RlY3RlZDoKICAgIFVMb25nIHBkX21pbm9yOwogICAg
Q29tcGxldGlvblN0YXR1cyBwZF9zdGF0dXM7CgogIHByaXZhdGU6CiAgICB2aXJ0dWFsIHNpemVf
dCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90KSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBfTlBfbWFy
c2hhbChOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIF9OUF9tYXJz
aGFsKE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7CiAgfTsKIyA5MzkgIi4uLy4uLy4uLy4uL2lu
Y2x1ZGUvb21uaU9SQjMvQ09SQkEuaCIKICBjbGFzcyBVTktOT1dOIDogcHVibGljIFN5c3RlbUV4
Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIFVOS05PV04oVUxvbmcgbWlub3IgPSAwLCBDb21wbGV0
aW9uU3RhdHVzIGNvbXBsZXRlZCA9IENPTVBMRVRFRF9OTykgOiBTeXN0ZW1FeGNlcHRpb24gKG1p
bm9yLCBjb21wbGV0ZWQpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2lu
c2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBVTktOT1dOKGNvbnN0
IFVOS05PV04mIGV4KSA6IFN5c3RlbUV4Y2VwdGlvbihleCkge30gaW5saW5lIFVOS05PV04mIG9w
ZXJhdG9yPShjb25zdCBVTktOT1dOJiBleCkgeyBTeXN0ZW1FeGNlcHRpb246Om9wZXJhdG9yPShl
eCk7IHJldHVybiAqdGhpczsgfSB2aXJ0dWFsIH5VTktOT1dOKCk7IHZpcnR1YWwgdm9pZCBfcmFp
c2UoKTsgc3RhdGljIFVOS05PV04qIF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0
IFVOS05PV04qIF9kb3duY2FzdChjb25zdCBFeGNlcHRpb24qKTsgc3RhdGljIGlubGluZSBVTktO
T1dOKiBfbmFycm93KEV4Y2VwdGlvbiogZSkgeyByZXR1cm4gX2Rvd25jYXN0KGUpOyB9IHZpcnR1
YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyBzdGF0aWMgRXhjZXB0
aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMgRXhjZXB0aW9u
OjppbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBwcml2YXRlOiB2aXJ0
dWFsIEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIq
IF9OUF90eXBlSWQoKSBjb25zdDsgfTsgY2xhc3MgQkFEX1BBUkFNIDogcHVibGljIFN5c3RlbUV4
Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIEJBRF9QQVJBTShVTG9uZyBtaW5vciA9IDAsIENvbXBs
ZXRpb25TdGF0dXMgY29tcGxldGVkID0gQ09NUExFVEVEX05PKSA6IFN5c3RlbUV4Y2VwdGlvbiAo
bWlub3IsIGNvbXBsZXRlZCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsgcGRf
aW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIEJBRF9QQVJBTShj
b25zdCBCQURfUEFSQU0mIGV4KSA6IFN5c3RlbUV4Y2VwdGlvbihleCkge30gaW5saW5lIEJBRF9Q
QVJBTSYgb3BlcmF0b3I9KGNvbnN0IEJBRF9QQVJBTSYgZXgpIHsgU3lzdGVtRXhjZXB0aW9uOjpv
cGVyYXRvcj0oZXgpOyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+QkFEX1BBUkFNKCk7IHZpcnR1
YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGljIEJBRF9QQVJBTSogX2Rvd25jYXN0KEV4Y2VwdGlvbiop
OyBzdGF0aWMgY29uc3QgQkFEX1BBUkFNKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKik7IHN0
YXRpYyBpbmxpbmUgQkFEX1BBUkFNKiBfbmFycm93KEV4Y2VwdGlvbiogZSkgeyByZXR1cm4gX2Rv
d25jYXN0KGUpOyB9IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNv
bnN0OyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZu
OyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZu
TkNQOyBwcml2YXRlOiB2aXJ0dWFsIEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2
aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsgfTsgY2xhc3MgTk9fTUVNT1JZ
IDogcHVibGljIFN5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIE5PX01FTU9SWShVTG9u
ZyBtaW5vciA9IDAsIENvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkID0gQ09NUExFVEVEX05PKSA6
IFN5c3RlbUV4Y2VwdGlvbiAobWlub3IsIGNvbXBsZXRlZCkgeyBwZF9pbnNlcnRUb0FueUZuID0g
aW5zZXJ0VG9BbnlGbjsgcGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0g
aW5saW5lIE5PX01FTU9SWShjb25zdCBOT19NRU1PUlkmIGV4KSA6IFN5c3RlbUV4Y2VwdGlvbihl
eCkge30gaW5saW5lIE5PX01FTU9SWSYgb3BlcmF0b3I9KGNvbnN0IE5PX01FTU9SWSYgZXgpIHsg
U3lzdGVtRXhjZXB0aW9uOjpvcGVyYXRvcj0oZXgpOyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+
Tk9fTUVNT1JZKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGljIE5PX01FTU9SWSogX2Rv
d25jYXN0KEV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgTk9fTUVNT1JZKiBfZG93bmNhc3QoY29u
c3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgTk9fTUVNT1JZKiBfbmFycm93KEV4Y2VwdGlv
biogZSkgeyByZXR1cm4gX2Rvd25jYXN0KGUpOyB9IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3Jl
cG9JZChpbnQqIHNpemUpIGNvbnN0OyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNlcHRpb25U
b0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNlcHRpb25Ub0Fu
eU5DUCBpbnNlcnRUb0FueUZuTkNQOyBwcml2YXRlOiB2aXJ0dWFsIEV4Y2VwdGlvbiogX05QX2R1
cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsg
fTsgY2xhc3MgSU1QX0xJTUlUIDogcHVibGljIFN5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogaW5s
aW5lIElNUF9MSU1JVChVTG9uZyBtaW5vciA9IDAsIENvbXBsZXRpb25TdGF0dXMgY29tcGxldGVk
ID0gQ09NUExFVEVEX05PKSA6IFN5c3RlbUV4Y2VwdGlvbiAobWlub3IsIGNvbXBsZXRlZCkgeyBw
ZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsgcGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGlu
c2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIElNUF9MSU1JVChjb25zdCBJTVBfTElNSVQmIGV4KSA6
IFN5c3RlbUV4Y2VwdGlvbihleCkge30gaW5saW5lIElNUF9MSU1JVCYgb3BlcmF0b3I9KGNvbnN0
IElNUF9MSU1JVCYgZXgpIHsgU3lzdGVtRXhjZXB0aW9uOjpvcGVyYXRvcj0oZXgpOyByZXR1cm4g
KnRoaXM7IH0gdmlydHVhbCB+SU1QX0xJTUlUKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3Rh
dGljIElNUF9MSU1JVCogX2Rvd25jYXN0KEV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgSU1QX0xJ
TUlUKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgSU1QX0xJTUlU
KiBfbmFycm93KEV4Y2VwdGlvbiogZSkgeyByZXR1cm4gX2Rvd25jYXN0KGUpOyB9IHZpcnR1YWwg
Y29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyBzdGF0aWMgRXhjZXB0aW9u
OjppbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMgRXhjZXB0aW9uOjpp
bnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBwcml2YXRlOiB2aXJ0dWFs
IEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9O
UF90eXBlSWQoKSBjb25zdDsgfTsgY2xhc3MgQ09NTV9GQUlMVVJFIDogcHVibGljIFN5c3RlbUV4
Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIENPTU1fRkFJTFVSRShVTG9uZyBtaW5vciA9IDAsIENv
bXBsZXRpb25TdGF0dXMgY29tcGxldGVkID0gQ09NUExFVEVEX05PKSA6IFN5c3RlbUV4Y2VwdGlv
biAobWlub3IsIGNvbXBsZXRlZCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsg
cGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIENPTU1fRkFJ
TFVSRShjb25zdCBDT01NX0ZBSUxVUkUmIGV4KSA6IFN5c3RlbUV4Y2VwdGlvbihleCkge30gaW5s
aW5lIENPTU1fRkFJTFVSRSYgb3BlcmF0b3I9KGNvbnN0IENPTU1fRkFJTFVSRSYgZXgpIHsgU3lz
dGVtRXhjZXB0aW9uOjpvcGVyYXRvcj0oZXgpOyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+Q09N
TV9GQUlMVVJFKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGljIENPTU1fRkFJTFVSRSog
X2Rvd25jYXN0KEV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgQ09NTV9GQUlMVVJFKiBfZG93bmNh
c3QoY29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgQ09NTV9GQUlMVVJFKiBfbmFycm93
KEV4Y2VwdGlvbiogZSkgeyByZXR1cm4gX2Rvd25jYXN0KGUpOyB9IHZpcnR1YWwgY29uc3QgY2hh
ciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRF
eGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNl
cHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBwcml2YXRlOiB2aXJ0dWFsIEV4Y2VwdGlv
biogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBlSWQo
KSBjb25zdDsgfTsgY2xhc3MgSU5WX09CSlJFRiA6IHB1YmxpYyBTeXN0ZW1FeGNlcHRpb24geyBw
dWJsaWM6IGlubGluZSBJTlZfT0JKUkVGKFVMb25nIG1pbm9yID0gMCwgQ29tcGxldGlvblN0YXR1
cyBjb21wbGV0ZWQgPSBDT01QTEVURURfTk8pIDogU3lzdGVtRXhjZXB0aW9uIChtaW5vciwgY29t
cGxldGVkKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9pbnNlcnRUb0Fu
eUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgSU5WX09CSlJFRihjb25zdCBJTlZf
T0JKUkVGJiBleCkgOiBTeXN0ZW1FeGNlcHRpb24oZXgpIHt9IGlubGluZSBJTlZfT0JKUkVGJiBv
cGVyYXRvcj0oY29uc3QgSU5WX09CSlJFRiYgZXgpIHsgU3lzdGVtRXhjZXB0aW9uOjpvcGVyYXRv
cj0oZXgpOyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+SU5WX09CSlJFRigpOyB2aXJ0dWFsIHZv
aWQgX3JhaXNlKCk7IHN0YXRpYyBJTlZfT0JKUkVGKiBfZG93bmNhc3QoRXhjZXB0aW9uKik7IHN0
YXRpYyBjb25zdCBJTlZfT0JKUkVGKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKik7IHN0YXRp
YyBpbmxpbmUgSU5WX09CSlJFRiogX25hcnJvdyhFeGNlcHRpb24qIGUpIHsgcmV0dXJuIF9kb3du
Y2FzdChlKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25z
dDsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsg
c3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5D
UDsgcHJpdmF0ZTogdmlydHVhbCBFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsgdmly
dHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IH07IGNsYXNzIE9CSkVDVF9OT1Rf
RVhJU1QgOiBwdWJsaWMgU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgT0JKRUNUX05P
VF9FWElTVChVTG9uZyBtaW5vciA9IDAsIENvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkID0gQ09N
UExFVEVEX05PKSA6IFN5c3RlbUV4Y2VwdGlvbiAobWlub3IsIGNvbXBsZXRlZCkgeyBwZF9pbnNl
cnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsgcGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRv
QW55Rm5OQ1A7IH0gaW5saW5lIE9CSkVDVF9OT1RfRVhJU1QoY29uc3QgT0JKRUNUX05PVF9FWElT
VCYgZXgpIDogU3lzdGVtRXhjZXB0aW9uKGV4KSB7fSBpbmxpbmUgT0JKRUNUX05PVF9FWElTVCYg
b3BlcmF0b3I9KGNvbnN0IE9CSkVDVF9OT1RfRVhJU1QmIGV4KSB7IFN5c3RlbUV4Y2VwdGlvbjo6
b3BlcmF0b3I9KGV4KTsgcmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgfk9CSkVDVF9OT1RfRVhJU1Qo
KTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMgT0JKRUNUX05PVF9FWElTVCogX2Rvd25j
YXN0KEV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgT0JKRUNUX05PVF9FWElTVCogX2Rvd25jYXN0
KGNvbnN0IEV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIE9CSkVDVF9OT1RfRVhJU1QqIF9uYXJy
b3coRXhjZXB0aW9uKiBlKSB7IHJldHVybiBfZG93bmNhc3QoZSk7IH0gdmlydHVhbCBjb25zdCBj
aGFyKiBfTlBfcmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHN0YXRpYyBFeGNlcHRpb246Omluc2Vy
dEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBFeGNlcHRpb246Omluc2VydEV4
Y2VwdGlvblRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHByaXZhdGU6IHZpcnR1YWwgRXhjZXB0
aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJ
ZCgpIGNvbnN0OyB9OyBjbGFzcyBOT19QRVJNSVNTSU9OIDogcHVibGljIFN5c3RlbUV4Y2VwdGlv
biB7IHB1YmxpYzogaW5saW5lIE5PX1BFUk1JU1NJT04oVUxvbmcgbWlub3IgPSAwLCBDb21wbGV0
aW9uU3RhdHVzIGNvbXBsZXRlZCA9IENPTVBMRVRFRF9OTykgOiBTeXN0ZW1FeGNlcHRpb24gKG1p
bm9yLCBjb21wbGV0ZWQpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2lu
c2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBOT19QRVJNSVNTSU9O
KGNvbnN0IE5PX1BFUk1JU1NJT04mIGV4KSA6IFN5c3RlbUV4Y2VwdGlvbihleCkge30gaW5saW5l
IE5PX1BFUk1JU1NJT04mIG9wZXJhdG9yPShjb25zdCBOT19QRVJNSVNTSU9OJiBleCkgeyBTeXN0
ZW1FeGNlcHRpb246Om9wZXJhdG9yPShleCk7IHJldHVybiAqdGhpczsgfSB2aXJ0dWFsIH5OT19Q
RVJNSVNTSU9OKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGljIE5PX1BFUk1JU1NJT04q
IF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IE5PX1BFUk1JU1NJT04qIF9kb3du
Y2FzdChjb25zdCBFeGNlcHRpb24qKTsgc3RhdGljIGlubGluZSBOT19QRVJNSVNTSU9OKiBfbmFy
cm93KEV4Y2VwdGlvbiogZSkgeyByZXR1cm4gX2Rvd25jYXN0KGUpOyB9IHZpcnR1YWwgY29uc3Qg
Y2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyBzdGF0aWMgRXhjZXB0aW9uOjppbnNl
cnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRF
eGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBwcml2YXRlOiB2aXJ0dWFsIEV4Y2Vw
dGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBl
SWQoKSBjb25zdDsgfTsgY2xhc3MgSU5URVJOQUwgOiBwdWJsaWMgU3lzdGVtRXhjZXB0aW9uIHsg
cHVibGljOiBpbmxpbmUgSU5URVJOQUwoVUxvbmcgbWlub3IgPSAwLCBDb21wbGV0aW9uU3RhdHVz
IGNvbXBsZXRlZCA9IENPTVBMRVRFRF9OTykgOiBTeXN0ZW1FeGNlcHRpb24gKG1pbm9yLCBjb21w
bGV0ZWQpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55
Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBJTlRFUk5BTChjb25zdCBJTlRFUk5B
TCYgZXgpIDogU3lzdGVtRXhjZXB0aW9uKGV4KSB7fSBpbmxpbmUgSU5URVJOQUwmIG9wZXJhdG9y
PShjb25zdCBJTlRFUk5BTCYgZXgpIHsgU3lzdGVtRXhjZXB0aW9uOjpvcGVyYXRvcj0oZXgpOyBy
ZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+SU5URVJOQUwoKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgp
OyBzdGF0aWMgSU5URVJOQUwqIF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IElO
VEVSTkFMKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgSU5URVJO
QUwqIF9uYXJyb3coRXhjZXB0aW9uKiBlKSB7IHJldHVybiBfZG93bmNhc3QoZSk7IH0gdmlydHVh
bCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHN0YXRpYyBFeGNlcHRp
b246Omluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBFeGNlcHRpb246
Omluc2VydEV4Y2VwdGlvblRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHByaXZhdGU6IHZpcnR1
YWwgRXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciog
X05QX3R5cGVJZCgpIGNvbnN0OyB9OyBjbGFzcyBNQVJTSEFMIDogcHVibGljIFN5c3RlbUV4Y2Vw
dGlvbiB7IHB1YmxpYzogaW5saW5lIE1BUlNIQUwoVUxvbmcgbWlub3IgPSAwLCBDb21wbGV0aW9u
U3RhdHVzIGNvbXBsZXRlZCA9IENPTVBMRVRFRF9OTykgOiBTeXN0ZW1FeGNlcHRpb24gKG1pbm9y
LCBjb21wbGV0ZWQpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2Vy
dFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBNQVJTSEFMKGNvbnN0IE1B
UlNIQUwmIGV4KSA6IFN5c3RlbUV4Y2VwdGlvbihleCkge30gaW5saW5lIE1BUlNIQUwmIG9wZXJh
dG9yPShjb25zdCBNQVJTSEFMJiBleCkgeyBTeXN0ZW1FeGNlcHRpb246Om9wZXJhdG9yPShleCk7
IHJldHVybiAqdGhpczsgfSB2aXJ0dWFsIH5NQVJTSEFMKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2Uo
KTsgc3RhdGljIE1BUlNIQUwqIF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IE1B
UlNIQUwqIF9kb3duY2FzdChjb25zdCBFeGNlcHRpb24qKTsgc3RhdGljIGlubGluZSBNQVJTSEFM
KiBfbmFycm93KEV4Y2VwdGlvbiogZSkgeyByZXR1cm4gX2Rvd25jYXN0KGUpOyB9IHZpcnR1YWwg
Y29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyBzdGF0aWMgRXhjZXB0aW9u
OjppbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMgRXhjZXB0aW9uOjpp
bnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBwcml2YXRlOiB2aXJ0dWFs
IEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9O
UF90eXBlSWQoKSBjb25zdDsgfTsgY2xhc3MgSU5JVElBTElaRSA6IHB1YmxpYyBTeXN0ZW1FeGNl
cHRpb24geyBwdWJsaWM6IGlubGluZSBJTklUSUFMSVpFKFVMb25nIG1pbm9yID0gMCwgQ29tcGxl
dGlvblN0YXR1cyBjb21wbGV0ZWQgPSBDT01QTEVURURfTk8pIDogU3lzdGVtRXhjZXB0aW9uICht
aW5vciwgY29tcGxldGVkKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9p
bnNlcnRUb0FueUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgSU5JVElBTElaRShj
b25zdCBJTklUSUFMSVpFJiBleCkgOiBTeXN0ZW1FeGNlcHRpb24oZXgpIHt9IGlubGluZSBJTklU
SUFMSVpFJiBvcGVyYXRvcj0oY29uc3QgSU5JVElBTElaRSYgZXgpIHsgU3lzdGVtRXhjZXB0aW9u
OjpvcGVyYXRvcj0oZXgpOyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+SU5JVElBTElaRSgpOyB2
aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0YXRpYyBJTklUSUFMSVpFKiBfZG93bmNhc3QoRXhjZXB0
aW9uKik7IHN0YXRpYyBjb25zdCBJTklUSUFMSVpFKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9u
Kik7IHN0YXRpYyBpbmxpbmUgSU5JVElBTElaRSogX25hcnJvdyhFeGNlcHRpb24qIGUpIHsgcmV0
dXJuIF9kb3duY2FzdChlKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBz
aXplKSBjb25zdDsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0
VG9BbnlGbjsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0
VG9BbnlGbk5DUDsgcHJpdmF0ZTogdmlydHVhbCBFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBj
b25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IH07IGNsYXNzIE5P
X0lNUExFTUVOVCA6IHB1YmxpYyBTeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBOT19J
TVBMRU1FTlQoVUxvbmcgbWlub3IgPSAwLCBDb21wbGV0aW9uU3RhdHVzIGNvbXBsZXRlZCA9IENP
TVBMRVRFRF9OTykgOiBTeXN0ZW1FeGNlcHRpb24gKG1pbm9yLCBjb21wbGV0ZWQpIHsgcGRfaW5z
ZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRU
b0FueUZuTkNQOyB9IGlubGluZSBOT19JTVBMRU1FTlQoY29uc3QgTk9fSU1QTEVNRU5UJiBleCkg
OiBTeXN0ZW1FeGNlcHRpb24oZXgpIHt9IGlubGluZSBOT19JTVBMRU1FTlQmIG9wZXJhdG9yPShj
b25zdCBOT19JTVBMRU1FTlQmIGV4KSB7IFN5c3RlbUV4Y2VwdGlvbjo6b3BlcmF0b3I9KGV4KTsg
cmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgfk5PX0lNUExFTUVOVCgpOyB2aXJ0dWFsIHZvaWQgX3Jh
aXNlKCk7IHN0YXRpYyBOT19JTVBMRU1FTlQqIF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGlj
IGNvbnN0IE5PX0lNUExFTUVOVCogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiopOyBzdGF0aWMg
aW5saW5lIE5PX0lNUExFTUVOVCogX25hcnJvdyhFeGNlcHRpb24qIGUpIHsgcmV0dXJuIF9kb3du
Y2FzdChlKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25z
dDsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsg
c3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5D
UDsgcHJpdmF0ZTogdmlydHVhbCBFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsgdmly
dHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IH07IGNsYXNzIEJBRF9UWVBFQ09E
RSA6IHB1YmxpYyBTeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBCQURfVFlQRUNPREUo
VUxvbmcgbWlub3IgPSAwLCBDb21wbGV0aW9uU3RhdHVzIGNvbXBsZXRlZCA9IENPTVBMRVRFRF9O
TykgOiBTeXN0ZW1FeGNlcHRpb24gKG1pbm9yLCBjb21wbGV0ZWQpIHsgcGRfaW5zZXJ0VG9BbnlG
biA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQ
OyB9IGlubGluZSBCQURfVFlQRUNPREUoY29uc3QgQkFEX1RZUEVDT0RFJiBleCkgOiBTeXN0ZW1F
eGNlcHRpb24oZXgpIHt9IGlubGluZSBCQURfVFlQRUNPREUmIG9wZXJhdG9yPShjb25zdCBCQURf
VFlQRUNPREUmIGV4KSB7IFN5c3RlbUV4Y2VwdGlvbjo6b3BlcmF0b3I9KGV4KTsgcmV0dXJuICp0
aGlzOyB9IHZpcnR1YWwgfkJBRF9UWVBFQ09ERSgpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0
YXRpYyBCQURfVFlQRUNPREUqIF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IEJB
RF9UWVBFQ09ERSogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIEJB
RF9UWVBFQ09ERSogX25hcnJvdyhFeGNlcHRpb24qIGUpIHsgcmV0dXJuIF9kb3duY2FzdChlKTsg
fSB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgc3RhdGlj
IEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIEV4
Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgcHJpdmF0
ZTogdmlydHVhbCBFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25z
dCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IH07IGNsYXNzIEJBRF9PUEVSQVRJT04gOiBwdWJs
aWMgU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgQkFEX09QRVJBVElPTihVTG9uZyBt
aW5vciA9IDAsIENvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkID0gQ09NUExFVEVEX05PKSA6IFN5
c3RlbUV4Y2VwdGlvbiAobWlub3IsIGNvbXBsZXRlZCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5z
ZXJ0VG9BbnlGbjsgcGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5s
aW5lIEJBRF9PUEVSQVRJT04oY29uc3QgQkFEX09QRVJBVElPTiYgZXgpIDogU3lzdGVtRXhjZXB0
aW9uKGV4KSB7fSBpbmxpbmUgQkFEX09QRVJBVElPTiYgb3BlcmF0b3I9KGNvbnN0IEJBRF9PUEVS
QVRJT04mIGV4KSB7IFN5c3RlbUV4Y2VwdGlvbjo6b3BlcmF0b3I9KGV4KTsgcmV0dXJuICp0aGlz
OyB9IHZpcnR1YWwgfkJBRF9PUEVSQVRJT04oKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0
aWMgQkFEX09QRVJBVElPTiogX2Rvd25jYXN0KEV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgQkFE
X09QRVJBVElPTiogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIEJB
RF9PUEVSQVRJT04qIF9uYXJyb3coRXhjZXB0aW9uKiBlKSB7IHJldHVybiBfZG93bmNhc3QoZSk7
IH0gdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHN0YXRp
YyBFeGNlcHRpb246Omluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBF
eGNlcHRpb246Omluc2VydEV4Y2VwdGlvblRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHByaXZh
dGU6IHZpcnR1YWwgRXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7IHZpcnR1YWwgY29u
c3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OyB9OyBjbGFzcyBOT19SRVNPVVJDRVMgOiBwdWJs
aWMgU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgTk9fUkVTT1VSQ0VTKFVMb25nIG1p
bm9yID0gMCwgQ29tcGxldGlvblN0YXR1cyBjb21wbGV0ZWQgPSBDT01QTEVURURfTk8pIDogU3lz
dGVtRXhjZXB0aW9uIChtaW5vciwgY29tcGxldGVkKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNl
cnRUb0FueUZuOyBwZF9pbnNlcnRUb0FueUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxp
bmUgTk9fUkVTT1VSQ0VTKGNvbnN0IE5PX1JFU09VUkNFUyYgZXgpIDogU3lzdGVtRXhjZXB0aW9u
KGV4KSB7fSBpbmxpbmUgTk9fUkVTT1VSQ0VTJiBvcGVyYXRvcj0oY29uc3QgTk9fUkVTT1VSQ0VT
JiBleCkgeyBTeXN0ZW1FeGNlcHRpb246Om9wZXJhdG9yPShleCk7IHJldHVybiAqdGhpczsgfSB2
aXJ0dWFsIH5OT19SRVNPVVJDRVMoKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMgTk9f
UkVTT1VSQ0VTKiBfZG93bmNhc3QoRXhjZXB0aW9uKik7IHN0YXRpYyBjb25zdCBOT19SRVNPVVJD
RVMqIF9kb3duY2FzdChjb25zdCBFeGNlcHRpb24qKTsgc3RhdGljIGlubGluZSBOT19SRVNPVVJD
RVMqIF9uYXJyb3coRXhjZXB0aW9uKiBlKSB7IHJldHVybiBfZG93bmNhc3QoZSk7IH0gdmlydHVh
bCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHN0YXRpYyBFeGNlcHRp
b246Omluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBFeGNlcHRpb246
Omluc2VydEV4Y2VwdGlvblRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHByaXZhdGU6IHZpcnR1
YWwgRXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciog
X05QX3R5cGVJZCgpIGNvbnN0OyB9OyBjbGFzcyBOT19SRVNQT05TRSA6IHB1YmxpYyBTeXN0ZW1F
eGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBOT19SRVNQT05TRShVTG9uZyBtaW5vciA9IDAsIENv
bXBsZXRpb25TdGF0dXMgY29tcGxldGVkID0gQ09NUExFVEVEX05PKSA6IFN5c3RlbUV4Y2VwdGlv
biAobWlub3IsIGNvbXBsZXRlZCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsg
cGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIE5PX1JFU1BP
TlNFKGNvbnN0IE5PX1JFU1BPTlNFJiBleCkgOiBTeXN0ZW1FeGNlcHRpb24oZXgpIHt9IGlubGlu
ZSBOT19SRVNQT05TRSYgb3BlcmF0b3I9KGNvbnN0IE5PX1JFU1BPTlNFJiBleCkgeyBTeXN0ZW1F
eGNlcHRpb246Om9wZXJhdG9yPShleCk7IHJldHVybiAqdGhpczsgfSB2aXJ0dWFsIH5OT19SRVNQ
T05TRSgpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0YXRpYyBOT19SRVNQT05TRSogX2Rvd25j
YXN0KEV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgTk9fUkVTUE9OU0UqIF9kb3duY2FzdChjb25z
dCBFeGNlcHRpb24qKTsgc3RhdGljIGlubGluZSBOT19SRVNQT05TRSogX25hcnJvdyhFeGNlcHRp
b24qIGUpIHsgcmV0dXJuIF9kb3duY2FzdChlKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9y
ZXBvSWQoaW50KiBzaXplKSBjb25zdDsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9u
VG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9B
bnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgcHJpdmF0ZTogdmlydHVhbCBFeGNlcHRpb24qIF9OUF9k
dXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7
IH07IGNsYXNzIFBFUlNJU1RfU1RPUkUgOiBwdWJsaWMgU3lzdGVtRXhjZXB0aW9uIHsgcHVibGlj
OiBpbmxpbmUgUEVSU0lTVF9TVE9SRShVTG9uZyBtaW5vciA9IDAsIENvbXBsZXRpb25TdGF0dXMg
Y29tcGxldGVkID0gQ09NUExFVEVEX05PKSA6IFN5c3RlbUV4Y2VwdGlvbiAobWlub3IsIGNvbXBs
ZXRlZCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsgcGRfaW5zZXJ0VG9BbnlG
bk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIFBFUlNJU1RfU1RPUkUoY29uc3QgUEVS
U0lTVF9TVE9SRSYgZXgpIDogU3lzdGVtRXhjZXB0aW9uKGV4KSB7fSBpbmxpbmUgUEVSU0lTVF9T
VE9SRSYgb3BlcmF0b3I9KGNvbnN0IFBFUlNJU1RfU1RPUkUmIGV4KSB7IFN5c3RlbUV4Y2VwdGlv
bjo6b3BlcmF0b3I9KGV4KTsgcmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgflBFUlNJU1RfU1RPUkUo
KTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMgUEVSU0lTVF9TVE9SRSogX2Rvd25jYXN0
KEV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgUEVSU0lTVF9TVE9SRSogX2Rvd25jYXN0KGNvbnN0
IEV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIFBFUlNJU1RfU1RPUkUqIF9uYXJyb3coRXhjZXB0
aW9uKiBlKSB7IHJldHVybiBfZG93bmNhc3QoZSk7IH0gdmlydHVhbCBjb25zdCBjaGFyKiBfTlBf
cmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHN0YXRpYyBFeGNlcHRpb246Omluc2VydEV4Y2VwdGlv
blRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBFeGNlcHRpb246Omluc2VydEV4Y2VwdGlvblRv
QW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHByaXZhdGU6IHZpcnR1YWwgRXhjZXB0aW9uKiBfTlBf
ZHVwbGljYXRlKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0
OyB9OyBjbGFzcyBCQURfSU5WX09SREVSIDogcHVibGljIFN5c3RlbUV4Y2VwdGlvbiB7IHB1Ymxp
YzogaW5saW5lIEJBRF9JTlZfT1JERVIoVUxvbmcgbWlub3IgPSAwLCBDb21wbGV0aW9uU3RhdHVz
IGNvbXBsZXRlZCA9IENPTVBMRVRFRF9OTykgOiBTeXN0ZW1FeGNlcHRpb24gKG1pbm9yLCBjb21w
bGV0ZWQpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55
Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBCQURfSU5WX09SREVSKGNvbnN0IEJB
RF9JTlZfT1JERVImIGV4KSA6IFN5c3RlbUV4Y2VwdGlvbihleCkge30gaW5saW5lIEJBRF9JTlZf
T1JERVImIG9wZXJhdG9yPShjb25zdCBCQURfSU5WX09SREVSJiBleCkgeyBTeXN0ZW1FeGNlcHRp
b246Om9wZXJhdG9yPShleCk7IHJldHVybiAqdGhpczsgfSB2aXJ0dWFsIH5CQURfSU5WX09SREVS
KCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGljIEJBRF9JTlZfT1JERVIqIF9kb3duY2Fz
dChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IEJBRF9JTlZfT1JERVIqIF9kb3duY2FzdChjb25z
dCBFeGNlcHRpb24qKTsgc3RhdGljIGlubGluZSBCQURfSU5WX09SREVSKiBfbmFycm93KEV4Y2Vw
dGlvbiogZSkgeyByZXR1cm4gX2Rvd25jYXN0KGUpOyB9IHZpcnR1YWwgY29uc3QgY2hhciogX05Q
X3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNlcHRp
b25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNlcHRpb25U
b0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBwcml2YXRlOiB2aXJ0dWFsIEV4Y2VwdGlvbiogX05Q
X2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25z
dDsgfTsgY2xhc3MgVFJBTlNJRU5UIDogcHVibGljIFN5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzog
aW5saW5lIFRSQU5TSUVOVChVTG9uZyBtaW5vciA9IDAsIENvbXBsZXRpb25TdGF0dXMgY29tcGxl
dGVkID0gQ09NUExFVEVEX05PKSA6IFN5c3RlbUV4Y2VwdGlvbiAobWlub3IsIGNvbXBsZXRlZCkg
eyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsgcGRfaW5zZXJ0VG9BbnlGbk5DUCA9
IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIFRSQU5TSUVOVChjb25zdCBUUkFOU0lFTlQmIGV4
KSA6IFN5c3RlbUV4Y2VwdGlvbihleCkge30gaW5saW5lIFRSQU5TSUVOVCYgb3BlcmF0b3I9KGNv
bnN0IFRSQU5TSUVOVCYgZXgpIHsgU3lzdGVtRXhjZXB0aW9uOjpvcGVyYXRvcj0oZXgpOyByZXR1
cm4gKnRoaXM7IH0gdmlydHVhbCB+VFJBTlNJRU5UKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsg
c3RhdGljIFRSQU5TSUVOVCogX2Rvd25jYXN0KEV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgVFJB
TlNJRU5UKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgVFJBTlNJ
RU5UKiBfbmFycm93KEV4Y2VwdGlvbiogZSkgeyByZXR1cm4gX2Rvd25jYXN0KGUpOyB9IHZpcnR1
YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyBzdGF0aWMgRXhjZXB0
aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMgRXhjZXB0aW9u
OjppbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBwcml2YXRlOiB2aXJ0
dWFsIEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIq
IF9OUF90eXBlSWQoKSBjb25zdDsgfTsgY2xhc3MgRlJFRV9NRU0gOiBwdWJsaWMgU3lzdGVtRXhj
ZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgRlJFRV9NRU0oVUxvbmcgbWlub3IgPSAwLCBDb21wbGV0
aW9uU3RhdHVzIGNvbXBsZXRlZCA9IENPTVBMRVRFRF9OTykgOiBTeXN0ZW1FeGNlcHRpb24gKG1p
bm9yLCBjb21wbGV0ZWQpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2lu
c2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBGUkVFX01FTShjb25z
dCBGUkVFX01FTSYgZXgpIDogU3lzdGVtRXhjZXB0aW9uKGV4KSB7fSBpbmxpbmUgRlJFRV9NRU0m
IG9wZXJhdG9yPShjb25zdCBGUkVFX01FTSYgZXgpIHsgU3lzdGVtRXhjZXB0aW9uOjpvcGVyYXRv
cj0oZXgpOyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+RlJFRV9NRU0oKTsgdmlydHVhbCB2b2lk
IF9yYWlzZSgpOyBzdGF0aWMgRlJFRV9NRU0qIF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGlj
IGNvbnN0IEZSRUVfTUVNKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxp
bmUgRlJFRV9NRU0qIF9uYXJyb3coRXhjZXB0aW9uKiBlKSB7IHJldHVybiBfZG93bmNhc3QoZSk7
IH0gdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHN0YXRp
YyBFeGNlcHRpb246Omluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBF
eGNlcHRpb246Omluc2VydEV4Y2VwdGlvblRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHByaXZh
dGU6IHZpcnR1YWwgRXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7IHZpcnR1YWwgY29u
c3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OyB9OyBjbGFzcyBJTlZfSURFTlQgOiBwdWJsaWMg
U3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgSU5WX0lERU5UKFVMb25nIG1pbm9yID0g
MCwgQ29tcGxldGlvblN0YXR1cyBjb21wbGV0ZWQgPSBDT01QTEVURURfTk8pIDogU3lzdGVtRXhj
ZXB0aW9uIChtaW5vciwgY29tcGxldGVkKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0Fu
eUZuOyBwZF9pbnNlcnRUb0FueUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgSU5W
X0lERU5UKGNvbnN0IElOVl9JREVOVCYgZXgpIDogU3lzdGVtRXhjZXB0aW9uKGV4KSB7fSBpbmxp
bmUgSU5WX0lERU5UJiBvcGVyYXRvcj0oY29uc3QgSU5WX0lERU5UJiBleCkgeyBTeXN0ZW1FeGNl
cHRpb246Om9wZXJhdG9yPShleCk7IHJldHVybiAqdGhpczsgfSB2aXJ0dWFsIH5JTlZfSURFTlQo
KTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMgSU5WX0lERU5UKiBfZG93bmNhc3QoRXhj
ZXB0aW9uKik7IHN0YXRpYyBjb25zdCBJTlZfSURFTlQqIF9kb3duY2FzdChjb25zdCBFeGNlcHRp
b24qKTsgc3RhdGljIGlubGluZSBJTlZfSURFTlQqIF9uYXJyb3coRXhjZXB0aW9uKiBlKSB7IHJl
dHVybiBfZG93bmNhc3QoZSk7IH0gdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCog
c2l6ZSkgY29uc3Q7IHN0YXRpYyBFeGNlcHRpb246Omluc2VydEV4Y2VwdGlvblRvQW55IGluc2Vy
dFRvQW55Rm47IHN0YXRpYyBFeGNlcHRpb246Omluc2VydEV4Y2VwdGlvblRvQW55TkNQIGluc2Vy
dFRvQW55Rm5OQ1A7IHByaXZhdGU6IHZpcnR1YWwgRXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkg
Y29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OyB9OyBjbGFzcyBJ
TlZfRkxBRyA6IHB1YmxpYyBTeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBJTlZfRkxB
RyhVTG9uZyBtaW5vciA9IDAsIENvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkID0gQ09NUExFVEVE
X05PKSA6IFN5c3RlbUV4Y2VwdGlvbiAobWlub3IsIGNvbXBsZXRlZCkgeyBwZF9pbnNlcnRUb0Fu
eUZuID0gaW5zZXJ0VG9BbnlGbjsgcGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5O
Q1A7IH0gaW5saW5lIElOVl9GTEFHKGNvbnN0IElOVl9GTEFHJiBleCkgOiBTeXN0ZW1FeGNlcHRp
b24oZXgpIHt9IGlubGluZSBJTlZfRkxBRyYgb3BlcmF0b3I9KGNvbnN0IElOVl9GTEFHJiBleCkg
eyBTeXN0ZW1FeGNlcHRpb246Om9wZXJhdG9yPShleCk7IHJldHVybiAqdGhpczsgfSB2aXJ0dWFs
IH5JTlZfRkxBRygpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0YXRpYyBJTlZfRkxBRyogX2Rv
d25jYXN0KEV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgSU5WX0ZMQUcqIF9kb3duY2FzdChjb25z
dCBFeGNlcHRpb24qKTsgc3RhdGljIGlubGluZSBJTlZfRkxBRyogX25hcnJvdyhFeGNlcHRpb24q
IGUpIHsgcmV0dXJuIF9kb3duY2FzdChlKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBv
SWQoaW50KiBzaXplKSBjb25zdDsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9B
bnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9uVG9BbnlO
Q1AgaW5zZXJ0VG9BbnlGbk5DUDsgcHJpdmF0ZTogdmlydHVhbCBFeGNlcHRpb24qIF9OUF9kdXBs
aWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IH07
IGNsYXNzIElOVEZfUkVQT1MgOiBwdWJsaWMgU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBpbmxp
bmUgSU5URl9SRVBPUyhVTG9uZyBtaW5vciA9IDAsIENvbXBsZXRpb25TdGF0dXMgY29tcGxldGVk
ID0gQ09NUExFVEVEX05PKSA6IFN5c3RlbUV4Y2VwdGlvbiAobWlub3IsIGNvbXBsZXRlZCkgeyBw
ZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsgcGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGlu
c2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIElOVEZfUkVQT1MoY29uc3QgSU5URl9SRVBPUyYgZXgp
IDogU3lzdGVtRXhjZXB0aW9uKGV4KSB7fSBpbmxpbmUgSU5URl9SRVBPUyYgb3BlcmF0b3I9KGNv
bnN0IElOVEZfUkVQT1MmIGV4KSB7IFN5c3RlbUV4Y2VwdGlvbjo6b3BlcmF0b3I9KGV4KTsgcmV0
dXJuICp0aGlzOyB9IHZpcnR1YWwgfklOVEZfUkVQT1MoKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgp
OyBzdGF0aWMgSU5URl9SRVBPUyogX2Rvd25jYXN0KEV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3Qg
SU5URl9SRVBPUyogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIElO
VEZfUkVQT1MqIF9uYXJyb3coRXhjZXB0aW9uKiBlKSB7IHJldHVybiBfZG93bmNhc3QoZSk7IH0g
dmlydHVhbCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHN0YXRpYyBF
eGNlcHRpb246Omluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBFeGNl
cHRpb246Omluc2VydEV4Y2VwdGlvblRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHByaXZhdGU6
IHZpcnR1YWwgRXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7IHZpcnR1YWwgY29uc3Qg
Y2hhciogX05QX3R5cGVJZCgpIGNvbnN0OyB9OyBjbGFzcyBCQURfQ09OVEVYVCA6IHB1YmxpYyBT
eXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBCQURfQ09OVEVYVChVTG9uZyBtaW5vciA9
IDAsIENvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkID0gQ09NUExFVEVEX05PKSA6IFN5c3RlbUV4
Y2VwdGlvbiAobWlub3IsIGNvbXBsZXRlZCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9B
bnlGbjsgcGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIEJB
RF9DT05URVhUKGNvbnN0IEJBRF9DT05URVhUJiBleCkgOiBTeXN0ZW1FeGNlcHRpb24oZXgpIHt9
IGlubGluZSBCQURfQ09OVEVYVCYgb3BlcmF0b3I9KGNvbnN0IEJBRF9DT05URVhUJiBleCkgeyBT
eXN0ZW1FeGNlcHRpb246Om9wZXJhdG9yPShleCk7IHJldHVybiAqdGhpczsgfSB2aXJ0dWFsIH5C
QURfQ09OVEVYVCgpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0YXRpYyBCQURfQ09OVEVYVCog
X2Rvd25jYXN0KEV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgQkFEX0NPTlRFWFQqIF9kb3duY2Fz
dChjb25zdCBFeGNlcHRpb24qKTsgc3RhdGljIGlubGluZSBCQURfQ09OVEVYVCogX25hcnJvdyhF
eGNlcHRpb24qIGUpIHsgcmV0dXJuIF9kb3duY2FzdChlKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIq
IF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhj
ZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0
aW9uVG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgcHJpdmF0ZTogdmlydHVhbCBFeGNlcHRpb24q
IF9OUF9kdXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkg
Y29uc3Q7IH07IGNsYXNzIE9CSl9BREFQVEVSIDogcHVibGljIFN5c3RlbUV4Y2VwdGlvbiB7IHB1
YmxpYzogaW5saW5lIE9CSl9BREFQVEVSKFVMb25nIG1pbm9yID0gMCwgQ29tcGxldGlvblN0YXR1
cyBjb21wbGV0ZWQgPSBDT01QTEVURURfTk8pIDogU3lzdGVtRXhjZXB0aW9uIChtaW5vciwgY29t
cGxldGVkKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9pbnNlcnRUb0Fu
eUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgT0JKX0FEQVBURVIoY29uc3QgT0JK
X0FEQVBURVImIGV4KSA6IFN5c3RlbUV4Y2VwdGlvbihleCkge30gaW5saW5lIE9CSl9BREFQVEVS
JiBvcGVyYXRvcj0oY29uc3QgT0JKX0FEQVBURVImIGV4KSB7IFN5c3RlbUV4Y2VwdGlvbjo6b3Bl
cmF0b3I9KGV4KTsgcmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgfk9CSl9BREFQVEVSKCk7IHZpcnR1
YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGljIE9CSl9BREFQVEVSKiBfZG93bmNhc3QoRXhjZXB0aW9u
Kik7IHN0YXRpYyBjb25zdCBPQkpfQURBUFRFUiogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiop
OyBzdGF0aWMgaW5saW5lIE9CSl9BREFQVEVSKiBfbmFycm93KEV4Y2VwdGlvbiogZSkgeyByZXR1
cm4gX2Rvd25jYXN0KGUpOyB9IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNp
emUpIGNvbnN0OyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRU
b0FueUZuOyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRU
b0FueUZuTkNQOyBwcml2YXRlOiB2aXJ0dWFsIEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNv
bnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsgfTsgY2xhc3MgREFU
QV9DT05WRVJTSU9OIDogcHVibGljIFN5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIERB
VEFfQ09OVkVSU0lPTihVTG9uZyBtaW5vciA9IDAsIENvbXBsZXRpb25TdGF0dXMgY29tcGxldGVk
ID0gQ09NUExFVEVEX05PKSA6IFN5c3RlbUV4Y2VwdGlvbiAobWlub3IsIGNvbXBsZXRlZCkgeyBw
ZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsgcGRfaW5zZXJ0VG9BbnlGbk5DUCA9IGlu
c2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIERBVEFfQ09OVkVSU0lPTihjb25zdCBEQVRBX0NPTlZF
UlNJT04mIGV4KSA6IFN5c3RlbUV4Y2VwdGlvbihleCkge30gaW5saW5lIERBVEFfQ09OVkVSU0lP
TiYgb3BlcmF0b3I9KGNvbnN0IERBVEFfQ09OVkVSU0lPTiYgZXgpIHsgU3lzdGVtRXhjZXB0aW9u
OjpvcGVyYXRvcj0oZXgpOyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+REFUQV9DT05WRVJTSU9O
KCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGljIERBVEFfQ09OVkVSU0lPTiogX2Rvd25j
YXN0KEV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgREFUQV9DT05WRVJTSU9OKiBfZG93bmNhc3Qo
Y29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgREFUQV9DT05WRVJTSU9OKiBfbmFycm93
KEV4Y2VwdGlvbiogZSkgeyByZXR1cm4gX2Rvd25jYXN0KGUpOyB9IHZpcnR1YWwgY29uc3QgY2hh
ciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRF
eGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNl
cHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBwcml2YXRlOiB2aXJ0dWFsIEV4Y2VwdGlv
biogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBlSWQo
KSBjb25zdDsgfTsgY2xhc3MgVFJBTlNBQ1RJT05fUkVRVUlSRUQgOiBwdWJsaWMgU3lzdGVtRXhj
ZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgVFJBTlNBQ1RJT05fUkVRVUlSRUQoVUxvbmcgbWlub3Ig
PSAwLCBDb21wbGV0aW9uU3RhdHVzIGNvbXBsZXRlZCA9IENPTVBMRVRFRF9OTykgOiBTeXN0ZW1F
eGNlcHRpb24gKG1pbm9yLCBjb21wbGV0ZWQpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRv
QW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBU
UkFOU0FDVElPTl9SRVFVSVJFRChjb25zdCBUUkFOU0FDVElPTl9SRVFVSVJFRCYgZXgpIDogU3lz
dGVtRXhjZXB0aW9uKGV4KSB7fSBpbmxpbmUgVFJBTlNBQ1RJT05fUkVRVUlSRUQmIG9wZXJhdG9y
PShjb25zdCBUUkFOU0FDVElPTl9SRVFVSVJFRCYgZXgpIHsgU3lzdGVtRXhjZXB0aW9uOjpvcGVy
YXRvcj0oZXgpOyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+VFJBTlNBQ1RJT05fUkVRVUlSRUQo
KTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMgVFJBTlNBQ1RJT05fUkVRVUlSRUQqIF9k
b3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IFRSQU5TQUNUSU9OX1JFUVVJUkVEKiBf
ZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgVFJBTlNBQ1RJT05fUkVR
VUlSRUQqIF9uYXJyb3coRXhjZXB0aW9uKiBlKSB7IHJldHVybiBfZG93bmNhc3QoZSk7IH0gdmly
dHVhbCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHN0YXRpYyBFeGNl
cHRpb246Omluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBFeGNlcHRp
b246Omluc2VydEV4Y2VwdGlvblRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHByaXZhdGU6IHZp
cnR1YWwgRXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hh
ciogX05QX3R5cGVJZCgpIGNvbnN0OyB9OyBjbGFzcyBUUkFOU0FDVElPTl9ST0xMRURCQUNLIDog
cHVibGljIFN5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIFRSQU5TQUNUSU9OX1JPTExF
REJBQ0soVUxvbmcgbWlub3IgPSAwLCBDb21wbGV0aW9uU3RhdHVzIGNvbXBsZXRlZCA9IENPTVBM
RVRFRF9OTykgOiBTeXN0ZW1FeGNlcHRpb24gKG1pbm9yLCBjb21wbGV0ZWQpIHsgcGRfaW5zZXJ0
VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0Fu
eUZuTkNQOyB9IGlubGluZSBUUkFOU0FDVElPTl9ST0xMRURCQUNLKGNvbnN0IFRSQU5TQUNUSU9O
X1JPTExFREJBQ0smIGV4KSA6IFN5c3RlbUV4Y2VwdGlvbihleCkge30gaW5saW5lIFRSQU5TQUNU
SU9OX1JPTExFREJBQ0smIG9wZXJhdG9yPShjb25zdCBUUkFOU0FDVElPTl9ST0xMRURCQUNLJiBl
eCkgeyBTeXN0ZW1FeGNlcHRpb246Om9wZXJhdG9yPShleCk7IHJldHVybiAqdGhpczsgfSB2aXJ0
dWFsIH5UUkFOU0FDVElPTl9ST0xMRURCQUNLKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3Rh
dGljIFRSQU5TQUNUSU9OX1JPTExFREJBQ0sqIF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGlj
IGNvbnN0IFRSQU5TQUNUSU9OX1JPTExFREJBQ0sqIF9kb3duY2FzdChjb25zdCBFeGNlcHRpb24q
KTsgc3RhdGljIGlubGluZSBUUkFOU0FDVElPTl9ST0xMRURCQUNLKiBfbmFycm93KEV4Y2VwdGlv
biogZSkgeyByZXR1cm4gX2Rvd25jYXN0KGUpOyB9IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3Jl
cG9JZChpbnQqIHNpemUpIGNvbnN0OyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNlcHRpb25U
b0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNlcHRpb25Ub0Fu
eU5DUCBpbnNlcnRUb0FueUZuTkNQOyBwcml2YXRlOiB2aXJ0dWFsIEV4Y2VwdGlvbiogX05QX2R1
cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsg
fTsgY2xhc3MgSU5WQUxJRF9UUkFOU0FDVElPTiA6IHB1YmxpYyBTeXN0ZW1FeGNlcHRpb24geyBw
dWJsaWM6IGlubGluZSBJTlZBTElEX1RSQU5TQUNUSU9OKFVMb25nIG1pbm9yID0gMCwgQ29tcGxl
dGlvblN0YXR1cyBjb21wbGV0ZWQgPSBDT01QTEVURURfTk8pIDogU3lzdGVtRXhjZXB0aW9uICht
aW5vciwgY29tcGxldGVkKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9p
bnNlcnRUb0FueUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgSU5WQUxJRF9UUkFO
U0FDVElPTihjb25zdCBJTlZBTElEX1RSQU5TQUNUSU9OJiBleCkgOiBTeXN0ZW1FeGNlcHRpb24o
ZXgpIHt9IGlubGluZSBJTlZBTElEX1RSQU5TQUNUSU9OJiBvcGVyYXRvcj0oY29uc3QgSU5WQUxJ
RF9UUkFOU0FDVElPTiYgZXgpIHsgU3lzdGVtRXhjZXB0aW9uOjpvcGVyYXRvcj0oZXgpOyByZXR1
cm4gKnRoaXM7IH0gdmlydHVhbCB+SU5WQUxJRF9UUkFOU0FDVElPTigpOyB2aXJ0dWFsIHZvaWQg
X3JhaXNlKCk7IHN0YXRpYyBJTlZBTElEX1RSQU5TQUNUSU9OKiBfZG93bmNhc3QoRXhjZXB0aW9u
Kik7IHN0YXRpYyBjb25zdCBJTlZBTElEX1RSQU5TQUNUSU9OKiBfZG93bmNhc3QoY29uc3QgRXhj
ZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgSU5WQUxJRF9UUkFOU0FDVElPTiogX25hcnJvdyhFeGNl
cHRpb24qIGUpIHsgcmV0dXJuIF9kb3duY2FzdChlKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9O
UF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0
aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIEV4Y2VwdGlvbjo6aW5zZXJ0RXhjZXB0aW9u
VG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgcHJpdmF0ZTogdmlydHVhbCBFeGNlcHRpb24qIF9O
UF9kdXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29u
c3Q7IH07IGNsYXNzIFdST05HX1RSQU5TQUNUSU9OIDogcHVibGljIFN5c3RlbUV4Y2VwdGlvbiB7
IHB1YmxpYzogaW5saW5lIFdST05HX1RSQU5TQUNUSU9OKFVMb25nIG1pbm9yID0gMCwgQ29tcGxl
dGlvblN0YXR1cyBjb21wbGV0ZWQgPSBDT01QTEVURURfTk8pIDogU3lzdGVtRXhjZXB0aW9uICht
aW5vciwgY29tcGxldGVkKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9p
bnNlcnRUb0FueUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgV1JPTkdfVFJBTlNB
Q1RJT04oY29uc3QgV1JPTkdfVFJBTlNBQ1RJT04mIGV4KSA6IFN5c3RlbUV4Y2VwdGlvbihleCkg
e30gaW5saW5lIFdST05HX1RSQU5TQUNUSU9OJiBvcGVyYXRvcj0oY29uc3QgV1JPTkdfVFJBTlNB
Q1RJT04mIGV4KSB7IFN5c3RlbUV4Y2VwdGlvbjo6b3BlcmF0b3I9KGV4KTsgcmV0dXJuICp0aGlz
OyB9IHZpcnR1YWwgfldST05HX1RSQU5TQUNUSU9OKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsg
c3RhdGljIFdST05HX1RSQU5TQUNUSU9OKiBfZG93bmNhc3QoRXhjZXB0aW9uKik7IHN0YXRpYyBj
b25zdCBXUk9OR19UUkFOU0FDVElPTiogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiopOyBzdGF0
aWMgaW5saW5lIFdST05HX1RSQU5TQUNUSU9OKiBfbmFycm93KEV4Y2VwdGlvbiogZSkgeyByZXR1
cm4gX2Rvd25jYXN0KGUpOyB9IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNp
emUpIGNvbnN0OyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRU
b0FueUZuOyBzdGF0aWMgRXhjZXB0aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRU
b0FueUZuTkNQOyBwcml2YXRlOiB2aXJ0dWFsIEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNv
bnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsgfTsKIyA5NDggIi4u
Ly4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvQ09SQkEuaCIKICBjbGFzcyBVc2VyRXhjZXB0aW9u
IDogcHVibGljIEV4Y2VwdGlvbiB7CiAgcHVibGljOgogICAgdmlydHVhbCB+VXNlckV4Y2VwdGlv
bigpOwogICAgc3RhdGljIFVzZXJFeGNlcHRpb24qIF9kb3duY2FzdChFeGNlcHRpb24qIGUpOwog
ICAgc3RhdGljIGNvbnN0IFVzZXJFeGNlcHRpb24qIF9kb3duY2FzdChjb25zdCBFeGNlcHRpb24q
IGUpOwogICAgc3RhdGljIGlubGluZSBVc2VyRXhjZXB0aW9uKiBfbmFycm93KEV4Y2VwdGlvbiog
ZSkgeyByZXR1cm4gX2Rvd25jYXN0KGUpOyB9CgogIHByb3RlY3RlZDoKICAgIGlubGluZSBVc2Vy
RXhjZXB0aW9uKCkge30KCgoKCgogICAgaW5saW5lIFVzZXJFeGNlcHRpb24oY29uc3QgVXNlckV4
Y2VwdGlvbiYgZXgpIDogRXhjZXB0aW9uKGV4KSB7fQoKICBwdWJsaWM6CiAgICBVc2VyRXhjZXB0
aW9uJiBvcGVyYXRvcj0oY29uc3QgVXNlckV4Y2VwdGlvbiYgZXgpIHsKICAgICAgRXhjZXB0aW9u
OjpvcGVyYXRvcj0oZXgpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgfTsKCgoKCgoKICBj
bGFzcyBVbmtub3duVXNlckV4Y2VwdGlvbiA6IHB1YmxpYyBVc2VyRXhjZXB0aW9uIHsKICBwdWJs
aWM6CiAgICB2aXJ0dWFsIH5Vbmtub3duVXNlckV4Y2VwdGlvbigpOwoKICAgIFVua25vd25Vc2Vy
RXhjZXB0aW9uKEFueSogZXgpOwoKCiAgICBpbmxpbmUgVW5rbm93blVzZXJFeGNlcHRpb24oY29u
c3QgVW5rbm93blVzZXJFeGNlcHRpb24mIGV4KQogICAgICA6IFVzZXJFeGNlcHRpb24oZXgpIHsK
ICAgICAgcGRfZXhjZXB0aW9uID0gbmV3IEFueSgqZXgucGRfZXhjZXB0aW9uKTsKICAgIH0KICAg
IFVua25vd25Vc2VyRXhjZXB0aW9uJiBvcGVyYXRvcj0oY29uc3QgVW5rbm93blVzZXJFeGNlcHRp
b24mIGV4KSB7CiAgICAgIFVzZXJFeGNlcHRpb246Om9wZXJhdG9yPShleCk7CiAgICAgIGlmIChw
ZF9leGNlcHRpb24pIGRlbGV0ZSBwZF9leGNlcHRpb247CiAgICAgIHBkX2V4Y2VwdGlvbiA9IG5l
dyBBbnkoKmV4LnBkX2V4Y2VwdGlvbik7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBB
bnkmIGV4Y2VwdGlvbigpOwoKICAgIHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsKICAgIHN0YXRpYyBV
bmtub3duVXNlckV4Y2VwdGlvbiogX2Rvd25jYXN0KEV4Y2VwdGlvbiopOwogICAgc3RhdGljIGNv
bnN0IFVua25vd25Vc2VyRXhjZXB0aW9uKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKik7CiAg
ICBzdGF0aWMgaW5saW5lIFVua25vd25Vc2VyRXhjZXB0aW9uKiBfbmFycm93KEV4Y2VwdGlvbiog
ZSkgewogICAgICByZXR1cm4gX2Rvd25jYXN0KGUpOwogICAgfQoKICAgIHN0YXRpYyBFeGNlcHRp
b246Omluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47CiAgICBzdGF0aWMgRXhjZXB0
aW9uOjppbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOwoKICBwcml2YXRl
OgogICAgdmlydHVhbCBFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsKICAgIHZpcnR1
YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OwogICAgdmlydHVhbCBjb25zdCBjaGFy
KiBfTlBfcmVwb0lkKGludCogc2l6ZSkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgX05QX21hcnNo
YWwoTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBfTlBfbWFyc2hh
bChNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0OwoKICAgIEFueSogcGRfZXhjZXB0aW9uOwogIH07
CgoKCgoKCiAgY2xhc3MgV3JvbmdUcmFuc2FjdGlvbiA6IHB1YmxpYyBVc2VyRXhjZXB0aW9uIHsg
cHVibGljOiBpbmxpbmUgV3JvbmdUcmFuc2FjdGlvbigpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGlu
c2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlu
bGluZSBXcm9uZ1RyYW5zYWN0aW9uKGNvbnN0IFdyb25nVHJhbnNhY3Rpb24mIF9leCkgOiBVc2Vy
RXhjZXB0aW9uKF9leCkge30gaW5saW5lIFdyb25nVHJhbnNhY3Rpb24mIG9wZXJhdG9yPShjb25z
dCBXcm9uZ1RyYW5zYWN0aW9uJiBfZXgpIHsgKiAoVXNlckV4Y2VwdGlvbiopIHRoaXMgPSBfZXg7
IHJldHVybiAqdGhpczsgfSB2aXJ0dWFsIH5Xcm9uZ1RyYW5zYWN0aW9uKCk7IHZpcnR1YWwgdm9p
ZCBfcmFpc2UoKTsgc3RhdGljIFdyb25nVHJhbnNhY3Rpb24qIF9kb3duY2FzdChFeGNlcHRpb24q
KTsgc3RhdGljIGNvbnN0IFdyb25nVHJhbnNhY3Rpb24qIF9kb3duY2FzdChjb25zdCBFeGNlcHRp
b24qKTsgc3RhdGljIGlubGluZSBXcm9uZ1RyYW5zYWN0aW9uKiBfbmFycm93KEV4Y2VwdGlvbiog
X2V4KSB7IHJldHVybiBfZG93bmNhc3QoX2V4KTsgfSBpbmxpbmUgc2l6ZV90IF9OUF9hbGlnbmVk
U2l6ZShzaXplX3Qgb3MpIGNvbnN0IHsgcmV0dXJuIG9zOyB9IGlubGluZSB2b2lkIG9wZXJhdG9y
Pj49KE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0o
TWVtQnVmZmVyZWRTdHJlYW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShOZXRC
dWZmZXJlZFN0cmVhbSYpIHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE1lbUJ1ZmZlcmVkU3Ry
ZWFtJikge30gc3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRp
YyBpbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBzdGF0aWMgY29uc3Qg
Y2hhciogX1BEX3JlcG9JZDsgcHJpdmF0ZTogdmlydHVhbCBFeGNlcHRpb24qIF9OUF9kdXBsaWNh
dGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IHZpcnR1
YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyB2aXJ0dWFsIHZvaWQg
X05QX21hcnNoYWwoTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdDsgdmlydHVhbCB2b2lkIF9OUF9t
YXJzaGFsKE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IH07CgoKCgoKCiAgY2xhc3MgRW52aXJv
bm1lbnQ7CiAgdHlwZWRlZiBFbnZpcm9ubWVudCogRW52aXJvbm1lbnRfcHRyOwogIHR5cGVkZWYg
RW52aXJvbm1lbnRfcHRyIEVudmlyb25tZW50UmVmOwogIHR5cGVkZWYgX0NPUkJBX1BzZXVkb09i
al9WYXI8RW52aXJvbm1lbnQ+IEVudmlyb25tZW50X3ZhcjsKICB0eXBlZGVmIF9DT1JCQV9Qc2V1
ZG9PYmpfT3V0PEVudmlyb25tZW50LEVudmlyb25tZW50X3Zhcj4gRW52aXJvbm1lbnRfb3V0OwoK
ICBjbGFzcyBFbnZpcm9ubWVudCB7CiAgcHVibGljOgogICAgRW52aXJvbm1lbnQoKTsKCiAgICB2
aXJ0dWFsIH5FbnZpcm9ubWVudCgpOwoKICAgIHZpcnR1YWwgdm9pZCBleGNlcHRpb24oRXhjZXB0
aW9uKik7CiAgICB2aXJ0dWFsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKCkgY29uc3Q7CiAgICB2aXJ0
dWFsIHZvaWQgY2xlYXIoKTsKCiAgICB2aXJ0dWFsIEJvb2xlYW4gTlBfaXNfbmlsKCkgY29uc3Q7
CiAgICB2aXJ0dWFsIEVudmlyb25tZW50X3B0ciBOUF9kdXBsaWNhdGUoKTsKCiAgICBzdGF0aWMg
RW52aXJvbm1lbnRfcHRyIF9kdXBsaWNhdGUoRW52aXJvbm1lbnRfcHRyKTsKICAgIHN0YXRpYyBF
bnZpcm9ubWVudF9wdHIgX25pbCgpOwoKICAgIHN0YXRpYyBpbmxpbmUgX0NPUkJBX0Jvb2xlYW4g
UFJfaXNfdmFsaWQoRW52aXJvbm1lbnRfcHRyIHAgKSB7CiAgICAgIHJldHVybiAoKHApID8gKHAt
PnBkX21hZ2ljID09IFBSX21hZ2ljKSA6IDEpOwogICAgfQoKICAgIHN0YXRpYyBjb25zdCBfQ09S
QkFfVUxvbmcgUFJfbWFnaWM7CgogIHByaXZhdGU6CiAgICBDT1JCQTo6RXhjZXB0aW9uKiBwZF9l
eGNlcHRpb247CiAgICBfQ09SQkFfVUxvbmcgcGRfbWFnaWM7CgogICAgRW52aXJvbm1lbnQoY29u
c3QgRW52aXJvbm1lbnQmKTsKICAgIEVudmlyb25tZW50JiBvcGVyYXRvcj0oY29uc3QgRW52aXJv
bm1lbnQmKTsKCiAgcHVibGljOgogICAgQ09SQkE6OkJvb2xlYW4gcGRfaXNfcHNldWRvOwogIH07
CgoKCgoKCiAgZW51bSBfRmxhZ3MgewogICAgQVJHX0lOID0gMHgxLAogICAgQVJHX09VVCA9IDB4
MiwKICAgIEFSR19JTk9VVCA9IDB4NCwKICAgIENUWF9SRVNUUklDVF9TQ09QRSA9IDB4OCwKICAg
IE9VVF9MSVNUX01FTU9SWSA9IDB4MTAsCiAgICBJTl9DT1BZX1ZBTFVFID0gMHgyMAogIH07Cgog
IHR5cGVkZWYgVUxvbmcgRmxhZ3M7CgogIGNsYXNzIE5hbWVkVmFsdWU7CiAgdHlwZWRlZiBOYW1l
ZFZhbHVlKiBOYW1lZFZhbHVlX3B0cjsKICB0eXBlZGVmIE5hbWVkVmFsdWVfcHRyIE5hbWVkVmFs
dWVSZWY7CiAgdHlwZWRlZiBfQ09SQkFfUHNldWRvT2JqX1ZhcjxOYW1lZFZhbHVlPiBOYW1lZFZh
bHVlX3ZhcjsKICB0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfT3V0PE5hbWVkVmFsdWUsTmFtZWRW
YWx1ZV92YXI+IE5hbWVkVmFsdWVfb3V0OwoKICBjbGFzcyBOYW1lZFZhbHVlIHsKICBwdWJsaWM6
CiAgICB2aXJ0dWFsIH5OYW1lZFZhbHVlKCk7CgogICAgdmlydHVhbCBjb25zdCBjaGFyKiBuYW1l
KCkgY29uc3QgPSAwOwoKCiAgICB2aXJ0dWFsIEFueSogdmFsdWUoKSBjb25zdCA9IDA7CgoKICAg
IHZpcnR1YWwgRmxhZ3MgZmxhZ3MoKSBjb25zdCA9IDA7CgogICAgdmlydHVhbCBCb29sZWFuIE5Q
X2lzX25pbCgpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgTmFtZWRWYWx1ZV9wdHIgTlBfZHVwbGlj
YXRlKCkgPSAwOwoKICAgIHN0YXRpYyBOYW1lZFZhbHVlX3B0ciBfZHVwbGljYXRlKE5hbWVkVmFs
dWVfcHRyKTsKICAgIHN0YXRpYyBOYW1lZFZhbHVlX3B0ciBfbmlsKCk7CgogICAgc3RhdGljIGlu
bGluZSBfQ09SQkFfQm9vbGVhbiBQUl9pc192YWxpZChOYW1lZFZhbHVlX3B0ciBwICkgewogICAg
ICByZXR1cm4gKChwKSA/IChwLT5wZF9tYWdpYyA9PSBQUl9tYWdpYykgOiAxKTsKICAgIH0KCiAg
ICBzdGF0aWMgY29uc3QgX0NPUkJBX1VMb25nIFBSX21hZ2ljOwoKICBwcm90ZWN0ZWQ6CiAgICBO
YW1lZFZhbHVlKCkgeyBwZF9tYWdpYyA9IFBSX21hZ2ljOyB9CgogIHByaXZhdGU6CiAgICBfQ09S
QkFfVUxvbmcgcGRfbWFnaWM7CgogICAgTmFtZWRWYWx1ZShjb25zdCBOYW1lZFZhbHVlJik7CiAg
ICBOYW1lZFZhbHVlJiBvcGVyYXRvcj0oY29uc3QgTmFtZWRWYWx1ZSYpOwogIH07CgoKCgoKCiAg
Y2xhc3MgTlZMaXN0OwogIHR5cGVkZWYgTlZMaXN0KiBOVkxpc3RfcHRyOwogIHR5cGVkZWYgTlZM
aXN0X3B0ciBOVkxpc3RSZWY7CiAgdHlwZWRlZiBfQ09SQkFfUHNldWRvT2JqX1ZhcjxOVkxpc3Q+
IE5WTGlzdF92YXI7CiAgdHlwZWRlZiBfQ09SQkFfUHNldWRvT2JqX091dDxOVkxpc3QsTlZMaXN0
X3Zhcj4gTlZMaXN0X291dDsKCiAgY2xhc3MgTlZMaXN0IHsKICBwdWJsaWM6CiAgICB2aXJ0dWFs
IH5OVkxpc3QoKTsKCiAgICB2aXJ0dWFsIFVMb25nIGNvdW50KCkgY29uc3QgPSAwOwogICAgdmly
dHVhbCBOYW1lZFZhbHVlX3B0ciBhZGQoRmxhZ3MpID0gMDsKICAgIHZpcnR1YWwgTmFtZWRWYWx1
ZV9wdHIgYWRkX2l0ZW0oY29uc3QgY2hhciosIEZsYWdzKSA9IDA7CiAgICB2aXJ0dWFsIE5hbWVk
VmFsdWVfcHRyIGFkZF92YWx1ZShjb25zdCBjaGFyKiwgY29uc3QgQW55JiwgRmxhZ3MpID0gMDsK
ICAgIHZpcnR1YWwgTmFtZWRWYWx1ZV9wdHIgYWRkX2l0ZW1fY29uc3VtZShjaGFyKixGbGFncykg
PSAwOwogICAgdmlydHVhbCBOYW1lZFZhbHVlX3B0ciBhZGRfdmFsdWVfY29uc3VtZShjaGFyKiwg
QW55KiwgRmxhZ3MpID0gMDsKICAgIHZpcnR1YWwgTmFtZWRWYWx1ZV9wdHIgaXRlbShVTG9uZyBp
bmRleCkgPSAwOwogICAgdmlydHVhbCBTdGF0dXMgcmVtb3ZlIChVTG9uZykgPSAwOwoKICAgIHZp
cnR1YWwgQm9vbGVhbiBOUF9pc19uaWwoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIE5WTGlzdF9w
dHIgTlBfZHVwbGljYXRlKCkgPSAwOwoKICAgIHN0YXRpYyBOVkxpc3RfcHRyIF9kdXBsaWNhdGUo
TlZMaXN0X3B0cik7CiAgICBzdGF0aWMgTlZMaXN0X3B0ciBfbmlsKCk7CgoKCiAgICBjbGFzcyBC
b3VuZHMgOiBwdWJsaWMgVXNlckV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIEJvdW5kcygpIHsg
cGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBp
bnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBCb3VuZHMoY29uc3QgQm91bmRzJiBfZXgpIDogVXNl
ckV4Y2VwdGlvbihfZXgpIHt9IGlubGluZSBCb3VuZHMmIG9wZXJhdG9yPShjb25zdCBCb3VuZHMm
IF9leCkgeyAqIChVc2VyRXhjZXB0aW9uKikgdGhpcyA9IF9leDsgcmV0dXJuICp0aGlzOyB9IHZp
cnR1YWwgfkJvdW5kcygpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0YXRpYyBCb3VuZHMqIF9k
b3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IEJvdW5kcyogX2Rvd25jYXN0KGNvbnN0
IEV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIEJvdW5kcyogX25hcnJvdyhFeGNlcHRpb24qIF9l
eCkgeyByZXR1cm4gX2Rvd25jYXN0KF9leCk7IH0gaW5saW5lIHNpemVfdCBfTlBfYWxpZ25lZFNp
emUoc2l6ZV90IG9zKSBjb25zdCB7IHJldHVybiBvczsgfSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+
PShOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0IHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPj49KE1l
bUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oTmV0QnVm
ZmVyZWRTdHJlYW0mKSB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShNZW1CdWZmZXJlZFN0cmVh
bSYpIHt9IHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMg
aW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgc3RhdGljIGNvbnN0IGNo
YXIqIF9QRF9yZXBvSWQ7IHByaXZhdGU6IHZpcnR1YWwgRXhjZXB0aW9uKiBfTlBfZHVwbGljYXRl
KCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OyB2aXJ0dWFs
IGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgdmlydHVhbCB2b2lkIF9O
UF9tYXJzaGFsKE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IHZpcnR1YWwgdm9pZCBfTlBfbWFy
c2hhbChNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0OyB9OwoKICAgIHN0YXRpYyBpbmxpbmUgX0NP
UkJBX0Jvb2xlYW4gUFJfaXNfdmFsaWQoTlZMaXN0X3B0ciBwICkgewogICAgICByZXR1cm4gKChw
KSA/IChwLT5wZF9tYWdpYyA9PSBQUl9tYWdpYykgOiAxKTsKICAgIH0KCiAgICBzdGF0aWMgY29u
c3QgX0NPUkJBX1VMb25nIFBSX21hZ2ljOwoKICBwcm90ZWN0ZWQ6CiAgICBOVkxpc3QoKSB7IHBk
X21hZ2ljID0gUFJfbWFnaWM7IH0KCiAgcHJpdmF0ZToKICAgIF9DT1JCQV9VTG9uZyBwZF9tYWdp
YzsKCiAgICBOVkxpc3QoY29uc3QgTlZMaXN0JiBudmwpOwogICAgTlZMaXN0JiBvcGVyYXRvcj0o
Y29uc3QgTlZMaXN0Jik7CiAgfTsKCgoKCgoKICBjbGFzcyBDb250ZXh0OwogIHR5cGVkZWYgQ29u
dGV4dCogQ29udGV4dF9wdHI7CiAgdHlwZWRlZiBDb250ZXh0X3B0ciBDb250ZXh0UmVmOwogIHR5
cGVkZWYgX0NPUkJBX1BzZXVkb09ial9WYXI8Q29udGV4dD4gQ29udGV4dF92YXI7CiAgdHlwZWRl
ZiBfQ09SQkFfUHNldWRvT2JqX091dDxDb250ZXh0LENvbnRleHRfdmFyPiBDb250ZXh0X291dDsK
CiAgY2xhc3MgQ29udGV4dCB7CiAgcHVibGljOgogICAgdmlydHVhbCB+Q29udGV4dCgpOwoKICAg
IHZpcnR1YWwgY29uc3QgY2hhciogY29udGV4dF9uYW1lKCkgY29uc3QgPSAwOwogICAgdmlydHVh
bCBDT1JCQTo6Q29udGV4dF9wdHIgcGFyZW50KCkgY29uc3QgPSAwOwogICAgdmlydHVhbCBDT1JC
QTo6U3RhdHVzIGNyZWF0ZV9jaGlsZChjb25zdCBjaGFyKiwgQ29udGV4dF9vdXQpID0gMDsKICAg
IHZpcnR1YWwgQ09SQkE6OlN0YXR1cyBzZXRfb25lX3ZhbHVlKGNvbnN0IGNoYXIqLCBjb25zdCBB
bnkmKSA9IDA7CiAgICB2aXJ0dWFsIENPUkJBOjpTdGF0dXMgc2V0X3ZhbHVlcyhDT1JCQTo6TlZM
aXN0X3B0cikgPSAwOwogICAgdmlydHVhbCBDT1JCQTo6U3RhdHVzIGRlbGV0ZV92YWx1ZXMoY29u
c3QgY2hhciopID0gMDsKICAgIHZpcnR1YWwgQ09SQkE6OlN0YXR1cyBnZXRfdmFsdWVzKGNvbnN0
IGNoYXIqIHN0YXJ0X3Njb3BlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q09SQkE6OkZsYWdzIG9wX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogcGF0dGVybiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENPUkJBOjpOVkxpc3Rfb3V0IHZhbHVlcykgPSAwOwoKCgogICAgdmlydHVhbCBCb29sZWFu
IE5QX2lzX25pbCgpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgQ09SQkE6OkNvbnRleHRfcHRyIE5Q
X2R1cGxpY2F0ZSgpID0gMDsKCiAgICBzdGF0aWMgQ29udGV4dF9wdHIgX2R1cGxpY2F0ZShDb250
ZXh0X3B0cik7CiAgICBzdGF0aWMgQ29udGV4dF9wdHIgX25pbCgpOwoKCiAgICBzdGF0aWMgc2l6
ZV90IF9OUF9hbGlnbmVkU2l6ZShDb250ZXh0X3B0ciBjdHh0LCBjb25zdCBjaGFyKmNvbnN0KiB3
aGljaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aGljaGxlbiwgc2l6
ZV90IGluaXRpYWxvZmZzZXQpOwogICAgc3RhdGljIHZvaWQgbWFyc2hhbENvbnRleHQoQ29udGV4
dF9wdHIgY3R4dCwgY29uc3QgY2hhcipjb25zdCogd2hpY2gsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgd2hpY2hsZW4sIE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKTsKICAgIHN0YXRp
YyB2b2lkIG1hcnNoYWxDb250ZXh0KENvbnRleHRfcHRyIGN0eHQsIGNvbnN0IGNoYXIqY29uc3Qq
IHdoaWNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdoaWNobGVuLCBNZW1C
dWZmZXJlZFN0cmVhbSYgcyk7CiAgICBzdGF0aWMgQ29udGV4dF9wdHIgdW5tYXJzaGFsQ29udGV4
dChOZXRCdWZmZXJlZFN0cmVhbSYgcyk7CiAgICBzdGF0aWMgQ29udGV4dF9wdHIgdW5tYXJzaGFs
Q29udGV4dChNZW1CdWZmZXJlZFN0cmVhbSYgcyk7CgogICAgc3RhdGljIGlubGluZSBfQ09SQkFf
Qm9vbGVhbiBQUl9pc192YWxpZChDb250ZXh0X3B0ciBwICkgewogICAgICByZXR1cm4gKChwKSA/
IChwLT5wZF9tYWdpYyA9PSBQUl9tYWdpYykgOiAxKTsKICAgIH0KCiAgICBzdGF0aWMgY29uc3Qg
X0NPUkJBX1VMb25nIFBSX21hZ2ljOwoKICBwcm90ZWN0ZWQ6CiAgICBDb250ZXh0KCkgeyBwZF9t
YWdpYyA9IFBSX21hZ2ljOyB9CgogIHByaXZhdGU6CiAgICBfQ09SQkFfVUxvbmcgcGRfbWFnaWM7
CgogICAgQ29udGV4dChjb25zdCBDb250ZXh0Jik7CiAgICBDb250ZXh0JiBvcGVyYXRvcj0oY29u
c3QgQ29udGV4dCYpOwogIH07CgoKCgoKCiAgY2xhc3MgQ29udGV4dExpc3Q7CiAgdHlwZWRlZiBD
b250ZXh0TGlzdCogQ29udGV4dExpc3RfcHRyOwogIHR5cGVkZWYgQ29udGV4dExpc3RfcHRyIENv
bnRleHRMaXN0UmVmOwogIHR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9WYXI8Q29udGV4dExpc3Q+
IENvbnRleHRMaXN0X3ZhcjsKICB0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfT3V0PENvbnRleHRM
aXN0LENvbnRleHRMaXN0X3Zhcj4gQ29udGV4dExpc3Rfb3V0OwoKICBjbGFzcyBDb250ZXh0TGlz
dCB7CiAgcHVibGljOgogICAgdmlydHVhbCB+Q29udGV4dExpc3QoKTsKCiAgICB2aXJ0dWFsIFVM
b25nIGNvdW50KCkgY29uc3QgPSAwOwogICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBjaGFyKiBj
dHh0KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgYWRkX2NvbnN1bWUoY2hhciogY3R4dCkgPSAwOwoK
CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGl0ZW0oVUxvbmcgaW5kZXgpID0gMDsKCgogICAgdmly
dHVhbCBTdGF0dXMgcmVtb3ZlKFVMb25nIGluZGV4KSA9IDA7CgogICAgdmlydHVhbCBCb29sZWFu
IE5QX2lzX25pbCgpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgQ29udGV4dExpc3RfcHRyIE5QX2R1
cGxpY2F0ZSgpID0gMDsKCiAgICBzdGF0aWMgQ29udGV4dExpc3RfcHRyIF9kdXBsaWNhdGUoQ29u
dGV4dExpc3RfcHRyKTsKICAgIHN0YXRpYyBDb250ZXh0TGlzdF9wdHIgX25pbCgpOwoKCgogICAg
Y2xhc3MgQm91bmRzIDogcHVibGljIFVzZXJFeGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBCb3Vu
ZHMoKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9pbnNlcnRUb0FueUZu
TkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgQm91bmRzKGNvbnN0IEJvdW5kcyYgX2V4
KSA6IFVzZXJFeGNlcHRpb24oX2V4KSB7fSBpbmxpbmUgQm91bmRzJiBvcGVyYXRvcj0oY29uc3Qg
Qm91bmRzJiBfZXgpIHsgKiAoVXNlckV4Y2VwdGlvbiopIHRoaXMgPSBfZXg7IHJldHVybiAqdGhp
czsgfSB2aXJ0dWFsIH5Cb3VuZHMoKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMgQm91
bmRzKiBfZG93bmNhc3QoRXhjZXB0aW9uKik7IHN0YXRpYyBjb25zdCBCb3VuZHMqIF9kb3duY2Fz
dChjb25zdCBFeGNlcHRpb24qKTsgc3RhdGljIGlubGluZSBCb3VuZHMqIF9uYXJyb3coRXhjZXB0
aW9uKiBfZXgpIHsgcmV0dXJuIF9kb3duY2FzdChfZXgpOyB9IGlubGluZSBzaXplX3QgX05QX2Fs
aWduZWRTaXplKHNpemVfdCBvcykgY29uc3QgeyByZXR1cm4gb3M7IH0gaW5saW5lIHZvaWQgb3Bl
cmF0b3I+Pj0oTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRv
cj4+PShNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0IHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9
KE5ldEJ1ZmZlcmVkU3RyZWFtJikge30gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oTWVtQnVmZmVy
ZWRTdHJlYW0mKSB7fSBzdGF0aWMgaW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsg
c3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHN0YXRpYyBj
b25zdCBjaGFyKiBfUERfcmVwb0lkOyBwcml2YXRlOiB2aXJ0dWFsIEV4Y2VwdGlvbiogX05QX2R1
cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsg
dmlydHVhbCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHZpcnR1YWwg
dm9pZCBfTlBfbWFyc2hhbChOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0OyB2aXJ0dWFsIHZvaWQg
X05QX21hcnNoYWwoTWVtQnVmZmVyZWRTdHJlYW0mKSBjb25zdDsgfTsKCiAgICBzdGF0aWMgaW5s
aW5lIF9DT1JCQV9Cb29sZWFuIFBSX2lzX3ZhbGlkKENvbnRleHRMaXN0X3B0ciBwICkgewogICAg
ICByZXR1cm4gKChwKSA/IChwLT5wZF9tYWdpYyA9PSBQUl9tYWdpYykgOiAxKTsKICAgIH0KCiAg
ICBzdGF0aWMgY29uc3QgX0NPUkJBX1VMb25nIFBSX21hZ2ljOwoKICBwcm90ZWN0ZWQ6CiAgICBD
b250ZXh0TGlzdCgpIHsgcGRfbWFnaWMgPSBQUl9tYWdpYzsgfQoKICBwcml2YXRlOgogICAgX0NP
UkJBX1VMb25nIHBkX21hZ2ljOwoKICAgIENvbnRleHRMaXN0KGNvbnN0IENvbnRleHRMaXN0Jik7
CiAgICBDb250ZXh0TGlzdCYgb3BlcmF0b3I9KGNvbnN0IENvbnRleHRMaXN0Jik7CiAgfTsKCgoK
CgoKICBjbGFzcyBQcmluY2lwYWw7CiAgdHlwZWRlZiBQcmluY2lwYWwqIFByaW5jaXBhbF9wdHI7
CiAgdHlwZWRlZiBQcmluY2lwYWxfcHRyIFByaW5jaXBhbFJlZjsKCgoKICBjbGFzcyBQcmluY2lw
YWxJRCA6IHB1YmxpYyBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19PY3RldCB7CiAgcHVibGlj
OgogICAgaW5saW5lIFByaW5jaXBhbElEKCkge30KICAgIGlubGluZSBQcmluY2lwYWxJRChjb25z
dCBQcmluY2lwYWxJRCYgc2VxKQogICAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX09j
dGV0KHNlcSkge30KICAgIGlubGluZSBQcmluY2lwYWxJRChDT1JCQTo6VUxvbmcgbWF4KQogICAg
ICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX09jdGV0KG1heCkge30KICAgIGlubGluZSBQ
cmluY2lwYWxJRChDT1JCQTo6VUxvbmcgbWF4LCBDT1JCQTo6VUxvbmcgbGVuLCBDT1JCQTo6T2N0
ZXQqIHZhbCwgQ09SQkE6OkJvb2xlYW4gcmVsPTApCiAgICAgIDogX0NPUkJBX1VuYm91bmRlZF9T
ZXF1ZW5jZV9fT2N0ZXQobWF4LCBsZW4sIHZhbCwgcmVsKSB7fQogICAgaW5saW5lIFByaW5jaXBh
bElEJiBvcGVyYXRvciA9IChjb25zdCBQcmluY2lwYWxJRCYgc2VxKSB7CiAgICAgIF9DT1JCQV9V
bmJvdW5kZWRfU2VxdWVuY2VfX09jdGV0OjpvcGVyYXRvcj0oc2VxKTsKICAgICAgcmV0dXJuICp0
aGlzOwogICAgfTsKICB9OwoKICBjbGFzcyBQcmluY2lwYWwgewogIHB1YmxpYzoKICAgIHN0YXRp
YyBQcmluY2lwYWxfcHRyIF9kdXBsaWNhdGUoUHJpbmNpcGFsX3B0cik7CiAgICBzdGF0aWMgUHJp
bmNpcGFsX3B0ciBfbmlsKCk7CiAgcHJpdmF0ZToKICAgIFByaW5jaXBhbCgpOwogIH07CgoKCgoK
CiAgY2xhc3MgRXhjZXB0aW9uTGlzdDsKICB0eXBlZGVmIEV4Y2VwdGlvbkxpc3QqIEV4Y2VwdGlv
bkxpc3RfcHRyOwogIHR5cGVkZWYgRXhjZXB0aW9uTGlzdF9wdHIgRXhjZXB0aW9uTGlzdFJlZjsK
ICB0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfVmFyPEV4Y2VwdGlvbkxpc3Q+IEV4Y2VwdGlvbkxp
c3RfdmFyOwogIHR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9PdXQ8RXhjZXB0aW9uTGlzdCxFeGNl
cHRpb25MaXN0X3Zhcj4gRXhjZXB0aW9uTGlzdF9vdXQ7CgogIGNsYXNzIEV4Y2VwdGlvbkxpc3Qg
ewogIHB1YmxpYzoKICAgIHZpcnR1YWwgfkV4Y2VwdGlvbkxpc3QoKTsKCiAgICB2aXJ0dWFsIFVM
b25nIGNvdW50KCkgY29uc3QgPSAwOwogICAgdmlydHVhbCB2b2lkIGFkZChUeXBlQ29kZV9wdHIg
dGMpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBhZGRfY29uc3VtZShUeXBlQ29kZV9wdHIgdGMpID0g
MDsKCgogICAgdmlydHVhbCBUeXBlQ29kZV9wdHIgaXRlbShVTG9uZyBpbmRleCkgPSAwOwoKCiAg
ICB2aXJ0dWFsIFN0YXR1cyByZW1vdmUoVUxvbmcgaW5kZXgpID0gMDsKCiAgICB2aXJ0dWFsIEJv
b2xlYW4gTlBfaXNfbmlsKCkgY29uc3QgPSAwOwogICAgdmlydHVhbCBFeGNlcHRpb25MaXN0X3B0
ciBOUF9kdXBsaWNhdGUoKSA9IDA7CgogICAgc3RhdGljIEV4Y2VwdGlvbkxpc3RfcHRyIF9kdXBs
aWNhdGUoRXhjZXB0aW9uTGlzdF9wdHIpOwogICAgc3RhdGljIEV4Y2VwdGlvbkxpc3RfcHRyIF9u
aWwoKTsKCgoKICAgIGNsYXNzIEJvdW5kcyA6IHB1YmxpYyBVc2VyRXhjZXB0aW9uIHsgcHVibGlj
OiBpbmxpbmUgQm91bmRzKCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsgcGRf
aW5zZXJ0VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIEJvdW5kcyhjb25z
dCBCb3VuZHMmIF9leCkgOiBVc2VyRXhjZXB0aW9uKF9leCkge30gaW5saW5lIEJvdW5kcyYgb3Bl
cmF0b3I9KGNvbnN0IEJvdW5kcyYgX2V4KSB7ICogKFVzZXJFeGNlcHRpb24qKSB0aGlzID0gX2V4
OyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+Qm91bmRzKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2Uo
KTsgc3RhdGljIEJvdW5kcyogX2Rvd25jYXN0KEV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgQm91
bmRzKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgQm91bmRzKiBf
bmFycm93KEV4Y2VwdGlvbiogX2V4KSB7IHJldHVybiBfZG93bmNhc3QoX2V4KTsgfSBpbmxpbmUg
c2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3Qgb3MpIGNvbnN0IHsgcmV0dXJuIG9zOyB9IGlu
bGluZSB2b2lkIG9wZXJhdG9yPj49KE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Qge30gaW5saW5l
IHZvaWQgb3BlcmF0b3I+Pj0oTWVtQnVmZmVyZWRTdHJlYW0mKSBjb25zdCB7fSBpbmxpbmUgdm9p
ZCBvcGVyYXRvcjw8PShOZXRCdWZmZXJlZFN0cmVhbSYpIHt9IGlubGluZSB2b2lkIG9wZXJhdG9y
PDw9KE1lbUJ1ZmZlcmVkU3RyZWFtJikge30gc3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55IGlu
c2VydFRvQW55Rm47IHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZu
TkNQOyBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsgcHJpdmF0ZTogdmlydHVhbCBFeGNl
cHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlw
ZUlkKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNv
bnN0OyB2aXJ0dWFsIHZvaWQgX05QX21hcnNoYWwoTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdDsg
dmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IH07Cgog
ICAgc3RhdGljIGlubGluZSBfQ09SQkFfQm9vbGVhbiBQUl9pc192YWxpZChFeGNlcHRpb25MaXN0
X3B0ciBwICkgewogICAgICByZXR1cm4gKChwKSA/IChwLT5wZF9tYWdpYyA9PSBQUl9tYWdpYykg
OiAxKTsKICAgIH0KCiAgICBzdGF0aWMgY29uc3QgX0NPUkJBX1VMb25nIFBSX21hZ2ljOwoKICBw
cm90ZWN0ZWQ6CiAgICBFeGNlcHRpb25MaXN0KCkgeyBwZF9tYWdpYyA9IFBSX21hZ2ljOyB9Cgog
IHByaXZhdGU6CiAgICBfQ09SQkFfVUxvbmcgcGRfbWFnaWM7CgogICAgRXhjZXB0aW9uTGlzdChj
b25zdCBFeGNlcHRpb25MaXN0JiBlbCk7CiAgICBFeGNlcHRpb25MaXN0JiBvcGVyYXRvcj0oY29u
c3QgRXhjZXB0aW9uTGlzdCYpOwogIH07CgoKCgoKCiAgY2xhc3MgVHlwZUNvZGVfdmFyOwoKICBj
bGFzcyBUeXBlQ29kZV9tZW1iZXIgewogIHB1YmxpYzoKICAgIFR5cGVDb2RlX21lbWJlcigpOwog
ICAgaW5saW5lIFR5cGVDb2RlX21lbWJlcihUeXBlQ29kZV9wdHIgcCkgOiBfcHRyKHApIHt9CiAg
ICBUeXBlQ29kZV9tZW1iZXIoY29uc3QgVHlwZUNvZGVfbWVtYmVyJiBwKTsKICAgIH5UeXBlQ29k
ZV9tZW1iZXIoKTsKCiAgICBUeXBlQ29kZV9tZW1iZXImIG9wZXJhdG9yPShUeXBlQ29kZV9wdHIg
cCk7CiAgICBUeXBlQ29kZV9tZW1iZXImIG9wZXJhdG9yPShjb25zdCBUeXBlQ29kZV9tZW1iZXIm
IHApOwogICAgVHlwZUNvZGVfbWVtYmVyJiBvcGVyYXRvcj0oY29uc3QgVHlwZUNvZGVfdmFyJiBw
KTsKCiAgICBpbmxpbmUgVHlwZUNvZGVfcHRyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBf
cHRyOyB9CiAgICBpbmxpbmUgb3BlcmF0b3IgVHlwZUNvZGVfcHRyKCkgY29uc3QgeyByZXR1cm4g
X3B0cjsgfQoKICAgIFR5cGVDb2RlX3B0ciBfcHRyOwoKICAgIHZvaWQgb3BlcmF0b3I+Pj0oTmV0
QnVmZmVyZWRTdHJlYW0mKSBjb25zdDsKICAgIHZvaWQgb3BlcmF0b3I8PD0oTmV0QnVmZmVyZWRT
dHJlYW0mKTsKICAgIHZvaWQgb3BlcmF0b3I+Pj0oTWVtQnVmZmVyZWRTdHJlYW0mKSBjb25zdDsK
ICAgIHZvaWQgb3BlcmF0b3I8PD0oTWVtQnVmZmVyZWRTdHJlYW0mKTsKICAgIHNpemVfdCBfTlBf
YWxpZ25lZFNpemUoc2l6ZV90KSBjb25zdDsKICB9OwoKCgp9CgpuYW1lc3BhY2UgQ09SQkEKewoK
CgoKCiMgMSAiLi4vb21uaU9SQjMvY29yYmFpZGxfZGVmcy5oaCIgMQoKCgoKCgoKY2xhc3MgSURM
VHlwZTsKY2xhc3MgX29ianJlZl9JRExUeXBlOwpjbGFzcyBfaW1wbF9JRExUeXBlOwoKdHlwZWRl
ZiBfb2JqcmVmX0lETFR5cGUqIElETFR5cGVfcHRyOwp0eXBlZGVmIElETFR5cGVfcHRyIElETFR5
cGVSZWY7CgpjbGFzcyBJRExUeXBlX0hlbHBlciB7CnB1YmxpYzoKICB0eXBlZGVmIElETFR5cGVf
cHRyIF9wdHJfdHlwZTsKCiAgc3RhdGljIF9wdHJfdHlwZSBfbmlsKCk7CiAgc3RhdGljIF9DT1JC
QV9Cb29sZWFuIGlzX25pbChfcHRyX3R5cGUpOwogIHN0YXRpYyB2b2lkIHJlbGVhc2UoX3B0cl90
eXBlKTsKICBzdGF0aWMgdm9pZCBkdXBsaWNhdGUoX3B0cl90eXBlKTsKICBzdGF0aWMgc2l6ZV90
IE5QX2FsaWduZWRTaXplKF9wdHJfdHlwZSwgc2l6ZV90KTsKICBzdGF0aWMgdm9pZCBtYXJzaGFs
T2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBl
IHVubWFyc2hhbE9ialJlZihOZXRCdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyB2b2lkIG1hcnNo
YWxPYmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyBfcHRyX3R5
cGUgdW5tYXJzaGFsT2JqUmVmKE1lbUJ1ZmZlcmVkU3RyZWFtJik7Cn07Cgp0eXBlZGVmIF9DT1JC
QV9PYmpSZWZfVmFyPF9vYmpyZWZfSURMVHlwZSwgSURMVHlwZV9IZWxwZXI+IElETFR5cGVfdmFy
Owp0eXBlZGVmIF9DT1JCQV9PYmpSZWZfT1VUX2FyZzxfb2JqcmVmX0lETFR5cGUsSURMVHlwZV9I
ZWxwZXIgPiBJRExUeXBlX291dDsKCgoKZXh0ZXJuIGNvbnN0IENPUkJBOjpUeXBlQ29kZV9wdHIg
X3RjX0lkZW50aWZpZXI7Cgp0eXBlZGVmIGNoYXIqIElkZW50aWZpZXI7CnR5cGVkZWYgQ09SQkE6
OlN0cmluZ192YXIgSWRlbnRpZmllcl92YXI7CgpzdHJ1Y3QgU3RydWN0TWVtYmVyIHsKICB0eXBl
ZGVmIF9DT1JCQV9Db25zdHJUeXBlX1ZhcmlhYmxlX1ZhcjxTdHJ1Y3RNZW1iZXI+IF92YXJfdHlw
ZTsKCiAgQ09SQkE6OlN0cmluZ19tZW1iZXIgbmFtZTsKCiAgQ09SQkE6OlR5cGVDb2RlX21lbWJl
ciB0eXBlOwoKICBfQ09SQkFfT2JqUmVmX01lbWJlcjwgX29ianJlZl9JRExUeXBlLCBJRExUeXBl
X0hlbHBlcj4gdHlwZV9kZWY7CgogIHNpemVfdCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90IGluaXRp
YWxvZmZzZXQpIGNvbnN0OwogIHZvaWQgb3BlcmF0b3I+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtICYp
IGNvbnN0OwogIHZvaWQgb3BlcmF0b3I8PD0gKE5ldEJ1ZmZlcmVkU3RyZWFtICYpOwogIHZvaWQg
b3BlcmF0b3I+Pj0gKE1lbUJ1ZmZlcmVkU3RyZWFtICYpIGNvbnN0OwogIHZvaWQgb3BlcmF0b3I8
PD0gKE1lbUJ1ZmZlcmVkU3RyZWFtICYpOwp9OwoKdHlwZWRlZiBTdHJ1Y3RNZW1iZXI6Ol92YXJf
dHlwZSBTdHJ1Y3RNZW1iZXJfdmFyOwoKdHlwZWRlZiBfQ09SQkFfQ29uc3RyVHlwZV9WYXJpYWJs
ZV9PVVRfYXJnPCBTdHJ1Y3RNZW1iZXIsU3RydWN0TWVtYmVyX3ZhciA+IFN0cnVjdE1lbWJlcl9v
dXQ7CgpleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfU3RydWN0TWVtYmVyOwoK
ZXh0ZXJuIGNvbnN0IENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1N0cnVjdE1lbWJlclNlcTsKCmNs
YXNzIFN0cnVjdE1lbWJlclNlcV92YXI7CgpjbGFzcyBTdHJ1Y3RNZW1iZXJTZXEgOiBwdWJsaWMg
X0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZTwgU3RydWN0TWVtYmVyPiB7CnB1YmxpYzoKICB0eXBl
ZGVmIFN0cnVjdE1lbWJlclNlcV92YXIgX3Zhcl90eXBlOwogIGlubGluZSBTdHJ1Y3RNZW1iZXJT
ZXEoKSB7fQogIGlubGluZSBTdHJ1Y3RNZW1iZXJTZXEoY29uc3QgU3RydWN0TWVtYmVyU2VxJiBz
KQogICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlPCBTdHJ1Y3RNZW1iZXI+IChzKSB7fQoK
ICBpbmxpbmUgU3RydWN0TWVtYmVyU2VxKF9DT1JCQV9VTG9uZyBfbWF4KQogICAgOiBfQ09SQkFf
VW5ib3VuZGVkX1NlcXVlbmNlPCBTdHJ1Y3RNZW1iZXI+IChfbWF4KSB7fQogIGlubGluZSBTdHJ1
Y3RNZW1iZXJTZXEoX0NPUkJBX1VMb25nIF9tYXgsIF9DT1JCQV9VTG9uZyBfbGVuLCBTdHJ1Y3RN
ZW1iZXIqIF92YWwsIF9DT1JCQV9Cb29sZWFuIF9yZWw9MCkKICAgIDogX0NPUkJBX1VuYm91bmRl
ZF9TZXF1ZW5jZTwgU3RydWN0TWVtYmVyPiAoX21heCwgX2xlbiwgX3ZhbCwgX3JlbCkge30KCiAg
aW5saW5lIFN0cnVjdE1lbWJlclNlcSYgb3BlcmF0b3IgPSAoY29uc3QgU3RydWN0TWVtYmVyU2Vx
JiBzKSB7CiAgICBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlPCBTdHJ1Y3RNZW1iZXI+IDo6b3Bl
cmF0b3I9KHMpOwogICAgcmV0dXJuICp0aGlzOwogIH0KfTsKCmNsYXNzIFN0cnVjdE1lbWJlclNl
cV9vdXQ7CgpjbGFzcyBTdHJ1Y3RNZW1iZXJTZXFfdmFyIHsKcHVibGljOgogIHR5cGVkZWYgU3Ry
dWN0TWVtYmVyU2VxIFQ7CiAgdHlwZWRlZiBTdHJ1Y3RNZW1iZXJTZXFfdmFyIFRfdmFyOwoKICBp
bmxpbmUgU3RydWN0TWVtYmVyU2VxX3ZhcigpIDogX3BkX3NlcSgwKSB7fQogIGlubGluZSBTdHJ1
Y3RNZW1iZXJTZXFfdmFyKFQqIHMpIDogX3BkX3NlcShzKSB7fQogIGlubGluZSBTdHJ1Y3RNZW1i
ZXJTZXFfdmFyKGNvbnN0IFRfdmFyJiBzKSB7CiAgICBpZiggcy5fcGRfc2VxICkgX3BkX3NlcSA9
IG5ldyBUKCpzLl9wZF9zZXEpOwogICAgZWxzZSBfcGRfc2VxID0gMDsKICB9CiAgaW5saW5lIH5T
dHJ1Y3RNZW1iZXJTZXFfdmFyKCkgeyBpZiggX3BkX3NlcSApIGRlbGV0ZSBfcGRfc2VxOyB9Cgog
IGlubGluZSBUX3ZhciYgb3BlcmF0b3IgPSAoVCogcykgewogICAgaWYoIF9wZF9zZXEgKSBkZWxl
dGUgX3BkX3NlcTsKICAgIF9wZF9zZXEgPSBzOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbmxp
bmUgVF92YXImIG9wZXJhdG9yID0gKGNvbnN0IFRfdmFyJiBzKSB7CiAgICBpZiggcy5fcGRfc2Vx
ICkgewogICAgICBpZiggIV9wZF9zZXEgKSBfcGRfc2VxID0gbmV3IFQ7CiAgICAgICpfcGRfc2Vx
ID0gKnMuX3BkX3NlcTsKICAgIH0gZWxzZSBpZiggX3BkX3NlcSApIHsKICAgICAgZGVsZXRlIF9w
ZF9zZXE7CiAgICAgIF9wZF9zZXEgPSAwOwogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAg
aW5saW5lIFN0cnVjdE1lbWJlciYgb3BlcmF0b3IgW10gKF9DT1JCQV9VTG9uZyBzKSB7CiAgICBy
ZXR1cm4gKCpfcGRfc2VxKVtzXTsKICB9CgogIGlubGluZSBUKiBvcGVyYXRvciAtPiAoKSB7IHJl
dHVybiBfcGRfc2VxOyB9CgoKCiAgaW5saW5lIG9wZXJhdG9yIGNvbnN0IFQmICgpIGNvbnN0IHsg
cmV0dXJuICpfcGRfc2VxOyB9CiAgaW5saW5lIG9wZXJhdG9yIFQmICgpIHsgcmV0dXJuICpfcGRf
c2VxOyB9CgoKICBpbmxpbmUgY29uc3QgVCYgaW4oKSBjb25zdCB7IHJldHVybiAqX3BkX3NlcTsg
fQogIGlubGluZSBUJiBpbm91dCgpIHsgcmV0dXJuICpfcGRfc2VxOyB9CiAgaW5saW5lIFQqJiBv
dXQoKSB7CiAgICBpZiggX3BkX3NlcSApIHsgZGVsZXRlIF9wZF9zZXE7IF9wZF9zZXEgPSAwOyB9
CiAgICByZXR1cm4gX3BkX3NlcTsKICB9CiAgaW5saW5lIFQqIF9yZXRuKCkgeyBUKiB0bXAgPSBf
cGRfc2VxOyBfcGRfc2VxID0gMDsgcmV0dXJuIHRtcDsgfQoKICBmcmllbmQgY2xhc3MgU3RydWN0
TWVtYmVyU2VxX291dDsKCnByaXZhdGU6CiAgVCogX3BkX3NlcTsKfTsKCmNsYXNzIFN0cnVjdE1l
bWJlclNlcV9vdXQgewpwdWJsaWM6CiAgdHlwZWRlZiBTdHJ1Y3RNZW1iZXJTZXEgVDsKICB0eXBl
ZGVmIFN0cnVjdE1lbWJlclNlcV92YXIgVF92YXI7CgogIGlubGluZSBTdHJ1Y3RNZW1iZXJTZXFf
b3V0KFQqJiBzKSA6IF9kYXRhKHMpIHsgX2RhdGEgPSAwOyB9CiAgaW5saW5lIFN0cnVjdE1lbWJl
clNlcV9vdXQoVF92YXImIHMpCiAgICA6IF9kYXRhKHMuX3BkX3NlcSkgeyBzID0gKFQqKSAwOyB9
CiAgaW5saW5lIFN0cnVjdE1lbWJlclNlcV9vdXQoY29uc3QgU3RydWN0TWVtYmVyU2VxX291dCYg
cykgOiBfZGF0YShzLl9kYXRhKSB7fQogIGlubGluZSBTdHJ1Y3RNZW1iZXJTZXFfb3V0JiBvcGVy
YXRvciA9IChjb25zdCBTdHJ1Y3RNZW1iZXJTZXFfb3V0JiBzKSB7CiAgICBfZGF0YSA9IHMuX2Rh
dGE7CiAgICByZXR1cm4gKnRoaXM7CiAgfSBpbmxpbmUgU3RydWN0TWVtYmVyU2VxX291dCYgb3Bl
cmF0b3IgPSAoVCogcykgewogICAgX2RhdGEgPSBzOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBp
bmxpbmUgb3BlcmF0b3IgVComKCkgeyByZXR1cm4gX2RhdGE7IH0KICBpbmxpbmUgVComIHB0cigp
IHsgcmV0dXJuIF9kYXRhOyB9CiAgaW5saW5lIFQqIG9wZXJhdG9yLT4oKSB7IHJldHVybiBfZGF0
YTsgfQoKICBpbmxpbmUgU3RydWN0TWVtYmVyJiBvcGVyYXRvciBbXSAoX0NPUkJBX1VMb25nIGkp
IHsKICAgIHJldHVybiAoKl9kYXRhKVtpXTsKICB9CgogIFQqJiBfZGF0YTsKCnByaXZhdGU6CiAg
U3RydWN0TWVtYmVyU2VxX291dCgpOwogIFN0cnVjdE1lbWJlclNlcV9vdXQmIG9wZXJhdG9yPShj
b25zdCBUX3ZhciYpOwp9OwoKc3RydWN0IFVuaW9uTWVtYmVyIHsKICB0eXBlZGVmIF9DT1JCQV9D
b25zdHJUeXBlX1ZhcmlhYmxlX1ZhcjxVbmlvbk1lbWJlcj4gX3Zhcl90eXBlOwoKICBDT1JCQTo6
U3RyaW5nX21lbWJlciBuYW1lOwoKICBDT1JCQTo6QW55IGxhYmVsOwoKICBDT1JCQTo6VHlwZUNv
ZGVfbWVtYmVyIHR5cGU7CgogIF9DT1JCQV9PYmpSZWZfTWVtYmVyPCBfb2JqcmVmX0lETFR5cGUs
IElETFR5cGVfSGVscGVyPiB0eXBlX2RlZjsKCiAgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXpl
X3QgaW5pdGlhbG9mZnNldCkgY29uc3Q7CiAgdm9pZCBvcGVyYXRvcj4+PSAoTmV0QnVmZmVyZWRT
dHJlYW0gJikgY29uc3Q7CiAgdm9pZCBvcGVyYXRvcjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0gJik7
CiAgdm9pZCBvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0gJikgY29uc3Q7CiAgdm9pZCBv
cGVyYXRvcjw8PSAoTWVtQnVmZmVyZWRTdHJlYW0gJik7Cn07Cgp0eXBlZGVmIFVuaW9uTWVtYmVy
OjpfdmFyX3R5cGUgVW5pb25NZW1iZXJfdmFyOwoKdHlwZWRlZiBfQ09SQkFfQ29uc3RyVHlwZV9W
YXJpYWJsZV9PVVRfYXJnPCBVbmlvbk1lbWJlcixVbmlvbk1lbWJlcl92YXIgPiBVbmlvbk1lbWJl
cl9vdXQ7CgpleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVW5pb25NZW1iZXI7
CgpleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVW5pb25NZW1iZXJTZXE7Cgpj
bGFzcyBVbmlvbk1lbWJlclNlcV92YXI7CgpjbGFzcyBVbmlvbk1lbWJlclNlcSA6IHB1YmxpYyBf
Q09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlPCBVbmlvbk1lbWJlcj4gewpwdWJsaWM6CiAgdHlwZWRl
ZiBVbmlvbk1lbWJlclNlcV92YXIgX3Zhcl90eXBlOwogIGlubGluZSBVbmlvbk1lbWJlclNlcSgp
IHt9CiAgaW5saW5lIFVuaW9uTWVtYmVyU2VxKGNvbnN0IFVuaW9uTWVtYmVyU2VxJiBzKQogICAg
OiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlPCBVbmlvbk1lbWJlcj4gKHMpIHt9CgogIGlubGlu
ZSBVbmlvbk1lbWJlclNlcShfQ09SQkFfVUxvbmcgX21heCkKICAgIDogX0NPUkJBX1VuYm91bmRl
ZF9TZXF1ZW5jZTwgVW5pb25NZW1iZXI+IChfbWF4KSB7fQogIGlubGluZSBVbmlvbk1lbWJlclNl
cShfQ09SQkFfVUxvbmcgX21heCwgX0NPUkJBX1VMb25nIF9sZW4sIFVuaW9uTWVtYmVyKiBfdmFs
LCBfQ09SQkFfQm9vbGVhbiBfcmVsPTApCiAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8
IFVuaW9uTWVtYmVyPiAoX21heCwgX2xlbiwgX3ZhbCwgX3JlbCkge30KCiAgaW5saW5lIFVuaW9u
TWVtYmVyU2VxJiBvcGVyYXRvciA9IChjb25zdCBVbmlvbk1lbWJlclNlcSYgcykgewogICAgX0NP
UkJBX1VuYm91bmRlZF9TZXF1ZW5jZTwgVW5pb25NZW1iZXI+IDo6b3BlcmF0b3I9KHMpOwogICAg
cmV0dXJuICp0aGlzOwogIH0KfTsKCmNsYXNzIFVuaW9uTWVtYmVyU2VxX291dDsKCmNsYXNzIFVu
aW9uTWVtYmVyU2VxX3ZhciB7CnB1YmxpYzoKICB0eXBlZGVmIFVuaW9uTWVtYmVyU2VxIFQ7CiAg
dHlwZWRlZiBVbmlvbk1lbWJlclNlcV92YXIgVF92YXI7CgogIGlubGluZSBVbmlvbk1lbWJlclNl
cV92YXIoKSA6IF9wZF9zZXEoMCkge30KICBpbmxpbmUgVW5pb25NZW1iZXJTZXFfdmFyKFQqIHMp
IDogX3BkX3NlcShzKSB7fQogIGlubGluZSBVbmlvbk1lbWJlclNlcV92YXIoY29uc3QgVF92YXIm
IHMpIHsKICAgIGlmKCBzLl9wZF9zZXEgKSBfcGRfc2VxID0gbmV3IFQoKnMuX3BkX3NlcSk7CiAg
ICBlbHNlIF9wZF9zZXEgPSAwOwogIH0KICBpbmxpbmUgflVuaW9uTWVtYmVyU2VxX3ZhcigpIHsg
aWYoIF9wZF9zZXEgKSBkZWxldGUgX3BkX3NlcTsgfQoKICBpbmxpbmUgVF92YXImIG9wZXJhdG9y
ID0gKFQqIHMpIHsKICAgIGlmKCBfcGRfc2VxICkgZGVsZXRlIF9wZF9zZXE7CiAgICBfcGRfc2Vx
ID0gczsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5saW5lIFRfdmFyJiBvcGVyYXRvciA9IChj
b25zdCBUX3ZhciYgcykgewogICAgaWYoIHMuX3BkX3NlcSApIHsKICAgICAgaWYoICFfcGRfc2Vx
ICkgX3BkX3NlcSA9IG5ldyBUOwogICAgICAqX3BkX3NlcSA9ICpzLl9wZF9zZXE7CiAgICB9IGVs
c2UgaWYoIF9wZF9zZXEgKSB7CiAgICAgIGRlbGV0ZSBfcGRfc2VxOwogICAgICBfcGRfc2VxID0g
MDsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBVbmlvbk1lbWJlciYgb3Bl
cmF0b3IgW10gKF9DT1JCQV9VTG9uZyBzKSB7CiAgICByZXR1cm4gKCpfcGRfc2VxKVtzXTsKICB9
CgogIGlubGluZSBUKiBvcGVyYXRvciAtPiAoKSB7IHJldHVybiBfcGRfc2VxOyB9CgoKCiAgaW5s
aW5lIG9wZXJhdG9yIGNvbnN0IFQmICgpIGNvbnN0IHsgcmV0dXJuICpfcGRfc2VxOyB9CiAgaW5s
aW5lIG9wZXJhdG9yIFQmICgpIHsgcmV0dXJuICpfcGRfc2VxOyB9CgoKICBpbmxpbmUgY29uc3Qg
VCYgaW4oKSBjb25zdCB7IHJldHVybiAqX3BkX3NlcTsgfQogIGlubGluZSBUJiBpbm91dCgpIHsg
cmV0dXJuICpfcGRfc2VxOyB9CiAgaW5saW5lIFQqJiBvdXQoKSB7CiAgICBpZiggX3BkX3NlcSAp
IHsgZGVsZXRlIF9wZF9zZXE7IF9wZF9zZXEgPSAwOyB9CiAgICByZXR1cm4gX3BkX3NlcTsKICB9
CiAgaW5saW5lIFQqIF9yZXRuKCkgeyBUKiB0bXAgPSBfcGRfc2VxOyBfcGRfc2VxID0gMDsgcmV0
dXJuIHRtcDsgfQoKICBmcmllbmQgY2xhc3MgVW5pb25NZW1iZXJTZXFfb3V0OwoKcHJpdmF0ZToK
ICBUKiBfcGRfc2VxOwp9OwoKY2xhc3MgVW5pb25NZW1iZXJTZXFfb3V0IHsKcHVibGljOgogIHR5
cGVkZWYgVW5pb25NZW1iZXJTZXEgVDsKICB0eXBlZGVmIFVuaW9uTWVtYmVyU2VxX3ZhciBUX3Zh
cjsKCiAgaW5saW5lIFVuaW9uTWVtYmVyU2VxX291dChUKiYgcykgOiBfZGF0YShzKSB7IF9kYXRh
ID0gMDsgfQogIGlubGluZSBVbmlvbk1lbWJlclNlcV9vdXQoVF92YXImIHMpCiAgICA6IF9kYXRh
KHMuX3BkX3NlcSkgeyBzID0gKFQqKSAwOyB9CiAgaW5saW5lIFVuaW9uTWVtYmVyU2VxX291dChj
b25zdCBVbmlvbk1lbWJlclNlcV9vdXQmIHMpIDogX2RhdGEocy5fZGF0YSkge30KICBpbmxpbmUg
VW5pb25NZW1iZXJTZXFfb3V0JiBvcGVyYXRvciA9IChjb25zdCBVbmlvbk1lbWJlclNlcV9vdXQm
IHMpIHsKICAgIF9kYXRhID0gcy5fZGF0YTsKICAgIHJldHVybiAqdGhpczsKICB9IGlubGluZSBV
bmlvbk1lbWJlclNlcV9vdXQmIG9wZXJhdG9yID0gKFQqIHMpIHsKICAgIF9kYXRhID0gczsKICAg
IHJldHVybiAqdGhpczsKICB9CiAgaW5saW5lIG9wZXJhdG9yIFQqJigpIHsgcmV0dXJuIF9kYXRh
OyB9CiAgaW5saW5lIFQqJiBwdHIoKSB7IHJldHVybiBfZGF0YTsgfQogIGlubGluZSBUKiBvcGVy
YXRvci0+KCkgeyByZXR1cm4gX2RhdGE7IH0KCiAgaW5saW5lIFVuaW9uTWVtYmVyJiBvcGVyYXRv
ciBbXSAoX0NPUkJBX1VMb25nIGkpIHsKICAgIHJldHVybiAoKl9kYXRhKVtpXTsKICB9CgogIFQq
JiBfZGF0YTsKCnByaXZhdGU6CiAgVW5pb25NZW1iZXJTZXFfb3V0KCk7CiAgVW5pb25NZW1iZXJT
ZXFfb3V0JiBvcGVyYXRvcj0oY29uc3QgVF92YXImKTsKfTsKCmV4dGVybiBjb25zdCBDT1JCQTo6
VHlwZUNvZGVfcHRyIF90Y19FbnVtTWVtYmVyU2VxOwoKY2xhc3MgRW51bU1lbWJlclNlcV92YXI7
CgpjbGFzcyBFbnVtTWVtYmVyU2VxIDogcHVibGljIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2Vf
X1N0cmluZyB7CnB1YmxpYzoKICB0eXBlZGVmIEVudW1NZW1iZXJTZXFfdmFyIF92YXJfdHlwZTsK
ICBpbmxpbmUgRW51bU1lbWJlclNlcSgpIHt9CiAgaW5saW5lIEVudW1NZW1iZXJTZXEoY29uc3Qg
RW51bU1lbWJlclNlcSYgcykKICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fU3RyaW5n
KHMpIHt9CgogIGlubGluZSBFbnVtTWVtYmVyU2VxKF9DT1JCQV9VTG9uZyBfbWF4KQogICAgOiBf
Q09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19TdHJpbmcoX21heCkge30KICBpbmxpbmUgRW51bU1l
bWJlclNlcShfQ09SQkFfVUxvbmcgX21heCwgX0NPUkJBX1VMb25nIF9sZW4sIGNoYXIqKiBfdmFs
LCBfQ09SQkFfQm9vbGVhbiBfcmVsPTApCiAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2Vf
X1N0cmluZyhfbWF4LCBfbGVuLCBfdmFsLCBfcmVsKSB7fQoKICBpbmxpbmUgRW51bU1lbWJlclNl
cSYgb3BlcmF0b3IgPSAoY29uc3QgRW51bU1lbWJlclNlcSYgcykgewogICAgX0NPUkJBX1VuYm91
bmRlZF9TZXF1ZW5jZV9fU3RyaW5nOjpvcGVyYXRvcj0ocyk7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQp9OwoKY2xhc3MgRW51bU1lbWJlclNlcV9vdXQ7CgpjbGFzcyBFbnVtTWVtYmVyU2VxX3ZhciB7
CnB1YmxpYzoKICB0eXBlZGVmIEVudW1NZW1iZXJTZXEgVDsKICB0eXBlZGVmIEVudW1NZW1iZXJT
ZXFfdmFyIFRfdmFyOwoKICBpbmxpbmUgRW51bU1lbWJlclNlcV92YXIoKSA6IF9wZF9zZXEoMCkg
e30KICBpbmxpbmUgRW51bU1lbWJlclNlcV92YXIoVCogcykgOiBfcGRfc2VxKHMpIHt9CiAgaW5s
aW5lIEVudW1NZW1iZXJTZXFfdmFyKGNvbnN0IFRfdmFyJiBzKSB7CiAgICBpZiggcy5fcGRfc2Vx
ICkgX3BkX3NlcSA9IG5ldyBUKCpzLl9wZF9zZXEpOwogICAgZWxzZSBfcGRfc2VxID0gMDsKICB9
CiAgaW5saW5lIH5FbnVtTWVtYmVyU2VxX3ZhcigpIHsgaWYoIF9wZF9zZXEgKSBkZWxldGUgX3Bk
X3NlcTsgfQoKICBpbmxpbmUgVF92YXImIG9wZXJhdG9yID0gKFQqIHMpIHsKICAgIGlmKCBfcGRf
c2VxICkgZGVsZXRlIF9wZF9zZXE7CiAgICBfcGRfc2VxID0gczsKICAgIHJldHVybiAqdGhpczsK
ICB9CiAgaW5saW5lIFRfdmFyJiBvcGVyYXRvciA9IChjb25zdCBUX3ZhciYgcykgewogICAgaWYo
IHMuX3BkX3NlcSApIHsKICAgICAgaWYoICFfcGRfc2VxICkgX3BkX3NlcSA9IG5ldyBUOwogICAg
ICAqX3BkX3NlcSA9ICpzLl9wZF9zZXE7CiAgICB9IGVsc2UgaWYoIF9wZF9zZXEgKSB7CiAgICAg
IGRlbGV0ZSBfcGRfc2VxOwogICAgICBfcGRfc2VxID0gMDsKICAgIH0KICAgIHJldHVybiAqdGhp
czsKICB9CgogIGlubGluZSBfQ09SQkFfU3RyaW5nX2VsZW1lbnQgb3BlcmF0b3IgW10gKF9DT1JC
QV9VTG9uZyBzKSB7CiAgICByZXR1cm4gKCpfcGRfc2VxKVtzXTsKICB9CgogIGlubGluZSBUKiBv
cGVyYXRvciAtPiAoKSB7IHJldHVybiBfcGRfc2VxOyB9CgoKCiAgaW5saW5lIG9wZXJhdG9yIGNv
bnN0IFQmICgpIGNvbnN0IHsgcmV0dXJuICpfcGRfc2VxOyB9CiAgaW5saW5lIG9wZXJhdG9yIFQm
ICgpIHsgcmV0dXJuICpfcGRfc2VxOyB9CgoKICBpbmxpbmUgY29uc3QgVCYgaW4oKSBjb25zdCB7
IHJldHVybiAqX3BkX3NlcTsgfQogIGlubGluZSBUJiBpbm91dCgpIHsgcmV0dXJuICpfcGRfc2Vx
OyB9CiAgaW5saW5lIFQqJiBvdXQoKSB7CiAgICBpZiggX3BkX3NlcSApIHsgZGVsZXRlIF9wZF9z
ZXE7IF9wZF9zZXEgPSAwOyB9CiAgICByZXR1cm4gX3BkX3NlcTsKICB9CiAgaW5saW5lIFQqIF9y
ZXRuKCkgeyBUKiB0bXAgPSBfcGRfc2VxOyBfcGRfc2VxID0gMDsgcmV0dXJuIHRtcDsgfQoKICBm
cmllbmQgY2xhc3MgRW51bU1lbWJlclNlcV9vdXQ7Cgpwcml2YXRlOgogIFQqIF9wZF9zZXE7Cn07
CgpjbGFzcyBFbnVtTWVtYmVyU2VxX291dCB7CnB1YmxpYzoKICB0eXBlZGVmIEVudW1NZW1iZXJT
ZXEgVDsKICB0eXBlZGVmIEVudW1NZW1iZXJTZXFfdmFyIFRfdmFyOwoKICBpbmxpbmUgRW51bU1l
bWJlclNlcV9vdXQoVComIHMpIDogX2RhdGEocykgeyBfZGF0YSA9IDA7IH0KICBpbmxpbmUgRW51
bU1lbWJlclNlcV9vdXQoVF92YXImIHMpCiAgICA6IF9kYXRhKHMuX3BkX3NlcSkgeyBzID0gKFQq
KSAwOyB9CiAgaW5saW5lIEVudW1NZW1iZXJTZXFfb3V0KGNvbnN0IEVudW1NZW1iZXJTZXFfb3V0
JiBzKSA6IF9kYXRhKHMuX2RhdGEpIHt9CiAgaW5saW5lIEVudW1NZW1iZXJTZXFfb3V0JiBvcGVy
YXRvciA9IChjb25zdCBFbnVtTWVtYmVyU2VxX291dCYgcykgewogICAgX2RhdGEgPSBzLl9kYXRh
OwogICAgcmV0dXJuICp0aGlzOwogIH0gaW5saW5lIEVudW1NZW1iZXJTZXFfb3V0JiBvcGVyYXRv
ciA9IChUKiBzKSB7CiAgICBfZGF0YSA9IHM7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGlubGlu
ZSBvcGVyYXRvciBUKiYoKSB7IHJldHVybiBfZGF0YTsgfQogIGlubGluZSBUKiYgcHRyKCkgeyBy
ZXR1cm4gX2RhdGE7IH0KICBpbmxpbmUgVCogb3BlcmF0b3ItPigpIHsgcmV0dXJuIF9kYXRhOyB9
CgogIGlubGluZSBfQ09SQkFfU3RyaW5nX2VsZW1lbnQgb3BlcmF0b3IgW10gKF9DT1JCQV9VTG9u
ZyBpKSB7CiAgICByZXR1cm4gKCpfZGF0YSlbaV07CiAgfQoKICBUKiYgX2RhdGE7Cgpwcml2YXRl
OgogIEVudW1NZW1iZXJTZXFfb3V0KCk7CiAgRW51bU1lbWJlclNlcV9vdXQmIG9wZXJhdG9yPShj
b25zdCBUX3ZhciYpOwp9OwojIDE0MTEgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvQ09S
QkEuaCIgMgojIDE0MjMgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvQ09SQkEuaCIKICBj
bGFzcyBJbnRlcmZhY2VEZWY7CiAgY2xhc3MgX29ianJlZl9JbnRlcmZhY2VEZWY7CgogIGNsYXNz
IEltcGxlbWVudGF0aW9uRGVmIHt9OwogIHR5cGVkZWYgSW1wbGVtZW50YXRpb25EZWYqIEltcGxl
bWVudGF0aW9uRGVmX3B0cjsKICB0eXBlZGVmIEltcGxlbWVudGF0aW9uRGVmX3B0ciBJbXBsZW1l
bnRhdGlvbkRlZlJlZjsKCiAgY2xhc3MgT3BlcmF0aW9uRGVmOwogIGNsYXNzIF9vYmpyZWZfT3Bl
cmF0aW9uRGVmOwoKICBjbGFzcyBTZXJ2ZXJSZXF1ZXN0OwogIHR5cGVkZWYgU2VydmVyUmVxdWVz
dCogU2VydmVyUmVxdWVzdF9wdHI7CiAgdHlwZWRlZiBTZXJ2ZXJSZXF1ZXN0X3B0ciBTZXJ2ZXJS
ZXF1ZXN0UmVmOwoKICBjbGFzcyBSZXF1ZXN0OwogIHR5cGVkZWYgUmVxdWVzdCogUmVxdWVzdF9w
dHI7CiAgdHlwZWRlZiBSZXF1ZXN0X3B0ciBSZXF1ZXN0UmVmOwogIHR5cGVkZWYgX0NPUkJBX1Bz
ZXVkb09ial9WYXI8UmVxdWVzdD4gUmVxdWVzdF92YXI7CiAgdHlwZWRlZiBfQ09SQkFfUHNldWRv
T2JqX091dDxSZXF1ZXN0LFJlcXVlc3RfdmFyPiBSZXF1ZXN0X291dDsKICB0eXBlZGVmIF9DT1JC
QV9Qc2V1ZG9PYmpfTWVtYmVyPFJlcXVlc3QsUmVxdWVzdF92YXI+IFJlcXVlc3RfbWVtYmVyOwoK
CgoKCiAgY2xhc3MgT2JqZWN0X0hlbHBlciB7CiAgcHVibGljOgogICAgdHlwZWRlZiBPYmplY3Rf
cHRyIF9wdHJfdHlwZTsKCiAgICBzdGF0aWMgX3B0cl90eXBlIF9uaWwoKTsKICAgIHN0YXRpYyBf
Q09SQkFfQm9vbGVhbiBpc19uaWwoX3B0cl90eXBlKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2Uo
X3B0cl90eXBlKTsKICAgIHN0YXRpYyB2b2lkIGR1cGxpY2F0ZShfcHRyX3R5cGUpOwogICAgc3Rh
dGljIHNpemVfdCBOUF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgICBzdGF0aWMg
dm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsKICAgIHN0
YXRpYyBfcHRyX3R5cGUgdW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgICBz
dGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsK
ICAgIHN0YXRpYyBfcHRyX3R5cGUgdW5tYXJzaGFsT2JqUmVmKE1lbUJ1ZmZlcmVkU3RyZWFtJik7
CiAgfTsKCiAgY2xhc3MgT2JqZWN0IHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIE9iamVjdF9wdHIg
X3B0cl90eXBlOwogICAgdHlwZWRlZiBPYmplY3RfdmFyIF92YXJfdHlwZTsKCiAgICB2aXJ0dWFs
IH5PYmplY3QoKTsKCiAgICBTdGF0dXMgX2NyZWF0ZV9yZXF1ZXN0KENvbnRleHRfcHRyIGN0eCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb3BlcmF0aW9uLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBOVkxpc3RfcHRyIGFyZ19saXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBOYW1lZFZhbHVlX3B0ciByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJlcXVlc3Rfb3V0IHJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdz
IHJlcV9mbGFncyk7CgogICAgU3RhdHVzIF9jcmVhdGVfcmVxdWVzdChDb250ZXh0X3B0ciBjdHgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9wZXJhdGlvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlZMaXN0X3B0ciBhcmdfbGlzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTmFtZWRWYWx1ZV9wdHIgcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBFeGNlcHRpb25MaXN0X3B0ciBleGNlcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb250ZXh0TGlzdF9wdHIgY3R4bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
UmVxdWVzdF9vdXQgcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3MgcmVx
X2ZsYWdzKTsKCiAgICBSZXF1ZXN0X3B0ciBfcmVxdWVzdChjb25zdCBjaGFyKiBvcGVyYXRpb24p
OwoKICAgIEltcGxlbWVudGF0aW9uRGVmX3B0ciBfZ2V0X2ltcGxlbWVudGF0aW9uKCk7CiAgICBf
b2JqcmVmX0ludGVyZmFjZURlZiogX2dldF9pbnRlcmZhY2UoKTsKCgogICAgQm9vbGVhbiBfaXNf
YShjb25zdCBjaGFyKiByZXBvSWQpOwogICAgdmlydHVhbCBCb29sZWFuIF9ub25fZXhpc3RlbnQo
KTsKICAgIEJvb2xlYW4gX2lzX2VxdWl2YWxlbnQoX3B0cl90eXBlIG90aGVyX29iamVjdCk7CiAg
ICBVTG9uZyBfaGFzaChVTG9uZyBtYXhpbXVtKTsKCiAgICBzdGF0aWMgX3B0cl90eXBlIF9kdXBs
aWNhdGUoX3B0cl90eXBlKTsKICAgIHN0YXRpYyBpbmxpbmUgX3B0cl90eXBlIF9uYXJyb3coT2Jq
ZWN0X3B0ciBvKSB7IHJldHVybiBfZHVwbGljYXRlKG8pOyB9CiAgICBzdGF0aWMgX3B0cl90eXBl
IF9uaWwoKTsKCgoKCgogICAgaW5saW5lIE9iamVjdCgpIDogcGRfb2JqKDApLCBwZF9tYWdpYyhf
UFJfbWFnaWMpIHt9CgogICAgaW5saW5lIEJvb2xlYW4gX05QX2lzX25pbCgpIGNvbnN0IHsgcmV0
dXJuIHBkX29iaiA9PSAwOyB9CiAgICBpbmxpbmUgQm9vbGVhbiBfTlBfaXNfcHNldWRvKCkgY29u
c3QgeyByZXR1cm4gcGRfb2JqID09IChvbW5pT2JqUmVmKikgMTsgfQogICAgaW5saW5lIG9tbmlP
YmpSZWYqIF9QUl9nZXRvYmooKSB7IHJldHVybiBwZF9vYmo7IH0KICAgIGlubGluZSB2b2lkIF9Q
Ul9zZXRvYmoob21uaU9ialJlZiogbykgeyBwZF9vYmogPSBvOyB9CiAgICBzdGF0aWMgaW5saW5l
IF9DT1JCQV9Cb29sZWFuIF9QUl9pc192YWxpZChPYmplY3RfcHRyIHApIHsKICAgICAgcmV0dXJu
IHAgPyAocC0+cGRfbWFnaWMgPT0gX1BSX21hZ2ljKSA6IDE7CiAgICB9CgogICAgdmlydHVhbCB2
b2lkIF9OUF9pbmNyUmVmQ291bnQoKTsKICAgIHZpcnR1YWwgdm9pZCBfTlBfZGVjclJlZkNvdW50
KCk7CiAgICB2aXJ0dWFsIHZvaWQqIF9wdHJUb09ialJlZihjb25zdCBjaGFyKiByZXBvSWQpOwoK
ICAgIHN0YXRpYyBzaXplX3QgX05QX2FsaWduZWRTaXplKE9iamVjdF9wdHIsIHNpemVfdCk7CiAg
ICBzdGF0aWMgdm9pZCBfbWFyc2hhbE9ialJlZihPYmplY3RfcHRyLCBOZXRCdWZmZXJlZFN0cmVh
bSYpOwogICAgc3RhdGljIE9iamVjdF9wdHIgX3VubWFyc2hhbE9ialJlZihOZXRCdWZmZXJlZFN0
cmVhbSYpOwogICAgc3RhdGljIHZvaWQgX21hcnNoYWxPYmpSZWYoT2JqZWN0X3B0ciwgTWVtQnVm
ZmVyZWRTdHJlYW0mKTsKICAgIHN0YXRpYyBPYmplY3RfcHRyIF91bm1hcnNoYWxPYmpSZWYoTWVt
QnVmZmVyZWRTdHJlYW0mKTsKCiAgICBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsKICAg
IHN0YXRpYyBjb25zdCBVTG9uZyBfUFJfbWFnaWM7CgogIHByaXZhdGU6CiAgICBvbW5pT2JqUmVm
KiBwZF9vYmo7CgoKICAgIFVMb25nIHBkX21hZ2ljOwogIH07CgoKCgoKCgogIHN0cnVjdCBQUl9z
dHJ1Y3RNZW1iZXIgewogICAgY29uc3QgY2hhciogbmFtZTsKICAgIFR5cGVDb2RlX3B0ciB0eXBl
OwogIH07CgogIHR5cGVkZWYgVUxvbmcgUFJfdW5pb25EaXNjcmltaW5hdG9yOwoKICBzdHJ1Y3Qg
UFJfdW5pb25NZW1iZXIgewogICAgY29uc3QgY2hhciogbmFtZTsKICAgIFR5cGVDb2RlX3B0ciB0
eXBlOwogICAgUFJfdW5pb25EaXNjcmltaW5hdG9yIGxhYmVsOwogIH07CgogIGVudW0gVENLaW5k
IHsKICAgIHRrX251bGwgPSAwLAogICAgdGtfdm9pZCA9IDEsCiAgICB0a19zaG9ydCA9IDIsCiAg
ICB0a19sb25nID0gMywKICAgIHRrX3VzaG9ydCA9IDQsCiAgICB0a191bG9uZyA9IDUsCiAgICB0
a19mbG9hdCA9IDYsCiAgICB0a19kb3VibGUgPSA3LAogICAgdGtfYm9vbGVhbiA9IDgsCiAgICB0
a19jaGFyID0gOSwKICAgIHRrX29jdGV0ID0gMTAsCiAgICB0a19hbnkgPSAxMSwKICAgIHRrX1R5
cGVDb2RlID0gMTIsCiAgICB0a19QcmluY2lwYWw9IDEzLAogICAgdGtfb2JqcmVmID0gMTQsCiAg
ICB0a19zdHJ1Y3QgPSAxNSwKICAgIHRrX3VuaW9uID0gMTYsCiAgICB0a19lbnVtID0gMTcsCiAg
ICB0a19zdHJpbmcgPSAxOCwKICAgIHRrX3NlcXVlbmNlID0gMTksCiAgICB0a19hcnJheSA9IDIw
LAogICAgdGtfYWxpYXMgPSAyMSwKICAgIHRrX2V4Y2VwdCA9IDIyLAogICAgdGtfbG9uZ2xvbmcg
PSAyMywKICAgIHRrX3Vsb25nbG9uZyA9IDI0LAogICAgdGtfbG9uZ2RvdWJsZSA9IDI1CiAgfTsK
CgogIGNsYXNzIFR5cGVDb2RlIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIH5UeXBlQ29kZSgpOwoK
ICAgIFRDS2luZCBraW5kKCkgY29uc3Q7CgogICAgQm9vbGVhbiBlcXVhbChUeXBlQ29kZV9wdHIg
VENwKSBjb25zdDsKCiAgICBCb29sZWFuIGVxdWl2YWxlbnQoVHlwZUNvZGVfcHRyIFRDcCkgY29u
c3Q7CgoKICAgIFR5cGVDb2RlX3B0ciBnZXRfY29tcGFjdF90eXBlY29kZSgpIGNvbnN0OwoKCiAg
ICBjb25zdCBjaGFyKiBpZCgpIGNvbnN0OwogICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0OwoK
ICAgIFVMb25nIG1lbWJlcl9jb3VudCgpIGNvbnN0OwogICAgY29uc3QgY2hhciogbWVtYmVyX25h
bWUoVUxvbmcgaW5kZXgpIGNvbnN0OwoKICAgIFR5cGVDb2RlX3B0ciBtZW1iZXJfdHlwZShVTG9u
ZyBpKSBjb25zdDsKCiAgICBBbnkqIG1lbWJlcl9sYWJlbChVTG9uZyBpKSBjb25zdDsKICAgIFR5
cGVDb2RlX3B0ciBkaXNjcmltaW5hdG9yX3R5cGUoKSBjb25zdDsKICAgIExvbmcgZGVmYXVsdF9p
bmRleCgpIGNvbnN0OwoKICAgIFVMb25nIGxlbmd0aCgpIGNvbnN0OwoKICAgIFR5cGVDb2RlX3B0
ciBjb250ZW50X3R5cGUoKSBjb25zdDsKCiAgICBMb25nIHBhcmFtX2NvdW50KCkgY29uc3Q7CiAg
ICBBbnkqIHBhcmFtZXRlcihMb25nIGluZGV4KSBjb25zdDsKIyAxNjI1ICIuLi8uLi8uLi8uLi9p
bmNsdWRlL29tbmlPUkIzL0NPUkJBLmgiCiAgICBzdGF0aWMgVHlwZUNvZGVfcHRyIF9kdXBsaWNh
dGUoVHlwZUNvZGVfcHRyIHQpOwogICAgc3RhdGljIFR5cGVDb2RlX3B0ciBfbmlsKCk7CgoKCiAg
ICBjbGFzcyBCb3VuZHMgOiBwdWJsaWMgVXNlckV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIEJv
dW5kcygpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55
Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBCb3VuZHMoY29uc3QgQm91bmRzJiBf
ZXgpIDogVXNlckV4Y2VwdGlvbihfZXgpIHt9IGlubGluZSBCb3VuZHMmIG9wZXJhdG9yPShjb25z
dCBCb3VuZHMmIF9leCkgeyAqIChVc2VyRXhjZXB0aW9uKikgdGhpcyA9IF9leDsgcmV0dXJuICp0
aGlzOyB9IHZpcnR1YWwgfkJvdW5kcygpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0YXRpYyBC
b3VuZHMqIF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IEJvdW5kcyogX2Rvd25j
YXN0KGNvbnN0IEV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIEJvdW5kcyogX25hcnJvdyhFeGNl
cHRpb24qIF9leCkgeyByZXR1cm4gX2Rvd25jYXN0KF9leCk7IH0gaW5saW5lIHNpemVfdCBfTlBf
YWxpZ25lZFNpemUoc2l6ZV90IG9zKSBjb25zdCB7IHJldHVybiBvczsgfSBpbmxpbmUgdm9pZCBv
cGVyYXRvcj4+PShOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0IHt9IGlubGluZSB2b2lkIG9wZXJh
dG9yPj49KE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I8
PD0oTmV0QnVmZmVyZWRTdHJlYW0mKSB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShNZW1CdWZm
ZXJlZFN0cmVhbSYpIHt9IHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZu
OyBzdGF0aWMgaW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgc3RhdGlj
IGNvbnN0IGNoYXIqIF9QRF9yZXBvSWQ7IHByaXZhdGU6IHZpcnR1YWwgRXhjZXB0aW9uKiBfTlBf
ZHVwbGljYXRlKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0
OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgdmlydHVh
bCB2b2lkIF9OUF9tYXJzaGFsKE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IHZpcnR1YWwgdm9p
ZCBfTlBfbWFyc2hhbChNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0OyB9OwogICAgY2xhc3MgQmFk
S2luZCA6IHB1YmxpYyBVc2VyRXhjZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgQmFkS2luZCgpIHsg
cGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBp
bnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBCYWRLaW5kKGNvbnN0IEJhZEtpbmQmIF9leCkgOiBV
c2VyRXhjZXB0aW9uKF9leCkge30gaW5saW5lIEJhZEtpbmQmIG9wZXJhdG9yPShjb25zdCBCYWRL
aW5kJiBfZXgpIHsgKiAoVXNlckV4Y2VwdGlvbiopIHRoaXMgPSBfZXg7IHJldHVybiAqdGhpczsg
fSB2aXJ0dWFsIH5CYWRLaW5kKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGljIEJhZEtp
bmQqIF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IEJhZEtpbmQqIF9kb3duY2Fz
dChjb25zdCBFeGNlcHRpb24qKTsgc3RhdGljIGlubGluZSBCYWRLaW5kKiBfbmFycm93KEV4Y2Vw
dGlvbiogX2V4KSB7IHJldHVybiBfZG93bmNhc3QoX2V4KTsgfSBpbmxpbmUgc2l6ZV90IF9OUF9h
bGlnbmVkU2l6ZShzaXplX3Qgb3MpIGNvbnN0IHsgcmV0dXJuIG9zOyB9IGlubGluZSB2b2lkIG9w
ZXJhdG9yPj49KE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0
b3I+Pj0oTWVtQnVmZmVyZWRTdHJlYW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8
PShOZXRCdWZmZXJlZFN0cmVhbSYpIHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE1lbUJ1ZmZl
cmVkU3RyZWFtJikge30gc3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47
IHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBzdGF0aWMg
Y29uc3QgY2hhciogX1BEX3JlcG9JZDsgcHJpdmF0ZTogdmlydHVhbCBFeGNlcHRpb24qIF9OUF9k
dXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7
IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyB2aXJ0dWFs
IHZvaWQgX05QX21hcnNoYWwoTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdDsgdmlydHVhbCB2b2lk
IF9OUF9tYXJzaGFsKE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IH07CgogICAgc3RhdGljIHZv
aWQgbWFyc2hhbFR5cGVDb2RlKFR5cGVDb2RlX3B0ciBvYmosTmV0QnVmZmVyZWRTdHJlYW0mIHMp
OwogICAgc3RhdGljIFR5cGVDb2RlX3B0ciB1bm1hcnNoYWxUeXBlQ29kZShOZXRCdWZmZXJlZFN0
cmVhbSYgcyk7CgoKICAgIHN0YXRpYyB2b2lkIG1hcnNoYWxUeXBlQ29kZShUeXBlQ29kZV9wdHIg
b2JqLE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgdW5tYXJz
aGFsVHlwZUNvZGUoTWVtQnVmZmVyZWRTdHJlYW0mIHMpOwojIDE2NTQgIi4uLy4uLy4uLy4uL2lu
Y2x1ZGUvb21uaU9SQjMvQ09SQkEuaCIKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgTlBfdW5pb25f
dGMoY29uc3QgY2hhciogaWQsIGNvbnN0IGNoYXIqIG5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFR5cGVDb2RlX3B0ciBkaXNjcmltaW5hdG9yX3R5cGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVuaW9uTWVtYmVyU2VxJiBtZW1iZXJz
KTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgTlBfZW51bV90Yyhjb25zdCBjaGFyKiBpZCwgY29u
c3QgY2hhciogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBF
bnVtTWVtYmVyU2VxJiBtZW1iZXJzKTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgTlBfYWxpYXNf
dGMoY29uc3QgY2hhciogaWQsIGNvbnN0IGNoYXIqIG5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFR5cGVDb2RlX3B0ciBvcmlnaW5hbF90eXBlKTsKICAgIHN0YXRpYyBU
eXBlQ29kZV9wdHIgTlBfaW50ZXJmYWNlX3RjKGNvbnN0IGNoYXIqIGlkLCBjb25zdCBjaGFyKiBu
YW1lKTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgTlBfc3RyaW5nX3RjKFVMb25nIGJvdW5kKTsK
ICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgTlBfc2VxdWVuY2VfdGMoVUxvbmcgYm91bmQsIFR5cGVD
b2RlX3B0ciBlbGVtZW50X3R5cGUpOwogICAgc3RhdGljIFR5cGVDb2RlX3B0ciBOUF9hcnJheV90
YyhVTG9uZyBsZW5ndGgsIFR5cGVDb2RlX3B0ciBlbGVtZW50X3R5cGUpOwogICAgc3RhdGljIFR5
cGVDb2RlX3B0ciBOUF9yZWN1cnNpdmVfc2VxdWVuY2VfdGMoVUxvbmcgYm91bmQsIFVMb25nIG9m
ZnNldCk7CgoKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgUFJfc3RydWN0X3RjKGNvbnN0IGNoYXIq
IGlkLCBjb25zdCBjaGFyKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUFJfc3RydWN0TWVtYmVyKiBtZW1iZXJzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVUxvbmcgbWVtYmVyQ291bnQpOwoKCiAgICBzdGF0aWMgVHlwZUNvZGVf
cHRyIFBSX3VuaW9uX3RjKGNvbnN0IGNoYXIqIGlkLCBjb25zdCBjaGFyKiBuYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlQ29kZV9wdHIgZGlzY3JpbWluYXRvcl90
eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQUl91bmlvbk1l
bWJlciogbWVtYmVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUxvbmcg
bWVtYmVyQ291bnQsIExvbmcgZGVmbHQgPSAtMSk7CiAgICBzdGF0aWMgVHlwZUNvZGVfcHRyIFBS
X2VudW1fdGMoY29uc3QgY2hhciogaWQsIGNvbnN0IGNoYXIqIG5hbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioqIG1lbWJlcnMsIFVMb25nIG1lbWJlckNv
dW50KTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgUFJfYWxpYXNfdGMoY29uc3QgY2hhciogaWQs
IGNvbnN0IGNoYXIqIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5
cGVDb2RlX3B0ciBvcmlnaW5hbF90eXBlKTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgUFJfZXhj
ZXB0aW9uX3RjKGNvbnN0IGNoYXIqIGlkLCBjb25zdCBjaGFyKiBuYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUFJfc3RydWN0TWVtYmVyKiBtZW1iZXJz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUxvbmcgbWVtYmVyQ291
bnQpOwoKCiAgICBzdGF0aWMgVHlwZUNvZGVfcHRyIFBSX2ludGVyZmFjZV90Yyhjb25zdCBjaGFy
KiBpZCwgY29uc3QgY2hhciogbmFtZSk7CiAgICBzdGF0aWMgVHlwZUNvZGVfcHRyIFBSX3N0cmlu
Z190YyhVTG9uZyBib3VuZCk7CiAgICBzdGF0aWMgVHlwZUNvZGVfcHRyIFBSX3NlcXVlbmNlX3Rj
KFVMb25nIGJvdW5kLCBUeXBlQ29kZV9wdHIgZWxlbWVudF90eXBlKTsKICAgIHN0YXRpYyBUeXBl
Q29kZV9wdHIgUFJfYXJyYXlfdGMoVUxvbmcgbGVuZ3RoLCBUeXBlQ29kZV9wdHIgZWxlbWVudF90
eXBlKTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgUFJfcmVjdXJzaXZlX3NlcXVlbmNlX3RjKFVM
b25nIGJvdW5kLCBVTG9uZyBvZmZzZXQpOwogICAgc3RhdGljIFR5cGVDb2RlX3B0ciBQUl9udWxs
X3RjKCk7CiAgICBzdGF0aWMgVHlwZUNvZGVfcHRyIFBSX3ZvaWRfdGMoKTsKICAgIHN0YXRpYyBU
eXBlQ29kZV9wdHIgUFJfc2hvcnRfdGMoKTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgUFJfbG9u
Z190YygpOwogICAgc3RhdGljIFR5cGVDb2RlX3B0ciBQUl91c2hvcnRfdGMoKTsKICAgIHN0YXRp
YyBUeXBlQ29kZV9wdHIgUFJfdWxvbmdfdGMoKTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgUFJf
ZmxvYXRfdGMoKTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgUFJfZG91YmxlX3RjKCk7CiAgICBz
dGF0aWMgVHlwZUNvZGVfcHRyIFBSX2Jvb2xlYW5fdGMoKTsKICAgIHN0YXRpYyBUeXBlQ29kZV9w
dHIgUFJfY2hhcl90YygpOwogICAgc3RhdGljIFR5cGVDb2RlX3B0ciBQUl9vY3RldF90YygpOwog
ICAgc3RhdGljIFR5cGVDb2RlX3B0ciBQUl9hbnlfdGMoKTsKICAgIHN0YXRpYyBUeXBlQ29kZV9w
dHIgUFJfVHlwZUNvZGVfdGMoKTsKICAgIHN0YXRpYyBUeXBlQ29kZV9wdHIgUFJfUHJpbmNpcGFs
X3RjKCk7CiAgICBzdGF0aWMgVHlwZUNvZGVfcHRyIFBSX09iamVjdF90YygpOwogICAgc3RhdGlj
IFR5cGVDb2RlX3B0ciBQUl9zdHJpbmdfdGMoKTsKCgogICAgc2l6ZV90IF9OUF9hbGlnbmVkU2l6
ZShzaXplX3QgaW5pdGlhbG9mZnNldCkgY29uc3Q7CiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFu
IE5QX2lzX25pbCgpIGNvbnN0OwoKICAgIHN0YXRpYyBpbmxpbmUgX0NPUkJBX0Jvb2xlYW4gUFJf
aXNfdmFsaWQoVHlwZUNvZGVfcHRyIHAgKSB7CiAgICAgIHJldHVybiAoKHApID8gKHAtPnBkX21h
Z2ljID09IFBSX21hZ2ljKSA6IDEpOwogICAgfQogICAgc3RhdGljIGNvbnN0IENPUkJBOjpVTG9u
ZyBQUl9tYWdpYzsKCiAgcHJvdGVjdGVkOgoKICAgIFR5cGVDb2RlKGNvbnN0IFR5cGVDb2RlJiB0
Yyk7CiAgICBUeXBlQ29kZSYgb3BlcmF0b3I9KGNvbnN0IFR5cGVDb2RlJiB0Yyk7CiAgICBUeXBl
Q29kZSgpIHsgcGRfbWFnaWMgPSBQUl9tYWdpYzsgfTsKCiAgICBfQ09SQkFfVUxvbmcgcGRfbWFn
aWM7CiAgfTsKCgoKCgoKICBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y19udWxsOwogIGV4dGVybiBU
eXBlQ29kZV9wdHIgX3RjX3ZvaWQ7CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfc2hvcnQ7CiAg
ZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfbG9uZzsKICBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y191
c2hvcnQ7CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfdWxvbmc7CiAgZXh0ZXJuIFR5cGVDb2Rl
X3B0ciBfdGNfZmxvYXQ7CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfZG91YmxlOwogIGV4dGVy
biBUeXBlQ29kZV9wdHIgX3RjX2Jvb2xlYW47CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfY2hh
cjsKICBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y19vY3RldDsKICBleHRlcm4gVHlwZUNvZGVfcHRy
IF90Y19hbnk7CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfVHlwZUNvZGU7CiAgZXh0ZXJuIFR5
cGVDb2RlX3B0ciBfdGNfUHJpbmNpcGFsOwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX09iamVj
dDsKICBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y19zdHJpbmc7CiAgZXh0ZXJuIFR5cGVDb2RlX3B0
ciBfdGNfTmFtZWRWYWx1ZTsKCgoKCgoKICBjbGFzcyBEeW5Bbnk7CiAgdHlwZWRlZiBEeW5Bbnkq
IER5bkFueV9wdHI7CiAgdHlwZWRlZiBEeW5BbnlfcHRyIER5bkFueVJlZjsKCiAgY2xhc3MgRHlu
RW51bTsKICB0eXBlZGVmIER5bkVudW0qIER5bkVudW1fcHRyOwogIHR5cGVkZWYgRHluRW51bV9w
dHIgRHluRW51bVJlZjsKCiAgY2xhc3MgRHluU3RydWN0OwogIHR5cGVkZWYgRHluU3RydWN0KiBE
eW5TdHJ1Y3RfcHRyOwogIHR5cGVkZWYgRHluU3RydWN0X3B0ciBEeW5TdHJ1Y3RSZWY7CgogIGNs
YXNzIER5blVuaW9uOwogIHR5cGVkZWYgRHluVW5pb24qIER5blVuaW9uX3B0cjsKICB0eXBlZGVm
IER5blVuaW9uX3B0ciBEeW5VbmlvblJlZjsKCiAgY2xhc3MgRHluU2VxdWVuY2U7CiAgdHlwZWRl
ZiBEeW5TZXF1ZW5jZSogRHluU2VxdWVuY2VfcHRyOwogIHR5cGVkZWYgRHluU2VxdWVuY2VfcHRy
IER5blNlcXVlbmNlUmVmOwoKICBjbGFzcyBEeW5BcnJheTsKICB0eXBlZGVmIER5bkFycmF5KiBE
eW5BcnJheV9wdHI7CiAgdHlwZWRlZiBEeW5BcnJheV9wdHIgRHluQXJyYXlSZWY7CgoKCgoKCiAg
Y2xhc3MgRHluQW55IHsKICBwdWJsaWM6CgogICAgY2xhc3MgSW52YWxpZCA6IHB1YmxpYyBVc2Vy
RXhjZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgSW52YWxpZCgpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9
IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9
IGlubGluZSBJbnZhbGlkKGNvbnN0IEludmFsaWQmIF9leCkgOiBVc2VyRXhjZXB0aW9uKF9leCkg
e30gaW5saW5lIEludmFsaWQmIG9wZXJhdG9yPShjb25zdCBJbnZhbGlkJiBfZXgpIHsgKiAoVXNl
ckV4Y2VwdGlvbiopIHRoaXMgPSBfZXg7IHJldHVybiAqdGhpczsgfSB2aXJ0dWFsIH5JbnZhbGlk
KCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGljIEludmFsaWQqIF9kb3duY2FzdChFeGNl
cHRpb24qKTsgc3RhdGljIGNvbnN0IEludmFsaWQqIF9kb3duY2FzdChjb25zdCBFeGNlcHRpb24q
KTsgc3RhdGljIGlubGluZSBJbnZhbGlkKiBfbmFycm93KEV4Y2VwdGlvbiogX2V4KSB7IHJldHVy
biBfZG93bmNhc3QoX2V4KTsgfSBpbmxpbmUgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3Qg
b3MpIGNvbnN0IHsgcmV0dXJuIG9zOyB9IGlubGluZSB2b2lkIG9wZXJhdG9yPj49KE5ldEJ1ZmZl
cmVkU3RyZWFtJikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTWVtQnVmZmVyZWRT
dHJlYW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShOZXRCdWZmZXJlZFN0cmVh
bSYpIHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE1lbUJ1ZmZlcmVkU3RyZWFtJikge30gc3Rh
dGljIGluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBpbnNlcnRFeGNl
cHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBzdGF0aWMgY29uc3QgY2hhciogX1BEX3Jl
cG9JZDsgcHJpdmF0ZTogdmlydHVhbCBFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsg
dmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hh
ciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX05QX21hcnNoYWwo
TmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdDsgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE1lbUJ1
ZmZlcmVkU3RyZWFtJikgY29uc3Q7IH07CiAgICBjbGFzcyBJbnZhbGlkVmFsdWUgOiBwdWJsaWMg
VXNlckV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIEludmFsaWRWYWx1ZSgpIHsgcGRfaW5zZXJ0
VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0Fu
eUZuTkNQOyB9IGlubGluZSBJbnZhbGlkVmFsdWUoY29uc3QgSW52YWxpZFZhbHVlJiBfZXgpIDog
VXNlckV4Y2VwdGlvbihfZXgpIHt9IGlubGluZSBJbnZhbGlkVmFsdWUmIG9wZXJhdG9yPShjb25z
dCBJbnZhbGlkVmFsdWUmIF9leCkgeyAqIChVc2VyRXhjZXB0aW9uKikgdGhpcyA9IF9leDsgcmV0
dXJuICp0aGlzOyB9IHZpcnR1YWwgfkludmFsaWRWYWx1ZSgpOyB2aXJ0dWFsIHZvaWQgX3JhaXNl
KCk7IHN0YXRpYyBJbnZhbGlkVmFsdWUqIF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNv
bnN0IEludmFsaWRWYWx1ZSogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiopOyBzdGF0aWMgaW5s
aW5lIEludmFsaWRWYWx1ZSogX25hcnJvdyhFeGNlcHRpb24qIF9leCkgeyByZXR1cm4gX2Rvd25j
YXN0KF9leCk7IH0gaW5saW5lIHNpemVfdCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90IG9zKSBjb25z
dCB7IHJldHVybiBvczsgfSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShOZXRCdWZmZXJlZFN0cmVh
bSYpIGNvbnN0IHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPj49KE1lbUJ1ZmZlcmVkU3RyZWFtJikg
Y29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oTmV0QnVmZmVyZWRTdHJlYW0mKSB7fSBp
bmxpbmUgdm9pZCBvcGVyYXRvcjw8PShNZW1CdWZmZXJlZFN0cmVhbSYpIHt9IHN0YXRpYyBpbnNl
cnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMgaW5zZXJ0RXhjZXB0aW9uVG9B
bnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgc3RhdGljIGNvbnN0IGNoYXIqIF9QRF9yZXBvSWQ7IHBy
aXZhdGU6IHZpcnR1YWwgRXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7IHZpcnR1YWwg
Y29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9y
ZXBvSWQoaW50KiBzaXplKSBjb25zdDsgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE5ldEJ1ZmZl
cmVkU3RyZWFtJikgY29uc3Q7IHZpcnR1YWwgdm9pZCBfTlBfbWFyc2hhbChNZW1CdWZmZXJlZFN0
cmVhbSYpIGNvbnN0OyB9OwogICAgY2xhc3MgVHlwZU1pc21hdGNoIDogcHVibGljIFVzZXJFeGNl
cHRpb24geyBwdWJsaWM6IGlubGluZSBUeXBlTWlzbWF0Y2goKSB7IHBkX2luc2VydFRvQW55Rm4g
PSBpbnNlcnRUb0FueUZuOyBwZF9pbnNlcnRUb0FueUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsg
fSBpbmxpbmUgVHlwZU1pc21hdGNoKGNvbnN0IFR5cGVNaXNtYXRjaCYgX2V4KSA6IFVzZXJFeGNl
cHRpb24oX2V4KSB7fSBpbmxpbmUgVHlwZU1pc21hdGNoJiBvcGVyYXRvcj0oY29uc3QgVHlwZU1p
c21hdGNoJiBfZXgpIHsgKiAoVXNlckV4Y2VwdGlvbiopIHRoaXMgPSBfZXg7IHJldHVybiAqdGhp
czsgfSB2aXJ0dWFsIH5UeXBlTWlzbWF0Y2goKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0
aWMgVHlwZU1pc21hdGNoKiBfZG93bmNhc3QoRXhjZXB0aW9uKik7IHN0YXRpYyBjb25zdCBUeXBl
TWlzbWF0Y2gqIF9kb3duY2FzdChjb25zdCBFeGNlcHRpb24qKTsgc3RhdGljIGlubGluZSBUeXBl
TWlzbWF0Y2gqIF9uYXJyb3coRXhjZXB0aW9uKiBfZXgpIHsgcmV0dXJuIF9kb3duY2FzdChfZXgp
OyB9IGlubGluZSBzaXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBvcykgY29uc3QgeyByZXR1
cm4gb3M7IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25z
dCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0IHt9
IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE5ldEJ1ZmZlcmVkU3RyZWFtJikge30gaW5saW5lIHZv
aWQgb3BlcmF0b3I8PD0oTWVtQnVmZmVyZWRTdHJlYW0mKSB7fSBzdGF0aWMgaW5zZXJ0RXhjZXB0
aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55TkNQIGlu
c2VydFRvQW55Rm5OQ1A7IHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOyBwcml2YXRlOiB2
aXJ0dWFsIEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNo
YXIqIF9OUF90eXBlSWQoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGlu
dCogc2l6ZSkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfTlBfbWFyc2hhbChOZXRCdWZmZXJlZFN0cmVh
bSYpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX05QX21hcnNoYWwoTWVtQnVmZmVyZWRTdHJlYW0mKSBj
b25zdDsgfTsKICAgIGNsYXNzIEludmFsaWRTZXEgOiBwdWJsaWMgVXNlckV4Y2VwdGlvbiB7IHB1
YmxpYzogaW5saW5lIEludmFsaWRTZXEoKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0Fu
eUZuOyBwZF9pbnNlcnRUb0FueUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgSW52
YWxpZFNlcShjb25zdCBJbnZhbGlkU2VxJiBfZXgpIDogVXNlckV4Y2VwdGlvbihfZXgpIHt9IGlu
bGluZSBJbnZhbGlkU2VxJiBvcGVyYXRvcj0oY29uc3QgSW52YWxpZFNlcSYgX2V4KSB7ICogKFVz
ZXJFeGNlcHRpb24qKSB0aGlzID0gX2V4OyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+SW52YWxp
ZFNlcSgpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0YXRpYyBJbnZhbGlkU2VxKiBfZG93bmNh
c3QoRXhjZXB0aW9uKik7IHN0YXRpYyBjb25zdCBJbnZhbGlkU2VxKiBfZG93bmNhc3QoY29uc3Qg
RXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgSW52YWxpZFNlcSogX25hcnJvdyhFeGNlcHRpb24q
IF9leCkgeyByZXR1cm4gX2Rvd25jYXN0KF9leCk7IH0gaW5saW5lIHNpemVfdCBfTlBfYWxpZ25l
ZFNpemUoc2l6ZV90IG9zKSBjb25zdCB7IHJldHVybiBvczsgfSBpbmxpbmUgdm9pZCBvcGVyYXRv
cj4+PShOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0IHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPj49
KE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oTmV0
QnVmZmVyZWRTdHJlYW0mKSB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShNZW1CdWZmZXJlZFN0
cmVhbSYpIHt9IHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0
aWMgaW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgc3RhdGljIGNvbnN0
IGNoYXIqIF9QRF9yZXBvSWQ7IHByaXZhdGU6IHZpcnR1YWwgRXhjZXB0aW9uKiBfTlBfZHVwbGlj
YXRlKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OyB2aXJ0
dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgdmlydHVhbCB2b2lk
IF9OUF9tYXJzaGFsKE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IHZpcnR1YWwgdm9pZCBfTlBf
bWFyc2hhbChNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0OyB9OwoKICAgIHR5cGVkZWYgX0NPUkJB
X1VuYm91bmRlZF9TZXF1ZW5jZV9fT2N0ZXQgT2N0ZXRTZXE7CgogICAgdmlydHVhbCB+RHluQW55
KCk7CgogICAgdmlydHVhbCBUeXBlQ29kZV9wdHIgdHlwZSgpIGNvbnN0ID0gMDsKICAgIHZpcnR1
YWwgdm9pZCBhc3NpZ24oRHluQW55X3B0ciBkeW5fYW55KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQg
ZnJvbV9hbnkoY29uc3QgQW55JiB2YWx1ZSkgPSAwOwogICAgdmlydHVhbCBBbnkqIHRvX2FueSgp
ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCkgPSAwOwogICAgdmlydHVhbCBEeW5Bbnlf
cHRyIGNvcHkoKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0X2Jvb2xlYW4oQm9vbGVhbiB2
YWx1ZSkgPSAwOwogICAgdmlydHVhbCB2b2lkIGluc2VydF9vY3RldChPY3RldCB2YWx1ZSkgPSAw
OwogICAgdmlydHVhbCB2b2lkIGluc2VydF9jaGFyKENoYXIgdmFsdWUpID0gMDsKICAgIHZpcnR1
YWwgdm9pZCBpbnNlcnRfc2hvcnQoU2hvcnQgdmFsdWUpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBp
bnNlcnRfdXNob3J0KFVTaG9ydCB2YWx1ZSkgPSAwOwogICAgdmlydHVhbCB2b2lkIGluc2VydF9s
b25nKExvbmcgdmFsdWUpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRfdWxvbmcoVUxvbmcg
dmFsdWUpID0gMDsKCiAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0X2Zsb2F0KEZsb2F0IHZhbHVlKSA9
IDA7CiAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0X2RvdWJsZShEb3VibGUgdmFsdWUpID0gMDsKCiAg
ICB2aXJ0dWFsIHZvaWQgaW5zZXJ0X3N0cmluZyhjb25zdCBjaGFyKiB2YWx1ZSkgPSAwOwogICAg
dmlydHVhbCB2b2lkIGluc2VydF9yZWZlcmVuY2UoT2JqZWN0X3B0ciB2YWx1ZSkgPSAwOwogICAg
dmlydHVhbCB2b2lkIGluc2VydF90eXBlY29kZShUeXBlQ29kZV9wdHIgdmFsdWUpID0gMDsKICAg
IHZpcnR1YWwgdm9pZCBpbnNlcnRfYW55KGNvbnN0IEFueSYgdmFsdWUpID0gMDsKICAgIHZpcnR1
YWwgQm9vbGVhbiBnZXRfYm9vbGVhbigpID0gMDsKICAgIHZpcnR1YWwgT2N0ZXQgZ2V0X29jdGV0
KCkgPSAwOwogICAgdmlydHVhbCBDaGFyIGdldF9jaGFyKCkgPSAwOwogICAgdmlydHVhbCBTaG9y
dCBnZXRfc2hvcnQoKSA9IDA7CiAgICB2aXJ0dWFsIFVTaG9ydCBnZXRfdXNob3J0KCkgPSAwOwog
ICAgdmlydHVhbCBMb25nIGdldF9sb25nKCkgPSAwOwogICAgdmlydHVhbCBVTG9uZyBnZXRfdWxv
bmcoKSA9IDA7CgogICAgdmlydHVhbCBGbG9hdCBnZXRfZmxvYXQoKSA9IDA7CiAgICB2aXJ0dWFs
IERvdWJsZSBnZXRfZG91YmxlKCkgPSAwOwoKICAgIHZpcnR1YWwgY2hhciogZ2V0X3N0cmluZygp
ID0gMDsKICAgIHZpcnR1YWwgT2JqZWN0X3B0ciBnZXRfcmVmZXJlbmNlKCkgPSAwOwogICAgdmly
dHVhbCBUeXBlQ29kZV9wdHIgZ2V0X3R5cGVjb2RlKCkgPSAwOwogICAgdmlydHVhbCBBbnkqIGdl
dF9hbnkoKSA9IDA7CiAgICB2aXJ0dWFsIER5bkFueV9wdHIgY3VycmVudF9jb21wb25lbnQoKSA9
IDA7CiAgICB2aXJ0dWFsIEJvb2xlYW4gbmV4dCgpID0gMDsKICAgIHZpcnR1YWwgQm9vbGVhbiBz
ZWVrKExvbmcgaW5kZXgpID0gMDsKICAgIHZpcnR1YWwgdm9pZCByZXdpbmQoKSA9IDA7CgogICAg
c3RhdGljIER5bkFueV9wdHIgX2R1cGxpY2F0ZShEeW5BbnlfcHRyKTsKICAgIHN0YXRpYyBEeW5B
bnlfcHRyIF9uYXJyb3coRHluQW55X3B0cik7CiAgICBzdGF0aWMgRHluQW55X3B0ciBfbmlsKCk7
CgogICAgdmlydHVhbCBCb29sZWFuIE5QX2lzX25pbCgpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwg
aW50IE5QX25vZGV0eXBlKCkgY29uc3QgPSAwOwogICAgdmlydHVhbCB2b2lkKiBOUF9uYXJyb3co
KSA9IDA7CgogICAgc3RhdGljIGlubGluZSBfQ09SQkFfQm9vbGVhbiBQUl9pc192YWxpZChEeW5B
bnlfcHRyIHAgKSB7CiAgICAgIHJldHVybiAoKHApID8gKHAtPnBkX21hZ2ljID09IFBSX21hZ2lj
KSA6IDEpOwogICAgfQoKICAgIHN0YXRpYyBjb25zdCBfQ09SQkFfVUxvbmcgUFJfbWFnaWM7CiAg
cHJvdGVjdGVkOgogICAgRHluQW55KCk7CgogIHByaXZhdGU6CiAgICBfQ09SQkFfVUxvbmcgcGRf
bWFnaWM7CgogICAgRHluQW55KGNvbnN0IER5bkFueSYpOwogICAgRHluQW55JiBvcGVyYXRvcj0o
Y29uc3QgRHluQW55Jik7CiAgfTsKIyAxODg2ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIz
L0NPUkJBLmgiCiAgY2xhc3MgRHluRW51bSA6IHB1YmxpYyB2aXJ0dWFsIER5bkFueSB7CiAgcHVi
bGljOgoKICAgIHZpcnR1YWwgY2hhciogdmFsdWVfYXNfc3RyaW5nKCkgPSAwOwogICAgdmlydHVh
bCB2b2lkIHZhbHVlX2FzX3N0cmluZyhjb25zdCBjaGFyKiB2YWx1ZSkgPSAwOwogICAgdmlydHVh
bCBVTG9uZyB2YWx1ZV9hc191bG9uZygpID0gMDsKICAgIHZpcnR1YWwgdm9pZCB2YWx1ZV9hc191
bG9uZyhVTG9uZyB2YWx1ZSkgPSAwOwoKICAgIHN0YXRpYyBEeW5FbnVtX3B0ciBfZHVwbGljYXRl
KER5bkVudW1fcHRyKTsKICAgIHN0YXRpYyBEeW5FbnVtX3B0ciBfbmFycm93KER5bkFueV9wdHIp
OwogICAgc3RhdGljIER5bkVudW1fcHRyIF9uaWwoKTsKCiAgICB2aXJ0dWFsIH5EeW5FbnVtKCk7
CgogIHByb3RlY3RlZDoKICAgIER5bkVudW0oKSB7fQoKICBwcml2YXRlOgogICAgRHluRW51bShj
b25zdCBEeW5FbnVtJik7CiAgICBEeW5FbnVtJiBvcGVyYXRvcj0oY29uc3QgRHluRW51bSYpOwog
IH07CgoKCgoKICB0eXBlZGVmIGNoYXIqIEZpZWxkTmFtZTsKICB0eXBlZGVmIFN0cmluZ192YXIg
RmllbGROYW1lX3ZhcjsKCiAgc3RydWN0IE5hbWVWYWx1ZVBhaXIgewogICAgU3RyaW5nX21lbWJl
ciBpZDsKICAgIEFueSB2YWx1ZTsKICB9OwoKICB0eXBlZGVmIF9DT1JCQV9Db25zdHJUeXBlX1Zh
cmlhYmxlX1ZhcjxOYW1lVmFsdWVQYWlyPiBOYW1lVmFsdWVQYWlyX3ZhcjsKICB0eXBlZGVmIF9D
T1JCQV9Qc2V1ZG9WYWx1ZV9TZXF1ZW5jZTxOYW1lVmFsdWVQYWlyPiBOYW1lVmFsdWVQYWlyU2Vx
OwoKICBjbGFzcyBEeW5TdHJ1Y3QgOiBwdWJsaWMgdmlydHVhbCBEeW5BbnkgewogIHB1YmxpYzoK
CiAgICB2aXJ0dWFsIGNoYXIqIGN1cnJlbnRfbWVtYmVyX25hbWUoKSA9IDA7CiAgICB2aXJ0dWFs
IFRDS2luZCBjdXJyZW50X21lbWJlcl9raW5kKCkgPSAwOwogICAgdmlydHVhbCBOYW1lVmFsdWVQ
YWlyU2VxKiBnZXRfbWVtYmVycygpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBzZXRfbWVtYmVycyhj
b25zdCBOYW1lVmFsdWVQYWlyU2VxJiBOVlNlcVZhbCkgPSAwOwoKICAgIHN0YXRpYyBEeW5TdHJ1
Y3RfcHRyIF9kdXBsaWNhdGUoRHluU3RydWN0X3B0cik7CiAgICBzdGF0aWMgRHluU3RydWN0X3B0
ciBfbmFycm93KER5bkFueV9wdHIpOwogICAgc3RhdGljIER5blN0cnVjdF9wdHIgX25pbCgpOwoK
ICAgIHZpcnR1YWwgfkR5blN0cnVjdCgpOwoKICBwcm90ZWN0ZWQ6CiAgICBEeW5TdHJ1Y3QoKSB7
fQoKICBwcml2YXRlOgogICAgRHluU3RydWN0KGNvbnN0IER5blN0cnVjdCYpOwogICAgRHluU3Ry
dWN0JiBvcGVyYXRvcj0oY29uc3QgRHluU3RydWN0Jik7CiAgfTsKCgoKCgogIGNsYXNzIER5blVu
aW9uIDogcHVibGljIHZpcnR1YWwgRHluQW55IHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIEJvb2xl
YW4gc2V0X2FzX2RlZmF1bHQoKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgc2V0X2FzX2RlZmF1bHQo
Qm9vbGVhbiB2YWx1ZSkgPSAwOwogICAgdmlydHVhbCBEeW5BbnlfcHRyIGRpc2NyaW1pbmF0b3Io
KSA9IDA7CiAgICB2aXJ0dWFsIFRDS2luZCBkaXNjcmltaW5hdG9yX2tpbmQoKSA9IDA7CiAgICB2
aXJ0dWFsIER5bkFueV9wdHIgbWVtYmVyKCkgPSAwOwogICAgdmlydHVhbCBjaGFyKiBtZW1iZXJf
bmFtZSgpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBtZW1iZXJfbmFtZShjb25zdCBjaGFyKiB2YWx1
ZSkgPSAwOwogICAgdmlydHVhbCBUQ0tpbmQgbWVtYmVyX2tpbmQoKSA9IDA7CgogICAgc3RhdGlj
IER5blVuaW9uX3B0ciBfZHVwbGljYXRlKER5blVuaW9uX3B0cik7CiAgICBzdGF0aWMgRHluVW5p
b25fcHRyIF9uYXJyb3coRHluQW55X3B0cik7CiAgICBzdGF0aWMgRHluVW5pb25fcHRyIF9uaWwo
KTsKCiAgICB2aXJ0dWFsIH5EeW5VbmlvbigpOwoKICBwcm90ZWN0ZWQ6CiAgICBEeW5Vbmlvbigp
IHt9CgogIHByaXZhdGU6CiAgICBEeW5Vbmlvbihjb25zdCBEeW5VbmlvbiYpOwogICAgRHluVW5p
b24mIG9wZXJhdG9yPShjb25zdCBEeW5VbmlvbiYpOwogIH07CgoKCgoKICB0eXBlZGVmIF9DT1JC
QV9Qc2V1ZG9WYWx1ZV9TZXF1ZW5jZTxBbnk+IEFueVNlcTsKCiAgY2xhc3MgRHluU2VxdWVuY2Ug
OiBwdWJsaWMgdmlydHVhbCBEeW5BbnkgewogIHB1YmxpYzoKCiAgICB2aXJ0dWFsIFVMb25nIGxl
bmd0aCgpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBsZW5ndGggKFVMb25nIHZhbHVlKSA9IDA7CiAg
ICB2aXJ0dWFsIEFueVNlcSogZ2V0X2VsZW1lbnRzKCkgPSAwOwogICAgdmlydHVhbCB2b2lkIHNl
dF9lbGVtZW50cyhjb25zdCBBbnlTZXEmIHZhbHVlKSA9IDA7CgogICAgc3RhdGljIER5blNlcXVl
bmNlX3B0ciBfZHVwbGljYXRlKER5blNlcXVlbmNlX3B0cik7CiAgICBzdGF0aWMgRHluU2VxdWVu
Y2VfcHRyIF9uYXJyb3coRHluQW55X3B0cik7CiAgICBzdGF0aWMgRHluU2VxdWVuY2VfcHRyIF9u
aWwoKTsKCiAgICB2aXJ0dWFsIH5EeW5TZXF1ZW5jZSgpOwoKICBwcm90ZWN0ZWQ6CiAgICBEeW5T
ZXF1ZW5jZSgpIHt9CgogIHByaXZhdGU6CiAgICBEeW5TZXF1ZW5jZShjb25zdCBEeW5TZXF1ZW5j
ZSYpOwogICAgRHluU2VxdWVuY2UmIG9wZXJhdG9yPShjb25zdCBEeW5TZXF1ZW5jZSYpOwogIH07
CgoKCgoKICBjbGFzcyBEeW5BcnJheSA6IHB1YmxpYyB2aXJ0dWFsIER5bkFueSB7CiAgcHVibGlj
OgoKICAgIHZpcnR1YWwgQW55U2VxKiBnZXRfZWxlbWVudHMoKSA9IDA7CiAgICB2aXJ0dWFsIHZv
aWQgc2V0X2VsZW1lbnRzKGNvbnN0IEFueVNlcSYgdmFsdWUpID0gMDsKCiAgICBzdGF0aWMgRHlu
QXJyYXlfcHRyIF9kdXBsaWNhdGUoRHluQXJyYXlfcHRyKTsKICAgIHN0YXRpYyBEeW5BcnJheV9w
dHIgX25hcnJvdyhEeW5BbnlfcHRyKTsKICAgIHN0YXRpYyBEeW5BcnJheV9wdHIgX25pbCgpOwoK
ICAgIHZpcnR1YWwgfkR5bkFycmF5KCk7CgogIHByb3RlY3RlZDoKICAgIER5bkFycmF5KCkge30K
CiAgcHJpdmF0ZToKICAgIER5bkFycmF5KGNvbnN0IER5bkFycmF5Jik7CiAgICBEeW5BcnJheSYg
b3BlcmF0b3I9KGNvbnN0IER5bkFycmF5Jik7CiAgfTsKCgoKCgoKICBjbGFzcyBSZXF1ZXN0IHsK
ICBwdWJsaWM6CiAgICB2aXJ0dWFsIH5SZXF1ZXN0KCk7CgogICAgdmlydHVhbCBPYmplY3RfcHRy
IHRhcmdldCgpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgY29uc3QgY2hhciogb3BlcmF0aW9uKCkg
Y29uc3QgPSAwOwogICAgdmlydHVhbCBOVkxpc3RfcHRyIGFyZ3VtZW50cygpID0gMDsKICAgIHZp
cnR1YWwgTmFtZWRWYWx1ZV9wdHIgcmVzdWx0KCkgPSAwOwogICAgdmlydHVhbCBFbnZpcm9ubWVu
dF9wdHIgZW52KCkgPSAwOwogICAgdmlydHVhbCBFeGNlcHRpb25MaXN0X3B0ciBleGNlcHRpb25z
KCkgPSAwOwogICAgdmlydHVhbCBDb250ZXh0TGlzdF9wdHIgY29udGV4dHMoKSA9IDA7CiAgICB2
aXJ0dWFsIENvbnRleHRfcHRyIGN0eCgpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBjdHgo
Q29udGV4dF9wdHIpID0gMDsKCiAgICB2aXJ0dWFsIEFueSYgYWRkX2luX2FyZygpID0gMDsKICAg
IHZpcnR1YWwgQW55JiBhZGRfaW5fYXJnKGNvbnN0IGNoYXIqIG5hbWUpID0gMDsKICAgIHZpcnR1
YWwgQW55JiBhZGRfaW5vdXRfYXJnKCkgPSAwOwogICAgdmlydHVhbCBBbnkmIGFkZF9pbm91dF9h
cmcoY29uc3QgY2hhciogbmFtZSkgPSAwOwogICAgdmlydHVhbCBBbnkmIGFkZF9vdXRfYXJnKCkg
PSAwOwogICAgdmlydHVhbCBBbnkmIGFkZF9vdXRfYXJnKGNvbnN0IGNoYXIqIG5hbWUpID0gMDsK
CiAgICB2aXJ0dWFsIHZvaWQgc2V0X3JldHVybl90eXBlKFR5cGVDb2RlX3B0ciB0YykgPSAwOwog
ICAgdmlydHVhbCBBbnkmIHJldHVybl92YWx1ZSgpID0gMDsKCiAgICB2aXJ0dWFsIFN0YXR1cyBp
bnZva2UoKSA9IDA7CiAgICB2aXJ0dWFsIFN0YXR1cyBzZW5kX29uZXdheSgpID0gMDsKICAgIHZp
cnR1YWwgU3RhdHVzIHNlbmRfZGVmZXJyZWQoKSA9IDA7CiAgICB2aXJ0dWFsIFN0YXR1cyBnZXRf
cmVzcG9uc2UoKSA9IDA7CiAgICB2aXJ0dWFsIEJvb2xlYW4gcG9sbF9yZXNwb25zZSgpID0gMDsK
CiAgICB2aXJ0dWFsIEJvb2xlYW4gTlBfaXNfbmlsKCkgY29uc3QgPSAwOwogICAgdmlydHVhbCBS
ZXF1ZXN0X3B0ciBOUF9kdXBsaWNhdGUoKSA9IDA7CgogICAgc3RhdGljIFJlcXVlc3RfcHRyIF9k
dXBsaWNhdGUoUmVxdWVzdF9wdHIpOwogICAgc3RhdGljIFJlcXVlc3RfcHRyIF9uaWwoKTsKCiAg
ICBzdGF0aWMgaW5saW5lIF9DT1JCQV9Cb29sZWFuIFBSX2lzX3ZhbGlkKFJlcXVlc3RfcHRyIHAg
KSB7CiAgICAgIHJldHVybiAoKHApID8gKHAtPnBkX21hZ2ljID09IFBSX21hZ2ljKSA6IDEpOwog
ICAgfQoKICAgIHN0YXRpYyBjb25zdCBfQ09SQkFfVUxvbmcgUFJfbWFnaWM7CgogIHByb3RlY3Rl
ZDoKICAgIFJlcXVlc3QoKSB7IHBkX21hZ2ljID0gUFJfbWFnaWM7IH0KCiAgcHJpdmF0ZToKICAg
IF9DT1JCQV9VTG9uZyBwZF9tYWdpYzsKCiAgICBSZXF1ZXN0KGNvbnN0IFJlcXVlc3QmKTsKICAg
IFJlcXVlc3QmIG9wZXJhdG9yPShjb25zdCBSZXF1ZXN0Jik7CiAgfTsKCgoKCgoKICBjbGFzcyBT
ZXJ2ZXJSZXF1ZXN0IHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG9wZXJhdGlv
bigpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBhcmd1bWVudHMoTlZMaXN0X3B0ciYgcGFyYW1ldGVy
cykgPSAwOwogICAgdmlydHVhbCBDb250ZXh0X3B0ciBjdHgoKSA9IDA7CiAgICB2aXJ0dWFsIHZv
aWQgc2V0X3Jlc3VsdChjb25zdCBBbnkmIHZhbHVlKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgc2V0
X2V4Y2VwdGlvbihjb25zdCBBbnkmIHZhbHVlKSA9IDA7CgogIHByb3RlY3RlZDoKICAgIGlubGlu
ZSBTZXJ2ZXJSZXF1ZXN0KCkge30KICAgIHZpcnR1YWwgflNlcnZlclJlcXVlc3QoKTsKCiAgcHJp
dmF0ZToKICAgIFNlcnZlclJlcXVlc3QoY29uc3QgU2VydmVyUmVxdWVzdCYpOwogICAgU2VydmVy
UmVxdWVzdCYgb3BlcmF0b3I9KGNvbnN0IFNlcnZlclJlcXVlc3QmKTsKICB9OwoKCgoKCgogIHR5
cGVkZWYgVUxvbmcgUG9saWN5VHlwZTsKCiAgY2xhc3MgUG9saWN5OwogIHR5cGVkZWYgUG9saWN5
KiBQb2xpY3lfcHRyOwogIHR5cGVkZWYgUG9saWN5X3B0ciBQb2xpY3lSZWY7CgogIGNsYXNzIFBv
bGljeSA6IHB1YmxpYyB2aXJ0dWFsIE9iamVjdCB7CiAgcHVibGljOgogICAgdmlydHVhbCB+UG9s
aWN5KCk7CgogICAgdmlydHVhbCBQb2xpY3lUeXBlIHBvbGljeV90eXBlKCk7CiAgICB2aXJ0dWFs
IFBvbGljeV9wdHIgY29weSgpOwoKICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CgoKICAgIHN0
YXRpYyBQb2xpY3lfcHRyIF9kdXBsaWNhdGUoUG9saWN5X3B0cik7CiAgICBzdGF0aWMgUG9saWN5
X3B0ciBfbmFycm93KE9iamVjdF9wdHIpOwogICAgc3RhdGljIFBvbGljeV9wdHIgX25pbCgpOwoK
CgogICAgUG9saWN5KFBvbGljeVR5cGUgdHlwZSk7CiAgICBQb2xpY3koKTsKCiAgICB2aXJ0dWFs
IHZvaWQqIF9wdHJUb09ialJlZihjb25zdCBjaGFyKiByZXBvSWQpOwogICAgdmlydHVhbCB2b2lk
IF9OUF9pbmNyUmVmQ291bnQoKTsKICAgIHZpcnR1YWwgdm9pZCBfTlBfZGVjclJlZkNvdW50KCk7
CgoKICAgIHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOwoKICBwcml2YXRlOgogICAgUG9s
aWN5KGNvbnN0IFBvbGljeSYpOwogICAgUG9saWN5JiBvcGVyYXRvciA9IChjb25zdCBQb2xpY3km
KTsKCiAgICBpbnQgcGRfcmVmQ291bnQ7CiAgICBQb2xpY3lUeXBlIHBkX3R5cGU7CiAgfTsKCiAg
dHlwZWRlZiBfQ09SQkFfUHNldWRvT2JqX1ZhcjxQb2xpY3k+IFBvbGljeV92YXI7CiAgdHlwZWRl
ZiBfQ09SQkFfUHNldWRvT2JqX01lbWJlcjxQb2xpY3ksIFBvbGljeV92YXI+IFBvbGljeV9tZW1i
ZXI7CgogIHR5cGVkZWYgX0NPUkJBX1BzZXVkb19VbmJvdW5kZWRfU2VxdWVuY2U8UG9saWN5LCBQ
b2xpY3lfbWVtYmVyPiBQb2xpY3lMaXN0OwogIHR5cGVkZWYgUG9saWN5TGlzdCogUG9saWN5TGlz
dF92YXI7CgoKCgoKCiAgY2xhc3MgRG9tYWluTWFuYWdlcjsKICB0eXBlZGVmIGNsYXNzIERvbWFp
bk1hbmFnZXIqIERvbWFpbk1hbmFnZXJfcHRyOwogIHR5cGVkZWYgRG9tYWluTWFuYWdlcl9wdHIg
RG9tYWluTWFuYWdlclJlZjsKCiAgY2xhc3MgRG9tYWluTWFuYWdlciB7CiAgcHVibGljOgogICAg
UG9saWN5X3B0ciBnZXRfZG9tYWluX3BvbGljeShQb2xpY3lUeXBlIHBvbGljeV90eXBlKTsKCiAg
ICBzdGF0aWMgRG9tYWluTWFuYWdlcl9wdHIgX2R1cGxpY2F0ZShEb21haW5NYW5hZ2VyX3B0ciBw
KTsKICAgIHN0YXRpYyBEb21haW5NYW5hZ2VyX3B0ciBfbmlsKCk7CgogIHByaXZhdGU6CiAgICBE
b21haW5NYW5hZ2VyKCk7CiAgfTsKCiAgICAgICAgICAgICAgICAgICBCb29sZWFuIGlzX25pbChE
b21haW5NYW5hZ2VyX3B0ciBwKTsKICAgICAgICAgICAgICAgICAgIHZvaWQgcmVsZWFzZShEb21h
aW5NYW5hZ2VyX3B0cik7CgogIHR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9WYXI8RG9tYWluTWFu
YWdlcj4gRG9tYWluTWFuYWdlcl92YXI7CiAgdHlwZWRlZiBfQ09SQkFfUHNldWRvT2JqX01lbWJl
cjxEb21haW5NYW5hZ2VyLERvbWFpbk1hbmFnZXJfdmFyPgogICAgRG9tYWluTWFuYWdlcl9tZW1i
ZXI7CiAgdHlwZWRlZiBfQ09SQkFfUHNldWRvX1VuYm91bmRlZF9TZXF1ZW5jZTxEb21haW5NYW5h
Z2VyLERvbWFpbk1hbmFnZXJfbWVtYmVyPgogICAgRG9tYWluTWFuYWdlckxpc3Q7CgoKCgoKCiAg
Y2xhc3MgQk9BOwogIGNsYXNzIEJPQV92YXI7CiAgdHlwZWRlZiBCT0EqIEJPQV9wdHI7CiAgdHlw
ZWRlZiBCT0FfcHRyIEJPQVJlZjsKCgogIGNsYXNzIFJlZmVyZW5jZURhdGEgOiBwdWJsaWMgX0NP
UkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fT2N0ZXQgewogIHB1YmxpYzoKICAgIGlubGluZSBSZWZl
cmVuY2VEYXRhKCkge30KICAgIGlubGluZSBSZWZlcmVuY2VEYXRhKGNvbnN0IFJlZmVyZW5jZURh
dGEmIHNlcSkKICAgICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19PY3RldChzZXEpIHt9
CiAgICBpbmxpbmUgUmVmZXJlbmNlRGF0YShDT1JCQTo6VUxvbmcgbWF4KQogICAgICA6IF9DT1JC
QV9VbmJvdW5kZWRfU2VxdWVuY2VfX09jdGV0KG1heCkge30KICAgIGlubGluZSBSZWZlcmVuY2VE
YXRhKENPUkJBOjpVTG9uZyBtYXgsIENPUkJBOjpVTG9uZyBsZW4sIENPUkJBOjpPY3RldCogdmFs
LCBDT1JCQTo6Qm9vbGVhbiByZWw9MCkKICAgICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNl
X19PY3RldChtYXgsIGxlbiwgdmFsLCByZWwpIHt9CiAgICBpbmxpbmUgUmVmZXJlbmNlRGF0YSYg
b3BlcmF0b3IgPSAoY29uc3QgUmVmZXJlbmNlRGF0YSYgc2VxKSB7CiAgICAgIF9DT1JCQV9VbmJv
dW5kZWRfU2VxdWVuY2VfX09jdGV0OjpvcGVyYXRvcj0oc2VxKTsKICAgICAgcmV0dXJuICp0aGlz
OwogICAgfTsKICB9OwoKCiAgY2xhc3MgQk9BIDogcHVibGljIE9iamVjdCB7CiAgcHVibGljOgog
ICAgdmlydHVhbCB2b2lkIGltcGxfaXNfcmVhZHkoSW1wbGVtZW50YXRpb25EZWZfcHRyIHA9MCwg
Qm9vbGVhbiBOb0Jsaz0wKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgaW1wbF9zaHV0ZG93bigpID0g
MDsKICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCkgPSAwOwoKICAgIHZpcnR1YWwgdm9pZCBvYmpf
aXNfcmVhZHkob21uaU9yYkJvYVNlcnZhbnQqLCBJbXBsZW1lbnRhdGlvbkRlZl9wdHIgcD0wKT0w
OwogICAgdmlydHVhbCB2b2lkIG9ial9pc19yZWFkeShPYmplY3RfcHRyLCBJbXBsZW1lbnRhdGlv
bkRlZl9wdHIgcD0wKT0wOwogICAgdmlydHVhbCB2b2lkIGRpc3Bvc2UoT2JqZWN0X3B0cikgPSAw
OwoKICAgIHZpcnR1YWwgT2JqZWN0X3B0ciBjcmVhdGUoY29uc3QgUmVmZXJlbmNlRGF0YSYsIF9v
YmpyZWZfSW50ZXJmYWNlRGVmKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wbGVt
ZW50YXRpb25EZWZfcHRyKSA9IDA7CiAgICB2aXJ0dWFsIFJlZmVyZW5jZURhdGEqIGdldF9pZChP
YmplY3RfcHRyKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlX2ltcGxlbWVudGF0aW9uKE9i
amVjdF9wdHIsSW1wbGVtZW50YXRpb25EZWZfcHRyKSA9IDA7CiAgICB2aXJ0dWFsIFByaW5jaXBh
bF9wdHIgZ2V0X3ByaW5jaXBhbChPYmplY3RfcHRyLCBFbnZpcm9ubWVudF9wdHIpID0gMDsKICAg
IHZpcnR1YWwgdm9pZCBkZWFjdGl2YXRlX2ltcGwoSW1wbGVtZW50YXRpb25EZWZfcHRyKSA9IDA7
CiAgICB2aXJ0dWFsIHZvaWQgZGVhY3RpdmF0ZV9vYmooT2JqZWN0X3B0cikgPSAwOwoKICAgIHN0
YXRpYyBCT0FfcHRyIF9kdXBsaWNhdGUoQk9BX3B0cik7CiAgICBzdGF0aWMgQk9BX3B0ciBfbmFy
cm93KE9iamVjdF9wdHIpOwogICAgc3RhdGljIEJPQV9wdHIgX25pbCgpOwogICAgc3RhdGljIEJP
QV9wdHIgZ2V0Qk9BKCk7CgogICAgc3RhdGljIGNvbnN0IGNoYXIqIF9QRF9yZXBvSWQ7CgogIHBy
b3RlY3RlZDoKICAgIGlubGluZSBCT0EoaW50IG5pbCkgeyBfUFJfc2V0b2JqKChvbW5pT2JqUmVm
KikgKG5pbCA/IDA6MSkpOyB9CiAgICB2aXJ0dWFsIH5CT0EoKTsKCiAgcHJpdmF0ZToKICAgIEJP
QShjb25zdCBCT0EmKTsKICAgIEJPQSYgb3BlcmF0b3I9KGNvbnN0IEJPQSYpOwogIH07CgoKCgoK
ICBjbGFzcyBPUkI7CiAgY2xhc3MgT1JCX3ZhcjsKICB0eXBlZGVmIE9SQiogT1JCX3B0cjsKICB0
eXBlZGVmIE9SQl9wdHIgT1JCUmVmOwoKICBjbGFzcyBPUkIgOiBwdWJsaWMgT2JqZWN0IHsKICBw
dWJsaWM6CiAgICB0eXBlZGVmIE9SQl9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBPUkJfdmFy
IF92YXJfdHlwZTsKCiAgICB0eXBlZGVmIGNoYXIqIE9BaWQ7CgogICAgdHlwZWRlZiBjaGFyKiBP
YmplY3RJZDsKICAgIHR5cGVkZWYgU3RyaW5nX3ZhciBPYmplY3RJZF92YXI7CgogICAgdHlwZWRl
ZiBfQ09SQkFfUHNldWRvX1VuYm91bmRlZF9TZXF1ZW5jZTxSZXF1ZXN0LFJlcXVlc3RfbWVtYmVy
PgogICAgICBSZXF1ZXN0U2VxOwoKICAgIGNsYXNzIEludmFsaWROYW1lIDogcHVibGljIFVzZXJF
eGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBJbnZhbGlkTmFtZSgpIHsgcGRfaW5zZXJ0VG9BbnlG
biA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQ
OyB9IGlubGluZSBJbnZhbGlkTmFtZShjb25zdCBJbnZhbGlkTmFtZSYgX2V4KSA6IFVzZXJFeGNl
cHRpb24oX2V4KSB7fSBpbmxpbmUgSW52YWxpZE5hbWUmIG9wZXJhdG9yPShjb25zdCBJbnZhbGlk
TmFtZSYgX2V4KSB7ICogKFVzZXJFeGNlcHRpb24qKSB0aGlzID0gX2V4OyByZXR1cm4gKnRoaXM7
IH0gdmlydHVhbCB+SW52YWxpZE5hbWUoKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMg
SW52YWxpZE5hbWUqIF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IEludmFsaWRO
YW1lKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgSW52YWxpZE5h
bWUqIF9uYXJyb3coRXhjZXB0aW9uKiBfZXgpIHsgcmV0dXJuIF9kb3duY2FzdChfZXgpOyB9IGlu
bGluZSBzaXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBvcykgY29uc3QgeyByZXR1cm4gb3M7
IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdCB7fSBp
bmxpbmUgdm9pZCBvcGVyYXRvcj4+PShNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0IHt9IGlubGlu
ZSB2b2lkIG9wZXJhdG9yPDw9KE5ldEJ1ZmZlcmVkU3RyZWFtJikge30gaW5saW5lIHZvaWQgb3Bl
cmF0b3I8PD0oTWVtQnVmZmVyZWRTdHJlYW0mKSB7fSBzdGF0aWMgaW5zZXJ0RXhjZXB0aW9uVG9B
bnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55TkNQIGluc2VydFRv
QW55Rm5OQ1A7IHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOyBwcml2YXRlOiB2aXJ0dWFs
IEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9O
UF90eXBlSWQoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCogc2l6
ZSkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfTlBfbWFyc2hhbChOZXRCdWZmZXJlZFN0cmVhbSYpIGNv
bnN0OyB2aXJ0dWFsIHZvaWQgX05QX21hcnNoYWwoTWVtQnVmZmVyZWRTdHJlYW0mKSBjb25zdDsg
fTsKICAgIGNsYXNzIEluY29uc2lzdGVudFR5cGVDb2RlIDogcHVibGljIFVzZXJFeGNlcHRpb24g
eyBwdWJsaWM6IGlubGluZSBJbmNvbnNpc3RlbnRUeXBlQ29kZSgpIHsgcGRfaW5zZXJ0VG9BbnlG
biA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQ
OyB9IGlubGluZSBJbmNvbnNpc3RlbnRUeXBlQ29kZShjb25zdCBJbmNvbnNpc3RlbnRUeXBlQ29k
ZSYgX2V4KSA6IFVzZXJFeGNlcHRpb24oX2V4KSB7fSBpbmxpbmUgSW5jb25zaXN0ZW50VHlwZUNv
ZGUmIG9wZXJhdG9yPShjb25zdCBJbmNvbnNpc3RlbnRUeXBlQ29kZSYgX2V4KSB7ICogKFVzZXJF
eGNlcHRpb24qKSB0aGlzID0gX2V4OyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+SW5jb25zaXN0
ZW50VHlwZUNvZGUoKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMgSW5jb25zaXN0ZW50
VHlwZUNvZGUqIF9kb3duY2FzdChFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IEluY29uc2lzdGVu
dFR5cGVDb2RlKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgSW5j
b25zaXN0ZW50VHlwZUNvZGUqIF9uYXJyb3coRXhjZXB0aW9uKiBfZXgpIHsgcmV0dXJuIF9kb3du
Y2FzdChfZXgpOyB9IGlubGluZSBzaXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBvcykgY29u
c3QgeyByZXR1cm4gb3M7IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTmV0QnVmZmVyZWRTdHJl
YW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShNZW1CdWZmZXJlZFN0cmVhbSYp
IGNvbnN0IHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE5ldEJ1ZmZlcmVkU3RyZWFtJikge30g
aW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oTWVtQnVmZmVyZWRTdHJlYW0mKSB7fSBzdGF0aWMgaW5z
ZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIGluc2VydEV4Y2VwdGlvblRv
QW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOyBw
cml2YXRlOiB2aXJ0dWFsIEV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFs
IGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBf
cmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfTlBfbWFyc2hhbChOZXRCdWZm
ZXJlZFN0cmVhbSYpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX05QX21hcnNoYWwoTWVtQnVmZmVyZWRT
dHJlYW0mKSBjb25zdDsgfTsKCgoKCgogICAgY2xhc3MgT2JqZWN0SWRMaXN0X3ZhcjsKCiAgICBj
bGFzcyBPYmplY3RJZExpc3QgOiBwdWJsaWMgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fU3Ry
aW5nIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBPYmplY3RJZExpc3RfdmFyIF92YXJfdHlw
ZTsKICAgICAgaW5saW5lIE9iamVjdElkTGlzdCgpIHt9CiAgICAgIGlubGluZSBPYmplY3RJZExp
c3QoY29uc3QgT2JqZWN0SWRMaXN0JiBzZXEpCiAgICAgICAgOiBfQ09SQkFfVW5ib3VuZGVkX1Nl
cXVlbmNlX19TdHJpbmcoc2VxKSB7fQogICAgICBpbmxpbmUgT2JqZWN0SWRMaXN0KFVMb25nIG1h
eCkKICAgICAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX1N0cmluZyhtYXgpIHt9CiAg
ICAgIGlubGluZSBPYmplY3RJZExpc3QoVUxvbmcgbWF4LCBVTG9uZyBsZW4sIGNoYXIqKiB2YWws
CiAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vbGVhbiByZWw9MCkKICAgICAgICA6IF9DT1JC
QV9VbmJvdW5kZWRfU2VxdWVuY2VfX1N0cmluZyhtYXgsIGxlbiwgdmFsLCByZWwpIHt9CiAgICAg
IGlubGluZSBPYmplY3RJZExpc3QmIG9wZXJhdG9yID0gKGNvbnN0IE9iamVjdElkTGlzdCYgc2Vx
KSB7CiAgICAgICAgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fU3RyaW5nOjpvcGVyYXRvcj0o
c2VxKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KICAgIH07CgogICAgY2xhc3MgT2Jq
ZWN0SWRMaXN0X291dDsKCiAgICBjbGFzcyBPYmplY3RJZExpc3RfdmFyIHsKICAgIHB1YmxpYzoK
ICAgICAgdHlwZWRlZiBPYmplY3RJZExpc3QgVDsKICAgICAgdHlwZWRlZiBPYmplY3RJZExpc3Rf
dmFyIFRfdmFyOwoKICAgICAgaW5saW5lIE9iamVjdElkTGlzdF92YXIoKSA6IHBkX3NlcSgwKSB7
fQogICAgICBpbmxpbmUgT2JqZWN0SWRMaXN0X3ZhcihUKiBzKSA6IHBkX3NlcShzKSB7fQogICAg
ICBpbmxpbmUgT2JqZWN0SWRMaXN0X3Zhcihjb25zdCBUX3ZhciYgc3YpIHsKICAgICAgICBpZigg
c3YucGRfc2VxICkgewogICAgICAgICAgcGRfc2VxID0gbmV3IFQ7CiAgICAgICAgICAqcGRfc2Vx
ID0gKnN2LnBkX3NlcTsKICAgICAgICB9IGVsc2UKICAgICAgICAgIHBkX3NlcSA9IDA7CiAgICAg
IH0KICAgICAgaW5saW5lIH5PYmplY3RJZExpc3RfdmFyKCkgeyBpZiggcGRfc2VxICkgZGVsZXRl
IHBkX3NlcTsgfQoKICAgICAgaW5saW5lIFRfdmFyJiBvcGVyYXRvciA9IChUKiBzKSB7CiAgICAg
ICAgaWYoIHBkX3NlcSApIGRlbGV0ZSBwZF9zZXE7CiAgICAgICAgcGRfc2VxID0gczsKICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgIH0KICAgICAgaW5saW5lIFRfdmFyJiBvcGVyYXRvciA9IChj
b25zdCBUX3ZhciYgc3YpIHsKICAgICAgICBpZiggc3YucGRfc2VxICkgewogICAgICAgICAgaWYo
ICFwZF9zZXEgKSBwZF9zZXEgPSBuZXcgVDsKICAgICAgICAgICpwZF9zZXEgPSAqc3YucGRfc2Vx
OwogICAgICAgIH0gZWxzZSBpZiggcGRfc2VxICkgewogICAgICAgICAgZGVsZXRlIHBkX3NlcTsK
ICAgICAgICAgIHBkX3NlcSA9IDA7CiAgICAgICAgfQogICAgICAgIHJldHVybiAqdGhpczsKICAg
ICAgfQoKICAgICAgaW5saW5lIF9DT1JCQV9TdHJpbmdfZWxlbWVudCBvcGVyYXRvciBbXSAoX0NP
UkJBX1VMb25nIGkpIHsgcmV0dXJuICgqcGRfc2VxKVtpXTsgfQogICAgICBpbmxpbmUgVCogb3Bl
cmF0b3IgLT4gKCkgeyByZXR1cm4gcGRfc2VxOyB9CgoKCiAgICAgIGlubGluZSBvcGVyYXRvciBj
b25zdCBUJiAoKSBjb25zdCB7IHJldHVybiAqcGRfc2VxOyB9CiAgICAgIGlubGluZSBvcGVyYXRv
ciBUJiAoKSB7IHJldHVybiAqcGRfc2VxOyB9CgoKICAgICAgaW5saW5lIGNvbnN0IFQmIGluKCkg
Y29uc3QgeyByZXR1cm4gKnBkX3NlcTsgfQogICAgICBpbmxpbmUgVCYgaW5vdXQoKSB7IHJldHVy
biAqcGRfc2VxOyB9CiAgICAgIGlubGluZSBUKiYgb3V0KCkgeyBpZiAocGRfc2VxKSB7IGRlbGV0
ZSBwZF9zZXE7IHBkX3NlcSA9IDA7IH0gcmV0dXJuIHBkX3NlcTsgfQogICAgICBpbmxpbmUgVCog
X3JldG4oKSB7IFQqIHRtcCA9IHBkX3NlcTsgcGRfc2VxID0gMDsgcmV0dXJuIHRtcDsgfQoKICAg
ICAgZnJpZW5kIGNsYXNzIE9iamVjdElkTGlzdF9vdXQ7CgogICAgcHJpdmF0ZToKICAgICAgVCog
cGRfc2VxOwogICAgfTsKCiAgICBjbGFzcyBPYmplY3RJZExpc3Rfb3V0IHsKICAgIHB1YmxpYzoK
ICAgICAgdHlwZWRlZiBPYmplY3RJZExpc3QgVDsKICAgICAgdHlwZWRlZiBPYmplY3RJZExpc3Rf
dmFyIFRfdmFyOwoKICAgICAgaW5saW5lIE9iamVjdElkTGlzdF9vdXQoVComIHMpIDogX2RhdGEo
cykgeyBfZGF0YSA9IDA7IH0KICAgICAgaW5saW5lIE9iamVjdElkTGlzdF9vdXQoVF92YXImIHN2
KQogICAgICAgIDogX2RhdGEoc3YucGRfc2VxKSB7IHN2ID0gKFQqKSAwOyB9CiAgICAgIGlubGlu
ZSBPYmplY3RJZExpc3Rfb3V0KGNvbnN0IE9iamVjdElkTGlzdF9vdXQmIHMpIDogX2RhdGEocy5f
ZGF0YSkge30KICAgICAgaW5saW5lIE9iamVjdElkTGlzdF9vdXQmIG9wZXJhdG9yPShjb25zdCBP
YmplY3RJZExpc3Rfb3V0JiBzKSB7CiAgICAgICAgX2RhdGEgPSBzLl9kYXRhOyByZXR1cm4gKnRo
aXM7CiAgICAgIH0KICAgICAgaW5saW5lIE9iamVjdElkTGlzdF9vdXQmIG9wZXJhdG9yPShUKiBz
KSB7IF9kYXRhID0gczsgcmV0dXJuICp0aGlzOyB9CiAgICAgIGlubGluZSBvcGVyYXRvciBUKiYo
KSB7IHJldHVybiBfZGF0YTsgfQogICAgICBpbmxpbmUgVComIHB0cigpIHsgcmV0dXJuIF9kYXRh
OyB9CiAgICAgIGlubGluZSBUKiBvcGVyYXRvci0+KCkgeyByZXR1cm4gX2RhdGE7IH0KICAgICAg
aW5saW5lIF9DT1JCQV9TdHJpbmdfZWxlbWVudCBvcGVyYXRvciBbXSAoX0NPUkJBX1VMb25nIGkp
IHsKICAgICAgICByZXR1cm4gKCpfZGF0YSlbaV07CiAgICAgIH0KICAgICAgVComIF9kYXRhOwoK
ICAgIHByaXZhdGU6CiAgICAgIE9iamVjdElkTGlzdF9vdXQoKTsKICAgICAgT2JqZWN0SWRMaXN0
X291dCBvcGVyYXRvcj0oY29uc3QgVF92YXImKTsKICAgIH07CgoKCgoKICAgIHN0YXRpYyBfcHRy
X3R5cGUgX2R1cGxpY2F0ZShfcHRyX3R5cGUpOwogICAgc3RhdGljIF9wdHJfdHlwZSBfbmFycm93
KE9iamVjdF9wdHIpOwogICAgc3RhdGljIF9wdHJfdHlwZSBfbmlsKCk7CgogICAgdmlydHVhbCBj
aGFyKiBvYmplY3RfdG9fc3RyaW5nKE9iamVjdF9wdHIpID0gMDsKICAgIHZpcnR1YWwgT2JqZWN0
X3B0ciBzdHJpbmdfdG9fb2JqZWN0KGNvbnN0IGNoYXIqKSA9IDA7CgogICAgdmlydHVhbCBPYmpl
Y3RJZExpc3QqIGxpc3RfaW5pdGlhbF9zZXJ2aWNlcygpID0gMDsKICAgIHZpcnR1YWwgT2JqZWN0
X3B0ciByZXNvbHZlX2luaXRpYWxfcmVmZXJlbmNlcyhjb25zdCBjaGFyKiBpZGVudGlmaWVyKSA9
IDA7CgogICAgdmlydHVhbCBCb29sZWFuIHdvcmtfcGVuZGluZygpID0gMDsKICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtX3dvcmsoKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgcnVuKCkgPSAwOwogICAg
dmlydHVhbCB2b2lkIHNodXRkb3duKEJvb2xlYW4gd2FpdF9mb3JfY29tcGxldGlvbikgPSAwOwog
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSA9IDA7CgogICAgaW5saW5lIHZvaWQgTlBfZGVzdHJv
eSgpIHsgZGVzdHJveSgpOyB9CgoKICAgIEJPQV9wdHIgQk9BX2luaXQoaW50JiBhcmdjLCBjaGFy
KiogYXJndiwgY29uc3QgY2hhciogYm9hX2lkZW50aWZpZXI9MCk7CgogICAgU3RhdHVzIGNyZWF0
ZV9saXN0KExvbmcsIE5WTGlzdF9vdXQpOwogICAgU3RhdHVzIGNyZWF0ZV9vcGVyYXRpb25fbGlz
dChfb2JqcmVmX09wZXJhdGlvbkRlZiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5WTGlzdF9vdXQpOwogICAgU3RhdHVzIGNyZWF0ZV9uYW1lZF92YWx1ZShOYW1lZFZhbHVlX291
dCk7CiAgICBTdGF0dXMgY3JlYXRlX2V4Y2VwdGlvbl9saXN0KEV4Y2VwdGlvbkxpc3Rfb3V0KTsK
ICAgIFN0YXR1cyBjcmVhdGVfY29udGV4dF9saXN0KENvbnRleHRMaXN0X291dCk7CgogICAgU3Rh
dHVzIGdldF9kZWZhdWx0X2NvbnRleHQoQ29udGV4dF9vdXQgY29udGV4dF9vdXQpOwoKCgogICAg
U3RhdHVzIGNyZWF0ZV9lbnZpcm9ubWVudChFbnZpcm9ubWVudF9vdXQpOwoKICAgIFN0YXR1cyBz
ZW5kX211bHRpcGxlX3JlcXVlc3RzX29uZXdheShjb25zdCBSZXF1ZXN0U2VxJik7CiAgICBTdGF0
dXMgc2VuZF9tdWx0aXBsZV9yZXF1ZXN0c19kZWZlcnJlZChjb25zdCBSZXF1ZXN0U2VxJik7CiAg
ICBCb29sZWFuIHBvbGxfbmV4dF9yZXNwb25zZSgpOwogICAgU3RhdHVzIGdldF9uZXh0X3Jlc3Bv
bnNlKFJlcXVlc3Rfb3V0KTsKCiAgICBUeXBlQ29kZV9wdHIgY3JlYXRlX3N0cnVjdF90Yyhjb25z
dCBjaGFyKiBpZCwgY29uc3QgY2hhciogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cnVjdE1lbWJlclNlcSYgbWVtYmVycyk7CiAgICBUeXBlQ29kZV9wdHIg
Y3JlYXRlX3VuaW9uX3RjKGNvbnN0IGNoYXIqIGlkLCBjb25zdCBjaGFyKiBuYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlQ29kZV9wdHIgZGlzY3JpbWluYXRvcl90eXBl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmlvbk1lbWJlclNlcSYg
bWVtYmVycyk7CiAgICBUeXBlQ29kZV9wdHIgY3JlYXRlX2VudW1fdGMoY29uc3QgY2hhciogaWQs
IGNvbnN0IGNoYXIqIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RW51bU1lbWJlclNlcSYgbWVtYmVycyk7CiAgICBUeXBlQ29kZV9wdHIgY3JlYXRlX2FsaWFzX3Rj
KGNvbnN0IGNoYXIqIGlkLCBjb25zdCBjaGFyKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUeXBlQ29kZV9wdHIgb3JpZ2luYWxfdHlwZSk7CiAgICBUeXBlQ29kZV9wdHIg
Y3JlYXRlX2V4Y2VwdGlvbl90Yyhjb25zdCBjaGFyKiBpZCwgY29uc3QgY2hhciogbmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cnVjdE1lbWJlclNlcSYg
bWVtYmVycyk7CiAgICBUeXBlQ29kZV9wdHIgY3JlYXRlX2ludGVyZmFjZV90Yyhjb25zdCBjaGFy
KiBpZCwgY29uc3QgY2hhciogbmFtZSk7CiAgICBUeXBlQ29kZV9wdHIgY3JlYXRlX3N0cmluZ190
YyhVTG9uZyBib3VuZCk7CiAgICBUeXBlQ29kZV9wdHIgY3JlYXRlX3NlcXVlbmNlX3RjKFVMb25n
IGJvdW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlQ29kZV9wdHIg
ZWxlbWVudF90eXBlKTsKICAgIFR5cGVDb2RlX3B0ciBjcmVhdGVfYXJyYXlfdGMoVUxvbmcgbGVu
Z3RoLCBUeXBlQ29kZV9wdHIgZXR5cGUpOwogICAgVHlwZUNvZGVfcHRyIGNyZWF0ZV9yZWN1cnNp
dmVfc2VxdWVuY2VfdGMoVUxvbmcgYm91bmQsIFVMb25nIG9mZnNldCk7CgoKCgoKICAgIER5bkFu
eV9wdHIgY3JlYXRlX2R5bl9hbnkoY29uc3QgQW55JiB2YWx1ZSk7CiAgICBEeW5BbnlfcHRyIGNy
ZWF0ZV9iYXNpY19keW5fYW55KFR5cGVDb2RlX3B0ciB0Yyk7CiAgICBEeW5TdHJ1Y3RfcHRyIGNy
ZWF0ZV9keW5fc3RydWN0KFR5cGVDb2RlX3B0ciB0Yyk7CiAgICBEeW5TZXF1ZW5jZV9wdHIgY3Jl
YXRlX2R5bl9zZXF1ZW5jZShUeXBlQ29kZV9wdHIgdGMpOwogICAgRHluQXJyYXlfcHRyIGNyZWF0
ZV9keW5fYXJyYXkoVHlwZUNvZGVfcHRyIHRjKTsKICAgIER5blVuaW9uX3B0ciBjcmVhdGVfZHlu
X3VuaW9uKFR5cGVDb2RlX3B0ciB0Yyk7CiAgICBEeW5FbnVtX3B0ciBjcmVhdGVfZHluX2VudW0o
VHlwZUNvZGVfcHRyIHRjKTsKCgoKCgogICAgc3RhdGljIGNvbnN0IGNoYXIqIF9QRF9yZXBvSWQ7
CiAgICB2aXJ0dWFsIH5PUkIoKTsKCiAgcHJvdGVjdGVkOgogICAgaW5saW5lIE9SQihpbnQgbmls
KSB7IF9QUl9zZXRvYmooKG9tbmlPYmpSZWYqKSAobmlsID8gMDoxKSk7IH0KCiAgcHJpdmF0ZToK
ICAgIE9SQihjb25zdCBPUkImKTsKICAgIE9SQiYgb3BlcmF0b3IgPSAoY29uc3QgT1JCJik7CiAg
fTsKCiAgdHlwZWRlZiBjaGFyKiBPUkJpZDsKICB0eXBlZGVmIFN0cmluZ192YXIgT1JCaWRfdmFy
OwoKICAgICAgICAgICAgICAgICAgIE9SQl9wdHIgT1JCX2luaXQoaW50JiBhcmdjLCBjaGFyKiog
YXJndiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogb3Ji
X2lkZW50aWZpZXI9IiIpOwoKCgoKCgogICAgICAgICAgICAgICAgICAgaW5saW5lIEJvb2xlYW4g
aXNfbmlsKEVudmlyb25tZW50X3B0ciBwKSB7CiAgICBpZiAoIUVudmlyb25tZW50OjpQUl9pc192
YWxpZChwKSkKICAgICAgcmV0dXJuIDA7CiAgICBlbHNlCiAgICAgIHJldHVybiAocCA/IHAtPk5Q
X2lzX25pbCgpIDoKICAgICAgICAgICAgICBfQ09SQkFfdXNlX25pbF9wdHJfYXNfbmlsX3BzZXVk
b19vYmpyZWYoIkVudmlyb25tZW50IikpOwogIH0KICAgICAgICAgICAgICAgICAgIGlubGluZSBC
b29sZWFuIGlzX25pbChDb250ZXh0X3B0ciBwKSB7CiAgICBpZiAoIUNvbnRleHQ6OlBSX2lzX3Zh
bGlkKHApKQogICAgICByZXR1cm4gMDsKICAgIGVsc2UKICAgICAgcmV0dXJuIChwID8gcC0+TlBf
aXNfbmlsKCkgOgogICAgICAgICAgICAgIF9DT1JCQV91c2VfbmlsX3B0cl9hc19uaWxfcHNldWRv
X29ianJlZigiQ29udGV4dCIpKTsKICB9CiAgICAgICAgICAgICAgICAgICBCb29sZWFuIGlzX25p
bChQcmluY2lwYWxfcHRyKTsKICAgICAgICAgICAgICAgICAgIGlubGluZSBCb29sZWFuIGlzX25p
bChPYmplY3RfcHRyIG8pIHsKICAgIGlmKCAhT2JqZWN0OjpfUFJfaXNfdmFsaWQobykgKSByZXR1
cm4gMDsKICAgIGlmKCBvICkgcmV0dXJuIG8tPl9OUF9pc19uaWwoKTsKICAgIGVsc2UgewoKCgoK
CgogICAgICByZXR1cm4gX0NPUkJBX3VzZV9uaWxfcHRyX2FzX25pbF9vYmpyZWYoKTsKICAgIH0K
ICB9CiAgICAgICAgICAgICAgICAgICBpbmxpbmUgQm9vbGVhbiBpc19uaWwoTmFtZWRWYWx1ZV9w
dHIgcCkgewogICAgaWYgKCFOYW1lZFZhbHVlOjpQUl9pc192YWxpZChwKSkKICAgICAgcmV0dXJu
IDA7CiAgICBlbHNlCiAgICAgIHJldHVybiAocCA/IHAtPk5QX2lzX25pbCgpIDoKICAgICAgICAg
ICAgICBfQ09SQkFfdXNlX25pbF9wdHJfYXNfbmlsX3BzZXVkb19vYmpyZWYoIk5hbWVkVmFsdWUi
KSk7CiAgfQogICAgICAgICAgICAgICAgICAgaW5saW5lIEJvb2xlYW4gaXNfbmlsKE5WTGlzdF9w
dHIgcCkgewogICAgaWYgKCFOVkxpc3Q6OlBSX2lzX3ZhbGlkKHApKQogICAgICByZXR1cm4gMDsK
ICAgIGVsc2UKICAgICAgcmV0dXJuIChwID8gcC0+TlBfaXNfbmlsKCkgOgogICAgICAgICAgICAg
IF9DT1JCQV91c2VfbmlsX3B0cl9hc19uaWxfcHNldWRvX29ianJlZigiTlZMaXN0IikpOwogIH0K
ICAgICAgICAgICAgICAgICAgIGlubGluZSBCb29sZWFuIGlzX25pbChSZXF1ZXN0X3B0ciBwKSB7
CiAgICBpZiAoIVJlcXVlc3Q6OlBSX2lzX3ZhbGlkKHApKQogICAgICByZXR1cm4gMDsKICAgIGVs
c2UKICAgICAgcmV0dXJuIChwID8gcC0+TlBfaXNfbmlsKCkgOgogICAgICAgICAgICAgIF9DT1JC
QV91c2VfbmlsX3B0cl9hc19uaWxfcHNldWRvX29ianJlZigiUmVxdWVzdCIpKTsKICB9CiAgICAg
ICAgICAgICAgICAgICBpbmxpbmUgQm9vbGVhbiBpc19uaWwoRXhjZXB0aW9uTGlzdF9wdHIgcCkg
ewogICAgaWYgKCFFeGNlcHRpb25MaXN0OjpQUl9pc192YWxpZChwKSkKICAgICAgcmV0dXJuIDA7
CiAgICBlbHNlCiAgICAgIHJldHVybiAocCA/IHAtPk5QX2lzX25pbCgpIDoKICAgICAgICAgICAg
ICBfQ09SQkFfdXNlX25pbF9wdHJfYXNfbmlsX3BzZXVkb19vYmpyZWYoIkV4Y2VwdGlvbkxpc3Qi
KSk7CiAgfQogICAgICAgICAgICAgICAgICAgaW5saW5lIEJvb2xlYW4gaXNfbmlsKENvbnRleHRM
aXN0X3B0ciBwKSB7CiAgICBpZiAoIUNvbnRleHRMaXN0OjpQUl9pc192YWxpZChwKSkKICAgICAg
cmV0dXJuIDA7CiAgICBlbHNlCiAgICAgIHJldHVybiAocCA/IHAtPk5QX2lzX25pbCgpIDoKICAg
ICAgICAgICAgICBfQ09SQkFfdXNlX25pbF9wdHJfYXNfbmlsX3BzZXVkb19vYmpyZWYoIkNvbnRl
eHRMaXN0IikpOwogIH0KICAgICAgICAgICAgICAgICAgIGlubGluZSBCb29sZWFuIGlzX25pbChU
eXBlQ29kZV9wdHIgcCkgewogICAgaWYgKCFUeXBlQ29kZTo6UFJfaXNfdmFsaWQocCkpCiAgICAg
IHJldHVybiAwOwogICAgZWxzZQogICAgICByZXR1cm4gKHAgPyBwLT5OUF9pc19uaWwoKSA6CiAg
ICAgICAgICAgICAgX0NPUkJBX3VzZV9uaWxfcHRyX2FzX25pbF9wc2V1ZG9fb2JqcmVmKCJUeXBl
Q29kZSIpKTsKICB9CiAgICAgICAgICAgICAgICAgICBpbmxpbmUgQm9vbGVhbiBpc19uaWwoRHlu
QW55X3B0ciBwKSB7CiAgICBpZiAoIUR5bkFueTo6UFJfaXNfdmFsaWQocCkpCiAgICAgIHJldHVy
biAwOwogICAgZWxzZQogICAgICByZXR1cm4gKHAgPyBwLT5OUF9pc19uaWwoKSA6CiAgICAgICAg
ICAgICAgX0NPUkJBX3VzZV9uaWxfcHRyX2FzX25pbF9wc2V1ZG9fb2JqcmVmKCJEeW5BbnkiKSk7
CiAgfQoKCgoKCgogICAgICAgICAgICAgICAgICAgaW5saW5lIHZvaWQgcmVsZWFzZShPYmplY3Rf
cHRyIG8pIHsKICAgIGlmKCBvICYmICFvLT5fTlBfaXNfbmlsKCkgKSB7CiAgICAgIGlmKCBvLT5f
TlBfaXNfcHNldWRvKCkgKSBvLT5fTlBfZGVjclJlZkNvdW50KCk7CiAgICAgIGVsc2Ugb21uaTo6
cmVsZWFzZU9ialJlZihvLT5fUFJfZ2V0b2JqKCkpOwogICAgfQogIH0KICAgICAgICAgICAgICAg
ICAgIHZvaWQgcmVsZWFzZShFbnZpcm9ubWVudF9wdHIgcCk7CiAgICAgICAgICAgICAgICAgICB2
b2lkIHJlbGVhc2UoQ29udGV4dF9wdHIgcCk7CiAgICAgICAgICAgICAgICAgICB2b2lkIHJlbGVh
c2UoUHJpbmNpcGFsX3B0cik7CiAgICAgICAgICAgICAgICAgICB2b2lkIHJlbGVhc2UoTmFtZWRW
YWx1ZV9wdHIgcCk7CiAgICAgICAgICAgICAgICAgICB2b2lkIHJlbGVhc2UoTlZMaXN0X3B0ciBw
KTsKICAgICAgICAgICAgICAgICAgIHZvaWQgcmVsZWFzZShSZXF1ZXN0X3B0ciBwKTsKICAgICAg
ICAgICAgICAgICAgIHZvaWQgcmVsZWFzZShFeGNlcHRpb25MaXN0X3B0ciBwKTsKICAgICAgICAg
ICAgICAgICAgIHZvaWQgcmVsZWFzZShDb250ZXh0TGlzdF9wdHIgcCk7CiAgICAgICAgICAgICAg
ICAgICB2b2lkIHJlbGVhc2UoVHlwZUNvZGVfcHRyIG8pOwogICAgICAgICAgICAgICAgICAgdm9p
ZCByZWxlYXNlKER5bkFueV9wdHIgZCk7CgoKCgogICAgICAgICAgICAgICAgICAgT2JqZWN0X3B0
ciBVbk1hcnNoYWxPYmpSZWYoY29uc3QgY2hhciogcmVwb0lkLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0QnVmZmVyZWRTdHJlYW0mIHMpOwogICAgICAg
ICAgICAgICAgICAgdm9pZCBNYXJzaGFsT2JqUmVmKE9iamVjdF9wdHIgb2JqLCBjb25zdCBjaGFy
ICpyZXBvSWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJl
cG9JZFNpemUsIE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKTsKICAgICAgICAgICAgICAgICAgIHNpemVf
dCBBbGlnbmVkT2JqUmVmKE9iamVjdF9wdHIgb2JqLCBjb25zdCBjaGFyICpyZXBvSWQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVwb0lkU2l6ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbml0aWFsb2Zmc2V0
KTsKICAgICAgICAgICAgICAgICAgIE9iamVjdF9wdHIgVW5NYXJzaGFsT2JqUmVmKGNvbnN0IGNo
YXIgKnJlcG9JZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKTsKICAgICAgICAgICAgICAgICAgIHZvaWQgTWFyc2hhbE9i
alJlZihPYmplY3RfcHRyIG9iaiwgY29uc3QgY2hhciogcmVwb0lkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZXBvSWRTaXplLCBNZW1CdWZmZXJlZFN0cmVh
bSYgcyk7CgoKIyAxICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL0NPUkJBX3ZhcnR5cGVz
LmgiIDEKIyA0OCAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9DT1JCQV92YXJ0eXBlcy5o
IgpjbGFzcyBPYmplY3RfTWVtYmVyOwpjbGFzcyBPYmplY3RfRWxlbWVudDsKY2xhc3MgT2JqZWN0
X0lOT1VUX2FyZzsKY2xhc3MgT2JqZWN0X09VVF9hcmc7CmNsYXNzIE9iamVjdF90Y0Rlc2NfYXJn
OwoKY2xhc3MgT2JqZWN0X3ZhciB7CnB1YmxpYzoKICB0eXBlZGVmIE9iamVjdCBUOwogIHR5cGVk
ZWYgT2JqZWN0X3B0ciBUX3B0cjsKICB0eXBlZGVmIE9iamVjdF92YXIgVF92YXI7CiAgdHlwZWRl
ZiBPYmplY3RfTWVtYmVyIFRfbWVtYmVyOwogIHR5cGVkZWYgT2JqZWN0X0VsZW1lbnQgVF9lbGVt
ZW50OwoKICBpbmxpbmUgT2JqZWN0X3ZhcigpIDogcGRfcmVmKFQ6Ol9uaWwoKSkge30KICBpbmxp
bmUgT2JqZWN0X3ZhcihUX3B0ciBwKSB7IHBkX3JlZiA9IHA7IH0KICBpbmxpbmUgT2JqZWN0X3Zh
cihjb25zdCBUX3ZhciYgcCkgOiBwZF9yZWYoVDo6X2R1cGxpY2F0ZShwLnBkX3JlZikpIHt9CiAg
aW5saW5lIE9iamVjdF92YXIoY29uc3QgVF9tZW1iZXImIHApOwogIGlubGluZSBPYmplY3RfdmFy
KGNvbnN0IFRfZWxlbWVudCYgcCk7CiAgaW5saW5lIH5PYmplY3RfdmFyKCkgeyByZWxlYXNlKHBk
X3JlZik7IH0KCiAgaW5saW5lIFRfdmFyJiBvcGVyYXRvcj0gKFRfcHRyIHApIHsKICAgIHJlbGVh
c2UocGRfcmVmKTsKICAgIHBkX3JlZiA9IHA7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGlubGlu
ZSBUX3ZhciYgb3BlcmF0b3I9IChjb25zdCBUX3ZhciYgcCkgewogICAgaWYoIHBkX3JlZiAhPSBw
LnBkX3JlZiApIHsKICAgICAgcmVsZWFzZShwZF9yZWYpOwogICAgICBwZF9yZWYgPSBUOjpfZHVw
bGljYXRlKHAucGRfcmVmKTsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5saW5lIFRf
dmFyJiBvcGVyYXRvcj0gKGNvbnN0IFRfbWVtYmVyJiBwKTsKCiAgaW5saW5lIFRfdmFyJiBvcGVy
YXRvcj0gKGNvbnN0IFRfZWxlbWVudCYgcCk7CgogIGlubGluZSBUX3B0ciBvcGVyYXRvci0+KCkg
Y29uc3QgeyByZXR1cm4gcGRfcmVmOyB9CiAgaW5saW5lIG9wZXJhdG9yIFRfcHRyKCkgY29uc3Qg
eyByZXR1cm4gcGRfcmVmOyB9CgogIGlubGluZSBUX3B0ciBpbigpIGNvbnN0IHsgcmV0dXJuIHBk
X3JlZjsgfQogIGlubGluZSBUX3B0ciYgaW5vdXQoKSB7IHJldHVybiBwZF9yZWY7IH0KICBpbmxp
bmUgVF9wdHImIG91dCgpIHsKICAgIGlmKCAhaXNfbmlsKHBkX3JlZikgKSB7CiAgICAgIHJlbGVh
c2UocGRfcmVmKTsKICAgICAgcGRfcmVmID0gVDo6X25pbCgpOwogICAgfQogICAgcmV0dXJuIHBk
X3JlZjsKICB9CiAgaW5saW5lIFRfcHRyIF9yZXRuKCkgewogICAgVF9wdHIgdG1wID0gcGRfcmVm
OwogICAgcGRfcmVmID0gVDo6X25pbCgpOwogICAgcmV0dXJuIHRtcDsKICB9CgogIGZyaWVuZCBj
bGFzcyBPYmplY3RfTWVtYmVyOwogIGZyaWVuZCBjbGFzcyBPYmplY3RfSU5PVVRfYXJnOwogIGZy
aWVuZCBjbGFzcyBPYmplY3RfT1VUX2FyZzsKICBmcmllbmQgY2xhc3MgT2JqZWN0X3RjRGVzY19h
cmc7Cgpwcml2YXRlOgogIFRfcHRyIHBkX3JlZjsKfTsKCgoKCgpjbGFzcyBPYmplY3RfTWVtYmVy
IHsKcHVibGljOgogIHR5cGVkZWYgT2JqZWN0IFQ7CiAgdHlwZWRlZiBPYmplY3RfcHRyIFRfcHRy
OwogIHR5cGVkZWYgT2JqZWN0X3ZhciBUX3ZhcjsKICB0eXBlZGVmIE9iamVjdF9NZW1iZXIgVF9t
ZW1iZXI7CiAgdHlwZWRlZiBPYmplY3RfRWxlbWVudCBUX2VsZW1lbnQ7CgogIGlubGluZSBPYmpl
Y3RfTWVtYmVyKCkgOiBfcHRyKFQ6Ol9uaWwoKSkge30KICBpbmxpbmUgT2JqZWN0X01lbWJlcihj
b25zdCBUX21lbWJlciYgcCkgewogICAgX3B0ciA9IFQ6Ol9kdXBsaWNhdGUocC5fcHRyKTsKICB9
CiAgaW5saW5lIH5PYmplY3RfTWVtYmVyKCkgewogICAgQ09SQkE6OnJlbGVhc2UoX3B0cik7CiAg
fQoKICBpbmxpbmUgVF9tZW1iZXImIG9wZXJhdG9yPSAoVF9wdHIgcCkgewogICAgQ09SQkE6OnJl
bGVhc2UoX3B0cik7CiAgICBfcHRyID0gcDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5saW5l
IFRfbWVtYmVyJiBvcGVyYXRvcj0gKGNvbnN0IFRfbWVtYmVyJiBwKSB7CiAgICBpZiggJnAgIT0g
dGhpcyApIHsKICAgICAgQ09SQkE6OnJlbGVhc2UoX3B0cik7CiAgICAgIF9wdHIgPSBUOjpfZHVw
bGljYXRlKHAuX3B0cik7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgVF9t
ZW1iZXImIG9wZXJhdG9yPSAoY29uc3QgVF92YXImIHApIHsKICAgIENPUkJBOjpyZWxlYXNlKF9w
dHIpOwogICAgX3B0ciA9IFQ6Ol9kdXBsaWNhdGUocCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoK
ICBpbmxpbmUgVF9tZW1iZXImIG9wZXJhdG9yPSAoY29uc3QgVF9lbGVtZW50JiBwKTsKCiAgaW5s
aW5lIHNpemVfdCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90IGluaXRpYWxvZmZzZXQpIGNvbnN0IHsK
ICAgIHJldHVybiBDT1JCQTo6T2JqZWN0OjpfTlBfYWxpZ25lZFNpemUoX3B0cixpbml0aWFsb2Zm
c2V0KTsKICB9CiAgaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtJiBz
KSBjb25zdCB7CiAgICBDT1JCQTo6T2JqZWN0OjpfbWFyc2hhbE9ialJlZihfcHRyLHMpOwogIH0K
ICBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIE9i
amVjdF9wdHIgX3Jlc3VsdCA9IENPUkJBOjpPYmplY3Q6Ol91bm1hcnNoYWxPYmpSZWYocyk7CiAg
ICBDT1JCQTo6cmVsZWFzZShfcHRyKTsKICAgIF9wdHIgPSBfcmVzdWx0OwogIH0KICBpbmxpbmUg
dm9pZCBvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0mIHMpIGNvbnN0IHsKICAgIENPUkJB
OjpPYmplY3Q6Ol9tYXJzaGFsT2JqUmVmKF9wdHIscyk7CiAgfQogIGlubGluZSB2b2lkIG9wZXJh
dG9yPDw9IChNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgT2JqZWN0X3B0ciBfcmVzdWx0ID0g
Q09SQkE6Ok9iamVjdDo6X3VubWFyc2hhbE9ialJlZihzKTsKICAgIENPUkJBOjpyZWxlYXNlKF9w
dHIpOwogICAgX3B0ciA9IF9yZXN1bHQ7CiAgfQoKICBpbmxpbmUgT2JqZWN0X3B0ciBvcGVyYXRv
ci0+KCkgY29uc3QgeyByZXR1cm4gX3B0cjsgfQogIGlubGluZSBvcGVyYXRvciBPYmplY3RfcHRy
ICgpIGNvbnN0IHsgcmV0dXJuIF9wdHI7IH0KCiAgaW5saW5lIE9iamVjdF9wdHIgaW4oKSBjb25z
dCB7IHJldHVybiBfcHRyOyB9CiAgaW5saW5lIE9iamVjdF9wdHImIGlub3V0KCkgeyByZXR1cm4g
X3B0cjsgfQogIGlubGluZSBPYmplY3RfcHRyJiBvdXQoKSB7CiAgICBDT1JCQTo6cmVsZWFzZShf
cHRyKTsKICAgIF9wdHIgPSBDT1JCQTo6T2JqZWN0OjpfbmlsKCk7CiAgICByZXR1cm4gX3B0cjsK
ICB9CiAgaW5saW5lIE9iamVjdF9wdHIgX3JldG4oKSB7CiAgICBPYmplY3RfcHRyIHRtcDsKICAg
IHRtcCA9IF9wdHI7CiAgICBfcHRyID0gQ09SQkE6Ok9iamVjdDo6X25pbCgpOwogICAgcmV0dXJu
IHRtcDsKICB9CgogIE9iamVjdF9wdHIgX3B0cjsKfTsKCgoKCgpjbGFzcyBPYmplY3RfRWxlbWVu
dCB7CnB1YmxpYzoKICB0eXBlZGVmIE9iamVjdCBUOwogIHR5cGVkZWYgT2JqZWN0X3B0ciBUX3B0
cjsKICB0eXBlZGVmIE9iamVjdF92YXIgVF92YXI7CiAgdHlwZWRlZiBPYmplY3RfTWVtYmVyIFRf
bWVtYmVyOwogIHR5cGVkZWYgT2JqZWN0X0VsZW1lbnQgVF9lbGVtZW50OwoKICBpbmxpbmUgT2Jq
ZWN0X0VsZW1lbnQoVF9wdHImIHAsIF9DT1JCQV9Cb29sZWFuIHJlbCkKICAgIDogcGRfcmVsKHJl
bCksIHBkX2RhdGEocCkge30KCiAgaW5saW5lIE9iamVjdF9FbGVtZW50KGNvbnN0IFRfZWxlbWVu
dCYgcCkKICAgIDogcGRfcmVsKHAucGRfcmVsKSwgcGRfZGF0YShwLnBkX2RhdGEpIHt9CgogIGlu
bGluZSB+T2JqZWN0X0VsZW1lbnQoKSB7CgogIH0KCiAgaW5saW5lIFRfZWxlbWVudCYgb3BlcmF0
b3I9IChUX3B0ciBwKSB7CiAgICBpZiggcGRfcmVsICkgQ09SQkE6OnJlbGVhc2UocGRfZGF0YSk7
CiAgICBwZF9kYXRhID0gcDsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBUX2VsZW1l
bnQmIG9wZXJhdG9yPSAoY29uc3QgVF9lbGVtZW50JiBwKSB7CiAgICBpZiggcGRfcmVsICkgewog
ICAgICBDT1JCQTo6cmVsZWFzZShwZF9kYXRhKTsKICAgICAgVDo6X2R1cGxpY2F0ZShwLnBkX2Rh
dGEpOwogICAgICBwZF9kYXRhID0gcC5wZF9kYXRhOwogICAgfQogICAgZWxzZQogICAgICBwZF9k
YXRhID0gcC5wZF9kYXRhOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIFRfZWxlbWVu
dCYgb3BlcmF0b3I9IChjb25zdCBUX21lbWJlciYgcCkgewogICAgaWYoIHBkX3JlbCApIHsKICAg
ICAgQ09SQkE6OnJlbGVhc2UocGRfZGF0YSk7CiAgICAgIFQ6Ol9kdXBsaWNhdGUocCk7CiAgICB9
CiAgICBwZF9kYXRhID0gKFRfcHRyKSBwOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5l
IFRfZWxlbWVudCYgb3BlcmF0b3I9IChjb25zdCBUX3ZhciYgcCkgewogICAgaWYoIHBkX3JlbCAp
IHsKICAgICAgQ09SQkE6OnJlbGVhc2UocGRfZGF0YSk7CiAgICAgIFQ6Ol9kdXBsaWNhdGUocCk7
CiAgICB9CiAgICBwZF9kYXRhID0gKFRfcHRyKXA7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBp
bmxpbmUgVF9wdHIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIHBkX2RhdGE7IH0KICBpbmxp
bmUgb3BlcmF0b3IgVF9wdHIgKCkgY29uc3QgeyByZXR1cm4gcGRfZGF0YTsgfQoKICBpbmxpbmUg
VF9wdHIgaW4oKSBjb25zdCB7IHJldHVybiBwZF9kYXRhOyB9CiAgaW5saW5lIFRfcHRyJiBpbm91
dCgpIHsgcmV0dXJuIHBkX2RhdGE7IH0KICBpbmxpbmUgVF9wdHImIG91dCgpIHsKICAgIGlmIChw
ZF9yZWwpIHsKICAgICAgQ09SQkE6OnJlbGVhc2UocGRfZGF0YSk7CiAgICB9CiAgICBwZF9kYXRh
ID0gVDo6X25pbCgpOwogICAgcmV0dXJuIHBkX2RhdGE7CiAgfQoKICBpbmxpbmUgVF9wdHIgX3Jl
dG4oKSB7CiAgICBUX3B0ciB0bXAgPSBwZF9kYXRhOwogICAgaWYgKCFwZF9yZWwpIHsgVDo6X2R1
cGxpY2F0ZShwZF9kYXRhKTsgfQogICAgcGRfZGF0YSA9IFQ6Ol9uaWwoKTsKICAgIHJldHVybiB0
bXA7CiAgfQoKICBpbmxpbmUgVF9wdHImIF9OUF9yZWYoKSBjb25zdCB7cmV0dXJuIHBkX2RhdGE7
fQogIGlubGluZSBfQ09SQkFfQm9vbGVhbiBfTlBfcmVsZWFzZSgpIGNvbnN0IHtyZXR1cm4gcGRf
cmVsO30KCiAgX0NPUkJBX0Jvb2xlYW4gcGRfcmVsOwogIFRfcHRyJiBwZF9kYXRhOwp9OwoKCgoK
CmNsYXNzIE9iamVjdF9JTk9VVF9hcmcgewpwdWJsaWM6CiAgaW5saW5lIE9iamVjdF9JTk9VVF9h
cmcoT2JqZWN0X3B0ciYgcCkgOiBfZGF0YShwKSB7fQogIGlubGluZSBPYmplY3RfSU5PVVRfYXJn
KE9iamVjdF92YXImIHApIDogX2RhdGEocC5wZF9yZWYpIHt9CiAgaW5saW5lIE9iamVjdF9JTk9V
VF9hcmcoT2JqZWN0X01lbWJlciYgcCkgOiBfZGF0YShwLl9wdHIpIHt9CiAgaW5saW5lIE9iamVj
dF9JTk9VVF9hcmcoT2JqZWN0X0VsZW1lbnQmIHApIDogX2RhdGEocC5fTlBfcmVmKCkpIHsKCgoK
CgoKICAgIGlmKCAhcC5fTlBfcmVsZWFzZSgpICkKICAgICAgT2JqZWN0OjpfZHVwbGljYXRlKHAu
X05QX3JlZigpKTsKICB9CiAgaW5saW5lIH5PYmplY3RfSU5PVVRfYXJnKCkge30KCiAgaW5saW5l
IG9wZXJhdG9yIE9iamVjdF9wdHImKCkgeyByZXR1cm4gX2RhdGE7IH0KCiAgT2JqZWN0X3B0ciYg
X2RhdGE7Cgpwcml2YXRlOgogIE9iamVjdF9JTk9VVF9hcmcoKTsKfTsKCgoKCgpjbGFzcyBPYmpl
Y3RfT1VUX2FyZyB7CnB1YmxpYzoKICB0eXBlZGVmIE9iamVjdCBUOwogIHR5cGVkZWYgT2JqZWN0
X3B0ciBUX3B0cjsKICB0eXBlZGVmIE9iamVjdF92YXIgVF92YXI7CiAgdHlwZWRlZiBPYmplY3Rf
TWVtYmVyIFRfbWVtYmVyOwogIHR5cGVkZWYgT2JqZWN0X0VsZW1lbnQgVF9lbGVtZW50OwogIHR5
cGVkZWYgT2JqZWN0X09VVF9hcmcgVF9vdXQ7CgogIGlubGluZSBPYmplY3RfT1VUX2FyZyhUX3B0
ciYgcCkgOiBfZGF0YShwKSB7IF9kYXRhID0gVDo6X25pbCgpOyB9CiAgaW5saW5lIE9iamVjdF9P
VVRfYXJnKFRfdmFyJiBwKSA6IF9kYXRhKHAucGRfcmVmKSB7CiAgICBwID0gVDo6X25pbCgpOwog
IH0KICBpbmxpbmUgT2JqZWN0X09VVF9hcmcoVF9tZW1iZXImIHApIDogX2RhdGEocC5fcHRyKSB7
CiAgICBwID0gVDo6X25pbCgpOwogIH0KICBpbmxpbmUgT2JqZWN0X09VVF9hcmcoVF9lbGVtZW50
JiBwKSA6IF9kYXRhKHAuX05QX3JlZigpKSB7CiAgICBwID0gVDo6X25pbCgpOwogIH0KICBpbmxp
bmUgT2JqZWN0X09VVF9hcmcoY29uc3QgVF9vdXQmIHApIDogX2RhdGEocC5fZGF0YSkge30KICBp
bmxpbmUgfk9iamVjdF9PVVRfYXJnKCkge30KCiAgaW5saW5lIE9iamVjdF9PVVRfYXJnJiBvcGVy
YXRvcj0oY29uc3QgVF9vdXQmIHApIHsKICAgIF9kYXRhID0gcC5fZGF0YTsgcmV0dXJuICp0aGlz
OyB9CiAgaW5saW5lIE9iamVjdF9PVVRfYXJnJiBvcGVyYXRvcj0oVF9wdHIgcCkgeyBfZGF0YSA9
IHA7IHJldHVybiAqdGhpczsgfQoKICBpbmxpbmUgb3BlcmF0b3IgVF9wdHImKCkgeyByZXR1cm4g
X2RhdGE7IH0KICBpbmxpbmUgVF9wdHImIHB0cigpIHsgcmV0dXJuIF9kYXRhOyB9CiAgaW5saW5l
IFRfcHRyIG9wZXJhdG9yLT4oKSB7IHJldHVybiBfZGF0YTsgfQoKICBUX3B0ciYgX2RhdGE7Cgpw
cml2YXRlOgogIE9iamVjdF9PVVRfYXJnKCk7CiAgVF9vdXQmIG9wZXJhdG9yPShjb25zdCBUX21l
bWJlciYgcCk7CiAgVF9vdXQmIG9wZXJhdG9yPShjb25zdCBUX2VsZW1lbnQmIHApOwogIFRfb3V0
JiBvcGVyYXRvcj0oY29uc3QgVF92YXImIHApOwoKfTsKCgp0eXBlZGVmIE9iamVjdF9PVVRfYXJn
IE9iamVjdF9vdXQ7CgoKCgoKY2xhc3MgT2JqZWN0X3RjRGVzY19hcmcgewpwdWJsaWM6CgoKCgoK
CiAgdHlwZWRlZiBPYmplY3RfTWVtYmVyIFRfbWVtYmVyOwogIHR5cGVkZWYgT2JqZWN0X0VsZW1l
bnQgVF9lbGVtZW50OwogIHR5cGVkZWYgT2JqZWN0X3ZhciBUX3ZhcjsKICBpbmxpbmUgT2JqZWN0
X3RjRGVzY19hcmcoVF92YXImIHApIDogX2RhdGEocC5wZF9yZWYpLCBfcmVsKDEpIHt9CiAgaW5s
aW5lIE9iamVjdF90Y0Rlc2NfYXJnKFRfbWVtYmVyJiBwKSA6IF9kYXRhKHAuX3B0ciksIF9yZWwo
MSkge30KICBpbmxpbmUgT2JqZWN0X3RjRGVzY19hcmcoVF9lbGVtZW50IHApCiAgICA6IF9kYXRh
KHAuX05QX3JlZigpKSwgX3JlbChwLl9OUF9yZWxlYXNlKCkpIHt9CiAgaW5saW5lIH5PYmplY3Rf
dGNEZXNjX2FyZygpIHt9CgogIE9iamVjdF9wdHImIF9kYXRhOwogIF9DT1JCQV9Cb29sZWFuIF9y
ZWw7Cgpwcml2YXRlOgogIE9iamVjdF90Y0Rlc2NfYXJnKCk7Cn07CgoKCgoKY2xhc3MgVHlwZUNv
ZGVfSU5PVVRfYXJnOwpjbGFzcyBUeXBlQ29kZV9PVVRfYXJnOwoKY2xhc3MgVHlwZUNvZGVfdmFy
IHsKcHVibGljOgogIHR5cGVkZWYgVHlwZUNvZGVfcHRyIFRfcHRyOwogIHR5cGVkZWYgVHlwZUNv
ZGVfdmFyIFRfdmFyOwogIHR5cGVkZWYgVHlwZUNvZGVfbWVtYmVyIFRfbWVtYmVyOwoKICBpbmxp
bmUgVHlwZUNvZGVfdmFyKCkgOiBwZF9yZWYoVHlwZUNvZGU6Ol9uaWwoKSkge30KICBpbmxpbmUg
VHlwZUNvZGVfdmFyKFRfcHRyIHApIDogcGRfcmVmKHApIHt9CiAgaW5saW5lIFR5cGVDb2RlX3Zh
cihjb25zdCBUX3ZhciYgcCkgewogICAgcGRfcmVmID0gVHlwZUNvZGU6Ol9kdXBsaWNhdGUocC5w
ZF9yZWYpOwogIH0KICBUeXBlQ29kZV92YXIoY29uc3QgVHlwZUNvZGVfbWVtYmVyJiBwKSB7CiAg
ICBwZF9yZWYgPSBUeXBlQ29kZTo6X2R1cGxpY2F0ZShwLl9wdHIpOwogIH0KICB+VHlwZUNvZGVf
dmFyKCkgeyByZWxlYXNlKHBkX3JlZik7IH0KCiAgaW5saW5lIFRfdmFyJiBvcGVyYXRvcj0gKFRf
cHRyIHApIHsKICAgIHJlbGVhc2UocGRfcmVmKTsKICAgIHBkX3JlZiA9IHA7CiAgICByZXR1cm4g
KnRoaXM7CiAgfQoKICBpbmxpbmUgVF92YXImIG9wZXJhdG9yPSAoY29uc3QgVF92YXImIHApIHsK
ICAgIGlmKCBwZF9yZWYgIT0gcC5wZF9yZWYgKSB7CiAgICAgIHJlbGVhc2UocGRfcmVmKTsKICAg
ICAgcGRfcmVmID0gVHlwZUNvZGU6Ol9kdXBsaWNhdGUocC5wZF9yZWYpOwogICAgfQogICAgcmV0
dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIFRfdmFyJiBvcGVyYXRvcj0oY29uc3QgVHlwZUNvZGVf
bWVtYmVyJiBwKSB7CiAgICByZWxlYXNlKHBkX3JlZik7CiAgICBwZF9yZWYgPSBUeXBlQ29kZTo6
X2R1cGxpY2F0ZShwLl9wdHIpOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgVF9wdHIgb3BlcmF0
b3ItPigpIGNvbnN0IHsgcmV0dXJuIHBkX3JlZjsgfQogIG9wZXJhdG9yIFRfcHRyICgpIGNvbnN0
IHsgcmV0dXJuIHBkX3JlZjsgfQoKICBUX3B0ciBpbigpIGNvbnN0IHsgcmV0dXJuIHBkX3JlZjsg
fQogIFRfcHRyJiBpbm91dCgpIHsgcmV0dXJuIHBkX3JlZjsgfQogIFRfcHRyJiBvdXQoKSB7CiAg
ICByZWxlYXNlKHBkX3JlZik7CiAgICBwZF9yZWYgPSBUeXBlQ29kZTo6X25pbCgpOwogICAgcmV0
dXJuIHBkX3JlZjsKICB9CiAgVF9wdHIgX3JldG4oKSB7CiAgICBUX3B0ciB0bXAgPSBwZF9yZWY7
CiAgICBwZF9yZWYgPSBUeXBlQ29kZTo6X25pbCgpOwogICAgcmV0dXJuIHRtcDsKICB9CgogIGZy
aWVuZCBjbGFzcyBUeXBlQ29kZV9tZW1iZXI7CiAgZnJpZW5kIGNsYXNzIFR5cGVDb2RlX0lOT1VU
X2FyZzsKICBmcmllbmQgY2xhc3MgVHlwZUNvZGVfT1VUX2FyZzsKCnByaXZhdGU6CiAgVF9wdHIg
cGRfcmVmOwp9OwoKCgoKCmNsYXNzIFR5cGVDb2RlX0lOT1VUX2FyZyB7CnB1YmxpYzoKICBpbmxp
bmUgVHlwZUNvZGVfSU5PVVRfYXJnKFR5cGVDb2RlX3B0ciYgcCkgOiBfZGF0YShwKSB7IH0KICBp
bmxpbmUgVHlwZUNvZGVfSU5PVVRfYXJnKFR5cGVDb2RlX3ZhciYgcCkgOiBfZGF0YShwLnBkX3Jl
ZikgeyB9CiAgaW5saW5lIFR5cGVDb2RlX0lOT1VUX2FyZyhUeXBlQ29kZV9tZW1iZXImIHApIDog
X2RhdGEocC5fcHRyKSB7IH0KICBpbmxpbmUgflR5cGVDb2RlX0lOT1VUX2FyZygpIHt9CgogIGlu
bGluZSBvcGVyYXRvciBUeXBlQ29kZV9wdHImKCkgeyByZXR1cm4gX2RhdGE7IH0KCiAgVHlwZUNv
ZGVfcHRyJiBfZGF0YTsKCnByaXZhdGU6CiAgVHlwZUNvZGVfSU5PVVRfYXJnKCk7Cn07CgoKCgoK
Y2xhc3MgVHlwZUNvZGVfT1VUX2FyZyB7CnB1YmxpYzoKICB0eXBlZGVmIFR5cGVDb2RlIFQ7CiAg
dHlwZWRlZiBUeXBlQ29kZV9wdHIgVF9wdHI7CiAgdHlwZWRlZiBUeXBlQ29kZV92YXIgVF92YXI7
CiAgdHlwZWRlZiBUeXBlQ29kZV9tZW1iZXIgVF9tZW1iZXI7CgogIFR5cGVDb2RlX09VVF9hcmco
VF9wdHImIHApIDogX2RhdGEocCkgeyBfZGF0YSA9IFQ6Ol9uaWwoKTsgfQogIFR5cGVDb2RlX09V
VF9hcmcoVF92YXImIHApIDogX2RhdGEocC5wZF9yZWYpIHsKICAgIHAgPSBUOjpfbmlsKCk7CiAg
fQogIGlubGluZSBUeXBlQ29kZV9PVVRfYXJnKFRfbWVtYmVyJiBwKSA6IF9kYXRhKHAuX3B0cikg
ewogICAgcCA9IFQ6Ol9uaWwoKTsKICB9CiAgaW5saW5lIH5UeXBlQ29kZV9PVVRfYXJnKCkge30K
CiAgaW5saW5lIFR5cGVDb2RlX09VVF9hcmcmIG9wZXJhdG9yPShUX3B0ciBwKSB7IF9kYXRhID0g
cDsgcmV0dXJuICp0aGlzOyB9CiAgaW5saW5lIFR5cGVDb2RlX09VVF9hcmcmIG9wZXJhdG9yPShj
b25zdCBUX21lbWJlciYgcCkgewogICAgX2RhdGEgPSBUOjpfZHVwbGljYXRlKHApOyByZXR1cm4g
KnRoaXM7CiAgfQogIGlubGluZSBvcGVyYXRvciBUX3B0ciYoKSB7IHJldHVybiBfZGF0YTsgfQog
IGlubGluZSBUX3B0ciYgcHRyKCkgeyByZXR1cm4gX2RhdGE7IH0KICBpbmxpbmUgVF9wdHIgb3Bl
cmF0b3ItPigpIHsgcmV0dXJuIF9kYXRhOyB9CgogIFRfcHRyJiBfZGF0YTsKCnByaXZhdGU6CiAg
VHlwZUNvZGVfT1VUX2FyZygpOwp9OwoKCnR5cGVkZWYgVHlwZUNvZGVfT1VUX2FyZyBUeXBlQ29k
ZV9vdXQ7CgoKCgoKY2xhc3MgT1JCX3ZhciB7CnB1YmxpYzoKICB0eXBlZGVmIE9SQiBUOwogIHR5
cGVkZWYgT1JCX3B0ciBUX3B0cjsKICB0eXBlZGVmIE9SQl92YXIgVF92YXI7CgogIGlubGluZSBP
UkJfdmFyKCkgOiBwZF9yZWYoVDo6X25pbCgpKSB7fQogIGlubGluZSBPUkJfdmFyKFRfcHRyIHAp
IDogcGRfcmVmKHApIHt9CiAgaW5saW5lIE9SQl92YXIoY29uc3QgVF92YXImIHApIDogcGRfcmVm
KFQ6Ol9kdXBsaWNhdGUocC5wZF9yZWYpKSB7fQogIGlubGluZSB+T1JCX3ZhcigpIHsgcmVsZWFz
ZShwZF9yZWYpOyB9CgogIGlubGluZSBUX3ZhciYgb3BlcmF0b3I9IChUX3B0ciBwKSB7CiAgICBy
ZWxlYXNlKHBkX3JlZik7CiAgICBwZF9yZWYgPSBwOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBp
bmxpbmUgVF92YXImIG9wZXJhdG9yPSAoY29uc3QgVF92YXImIHApIHsKICAgIGlmKCBwZF9yZWYg
IT0gcC5wZF9yZWYgKSB7CiAgICAgIHJlbGVhc2UocGRfcmVmKTsKICAgICAgcGRfcmVmID0gVDo6
X2R1cGxpY2F0ZShwLnBkX3JlZik7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxp
bmUgVF9wdHIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIHBkX3JlZjsgfQogIGlubGluZSBv
cGVyYXRvciBUX3B0cigpIGNvbnN0IHsgcmV0dXJuIHBkX3JlZjsgfQoKICBpbmxpbmUgVF9wdHIg
aW4oKSBjb25zdCB7IHJldHVybiBwZF9yZWY7IH0KICBpbmxpbmUgVF9wdHImIGlub3V0KCkgeyBy
ZXR1cm4gcGRfcmVmOyB9CiAgaW5saW5lIFRfcHRyJiBvdXQoKSB7CiAgICBpZiggIWlzX25pbChw
ZF9yZWYpICkgewogICAgICByZWxlYXNlKHBkX3JlZik7CiAgICAgIHBkX3JlZiA9IFQ6Ol9uaWwo
KTsKICAgIH0KICAgIHJldHVybiBwZF9yZWY7CiAgfQogIGlubGluZSBUX3B0ciBfcmV0bigpIHsK
ICAgIFRfcHRyIHRtcCA9IHBkX3JlZjsKICAgIHBkX3JlZiA9IFQ6Ol9uaWwoKTsKICAgIHJldHVy
biB0bXA7CiAgfQoKcHJpdmF0ZToKICBUX3B0ciBwZF9yZWY7Cn07CgoKCgoKY2xhc3MgQk9BX3Zh
ciB7CnB1YmxpYzoKICB0eXBlZGVmIEJPQSBUOwogIHR5cGVkZWYgQk9BX3B0ciBUX3B0cjsKICB0
eXBlZGVmIEJPQV92YXIgVF92YXI7CgogIGlubGluZSBCT0FfdmFyKCkgOiBwZF9yZWYoVDo6X25p
bCgpKSB7fQogIGlubGluZSBCT0FfdmFyKFRfcHRyIHApIDogcGRfcmVmKHApIHt9CiAgaW5saW5l
IEJPQV92YXIoY29uc3QgVF92YXImIHApIDogcGRfcmVmKFQ6Ol9kdXBsaWNhdGUocC5wZF9yZWYp
KSB7fQogIGlubGluZSB+Qk9BX3ZhcigpIHsgcmVsZWFzZShwZF9yZWYpOyB9CgogIGlubGluZSBU
X3ZhciYgb3BlcmF0b3I9IChUX3B0ciBwKSB7CiAgICByZWxlYXNlKHBkX3JlZik7CiAgICBwZF9y
ZWYgPSBwOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbmxpbmUgVF92YXImIG9wZXJhdG9yPSAo
Y29uc3QgVF92YXImIHApIHsKICAgIGlmKCBwZF9yZWYgIT0gcC5wZF9yZWYgKSB7CiAgICAgIHJl
bGVhc2UocGRfcmVmKTsKICAgICAgcGRfcmVmID0gVDo6X2R1cGxpY2F0ZShwLnBkX3JlZik7CiAg
ICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgVF9wdHIgb3BlcmF0b3ItPigpIGNv
bnN0IHsgcmV0dXJuIHBkX3JlZjsgfQogIGlubGluZSBvcGVyYXRvciBUX3B0cigpIGNvbnN0IHsg
cmV0dXJuIHBkX3JlZjsgfQoKICBpbmxpbmUgVF9wdHIgaW4oKSBjb25zdCB7IHJldHVybiBwZF9y
ZWY7IH0KICBpbmxpbmUgVF9wdHImIGlub3V0KCkgeyByZXR1cm4gcGRfcmVmOyB9CiAgaW5saW5l
IFRfcHRyJiBvdXQoKSB7CiAgICBpZiggIWlzX25pbChwZF9yZWYpICkgewogICAgICByZWxlYXNl
KHBkX3JlZik7CiAgICAgIHBkX3JlZiA9IFQ6Ol9uaWwoKTsKICAgIH0KICAgIHJldHVybiBwZF9y
ZWY7CiAgfQogIGlubGluZSBUX3B0ciBfcmV0bigpIHsKICAgIFRfcHRyIHRtcCA9IHBkX3JlZjsK
ICAgIHBkX3JlZiA9IFQ6Ol9uaWwoKTsKICAgIHJldHVybiB0bXA7CiAgfQoKcHJpdmF0ZToKICBU
X3B0ciBwZF9yZWY7Cn07CgoKCgoKCnR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9WYXI8RHluQW55
PiBEeW5BbnlfdmFyOwp0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfVmFyPER5bkVudW0+IER5bkVu
dW1fdmFyOwp0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfVmFyPER5blN0cnVjdD4gRHluU3RydWN0
X3ZhcjsKdHlwZWRlZiBfQ09SQkFfUHNldWRvT2JqX1ZhcjxEeW5Vbmlvbj4gRHluVW5pb25fdmFy
Owp0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfVmFyPER5blNlcXVlbmNlPiBEeW5TZXF1ZW5jZV92
YXI7CnR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9WYXI8RHluQXJyYXk+IER5bkFycmF5X3ZhcjsK
Cgp0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfTWVtYmVyPER5bkFueSxEeW5BbnlfdmFyPiBEeW5B
bnlfbWVtYmVyOwp0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfTWVtYmVyPER5bkVudW0sRHluRW51
bV92YXI+IER5bkVudW1fbWVtYmVyOwp0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfTWVtYmVyPER5
blN0cnVjdCxEeW5TdHJ1Y3RfdmFyPiBEeW5TdHJ1Y3RfbWVtYmVyOwp0eXBlZGVmIF9DT1JCQV9Q
c2V1ZG9PYmpfTWVtYmVyPER5blVuaW9uLER5blVuaW9uX3Zhcj4gRHluVW5pb25fbWVtYmVyOwp0
eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfTWVtYmVyPER5blNlcXVlbmNlLER5blNlcXVlbmNlX3Zh
cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRHluU2VxdWVuY2VfbWVtYmVyOwp0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfTWVtYmVyPER5
bkFycmF5LER5bkFycmF5X3Zhcj4gRHluQXJyYXlfbWVtYmVyOwoKCnR5cGVkZWYgX0NPUkJBX1Bz
ZXVkb09ial9PdXQ8RHluQW55LER5bkFueV92YXI+IER5bkFueV9vdXQ7CnR5cGVkZWYgX0NPUkJB
X1BzZXVkb09ial9PdXQ8RHluRW51bSxEeW5FbnVtX3Zhcj4gRHluRW51bV9vdXQ7CnR5cGVkZWYg
X0NPUkJBX1BzZXVkb09ial9PdXQ8RHluU3RydWN0LER5blN0cnVjdF92YXI+IER5blN0cnVjdF9v
dXQ7CnR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9PdXQ8RHluVW5pb24sRHluVW5pb25fdmFyPiBE
eW5Vbmlvbl9vdXQ7CnR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9PdXQ8RHluU2VxdWVuY2UsRHlu
U2VxdWVuY2VfdmFyPiBEeW5TZXF1ZW5jZV9vdXQ7CnR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9P
dXQ8RHluQXJyYXksRHluQXJyYXlfdmFyPiBEeW5BcnJheV9vdXQ7CiMgMjU5MCAiLi4vLi4vLi4v
Li4vaW5jbHVkZS9vbW5pT1JCMy9DT1JCQS5oIiAyCgoKfQoKbmFtZXNwYWNlIENPUkJBCnsKCgoK
CgoKIyAxICIuLi9vbW5pT1JCMy9pcl9kZWZzLmhoIiAxCgoKCgpleHRlcm4gY29uc3QgQ09SQkE6
OlR5cGVDb2RlX3B0ciBfdGNfU2NvcGVkTmFtZTsKCnR5cGVkZWYgY2hhciogU2NvcGVkTmFtZTsK
dHlwZWRlZiBDT1JCQTo6U3RyaW5nX3ZhciBTY29wZWROYW1lX3ZhcjsKCmV4dGVybiBjb25zdCBD
T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19SZXBvc2l0b3J5SWQ7Cgp0eXBlZGVmIGNoYXIqIFJlcG9z
aXRvcnlJZDsKdHlwZWRlZiBDT1JCQTo6U3RyaW5nX3ZhciBSZXBvc2l0b3J5SWRfdmFyOwoKZW51
bSBEZWZpbml0aW9uS2luZCB7IGRrX25vbmUsIGRrX2FsbCwgZGtfQXR0cmlidXRlLCBka19Db25z
dGFudCwgZGtfRXhjZXB0aW9uLCBka19JbnRlcmZhY2UsIGRrX01vZHVsZSwgZGtfT3BlcmF0aW9u
LCBka19UeXBlZGVmLCBka19BbGlhcywgZGtfU3RydWN0LCBka19VbmlvbiwgZGtfRW51bSwgZGtf
UHJpbWl0aXZlLCBka19TdHJpbmcsIGRrX1NlcXVlbmNlLCBka19BcnJheSwgZGtfUmVwb3NpdG9y
eSwgZGtfV3N0cmluZywgZGtfRml4ZWQsIGRrX1ZhbHVlLCBka19WYWx1ZUJveCwgZGtfTWVtYmVy
LCBka19OYXRpdmUsIGRrX0Fic3RyYWN0SW50ZXJmYWNlIH07CnR5cGVkZWYgRGVmaW5pdGlvbktp
bmQmIERlZmluaXRpb25LaW5kX291dDsKCmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRy
IF90Y19EZWZpbml0aW9uS2luZDsKCgoKCmNsYXNzIElST2JqZWN0OwpjbGFzcyBfb2JqcmVmX0lS
T2JqZWN0OwpjbGFzcyBfaW1wbF9JUk9iamVjdDsKCnR5cGVkZWYgX29ianJlZl9JUk9iamVjdCog
SVJPYmplY3RfcHRyOwp0eXBlZGVmIElST2JqZWN0X3B0ciBJUk9iamVjdFJlZjsKCmNsYXNzIElS
T2JqZWN0X0hlbHBlciB7CnB1YmxpYzoKICB0eXBlZGVmIElST2JqZWN0X3B0ciBfcHRyX3R5cGU7
CgogIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwogIHN0YXRpYyBfQ09SQkFfQm9vbGVhbiBpc19u
aWwoX3B0cl90eXBlKTsKICBzdGF0aWMgdm9pZCByZWxlYXNlKF9wdHJfdHlwZSk7CiAgc3RhdGlj
IHZvaWQgZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHNpemVfdCBOUF9hbGlnbmVkU2l6
ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIHZvaWQgbWFyc2hhbE9ialJlZihfcHRyX3R5
cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpS
ZWYoTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJf
dHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9i
alJlZihNZW1CdWZmZXJlZFN0cmVhbSYpOwp9OwoKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX1Zhcjxf
b2JqcmVmX0lST2JqZWN0LCBJUk9iamVjdF9IZWxwZXI+IElST2JqZWN0X3ZhcjsKdHlwZWRlZiBf
Q09SQkFfT2JqUmVmX09VVF9hcmc8X29ianJlZl9JUk9iamVjdCxJUk9iamVjdF9IZWxwZXIgPiBJ
Uk9iamVjdF9vdXQ7CgoKCmNsYXNzIElST2JqZWN0IHsKcHVibGljOgoKICB0eXBlZGVmIElST2Jq
ZWN0X3B0ciBfcHRyX3R5cGU7CiAgdHlwZWRlZiBJUk9iamVjdF92YXIgX3Zhcl90eXBlOwoKICBz
dGF0aWMgX3B0cl90eXBlIF9kdXBsaWNhdGUoX3B0cl90eXBlKTsKICBzdGF0aWMgX3B0cl90eXBl
IF9uYXJyb3coQ09SQkE6Ok9iamVjdF9wdHIpOwogIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwoK
ICBzdGF0aWMgaW5saW5lIHNpemVfdCBfYWxpZ25lZFNpemUoX3B0cl90eXBlLCBzaXplX3QpOwog
IHN0YXRpYyBpbmxpbmUgdm9pZCBfbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1ZmZlcmVk
U3RyZWFtJik7CiAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwg
TWVtQnVmZmVyZWRTdHJlYW0mKTsKCiAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3VubWFyc2hh
bE9ialJlZihOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2Jq
ID0gQ09SQkE6OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBzKTsKICAgIF9wdHJfdHlwZSBy
ZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAgcmV0dXJu
IHJlc3VsdDsKICB9CgogIHN0YXRpYyBpbmxpbmUgX3B0cl90eXBlIF91bm1hcnNoYWxPYmpSZWYo
TWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiA9IENPUkJB
OjpVbk1hcnNoYWxPYmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICBfcHRyX3R5cGUgcmVzdWx0ID0g
X25hcnJvdyhvYmopOwogICAgQ09SQkE6OnJlbGVhc2Uob2JqKTsKICAgIHJldHVybiByZXN1bHQ7
CiAgfQoKICBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsKCgoKfTsKCmNsYXNzIF9vYmpy
ZWZfSVJPYmplY3QgOgogIHB1YmxpYyB2aXJ0dWFsIENPUkJBOjpPYmplY3QsIHB1YmxpYyB2aXJ0
dWFsIG9tbmlPYmpSZWYKewpwdWJsaWM6CiAgdm9pZCBkZXN0cm95KCk7CgogIERlZmluaXRpb25L
aW5kIGRlZl9raW5kKCk7CgogIGlubGluZSBfb2JqcmVmX0lST2JqZWN0KCkgeyBfUFJfc2V0b2Jq
KDApOyB9CiAgX29ianJlZl9JUk9iamVjdChjb25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxl
TGlzdCosIG9tbmlJZGVudGl0eSosIG9tbmlMb2NhbElkZW50aXR5Kik7Cgpwcm90ZWN0ZWQ6CiAg
dmlydHVhbCB+X29ianJlZl9JUk9iamVjdCgpOwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9w
dHJUb09ialJlZihjb25zdCBjaGFyKik7CgogIF9vYmpyZWZfSVJPYmplY3QoY29uc3QgX29ianJl
Zl9JUk9iamVjdCYpOwogIF9vYmpyZWZfSVJPYmplY3QmIG9wZXJhdG9yID0gKGNvbnN0IF9vYmpy
ZWZfSVJPYmplY3QmKTsKCn07CgpjbGFzcyBfcG9mX0lST2JqZWN0IDogcHVibGljIHByb3h5T2Jq
ZWN0RmFjdG9yeSB7CnB1YmxpYzoKICBpbmxpbmUgX3BvZl9JUk9iamVjdCgpIDogcHJveHlPYmpl
Y3RGYWN0b3J5KElST2JqZWN0OjpfUERfcmVwb0lkKSB7fQogIHZpcnR1YWwgfl9wb2ZfSVJPYmpl
Y3QoKTsKCiAgdmlydHVhbCBvbW5pT2JqUmVmKiBuZXdPYmpSZWYoY29uc3QgY2hhciosIElPUDo6
VGFnZ2VkUHJvZmlsZUxpc3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9tbmlJ
ZGVudGl0eSosIG9tbmlMb2NhbElkZW50aXR5Kik7CiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBp
c19hKGNvbnN0IGNoYXIqKSBjb25zdDsKfTsKCmNsYXNzIF9pbXBsX0lST2JqZWN0IDoKICBwdWJs
aWMgdmlydHVhbCBvbW5pU2VydmFudAp7CnB1YmxpYzoKICB2aXJ0dWFsIH5faW1wbF9JUk9iamVj
dCgpOwoKICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpID0gMDsKCiAgdmlydHVhbCBEZWZpbml0aW9u
S2luZCBkZWZfa2luZCgpID0gMDsKCnB1YmxpYzoKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIF9k
aXNwYXRjaChHSU9QX1MmKTsKCnByaXZhdGU6CiAgdmlydHVhbCB2b2lkKiBfcHRyVG9JbnRlcmZh
Y2UoY29uc3QgY2hhciopOwogIHZpcnR1YWwgY29uc3QgY2hhciogX21vc3REZXJpdmVkUmVwb0lk
KCk7Cn07CgpleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfSVJPYmplY3Q7Cgpl
eHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVmVyc2lvblNwZWM7Cgp0eXBlZGVm
IGNoYXIqIFZlcnNpb25TcGVjOwp0eXBlZGVmIENPUkJBOjpTdHJpbmdfdmFyIFZlcnNpb25TcGVj
X3ZhcjsKCgoKCmNsYXNzIENvbnRhaW5lZDsKY2xhc3MgX29ianJlZl9Db250YWluZWQ7CmNsYXNz
IF9pbXBsX0NvbnRhaW5lZDsKCnR5cGVkZWYgX29ianJlZl9Db250YWluZWQqIENvbnRhaW5lZF9w
dHI7CnR5cGVkZWYgQ29udGFpbmVkX3B0ciBDb250YWluZWRSZWY7CgpjbGFzcyBDb250YWluZWRf
SGVscGVyIHsKcHVibGljOgogIHR5cGVkZWYgQ29udGFpbmVkX3B0ciBfcHRyX3R5cGU7CgogIHN0
YXRpYyBfcHRyX3R5cGUgX25pbCgpOwogIHN0YXRpYyBfQ09SQkFfQm9vbGVhbiBpc19uaWwoX3B0
cl90eXBlKTsKICBzdGF0aWMgdm9pZCByZWxlYXNlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHZvaWQg
ZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHNpemVfdCBOUF9hbGlnbmVkU2l6ZShfcHRy
X3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIHZvaWQgbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5l
dEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTmV0
QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwg
TWVtQnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihN
ZW1CdWZmZXJlZFN0cmVhbSYpOwp9OwoKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX1Zhcjxfb2JqcmVm
X0NvbnRhaW5lZCwgQ29udGFpbmVkX0hlbHBlcj4gQ29udGFpbmVkX3ZhcjsKdHlwZWRlZiBfQ09S
QkFfT2JqUmVmX09VVF9hcmc8X29ianJlZl9Db250YWluZWQsQ29udGFpbmVkX0hlbHBlciA+IENv
bnRhaW5lZF9vdXQ7CgoKCgoKCmNsYXNzIFJlcG9zaXRvcnk7CmNsYXNzIF9vYmpyZWZfUmVwb3Np
dG9yeTsKY2xhc3MgX2ltcGxfUmVwb3NpdG9yeTsKCnR5cGVkZWYgX29ianJlZl9SZXBvc2l0b3J5
KiBSZXBvc2l0b3J5X3B0cjsKdHlwZWRlZiBSZXBvc2l0b3J5X3B0ciBSZXBvc2l0b3J5UmVmOwoK
Y2xhc3MgUmVwb3NpdG9yeV9IZWxwZXIgewpwdWJsaWM6CiAgdHlwZWRlZiBSZXBvc2l0b3J5X3B0
ciBfcHRyX3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwogIHN0YXRpYyBfQ09SQkFf
Qm9vbGVhbiBpc19uaWwoX3B0cl90eXBlKTsKICBzdGF0aWMgdm9pZCByZWxlYXNlKF9wdHJfdHlw
ZSk7CiAgc3RhdGljIHZvaWQgZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHNpemVfdCBO
UF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIHZvaWQgbWFyc2hhbE9i
alJlZihfcHRyX3R5cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIF9wdHJfdHlwZSB1
bm1hcnNoYWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgdm9pZCBtYXJzaGFs
T2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBl
IHVubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYpOwp9OwoKdHlwZWRlZiBfQ09SQkFf
T2JqUmVmX1Zhcjxfb2JqcmVmX1JlcG9zaXRvcnksIFJlcG9zaXRvcnlfSGVscGVyPiBSZXBvc2l0
b3J5X3ZhcjsKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX09VVF9hcmc8X29ianJlZl9SZXBvc2l0b3J5
LFJlcG9zaXRvcnlfSGVscGVyID4gUmVwb3NpdG9yeV9vdXQ7CgoKCgoKCmNsYXNzIENvbnRhaW5l
cjsKY2xhc3MgX29ianJlZl9Db250YWluZXI7CmNsYXNzIF9pbXBsX0NvbnRhaW5lcjsKCnR5cGVk
ZWYgX29ianJlZl9Db250YWluZXIqIENvbnRhaW5lcl9wdHI7CnR5cGVkZWYgQ29udGFpbmVyX3B0
ciBDb250YWluZXJSZWY7CgpjbGFzcyBDb250YWluZXJfSGVscGVyIHsKcHVibGljOgogIHR5cGVk
ZWYgQ29udGFpbmVyX3B0ciBfcHRyX3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwog
IHN0YXRpYyBfQ09SQkFfQm9vbGVhbiBpc19uaWwoX3B0cl90eXBlKTsKICBzdGF0aWMgdm9pZCBy
ZWxlYXNlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHZvaWQgZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAg
c3RhdGljIHNpemVfdCBOUF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGlj
IHZvaWQgbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3Rh
dGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0
aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKICBz
dGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYpOwp9OwoK
dHlwZWRlZiBfQ09SQkFfT2JqUmVmX1Zhcjxfb2JqcmVmX0NvbnRhaW5lciwgQ29udGFpbmVyX0hl
bHBlcj4gQ29udGFpbmVyX3ZhcjsKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX09VVF9hcmc8X29ianJl
Zl9Db250YWluZXIsQ29udGFpbmVyX0hlbHBlciA+IENvbnRhaW5lcl9vdXQ7CiMgMjYxICIuLi9v
bW5pT1JCMy9pcl9kZWZzLmhoIgpjbGFzcyBDb250YWluZWQgewpwdWJsaWM6CgogIHR5cGVkZWYg
Q29udGFpbmVkX3B0ciBfcHRyX3R5cGU7CiAgdHlwZWRlZiBDb250YWluZWRfdmFyIF92YXJfdHlw
ZTsKCiAgc3RhdGljIF9wdHJfdHlwZSBfZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgc3RhdGljIF9w
dHJfdHlwZSBfbmFycm93KENPUkJBOjpPYmplY3RfcHRyKTsKICBzdGF0aWMgX3B0cl90eXBlIF9u
aWwoKTsKCiAgc3RhdGljIGlubGluZSBzaXplX3QgX2FsaWduZWRTaXplKF9wdHJfdHlwZSwgc2l6
ZV90KTsKICBzdGF0aWMgaW5saW5lIHZvaWQgX21hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBOZXRC
dWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyBpbmxpbmUgdm9pZCBfbWFyc2hhbE9ialJlZihfcHRy
X3R5cGUsIE1lbUJ1ZmZlcmVkU3RyZWFtJik7CgogIHN0YXRpYyBpbmxpbmUgX3B0cl90eXBlIF91
bm1hcnNoYWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIENPUkJBOjpPYmplY3Rf
cHRyIG9iaiA9IENPUkJBOjpVbk1hcnNoYWxPYmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICBfcHRy
X3R5cGUgcmVzdWx0ID0gX25hcnJvdyhvYmopOwogICAgQ09SQkE6OnJlbGVhc2Uob2JqKTsKICAg
IHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgaW5saW5lIF9wdHJfdHlwZSBfdW5tYXJzaGFs
T2JqUmVmKE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmog
PSBDT1JCQTo6VW5NYXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMpOwogICAgX3B0cl90eXBlIHJl
c3VsdCA9IF9uYXJyb3cob2JqKTsKICAgIENPUkJBOjpyZWxlYXNlKG9iaik7CiAgICByZXR1cm4g
cmVzdWx0OwogIH0KCiAgc3RhdGljIGNvbnN0IGNoYXIqIF9QRF9yZXBvSWQ7CgoKICBzdHJ1Y3Qg
RGVzY3JpcHRpb24gewogICAgdHlwZWRlZiBfQ09SQkFfQ29uc3RyVHlwZV9WYXJpYWJsZV9WYXI8
RGVzY3JpcHRpb24+IF92YXJfdHlwZTsKCiAgICBEZWZpbml0aW9uS2luZCBraW5kOwoKICAgIENP
UkJBOjpBbnkgdmFsdWU7CgogICAgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3QgaW5pdGlh
bG9mZnNldCkgY29uc3Q7CiAgICB2b2lkIG9wZXJhdG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSAm
KSBjb25zdDsKICAgIHZvaWQgb3BlcmF0b3I8PD0gKE5ldEJ1ZmZlcmVkU3RyZWFtICYpOwogICAg
dm9pZCBvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0gJikgY29uc3Q7CiAgICB2b2lkIG9w
ZXJhdG9yPDw9IChNZW1CdWZmZXJlZFN0cmVhbSAmKTsKICB9OwoKICB0eXBlZGVmIERlc2NyaXB0
aW9uOjpfdmFyX3R5cGUgRGVzY3JpcHRpb25fdmFyOwoKICB0eXBlZGVmIF9DT1JCQV9Db25zdHJU
eXBlX1ZhcmlhYmxlX09VVF9hcmc8IERlc2NyaXB0aW9uLERlc2NyaXB0aW9uX3ZhciA+IERlc2Ny
aXB0aW9uX291dDsKCiAgc3RhdGljIGNvbnN0IENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0Rlc2Ny
aXB0aW9uOwoKfTsKCmNsYXNzIF9vYmpyZWZfQ29udGFpbmVkIDoKICBwdWJsaWMgdmlydHVhbCBf
b2JqcmVmX0lST2JqZWN0CnsKcHVibGljOgogIENvbnRhaW5lZDo6RGVzY3JpcHRpb24qIGRlc2Ny
aWJlKCk7CiAgdm9pZCBtb3ZlKENvbnRhaW5lcl9wdHIgbmV3X2NvbnRhaW5lciwgY29uc3QgY2hh
ciogbmV3X25hbWUsIGNvbnN0IGNoYXIqIG5ld192ZXJzaW9uKTsKCiAgY2hhciogaWQoKTsKICB2
b2lkIGlkKGNvbnN0IGNoYXIqKTsKICBjaGFyKiBuYW1lKCk7CiAgdm9pZCBuYW1lKGNvbnN0IGNo
YXIqKTsKICBjaGFyKiB2ZXJzaW9uKCk7CiAgdm9pZCB2ZXJzaW9uKGNvbnN0IGNoYXIqKTsKICBD
b250YWluZXJfcHRyIGRlZmluZWRfaW4oKTsKICBjaGFyKiBhYnNvbHV0ZV9uYW1lKCk7CiAgUmVw
b3NpdG9yeV9wdHIgY29udGFpbmluZ19yZXBvc2l0b3J5KCk7CgogIGlubGluZSBfb2JqcmVmX0Nv
bnRhaW5lZCgpIHsgX1BSX3NldG9iaigwKTsgfQogIF9vYmpyZWZfQ29udGFpbmVkKGNvbnN0IGNo
YXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0Kiwgb21uaUlkZW50aXR5Kiwgb21uaUxvY2FsSWRl
bnRpdHkqKTsKCnByb3RlY3RlZDoKICB2aXJ0dWFsIH5fb2JqcmVmX0NvbnRhaW5lZCgpOwoKcHJp
dmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9wdHJUb09ialJlZihjb25zdCBjaGFyKik7CgogIF9vYmpy
ZWZfQ29udGFpbmVkKGNvbnN0IF9vYmpyZWZfQ29udGFpbmVkJik7CiAgX29ianJlZl9Db250YWlu
ZWQmIG9wZXJhdG9yID0gKGNvbnN0IF9vYmpyZWZfQ29udGFpbmVkJik7Cgp9OwoKY2xhc3MgX3Bv
Zl9Db250YWluZWQgOiBwdWJsaWMgcHJveHlPYmplY3RGYWN0b3J5IHsKcHVibGljOgogIGlubGlu
ZSBfcG9mX0NvbnRhaW5lZCgpIDogcHJveHlPYmplY3RGYWN0b3J5KENvbnRhaW5lZDo6X1BEX3Jl
cG9JZCkge30KICB2aXJ0dWFsIH5fcG9mX0NvbnRhaW5lZCgpOwoKICB2aXJ0dWFsIG9tbmlPYmpS
ZWYqIG5ld09ialJlZihjb25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxlTGlzdCosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb21uaUlkZW50aXR5Kiwgb21uaUxvY2FsSWRlbnRp
dHkqKTsKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIGlzX2EoY29uc3QgY2hhciopIGNvbnN0Owp9
OwoKY2xhc3MgX2ltcGxfQ29udGFpbmVkIDoKICBwdWJsaWMgdmlydHVhbCBfaW1wbF9JUk9iamVj
dAp7CnB1YmxpYzoKICB2aXJ0dWFsIH5faW1wbF9Db250YWluZWQoKTsKCiAgdmlydHVhbCBDb250
YWluZWQ6OkRlc2NyaXB0aW9uKiBkZXNjcmliZSgpID0gMDsKICB2aXJ0dWFsIHZvaWQgbW92ZShD
b250YWluZXJfcHRyIG5ld19jb250YWluZXIsIGNvbnN0IGNoYXIqIG5ld19uYW1lLCBjb25zdCBj
aGFyKiBuZXdfdmVyc2lvbikgPSAwOwoKICB2aXJ0dWFsIGNoYXIqIGlkKCkgPSAwOwogIHZpcnR1
YWwgdm9pZCBpZChjb25zdCBjaGFyKikgPSAwOwogIHZpcnR1YWwgY2hhciogbmFtZSgpID0gMDsK
ICB2aXJ0dWFsIHZvaWQgbmFtZShjb25zdCBjaGFyKikgPSAwOwogIHZpcnR1YWwgY2hhciogdmVy
c2lvbigpID0gMDsKICB2aXJ0dWFsIHZvaWQgdmVyc2lvbihjb25zdCBjaGFyKikgPSAwOwogIHZp
cnR1YWwgQ29udGFpbmVyX3B0ciBkZWZpbmVkX2luKCkgPSAwOwogIHZpcnR1YWwgY2hhciogYWJz
b2x1dGVfbmFtZSgpID0gMDsKICB2aXJ0dWFsIFJlcG9zaXRvcnlfcHRyIGNvbnRhaW5pbmdfcmVw
b3NpdG9yeSgpID0gMDsKCnB1YmxpYzoKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIF9kaXNwYXRj
aChHSU9QX1MmKTsKCnByaXZhdGU6CiAgdmlydHVhbCB2b2lkKiBfcHRyVG9JbnRlcmZhY2UoY29u
c3QgY2hhciopOwogIHZpcnR1YWwgY29uc3QgY2hhciogX21vc3REZXJpdmVkUmVwb0lkKCk7Cn07
CgpleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfQ29udGFpbmVkOwoKCgoKY2xh
c3MgTW9kdWxlRGVmOwpjbGFzcyBfb2JqcmVmX01vZHVsZURlZjsKY2xhc3MgX2ltcGxfTW9kdWxl
RGVmOwoKdHlwZWRlZiBfb2JqcmVmX01vZHVsZURlZiogTW9kdWxlRGVmX3B0cjsKdHlwZWRlZiBN
b2R1bGVEZWZfcHRyIE1vZHVsZURlZlJlZjsKCmNsYXNzIE1vZHVsZURlZl9IZWxwZXIgewpwdWJs
aWM6CiAgdHlwZWRlZiBNb2R1bGVEZWZfcHRyIF9wdHJfdHlwZTsKCiAgc3RhdGljIF9wdHJfdHlw
ZSBfbmlsKCk7CiAgc3RhdGljIF9DT1JCQV9Cb29sZWFuIGlzX25pbChfcHRyX3R5cGUpOwogIHN0
YXRpYyB2b2lkIHJlbGVhc2UoX3B0cl90eXBlKTsKICBzdGF0aWMgdm9pZCBkdXBsaWNhdGUoX3B0
cl90eXBlKTsKICBzdGF0aWMgc2l6ZV90IE5QX2FsaWduZWRTaXplKF9wdHJfdHlwZSwgc2l6ZV90
KTsKICBzdGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJl
YW0mKTsKICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihOZXRCdWZmZXJlZFN0cmVh
bSYpOwogIHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0
cmVhbSYpOwogIHN0YXRpYyBfcHRyX3R5cGUgdW5tYXJzaGFsT2JqUmVmKE1lbUJ1ZmZlcmVkU3Ry
ZWFtJik7Cn07Cgp0eXBlZGVmIF9DT1JCQV9PYmpSZWZfVmFyPF9vYmpyZWZfTW9kdWxlRGVmLCBN
b2R1bGVEZWZfSGVscGVyPiBNb2R1bGVEZWZfdmFyOwp0eXBlZGVmIF9DT1JCQV9PYmpSZWZfT1VU
X2FyZzxfb2JqcmVmX01vZHVsZURlZixNb2R1bGVEZWZfSGVscGVyID4gTW9kdWxlRGVmX291dDsK
CgoKCgoKY2xhc3MgQ29uc3RhbnREZWY7CmNsYXNzIF9vYmpyZWZfQ29uc3RhbnREZWY7CmNsYXNz
IF9pbXBsX0NvbnN0YW50RGVmOwoKdHlwZWRlZiBfb2JqcmVmX0NvbnN0YW50RGVmKiBDb25zdGFu
dERlZl9wdHI7CnR5cGVkZWYgQ29uc3RhbnREZWZfcHRyIENvbnN0YW50RGVmUmVmOwoKY2xhc3Mg
Q29uc3RhbnREZWZfSGVscGVyIHsKcHVibGljOgogIHR5cGVkZWYgQ29uc3RhbnREZWZfcHRyIF9w
dHJfdHlwZTsKCiAgc3RhdGljIF9wdHJfdHlwZSBfbmlsKCk7CiAgc3RhdGljIF9DT1JCQV9Cb29s
ZWFuIGlzX25pbChfcHRyX3R5cGUpOwogIHN0YXRpYyB2b2lkIHJlbGVhc2UoX3B0cl90eXBlKTsK
ICBzdGF0aWMgdm9pZCBkdXBsaWNhdGUoX3B0cl90eXBlKTsKICBzdGF0aWMgc2l6ZV90IE5QX2Fs
aWduZWRTaXplKF9wdHJfdHlwZSwgc2l6ZV90KTsKICBzdGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVm
KF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBlIHVubWFy
c2hhbE9ialJlZihOZXRCdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpS
ZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyBfcHRyX3R5cGUgdW5t
YXJzaGFsT2JqUmVmKE1lbUJ1ZmZlcmVkU3RyZWFtJik7Cn07Cgp0eXBlZGVmIF9DT1JCQV9PYmpS
ZWZfVmFyPF9vYmpyZWZfQ29uc3RhbnREZWYsIENvbnN0YW50RGVmX0hlbHBlcj4gQ29uc3RhbnRE
ZWZfdmFyOwp0eXBlZGVmIF9DT1JCQV9PYmpSZWZfT1VUX2FyZzxfb2JqcmVmX0NvbnN0YW50RGVm
LENvbnN0YW50RGVmX0hlbHBlciA+IENvbnN0YW50RGVmX291dDsKIyA0NzcgIi4uL29tbmlPUkIz
L2lyX2RlZnMuaGgiCmNsYXNzIFN0cnVjdERlZjsKY2xhc3MgX29ianJlZl9TdHJ1Y3REZWY7CmNs
YXNzIF9pbXBsX1N0cnVjdERlZjsKCnR5cGVkZWYgX29ianJlZl9TdHJ1Y3REZWYqIFN0cnVjdERl
Zl9wdHI7CnR5cGVkZWYgU3RydWN0RGVmX3B0ciBTdHJ1Y3REZWZSZWY7CgpjbGFzcyBTdHJ1Y3RE
ZWZfSGVscGVyIHsKcHVibGljOgogIHR5cGVkZWYgU3RydWN0RGVmX3B0ciBfcHRyX3R5cGU7Cgog
IHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwogIHN0YXRpYyBfQ09SQkFfQm9vbGVhbiBpc19uaWwo
X3B0cl90eXBlKTsKICBzdGF0aWMgdm9pZCByZWxlYXNlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHZv
aWQgZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHNpemVfdCBOUF9hbGlnbmVkU2l6ZShf
cHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIHZvaWQgbWFyc2hhbE9ialJlZihfcHRyX3R5cGUs
IE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYo
TmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlw
ZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJl
ZihNZW1CdWZmZXJlZFN0cmVhbSYpOwp9OwoKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX1Zhcjxfb2Jq
cmVmX1N0cnVjdERlZiwgU3RydWN0RGVmX0hlbHBlcj4gU3RydWN0RGVmX3ZhcjsKdHlwZWRlZiBf
Q09SQkFfT2JqUmVmX09VVF9hcmc8X29ianJlZl9TdHJ1Y3REZWYsU3RydWN0RGVmX0hlbHBlciA+
IFN0cnVjdERlZl9vdXQ7CgoKCgoKCmNsYXNzIFVuaW9uRGVmOwpjbGFzcyBfb2JqcmVmX1VuaW9u
RGVmOwpjbGFzcyBfaW1wbF9VbmlvbkRlZjsKCnR5cGVkZWYgX29ianJlZl9VbmlvbkRlZiogVW5p
b25EZWZfcHRyOwp0eXBlZGVmIFVuaW9uRGVmX3B0ciBVbmlvbkRlZlJlZjsKCmNsYXNzIFVuaW9u
RGVmX0hlbHBlciB7CnB1YmxpYzoKICB0eXBlZGVmIFVuaW9uRGVmX3B0ciBfcHRyX3R5cGU7Cgog
IHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwogIHN0YXRpYyBfQ09SQkFfQm9vbGVhbiBpc19uaWwo
X3B0cl90eXBlKTsKICBzdGF0aWMgdm9pZCByZWxlYXNlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHZv
aWQgZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHNpemVfdCBOUF9hbGlnbmVkU2l6ZShf
cHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIHZvaWQgbWFyc2hhbE9ialJlZihfcHRyX3R5cGUs
IE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYo
TmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlw
ZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJl
ZihNZW1CdWZmZXJlZFN0cmVhbSYpOwp9OwoKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX1Zhcjxfb2Jq
cmVmX1VuaW9uRGVmLCBVbmlvbkRlZl9IZWxwZXI+IFVuaW9uRGVmX3ZhcjsKdHlwZWRlZiBfQ09S
QkFfT2JqUmVmX09VVF9hcmc8X29ianJlZl9VbmlvbkRlZixVbmlvbkRlZl9IZWxwZXIgPiBVbmlv
bkRlZl9vdXQ7CgoKCgoKCmNsYXNzIEVudW1EZWY7CmNsYXNzIF9vYmpyZWZfRW51bURlZjsKY2xh
c3MgX2ltcGxfRW51bURlZjsKCnR5cGVkZWYgX29ianJlZl9FbnVtRGVmKiBFbnVtRGVmX3B0cjsK
dHlwZWRlZiBFbnVtRGVmX3B0ciBFbnVtRGVmUmVmOwoKY2xhc3MgRW51bURlZl9IZWxwZXIgewpw
dWJsaWM6CiAgdHlwZWRlZiBFbnVtRGVmX3B0ciBfcHRyX3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5
cGUgX25pbCgpOwogIHN0YXRpYyBfQ09SQkFfQm9vbGVhbiBpc19uaWwoX3B0cl90eXBlKTsKICBz
dGF0aWMgdm9pZCByZWxlYXNlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHZvaWQgZHVwbGljYXRlKF9w
dHJfdHlwZSk7CiAgc3RhdGljIHNpemVfdCBOUF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVf
dCk7CiAgc3RhdGljIHZvaWQgbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1ZmZlcmVkU3Ry
ZWFtJik7CiAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJl
YW0mKTsKICBzdGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRT
dHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0
cmVhbSYpOwp9OwoKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX1Zhcjxfb2JqcmVmX0VudW1EZWYsIEVu
dW1EZWZfSGVscGVyPiBFbnVtRGVmX3ZhcjsKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX09VVF9hcmc8
X29ianJlZl9FbnVtRGVmLEVudW1EZWZfSGVscGVyID4gRW51bURlZl9vdXQ7CgoKCgoKCmNsYXNz
IEFsaWFzRGVmOwpjbGFzcyBfb2JqcmVmX0FsaWFzRGVmOwpjbGFzcyBfaW1wbF9BbGlhc0RlZjsK
CnR5cGVkZWYgX29ianJlZl9BbGlhc0RlZiogQWxpYXNEZWZfcHRyOwp0eXBlZGVmIEFsaWFzRGVm
X3B0ciBBbGlhc0RlZlJlZjsKCmNsYXNzIEFsaWFzRGVmX0hlbHBlciB7CnB1YmxpYzoKICB0eXBl
ZGVmIEFsaWFzRGVmX3B0ciBfcHRyX3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwog
IHN0YXRpYyBfQ09SQkFfQm9vbGVhbiBpc19uaWwoX3B0cl90eXBlKTsKICBzdGF0aWMgdm9pZCBy
ZWxlYXNlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHZvaWQgZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAg
c3RhdGljIHNpemVfdCBOUF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGlj
IHZvaWQgbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3Rh
dGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0
aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKICBz
dGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYpOwp9OwoK
dHlwZWRlZiBfQ09SQkFfT2JqUmVmX1Zhcjxfb2JqcmVmX0FsaWFzRGVmLCBBbGlhc0RlZl9IZWxw
ZXI+IEFsaWFzRGVmX3ZhcjsKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX09VVF9hcmc8X29ianJlZl9B
bGlhc0RlZixBbGlhc0RlZl9IZWxwZXIgPiBBbGlhc0RlZl9vdXQ7CgoKCgoKCmNsYXNzIEludGVy
ZmFjZURlZjsKY2xhc3MgX29ianJlZl9JbnRlcmZhY2VEZWY7CmNsYXNzIF9pbXBsX0ludGVyZmFj
ZURlZjsKCnR5cGVkZWYgX29ianJlZl9JbnRlcmZhY2VEZWYqIEludGVyZmFjZURlZl9wdHI7CnR5
cGVkZWYgSW50ZXJmYWNlRGVmX3B0ciBJbnRlcmZhY2VEZWZSZWY7CgpjbGFzcyBJbnRlcmZhY2VE
ZWZfSGVscGVyIHsKcHVibGljOgogIHR5cGVkZWYgSW50ZXJmYWNlRGVmX3B0ciBfcHRyX3R5cGU7
CgogIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwogIHN0YXRpYyBfQ09SQkFfQm9vbGVhbiBpc19u
aWwoX3B0cl90eXBlKTsKICBzdGF0aWMgdm9pZCByZWxlYXNlKF9wdHJfdHlwZSk7CiAgc3RhdGlj
IHZvaWQgZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHNpemVfdCBOUF9hbGlnbmVkU2l6
ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIHZvaWQgbWFyc2hhbE9ialJlZihfcHRyX3R5
cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpS
ZWYoTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJf
dHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9i
alJlZihNZW1CdWZmZXJlZFN0cmVhbSYpOwp9OwoKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX1Zhcjxf
b2JqcmVmX0ludGVyZmFjZURlZiwgSW50ZXJmYWNlRGVmX0hlbHBlcj4gSW50ZXJmYWNlRGVmX3Zh
cjsKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX09VVF9hcmc8X29ianJlZl9JbnRlcmZhY2VEZWYsSW50
ZXJmYWNlRGVmX0hlbHBlciA+IEludGVyZmFjZURlZl9vdXQ7CgoKCgoKCmNsYXNzIFZhbHVlRGVm
OwpjbGFzcyBfb2JqcmVmX1ZhbHVlRGVmOwpjbGFzcyBfaW1wbF9WYWx1ZURlZjsKCnR5cGVkZWYg
X29ianJlZl9WYWx1ZURlZiogVmFsdWVEZWZfcHRyOwp0eXBlZGVmIFZhbHVlRGVmX3B0ciBWYWx1
ZURlZlJlZjsKCmNsYXNzIFZhbHVlRGVmX0hlbHBlciB7CnB1YmxpYzoKICB0eXBlZGVmIFZhbHVl
RGVmX3B0ciBfcHRyX3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwogIHN0YXRpYyBf
Q09SQkFfQm9vbGVhbiBpc19uaWwoX3B0cl90eXBlKTsKICBzdGF0aWMgdm9pZCByZWxlYXNlKF9w
dHJfdHlwZSk7CiAgc3RhdGljIHZvaWQgZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHNp
emVfdCBOUF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIHZvaWQgbWFy
c2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIF9wdHJf
dHlwZSB1bm1hcnNoYWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgdm9pZCBt
YXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgX3B0
cl90eXBlIHVubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYpOwp9OwoKdHlwZWRlZiBf
Q09SQkFfT2JqUmVmX1Zhcjxfb2JqcmVmX1ZhbHVlRGVmLCBWYWx1ZURlZl9IZWxwZXI+IFZhbHVl
RGVmX3ZhcjsKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX09VVF9hcmc8X29ianJlZl9WYWx1ZURlZixW
YWx1ZURlZl9IZWxwZXIgPiBWYWx1ZURlZl9vdXQ7CgoKCgoKCmNsYXNzIFZhbHVlQm94RGVmOwpj
bGFzcyBfb2JqcmVmX1ZhbHVlQm94RGVmOwpjbGFzcyBfaW1wbF9WYWx1ZUJveERlZjsKCnR5cGVk
ZWYgX29ianJlZl9WYWx1ZUJveERlZiogVmFsdWVCb3hEZWZfcHRyOwp0eXBlZGVmIFZhbHVlQm94
RGVmX3B0ciBWYWx1ZUJveERlZlJlZjsKCmNsYXNzIFZhbHVlQm94RGVmX0hlbHBlciB7CnB1Ymxp
YzoKICB0eXBlZGVmIFZhbHVlQm94RGVmX3B0ciBfcHRyX3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5
cGUgX25pbCgpOwogIHN0YXRpYyBfQ09SQkFfQm9vbGVhbiBpc19uaWwoX3B0cl90eXBlKTsKICBz
dGF0aWMgdm9pZCByZWxlYXNlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHZvaWQgZHVwbGljYXRlKF9w
dHJfdHlwZSk7CiAgc3RhdGljIHNpemVfdCBOUF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVf
dCk7CiAgc3RhdGljIHZvaWQgbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1ZmZlcmVkU3Ry
ZWFtJik7CiAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJl
YW0mKTsKICBzdGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRT
dHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0
cmVhbSYpOwp9OwoKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX1Zhcjxfb2JqcmVmX1ZhbHVlQm94RGVm
LCBWYWx1ZUJveERlZl9IZWxwZXI+IFZhbHVlQm94RGVmX3ZhcjsKdHlwZWRlZiBfQ09SQkFfT2Jq
UmVmX09VVF9hcmc8X29ianJlZl9WYWx1ZUJveERlZixWYWx1ZUJveERlZl9IZWxwZXIgPiBWYWx1
ZUJveERlZl9vdXQ7CgoKCgoKCmNsYXNzIEV4Y2VwdGlvbkRlZjsKY2xhc3MgX29ianJlZl9FeGNl
cHRpb25EZWY7CmNsYXNzIF9pbXBsX0V4Y2VwdGlvbkRlZjsKCnR5cGVkZWYgX29ianJlZl9FeGNl
cHRpb25EZWYqIEV4Y2VwdGlvbkRlZl9wdHI7CnR5cGVkZWYgRXhjZXB0aW9uRGVmX3B0ciBFeGNl
cHRpb25EZWZSZWY7CgpjbGFzcyBFeGNlcHRpb25EZWZfSGVscGVyIHsKcHVibGljOgogIHR5cGVk
ZWYgRXhjZXB0aW9uRGVmX3B0ciBfcHRyX3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgp
OwogIHN0YXRpYyBfQ09SQkFfQm9vbGVhbiBpc19uaWwoX3B0cl90eXBlKTsKICBzdGF0aWMgdm9p
ZCByZWxlYXNlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHZvaWQgZHVwbGljYXRlKF9wdHJfdHlwZSk7
CiAgc3RhdGljIHNpemVfdCBOUF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgc3Rh
dGljIHZvaWQgbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAg
c3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBz
dGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsK
ICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYpOwp9
OwoKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX1Zhcjxfb2JqcmVmX0V4Y2VwdGlvbkRlZiwgRXhjZXB0
aW9uRGVmX0hlbHBlcj4gRXhjZXB0aW9uRGVmX3ZhcjsKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX09V
VF9hcmc8X29ianJlZl9FeGNlcHRpb25EZWYsRXhjZXB0aW9uRGVmX0hlbHBlciA+IEV4Y2VwdGlv
bkRlZl9vdXQ7CgoKCgoKCmNsYXNzIE5hdGl2ZURlZjsKY2xhc3MgX29ianJlZl9OYXRpdmVEZWY7
CmNsYXNzIF9pbXBsX05hdGl2ZURlZjsKCnR5cGVkZWYgX29ianJlZl9OYXRpdmVEZWYqIE5hdGl2
ZURlZl9wdHI7CnR5cGVkZWYgTmF0aXZlRGVmX3B0ciBOYXRpdmVEZWZSZWY7CgpjbGFzcyBOYXRp
dmVEZWZfSGVscGVyIHsKcHVibGljOgogIHR5cGVkZWYgTmF0aXZlRGVmX3B0ciBfcHRyX3R5cGU7
CgogIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwogIHN0YXRpYyBfQ09SQkFfQm9vbGVhbiBpc19u
aWwoX3B0cl90eXBlKTsKICBzdGF0aWMgdm9pZCByZWxlYXNlKF9wdHJfdHlwZSk7CiAgc3RhdGlj
IHZvaWQgZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHNpemVfdCBOUF9hbGlnbmVkU2l6
ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIHZvaWQgbWFyc2hhbE9ialJlZihfcHRyX3R5
cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpS
ZWYoTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJf
dHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9i
alJlZihNZW1CdWZmZXJlZFN0cmVhbSYpOwp9OwoKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX1Zhcjxf
b2JqcmVmX05hdGl2ZURlZiwgTmF0aXZlRGVmX0hlbHBlcj4gTmF0aXZlRGVmX3ZhcjsKdHlwZWRl
ZiBfQ09SQkFfT2JqUmVmX09VVF9hcmc8X29ianJlZl9OYXRpdmVEZWYsTmF0aXZlRGVmX0hlbHBl
ciA+IE5hdGl2ZURlZl9vdXQ7CgoKCgoKCmNsYXNzIEFic3RyYWN0SW50ZXJmYWNlRGVmOwpjbGFz
cyBfb2JqcmVmX0Fic3RyYWN0SW50ZXJmYWNlRGVmOwpjbGFzcyBfaW1wbF9BYnN0cmFjdEludGVy
ZmFjZURlZjsKCnR5cGVkZWYgX29ianJlZl9BYnN0cmFjdEludGVyZmFjZURlZiogQWJzdHJhY3RJ
bnRlcmZhY2VEZWZfcHRyOwp0eXBlZGVmIEFic3RyYWN0SW50ZXJmYWNlRGVmX3B0ciBBYnN0cmFj
dEludGVyZmFjZURlZlJlZjsKCmNsYXNzIEFic3RyYWN0SW50ZXJmYWNlRGVmX0hlbHBlciB7CnB1
YmxpYzoKICB0eXBlZGVmIEFic3RyYWN0SW50ZXJmYWNlRGVmX3B0ciBfcHRyX3R5cGU7CgogIHN0
YXRpYyBfcHRyX3R5cGUgX25pbCgpOwogIHN0YXRpYyBfQ09SQkFfQm9vbGVhbiBpc19uaWwoX3B0
cl90eXBlKTsKICBzdGF0aWMgdm9pZCByZWxlYXNlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHZvaWQg
ZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHNpemVfdCBOUF9hbGlnbmVkU2l6ZShfcHRy
X3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIHZvaWQgbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5l
dEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTmV0
QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwg
TWVtQnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihN
ZW1CdWZmZXJlZFN0cmVhbSYpOwp9OwoKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX1Zhcjxfb2JqcmVm
X0Fic3RyYWN0SW50ZXJmYWNlRGVmLCBBYnN0cmFjdEludGVyZmFjZURlZl9IZWxwZXI+IEFic3Ry
YWN0SW50ZXJmYWNlRGVmX3ZhcjsKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX09VVF9hcmc8X29ianJl
Zl9BYnN0cmFjdEludGVyZmFjZURlZixBYnN0cmFjdEludGVyZmFjZURlZl9IZWxwZXIgPiBBYnN0
cmFjdEludGVyZmFjZURlZl9vdXQ7CgoKCgoKCmNsYXNzIFdzdHJpbmdEZWY7CmNsYXNzIF9vYmpy
ZWZfV3N0cmluZ0RlZjsKY2xhc3MgX2ltcGxfV3N0cmluZ0RlZjsKCnR5cGVkZWYgX29ianJlZl9X
c3RyaW5nRGVmKiBXc3RyaW5nRGVmX3B0cjsKdHlwZWRlZiBXc3RyaW5nRGVmX3B0ciBXc3RyaW5n
RGVmUmVmOwoKY2xhc3MgV3N0cmluZ0RlZl9IZWxwZXIgewpwdWJsaWM6CiAgdHlwZWRlZiBXc3Ry
aW5nRGVmX3B0ciBfcHRyX3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwogIHN0YXRp
YyBfQ09SQkFfQm9vbGVhbiBpc19uaWwoX3B0cl90eXBlKTsKICBzdGF0aWMgdm9pZCByZWxlYXNl
KF9wdHJfdHlwZSk7CiAgc3RhdGljIHZvaWQgZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgc3RhdGlj
IHNpemVfdCBOUF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIHZvaWQg
bWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIF9w
dHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgdm9p
ZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMg
X3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYpOwp9OwoKdHlwZWRl
ZiBfQ09SQkFfT2JqUmVmX1Zhcjxfb2JqcmVmX1dzdHJpbmdEZWYsIFdzdHJpbmdEZWZfSGVscGVy
PiBXc3RyaW5nRGVmX3ZhcjsKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX09VVF9hcmc8X29ianJlZl9X
c3RyaW5nRGVmLFdzdHJpbmdEZWZfSGVscGVyID4gV3N0cmluZ0RlZl9vdXQ7CgoKCgoKCmNsYXNz
IEZpeGVkRGVmOwpjbGFzcyBfb2JqcmVmX0ZpeGVkRGVmOwpjbGFzcyBfaW1wbF9GaXhlZERlZjsK
CnR5cGVkZWYgX29ianJlZl9GaXhlZERlZiogRml4ZWREZWZfcHRyOwp0eXBlZGVmIEZpeGVkRGVm
X3B0ciBGaXhlZERlZlJlZjsKCmNsYXNzIEZpeGVkRGVmX0hlbHBlciB7CnB1YmxpYzoKICB0eXBl
ZGVmIEZpeGVkRGVmX3B0ciBfcHRyX3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwog
IHN0YXRpYyBfQ09SQkFfQm9vbGVhbiBpc19uaWwoX3B0cl90eXBlKTsKICBzdGF0aWMgdm9pZCBy
ZWxlYXNlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHZvaWQgZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAg
c3RhdGljIHNpemVfdCBOUF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGlj
IHZvaWQgbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3Rh
dGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0
aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKICBz
dGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYpOwp9OwoK
dHlwZWRlZiBfQ09SQkFfT2JqUmVmX1Zhcjxfb2JqcmVmX0ZpeGVkRGVmLCBGaXhlZERlZl9IZWxw
ZXI+IEZpeGVkRGVmX3ZhcjsKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX09VVF9hcmc8X29ianJlZl9G
aXhlZERlZixGaXhlZERlZl9IZWxwZXIgPiBGaXhlZERlZl9vdXQ7CgoKCmV4dGVybiBjb25zdCBD
T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19JbnRlcmZhY2VEZWZTZXE7CgpjbGFzcyBJbnRlcmZhY2VE
ZWZTZXFfdmFyOwoKY2xhc3MgSW50ZXJmYWNlRGVmU2VxIDogcHVibGljIF9DT1JCQV9VbmJvdW5k
ZWRfU2VxdWVuY2VfT2JqUmVmPCBfb2JqcmVmX0ludGVyZmFjZURlZiwgX0NPUkJBX09ialJlZl9F
bGVtZW50PCBfb2JqcmVmX0ludGVyZmFjZURlZiwgSW50ZXJmYWNlRGVmX0hlbHBlcj4gLCBJbnRl
cmZhY2VEZWZfSGVscGVyPiB7CnB1YmxpYzoKICB0eXBlZGVmIEludGVyZmFjZURlZlNlcV92YXIg
X3Zhcl90eXBlOwogIGlubGluZSBJbnRlcmZhY2VEZWZTZXEoKSB7fQogIGlubGluZSBJbnRlcmZh
Y2VEZWZTZXEoY29uc3QgSW50ZXJmYWNlRGVmU2VxJiBzKQogICAgOiBfQ09SQkFfVW5ib3VuZGVk
X1NlcXVlbmNlX09ialJlZjwgX29ianJlZl9JbnRlcmZhY2VEZWYsIF9DT1JCQV9PYmpSZWZfRWxl
bWVudDwgX29ianJlZl9JbnRlcmZhY2VEZWYsIEludGVyZmFjZURlZl9IZWxwZXI+ICwgSW50ZXJm
YWNlRGVmX0hlbHBlcj4gKHMpIHt9CgogIGlubGluZSBJbnRlcmZhY2VEZWZTZXEoX0NPUkJBX1VM
b25nIF9tYXgpCiAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfT2JqUmVmPCBfb2JqcmVm
X0ludGVyZmFjZURlZiwgX0NPUkJBX09ialJlZl9FbGVtZW50PCBfb2JqcmVmX0ludGVyZmFjZURl
ZiwgSW50ZXJmYWNlRGVmX0hlbHBlcj4gLCBJbnRlcmZhY2VEZWZfSGVscGVyPiAoX21heCkge30K
ICBpbmxpbmUgSW50ZXJmYWNlRGVmU2VxKF9DT1JCQV9VTG9uZyBfbWF4LCBfQ09SQkFfVUxvbmcg
X2xlbiwgSW50ZXJmYWNlRGVmX3B0ciogX3ZhbCwgX0NPUkJBX0Jvb2xlYW4gX3JlbD0wKQogICAg
OiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX09ialJlZjwgX29ianJlZl9JbnRlcmZhY2VEZWYs
IF9DT1JCQV9PYmpSZWZfRWxlbWVudDwgX29ianJlZl9JbnRlcmZhY2VEZWYsIEludGVyZmFjZURl
Zl9IZWxwZXI+ICwgSW50ZXJmYWNlRGVmX0hlbHBlcj4gKF9tYXgsIF9sZW4sIF92YWwsIF9yZWwp
IHt9CgogIGlubGluZSBJbnRlcmZhY2VEZWZTZXEmIG9wZXJhdG9yID0gKGNvbnN0IEludGVyZmFj
ZURlZlNlcSYgcykgewogICAgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9PYmpSZWY8IF9vYmpy
ZWZfSW50ZXJmYWNlRGVmLCBfQ09SQkFfT2JqUmVmX0VsZW1lbnQ8IF9vYmpyZWZfSW50ZXJmYWNl
RGVmLCBJbnRlcmZhY2VEZWZfSGVscGVyPiAsIEludGVyZmFjZURlZl9IZWxwZXI+IDo6b3BlcmF0
b3I9KHMpOwogICAgcmV0dXJuICp0aGlzOwogIH0KfTsKCmNsYXNzIEludGVyZmFjZURlZlNlcV9v
dXQ7CgpjbGFzcyBJbnRlcmZhY2VEZWZTZXFfdmFyIHsKcHVibGljOgogIHR5cGVkZWYgSW50ZXJm
YWNlRGVmU2VxIFQ7CiAgdHlwZWRlZiBJbnRlcmZhY2VEZWZTZXFfdmFyIFRfdmFyOwoKICBpbmxp
bmUgSW50ZXJmYWNlRGVmU2VxX3ZhcigpIDogX3BkX3NlcSgwKSB7fQogIGlubGluZSBJbnRlcmZh
Y2VEZWZTZXFfdmFyKFQqIHMpIDogX3BkX3NlcShzKSB7fQogIGlubGluZSBJbnRlcmZhY2VEZWZT
ZXFfdmFyKGNvbnN0IFRfdmFyJiBzKSB7CiAgICBpZiggcy5fcGRfc2VxICkgX3BkX3NlcSA9IG5l
dyBUKCpzLl9wZF9zZXEpOwogICAgZWxzZSBfcGRfc2VxID0gMDsKICB9CiAgaW5saW5lIH5JbnRl
cmZhY2VEZWZTZXFfdmFyKCkgeyBpZiggX3BkX3NlcSApIGRlbGV0ZSBfcGRfc2VxOyB9CgogIGlu
bGluZSBUX3ZhciYgb3BlcmF0b3IgPSAoVCogcykgewogICAgaWYoIF9wZF9zZXEgKSBkZWxldGUg
X3BkX3NlcTsKICAgIF9wZF9zZXEgPSBzOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbmxpbmUg
VF92YXImIG9wZXJhdG9yID0gKGNvbnN0IFRfdmFyJiBzKSB7CiAgICBpZiggcy5fcGRfc2VxICkg
ewogICAgICBpZiggIV9wZF9zZXEgKSBfcGRfc2VxID0gbmV3IFQ7CiAgICAgICpfcGRfc2VxID0g
KnMuX3BkX3NlcTsKICAgIH0gZWxzZSBpZiggX3BkX3NlcSApIHsKICAgICAgZGVsZXRlIF9wZF9z
ZXE7CiAgICAgIF9wZF9zZXEgPSAwOwogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5s
aW5lIF9DT1JCQV9PYmpSZWZfRWxlbWVudDwgX29ianJlZl9JbnRlcmZhY2VEZWYsIEludGVyZmFj
ZURlZl9IZWxwZXI+IG9wZXJhdG9yIFtdIChfQ09SQkFfVUxvbmcgcykgewogICAgcmV0dXJuICgq
X3BkX3NlcSlbc107CiAgfQoKICBpbmxpbmUgVCogb3BlcmF0b3IgLT4gKCkgeyByZXR1cm4gX3Bk
X3NlcTsgfQoKCgogIGlubGluZSBvcGVyYXRvciBjb25zdCBUJiAoKSBjb25zdCB7IHJldHVybiAq
X3BkX3NlcTsgfQogIGlubGluZSBvcGVyYXRvciBUJiAoKSB7IHJldHVybiAqX3BkX3NlcTsgfQoK
CiAgaW5saW5lIGNvbnN0IFQmIGluKCkgY29uc3QgeyByZXR1cm4gKl9wZF9zZXE7IH0KICBpbmxp
bmUgVCYgaW5vdXQoKSB7IHJldHVybiAqX3BkX3NlcTsgfQogIGlubGluZSBUKiYgb3V0KCkgewog
ICAgaWYoIF9wZF9zZXEgKSB7IGRlbGV0ZSBfcGRfc2VxOyBfcGRfc2VxID0gMDsgfQogICAgcmV0
dXJuIF9wZF9zZXE7CiAgfQogIGlubGluZSBUKiBfcmV0bigpIHsgVCogdG1wID0gX3BkX3NlcTsg
X3BkX3NlcSA9IDA7IHJldHVybiB0bXA7IH0KCiAgZnJpZW5kIGNsYXNzIEludGVyZmFjZURlZlNl
cV9vdXQ7Cgpwcml2YXRlOgogIFQqIF9wZF9zZXE7Cn07CgpjbGFzcyBJbnRlcmZhY2VEZWZTZXFf
b3V0IHsKcHVibGljOgogIHR5cGVkZWYgSW50ZXJmYWNlRGVmU2VxIFQ7CiAgdHlwZWRlZiBJbnRl
cmZhY2VEZWZTZXFfdmFyIFRfdmFyOwoKICBpbmxpbmUgSW50ZXJmYWNlRGVmU2VxX291dChUKiYg
cykgOiBfZGF0YShzKSB7IF9kYXRhID0gMDsgfQogIGlubGluZSBJbnRlcmZhY2VEZWZTZXFfb3V0
KFRfdmFyJiBzKQogICAgOiBfZGF0YShzLl9wZF9zZXEpIHsgcyA9IChUKikgMDsgfQogIGlubGlu
ZSBJbnRlcmZhY2VEZWZTZXFfb3V0KGNvbnN0IEludGVyZmFjZURlZlNlcV9vdXQmIHMpIDogX2Rh
dGEocy5fZGF0YSkge30KICBpbmxpbmUgSW50ZXJmYWNlRGVmU2VxX291dCYgb3BlcmF0b3IgPSAo
Y29uc3QgSW50ZXJmYWNlRGVmU2VxX291dCYgcykgewogICAgX2RhdGEgPSBzLl9kYXRhOwogICAg
cmV0dXJuICp0aGlzOwogIH0gaW5saW5lIEludGVyZmFjZURlZlNlcV9vdXQmIG9wZXJhdG9yID0g
KFQqIHMpIHsKICAgIF9kYXRhID0gczsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5saW5lIG9w
ZXJhdG9yIFQqJigpIHsgcmV0dXJuIF9kYXRhOyB9CiAgaW5saW5lIFQqJiBwdHIoKSB7IHJldHVy
biBfZGF0YTsgfQogIGlubGluZSBUKiBvcGVyYXRvci0+KCkgeyByZXR1cm4gX2RhdGE7IH0KCiAg
aW5saW5lIF9DT1JCQV9PYmpSZWZfRWxlbWVudDwgX29ianJlZl9JbnRlcmZhY2VEZWYsIEludGVy
ZmFjZURlZl9IZWxwZXI+IG9wZXJhdG9yIFtdIChfQ09SQkFfVUxvbmcgaSkgewogICAgcmV0dXJu
ICgqX2RhdGEpW2ldOwogIH0KCiAgVComIF9kYXRhOwoKcHJpdmF0ZToKICBJbnRlcmZhY2VEZWZT
ZXFfb3V0KCk7CiAgSW50ZXJmYWNlRGVmU2VxX291dCYgb3BlcmF0b3I9KGNvbnN0IFRfdmFyJik7
Cn07CgpleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVmFsdWVEZWZTZXE7Cgpj
bGFzcyBWYWx1ZURlZlNlcV92YXI7CgpjbGFzcyBWYWx1ZURlZlNlcSA6IHB1YmxpYyBfQ09SQkFf
VW5ib3VuZGVkX1NlcXVlbmNlX09ialJlZjwgX29ianJlZl9WYWx1ZURlZiwgX0NPUkJBX09ialJl
Zl9FbGVtZW50PCBfb2JqcmVmX1ZhbHVlRGVmLCBWYWx1ZURlZl9IZWxwZXI+ICwgVmFsdWVEZWZf
SGVscGVyPiB7CnB1YmxpYzoKICB0eXBlZGVmIFZhbHVlRGVmU2VxX3ZhciBfdmFyX3R5cGU7CiAg
aW5saW5lIFZhbHVlRGVmU2VxKCkge30KICBpbmxpbmUgVmFsdWVEZWZTZXEoY29uc3QgVmFsdWVE
ZWZTZXEmIHMpCiAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfT2JqUmVmPCBfb2JqcmVm
X1ZhbHVlRGVmLCBfQ09SQkFfT2JqUmVmX0VsZW1lbnQ8IF9vYmpyZWZfVmFsdWVEZWYsIFZhbHVl
RGVmX0hlbHBlcj4gLCBWYWx1ZURlZl9IZWxwZXI+IChzKSB7fQoKICBpbmxpbmUgVmFsdWVEZWZT
ZXEoX0NPUkJBX1VMb25nIF9tYXgpCiAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfT2Jq
UmVmPCBfb2JqcmVmX1ZhbHVlRGVmLCBfQ09SQkFfT2JqUmVmX0VsZW1lbnQ8IF9vYmpyZWZfVmFs
dWVEZWYsIFZhbHVlRGVmX0hlbHBlcj4gLCBWYWx1ZURlZl9IZWxwZXI+IChfbWF4KSB7fQogIGlu
bGluZSBWYWx1ZURlZlNlcShfQ09SQkFfVUxvbmcgX21heCwgX0NPUkJBX1VMb25nIF9sZW4sIFZh
bHVlRGVmX3B0ciogX3ZhbCwgX0NPUkJBX0Jvb2xlYW4gX3JlbD0wKQogICAgOiBfQ09SQkFfVW5i
b3VuZGVkX1NlcXVlbmNlX09ialJlZjwgX29ianJlZl9WYWx1ZURlZiwgX0NPUkJBX09ialJlZl9F
bGVtZW50PCBfb2JqcmVmX1ZhbHVlRGVmLCBWYWx1ZURlZl9IZWxwZXI+ICwgVmFsdWVEZWZfSGVs
cGVyPiAoX21heCwgX2xlbiwgX3ZhbCwgX3JlbCkge30KCiAgaW5saW5lIFZhbHVlRGVmU2VxJiBv
cGVyYXRvciA9IChjb25zdCBWYWx1ZURlZlNlcSYgcykgewogICAgX0NPUkJBX1VuYm91bmRlZF9T
ZXF1ZW5jZV9PYmpSZWY8IF9vYmpyZWZfVmFsdWVEZWYsIF9DT1JCQV9PYmpSZWZfRWxlbWVudDwg
X29ianJlZl9WYWx1ZURlZiwgVmFsdWVEZWZfSGVscGVyPiAsIFZhbHVlRGVmX0hlbHBlcj4gOjpv
cGVyYXRvcj0ocyk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQp9OwoKY2xhc3MgVmFsdWVEZWZTZXFf
b3V0OwoKY2xhc3MgVmFsdWVEZWZTZXFfdmFyIHsKcHVibGljOgogIHR5cGVkZWYgVmFsdWVEZWZT
ZXEgVDsKICB0eXBlZGVmIFZhbHVlRGVmU2VxX3ZhciBUX3ZhcjsKCiAgaW5saW5lIFZhbHVlRGVm
U2VxX3ZhcigpIDogX3BkX3NlcSgwKSB7fQogIGlubGluZSBWYWx1ZURlZlNlcV92YXIoVCogcykg
OiBfcGRfc2VxKHMpIHt9CiAgaW5saW5lIFZhbHVlRGVmU2VxX3Zhcihjb25zdCBUX3ZhciYgcykg
ewogICAgaWYoIHMuX3BkX3NlcSApIF9wZF9zZXEgPSBuZXcgVCgqcy5fcGRfc2VxKTsKICAgIGVs
c2UgX3BkX3NlcSA9IDA7CiAgfQogIGlubGluZSB+VmFsdWVEZWZTZXFfdmFyKCkgeyBpZiggX3Bk
X3NlcSApIGRlbGV0ZSBfcGRfc2VxOyB9CgogIGlubGluZSBUX3ZhciYgb3BlcmF0b3IgPSAoVCog
cykgewogICAgaWYoIF9wZF9zZXEgKSBkZWxldGUgX3BkX3NlcTsKICAgIF9wZF9zZXEgPSBzOwog
ICAgcmV0dXJuICp0aGlzOwogIH0KICBpbmxpbmUgVF92YXImIG9wZXJhdG9yID0gKGNvbnN0IFRf
dmFyJiBzKSB7CiAgICBpZiggcy5fcGRfc2VxICkgewogICAgICBpZiggIV9wZF9zZXEgKSBfcGRf
c2VxID0gbmV3IFQ7CiAgICAgICpfcGRfc2VxID0gKnMuX3BkX3NlcTsKICAgIH0gZWxzZSBpZigg
X3BkX3NlcSApIHsKICAgICAgZGVsZXRlIF9wZF9zZXE7CiAgICAgIF9wZF9zZXEgPSAwOwogICAg
fQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIF9DT1JCQV9PYmpSZWZfRWxlbWVudDwg
X29ianJlZl9WYWx1ZURlZiwgVmFsdWVEZWZfSGVscGVyPiBvcGVyYXRvciBbXSAoX0NPUkJBX1VM
b25nIHMpIHsKICAgIHJldHVybiAoKl9wZF9zZXEpW3NdOwogIH0KCiAgaW5saW5lIFQqIG9wZXJh
dG9yIC0+ICgpIHsgcmV0dXJuIF9wZF9zZXE7IH0KCgoKICBpbmxpbmUgb3BlcmF0b3IgY29uc3Qg
VCYgKCkgY29uc3QgeyByZXR1cm4gKl9wZF9zZXE7IH0KICBpbmxpbmUgb3BlcmF0b3IgVCYgKCkg
eyByZXR1cm4gKl9wZF9zZXE7IH0KCgogIGlubGluZSBjb25zdCBUJiBpbigpIGNvbnN0IHsgcmV0
dXJuICpfcGRfc2VxOyB9CiAgaW5saW5lIFQmIGlub3V0KCkgeyByZXR1cm4gKl9wZF9zZXE7IH0K
ICBpbmxpbmUgVComIG91dCgpIHsKICAgIGlmKCBfcGRfc2VxICkgeyBkZWxldGUgX3BkX3NlcTsg
X3BkX3NlcSA9IDA7IH0KICAgIHJldHVybiBfcGRfc2VxOwogIH0KICBpbmxpbmUgVCogX3JldG4o
KSB7IFQqIHRtcCA9IF9wZF9zZXE7IF9wZF9zZXEgPSAwOyByZXR1cm4gdG1wOyB9CgogIGZyaWVu
ZCBjbGFzcyBWYWx1ZURlZlNlcV9vdXQ7Cgpwcml2YXRlOgogIFQqIF9wZF9zZXE7Cn07CgpjbGFz
cyBWYWx1ZURlZlNlcV9vdXQgewpwdWJsaWM6CiAgdHlwZWRlZiBWYWx1ZURlZlNlcSBUOwogIHR5
cGVkZWYgVmFsdWVEZWZTZXFfdmFyIFRfdmFyOwoKICBpbmxpbmUgVmFsdWVEZWZTZXFfb3V0KFQq
JiBzKSA6IF9kYXRhKHMpIHsgX2RhdGEgPSAwOyB9CiAgaW5saW5lIFZhbHVlRGVmU2VxX291dChU
X3ZhciYgcykKICAgIDogX2RhdGEocy5fcGRfc2VxKSB7IHMgPSAoVCopIDA7IH0KICBpbmxpbmUg
VmFsdWVEZWZTZXFfb3V0KGNvbnN0IFZhbHVlRGVmU2VxX291dCYgcykgOiBfZGF0YShzLl9kYXRh
KSB7fQogIGlubGluZSBWYWx1ZURlZlNlcV9vdXQmIG9wZXJhdG9yID0gKGNvbnN0IFZhbHVlRGVm
U2VxX291dCYgcykgewogICAgX2RhdGEgPSBzLl9kYXRhOwogICAgcmV0dXJuICp0aGlzOwogIH0g
aW5saW5lIFZhbHVlRGVmU2VxX291dCYgb3BlcmF0b3IgPSAoVCogcykgewogICAgX2RhdGEgPSBz
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbmxpbmUgb3BlcmF0b3IgVComKCkgeyByZXR1cm4g
X2RhdGE7IH0KICBpbmxpbmUgVComIHB0cigpIHsgcmV0dXJuIF9kYXRhOyB9CiAgaW5saW5lIFQq
IG9wZXJhdG9yLT4oKSB7IHJldHVybiBfZGF0YTsgfQoKICBpbmxpbmUgX0NPUkJBX09ialJlZl9F
bGVtZW50PCBfb2JqcmVmX1ZhbHVlRGVmLCBWYWx1ZURlZl9IZWxwZXI+IG9wZXJhdG9yIFtdIChf
Q09SQkFfVUxvbmcgaSkgewogICAgcmV0dXJuICgqX2RhdGEpW2ldOwogIH0KCiAgVComIF9kYXRh
OwoKcHJpdmF0ZToKICBWYWx1ZURlZlNlcV9vdXQoKTsKICBWYWx1ZURlZlNlcV9vdXQmIG9wZXJh
dG9yPShjb25zdCBUX3ZhciYpOwp9OwoKZXh0ZXJuIGNvbnN0IENPUkJBOjpUeXBlQ29kZV9wdHIg
X3RjX0Fic3RyYWN0SW50ZXJmYWNlRGVmU2VxOwoKY2xhc3MgQWJzdHJhY3RJbnRlcmZhY2VEZWZT
ZXFfdmFyOwoKY2xhc3MgQWJzdHJhY3RJbnRlcmZhY2VEZWZTZXEgOiBwdWJsaWMgX0NPUkJBX1Vu
Ym91bmRlZF9TZXF1ZW5jZV9PYmpSZWY8IF9vYmpyZWZfQWJzdHJhY3RJbnRlcmZhY2VEZWYsIF9D
T1JCQV9PYmpSZWZfRWxlbWVudDwgX29ianJlZl9BYnN0cmFjdEludGVyZmFjZURlZiwgQWJzdHJh
Y3RJbnRlcmZhY2VEZWZfSGVscGVyPiAsIEFic3RyYWN0SW50ZXJmYWNlRGVmX0hlbHBlcj4gewpw
dWJsaWM6CiAgdHlwZWRlZiBBYnN0cmFjdEludGVyZmFjZURlZlNlcV92YXIgX3Zhcl90eXBlOwog
IGlubGluZSBBYnN0cmFjdEludGVyZmFjZURlZlNlcSgpIHt9CiAgaW5saW5lIEFic3RyYWN0SW50
ZXJmYWNlRGVmU2VxKGNvbnN0IEFic3RyYWN0SW50ZXJmYWNlRGVmU2VxJiBzKQogICAgOiBfQ09S
QkFfVW5ib3VuZGVkX1NlcXVlbmNlX09ialJlZjwgX29ianJlZl9BYnN0cmFjdEludGVyZmFjZURl
ZiwgX0NPUkJBX09ialJlZl9FbGVtZW50PCBfb2JqcmVmX0Fic3RyYWN0SW50ZXJmYWNlRGVmLCBB
YnN0cmFjdEludGVyZmFjZURlZl9IZWxwZXI+ICwgQWJzdHJhY3RJbnRlcmZhY2VEZWZfSGVscGVy
PiAocykge30KCiAgaW5saW5lIEFic3RyYWN0SW50ZXJmYWNlRGVmU2VxKF9DT1JCQV9VTG9uZyBf
bWF4KQogICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX09ialJlZjwgX29ianJlZl9BYnN0
cmFjdEludGVyZmFjZURlZiwgX0NPUkJBX09ialJlZl9FbGVtZW50PCBfb2JqcmVmX0Fic3RyYWN0
SW50ZXJmYWNlRGVmLCBBYnN0cmFjdEludGVyZmFjZURlZl9IZWxwZXI+ICwgQWJzdHJhY3RJbnRl
cmZhY2VEZWZfSGVscGVyPiAoX21heCkge30KICBpbmxpbmUgQWJzdHJhY3RJbnRlcmZhY2VEZWZT
ZXEoX0NPUkJBX1VMb25nIF9tYXgsIF9DT1JCQV9VTG9uZyBfbGVuLCBBYnN0cmFjdEludGVyZmFj
ZURlZl9wdHIqIF92YWwsIF9DT1JCQV9Cb29sZWFuIF9yZWw9MCkKICAgIDogX0NPUkJBX1VuYm91
bmRlZF9TZXF1ZW5jZV9PYmpSZWY8IF9vYmpyZWZfQWJzdHJhY3RJbnRlcmZhY2VEZWYsIF9DT1JC
QV9PYmpSZWZfRWxlbWVudDwgX29ianJlZl9BYnN0cmFjdEludGVyZmFjZURlZiwgQWJzdHJhY3RJ
bnRlcmZhY2VEZWZfSGVscGVyPiAsIEFic3RyYWN0SW50ZXJmYWNlRGVmX0hlbHBlcj4gKF9tYXgs
IF9sZW4sIF92YWwsIF9yZWwpIHt9CgogIGlubGluZSBBYnN0cmFjdEludGVyZmFjZURlZlNlcSYg
b3BlcmF0b3IgPSAoY29uc3QgQWJzdHJhY3RJbnRlcmZhY2VEZWZTZXEmIHMpIHsKICAgIF9DT1JC
QV9VbmJvdW5kZWRfU2VxdWVuY2VfT2JqUmVmPCBfb2JqcmVmX0Fic3RyYWN0SW50ZXJmYWNlRGVm
LCBfQ09SQkFfT2JqUmVmX0VsZW1lbnQ8IF9vYmpyZWZfQWJzdHJhY3RJbnRlcmZhY2VEZWYsIEFi
c3RyYWN0SW50ZXJmYWNlRGVmX0hlbHBlcj4gLCBBYnN0cmFjdEludGVyZmFjZURlZl9IZWxwZXI+
IDo6b3BlcmF0b3I9KHMpOwogICAgcmV0dXJuICp0aGlzOwogIH0KfTsKCmNsYXNzIEFic3RyYWN0
SW50ZXJmYWNlRGVmU2VxX291dDsKCmNsYXNzIEFic3RyYWN0SW50ZXJmYWNlRGVmU2VxX3ZhciB7
CnB1YmxpYzoKICB0eXBlZGVmIEFic3RyYWN0SW50ZXJmYWNlRGVmU2VxIFQ7CiAgdHlwZWRlZiBB
YnN0cmFjdEludGVyZmFjZURlZlNlcV92YXIgVF92YXI7CgogIGlubGluZSBBYnN0cmFjdEludGVy
ZmFjZURlZlNlcV92YXIoKSA6IF9wZF9zZXEoMCkge30KICBpbmxpbmUgQWJzdHJhY3RJbnRlcmZh
Y2VEZWZTZXFfdmFyKFQqIHMpIDogX3BkX3NlcShzKSB7fQogIGlubGluZSBBYnN0cmFjdEludGVy
ZmFjZURlZlNlcV92YXIoY29uc3QgVF92YXImIHMpIHsKICAgIGlmKCBzLl9wZF9zZXEgKSBfcGRf
c2VxID0gbmV3IFQoKnMuX3BkX3NlcSk7CiAgICBlbHNlIF9wZF9zZXEgPSAwOwogIH0KICBpbmxp
bmUgfkFic3RyYWN0SW50ZXJmYWNlRGVmU2VxX3ZhcigpIHsgaWYoIF9wZF9zZXEgKSBkZWxldGUg
X3BkX3NlcTsgfQoKICBpbmxpbmUgVF92YXImIG9wZXJhdG9yID0gKFQqIHMpIHsKICAgIGlmKCBf
cGRfc2VxICkgZGVsZXRlIF9wZF9zZXE7CiAgICBfcGRfc2VxID0gczsKICAgIHJldHVybiAqdGhp
czsKICB9CiAgaW5saW5lIFRfdmFyJiBvcGVyYXRvciA9IChjb25zdCBUX3ZhciYgcykgewogICAg
aWYoIHMuX3BkX3NlcSApIHsKICAgICAgaWYoICFfcGRfc2VxICkgX3BkX3NlcSA9IG5ldyBUOwog
ICAgICAqX3BkX3NlcSA9ICpzLl9wZF9zZXE7CiAgICB9IGVsc2UgaWYoIF9wZF9zZXEgKSB7CiAg
ICAgIGRlbGV0ZSBfcGRfc2VxOwogICAgICBfcGRfc2VxID0gMDsKICAgIH0KICAgIHJldHVybiAq
dGhpczsKICB9CgogIGlubGluZSBfQ09SQkFfT2JqUmVmX0VsZW1lbnQ8IF9vYmpyZWZfQWJzdHJh
Y3RJbnRlcmZhY2VEZWYsIEFic3RyYWN0SW50ZXJmYWNlRGVmX0hlbHBlcj4gb3BlcmF0b3IgW10g
KF9DT1JCQV9VTG9uZyBzKSB7CiAgICByZXR1cm4gKCpfcGRfc2VxKVtzXTsKICB9CgogIGlubGlu
ZSBUKiBvcGVyYXRvciAtPiAoKSB7IHJldHVybiBfcGRfc2VxOyB9CgoKCiAgaW5saW5lIG9wZXJh
dG9yIGNvbnN0IFQmICgpIGNvbnN0IHsgcmV0dXJuICpfcGRfc2VxOyB9CiAgaW5saW5lIG9wZXJh
dG9yIFQmICgpIHsgcmV0dXJuICpfcGRfc2VxOyB9CgoKICBpbmxpbmUgY29uc3QgVCYgaW4oKSBj
b25zdCB7IHJldHVybiAqX3BkX3NlcTsgfQogIGlubGluZSBUJiBpbm91dCgpIHsgcmV0dXJuICpf
cGRfc2VxOyB9CiAgaW5saW5lIFQqJiBvdXQoKSB7CiAgICBpZiggX3BkX3NlcSApIHsgZGVsZXRl
IF9wZF9zZXE7IF9wZF9zZXEgPSAwOyB9CiAgICByZXR1cm4gX3BkX3NlcTsKICB9CiAgaW5saW5l
IFQqIF9yZXRuKCkgeyBUKiB0bXAgPSBfcGRfc2VxOyBfcGRfc2VxID0gMDsgcmV0dXJuIHRtcDsg
fQoKICBmcmllbmQgY2xhc3MgQWJzdHJhY3RJbnRlcmZhY2VEZWZTZXFfb3V0OwoKcHJpdmF0ZToK
ICBUKiBfcGRfc2VxOwp9OwoKY2xhc3MgQWJzdHJhY3RJbnRlcmZhY2VEZWZTZXFfb3V0IHsKcHVi
bGljOgogIHR5cGVkZWYgQWJzdHJhY3RJbnRlcmZhY2VEZWZTZXEgVDsKICB0eXBlZGVmIEFic3Ry
YWN0SW50ZXJmYWNlRGVmU2VxX3ZhciBUX3ZhcjsKCiAgaW5saW5lIEFic3RyYWN0SW50ZXJmYWNl
RGVmU2VxX291dChUKiYgcykgOiBfZGF0YShzKSB7IF9kYXRhID0gMDsgfQogIGlubGluZSBBYnN0
cmFjdEludGVyZmFjZURlZlNlcV9vdXQoVF92YXImIHMpCiAgICA6IF9kYXRhKHMuX3BkX3NlcSkg
eyBzID0gKFQqKSAwOyB9CiAgaW5saW5lIEFic3RyYWN0SW50ZXJmYWNlRGVmU2VxX291dChjb25z
dCBBYnN0cmFjdEludGVyZmFjZURlZlNlcV9vdXQmIHMpIDogX2RhdGEocy5fZGF0YSkge30KICBp
bmxpbmUgQWJzdHJhY3RJbnRlcmZhY2VEZWZTZXFfb3V0JiBvcGVyYXRvciA9IChjb25zdCBBYnN0
cmFjdEludGVyZmFjZURlZlNlcV9vdXQmIHMpIHsKICAgIF9kYXRhID0gcy5fZGF0YTsKICAgIHJl
dHVybiAqdGhpczsKICB9IGlubGluZSBBYnN0cmFjdEludGVyZmFjZURlZlNlcV9vdXQmIG9wZXJh
dG9yID0gKFQqIHMpIHsKICAgIF9kYXRhID0gczsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5s
aW5lIG9wZXJhdG9yIFQqJigpIHsgcmV0dXJuIF9kYXRhOyB9CiAgaW5saW5lIFQqJiBwdHIoKSB7
IHJldHVybiBfZGF0YTsgfQogIGlubGluZSBUKiBvcGVyYXRvci0+KCkgeyByZXR1cm4gX2RhdGE7
IH0KCiAgaW5saW5lIF9DT1JCQV9PYmpSZWZfRWxlbWVudDwgX29ianJlZl9BYnN0cmFjdEludGVy
ZmFjZURlZiwgQWJzdHJhY3RJbnRlcmZhY2VEZWZfSGVscGVyPiBvcGVyYXRvciBbXSAoX0NPUkJB
X1VMb25nIGkpIHsKICAgIHJldHVybiAoKl9kYXRhKVtpXTsKICB9CgogIFQqJiBfZGF0YTsKCnBy
aXZhdGU6CiAgQWJzdHJhY3RJbnRlcmZhY2VEZWZTZXFfb3V0KCk7CiAgQWJzdHJhY3RJbnRlcmZh
Y2VEZWZTZXFfb3V0JiBvcGVyYXRvcj0oY29uc3QgVF92YXImKTsKfTsKCmV4dGVybiBjb25zdCBD
T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Db250YWluZWRTZXE7CgpjbGFzcyBDb250YWluZWRTZXFf
dmFyOwoKY2xhc3MgQ29udGFpbmVkU2VxIDogcHVibGljIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVu
Y2VfT2JqUmVmPCBfb2JqcmVmX0NvbnRhaW5lZCwgX0NPUkJBX09ialJlZl9FbGVtZW50PCBfb2Jq
cmVmX0NvbnRhaW5lZCwgQ29udGFpbmVkX0hlbHBlcj4gLCBDb250YWluZWRfSGVscGVyPiB7CnB1
YmxpYzoKICB0eXBlZGVmIENvbnRhaW5lZFNlcV92YXIgX3Zhcl90eXBlOwogIGlubGluZSBDb250
YWluZWRTZXEoKSB7fQogIGlubGluZSBDb250YWluZWRTZXEoY29uc3QgQ29udGFpbmVkU2VxJiBz
KQogICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX09ialJlZjwgX29ianJlZl9Db250YWlu
ZWQsIF9DT1JCQV9PYmpSZWZfRWxlbWVudDwgX29ianJlZl9Db250YWluZWQsIENvbnRhaW5lZF9I
ZWxwZXI+ICwgQ29udGFpbmVkX0hlbHBlcj4gKHMpIHt9CgogIGlubGluZSBDb250YWluZWRTZXEo
X0NPUkJBX1VMb25nIF9tYXgpCiAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfT2JqUmVm
PCBfb2JqcmVmX0NvbnRhaW5lZCwgX0NPUkJBX09ialJlZl9FbGVtZW50PCBfb2JqcmVmX0NvbnRh
aW5lZCwgQ29udGFpbmVkX0hlbHBlcj4gLCBDb250YWluZWRfSGVscGVyPiAoX21heCkge30KICBp
bmxpbmUgQ29udGFpbmVkU2VxKF9DT1JCQV9VTG9uZyBfbWF4LCBfQ09SQkFfVUxvbmcgX2xlbiwg
Q29udGFpbmVkX3B0ciogX3ZhbCwgX0NPUkJBX0Jvb2xlYW4gX3JlbD0wKQogICAgOiBfQ09SQkFf
VW5ib3VuZGVkX1NlcXVlbmNlX09ialJlZjwgX29ianJlZl9Db250YWluZWQsIF9DT1JCQV9PYmpS
ZWZfRWxlbWVudDwgX29ianJlZl9Db250YWluZWQsIENvbnRhaW5lZF9IZWxwZXI+ICwgQ29udGFp
bmVkX0hlbHBlcj4gKF9tYXgsIF9sZW4sIF92YWwsIF9yZWwpIHt9CgogIGlubGluZSBDb250YWlu
ZWRTZXEmIG9wZXJhdG9yID0gKGNvbnN0IENvbnRhaW5lZFNlcSYgcykgewogICAgX0NPUkJBX1Vu
Ym91bmRlZF9TZXF1ZW5jZV9PYmpSZWY8IF9vYmpyZWZfQ29udGFpbmVkLCBfQ09SQkFfT2JqUmVm
X0VsZW1lbnQ8IF9vYmpyZWZfQ29udGFpbmVkLCBDb250YWluZWRfSGVscGVyPiAsIENvbnRhaW5l
ZF9IZWxwZXI+IDo6b3BlcmF0b3I9KHMpOwogICAgcmV0dXJuICp0aGlzOwogIH0KfTsKCmNsYXNz
IENvbnRhaW5lZFNlcV9vdXQ7CgpjbGFzcyBDb250YWluZWRTZXFfdmFyIHsKcHVibGljOgogIHR5
cGVkZWYgQ29udGFpbmVkU2VxIFQ7CiAgdHlwZWRlZiBDb250YWluZWRTZXFfdmFyIFRfdmFyOwoK
ICBpbmxpbmUgQ29udGFpbmVkU2VxX3ZhcigpIDogX3BkX3NlcSgwKSB7fQogIGlubGluZSBDb250
YWluZWRTZXFfdmFyKFQqIHMpIDogX3BkX3NlcShzKSB7fQogIGlubGluZSBDb250YWluZWRTZXFf
dmFyKGNvbnN0IFRfdmFyJiBzKSB7CiAgICBpZiggcy5fcGRfc2VxICkgX3BkX3NlcSA9IG5ldyBU
KCpzLl9wZF9zZXEpOwogICAgZWxzZSBfcGRfc2VxID0gMDsKICB9CiAgaW5saW5lIH5Db250YWlu
ZWRTZXFfdmFyKCkgeyBpZiggX3BkX3NlcSApIGRlbGV0ZSBfcGRfc2VxOyB9CgogIGlubGluZSBU
X3ZhciYgb3BlcmF0b3IgPSAoVCogcykgewogICAgaWYoIF9wZF9zZXEgKSBkZWxldGUgX3BkX3Nl
cTsKICAgIF9wZF9zZXEgPSBzOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbmxpbmUgVF92YXIm
IG9wZXJhdG9yID0gKGNvbnN0IFRfdmFyJiBzKSB7CiAgICBpZiggcy5fcGRfc2VxICkgewogICAg
ICBpZiggIV9wZF9zZXEgKSBfcGRfc2VxID0gbmV3IFQ7CiAgICAgICpfcGRfc2VxID0gKnMuX3Bk
X3NlcTsKICAgIH0gZWxzZSBpZiggX3BkX3NlcSApIHsKICAgICAgZGVsZXRlIF9wZF9zZXE7CiAg
ICAgIF9wZF9zZXEgPSAwOwogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIF9D
T1JCQV9PYmpSZWZfRWxlbWVudDwgX29ianJlZl9Db250YWluZWQsIENvbnRhaW5lZF9IZWxwZXI+
IG9wZXJhdG9yIFtdIChfQ09SQkFfVUxvbmcgcykgewogICAgcmV0dXJuICgqX3BkX3NlcSlbc107
CiAgfQoKICBpbmxpbmUgVCogb3BlcmF0b3IgLT4gKCkgeyByZXR1cm4gX3BkX3NlcTsgfQoKCgog
IGlubGluZSBvcGVyYXRvciBjb25zdCBUJiAoKSBjb25zdCB7IHJldHVybiAqX3BkX3NlcTsgfQog
IGlubGluZSBvcGVyYXRvciBUJiAoKSB7IHJldHVybiAqX3BkX3NlcTsgfQoKCiAgaW5saW5lIGNv
bnN0IFQmIGluKCkgY29uc3QgeyByZXR1cm4gKl9wZF9zZXE7IH0KICBpbmxpbmUgVCYgaW5vdXQo
KSB7IHJldHVybiAqX3BkX3NlcTsgfQogIGlubGluZSBUKiYgb3V0KCkgewogICAgaWYoIF9wZF9z
ZXEgKSB7IGRlbGV0ZSBfcGRfc2VxOyBfcGRfc2VxID0gMDsgfQogICAgcmV0dXJuIF9wZF9zZXE7
CiAgfQogIGlubGluZSBUKiBfcmV0bigpIHsgVCogdG1wID0gX3BkX3NlcTsgX3BkX3NlcSA9IDA7
IHJldHVybiB0bXA7IH0KCiAgZnJpZW5kIGNsYXNzIENvbnRhaW5lZFNlcV9vdXQ7Cgpwcml2YXRl
OgogIFQqIF9wZF9zZXE7Cn07CgpjbGFzcyBDb250YWluZWRTZXFfb3V0IHsKcHVibGljOgogIHR5
cGVkZWYgQ29udGFpbmVkU2VxIFQ7CiAgdHlwZWRlZiBDb250YWluZWRTZXFfdmFyIFRfdmFyOwoK
ICBpbmxpbmUgQ29udGFpbmVkU2VxX291dChUKiYgcykgOiBfZGF0YShzKSB7IF9kYXRhID0gMDsg
fQogIGlubGluZSBDb250YWluZWRTZXFfb3V0KFRfdmFyJiBzKQogICAgOiBfZGF0YShzLl9wZF9z
ZXEpIHsgcyA9IChUKikgMDsgfQogIGlubGluZSBDb250YWluZWRTZXFfb3V0KGNvbnN0IENvbnRh
aW5lZFNlcV9vdXQmIHMpIDogX2RhdGEocy5fZGF0YSkge30KICBpbmxpbmUgQ29udGFpbmVkU2Vx
X291dCYgb3BlcmF0b3IgPSAoY29uc3QgQ29udGFpbmVkU2VxX291dCYgcykgewogICAgX2RhdGEg
PSBzLl9kYXRhOwogICAgcmV0dXJuICp0aGlzOwogIH0gaW5saW5lIENvbnRhaW5lZFNlcV9vdXQm
IG9wZXJhdG9yID0gKFQqIHMpIHsKICAgIF9kYXRhID0gczsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgaW5saW5lIG9wZXJhdG9yIFQqJigpIHsgcmV0dXJuIF9kYXRhOyB9CiAgaW5saW5lIFQqJiBw
dHIoKSB7IHJldHVybiBfZGF0YTsgfQogIGlubGluZSBUKiBvcGVyYXRvci0+KCkgeyByZXR1cm4g
X2RhdGE7IH0KCiAgaW5saW5lIF9DT1JCQV9PYmpSZWZfRWxlbWVudDwgX29ianJlZl9Db250YWlu
ZWQsIENvbnRhaW5lZF9IZWxwZXI+IG9wZXJhdG9yIFtdIChfQ09SQkFfVUxvbmcgaSkgewogICAg
cmV0dXJuICgqX2RhdGEpW2ldOwogIH0KCiAgVComIF9kYXRhOwoKcHJpdmF0ZToKICBDb250YWlu
ZWRTZXFfb3V0KCk7CiAgQ29udGFpbmVkU2VxX291dCYgb3BlcmF0b3I9KGNvbnN0IFRfdmFyJik7
Cn07CgpzdHJ1Y3QgSW5pdGlhbGl6ZXIgewogIHR5cGVkZWYgX0NPUkJBX0NvbnN0clR5cGVfVmFy
aWFibGVfVmFyPEluaXRpYWxpemVyPiBfdmFyX3R5cGU7CgogIFN0cnVjdE1lbWJlclNlcSBtZW1i
ZXJzOwoKICBDT1JCQTo6U3RyaW5nX21lbWJlciBuYW1lOwoKICBzaXplX3QgX05QX2FsaWduZWRT
aXplKHNpemVfdCBpbml0aWFsb2Zmc2V0KSBjb25zdDsKICB2b2lkIG9wZXJhdG9yPj49IChOZXRC
dWZmZXJlZFN0cmVhbSAmKSBjb25zdDsKICB2b2lkIG9wZXJhdG9yPDw9IChOZXRCdWZmZXJlZFN0
cmVhbSAmKTsKICB2b2lkIG9wZXJhdG9yPj49IChNZW1CdWZmZXJlZFN0cmVhbSAmKSBjb25zdDsK
ICB2b2lkIG9wZXJhdG9yPDw9IChNZW1CdWZmZXJlZFN0cmVhbSAmKTsKfTsKCnR5cGVkZWYgSW5p
dGlhbGl6ZXI6Ol92YXJfdHlwZSBJbml0aWFsaXplcl92YXI7Cgp0eXBlZGVmIF9DT1JCQV9Db25z
dHJUeXBlX1ZhcmlhYmxlX09VVF9hcmc8IEluaXRpYWxpemVyLEluaXRpYWxpemVyX3ZhciA+IElu
aXRpYWxpemVyX291dDsKCmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Jbml0
aWFsaXplcjsKCmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Jbml0aWFsaXpl
clNlcTsKCmNsYXNzIEluaXRpYWxpemVyU2VxX3ZhcjsKCmNsYXNzIEluaXRpYWxpemVyU2VxIDog
cHVibGljIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8IEluaXRpYWxpemVyPiB7CnB1YmxpYzoK
ICB0eXBlZGVmIEluaXRpYWxpemVyU2VxX3ZhciBfdmFyX3R5cGU7CiAgaW5saW5lIEluaXRpYWxp
emVyU2VxKCkge30KICBpbmxpbmUgSW5pdGlhbGl6ZXJTZXEoY29uc3QgSW5pdGlhbGl6ZXJTZXEm
IHMpCiAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8IEluaXRpYWxpemVyPiAocykge30K
CiAgaW5saW5lIEluaXRpYWxpemVyU2VxKF9DT1JCQV9VTG9uZyBfbWF4KQogICAgOiBfQ09SQkFf
VW5ib3VuZGVkX1NlcXVlbmNlPCBJbml0aWFsaXplcj4gKF9tYXgpIHt9CiAgaW5saW5lIEluaXRp
YWxpemVyU2VxKF9DT1JCQV9VTG9uZyBfbWF4LCBfQ09SQkFfVUxvbmcgX2xlbiwgSW5pdGlhbGl6
ZXIqIF92YWwsIF9DT1JCQV9Cb29sZWFuIF9yZWw9MCkKICAgIDogX0NPUkJBX1VuYm91bmRlZF9T
ZXF1ZW5jZTwgSW5pdGlhbGl6ZXI+IChfbWF4LCBfbGVuLCBfdmFsLCBfcmVsKSB7fQoKICBpbmxp
bmUgSW5pdGlhbGl6ZXJTZXEmIG9wZXJhdG9yID0gKGNvbnN0IEluaXRpYWxpemVyU2VxJiBzKSB7
CiAgICBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlPCBJbml0aWFsaXplcj4gOjpvcGVyYXRvcj0o
cyk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQp9OwoKY2xhc3MgSW5pdGlhbGl6ZXJTZXFfb3V0OwoK
Y2xhc3MgSW5pdGlhbGl6ZXJTZXFfdmFyIHsKcHVibGljOgogIHR5cGVkZWYgSW5pdGlhbGl6ZXJT
ZXEgVDsKICB0eXBlZGVmIEluaXRpYWxpemVyU2VxX3ZhciBUX3ZhcjsKCiAgaW5saW5lIEluaXRp
YWxpemVyU2VxX3ZhcigpIDogX3BkX3NlcSgwKSB7fQogIGlubGluZSBJbml0aWFsaXplclNlcV92
YXIoVCogcykgOiBfcGRfc2VxKHMpIHt9CiAgaW5saW5lIEluaXRpYWxpemVyU2VxX3Zhcihjb25z
dCBUX3ZhciYgcykgewogICAgaWYoIHMuX3BkX3NlcSApIF9wZF9zZXEgPSBuZXcgVCgqcy5fcGRf
c2VxKTsKICAgIGVsc2UgX3BkX3NlcSA9IDA7CiAgfQogIGlubGluZSB+SW5pdGlhbGl6ZXJTZXFf
dmFyKCkgeyBpZiggX3BkX3NlcSApIGRlbGV0ZSBfcGRfc2VxOyB9CgogIGlubGluZSBUX3ZhciYg
b3BlcmF0b3IgPSAoVCogcykgewogICAgaWYoIF9wZF9zZXEgKSBkZWxldGUgX3BkX3NlcTsKICAg
IF9wZF9zZXEgPSBzOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbmxpbmUgVF92YXImIG9wZXJh
dG9yID0gKGNvbnN0IFRfdmFyJiBzKSB7CiAgICBpZiggcy5fcGRfc2VxICkgewogICAgICBpZigg
IV9wZF9zZXEgKSBfcGRfc2VxID0gbmV3IFQ7CiAgICAgICpfcGRfc2VxID0gKnMuX3BkX3NlcTsK
ICAgIH0gZWxzZSBpZiggX3BkX3NlcSApIHsKICAgICAgZGVsZXRlIF9wZF9zZXE7CiAgICAgIF9w
ZF9zZXEgPSAwOwogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIEluaXRpYWxp
emVyJiBvcGVyYXRvciBbXSAoX0NPUkJBX1VMb25nIHMpIHsKICAgIHJldHVybiAoKl9wZF9zZXEp
W3NdOwogIH0KCiAgaW5saW5lIFQqIG9wZXJhdG9yIC0+ICgpIHsgcmV0dXJuIF9wZF9zZXE7IH0K
CgoKICBpbmxpbmUgb3BlcmF0b3IgY29uc3QgVCYgKCkgY29uc3QgeyByZXR1cm4gKl9wZF9zZXE7
IH0KICBpbmxpbmUgb3BlcmF0b3IgVCYgKCkgeyByZXR1cm4gKl9wZF9zZXE7IH0KCgogIGlubGlu
ZSBjb25zdCBUJiBpbigpIGNvbnN0IHsgcmV0dXJuICpfcGRfc2VxOyB9CiAgaW5saW5lIFQmIGlu
b3V0KCkgeyByZXR1cm4gKl9wZF9zZXE7IH0KICBpbmxpbmUgVComIG91dCgpIHsKICAgIGlmKCBf
cGRfc2VxICkgeyBkZWxldGUgX3BkX3NlcTsgX3BkX3NlcSA9IDA7IH0KICAgIHJldHVybiBfcGRf
c2VxOwogIH0KICBpbmxpbmUgVCogX3JldG4oKSB7IFQqIHRtcCA9IF9wZF9zZXE7IF9wZF9zZXEg
PSAwOyByZXR1cm4gdG1wOyB9CgogIGZyaWVuZCBjbGFzcyBJbml0aWFsaXplclNlcV9vdXQ7Cgpw
cml2YXRlOgogIFQqIF9wZF9zZXE7Cn07CgpjbGFzcyBJbml0aWFsaXplclNlcV9vdXQgewpwdWJs
aWM6CiAgdHlwZWRlZiBJbml0aWFsaXplclNlcSBUOwogIHR5cGVkZWYgSW5pdGlhbGl6ZXJTZXFf
dmFyIFRfdmFyOwoKICBpbmxpbmUgSW5pdGlhbGl6ZXJTZXFfb3V0KFQqJiBzKSA6IF9kYXRhKHMp
IHsgX2RhdGEgPSAwOyB9CiAgaW5saW5lIEluaXRpYWxpemVyU2VxX291dChUX3ZhciYgcykKICAg
IDogX2RhdGEocy5fcGRfc2VxKSB7IHMgPSAoVCopIDA7IH0KICBpbmxpbmUgSW5pdGlhbGl6ZXJT
ZXFfb3V0KGNvbnN0IEluaXRpYWxpemVyU2VxX291dCYgcykgOiBfZGF0YShzLl9kYXRhKSB7fQog
IGlubGluZSBJbml0aWFsaXplclNlcV9vdXQmIG9wZXJhdG9yID0gKGNvbnN0IEluaXRpYWxpemVy
U2VxX291dCYgcykgewogICAgX2RhdGEgPSBzLl9kYXRhOwogICAgcmV0dXJuICp0aGlzOwogIH0g
aW5saW5lIEluaXRpYWxpemVyU2VxX291dCYgb3BlcmF0b3IgPSAoVCogcykgewogICAgX2RhdGEg
PSBzOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbmxpbmUgb3BlcmF0b3IgVComKCkgeyByZXR1
cm4gX2RhdGE7IH0KICBpbmxpbmUgVComIHB0cigpIHsgcmV0dXJuIF9kYXRhOyB9CiAgaW5saW5l
IFQqIG9wZXJhdG9yLT4oKSB7IHJldHVybiBfZGF0YTsgfQoKICBpbmxpbmUgSW5pdGlhbGl6ZXIm
IG9wZXJhdG9yIFtdIChfQ09SQkFfVUxvbmcgaSkgewogICAgcmV0dXJuICgqX2RhdGEpW2ldOwog
IH0KCiAgVComIF9kYXRhOwoKcHJpdmF0ZToKICBJbml0aWFsaXplclNlcV9vdXQoKTsKICBJbml0
aWFsaXplclNlcV9vdXQmIG9wZXJhdG9yPShjb25zdCBUX3ZhciYpOwp9OwojIDE0MzQgIi4uL29t
bmlPUkIzL2lyX2RlZnMuaGgiCmNsYXNzIENvbnRhaW5lciB7CnB1YmxpYzoKCiAgdHlwZWRlZiBD
b250YWluZXJfcHRyIF9wdHJfdHlwZTsKICB0eXBlZGVmIENvbnRhaW5lcl92YXIgX3Zhcl90eXBl
OwoKICBzdGF0aWMgX3B0cl90eXBlIF9kdXBsaWNhdGUoX3B0cl90eXBlKTsKICBzdGF0aWMgX3B0
cl90eXBlIF9uYXJyb3coQ09SQkE6Ok9iamVjdF9wdHIpOwogIHN0YXRpYyBfcHRyX3R5cGUgX25p
bCgpOwoKICBzdGF0aWMgaW5saW5lIHNpemVfdCBfYWxpZ25lZFNpemUoX3B0cl90eXBlLCBzaXpl
X3QpOwogIHN0YXRpYyBpbmxpbmUgdm9pZCBfbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1
ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJf
dHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKCiAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3Vu
bWFyc2hhbE9ialJlZihOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgQ09SQkE6Ok9iamVjdF9w
dHIgb2JqID0gQ09SQkE6OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBzKTsKICAgIF9wdHJf
dHlwZSByZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAg
cmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBpbmxpbmUgX3B0cl90eXBlIF91bm1hcnNoYWxP
YmpSZWYoTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiA9
IENPUkJBOjpVbk1hcnNoYWxPYmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICBfcHRyX3R5cGUgcmVz
dWx0ID0gX25hcnJvdyhvYmopOwogICAgQ09SQkE6OnJlbGVhc2Uob2JqKTsKICAgIHJldHVybiBy
ZXN1bHQ7CiAgfQoKICBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsKCgogIHN0cnVjdCBE
ZXNjcmlwdGlvbiB7CiAgICB0eXBlZGVmIF9DT1JCQV9Db25zdHJUeXBlX1ZhcmlhYmxlX1ZhcjxE
ZXNjcmlwdGlvbj4gX3Zhcl90eXBlOwoKICAgIF9DT1JCQV9PYmpSZWZfTWVtYmVyPCBfb2JqcmVm
X0NvbnRhaW5lZCwgQ29udGFpbmVkX0hlbHBlcj4gY29udGFpbmVkX29iamVjdDsKCiAgICBEZWZp
bml0aW9uS2luZCBraW5kOwoKICAgIENPUkJBOjpBbnkgdmFsdWU7CgogICAgc2l6ZV90IF9OUF9h
bGlnbmVkU2l6ZShzaXplX3QgaW5pdGlhbG9mZnNldCkgY29uc3Q7CiAgICB2b2lkIG9wZXJhdG9y
Pj49IChOZXRCdWZmZXJlZFN0cmVhbSAmKSBjb25zdDsKICAgIHZvaWQgb3BlcmF0b3I8PD0gKE5l
dEJ1ZmZlcmVkU3RyZWFtICYpOwogICAgdm9pZCBvcGVyYXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJl
YW0gJikgY29uc3Q7CiAgICB2b2lkIG9wZXJhdG9yPDw9IChNZW1CdWZmZXJlZFN0cmVhbSAmKTsK
ICB9OwoKICB0eXBlZGVmIERlc2NyaXB0aW9uOjpfdmFyX3R5cGUgRGVzY3JpcHRpb25fdmFyOwoK
ICB0eXBlZGVmIF9DT1JCQV9Db25zdHJUeXBlX1ZhcmlhYmxlX09VVF9hcmc8IERlc2NyaXB0aW9u
LERlc2NyaXB0aW9uX3ZhciA+IERlc2NyaXB0aW9uX291dDsKCiAgc3RhdGljIGNvbnN0IENPUkJB
OjpUeXBlQ29kZV9wdHIgX3RjX0Rlc2NyaXB0aW9uOwoKICBzdGF0aWMgY29uc3QgQ09SQkE6OlR5
cGVDb2RlX3B0ciBfdGNfRGVzY3JpcHRpb25TZXE7CgogIGNsYXNzIERlc2NyaXB0aW9uU2VxX3Zh
cjsKCiAgY2xhc3MgRGVzY3JpcHRpb25TZXEgOiBwdWJsaWMgX0NPUkJBX1VuYm91bmRlZF9TZXF1
ZW5jZTwgRGVzY3JpcHRpb24+IHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIERlc2NyaXB0aW9uU2Vx
X3ZhciBfdmFyX3R5cGU7CiAgICBpbmxpbmUgRGVzY3JpcHRpb25TZXEoKSB7fQogICAgaW5saW5l
IERlc2NyaXB0aW9uU2VxKGNvbnN0IERlc2NyaXB0aW9uU2VxJiBzKQogICAgICA6IF9DT1JCQV9V
bmJvdW5kZWRfU2VxdWVuY2U8IERlc2NyaXB0aW9uPiAocykge30KCiAgICBpbmxpbmUgRGVzY3Jp
cHRpb25TZXEoX0NPUkJBX1VMb25nIF9tYXgpCiAgICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1
ZW5jZTwgRGVzY3JpcHRpb24+IChfbWF4KSB7fQogICAgaW5saW5lIERlc2NyaXB0aW9uU2VxKF9D
T1JCQV9VTG9uZyBfbWF4LCBfQ09SQkFfVUxvbmcgX2xlbiwgRGVzY3JpcHRpb24qIF92YWwsIF9D
T1JCQV9Cb29sZWFuIF9yZWw9MCkKICAgICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlPCBE
ZXNjcmlwdGlvbj4gKF9tYXgsIF9sZW4sIF92YWwsIF9yZWwpIHt9CgogICAgaW5saW5lIERlc2Ny
aXB0aW9uU2VxJiBvcGVyYXRvciA9IChjb25zdCBEZXNjcmlwdGlvblNlcSYgcykgewogICAgICBf
Q09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlPCBEZXNjcmlwdGlvbj4gOjpvcGVyYXRvcj0ocyk7CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KICB9OwoKICBjbGFzcyBEZXNjcmlwdGlvblNlcV9vdXQ7
CgogIGNsYXNzIERlc2NyaXB0aW9uU2VxX3ZhciB7CiAgcHVibGljOgogICAgdHlwZWRlZiBEZXNj
cmlwdGlvblNlcSBUOwogICAgdHlwZWRlZiBEZXNjcmlwdGlvblNlcV92YXIgVF92YXI7CgogICAg
aW5saW5lIERlc2NyaXB0aW9uU2VxX3ZhcigpIDogX3BkX3NlcSgwKSB7fQogICAgaW5saW5lIERl
c2NyaXB0aW9uU2VxX3ZhcihUKiBzKSA6IF9wZF9zZXEocykge30KICAgIGlubGluZSBEZXNjcmlw
dGlvblNlcV92YXIoY29uc3QgVF92YXImIHMpIHsKICAgICAgaWYoIHMuX3BkX3NlcSApIF9wZF9z
ZXEgPSBuZXcgVCgqcy5fcGRfc2VxKTsKICAgICAgZWxzZSBfcGRfc2VxID0gMDsKICAgIH0KICAg
IGlubGluZSB+RGVzY3JpcHRpb25TZXFfdmFyKCkgeyBpZiggX3BkX3NlcSApIGRlbGV0ZSBfcGRf
c2VxOyB9CgogICAgaW5saW5lIFRfdmFyJiBvcGVyYXRvciA9IChUKiBzKSB7CiAgICAgIGlmKCBf
cGRfc2VxICkgZGVsZXRlIF9wZF9zZXE7CiAgICAgIF9wZF9zZXEgPSBzOwogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CiAgICBpbmxpbmUgVF92YXImIG9wZXJhdG9yID0gKGNvbnN0IFRfdmFyJiBz
KSB7CiAgICAgIGlmKCBzLl9wZF9zZXEgKSB7CiAgICAgICAgaWYoICFfcGRfc2VxICkgX3BkX3Nl
cSA9IG5ldyBUOwogICAgICAgICpfcGRfc2VxID0gKnMuX3BkX3NlcTsKICAgICAgfSBlbHNlIGlm
KCBfcGRfc2VxICkgewogICAgICAgIGRlbGV0ZSBfcGRfc2VxOwogICAgICAgIF9wZF9zZXEgPSAw
OwogICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBpbmxpbmUgRGVzY3JpcHRp
b24mIG9wZXJhdG9yIFtdIChfQ09SQkFfVUxvbmcgcykgewogICAgICByZXR1cm4gKCpfcGRfc2Vx
KVtzXTsKICAgIH0KCiAgICBpbmxpbmUgVCogb3BlcmF0b3IgLT4gKCkgeyByZXR1cm4gX3BkX3Nl
cTsgfQoKCgogICAgaW5saW5lIG9wZXJhdG9yIGNvbnN0IFQmICgpIGNvbnN0IHsgcmV0dXJuICpf
cGRfc2VxOyB9CiAgICBpbmxpbmUgb3BlcmF0b3IgVCYgKCkgeyByZXR1cm4gKl9wZF9zZXE7IH0K
CgogICAgaW5saW5lIGNvbnN0IFQmIGluKCkgY29uc3QgeyByZXR1cm4gKl9wZF9zZXE7IH0KICAg
IGlubGluZSBUJiBpbm91dCgpIHsgcmV0dXJuICpfcGRfc2VxOyB9CiAgICBpbmxpbmUgVComIG91
dCgpIHsKICAgICAgaWYoIF9wZF9zZXEgKSB7IGRlbGV0ZSBfcGRfc2VxOyBfcGRfc2VxID0gMDsg
fQogICAgICByZXR1cm4gX3BkX3NlcTsKICAgIH0KICAgIGlubGluZSBUKiBfcmV0bigpIHsgVCog
dG1wID0gX3BkX3NlcTsgX3BkX3NlcSA9IDA7IHJldHVybiB0bXA7IH0KCiAgICBmcmllbmQgY2xh
c3MgRGVzY3JpcHRpb25TZXFfb3V0OwoKICBwcml2YXRlOgogICAgVCogX3BkX3NlcTsKICB9OwoK
ICBjbGFzcyBEZXNjcmlwdGlvblNlcV9vdXQgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgRGVzY3Jp
cHRpb25TZXEgVDsKICAgIHR5cGVkZWYgRGVzY3JpcHRpb25TZXFfdmFyIFRfdmFyOwoKICAgIGlu
bGluZSBEZXNjcmlwdGlvblNlcV9vdXQoVComIHMpIDogX2RhdGEocykgeyBfZGF0YSA9IDA7IH0K
ICAgIGlubGluZSBEZXNjcmlwdGlvblNlcV9vdXQoVF92YXImIHMpCiAgICAgIDogX2RhdGEocy5f
cGRfc2VxKSB7IHMgPSAoVCopIDA7IH0KICAgIGlubGluZSBEZXNjcmlwdGlvblNlcV9vdXQoY29u
c3QgRGVzY3JpcHRpb25TZXFfb3V0JiBzKSA6IF9kYXRhKHMuX2RhdGEpIHt9CiAgICBpbmxpbmUg
RGVzY3JpcHRpb25TZXFfb3V0JiBvcGVyYXRvciA9IChjb25zdCBEZXNjcmlwdGlvblNlcV9vdXQm
IHMpIHsKICAgICAgX2RhdGEgPSBzLl9kYXRhOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9IGlu
bGluZSBEZXNjcmlwdGlvblNlcV9vdXQmIG9wZXJhdG9yID0gKFQqIHMpIHsKICAgICAgX2RhdGEg
PSBzOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICBpbmxpbmUgb3BlcmF0b3IgVComKCkg
eyByZXR1cm4gX2RhdGE7IH0KICAgIGlubGluZSBUKiYgcHRyKCkgeyByZXR1cm4gX2RhdGE7IH0K
ICAgIGlubGluZSBUKiBvcGVyYXRvci0+KCkgeyByZXR1cm4gX2RhdGE7IH0KCiAgICBpbmxpbmUg
RGVzY3JpcHRpb24mIG9wZXJhdG9yIFtdIChfQ09SQkFfVUxvbmcgaSkgewogICAgICByZXR1cm4g
KCpfZGF0YSlbaV07CiAgICB9CgogICAgVComIF9kYXRhOwoKICBwcml2YXRlOgogICAgRGVzY3Jp
cHRpb25TZXFfb3V0KCk7CiAgICBEZXNjcmlwdGlvblNlcV9vdXQmIG9wZXJhdG9yPShjb25zdCBU
X3ZhciYpOwogIH07Cgp9OwoKY2xhc3MgX29ianJlZl9Db250YWluZXIgOgogIHB1YmxpYyB2aXJ0
dWFsIF9vYmpyZWZfSVJPYmplY3QKewpwdWJsaWM6CiAgQ29udGFpbmVkX3B0ciBsb29rdXAoY29u
c3QgY2hhciogc2VhcmNoX25hbWUpOwogIENvbnRhaW5lZFNlcSogY29udGVudHMoRGVmaW5pdGlv
bktpbmQgbGltaXRfdHlwZSwgQ09SQkE6OkJvb2xlYW4gZXhjbHVkZV9pbmhlcml0ZWQpOwogIENv
bnRhaW5lZFNlcSogbG9va3VwX25hbWUoY29uc3QgY2hhciogc2VhcmNoX25hbWUsIENPUkJBOjpM
b25nIGxldmVsc190b19zZWFyY2gsIERlZmluaXRpb25LaW5kIGxpbWl0X3R5cGUsIENPUkJBOjpC
b29sZWFuIGV4Y2x1ZGVfaW5oZXJpdGVkKTsKICBDb250YWluZXI6OkRlc2NyaXB0aW9uU2VxKiBk
ZXNjcmliZV9jb250ZW50cyhEZWZpbml0aW9uS2luZCBsaW1pdF90eXBlLCBDT1JCQTo6Qm9vbGVh
biBleGNsdWRlX2luaGVyaXRlZCwgQ09SQkE6OkxvbmcgbWF4X3JldHVybmVkX29ianMpOwogIE1v
ZHVsZURlZl9wdHIgY3JlYXRlX21vZHVsZShjb25zdCBjaGFyKiBpZCwgY29uc3QgY2hhciogbmFt
ZSwgY29uc3QgY2hhciogdmVyc2lvbik7CiAgQ29uc3RhbnREZWZfcHRyIGNyZWF0ZV9jb25zdGFu
dChjb25zdCBjaGFyKiBpZCwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmVyc2lvbiwg
SURMVHlwZV9wdHIgdHlwZSwgY29uc3QgQ09SQkE6OkFueSYgdmFsdWUpOwogIFN0cnVjdERlZl9w
dHIgY3JlYXRlX3N0cnVjdChjb25zdCBjaGFyKiBpZCwgY29uc3QgY2hhciogbmFtZSwgY29uc3Qg
Y2hhciogdmVyc2lvbiwgY29uc3QgU3RydWN0TWVtYmVyU2VxJiBtZW1iZXJzKTsKICBVbmlvbkRl
Zl9wdHIgY3JlYXRlX3VuaW9uKGNvbnN0IGNoYXIqIGlkLCBjb25zdCBjaGFyKiBuYW1lLCBjb25z
dCBjaGFyKiB2ZXJzaW9uLCBJRExUeXBlX3B0ciBkaXNjcmltaW5hdG9yX3R5cGUsIGNvbnN0IFVu
aW9uTWVtYmVyU2VxJiBtZW1iZXJzKTsKICBFbnVtRGVmX3B0ciBjcmVhdGVfZW51bShjb25zdCBj
aGFyKiBpZCwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmVyc2lvbiwgY29uc3QgRW51
bU1lbWJlclNlcSYgbWVtYmVycyk7CiAgQWxpYXNEZWZfcHRyIGNyZWF0ZV9hbGlhcyhjb25zdCBj
aGFyKiBpZCwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmVyc2lvbiwgSURMVHlwZV9w
dHIgb3JpZ2luYWxfdHlwZSk7CiAgSW50ZXJmYWNlRGVmX3B0ciBjcmVhdGVfaW50ZXJmYWNlKGNv
bnN0IGNoYXIqIGlkLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2ZXJzaW9uLCBjb25z
dCBJbnRlcmZhY2VEZWZTZXEmIGJhc2VfaW50ZXJmYWNlcyk7CiAgVmFsdWVEZWZfcHRyIGNyZWF0
ZV92YWx1ZShjb25zdCBjaGFyKiBpZCwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmVy
c2lvbiwgQ09SQkE6OkJvb2xlYW4gaXNfY3VzdG9tLCBDT1JCQTo6Qm9vbGVhbiBpc19hYnN0cmFj
dCwgVmFsdWVEZWZfcHRyIGJhc2VfdmFsdWUsIENPUkJBOjpCb29sZWFuIGlzX3RydW5jYXRhYmxl
LCBjb25zdCBWYWx1ZURlZlNlcSYgYWJzdHJhY3RfYmFzZV92YWx1ZXMsIGNvbnN0IEludGVyZmFj
ZURlZlNlcSYgc3VwcG9ydGVkX2ludGVyZmFjZXMsIGNvbnN0IEluaXRpYWxpemVyU2VxJiBpbml0
aWFsaXplcnMpOwogIFZhbHVlQm94RGVmX3B0ciBjcmVhdGVfdmFsdWVfYm94KGNvbnN0IGNoYXIq
IGlkLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2ZXJzaW9uLCBJRExUeXBlX3B0ciBv
cmlnaW5hbF90eXBlX2RlZik7CiAgRXhjZXB0aW9uRGVmX3B0ciBjcmVhdGVfZXhjZXB0aW9uKGNv
bnN0IGNoYXIqIGlkLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2ZXJzaW9uLCBjb25z
dCBTdHJ1Y3RNZW1iZXJTZXEmIG1lbWJlcnMpOwogIE5hdGl2ZURlZl9wdHIgY3JlYXRlX25hdGl2
ZShjb25zdCBjaGFyKiBpZCwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmVyc2lvbik7
CiAgQWJzdHJhY3RJbnRlcmZhY2VEZWZfcHRyIGNyZWF0ZV9hYnN0cmFjdF9pbnRlcmZhY2UoY29u
c3QgY2hhciogaWQsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZlcnNpb24sIGNvbnN0
IEFic3RyYWN0SW50ZXJmYWNlRGVmU2VxJiBiYXNlX2ludGVyZmFjZXMpOwoKICBpbmxpbmUgX29i
anJlZl9Db250YWluZXIoKSB7IF9QUl9zZXRvYmooMCk7IH0KICBfb2JqcmVmX0NvbnRhaW5lcihj
b25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxlTGlzdCosIG9tbmlJZGVudGl0eSosIG9tbmlM
b2NhbElkZW50aXR5Kik7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCB+X29ianJlZl9Db250YWluZXIo
KTsKCnByaXZhdGU6CiAgdmlydHVhbCB2b2lkKiBfcHRyVG9PYmpSZWYoY29uc3QgY2hhciopOwoK
ICBfb2JqcmVmX0NvbnRhaW5lcihjb25zdCBfb2JqcmVmX0NvbnRhaW5lciYpOwogIF9vYmpyZWZf
Q29udGFpbmVyJiBvcGVyYXRvciA9IChjb25zdCBfb2JqcmVmX0NvbnRhaW5lciYpOwoKfTsKCmNs
YXNzIF9wb2ZfQ29udGFpbmVyIDogcHVibGljIHByb3h5T2JqZWN0RmFjdG9yeSB7CnB1YmxpYzoK
ICBpbmxpbmUgX3BvZl9Db250YWluZXIoKSA6IHByb3h5T2JqZWN0RmFjdG9yeShDb250YWluZXI6
Ol9QRF9yZXBvSWQpIHt9CiAgdmlydHVhbCB+X3BvZl9Db250YWluZXIoKTsKCiAgdmlydHVhbCBv
bW5pT2JqUmVmKiBuZXdPYmpSZWYoY29uc3QgY2hhciosIElPUDo6VGFnZ2VkUHJvZmlsZUxpc3Qq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9tbmlJZGVudGl0eSosIG9tbmlMb2Nh
bElkZW50aXR5Kik7CiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBpc19hKGNvbnN0IGNoYXIqKSBj
b25zdDsKfTsKCmNsYXNzIF9pbXBsX0NvbnRhaW5lciA6CiAgcHVibGljIHZpcnR1YWwgX2ltcGxf
SVJPYmplY3QKewpwdWJsaWM6CiAgdmlydHVhbCB+X2ltcGxfQ29udGFpbmVyKCk7CgogIHZpcnR1
YWwgQ29udGFpbmVkX3B0ciBsb29rdXAoY29uc3QgY2hhciogc2VhcmNoX25hbWUpID0gMDsKICB2
aXJ0dWFsIENvbnRhaW5lZFNlcSogY29udGVudHMoRGVmaW5pdGlvbktpbmQgbGltaXRfdHlwZSwg
Q09SQkE6OkJvb2xlYW4gZXhjbHVkZV9pbmhlcml0ZWQpID0gMDsKICB2aXJ0dWFsIENvbnRhaW5l
ZFNlcSogbG9va3VwX25hbWUoY29uc3QgY2hhciogc2VhcmNoX25hbWUsIENPUkJBOjpMb25nIGxl
dmVsc190b19zZWFyY2gsIERlZmluaXRpb25LaW5kIGxpbWl0X3R5cGUsIENPUkJBOjpCb29sZWFu
IGV4Y2x1ZGVfaW5oZXJpdGVkKSA9IDA7CiAgdmlydHVhbCBDb250YWluZXI6OkRlc2NyaXB0aW9u
U2VxKiBkZXNjcmliZV9jb250ZW50cyhEZWZpbml0aW9uS2luZCBsaW1pdF90eXBlLCBDT1JCQTo6
Qm9vbGVhbiBleGNsdWRlX2luaGVyaXRlZCwgQ09SQkE6OkxvbmcgbWF4X3JldHVybmVkX29ianMp
ID0gMDsKICB2aXJ0dWFsIE1vZHVsZURlZl9wdHIgY3JlYXRlX21vZHVsZShjb25zdCBjaGFyKiBp
ZCwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmVyc2lvbikgPSAwOwogIHZpcnR1YWwg
Q29uc3RhbnREZWZfcHRyIGNyZWF0ZV9jb25zdGFudChjb25zdCBjaGFyKiBpZCwgY29uc3QgY2hh
ciogbmFtZSwgY29uc3QgY2hhciogdmVyc2lvbiwgSURMVHlwZV9wdHIgdHlwZSwgY29uc3QgQ09S
QkE6OkFueSYgdmFsdWUpID0gMDsKICB2aXJ0dWFsIFN0cnVjdERlZl9wdHIgY3JlYXRlX3N0cnVj
dChjb25zdCBjaGFyKiBpZCwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmVyc2lvbiwg
Y29uc3QgU3RydWN0TWVtYmVyU2VxJiBtZW1iZXJzKSA9IDA7CiAgdmlydHVhbCBVbmlvbkRlZl9w
dHIgY3JlYXRlX3VuaW9uKGNvbnN0IGNoYXIqIGlkLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBj
aGFyKiB2ZXJzaW9uLCBJRExUeXBlX3B0ciBkaXNjcmltaW5hdG9yX3R5cGUsIGNvbnN0IFVuaW9u
TWVtYmVyU2VxJiBtZW1iZXJzKSA9IDA7CiAgdmlydHVhbCBFbnVtRGVmX3B0ciBjcmVhdGVfZW51
bShjb25zdCBjaGFyKiBpZCwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmVyc2lvbiwg
Y29uc3QgRW51bU1lbWJlclNlcSYgbWVtYmVycykgPSAwOwogIHZpcnR1YWwgQWxpYXNEZWZfcHRy
IGNyZWF0ZV9hbGlhcyhjb25zdCBjaGFyKiBpZCwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hh
ciogdmVyc2lvbiwgSURMVHlwZV9wdHIgb3JpZ2luYWxfdHlwZSkgPSAwOwogIHZpcnR1YWwgSW50
ZXJmYWNlRGVmX3B0ciBjcmVhdGVfaW50ZXJmYWNlKGNvbnN0IGNoYXIqIGlkLCBjb25zdCBjaGFy
KiBuYW1lLCBjb25zdCBjaGFyKiB2ZXJzaW9uLCBjb25zdCBJbnRlcmZhY2VEZWZTZXEmIGJhc2Vf
aW50ZXJmYWNlcykgPSAwOwogIHZpcnR1YWwgVmFsdWVEZWZfcHRyIGNyZWF0ZV92YWx1ZShjb25z
dCBjaGFyKiBpZCwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmVyc2lvbiwgQ09SQkE6
OkJvb2xlYW4gaXNfY3VzdG9tLCBDT1JCQTo6Qm9vbGVhbiBpc19hYnN0cmFjdCwgVmFsdWVEZWZf
cHRyIGJhc2VfdmFsdWUsIENPUkJBOjpCb29sZWFuIGlzX3RydW5jYXRhYmxlLCBjb25zdCBWYWx1
ZURlZlNlcSYgYWJzdHJhY3RfYmFzZV92YWx1ZXMsIGNvbnN0IEludGVyZmFjZURlZlNlcSYgc3Vw
cG9ydGVkX2ludGVyZmFjZXMsIGNvbnN0IEluaXRpYWxpemVyU2VxJiBpbml0aWFsaXplcnMpID0g
MDsKICB2aXJ0dWFsIFZhbHVlQm94RGVmX3B0ciBjcmVhdGVfdmFsdWVfYm94KGNvbnN0IGNoYXIq
IGlkLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2ZXJzaW9uLCBJRExUeXBlX3B0ciBv
cmlnaW5hbF90eXBlX2RlZikgPSAwOwogIHZpcnR1YWwgRXhjZXB0aW9uRGVmX3B0ciBjcmVhdGVf
ZXhjZXB0aW9uKGNvbnN0IGNoYXIqIGlkLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2
ZXJzaW9uLCBjb25zdCBTdHJ1Y3RNZW1iZXJTZXEmIG1lbWJlcnMpID0gMDsKICB2aXJ0dWFsIE5h
dGl2ZURlZl9wdHIgY3JlYXRlX25hdGl2ZShjb25zdCBjaGFyKiBpZCwgY29uc3QgY2hhciogbmFt
ZSwgY29uc3QgY2hhciogdmVyc2lvbikgPSAwOwogIHZpcnR1YWwgQWJzdHJhY3RJbnRlcmZhY2VE
ZWZfcHRyIGNyZWF0ZV9hYnN0cmFjdF9pbnRlcmZhY2UoY29uc3QgY2hhciogaWQsIGNvbnN0IGNo
YXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZlcnNpb24sIGNvbnN0IEFic3RyYWN0SW50ZXJmYWNlRGVm
U2VxJiBiYXNlX2ludGVyZmFjZXMpID0gMDsKCnB1YmxpYzoKICB2aXJ0dWFsIF9DT1JCQV9Cb29s
ZWFuIF9kaXNwYXRjaChHSU9QX1MmKTsKCnByaXZhdGU6CiAgdmlydHVhbCB2b2lkKiBfcHRyVG9J
bnRlcmZhY2UoY29uc3QgY2hhciopOwogIHZpcnR1YWwgY29uc3QgY2hhciogX21vc3REZXJpdmVk
UmVwb0lkKCk7Cn07CgpleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfQ29udGFp
bmVyOwojIDE3MDcgIi4uL29tbmlPUkIzL2lyX2RlZnMuaGgiCmNsYXNzIElETFR5cGUgewpwdWJs
aWM6CgogIHR5cGVkZWYgSURMVHlwZV9wdHIgX3B0cl90eXBlOwogIHR5cGVkZWYgSURMVHlwZV92
YXIgX3Zhcl90eXBlOwoKICBzdGF0aWMgX3B0cl90eXBlIF9kdXBsaWNhdGUoX3B0cl90eXBlKTsK
ICBzdGF0aWMgX3B0cl90eXBlIF9uYXJyb3coQ09SQkE6Ok9iamVjdF9wdHIpOwogIHN0YXRpYyBf
cHRyX3R5cGUgX25pbCgpOwoKICBzdGF0aWMgaW5saW5lIHNpemVfdCBfYWxpZ25lZFNpemUoX3B0
cl90eXBlLCBzaXplX3QpOwogIHN0YXRpYyBpbmxpbmUgdm9pZCBfbWFyc2hhbE9ialJlZihfcHRy
X3R5cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFs
T2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKCiAgc3RhdGljIGlubGluZSBf
cHRyX3R5cGUgX3VubWFyc2hhbE9ialJlZihOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgQ09S
QkE6Ok9iamVjdF9wdHIgb2JqID0gQ09SQkE6OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBz
KTsKICAgIF9wdHJfdHlwZSByZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICBDT1JCQTo6cmVsZWFz
ZShvYmopOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBpbmxpbmUgX3B0cl90eXBl
IF91bm1hcnNoYWxPYmpSZWYoTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIENPUkJBOjpPYmpl
Y3RfcHRyIG9iaiA9IENPUkJBOjpVbk1hcnNoYWxPYmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICBf
cHRyX3R5cGUgcmVzdWx0ID0gX25hcnJvdyhvYmopOwogICAgQ09SQkE6OnJlbGVhc2Uob2JqKTsK
ICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsK
CgoKfTsKCmNsYXNzIF9vYmpyZWZfSURMVHlwZSA6CiAgcHVibGljIHZpcnR1YWwgX29ianJlZl9J
Uk9iamVjdAp7CnB1YmxpYzoKCiAgQ09SQkE6OlR5cGVDb2RlX3B0ciB0eXBlKCk7CgogIGlubGlu
ZSBfb2JqcmVmX0lETFR5cGUoKSB7IF9QUl9zZXRvYmooMCk7IH0KICBfb2JqcmVmX0lETFR5cGUo
Y29uc3QgY2hhciosIElPUDo6VGFnZ2VkUHJvZmlsZUxpc3QqLCBvbW5pSWRlbnRpdHkqLCBvbW5p
TG9jYWxJZGVudGl0eSopOwoKcHJvdGVjdGVkOgogIHZpcnR1YWwgfl9vYmpyZWZfSURMVHlwZSgp
OwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9wdHJUb09ialJlZihjb25zdCBjaGFyKik7Cgog
IF9vYmpyZWZfSURMVHlwZShjb25zdCBfb2JqcmVmX0lETFR5cGUmKTsKICBfb2JqcmVmX0lETFR5
cGUmIG9wZXJhdG9yID0gKGNvbnN0IF9vYmpyZWZfSURMVHlwZSYpOwoKfTsKCmNsYXNzIF9wb2Zf
SURMVHlwZSA6IHB1YmxpYyBwcm94eU9iamVjdEZhY3RvcnkgewpwdWJsaWM6CiAgaW5saW5lIF9w
b2ZfSURMVHlwZSgpIDogcHJveHlPYmplY3RGYWN0b3J5KElETFR5cGU6Ol9QRF9yZXBvSWQpIHt9
CiAgdmlydHVhbCB+X3BvZl9JRExUeXBlKCk7CgogIHZpcnR1YWwgb21uaU9ialJlZiogbmV3T2Jq
UmVmKGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0KiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvbW5pSWRlbnRpdHkqLCBvbW5pTG9jYWxJZGVudGl0eSopOwogIHZp
cnR1YWwgX0NPUkJBX0Jvb2xlYW4gaXNfYShjb25zdCBjaGFyKikgY29uc3Q7Cn07CgpjbGFzcyBf
aW1wbF9JRExUeXBlIDoKICBwdWJsaWMgdmlydHVhbCBfaW1wbF9JUk9iamVjdAp7CnB1YmxpYzoK
ICB2aXJ0dWFsIH5faW1wbF9JRExUeXBlKCk7CgogIHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0
ciB0eXBlKCkgPSAwOwoKcHVibGljOgogIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gX2Rpc3BhdGNo
KEdJT1BfUyYpOwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9wdHJUb0ludGVyZmFjZShjb25z
dCBjaGFyKik7CiAgdmlydHVhbCBjb25zdCBjaGFyKiBfbW9zdERlcml2ZWRSZXBvSWQoKTsKfTsK
CmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19JRExUeXBlOwoKCgoKY2xhc3Mg
UHJpbWl0aXZlRGVmOwpjbGFzcyBfb2JqcmVmX1ByaW1pdGl2ZURlZjsKY2xhc3MgX2ltcGxfUHJp
bWl0aXZlRGVmOwoKdHlwZWRlZiBfb2JqcmVmX1ByaW1pdGl2ZURlZiogUHJpbWl0aXZlRGVmX3B0
cjsKdHlwZWRlZiBQcmltaXRpdmVEZWZfcHRyIFByaW1pdGl2ZURlZlJlZjsKCmNsYXNzIFByaW1p
dGl2ZURlZl9IZWxwZXIgewpwdWJsaWM6CiAgdHlwZWRlZiBQcmltaXRpdmVEZWZfcHRyIF9wdHJf
dHlwZTsKCiAgc3RhdGljIF9wdHJfdHlwZSBfbmlsKCk7CiAgc3RhdGljIF9DT1JCQV9Cb29sZWFu
IGlzX25pbChfcHRyX3R5cGUpOwogIHN0YXRpYyB2b2lkIHJlbGVhc2UoX3B0cl90eXBlKTsKICBz
dGF0aWMgdm9pZCBkdXBsaWNhdGUoX3B0cl90eXBlKTsKICBzdGF0aWMgc2l6ZV90IE5QX2FsaWdu
ZWRTaXplKF9wdHJfdHlwZSwgc2l6ZV90KTsKICBzdGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9w
dHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hh
bE9ialJlZihOZXRCdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYo
X3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyBfcHRyX3R5cGUgdW5tYXJz
aGFsT2JqUmVmKE1lbUJ1ZmZlcmVkU3RyZWFtJik7Cn07Cgp0eXBlZGVmIF9DT1JCQV9PYmpSZWZf
VmFyPF9vYmpyZWZfUHJpbWl0aXZlRGVmLCBQcmltaXRpdmVEZWZfSGVscGVyPiBQcmltaXRpdmVE
ZWZfdmFyOwp0eXBlZGVmIF9DT1JCQV9PYmpSZWZfT1VUX2FyZzxfb2JqcmVmX1ByaW1pdGl2ZURl
ZixQcmltaXRpdmVEZWZfSGVscGVyID4gUHJpbWl0aXZlRGVmX291dDsKCgoKCgoKY2xhc3MgU3Ry
aW5nRGVmOwpjbGFzcyBfb2JqcmVmX1N0cmluZ0RlZjsKY2xhc3MgX2ltcGxfU3RyaW5nRGVmOwoK
dHlwZWRlZiBfb2JqcmVmX1N0cmluZ0RlZiogU3RyaW5nRGVmX3B0cjsKdHlwZWRlZiBTdHJpbmdE
ZWZfcHRyIFN0cmluZ0RlZlJlZjsKCmNsYXNzIFN0cmluZ0RlZl9IZWxwZXIgewpwdWJsaWM6CiAg
dHlwZWRlZiBTdHJpbmdEZWZfcHRyIF9wdHJfdHlwZTsKCiAgc3RhdGljIF9wdHJfdHlwZSBfbmls
KCk7CiAgc3RhdGljIF9DT1JCQV9Cb29sZWFuIGlzX25pbChfcHRyX3R5cGUpOwogIHN0YXRpYyB2
b2lkIHJlbGVhc2UoX3B0cl90eXBlKTsKICBzdGF0aWMgdm9pZCBkdXBsaWNhdGUoX3B0cl90eXBl
KTsKICBzdGF0aWMgc2l6ZV90IE5QX2FsaWduZWRTaXplKF9wdHJfdHlwZSwgc2l6ZV90KTsKICBz
dGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsK
ICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihOZXRCdWZmZXJlZFN0cmVhbSYpOwog
IHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYp
OwogIHN0YXRpYyBfcHRyX3R5cGUgdW5tYXJzaGFsT2JqUmVmKE1lbUJ1ZmZlcmVkU3RyZWFtJik7
Cn07Cgp0eXBlZGVmIF9DT1JCQV9PYmpSZWZfVmFyPF9vYmpyZWZfU3RyaW5nRGVmLCBTdHJpbmdE
ZWZfSGVscGVyPiBTdHJpbmdEZWZfdmFyOwp0eXBlZGVmIF9DT1JCQV9PYmpSZWZfT1VUX2FyZzxf
b2JqcmVmX1N0cmluZ0RlZixTdHJpbmdEZWZfSGVscGVyID4gU3RyaW5nRGVmX291dDsKCgoKCgoK
Y2xhc3MgU2VxdWVuY2VEZWY7CmNsYXNzIF9vYmpyZWZfU2VxdWVuY2VEZWY7CmNsYXNzIF9pbXBs
X1NlcXVlbmNlRGVmOwoKdHlwZWRlZiBfb2JqcmVmX1NlcXVlbmNlRGVmKiBTZXF1ZW5jZURlZl9w
dHI7CnR5cGVkZWYgU2VxdWVuY2VEZWZfcHRyIFNlcXVlbmNlRGVmUmVmOwoKY2xhc3MgU2VxdWVu
Y2VEZWZfSGVscGVyIHsKcHVibGljOgogIHR5cGVkZWYgU2VxdWVuY2VEZWZfcHRyIF9wdHJfdHlw
ZTsKCiAgc3RhdGljIF9wdHJfdHlwZSBfbmlsKCk7CiAgc3RhdGljIF9DT1JCQV9Cb29sZWFuIGlz
X25pbChfcHRyX3R5cGUpOwogIHN0YXRpYyB2b2lkIHJlbGVhc2UoX3B0cl90eXBlKTsKICBzdGF0
aWMgdm9pZCBkdXBsaWNhdGUoX3B0cl90eXBlKTsKICBzdGF0aWMgc2l6ZV90IE5QX2FsaWduZWRT
aXplKF9wdHJfdHlwZSwgc2l6ZV90KTsKICBzdGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJf
dHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9i
alJlZihOZXRCdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0
cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyBfcHRyX3R5cGUgdW5tYXJzaGFs
T2JqUmVmKE1lbUJ1ZmZlcmVkU3RyZWFtJik7Cn07Cgp0eXBlZGVmIF9DT1JCQV9PYmpSZWZfVmFy
PF9vYmpyZWZfU2VxdWVuY2VEZWYsIFNlcXVlbmNlRGVmX0hlbHBlcj4gU2VxdWVuY2VEZWZfdmFy
Owp0eXBlZGVmIF9DT1JCQV9PYmpSZWZfT1VUX2FyZzxfb2JqcmVmX1NlcXVlbmNlRGVmLFNlcXVl
bmNlRGVmX0hlbHBlciA+IFNlcXVlbmNlRGVmX291dDsKCgoKCgoKY2xhc3MgQXJyYXlEZWY7CmNs
YXNzIF9vYmpyZWZfQXJyYXlEZWY7CmNsYXNzIF9pbXBsX0FycmF5RGVmOwoKdHlwZWRlZiBfb2Jq
cmVmX0FycmF5RGVmKiBBcnJheURlZl9wdHI7CnR5cGVkZWYgQXJyYXlEZWZfcHRyIEFycmF5RGVm
UmVmOwoKY2xhc3MgQXJyYXlEZWZfSGVscGVyIHsKcHVibGljOgogIHR5cGVkZWYgQXJyYXlEZWZf
cHRyIF9wdHJfdHlwZTsKCiAgc3RhdGljIF9wdHJfdHlwZSBfbmlsKCk7CiAgc3RhdGljIF9DT1JC
QV9Cb29sZWFuIGlzX25pbChfcHRyX3R5cGUpOwogIHN0YXRpYyB2b2lkIHJlbGVhc2UoX3B0cl90
eXBlKTsKICBzdGF0aWMgdm9pZCBkdXBsaWNhdGUoX3B0cl90eXBlKTsKICBzdGF0aWMgc2l6ZV90
IE5QX2FsaWduZWRTaXplKF9wdHJfdHlwZSwgc2l6ZV90KTsKICBzdGF0aWMgdm9pZCBtYXJzaGFs
T2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBl
IHVubWFyc2hhbE9ialJlZihOZXRCdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyB2b2lkIG1hcnNo
YWxPYmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyBfcHRyX3R5
cGUgdW5tYXJzaGFsT2JqUmVmKE1lbUJ1ZmZlcmVkU3RyZWFtJik7Cn07Cgp0eXBlZGVmIF9DT1JC
QV9PYmpSZWZfVmFyPF9vYmpyZWZfQXJyYXlEZWYsIEFycmF5RGVmX0hlbHBlcj4gQXJyYXlEZWZf
dmFyOwp0eXBlZGVmIF9DT1JCQV9PYmpSZWZfT1VUX2FyZzxfb2JqcmVmX0FycmF5RGVmLEFycmF5
RGVmX0hlbHBlciA+IEFycmF5RGVmX291dDsKCgoKZW51bSBQcmltaXRpdmVLaW5kIHsgcGtfbnVs
bCwgcGtfdm9pZCwgcGtfc2hvcnQsIHBrX2xvbmcsIHBrX3VzaG9ydCwgcGtfdWxvbmcsIHBrX2Zs
b2F0LCBwa19kb3VibGUsIHBrX2Jvb2xlYW4sIHBrX2NoYXIsIHBrX29jdGV0LCBwa19hbnksIHBr
X1R5cGVDb2RlLCBwa19QcmluY2lwYWwsIHBrX3N0cmluZywgcGtfb2JqcmVmLCBwa19sb25nbG9u
ZywgcGtfdWxvbmdsb25nLCBwa19sb25nZG91YmxlLCBwa193Y2hhciwgcGtfd3N0cmluZywgcGtf
dmFsdWVfYmFzZSB9Owp0eXBlZGVmIFByaW1pdGl2ZUtpbmQmIFByaW1pdGl2ZUtpbmRfb3V0OwoK
ZXh0ZXJuIGNvbnN0IENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1ByaW1pdGl2ZUtpbmQ7CiMgMTk0
NSAiLi4vb21uaU9SQjMvaXJfZGVmcy5oaCIKY2xhc3MgUmVwb3NpdG9yeSB7CnB1YmxpYzoKCiAg
dHlwZWRlZiBSZXBvc2l0b3J5X3B0ciBfcHRyX3R5cGU7CiAgdHlwZWRlZiBSZXBvc2l0b3J5X3Zh
ciBfdmFyX3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5cGUgX2R1cGxpY2F0ZShfcHRyX3R5cGUpOwog
IHN0YXRpYyBfcHRyX3R5cGUgX25hcnJvdyhDT1JCQTo6T2JqZWN0X3B0cik7CiAgc3RhdGljIF9w
dHJfdHlwZSBfbmlsKCk7CgogIHN0YXRpYyBpbmxpbmUgc2l6ZV90IF9hbGlnbmVkU2l6ZShfcHRy
X3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJf
dHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgaW5saW5lIHZvaWQgX21hcnNoYWxP
YmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwoKICBzdGF0aWMgaW5saW5lIF9w
dHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBDT1JC
QTo6T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMp
OwogICAgX3B0cl90eXBlIHJlc3VsdCA9IF9uYXJyb3cob2JqKTsKICAgIENPUkJBOjpyZWxlYXNl
KG9iaik7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUg
X3VubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgQ09SQkE6Ok9iamVj
dF9wdHIgb2JqID0gQ09SQkE6OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBzKTsKICAgIF9w
dHJfdHlwZSByZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICBDT1JCQTo6cmVsZWFzZShvYmopOwog
ICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOwoK
Cgp9OwoKY2xhc3MgX29ianJlZl9SZXBvc2l0b3J5IDoKICBwdWJsaWMgdmlydHVhbCBfb2JqcmVm
X0NvbnRhaW5lcgp7CnB1YmxpYzoKICBDb250YWluZWRfcHRyIGxvb2t1cF9pZChjb25zdCBjaGFy
KiBzZWFyY2hfaWQpOwogIENPUkJBOjpUeXBlQ29kZV9wdHIgZ2V0X2Nhbm9uaWNhbF90eXBlY29k
ZShDT1JCQTo6VHlwZUNvZGVfcHRyIHRjKTsKICBQcmltaXRpdmVEZWZfcHRyIGdldF9wcmltaXRp
dmUoUHJpbWl0aXZlS2luZCBraW5kKTsKICBTdHJpbmdEZWZfcHRyIGNyZWF0ZV9zdHJpbmcoQ09S
QkE6OlVMb25nIGJvdW5kKTsKICBXc3RyaW5nRGVmX3B0ciBjcmVhdGVfd3N0cmluZyhDT1JCQTo6
VUxvbmcgYm91bmQpOwogIFNlcXVlbmNlRGVmX3B0ciBjcmVhdGVfc2VxdWVuY2UoQ09SQkE6OlVM
b25nIGJvdW5kLCBJRExUeXBlX3B0ciBlbGVtZW50X3R5cGUpOwogIEFycmF5RGVmX3B0ciBjcmVh
dGVfYXJyYXkoQ09SQkE6OlVMb25nIGxlbmd0aCwgSURMVHlwZV9wdHIgZWxlbWVudF90eXBlKTsK
ICBGaXhlZERlZl9wdHIgY3JlYXRlX2ZpeGVkKENPUkJBOjpVU2hvcnQgZGlnaXRzLCBDT1JCQTo6
U2hvcnQgc2NhbGUpOwoKICBpbmxpbmUgX29ianJlZl9SZXBvc2l0b3J5KCkgeyBfUFJfc2V0b2Jq
KDApOyB9CiAgX29ianJlZl9SZXBvc2l0b3J5KGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2Zp
bGVMaXN0Kiwgb21uaUlkZW50aXR5Kiwgb21uaUxvY2FsSWRlbnRpdHkqKTsKCnByb3RlY3RlZDoK
ICB2aXJ0dWFsIH5fb2JqcmVmX1JlcG9zaXRvcnkoKTsKCnByaXZhdGU6CiAgdmlydHVhbCB2b2lk
KiBfcHRyVG9PYmpSZWYoY29uc3QgY2hhciopOwoKICBfb2JqcmVmX1JlcG9zaXRvcnkoY29uc3Qg
X29ianJlZl9SZXBvc2l0b3J5Jik7CiAgX29ianJlZl9SZXBvc2l0b3J5JiBvcGVyYXRvciA9IChj
b25zdCBfb2JqcmVmX1JlcG9zaXRvcnkmKTsKCn07CgpjbGFzcyBfcG9mX1JlcG9zaXRvcnkgOiBw
dWJsaWMgcHJveHlPYmplY3RGYWN0b3J5IHsKcHVibGljOgogIGlubGluZSBfcG9mX1JlcG9zaXRv
cnkoKSA6IHByb3h5T2JqZWN0RmFjdG9yeShSZXBvc2l0b3J5OjpfUERfcmVwb0lkKSB7fQogIHZp
cnR1YWwgfl9wb2ZfUmVwb3NpdG9yeSgpOwoKICB2aXJ0dWFsIG9tbmlPYmpSZWYqIG5ld09ialJl
Zihjb25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxlTGlzdCosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb21uaUlkZW50aXR5Kiwgb21uaUxvY2FsSWRlbnRpdHkqKTsKICB2aXJ0
dWFsIF9DT1JCQV9Cb29sZWFuIGlzX2EoY29uc3QgY2hhciopIGNvbnN0Owp9OwoKY2xhc3MgX2lt
cGxfUmVwb3NpdG9yeSA6CiAgcHVibGljIHZpcnR1YWwgX2ltcGxfQ29udGFpbmVyCnsKcHVibGlj
OgogIHZpcnR1YWwgfl9pbXBsX1JlcG9zaXRvcnkoKTsKCiAgdmlydHVhbCBDb250YWluZWRfcHRy
IGxvb2t1cF9pZChjb25zdCBjaGFyKiBzZWFyY2hfaWQpID0gMDsKICB2aXJ0dWFsIENPUkJBOjpU
eXBlQ29kZV9wdHIgZ2V0X2Nhbm9uaWNhbF90eXBlY29kZShDT1JCQTo6VHlwZUNvZGVfcHRyIHRj
KSA9IDA7CiAgdmlydHVhbCBQcmltaXRpdmVEZWZfcHRyIGdldF9wcmltaXRpdmUoUHJpbWl0aXZl
S2luZCBraW5kKSA9IDA7CiAgdmlydHVhbCBTdHJpbmdEZWZfcHRyIGNyZWF0ZV9zdHJpbmcoQ09S
QkE6OlVMb25nIGJvdW5kKSA9IDA7CiAgdmlydHVhbCBXc3RyaW5nRGVmX3B0ciBjcmVhdGVfd3N0
cmluZyhDT1JCQTo6VUxvbmcgYm91bmQpID0gMDsKICB2aXJ0dWFsIFNlcXVlbmNlRGVmX3B0ciBj
cmVhdGVfc2VxdWVuY2UoQ09SQkE6OlVMb25nIGJvdW5kLCBJRExUeXBlX3B0ciBlbGVtZW50X3R5
cGUpID0gMDsKICB2aXJ0dWFsIEFycmF5RGVmX3B0ciBjcmVhdGVfYXJyYXkoQ09SQkE6OlVMb25n
IGxlbmd0aCwgSURMVHlwZV9wdHIgZWxlbWVudF90eXBlKSA9IDA7CiAgdmlydHVhbCBGaXhlZERl
Zl9wdHIgY3JlYXRlX2ZpeGVkKENPUkJBOjpVU2hvcnQgZGlnaXRzLCBDT1JCQTo6U2hvcnQgc2Nh
bGUpID0gMDsKCnB1YmxpYzoKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIF9kaXNwYXRjaChHSU9Q
X1MmKTsKCnByaXZhdGU6CiAgdmlydHVhbCB2b2lkKiBfcHRyVG9JbnRlcmZhY2UoY29uc3QgY2hh
ciopOwogIHZpcnR1YWwgY29uc3QgY2hhciogX21vc3REZXJpdmVkUmVwb0lkKCk7Cn07CgpleHRl
cm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUmVwb3NpdG9yeTsKIyAyMDcxICIuLi9v
bW5pT1JCMy9pcl9kZWZzLmhoIgpjbGFzcyBNb2R1bGVEZWYgewpwdWJsaWM6CgogIHR5cGVkZWYg
TW9kdWxlRGVmX3B0ciBfcHRyX3R5cGU7CiAgdHlwZWRlZiBNb2R1bGVEZWZfdmFyIF92YXJfdHlw
ZTsKCiAgc3RhdGljIF9wdHJfdHlwZSBfZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgc3RhdGljIF9w
dHJfdHlwZSBfbmFycm93KENPUkJBOjpPYmplY3RfcHRyKTsKICBzdGF0aWMgX3B0cl90eXBlIF9u
aWwoKTsKCiAgc3RhdGljIGlubGluZSBzaXplX3QgX2FsaWduZWRTaXplKF9wdHJfdHlwZSwgc2l6
ZV90KTsKICBzdGF0aWMgaW5saW5lIHZvaWQgX21hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBOZXRC
dWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyBpbmxpbmUgdm9pZCBfbWFyc2hhbE9ialJlZihfcHRy
X3R5cGUsIE1lbUJ1ZmZlcmVkU3RyZWFtJik7CgogIHN0YXRpYyBpbmxpbmUgX3B0cl90eXBlIF91
bm1hcnNoYWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIENPUkJBOjpPYmplY3Rf
cHRyIG9iaiA9IENPUkJBOjpVbk1hcnNoYWxPYmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICBfcHRy
X3R5cGUgcmVzdWx0ID0gX25hcnJvdyhvYmopOwogICAgQ09SQkE6OnJlbGVhc2Uob2JqKTsKICAg
IHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgaW5saW5lIF9wdHJfdHlwZSBfdW5tYXJzaGFs
T2JqUmVmKE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmog
PSBDT1JCQTo6VW5NYXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMpOwogICAgX3B0cl90eXBlIHJl
c3VsdCA9IF9uYXJyb3cob2JqKTsKICAgIENPUkJBOjpyZWxlYXNlKG9iaik7CiAgICByZXR1cm4g
cmVzdWx0OwogIH0KCiAgc3RhdGljIGNvbnN0IGNoYXIqIF9QRF9yZXBvSWQ7CgoKCn07CgpjbGFz
cyBfb2JqcmVmX01vZHVsZURlZiA6CiAgcHVibGljIHZpcnR1YWwgX29ianJlZl9Db250YWluZXIs
CiAgcHVibGljIHZpcnR1YWwgX29ianJlZl9Db250YWluZWQKewpwdWJsaWM6CgogIGlubGluZSBf
b2JqcmVmX01vZHVsZURlZigpIHsgX1BSX3NldG9iaigwKTsgfQogIF9vYmpyZWZfTW9kdWxlRGVm
KGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0Kiwgb21uaUlkZW50aXR5Kiwgb21u
aUxvY2FsSWRlbnRpdHkqKTsKCnByb3RlY3RlZDoKICB2aXJ0dWFsIH5fb2JqcmVmX01vZHVsZURl
ZigpOwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9wdHJUb09ialJlZihjb25zdCBjaGFyKik7
CgogIF9vYmpyZWZfTW9kdWxlRGVmKGNvbnN0IF9vYmpyZWZfTW9kdWxlRGVmJik7CiAgX29ianJl
Zl9Nb2R1bGVEZWYmIG9wZXJhdG9yID0gKGNvbnN0IF9vYmpyZWZfTW9kdWxlRGVmJik7Cgp9OwoK
Y2xhc3MgX3BvZl9Nb2R1bGVEZWYgOiBwdWJsaWMgcHJveHlPYmplY3RGYWN0b3J5IHsKcHVibGlj
OgogIGlubGluZSBfcG9mX01vZHVsZURlZigpIDogcHJveHlPYmplY3RGYWN0b3J5KE1vZHVsZURl
Zjo6X1BEX3JlcG9JZCkge30KICB2aXJ0dWFsIH5fcG9mX01vZHVsZURlZigpOwoKICB2aXJ0dWFs
IG9tbmlPYmpSZWYqIG5ld09ialJlZihjb25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxlTGlz
dCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb21uaUlkZW50aXR5Kiwgb21uaUxv
Y2FsSWRlbnRpdHkqKTsKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIGlzX2EoY29uc3QgY2hhciop
IGNvbnN0Owp9OwoKY2xhc3MgX2ltcGxfTW9kdWxlRGVmIDoKICBwdWJsaWMgdmlydHVhbCBfaW1w
bF9Db250YWluZXIsCiAgcHVibGljIHZpcnR1YWwgX2ltcGxfQ29udGFpbmVkCnsKcHVibGljOgog
IHZpcnR1YWwgfl9pbXBsX01vZHVsZURlZigpOwoKcHVibGljOgogIHZpcnR1YWwgX0NPUkJBX0Jv
b2xlYW4gX2Rpc3BhdGNoKEdJT1BfUyYpOwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9wdHJU
b0ludGVyZmFjZShjb25zdCBjaGFyKik7CiAgdmlydHVhbCBjb25zdCBjaGFyKiBfbW9zdERlcml2
ZWRSZXBvSWQoKTsKfTsKCmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Nb2R1
bGVEZWY7CgpzdHJ1Y3QgTW9kdWxlRGVzY3JpcHRpb24gewogIHR5cGVkZWYgX0NPUkJBX0NvbnN0
clR5cGVfVmFyaWFibGVfVmFyPE1vZHVsZURlc2NyaXB0aW9uPiBfdmFyX3R5cGU7CgogIENPUkJB
OjpTdHJpbmdfbWVtYmVyIG5hbWU7CgogIENPUkJBOjpTdHJpbmdfbWVtYmVyIGlkOwoKICBDT1JC
QTo6U3RyaW5nX21lbWJlciBkZWZpbmVkX2luOwoKICBDT1JCQTo6U3RyaW5nX21lbWJlciB2ZXJz
aW9uOwoKICBzaXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBpbml0aWFsb2Zmc2V0KSBjb25z
dDsKICB2b2lkIG9wZXJhdG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSAmKSBjb25zdDsKICB2b2lk
IG9wZXJhdG9yPDw9IChOZXRCdWZmZXJlZFN0cmVhbSAmKTsKICB2b2lkIG9wZXJhdG9yPj49IChN
ZW1CdWZmZXJlZFN0cmVhbSAmKSBjb25zdDsKICB2b2lkIG9wZXJhdG9yPDw9IChNZW1CdWZmZXJl
ZFN0cmVhbSAmKTsKfTsKCnR5cGVkZWYgTW9kdWxlRGVzY3JpcHRpb246Ol92YXJfdHlwZSBNb2R1
bGVEZXNjcmlwdGlvbl92YXI7Cgp0eXBlZGVmIF9DT1JCQV9Db25zdHJUeXBlX1ZhcmlhYmxlX09V
VF9hcmc8IE1vZHVsZURlc2NyaXB0aW9uLE1vZHVsZURlc2NyaXB0aW9uX3ZhciA+IE1vZHVsZURl
c2NyaXB0aW9uX291dDsKCmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Nb2R1
bGVEZXNjcmlwdGlvbjsKIyAyMjA2ICIuLi9vbW5pT1JCMy9pcl9kZWZzLmhoIgpjbGFzcyBDb25z
dGFudERlZiB7CnB1YmxpYzoKCiAgdHlwZWRlZiBDb25zdGFudERlZl9wdHIgX3B0cl90eXBlOwog
IHR5cGVkZWYgQ29uc3RhbnREZWZfdmFyIF92YXJfdHlwZTsKCiAgc3RhdGljIF9wdHJfdHlwZSBf
ZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgc3RhdGljIF9wdHJfdHlwZSBfbmFycm93KENPUkJBOjpP
YmplY3RfcHRyKTsKICBzdGF0aWMgX3B0cl90eXBlIF9uaWwoKTsKCiAgc3RhdGljIGlubGluZSBz
aXplX3QgX2FsaWduZWRTaXplKF9wdHJfdHlwZSwgc2l6ZV90KTsKICBzdGF0aWMgaW5saW5lIHZv
aWQgX21hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBOZXRCdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRp
YyBpbmxpbmUgdm9pZCBfbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE1lbUJ1ZmZlcmVkU3RyZWFt
Jik7CgogIHN0YXRpYyBpbmxpbmUgX3B0cl90eXBlIF91bm1hcnNoYWxPYmpSZWYoTmV0QnVmZmVy
ZWRTdHJlYW0mIHMpIHsKICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiA9IENPUkJBOjpVbk1hcnNo
YWxPYmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICBfcHRyX3R5cGUgcmVzdWx0ID0gX25hcnJvdyhv
YmopOwogICAgQ09SQkE6OnJlbGVhc2Uob2JqKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBz
dGF0aWMgaW5saW5lIF9wdHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVmKE1lbUJ1ZmZlcmVkU3RyZWFt
JiBzKSB7CiAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJzaGFsT2JqUmVm
KF9QRF9yZXBvSWQsIHMpOwogICAgX3B0cl90eXBlIHJlc3VsdCA9IF9uYXJyb3cob2JqKTsKICAg
IENPUkJBOjpyZWxlYXNlKG9iaik7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIGNv
bnN0IGNoYXIqIF9QRF9yZXBvSWQ7CgoKCn07CgpjbGFzcyBfb2JqcmVmX0NvbnN0YW50RGVmIDoK
ICBwdWJsaWMgdmlydHVhbCBfb2JqcmVmX0NvbnRhaW5lZAp7CnB1YmxpYzoKCiAgQ09SQkE6OlR5
cGVDb2RlX3B0ciB0eXBlKCk7CiAgSURMVHlwZV9wdHIgdHlwZV9kZWYoKTsKICB2b2lkIHR5cGVf
ZGVmKElETFR5cGVfcHRyKTsKICBDT1JCQTo6QW55KiB2YWx1ZSgpOwogIHZvaWQgdmFsdWUoY29u
c3QgQ09SQkE6OkFueSYpOwoKICBpbmxpbmUgX29ianJlZl9Db25zdGFudERlZigpIHsgX1BSX3Nl
dG9iaigwKTsgfQogIF9vYmpyZWZfQ29uc3RhbnREZWYoY29uc3QgY2hhciosIElPUDo6VGFnZ2Vk
UHJvZmlsZUxpc3QqLCBvbW5pSWRlbnRpdHkqLCBvbW5pTG9jYWxJZGVudGl0eSopOwoKcHJvdGVj
dGVkOgogIHZpcnR1YWwgfl9vYmpyZWZfQ29uc3RhbnREZWYoKTsKCnByaXZhdGU6CiAgdmlydHVh
bCB2b2lkKiBfcHRyVG9PYmpSZWYoY29uc3QgY2hhciopOwoKICBfb2JqcmVmX0NvbnN0YW50RGVm
KGNvbnN0IF9vYmpyZWZfQ29uc3RhbnREZWYmKTsKICBfb2JqcmVmX0NvbnN0YW50RGVmJiBvcGVy
YXRvciA9IChjb25zdCBfb2JqcmVmX0NvbnN0YW50RGVmJik7Cgp9OwoKY2xhc3MgX3BvZl9Db25z
dGFudERlZiA6IHB1YmxpYyBwcm94eU9iamVjdEZhY3RvcnkgewpwdWJsaWM6CiAgaW5saW5lIF9w
b2ZfQ29uc3RhbnREZWYoKSA6IHByb3h5T2JqZWN0RmFjdG9yeShDb25zdGFudERlZjo6X1BEX3Jl
cG9JZCkge30KICB2aXJ0dWFsIH5fcG9mX0NvbnN0YW50RGVmKCk7CgogIHZpcnR1YWwgb21uaU9i
alJlZiogbmV3T2JqUmVmKGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0KiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbW5pSWRlbnRpdHkqLCBvbW5pTG9jYWxJZGVu
dGl0eSopOwogIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gaXNfYShjb25zdCBjaGFyKikgY29uc3Q7
Cn07CgpjbGFzcyBfaW1wbF9Db25zdGFudERlZiA6CiAgcHVibGljIHZpcnR1YWwgX2ltcGxfQ29u
dGFpbmVkCnsKcHVibGljOgogIHZpcnR1YWwgfl9pbXBsX0NvbnN0YW50RGVmKCk7CgogIHZpcnR1
YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciB0eXBlKCkgPSAwOwogIHZpcnR1YWwgSURMVHlwZV9wdHIg
dHlwZV9kZWYoKSA9IDA7CiAgdmlydHVhbCB2b2lkIHR5cGVfZGVmKElETFR5cGVfcHRyKSA9IDA7
CiAgdmlydHVhbCBDT1JCQTo6QW55KiB2YWx1ZSgpID0gMDsKICB2aXJ0dWFsIHZvaWQgdmFsdWUo
Y29uc3QgQ09SQkE6OkFueSYpID0gMDsKCnB1YmxpYzoKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFu
IF9kaXNwYXRjaChHSU9QX1MmKTsKCnByaXZhdGU6CiAgdmlydHVhbCB2b2lkKiBfcHRyVG9JbnRl
cmZhY2UoY29uc3QgY2hhciopOwogIHZpcnR1YWwgY29uc3QgY2hhciogX21vc3REZXJpdmVkUmVw
b0lkKCk7Cn07CgpleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfQ29uc3RhbnRE
ZWY7CgpzdHJ1Y3QgQ29uc3RhbnREZXNjcmlwdGlvbiB7CiAgdHlwZWRlZiBfQ09SQkFfQ29uc3Ry
VHlwZV9WYXJpYWJsZV9WYXI8Q29uc3RhbnREZXNjcmlwdGlvbj4gX3Zhcl90eXBlOwoKICBDT1JC
QTo6U3RyaW5nX21lbWJlciBuYW1lOwoKICBDT1JCQTo6U3RyaW5nX21lbWJlciBpZDsKCiAgQ09S
QkE6OlN0cmluZ19tZW1iZXIgZGVmaW5lZF9pbjsKCiAgQ09SQkE6OlN0cmluZ19tZW1iZXIgdmVy
c2lvbjsKCiAgQ09SQkE6OlR5cGVDb2RlX21lbWJlciB0eXBlOwoKICBDT1JCQTo6QW55IHZhbHVl
OwoKICBzaXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBpbml0aWFsb2Zmc2V0KSBjb25zdDsK
ICB2b2lkIG9wZXJhdG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSAmKSBjb25zdDsKICB2b2lkIG9w
ZXJhdG9yPDw9IChOZXRCdWZmZXJlZFN0cmVhbSAmKTsKICB2b2lkIG9wZXJhdG9yPj49IChNZW1C
dWZmZXJlZFN0cmVhbSAmKSBjb25zdDsKICB2b2lkIG9wZXJhdG9yPDw9IChNZW1CdWZmZXJlZFN0
cmVhbSAmKTsKfTsKCnR5cGVkZWYgQ29uc3RhbnREZXNjcmlwdGlvbjo6X3Zhcl90eXBlIENvbnN0
YW50RGVzY3JpcHRpb25fdmFyOwoKdHlwZWRlZiBfQ09SQkFfQ29uc3RyVHlwZV9WYXJpYWJsZV9P
VVRfYXJnPCBDb25zdGFudERlc2NyaXB0aW9uLENvbnN0YW50RGVzY3JpcHRpb25fdmFyID4gQ29u
c3RhbnREZXNjcmlwdGlvbl9vdXQ7CgpleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBf
dGNfQ29uc3RhbnREZXNjcmlwdGlvbjsKCgoKCmNsYXNzIFR5cGVkZWZEZWY7CmNsYXNzIF9vYmpy
ZWZfVHlwZWRlZkRlZjsKY2xhc3MgX2ltcGxfVHlwZWRlZkRlZjsKCnR5cGVkZWYgX29ianJlZl9U
eXBlZGVmRGVmKiBUeXBlZGVmRGVmX3B0cjsKdHlwZWRlZiBUeXBlZGVmRGVmX3B0ciBUeXBlZGVm
RGVmUmVmOwoKY2xhc3MgVHlwZWRlZkRlZl9IZWxwZXIgewpwdWJsaWM6CiAgdHlwZWRlZiBUeXBl
ZGVmRGVmX3B0ciBfcHRyX3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwogIHN0YXRp
YyBfQ09SQkFfQm9vbGVhbiBpc19uaWwoX3B0cl90eXBlKTsKICBzdGF0aWMgdm9pZCByZWxlYXNl
KF9wdHJfdHlwZSk7CiAgc3RhdGljIHZvaWQgZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgc3RhdGlj
IHNpemVfdCBOUF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIHZvaWQg
bWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIF9w
dHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgdm9p
ZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMg
X3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYpOwp9OwoKdHlwZWRl
ZiBfQ09SQkFfT2JqUmVmX1Zhcjxfb2JqcmVmX1R5cGVkZWZEZWYsIFR5cGVkZWZEZWZfSGVscGVy
PiBUeXBlZGVmRGVmX3ZhcjsKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX09VVF9hcmc8X29ianJlZl9U
eXBlZGVmRGVmLFR5cGVkZWZEZWZfSGVscGVyID4gVHlwZWRlZkRlZl9vdXQ7CgoKCmNsYXNzIFR5
cGVkZWZEZWYgewpwdWJsaWM6CgogIHR5cGVkZWYgVHlwZWRlZkRlZl9wdHIgX3B0cl90eXBlOwog
IHR5cGVkZWYgVHlwZWRlZkRlZl92YXIgX3Zhcl90eXBlOwoKICBzdGF0aWMgX3B0cl90eXBlIF9k
dXBsaWNhdGUoX3B0cl90eXBlKTsKICBzdGF0aWMgX3B0cl90eXBlIF9uYXJyb3coQ09SQkE6Ok9i
amVjdF9wdHIpOwogIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwoKICBzdGF0aWMgaW5saW5lIHNp
emVfdCBfYWxpZ25lZFNpemUoX3B0cl90eXBlLCBzaXplX3QpOwogIHN0YXRpYyBpbmxpbmUgdm9p
ZCBfbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGlj
IGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0m
KTsKCiAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3VubWFyc2hhbE9ialJlZihOZXRCdWZmZXJl
ZFN0cmVhbSYgcykgewogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqID0gQ09SQkE6OlVuTWFyc2hh
bE9ialJlZihfUERfcmVwb0lkLCBzKTsKICAgIF9wdHJfdHlwZSByZXN1bHQgPSBfbmFycm93KG9i
aik7CiAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0
YXRpYyBpbmxpbmUgX3B0cl90eXBlIF91bm1hcnNoYWxPYmpSZWYoTWVtQnVmZmVyZWRTdHJlYW0m
IHMpIHsKICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiA9IENPUkJBOjpVbk1hcnNoYWxPYmpSZWYo
X1BEX3JlcG9JZCwgcyk7CiAgICBfcHRyX3R5cGUgcmVzdWx0ID0gX25hcnJvdyhvYmopOwogICAg
Q09SQkE6OnJlbGVhc2Uob2JqKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgY29u
c3QgY2hhciogX1BEX3JlcG9JZDsKCgoKfTsKCmNsYXNzIF9vYmpyZWZfVHlwZWRlZkRlZiA6CiAg
cHVibGljIHZpcnR1YWwgX29ianJlZl9Db250YWluZWQsCiAgcHVibGljIHZpcnR1YWwgX29ianJl
Zl9JRExUeXBlCnsKcHVibGljOgoKICBpbmxpbmUgX29ianJlZl9UeXBlZGVmRGVmKCkgeyBfUFJf
c2V0b2JqKDApOyB9CiAgX29ianJlZl9UeXBlZGVmRGVmKGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dl
ZFByb2ZpbGVMaXN0Kiwgb21uaUlkZW50aXR5Kiwgb21uaUxvY2FsSWRlbnRpdHkqKTsKCnByb3Rl
Y3RlZDoKICB2aXJ0dWFsIH5fb2JqcmVmX1R5cGVkZWZEZWYoKTsKCnByaXZhdGU6CiAgdmlydHVh
bCB2b2lkKiBfcHRyVG9PYmpSZWYoY29uc3QgY2hhciopOwoKICBfb2JqcmVmX1R5cGVkZWZEZWYo
Y29uc3QgX29ianJlZl9UeXBlZGVmRGVmJik7CiAgX29ianJlZl9UeXBlZGVmRGVmJiBvcGVyYXRv
ciA9IChjb25zdCBfb2JqcmVmX1R5cGVkZWZEZWYmKTsKCn07CgpjbGFzcyBfcG9mX1R5cGVkZWZE
ZWYgOiBwdWJsaWMgcHJveHlPYmplY3RGYWN0b3J5IHsKcHVibGljOgogIGlubGluZSBfcG9mX1R5
cGVkZWZEZWYoKSA6IHByb3h5T2JqZWN0RmFjdG9yeShUeXBlZGVmRGVmOjpfUERfcmVwb0lkKSB7
fQogIHZpcnR1YWwgfl9wb2ZfVHlwZWRlZkRlZigpOwoKICB2aXJ0dWFsIG9tbmlPYmpSZWYqIG5l
d09ialJlZihjb25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxlTGlzdCosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb21uaUlkZW50aXR5Kiwgb21uaUxvY2FsSWRlbnRpdHkqKTsK
ICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIGlzX2EoY29uc3QgY2hhciopIGNvbnN0Owp9OwoKY2xh
c3MgX2ltcGxfVHlwZWRlZkRlZiA6CiAgcHVibGljIHZpcnR1YWwgX2ltcGxfQ29udGFpbmVkLAog
IHB1YmxpYyB2aXJ0dWFsIF9pbXBsX0lETFR5cGUKewpwdWJsaWM6CiAgdmlydHVhbCB+X2ltcGxf
VHlwZWRlZkRlZigpOwoKcHVibGljOgogIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gX2Rpc3BhdGNo
KEdJT1BfUyYpOwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9wdHJUb0ludGVyZmFjZShjb25z
dCBjaGFyKik7CiAgdmlydHVhbCBjb25zdCBjaGFyKiBfbW9zdERlcml2ZWRSZXBvSWQoKTsKfTsK
CmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19UeXBlZGVmRGVmOwoKc3RydWN0
IFR5cGVEZXNjcmlwdGlvbiB7CiAgdHlwZWRlZiBfQ09SQkFfQ29uc3RyVHlwZV9WYXJpYWJsZV9W
YXI8VHlwZURlc2NyaXB0aW9uPiBfdmFyX3R5cGU7CgogIENPUkJBOjpTdHJpbmdfbWVtYmVyIG5h
bWU7CgogIENPUkJBOjpTdHJpbmdfbWVtYmVyIGlkOwoKICBDT1JCQTo6U3RyaW5nX21lbWJlciBk
ZWZpbmVkX2luOwoKICBDT1JCQTo6U3RyaW5nX21lbWJlciB2ZXJzaW9uOwoKICBDT1JCQTo6VHlw
ZUNvZGVfbWVtYmVyIHR5cGU7CgogIHNpemVfdCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90IGluaXRp
YWxvZmZzZXQpIGNvbnN0OwogIHZvaWQgb3BlcmF0b3I+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtICYp
IGNvbnN0OwogIHZvaWQgb3BlcmF0b3I8PD0gKE5ldEJ1ZmZlcmVkU3RyZWFtICYpOwogIHZvaWQg
b3BlcmF0b3I+Pj0gKE1lbUJ1ZmZlcmVkU3RyZWFtICYpIGNvbnN0OwogIHZvaWQgb3BlcmF0b3I8
PD0gKE1lbUJ1ZmZlcmVkU3RyZWFtICYpOwp9OwoKdHlwZWRlZiBUeXBlRGVzY3JpcHRpb246Ol92
YXJfdHlwZSBUeXBlRGVzY3JpcHRpb25fdmFyOwoKdHlwZWRlZiBfQ09SQkFfQ29uc3RyVHlwZV9W
YXJpYWJsZV9PVVRfYXJnPCBUeXBlRGVzY3JpcHRpb24sVHlwZURlc2NyaXB0aW9uX3ZhciA+IFR5
cGVEZXNjcmlwdGlvbl9vdXQ7CgpleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNf
VHlwZURlc2NyaXB0aW9uOwojIDI0OTIgIi4uL29tbmlPUkIzL2lyX2RlZnMuaGgiCmNsYXNzIFN0
cnVjdERlZiB7CnB1YmxpYzoKCiAgdHlwZWRlZiBTdHJ1Y3REZWZfcHRyIF9wdHJfdHlwZTsKICB0
eXBlZGVmIFN0cnVjdERlZl92YXIgX3Zhcl90eXBlOwoKICBzdGF0aWMgX3B0cl90eXBlIF9kdXBs
aWNhdGUoX3B0cl90eXBlKTsKICBzdGF0aWMgX3B0cl90eXBlIF9uYXJyb3coQ09SQkE6Ok9iamVj
dF9wdHIpOwogIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwoKICBzdGF0aWMgaW5saW5lIHNpemVf
dCBfYWxpZ25lZFNpemUoX3B0cl90eXBlLCBzaXplX3QpOwogIHN0YXRpYyBpbmxpbmUgdm9pZCBf
bWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIGlu
bGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsK
CiAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3VubWFyc2hhbE9ialJlZihOZXRCdWZmZXJlZFN0
cmVhbSYgcykgewogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqID0gQ09SQkE6OlVuTWFyc2hhbE9i
alJlZihfUERfcmVwb0lkLCBzKTsKICAgIF9wdHJfdHlwZSByZXN1bHQgPSBfbmFycm93KG9iaik7
CiAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRp
YyBpbmxpbmUgX3B0cl90eXBlIF91bm1hcnNoYWxPYmpSZWYoTWVtQnVmZmVyZWRTdHJlYW0mIHMp
IHsKICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiA9IENPUkJBOjpVbk1hcnNoYWxPYmpSZWYoX1BE
X3JlcG9JZCwgcyk7CiAgICBfcHRyX3R5cGUgcmVzdWx0ID0gX25hcnJvdyhvYmopOwogICAgQ09S
QkE6OnJlbGVhc2Uob2JqKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgY29uc3Qg
Y2hhciogX1BEX3JlcG9JZDsKCgoKfTsKCmNsYXNzIF9vYmpyZWZfU3RydWN0RGVmIDoKICBwdWJs
aWMgdmlydHVhbCBfb2JqcmVmX1R5cGVkZWZEZWYsCiAgcHVibGljIHZpcnR1YWwgX29ianJlZl9D
b250YWluZXIKewpwdWJsaWM6CgogIFN0cnVjdE1lbWJlclNlcSogbWVtYmVycygpOwogIHZvaWQg
bWVtYmVycyhjb25zdCBTdHJ1Y3RNZW1iZXJTZXEmKTsKCiAgaW5saW5lIF9vYmpyZWZfU3RydWN0
RGVmKCkgeyBfUFJfc2V0b2JqKDApOyB9CiAgX29ianJlZl9TdHJ1Y3REZWYoY29uc3QgY2hhcios
IElPUDo6VGFnZ2VkUHJvZmlsZUxpc3QqLCBvbW5pSWRlbnRpdHkqLCBvbW5pTG9jYWxJZGVudGl0
eSopOwoKcHJvdGVjdGVkOgogIHZpcnR1YWwgfl9vYmpyZWZfU3RydWN0RGVmKCk7Cgpwcml2YXRl
OgogIHZpcnR1YWwgdm9pZCogX3B0clRvT2JqUmVmKGNvbnN0IGNoYXIqKTsKCiAgX29ianJlZl9T
dHJ1Y3REZWYoY29uc3QgX29ianJlZl9TdHJ1Y3REZWYmKTsKICBfb2JqcmVmX1N0cnVjdERlZiYg
b3BlcmF0b3IgPSAoY29uc3QgX29ianJlZl9TdHJ1Y3REZWYmKTsKCn07CgpjbGFzcyBfcG9mX1N0
cnVjdERlZiA6IHB1YmxpYyBwcm94eU9iamVjdEZhY3RvcnkgewpwdWJsaWM6CiAgaW5saW5lIF9w
b2ZfU3RydWN0RGVmKCkgOiBwcm94eU9iamVjdEZhY3RvcnkoU3RydWN0RGVmOjpfUERfcmVwb0lk
KSB7fQogIHZpcnR1YWwgfl9wb2ZfU3RydWN0RGVmKCk7CgogIHZpcnR1YWwgb21uaU9ialJlZiog
bmV3T2JqUmVmKGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0KiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvbW5pSWRlbnRpdHkqLCBvbW5pTG9jYWxJZGVudGl0eSop
OwogIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gaXNfYShjb25zdCBjaGFyKikgY29uc3Q7Cn07Cgpj
bGFzcyBfaW1wbF9TdHJ1Y3REZWYgOgogIHB1YmxpYyB2aXJ0dWFsIF9pbXBsX1R5cGVkZWZEZWYs
CiAgcHVibGljIHZpcnR1YWwgX2ltcGxfQ29udGFpbmVyCnsKcHVibGljOgogIHZpcnR1YWwgfl9p
bXBsX1N0cnVjdERlZigpOwoKICB2aXJ0dWFsIFN0cnVjdE1lbWJlclNlcSogbWVtYmVycygpID0g
MDsKICB2aXJ0dWFsIHZvaWQgbWVtYmVycyhjb25zdCBTdHJ1Y3RNZW1iZXJTZXEmKSA9IDA7Cgpw
dWJsaWM6CiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBfZGlzcGF0Y2goR0lPUF9TJik7Cgpwcml2
YXRlOgogIHZpcnR1YWwgdm9pZCogX3B0clRvSW50ZXJmYWNlKGNvbnN0IGNoYXIqKTsKICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIF9tb3N0RGVyaXZlZFJlcG9JZCgpOwp9OwoKZXh0ZXJuIGNvbnN0IENP
UkJBOjpUeXBlQ29kZV9wdHIgX3RjX1N0cnVjdERlZjsKIyAyNjA5ICIuLi9vbW5pT1JCMy9pcl9k
ZWZzLmhoIgpjbGFzcyBVbmlvbkRlZiB7CnB1YmxpYzoKCiAgdHlwZWRlZiBVbmlvbkRlZl9wdHIg
X3B0cl90eXBlOwogIHR5cGVkZWYgVW5pb25EZWZfdmFyIF92YXJfdHlwZTsKCiAgc3RhdGljIF9w
dHJfdHlwZSBfZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgc3RhdGljIF9wdHJfdHlwZSBfbmFycm93
KENPUkJBOjpPYmplY3RfcHRyKTsKICBzdGF0aWMgX3B0cl90eXBlIF9uaWwoKTsKCiAgc3RhdGlj
IGlubGluZSBzaXplX3QgX2FsaWduZWRTaXplKF9wdHJfdHlwZSwgc2l6ZV90KTsKICBzdGF0aWMg
aW5saW5lIHZvaWQgX21hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBOZXRCdWZmZXJlZFN0cmVhbSYp
OwogIHN0YXRpYyBpbmxpbmUgdm9pZCBfbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE1lbUJ1ZmZl
cmVkU3RyZWFtJik7CgogIHN0YXRpYyBpbmxpbmUgX3B0cl90eXBlIF91bm1hcnNoYWxPYmpSZWYo
TmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiA9IENPUkJB
OjpVbk1hcnNoYWxPYmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICBfcHRyX3R5cGUgcmVzdWx0ID0g
X25hcnJvdyhvYmopOwogICAgQ09SQkE6OnJlbGVhc2Uob2JqKTsKICAgIHJldHVybiByZXN1bHQ7
CiAgfQoKICBzdGF0aWMgaW5saW5lIF9wdHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVmKE1lbUJ1ZmZl
cmVkU3RyZWFtJiBzKSB7CiAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJz
aGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMpOwogICAgX3B0cl90eXBlIHJlc3VsdCA9IF9uYXJyb3co
b2JqKTsKICAgIENPUkJBOjpyZWxlYXNlKG9iaik7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAg
c3RhdGljIGNvbnN0IGNoYXIqIF9QRF9yZXBvSWQ7CgoKCn07CgpjbGFzcyBfb2JqcmVmX1VuaW9u
RGVmIDoKICBwdWJsaWMgdmlydHVhbCBfb2JqcmVmX1R5cGVkZWZEZWYsCiAgcHVibGljIHZpcnR1
YWwgX29ianJlZl9Db250YWluZXIKewpwdWJsaWM6CgogIENPUkJBOjpUeXBlQ29kZV9wdHIgZGlz
Y3JpbWluYXRvcl90eXBlKCk7CiAgSURMVHlwZV9wdHIgZGlzY3JpbWluYXRvcl90eXBlX2RlZigp
OwogIHZvaWQgZGlzY3JpbWluYXRvcl90eXBlX2RlZihJRExUeXBlX3B0cik7CiAgVW5pb25NZW1i
ZXJTZXEqIG1lbWJlcnMoKTsKICB2b2lkIG1lbWJlcnMoY29uc3QgVW5pb25NZW1iZXJTZXEmKTsK
CiAgaW5saW5lIF9vYmpyZWZfVW5pb25EZWYoKSB7IF9QUl9zZXRvYmooMCk7IH0KICBfb2JqcmVm
X1VuaW9uRGVmKGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0Kiwgb21uaUlkZW50
aXR5Kiwgb21uaUxvY2FsSWRlbnRpdHkqKTsKCnByb3RlY3RlZDoKICB2aXJ0dWFsIH5fb2JqcmVm
X1VuaW9uRGVmKCk7Cgpwcml2YXRlOgogIHZpcnR1YWwgdm9pZCogX3B0clRvT2JqUmVmKGNvbnN0
IGNoYXIqKTsKCiAgX29ianJlZl9VbmlvbkRlZihjb25zdCBfb2JqcmVmX1VuaW9uRGVmJik7CiAg
X29ianJlZl9VbmlvbkRlZiYgb3BlcmF0b3IgPSAoY29uc3QgX29ianJlZl9VbmlvbkRlZiYpOwoK
fTsKCmNsYXNzIF9wb2ZfVW5pb25EZWYgOiBwdWJsaWMgcHJveHlPYmplY3RGYWN0b3J5IHsKcHVi
bGljOgogIGlubGluZSBfcG9mX1VuaW9uRGVmKCkgOiBwcm94eU9iamVjdEZhY3RvcnkoVW5pb25E
ZWY6Ol9QRF9yZXBvSWQpIHt9CiAgdmlydHVhbCB+X3BvZl9VbmlvbkRlZigpOwoKICB2aXJ0dWFs
IG9tbmlPYmpSZWYqIG5ld09ialJlZihjb25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxlTGlz
dCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb21uaUlkZW50aXR5Kiwgb21uaUxv
Y2FsSWRlbnRpdHkqKTsKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIGlzX2EoY29uc3QgY2hhciop
IGNvbnN0Owp9OwoKY2xhc3MgX2ltcGxfVW5pb25EZWYgOgogIHB1YmxpYyB2aXJ0dWFsIF9pbXBs
X1R5cGVkZWZEZWYsCiAgcHVibGljIHZpcnR1YWwgX2ltcGxfQ29udGFpbmVyCnsKcHVibGljOgog
IHZpcnR1YWwgfl9pbXBsX1VuaW9uRGVmKCk7CgogIHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0
ciBkaXNjcmltaW5hdG9yX3R5cGUoKSA9IDA7CiAgdmlydHVhbCBJRExUeXBlX3B0ciBkaXNjcmlt
aW5hdG9yX3R5cGVfZGVmKCkgPSAwOwogIHZpcnR1YWwgdm9pZCBkaXNjcmltaW5hdG9yX3R5cGVf
ZGVmKElETFR5cGVfcHRyKSA9IDA7CiAgdmlydHVhbCBVbmlvbk1lbWJlclNlcSogbWVtYmVycygp
ID0gMDsKICB2aXJ0dWFsIHZvaWQgbWVtYmVycyhjb25zdCBVbmlvbk1lbWJlclNlcSYpID0gMDsK
CnB1YmxpYzoKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIF9kaXNwYXRjaChHSU9QX1MmKTsKCnBy
aXZhdGU6CiAgdmlydHVhbCB2b2lkKiBfcHRyVG9JbnRlcmZhY2UoY29uc3QgY2hhciopOwogIHZp
cnR1YWwgY29uc3QgY2hhciogX21vc3REZXJpdmVkUmVwb0lkKCk7Cn07CgpleHRlcm4gY29uc3Qg
Q09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVW5pb25EZWY7CiMgMjczMiAiLi4vb21uaU9SQjMvaXJf
ZGVmcy5oaCIKY2xhc3MgRW51bURlZiB7CnB1YmxpYzoKCiAgdHlwZWRlZiBFbnVtRGVmX3B0ciBf
cHRyX3R5cGU7CiAgdHlwZWRlZiBFbnVtRGVmX3ZhciBfdmFyX3R5cGU7CgogIHN0YXRpYyBfcHRy
X3R5cGUgX2R1cGxpY2F0ZShfcHRyX3R5cGUpOwogIHN0YXRpYyBfcHRyX3R5cGUgX25hcnJvdyhD
T1JCQTo6T2JqZWN0X3B0cik7CiAgc3RhdGljIF9wdHJfdHlwZSBfbmlsKCk7CgogIHN0YXRpYyBp
bmxpbmUgc2l6ZV90IF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIGlu
bGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsK
ICBzdGF0aWMgaW5saW5lIHZvaWQgX21hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJl
ZFN0cmVhbSYpOwoKICBzdGF0aWMgaW5saW5lIF9wdHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVmKE5l
dEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6
VW5NYXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMpOwogICAgX3B0cl90eXBlIHJlc3VsdCA9IF9u
YXJyb3cob2JqKTsKICAgIENPUkJBOjpyZWxlYXNlKG9iaik7CiAgICByZXR1cm4gcmVzdWx0Owog
IH0KCiAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3VubWFyc2hhbE9ialJlZihNZW1CdWZmZXJl
ZFN0cmVhbSYgcykgewogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqID0gQ09SQkE6OlVuTWFyc2hh
bE9ialJlZihfUERfcmVwb0lkLCBzKTsKICAgIF9wdHJfdHlwZSByZXN1bHQgPSBfbmFycm93KG9i
aik7CiAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0
YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOwoKCgp9OwoKY2xhc3MgX29ianJlZl9FbnVtRGVm
IDoKICBwdWJsaWMgdmlydHVhbCBfb2JqcmVmX1R5cGVkZWZEZWYKewpwdWJsaWM6CgogIEVudW1N
ZW1iZXJTZXEqIG1lbWJlcnMoKTsKICB2b2lkIG1lbWJlcnMoY29uc3QgRW51bU1lbWJlclNlcSYp
OwoKICBpbmxpbmUgX29ianJlZl9FbnVtRGVmKCkgeyBfUFJfc2V0b2JqKDApOyB9CiAgX29ianJl
Zl9FbnVtRGVmKGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0Kiwgb21uaUlkZW50
aXR5Kiwgb21uaUxvY2FsSWRlbnRpdHkqKTsKCnByb3RlY3RlZDoKICB2aXJ0dWFsIH5fb2JqcmVm
X0VudW1EZWYoKTsKCnByaXZhdGU6CiAgdmlydHVhbCB2b2lkKiBfcHRyVG9PYmpSZWYoY29uc3Qg
Y2hhciopOwoKICBfb2JqcmVmX0VudW1EZWYoY29uc3QgX29ianJlZl9FbnVtRGVmJik7CiAgX29i
anJlZl9FbnVtRGVmJiBvcGVyYXRvciA9IChjb25zdCBfb2JqcmVmX0VudW1EZWYmKTsKCn07Cgpj
bGFzcyBfcG9mX0VudW1EZWYgOiBwdWJsaWMgcHJveHlPYmplY3RGYWN0b3J5IHsKcHVibGljOgog
IGlubGluZSBfcG9mX0VudW1EZWYoKSA6IHByb3h5T2JqZWN0RmFjdG9yeShFbnVtRGVmOjpfUERf
cmVwb0lkKSB7fQogIHZpcnR1YWwgfl9wb2ZfRW51bURlZigpOwoKICB2aXJ0dWFsIG9tbmlPYmpS
ZWYqIG5ld09ialJlZihjb25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxlTGlzdCosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb21uaUlkZW50aXR5Kiwgb21uaUxvY2FsSWRlbnRp
dHkqKTsKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIGlzX2EoY29uc3QgY2hhciopIGNvbnN0Owp9
OwoKY2xhc3MgX2ltcGxfRW51bURlZiA6CiAgcHVibGljIHZpcnR1YWwgX2ltcGxfVHlwZWRlZkRl
Zgp7CnB1YmxpYzoKICB2aXJ0dWFsIH5faW1wbF9FbnVtRGVmKCk7CgogIHZpcnR1YWwgRW51bU1l
bWJlclNlcSogbWVtYmVycygpID0gMDsKICB2aXJ0dWFsIHZvaWQgbWVtYmVycyhjb25zdCBFbnVt
TWVtYmVyU2VxJikgPSAwOwoKcHVibGljOgogIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gX2Rpc3Bh
dGNoKEdJT1BfUyYpOwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9wdHJUb0ludGVyZmFjZShj
b25zdCBjaGFyKik7CiAgdmlydHVhbCBjb25zdCBjaGFyKiBfbW9zdERlcml2ZWRSZXBvSWQoKTsK
fTsKCmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19FbnVtRGVmOwojIDI4NDcg
Ii4uL29tbmlPUkIzL2lyX2RlZnMuaGgiCmNsYXNzIEFsaWFzRGVmIHsKcHVibGljOgoKICB0eXBl
ZGVmIEFsaWFzRGVmX3B0ciBfcHRyX3R5cGU7CiAgdHlwZWRlZiBBbGlhc0RlZl92YXIgX3Zhcl90
eXBlOwoKICBzdGF0aWMgX3B0cl90eXBlIF9kdXBsaWNhdGUoX3B0cl90eXBlKTsKICBzdGF0aWMg
X3B0cl90eXBlIF9uYXJyb3coQ09SQkE6Ok9iamVjdF9wdHIpOwogIHN0YXRpYyBfcHRyX3R5cGUg
X25pbCgpOwoKICBzdGF0aWMgaW5saW5lIHNpemVfdCBfYWxpZ25lZFNpemUoX3B0cl90eXBlLCBz
aXplX3QpOwogIHN0YXRpYyBpbmxpbmUgdm9pZCBfbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5l
dEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9w
dHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKCiAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUg
X3VubWFyc2hhbE9ialJlZihOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgQ09SQkE6Ok9iamVj
dF9wdHIgb2JqID0gQ09SQkE6OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBzKTsKICAgIF9w
dHJfdHlwZSByZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICBDT1JCQTo6cmVsZWFzZShvYmopOwog
ICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBpbmxpbmUgX3B0cl90eXBlIF91bm1hcnNo
YWxPYmpSZWYoTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIENPUkJBOjpPYmplY3RfcHRyIG9i
aiA9IENPUkJBOjpVbk1hcnNoYWxPYmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICBfcHRyX3R5cGUg
cmVzdWx0ID0gX25hcnJvdyhvYmopOwogICAgQ09SQkE6OnJlbGVhc2Uob2JqKTsKICAgIHJldHVy
biByZXN1bHQ7CiAgfQoKICBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsKCgoKfTsKCmNs
YXNzIF9vYmpyZWZfQWxpYXNEZWYgOgogIHB1YmxpYyB2aXJ0dWFsIF9vYmpyZWZfVHlwZWRlZkRl
Zgp7CnB1YmxpYzoKCiAgSURMVHlwZV9wdHIgb3JpZ2luYWxfdHlwZV9kZWYoKTsKICB2b2lkIG9y
aWdpbmFsX3R5cGVfZGVmKElETFR5cGVfcHRyKTsKCiAgaW5saW5lIF9vYmpyZWZfQWxpYXNEZWYo
KSB7IF9QUl9zZXRvYmooMCk7IH0KICBfb2JqcmVmX0FsaWFzRGVmKGNvbnN0IGNoYXIqLCBJT1A6
OlRhZ2dlZFByb2ZpbGVMaXN0Kiwgb21uaUlkZW50aXR5Kiwgb21uaUxvY2FsSWRlbnRpdHkqKTsK
CnByb3RlY3RlZDoKICB2aXJ0dWFsIH5fb2JqcmVmX0FsaWFzRGVmKCk7Cgpwcml2YXRlOgogIHZp
cnR1YWwgdm9pZCogX3B0clRvT2JqUmVmKGNvbnN0IGNoYXIqKTsKCiAgX29ianJlZl9BbGlhc0Rl
Zihjb25zdCBfb2JqcmVmX0FsaWFzRGVmJik7CiAgX29ianJlZl9BbGlhc0RlZiYgb3BlcmF0b3Ig
PSAoY29uc3QgX29ianJlZl9BbGlhc0RlZiYpOwoKfTsKCmNsYXNzIF9wb2ZfQWxpYXNEZWYgOiBw
dWJsaWMgcHJveHlPYmplY3RGYWN0b3J5IHsKcHVibGljOgogIGlubGluZSBfcG9mX0FsaWFzRGVm
KCkgOiBwcm94eU9iamVjdEZhY3RvcnkoQWxpYXNEZWY6Ol9QRF9yZXBvSWQpIHt9CiAgdmlydHVh
bCB+X3BvZl9BbGlhc0RlZigpOwoKICB2aXJ0dWFsIG9tbmlPYmpSZWYqIG5ld09ialJlZihjb25z
dCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxlTGlzdCosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb21uaUlkZW50aXR5Kiwgb21uaUxvY2FsSWRlbnRpdHkqKTsKICB2aXJ0dWFsIF9D
T1JCQV9Cb29sZWFuIGlzX2EoY29uc3QgY2hhciopIGNvbnN0Owp9OwoKY2xhc3MgX2ltcGxfQWxp
YXNEZWYgOgogIHB1YmxpYyB2aXJ0dWFsIF9pbXBsX1R5cGVkZWZEZWYKewpwdWJsaWM6CiAgdmly
dHVhbCB+X2ltcGxfQWxpYXNEZWYoKTsKCiAgdmlydHVhbCBJRExUeXBlX3B0ciBvcmlnaW5hbF90
eXBlX2RlZigpID0gMDsKICB2aXJ0dWFsIHZvaWQgb3JpZ2luYWxfdHlwZV9kZWYoSURMVHlwZV9w
dHIpID0gMDsKCnB1YmxpYzoKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIF9kaXNwYXRjaChHSU9Q
X1MmKTsKCnByaXZhdGU6CiAgdmlydHVhbCB2b2lkKiBfcHRyVG9JbnRlcmZhY2UoY29uc3QgY2hh
ciopOwogIHZpcnR1YWwgY29uc3QgY2hhciogX21vc3REZXJpdmVkUmVwb0lkKCk7Cn07CgpleHRl
cm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfQWxpYXNEZWY7CiMgMjk2MiAiLi4vb21u
aU9SQjMvaXJfZGVmcy5oaCIKY2xhc3MgTmF0aXZlRGVmIHsKcHVibGljOgoKICB0eXBlZGVmIE5h
dGl2ZURlZl9wdHIgX3B0cl90eXBlOwogIHR5cGVkZWYgTmF0aXZlRGVmX3ZhciBfdmFyX3R5cGU7
CgogIHN0YXRpYyBfcHRyX3R5cGUgX2R1cGxpY2F0ZShfcHRyX3R5cGUpOwogIHN0YXRpYyBfcHRy
X3R5cGUgX25hcnJvdyhDT1JCQTo6T2JqZWN0X3B0cik7CiAgc3RhdGljIF9wdHJfdHlwZSBfbmls
KCk7CgogIHN0YXRpYyBpbmxpbmUgc2l6ZV90IF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVf
dCk7CiAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVm
ZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgaW5saW5lIHZvaWQgX21hcnNoYWxPYmpSZWYoX3B0cl90
eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwoKICBzdGF0aWMgaW5saW5lIF9wdHJfdHlwZSBfdW5t
YXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBDT1JCQTo6T2JqZWN0X3B0
ciBvYmogPSBDT1JCQTo6VW5NYXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMpOwogICAgX3B0cl90
eXBlIHJlc3VsdCA9IF9uYXJyb3cob2JqKTsKICAgIENPUkJBOjpyZWxlYXNlKG9iaik7CiAgICBy
ZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3VubWFyc2hhbE9i
alJlZihNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqID0g
Q09SQkE6OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBzKTsKICAgIF9wdHJfdHlwZSByZXN1
bHQgPSBfbmFycm93KG9iaik7CiAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAgcmV0dXJuIHJl
c3VsdDsKICB9CgogIHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOwoKCgp9OwoKY2xhc3Mg
X29ianJlZl9OYXRpdmVEZWYgOgogIHB1YmxpYyB2aXJ0dWFsIF9vYmpyZWZfVHlwZWRlZkRlZgp7
CnB1YmxpYzoKCiAgaW5saW5lIF9vYmpyZWZfTmF0aXZlRGVmKCkgeyBfUFJfc2V0b2JqKDApOyB9
CiAgX29ianJlZl9OYXRpdmVEZWYoY29uc3QgY2hhciosIElPUDo6VGFnZ2VkUHJvZmlsZUxpc3Qq
LCBvbW5pSWRlbnRpdHkqLCBvbW5pTG9jYWxJZGVudGl0eSopOwoKcHJvdGVjdGVkOgogIHZpcnR1
YWwgfl9vYmpyZWZfTmF0aXZlRGVmKCk7Cgpwcml2YXRlOgogIHZpcnR1YWwgdm9pZCogX3B0clRv
T2JqUmVmKGNvbnN0IGNoYXIqKTsKCiAgX29ianJlZl9OYXRpdmVEZWYoY29uc3QgX29ianJlZl9O
YXRpdmVEZWYmKTsKICBfb2JqcmVmX05hdGl2ZURlZiYgb3BlcmF0b3IgPSAoY29uc3QgX29ianJl
Zl9OYXRpdmVEZWYmKTsKCn07CgpjbGFzcyBfcG9mX05hdGl2ZURlZiA6IHB1YmxpYyBwcm94eU9i
amVjdEZhY3RvcnkgewpwdWJsaWM6CiAgaW5saW5lIF9wb2ZfTmF0aXZlRGVmKCkgOiBwcm94eU9i
amVjdEZhY3RvcnkoTmF0aXZlRGVmOjpfUERfcmVwb0lkKSB7fQogIHZpcnR1YWwgfl9wb2ZfTmF0
aXZlRGVmKCk7CgogIHZpcnR1YWwgb21uaU9ialJlZiogbmV3T2JqUmVmKGNvbnN0IGNoYXIqLCBJ
T1A6OlRhZ2dlZFByb2ZpbGVMaXN0KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
bW5pSWRlbnRpdHkqLCBvbW5pTG9jYWxJZGVudGl0eSopOwogIHZpcnR1YWwgX0NPUkJBX0Jvb2xl
YW4gaXNfYShjb25zdCBjaGFyKikgY29uc3Q7Cn07CgpjbGFzcyBfaW1wbF9OYXRpdmVEZWYgOgog
IHB1YmxpYyB2aXJ0dWFsIF9pbXBsX1R5cGVkZWZEZWYKewpwdWJsaWM6CiAgdmlydHVhbCB+X2lt
cGxfTmF0aXZlRGVmKCk7CgpwdWJsaWM6CiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBfZGlzcGF0
Y2goR0lPUF9TJik7Cgpwcml2YXRlOgogIHZpcnR1YWwgdm9pZCogX3B0clRvSW50ZXJmYWNlKGNv
bnN0IGNoYXIqKTsKICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9tb3N0RGVyaXZlZFJlcG9JZCgpOwp9
OwoKZXh0ZXJuIGNvbnN0IENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX05hdGl2ZURlZjsKIyAzMDcx
ICIuLi9vbW5pT1JCMy9pcl9kZWZzLmhoIgpjbGFzcyBQcmltaXRpdmVEZWYgewpwdWJsaWM6Cgog
IHR5cGVkZWYgUHJpbWl0aXZlRGVmX3B0ciBfcHRyX3R5cGU7CiAgdHlwZWRlZiBQcmltaXRpdmVE
ZWZfdmFyIF92YXJfdHlwZTsKCiAgc3RhdGljIF9wdHJfdHlwZSBfZHVwbGljYXRlKF9wdHJfdHlw
ZSk7CiAgc3RhdGljIF9wdHJfdHlwZSBfbmFycm93KENPUkJBOjpPYmplY3RfcHRyKTsKICBzdGF0
aWMgX3B0cl90eXBlIF9uaWwoKTsKCiAgc3RhdGljIGlubGluZSBzaXplX3QgX2FsaWduZWRTaXpl
KF9wdHJfdHlwZSwgc2l6ZV90KTsKICBzdGF0aWMgaW5saW5lIHZvaWQgX21hcnNoYWxPYmpSZWYo
X3B0cl90eXBlLCBOZXRCdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyBpbmxpbmUgdm9pZCBfbWFy
c2hhbE9ialJlZihfcHRyX3R5cGUsIE1lbUJ1ZmZlcmVkU3RyZWFtJik7CgogIHN0YXRpYyBpbmxp
bmUgX3B0cl90eXBlIF91bm1hcnNoYWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICAg
IENPUkJBOjpPYmplY3RfcHRyIG9iaiA9IENPUkJBOjpVbk1hcnNoYWxPYmpSZWYoX1BEX3JlcG9J
ZCwgcyk7CiAgICBfcHRyX3R5cGUgcmVzdWx0ID0gX25hcnJvdyhvYmopOwogICAgQ09SQkE6OnJl
bGVhc2Uob2JqKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgaW5saW5lIF9wdHJf
dHlwZSBfdW5tYXJzaGFsT2JqUmVmKE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBDT1JCQTo6
T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMpOwog
ICAgX3B0cl90eXBlIHJlc3VsdCA9IF9uYXJyb3cob2JqKTsKICAgIENPUkJBOjpyZWxlYXNlKG9i
aik7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIGNvbnN0IGNoYXIqIF9QRF9yZXBv
SWQ7CgoKCn07CgpjbGFzcyBfb2JqcmVmX1ByaW1pdGl2ZURlZiA6CiAgcHVibGljIHZpcnR1YWwg
X29ianJlZl9JRExUeXBlCnsKcHVibGljOgoKICBQcmltaXRpdmVLaW5kIGtpbmQoKTsKCiAgaW5s
aW5lIF9vYmpyZWZfUHJpbWl0aXZlRGVmKCkgeyBfUFJfc2V0b2JqKDApOyB9CiAgX29ianJlZl9Q
cmltaXRpdmVEZWYoY29uc3QgY2hhciosIElPUDo6VGFnZ2VkUHJvZmlsZUxpc3QqLCBvbW5pSWRl
bnRpdHkqLCBvbW5pTG9jYWxJZGVudGl0eSopOwoKcHJvdGVjdGVkOgogIHZpcnR1YWwgfl9vYmpy
ZWZfUHJpbWl0aXZlRGVmKCk7Cgpwcml2YXRlOgogIHZpcnR1YWwgdm9pZCogX3B0clRvT2JqUmVm
KGNvbnN0IGNoYXIqKTsKCiAgX29ianJlZl9QcmltaXRpdmVEZWYoY29uc3QgX29ianJlZl9Qcmlt
aXRpdmVEZWYmKTsKICBfb2JqcmVmX1ByaW1pdGl2ZURlZiYgb3BlcmF0b3IgPSAoY29uc3QgX29i
anJlZl9QcmltaXRpdmVEZWYmKTsKCn07CgpjbGFzcyBfcG9mX1ByaW1pdGl2ZURlZiA6IHB1Ymxp
YyBwcm94eU9iamVjdEZhY3RvcnkgewpwdWJsaWM6CiAgaW5saW5lIF9wb2ZfUHJpbWl0aXZlRGVm
KCkgOiBwcm94eU9iamVjdEZhY3RvcnkoUHJpbWl0aXZlRGVmOjpfUERfcmVwb0lkKSB7fQogIHZp
cnR1YWwgfl9wb2ZfUHJpbWl0aXZlRGVmKCk7CgogIHZpcnR1YWwgb21uaU9ialJlZiogbmV3T2Jq
UmVmKGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0KiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvbW5pSWRlbnRpdHkqLCBvbW5pTG9jYWxJZGVudGl0eSopOwogIHZp
cnR1YWwgX0NPUkJBX0Jvb2xlYW4gaXNfYShjb25zdCBjaGFyKikgY29uc3Q7Cn07CgpjbGFzcyBf
aW1wbF9QcmltaXRpdmVEZWYgOgogIHB1YmxpYyB2aXJ0dWFsIF9pbXBsX0lETFR5cGUKewpwdWJs
aWM6CiAgdmlydHVhbCB+X2ltcGxfUHJpbWl0aXZlRGVmKCk7CgogIHZpcnR1YWwgUHJpbWl0aXZl
S2luZCBraW5kKCkgPSAwOwoKcHVibGljOgogIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gX2Rpc3Bh
dGNoKEdJT1BfUyYpOwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9wdHJUb0ludGVyZmFjZShj
b25zdCBjaGFyKik7CiAgdmlydHVhbCBjb25zdCBjaGFyKiBfbW9zdERlcml2ZWRSZXBvSWQoKTsK
fTsKCmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19QcmltaXRpdmVEZWY7CiMg
MzE4NCAiLi4vb21uaU9SQjMvaXJfZGVmcy5oaCIKY2xhc3MgU3RyaW5nRGVmIHsKcHVibGljOgoK
ICB0eXBlZGVmIFN0cmluZ0RlZl9wdHIgX3B0cl90eXBlOwogIHR5cGVkZWYgU3RyaW5nRGVmX3Zh
ciBfdmFyX3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5cGUgX2R1cGxpY2F0ZShfcHRyX3R5cGUpOwog
IHN0YXRpYyBfcHRyX3R5cGUgX25hcnJvdyhDT1JCQTo6T2JqZWN0X3B0cik7CiAgc3RhdGljIF9w
dHJfdHlwZSBfbmlsKCk7CgogIHN0YXRpYyBpbmxpbmUgc2l6ZV90IF9hbGlnbmVkU2l6ZShfcHRy
X3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJf
dHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgaW5saW5lIHZvaWQgX21hcnNoYWxP
YmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwoKICBzdGF0aWMgaW5saW5lIF9w
dHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBDT1JC
QTo6T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMp
OwogICAgX3B0cl90eXBlIHJlc3VsdCA9IF9uYXJyb3cob2JqKTsKICAgIENPUkJBOjpyZWxlYXNl
KG9iaik7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUg
X3VubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgQ09SQkE6Ok9iamVj
dF9wdHIgb2JqID0gQ09SQkE6OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBzKTsKICAgIF9w
dHJfdHlwZSByZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICBDT1JCQTo6cmVsZWFzZShvYmopOwog
ICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOwoK
Cgp9OwoKY2xhc3MgX29ianJlZl9TdHJpbmdEZWYgOgogIHB1YmxpYyB2aXJ0dWFsIF9vYmpyZWZf
SURMVHlwZQp7CnB1YmxpYzoKCiAgQ09SQkE6OlVMb25nIGJvdW5kKCk7CiAgdm9pZCBib3VuZChD
T1JCQTo6VUxvbmcpOwoKICBpbmxpbmUgX29ianJlZl9TdHJpbmdEZWYoKSB7IF9QUl9zZXRvYmoo
MCk7IH0KICBfb2JqcmVmX1N0cmluZ0RlZihjb25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxl
TGlzdCosIG9tbmlJZGVudGl0eSosIG9tbmlMb2NhbElkZW50aXR5Kik7Cgpwcm90ZWN0ZWQ6CiAg
dmlydHVhbCB+X29ianJlZl9TdHJpbmdEZWYoKTsKCnByaXZhdGU6CiAgdmlydHVhbCB2b2lkKiBf
cHRyVG9PYmpSZWYoY29uc3QgY2hhciopOwoKICBfb2JqcmVmX1N0cmluZ0RlZihjb25zdCBfb2Jq
cmVmX1N0cmluZ0RlZiYpOwogIF9vYmpyZWZfU3RyaW5nRGVmJiBvcGVyYXRvciA9IChjb25zdCBf
b2JqcmVmX1N0cmluZ0RlZiYpOwoKfTsKCmNsYXNzIF9wb2ZfU3RyaW5nRGVmIDogcHVibGljIHBy
b3h5T2JqZWN0RmFjdG9yeSB7CnB1YmxpYzoKICBpbmxpbmUgX3BvZl9TdHJpbmdEZWYoKSA6IHBy
b3h5T2JqZWN0RmFjdG9yeShTdHJpbmdEZWY6Ol9QRF9yZXBvSWQpIHt9CiAgdmlydHVhbCB+X3Bv
Zl9TdHJpbmdEZWYoKTsKCiAgdmlydHVhbCBvbW5pT2JqUmVmKiBuZXdPYmpSZWYoY29uc3QgY2hh
ciosIElPUDo6VGFnZ2VkUHJvZmlsZUxpc3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9tbmlJZGVudGl0eSosIG9tbmlMb2NhbElkZW50aXR5Kik7CiAgdmlydHVhbCBfQ09SQkFf
Qm9vbGVhbiBpc19hKGNvbnN0IGNoYXIqKSBjb25zdDsKfTsKCmNsYXNzIF9pbXBsX1N0cmluZ0Rl
ZiA6CiAgcHVibGljIHZpcnR1YWwgX2ltcGxfSURMVHlwZQp7CnB1YmxpYzoKICB2aXJ0dWFsIH5f
aW1wbF9TdHJpbmdEZWYoKTsKCiAgdmlydHVhbCBDT1JCQTo6VUxvbmcgYm91bmQoKSA9IDA7CiAg
dmlydHVhbCB2b2lkIGJvdW5kKENPUkJBOjpVTG9uZykgPSAwOwoKcHVibGljOgogIHZpcnR1YWwg
X0NPUkJBX0Jvb2xlYW4gX2Rpc3BhdGNoKEdJT1BfUyYpOwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZv
aWQqIF9wdHJUb0ludGVyZmFjZShjb25zdCBjaGFyKik7CiAgdmlydHVhbCBjb25zdCBjaGFyKiBf
bW9zdERlcml2ZWRSZXBvSWQoKTsKfTsKCmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRy
IF90Y19TdHJpbmdEZWY7CiMgMzI5OSAiLi4vb21uaU9SQjMvaXJfZGVmcy5oaCIKY2xhc3MgV3N0
cmluZ0RlZiB7CnB1YmxpYzoKCiAgdHlwZWRlZiBXc3RyaW5nRGVmX3B0ciBfcHRyX3R5cGU7CiAg
dHlwZWRlZiBXc3RyaW5nRGVmX3ZhciBfdmFyX3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5cGUgX2R1
cGxpY2F0ZShfcHRyX3R5cGUpOwogIHN0YXRpYyBfcHRyX3R5cGUgX25hcnJvdyhDT1JCQTo6T2Jq
ZWN0X3B0cik7CiAgc3RhdGljIF9wdHJfdHlwZSBfbmlsKCk7CgogIHN0YXRpYyBpbmxpbmUgc2l6
ZV90IF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIGlubGluZSB2b2lk
IF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMg
aW5saW5lIHZvaWQgX21hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYp
OwoKICBzdGF0aWMgaW5saW5lIF9wdHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVk
U3RyZWFtJiBzKSB7CiAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJzaGFs
T2JqUmVmKF9QRF9yZXBvSWQsIHMpOwogICAgX3B0cl90eXBlIHJlc3VsdCA9IF9uYXJyb3cob2Jq
KTsKICAgIENPUkJBOjpyZWxlYXNlKG9iaik7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3Rh
dGljIGlubGluZSBfcHRyX3R5cGUgX3VubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYg
cykgewogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqID0gQ09SQkE6OlVuTWFyc2hhbE9ialJlZihf
UERfcmVwb0lkLCBzKTsKICAgIF9wdHJfdHlwZSByZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICBD
T1JCQTo6cmVsZWFzZShvYmopOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBjb25z
dCBjaGFyKiBfUERfcmVwb0lkOwoKCgp9OwoKY2xhc3MgX29ianJlZl9Xc3RyaW5nRGVmIDoKICBw
dWJsaWMgdmlydHVhbCBfb2JqcmVmX0lETFR5cGUKewpwdWJsaWM6CgogIENPUkJBOjpVTG9uZyBi
b3VuZCgpOwogIHZvaWQgYm91bmQoQ09SQkE6OlVMb25nKTsKCiAgaW5saW5lIF9vYmpyZWZfV3N0
cmluZ0RlZigpIHsgX1BSX3NldG9iaigwKTsgfQogIF9vYmpyZWZfV3N0cmluZ0RlZihjb25zdCBj
aGFyKiwgSU9QOjpUYWdnZWRQcm9maWxlTGlzdCosIG9tbmlJZGVudGl0eSosIG9tbmlMb2NhbElk
ZW50aXR5Kik7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCB+X29ianJlZl9Xc3RyaW5nRGVmKCk7Cgpw
cml2YXRlOgogIHZpcnR1YWwgdm9pZCogX3B0clRvT2JqUmVmKGNvbnN0IGNoYXIqKTsKCiAgX29i
anJlZl9Xc3RyaW5nRGVmKGNvbnN0IF9vYmpyZWZfV3N0cmluZ0RlZiYpOwogIF9vYmpyZWZfV3N0
cmluZ0RlZiYgb3BlcmF0b3IgPSAoY29uc3QgX29ianJlZl9Xc3RyaW5nRGVmJik7Cgp9OwoKY2xh
c3MgX3BvZl9Xc3RyaW5nRGVmIDogcHVibGljIHByb3h5T2JqZWN0RmFjdG9yeSB7CnB1YmxpYzoK
ICBpbmxpbmUgX3BvZl9Xc3RyaW5nRGVmKCkgOiBwcm94eU9iamVjdEZhY3RvcnkoV3N0cmluZ0Rl
Zjo6X1BEX3JlcG9JZCkge30KICB2aXJ0dWFsIH5fcG9mX1dzdHJpbmdEZWYoKTsKCiAgdmlydHVh
bCBvbW5pT2JqUmVmKiBuZXdPYmpSZWYoY29uc3QgY2hhciosIElPUDo6VGFnZ2VkUHJvZmlsZUxp
c3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9tbmlJZGVudGl0eSosIG9tbmlM
b2NhbElkZW50aXR5Kik7CiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBpc19hKGNvbnN0IGNoYXIq
KSBjb25zdDsKfTsKCmNsYXNzIF9pbXBsX1dzdHJpbmdEZWYgOgogIHB1YmxpYyB2aXJ0dWFsIF9p
bXBsX0lETFR5cGUKewpwdWJsaWM6CiAgdmlydHVhbCB+X2ltcGxfV3N0cmluZ0RlZigpOwoKICB2
aXJ0dWFsIENPUkJBOjpVTG9uZyBib3VuZCgpID0gMDsKICB2aXJ0dWFsIHZvaWQgYm91bmQoQ09S
QkE6OlVMb25nKSA9IDA7CgpwdWJsaWM6CiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBfZGlzcGF0
Y2goR0lPUF9TJik7Cgpwcml2YXRlOgogIHZpcnR1YWwgdm9pZCogX3B0clRvSW50ZXJmYWNlKGNv
bnN0IGNoYXIqKTsKICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9tb3N0RGVyaXZlZFJlcG9JZCgpOwp9
OwoKZXh0ZXJuIGNvbnN0IENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1dzdHJpbmdEZWY7CiMgMzQx
NCAiLi4vb21uaU9SQjMvaXJfZGVmcy5oaCIKY2xhc3MgRml4ZWREZWYgewpwdWJsaWM6CgogIHR5
cGVkZWYgRml4ZWREZWZfcHRyIF9wdHJfdHlwZTsKICB0eXBlZGVmIEZpeGVkRGVmX3ZhciBfdmFy
X3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5cGUgX2R1cGxpY2F0ZShfcHRyX3R5cGUpOwogIHN0YXRp
YyBfcHRyX3R5cGUgX25hcnJvdyhDT1JCQTo6T2JqZWN0X3B0cik7CiAgc3RhdGljIF9wdHJfdHlw
ZSBfbmlsKCk7CgogIHN0YXRpYyBpbmxpbmUgc2l6ZV90IF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUs
IHNpemVfdCk7CiAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwg
TmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgaW5saW5lIHZvaWQgX21hcnNoYWxPYmpSZWYo
X3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwoKICBzdGF0aWMgaW5saW5lIF9wdHJfdHlw
ZSBfdW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBDT1JCQTo6T2Jq
ZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMpOwogICAg
X3B0cl90eXBlIHJlc3VsdCA9IF9uYXJyb3cob2JqKTsKICAgIENPUkJBOjpyZWxlYXNlKG9iaik7
CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3VubWFy
c2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgQ09SQkE6Ok9iamVjdF9wdHIg
b2JqID0gQ09SQkE6OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBzKTsKICAgIF9wdHJfdHlw
ZSByZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAgcmV0
dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOwoKCgp9OwoK
Y2xhc3MgX29ianJlZl9GaXhlZERlZiA6CiAgcHVibGljIHZpcnR1YWwgX29ianJlZl9JRExUeXBl
CnsKcHVibGljOgoKICBDT1JCQTo6VVNob3J0IGRpZ2l0cygpOwogIHZvaWQgZGlnaXRzKENPUkJB
OjpVU2hvcnQpOwogIENPUkJBOjpTaG9ydCBzY2FsZSgpOwogIHZvaWQgc2NhbGUoQ09SQkE6OlNo
b3J0KTsKCiAgaW5saW5lIF9vYmpyZWZfRml4ZWREZWYoKSB7IF9QUl9zZXRvYmooMCk7IH0KICBf
b2JqcmVmX0ZpeGVkRGVmKGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0Kiwgb21u
aUlkZW50aXR5Kiwgb21uaUxvY2FsSWRlbnRpdHkqKTsKCnByb3RlY3RlZDoKICB2aXJ0dWFsIH5f
b2JqcmVmX0ZpeGVkRGVmKCk7Cgpwcml2YXRlOgogIHZpcnR1YWwgdm9pZCogX3B0clRvT2JqUmVm
KGNvbnN0IGNoYXIqKTsKCiAgX29ianJlZl9GaXhlZERlZihjb25zdCBfb2JqcmVmX0ZpeGVkRGVm
Jik7CiAgX29ianJlZl9GaXhlZERlZiYgb3BlcmF0b3IgPSAoY29uc3QgX29ianJlZl9GaXhlZERl
ZiYpOwoKfTsKCmNsYXNzIF9wb2ZfRml4ZWREZWYgOiBwdWJsaWMgcHJveHlPYmplY3RGYWN0b3J5
IHsKcHVibGljOgogIGlubGluZSBfcG9mX0ZpeGVkRGVmKCkgOiBwcm94eU9iamVjdEZhY3Rvcnko
Rml4ZWREZWY6Ol9QRF9yZXBvSWQpIHt9CiAgdmlydHVhbCB+X3BvZl9GaXhlZERlZigpOwoKICB2
aXJ0dWFsIG9tbmlPYmpSZWYqIG5ld09ialJlZihjb25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9m
aWxlTGlzdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb21uaUlkZW50aXR5Kiwg
b21uaUxvY2FsSWRlbnRpdHkqKTsKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIGlzX2EoY29uc3Qg
Y2hhciopIGNvbnN0Owp9OwoKY2xhc3MgX2ltcGxfRml4ZWREZWYgOgogIHB1YmxpYyB2aXJ0dWFs
IF9pbXBsX0lETFR5cGUKewpwdWJsaWM6CiAgdmlydHVhbCB+X2ltcGxfRml4ZWREZWYoKTsKCiAg
dmlydHVhbCBDT1JCQTo6VVNob3J0IGRpZ2l0cygpID0gMDsKICB2aXJ0dWFsIHZvaWQgZGlnaXRz
KENPUkJBOjpVU2hvcnQpID0gMDsKICB2aXJ0dWFsIENPUkJBOjpTaG9ydCBzY2FsZSgpID0gMDsK
ICB2aXJ0dWFsIHZvaWQgc2NhbGUoQ09SQkE6OlNob3J0KSA9IDA7CgpwdWJsaWM6CiAgdmlydHVh
bCBfQ09SQkFfQm9vbGVhbiBfZGlzcGF0Y2goR0lPUF9TJik7Cgpwcml2YXRlOgogIHZpcnR1YWwg
dm9pZCogX3B0clRvSW50ZXJmYWNlKGNvbnN0IGNoYXIqKTsKICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IF9tb3N0RGVyaXZlZFJlcG9JZCgpOwp9OwoKZXh0ZXJuIGNvbnN0IENPUkJBOjpUeXBlQ29kZV9w
dHIgX3RjX0ZpeGVkRGVmOwojIDM1MzMgIi4uL29tbmlPUkIzL2lyX2RlZnMuaGgiCmNsYXNzIFNl
cXVlbmNlRGVmIHsKcHVibGljOgoKICB0eXBlZGVmIFNlcXVlbmNlRGVmX3B0ciBfcHRyX3R5cGU7
CiAgdHlwZWRlZiBTZXF1ZW5jZURlZl92YXIgX3Zhcl90eXBlOwoKICBzdGF0aWMgX3B0cl90eXBl
IF9kdXBsaWNhdGUoX3B0cl90eXBlKTsKICBzdGF0aWMgX3B0cl90eXBlIF9uYXJyb3coQ09SQkE6
Ok9iamVjdF9wdHIpOwogIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwoKICBzdGF0aWMgaW5saW5l
IHNpemVfdCBfYWxpZ25lZFNpemUoX3B0cl90eXBlLCBzaXplX3QpOwogIHN0YXRpYyBpbmxpbmUg
dm9pZCBfbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3Rh
dGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJl
YW0mKTsKCiAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3VubWFyc2hhbE9ialJlZihOZXRCdWZm
ZXJlZFN0cmVhbSYgcykgewogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqID0gQ09SQkE6OlVuTWFy
c2hhbE9ialJlZihfUERfcmVwb0lkLCBzKTsKICAgIF9wdHJfdHlwZSByZXN1bHQgPSBfbmFycm93
KG9iaik7CiAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cgog
IHN0YXRpYyBpbmxpbmUgX3B0cl90eXBlIF91bm1hcnNoYWxPYmpSZWYoTWVtQnVmZmVyZWRTdHJl
YW0mIHMpIHsKICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiA9IENPUkJBOjpVbk1hcnNoYWxPYmpS
ZWYoX1BEX3JlcG9JZCwgcyk7CiAgICBfcHRyX3R5cGUgcmVzdWx0ID0gX25hcnJvdyhvYmopOwog
ICAgQ09SQkE6OnJlbGVhc2Uob2JqKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMg
Y29uc3QgY2hhciogX1BEX3JlcG9JZDsKCgoKfTsKCmNsYXNzIF9vYmpyZWZfU2VxdWVuY2VEZWYg
OgogIHB1YmxpYyB2aXJ0dWFsIF9vYmpyZWZfSURMVHlwZQp7CnB1YmxpYzoKCiAgQ09SQkE6OlVM
b25nIGJvdW5kKCk7CiAgdm9pZCBib3VuZChDT1JCQTo6VUxvbmcpOwogIENPUkJBOjpUeXBlQ29k
ZV9wdHIgZWxlbWVudF90eXBlKCk7CiAgSURMVHlwZV9wdHIgZWxlbWVudF90eXBlX2RlZigpOwog
IHZvaWQgZWxlbWVudF90eXBlX2RlZihJRExUeXBlX3B0cik7CgogIGlubGluZSBfb2JqcmVmX1Nl
cXVlbmNlRGVmKCkgeyBfUFJfc2V0b2JqKDApOyB9CiAgX29ianJlZl9TZXF1ZW5jZURlZihjb25z
dCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxlTGlzdCosIG9tbmlJZGVudGl0eSosIG9tbmlMb2Nh
bElkZW50aXR5Kik7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCB+X29ianJlZl9TZXF1ZW5jZURlZigp
OwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9wdHJUb09ialJlZihjb25zdCBjaGFyKik7Cgog
IF9vYmpyZWZfU2VxdWVuY2VEZWYoY29uc3QgX29ianJlZl9TZXF1ZW5jZURlZiYpOwogIF9vYmpy
ZWZfU2VxdWVuY2VEZWYmIG9wZXJhdG9yID0gKGNvbnN0IF9vYmpyZWZfU2VxdWVuY2VEZWYmKTsK
Cn07CgpjbGFzcyBfcG9mX1NlcXVlbmNlRGVmIDogcHVibGljIHByb3h5T2JqZWN0RmFjdG9yeSB7
CnB1YmxpYzoKICBpbmxpbmUgX3BvZl9TZXF1ZW5jZURlZigpIDogcHJveHlPYmplY3RGYWN0b3J5
KFNlcXVlbmNlRGVmOjpfUERfcmVwb0lkKSB7fQogIHZpcnR1YWwgfl9wb2ZfU2VxdWVuY2VEZWYo
KTsKCiAgdmlydHVhbCBvbW5pT2JqUmVmKiBuZXdPYmpSZWYoY29uc3QgY2hhciosIElPUDo6VGFn
Z2VkUHJvZmlsZUxpc3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9tbmlJZGVu
dGl0eSosIG9tbmlMb2NhbElkZW50aXR5Kik7CiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBpc19h
KGNvbnN0IGNoYXIqKSBjb25zdDsKfTsKCmNsYXNzIF9pbXBsX1NlcXVlbmNlRGVmIDoKICBwdWJs
aWMgdmlydHVhbCBfaW1wbF9JRExUeXBlCnsKcHVibGljOgogIHZpcnR1YWwgfl9pbXBsX1NlcXVl
bmNlRGVmKCk7CgogIHZpcnR1YWwgQ09SQkE6OlVMb25nIGJvdW5kKCkgPSAwOwogIHZpcnR1YWwg
dm9pZCBib3VuZChDT1JCQTo6VUxvbmcpID0gMDsKICB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9w
dHIgZWxlbWVudF90eXBlKCkgPSAwOwogIHZpcnR1YWwgSURMVHlwZV9wdHIgZWxlbWVudF90eXBl
X2RlZigpID0gMDsKICB2aXJ0dWFsIHZvaWQgZWxlbWVudF90eXBlX2RlZihJRExUeXBlX3B0cikg
PSAwOwoKcHVibGljOgogIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gX2Rpc3BhdGNoKEdJT1BfUyYp
OwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9wdHJUb0ludGVyZmFjZShjb25zdCBjaGFyKik7
CiAgdmlydHVhbCBjb25zdCBjaGFyKiBfbW9zdERlcml2ZWRSZXBvSWQoKTsKfTsKCmV4dGVybiBj
b25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19TZXF1ZW5jZURlZjsKIyAzNjU0ICIuLi9vbW5p
T1JCMy9pcl9kZWZzLmhoIgpjbGFzcyBBcnJheURlZiB7CnB1YmxpYzoKCiAgdHlwZWRlZiBBcnJh
eURlZl9wdHIgX3B0cl90eXBlOwogIHR5cGVkZWYgQXJyYXlEZWZfdmFyIF92YXJfdHlwZTsKCiAg
c3RhdGljIF9wdHJfdHlwZSBfZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgc3RhdGljIF9wdHJfdHlw
ZSBfbmFycm93KENPUkJBOjpPYmplY3RfcHRyKTsKICBzdGF0aWMgX3B0cl90eXBlIF9uaWwoKTsK
CiAgc3RhdGljIGlubGluZSBzaXplX3QgX2FsaWduZWRTaXplKF9wdHJfdHlwZSwgc2l6ZV90KTsK
ICBzdGF0aWMgaW5saW5lIHZvaWQgX21hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBOZXRCdWZmZXJl
ZFN0cmVhbSYpOwogIHN0YXRpYyBpbmxpbmUgdm9pZCBfbWFyc2hhbE9ialJlZihfcHRyX3R5cGUs
IE1lbUJ1ZmZlcmVkU3RyZWFtJik7CgogIHN0YXRpYyBpbmxpbmUgX3B0cl90eXBlIF91bm1hcnNo
YWxPYmpSZWYoTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIENPUkJBOjpPYmplY3RfcHRyIG9i
aiA9IENPUkJBOjpVbk1hcnNoYWxPYmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICBfcHRyX3R5cGUg
cmVzdWx0ID0gX25hcnJvdyhvYmopOwogICAgQ09SQkE6OnJlbGVhc2Uob2JqKTsKICAgIHJldHVy
biByZXN1bHQ7CiAgfQoKICBzdGF0aWMgaW5saW5lIF9wdHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVm
KE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmogPSBDT1JC
QTo6VW5NYXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMpOwogICAgX3B0cl90eXBlIHJlc3VsdCA9
IF9uYXJyb3cob2JqKTsKICAgIENPUkJBOjpyZWxlYXNlKG9iaik7CiAgICByZXR1cm4gcmVzdWx0
OwogIH0KCiAgc3RhdGljIGNvbnN0IGNoYXIqIF9QRF9yZXBvSWQ7CgoKCn07CgpjbGFzcyBfb2Jq
cmVmX0FycmF5RGVmIDoKICBwdWJsaWMgdmlydHVhbCBfb2JqcmVmX0lETFR5cGUKewpwdWJsaWM6
CgogIENPUkJBOjpVTG9uZyBsZW5ndGgoKTsKICB2b2lkIGxlbmd0aChDT1JCQTo6VUxvbmcpOwog
IENPUkJBOjpUeXBlQ29kZV9wdHIgZWxlbWVudF90eXBlKCk7CiAgSURMVHlwZV9wdHIgZWxlbWVu
dF90eXBlX2RlZigpOwogIHZvaWQgZWxlbWVudF90eXBlX2RlZihJRExUeXBlX3B0cik7CgogIGlu
bGluZSBfb2JqcmVmX0FycmF5RGVmKCkgeyBfUFJfc2V0b2JqKDApOyB9CiAgX29ianJlZl9BcnJh
eURlZihjb25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxlTGlzdCosIG9tbmlJZGVudGl0eSos
IG9tbmlMb2NhbElkZW50aXR5Kik7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCB+X29ianJlZl9BcnJh
eURlZigpOwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9wdHJUb09ialJlZihjb25zdCBjaGFy
Kik7CgogIF9vYmpyZWZfQXJyYXlEZWYoY29uc3QgX29ianJlZl9BcnJheURlZiYpOwogIF9vYmpy
ZWZfQXJyYXlEZWYmIG9wZXJhdG9yID0gKGNvbnN0IF9vYmpyZWZfQXJyYXlEZWYmKTsKCn07Cgpj
bGFzcyBfcG9mX0FycmF5RGVmIDogcHVibGljIHByb3h5T2JqZWN0RmFjdG9yeSB7CnB1YmxpYzoK
ICBpbmxpbmUgX3BvZl9BcnJheURlZigpIDogcHJveHlPYmplY3RGYWN0b3J5KEFycmF5RGVmOjpf
UERfcmVwb0lkKSB7fQogIHZpcnR1YWwgfl9wb2ZfQXJyYXlEZWYoKTsKCiAgdmlydHVhbCBvbW5p
T2JqUmVmKiBuZXdPYmpSZWYoY29uc3QgY2hhciosIElPUDo6VGFnZ2VkUHJvZmlsZUxpc3QqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9tbmlJZGVudGl0eSosIG9tbmlMb2NhbElk
ZW50aXR5Kik7CiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBpc19hKGNvbnN0IGNoYXIqKSBjb25z
dDsKfTsKCmNsYXNzIF9pbXBsX0FycmF5RGVmIDoKICBwdWJsaWMgdmlydHVhbCBfaW1wbF9JRExU
eXBlCnsKcHVibGljOgogIHZpcnR1YWwgfl9pbXBsX0FycmF5RGVmKCk7CgogIHZpcnR1YWwgQ09S
QkE6OlVMb25nIGxlbmd0aCgpID0gMDsKICB2aXJ0dWFsIHZvaWQgbGVuZ3RoKENPUkJBOjpVTG9u
ZykgPSAwOwogIHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBlbGVtZW50X3R5cGUoKSA9IDA7
CiAgdmlydHVhbCBJRExUeXBlX3B0ciBlbGVtZW50X3R5cGVfZGVmKCkgPSAwOwogIHZpcnR1YWwg
dm9pZCBlbGVtZW50X3R5cGVfZGVmKElETFR5cGVfcHRyKSA9IDA7CgpwdWJsaWM6CiAgdmlydHVh
bCBfQ09SQkFfQm9vbGVhbiBfZGlzcGF0Y2goR0lPUF9TJik7Cgpwcml2YXRlOgogIHZpcnR1YWwg
dm9pZCogX3B0clRvSW50ZXJmYWNlKGNvbnN0IGNoYXIqKTsKICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IF9tb3N0RGVyaXZlZFJlcG9JZCgpOwp9OwoKZXh0ZXJuIGNvbnN0IENPUkJBOjpUeXBlQ29kZV9w
dHIgX3RjX0FycmF5RGVmOwojIDM3NzUgIi4uL29tbmlPUkIzL2lyX2RlZnMuaGgiCmNsYXNzIEV4
Y2VwdGlvbkRlZiB7CnB1YmxpYzoKCiAgdHlwZWRlZiBFeGNlcHRpb25EZWZfcHRyIF9wdHJfdHlw
ZTsKICB0eXBlZGVmIEV4Y2VwdGlvbkRlZl92YXIgX3Zhcl90eXBlOwoKICBzdGF0aWMgX3B0cl90
eXBlIF9kdXBsaWNhdGUoX3B0cl90eXBlKTsKICBzdGF0aWMgX3B0cl90eXBlIF9uYXJyb3coQ09S
QkE6Ok9iamVjdF9wdHIpOwogIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwoKICBzdGF0aWMgaW5s
aW5lIHNpemVfdCBfYWxpZ25lZFNpemUoX3B0cl90eXBlLCBzaXplX3QpOwogIHN0YXRpYyBpbmxp
bmUgdm9pZCBfbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAg
c3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRT
dHJlYW0mKTsKCiAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3VubWFyc2hhbE9ialJlZihOZXRC
dWZmZXJlZFN0cmVhbSYgcykgewogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqID0gQ09SQkE6OlVu
TWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBzKTsKICAgIF9wdHJfdHlwZSByZXN1bHQgPSBfbmFy
cm93KG9iaik7CiAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAgcmV0dXJuIHJlc3VsdDsKICB9
CgogIHN0YXRpYyBpbmxpbmUgX3B0cl90eXBlIF91bm1hcnNoYWxPYmpSZWYoTWVtQnVmZmVyZWRT
dHJlYW0mIHMpIHsKICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiA9IENPUkJBOjpVbk1hcnNoYWxP
YmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICBfcHRyX3R5cGUgcmVzdWx0ID0gX25hcnJvdyhvYmop
OwogICAgQ09SQkE6OnJlbGVhc2Uob2JqKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0
aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsKCgoKfTsKCmNsYXNzIF9vYmpyZWZfRXhjZXB0aW9u
RGVmIDoKICBwdWJsaWMgdmlydHVhbCBfb2JqcmVmX0NvbnRhaW5lZCwKICBwdWJsaWMgdmlydHVh
bCBfb2JqcmVmX0NvbnRhaW5lcgp7CnB1YmxpYzoKCiAgQ09SQkE6OlR5cGVDb2RlX3B0ciB0eXBl
KCk7CiAgU3RydWN0TWVtYmVyU2VxKiBtZW1iZXJzKCk7CiAgdm9pZCBtZW1iZXJzKGNvbnN0IFN0
cnVjdE1lbWJlclNlcSYpOwoKICBpbmxpbmUgX29ianJlZl9FeGNlcHRpb25EZWYoKSB7IF9QUl9z
ZXRvYmooMCk7IH0KICBfb2JqcmVmX0V4Y2VwdGlvbkRlZihjb25zdCBjaGFyKiwgSU9QOjpUYWdn
ZWRQcm9maWxlTGlzdCosIG9tbmlJZGVudGl0eSosIG9tbmlMb2NhbElkZW50aXR5Kik7Cgpwcm90
ZWN0ZWQ6CiAgdmlydHVhbCB+X29ianJlZl9FeGNlcHRpb25EZWYoKTsKCnByaXZhdGU6CiAgdmly
dHVhbCB2b2lkKiBfcHRyVG9PYmpSZWYoY29uc3QgY2hhciopOwoKICBfb2JqcmVmX0V4Y2VwdGlv
bkRlZihjb25zdCBfb2JqcmVmX0V4Y2VwdGlvbkRlZiYpOwogIF9vYmpyZWZfRXhjZXB0aW9uRGVm
JiBvcGVyYXRvciA9IChjb25zdCBfb2JqcmVmX0V4Y2VwdGlvbkRlZiYpOwoKfTsKCmNsYXNzIF9w
b2ZfRXhjZXB0aW9uRGVmIDogcHVibGljIHByb3h5T2JqZWN0RmFjdG9yeSB7CnB1YmxpYzoKICBp
bmxpbmUgX3BvZl9FeGNlcHRpb25EZWYoKSA6IHByb3h5T2JqZWN0RmFjdG9yeShFeGNlcHRpb25E
ZWY6Ol9QRF9yZXBvSWQpIHt9CiAgdmlydHVhbCB+X3BvZl9FeGNlcHRpb25EZWYoKTsKCiAgdmly
dHVhbCBvbW5pT2JqUmVmKiBuZXdPYmpSZWYoY29uc3QgY2hhciosIElPUDo6VGFnZ2VkUHJvZmls
ZUxpc3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9tbmlJZGVudGl0eSosIG9t
bmlMb2NhbElkZW50aXR5Kik7CiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBpc19hKGNvbnN0IGNo
YXIqKSBjb25zdDsKfTsKCmNsYXNzIF9pbXBsX0V4Y2VwdGlvbkRlZiA6CiAgcHVibGljIHZpcnR1
YWwgX2ltcGxfQ29udGFpbmVkLAogIHB1YmxpYyB2aXJ0dWFsIF9pbXBsX0NvbnRhaW5lcgp7CnB1
YmxpYzoKICB2aXJ0dWFsIH5faW1wbF9FeGNlcHRpb25EZWYoKTsKCiAgdmlydHVhbCBDT1JCQTo6
VHlwZUNvZGVfcHRyIHR5cGUoKSA9IDA7CiAgdmlydHVhbCBTdHJ1Y3RNZW1iZXJTZXEqIG1lbWJl
cnMoKSA9IDA7CiAgdmlydHVhbCB2b2lkIG1lbWJlcnMoY29uc3QgU3RydWN0TWVtYmVyU2VxJikg
PSAwOwoKcHVibGljOgogIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gX2Rpc3BhdGNoKEdJT1BfUyYp
OwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9wdHJUb0ludGVyZmFjZShjb25zdCBjaGFyKik7
CiAgdmlydHVhbCBjb25zdCBjaGFyKiBfbW9zdERlcml2ZWRSZXBvSWQoKTsKfTsKCmV4dGVybiBj
b25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19FeGNlcHRpb25EZWY7CgpzdHJ1Y3QgRXhjZXB0
aW9uRGVzY3JpcHRpb24gewogIHR5cGVkZWYgX0NPUkJBX0NvbnN0clR5cGVfVmFyaWFibGVfVmFy
PEV4Y2VwdGlvbkRlc2NyaXB0aW9uPiBfdmFyX3R5cGU7CgogIENPUkJBOjpTdHJpbmdfbWVtYmVy
IG5hbWU7CgogIENPUkJBOjpTdHJpbmdfbWVtYmVyIGlkOwoKICBDT1JCQTo6U3RyaW5nX21lbWJl
ciBkZWZpbmVkX2luOwoKICBDT1JCQTo6U3RyaW5nX21lbWJlciB2ZXJzaW9uOwoKICBDT1JCQTo6
VHlwZUNvZGVfbWVtYmVyIHR5cGU7CgogIHNpemVfdCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90IGlu
aXRpYWxvZmZzZXQpIGNvbnN0OwogIHZvaWQgb3BlcmF0b3I+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFt
ICYpIGNvbnN0OwogIHZvaWQgb3BlcmF0b3I8PD0gKE5ldEJ1ZmZlcmVkU3RyZWFtICYpOwogIHZv
aWQgb3BlcmF0b3I+Pj0gKE1lbUJ1ZmZlcmVkU3RyZWFtICYpIGNvbnN0OwogIHZvaWQgb3BlcmF0
b3I8PD0gKE1lbUJ1ZmZlcmVkU3RyZWFtICYpOwp9OwoKdHlwZWRlZiBFeGNlcHRpb25EZXNjcmlw
dGlvbjo6X3Zhcl90eXBlIEV4Y2VwdGlvbkRlc2NyaXB0aW9uX3ZhcjsKCnR5cGVkZWYgX0NPUkJB
X0NvbnN0clR5cGVfVmFyaWFibGVfT1VUX2FyZzwgRXhjZXB0aW9uRGVzY3JpcHRpb24sRXhjZXB0
aW9uRGVzY3JpcHRpb25fdmFyID4gRXhjZXB0aW9uRGVzY3JpcHRpb25fb3V0OwoKZXh0ZXJuIGNv
bnN0IENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0V4Y2VwdGlvbkRlc2NyaXB0aW9uOwoKZW51bSBB
dHRyaWJ1dGVNb2RlIHsgQVRUUl9OT1JNQUwsIEFUVFJfUkVBRE9OTFkgfTsKdHlwZWRlZiBBdHRy
aWJ1dGVNb2RlJiBBdHRyaWJ1dGVNb2RlX291dDsKCmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNv
ZGVfcHRyIF90Y19BdHRyaWJ1dGVNb2RlOwoKCgoKY2xhc3MgQXR0cmlidXRlRGVmOwpjbGFzcyBf
b2JqcmVmX0F0dHJpYnV0ZURlZjsKY2xhc3MgX2ltcGxfQXR0cmlidXRlRGVmOwoKdHlwZWRlZiBf
b2JqcmVmX0F0dHJpYnV0ZURlZiogQXR0cmlidXRlRGVmX3B0cjsKdHlwZWRlZiBBdHRyaWJ1dGVE
ZWZfcHRyIEF0dHJpYnV0ZURlZlJlZjsKCmNsYXNzIEF0dHJpYnV0ZURlZl9IZWxwZXIgewpwdWJs
aWM6CiAgdHlwZWRlZiBBdHRyaWJ1dGVEZWZfcHRyIF9wdHJfdHlwZTsKCiAgc3RhdGljIF9wdHJf
dHlwZSBfbmlsKCk7CiAgc3RhdGljIF9DT1JCQV9Cb29sZWFuIGlzX25pbChfcHRyX3R5cGUpOwog
IHN0YXRpYyB2b2lkIHJlbGVhc2UoX3B0cl90eXBlKTsKICBzdGF0aWMgdm9pZCBkdXBsaWNhdGUo
X3B0cl90eXBlKTsKICBzdGF0aWMgc2l6ZV90IE5QX2FsaWduZWRTaXplKF9wdHJfdHlwZSwgc2l6
ZV90KTsKICBzdGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRT
dHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihOZXRCdWZmZXJlZFN0
cmVhbSYpOwogIHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJl
ZFN0cmVhbSYpOwogIHN0YXRpYyBfcHRyX3R5cGUgdW5tYXJzaGFsT2JqUmVmKE1lbUJ1ZmZlcmVk
U3RyZWFtJik7Cn07Cgp0eXBlZGVmIF9DT1JCQV9PYmpSZWZfVmFyPF9vYmpyZWZfQXR0cmlidXRl
RGVmLCBBdHRyaWJ1dGVEZWZfSGVscGVyPiBBdHRyaWJ1dGVEZWZfdmFyOwp0eXBlZGVmIF9DT1JC
QV9PYmpSZWZfT1VUX2FyZzxfb2JqcmVmX0F0dHJpYnV0ZURlZixBdHRyaWJ1dGVEZWZfSGVscGVy
ID4gQXR0cmlidXRlRGVmX291dDsKCgoKY2xhc3MgQXR0cmlidXRlRGVmIHsKcHVibGljOgoKICB0
eXBlZGVmIEF0dHJpYnV0ZURlZl9wdHIgX3B0cl90eXBlOwogIHR5cGVkZWYgQXR0cmlidXRlRGVm
X3ZhciBfdmFyX3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5cGUgX2R1cGxpY2F0ZShfcHRyX3R5cGUp
OwogIHN0YXRpYyBfcHRyX3R5cGUgX25hcnJvdyhDT1JCQTo6T2JqZWN0X3B0cik7CiAgc3RhdGlj
IF9wdHJfdHlwZSBfbmlsKCk7CgogIHN0YXRpYyBpbmxpbmUgc2l6ZV90IF9hbGlnbmVkU2l6ZShf
cHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9w
dHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgaW5saW5lIHZvaWQgX21hcnNo
YWxPYmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwoKICBzdGF0aWMgaW5saW5l
IF9wdHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBD
T1JCQTo6T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQs
IHMpOwogICAgX3B0cl90eXBlIHJlc3VsdCA9IF9uYXJyb3cob2JqKTsKICAgIENPUkJBOjpyZWxl
YXNlKG9iaik7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIGlubGluZSBfcHRyX3R5
cGUgX3VubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgQ09SQkE6Ok9i
amVjdF9wdHIgb2JqID0gQ09SQkE6OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBzKTsKICAg
IF9wdHJfdHlwZSByZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICBDT1JCQTo6cmVsZWFzZShvYmop
OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lk
OwoKCgp9OwoKY2xhc3MgX29ianJlZl9BdHRyaWJ1dGVEZWYgOgogIHB1YmxpYyB2aXJ0dWFsIF9v
YmpyZWZfQ29udGFpbmVkCnsKcHVibGljOgoKICBDT1JCQTo6VHlwZUNvZGVfcHRyIHR5cGUoKTsK
ICBJRExUeXBlX3B0ciB0eXBlX2RlZigpOwogIHZvaWQgdHlwZV9kZWYoSURMVHlwZV9wdHIpOwog
IEF0dHJpYnV0ZU1vZGUgbW9kZSgpOwogIHZvaWQgbW9kZShBdHRyaWJ1dGVNb2RlKTsKCiAgaW5s
aW5lIF9vYmpyZWZfQXR0cmlidXRlRGVmKCkgeyBfUFJfc2V0b2JqKDApOyB9CiAgX29ianJlZl9B
dHRyaWJ1dGVEZWYoY29uc3QgY2hhciosIElPUDo6VGFnZ2VkUHJvZmlsZUxpc3QqLCBvbW5pSWRl
bnRpdHkqLCBvbW5pTG9jYWxJZGVudGl0eSopOwoKcHJvdGVjdGVkOgogIHZpcnR1YWwgfl9vYmpy
ZWZfQXR0cmlidXRlRGVmKCk7Cgpwcml2YXRlOgogIHZpcnR1YWwgdm9pZCogX3B0clRvT2JqUmVm
KGNvbnN0IGNoYXIqKTsKCiAgX29ianJlZl9BdHRyaWJ1dGVEZWYoY29uc3QgX29ianJlZl9BdHRy
aWJ1dGVEZWYmKTsKICBfb2JqcmVmX0F0dHJpYnV0ZURlZiYgb3BlcmF0b3IgPSAoY29uc3QgX29i
anJlZl9BdHRyaWJ1dGVEZWYmKTsKCn07CgpjbGFzcyBfcG9mX0F0dHJpYnV0ZURlZiA6IHB1Ymxp
YyBwcm94eU9iamVjdEZhY3RvcnkgewpwdWJsaWM6CiAgaW5saW5lIF9wb2ZfQXR0cmlidXRlRGVm
KCkgOiBwcm94eU9iamVjdEZhY3RvcnkoQXR0cmlidXRlRGVmOjpfUERfcmVwb0lkKSB7fQogIHZp
cnR1YWwgfl9wb2ZfQXR0cmlidXRlRGVmKCk7CgogIHZpcnR1YWwgb21uaU9ialJlZiogbmV3T2Jq
UmVmKGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0KiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvbW5pSWRlbnRpdHkqLCBvbW5pTG9jYWxJZGVudGl0eSopOwogIHZp
cnR1YWwgX0NPUkJBX0Jvb2xlYW4gaXNfYShjb25zdCBjaGFyKikgY29uc3Q7Cn07CgpjbGFzcyBf
aW1wbF9BdHRyaWJ1dGVEZWYgOgogIHB1YmxpYyB2aXJ0dWFsIF9pbXBsX0NvbnRhaW5lZAp7CnB1
YmxpYzoKICB2aXJ0dWFsIH5faW1wbF9BdHRyaWJ1dGVEZWYoKTsKCiAgdmlydHVhbCBDT1JCQTo6
VHlwZUNvZGVfcHRyIHR5cGUoKSA9IDA7CiAgdmlydHVhbCBJRExUeXBlX3B0ciB0eXBlX2RlZigp
ID0gMDsKICB2aXJ0dWFsIHZvaWQgdHlwZV9kZWYoSURMVHlwZV9wdHIpID0gMDsKICB2aXJ0dWFs
IEF0dHJpYnV0ZU1vZGUgbW9kZSgpID0gMDsKICB2aXJ0dWFsIHZvaWQgbW9kZShBdHRyaWJ1dGVN
b2RlKSA9IDA7CgpwdWJsaWM6CiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBfZGlzcGF0Y2goR0lP
UF9TJik7Cgpwcml2YXRlOgogIHZpcnR1YWwgdm9pZCogX3B0clRvSW50ZXJmYWNlKGNvbnN0IGNo
YXIqKTsKICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9tb3N0RGVyaXZlZFJlcG9JZCgpOwp9OwoKZXh0
ZXJuIGNvbnN0IENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0F0dHJpYnV0ZURlZjsKCnN0cnVjdCBB
dHRyaWJ1dGVEZXNjcmlwdGlvbiB7CiAgdHlwZWRlZiBfQ09SQkFfQ29uc3RyVHlwZV9WYXJpYWJs
ZV9WYXI8QXR0cmlidXRlRGVzY3JpcHRpb24+IF92YXJfdHlwZTsKCiAgQ09SQkE6OlN0cmluZ19t
ZW1iZXIgbmFtZTsKCiAgQ09SQkE6OlN0cmluZ19tZW1iZXIgaWQ7CgogIENPUkJBOjpTdHJpbmdf
bWVtYmVyIGRlZmluZWRfaW47CgogIENPUkJBOjpTdHJpbmdfbWVtYmVyIHZlcnNpb247CgogIENP
UkJBOjpUeXBlQ29kZV9tZW1iZXIgdHlwZTsKCiAgQXR0cmlidXRlTW9kZSBtb2RlOwoKICBzaXpl
X3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBpbml0aWFsb2Zmc2V0KSBjb25zdDsKICB2b2lkIG9w
ZXJhdG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSAmKSBjb25zdDsKICB2b2lkIG9wZXJhdG9yPDw9
IChOZXRCdWZmZXJlZFN0cmVhbSAmKTsKICB2b2lkIG9wZXJhdG9yPj49IChNZW1CdWZmZXJlZFN0
cmVhbSAmKSBjb25zdDsKICB2b2lkIG9wZXJhdG9yPDw9IChNZW1CdWZmZXJlZFN0cmVhbSAmKTsK
fTsKCnR5cGVkZWYgQXR0cmlidXRlRGVzY3JpcHRpb246Ol92YXJfdHlwZSBBdHRyaWJ1dGVEZXNj
cmlwdGlvbl92YXI7Cgp0eXBlZGVmIF9DT1JCQV9Db25zdHJUeXBlX1ZhcmlhYmxlX09VVF9hcmc8
IEF0dHJpYnV0ZURlc2NyaXB0aW9uLEF0dHJpYnV0ZURlc2NyaXB0aW9uX3ZhciA+IEF0dHJpYnV0
ZURlc2NyaXB0aW9uX291dDsKCmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19B
dHRyaWJ1dGVEZXNjcmlwdGlvbjsKCmVudW0gT3BlcmF0aW9uTW9kZSB7IE9QX05PUk1BTCwgT1Bf
T05FV0FZIH07CnR5cGVkZWYgT3BlcmF0aW9uTW9kZSYgT3BlcmF0aW9uTW9kZV9vdXQ7CgpleHRl
cm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfT3BlcmF0aW9uTW9kZTsKCmVudW0gUGFy
YW1ldGVyTW9kZSB7IFBBUkFNX0lOLCBQQVJBTV9PVVQsIFBBUkFNX0lOT1VUIH07CnR5cGVkZWYg
UGFyYW1ldGVyTW9kZSYgUGFyYW1ldGVyTW9kZV9vdXQ7CgpleHRlcm4gY29uc3QgQ09SQkE6OlR5
cGVDb2RlX3B0ciBfdGNfUGFyYW1ldGVyTW9kZTsKCnN0cnVjdCBQYXJhbWV0ZXJEZXNjcmlwdGlv
biB7CiAgdHlwZWRlZiBfQ09SQkFfQ29uc3RyVHlwZV9WYXJpYWJsZV9WYXI8UGFyYW1ldGVyRGVz
Y3JpcHRpb24+IF92YXJfdHlwZTsKCiAgQ09SQkE6OlN0cmluZ19tZW1iZXIgbmFtZTsKCiAgQ09S
QkE6OlR5cGVDb2RlX21lbWJlciB0eXBlOwoKICBfQ09SQkFfT2JqUmVmX01lbWJlcjwgX29ianJl
Zl9JRExUeXBlLCBJRExUeXBlX0hlbHBlcj4gdHlwZV9kZWY7CgogIFBhcmFtZXRlck1vZGUgbW9k
ZTsKCiAgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3QgaW5pdGlhbG9mZnNldCkgY29uc3Q7
CiAgdm9pZCBvcGVyYXRvcj4+PSAoTmV0QnVmZmVyZWRTdHJlYW0gJikgY29uc3Q7CiAgdm9pZCBv
cGVyYXRvcjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0gJik7CiAgdm9pZCBvcGVyYXRvcj4+PSAoTWVt
QnVmZmVyZWRTdHJlYW0gJikgY29uc3Q7CiAgdm9pZCBvcGVyYXRvcjw8PSAoTWVtQnVmZmVyZWRT
dHJlYW0gJik7Cn07Cgp0eXBlZGVmIFBhcmFtZXRlckRlc2NyaXB0aW9uOjpfdmFyX3R5cGUgUGFy
YW1ldGVyRGVzY3JpcHRpb25fdmFyOwoKdHlwZWRlZiBfQ09SQkFfQ29uc3RyVHlwZV9WYXJpYWJs
ZV9PVVRfYXJnPCBQYXJhbWV0ZXJEZXNjcmlwdGlvbixQYXJhbWV0ZXJEZXNjcmlwdGlvbl92YXIg
PiBQYXJhbWV0ZXJEZXNjcmlwdGlvbl9vdXQ7CgpleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2Rl
X3B0ciBfdGNfUGFyYW1ldGVyRGVzY3JpcHRpb247CgpleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVD
b2RlX3B0ciBfdGNfUGFyRGVzY3JpcHRpb25TZXE7CgpjbGFzcyBQYXJEZXNjcmlwdGlvblNlcV92
YXI7CgpjbGFzcyBQYXJEZXNjcmlwdGlvblNlcSA6IHB1YmxpYyBfQ09SQkFfVW5ib3VuZGVkX1Nl
cXVlbmNlPCBQYXJhbWV0ZXJEZXNjcmlwdGlvbj4gewpwdWJsaWM6CiAgdHlwZWRlZiBQYXJEZXNj
cmlwdGlvblNlcV92YXIgX3Zhcl90eXBlOwogIGlubGluZSBQYXJEZXNjcmlwdGlvblNlcSgpIHt9
CiAgaW5saW5lIFBhckRlc2NyaXB0aW9uU2VxKGNvbnN0IFBhckRlc2NyaXB0aW9uU2VxJiBzKQog
ICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlPCBQYXJhbWV0ZXJEZXNjcmlwdGlvbj4gKHMp
IHt9CgogIGlubGluZSBQYXJEZXNjcmlwdGlvblNlcShfQ09SQkFfVUxvbmcgX21heCkKICAgIDog
X0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZTwgUGFyYW1ldGVyRGVzY3JpcHRpb24+IChfbWF4KSB7
fQogIGlubGluZSBQYXJEZXNjcmlwdGlvblNlcShfQ09SQkFfVUxvbmcgX21heCwgX0NPUkJBX1VM
b25nIF9sZW4sIFBhcmFtZXRlckRlc2NyaXB0aW9uKiBfdmFsLCBfQ09SQkFfQm9vbGVhbiBfcmVs
PTApCiAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8IFBhcmFtZXRlckRlc2NyaXB0aW9u
PiAoX21heCwgX2xlbiwgX3ZhbCwgX3JlbCkge30KCiAgaW5saW5lIFBhckRlc2NyaXB0aW9uU2Vx
JiBvcGVyYXRvciA9IChjb25zdCBQYXJEZXNjcmlwdGlvblNlcSYgcykgewogICAgX0NPUkJBX1Vu
Ym91bmRlZF9TZXF1ZW5jZTwgUGFyYW1ldGVyRGVzY3JpcHRpb24+IDo6b3BlcmF0b3I9KHMpOwog
ICAgcmV0dXJuICp0aGlzOwogIH0KfTsKCmNsYXNzIFBhckRlc2NyaXB0aW9uU2VxX291dDsKCmNs
YXNzIFBhckRlc2NyaXB0aW9uU2VxX3ZhciB7CnB1YmxpYzoKICB0eXBlZGVmIFBhckRlc2NyaXB0
aW9uU2VxIFQ7CiAgdHlwZWRlZiBQYXJEZXNjcmlwdGlvblNlcV92YXIgVF92YXI7CgogIGlubGlu
ZSBQYXJEZXNjcmlwdGlvblNlcV92YXIoKSA6IF9wZF9zZXEoMCkge30KICBpbmxpbmUgUGFyRGVz
Y3JpcHRpb25TZXFfdmFyKFQqIHMpIDogX3BkX3NlcShzKSB7fQogIGlubGluZSBQYXJEZXNjcmlw
dGlvblNlcV92YXIoY29uc3QgVF92YXImIHMpIHsKICAgIGlmKCBzLl9wZF9zZXEgKSBfcGRfc2Vx
ID0gbmV3IFQoKnMuX3BkX3NlcSk7CiAgICBlbHNlIF9wZF9zZXEgPSAwOwogIH0KICBpbmxpbmUg
flBhckRlc2NyaXB0aW9uU2VxX3ZhcigpIHsgaWYoIF9wZF9zZXEgKSBkZWxldGUgX3BkX3NlcTsg
fQoKICBpbmxpbmUgVF92YXImIG9wZXJhdG9yID0gKFQqIHMpIHsKICAgIGlmKCBfcGRfc2VxICkg
ZGVsZXRlIF9wZF9zZXE7CiAgICBfcGRfc2VxID0gczsKICAgIHJldHVybiAqdGhpczsKICB9CiAg
aW5saW5lIFRfdmFyJiBvcGVyYXRvciA9IChjb25zdCBUX3ZhciYgcykgewogICAgaWYoIHMuX3Bk
X3NlcSApIHsKICAgICAgaWYoICFfcGRfc2VxICkgX3BkX3NlcSA9IG5ldyBUOwogICAgICAqX3Bk
X3NlcSA9ICpzLl9wZF9zZXE7CiAgICB9IGVsc2UgaWYoIF9wZF9zZXEgKSB7CiAgICAgIGRlbGV0
ZSBfcGRfc2VxOwogICAgICBfcGRfc2VxID0gMDsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9
CgogIGlubGluZSBQYXJhbWV0ZXJEZXNjcmlwdGlvbiYgb3BlcmF0b3IgW10gKF9DT1JCQV9VTG9u
ZyBzKSB7CiAgICByZXR1cm4gKCpfcGRfc2VxKVtzXTsKICB9CgogIGlubGluZSBUKiBvcGVyYXRv
ciAtPiAoKSB7IHJldHVybiBfcGRfc2VxOyB9CgoKCiAgaW5saW5lIG9wZXJhdG9yIGNvbnN0IFQm
ICgpIGNvbnN0IHsgcmV0dXJuICpfcGRfc2VxOyB9CiAgaW5saW5lIG9wZXJhdG9yIFQmICgpIHsg
cmV0dXJuICpfcGRfc2VxOyB9CgoKICBpbmxpbmUgY29uc3QgVCYgaW4oKSBjb25zdCB7IHJldHVy
biAqX3BkX3NlcTsgfQogIGlubGluZSBUJiBpbm91dCgpIHsgcmV0dXJuICpfcGRfc2VxOyB9CiAg
aW5saW5lIFQqJiBvdXQoKSB7CiAgICBpZiggX3BkX3NlcSApIHsgZGVsZXRlIF9wZF9zZXE7IF9w
ZF9zZXEgPSAwOyB9CiAgICByZXR1cm4gX3BkX3NlcTsKICB9CiAgaW5saW5lIFQqIF9yZXRuKCkg
eyBUKiB0bXAgPSBfcGRfc2VxOyBfcGRfc2VxID0gMDsgcmV0dXJuIHRtcDsgfQoKICBmcmllbmQg
Y2xhc3MgUGFyRGVzY3JpcHRpb25TZXFfb3V0OwoKcHJpdmF0ZToKICBUKiBfcGRfc2VxOwp9OwoK
Y2xhc3MgUGFyRGVzY3JpcHRpb25TZXFfb3V0IHsKcHVibGljOgogIHR5cGVkZWYgUGFyRGVzY3Jp
cHRpb25TZXEgVDsKICB0eXBlZGVmIFBhckRlc2NyaXB0aW9uU2VxX3ZhciBUX3ZhcjsKCiAgaW5s
aW5lIFBhckRlc2NyaXB0aW9uU2VxX291dChUKiYgcykgOiBfZGF0YShzKSB7IF9kYXRhID0gMDsg
fQogIGlubGluZSBQYXJEZXNjcmlwdGlvblNlcV9vdXQoVF92YXImIHMpCiAgICA6IF9kYXRhKHMu
X3BkX3NlcSkgeyBzID0gKFQqKSAwOyB9CiAgaW5saW5lIFBhckRlc2NyaXB0aW9uU2VxX291dChj
b25zdCBQYXJEZXNjcmlwdGlvblNlcV9vdXQmIHMpIDogX2RhdGEocy5fZGF0YSkge30KICBpbmxp
bmUgUGFyRGVzY3JpcHRpb25TZXFfb3V0JiBvcGVyYXRvciA9IChjb25zdCBQYXJEZXNjcmlwdGlv
blNlcV9vdXQmIHMpIHsKICAgIF9kYXRhID0gcy5fZGF0YTsKICAgIHJldHVybiAqdGhpczsKICB9
IGlubGluZSBQYXJEZXNjcmlwdGlvblNlcV9vdXQmIG9wZXJhdG9yID0gKFQqIHMpIHsKICAgIF9k
YXRhID0gczsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5saW5lIG9wZXJhdG9yIFQqJigpIHsg
cmV0dXJuIF9kYXRhOyB9CiAgaW5saW5lIFQqJiBwdHIoKSB7IHJldHVybiBfZGF0YTsgfQogIGlu
bGluZSBUKiBvcGVyYXRvci0+KCkgeyByZXR1cm4gX2RhdGE7IH0KCiAgaW5saW5lIFBhcmFtZXRl
ckRlc2NyaXB0aW9uJiBvcGVyYXRvciBbXSAoX0NPUkJBX1VMb25nIGkpIHsKICAgIHJldHVybiAo
Kl9kYXRhKVtpXTsKICB9CgogIFQqJiBfZGF0YTsKCnByaXZhdGU6CiAgUGFyRGVzY3JpcHRpb25T
ZXFfb3V0KCk7CiAgUGFyRGVzY3JpcHRpb25TZXFfb3V0JiBvcGVyYXRvcj0oY29uc3QgVF92YXIm
KTsKfTsKCmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Db250ZXh0SWRlbnRp
ZmllcjsKCnR5cGVkZWYgY2hhciogQ29udGV4dElkZW50aWZpZXI7CnR5cGVkZWYgQ09SQkE6OlN0
cmluZ192YXIgQ29udGV4dElkZW50aWZpZXJfdmFyOwoKZXh0ZXJuIGNvbnN0IENPUkJBOjpUeXBl
Q29kZV9wdHIgX3RjX0NvbnRleHRJZFNlcTsKCmNsYXNzIENvbnRleHRJZFNlcV92YXI7CgpjbGFz
cyBDb250ZXh0SWRTZXEgOiBwdWJsaWMgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fU3RyaW5n
IHsKcHVibGljOgogIHR5cGVkZWYgQ29udGV4dElkU2VxX3ZhciBfdmFyX3R5cGU7CiAgaW5saW5l
IENvbnRleHRJZFNlcSgpIHt9CiAgaW5saW5lIENvbnRleHRJZFNlcShjb25zdCBDb250ZXh0SWRT
ZXEmIHMpCiAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX1N0cmluZyhzKSB7fQoKICBp
bmxpbmUgQ29udGV4dElkU2VxKF9DT1JCQV9VTG9uZyBfbWF4KQogICAgOiBfQ09SQkFfVW5ib3Vu
ZGVkX1NlcXVlbmNlX19TdHJpbmcoX21heCkge30KICBpbmxpbmUgQ29udGV4dElkU2VxKF9DT1JC
QV9VTG9uZyBfbWF4LCBfQ09SQkFfVUxvbmcgX2xlbiwgY2hhcioqIF92YWwsIF9DT1JCQV9Cb29s
ZWFuIF9yZWw9MCkKICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fU3RyaW5nKF9tYXgs
IF9sZW4sIF92YWwsIF9yZWwpIHt9CgogIGlubGluZSBDb250ZXh0SWRTZXEmIG9wZXJhdG9yID0g
KGNvbnN0IENvbnRleHRJZFNlcSYgcykgewogICAgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9f
U3RyaW5nOjpvcGVyYXRvcj0ocyk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQp9OwoKY2xhc3MgQ29u
dGV4dElkU2VxX291dDsKCmNsYXNzIENvbnRleHRJZFNlcV92YXIgewpwdWJsaWM6CiAgdHlwZWRl
ZiBDb250ZXh0SWRTZXEgVDsKICB0eXBlZGVmIENvbnRleHRJZFNlcV92YXIgVF92YXI7CgogIGlu
bGluZSBDb250ZXh0SWRTZXFfdmFyKCkgOiBfcGRfc2VxKDApIHt9CiAgaW5saW5lIENvbnRleHRJ
ZFNlcV92YXIoVCogcykgOiBfcGRfc2VxKHMpIHt9CiAgaW5saW5lIENvbnRleHRJZFNlcV92YXIo
Y29uc3QgVF92YXImIHMpIHsKICAgIGlmKCBzLl9wZF9zZXEgKSBfcGRfc2VxID0gbmV3IFQoKnMu
X3BkX3NlcSk7CiAgICBlbHNlIF9wZF9zZXEgPSAwOwogIH0KICBpbmxpbmUgfkNvbnRleHRJZFNl
cV92YXIoKSB7IGlmKCBfcGRfc2VxICkgZGVsZXRlIF9wZF9zZXE7IH0KCiAgaW5saW5lIFRfdmFy
JiBvcGVyYXRvciA9IChUKiBzKSB7CiAgICBpZiggX3BkX3NlcSApIGRlbGV0ZSBfcGRfc2VxOwog
ICAgX3BkX3NlcSA9IHM7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGlubGluZSBUX3ZhciYgb3Bl
cmF0b3IgPSAoY29uc3QgVF92YXImIHMpIHsKICAgIGlmKCBzLl9wZF9zZXEgKSB7CiAgICAgIGlm
KCAhX3BkX3NlcSApIF9wZF9zZXEgPSBuZXcgVDsKICAgICAgKl9wZF9zZXEgPSAqcy5fcGRfc2Vx
OwogICAgfSBlbHNlIGlmKCBfcGRfc2VxICkgewogICAgICBkZWxldGUgX3BkX3NlcTsKICAgICAg
X3BkX3NlcSA9IDA7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgX0NPUkJB
X1N0cmluZ19lbGVtZW50IG9wZXJhdG9yIFtdIChfQ09SQkFfVUxvbmcgcykgewogICAgcmV0dXJu
ICgqX3BkX3NlcSlbc107CiAgfQoKICBpbmxpbmUgVCogb3BlcmF0b3IgLT4gKCkgeyByZXR1cm4g
X3BkX3NlcTsgfQoKCgogIGlubGluZSBvcGVyYXRvciBjb25zdCBUJiAoKSBjb25zdCB7IHJldHVy
biAqX3BkX3NlcTsgfQogIGlubGluZSBvcGVyYXRvciBUJiAoKSB7IHJldHVybiAqX3BkX3NlcTsg
fQoKCiAgaW5saW5lIGNvbnN0IFQmIGluKCkgY29uc3QgeyByZXR1cm4gKl9wZF9zZXE7IH0KICBp
bmxpbmUgVCYgaW5vdXQoKSB7IHJldHVybiAqX3BkX3NlcTsgfQogIGlubGluZSBUKiYgb3V0KCkg
ewogICAgaWYoIF9wZF9zZXEgKSB7IGRlbGV0ZSBfcGRfc2VxOyBfcGRfc2VxID0gMDsgfQogICAg
cmV0dXJuIF9wZF9zZXE7CiAgfQogIGlubGluZSBUKiBfcmV0bigpIHsgVCogdG1wID0gX3BkX3Nl
cTsgX3BkX3NlcSA9IDA7IHJldHVybiB0bXA7IH0KCiAgZnJpZW5kIGNsYXNzIENvbnRleHRJZFNl
cV9vdXQ7Cgpwcml2YXRlOgogIFQqIF9wZF9zZXE7Cn07CgpjbGFzcyBDb250ZXh0SWRTZXFfb3V0
IHsKcHVibGljOgogIHR5cGVkZWYgQ29udGV4dElkU2VxIFQ7CiAgdHlwZWRlZiBDb250ZXh0SWRT
ZXFfdmFyIFRfdmFyOwoKICBpbmxpbmUgQ29udGV4dElkU2VxX291dChUKiYgcykgOiBfZGF0YShz
KSB7IF9kYXRhID0gMDsgfQogIGlubGluZSBDb250ZXh0SWRTZXFfb3V0KFRfdmFyJiBzKQogICAg
OiBfZGF0YShzLl9wZF9zZXEpIHsgcyA9IChUKikgMDsgfQogIGlubGluZSBDb250ZXh0SWRTZXFf
b3V0KGNvbnN0IENvbnRleHRJZFNlcV9vdXQmIHMpIDogX2RhdGEocy5fZGF0YSkge30KICBpbmxp
bmUgQ29udGV4dElkU2VxX291dCYgb3BlcmF0b3IgPSAoY29uc3QgQ29udGV4dElkU2VxX291dCYg
cykgewogICAgX2RhdGEgPSBzLl9kYXRhOwogICAgcmV0dXJuICp0aGlzOwogIH0gaW5saW5lIENv
bnRleHRJZFNlcV9vdXQmIG9wZXJhdG9yID0gKFQqIHMpIHsKICAgIF9kYXRhID0gczsKICAgIHJl
dHVybiAqdGhpczsKICB9CiAgaW5saW5lIG9wZXJhdG9yIFQqJigpIHsgcmV0dXJuIF9kYXRhOyB9
CiAgaW5saW5lIFQqJiBwdHIoKSB7IHJldHVybiBfZGF0YTsgfQogIGlubGluZSBUKiBvcGVyYXRv
ci0+KCkgeyByZXR1cm4gX2RhdGE7IH0KCiAgaW5saW5lIF9DT1JCQV9TdHJpbmdfZWxlbWVudCBv
cGVyYXRvciBbXSAoX0NPUkJBX1VMb25nIGkpIHsKICAgIHJldHVybiAoKl9kYXRhKVtpXTsKICB9
CgogIFQqJiBfZGF0YTsKCnByaXZhdGU6CiAgQ29udGV4dElkU2VxX291dCgpOwogIENvbnRleHRJ
ZFNlcV9vdXQmIG9wZXJhdG9yPShjb25zdCBUX3ZhciYpOwp9OwoKZXh0ZXJuIGNvbnN0IENPUkJB
OjpUeXBlQ29kZV9wdHIgX3RjX0V4Y2VwdGlvbkRlZlNlcTsKCmNsYXNzIEV4Y2VwdGlvbkRlZlNl
cV92YXI7CgpjbGFzcyBFeGNlcHRpb25EZWZTZXEgOiBwdWJsaWMgX0NPUkJBX1VuYm91bmRlZF9T
ZXF1ZW5jZV9PYmpSZWY8IF9vYmpyZWZfRXhjZXB0aW9uRGVmLCBfQ09SQkFfT2JqUmVmX0VsZW1l
bnQ8IF9vYmpyZWZfRXhjZXB0aW9uRGVmLCBFeGNlcHRpb25EZWZfSGVscGVyPiAsIEV4Y2VwdGlv
bkRlZl9IZWxwZXI+IHsKcHVibGljOgogIHR5cGVkZWYgRXhjZXB0aW9uRGVmU2VxX3ZhciBfdmFy
X3R5cGU7CiAgaW5saW5lIEV4Y2VwdGlvbkRlZlNlcSgpIHt9CiAgaW5saW5lIEV4Y2VwdGlvbkRl
ZlNlcShjb25zdCBFeGNlcHRpb25EZWZTZXEmIHMpCiAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2Vx
dWVuY2VfT2JqUmVmPCBfb2JqcmVmX0V4Y2VwdGlvbkRlZiwgX0NPUkJBX09ialJlZl9FbGVtZW50
PCBfb2JqcmVmX0V4Y2VwdGlvbkRlZiwgRXhjZXB0aW9uRGVmX0hlbHBlcj4gLCBFeGNlcHRpb25E
ZWZfSGVscGVyPiAocykge30KCiAgaW5saW5lIEV4Y2VwdGlvbkRlZlNlcShfQ09SQkFfVUxvbmcg
X21heCkKICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9PYmpSZWY8IF9vYmpyZWZfRXhj
ZXB0aW9uRGVmLCBfQ09SQkFfT2JqUmVmX0VsZW1lbnQ8IF9vYmpyZWZfRXhjZXB0aW9uRGVmLCBF
eGNlcHRpb25EZWZfSGVscGVyPiAsIEV4Y2VwdGlvbkRlZl9IZWxwZXI+IChfbWF4KSB7fQogIGlu
bGluZSBFeGNlcHRpb25EZWZTZXEoX0NPUkJBX1VMb25nIF9tYXgsIF9DT1JCQV9VTG9uZyBfbGVu
LCBFeGNlcHRpb25EZWZfcHRyKiBfdmFsLCBfQ09SQkFfQm9vbGVhbiBfcmVsPTApCiAgICA6IF9D
T1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfT2JqUmVmPCBfb2JqcmVmX0V4Y2VwdGlvbkRlZiwgX0NP
UkJBX09ialJlZl9FbGVtZW50PCBfb2JqcmVmX0V4Y2VwdGlvbkRlZiwgRXhjZXB0aW9uRGVmX0hl
bHBlcj4gLCBFeGNlcHRpb25EZWZfSGVscGVyPiAoX21heCwgX2xlbiwgX3ZhbCwgX3JlbCkge30K
CiAgaW5saW5lIEV4Y2VwdGlvbkRlZlNlcSYgb3BlcmF0b3IgPSAoY29uc3QgRXhjZXB0aW9uRGVm
U2VxJiBzKSB7CiAgICBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX09ialJlZjwgX29ianJlZl9F
eGNlcHRpb25EZWYsIF9DT1JCQV9PYmpSZWZfRWxlbWVudDwgX29ianJlZl9FeGNlcHRpb25EZWYs
IEV4Y2VwdGlvbkRlZl9IZWxwZXI+ICwgRXhjZXB0aW9uRGVmX0hlbHBlcj4gOjpvcGVyYXRvcj0o
cyk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQp9OwoKY2xhc3MgRXhjZXB0aW9uRGVmU2VxX291dDsK
CmNsYXNzIEV4Y2VwdGlvbkRlZlNlcV92YXIgewpwdWJsaWM6CiAgdHlwZWRlZiBFeGNlcHRpb25E
ZWZTZXEgVDsKICB0eXBlZGVmIEV4Y2VwdGlvbkRlZlNlcV92YXIgVF92YXI7CgogIGlubGluZSBF
eGNlcHRpb25EZWZTZXFfdmFyKCkgOiBfcGRfc2VxKDApIHt9CiAgaW5saW5lIEV4Y2VwdGlvbkRl
ZlNlcV92YXIoVCogcykgOiBfcGRfc2VxKHMpIHt9CiAgaW5saW5lIEV4Y2VwdGlvbkRlZlNlcV92
YXIoY29uc3QgVF92YXImIHMpIHsKICAgIGlmKCBzLl9wZF9zZXEgKSBfcGRfc2VxID0gbmV3IFQo
KnMuX3BkX3NlcSk7CiAgICBlbHNlIF9wZF9zZXEgPSAwOwogIH0KICBpbmxpbmUgfkV4Y2VwdGlv
bkRlZlNlcV92YXIoKSB7IGlmKCBfcGRfc2VxICkgZGVsZXRlIF9wZF9zZXE7IH0KCiAgaW5saW5l
IFRfdmFyJiBvcGVyYXRvciA9IChUKiBzKSB7CiAgICBpZiggX3BkX3NlcSApIGRlbGV0ZSBfcGRf
c2VxOwogICAgX3BkX3NlcSA9IHM7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGlubGluZSBUX3Zh
ciYgb3BlcmF0b3IgPSAoY29uc3QgVF92YXImIHMpIHsKICAgIGlmKCBzLl9wZF9zZXEgKSB7CiAg
ICAgIGlmKCAhX3BkX3NlcSApIF9wZF9zZXEgPSBuZXcgVDsKICAgICAgKl9wZF9zZXEgPSAqcy5f
cGRfc2VxOwogICAgfSBlbHNlIGlmKCBfcGRfc2VxICkgewogICAgICBkZWxldGUgX3BkX3NlcTsK
ICAgICAgX3BkX3NlcSA9IDA7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUg
X0NPUkJBX09ialJlZl9FbGVtZW50PCBfb2JqcmVmX0V4Y2VwdGlvbkRlZiwgRXhjZXB0aW9uRGVm
X0hlbHBlcj4gb3BlcmF0b3IgW10gKF9DT1JCQV9VTG9uZyBzKSB7CiAgICByZXR1cm4gKCpfcGRf
c2VxKVtzXTsKICB9CgogIGlubGluZSBUKiBvcGVyYXRvciAtPiAoKSB7IHJldHVybiBfcGRfc2Vx
OyB9CgoKCiAgaW5saW5lIG9wZXJhdG9yIGNvbnN0IFQmICgpIGNvbnN0IHsgcmV0dXJuICpfcGRf
c2VxOyB9CiAgaW5saW5lIG9wZXJhdG9yIFQmICgpIHsgcmV0dXJuICpfcGRfc2VxOyB9CgoKICBp
bmxpbmUgY29uc3QgVCYgaW4oKSBjb25zdCB7IHJldHVybiAqX3BkX3NlcTsgfQogIGlubGluZSBU
JiBpbm91dCgpIHsgcmV0dXJuICpfcGRfc2VxOyB9CiAgaW5saW5lIFQqJiBvdXQoKSB7CiAgICBp
ZiggX3BkX3NlcSApIHsgZGVsZXRlIF9wZF9zZXE7IF9wZF9zZXEgPSAwOyB9CiAgICByZXR1cm4g
X3BkX3NlcTsKICB9CiAgaW5saW5lIFQqIF9yZXRuKCkgeyBUKiB0bXAgPSBfcGRfc2VxOyBfcGRf
c2VxID0gMDsgcmV0dXJuIHRtcDsgfQoKICBmcmllbmQgY2xhc3MgRXhjZXB0aW9uRGVmU2VxX291
dDsKCnByaXZhdGU6CiAgVCogX3BkX3NlcTsKfTsKCmNsYXNzIEV4Y2VwdGlvbkRlZlNlcV9vdXQg
ewpwdWJsaWM6CiAgdHlwZWRlZiBFeGNlcHRpb25EZWZTZXEgVDsKICB0eXBlZGVmIEV4Y2VwdGlv
bkRlZlNlcV92YXIgVF92YXI7CgogIGlubGluZSBFeGNlcHRpb25EZWZTZXFfb3V0KFQqJiBzKSA6
IF9kYXRhKHMpIHsgX2RhdGEgPSAwOyB9CiAgaW5saW5lIEV4Y2VwdGlvbkRlZlNlcV9vdXQoVF92
YXImIHMpCiAgICA6IF9kYXRhKHMuX3BkX3NlcSkgeyBzID0gKFQqKSAwOyB9CiAgaW5saW5lIEV4
Y2VwdGlvbkRlZlNlcV9vdXQoY29uc3QgRXhjZXB0aW9uRGVmU2VxX291dCYgcykgOiBfZGF0YShz
Ll9kYXRhKSB7fQogIGlubGluZSBFeGNlcHRpb25EZWZTZXFfb3V0JiBvcGVyYXRvciA9IChjb25z
dCBFeGNlcHRpb25EZWZTZXFfb3V0JiBzKSB7CiAgICBfZGF0YSA9IHMuX2RhdGE7CiAgICByZXR1
cm4gKnRoaXM7CiAgfSBpbmxpbmUgRXhjZXB0aW9uRGVmU2VxX291dCYgb3BlcmF0b3IgPSAoVCog
cykgewogICAgX2RhdGEgPSBzOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbmxpbmUgb3BlcmF0
b3IgVComKCkgeyByZXR1cm4gX2RhdGE7IH0KICBpbmxpbmUgVComIHB0cigpIHsgcmV0dXJuIF9k
YXRhOyB9CiAgaW5saW5lIFQqIG9wZXJhdG9yLT4oKSB7IHJldHVybiBfZGF0YTsgfQoKICBpbmxp
bmUgX0NPUkJBX09ialJlZl9FbGVtZW50PCBfb2JqcmVmX0V4Y2VwdGlvbkRlZiwgRXhjZXB0aW9u
RGVmX0hlbHBlcj4gb3BlcmF0b3IgW10gKF9DT1JCQV9VTG9uZyBpKSB7CiAgICByZXR1cm4gKCpf
ZGF0YSlbaV07CiAgfQoKICBUKiYgX2RhdGE7Cgpwcml2YXRlOgogIEV4Y2VwdGlvbkRlZlNlcV9v
dXQoKTsKICBFeGNlcHRpb25EZWZTZXFfb3V0JiBvcGVyYXRvcj0oY29uc3QgVF92YXImKTsKfTsK
CmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19FeGNEZXNjcmlwdGlvblNlcTsK
CmNsYXNzIEV4Y0Rlc2NyaXB0aW9uU2VxX3ZhcjsKCmNsYXNzIEV4Y0Rlc2NyaXB0aW9uU2VxIDog
cHVibGljIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8IEV4Y2VwdGlvbkRlc2NyaXB0aW9uPiB7
CnB1YmxpYzoKICB0eXBlZGVmIEV4Y0Rlc2NyaXB0aW9uU2VxX3ZhciBfdmFyX3R5cGU7CiAgaW5s
aW5lIEV4Y0Rlc2NyaXB0aW9uU2VxKCkge30KICBpbmxpbmUgRXhjRGVzY3JpcHRpb25TZXEoY29u
c3QgRXhjRGVzY3JpcHRpb25TZXEmIHMpCiAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8
IEV4Y2VwdGlvbkRlc2NyaXB0aW9uPiAocykge30KCiAgaW5saW5lIEV4Y0Rlc2NyaXB0aW9uU2Vx
KF9DT1JCQV9VTG9uZyBfbWF4KQogICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlPCBFeGNl
cHRpb25EZXNjcmlwdGlvbj4gKF9tYXgpIHt9CiAgaW5saW5lIEV4Y0Rlc2NyaXB0aW9uU2VxKF9D
T1JCQV9VTG9uZyBfbWF4LCBfQ09SQkFfVUxvbmcgX2xlbiwgRXhjZXB0aW9uRGVzY3JpcHRpb24q
IF92YWwsIF9DT1JCQV9Cb29sZWFuIF9yZWw9MCkKICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1
ZW5jZTwgRXhjZXB0aW9uRGVzY3JpcHRpb24+IChfbWF4LCBfbGVuLCBfdmFsLCBfcmVsKSB7fQoK
ICBpbmxpbmUgRXhjRGVzY3JpcHRpb25TZXEmIG9wZXJhdG9yID0gKGNvbnN0IEV4Y0Rlc2NyaXB0
aW9uU2VxJiBzKSB7CiAgICBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlPCBFeGNlcHRpb25EZXNj
cmlwdGlvbj4gOjpvcGVyYXRvcj0ocyk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQp9OwoKY2xhc3Mg
RXhjRGVzY3JpcHRpb25TZXFfb3V0OwoKY2xhc3MgRXhjRGVzY3JpcHRpb25TZXFfdmFyIHsKcHVi
bGljOgogIHR5cGVkZWYgRXhjRGVzY3JpcHRpb25TZXEgVDsKICB0eXBlZGVmIEV4Y0Rlc2NyaXB0
aW9uU2VxX3ZhciBUX3ZhcjsKCiAgaW5saW5lIEV4Y0Rlc2NyaXB0aW9uU2VxX3ZhcigpIDogX3Bk
X3NlcSgwKSB7fQogIGlubGluZSBFeGNEZXNjcmlwdGlvblNlcV92YXIoVCogcykgOiBfcGRfc2Vx
KHMpIHt9CiAgaW5saW5lIEV4Y0Rlc2NyaXB0aW9uU2VxX3Zhcihjb25zdCBUX3ZhciYgcykgewog
ICAgaWYoIHMuX3BkX3NlcSApIF9wZF9zZXEgPSBuZXcgVCgqcy5fcGRfc2VxKTsKICAgIGVsc2Ug
X3BkX3NlcSA9IDA7CiAgfQogIGlubGluZSB+RXhjRGVzY3JpcHRpb25TZXFfdmFyKCkgeyBpZigg
X3BkX3NlcSApIGRlbGV0ZSBfcGRfc2VxOyB9CgogIGlubGluZSBUX3ZhciYgb3BlcmF0b3IgPSAo
VCogcykgewogICAgaWYoIF9wZF9zZXEgKSBkZWxldGUgX3BkX3NlcTsKICAgIF9wZF9zZXEgPSBz
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbmxpbmUgVF92YXImIG9wZXJhdG9yID0gKGNvbnN0
IFRfdmFyJiBzKSB7CiAgICBpZiggcy5fcGRfc2VxICkgewogICAgICBpZiggIV9wZF9zZXEgKSBf
cGRfc2VxID0gbmV3IFQ7CiAgICAgICpfcGRfc2VxID0gKnMuX3BkX3NlcTsKICAgIH0gZWxzZSBp
ZiggX3BkX3NlcSApIHsKICAgICAgZGVsZXRlIF9wZF9zZXE7CiAgICAgIF9wZF9zZXEgPSAwOwog
ICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIEV4Y2VwdGlvbkRlc2NyaXB0aW9u
JiBvcGVyYXRvciBbXSAoX0NPUkJBX1VMb25nIHMpIHsKICAgIHJldHVybiAoKl9wZF9zZXEpW3Nd
OwogIH0KCiAgaW5saW5lIFQqIG9wZXJhdG9yIC0+ICgpIHsgcmV0dXJuIF9wZF9zZXE7IH0KCgoK
ICBpbmxpbmUgb3BlcmF0b3IgY29uc3QgVCYgKCkgY29uc3QgeyByZXR1cm4gKl9wZF9zZXE7IH0K
ICBpbmxpbmUgb3BlcmF0b3IgVCYgKCkgeyByZXR1cm4gKl9wZF9zZXE7IH0KCgogIGlubGluZSBj
b25zdCBUJiBpbigpIGNvbnN0IHsgcmV0dXJuICpfcGRfc2VxOyB9CiAgaW5saW5lIFQmIGlub3V0
KCkgeyByZXR1cm4gKl9wZF9zZXE7IH0KICBpbmxpbmUgVComIG91dCgpIHsKICAgIGlmKCBfcGRf
c2VxICkgeyBkZWxldGUgX3BkX3NlcTsgX3BkX3NlcSA9IDA7IH0KICAgIHJldHVybiBfcGRfc2Vx
OwogIH0KICBpbmxpbmUgVCogX3JldG4oKSB7IFQqIHRtcCA9IF9wZF9zZXE7IF9wZF9zZXEgPSAw
OyByZXR1cm4gdG1wOyB9CgogIGZyaWVuZCBjbGFzcyBFeGNEZXNjcmlwdGlvblNlcV9vdXQ7Cgpw
cml2YXRlOgogIFQqIF9wZF9zZXE7Cn07CgpjbGFzcyBFeGNEZXNjcmlwdGlvblNlcV9vdXQgewpw
dWJsaWM6CiAgdHlwZWRlZiBFeGNEZXNjcmlwdGlvblNlcSBUOwogIHR5cGVkZWYgRXhjRGVzY3Jp
cHRpb25TZXFfdmFyIFRfdmFyOwoKICBpbmxpbmUgRXhjRGVzY3JpcHRpb25TZXFfb3V0KFQqJiBz
KSA6IF9kYXRhKHMpIHsgX2RhdGEgPSAwOyB9CiAgaW5saW5lIEV4Y0Rlc2NyaXB0aW9uU2VxX291
dChUX3ZhciYgcykKICAgIDogX2RhdGEocy5fcGRfc2VxKSB7IHMgPSAoVCopIDA7IH0KICBpbmxp
bmUgRXhjRGVzY3JpcHRpb25TZXFfb3V0KGNvbnN0IEV4Y0Rlc2NyaXB0aW9uU2VxX291dCYgcykg
OiBfZGF0YShzLl9kYXRhKSB7fQogIGlubGluZSBFeGNEZXNjcmlwdGlvblNlcV9vdXQmIG9wZXJh
dG9yID0gKGNvbnN0IEV4Y0Rlc2NyaXB0aW9uU2VxX291dCYgcykgewogICAgX2RhdGEgPSBzLl9k
YXRhOwogICAgcmV0dXJuICp0aGlzOwogIH0gaW5saW5lIEV4Y0Rlc2NyaXB0aW9uU2VxX291dCYg
b3BlcmF0b3IgPSAoVCogcykgewogICAgX2RhdGEgPSBzOwogICAgcmV0dXJuICp0aGlzOwogIH0K
ICBpbmxpbmUgb3BlcmF0b3IgVComKCkgeyByZXR1cm4gX2RhdGE7IH0KICBpbmxpbmUgVComIHB0
cigpIHsgcmV0dXJuIF9kYXRhOyB9CiAgaW5saW5lIFQqIG9wZXJhdG9yLT4oKSB7IHJldHVybiBf
ZGF0YTsgfQoKICBpbmxpbmUgRXhjZXB0aW9uRGVzY3JpcHRpb24mIG9wZXJhdG9yIFtdIChfQ09S
QkFfVUxvbmcgaSkgewogICAgcmV0dXJuICgqX2RhdGEpW2ldOwogIH0KCiAgVComIF9kYXRhOwoK
cHJpdmF0ZToKICBFeGNEZXNjcmlwdGlvblNlcV9vdXQoKTsKICBFeGNEZXNjcmlwdGlvblNlcV9v
dXQmIG9wZXJhdG9yPShjb25zdCBUX3ZhciYpOwp9OwoKCgoKY2xhc3MgT3BlcmF0aW9uRGVmOwpj
bGFzcyBfb2JqcmVmX09wZXJhdGlvbkRlZjsKY2xhc3MgX2ltcGxfT3BlcmF0aW9uRGVmOwoKdHlw
ZWRlZiBfb2JqcmVmX09wZXJhdGlvbkRlZiogT3BlcmF0aW9uRGVmX3B0cjsKdHlwZWRlZiBPcGVy
YXRpb25EZWZfcHRyIE9wZXJhdGlvbkRlZlJlZjsKCmNsYXNzIE9wZXJhdGlvbkRlZl9IZWxwZXIg
ewpwdWJsaWM6CiAgdHlwZWRlZiBPcGVyYXRpb25EZWZfcHRyIF9wdHJfdHlwZTsKCiAgc3RhdGlj
IF9wdHJfdHlwZSBfbmlsKCk7CiAgc3RhdGljIF9DT1JCQV9Cb29sZWFuIGlzX25pbChfcHRyX3R5
cGUpOwogIHN0YXRpYyB2b2lkIHJlbGVhc2UoX3B0cl90eXBlKTsKICBzdGF0aWMgdm9pZCBkdXBs
aWNhdGUoX3B0cl90eXBlKTsKICBzdGF0aWMgc2l6ZV90IE5QX2FsaWduZWRTaXplKF9wdHJfdHlw
ZSwgc2l6ZV90KTsKICBzdGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVm
ZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihOZXRCdWZm
ZXJlZFN0cmVhbSYpOwogIHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBNZW1C
dWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyBfcHRyX3R5cGUgdW5tYXJzaGFsT2JqUmVmKE1lbUJ1
ZmZlcmVkU3RyZWFtJik7Cn07Cgp0eXBlZGVmIF9DT1JCQV9PYmpSZWZfVmFyPF9vYmpyZWZfT3Bl
cmF0aW9uRGVmLCBPcGVyYXRpb25EZWZfSGVscGVyPiBPcGVyYXRpb25EZWZfdmFyOwp0eXBlZGVm
IF9DT1JCQV9PYmpSZWZfT1VUX2FyZzxfb2JqcmVmX09wZXJhdGlvbkRlZixPcGVyYXRpb25EZWZf
SGVscGVyID4gT3BlcmF0aW9uRGVmX291dDsKCgoKY2xhc3MgT3BlcmF0aW9uRGVmIHsKcHVibGlj
OgoKICB0eXBlZGVmIE9wZXJhdGlvbkRlZl9wdHIgX3B0cl90eXBlOwogIHR5cGVkZWYgT3BlcmF0
aW9uRGVmX3ZhciBfdmFyX3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5cGUgX2R1cGxpY2F0ZShfcHRy
X3R5cGUpOwogIHN0YXRpYyBfcHRyX3R5cGUgX25hcnJvdyhDT1JCQTo6T2JqZWN0X3B0cik7CiAg
c3RhdGljIF9wdHJfdHlwZSBfbmlsKCk7CgogIHN0YXRpYyBpbmxpbmUgc2l6ZV90IF9hbGlnbmVk
U2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2Jq
UmVmKF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgaW5saW5lIHZvaWQg
X21hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwoKICBzdGF0aWMg
aW5saW5lIF9wdHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7
CiAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJzaGFsT2JqUmVmKF9QRF9y
ZXBvSWQsIHMpOwogICAgX3B0cl90eXBlIHJlc3VsdCA9IF9uYXJyb3cob2JqKTsKICAgIENPUkJB
OjpyZWxlYXNlKG9iaik7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIGlubGluZSBf
cHRyX3R5cGUgX3VubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgQ09S
QkE6Ok9iamVjdF9wdHIgb2JqID0gQ09SQkE6OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBz
KTsKICAgIF9wdHJfdHlwZSByZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICBDT1JCQTo6cmVsZWFz
ZShvYmopOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBjb25zdCBjaGFyKiBfUERf
cmVwb0lkOwoKCgp9OwoKY2xhc3MgX29ianJlZl9PcGVyYXRpb25EZWYgOgogIHB1YmxpYyB2aXJ0
dWFsIF9vYmpyZWZfQ29udGFpbmVkCnsKcHVibGljOgoKICBDT1JCQTo6VHlwZUNvZGVfcHRyIHJl
c3VsdCgpOwogIElETFR5cGVfcHRyIHJlc3VsdF9kZWYoKTsKICB2b2lkIHJlc3VsdF9kZWYoSURM
VHlwZV9wdHIpOwogIFBhckRlc2NyaXB0aW9uU2VxKiBwYXJhbXMoKTsKICB2b2lkIHBhcmFtcyhj
b25zdCBQYXJEZXNjcmlwdGlvblNlcSYpOwogIE9wZXJhdGlvbk1vZGUgbW9kZSgpOwogIHZvaWQg
bW9kZShPcGVyYXRpb25Nb2RlKTsKICBDb250ZXh0SWRTZXEqIGNvbnRleHRzKCk7CiAgdm9pZCBj
b250ZXh0cyhjb25zdCBDb250ZXh0SWRTZXEmKTsKICBFeGNlcHRpb25EZWZTZXEqIGV4Y2VwdGlv
bnMoKTsKICB2b2lkIGV4Y2VwdGlvbnMoY29uc3QgRXhjZXB0aW9uRGVmU2VxJik7CgogIGlubGlu
ZSBfb2JqcmVmX09wZXJhdGlvbkRlZigpIHsgX1BSX3NldG9iaigwKTsgfQogIF9vYmpyZWZfT3Bl
cmF0aW9uRGVmKGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0Kiwgb21uaUlkZW50
aXR5Kiwgb21uaUxvY2FsSWRlbnRpdHkqKTsKCnByb3RlY3RlZDoKICB2aXJ0dWFsIH5fb2JqcmVm
X09wZXJhdGlvbkRlZigpOwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9wdHJUb09ialJlZihj
b25zdCBjaGFyKik7CgogIF9vYmpyZWZfT3BlcmF0aW9uRGVmKGNvbnN0IF9vYmpyZWZfT3BlcmF0
aW9uRGVmJik7CiAgX29ianJlZl9PcGVyYXRpb25EZWYmIG9wZXJhdG9yID0gKGNvbnN0IF9vYmpy
ZWZfT3BlcmF0aW9uRGVmJik7Cgp9OwoKY2xhc3MgX3BvZl9PcGVyYXRpb25EZWYgOiBwdWJsaWMg
cHJveHlPYmplY3RGYWN0b3J5IHsKcHVibGljOgogIGlubGluZSBfcG9mX09wZXJhdGlvbkRlZigp
IDogcHJveHlPYmplY3RGYWN0b3J5KE9wZXJhdGlvbkRlZjo6X1BEX3JlcG9JZCkge30KICB2aXJ0
dWFsIH5fcG9mX09wZXJhdGlvbkRlZigpOwoKICB2aXJ0dWFsIG9tbmlPYmpSZWYqIG5ld09ialJl
Zihjb25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxlTGlzdCosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb21uaUlkZW50aXR5Kiwgb21uaUxvY2FsSWRlbnRpdHkqKTsKICB2aXJ0
dWFsIF9DT1JCQV9Cb29sZWFuIGlzX2EoY29uc3QgY2hhciopIGNvbnN0Owp9OwoKY2xhc3MgX2lt
cGxfT3BlcmF0aW9uRGVmIDoKICBwdWJsaWMgdmlydHVhbCBfaW1wbF9Db250YWluZWQKewpwdWJs
aWM6CiAgdmlydHVhbCB+X2ltcGxfT3BlcmF0aW9uRGVmKCk7CgogIHZpcnR1YWwgQ09SQkE6OlR5
cGVDb2RlX3B0ciByZXN1bHQoKSA9IDA7CiAgdmlydHVhbCBJRExUeXBlX3B0ciByZXN1bHRfZGVm
KCkgPSAwOwogIHZpcnR1YWwgdm9pZCByZXN1bHRfZGVmKElETFR5cGVfcHRyKSA9IDA7CiAgdmly
dHVhbCBQYXJEZXNjcmlwdGlvblNlcSogcGFyYW1zKCkgPSAwOwogIHZpcnR1YWwgdm9pZCBwYXJh
bXMoY29uc3QgUGFyRGVzY3JpcHRpb25TZXEmKSA9IDA7CiAgdmlydHVhbCBPcGVyYXRpb25Nb2Rl
IG1vZGUoKSA9IDA7CiAgdmlydHVhbCB2b2lkIG1vZGUoT3BlcmF0aW9uTW9kZSkgPSAwOwogIHZp
cnR1YWwgQ29udGV4dElkU2VxKiBjb250ZXh0cygpID0gMDsKICB2aXJ0dWFsIHZvaWQgY29udGV4
dHMoY29uc3QgQ29udGV4dElkU2VxJikgPSAwOwogIHZpcnR1YWwgRXhjZXB0aW9uRGVmU2VxKiBl
eGNlcHRpb25zKCkgPSAwOwogIHZpcnR1YWwgdm9pZCBleGNlcHRpb25zKGNvbnN0IEV4Y2VwdGlv
bkRlZlNlcSYpID0gMDsKCnB1YmxpYzoKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIF9kaXNwYXRj
aChHSU9QX1MmKTsKCnByaXZhdGU6CiAgdmlydHVhbCB2b2lkKiBfcHRyVG9JbnRlcmZhY2UoY29u
c3QgY2hhciopOwogIHZpcnR1YWwgY29uc3QgY2hhciogX21vc3REZXJpdmVkUmVwb0lkKCk7Cn07
CgpleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfT3BlcmF0aW9uRGVmOwoKc3Ry
dWN0IE9wZXJhdGlvbkRlc2NyaXB0aW9uIHsKICB0eXBlZGVmIF9DT1JCQV9Db25zdHJUeXBlX1Zh
cmlhYmxlX1ZhcjxPcGVyYXRpb25EZXNjcmlwdGlvbj4gX3Zhcl90eXBlOwoKICBDT1JCQTo6U3Ry
aW5nX21lbWJlciBuYW1lOwoKICBDT1JCQTo6U3RyaW5nX21lbWJlciBpZDsKCiAgQ09SQkE6OlN0
cmluZ19tZW1iZXIgZGVmaW5lZF9pbjsKCiAgQ09SQkE6OlN0cmluZ19tZW1iZXIgdmVyc2lvbjsK
CiAgQ09SQkE6OlR5cGVDb2RlX21lbWJlciByZXN1bHQ7CgogIE9wZXJhdGlvbk1vZGUgbW9kZTsK
CiAgQ29udGV4dElkU2VxIGNvbnRleHRzOwoKICBQYXJEZXNjcmlwdGlvblNlcSBwYXJhbWV0ZXJz
OwoKICBFeGNEZXNjcmlwdGlvblNlcSBleGNlcHRpb25zOwoKICBzaXplX3QgX05QX2FsaWduZWRT
aXplKHNpemVfdCBpbml0aWFsb2Zmc2V0KSBjb25zdDsKICB2b2lkIG9wZXJhdG9yPj49IChOZXRC
dWZmZXJlZFN0cmVhbSAmKSBjb25zdDsKICB2b2lkIG9wZXJhdG9yPDw9IChOZXRCdWZmZXJlZFN0
cmVhbSAmKTsKICB2b2lkIG9wZXJhdG9yPj49IChNZW1CdWZmZXJlZFN0cmVhbSAmKSBjb25zdDsK
ICB2b2lkIG9wZXJhdG9yPDw9IChNZW1CdWZmZXJlZFN0cmVhbSAmKTsKfTsKCnR5cGVkZWYgT3Bl
cmF0aW9uRGVzY3JpcHRpb246Ol92YXJfdHlwZSBPcGVyYXRpb25EZXNjcmlwdGlvbl92YXI7Cgp0
eXBlZGVmIF9DT1JCQV9Db25zdHJUeXBlX1ZhcmlhYmxlX09VVF9hcmc8IE9wZXJhdGlvbkRlc2Ny
aXB0aW9uLE9wZXJhdGlvbkRlc2NyaXB0aW9uX3ZhciA+IE9wZXJhdGlvbkRlc2NyaXB0aW9uX291
dDsKCmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19PcGVyYXRpb25EZXNjcmlw
dGlvbjsKCmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19SZXBvc2l0b3J5SWRT
ZXE7CgpjbGFzcyBSZXBvc2l0b3J5SWRTZXFfdmFyOwoKY2xhc3MgUmVwb3NpdG9yeUlkU2VxIDog
cHVibGljIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX1N0cmluZyB7CnB1YmxpYzoKICB0eXBl
ZGVmIFJlcG9zaXRvcnlJZFNlcV92YXIgX3Zhcl90eXBlOwogIGlubGluZSBSZXBvc2l0b3J5SWRT
ZXEoKSB7fQogIGlubGluZSBSZXBvc2l0b3J5SWRTZXEoY29uc3QgUmVwb3NpdG9yeUlkU2VxJiBz
KQogICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19TdHJpbmcocykge30KCiAgaW5saW5l
IFJlcG9zaXRvcnlJZFNlcShfQ09SQkFfVUxvbmcgX21heCkKICAgIDogX0NPUkJBX1VuYm91bmRl
ZF9TZXF1ZW5jZV9fU3RyaW5nKF9tYXgpIHt9CiAgaW5saW5lIFJlcG9zaXRvcnlJZFNlcShfQ09S
QkFfVUxvbmcgX21heCwgX0NPUkJBX1VMb25nIF9sZW4sIGNoYXIqKiBfdmFsLCBfQ09SQkFfQm9v
bGVhbiBfcmVsPTApCiAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX1N0cmluZyhfbWF4
LCBfbGVuLCBfdmFsLCBfcmVsKSB7fQoKICBpbmxpbmUgUmVwb3NpdG9yeUlkU2VxJiBvcGVyYXRv
ciA9IChjb25zdCBSZXBvc2l0b3J5SWRTZXEmIHMpIHsKICAgIF9DT1JCQV9VbmJvdW5kZWRfU2Vx
dWVuY2VfX1N0cmluZzo6b3BlcmF0b3I9KHMpOwogICAgcmV0dXJuICp0aGlzOwogIH0KfTsKCmNs
YXNzIFJlcG9zaXRvcnlJZFNlcV9vdXQ7CgpjbGFzcyBSZXBvc2l0b3J5SWRTZXFfdmFyIHsKcHVi
bGljOgogIHR5cGVkZWYgUmVwb3NpdG9yeUlkU2VxIFQ7CiAgdHlwZWRlZiBSZXBvc2l0b3J5SWRT
ZXFfdmFyIFRfdmFyOwoKICBpbmxpbmUgUmVwb3NpdG9yeUlkU2VxX3ZhcigpIDogX3BkX3NlcSgw
KSB7fQogIGlubGluZSBSZXBvc2l0b3J5SWRTZXFfdmFyKFQqIHMpIDogX3BkX3NlcShzKSB7fQog
IGlubGluZSBSZXBvc2l0b3J5SWRTZXFfdmFyKGNvbnN0IFRfdmFyJiBzKSB7CiAgICBpZiggcy5f
cGRfc2VxICkgX3BkX3NlcSA9IG5ldyBUKCpzLl9wZF9zZXEpOwogICAgZWxzZSBfcGRfc2VxID0g
MDsKICB9CiAgaW5saW5lIH5SZXBvc2l0b3J5SWRTZXFfdmFyKCkgeyBpZiggX3BkX3NlcSApIGRl
bGV0ZSBfcGRfc2VxOyB9CgogIGlubGluZSBUX3ZhciYgb3BlcmF0b3IgPSAoVCogcykgewogICAg
aWYoIF9wZF9zZXEgKSBkZWxldGUgX3BkX3NlcTsKICAgIF9wZF9zZXEgPSBzOwogICAgcmV0dXJu
ICp0aGlzOwogIH0KICBpbmxpbmUgVF92YXImIG9wZXJhdG9yID0gKGNvbnN0IFRfdmFyJiBzKSB7
CiAgICBpZiggcy5fcGRfc2VxICkgewogICAgICBpZiggIV9wZF9zZXEgKSBfcGRfc2VxID0gbmV3
IFQ7CiAgICAgICpfcGRfc2VxID0gKnMuX3BkX3NlcTsKICAgIH0gZWxzZSBpZiggX3BkX3NlcSAp
IHsKICAgICAgZGVsZXRlIF9wZF9zZXE7CiAgICAgIF9wZF9zZXEgPSAwOwogICAgfQogICAgcmV0
dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIF9DT1JCQV9TdHJpbmdfZWxlbWVudCBvcGVyYXRvciBb
XSAoX0NPUkJBX1VMb25nIHMpIHsKICAgIHJldHVybiAoKl9wZF9zZXEpW3NdOwogIH0KCiAgaW5s
aW5lIFQqIG9wZXJhdG9yIC0+ICgpIHsgcmV0dXJuIF9wZF9zZXE7IH0KCgoKICBpbmxpbmUgb3Bl
cmF0b3IgY29uc3QgVCYgKCkgY29uc3QgeyByZXR1cm4gKl9wZF9zZXE7IH0KICBpbmxpbmUgb3Bl
cmF0b3IgVCYgKCkgeyByZXR1cm4gKl9wZF9zZXE7IH0KCgogIGlubGluZSBjb25zdCBUJiBpbigp
IGNvbnN0IHsgcmV0dXJuICpfcGRfc2VxOyB9CiAgaW5saW5lIFQmIGlub3V0KCkgeyByZXR1cm4g
Kl9wZF9zZXE7IH0KICBpbmxpbmUgVComIG91dCgpIHsKICAgIGlmKCBfcGRfc2VxICkgeyBkZWxl
dGUgX3BkX3NlcTsgX3BkX3NlcSA9IDA7IH0KICAgIHJldHVybiBfcGRfc2VxOwogIH0KICBpbmxp
bmUgVCogX3JldG4oKSB7IFQqIHRtcCA9IF9wZF9zZXE7IF9wZF9zZXEgPSAwOyByZXR1cm4gdG1w
OyB9CgogIGZyaWVuZCBjbGFzcyBSZXBvc2l0b3J5SWRTZXFfb3V0OwoKcHJpdmF0ZToKICBUKiBf
cGRfc2VxOwp9OwoKY2xhc3MgUmVwb3NpdG9yeUlkU2VxX291dCB7CnB1YmxpYzoKICB0eXBlZGVm
IFJlcG9zaXRvcnlJZFNlcSBUOwogIHR5cGVkZWYgUmVwb3NpdG9yeUlkU2VxX3ZhciBUX3ZhcjsK
CiAgaW5saW5lIFJlcG9zaXRvcnlJZFNlcV9vdXQoVComIHMpIDogX2RhdGEocykgeyBfZGF0YSA9
IDA7IH0KICBpbmxpbmUgUmVwb3NpdG9yeUlkU2VxX291dChUX3ZhciYgcykKICAgIDogX2RhdGEo
cy5fcGRfc2VxKSB7IHMgPSAoVCopIDA7IH0KICBpbmxpbmUgUmVwb3NpdG9yeUlkU2VxX291dChj
b25zdCBSZXBvc2l0b3J5SWRTZXFfb3V0JiBzKSA6IF9kYXRhKHMuX2RhdGEpIHt9CiAgaW5saW5l
IFJlcG9zaXRvcnlJZFNlcV9vdXQmIG9wZXJhdG9yID0gKGNvbnN0IFJlcG9zaXRvcnlJZFNlcV9v
dXQmIHMpIHsKICAgIF9kYXRhID0gcy5fZGF0YTsKICAgIHJldHVybiAqdGhpczsKICB9IGlubGlu
ZSBSZXBvc2l0b3J5SWRTZXFfb3V0JiBvcGVyYXRvciA9IChUKiBzKSB7CiAgICBfZGF0YSA9IHM7
CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGlubGluZSBvcGVyYXRvciBUKiYoKSB7IHJldHVybiBf
ZGF0YTsgfQogIGlubGluZSBUKiYgcHRyKCkgeyByZXR1cm4gX2RhdGE7IH0KICBpbmxpbmUgVCog
b3BlcmF0b3ItPigpIHsgcmV0dXJuIF9kYXRhOyB9CgogIGlubGluZSBfQ09SQkFfU3RyaW5nX2Vs
ZW1lbnQgb3BlcmF0b3IgW10gKF9DT1JCQV9VTG9uZyBpKSB7CiAgICByZXR1cm4gKCpfZGF0YSlb
aV07CiAgfQoKICBUKiYgX2RhdGE7Cgpwcml2YXRlOgogIFJlcG9zaXRvcnlJZFNlcV9vdXQoKTsK
ICBSZXBvc2l0b3J5SWRTZXFfb3V0JiBvcGVyYXRvcj0oY29uc3QgVF92YXImKTsKfTsKCmV4dGVy
biBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19PcERlc2NyaXB0aW9uU2VxOwoKY2xhc3Mg
T3BEZXNjcmlwdGlvblNlcV92YXI7CgpjbGFzcyBPcERlc2NyaXB0aW9uU2VxIDogcHVibGljIF9D
T1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8IE9wZXJhdGlvbkRlc2NyaXB0aW9uPiB7CnB1YmxpYzoK
ICB0eXBlZGVmIE9wRGVzY3JpcHRpb25TZXFfdmFyIF92YXJfdHlwZTsKICBpbmxpbmUgT3BEZXNj
cmlwdGlvblNlcSgpIHt9CiAgaW5saW5lIE9wRGVzY3JpcHRpb25TZXEoY29uc3QgT3BEZXNjcmlw
dGlvblNlcSYgcykKICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZTwgT3BlcmF0aW9uRGVz
Y3JpcHRpb24+IChzKSB7fQoKICBpbmxpbmUgT3BEZXNjcmlwdGlvblNlcShfQ09SQkFfVUxvbmcg
X21heCkKICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZTwgT3BlcmF0aW9uRGVzY3JpcHRp
b24+IChfbWF4KSB7fQogIGlubGluZSBPcERlc2NyaXB0aW9uU2VxKF9DT1JCQV9VTG9uZyBfbWF4
LCBfQ09SQkFfVUxvbmcgX2xlbiwgT3BlcmF0aW9uRGVzY3JpcHRpb24qIF92YWwsIF9DT1JCQV9C
b29sZWFuIF9yZWw9MCkKICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZTwgT3BlcmF0aW9u
RGVzY3JpcHRpb24+IChfbWF4LCBfbGVuLCBfdmFsLCBfcmVsKSB7fQoKICBpbmxpbmUgT3BEZXNj
cmlwdGlvblNlcSYgb3BlcmF0b3IgPSAoY29uc3QgT3BEZXNjcmlwdGlvblNlcSYgcykgewogICAg
X0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZTwgT3BlcmF0aW9uRGVzY3JpcHRpb24+IDo6b3BlcmF0
b3I9KHMpOwogICAgcmV0dXJuICp0aGlzOwogIH0KfTsKCmNsYXNzIE9wRGVzY3JpcHRpb25TZXFf
b3V0OwoKY2xhc3MgT3BEZXNjcmlwdGlvblNlcV92YXIgewpwdWJsaWM6CiAgdHlwZWRlZiBPcERl
c2NyaXB0aW9uU2VxIFQ7CiAgdHlwZWRlZiBPcERlc2NyaXB0aW9uU2VxX3ZhciBUX3ZhcjsKCiAg
aW5saW5lIE9wRGVzY3JpcHRpb25TZXFfdmFyKCkgOiBfcGRfc2VxKDApIHt9CiAgaW5saW5lIE9w
RGVzY3JpcHRpb25TZXFfdmFyKFQqIHMpIDogX3BkX3NlcShzKSB7fQogIGlubGluZSBPcERlc2Ny
aXB0aW9uU2VxX3Zhcihjb25zdCBUX3ZhciYgcykgewogICAgaWYoIHMuX3BkX3NlcSApIF9wZF9z
ZXEgPSBuZXcgVCgqcy5fcGRfc2VxKTsKICAgIGVsc2UgX3BkX3NlcSA9IDA7CiAgfQogIGlubGlu
ZSB+T3BEZXNjcmlwdGlvblNlcV92YXIoKSB7IGlmKCBfcGRfc2VxICkgZGVsZXRlIF9wZF9zZXE7
IH0KCiAgaW5saW5lIFRfdmFyJiBvcGVyYXRvciA9IChUKiBzKSB7CiAgICBpZiggX3BkX3NlcSAp
IGRlbGV0ZSBfcGRfc2VxOwogICAgX3BkX3NlcSA9IHM7CiAgICByZXR1cm4gKnRoaXM7CiAgfQog
IGlubGluZSBUX3ZhciYgb3BlcmF0b3IgPSAoY29uc3QgVF92YXImIHMpIHsKICAgIGlmKCBzLl9w
ZF9zZXEgKSB7CiAgICAgIGlmKCAhX3BkX3NlcSApIF9wZF9zZXEgPSBuZXcgVDsKICAgICAgKl9w
ZF9zZXEgPSAqcy5fcGRfc2VxOwogICAgfSBlbHNlIGlmKCBfcGRfc2VxICkgewogICAgICBkZWxl
dGUgX3BkX3NlcTsKICAgICAgX3BkX3NlcSA9IDA7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7CiAg
fQoKICBpbmxpbmUgT3BlcmF0aW9uRGVzY3JpcHRpb24mIG9wZXJhdG9yIFtdIChfQ09SQkFfVUxv
bmcgcykgewogICAgcmV0dXJuICgqX3BkX3NlcSlbc107CiAgfQoKICBpbmxpbmUgVCogb3BlcmF0
b3IgLT4gKCkgeyByZXR1cm4gX3BkX3NlcTsgfQoKCgogIGlubGluZSBvcGVyYXRvciBjb25zdCBU
JiAoKSBjb25zdCB7IHJldHVybiAqX3BkX3NlcTsgfQogIGlubGluZSBvcGVyYXRvciBUJiAoKSB7
IHJldHVybiAqX3BkX3NlcTsgfQoKCiAgaW5saW5lIGNvbnN0IFQmIGluKCkgY29uc3QgeyByZXR1
cm4gKl9wZF9zZXE7IH0KICBpbmxpbmUgVCYgaW5vdXQoKSB7IHJldHVybiAqX3BkX3NlcTsgfQog
IGlubGluZSBUKiYgb3V0KCkgewogICAgaWYoIF9wZF9zZXEgKSB7IGRlbGV0ZSBfcGRfc2VxOyBf
cGRfc2VxID0gMDsgfQogICAgcmV0dXJuIF9wZF9zZXE7CiAgfQogIGlubGluZSBUKiBfcmV0bigp
IHsgVCogdG1wID0gX3BkX3NlcTsgX3BkX3NlcSA9IDA7IHJldHVybiB0bXA7IH0KCiAgZnJpZW5k
IGNsYXNzIE9wRGVzY3JpcHRpb25TZXFfb3V0OwoKcHJpdmF0ZToKICBUKiBfcGRfc2VxOwp9OwoK
Y2xhc3MgT3BEZXNjcmlwdGlvblNlcV9vdXQgewpwdWJsaWM6CiAgdHlwZWRlZiBPcERlc2NyaXB0
aW9uU2VxIFQ7CiAgdHlwZWRlZiBPcERlc2NyaXB0aW9uU2VxX3ZhciBUX3ZhcjsKCiAgaW5saW5l
IE9wRGVzY3JpcHRpb25TZXFfb3V0KFQqJiBzKSA6IF9kYXRhKHMpIHsgX2RhdGEgPSAwOyB9CiAg
aW5saW5lIE9wRGVzY3JpcHRpb25TZXFfb3V0KFRfdmFyJiBzKQogICAgOiBfZGF0YShzLl9wZF9z
ZXEpIHsgcyA9IChUKikgMDsgfQogIGlubGluZSBPcERlc2NyaXB0aW9uU2VxX291dChjb25zdCBP
cERlc2NyaXB0aW9uU2VxX291dCYgcykgOiBfZGF0YShzLl9kYXRhKSB7fQogIGlubGluZSBPcERl
c2NyaXB0aW9uU2VxX291dCYgb3BlcmF0b3IgPSAoY29uc3QgT3BEZXNjcmlwdGlvblNlcV9vdXQm
IHMpIHsKICAgIF9kYXRhID0gcy5fZGF0YTsKICAgIHJldHVybiAqdGhpczsKICB9IGlubGluZSBP
cERlc2NyaXB0aW9uU2VxX291dCYgb3BlcmF0b3IgPSAoVCogcykgewogICAgX2RhdGEgPSBzOwog
ICAgcmV0dXJuICp0aGlzOwogIH0KICBpbmxpbmUgb3BlcmF0b3IgVComKCkgeyByZXR1cm4gX2Rh
dGE7IH0KICBpbmxpbmUgVComIHB0cigpIHsgcmV0dXJuIF9kYXRhOyB9CiAgaW5saW5lIFQqIG9w
ZXJhdG9yLT4oKSB7IHJldHVybiBfZGF0YTsgfQoKICBpbmxpbmUgT3BlcmF0aW9uRGVzY3JpcHRp
b24mIG9wZXJhdG9yIFtdIChfQ09SQkFfVUxvbmcgaSkgewogICAgcmV0dXJuICgqX2RhdGEpW2ld
OwogIH0KCiAgVComIF9kYXRhOwoKcHJpdmF0ZToKICBPcERlc2NyaXB0aW9uU2VxX291dCgpOwog
IE9wRGVzY3JpcHRpb25TZXFfb3V0JiBvcGVyYXRvcj0oY29uc3QgVF92YXImKTsKfTsKCmV4dGVy
biBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19BdHRyRGVzY3JpcHRpb25TZXE7CgpjbGFz
cyBBdHRyRGVzY3JpcHRpb25TZXFfdmFyOwoKY2xhc3MgQXR0ckRlc2NyaXB0aW9uU2VxIDogcHVi
bGljIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8IEF0dHJpYnV0ZURlc2NyaXB0aW9uPiB7CnB1
YmxpYzoKICB0eXBlZGVmIEF0dHJEZXNjcmlwdGlvblNlcV92YXIgX3Zhcl90eXBlOwogIGlubGlu
ZSBBdHRyRGVzY3JpcHRpb25TZXEoKSB7fQogIGlubGluZSBBdHRyRGVzY3JpcHRpb25TZXEoY29u
c3QgQXR0ckRlc2NyaXB0aW9uU2VxJiBzKQogICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNl
PCBBdHRyaWJ1dGVEZXNjcmlwdGlvbj4gKHMpIHt9CgogIGlubGluZSBBdHRyRGVzY3JpcHRpb25T
ZXEoX0NPUkJBX1VMb25nIF9tYXgpCiAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8IEF0
dHJpYnV0ZURlc2NyaXB0aW9uPiAoX21heCkge30KICBpbmxpbmUgQXR0ckRlc2NyaXB0aW9uU2Vx
KF9DT1JCQV9VTG9uZyBfbWF4LCBfQ09SQkFfVUxvbmcgX2xlbiwgQXR0cmlidXRlRGVzY3JpcHRp
b24qIF92YWwsIF9DT1JCQV9Cb29sZWFuIF9yZWw9MCkKICAgIDogX0NPUkJBX1VuYm91bmRlZF9T
ZXF1ZW5jZTwgQXR0cmlidXRlRGVzY3JpcHRpb24+IChfbWF4LCBfbGVuLCBfdmFsLCBfcmVsKSB7
fQoKICBpbmxpbmUgQXR0ckRlc2NyaXB0aW9uU2VxJiBvcGVyYXRvciA9IChjb25zdCBBdHRyRGVz
Y3JpcHRpb25TZXEmIHMpIHsKICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2U8IEF0dHJpYnV0
ZURlc2NyaXB0aW9uPiA6Om9wZXJhdG9yPShzKTsKICAgIHJldHVybiAqdGhpczsKICB9Cn07Cgpj
bGFzcyBBdHRyRGVzY3JpcHRpb25TZXFfb3V0OwoKY2xhc3MgQXR0ckRlc2NyaXB0aW9uU2VxX3Zh
ciB7CnB1YmxpYzoKICB0eXBlZGVmIEF0dHJEZXNjcmlwdGlvblNlcSBUOwogIHR5cGVkZWYgQXR0
ckRlc2NyaXB0aW9uU2VxX3ZhciBUX3ZhcjsKCiAgaW5saW5lIEF0dHJEZXNjcmlwdGlvblNlcV92
YXIoKSA6IF9wZF9zZXEoMCkge30KICBpbmxpbmUgQXR0ckRlc2NyaXB0aW9uU2VxX3ZhcihUKiBz
KSA6IF9wZF9zZXEocykge30KICBpbmxpbmUgQXR0ckRlc2NyaXB0aW9uU2VxX3Zhcihjb25zdCBU
X3ZhciYgcykgewogICAgaWYoIHMuX3BkX3NlcSApIF9wZF9zZXEgPSBuZXcgVCgqcy5fcGRfc2Vx
KTsKICAgIGVsc2UgX3BkX3NlcSA9IDA7CiAgfQogIGlubGluZSB+QXR0ckRlc2NyaXB0aW9uU2Vx
X3ZhcigpIHsgaWYoIF9wZF9zZXEgKSBkZWxldGUgX3BkX3NlcTsgfQoKICBpbmxpbmUgVF92YXIm
IG9wZXJhdG9yID0gKFQqIHMpIHsKICAgIGlmKCBfcGRfc2VxICkgZGVsZXRlIF9wZF9zZXE7CiAg
ICBfcGRfc2VxID0gczsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5saW5lIFRfdmFyJiBvcGVy
YXRvciA9IChjb25zdCBUX3ZhciYgcykgewogICAgaWYoIHMuX3BkX3NlcSApIHsKICAgICAgaWYo
ICFfcGRfc2VxICkgX3BkX3NlcSA9IG5ldyBUOwogICAgICAqX3BkX3NlcSA9ICpzLl9wZF9zZXE7
CiAgICB9IGVsc2UgaWYoIF9wZF9zZXEgKSB7CiAgICAgIGRlbGV0ZSBfcGRfc2VxOwogICAgICBf
cGRfc2VxID0gMDsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBBdHRyaWJ1
dGVEZXNjcmlwdGlvbiYgb3BlcmF0b3IgW10gKF9DT1JCQV9VTG9uZyBzKSB7CiAgICByZXR1cm4g
KCpfcGRfc2VxKVtzXTsKICB9CgogIGlubGluZSBUKiBvcGVyYXRvciAtPiAoKSB7IHJldHVybiBf
cGRfc2VxOyB9CgoKCiAgaW5saW5lIG9wZXJhdG9yIGNvbnN0IFQmICgpIGNvbnN0IHsgcmV0dXJu
ICpfcGRfc2VxOyB9CiAgaW5saW5lIG9wZXJhdG9yIFQmICgpIHsgcmV0dXJuICpfcGRfc2VxOyB9
CgoKICBpbmxpbmUgY29uc3QgVCYgaW4oKSBjb25zdCB7IHJldHVybiAqX3BkX3NlcTsgfQogIGlu
bGluZSBUJiBpbm91dCgpIHsgcmV0dXJuICpfcGRfc2VxOyB9CiAgaW5saW5lIFQqJiBvdXQoKSB7
CiAgICBpZiggX3BkX3NlcSApIHsgZGVsZXRlIF9wZF9zZXE7IF9wZF9zZXEgPSAwOyB9CiAgICBy
ZXR1cm4gX3BkX3NlcTsKICB9CiAgaW5saW5lIFQqIF9yZXRuKCkgeyBUKiB0bXAgPSBfcGRfc2Vx
OyBfcGRfc2VxID0gMDsgcmV0dXJuIHRtcDsgfQoKICBmcmllbmQgY2xhc3MgQXR0ckRlc2NyaXB0
aW9uU2VxX291dDsKCnByaXZhdGU6CiAgVCogX3BkX3NlcTsKfTsKCmNsYXNzIEF0dHJEZXNjcmlw
dGlvblNlcV9vdXQgewpwdWJsaWM6CiAgdHlwZWRlZiBBdHRyRGVzY3JpcHRpb25TZXEgVDsKICB0
eXBlZGVmIEF0dHJEZXNjcmlwdGlvblNlcV92YXIgVF92YXI7CgogIGlubGluZSBBdHRyRGVzY3Jp
cHRpb25TZXFfb3V0KFQqJiBzKSA6IF9kYXRhKHMpIHsgX2RhdGEgPSAwOyB9CiAgaW5saW5lIEF0
dHJEZXNjcmlwdGlvblNlcV9vdXQoVF92YXImIHMpCiAgICA6IF9kYXRhKHMuX3BkX3NlcSkgeyBz
ID0gKFQqKSAwOyB9CiAgaW5saW5lIEF0dHJEZXNjcmlwdGlvblNlcV9vdXQoY29uc3QgQXR0ckRl
c2NyaXB0aW9uU2VxX291dCYgcykgOiBfZGF0YShzLl9kYXRhKSB7fQogIGlubGluZSBBdHRyRGVz
Y3JpcHRpb25TZXFfb3V0JiBvcGVyYXRvciA9IChjb25zdCBBdHRyRGVzY3JpcHRpb25TZXFfb3V0
JiBzKSB7CiAgICBfZGF0YSA9IHMuX2RhdGE7CiAgICByZXR1cm4gKnRoaXM7CiAgfSBpbmxpbmUg
QXR0ckRlc2NyaXB0aW9uU2VxX291dCYgb3BlcmF0b3IgPSAoVCogcykgewogICAgX2RhdGEgPSBz
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbmxpbmUgb3BlcmF0b3IgVComKCkgeyByZXR1cm4g
X2RhdGE7IH0KICBpbmxpbmUgVComIHB0cigpIHsgcmV0dXJuIF9kYXRhOyB9CiAgaW5saW5lIFQq
IG9wZXJhdG9yLT4oKSB7IHJldHVybiBfZGF0YTsgfQoKICBpbmxpbmUgQXR0cmlidXRlRGVzY3Jp
cHRpb24mIG9wZXJhdG9yIFtdIChfQ09SQkFfVUxvbmcgaSkgewogICAgcmV0dXJuICgqX2RhdGEp
W2ldOwogIH0KCiAgVComIF9kYXRhOwoKcHJpdmF0ZToKICBBdHRyRGVzY3JpcHRpb25TZXFfb3V0
KCk7CiAgQXR0ckRlc2NyaXB0aW9uU2VxX291dCYgb3BlcmF0b3I9KGNvbnN0IFRfdmFyJik7Cn07
CiMgNTA1MCAiLi4vb21uaU9SQjMvaXJfZGVmcy5oaCIKY2xhc3MgSW50ZXJmYWNlRGVmIHsKcHVi
bGljOgoKICB0eXBlZGVmIEludGVyZmFjZURlZl9wdHIgX3B0cl90eXBlOwogIHR5cGVkZWYgSW50
ZXJmYWNlRGVmX3ZhciBfdmFyX3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5cGUgX2R1cGxpY2F0ZShf
cHRyX3R5cGUpOwogIHN0YXRpYyBfcHRyX3R5cGUgX25hcnJvdyhDT1JCQTo6T2JqZWN0X3B0cik7
CiAgc3RhdGljIF9wdHJfdHlwZSBfbmlsKCk7CgogIHN0YXRpYyBpbmxpbmUgc2l6ZV90IF9hbGln
bmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFs
T2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgaW5saW5lIHZv
aWQgX21hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwoKICBzdGF0
aWMgaW5saW5lIF9wdHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3RyZWFtJiBz
KSB7CiAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJzaGFsT2JqUmVmKF9Q
RF9yZXBvSWQsIHMpOwogICAgX3B0cl90eXBlIHJlc3VsdCA9IF9uYXJyb3cob2JqKTsKICAgIENP
UkJBOjpyZWxlYXNlKG9iaik7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIGlubGlu
ZSBfcHRyX3R5cGUgX3VubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAg
Q09SQkE6Ok9iamVjdF9wdHIgb2JqID0gQ09SQkE6OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lk
LCBzKTsKICAgIF9wdHJfdHlwZSByZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICBDT1JCQTo6cmVs
ZWFzZShvYmopOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBjb25zdCBjaGFyKiBf
UERfcmVwb0lkOwoKCiAgc3RydWN0IEZ1bGxJbnRlcmZhY2VEZXNjcmlwdGlvbiB7CiAgICB0eXBl
ZGVmIF9DT1JCQV9Db25zdHJUeXBlX1ZhcmlhYmxlX1ZhcjxGdWxsSW50ZXJmYWNlRGVzY3JpcHRp
b24+IF92YXJfdHlwZTsKCiAgICBDT1JCQTo6U3RyaW5nX21lbWJlciBuYW1lOwoKICAgIENPUkJB
OjpTdHJpbmdfbWVtYmVyIGlkOwoKICAgIENPUkJBOjpTdHJpbmdfbWVtYmVyIGRlZmluZWRfaW47
CgogICAgQ09SQkE6OlN0cmluZ19tZW1iZXIgdmVyc2lvbjsKCiAgICBPcERlc2NyaXB0aW9uU2Vx
IG9wZXJhdGlvbnM7CgogICAgQXR0ckRlc2NyaXB0aW9uU2VxIGF0dHJpYnV0ZXM7CgogICAgUmVw
b3NpdG9yeUlkU2VxIGJhc2VfaW50ZXJmYWNlczsKCiAgICBDT1JCQTo6VHlwZUNvZGVfbWVtYmVy
IHR5cGU7CgogICAgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3QgaW5pdGlhbG9mZnNldCkg
Y29uc3Q7CiAgICB2b2lkIG9wZXJhdG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSAmKSBjb25zdDsK
ICAgIHZvaWQgb3BlcmF0b3I8PD0gKE5ldEJ1ZmZlcmVkU3RyZWFtICYpOwogICAgdm9pZCBvcGVy
YXRvcj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0gJikgY29uc3Q7CiAgICB2b2lkIG9wZXJhdG9yPDw9
IChNZW1CdWZmZXJlZFN0cmVhbSAmKTsKICB9OwoKICB0eXBlZGVmIEZ1bGxJbnRlcmZhY2VEZXNj
cmlwdGlvbjo6X3Zhcl90eXBlIEZ1bGxJbnRlcmZhY2VEZXNjcmlwdGlvbl92YXI7CgogIHR5cGVk
ZWYgX0NPUkJBX0NvbnN0clR5cGVfVmFyaWFibGVfT1VUX2FyZzwgRnVsbEludGVyZmFjZURlc2Ny
aXB0aW9uLEZ1bGxJbnRlcmZhY2VEZXNjcmlwdGlvbl92YXIgPiBGdWxsSW50ZXJmYWNlRGVzY3Jp
cHRpb25fb3V0OwoKICBzdGF0aWMgY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfRnVsbElu
dGVyZmFjZURlc2NyaXB0aW9uOwoKfTsKCmNsYXNzIF9vYmpyZWZfSW50ZXJmYWNlRGVmIDoKICBw
dWJsaWMgdmlydHVhbCBfb2JqcmVmX0NvbnRhaW5lciwKICBwdWJsaWMgdmlydHVhbCBfb2JqcmVm
X0NvbnRhaW5lZCwKICBwdWJsaWMgdmlydHVhbCBfb2JqcmVmX0lETFR5cGUKewpwdWJsaWM6CiAg
Q09SQkE6OkJvb2xlYW4gaXNfYShjb25zdCBjaGFyKiBpbnRlcmZhY2VfaWQpOwogIEludGVyZmFj
ZURlZjo6RnVsbEludGVyZmFjZURlc2NyaXB0aW9uKiBkZXNjcmliZV9pbnRlcmZhY2UoKTsKICBB
dHRyaWJ1dGVEZWZfcHRyIGNyZWF0ZV9hdHRyaWJ1dGUoY29uc3QgY2hhciogaWQsIGNvbnN0IGNo
YXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZlcnNpb24sIElETFR5cGVfcHRyIHR5cGUsIEF0dHJpYnV0
ZU1vZGUgbW9kZSk7CiAgT3BlcmF0aW9uRGVmX3B0ciBjcmVhdGVfb3BlcmF0aW9uKGNvbnN0IGNo
YXIqIGlkLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2ZXJzaW9uLCBJRExUeXBlX3B0
ciByZXN1bHQsIE9wZXJhdGlvbk1vZGUgbW9kZSwgY29uc3QgUGFyRGVzY3JpcHRpb25TZXEmIHBh
cmFtcywgY29uc3QgRXhjZXB0aW9uRGVmU2VxJiBleGNlcHRpb25zLCBjb25zdCBDb250ZXh0SWRT
ZXEmIGNvbnRleHRzKTsKCiAgSW50ZXJmYWNlRGVmU2VxKiBiYXNlX2ludGVyZmFjZXMoKTsKICB2
b2lkIGJhc2VfaW50ZXJmYWNlcyhjb25zdCBJbnRlcmZhY2VEZWZTZXEmKTsKCiAgaW5saW5lIF9v
YmpyZWZfSW50ZXJmYWNlRGVmKCkgeyBfUFJfc2V0b2JqKDApOyB9CiAgX29ianJlZl9JbnRlcmZh
Y2VEZWYoY29uc3QgY2hhciosIElPUDo6VGFnZ2VkUHJvZmlsZUxpc3QqLCBvbW5pSWRlbnRpdHkq
LCBvbW5pTG9jYWxJZGVudGl0eSopOwoKcHJvdGVjdGVkOgogIHZpcnR1YWwgfl9vYmpyZWZfSW50
ZXJmYWNlRGVmKCk7Cgpwcml2YXRlOgogIHZpcnR1YWwgdm9pZCogX3B0clRvT2JqUmVmKGNvbnN0
IGNoYXIqKTsKCiAgX29ianJlZl9JbnRlcmZhY2VEZWYoY29uc3QgX29ianJlZl9JbnRlcmZhY2VE
ZWYmKTsKICBfb2JqcmVmX0ludGVyZmFjZURlZiYgb3BlcmF0b3IgPSAoY29uc3QgX29ianJlZl9J
bnRlcmZhY2VEZWYmKTsKCn07CgpjbGFzcyBfcG9mX0ludGVyZmFjZURlZiA6IHB1YmxpYyBwcm94
eU9iamVjdEZhY3RvcnkgewpwdWJsaWM6CiAgaW5saW5lIF9wb2ZfSW50ZXJmYWNlRGVmKCkgOiBw
cm94eU9iamVjdEZhY3RvcnkoSW50ZXJmYWNlRGVmOjpfUERfcmVwb0lkKSB7fQogIHZpcnR1YWwg
fl9wb2ZfSW50ZXJmYWNlRGVmKCk7CgogIHZpcnR1YWwgb21uaU9ialJlZiogbmV3T2JqUmVmKGNv
bnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0KiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvbW5pSWRlbnRpdHkqLCBvbW5pTG9jYWxJZGVudGl0eSopOwogIHZpcnR1YWwg
X0NPUkJBX0Jvb2xlYW4gaXNfYShjb25zdCBjaGFyKikgY29uc3Q7Cn07CgpjbGFzcyBfaW1wbF9J
bnRlcmZhY2VEZWYgOgogIHB1YmxpYyB2aXJ0dWFsIF9pbXBsX0NvbnRhaW5lciwKICBwdWJsaWMg
dmlydHVhbCBfaW1wbF9Db250YWluZWQsCiAgcHVibGljIHZpcnR1YWwgX2ltcGxfSURMVHlwZQp7
CnB1YmxpYzoKICB2aXJ0dWFsIH5faW1wbF9JbnRlcmZhY2VEZWYoKTsKCiAgdmlydHVhbCBDT1JC
QTo6Qm9vbGVhbiBpc19hKGNvbnN0IGNoYXIqIGludGVyZmFjZV9pZCkgPSAwOwogIHZpcnR1YWwg
SW50ZXJmYWNlRGVmOjpGdWxsSW50ZXJmYWNlRGVzY3JpcHRpb24qIGRlc2NyaWJlX2ludGVyZmFj
ZSgpID0gMDsKICB2aXJ0dWFsIEF0dHJpYnV0ZURlZl9wdHIgY3JlYXRlX2F0dHJpYnV0ZShjb25z
dCBjaGFyKiBpZCwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmVyc2lvbiwgSURMVHlw
ZV9wdHIgdHlwZSwgQXR0cmlidXRlTW9kZSBtb2RlKSA9IDA7CiAgdmlydHVhbCBPcGVyYXRpb25E
ZWZfcHRyIGNyZWF0ZV9vcGVyYXRpb24oY29uc3QgY2hhciogaWQsIGNvbnN0IGNoYXIqIG5hbWUs
IGNvbnN0IGNoYXIqIHZlcnNpb24sIElETFR5cGVfcHRyIHJlc3VsdCwgT3BlcmF0aW9uTW9kZSBt
b2RlLCBjb25zdCBQYXJEZXNjcmlwdGlvblNlcSYgcGFyYW1zLCBjb25zdCBFeGNlcHRpb25EZWZT
ZXEmIGV4Y2VwdGlvbnMsIGNvbnN0IENvbnRleHRJZFNlcSYgY29udGV4dHMpID0gMDsKCiAgdmly
dHVhbCBJbnRlcmZhY2VEZWZTZXEqIGJhc2VfaW50ZXJmYWNlcygpID0gMDsKICB2aXJ0dWFsIHZv
aWQgYmFzZV9pbnRlcmZhY2VzKGNvbnN0IEludGVyZmFjZURlZlNlcSYpID0gMDsKCnB1YmxpYzoK
ICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIF9kaXNwYXRjaChHSU9QX1MmKTsKCnByaXZhdGU6CiAg
dmlydHVhbCB2b2lkKiBfcHRyVG9JbnRlcmZhY2UoY29uc3QgY2hhciopOwogIHZpcnR1YWwgY29u
c3QgY2hhciogX21vc3REZXJpdmVkUmVwb0lkKCk7Cn07CgpleHRlcm4gY29uc3QgQ09SQkE6OlR5
cGVDb2RlX3B0ciBfdGNfSW50ZXJmYWNlRGVmOwoKc3RydWN0IEludGVyZmFjZURlc2NyaXB0aW9u
IHsKICB0eXBlZGVmIF9DT1JCQV9Db25zdHJUeXBlX1ZhcmlhYmxlX1ZhcjxJbnRlcmZhY2VEZXNj
cmlwdGlvbj4gX3Zhcl90eXBlOwoKICBDT1JCQTo6U3RyaW5nX21lbWJlciBuYW1lOwoKICBDT1JC
QTo6U3RyaW5nX21lbWJlciBpZDsKCiAgQ09SQkE6OlN0cmluZ19tZW1iZXIgZGVmaW5lZF9pbjsK
CiAgQ09SQkE6OlN0cmluZ19tZW1iZXIgdmVyc2lvbjsKCiAgUmVwb3NpdG9yeUlkU2VxIGJhc2Vf
aW50ZXJmYWNlczsKCiAgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3QgaW5pdGlhbG9mZnNl
dCkgY29uc3Q7CiAgdm9pZCBvcGVyYXRvcj4+PSAoTmV0QnVmZmVyZWRTdHJlYW0gJikgY29uc3Q7
CiAgdm9pZCBvcGVyYXRvcjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0gJik7CiAgdm9pZCBvcGVyYXRv
cj4+PSAoTWVtQnVmZmVyZWRTdHJlYW0gJikgY29uc3Q7CiAgdm9pZCBvcGVyYXRvcjw8PSAoTWVt
QnVmZmVyZWRTdHJlYW0gJik7Cn07Cgp0eXBlZGVmIEludGVyZmFjZURlc2NyaXB0aW9uOjpfdmFy
X3R5cGUgSW50ZXJmYWNlRGVzY3JpcHRpb25fdmFyOwoKdHlwZWRlZiBfQ09SQkFfQ29uc3RyVHlw
ZV9WYXJpYWJsZV9PVVRfYXJnPCBJbnRlcmZhY2VEZXNjcmlwdGlvbixJbnRlcmZhY2VEZXNjcmlw
dGlvbl92YXIgPiBJbnRlcmZhY2VEZXNjcmlwdGlvbl9vdXQ7CgpleHRlcm4gY29uc3QgQ09SQkE6
OlR5cGVDb2RlX3B0ciBfdGNfSW50ZXJmYWNlRGVzY3JpcHRpb247CgpleHRlcm4gY29uc3QgQ09S
QkE6OlR5cGVDb2RlX3B0ciBfdGNfVmlzaWJpbGl0eTsKCnR5cGVkZWYgQ09SQkE6OlNob3J0IFZp
c2liaWxpdHk7CgogICAgICAgICAgICAgICAgICAgICBjb25zdCBDT1JCQTo6U2hvcnQgUFJJVkFU
RV9NRU1CRVIgPSAwOwoKICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ09SQkE6OlNob3J0IFBV
QkxJQ19NRU1CRVIgPSAxOwoKc3RydWN0IFZhbHVlTWVtYmVyIHsKICB0eXBlZGVmIF9DT1JCQV9D
b25zdHJUeXBlX1ZhcmlhYmxlX1ZhcjxWYWx1ZU1lbWJlcj4gX3Zhcl90eXBlOwoKICBDT1JCQTo6
U3RyaW5nX21lbWJlciBuYW1lOwoKICBDT1JCQTo6U3RyaW5nX21lbWJlciBpZDsKCiAgQ09SQkE6
OlN0cmluZ19tZW1iZXIgZGVmaW5lZF9pbjsKCiAgQ09SQkE6OlN0cmluZ19tZW1iZXIgdmVyc2lv
bjsKCiAgQ09SQkE6OlR5cGVDb2RlX21lbWJlciB0eXBlOwoKICBfQ09SQkFfT2JqUmVmX01lbWJl
cjwgX29ianJlZl9JRExUeXBlLCBJRExUeXBlX0hlbHBlcj4gdHlwZV9kZWY7CgogIFZpc2liaWxp
dHkgYWNjZXNzOwoKICBzaXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBpbml0aWFsb2Zmc2V0
KSBjb25zdDsKICB2b2lkIG9wZXJhdG9yPj49IChOZXRCdWZmZXJlZFN0cmVhbSAmKSBjb25zdDsK
ICB2b2lkIG9wZXJhdG9yPDw9IChOZXRCdWZmZXJlZFN0cmVhbSAmKTsKICB2b2lkIG9wZXJhdG9y
Pj49IChNZW1CdWZmZXJlZFN0cmVhbSAmKSBjb25zdDsKICB2b2lkIG9wZXJhdG9yPDw9IChNZW1C
dWZmZXJlZFN0cmVhbSAmKTsKfTsKCnR5cGVkZWYgVmFsdWVNZW1iZXI6Ol92YXJfdHlwZSBWYWx1
ZU1lbWJlcl92YXI7Cgp0eXBlZGVmIF9DT1JCQV9Db25zdHJUeXBlX1ZhcmlhYmxlX09VVF9hcmc8
IFZhbHVlTWVtYmVyLFZhbHVlTWVtYmVyX3ZhciA+IFZhbHVlTWVtYmVyX291dDsKCmV4dGVybiBj
b25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19WYWx1ZU1lbWJlcjsKCmV4dGVybiBjb25zdCBD
T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19WYWx1ZU1lbWJlclNlcTsKCmNsYXNzIFZhbHVlTWVtYmVy
U2VxX3ZhcjsKCmNsYXNzIFZhbHVlTWVtYmVyU2VxIDogcHVibGljIF9DT1JCQV9VbmJvdW5kZWRf
U2VxdWVuY2U8IFZhbHVlTWVtYmVyPiB7CnB1YmxpYzoKICB0eXBlZGVmIFZhbHVlTWVtYmVyU2Vx
X3ZhciBfdmFyX3R5cGU7CiAgaW5saW5lIFZhbHVlTWVtYmVyU2VxKCkge30KICBpbmxpbmUgVmFs
dWVNZW1iZXJTZXEoY29uc3QgVmFsdWVNZW1iZXJTZXEmIHMpCiAgICA6IF9DT1JCQV9VbmJvdW5k
ZWRfU2VxdWVuY2U8IFZhbHVlTWVtYmVyPiAocykge30KCiAgaW5saW5lIFZhbHVlTWVtYmVyU2Vx
KF9DT1JCQV9VTG9uZyBfbWF4KQogICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlPCBWYWx1
ZU1lbWJlcj4gKF9tYXgpIHt9CiAgaW5saW5lIFZhbHVlTWVtYmVyU2VxKF9DT1JCQV9VTG9uZyBf
bWF4LCBfQ09SQkFfVUxvbmcgX2xlbiwgVmFsdWVNZW1iZXIqIF92YWwsIF9DT1JCQV9Cb29sZWFu
IF9yZWw9MCkKICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZTwgVmFsdWVNZW1iZXI+IChf
bWF4LCBfbGVuLCBfdmFsLCBfcmVsKSB7fQoKICBpbmxpbmUgVmFsdWVNZW1iZXJTZXEmIG9wZXJh
dG9yID0gKGNvbnN0IFZhbHVlTWVtYmVyU2VxJiBzKSB7CiAgICBfQ09SQkFfVW5ib3VuZGVkX1Nl
cXVlbmNlPCBWYWx1ZU1lbWJlcj4gOjpvcGVyYXRvcj0ocyk7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQp9OwoKY2xhc3MgVmFsdWVNZW1iZXJTZXFfb3V0OwoKY2xhc3MgVmFsdWVNZW1iZXJTZXFfdmFy
IHsKcHVibGljOgogIHR5cGVkZWYgVmFsdWVNZW1iZXJTZXEgVDsKICB0eXBlZGVmIFZhbHVlTWVt
YmVyU2VxX3ZhciBUX3ZhcjsKCiAgaW5saW5lIFZhbHVlTWVtYmVyU2VxX3ZhcigpIDogX3BkX3Nl
cSgwKSB7fQogIGlubGluZSBWYWx1ZU1lbWJlclNlcV92YXIoVCogcykgOiBfcGRfc2VxKHMpIHt9
CiAgaW5saW5lIFZhbHVlTWVtYmVyU2VxX3Zhcihjb25zdCBUX3ZhciYgcykgewogICAgaWYoIHMu
X3BkX3NlcSApIF9wZF9zZXEgPSBuZXcgVCgqcy5fcGRfc2VxKTsKICAgIGVsc2UgX3BkX3NlcSA9
IDA7CiAgfQogIGlubGluZSB+VmFsdWVNZW1iZXJTZXFfdmFyKCkgeyBpZiggX3BkX3NlcSApIGRl
bGV0ZSBfcGRfc2VxOyB9CgogIGlubGluZSBUX3ZhciYgb3BlcmF0b3IgPSAoVCogcykgewogICAg
aWYoIF9wZF9zZXEgKSBkZWxldGUgX3BkX3NlcTsKICAgIF9wZF9zZXEgPSBzOwogICAgcmV0dXJu
ICp0aGlzOwogIH0KICBpbmxpbmUgVF92YXImIG9wZXJhdG9yID0gKGNvbnN0IFRfdmFyJiBzKSB7
CiAgICBpZiggcy5fcGRfc2VxICkgewogICAgICBpZiggIV9wZF9zZXEgKSBfcGRfc2VxID0gbmV3
IFQ7CiAgICAgICpfcGRfc2VxID0gKnMuX3BkX3NlcTsKICAgIH0gZWxzZSBpZiggX3BkX3NlcSAp
IHsKICAgICAgZGVsZXRlIF9wZF9zZXE7CiAgICAgIF9wZF9zZXEgPSAwOwogICAgfQogICAgcmV0
dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIFZhbHVlTWVtYmVyJiBvcGVyYXRvciBbXSAoX0NPUkJB
X1VMb25nIHMpIHsKICAgIHJldHVybiAoKl9wZF9zZXEpW3NdOwogIH0KCiAgaW5saW5lIFQqIG9w
ZXJhdG9yIC0+ICgpIHsgcmV0dXJuIF9wZF9zZXE7IH0KCgoKICBpbmxpbmUgb3BlcmF0b3IgY29u
c3QgVCYgKCkgY29uc3QgeyByZXR1cm4gKl9wZF9zZXE7IH0KICBpbmxpbmUgb3BlcmF0b3IgVCYg
KCkgeyByZXR1cm4gKl9wZF9zZXE7IH0KCgogIGlubGluZSBjb25zdCBUJiBpbigpIGNvbnN0IHsg
cmV0dXJuICpfcGRfc2VxOyB9CiAgaW5saW5lIFQmIGlub3V0KCkgeyByZXR1cm4gKl9wZF9zZXE7
IH0KICBpbmxpbmUgVComIG91dCgpIHsKICAgIGlmKCBfcGRfc2VxICkgeyBkZWxldGUgX3BkX3Nl
cTsgX3BkX3NlcSA9IDA7IH0KICAgIHJldHVybiBfcGRfc2VxOwogIH0KICBpbmxpbmUgVCogX3Jl
dG4oKSB7IFQqIHRtcCA9IF9wZF9zZXE7IF9wZF9zZXEgPSAwOyByZXR1cm4gdG1wOyB9CgogIGZy
aWVuZCBjbGFzcyBWYWx1ZU1lbWJlclNlcV9vdXQ7Cgpwcml2YXRlOgogIFQqIF9wZF9zZXE7Cn07
CgpjbGFzcyBWYWx1ZU1lbWJlclNlcV9vdXQgewpwdWJsaWM6CiAgdHlwZWRlZiBWYWx1ZU1lbWJl
clNlcSBUOwogIHR5cGVkZWYgVmFsdWVNZW1iZXJTZXFfdmFyIFRfdmFyOwoKICBpbmxpbmUgVmFs
dWVNZW1iZXJTZXFfb3V0KFQqJiBzKSA6IF9kYXRhKHMpIHsgX2RhdGEgPSAwOyB9CiAgaW5saW5l
IFZhbHVlTWVtYmVyU2VxX291dChUX3ZhciYgcykKICAgIDogX2RhdGEocy5fcGRfc2VxKSB7IHMg
PSAoVCopIDA7IH0KICBpbmxpbmUgVmFsdWVNZW1iZXJTZXFfb3V0KGNvbnN0IFZhbHVlTWVtYmVy
U2VxX291dCYgcykgOiBfZGF0YShzLl9kYXRhKSB7fQogIGlubGluZSBWYWx1ZU1lbWJlclNlcV9v
dXQmIG9wZXJhdG9yID0gKGNvbnN0IFZhbHVlTWVtYmVyU2VxX291dCYgcykgewogICAgX2RhdGEg
PSBzLl9kYXRhOwogICAgcmV0dXJuICp0aGlzOwogIH0gaW5saW5lIFZhbHVlTWVtYmVyU2VxX291
dCYgb3BlcmF0b3IgPSAoVCogcykgewogICAgX2RhdGEgPSBzOwogICAgcmV0dXJuICp0aGlzOwog
IH0KICBpbmxpbmUgb3BlcmF0b3IgVComKCkgeyByZXR1cm4gX2RhdGE7IH0KICBpbmxpbmUgVCom
IHB0cigpIHsgcmV0dXJuIF9kYXRhOyB9CiAgaW5saW5lIFQqIG9wZXJhdG9yLT4oKSB7IHJldHVy
biBfZGF0YTsgfQoKICBpbmxpbmUgVmFsdWVNZW1iZXImIG9wZXJhdG9yIFtdIChfQ09SQkFfVUxv
bmcgaSkgewogICAgcmV0dXJuICgqX2RhdGEpW2ldOwogIH0KCiAgVComIF9kYXRhOwoKcHJpdmF0
ZToKICBWYWx1ZU1lbWJlclNlcV9vdXQoKTsKICBWYWx1ZU1lbWJlclNlcV9vdXQmIG9wZXJhdG9y
PShjb25zdCBUX3ZhciYpOwp9OwoKCgoKY2xhc3MgVmFsdWVNZW1iZXJEZWY7CmNsYXNzIF9vYmpy
ZWZfVmFsdWVNZW1iZXJEZWY7CmNsYXNzIF9pbXBsX1ZhbHVlTWVtYmVyRGVmOwoKdHlwZWRlZiBf
b2JqcmVmX1ZhbHVlTWVtYmVyRGVmKiBWYWx1ZU1lbWJlckRlZl9wdHI7CnR5cGVkZWYgVmFsdWVN
ZW1iZXJEZWZfcHRyIFZhbHVlTWVtYmVyRGVmUmVmOwoKY2xhc3MgVmFsdWVNZW1iZXJEZWZfSGVs
cGVyIHsKcHVibGljOgogIHR5cGVkZWYgVmFsdWVNZW1iZXJEZWZfcHRyIF9wdHJfdHlwZTsKCiAg
c3RhdGljIF9wdHJfdHlwZSBfbmlsKCk7CiAgc3RhdGljIF9DT1JCQV9Cb29sZWFuIGlzX25pbChf
cHRyX3R5cGUpOwogIHN0YXRpYyB2b2lkIHJlbGVhc2UoX3B0cl90eXBlKTsKICBzdGF0aWMgdm9p
ZCBkdXBsaWNhdGUoX3B0cl90eXBlKTsKICBzdGF0aWMgc2l6ZV90IE5QX2FsaWduZWRTaXplKF9w
dHJfdHlwZSwgc2l6ZV90KTsKICBzdGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwg
TmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihO
ZXRCdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90eXBl
LCBNZW1CdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyBfcHRyX3R5cGUgdW5tYXJzaGFsT2JqUmVm
KE1lbUJ1ZmZlcmVkU3RyZWFtJik7Cn07Cgp0eXBlZGVmIF9DT1JCQV9PYmpSZWZfVmFyPF9vYmpy
ZWZfVmFsdWVNZW1iZXJEZWYsIFZhbHVlTWVtYmVyRGVmX0hlbHBlcj4gVmFsdWVNZW1iZXJEZWZf
dmFyOwp0eXBlZGVmIF9DT1JCQV9PYmpSZWZfT1VUX2FyZzxfb2JqcmVmX1ZhbHVlTWVtYmVyRGVm
LFZhbHVlTWVtYmVyRGVmX0hlbHBlciA+IFZhbHVlTWVtYmVyRGVmX291dDsKCgoKY2xhc3MgVmFs
dWVNZW1iZXJEZWYgewpwdWJsaWM6CgogIHR5cGVkZWYgVmFsdWVNZW1iZXJEZWZfcHRyIF9wdHJf
dHlwZTsKICB0eXBlZGVmIFZhbHVlTWVtYmVyRGVmX3ZhciBfdmFyX3R5cGU7CgogIHN0YXRpYyBf
cHRyX3R5cGUgX2R1cGxpY2F0ZShfcHRyX3R5cGUpOwogIHN0YXRpYyBfcHRyX3R5cGUgX25hcnJv
dyhDT1JCQTo6T2JqZWN0X3B0cik7CiAgc3RhdGljIF9wdHJfdHlwZSBfbmlsKCk7CgogIHN0YXRp
YyBpbmxpbmUgc2l6ZV90IF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGlj
IGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0m
KTsKICBzdGF0aWMgaW5saW5lIHZvaWQgX21hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBNZW1CdWZm
ZXJlZFN0cmVhbSYpOwoKICBzdGF0aWMgaW5saW5lIF9wdHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVm
KE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmogPSBDT1JC
QTo6VW5NYXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMpOwogICAgX3B0cl90eXBlIHJlc3VsdCA9
IF9uYXJyb3cob2JqKTsKICAgIENPUkJBOjpyZWxlYXNlKG9iaik7CiAgICByZXR1cm4gcmVzdWx0
OwogIH0KCiAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3VubWFyc2hhbE9ialJlZihNZW1CdWZm
ZXJlZFN0cmVhbSYgcykgewogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqID0gQ09SQkE6OlVuTWFy
c2hhbE9ialJlZihfUERfcmVwb0lkLCBzKTsKICAgIF9wdHJfdHlwZSByZXN1bHQgPSBfbmFycm93
KG9iaik7CiAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cgog
IHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOwoKCgp9OwoKY2xhc3MgX29ianJlZl9WYWx1
ZU1lbWJlckRlZiA6CiAgcHVibGljIHZpcnR1YWwgX29ianJlZl9Db250YWluZWQKewpwdWJsaWM6
CgogIENPUkJBOjpUeXBlQ29kZV9wdHIgdHlwZSgpOwogIElETFR5cGVfcHRyIHR5cGVfZGVmKCk7
CiAgdm9pZCB0eXBlX2RlZihJRExUeXBlX3B0cik7CiAgVmlzaWJpbGl0eSBhY2Nlc3MoKTsKICB2
b2lkIGFjY2VzcyhWaXNpYmlsaXR5KTsKCiAgaW5saW5lIF9vYmpyZWZfVmFsdWVNZW1iZXJEZWYo
KSB7IF9QUl9zZXRvYmooMCk7IH0KICBfb2JqcmVmX1ZhbHVlTWVtYmVyRGVmKGNvbnN0IGNoYXIq
LCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0Kiwgb21uaUlkZW50aXR5Kiwgb21uaUxvY2FsSWRlbnRp
dHkqKTsKCnByb3RlY3RlZDoKICB2aXJ0dWFsIH5fb2JqcmVmX1ZhbHVlTWVtYmVyRGVmKCk7Cgpw
cml2YXRlOgogIHZpcnR1YWwgdm9pZCogX3B0clRvT2JqUmVmKGNvbnN0IGNoYXIqKTsKCiAgX29i
anJlZl9WYWx1ZU1lbWJlckRlZihjb25zdCBfb2JqcmVmX1ZhbHVlTWVtYmVyRGVmJik7CiAgX29i
anJlZl9WYWx1ZU1lbWJlckRlZiYgb3BlcmF0b3IgPSAoY29uc3QgX29ianJlZl9WYWx1ZU1lbWJl
ckRlZiYpOwoKfTsKCmNsYXNzIF9wb2ZfVmFsdWVNZW1iZXJEZWYgOiBwdWJsaWMgcHJveHlPYmpl
Y3RGYWN0b3J5IHsKcHVibGljOgogIGlubGluZSBfcG9mX1ZhbHVlTWVtYmVyRGVmKCkgOiBwcm94
eU9iamVjdEZhY3RvcnkoVmFsdWVNZW1iZXJEZWY6Ol9QRF9yZXBvSWQpIHt9CiAgdmlydHVhbCB+
X3BvZl9WYWx1ZU1lbWJlckRlZigpOwoKICB2aXJ0dWFsIG9tbmlPYmpSZWYqIG5ld09ialJlZihj
b25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxlTGlzdCosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb21uaUlkZW50aXR5Kiwgb21uaUxvY2FsSWRlbnRpdHkqKTsKICB2aXJ0dWFs
IF9DT1JCQV9Cb29sZWFuIGlzX2EoY29uc3QgY2hhciopIGNvbnN0Owp9OwoKY2xhc3MgX2ltcGxf
VmFsdWVNZW1iZXJEZWYgOgogIHB1YmxpYyB2aXJ0dWFsIF9pbXBsX0NvbnRhaW5lZAp7CnB1Ymxp
YzoKICB2aXJ0dWFsIH5faW1wbF9WYWx1ZU1lbWJlckRlZigpOwoKICB2aXJ0dWFsIENPUkJBOjpU
eXBlQ29kZV9wdHIgdHlwZSgpID0gMDsKICB2aXJ0dWFsIElETFR5cGVfcHRyIHR5cGVfZGVmKCkg
PSAwOwogIHZpcnR1YWwgdm9pZCB0eXBlX2RlZihJRExUeXBlX3B0cikgPSAwOwogIHZpcnR1YWwg
VmlzaWJpbGl0eSBhY2Nlc3MoKSA9IDA7CiAgdmlydHVhbCB2b2lkIGFjY2VzcyhWaXNpYmlsaXR5
KSA9IDA7CgpwdWJsaWM6CiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBfZGlzcGF0Y2goR0lPUF9T
Jik7Cgpwcml2YXRlOgogIHZpcnR1YWwgdm9pZCogX3B0clRvSW50ZXJmYWNlKGNvbnN0IGNoYXIq
KTsKICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9tb3N0RGVyaXZlZFJlcG9JZCgpOwp9OwoKZXh0ZXJu
IGNvbnN0IENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1ZhbHVlTWVtYmVyRGVmOwojIDU1MDQgIi4u
L29tbmlPUkIzL2lyX2RlZnMuaGgiCmNsYXNzIFZhbHVlRGVmIHsKcHVibGljOgoKICB0eXBlZGVm
IFZhbHVlRGVmX3B0ciBfcHRyX3R5cGU7CiAgdHlwZWRlZiBWYWx1ZURlZl92YXIgX3Zhcl90eXBl
OwoKICBzdGF0aWMgX3B0cl90eXBlIF9kdXBsaWNhdGUoX3B0cl90eXBlKTsKICBzdGF0aWMgX3B0
cl90eXBlIF9uYXJyb3coQ09SQkE6Ok9iamVjdF9wdHIpOwogIHN0YXRpYyBfcHRyX3R5cGUgX25p
bCgpOwoKICBzdGF0aWMgaW5saW5lIHNpemVfdCBfYWxpZ25lZFNpemUoX3B0cl90eXBlLCBzaXpl
X3QpOwogIHN0YXRpYyBpbmxpbmUgdm9pZCBfbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1
ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJf
dHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKCiAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3Vu
bWFyc2hhbE9ialJlZihOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgQ09SQkE6Ok9iamVjdF9w
dHIgb2JqID0gQ09SQkE6OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBzKTsKICAgIF9wdHJf
dHlwZSByZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAg
cmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBpbmxpbmUgX3B0cl90eXBlIF91bm1hcnNoYWxP
YmpSZWYoTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiA9
IENPUkJBOjpVbk1hcnNoYWxPYmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICBfcHRyX3R5cGUgcmVz
dWx0ID0gX25hcnJvdyhvYmopOwogICAgQ09SQkE6OnJlbGVhc2Uob2JqKTsKICAgIHJldHVybiBy
ZXN1bHQ7CiAgfQoKICBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsKCgogIHN0cnVjdCBG
dWxsVmFsdWVEZXNjcmlwdGlvbiB7CiAgICB0eXBlZGVmIF9DT1JCQV9Db25zdHJUeXBlX1Zhcmlh
YmxlX1ZhcjxGdWxsVmFsdWVEZXNjcmlwdGlvbj4gX3Zhcl90eXBlOwoKICAgIENPUkJBOjpTdHJp
bmdfbWVtYmVyIG5hbWU7CgogICAgQ09SQkE6OlN0cmluZ19tZW1iZXIgaWQ7CgogICAgQ09SQkE6
OkJvb2xlYW4gaXNfYWJzdHJhY3Q7CgogICAgQ09SQkE6OkJvb2xlYW4gaXNfY3VzdG9tOwoKICAg
IENPUkJBOjpTdHJpbmdfbWVtYmVyIGRlZmluZWRfaW47CgogICAgQ09SQkE6OlN0cmluZ19tZW1i
ZXIgdmVyc2lvbjsKCiAgICBPcERlc2NyaXB0aW9uU2VxIG9wZXJhdGlvbnM7CgogICAgQXR0ckRl
c2NyaXB0aW9uU2VxIGF0dHJpYnV0ZXM7CgogICAgVmFsdWVNZW1iZXJTZXEgbWVtYmVyczsKCiAg
ICBJbml0aWFsaXplclNlcSBpbml0aWFsaXplcnM7CgogICAgUmVwb3NpdG9yeUlkU2VxIHN1cHBv
cnRlZF9pbnRlcmZhY2VzOwoKICAgIFJlcG9zaXRvcnlJZFNlcSBhYnN0cmFjdF9iYXNlX3ZhbHVl
czsKCiAgICBDT1JCQTo6Qm9vbGVhbiBpc190cnVuY2F0YWJsZTsKCiAgICBDT1JCQTo6U3RyaW5n
X21lbWJlciBiYXNlX3ZhbHVlOwoKICAgIENPUkJBOjpUeXBlQ29kZV9tZW1iZXIgdHlwZTsKCiAg
ICBzaXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBpbml0aWFsb2Zmc2V0KSBjb25zdDsKICAg
IHZvaWQgb3BlcmF0b3I+Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtICYpIGNvbnN0OwogICAgdm9pZCBv
cGVyYXRvcjw8PSAoTmV0QnVmZmVyZWRTdHJlYW0gJik7CiAgICB2b2lkIG9wZXJhdG9yPj49IChN
ZW1CdWZmZXJlZFN0cmVhbSAmKSBjb25zdDsKICAgIHZvaWQgb3BlcmF0b3I8PD0gKE1lbUJ1ZmZl
cmVkU3RyZWFtICYpOwogIH07CgogIHR5cGVkZWYgRnVsbFZhbHVlRGVzY3JpcHRpb246Ol92YXJf
dHlwZSBGdWxsVmFsdWVEZXNjcmlwdGlvbl92YXI7CgogIHR5cGVkZWYgX0NPUkJBX0NvbnN0clR5
cGVfVmFyaWFibGVfT1VUX2FyZzwgRnVsbFZhbHVlRGVzY3JpcHRpb24sRnVsbFZhbHVlRGVzY3Jp
cHRpb25fdmFyID4gRnVsbFZhbHVlRGVzY3JpcHRpb25fb3V0OwoKICBzdGF0aWMgY29uc3QgQ09S
QkE6OlR5cGVDb2RlX3B0ciBfdGNfRnVsbFZhbHVlRGVzY3JpcHRpb247Cgp9OwoKY2xhc3MgX29i
anJlZl9WYWx1ZURlZiA6CiAgcHVibGljIHZpcnR1YWwgX29ianJlZl9Db250YWluZXIsCiAgcHVi
bGljIHZpcnR1YWwgX29ianJlZl9Db250YWluZWQsCiAgcHVibGljIHZpcnR1YWwgX29ianJlZl9J
RExUeXBlCnsKcHVibGljOgogIENPUkJBOjpCb29sZWFuIGlzX2EoY29uc3QgY2hhciogaWQpOwog
IFZhbHVlRGVmOjpGdWxsVmFsdWVEZXNjcmlwdGlvbiogZGVzY3JpYmVfdmFsdWUoKTsKICBWYWx1
ZU1lbWJlckRlZl9wdHIgY3JlYXRlX3ZhbHVlX21lbWJlcihjb25zdCBjaGFyKiBpZCwgY29uc3Qg
Y2hhciogbmFtZSwgY29uc3QgY2hhciogdmVyc2lvbiwgSURMVHlwZV9wdHIgdHlwZSwgVmlzaWJp
bGl0eSBhY2Nlc3MpOwogIEF0dHJpYnV0ZURlZl9wdHIgY3JlYXRlX2F0dHJpYnV0ZShjb25zdCBj
aGFyKiBpZCwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmVyc2lvbiwgSURMVHlwZV9w
dHIgdHlwZSwgQXR0cmlidXRlTW9kZSBtb2RlKTsKICBPcGVyYXRpb25EZWZfcHRyIGNyZWF0ZV9v
cGVyYXRpb24oY29uc3QgY2hhciogaWQsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZl
cnNpb24sIElETFR5cGVfcHRyIHJlc3VsdCwgT3BlcmF0aW9uTW9kZSBtb2RlLCBjb25zdCBQYXJE
ZXNjcmlwdGlvblNlcSYgcGFyYW1zLCBjb25zdCBFeGNlcHRpb25EZWZTZXEmIGV4Y2VwdGlvbnMs
IGNvbnN0IENvbnRleHRJZFNlcSYgY29udGV4dHMpOwoKICBJbnRlcmZhY2VEZWZTZXEqIHN1cHBv
cnRlZF9pbnRlcmZhY2VzKCk7CiAgdm9pZCBzdXBwb3J0ZWRfaW50ZXJmYWNlcyhjb25zdCBJbnRl
cmZhY2VEZWZTZXEmKTsKICBJbml0aWFsaXplclNlcSogaW5pdGlhbGl6ZXJzKCk7CiAgdm9pZCBp
bml0aWFsaXplcnMoY29uc3QgSW5pdGlhbGl6ZXJTZXEmKTsKICBWYWx1ZURlZl9wdHIgYmFzZV92
YWx1ZSgpOwogIHZvaWQgYmFzZV92YWx1ZShWYWx1ZURlZl9wdHIpOwogIFZhbHVlRGVmU2VxKiBh
YnN0cmFjdF9iYXNlX3ZhbHVlcygpOwogIHZvaWQgYWJzdHJhY3RfYmFzZV92YWx1ZXMoY29uc3Qg
VmFsdWVEZWZTZXEmKTsKICBDT1JCQTo6Qm9vbGVhbiBpc19hYnN0cmFjdCgpOwogIHZvaWQgaXNf
YWJzdHJhY3QoQ09SQkE6OkJvb2xlYW4pOwogIENPUkJBOjpCb29sZWFuIGlzX2N1c3RvbSgpOwog
IHZvaWQgaXNfY3VzdG9tKENPUkJBOjpCb29sZWFuKTsKICBDT1JCQTo6Qm9vbGVhbiBpc190cnVu
Y2F0YWJsZSgpOwogIHZvaWQgaXNfdHJ1bmNhdGFibGUoQ09SQkE6OkJvb2xlYW4pOwoKICBpbmxp
bmUgX29ianJlZl9WYWx1ZURlZigpIHsgX1BSX3NldG9iaigwKTsgfQogIF9vYmpyZWZfVmFsdWVE
ZWYoY29uc3QgY2hhciosIElPUDo6VGFnZ2VkUHJvZmlsZUxpc3QqLCBvbW5pSWRlbnRpdHkqLCBv
bW5pTG9jYWxJZGVudGl0eSopOwoKcHJvdGVjdGVkOgogIHZpcnR1YWwgfl9vYmpyZWZfVmFsdWVE
ZWYoKTsKCnByaXZhdGU6CiAgdmlydHVhbCB2b2lkKiBfcHRyVG9PYmpSZWYoY29uc3QgY2hhciop
OwoKICBfb2JqcmVmX1ZhbHVlRGVmKGNvbnN0IF9vYmpyZWZfVmFsdWVEZWYmKTsKICBfb2JqcmVm
X1ZhbHVlRGVmJiBvcGVyYXRvciA9IChjb25zdCBfb2JqcmVmX1ZhbHVlRGVmJik7Cgp9OwoKY2xh
c3MgX3BvZl9WYWx1ZURlZiA6IHB1YmxpYyBwcm94eU9iamVjdEZhY3RvcnkgewpwdWJsaWM6CiAg
aW5saW5lIF9wb2ZfVmFsdWVEZWYoKSA6IHByb3h5T2JqZWN0RmFjdG9yeShWYWx1ZURlZjo6X1BE
X3JlcG9JZCkge30KICB2aXJ0dWFsIH5fcG9mX1ZhbHVlRGVmKCk7CgogIHZpcnR1YWwgb21uaU9i
alJlZiogbmV3T2JqUmVmKGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0KiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbW5pSWRlbnRpdHkqLCBvbW5pTG9jYWxJZGVu
dGl0eSopOwogIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gaXNfYShjb25zdCBjaGFyKikgY29uc3Q7
Cn07CgpjbGFzcyBfaW1wbF9WYWx1ZURlZiA6CiAgcHVibGljIHZpcnR1YWwgX2ltcGxfQ29udGFp
bmVyLAogIHB1YmxpYyB2aXJ0dWFsIF9pbXBsX0NvbnRhaW5lZCwKICBwdWJsaWMgdmlydHVhbCBf
aW1wbF9JRExUeXBlCnsKcHVibGljOgogIHZpcnR1YWwgfl9pbXBsX1ZhbHVlRGVmKCk7CgogIHZp
cnR1YWwgQ09SQkE6OkJvb2xlYW4gaXNfYShjb25zdCBjaGFyKiBpZCkgPSAwOwogIHZpcnR1YWwg
VmFsdWVEZWY6OkZ1bGxWYWx1ZURlc2NyaXB0aW9uKiBkZXNjcmliZV92YWx1ZSgpID0gMDsKICB2
aXJ0dWFsIFZhbHVlTWVtYmVyRGVmX3B0ciBjcmVhdGVfdmFsdWVfbWVtYmVyKGNvbnN0IGNoYXIq
IGlkLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2ZXJzaW9uLCBJRExUeXBlX3B0ciB0
eXBlLCBWaXNpYmlsaXR5IGFjY2VzcykgPSAwOwogIHZpcnR1YWwgQXR0cmlidXRlRGVmX3B0ciBj
cmVhdGVfYXR0cmlidXRlKGNvbnN0IGNoYXIqIGlkLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBj
aGFyKiB2ZXJzaW9uLCBJRExUeXBlX3B0ciB0eXBlLCBBdHRyaWJ1dGVNb2RlIG1vZGUpID0gMDsK
ICB2aXJ0dWFsIE9wZXJhdGlvbkRlZl9wdHIgY3JlYXRlX29wZXJhdGlvbihjb25zdCBjaGFyKiBp
ZCwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmVyc2lvbiwgSURMVHlwZV9wdHIgcmVz
dWx0LCBPcGVyYXRpb25Nb2RlIG1vZGUsIGNvbnN0IFBhckRlc2NyaXB0aW9uU2VxJiBwYXJhbXMs
IGNvbnN0IEV4Y2VwdGlvbkRlZlNlcSYgZXhjZXB0aW9ucywgY29uc3QgQ29udGV4dElkU2VxJiBj
b250ZXh0cykgPSAwOwoKICB2aXJ0dWFsIEludGVyZmFjZURlZlNlcSogc3VwcG9ydGVkX2ludGVy
ZmFjZXMoKSA9IDA7CiAgdmlydHVhbCB2b2lkIHN1cHBvcnRlZF9pbnRlcmZhY2VzKGNvbnN0IElu
dGVyZmFjZURlZlNlcSYpID0gMDsKICB2aXJ0dWFsIEluaXRpYWxpemVyU2VxKiBpbml0aWFsaXpl
cnMoKSA9IDA7CiAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVycyhjb25zdCBJbml0aWFsaXplclNl
cSYpID0gMDsKICB2aXJ0dWFsIFZhbHVlRGVmX3B0ciBiYXNlX3ZhbHVlKCkgPSAwOwogIHZpcnR1
YWwgdm9pZCBiYXNlX3ZhbHVlKFZhbHVlRGVmX3B0cikgPSAwOwogIHZpcnR1YWwgVmFsdWVEZWZT
ZXEqIGFic3RyYWN0X2Jhc2VfdmFsdWVzKCkgPSAwOwogIHZpcnR1YWwgdm9pZCBhYnN0cmFjdF9i
YXNlX3ZhbHVlcyhjb25zdCBWYWx1ZURlZlNlcSYpID0gMDsKICB2aXJ0dWFsIENPUkJBOjpCb29s
ZWFuIGlzX2Fic3RyYWN0KCkgPSAwOwogIHZpcnR1YWwgdm9pZCBpc19hYnN0cmFjdChDT1JCQTo6
Qm9vbGVhbikgPSAwOwogIHZpcnR1YWwgQ09SQkE6OkJvb2xlYW4gaXNfY3VzdG9tKCkgPSAwOwog
IHZpcnR1YWwgdm9pZCBpc19jdXN0b20oQ09SQkE6OkJvb2xlYW4pID0gMDsKICB2aXJ0dWFsIENP
UkJBOjpCb29sZWFuIGlzX3RydW5jYXRhYmxlKCkgPSAwOwogIHZpcnR1YWwgdm9pZCBpc190cnVu
Y2F0YWJsZShDT1JCQTo6Qm9vbGVhbikgPSAwOwoKcHVibGljOgogIHZpcnR1YWwgX0NPUkJBX0Jv
b2xlYW4gX2Rpc3BhdGNoKEdJT1BfUyYpOwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9wdHJU
b0ludGVyZmFjZShjb25zdCBjaGFyKik7CiAgdmlydHVhbCBjb25zdCBjaGFyKiBfbW9zdERlcml2
ZWRSZXBvSWQoKTsKfTsKCmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19WYWx1
ZURlZjsKCnN0cnVjdCBWYWx1ZURlc2NyaXB0aW9uIHsKICB0eXBlZGVmIF9DT1JCQV9Db25zdHJU
eXBlX1ZhcmlhYmxlX1ZhcjxWYWx1ZURlc2NyaXB0aW9uPiBfdmFyX3R5cGU7CgogIENPUkJBOjpT
dHJpbmdfbWVtYmVyIG5hbWU7CgogIENPUkJBOjpTdHJpbmdfbWVtYmVyIGlkOwoKICBDT1JCQTo6
Qm9vbGVhbiBpc19hYnN0cmFjdDsKCiAgQ09SQkE6OkJvb2xlYW4gaXNfY3VzdG9tOwoKICBDT1JC
QTo6U3RyaW5nX21lbWJlciBkZWZpbmVkX2luOwoKICBDT1JCQTo6U3RyaW5nX21lbWJlciB2ZXJz
aW9uOwoKICBSZXBvc2l0b3J5SWRTZXEgc3VwcG9ydGVkX2ludGVyZmFjZXM7CgogIFJlcG9zaXRv
cnlJZFNlcSBhYnN0cmFjdF9iYXNlX3ZhbHVlczsKCiAgQ09SQkE6OkJvb2xlYW4gaXNfdHJ1bmNh
dGFibGU7CgogIENPUkJBOjpTdHJpbmdfbWVtYmVyIGJhc2VfdmFsdWU7CgogIHNpemVfdCBfTlBf
YWxpZ25lZFNpemUoc2l6ZV90IGluaXRpYWxvZmZzZXQpIGNvbnN0OwogIHZvaWQgb3BlcmF0b3I+
Pj0gKE5ldEJ1ZmZlcmVkU3RyZWFtICYpIGNvbnN0OwogIHZvaWQgb3BlcmF0b3I8PD0gKE5ldEJ1
ZmZlcmVkU3RyZWFtICYpOwogIHZvaWQgb3BlcmF0b3I+Pj0gKE1lbUJ1ZmZlcmVkU3RyZWFtICYp
IGNvbnN0OwogIHZvaWQgb3BlcmF0b3I8PD0gKE1lbUJ1ZmZlcmVkU3RyZWFtICYpOwp9OwoKdHlw
ZWRlZiBWYWx1ZURlc2NyaXB0aW9uOjpfdmFyX3R5cGUgVmFsdWVEZXNjcmlwdGlvbl92YXI7Cgp0
eXBlZGVmIF9DT1JCQV9Db25zdHJUeXBlX1ZhcmlhYmxlX09VVF9hcmc8IFZhbHVlRGVzY3JpcHRp
b24sVmFsdWVEZXNjcmlwdGlvbl92YXIgPiBWYWx1ZURlc2NyaXB0aW9uX291dDsKCmV4dGVybiBj
b25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19WYWx1ZURlc2NyaXB0aW9uOwojIDU3MzkgIi4u
L29tbmlPUkIzL2lyX2RlZnMuaGgiCmNsYXNzIFZhbHVlQm94RGVmIHsKcHVibGljOgoKICB0eXBl
ZGVmIFZhbHVlQm94RGVmX3B0ciBfcHRyX3R5cGU7CiAgdHlwZWRlZiBWYWx1ZUJveERlZl92YXIg
X3Zhcl90eXBlOwoKICBzdGF0aWMgX3B0cl90eXBlIF9kdXBsaWNhdGUoX3B0cl90eXBlKTsKICBz
dGF0aWMgX3B0cl90eXBlIF9uYXJyb3coQ09SQkE6Ok9iamVjdF9wdHIpOwogIHN0YXRpYyBfcHRy
X3R5cGUgX25pbCgpOwoKICBzdGF0aWMgaW5saW5lIHNpemVfdCBfYWxpZ25lZFNpemUoX3B0cl90
eXBlLCBzaXplX3QpOwogIHN0YXRpYyBpbmxpbmUgdm9pZCBfbWFyc2hhbE9ialJlZihfcHRyX3R5
cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2Jq
UmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVyZWRTdHJlYW0mKTsKCiAgc3RhdGljIGlubGluZSBfcHRy
X3R5cGUgX3VubWFyc2hhbE9ialJlZihOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgQ09SQkE6
Ok9iamVjdF9wdHIgb2JqID0gQ09SQkE6OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBzKTsK
ICAgIF9wdHJfdHlwZSByZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICBDT1JCQTo6cmVsZWFzZShv
YmopOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBpbmxpbmUgX3B0cl90eXBlIF91
bm1hcnNoYWxPYmpSZWYoTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIENPUkJBOjpPYmplY3Rf
cHRyIG9iaiA9IENPUkJBOjpVbk1hcnNoYWxPYmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICBfcHRy
X3R5cGUgcmVzdWx0ID0gX25hcnJvdyhvYmopOwogICAgQ09SQkE6OnJlbGVhc2Uob2JqKTsKICAg
IHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsKCgoK
fTsKCmNsYXNzIF9vYmpyZWZfVmFsdWVCb3hEZWYgOgogIHB1YmxpYyB2aXJ0dWFsIF9vYmpyZWZf
VHlwZWRlZkRlZgp7CnB1YmxpYzoKCiAgSURMVHlwZV9wdHIgb3JpZ2luYWxfdHlwZV9kZWYoKTsK
ICB2b2lkIG9yaWdpbmFsX3R5cGVfZGVmKElETFR5cGVfcHRyKTsKCiAgaW5saW5lIF9vYmpyZWZf
VmFsdWVCb3hEZWYoKSB7IF9QUl9zZXRvYmooMCk7IH0KICBfb2JqcmVmX1ZhbHVlQm94RGVmKGNv
bnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0Kiwgb21uaUlkZW50aXR5Kiwgb21uaUxv
Y2FsSWRlbnRpdHkqKTsKCnByb3RlY3RlZDoKICB2aXJ0dWFsIH5fb2JqcmVmX1ZhbHVlQm94RGVm
KCk7Cgpwcml2YXRlOgogIHZpcnR1YWwgdm9pZCogX3B0clRvT2JqUmVmKGNvbnN0IGNoYXIqKTsK
CiAgX29ianJlZl9WYWx1ZUJveERlZihjb25zdCBfb2JqcmVmX1ZhbHVlQm94RGVmJik7CiAgX29i
anJlZl9WYWx1ZUJveERlZiYgb3BlcmF0b3IgPSAoY29uc3QgX29ianJlZl9WYWx1ZUJveERlZiYp
OwoKfTsKCmNsYXNzIF9wb2ZfVmFsdWVCb3hEZWYgOiBwdWJsaWMgcHJveHlPYmplY3RGYWN0b3J5
IHsKcHVibGljOgogIGlubGluZSBfcG9mX1ZhbHVlQm94RGVmKCkgOiBwcm94eU9iamVjdEZhY3Rv
cnkoVmFsdWVCb3hEZWY6Ol9QRF9yZXBvSWQpIHt9CiAgdmlydHVhbCB+X3BvZl9WYWx1ZUJveERl
ZigpOwoKICB2aXJ0dWFsIG9tbmlPYmpSZWYqIG5ld09ialJlZihjb25zdCBjaGFyKiwgSU9QOjpU
YWdnZWRQcm9maWxlTGlzdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb21uaUlk
ZW50aXR5Kiwgb21uaUxvY2FsSWRlbnRpdHkqKTsKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIGlz
X2EoY29uc3QgY2hhciopIGNvbnN0Owp9OwoKY2xhc3MgX2ltcGxfVmFsdWVCb3hEZWYgOgogIHB1
YmxpYyB2aXJ0dWFsIF9pbXBsX1R5cGVkZWZEZWYKewpwdWJsaWM6CiAgdmlydHVhbCB+X2ltcGxf
VmFsdWVCb3hEZWYoKTsKCiAgdmlydHVhbCBJRExUeXBlX3B0ciBvcmlnaW5hbF90eXBlX2RlZigp
ID0gMDsKICB2aXJ0dWFsIHZvaWQgb3JpZ2luYWxfdHlwZV9kZWYoSURMVHlwZV9wdHIpID0gMDsK
CnB1YmxpYzoKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIF9kaXNwYXRjaChHSU9QX1MmKTsKCnBy
aXZhdGU6CiAgdmlydHVhbCB2b2lkKiBfcHRyVG9JbnRlcmZhY2UoY29uc3QgY2hhciopOwogIHZp
cnR1YWwgY29uc3QgY2hhciogX21vc3REZXJpdmVkUmVwb0lkKCk7Cn07CgpleHRlcm4gY29uc3Qg
Q09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVmFsdWVCb3hEZWY7CiMgNTg1NCAiLi4vb21uaU9SQjMv
aXJfZGVmcy5oaCIKY2xhc3MgQWJzdHJhY3RJbnRlcmZhY2VEZWYgewpwdWJsaWM6CgogIHR5cGVk
ZWYgQWJzdHJhY3RJbnRlcmZhY2VEZWZfcHRyIF9wdHJfdHlwZTsKICB0eXBlZGVmIEFic3RyYWN0
SW50ZXJmYWNlRGVmX3ZhciBfdmFyX3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5cGUgX2R1cGxpY2F0
ZShfcHRyX3R5cGUpOwogIHN0YXRpYyBfcHRyX3R5cGUgX25hcnJvdyhDT1JCQTo6T2JqZWN0X3B0
cik7CiAgc3RhdGljIF9wdHJfdHlwZSBfbmlsKCk7CgogIHN0YXRpYyBpbmxpbmUgc2l6ZV90IF9h
bGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJz
aGFsT2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgaW5saW5l
IHZvaWQgX21hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwoKICBz
dGF0aWMgaW5saW5lIF9wdHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3RyZWFt
JiBzKSB7CiAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJzaGFsT2JqUmVm
KF9QRF9yZXBvSWQsIHMpOwogICAgX3B0cl90eXBlIHJlc3VsdCA9IF9uYXJyb3cob2JqKTsKICAg
IENPUkJBOjpyZWxlYXNlKG9iaik7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIGlu
bGluZSBfcHRyX3R5cGUgX3VubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYgcykgewog
ICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqID0gQ09SQkE6OlVuTWFyc2hhbE9ialJlZihfUERfcmVw
b0lkLCBzKTsKICAgIF9wdHJfdHlwZSByZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICBDT1JCQTo6
cmVsZWFzZShvYmopOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBjb25zdCBjaGFy
KiBfUERfcmVwb0lkOwoKCgp9OwoKY2xhc3MgX29ianJlZl9BYnN0cmFjdEludGVyZmFjZURlZiA6
CiAgcHVibGljIHZpcnR1YWwgX29ianJlZl9JbnRlcmZhY2VEZWYKewpwdWJsaWM6CgogIGlubGlu
ZSBfb2JqcmVmX0Fic3RyYWN0SW50ZXJmYWNlRGVmKCkgeyBfUFJfc2V0b2JqKDApOyB9CiAgX29i
anJlZl9BYnN0cmFjdEludGVyZmFjZURlZihjb25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxl
TGlzdCosIG9tbmlJZGVudGl0eSosIG9tbmlMb2NhbElkZW50aXR5Kik7Cgpwcm90ZWN0ZWQ6CiAg
dmlydHVhbCB+X29ianJlZl9BYnN0cmFjdEludGVyZmFjZURlZigpOwoKcHJpdmF0ZToKICB2aXJ0
dWFsIHZvaWQqIF9wdHJUb09ialJlZihjb25zdCBjaGFyKik7CgogIF9vYmpyZWZfQWJzdHJhY3RJ
bnRlcmZhY2VEZWYoY29uc3QgX29ianJlZl9BYnN0cmFjdEludGVyZmFjZURlZiYpOwogIF9vYmpy
ZWZfQWJzdHJhY3RJbnRlcmZhY2VEZWYmIG9wZXJhdG9yID0gKGNvbnN0IF9vYmpyZWZfQWJzdHJh
Y3RJbnRlcmZhY2VEZWYmKTsKCn07CgpjbGFzcyBfcG9mX0Fic3RyYWN0SW50ZXJmYWNlRGVmIDog
cHVibGljIHByb3h5T2JqZWN0RmFjdG9yeSB7CnB1YmxpYzoKICBpbmxpbmUgX3BvZl9BYnN0cmFj
dEludGVyZmFjZURlZigpIDogcHJveHlPYmplY3RGYWN0b3J5KEFic3RyYWN0SW50ZXJmYWNlRGVm
OjpfUERfcmVwb0lkKSB7fQogIHZpcnR1YWwgfl9wb2ZfQWJzdHJhY3RJbnRlcmZhY2VEZWYoKTsK
CiAgdmlydHVhbCBvbW5pT2JqUmVmKiBuZXdPYmpSZWYoY29uc3QgY2hhciosIElPUDo6VGFnZ2Vk
UHJvZmlsZUxpc3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9tbmlJZGVudGl0
eSosIG9tbmlMb2NhbElkZW50aXR5Kik7CiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBpc19hKGNv
bnN0IGNoYXIqKSBjb25zdDsKfTsKCmNsYXNzIF9pbXBsX0Fic3RyYWN0SW50ZXJmYWNlRGVmIDoK
ICBwdWJsaWMgdmlydHVhbCBfaW1wbF9JbnRlcmZhY2VEZWYKewpwdWJsaWM6CiAgdmlydHVhbCB+
X2ltcGxfQWJzdHJhY3RJbnRlcmZhY2VEZWYoKTsKCnB1YmxpYzoKICB2aXJ0dWFsIF9DT1JCQV9C
b29sZWFuIF9kaXNwYXRjaChHSU9QX1MmKTsKCnByaXZhdGU6CiAgdmlydHVhbCB2b2lkKiBfcHRy
VG9JbnRlcmZhY2UoY29uc3QgY2hhciopOwogIHZpcnR1YWwgY29uc3QgY2hhciogX21vc3REZXJp
dmVkUmVwb0lkKCk7Cn07CgpleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfQWJz
dHJhY3RJbnRlcmZhY2VEZWY7CiMgMjYwMyAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9D
T1JCQS5oIiAyCiMgMjYxNiAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9DT1JCQS5oIgp9
CgoKIyAxICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL29tbmlPUkIuaCIgMQojIDEyNSAi
Li4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9vbW5pT1JCLmgiCnN0cnVjdCBvbW5pT3JiQm9h
S2V5IHsKICBfQ09SQkFfVUxvbmcgaGk7CiAgX0NPUkJBX1VMb25nIG1lZDsKICBfQ09SQkFfVUxv
bmcgbG87Cn07CgoKbmFtZXNwYWNlIG9tbmlPUkIKCnsKIyAxNDggIi4uLy4uLy4uLy4uL2luY2x1
ZGUvb21uaU9SQjMvb21uaU9SQi5oIgogIGV4dGVybiBjaGFyKiBzZXJ2ZXJOYW1lOwojIDE2MSAi
Li4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9vbW5pT1JCLmgiCiAgZXh0ZXJuIGludCB0cmFj
ZUxldmVsOwoKCgoKCiAgZXh0ZXJuIGludCB0cmFjZUludm9jYXRpb25zOwojIDE5NyAiLi4vLi4v
Li4vLi4vaW5jbHVkZS9vbW5pT1JCMy9vbW5pT1JCLmgiCiAgZXh0ZXJuIENPUkJBOjpCb29sZWFu
IHN0cmljdElJT1A7CiMgMjIzICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL29tbmlPUkIu
aCIKICBleHRlcm4gQ09SQkE6OkJvb2xlYW4gdGNBbGlhc0V4cGFuZDsKIyAyMzcgIi4uLy4uLy4u
Ly4uL2luY2x1ZGUvb21uaU9SQjMvb21uaU9SQi5oIgogIHR5cGVkZWYgb21uaU9yYkJvYUtleSBv
YmplY3RLZXk7CgoKCgoKCiAgICAgICAgICAgICAgICAgICB2b2lkIGdlbmVyYXRlTmV3S2V5KG9i
amVjdEtleSAmayk7CgoKICAgICAgICAgICAgICAgICAgIG9iamVjdEtleSBudWxsa2V5KCk7CgoK
ICAgICAgICAgICAgICAgICAgIGludCBvcGVyYXRvcj09KGNvbnN0IG9iamVjdEtleSAmazEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0S2V5ICZrMik7
CgoKICAgICAgICAgICAgICAgICAgIGludCBvcGVyYXRvciE9KGNvbnN0IG9iamVjdEtleSAmazEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0S2V5ICZr
Mik7CgoKICB0eXBlZGVmIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfT2N0ZXQgc2VxT2N0ZXRz
OwoKICAgICAgICAgICAgICAgICAgIHNlcU9jdGV0cyoga2V5VG9PY3RldFNlcXVlbmNlKGNvbnN0
IG9iamVjdEtleSAmazEpOwoKCgoKICAgICAgICAgICAgICAgICAgIG9iamVjdEtleSBvY3RldFNl
cXVlbmNlVG9LZXkoY29uc3Qgc2VxT2N0ZXRzJiBzZXEpOwojIDI3NCAiLi4vLi4vLi4vLi4vaW5j
bHVkZS9vbW5pT1JCMy9vbW5pT1JCLmgiCiAgICAgICAgICAgICAgICAgICBzaXplX3QgTWF4TWVz
c2FnZVNpemUoKTsKIyAyODMgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvb21uaU9SQi5o
IgogICAgICAgICAgICAgICAgICAgdm9pZCBNYXhNZXNzYWdlU2l6ZShzaXplX3QgbmV3dmFsdWUp
OwoKCgogIGVudW0gaWRsZUNvbm5UeXBlIHsgaWRsZUluY29taW5nLCBpZGxlT3V0Z29pbmcgfTsK
IyAyOTYgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvb21uaU9SQi5oIgogICAgICAgICAg
ICAgICAgICAgdm9pZCBpZGxlQ29ubmVjdGlvblNjYW5QZXJpb2QoaWRsZUNvbm5UeXBlIGRpcmVj
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25n
IHNlYyk7CgoKCgoKICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBpZGxlQ29ubmVjdGlv
blNjYW5QZXJpb2QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRs
ZUNvbm5UeXBlIGRpcmVjdGlvbik7CgoKCiAgZW51bSBjYWxsVGltZU91dFR5cGUgeyBjbGllbnRT
aWRlLCBzZXJ2ZXJTaWRlIH07CiMgMzE4ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL29t
bmlPUkIuaCIKICAgICAgICAgICAgICAgICAgIHZvaWQgY2FsbFRpbWVPdXRQZXJpb2QoY2FsbFRp
bWVPdXRUeXBlIGRpcmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ09SQkE6OlVMb25nIHNlYyk7CgoKCgoKICAgICAgICAgICAgICAgICAgIENPUkJBOjpV
TG9uZyBjYWxsVGltZU91dFBlcmlvZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbFRpbWVPdXRUeXBlIGRpcmVjdGlvbik7CiMgMzQwICIuLi8uLi8uLi8u
Li9pbmNsdWRlL29tbmlPUkIzL29tbmlPUkIuaCIKICAgICAgICAgICAgICAgICAgIHZvaWQgc2Nh
bkdyYW51bGFyaXR5KENPUkJBOjpVTG9uZyBzZWMpOwoKCgoKCiAgICAgICAgICAgICAgICAgICBD
T1JCQTo6VUxvbmcgc2NhbkdyYW51bGFyaXR5KCk7CiMgMzgyICIuLi8uLi8uLi8uLi9pbmNsdWRl
L29tbmlPUkIzL29tbmlPUkIuaCIKICB0eXBlZGVmIENPUkJBOjpCb29sZWFuICgqdHJhbnNpZW50
RXhjZXB0aW9uSGFuZGxlcl90KSh2b2lkKiBjb29raWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgbl9yZXRyaWVzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ09SQkE6OlRSQU5TSUVOVCYgZXgpOwoKICAg
ICAgICAgICAgICAgICAgIHZvaWQgaW5zdGFsbFRyYW5zaWVudEV4Y2VwdGlvbkhhbmRsZXIodm9p
ZCogY29va2llLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2llbnRFeGNl
cHRpb25IYW5kbGVyX3QgZm4pOwoKICAgICAgICAgICAgICAgICAgIHZvaWQgaW5zdGFsbFRyYW5z
aWVudEV4Y2VwdGlvbkhhbmRsZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENP
UkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCogY29va2llLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2llbnRFeGNl
cHRpb25IYW5kbGVyX3QgZm4pOwoKICBleHRlcm4gQ09SQkE6OlVMb25nIGRlZmF1bHRUcmFuc2ll
bnRSZXRyeURlbGF5SW5jcmVtZW50OwogIGV4dGVybiBDT1JCQTo6VUxvbmcgZGVmYXVsdFRyYW5z
aWVudFJldHJ5RGVsYXlNYXhpbXVtOwojIDQxMyAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JC
My9vbW5pT1JCLmgiCiAgdHlwZWRlZiBDT1JCQTo6Qm9vbGVhbiAoKmNvbW1GYWlsdXJlRXhjZXB0
aW9uSGFuZGxlcl90KSh2b2lkKiBjb29raWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDT1JCQTo6VUxvbmcgbl9yZXRyaWVzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgQ09SQkE6OkNPTU1fRkFJTFVSRSYgZXgpOwoKICAgICAg
ICAgICAgICAgICAgIHZvaWQgaW5zdGFsbENvbW1GYWlsdXJlRXhjZXB0aW9uSGFuZGxlcih2b2lk
KiBjb29raWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1GYWlsdXJlRXhj
ZXB0aW9uSGFuZGxlcl90IGZuKTsKCiAgICAgICAgICAgICAgICAgICB2b2lkIGluc3RhbGxDb21t
RmFpbHVyZUV4Y2VwdGlvbkhhbmRsZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQqIGNvb2tpZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21t
RmFpbHVyZUV4Y2VwdGlvbkhhbmRsZXJfdCBmbik7CiMgNDQ2ICIuLi8uLi8uLi8uLi9pbmNsdWRl
L29tbmlPUkIzL29tbmlPUkIuaCIKICB0eXBlZGVmIENPUkJBOjpCb29sZWFuICgqc3lzdGVtRXhj
ZXB0aW9uSGFuZGxlcl90KSh2b2lkKiBjb29raWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ09SQkE6OlVMb25nIG5fcmV0cmllcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uJiBleCk7CgogICAgICAgICAg
ICAgICAgICAgdm9pZCBpbnN0YWxsU3lzdGVtRXhjZXB0aW9uSGFuZGxlcih2b2lkKiBjb29raWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbUV4Y2VwdGlvbkhhbmRs
ZXJfdCBmbik7CgogICAgICAgICAgICAgICAgICAgdm9pZCBpbnN0YWxsU3lzdGVtRXhjZXB0aW9u
SGFuZGxlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6Ok9iamVj
dF9wdHIgb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjb29r
aWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbUV4Y2VwdGlvbkhh
bmRsZXJfdCBmbik7CiMgNDg4ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL29tbmlPUkIu
aCIKICBjbGFzcyBsb2FkZXIgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgQ09SQkE6Ok9iamVjdF9w
dHIgKCptYXBLZXlUb09iamVjdF90KSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG9iamVjdEtleSYga2V5KTsKCiAgICBzdGF0aWMgdm9pZCBzZXQobWFwS2V5
VG9PYmplY3RfdCBOZXdLZXlUb09iamVjdCk7CiAgfTsKIyA1MzkgIi4uLy4uLy4uLy4uL2luY2x1
ZGUvb21uaU9SQjMvb21uaU9SQi5oIgogIGNsYXNzIGdpb3BTZXJ2ZXJUaHJlYWRXcmFwcGVyIHsK
ICBwdWJsaWM6CiAgICB2aXJ0dWFsIHZvaWQgcnVuKHZvaWQgKCpmbikodm9pZCopLCB2b2lkKiBh
cmcpIHsgZm4oYXJnKTsgfQogICAgdmlydHVhbCB+Z2lvcFNlcnZlclRocmVhZFdyYXBwZXIoKSB7
fQoKCgoKCgogICAgc3RhdGljIHZvaWQgc2V0R2lvcFNlcnZlclRocmVhZFdyYXBwZXIoZ2lvcFNl
cnZlclRocmVhZFdyYXBwZXIqIHApOwogICAgc3RhdGljIGdpb3BTZXJ2ZXJUaHJlYWRXcmFwcGVy
KiBnZXRHaW9wU2VydmVyVGhyZWFkV3JhcHBlcigpOwogIH07CiMgNTYxICIuLi8uLi8uLi8uLi9p
bmNsdWRlL29tbmlPUkIzL29tbmlPUkIuaCIKICBjbGFzcyBmYXRhbEV4Y2VwdGlvbiB7CiAgcHVi
bGljOgogICAgZmF0YWxFeGNlcHRpb24oY29uc3QgY2hhciAqZmlsZSxpbnQgbGluZSxjb25zdCBj
aGFyICplcnJtc2cpOwogICAgaW5saW5lIH5mYXRhbEV4Y2VwdGlvbigpIHt9CiAgICBpbmxpbmUg
Y29uc3QgY2hhciAqZmlsZSgpIGNvbnN0IHsgcmV0dXJuIHBkX2ZpbGU7IH0KICAgIGlubGluZSBp
bnQgbGluZSgpIGNvbnN0IHsgcmV0dXJuIHBkX2xpbmU7IH0KICAgIGlubGluZSBjb25zdCBjaGFy
ICplcnJtc2coKSBjb25zdCB7IHJldHVybiBwZF9lcnJtc2c7IH0KICBwcml2YXRlOgogICAgY29u
c3QgY2hhciAqcGRfZmlsZTsKICAgIGludCBwZF9saW5lOwogICAgY29uc3QgY2hhciAqcGRfZXJy
bXNnOwoKICAgIGZhdGFsRXhjZXB0aW9uKCk7CiAgfTsKIyA1ODcgIi4uLy4uLy4uLy4uL2luY2x1
ZGUvb21uaU9SQjMvb21uaU9SQi5oIgogIGV4dGVybiB1bnNpZ25lZCBpbnQgbWF4VGNwQ29ubmVj
dGlvblBlclNlcnZlcjsKIyA2MDAgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvb21uaU9S
Qi5oIgogIGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBkaWlUaHJvd3NTeXNFeGNlcHRpb25zOwojIDYx
NyAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9vbW5pT1JCLmgiCiAgZXh0ZXJuIENPUkJB
OjpCb29sZWFuIGFib3J0T25JbnRlcm5hbEVycm9yOwojIDYyNyAiLi4vLi4vLi4vLi4vaW5jbHVk
ZS9vbW5pT1JCMy9vbW5pT1JCLmgiCiAgZXh0ZXJuIF9DT1JCQV9VTG9uZyBvYmplY3RUYWJsZVNp
emU7CiMgNjQxICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL29tbmlPUkIuaCIKICAgICAg
ICAgICAgICAgICAgIHZvaWQgZW5hYmxlTGNkTW9kZSgpOwojIDY1OSAiLi4vLi4vLi4vLi4vaW5j
bHVkZS9vbW5pT1JCMy9vbW5pT1JCLmgiCiAgZXh0ZXJuCiAgICAgICAgICAgICAgICAgICAgICBD
T1JCQTo6Qm9vbGVhbiBvbW5pT1JCXzI3X0NvbXBhdGlibGVBbnlFeHRyYWN0aW9uOwojIDY3MSAi
Li4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9vbW5pT1JCLmgiCiAgZXh0ZXJuIENPUkJBOjpC
b29sZWFuIHZlcmlmeU9iamVjdEV4aXN0c0FuZFR5cGU7CiMgNjg2ICIuLi8uLi8uLi8uLi9pbmNs
dWRlL29tbmlPUkIzL29tbmlPUkIuaCIKICBleHRlcm4gaW50IHBvYUhvbGRSZXF1ZXN0VGltZW91
dDsKIyA2OTkgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvb21uaU9SQi5oIgogIGNsYXNz
IExPQ0FUSU9OX0ZPUldBUkQgewogIHB1YmxpYzoKICAgIGlubGluZSBMT0NBVElPTl9GT1JXQVJE
KENPUkJBOjpPYmplY3RfcHRyIG9ianJlZikKICAgICAgOiBwZF9vYmpyZWYob2JqcmVmKSB7fQoK
ICAgIGlubGluZSBDT1JCQTo6T2JqZWN0X3B0ciBnZXRfb2JqKCkgY29uc3QgeyByZXR1cm4gcGRf
b2JqcmVmOyB9CgogIHByaXZhdGU6CiAgICBDT1JCQTo6T2JqZWN0X3B0ciBwZF9vYmpyZWY7CiAg
fTsKCgoKCgogIGV4dGVybiBDT1JCQTo6Qm9vbGVhbiB1c2VUeXBlQ29kZUluZGlyZWN0aW9uczsK
CgogIGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBhY2NlcHRNaXNhbGlnbmVkVGNJbmRpcmVjdGlvbnM7
CgoKCiAgY2xhc3MgbG9nU3RyZWFtIHsKICBwdWJsaWM6CiAgICBsb2dTdHJlYW0oKTsKICAgIH5s
b2dTdHJlYW0oKTsKICAgIGxvZ1N0cmVhbSYgb3BlcmF0b3I8PChjaGFyIGMpOwogICAgbG9nU3Ry
ZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hh
ciljOyB9CiAgICBsb2dTdHJlYW0mIG9wZXJhdG9yPDwoc2lnbmVkIGNoYXIgYykgeyByZXR1cm4g
KCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBsb2dTdHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgY2hh
ciAqcyk7CiAgICBsb2dTdHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgdW5zaWduZWQgY2hhciAqcykg
ewogICAgICByZXR1cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsKICAgIH0KICAgIGxvZ1N0
cmVhbSYgb3BlcmF0b3I8PChjb25zdCBzaWduZWQgY2hhciAqcykgewogICAgICByZXR1cm4gKCp0
aGlzKSA8PCAoY29uc3QgY2hhciopczsKICAgIH0KICAgIGxvZ1N0cmVhbSYgb3BlcmF0b3I8PChj
b25zdCB2b2lkICpwKTsKICAgIGxvZ1N0cmVhbSYgb3BlcmF0b3I8PChpbnQgbik7CiAgICBsb2dT
dHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgaW50IG4pOwogICAgbG9nU3RyZWFtJiBvcGVyYXRv
cjw8KGxvbmcgbik7CiAgICBsb2dTdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBuKTsK
ICAgIGxvZ1N0cmVhbSYgb3BlcmF0b3I8PChzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKGlu
dCluKTt9CiAgICBsb2dTdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgbikge3JldHVy
biBvcGVyYXRvcjw8KCh1bnNpZ25lZCBpbnQpbik7fQoKICAgIGxvZ1N0cmVhbSYgb3BlcmF0b3I8
PChsb25nIGxvbmcgbik7CiAgICBsb2dTdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBs
b25nIG4pOwoKCiAgICBsb2dTdHJlYW0mIG9wZXJhdG9yPDwoYm9vbCBiKSB7IHJldHVybiBvcGVy
YXRvcjw8KChpbnQpYik7IH0KCgogICAgbG9nU3RyZWFtJiBvcGVyYXRvcjw8KGRvdWJsZSBuKTsK
ICAgIGxvZ1N0cmVhbSYgb3BlcmF0b3I8PChmbG9hdCBuKSB7IHJldHVybiBvcGVyYXRvcjw8KChk
b3VibGUpbik7IH0KCgoKCiAgICBsb2dTdHJlYW0mIGZsdXNoKCk7CiAgcHJpdmF0ZToKICAgIHZv
aWQqIHBkX3N0YXRlOwogIH07CgogIGV4dGVybiBsb2dTdHJlYW0mIGxvZzsKCgoKCgogIHN0YXRp
YyBpbmxpbmUgaW50IHRyYWNlKGludCB0bCkgeyByZXR1cm4gdHJhY2VMZXZlbCA+PSB0bDsgfQoK
CiAgY2xhc3MgbG9nZ2VyIHsKICBwdWJsaWM6CiAgICBsb2dnZXIoY29uc3QgY2hhciogcHJlZml4
ID0gMCk7CiAgICB+bG9nZ2VyKCk7CgoKICAgIGxvZ2dlciYgb3BlcmF0b3I8PChjaGFyIGMpOwog
ICAgbG9nZ2VyJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8
PCAoY2hhciljOyB9CiAgICBsb2dnZXImIG9wZXJhdG9yPDwoc2lnbmVkIGNoYXIgYykgeyByZXR1
cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBsb2dnZXImIG9wZXJhdG9yPDwoY29uc3QgY2hh
ciAqcyk7CiAgICBsb2dnZXImIG9wZXJhdG9yPDwoY29uc3QgdW5zaWduZWQgY2hhciAqcykgewog
ICAgICByZXR1cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsKICAgIH0KICAgIGxvZ2dlciYg
b3BlcmF0b3I8PChjb25zdCBzaWduZWQgY2hhciAqcykgewogICAgICByZXR1cm4gKCp0aGlzKSA8
PCAoY29uc3QgY2hhciopczsKICAgIH0KICAgIGxvZ2dlciYgb3BlcmF0b3I8PChjb25zdCB2b2lk
ICpwKTsKICAgIGxvZ2dlciYgb3BlcmF0b3I8PChpbnQgbik7CiAgICBsb2dnZXImIG9wZXJhdG9y
PDwodW5zaWduZWQgaW50IG4pOwogICAgbG9nZ2VyJiBvcGVyYXRvcjw8KGxvbmcgbik7CiAgICBs
b2dnZXImIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBuKTsKICAgIGxvZ2dlciYgb3BlcmF0b3I8
PChzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKGludCluKTt9CiAgICBsb2dnZXImIG9wZXJh
dG9yPDwodW5zaWduZWQgc2hvcnQgbikge3JldHVybiBvcGVyYXRvcjw8KCh1bnNpZ25lZCBpbnQp
bik7fQoKICAgIGxvZ2dlciYgb3BlcmF0b3I8PChsb25nIGxvbmcgbik7CiAgICBsb2dnZXImIG9w
ZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIG4pOwoKCiAgICBsb2dnZXImIG9wZXJhdG9yPDwo
Ym9vbCBiKSB7IHJldHVybiBvcGVyYXRvcjw8KChpbnQpYik7IH0KCgogICAgbG9nZ2VyJiBvcGVy
YXRvcjw8KGRvdWJsZSBuKTsKICAgIGxvZ2dlciYgb3BlcmF0b3I8PChmbG9hdCBuKSB7IHJldHVy
biBvcGVyYXRvcjw8KChkb3VibGUpbik7IH0KCgoKCiAgICBsb2dnZXImIG9wZXJhdG9yPDwob21u
aUxvY2FsSWRlbnRpdHkqKTsKICAgIGxvZ2dlciYgb3BlcmF0b3I8PChvbW5pSWRlbnRpdHkqKTsK
ICAgIGxvZ2dlciYgb3BlcmF0b3I8PChvbW5pT2JqS2V5Jik7CgogICAgdm9pZCBmbHVzaCgpOwoK
CgogIHByaXZhdGU6CiAgICBsb2dnZXIoY29uc3QgbG9nZ2VyJik7CiAgICBsb2dnZXImIG9wZXJh
dG9yPShjb25zdCBsb2dnZXImKTsKCiAgICBpbmxpbmUgdm9pZCByZXNlcnZlKGludCBuKSB7IGlm
KCBwZF9lbmQgLSBwZF9wIC0gMSA8IG4gKSBtb3JlKG4pOyB9CiAgICB2b2lkIG1vcmUoaW50IG4p
OwoKICAgIGNvbnN0IGNoYXIqIHBkX3ByZWZpeDsKICAgIGNoYXIqIHBkX2J1ZjsKICAgIGNoYXIq
IHBkX3A7CiAgICBjaGFyKiBwZF9lbmQ7CiAgfTsKCgogICAgICAgICAgICAgICAgICAgdm9pZCBs
b2dmKGNvbnN0IGNoYXIqIGZtdCAuLi4pOwoKCiAgICAgICAgICAgICAgICAgICB2b2lkIGRvX2xv
Z3MoY29uc3QgY2hhciogbXNnKTsKCgogICAgICAgICAgICAgICAgICAgaW5saW5lIHZvaWQgbG9n
cyhpbnQgdGwsIGNvbnN0IGNoYXIqIG1zZykgewogICAgaWYoIHRyYWNlTGV2ZWwgPj0gdGwgKSBk
b19sb2dzKG1zZyk7CiAgfQojIDg0NiAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9vbW5p
T1JCLmgiCiAgZXh0ZXJuIG9iamVjdEtleSBzZWVkOwojIDg3NyAiLi4vLi4vLi4vLi4vaW5jbHVk
ZS9vbW5pT1JCMy9vbW5pT1JCLmgiCn0KIyAyNjIwICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlP
UkIzL0NPUkJBLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL3Byb3h5RmFj
dG9yeS5oIiAxCiMgMjYyMSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9DT1JCQS5oIiAy
CiMgMSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy90ZW1wbGF0ZWRlZm5zLmgiIDEKIyA0
OCAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy90ZW1wbGF0ZWRlZm5zLmgiCnRlbXBsYXRl
IDxjbGFzcyBUPgppbmxpbmUKX0NPUkJBX1BzZXVkb09ial9WYXI8VD46Ol9DT1JCQV9Qc2V1ZG9P
YmpfVmFyKCkKICA6IHBkX2RhdGEoVDo6X25pbCgpKSB7fQoKCnRlbXBsYXRlIDxjbGFzcyBUPgpp
bmxpbmUKX0NPUkJBX1BzZXVkb09ial9WYXI8VD46Ol9DT1JCQV9Qc2V1ZG9PYmpfVmFyKGNvbnN0
IF9DT1JCQV9Qc2V1ZG9PYmpfVmFyPFQ+JiB2KQp7CiAgcGRfZGF0YSA9IFQ6Ol9kdXBsaWNhdGUo
di5wZF9kYXRhKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKX0NPUkJBX1BzZXVkb09i
al9WYXI8VD46Ol9DT1JCQV9Qc2V1ZG9PYmpfVmFyKGNvbnN0IF9DT1JCQV9Qc2V1ZG9PYmpfTWVt
YmVyPFQsIF9DT1JCQV9Qc2V1ZG9PYmpfVmFyPFQ+ID4mIHApCnsKICBwZF9kYXRhID0gVDo6X2R1
cGxpY2F0ZShwLl9wdHIpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpfQ09SQkFfUHNl
dWRvT2JqX1ZhcjxUPjo6fl9DT1JCQV9Qc2V1ZG9PYmpfVmFyKCkKewogIENPUkJBOjpyZWxlYXNl
KHBkX2RhdGEpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSBfQ09SQkFfUHNldWRvT2Jq
X1ZhcjxUPiYKX0NPUkJBX1BzZXVkb09ial9WYXI8VD46Om9wZXJhdG9yPShUKiBwKQp7CiAgQ09S
QkE6OnJlbGVhc2UocGRfZGF0YSk7CiAgcGRfZGF0YSA9IHA7CiAgcmV0dXJuICp0aGlzOwp9CgoK
dGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSBfQ09SQkFfUHNldWRvT2JqX1ZhcjxUPiYKX0NPUkJB
X1BzZXVkb09ial9WYXI8VD46Om9wZXJhdG9yPShjb25zdCBfQ09SQkFfUHNldWRvT2JqX1ZhcjxU
PiYgdikKewogIGlmKCBwZF9kYXRhICE9IHYucGRfZGF0YSApIHsKICAgIENPUkJBOjpyZWxlYXNl
KHBkX2RhdGEpOwogICAgaWYoIHYucGRfZGF0YSApIHBkX2RhdGEgPSBUOjpfZHVwbGljYXRlKHYu
cGRfZGF0YSk7CiAgICBlbHNlIHBkX2RhdGEgPSBUOjpfbmlsKCk7CiAgfQogIHJldHVybiAqdGhp
czsKfQoKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUgX0NPUkJBX1BzZXVkb09ial9WYXI8VD4m
Cl9DT1JCQV9Qc2V1ZG9PYmpfVmFyPFQ+OjpvcGVyYXRvcj0oY29uc3QgX0NPUkJBX1BzZXVkb09i
al9NZW1iZXI8VCwgX0NPUkJBX1BzZXVkb09ial9WYXI8VD4gPiYgbSkKewogIENPUkJBOjpyZWxl
YXNlKHBkX2RhdGEpOwogIHBkX2RhdGEgPSBUOjpfZHVwbGljYXRlKG0uX3B0cik7CiAgcmV0dXJu
ICp0aGlzOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSBUKiYKX0NPUkJBX1BzZXVkb09i
al9WYXI8VD46Om91dCgpCnsKICBDT1JCQTo6cmVsZWFzZShwZF9kYXRhKTsKICBwZF9kYXRhID0g
VDo6X25pbCgpOwogIHJldHVybiBwZF9kYXRhOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGlu
ZSBUKgpfQ09SQkFfUHNldWRvT2JqX1ZhcjxUPjo6X3JldG4oKQp7CiAgVF9wdHIgdG1wID0gcGRf
ZGF0YTsKICBwZF9kYXRhID0gVDo6X25pbCgpOwogIHJldHVybiB0bXA7Cn0KCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+CmlubGluZQpfQ09SQkFfUHNldWRvT2JqX091dDxULFRf
dmFyPjo6X0NPUkJBX1BzZXVkb09ial9PdXQoVF92YXImIHYpCiAgOiBfZGF0YSh2LnBkX2RhdGEp
CnsKCiAgdiA9IFQ6Ol9uaWwoKTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zh
cj4KaW5saW5lCl9DT1JCQV9Qc2V1ZG9PYmpfTWVtYmVyPFQsVF92YXI+OjpfQ09SQkFfUHNldWRv
T2JqX01lbWJlcigpCiAgOiBfcHRyKFQ6Ol9uaWwoKSkge30KCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgVF92YXI+CmlubGluZQpfQ09SQkFfUHNldWRvT2JqX01lbWJlcjxULFRfdmFyPjo6X0NP
UkJBX1BzZXVkb09ial9NZW1iZXIoY29uc3QgX0NPUkJBX1BzZXVkb09ial9NZW1iZXI8VCxUX3Zh
cj4mIG0pCnsKICBpZiggbS5fcHRyICkgX3B0ciA9IFQ6Ol9kdXBsaWNhdGUobS5fcHRyKTsKICBl
bHNlIF9wdHIgPSBUOjpfbmlsKCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+
CmlubGluZQpfQ09SQkFfUHNldWRvT2JqX01lbWJlcjxULFRfdmFyPjo6fl9DT1JCQV9Qc2V1ZG9P
YmpfTWVtYmVyKCkKewogIENPUkJBOjpyZWxlYXNlKF9wdHIpOwp9CgoKdGVtcGxhdGUgPGNsYXNz
IFQsIGNsYXNzIFRfdmFyPgppbmxpbmUgX0NPUkJBX1BzZXVkb09ial9NZW1iZXI8VCxUX3Zhcj4m
Cl9DT1JCQV9Qc2V1ZG9PYmpfTWVtYmVyPFQsVF92YXI+OjpvcGVyYXRvcj0oVCogcCkKewogIENP
UkJBOjpyZWxlYXNlKF9wdHIpOwogIF9wdHIgPSBwOwogIHJldHVybiAqdGhpczsKfQoKCnRlbXBs
YXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4KaW5saW5lIF9DT1JCQV9Qc2V1ZG9PYmpfTWVtYmVy
PFQsVF92YXI+JgpfQ09SQkFfUHNldWRvT2JqX01lbWJlcjxULFRfdmFyPjo6b3BlcmF0b3I9KGNv
bnN0IF9DT1JCQV9Qc2V1ZG9PYmpfTWVtYmVyPFQsVF92YXI+JiBtKQp7CiAgaWYoIF9wdHIgIT0g
bS5fcHRyICkgewogICAgQ09SQkE6OnJlbGVhc2UoX3B0cik7CiAgICBfcHRyID0gVDo6X2R1cGxp
Y2F0ZShtLl9wdHIpOwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgVF92YXI+CmlubGluZSBfQ09SQkFfUHNldWRvT2JqX01lbWJlcjxULFRfdmFyPiYKX0NP
UkJBX1BzZXVkb09ial9NZW1iZXI8VCxUX3Zhcj46Om9wZXJhdG9yPShjb25zdCBUX3ZhciYgdikK
ewogIENPUkJBOjpyZWxlYXNlKF9wdHIpOwogIF9wdHIgPSBUOjpfZHVwbGljYXRlKHYucGRfZGF0
YSk7CiAgcmV0dXJuICp0aGlzOwp9CiMgMjA4ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIz
L3RlbXBsYXRlZGVmbnMuaCIKaW5saW5lCkNPUkJBOjpPYmplY3RfdmFyOjpPYmplY3RfdmFyKGNv
bnN0IENPUkJBOjpPYmplY3RfTWVtYmVyJiBwKQogIDogcGRfcmVmKFQ6Ol9kdXBsaWNhdGUocCkp
CnsKfQoKaW5saW5lCkNPUkJBOjpPYmplY3RfdmFyOjpPYmplY3RfdmFyKGNvbnN0IENPUkJBOjpP
YmplY3RfRWxlbWVudCYgcCkKICA6IHBkX3JlZihUOjpfZHVwbGljYXRlKHApKQp7Cn0KCgppbmxp
bmUgQ09SQkE6Ok9iamVjdF92YXImCkNPUkJBOjpPYmplY3RfdmFyOjpvcGVyYXRvcj0gKGNvbnN0
IENPUkJBOjpPYmplY3RfTWVtYmVyJiBwKQp7CiAgcmVsZWFzZShwZF9yZWYpOwogIHBkX3JlZiA9
IFQ6Ol9kdXBsaWNhdGUocCk7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVj
dF92YXImCkNPUkJBOjpPYmplY3RfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IENPUkJBOjpPYmplY3Rf
RWxlbWVudCYgcCkKewogIHJlbGVhc2UocGRfcmVmKTsKICBwZF9yZWYgPSBUOjpfZHVwbGljYXRl
KHApOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIENPUkJBOjpPYmplY3RfTWVtYmVyJgpDT1JC
QTo6T2JqZWN0X01lbWJlcjo6b3BlcmF0b3I9KGNvbnN0IENPUkJBOjpPYmplY3RfRWxlbWVudCYg
cCkKewogIHJlbGVhc2UoX3B0cik7CiAgX3B0ciA9IFQ6Ol9kdXBsaWNhdGUocCk7CiAgcmV0dXJu
ICp0aGlzOwp9CiMgMjYyMiAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9DT1JCQS5oIiAy
CiMgMSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9jb3JiYV9vcGVyYXRvcnMuaCIgMQoj
IDMyICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL2NvcmJhX29wZXJhdG9ycy5oIgpleHRl
cm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkV4Y2VwdGlvbiYp
OwpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkV4Y2Vw
dGlvbiopOwoKCgoKCgoKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0
IENPUkJBOjpVTktOT1dOJik7IGV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBj
b25zdCBDT1JCQTo6VU5LTk9XTiopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0o
Y29uc3QgQ09SQkE6OkFueSYsIENPUkJBOjpVTktOT1dOKiYpOwpleHRlcm4gdm9pZCBvcGVyYXRv
cjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkJBRF9QQVJBTSYpOyBleHRlcm4gdm9pZCBv
cGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkJBRF9QQVJBTSopOyBleHRlcm4g
Q09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIENPUkJBOjpCQURf
UEFSQU0qJik7CmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JC
QTo6Tk9fTUVNT1JZJik7IGV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25z
dCBDT1JCQTo6Tk9fTUVNT1JZKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShj
b25zdCBDT1JCQTo6QW55JiwgQ09SQkE6Ok5PX01FTU9SWSomKTsKZXh0ZXJuIHZvaWQgb3BlcmF0
b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpJTVBfTElNSVQmKTsgZXh0ZXJuIHZvaWQg
b3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpJTVBfTElNSVQqKTsgZXh0ZXJu
IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6SU1Q
X0xJTUlUKiYpOwpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09S
QkE6OkNPTU1fRkFJTFVSRSYpOyBleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55Jiwg
Y29uc3QgQ09SQkE6OkNPTU1fRkFJTFVSRSopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0
b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIENPUkJBOjpDT01NX0ZBSUxVUkUqJik7CmV4dGVybiB2
b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6SU5WX09CSlJFRiYpOyBl
eHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OklOVl9PQkpS
RUYqKTsgZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkm
LCBDT1JCQTo6SU5WX09CSlJFRiomKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFu
eSYsIGNvbnN0IENPUkJBOjpPQkpFQ1RfTk9UX0VYSVNUJik7IGV4dGVybiB2b2lkIG9wZXJhdG9y
PDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6T0JKRUNUX05PVF9FWElTVCopOyBleHRlcm4g
Q09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIENPUkJBOjpPQkpF
Q1RfTk9UX0VYSVNUKiYpOwpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29u
c3QgQ09SQkE6Ok5PX1BFUk1JU1NJT04mKTsgZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6
OkFueSYsIGNvbnN0IENPUkJBOjpOT19QRVJNSVNTSU9OKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVh
biBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgQ09SQkE6Ok5PX1BFUk1JU1NJT04qJik7
CmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6SU5URVJO
QUwmKTsgZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpJ
TlRFUk5BTCopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6
OkFueSYsIENPUkJBOjpJTlRFUk5BTComKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6
OkFueSYsIGNvbnN0IENPUkJBOjpNQVJTSEFMJik7IGV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENP
UkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6TUFSU0hBTCopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4g
b3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIENPUkJBOjpNQVJTSEFMKiYpOwpleHRlcm4g
dm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OklOSVRJQUxJWkUmKTsg
ZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpJTklUSUFM
SVpFKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55
JiwgQ09SQkE6OklOSVRJQUxJWkUqJik7CmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpB
bnkmLCBjb25zdCBDT1JCQTo6Tk9fSU1QTEVNRU5UJik7IGV4dGVybiB2b2lkIG9wZXJhdG9yPDw9
KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6Tk9fSU1QTEVNRU5UKik7IGV4dGVybiBDT1JCQTo6
Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgQ09SQkE6Ok5PX0lNUExFTUVO
VComKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpC
QURfVFlQRUNPREUmKTsgZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0
IENPUkJBOjpCQURfVFlQRUNPREUqKTsgZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49
KGNvbnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6QkFEX1RZUEVDT0RFKiYpOwpleHRlcm4gdm9pZCBv
cGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkJBRF9PUEVSQVRJT04mKTsgZXh0
ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpCQURfT1BFUkFU
SU9OKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55
JiwgQ09SQkE6OkJBRF9PUEVSQVRJT04qJik7CmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJB
OjpBbnkmLCBjb25zdCBDT1JCQTo6Tk9fUkVTT1VSQ0VTJik7IGV4dGVybiB2b2lkIG9wZXJhdG9y
PDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6Tk9fUkVTT1VSQ0VTKik7IGV4dGVybiBDT1JC
QTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgQ09SQkE6Ok5PX1JFU09V
UkNFUyomKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJB
OjpOT19SRVNQT05TRSYpOyBleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29u
c3QgQ09SQkE6Ok5PX1JFU1BPTlNFKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+
PShjb25zdCBDT1JCQTo6QW55JiwgQ09SQkE6Ok5PX1JFU1BPTlNFKiYpOwpleHRlcm4gdm9pZCBv
cGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OlBFUlNJU1RfU1RPUkUmKTsgZXh0
ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpQRVJTSVNUX1NU
T1JFKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55
JiwgQ09SQkE6OlBFUlNJU1RfU1RPUkUqJik7CmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJB
OjpBbnkmLCBjb25zdCBDT1JCQTo6QkFEX0lOVl9PUkRFUiYpOyBleHRlcm4gdm9pZCBvcGVyYXRv
cjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkJBRF9JTlZfT1JERVIqKTsgZXh0ZXJuIENP
UkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6QkFEX0lO
Vl9PUkRFUiomKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENP
UkJBOjpUUkFOU0lFTlQmKTsgZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNv
bnN0IENPUkJBOjpUUkFOU0lFTlQqKTsgZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49
KGNvbnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6VFJBTlNJRU5UKiYpOwpleHRlcm4gdm9pZCBvcGVy
YXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkZSRUVfTUVNJik7IGV4dGVybiB2b2lk
IG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6RlJFRV9NRU0qKTsgZXh0ZXJu
IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6RlJF
RV9NRU0qJik7CmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JC
QTo6SU5WX0lERU5UJik7IGV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25z
dCBDT1JCQTo6SU5WX0lERU5UKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShj
b25zdCBDT1JCQTo6QW55JiwgQ09SQkE6OklOVl9JREVOVComKTsKZXh0ZXJuIHZvaWQgb3BlcmF0
b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpJTlZfRkxBRyYpOyBleHRlcm4gdm9pZCBv
cGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OklOVl9GTEFHKik7IGV4dGVybiBD
T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgQ09SQkE6OklOVl9G
TEFHKiYpOwpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6
OklOVEZfUkVQT1MmKTsgZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0
IENPUkJBOjpJTlRGX1JFUE9TKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShj
b25zdCBDT1JCQTo6QW55JiwgQ09SQkE6OklOVEZfUkVQT1MqJik7CmV4dGVybiB2b2lkIG9wZXJh
dG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6QkFEX0NPTlRFWFQmKTsgZXh0ZXJuIHZv
aWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpCQURfQ09OVEVYVCopOyBl
eHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIENPUkJB
OjpCQURfQ09OVEVYVComKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNv
bnN0IENPUkJBOjpPQkpfQURBUFRFUiYpOyBleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6
QW55JiwgY29uc3QgQ09SQkE6Ok9CSl9BREFQVEVSKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBv
cGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgQ09SQkE6Ok9CSl9BREFQVEVSKiYpOwpleHRl
cm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkRBVEFfQ09OVkVS
U0lPTiYpOyBleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6
OkRBVEFfQ09OVkVSU0lPTiopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29u
c3QgQ09SQkE6OkFueSYsIENPUkJBOjpEQVRBX0NPTlZFUlNJT04qJik7CmV4dGVybiB2b2lkIG9w
ZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6VFJBTlNBQ1RJT05fUkVRVUlSRUQm
KTsgZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpUUkFO
U0FDVElPTl9SRVFVSVJFRCopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29u
c3QgQ09SQkE6OkFueSYsIENPUkJBOjpUUkFOU0FDVElPTl9SRVFVSVJFRComKTsKZXh0ZXJuIHZv
aWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpUUkFOU0FDVElPTl9ST0xM
RURCQUNLJik7IGV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JC
QTo6VFJBTlNBQ1RJT05fUk9MTEVEQkFDSyopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0
b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIENPUkJBOjpUUkFOU0FDVElPTl9ST0xMRURCQUNLKiYp
OwpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OklOVkFM
SURfVFJBTlNBQ1RJT04mKTsgZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNv
bnN0IENPUkJBOjpJTlZBTElEX1RSQU5TQUNUSU9OKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBv
cGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgQ09SQkE6OklOVkFMSURfVFJBTlNBQ1RJT04q
Jik7CmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6V1JP
TkdfVFJBTlNBQ1RJT04mKTsgZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNv
bnN0IENPUkJBOjpXUk9OR19UUkFOU0FDVElPTiopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3Bl
cmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIENPUkJBOjpXUk9OR19UUkFOU0FDVElPTiomKTsK
ZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpVbmtub3du
VXNlckV4Y2VwdGlvbiYpOyBleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29u
c3QgQ09SQkE6OlVua25vd25Vc2VyRXhjZXB0aW9uKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBv
cGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgQ09SQkE6OlVua25vd25Vc2VyRXhjZXB0aW9u
KiYpOwpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6Oldy
b25nVHJhbnNhY3Rpb24mKTsgZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNv
bnN0IENPUkJBOjpXcm9uZ1RyYW5zYWN0aW9uKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVy
YXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgQ09SQkE6Oldyb25nVHJhbnNhY3Rpb24qJik7CmV4
dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6Q29udGV4dExp
c3Q6OkJvdW5kcyYpOyBleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3Qg
Q09SQkE6OkNvbnRleHRMaXN0OjpCb3VuZHMqKTsgZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJh
dG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6Q29udGV4dExpc3Q6OkJvdW5kcyomKTsK
ZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpFeGNlcHRp
b25MaXN0OjpCb3VuZHMmKTsgZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNv
bnN0IENPUkJBOjpFeGNlcHRpb25MaXN0OjpCb3VuZHMqKTsgZXh0ZXJuIENPUkJBOjpCb29sZWFu
IG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6RXhjZXB0aW9uTGlzdDo6Qm91
bmRzKiYpOwpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6
Ok5WTGlzdDo6Qm91bmRzJik7IGV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBj
b25zdCBDT1JCQTo6TlZMaXN0OjpCb3VuZHMqKTsgZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJh
dG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6TlZMaXN0OjpCb3VuZHMqJik7CmV4dGVy
biB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6VHlwZUNvZGU6OkJv
dW5kcyYpOyBleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6
OlR5cGVDb2RlOjpCb3VuZHMqKTsgZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNv
bnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6VHlwZUNvZGU6OkJvdW5kcyomKTsKZXh0ZXJuIHZvaWQg
b3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpUeXBlQ29kZTo6QmFkS2luZCYp
OyBleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OlR5cGVD
b2RlOjpCYWRLaW5kKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBD
T1JCQTo6QW55JiwgQ09SQkE6OlR5cGVDb2RlOjpCYWRLaW5kKiYpOwpleHRlcm4gdm9pZCBvcGVy
YXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkR5bkFueTo6SW52YWxpZCYpOyBleHRl
cm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkR5bkFueTo6SW52
YWxpZCopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFu
eSYsIENPUkJBOjpEeW5Bbnk6OkludmFsaWQqJik7CmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENP
UkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6RHluQW55OjpJbnZhbGlkVmFsdWUmKTsgZXh0ZXJuIHZv
aWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpEeW5Bbnk6OkludmFsaWRW
YWx1ZSopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFu
eSYsIENPUkJBOjpEeW5Bbnk6OkludmFsaWRWYWx1ZSomKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8
PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpEeW5Bbnk6OlR5cGVNaXNtYXRjaCYpOyBleHRl
cm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkR5bkFueTo6VHlw
ZU1pc21hdGNoKik7IGV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JC
QTo6QW55JiwgQ09SQkE6OkR5bkFueTo6VHlwZU1pc21hdGNoKiYpOwpleHRlcm4gdm9pZCBvcGVy
YXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkR5bkFueTo6SW52YWxpZFNlcSYpOyBl
eHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkR5bkFueTo6
SW52YWxpZFNlcSopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09S
QkE6OkFueSYsIENPUkJBOjpEeW5Bbnk6OkludmFsaWRTZXEqJik7CmV4dGVybiB2b2lkIG9wZXJh
dG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6T1JCOjpJbmNvbnNpc3RlbnRUeXBlQ29k
ZSYpOyBleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6Ok9S
Qjo6SW5jb25zaXN0ZW50VHlwZUNvZGUqKTsgZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9y
Pj49KGNvbnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6T1JCOjpJbmNvbnNpc3RlbnRUeXBlQ29kZSom
KTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpPUkI6
OkludmFsaWROYW1lJik7IGV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25z
dCBDT1JCQTo6T1JCOjpJbnZhbGlkTmFtZSopOyBleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0
b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIENPUkJBOjpPUkI6OkludmFsaWROYW1lKiYpOwojIDI2
MjMgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvQ09SQkEuaCIgMgojIDEgIi4uLy4uLy4u
Ly4uL2luY2x1ZGUvb21uaU9SQjMvcG9hLmgiIDEKIyA3MCAiLi4vLi4vLi4vLi4vaW5jbHVkZS9v
bW5pT1JCMy9wb2EuaCIKY2xhc3MgR0lPUF9TOwpjbGFzcyBvbW5pT3JiUE9BOwoKCm5hbWVzcGFj
ZSBQb3J0YWJsZVNlcnZlcgp7CgoKCgoKICBjbGFzcyBQT0E7CiAgdHlwZWRlZiBQT0EqIFBPQV9w
dHI7CiAgdHlwZWRlZiBQT0FfcHRyIFBPQVJlZjsKCiAgY2xhc3MgUE9BX0hlbHBlciB7CiAgcHVi
bGljOgogICAgdHlwZWRlZiBQT0FfcHRyIF9wdHJfdHlwZTsKCiAgICBzdGF0aWMgX3B0cl90eXBl
IF9uaWwoKTsKICAgIHN0YXRpYyBfQ09SQkFfQm9vbGVhbiBpc19uaWwoX3B0cl90eXBlKTsKICAg
IHN0YXRpYyB2b2lkIHJlbGVhc2UoX3B0cl90eXBlKTsKICAgIHN0YXRpYyB2b2lkIGR1cGxpY2F0
ZShfcHRyX3R5cGUpOwogICAgc3RhdGljIGlubGluZSBzaXplX3QgTlBfYWxpZ25lZFNpemUoX3B0
cl90eXBlLCBzaXplX3QpIHsgcmV0dXJuIDA7IH0KICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJz
aGFsT2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKSB7fQogICAgc3RhdGljIGlu
bGluZSBfcHRyX3R5cGUgdW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3RyZWFtJikgeyByZXR1
cm4gMDsgfQogICAgc3RhdGljIGlubGluZSB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBN
ZW1CdWZmZXJlZFN0cmVhbSYpIHt9CiAgICBzdGF0aWMgaW5saW5lIF9wdHJfdHlwZSB1bm1hcnNo
YWxPYmpSZWYoTWVtQnVmZmVyZWRTdHJlYW0mKSB7IHJldHVybiAwOyB9CiAgfTsKCiAgY2xhc3Mg
U2VydmFudEJhc2U7CiAgdHlwZWRlZiBTZXJ2YW50QmFzZSogU2VydmFudDsKCgoKCgoKICBjbGFz
cyBQT0FMaXN0X3ZhcjsKCiAgY2xhc3MgUE9BTGlzdCA6IHB1YmxpYyBfQ09SQkFfVW5ib3VuZGVk
X1NlcXVlbmNlX09ialJlZjxQT0EsIF9DT1JCQV9PYmpSZWZfRWxlbWVudDxQT0EsIFBPQV9IZWxw
ZXI+LCBQT0FfSGVscGVyPiB7CiAgcHVibGljOgogICAgdHlwZWRlZiBQT0FMaXN0X3ZhciBfdmFy
X3R5cGU7CiAgICBpbmxpbmUgUE9BTGlzdCgpIHt9CiAgICBpbmxpbmUgUE9BTGlzdChjb25zdCBQ
T0FMaXN0JiBzKQogICAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfT2JqUmVmPFBPQSwg
X0NPUkJBX09ialJlZl9FbGVtZW50PFBPQSwgUE9BX0hlbHBlcj4sIFBPQV9IZWxwZXI+KHMpIHt9
CiAgICBpbmxpbmUgUE9BTGlzdChfQ09SQkFfVUxvbmcgX21heCkKICAgICAgOiBfQ09SQkFfVW5i
b3VuZGVkX1NlcXVlbmNlX09ialJlZjxQT0EsIF9DT1JCQV9PYmpSZWZfRWxlbWVudDxQT0EsIFBP
QV9IZWxwZXI+LCBQT0FfSGVscGVyPihfbWF4KSB7fQogICAgaW5saW5lIFBPQUxpc3QoX0NPUkJB
X1VMb25nIF9tYXgsIF9DT1JCQV9VTG9uZyBfbGVuLCBQT0FfcHRyKiBfdmFsLCBfQ09SQkFfQm9v
bGVhbiBfcmVsPTApCiAgICAgIDogX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9PYmpSZWY8UE9B
LCBfQ09SQkFfT2JqUmVmX0VsZW1lbnQ8UE9BLCBQT0FfSGVscGVyPiwgUE9BX0hlbHBlcj4oX21h
eCwgX2xlbiwgX3ZhbCwgX3JlbCkge30KICAgIGlubGluZSBQT0FMaXN0JiBvcGVyYXRvciA9IChj
b25zdCBQT0FMaXN0JiBzKSB7CiAgICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfT2JqUmVm
PFBPQSwgX0NPUkJBX09ialJlZl9FbGVtZW50PFBPQSwgUE9BX0hlbHBlcj4sIFBPQV9IZWxwZXI+
OjpvcGVyYXRvcj0ocyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICB9OwoKCiAgY2xhc3Mg
UE9BTGlzdF92YXIgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgUE9BTGlzdCBUOwogICAgdHlwZWRl
ZiBQT0FMaXN0X3ZhciBUX3ZhcjsKCiAgICBpbmxpbmUgUE9BTGlzdF92YXIoKSA6IHBkX3NlcSgw
KSB7fQogICAgaW5saW5lIFBPQUxpc3RfdmFyKFQqIHMpIDogcGRfc2VxKHMpIHt9CiAgICBpbmxp
bmUgUE9BTGlzdF92YXIoY29uc3QgVF92YXImIHMpIHsKICAgICAgaWYoIHMucGRfc2VxICkgcGRf
c2VxID0gbmV3IFQoKnMucGRfc2VxKTsKICAgICAgZWxzZSBwZF9zZXEgPSAwOwogICAgfQogICAg
aW5saW5lIH5QT0FMaXN0X3ZhcigpIHsgaWYoIHBkX3NlcSApIGRlbGV0ZSBwZF9zZXE7IH0KCiAg
ICBpbmxpbmUgVF92YXImIG9wZXJhdG9yID0gKFQqIHMpIHsKICAgICAgaWYoIHBkX3NlcSApIGRl
bGV0ZSBwZF9zZXE7CiAgICAgIHBkX3NlcSA9IHM7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
ICAgIGlubGluZSBUX3ZhciYgb3BlcmF0b3IgPSAoY29uc3QgVF92YXImIHMpIHsKICAgICAgaWYo
IHMucGRfc2VxICkgewogICAgICAgIGlmKCAhcGRfc2VxICkgcGRfc2VxID0gbmV3IFQ7CiAgICAg
ICAgKnBkX3NlcSA9ICpzLnBkX3NlcTsKICAgICAgfSBlbHNlIGlmKCBwZF9zZXEgKSB7CiAgICAg
ICAgZGVsZXRlIHBkX3NlcTsKICAgICAgICBwZF9zZXEgPSAwOwogICAgICB9CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgICBpbmxpbmUgX0NPUkJBX09ialJlZl9FbGVtZW50PFBPQSwgUE9B
X0hlbHBlcj4gb3BlcmF0b3IgW10gKF9DT1JCQV9VTG9uZyBzKSB7CiAgICAgIHJldHVybiAoKnBk
X3NlcSlbc107CiAgICB9CiAgICBpbmxpbmUgVCogb3BlcmF0b3IgLT4gKCkgeyByZXR1cm4gcGRf
c2VxOyB9CgoKCiAgICBpbmxpbmUgb3BlcmF0b3IgY29uc3QgVCYgKCkgY29uc3QgeyByZXR1cm4g
KnBkX3NlcTsgfQogICAgaW5saW5lIG9wZXJhdG9yIFQmICgpIHsgcmV0dXJuICpwZF9zZXE7IH0K
CgogICAgaW5saW5lIGNvbnN0IFQmIGluKCkgY29uc3QgeyByZXR1cm4gKnBkX3NlcTsgfQogICAg
aW5saW5lIFQmIGlub3V0KCkgeyByZXR1cm4gKnBkX3NlcTsgfQogICAgaW5saW5lIFQqJiBvdXQo
KSB7CiAgICAgIGlmKCBwZF9zZXEgKSB7IGRlbGV0ZSBwZF9zZXE7IHBkX3NlcSA9IDA7IH0KICAg
ICAgcmV0dXJuIHBkX3NlcTsKICAgIH0KICAgIGlubGluZSBUKiBfcmV0bigpIHsgVCogdG1wID0g
cGRfc2VxOyBwZF9zZXEgPSAwOyByZXR1cm4gdG1wOyB9CgogIHByaXZhdGU6CiAgICBUKiBwZF9z
ZXE7CiAgfTsKCgoKCgogIGNsYXNzIE9iamVjdElkX3ZhcjsKCiAgY2xhc3MgT2JqZWN0SWQgOiBw
dWJsaWMgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fT2N0ZXQgewogIHB1YmxpYzoKICAgIHR5
cGVkZWYgT2JqZWN0SWRfdmFyIF92YXJfdHlwZTsKICAgIGlubGluZSBPYmplY3RJZCgpIHt9CiAg
ICBpbmxpbmUgT2JqZWN0SWQoY29uc3QgT2JqZWN0SWQmIHNlcSkKICAgICAgOiBfQ09SQkFfVW5i
b3VuZGVkX1NlcXVlbmNlX19PY3RldChzZXEpIHt9CiAgICBpbmxpbmUgT2JqZWN0SWQoQ09SQkE6
OlVMb25nIG1heCkKICAgICAgOiBfQ09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19PY3RldChtYXgp
IHt9CiAgICBpbmxpbmUgT2JqZWN0SWQoQ09SQkE6OlVMb25nIG1heCwgQ09SQkE6OlVMb25nIGxl
biwgQ09SQkE6Ok9jdGV0KiB2YWwsIENPUkJBOjpCb29sZWFuIHJlbD0wKQogICAgICA6IF9DT1JC
QV9VbmJvdW5kZWRfU2VxdWVuY2VfX09jdGV0KG1heCwgbGVuLCB2YWwsIHJlbCkge30KICAgIGlu
bGluZSBPYmplY3RJZCYgb3BlcmF0b3IgPSAoY29uc3QgT2JqZWN0SWQmIHNlcSkgewogICAgICBf
Q09SQkFfVW5ib3VuZGVkX1NlcXVlbmNlX19PY3RldDo6b3BlcmF0b3I9KHNlcSk7CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KICB9OwoKICBjbGFzcyBPYmplY3RJZF9vdXQ7CgogIGNsYXNzIE9i
amVjdElkX3ZhciB7CiAgcHVibGljOgogICAgdHlwZWRlZiBPYmplY3RJZCBUOwogICAgdHlwZWRl
ZiBPYmplY3RJZF92YXIgVF92YXI7CgogICAgaW5saW5lIE9iamVjdElkX3ZhcigpIDogcGRfc2Vx
KDApIHt9CiAgICBpbmxpbmUgT2JqZWN0SWRfdmFyKFQqIHMpIDogcGRfc2VxKHMpIHt9CiAgICBp
bmxpbmUgT2JqZWN0SWRfdmFyKGNvbnN0IFRfdmFyJiBzdikgewogICAgICBpZiggc3YucGRfc2Vx
ICkgewogICAgICAgIHBkX3NlcSA9IG5ldyBUOwogICAgICAgICpwZF9zZXEgPSAqc3YucGRfc2Vx
OwogICAgICB9IGVsc2UKICAgICAgICBwZF9zZXEgPSAwOwogICAgfQogICAgaW5saW5lIH5PYmpl
Y3RJZF92YXIoKSB7IGlmKCBwZF9zZXEgKSBkZWxldGUgcGRfc2VxOyB9CgogICAgaW5saW5lIFRf
dmFyJiBvcGVyYXRvciA9IChUKiBzKSB7CiAgICAgIGlmKCBwZF9zZXEgKSBkZWxldGUgcGRfc2Vx
OwogICAgICBwZF9zZXEgPSBzOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICBpbmxpbmUg
VF92YXImIG9wZXJhdG9yID0gKGNvbnN0IFRfdmFyJiBzdikgewogICAgICBpZiggc3YucGRfc2Vx
ICkgewogICAgICAgIGlmKCAhcGRfc2VxICkgcGRfc2VxID0gbmV3IFQ7CiAgICAgICAgKnBkX3Nl
cSA9ICpzdi5wZF9zZXE7CiAgICAgIH0gZWxzZSBpZiggcGRfc2VxICkgewogICAgICAgIGRlbGV0
ZSBwZF9zZXE7CiAgICAgICAgcGRfc2VxID0gMDsKICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogICAgaW5saW5lIENPUkJBOjpPY3RldCYgb3BlcmF0b3IgW10gKF9DT1JCQV9VTG9u
ZyBpKSB7IHJldHVybiAoKnBkX3NlcSlbaV07IH0KICAgIGlubGluZSBUKiBvcGVyYXRvciAtPiAo
KSB7IHJldHVybiBwZF9zZXE7IH0KCgoKICAgIGlubGluZSBvcGVyYXRvciBjb25zdCBUJiAoKSBj
b25zdCB7IHJldHVybiAqcGRfc2VxOyB9CiAgICBpbmxpbmUgb3BlcmF0b3IgVCYgKCkgeyByZXR1
cm4gKnBkX3NlcTsgfQoKCiAgICBpbmxpbmUgY29uc3QgVCYgaW4oKSBjb25zdCB7IHJldHVybiAq
cGRfc2VxOyB9CiAgICBpbmxpbmUgVCYgaW5vdXQoKSB7IHJldHVybiAqcGRfc2VxOyB9CiAgICBp
bmxpbmUgVComIG91dCgpIHsgaWYgKHBkX3NlcSkgeyBkZWxldGUgcGRfc2VxOyBwZF9zZXEgPSAw
OyB9IHJldHVybiBwZF9zZXE7IH0KICAgIGlubGluZSBUKiBfcmV0bigpIHsgVCogdG1wID0gcGRf
c2VxOyBwZF9zZXEgPSAwOyByZXR1cm4gdG1wOyB9CgogICAgZnJpZW5kIGNsYXNzIE9iamVjdElk
X291dDsKCiAgcHJpdmF0ZToKICAgIFQqIHBkX3NlcTsKICB9OwoKICBjbGFzcyBPYmplY3RJZF9v
dXQgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgT2JqZWN0SWQgVDsKICAgIHR5cGVkZWYgT2JqZWN0
SWRfdmFyIFRfdmFyOwoKICAgIGlubGluZSBPYmplY3RJZF9vdXQoVComIHMpIDogX2RhdGEocykg
eyBfZGF0YSA9IDA7IH0KICAgIGlubGluZSBPYmplY3RJZF9vdXQoVF92YXImIHN2KQogICAgICA6
IF9kYXRhKHN2LnBkX3NlcSkgeyBzdiA9IChUKikgMDsgfQogICAgaW5saW5lIE9iamVjdElkX291
dChjb25zdCBPYmplY3RJZF9vdXQmIHMpIDogX2RhdGEocy5fZGF0YSkgeyB9CiAgICBpbmxpbmUg
T2JqZWN0SWRfb3V0JiBvcGVyYXRvcj0oY29uc3QgT2JqZWN0SWRfb3V0JiBzKSB7IF9kYXRhID0g
cy5fZGF0YTsgcmV0dXJuICp0aGlzOyB9CiAgICBpbmxpbmUgT2JqZWN0SWRfb3V0JiBvcGVyYXRv
cj0oVCogcykgeyBfZGF0YSA9IHM7IHJldHVybiAqdGhpczsgfQogICAgaW5saW5lIG9wZXJhdG9y
IFQqJigpIHsgcmV0dXJuIF9kYXRhOyB9CiAgICBpbmxpbmUgVComIHB0cigpIHsgcmV0dXJuIF9k
YXRhOyB9CiAgICBpbmxpbmUgVCogb3BlcmF0b3ItPigpIHsgcmV0dXJuIF9kYXRhOyB9CiAgICBp
bmxpbmUgQ09SQkE6Ok9jdGV0JiBvcGVyYXRvciBbXSAoX0NPUkJBX1VMb25nIGkpIHsgcmV0dXJu
ICgqX2RhdGEpW2ldOyB9CiAgICBUKiYgX2RhdGE7CgogIHByaXZhdGU6CiAgICBPYmplY3RJZF9v
dXQoKTsKICAgIE9iamVjdElkX291dCBvcGVyYXRvcj0oIGNvbnN0IFRfdmFyJik7CiAgfTsKCgoK
CgogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENPUkJBOjpVTG9uZwogICAgVEhSRUFEX1BP
TElDWV9JRCA9IDE2OwoKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDT1JCQTo6VUxvbmcK
ICAgIExJRkVTUEFOX1BPTElDWV9JRCA9IDE3OwoKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBDT1JCQTo6VUxvbmcKICAgIElEX1VOSVFVRU5FU1NfUE9MSUNZX0lEID0gMTg7CgogICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IENPUkJBOjpVTG9uZwogICAgSURfQVNTSUdOTUVOVF9QT0xJ
Q1lfSUQgPSAxOTsKCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ09SQkE6OlVMb25nCiAg
ICBJTVBMSUNJVF9BQ1RJVkFUSU9OX1BPTElDWV9JRCA9IDIwOwoKICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBDT1JCQTo6VUxvbmcKICAgIFNFUlZBTlRfUkVURU5USU9OX1BPTElDWV9JRCA9
IDIxOwoKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDT1JCQTo6VUxvbmcKICAgIFJFUVVF
U1RfUFJPQ0VTU0lOR19QT0xJQ1lfSUQgPSAyMjsKCgogIGVudW0gVGhyZWFkUG9saWN5VmFsdWUg
ewogICAgT1JCX0NUUkxfTU9ERUwsCiAgICBTSU5HTEVfVEhSRUFEX01PREVMCiAgfTsKCiAgZW51
bSBMaWZlc3BhblBvbGljeVZhbHVlIHsKICAgIFRSQU5TSUVOVCwKICAgIFBFUlNJU1RFTlQKICB9
OwoKICBlbnVtIElkVW5pcXVlbmVzc1BvbGljeVZhbHVlIHsKICAgIFVOSVFVRV9JRCwKICAgIE1V
TFRJUExFX0lECiAgfTsKCiAgZW51bSBJZEFzc2lnbm1lbnRQb2xpY3lWYWx1ZSB7CiAgICBVU0VS
X0lELAogICAgU1lTVEVNX0lECiAgfTsKCiAgZW51bSBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lW
YWx1ZSB7CiAgICBJTVBMSUNJVF9BQ1RJVkFUSU9OLAogICAgTk9fSU1QTElDSVRfQUNUSVZBVElP
TgogIH07CgogIGVudW0gU2VydmFudFJldGVudGlvblBvbGljeVZhbHVlIHsKICAgIFJFVEFJTiwK
ICAgIE5PTl9SRVRBSU4KICB9OwoKICBlbnVtIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5VmFsdWUg
ewogICAgVVNFX0FDVElWRV9PQkpFQ1RfTUFQX09OTFksCiAgICBVU0VfREVGQVVMVF9TRVJWQU5U
LAogICAgVVNFX1NFUlZBTlRfTUFOQUdFUgogIH07CiMgMzcxICIuLi8uLi8uLi8uLi9pbmNsdWRl
L29tbmlPUkIzL3BvYS5oIgogIGNsYXNzIFRocmVhZFBvbGljeTsgdHlwZWRlZiBUaHJlYWRQb2xp
Y3kqIFRocmVhZFBvbGljeV9wdHI7IHR5cGVkZWYgVGhyZWFkUG9saWN5X3B0ciBUaHJlYWRQb2xp
Y3lSZWY7IGNsYXNzIFRocmVhZFBvbGljeSA6IHB1YmxpYyBDT1JCQTo6UG9saWN5IHsgcHVibGlj
OiBpbmxpbmUgVGhyZWFkUG9saWN5KFRocmVhZFBvbGljeVZhbHVlIHZhbHVlKSA6IENPUkJBOjpQ
b2xpY3koVEhSRUFEX1BPTElDWV9JRCksIHBkX3ZhbHVlKHZhbHVlKSB7fSBpbmxpbmUgVGhyZWFk
UG9saWN5KCkge30gdmlydHVhbCB+VGhyZWFkUG9saWN5KCk7IHZpcnR1YWwgQ09SQkE6OlBvbGlj
eV9wdHIgY29weSgpOyB2aXJ0dWFsIFRocmVhZFBvbGljeVZhbHVlIHZhbHVlKCkgeyByZXR1cm4g
cGRfdmFsdWU7IH0gdmlydHVhbCB2b2lkKiBfcHRyVG9PYmpSZWYoY29uc3QgY2hhciogcmVwb0lk
KTsgc3RhdGljIFRocmVhZFBvbGljeV9wdHIgX2R1cGxpY2F0ZShUaHJlYWRQb2xpY3lfcHRyIHAp
OyBzdGF0aWMgVGhyZWFkUG9saWN5X3B0ciBfbmFycm93KENPUkJBOjpPYmplY3RfcHRyIHApOyBz
dGF0aWMgVGhyZWFkUG9saWN5X3B0ciBfbmlsKCk7IHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVw
b0lkOyBwcml2YXRlOiBUaHJlYWRQb2xpY3lWYWx1ZSBwZF92YWx1ZTsgfTsgdHlwZWRlZiBfQ09S
QkFfUHNldWRvT2JqX1ZhcjxUaHJlYWRQb2xpY3k+IFRocmVhZFBvbGljeV92YXI7CiAgY2xhc3Mg
TGlmZXNwYW5Qb2xpY3k7IHR5cGVkZWYgTGlmZXNwYW5Qb2xpY3kqIExpZmVzcGFuUG9saWN5X3B0
cjsgdHlwZWRlZiBMaWZlc3BhblBvbGljeV9wdHIgTGlmZXNwYW5Qb2xpY3lSZWY7IGNsYXNzIExp
ZmVzcGFuUG9saWN5IDogcHVibGljIENPUkJBOjpQb2xpY3kgeyBwdWJsaWM6IGlubGluZSBMaWZl
c3BhblBvbGljeShMaWZlc3BhblBvbGljeVZhbHVlIHZhbHVlKSA6IENPUkJBOjpQb2xpY3koTElG
RVNQQU5fUE9MSUNZX0lEKSwgcGRfdmFsdWUodmFsdWUpIHt9IGlubGluZSBMaWZlc3BhblBvbGlj
eSgpIHt9IHZpcnR1YWwgfkxpZmVzcGFuUG9saWN5KCk7IHZpcnR1YWwgQ09SQkE6OlBvbGljeV9w
dHIgY29weSgpOyB2aXJ0dWFsIExpZmVzcGFuUG9saWN5VmFsdWUgdmFsdWUoKSB7IHJldHVybiBw
ZF92YWx1ZTsgfSB2aXJ0dWFsIHZvaWQqIF9wdHJUb09ialJlZihjb25zdCBjaGFyKiByZXBvSWQp
OyBzdGF0aWMgTGlmZXNwYW5Qb2xpY3lfcHRyIF9kdXBsaWNhdGUoTGlmZXNwYW5Qb2xpY3lfcHRy
IHApOyBzdGF0aWMgTGlmZXNwYW5Qb2xpY3lfcHRyIF9uYXJyb3coQ09SQkE6Ok9iamVjdF9wdHIg
cCk7IHN0YXRpYyBMaWZlc3BhblBvbGljeV9wdHIgX25pbCgpOyBzdGF0aWMgY29uc3QgY2hhciog
X1BEX3JlcG9JZDsgcHJpdmF0ZTogTGlmZXNwYW5Qb2xpY3lWYWx1ZSBwZF92YWx1ZTsgfTsgdHlw
ZWRlZiBfQ09SQkFfUHNldWRvT2JqX1ZhcjxMaWZlc3BhblBvbGljeT4gTGlmZXNwYW5Qb2xpY3lf
dmFyOwogIGNsYXNzIElkVW5pcXVlbmVzc1BvbGljeTsgdHlwZWRlZiBJZFVuaXF1ZW5lc3NQb2xp
Y3kqIElkVW5pcXVlbmVzc1BvbGljeV9wdHI7IHR5cGVkZWYgSWRVbmlxdWVuZXNzUG9saWN5X3B0
ciBJZFVuaXF1ZW5lc3NQb2xpY3lSZWY7IGNsYXNzIElkVW5pcXVlbmVzc1BvbGljeSA6IHB1Ymxp
YyBDT1JCQTo6UG9saWN5IHsgcHVibGljOiBpbmxpbmUgSWRVbmlxdWVuZXNzUG9saWN5KElkVW5p
cXVlbmVzc1BvbGljeVZhbHVlIHZhbHVlKSA6IENPUkJBOjpQb2xpY3koSURfVU5JUVVFTkVTU19Q
T0xJQ1lfSUQpLCBwZF92YWx1ZSh2YWx1ZSkge30gaW5saW5lIElkVW5pcXVlbmVzc1BvbGljeSgp
IHt9IHZpcnR1YWwgfklkVW5pcXVlbmVzc1BvbGljeSgpOyB2aXJ0dWFsIENPUkJBOjpQb2xpY3lf
cHRyIGNvcHkoKTsgdmlydHVhbCBJZFVuaXF1ZW5lc3NQb2xpY3lWYWx1ZSB2YWx1ZSgpIHsgcmV0
dXJuIHBkX3ZhbHVlOyB9IHZpcnR1YWwgdm9pZCogX3B0clRvT2JqUmVmKGNvbnN0IGNoYXIqIHJl
cG9JZCk7IHN0YXRpYyBJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyIF9kdXBsaWNhdGUoSWRVbmlxdWVu
ZXNzUG9saWN5X3B0ciBwKTsgc3RhdGljIElkVW5pcXVlbmVzc1BvbGljeV9wdHIgX25hcnJvdyhD
T1JCQTo6T2JqZWN0X3B0ciBwKTsgc3RhdGljIElkVW5pcXVlbmVzc1BvbGljeV9wdHIgX25pbCgp
OyBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsgcHJpdmF0ZTogSWRVbmlxdWVuZXNzUG9s
aWN5VmFsdWUgcGRfdmFsdWU7IH07IHR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9WYXI8SWRVbmlx
dWVuZXNzUG9saWN5PiBJZFVuaXF1ZW5lc3NQb2xpY3lfdmFyOwogIGNsYXNzIElkQXNzaWdubWVu
dFBvbGljeTsgdHlwZWRlZiBJZEFzc2lnbm1lbnRQb2xpY3kqIElkQXNzaWdubWVudFBvbGljeV9w
dHI7IHR5cGVkZWYgSWRBc3NpZ25tZW50UG9saWN5X3B0ciBJZEFzc2lnbm1lbnRQb2xpY3lSZWY7
IGNsYXNzIElkQXNzaWdubWVudFBvbGljeSA6IHB1YmxpYyBDT1JCQTo6UG9saWN5IHsgcHVibGlj
OiBpbmxpbmUgSWRBc3NpZ25tZW50UG9saWN5KElkQXNzaWdubWVudFBvbGljeVZhbHVlIHZhbHVl
KSA6IENPUkJBOjpQb2xpY3koSURfQVNTSUdOTUVOVF9QT0xJQ1lfSUQpLCBwZF92YWx1ZSh2YWx1
ZSkge30gaW5saW5lIElkQXNzaWdubWVudFBvbGljeSgpIHt9IHZpcnR1YWwgfklkQXNzaWdubWVu
dFBvbGljeSgpOyB2aXJ0dWFsIENPUkJBOjpQb2xpY3lfcHRyIGNvcHkoKTsgdmlydHVhbCBJZEFz
c2lnbm1lbnRQb2xpY3lWYWx1ZSB2YWx1ZSgpIHsgcmV0dXJuIHBkX3ZhbHVlOyB9IHZpcnR1YWwg
dm9pZCogX3B0clRvT2JqUmVmKGNvbnN0IGNoYXIqIHJlcG9JZCk7IHN0YXRpYyBJZEFzc2lnbm1l
bnRQb2xpY3lfcHRyIF9kdXBsaWNhdGUoSWRBc3NpZ25tZW50UG9saWN5X3B0ciBwKTsgc3RhdGlj
IElkQXNzaWdubWVudFBvbGljeV9wdHIgX25hcnJvdyhDT1JCQTo6T2JqZWN0X3B0ciBwKTsgc3Rh
dGljIElkQXNzaWdubWVudFBvbGljeV9wdHIgX25pbCgpOyBzdGF0aWMgY29uc3QgY2hhciogX1BE
X3JlcG9JZDsgcHJpdmF0ZTogSWRBc3NpZ25tZW50UG9saWN5VmFsdWUgcGRfdmFsdWU7IH07IHR5
cGVkZWYgX0NPUkJBX1BzZXVkb09ial9WYXI8SWRBc3NpZ25tZW50UG9saWN5PiBJZEFzc2lnbm1l
bnRQb2xpY3lfdmFyOwogIGNsYXNzIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeTsgdHlwZWRlZiBJ
bXBsaWNpdEFjdGl2YXRpb25Qb2xpY3kqIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9wdHI7IHR5
cGVkZWYgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3B0ciBJbXBsaWNpdEFjdGl2YXRpb25Qb2xp
Y3lSZWY7IGNsYXNzIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeSA6IHB1YmxpYyBDT1JCQTo6UG9s
aWN5IHsgcHVibGljOiBpbmxpbmUgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5KEltcGxpY2l0QWN0
aXZhdGlvblBvbGljeVZhbHVlIHZhbHVlKSA6IENPUkJBOjpQb2xpY3koSU1QTElDSVRfQUNUSVZB
VElPTl9QT0xJQ1lfSUQpLCBwZF92YWx1ZSh2YWx1ZSkge30gaW5saW5lIEltcGxpY2l0QWN0aXZh
dGlvblBvbGljeSgpIHt9IHZpcnR1YWwgfkltcGxpY2l0QWN0aXZhdGlvblBvbGljeSgpOyB2aXJ0
dWFsIENPUkJBOjpQb2xpY3lfcHRyIGNvcHkoKTsgdmlydHVhbCBJbXBsaWNpdEFjdGl2YXRpb25Q
b2xpY3lWYWx1ZSB2YWx1ZSgpIHsgcmV0dXJuIHBkX3ZhbHVlOyB9IHZpcnR1YWwgdm9pZCogX3B0
clRvT2JqUmVmKGNvbnN0IGNoYXIqIHJlcG9JZCk7IHN0YXRpYyBJbXBsaWNpdEFjdGl2YXRpb25Q
b2xpY3lfcHRyIF9kdXBsaWNhdGUoSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3B0ciBwKTsgc3Rh
dGljIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9wdHIgX25hcnJvdyhDT1JCQTo6T2JqZWN0X3B0
ciBwKTsgc3RhdGljIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9wdHIgX25pbCgpOyBzdGF0aWMg
Y29uc3QgY2hhciogX1BEX3JlcG9JZDsgcHJpdmF0ZTogSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5
VmFsdWUgcGRfdmFsdWU7IH07IHR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9WYXI8SW1wbGljaXRB
Y3RpdmF0aW9uUG9saWN5PiBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfdmFyOwoKICBjbGFzcyBT
ZXJ2YW50UmV0ZW50aW9uUG9saWN5OyB0eXBlZGVmIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3kqIFNl
cnZhbnRSZXRlbnRpb25Qb2xpY3lfcHRyOyB0eXBlZGVmIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lf
cHRyIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lSZWY7IGNsYXNzIFNlcnZhbnRSZXRlbnRpb25Qb2xp
Y3kgOiBwdWJsaWMgQ09SQkE6OlBvbGljeSB7IHB1YmxpYzogaW5saW5lIFNlcnZhbnRSZXRlbnRp
b25Qb2xpY3koU2VydmFudFJldGVudGlvblBvbGljeVZhbHVlIHZhbHVlKSA6IENPUkJBOjpQb2xp
Y3koU0VSVkFOVF9SRVRFTlRJT05fUE9MSUNZX0lEKSwgcGRfdmFsdWUodmFsdWUpIHt9IGlubGlu
ZSBTZXJ2YW50UmV0ZW50aW9uUG9saWN5KCkge30gdmlydHVhbCB+U2VydmFudFJldGVudGlvblBv
bGljeSgpOyB2aXJ0dWFsIENPUkJBOjpQb2xpY3lfcHRyIGNvcHkoKTsgdmlydHVhbCBTZXJ2YW50
UmV0ZW50aW9uUG9saWN5VmFsdWUgdmFsdWUoKSB7IHJldHVybiBwZF92YWx1ZTsgfSB2aXJ0dWFs
IHZvaWQqIF9wdHJUb09ialJlZihjb25zdCBjaGFyKiByZXBvSWQpOyBzdGF0aWMgU2VydmFudFJl
dGVudGlvblBvbGljeV9wdHIgX2R1cGxpY2F0ZShTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0ciBw
KTsgc3RhdGljIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfcHRyIF9uYXJyb3coQ09SQkE6Ok9iamVj
dF9wdHIgcCk7IHN0YXRpYyBTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0ciBfbmlsKCk7IHN0YXRp
YyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOyBwcml2YXRlOiBTZXJ2YW50UmV0ZW50aW9uUG9saWN5
VmFsdWUgcGRfdmFsdWU7IH07IHR5cGVkZWYgX0NPUkJBX1BzZXVkb09ial9WYXI8U2VydmFudFJl
dGVudGlvblBvbGljeT4gU2VydmFudFJldGVudGlvblBvbGljeV92YXI7CgogIGNsYXNzIFJlcXVl
c3RQcm9jZXNzaW5nUG9saWN5OyB0eXBlZGVmIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5KiBSZXF1
ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHI7IHR5cGVkZWYgUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lf
cHRyIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5UmVmOyBjbGFzcyBSZXF1ZXN0UHJvY2Vzc2luZ1Bv
bGljeSA6IHB1YmxpYyBDT1JCQTo6UG9saWN5IHsgcHVibGljOiBpbmxpbmUgUmVxdWVzdFByb2Nl
c3NpbmdQb2xpY3koUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lWYWx1ZSB2YWx1ZSkgOiBDT1JCQTo6
UG9saWN5KFJFUVVFU1RfUFJPQ0VTU0lOR19QT0xJQ1lfSUQpLCBwZF92YWx1ZSh2YWx1ZSkge30g
aW5saW5lIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5KCkge30gdmlydHVhbCB+UmVxdWVzdFByb2Nl
c3NpbmdQb2xpY3koKTsgdmlydHVhbCBDT1JCQTo6UG9saWN5X3B0ciBjb3B5KCk7IHZpcnR1YWwg
UmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lWYWx1ZSB2YWx1ZSgpIHsgcmV0dXJuIHBkX3ZhbHVlOyB9
IHZpcnR1YWwgdm9pZCogX3B0clRvT2JqUmVmKGNvbnN0IGNoYXIqIHJlcG9JZCk7IHN0YXRpYyBS
ZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgX2R1cGxpY2F0ZShSZXF1ZXN0UHJvY2Vzc2luZ1Bv
bGljeV9wdHIgcCk7IHN0YXRpYyBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgX25hcnJvdyhD
T1JCQTo6T2JqZWN0X3B0ciBwKTsgc3RhdGljIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3B0ciBf
bmlsKCk7IHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOyBwcml2YXRlOiBSZXF1ZXN0UHJv
Y2Vzc2luZ1BvbGljeVZhbHVlIHBkX3ZhbHVlOyB9OyB0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpf
VmFyPFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5PiBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV92YXI7
CiMgMzg4ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL3BvYS5oIgogIGNsYXNzIFBPQU1h
bmFnZXI7CiAgdHlwZWRlZiBQT0FNYW5hZ2VyKiBQT0FNYW5hZ2VyX3B0cjsKICB0eXBlZGVmIFBP
QU1hbmFnZXJfcHRyIFBPQU1hbmFnZXJSZWY7CgogIGNsYXNzIFBPQU1hbmFnZXIgOiBwdWJsaWMg
Q09SQkE6Ok9iamVjdCB7CiAgcHVibGljOgogICAgY2xhc3MgQWRhcHRlckluYWN0aXZlIDogcHVi
bGljIENPUkJBOjpVc2VyRXhjZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgQWRhcHRlckluYWN0aXZl
KCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsgcGRfaW5zZXJ0VG9BbnlGbk5D
UCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIEFkYXB0ZXJJbmFjdGl2ZShjb25zdCBBZGFw
dGVySW5hY3RpdmUmIF9leCkgOiBVc2VyRXhjZXB0aW9uKF9leCkge30gaW5saW5lIEFkYXB0ZXJJ
bmFjdGl2ZSYgb3BlcmF0b3I9KGNvbnN0IEFkYXB0ZXJJbmFjdGl2ZSYgX2V4KSB7ICogKENPUkJB
OjpVc2VyRXhjZXB0aW9uKikgdGhpcyA9IF9leDsgcmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgfkFk
YXB0ZXJJbmFjdGl2ZSgpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0YXRpYyBBZGFwdGVySW5h
Y3RpdmUqIF9kb3duY2FzdChDT1JCQTo6RXhjZXB0aW9uKik7IHN0YXRpYyBjb25zdCBBZGFwdGVy
SW5hY3RpdmUqIF9kb3duY2FzdChjb25zdCBDT1JCQTo6RXhjZXB0aW9uKik7IHN0YXRpYyBpbmxp
bmUgQWRhcHRlckluYWN0aXZlKiBfbmFycm93KENPUkJBOjpFeGNlcHRpb24qIF9leCkgeyByZXR1
cm4gX2Rvd25jYXN0KF9leCk7IH0gaW5saW5lIHNpemVfdCBfTlBfYWxpZ25lZFNpemUoc2l6ZV90
IG9zKSBjb25zdCB7IHJldHVybiBvczsgfSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShOZXRCdWZm
ZXJlZFN0cmVhbSYpIGNvbnN0IHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPj49KE1lbUJ1ZmZlcmVk
U3RyZWFtJikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oTmV0QnVmZmVyZWRTdHJl
YW0mKSB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShNZW1CdWZmZXJlZFN0cmVhbSYpIHt9IHN0
YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMgaW5zZXJ0RXhj
ZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgc3RhdGljIGNvbnN0IGNoYXIqIF9QRF9y
ZXBvSWQ7IHByaXZhdGU6IHZpcnR1YWwgQ09SQkE6OkV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgp
IGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsgdmlydHVhbCBj
b25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfTlBf
bWFyc2hhbChOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX05QX21hcnNo
YWwoTWVtQnVmZmVyZWRTdHJlYW0mKSBjb25zdDsgfTsKCiAgICB2aXJ0dWFsIHZvaWQgYWN0aXZh
dGUoKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgaG9sZF9yZXF1ZXN0cyhDT1JCQTo6Qm9vbGVhbiB3
YWl0X2Zvcl9jb21wbGV0aW9uKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZGlzY2FyZF9yZXF1ZXN0
cyhDT1JCQTo6Qm9vbGVhbiB3YWl0X2Zvcl9jb21wbGV0aW9uKSA9IDA7CiAgICB2aXJ0dWFsIHZv
aWQgZGVhY3RpdmF0ZShDT1JCQTo6Qm9vbGVhbiBldGhlcmVhbGl6ZV9vYmplY3RzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gd2FpdF9mb3JfY29tcGxldGlvbikg
PSAwOwoKICAgIGVudW0gU3RhdGUgeyBIT0xESU5HLCBBQ1RJVkUsIERJU0NBUkRJTkcsIElOQUNU
SVZFIH07CgogICAgdmlydHVhbCBTdGF0ZSBnZXRfc3RhdGUoKSA9IDA7CgoKCiAgICBzdGF0aWMg
UE9BTWFuYWdlcl9wdHIgX2R1cGxpY2F0ZShQT0FNYW5hZ2VyX3B0cik7CiAgICBzdGF0aWMgUE9B
TWFuYWdlcl9wdHIgX25hcnJvdyhDT1JCQTo6T2JqZWN0X3B0cik7CiAgICBzdGF0aWMgUE9BTWFu
YWdlcl9wdHIgX25pbCgpOwoKCiAgICBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsKCiAg
cHJvdGVjdGVkOgogICAgaW5saW5lIFBPQU1hbmFnZXIoaW50IGlzX25pbCA9IDApIHsKICAgICAg
X1BSX3NldG9iaigob21uaU9ialJlZiopIChpc19uaWwgPyAwOjEpKTsKICAgIH0KICAgIHZpcnR1
YWwgflBPQU1hbmFnZXIoKTsKCiAgcHJpdmF0ZToKICAgIFBPQU1hbmFnZXIoY29uc3QgUE9BTWFu
YWdlciYpOwogICAgUE9BTWFuYWdlciYgb3BlcmF0b3I9KGNvbnN0IFBPQU1hbmFnZXImKTsKICB9
OwoKICB0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpfVmFyPFBPQU1hbmFnZXI+IFBPQU1hbmFnZXJf
dmFyOwoKCgoKCiAgY2xhc3MgX29ianJlZl9BZGFwdGVyQWN0aXZhdG9yOwogIGNsYXNzIF9vYmpy
ZWZfU2VydmFudE1hbmFnZXI7CgoKICBjbGFzcyBQT0EgOiBwdWJsaWMgQ09SQkE6Ok9iamVjdCB7
CiAgcHVibGljOgoKICAgIHR5cGVkZWYgUE9BKiBfcHRyX3R5cGU7CiAgICB0eXBlZGVmIF9DT1JC
QV9Qc2V1ZG9PYmpfVmFyPFBPQT4gX3Zhcl90eXBlOwoKCgogICAgY2xhc3MgQWRhcHRlckFscmVh
ZHlFeGlzdHMgOiBwdWJsaWMgQ09SQkE6OlVzZXJFeGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBB
ZGFwdGVyQWxyZWFkeUV4aXN0cygpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47
IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBBZGFwdGVy
QWxyZWFkeUV4aXN0cyhjb25zdCBBZGFwdGVyQWxyZWFkeUV4aXN0cyYgX2V4KSA6IFVzZXJFeGNl
cHRpb24oX2V4KSB7fSBpbmxpbmUgQWRhcHRlckFscmVhZHlFeGlzdHMmIG9wZXJhdG9yPShjb25z
dCBBZGFwdGVyQWxyZWFkeUV4aXN0cyYgX2V4KSB7ICogKENPUkJBOjpVc2VyRXhjZXB0aW9uKikg
dGhpcyA9IF9leDsgcmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgfkFkYXB0ZXJBbHJlYWR5RXhpc3Rz
KCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGljIEFkYXB0ZXJBbHJlYWR5RXhpc3RzKiBf
ZG93bmNhc3QoQ09SQkE6OkV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgQWRhcHRlckFscmVhZHlF
eGlzdHMqIF9kb3duY2FzdChjb25zdCBDT1JCQTo6RXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUg
QWRhcHRlckFscmVhZHlFeGlzdHMqIF9uYXJyb3coQ09SQkE6OkV4Y2VwdGlvbiogX2V4KSB7IHJl
dHVybiBfZG93bmNhc3QoX2V4KTsgfSBpbmxpbmUgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXpl
X3Qgb3MpIGNvbnN0IHsgcmV0dXJuIG9zOyB9IGlubGluZSB2b2lkIG9wZXJhdG9yPj49KE5ldEJ1
ZmZlcmVkU3RyZWFtJikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTWVtQnVmZmVy
ZWRTdHJlYW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShOZXRCdWZmZXJlZFN0
cmVhbSYpIHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE1lbUJ1ZmZlcmVkU3RyZWFtJikge30g
c3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBpbnNlcnRF
eGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBzdGF0aWMgY29uc3QgY2hhciogX1BE
X3JlcG9JZDsgcHJpdmF0ZTogdmlydHVhbCBDT1JCQTo6RXhjZXB0aW9uKiBfTlBfZHVwbGljYXRl
KCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OyB2aXJ0dWFs
IGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgdmlydHVhbCB2b2lkIF9O
UF9tYXJzaGFsKE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IHZpcnR1YWwgdm9pZCBfTlBfbWFy
c2hhbChNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0OyB9OwogICAgY2xhc3MgQWRhcHRlckluYWN0
aXZlIDogcHVibGljIENPUkJBOjpVc2VyRXhjZXB0aW9uIHsgcHVibGljOiBpbmxpbmUgQWRhcHRl
ckluYWN0aXZlKCkgeyBwZF9pbnNlcnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsgcGRfaW5zZXJ0
VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7IH0gaW5saW5lIEFkYXB0ZXJJbmFjdGl2ZShj
b25zdCBBZGFwdGVySW5hY3RpdmUmIF9leCkgOiBVc2VyRXhjZXB0aW9uKF9leCkge30gaW5saW5l
IEFkYXB0ZXJJbmFjdGl2ZSYgb3BlcmF0b3I9KGNvbnN0IEFkYXB0ZXJJbmFjdGl2ZSYgX2V4KSB7
ICogKENPUkJBOjpVc2VyRXhjZXB0aW9uKikgdGhpcyA9IF9leDsgcmV0dXJuICp0aGlzOyB9IHZp
cnR1YWwgfkFkYXB0ZXJJbmFjdGl2ZSgpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCk7IHN0YXRpYyBB
ZGFwdGVySW5hY3RpdmUqIF9kb3duY2FzdChDT1JCQTo6RXhjZXB0aW9uKik7IHN0YXRpYyBjb25z
dCBBZGFwdGVySW5hY3RpdmUqIF9kb3duY2FzdChjb25zdCBDT1JCQTo6RXhjZXB0aW9uKik7IHN0
YXRpYyBpbmxpbmUgQWRhcHRlckluYWN0aXZlKiBfbmFycm93KENPUkJBOjpFeGNlcHRpb24qIF9l
eCkgeyByZXR1cm4gX2Rvd25jYXN0KF9leCk7IH0gaW5saW5lIHNpemVfdCBfTlBfYWxpZ25lZFNp
emUoc2l6ZV90IG9zKSBjb25zdCB7IHJldHVybiBvczsgfSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+
PShOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0IHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPj49KE1l
bUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oTmV0QnVm
ZmVyZWRTdHJlYW0mKSB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShNZW1CdWZmZXJlZFN0cmVh
bSYpIHt9IHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNlcnRUb0FueUZuOyBzdGF0aWMg
aW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0VG9BbnlGbk5DUDsgc3RhdGljIGNvbnN0IGNo
YXIqIF9QRF9yZXBvSWQ7IHByaXZhdGU6IHZpcnR1YWwgQ09SQkE6OkV4Y2VwdGlvbiogX05QX2R1
cGxpY2F0ZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsg
dmlydHVhbCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCogc2l6ZSkgY29uc3Q7IHZpcnR1YWwg
dm9pZCBfTlBfbWFyc2hhbChOZXRCdWZmZXJlZFN0cmVhbSYpIGNvbnN0OyB2aXJ0dWFsIHZvaWQg
X05QX21hcnNoYWwoTWVtQnVmZmVyZWRTdHJlYW0mKSBjb25zdDsgfTsKICAgIGNsYXNzIEFkYXB0
ZXJOb25FeGlzdGVudCA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbiB7IHB1YmxpYzogaW5s
aW5lIEFkYXB0ZXJOb25FeGlzdGVudCgpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55
Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBBZGFw
dGVyTm9uRXhpc3RlbnQoY29uc3QgQWRhcHRlck5vbkV4aXN0ZW50JiBfZXgpIDogVXNlckV4Y2Vw
dGlvbihfZXgpIHt9IGlubGluZSBBZGFwdGVyTm9uRXhpc3RlbnQmIG9wZXJhdG9yPShjb25zdCBB
ZGFwdGVyTm9uRXhpc3RlbnQmIF9leCkgeyAqIChDT1JCQTo6VXNlckV4Y2VwdGlvbiopIHRoaXMg
PSBfZXg7IHJldHVybiAqdGhpczsgfSB2aXJ0dWFsIH5BZGFwdGVyTm9uRXhpc3RlbnQoKTsgdmly
dHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMgQWRhcHRlck5vbkV4aXN0ZW50KiBfZG93bmNhc3Qo
Q09SQkE6OkV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgQWRhcHRlck5vbkV4aXN0ZW50KiBfZG93
bmNhc3QoY29uc3QgQ09SQkE6OkV4Y2VwdGlvbiopOyBzdGF0aWMgaW5saW5lIEFkYXB0ZXJOb25F
eGlzdGVudCogX25hcnJvdyhDT1JCQTo6RXhjZXB0aW9uKiBfZXgpIHsgcmV0dXJuIF9kb3duY2Fz
dChfZXgpOyB9IGlubGluZSBzaXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBvcykgY29uc3Qg
eyByZXR1cm4gb3M7IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTmV0QnVmZmVyZWRTdHJlYW0m
KSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShNZW1CdWZmZXJlZFN0cmVhbSYpIGNv
bnN0IHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE5ldEJ1ZmZlcmVkU3RyZWFtJikge30gaW5s
aW5lIHZvaWQgb3BlcmF0b3I8PD0oTWVtQnVmZmVyZWRTdHJlYW0mKSB7fSBzdGF0aWMgaW5zZXJ0
RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55
TkNQIGluc2VydFRvQW55Rm5OQ1A7IHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOyBwcml2
YXRlOiB2aXJ0dWFsIENPUkJBOjpFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsgdmly
dHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciog
X05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX05QX21hcnNoYWwoTmV0
QnVmZmVyZWRTdHJlYW0mKSBjb25zdDsgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE1lbUJ1ZmZl
cmVkU3RyZWFtJikgY29uc3Q7IH07CiAgICBjbGFzcyBOb1NlcnZhbnQgOiBwdWJsaWMgQ09SQkE6
OlVzZXJFeGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBOb1NlcnZhbnQoKSB7IHBkX2luc2VydFRv
QW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9pbnNlcnRUb0FueUZuTkNQID0gaW5zZXJ0VG9BbnlG
bk5DUDsgfSBpbmxpbmUgTm9TZXJ2YW50KGNvbnN0IE5vU2VydmFudCYgX2V4KSA6IFVzZXJFeGNl
cHRpb24oX2V4KSB7fSBpbmxpbmUgTm9TZXJ2YW50JiBvcGVyYXRvcj0oY29uc3QgTm9TZXJ2YW50
JiBfZXgpIHsgKiAoQ09SQkE6OlVzZXJFeGNlcHRpb24qKSB0aGlzID0gX2V4OyByZXR1cm4gKnRo
aXM7IH0gdmlydHVhbCB+Tm9TZXJ2YW50KCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGlj
IE5vU2VydmFudCogX2Rvd25jYXN0KENPUkJBOjpFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IE5v
U2VydmFudCogX2Rvd25jYXN0KGNvbnN0IENPUkJBOjpFeGNlcHRpb24qKTsgc3RhdGljIGlubGlu
ZSBOb1NlcnZhbnQqIF9uYXJyb3coQ09SQkE6OkV4Y2VwdGlvbiogX2V4KSB7IHJldHVybiBfZG93
bmNhc3QoX2V4KTsgfSBpbmxpbmUgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3Qgb3MpIGNv
bnN0IHsgcmV0dXJuIG9zOyB9IGlubGluZSB2b2lkIG9wZXJhdG9yPj49KE5ldEJ1ZmZlcmVkU3Ry
ZWFtJikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTWVtQnVmZmVyZWRTdHJlYW0m
KSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShOZXRCdWZmZXJlZFN0cmVhbSYpIHt9
IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE1lbUJ1ZmZlcmVkU3RyZWFtJikge30gc3RhdGljIGlu
c2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBpbnNlcnRFeGNlcHRpb25U
b0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsg
cHJpdmF0ZTogdmlydHVhbCBDT1JCQTo6RXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7
IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNo
YXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFs
KE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IHZpcnR1YWwgdm9pZCBfTlBfbWFyc2hhbChNZW1C
dWZmZXJlZFN0cmVhbSYpIGNvbnN0OyB9OwogICAgY2xhc3MgT2JqZWN0QWxyZWFkeUFjdGl2ZSA6
IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIE9iamVjdEFscmVh
ZHlBY3RpdmUoKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9pbnNlcnRU
b0FueUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgT2JqZWN0QWxyZWFkeUFjdGl2
ZShjb25zdCBPYmplY3RBbHJlYWR5QWN0aXZlJiBfZXgpIDogVXNlckV4Y2VwdGlvbihfZXgpIHt9
IGlubGluZSBPYmplY3RBbHJlYWR5QWN0aXZlJiBvcGVyYXRvcj0oY29uc3QgT2JqZWN0QWxyZWFk
eUFjdGl2ZSYgX2V4KSB7ICogKENPUkJBOjpVc2VyRXhjZXB0aW9uKikgdGhpcyA9IF9leDsgcmV0
dXJuICp0aGlzOyB9IHZpcnR1YWwgfk9iamVjdEFscmVhZHlBY3RpdmUoKTsgdmlydHVhbCB2b2lk
IF9yYWlzZSgpOyBzdGF0aWMgT2JqZWN0QWxyZWFkeUFjdGl2ZSogX2Rvd25jYXN0KENPUkJBOjpF
eGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IE9iamVjdEFscmVhZHlBY3RpdmUqIF9kb3duY2FzdChj
b25zdCBDT1JCQTo6RXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgT2JqZWN0QWxyZWFkeUFjdGl2
ZSogX25hcnJvdyhDT1JCQTo6RXhjZXB0aW9uKiBfZXgpIHsgcmV0dXJuIF9kb3duY2FzdChfZXgp
OyB9IGlubGluZSBzaXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCBvcykgY29uc3QgeyByZXR1
cm4gb3M7IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25z
dCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0IHt9
IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE5ldEJ1ZmZlcmVkU3RyZWFtJikge30gaW5saW5lIHZv
aWQgb3BlcmF0b3I8PD0oTWVtQnVmZmVyZWRTdHJlYW0mKSB7fSBzdGF0aWMgaW5zZXJ0RXhjZXB0
aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55TkNQIGlu
c2VydFRvQW55Rm5OQ1A7IHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOyBwcml2YXRlOiB2
aXJ0dWFsIENPUkJBOjpFeGNlcHRpb24qIF9OUF9kdXBsaWNhdGUoKSBjb25zdDsgdmlydHVhbCBj
b25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3Jl
cG9JZChpbnQqIHNpemUpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX05QX21hcnNoYWwoTmV0QnVmZmVy
ZWRTdHJlYW0mKSBjb25zdDsgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE1lbUJ1ZmZlcmVkU3Ry
ZWFtJikgY29uc3Q7IH07CiAgICBjbGFzcyBPYmplY3ROb3RBY3RpdmUgOiBwdWJsaWMgQ09SQkE6
OlVzZXJFeGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBPYmplY3ROb3RBY3RpdmUoKSB7IHBkX2lu
c2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9pbnNlcnRUb0FueUZuTkNQID0gaW5zZXJ0
VG9BbnlGbk5DUDsgfSBpbmxpbmUgT2JqZWN0Tm90QWN0aXZlKGNvbnN0IE9iamVjdE5vdEFjdGl2
ZSYgX2V4KSA6IFVzZXJFeGNlcHRpb24oX2V4KSB7fSBpbmxpbmUgT2JqZWN0Tm90QWN0aXZlJiBv
cGVyYXRvcj0oY29uc3QgT2JqZWN0Tm90QWN0aXZlJiBfZXgpIHsgKiAoQ09SQkE6OlVzZXJFeGNl
cHRpb24qKSB0aGlzID0gX2V4OyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+T2JqZWN0Tm90QWN0
aXZlKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGljIE9iamVjdE5vdEFjdGl2ZSogX2Rv
d25jYXN0KENPUkJBOjpFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IE9iamVjdE5vdEFjdGl2ZSog
X2Rvd25jYXN0KGNvbnN0IENPUkJBOjpFeGNlcHRpb24qKTsgc3RhdGljIGlubGluZSBPYmplY3RO
b3RBY3RpdmUqIF9uYXJyb3coQ09SQkE6OkV4Y2VwdGlvbiogX2V4KSB7IHJldHVybiBfZG93bmNh
c3QoX2V4KTsgfSBpbmxpbmUgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3Qgb3MpIGNvbnN0
IHsgcmV0dXJuIG9zOyB9IGlubGluZSB2b2lkIG9wZXJhdG9yPj49KE5ldEJ1ZmZlcmVkU3RyZWFt
JikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTWVtQnVmZmVyZWRTdHJlYW0mKSBj
b25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShOZXRCdWZmZXJlZFN0cmVhbSYpIHt9IGlu
bGluZSB2b2lkIG9wZXJhdG9yPDw9KE1lbUJ1ZmZlcmVkU3RyZWFtJikge30gc3RhdGljIGluc2Vy
dEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0Fu
eU5DUCBpbnNlcnRUb0FueUZuTkNQOyBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsgcHJp
dmF0ZTogdmlydHVhbCBDT1JCQTo6RXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7IHZp
cnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIq
IF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE5l
dEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IHZpcnR1YWwgdm9pZCBfTlBfbWFyc2hhbChNZW1CdWZm
ZXJlZFN0cmVhbSYpIGNvbnN0OyB9OwogICAgY2xhc3MgU2VydmFudEFscmVhZHlBY3RpdmUgOiBw
dWJsaWMgQ09SQkE6OlVzZXJFeGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBTZXJ2YW50QWxyZWFk
eUFjdGl2ZSgpIHsgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRv
QW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZuTkNQOyB9IGlubGluZSBTZXJ2YW50QWxyZWFkeUFjdGl2
ZShjb25zdCBTZXJ2YW50QWxyZWFkeUFjdGl2ZSYgX2V4KSA6IFVzZXJFeGNlcHRpb24oX2V4KSB7
fSBpbmxpbmUgU2VydmFudEFscmVhZHlBY3RpdmUmIG9wZXJhdG9yPShjb25zdCBTZXJ2YW50QWxy
ZWFkeUFjdGl2ZSYgX2V4KSB7ICogKENPUkJBOjpVc2VyRXhjZXB0aW9uKikgdGhpcyA9IF9leDsg
cmV0dXJuICp0aGlzOyB9IHZpcnR1YWwgflNlcnZhbnRBbHJlYWR5QWN0aXZlKCk7IHZpcnR1YWwg
dm9pZCBfcmFpc2UoKTsgc3RhdGljIFNlcnZhbnRBbHJlYWR5QWN0aXZlKiBfZG93bmNhc3QoQ09S
QkE6OkV4Y2VwdGlvbiopOyBzdGF0aWMgY29uc3QgU2VydmFudEFscmVhZHlBY3RpdmUqIF9kb3du
Y2FzdChjb25zdCBDT1JCQTo6RXhjZXB0aW9uKik7IHN0YXRpYyBpbmxpbmUgU2VydmFudEFscmVh
ZHlBY3RpdmUqIF9uYXJyb3coQ09SQkE6OkV4Y2VwdGlvbiogX2V4KSB7IHJldHVybiBfZG93bmNh
c3QoX2V4KTsgfSBpbmxpbmUgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3Qgb3MpIGNvbnN0
IHsgcmV0dXJuIG9zOyB9IGlubGluZSB2b2lkIG9wZXJhdG9yPj49KE5ldEJ1ZmZlcmVkU3RyZWFt
JikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTWVtQnVmZmVyZWRTdHJlYW0mKSBj
b25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShOZXRCdWZmZXJlZFN0cmVhbSYpIHt9IGlu
bGluZSB2b2lkIG9wZXJhdG9yPDw9KE1lbUJ1ZmZlcmVkU3RyZWFtJikge30gc3RhdGljIGluc2Vy
dEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0Fu
eU5DUCBpbnNlcnRUb0FueUZuTkNQOyBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsgcHJp
dmF0ZTogdmlydHVhbCBDT1JCQTo6RXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7IHZp
cnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIq
IF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE5l
dEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IHZpcnR1YWwgdm9pZCBfTlBfbWFyc2hhbChNZW1CdWZm
ZXJlZFN0cmVhbSYpIGNvbnN0OyB9OwogICAgY2xhc3MgU2VydmFudE5vdEFjdGl2ZSA6IHB1Ymxp
YyBDT1JCQTo6VXNlckV4Y2VwdGlvbiB7IHB1YmxpYzogaW5saW5lIFNlcnZhbnROb3RBY3RpdmUo
KSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9pbnNlcnRUb0FueUZuTkNQ
ID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgU2VydmFudE5vdEFjdGl2ZShjb25zdCBTZXJ2
YW50Tm90QWN0aXZlJiBfZXgpIDogVXNlckV4Y2VwdGlvbihfZXgpIHt9IGlubGluZSBTZXJ2YW50
Tm90QWN0aXZlJiBvcGVyYXRvcj0oY29uc3QgU2VydmFudE5vdEFjdGl2ZSYgX2V4KSB7ICogKENP
UkJBOjpVc2VyRXhjZXB0aW9uKikgdGhpcyA9IF9leDsgcmV0dXJuICp0aGlzOyB9IHZpcnR1YWwg
flNlcnZhbnROb3RBY3RpdmUoKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpOyBzdGF0aWMgU2VydmFu
dE5vdEFjdGl2ZSogX2Rvd25jYXN0KENPUkJBOjpFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IFNl
cnZhbnROb3RBY3RpdmUqIF9kb3duY2FzdChjb25zdCBDT1JCQTo6RXhjZXB0aW9uKik7IHN0YXRp
YyBpbmxpbmUgU2VydmFudE5vdEFjdGl2ZSogX25hcnJvdyhDT1JCQTo6RXhjZXB0aW9uKiBfZXgp
IHsgcmV0dXJuIF9kb3duY2FzdChfZXgpOyB9IGlubGluZSBzaXplX3QgX05QX2FsaWduZWRTaXpl
KHNpemVfdCBvcykgY29uc3QgeyByZXR1cm4gb3M7IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0o
TmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShNZW1C
dWZmZXJlZFN0cmVhbSYpIGNvbnN0IHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE5ldEJ1ZmZl
cmVkU3RyZWFtJikge30gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oTWVtQnVmZmVyZWRTdHJlYW0m
KSB7fSBzdGF0aWMgaW5zZXJ0RXhjZXB0aW9uVG9BbnkgaW5zZXJ0VG9BbnlGbjsgc3RhdGljIGlu
c2VydEV4Y2VwdGlvblRvQW55TkNQIGluc2VydFRvQW55Rm5OQ1A7IHN0YXRpYyBjb25zdCBjaGFy
KiBfUERfcmVwb0lkOyBwcml2YXRlOiB2aXJ0dWFsIENPUkJBOjpFeGNlcHRpb24qIF9OUF9kdXBs
aWNhdGUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7IHZp
cnR1YWwgY29uc3QgY2hhciogX05QX3JlcG9JZChpbnQqIHNpemUpIGNvbnN0OyB2aXJ0dWFsIHZv
aWQgX05QX21hcnNoYWwoTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdDsgdmlydHVhbCB2b2lkIF9O
UF9tYXJzaGFsKE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IH07CiAgICBjbGFzcyBXcm9uZ0Fk
YXB0ZXIgOiBwdWJsaWMgQ09SQkE6OlVzZXJFeGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBXcm9u
Z0FkYXB0ZXIoKSB7IHBkX2luc2VydFRvQW55Rm4gPSBpbnNlcnRUb0FueUZuOyBwZF9pbnNlcnRU
b0FueUZuTkNQID0gaW5zZXJ0VG9BbnlGbk5DUDsgfSBpbmxpbmUgV3JvbmdBZGFwdGVyKGNvbnN0
IFdyb25nQWRhcHRlciYgX2V4KSA6IFVzZXJFeGNlcHRpb24oX2V4KSB7fSBpbmxpbmUgV3JvbmdB
ZGFwdGVyJiBvcGVyYXRvcj0oY29uc3QgV3JvbmdBZGFwdGVyJiBfZXgpIHsgKiAoQ09SQkE6OlVz
ZXJFeGNlcHRpb24qKSB0aGlzID0gX2V4OyByZXR1cm4gKnRoaXM7IH0gdmlydHVhbCB+V3JvbmdB
ZGFwdGVyKCk7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsgc3RhdGljIFdyb25nQWRhcHRlciogX2Rv
d25jYXN0KENPUkJBOjpFeGNlcHRpb24qKTsgc3RhdGljIGNvbnN0IFdyb25nQWRhcHRlciogX2Rv
d25jYXN0KGNvbnN0IENPUkJBOjpFeGNlcHRpb24qKTsgc3RhdGljIGlubGluZSBXcm9uZ0FkYXB0
ZXIqIF9uYXJyb3coQ09SQkE6OkV4Y2VwdGlvbiogX2V4KSB7IHJldHVybiBfZG93bmNhc3QoX2V4
KTsgfSBpbmxpbmUgc2l6ZV90IF9OUF9hbGlnbmVkU2l6ZShzaXplX3Qgb3MpIGNvbnN0IHsgcmV0
dXJuIG9zOyB9IGlubGluZSB2b2lkIG9wZXJhdG9yPj49KE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29u
c3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTWVtQnVmZmVyZWRTdHJlYW0mKSBjb25zdCB7
fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShOZXRCdWZmZXJlZFN0cmVhbSYpIHt9IGlubGluZSB2
b2lkIG9wZXJhdG9yPDw9KE1lbUJ1ZmZlcmVkU3RyZWFtJikge30gc3RhdGljIGluc2VydEV4Y2Vw
dGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBp
bnNlcnRUb0FueUZuTkNQOyBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsgcHJpdmF0ZTog
dmlydHVhbCBDT1JCQTo6RXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7IHZpcnR1YWwg
Y29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9y
ZXBvSWQoaW50KiBzaXplKSBjb25zdDsgdmlydHVhbCB2b2lkIF9OUF9tYXJzaGFsKE5ldEJ1ZmZl
cmVkU3RyZWFtJikgY29uc3Q7IHZpcnR1YWwgdm9pZCBfTlBfbWFyc2hhbChNZW1CdWZmZXJlZFN0
cmVhbSYpIGNvbnN0OyB9OwogICAgY2xhc3MgV3JvbmdQb2xpY3kgOiBwdWJsaWMgQ09SQkE6OlVz
ZXJFeGNlcHRpb24geyBwdWJsaWM6IGlubGluZSBXcm9uZ1BvbGljeSgpIHsgcGRfaW5zZXJ0VG9B
bnlGbiA9IGluc2VydFRvQW55Rm47IHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNlcnRUb0FueUZu
TkNQOyB9IGlubGluZSBXcm9uZ1BvbGljeShjb25zdCBXcm9uZ1BvbGljeSYgX2V4KSA6IFVzZXJF
eGNlcHRpb24oX2V4KSB7fSBpbmxpbmUgV3JvbmdQb2xpY3kmIG9wZXJhdG9yPShjb25zdCBXcm9u
Z1BvbGljeSYgX2V4KSB7ICogKENPUkJBOjpVc2VyRXhjZXB0aW9uKikgdGhpcyA9IF9leDsgcmV0
dXJuICp0aGlzOyB9IHZpcnR1YWwgfldyb25nUG9saWN5KCk7IHZpcnR1YWwgdm9pZCBfcmFpc2Uo
KTsgc3RhdGljIFdyb25nUG9saWN5KiBfZG93bmNhc3QoQ09SQkE6OkV4Y2VwdGlvbiopOyBzdGF0
aWMgY29uc3QgV3JvbmdQb2xpY3kqIF9kb3duY2FzdChjb25zdCBDT1JCQTo6RXhjZXB0aW9uKik7
IHN0YXRpYyBpbmxpbmUgV3JvbmdQb2xpY3kqIF9uYXJyb3coQ09SQkE6OkV4Y2VwdGlvbiogX2V4
KSB7IHJldHVybiBfZG93bmNhc3QoX2V4KTsgfSBpbmxpbmUgc2l6ZV90IF9OUF9hbGlnbmVkU2l6
ZShzaXplX3Qgb3MpIGNvbnN0IHsgcmV0dXJuIG9zOyB9IGlubGluZSB2b2lkIG9wZXJhdG9yPj49
KE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Qge30gaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oTWVt
QnVmZmVyZWRTdHJlYW0mKSBjb25zdCB7fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShOZXRCdWZm
ZXJlZFN0cmVhbSYpIHt9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KE1lbUJ1ZmZlcmVkU3RyZWFt
Jikge30gc3RhdGljIGluc2VydEV4Y2VwdGlvblRvQW55IGluc2VydFRvQW55Rm47IHN0YXRpYyBp
bnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZuTkNQOyBzdGF0aWMgY29uc3QgY2hh
ciogX1BEX3JlcG9JZDsgcHJpdmF0ZTogdmlydHVhbCBDT1JCQTo6RXhjZXB0aW9uKiBfTlBfZHVw
bGljYXRlKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX05QX3R5cGVJZCgpIGNvbnN0OyB2
aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF9yZXBvSWQoaW50KiBzaXplKSBjb25zdDsgdmlydHVhbCB2
b2lkIF9OUF9tYXJzaGFsKE5ldEJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7IHZpcnR1YWwgdm9pZCBf
TlBfbWFyc2hhbChNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0OyB9OwoKICAgIGNsYXNzIEludmFs
aWRQb2xpY3kgOiBwdWJsaWMgQ09SQkE6OlVzZXJFeGNlcHRpb24gewogICAgcHVibGljOgogICAg
ICBDT1JCQTo6VVNob3J0IGluZGV4OwoKICAgICAgaW5saW5lIEludmFsaWRQb2xpY3koKSB7CiAg
ICAgICAgcGRfaW5zZXJ0VG9BbnlGbiA9IGluc2VydFRvQW55Rm47CiAgICAgICAgcGRfaW5zZXJ0
VG9BbnlGbk5DUCA9IGluc2VydFRvQW55Rm5OQ1A7CiAgICAgIH0KICAgICAgSW52YWxpZFBvbGlj
eShjb25zdCBJbnZhbGlkUG9saWN5Jik7CiAgICAgIEludmFsaWRQb2xpY3koQ09SQkE6OlVTaG9y
dCBpX2luZGV4KTsKICAgICAgSW52YWxpZFBvbGljeSYgb3BlcmF0b3I9KGNvbnN0IEludmFsaWRQ
b2xpY3kmKTsKICAgICAgdmlydHVhbCB+SW52YWxpZFBvbGljeSgpOwogICAgICB2aXJ0dWFsIHZv
aWQgX3JhaXNlKCk7CiAgICAgIHN0YXRpYyBJbnZhbGlkUG9saWN5KiBfZG93bmNhc3QoQ09SQkE6
OkV4Y2VwdGlvbiopOwogICAgICBzdGF0aWMgY29uc3QgSW52YWxpZFBvbGljeSogX2Rvd25jYXN0
KGNvbnN0IENPUkJBOjpFeGNlcHRpb24qKTsKICAgICAgc3RhdGljIGlubGluZSBJbnZhbGlkUG9s
aWN5KiBfbmFycm93KENPUkJBOjpFeGNlcHRpb24qIGUpIHsKICAgICAgICByZXR1cm4gX2Rvd25j
YXN0KGUpOwogICAgICB9CgogICAgICBzaXplX3QgX05QX2FsaWduZWRTaXplKHNpemVfdCkgY29u
c3Q7CiAgICAgIHZvaWQgb3BlcmF0b3I+Pj0oTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdDsKICAg
ICAgdm9pZCBvcGVyYXRvcj4+PShNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0OwogICAgICB2b2lk
IG9wZXJhdG9yPDw9KE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgICAgIHZvaWQgb3BlcmF0b3I8PD0o
TWVtQnVmZmVyZWRTdHJlYW0mKTsKCiAgICAgIHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueSBp
bnNlcnRUb0FueUZuOwogICAgICBzdGF0aWMgaW5zZXJ0RXhjZXB0aW9uVG9BbnlOQ1AgaW5zZXJ0
VG9BbnlGbk5DUDsKCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOwoKICAgIHBy
aXZhdGU6CiAgICAgIHZpcnR1YWwgQ09SQkE6OkV4Y2VwdGlvbiogX05QX2R1cGxpY2F0ZSgpIGNv
bnN0OwogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9OUF90eXBlSWQoKSBjb25zdDsKICAgICAg
dmlydHVhbCBjb25zdCBjaGFyKiBfTlBfcmVwb0lkKGludCopIGNvbnN0OwogICAgICB2aXJ0dWFs
IHZvaWQgX05QX21hcnNoYWwoTmV0QnVmZmVyZWRTdHJlYW0mKSBjb25zdDsKICAgICAgdmlydHVh
bCB2b2lkIF9OUF9tYXJzaGFsKE1lbUJ1ZmZlcmVkU3RyZWFtJikgY29uc3Q7CiAgICB9OwoKCgog
ICAgdmlydHVhbCBQT0FfcHRyIGNyZWF0ZV9QT0EoY29uc3QgY2hhciogYWRhcHRlcl9uYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE9BTWFuYWdlcl9wdHIgYV9QT0FNYW5hZ2Vy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ09SQkE6OlBvbGljeUxpc3Qm
IHBvbGljaWVzKSA9IDA7CgogICAgdmlydHVhbCBQT0FfcHRyIGZpbmRfUE9BKGNvbnN0IGNoYXIq
IGFkYXB0ZXJfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVh
biBhY3RpdmF0ZV9pdCkgPSAwOwoKICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KENPUkJBOjpCb29s
ZWFuIGV0aGVyZWFsaXplX29iamVjdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6
Qm9vbGVhbiB3YWl0X2Zvcl9jb21wbGV0aW9uKSA9IDA7CgoKCiAgICB2aXJ0dWFsIFRocmVhZFBv
bGljeV9wdHIKICAgICAgY3JlYXRlX3RocmVhZF9wb2xpY3koVGhyZWFkUG9saWN5VmFsdWUgdik7
CiAgICB2aXJ0dWFsIExpZmVzcGFuUG9saWN5X3B0cgogICAgICBjcmVhdGVfbGlmZXNwYW5fcG9s
aWN5KExpZmVzcGFuUG9saWN5VmFsdWUgdik7CiAgICB2aXJ0dWFsIElkVW5pcXVlbmVzc1BvbGlj
eV9wdHIKICAgICAgY3JlYXRlX2lkX3VuaXF1ZW5lc3NfcG9saWN5KElkVW5pcXVlbmVzc1BvbGlj
eVZhbHVlIHYpOwogICAgdmlydHVhbCBJZEFzc2lnbm1lbnRQb2xpY3lfcHRyCiAgICAgIGNyZWF0
ZV9pZF9hc3NpZ25tZW50X3BvbGljeShJZEFzc2lnbm1lbnRQb2xpY3lWYWx1ZSB2KTsKICAgIHZp
cnR1YWwgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3B0cgogICAgICBjcmVhdGVfaW1wbGljaXRf
YWN0aXZhdGlvbl9wb2xpY3koSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5VmFsdWUgdik7CiAgICB2
aXJ0dWFsIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfcHRyCiAgICAgIGNyZWF0ZV9zZXJ2YW50X3Jl
dGVudGlvbl9wb2xpY3koU2VydmFudFJldGVudGlvblBvbGljeVZhbHVlIHYpOwogICAgdmlydHVh
bCBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIKICAgICAgY3JlYXRlX3JlcXVlc3RfcHJvY2Vz
c2luZ19wb2xpY3koUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lWYWx1ZSB2KTsKCgoKICAgIHZpcnR1
YWwgY2hhciogdGhlX25hbWUoKSA9IDA7CiAgICB2aXJ0dWFsIFBPQV9wdHIgdGhlX3BhcmVudCgp
ID0gMDsKICAgIHZpcnR1YWwgUE9BTGlzdCogdGhlX2NoaWxkcmVuKCkgPSAwOwogICAgdmlydHVh
bCBQT0FNYW5hZ2VyX3B0ciB0aGVfUE9BTWFuYWdlcigpID0gMDsKICAgIHZpcnR1YWwgX29ianJl
Zl9BZGFwdGVyQWN0aXZhdG9yKiB0aGVfYWN0aXZhdG9yKCkgPSAwOwogICAgdmlydHVhbCB2b2lk
IHRoZV9hY3RpdmF0b3IoX29ianJlZl9BZGFwdGVyQWN0aXZhdG9yKiBhYSkgPSAwOwoKCgogICAg
dmlydHVhbCBfb2JqcmVmX1NlcnZhbnRNYW5hZ2VyKiBnZXRfc2VydmFudF9tYW5hZ2VyKCkgPSAw
OwogICAgdmlydHVhbCB2b2lkIHNldF9zZXJ2YW50X21hbmFnZXIoX29ianJlZl9TZXJ2YW50TWFu
YWdlciogaW1ncikgPSAwOwoKCgogICAgdmlydHVhbCBTZXJ2YW50IGdldF9zZXJ2YW50KCkgPSAw
OwogICAgdmlydHVhbCB2b2lkIHNldF9zZXJ2YW50KFNlcnZhbnQgcF9zZXJ2YW50KSA9IDA7CgoK
CiAgICB2aXJ0dWFsIE9iamVjdElkKiBhY3RpdmF0ZV9vYmplY3QoU2VydmFudCBwX3NlcnZhbnQp
ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBhY3RpdmF0ZV9vYmplY3Rfd2l0aF9pZChjb25zdCBPYmpl
Y3RJZCYgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmFu
dCBwX3NlcnZhbnQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkZWFjdGl2YXRlX29iamVjdChjb25z
dCBPYmplY3RJZCYgb2lkKSA9IDA7CgoKCiAgICB2aXJ0dWFsIENPUkJBOjpPYmplY3RfcHRyIGNy
ZWF0ZV9yZWZlcmVuY2UoY29uc3QgY2hhciogaW50ZikgPSAwOwogICAgdmlydHVhbCBDT1JCQTo6
T2JqZWN0X3B0ciBjcmVhdGVfcmVmZXJlbmNlX3dpdGhfaWQoY29uc3QgT2JqZWN0SWQmIG9pZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiBpbnRmKSA9IDA7CgoKCiAgICB2aXJ0dWFsIE9iamVjdElkKiBzZXJ2YW50X3RvX2lkKFNlcnZh
bnQgcF9zZXJ2YW50KSA9IDA7CiAgICB2aXJ0dWFsIENPUkJBOjpPYmplY3RfcHRyIHNlcnZhbnRf
dG9fcmVmZXJlbmNlKFNlcnZhbnQgcF9zZXJ2YW50KSA9IDA7CiAgICB2aXJ0dWFsIFNlcnZhbnQg
cmVmZXJlbmNlX3RvX3NlcnZhbnQoQ09SQkE6Ok9iamVjdF9wdHIgcmVmZXJlbmNlKSA9IDA7CiAg
ICB2aXJ0dWFsIE9iamVjdElkKiByZWZlcmVuY2VfdG9faWQoQ09SQkE6Ok9iamVjdF9wdHIgcmVm
ZXJlbmNlKSA9IDA7CiAgICB2aXJ0dWFsIFNlcnZhbnQgaWRfdG9fc2VydmFudChjb25zdCBPYmpl
Y3RJZCYgb2lkKSA9IDA7CiAgICB2aXJ0dWFsIENPUkJBOjpPYmplY3RfcHRyIGlkX3RvX3JlZmVy
ZW5jZShjb25zdCBPYmplY3RJZCYgb2lkKSA9IDA7CgoKCgoKICAgIHN0YXRpYyBQT0FfcHRyIF9k
dXBsaWNhdGUoUE9BX3B0cik7CiAgICBzdGF0aWMgUE9BX3B0ciBfbmFycm93KENPUkJBOjpPYmpl
Y3RfcHRyKTsKICAgIHN0YXRpYyBQT0FfcHRyIF9uaWwoKTsKCgogICAgc3RhdGljIGNvbnN0IGNo
YXIqIF9QRF9yZXBvSWQ7CiAgICBzdGF0aWMgUE9BX3B0ciBfdGhlX3Jvb3RfcG9hKCk7CgogIHBy
b3RlY3RlZDoKICAgIGlubGluZSBQT0EoaW50IG5pbCkgeyBfUFJfc2V0b2JqKChvbW5pT2JqUmVm
KikgKG5pbCA/IDA6MSkpOyB9CiAgICB2aXJ0dWFsIH5QT0EoKTsKCiAgcHJpdmF0ZToKICAgIFBP
QShjb25zdCBQT0EmKTsKICAgIFBPQSYgb3BlcmF0b3I9KGNvbnN0IFBPQSYpOwogIH07CgogIHR5
cGVkZWYgUE9BOjpfdmFyX3R5cGUgUE9BX3ZhcjsKICB0eXBlZGVmIF9DT1JCQV9Qc2V1ZG9PYmpf
TWVtYmVyPFBPQSwgUE9BX3Zhcj4gUE9BX21lbWJlcjsKIyA2MTkgIi4uLy4uLy4uLy4uL2luY2x1
ZGUvb21uaU9SQjMvcG9hLmgiCiAgY2xhc3MgU2VydmFudEJhc2UgOiBwdWJsaWMgdmlydHVhbCBv
bW5pU2VydmFudCB7CiAgcHVibGljOgogICAgdmlydHVhbCB+U2VydmFudEJhc2UoKTsKCiAgICB2
aXJ0dWFsIFBPQV9wdHIgX2RlZmF1bHRfUE9BKCk7CgoKCgogICAgdmlydHVhbCBDT1JCQTo6X29i
anJlZl9JbnRlcmZhY2VEZWYqIF9nZXRfaW50ZXJmYWNlKCk7CiMgNjQxICIuLi8uLi8uLi8uLi9p
bmNsdWRlL29tbmlPUkIzL3BvYS5oIgogICAgdmlydHVhbCB2b2lkIF9hZGRfcmVmKCk7CiAgICB2
aXJ0dWFsIHZvaWQgX3JlbW92ZV9yZWYoKTsKCiAgcHJvdGVjdGVkOgogICAgaW5saW5lIFNlcnZh
bnRCYXNlKCkge30KICAgIGlubGluZSBTZXJ2YW50QmFzZShjb25zdCBTZXJ2YW50QmFzZSYpIHt9
CiAgICBpbmxpbmUgU2VydmFudEJhc2UmIG9wZXJhdG9yID0gKGNvbnN0IFNlcnZhbnRCYXNlJikg
eyByZXR1cm4gKnRoaXM7IH0KCiAgICB2b2lkKiBfZG9fdGhpcyhjb25zdCBjaGFyKiByZXBvSWQp
OwoKICBwcml2YXRlOgogICAgdmlydHVhbCBvbW5pT2JqUmVmKiBfZG9fZ2V0X2ludGVyZmFjZSgp
OwogICAgdmlydHVhbCB2b2lkKiBfZG93bmNhc3QoKTsKCiAgfTsKCgoKCgogIGNsYXNzIFJlZkNv
dW50U2VydmFudEJhc2UgOiBwdWJsaWMgdmlydHVhbCBTZXJ2YW50QmFzZSB7CiAgcHVibGljOgog
ICAgdmlydHVhbCB+UmVmQ291bnRTZXJ2YW50QmFzZSgpOwoKICAgIHZpcnR1YWwgdm9pZCBfYWRk
X3JlZigpOwogICAgdmlydHVhbCB2b2lkIF9yZW1vdmVfcmVmKCk7CgogIHByb3RlY3RlZDoKICAg
IGlubGluZSBSZWZDb3VudFNlcnZhbnRCYXNlKCkgOiBwZF9yZWZDb3VudCgxKSB7fQogICAgaW5s
aW5lIFJlZkNvdW50U2VydmFudEJhc2UoY29uc3QgUmVmQ291bnRTZXJ2YW50QmFzZSYpIDogcGRf
cmVmQ291bnQoMSkge30KICAgIGlubGluZSBSZWZDb3VudFNlcnZhbnRCYXNlJiBvcGVyYXRvciA9
IChjb25zdCBSZWZDb3VudFNlcnZhbnRCYXNlJikKICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAg
cHJpdmF0ZToKICAgIGludCBwZF9yZWZDb3VudDsKICB9OwoKCgoKCiAgY2xhc3MgU2VydmFudEJh
c2VfdmFyIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIFNlcnZhbnRCYXNlKiBUX3B0cjsKICAgIHR5
cGVkZWYgU2VydmFudEJhc2VfdmFyIFRfdmFyOwoKICAgIGlubGluZSBTZXJ2YW50QmFzZV92YXIo
KSA6IHBkX2RhdGEoMCkge30KICAgIGlubGluZSBTZXJ2YW50QmFzZV92YXIoVF9wdHIgcCkgOiBw
ZF9kYXRhKHApIHt9CiAgICBpbmxpbmUgU2VydmFudEJhc2VfdmFyKGNvbnN0IFRfdmFyJiB2KSA6
IHBkX2RhdGEodi5wZF9kYXRhKQogICAgICB7IGlmKCBwZF9kYXRhICkgcGRfZGF0YS0+X2FkZF9y
ZWYoKTsgfQoKICAgIGlubGluZSB+U2VydmFudEJhc2VfdmFyKCkgeyBpZiggcGRfZGF0YSApIHBk
X2RhdGEtPl9yZW1vdmVfcmVmKCk7IH0KCiAgICBpbmxpbmUgVF92YXImIG9wZXJhdG9yID0gKFRf
cHRyIHApIHsKICAgICAgaWYoIHBkX2RhdGEgKSBwZF9kYXRhLT5fcmVtb3ZlX3JlZigpOwogICAg
ICBwZF9kYXRhID0gcDsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQogICAgaW5saW5lIFRfdmFy
JiBvcGVyYXRvciA9IChUX3ZhciB2KSB7CiAgICAgIGlmKCBwZF9kYXRhICkgcGRfZGF0YS0+X3Jl
bW92ZV9yZWYoKTsKICAgICAgaWYoIChwZF9kYXRhID0gdi5wZF9kYXRhKSApIHBkX2RhdGEtPl9h
ZGRfcmVmKCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBpbmxpbmUgb3BlcmF0b3Ig
VF9wdHIgKCkgY29uc3QgeyByZXR1cm4gcGRfZGF0YTsgfQogICAgaW5saW5lIFRfcHRyIG9wZXJh
dG9yIC0+ICgpIGNvbnN0IHsgcmV0dXJuIHBkX2RhdGE7IH0KCiAgICBpbmxpbmUgVF9wdHIgaW4o
KSBjb25zdCB7IHJldHVybiBwZF9kYXRhOyB9CiAgICBpbmxpbmUgVF9wdHImIGlub3V0KCkgeyBy
ZXR1cm4gcGRfZGF0YTsgfQogICAgaW5saW5lIFRfcHRyJiBvdXQoKSB7CiAgICAgIGlmKCBwZF9k
YXRhICkgeyBwZF9kYXRhLT5fcmVtb3ZlX3JlZigpOyBwZF9kYXRhID0gMDsgfQogICAgICByZXR1
cm4gcGRfZGF0YTsKICAgIH0KICAgIGlubGluZSBUX3B0ciBfcmV0bigpIHsgVF9wdHIgdG1wID0g
cGRfZGF0YTsgcGRfZGF0YSA9IDA7IHJldHVybiB0bXA7IH0KCiAgcHJpdmF0ZToKICAgIFRfcHRy
IHBkX2RhdGE7CiAgfTsKCgoKCgogIGNsYXNzIER5bmFtaWNJbXBsZW1lbnRhdGlvbiA6IHB1Ymxp
YyB2aXJ0dWFsIFNlcnZhbnRCYXNlIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIH5EeW5hbWljSW1w
bGVtZW50YXRpb24oKTsKCiAgICBDT1JCQTo6T2JqZWN0X3B0ciBfdGhpcygpOwoKICAgIHZpcnR1
YWwgdm9pZCBpbnZva2UoQ09SQkE6OlNlcnZlclJlcXVlc3RfcHRyIHJlcXVlc3QpID0gMDsKICAg
IHZpcnR1YWwgY2hhciogX3ByaW1hcnlfaW50ZXJmYWNlKGNvbnN0IE9iamVjdElkJiBvaWQsIFBP
QV9wdHIgcG9hKSA9IDA7CgoKICAgIHZpcnR1YWwgQ09SQkE6OkJvb2xlYW4gX2lzX2EoY29uc3Qg
Y2hhciogbG9naWNhbF90eXBlX2lkKTsKCgoKCiAgICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIF9k
aXNwYXRjaChHSU9QX1MmKTsKCgoKICBwcml2YXRlOgogICAgdmlydHVhbCBvbW5pT2JqUmVmKiBf
ZG9fZ2V0X2ludGVyZmFjZSgpOwogIH07CgoKCgoKICAgICAgICAgICAgICAgICAgIGNoYXIqIE9i
amVjdElkX3RvX3N0cmluZyhjb25zdCBPYmplY3RJZCYgaWQpOwogICAgICAgICAgICAgICAgICAg
T2JqZWN0SWQqIHN0cmluZ190b19PYmplY3RJZChjb25zdCBjaGFyKiBzKTsKCgojIDEgIi4uLy4u
Ly4uLy4uL2luY2x1ZGUvb21uaU9SQjMvcG9hX2RlZnMuaCIgMQojIDYyICIuLi8uLi8uLi8uLi9p
bmNsdWRlL29tbmlPUkIzL3BvYV9kZWZzLmgiCmNsYXNzIEZvcndhcmRSZXF1ZXN0IDogcHVibGlj
IENPUkJBOjpVc2VyRXhjZXB0aW9uIHsKcHVibGljOgogIENPUkJBOjpPYmplY3RfTWVtYmVyIGZv
cndhcmRfcmVmZXJlbmNlOwoKICBpbmxpbmUgRm9yd2FyZFJlcXVlc3QoKSB7CiAgICBwZF9pbnNl
cnRUb0FueUZuID0gaW5zZXJ0VG9BbnlGbjsKICAgIHBkX2luc2VydFRvQW55Rm5OQ1AgPSBpbnNl
cnRUb0FueUZuTkNQOwogIH0KICBGb3J3YXJkUmVxdWVzdChjb25zdCBGb3J3YXJkUmVxdWVzdCYp
OwogIEZvcndhcmRSZXF1ZXN0KENPUkJBOjpPYmplY3RfcHRyIGlfZm9yd2FyZF9yZWZlcmVuY2Up
OwogIEZvcndhcmRSZXF1ZXN0JiBvcGVyYXRvcj0oY29uc3QgRm9yd2FyZFJlcXVlc3QmKTsKICB2
aXJ0dWFsIH5Gb3J3YXJkUmVxdWVzdCgpOwogIHZpcnR1YWwgdm9pZCBfcmFpc2UoKTsKICBzdGF0
aWMgRm9yd2FyZFJlcXVlc3QqIF9kb3duY2FzdChDT1JCQTo6RXhjZXB0aW9uKik7CiAgc3RhdGlj
IGNvbnN0IEZvcndhcmRSZXF1ZXN0KiBfZG93bmNhc3QoY29uc3QgQ09SQkE6OkV4Y2VwdGlvbiop
OwogIHN0YXRpYyBpbmxpbmUgRm9yd2FyZFJlcXVlc3QqIF9uYXJyb3coQ09SQkE6OkV4Y2VwdGlv
biogZSkgewogICAgcmV0dXJuIF9kb3duY2FzdChlKTsKICB9CgogIHNpemVfdCBfTlBfYWxpZ25l
ZFNpemUoc2l6ZV90KSBjb25zdDsKICB2b2lkIG9wZXJhdG9yPj49KE5ldEJ1ZmZlcmVkU3RyZWFt
JikgY29uc3Q7CiAgdm9pZCBvcGVyYXRvcj4+PShNZW1CdWZmZXJlZFN0cmVhbSYpIGNvbnN0Owog
IHZvaWQgb3BlcmF0b3I8PD0oTmV0QnVmZmVyZWRTdHJlYW0mKTsKICB2b2lkIG9wZXJhdG9yPDw9
KE1lbUJ1ZmZlcmVkU3RyZWFtJik7CgogIHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueSBpbnNl
cnRUb0FueUZuOwogIHN0YXRpYyBpbnNlcnRFeGNlcHRpb25Ub0FueU5DUCBpbnNlcnRUb0FueUZu
TkNQOwoKICBzdGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsKCnByaXZhdGU6CiAgdmlydHVh
bCBDT1JCQTo6RXhjZXB0aW9uKiBfTlBfZHVwbGljYXRlKCkgY29uc3Q7CiAgdmlydHVhbCBjb25z
dCBjaGFyKiBfTlBfdHlwZUlkKCkgY29uc3Q7CiAgdmlydHVhbCBjb25zdCBjaGFyKiBfTlBfcmVw
b0lkKGludCopIGNvbnN0OwogIHZpcnR1YWwgdm9pZCBfTlBfbWFyc2hhbChOZXRCdWZmZXJlZFN0
cmVhbSYpIGNvbnN0OwogIHZpcnR1YWwgdm9pZCBfTlBfbWFyc2hhbChNZW1CdWZmZXJlZFN0cmVh
bSYpIGNvbnN0Owp9OwoKCmV4dGVybiBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Gb3J3
YXJkUmVxdWVzdDsKIyAxMTAgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvcG9hX2RlZnMu
aCIKY2xhc3MgX29ianJlZl9BZGFwdGVyQWN0aXZhdG9yOwp0eXBlZGVmIF9vYmpyZWZfQWRhcHRl
ckFjdGl2YXRvciogQWRhcHRlckFjdGl2YXRvcl9wdHI7CnR5cGVkZWYgQWRhcHRlckFjdGl2YXRv
cl9wdHIgQWRhcHRlckFjdGl2YXRvclJlZjsKCmNsYXNzIEFkYXB0ZXJBY3RpdmF0b3JfSGVscGVy
IHsKcHVibGljOgogIHR5cGVkZWYgQWRhcHRlckFjdGl2YXRvcl9wdHIgX3B0cl90eXBlOwoKICBz
dGF0aWMgX3B0cl90eXBlIF9uaWwoKTsKICBzdGF0aWMgX0NPUkJBX0Jvb2xlYW4gaXNfbmlsKF9w
dHJfdHlwZSk7CiAgc3RhdGljIHZvaWQgcmVsZWFzZShfcHRyX3R5cGUpOwogIHN0YXRpYyB2b2lk
IGR1cGxpY2F0ZShfcHRyX3R5cGUpOwogIHN0YXRpYyBzaXplX3QgTlBfYWxpZ25lZFNpemUoX3B0
cl90eXBlLCBzaXplX3QpOwogIHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBO
ZXRCdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyBfcHRyX3R5cGUgdW5tYXJzaGFsT2JqUmVmKE5l
dEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIHZvaWQgbWFyc2hhbE9ialJlZihfcHRyX3R5cGUs
IE1lbUJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYo
TWVtQnVmZmVyZWRTdHJlYW0mKTsKfTsKCnR5cGVkZWYgX0NPUkJBX09ialJlZl9WYXI8X29ianJl
Zl9BZGFwdGVyQWN0aXZhdG9yLCBBZGFwdGVyQWN0aXZhdG9yX0hlbHBlcj4gQWRhcHRlckFjdGl2
YXRvcl92YXI7CnR5cGVkZWYgX0NPUkJBX09ialJlZl9PVVRfYXJnPF9vYmpyZWZfQWRhcHRlckFj
dGl2YXRvcixBZGFwdGVyQWN0aXZhdG9yX0hlbHBlciA+IEFkYXB0ZXJBY3RpdmF0b3Jfb3V0OwoK
CgoKY2xhc3MgQWRhcHRlckFjdGl2YXRvciB7CnB1YmxpYzoKCiAgdHlwZWRlZiBBZGFwdGVyQWN0
aXZhdG9yX3B0ciBfcHRyX3R5cGU7CiAgdHlwZWRlZiBBZGFwdGVyQWN0aXZhdG9yX3ZhciBfdmFy
X3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5cGUgX2R1cGxpY2F0ZShfcHRyX3R5cGUpOwogIHN0YXRp
YyBfcHRyX3R5cGUgX25hcnJvdyhDT1JCQTo6T2JqZWN0X3B0cik7CiAgc3RhdGljIF9wdHJfdHlw
ZSBfbmlsKCk7CgogIHN0YXRpYyBpbmxpbmUgc2l6ZV90IF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUs
IHNpemVfdCk7CiAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwg
TmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgaW5saW5lIHZvaWQgX21hcnNoYWxPYmpSZWYo
X3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwoKICBzdGF0aWMgaW5saW5lIF9wdHJfdHlw
ZSBfdW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBDT1JCQTo6T2Jq
ZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMpOwogICAg
X3B0cl90eXBlIHJlc3VsdCA9IF9uYXJyb3cob2JqKTsKICAgIENPUkJBOjpyZWxlYXNlKG9iaik7
CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3VubWFy
c2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgQ09SQkE6Ok9iamVjdF9wdHIg
b2JqID0gQ09SQkE6OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBzKTsKICAgIF9wdHJfdHlw
ZSByZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAgcmV0
dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOwoKCgp9OwoK
CmNsYXNzIF9vYmpyZWZfQWRhcHRlckFjdGl2YXRvciA6CiAgcHVibGljIHZpcnR1YWwgQ09SQkE6
Ok9iamVjdCwgcHVibGljIHZpcnR1YWwgb21uaU9ialJlZgp7CnB1YmxpYzoKICBDT1JCQTo6Qm9v
bGVhbiB1bmtub3duX2FkYXB0ZXIoUE9BX3B0ciBwYXJlbnQsIGNvbnN0IGNoYXIqIG5hbWUpOwoK
ICBpbmxpbmUgX29ianJlZl9BZGFwdGVyQWN0aXZhdG9yKCkgeyBfUFJfc2V0b2JqKDApOyB9CiAg
X29ianJlZl9BZGFwdGVyQWN0aXZhdG9yKGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVM
aXN0Kiwgb21uaUlkZW50aXR5Kiwgb21uaUxvY2FsSWRlbnRpdHkqKTsKCnByb3RlY3RlZDoKICB2
aXJ0dWFsIH5fb2JqcmVmX0FkYXB0ZXJBY3RpdmF0b3IoKTsKCnByaXZhdGU6CiAgdmlydHVhbCB2
b2lkKiBfcHRyVG9PYmpSZWYoY29uc3QgY2hhciopOwoKICBfb2JqcmVmX0FkYXB0ZXJBY3RpdmF0
b3IoY29uc3QgX29ianJlZl9BZGFwdGVyQWN0aXZhdG9yJik7CiAgX29ianJlZl9BZGFwdGVyQWN0
aXZhdG9yJiBvcGVyYXRvciA9IChjb25zdCBfb2JqcmVmX0FkYXB0ZXJBY3RpdmF0b3ImKTsKCn07
CgoKY2xhc3MgX3BvZl9BZGFwdGVyQWN0aXZhdG9yIDogcHVibGljIHByb3h5T2JqZWN0RmFjdG9y
eSB7CnB1YmxpYzoKICBpbmxpbmUgX3BvZl9BZGFwdGVyQWN0aXZhdG9yKCkgOiBwcm94eU9iamVj
dEZhY3RvcnkoQWRhcHRlckFjdGl2YXRvcjo6X1BEX3JlcG9JZCkge30KICB2aXJ0dWFsIH5fcG9m
X0FkYXB0ZXJBY3RpdmF0b3IoKTsKCiAgdmlydHVhbCBvbW5pT2JqUmVmKiBuZXdPYmpSZWYoY29u
c3QgY2hhciosIElPUDo6VGFnZ2VkUHJvZmlsZUxpc3QqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9tbmlJZGVudGl0eSosIG9tbmlMb2NhbElkZW50aXR5Kik7CiAgdmlydHVhbCBf
Q09SQkFfQm9vbGVhbiBpc19hKGNvbnN0IGNoYXIqKSBjb25zdDsKfTsKCgpjbGFzcyBfaW1wbF9B
ZGFwdGVyQWN0aXZhdG9yIDoKICBwdWJsaWMgdmlydHVhbCBvbW5pU2VydmFudAp7CnB1YmxpYzoK
ICB2aXJ0dWFsIH5faW1wbF9BZGFwdGVyQWN0aXZhdG9yKCk7CgogIHZpcnR1YWwgQ09SQkE6OkJv
b2xlYW4gdW5rbm93bl9hZGFwdGVyKFBPQV9wdHIgcGFyZW50LCBjb25zdCBjaGFyKiBuYW1lKSA9
IDA7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBfZGlzcGF0Y2goR0lPUF9T
Jik7Cgpwcml2YXRlOgogIHZpcnR1YWwgdm9pZCogX3B0clRvSW50ZXJmYWNlKGNvbnN0IGNoYXIq
KTsKICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9tb3N0RGVyaXZlZFJlcG9JZCgpOwp9OwoKCmV4dGVy
biBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19BZGFwdGVyQWN0aXZhdG9yOwojIDIyOCAi
Li4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9wb2FfZGVmcy5oIgpjbGFzcyBfb2JqcmVmX1Nl
cnZhbnRNYW5hZ2VyOwp0eXBlZGVmIF9vYmpyZWZfU2VydmFudE1hbmFnZXIqIFNlcnZhbnRNYW5h
Z2VyX3B0cjsKdHlwZWRlZiBTZXJ2YW50TWFuYWdlcl9wdHIgU2VydmFudE1hbmFnZXJSZWY7Cgpj
bGFzcyBTZXJ2YW50TWFuYWdlcl9IZWxwZXIgewpwdWJsaWM6CiAgdHlwZWRlZiBTZXJ2YW50TWFu
YWdlcl9wdHIgX3B0cl90eXBlOwoKICBzdGF0aWMgX3B0cl90eXBlIF9uaWwoKTsKICBzdGF0aWMg
X0NPUkJBX0Jvb2xlYW4gaXNfbmlsKF9wdHJfdHlwZSk7CiAgc3RhdGljIHZvaWQgcmVsZWFzZShf
cHRyX3R5cGUpOwogIHN0YXRpYyB2b2lkIGR1cGxpY2F0ZShfcHRyX3R5cGUpOwogIHN0YXRpYyBz
aXplX3QgTlBfYWxpZ25lZFNpemUoX3B0cl90eXBlLCBzaXplX3QpOwogIHN0YXRpYyB2b2lkIG1h
cnNoYWxPYmpSZWYoX3B0cl90eXBlLCBOZXRCdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyBfcHRy
X3R5cGUgdW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIHZvaWQg
bWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE1lbUJ1ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIF9w
dHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTWVtQnVmZmVyZWRTdHJlYW0mKTsKfTsKCnR5cGVkZWYg
X0NPUkJBX09ialJlZl9WYXI8X29ianJlZl9TZXJ2YW50TWFuYWdlciwgU2VydmFudE1hbmFnZXJf
SGVscGVyPiBTZXJ2YW50TWFuYWdlcl92YXI7CnR5cGVkZWYgX0NPUkJBX09ialJlZl9PVVRfYXJn
PF9vYmpyZWZfU2VydmFudE1hbmFnZXIsU2VydmFudE1hbmFnZXJfSGVscGVyID4gU2VydmFudE1h
bmFnZXJfb3V0OwoKCgoKY2xhc3MgU2VydmFudE1hbmFnZXIgewpwdWJsaWM6CgogIHR5cGVkZWYg
U2VydmFudE1hbmFnZXJfcHRyIF9wdHJfdHlwZTsKICB0eXBlZGVmIFNlcnZhbnRNYW5hZ2VyX3Zh
ciBfdmFyX3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5cGUgX2R1cGxpY2F0ZShfcHRyX3R5cGUpOwog
IHN0YXRpYyBfcHRyX3R5cGUgX25hcnJvdyhDT1JCQTo6T2JqZWN0X3B0cik7CiAgc3RhdGljIF9w
dHJfdHlwZSBfbmlsKCk7CgogIHN0YXRpYyBpbmxpbmUgc2l6ZV90IF9hbGlnbmVkU2l6ZShfcHRy
X3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJf
dHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgaW5saW5lIHZvaWQgX21hcnNoYWxP
YmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwoKICBzdGF0aWMgaW5saW5lIF9w
dHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgICBDT1JC
QTo6T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJzaGFsT2JqUmVmKF9QRF9yZXBvSWQsIHMp
OwogICAgX3B0cl90eXBlIHJlc3VsdCA9IF9uYXJyb3cob2JqKTsKICAgIENPUkJBOjpyZWxlYXNl
KG9iaik7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUg
X3VubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogICAgQ09SQkE6Ok9iamVj
dF9wdHIgb2JqID0gQ09SQkE6OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBzKTsKICAgIF9w
dHJfdHlwZSByZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICBDT1JCQTo6cmVsZWFzZShvYmopOwog
ICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBjb25zdCBjaGFyKiBfUERfcmVwb0lkOwoK
Cgp9OwoKCmNsYXNzIF9vYmpyZWZfU2VydmFudE1hbmFnZXIgOgogIHB1YmxpYyB2aXJ0dWFsIENP
UkJBOjpPYmplY3QsIHB1YmxpYyB2aXJ0dWFsIG9tbmlPYmpSZWYKewpwdWJsaWM6CgogIGlubGlu
ZSBfb2JqcmVmX1NlcnZhbnRNYW5hZ2VyKCkgeyBfUFJfc2V0b2JqKDApOyB9CiAgX29ianJlZl9T
ZXJ2YW50TWFuYWdlcihjb25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxlTGlzdCosIG9tbmlJ
ZGVudGl0eSosIG9tbmlMb2NhbElkZW50aXR5Kik7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCB+X29i
anJlZl9TZXJ2YW50TWFuYWdlcigpOwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9wdHJUb09i
alJlZihjb25zdCBjaGFyKik7CgogIF9vYmpyZWZfU2VydmFudE1hbmFnZXIoY29uc3QgX29ianJl
Zl9TZXJ2YW50TWFuYWdlciYpOwogIF9vYmpyZWZfU2VydmFudE1hbmFnZXImIG9wZXJhdG9yID0g
KGNvbnN0IF9vYmpyZWZfU2VydmFudE1hbmFnZXImKTsKCn07CgoKY2xhc3MgX3BvZl9TZXJ2YW50
TWFuYWdlciA6IHB1YmxpYyBwcm94eU9iamVjdEZhY3RvcnkgewpwdWJsaWM6CiAgaW5saW5lIF9w
b2ZfU2VydmFudE1hbmFnZXIoKSA6IHByb3h5T2JqZWN0RmFjdG9yeShTZXJ2YW50TWFuYWdlcjo6
X1BEX3JlcG9JZCkge30KICB2aXJ0dWFsIH5fcG9mX1NlcnZhbnRNYW5hZ2VyKCk7CgogIHZpcnR1
YWwgb21uaU9ialJlZiogbmV3T2JqUmVmKGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVM
aXN0KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbW5pSWRlbnRpdHkqLCBvbW5p
TG9jYWxJZGVudGl0eSopOwogIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gaXNfYShjb25zdCBjaGFy
KikgY29uc3Q7Cn07CgoKY2xhc3MgX2ltcGxfU2VydmFudE1hbmFnZXIgOgogIHB1YmxpYyB2aXJ0
dWFsIG9tbmlTZXJ2YW50CnsKcHVibGljOgogIHZpcnR1YWwgfl9pbXBsX1NlcnZhbnRNYW5hZ2Vy
KCk7CgoKcHJvdGVjdGVkOgogIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gX2Rpc3BhdGNoKEdJT1Bf
UyYpOwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9wdHJUb0ludGVyZmFjZShjb25zdCBjaGFy
Kik7CiAgdmlydHVhbCBjb25zdCBjaGFyKiBfbW9zdERlcml2ZWRSZXBvSWQoKTsKfTsKCgpleHRl
cm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfU2VydmFudE1hbmFnZXI7CiMgMzQ0ICIu
Li8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL3BvYV9kZWZzLmgiCmNsYXNzIF9vYmpyZWZfU2Vy
dmFudEFjdGl2YXRvcjsKdHlwZWRlZiBfb2JqcmVmX1NlcnZhbnRBY3RpdmF0b3IqIFNlcnZhbnRB
Y3RpdmF0b3JfcHRyOwp0eXBlZGVmIFNlcnZhbnRBY3RpdmF0b3JfcHRyIFNlcnZhbnRBY3RpdmF0
b3JSZWY7CgpjbGFzcyBTZXJ2YW50QWN0aXZhdG9yX0hlbHBlciB7CnB1YmxpYzoKICB0eXBlZGVm
IFNlcnZhbnRBY3RpdmF0b3JfcHRyIF9wdHJfdHlwZTsKCiAgc3RhdGljIF9wdHJfdHlwZSBfbmls
KCk7CiAgc3RhdGljIF9DT1JCQV9Cb29sZWFuIGlzX25pbChfcHRyX3R5cGUpOwogIHN0YXRpYyB2
b2lkIHJlbGVhc2UoX3B0cl90eXBlKTsKICBzdGF0aWMgdm9pZCBkdXBsaWNhdGUoX3B0cl90eXBl
KTsKICBzdGF0aWMgc2l6ZV90IE5QX2FsaWduZWRTaXplKF9wdHJfdHlwZSwgc2l6ZV90KTsKICBz
dGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsK
ICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihOZXRCdWZmZXJlZFN0cmVhbSYpOwog
IHN0YXRpYyB2b2lkIG1hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYp
OwogIHN0YXRpYyBfcHRyX3R5cGUgdW5tYXJzaGFsT2JqUmVmKE1lbUJ1ZmZlcmVkU3RyZWFtJik7
Cn07Cgp0eXBlZGVmIF9DT1JCQV9PYmpSZWZfVmFyPF9vYmpyZWZfU2VydmFudEFjdGl2YXRvciwg
U2VydmFudEFjdGl2YXRvcl9IZWxwZXI+IFNlcnZhbnRBY3RpdmF0b3JfdmFyOwp0eXBlZGVmIF9D
T1JCQV9PYmpSZWZfT1VUX2FyZzxfb2JqcmVmX1NlcnZhbnRBY3RpdmF0b3IsU2VydmFudEFjdGl2
YXRvcl9IZWxwZXIgPiBTZXJ2YW50QWN0aXZhdG9yX291dDsKCgoKCmNsYXNzIFNlcnZhbnRBY3Rp
dmF0b3IgewpwdWJsaWM6CgogIHR5cGVkZWYgU2VydmFudEFjdGl2YXRvcl9wdHIgX3B0cl90eXBl
OwogIHR5cGVkZWYgU2VydmFudEFjdGl2YXRvcl92YXIgX3Zhcl90eXBlOwoKICBzdGF0aWMgX3B0
cl90eXBlIF9kdXBsaWNhdGUoX3B0cl90eXBlKTsKICBzdGF0aWMgX3B0cl90eXBlIF9uYXJyb3co
Q09SQkE6Ok9iamVjdF9wdHIpOwogIHN0YXRpYyBfcHRyX3R5cGUgX25pbCgpOwoKICBzdGF0aWMg
aW5saW5lIHNpemVfdCBfYWxpZ25lZFNpemUoX3B0cl90eXBlLCBzaXplX3QpOwogIHN0YXRpYyBp
bmxpbmUgdm9pZCBfbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1ZmZlcmVkU3RyZWFtJik7
CiAgc3RhdGljIGlubGluZSB2b2lkIF9tYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVtQnVmZmVy
ZWRTdHJlYW0mKTsKCiAgc3RhdGljIGlubGluZSBfcHRyX3R5cGUgX3VubWFyc2hhbE9ialJlZihO
ZXRCdWZmZXJlZFN0cmVhbSYgcykgewogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqID0gQ09SQkE6
OlVuTWFyc2hhbE9ialJlZihfUERfcmVwb0lkLCBzKTsKICAgIF9wdHJfdHlwZSByZXN1bHQgPSBf
bmFycm93KG9iaik7CiAgICBDT1JCQTo6cmVsZWFzZShvYmopOwogICAgcmV0dXJuIHJlc3VsdDsK
ICB9CgogIHN0YXRpYyBpbmxpbmUgX3B0cl90eXBlIF91bm1hcnNoYWxPYmpSZWYoTWVtQnVmZmVy
ZWRTdHJlYW0mIHMpIHsKICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiA9IENPUkJBOjpVbk1hcnNo
YWxPYmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICBfcHRyX3R5cGUgcmVzdWx0ID0gX25hcnJvdyhv
YmopOwogICAgQ09SQkE6OnJlbGVhc2Uob2JqKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBz
dGF0aWMgY29uc3QgY2hhciogX1BEX3JlcG9JZDsKCgoKfTsKCgpjbGFzcyBfb2JqcmVmX1NlcnZh
bnRBY3RpdmF0b3IgOgogIHB1YmxpYyB2aXJ0dWFsIF9vYmpyZWZfU2VydmFudE1hbmFnZXIKewpw
dWJsaWM6CiAgU2VydmFudCBpbmNhcm5hdGUoY29uc3QgT2JqZWN0SWQmIG9pZCwgUE9BX3B0ciBh
ZGFwdGVyKTsKICB2b2lkIGV0aGVyZWFsaXplKGNvbnN0IE9iamVjdElkJiBvaWQsIFBPQV9wdHIg
YWRhcHRlciwgU2VydmFudCBzZXJ2LCBDT1JCQTo6Qm9vbGVhbiBjbGVhbnVwX2luX3Byb2dyZXNz
LCBDT1JCQTo6Qm9vbGVhbiByZW1haW5pbmdfYWN0aXZhdGlvbnMpOwoKICBpbmxpbmUgX29ianJl
Zl9TZXJ2YW50QWN0aXZhdG9yKCkgeyBfUFJfc2V0b2JqKDApOyB9CiAgX29ianJlZl9TZXJ2YW50
QWN0aXZhdG9yKGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0Kiwgb21uaUlkZW50
aXR5Kiwgb21uaUxvY2FsSWRlbnRpdHkqKTsKCnByb3RlY3RlZDoKICB2aXJ0dWFsIH5fb2JqcmVm
X1NlcnZhbnRBY3RpdmF0b3IoKTsKCnByaXZhdGU6CiAgdmlydHVhbCB2b2lkKiBfcHRyVG9PYmpS
ZWYoY29uc3QgY2hhciopOwoKICBfb2JqcmVmX1NlcnZhbnRBY3RpdmF0b3IoY29uc3QgX29ianJl
Zl9TZXJ2YW50QWN0aXZhdG9yJik7CiAgX29ianJlZl9TZXJ2YW50QWN0aXZhdG9yJiBvcGVyYXRv
ciA9IChjb25zdCBfb2JqcmVmX1NlcnZhbnRBY3RpdmF0b3ImKTsKCn07CgoKY2xhc3MgX3BvZl9T
ZXJ2YW50QWN0aXZhdG9yIDogcHVibGljIHByb3h5T2JqZWN0RmFjdG9yeSB7CnB1YmxpYzoKICBp
bmxpbmUgX3BvZl9TZXJ2YW50QWN0aXZhdG9yKCkgOiBwcm94eU9iamVjdEZhY3RvcnkoU2VydmFu
dEFjdGl2YXRvcjo6X1BEX3JlcG9JZCkge30KICB2aXJ0dWFsIH5fcG9mX1NlcnZhbnRBY3RpdmF0
b3IoKTsKCiAgdmlydHVhbCBvbW5pT2JqUmVmKiBuZXdPYmpSZWYoY29uc3QgY2hhciosIElPUDo6
VGFnZ2VkUHJvZmlsZUxpc3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9tbmlJ
ZGVudGl0eSosIG9tbmlMb2NhbElkZW50aXR5Kik7CiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBp
c19hKGNvbnN0IGNoYXIqKSBjb25zdDsKfTsKCgpjbGFzcyBfaW1wbF9TZXJ2YW50QWN0aXZhdG9y
IDoKICBwdWJsaWMgdmlydHVhbCBfaW1wbF9TZXJ2YW50TWFuYWdlcgp7CnB1YmxpYzoKICB2aXJ0
dWFsIH5faW1wbF9TZXJ2YW50QWN0aXZhdG9yKCk7CgogIHZpcnR1YWwgU2VydmFudCBpbmNhcm5h
dGUoY29uc3QgT2JqZWN0SWQmIG9pZCwgUE9BX3B0ciBhZGFwdGVyKSA9IDA7CiAgdmlydHVhbCB2
b2lkIGV0aGVyZWFsaXplKGNvbnN0IE9iamVjdElkJiBvaWQsIFBPQV9wdHIgYWRhcHRlciwgU2Vy
dmFudCBzZXJ2LCBDT1JCQTo6Qm9vbGVhbiBjbGVhbnVwX2luX3Byb2dyZXNzLCBDT1JCQTo6Qm9v
bGVhbiByZW1haW5pbmdfYWN0aXZhdGlvbnMpID0gMDsKCnByb3RlY3RlZDoKICB2aXJ0dWFsIF9D
T1JCQV9Cb29sZWFuIF9kaXNwYXRjaChHSU9QX1MmKTsKCnByaXZhdGU6CiAgdmlydHVhbCB2b2lk
KiBfcHRyVG9JbnRlcmZhY2UoY29uc3QgY2hhciopOwogIHZpcnR1YWwgY29uc3QgY2hhciogX21v
c3REZXJpdmVkUmVwb0lkKCk7Cn07CgoKZXh0ZXJuIGNvbnN0IENPUkJBOjpUeXBlQ29kZV9wdHIg
X3RjX1NlcnZhbnRBY3RpdmF0b3I7CiMgNDY0ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIz
L3BvYV9kZWZzLmgiCmNsYXNzIF9vYmpyZWZfU2VydmFudExvY2F0b3I7CnR5cGVkZWYgX29ianJl
Zl9TZXJ2YW50TG9jYXRvciogU2VydmFudExvY2F0b3JfcHRyOwp0eXBlZGVmIFNlcnZhbnRMb2Nh
dG9yX3B0ciBTZXJ2YW50TG9jYXRvclJlZjsKCmNsYXNzIFNlcnZhbnRMb2NhdG9yX0hlbHBlciB7
CnB1YmxpYzoKICB0eXBlZGVmIFNlcnZhbnRMb2NhdG9yX3B0ciBfcHRyX3R5cGU7CgogIHN0YXRp
YyBfcHRyX3R5cGUgX25pbCgpOwogIHN0YXRpYyBfQ09SQkFfQm9vbGVhbiBpc19uaWwoX3B0cl90
eXBlKTsKICBzdGF0aWMgdm9pZCByZWxlYXNlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHZvaWQgZHVw
bGljYXRlKF9wdHJfdHlwZSk7CiAgc3RhdGljIHNpemVfdCBOUF9hbGlnbmVkU2l6ZShfcHRyX3R5
cGUsIHNpemVfdCk7CiAgc3RhdGljIHZvaWQgbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE5ldEJ1
ZmZlcmVkU3RyZWFtJik7CiAgc3RhdGljIF9wdHJfdHlwZSB1bm1hcnNoYWxPYmpSZWYoTmV0QnVm
ZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgdm9pZCBtYXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTWVt
QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBlIHVubWFyc2hhbE9ialJlZihNZW1C
dWZmZXJlZFN0cmVhbSYpOwp9OwoKdHlwZWRlZiBfQ09SQkFfT2JqUmVmX1Zhcjxfb2JqcmVmX1Nl
cnZhbnRMb2NhdG9yLCBTZXJ2YW50TG9jYXRvcl9IZWxwZXI+IFNlcnZhbnRMb2NhdG9yX3ZhcjsK
dHlwZWRlZiBfQ09SQkFfT2JqUmVmX09VVF9hcmc8X29ianJlZl9TZXJ2YW50TG9jYXRvcixTZXJ2
YW50TG9jYXRvcl9IZWxwZXIgPiBTZXJ2YW50TG9jYXRvcl9vdXQ7CgoKCgpjbGFzcyBTZXJ2YW50
TG9jYXRvciB7CnB1YmxpYzoKCiAgdHlwZWRlZiBTZXJ2YW50TG9jYXRvcl9wdHIgX3B0cl90eXBl
OwogIHR5cGVkZWYgU2VydmFudExvY2F0b3JfdmFyIF92YXJfdHlwZTsKCiAgc3RhdGljIF9wdHJf
dHlwZSBfZHVwbGljYXRlKF9wdHJfdHlwZSk7CiAgc3RhdGljIF9wdHJfdHlwZSBfbmFycm93KENP
UkJBOjpPYmplY3RfcHRyKTsKICBzdGF0aWMgX3B0cl90eXBlIF9uaWwoKTsKCiAgc3RhdGljIGlu
bGluZSBzaXplX3QgX2FsaWduZWRTaXplKF9wdHJfdHlwZSwgc2l6ZV90KTsKICBzdGF0aWMgaW5s
aW5lIHZvaWQgX21hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBOZXRCdWZmZXJlZFN0cmVhbSYpOwog
IHN0YXRpYyBpbmxpbmUgdm9pZCBfbWFyc2hhbE9ialJlZihfcHRyX3R5cGUsIE1lbUJ1ZmZlcmVk
U3RyZWFtJik7CgogIHN0YXRpYyBpbmxpbmUgX3B0cl90eXBlIF91bm1hcnNoYWxPYmpSZWYoTmV0
QnVmZmVyZWRTdHJlYW0mIHMpIHsKICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiA9IENPUkJBOjpV
bk1hcnNoYWxPYmpSZWYoX1BEX3JlcG9JZCwgcyk7CiAgICBfcHRyX3R5cGUgcmVzdWx0ID0gX25h
cnJvdyhvYmopOwogICAgQ09SQkE6OnJlbGVhc2Uob2JqKTsKICAgIHJldHVybiByZXN1bHQ7CiAg
fQoKICBzdGF0aWMgaW5saW5lIF9wdHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVmKE1lbUJ1ZmZlcmVk
U3RyZWFtJiBzKSB7CiAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJzaGFs
T2JqUmVmKF9QRF9yZXBvSWQsIHMpOwogICAgX3B0cl90eXBlIHJlc3VsdCA9IF9uYXJyb3cob2Jq
KTsKICAgIENPUkJBOjpyZWxlYXNlKG9iaik7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3Rh
dGljIGNvbnN0IGNoYXIqIF9QRF9yZXBvSWQ7CgoKCiAgc3RhdGljIGNvbnN0IENPUkJBOjpUeXBl
Q29kZV9wdHIgX3RjX0Nvb2tpZTsKICB0eXBlZGVmIHZvaWQqIENvb2tpZTsKfTsKCgpjbGFzcyBf
b2JqcmVmX1NlcnZhbnRMb2NhdG9yIDoKICBwdWJsaWMgdmlydHVhbCBfb2JqcmVmX1NlcnZhbnRN
YW5hZ2VyCnsKcHVibGljOgogIFNlcnZhbnQgcHJlaW52b2tlKGNvbnN0IE9iamVjdElkJiBvaWQs
IFBPQV9wdHIgYWRhcHRlciwgY29uc3QgY2hhciogb3BlcmF0aW9uLCBTZXJ2YW50TG9jYXRvcjo6
Q29va2llJiB0aGVfY29va2llKTsKICB2b2lkIHBvc3RpbnZva2UoY29uc3QgT2JqZWN0SWQmIG9p
ZCwgUE9BX3B0ciBhZGFwdGVyLCBjb25zdCBjaGFyKiBvcGVyYXRpb24sIFNlcnZhbnRMb2NhdG9y
OjpDb29raWUgdGhlX2Nvb2tpZSwgU2VydmFudCB0aGVfc2VydmFudCk7CgogIGlubGluZSBfb2Jq
cmVmX1NlcnZhbnRMb2NhdG9yKCkgeyBfUFJfc2V0b2JqKDApOyB9CiAgX29ianJlZl9TZXJ2YW50
TG9jYXRvcihjb25zdCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxlTGlzdCosIG9tbmlJZGVudGl0
eSosIG9tbmlMb2NhbElkZW50aXR5Kik7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCB+X29ianJlZl9T
ZXJ2YW50TG9jYXRvcigpOwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9wdHJUb09ialJlZihj
b25zdCBjaGFyKik7CgogIF9vYmpyZWZfU2VydmFudExvY2F0b3IoY29uc3QgX29ianJlZl9TZXJ2
YW50TG9jYXRvciYpOwogIF9vYmpyZWZfU2VydmFudExvY2F0b3ImIG9wZXJhdG9yID0gKGNvbnN0
IF9vYmpyZWZfU2VydmFudExvY2F0b3ImKTsKCn07CgoKY2xhc3MgX3BvZl9TZXJ2YW50TG9jYXRv
ciA6IHB1YmxpYyBwcm94eU9iamVjdEZhY3RvcnkgewpwdWJsaWM6CiAgaW5saW5lIF9wb2ZfU2Vy
dmFudExvY2F0b3IoKSA6IHByb3h5T2JqZWN0RmFjdG9yeShTZXJ2YW50TG9jYXRvcjo6X1BEX3Jl
cG9JZCkge30KICB2aXJ0dWFsIH5fcG9mX1NlcnZhbnRMb2NhdG9yKCk7CgogIHZpcnR1YWwgb21u
aU9ialJlZiogbmV3T2JqUmVmKGNvbnN0IGNoYXIqLCBJT1A6OlRhZ2dlZFByb2ZpbGVMaXN0KiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbW5pSWRlbnRpdHkqLCBvbW5pTG9jYWxJ
ZGVudGl0eSopOwogIHZpcnR1YWwgX0NPUkJBX0Jvb2xlYW4gaXNfYShjb25zdCBjaGFyKikgY29u
c3Q7Cn07CgoKY2xhc3MgX2ltcGxfU2VydmFudExvY2F0b3IgOgogIHB1YmxpYyB2aXJ0dWFsIF9p
bXBsX1NlcnZhbnRNYW5hZ2VyCnsKcHVibGljOgogIHZpcnR1YWwgfl9pbXBsX1NlcnZhbnRMb2Nh
dG9yKCk7CgogIHZpcnR1YWwgU2VydmFudCBwcmVpbnZva2UoY29uc3QgT2JqZWN0SWQmIG9pZCwg
UE9BX3B0ciBhZGFwdGVyLCBjb25zdCBjaGFyKiBvcGVyYXRpb24sIFNlcnZhbnRMb2NhdG9yOjpD
b29raWUmIHRoZV9jb29raWUpID0gMDsKICB2aXJ0dWFsIHZvaWQgcG9zdGludm9rZShjb25zdCBP
YmplY3RJZCYgb2lkLCBQT0FfcHRyIGFkYXB0ZXIsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbiwgU2Vy
dmFudExvY2F0b3I6OkNvb2tpZSB0aGVfY29va2llLCBTZXJ2YW50IHRoZV9zZXJ2YW50KSA9IDA7
Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBfZGlzcGF0Y2goR0lPUF9TJik7
Cgpwcml2YXRlOgogIHZpcnR1YWwgdm9pZCogX3B0clRvSW50ZXJmYWNlKGNvbnN0IGNoYXIqKTsK
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9tb3N0RGVyaXZlZFJlcG9JZCgpOwp9OwoKCmV4dGVybiBj
b25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19TZXJ2YW50TG9jYXRvcjsKIyA3NTYgIi4uLy4u
Ly4uLy4uL2luY2x1ZGUvb21uaU9SQjMvcG9hLmgiIDIKCgoKCgoKCn0KCgojIDEgIi4uLy4uLy4u
Ly4uL2luY2x1ZGUvb21uaU9SQjMvcG9hX29wZXJhdG9ycy5oIiAxCiMgNDQgIi4uLy4uLy4uLy4u
L2luY2x1ZGUvb21uaU9SQjMvcG9hX29wZXJhdG9ycy5oIgppbmxpbmUgc2l6ZV90ClBvcnRhYmxl
U2VydmVyOjpBZGFwdGVyQWN0aXZhdG9yOjpfYWxpZ25lZFNpemUoUG9ydGFibGVTZXJ2ZXI6OkFk
YXB0ZXJBY3RpdmF0b3JfcHRyIG9iaiwgc2l6ZV90IG9mZnNldCkgewogIHJldHVybiBDT1JCQTo6
QWxpZ25lZE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDQ4LCBvZmZzZXQpOwp9CgppbmxpbmUgdm9p
ZApQb3J0YWJsZVNlcnZlcjo6QWRhcHRlckFjdGl2YXRvcjo6X21hcnNoYWxPYmpSZWYoUG9ydGFi
bGVTZXJ2ZXI6OkFkYXB0ZXJBY3RpdmF0b3JfcHRyIG9iaiwgTmV0QnVmZmVyZWRTdHJlYW0mIHMp
IHsKICBDT1JCQTo6TWFyc2hhbE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDQ4LCBzKTsKfQoKaW5s
aW5lIHZvaWQKUG9ydGFibGVTZXJ2ZXI6OkFkYXB0ZXJBY3RpdmF0b3I6Ol9tYXJzaGFsT2JqUmVm
KFBvcnRhYmxlU2VydmVyOjpBZGFwdGVyQWN0aXZhdG9yX3B0ciBvYmosIE1lbUJ1ZmZlcmVkU3Ry
ZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVwb0lkLCA0OCwgcyk7
Cn0KCgppbmxpbmUgc2l6ZV90ClBvcnRhYmxlU2VydmVyOjpTZXJ2YW50TWFuYWdlcjo6X2FsaWdu
ZWRTaXplKFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50TWFuYWdlcl9wdHIgb2JqLCBzaXplX3Qgb2Zm
c2V0KSB7CiAgcmV0dXJuIENPUkJBOjpBbGlnbmVkT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgNDYs
IG9mZnNldCk7Cn0KCmlubGluZSB2b2lkClBvcnRhYmxlU2VydmVyOjpTZXJ2YW50TWFuYWdlcjo6
X21hcnNoYWxPYmpSZWYoUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRNYW5hZ2VyX3B0ciBvYmosIE5l
dEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVw
b0lkLCA0Niwgcyk7Cn0KCmlubGluZSB2b2lkClBvcnRhYmxlU2VydmVyOjpTZXJ2YW50TWFuYWdl
cjo6X21hcnNoYWxPYmpSZWYoUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRNYW5hZ2VyX3B0ciBvYmos
IE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERf
cmVwb0lkLCA0Niwgcyk7Cn0KCgppbmxpbmUgc2l6ZV90ClBvcnRhYmxlU2VydmVyOjpTZXJ2YW50
QWN0aXZhdG9yOjpfYWxpZ25lZFNpemUoUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRBY3RpdmF0b3Jf
cHRyIG9iaiwgc2l6ZV90IG9mZnNldCkgewogIHJldHVybiBDT1JCQTo6QWxpZ25lZE9ialJlZihv
YmosIF9QRF9yZXBvSWQsIDQ4LCBvZmZzZXQpOwp9CgppbmxpbmUgdm9pZApQb3J0YWJsZVNlcnZl
cjo6U2VydmFudEFjdGl2YXRvcjo6X21hcnNoYWxPYmpSZWYoUG9ydGFibGVTZXJ2ZXI6OlNlcnZh
bnRBY3RpdmF0b3JfcHRyIG9iaiwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICBDT1JCQTo6TWFy
c2hhbE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDQ4LCBzKTsKfQoKaW5saW5lIHZvaWQKUG9ydGFi
bGVTZXJ2ZXI6OlNlcnZhbnRBY3RpdmF0b3I6Ol9tYXJzaGFsT2JqUmVmKFBvcnRhYmxlU2VydmVy
OjpTZXJ2YW50QWN0aXZhdG9yX3B0ciBvYmosIE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09S
QkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVwb0lkLCA0OCwgcyk7Cn0KCgppbmxpbmUgc2l6
ZV90ClBvcnRhYmxlU2VydmVyOjpTZXJ2YW50TG9jYXRvcjo6X2FsaWduZWRTaXplKFBvcnRhYmxl
U2VydmVyOjpTZXJ2YW50TG9jYXRvcl9wdHIgb2JqLCBzaXplX3Qgb2Zmc2V0KSB7CiAgcmV0dXJu
IENPUkJBOjpBbGlnbmVkT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgNDYsIG9mZnNldCk7Cn0KCmlu
bGluZSB2b2lkClBvcnRhYmxlU2VydmVyOjpTZXJ2YW50TG9jYXRvcjo6X21hcnNoYWxPYmpSZWYo
UG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRMb2NhdG9yX3B0ciBvYmosIE5ldEJ1ZmZlcmVkU3RyZWFt
JiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVwb0lkLCA0Niwgcyk7Cn0K
CmlubGluZSB2b2lkClBvcnRhYmxlU2VydmVyOjpTZXJ2YW50TG9jYXRvcjo6X21hcnNoYWxPYmpS
ZWYoUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRMb2NhdG9yX3B0ciBvYmosIE1lbUJ1ZmZlcmVkU3Ry
ZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVwb0lkLCA0Niwgcyk7
Cn0KIyA3NjcgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvcG9hLmgiIDIKIyAxICIuLi8u
Li8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL3BvYV9wb2EuaCIgMQojIDQ0ICIuLi8uLi8uLi8uLi9p
bmNsdWRlL29tbmlPUkIzL3BvYV9wb2EuaCIKbmFtZXNwYWNlIFBPQV9Qb3J0YWJsZVNlcnZlcgp7
CgoKY2xhc3MgQWRhcHRlckFjdGl2YXRvciA6CiAgICBwdWJsaWMgdmlydHVhbCBQb3J0YWJsZVNl
cnZlcjo6X2ltcGxfQWRhcHRlckFjdGl2YXRvciwKICAgIHB1YmxpYyB2aXJ0dWFsIFBvcnRhYmxl
U2VydmVyOjpTZXJ2YW50QmFzZQp7CnB1YmxpYzoKICB2aXJ0dWFsIH5BZGFwdGVyQWN0aXZhdG9y
KCk7CgogIGlubGluZSBQb3J0YWJsZVNlcnZlcjo6QWRhcHRlckFjdGl2YXRvcl9wdHIgX3RoaXMo
KSB7CiAgICByZXR1cm4gKFBvcnRhYmxlU2VydmVyOjpBZGFwdGVyQWN0aXZhdG9yX3B0cikgX2Rv
X3RoaXMoUG9ydGFibGVTZXJ2ZXI6OkFkYXB0ZXJBY3RpdmF0b3I6Ol9QRF9yZXBvSWQpOwogIH0K
fTsKCgpjbGFzcyBTZXJ2YW50TWFuYWdlciA6CiAgICBwdWJsaWMgdmlydHVhbCBQb3J0YWJsZVNl
cnZlcjo6X2ltcGxfU2VydmFudE1hbmFnZXIsCiAgICBwdWJsaWMgdmlydHVhbCBQb3J0YWJsZVNl
cnZlcjo6U2VydmFudEJhc2UKewpwdWJsaWM6CiAgdmlydHVhbCB+U2VydmFudE1hbmFnZXIoKTsK
CiAgaW5saW5lIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50TWFuYWdlcl9wdHIgX3RoaXMoKSB7CiAg
ICByZXR1cm4gKFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50TWFuYWdlcl9wdHIpIF9kb190aGlzKFBv
cnRhYmxlU2VydmVyOjpTZXJ2YW50TWFuYWdlcjo6X1BEX3JlcG9JZCk7CiAgfQp9OwoKCmNsYXNz
IFNlcnZhbnRBY3RpdmF0b3IgOgogICAgcHVibGljIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6Ol9p
bXBsX1NlcnZhbnRBY3RpdmF0b3IsCiAgICBwdWJsaWMgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6
U2VydmFudEJhc2UKewpwdWJsaWM6CiAgdmlydHVhbCB+U2VydmFudEFjdGl2YXRvcigpOwoKICBp
bmxpbmUgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRBY3RpdmF0b3JfcHRyIF90aGlzKCkgewogICAg
cmV0dXJuIChQb3J0YWJsZVNlcnZlcjo6U2VydmFudEFjdGl2YXRvcl9wdHIpIF9kb190aGlzKFBv
cnRhYmxlU2VydmVyOjpTZXJ2YW50QWN0aXZhdG9yOjpfUERfcmVwb0lkKTsKICB9Cn07CgoKY2xh
c3MgU2VydmFudExvY2F0b3IgOgogICAgcHVibGljIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6Ol9p
bXBsX1NlcnZhbnRMb2NhdG9yLAogICAgcHVibGljIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlNl
cnZhbnRCYXNlCnsKcHVibGljOgogIHZpcnR1YWwgflNlcnZhbnRMb2NhdG9yKCk7CgogIGlubGlu
ZSBQb3J0YWJsZVNlcnZlcjo6U2VydmFudExvY2F0b3JfcHRyIF90aGlzKCkgewogICAgcmV0dXJu
IChQb3J0YWJsZVNlcnZlcjo6U2VydmFudExvY2F0b3JfcHRyKSBfZG9fdGhpcyhQb3J0YWJsZVNl
cnZlcjo6U2VydmFudExvY2F0b3I6Ol9QRF9yZXBvSWQpOwogIH0KfTsKCgp9CiMgNzY4ICIuLi8u
Li8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL3BvYS5oIiAyCiMgMjYyNCAiLi4vLi4vLi4vLi4vaW5j
bHVkZS9vbW5pT1JCMy9DT1JCQS5oIiAyCgoKCmV4dGVybiBDT1JCQTo6Qm9vbGVhbgpfb21uaV9j
YWxsVHJhbnNpZW50RXhjZXB0aW9uSGFuZGxlcihvbW5pT2JqUmVmKiBvYmosIENPUkJBOjpVTG9u
ZyByZXRyaWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDT1JC
QTo6VFJBTlNJRU5UJiBleCk7CmV4dGVybiBDT1JCQTo6Qm9vbGVhbgpfb21uaV9jYWxsQ29tbUZh
aWx1cmVFeGNlcHRpb25IYW5kbGVyKG9tbmlPYmpSZWYqIG9iaiwgQ09SQkE6OlVMb25nIHJldHJp
ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ09SQkE6OkNP
TU1fRkFJTFVSRSYgZXgpOwpleHRlcm4gQ09SQkE6OkJvb2xlYW4KX29tbmlfY2FsbFN5c3RlbUV4
Y2VwdGlvbkhhbmRsZXIob21uaU9ialJlZiogb2JqLCBDT1JCQTo6VUxvbmcgcmV0cmllcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ09SQkE6OlN5c3RlbUV4Y2VwdGlv
biYgZXgpOwoKCmV4dGVybiB2b2lkIF9vbW5pX3NldF9OYW1lU2VydmljZShDT1JCQTo6T2JqZWN0
X3B0cik7CgoKIyAxICIuLi9vbW5pT1JCMy9jb3JiYWlkbF9vcGVyYXRvcnMuaGgiIDEKCgoKCmV4
dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBjb25zdCBDT1JCQTo6U3RydWN0
TWVtYmVyJiBfcyk7CmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDT1JC
QTo6U3RydWN0TWVtYmVyKiBfc3ApOwpleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0o
Y29uc3QgQ09SQkE6OkFueSYgX2EsIENPUkJBOjpTdHJ1Y3RNZW1iZXIqJiBfc3ApOwpleHRlcm4g
Q09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYgX2EsIGNvbnN0IENP
UkJBOjpTdHJ1Y3RNZW1iZXIqJiBfc3ApOwoKZXh0ZXJuIHZvaWQgb3BlcmF0b3IgPDw9IChDT1JC
QTo6QW55JiBfYSwgY29uc3QgQ09SQkE6OlN0cnVjdE1lbWJlclNlcSYgX3MpOwppbmxpbmUgdm9p
ZCBvcGVyYXRvciA8PD0gKENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6U3RydWN0TWVtYmVyU2VxKiBf
c3ApIHsKICBfYSA8PD0gKl9zcDsKICBkZWxldGUgX3NwOwp9CmV4dGVybiBfQ09SQkFfQm9vbGVh
biBvcGVyYXRvciA+Pj0gKGNvbnN0IENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6U3RydWN0TWVtYmVy
U2VxKiYgX3NwKTsKZXh0ZXJuIF9DT1JCQV9Cb29sZWFuIG9wZXJhdG9yID4+PSAoY29uc3QgQ09S
QkE6OkFueSYgX2EsIGNvbnN0IENPUkJBOjpTdHJ1Y3RNZW1iZXJTZXEqJiBfc3ApOwoKZXh0ZXJu
IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIGNvbnN0IENPUkJBOjpVbmlvbk1lbWJl
ciYgX3MpOwpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgQ09SQkE6OlVu
aW9uTWVtYmVyKiBfc3ApOwpleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3Qg
Q09SQkE6OkFueSYgX2EsIENPUkJBOjpVbmlvbk1lbWJlciomIF9zcCk7CmV4dGVybiBDT1JCQTo6
Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBfYSwgY29uc3QgQ09SQkE6OlVu
aW9uTWVtYmVyKiYgX3NwKTsKCmV4dGVybiB2b2lkIG9wZXJhdG9yIDw8PSAoQ09SQkE6OkFueSYg
X2EsIGNvbnN0IENPUkJBOjpVbmlvbk1lbWJlclNlcSYgX3MpOwppbmxpbmUgdm9pZCBvcGVyYXRv
ciA8PD0gKENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6VW5pb25NZW1iZXJTZXEqIF9zcCkgewogIF9h
IDw8PSAqX3NwOwogIGRlbGV0ZSBfc3A7Cn0KZXh0ZXJuIF9DT1JCQV9Cb29sZWFuIG9wZXJhdG9y
ID4+PSAoY29uc3QgQ09SQkE6OkFueSYgX2EsIENPUkJBOjpVbmlvbk1lbWJlclNlcSomIF9zcCk7
CmV4dGVybiBfQ09SQkFfQm9vbGVhbiBvcGVyYXRvciA+Pj0gKGNvbnN0IENPUkJBOjpBbnkmIF9h
LCBjb25zdCBDT1JCQTo6VW5pb25NZW1iZXJTZXEqJiBfc3ApOwoKZXh0ZXJuIHZvaWQgb3BlcmF0
b3IgPDw9IChDT1JCQTo6QW55JiBfYSwgY29uc3QgQ09SQkE6OkVudW1NZW1iZXJTZXEmIF9zKTsK
aW5saW5lIHZvaWQgb3BlcmF0b3IgPDw9IChDT1JCQTo6QW55JiBfYSwgQ09SQkE6OkVudW1NZW1i
ZXJTZXEqIF9zcCkgewogIF9hIDw8PSAqX3NwOwogIGRlbGV0ZSBfc3A7Cn0KZXh0ZXJuIF9DT1JC
QV9Cb29sZWFuIG9wZXJhdG9yID4+PSAoY29uc3QgQ09SQkE6OkFueSYgX2EsIENPUkJBOjpFbnVt
TWVtYmVyU2VxKiYgX3NwKTsKZXh0ZXJuIF9DT1JCQV9Cb29sZWFuIG9wZXJhdG9yID4+PSAoY29u
c3QgQ09SQkE6OkFueSYgX2EsIGNvbnN0IENPUkJBOjpFbnVtTWVtYmVyU2VxKiYgX3NwKTsKIyAy
NjQyICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL0NPUkJBLmgiIDIKCgojIDEgIi4uL29t
bmlPUkIzL2lyX29wZXJhdG9ycy5oaCIgMQoKCgoKaW5saW5lIHZvaWQgb3BlcmF0b3IgPj49KENP
UkJBOjpEZWZpbml0aW9uS2luZCBfZSwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICA6Om9wZXJh
dG9yPj49KChDT1JCQTo6VUxvbmcpX2UsIHMpOwp9CgppbmxpbmUgdm9pZCBvcGVyYXRvciA8PD0g
KENPUkJBOjpEZWZpbml0aW9uS2luZCYgX2UsIE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09S
QkE6OlVMb25nIF8wUkxfZTsKICA6Om9wZXJhdG9yPDw9KF8wUkxfZSxzKTsKICBzd2l0Y2ggKF8w
UkxfZSkgewogICAgY2FzZSBDT1JCQTo6ZGtfbm9uZToKCiAgICBjYXNlIENPUkJBOjpka19hbGw6
CgogICAgY2FzZSBDT1JCQTo6ZGtfQXR0cmlidXRlOgoKICAgIGNhc2UgQ09SQkE6OmRrX0NvbnN0
YW50OgoKICAgIGNhc2UgQ09SQkE6OmRrX0V4Y2VwdGlvbjoKCiAgICBjYXNlIENPUkJBOjpka19J
bnRlcmZhY2U6CgogICAgY2FzZSBDT1JCQTo6ZGtfTW9kdWxlOgoKICAgIGNhc2UgQ09SQkE6OmRr
X09wZXJhdGlvbjoKCiAgICBjYXNlIENPUkJBOjpka19UeXBlZGVmOgoKICAgIGNhc2UgQ09SQkE6
OmRrX0FsaWFzOgoKICAgIGNhc2UgQ09SQkE6OmRrX1N0cnVjdDoKCiAgICBjYXNlIENPUkJBOjpk
a19VbmlvbjoKCiAgICBjYXNlIENPUkJBOjpka19FbnVtOgoKICAgIGNhc2UgQ09SQkE6OmRrX1By
aW1pdGl2ZToKCiAgICBjYXNlIENPUkJBOjpka19TdHJpbmc6CgogICAgY2FzZSBDT1JCQTo6ZGtf
U2VxdWVuY2U6CgogICAgY2FzZSBDT1JCQTo6ZGtfQXJyYXk6CgogICAgY2FzZSBDT1JCQTo6ZGtf
UmVwb3NpdG9yeToKCiAgICBjYXNlIENPUkJBOjpka19Xc3RyaW5nOgoKICAgIGNhc2UgQ09SQkE6
OmRrX0ZpeGVkOgoKICAgIGNhc2UgQ09SQkE6OmRrX1ZhbHVlOgoKICAgIGNhc2UgQ09SQkE6OmRr
X1ZhbHVlQm94OgoKICAgIGNhc2UgQ09SQkE6OmRrX01lbWJlcjoKCiAgICBjYXNlIENPUkJBOjpk
a19OYXRpdmU6CgogICAgY2FzZSBDT1JCQTo6ZGtfQWJzdHJhY3RJbnRlcmZhY2U6CgogICAgX2Ug
PSAoQ09SQkE6OkRlZmluaXRpb25LaW5kKSBfMFJMX2U7CiAgICBicmVhazsKICBkZWZhdWx0Ogog
ICAgX0NPUkJBX21hcnNoYWxfZXJyb3IoKTsKICB9Cn0KCmlubGluZSB2b2lkIG9wZXJhdG9yID4+
PShDT1JCQTo6RGVmaW5pdGlvbktpbmQgX2UsIE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgOjpv
cGVyYXRvcj4+PSgoQ09SQkE6OlVMb25nKV9lLCBzKTsKfQoKaW5saW5lIHZvaWQgb3BlcmF0b3Ig
PDw9IChDT1JCQTo6RGVmaW5pdGlvbktpbmQmIF9lLCBNZW1CdWZmZXJlZFN0cmVhbSYgcykgewog
IENPUkJBOjpVTG9uZyBfMFJMX2U7CiAgOjpvcGVyYXRvcjw8PShfMFJMX2Uscyk7CiAgc3dpdGNo
IChfMFJMX2UpIHsKICAgIGNhc2UgQ09SQkE6OmRrX25vbmU6CgogICAgY2FzZSBDT1JCQTo6ZGtf
YWxsOgoKICAgIGNhc2UgQ09SQkE6OmRrX0F0dHJpYnV0ZToKCiAgICBjYXNlIENPUkJBOjpka19D
b25zdGFudDoKCiAgICBjYXNlIENPUkJBOjpka19FeGNlcHRpb246CgogICAgY2FzZSBDT1JCQTo6
ZGtfSW50ZXJmYWNlOgoKICAgIGNhc2UgQ09SQkE6OmRrX01vZHVsZToKCiAgICBjYXNlIENPUkJB
Ojpka19PcGVyYXRpb246CgogICAgY2FzZSBDT1JCQTo6ZGtfVHlwZWRlZjoKCiAgICBjYXNlIENP
UkJBOjpka19BbGlhczoKCiAgICBjYXNlIENPUkJBOjpka19TdHJ1Y3Q6CgogICAgY2FzZSBDT1JC
QTo6ZGtfVW5pb246CgogICAgY2FzZSBDT1JCQTo6ZGtfRW51bToKCiAgICBjYXNlIENPUkJBOjpk
a19QcmltaXRpdmU6CgogICAgY2FzZSBDT1JCQTo6ZGtfU3RyaW5nOgoKICAgIGNhc2UgQ09SQkE6
OmRrX1NlcXVlbmNlOgoKICAgIGNhc2UgQ09SQkE6OmRrX0FycmF5OgoKICAgIGNhc2UgQ09SQkE6
OmRrX1JlcG9zaXRvcnk6CgogICAgY2FzZSBDT1JCQTo6ZGtfV3N0cmluZzoKCiAgICBjYXNlIENP
UkJBOjpka19GaXhlZDoKCiAgICBjYXNlIENPUkJBOjpka19WYWx1ZToKCiAgICBjYXNlIENPUkJB
Ojpka19WYWx1ZUJveDoKCiAgICBjYXNlIENPUkJBOjpka19NZW1iZXI6CgogICAgY2FzZSBDT1JC
QTo6ZGtfTmF0aXZlOgoKICAgIGNhc2UgQ09SQkE6OmRrX0Fic3RyYWN0SW50ZXJmYWNlOgoKICAg
IF9lID0gKENPUkJBOjpEZWZpbml0aW9uS2luZCkgXzBSTF9lOwogICAgYnJlYWs7CiAgZGVmYXVs
dDoKICAgIF9DT1JCQV9tYXJzaGFsX2Vycm9yKCk7CiAgfQp9Cgp2b2lkIG9wZXJhdG9yPDw9KENP
UkJBOjpBbnkmIF9hLCBDT1JCQTo6RGVmaW5pdGlvbktpbmQgX3MpOwpDT1JCQTo6Qm9vbGVhbiBv
cGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBfYSwgQ09SQkE6OkRlZmluaXRpb25LaW5kJiBf
cyk7Cgp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6SVJPYmplY3RfcHRy
IF9zKTsKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgQ09SQkE6OklST2JqZWN0X3B0
ciogX3MpOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBfYSwg
Q09SQkE6OklST2JqZWN0X3B0ciYgX3MpOwoKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6
OkFueSYgX2EsIGNvbnN0IENPUkJBOjpDb250YWluZWQ6OkRlc2NyaXB0aW9uJiBfcyk7CmV4dGVy
biB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6Q29udGFpbmVkOjpEZXNj
cmlwdGlvbiogX3NwKTsKZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENP
UkJBOjpBbnkmIF9hLCBDT1JCQTo6Q29udGFpbmVkOjpEZXNjcmlwdGlvbiomIF9zcCk7CmV4dGVy
biBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBfYSwgY29uc3Qg
Q09SQkE6OkNvbnRhaW5lZDo6RGVzY3JpcHRpb24qJiBfc3ApOwoKdm9pZCBvcGVyYXRvcjw8PShD
T1JCQTo6QW55JiBfYSwgQ09SQkE6OkNvbnRhaW5lZF9wdHIgX3MpOwp2b2lkIG9wZXJhdG9yPDw9
KENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6Q29udGFpbmVkX3B0ciogX3MpOwpDT1JCQTo6Qm9vbGVh
biBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBfYSwgQ09SQkE6OkNvbnRhaW5lZF9wdHIm
IF9zKTsKCmV4dGVybiB2b2lkIG9wZXJhdG9yIDw8PSAoQ09SQkE6OkFueSYgX2EsIGNvbnN0IENP
UkJBOjpJbnRlcmZhY2VEZWZTZXEmIF9zKTsKaW5saW5lIHZvaWQgb3BlcmF0b3IgPDw9IChDT1JC
QTo6QW55JiBfYSwgQ09SQkE6OkludGVyZmFjZURlZlNlcSogX3NwKSB7CiAgX2EgPDw9ICpfc3A7
CiAgZGVsZXRlIF9zcDsKfQpleHRlcm4gX0NPUkJBX0Jvb2xlYW4gb3BlcmF0b3IgPj49IChjb25z
dCBDT1JCQTo6QW55JiBfYSwgQ09SQkE6OkludGVyZmFjZURlZlNlcSomIF9zcCk7CmV4dGVybiBf
Q09SQkFfQm9vbGVhbiBvcGVyYXRvciA+Pj0gKGNvbnN0IENPUkJBOjpBbnkmIF9hLCBjb25zdCBD
T1JCQTo6SW50ZXJmYWNlRGVmU2VxKiYgX3NwKTsKCmV4dGVybiB2b2lkIG9wZXJhdG9yIDw8PSAo
Q09SQkE6OkFueSYgX2EsIGNvbnN0IENPUkJBOjpWYWx1ZURlZlNlcSYgX3MpOwppbmxpbmUgdm9p
ZCBvcGVyYXRvciA8PD0gKENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6VmFsdWVEZWZTZXEqIF9zcCkg
ewogIF9hIDw8PSAqX3NwOwogIGRlbGV0ZSBfc3A7Cn0KZXh0ZXJuIF9DT1JCQV9Cb29sZWFuIG9w
ZXJhdG9yID4+PSAoY29uc3QgQ09SQkE6OkFueSYgX2EsIENPUkJBOjpWYWx1ZURlZlNlcSomIF9z
cCk7CmV4dGVybiBfQ09SQkFfQm9vbGVhbiBvcGVyYXRvciA+Pj0gKGNvbnN0IENPUkJBOjpBbnkm
IF9hLCBjb25zdCBDT1JCQTo6VmFsdWVEZWZTZXEqJiBfc3ApOwoKZXh0ZXJuIHZvaWQgb3BlcmF0
b3IgPDw9IChDT1JCQTo6QW55JiBfYSwgY29uc3QgQ09SQkE6OkFic3RyYWN0SW50ZXJmYWNlRGVm
U2VxJiBfcyk7CmlubGluZSB2b2lkIG9wZXJhdG9yIDw8PSAoQ09SQkE6OkFueSYgX2EsIENPUkJB
OjpBYnN0cmFjdEludGVyZmFjZURlZlNlcSogX3NwKSB7CiAgX2EgPDw9ICpfc3A7CiAgZGVsZXRl
IF9zcDsKfQpleHRlcm4gX0NPUkJBX0Jvb2xlYW4gb3BlcmF0b3IgPj49IChjb25zdCBDT1JCQTo6
QW55JiBfYSwgQ09SQkE6OkFic3RyYWN0SW50ZXJmYWNlRGVmU2VxKiYgX3NwKTsKZXh0ZXJuIF9D
T1JCQV9Cb29sZWFuIG9wZXJhdG9yID4+PSAoY29uc3QgQ09SQkE6OkFueSYgX2EsIGNvbnN0IENP
UkJBOjpBYnN0cmFjdEludGVyZmFjZURlZlNlcSomIF9zcCk7CgpleHRlcm4gdm9pZCBvcGVyYXRv
ciA8PD0gKENPUkJBOjpBbnkmIF9hLCBjb25zdCBDT1JCQTo6Q29udGFpbmVkU2VxJiBfcyk7Cmlu
bGluZSB2b2lkIG9wZXJhdG9yIDw8PSAoQ09SQkE6OkFueSYgX2EsIENPUkJBOjpDb250YWluZWRT
ZXEqIF9zcCkgewogIF9hIDw8PSAqX3NwOwogIGRlbGV0ZSBfc3A7Cn0KZXh0ZXJuIF9DT1JCQV9C
b29sZWFuIG9wZXJhdG9yID4+PSAoY29uc3QgQ09SQkE6OkFueSYgX2EsIENPUkJBOjpDb250YWlu
ZWRTZXEqJiBfc3ApOwpleHRlcm4gX0NPUkJBX0Jvb2xlYW4gb3BlcmF0b3IgPj49IChjb25zdCBD
T1JCQTo6QW55JiBfYSwgY29uc3QgQ09SQkE6OkNvbnRhaW5lZFNlcSomIF9zcCk7CgpleHRlcm4g
dm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgY29uc3QgQ09SQkE6OkluaXRpYWxpemVy
JiBfcyk7CmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6SW5p
dGlhbGl6ZXIqIF9zcCk7CmV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBD
T1JCQTo6QW55JiBfYSwgQ09SQkE6OkluaXRpYWxpemVyKiYgX3NwKTsKZXh0ZXJuIENPUkJBOjpC
b29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBjb25zdCBDT1JCQTo6SW5p
dGlhbGl6ZXIqJiBfc3ApOwoKZXh0ZXJuIHZvaWQgb3BlcmF0b3IgPDw9IChDT1JCQTo6QW55JiBf
YSwgY29uc3QgQ09SQkE6OkluaXRpYWxpemVyU2VxJiBfcyk7CmlubGluZSB2b2lkIG9wZXJhdG9y
IDw8PSAoQ09SQkE6OkFueSYgX2EsIENPUkJBOjpJbml0aWFsaXplclNlcSogX3NwKSB7CiAgX2Eg
PDw9ICpfc3A7CiAgZGVsZXRlIF9zcDsKfQpleHRlcm4gX0NPUkJBX0Jvb2xlYW4gb3BlcmF0b3Ig
Pj49IChjb25zdCBDT1JCQTo6QW55JiBfYSwgQ09SQkE6OkluaXRpYWxpemVyU2VxKiYgX3NwKTsK
ZXh0ZXJuIF9DT1JCQV9Cb29sZWFuIG9wZXJhdG9yID4+PSAoY29uc3QgQ09SQkE6OkFueSYgX2Es
IGNvbnN0IENPUkJBOjpJbml0aWFsaXplclNlcSomIF9zcCk7CgpleHRlcm4gdm9pZCBvcGVyYXRv
cjw8PShDT1JCQTo6QW55JiBfYSwgY29uc3QgQ09SQkE6OkNvbnRhaW5lcjo6RGVzY3JpcHRpb24m
IF9zKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIENPUkJBOjpDb250
YWluZXI6OkRlc2NyaXB0aW9uKiBfc3ApOwpleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+
Pj0oY29uc3QgQ09SQkE6OkFueSYgX2EsIENPUkJBOjpDb250YWluZXI6OkRlc2NyaXB0aW9uKiYg
X3NwKTsKZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkm
IF9hLCBjb25zdCBDT1JCQTo6Q29udGFpbmVyOjpEZXNjcmlwdGlvbiomIF9zcCk7CgpleHRlcm4g
dm9pZCBvcGVyYXRvciA8PD0gKENPUkJBOjpBbnkmIF9hLCBjb25zdCBDT1JCQTo6Q29udGFpbmVy
OjpEZXNjcmlwdGlvblNlcSYgX3MpOwppbmxpbmUgdm9pZCBvcGVyYXRvciA8PD0gKENPUkJBOjpB
bnkmIF9hLCBDT1JCQTo6Q29udGFpbmVyOjpEZXNjcmlwdGlvblNlcSogX3NwKSB7CiAgX2EgPDw9
ICpfc3A7CiAgZGVsZXRlIF9zcDsKfQpleHRlcm4gX0NPUkJBX0Jvb2xlYW4gb3BlcmF0b3IgPj49
IChjb25zdCBDT1JCQTo6QW55JiBfYSwgQ09SQkE6OkNvbnRhaW5lcjo6RGVzY3JpcHRpb25TZXEq
JiBfc3ApOwpleHRlcm4gX0NPUkJBX0Jvb2xlYW4gb3BlcmF0b3IgPj49IChjb25zdCBDT1JCQTo6
QW55JiBfYSwgY29uc3QgQ09SQkE6OkNvbnRhaW5lcjo6RGVzY3JpcHRpb25TZXEqJiBfc3ApOwoK
dm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgQ09SQkE6OkNvbnRhaW5lcl9wdHIgX3Mp
Owp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6Q29udGFpbmVyX3B0ciog
X3MpOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBfYSwgQ09S
QkE6OkNvbnRhaW5lcl9wdHImIF9zKTsKCnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2Es
IENPUkJBOjpJRExUeXBlX3B0ciBfcyk7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2Es
IENPUkJBOjpJRExUeXBlX3B0ciogX3MpOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25z
dCBDT1JCQTo6QW55JiBfYSwgQ09SQkE6OklETFR5cGVfcHRyJiBfcyk7CgppbmxpbmUgdm9pZCBv
cGVyYXRvciA+Pj0oQ09SQkE6OlByaW1pdGl2ZUtpbmQgX2UsIE5ldEJ1ZmZlcmVkU3RyZWFtJiBz
KSB7CiAgOjpvcGVyYXRvcj4+PSgoQ09SQkE6OlVMb25nKV9lLCBzKTsKfQoKaW5saW5lIHZvaWQg
b3BlcmF0b3IgPDw9IChDT1JCQTo6UHJpbWl0aXZlS2luZCYgX2UsIE5ldEJ1ZmZlcmVkU3RyZWFt
JiBzKSB7CiAgQ09SQkE6OlVMb25nIF8wUkxfZTsKICA6Om9wZXJhdG9yPDw9KF8wUkxfZSxzKTsK
ICBzd2l0Y2ggKF8wUkxfZSkgewogICAgY2FzZSBDT1JCQTo6cGtfbnVsbDoKCiAgICBjYXNlIENP
UkJBOjpwa192b2lkOgoKICAgIGNhc2UgQ09SQkE6OnBrX3Nob3J0OgoKICAgIGNhc2UgQ09SQkE6
OnBrX2xvbmc6CgogICAgY2FzZSBDT1JCQTo6cGtfdXNob3J0OgoKICAgIGNhc2UgQ09SQkE6OnBr
X3Vsb25nOgoKICAgIGNhc2UgQ09SQkE6OnBrX2Zsb2F0OgoKICAgIGNhc2UgQ09SQkE6OnBrX2Rv
dWJsZToKCiAgICBjYXNlIENPUkJBOjpwa19ib29sZWFuOgoKICAgIGNhc2UgQ09SQkE6OnBrX2No
YXI6CgogICAgY2FzZSBDT1JCQTo6cGtfb2N0ZXQ6CgogICAgY2FzZSBDT1JCQTo6cGtfYW55OgoK
ICAgIGNhc2UgQ09SQkE6OnBrX1R5cGVDb2RlOgoKICAgIGNhc2UgQ09SQkE6OnBrX1ByaW5jaXBh
bDoKCiAgICBjYXNlIENPUkJBOjpwa19zdHJpbmc6CgogICAgY2FzZSBDT1JCQTo6cGtfb2JqcmVm
OgoKICAgIGNhc2UgQ09SQkE6OnBrX2xvbmdsb25nOgoKICAgIGNhc2UgQ09SQkE6OnBrX3Vsb25n
bG9uZzoKCiAgICBjYXNlIENPUkJBOjpwa19sb25nZG91YmxlOgoKICAgIGNhc2UgQ09SQkE6OnBr
X3djaGFyOgoKICAgIGNhc2UgQ09SQkE6OnBrX3dzdHJpbmc6CgogICAgY2FzZSBDT1JCQTo6cGtf
dmFsdWVfYmFzZToKCiAgICBfZSA9IChDT1JCQTo6UHJpbWl0aXZlS2luZCkgXzBSTF9lOwogICAg
YnJlYWs7CiAgZGVmYXVsdDoKICAgIF9DT1JCQV9tYXJzaGFsX2Vycm9yKCk7CiAgfQp9Cgppbmxp
bmUgdm9pZCBvcGVyYXRvciA+Pj0oQ09SQkE6OlByaW1pdGl2ZUtpbmQgX2UsIE1lbUJ1ZmZlcmVk
U3RyZWFtJiBzKSB7CiAgOjpvcGVyYXRvcj4+PSgoQ09SQkE6OlVMb25nKV9lLCBzKTsKfQoKaW5s
aW5lIHZvaWQgb3BlcmF0b3IgPDw9IChDT1JCQTo6UHJpbWl0aXZlS2luZCYgX2UsIE1lbUJ1ZmZl
cmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6OlVMb25nIF8wUkxfZTsKICA6Om9wZXJhdG9yPDw9KF8w
UkxfZSxzKTsKICBzd2l0Y2ggKF8wUkxfZSkgewogICAgY2FzZSBDT1JCQTo6cGtfbnVsbDoKCiAg
ICBjYXNlIENPUkJBOjpwa192b2lkOgoKICAgIGNhc2UgQ09SQkE6OnBrX3Nob3J0OgoKICAgIGNh
c2UgQ09SQkE6OnBrX2xvbmc6CgogICAgY2FzZSBDT1JCQTo6cGtfdXNob3J0OgoKICAgIGNhc2Ug
Q09SQkE6OnBrX3Vsb25nOgoKICAgIGNhc2UgQ09SQkE6OnBrX2Zsb2F0OgoKICAgIGNhc2UgQ09S
QkE6OnBrX2RvdWJsZToKCiAgICBjYXNlIENPUkJBOjpwa19ib29sZWFuOgoKICAgIGNhc2UgQ09S
QkE6OnBrX2NoYXI6CgogICAgY2FzZSBDT1JCQTo6cGtfb2N0ZXQ6CgogICAgY2FzZSBDT1JCQTo6
cGtfYW55OgoKICAgIGNhc2UgQ09SQkE6OnBrX1R5cGVDb2RlOgoKICAgIGNhc2UgQ09SQkE6OnBr
X1ByaW5jaXBhbDoKCiAgICBjYXNlIENPUkJBOjpwa19zdHJpbmc6CgogICAgY2FzZSBDT1JCQTo6
cGtfb2JqcmVmOgoKICAgIGNhc2UgQ09SQkE6OnBrX2xvbmdsb25nOgoKICAgIGNhc2UgQ09SQkE6
OnBrX3Vsb25nbG9uZzoKCiAgICBjYXNlIENPUkJBOjpwa19sb25nZG91YmxlOgoKICAgIGNhc2Ug
Q09SQkE6OnBrX3djaGFyOgoKICAgIGNhc2UgQ09SQkE6OnBrX3dzdHJpbmc6CgogICAgY2FzZSBD
T1JCQTo6cGtfdmFsdWVfYmFzZToKCiAgICBfZSA9IChDT1JCQTo6UHJpbWl0aXZlS2luZCkgXzBS
TF9lOwogICAgYnJlYWs7CiAgZGVmYXVsdDoKICAgIF9DT1JCQV9tYXJzaGFsX2Vycm9yKCk7CiAg
fQp9Cgp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6UHJpbWl0aXZlS2lu
ZCBfcyk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBD
T1JCQTo6UHJpbWl0aXZlS2luZCYgX3MpOwoKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBf
YSwgQ09SQkE6OlJlcG9zaXRvcnlfcHRyIF9zKTsKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55
JiBfYSwgQ09SQkE6OlJlcG9zaXRvcnlfcHRyKiBfcyk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9y
Pj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6UmVwb3NpdG9yeV9wdHImIF9zKTsKCnZv
aWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIENPUkJBOjpNb2R1bGVEZWZfcHRyIF9zKTsK
dm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgQ09SQkE6Ok1vZHVsZURlZl9wdHIqIF9z
KTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYgX2EsIENPUkJB
OjpNb2R1bGVEZWZfcHRyJiBfcyk7CgpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55
JiBfYSwgY29uc3QgQ09SQkE6Ok1vZHVsZURlc2NyaXB0aW9uJiBfcyk7CmV4dGVybiB2b2lkIG9w
ZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6TW9kdWxlRGVzY3JpcHRpb24qIF9zcCk7
CmV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBfYSwg
Q09SQkE6Ok1vZHVsZURlc2NyaXB0aW9uKiYgX3NwKTsKZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9w
ZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBjb25zdCBDT1JCQTo6TW9kdWxlRGVzY3Jp
cHRpb24qJiBfc3ApOwoKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgQ09SQkE6OkNv
bnN0YW50RGVmX3B0ciBfcyk7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIENPUkJB
OjpDb25zdGFudERlZl9wdHIqIF9zKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3Qg
Q09SQkE6OkFueSYgX2EsIENPUkJBOjpDb25zdGFudERlZl9wdHImIF9zKTsKCmV4dGVybiB2b2lk
IG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBjb25zdCBDT1JCQTo6Q29uc3RhbnREZXNjcmlw
dGlvbiYgX3MpOwpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgQ09SQkE6
OkNvbnN0YW50RGVzY3JpcHRpb24qIF9zcCk7CmV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRv
cj4+PShjb25zdCBDT1JCQTo6QW55JiBfYSwgQ09SQkE6OkNvbnN0YW50RGVzY3JpcHRpb24qJiBf
c3ApOwpleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYg
X2EsIGNvbnN0IENPUkJBOjpDb25zdGFudERlc2NyaXB0aW9uKiYgX3NwKTsKCnZvaWQgb3BlcmF0
b3I8PD0oQ09SQkE6OkFueSYgX2EsIENPUkJBOjpUeXBlZGVmRGVmX3B0ciBfcyk7CnZvaWQgb3Bl
cmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIENPUkJBOjpUeXBlZGVmRGVmX3B0ciogX3MpOwpDT1JC
QTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBfYSwgQ09SQkE6OlR5cGVk
ZWZEZWZfcHRyJiBfcyk7CgpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwg
Y29uc3QgQ09SQkE6OlR5cGVEZXNjcmlwdGlvbiYgX3MpOwpleHRlcm4gdm9pZCBvcGVyYXRvcjw8
PShDT1JCQTo6QW55JiBfYSwgQ09SQkE6OlR5cGVEZXNjcmlwdGlvbiogX3NwKTsKZXh0ZXJuIENP
UkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6VHlw
ZURlc2NyaXB0aW9uKiYgX3NwKTsKZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNv
bnN0IENPUkJBOjpBbnkmIF9hLCBjb25zdCBDT1JCQTo6VHlwZURlc2NyaXB0aW9uKiYgX3NwKTsK
CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIENPUkJBOjpTdHJ1Y3REZWZfcHRyIF9z
KTsKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgQ09SQkE6OlN0cnVjdERlZl9wdHIq
IF9zKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYgX2EsIENP
UkJBOjpTdHJ1Y3REZWZfcHRyJiBfcyk7Cgp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9h
LCBDT1JCQTo6VW5pb25EZWZfcHRyIF9zKTsKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBf
YSwgQ09SQkE6OlVuaW9uRGVmX3B0ciogX3MpOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShj
b25zdCBDT1JCQTo6QW55JiBfYSwgQ09SQkE6OlVuaW9uRGVmX3B0ciYgX3MpOwoKdm9pZCBvcGVy
YXRvcjw8PShDT1JCQTo6QW55JiBfYSwgQ09SQkE6OkVudW1EZWZfcHRyIF9zKTsKdm9pZCBvcGVy
YXRvcjw8PShDT1JCQTo6QW55JiBfYSwgQ09SQkE6OkVudW1EZWZfcHRyKiBfcyk7CkNPUkJBOjpC
b29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6RW51bURlZl9w
dHImIF9zKTsKCnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIENPUkJBOjpBbGlhc0Rl
Zl9wdHIgX3MpOwp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6QWxpYXNE
ZWZfcHRyKiBfcyk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkm
IF9hLCBDT1JCQTo6QWxpYXNEZWZfcHRyJiBfcyk7Cgp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpB
bnkmIF9hLCBDT1JCQTo6TmF0aXZlRGVmX3B0ciBfcyk7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6
OkFueSYgX2EsIENPUkJBOjpOYXRpdmVEZWZfcHRyKiBfcyk7CkNPUkJBOjpCb29sZWFuIG9wZXJh
dG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6TmF0aXZlRGVmX3B0ciYgX3MpOwoK
dm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgQ09SQkE6OlByaW1pdGl2ZURlZl9wdHIg
X3MpOwp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6UHJpbWl0aXZlRGVm
X3B0ciogX3MpOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBf
YSwgQ09SQkE6OlByaW1pdGl2ZURlZl9wdHImIF9zKTsKCnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6
OkFueSYgX2EsIENPUkJBOjpTdHJpbmdEZWZfcHRyIF9zKTsKdm9pZCBvcGVyYXRvcjw8PShDT1JC
QTo6QW55JiBfYSwgQ09SQkE6OlN0cmluZ0RlZl9wdHIqIF9zKTsKQ09SQkE6OkJvb2xlYW4gb3Bl
cmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYgX2EsIENPUkJBOjpTdHJpbmdEZWZfcHRyJiBfcyk7
Cgp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6V3N0cmluZ0RlZl9wdHIg
X3MpOwp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6V3N0cmluZ0RlZl9w
dHIqIF9zKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYgX2Es
IENPUkJBOjpXc3RyaW5nRGVmX3B0ciYgX3MpOwoKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55
JiBfYSwgQ09SQkE6OkZpeGVkRGVmX3B0ciBfcyk7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFu
eSYgX2EsIENPUkJBOjpGaXhlZERlZl9wdHIqIF9zKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+
Pj0oY29uc3QgQ09SQkE6OkFueSYgX2EsIENPUkJBOjpGaXhlZERlZl9wdHImIF9zKTsKCnZvaWQg
b3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIENPUkJBOjpTZXF1ZW5jZURlZl9wdHIgX3MpOwp2
b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6U2VxdWVuY2VEZWZfcHRyKiBf
cyk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBDT1JC
QTo6U2VxdWVuY2VEZWZfcHRyJiBfcyk7Cgp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9h
LCBDT1JCQTo6QXJyYXlEZWZfcHRyIF9zKTsKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBf
YSwgQ09SQkE6OkFycmF5RGVmX3B0ciogX3MpOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShj
b25zdCBDT1JCQTo6QW55JiBfYSwgQ09SQkE6OkFycmF5RGVmX3B0ciYgX3MpOwoKdm9pZCBvcGVy
YXRvcjw8PShDT1JCQTo6QW55JiBfYSwgQ09SQkE6OkV4Y2VwdGlvbkRlZl9wdHIgX3MpOwp2b2lk
IG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6RXhjZXB0aW9uRGVmX3B0ciogX3Mp
OwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBfYSwgQ09SQkE6
OkV4Y2VwdGlvbkRlZl9wdHImIF9zKTsKCmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpB
bnkmIF9hLCBjb25zdCBDT1JCQTo6RXhjZXB0aW9uRGVzY3JpcHRpb24mIF9zKTsKZXh0ZXJuIHZv
aWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIENPUkJBOjpFeGNlcHRpb25EZXNjcmlwdGlv
biogX3NwKTsKZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpB
bnkmIF9hLCBDT1JCQTo6RXhjZXB0aW9uRGVzY3JpcHRpb24qJiBfc3ApOwpleHRlcm4gQ09SQkE6
OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYgX2EsIGNvbnN0IENPUkJBOjpF
eGNlcHRpb25EZXNjcmlwdGlvbiomIF9zcCk7CgppbmxpbmUgdm9pZCBvcGVyYXRvciA+Pj0oQ09S
QkE6OkF0dHJpYnV0ZU1vZGUgX2UsIE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgOjpvcGVyYXRv
cj4+PSgoQ09SQkE6OlVMb25nKV9lLCBzKTsKfQoKaW5saW5lIHZvaWQgb3BlcmF0b3IgPDw9IChD
T1JCQTo6QXR0cmlidXRlTW9kZSYgX2UsIE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6
OlVMb25nIF8wUkxfZTsKICA6Om9wZXJhdG9yPDw9KF8wUkxfZSxzKTsKICBzd2l0Y2ggKF8wUkxf
ZSkgewogICAgY2FzZSBDT1JCQTo6QVRUUl9OT1JNQUw6CgogICAgY2FzZSBDT1JCQTo6QVRUUl9S
RUFET05MWToKCiAgICBfZSA9IChDT1JCQTo6QXR0cmlidXRlTW9kZSkgXzBSTF9lOwogICAgYnJl
YWs7CiAgZGVmYXVsdDoKICAgIF9DT1JCQV9tYXJzaGFsX2Vycm9yKCk7CiAgfQp9CgppbmxpbmUg
dm9pZCBvcGVyYXRvciA+Pj0oQ09SQkE6OkF0dHJpYnV0ZU1vZGUgX2UsIE1lbUJ1ZmZlcmVkU3Ry
ZWFtJiBzKSB7CiAgOjpvcGVyYXRvcj4+PSgoQ09SQkE6OlVMb25nKV9lLCBzKTsKfQoKaW5saW5l
IHZvaWQgb3BlcmF0b3IgPDw9IChDT1JCQTo6QXR0cmlidXRlTW9kZSYgX2UsIE1lbUJ1ZmZlcmVk
U3RyZWFtJiBzKSB7CiAgQ09SQkE6OlVMb25nIF8wUkxfZTsKICA6Om9wZXJhdG9yPDw9KF8wUkxf
ZSxzKTsKICBzd2l0Y2ggKF8wUkxfZSkgewogICAgY2FzZSBDT1JCQTo6QVRUUl9OT1JNQUw6Cgog
ICAgY2FzZSBDT1JCQTo6QVRUUl9SRUFET05MWToKCiAgICBfZSA9IChDT1JCQTo6QXR0cmlidXRl
TW9kZSkgXzBSTF9lOwogICAgYnJlYWs7CiAgZGVmYXVsdDoKICAgIF9DT1JCQV9tYXJzaGFsX2Vy
cm9yKCk7CiAgfQp9Cgp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6QXR0
cmlidXRlTW9kZSBfcyk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpB
bnkmIF9hLCBDT1JCQTo6QXR0cmlidXRlTW9kZSYgX3MpOwoKdm9pZCBvcGVyYXRvcjw8PShDT1JC
QTo6QW55JiBfYSwgQ09SQkE6OkF0dHJpYnV0ZURlZl9wdHIgX3MpOwp2b2lkIG9wZXJhdG9yPDw9
KENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6QXR0cmlidXRlRGVmX3B0ciogX3MpOwpDT1JCQTo6Qm9v
bGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBfYSwgQ09SQkE6OkF0dHJpYnV0ZURl
Zl9wdHImIF9zKTsKCmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBjb25z
dCBDT1JCQTo6QXR0cmlidXRlRGVzY3JpcHRpb24mIF9zKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8
PD0oQ09SQkE6OkFueSYgX2EsIENPUkJBOjpBdHRyaWJ1dGVEZXNjcmlwdGlvbiogX3NwKTsKZXh0
ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBDT1JC
QTo6QXR0cmlidXRlRGVzY3JpcHRpb24qJiBfc3ApOwpleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3Bl
cmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYgX2EsIGNvbnN0IENPUkJBOjpBdHRyaWJ1dGVEZXNj
cmlwdGlvbiomIF9zcCk7CgppbmxpbmUgdm9pZCBvcGVyYXRvciA+Pj0oQ09SQkE6Ok9wZXJhdGlv
bk1vZGUgX2UsIE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgOjpvcGVyYXRvcj4+PSgoQ09SQkE6
OlVMb25nKV9lLCBzKTsKfQoKaW5saW5lIHZvaWQgb3BlcmF0b3IgPDw9IChDT1JCQTo6T3BlcmF0
aW9uTW9kZSYgX2UsIE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6OlVMb25nIF8wUkxf
ZTsKICA6Om9wZXJhdG9yPDw9KF8wUkxfZSxzKTsKICBzd2l0Y2ggKF8wUkxfZSkgewogICAgY2Fz
ZSBDT1JCQTo6T1BfTk9STUFMOgoKICAgIGNhc2UgQ09SQkE6Ok9QX09ORVdBWToKCiAgICBfZSA9
IChDT1JCQTo6T3BlcmF0aW9uTW9kZSkgXzBSTF9lOwogICAgYnJlYWs7CiAgZGVmYXVsdDoKICAg
IF9DT1JCQV9tYXJzaGFsX2Vycm9yKCk7CiAgfQp9CgppbmxpbmUgdm9pZCBvcGVyYXRvciA+Pj0o
Q09SQkE6Ok9wZXJhdGlvbk1vZGUgX2UsIE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgOjpvcGVy
YXRvcj4+PSgoQ09SQkE6OlVMb25nKV9lLCBzKTsKfQoKaW5saW5lIHZvaWQgb3BlcmF0b3IgPDw9
IChDT1JCQTo6T3BlcmF0aW9uTW9kZSYgX2UsIE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09S
QkE6OlVMb25nIF8wUkxfZTsKICA6Om9wZXJhdG9yPDw9KF8wUkxfZSxzKTsKICBzd2l0Y2ggKF8w
UkxfZSkgewogICAgY2FzZSBDT1JCQTo6T1BfTk9STUFMOgoKICAgIGNhc2UgQ09SQkE6Ok9QX09O
RVdBWToKCiAgICBfZSA9IChDT1JCQTo6T3BlcmF0aW9uTW9kZSkgXzBSTF9lOwogICAgYnJlYWs7
CiAgZGVmYXVsdDoKICAgIF9DT1JCQV9tYXJzaGFsX2Vycm9yKCk7CiAgfQp9Cgp2b2lkIG9wZXJh
dG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6T3BlcmF0aW9uTW9kZSBfcyk7CkNPUkJBOjpC
b29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6T3BlcmF0aW9u
TW9kZSYgX3MpOwoKaW5saW5lIHZvaWQgb3BlcmF0b3IgPj49KENPUkJBOjpQYXJhbWV0ZXJNb2Rl
IF9lLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogIDo6b3BlcmF0b3I+Pj0oKENPUkJBOjpVTG9u
ZylfZSwgcyk7Cn0KCmlubGluZSB2b2lkIG9wZXJhdG9yIDw8PSAoQ09SQkE6OlBhcmFtZXRlck1v
ZGUmIF9lLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpVTG9uZyBfMFJMX2U7CiAg
OjpvcGVyYXRvcjw8PShfMFJMX2Uscyk7CiAgc3dpdGNoIChfMFJMX2UpIHsKICAgIGNhc2UgQ09S
QkE6OlBBUkFNX0lOOgoKICAgIGNhc2UgQ09SQkE6OlBBUkFNX09VVDoKCiAgICBjYXNlIENPUkJB
OjpQQVJBTV9JTk9VVDoKCiAgICBfZSA9IChDT1JCQTo6UGFyYW1ldGVyTW9kZSkgXzBSTF9lOwog
ICAgYnJlYWs7CiAgZGVmYXVsdDoKICAgIF9DT1JCQV9tYXJzaGFsX2Vycm9yKCk7CiAgfQp9Cgpp
bmxpbmUgdm9pZCBvcGVyYXRvciA+Pj0oQ09SQkE6OlBhcmFtZXRlck1vZGUgX2UsIE1lbUJ1ZmZl
cmVkU3RyZWFtJiBzKSB7CiAgOjpvcGVyYXRvcj4+PSgoQ09SQkE6OlVMb25nKV9lLCBzKTsKfQoK
aW5saW5lIHZvaWQgb3BlcmF0b3IgPDw9IChDT1JCQTo6UGFyYW1ldGVyTW9kZSYgX2UsIE1lbUJ1
ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6OlVMb25nIF8wUkxfZTsKICA6Om9wZXJhdG9yPDw9
KF8wUkxfZSxzKTsKICBzd2l0Y2ggKF8wUkxfZSkgewogICAgY2FzZSBDT1JCQTo6UEFSQU1fSU46
CgogICAgY2FzZSBDT1JCQTo6UEFSQU1fT1VUOgoKICAgIGNhc2UgQ09SQkE6OlBBUkFNX0lOT1VU
OgoKICAgIF9lID0gKENPUkJBOjpQYXJhbWV0ZXJNb2RlKSBfMFJMX2U7CiAgICBicmVhazsKICBk
ZWZhdWx0OgogICAgX0NPUkJBX21hcnNoYWxfZXJyb3IoKTsKICB9Cn0KCnZvaWQgb3BlcmF0b3I8
PD0oQ09SQkE6OkFueSYgX2EsIENPUkJBOjpQYXJhbWV0ZXJNb2RlIF9zKTsKQ09SQkE6OkJvb2xl
YW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYgX2EsIENPUkJBOjpQYXJhbWV0ZXJNb2Rl
JiBfcyk7CgpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgY29uc3QgQ09S
QkE6OlBhcmFtZXRlckRlc2NyaXB0aW9uJiBfcyk7CmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENP
UkJBOjpBbnkmIF9hLCBDT1JCQTo6UGFyYW1ldGVyRGVzY3JpcHRpb24qIF9zcCk7CmV4dGVybiBD
T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBfYSwgQ09SQkE6OlBh
cmFtZXRlckRlc2NyaXB0aW9uKiYgX3NwKTsKZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9y
Pj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBjb25zdCBDT1JCQTo6UGFyYW1ldGVyRGVzY3JpcHRp
b24qJiBfc3ApOwoKZXh0ZXJuIHZvaWQgb3BlcmF0b3IgPDw9IChDT1JCQTo6QW55JiBfYSwgY29u
c3QgQ09SQkE6OlBhckRlc2NyaXB0aW9uU2VxJiBfcyk7CmlubGluZSB2b2lkIG9wZXJhdG9yIDw8
PSAoQ09SQkE6OkFueSYgX2EsIENPUkJBOjpQYXJEZXNjcmlwdGlvblNlcSogX3NwKSB7CiAgX2Eg
PDw9ICpfc3A7CiAgZGVsZXRlIF9zcDsKfQpleHRlcm4gX0NPUkJBX0Jvb2xlYW4gb3BlcmF0b3Ig
Pj49IChjb25zdCBDT1JCQTo6QW55JiBfYSwgQ09SQkE6OlBhckRlc2NyaXB0aW9uU2VxKiYgX3Nw
KTsKZXh0ZXJuIF9DT1JCQV9Cb29sZWFuIG9wZXJhdG9yID4+PSAoY29uc3QgQ09SQkE6OkFueSYg
X2EsIGNvbnN0IENPUkJBOjpQYXJEZXNjcmlwdGlvblNlcSomIF9zcCk7CgpleHRlcm4gdm9pZCBv
cGVyYXRvciA8PD0gKENPUkJBOjpBbnkmIF9hLCBjb25zdCBDT1JCQTo6Q29udGV4dElkU2VxJiBf
cyk7CmlubGluZSB2b2lkIG9wZXJhdG9yIDw8PSAoQ09SQkE6OkFueSYgX2EsIENPUkJBOjpDb250
ZXh0SWRTZXEqIF9zcCkgewogIF9hIDw8PSAqX3NwOwogIGRlbGV0ZSBfc3A7Cn0KZXh0ZXJuIF9D
T1JCQV9Cb29sZWFuIG9wZXJhdG9yID4+PSAoY29uc3QgQ09SQkE6OkFueSYgX2EsIENPUkJBOjpD
b250ZXh0SWRTZXEqJiBfc3ApOwpleHRlcm4gX0NPUkJBX0Jvb2xlYW4gb3BlcmF0b3IgPj49IChj
b25zdCBDT1JCQTo6QW55JiBfYSwgY29uc3QgQ09SQkE6OkNvbnRleHRJZFNlcSomIF9zcCk7Cgpl
eHRlcm4gdm9pZCBvcGVyYXRvciA8PD0gKENPUkJBOjpBbnkmIF9hLCBjb25zdCBDT1JCQTo6RXhj
ZXB0aW9uRGVmU2VxJiBfcyk7CmlubGluZSB2b2lkIG9wZXJhdG9yIDw8PSAoQ09SQkE6OkFueSYg
X2EsIENPUkJBOjpFeGNlcHRpb25EZWZTZXEqIF9zcCkgewogIF9hIDw8PSAqX3NwOwogIGRlbGV0
ZSBfc3A7Cn0KZXh0ZXJuIF9DT1JCQV9Cb29sZWFuIG9wZXJhdG9yID4+PSAoY29uc3QgQ09SQkE6
OkFueSYgX2EsIENPUkJBOjpFeGNlcHRpb25EZWZTZXEqJiBfc3ApOwpleHRlcm4gX0NPUkJBX0Jv
b2xlYW4gb3BlcmF0b3IgPj49IChjb25zdCBDT1JCQTo6QW55JiBfYSwgY29uc3QgQ09SQkE6OkV4
Y2VwdGlvbkRlZlNlcSomIF9zcCk7CgpleHRlcm4gdm9pZCBvcGVyYXRvciA8PD0gKENPUkJBOjpB
bnkmIF9hLCBjb25zdCBDT1JCQTo6RXhjRGVzY3JpcHRpb25TZXEmIF9zKTsKaW5saW5lIHZvaWQg
b3BlcmF0b3IgPDw9IChDT1JCQTo6QW55JiBfYSwgQ09SQkE6OkV4Y0Rlc2NyaXB0aW9uU2VxKiBf
c3ApIHsKICBfYSA8PD0gKl9zcDsKICBkZWxldGUgX3NwOwp9CmV4dGVybiBfQ09SQkFfQm9vbGVh
biBvcGVyYXRvciA+Pj0gKGNvbnN0IENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6RXhjRGVzY3JpcHRp
b25TZXEqJiBfc3ApOwpleHRlcm4gX0NPUkJBX0Jvb2xlYW4gb3BlcmF0b3IgPj49IChjb25zdCBD
T1JCQTo6QW55JiBfYSwgY29uc3QgQ09SQkE6OkV4Y0Rlc2NyaXB0aW9uU2VxKiYgX3NwKTsKCnZv
aWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIENPUkJBOjpPcGVyYXRpb25EZWZfcHRyIF9z
KTsKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgQ09SQkE6Ok9wZXJhdGlvbkRlZl9w
dHIqIF9zKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYgX2Es
IENPUkJBOjpPcGVyYXRpb25EZWZfcHRyJiBfcyk7CgpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShD
T1JCQTo6QW55JiBfYSwgY29uc3QgQ09SQkE6Ok9wZXJhdGlvbkRlc2NyaXB0aW9uJiBfcyk7CmV4
dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6T3BlcmF0aW9uRGVz
Y3JpcHRpb24qIF9zcCk7CmV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBD
T1JCQTo6QW55JiBfYSwgQ09SQkE6Ok9wZXJhdGlvbkRlc2NyaXB0aW9uKiYgX3NwKTsKZXh0ZXJu
IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBjb25zdCBD
T1JCQTo6T3BlcmF0aW9uRGVzY3JpcHRpb24qJiBfc3ApOwoKZXh0ZXJuIHZvaWQgb3BlcmF0b3Ig
PDw9IChDT1JCQTo6QW55JiBfYSwgY29uc3QgQ09SQkE6OlJlcG9zaXRvcnlJZFNlcSYgX3MpOwpp
bmxpbmUgdm9pZCBvcGVyYXRvciA8PD0gKENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6UmVwb3NpdG9y
eUlkU2VxKiBfc3ApIHsKICBfYSA8PD0gKl9zcDsKICBkZWxldGUgX3NwOwp9CmV4dGVybiBfQ09S
QkFfQm9vbGVhbiBvcGVyYXRvciA+Pj0gKGNvbnN0IENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6UmVw
b3NpdG9yeUlkU2VxKiYgX3NwKTsKZXh0ZXJuIF9DT1JCQV9Cb29sZWFuIG9wZXJhdG9yID4+PSAo
Y29uc3QgQ09SQkE6OkFueSYgX2EsIGNvbnN0IENPUkJBOjpSZXBvc2l0b3J5SWRTZXEqJiBfc3Ap
OwoKZXh0ZXJuIHZvaWQgb3BlcmF0b3IgPDw9IChDT1JCQTo6QW55JiBfYSwgY29uc3QgQ09SQkE6
Ok9wRGVzY3JpcHRpb25TZXEmIF9zKTsKaW5saW5lIHZvaWQgb3BlcmF0b3IgPDw9IChDT1JCQTo6
QW55JiBfYSwgQ09SQkE6Ok9wRGVzY3JpcHRpb25TZXEqIF9zcCkgewogIF9hIDw8PSAqX3NwOwog
IGRlbGV0ZSBfc3A7Cn0KZXh0ZXJuIF9DT1JCQV9Cb29sZWFuIG9wZXJhdG9yID4+PSAoY29uc3Qg
Q09SQkE6OkFueSYgX2EsIENPUkJBOjpPcERlc2NyaXB0aW9uU2VxKiYgX3NwKTsKZXh0ZXJuIF9D
T1JCQV9Cb29sZWFuIG9wZXJhdG9yID4+PSAoY29uc3QgQ09SQkE6OkFueSYgX2EsIGNvbnN0IENP
UkJBOjpPcERlc2NyaXB0aW9uU2VxKiYgX3NwKTsKCmV4dGVybiB2b2lkIG9wZXJhdG9yIDw8PSAo
Q09SQkE6OkFueSYgX2EsIGNvbnN0IENPUkJBOjpBdHRyRGVzY3JpcHRpb25TZXEmIF9zKTsKaW5s
aW5lIHZvaWQgb3BlcmF0b3IgPDw9IChDT1JCQTo6QW55JiBfYSwgQ09SQkE6OkF0dHJEZXNjcmlw
dGlvblNlcSogX3NwKSB7CiAgX2EgPDw9ICpfc3A7CiAgZGVsZXRlIF9zcDsKfQpleHRlcm4gX0NP
UkJBX0Jvb2xlYW4gb3BlcmF0b3IgPj49IChjb25zdCBDT1JCQTo6QW55JiBfYSwgQ09SQkE6OkF0
dHJEZXNjcmlwdGlvblNlcSomIF9zcCk7CmV4dGVybiBfQ09SQkFfQm9vbGVhbiBvcGVyYXRvciA+
Pj0gKGNvbnN0IENPUkJBOjpBbnkmIF9hLCBjb25zdCBDT1JCQTo6QXR0ckRlc2NyaXB0aW9uU2Vx
KiYgX3NwKTsKCmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBjb25zdCBD
T1JCQTo6SW50ZXJmYWNlRGVmOjpGdWxsSW50ZXJmYWNlRGVzY3JpcHRpb24mIF9zKTsKZXh0ZXJu
IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIENPUkJBOjpJbnRlcmZhY2VEZWY6OkZ1
bGxJbnRlcmZhY2VEZXNjcmlwdGlvbiogX3NwKTsKZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJh
dG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6SW50ZXJmYWNlRGVmOjpGdWxsSW50
ZXJmYWNlRGVzY3JpcHRpb24qJiBfc3ApOwpleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+
Pj0oY29uc3QgQ09SQkE6OkFueSYgX2EsIGNvbnN0IENPUkJBOjpJbnRlcmZhY2VEZWY6OkZ1bGxJ
bnRlcmZhY2VEZXNjcmlwdGlvbiomIF9zcCk7Cgp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkm
IF9hLCBDT1JCQTo6SW50ZXJmYWNlRGVmX3B0ciBfcyk7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6
OkFueSYgX2EsIENPUkJBOjpJbnRlcmZhY2VEZWZfcHRyKiBfcyk7CkNPUkJBOjpCb29sZWFuIG9w
ZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6SW50ZXJmYWNlRGVmX3B0ciYg
X3MpOwoKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIGNvbnN0IENPUkJB
OjpJbnRlcmZhY2VEZXNjcmlwdGlvbiYgX3MpOwpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JC
QTo6QW55JiBfYSwgQ09SQkE6OkludGVyZmFjZURlc2NyaXB0aW9uKiBfc3ApOwpleHRlcm4gQ09S
QkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYgX2EsIENPUkJBOjpJbnRl
cmZhY2VEZXNjcmlwdGlvbiomIF9zcCk7CmV4dGVybiBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+
PShjb25zdCBDT1JCQTo6QW55JiBfYSwgY29uc3QgQ09SQkE6OkludGVyZmFjZURlc2NyaXB0aW9u
KiYgX3NwKTsKCmV4dGVybiB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBjb25zdCBD
T1JCQTo6VmFsdWVNZW1iZXImIF9zKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFu
eSYgX2EsIENPUkJBOjpWYWx1ZU1lbWJlciogX3NwKTsKZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9w
ZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6VmFsdWVNZW1iZXIqJiBfc3Ap
OwpleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYgX2Es
IGNvbnN0IENPUkJBOjpWYWx1ZU1lbWJlciomIF9zcCk7CgpleHRlcm4gdm9pZCBvcGVyYXRvciA8
PD0gKENPUkJBOjpBbnkmIF9hLCBjb25zdCBDT1JCQTo6VmFsdWVNZW1iZXJTZXEmIF9zKTsKaW5s
aW5lIHZvaWQgb3BlcmF0b3IgPDw9IChDT1JCQTo6QW55JiBfYSwgQ09SQkE6OlZhbHVlTWVtYmVy
U2VxKiBfc3ApIHsKICBfYSA8PD0gKl9zcDsKICBkZWxldGUgX3NwOwp9CmV4dGVybiBfQ09SQkFf
Qm9vbGVhbiBvcGVyYXRvciA+Pj0gKGNvbnN0IENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6VmFsdWVN
ZW1iZXJTZXEqJiBfc3ApOwpleHRlcm4gX0NPUkJBX0Jvb2xlYW4gb3BlcmF0b3IgPj49IChjb25z
dCBDT1JCQTo6QW55JiBfYSwgY29uc3QgQ09SQkE6OlZhbHVlTWVtYmVyU2VxKiYgX3NwKTsKCnZv
aWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIENPUkJBOjpWYWx1ZU1lbWJlckRlZl9wdHIg
X3MpOwp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6VmFsdWVNZW1iZXJE
ZWZfcHRyKiBfcyk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkm
IF9hLCBDT1JCQTo6VmFsdWVNZW1iZXJEZWZfcHRyJiBfcyk7CgpleHRlcm4gdm9pZCBvcGVyYXRv
cjw8PShDT1JCQTo6QW55JiBfYSwgY29uc3QgQ09SQkE6OlZhbHVlRGVmOjpGdWxsVmFsdWVEZXNj
cmlwdGlvbiYgX3MpOwpleHRlcm4gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgQ09S
QkE6OlZhbHVlRGVmOjpGdWxsVmFsdWVEZXNjcmlwdGlvbiogX3NwKTsKZXh0ZXJuIENPUkJBOjpC
b29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6VmFsdWVEZWY6
OkZ1bGxWYWx1ZURlc2NyaXB0aW9uKiYgX3NwKTsKZXh0ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJh
dG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBjb25zdCBDT1JCQTo6VmFsdWVEZWY6OkZ1bGxW
YWx1ZURlc2NyaXB0aW9uKiYgX3NwKTsKCnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2Es
IENPUkJBOjpWYWx1ZURlZl9wdHIgX3MpOwp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIF9h
LCBDT1JCQTo6VmFsdWVEZWZfcHRyKiBfcyk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNv
bnN0IENPUkJBOjpBbnkmIF9hLCBDT1JCQTo6VmFsdWVEZWZfcHRyJiBfcyk7CgpleHRlcm4gdm9p
ZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgY29uc3QgQ09SQkE6OlZhbHVlRGVzY3JpcHRp
b24mIF9zKTsKZXh0ZXJuIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIENPUkJBOjpW
YWx1ZURlc2NyaXB0aW9uKiBfc3ApOwpleHRlcm4gQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0o
Y29uc3QgQ09SQkE6OkFueSYgX2EsIENPUkJBOjpWYWx1ZURlc2NyaXB0aW9uKiYgX3NwKTsKZXh0
ZXJuIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBjb25z
dCBDT1JCQTo6VmFsdWVEZXNjcmlwdGlvbiomIF9zcCk7Cgp2b2lkIG9wZXJhdG9yPDw9KENPUkJB
OjpBbnkmIF9hLCBDT1JCQTo6VmFsdWVCb3hEZWZfcHRyIF9zKTsKdm9pZCBvcGVyYXRvcjw8PShD
T1JCQTo6QW55JiBfYSwgQ09SQkE6OlZhbHVlQm94RGVmX3B0ciogX3MpOwpDT1JCQTo6Qm9vbGVh
biBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiBfYSwgQ09SQkE6OlZhbHVlQm94RGVmX3B0
ciYgX3MpOwoKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgQ09SQkE6OkFic3RyYWN0
SW50ZXJmYWNlRGVmX3B0ciBfcyk7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYgX2EsIENP
UkJBOjpBYnN0cmFjdEludGVyZmFjZURlZl9wdHIqIF9zKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0
b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYgX2EsIENPUkJBOjpBYnN0cmFjdEludGVyZmFjZURlZl9w
dHImIF9zKTsKCmlubGluZSBzaXplX3QKQ09SQkE6OklST2JqZWN0OjpfYWxpZ25lZFNpemUoQ09S
QkE6OklST2JqZWN0X3B0ciBvYmosIHNpemVfdCBvZmZzZXQpIHsKICByZXR1cm4gQ09SQkE6OkFs
aWduZWRPYmpSZWYob2JqLCBfUERfcmVwb0lkLCAzMSwgb2Zmc2V0KTsKfQoKaW5saW5lIHZvaWQK
Q09SQkE6OklST2JqZWN0OjpfbWFyc2hhbE9ialJlZihDT1JCQTo6SVJPYmplY3RfcHRyIG9iaiwg
TmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICBDT1JCQTo6TWFyc2hhbE9ialJlZihvYmosIF9QRF9y
ZXBvSWQsIDMxLCBzKTsKfQoKaW5saW5lIHZvaWQKQ09SQkE6OklST2JqZWN0OjpfbWFyc2hhbE9i
alJlZihDT1JCQTo6SVJPYmplY3RfcHRyIG9iaiwgTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICBD
T1JCQTo6TWFyc2hhbE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDMxLCBzKTsKfQoKaW5saW5lIHNp
emVfdApDT1JCQTo6Q29udGFpbmVkOjpfYWxpZ25lZFNpemUoQ09SQkE6OkNvbnRhaW5lZF9wdHIg
b2JqLCBzaXplX3Qgb2Zmc2V0KSB7CiAgcmV0dXJuIENPUkJBOjpBbGlnbmVkT2JqUmVmKG9iaiwg
X1BEX3JlcG9JZCwgMzIsIG9mZnNldCk7Cn0KCmlubGluZSB2b2lkCkNPUkJBOjpDb250YWluZWQ6
Ol9tYXJzaGFsT2JqUmVmKENPUkJBOjpDb250YWluZWRfcHRyIG9iaiwgTmV0QnVmZmVyZWRTdHJl
YW0mIHMpIHsKICBDT1JCQTo6TWFyc2hhbE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDMyLCBzKTsK
fQoKaW5saW5lIHZvaWQKQ09SQkE6OkNvbnRhaW5lZDo6X21hcnNoYWxPYmpSZWYoQ09SQkE6OkNv
bnRhaW5lZF9wdHIgb2JqLCBNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpNYXJzaGFs
T2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMzIsIHMpOwp9CgppbmxpbmUgc2l6ZV90CkNPUkJBOjpD
b250YWluZXI6Ol9hbGlnbmVkU2l6ZShDT1JCQTo6Q29udGFpbmVyX3B0ciBvYmosIHNpemVfdCBv
ZmZzZXQpIHsKICByZXR1cm4gQ09SQkE6OkFsaWduZWRPYmpSZWYob2JqLCBfUERfcmVwb0lkLCAz
Miwgb2Zmc2V0KTsKfQoKaW5saW5lIHZvaWQKQ09SQkE6OkNvbnRhaW5lcjo6X21hcnNoYWxPYmpS
ZWYoQ09SQkE6OkNvbnRhaW5lcl9wdHIgb2JqLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogIENP
UkJBOjpNYXJzaGFsT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMzIsIHMpOwp9CgppbmxpbmUgdm9p
ZApDT1JCQTo6Q29udGFpbmVyOjpfbWFyc2hhbE9ialJlZihDT1JCQTo6Q29udGFpbmVyX3B0ciBv
YmosIE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBf
UERfcmVwb0lkLCAzMiwgcyk7Cn0KCmlubGluZSBzaXplX3QKQ09SQkE6OklETFR5cGU6Ol9hbGln
bmVkU2l6ZShDT1JCQTo6SURMVHlwZV9wdHIgb2JqLCBzaXplX3Qgb2Zmc2V0KSB7CiAgcmV0dXJu
IENPUkJBOjpBbGlnbmVkT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMzAsIG9mZnNldCk7Cn0KCmlu
bGluZSB2b2lkCkNPUkJBOjpJRExUeXBlOjpfbWFyc2hhbE9ialJlZihDT1JCQTo6SURMVHlwZV9w
dHIgb2JqLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpNYXJzaGFsT2JqUmVmKG9i
aiwgX1BEX3JlcG9JZCwgMzAsIHMpOwp9CgppbmxpbmUgdm9pZApDT1JCQTo6SURMVHlwZTo6X21h
cnNoYWxPYmpSZWYoQ09SQkE6OklETFR5cGVfcHRyIG9iaiwgTWVtQnVmZmVyZWRTdHJlYW0mIHMp
IHsKICBDT1JCQTo6TWFyc2hhbE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDMwLCBzKTsKfQoKaW5s
aW5lIHNpemVfdApDT1JCQTo6UmVwb3NpdG9yeTo6X2FsaWduZWRTaXplKENPUkJBOjpSZXBvc2l0
b3J5X3B0ciBvYmosIHNpemVfdCBvZmZzZXQpIHsKICByZXR1cm4gQ09SQkE6OkFsaWduZWRPYmpS
ZWYob2JqLCBfUERfcmVwb0lkLCAzMywgb2Zmc2V0KTsKfQoKaW5saW5lIHZvaWQKQ09SQkE6OlJl
cG9zaXRvcnk6Ol9tYXJzaGFsT2JqUmVmKENPUkJBOjpSZXBvc2l0b3J5X3B0ciBvYmosIE5ldEJ1
ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVwb0lk
LCAzMywgcyk7Cn0KCmlubGluZSB2b2lkCkNPUkJBOjpSZXBvc2l0b3J5OjpfbWFyc2hhbE9ialJl
ZihDT1JCQTo6UmVwb3NpdG9yeV9wdHIgb2JqLCBNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogIENP
UkJBOjpNYXJzaGFsT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMzMsIHMpOwp9CgppbmxpbmUgc2l6
ZV90CkNPUkJBOjpNb2R1bGVEZWY6Ol9hbGlnbmVkU2l6ZShDT1JCQTo6TW9kdWxlRGVmX3B0ciBv
YmosIHNpemVfdCBvZmZzZXQpIHsKICByZXR1cm4gQ09SQkE6OkFsaWduZWRPYmpSZWYob2JqLCBf
UERfcmVwb0lkLCAzMiwgb2Zmc2V0KTsKfQoKaW5saW5lIHZvaWQKQ09SQkE6Ok1vZHVsZURlZjo6
X21hcnNoYWxPYmpSZWYoQ09SQkE6Ok1vZHVsZURlZl9wdHIgb2JqLCBOZXRCdWZmZXJlZFN0cmVh
bSYgcykgewogIENPUkJBOjpNYXJzaGFsT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMzIsIHMpOwp9
CgppbmxpbmUgdm9pZApDT1JCQTo6TW9kdWxlRGVmOjpfbWFyc2hhbE9ialJlZihDT1JCQTo6TW9k
dWxlRGVmX3B0ciBvYmosIE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxP
YmpSZWYob2JqLCBfUERfcmVwb0lkLCAzMiwgcyk7Cn0KCmlubGluZSBzaXplX3QKQ09SQkE6OkNv
bnN0YW50RGVmOjpfYWxpZ25lZFNpemUoQ09SQkE6OkNvbnN0YW50RGVmX3B0ciBvYmosIHNpemVf
dCBvZmZzZXQpIHsKICByZXR1cm4gQ09SQkE6OkFsaWduZWRPYmpSZWYob2JqLCBfUERfcmVwb0lk
LCAzNCwgb2Zmc2V0KTsKfQoKaW5saW5lIHZvaWQKQ09SQkE6OkNvbnN0YW50RGVmOjpfbWFyc2hh
bE9ialJlZihDT1JCQTo6Q29uc3RhbnREZWZfcHRyIG9iaiwgTmV0QnVmZmVyZWRTdHJlYW0mIHMp
IHsKICBDT1JCQTo6TWFyc2hhbE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDM0LCBzKTsKfQoKaW5s
aW5lIHZvaWQKQ09SQkE6OkNvbnN0YW50RGVmOjpfbWFyc2hhbE9ialJlZihDT1JCQTo6Q29uc3Rh
bnREZWZfcHRyIG9iaiwgTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICBDT1JCQTo6TWFyc2hhbE9i
alJlZihvYmosIF9QRF9yZXBvSWQsIDM0LCBzKTsKfQoKaW5saW5lIHNpemVfdApDT1JCQTo6VHlw
ZWRlZkRlZjo6X2FsaWduZWRTaXplKENPUkJBOjpUeXBlZGVmRGVmX3B0ciBvYmosIHNpemVfdCBv
ZmZzZXQpIHsKICByZXR1cm4gQ09SQkE6OkFsaWduZWRPYmpSZWYob2JqLCBfUERfcmVwb0lkLCAz
Mywgb2Zmc2V0KTsKfQoKaW5saW5lIHZvaWQKQ09SQkE6OlR5cGVkZWZEZWY6Ol9tYXJzaGFsT2Jq
UmVmKENPUkJBOjpUeXBlZGVmRGVmX3B0ciBvYmosIE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAg
Q09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVwb0lkLCAzMywgcyk7Cn0KCmlubGluZSB2
b2lkCkNPUkJBOjpUeXBlZGVmRGVmOjpfbWFyc2hhbE9ialJlZihDT1JCQTo6VHlwZWRlZkRlZl9w
dHIgb2JqLCBNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpNYXJzaGFsT2JqUmVmKG9i
aiwgX1BEX3JlcG9JZCwgMzMsIHMpOwp9CgppbmxpbmUgc2l6ZV90CkNPUkJBOjpTdHJ1Y3REZWY6
Ol9hbGlnbmVkU2l6ZShDT1JCQTo6U3RydWN0RGVmX3B0ciBvYmosIHNpemVfdCBvZmZzZXQpIHsK
ICByZXR1cm4gQ09SQkE6OkFsaWduZWRPYmpSZWYob2JqLCBfUERfcmVwb0lkLCAzMiwgb2Zmc2V0
KTsKfQoKaW5saW5lIHZvaWQKQ09SQkE6OlN0cnVjdERlZjo6X21hcnNoYWxPYmpSZWYoQ09SQkE6
OlN0cnVjdERlZl9wdHIgb2JqLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpNYXJz
aGFsT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMzIsIHMpOwp9CgppbmxpbmUgdm9pZApDT1JCQTo6
U3RydWN0RGVmOjpfbWFyc2hhbE9ialJlZihDT1JCQTo6U3RydWN0RGVmX3B0ciBvYmosIE1lbUJ1
ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVwb0lk
LCAzMiwgcyk7Cn0KCmlubGluZSBzaXplX3QKQ09SQkE6OlVuaW9uRGVmOjpfYWxpZ25lZFNpemUo
Q09SQkE6OlVuaW9uRGVmX3B0ciBvYmosIHNpemVfdCBvZmZzZXQpIHsKICByZXR1cm4gQ09SQkE6
OkFsaWduZWRPYmpSZWYob2JqLCBfUERfcmVwb0lkLCAzMSwgb2Zmc2V0KTsKfQoKaW5saW5lIHZv
aWQKQ09SQkE6OlVuaW9uRGVmOjpfbWFyc2hhbE9ialJlZihDT1JCQTo6VW5pb25EZWZfcHRyIG9i
aiwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICBDT1JCQTo6TWFyc2hhbE9ialJlZihvYmosIF9Q
RF9yZXBvSWQsIDMxLCBzKTsKfQoKaW5saW5lIHZvaWQKQ09SQkE6OlVuaW9uRGVmOjpfbWFyc2hh
bE9ialJlZihDT1JCQTo6VW5pb25EZWZfcHRyIG9iaiwgTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsK
ICBDT1JCQTo6TWFyc2hhbE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDMxLCBzKTsKfQoKaW5saW5l
IHNpemVfdApDT1JCQTo6RW51bURlZjo6X2FsaWduZWRTaXplKENPUkJBOjpFbnVtRGVmX3B0ciBv
YmosIHNpemVfdCBvZmZzZXQpIHsKICByZXR1cm4gQ09SQkE6OkFsaWduZWRPYmpSZWYob2JqLCBf
UERfcmVwb0lkLCAzMCwgb2Zmc2V0KTsKfQoKaW5saW5lIHZvaWQKQ09SQkE6OkVudW1EZWY6Ol9t
YXJzaGFsT2JqUmVmKENPUkJBOjpFbnVtRGVmX3B0ciBvYmosIE5ldEJ1ZmZlcmVkU3RyZWFtJiBz
KSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVwb0lkLCAzMCwgcyk7Cn0KCmlu
bGluZSB2b2lkCkNPUkJBOjpFbnVtRGVmOjpfbWFyc2hhbE9ialJlZihDT1JCQTo6RW51bURlZl9w
dHIgb2JqLCBNZW1CdWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpNYXJzaGFsT2JqUmVmKG9i
aiwgX1BEX3JlcG9JZCwgMzAsIHMpOwp9CgppbmxpbmUgc2l6ZV90CkNPUkJBOjpBbGlhc0RlZjo6
X2FsaWduZWRTaXplKENPUkJBOjpBbGlhc0RlZl9wdHIgb2JqLCBzaXplX3Qgb2Zmc2V0KSB7CiAg
cmV0dXJuIENPUkJBOjpBbGlnbmVkT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMzEsIG9mZnNldCk7
Cn0KCmlubGluZSB2b2lkCkNPUkJBOjpBbGlhc0RlZjo6X21hcnNoYWxPYmpSZWYoQ09SQkE6OkFs
aWFzRGVmX3B0ciBvYmosIE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxP
YmpSZWYob2JqLCBfUERfcmVwb0lkLCAzMSwgcyk7Cn0KCmlubGluZSB2b2lkCkNPUkJBOjpBbGlh
c0RlZjo6X21hcnNoYWxPYmpSZWYoQ09SQkE6OkFsaWFzRGVmX3B0ciBvYmosIE1lbUJ1ZmZlcmVk
U3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVwb0lkLCAzMSwg
cyk7Cn0KCmlubGluZSBzaXplX3QKQ09SQkE6Ok5hdGl2ZURlZjo6X2FsaWduZWRTaXplKENPUkJB
OjpOYXRpdmVEZWZfcHRyIG9iaiwgc2l6ZV90IG9mZnNldCkgewogIHJldHVybiBDT1JCQTo6QWxp
Z25lZE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDMyLCBvZmZzZXQpOwp9CgppbmxpbmUgdm9pZApD
T1JCQTo6TmF0aXZlRGVmOjpfbWFyc2hhbE9ialJlZihDT1JCQTo6TmF0aXZlRGVmX3B0ciBvYmos
IE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERf
cmVwb0lkLCAzMiwgcyk7Cn0KCmlubGluZSB2b2lkCkNPUkJBOjpOYXRpdmVEZWY6Ol9tYXJzaGFs
T2JqUmVmKENPUkJBOjpOYXRpdmVEZWZfcHRyIG9iaiwgTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsK
ICBDT1JCQTo6TWFyc2hhbE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDMyLCBzKTsKfQoKaW5saW5l
IHNpemVfdApDT1JCQTo6UHJpbWl0aXZlRGVmOjpfYWxpZ25lZFNpemUoQ09SQkE6OlByaW1pdGl2
ZURlZl9wdHIgb2JqLCBzaXplX3Qgb2Zmc2V0KSB7CiAgcmV0dXJuIENPUkJBOjpBbGlnbmVkT2Jq
UmVmKG9iaiwgX1BEX3JlcG9JZCwgMzUsIG9mZnNldCk7Cn0KCmlubGluZSB2b2lkCkNPUkJBOjpQ
cmltaXRpdmVEZWY6Ol9tYXJzaGFsT2JqUmVmKENPUkJBOjpQcmltaXRpdmVEZWZfcHRyIG9iaiwg
TmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICBDT1JCQTo6TWFyc2hhbE9ialJlZihvYmosIF9QRF9y
ZXBvSWQsIDM1LCBzKTsKfQoKaW5saW5lIHZvaWQKQ09SQkE6OlByaW1pdGl2ZURlZjo6X21hcnNo
YWxPYmpSZWYoQ09SQkE6OlByaW1pdGl2ZURlZl9wdHIgb2JqLCBNZW1CdWZmZXJlZFN0cmVhbSYg
cykgewogIENPUkJBOjpNYXJzaGFsT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMzUsIHMpOwp9Cgpp
bmxpbmUgc2l6ZV90CkNPUkJBOjpTdHJpbmdEZWY6Ol9hbGlnbmVkU2l6ZShDT1JCQTo6U3RyaW5n
RGVmX3B0ciBvYmosIHNpemVfdCBvZmZzZXQpIHsKICByZXR1cm4gQ09SQkE6OkFsaWduZWRPYmpS
ZWYob2JqLCBfUERfcmVwb0lkLCAzMiwgb2Zmc2V0KTsKfQoKaW5saW5lIHZvaWQKQ09SQkE6OlN0
cmluZ0RlZjo6X21hcnNoYWxPYmpSZWYoQ09SQkE6OlN0cmluZ0RlZl9wdHIgb2JqLCBOZXRCdWZm
ZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpNYXJzaGFsT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwg
MzIsIHMpOwp9CgppbmxpbmUgdm9pZApDT1JCQTo6U3RyaW5nRGVmOjpfbWFyc2hhbE9ialJlZihD
T1JCQTo6U3RyaW5nRGVmX3B0ciBvYmosIE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6
Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVwb0lkLCAzMiwgcyk7Cn0KCmlubGluZSBzaXplX3QK
Q09SQkE6OldzdHJpbmdEZWY6Ol9hbGlnbmVkU2l6ZShDT1JCQTo6V3N0cmluZ0RlZl9wdHIgb2Jq
LCBzaXplX3Qgb2Zmc2V0KSB7CiAgcmV0dXJuIENPUkJBOjpBbGlnbmVkT2JqUmVmKG9iaiwgX1BE
X3JlcG9JZCwgMzMsIG9mZnNldCk7Cn0KCmlubGluZSB2b2lkCkNPUkJBOjpXc3RyaW5nRGVmOjpf
bWFyc2hhbE9ialJlZihDT1JCQTo6V3N0cmluZ0RlZl9wdHIgb2JqLCBOZXRCdWZmZXJlZFN0cmVh
bSYgcykgewogIENPUkJBOjpNYXJzaGFsT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMzMsIHMpOwp9
CgppbmxpbmUgdm9pZApDT1JCQTo6V3N0cmluZ0RlZjo6X21hcnNoYWxPYmpSZWYoQ09SQkE6Oldz
dHJpbmdEZWZfcHRyIG9iaiwgTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICBDT1JCQTo6TWFyc2hh
bE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDMzLCBzKTsKfQoKaW5saW5lIHNpemVfdApDT1JCQTo6
Rml4ZWREZWY6Ol9hbGlnbmVkU2l6ZShDT1JCQTo6Rml4ZWREZWZfcHRyIG9iaiwgc2l6ZV90IG9m
ZnNldCkgewogIHJldHVybiBDT1JCQTo6QWxpZ25lZE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDMx
LCBvZmZzZXQpOwp9CgppbmxpbmUgdm9pZApDT1JCQTo6Rml4ZWREZWY6Ol9tYXJzaGFsT2JqUmVm
KENPUkJBOjpGaXhlZERlZl9wdHIgb2JqLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJB
OjpNYXJzaGFsT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMzEsIHMpOwp9CgppbmxpbmUgdm9pZApD
T1JCQTo6Rml4ZWREZWY6Ol9tYXJzaGFsT2JqUmVmKENPUkJBOjpGaXhlZERlZl9wdHIgb2JqLCBN
ZW1CdWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpNYXJzaGFsT2JqUmVmKG9iaiwgX1BEX3Jl
cG9JZCwgMzEsIHMpOwp9CgppbmxpbmUgc2l6ZV90CkNPUkJBOjpTZXF1ZW5jZURlZjo6X2FsaWdu
ZWRTaXplKENPUkJBOjpTZXF1ZW5jZURlZl9wdHIgb2JqLCBzaXplX3Qgb2Zmc2V0KSB7CiAgcmV0
dXJuIENPUkJBOjpBbGlnbmVkT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMzQsIG9mZnNldCk7Cn0K
CmlubGluZSB2b2lkCkNPUkJBOjpTZXF1ZW5jZURlZjo6X21hcnNoYWxPYmpSZWYoQ09SQkE6OlNl
cXVlbmNlRGVmX3B0ciBvYmosIE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNo
YWxPYmpSZWYob2JqLCBfUERfcmVwb0lkLCAzNCwgcyk7Cn0KCmlubGluZSB2b2lkCkNPUkJBOjpT
ZXF1ZW5jZURlZjo6X21hcnNoYWxPYmpSZWYoQ09SQkE6OlNlcXVlbmNlRGVmX3B0ciBvYmosIE1l
bUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVw
b0lkLCAzNCwgcyk7Cn0KCmlubGluZSBzaXplX3QKQ09SQkE6OkFycmF5RGVmOjpfYWxpZ25lZFNp
emUoQ09SQkE6OkFycmF5RGVmX3B0ciBvYmosIHNpemVfdCBvZmZzZXQpIHsKICByZXR1cm4gQ09S
QkE6OkFsaWduZWRPYmpSZWYob2JqLCBfUERfcmVwb0lkLCAzMSwgb2Zmc2V0KTsKfQoKaW5saW5l
IHZvaWQKQ09SQkE6OkFycmF5RGVmOjpfbWFyc2hhbE9ialJlZihDT1JCQTo6QXJyYXlEZWZfcHRy
IG9iaiwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICBDT1JCQTo6TWFyc2hhbE9ialJlZihvYmos
IF9QRF9yZXBvSWQsIDMxLCBzKTsKfQoKaW5saW5lIHZvaWQKQ09SQkE6OkFycmF5RGVmOjpfbWFy
c2hhbE9ialJlZihDT1JCQTo6QXJyYXlEZWZfcHRyIG9iaiwgTWVtQnVmZmVyZWRTdHJlYW0mIHMp
IHsKICBDT1JCQTo6TWFyc2hhbE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDMxLCBzKTsKfQoKaW5s
aW5lIHNpemVfdApDT1JCQTo6RXhjZXB0aW9uRGVmOjpfYWxpZ25lZFNpemUoQ09SQkE6OkV4Y2Vw
dGlvbkRlZl9wdHIgb2JqLCBzaXplX3Qgb2Zmc2V0KSB7CiAgcmV0dXJuIENPUkJBOjpBbGlnbmVk
T2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMzUsIG9mZnNldCk7Cn0KCmlubGluZSB2b2lkCkNPUkJB
OjpFeGNlcHRpb25EZWY6Ol9tYXJzaGFsT2JqUmVmKENPUkJBOjpFeGNlcHRpb25EZWZfcHRyIG9i
aiwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICBDT1JCQTo6TWFyc2hhbE9ialJlZihvYmosIF9Q
RF9yZXBvSWQsIDM1LCBzKTsKfQoKaW5saW5lIHZvaWQKQ09SQkE6OkV4Y2VwdGlvbkRlZjo6X21h
cnNoYWxPYmpSZWYoQ09SQkE6OkV4Y2VwdGlvbkRlZl9wdHIgb2JqLCBNZW1CdWZmZXJlZFN0cmVh
bSYgcykgewogIENPUkJBOjpNYXJzaGFsT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMzUsIHMpOwp9
CgppbmxpbmUgc2l6ZV90CkNPUkJBOjpBdHRyaWJ1dGVEZWY6Ol9hbGlnbmVkU2l6ZShDT1JCQTo6
QXR0cmlidXRlRGVmX3B0ciBvYmosIHNpemVfdCBvZmZzZXQpIHsKICByZXR1cm4gQ09SQkE6OkFs
aWduZWRPYmpSZWYob2JqLCBfUERfcmVwb0lkLCAzNSwgb2Zmc2V0KTsKfQoKaW5saW5lIHZvaWQK
Q09SQkE6OkF0dHJpYnV0ZURlZjo6X21hcnNoYWxPYmpSZWYoQ09SQkE6OkF0dHJpYnV0ZURlZl9w
dHIgb2JqLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpNYXJzaGFsT2JqUmVmKG9i
aiwgX1BEX3JlcG9JZCwgMzUsIHMpOwp9CgppbmxpbmUgdm9pZApDT1JCQTo6QXR0cmlidXRlRGVm
OjpfbWFyc2hhbE9ialJlZihDT1JCQTo6QXR0cmlidXRlRGVmX3B0ciBvYmosIE1lbUJ1ZmZlcmVk
U3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVwb0lkLCAzNSwg
cyk7Cn0KCmlubGluZSBzaXplX3QKQ09SQkE6Ok9wZXJhdGlvbkRlZjo6X2FsaWduZWRTaXplKENP
UkJBOjpPcGVyYXRpb25EZWZfcHRyIG9iaiwgc2l6ZV90IG9mZnNldCkgewogIHJldHVybiBDT1JC
QTo6QWxpZ25lZE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDM1LCBvZmZzZXQpOwp9CgppbmxpbmUg
dm9pZApDT1JCQTo6T3BlcmF0aW9uRGVmOjpfbWFyc2hhbE9ialJlZihDT1JCQTo6T3BlcmF0aW9u
RGVmX3B0ciBvYmosIE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpS
ZWYob2JqLCBfUERfcmVwb0lkLCAzNSwgcyk7Cn0KCmlubGluZSB2b2lkCkNPUkJBOjpPcGVyYXRp
b25EZWY6Ol9tYXJzaGFsT2JqUmVmKENPUkJBOjpPcGVyYXRpb25EZWZfcHRyIG9iaiwgTWVtQnVm
ZmVyZWRTdHJlYW0mIHMpIHsKICBDT1JCQTo6TWFyc2hhbE9ialJlZihvYmosIF9QRF9yZXBvSWQs
IDM1LCBzKTsKfQoKaW5saW5lIHNpemVfdApDT1JCQTo6SW50ZXJmYWNlRGVmOjpfYWxpZ25lZFNp
emUoQ09SQkE6OkludGVyZmFjZURlZl9wdHIgb2JqLCBzaXplX3Qgb2Zmc2V0KSB7CiAgcmV0dXJu
IENPUkJBOjpBbGlnbmVkT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMzUsIG9mZnNldCk7Cn0KCmlu
bGluZSB2b2lkCkNPUkJBOjpJbnRlcmZhY2VEZWY6Ol9tYXJzaGFsT2JqUmVmKENPUkJBOjpJbnRl
cmZhY2VEZWZfcHRyIG9iaiwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICBDT1JCQTo6TWFyc2hh
bE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDM1LCBzKTsKfQoKaW5saW5lIHZvaWQKQ09SQkE6Oklu
dGVyZmFjZURlZjo6X21hcnNoYWxPYmpSZWYoQ09SQkE6OkludGVyZmFjZURlZl9wdHIgb2JqLCBN
ZW1CdWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpNYXJzaGFsT2JqUmVmKG9iaiwgX1BEX3Jl
cG9JZCwgMzUsIHMpOwp9CgppbmxpbmUgc2l6ZV90CkNPUkJBOjpWYWx1ZU1lbWJlckRlZjo6X2Fs
aWduZWRTaXplKENPUkJBOjpWYWx1ZU1lbWJlckRlZl9wdHIgb2JqLCBzaXplX3Qgb2Zmc2V0KSB7
CiAgcmV0dXJuIENPUkJBOjpBbGlnbmVkT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMzcsIG9mZnNl
dCk7Cn0KCmlubGluZSB2b2lkCkNPUkJBOjpWYWx1ZU1lbWJlckRlZjo6X21hcnNoYWxPYmpSZWYo
Q09SQkE6OlZhbHVlTWVtYmVyRGVmX3B0ciBvYmosIE5ldEJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAg
Q09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVwb0lkLCAzNywgcyk7Cn0KCmlubGluZSB2
b2lkCkNPUkJBOjpWYWx1ZU1lbWJlckRlZjo6X21hcnNoYWxPYmpSZWYoQ09SQkE6OlZhbHVlTWVt
YmVyRGVmX3B0ciBvYmosIE1lbUJ1ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxP
YmpSZWYob2JqLCBfUERfcmVwb0lkLCAzNywgcyk7Cn0KCmlubGluZSBzaXplX3QKQ09SQkE6OlZh
bHVlRGVmOjpfYWxpZ25lZFNpemUoQ09SQkE6OlZhbHVlRGVmX3B0ciBvYmosIHNpemVfdCBvZmZz
ZXQpIHsKICByZXR1cm4gQ09SQkE6OkFsaWduZWRPYmpSZWYob2JqLCBfUERfcmVwb0lkLCAzMSwg
b2Zmc2V0KTsKfQoKaW5saW5lIHZvaWQKQ09SQkE6OlZhbHVlRGVmOjpfbWFyc2hhbE9ialJlZihD
T1JCQTo6VmFsdWVEZWZfcHRyIG9iaiwgTmV0QnVmZmVyZWRTdHJlYW0mIHMpIHsKICBDT1JCQTo6
TWFyc2hhbE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDMxLCBzKTsKfQoKaW5saW5lIHZvaWQKQ09S
QkE6OlZhbHVlRGVmOjpfbWFyc2hhbE9ialJlZihDT1JCQTo6VmFsdWVEZWZfcHRyIG9iaiwgTWVt
QnVmZmVyZWRTdHJlYW0mIHMpIHsKICBDT1JCQTo6TWFyc2hhbE9ialJlZihvYmosIF9QRF9yZXBv
SWQsIDMxLCBzKTsKfQoKaW5saW5lIHNpemVfdApDT1JCQTo6VmFsdWVCb3hEZWY6Ol9hbGlnbmVk
U2l6ZShDT1JCQTo6VmFsdWVCb3hEZWZfcHRyIG9iaiwgc2l6ZV90IG9mZnNldCkgewogIHJldHVy
biBDT1JCQTo6QWxpZ25lZE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDM0LCBvZmZzZXQpOwp9Cgpp
bmxpbmUgdm9pZApDT1JCQTo6VmFsdWVCb3hEZWY6Ol9tYXJzaGFsT2JqUmVmKENPUkJBOjpWYWx1
ZUJveERlZl9wdHIgb2JqLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpNYXJzaGFs
T2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMzQsIHMpOwp9CgppbmxpbmUgdm9pZApDT1JCQTo6VmFs
dWVCb3hEZWY6Ol9tYXJzaGFsT2JqUmVmKENPUkJBOjpWYWx1ZUJveERlZl9wdHIgb2JqLCBNZW1C
dWZmZXJlZFN0cmVhbSYgcykgewogIENPUkJBOjpNYXJzaGFsT2JqUmVmKG9iaiwgX1BEX3JlcG9J
ZCwgMzQsIHMpOwp9CgppbmxpbmUgc2l6ZV90CkNPUkJBOjpBYnN0cmFjdEludGVyZmFjZURlZjo6
X2FsaWduZWRTaXplKENPUkJBOjpBYnN0cmFjdEludGVyZmFjZURlZl9wdHIgb2JqLCBzaXplX3Qg
b2Zmc2V0KSB7CiAgcmV0dXJuIENPUkJBOjpBbGlnbmVkT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwg
NDMsIG9mZnNldCk7Cn0KCmlubGluZSB2b2lkCkNPUkJBOjpBYnN0cmFjdEludGVyZmFjZURlZjo6
X21hcnNoYWxPYmpSZWYoQ09SQkE6OkFic3RyYWN0SW50ZXJmYWNlRGVmX3B0ciBvYmosIE5ldEJ1
ZmZlcmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVwb0lk
LCA0Mywgcyk7Cn0KCmlubGluZSB2b2lkCkNPUkJBOjpBYnN0cmFjdEludGVyZmFjZURlZjo6X21h
cnNoYWxPYmpSZWYoQ09SQkE6OkFic3RyYWN0SW50ZXJmYWNlRGVmX3B0ciBvYmosIE1lbUJ1ZmZl
cmVkU3RyZWFtJiBzKSB7CiAgQ09SQkE6Ok1hcnNoYWxPYmpSZWYob2JqLCBfUERfcmVwb0lkLCA0
Mywgcyk7Cn0KIyAyNjQ1ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL0NPUkJBLmgiIDIK
CgoKbmFtZXNwYWNlIFBPQV9DT1JCQQp7CgojIDEgIi4uL29tbmlPUkIzL2NvcmJhaWRsX3BvYS5o
aCIgMQojIDI2NTIgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvQ09SQkEuaCIgMgoKIyAx
ICIuLi9vbW5pT1JCMy9pcl9wb2EuaGgiIDEKCgoKCmNsYXNzIElST2JqZWN0IDoKICBwdWJsaWMg
dmlydHVhbCBDT1JCQTo6X2ltcGxfSVJPYmplY3QsCiAgcHVibGljIHZpcnR1YWwgUG9ydGFibGVT
ZXJ2ZXI6OlNlcnZhbnRCYXNlCnsKcHVibGljOgogIHZpcnR1YWwgfklST2JqZWN0KCk7CgogIGlu
bGluZSBDT1JCQTo6SVJPYmplY3RfcHRyIF90aGlzKCkgewogICAgcmV0dXJuIChDT1JCQTo6SVJP
YmplY3RfcHRyKSBfZG9fdGhpcyhDT1JCQTo6SVJPYmplY3Q6Ol9QRF9yZXBvSWQpOwogIH0KfTsK
CmNsYXNzIENvbnRhaW5lZCA6CiAgcHVibGljIHZpcnR1YWwgQ09SQkE6Ol9pbXBsX0NvbnRhaW5l
ZCwKICBwdWJsaWMgdmlydHVhbCBJUk9iamVjdAp7CnB1YmxpYzoKICB2aXJ0dWFsIH5Db250YWlu
ZWQoKTsKCiAgaW5saW5lIENPUkJBOjpDb250YWluZWRfcHRyIF90aGlzKCkgewogICAgcmV0dXJu
IChDT1JCQTo6Q29udGFpbmVkX3B0cikgX2RvX3RoaXMoQ09SQkE6OkNvbnRhaW5lZDo6X1BEX3Jl
cG9JZCk7CiAgfQp9OwoKY2xhc3MgQ29udGFpbmVyIDoKICBwdWJsaWMgdmlydHVhbCBDT1JCQTo6
X2ltcGxfQ29udGFpbmVyLAogIHB1YmxpYyB2aXJ0dWFsIElST2JqZWN0CnsKcHVibGljOgogIHZp
cnR1YWwgfkNvbnRhaW5lcigpOwoKICBpbmxpbmUgQ09SQkE6OkNvbnRhaW5lcl9wdHIgX3RoaXMo
KSB7CiAgICByZXR1cm4gKENPUkJBOjpDb250YWluZXJfcHRyKSBfZG9fdGhpcyhDT1JCQTo6Q29u
dGFpbmVyOjpfUERfcmVwb0lkKTsKICB9Cn07CgpjbGFzcyBJRExUeXBlIDoKICBwdWJsaWMgdmly
dHVhbCBDT1JCQTo6X2ltcGxfSURMVHlwZSwKICBwdWJsaWMgdmlydHVhbCBJUk9iamVjdAp7CnB1
YmxpYzoKICB2aXJ0dWFsIH5JRExUeXBlKCk7CgogIGlubGluZSBDT1JCQTo6SURMVHlwZV9wdHIg
X3RoaXMoKSB7CiAgICByZXR1cm4gKENPUkJBOjpJRExUeXBlX3B0cikgX2RvX3RoaXMoQ09SQkE6
OklETFR5cGU6Ol9QRF9yZXBvSWQpOwogIH0KfTsKCmNsYXNzIFJlcG9zaXRvcnkgOgogIHB1Ymxp
YyB2aXJ0dWFsIENPUkJBOjpfaW1wbF9SZXBvc2l0b3J5LAogIHB1YmxpYyB2aXJ0dWFsIENvbnRh
aW5lcgp7CnB1YmxpYzoKICB2aXJ0dWFsIH5SZXBvc2l0b3J5KCk7CgogIGlubGluZSBDT1JCQTo6
UmVwb3NpdG9yeV9wdHIgX3RoaXMoKSB7CiAgICByZXR1cm4gKENPUkJBOjpSZXBvc2l0b3J5X3B0
cikgX2RvX3RoaXMoQ09SQkE6OlJlcG9zaXRvcnk6Ol9QRF9yZXBvSWQpOwogIH0KfTsKCmNsYXNz
IE1vZHVsZURlZiA6CiAgcHVibGljIHZpcnR1YWwgQ09SQkE6Ol9pbXBsX01vZHVsZURlZiwKICBw
dWJsaWMgdmlydHVhbCBDb250YWluZXIsCiAgICBwdWJsaWMgdmlydHVhbCBDb250YWluZWQKewpw
dWJsaWM6CiAgdmlydHVhbCB+TW9kdWxlRGVmKCk7CgogIGlubGluZSBDT1JCQTo6TW9kdWxlRGVm
X3B0ciBfdGhpcygpIHsKICAgIHJldHVybiAoQ09SQkE6Ok1vZHVsZURlZl9wdHIpIF9kb190aGlz
KENPUkJBOjpNb2R1bGVEZWY6Ol9QRF9yZXBvSWQpOwogIH0KfTsKCmNsYXNzIENvbnN0YW50RGVm
IDoKICBwdWJsaWMgdmlydHVhbCBDT1JCQTo6X2ltcGxfQ29uc3RhbnREZWYsCiAgcHVibGljIHZp
cnR1YWwgQ29udGFpbmVkCnsKcHVibGljOgogIHZpcnR1YWwgfkNvbnN0YW50RGVmKCk7CgogIGlu
bGluZSBDT1JCQTo6Q29uc3RhbnREZWZfcHRyIF90aGlzKCkgewogICAgcmV0dXJuIChDT1JCQTo6
Q29uc3RhbnREZWZfcHRyKSBfZG9fdGhpcyhDT1JCQTo6Q29uc3RhbnREZWY6Ol9QRF9yZXBvSWQp
OwogIH0KfTsKCmNsYXNzIFR5cGVkZWZEZWYgOgogIHB1YmxpYyB2aXJ0dWFsIENPUkJBOjpfaW1w
bF9UeXBlZGVmRGVmLAogIHB1YmxpYyB2aXJ0dWFsIENvbnRhaW5lZCwKICAgIHB1YmxpYyB2aXJ0
dWFsIElETFR5cGUKewpwdWJsaWM6CiAgdmlydHVhbCB+VHlwZWRlZkRlZigpOwoKICBpbmxpbmUg
Q09SQkE6OlR5cGVkZWZEZWZfcHRyIF90aGlzKCkgewogICAgcmV0dXJuIChDT1JCQTo6VHlwZWRl
ZkRlZl9wdHIpIF9kb190aGlzKENPUkJBOjpUeXBlZGVmRGVmOjpfUERfcmVwb0lkKTsKICB9Cn07
CgpjbGFzcyBTdHJ1Y3REZWYgOgogIHB1YmxpYyB2aXJ0dWFsIENPUkJBOjpfaW1wbF9TdHJ1Y3RE
ZWYsCiAgcHVibGljIHZpcnR1YWwgVHlwZWRlZkRlZiwKICAgIHB1YmxpYyB2aXJ0dWFsIENvbnRh
aW5lcgp7CnB1YmxpYzoKICB2aXJ0dWFsIH5TdHJ1Y3REZWYoKTsKCiAgaW5saW5lIENPUkJBOjpT
dHJ1Y3REZWZfcHRyIF90aGlzKCkgewogICAgcmV0dXJuIChDT1JCQTo6U3RydWN0RGVmX3B0cikg
X2RvX3RoaXMoQ09SQkE6OlN0cnVjdERlZjo6X1BEX3JlcG9JZCk7CiAgfQp9OwoKY2xhc3MgVW5p
b25EZWYgOgogIHB1YmxpYyB2aXJ0dWFsIENPUkJBOjpfaW1wbF9VbmlvbkRlZiwKICBwdWJsaWMg
dmlydHVhbCBUeXBlZGVmRGVmLAogICAgcHVibGljIHZpcnR1YWwgQ29udGFpbmVyCnsKcHVibGlj
OgogIHZpcnR1YWwgflVuaW9uRGVmKCk7CgogIGlubGluZSBDT1JCQTo6VW5pb25EZWZfcHRyIF90
aGlzKCkgewogICAgcmV0dXJuIChDT1JCQTo6VW5pb25EZWZfcHRyKSBfZG9fdGhpcyhDT1JCQTo6
VW5pb25EZWY6Ol9QRF9yZXBvSWQpOwogIH0KfTsKCmNsYXNzIEVudW1EZWYgOgogIHB1YmxpYyB2
aXJ0dWFsIENPUkJBOjpfaW1wbF9FbnVtRGVmLAogIHB1YmxpYyB2aXJ0dWFsIFR5cGVkZWZEZWYK
ewpwdWJsaWM6CiAgdmlydHVhbCB+RW51bURlZigpOwoKICBpbmxpbmUgQ09SQkE6OkVudW1EZWZf
cHRyIF90aGlzKCkgewogICAgcmV0dXJuIChDT1JCQTo6RW51bURlZl9wdHIpIF9kb190aGlzKENP
UkJBOjpFbnVtRGVmOjpfUERfcmVwb0lkKTsKICB9Cn07CgpjbGFzcyBBbGlhc0RlZiA6CiAgcHVi
bGljIHZpcnR1YWwgQ09SQkE6Ol9pbXBsX0FsaWFzRGVmLAogIHB1YmxpYyB2aXJ0dWFsIFR5cGVk
ZWZEZWYKewpwdWJsaWM6CiAgdmlydHVhbCB+QWxpYXNEZWYoKTsKCiAgaW5saW5lIENPUkJBOjpB
bGlhc0RlZl9wdHIgX3RoaXMoKSB7CiAgICByZXR1cm4gKENPUkJBOjpBbGlhc0RlZl9wdHIpIF9k
b190aGlzKENPUkJBOjpBbGlhc0RlZjo6X1BEX3JlcG9JZCk7CiAgfQp9OwoKY2xhc3MgTmF0aXZl
RGVmIDoKICBwdWJsaWMgdmlydHVhbCBDT1JCQTo6X2ltcGxfTmF0aXZlRGVmLAogIHB1YmxpYyB2
aXJ0dWFsIFR5cGVkZWZEZWYKewpwdWJsaWM6CiAgdmlydHVhbCB+TmF0aXZlRGVmKCk7CgogIGlu
bGluZSBDT1JCQTo6TmF0aXZlRGVmX3B0ciBfdGhpcygpIHsKICAgIHJldHVybiAoQ09SQkE6Ok5h
dGl2ZURlZl9wdHIpIF9kb190aGlzKENPUkJBOjpOYXRpdmVEZWY6Ol9QRF9yZXBvSWQpOwogIH0K
fTsKCmNsYXNzIFByaW1pdGl2ZURlZiA6CiAgcHVibGljIHZpcnR1YWwgQ09SQkE6Ol9pbXBsX1By
aW1pdGl2ZURlZiwKICBwdWJsaWMgdmlydHVhbCBJRExUeXBlCnsKcHVibGljOgogIHZpcnR1YWwg
flByaW1pdGl2ZURlZigpOwoKICBpbmxpbmUgQ09SQkE6OlByaW1pdGl2ZURlZl9wdHIgX3RoaXMo
KSB7CiAgICByZXR1cm4gKENPUkJBOjpQcmltaXRpdmVEZWZfcHRyKSBfZG9fdGhpcyhDT1JCQTo6
UHJpbWl0aXZlRGVmOjpfUERfcmVwb0lkKTsKICB9Cn07CgpjbGFzcyBTdHJpbmdEZWYgOgogIHB1
YmxpYyB2aXJ0dWFsIENPUkJBOjpfaW1wbF9TdHJpbmdEZWYsCiAgcHVibGljIHZpcnR1YWwgSURM
VHlwZQp7CnB1YmxpYzoKICB2aXJ0dWFsIH5TdHJpbmdEZWYoKTsKCiAgaW5saW5lIENPUkJBOjpT
dHJpbmdEZWZfcHRyIF90aGlzKCkgewogICAgcmV0dXJuIChDT1JCQTo6U3RyaW5nRGVmX3B0cikg
X2RvX3RoaXMoQ09SQkE6OlN0cmluZ0RlZjo6X1BEX3JlcG9JZCk7CiAgfQp9OwoKY2xhc3MgV3N0
cmluZ0RlZiA6CiAgcHVibGljIHZpcnR1YWwgQ09SQkE6Ol9pbXBsX1dzdHJpbmdEZWYsCiAgcHVi
bGljIHZpcnR1YWwgSURMVHlwZQp7CnB1YmxpYzoKICB2aXJ0dWFsIH5Xc3RyaW5nRGVmKCk7Cgog
IGlubGluZSBDT1JCQTo6V3N0cmluZ0RlZl9wdHIgX3RoaXMoKSB7CiAgICByZXR1cm4gKENPUkJB
OjpXc3RyaW5nRGVmX3B0cikgX2RvX3RoaXMoQ09SQkE6OldzdHJpbmdEZWY6Ol9QRF9yZXBvSWQp
OwogIH0KfTsKCmNsYXNzIEZpeGVkRGVmIDoKICBwdWJsaWMgdmlydHVhbCBDT1JCQTo6X2ltcGxf
Rml4ZWREZWYsCiAgcHVibGljIHZpcnR1YWwgSURMVHlwZQp7CnB1YmxpYzoKICB2aXJ0dWFsIH5G
aXhlZERlZigpOwoKICBpbmxpbmUgQ09SQkE6OkZpeGVkRGVmX3B0ciBfdGhpcygpIHsKICAgIHJl
dHVybiAoQ09SQkE6OkZpeGVkRGVmX3B0cikgX2RvX3RoaXMoQ09SQkE6OkZpeGVkRGVmOjpfUERf
cmVwb0lkKTsKICB9Cn07CgpjbGFzcyBTZXF1ZW5jZURlZiA6CiAgcHVibGljIHZpcnR1YWwgQ09S
QkE6Ol9pbXBsX1NlcXVlbmNlRGVmLAogIHB1YmxpYyB2aXJ0dWFsIElETFR5cGUKewpwdWJsaWM6
CiAgdmlydHVhbCB+U2VxdWVuY2VEZWYoKTsKCiAgaW5saW5lIENPUkJBOjpTZXF1ZW5jZURlZl9w
dHIgX3RoaXMoKSB7CiAgICByZXR1cm4gKENPUkJBOjpTZXF1ZW5jZURlZl9wdHIpIF9kb190aGlz
KENPUkJBOjpTZXF1ZW5jZURlZjo6X1BEX3JlcG9JZCk7CiAgfQp9OwoKY2xhc3MgQXJyYXlEZWYg
OgogIHB1YmxpYyB2aXJ0dWFsIENPUkJBOjpfaW1wbF9BcnJheURlZiwKICBwdWJsaWMgdmlydHVh
bCBJRExUeXBlCnsKcHVibGljOgogIHZpcnR1YWwgfkFycmF5RGVmKCk7CgogIGlubGluZSBDT1JC
QTo6QXJyYXlEZWZfcHRyIF90aGlzKCkgewogICAgcmV0dXJuIChDT1JCQTo6QXJyYXlEZWZfcHRy
KSBfZG9fdGhpcyhDT1JCQTo6QXJyYXlEZWY6Ol9QRF9yZXBvSWQpOwogIH0KfTsKCmNsYXNzIEV4
Y2VwdGlvbkRlZiA6CiAgcHVibGljIHZpcnR1YWwgQ09SQkE6Ol9pbXBsX0V4Y2VwdGlvbkRlZiwK
ICBwdWJsaWMgdmlydHVhbCBDb250YWluZWQsCiAgICBwdWJsaWMgdmlydHVhbCBDb250YWluZXIK
ewpwdWJsaWM6CiAgdmlydHVhbCB+RXhjZXB0aW9uRGVmKCk7CgogIGlubGluZSBDT1JCQTo6RXhj
ZXB0aW9uRGVmX3B0ciBfdGhpcygpIHsKICAgIHJldHVybiAoQ09SQkE6OkV4Y2VwdGlvbkRlZl9w
dHIpIF9kb190aGlzKENPUkJBOjpFeGNlcHRpb25EZWY6Ol9QRF9yZXBvSWQpOwogIH0KfTsKCmNs
YXNzIEF0dHJpYnV0ZURlZiA6CiAgcHVibGljIHZpcnR1YWwgQ09SQkE6Ol9pbXBsX0F0dHJpYnV0
ZURlZiwKICBwdWJsaWMgdmlydHVhbCBDb250YWluZWQKewpwdWJsaWM6CiAgdmlydHVhbCB+QXR0
cmlidXRlRGVmKCk7CgogIGlubGluZSBDT1JCQTo6QXR0cmlidXRlRGVmX3B0ciBfdGhpcygpIHsK
ICAgIHJldHVybiAoQ09SQkE6OkF0dHJpYnV0ZURlZl9wdHIpIF9kb190aGlzKENPUkJBOjpBdHRy
aWJ1dGVEZWY6Ol9QRF9yZXBvSWQpOwogIH0KfTsKCmNsYXNzIE9wZXJhdGlvbkRlZiA6CiAgcHVi
bGljIHZpcnR1YWwgQ09SQkE6Ol9pbXBsX09wZXJhdGlvbkRlZiwKICBwdWJsaWMgdmlydHVhbCBD
b250YWluZWQKewpwdWJsaWM6CiAgdmlydHVhbCB+T3BlcmF0aW9uRGVmKCk7CgogIGlubGluZSBD
T1JCQTo6T3BlcmF0aW9uRGVmX3B0ciBfdGhpcygpIHsKICAgIHJldHVybiAoQ09SQkE6Ok9wZXJh
dGlvbkRlZl9wdHIpIF9kb190aGlzKENPUkJBOjpPcGVyYXRpb25EZWY6Ol9QRF9yZXBvSWQpOwog
IH0KfTsKCmNsYXNzIEludGVyZmFjZURlZiA6CiAgcHVibGljIHZpcnR1YWwgQ09SQkE6Ol9pbXBs
X0ludGVyZmFjZURlZiwKICBwdWJsaWMgdmlydHVhbCBDb250YWluZXIsCiAgICBwdWJsaWMgdmly
dHVhbCBDb250YWluZWQsCiAgICBwdWJsaWMgdmlydHVhbCBJRExUeXBlCnsKcHVibGljOgogIHZp
cnR1YWwgfkludGVyZmFjZURlZigpOwoKICBpbmxpbmUgQ09SQkE6OkludGVyZmFjZURlZl9wdHIg
X3RoaXMoKSB7CiAgICByZXR1cm4gKENPUkJBOjpJbnRlcmZhY2VEZWZfcHRyKSBfZG9fdGhpcyhD
T1JCQTo6SW50ZXJmYWNlRGVmOjpfUERfcmVwb0lkKTsKICB9Cn07CgpjbGFzcyBWYWx1ZU1lbWJl
ckRlZiA6CiAgcHVibGljIHZpcnR1YWwgQ09SQkE6Ol9pbXBsX1ZhbHVlTWVtYmVyRGVmLAogIHB1
YmxpYyB2aXJ0dWFsIENvbnRhaW5lZAp7CnB1YmxpYzoKICB2aXJ0dWFsIH5WYWx1ZU1lbWJlckRl
ZigpOwoKICBpbmxpbmUgQ09SQkE6OlZhbHVlTWVtYmVyRGVmX3B0ciBfdGhpcygpIHsKICAgIHJl
dHVybiAoQ09SQkE6OlZhbHVlTWVtYmVyRGVmX3B0cikgX2RvX3RoaXMoQ09SQkE6OlZhbHVlTWVt
YmVyRGVmOjpfUERfcmVwb0lkKTsKICB9Cn07CgpjbGFzcyBWYWx1ZURlZiA6CiAgcHVibGljIHZp
cnR1YWwgQ09SQkE6Ol9pbXBsX1ZhbHVlRGVmLAogIHB1YmxpYyB2aXJ0dWFsIENvbnRhaW5lciwK
ICAgIHB1YmxpYyB2aXJ0dWFsIENvbnRhaW5lZCwKICAgIHB1YmxpYyB2aXJ0dWFsIElETFR5cGUK
ewpwdWJsaWM6CiAgdmlydHVhbCB+VmFsdWVEZWYoKTsKCiAgaW5saW5lIENPUkJBOjpWYWx1ZURl
Zl9wdHIgX3RoaXMoKSB7CiAgICByZXR1cm4gKENPUkJBOjpWYWx1ZURlZl9wdHIpIF9kb190aGlz
KENPUkJBOjpWYWx1ZURlZjo6X1BEX3JlcG9JZCk7CiAgfQp9OwoKY2xhc3MgVmFsdWVCb3hEZWYg
OgogIHB1YmxpYyB2aXJ0dWFsIENPUkJBOjpfaW1wbF9WYWx1ZUJveERlZiwKICBwdWJsaWMgdmly
dHVhbCBUeXBlZGVmRGVmCnsKcHVibGljOgogIHZpcnR1YWwgflZhbHVlQm94RGVmKCk7CgogIGlu
bGluZSBDT1JCQTo6VmFsdWVCb3hEZWZfcHRyIF90aGlzKCkgewogICAgcmV0dXJuIChDT1JCQTo6
VmFsdWVCb3hEZWZfcHRyKSBfZG9fdGhpcyhDT1JCQTo6VmFsdWVCb3hEZWY6Ol9QRF9yZXBvSWQp
OwogIH0KfTsKCmNsYXNzIEFic3RyYWN0SW50ZXJmYWNlRGVmIDoKICBwdWJsaWMgdmlydHVhbCBD
T1JCQTo6X2ltcGxfQWJzdHJhY3RJbnRlcmZhY2VEZWYsCiAgcHVibGljIHZpcnR1YWwgSW50ZXJm
YWNlRGVmCnsKcHVibGljOgogIHZpcnR1YWwgfkFic3RyYWN0SW50ZXJmYWNlRGVmKCk7CgogIGlu
bGluZSBDT1JCQTo6QWJzdHJhY3RJbnRlcmZhY2VEZWZfcHRyIF90aGlzKCkgewogICAgcmV0dXJu
IChDT1JCQTo6QWJzdHJhY3RJbnRlcmZhY2VEZWZfcHRyKSBfZG9fdGhpcyhDT1JCQTo6QWJzdHJh
Y3RJbnRlcmZhY2VEZWY6Ol9QRF9yZXBvSWQpOwogIH0KfTsKIyAyNjU0ICIuLi8uLi8uLi8uLi9p
bmNsdWRlL29tbmlPUkIzL0NPUkJBLmgiIDIKCgp9CgoKIyAxICIuLi8uLi8uLi8uLi9pbmNsdWRl
L29tbmlPUkIzL2JvYS5oIiAxCiMgNTIgIi4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvYm9h
LmgiCmNsYXNzIG9tbmlPcmJCb2FTZXJ2YW50IDogcHVibGljIHZpcnR1YWwgb21uaVNlcnZhbnQg
ewpwdWJsaWM6CiAgdmlydHVhbCB+b21uaU9yYkJvYVNlcnZhbnQoKTsKCiAgb21uaU9yYkJvYVNl
cnZhbnQoKTsKICBpbmxpbmUgb21uaU9yYkJvYVNlcnZhbnQoY29uc3Qgb21uaU9yYkJvYUtleSYg
aykKICAgIDogcGRfa2V5KGspIHt9CgogIHZvaWQgX2Rpc3Bvc2UoKTsKCgoKCgoKICB2b2lkIF9v
YmpfaXNfcmVhZHkoKTsKCgogIHZvaWQqIF90aGlzKGNvbnN0IGNoYXIqIHJlcG9JZCk7CgoKCiAg
aW5saW5lIGNvbnN0IG9tbmlPcmJCb2FLZXkmIF9rZXkoKSBjb25zdCB7IHJldHVybiBwZF9rZXk7
IH0KICBpbmxpbmUgdm9pZCBfb2JqX2lzX3JlYWR5KENPUkJBOjpCT0FfcHRyKSB7IF9vYmpfaXNf
cmVhZHkoKTsgfQogIGlubGluZSBDT1JCQTo6Qk9BX3B0ciBfYm9hKCkgeyByZXR1cm4gQ09SQkE6
OkJPQTo6Z2V0Qk9BKCk7IH0KCnByaXZhdGU6CiAgdmlydHVhbCBvbW5pT2JqUmVmKiBfZG9fZ2V0
X2ludGVyZmFjZSgpOwoKCnByb3RlY3RlZDoKICBvbW5pT3JiQm9hS2V5IHBkX2tleTsKCgoKCn07
CiMgMjY2MCAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9DT1JCQS5oIiAyCiMgNzkgInBv
cnRhYmxlc2VydmVyLmNjIiAyCiMgMSAicG9haW1wbC5oIiAxCiMgNjYgInBvYWltcGwuaCIKIyAx
ICJvYmplY3RBZGFwdGVyLmgiIDEKIyA0OCAib2JqZWN0QWRhcHRlci5oIgojIDEgIi4uL29tbml1
dGlsaXRpZXMuaCIgMQojIDM0ICIuLi9vbW5pdXRpbGl0aWVzLmgiCnRlbXBsYXRlIDxjbGFzcyBJ
bnB1dEl0ZXJhdG9yLCBjbGFzcyBPdXRwdXRJdGVyYXRvcj4KaW5saW5lIE91dHB1dEl0ZXJhdG9y
IG9tbmljb3B5KElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dEl0ZXJhdG9yIHJlc3VsdCkKewogIHdoaWxl
KCBmaXJzdCAhPSBsYXN0ICkgKnJlc3VsdCsrID0gKmZpcnN0Kys7CgogIHJldHVybiByZXN1bHQ7
Cn0KIyA1MiAiLi4vb21uaXV0aWxpdGllcy5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3Mgb21u
aXZlY3RvciB7CnB1YmxpYzoKICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIFQmIHJl
ZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IFQmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIFQq
IHBvaW50ZXI7CiAgdHlwZWRlZiBUKiBpdGVyYXRvcjsKICB0eXBlZGVmIGNvbnN0IFQqIGNvbnN0
X2l0ZXJhdG9yOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKCiAgaW5saW5lIG9tbml2ZWN0
b3IoKSA6IHN0YXJ0KDApLCBmaW5pc2goMCksIGVuZF9vZl9zdG9yYWdlKDApIHt9CiAgaW5saW5l
IG9tbml2ZWN0b3Ioc2l6ZV90eXBlIG4sIGNvbnN0IFQmIHZhbHVlID0gVCgpKQogICAgOiBzdGFy
dCgwKSwgZmluaXNoKDApLCBlbmRfb2Zfc3RvcmFnZSgwKSB7CiAgICByZXNlcnZlKG4pOwogICAg
d2hpbGUoIG4tLSApIHB1c2hfYmFjayh2YWx1ZSk7CiAgfQogIGlubGluZSB+b21uaXZlY3Rvcigp
IHsgZGVhbGxvY2F0ZSgpOyB9CgogIGlubGluZSB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIG4pIHsK
ICAgIGlmKCBjYXBhY2l0eSgpIDwgbiApIHsKICAgICAgc2l6ZV90eXBlIG9sZF9zaXplID0gc2l6
ZSgpOwogICAgICBpdGVyYXRvciB0bXAgPSBhbGxvY2F0ZShuKTsKICAgICAgb21uaWNvcHkoc3Rh
cnQsIGZpbmlzaCwgdG1wKTsKICAgICAgZGVhbGxvY2F0ZSgpOwogICAgICBzdGFydCA9IHRtcDsK
ICAgICAgZmluaXNoID0gc3RhcnQgKyBvbGRfc2l6ZTsKICAgICAgZW5kX29mX3N0b3JhZ2UgPSBz
dGFydCArIG47CiAgICB9CiAgfQoKICBpbmxpbmUgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBz
dGFydDsgfQogIGlubGluZSBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIHN0
YXJ0OyB9CiAgaW5saW5lIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGZpbmlzaDsgfQogIGlubGlu
ZSBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBmaW5pc2g7IH0KICBpbmxpbmUg
c2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoZmluaXNoIC0gc3RhcnQp
OyB9CiAgaW5saW5lIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0IHsKICAgIHJldHVybiBzaXpl
X3R5cGUoZW5kX29mX3N0b3JhZ2UgLSBzdGFydCk7CiAgfQogIGlubGluZSBpbnQgZW1wdHkoKSBj
b25zdCB7IHJldHVybiBzdGFydCA9PSBmaW5pc2g7IH0KICBpbmxpbmUgcmVmZXJlbmNlIG9wZXJh
dG9yW10oc2l6ZV90eXBlIG4pIHsgcmV0dXJuICooc3RhcnQgKyBuKTsgfQogIGlubGluZSBjb25z
dF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgbikgY29uc3QgeyByZXR1cm4gKihzdGFy
dCArIG4pOyB9CiAgaW5saW5lIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpzdGFydDsgfQog
IGlubGluZSByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZmluaXNoIC0gMSk7IH0KICBpbmxp
bmUgdm9pZCBwdXNoX2JhY2soY29uc3QgVCYgeCkgewogICAgaWYoIGZpbmlzaCA9PSBlbmRfb2Zf
c3RvcmFnZSApIG1vcmUoKTsKICAgICpmaW5pc2grKyA9IHg7CiAgfQogIGlubGluZSB2b2lkIHBv
cF9iYWNrKCkgeyBmaW5pc2gtLTsgfQogIGlubGluZSBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBw
b3NpdGlvbikgewogICAgaWYoIHBvc2l0aW9uICsgMSAhPSBmaW5pc2ggKQogICAgICBvbW5pY29w
eShwb3NpdGlvbiArIDEsIGZpbmlzaCwgcG9zaXRpb24pOwogICAgZmluaXNoLS07CiAgICByZXR1
cm4gcG9zaXRpb247CiAgfQogIGlubGluZSBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBmaXJzdCwg
aXRlcmF0b3IgbGFzdCkgewogICAgaXRlcmF0b3IgaSA9IG9tbmljb3B5KGxhc3QsIGZpbmlzaCwg
Zmlyc3QpOwogICAgZmluaXNoIC09IChsYXN0IC0gZmlyc3QpOwogICAgcmV0dXJuIGZpcnN0Owog
IH0KIyAxMjIgIi4uL29tbml1dGlsaXRpZXMuaCIKcHJpdmF0ZToKICBpbmxpbmUgdm9pZCBtb3Jl
KCkgeyByZXNlcnZlKHNpemUoKSA/IHNpemUoKSAqIDIgOiAxKTsgfQogIGlubGluZSB2b2lkIGRl
YWxsb2NhdGUoKSB7IGlmKCBzdGFydCApIGRlbGV0ZVtdIHN0YXJ0OyB9CiAgaW5saW5lIGl0ZXJh
dG9yIGFsbG9jYXRlKHNpemVfdHlwZSBuKSB7CiAgICByZXR1cm4gbmV3IHZhbHVlX3R5cGVbbl07
CiAgfQoKICBvbW5pdmVjdG9yPFQ+JiBvcGVyYXRvcj0oY29uc3Qgb21uaXZlY3RvcjxUPiYgeCk7
CgoKICBpdGVyYXRvciBzdGFydDsKICBpdGVyYXRvciBmaW5pc2g7CiAgaXRlcmF0b3IgZW5kX29m
X3N0b3JhZ2U7Cn07CiMgNDkgIm9iamVjdEFkYXB0ZXIuaCIgMgoKCgoKCgpjbGFzcyByb3BlRmFj
dG9yeUxpc3Q7CmNsYXNzIFJvcGU7CmNsYXNzIEdJT1BfUzsKY2xhc3Mgb21uaUNhbGxEZXNjcmlw
dG9yOwpjbGFzcyBvbW5pTG9jYWxJZGVudGl0eTsKCgpjbGFzcyBvbW5pT2JqQWRhcHRlciB7CnB1
YmxpYzoKICB2aXJ0dWFsIH5vbW5pT2JqQWRhcHRlcigpOwoKICBzdGF0aWMgb21uaU9iakFkYXB0
ZXIqIGdldEFkYXB0ZXIoY29uc3QgX0NPUkJBX09jdGV0KiBrZXksIGludCBrZXlzaXplKTsKCgoK
CgogIHN0YXRpYyBfQ09SQkFfQm9vbGVhbiBpc0luaXRpYWxpc2VkKCk7CgogIHN0YXRpYyB2b2lk
IGluaXRpYWxpc2UoKTsKCgoKCgoKCiAgc3RhdGljIHZvaWQgc2h1dGRvd24oKTsKCgoKCgoKICB2
b2lkIGFkYXB0ZXJBY3RpdmUoKTsKICB2b2lkIGFkYXB0ZXJJbmFjdGl2ZSgpOwoKCgoKCgogIHZv
aWQgd2FpdEZvckFjdGl2ZVJlcXVlc3RzVG9Db21wbGV0ZShpbnQgbG9ja2VkKTsKCgogIHZvaWQg
d2FpdEZvckFsbFJlcXVlc3RzVG9Db21wbGV0ZShpbnQgbG9ja2VkKTsKCgogIHZpcnR1YWwgdm9p
ZCBpbmNyUmVmQ291bnQoKSA9IDA7CiAgdmlydHVhbCB2b2lkIGRlY3JSZWZDb3VudCgpID0gMDsK
CgogIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChHSU9QX1MmLCBvbW5pTG9jYWxJZGVudGl0eSopID0g
MDsKCgogIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChHSU9QX1MmLCBjb25zdCBfQ09SQkFfT2N0ZXQq
IGtleSwgaW50IGtleXNpemUpID0gMDsKCgoKICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gob21uaUNh
bGxEZXNjcmlwdG9yJiwgb21uaUxvY2FsSWRlbnRpdHkqKSA9IDA7CgoKICB2aXJ0dWFsIGludCBv
YmplY3RFeGlzdHMoY29uc3QgX0NPUkJBX09jdGV0KiBrZXksIGludCBrZXlzaXplKSA9IDA7CgoK
CgoKCiAgaW5saW5lIHZvaWQgZW50ZXJBZGFwdGVyKCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgIGRveyBpZiggIShwZF9uUmVx
SW5UaGlzID49IDApICkgb21uaTo6YXNzZXJ0RmFpbCgib2JqZWN0QWRhcHRlci5oIiwxMjYsICJw
ZF9uUmVxSW5UaGlzID49IDAiKTsgfXdoaWxlKDApOwogICAgcGRfblJlcUluVGhpcysrOwogIH0K
CgogIGlubGluZSB2b2lkIHN0YXJ0UmVxdWVzdCgpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICBkb3sgaWYoICEocGRfblJlcUFj
dGl2ZSA+PSAwKSApIG9tbmk6OmFzc2VydEZhaWwoIm9iamVjdEFkYXB0ZXIuaCIsMTMzLCAicGRf
blJlcUFjdGl2ZSA+PSAwIik7IH13aGlsZSgwKTsKICAgIHBkX25SZXFBY3RpdmUrKzsKICB9CgoK
CgoKICBpbmxpbmUgdm9pZCBsZWF2ZUFkYXB0ZXIoKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgZG97IGlmKCAhKHBkX25SZXFJ
blRoaXMgPiAwKSApIG9tbmk6OmFzc2VydEZhaWwoIm9iamVjdEFkYXB0ZXIuaCIsMTQzLCAicGRf
blJlcUluVGhpcyA+IDAiKTsgfXdoaWxlKDApOyBkb3sgaWYoICEocGRfblJlcUFjdGl2ZSA+IDAp
ICkgb21uaTo6YXNzZXJ0RmFpbCgib2JqZWN0QWRhcHRlci5oIiwxNDMsICJwZF9uUmVxQWN0aXZl
ID4gMCIpOyB9d2hpbGUoMCk7CiAgICAtLXBkX25SZXFJblRoaXM7CiAgICAtLXBkX25SZXFBY3Rp
dmU7CiAgICBpZiggIXBkX25SZXFBY3RpdmUgJiYgcGRfc2lnbmFsT25aZXJvSW52b2NhdGlvbnMg
KQogICAgICBwZF9zaWduYWwuYnJvYWRjYXN0KCk7CiAgfQoKCgogIGlubGluZSB2b2lkIGV4aXRB
ZGFwdGVyKGludCBsb2VudHJ5PTAsIGludCBsb2V4aXQ9MCkgewogICAgaWYoICFsb2VudHJ5ICkg
b21uaTo6aW50ZXJuYWxMb2NrLT5sb2NrKCk7CiAgICBkb3sgaWYoICEocGRfblJlcUluVGhpcyA+
IDApICkgb21uaTo6YXNzZXJ0RmFpbCgib2JqZWN0QWRhcHRlci5oIiwxNTQsICJwZF9uUmVxSW5U
aGlzID4gMCIpOyB9d2hpbGUoMCk7CiAgICAtLXBkX25SZXFJblRoaXM7CiAgICBpbnQgZG9fc2ln
bmFsID0gIXBkX25SZXFJblRoaXMgJiYgcGRfc2lnbmFsT25aZXJvSW52b2NhdGlvbnM7CiAgICBp
ZiggIWxvZXhpdCApIG9tbmk6OmludGVybmFsTG9jay0+dW5sb2NrKCk7CiAgICBpZiggZG9fc2ln
bmFsICkgcGRfc2lnbmFsLmJyb2FkY2FzdCgpOwogIH0KCiAgaW5saW5lIHZvaWQgZGV0YWNoZWRf
b2JqZWN0KCkgewogICAgc2RfZGV0YWNoZWRPYmplY3RMb2NrLmxvY2soKTsKICAgIHBkX25EZXRh
Y2hlZE9iamVjdHMrKzsKICAgIHNkX2RldGFjaGVkT2JqZWN0TG9jay51bmxvY2soKTsKICB9Cgog
IHZvaWQgbWV0X2RldGFjaGVkX29iamVjdCgpOwoKCgoKCiAgdm9pZCB3YWl0X2Zvcl9kZXRhY2hl
ZF9vYmplY3RzKCk7CgoKCiAgdmlydHVhbCB2b2lkIGxhc3RJbnZvY2F0aW9uSGFzQ29tcGxldGVk
KG9tbmlMb2NhbElkZW50aXR5KiBpZCkgPSAwOwojIDE5MCAib2JqZWN0QWRhcHRlci5oIgogIHN0
YXRpYyByb3BlRmFjdG9yeUxpc3QqIGluY29taW5nUm9wZUZhY3RvcmllcygpOwoKICBzdGF0aWMg
Um9wZSogZGVmYXVsdExvb3BCYWNrKCk7CgoKICBzdHJ1Y3QgTGlzdGVuUG9ydCB7CiAgICBpbmxp
bmUgTGlzdGVuUG9ydChjb25zdCBjaGFyKiBoLCB1bnNpZ25lZCBwKSA6IGhvc3QoaCksIHBvcnQo
cCkge30KICAgIGlubGluZSBMaXN0ZW5Qb3J0KCkgOiBwb3J0KDApIHt9CiAgICBDT1JCQTo6U3Ry
aW5nX3ZhciBob3N0OwogICAgdW5zaWduZWQgcG9ydDsKICB9OwogIHR5cGVkZWYgb21uaXZlY3Rv
cjxMaXN0ZW5Qb3J0PiBMaXN0ZW5Qb3J0TGlzdDsKCiAgc3RydWN0IE9wdGlvbnMgewogICAgaW5s
aW5lIE9wdGlvbnMoKSA6IG5vQm9vdHN0cmFwQWdlbnQoMCkge30KCiAgICBfQ09SQkFfQm9vbGVh
biBub0Jvb3RzdHJhcEFnZW50OwogICAgTGlzdGVuUG9ydExpc3QgaW5jb21pbmdQb3J0czsKICB9
OwoKICBzdGF0aWMgT3B0aW9ucyBvcHRpb25zOwoKCnByb3RlY3RlZDoKICBvbW5pT2JqQWRhcHRl
cigpOwoKCiAgaW50IHBkX25SZXFJblRoaXM7CgoKCiAgaW50IHBkX25SZXFBY3RpdmU7CgoKCgog
IGludCBwZF9zaWduYWxPblplcm9JbnZvY2F0aW9uczsKCgoKCgoKICBvbW5pX3RyYWNlZGNvbmRp
dGlvbiBwZF9zaWduYWw7CgoKCgoKCgpwcml2YXRlOgogIHN0YXRpYyBvbW5pX3RyYWNlZG11dGV4
IHNkX2RldGFjaGVkT2JqZWN0TG9jazsKICBzdGF0aWMgb21uaV90cmFjZWRjb25kaXRpb24gc2Rf
ZGV0YWNoZWRPYmplY3RTaWduYWw7CgogIGludCBwZF9uRGV0YWNoZWRPYmplY3RzOwoKCgoKICBp
bnQgcGRfc2lnbmFsT25aZXJvRGV0YWNoZWRPYmplY3RzOwoKCgoKCgogIGludCBwZF9pc0FjdGl2
ZTsKCgoKfTsKCgpjbGFzcyBvbW5pT2JqQWRhcHRlcl92YXIgewpwdWJsaWM6CiAgdHlwZWRlZiBv
bW5pT2JqQWRhcHRlcl92YXIgVF92YXI7CiAgdHlwZWRlZiBvbW5pT2JqQWRhcHRlciogVF9wdHI7
CgogIGlubGluZSBvbW5pT2JqQWRhcHRlcl92YXIoKSA6IHBkX3ZhbCgwKSB7fQogIGlubGluZSBv
bW5pT2JqQWRhcHRlcl92YXIoVF9wdHIgcCkgOiBwZF92YWwocCkge30KICBpbmxpbmUgfm9tbmlP
YmpBZGFwdGVyX3ZhcigpIHsgaWYoIHBkX3ZhbCApIHBkX3ZhbC0+ZGVjclJlZkNvdW50KCk7IH0K
CiAgaW5saW5lIFRfdmFyJiBvcGVyYXRvciA9IChUX3B0ciBwKSB7CiAgICBkb3sgaWYoICEoIXBk
X3ZhbCkgKSBvbW5pOjphc3NlcnRGYWlsKCJvYmplY3RBZGFwdGVyLmgiLDI3NCwgIiFwZF92YWwi
KTsgfXdoaWxlKDApOwogICAgcGRfdmFsID0gcDsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlu
bGluZSBUX3B0ciBvcGVyYXRvciAtPiAoKSB7IHJldHVybiBwZF92YWw7IH0KICBpbmxpbmUgb3Bl
cmF0b3IgVF9wdHIgKCkgeyByZXR1cm4gcGRfdmFsOyB9Cgpwcml2YXRlOgogIG9tbmlPYmpBZGFw
dGVyX3Zhcihjb25zdCBUX3ZhciYpOwogIFRfdmFyJiBvcGVyYXRvciA9IChjb25zdCBUX3ZhciYp
OwoKICBUX3B0ciBwZF92YWw7Cn07CiMgNjcgInBvYWltcGwuaCIgMgojIDEgInBvYW1hbmFnZXIu
aCIgMQojIDU1ICJwb2FtYW5hZ2VyLmgiCmNsYXNzIG9tbmlPcmJQT0E7CgoKY2xhc3Mgb21uaU9y
YlBPQU1hbmFnZXIgOiBwdWJsaWMgUG9ydGFibGVTZXJ2ZXI6OlBPQU1hbmFnZXIgewpwdWJsaWM6
CiAgdmlydHVhbCB+b21uaU9yYlBPQU1hbmFnZXIoKTsKICBpbmxpbmUgb21uaU9yYlBPQU1hbmFn
ZXIoaW50IGlzX25pbCA9IDApCiAgICA6IFBPQU1hbmFnZXIoaXNfbmlsKSwKICAgICAgcGRfcmVm
Q291bnQoMSksCiAgICAgIHBkX3N0YXRlKEhPTERJTkcpCiAgICB7fQoKCgoKICB2aXJ0dWFsIHZv
aWQgYWN0aXZhdGUoKTsKICB2aXJ0dWFsIHZvaWQgaG9sZF9yZXF1ZXN0cyhDT1JCQTo6Qm9vbGVh
biB3YWl0X2Zvcl9jb21wbGV0aW9uKTsKICB2aXJ0dWFsIHZvaWQgZGlzY2FyZF9yZXF1ZXN0cyhD
T1JCQTo6Qm9vbGVhbiB3YWl0X2Zvcl9jb21wbGV0aW9uKTsKICB2aXJ0dWFsIHZvaWQgZGVhY3Rp
dmF0ZShDT1JCQTo6Qm9vbGVhbiBldGhlcmVhbGl6ZV9vYmplY3RzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIENPUkJBOjpCb29sZWFuIHdhaXRfZm9yX2NvbXBsZXRpb24pOwogIHZpcnR1YWwg
U3RhdGUgZ2V0X3N0YXRlKCk7CgoKCgogIHZpcnR1YWwgdm9pZCogX3B0clRvT2JqUmVmKGNvbnN0
IGNoYXIqIHJlcG9JZCk7CiAgdmlydHVhbCB2b2lkIF9OUF9pbmNyUmVmQ291bnQoKTsKICB2aXJ0
dWFsIHZvaWQgX05QX2RlY3JSZWZDb3VudCgpOwoKCgoKICB2b2lkIGdhaW5fcG9hKG9tbmlPcmJQ
T0EqIHBvYSk7CgoKCiAgdm9pZCBsb3NlX3BvYShvbW5pT3JiUE9BKiBwb2EpOwoKCiAgdHlwZWRl
ZiBfQ09SQkFfUHNldWRvVmFsdWVfU2VxdWVuY2U8b21uaU9yYlBPQSo+IFBPQVNlcTsKCgpwcml2
YXRlOgogIFBPQVNlcSBwZF9wb2FzOwoKCgogIGludCBwZF9yZWZDb3VudDsKICBTdGF0ZSBwZF9z
dGF0ZTsKfTsKIyA2OCAicG9haW1wbC5oIiAyCiMgMSAidGFza3F1ZXVlLmgiIDEKIyA0MyAidGFz
a3F1ZXVlLmgiCmNsYXNzIG9tbmlUYXNrUXVldWUgOiBwdWJsaWMgb21uaV90aHJlYWQgewpwdWJs
aWM6CiAgY2xhc3MgVGFzazsKICB0eXBlZGVmIHZvaWQgKCpUYXNrRm4pKHZvaWQqKTsKCiAgdmly
dHVhbCB+b21uaVRhc2tRdWV1ZSgpOwogIG9tbmlUYXNrUXVldWUoKTsKICB2b2lkIGluc2VydChU
YXNrKik7CiAgdm9pZCBpbnNlcnQoVGFza0ZuLCB2b2lkKik7CiAgdm9pZCBkaWUoKTsKCiAgY2xh
c3MgVGFzayB7CiAgcHVibGljOgogICAgaW5saW5lIFRhc2soKSA6IHBkX25leHQoMCkge30KICAg
IHZpcnR1YWwgflRhc2soKTsKICAgIHZpcnR1YWwgdm9pZCBkb2l0KCkgPSAwOwoKICBwcml2YXRl
OgogICAgZnJpZW5kIGNsYXNzIG9tbmlUYXNrUXVldWU7CiAgICBUYXNrKGNvbnN0IFRhc2smKTsK
ICAgIFRhc2smIG9wZXJhdG9yPShjb25zdCBUYXNrJik7CgogICAgVGFzayogcGRfbmV4dDsKICB9
OwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIHJ1bl91bmRldGFjaGVkKHZvaWQqKTsKCiAgb21u
aV90cmFjZWRtdXRleCBwZF9sb2NrOwogIG9tbmlfdHJhY2VkY29uZGl0aW9uIHBkX2NvbmQ7CiAg
VGFzayogcGRfdGFza3E7CiAgVGFzayogcGRfdGFza3F0YWlsOwogIGludCBwZF9keWluZzsKfTsK
IyA2OSAicG9haW1wbC5oIiAyCgoKCgoKY2xhc3Mgb21uaU9yYlBPQU1hbmFnZXI7CgoKY2xhc3Mg
b21uaU9yYlBPQSA6IHB1YmxpYyBQb3J0YWJsZVNlcnZlcjo6UE9BLAogICAgICAgICAgICAgICAg
ICAgcHVibGljIG9tbmlPYmpBZGFwdGVyCnsKcHVibGljOgogIHZpcnR1YWwgfm9tbmlPcmJQT0Eo
KTsKCgoKCgogIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgY3JlYXRlX1BPQShjb25z
dCBjaGFyKiBhZGFwdGVyX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9ydGFi
bGVTZXJ2ZXI6OlBPQU1hbmFnZXJfcHRyIGFfUE9BTWFuYWdlciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBDT1JCQTo6UG9saWN5TGlzdCYgcG9saWNpZXMpOwogIHZpcnR1YWwg
UG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgZmluZF9QT0EoY29uc3QgY2hhciogYWRhcHRlcl9uYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xl
YW4gYWN0aXZhdGVfaXQpOwogIHZpcnR1YWwgdm9pZCBkZXN0cm95KENPUkJBOjpCb29sZWFuIGV0
aGVyZWFsaXplX29iamVjdHMsCiAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4g
d2FpdF9mb3JfY29tcGxldGlvbik7CgogIHZpcnR1YWwgY2hhciogdGhlX25hbWUoKTsKICB2aXJ0
dWFsIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIHRoZV9wYXJlbnQoKTsKICB2aXJ0dWFsIFBvcnRh
YmxlU2VydmVyOjpQT0FMaXN0KiB0aGVfY2hpbGRyZW4oKTsKICB2aXJ0dWFsIFBvcnRhYmxlU2Vy
dmVyOjpQT0FNYW5hZ2VyX3B0ciB0aGVfUE9BTWFuYWdlcigpOwogIHZpcnR1YWwgUG9ydGFibGVT
ZXJ2ZXI6OkFkYXB0ZXJBY3RpdmF0b3JfcHRyIHRoZV9hY3RpdmF0b3IoKTsKICB2aXJ0dWFsIHZv
aWQgdGhlX2FjdGl2YXRvcihQb3J0YWJsZVNlcnZlcjo6QWRhcHRlckFjdGl2YXRvcl9wdHIgYWEp
OwoKICB2aXJ0dWFsIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50TWFuYWdlcl9wdHIgZ2V0X3NlcnZh
bnRfbWFuYWdlcigpOwogIHZpcnR1YWwgdm9pZCBzZXRfc2VydmFudF9tYW5hZ2VyKFBvcnRhYmxl
U2VydmVyOjpTZXJ2YW50TWFuYWdlcl9wdHIgaW1ncik7CgogIHZpcnR1YWwgUG9ydGFibGVTZXJ2
ZXI6OlNlcnZhbnQgZ2V0X3NlcnZhbnQoKTsKICB2aXJ0dWFsIHZvaWQgc2V0X3NlcnZhbnQoUG9y
dGFibGVTZXJ2ZXI6OlNlcnZhbnQgcF9zZXJ2YW50KTsKCiAgdmlydHVhbCBQb3J0YWJsZVNlcnZl
cjo6T2JqZWN0SWQqIGFjdGl2YXRlX29iamVjdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQb3J0YWJsZVNlcnZlcjo6U2VydmFudCBwX3NlcnZhbnQpOwogIHZp
cnR1YWwgdm9pZCBhY3RpdmF0ZV9vYmplY3Rfd2l0aF9pZChjb25zdCBQb3J0YWJsZVNlcnZlcjo6
T2JqZWN0SWQmIGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3J0
YWJsZVNlcnZlcjo6U2VydmFudCBwX3NlcnZhbnQpOwogIHZpcnR1YWwgdm9pZCBkZWFjdGl2YXRl
X29iamVjdChjb25zdCBQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWQmIG9pZCk7CgogIHZpcnR1YWwg
Q09SQkE6Ok9iamVjdF9wdHIgY3JlYXRlX3JlZmVyZW5jZShjb25zdCBjaGFyKiBpbnRmKTsKICB2
aXJ0dWFsIENPUkJBOjpPYmplY3RfcHRyIGNyZWF0ZV9yZWZlcmVuY2Vfd2l0aF9pZCgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBvcnRhYmxlU2VydmVyOjpPYmpl
Y3RJZCYgb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogaW50Zik7CgogIHZpcnR1YWwKICBQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWQqIHNlcnZhbnRf
dG9faWQoUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnQgcF9zZXJ2YW50KTsKICB2aXJ0dWFsCiAgQ09S
QkE6Ok9iamVjdF9wdHIgc2VydmFudF90b19yZWZlcmVuY2UoUG9ydGFibGVTZXJ2ZXI6OlNlcnZh
bnQgcF9zZXJ2YW50KTsKICB2aXJ0dWFsCiAgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnQgcmVmZXJl
bmNlX3RvX3NlcnZhbnQoQ09SQkE6Ok9iamVjdF9wdHIgcmVmZXJlbmNlKTsKICB2aXJ0dWFsCiAg
UG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkKiByZWZlcmVuY2VfdG9faWQoQ09SQkE6Ok9iamVjdF9w
dHIgcmVmZXJlbmNlKTsKICB2aXJ0dWFsCiAgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnQgaWRfdG9f
c2VydmFudChjb25zdCBQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWQmIG9pZCk7CiAgdmlydHVhbAog
IENPUkJBOjpPYmplY3RfcHRyIGlkX3RvX3JlZmVyZW5jZShjb25zdCBQb3J0YWJsZVNlcnZlcjo6
T2JqZWN0SWQmIG9pZCk7CgoKCgoKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFuIF9ub25fZXhpc3Rl
bnQoKTsKICB2aXJ0dWFsIHZvaWQqIF9wdHJUb09ialJlZihjb25zdCBjaGFyKiByZXBvSWQpOwog
IHZpcnR1YWwgdm9pZCBfTlBfaW5jclJlZkNvdW50KCk7CiAgdmlydHVhbCB2b2lkIF9OUF9kZWNy
UmVmQ291bnQoKTsKCgoKCgogIHZpcnR1YWwgdm9pZCBpbmNyUmVmQ291bnQoKTsKICB2aXJ0dWFs
IHZvaWQgZGVjclJlZkNvdW50KCk7CiAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKEdJT1BfUyYsIG9t
bmlMb2NhbElkZW50aXR5Kik7CiAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKEdJT1BfUyYsIGNvbnN0
IF9DT1JCQV9PY3RldCoga2V5LCBpbnQga2V5c2l6ZSk7CiAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
KG9tbmlDYWxsRGVzY3JpcHRvciYsIG9tbmlMb2NhbElkZW50aXR5Kik7CiAgdmlydHVhbCBpbnQg
b2JqZWN0RXhpc3RzKGNvbnN0IF9DT1JCQV9PY3RldCoga2V5LCBpbnQga2V5c2l6ZSk7CiAgdmly
dHVhbCB2b2lkIGxhc3RJbnZvY2F0aW9uSGFzQ29tcGxldGVkKG9tbmlMb2NhbElkZW50aXR5KiBp
ZCk7CgoKCgoKICBlbnVtIHsKICAgIFJQUF9BQ1RJVkVfT0JKX01BUCA9IDAsCiAgICBSUFBfREVG
QVVMVF9TRVJWQU5UID0gMSwKICAgIFJQUF9TRVJWQU5UX01BTkFHRVIgPSAyCiAgfTsKCgogIHN0
cnVjdCBQb2xpY2llcyB7CiAgICB1bnNpZ25lZCBzaW5nbGVfdGhyZWFkZWQgOiAxOwogICAgdW5z
aWduZWQgdHJhbnNpZW50IDogMTsKICAgIHVuc2lnbmVkIG11bHRpcGxlX2lkIDogMTsKICAgIHVu
c2lnbmVkIHVzZXJfYXNzaWduZWRfaWQgOiAxOwogICAgdW5zaWduZWQgcmV0YWluX3NlcnZhbnRz
IDogMTsKICAgIHVuc2lnbmVkIHJlcV9wcm9jZXNzaW5nIDogMjsKICAgIHVuc2lnbmVkIGltcGxp
Y2l0X2FjdGl2YXRpb24gOiAxOwogIH07CgogIHR5cGVkZWYgX0NPUkJBX1BzZXVkb1ZhbHVlX1Nl
cXVlbmNlPG9tbmlPcmJQT0EqPiBDaGlsZFNlcTsKCgogIG9tbmlPcmJQT0EoY29uc3QgY2hhciog
bmFtZSwgb21uaU9yYlBPQU1hbmFnZXIqIG1hbmFnZXIsCiAgICAgICAgICAgICBjb25zdCBQb2xp
Y2llcyYgcG9saWNpZXMsIG9tbmlPcmJQT0EqIHBhcmVudCk7CgoKICBvbW5pT3JiUE9BKCk7CgoK
ICB2b2lkIGRvX2Rlc3Ryb3koX0NPUkJBX0Jvb2xlYW4gZXRoZXJlYWxpemVfb2JqZWN0cyk7CiMg
MTk0ICJwb2FpbXBsLmgiCiAgdm9pZCBwbV9jaGFuZ2Vfc3RhdGUob21uaU9yYlBPQU1hbmFnZXI6
OlN0YXRlIG5ld19zdGF0ZSk7CgoKCiAgdm9pZCBwbV93YWl0Rm9yUmVxQ21wbHRuT3JTdHRDaG5n
ZShvbW5pT3JiUE9BTWFuYWdlcjo6U3RhdGUgc3RhdGUpOwoKCgoKICB2b2lkIHBtX2RlYWN0aXZh
dGUoX0NPUkJBX0Jvb2xlYW4gZXRoZXJlYWxpemVfb2JqZWN0cyk7CgoKCiAgdm9pZCogc2VydmFu
dF9fdGhpcyhQb3J0YWJsZVNlcnZlcjo6U2VydmFudCBzZXJ2YW50LCBjb25zdCBjaGFyKiByZXBv
SWQpOwoKCgogIHN0YXRpYyBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciByb290UE9BKGludCBpbml0
X2lmX25vbmUgPSAxKTsKCgoKCgoKCiAgc3RhdGljIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIG9t
bmlJTlNQT0EoKTsKIyAyMjkgInBvYWltcGwuaCIKICBzdGF0aWMgdm9pZCBzaHV0ZG93bigpOwoK
CgoKCgogIHN0YXRpYyBvbW5pT3JiUE9BKiBnZXRBZGFwdGVyKGNvbnN0IF9DT1JCQV9PY3RldCog
a2V5LCBpbnQga2V5c2l6ZSk7CgoKCgoKCgpwcml2YXRlOgogIHZvaWQgY3JlYXRlX2tleShvbW5p
T2JqS2V5JiBrZXlfb3V0LCBjb25zdCBDT1JCQTo6T2N0ZXQqIGlkLCBpbnQgaWRzaXplKTsKCiAg
dm9pZCBjcmVhdGVfbmV3X2tleShvbW5pT2JqS2V5JiBrZXlfb3V0LCBjb25zdCBDT1JCQTo6T2N0
ZXQqKiBpZCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICBpbnQqIGlkc2l6ZSA9IDApOwoKCiAg
b21uaU9yYlBPQSogZmluZF9jaGlsZChjb25zdCBjaGFyKiBuYW1lKTsKICBvbW5pT3JiUE9BKiBm
aW5kX2NoaWxkKGNvbnN0IGNoYXIqIG5hbWVfc3RhcnQsIGNvbnN0IGNoYXIqIG5hbWVfZW5kKTsK
CgoKCiAgdm9pZCBpbnNlcnRfY2hpbGQob21uaU9yYlBPQSogY2hpbGQpOwoKCiAgdm9pZCBsb3Nl
X2NoaWxkKG9tbmlPcmJQT0EqIGNoaWxkKTsKCgoKCiAgaW50IGFkYXB0ZXJfbmFtZV9pc192YWxp
ZChjb25zdCBjaGFyKiBuYW1lKTsKCgogIHZvaWQgc3luY2hyb25pc2VfcmVxdWVzdChvbW5pTG9j
YWxJZGVudGl0eSogbGlkKTsKIyAyNzggInBvYWltcGwuaCIKICB2b2lkIGRlYWN0aXZhdGVfb2Jq
ZWN0cyhvbW5pTG9jYWxJZGVudGl0eSogaWRsZV9vYmpzKTsKCgoKCiAgdm9pZCBjb21wbGV0ZV9v
YmplY3RfZGVhY3RpdmF0aW9uKG9tbmlMb2NhbElkZW50aXR5KiBpZCk7CgoKCgoKCgogIHZvaWQg
ZXRoZXJlYWxpc2Vfb2JqZWN0cyhvbW5pTG9jYWxJZGVudGl0eSogaWRfbGlzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0NPUkJBX0Jvb2xlYW4gZXRoZXJlYWxpc2UsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50QWN0aXZhdG9yX3B0ciBzYSk7
CgoKCgogIHZvaWQgYWRkX29iamVjdF90b19ldGhlcmVhbGlzYXRpb25fcXVldWUoUG9ydGFibGVT
ZXJ2ZXI6OlNlcnZhbnQgcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3J0YWJs
ZVNlcnZlcjo6U2VydmFudEFjdGl2YXRvcl9wdHIgc2EsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX0NPUkJBX09jdGV0KiBrZXksIGludCBrZXlzaXplLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBjbGVhbnVwX2luX3Byb2dyZXNzLCBpbnQgZGV0YWNo
ZWQ9MCk7CgoKCgoKCgogIHZvaWQgZGlzcGF0Y2hfdG9fZHMoR0lPUF9TJiwgY29uc3QgX0NPUkJB
X09jdGV0KiwgaW50KTsKICB2b2lkIGRpc3BhdGNoX3RvX3NhKEdJT1BfUyYsIGNvbnN0IF9DT1JC
QV9PY3RldCosIGludCk7CiAgdm9pZCBkaXNwYXRjaF90b19zbChHSU9QX1MmLCBjb25zdCBfQ09S
QkFfT2N0ZXQqLCBpbnQpOwoKCgoKICB2b2lkIGNhbGxfcG9zdGludm9rZShQb3J0YWJsZVNlcnZl
cjo6U2VydmFudExvY2F0b3JfcHRyIHNsLAogICAgICAgICAgICAgICAgICAgICAgIFBvcnRhYmxl
U2VydmVyOjpPYmplY3RJZCYgb2lkLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IG9wLAogICAgICAgICAgICAgICAgICAgICAgIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50TG9jYXRv
cjo6Q29va2llIGNvb2tpZSwKICAgICAgICAgICAgICAgICAgICAgICBQb3J0YWJsZVNlcnZlcjo6
U2VydmFudCBzZXJ2YW50KTsKCgoKICBvbW5pT3JiUE9BKiBhdHRlbXB0X3RvX2FjdGl2YXRlX2Fk
YXB0ZXIoY29uc3QgY2hhciogbmFtZSk7CiMgMzM1ICJwb2FpbXBsLmgiCiAgaW50IHN0YXJ0X2Fk
YXB0ZXJhY3RpdmF0aW5nX2NoaWxkX29yX2Jsb2NrKGNvbnN0IGNoYXIqIG5hbWUpOwoKCgoKCiAg
dm9pZCBmaW5pc2hfYWRhcHRlcmFjdGl2YXRpbmdfY2hpbGQoY29uc3QgY2hhciogbmFtZSk7CgoK
ICBpbnQgaXNfYWRhcHRlcmFjdGl2YXRpbmdfY2hpbGQoY29uc3QgY2hhciogbmFtZSk7CgoKCgoK
ICBjbGFzcyBFdGhlcmVhbGlzZXIgOiBwdWJsaWMgb21uaVRhc2tRdWV1ZTo6VGFzayB7CiAgcHVi
bGljOgogICAgaW5saW5lIEV0aGVyZWFsaXNlcihQb3J0YWJsZVNlcnZlcjo6U2VydmFudCBzLAog
ICAgICAgICAgICAgICAgICAgICAgICBQb3J0YWJsZVNlcnZlcjo6U2VydmFudEFjdGl2YXRvcl9w
dHIgc2EsCiAgICAgICAgICAgICAgICAgICAgICAgIG9tbmlPcmJQT0EqIHBvYSwgY29uc3QgX0NP
UkJBX09jdGV0KiBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlkc2l6ZSwgQ09SQkE6
OkJvb2xlYW4gY2xlYW51cCkKICAgICAgOiBwZF9zZXJ2YW50KHMpLCBwZF9zYShzYSksCiAgICAg
ICAgcGRfcG9hKHBvYSksIHBkX2NsZWFudXAoY2xlYW51cCkgewogICAgICBwZF9vaWQubGVuZ3Ro
KGlkc2l6ZSk7CiAgICAgIG1lbWNweShwZF9vaWQuTlBfZGF0YSgpLCBpZCwgaWRzaXplKTsKICAg
IH0KICAgIGlubGluZSB2b2lkIHNldF9pc19sYXN0KGludCBpbCkgeyBwZF9pc19sYXN0ID0gaWw7
IH0KCiAgICB2aXJ0dWFsIHZvaWQgZG9pdCgpOwoKICBwcml2YXRlOgogICAgUG9ydGFibGVTZXJ2
ZXI6OlNlcnZhbnQgcGRfc2VydmFudDsKICAgIGludCBwZF9pc19sYXN0OwogICAgUG9ydGFibGVT
ZXJ2ZXI6OlNlcnZhbnRBY3RpdmF0b3JfcHRyIHBkX3NhOwogICAgb21uaU9yYlBPQSogcGRfcG9h
OwogICAgUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkIHBkX29pZDsKICAgIENPUkJBOjpCb29sZWFu
IHBkX2NsZWFudXA7CiAgfTsKICBmcmllbmQgY2xhc3MgRXRoZXJlYWxpc2VyOwoKCiAgaW50IHBk
X2Rlc3Ryb3llZDsKIyAzODggInBvYWltcGwuaCIKICBpbnQgcGRfZHlpbmc7CgoKCgogIGludCBw
ZF9yZWZDb3VudDsKCgogIENPUkJBOjpTdHJpbmdfdmFyIHBkX25hbWU7CgoKICBvbW5pT3JiUE9B
KiBwZF9wYXJlbnQ7CgoKCgoKICBvbW5pT3JiUE9BTWFuYWdlciogcGRfbWFuYWdlcjsKCgoKICBQ
b3J0YWJsZVNlcnZlcjo6QWRhcHRlckFjdGl2YXRvcl9wdHIgcGRfYWRhcHRlckFjdGl2YXRvcjsK
CgoKICBvbW5pdmVjdG9yPGNvbnN0IGNoYXIqPiBwZF9hZHB0ckFjdHZ0bnNJblByb2dyZXNzOwoK
CgoKICBQb3J0YWJsZVNlcnZlcjo6U2VydmFudEFjdGl2YXRvcl9wdHIgcGRfc2VydmFudEFjdGl2
YXRvcjsKICBQb3J0YWJsZVNlcnZlcjo6U2VydmFudExvY2F0b3JfcHRyIHBkX3NlcnZhbnRMb2Nh
dG9yOwoKCgoKCgogIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50IHBkX2RlZmF1bHRTZXJ2YW50OwoK
CgoKCiAgdm9sYXRpbGUgaW50IHBkX3JxX3N0YXRlOwoKCgoKICBDT1JCQTo6U3RyaW5nX3ZhciBw
ZF9mdWxsbmFtZTsKCgogIENPUkJBOjpTdHJpbmdfdmFyIHBkX3BvYUlkOwogIGludCBwZF9wb2FJ
ZFNpemU7CgoKCgoKICBDaGlsZFNlcSBwZF9jaGlsZHJlbjsKCgoKCgogIFBvbGljaWVzIHBkX3Bv
bGljeTsKCgogIG9tbmlfdHJhY2VkbXV0ZXgqIHBkX2NhbGxfbG9jazsKCgoKCgoKICBvbW5pX3Ry
YWNlZG11dGV4IHBkX2xvY2s7CgoKICBvbW5pX3RyYWNlZGNvbmRpdGlvbiBwZF9kZWF0aFNpZ25h
bDsKCgoKCiAgX0NPUkJBX1VMb25nIHBkX29pZEluZGV4OwoKCgoKICBvbW5pTG9jYWxJZGVudGl0
eSogcGRfYWN0aXZlT2JqTGlzdDsKCgoKfTsKIyA4MCAicG9ydGFibGVzZXJ2ZXIuY2MiIDIKIyAx
ICJsb2NhbElkZW50aXR5LmgiIDEKIyA0OCAibG9jYWxJZGVudGl0eS5oIgojIDEgIi4uL29tbmlJ
ZGVudGl0eS5oIiAxCiMgNDQgIi4uL29tbmlJZGVudGl0eS5oIgojIDEgIi91c3IvaW5jbHVkZS9z
dHJpbmcuaCIgMSAzCiMgNDUgIi4uL29tbmlJZGVudGl0eS5oIiAyCgoKY2xhc3Mgb21uaUNhbGxE
ZXNjcmlwdG9yOwpjbGFzcyBvbW5pT2JqUmVmOwoKCmNsYXNzIG9tbmlJZGVudGl0eSB7CnB1Ymxp
YzoKICBpbmxpbmUgY29uc3QgX0NPUkJBX09jdGV0KiBrZXkoKSBjb25zdCB7IHJldHVybiBwZF9r
ZXkua2V5KCk7IH0KICBpbmxpbmUgaW50IGtleXNpemUoKSBjb25zdCB7IHJldHVybiBwZF9rZXku
c2l6ZSgpOyB9CgoKICBpbmxpbmUgaW50IGlzX2VxdWFsKGNvbnN0IF9DT1JCQV9PY3RldCoga2V5
LCBpbnQga2V5c2l6ZSkgY29uc3QgewogICAgcmV0dXJuIHBkX2tleS5pc19lcXVhbChrZXksIGtl
eXNpemUpOwogIH0KCiAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKG9tbmlDYWxsRGVzY3JpcHRvciYp
ID0gMDsKCgoKCgogIHZpcnR1YWwgdm9pZCBnYWluT2JqUmVmKG9tbmlPYmpSZWYqKSA9IDA7CiAg
dmlydHVhbCB2b2lkIGxvc2VPYmpSZWYob21uaU9ialJlZiopID0gMDsKCgoKcHJvdGVjdGVkOgog
IGlubGluZSB+b21uaUlkZW50aXR5KCkge30KCgoKCiAgaW5saW5lIG9tbmlJZGVudGl0eShvbW5p
T2JqS2V5JiBrZXkpCiAgICA6IHBkX2tleShrZXksIDEpIHt9CgoKICBpbmxpbmUgb21uaUlkZW50
aXR5KGNvbnN0IF9DT1JCQV9PY3RldCoga2V5LCBpbnQga2V5c2l6ZSkKICAgIDogcGRfa2V5KGtl
eSwga2V5c2l6ZSkge30KCgogIGlubGluZSBvbW5pSWRlbnRpdHkoX0NPUkJBX09jdGV0KiBrZXks
IGludCBrZXlzaXplKQogICAgOiBwZF9rZXkoa2V5LCBrZXlzaXplKSB7fQoKCnByaXZhdGU6CiAg
b21uaUlkZW50aXR5KGNvbnN0IG9tbmlJZGVudGl0eSYpOwogIG9tbmlJZGVudGl0eSYgb3BlcmF0
b3IgPSAoY29uc3Qgb21uaUlkZW50aXR5Jik7CgoKCiAgb21uaU9iaktleSBwZF9rZXk7Cgp9Owoj
IDQ5ICJsb2NhbElkZW50aXR5LmgiIDIKCgpjbGFzcyBvbW5pU2VydmFudDsKY2xhc3Mgb21uaU9i
alJlZjsKY2xhc3Mgb21uaU9iakFkYXB0ZXI7CmNsYXNzIG9tbmlMb2NhbElkZW50aXR5X1JlZkhv
bGRlcjsKCgpjbGFzcyBvbW5pTG9jYWxJZGVudGl0eSA6IHB1YmxpYyBvbW5pSWRlbnRpdHkgewpw
dWJsaWM6CiAgaW5saW5lIH5vbW5pTG9jYWxJZGVudGl0eSgpIHt9CgogIGlubGluZSBvbW5pTG9j
YWxJZGVudGl0eShvbW5pT2JqS2V5JiBrZXkpCiAgICA6IG9tbmlJZGVudGl0eShrZXkpLAogICAg
ICBwZF9uSW52b2NhdGlvbnMoMSksCiAgICAgIHBkX3NlcnZhbnQoMCksCiAgICAgIHBkX2FkYXB0
ZXIoMCksCiAgICAgIHBkX3NlcnZhbnRzTmV4dElkZW50aXR5KDApLAogICAgICBwZF9uZXh0SW5P
YmplY3RUYWJsZSgwKSwKICAgICAgcGRfbG9jYWxSZWZzKDApLAogICAgICBwZF9uZXh0SW5PQU9i
akxpc3QoMCksCiAgICAgIHBkX3ByZXZJbk9BT2JqTGlzdCgwKQogICAge30KCgoKICBpbmxpbmUg
b21uaUxvY2FsSWRlbnRpdHkoY29uc3QgX0NPUkJBX09jdGV0KiBrZXksIGludCBrZXlzaXplKQog
ICAgOiBvbW5pSWRlbnRpdHkoa2V5LCBrZXlzaXplKSwKICAgICAgcGRfbkludm9jYXRpb25zKDEp
LAogICAgICBwZF9zZXJ2YW50KDApLAogICAgICBwZF9hZGFwdGVyKDApLAogICAgICBwZF9zZXJ2
YW50c05leHRJZGVudGl0eSgwKSwKICAgICAgcGRfbmV4dEluT2JqZWN0VGFibGUoMCksCiAgICAg
IHBkX2xvY2FsUmVmcygwKSwKICAgICAgcGRfbmV4dEluT0FPYmpMaXN0KDApLAogICAgICBwZF9w
cmV2SW5PQU9iakxpc3QoMCkKICAgIHt9CgoKCiAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKG9tbmlD
YWxsRGVzY3JpcHRvciYpOwogIHZpcnR1YWwgdm9pZCBnYWluT2JqUmVmKG9tbmlPYmpSZWYqKTsK
ICB2aXJ0dWFsIHZvaWQgbG9zZU9ialJlZihvbW5pT2JqUmVmKik7CgoKICB2b2lkIGRpc3BhdGNo
KEdJT1BfUyYpOwoKCgoKCgoKICB2b2lkIGZpbmlzaGVkV2l0aER1bW15SWQoKTsKCgoKCgogIGlu
bGluZSB2b2lkIGRlYWN0aXZhdGUoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgZG97IGlmKCAhKHBkX25JbnZvY2F0aW9ucyA+
IDApICkgb21uaTo6YXNzZXJ0RmFpbCgibG9jYWxJZGVudGl0eS5oIiwxMTAsICJwZF9uSW52b2Nh
dGlvbnMgPiAwIik7IH13aGlsZSgwKTsKICAgIC0tcGRfbkludm9jYXRpb25zOwogIH0KCgoKICB2
b2lkIGRpZSgpOwoKCgoKCiAgaW5saW5lIG9tbmlTZXJ2YW50KiBzZXJ2YW50KCkgY29uc3QgeyBy
ZXR1cm4gcGRfc2VydmFudDsgfQogIGlubGluZSBvbW5pT2JqQWRhcHRlciogYWRhcHRlcigpIGNv
bnN0IHsgcmV0dXJuIHBkX2FkYXB0ZXI7IH0KICBpbmxpbmUgaW50IGlzX2lkbGUoKSBjb25zdCB7
IHJldHVybiAhcGRfbkludm9jYXRpb25zOyB9CgoKCgogIGlubGluZSBvbW5pT2JqUmVmKiBsb2Nh
bFJlZkxpc3QoKSBjb25zdCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgcmV0dXJuIHBkX2xvY2FsUmVmczsKICB9CgogIGlubGlu
ZSBvbW5pTG9jYWxJZGVudGl0eSogbmV4dEluT2JqZWN0VGFibGUoKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgcmV0dXJuIHBk
X25leHRJbk9iamVjdFRhYmxlOwogIH0KICBpbmxpbmUgb21uaUxvY2FsSWRlbnRpdHkqKiBhZGRy
T2ZOZXh0SW5PYmplY3RUYWJsZSgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICByZXR1cm4gJnBkX25leHRJbk9iamVjdFRhYmxl
OwogIH0KCiAgaW5saW5lIG9tbmlMb2NhbElkZW50aXR5KiBzZXJ2YW50c05leHRJZGVudGl0eSgp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICByZXR1cm4gcGRfc2VydmFudHNOZXh0SWRlbnRpdHk7CiAgfQogIGlubGluZSBvbW5p
TG9jYWxJZGVudGl0eSoqIGFkZHJPZlNlcnZhbnRzTmV4dElkZW50aXR5KCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgIHJldHVy
biAmcGRfc2VydmFudHNOZXh0SWRlbnRpdHk7CiAgfQoKICBpbmxpbmUgb21uaUxvY2FsSWRlbnRp
dHkqIG5leHRJbk9BT2JqTGlzdCgpIHsgcmV0dXJuIHBkX25leHRJbk9BT2JqTGlzdDsgfQogIGlu
bGluZSB2b2lkIGluc2VydEludG9PQU9iakxpc3Qob21uaUxvY2FsSWRlbnRpdHkqKiBwX2hlYWQp
IHsKICAgIGRveyBpZiggISghcGRfbmV4dEluT0FPYmpMaXN0ICYmICFwZF9wcmV2SW5PQU9iakxp
c3QpICkgb21uaTo6YXNzZXJ0RmFpbCgibG9jYWxJZGVudGl0eS5oIiwxNTQsICIhcGRfbmV4dElu
T0FPYmpMaXN0ICYmICFwZF9wcmV2SW5PQU9iakxpc3QiKTsgfXdoaWxlKDApOwogICAgZG97IGlm
KCAhKHBfaGVhZCkgKSBvbW5pOjphc3NlcnRGYWlsKCJsb2NhbElkZW50aXR5LmgiLDE1NSwgInBf
aGVhZCIpOyB9d2hpbGUoMCk7CiAgICBwZF9uZXh0SW5PQU9iakxpc3QgPSAqcF9oZWFkOwogICAg
cGRfcHJldkluT0FPYmpMaXN0ID0gcF9oZWFkOwogICAgKnBfaGVhZCA9IHRoaXM7CiAgICBpZigg
cGRfbmV4dEluT0FPYmpMaXN0ICkKICAgICAgcGRfbmV4dEluT0FPYmpMaXN0LT5wZF9wcmV2SW5P
QU9iakxpc3QgPSAmcGRfbmV4dEluT0FPYmpMaXN0OwogIH0KICBpbmxpbmUgdm9pZCByZW1vdmVG
cm9tT0FPYmpMaXN0KCkgewogICAgZG97IGlmKCAhKHBkX3ByZXZJbk9BT2JqTGlzdCkgKSBvbW5p
Ojphc3NlcnRGYWlsKCJsb2NhbElkZW50aXR5LmgiLDE2MywgInBkX3ByZXZJbk9BT2JqTGlzdCIp
OyB9d2hpbGUoMCk7CiAgICAqcGRfcHJldkluT0FPYmpMaXN0ID0gcGRfbmV4dEluT0FPYmpMaXN0
OwogICAgaWYoIHBkX25leHRJbk9BT2JqTGlzdCApCiAgICAgIHBkX25leHRJbk9BT2JqTGlzdC0+
cGRfcHJldkluT0FPYmpMaXN0ID0gcGRfcHJldkluT0FPYmpMaXN0OwogICAgcGRfbmV4dEluT0FP
YmpMaXN0ID0gMDsKICAgIHBkX3ByZXZJbk9BT2JqTGlzdCA9IDA7CiAgfQogIGlubGluZSB2b2lk
IHJlUm9vdE9BT2JqTGlzdChvbW5pTG9jYWxJZGVudGl0eSoqIG5ld19oZWFkKSB7CiAgICBkb3sg
aWYoICEocGRfcHJldkluT0FPYmpMaXN0KSApIG9tbmk6OmFzc2VydEZhaWwoImxvY2FsSWRlbnRp
dHkuaCIsMTcxLCAicGRfcHJldkluT0FPYmpMaXN0Iik7IH13aGlsZSgwKTsgZG97IGlmKCAhKG5l
d19oZWFkKSApIG9tbmk6OmFzc2VydEZhaWwoImxvY2FsSWRlbnRpdHkuaCIsMTcxLCAibmV3X2hl
YWQiKTsgfXdoaWxlKDApOwogICAgKnBkX3ByZXZJbk9BT2JqTGlzdCA9IDA7CiAgICBwZF9wcmV2
SW5PQU9iakxpc3QgPSBuZXdfaGVhZDsKICAgICpuZXdfaGVhZCA9IHRoaXM7CiAgfQogIGlubGlu
ZSBDT1JCQTo6Qm9vbGVhbiBkZWFjdGl2YXRlZCgpIHsKICAgIHJldHVybiBwZF9hZGFwdGVyICYm
ICFwZF9wcmV2SW5PQU9iakxpc3Q7CiAgfQoKCgogIGlubGluZSB2b2lkIHNldFNlcnZhbnQob21u
aVNlcnZhbnQqIHNlcnZhbnQsIG9tbmlPYmpBZGFwdGVyKiBvYSkgewogICAgZG97IGlmKCAhKCFw
ZF9zZXJ2YW50KSApIG9tbmk6OmFzc2VydEZhaWwoImxvY2FsSWRlbnRpdHkuaCIsMTgzLCAiIXBk
X3NlcnZhbnQiKTsgfXdoaWxlKDApOyBkb3sgaWYoICEoc2VydmFudCkgKSBvbW5pOjphc3NlcnRG
YWlsKCJsb2NhbElkZW50aXR5LmgiLDE4MywgInNlcnZhbnQiKTsgfXdoaWxlKDApOwogICAgZG97
IGlmKCAhKCFwZF9hZGFwdGVyICYmIG9hKSApIG9tbmk6OmFzc2VydEZhaWwoImxvY2FsSWRlbnRp
dHkuaCIsMTg0LCAiIXBkX2FkYXB0ZXIgJiYgb2EiKTsgfXdoaWxlKDApOwogICAgcGRfc2VydmFu
dCA9IHNlcnZhbnQ7CiAgICBwZF9hZGFwdGVyID0gb2E7CiAgfQoKcHJpdmF0ZToKICBmcmllbmQg
Y2xhc3Mgb21uaUxvY2FsSWRlbnRpdHlfUmVmSG9sZGVyOwoKICBvbW5pTG9jYWxJZGVudGl0eShj
b25zdCBvbW5pTG9jYWxJZGVudGl0eSYpOwogIG9tbmlMb2NhbElkZW50aXR5JiBvcGVyYXRvciA9
IChjb25zdCBvbW5pTG9jYWxJZGVudGl0eSYpOwoKCgogIGludCBwZF9uSW52b2NhdGlvbnM7CiMg
MjA3ICJsb2NhbElkZW50aXR5LmgiCiAgb21uaVNlcnZhbnQqIHBkX3NlcnZhbnQ7CgoKCgoKICBv
bW5pT2JqQWRhcHRlciogcGRfYWRhcHRlcjsKCgoKCgoKCiAgb21uaUxvY2FsSWRlbnRpdHkqIHBk
X3NlcnZhbnRzTmV4dElkZW50aXR5OwoKCgoKICBvbW5pTG9jYWxJZGVudGl0eSogcGRfbmV4dElu
T2JqZWN0VGFibGU7CgoKCgogIG9tbmlPYmpSZWYqIHBkX2xvY2FsUmVmczsKCgoKICBvbW5pTG9j
YWxJZGVudGl0eSogcGRfbmV4dEluT0FPYmpMaXN0OwogIG9tbmlMb2NhbElkZW50aXR5KiogcGRf
cHJldkluT0FPYmpMaXN0OwoKCgoKCgp9OwojIDgxICJwb3J0YWJsZXNlcnZlci5jYyIgMgojIDEg
Ii4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvY2FsbERlc2NyaXB0b3IuaCIgMQojIDQwICIu
Li8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL2NhbGxEZXNjcmlwdG9yLmgiCmNsYXNzIG9tbmlP
YmpSZWY7CmNsYXNzIG9tbmlTZXJ2YW50OwpjbGFzcyBHSU9QX0M7CgoKCgoKCmNsYXNzIG9tbmlD
YWxsRGVzY3JpcHRvciB7CnB1YmxpYzoKICB0eXBlZGVmIHZvaWQgKCpMb2NhbENhbGxGbikob21u
aUNhbGxEZXNjcmlwdG9yKiwgb21uaVNlcnZhbnQqKTsKCiAgaW5saW5lIG9tbmlDYWxsRGVzY3Jp
cHRvcihMb2NhbENhbGxGbiBsY2ZuLCBjb25zdCBjaGFyKiBvcCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBvcF9sZW4sIF9DT1JCQV9Cb29sZWFuIG9uZXdheSA9IDApCiAgICA6IHBk
X2xvY2FsQ2FsbChsY2ZuKSwKICAgICAgcGRfaXNfb25ld2F5KG9uZXdheSksCiAgICAgIHBkX29w
KG9wKSwgcGRfb3BsZW4ob3BfbGVuKSwKICAgICAgcGRfY3R4dCgwKSB7fQoKCgoKCiAgdmlydHVh
bCBfQ09SQkFfVUxvbmcgYWxpZ25lZFNpemUoX0NPUkJBX1VMb25nKTsKCgogIHZpcnR1YWwgdm9p
ZCBtYXJzaGFsQXJndW1lbnRzKEdJT1BfQyYpOwoKCiAgdmlydHVhbCB2b2lkIHVubWFyc2hhbFJl
dHVybmVkVmFsdWVzKEdJT1BfQyYpOwoKCiAgdmlydHVhbCB2b2lkIHVzZXJFeGNlcHRpb24oR0lP
UF9DJiwgY29uc3QgY2hhciopOwojIDgzICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL2Nh
bGxEZXNjcmlwdG9yLmgiCiAgaW5saW5lIGNvbnN0IGNoYXIqIG9wKCkgY29uc3QgeyByZXR1cm4g
cGRfb3A7IH0KICBpbmxpbmUgc2l6ZV90IG9wX2xlbigpIGNvbnN0IHsgcmV0dXJuIHBkX29wbGVu
OyB9CiAgaW5saW5lIF9DT1JCQV9Cb29sZWFuIGlzX29uZXdheSgpIGNvbnN0IHsgcmV0dXJuIHBk
X2lzX29uZXdheTsgfQogIGlubGluZSB2b2lkIGRvTG9jYWxDYWxsKG9tbmlTZXJ2YW50KiBzZXJ2
YW50KSB7CiAgICBwZF9sb2NhbENhbGwodGhpcywgc2VydmFudCk7CiAgfQoKCgoKCiAgc3RydWN0
IENvbnRleHRJbmZvIHsKICAgIGlubGluZSBDb250ZXh0SW5mbyhDT1JCQTo6Q29udGV4dF9wdHIg
YywgY29uc3QgY2hhcipjb25zdCogY2wsIGludCBuKQogICAgICA6IGNvbnRleHQoYyksIGV4cGVj
dGVkKGNsKSwgbnVtX2V4cGVjdGVkKG4pIHt9CgogICAgQ09SQkE6OkNvbnRleHRfcHRyIGNvbnRl
eHQ7CiAgICBjb25zdCBjaGFyKmNvbnN0KiBleHBlY3RlZDsKICAgIGludCBudW1fZXhwZWN0ZWQ7
CiAgfTsKCiAgaW5saW5lIHZvaWQgc2V0X2NvbnRleHRfaW5mbyhjb25zdCBDb250ZXh0SW5mbyog
Y2kpIHsgcGRfY3R4dCA9IGNpOyB9CiAgaW5saW5lIGNvbnN0IENvbnRleHRJbmZvKiBjb250ZXh0
X2luZm8oKSB7IHJldHVybiBwZF9jdHh0OyB9Cgpwcml2YXRlOgogIG9tbmlDYWxsRGVzY3JpcHRv
cihjb25zdCBvbW5pQ2FsbERlc2NyaXB0b3ImKTsKICBvbW5pQ2FsbERlc2NyaXB0b3ImIG9wZXJh
dG9yID0gKGNvbnN0IG9tbmlDYWxsRGVzY3JpcHRvciYpOwoKCiAgTG9jYWxDYWxsRm4gcGRfbG9j
YWxDYWxsOwogIF9DT1JCQV9Cb29sZWFuIHBkX2lzX29uZXdheTsKICBjb25zdCBjaGFyKiBwZF9v
cDsKICBzaXplX3QgcGRfb3BsZW47CiAgY29uc3QgQ29udGV4dEluZm8qIHBkX2N0eHQ7Cn07CiMg
MTI1ICIuLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL2NhbGxEZXNjcmlwdG9yLmgiCmNsYXNz
IG9tbmlTdGRDYWxsRGVzYyB7CnB1YmxpYzoKCgogIHR5cGVkZWYgb21uaUNhbGxEZXNjcmlwdG9y
IHZvaWRfY2FsbDsKCgogIGNsYXNzIF9jQ09SQkFfbU9iamVjdF9pX2NzdHJpbmcgOiBwdWJsaWMg
b21uaUNhbGxEZXNjcmlwdG9yIHsKICBwdWJsaWM6CiAgICBpbmxpbmUgX2NDT1JCQV9tT2JqZWN0
X2lfY3N0cmluZyhMb2NhbENhbGxGbiBsY2ZuLCBjb25zdCBjaGFyKiBvcCwKICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IG9wbGVuLCBfQ09SQkFfQm9vbGVhbiBvbmV3YXksIGNvbnN0IGNoYXIq
IGFfMCkgOgogICAgICBvbW5pQ2FsbERlc2NyaXB0b3IobGNmbiwgb3AsIG9wbGVuLCBvbmV3YXkp
LAogICAgICBhcmdfMChhXzApIHt9CgogICAgdmlydHVhbCBDT1JCQTo6VUxvbmcgYWxpZ25lZFNp
emUoQ09SQkE6OlVMb25nIHNpemVfaW4pOwogICAgdmlydHVhbCB2b2lkIG1hcnNoYWxBcmd1bWVu
dHMoR0lPUF9DJik7CiAgICB2aXJ0dWFsIHZvaWQgdW5tYXJzaGFsUmV0dXJuZWRWYWx1ZXMoR0lP
UF9DJik7CgogICAgaW5saW5lIENPUkJBOjpPYmplY3RfcHRyIHJlc3VsdCgpIHsgcmV0dXJuIHBk
X3Jlc3VsdDsgfQoKICAgIGNvbnN0IGNoYXIqIGFyZ18wOwogICAgQ09SQkE6Ok9iamVjdF9wdHIg
cGRfcmVzdWx0OwogIH07Cgp9OwojIDE1OSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pT1JCMy9j
YWxsRGVzY3JpcHRvci5oIgpjbGFzcyBvbW5pTG9jYWxPbmx5Q2FsbERlc2NyaXB0b3IgOiBwdWJs
aWMgb21uaUNhbGxEZXNjcmlwdG9yIHsKcHVibGljOgogIG9tbmlMb2NhbE9ubHlDYWxsRGVzY3Jp
cHRvcihMb2NhbENhbGxGbiBsY2ZuLCBjb25zdCBjaGFyKiBvcCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IG9wX2xlbiwgX0NPUkJBX0Jvb2xlYW4gaXNfb25ld2F5ID0gMCkKICAg
IDogb21uaUNhbGxEZXNjcmlwdG9yKGxjZm4sIG9wLCBvcF9sZW4sIGlzX29uZXdheSkge30KCgoK
CiAgdmlydHVhbCBfQ09SQkFfVUxvbmcgYWxpZ25lZFNpemUoX0NPUkJBX1VMb25nKTsKfTsKIyA4
MiAicG9ydGFibGVzZXJ2ZXIuY2MiIDIKIyAxICIuLi9pbml0UmVmcy5oIiAxCiMgNjYgIi4uL2lu
aXRSZWZzLmgiCiMgMSAiLi4vb21uaU9SQjMvYm9vdHN0cmFwLmhoIiAxCiMgNjYgIi4uL29tbmlP
UkIzL2Jvb3RzdHJhcC5oaCIKY2xhc3MgQ09SQkFfSW5pdGlhbFJlZmVyZW5jZXM7CmNsYXNzIF9v
YmpyZWZfQ09SQkFfSW5pdGlhbFJlZmVyZW5jZXM7CmNsYXNzIF9pbXBsX0NPUkJBX0luaXRpYWxS
ZWZlcmVuY2VzOwoKdHlwZWRlZiBfb2JqcmVmX0NPUkJBX0luaXRpYWxSZWZlcmVuY2VzKiBDT1JC
QV9Jbml0aWFsUmVmZXJlbmNlc19wdHI7CnR5cGVkZWYgQ09SQkFfSW5pdGlhbFJlZmVyZW5jZXNf
cHRyIENPUkJBX0luaXRpYWxSZWZlcmVuY2VzUmVmOwoKY2xhc3MgQ09SQkFfSW5pdGlhbFJlZmVy
ZW5jZXNfSGVscGVyIHsKcHVibGljOgogIHR5cGVkZWYgQ09SQkFfSW5pdGlhbFJlZmVyZW5jZXNf
cHRyIF9wdHJfdHlwZTsKCiAgc3RhdGljIF9wdHJfdHlwZSBfbmlsKCk7CiAgc3RhdGljIF9DT1JC
QV9Cb29sZWFuIGlzX25pbChfcHRyX3R5cGUpOwogIHN0YXRpYyB2b2lkIHJlbGVhc2UoX3B0cl90
eXBlKTsKICBzdGF0aWMgdm9pZCBkdXBsaWNhdGUoX3B0cl90eXBlKTsKICBzdGF0aWMgc2l6ZV90
IE5QX2FsaWduZWRTaXplKF9wdHJfdHlwZSwgc2l6ZV90KTsKICBzdGF0aWMgdm9pZCBtYXJzaGFs
T2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgX3B0cl90eXBl
IHVubWFyc2hhbE9ialJlZihOZXRCdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyB2b2lkIG1hcnNo
YWxPYmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwogIHN0YXRpYyBfcHRyX3R5
cGUgdW5tYXJzaGFsT2JqUmVmKE1lbUJ1ZmZlcmVkU3RyZWFtJik7Cn07Cgp0eXBlZGVmIF9DT1JC
QV9PYmpSZWZfVmFyPF9vYmpyZWZfQ09SQkFfSW5pdGlhbFJlZmVyZW5jZXMsIENPUkJBX0luaXRp
YWxSZWZlcmVuY2VzX0hlbHBlcj4gQ09SQkFfSW5pdGlhbFJlZmVyZW5jZXNfdmFyOwp0eXBlZGVm
IF9DT1JCQV9PYmpSZWZfT1VUX2FyZzxfb2JqcmVmX0NPUkJBX0luaXRpYWxSZWZlcmVuY2VzLENP
UkJBX0luaXRpYWxSZWZlcmVuY2VzX0hlbHBlciA+IENPUkJBX0luaXRpYWxSZWZlcmVuY2VzX291
dDsKCgoKY2xhc3MgQ09SQkFfSW5pdGlhbFJlZmVyZW5jZXMgewpwdWJsaWM6CgogIHR5cGVkZWYg
Q09SQkFfSW5pdGlhbFJlZmVyZW5jZXNfcHRyIF9wdHJfdHlwZTsKICB0eXBlZGVmIENPUkJBX0lu
aXRpYWxSZWZlcmVuY2VzX3ZhciBfdmFyX3R5cGU7CgogIHN0YXRpYyBfcHRyX3R5cGUgX2R1cGxp
Y2F0ZShfcHRyX3R5cGUpOwogIHN0YXRpYyBfcHRyX3R5cGUgX25hcnJvdyhDT1JCQTo6T2JqZWN0
X3B0cik7CiAgc3RhdGljIF9wdHJfdHlwZSBfbmlsKCk7CgogIHN0YXRpYyBpbmxpbmUgc2l6ZV90
IF9hbGlnbmVkU2l6ZShfcHRyX3R5cGUsIHNpemVfdCk7CiAgc3RhdGljIGlubGluZSB2b2lkIF9t
YXJzaGFsT2JqUmVmKF9wdHJfdHlwZSwgTmV0QnVmZmVyZWRTdHJlYW0mKTsKICBzdGF0aWMgaW5s
aW5lIHZvaWQgX21hcnNoYWxPYmpSZWYoX3B0cl90eXBlLCBNZW1CdWZmZXJlZFN0cmVhbSYpOwoK
ICBzdGF0aWMgaW5saW5lIF9wdHJfdHlwZSBfdW5tYXJzaGFsT2JqUmVmKE5ldEJ1ZmZlcmVkU3Ry
ZWFtJiBzKSB7CiAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmogPSBDT1JCQTo6VW5NYXJzaGFsT2Jq
UmVmKF9QRF9yZXBvSWQsIHMpOwogICAgX3B0cl90eXBlIHJlc3VsdCA9IF9uYXJyb3cob2JqKTsK
ICAgIENPUkJBOjpyZWxlYXNlKG9iaik7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGlj
IGlubGluZSBfcHRyX3R5cGUgX3VubWFyc2hhbE9ialJlZihNZW1CdWZmZXJlZFN0cmVhbSYgcykg
ewogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqID0gQ09SQkE6OlVuTWFyc2hhbE9ialJlZihfUERf
cmVwb0lkLCBzKTsKICAgIF9wdHJfdHlwZSByZXN1bHQgPSBfbmFycm93KG9iaik7CiAgICBDT1JC
QTo6cmVsZWFzZShvYmopOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBjb25zdCBj
aGFyKiBfUERfcmVwb0lkOwoKCiAgc3RhdGljIGNvbnN0IENPUkJBOjpUeXBlQ29kZV9wdHIgX3Rj
X09iaklkOwoKICB0eXBlZGVmIGNoYXIqIE9iaklkOwogIHR5cGVkZWYgQ09SQkE6OlN0cmluZ192
YXIgT2JqSWRfdmFyOwoKICBzdGF0aWMgY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfT2Jq
SWRMaXN0OwoKICBjbGFzcyBPYmpJZExpc3RfdmFyOwoKICBjbGFzcyBPYmpJZExpc3QgOiBwdWJs
aWMgX0NPUkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fU3RyaW5nIHsKICBwdWJsaWM6CiAgICB0eXBl
ZGVmIE9iaklkTGlzdF92YXIgX3Zhcl90eXBlOwogICAgaW5saW5lIE9iaklkTGlzdCgpIHt9CiAg
ICBpbmxpbmUgT2JqSWRMaXN0KGNvbnN0IE9iaklkTGlzdCYgcykKICAgICAgOiBfQ09SQkFfVW5i
b3VuZGVkX1NlcXVlbmNlX19TdHJpbmcocykge30KCiAgICBpbmxpbmUgT2JqSWRMaXN0KF9DT1JC
QV9VTG9uZyBfbWF4KQogICAgICA6IF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX1N0cmluZyhf
bWF4KSB7fQogICAgaW5saW5lIE9iaklkTGlzdChfQ09SQkFfVUxvbmcgX21heCwgX0NPUkJBX1VM
b25nIF9sZW4sIGNoYXIqKiBfdmFsLCBfQ09SQkFfQm9vbGVhbiBfcmVsPTApCiAgICAgIDogX0NP
UkJBX1VuYm91bmRlZF9TZXF1ZW5jZV9fU3RyaW5nKF9tYXgsIF9sZW4sIF92YWwsIF9yZWwpIHt9
CgogICAgaW5saW5lIE9iaklkTGlzdCYgb3BlcmF0b3IgPSAoY29uc3QgT2JqSWRMaXN0JiBzKSB7
CiAgICAgIF9DT1JCQV9VbmJvdW5kZWRfU2VxdWVuY2VfX1N0cmluZzo6b3BlcmF0b3I9KHMpOwog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgfTsKCiAgY2xhc3MgT2JqSWRMaXN0X291dDsKCiAg
Y2xhc3MgT2JqSWRMaXN0X3ZhciB7CiAgcHVibGljOgogICAgdHlwZWRlZiBPYmpJZExpc3QgVDsK
ICAgIHR5cGVkZWYgT2JqSWRMaXN0X3ZhciBUX3ZhcjsKCiAgICBpbmxpbmUgT2JqSWRMaXN0X3Zh
cigpIDogX3BkX3NlcSgwKSB7fQogICAgaW5saW5lIE9iaklkTGlzdF92YXIoVCogcykgOiBfcGRf
c2VxKHMpIHt9CiAgICBpbmxpbmUgT2JqSWRMaXN0X3Zhcihjb25zdCBUX3ZhciYgcykgewogICAg
ICBpZiggcy5fcGRfc2VxICkgX3BkX3NlcSA9IG5ldyBUKCpzLl9wZF9zZXEpOwogICAgICBlbHNl
IF9wZF9zZXEgPSAwOwogICAgfQogICAgaW5saW5lIH5PYmpJZExpc3RfdmFyKCkgeyBpZiggX3Bk
X3NlcSApIGRlbGV0ZSBfcGRfc2VxOyB9CgogICAgaW5saW5lIFRfdmFyJiBvcGVyYXRvciA9IChU
KiBzKSB7CiAgICAgIGlmKCBfcGRfc2VxICkgZGVsZXRlIF9wZF9zZXE7CiAgICAgIF9wZF9zZXEg
PSBzOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICBpbmxpbmUgVF92YXImIG9wZXJhdG9y
ID0gKGNvbnN0IFRfdmFyJiBzKSB7CiAgICAgIGlmKCBzLl9wZF9zZXEgKSB7CiAgICAgICAgaWYo
ICFfcGRfc2VxICkgX3BkX3NlcSA9IG5ldyBUOwogICAgICAgICpfcGRfc2VxID0gKnMuX3BkX3Nl
cTsKICAgICAgfSBlbHNlIGlmKCBfcGRfc2VxICkgewogICAgICAgIGRlbGV0ZSBfcGRfc2VxOwog
ICAgICAgIF9wZF9zZXEgPSAwOwogICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg
ICBpbmxpbmUgX0NPUkJBX1N0cmluZ19lbGVtZW50IG9wZXJhdG9yIFtdIChfQ09SQkFfVUxvbmcg
cykgewogICAgICByZXR1cm4gKCpfcGRfc2VxKVtzXTsKICAgIH0KCiAgICBpbmxpbmUgVCogb3Bl
cmF0b3IgLT4gKCkgeyByZXR1cm4gX3BkX3NlcTsgfQoKCgogICAgaW5saW5lIG9wZXJhdG9yIGNv
bnN0IFQmICgpIGNvbnN0IHsgcmV0dXJuICpfcGRfc2VxOyB9CiAgICBpbmxpbmUgb3BlcmF0b3Ig
VCYgKCkgeyByZXR1cm4gKl9wZF9zZXE7IH0KCgogICAgaW5saW5lIGNvbnN0IFQmIGluKCkgY29u
c3QgeyByZXR1cm4gKl9wZF9zZXE7IH0KICAgIGlubGluZSBUJiBpbm91dCgpIHsgcmV0dXJuICpf
cGRfc2VxOyB9CiAgICBpbmxpbmUgVComIG91dCgpIHsKICAgICAgaWYoIF9wZF9zZXEgKSB7IGRl
bGV0ZSBfcGRfc2VxOyBfcGRfc2VxID0gMDsgfQogICAgICByZXR1cm4gX3BkX3NlcTsKICAgIH0K
ICAgIGlubGluZSBUKiBfcmV0bigpIHsgVCogdG1wID0gX3BkX3NlcTsgX3BkX3NlcSA9IDA7IHJl
dHVybiB0bXA7IH0KCiAgICBmcmllbmQgY2xhc3MgT2JqSWRMaXN0X291dDsKCiAgcHJpdmF0ZToK
ICAgIFQqIF9wZF9zZXE7CiAgfTsKCiAgY2xhc3MgT2JqSWRMaXN0X291dCB7CiAgcHVibGljOgog
ICAgdHlwZWRlZiBPYmpJZExpc3QgVDsKICAgIHR5cGVkZWYgT2JqSWRMaXN0X3ZhciBUX3ZhcjsK
CiAgICBpbmxpbmUgT2JqSWRMaXN0X291dChUKiYgcykgOiBfZGF0YShzKSB7IF9kYXRhID0gMDsg
fQogICAgaW5saW5lIE9iaklkTGlzdF9vdXQoVF92YXImIHMpCiAgICAgIDogX2RhdGEocy5fcGRf
c2VxKSB7IHMgPSAoVCopIDA7IH0KICAgIGlubGluZSBPYmpJZExpc3Rfb3V0KGNvbnN0IE9iaklk
TGlzdF9vdXQmIHMpIDogX2RhdGEocy5fZGF0YSkge30KICAgIGlubGluZSBPYmpJZExpc3Rfb3V0
JiBvcGVyYXRvciA9IChjb25zdCBPYmpJZExpc3Rfb3V0JiBzKSB7CiAgICAgIF9kYXRhID0gcy5f
ZGF0YTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfSBpbmxpbmUgT2JqSWRMaXN0X291dCYgb3Bl
cmF0b3IgPSAoVCogcykgewogICAgICBfZGF0YSA9IHM7CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KICAgIGlubGluZSBvcGVyYXRvciBUKiYoKSB7IHJldHVybiBfZGF0YTsgfQogICAgaW5saW5l
IFQqJiBwdHIoKSB7IHJldHVybiBfZGF0YTsgfQogICAgaW5saW5lIFQqIG9wZXJhdG9yLT4oKSB7
IHJldHVybiBfZGF0YTsgfQoKICAgIGlubGluZSBfQ09SQkFfU3RyaW5nX2VsZW1lbnQgb3BlcmF0
b3IgW10gKF9DT1JCQV9VTG9uZyBpKSB7CiAgICAgIHJldHVybiAoKl9kYXRhKVtpXTsKICAgIH0K
CiAgICBUKiYgX2RhdGE7CgogIHByaXZhdGU6CiAgICBPYmpJZExpc3Rfb3V0KCk7CiAgICBPYmpJ
ZExpc3Rfb3V0JiBvcGVyYXRvcj0oY29uc3QgVF92YXImKTsKICB9OwoKfTsKCmNsYXNzIF9vYmpy
ZWZfQ09SQkFfSW5pdGlhbFJlZmVyZW5jZXMgOgogIHB1YmxpYyB2aXJ0dWFsIENPUkJBOjpPYmpl
Y3QsIHB1YmxpYyB2aXJ0dWFsIG9tbmlPYmpSZWYKewpwdWJsaWM6CiAgQ09SQkE6Ok9iamVjdF9w
dHIgZ2V0KGNvbnN0IGNoYXIqIGlkKTsKICBDT1JCQV9Jbml0aWFsUmVmZXJlbmNlczo6T2JqSWRM
aXN0KiBsaXN0KCk7CgogIGlubGluZSBfb2JqcmVmX0NPUkJBX0luaXRpYWxSZWZlcmVuY2VzKCkg
eyBfUFJfc2V0b2JqKDApOyB9CiAgX29ianJlZl9DT1JCQV9Jbml0aWFsUmVmZXJlbmNlcyhjb25z
dCBjaGFyKiwgSU9QOjpUYWdnZWRQcm9maWxlTGlzdCosIG9tbmlJZGVudGl0eSosIG9tbmlMb2Nh
bElkZW50aXR5Kik7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCB+X29ianJlZl9DT1JCQV9Jbml0aWFs
UmVmZXJlbmNlcygpOwoKcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQqIF9wdHJUb09ialJlZihjb25z
dCBjaGFyKik7CgogIF9vYmpyZWZfQ09SQkFfSW5pdGlhbFJlZmVyZW5jZXMoY29uc3QgX29ianJl
Zl9DT1JCQV9Jbml0aWFsUmVmZXJlbmNlcyYpOwogIF9vYmpyZWZfQ09SQkFfSW5pdGlhbFJlZmVy
ZW5jZXMmIG9wZXJhdG9yID0gKGNvbnN0IF9vYmpyZWZfQ09SQkFfSW5pdGlhbFJlZmVyZW5jZXMm
KTsKCn07CgpjbGFzcyBfcG9mX0NPUkJBX0luaXRpYWxSZWZlcmVuY2VzIDogcHVibGljIHByb3h5
T2JqZWN0RmFjdG9yeSB7CnB1YmxpYzoKICBpbmxpbmUgX3BvZl9DT1JCQV9Jbml0aWFsUmVmZXJl
bmNlcygpIDogcHJveHlPYmplY3RGYWN0b3J5KENPUkJBX0luaXRpYWxSZWZlcmVuY2VzOjpfUERf
cmVwb0lkKSB7fQogIHZpcnR1YWwgfl9wb2ZfQ09SQkFfSW5pdGlhbFJlZmVyZW5jZXMoKTsKCiAg
dmlydHVhbCBvbW5pT2JqUmVmKiBuZXdPYmpSZWYoY29uc3QgY2hhciosIElPUDo6VGFnZ2VkUHJv
ZmlsZUxpc3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9tbmlJZGVudGl0eSos
IG9tbmlMb2NhbElkZW50aXR5Kik7CiAgdmlydHVhbCBfQ09SQkFfQm9vbGVhbiBpc19hKGNvbnN0
IGNoYXIqKSBjb25zdDsKfTsKCmNsYXNzIF9pbXBsX0NPUkJBX0luaXRpYWxSZWZlcmVuY2VzIDoK
ICBwdWJsaWMgdmlydHVhbCBvbW5pU2VydmFudAp7CnB1YmxpYzoKICB2aXJ0dWFsIH5faW1wbF9D
T1JCQV9Jbml0aWFsUmVmZXJlbmNlcygpOwoKICB2aXJ0dWFsIENPUkJBOjpPYmplY3RfcHRyIGdl
dChjb25zdCBjaGFyKiBpZCkgPSAwOwogIHZpcnR1YWwgQ09SQkFfSW5pdGlhbFJlZmVyZW5jZXM6
Ok9iaklkTGlzdCogbGlzdCgpID0gMDsKCnB1YmxpYzoKICB2aXJ0dWFsIF9DT1JCQV9Cb29sZWFu
IF9kaXNwYXRjaChHSU9QX1MmKTsKCnByaXZhdGU6CiAgdmlydHVhbCB2b2lkKiBfcHRyVG9JbnRl
cmZhY2UoY29uc3QgY2hhciopOwogIHZpcnR1YWwgY29uc3QgY2hhciogX21vc3REZXJpdmVkUmVw
b0lkKCk7Cn07CgpleHRlcm4gY29uc3QgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfQ09SQkFfSW5p
dGlhbFJlZmVyZW5jZXM7CgpjbGFzcyBQT0FfQ09SQkFfSW5pdGlhbFJlZmVyZW5jZXMgOgogIHB1
YmxpYyB2aXJ0dWFsIF9pbXBsX0NPUkJBX0luaXRpYWxSZWZlcmVuY2VzLAogIHB1YmxpYyB2aXJ0
dWFsIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50QmFzZQp7CnB1YmxpYzoKICB2aXJ0dWFsIH5QT0Ff
Q09SQkFfSW5pdGlhbFJlZmVyZW5jZXMoKTsKCiAgaW5saW5lIENPUkJBX0luaXRpYWxSZWZlcmVu
Y2VzX3B0ciBfdGhpcygpIHsKICAgIHJldHVybiAoQ09SQkFfSW5pdGlhbFJlZmVyZW5jZXNfcHRy
KSBfZG9fdGhpcyhDT1JCQV9Jbml0aWFsUmVmZXJlbmNlczo6X1BEX3JlcG9JZCk7CiAgfQp9OwoK
CgoKZXh0ZXJuIHZvaWQgb3BlcmF0b3IgPDw9IChDT1JCQTo6QW55JiBfYSwgY29uc3QgQ09SQkFf
SW5pdGlhbFJlZmVyZW5jZXM6Ok9iaklkTGlzdCYgX3MpOwppbmxpbmUgdm9pZCBvcGVyYXRvciA8
PD0gKENPUkJBOjpBbnkmIF9hLCBDT1JCQV9Jbml0aWFsUmVmZXJlbmNlczo6T2JqSWRMaXN0KiBf
c3ApIHsKICBfYSA8PD0gKl9zcDsKICBkZWxldGUgX3NwOwp9CmV4dGVybiBfQ09SQkFfQm9vbGVh
biBvcGVyYXRvciA+Pj0gKGNvbnN0IENPUkJBOjpBbnkmIF9hLCBDT1JCQV9Jbml0aWFsUmVmZXJl
bmNlczo6T2JqSWRMaXN0KiYgX3NwKTsKZXh0ZXJuIF9DT1JCQV9Cb29sZWFuIG9wZXJhdG9yID4+
PSAoY29uc3QgQ09SQkE6OkFueSYgX2EsIGNvbnN0IENPUkJBX0luaXRpYWxSZWZlcmVuY2VzOjpP
YmpJZExpc3QqJiBfc3ApOwoKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBfYSwgQ09SQkFf
SW5pdGlhbFJlZmVyZW5jZXNfcHRyIF9zKTsKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBf
YSwgQ09SQkFfSW5pdGlhbFJlZmVyZW5jZXNfcHRyKiBfcyk7CkNPUkJBOjpCb29sZWFuIG9wZXJh
dG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIF9hLCBDT1JCQV9Jbml0aWFsUmVmZXJlbmNlc19wdHIm
IF9zKTsKCmlubGluZSBzaXplX3QKQ09SQkFfSW5pdGlhbFJlZmVyZW5jZXM6Ol9hbGlnbmVkU2l6
ZShDT1JCQV9Jbml0aWFsUmVmZXJlbmNlc19wdHIgb2JqLCBzaXplX3Qgb2Zmc2V0KSB7CiAgcmV0
dXJuIENPUkJBOjpBbGlnbmVkT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMzYsIG9mZnNldCk7Cn0K
CmlubGluZSB2b2lkCkNPUkJBX0luaXRpYWxSZWZlcmVuY2VzOjpfbWFyc2hhbE9ialJlZihDT1JC
QV9Jbml0aWFsUmVmZXJlbmNlc19wdHIgb2JqLCBOZXRCdWZmZXJlZFN0cmVhbSYgcykgewogIENP
UkJBOjpNYXJzaGFsT2JqUmVmKG9iaiwgX1BEX3JlcG9JZCwgMzYsIHMpOwp9CgppbmxpbmUgdm9p
ZApDT1JCQV9Jbml0aWFsUmVmZXJlbmNlczo6X21hcnNoYWxPYmpSZWYoQ09SQkFfSW5pdGlhbFJl
ZmVyZW5jZXNfcHRyIG9iaiwgTWVtQnVmZmVyZWRTdHJlYW0mIHMpIHsKICBDT1JCQTo6TWFyc2hh
bE9ialJlZihvYmosIF9QRF9yZXBvSWQsIDM2LCBzKTsKfQojIDY3ICIuLi9pbml0UmVmcy5oIiAy
CgoKY2xhc3MgQ09SQkFfSW5pdGlhbFJlZmVyZW5jZXNfaTsKCgpjbGFzcyBvbW5pSW5pdGlhbFJl
ZmVyZW5jZXMgewpwdWJsaWM6CiAgc3RhdGljIENPUkJBOjpCb29sZWFuIHNldEZyb21GaWxlKGNv
bnN0IGNoYXIqIGlkZW50aWZpZXIsIGNvbnN0IGNoYXIqIHVyaSk7CiAgc3RhdGljIENPUkJBOjpC
b29sZWFuIHNldEZyb21BcmdzKGNvbnN0IGNoYXIqIGlkZW50aWZpZXIsIGNvbnN0IGNoYXIqIHVy
aSk7CgoKCgogIHN0YXRpYyB2b2lkIHNldERlZmF1bHRJbml0UmVmRnJvbUZpbGUoY29uc3QgY2hh
ciogZGVmSW5pdCk7CiAgc3RhdGljIHZvaWQgc2V0RGVmYXVsdEluaXRSZWZGcm9tQXJncyhjb25z
dCBjaGFyKiBkZWZJbml0KTsKCgogIHN0YXRpYyBDT1JCQTo6T2JqZWN0X3B0ciByZXNvbHZlKGNv
bnN0IGNoYXIqIGlkZW50aWZpZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IGN5Y2xlcyA9IDApOwoKCgoKCiAgc3RhdGljIENPUkJBOjpPUkI6Ok9iamVj
dElkTGlzdCogbGlzdCgpOwoKCgoKCiAgc3RhdGljIHZvaWQgcmVtRnJvbUZpbGUoY29uc3QgY2hh
ciogaWRlbnRpZmllcik7CgoKCgogIHN0YXRpYyB2b2lkIHJlbUZyb21BcmdzKGNvbnN0IGNoYXIq
IGlkZW50aWZpZXIpOwoKCiAgc3RhdGljIHZvaWQgaW5pdGlhbGlzZV9ib290c3RyYXBfYWdlbnRJ
bXBsKCk7CgogIHN0YXRpYyBpbnQgaW52b2tlX2Jvb3RzdHJhcF9hZ2VudEltcGwoR0lPUF9TJik7
CgoKCiAgc3RhdGljIGludCBpc19ib290c3RyYXBfYWdlbnRJbXBsX2luaXRpYWxpc2VkKCk7CgoK
ICBzdGF0aWMgdm9pZCBpbml0aWFsaXNlX2Jvb3RzdHJhcF9hZ2VudChjb25zdCBjaGFyKiBob3N0
LCBDT1JCQTo6VVNob3J0IHBvcnQpOwp9OwojIDgzICJwb3J0YWJsZXNlcnZlci5jYyIgMgojIDEg
Ii4uL2R5bmFtaWNMaWIuaCIgMQojIDUzICIuLi9keW5hbWljTGliLmgiCmNsYXNzIG9tbmlDYWxs
RGVzY3JpcHRvcjsKCgpjbGFzcyBvbW5pRHluYW1pY0xpYiB7CnB1YmxpYzoKCgoKCgoKICBzdGF0
aWMgb21uaUR5bmFtaWNMaWIqIG9wczsKCgoKICBzdGF0aWMgb21uaUR5bmFtaWNMaWIqIGhvb2s7
CgoKCgoKCiAgc3RhdGljIGNoYXIgbGlua19pbjsKCgoKCgoKICB2b2lkICgqaW5pdCkoKTsKICB2
b2lkICgqZGVpbml0KSgpOwoKCiAgc2l6ZV90ICgqY29udGV4dF9hbGlnbmVkX3NpemUpKHNpemVf
dCBpbml0b2Zmc2V0LCBDT1JCQTo6Q29udGV4dF9wdHIgY3h0eCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhcipjb25zdCogd2hpY2gsIGludCBob3dfbWFueSk7CiAg
dm9pZCAoKm1hcnNoYWxfY29udGV4dCkoTmV0QnVmZmVyZWRTdHJlYW0mLCBDT1JCQTo6Q29udGV4
dF9wdHIgY3h0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKmNvbnN0KiB3
aGljaCwgaW50IGhvd19tYW55KTsKCgoKCiAgdm9pZCAoKmxvb2t1cF9pZF9sY2ZuKShvbW5pQ2Fs
bERlc2NyaXB0b3IqLCBvbW5pU2VydmFudCopOwp9OwojIDg0ICJwb3J0YWJsZXNlcnZlci5jYyIg
MgojIDEgIi4uL2V4Y2VwdGlvbmRlZnMuaCIgMQojIDU1ICIuLi9leGNlcHRpb25kZWZzLmgiCmNs
YXNzIG9tbmlDb25uZWN0aW9uQnJva2VuIHsKcHVibGljOgogIGlubGluZSBvbW5pQ29ubmVjdGlv
bkJyb2tlbihDT1JCQTo6VUxvbmcgbSwgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMgYykKICAgIDog
cGRfbWlub3IobSksIHBkX3N0YXR1cyhjKSB7fQoKICBpbmxpbmUgQ09SQkE6OlVMb25nIG1pbm9y
KCkgY29uc3QgeyByZXR1cm4gcGRfbWlub3I7IH0KICBpbmxpbmUgQ09SQkE6OkNvbXBsZXRpb25T
dGF0dXMgY29tcGxldGVkKCkgY29uc3QgeyByZXR1cm4gcGRfc3RhdHVzOyB9Cgpwcml2YXRlOgog
IENPUkJBOjpVTG9uZyBwZF9taW5vcjsKICBDT1JCQTo6Q29tcGxldGlvblN0YXR1cyBwZF9zdGF0
dXM7Cn07CgoKCgoKY2xhc3Mgb21uaUV4SGVscGVyIHsKcHVibGljOgoKCgoKICBzdGF0aWMgdm9p
ZCBVTktOT1dOKGNvbnN0IGNoYXIqLCBpbnQsIENPUkJBOjpVTG9uZywgQ09SQkE6OkNvbXBsZXRp
b25TdGF0dXMpOyBzdGF0aWMgdm9pZCBCQURfUEFSQU0oY29uc3QgY2hhciosIGludCwgQ09SQkE6
OlVMb25nLCBDT1JCQTo6Q29tcGxldGlvblN0YXR1cyk7IHN0YXRpYyB2b2lkIE5PX01FTU9SWShj
b25zdCBjaGFyKiwgaW50LCBDT1JCQTo6VUxvbmcsIENPUkJBOjpDb21wbGV0aW9uU3RhdHVzKTsg
c3RhdGljIHZvaWQgSU1QX0xJTUlUKGNvbnN0IGNoYXIqLCBpbnQsIENPUkJBOjpVTG9uZywgQ09S
QkE6OkNvbXBsZXRpb25TdGF0dXMpOyBzdGF0aWMgdm9pZCBDT01NX0ZBSUxVUkUoY29uc3QgY2hh
ciosIGludCwgQ09SQkE6OlVMb25nLCBDT1JCQTo6Q29tcGxldGlvblN0YXR1cyk7IHN0YXRpYyB2
b2lkIElOVl9PQkpSRUYoY29uc3QgY2hhciosIGludCwgQ09SQkE6OlVMb25nLCBDT1JCQTo6Q29t
cGxldGlvblN0YXR1cyk7IHN0YXRpYyB2b2lkIE9CSkVDVF9OT1RfRVhJU1QoY29uc3QgY2hhcios
IGludCwgQ09SQkE6OlVMb25nLCBDT1JCQTo6Q29tcGxldGlvblN0YXR1cyk7IHN0YXRpYyB2b2lk
IE5PX1BFUk1JU1NJT04oY29uc3QgY2hhciosIGludCwgQ09SQkE6OlVMb25nLCBDT1JCQTo6Q29t
cGxldGlvblN0YXR1cyk7IHN0YXRpYyB2b2lkIElOVEVSTkFMKGNvbnN0IGNoYXIqLCBpbnQsIENP
UkJBOjpVTG9uZywgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMpOyBzdGF0aWMgdm9pZCBNQVJTSEFM
KGNvbnN0IGNoYXIqLCBpbnQsIENPUkJBOjpVTG9uZywgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMp
OyBzdGF0aWMgdm9pZCBJTklUSUFMSVpFKGNvbnN0IGNoYXIqLCBpbnQsIENPUkJBOjpVTG9uZywg
Q09SQkE6OkNvbXBsZXRpb25TdGF0dXMpOyBzdGF0aWMgdm9pZCBOT19JTVBMRU1FTlQoY29uc3Qg
Y2hhciosIGludCwgQ09SQkE6OlVMb25nLCBDT1JCQTo6Q29tcGxldGlvblN0YXR1cyk7IHN0YXRp
YyB2b2lkIEJBRF9UWVBFQ09ERShjb25zdCBjaGFyKiwgaW50LCBDT1JCQTo6VUxvbmcsIENPUkJB
OjpDb21wbGV0aW9uU3RhdHVzKTsgc3RhdGljIHZvaWQgQkFEX09QRVJBVElPTihjb25zdCBjaGFy
KiwgaW50LCBDT1JCQTo6VUxvbmcsIENPUkJBOjpDb21wbGV0aW9uU3RhdHVzKTsgc3RhdGljIHZv
aWQgTk9fUkVTT1VSQ0VTKGNvbnN0IGNoYXIqLCBpbnQsIENPUkJBOjpVTG9uZywgQ09SQkE6OkNv
bXBsZXRpb25TdGF0dXMpOyBzdGF0aWMgdm9pZCBOT19SRVNQT05TRShjb25zdCBjaGFyKiwgaW50
LCBDT1JCQTo6VUxvbmcsIENPUkJBOjpDb21wbGV0aW9uU3RhdHVzKTsgc3RhdGljIHZvaWQgUEVS
U0lTVF9TVE9SRShjb25zdCBjaGFyKiwgaW50LCBDT1JCQTo6VUxvbmcsIENPUkJBOjpDb21wbGV0
aW9uU3RhdHVzKTsgc3RhdGljIHZvaWQgQkFEX0lOVl9PUkRFUihjb25zdCBjaGFyKiwgaW50LCBD
T1JCQTo6VUxvbmcsIENPUkJBOjpDb21wbGV0aW9uU3RhdHVzKTsgc3RhdGljIHZvaWQgVFJBTlNJ
RU5UKGNvbnN0IGNoYXIqLCBpbnQsIENPUkJBOjpVTG9uZywgQ09SQkE6OkNvbXBsZXRpb25TdGF0
dXMpOyBzdGF0aWMgdm9pZCBGUkVFX01FTShjb25zdCBjaGFyKiwgaW50LCBDT1JCQTo6VUxvbmcs
IENPUkJBOjpDb21wbGV0aW9uU3RhdHVzKTsgc3RhdGljIHZvaWQgSU5WX0lERU5UKGNvbnN0IGNo
YXIqLCBpbnQsIENPUkJBOjpVTG9uZywgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMpOyBzdGF0aWMg
dm9pZCBJTlZfRkxBRyhjb25zdCBjaGFyKiwgaW50LCBDT1JCQTo6VUxvbmcsIENPUkJBOjpDb21w
bGV0aW9uU3RhdHVzKTsgc3RhdGljIHZvaWQgSU5URl9SRVBPUyhjb25zdCBjaGFyKiwgaW50LCBD
T1JCQTo6VUxvbmcsIENPUkJBOjpDb21wbGV0aW9uU3RhdHVzKTsgc3RhdGljIHZvaWQgQkFEX0NP
TlRFWFQoY29uc3QgY2hhciosIGludCwgQ09SQkE6OlVMb25nLCBDT1JCQTo6Q29tcGxldGlvblN0
YXR1cyk7IHN0YXRpYyB2b2lkIE9CSl9BREFQVEVSKGNvbnN0IGNoYXIqLCBpbnQsIENPUkJBOjpV
TG9uZywgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMpOyBzdGF0aWMgdm9pZCBEQVRBX0NPTlZFUlNJ
T04oY29uc3QgY2hhciosIGludCwgQ09SQkE6OlVMb25nLCBDT1JCQTo6Q29tcGxldGlvblN0YXR1
cyk7IHN0YXRpYyB2b2lkIFRSQU5TQUNUSU9OX1JFUVVJUkVEKGNvbnN0IGNoYXIqLCBpbnQsIENP
UkJBOjpVTG9uZywgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMpOyBzdGF0aWMgdm9pZCBUUkFOU0FD
VElPTl9ST0xMRURCQUNLKGNvbnN0IGNoYXIqLCBpbnQsIENPUkJBOjpVTG9uZywgQ09SQkE6OkNv
bXBsZXRpb25TdGF0dXMpOyBzdGF0aWMgdm9pZCBJTlZBTElEX1RSQU5TQUNUSU9OKGNvbnN0IGNo
YXIqLCBpbnQsIENPUkJBOjpVTG9uZywgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMpOyBzdGF0aWMg
dm9pZCBXUk9OR19UUkFOU0FDVElPTihjb25zdCBjaGFyKiwgaW50LCBDT1JCQTo6VUxvbmcsIENP
UkJBOjpDb21wbGV0aW9uU3RhdHVzKTsKCgoKICBzdGF0aWMgdm9pZCBvbW5pQ29ubmVjdGlvbkJy
b2tlbihjb25zdCBjaGFyKiwgaW50LCBDT1JCQTo6VUxvbmcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMpOwp9OwojIDg1ICJwb3J0YWJs
ZXNlcnZlci5jYyIgMgojIDE2OSAicG9ydGFibGVzZXJ2ZXIuY2MiClBvcnRhYmxlU2VydmVyOjpU
aHJlYWRQb2xpY3k6On5UaHJlYWRQb2xpY3koKSB7fSBDT1JCQTo6UG9saWN5X3B0ciBQb3J0YWJs
ZVNlcnZlcjo6VGhyZWFkUG9saWN5Ojpjb3B5KCkgeyBpZiggX05QX2lzX25pbCgpICkgX0NPUkJB
X2ludm9rZWRfbmlsX3BzZXVkb19yZWYoKTsgcmV0dXJuIG5ldyBUaHJlYWRQb2xpY3kocGRfdmFs
dWUpOyB9IHZvaWQqIFBvcnRhYmxlU2VydmVyOjpUaHJlYWRQb2xpY3k6Ol9wdHJUb09ialJlZihj
b25zdCBjaGFyKiByZXBvSWQpIHsgZG97IGlmKCAhKHJlcG9JZCkgKSBvbW5pOjphc3NlcnRGYWls
KCJwb3J0YWJsZXNlcnZlci5jYyIsMTY5LCAicmVwb0lkIik7IH13aGlsZSgwKTsgaWYoICFzdHJj
bXAocmVwb0lkLCBDT1JCQTo6T2JqZWN0OjpfUERfcmVwb0lkKSApIHJldHVybiAoQ09SQkE6Ok9i
amVjdF9wdHIpIHRoaXM7IGlmKCAhc3RyY21wKHJlcG9JZCwgQ09SQkE6OlBvbGljeTo6X1BEX3Jl
cG9JZCkgKSByZXR1cm4gKENPUkJBOjpQb2xpY3lfcHRyKSB0aGlzOyBpZiggIXN0cmNtcChyZXBv
SWQsIFBvcnRhYmxlU2VydmVyOjpUaHJlYWRQb2xpY3k6Ol9QRF9yZXBvSWQpICkgcmV0dXJuIChQ
b3J0YWJsZVNlcnZlcjo6VGhyZWFkUG9saWN5X3B0cikgdGhpczsgcmV0dXJuIDA7IH0gUG9ydGFi
bGVTZXJ2ZXI6OlRocmVhZFBvbGljeV9wdHIgUG9ydGFibGVTZXJ2ZXI6OlRocmVhZFBvbGljeTo6
X2R1cGxpY2F0ZShQb3J0YWJsZVNlcnZlcjo6VGhyZWFkUG9saWN5X3B0ciBvYmopIHsgaWYoICFD
T1JCQTo6aXNfbmlsKG9iaikgKSBvYmotPl9OUF9pbmNyUmVmQ291bnQoKTsgcmV0dXJuIG9iajsg
fSBQb3J0YWJsZVNlcnZlcjo6VGhyZWFkUG9saWN5X3B0ciBQb3J0YWJsZVNlcnZlcjo6VGhyZWFk
UG9saWN5OjpfbmFycm93KENPUkJBOjpPYmplY3RfcHRyIG9iaikgeyBpZiggQ09SQkE6OmlzX25p
bChvYmopICkgcmV0dXJuIF9uaWwoKTsgVGhyZWFkUG9saWN5X3B0ciBwID0gKFRocmVhZFBvbGlj
eV9wdHIpIG9iai0+X3B0clRvT2JqUmVmKFRocmVhZFBvbGljeTo6X1BEX3JlcG9JZCk7IGlmKCBw
ICkgcC0+X05QX2luY3JSZWZDb3VudCgpOyByZXR1cm4gcCA/IHAgOiBfbmlsKCk7IH0gUG9ydGFi
bGVTZXJ2ZXI6OlRocmVhZFBvbGljeV9wdHIgUG9ydGFibGVTZXJ2ZXI6OlRocmVhZFBvbGljeTo6
X25pbCgpIHsgc3RhdGljIFRocmVhZFBvbGljeSogX3RoZV9uaWxfcHRyID0gMDsgaWYoICFfdGhl
X25pbF9wdHIgKSB7IG9tbmk6Om5pbFJlZkxvY2soKS5sb2NrKCk7IGlmKCAhX3RoZV9uaWxfcHRy
ICkgX3RoZV9uaWxfcHRyID0gbmV3IFRocmVhZFBvbGljeTsgb21uaTo6bmlsUmVmTG9jaygpLnVu
bG9jaygpOyB9IHJldHVybiBfdGhlX25pbF9wdHI7IH0gY29uc3QgY2hhciogUG9ydGFibGVTZXJ2
ZXI6OlRocmVhZFBvbGljeTo6X1BEX3JlcG9JZCA9ICJJREw6b21nLm9yZy9Qb3J0YWJsZVNlcnZl
ci8iICJUaHJlYWRQb2xpY3kiICI6Mi4zIjsKUG9ydGFibGVTZXJ2ZXI6OkxpZmVzcGFuUG9saWN5
Ojp+TGlmZXNwYW5Qb2xpY3koKSB7fSBDT1JCQTo6UG9saWN5X3B0ciBQb3J0YWJsZVNlcnZlcjo6
TGlmZXNwYW5Qb2xpY3k6OmNvcHkoKSB7IGlmKCBfTlBfaXNfbmlsKCkgKSBfQ09SQkFfaW52b2tl
ZF9uaWxfcHNldWRvX3JlZigpOyByZXR1cm4gbmV3IExpZmVzcGFuUG9saWN5KHBkX3ZhbHVlKTsg
fSB2b2lkKiBQb3J0YWJsZVNlcnZlcjo6TGlmZXNwYW5Qb2xpY3k6Ol9wdHJUb09ialJlZihjb25z
dCBjaGFyKiByZXBvSWQpIHsgZG97IGlmKCAhKHJlcG9JZCkgKSBvbW5pOjphc3NlcnRGYWlsKCJw
b3J0YWJsZXNlcnZlci5jYyIsMTcwLCAicmVwb0lkIik7IH13aGlsZSgwKTsgaWYoICFzdHJjbXAo
cmVwb0lkLCBDT1JCQTo6T2JqZWN0OjpfUERfcmVwb0lkKSApIHJldHVybiAoQ09SQkE6Ok9iamVj
dF9wdHIpIHRoaXM7IGlmKCAhc3RyY21wKHJlcG9JZCwgQ09SQkE6OlBvbGljeTo6X1BEX3JlcG9J
ZCkgKSByZXR1cm4gKENPUkJBOjpQb2xpY3lfcHRyKSB0aGlzOyBpZiggIXN0cmNtcChyZXBvSWQs
IFBvcnRhYmxlU2VydmVyOjpMaWZlc3BhblBvbGljeTo6X1BEX3JlcG9JZCkgKSByZXR1cm4gKFBv
cnRhYmxlU2VydmVyOjpMaWZlc3BhblBvbGljeV9wdHIpIHRoaXM7IHJldHVybiAwOyB9IFBvcnRh
YmxlU2VydmVyOjpMaWZlc3BhblBvbGljeV9wdHIgUG9ydGFibGVTZXJ2ZXI6OkxpZmVzcGFuUG9s
aWN5OjpfZHVwbGljYXRlKFBvcnRhYmxlU2VydmVyOjpMaWZlc3BhblBvbGljeV9wdHIgb2JqKSB7
IGlmKCAhQ09SQkE6OmlzX25pbChvYmopICkgb2JqLT5fTlBfaW5jclJlZkNvdW50KCk7IHJldHVy
biBvYmo7IH0gUG9ydGFibGVTZXJ2ZXI6OkxpZmVzcGFuUG9saWN5X3B0ciBQb3J0YWJsZVNlcnZl
cjo6TGlmZXNwYW5Qb2xpY3k6Ol9uYXJyb3coQ09SQkE6Ok9iamVjdF9wdHIgb2JqKSB7IGlmKCBD
T1JCQTo6aXNfbmlsKG9iaikgKSByZXR1cm4gX25pbCgpOyBMaWZlc3BhblBvbGljeV9wdHIgcCA9
IChMaWZlc3BhblBvbGljeV9wdHIpIG9iai0+X3B0clRvT2JqUmVmKExpZmVzcGFuUG9saWN5Ojpf
UERfcmVwb0lkKTsgaWYoIHAgKSBwLT5fTlBfaW5jclJlZkNvdW50KCk7IHJldHVybiBwID8gcCA6
IF9uaWwoKTsgfSBQb3J0YWJsZVNlcnZlcjo6TGlmZXNwYW5Qb2xpY3lfcHRyIFBvcnRhYmxlU2Vy
dmVyOjpMaWZlc3BhblBvbGljeTo6X25pbCgpIHsgc3RhdGljIExpZmVzcGFuUG9saWN5KiBfdGhl
X25pbF9wdHIgPSAwOyBpZiggIV90aGVfbmlsX3B0ciApIHsgb21uaTo6bmlsUmVmTG9jaygpLmxv
Y2soKTsgaWYoICFfdGhlX25pbF9wdHIgKSBfdGhlX25pbF9wdHIgPSBuZXcgTGlmZXNwYW5Qb2xp
Y3k7IG9tbmk6Om5pbFJlZkxvY2soKS51bmxvY2soKTsgfSByZXR1cm4gX3RoZV9uaWxfcHRyOyB9
IGNvbnN0IGNoYXIqIFBvcnRhYmxlU2VydmVyOjpMaWZlc3BhblBvbGljeTo6X1BEX3JlcG9JZCA9
ICJJREw6b21nLm9yZy9Qb3J0YWJsZVNlcnZlci8iICJMaWZlc3BhblBvbGljeSIgIjoyLjMiOwpQ
b3J0YWJsZVNlcnZlcjo6SWRVbmlxdWVuZXNzUG9saWN5Ojp+SWRVbmlxdWVuZXNzUG9saWN5KCkg
e30gQ09SQkE6OlBvbGljeV9wdHIgUG9ydGFibGVTZXJ2ZXI6OklkVW5pcXVlbmVzc1BvbGljeTo6
Y29weSgpIHsgaWYoIF9OUF9pc19uaWwoKSApIF9DT1JCQV9pbnZva2VkX25pbF9wc2V1ZG9fcmVm
KCk7IHJldHVybiBuZXcgSWRVbmlxdWVuZXNzUG9saWN5KHBkX3ZhbHVlKTsgfSB2b2lkKiBQb3J0
YWJsZVNlcnZlcjo6SWRVbmlxdWVuZXNzUG9saWN5OjpfcHRyVG9PYmpSZWYoY29uc3QgY2hhciog
cmVwb0lkKSB7IGRveyBpZiggIShyZXBvSWQpICkgb21uaTo6YXNzZXJ0RmFpbCgicG9ydGFibGVz
ZXJ2ZXIuY2MiLDE3MSwgInJlcG9JZCIpOyB9d2hpbGUoMCk7IGlmKCAhc3RyY21wKHJlcG9JZCwg
Q09SQkE6Ok9iamVjdDo6X1BEX3JlcG9JZCkgKSByZXR1cm4gKENPUkJBOjpPYmplY3RfcHRyKSB0
aGlzOyBpZiggIXN0cmNtcChyZXBvSWQsIENPUkJBOjpQb2xpY3k6Ol9QRF9yZXBvSWQpICkgcmV0
dXJuIChDT1JCQTo6UG9saWN5X3B0cikgdGhpczsgaWYoICFzdHJjbXAocmVwb0lkLCBQb3J0YWJs
ZVNlcnZlcjo6SWRVbmlxdWVuZXNzUG9saWN5OjpfUERfcmVwb0lkKSApIHJldHVybiAoUG9ydGFi
bGVTZXJ2ZXI6OklkVW5pcXVlbmVzc1BvbGljeV9wdHIpIHRoaXM7IHJldHVybiAwOyB9IFBvcnRh
YmxlU2VydmVyOjpJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyIFBvcnRhYmxlU2VydmVyOjpJZFVuaXF1
ZW5lc3NQb2xpY3k6Ol9kdXBsaWNhdGUoUG9ydGFibGVTZXJ2ZXI6OklkVW5pcXVlbmVzc1BvbGlj
eV9wdHIgb2JqKSB7IGlmKCAhQ09SQkE6OmlzX25pbChvYmopICkgb2JqLT5fTlBfaW5jclJlZkNv
dW50KCk7IHJldHVybiBvYmo7IH0gUG9ydGFibGVTZXJ2ZXI6OklkVW5pcXVlbmVzc1BvbGljeV9w
dHIgUG9ydGFibGVTZXJ2ZXI6OklkVW5pcXVlbmVzc1BvbGljeTo6X25hcnJvdyhDT1JCQTo6T2Jq
ZWN0X3B0ciBvYmopIHsgaWYoIENPUkJBOjppc19uaWwob2JqKSApIHJldHVybiBfbmlsKCk7IElk
VW5pcXVlbmVzc1BvbGljeV9wdHIgcCA9IChJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyKSBvYmotPl9w
dHJUb09ialJlZihJZFVuaXF1ZW5lc3NQb2xpY3k6Ol9QRF9yZXBvSWQpOyBpZiggcCApIHAtPl9O
UF9pbmNyUmVmQ291bnQoKTsgcmV0dXJuIHAgPyBwIDogX25pbCgpOyB9IFBvcnRhYmxlU2VydmVy
OjpJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyIFBvcnRhYmxlU2VydmVyOjpJZFVuaXF1ZW5lc3NQb2xp
Y3k6Ol9uaWwoKSB7IHN0YXRpYyBJZFVuaXF1ZW5lc3NQb2xpY3kqIF90aGVfbmlsX3B0ciA9IDA7
IGlmKCAhX3RoZV9uaWxfcHRyICkgeyBvbW5pOjpuaWxSZWZMb2NrKCkubG9jaygpOyBpZiggIV90
aGVfbmlsX3B0ciApIF90aGVfbmlsX3B0ciA9IG5ldyBJZFVuaXF1ZW5lc3NQb2xpY3k7IG9tbmk6
Om5pbFJlZkxvY2soKS51bmxvY2soKTsgfSByZXR1cm4gX3RoZV9uaWxfcHRyOyB9IGNvbnN0IGNo
YXIqIFBvcnRhYmxlU2VydmVyOjpJZFVuaXF1ZW5lc3NQb2xpY3k6Ol9QRF9yZXBvSWQgPSAiSURM
Om9tZy5vcmcvUG9ydGFibGVTZXJ2ZXIvIiAiSWRVbmlxdWVuZXNzUG9saWN5IiAiOjIuMyI7ClBv
cnRhYmxlU2VydmVyOjpJZEFzc2lnbm1lbnRQb2xpY3k6On5JZEFzc2lnbm1lbnRQb2xpY3koKSB7
fSBDT1JCQTo6UG9saWN5X3B0ciBQb3J0YWJsZVNlcnZlcjo6SWRBc3NpZ25tZW50UG9saWN5Ojpj
b3B5KCkgeyBpZiggX05QX2lzX25pbCgpICkgX0NPUkJBX2ludm9rZWRfbmlsX3BzZXVkb19yZWYo
KTsgcmV0dXJuIG5ldyBJZEFzc2lnbm1lbnRQb2xpY3kocGRfdmFsdWUpOyB9IHZvaWQqIFBvcnRh
YmxlU2VydmVyOjpJZEFzc2lnbm1lbnRQb2xpY3k6Ol9wdHJUb09ialJlZihjb25zdCBjaGFyKiBy
ZXBvSWQpIHsgZG97IGlmKCAhKHJlcG9JZCkgKSBvbW5pOjphc3NlcnRGYWlsKCJwb3J0YWJsZXNl
cnZlci5jYyIsMTcyLCAicmVwb0lkIik7IH13aGlsZSgwKTsgaWYoICFzdHJjbXAocmVwb0lkLCBD
T1JCQTo6T2JqZWN0OjpfUERfcmVwb0lkKSApIHJldHVybiAoQ09SQkE6Ok9iamVjdF9wdHIpIHRo
aXM7IGlmKCAhc3RyY21wKHJlcG9JZCwgQ09SQkE6OlBvbGljeTo6X1BEX3JlcG9JZCkgKSByZXR1
cm4gKENPUkJBOjpQb2xpY3lfcHRyKSB0aGlzOyBpZiggIXN0cmNtcChyZXBvSWQsIFBvcnRhYmxl
U2VydmVyOjpJZEFzc2lnbm1lbnRQb2xpY3k6Ol9QRF9yZXBvSWQpICkgcmV0dXJuIChQb3J0YWJs
ZVNlcnZlcjo6SWRBc3NpZ25tZW50UG9saWN5X3B0cikgdGhpczsgcmV0dXJuIDA7IH0gUG9ydGFi
bGVTZXJ2ZXI6OklkQXNzaWdubWVudFBvbGljeV9wdHIgUG9ydGFibGVTZXJ2ZXI6OklkQXNzaWdu
bWVudFBvbGljeTo6X2R1cGxpY2F0ZShQb3J0YWJsZVNlcnZlcjo6SWRBc3NpZ25tZW50UG9saWN5
X3B0ciBvYmopIHsgaWYoICFDT1JCQTo6aXNfbmlsKG9iaikgKSBvYmotPl9OUF9pbmNyUmVmQ291
bnQoKTsgcmV0dXJuIG9iajsgfSBQb3J0YWJsZVNlcnZlcjo6SWRBc3NpZ25tZW50UG9saWN5X3B0
ciBQb3J0YWJsZVNlcnZlcjo6SWRBc3NpZ25tZW50UG9saWN5OjpfbmFycm93KENPUkJBOjpPYmpl
Y3RfcHRyIG9iaikgeyBpZiggQ09SQkE6OmlzX25pbChvYmopICkgcmV0dXJuIF9uaWwoKTsgSWRB
c3NpZ25tZW50UG9saWN5X3B0ciBwID0gKElkQXNzaWdubWVudFBvbGljeV9wdHIpIG9iai0+X3B0
clRvT2JqUmVmKElkQXNzaWdubWVudFBvbGljeTo6X1BEX3JlcG9JZCk7IGlmKCBwICkgcC0+X05Q
X2luY3JSZWZDb3VudCgpOyByZXR1cm4gcCA/IHAgOiBfbmlsKCk7IH0gUG9ydGFibGVTZXJ2ZXI6
OklkQXNzaWdubWVudFBvbGljeV9wdHIgUG9ydGFibGVTZXJ2ZXI6OklkQXNzaWdubWVudFBvbGlj
eTo6X25pbCgpIHsgc3RhdGljIElkQXNzaWdubWVudFBvbGljeSogX3RoZV9uaWxfcHRyID0gMDsg
aWYoICFfdGhlX25pbF9wdHIgKSB7IG9tbmk6Om5pbFJlZkxvY2soKS5sb2NrKCk7IGlmKCAhX3Ro
ZV9uaWxfcHRyICkgX3RoZV9uaWxfcHRyID0gbmV3IElkQXNzaWdubWVudFBvbGljeTsgb21uaTo6
bmlsUmVmTG9jaygpLnVubG9jaygpOyB9IHJldHVybiBfdGhlX25pbF9wdHI7IH0gY29uc3QgY2hh
ciogUG9ydGFibGVTZXJ2ZXI6OklkQXNzaWdubWVudFBvbGljeTo6X1BEX3JlcG9JZCA9ICJJREw6
b21nLm9yZy9Qb3J0YWJsZVNlcnZlci8iICJJZEFzc2lnbm1lbnRQb2xpY3kiICI6Mi4zIjsKUG9y
dGFibGVTZXJ2ZXI6OkltcGxpY2l0QWN0aXZhdGlvblBvbGljeTo6fkltcGxpY2l0QWN0aXZhdGlv
blBvbGljeSgpIHt9IENPUkJBOjpQb2xpY3lfcHRyIFBvcnRhYmxlU2VydmVyOjpJbXBsaWNpdEFj
dGl2YXRpb25Qb2xpY3k6OmNvcHkoKSB7IGlmKCBfTlBfaXNfbmlsKCkgKSBfQ09SQkFfaW52b2tl
ZF9uaWxfcHNldWRvX3JlZigpOyByZXR1cm4gbmV3IEltcGxpY2l0QWN0aXZhdGlvblBvbGljeShw
ZF92YWx1ZSk7IH0gdm9pZCogUG9ydGFibGVTZXJ2ZXI6OkltcGxpY2l0QWN0aXZhdGlvblBvbGlj
eTo6X3B0clRvT2JqUmVmKGNvbnN0IGNoYXIqIHJlcG9JZCkgeyBkb3sgaWYoICEocmVwb0lkKSAp
IG9tbmk6OmFzc2VydEZhaWwoInBvcnRhYmxlc2VydmVyLmNjIiwxNzMsICJyZXBvSWQiKTsgfXdo
aWxlKDApOyBpZiggIXN0cmNtcChyZXBvSWQsIENPUkJBOjpPYmplY3Q6Ol9QRF9yZXBvSWQpICkg
cmV0dXJuIChDT1JCQTo6T2JqZWN0X3B0cikgdGhpczsgaWYoICFzdHJjbXAocmVwb0lkLCBDT1JC
QTo6UG9saWN5OjpfUERfcmVwb0lkKSApIHJldHVybiAoQ09SQkE6OlBvbGljeV9wdHIpIHRoaXM7
IGlmKCAhc3RyY21wKHJlcG9JZCwgUG9ydGFibGVTZXJ2ZXI6OkltcGxpY2l0QWN0aXZhdGlvblBv
bGljeTo6X1BEX3JlcG9JZCkgKSByZXR1cm4gKFBvcnRhYmxlU2VydmVyOjpJbXBsaWNpdEFjdGl2
YXRpb25Qb2xpY3lfcHRyKSB0aGlzOyByZXR1cm4gMDsgfSBQb3J0YWJsZVNlcnZlcjo6SW1wbGlj
aXRBY3RpdmF0aW9uUG9saWN5X3B0ciBQb3J0YWJsZVNlcnZlcjo6SW1wbGljaXRBY3RpdmF0aW9u
UG9saWN5OjpfZHVwbGljYXRlKFBvcnRhYmxlU2VydmVyOjpJbXBsaWNpdEFjdGl2YXRpb25Qb2xp
Y3lfcHRyIG9iaikgeyBpZiggIUNPUkJBOjppc19uaWwob2JqKSApIG9iai0+X05QX2luY3JSZWZD
b3VudCgpOyByZXR1cm4gb2JqOyB9IFBvcnRhYmxlU2VydmVyOjpJbXBsaWNpdEFjdGl2YXRpb25Q
b2xpY3lfcHRyIFBvcnRhYmxlU2VydmVyOjpJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3k6Ol9uYXJy
b3coQ09SQkE6Ok9iamVjdF9wdHIgb2JqKSB7IGlmKCBDT1JCQTo6aXNfbmlsKG9iaikgKSByZXR1
cm4gX25pbCgpOyBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfcHRyIHAgPSAoSW1wbGljaXRBY3Rp
dmF0aW9uUG9saWN5X3B0cikgb2JqLT5fcHRyVG9PYmpSZWYoSW1wbGljaXRBY3RpdmF0aW9uUG9s
aWN5OjpfUERfcmVwb0lkKTsgaWYoIHAgKSBwLT5fTlBfaW5jclJlZkNvdW50KCk7IHJldHVybiBw
ID8gcCA6IF9uaWwoKTsgfSBQb3J0YWJsZVNlcnZlcjo6SW1wbGljaXRBY3RpdmF0aW9uUG9saWN5
X3B0ciBQb3J0YWJsZVNlcnZlcjo6SW1wbGljaXRBY3RpdmF0aW9uUG9saWN5OjpfbmlsKCkgeyBz
dGF0aWMgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5KiBfdGhlX25pbF9wdHIgPSAwOyBpZiggIV90
aGVfbmlsX3B0ciApIHsgb21uaTo6bmlsUmVmTG9jaygpLmxvY2soKTsgaWYoICFfdGhlX25pbF9w
dHIgKSBfdGhlX25pbF9wdHIgPSBuZXcgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5OyBvbW5pOjpu
aWxSZWZMb2NrKCkudW5sb2NrKCk7IH0gcmV0dXJuIF90aGVfbmlsX3B0cjsgfSBjb25zdCBjaGFy
KiBQb3J0YWJsZVNlcnZlcjo6SW1wbGljaXRBY3RpdmF0aW9uUG9saWN5OjpfUERfcmVwb0lkID0g
IklETDpvbWcub3JnL1BvcnRhYmxlU2VydmVyLyIgIkltcGxpY2l0QWN0aXZhdGlvblBvbGljeSIg
IjoyLjMiOwpQb3J0YWJsZVNlcnZlcjo6U2VydmFudFJldGVudGlvblBvbGljeTo6flNlcnZhbnRS
ZXRlbnRpb25Qb2xpY3koKSB7fSBDT1JCQTo6UG9saWN5X3B0ciBQb3J0YWJsZVNlcnZlcjo6U2Vy
dmFudFJldGVudGlvblBvbGljeTo6Y29weSgpIHsgaWYoIF9OUF9pc19uaWwoKSApIF9DT1JCQV9p
bnZva2VkX25pbF9wc2V1ZG9fcmVmKCk7IHJldHVybiBuZXcgU2VydmFudFJldGVudGlvblBvbGlj
eShwZF92YWx1ZSk7IH0gdm9pZCogUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRSZXRlbnRpb25Qb2xp
Y3k6Ol9wdHJUb09ialJlZihjb25zdCBjaGFyKiByZXBvSWQpIHsgZG97IGlmKCAhKHJlcG9JZCkg
KSBvbW5pOjphc3NlcnRGYWlsKCJwb3J0YWJsZXNlcnZlci5jYyIsMTc0LCAicmVwb0lkIik7IH13
aGlsZSgwKTsgaWYoICFzdHJjbXAocmVwb0lkLCBDT1JCQTo6T2JqZWN0OjpfUERfcmVwb0lkKSAp
IHJldHVybiAoQ09SQkE6Ok9iamVjdF9wdHIpIHRoaXM7IGlmKCAhc3RyY21wKHJlcG9JZCwgQ09S
QkE6OlBvbGljeTo6X1BEX3JlcG9JZCkgKSByZXR1cm4gKENPUkJBOjpQb2xpY3lfcHRyKSB0aGlz
OyBpZiggIXN0cmNtcChyZXBvSWQsIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50UmV0ZW50aW9uUG9s
aWN5OjpfUERfcmVwb0lkKSApIHJldHVybiAoUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRSZXRlbnRp
b25Qb2xpY3lfcHRyKSB0aGlzOyByZXR1cm4gMDsgfSBQb3J0YWJsZVNlcnZlcjo6U2VydmFudFJl
dGVudGlvblBvbGljeV9wdHIgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRSZXRlbnRpb25Qb2xpY3k6
Ol9kdXBsaWNhdGUoUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfcHRyIG9i
aikgeyBpZiggIUNPUkJBOjppc19uaWwob2JqKSApIG9iai0+X05QX2luY3JSZWZDb3VudCgpOyBy
ZXR1cm4gb2JqOyB9IFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0ciBQ
b3J0YWJsZVNlcnZlcjo6U2VydmFudFJldGVudGlvblBvbGljeTo6X25hcnJvdyhDT1JCQTo6T2Jq
ZWN0X3B0ciBvYmopIHsgaWYoIENPUkJBOjppc19uaWwob2JqKSApIHJldHVybiBfbmlsKCk7IFNl
cnZhbnRSZXRlbnRpb25Qb2xpY3lfcHRyIHAgPSAoU2VydmFudFJldGVudGlvblBvbGljeV9wdHIp
IG9iai0+X3B0clRvT2JqUmVmKFNlcnZhbnRSZXRlbnRpb25Qb2xpY3k6Ol9QRF9yZXBvSWQpOyBp
ZiggcCApIHAtPl9OUF9pbmNyUmVmQ291bnQoKTsgcmV0dXJuIHAgPyBwIDogX25pbCgpOyB9IFBv
cnRhYmxlU2VydmVyOjpTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0ciBQb3J0YWJsZVNlcnZlcjo6
U2VydmFudFJldGVudGlvblBvbGljeTo6X25pbCgpIHsgc3RhdGljIFNlcnZhbnRSZXRlbnRpb25Q
b2xpY3kqIF90aGVfbmlsX3B0ciA9IDA7IGlmKCAhX3RoZV9uaWxfcHRyICkgeyBvbW5pOjpuaWxS
ZWZMb2NrKCkubG9jaygpOyBpZiggIV90aGVfbmlsX3B0ciApIF90aGVfbmlsX3B0ciA9IG5ldyBT
ZXJ2YW50UmV0ZW50aW9uUG9saWN5OyBvbW5pOjpuaWxSZWZMb2NrKCkudW5sb2NrKCk7IH0gcmV0
dXJuIF90aGVfbmlsX3B0cjsgfSBjb25zdCBjaGFyKiBQb3J0YWJsZVNlcnZlcjo6U2VydmFudFJl
dGVudGlvblBvbGljeTo6X1BEX3JlcG9JZCA9ICJJREw6b21nLm9yZy9Qb3J0YWJsZVNlcnZlci8i
ICJTZXJ2YW50UmV0ZW50aW9uUG9saWN5IiAiOjIuMyI7ClBvcnRhYmxlU2VydmVyOjpSZXF1ZXN0
UHJvY2Vzc2luZ1BvbGljeTo6flJlcXVlc3RQcm9jZXNzaW5nUG9saWN5KCkge30gQ09SQkE6OlBv
bGljeV9wdHIgUG9ydGFibGVTZXJ2ZXI6OlJlcXVlc3RQcm9jZXNzaW5nUG9saWN5Ojpjb3B5KCkg
eyBpZiggX05QX2lzX25pbCgpICkgX0NPUkJBX2ludm9rZWRfbmlsX3BzZXVkb19yZWYoKTsgcmV0
dXJuIG5ldyBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeShwZF92YWx1ZSk7IH0gdm9pZCogUG9ydGFi
bGVTZXJ2ZXI6OlJlcXVlc3RQcm9jZXNzaW5nUG9saWN5OjpfcHRyVG9PYmpSZWYoY29uc3QgY2hh
ciogcmVwb0lkKSB7IGRveyBpZiggIShyZXBvSWQpICkgb21uaTo6YXNzZXJ0RmFpbCgicG9ydGFi
bGVzZXJ2ZXIuY2MiLDE3NSwgInJlcG9JZCIpOyB9d2hpbGUoMCk7IGlmKCAhc3RyY21wKHJlcG9J
ZCwgQ09SQkE6Ok9iamVjdDo6X1BEX3JlcG9JZCkgKSByZXR1cm4gKENPUkJBOjpPYmplY3RfcHRy
KSB0aGlzOyBpZiggIXN0cmNtcChyZXBvSWQsIENPUkJBOjpQb2xpY3k6Ol9QRF9yZXBvSWQpICkg
cmV0dXJuIChDT1JCQTo6UG9saWN5X3B0cikgdGhpczsgaWYoICFzdHJjbXAocmVwb0lkLCBQb3J0
YWJsZVNlcnZlcjo6UmVxdWVzdFByb2Nlc3NpbmdQb2xpY3k6Ol9QRF9yZXBvSWQpICkgcmV0dXJu
IChQb3J0YWJsZVNlcnZlcjo6UmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfcHRyKSB0aGlzOyByZXR1
cm4gMDsgfSBQb3J0YWJsZVNlcnZlcjo6UmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfcHRyIFBvcnRh
YmxlU2VydmVyOjpSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeTo6X2R1cGxpY2F0ZShQb3J0YWJsZVNl
cnZlcjo6UmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfcHRyIG9iaikgeyBpZiggIUNPUkJBOjppc19u
aWwob2JqKSApIG9iai0+X05QX2luY3JSZWZDb3VudCgpOyByZXR1cm4gb2JqOyB9IFBvcnRhYmxl
U2VydmVyOjpSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgUG9ydGFibGVTZXJ2ZXI6OlJlcXVl
c3RQcm9jZXNzaW5nUG9saWN5OjpfbmFycm93KENPUkJBOjpPYmplY3RfcHRyIG9iaikgeyBpZigg
Q09SQkE6OmlzX25pbChvYmopICkgcmV0dXJuIF9uaWwoKTsgUmVxdWVzdFByb2Nlc3NpbmdQb2xp
Y3lfcHRyIHAgPSAoUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfcHRyKSBvYmotPl9wdHJUb09ialJl
ZihSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeTo6X1BEX3JlcG9JZCk7IGlmKCBwICkgcC0+X05QX2lu
Y3JSZWZDb3VudCgpOyByZXR1cm4gcCA/IHAgOiBfbmlsKCk7IH0gUG9ydGFibGVTZXJ2ZXI6OlJl
cXVlc3RQcm9jZXNzaW5nUG9saWN5X3B0ciBQb3J0YWJsZVNlcnZlcjo6UmVxdWVzdFByb2Nlc3Np
bmdQb2xpY3k6Ol9uaWwoKSB7IHN0YXRpYyBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeSogX3RoZV9u
aWxfcHRyID0gMDsgaWYoICFfdGhlX25pbF9wdHIgKSB7IG9tbmk6Om5pbFJlZkxvY2soKS5sb2Nr
KCk7IGlmKCAhX3RoZV9uaWxfcHRyICkgX3RoZV9uaWxfcHRyID0gbmV3IFJlcXVlc3RQcm9jZXNz
aW5nUG9saWN5OyBvbW5pOjpuaWxSZWZMb2NrKCkudW5sb2NrKCk7IH0gcmV0dXJuIF90aGVfbmls
X3B0cjsgfSBjb25zdCBjaGFyKiBQb3J0YWJsZVNlcnZlcjo6UmVxdWVzdFByb2Nlc3NpbmdQb2xp
Y3k6Ol9QRF9yZXBvSWQgPSAiSURMOm9tZy5vcmcvUG9ydGFibGVTZXJ2ZXIvIiAiUmVxdWVzdFBy
b2Nlc3NpbmdQb2xpY3kiICI6Mi4zIjsKCgoKCgoKClBvcnRhYmxlU2VydmVyOjpTZXJ2YW50QmFz
ZTo6flNlcnZhbnRCYXNlKCkge30KCgpQb3J0YWJsZVNlcnZlcjo6UE9BX3B0cgpQb3J0YWJsZVNl
cnZlcjo6U2VydmFudEJhc2U6Ol9kZWZhdWx0X1BPQSgpCnsKICByZXR1cm4gb21uaU9yYlBPQTo6
cm9vdFBPQSgpOwp9CgoKQ09SQkE6Ol9vYmpyZWZfSW50ZXJmYWNlRGVmKgpQb3J0YWJsZVNlcnZl
cjo6U2VydmFudEJhc2U6Ol9nZXRfaW50ZXJmYWNlKCkKewoKCgoKICByZXR1cm4gMDsKfQoKCnZv
aWQKUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRCYXNlOjpfYWRkX3JlZigpCnsKCn0KCgp2b2lkClBv
cnRhYmxlU2VydmVyOjpTZXJ2YW50QmFzZTo6X3JlbW92ZV9yZWYoKQp7Cgp9CgoKdm9pZCoKUG9y
dGFibGVTZXJ2ZXI6OlNlcnZhbnRCYXNlOjpfZG9fdGhpcyhjb25zdCBjaGFyKiByZXBvSWQpCnsK
ICBkb3sgaWYoICEocmVwb0lkKSApIG9tbmk6OmFzc2VydEZhaWwoInBvcnRhYmxlc2VydmVyLmNj
IiwyMjEsICJyZXBvSWQiKTsgfXdoaWxlKDApOwoKICBpZiggMCApIHsKCgoKCgoKCiAgfQogIGVs
c2UgewoKICAgIHsKICAgICAgb21uaV90cmFjZWRtdXRleF9sb2NrIHN5bmMoKm9tbmk6OmludGVy
bmFsTG9jayk7CgogICAgICBvbW5pTG9jYWxJZGVudGl0eSogaWQgPSBfaWRlbnRpdGllcygpOwoK
ICAgICAgaWYoIGlkICYmICFpZC0+c2VydmFudHNOZXh0SWRlbnRpdHkoKSApIHsKCiAgICAgICAg
b21uaU9ialJlZiogcmVmID0gb21uaTo6Y3JlYXRlT2JqUmVmKF9tb3N0RGVyaXZlZFJlcG9JZCgp
LCByZXBvSWQsIGlkKTsKICAgICAgICBkb3sgaWYoICEocmVmKSApIG9tbmk6OmFzc2VydEZhaWwo
InBvcnRhYmxlc2VydmVyLmNjIiwyNDIsICJyZWYiKTsgfXdoaWxlKDApOwogICAgICAgIHJldHVy
biByZWYtPl9wdHJUb09ialJlZihyZXBvSWQpOwogICAgICB9CiAgICB9CgogICAgUG9ydGFibGVT
ZXJ2ZXI6OlBPQV92YXIgcG9hID0gdGhpcy0+X2RlZmF1bHRfUE9BKCk7CgogICAgaWYoIENPUkJB
Ojppc19uaWwocG9hKSApCiAgICAgIG9tbmlFeEhlbHBlcjo6T0JKX0FEQVBURVIoInBvcnRhYmxl
c2VydmVyLmNjIiwgMjUwLCAwLCBDT1JCQTo6Q09NUExFVEVEX05PKTsKCiAgICByZXR1cm4gKChv
bW5pT3JiUE9BKikoUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIpIHBvYSktPgogICAgICBzZXJ2YW50
X190aGlzKHRoaXMsIHJlcG9JZCk7CiAgfQp9CgoKb21uaU9ialJlZioKUG9ydGFibGVTZXJ2ZXI6
OlNlcnZhbnRCYXNlOjpfZG9fZ2V0X2ludGVyZmFjZSgpCnsKICBDT1JCQTo6X29ianJlZl9JbnRl
cmZhY2VEZWYqIHAgPSBfZ2V0X2ludGVyZmFjZSgpOwogIGlmKCBwICkgcmV0dXJuIHAtPl9QUl9n
ZXRvYmooKTsKCgoKCgoKCiAgY29uc3QgY2hhciogcmVwb0lkID0gX21vc3REZXJpdmVkUmVwb0lk
KCk7CiAgZG97IGlmKCAhKHJlcG9JZCAmJiAqcmVwb0lkKSApIG9tbmk6OmFzc2VydEZhaWwoInBv
cnRhYmxlc2VydmVyLmNjIiwyNzEsICJyZXBvSWQgJiYgKnJlcG9JZCIpOyB9d2hpbGUoMCk7CgoK
ICBDT1JCQTo6T2JqZWN0X3ZhciByZXBvc2l0b3J5ID0gQ09SQkE6Ok9iamVjdDo6X25pbCgpOwog
IHRyeSB7CiAgICByZXBvc2l0b3J5ID0gb21uaUluaXRpYWxSZWZlcmVuY2VzOjpyZXNvbHZlKCJJ
bnRlcmZhY2VSZXBvc2l0b3J5Iik7CiAgfQogIGNhdGNoICguLi4pIHsKICB9CiAgaWYoIENPUkJB
Ojppc19uaWwocmVwb3NpdG9yeSkgKQogICAgb21uaUV4SGVscGVyOjpJTlRGX1JFUE9TKCJwb3J0
YWJsZXNlcnZlci5jYyIsIDI4MSwgMCwgQ09SQkE6OkNPTVBMRVRFRF9OTyk7CgoKICBvbW5pU3Rk
Q2FsbERlc2M6Ol9jQ09SQkFfbU9iamVjdF9pX2NzdHJpbmcKICAgIGNhbGxfZGVzYyhvbW5pRHlu
YW1pY0xpYjo6b3BzLT5sb29rdXBfaWRfbGNmbiwgImxvb2t1cF9pZCIsIDEwLCAwLCByZXBvSWQp
OwogIHJlcG9zaXRvcnktPl9QUl9nZXRvYmooKS0+X2ludm9rZShjYWxsX2Rlc2MpOwoKICByZXR1
cm4gY2FsbF9kZXNjLnJlc3VsdCgpID8gY2FsbF9kZXNjLnJlc3VsdCgpLT5fUFJfZ2V0b2JqKCkg
OiAwOwp9CgoKdm9pZCoKUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRCYXNlOjpfZG93bmNhc3QoKQp7
CiAgcmV0dXJuIChTZXJ2YW50KSB0aGlzOwp9CgoKCgoKc3RhdGljIG9tbmlfdHJhY2VkbXV0ZXgg
cmVmX2NvdW50X2xvY2s7CgoKUG9ydGFibGVTZXJ2ZXI6OlJlZkNvdW50U2VydmFudEJhc2U6On5S
ZWZDb3VudFNlcnZhbnRCYXNlKCkge30KCgp2b2lkClBvcnRhYmxlU2VydmVyOjpSZWZDb3VudFNl
cnZhbnRCYXNlOjpfYWRkX3JlZigpCnsKICByZWZfY291bnRfbG9jay5sb2NrKCk7CgoKCgoKICBk
b3sgaWYoICEocGRfcmVmQ291bnQgPiAwKSApIG9tbmk6OnVjaGVja0ZhaWwoInBvcnRhYmxlc2Vy
dmVyLmNjIiwzMTcsICJwZF9yZWZDb3VudCA+IDAiKTsgfXdoaWxlKDApOwoKICBwZF9yZWZDb3Vu
dCsrOwogIHJlZl9jb3VudF9sb2NrLnVubG9jaygpOwp9CgoKdm9pZApQb3J0YWJsZVNlcnZlcjo6
UmVmQ291bnRTZXJ2YW50QmFzZTo6X3JlbW92ZV9yZWYoKQp7CiAgcmVmX2NvdW50X2xvY2subG9j
aygpOwogIGludCBkb25lID0gLS1wZF9yZWZDb3VudCA+IDA7CiAgcmVmX2NvdW50X2xvY2sudW5s
b2NrKCk7CiAgaWYoIGRvbmUgKSByZXR1cm47CgogIGlmKCBwZF9yZWZDb3VudCA8IDAgKSB7CiAg
ICBvbW5pT1JCOjpsb2dzKDEsICJSZWZDb3VudFNlcnZhbnRCYXNlIGhhcyBuZWdhdGl2ZSByZWYg
Y291bnQhIik7CiAgICByZXR1cm47CiAgfQoKICBvbW5pT1JCOjpsb2dzKDE1LCAiUmVmQ291bnRT
ZXJ2YW50QmFzZSBoYXMgemVybyByZWYgY291bnQgLS0gZGVsZXRlZC4iKTsKCiAgZGVsZXRlIHRo
aXM7Cn0KCgoKCgpjaGFyKgpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWRfdG9fc3RyaW5nKGNvbnN0
IE9iamVjdElkJiBpZCkKewogIGludCBsZW4gPSBpZC5sZW5ndGgoKTsKCiAgY2hhciogcyA9IG9t
bmk6OmFsbG9jU3RyaW5nKGxlbik7CgogIGZvciggaW50IGkgPSAwOyBpIDwgbGVuOyBpKysgKQog
ICAgaWYoIChjaGFyKSAoc1tpXSA9IGlkW2ldKSA9PSAnXDAnICkgewogICAgICBkZWxldGVbXSBz
OwogICAgICBvbW5pRXhIZWxwZXI6OkJBRF9QQVJBTSgicG9ydGFibGVzZXJ2ZXIuY2MiLCAzNTYs
IDAsIENPUkJBOjpDT01QTEVURURfTk8pOwogICAgfQoKICBzW2xlbl0gPSAnXDAnOwogIHJldHVy
biBzOwp9CgoKUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkKgpQb3J0YWJsZVNlcnZlcjo6c3RyaW5n
X3RvX09iamVjdElkKGNvbnN0IGNoYXIqIHMpCnsKICBpbnQgbGVuID0gc3RybGVuKHMpOwogIE9i
amVjdElkKiBwaWQgPSBuZXcgT2JqZWN0SWQobGVuKTsKICBPYmplY3RJZCYgaWQgPSAqcGlkOwoK
ICBpZC5sZW5ndGgobGVuKTsKCiAgZm9yKCBpbnQgaSA9IDA7IGkgPCBsZW47IGkrKyApIGlkW2ld
ID0gKnMrKzsKCiAgcmV0dXJuIHBpZDsKfQo=


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

* Re: c++/3121: ICE whilst compiling omniORB
@ 2001-06-11 14:44 rth
  0 siblings, 0 replies; 2+ messages in thread
From: rth @ 2001-06-11 14:44 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, nobody, teemu

Synopsis: ICE whilst compiling omniORB

State-Changed-From-To: open->closed
State-Changed-By: rth
State-Changed-When: Mon Jun 11 14:44:18 2001
State-Changed-Why:
    Duplicate of 3089.

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


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

end of thread, other threads:[~2001-06-11 14:44 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-06-11  4:06 c++/3121: ICE whilst compiling omniORB teemu
2001-06-11 14:44 rth

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