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


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

c++/2690: complex<double> segfault with -g and -O



>Number:         2690
>Category:       c++
>Synopsis:       complex<double> segfault with -g and -O
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun Apr 29 13:56:00 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     khan@nanotech.wisc.edu
>Release:        gcc mainline and 3.0 branch
>Organization:
>Environment:
i686-pc-linux-gnu
>Description:
When compiling with both -g and -O2 (and -O in some cases),
the following code will crash the compiler (both mainline
and 3.0 branch, CVS updated 2001-04-29):

#include <complex>
struct
foo
{
  foo(std::complex<double>);
};
 
foo::foo(std::complex<double> in)
{
  std::complex<double> tmp;
  tmp = in;
}

Note that defining foo::foo(std::complex<double>) inline
will not crash the compiler.

Preprocessed file attached.

$ gcc -v
Reading specs from /homes/khan/local/gcc-3.0/lib/gcc-lib/i686-pc-linux-gnu/3.0/specs
Configured with: ../../gcc3-cvs/configure --enable-shared --enable-threads --enable-languages=c++,f77 --prefix=/homes/khan/local/gcc-3.0 --with-system-zlib -v
Thread model: posix
gcc version 3.0 20010428 (prerelease)

The backtrace shows the following:

$ gdb cc1plus
(gdb) run -fpreprocessed xx.ii -quiet -dumpbase xx.cc -g -O -version -o xx.s
Starting program: /homes/khan/src/gnu/BUILD/gcc-cvs/gcc/cc1plus -fpreprocessed xx.ii -quiet -dumpbase xx.cc -g -O -version -o xx.s
Breakpoint 1 at 0x400411d2: file exit.c, line 40.
Breakpoint 3 at 0x40040008: file ../sysdeps/generic/abort.c, line 55.
GNU CPP version 3.1 20010428 (experimental) (cpplib) (i386 Linux/ELF)
GNU C++ version 3.1 20010428 (experimental) (i686-pc-linux-gnu)
        compiled by GNU C version 3.1 20010428 (experimental).
 
Program received signal SIGSEGV, Segmentation fault.
dbxout_type (type=0x0, full=0, show_arg_types=0)
    at ../../../gcc-cvs/gcc/dbxout.c:1022
1022      if (TREE_CODE (type) == VECTOR_TYPE)
(gdb) bt
#0  dbxout_type (type=0x0, full=0, show_arg_types=0)
    at ../../../gcc-cvs/gcc/dbxout.c:1022
#1  0x83311c8 in dbxout_symbol_location (decl=0x4040b548, type=0x0,
    suffix=0x842387c "$real", home=0x403e4920)
    at ../../../gcc-cvs/gcc/dbxout.c:2211
#2  0x8331237 in dbxout_symbol_location (decl=0x4040b548, type=0x4039a958,
    suffix=0x0, home=0x403e4940) at ../../../gcc-cvs/gcc/dbxout.c:2183
#3  0x8332a75 in dbxout_reg_parms (parms=0x4040b4e0)
    at ../../../gcc-cvs/gcc/dbxout.c:2591
#4  0x8332dab in dbxout_block (block=0x4040d160, depth=0, args=0x4040b4e0)
    at ../../../gcc-cvs/gcc/dbxout.c:2686
#5  0x8333228 in dbxout_function (decl=0x4040b478)
    at ../../../gcc-cvs/gcc/dbxout.c:2802
#6  0x82df58c in rest_of_compilation (decl=0x4040b478)
    at ../../../gcc-cvs/gcc/toplev.c:3754
#7  0x8117a1f in genrtl_finish_function (fn=0x4040b478)
    at ../../../gcc-cvs/gcc/cp/semantics.c:2689
#8  0x8117021 in expand_body (fn=0x4040b478)
    at ../../../gcc-cvs/gcc/cp/semantics.c:2475
#9  0x8126982 in maybe_clone_body (fn=0x40407958)
    at ../../../gcc-cvs/gcc/cp/optimize.c:1164
#10 0x8116e93 in expand_body (fn=0x40407958)
    at ../../../gcc-cvs/gcc/cp/semantics.c:2396
#11 0x80d6c93 in yyparse_1 () at /usr/lib/bison.simple:765
#12 0x82dd638 in compile_file (name=0xbffff88b "xx.ii")
    at ../../../gcc-cvs/gcc/toplev.c:2324
#13 0x82e1f6b in toplev_main (argc=11, argv=0xbffff6d4)
    at ../../../gcc-cvs/gcc/toplev.c:4936
#14 0x400389cb in __libc_start_main (main=0x8147150 <main>, argc=11,
    argv=0xbffff6d4, init=0x80491a4 <_init>, fini=0x838196c <_fini>,
    rtld_fini=0x4000aea0 <_dl_fini>, stack_end=0xbffff6cc)
    at ../sysdeps/generic/libc-start.c:92
(gdb)

>How-To-Repeat:
Compile with -g and -O[123456]
>Fix:

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

IyAxICJ4eC5jYyIKIyAxICIvaG9tZXMva2hhbi9sb2NhbC9nY2MtMy4xL2luY2x1ZGUvZysrLXYz
L2NvbXBsZXgiIDEgMwoKIyAxICIvaG9tZXMva2hhbi9sb2NhbC9nY2MtMy4xL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2NvbXBsZXguaCIgMSAzCiMgNDEgIi9ob21lcy9raGFuL2xvY2FsL2djYy0z
LjEvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY29tcGxleC5oIiAzCgojIDEgIi9ob21lcy9raGFu
L2xvY2FsL2djYy0zLjEvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytj
b25maWcuaCIgMSAzCiMgMzQgIi9ob21lcy9raGFuL2xvY2FsL2djYy0zLjEvaW5jbHVkZS9nKyst
djMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMwojIDEgIi9ob21lcy9raGFu
L2xvY2FsL2djYy0zLjEvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19k
ZWZpbmVzLmgiIDEgMwojIDM3ICIvaG9tZXMva2hhbi9sb2NhbC9nY2MtMy4xL2luY2x1ZGUvZysr
LXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI1MCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDEgMwojIDI1MSAiL3Vzci9pbmNsdWRlL2ZlYXR1
cmVzLmgiIDIgMwojIDI3OCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvZ251L3N0dWJzLmgiIDEgMwojIDI3OSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIg
MwojIDM4ICIvaG9tZXMva2hhbi9sb2NhbC9nY2MtMy4xL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMt
bGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAyIDMKIyAzNSAiL2hvbWVzL2toYW4vbG9jYWwv
Z2NjLTMuMS9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5o
IiAyIDMKIyA0MyAiL2hvbWVzL2toYW4vbG9jYWwvZ2NjLTMuMS9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9jb21wbGV4LmgiIDIgMwojIDEgIi9ob21lcy9raGFuL2xvY2FsL2djYy0zLjEvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfY21hdGguaCIgMSAzCiMgMzkgIi9ob21lcy9raGFuL2xvY2FsL2dj
Yy0zLjEvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY21hdGguaCIgMwojIDEgIi9ob21lcy9raGFu
L2xvY2FsL2djYy0zLjEvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytj
b25maWcuaCIgMSAzCiMgNDAgIi9ob21lcy9raGFuL2xvY2FsL2djYy0zLjEvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfY21hdGguaCIgMiAzCiMgMSAiL2hvbWVzL2toYW4vbG9jYWwvZ2NjLTMuMS9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDEgMwojIDM5ICIvaG9tZXMva2hhbi9s
b2NhbC9nY2MtMy4xL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMwojIDEgIi9o
b21lcy9raGFuL2xvY2FsL2djYy0zLjEvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUv
Yml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi9ob21lcy9raGFuL2xvY2FsL2djYy0zLjEvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAyIDMKIyAxICIvaG9tZXMva2hhbi9sb2Nh
bC9nY2MtMy4xL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgNDAgIi9o
b21lcy9raGFuL2xvY2FsL2djYy0zLjEvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5o
IiAzCiMgMSAiaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICJpbmNsdWRlL3N0ZGRlZi5oIiAz
CnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyAxOTkgImluY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDQxICIvaG9tZXMva2hhbi9sb2NhbC9nY2MtMy4xL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB1
c2luZyA6OnB0cmRpZmZfdDsKICB1c2luZyA6OnNpemVfdDsKfQojIDQxICIvaG9tZXMva2hhbi9s
b2NhbC9nY2MtMy4xL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMiAzCiMgNDMg
Ii9ob21lcy9raGFuL2xvY2FsL2djYy0zLjEvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxp
Yi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRl
L3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI2ICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgoKIyAxICJpbmNsdWRlL3N0ZGRlZi5oIiAxIDMK
IyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCnR5cGVk
ZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVtOwogIH0gZGl2X3Q7CgoKCnR5
cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgaW50IHJlbTsKICB9
IGxkaXZfdDsKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBs
b25nIGludCBxdW90OwogICAgbG9uZyBsb25nIGludCByZW07CiAgfSBsbGRpdl90OwojIDgwICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJf
bWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9mIChfX2NvbnN0IGNoYXIg
Kl9fbnB0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRy
KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikg
dGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9f
Y29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgpleHRl
cm4gbG9uZyBkb3VibGUgc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgaW50
IHN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCmV4dGVybiB1bnNpZ25lZCBsb25n
IGludCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKCgoKX19leHRlbnNpb25f
XwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsK
CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKIyAxMzIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpf
X2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl
KSB0aHJvdyAoKTsKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50
IHN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0
cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CiMgMTU3ICIvdXNyL2luY2x1ZGUv
c3RkbGliLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyOCAiL3Vzci9p
bmNsdWRlL3hsb2NhbGUuaCIgMwp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewogIHN0
cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzZdOwoKCiAgY29uc3QgdW5zaWduZWQgc2hvcnQg
aW50ICpfX2N0eXBlX2I7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7CiAgY29uc3QgaW50
ICpfX2N0eXBlX3RvdXBwZXI7Cn0gKl9fbG9jYWxlX3Q7CiMgMTU4ICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDIgMwoKCgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfbCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Us
IF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQg
X19zdHJ0b3VsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK
CgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfbCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu
dCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4
dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Us
IF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgX19zdHJ0b2Rf
bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBfX3N0cnRv
Zl9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CiMgMTk2ICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xk
X2ludGVybmFsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGlu
dCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2Nv
bnN0IGNoYXIgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCgoKCl9fZXh0ZW5zaW9uX18K
ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwg
aW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICogX19yZXN0
cmljdCBfX25wdHIsIGNoYXIgKiogX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgaW50
IF9fZ3JvdXApIHRocm93ICgpOwojIDI0MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVy
biBfX2lubGluZSBkb3VibGUKc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRv
ZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcg
aW50CnN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBf
X3N0cnRvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpleHRlcm4g
X19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jh
c2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5k
cHRyLCBfX2Jhc2UsIDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0CnN0cnRvZiAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRo
cm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2ZfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDAp
Owp9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZQpzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKewog
IHJldHVybiBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CgoKCl9f
ZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9xIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg
ICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAo
X19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lu
bGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19i
YXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19l
bmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9u
ZyBsb25nIGludApzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewog
IHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7
Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApz
dHJ0b3VsbCAoX19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLAogICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBf
X3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKZXh0
ZXJuIF9faW5saW5lIGRvdWJsZQphdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkK
ewogIHJldHVybiBzdHJ0b2QgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCk7Cn0KZXh0ZXJuIF9f
aW5saW5lIGludAphdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkKewogIHJldHVy
biAoaW50KSBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CmV4dGVybiBf
X2lubGluZSBsb25nIGludAphdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkKewog
IHJldHVybiBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CgoKX19leHRl
bnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludAphdG9sbCAoX19jb25zdCBjaGFy
ICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAqKikg
X19udWxsLCAxMCk7Cn0KIyAzMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hh
ciAqbDY0YSAobG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgYTY0bCAo
X19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBl
cy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoK
ZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI2ICIv
dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi
IDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgojIDEgImluY2x1ZGUv
c3RkZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBl
ZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3No
b3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
X191X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBf
X3VfcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsK
IyA0OSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9f
aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBz
aG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90
Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3Vp
bnQzMl90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50
NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50
NjRfdDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBf
X2Rldl90Owp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7
CnR5cGVkZWYgX191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBl
ZGVmIF9fdV9pbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYg
X19xdWFkX3QgX19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3Np
emVfdDsKdHlwZWRlZiBsb25nIGludCBfX3JsaW1fdDsKdHlwZWRlZiBfX3F1YWRfdCBfX3JsaW02
NF90Owp0eXBlZGVmIF9fdV9pbnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQg
X192YWxbMl07CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYg
Y2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIGxvbmcg
aW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYgdW5z
aWduZWQgbG9uZyBpbnQgX19mZF9tYXNrOwojIDEwMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMu
aCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKCgoKICAgIF9fZmRfbWFzayBmZHNfYml0c1sxMDI0IC8g
KDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsKCgoKCgogIH0gX19mZF9zZXQ7CgoKdHlwZWRlZiBp
bnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoK
Cgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2
NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3Qg
X19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYg
X191X3F1YWRfdCBfX2ZzZmlsY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9faW5vNjRfdDsK
Cgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2Fs
YXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYg
aW50IF9faW50cHRyX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5o
IiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQu
aCIgMwpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBzY2hlZF9wcmlvcml0eTsKICB9
OwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMiAzCgoKc3RydWN0IF9w
dGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBpbnQgX19zcGlubG9jazsK
fTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNj
cjsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2No
ZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2lu
aGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9f
c3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7
Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRf
ZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVh
ZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2Nv
bmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBl
ZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhy
ZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zh
c3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewog
IGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBw
dGhyZWFkX29uY2VfdDsKCgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX3J3bG9ja190CnsKICBz
dHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19yd19sb2NrOwogIGludCBfX3J3X3JlYWRlcnM7CiAg
X3B0aHJlYWRfZGVzY3IgX19yd193cml0ZXI7CiAgX3B0aHJlYWRfZGVzY3IgX19yd19yZWFkX3dh
aXRpbmc7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0ZV93YWl0aW5nOwogIGludCBfX3J3X2tp
bmQ7CiAgaW50IF9fcndfcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja190OwoKCgp0eXBlZGVmIHN0
cnVjdAp7CiAgaW50IF9fbG9ja2tpbmQ7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9j
a2F0dHJfdDsKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90OwojIDE1MSAi
L3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMiAzCgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVf
c2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5
cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVk
ZWYgX19mc2lkX3QgZnNpZF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVm
IF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYgX19pbm82NF90IGlubzY0X3Q7CgoKCgp0eXBl
ZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVm
IF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBl
ZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoKCgoKCgp0eXBl
ZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlw
ZWRlZiBfX2lkX3QgaWRfdDsKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCnR5cGVk
ZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCnR5cGVk
ZWYgX19rZXlfdCBrZXlfdDsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyA1
NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgi
IDEgMwojIDU4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fY2xvY2tfdCBj
bG9ja190OwoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA2OSAi
L3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CiMgMTIz
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiaW5jbHVkZS9zdGRkZWYuaCIg
MSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5
cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTY5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi
IDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkp
Owp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkp
Owp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkp
Owp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkp
OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVf
XyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBf
X2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
dV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBp
bnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwojIDE5
MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5o
IiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Zl
YXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDM1ICIvdXNy
L2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAz
CiMgMzYgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgMTkyICIvdXNyL2luY2x1ZGUvc3lz
L3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMjUg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu
aCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi
IDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNyL2lu
Y2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5o
IiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19z
aWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50
IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9f
c2lnc2V0X3Q7CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgojIDEgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDgzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVj
dCB0aW1lc3BlYwogIHsKICAgIGxvbmcgaW50IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7
CiAgfTsKIyAzOSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgpleHRlcm4gIkMiIHsK
CgoKCgpzdHJ1Y3QgdGltZXZhbDsKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CgoKdHlwZWRl
ZiBfX2ZkX3NldCBmZF9zZXQ7CiMgNzQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0
ZXJuIGludCBfX3NlbGVjdCAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywgX19mZF9z
ZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywgc3RydWN0IHRpbWV2YWwgKl9f
dGltZW91dCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIF9fZmRf
c2V0ICpfX3JlYWRmZHMsIF9fZmRfc2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3NldCAqX19leGNlcHRm
ZHMsIHN0cnVjdCB0aW1ldmFsICpfX3RpbWVvdXQpIHRocm93ICgpOwojIDg3ICIvdXNyL2luY2x1
ZGUvc3lzL3NlbGVjdC5oIiAzCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZkcywgX19mZF9z
ZXQgKl9fcmVhZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZk
cywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RpbWVvdXQsIGNvbnN0IF9fc2lnc2V0X3QgKl9f
c2lnbWFzaykgdGhyb3cgKCk7CgoKCgoKfQojIDE5NSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o
IiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwojIDE5OCAiL3Vz
ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250
X3Q7CnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CnR5cGVkZWYgX19mc2ZpbGNudF90
IGZzZmlsY250X3Q7CgoKCgoKCgp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2NF90Owp0eXBl
ZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBm
c2ZpbGNudDY0X3Q7CgoKfQojIDM0MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoK
ZXh0ZXJuIGludDMyX3QgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFu
ZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqIGlu
aXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgdm9pZCAqIF9fc3RhdGVidWYsIHNpemVfdCBf
X3N0YXRlbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkICogc2V0c3RhdGUgKHZvaWQgKiBf
X3N0YXRlYnVmKSB0aHJvdyAoKTsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGlu
dDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7CiAgICBp
bnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwogICAgaW50
MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJhbmRvbV9k
YXRhICpfX3Jlc3RyaWN0IF9fYnVmLCBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0
IHJhbmRvbV9kYXRhICpfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1
bnNpZ25lZCBpbnQgX19zZWVkLCB2b2lkICogX19yZXN0cmljdCBfX3N0YXRlYnVmLCBzaXplX3Qg
X19zdGF0ZWxlbiwgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAodm9pZCAqIF9fcmVzdHJpY3QgX19zdGF0ZWJ1
Ziwgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgoK
ZXh0ZXJuIGludCByYW5kICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNp
Z25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVk
IGludCAqX19zZWVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9p
ZCkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9f
eHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJv
dyAoKTsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJp
WzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7
CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJv
dyAoKTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBp
bnQgX19zZWVkMTZ2WzNdKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQg
c2hvcnQgaW50IF9fcGFyYW1bN10pIHRocm93ICgpOwoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7
CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgeFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBhWzNd
OwogICAgdW5zaWduZWQgc2hvcnQgaW50IGM7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgb2xkX3hb
M107CiAgICBpbnQgaW5pdDsKICB9OwoKCgpleHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRy
YW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVz
dWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQg
X194c3ViaVszXSwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwgZG91
YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbHJhbmQ0
OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBsb25nIGludCAq
X19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IG5yYW5kNDhfciAodW5z
aWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJp
Y3QgX19idWZmZXIsIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9f
YnVmZmVyLCBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4g
aW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sIHN0cnVjdCBkcmFu
ZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVz
dWx0KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2
YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQg
c2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sIHN0cnVjdCBkcmFuZDQ4
X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGxjb25nNDhfciAodW5zaWdu
ZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0
aHJvdyAoKTsKIyA0NzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCAqIG1h
bGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCAqIGNhbGxvYyAoc2l6
ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkICog
cmVhbGxvYyAodm9pZCAqIF9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCmV4dGVybiB2
b2lkIGZyZWUgKHZvaWQgKiBfX3B0cikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNmcmVlICh2
b2lkICogX19wdHIpIHRocm93ICgpOwoKCgojIDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAz
CiMgMjIgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJl
cy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCgojIDEgImluY2x1ZGUv
c3RkZGVmLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoKZXh0ZXJuICJD
IiB7CgoKCgoKZXh0ZXJuIHZvaWQgKiBhbGxvY2EgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoK
CgoKCn0KIyA0OTMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAq
IHZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBhYm9ydCAo
dm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4g
aW50IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp
bnQgX19vbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICogX19hcmcp
LCB2b2lkICogX19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19m
dW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICogX19hcmcpLCB2b2lkICogX19hcmcpIHRocm93ICgp
OwoKCgoKCgpleHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9FeGl0IChpbnQgX19zdGF0
dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBj
aGFyICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNo
YXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu
IGludCBzZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUs
IGludCBfX3JlcGxhY2UpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCB1bnNldGVudiAoX19jb25z
dCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGNsZWFyZW52ICh2b2lk
KSB0aHJvdyAoKTsKIyA1NjYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAq
bWt0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBta3N0
ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChf
X2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpjYW5v
bmljYWxpemVfZmlsZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CiMgNTk1
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLCBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpIHRo
cm93ICgpOwoKCgoKCgoKdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90KSAoX19jb25zdCB2b2lk
ICosIF9fY29uc3Qgdm9pZCAqKTsKCgp0eXBlZGVmIF9fY29tcGFyX2ZuX3QgY29tcGFyaXNvbl9m
bl90OwoKCgoKCmV4dGVybiB2b2lkICogYnNlYXJjaCAoX19jb25zdCB2b2lkICogX19rZXksIF9f
Y29uc3Qgdm9pZCAqIF9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29t
cGFyX2ZuX3QgX19jb21wYXIpOwoKCgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICogX19iYXNl
LCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7
CgoKCgpleHRlcm4gaW50IGFicyAoaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxv
bmcgaW50IGxsYWJzIChsb25nIGxvbmcgaW50IF9feCkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVyLCBp
bnQgX19kZW5vbSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4g
bGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pIHRocm93ICgp
CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4g
bGxkaXZfdCBsbGRpdiAobG9uZyBsb25nIGludCBfX251bWVyLCBsb25nIGxvbmcgaW50IF9fZGVu
b20pIHRocm93ICgpCgogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyA2NTEgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUs
IGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBf
X3NpZ24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1ZSwg
aW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9f
c2lnbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBp
bnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqcWVjdnQg
KGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVj
cHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnFmY3Z0
IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2Rl
Y3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpxZ2N2
dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs
IGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpf
X3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZmN2
dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNw
dCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90
IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3Zh
bHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJp
Y3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0
LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAq
X19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKIyA2OTUgIi91c3IvaW5j
bHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6
ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19wd2MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIHRo
cm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
cHdjcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CgoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24pIHRocm93ICgpOwojIDcxOCAi
L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFy
ICpfX3Jlc3BvbnNlKSB0aHJvdyAoKTsKIyA3MjkgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpl
eHRlcm4gaW50IGdldHN1Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRpb25wLCBfX2NvbnN0
IGNoYXIgKl9fY29uc3QgKl9fcmVzdHJpY3QgX190b2tlbnMsIGNoYXIgKipfX3Jlc3RyaWN0IF9f
dmFsdWVwKSB0aHJvdyAoKTsKIyA3MzggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4g
dm9pZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IGludCBncmFudHB0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5sb2NrcHQg
KGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpwdHNuYW1lIChpbnQgX19mZCkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19i
dWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRwdCAodm9pZCkg
dGhyb3cgKCk7CgoKCgoKfQojIDQ0ICIvaG9tZXMva2hhbi9sb2NhbC9nY2MtMy4xL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMiAzCiMgODMgIi9ob21lcy9raGFuL2xvY2FsL2dj
Yy0zLjEvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAzCm5hbWVzcGFjZSBzdGQK
ewogIHVzaW5nIDo6ZGl2X3Q7CiAgdXNpbmcgOjpsZGl2X3Q7CgogIGV4dGVybiAiQyIgZG91Ymxl
IGF0b2YoY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgaW50IGF0b2koY29uc3QgY2hhciopOwog
IGV4dGVybiAiQyIgbG9uZyBpbnQgYXRvbChjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBkb3Vi
bGUgc3RydG9kKGNvbnN0IGNoYXIqLCBjaGFyKiopOwogIGV4dGVybiAiQyIgZmxvYXQgc3RydG9m
KGNvbnN0IGNoYXIqLCBjaGFyKiopOwogIGV4dGVybiAiQyIgbG9uZyBpbnQgc3RydG9sKGNvbnN0
IGNoYXIqLCBjaGFyKiosIGludCk7CiAgZXh0ZXJuICJDIiB1bnNpZ25lZCBsb25nIGludCBzdHJ0
b3VsKGNvbnN0IGNoYXIqLCBjaGFyKiosIGludCk7CiAgZXh0ZXJuICJDIiBpbnQgcmFuZCh2b2lk
KTsKICBleHRlcm4gIkMiIHZvaWQgc3JhbmQodW5zaWduZWQgaW50KTsKICBleHRlcm4gIkMiIHZv
aWQqIGNhbGxvYyhzaXplX3QsIHNpemVfdCk7CiAgZXh0ZXJuICJDIiB2b2lkIGZyZWUodm9pZCop
OwogIGV4dGVybiAiQyIgdm9pZCogbWFsbG9jKHNpemVfdCk7CiAgZXh0ZXJuICJDIiB2b2lkKiBy
ZWFsbG9jKHZvaWQqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgdm9pZCBhYm9ydCh2b2lkKTsKICBl
eHRlcm4gIkMiIGludCBhdGV4aXQodm9pZCAoKmZ1bmMpKHZvaWQpKTsKICBleHRlcm4gIkMiIHZv
aWQgZXhpdChpbnQpOwogIGV4dGVybiAiQyIgdm9pZCBfRXhpdChpbnQpOwogIGV4dGVybiAiQyIg
Y2hhcipnZXRlbnYoY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgaW50IHN5c3RlbShjb25zdCBj
aGFyKik7CiAgZXh0ZXJuICJDIiB2b2lkKiBic2VhcmNoKGNvbnN0IHZvaWQqLCBjb25zdCB2b2lk
Kiwgc2l6ZV90LCBzaXplX3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmNvbXAp
KGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CiAgZXh0ZXJuICJDIiB2b2lkIHFzb3J0KHZv
aWQqLCBzaXplX3QsIHNpemVfdCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqY29tcCko
Y29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKICBleHRlcm4gIkMiIGludCBhYnMoaW50KTsK
ICBleHRlcm4gIkMiIGxvbmcgaW50IGxhYnMobG9uZyBpbnQpOwogIGV4dGVybiAiQyIgZGl2X3Qg
ZGl2KGludCwgaW50KTsKICBleHRlcm4gIkMiIGxkaXZfdCBsZGl2KGxvbmcgaW50LCBsb25nIGlu
dCk7CiAgZXh0ZXJuICJDIiBpbnQgbWJsZW4oY29uc3QgY2hhciosIHNpemVfdCk7CiAgZXh0ZXJu
ICJDIiBpbnQgbWJ0b3djKHdjaGFyX3QqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4g
IkMiIGludCB3Y3RvbWIoY2hhciosIHdjaGFyX3QpOwogIGV4dGVybiAiQyIgc2l6ZV90IG1ic3Rv
d2NzKHdjaGFyX3QqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIHNpemVfdCB3
Y3N0b21icyhjaGFyKiwgY29uc3Qgd2NoYXJfdCosIHNpemVfdCk7CgogIGlubGluZSBsb25nCiAg
YWJzKGxvbmcgX19pKSB7IHJldHVybiA6OmxhYnMoX19pKTsgfQoKICBpbmxpbmUgbGRpdl90CiAg
ZGl2KGxvbmcgX19pLCBsb25nIF9faikgeyByZXR1cm4gOjpsZGl2KF9faSwgX19qKTsgfQp9CgoK
bmFtZXNwYWNlIGM5OQp7CiAgdXNpbmcgOjpsbGRpdl90OwoKICBpbmxpbmUgbG9uZyBsb25nCiAg
YWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDogLV9feDsgfQoKICBp
bmxpbmUgbG9uZyBsb25nCiAgbGxhYnMobG9uZyBsb25nIF9feCkgeyByZXR1cm4gX194ID49IDAg
PyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsbGRpdl90CiAgZGl2KGxvbmcgbG9uZyBfX24sIGxv
bmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5y
ZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBsbGRpdihs
b25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0g
X19uIC8gX19kOyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9CgogIGV4dGVybiAi
QyIgbG9uZyBsb25nIGludCBhdG9sbChjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBsb25nIGxv
bmcgaW50IHN0cnRvbGwoY29uc3QgY2hhciosIGNoYXIqKiwgaW50KTsKICBleHRlcm4gIkMiIHVu
c2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwoY29uc3QgY2hhciosIGNoYXIqKiwgaW50KTsK
CgogIGV4dGVybiAiQyIgbG9uZyBkb3VibGUgc3RydG9sZChjb25zdCBjaGFyKiwgY2hhcioqKTsK
Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIGM5OTo6bGxkaXZfdDsKICB1c2luZyBjOTk6OmFi
czsKCiAgdXNpbmcgYzk5OjpkaXY7CiAgdXNpbmcgYzk5OjpsbGRpdjsKICB1c2luZyBjOTk6OmF0
b2xsOwogIHVzaW5nIGM5OTo6c3RydG9sbDsKICB1c2luZyBjOTk6OnN0cnRvdWxsOwoKICB1c2lu
ZyBjOTk6OnN0cnRvbGQ7Cgp9CiMgNDEgIi9ob21lcy9raGFuL2xvY2FsL2djYy0zLjEvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfY21hdGguaCIgMiAzCiMgNDMgIi9ob21lcy9raGFuL2xvY2FsL2dj
Yy0zLjEvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9tYXRoLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCmV4dGVy
biAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDEgMwojIDI1ICIv
dXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz
LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAyIDMKIyAzNCAiL3Vz
ci9pbmNsdWRlL21hdGguaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbmFuLmgiIDEg
MwojIDM4ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L21hdGhkZWYuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMwp0eXBl
ZGVmIGxvbmcgZG91YmxlIGZsb2F0X3Q7Cgp0eXBlZGVmIGxvbmcgZG91YmxlIGRvdWJsZV90Owoj
IDQxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA2MyAiL3Vzci9pbmNsdWRlL21hdGguaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNs
dWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGRvdWJsZSBhY29zIChkb3VibGUgX194KTsg
ZXh0ZXJuIGRvdWJsZSBfX2Fjb3MgKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBhc2luIChk
b3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2FzaW4gKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRv
dWJsZSBhdGFuIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4gKGRvdWJsZSBfX3gp
OwoKZXh0ZXJuIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCk7IGV4dGVybiBk
b3VibGUgX19hdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCk7CgoKZXh0ZXJuIGRvdWJsZSBj
b3MgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fY29zIChkb3VibGUgX194KTsKCmV4dGVy
biBkb3VibGUgc2luIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX3NpbiAoZG91YmxlIF9f
eCk7CgpleHRlcm4gZG91YmxlIHRhbiAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX190YW4g
KGRvdWJsZSBfX3gpOwoKCgpleHRlcm4gdm9pZCBzaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAq
X19zaW54LCBkb3VibGUgKl9fY29zeCk7IGV4dGVybiB2b2lkIF9fc2luY29zIChkb3VibGUgX194
LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpOwoKCgoKCgpleHRlcm4gZG91YmxlIGNv
c2ggKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fY29zaCAoZG91YmxlIF9feCk7CgpleHRl
cm4gZG91YmxlIHNpbmggKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fc2luaCAoZG91Ymxl
IF9feCk7CgpleHRlcm4gZG91YmxlIHRhbmggKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9f
dGFuaCAoZG91YmxlIF9feCk7CgoKCmV4dGVybiBkb3VibGUgYWNvc2ggKGRvdWJsZSBfX3gpOyBl
eHRlcm4gZG91YmxlIF9fYWNvc2ggKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBhc2luaCAo
ZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19hc2luaCAoZG91YmxlIF9feCk7CgpleHRlcm4g
ZG91YmxlIGF0YW5oIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW5oIChkb3VibGUg
X194KTsKCgoKCgpleHRlcm4gZG91YmxlIGV4cCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUg
X19leHAgKGRvdWJsZSBfX3gpOwoKCgpleHRlcm4gZG91YmxlIGV4cDEwIChkb3VibGUgX194KTsg
ZXh0ZXJuIGRvdWJsZSBfX2V4cDEwIChkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUgcG93MTAg
KGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fcG93MTAgKGRvdWJsZSBfX3gpOwoKCgpleHRl
cm4gZG91YmxlIGZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpOyBleHRlcm4gZG91
YmxlIF9fZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCk7CgoKZXh0ZXJuIGRvdWJs
ZSBsZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpOyBleHRlcm4gZG91YmxlIF9fbGRl
eHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KTsKCgpleHRlcm4gZG91YmxlIGxvZyAoZG91
YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19sb2cgKGRvdWJsZSBfX3gpOwoKCmV4dGVybiBkb3Vi
bGUgbG9nMTAgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fbG9nMTAgKGRvdWJsZSBfX3gp
OwoKCmV4dGVybiBkb3VibGUgbW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpOyBleHRl
cm4gZG91YmxlIF9fbW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpOwoKCgpleHRlcm4g
ZG91YmxlIGV4cG0xIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2V4cG0xIChkb3VibGUg
X194KTsKCgpleHRlcm4gZG91YmxlIGxvZzFwIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBf
X2xvZzFwIChkb3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpOyBl
eHRlcm4gZG91YmxlIF9fbG9nYiAoZG91YmxlIF9feCk7CgoKCgpleHRlcm4gZG91YmxlIGV4cDIg
KGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fZXhwMiAoZG91YmxlIF9feCk7CgoKZXh0ZXJu
IGRvdWJsZSBsb2cyIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzIgKGRvdWJsZSBf
X3gpOwoKCgoKCgpleHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7IGV4
dGVybiBkb3VibGUgX19wb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwoKCmV4dGVybiBkb3Vi
bGUgc3FydCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19zcXJ0IChkb3VibGUgX194KTsK
CgoKZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7IGV4dGVybiBk
b3VibGUgX19oeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CgoKCgpleHRlcm4gZG91Ymxl
IGNicnQgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fY2JydCAoZG91YmxlIF9feCk7CgoK
CgoKCmV4dGVybiBkb3VibGUgY2VpbCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19jZWls
IChkb3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGZhYnMgKGRvdWJsZSBfX3gpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2ZhYnMgKGRvdWJsZSBfX3gpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZsb29yIChkb3VibGUg
X194KTsgZXh0ZXJuIGRvdWJsZSBfX2Zsb29yIChkb3VibGUgX194KTsKCgpleHRlcm4gZG91Ymxl
IGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOyBleHRlcm4gZG91YmxlIF9fZm1vZCAoZG91
YmxlIF9feCwgZG91YmxlIF9feSk7CgoKCgpleHRlcm4gaW50IF9faXNpbmYgKGRvdWJsZSBfX3Zh
bHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZSAo
ZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBp
bnQgaXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
ZXh0ZXJuIGludCBmaW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGluZm5hbiAoaW50IF9fZXJyb3IpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2luZm5hbiAoaW50IF9fZXJyb3Ip
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGRyZW0gKGRvdWJs
ZSBfX3gsIGRvdWJsZSBfX3kpOyBleHRlcm4gZG91YmxlIF9fZHJlbSAoZG91YmxlIF9feCwgZG91
YmxlIF9feSk7CgoKCmV4dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpOyBleHRl
cm4gZG91YmxlIF9fc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpOwoKCgoKZXh0ZXJuIGRvdWJsZSBj
b3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOyBleHRlcm4gZG91YmxlIF9fY29weXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgbmFuIChfX2NvbnN0
IGNoYXIgKl9fdGFnYikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91Ymxl
IF9fbmFuIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCgoKZXh0ZXJuIGludCBfX2lzbmFuIChkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFuIChkb3VibGUgX192YWx1ZSkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgajAgKGRvdWJsZSk7IGV4dGVy
biBkb3VibGUgX19qMCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBqMSAoZG91YmxlKTsgZXh0ZXJu
IGRvdWJsZSBfX2oxIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGpuIChpbnQsIGRvdWJsZSk7IGV4
dGVybiBkb3VibGUgX19qbiAoaW50LCBkb3VibGUpOwpleHRlcm4gZG91YmxlIHkwIChkb3VibGUp
OyBleHRlcm4gZG91YmxlIF9feTAgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgeTEgKGRvdWJsZSk7
IGV4dGVybiBkb3VibGUgX195MSAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSB5biAoaW50LCBkb3Vi
bGUpOyBleHRlcm4gZG91YmxlIF9feW4gKGludCwgZG91YmxlKTsKCgoKCgpleHRlcm4gZG91Ymxl
IGVyZiAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZiAoZG91YmxlKTsKZXh0ZXJuIGRvdWJs
ZSBlcmZjIChkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fZXJmYyAoZG91YmxlKTsKZXh0ZXJuIGRv
dWJsZSBsZ2FtbWEgKGRvdWJsZSk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWEgKGRvdWJsZSk7CmV4
dGVybiBkb3VibGUgdGdhbW1hIChkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fdGdhbW1hIChkb3Vi
bGUpOwoKCgoKZXh0ZXJuIGRvdWJsZSBnYW1tYSAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2dh
bW1hIChkb3VibGUpOwoKCgoKCgpleHRlcm4gZG91YmxlIGxnYW1tYV9yIChkb3VibGUsIGludCAq
X19zaWduZ2FtcCk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2ln
bmdhbXApOwoKCgoKCgpleHRlcm4gZG91YmxlIHJpbnQgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91
YmxlIF9fcmludCAoZG91YmxlIF9feCk7CgoKZXh0ZXJuIGRvdWJsZSBuZXh0YWZ0ZXIgKGRvdWJs
ZSBfX3gsIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRv
dWJsZSBfX25leHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKZXh0ZXJuIGRvdWJsZSBuZXh0dG93YXJkIChkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBf
X25leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCgpleHRlcm4gZG91YmxlIHJlbWFpbmRlciAoZG91YmxlIF9feCwgZG91
YmxlIF9feSk7IGV4dGVybiBkb3VibGUgX19yZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBf
X3kpOwoKCgpleHRlcm4gZG91YmxlIHNjYWxiIChkb3VibGUgX194LCBkb3VibGUgX19uKTsgZXh0
ZXJuIGRvdWJsZSBfX3NjYWxiIChkb3VibGUgX194LCBkb3VibGUgX19uKTsKCgoKZXh0ZXJuIGRv
dWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pOyBleHRlcm4gZG91YmxlIF9fc2NhbGJu
IChkb3VibGUgX194LCBpbnQgX19uKTsKCgpleHRlcm4gaW50IGlsb2diIChkb3VibGUgX194KTsg
ZXh0ZXJuIGludCBfX2lsb2diIChkb3VibGUgX194KTsKCgoKCmV4dGVybiBkb3VibGUgc2NhbGJs
biAoZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibG4gKGRv
dWJsZSBfX3gsIGxvbmcgaW50IF9fbik7CgoKCmV4dGVybiBkb3VibGUgbmVhcmJ5aW50IChkb3Vi
bGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX25lYXJieWludCAoZG91YmxlIF9feCk7CgoKCmV4dGVy
biBkb3VibGUgcm91bmQgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fcm91bmQgKGRvdWJs
ZSBfX3gpOwoKCgpleHRlcm4gZG91YmxlIHRydW5jIChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX190cnVuYyAoZG91YmxlIF9feCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSByZW1xdW8gKGRvdWJsZSBf
X3gsIGRvdWJsZSBfX3ksIGludCAqX19xdW8pOyBleHRlcm4gZG91YmxlIF9fcmVtcXVvIChkb3Vi
bGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxy
aW50IChkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnQgKGRvdWJsZSBfX3gpOwpl
eHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnQgKGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBsb25n
IGludCBfX2xscmludCAoZG91YmxlIF9feCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmQgKGRv
dWJsZSBfX3gpOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmQgKGRvdWJsZSBfX3gpOwpleHRlcm4g
bG9uZyBsb25nIGludCBsbHJvdW5kIChkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQg
X19sbHJvdW5kIChkb3VibGUgX194KTsKCgoKZXh0ZXJuIGRvdWJsZSBmZGltIChkb3VibGUgX194
LCBkb3VibGUgX195KTsgZXh0ZXJuIGRvdWJsZSBfX2ZkaW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBf
X3kpOwoKCmV4dGVybiBkb3VibGUgZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7IGV4dGVy
biBkb3VibGUgX19mbWF4IChkb3VibGUgX194LCBkb3VibGUgX195KTsKCgpleHRlcm4gZG91Ymxl
IGZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOyBleHRlcm4gZG91YmxlIF9fZm1pbiAoZG91
YmxlIF9feCwgZG91YmxlIF9feSk7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5IChkb3VibGUg
X192YWx1ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBf
X3NpZ25iaXQgKGRvdWJsZSBfX3ZhbHVlKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKZXh0ZXJuIGRvdWJsZSBmbWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBf
X3opOyBleHRlcm4gZG91YmxlIF9fZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUg
X196KTsKIyA2NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgODIgIi91c3IvaW5jbHVkZS9t
YXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91
c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9hdCBhY29zZiAoZmxvYXQg
X194KTsgZXh0ZXJuIGZsb2F0IF9fYWNvc2YgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgYXNp
bmYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2FzaW5mIChmbG9hdCBfX3gpOwoKZXh0ZXJu
IGZsb2F0IGF0YW5mIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19hdGFuZiAoZmxvYXQgX194
KTsKCmV4dGVybiBmbG9hdCBhdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KTsgZXh0ZXJuIGZs
b2F0IF9fYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZsb2F0IGNvc2Yg
KGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2Nvc2YgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxv
YXQgc2luZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fc2luZiAoZmxvYXQgX194KTsKCmV4
dGVybiBmbG9hdCB0YW5mIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX190YW5mIChmbG9hdCBf
X3gpOwoKCgpleHRlcm4gdm9pZCBzaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZs
b2F0ICpfX2Nvc3gpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9f
c2lueCwgZmxvYXQgKl9fY29zeCk7CgoKCgoKCmV4dGVybiBmbG9hdCBjb3NoZiAoZmxvYXQgX194
KTsgZXh0ZXJuIGZsb2F0IF9fY29zaGYgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgc2luaGYg
KGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX3NpbmhmIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZs
b2F0IHRhbmhmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX190YW5oZiAoZmxvYXQgX194KTsK
CgoKZXh0ZXJuIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fYWNvc2hm
IChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IGFzaW5oZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZs
b2F0IF9fYXNpbmhmIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IGF0YW5oZiAoZmxvYXQgX194
KTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmhmIChmbG9hdCBfX3gpOwoKCgoKCmV4dGVybiBmbG9hdCBl
eHBmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19leHBmIChmbG9hdCBfX3gpOwoKCgpleHRl
cm4gZmxvYXQgZXhwMTBmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19leHAxMGYgKGZsb2F0
IF9feCk7CgpleHRlcm4gZmxvYXQgcG93MTBmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19w
b3cxMGYgKGZsb2F0IF9feCk7CgoKCmV4dGVybiBmbG9hdCBmcmV4cGYgKGZsb2F0IF9feCwgaW50
ICpfX2V4cG9uZW50KTsgZXh0ZXJuIGZsb2F0IF9fZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19l
eHBvbmVudCk7CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVu
dCk7IGV4dGVybiBmbG9hdCBfX2xkZXhwZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVudCk7CgoK
ZXh0ZXJuIGZsb2F0IGxvZ2YgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2xvZ2YgKGZsb2F0
IF9feCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzEwZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9f
bG9nMTBmIChmbG9hdCBfX3gpOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAoZmxvYXQgX194LCBmbG9h
dCAqX19pcHRyKTsgZXh0ZXJuIGZsb2F0IF9fbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0
cik7CgoKCmV4dGVybiBmbG9hdCBleHBtMWYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2V4
cG0xZiAoZmxvYXQgX194KTsKCgpleHRlcm4gZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpOyBleHRl
cm4gZmxvYXQgX19sb2cxcGYgKGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2JmIChmbG9h
dCBfX3gpOyBleHRlcm4gZmxvYXQgX19sb2diZiAoZmxvYXQgX194KTsKCgoKCmV4dGVybiBmbG9h
dCBleHAyZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fZXhwMmYgKGZsb2F0IF9feCk7CgoK
ZXh0ZXJuIGZsb2F0IGxvZzJmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19sb2cyZiAoZmxv
YXQgX194KTsKCgoKCgoKZXh0ZXJuIGZsb2F0IHBvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195KTsg
ZXh0ZXJuIGZsb2F0IF9fcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOwoKCmV4dGVybiBmbG9h
dCBzcXJ0ZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fc3FydGYgKGZsb2F0IF9feCk7CgoK
CmV4dGVybiBmbG9hdCBoeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsgZXh0ZXJuIGZsb2F0
IF9faHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7CgoKCgpleHRlcm4gZmxvYXQgY2JydGYg
KGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2NicnRmIChmbG9hdCBfX3gpOwoKCgoKCgpleHRl
cm4gZmxvYXQgY2VpbGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2NlaWxmIChmbG9hdCBf
X3gpOwoKCmV4dGVybiBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2ZhYnNmIChmbG9hdCBfX3gpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gpOyBleHRlcm4g
ZmxvYXQgX19mbG9vcmYgKGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZsb2F0IGZtb2RmIChmbG9hdCBf
X3gsIGZsb2F0IF9feSk7IGV4dGVybiBmbG9hdCBfX2Ztb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9f
eSk7CgoKCgpleHRlcm4gaW50IF9faXNpbmZmIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmZmIChmbG9hdCBf
X3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVm
IChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCgpleHRl
cm4gZmxvYXQgaW5mbmFuZiAoaW50IF9fZXJyb3IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsgZXh0ZXJuIGZsb2F0IF9faW5mbmFuZiAoaW50IF9fZXJyb3IpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsg
ZXh0ZXJuIGZsb2F0IF9fZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsKCgoKZXh0ZXJuIGZs
b2F0IHNpZ25pZmljYW5kZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fc2lnbmlmaWNhbmRm
IChmbG9hdCBfX3gpOwoKCgoKZXh0ZXJuIGZsb2F0IGNvcHlzaWduZiAoZmxvYXQgX194LCBmbG9h
dCBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY29weXNp
Z25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CgoKZXh0ZXJuIGZsb2F0IG5hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25hbmYgKF9fY29uc3QgY2hhciAqX190YWdi
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW5mIChm
bG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQg
aXNuYW5mIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0
ZXJuIGZsb2F0IGowZiAoZmxvYXQpOyBleHRlcm4gZmxvYXQgX19qMGYgKGZsb2F0KTsKZXh0ZXJu
IGZsb2F0IGoxZiAoZmxvYXQpOyBleHRlcm4gZmxvYXQgX19qMWYgKGZsb2F0KTsKZXh0ZXJuIGZs
b2F0IGpuZiAoaW50LCBmbG9hdCk7IGV4dGVybiBmbG9hdCBfX2puZiAoaW50LCBmbG9hdCk7CmV4
dGVybiBmbG9hdCB5MGYgKGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9feTBmIChmbG9hdCk7CmV4dGVy
biBmbG9hdCB5MWYgKGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9hdCk7CmV4dGVybiBm
bG9hdCB5bmYgKGludCwgZmxvYXQpOyBleHRlcm4gZmxvYXQgX195bmYgKGludCwgZmxvYXQpOwoK
CgoKCmV4dGVybiBmbG9hdCBlcmZmIChmbG9hdCk7IGV4dGVybiBmbG9hdCBfX2VyZmYgKGZsb2F0
KTsKZXh0ZXJuIGZsb2F0IGVyZmNmIChmbG9hdCk7IGV4dGVybiBmbG9hdCBfX2VyZmNmIChmbG9h
dCk7CmV4dGVybiBmbG9hdCBsZ2FtbWFmIChmbG9hdCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWYg
KGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHRnYW1tYWYgKGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9fdGdh
bW1hZiAoZmxvYXQpOwoKCgoKZXh0ZXJuIGZsb2F0IGdhbW1hZiAoZmxvYXQpOyBleHRlcm4gZmxv
YXQgX19nYW1tYWYgKGZsb2F0KTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxnYW1tYWZfciAoZmxvYXQs
IGludCAqX19zaWduZ2FtcCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWZfciAoZmxvYXQsIGludCAq
X19zaWduZ2FtcCk7CgoKCgoKCmV4dGVybiBmbG9hdCByaW50ZiAoZmxvYXQgX194KTsgZXh0ZXJu
IGZsb2F0IF9fcmludGYgKGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZsb2F0IG5leHRhZnRlcmYgKGZs
b2F0IF9feCwgZmxvYXQgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBm
bG9hdCBfX25leHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgpleHRlcm4gZmxvYXQgbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBk
b3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25l
eHR0b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQgcmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBf
X3kpOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7CgoK
CmV4dGVybiBmbG9hdCBzY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQgX19uKTsgZXh0ZXJuIGZsb2F0
IF9fc2NhbGJmIChmbG9hdCBfX3gsIGZsb2F0IF9fbik7CgoKCmV4dGVybiBmbG9hdCBzY2FsYm5m
IChmbG9hdCBfX3gsIGludCBfX24pOyBleHRlcm4gZmxvYXQgX19zY2FsYm5mIChmbG9hdCBfX3gs
IGludCBfX24pOwoKCmV4dGVybiBpbnQgaWxvZ2JmIChmbG9hdCBfX3gpOyBleHRlcm4gaW50IF9f
aWxvZ2JmIChmbG9hdCBfX3gpOwoKCgoKZXh0ZXJuIGZsb2F0IHNjYWxibG5mIChmbG9hdCBfX3gs
IGxvbmcgaW50IF9fbik7IGV4dGVybiBmbG9hdCBfX3NjYWxibG5mIChmbG9hdCBfX3gsIGxvbmcg
aW50IF9fbik7CgoKCmV4dGVybiBmbG9hdCBuZWFyYnlpbnRmIChmbG9hdCBfX3gpOyBleHRlcm4g
ZmxvYXQgX19uZWFyYnlpbnRmIChmbG9hdCBfX3gpOwoKCgpleHRlcm4gZmxvYXQgcm91bmRmIChm
bG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19yb3VuZGYgKGZsb2F0IF9feCk7CgoKCmV4dGVybiBm
bG9hdCB0cnVuY2YgKGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl
cm4gZmxvYXQgX190cnVuY2YgKGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCgoKZXh0ZXJuIGZsb2F0IHJlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9f
cXVvKTsgZXh0ZXJuIGZsb2F0IF9fcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAq
X19xdW8pOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnRmIChmbG9hdCBfX3gpOyBleHRlcm4g
bG9uZyBpbnQgX19scmludGYgKGZsb2F0IF9feCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmlu
dGYgKGZsb2F0IF9feCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50ZiAoZmxvYXQgX194
KTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3VuZGYgKGZsb2F0IF9feCk7IGV4dGVybiBsb25nIGlu
dCBfX2xyb3VuZGYgKGZsb2F0IF9feCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRmIChm
bG9hdCBfX3gpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmRmIChmbG9hdCBfX3gpOwoK
CgpleHRlcm4gZmxvYXQgZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsgZXh0ZXJuIGZsb2F0
IF9fZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsKCgpleHRlcm4gZmxvYXQgZm1heGYgKGZs
b2F0IF9feCwgZmxvYXQgX195KTsgZXh0ZXJuIGZsb2F0IF9fZm1heGYgKGZsb2F0IF9feCwgZmxv
YXQgX195KTsKCgpleHRlcm4gZmxvYXQgZm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsgZXh0
ZXJuIGZsb2F0IF9fZm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsKCgoKZXh0ZXJuIGludCBf
X2ZwY2xhc3NpZnlmIChmbG9hdCBfX3ZhbHVlKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdGYgKGZsb2F0IF9fdmFsdWUpCiAgICAgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQgZm1hZiAoZmxvYXQgX194LCBm
bG9hdCBfX3ksIGZsb2F0IF9feik7IGV4dGVybiBmbG9hdCBfX2ZtYWYgKGZsb2F0IF9feCwgZmxv
YXQgX195LCBmbG9hdCBfX3opOwojIDgzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA5OSAi
L3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5o
IiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcg
ZG91YmxlIGFjb3NsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hY29z
bCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2lubCAobG9uZyBkb3Vi
bGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmwgKGxvbmcgZG91YmxlIF9feCk7Cgpl
eHRlcm4gbG9uZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX2F0YW5sIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW4y
bCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19hdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9u
ZyBkb3VibGUgY29zbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29z
bCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBzaW5sIChsb25nIGRvdWJs
ZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaW5sIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0
ZXJuIGxvbmcgZG91YmxlIHRhbmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX3RhbmwgKGxvbmcgZG91YmxlIF9feCk7CgoKCmV4dGVybiB2b2lkIHNpbmNvc2wgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9uZyBkb3VibGUgKl9fY29zeCk7IGV4
dGVybiB2b2lkIF9fc2luY29zbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54
LCBsb25nIGRvdWJsZSAqX19jb3N4KTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2hsIChs
b25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3NobCAobG9uZyBkb3VibGUg
X194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fc2luaGwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3Vi
bGUgdGFuaGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RhbmhsIChs
b25nIGRvdWJsZSBfX3gpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJs
ZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hY29zaGwgKGxvbmcgZG91YmxlIF9feCk7Cgpl
eHRlcm4gbG9uZyBkb3VibGUgYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19hc2luaGwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRh
bmhsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuaGwgKGxvbmcg
ZG91YmxlIF9feCk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cGwgKGxvbmcgZG91YmxlIF9f
eCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cGwgKGxvbmcgZG91YmxlIF9feCk7CgoKCmV4dGVy
biBsb25nIGRvdWJsZSBleHAxMGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2V4cDEwbCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBwb3cxMGwg
KGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3BvdzEwbCAobG9uZyBkb3Vi
bGUgX194KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZyZXhwbCAobG9uZyBkb3VibGUgX194LCBp
bnQgKl9fZXhwb25lbnQpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mcmV4cGwgKGxvbmcgZG91Ymxl
IF9feCwgaW50ICpfX2V4cG9uZW50KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbGRleHBsIChsb25n
IGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGRleHBs
IChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KTsKCgpleHRlcm4gbG9uZyBkb3VibGUg
bG9nbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nbCAobG9uZyBk
b3VibGUgX194KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMTBsIChsb25nIGRvdWJsZSBfX3gp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cxMGwgKGxvbmcgZG91YmxlIF9feCk7CgoKZXh0ZXJu
IGxvbmcgZG91YmxlIG1vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19tb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSAqX19pcHRyKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cG0xbCAobG9uZyBkb3VibGUgX194
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVy
biBsb25nIGRvdWJsZSBsb2cxcGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2xvZzFwbCAobG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nYmwg
KGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2JsIChsb25nIGRvdWJs
ZSBfX3gpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDJsIChsb25nIGRvdWJsZSBfX3gpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19leHAybCAobG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9u
ZyBkb3VibGUgbG9nMmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xv
ZzJsIChsb25nIGRvdWJsZSBfX3gpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcG93bCAobG9u
ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3ds
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IHNxcnRsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zcXJ0bCAobG9u
ZyBkb3VibGUgX194KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGh5cG90bCAobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSBfX3kpOyBleHRlcm4gbG9uZyBkb3VibGUgX19oeXBvdGwgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjYnJ0
bCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2JydGwgKGxvbmcgZG91
YmxlIF9feCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3VibGUgX194
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2VpbGwgKGxvbmcgZG91YmxlIF9feCk7CgoKZXh0ZXJu
IGxvbmcgZG91YmxlIGZhYnNsIChsb25nIGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbG9vcmwgKGxv
bmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Zsb29ybCAobG9uZyBkb3VibGUg
X194KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk
b3VibGUgX195KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1vZGwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX195KTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmwgKGxvbmcgZG91YmxlIF9f
dmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRl
bCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoK
ZXh0ZXJuIGludCBpc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBpbmZu
YW5sIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19pbmZuYW5sIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpOyBleHRlcm4gbG9uZyBkb3VibGUgX19kcmVtbCAobG9uZyBkb3VibGUgX194LCBs
b25nIGRvdWJsZSBfX3kpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2lnbmlmaWNhbmRsIChsb25n
IGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaWduaWZpY2FuZGwgKGxvbmcgZG91
YmxlIF9feCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY29weXNpZ25sIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19jb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbmFu
bCAoX19jb25zdCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fbmFubCAoX19jb25zdCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25hbmwgKGxvbmcgZG91YmxlIF9f
dmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmwg
KGxvbmcgZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl
cm4gbG9uZyBkb3VibGUgajBsIChsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ow
bCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUgajFsIChsb25nIGRvdWJsZSk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2oxbCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUg
am5sIChpbnQsIGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fam5sIChpbnQsIGxv
bmcgZG91YmxlKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkwbCAobG9uZyBkb3VibGUpOyBleHRlcm4g
bG9uZyBkb3VibGUgX195MGwgKGxvbmcgZG91YmxlKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkxbCAo
bG9uZyBkb3VibGUpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MWwgKGxvbmcgZG91YmxlKTsKZXh0
ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX3lubCAoaW50LCBsb25nIGRvdWJsZSk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmwg
KGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXJmbCAobG9uZyBkb3VibGUpOwpl
eHRlcm4gbG9uZyBkb3VibGUgZXJmY2wgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fZXJmY2wgKGxvbmcgZG91YmxlKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWwgKGxvbmcg
ZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbCAobG9uZyBkb3VibGUpOwpleHRl
cm4gbG9uZyBkb3VibGUgdGdhbW1hbCAobG9uZyBkb3VibGUpOyBleHRlcm4gbG9uZyBkb3VibGUg
X190Z2FtbWFsIChsb25nIGRvdWJsZSk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZ2FtbWFsIChs
b25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2dhbW1hbCAobG9uZyBkb3VibGUpOwoK
CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3Np
Z25nYW1wKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50
ICpfX3NpZ25nYW1wKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJpbnRsIChsb25nIGRvdWJs
ZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yaW50bCAobG9uZyBkb3VibGUgX194KTsKCgpl
eHRlcm4gbG9uZyBkb3VibGUgbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
bmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0dG93YXJkbCAobG9uZyBk
b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dHRvd2FyZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk
b3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBsb25nIGRv
dWJsZSByZW1haW5kZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX3JlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX24pOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYmwgKGxvbmcgZG91YmxlIF9f
eCwgbG9uZyBkb3VibGUgX19uKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcg
ZG91YmxlIF9feCwgaW50IF9fbik7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibmwgKGxvbmcg
ZG91YmxlIF9feCwgaW50IF9fbik7CgoKZXh0ZXJuIGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9f
eCk7IGV4dGVybiBpbnQgX19pbG9nYmwgKGxvbmcgZG91YmxlIF9feCk7CgoKCgpleHRlcm4gbG9u
ZyBkb3VibGUgc2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fc2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKTsK
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5lYXJieWludGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX25lYXJieWludGwgKGxvbmcgZG91YmxlIF9feCk7CgoKCmV4dGVybiBs
b25nIGRvdWJsZSByb3VuZGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X3JvdW5kbCAobG9uZyBkb3VibGUgX194KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRydW5jbCAo
bG9uZyBkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX3RydW5jbCAobG9uZyBkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBs
b25nIGRvdWJsZSBfX3ksIGludCAqX19xdW8pOyBleHRlcm4gbG9uZyBkb3VibGUgX19yZW1xdW9s
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50ICpfX3F1byk7CgoKCgoKCmV4
dGVybiBsb25nIGludCBscmludGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGludCBf
X2xyaW50bCAobG9uZyBkb3VibGUgX194KTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50bCAo
bG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRsIChsb25nIGRv
dWJsZSBfX3gpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kbCAobG9uZyBkb3VibGUgX194KTsg
ZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kbCAobG9uZyBkb3VibGUgX194KTsKZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGxvbmcgaW50
IF9fbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmZGlt
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19mZGltbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOwoKCmV4dGVybiBsb25n
IGRvdWJsZSBmbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19mbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOwoK
CmV4dGVybiBsb25nIGRvdWJsZSBmbWlubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf
X3kpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWlubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWwgKGxvbmcgZG91YmxlIF9fdmFs
dWUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWdu
Yml0bCAobG9uZyBkb3VibGUgX192YWx1ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlIF9feSwgbG9uZyBkb3VibGUgX196KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1hbCAobG9u
ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feik7CiMgMTAwICIv
dXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyAxMTMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0
ZXJuIGludCBzaWduZ2FtOwojIDE1NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwplbnVtCiAgewog
ICAgRlBfTkFOLAoKICAgIEZQX0lORklOSVRFLAoKICAgIEZQX1pFUk8sCgogICAgRlBfU1VCTk9S
TUFMLAoKICAgIEZQX05PUk1BTAoKICB9OwojIDIzNiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwp0
eXBlZGVmIGVudW0KewogIF9JRUVFXyA9IC0xLAogIF9TVklEXywKICBfWE9QRU5fLAogIF9QT1NJ
WF8sCiAgX0lTT0NfCn0gX0xJQl9WRVJTSU9OX1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJTSU9O
X1RZUEUgX0xJQl9WRVJTSU9OOwojIDI1OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpzdHJ1Y3Qg
X19leGNlcHRpb24KCgoKICB7CiAgICBpbnQgdHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3Vi
bGUgYXJnMTsKICAgIGRvdWJsZSBhcmcyOwogICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVy
biBpbnQgbWF0aGVyciAoc3RydWN0IF9fZXhjZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7CiMgMjg5
ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiaW5jbHVkZS9mbG9hdC5oIiAxIDMKIyAyOTAg
Ii91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDM0OCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMSAzCiMgMTE3ICIvdXNyL2luY2x1
ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgaW50Cl9fc2lnbmJpdGYgKGZsb2F0IF9f
eCkKewogIF9fZXh0ZW5zaW9uX18gdW5pb24geyBmbG9hdCBfX2Y7IGludCBfX2k7IH0gX191ID0g
eyBfX2Y6IF9feCB9OwogIHJldHVybiBfX3UuX19pIDwgMDsKfQpfX2lubGluZSBpbnQKX19zaWdu
Yml0IChkb3VibGUgX194KQp7CiAgX19leHRlbnNpb25fXyB1bmlvbiB7IGRvdWJsZSBfX2Q7IGlu
dCBfX2lbMl07IH0gX191ID0geyBfX2Q6IF9feCB9OwogIHJldHVybiBfX3UuX19pWzFdIDwgMDsK
fQpfX2lubGluZSBpbnQKX19zaWduYml0bCAobG9uZyBkb3VibGUgX194KQp7CiAgX19leHRlbnNp
b25fXyB1bmlvbiB7IGxvbmcgZG91YmxlIF9fbDsgaW50IF9faVszXTsgfSBfX3UgPSB7IF9fbDog
X194IH07CiAgcmV0dXJuIChfX3UuX19pWzJdICYgMHg4MDAwKSAhPSAwOwp9CiMgMjM0ICIvdXNy
L2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIF9fc2duIChkb3Vi
bGUpOyBfX2lubGluZSBkb3VibGUgX19zZ24gKGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9feCA9PSAw
LjAgPyAwLjAgOiAoX194ID4gMC4wID8gMS4wIDogLTEuMCk7IH0gX19pbmxpbmUgZmxvYXQgX19z
Z25mIChmbG9hdCk7IF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxvYXQgX194KSB7IHJldHVybiBf
X3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjApOyB9IF9faW5saW5lIGxv
bmcgZG91YmxlIF9fc2dubCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBfX3Nn
bmwgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAw
LjAgPyAxLjAgOiAtMS4wKTsgfQoKCl9faW5saW5lIGRvdWJsZSBfX3BvdzIgKGRvdWJsZSk7IF9f
aW5saW5lIGRvdWJsZSBfX3BvdzIgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg
X192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19leHRlbnNpb25fXyBs
b25nIGxvbmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50KSBfX3g7IGlmIChfX3ggPT0gKGxvbmcg
ZG91YmxlKSBfX3ApIHsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFs
dWUpIDogIjAiICgxLjApLCAidSIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2FzbSBfX3Zv
bGF0aWxlX18gKCJmbGQJJSVzdCgwKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeClcblx0IiAiZnhj
aFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeClcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0
KHgpKSAtIDFcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAo
X194KSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10
IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9f
dmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgX19wb3cyZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCBf
X3BvdzJmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0
ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19leHRlbnNpb25fXyBsb25nIGxvbmcgaW50IF9f
cCA9IChsb25nIGxvbmcgaW50KSBfX3g7IGlmIChfX3ggPT0gKGxvbmcgZG91YmxlKSBfX3ApIHsg
X19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiICgxLjAp
LCAidSIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQJ
JSVzdCgwKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeClcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUl
c3QoMSkJCSMgZnJhY3QoeClcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHgpKSAtIDFcblx0IiA6
ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fdmFsdWUg
Kz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAi
MCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxp
bmUgbG9uZyBkb3VibGUgX19wb3cybCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJs
ZSBfX3BvdzJsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1
ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19leHRlbnNpb25fXyBsb25nIGxv
bmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50KSBfX3g7IGlmIChfX3ggPT0gKGxvbmcgZG91Ymxl
KSBfX3ApIHsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDog
IjAiICgxLjApLCAidSIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2FzbSBfX3ZvbGF0aWxl
X18gKCJmbGQJJSVzdCgwKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeClcblx0IiAiZnhjaFxuXHQi
ICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeClcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHgpKSAt
IDFcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7
IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192
YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7
IH0KIyAyODMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSB2b2lk
IF9fc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpOwpf
X2lubGluZSB2b2lkCl9fc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91Ymxl
ICpfX2Nvc3gpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX2Nvc3I7IHJlZ2lzdGVyIGxvbmcg
ZG91YmxlIF9fc2lucjsgX19hc20gX192b2xhdGlsZV9fICgiZnNpbmNvc1xuXHQiICJmbnN0c3cJ
JSVheFxuXHQiICJ0ZXN0bAkkMHg0MDAsICUlZWF4XG5cdCIgImp6CTFmXG5cdCIgImZsZHBpXG5c
dCIgImZhZGQJJSVzdCgwKVxuXHQiICJmeGNoCSUlc3QoMSlcblx0IiAiMjogZnByZW0xXG5cdCIg
ImZuc3RzdwklJWF4XG5cdCIgInRlc3RsCSQweDQwMCwgJSVlYXhcblx0IiAiam56CTJiXG5cdCIg
ImZzdHAJJSVzdCgxKVxuXHQiICJmc2luY29zXG5cdCIgIjE6IiA6ICI9dCIgKF9fY29zciksICI9
dSIgKF9fc2lucikgOiAiMCIgKF9feCkpOyAqX19zaW54ID0gX19zaW5yOyAqX19jb3N4ID0gX19j
b3NyOwp9CgpfX2lubGluZSB2b2lkIF9fc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54
LCBmbG9hdCAqX19jb3N4KTsKX19pbmxpbmUgdm9pZApfX3NpbmNvc2YgKGZsb2F0IF9feCwgZmxv
YXQgKl9fc2lueCwgZmxvYXQgKl9fY29zeCkKewogIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fY29z
cjsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19zaW5yOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2lu
Y29zXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInRlc3RsCSQweDQwMCwgJSVlYXhcblx0IiAianoJ
MWZcblx0IiAiZmxkcGlcblx0IiAiZmFkZAklJXN0KDApXG5cdCIgImZ4Y2gJJSVzdCgxKVxuXHQi
ICIyOiBmcHJlbTFcblx0IiAiZm5zdHN3CSUlYXhcblx0IiAidGVzdGwJJDB4NDAwLCAlJWVheFxu
XHQiICJqbnoJMmJcblx0IiAiZnN0cAklJXN0KDEpXG5cdCIgImZzaW5jb3Ncblx0IiAiMToiIDog
Ij10IiAoX19jb3NyKSwgIj11IiAoX19zaW5yKSA6ICIwIiAoX194KSk7ICpfX3NpbnggPSBfX3Np
bnI7ICpfX2Nvc3ggPSBfX2Nvc3I7Cn0KCl9faW5saW5lIHZvaWQgX19zaW5jb3NsIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvbmcgZG91YmxlICpfX2Nvc3gpOwpfX2lubGluZSB2b2lkCl9fc2luY29zbCAobG9uZyBk
b3VibGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KQp7CiAg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19jb3NyOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3NpbnI7
IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzaW5jb3Ncblx0IiAiZm5zdHN3CSUlYXhcblx0IiAidGVz
dGwJJDB4NDAwLCAlJWVheFxuXHQiICJqegkxZlxuXHQiICJmbGRwaVxuXHQiICJmYWRkCSUlc3Qo
MClcblx0IiAiZnhjaAklJXN0KDEpXG5cdCIgIjI6IGZwcmVtMVxuXHQiICJmbnN0c3cJJSVheFxu
XHQiICJ0ZXN0bAkkMHg0MDAsICUlZWF4XG5cdCIgImpuegkyYlxuXHQiICJmc3RwCSUlc3QoMSlc
blx0IiAiZnNpbmNvc1xuXHQiICIxOiIgOiAiPXQiIChfX2Nvc3IpLCAiPXUiIChfX3NpbnIpIDog
IjAiIChfX3gpKTsgKl9fc2lueCA9IF9fc2lucjsgKl9fY29zeCA9IF9fY29zcjsKfQojIDMyOCAi
L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGxvbmcgZG91YmxlIF9f
ZXhwbTFsIChsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIF9fZXhwbTFsIChsb25n
IGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9u
ZyBkb3VibGUgX19leHBvbmVudDsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX190ZW1wOyBfX2FzbSBf
X3ZvbGF0aWxlX18gKCJmbGRsMmUJCQkjIGVeeCAtIDEgPSAyXih4ICogbG9nMihlKSkgLSAxXG5c
dCIgImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJm
cm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEp
CQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIo
ZSkpKSAtIDFcblx0IiAiZnNjYWxlCQkJIyAyXih4ICogbG9nMihlKSkgLSAyXihpbnQoeCAqIGxv
ZzIoZSkpKVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChf
X3gpKTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlCQkJIyAyXmludCh4ICogbG9nMihlKSlc
blx0IiA6ICI9dCIgKF9fdGVtcCkgOiAiMCIgKDEuMCksICJ1IiAoX19leHBvbmVudCkpOyBfX3Rl
bXAgLT0gMS4wOyByZXR1cm4gX190ZW1wICsgX192YWx1ZTsgfQojIDM0OCAiL3Vzci9pbmNsdWRl
L2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBleHAgKGRvdWJsZSk7IF9faW5s
aW5lIGRvdWJsZSBleHAgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1
ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19hc20gX192b2xhdGlsZV9fICgi
ZmxkbDJlCQkJIyBlXnggPSAyXih4ICogbG9nMihlKSlcblx0IiAiZm11bAklJXN0KDEpCQkjIHgg
KiBsb2cyKGUpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9n
MihlKSlcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkp
XG5cdCIgImYyeG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiIDogIj10IiAo
X192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX192YWx1ZSArPSAxLjA7
IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192
YWx1ZSksICJ1IiAoX19leHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9h
dCBleHBmIChmbG9hdCk7IF9faW5saW5lIGZsb2F0IGV4cGYgKGZsb2F0IF9feCkgeyByZWdpc3Rl
ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyBf
X2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsMmUJCQkjIGVeeCA9IDJeKHggKiBsb2cyKGUpKVxuXHQi
ICJmbXVsCSUlc3QoMSkJCSMgeCAqIGxvZzIoZSlcblx0IiAiZnN0CSUlc3QoMSlcblx0IiAiZnJu
ZGludAkJCSMgaW50KHggKiBsb2cyKGUpKVxuXHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJ
IyBmcmFjdCh4ICogbG9nMihlKSlcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHggKiBsb2cyKGUp
KSkgLSAxXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9f
eCkpOyBfX3ZhbHVlICs9IDEuMDsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIg
KF9fdmFsdWUpIDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7IHJldHVybiBfX3Zh
bHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGV4cGwgKGxvbmcgZG91YmxlKTsgX19pbmxpbmUg
bG9uZyBkb3VibGUgZXhwbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl
IF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IF9fYXNtIF9fdm9sYXRp
bGVfXyAoImZsZGwyZQkJCSMgZV54ID0gMl4oeCAqIGxvZzIoZSkpXG5cdCIgImZtdWwJJSVzdCgx
KQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQo
eCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBs
b2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0IiA6
ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fdmFsdWUg
Kz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAi
MCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0KX19pbmxp
bmUgbG9uZyBkb3VibGUgX19leHBsIChsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91Ymxl
IF9fZXhwbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7
IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZs
ZGwyZQkJCSMgZV54ID0gMl4oeCAqIGxvZzIoZSkpXG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4ICog
bG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeCAqIGxvZzIo
ZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUpKVxu
XHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0IiA6ICI9dCIgKF9f
dmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fdmFsdWUgKz0gMS4wOyBf
X2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFs
dWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0KCgpfX2lubGluZSBkb3Vi
bGUgdGFuIChkb3VibGUpOyBfX2lubGluZSBkb3VibGUgdGFuIChkb3VibGUgX194KSB7IHJlZ2lz
dGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWUyIF9f
YXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwdGFuIiA6
ICI9dCIgKF9fdmFsdWUyKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192
YWx1ZTsgfSBfX2lubGluZSBmbG9hdCB0YW5mIChmbG9hdCk7IF9faW5saW5lIGZsb2F0IHRhbmYg
KGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25n
IGRvdWJsZSBfX3ZhbHVlMiBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOyBfX2FzbSBfX3Zv
bGF0aWxlX18gKCJmcHRhbiIgOiAiPXQiIChfX3ZhbHVlMiksICI9dSIgKF9fdmFsdWUpIDogIjAi
IChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgdGFubCAobG9u
ZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSB0YW5sIChsb25nIGRvdWJsZSBfX3gpIHsg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1
ZTIgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsgX19hc20gX192b2xhdGlsZV9fICgiZnB0
YW4iIDogIj10IiAoX192YWx1ZTIpLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVy
biBfX3ZhbHVlOyB9CiMgMzY3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19p
bmxpbmUgZG91YmxlIGF0YW4yIChkb3VibGUsIGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBhdGFu
MiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVl
OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f
eCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9h
dCBhdGFuMmYgKGZsb2F0LCBmbG9hdCk7IF9faW5saW5lIGZsb2F0IGF0YW4yZiAoZmxvYXQgX195
LCBmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xh
dGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkg
OiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbjJs
IChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFuMmwg
KGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl
IF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6
ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9Cl9faW5s
aW5lIGxvbmcgZG91YmxlIF9fYXRhbjJsIChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpOyBfX2lu
bGluZSBsb25nIGRvdWJsZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBf
X3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgi
ZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSki
KTsgcmV0dXJuIF9fdmFsdWU7IH0KCgpfX2lubGluZSBkb3VibGUgZm1vZCAoZG91YmxlLCBkb3Vi
bGUpOyBfX2lubGluZSBkb3VibGUgZm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgeyByZWdp
c3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxu
XHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUp
IDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0g
X19pbmxpbmUgZmxvYXQgZm1vZGYgKGZsb2F0LCBmbG9hdCk7IF9faW5saW5lIGZsb2F0IGZtb2Rm
IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBf
X2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhm
XG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAi
YXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgZm1vZGwg
KGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIGZtb2RsIChs
b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBf
X3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxu
XHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIg
KF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyAzODIgIi91c3IvaW5jbHVk
ZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgcG93IChkb3VibGUsIGRvdWJs
ZSk7IF9faW5saW5lIGRvdWJsZSBwb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHsgcmVnaXN0
ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsg
X19leHRlbnNpb25fXyBsb25nIGxvbmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50KSBfX3k7IGlm
IChfX3ggPT0gMC4wICYmIF9feSA+IDAuMCkgcmV0dXJuIDAuMDsgaWYgKF9feSA9PSAoZG91Ymxl
KSBfX3ApIHsgbG9uZyBkb3VibGUgX19yID0gMS4wOyBpZiAoX19wID09IDApIHJldHVybiAxLjA7
IGlmIChfX3AgPCAwKSB7IF9fcCA9IC1fX3A7IF9feCA9IDEuMCAvIF9feDsgfSB3aGlsZSAoMSkg
eyBpZiAoX19wICYgMSkgX19yICo9IF9feDsgX19wID4+PSAxOyBpZiAoX19wID09IDApIHJldHVy
biBfX3I7IF9feCAqPSBfX3g7IH0gfSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeWwyeCIgOiAiPXQi
IChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiICgxLjApIDogInN0KDEpIik7IF9fYXNtIF9fdm9s
YXRpbGVfXyAoImZtdWwJJSVzdCgxKQkJIyB5ICogbG9nMih4KVxuXHQiICJmc3QJJSVzdCgxKVxu
XHQiICJmcm5kaW50CQkJIyBpbnQoeSAqIGxvZzIoeCkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1Ygkl
JXN0KDEpCQkjIGZyYWN0KHkgKiBsb2cyKHgpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeSAq
IGxvZzIoeCkpKSAtIDFcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6
ICIwIiAoX195KSwgIjEiIChfX3ZhbHVlKSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0
aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9f
ZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgcG93ZiAoZmxvYXQs
IGZsb2F0KTsgX19pbmxpbmUgZmxvYXQgcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmVn
aXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVu
dDsgX19leHRlbnNpb25fXyBsb25nIGxvbmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50KSBfX3k7
IGlmIChfX3ggPT0gMC4wICYmIF9feSA+IDAuMCkgcmV0dXJuIDAuMDsgaWYgKF9feSA9PSAoZG91
YmxlKSBfX3ApIHsgbG9uZyBkb3VibGUgX19yID0gMS4wOyBpZiAoX19wID09IDApIHJldHVybiAx
LjA7IGlmIChfX3AgPCAwKSB7IF9fcCA9IC1fX3A7IF9feCA9IDEuMCAvIF9feDsgfSB3aGlsZSAo
MSkgeyBpZiAoX19wICYgMSkgX19yICo9IF9feDsgX19wID4+PSAxOyBpZiAoX19wID09IDApIHJl
dHVybiBfX3I7IF9feCAqPSBfX3g7IH0gfSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeWwyeCIgOiAi
PXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiICgxLjApIDogInN0KDEpIik7IF9fYXNtIF9f
dm9sYXRpbGVfXyAoImZtdWwJJSVzdCgxKQkJIyB5ICogbG9nMih4KVxuXHQiICJmc3QJJSVzdCgx
KVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeSAqIGxvZzIoeCkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1
YgklJXN0KDEpCQkjIGZyYWN0KHkgKiBsb2cyKHgpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3Qo
eSAqIGxvZzIoeCkpKSAtIDFcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50
KSA6ICIwIiAoX195KSwgIjEiIChfX3ZhbHVlKSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3Zv
bGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIg
KF9fZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgcG93
bCAobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgcG93bCAo
bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg
X192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19leHRlbnNpb25fXyBs
b25nIGxvbmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50KSBfX3k7IGlmIChfX3ggPT0gMC4wICYm
IF9feSA+IDAuMCkgcmV0dXJuIDAuMDsgaWYgKF9feSA9PSAoZG91YmxlKSBfX3ApIHsgbG9uZyBk
b3VibGUgX19yID0gMS4wOyBpZiAoX19wID09IDApIHJldHVybiAxLjA7IGlmIChfX3AgPCAwKSB7
IF9fcCA9IC1fX3A7IF9feCA9IDEuMCAvIF9feDsgfSB3aGlsZSAoMSkgeyBpZiAoX19wICYgMSkg
X19yICo9IF9feDsgX19wID4+PSAxOyBpZiAoX19wID09IDApIHJldHVybiBfX3I7IF9feCAqPSBf
X3g7IH0gfSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeWwyeCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIw
IiAoX194KSwgInUiICgxLjApIDogInN0KDEpIik7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZtdWwJ
JSVzdCgxKQkJIyB5ICogbG9nMih4KVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJ
IyBpbnQoeSAqIGxvZzIoeCkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0
KHkgKiBsb2cyKHgpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeSAqIGxvZzIoeCkpKSAtIDFc
blx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX195KSwgIjEi
IChfX3ZhbHVlKSk7IF9fdmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUi
IDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0
dXJuIF9fdmFsdWU7IH0KIyA0MjYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpf
X2lubGluZSBkb3VibGUgc3FydCAoZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIHNxcnQgKGRvdWJs
ZSBfX3gpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm
c3FydCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0g
X19pbmxpbmUgZmxvYXQgc3FydGYgKGZsb2F0KTsgX19pbmxpbmUgZmxvYXQgc3FydGYgKGZsb2F0
IF9feCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNx
cnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9f
aW5saW5lIGxvbmcgZG91YmxlIHNxcnRsIChsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91
YmxlIHNxcnRsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1
bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAo
X194KSk7IHJldHVybiBfX3Jlc3VsdDsgfQpfX2lubGluZSBsb25nIGRvdWJsZSBfX3NxcnRsIChs
b25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9f
eCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgi
ZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9
CgoKX19pbmxpbmUgZG91YmxlIGZhYnMgKGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBmYWJzIChk
b3VibGUgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFicyAoX194KTsgfQpfX2lubGluZSBmbG9h
dCBmYWJzZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSB7IHJldHVy
biBfX2J1aWx0aW5fZmFic2YgKF9feCk7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUgZmFic2wgKGxv
bmcgZG91YmxlKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkg
eyByZXR1cm4gX19idWlsdGluX2ZhYnNsIChfX3gpOyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIF9f
ZmFic2wgKGxvbmcgZG91YmxlKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgX19mYWJzbCAobG9uZyBk
b3VibGUgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2wgKF9feCk7IH0KCgoKCgoKX19pbmxp
bmUgZG91YmxlIHNpbiAoZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIHNpbiAoZG91YmxlIF9feCkg
eyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzaW4iIDog
Ij10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5l
IGZsb2F0IHNpbmYgKGZsb2F0KTsgX19pbmxpbmUgZmxvYXQgc2luZiAoZmxvYXQgX194KSB7IHJl
Z2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2luIiA6ICI9dCIg
KF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBsb25n
IGRvdWJsZSBzaW5sIChsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIHNpbmwgKGxv
bmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192
b2xhdGlsZV9fICgiZnNpbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4g
X19yZXN1bHQ7IH0KCl9faW5saW5lIGRvdWJsZSBjb3MgKGRvdWJsZSk7IF9faW5saW5lIGRvdWJs
ZSBjb3MgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3Zv
bGF0aWxlX18gKCJmY29zIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBf
X3Jlc3VsdDsgfSBfX2lubGluZSBmbG9hdCBjb3NmIChmbG9hdCk7IF9faW5saW5lIGZsb2F0IGNv
c2YgKGZsb2F0IF9feCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGls
ZV9fICgiZmNvcyIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1
bHQ7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgY29zbCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBs
b25nIGRvdWJsZSBjb3NsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg
X19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZjb3MiIDogIj10IiAoX19yZXN1bHQpIDog
IjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9CgpfX2lubGluZSBkb3VibGUgYXRhbiAoZG91
YmxlKTsgX19pbmxpbmUgZG91YmxlIGF0YW4gKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91Ymxl
IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19y
ZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGlu
ZSBmbG9hdCBhdGFuZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCBhdGFuZiAoZmxvYXQgX194KSB7
IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQxOyBmcGF0
YW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jl
c3VsdDsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBkb3VibGUpOyBfX2lubGlu
ZSBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91
YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQxOyBmcGF0YW4iIDogIj10IiAo
X19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfQpfX2lu
bGluZSBkb3VibGUgbG9nIChkb3VibGUpOyBfX2lubGluZSBkb3VibGUgbG9nIChkb3VibGUgX194
KSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbG4y
OyBmeGNoOyBmeWwyeCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsg
cmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGZsb2F0IGxvZ2YgKGZsb2F0KTsgX19pbmxpbmUg
ZmxvYXQgbG9nZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBf
X3ZvbGF0aWxlX18gKCJmbGRsbjI7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIw
IiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgbG9uZyBkb3Vi
bGUgbG9nbCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBsb2dsIChsb25nIGRv
dWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRp
bGVfXyAoImZsZGxuMjsgZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gp
IDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfQpfX2lubGluZSBkb3VibGUgbG9nMTAgKGRv
dWJsZSk7IF9faW5saW5lIGRvdWJsZSBsb2cxMCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBkb3Vi
bGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxnMjsgZnhjaDsgZnlsMngiIDog
Ij10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsg
fSBfX2lubGluZSBmbG9hdCBsb2cxMGYgKGZsb2F0KTsgX19pbmxpbmUgZmxvYXQgbG9nMTBmIChm
bG9hdCBfX3gpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAo
ImZsZGxnMjsgZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0
KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBsb2cxMGwgKGxv
bmcgZG91YmxlKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nMTBsIChsb25nIGRvdWJsZSBfX3gp
IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZs
ZGxnMjsgZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEp
Iik7IHJldHVybiBfX3Jlc3VsdDsgfQoKX19pbmxpbmUgZG91YmxlIGFzaW4gKGRvdWJsZSk7IF9f
aW5saW5lIGRvdWJsZSBhc2luIChkb3VibGUgX194KSB7IHJldHVybiBfX2F0YW4ybCAoX194LCBf
X3NxcnRsICgxLjAgLSBfX3ggKiBfX3gpKTsgfSBfX2lubGluZSBmbG9hdCBhc2luZiAoZmxvYXQp
OyBfX2lubGluZSBmbG9hdCBhc2luZiAoZmxvYXQgX194KSB7IHJldHVybiBfX2F0YW4ybCAoX194
LCBfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gpKTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBhc2lu
bCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBhc2lubCAobG9uZyBkb3VibGUg
X194KSB7IHJldHVybiBfX2F0YW4ybCAoX194LCBfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gpKTsg
fQpfX2lubGluZSBkb3VibGUgYWNvcyAoZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIGFjb3MgKGRv
dWJsZSBfX3gpIHsgcmV0dXJuIF9fYXRhbjJsIChfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gpLCBf
X3gpOyB9IF9faW5saW5lIGZsb2F0IGFjb3NmIChmbG9hdCk7IF9faW5saW5lIGZsb2F0IGFjb3Nm
IChmbG9hdCBfX3gpIHsgcmV0dXJuIF9fYXRhbjJsIChfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gp
LCBfX3gpOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGFjb3NsIChsb25nIGRvdWJsZSk7IF9faW5s
aW5lIGxvbmcgZG91YmxlIGFjb3NsIChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9fYXRhbjJs
IChfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gpLCBfX3gpOyB9CgpfX2lubGluZSBsb25nIGRvdWJs
ZSBfX3NnbjFsIChsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxv
bmcgZG91YmxlIF9feCkgeyByZXR1cm4gX194ID49IDAuMCA/IDEuMCA6IC0xLjA7IH0KCgoKX19p
bmxpbmUgZG91YmxlIHNpbmggKGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBzaW5oIChkb3VibGUg
X194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2ZhYnNsIChf
X3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSArIF9fZXhtMSkgKiBf
X3NnbjFsIChfX3gpOyB9IF9faW5saW5lIGZsb2F0IHNpbmhmIChmbG9hdCk7IF9faW5saW5lIGZs
b2F0IHNpbmhmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19l
eHBtMWwgKF9fZmFic2wgKF9feCkpOyByZXR1cm4gMC41ICogKF9fZXhtMSAvIChfX2V4bTEgKyAx
LjApICsgX19leG0xKSAqIF9fc2duMWwgKF9feCk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgc2lu
aGwgKGxvbmcgZG91YmxlKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgc2luaGwgKGxvbmcgZG91Ymxl
IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoX19mYWJzbCAo
X194KSk7IHJldHVybiAwLjUgKiAoX19leG0xIC8gKF9fZXhtMSArIDEuMCkgKyBfX2V4bTEpICog
X19zZ24xbCAoX194KTsgfQoKCgpfX2lubGluZSBkb3VibGUgY29zaCAoZG91YmxlKTsgX19pbmxp
bmUgZG91YmxlIGNvc2ggKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leCA9
IF9fZXhwbCAoX194KTsgcmV0dXJuIDAuNSAqIChfX2V4ICsgMS4wIC8gX19leCk7IH0gX19pbmxp
bmUgZmxvYXQgY29zaGYgKGZsb2F0KTsgX19pbmxpbmUgZmxvYXQgY29zaGYgKGZsb2F0IF9feCkg
eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4ID0gX19leHBsIChfX3gpOyByZXR1cm4gMC41ICog
KF9fZXggKyAxLjAgLyBfX2V4KTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBjb3NobCAobG9uZyBk
b3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBjb3NobCAobG9uZyBkb3VibGUgX194KSB7IHJl
Z2lzdGVyIGxvbmcgZG91YmxlIF9fZXggPSBfX2V4cGwgKF9feCk7IHJldHVybiAwLjUgKiAoX19l
eCArIDEuMCAvIF9fZXgpOyB9CgoKCl9faW5saW5lIGRvdWJsZSB0YW5oIChkb3VibGUpOyBfX2lu
bGluZSBkb3VibGUgdGFuaCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4
bTEgPSBfX2V4cG0xbCAoLV9fZmFic2wgKF9feCArIF9feCkpOyByZXR1cm4gX19leG0xIC8gKF9f
ZXhtMSArIDIuMCkgKiBfX3NnbjFsICgtX194KTsgfSBfX2lubGluZSBmbG9hdCB0YW5oZiAoZmxv
YXQpOyBfX2lubGluZSBmbG9hdCB0YW5oZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91
YmxlIF9fZXhtMSA9IF9fZXhwbTFsICgtX19mYWJzbCAoX194ICsgX194KSk7IHJldHVybiBfX2V4
bTEgLyAoX19leG0xICsgMi4wKSAqIF9fc2duMWwgKC1fX3gpOyB9IF9faW5saW5lIGxvbmcgZG91
YmxlIHRhbmhsIChsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIHRhbmhsIChsb25n
IGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKC1f
X2ZhYnNsIChfX3ggKyBfX3gpKTsgcmV0dXJuIF9fZXhtMSAvIChfX2V4bTEgKyAyLjApICogX19z
Z24xbCAoLV9feCk7IH0KCgoKCl9faW5saW5lIGRvdWJsZSBmbG9vciAoZG91YmxlKTsgX19pbmxp
bmUgZG91YmxlIGZsb29yIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs
dWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWdu
ZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1t
IiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3Zv
bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAo
ImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxl
ICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUg
ZmxvYXQgZmxvb3JmIChmbG9hdCk7IF9faW5saW5lIGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSB7
IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQg
aW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9f
dm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAw
eGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9f
Y3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAi
MCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsg
cmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJs
ZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lz
dGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9f
Y3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRp
bGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYp
IHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXAp
KTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f
eCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJu
IF9fdmFsdWU7IH0KIyA0NzkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lu
bGluZSBkb3VibGUgY2VpbCAoZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIGNlaWwgKGRvdWJsZSBf
X3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBz
aG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19h
c20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19j
dyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJt
IiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVl
KSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19j
dykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBjZWlsZiAoZmxvYXQpOyBfX2lu
bGluZSBmbG9hdCBjZWlsZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs
dWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWdu
ZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1t
IiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBfX2FzbSBfX3Zv
bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAo
ImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxl
ICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUg
bG9uZyBkb3VibGUgY2VpbGwgKGxvbmcgZG91YmxlKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgY2Vp
bGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3Zv
bGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0
IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cp
KTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAo
ImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50
IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3
ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9CiMgNDk3ICIvdXNyL2luY2x1
ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIGxkZXhwIChkb3VibGUgX194
LCBpbnQgX195KTsKX19pbmxpbmUgZG91YmxlCmxkZXhwIChkb3VibGUgX194LCBpbnQgX195KQp7
CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNj
YWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195
KSk7IHJldHVybiBfX3ZhbHVlOwp9CgoKCgoKX19pbmxpbmUgZG91YmxlIGV4cG0xIChkb3VibGUp
OyBfX2lubGluZSBkb3VibGUgZXhwbTEgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgcmVnaXN0ZXIgbG9u
ZyBkb3VibGUgX190ZW1wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsMmUJCQkjIGVeeCAtIDEg
PSAyXih4ICogbG9nMihlKSkgLSAxXG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxu
XHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIg
ImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiICJmMnht
MQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0IiAiZnNjYWxlCQkJIyAyXih4ICog
bG9nMihlKSkgLSAyXihpbnQoeCAqIGxvZzIoZSkpKVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9
dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxl
CQkJIyAyXmludCh4ICogbG9nMihlKSlcblx0IiA6ICI9dCIgKF9fdGVtcCkgOiAiMCIgKDEuMCks
ICJ1IiAoX19leHBvbmVudCkpOyBfX3RlbXAgLT0gMS4wOyByZXR1cm4gX190ZW1wICsgX192YWx1
ZTsgfSBfX2lubGluZSBmbG9hdCBleHBtMWYgKGZsb2F0KTsgX19pbmxpbmUgZmxvYXQgZXhwbTFm
IChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9u
ZyBkb3VibGUgX19leHBvbmVudDsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX190ZW1wOyBfX2FzbSBf
X3ZvbGF0aWxlX18gKCJmbGRsMmUJCQkjIGVeeCAtIDEgPSAyXih4ICogbG9nMihlKSkgLSAxXG5c
dCIgImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJm
cm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEp
CQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIo
ZSkpKSAtIDFcblx0IiAiZnNjYWxlCQkJIyAyXih4ICogbG9nMihlKSkgLSAyXihpbnQoeCAqIGxv
ZzIoZSkpKVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChf
X3gpKTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlCQkJIyAyXmludCh4ICogbG9nMihlKSlc
blx0IiA6ICI9dCIgKF9fdGVtcCkgOiAiMCIgKDEuMCksICJ1IiAoX19leHBvbmVudCkpOyBfX3Rl
bXAgLT0gMS4wOyByZXR1cm4gX190ZW1wICsgX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJs
ZSBleHBtMWwgKGxvbmcgZG91YmxlKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgZXhwbTFsIChsb25n
IGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9u
ZyBkb3VibGUgX19leHBvbmVudDsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX190ZW1wOyBfX2FzbSBf
X3ZvbGF0aWxlX18gKCJmbGRsMmUJCQkjIGVeeCAtIDEgPSAyXih4ICogbG9nMihlKSkgLSAxXG5c
dCIgImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJm
cm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEp
CQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIo
ZSkpKSAtIDFcblx0IiAiZnNjYWxlCQkJIyAyXih4ICogbG9nMihlKSkgLSAyXihpbnQoeCAqIGxv
ZzIoZSkpKVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChf
X3gpKTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlCQkJIyAyXmludCh4ICogbG9nMihlKSlc
blx0IiA6ICI9dCIgKF9fdGVtcCkgOiAiMCIgKDEuMCksICJ1IiAoX19leHBvbmVudCkpOyBfX3Rl
bXAgLT0gMS4wOyByZXR1cm4gX190ZW1wICsgX192YWx1ZTsgfQoKCgoKCl9faW5saW5lIGRvdWJs
ZSBsb2cxcCAoZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIGxvZzFwIChkb3VibGUgX194KSB7IHJl
Z2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IGlmIChfX2ZhYnNsIChfX3gpID49IDEuMCAtIDAu
NSAqIDEuNDE0MjEzNTYyMzczMDk1MDQ4ODBMKSBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194KTsg
ZWxzZSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjJcblx0IiAiZnhjaFxuXHQiICJmeWwyeHAx
IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVl
OyB9IF9faW5saW5lIGZsb2F0IGxvZzFwZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCBsb2cxcGYg
KGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAo
X194KSA+PSAxLjAgLSAwLjUgKiAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxv
Z2wgKDEuMCArIF9feCk7IGVsc2UgX19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4
Y2hcblx0IiAiZnlsMnhwMSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIp
OyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBsb2cxcGwgKGxvbmcgZG91
YmxlKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVn
aXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41
ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBl
bHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEi
IDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7
IH0KIyA1MjggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3Vi
bGUgYXNpbmggKGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBhc2luaCAoZG91YmxlIF9feCkgeyBy
ZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAo
X195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9f
c2duMWwgKF9feCkpOyB9IF9faW5saW5lIGZsb2F0IGFzaW5oZiAoZmxvYXQpOyBfX2lubGluZSBm
bG9hdCBhc2luaGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2Zh
YnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9f
eSArIDEuMCkgKyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9IF9faW5saW5lIGxvbmcg
ZG91YmxlIGFzaW5obCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBhc2luaGwg
KGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChf
X3gpOyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEu
MCkgKyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9CgoKCgpfX2lubGluZSBkb3VibGUg
YWNvc2ggKGRvdWJsZSk7IF9faW5saW5lIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCkgeyByZXR1
cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkp
OyB9IF9faW5saW5lIGZsb2F0IGFjb3NoZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCBhY29zaGYg
KGZsb2F0IF9feCkgeyByZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9f
c3FydGwgKF9feCArIDEuMCkpOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGFjb3NobCAobG9uZyBk
b3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkgeyBy
ZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEu
MCkpOyB9CgoKX19pbmxpbmUgZG91YmxlIGF0YW5oIChkb3VibGUpOyBfX2lubGluZSBkb3VibGUg
YXRhbmggKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAo
X194KTsgcmV0dXJuIC0wLjUgKiBsb2cxcGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kpKSAq
IF9fc2duMWwgKF9feCk7IH0gX19pbmxpbmUgZmxvYXQgYXRhbmhmIChmbG9hdCk7IF9faW5saW5l
IGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9f
ZmFic2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsg
X195KSkgKiBfX3NnbjFsIChfX3gpOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW5obCAobG9u
ZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9feCkg
eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAq
IGxvZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfQoK
CgoKX19pbmxpbmUgZG91YmxlIGh5cG90IChkb3VibGUsIGRvdWJsZSk7IF9faW5saW5lIGRvdWJs
ZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgeyByZXR1cm4gX19zcXJ0bCAoX194ICog
X194ICsgX195ICogX195KTsgfSBfX2lubGluZSBmbG9hdCBoeXBvdGYgKGZsb2F0LCBmbG9hdCk7
IF9faW5saW5lIGZsb2F0IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIF9f
c3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgaHlw
b3RsIChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBoeXBv
dGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7IHJldHVybiBfX3NxcnRsIChf
X3ggKiBfX3ggKyBfX3kgKiBfX3kpOyB9CgpfX2lubGluZSBkb3VibGUgbG9nYiAoZG91YmxlKTsg
X19pbmxpbmUgZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg
X192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18g
KCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194
KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGxvZ2JmIChmbG9hdCk7IF9faW5s
aW5lIGZsb2F0IGxvZ2JmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1
ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRy
YWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJl
dHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSk7
IF9faW5saW5lIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIg
bG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBf
X3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVl
KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9CiMgNTU0ICIvdXNyL2luY2x1ZGUvYml0
cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIGxvZzIgKGRvdWJsZSk7IF9faW5saW5l
IGRvdWJsZSBsb2cyIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19h
c20gX192b2xhdGlsZV9fICgiZmxkMTsgZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQpIDog
IjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBmbG9hdCBs
b2cyZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCBsb2cyZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVy
IGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQxOyBmeGNoOyBmeWwyeCIg
OiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0
OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGxvZzJsIChsb25nIGRvdWJsZSk7IF9faW5saW5lIGxv
bmcgZG91YmxlIGxvZzJsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg
X19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZDE7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIg
KF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0KCl9f
aW5saW5lIGZsb2F0IGxkZXhwZiAoZmxvYXQgX194LCBpbnQgX195KTsKX19pbmxpbmUgZmxvYXQK
bGRleHBmIChmbG9hdCBfX3gsIGludCBfX3kpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Zh
bHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIg
KF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KCl9faW5s
aW5lIGxvbmcgZG91YmxlIGxkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX195KTsKX19pbmxp
bmUgbG9uZyBkb3VibGUKbGRleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCBfX3kpCnsKICByZWdp
c3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDog
Ij10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0
dXJuIF9fdmFsdWU7Cn0KCl9faW5saW5lIGRvdWJsZSBmbWEgKGRvdWJsZSwgZG91YmxlLCBkb3Vi
bGUpOyBfX2lubGluZSBkb3VibGUgZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUg
X196KSB7IHJldHVybiAoX194ICogX195KSArIF9fejsgfSBfX2lubGluZSBmbG9hdCBmbWFmIChm
bG9hdCwgZmxvYXQsIGZsb2F0KTsgX19pbmxpbmUgZmxvYXQgZm1hZiAoZmxvYXQgX194LCBmbG9h
dCBfX3ksIGZsb2F0IF9feikgeyByZXR1cm4gKF9feCAqIF9feSkgKyBfX3o7IH0gX19pbmxpbmUg
bG9uZyBkb3VibGUgZm1hbCAobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSk7
IF9faW5saW5lIGxvbmcgZG91YmxlIGZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195LCBsb25nIGRvdWJsZSBfX3opIHsgcmV0dXJuIChfX3ggKiBfX3kpICsgX196OyB9CgpfX2lu
bGluZSBkb3VibGUgcmludCAoZG91YmxlKTsgX19pbmxpbmUgZG91YmxlIHJpbnQgKGRvdWJsZSBf
X3gpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcm5k
aW50IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBf
X2lubGluZSBmbG9hdCByaW50ZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCByaW50ZiAoZmxvYXQg
X194KSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcm5k
aW50IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBf
X2lubGluZSBsb25nIGRvdWJsZSByaW50bCAobG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRv
dWJsZSByaW50bCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVz
dWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcm5kaW50IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIw
IiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfQoKCgoKCgoKX19pbmxpbmUgbG9uZyBpbnQKbHJp
bnRmIChmbG9hdCBfX3gpCnsKICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRp
bGVfXyAoImZpc3RwbCAlMCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIp
OyByZXR1cm4gX19scmludHJlczsKfQpfX2lubGluZSBsb25nIGludApscmludCAoZG91YmxlIF9f
eCkKewogIGxvbmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBs
ICUwIiA6ICI9bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBfX2xy
aW50cmVzOwp9Cl9faW5saW5lIGxvbmcgaW50CmxyaW50bCAobG9uZyBkb3VibGUgX194KQp7CiAg
bG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGwgJTAiIDog
Ij1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbHJpbnRyZXM7
Cn0KIyA2MDMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBsb25n
IGxvbmcgaW50CmxscmludGYgKGZsb2F0IF9feCkKewogIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRy
ZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsbCAlMCIgOiAiPW0iIChfX2xscmludHJl
cykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbGxyaW50cmVzOwp9Cl9faW5saW5lIGxv
bmcgbG9uZyBpbnQKbGxyaW50IChkb3VibGUgX194KQp7CiAgbG9uZyBsb25nIGludCBfX2xscmlu
dHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGxsICUwIiA6ICI9bSIgKF9fbGxyaW50
cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19sbHJpbnRyZXM7Cn0KX19pbmxpbmUg
bG9uZyBsb25nIGludApsbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpCnsKICBsb25nIGxvbmcgaW50
IF9fbGxyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbGwgJTAiIDogIj1tIiAo
X19sbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBfX2xscmludHJlczsKfQoK
CgoKCgoKX19pbmxpbmUgZG91YmxlIGRyZW0gKGRvdWJsZSwgZG91YmxlKTsgX19pbmxpbmUgZG91
YmxlIGRyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFs
dWU7IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnBy
ZW0xXG5cdCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3Zh
bHVlKSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7
IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGRyZW1mIChmbG9hdCwgZmxvYXQpOyBf
X2lubGluZSBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmVnaXN0ZXIgZG91
YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9f
ICgiMToJZnByZW0xXG5cdCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAi
PXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kp
IDogImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGRyZW1sIChs
b25nIGRvdWJsZSwgbG9uZyBkb3VibGUpOyBfX2lubGluZSBsb25nIGRvdWJsZSBkcmVtbCAobG9u
ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7
IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0x
XG5cdCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVl
KSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJl
dHVybiBfX3ZhbHVlOyB9CiMgNjM4ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMK
X19pbmxpbmUgaW50IF9fZmluaXRlIChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7Cl9faW5saW5lIGludApfX2Zpbml0ZSAoZG91YmxlIF9feCkKewogIHJldHVybiAoX19l
eHRlbnNpb25fXwogICAgICAgICAgKCgoKCh1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07
IH0pIHtfX2Q6IF9feH0pLl9faVsxXQogICAgICAgICAgICAgfCAweDgwMGZmZmZmdSkgKyAxKSA+
PiAzMSkpOwp9CgoKCl9faW5saW5lIGRvdWJsZSBfX2Nvc2htMSAoZG91YmxlKTsgX19pbmxpbmUg
ZG91YmxlIF9fY29zaG0xIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXht
MSA9IF9fZXhwbTFsIChfX2ZhYnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19l
eG0xICsgMS4wKSkgKiBfX2V4bTE7IH0gX19pbmxpbmUgZmxvYXQgX19jb3NobTFmIChmbG9hdCk7
IF9faW5saW5lIGZsb2F0IF9fY29zaG0xZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91
YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2ZhYnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4
bTEgLyAoX19leG0xICsgMS4wKSkgKiBfX2V4bTE7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgX19j
b3NobTFsIChsb25nIGRvdWJsZSk7IF9faW5saW5lIGxvbmcgZG91YmxlIF9fY29zaG0xbCAobG9u
ZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChf
X2ZhYnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSkgKiBf
X2V4bTE7IH0KCgoKX19pbmxpbmUgZG91YmxlIF9fYWNvc2gxcCAoZG91YmxlKTsgX19pbmxpbmUg
ZG91YmxlIF9fYWNvc2gxcCAoZG91YmxlIF9feCkgeyByZXR1cm4gbG9nMXBsIChfX3ggKyBfX3Nx
cnRsIChfX3gpICogX19zcXJ0bCAoX194ICsgMi4wKSk7IH0gX19pbmxpbmUgZmxvYXQgX19hY29z
aDFwZiAoZmxvYXQpOyBfX2lubGluZSBmbG9hdCBfX2Fjb3NoMXBmIChmbG9hdCBfX3gpIHsgcmV0
dXJuIGxvZzFwbCAoX194ICsgX19zcXJ0bCAoX194KSAqIF9fc3FydGwgKF9feCArIDIuMCkpOyB9
IF9faW5saW5lIGxvbmcgZG91YmxlIF9fYWNvc2gxcGwgKGxvbmcgZG91YmxlKTsgX19pbmxpbmUg
bG9uZyBkb3VibGUgX19hY29zaDFwbCAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBsb2cxcGwg
KF9feCArIF9fc3FydGwgKF9feCkgKiBfX3NxcnRsIChfX3ggKyAyLjApKTsgfQojIDM0OSAiL3Vz
ci9pbmNsdWRlL21hdGguaCIgMiAzCiMgNDA5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCn0KIyA0
NCAiL2hvbWVzL2toYW4vbG9jYWwvZ2NjLTMuMS9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbWF0
aC5oIiAyIDMKIyA3MCAiL2hvbWVzL2toYW4vbG9jYWwvZ2NjLTMuMS9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jbWF0aC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPiBfVHAgX19jbWF0aF9wb3dlcihfVHAsIHVuc2lnbmVkIGludCk7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICBpbmxpbmUgX1RwCiAgICBfX2NtYXRoX2FicyhfVHAgX194KQogICAgewog
ICAgICByZXR1cm4gX194IDwgX1RwKCkgPyAtX194IDogX194OwogICAgfQoKCiAgaW5saW5lIGZs
b2F0CiAgYWJzKGZsb2F0IF9feCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNmKF9feCk7IH0KIyA5
NSAiL2hvbWVzL2toYW4vbG9jYWwvZ2NjLTMuMS9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbWF0
aC5oIiAzCiAgaW5saW5lIGZsb2F0CiAgYWNvcyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YWNvc2Yo
X194KTsgfQoKCgoKCgogIGlubGluZSBmbG9hdAogIGFzaW4oZmxvYXQgX194KSB7IHJldHVybiA6
OmFzaW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgZmxvYXQKICBhdGFuKGZsb2F0IF9feCkgeyBy
ZXR1cm4gOjphdGFuZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGZsb2F0CiAgYXRhbjIoZmxvYXQg
X195LCBmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YXRhbjJmKF9feSwgX194KTsgfQoKCgoKCgoKICBp
bmxpbmUgZmxvYXQKICBjZWlsKGZsb2F0IF9feCkgeyByZXR1cm4gOjpjZWlsZihfX3gpOyB9CiMg
MTM5ICIvaG9tZXMva2hhbi9sb2NhbC9nY2MtMy4xL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nt
YXRoLmgiIDMKICBpbmxpbmUgZmxvYXQKICBjb3MoZmxvYXQgX194KSB7IHJldHVybiA6OmNvc2Yo
X194KTsgfQoKCgoKCgogIGlubGluZSBmbG9hdAogIGNvc2goZmxvYXQgX194KSB7IHJldHVybiA6
OmNvc2hmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgZmxvYXQKICBleHAoZmxvYXQgX194KSB7IHJl
dHVybiA6OmV4cGYoX194KTsgfQoKCgoKCgogIGlubGluZSBmbG9hdAogIGZhYnMoZmxvYXQgX194
KSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YoX194KTsgfQojIDE3NCAiL2hvbWVzL2toYW4vbG9j
YWwvZ2NjLTMuMS9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbWF0aC5oIiAzCiAgaW5saW5lIGZs
b2F0CiAgZmxvb3IoZmxvYXQgX194KSB7IHJldHVybiA6OmZsb29yZihfX3gpOyB9CgoKCgoKCiAg
aW5saW5lIGZsb2F0CiAgZm1vZChmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZXR1cm4gOjpmbW9k
ZihfX3gsIF9feSk7IH0KCgoKCgoKCiAgaW5saW5lIGZsb2F0CiAgZnJleHAoZmxvYXQgX194LCBp
bnQqIF9fZXhwKSB7IHJldHVybiA6OmZyZXhwZihfX3gsIF9fZXhwKTsgfQoKCgoKCgogIGlubGlu
ZSBmbG9hdAogIGxkZXhwKGZsb2F0IF9feCwgaW50IF9fZXhwKSB7IHJldHVybiA6OmxkZXhwZihf
X3gsIF9fZXhwKTsgfQoKCgoKCgoKICBpbmxpbmUgZmxvYXQKICBsb2coZmxvYXQgX194KSB7IHJl
dHVybiA6OmxvZ2YoX194KTsgfQoKCgoKCgogIGlubGluZSBmbG9hdAogIGxvZzEwKGZsb2F0IF9f
eCkgeyByZXR1cm4gOjpsb2cxMGYoX194KTsgfQoKCgoKCgogIGlubGluZSBmbG9hdAogIG1vZGYo
ZmxvYXQgX194LCBmbG9hdCogX19pcHRyKSB7IHJldHVybiA6Om1vZGZmKF9feCwgX19pcHRyKTsg
fQojIDIzNyAiL2hvbWVzL2toYW4vbG9jYWwvZ2NjLTMuMS9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9jbWF0aC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcAogICAg
X19wb3dfaGVscGVyKF9UcCBfX3gsIGludCBfX24pCiAgICB7CiAgICAgIHJldHVybiBfX24gPCAw
CiAgICAgICAgPyBfVHAoMSkvX19jbWF0aF9wb3dlcihfX3gsIC1fX24pCiAgICAgICAgOiBfX2Nt
YXRoX3Bvd2VyKF9feCwgX19uKTsKICAgIH0KCgogIGlubGluZSBmbG9hdAogIHBvdyhmbG9hdCBf
X3gsIGZsb2F0IF9feSkgeyByZXR1cm4gOjpwb3dmKF9feCwgX195KTsgfQoKCgoKCgogIGlubGlu
ZSBmbG9hdAogIHBvdyhmbG9hdCBfX3gsIGludCBfX24pCiAgewogICAgcmV0dXJuIF9fcG93X2hl
bHBlcihfX3gsIF9fbik7CiAgfQoKCgoKCiAgaW5saW5lIGZsb2F0CiAgc2luKGZsb2F0IF9feCkg
eyByZXR1cm4gOjpzaW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgZmxvYXQKICBzaW5oKGZsb2F0
IF9feCkgeyByZXR1cm4gOjpzaW5oZihfX3gpOyB9CiMgMjg0ICIvaG9tZXMva2hhbi9sb2NhbC9n
Y2MtMy4xL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NtYXRoLmgiIDMKICBpbmxpbmUgZmxvYXQK
ICBzcXJ0KGZsb2F0IF9feCkgeyByZXR1cm4gOjpzcXJ0ZihfX3gpOyB9CgoKCgoKCiAgaW5saW5l
IGZsb2F0CiAgdGFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjp0YW5mKF9feCk7IH0KCgoKCgoKICBp
bmxpbmUgZmxvYXQKICB0YW5oKGZsb2F0IF9feCkgeyByZXR1cm4gOjp0YW5oZihfX3gpOyB9CgoK
CgoKCiAgZXh0ZXJuICJDIiBkb3VibGUgYWNvcyhkb3VibGUgX194KTsKCiAgZXh0ZXJuICJDIiBk
b3VibGUgYXNpbihkb3VibGUgX194KTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgYXRhbihkb3VibGUg
X194KTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgYXRhbjIoZG91YmxlIF9feSwgZG91YmxlIF9feCk7
CgogIGV4dGVybiAiQyIgZG91YmxlIGNlaWwoZG91YmxlIF9feCk7CgoKCgoKICBleHRlcm4gIkMi
IGRvdWJsZSBjb3MoZG91YmxlIF9feCk7CgoKICBleHRlcm4gIkMiIGRvdWJsZSBjb3NoKGRvdWJs
ZSBfX3gpOwoKICBleHRlcm4gIkMiIGRvdWJsZSBleHAoZG91YmxlIF9feCk7CgoKICBpbmxpbmUg
ZG91YmxlCiAgZmFicyhkb3VibGUgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFicyhfX3gpOyB9
CgoKCgoKICBpbmxpbmUgZG91YmxlCiAgYWJzKGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9fYnVpbHRp
bl9mYWJzKF9feCk7IH0KCgoKCgogIGV4dGVybiAiQyIgZG91YmxlIGZsb29yKGRvdWJsZSBfX3gp
OwoKICBleHRlcm4gIkMiIGRvdWJsZSBmbW9kKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwoKICBl
eHRlcm4gIkMiIGRvdWJsZSBmcmV4cChkb3VibGUgX194LCBpbnQqIF9fZXhwKTsKCiAgZXh0ZXJu
ICJDIiBkb3VibGUgbGRleHAoZG91YmxlIF9feCwgaW50IF9fZXhwKTsKCiAgZXh0ZXJuICJDIiBk
b3VibGUgbG9nKGRvdWJsZSBfX3gpOwoKICBleHRlcm4gIkMiIGRvdWJsZSBsb2cxMChkb3VibGUg
X194KTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgbW9kZihkb3VibGUgX194LCBkb3VibGUqIF9faXB0
cik7CgogIGV4dGVybiAiQyIgZG91YmxlIHBvdyhkb3VibGUgX194LCBkb3VibGUgX195KTsKCiAg
aW5saW5lIGRvdWJsZQogIHBvdyhkb3VibGUgX194LCBpbnQgX19pKQogIHsKICAgIHJldHVybiBf
X3Bvd19oZWxwZXIoX194LCBfX2kpOwogIH0KCgoKCgogIGV4dGVybiAiQyIgZG91YmxlIHNpbihk
b3VibGUgX194KTsKCgogIGV4dGVybiAiQyIgZG91YmxlIHNpbmgoZG91YmxlIF9feCk7CgoKCgoK
ICBleHRlcm4gIkMiIGRvdWJsZSBzcXJ0KGRvdWJsZSBfX3gpOwoKCiAgZXh0ZXJuICJDIiBkb3Vi
bGUgdGFuKGRvdWJsZSBfX3gpOwoKICBleHRlcm4gIkMiIGRvdWJsZSB0YW5oKGRvdWJsZSBfX3gp
OwoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGFicyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu
IF9fYnVpbHRpbl9mYWJzbChfX3gpOyB9CiMgMzk5ICIvaG9tZXMva2hhbi9sb2NhbC9nY2MtMy4x
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NtYXRoLmgiIDMKICBpbmxpbmUgbG9uZyBkb3VibGUK
ICBhY29zKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphY29zbChfX3gpOyB9CgoKCgoKCiAg
aW5saW5lIGxvbmcgZG91YmxlCiAgYXNpbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXNp
bmwoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGF0YW4obG9uZyBkb3VibGUg
X194KSB7IHJldHVybiA6OmF0YW5sKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUK
ICBhdGFuMihsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphdGFu
MmwoX195LCBfX3gpOyB9CgoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGNlaWwobG9uZyBk
b3VibGUgX194KSB7IHJldHVybiA6OmNlaWxsKF9feCk7IH0KIyA0NDMgIi9ob21lcy9raGFuL2xv
Y2FsL2djYy0zLjEvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY21hdGguaCIgMwogIGlubGluZSBs
b25nIGRvdWJsZQogIGNvcyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Y29zbChfX3gpOyB9
CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29zaChsb25nIGRvdWJsZSBfX3gpIHsgcmV0
dXJuIDo6Y29zaGwoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGV4cChsb25n
IGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6ZXhwbChfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcg
ZG91YmxlCiAgZmFicyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbChf
X3gpOyB9CiMgNDc4ICIvaG9tZXMva2hhbi9sb2NhbC9nY2MtMy4xL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2NtYXRoLmgiIDMKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmbG9vcihsb25nIGRvdWJs
ZSBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JsKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3Vi
bGUKICBmbW9kKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7IHJldHVybiA6OmZt
b2RsKF9feCwgX195KTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmcmV4cChsb25n
IGRvdWJsZSBfX3gsIGludCogX19leHApIHsgcmV0dXJuIDo6ZnJleHBsKF9feCwgX19leHApOyB9
CgoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGxkZXhwKGxvbmcgZG91YmxlIF9feCwgaW50
IF9fZXhwKSB7IHJldHVybiA6OmxkZXhwbChfX3gsIF9fZXhwKTsgfQoKCgoKCgoKICBpbmxpbmUg
bG9uZyBkb3VibGUKICBsb2cobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmxvZ2woX194KTsg
fQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGxvZzEwKGxvbmcgZG91YmxlIF9feCkgeyBy
ZXR1cm4gOjpsb2cxMGwoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIG1vZGYo
bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSogX19pcHRyKSB7IHJldHVybiA6Om1vZGZsKF9f
eCwgX19pcHRyKTsgfQojIDU0MyAiL2hvbWVzL2toYW4vbG9jYWwvZ2NjLTMuMS9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jbWF0aC5oIiAzCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgcG93KGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7IHJldHVybiA6OnBvd2woX194LCBfX3kpOyB9
CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgcG93KGxvbmcgZG91YmxlIF9feCwgaW50IF9f
bikKICB7CiAgICByZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19uKTsKICB9CgoKCgoKICBpbmxp
bmUgbG9uZyBkb3VibGUKICBzaW4obG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnNpbmwoX194
KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIHNpbmgobG9uZyBkb3VibGUgX194KSB7
IHJldHVybiA6OnNpbmhsKF9feCk7IH0KIyA1ODAgIi9ob21lcy9raGFuL2xvY2FsL2djYy0zLjEv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY21hdGguaCIgMwogIGlubGluZSBsb25nIGRvdWJsZQog
IHNxcnQobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnNxcnRsKF9feCk7IH0KCgoKCgoKICBp
bmxpbmUgbG9uZyBkb3VibGUKICB0YW4obG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnRhbmwo
X194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIHRhbmgobG9uZyBkb3VibGUgX194
KSB7IHJldHVybiA6OnRhbmhsKF9feCk7IH0KCgoKCn0KCgoKCgoKbmFtZXNwYWNlIGM5OQp7CiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfZnBjbGFzc2lmeShf
VHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNs
YXNzaWZ5ZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xh
c3NpZnkgKF9fZikgOiBfX2ZwY2xhc3NpZnlsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc2Zpbml0ZShfVHAgX19mKSB7IHJldHVybiAo
c2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19maW5pdGVmIChfX2YpIDogc2l6ZW9m
IChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZmluaXRlIChfX2YpIDogX19maW5pdGVsIChf
X2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9p
c2luZihfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8g
X19pc2luZmYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19pc2lu
ZiAoX19mKSA6IF9faXNpbmZsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICBpbnQKICAgIF9fY2FwdHVyZV9pc25hbihfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2Yp
ID09IHNpemVvZiAoZmxvYXQpID8gX19pc25hbmYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6
ZW9mIChkb3VibGUpID8gX19pc25hbiAoX19mKSA6IF9faXNuYW5sIChfX2YpKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc25vcm1hbChfVHAgX19m
KSB7IHJldHVybiAoKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lm
eWYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5
IChfX2YpIDogX19mcGNsYXNzaWZ5bCAoX19mKSkgPT0gRlBfTk9STUFMKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9zaWduYml0KF9UcCBfX2YpIHsg
cmV0dXJuIChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX3NpZ25iaXRmIChfX2Yp
IDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fc2lnbmJpdCAoX19mKSA6IF9f
c2lnbmJpdGwgKF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAg
X19jYXB0dXJlX2lzZ3JlYXRlcihfVHAgX19mMSwgX1RwIF9fZjIpIHsgcmV0dXJuICh7IHJlZ2lz
dGVyIGNoYXIgX19yZXN1bHQ7IF9fYXNtX18gKCJmdWNvbXBwOyBmbnN0c3c7IHRlc3RiICQweDQ1
LCAlJWFoOyBzZXR6ICUlYWwiIDogIj1hIiAoX19yZXN1bHQpIDogInUiIChfX2YyKSwgInQiIChf
X2YxKSA6ICJjYyIsICJzdCIsICJzdCgxKSIpOyBfX3Jlc3VsdDsgfSk7IH0KCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc2dyZWF0ZXJlcXVhbChfVHAgX19m
MSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiAoeyByZWdpc3RlciBjaGFyIF9fcmVzdWx0OyBfX2Fz
bV9fICgiZnVjb21wcDsgZm5zdHN3OyB0ZXN0YiAkMHgwNSwgJSVhaDsgc2V0eiAlJWFsIiA6ICI9
YSIgKF9fcmVzdWx0KSA6ICJ1IiAoX19mMiksICJ0IiAoX19mMSkgOiAiY2MiLCAic3QiLCAic3Qo
MSkiKTsgX19yZXN1bHQ7IH0pOyB9CgogdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAg
ICBfX2NhcHR1cmVfaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19mMikgeyByZXR1cm4gKHsgcmVnaXN0
ZXIgY2hhciBfX3Jlc3VsdDsgX19hc21fXyAoImZ1Y29tcHA7IGZuc3RzdzsgdGVzdGIgJDB4NDUs
ICUlYWg7IHNldHogJSVhbCIgOiAiPWEiIChfX3Jlc3VsdCkgOiAidSIgKF9fZjEpLCAidCIgKF9f
ZjIpIDogImNjIiwgInN0IiwgInN0KDEpIik7IF9fcmVzdWx0OyB9KTsgfQoKIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzbGVzc2VxdWFsKF9UcCBfX2YxLCBf
VHAgX19mMikKICAgIHsgcmV0dXJuICh7IHJlZ2lzdGVyIGNoYXIgX19yZXN1bHQ7IF9fYXNtX18g
KCJmdWNvbXBwOyBmbnN0c3c7IHRlc3RiICQweDA1LCAlJWFoOyBzZXR6ICUlYWwiIDogIj1hIiAo
X19yZXN1bHQpIDogInUiIChfX2YxKSwgInQiIChfX2YyKSA6ICJjYyIsICJzdCIsICJzdCgxKSIp
OyBfX3Jlc3VsdDsgfSk7IH0KCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9f
Y2FwdHVyZV9pc2xlc3NncmVhdGVyKF9UcCBfX2YxLCBfVHAgX19mMikKICAgIHsgcmV0dXJuICh7
IHJlZ2lzdGVyIGNoYXIgX19yZXN1bHQ7IF9fYXNtX18gKCJmdWNvbXBwOyBmbnN0c3c7IHRlc3Ri
ICQweDQ0LCAlJWFoOyBzZXR6ICUlYWwiIDogIj1hIiAoX19yZXN1bHQpIDogInUiIChfX2YyKSwg
InQiIChfX2YxKSA6ICJjYyIsICJzdCIsICJzdCgxKSIpOyBfX3Jlc3VsdDsgfSk7IH0KCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc3Vub3JkZXJlZChfVHAg
X19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiAoeyByZWdpc3RlciBjaGFyIF9fcmVzdWx0OyBf
X2FzbV9fICgiZnVjb21wcDsgZm5zdHN3OyBzYWhmOyBzZXRwICUlYWwiIDogIj1hIiAoX19yZXN1
bHQpIDogInUiIChfX2YyKSwgInQiIChfX2YxKSA6ICJjYyIsICJzdCIsICJzdCgxKSIpOyBfX3Jl
c3VsdDsgfSk7IH0KfQojIDY3OSAiL2hvbWVzL2toYW4vbG9jYWwvZ2NjLTMuMS9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jbWF0aC5oIiAzCm5hbWVzcGFjZSBjOTkKewogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICAgIGludAogICAgZnBjbGFzc2lmeShfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1
cmVfZnBjbGFzc2lmeShfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAog
ICAgaXNmaW5pdGUoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzZmluaXRlKF9fZik7IH