public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/8564: internal compiler error in find_function_data, at function.c:329 with  g++ 3.2
@ 2002-11-20 12:42 reichelt
  0 siblings, 0 replies; 3+ messages in thread
From: reichelt @ 2002-11-20 12:42 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, nobody, ron, vaniwaar

Synopsis: internal compiler error in find_function_data, at function.c:329 with  g++ 3.2

State-Changed-From-To: open->analyzed
State-Changed-By: reichelt
State-Changed-When: Thu Nov 14 01:59:16 2002
State-Changed-Why:
    Confirmed.
    
    The bug can be demonstrated with the following code snippet:
    
    ----------------------------snip here--------------------------
    class A { static char* p; };
    
    int i = 1;
    char* A::p = new char[i];
    
    class B { B(); };
    
    B::B() {}
    ----------------------------snip here--------------------------
    
    This crashes gcc 3.0.x, 3.1 - 3.2.1, and mainline (just compile with
    g++ -c) - with gcc 2.95.x, however, the code compiles fine.
    So this is a regression from 2.95.x.
    
    A workaround is to write "new char[1]" instead of "new char[i]"
    (i.e. replace line 29675 by
      char* SpParmSetDataItem::ret = new char[30];
    in the file jj.C).

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=8564


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

* Re: c++/8564: internal compiler error in find_function_data, at function.c:329 with  g++ 3.2
@ 2002-11-20 13:56 Volker Reichelt
  0 siblings, 0 replies; 3+ messages in thread
From: Volker Reichelt @ 2002-11-20 13:56 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/8564; it has been noted by GNATS.

From: Volker Reichelt <reichelt@igpm.rwth-aachen.de>
To: gcc-gnats@gcc.gnu.org, vaniwaar@ca.metsci.com, ron@vaniwaarden.org,
        gcc-bugs@gcc.gnu.org, nobody@gcc.gnu.org
Cc:  
Subject: Re: c++/8564: internal compiler error in find_function_data, at function.c:329 with  g++ 3.2
Date: Thu, 14 Nov 2002 12:21:58 +0100

 Hi,
 
 here's an even shorter example:
 
 ----------------------------snip here--------------------------
 struct A { static char* p; };
 
 int i = 1;
 char* A::p = new char[i];
 
 void foo() {}
 ----------------------------snip here--------------------------
 
 BTW, the same bug was reported in PR 7473.
 
 Greetings,
 Volker
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=7473
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=8564
 
 


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

* c++/8564: internal compiler error in find_function_data, at function.c:329 with  g++ 3.2
@ 2002-11-20  1:26 ron
  0 siblings, 0 replies; 3+ messages in thread
From: ron @ 2002-11-20  1:26 UTC (permalink / raw)
  To: gcc-gnats; +Cc: vaniwaar


>Number:         8564
>Category:       c++
>Synopsis:       internal compiler error in find_function_data, at function.c:329 with  g++ 3.2
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Nov 13 11:56:00 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     ron@vaniwaarden.org
>Release:        g++-3.2 (GCC) 3.2
>Organization:
>Environment:
RH Linux 7.3
>Description:
g++ 3.2 crashes on the attached file

[vaniwaar@vaniwaar-w2k ~]$ g++-3.2 -c jj.C
jj.C: In function `void __static_initialization_and_destruction_0(int, int)':
jj.C:29675: Internal compiler error in find_function_data, at function.c:329
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
>How-To-Repeat:
Simply compile the attached file
>Fix:
Please!  :-)
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="jj.C"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="jj.C"

CgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgp0eXBlZGVmIGludCBib29sX3Q7CnR5cGVk
ZWYgaW50IGVudW1fdDsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBycGNwcm9nX3Q7CnR5cGVkZWYg
dW5zaWduZWQgbG9uZyBycGN2ZXJzX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBycGNwcm9jX3Q7
CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBycGNwcm90X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBy
cGNwb3J0X3Q7CgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90
OwoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgoKCgoKdW5pb24gd2FpdAogIHsKICAgIGludCB3
X3N0YXR1czsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfdGVy
bXNpZzo3OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfY29yZWR1bXA6MTsKICAgICAgICB1bnNp
Z25lZCBpbnQgX193X3JldGNvZGU6ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCgog
ICAgICB9IF9fd2FpdF90ZXJtaW5hdGVkOwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAgdW5z
aWduZWQgaW50IF9fd19zdG9wdmFsOjg7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wc2ln
Ojg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgogICAgICB9IF9fd2FpdF9zdG9wcGVk
OwogIH07CgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAg
fSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9u
ZyBpbnQgcmVtOwogIH0gbGRpdl90OwoKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzdHJ1Y3QK
ICB7CiAgICBsb25nIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGxvbmcgaW50IHJlbTsKICB9IGxs
ZGl2X3Q7CgpleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIHRocm93
ICgpOwoKCgpleHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBj
aGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJu
IGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBh
dG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc3RydG9mIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0cikgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc3RydG9sZCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IHN0cnRv
bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpl
eHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQg
bG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKCgoKX19leHRlbnNpb25fXwpl
eHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25l
ZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCnR5cGVkZWYgc3RydWN0
IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzEzXTsK
CgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAqX19j
dHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwp9ICpfX2xvY2FsZV90
OwoKCgoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxl
X3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9s
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRo
cm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfbCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7Cgpf
X2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfbCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90
IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9sIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoK
ZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19s
b2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2wg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3Vi
bGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVy
bmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAg
ICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGlu
dCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19n
cm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50
ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBp
bnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcg
aW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
X19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVu
c2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAg
ICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpsNjRhIChsb25nIGludCBfX24pIHRocm93ICgpOwoK
CmV4dGVybiBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCnR5cGVkZWYgdW5z
aWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5
cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9u
ZzsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFk
X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwoKdHlwZWRl
ZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhfdDsK
dHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9y
dCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQgbG9u
ZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25n
IGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0eXBl
ZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVkZWYg
X191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9fdV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191X2lu
dCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGludCBf
X29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90Owp0
eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYgX191X2xvbmcgX19ybGltX3Q7CnR5cGVkZWYg
X191X3F1YWRfdCBfX3JsaW02NF90Owp0eXBlZGVmIF9fdV9pbnQgX19pZF90OwoKdHlwZWRlZiBz
dHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVmIGludCBf
X2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGlt
ZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQg
X19zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcg
aW50IF9fY2xvY2tfdDsKCgp0eXBlZGVmIGludCBfX2Nsb2NraWRfdDsKCgp0eXBlZGVmIGludCBf
X3RpbWVyX3Q7CgoKCgoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBz
aG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtzaXplX3Q7CgoK
Cgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2
NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3Qg
X19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYg
X191X3F1YWRfdCBfX2ZzZmlsY250NjRfdDsKCgp0eXBlZGVmIF9fdV9xdWFkX3QgX19pbm82NF90
OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90OwoKCnR5cGVkZWYgbG9uZyBpbnQgX190X3Nj
YWxhcl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRl
ZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3NvY2tsZW5fdDsKCgoK
CgoKCgpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5Owog
IH07CgoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAg
aW50IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1
Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MK
ewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3Nj
aGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2Nv
cGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAq
X19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0
eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9w
dGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0
cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5z
aWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21f
cmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAg
aW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhy
ZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRo
cmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBl
ZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2Nr
IF9fcndfbG9jazsKICBpbnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3Jp
dGVyOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2Ny
IF9fcndfd3JpdGVfd2FpdGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7
Cn0gcHRocmVhZF9yd2xvY2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5k
OwogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHZv
bGF0aWxlIGludCBwdGhyZWFkX3NwaW5sb2NrX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIHN0cnVj
dCBfcHRocmVhZF9mYXN0bG9jayBfX2JhX2xvY2s7CiAgaW50IF9fYmFfcmVxdWlyZWQ7CiAgaW50
IF9fYmFfcHJlc2VudDsKICBfcHRocmVhZF9kZXNjciBfX2JhX3dhaXRpbmc7Cn0gcHRocmVhZF9i
YXJyaWVyX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9i
YXJyaWVyYXR0cl90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90OwoK
CgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0
eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9f
cXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNp
ZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5v
X3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYgX19pbm82NF90IGlubzY0X3Q7CgoKCgp0eXBlZGVmIF9f
ZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9k
ZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9f
dWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoKCgoKCgp0eXBlZGVmIF9f
b2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBf
X2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CgoKCgoKdHlwZWRlZiBf
X2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKCgp0eXBlZGVm
IF9fa2V5X3Qga2V5X3Q7CgoKCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7Cgp0eXBlZGVmIF9f
dGltZV90IHRpbWVfdDsKCnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwoKdHlwZWRlZiBf
X3RpbWVyX3QgdGltZXJfdDsKCgoKCnR5cGVkZWYgX191c2Vjb25kc190IHVzZWNvbmRzX3Q7CgoK
CnR5cGVkZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsKCgoKCgoKCgoKCnR5cGVkZWYgdW5z
aWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKF9fRElfXykpKTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhf
dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgdV9pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVm
IHVuc2lnbmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18p
KSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl
X18gKF9fRElfXykpKTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9f
bW9kZV9fIChfX3dvcmRfXykpKTsKCgoKCgoKCgoKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7
CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0
IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CgoK
Cgp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CgoKCgoKCgpzdHJ1Y3QgdGltZXNwZWMKICB7
CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CgoKCgpzdHJ1
Y3QgdGltZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3VzZWNvbmRzX3QgdHZf
dXNlYzsKICB9OwoKCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoKCgoKCgoKdHlwZWRlZiBz
dHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChf
X2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2ZkX21hc2sgZmRf
bWFzazsKCmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywg
ZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAq
X19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3Ry
aWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVz
dHJpY3QgX190aW1lb3V0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHBzZWxlY3QgKGludCBf
X25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICAg
ZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0
ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVj
dCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgY29u
c3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX3NpZ21hc2spIHRocm93ICgpOwoKCn0KCgoKCgoK
CgoKdHlwZWRlZiBfX2Jsa3NpemVfdCBibGtzaXplX3Q7CgoKCgoKCnR5cGVkZWYgX19ibGtjbnRf
dCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRl
ZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKCnR5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2NudDY0
X3Q7CnR5cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNmaWxj
bnQ2NF90IGZzZmlsY250NjRfdDsKCgp9CgoKCgoKCgpleHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2
b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVk
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19z
ZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19z
dGF0ZWxlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0
ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQzMl90
ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0YXRlOwogICAgaW50IHJh
bmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3NlcDsKICAgIGludDMyX3Qg
KmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAq
X19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqX19yZXN0cmlj
dCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50
IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50
IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Rh
dGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVi
dWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0
IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHJhbmQgKHZvaWQpIHRocm93ICgpOwoK
ZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIHRocm93ICgpOwoKCgoKCgoKZXh0
ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4
ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcg
aW50IGxyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAodW5z
aWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBt
cmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVk
IHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZDQ4IChs
b25nIGludCBfX3NlZWR2YWwpIHRocm93ICgpOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpz
ZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pIHRocm93ICgpOwpleHRlcm4g
dm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgdGhyb3cgKCk7CgoK
CgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3hbM107
CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19vbGRfeFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGlu
dCBfX2M7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19pbml0OwogICAgdW5zaWduZWQgbG9uZyBs
b25nIGludCBfX2E7CiAgfTsKCgpleHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhf
ZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAq
X19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNp
Z25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBk
cmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBk
b3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbHJhbmQ0
OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAg
ICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRl
cm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAog
ICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3Ry
aWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3Qg
X19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQg
aW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRh
ICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9f
cmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25n
IGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKQogICAgIHRocm93
ICgpOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlsz
XSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFt
WzddLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIp
IHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNpemVf
dCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X21hbGxvY19fKSk7CgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXpl
X3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJu
IHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjZnJlZSAo
dm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgoKCmV4dGVybiB2
b2lkICphbGxvY2EgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCn0KCgoKCgpleHRlcm4g
dm9pZCAqdmFsbG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19t
YWxsb2NfXykpOwoKCgoKZXh0ZXJuIGludCBwb3NpeF9tZW1hbGlnbiAodm9pZCAqKl9fbWVtcHRy
LCBzaXplX3QgX19hbGlnbm1lbnQsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQg
KHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IG9uX2V4aXQg
KHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcp
CiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfRXhp
dCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7
CgoKCgpleHRlcm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7
CgoKCmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBpbnQgc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBj
aGFyICpfX3ZhbHVlLCBpbnQgX19yZXBsYWNlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
dW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGlu
dCBjbGVhcmVudiAodm9pZCkgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpf
X3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190
ZW1wbGF0ZSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0
ZSkgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqbWtkdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2FsaXplX2ZpbGVfbmFtZSAoX19jb25z
dCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9f
cmVzdHJpY3QgX19yZXNvbHZlZCkgdGhyb3cgKCk7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21w
YXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBfX2Nv
bXBhcl9mbl90IGNvbXBhcmlzb25fZm5fdDsKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19j
b25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBh
cik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBz
aXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7
CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGlu
dCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0
ZXJuIGxkaXZfdCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0
ZXJuIGxsZGl2X3QgbGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUg
X192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAg
ICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo
YXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBf
X2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cg
KCk7CgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwg
Y2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJs
ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry
aWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hh
ciAqcWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAg
ICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikg
dGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9f
bmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91
YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAg
ICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9f
YnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBf
X2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAq
X19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cg
KCk7CgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp
dCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jl
c3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm
LCBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91Ymxl
IF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp
Y3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBj
aGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIHRocm93
ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdj
cywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywg
c2l6ZV90IF9fbikgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jl
c3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBp
bnQgcnBtYXRjaCAoX19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAogICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIHRocm93ICgpOwoKCgoKCmV4dGVy
biB2b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7CgoKCgoKCgpleHRl
cm4gaW50IHBvc2l4X29wZW5wdCAoaW50IF9fb2ZsYWcpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IGludCBncmFudHB0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5sb2NrcHQg
KGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpwdHNuYW1lIChpbnQgX19mZCkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19i
dWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRwdCAodm9pZCkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1td
LCBpbnQgX19uZWxlbSkgdGhyb3cgKCk7CgoKCgoKfQoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7Cgpz
dHJ1Y3QgdGltZXpvbmUKICB7CiAgICBpbnQgdHpfbWludXRlc3dlc3Q7CiAgICBpbnQgdHpfZHN0
dGltZTsKICB9OwoKdHlwZWRlZiBzdHJ1Y3QgdGltZXpvbmUgKl9fcmVzdHJpY3QgX190aW1lem9u
ZV9wdHJfdDsKCmV4dGVybiBpbnQgZ2V0dGltZW9mZGF5IChzdHJ1Y3QgdGltZXZhbCAqX19yZXN0
cmljdCBfX3R2LAogICAgICAgICAgICAgICAgICAgICAgICAgX190aW1lem9uZV9wdHJfdCBfX3R6
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0dGltZW9mZGF5IChfX2NvbnN0IHN0cnVjdCB0
aW1ldmFsICpfX3R2LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGlt
ZXpvbmUgKl9fdHopIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgYWRqdGltZSAoX19jb25zdCBz
dHJ1Y3QgdGltZXZhbCAqX19kZWx0YSwKICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZh
bCAqX19vbGRkZWx0YSkgdGhyb3cgKCk7CgoKCgplbnVtIF9faXRpbWVyX3doaWNoCiAgewoKICAg
IElUSU1FUl9SRUFMID0gMCwKCgogICAgSVRJTUVSX1ZJUlRVQUwgPSAxLAoKCgogICAgSVRJTUVS
X1BST0YgPSAyCgogIH07CgoKCnN0cnVjdCBpdGltZXJ2YWwKICB7CgogICAgc3RydWN0IHRpbWV2
YWwgaXRfaW50ZXJ2YWw7CgogICAgc3RydWN0IHRpbWV2YWwgaXRfdmFsdWU7CiAgfTsKCgoKCgoK
dHlwZWRlZiBpbnQgX19pdGltZXJfd2hpY2hfdDsKCgoKCmV4dGVybiBpbnQgZ2V0aXRpbWVyIChf
X2l0aW1lcl93aGljaF90IF9fd2hpY2gsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRp
bWVydmFsICpfX3ZhbHVlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0aXRpbWVyIChfX2l0
aW1lcl93aGljaF90IF9fd2hpY2gsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVj
dCBpdGltZXJ2YWwgKl9fcmVzdHJpY3QgX19uZXcsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgaXRpbWVydmFsICpfX3Jlc3RyaWN0IF9fb2xkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1
dGltZXMgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX2NvbnN0IHN0cnVjdCB0aW1ldmFsIF9fdHZw
WzJdKQogICAgIHRocm93ICgpOwoKfQoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhf
dDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdWludDE2X3Q7Cgp0eXBlZGVmIHVuc2lnbmVk
IGludCB1aW50MzJfdDsKCgoKCgpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBs
b25nIGludCB1aW50NjRfdDsKCgoKCgoKdHlwZWRlZiBzaWduZWQgY2hhciBpbnRfbGVhc3Q4X3Q7
CnR5cGVkZWYgc2hvcnQgaW50IGludF9sZWFzdDE2X3Q7CnR5cGVkZWYgaW50IGludF9sZWFzdDMy
X3Q7CgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiBsb25nIGxvbmcgaW50IGludF9sZWFzdDY0X3Q7
CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50X2xlYXN0OF90Owp0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IGludCB1aW50X2xlYXN0MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9sZWFz
dDMyX3Q7CgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVp
bnRfbGVhc3Q2NF90OwoKCgoKCgp0eXBlZGVmIHNpZ25lZCBjaGFyIGludF9mYXN0OF90OwoKCgoK
CnR5cGVkZWYgaW50IGludF9mYXN0MTZfdDsKdHlwZWRlZiBpbnQgaW50X2Zhc3QzMl90OwpfX2V4
dGVuc2lvbl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRfZmFzdDY0X3Q7CgoKCnR5cGVkZWYg
dW5zaWduZWQgY2hhciB1aW50X2Zhc3Q4X3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWlu
dF9mYXN0MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9mYXN0MzJfdDsKX19leHRlbnNp
b25fXwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludF9mYXN0NjRfdDsKCnR5cGVk
ZWYgaW50IGludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRwdHJfdDsKCl9fZXh0
ZW5zaW9uX18KdHlwZWRlZiBsb25nIGxvbmcgaW50IGludG1heF90OwpfX2V4dGVuc2lvbl9fCnR5
cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50bWF4X3Q7CgoKCgpleHRlcm4gIkMiIHsK
CgplbnVtCiAgewogICAgSVBQUk9UT19JUCA9IDAsCgogICAgSVBQUk9UT19IT1BPUFRTID0gMCwK
CiAgICBJUFBST1RPX0lDTVAgPSAxLAoKICAgIElQUFJPVE9fSUdNUCA9IDIsCgogICAgSVBQUk9U
T19JUElQID0gNCwKCiAgICBJUFBST1RPX1RDUCA9IDYsCgogICAgSVBQUk9UT19FR1AgPSA4LAoK
ICAgIElQUFJPVE9fUFVQID0gMTIsCgogICAgSVBQUk9UT19VRFAgPSAxNywKCiAgICBJUFBST1RP
X0lEUCA9IDIyLAoKICAgIElQUFJPVE9fVFAgPSAyOSwKCiAgICBJUFBST1RPX0lQVjYgPSA0MSwK
CiAgICBJUFBST1RPX1JPVVRJTkcgPSA0MywKCiAgICBJUFBST1RPX0ZSQUdNRU5UID0gNDQsCgog
ICAgSVBQUk9UT19SU1ZQID0gNDYsCgogICAgSVBQUk9UT19HUkUgPSA0NywKCiAgICBJUFBST1RP
X0VTUCA9IDUwLAoKICAgIElQUFJPVE9fQUggPSA1MSwKCiAgICBJUFBST1RPX0lDTVBWNiA9IDU4
LAoKICAgIElQUFJPVE9fTk9ORSA9IDU5LAoKICAgIElQUFJPVE9fRFNUT1BUUyA9IDYwLAoKICAg
IElQUFJPVE9fTVRQID0gOTIsCgogICAgSVBQUk9UT19FTkNBUCA9IDk4LAoKICAgIElQUFJPVE9f
UElNID0gMTAzLAoKICAgIElQUFJPVE9fQ09NUCA9IDEwOCwKCiAgICBJUFBST1RPX1JBVyA9IDI1
NSwKCiAgICBJUFBST1RPX01BWAogIH07CgoKCnR5cGVkZWYgdWludDE2X3QgaW5fcG9ydF90OwoK
CmVudW0KICB7CiAgICBJUFBPUlRfRUNITyA9IDcsCiAgICBJUFBPUlRfRElTQ0FSRCA9IDksCiAg
ICBJUFBPUlRfU1lTVEFUID0gMTEsCiAgICBJUFBPUlRfREFZVElNRSA9IDEzLAogICAgSVBQT1JU
X05FVFNUQVQgPSAxNSwKICAgIElQUE9SVF9GVFAgPSAyMSwKICAgIElQUE9SVF9URUxORVQgPSAy
MywKICAgIElQUE9SVF9TTVRQID0gMjUsCiAgICBJUFBPUlRfVElNRVNFUlZFUiA9IDM3LAogICAg
SVBQT1JUX05BTUVTRVJWRVIgPSA0MiwKICAgIElQUE9SVF9XSE9JUyA9IDQzLAogICAgSVBQT1JU
X01UUCA9IDU3LAoKICAgIElQUE9SVF9URlRQID0gNjksCiAgICBJUFBPUlRfUkpFID0gNzcsCiAg
ICBJUFBPUlRfRklOR0VSID0gNzksCiAgICBJUFBPUlRfVFRZTElOSyA9IDg3LAogICAgSVBQT1JU
X1NVUERVUCA9IDk1LAoKCiAgICBJUFBPUlRfRVhFQ1NFUlZFUiA9IDUxMiwKICAgIElQUE9SVF9M
T0dJTlNFUlZFUiA9IDUxMywKICAgIElQUE9SVF9DTURTRVJWRVIgPSA1MTQsCiAgICBJUFBPUlRf
RUZTU0VSVkVSID0gNTIwLAoKCiAgICBJUFBPUlRfQklGRlVEUCA9IDUxMiwKICAgIElQUE9SVF9X
SE9TRVJWRVIgPSA1MTMsCiAgICBJUFBPUlRfUk9VVEVTRVJWRVIgPSA1MjAsCgoKICAgIElQUE9S
VF9SRVNFUlZFRCA9IDEwMjQsCgoKICAgIElQUE9SVF9VU0VSUkVTRVJWRUQgPSA1MDAwCiAgfTsK
CgoKdHlwZWRlZiB1aW50MzJfdCBpbl9hZGRyX3Q7CnN0cnVjdCBpbl9hZGRyCiAgewogICAgaW5f
YWRkcl90IHNfYWRkcjsKICB9OwoKc3RydWN0IGluNl9hZGRyCiAgewogICAgdW5pb24KICAgICAg
ewogICAgICAgIHVpbnQ4X3QgdTZfYWRkcjhbMTZdOwogICAgICAgIHVpbnQxNl90IHU2X2FkZHIx
Nls4XTsKICAgICAgICB1aW50MzJfdCB1Nl9hZGRyMzJbNF07CiAgICAgIH0gaW42X3U7CgoKCiAg
fTsKCmV4dGVybiBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgaW42YWRkcl9hbnk7CmV4dGVybiBjb25z
dCBzdHJ1Y3QgaW42X2FkZHIgaW42YWRkcl9sb29wYmFjazsKCgoKCgoKCgoKCgoKCgoKCgoKdHlw
ZWRlZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CgoKCgplbnVtIF9fc29ja2V0X3R5cGUKewogIFNP
Q0tfU1RSRUFNID0gMSwKCgogIFNPQ0tfREdSQU0gPSAyLAoKCiAgU09DS19SQVcgPSAzLAoKICBT
T0NLX1JETSA9IDQsCgogIFNPQ0tfU0VRUEFDS0VUID0gNSwKCgogIFNPQ0tfUEFDS0VUID0gMTAK
CgoKfTsKCgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgc2FfZmFtaWx5X3Q7CgoKCnN0cnVj
dCBzb2NrYWRkcgogIHsKICAgIHNhX2ZhbWlseV90IHNhX2ZhbWlseTsKICAgIGNoYXIgc2FfZGF0
YVsxNF07CiAgfTsKCnN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlCiAgewogICAgc2FfZmFtaWx5X3Qg
c3NfZmFtaWx5OwogICAgX191aW50MzJfdCBfX3NzX2FsaWduOwogICAgY2hhciBfX3NzX3BhZGRp
bmdbKDEyOCAtICgyICogc2l6ZW9mIChfX3VpbnQzMl90KSkpXTsKICB9OwoKCgplbnVtCiAgewog
ICAgTVNHX09PQiA9IDB4MDEsCgogICAgTVNHX1BFRUsgPSAweDAyLAoKICAgIE1TR19ET05UUk9V
VEUgPSAweDA0LAoKCgogICAgTVNHX1RSWUhBUkQgPSBNU0dfRE9OVFJPVVRFLAoKCiAgICBNU0df
Q1RSVU5DID0gMHgwOCwKCiAgICBNU0dfUFJPWFkgPSAweDEwLAoKICAgIE1TR19UUlVOQyA9IDB4
MjAsCgogICAgTVNHX0RPTlRXQUlUID0gMHg0MCwKCiAgICBNU0dfRU9SID0gMHg4MCwKCiAgICBN
U0dfV0FJVEFMTCA9IDB4MTAwLAoKICAgIE1TR19GSU4gPSAweDIwMCwKCiAgICBNU0dfU1lOID0g
MHg0MDAsCgogICAgTVNHX0NPTkZJUk0gPSAweDgwMCwKCiAgICBNU0dfUlNUID0gMHgxMDAwLAoK
ICAgIE1TR19FUlJRVUVVRSA9IDB4MjAwMCwKCiAgICBNU0dfTk9TSUdOQUwgPSAweDQwMDAsCgog
ICAgTVNHX01PUkUgPSAweDgwMDAKCiAgfTsKCgoKCnN0cnVjdCBtc2doZHIKICB7CiAgICB2b2lk
ICptc2dfbmFtZTsKICAgIHNvY2tsZW5fdCBtc2dfbmFtZWxlbjsKCiAgICBzdHJ1Y3QgaW92ZWMg
Km1zZ19pb3Y7CiAgICBpbnQgbXNnX2lvdmxlbjsKCiAgICB2b2lkICptc2dfY29udHJvbDsKICAg
IHNvY2tsZW5fdCBtc2dfY29udHJvbGxlbjsKCiAgICBpbnQgbXNnX2ZsYWdzOwogIH07CgoKc3Ry
dWN0IGNtc2doZHIKICB7CiAgICBzaXplX3QgY21zZ19sZW47CgogICAgaW50IGNtc2dfbGV2ZWw7
CiAgICBpbnQgY21zZ190eXBlOwogICAgX19leHRlbnNpb25fXyB1bnNpZ25lZCBjaGFyIF9fY21z
Z19kYXRhIFtdOwoKICB9OwoKZXh0ZXJuIHN0cnVjdCBjbXNnaGRyICpfX2Ntc2dfbnh0aGRyIChz
dHJ1Y3QgbXNnaGRyICpfX21oZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IGNtc2doZHIgKl9fY21zZykgdGhyb3cgKCk7CgplbnVtCiAgewogICAgU0NNX1JJ
R0hUUyA9IDB4MDEsCgoKICAgIFNDTV9DUkVERU5USUFMUyA9IDB4MDIsCgoKICAgIF9fU0NNX0NP
Tk5FQ1QgPSAweDAzCiAgfTsKCgoKc3RydWN0IHVjcmVkCnsKICBwaWRfdCBwaWQ7CiAgdWlkX3Qg
dWlkOwogIGdpZF90IGdpZDsKfTsKCgoKCgoKCgoKCgoKc3RydWN0IGxpbmdlcgogIHsKICAgIGlu
dCBsX29ub2ZmOwogICAgaW50IGxfbGluZ2VyOwogIH07CgoKCgpzdHJ1Y3Qgc29ja2FkZHJfaW4K
ICB7CiAgICBzYV9mYW1pbHlfdCBzaW5fZmFtaWx5OwogICAgaW5fcG9ydF90IHNpbl9wb3J0Owog
ICAgc3RydWN0IGluX2FkZHIgc2luX2FkZHI7CgoKICAgIHVuc2lnbmVkIGNoYXIgc2luX3plcm9b
c2l6ZW9mIChzdHJ1Y3Qgc29ja2FkZHIpIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNp
emVvZiAodW5zaWduZWQgc2hvcnQgaW50KSkgLQogICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplb2YgKGluX3BvcnRfdCkgLQogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKHN0
cnVjdCBpbl9hZGRyKV07CiAgfTsKCgpzdHJ1Y3Qgc29ja2FkZHJfaW42CiAgewogICAgc2FfZmFt
aWx5X3Qgc2luNl9mYW1pbHk7CiAgICBpbl9wb3J0X3Qgc2luNl9wb3J0OwogICAgdWludDMyX3Qg
c2luNl9mbG93aW5mbzsKICAgIHN0cnVjdCBpbjZfYWRkciBzaW42X2FkZHI7CiAgICB1aW50MzJf
dCBzaW42X3Njb3BlX2lkOwogIH07CgoKc3RydWN0IGlwdjZfbXJlcQogIHsKCiAgICBzdHJ1Y3Qg
aW42X2FkZHIgaXB2Nm1yX211bHRpYWRkcjsKCgogICAgdW5zaWduZWQgaW50IGlwdjZtcl9pbnRl
cmZhY2U7CiAgfTsKCgoKCnN0cnVjdCBpcF9vcHRzCiAgewogICAgc3RydWN0IGluX2FkZHIgaXBf
ZHN0OwogICAgY2hhciBpcF9vcHRzWzQwXTsKICB9OwoKCnN0cnVjdCBpcF9tcmVxCiAgewogICAg
c3RydWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9pbnRl
cmZhY2U7CiAgfTsKCgpzdHJ1Y3QgaXBfbXJlcW4KICB7CiAgICBzdHJ1Y3QgaW5fYWRkciBpbXJf
bXVsdGlhZGRyOwogICAgc3RydWN0IGluX2FkZHIgaW1yX2FkZHJlc3M7CiAgICBpbnQgaW1yX2lm
aW5kZXg7CiAgfTsKCgpzdHJ1Y3QgaW5fcGt0aW5mbwogIHsKICAgIGludCBpcGlfaWZpbmRleDsK
ICAgIHN0cnVjdCBpbl9hZGRyIGlwaV9zcGVjX2RzdDsKICAgIHN0cnVjdCBpbl9hZGRyIGlwaV9h
ZGRyOwogIH07CgoKZXh0ZXJuIHVpbnQzMl90IG50b2hsICh1aW50MzJfdCBfX25ldGxvbmcpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIHVpbnQxNl90IG50b2hz
ICh1aW50MTZfdCBfX25ldHNob3J0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKZXh0ZXJuIHVpbnQzMl90IGh0b25sICh1aW50MzJfdCBfX2hvc3Rsb25nKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIHVpbnQxNl90IGh0
b25zICh1aW50MTZfdCBfX2hvc3RzaG9ydCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKCgoKCgpleHRlcm4gaW50IGJpbmRyZXN2cG9ydCAoaW50IF9fc29ja2Zk
LCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKl9fc29ja19pbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBi
aW5kcmVzdnBvcnQ2IChpbnQgX19zb2NrZmQsIHN0cnVjdCBzb2NrYWRkcl9pbjYgKl9fc29ja19p
bikKICAgICB0aHJvdyAoKTsKCnN0cnVjdCBpbjZfcGt0aW5mbwogIHsKICAgIHN0cnVjdCBpbjZf
YWRkciBpcGk2X2FkZHI7CiAgICB1bnNpZ25lZCBpbnQgaXBpNl9pZmluZGV4OwogIH07Cgp9CgoK
CgoKCmV4dGVybiAiQyIgewoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwoKdHlw
ZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgX19GSUxFOwoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
d2ludF90OwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50OwogIHVuaW9uCiAg
ewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9f
bWJzdGF0ZV90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0
ZV90IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9f
cG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CgoKCgoKCgoKCgoKCgoK
CgoKZW51bQp7CiAgX19HQ09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9O
T0RCLAogIF9fR0NPTlZfTk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9G
VUxMX09VVFBVVCwKICBfX0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRF
X0lOUFVULAoKICBfX0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFM
X0VSUk9SCn07CgoKCmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05W
X0lHTk9SRV9FUlJPUlMgPSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0
IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3Qg
X19nY29udl90cmFuc19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0
IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwgX19jb25zdCB1bnNpZ25l
ZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBz
aXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkgKHN0
cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0
cnVjdCBfX2djb252X3N0ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3Qp
IChzdHJ1Y3QgX19nY29udl9zdGVwICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hh
ciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBl
ZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5z
aWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYgaW50
ICgqX19nY29udl90cmFuc19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFy
ICoqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsK
Cgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBj
aGFyICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoK
c3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNf
ZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBf
X2djb252X3RyYW5zX2VuZF9mY3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBz
dHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0
ZXAKewogIHN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9f
Y29uc3QgY2hhciAqX19tb2RuYW1lOwoKICBpbnQgX19jb3VudGVyOwoKICBjaGFyICpfX2Zyb21f
bmFtZTsKICBjaGFyICpfX3RvX25hbWU7CgogIF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZf
aW5pdF9mY3QgX19pbml0X2ZjdDsKICBfX2djb252X2VuZF9mY3QgX19lbmRfZmN0OwoKCgogIGlu
dCBfX21pbl9uZWVkZWRfZnJvbTsKICBpbnQgX19tYXhfbmVlZGVkX2Zyb207CiAgaW50IF9fbWlu
X25lZWRlZF90bzsKICBpbnQgX19tYXhfbmVlZGVkX3RvOwoKCiAgaW50IF9fc3RhdGVmdWw7Cgog
IHZvaWQgKl9fZGF0YTsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhCnsKICB1bnNpZ25l
ZCBjaGFyICpfX291dGJ1ZjsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZmVuZDsKCgoKICBpbnQg
X19mbGFnczsKCgoKICBpbnQgX19pbnZvY2F0aW9uX2NvdW50ZXI7CgoKCiAgaW50IF9faW50ZXJu
YWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19zdGF0ZXA7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsK
CgoKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX3RyYW5zOwp9OwoKCgp0eXBlZGVmIHN0
cnVjdCBfX2djb252X2luZm8KewogIHNpemVfdCBfX25zdGVwczsKICBzdHJ1Y3QgX19nY29udl9z
dGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9uX18gc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9f
ZGF0YSBbXTsKfSAqX19nY29udl90OwoKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZf
aW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAg
IHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2lj
b252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo
X19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMy
X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CgoKCgp0eXBlZGVmIF9fYnVp
bHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwoKCnN0cnVjdCBfSU9fanVtcF90OyBzdHJ1Y3Qg
X0lPX0ZJTEU7Cgp0eXBlZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtl
ciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7
CgoKCiAgaW50IF9wb3M7Cgp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0
X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRf
bm9jb252Cn07CgpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9J
T19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVhZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsK
ICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9J
T193cml0ZV9lbmQ7CiAgY2hhciogX0lPX2J1Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoK
ICBjaGFyICpfSU9fc2F2ZV9iYXNlOwogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpf
SU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9J
T19GSUxFICpfY2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90
IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBj
aGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3Qg
Kl9sb2NrOwoKICBfX29mZjY0X3QgX29mZnNldDsKCgoKCgogIHZvaWQgKl9fcGFkMTsKICB2b2lk
ICpfX3BhZDI7CgogIGludCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVvZiAoaW50
KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsK
CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVj
dCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9w
bHVzIF9JT18yXzFfc3RkZXJyXzsKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAodm9p
ZCAqX19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwoKCgoKCgoKdHlwZWRl
ZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqX19jb29raWUsIF9fY29uc3QgY2hhciAq
X19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pOwoKCgoK
CgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90ICpf
X3BvcywgaW50IF9fdyk7CgoKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9mbiAodm9pZCAqX19jb29r
aWUpOwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRfZnVuY3Rpb25fdDsKdHlw
ZWRlZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9f
c2Vla19mbiBjb29raWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fY2xvc2VfZm4gY29v
a2llX2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9faW9fcmVhZF9mbiAq
cmVhZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtfZm4gKnNlZWs7CiAgX19p
b19jbG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsKdHlwZWRlZiBf
SU9fY29va2llX2lvX2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlvbnNfdDsKCnN0cnVjdCBf
SU9fY29va2llX2ZpbGU7CgoKZXh0ZXJuIHZvaWQgX0lPX2Nvb2tpZV9pbml0IChzdHJ1Y3QgX0lP
X2Nvb2tpZV9maWxlICpfX2NmaWxlLCBpbnQgX19yZWFkX3dyaXRlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKl9fY29va2llLCBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9f
Zm5zKTsKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19GSUxF
ICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpl
eHRlcm4gaW50IF9fb3ZlcmZsb3cgKF9JT19GSUxFICosIGludCkgdGhyb3cgKCk7CmV4dGVybiB3
aW50X3QgX193dW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBf
X3d1ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193b3ZlcmZsb3cg
KF9JT19GSUxFICosIHdpbnRfdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19nZXRjIChfSU9f
RklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGludCBfX2MsIF9JT19G
SUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnAp
IHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAo
KTsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgp
OwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpl
eHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4g
aW50IF9JT19mdHJ5bG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwoKZXh0ZXJuIGludCBf
SU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmlj
dCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmlj
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmlj
dCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251
Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lPX0ZJTEUg
KiwgaW50LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lP
X0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9f
c2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgdGhyb3cgKCk7CmV4dGVy
biBfX29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSB0aHJv
dyAoKTsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJv
dyAoKTsKCn0KCgoKCgp0eXBlZGVmIF9fZ251Y192YV9saXN0IF9fbm90X3ZhX2xpc3RfXzsKCnR5
cGVkZWYgX0dfZnBvc190IGZwb3NfdDsKCgoKCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvczY0X3Q7
CgoKCgoKCmV4dGVybiBGSUxFICpzdGRpbjsKZXh0ZXJuIEZJTEUgKnN0ZG91dDsKZXh0ZXJuIEZJ
TEUgKnN0ZGVycjsKCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUp
IHRocm93ICgpOwoKZXh0ZXJuIGludCByZW5hbWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29u
c3QgY2hhciAqX19uZXcpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQp
IHRocm93ICgpOwoKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2NCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGNoYXIgKnRtcG5hbSAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICp0
bXBuYW1fciAoY2hhciAqX19zKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICp0ZW1wbmFtIChfX2Nv
bnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4KQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxsICh2b2lkKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAo
KTsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxl
bmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21v
ZGVzLAogICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhy
b3cgKCk7CgpleHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
ZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19tb2RlcykgdGhyb3cgKCk7CmV4dGVybiBGSUxFICpmcmVvcGVuNjQgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqZmRvcGVuIChpbnQg
X19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAq
Zm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2lvX2Z1bmNzKSB0
aHJvdyAoKTsKCgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQgKl9fcywgc2l6ZV90IF9fbGVu
LCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKm9wZW5f
bWVtc3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9jKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVz
dHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNldHZidWYgKEZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAg
ICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgc2V0
YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm
LAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCmV4dGVy
biB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp
bnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRl
cm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVj
X3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGludCB2cHJpbnRmIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93
ICgpOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3Zh
X2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jl
c3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJp
bnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlz
dCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmlu
dGZfXywgMywgMCkpKTsKCgoKCgpleHRlcm4gaW50IHZhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJp
Y3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2YsCiAgICAgICAgICAgICAgICAg
ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBfX2FzcHJpbnRmIChj
aGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hh
ciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zv
cm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBpbnQgdmRwcmludGYgKGludCBf
X2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsCiAgICAgICAgICAgICAgICAgICAg
IF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zv
cm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IGRwcmludGYgKGludCBfX2Zk
LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgoKCmV4dGVybiBp
bnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJu
IGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93
ICgpOwoKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBfX2du
dWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRf
XyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNjYW5mIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDApKSk7CgoKZXh0ZXJu
IGludCB2c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3Qg
X19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZf
XywgMiwgMCkpKTsKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBnZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ2V0Y191bmxvY2tl
ZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQg
KHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0YyAoaW50IF9fYywgRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoK
CgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLCBGSUxFICpf
X3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZmdldHNf
dW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgpleHRlcm4gX19zc2l6ZV90IF9f
Z2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRo
cm93ICgpOwpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xp
bmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9f
biwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9f
cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBfX3NzaXplX3QgZ2V0bGluZSAo
Y2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUg
Kl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0cyAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAg
ICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpf
X3MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAoaW50IF9fYywgRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpfX3Jlc3RyaWN0IF9f
cHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxF
ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3QgZndyaXRlIChf
X2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcykgdGhyb3cgKCk7CgoK
CmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNp
emVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IGZ3cml0ZV91
bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVh
bSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBp
bnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHJld2luZCAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmc2Vla28gKEZJTEUgKl9fc3Ry
ZWFtLCBfX29mZl90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2Zm
X3QgZnRlbGxvIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmdldHBv
cyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQog
ICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25z
dCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9f
c3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBf
X29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBm
Z2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0
IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAqX19zdHJl
YW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xl
YXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVvZiAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lz
X2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAq
X19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIg
Kl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdGVy
bWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFy
ICpfX3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNr
X3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikg
dGhyb3cgKCk7CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19y
ZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2du
dWNfdmFfbGlzdCBfX2FyZ3MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgZmxvY2tmaWxl
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCn0KCgpleHRlcm4gIkMiIHsKCmVudW0geGRyX29wIHsKICBY
RFJfRU5DT0RFID0gMCwKICBYRFJfREVDT0RFID0gMSwKICBYRFJfRlJFRSA9IDIKfTsKCnR5cGVk
ZWYgc3RydWN0IFhEUiBYRFI7CnN0cnVjdCBYRFIKICB7CiAgICBlbnVtIHhkcl9vcCB4X29wOwog
ICAgc3RydWN0IHhkcl9vcHMKICAgICAgewogICAgICAgIGJvb2xfdCAoKnhfZ2V0bG9uZykgKFhE
UiAqX194ZHJzLCBsb25nICpfX2xwKTsKCiAgICAgICAgYm9vbF90ICgqeF9wdXRsb25nKSAoWERS
ICpfX3hkcnMsIF9fY29uc3QgbG9uZyAqX19scCk7CgogICAgICAgIGJvb2xfdCAoKnhfZ2V0Ynl0
ZXMpIChYRFIgKl9feGRycywgY2FkZHJfdCBfX2FkZHIsIHVfaW50IF9fbGVuKTsKCiAgICAgICAg
Ym9vbF90ICgqeF9wdXRieXRlcykgKFhEUiAqX194ZHJzLCBfX2NvbnN0IGNoYXIgKl9fYWRkciwg
dV9pbnQgX19sZW4pOwoKICAgICAgICB1X2ludCAoKnhfZ2V0cG9zdG4pIChfX2NvbnN0IFhEUiAq
X194ZHJzKTsKCiAgICAgICAgYm9vbF90ICgqeF9zZXRwb3N0bikgKFhEUiAqX194ZHJzLCB1X2lu
dCBfX3Bvcyk7CgogICAgICAgIGludDMyX3QgKigqeF9pbmxpbmUpIChYRFIgKl9feGRycywgaW50
IF9fbGVuKTsKCiAgICAgICAgdm9pZCAoKnhfZGVzdHJveSkgKFhEUiAqX194ZHJzKTsKCiAgICAg
ICAgYm9vbF90ICgqeF9nZXRpbnQzMikgKFhEUiAqX194ZHJzLCBpbnQzMl90ICpfX2lwKTsKCiAg
ICAgICAgYm9vbF90ICgqeF9wdXRpbnQzMikgKFhEUiAqX194ZHJzLCBfX2NvbnN0IGludDMyX3Qg
Kl9faXApOwoKICAgICAgfQogICAgICp4X29wczsKICAgIGNhZGRyX3QgeF9wdWJsaWM7CiAgICBj
YWRkcl90IHhfcHJpdmF0ZTsKICAgIGNhZGRyX3QgeF9iYXNlOwogICAgaW50IHhfaGFuZHk7CiAg
fTsKCnR5cGVkZWYgYm9vbF90ICgqeGRycHJvY190KSAoWERSICosIHZvaWQgKiwuLi4pOwoKc3Ry
dWN0IHhkcl9kaXNjcmltCnsKICBpbnQgdmFsdWU7CiAgeGRycHJvY190IHByb2M7Cn07CgpleHRl
cm4gYm9vbF90IHhkcl92b2lkICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGJvb2xfdCB4ZHJfc2hv
cnQgKFhEUiAqX194ZHJzLCBzaG9ydCAqX19zcCkgdGhyb3cgKCk7CmV4dGVybiBib29sX3QgeGRy
X3Vfc2hvcnQgKFhEUiAqX194ZHJzLCB1X3Nob3J0ICpfX3VzcCkgdGhyb3cgKCk7CmV4dGVybiBi
b29sX3QgeGRyX2ludCAoWERSICpfX3hkcnMsIGludCAqX19pcCkgdGhyb3cgKCk7CmV4dGVybiBi
b29sX3QgeGRyX3VfaW50IChYRFIgKl9feGRycywgdV9pbnQgKl9fdXApIHRocm93ICgpOwpleHRl
cm4gYm9vbF90IHhkcl9sb25nIChYRFIgKl9feGRycywgbG9uZyAqX19scCkgdGhyb3cgKCk7CmV4
dGVybiBib29sX3QgeGRyX3VfbG9uZyAoWERSICpfX3hkcnMsIHVfbG9uZyAqX191bHApIHRocm93
ICgpOwpleHRlcm4gYm9vbF90IHhkcl9oeXBlciAoWERSICpfX3hkcnMsIHF1YWRfdCAqX19sbHAp
IHRocm93ICgpOwpleHRlcm4gYm9vbF90IHhkcl91X2h5cGVyIChYRFIgKl9feGRycywgdV9xdWFk
X3QgKl9fdWxscCkgdGhyb3cgKCk7CmV4dGVybiBib29sX3QgeGRyX2xvbmdsb25nX3QgKFhEUiAq
X194ZHJzLCBxdWFkX3QgKl9fbGxwKSB0aHJvdyAoKTsKZXh0ZXJuIGJvb2xfdCB4ZHJfdV9sb25n
bG9uZ190IChYRFIgKl9feGRycywgdV9xdWFkX3QgKl9fdWxscCkgdGhyb3cgKCk7CmV4dGVybiBi
b29sX3QgeGRyX2ludDhfdCAoWERSICpfX3hkcnMsIGludDhfdCAqX19pcCkgdGhyb3cgKCk7CmV4
dGVybiBib29sX3QgeGRyX3VpbnQ4X3QgKFhEUiAqX194ZHJzLCB1aW50OF90ICpfX3VwKSB0aHJv
dyAoKTsKZXh0ZXJuIGJvb2xfdCB4ZHJfaW50MTZfdCAoWERSICpfX3hkcnMsIGludDE2X3QgKl9f
aXApIHRocm93ICgpOwpleHRlcm4gYm9vbF90IHhkcl91aW50MTZfdCAoWERSICpfX3hkcnMsIHVp
bnQxNl90ICpfX3VwKSB0aHJvdyAoKTsKZXh0ZXJuIGJvb2xfdCB4ZHJfaW50MzJfdCAoWERSICpf
X3hkcnMsIGludDMyX3QgKl9faXApIHRocm93ICgpOwpleHRlcm4gYm9vbF90IHhkcl91aW50MzJf
dCAoWERSICpfX3hkcnMsIHVpbnQzMl90ICpfX3VwKSB0aHJvdyAoKTsKZXh0ZXJuIGJvb2xfdCB4
ZHJfaW50NjRfdCAoWERSICpfX3hkcnMsIGludDY0X3QgKl9faXApIHRocm93ICgpOwpleHRlcm4g
Ym9vbF90IHhkcl91aW50NjRfdCAoWERSICpfX3hkcnMsIHVpbnQ2NF90ICpfX3VwKSB0aHJvdyAo
KTsKZXh0ZXJuIGJvb2xfdCB4ZHJfYm9vbCAoWERSICpfX3hkcnMsIGJvb2xfdCAqX19icCkgdGhy
b3cgKCk7CmV4dGVybiBib29sX3QgeGRyX2VudW0gKFhEUiAqX194ZHJzLCBlbnVtX3QgKl9fZXAp
IHRocm93ICgpOwpleHRlcm4gYm9vbF90IHhkcl9hcnJheSAoWERSICogX3hkcnMsIGNhZGRyX3Qg
Kl9fYWRkcnAsIHVfaW50ICpfX3NpemVwLAogICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQg
X19tYXhzaXplLCB1X2ludCBfX2Vsc2l6ZSwgeGRycHJvY190IF9fZWxwcm9jKQogICAgIHRocm93
ICgpOwpleHRlcm4gYm9vbF90IHhkcl9ieXRlcyAoWERSICpfX3hkcnMsIGNoYXIgKipfX2NwcCwg
dV9pbnQgKl9fc2l6ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBfX21heHNpemUp
IHRocm93ICgpOwpleHRlcm4gYm9vbF90IHhkcl9vcGFxdWUgKFhEUiAqX194ZHJzLCBjYWRkcl90
IF9fY3AsIHVfaW50IF9fY250KSB0aHJvdyAoKTsKZXh0ZXJuIGJvb2xfdCB4ZHJfc3RyaW5nIChY
RFIgKl9feGRycywgY2hhciAqKl9fY3BwLCB1X2ludCBfX21heHNpemUpIHRocm93ICgpOwpleHRl
cm4gYm9vbF90IHhkcl91bmlvbiAoWERSICpfX3hkcnMsIGVudW1fdCAqX19kc2NtcCwgY2hhciAq
X191bnAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB4ZHJfZGlzY3Jp
bSAqX19jaG9pY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgeGRycHJvY190IGRmYXVsdCkg
dGhyb3cgKCk7CmV4dGVybiBib29sX3QgeGRyX2NoYXIgKFhEUiAqX194ZHJzLCBjaGFyICpfX2Nw
KSB0aHJvdyAoKTsKZXh0ZXJuIGJvb2xfdCB4ZHJfdV9jaGFyIChYRFIgKl9feGRycywgdV9jaGFy
ICpfX2NwKSB0aHJvdyAoKTsKZXh0ZXJuIGJvb2xfdCB4ZHJfdmVjdG9yIChYRFIgKl9feGRycywg
Y2hhciAqX19iYXNlcCwgdV9pbnQgX19uZWxlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICB1
X2ludCBfX2VsZW1zaXplLCB4ZHJwcm9jX3QgX194ZHJfZWxlbSkgdGhyb3cgKCk7CmV4dGVybiBi
b29sX3QgeGRyX2Zsb2F0IChYRFIgKl9feGRycywgZmxvYXQgKl9fZnApIHRocm93ICgpOwpleHRl
cm4gYm9vbF90IHhkcl9kb3VibGUgKFhEUiAqX194ZHJzLCBkb3VibGUgKl9fZHApIHRocm93ICgp
OwpleHRlcm4gYm9vbF90IHhkcl9yZWZlcmVuY2UgKFhEUiAqX194ZHJzLCBjYWRkcl90ICpfX3hw
cCwgdV9pbnQgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhkcnByb2NfdCBf
X3Byb2MpIHRocm93ICgpOwpleHRlcm4gYm9vbF90IHhkcl9wb2ludGVyIChYRFIgKl9feGRycywg
Y2hhciAqKl9fb2JqcHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IF9fb2JqX3Np
emUsIHhkcnByb2NfdCBfX3hkcl9vYmopIHRocm93ICgpOwpleHRlcm4gYm9vbF90IHhkcl93cmFw
c3RyaW5nIChYRFIgKl9feGRycywgY2hhciAqKl9fY3BwKSB0aHJvdyAoKTsKZXh0ZXJuIHVfbG9u
ZyB4ZHJfc2l6ZW9mICh4ZHJwcm9jX3QsIHZvaWQgKikgdGhyb3cgKCk7CgoKCgoKCnN0cnVjdCBu
ZXRvYmoKewogIHVfaW50IG5fbGVuOwogIGNoYXIgKm5fYnl0ZXM7Cn07CnR5cGVkZWYgc3RydWN0
IG5ldG9iaiBuZXRvYmo7CmV4dGVybiBib29sX3QgeGRyX25ldG9iaiAoWERSICpfX3hkcnMsIHN0
cnVjdCBuZXRvYmogKl9fbnApIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgeGRybWVtX2Ny
ZWF0ZSAoWERSICpfX3hkcnMsIF9fY29uc3QgY2FkZHJfdCBfX2FkZHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVfaW50IF9fc2l6ZSwgZW51bSB4ZHJfb3AgX194b3ApIHRocm93ICgpOwoK
CmV4dGVybiB2b2lkIHhkcnN0ZGlvX2NyZWF0ZSAoWERSICpfX3hkcnMsIEZJTEUgKl9fZmlsZSwg
ZW51bSB4ZHJfb3AgX194b3ApCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgeGRycmVjX2Ny
ZWF0ZSAoWERSICpfX3hkcnMsIHVfaW50IF9fc2VuZHNpemUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVfaW50IF9fcmVjdnNpemUsIGNhZGRyX3QgX190Y3BfaGFuZGxlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgKCpfX3JlYWRpdCkgKGNoYXIgKiwgY2hhciAqLCBpbnQpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpfX3dyaXRlaXQpIChjaGFyICosIGNoYXIg
KiwgaW50KSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGJvb2xfdCB4ZHJyZWNfZW5kb2ZyZWNvcmQgKFhE
UiAqX194ZHJzLCBib29sX3QgX19zZW5kbm93KSB0aHJvdyAoKTsKCgpleHRlcm4gYm9vbF90IHhk
cnJlY19za2lwcmVjb3JkIChYRFIgKl9feGRycykgdGhyb3cgKCk7CgoKZXh0ZXJuIGJvb2xfdCB4
ZHJyZWNfZW9mIChYRFIgKl9feGRycykgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgeGRyX2ZyZWUg
KHhkcnByb2NfdCBfX3Byb2MsIGNoYXIgKl9fb2JqcCkgdGhyb3cgKCk7Cgp9CgoKfQoKCgoKCgoK
Cgp0eXBlZGVmIGludCBORVRfSU5UX1RZUEU7Cgp0eXBlZGVmIGRvdWJsZSBORVRfRE9VQkxFOwp0
eXBlZGVmIGludCBORVRfSU5UOwoKCnR5cGVkZWYgZW51bSB7CiAgUEFDS19ORVRfVFlQRVMsCiAg
UEFDS19OQVRJVkUsCiAgUEFDS19YRFIKfSBTcFBhcm1TZXRQYWNrTWV0aG9kOwoKdHlwZWRlZiBl
bnVtIHsKICBOT05FX0RBVEEsCiAgSU5UX0RBVEEsCiAgRkxPQVRfREFUQSwKICBET1VCTEVfREFU
QSwKICBTVFJJTkdfREFUQSwKICBCVUZGRVJfREFUQQp9IFNwUGFybVNldERhdGFUeXBlOwoKY2xh
c3MgU3BQYXJtU2V0RGF0YUl0ZW0gewpwdWJsaWM6CiAgdmlydHVhbCB+U3BQYXJtU2V0RGF0YUl0
ZW0oKSB7IDsgfQoKCgoKCgoKICB2aXJ0dWFsIFNwUGFybVNldERhdGFJdGVtKiBDbG9uZSgpID0g
MDsKCgoKCgoKICB2aXJ0dWFsIFNwUGFybVNldERhdGFUeXBlIEdldERhdGFUeXBlKCkgPSAwOwoK
ICB2aXJ0dWFsIHZvaWQgU2V0SW50KGludCB2YWwpID0gMDsKICB2aXJ0dWFsIHZvaWQgU2V0Rmxv
YXQoZmxvYXQgdmFsKSA9IDA7CiAgdmlydHVhbCB2b2lkIFNldERvdWJsZShkb3VibGUgdmFsKSA9
IDA7CiAgdmlydHVhbCB2b2lkIFNldFN0cmluZyhjaGFyKiB2YWwpID0gMDsKICB2aXJ0dWFsIHZv
aWQgU2V0QnVmZmVyKGNoYXIqIHZhbCwgaW50IHNpemUpID0gMDsKCiAgdmlydHVhbCBpbnQgR2V0
SW50KCkgPSAwOwogIHZpcnR1YWwgZmxvYXQgR2V0RmxvYXQoKSA9IDA7CiAgdmlydHVhbCBkb3Vi
bGUgR2V0RG91YmxlKCkgPSAwOwogIHZpcnR1YWwgY2hhciogR2V0U3RyaW5nKCkgPSAwOwogIHZp
cnR1YWwgY2hhciogR2V0QnVmZmVyKGludCYgc2l6ZSkgPSAwOwoKICB2aXJ0dWFsIGludCBHZXRQ
YWNrTGVuZ3RoKFNwUGFybVNldFBhY2tNZXRob2QgcGFjaykgPSAwOwoKCgoKCgoKICB2aXJ0dWFs
IHZvaWQgUGFja0J1ZmZlcihTcFBhcm1TZXRQYWNrTWV0aG9kIHBhY2ssCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIqIGJ1ZmYsIGludCYgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBYRFIqIHhkckhhbmRsZSkgPSAwOwoKICBzdGF0aWMgU3BQYXJtU2V0RGF0YUl0ZW0q
IFVucGFja0J1ZmZlcihTcFBhcm1TZXRQYWNrTWV0aG9kIHBhY2ssCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGJ1ZmYsIGludCYgb2Zmc2V0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRFIqIHhkckhhbmRsZSk7CgoKCgpw
cm90ZWN0ZWQ6CiAgc3RhdGljIGludCBzaXplOwogIHN0YXRpYyBjaGFyKiByZXQ7Cn07CgoKCgoK
CmNsYXNzIFNwUGFybVNldEludERhdGEgOiBwdWJsaWMgU3BQYXJtU2V0RGF0YUl0ZW0gewpwdWJs
aWM6CiAgU3BQYXJtU2V0SW50RGF0YShpbnQgdmFsKSB7IFZhbHVlID0gdmFsOyB9CgogIFNwUGFy
bVNldEludERhdGEoU3BQYXJtU2V0UGFja01ldGhvZCBwYWNrLCBjaGFyKiBidWZmLCBpbnQmIG9m
ZnNldCwKICAgICAgICAgICAgICAgICAgIFhEUiogeGRySGFuZGxlKTsKCgoKICB+U3BQYXJtU2V0
SW50RGF0YSgpIHsgOyB9CgogIFNwUGFybVNldERhdGFJdGVtKiBDbG9uZSgpIHsgcmV0dXJuIG5l
dyBTcFBhcm1TZXRJbnREYXRhKFZhbHVlKTsgfQoKICBTcFBhcm1TZXREYXRhVHlwZSBHZXREYXRh
VHlwZSgpIHsgcmV0dXJuIElOVF9EQVRBOyB9CgogIHZvaWQgU2V0SW50KGludCB2YWwpIHsgVmFs
dWUgPSB2YWw7IH0KICB2b2lkIFNldEZsb2F0KGZsb2F0IHZhbCkgeyBWYWx1ZSA9IChpbnQpIHZh
bDsgfQogIHZvaWQgU2V0RG91YmxlKGRvdWJsZSB2YWwpIHsgVmFsdWUgPSAoaW50KSB2YWw7IH0K
ICB2b2lkIFNldFN0cmluZyhjaGFyKik7CiAgdm9pZCBTZXRCdWZmZXIoY2hhciosIGludCk7Cgog
IGludCBHZXRJbnQoKSB7IHJldHVybiBWYWx1ZTsgfQogIGZsb2F0IEdldEZsb2F0KCkgeyByZXR1
cm4gKGZsb2F0KSBWYWx1ZTsgfQogIGRvdWJsZSBHZXREb3VibGUoKSB7IHJldHVybiAoZG91Ymxl
KSBWYWx1ZTsgfQogIGNoYXIqIEdldFN0cmluZygpOwogIGNoYXIqIEdldEJ1ZmZlcihpbnQmIHNp
emVfcmVuYW1lZF9zb19pdF9kb2VzX25vdF9oaWRlX21lbWJlcikgewogICAgc2l6ZV9yZW5hbWVk
X3NvX2l0X2RvZXNfbm90X2hpZGVfbWVtYmVyID0gc2l6ZW9mKFZhbHVlKTsKICAgIHJldHVybihj
aGFyKikmVmFsdWU7CiAgfQoKICBpbnQgR2V0UGFja0xlbmd0aChTcFBhcm1TZXRQYWNrTWV0aG9k
IHBhY2spOwoKICB2b2lkIFBhY2tCdWZmZXIoU3BQYXJtU2V0UGFja01ldGhvZCBwYWNrLCBjaGFy
KiBidWZmLCBpbnQmIG9mZnNldCwKICAgICAgICAgICAgICAgICAgIFhEUiogeGRySGFuZGxlKTsK
CgoKCnByaXZhdGU6CiAgaW50IFZhbHVlOwp9OwoKCgoKCgpjbGFzcyBTcFBhcm1TZXRGbG9hdERh
dGEgOiBwdWJsaWMgU3BQYXJtU2V0RGF0YUl0ZW0gewpwdWJsaWM6CiAgU3BQYXJtU2V0RmxvYXRE
YXRhKGZsb2F0IHZhbCkgeyBWYWx1ZSA9IHZhbDsgfQoKICBTcFBhcm1TZXRGbG9hdERhdGEoU3BQ
YXJtU2V0UGFja01ldGhvZCBwYWNrLCBjaGFyKiBidWZmLCBpbnQmIG9mZnNldCwKICAgICAgICAg
ICAgICAgICAgICAgWERSKiB4ZHJIYW5kbGUpOwoKCgogIH5TcFBhcm1TZXRGbG9hdERhdGEoKSB7
IDsgfQoKICBTcFBhcm1TZXREYXRhSXRlbSogQ2xvbmUoKSB7IHJldHVybiBuZXcgU3BQYXJtU2V0
RmxvYXREYXRhKFZhbHVlKTsgfQoKICBTcFBhcm1TZXREYXRhVHlwZSBHZXREYXRhVHlwZSgpIHsg
cmV0dXJuIEZMT0FUX0RBVEE7IH0KCiAgdm9pZCBTZXRJbnQoaW50IHZhbCkgeyBWYWx1ZSA9IChm
bG9hdCkgdmFsOyB9CiAgdm9pZCBTZXRGbG9hdChmbG9hdCB2YWwpIHsgVmFsdWUgPSB2YWw7IH0K
ICB2b2lkIFNldERvdWJsZShkb3VibGUgdmFsKSB7IFZhbHVlID0gKGZsb2F0KSB2YWw7IH0KICB2
b2lkIFNldFN0cmluZyhjaGFyKik7CiAgdm9pZCBTZXRCdWZmZXIoY2hhciosIGludCk7CgogIGlu
dCBHZXRJbnQoKSB7IHJldHVybiAoaW50KSBWYWx1ZTsgfQogIGZsb2F0IEdldEZsb2F0KCkgeyBy
ZXR1cm4gVmFsdWU7IH0KICBkb3VibGUgR2V0RG91YmxlKCkgeyByZXR1cm4gKGRvdWJsZSkgVmFs
dWU7IH0KICBjaGFyKiBHZXRTdHJpbmcoKTsKICBjaGFyKiBHZXRCdWZmZXIoaW50ICZzaXplX3Jl
bmFtZWRfc29faXRfZG9lc19ub3RfaGlkZV9tZW1iZXIpIHsKICAgIHNpemVfcmVuYW1lZF9zb19p
dF9kb2VzX25vdF9oaWRlX21lbWJlciA9IHNpemVvZihWYWx1ZSk7CiAgICByZXR1cm4oY2hhciop
JlZhbHVlOwogIH0KCiAgaW50IEdldFBhY2tMZW5ndGgoU3BQYXJtU2V0UGFja01ldGhvZCBwYWNr
KTsKCiAgdm9pZCBQYWNrQnVmZmVyKFNwUGFybVNldFBhY2tNZXRob2QgcGFjaywgY2hhciogYnVm
ZiwgaW50JiBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICBYRFIqIHhkckhhbmRsZSk7CgoKCgpw
cml2YXRlOgogIGZsb2F0IFZhbHVlOwp9OwoKCgoKCgpjbGFzcyBTcFBhcm1TZXREb3VibGVEYXRh
IDogcHVibGljIFNwUGFybVNldERhdGFJdGVtIHsKcHVibGljOgogIFNwUGFybVNldERvdWJsZURh
dGEoZG91YmxlIHZhbCkgeyBWYWx1ZSA9IHZhbDsgfQoKICBTcFBhcm1TZXREb3VibGVEYXRhKFNw
UGFybVNldFBhY2tNZXRob2QgcGFjaywgY2hhciogYnVmZiwgaW50JiBvZmZzZXQsCiAgICAgICAg
ICAgICAgICAgICAgICBYRFIqIHhkckhhbmRsZSk7CgoKCiAgflNwUGFybVNldERvdWJsZURhdGEo
KSB7IDsgfQoKICBTcFBhcm1TZXREYXRhSXRlbSogQ2xvbmUoKSB7IHJldHVybiBuZXcgU3BQYXJt
U2V0RG91YmxlRGF0YShWYWx1ZSk7IH0KCiAgU3BQYXJtU2V0RGF0YVR5cGUgR2V0RGF0YVR5cGUo
KSB7IHJldHVybiBET1VCTEVfREFUQTsgfQoKICB2b2lkIFNldEludChpbnQgdmFsKSB7IFZhbHVl
ID0gKGRvdWJsZSkgdmFsOyB9CiAgdm9pZCBTZXRGbG9hdChmbG9hdCB2YWwpIHsgVmFsdWUgPSAo
ZG91YmxlKSB2YWw7IH0KICB2b2lkIFNldERvdWJsZShkb3VibGUgdmFsKSB7IFZhbHVlID0gdmFs
OyB9CiAgdm9pZCBTZXRTdHJpbmcoY2hhciopOwogIHZvaWQgU2V0QnVmZmVyKGNoYXIqLCBpbnQp
OwoKICBpbnQgR2V0SW50KCkgeyByZXR1cm4gKGludCkgVmFsdWU7IH0KICBmbG9hdCBHZXRGbG9h
dCgpIHsgcmV0dXJuIChmbG9hdCkgVmFsdWU7IH0KICBkb3VibGUgR2V0RG91YmxlKCkgeyByZXR1
cm4gVmFsdWU7IH0KICBjaGFyKiBHZXRTdHJpbmcoKTsKICBjaGFyKiBHZXRCdWZmZXIoaW50ICZz
aXplX3JlbmFtZWRfc29faXRfZG9lc19ub3RfaGlkZV9tZW1iZXIpIHsKICAgIHNpemVfcmVuYW1l
ZF9zb19pdF9kb2VzX25vdF9oaWRlX21lbWJlciA9IHNpemVvZihWYWx1ZSk7CiAgICByZXR1cm4o
Y2hhciopJlZhbHVlOwogIH0KCiAgaW50IEdldFBhY2tMZW5ndGgoU3BQYXJtU2V0UGFja01ldGhv
ZCBwYWNrKTsKCiAgdm9pZCBQYWNrQnVmZmVyKFNwUGFybVNldFBhY2tNZXRob2QgcGFjaywgY2hh
ciogYnVmZiwgaW50JiBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICBYRFIqIHhkckhhbmRsZSk7
CgoKCgpwcml2YXRlOgogIGRvdWJsZSBWYWx1ZTsKfTsKCgoKCgoKY2xhc3MgU3BQYXJtU2V0U3Ry
aW5nRGF0YSA6IHB1YmxpYyBTcFBhcm1TZXREYXRhSXRlbSB7CnB1YmxpYzoKICBTcFBhcm1TZXRT
dHJpbmdEYXRhKGNoYXIqIHZhbCk7CgoKICBTcFBhcm1TZXRTdHJpbmdEYXRhKFNwUGFybVNldFBh
Y2tNZXRob2QgcGFjaywgY2hhciogYnVmZiwgaW50JiBvZmZzZXQsCiAgICAgICAgICAgICAgICAg
ICAgICBYRFIqIHhkckhhbmRsZSk7CgoKCiAgflNwUGFybVNldFN0cmluZ0RhdGEoKSB7IGRlbGV0
ZSBbXSBWYWx1ZTsgfQoKICBTcFBhcm1TZXREYXRhSXRlbSogQ2xvbmUoKSB7IHJldHVybiBuZXcg
U3BQYXJtU2V0U3RyaW5nRGF0YShWYWx1ZSk7IH0KCiAgU3BQYXJtU2V0RGF0YVR5cGUgR2V0RGF0
YVR5cGUoKSB7IHJldHVybiBTVFJJTkdfREFUQTsgfQoKICB2b2lkIFNldEludChpbnQpOwogIHZv
aWQgU2V0RmxvYXQoZmxvYXQpOwogIHZvaWQgU2V0RG91YmxlKGRvdWJsZSk7CiAgdm9pZCBTZXRT
dHJpbmcoY2hhciogdmFsKTsKICB2b2lkIFNldEJ1ZmZlcihjaGFyKiwgaW50KTsKCiAgaW50IEdl
dEludCgpOwogIGZsb2F0IEdldEZsb2F0KCk7CiAgZG91YmxlIEdldERvdWJsZSgpOwogIGNoYXIq
IEdldFN0cmluZygpIHsgcmV0dXJuIFZhbHVlOyB9CiAgY2hhciogR2V0QnVmZmVyKGludCYgc2l6
ZV9yZW5hbWVkX3NvX2l0X2RvZXNfbm90X2hpZGVfbWVtYmVyKTsKCiAgaW50IEdldFBhY2tMZW5n
dGgoU3BQYXJtU2V0UGFja01ldGhvZCBwYWNrKTsKCiAgdm9pZCBQYWNrQnVmZmVyKFNwUGFybVNl
dFBhY2tNZXRob2QgcGFjaywgY2hhciogYnVmZiwgaW50JiBvZmZzZXQsCiAgICAgICAgICAgICAg
ICAgICBYRFIqIHhkckhhbmRsZSk7CgoKCgpwcml2YXRlOgogIGNoYXIqIFZhbHVlOwp9OwoKCgoK
CgpjbGFzcyBTcFBhcm1TZXRCdWZmZXJEYXRhIDogcHVibGljIFNwUGFybVNldERhdGFJdGVtIHsK
cHVibGljOgogIFNwUGFybVNldEJ1ZmZlckRhdGEoY2hhciogYnVmZiwgaW50IHNpemVfcmVuYW1l
ZF9zb19pdF9kb2VzX25vdF9oaWRlX21lbWJlcik7CgogIFNwUGFybVNldEJ1ZmZlckRhdGEoU3BQ
YXJtU2V0UGFja01ldGhvZCBwYWNrLCBjaGFyKiBidWZmLCBpbnQmIG9mZnNldCwKICAgICAgICAg
ICAgICAgICAgICAgIFhEUiogeGRySGFuZGxlKTsKCgoKICB+U3BQYXJtU2V0QnVmZmVyRGF0YSgp
IHsgZGVsZXRlIFtdIFZhbHVlOyB9CgogIFNwUGFybVNldERhdGFJdGVtKiBDbG9uZSgpIHsgcmV0
dXJuIG5ldyBTcFBhcm1TZXRCdWZmZXJEYXRhKFZhbHVlLCBTaXplKTsgfQoKICBTcFBhcm1TZXRE
YXRhVHlwZSBHZXREYXRhVHlwZSgpIHsgcmV0dXJuIEJVRkZFUl9EQVRBOyB9CgogIHZvaWQgU2V0
SW50KGludCk7CiAgdm9pZCBTZXRGbG9hdChmbG9hdCk7CiAgdm9pZCBTZXREb3VibGUoZG91Ymxl
KTsKICB2b2lkIFNldFN0cmluZyhjaGFyKik7CiAgdm9pZCBTZXRCdWZmZXIoY2hhciogdmFsLCBp
bnQgc2l6ZV9yZW5hbWVkX3NvX2l0X2RvZXNfbm90X2hpZGVfbWVtYmVyKTsKCiAgaW50IEdldElu
dCgpOwogIGZsb2F0IEdldEZsb2F0KCk7CiAgZG91YmxlIEdldERvdWJsZSgpOwogIGNoYXIqIEdl
dFN0cmluZygpIHsgcmV0dXJuIFZhbHVlOyB9CiAgY2hhciogR2V0QnVmZmVyKGludCYgc2l6ZV9y
ZW5hbWVkX3NvX2l0X2RvZXNfbm90X2hpZGVfbWVtYmVyKSB7CiAgICBzaXplX3JlbmFtZWRfc29f
aXRfZG9lc19ub3RfaGlkZV9tZW1iZXIgPSBTaXplOwogICAgcmV0dXJuIFZhbHVlOwogIH0KCiAg
aW50IEdldFBhY2tMZW5ndGgoU3BQYXJtU2V0UGFja01ldGhvZCBwYWNrKTsKCiAgdm9pZCBQYWNr
QnVmZmVyKFNwUGFybVNldFBhY2tNZXRob2QgcGFjaywgY2hhciogYnVmZiwgaW50JiBvZmZzZXQs
CiAgICAgICAgICAgICAgICAgICBYRFIqIHhkckhhbmRsZSk7CgoKCgpwcml2YXRlOgogIGNoYXIq
IFZhbHVlOwogIHVuc2lnbmVkIGludCBTaXplOwp9OwoKY2xhc3MgU3BQYXJtU2V0RWxlbWVudCB7
CnB1YmxpYzoKICBTcFBhcm1TZXRFbGVtZW50KCk7CiAgU3BQYXJtU2V0RWxlbWVudChpbnQgdmFs
KTsKICBTcFBhcm1TZXRFbGVtZW50KGZsb2F0IHZhbCk7CiAgU3BQYXJtU2V0RWxlbWVudChkb3Vi
bGUgdmFsKTsKICBTcFBhcm1TZXRFbGVtZW50KGNoYXIqIHZhbCk7CiAgU3BQYXJtU2V0RWxlbWVu
dChjaGFyKiBidWZmLCBpbnQgc2l6ZSk7CiAgU3BQYXJtU2V0RWxlbWVudChjb25zdCBTcFBhcm1T
ZXRFbGVtZW50JiBlbGVtKTsKICB+U3BQYXJtU2V0RWxlbWVudCgpOwoKICBTcFBhcm1TZXRFbGVt
ZW50KiBDbG9uZSgpIHsKICAgIFNwUGFybVNldEVsZW1lbnQgKmVsZW0gPSBuZXcgU3BQYXJtU2V0
RWxlbWVudCgpOwogICAgZWxlbS0+RGF0YSA9IHRoaXMtPkRhdGEtPkNsb25lKCk7CiAgICByZXR1
cm4gZWxlbTsKICB9CgogIFNwUGFybVNldERhdGFUeXBlIEdldERhdGFUeXBlKCkgewogICAgaWYg
KERhdGEpIHJldHVybiBEYXRhLT5HZXREYXRhVHlwZSgpOwogICAgcmV0dXJuIE5PTkVfREFUQTsK
ICB9CgogIHZvaWQgU2V0SW50KGludCB2YWwpIHsKICAgIGlmICghRGF0YSkgRGF0YSA9IG5ldyBT
cFBhcm1TZXRJbnREYXRhKHZhbCk7CiAgICBlbHNlIERhdGEtPlNldEludCh2YWwpOwogIH0KICB2
b2lkIFNldEZsb2F0KGZsb2F0IHZhbCkgewogICAgaWYgKCFEYXRhKSBEYXRhID0gbmV3IFNwUGFy
bVNldEZsb2F0RGF0YSh2YWwpOwogICAgZWxzZSBEYXRhLT5TZXRGbG9hdCh2YWwpOwogIH0KICB2
b2lkIFNldERvdWJsZShkb3VibGUgdmFsKSB7CiAgICBpZiAoIURhdGEpIERhdGEgPSBuZXcgU3BQ
YXJtU2V0RG91YmxlRGF0YSh2YWwpOwogICAgZWxzZSBEYXRhLT5TZXREb3VibGUodmFsKTsKICB9
CiAgdm9pZCBTZXRTdHJpbmcoY2hhciogdmFsKSB7CiAgICBpZiAoIURhdGEpIERhdGEgPSBuZXcg
U3BQYXJtU2V0U3RyaW5nRGF0YSh2YWwpOwogICAgZWxzZSBEYXRhLT5TZXRTdHJpbmcodmFsKTsK
ICB9CiAgdm9pZCBTZXRCdWZmZXIoY2hhciogdmFsLCBpbnQgc2l6ZSkgewogICAgaWYgKCFEYXRh
KSBEYXRhID0gbmV3IFNwUGFybVNldEJ1ZmZlckRhdGEodmFsLCBzaXplKTsKICAgIGVsc2UgRGF0
YS0+U2V0QnVmZmVyKHZhbCwgc2l6ZSk7CiAgfQoKICBpbmxpbmUgaW50IEdldEludCgpIHsgaWYg
KERhdGEpIHJldHVybiBEYXRhLT5HZXRJbnQoKTsgcmV0dXJuIDA7IH0KICBpbmxpbmUgZmxvYXQg
R2V0RmxvYXQoKSB7IGlmIChEYXRhKSByZXR1cm4gRGF0YS0+R2V0RmxvYXQoKTsgcmV0dXJuIDA7
IH0KICBpbmxpbmUgZG91YmxlIEdldERvdWJsZSgpIHsgaWYgKERhdGEpIHJldHVybiBEYXRhLT5H
ZXREb3VibGUoKTsgcmV0dXJuIDA7IH0KICBpbmxpbmUgY2hhciogR2V0U3RyaW5nKCkgeyBpZiAo
RGF0YSkgcmV0dXJuIERhdGEtPkdldFN0cmluZygpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gX19udWxsOyB9CiAgaW5saW5lIGNoYXIqIEdldEJ1ZmZlcihpbnQmIHNpemUp
IHsgaWYgKERhdGEpIHJldHVybiBEYXRhLT5HZXRCdWZmZXIoc2l6ZSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX251bGw7IH0KCgoKCgoKCiAgaW5saW5l
IHZvaWQgb3BlcmF0b3IgPShpbnQgdmFsKSB7IHRoaXMtPlNldEludCh2YWwpOyB9CiAgaW5saW5l
IHZvaWQgb3BlcmF0b3IgPShmbG9hdCB2YWwpIHsgdGhpcy0+U2V0RmxvYXQodmFsKTsgfQogIGlu
bGluZSB2b2lkIG9wZXJhdG9yID0oZG91YmxlIHZhbCkgeyB0aGlzLT5TZXREb3VibGUodmFsKTsg
fQogIHZvaWQgb3BlcmF0b3IgPShjaGFyKiB2YWwpIHsgdGhpcy0+U2V0U3RyaW5nKHZhbCk7IH0K
CgoKCgoKCiAgaW5saW5lIG9wZXJhdG9yIGludCgpIHsgcmV0dXJuIHRoaXMtPkdldEludCgpOyB9
CiAgaW5saW5lIG9wZXJhdG9yIGZsb2F0KCkgeyByZXR1cm4gdGhpcy0+R2V0RmxvYXQoKTsgfQog
IGlubGluZSBvcGVyYXRvciBkb3VibGUoKSB7IHJldHVybiB0aGlzLT5HZXREb3VibGUoKTsgfQog
IGlubGluZSBvcGVyYXRvciBjaGFyKigpIHsgcmV0dXJuIHRoaXMtPkdldFN0cmluZygpOyB9Cgog
IGludCBHZXRQYWNrTGVuZ3RoKFNwUGFybVNldFBhY2tNZXRob2QgcGFjayk7CgoKCgoKCgogIHZv
aWQgUGFja0J1ZmZlcihTcFBhcm1TZXRQYWNrTWV0aG9kIHBhY2ssIGNoYXIqIGJ1ZmYsIGludCYg
b2Zmc2V0LAogICAgICAgICAgICAgICAgICAgWERSKiB4ZHJIYW5kbGUpOwoKICB2b2lkIFVucGFj
a0J1ZmZlcihTcFBhcm1TZXRQYWNrTWV0aG9kIHBhY2ssIGNoYXIqIGJ1ZmYsIGludCYgb2Zmc2V0
LAogICAgICAgICAgICAgICAgICAgICBYRFIqIHhkckhhbmRsZSk7CgoKCgpwcml2YXRlOgogIFNw
UGFybVNldERhdGFJdGVtKiBEYXRhOwp9OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgpjbGFzcyBTcER5
blB0ckFycmF5IHsKICBwdWJsaWM6CiAgICBTcER5blB0ckFycmF5KGludCBzaXplT2ZBcnJheSA9
IDIpOwogICAgflNwRHluUHRyQXJyYXkoKTsKICAgIGludCBHZXRBcnJheVNpemUoKSB7cmV0dXJu
IEFycmF5U2l6ZTt9CiAgICB2b2lkIComb3BlcmF0b3IgW10oaW50IGluZGV4KTsKCiAgcHJvdGVj
dGVkOgoKICBwcml2YXRlOgogICAgdm9pZCAqKlBvaW50ZXJBcnJheTsKICAgIGludCBBcnJheVNp
emU7CiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBTcER5blB0ckFycmF5ICYpOwogICAgU3BEeW5Q
dHJBcnJheShjb25zdCBTcER5blB0ckFycmF5ICYpOwogICAgdm9pZCBFbmxhcmdlU2l6ZShpbnQg
bmV3U2l6ZSk7Cn07CgppbmxpbmUgdm9pZCAqJlNwRHluUHRyQXJyYXk6Om9wZXJhdG9yIFtdKGlu
dCBpbmRleCkgewogIGlmIChpbmRleCA+PSBBcnJheVNpemUpIHsKICAgIEVubGFyZ2VTaXplKGlu
ZGV4K2luZGV4KTsKICB9CiAgcmV0dXJuIFBvaW50ZXJBcnJheVtpbmRleF07Cn0KCmNsYXNzIFNw
SW50ZXJ2YWxLZXk7CmNsYXNzIFNwTWVtQmxrSG9sZGVyOwpjbGFzcyBTcEJpbmFyeVRyZWU7CmNs
YXNzIFNwTGlzdDsKY2xhc3MgU3BLZXk7Cgp0eXBlZGVmIHZvaWQgKigqU3BQb0FycmF5Q29uc3Ry
dWN0b3IpKGludCk7CnN0cnVjdCBTcFBvQXJyYXlDb25zdHJ1Y3RvckhvbGRlciB7CiAgICBTcFBv
QXJyYXlDb25zdHJ1Y3RvckhvbGRlcihTcFBvQXJyYXlDb25zdHJ1Y3RvciBmKSA6IGZ1bmMoZikg
e30KICAgIFNwUG9BcnJheUNvbnN0cnVjdG9yIGZ1bmM7Cn07Cgp0eXBlZGVmIHZvaWQgKigqU3BQ
b1NpbmdsZUNvbnN0cnVjdG9yKSgpOwpzdHJ1Y3QgU3BQb1NpbmdsZUNvbnN0cnVjdG9ySG9sZGVy
IHsKICAgIFNwUG9TaW5nbGVDb25zdHJ1Y3RvckhvbGRlcihTcFBvU2luZ2xlQ29uc3RydWN0b3Ig
ZikgOiBmdW5jKGYpIHt9CiAgICBTcFBvU2luZ2xlQ29uc3RydWN0b3IgZnVuYzsKfTsKCmNsYXNz
IFNwUG9EYXRhQmFzZXsKICBmcmllbmQgY2xhc3MgRnJpZW5kT2ZTcFBvRGF0YUJhc2U7CiAgZnJp
ZW5kIGludCBBdHRhY2hQb2ludGVyKHZvaWQqJiwgU3BQb0RhdGFCYXNlKik7CnB1YmxpYzoKCiAg
ZW51bSBFcnJvckNvZGVzewogICAgUE9fTm9FcnJvciA9IDAsCiAgICBQT19SZW1vdmVkQWRkcmVz
c05vdEluRGF0YUJhc2UsCiAgICBQT19DbGFzc05vdFJlZ2lzdGVyZWQsCiAgICBQT19TZXRQb2lu
dGVyT2JqZWN0Tm90SW5EYXRhYmFzZSwKICAgIFBPX1VuU2V0UG9pbnRlck9iamVjdE5vdEluRGF0
YWJhc2UsCiAgICBQT19BZGRBZGRyZXNzVHdpY2UsCiAgICBQT19OdW1FcnJvckNvZGVzCiAgfTsK
CiAgZW51bSB7CiAgICBOT19DT01QUkVTU0lPTiwKICAgIEJVSUxUX0lOX0xaSAogIH07CgogIFNw
UG9EYXRhQmFzZSgpOwogIH5TcFBvRGF0YUJhc2UoKTsKCiAgc3RhdGljIGNoYXIqIEdldEZpcnN0
Q2xhc3NOYW1lKCk7CiAgc3RhdGljIGNoYXIqIEdldE5leHRDbGFzc05hbWUoKTsKICB2b2lkIFNl
dE5hbWUodm9pZCAqICZwdHIsIGNoYXIgKiBuYW1lKTsKICB2b2lkKiBMb29rdXBOYW1lKGNoYXIg
KiBuYW1lKTsKCiAgdm9pZCBTZXRQb2ludGVyKHZvaWQgKiZwdHIpOwogIHZvaWQgVW5zZXRQb2lu
dGVyKHZvaWQgKiZwdHIpOwoKCiAgdm9pZCogQWRkKHZvaWQgKiZwdHIsdW5zaWduZWQgaW50IHNp
emUsaW50IGNsYXNzSWQpOwoKICB2b2lkKiBSZW1vdmUodm9pZCAqJnB0cik7CgogIGNoYXIqIENy
ZWF0ZUJ1ZmZlcihpbnQgY29tcHJlc3Npb25UeXBlID0gTk9fQ09NUFJFU1NJT04pOwogIGNoYXIq
IENyZWF0ZUJ1ZmZlcihpbnQgY29tcHJlc3Npb25UeXBlLCB2b2lkICogcHRyKTsKICBpbnQgUmVj
b25zdHJ1Y3RCdWZmZXIoY2hhciAqKTsKCgogIHZvaWQgUHJpbnQoKTsKCiAgaW50IEdldE51bWJl
ck9mKGludCBjbGFzc0lkKTsKICB2b2lkKiBHZXRGaXJzdENsYXNzKGludCBjbGFzc0lkKTsKICB2
b2lkKiBHZXROZXh0Q2xhc3MoKTsKICB2b2lkKiBHZXRGaXJzdENsYXNzQmxvY2soaW50IGNsYXNz
SWQpOwogIHZvaWQqIEdldE5leHRDbGFzc0Jsb2NrKCk7CgoKICBpbnQgR2V0U2l6ZSh2b2lkICpw
dHIpOwoKICB2b2lkIEluY3JlbWVudENvdW50KGludCBjbGFzc0lkLCBpbnQgbnVtSXRlbXMgPSAx
KTsKCiAgdm9pZCBEZWNyZW1lbnRDb3VudChpbnQgY2xhc3NJZCwgaW50IG51bUl0ZW1zID0gMSk7
CgoKICBpbnQgR2V0Q2xhc3NJZChjaGFyICopOwogIGludCBMb29rdXBDbGFzc0lkKGNoYXIgKik7
CiAgY29uc3QgY2hhciogR2V0Q2xhc3NUeXBlTmFtZShpbnQgY2xhc3NJZCk7CgogIHZvaWQgUmVn
aXN0ZXJTaW5nbGVDb25zdHJ1Y3RvcihpbnQgY2xhc3NJZCwgU3BQb1NpbmdsZUNvbnN0cnVjdG9y
IGZ1bmMpOwoKICB2b2lkIFJlZ2lzdGVyQXJyYXlDb25zdHJ1Y3RvcihpbnQgY2xhc3NJZCwgU3BQ
b0FycmF5Q29uc3RydWN0b3IgZnVuYyk7CgogIHZvaWQgUmVnaXN0ZXJTaXplKGludCBjbGFzc0lk
LCBpbnQgc2l6ZSk7CgoKCiAgc3RhdGljIHZvaWQgU3RvcmVWdGFibGVJbmZvKHZvaWQgKipwT2Jq
ZWN0KTsKICB2b2lkIE1ha2VWdGFibGVJbnRvT2Zmc2V0cyh2b2lkICoqcEJhc2VBZGRyLCBpbnQg
b2JqZWN0U2l6ZSk7CiAgdm9pZCAqTG9va3VwQWRkcmVzcyhjb25zdCBTcEtleSYgayk7CiAgdm9p
ZCAqTG9va3VwQWRkcmVzcyh2b2lkKiBsb3csIHZvaWQqIGhpZ2gpOwogIHZvaWQgKkxvb2t1cEFk
ZHJlc3Modm9pZCAqIHB0cik7CiAgaW50IE51bVZ0YWJsZXMoaW50IGNsYXNzSWQpOwogIHN0YXRp
YyB2b2lkIFNldEFkZFRvVnRhYmxlTGlzdCgpe0FkZFRvVnRhYmxlTGlzdCA9IDE7fQogIHN0YXRp
YyB2b2lkIFVuc2V0QWRkVG9WdGFibGVMaXN0KCl7QWRkVG9WdGFibGVMaXN0ID0gMDt9CiAgc3Rh
dGljIGludCBBZGRUb1Z0YWJsZUxpc3RJc1NldCgpe3JldHVybiBBZGRUb1Z0YWJsZUxpc3QgPT0g
MTt9CiAgc3RhdGljIHZvaWQgU2V0QWRkVG9WdGFibGVUeXBlKGludCB0eXBlKXtBZGRUb1Z0YWJs
ZVR5cGUgPSB0eXBlO30KICBzdGF0aWMgdm9pZCBVbnNldEFkZFRvVnRhYmxlVHlwZSgpe0FkZFRv
VnRhYmxlVHlwZSA9IC0xO30KCgogIHN0YXRpYyBpbnQgUE9fZXJybm87CiAgc3RhdGljIGludCBE
ZWZhdWx0QWRkVHlwZTsKICBzdGF0aWMgaW50IERvTm90QWxsb2NhdGVNZW1vcnlJbkNvbnN0cnVj
dG9yOwoKCiAgc3RhdGljIHZvaWQgUE9fcGVycm9yKGNoYXIqIG1zZyk7CiAgdm9pZCBTZXRHZXRO
ZXh0Q2xhc3NUeXBlKGludCB2YWwpe0dldE5leHRDbGFzc1R5cGUgPSB2YWw7fQogIGludCBHZXRH
ZXROZXh0Q2xhc3NUeXBlKCl7cmV0dXJuIEdldE5leHRDbGFzc1R5cGU7fQoKICBpbnQgVmVyaWZ5
RGF0YWJhc2UoKTsKCiAgaW50IEZpbmREYW5nbGluZ1BvaW50ZXJzKCk7CiAgaW50IEZpbmRXaWxk
UG9pbnRlcnMoKTsKICB2b2lkIFJlc2V0UE9FcnJubygpe1BPX2Vycm5vID0gMDt9CgogIHZvaWQg
SW5jcmVtZW50QWRkTGV2ZWxDb3VudCgpOwogIHZvaWQgRGVjcmVtZW50QWRkTGV2ZWxDb3VudCgp
OwogIGludCBHZXRBZGRMZXZlbENvdW50KCl7cmV0dXJuIEFkZExldmVsQ291bnQ7fQoKICBzdGF0
aWMgdm9pZCBTZXREZXN0cm95U3RhdGljRGF0YU1lbWJlcnMoKXtEZXN0cm95U3RhdGljRGF0YU1l
bWJlcnMgPSAxO30KCnByb3RlY3RlZDoKCiAgaW50IElzRGFuZ2xpbmcodm9pZCoqIGFycmF5T2ZQ
b2ludGVycywgY29uc3QgaW50IG51bVBvaW50ZXJzLAogICAgICAgICAgICAgICAgIGNvbnN0IFNw
SW50ZXJ2YWxLZXkmIG1lbVJhbmdlKTsKICBjaGFyKiBGaW5kTmFtZWQoY29uc3Qgdm9pZCogcHRy
KTsKICB2b2lkIFByaW50QmxvY2soU3BNZW1CbGtIb2xkZXIqIEFkZHJQdHIsCiAgICAgICAgICAg
ICAgICAgIFNwRHluUHRyQXJyYXkqIGNsYXNzSURzLAogICAgICAgICAgICAgICAgICBTcEJpbmFy
eVRyZWUqIHByaW50VHJlZSwKICAgICAgICAgICAgICAgICAgdm9pZCoqIGFycmF5T2ZQdHJzLAog
ICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbnVtUG9pbnRlcnMpOwogIHZvaWQgUHJpbnRQdHJz
KFNwRHluUHRyQXJyYXkmLCBpbnQsIGludCwgaW50KTsKCiAgdm9pZCBBZGRUb0NsYXNzSWRNYXBw
aW5nVGFibGUoY2hhciAqbmFtZSwgaW50IG9sZENsYXNzSWQpOwogIGNoYXIqIFNldHVwQ2xhc3NJ
ZE1hcHBpbmdUYWJsZShjaGFyICogYnVmZiwgaW50IG5UeXBlcyk7CiAgY2hhciogUmVjb25zdHJ1
Y3ROYW1lZE9iamVjdHMoY2hhciAqYnVmZiwgaW50IG5OYW1lZE9iamVjdHMpOwogIGNoYXIqIFJl
Y29uc3RydWN0T2JqZWN0cyhjaGFyICogYnVmZiwgaW50IG5JdGVtcyk7CiAgaW50IENvbXByZXNz
QnVmZmVyKGNoYXIgKmJ1ZmZlciwgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgaW50
IGNvbXByZXNzaW9uVHlwZT0gTk9fQ09NUFJFU1NJT04pOwogIGNoYXIqIERlY29tcHJlc3NCdWZm
ZXIoY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSwgaW50IGNvbXByZXNzaW9uVHlwZSk7CiAgaW50IEdl
dEJ1ZmZlclNpemUoaW50JiBudW1UeXBlcywgaW50JiBudW1JdGVtcywgaW50JiBudW1OYW1lZE9i
amVjdHMpOwoKICB2b2lkIFVwZGF0ZVBvaW50ZXJzKCk7CiAgc3RhdGljIHZvaWQgSW50ZXJuYWxT
dG9yZVZ0YWJsZUluZm8odm9pZCAqKnBPYmplY3QpOwoKCiAgU3BCaW5hcnlUcmVlKiBMaXN0T2ZB
bGxQb2ludGVyczsKICBTcER5blB0ckFycmF5KiBDbGFzc0NvdW50czsKCiAgc3RhdGljIFNwQmlu
YXJ5VHJlZSogQ2xhc3NJRHM7CiAgc3RhdGljIFNwRHluUHRyQXJyYXkqIFNpemVMaXN0OwogIHN0
YXRpYyBTcER5blB0ckFycmF5KiBTaW5nbGVDb25zdHJ1Y3RvcnM7CiAgc3RhdGljIFNwRHluUHRy
QXJyYXkqIEFycmF5Q29uc3RydWN0b3JzOwogIHN0YXRpYyBTcER5blB0ckFycmF5KiBWdGFibGVP
ZmZzZXRWYWx1ZXM7CiAgc3RhdGljIGludCBOdW1DbGFzc2VzOwogIHN0YXRpYyBpbnQgQ2xhc3NO
YW1lSXRlcmF0aW9uOwoKICBTcER5blB0ckFycmF5IERlbGF5ZWRQdHJzQXJyYXk7CiAgU3BMaXN0
KiBQb3N0cG9uZWRBdHRhY2hMaXN0OwogIFNwRHluUHRyQXJyYXkqIExpc3RPZkNsYXNzZXNCeUNs
YXNzVHlwZTsKICBTcEJpbmFyeVRyZWUqIFB0cnNCeU5hbWU7CgogIGludCBDdXJyZW50Q2xhc3NG
b3JHZXROZXh0Q2xhc3M7CiAgc3RhdGljIGludCBBZGRUb1Z0YWJsZUxpc3Q7CiAgc3RhdGljIGlu
dCBBZGRUb1Z0YWJsZVR5cGU7CgogIGludCBHZXROZXh0TnVtQXJyYXlFbGVtZW50czsKICBpbnQg
R2V0TmV4dE9iamVjdFNpemU7CgogIHZvaWQgKiBDdXJyZW50SXRlbVBvaW50ZXI7CiAgdm9pZCAq
IEN1cnJlbnRBcnJheVBvaW50ZXI7CgogIFNwTWVtQmxrSG9sZGVyICogQ3VycmVudENsYXNzSW5C
bG9jazsKICBpbnQgQ3VycmVudEJsb2NrU2l6ZTsKICBpbnQgU2l6ZU9mQ2xhc3NJbkN1cnJlbnRC
bG9jazsKCiAgaW50IEdldE5leHRDbGFzc1R5cGU7CiAgaW50IEFkZExldmVsQ291bnQ7CiAgc3Rh
dGljIGludCBEZXN0cm95U3RhdGljRGF0YU1lbWJlcnM7Cgp9OwoKCmlubGluZSB2b2lkIFNwUG9E
YXRhQmFzZTo6U3RvcmVWdGFibGVJbmZvKHZvaWQgKipwT2JqZWN0KXsKICBpZiAoQWRkVG9WdGFi
bGVMaXN0SXNTZXQoKSl7CiAgICBpZiAoQWRkVG9WdGFibGVUeXBlICE9IC0xKXsKICAgICAgSW50
ZXJuYWxTdG9yZVZ0YWJsZUluZm8ocE9iamVjdCk7CiAgICB9CiAgfQp9CgoKZXh0ZXJuIFNwUG9E
YXRhQmFzZSAqIERlZmF1bHREYXRhQmFzZTsKZXh0ZXJuIGludCBQZXJzaXN0ZW5jZUVuYWJsZWQ7
CgpjbGFzcyBEVU1NWV9DTEFTU19KVVNUX1RPX0dFVF9TSVpFX09GX1ZUQUJMRSB7CnByaXZhdGU6
CiAgdmlydHVhbCB2b2lkIG1ldGhvZF9UaEF0U2hPdUxkTmVWZVJiRWNBbExlRCgpOwoKICBpbnQg
ZG91bW15X3ZfYWxsaWduOwoKcHJvdGVjdGVkOgpwdWJsaWM6CgogIERVTU1ZX0NMQVNTX0pVU1Rf
VE9fR0VUX1NJWkVfT0ZfVlRBQkxFKCk6ZG91bW15X3ZfYWxsaWduKDApe30KCiAgdmlydHVhbCB+
RFVNTVlfQ0xBU1NfSlVTVF9UT19HRVRfU0laRV9PRl9WVEFCTEUoKXt9Owp9OwoKY2xhc3MgU3BQ
ZXJzaXN0ZW5jZUJhc2VDbGFzcyA6IHByaXZhdGUgRFVNTVlfQ0xBU1NfSlVTVF9UT19HRVRfU0la
RV9PRl9WVEFCTEUgewogIHB1YmxpYzoKICAgIFNwUGVyc2lzdGVuY2VCYXNlQ2xhc3MoKTsKfTsK
CgoKCgoKCgoKCgoKCgoKCgpjbGFzcyBTcEl0ZW0gewogIGZyaWVuZCBjbGFzcyBTcEl0ZW1RdWV1
ZTsKICBmcmllbmQgY2xhc3MgU3BJdGVtU3RhY2s7CiBwdWJsaWM6CiAgIFNwSXRlbSAqR2V0TmV4
dCgpIHsgcmV0dXJuIE5leHQ7IH0KIHByaXZhdGU6CiAgIFNwSXRlbSogTmV4dDsKfTsKCgoKCgpj
bGFzcyBTcENodW5rTGlzdCB7CnB1YmxpYzoKICB2b2lkKiBHZXRDaHVuaygpe3JldHVybiBDaHVu
azt9CiAgdm9pZCBTZXRDaHVuayh2b2lkKiBjKXtDaHVuayA9IGM7fQogIFNwQ2h1bmtMaXN0KiBH
ZXROZXh0KCl7cmV0dXJuIE5leHQ7fQogIHZvaWQgU2V0TmV4dChTcENodW5rTGlzdCogY2wpe05l
eHQgPSBjbDt9CnByaXZhdGU6CiAgdm9pZCogQ2h1bms7CiAgU3BDaHVua0xpc3QqIE5leHQ7Cn07
CgoKY2xhc3MgU3BJdGVtU3RhY2sgewogIHB1YmxpYzoKICAgIFNwSXRlbVN0YWNrKCkgOiBUb3Ao
MCkge30KICAgIHZvaWQgSW5zZXJ0KFNwSXRlbSogaXRlbSkgewogICAgICBpdGVtLT5OZXh0ID0g
VG9wOwogICAgICBUb3AgPSBpdGVtOwogICAgfQogICAgU3BJdGVtKiBSZW1vdmUoKSB7CiAgICAg
IFNwSXRlbSogaXRlbSA9IFRvcDsKICAgICAgaWYgKFRvcCkgewogICAgICAgIFRvcCA9IFRvcC0+
TmV4dDsKICAgICAgfQogICAgICByZXR1cm4gaXRlbTsKICAgIH0KICBwcml2YXRlOgogICAgU3BJ
dGVtKiBUb3A7Cn07CgoKY2xhc3MgU3BNZW1wb29sIDogcHVibGljIFNwSXRlbSB7CiAgcHVibGlj
OgogICAgdmlydHVhbCB+U3BNZW1wb29sKCkge30KICAgIHZpcnR1YWwgdm9pZCBEZWFsbG9jYXRl
KCkgPSAwOwp9OwoKCmNsYXNzIFNwSG9sZGVySXRlbSA6IHB1YmxpYyBTcE1lbXBvb2wgewogIHB1
YmxpYzoKICAgIHZvaWQgU2V0VmFsdWUodm9pZCogdmFsdWUpOwogICAgdm9pZCogR2V0VmFsdWUo
KTsKICBwcml2YXRlOgogICAgdm9pZCogVmFsdWU7Cn07CgppbmxpbmUgdm9pZCBTcEhvbGRlckl0
ZW06OlNldFZhbHVlKHZvaWQqIHZhbHVlKSB7VmFsdWUgPSB2YWx1ZTt9CgppbmxpbmUgdm9pZCog
U3BIb2xkZXJJdGVtOjpHZXRWYWx1ZSgpIHsgcmV0dXJuIFZhbHVlOyB9CgpjbGFzcyBTcEhvbGRl
ckl0ZW1NZW1wb29sSXRlbVN0YWNrOyBjbGFzcyBTcEhvbGRlckl0ZW1NZW1wb29sIDogcHVibGlj
IFNwSG9sZGVySXRlbSB7IHB1YmxpYzogc3RhdGljIFNwSG9sZGVySXRlbU1lbXBvb2wqIEFsbG9j
YXRlKCk7IHZpcnR1YWwgdm9pZCBEZWFsbG9jYXRlKCk7IHByaXZhdGU6IHN0YXRpYyBTcEhvbGRl
ckl0ZW1NZW1wb29sSXRlbVN0YWNrIFBvb2w7IHN0YXRpYyBTcEhvbGRlckl0ZW1NZW1wb29sKiBN
YWtlTW9yZUl0ZW1zKGludCBzaXplKTsgfTsgY2xhc3MgU3BIb2xkZXJJdGVtTWVtcG9vbEl0ZW1T
dGFjayB7IHB1YmxpYzogU3BIb2xkZXJJdGVtTWVtcG9vbEl0ZW1TdGFjaygpOkxpc3QoMCkge30g
flNwSG9sZGVySXRlbU1lbXBvb2xJdGVtU3RhY2soKTsgdm9pZCBJbnNlcnQoU3BIb2xkZXJJdGVt
TWVtcG9vbCogaXRlbSkge1N0YWNrLkluc2VydChpdGVtKTt9IFNwSG9sZGVySXRlbU1lbXBvb2wq
IFJlbW92ZSgpIHtyZXR1cm4gKFNwSG9sZGVySXRlbU1lbXBvb2wqKSBTdGFjay5SZW1vdmUoKTt9
IHZvaWQgQWRkQ2h1bmsoU3BIb2xkZXJJdGVtTWVtcG9vbCopOyBwcml2YXRlOiBTcENodW5rTGlz
dCogTGlzdDsgU3BJdGVtU3RhY2sgU3RhY2s7IH07IGlubGluZSBTcEhvbGRlckl0ZW1NZW1wb29s
KiBTcEhvbGRlckl0ZW1NZW1wb29sOjpBbGxvY2F0ZSgpIHsgU3BIb2xkZXJJdGVtTWVtcG9vbCog
aXRlbT0gUG9vbC5SZW1vdmUoKTsgaWYoICFpdGVtICkgeyBpdGVtID0gTWFrZU1vcmVJdGVtcygx
MDAwKTsgfSByZXR1cm4gaXRlbTsgfSBpbmxpbmUgdm9pZCBTcEhvbGRlckl0ZW1NZW1wb29sOjpE
ZWFsbG9jYXRlKCkgeyBQb29sLkluc2VydCggdGhpcyApOyB9IGlubGluZSBTcEhvbGRlckl0ZW0q
IEFMTE9DQVRFX1NwSG9sZGVySXRlbSgpIHsgcmV0dXJuIFNwSG9sZGVySXRlbU1lbXBvb2w6OkFs
bG9jYXRlKCk7IH0gaW5saW5lIHZvaWQgREVBTExPQ0FURV9TcEhvbGRlckl0ZW0oIFNwSG9sZGVy
SXRlbSogaXRlbSApIHsgaXRlbS0+RGVhbGxvY2F0ZSgpOyB9OwoKY2xhc3MgU3BQb01lbXBvb2wg
ewogIHB1YmxpYzoKICAgIFNwUG9NZW1wb29sKCk7CiAgICB+U3BQb01lbXBvb2woKTsKCiAgICBp
bnQgQWRkQ2h1bmsodm9pZCogY2h1bmssIGludCBmcmVlSWQsIGludCBudW1FbGVtZW50cywgaW50
IHNpemVPZkVsZW1lbnQpOwogICAgdm9pZCogUmVtb3ZlSXRlbShpbnQgZnJlZUlkKTsKICAgIHZv
aWQgUmV0dXJuSXRlbShpbnQgZnJlZUlkLCB2b2lkKiBpdGVtKTsKCiAgcHJvdGVjdGVkOgogICAg
dm9pZCBHZXRNb3JlTGlzdHMoKTsKCiAgcHJpdmF0ZToKCiAgICBTcEhvbGRlckl0ZW1NZW1wb29s
SXRlbVN0YWNrKiBQb29sTGlzdDsKICAgIGludCBOZXh0SWQ7CiAgICBpbnQgTnVtTGlzdHM7Cgp9
OwoKaW5saW5lIHZvaWQqIFNwUG9NZW1wb29sOjpSZW1vdmVJdGVtKGludCBmcmVlSWQpIHsKICB2
b2lkKiByYyA9ICh2b2lkICopIDA7CiAgaWYgKGZyZWVJZCAhPSAtMSkgewogICAgaWYgKGZyZWVJ
ZCA8IE5leHRJZCkgewoKCiAgICAgIFNwSG9sZGVySXRlbU1lbXBvb2wqIGhvbGRlciA9IChTcEhv
bGRlckl0ZW1NZW1wb29sICopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
b29sTGlzdFtmcmVlSWRdLlJlbW92ZSgpOwogICAgICBpZiAoaG9sZGVyKSB7CiAgICAgICAgcmMg
PSBob2xkZXItPkdldFZhbHVlKCk7CiAgICAgICAgREVBTExPQ0FURV9TcEhvbGRlckl0ZW0oaG9s
ZGVyKTsKICAgICAgfQogICAgfQogIH0KICByZXR1cm4gcmM7Cn0KCmlubGluZSB2b2lkIFNwUG9N
ZW1wb29sOjpSZXR1cm5JdGVtKGludCBmcmVlSWQsIHZvaWQqIGl0ZW0pIHsKCiAgaWYgKGZyZWVJ
ZCAhPSAtMSkgewogICAgU3BIb2xkZXJJdGVtTWVtcG9vbCogaG9sZGVyID0gKFNwSG9sZGVySXRl
bU1lbXBvb2wgKikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTExPQ0FURV9T
cEhvbGRlckl0ZW0oKTsKICAgIGhvbGRlci0+U2V0VmFsdWUoaXRlbSk7CiAgICBQb29sTGlzdFtm
cmVlSWRdLkluc2VydChob2xkZXIpOwogIH0KfQoKCgoKZXh0ZXJuIFNwUG9NZW1wb29sKiBHbG9i
YWxTcFBvTWVtcG9vbDsKCgoKCgplbnVtIHsKICBOT1JNQUxfVFJFRV9NT0RFLAogIFNQTEFZX1RS
RUVfTU9ERSwKICBCQUxBTkNFRF9UUkVFX01PREUsCiAgTl9UUkVFX01PREVTCn07CgoKCgoKCgoK
CgoKCgpjbGFzcyBTcEl0ZXJhdG9yIHsKICBwdWJsaWM6CgogICAgdmlydHVhbCB2b2lkICpHZXRD
dXJyZW50RWxlbWVudCgpIGNvbnN0PTA7CgoKICAgIG9wZXJhdG9yIHZvaWQqKCkgY29uc3QgeyBy
ZXR1cm4gR2V0Q3VycmVudEVsZW1lbnQoKTsgfQoKICAgIHZpcnR1YWwgdm9pZCAqR2V0Rmlyc3RF
bGVtZW50KCk9MDsKCgogICAgdmlydHVhbCB2b2lkICpHZXRMYXN0RWxlbWVudCgpPTA7CgoKCgoK
ICAgIHZpcnR1YWwgdm9pZCAqR2V0TmV4dEVsZW1lbnQoKT0wOwoKCiAgICB2b2lkICpvcGVyYXRv
cisrKCkgeyByZXR1cm4gR2V0TmV4dEVsZW1lbnQoKTsgfQoKCgogICAgdm9pZCAqb3BlcmF0b3Ir
KyhpbnQpIHsKICAgICAgdm9pZCAqciA9IEdldEN1cnJlbnRFbGVtZW50KCk7CiAgICAgIEdldE5l
eHRFbGVtZW50KCk7CiAgICAgIHJldHVybiByOwogICAgfQoKCgoKCiAgICB2aXJ0dWFsIHZvaWQg
KkdldFByZXZpb3VzRWxlbWVudCgpPTA7CgoKICAgIHZvaWQgKm9wZXJhdG9yLS0oKSB7IHJldHVy
biBHZXRQcmV2aW91c0VsZW1lbnQoKTsgfQoKCgogICAgdm9pZCAqb3BlcmF0b3ItLShpbnQpIHsK
ICAgICAgdm9pZCAqciA9IEdldEN1cnJlbnRFbGVtZW50KCk7CiAgICAgIEdldFByZXZpb3VzRWxl
bWVudCgpOwogICAgICByZXR1cm4gcjsKICAgIH0KCgoKCiAgICB2aXJ0dWFsIHZvaWQgKlJlbW92
ZUN1cnJlbnRFbGVtZW50QW5kR29Ub1ByZXZpb3VzKHZvaWQpPTA7CgoKCgogICAgdmlydHVhbCB2
b2lkICpSZW1vdmVDdXJyZW50RWxlbWVudEFuZEdvVG9OZXh0KHZvaWQpPTA7CgoKfTsKCgpjbGFz
cyBTcE1hcEl0ZXJhdG9yIDogcHVibGljIFNwSXRlcmF0b3IgewogIHB1YmxpYzoKICAgIHZpcnR1
YWwgZG91YmxlIEdldEN1cnJlbnRLZXkoKSBjb25zdD0wOwogICAgdmlydHVhbCBjaGFyKiBHZXRD
dXJyZW50S2V5TmFtZSgpIGNvbnN0PTA7Cn07CgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIGludCAo
Klplcm9BcmdJbnRSZXRGbmNQdHIpICh2b2lkKTsKCmNsYXNzIFNwRm5jUHRyTGlzdF9JVEVNIHsK
cHJpdmF0ZToKICBmcmllbmQgY2xhc3MgU3BGbmNQdHJMaXN0OwogIFplcm9BcmdJbnRSZXRGbmNQ
dHIgUmVmZXJlbmNlOwogIFNwRm5jUHRyTGlzdF9JVEVNICpGb3J3YXJkTGluazsKICBTcEZuY1B0
ckxpc3RfSVRFTSAqQmFja3dhcmRMaW5rOwpwdWJsaWM6CiAgU3BGbmNQdHJMaXN0X0lURU0oKTog
Rm9yd2FyZExpbmsoKFNwRm5jUHRyTGlzdF9JVEVNICopIDApLAogICAgICAgICAgICAgICAgICAg
ICAgIEJhY2t3YXJkTGluaygoU3BGbmNQdHJMaXN0X0lURU0gKikgMCkge30KICB2b2lkIFJlc2V0
KCl7IEZvcndhcmRMaW5rID0gQmFja3dhcmRMaW5rID0gKFNwRm5jUHRyTGlzdF9JVEVNICopIDA7
fQp9OwoKY2xhc3MgU3BGbmNQdHJMaXN0OiBwcml2YXRlIFNwUGVyc2lzdGVuY2VCYXNlQ2xhc3N7
CiBwdWJsaWM6CgoKCgoKCgogICB2b2lkIFJlc2V0KCk7CgoKCgoKCgogICBpbnQgR2V0TnVtRWxl
bWVudHMoKSBjb25zdCB7cmV0dXJuIGxlbmd0aDt9CgoKCgoKCgogICBaZXJvQXJnSW50UmV0Rm5j
UHRyIEdldEZpcnN0RWxlbWVudCgpIHsKICAgICAgWmVyb0FyZ0ludFJldEZuY1B0ciBSZWY7CiAg
ICAgIGlmIChsZW5ndGgpIHsKICAgICAgICAgY3VycmVudCA9IHRvcDsKICAgICAgICAgUmVmID0g
dG9wLT5SZWZlcmVuY2U7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgIGN1cnJlbnQgPSAo
U3BGbmNQdHJMaXN0X0lURU0gKikgMDsKICAgICAgfQogICAgICByZXR1cm4gUmVmOwogICB9Cgog
IFplcm9BcmdJbnRSZXRGbmNQdHIgUmVtb3ZlRmlyc3RFbGVtZW50KCkgeyByZXR1cm4gUmVtb3Zl
VG9wKCk7fQogIFplcm9BcmdJbnRSZXRGbmNQdHIgUmVtb3ZlTGFzdEVsZW1lbnQoKSB7IHJldHVy
biBSZW1vdmVCb3QoKTt9CgoKCgoKCgogICBaZXJvQXJnSW50UmV0Rm5jUHRyIEdldExhc3RFbGVt
ZW50KCkgewogICAgICBaZXJvQXJnSW50UmV0Rm5jUHRyIFJlZjsKICAgICAgaWYgKGxlbmd0aCkg
ewogICAgICAgICBjdXJyZW50ID0gYm90OwogICAgICAgICBSZWYgPSBib3QtPlJlZmVyZW5jZTsK
ICAgICAgfQogICAgICBlbHNlewogICAgICAgICBjdXJyZW50ID0gKFNwRm5jUHRyTGlzdF9JVEVN
ICopIDA7CiAgICAgIH0KICAgICAgcmV0dXJuIFJlZjsKICAgfQoKICAgWmVyb0FyZ0ludFJldEZu
Y1B0ciBHZXRDdXJyZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQtPlJlZmVyZW5j
ZTsgfQoKCgoKCgoKICAgWmVyb0FyZ0ludFJldEZuY1B0ciBHZXROZXh0RWxlbWVudCgpIHsKICAg
ICAgaWYgKGN1cnJlbnQgPT0gYm90KSB7CiAgICAgICAgIHJldHVybiBib3QtPlJlZmVyZW5jZTsK
ICAgICAgfWVsc2V7CiAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5Gb3J3YXJkTGluazsKICAg
ICAgICAgcmV0dXJuIGN1cnJlbnQtPlJlZmVyZW5jZTsKICAgICAgfQogICB9CgoKCgoKCgogICBa
ZXJvQXJnSW50UmV0Rm5jUHRyIEdldFByZXZpb3VzRWxlbWVudCgpIHsKICAgICAgaWYgKGN1cnJl
bnQgPT0gdG9wKSB7CiAgICAgICAgIHJldHVybiB0b3AtPlJlZmVyZW5jZTsKICAgICAgfWVsc2V7
CiAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5CYWNrd2FyZExpbms7CiAgICAgICAgIHJldHVy
biBjdXJyZW50LT5SZWZlcmVuY2U7CiAgICAgIH0KICAgfQoKCgoKCgoKICAgdm9pZCBJbnNlcnQo
WmVyb0FyZ0ludFJldEZuY1B0ciB2LCBpbnQgVG9wT3JCb3QpIHsKICAgICBpZiAoVG9wT3JCb3Qg
PT0gVE9QX0ZMQUcpCiAgICAgICBJbnNlcnRUb3Aodik7CiAgICAgZWxzZQogICAgICAgSW5zZXJ0
Qm90KHYpOwogICB9CiAgIHZvaWQgSW5zZXJ0KFplcm9BcmdJbnRSZXRGbmNQdHIgdikgeyBJbnNl
cnQodiwgVE9QX0ZMQUcpOyB9CgoKCgoKCgogICB2b2lkIEluc2VydFRvcChaZXJvQXJnSW50UmV0
Rm5jUHRyIHYpIHsKICAgICAgU3BGbmNQdHJMaXN0X0lURU0gKml0ZW0gPSBOZXdJdGVtKCk7CiAg
ICAgIGl0ZW0tPlJlZmVyZW5jZSA9IHY7CiAgICAgIEluc2VydFRvcEl0ZW0oaXRlbSk7CiAgIH0K
CgoKCgoKCiAgIHZvaWQgSW5zZXJ0Qm90KFplcm9BcmdJbnRSZXRGbmNQdHIgdikgewogICAgICBT
cEZuY1B0ckxpc3RfSVRFTSAqaXRlbSA9IE5ld0l0ZW0oKTsKICAgICAgaXRlbS0+UmVmZXJlbmNl
ID0gdjsKICAgICAgSW5zZXJ0Qm90SXRlbShpdGVtKTsKICAgfQoKCgoKCgoKICAgIFplcm9BcmdJ
bnRSZXRGbmNQdHIgUmVtb3ZlKFplcm9BcmdJbnRSZXRGbmNQdHIgdik7CgoKCgoKCgogICBaZXJv
QXJnSW50UmV0Rm5jUHRyIG9wZXJhdG9yICsrICgpIHtyZXR1cm4gR2V0TmV4dEVsZW1lbnQoKTt9
CgoKCgoKCgogICBaZXJvQXJnSW50UmV0Rm5jUHRyIG9wZXJhdG9yIC0tICgpIHtyZXR1cm4gR2V0
UHJldmlvdXNFbGVtZW50KCk7fQoKICAgdm9pZCBvcGVyYXRvciArPSAoWmVyb0FyZ0ludFJldEZu
Y1B0ciB2KSB7CiAgICAgIEluc2VydEJvdCh2KTsKICAgfQoKCgoKCgogICBaZXJvQXJnSW50UmV0
Rm5jUHRyIG9wZXJhdG9yIC09IChaZXJvQXJnSW50UmV0Rm5jUHRyIHYpIHsKICAgICAgcmV0dXJu
IFJlbW92ZSh2KTsKICAgfQoKCgoKCgoKICAgU3BGbmNQdHJMaXN0KCk7Cgpwcm90ZWN0ZWQ6CiAg
ZW51bSB7CiAgICBUT1BfRkxBRywKICAgIEJPVF9GTEFHCiAgfTsKCgpwcml2YXRlOgoKCgoKCgoK
ICAgU3BGbmNQdHJMaXN0X0lURU0gKlJlbW92ZVRvcEl0ZW0oKXsKICAgICAgU3BGbmNQdHJMaXN0
X0lURU0gKml0ZW07CiAgICAgIGlmIChsZW5ndGggPT0gMCkgewogICAgICAgICByZXR1cm4gKFNw
Rm5jUHRyTGlzdF9JVEVNICopIDA7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgIGl0ZW0g
PSB0b3A7CiAgICAgICAgIGlmIChjdXJyZW50ID09IHRvcCl7CiAgICAgICAgICAgY3VycmVudCA9
IHRvcC0+Rm9yd2FyZExpbms7CiAgICAgICAgIH0KICAgICAgICAgdG9wID0gdG9wLT5Gb3J3YXJk
TGluazsKICAgICAgICAgaWYgKHRvcCAhPSAoU3BGbmNQdHJMaXN0X0lURU0gKikgMCkKICAgICAg
ICAgICB0b3AtPkJhY2t3YXJkTGluayA9IChTcEZuY1B0ckxpc3RfSVRFTSAqKSAwOwogICAgICAg
ICBsZW5ndGgtLTsKICAgICAgICAgaWYgKGxlbmd0aCA9PSAwKQogICAgICAgICAgIGJvdCA9IChT
cEZuY1B0ckxpc3RfSVRFTSAqKSAwOwogICAgICAgICByZXR1cm4gaXRlbTsKICAgICAgfQogICB9
CgoKCgoKCgogICBTcEZuY1B0ckxpc3RfSVRFTSAqUmVtb3ZlQm90SXRlbSgpewogICAgICBTcEZu
Y1B0ckxpc3RfSVRFTSAqaXRlbTsKICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7CiAgICAgICAgIHJl
dHVybiAoU3BGbmNQdHJMaXN0X0lURU0gKikgMDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAg
ICAgaXRlbSA9IGJvdDsKICAgICAgICAgaWYgKGN1cnJlbnQgPT0gYm90KXsKICAgICAgICAgICBj
dXJyZW50ID0gYm90LT5CYWNrd2FyZExpbms7CiAgICAgICAgIH0KICAgICAgICAgYm90ID0gYm90
LT5CYWNrd2FyZExpbms7CiAgICAgICAgIGlmIChib3QgIT0gKFNwRm5jUHRyTGlzdF9JVEVNICop
IDApCiAgICAgICAgICAgYm90LT5Gb3J3YXJkTGluayA9IChTcEZuY1B0ckxpc3RfSVRFTSAqKSAw
OwogICAgICAgICBsZW5ndGgtLTsKICAgICAgICAgaWYgKGxlbmd0aCA9PSAwKQogICAgICAgICAg
IHRvcCA9IChTcEZuY1B0ckxpc3RfSVRFTSAqKSAwOwogICAgICAgICByZXR1cm4gaXRlbTsKICAg
ICAgfQogICB9CgoKCgoKCgogICB2b2lkIEluc2VydFRvcEl0ZW0oU3BGbmNQdHJMaXN0X0lURU0g
Kml0ZW0pewogICAgICBpdGVtLT5Gb3J3YXJkTGluayA9IHRvcDsKICAgICAgaXRlbS0+QmFja3dh
cmRMaW5rID0gKFNwRm5jUHRyTGlzdF9JVEVNICopIDA7CiAgICAgIGlmIChsZW5ndGggPT0gMCkg
ewogICAgICAgICBib3QgPSBpdGVtOwogICAgICB9ZWxzZXsKICAgICAgICAgdG9wLT5CYWNrd2Fy
ZExpbmsgPSBpdGVtOwogICAgICB9CiAgICAgIHRvcCA9IGl0ZW07CiAgICAgIGxlbmd0aCsrOwog
ICB9CgoKCgoKCgogICB2b2lkIEluc2VydEJvdEl0ZW0oU3BGbmNQdHJMaXN0X0lURU0gKml0ZW0p
ewogICAgICBpdGVtLT5Gb3J3YXJkTGluayA9IChTcEZuY1B0ckxpc3RfSVRFTSAqKSAwOwogICAg
ICBpdGVtLT5CYWNrd2FyZExpbmsgPSBib3Q7CiAgICAgIGlmIChsZW5ndGggPT0gMCkgewogICAg
ICAgICB0b3AgPSBpdGVtOwogICAgICB9ZWxzZXsKICAgICAgICAgYm90LT5Gb3J3YXJkTGluayA9
IGl0ZW07CiAgICAgIH0KICAgICAgYm90ID0gaXRlbTsKICAgICAgbGVuZ3RoKys7CiAgIH0KCiAg
IHZpcnR1YWwgU3BGbmNQdHJMaXN0X0lURU0gKk5ld0l0ZW0oKSB7CiAgICAgIFNwRm5jUHRyTGlz
dF9JVEVNICppdGVtOwogICAgICBpZiAoRnJlZUxpc3QtPkdldE51bUVsZW1lbnRzKCkpIHsKICAg
ICAgICBpdGVtID0gRnJlZUxpc3QtPlJlbW92ZVRvcEl0ZW0oKTsKICAgICAgICBpdGVtLT5SZXNl
dCgpOwogICAgICAgIHJldHVybiBpdGVtOwogICAgICB9ZWxzZXsKICAgICAgICBpdGVtID0gbmV3
IFNwRm5jUHRyTGlzdF9JVEVNWzIwMF07CiAgICAgICAgZm9yIChpbnQgaT0yOyBpPDIwMDsgaSsr
KSB7CiAgICAgICAgICBpdGVtW2ktMV0uRm9yd2FyZExpbmsgPSAmaXRlbVtpXTsKICAgICAgICB9
CiAgICAgICAgRnJlZUxpc3QtPnNldCgyMDAgLTEsICZpdGVtWzFdLCZpdGVtWzIwMCAtMV0pOwog
ICAgICAgIHJldHVybiAmaXRlbVswXTsKICAgICAgfQogICB9CgogICB2b2lkIERlbGV0ZUl0ZW0o
U3BGbmNQdHJMaXN0X0lURU0gKml0ZW0pIHtGcmVlTGlzdC0+SW5zZXJ0Qm90SXRlbShpdGVtKTt9
CgoKCgoKCgogICBaZXJvQXJnSW50UmV0Rm5jUHRyIFJlbW92ZVRvcCgpIHsKICAgICAgWmVyb0Fy
Z0ludFJldEZuY1B0ciBSZWZlcmVuY2U7CiAgICAgIFNwRm5jUHRyTGlzdF9JVEVNICppdGVtID0g
UmVtb3ZlVG9wSXRlbSgpOwogICAgICBpZiAoaXRlbSkgewogICAgICAgICBSZWZlcmVuY2UgPSBp
dGVtLT5SZWZlcmVuY2U7CiAgICAgICAgIERlbGV0ZUl0ZW0oaXRlbSk7CiAgICAgIH1lbHNlewog
ICAgICAgICA7CiAgICAgIH0KICAgICAgcmV0dXJuIFJlZmVyZW5jZTsKICAgfQoKCgoKCgoKICAg
WmVyb0FyZ0ludFJldEZuY1B0ciBSZW1vdmVCb3QoKSB7CiAgICAgIFplcm9BcmdJbnRSZXRGbmNQ
dHIgUmVmZXJlbmNlOwogICAgICBTcEZuY1B0ckxpc3RfSVRFTSAqaXRlbSA9IFJlbW92ZUJvdEl0
ZW0oKTsKICAgICAgaWYgKGl0ZW0pIHsKICAgICAgICAgUmVmZXJlbmNlID0gaXRlbS0+UmVmZXJl
bmNlOwogICAgICAgICBEZWxldGVJdGVtKGl0ZW0pOwogICAgICB9ZWxzZXsKICAgICAgICAgOwog
ICAgICB9CiAgICAgIHJldHVybiBSZWZlcmVuY2U7CiAgIH0KCiAgIHZvaWQgc2V0KGludCBsLAog
ICAgICAgICAgICBTcEZuY1B0ckxpc3RfSVRFTSAqdCwKICAgICAgICAgICAgU3BGbmNQdHJMaXN0
X0lURU0gKmIKICAgICAgICAgICAgKSB7CiAgICAgIGxlbmd0aCA9IGw7IHRvcCA9IHQ7IGJvdCA9
IGI7CiAgIH0KCiAgIGludCBsZW5ndGg7CiAgIFNwRm5jUHRyTGlzdF9JVEVNICp0b3A7CiAgIFNw
Rm5jUHRyTGlzdF9JVEVNICpib3Q7CiAgIFNwRm5jUHRyTGlzdF9JVEVNICpjdXJyZW50OwoKICAg
c3RhdGljIFNwRm5jUHRyTGlzdCAqRnJlZUxpc3Q7CiAgIHN0YXRpYyBpbnQgZG9uZTsKCn07CgoK
ZXh0ZXJuIGludCBQZXJzaXN0ZW5jZUVuYWJsZWQ7CmV4dGVybiBTcEZuY1B0ckxpc3QgKkluaXRQ
ZXJzaXN0ZW5jZVBsdWdJbnM7Cgp0eXBlZGVmIGNoYXIgUE9fVk9JRF9UWVBFX0NMQVNTOwp0eXBl
ZGVmIGNoYXIgUE9fU1BFRURFU19NU0dfVFlQRTsKCgpleHRlcm4gU3BQb0RhdGFCYXNlKiBEZWZh
dWx0RGF0YUJhc2U7Cgp2b2lkKiBQT19BVFRBQ0hfUFRSX1ZPSUQoY2hhciomIHB0ciwgU3BQb0Rh
dGFCYXNlKiBkYik7CnN0YXRpYyBpbmxpbmUgdm9pZCogUE9fQVRUQUNIX1BUUl9WT0lEX05PX1BF
UlNJU1RFTkNFKGNoYXIqJiBwdHIsIFNwUG9EYXRhQmFzZSopCntyZXR1cm4gcHRyO30KCnZvaWQq
IFBPX0FERCh2b2lkICpwdHIsCiAgICAgICAgICAgICBpbnQgbmJ5dGVzLAogICAgICAgICAgICAg
aW50IGNsYXNzSUQgPSBTcFBvRGF0YUJhc2U6OkRlZmF1bHRBZGRUeXBlLAogICAgICAgICAgICAg
U3BQb0RhdGFCYXNlICpkYiA9IERlZmF1bHREYXRhQmFzZSk7CgoKdm9pZCogUE9fUkVNT1ZFKHZv
aWQgKnB0ciwgU3BQb0RhdGFCYXNlICpkYiA9IERlZmF1bHREYXRhQmFzZSk7CgppbnQgUE9fQlVG
RkVSX1NJWkUoY2hhciogYnVmZmVyKTsKCmNoYXIqIFBPX0NSRUFURV9CVUZGRVIoaW50IGNvbXBy
ZXNzaW9uVHlwZT0KICAgICAgICAgICAgICAgICAgICAgICBTcFBvRGF0YUJhc2U6Ok5PX0NPTVBS
RVNTSU9OLAogICAgICAgICAgICAgICAgICAgICAgIFNwUG9EYXRhQmFzZSAqZGIgPSBEZWZhdWx0
RGF0YUJhc2UpOwoKdm9pZCBQT19SRVNUT1JFKGNoYXIqIGJ1ZmZlciwgU3BQb0RhdGFCYXNlICpk
YiA9RGVmYXVsdERhdGFCYXNlKTsKCmludCBQT19HRVRfTlVNQkVSX09GKGNoYXIqIENsYXNzLCBT
cFBvRGF0YUJhc2UgKmRiID0gRGVmYXVsdERhdGFCYXNlKTsKCnZvaWQqIFBPX0dFVF9GSVJTVChj
aGFyKiBDbGFzcywgU3BQb0RhdGFCYXNlICpkYj1EZWZhdWx0RGF0YUJhc2UpOwoKdm9pZCogUE9f
R0VUX05FWFQoY2hhciAqIENsYXNzLCBTcFBvRGF0YUJhc2UgKmRiPURlZmF1bHREYXRhQmFzZSk7
Cgp2b2lkKiBQT19HRVRfRklSU1RfQkxPQ0soY2hhciogQ2xhc3MsIFNwUG9EYXRhQmFzZSAqZGIg
PSBEZWZhdWx0RGF0YUJhc2UpOwoKdm9pZCogUE9fR0VUX05FWFRfQkxPQ0soY2hhciAqIENsYXNz
LCBTcFBvRGF0YUJhc2UgKmRiID0gRGVmYXVsdERhdGFCYXNlKTsKCnZvaWQgUE9fU0VUX05BTUUo
dm9pZCogcHRyLCBjaGFyICogbmFtZSwgU3BQb0RhdGFCYXNlICpkYiA9IERlZmF1bHREYXRhQmFz
ZSk7Cgp2b2lkICogUE9fTE9PS1VQX05BTUUoY2hhciogbmFtZSwgU3BQb0RhdGFCYXNlICpkYiA9
IERlZmF1bHREYXRhQmFzZSk7CgoKdm9pZCogUE9fR0VUX05FV19JRChjaGFyKiBjbGFzc05hbWUs
CiAgICAgICAgICAgICAgICAgICAgaW50ICYgUG9JZCwKICAgICAgICAgICAgICAgICAgICB2b2lk
KiAoc2luZ2xlRnVuYykgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgIHZvaWQqIChhcnJheUZ1
bmMpKGludCksCiAgICAgICAgICAgICAgICAgICAgaW50IG9iamVjdFNpemUpOwoKaW50IEF0dGFj
aFBvaW50ZXIodm9pZComIHB0ciwgU3BQb0RhdGFCYXNlKiBkYik7CgppbnQgRGV0YWNoUG9pbnRl
cih2b2lkKiYgcHRyLCBTcFBvRGF0YUJhc2UqIGRiKTsKCmNsYXNzIEZyaWVuZE9mU3BQb0RhdGFC
YXNlewpwdWJsaWM6CiAgRnJpZW5kT2ZTcFBvRGF0YUJhc2UoKTpPZmZzZXRSZWNvcmRlZCgwKXt9
CiAgdm9pZCBBdHRhY2hQb2ludGVyKHZvaWQgKip0SW50KXsKICAgIGlmICgoT2Zmc2V0UmVjb3Jk
ZWQgPT0gMCkgJiYgKFBlcnNpc3RlbmNlRW5hYmxlZCkpewogICAgICBSZWNvcmRPZmZzZXQodElu
dCk7CiAgICB9CiAgfQoKcHJvdGVjdGVkOgpwcml2YXRlOgogIHZvaWQgUmVjb3JkT2Zmc2V0KHZv
aWQqKiB0SW50KTsKICBpbnQgT2Zmc2V0UmVjb3JkZWQ7Cn07CgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgplbnVtIEtFWV9NT0RFIHsKICBOT19LRVlfTU9ERSwKICBET1VCTEVfS0VZX01PREUsCiAg
U1RSSU5HX0tFWV9NT0RFLAogIElOVEVSVkFMX0tFWV9NT0RFLAogIFZPSURfUFRSX0tFWV9NT0RF
LAogIFNJTV9USU1FX0tFWV9NT0RFCn07CgoKCgoKCgoKCgoKCgoKCgoKCgoKdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKCgoKCgoKCgoKCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPGNsYXNzIF9D
aGFyVD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czsKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90
cmFpdHM8Y2hhcj47CgogIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPHdjaGFyX3Q+OwoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9yOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh
clQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAg
IGNsYXNzIGJhc2ljX3N0cmluZzsKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5n
OwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPHdjaGFyX3Q+IHdzdHJpbmc7Cn0KCgoKCgoKCgoKCgoK
CgoKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwoKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6cHRy
ZGlmZl90OwogIHVzaW5nIDo6c2l6ZV90Owp9CgoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpG
SUxFOwogIHVzaW5nIDo6ZnBvc190OwoKICB1c2luZyA6OmNsZWFyZXJyOwogIHVzaW5nIDo6ZmNs
b3NlOwogIHVzaW5nIDo6ZmVvZjsKICB1c2luZyA6OmZlcnJvcjsKICB1c2luZyA6OmZmbHVzaDsK
ICB1c2luZyA6OmZnZXRjOwogIHVzaW5nIDo6ZmdldHBvczsKICB1c2luZyA6OmZnZXRzOwogIHVz
aW5nIDo6Zm9wZW47CiAgdXNpbmcgOjpmcHJpbnRmOwogIHVzaW5nIDo6ZnB1dGM7CiAgdXNpbmcg
OjpmcHV0czsKICB1c2luZyA6OmZyZWFkOwogIHVzaW5nIDo6ZnJlb3BlbjsKICB1c2luZyA6OmZz
Y2FuZjsKICB1c2luZyA6OmZzZWVrOwogIHVzaW5nIDo6ZnNldHBvczsKICB1c2luZyA6OmZ0ZWxs
OwogIHVzaW5nIDo6ZndyaXRlOwogIHVzaW5nIDo6Z2V0YzsKICB1c2luZyA6OmdldGNoYXI7CiAg
dXNpbmcgOjpnZXRzOwogIHVzaW5nIDo6cGVycm9yOwogIHVzaW5nIDo6cHJpbnRmOwogIHVzaW5n
IDo6cHV0YzsKICB1c2luZyA6OnB1dGNoYXI7CiAgdXNpbmcgOjpwdXRzOwogIHVzaW5nIDo6cmVt
b3ZlOwogIHVzaW5nIDo6cmVuYW1lOwogIHVzaW5nIDo6cmV3aW5kOwogIHVzaW5nIDo6c2NhbmY7
CiAgdXNpbmcgOjpzZXRidWY7CiAgdXNpbmcgOjpzZXR2YnVmOwogIHVzaW5nIDo6c3ByaW50ZjsK
ICB1c2luZyA6OnNzY2FuZjsKICB1c2luZyA6OnRtcGZpbGU7CiAgdXNpbmcgOjp0bXBuYW07CiAg
dXNpbmcgOjp1bmdldGM7CiAgdXNpbmcgOjp2ZnByaW50ZjsKICB1c2luZyA6OnZwcmludGY7CiAg
dXNpbmcgOjp2c3ByaW50ZjsKfQoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjpzbnBy
aW50ZjsKICB1c2luZyA6OnZmc2NhbmY7CiAgdXNpbmcgOjp2c2NhbmY7CiAgdXNpbmcgOjp2c25w
cmludGY7CiAgdXNpbmcgOjp2c3NjYW5mOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2du
dV9jeHg6OnNucHJpbnRmOwogIHVzaW5nIF9fZ251X2N4eDo6dmZzY2FuZjsKICB1c2luZyBfX2du
dV9jeHg6OnZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6OnZzbnByaW50ZjsKICB1c2luZyBfX2du
dV9jeHg6OnZzc2NhbmY7Cn0KCgoKCgoKCgoKCgoKCgoKCnN0cnVjdCBzY2hlZF9wYXJhbQogIHsK
ICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CgpleHRlcm4gIkMiIHsKCgoKZXh0ZXJuIGlu
dCBjbG9uZSAoaW50ICgqX19mbikgKHZvaWQgKl9fYXJnKSwgdm9pZCAqX19jaGlsZF9zdGFjaywK
ICAgICAgICAgICAgICAgICAgaW50IF9fZmxhZ3MsIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgp9
CgoKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBzY2hlZF9zZXRwYXJhbSAoX19waWRfdCBf
X3BpZCwgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pCiAgICAgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRwYXJhbSAoX19waWRfdCBfX3BpZCwgc3RydWN0IHNjaGVk
X3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX3NldHNjaGVkdWxl
ciAoX19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHNjaGVkX3lpZWxkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVk
X2dldF9wcmlvcml0eV9tYXggKGludCBfX2FsZ29yaXRobSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgc2NoZWRfcnJfZ2V0X2ludGVydmFsIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3QgdGlt
ZXNwZWMgKl9fdCkgdGhyb3cgKCk7Cgp9CgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgoKCgpz
dHJ1Y3QgdG0KewogIGludCB0bV9zZWM7CiAgaW50IHRtX21pbjsKICBpbnQgdG1faG91cjsKICBp
bnQgdG1fbWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0bV95ZWFyOwogIGludCB0bV93ZGF5Owog
IGludCB0bV95ZGF5OwogIGludCB0bV9pc2RzdDsKCgogIGxvbmcgaW50IHRtX2dtdG9mZjsKICBf
X2NvbnN0IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoKCgoKc3RydWN0IGl0aW1lcnNwZWMKICB7CiAg
ICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFs
dWU7CiAgfTsKCgpzdHJ1Y3Qgc2lnZXZlbnQ7CgpleHRlcm4gY2xvY2tfdCBjbG9jayAodm9pZCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lICh0aW1lX3QgKl9fdGltZXIpIHRocm93ICgp
OwoKCmV4dGVybiBkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3QgX190aW1l
MCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIHRp
bWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVf
dCBzdHJmdGltZSAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RycHRpbWUgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm10LCBzdHJ1Y3QgdG0gKl9fdHApCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHN0cnVj
dCB0bSAqZ210aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCmV4dGVy
biBzdHJ1Y3QgdG0gKmxvY2FsdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3Ry
aWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVz
dHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChf
X2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGNoYXIgKmFzY3RpbWUgKF9fY29uc3Qgc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgpleHRl
cm4gY2hhciAqY3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKCgoK
ZXh0ZXJuIGNoYXIgKmFzY3RpbWVfciAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190
cCwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cg
KCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9f
dGltZXIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3R6bmFtZVsyXTsKZXh0ZXJuIGludCBfX2RheWxpZ2h0
OwpleHRlcm4gbG9uZyBpbnQgX190aW1lem9uZTsKCgoKCmV4dGVybiBjaGFyICp0em5hbWVbMl07
CgoKCmV4dGVybiB2b2lkIHR6c2V0ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBkYXls
aWdodDsKZXh0ZXJuIGxvbmcgaW50IHRpbWV6b25lOwoKCgoKCmV4dGVybiBpbnQgc3RpbWUgKF9f
Y29uc3QgdGltZV90ICpfX3doZW4pIHRocm93ICgpOwoKZXh0ZXJuIHRpbWVfdCB0aW1lZ20gKHN0
cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwgKHN0cnVj
dCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBfX3llYXIpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IG5hbm9z
bGVlcCAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsCiAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGlt
ZXNwZWMgKl9fcmVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX2dldHRpbWUgKGNsb2Nr
aWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHApIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9fY29uc3Qgc3RydWN0
IHRpbWVzcGVjICpfX3RwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNsb2NrX25hbm9z
bGVlcCAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCBfX3BpZCwgY2xvY2tpZF90ICpfX2Nsb2Nr
X2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChjbG9ja2lkX3QgX19j
bG9ja19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdldmVudCAqX19yZXN0
cmljdCBfX2V2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9fcmVzdHJpY3Qg
X190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSAodGltZXJfdCBf
X3RpbWVyaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfc2V0dGltZSAodGltZXJfdCBf
X3RpbWVyaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
c3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX192YWx1ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1ZSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgc3RydWN0IGl0
aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXRv
dmVycnVuICh0aW1lcl90IF9fdGltZXJpZCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGdldGRhdGVf
ZXJyOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdldGRhdGUgKF9fY29uc3QgY2hhciAqX19zdHJp
bmcpIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRkYXRlX3IgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3N0cmluZywKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmlj
dCBfX3Jlc2J1ZnApIHRocm93ICgpOwoKCgp9CgoKCgoKZXh0ZXJuICJDIiB7CgoKCgp9CgoKCgoK
CgpleHRlcm4gIkMiIHsKCmVudW0KewogIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFLAoKICBQVEhS
RUFEX0NSRUFURV9ERVRBQ0hFRAoKfTsKCmVudW0KewogIFBUSFJFQURfSU5IRVJJVF9TQ0hFRCwK
CiAgUFRIUkVBRF9FWFBMSUNJVF9TQ0hFRAoKfTsKCmVudW0KewogIFBUSFJFQURfU0NPUEVfU1lT
VEVNLAoKICBQVEhSRUFEX1NDT1BFX1BST0NFU1MKCn07CgplbnVtCnsKICBQVEhSRUFEX01VVEVY
X1RJTUVEX05QLAogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhf
RVJST1JDSEVDS19OUCwKICBQVEhSRUFEX01VVEVYX0FEQVBUSVZFX05QCgogICwKICBQVEhSRUFE
X01VVEVYX05PUk1BTCA9IFBUSFJFQURfTVVURVhfVElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9S
RUNVUlNJVkUgPSBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VS
Uk9SQ0hFQ0sgPSBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9E
RUZBVUxUID0gUFRIUkVBRF9NVVRFWF9OT1JNQUwKCgoKICAsIFBUSFJFQURfTVVURVhfRkFTVF9O
UCA9IFBUSFJFQURfTVVURVhfQURBUFRJVkVfTlAKCn07CgplbnVtCnsKICBQVEhSRUFEX1BST0NF
U1NfUFJJVkFURSwKCiAgUFRIUkVBRF9QUk9DRVNTX1NIQVJFRAoKfTsKCgplbnVtCnsKICBQVEhS
RUFEX1JXTE9DS19QUkVGRVJfUkVBREVSX05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklU
RVJfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OT05SRUNVUlNJVkVfTlAsCiAg
UFRIUkVBRF9SV0xPQ0tfREVGQVVMVF9OUCA9IFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJf
TlAKfTsKCnN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlcgp7CiAgdm9pZCAoKl9fcm91dGlu
ZSkgKHZvaWQgKik7CiAgdm9pZCAqX19hcmc7CiAgaW50IF9fY2FuY2VsdHlwZTsKICBzdHJ1Y3Qg
X3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fcHJldjsKfTsKCgoKZW51bQp7CiAgUFRIUkVBRF9D
QU5DRUxfRU5BQkxFLAoKICBQVEhSRUFEX0NBTkNFTF9ESVNBQkxFCgp9OwplbnVtCnsKICBQVEhS
RUFEX0NBTkNFTF9ERUZFUlJFRCwKCiAgUFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTCgp9OwoK
ZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZSAocHRocmVhZF90ICpfX3Jlc3RyaWN0IF9fdGhyZWFk
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jl
c3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKCpfX3N0YXJ0
X3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3Jl
c3RyaWN0IF9fYXJnKSB0aHJvdyAoKTsKCgpleHRlcm4gcHRocmVhZF90IHB0aHJlYWRfc2VsZiAo
dm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2VxdWFsIChwdGhyZWFkX3QgX190
aHJlYWQxLCBwdGhyZWFkX3QgX190aHJlYWQyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBwdGhy
ZWFkX2V4aXQgKHZvaWQgKl9fcmV0dmFsKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9qb2luIChwdGhyZWFkX3QgX190
aCwgdm9pZCAqKl9fdGhyZWFkX3JldHVybikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX2RldGFjaCAocHRocmVhZF90IF9fdGgpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBw
dGhyZWFkX2F0dHJfaW5pdCAocHRocmVhZF9hdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX2F0dHJfZGVzdHJveSAocHRocmVhZF9hdHRyX3QgKl9fYXR0cikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUgKHB0aHJlYWRf
YXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0
ZGV0YWNoc3RhdGUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwYXJhbSAocHRocmVhZF9hdHRyX3Qg
Kl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3Ry
aWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jl
c3RyaWN0IF9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf
c2V0c2NoZWRwb2xpY3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3BvbGljeSkKICAg
ICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBvbGljeSAoX19j
b25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19wb2xpY3kpCiAgICAgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0aW5oZXJpdHNjaGVkIChwdGhyZWFk
X2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBfX2luaGVyaXQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGlu
aGVyaXRzY2hlZCAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9f
aW5oZXJpdCkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY29w
ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fc2NvcGUpCiAgICAgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3Qg
Kl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
ICpfX3Jlc3RyaWN0IF9fc2NvcGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0
cl9zZXRndWFyZHNpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fZ3VhcmRzaXplKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9nZXRndWFyZHNpemUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3Qg
Kl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIs
IHNpemVfdCAqX19yZXN0cmljdCBfX2d1YXJkc2l6ZSkKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyIChwdGhyZWFkX2F0dHJfdCAqX19hdHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fc3RhY2thZGRy
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja2FkZHIgKF9fY29u
c3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2F0dHIsIHZvaWQgKipfX3Jlc3RyaWN0IF9fc3RhY2thZGRyKQogICAgIHRo
cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrIChwdGhyZWFkX2F0
dHJfdCAqX19hdHRyLCB2b2lkICpfX3N0YWNrYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX3N0YWNrc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy
ZWFkX2F0dHJfZ2V0c3RhY2sgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19h
dHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKl9fcmVzdHJpY3Qg
X19zdGFja2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9f
cmVzdHJpY3QgX19zdGFja3NpemUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9h
dHRyX3NldHN0YWNrc2l6ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGFja3NpemUpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJf
dCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0
ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXplKQogICAgIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHB0aHJlYWRfZ2V0YXR0cl9ucCAocHRocmVhZF90IF9fdGgsIHB0aHJlYWRfYXR0cl90
ICpfX2F0dHIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2NoZWRwYXJh
bSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50IF9fcG9saWN5LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0p
CiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldHNjaGVkcGFyYW0gKHB0aHJl
YWRfdCBfX3RhcmdldF90aHJlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgKl9fcmVzdHJpY3QgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19wYXJhbSkKICAgICB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGNvbmN1cnJlbmN5ICh2b2lkKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHB0aHJlYWRfc2V0Y29uY3VycmVuY3kgKGludCBfX2xldmVsKSB0aHJvdyAoKTsK
CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF95aWVsZCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBpbnQgcHRocmVhZF9tdXRleF9pbml0IChwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3Qg
X19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9t
dXRleGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19t
dXRleF9hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAo
cHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf
bXV0ZXhfdHJ5bG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3RpbWVkbG9jayAocHRocmVhZF9tdXRl
eF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRo
cmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfaW5pdCAocHRocmVhZF9tdXRleGF0dHJf
dCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ry
b3kgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw
dGhyZWFkX211dGV4YXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3Qg
KgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19h
dHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0
cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJf
c2V0cHNoYXJlZCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCgoKCmV4
dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSAocHRocmVhZF9tdXRleGF0dHJfdCAq
X19hdHRyLCBpbnQgX19raW5kKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9t
dXRleGF0dHJfZ2V0dHlwZSAoX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX3Jlc3RyaWN0
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVz
dHJpY3QgX19raW5kKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2lu
aXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX2NvbmRhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25kX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgcHRocmVhZF9jb25kX2Rlc3Ryb3kgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3NpZ25hbCAocHRocmVhZF9jb25kX3QgKl9fY29u
ZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0IChwdGhyZWFk
X2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfd2Fp
dCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCkgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0IChwdGhyZWFkX2NvbmRfdCAq
X19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRo
cmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZGVzdHJveSAocHRocmVhZF9j
b25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0
cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFk
X2NvbmRhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3
bG9ja19pbml0IChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3RyaWN0IF9fcndsb2NrLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9f
cmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfZGVzdHJveSAocHRocmVhZF9yd2xvY2tfdCAq
X19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfcmRsb2NrIChw
dGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X3J3bG9ja190cnlyZGxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190aW1lZHJkbG9jayAocHRocmVhZF9yd2xvY2tf
dCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX3J3bG9ja193cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXdybG9jayAocHRocmVhZF9yd2xv
Y2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3Rp
bWVkd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3RyaWN0IF9fcndsb2NrLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAq
X19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3Rp
bWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3VubG9jayAocHRocmVh
ZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9y
d2xvY2thdHRyX2luaXQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrYXR0
cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dl
dHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0cHNoYXJlZCAocHRo
cmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X3J3bG9ja2F0dHJfZ2V0a2luZF9ucCAoX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19h
dHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcHJl
ZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0a2luZF9ucCAo
cHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IF9fcHJlZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRf
c3Bpbl9pbml0IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaywgaW50IF9fcHNoYXJlZCkKICAg
ICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9kZXN0cm95IChwdGhyZWFkX3Nw
aW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fbG9j
ayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9zcGluX3RyeWxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl91bmxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19s
b2NrKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2luaXQgKHB0aHJl
YWRfYmFycmllcl90ICpfX3Jlc3RyaWN0IF9fYmFycmllciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fcmVzdHJpY3QKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCB1bnNpZ25lZCBpbnQgX19jb3Vu
dCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcl9kZXN0cm95IChwdGhyZWFk
X2JhcnJpZXJfdCAqX19iYXJyaWVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJy
aWVyYXR0cl9pbml0IChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfZGVzdHJveSAocHRocmVhZF9iYXJyaWVyYXR0
cl90ICpfX2F0dHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2dl
dHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9iYXJyaWVyYXR0cl90ICoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJl
ZCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfc2V0cHNoYXJlZCAo
cHRocmVhZF9iYXJyaWVyYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRo
cmVhZF9iYXJyaWVyX3dhaXQgKHB0aHJlYWRfYmFycmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgp
OwoKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fZGVzdHJfZnVuY3Rpb24pICh2
b2lkICopKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZSAocHRocmVh
ZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNwZWNpZmlj
IChwdGhyZWFkX2tleV90IF9fa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgdm9pZCAqX19wb2ludGVyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqcHRocmVhZF9n
ZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0
aHJlYWRfb25jZSAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250cm9sLAogICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUgKGludCBfX3N0YXRlLCBpbnQgKl9f
b2xkc3RhdGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2VsdHlwZSAo
aW50IF9fdHlwZSwgaW50ICpfX29sZHR5cGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9jYW5jZWwgKHB0aHJlYWRfdCBfX3RocmVhZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBw
dGhyZWFkX3Rlc3RjYW5jZWwgKHZvaWQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgX3B0aHJlYWRf
Y2xlYW51cF9wdXNoIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lk
ICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYXJnKSB0aHJv
dyAoKTsKCgoKCgoKCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wIChzdHJ1Y3QgX3B0
aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBfcHRocmVhZF9j
bGVhbnVwX3B1c2hfZGVmZXIgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZm
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91
dGluZSkgKHZvaWQgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dm9pZCAqX19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3Bf
cmVzdG9yZSAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZXhlY3V0ZSkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGNwdWNsb2NraWQgKHB0aHJlYWRfdCBfX3Ro
cmVhZF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NraWRfdCAqX19j
bG9ja19pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNrIChpbnQg
X19ob3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IF9fc2lnc2V0X3QgKl9f
cmVzdHJpY3QgX19uZXdtYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zaWdzZXRf
dCAqX19yZXN0cmljdCBfX29sZG1hc2spdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2tp
bGwgKHB0aHJlYWRfdCBfX3RocmVhZCwgaW50IF9fc2lnbm8pIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZv
aWQgcHRocmVhZF9raWxsX290aGVyX3RocmVhZHNfbnAgKHZvaWQpIHRocm93ICgpOwoKfQoKCnR5
cGVkZWYgcHRocmVhZF9rZXlfdCBfX2d0aHJlYWRfa2V5X3Q7CnR5cGVkZWYgcHRocmVhZF9vbmNl
X3QgX19ndGhyZWFkX29uY2VfdDsKdHlwZWRlZiBwdGhyZWFkX211dGV4X3QgX19ndGhyZWFkX211
dGV4X3Q7CgoKCgoKCiNwcmFnbWEgd2VhayBwdGhyZWFkX29uY2UKI3ByYWdtYSB3ZWFrIHB0aHJl
YWRfa2V5X2NyZWF0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlfZGVsZXRlCiNwcmFnbWEgd2Vh
ayBwdGhyZWFkX2dldHNwZWNpZmljCiNwcmFnbWEgd2VhayBwdGhyZWFkX3NldHNwZWNpZmljCiNw
cmFnbWEgd2VhayBwdGhyZWFkX2NyZWF0ZQoKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfbG9j
ayAKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAKI3ByYWdtYSB3ZWFrIHB0aHJl
YWRfbXV0ZXhfdW5sb2NrIAoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2FjdGl2ZV9wICh2
b2lkKQp7CiAgc3RhdGljIHZvaWQgKmNvbnN0IF9fZ3RocmVhZF9hY3RpdmVfcHRyID0gKHZvaWQg
KikgJnB0aHJlYWRfY3JlYXRlOwogIHJldHVybiBfX2d0aHJlYWRfYWN0aXZlX3B0ciAhPSAwOwp9
CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfb25jZSAoX19ndGhyZWFkX29uY2VfdCAqb25j
ZSwgdm9pZCAoKmZ1bmMpICh2b2lkKSkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAg
ICByZXR1cm4gcHRocmVhZF9vbmNlIChvbmNlLCBmdW5jKTsKICBlbHNlCiAgICByZXR1cm4gLTE7
Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfY3JlYXRlIChfX2d0aHJlYWRfa2V5
X3QgKmtleSwgdm9pZCAoKmR0b3IpICh2b2lkICopKQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2Ny
ZWF0ZSAoa2V5LCBkdG9yKTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9kdG9y
IChfX2d0aHJlYWRfa2V5X3Qga2V5LCB2b2lkICpwdHIpCnsKCiAgaWYgKHB0cikKICAgIHJldHVy
biBwdGhyZWFkX3NldHNwZWNpZmljIChrZXksIDApOwogIGVsc2UKICAgIHJldHVybiAwOwp9Cgpz
dGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfa2V5X2RlbGV0ZSAoX19ndGhyZWFkX2tleV90IGtl
eSkKewogIHJldHVybiBwdGhyZWFkX2tleV9kZWxldGUgKGtleSk7Cn0KCnN0YXRpYyBpbmxpbmUg
dm9pZCAqCl9fZ3RocmVhZF9nZXRzcGVjaWZpYyAoX19ndGhyZWFkX2tleV90IGtleSkKewogIHJl
dHVybiBwdGhyZWFkX2dldHNwZWNpZmljIChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0
aHJlYWRfc2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBrZXksIGNvbnN0IHZvaWQgKnB0cikK
ewogIHJldHVybiBwdGhyZWFkX3NldHNwZWNpZmljIChrZXksIHB0cik7Cn0KCnN0YXRpYyBpbmxp
bmUgaW50Cl9fZ3RocmVhZF9tdXRleF9sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsK
ICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfbG9j
ayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0
aHJlYWRfbXV0ZXhfdHJ5bG9jayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9f
Z3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX211dGV4X3RyeWxvY2sgKG11
dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFk
X211dGV4X3VubG9jayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVh
ZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX211dGV4X3VubG9jayAobXV0ZXgpOwog
IGVsc2UKICAgIHJldHVybiAwOwp9CgoKCm5hbWVzcGFjZSBzdGQKewoKICB0eXBlZGVmIGxvbmcg
c3RyZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7CgogIHR5cGVkZWYgcHRy
ZGlmZl90IHdzdHJlYW1zaXplOwoKICB0eXBlZGVmIGZwb3NfdCBfX2Nfc3RyZWFtcG9zOwoKICB0
eXBlZGVmIF9fZ3RocmVhZF9tdXRleF90IF9fY19sb2NrOwoKCiAgdHlwZWRlZiBGSUxFIF9fY19m
aWxlOwoKCiAgc3RydWN0IF9faW9zX2ZsYWdzCiAgewogICAgdHlwZWRlZiBzaG9ydCBfX2ludF90
eXBlOwoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jvb2xhbHBoYSA9IDB4MDAwMTsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9IDB4MDAwMjsKICAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX2ZpeGVkID0gMHgwMDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50
X3R5cGUgX1NfaGV4ID0gMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW50
ZXJuYWwgPSAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19sZWZ0ID0gMHgw
MDIwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb2N0ID0gMHgwMDQwOwogICAgc3Rh
dGljIGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAweDAwODA7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU19zY2llbnRpZmljID0gMHgwMTAwOwogICAgc3RhdGljIGNvbnN0IF9faW50
X3R5cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf
U19zaG93cG9pbnQgPSAweDA0MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93
cG9zID0gMHgwODAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2tpcHdzID0gMHgx
MDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9IDB4MjAwMDsKICAg
IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VwcGVyY2FzZSA9IDB4NDAwMDsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX2FkanVzdGZpZWxkID0gMHgwMDIwIHwgMHgwMDgwIHwgMHgw
MDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0gMHgwMDAyIHwg
MHgwMDQwIHwgMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmxvYXRmaWVs
ZCA9IDB4MDEwMCB8IDB4MDAwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFk
Yml0ID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJpdCA9IDB4MDI7
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWlsYml0ID0gMHgwNDsKCgogICAgc3Rh
dGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXBwID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX2F0ZSA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iaW4g
PSAweDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW4gPSAweDA4OwogICAgc3Rh
dGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb3V0ID0gMHgxMDsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX3RydW5jID0gMHgyMDsKICB9Owp9CgoKCgoKCgoKCm5hbWVzcGFjZSBzdGQKewog
IHVzaW5nIDo6Y2xvY2tfdDsKICB1c2luZyA6OnRpbWVfdDsKICB1c2luZyA6OnRtOwoKICB1c2lu
ZyA6OmNsb2NrOwogIHVzaW5nIDo6ZGlmZnRpbWU7CiAgdXNpbmcgOjpta3RpbWU7CiAgdXNpbmcg
Ojp0aW1lOwogIHVzaW5nIDo6YXNjdGltZTsKICB1c2luZyA6OmN0aW1lOwogIHVzaW5nIDo6Z210
aW1lOwogIHVzaW5nIDo6bG9jYWx0aW1lOwogIHVzaW5nIDo6c3RyZnRpbWU7Cn0KCgoKCgoKCgoK
CgoKCgoKCgp0eXBlZGVmIF9fbWJzdGF0ZV90IG1ic3RhdGVfdDsKCnN0cnVjdCB0bTsKCgpleHRl
cm4gIkMiIHsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
ZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fc3JjKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NuY3B5ICh3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAq
X19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gd2No
YXJfdCAqd2NzY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCmV4
dGVybiB3Y2hhcl90ICp3Y3NuY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6
ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjc2NtcCAoX19jb25zdCB3Y2hh
cl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHdjc25jbXAgKF9fY29uc3Qgd2NoYXJfdCAq
X19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50IHdjc2Nhc2VjbXAgKF9fY29u
c3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHdjc25jYXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJf
dCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIGludCBfX3djc2Nhc2VjbXBfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2Nv
bnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3Qg
X19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfX3djc25jYXNlY21wX2wgKF9fY29uc3Qgd2No
YXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IHdjc2NvbGwgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3My
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3N4ZnJtICh3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBfX3djc2NvbGxf
bCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6
ZV90IF9fd2NzeGZybV9sICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRo
cm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3Y3NkdXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRlcm4gd2NoYXJfdCAq
d2NzY2hyIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2NzcmNociAo
X19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2Nocm51bCAoX19j
b25zdCB3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX193YykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgd2NzY3NwbiAoX19jb25zdCB3Y2hh
cl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX3JlamVjdCkKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90IHdjc3NwbiAoX19jb25zdCB3
Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NwYnJrIChfX2Nv
bnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3N0ciAo
X19jb25zdCB3Y2hhcl90ICpfX2hheXN0YWNrLCBfX2NvbnN0IHdjaGFyX3QgKl9fbmVlZGxlKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gd2NoYXJf
dCAqd2Nzd2NzIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAq
X19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4
dGVybiB3Y2hhcl90ICp3Y3N0b2sgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAg
ICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19wdHIpIHRocm93ICgpOwoK
CmV4dGVybiBzaXplX3Qgd2NzbGVuIChfX2NvbnN0IHdjaGFyX3QgKl9fcykgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBzaXplX3Qgd2NzbmxlbiAoX19jb25z
dCB3Y2hhcl90ICpfX3MsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY2hyIChfX2NvbnN0IHdj
aGFyX3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCB3bWVtY21wIChfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCgpleHRlcm4gd2NoYXJfdCAqd21lbWNweSAod2NoYXJfdCAqX19yZXN0
cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd21l
bW1vdmUgKHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikK
ICAgICB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd21lbXNldCAod2NoYXJfdCAqX19zLCB3
Y2hhcl90IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd21l
bXBjcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gd2ludF90IGJ0b3djIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCB3Y3RvYiAod2ludF90IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgbWJzaW5p
dCAoX19jb25zdCBtYnN0YXRlX3QgKl9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1i
cnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAg
ICAgICAgICBtYnN0YXRlX3QgKl9fcCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3J0b21i
IChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJfdCBfX3djLAogICAgICAgICAgICAgICAgICAg
ICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90
IF9fbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAg
ICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7
CmV4dGVybiBzaXplX3QgbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXpl
X3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMp
IHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCBtYnNydG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKipfX3Jlc3RyaWN0
IF9fc3JjLCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3Qg
Kl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2NzcnRvbWJzIChj
aGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3
Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAg
ICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCmV4dGVy
biBzaXplX3QgbWJzbnJ0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3Qg
X19ubWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3Qg
Kl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2NzbnJ0b21icyAo
Y2hhciAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBfX253Yywgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3Rh
dGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCB3Y3dpZHRo
ICh3Y2hhcl90IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgd2Nzd2lkdGggKF9fY29uc3Qg
d2NoYXJfdCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIHdj
c3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGZsb2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwpl
eHRlcm4gbG9uZyBkb3VibGUgd2NzdG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB1
bnNpZ25lZCBsb25nIGludCB3Y3N0b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9f
CmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvcSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpl
eHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0b3VxIChfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKCgoKX19leHRlbnNpb25fXwpleHRl
cm4gbG9uZyBsb25nIGludCB3Y3N0b2xsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRl
cm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0b3VsbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdj
aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgX193Y3N0
b2xfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7Cgpl
eHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2No
YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVu
c2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9sIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2No
YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9u
X18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX193Y3N0b3VsbF9sIChfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19s
b2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2wgKF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJf
dCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7
CgpleHRlcm4gZmxvYXQgX193Y3N0b2ZfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fd2NzdG9sZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBkb3VibGUgX193Y3N0b2RfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFy
X3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0
ZXJuIGZsb2F0IF9fd2NzdG9mX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91
YmxlIF9fd2NzdG9sZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2dyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgX193Y3N0b2xfaW50ZXJuYWwg
KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgp
OwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2ludGVybmFsIChfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91
cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX193Y3N0
b2xsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jh
c2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWdu
ZWQgbG9uZyBsb25nIGludCBfX3djc3RvdWxsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2NoYXJfdCAqKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7Cgpl
eHRlcm4gd2NoYXJfdCAqd2NwY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAq
X19zcmMpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NwbmNweSAod2NoYXJfdCAqX19k
ZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoK
CgoKCgoKZXh0ZXJuIGludCBmd2lkZSAoX19GSUxFICpfX2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBmd3ByaW50ZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAog
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQs
IC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHdwcmludGYgKF9fY29uc3Qgd2NoYXJf
dCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQg
c3dwcmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAg
ICB0aHJvdyAoKSA7CgoKZXh0ZXJuIGludCB2ZndwcmludGYgKF9fRklMRSAqX19yZXN0cmljdCBf
X3MsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19m
b3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0
aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3cHJpbnRmIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQog
ICAgIHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZzd3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmlj
dCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlz
dCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKCmV4dGVybiBpbnQgZndzY2FuZiAoX19GSUxFICpf
X3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAq
X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgd3Nj
YW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJv
dyAoKSA7CgpleHRlcm4gaW50IHN3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKCgoKZXh0ZXJuIGludCB2ZndzY2FuZiAoX19GSUxF
ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBf
X2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3c2NhbmYgKF9fY29uc3Qgd2NoYXJf
dCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlz
dCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZzd3NjYW5mIChfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9s
aXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgoKCmV4dGVybiB3aW50X3QgZmdldHdjIChfX0ZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBnZXR3YyAoX19GSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBnZXR3Y2hhciAodm9pZCkgdGhyb3cgKCk7
CgoKCmV4dGVybiB3aW50X3QgZnB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwpleHRlcm4gd2ludF90IHB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgcHV0d2NoYXIgKHdjaGFyX3QgX193Yykg
dGhyb3cgKCk7CgoKCgpleHRlcm4gd2NoYXJfdCAqZmdldHdzICh3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fd3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmcHV0d3MgKF9fY29uc3Qgd2NoYXJf
dCAqX19yZXN0cmljdCBfX3dzLAogICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCB1bmdldHdjICh3aW50X3QgX193
YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHdpbnRfdCBnZXR3Y191
bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgZ2V0d2No
YXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgZmdldHdjX3VubG9j
a2VkIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IGZwdXR3Y191
bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIHdpbnRfdCBwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhcl91bmxvY2tlZCAod2NoYXJfdCBfX3dj
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3c191bmxvY2tlZCAod2NoYXJfdCAq
X19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZnB1
dHdzX3VubG9ja2VkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBzaXplX3Qgd2NzZnRpbWUgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBz
aXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3Ry
dWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKfQoKCm5hbWVzcGFjZSBzdGQKewog
IHVzaW5nIDo6bWJzdGF0ZV90Owp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OndpbnRfdDsK
CiAgdXNpbmcgOjpidG93YzsKICB1c2luZyA6OmZnZXR3YzsKICB1c2luZyA6OmZnZXR3czsKICB1
c2luZyA6OmZwdXR3YzsKICB1c2luZyA6OmZwdXR3czsKICB1c2luZyA6OmZ3aWRlOwogIHVzaW5n
IDo6ZndwcmludGY7CiAgdXNpbmcgOjpmd3NjYW5mOwogIHVzaW5nIDo6Z2V0d2M7CiAgdXNpbmcg
OjpnZXR3Y2hhcjsKICB1c2luZyA6Om1icmxlbjsKICB1c2luZyA6Om1icnRvd2M7CiAgdXNpbmcg
OjptYnNpbml0OwogIHVzaW5nIDo6bWJzcnRvd2NzOwogIHVzaW5nIDo6cHV0d2M7CiAgdXNpbmcg
OjpwdXR3Y2hhcjsKICB1c2luZyA6OnN3cHJpbnRmOwogIHVzaW5nIDo6c3dzY2FuZjsKICB1c2lu
ZyA6OnVuZ2V0d2M7CiAgdXNpbmcgOjp2ZndwcmludGY7CiAgdXNpbmcgOjp2ZndzY2FuZjsKICB1
c2luZyA6OnZzd3ByaW50ZjsKICB1c2luZyA6OnZzd3NjYW5mOwogIHVzaW5nIDo6dndwcmludGY7
CiAgdXNpbmcgOjp2d3NjYW5mOwogIHVzaW5nIDo6d2NydG9tYjsKICB1c2luZyA6Ondjc2NhdDsK
ICB1c2luZyA6Ondjc2NtcDsKICB1c2luZyA6Ondjc2NvbGw7CiAgdXNpbmcgOjp3Y3NjcHk7CiAg
dXNpbmcgOjp3Y3Njc3BuOwogIHVzaW5nIDo6d2NzZnRpbWU7CiAgdXNpbmcgOjp3Y3NsZW47CiAg
dXNpbmcgOjp3Y3NuY2F0OwogIHVzaW5nIDo6d2NzbmNtcDsKICB1c2luZyA6Ondjc25jcHk7CiAg
dXNpbmcgOjp3Y3NydG9tYnM7CiAgdXNpbmcgOjp3Y3NzcG47CiAgdXNpbmcgOjp3Y3N0b2Q7CiAg
dXNpbmcgOjp3Y3N0b2Y7CiAgdXNpbmcgOjp3Y3N0b2s7CiAgdXNpbmcgOjp3Y3N0b2w7CiAgdXNp
bmcgOjp3Y3N0b3VsOwogIHVzaW5nIDo6d2NzeGZybTsKICB1c2luZyA6OndjdG9iOwogIHVzaW5n
IDo6d21lbWNtcDsKICB1c2luZyA6OndtZW1jcHk7CiAgdXNpbmcgOjp3bWVtbW92ZTsKICB1c2lu
ZyA6OndtZW1zZXQ7CiAgdXNpbmcgOjp3cHJpbnRmOwogIHVzaW5nIDo6d3NjYW5mOwoKICB1c2lu
ZyA6Ondjc2NocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzY2hyKHdjaGFyX3QqIF9fcCwgd2No
YXJfdCBfX2MpCiAgeyByZXR1cm4gd2NzY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9f
cCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3Y3NwYnJrOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3Nw
YnJrKHdjaGFyX3QqIF9fczEsIHdjaGFyX3QqIF9fczIpCiAgeyByZXR1cm4gd2NzcGJyayhjb25z
dF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjp3Y3NyY2hy
OwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NyY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2Mp
CiAgeyByZXR1cm4gd2NzcmNocihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2Mp
OyB9CgogIHVzaW5nIDo6d2Nzc3RyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NzdHIod2NoYXJf
dCogX19zMSwgd2NoYXJfdCogX19zMikKICB7IHJldHVybiB3Y3NzdHIoY29uc3RfY2FzdDxjb25z
dCB3Y2hhcl90Kj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6d21lbWNocjsKCiAgaW5saW5l
IHdjaGFyX3QqCiAgd21lbWNocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jLCBzaXplX3QgX19u
KQogIHsgcmV0dXJuIHdtZW1jaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19j
LCBfX24pOyB9Cn0KCgoKCgoKCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6d2NzdG9s
ZDsKICB1c2luZyA6Ondjc3RvbGw7CiAgdXNpbmcgOjp3Y3N0b3VsbDsKfQoKbmFtZXNwYWNlIHN0
ZAp7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b2xkOwogIHVzaW5nIF9fZ251X2N4eDo6d2NzdG9s
bDsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvdWxsOwp9CgoKbmFtZXNwYWNlIHN0ZAp7CgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGZwb3MKICAgIHsKICAgIHB1Ymxp
YzoKCiAgICAgIHR5cGVkZWYgX1N0YXRlVCBfX3N0YXRlX3R5cGU7CgogICAgcHJpdmF0ZToKICAg
ICAgc3RyZWFtb2ZmIF9NX29mZjsKICAgICAgX19zdGF0ZV90eXBlIF9NX3N0OwoKICAgIHB1Ymxp
YzoKICAgICAgX19zdGF0ZV90eXBlCiAgICAgIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX01fc3Q7
IH0KCiAgICAgIHZvaWQKICAgICAgc3RhdGUoX19zdGF0ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBf
X3N0OyB9CgoKCiAgICAgIGZwb3MoKTogX01fb2ZmKHN0cmVhbW9mZigpKSwgX01fc3QoX19zdGF0
ZV90eXBlKCkpIHsgfQoKICAgICAgZnBvcyhzdHJlYW1vZmYgX19vZmYsIF9fc3RhdGVfdHlwZSBf
X3N0ID0gX19zdGF0ZV90eXBlKCkpCiAgICAgIDogX01fb2ZmKF9fb2ZmKSwgX01fc3QoX19zdCkg
eyB9CgogICAgICBvcGVyYXRvciBzdHJlYW1vZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0K
CiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yKz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiAr
PSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvci09KHN0
cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgLT0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAg
ZnBvcwogICAgICBvcGVyYXRvcisoc3RyZWFtb2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBv
cyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCArPSBfX29mZjsKICAgICAgICByZXR1cm4gX190Owog
ICAgICB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9yLShzdHJlYW1vZmYgX19vZmYpCiAgICAg
IHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190IC09IF9fb2ZmOwogICAgICAg
IHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3I9PShjb25zdCBm
cG9zJiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmID09IF9fcG9zLl9NX29mZjsg
fQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvciE9KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAog
ICAgICB7IHJldHVybiBfTV9vZmYgIT0gX19wb3MuX01fb2ZmOyB9CgogICAgICBzdHJlYW1vZmYK
ICAgICAgX01fcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIHZvaWQK
ICAgICAgX01fcG9zaXRpb24oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiA9IF9fb2ZmOyB9CiAg
ICB9OwoKCiAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4gc3RyZWFtcG9zOwoKICB0eXBlZGVmIGZw
b3M8bWJzdGF0ZV90PiB3c3RyZWFtcG9zOwoKfQoKCgoKCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9p
ZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9h
bGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAg
X190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3Io
Y29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciog
X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93
X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3Qg
Y2hhciogX19zKTsKfQoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFz
aWNfaW9zOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBj
aGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJU
PiA+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj
X29zdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9
IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy
VD4sCiAgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAg
IGNsYXNzIGJhc2ljX3N0cmluZ2J1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBf
QWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFt
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry
YWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hh
clQ+ID4KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAg
ICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf
c3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZpbGVidWY7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D
aGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mg
YmFzaWNfb2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZnN0cmVhbTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8
X0NoYXJUPiA+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAg
IGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I7CgoKCiAgY2xhc3MgaW9zX2Jhc2U7CgoKICB0eXBl
ZGVmIGJhc2ljX2lvczxjaGFyPiBpb3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcj4g
c3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFyPiBpc3RyZWFtOwogIHR5cGVk
ZWYgYmFzaWNfb3N0cmVhbTxjaGFyPiBvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08
Y2hhcj4gaW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8Y2hhcj4gc3RyaW5nYnVm
OwogIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFyPiBpc3RyaW5nc3RyZWFtOwogIHR5
cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPiBvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYg
YmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+IHN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2Zp
bGVidWY8Y2hhcj4gZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPGNoYXI+IGlmc3Ry
ZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08Y2hhcj4gb2ZzdHJlYW07CiAgdHlwZWRlZiBi
YXNpY19mc3RyZWFtPGNoYXI+IGZzdHJlYW07CgogIHR5cGVkZWYgYmFzaWNfaW9zPHdjaGFyX3Q+
IHdpb3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4gd3N0cmVhbWJ1ZjsKICB0
eXBlZGVmIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4gd2lzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19v
c3RyZWFtPHdjaGFyX3Q+IHdvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08d2NoYXJf
dD4gd2lvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+IHdzdHJpbmdi
dWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3RyaW5nc3RyZWFt
OwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3b3N0cmluZ3N0cmVhbTsK
ICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3c3RyaW5nc3RyZWFtOwogIHR5
cGVkZWYgYmFzaWNfZmlsZWJ1Zjx3Y2hhcl90PiB3ZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lm
c3RyZWFtPHdjaGFyX3Q+IHdpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPHdjaGFy
X3Q+IHdvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4gd2ZzdHJlYW07
Cn0KCgoKCgoKCnN0YXRpYyBjb25zdCBkb3VibGUgRGVmYXVsdFRpbWUgPSAwLjA7CnN0YXRpYyBj
b25zdCBpbnQgRGVmYXVsdFByaW9yaXR5MSA9IDA7CnN0YXRpYyBjb25zdCBpbnQgRGVmYXVsdFBy
aW9yaXR5MiA9IDA7CnN0YXRpYyBjb25zdCBpbnQgRGVmYXVsdENvdW50ZXIgPSAwOwpzdGF0aWMg
Y29uc3QgaW50IERlZmF1bHRVbmlxdWVJZCA9IDA7CgpjbGFzcyBTcFNpbVRpbWUgewoKICBwdWJs
aWM6CiAgICBzdGF0aWMgaW50IEdldE1heFByaW9yaXR5MSgpIHtyZXR1cm4gMHg3ZmZmO30KICAg
IHN0YXRpYyBpbnQgR2V0TWF4UHJpb3JpdHkyKCkge3JldHVybiAweDdmZmY7fQogICAgc3RhdGlj
IGludCBHZXRNaW5Qcmlvcml0eTEoKSB7cmV0dXJuIDB4ODAwMDt9CiAgICBzdGF0aWMgaW50IEdl
dE1pblByaW9yaXR5MigpIHtyZXR1cm4gMHg4MDAwO30KICAgIHN0YXRpYyBpbnQgR2V0TWF4VW5p
cXVlSWQoKSB7cmV0dXJuIDB4N2ZmZjt9CiAgICBzdGF0aWMgaW50IEdldE1heENvdW50ZXIoKSB7
cmV0dXJuIDB4N2ZmZmZmZmY7fQogICAgc3RhdGljIGludCBHZXRNaW5VbmlxdWVJZCgpIHtyZXR1
cm4gMHg4MDAwO30KICAgIHN0YXRpYyBpbnQgR2V0TWluQ291bnRlcigpIHtyZXR1cm4gMHg4MDAw
MDAwMDt9CgoKCgoKCgogICAgU3BTaW1UaW1lKGRvdWJsZSB0ID0gRGVmYXVsdFRpbWUsCiAgICAg
ICAgICAgICAgaW50IHAxID0gRGVmYXVsdFByaW9yaXR5MSwKICAgICAgICAgICAgICBpbnQgcDIg
PSBEZWZhdWx0UHJpb3JpdHkyLAogICAgICAgICAgICAgIGludCBjb3VudGVyID0gRGVmYXVsdENv
dW50ZXIsCiAgICAgICAgICAgICAgaW50IHVuaXF1ZUlkID0gRGVmYXVsdFVuaXF1ZUlkCiAgICAg
ICAgICAgICApIHsKCiAgICAgIFRpbWUgPSB0OwogICAgICBQcmlvcml0eTEgPSAoc2hvcnQgaW50
KSBwMTsKICAgICAgUHJpb3JpdHkyID0gKHNob3J0IGludCkgcDI7CiAgICAgIENvdW50ZXIgPSBj
b3VudGVyOwogICAgICBVbmlxdWVJZCA9IChzaG9ydCBpbnQpIHVuaXF1ZUlkOwogICAgfQoKICAg
IFNwU2ltVGltZShjb25zdCBTcFNpbVRpbWUgJngKICAgICAgICAgICAgICkgOgogICAgICBUaW1l
KHguVGltZSksCiAgICAgIFByaW9yaXR5MSh4LlByaW9yaXR5MSksCiAgICAgIFByaW9yaXR5Mih4
LlByaW9yaXR5MiksCiAgICAgIFVuaXF1ZUlkKHguVW5pcXVlSWQpLAogICAgICBDb3VudGVyKHgu
Q291bnRlcikKICAgIHt9CgogICAgdm9pZCBTZXRWYWx1ZXMoZG91YmxlIHQgPSBEZWZhdWx0VGlt
ZSwKICAgICAgICAgICAgICAgICAgIGludCBwMSA9IERlZmF1bHRQcmlvcml0eTEsCiAgICAgICAg
ICAgICAgICAgICBpbnQgcDIgPSBEZWZhdWx0UHJpb3JpdHkyLAogICAgICAgICAgICAgICAgICAg
aW50IGNvdW50ZXIgPSBEZWZhdWx0Q291bnRlciwKICAgICAgICAgICAgICAgICAgIGludCB1bmlx
dWVJZCA9IERlZmF1bHRVbmlxdWVJZAogICAgICAgICAgICAgICAgICApIHsKICAgICAgVGltZSA9
IHQ7CiAgICAgIFByaW9yaXR5MSA9IChzaG9ydCBpbnQpIHAxOwogICAgICBQcmlvcml0eTIgPSAo
c2hvcnQgaW50KSBwMjsKICAgICAgQ291bnRlciA9IGNvdW50ZXI7CiAgICAgIFVuaXF1ZUlkID0g
KHNob3J0IGludCkgdW5pcXVlSWQ7CiAgICB9CgoKCgoKCgogICAgdm9pZCBwcmludChvc3RyZWFt
ICZvdXQKICAgICAgICAgICAgICAgKTsKCgoKCgoKCiAgICBTcFNpbVRpbWUgJkluY3JlbWVudFBy
aW9yaXR5MShpbnQgdmFsdWUgPSAxKTsKCgoKCgoKCiAgICBTcFNpbVRpbWUgJkluY3JlbWVudFBy
aW9yaXR5MihpbnQgdmFsdWUgPSAxKTsKCiAgICBTcFNpbVRpbWUgJkRlY3JlbWVudFByaW9yaXR5
MShpbnQgdmFsdWUgPSAxKTsKCiAgICBTcFNpbVRpbWUgJkRlY3JlbWVudFByaW9yaXR5MihpbnQg
dmFsdWUgPSAxKTsKCgoKCgoKCiAgICBkb3VibGUgR2V0VGltZSgpIGNvbnN0IHtyZXR1cm4gVGlt
ZTt9CgoKCgoKCgogICAgdm9pZCBTZXRUaW1lKGRvdWJsZSB0CiAgICAgICAgICAgICAgICApIHsK
ICAgICAgVGltZSA9IHQ7CiAgICB9CgoKCgoKCgogICAgdm9pZCBTZXRQcmlvcml0eShpbnQgcDEK
ICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgUHJpb3JpdHkxID0gKHNob3J0IGludCkgcDE7
CiAgICB9CgoKCgoKCgogICAgdm9pZCBTZXRQcmlvcml0eShpbnQgcDEsCiAgICAgICAgICAgICAg
ICAgICAgIGludCBwMgogICAgICAgICAgICAgICAgICAgICkgewogICAgICBQcmlvcml0eTEgPSAo
c2hvcnQgaW50KSBwMTsKICAgICAgUHJpb3JpdHkyID0gKHNob3J0IGludCkgcDI7CiAgICB9CgoK
CgoKCgogICAgaW50IEdldFByaW9yaXR5MSgpIGNvbnN0IHtyZXR1cm4gUHJpb3JpdHkxO30KCgoK
CgoKCiAgICB2b2lkIFNldFByaW9yaXR5MShpbnQgcAogICAgICAgICAgICAgICAgICAgICApIHsK
ICAgICAgUHJpb3JpdHkxID0gKHNob3J0IGludCkgcDsKICAgIH0KCgoKCgoKCiAgICBpbnQgR2V0
UHJpb3JpdHkyKCkgY29uc3Qge3JldHVybiBQcmlvcml0eTI7fQoKCgoKCgoKICAgIHZvaWQgU2V0
UHJpb3JpdHkyKGludCBwCiAgICAgICAgICAgICAgICAgICAgICkgewogICAgICBQcmlvcml0eTIg
PSAoc2hvcnQgaW50KSBwOwogICAgfQoKCgoKCgoKICAgIGludCBHZXRDb3VudGVyKCkgY29uc3Qg
e3JldHVybiBDb3VudGVyO30KCgoKCgoKCiAgICB2b2lkIFNldENvdW50ZXIoaW50IGNvdW50ZXIK
ICAgICAgICAgICAgICAgICAgICkgewogICAgICBDb3VudGVyID0gY291bnRlcjsKICAgIH0KCgoK
CgoKCiAgICBpbnQgR2V0VW5pcXVlSWQoKSBjb25zdCB7cmV0dXJuIFVuaXF1ZUlkO30KCgoKCgoK
CiAgICB2b2lkIFNldFVuaXF1ZUlkKGludCB1bmlxdWVJZAogICAgICAgICAgICAgICAgICAgICkg
ewogICAgICBVbmlxdWVJZCA9IChzaG9ydCBpbnQpIHVuaXF1ZUlkOwogICAgfQoKICAgIG9wZXJh
dG9yIGRvdWJsZSgpIGNvbnN0IHtyZXR1cm4gVGltZTt9CgogICAgU3BTaW1UaW1lJiBvcGVyYXRv
ciA9KGRvdWJsZSB0KSB7CiAgICAgIFRpbWUgPSB0OwogICAgICByZXR1cm4oKnRoaXMpOwogICAg
fQoKICAgIFNwU2ltVGltZSYgb3BlcmF0b3IgKz0oZG91YmxlIHQpIHsKICAgICAgVGltZSArPSB0
OwogICAgICByZXR1cm4oKnRoaXMpOwogICAgfQoKICAgIFNwU2ltVGltZSYgb3BlcmF0b3IgLT0o
ZG91YmxlIHQpIHsKICAgICAgVGltZSAtPSB0OwogICAgICByZXR1cm4oKnRoaXMpOwogICAgfQoK
ICAgIFNwU2ltVGltZSYgb3BlcmF0b3IgPShjb25zdCBTcFNpbVRpbWUgJnR0KSB7CiAgICAgIFRp
bWUgPSB0dC5UaW1lOwogICAgICBQcmlvcml0eTEgPSAoc2hvcnQgaW50KSB0dC5Qcmlvcml0eTE7
CiAgICAgIFByaW9yaXR5MiA9IChzaG9ydCBpbnQpIHR0LlByaW9yaXR5MjsKICAgICAgQ291bnRl
ciA9IHR0LkNvdW50ZXI7CiAgICAgIFVuaXF1ZUlkID0gKHNob3J0IGludCkgdHQuVW5pcXVlSWQ7
CiAgICAgIHJldHVybigqdGhpcyk7CiAgICB9CgogICAgaW50IG9wZXJhdG9yIDwoY29uc3QgU3BT
aW1UaW1lJiB0dCkgY29uc3QgewogICAgICBpbnQgcmV0VmFsID0gMTsKCiAgICAgIGZvciAoOzsp
IHsKCiAgICAgICAgaWYgKFRpbWUgPCB0dC5UaW1lKSB7CiAgICAgICAgICBicmVhazsKICAgICAg
ICB9CiAgICAgICAgaWYgKFRpbWUgPiB0dC5UaW1lKSB7CiAgICAgICAgICByZXRWYWwgPSAwOwog
ICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBpZiAoUHJpb3JpdHkxIDwgdHQuUHJp
b3JpdHkxKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKFByaW9yaXR5
MSA+IHR0LlByaW9yaXR5MSkgewogICAgICAgICAgcmV0VmFsID0gMDsKICAgICAgICAgIGJyZWFr
OwogICAgICAgIH0KCiAgICAgICAgaWYgKFByaW9yaXR5MiA8IHR0LlByaW9yaXR5MikgewogICAg
ICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChQcmlvcml0eTIgPiB0dC5Qcmlvcml0
eTIpIHsKICAgICAgICAgIHJldFZhbCA9IDA7CiAgICAgICAgICBicmVhazsKICAgICAgICB9Cgog
ICAgICAgIGlmIChDb3VudGVyIDwgdHQuQ291bnRlcikgewogICAgICAgICAgYnJlYWs7CiAgICAg
ICAgfQogICAgICAgIGlmIChDb3VudGVyID4gdHQuQ291bnRlcikgewogICAgICAgICAgcmV0VmFs
ID0gMDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgaWYgKFVuaXF1ZUlkIDwg
dHQuVW5pcXVlSWQpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoVW5p
cXVlSWQgPiB0dC5VbmlxdWVJZCkgewogICAgICAgICAgcmV0VmFsID0gMDsKICAgICAgICAgIGJy
ZWFrOwogICAgICAgIH0KCiAgICAgICAgcmV0VmFsID0gMDsKCiAgICAgICAgYnJlYWs7CiAgICAg
IH0KCiAgICAgIHJldHVybiByZXRWYWw7CiAgICB9CgogICAgaW50IG9wZXJhdG9yID4oY29uc3Qg
U3BTaW1UaW1lJiB0dCkgY29uc3QgewogICAgICBpbnQgcmV0VmFsID0gMTsKCiAgICAgIGZvciAo
OzspIHsKCiAgICAgICAgaWYgKFRpbWUgPiB0dC5UaW1lKSB7CiAgICAgICAgICBicmVhazsKICAg
ICAgICB9CiAgICAgICAgaWYgKFRpbWUgPCB0dC5UaW1lKSB7CiAgICAgICAgICByZXRWYWwgPSAw
OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBpZiAoUHJpb3JpdHkxID4gdHQu
UHJpb3JpdHkxKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKFByaW9y
aXR5MSA8IHR0LlByaW9yaXR5MSkgewogICAgICAgICAgcmV0VmFsID0gMDsKICAgICAgICAgIGJy
ZWFrOwogICAgICAgIH0KCiAgICAgICAgaWYgKFByaW9yaXR5MiA+IHR0LlByaW9yaXR5Mikgewog
ICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChQcmlvcml0eTIgPCB0dC5Qcmlv
cml0eTIpIHsKICAgICAgICAgIHJldFZhbCA9IDA7CiAgICAgICAgICBicmVhazsKICAgICAgICB9
CgogICAgICAgIGlmIChDb3VudGVyID4gdHQuQ291bnRlcikgewogICAgICAgICAgYnJlYWs7CiAg
ICAgICAgfQogICAgICAgIGlmIChDb3VudGVyIDwgdHQuQ291bnRlcikgewogICAgICAgICAgcmV0
VmFsID0gMDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgaWYgKFVuaXF1ZUlk
ID4gdHQuVW5pcXVlSWQpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAo
VW5pcXVlSWQgPCB0dC5VbmlxdWVJZCkgewogICAgICAgICAgcmV0VmFsID0gMDsKICAgICAgICAg
IGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgcmV0VmFsID0gMDsKCiAgICAgICAgYnJlYWs7CiAg
ICAgIH0KICAgICAgcmV0dXJuIHJldFZhbDsKICAgIH0KCiAgaW50IG9wZXJhdG9yIDw9KGNvbnN0
IFNwU2ltVGltZSYgdHQpIGNvbnN0IHsgcmV0dXJuKCAhKCp0aGlzID4gdHQpICk7IH0KCiAgaW50
IG9wZXJhdG9yID49KGNvbnN0IFNwU2ltVGltZSYgdHQpIGNvbnN0IHsgcmV0dXJuKCAhKCp0aGlz
IDwgdHQpICk7IH0KCiAgICBpbnQgb3BlcmF0b3IgPT0oY29uc3QgU3BTaW1UaW1lJiB0dCkgY29u
c3QgewoKICAgICAgaW50IHJldFZhbCA9IDE7CgogICAgICBpZiAoVGltZSAhPSB0dC5UaW1lKSB7
CiAgICAgICAgcmV0VmFsID0gMDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBpZiAoUHJp
b3JpdHkxICE9IHR0LlByaW9yaXR5MSkgewogICAgICAgICAgcmV0VmFsID0gMDsKICAgICAgICB9
CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBpZiAoUHJpb3JpdHkyICE9IHR0LlByaW9yaXR5Mikg
ewogICAgICAgICAgICByZXRWYWwgPSAwOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgIGlmIChDb3VudGVyICE9IHR0LkNvdW50ZXIpIHsKICAgICAgICAgICAgICByZXRW
YWwgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIGlm
IChVbmlxdWVJZCAhPSB0dC5VbmlxdWVJZCkgewogICAgICAgICAgICAgICAgcmV0VmFsID0gMDsK
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IH0KICAgICAgcmV0dXJuIHJldFZhbDsKICAgIH0KCiAgICB2b2lkIERpc2FibGVBdXRvVGllQnJl
YWtpbmcodm9pZCkgewogICAgICBDb3VudGVyID0gR2V0TWF4UHJpb3JpdHkxKCk7CiAgICAgIFVu
aXF1ZUlkID0gKHNob3J0IGludCkgR2V0TWF4UHJpb3JpdHkxKCk7CiAgICB9CgogICAgaW50IG9w
ZXJhdG9yICE9KGNvbnN0IFNwU2ltVGltZSYgdHQpIGNvbnN0IHtyZXR1cm4gISgqdGhpcyA9PSB0
dCk7IH0KCgoKCgogICAgaW50IG9wZXJhdG9yIDwoZG91YmxlIHQpIGNvbnN0IHtyZXR1cm4gKFRp
bWUgPCB0KTt9CiAgICBpbnQgb3BlcmF0b3IgPihkb3VibGUgdCkgY29uc3Qge3JldHVybiAoVGlt
ZSA+IHQpO30KICAgIGludCBvcGVyYXRvciA8PShkb3VibGUgdCkgY29uc3Qge3JldHVybiAoVGlt
ZSA8PSB0KTt9CiAgICBpbnQgb3BlcmF0b3IgPj0oZG91YmxlIHQpIGNvbnN0IHtyZXR1cm4gKFRp
bWUgPj0gdCk7fQogICAgaW50IG9wZXJhdG9yID09KGRvdWJsZSB0KSBjb25zdCB7cmV0dXJuIChU
aW1lID09IHQpO30KICAgIGludCBvcGVyYXRvciAhPShkb3VibGUgdCkgY29uc3Qge3JldHVybiAo
VGltZSAhPSB0KTt9CgogIHByb3RlY3RlZDoKCiAgICBkb3VibGUgVGltZTsKICAgIHNob3J0IGlu
dCBQcmlvcml0eTE7CiAgICBzaG9ydCBpbnQgUHJpb3JpdHkyOwogICAgc2hvcnQgaW50IFVuaXF1
ZUlkOwogICAgTkVUX0lOVCBDb3VudGVyOwoKfTsKCgoKCgoKCm9zdHJlYW0mIG9wZXJhdG9yIDw8
KG9zdHJlYW0gJm91dCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3BTaW1UaW1lJiB0dAog
ICAgICAgICAgICAgICAgICAgICk7CgoKCgoKc3RhdGljIGlubGluZSBpbnQgb3BlcmF0b3IgPChk
b3VibGUgdCwgY29uc3QgU3BTaW1UaW1lJiB0dCkge3JldHVybiAodHQgPiB0KTt9CnN0YXRpYyBp
bmxpbmUgaW50IG9wZXJhdG9yIDw9KGRvdWJsZSB0LCBjb25zdCBTcFNpbVRpbWUmIHR0KSB7cmV0
dXJuICh0dCA+PSB0KTt9CnN0YXRpYyBpbmxpbmUgaW50IG9wZXJhdG9yID4oZG91YmxlIHQsIGNv
bnN0IFNwU2ltVGltZSYgdHQpIHtyZXR1cm4gKHR0IDwgdCk7fQpzdGF0aWMgaW5saW5lIGludCBv
cGVyYXRvciA+PShkb3VibGUgdCwgY29uc3QgU3BTaW1UaW1lJiB0dCkge3JldHVybiAodHQgPD0g
dCk7fQpzdGF0aWMgaW5saW5lIGludCBvcGVyYXRvciA9PShkb3VibGUgdCwgY29uc3QgU3BTaW1U
aW1lJiB0dCkge3JldHVybiAodHQgPT0gdCk7fQpzdGF0aWMgaW5saW5lIGludCBvcGVyYXRvciAh
PShkb3VibGUgdCwgY29uc3QgU3BTaW1UaW1lJiB0dCkge3JldHVybiAodHQgIT0gdCk7fQoKCgoK
CgoKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6ZGl2
X3Q7CiAgdXNpbmcgOjpsZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAgdXNpbmcgOjphYnM7CiAg
dXNpbmcgOjphdGV4aXQ7CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6YXRvaTsKICB1c2luZyA6
OmF0b2w7CiAgdXNpbmcgOjpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9jOwogIHVzaW5nIDo6ZGl2
OwogIHVzaW5nIDo6ZXhpdDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcgOjpnZXRlbnY7CiAgdXNp
bmcgOjpsYWJzOwogIHVzaW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxvYzsKICB1c2luZyA6Om1i
bGVuOwogIHVzaW5nIDo6bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7CiAgdXNpbmcgOjpxc29y
dDsKICB1c2luZyA6OnJhbmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVzaW5nIDo6c3JhbmQ7CiAg
dXNpbmcgOjpzdHJ0b2Q7CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcgOjpzdHJ0b3VsOwogIHVz
aW5nIDo6c3lzdGVtOwogIHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcgOjp3Y3RvbWI7CgogIGlu
bGluZSBsb25nCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7IH0KCiAgaW5saW5l
IGxkaXZfdAogIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBfX2op
OyB9Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6bGxkaXZfdDsKICB1c2luZyA6
Ol9FeGl0OwoKICBpbmxpbmUgbG9uZyBsb25nCiAgYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJu
IF9feCA+PSAwID8gX194IDogLV9feDsgfQoKICBpbmxpbmUgbG9uZyBsb25nCiAgbGxhYnMobG9u
ZyBsb25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBs
bGRpdl90CiAgZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9f
cTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7
IH0KCiAgaW5saW5lIGxsZGl2X3QKICBsbGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19k
KQogIHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUg
X19kOyByZXR1cm4gX19xOyB9CgogIHVzaW5nIDo6YXRvbGw7CiAgdXNpbmcgOjpzdHJ0b2Y7CiAg
dXNpbmcgOjpzdHJ0b2xsOwogIHVzaW5nIDo6c3RydG91bGw7CiAgdXNpbmcgOjpzdHJ0b2xkOwp9
CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OmxsZGl2X3Q7CiAgdXNpbmcgX19n
bnVfY3h4OjpfRXhpdDsKICB1c2luZyBfX2dudV9jeHg6OmFiczsKICB1c2luZyBfX2dudV9jeHg6
OmxsYWJzOwogIHVzaW5nIF9fZ251X2N4eDo6ZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXY7
CiAgdXNpbmcgX19nbnVfY3h4OjphdG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvZjsKICB1
c2luZyBfX2dudV9jeHg6OnN0cnRvbGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b3VsbDsKICB1
c2luZyBfX2dudV9jeHg6OnN0cnRvbGQ7Cn0KCgoKCgoKCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoK
CgoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9f
cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVz
dHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1tb3Zl
ICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0
LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgKm1lbXNl
dCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IG1lbWNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBf
X24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZv
aWQgKm1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHZvaWQgKnJh
d21lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZvaWQgKl9f
cywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVz
dCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJu
IGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0
cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5j
bXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3Ry
Y29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNo
YXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9f
c3RyY29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2Nh
bGVfdCBfX2wpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRl
cm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMs
IHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAqc3Ry
bmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25z
dCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjaHJu
dWwgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3Ms
IF9fY29uc3QgY2hhciAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2Nv
bnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNo
YXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
ZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNo
YXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
CgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2Nv
bnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCgpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy
ICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgpleHRlcm4gY2hh
ciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3Nh
dmVfcHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbW1lbSAoX19jb25zdCB2b2lk
ICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwKICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB2b2lkICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gdm9pZCAqX19tZW1wY3B5ICh2
b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2
b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQg
Km1lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3Qg
Y2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9fZXJybnVt
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hh
ciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBfX2J6
ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29w
eSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3My
LCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
CmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29u
c3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19sKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZz
bGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwg
X19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25z
dCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQgX19zdHJjYXNlY21wX2wgKF9fY29uc3QgY2hhciAq
X19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xv
Y2FsZV90IF9fbG9jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy
biBpbnQgX19zdHJuY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq
X19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3Qg
X19sb2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0
ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAogICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IHN0cnZlcnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy
ICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy
biBjaGFyICpzdHJzaWduYWwgKGludCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKl9f
c3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fc3JjKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwY3B5IChjaGFyICpfX3Jlc3Ry
aWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgp
OwoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3Qg
X19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
c3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpf
X3N0cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZvaWQgKl9fcywgc2l6
ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBj
aGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCn0KCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6
Om1lbWNweTsKICB1c2luZyA6Om1lbW1vdmU7CiAgdXNpbmcgOjpzdHJjcHk7CiAgdXNpbmcgOjpz
dHJuY3B5OwogIHVzaW5nIDo6c3RyY2F0OwogIHVzaW5nIDo6c3RybmNhdDsKICB1c2luZyA6Om1l
bWNtcDsKICB1c2luZyA6OnN0cmNtcDsKICB1c2luZyA6OnN0cmNvbGw7CiAgdXNpbmcgOjpzdHJu
Y21wOwogIHVzaW5nIDo6c3RyeGZybTsKICB1c2luZyA6OnN0cmNzcG47CiAgdXNpbmcgOjpzdHJz
cG47CiAgdXNpbmcgOjpzdHJ0b2s7CiAgdXNpbmcgOjptZW1zZXQ7CiAgdXNpbmcgOjpzdHJlcnJv
cjsKICB1c2luZyA6OnN0cmxlbjsKCiAgdXNpbmcgOjptZW1jaHI7CgogIGlubGluZSB2b2lkKgog
IG1lbWNocih2b2lkKiBfX3AsIGludCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gbWVtY2hy
KGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+KF9fcCksIF9fYywgX19uKTsgfQoKICB1c2luZyA6OnN0
cmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyBy
ZXR1cm4gX19idWlsdGluX3N0cmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19u
KTsgfQoKICB1c2luZyA6OnN0cnBicms7CgogIGlubGluZSBjaGFyKgogIHN0cnBicmsoY2hhciog
X19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycGJyayhjb25z
dF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjpzdHJyY2hyOwoK
ICBpbmxpbmUgY2hhcioKICBzdHJyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4g
X19idWlsdGluX3N0cnJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0K
CiAgdXNpbmcgOjpzdHJzdHI7CgogIGlubGluZSBjaGFyKgogIHN0cnN0cihjaGFyKiBfX3MxLCBj
b25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxj
b25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9Cn0KCgoKY2xhc3MgU3BLZXkgOiBwcml2YXRlIFNw
UGVyc2lzdGVuY2VCYXNlQ2xhc3MgewogIHB1YmxpYzoKICAgIHZpcnR1YWwgflNwS2V5KCkge30K
ICAgIFNwS2V5KEtFWV9NT0RFIG1vZGUgPSBOT19LRVlfTU9ERSkgOiBNb2RlKG1vZGUpIHt9CiAg
ICB2aXJ0dWFsIFNwS2V5ICpDbG9uZSgpIGNvbnN0IHsgcmV0dXJuIF9fbnVsbDt9CiAgICBLRVlf
TU9ERSBHZXRNb2RlKCkgY29uc3Qge3JldHVybiBNb2RlO30KICAgIGludCBvcGVyYXRvciA8KGNv
bnN0IFNwS2V5ICYgeSkgY29uc3QgeyByZXR1cm4gdGhpcy0+bHQoJnkpO30KICAgIGludCBvcGVy
YXRvciA+KGNvbnN0IFNwS2V5ICZ5KSBjb25zdCB7IHJldHVybiB0aGlzLT5ndCgmeSk7fQogICAg
aW50IG9wZXJhdG9yID09KGNvbnN0IFNwS2V5ICZ5KSBjb25zdCB7IHJldHVybiB0aGlzLT5lcSgm
eSk7fQogICAgaW50IG9wZXJhdG9yID49KGNvbnN0IFNwS2V5ICZ5KSBjb25zdCB7IHJldHVybiB0
aGlzLT5nZXEoJnkpO30KICAgIGludCBvcGVyYXRvciA8PShjb25zdCBTcEtleSAmeSkgY29uc3Qg
eyByZXR1cm4gdGhpcy0+bGVxKCZ5KTt9CgogICAgdmlydHVhbCBpbnQgbHQoY29uc3QgU3BLZXkq
KSBjb25zdD0wOwogICAgdmlydHVhbCBpbnQgZ3QoY29uc3QgU3BLZXkqKSBjb25zdD0wOwogICAg
dmlydHVhbCBpbnQgZXEoY29uc3QgU3BLZXkqKSBjb25zdD0wOwogICAgdmlydHVhbCBpbnQgbGVx
KGNvbnN0IFNwS2V5KikgY29uc3Q9MDsKICAgIHZpcnR1YWwgaW50IGdlcShjb25zdCBTcEtleSop
IGNvbnN0PTA7CiAgICB2aXJ0dWFsIHZvaWQgUHJpbnQob3N0cmVhbSAmb3MpIGNvbnN0PTA7Cgog
IHByb3RlY3RlZDoKCiAgcHJpdmF0ZToKICAgIEtFWV9NT0RFIE1vZGU7Cn07Cgpvc3RyZWFtICZv
cGVyYXRvciA8PCAob3N0cmVhbSAmb3MsIGNvbnN0IFNwS2V5ICZrKTsKCmNsYXNzIFNwRG91Ymxl
S2V5IDogcHVibGljIFNwS2V5IHsKICBwdWJsaWM6CiAgICBTcERvdWJsZUtleSgpIDogU3BLZXko
RE9VQkxFX0tFWV9NT0RFKSB7O30KICAgIFNwRG91YmxlS2V5KGNvbnN0IGRvdWJsZSB2KSA6IFNw
S2V5KERPVUJMRV9LRVlfTU9ERSkge1ZhbCA9IHY7fQoKICAgIHZpcnR1YWwgU3BLZXkgKkNsb25l
KCkgY29uc3QgeyByZXR1cm4gbmV3IFNwRG91YmxlS2V5KCp0aGlzKTt9CiAgICBvcGVyYXRvciBk
b3VibGUoKSBjb25zdCB7cmV0dXJuIFZhbDt9CgogICAgdmlydHVhbCBpbnQgbHQoY29uc3QgU3BL
ZXkgKnkpIGNvbnN0CiAgICAgIHtyZXR1cm4gdGhpcy0+VmFsIDwgKChTcERvdWJsZUtleSAqKSB5
KS0+VmFsO30KICAgIHZpcnR1YWwgaW50IGd0KGNvbnN0IFNwS2V5ICp5KSBjb25zdAogICAgICB7
cmV0dXJuIHRoaXMtPlZhbCA+ICgoU3BEb3VibGVLZXkgKikgeSktPlZhbDt9CiAgICB2aXJ0dWFs
IGludCBlcShjb25zdCBTcEtleSAqeSkgY29uc3QKICAgICAge3JldHVybiB0aGlzLT5WYWwgPT0g
KChTcERvdWJsZUtleSAqKSB5KS0+VmFsO30KICAgIHZpcnR1YWwgaW50IGxlcShjb25zdCBTcEtl
eSAqeSkgY29uc3QKICAgICAge3JldHVybiB0aGlzLT5WYWwgPD0gKChTcERvdWJsZUtleSAqKSB5
KS0+VmFsO30KICAgIHZpcnR1YWwgaW50IGdlcShjb25zdCBTcEtleSAqeSkgY29uc3QKICAgICAg
e3JldHVybiB0aGlzLT5WYWwgPj0gKChTcERvdWJsZUtleSAqKSB5KS0+VmFsO30KICAgIHZpcnR1
YWwgdm9pZCBQcmludChvc3RyZWFtICZvcykgY29uc3Q7CgogIHByb3RlY3RlZDoKCiAgcHJpdmF0
ZToKICAgIGRvdWJsZSBWYWw7Cn07CgoKY2xhc3MgU3BWb2lkUHRyS2V5IDogcHVibGljIFNwS2V5
IHsKICBwdWJsaWM6CiAgICBTcFZvaWRQdHJLZXkoKSA6IFNwS2V5KFZPSURfUFRSX0tFWV9NT0RF
KSB7O30KICAgIFNwVm9pZFB0cktleShjb25zdCB2b2lkICp2KSA6IFNwS2V5KFZPSURfUFRSX0tF
WV9NT0RFKSB7VmFsID0odm9pZCAqKSB2O30KCiAgICB2aXJ0dWFsIFNwS2V5ICpDbG9uZSgpIGNv
bnN0IHsgcmV0dXJuIG5ldyBTcFZvaWRQdHJLZXkoKnRoaXMpO30KICAgIG9wZXJhdG9yIHZvaWQq
KCkgY29uc3Qge3JldHVybiBWYWw7fQoKICAgIHZpcnR1YWwgaW50IGx0KGNvbnN0IFNwS2V5ICp5
KSBjb25zdAogICAgICB7cmV0dXJuIHRoaXMtPlZhbCA8KChTcFZvaWRQdHJLZXkgKikgeSktPlZh
bDt9CiAgICB2aXJ0dWFsIGludCBndChjb25zdCBTcEtleSAqeSkgY29uc3QKICAgICAge3JldHVy
biB0aGlzLT5WYWwgPigoU3BWb2lkUHRyS2V5ICopIHkpLT5WYWw7fQogICAgdmlydHVhbCBpbnQg
ZXEoY29uc3QgU3BLZXkgKnkpIGNvbnN0CiAgICAgIHtyZXR1cm4gdGhpcy0+VmFsID09KChTcFZv
aWRQdHJLZXkgKikgeSktPlZhbDt9CiAgICB2aXJ0dWFsIGludCBsZXEoY29uc3QgU3BLZXkgKnkp
IGNvbnN0CiAgICAgIHtyZXR1cm4gdGhpcy0+VmFsIDw9KChTcFZvaWRQdHJLZXkgKikgeSktPlZh
bDt9CiAgICB2aXJ0dWFsIGludCBnZXEoY29uc3QgU3BLZXkgKnkpIGNvbnN0CiAgICAgIHtyZXR1
cm4gdGhpcy0+VmFsID49KChTcFZvaWRQdHJLZXkgKikgeSktPlZhbDt9CiAgICB2aXJ0dWFsIHZv
aWQgUHJpbnQob3N0cmVhbSAmb3MpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CgogIHByaXZhdGU6CiAg
ICB2b2lkICpWYWw7Cgp9OwoKCmNsYXNzIFNwU3RyaW5nS2V5IDogcHVibGljIFNwS2V5IHsKICBw
dWJsaWM6CiAgICB2b2lkIEF0dGFjaFBvaW50ZXIoKSB7IFBPX0FUVEFDSF9QVFJfVk9JRCgoKGNo
YXIqJikodm9pZComKVZhbCksIERlZmF1bHREYXRhQmFzZSk7fQogICAgb3BlcmF0b3IgY2hhcioo
KSBjb25zdCB7IHJldHVybiBWYWw7fQogICAgU3BTdHJpbmdLZXkoKSA6IFNwS2V5KFNUUklOR19L
RVlfTU9ERSkge1ZhbCA9IF9fbnVsbDt9CiAgICBTcFN0cmluZ0tleShjb25zdCBjaGFyICpzKSA6
IFNwS2V5KFNUUklOR19LRVlfTU9ERSkgewogICAgICBWYWwgPShzKSA/IHN0cmR1cChzKSA6IChj
aGFyICopIF9fbnVsbDsgfQogICAgU3BTdHJpbmdLZXkoY29uc3QgU3BTdHJpbmdLZXkgJnMpIDog
U3BLZXkoU1RSSU5HX0tFWV9NT0RFKSB7CiAgICAgIFZhbCA9KHMuVmFsKSA/IHN0cmR1cChzLlZh
bCkgOiAoY2hhciAqKSBfX251bGw7IH0KICAgIHZvaWQgU2V0U3RyaW5nKGNvbnN0IGNoYXIgKnN0
cikgewogICAgICBpZiAoVmFsKSB7CiAgICAgICAgZnJlZShWYWwpOwogICAgICB9CiAgICAgIGlm
IChzdHIpIHsKICAgICAgICBWYWwgPSBzdHJkdXAoc3RyKTsKICAgICAgfQogICAgICBlbHNlIHsK
ICAgICAgICBWYWwgPSBfX251bGw7CiAgICAgIH0KICAgIH0KICAgIFNwU3RyaW5nS2V5ICZvcGVy
YXRvciA9KGNvbnN0IFNwU3RyaW5nS2V5ICZzKSB7CiAgICAgIGlmICh0aGlzICE9ICZzKSB7CiAg
ICAgICAgU2V0U3RyaW5nKHMuVmFsKTsKICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogICAgU3BTdHJpbmdLZXkgJm9wZXJhdG9yID0oY29uc3QgY2hhciAqcykgewogICAgICBTZXRT
dHJpbmcocyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICB2aXJ0dWFsIH5TcFN0cmlu
Z0tleSgpIHsKICAgICAgaWYgKFZhbCkgewogICAgICAgIGZyZWUoVmFsKTsKICAgICAgfQogICAg
fQoKICAgIHZpcnR1YWwgU3BLZXkgKkNsb25lKCkgY29uc3QgeyByZXR1cm4gbmV3IFNwU3RyaW5n
S2V5KCp0aGlzKTt9CgogICAgdmlydHVhbCBpbnQgbHQoY29uc3QgU3BLZXkgKnkpIGNvbnN0CiAg
ICAgIHtyZXR1cm4gc3RyY21wKHRoaXMtPlZhbCwoKFNwU3RyaW5nS2V5ICopIHkpLT5WYWwpIDwg
MDt9CiAgICB2aXJ0dWFsIGludCBndChjb25zdCBTcEtleSAqeSkgY29uc3QKICAgICAge3JldHVy
biBzdHJjbXAodGhpcy0+VmFsLCgoU3BTdHJpbmdLZXkgKikgeSktPlZhbCkgPiAwO30KICAgIHZp
cnR1YWwgaW50IGVxKGNvbnN0IFNwS2V5ICp5KSBjb25zdAogICAgICB7cmV0dXJuIHN0cmNtcCh0
aGlzLT5WYWwsKChTcFN0cmluZ0tleSAqKSB5KS0+VmFsKSA9PSAwO30KICAgIHZpcnR1YWwgaW50
IGxlcShjb25zdCBTcEtleSAqeSkgY29uc3QKICAgICAge3JldHVybiBzdHJjbXAodGhpcy0+VmFs
LCgoU3BTdHJpbmdLZXkgKikgeSktPlZhbCkgPiAtMTt9CiAgICB2aXJ0dWFsIGludCBnZXEoY29u
c3QgU3BLZXkgKnkpIGNvbnN0CiAgICAgIHtyZXR1cm4gc3RyY21wKHRoaXMtPlZhbCwoKFNwU3Ry
aW5nS2V5ICopIHkpLT5WYWwpIDwgMTt9CiAgICB2aXJ0dWFsIHZvaWQgUHJpbnQob3N0cmVhbSAm
b3MpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CgogIHByaXZhdGU6CiAgICBjaGFyICpWYWw7Cgp9OwoK
CmNsYXNzIFNwSW50ZXJ2YWxLZXkgOiBwdWJsaWMgU3BLZXkgewogIHB1YmxpYzoKICAgIFNwSW50
ZXJ2YWxLZXkoKSA6IFNwS2V5KElOVEVSVkFMX0tFWV9NT0RFKSB7O30KICAgIFNwSW50ZXJ2YWxL
ZXkoY29uc3Qgdm9pZCAqbCkgOiBTcEtleShJTlRFUlZBTF9LRVlfTU9ERSkgewogICAgICBMb3cg
PSAodm9pZCAqKSBsOwogICAgICBIaWdoID0odm9pZCAqKSBsOwogICAgfQogICAgU3BJbnRlcnZh
bEtleShjb25zdCB2b2lkICpsLCBjb25zdCB2b2lkICpoKSA6IFNwS2V5KElOVEVSVkFMX0tFWV9N
T0RFKSB7CiAgICAgIExvdyA9ICh2b2lkICopIGw7CiAgICAgIEhpZ2ggPSAodm9pZCAqKSBoOwog
ICAgfQoKICAgIHZvaWQgKk1pbigpIGNvbnN0IHtyZXR1cm4gTG93O30KICAgIHZvaWQgKk1heCgp
IGNvbnN0IHtyZXR1cm4gSGlnaDt9CgogICAgdmlydHVhbCBTcEtleSAqQ2xvbmUoKSBjb25zdCB7
IHJldHVybiBuZXcgU3BJbnRlcnZhbEtleSgqdGhpcyk7fQogICAgU3BJbnRlcnZhbEtleSYgb3Bl
cmF0b3IoKSAodm9pZCAqbCwgdm9pZCAqaCkgewogICAgICBMb3cgPSBsOwogICAgICBIaWdoID0g
aDsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIHZpcnR1YWwgaW50IGx0KGNvbnN0IFNw
S2V5ICp5KSBjb25zdAogICAgICB7cmV0dXJuIHRoaXMtPkhpZ2ggPCgoU3BJbnRlcnZhbEtleSAq
KSB5KS0+TG93O30KICAgIHZpcnR1YWwgaW50IGd0KGNvbnN0IFNwS2V5ICp5KSBjb25zdAogICAg
ICB7cmV0dXJuIHRoaXMtPkxvdyA+KChTcEludGVydmFsS2V5ICopIHkpLT5IaWdoO30KICAgIHZp
cnR1YWwgaW50IGVxKGNvbnN0IFNwS2V5ICp5KSBjb25zdAogICAgICB7IHJldHVybigoKHRoaXMt
PkhpZ2ggPj0gKChTcEludGVydmFsS2V5ICopIHkpLT5IaWdoKSAmJgogICAgICAgICAgICAgICAg
KHRoaXMtPkxvdyA8PSAoKFNwSW50ZXJ2YWxLZXkgKikgeSktPkxvdykpIHx8CiAgICAgICAgICAg
ICAgICgodGhpcy0+SGlnaCA8PSAoKFNwSW50ZXJ2YWxLZXkgKikgeSktPkhpZ2gpICYmCiAgICAg
ICAgICAgICAgICAodGhpcy0+TG93ID49ICgoU3BJbnRlcnZhbEtleSAqKSB5KS0+TG93KSkpO30K
ICAgIHZpcnR1YWwgaW50IGxlcShjb25zdCBTcEtleSAqeSkgY29uc3QKICAgICAge3JldHVybiB0
aGlzLT5IaWdoIDw9ICgoU3BJbnRlcnZhbEtleSAqKSB5KS0+TG93O30KICAgIHZpcnR1YWwgaW50
IGdlcShjb25zdCBTcEtleSAqeSkgY29uc3QKICAgICAge3JldHVybiB0aGlzLT5Mb3cgPj0gKChT
cEludGVydmFsS2V5ICopIHkpLT5IaWdoO30KICAgIHZpcnR1YWwgdm9pZCBQcmludChvc3RyZWFt
ICZvcykgY29uc3Q7CgogIHByb3RlY3RlZDoKCiAgcHJpdmF0ZToKICAgIHZvaWQgKkxvdzsKICAg
IHZvaWQgKkhpZ2g7Cn07CgpjbGFzcyBTcFNpbVRpbWVLZXkgOiBwdWJsaWMgU3BLZXkgewogIHB1
YmxpYzoKICAgIFNwU2ltVGltZUtleSgpIDogU3BLZXkoU0lNX1RJTUVfS0VZX01PREUpIHs7fQog
ICAgU3BTaW1UaW1lS2V5KGNvbnN0IFNwU2ltVGltZSB2KSA6IFNwS2V5KFNJTV9USU1FX0tFWV9N
T0RFKSB7VmFsID0gdjt9CgogICAgdmlydHVhbCBTcEtleSAqQ2xvbmUoKSBjb25zdCB7IHJldHVy
biBuZXcgU3BTaW1UaW1lS2V5KCp0aGlzKTt9CiAgICBvcGVyYXRvciBTcFNpbVRpbWUoKSBjb25z
dCB7cmV0dXJuIFZhbDt9CgogICAgdmlydHVhbCBpbnQgbHQoY29uc3QgU3BLZXkgKnkpIGNvbnN0
IHsKICAgICAgcmV0dXJuIHRoaXMtPlZhbCA8ICgoU3BTaW1UaW1lS2V5ICopIHkpLT5WYWw7CiAg
ICB9CiAgICB2aXJ0dWFsIGludCBndChjb25zdCBTcEtleSAqeSkgY29uc3QgewogICAgICByZXR1
cm4gdGhpcy0+VmFsID4gKChTcFNpbVRpbWVLZXkgKikgeSktPlZhbDsKICAgIH0KICAgIHZpcnR1
YWwgaW50IGVxKGNvbnN0IFNwS2V5ICp5KSBjb25zdCB7CiAgICAgIHJldHVybiB0aGlzLT5WYWwg
PT0gKChTcFNpbVRpbWVLZXkgKikgeSktPlZhbDsKICAgIH0KICAgIHZpcnR1YWwgaW50IGxlcShj
b25zdCBTcEtleSAqeSkgY29uc3QgewogICAgICByZXR1cm4gdGhpcy0+VmFsIDw9ICgoU3BTaW1U
aW1lS2V5ICopIHkpLT5WYWw7CiAgICB9CiAgICB2aXJ0dWFsIGludCBnZXEoY29uc3QgU3BLZXkg
KnkpIGNvbnN0IHsKICAgICAgcmV0dXJuIHRoaXMtPlZhbCA+PSAoKFNwU2ltVGltZUtleSAqKSB5
KS0+VmFsOwogICAgfQogICAgdmlydHVhbCB2b2lkIFByaW50KG9zdHJlYW0gJm9zKSBjb25zdDsK
CiAgcHJvdGVjdGVkOgoKICBwcml2YXRlOgogICAgU3BTaW1UaW1lIFZhbDsKfTsKCgpjbGFzcyBU
UkVFX0lURU0gewoKICBmcmllbmQgY2xhc3MgU3BCaW5hcnlUcmVlOwogIGZyaWVuZCBjbGFzcyBT
cEhhc2hUcmVlOwogIGZyaWVuZCBjbGFzcyBSQl9TcEJpbmFyeVRyZWU7CiAgZnJpZW5kIGNsYXNz
IFJCX1NwSGFzaFRyZWU7CiAgZnJpZW5kIGNsYXNzIFJCX1NwUHJpb3JpdHlUcmVlOwogIGZyaWVu
ZCBjbGFzcyBTcEl0ZXJhdG9yX1NwQmluYXJ5VHJlZTsKICBmcmllbmQgY2xhc3MgU3BJdGVyYXRv
cl9SQl9TcEJpbmFyeVRyZWU7CiAgZnJpZW5kIGNsYXNzIFNwSXRlcmF0b3JfU3BIYXNoVHJlZTsK
ICBmcmllbmQgY2xhc3MgU3BJdGVyYXRvcl9SQl9TcEhhc2hUcmVlOwoKICAgcHVibGljOgogICAg
IFRSRUVfSVRFTSgpIHtJbml0KCk7fQogICAgIGRvdWJsZSBEb3VibGVWYWwoKSB7IHJldHVybiAo
ZG91YmxlKSAqKFNwRG91YmxlS2V5ICopIE5vZGVLZXk7IH0KICAgICBTcFNpbVRpbWUgU2ltVGlt
ZVZhbCgpIHsgcmV0dXJuIChTcFNpbVRpbWUpICooU3BTaW1UaW1lS2V5ICopIE5vZGVLZXk7IH0K
CiAgcHJpdmF0ZToKICAgIHZvaWQgKkVsZW1lbnQ7CgogICAgVFJFRV9JVEVNICpQYXJlbnQ7CiAg
ICBUUkVFX0lURU0gKkxlZnRDaGlsZDsKICAgIFRSRUVfSVRFTSAqUmlnaHRDaGlsZDsKICAgIGlu
dCBObGVmdDsKICAgIGludCBOcmlnaHQ7CiAgICBTcEtleSAqTm9kZUtleTsKICAgIGludCBUaWVC
cmVha2VyOwoKICAgIHZvaWQgSW5pdCgpIHsKICAgICAgRWxlbWVudCA9IF9fbnVsbDsKICAgICAg
UGFyZW50ID0gX19udWxsOwogICAgICBMZWZ0Q2hpbGQgPSBfX251bGw7CiAgICAgIFJpZ2h0Q2hp
bGQgPSBfX251bGw7CiAgICAgIE5sZWZ0ID0gMDsKICAgICAgTnJpZ2h0ID0gMDsKICAgICAgTm9k
ZUtleSA9IF9fbnVsbDsKICAgICAgVGllQnJlYWtlciA9IDA7CiAgICB9CgogICAgaW50IG9wZXJh
dG9yID09KGNvbnN0IFRSRUVfSVRFTSAmaXRlbSkgY29uc3QgewogICAgICByZXR1cm4gKCpOb2Rl
S2V5ID09ICppdGVtLk5vZGVLZXkpOwogICAgfQoKICAgIGludCBvcGVyYXRvciAhPShjb25zdCBU
UkVFX0lURU0gJml0ZW0pIGNvbnN0IHsKICAgICAgcmV0dXJuICEoKk5vZGVLZXkgPT0gKml0ZW0u
Tm9kZUtleSk7CiAgICB9CgogICAgaW50IG9wZXJhdG9yIDwoY29uc3QgVFJFRV9JVEVNICZpdGVt
KSBjb25zdCB7CiAgICAgIGludCByYyA9KCpOb2RlS2V5IDwgKml0ZW0uTm9kZUtleSk7CiAgICAg
IGlmIChyYyA9PSAwKSB7CiAgICAgICAgaWYgKCpOb2RlS2V5ID09ICppdGVtLk5vZGVLZXkpIHsK
ICAgICAgICAgIHJjID0oVGllQnJlYWtlciA8IGl0ZW0uVGllQnJlYWtlcik7CiAgICAgICAgfQog
ICAgICB9CiAgICAgIHJldHVybiByYzsKICAgIH0KCiAgICBpbnQgb3BlcmF0b3IgPD0oY29uc3Qg
VFJFRV9JVEVNICZpdGVtKSBjb25zdCB7CiAgICAgIGludCByYyA9KCpOb2RlS2V5IDw9ICppdGVt
Lk5vZGVLZXkpOwogICAgICBpZiAocmMgPT0gMSkgewogICAgICAgIGlmICgqTm9kZUtleSA9PSAq
aXRlbS5Ob2RlS2V5KSB7CiAgICAgICAgICByYyA9KFRpZUJyZWFrZXIgPCBpdGVtLlRpZUJyZWFr
ZXIpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmM7CiAgICB9CgogICAgaW50IG9w
ZXJhdG9yID4oY29uc3QgVFJFRV9JVEVNICZpdGVtKSBjb25zdCB7CiAgICAgIGludCByYyA9KCpO
b2RlS2V5ID4gKml0ZW0uTm9kZUtleSk7CiAgICAgIGlmIChyYyA9PSAwKSB7CiAgICAgICAgaWYg
KCpOb2RlS2V5ID09ICppdGVtLk5vZGVLZXkpIHsKICAgICAgICAgIHJjID0oVGllQnJlYWtlciA+
IGl0ZW0uVGllQnJlYWtlcik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByYzsKICAg
IH0KCiAgICBpbnQgb3BlcmF0b3IgPj0oY29uc3QgVFJFRV9JVEVNICZpdGVtKSBjb25zdCB7CiAg
ICAgIGludCByYyA9KCpOb2RlS2V5ID49ICppdGVtLk5vZGVLZXkpOwogICAgICBpZiAocmMgPT0g
MSkgewogICAgICAgIGlmICgqTm9kZUtleSA9PSAqaXRlbS5Ob2RlS2V5KSB7CiAgICAgICAgICBy
YyA9KFRpZUJyZWFrZXIgPiBpdGVtLlRpZUJyZWFrZXIpOwogICAgICAgIH0KICAgICAgfQogICAg
ICByZXR1cm4gcmM7CiAgICB9Cn07CgoKY2xhc3MgU3BCaW5hcnlUcmVlOwoKY2xhc3MgU3BJdGVy
YXRvcl9TcEJpbmFyeVRyZWUgOiBwdWJsaWMgU3BNYXBJdGVyYXRvciB7CiAgcHJpdmF0ZToKICAg
IGZyaWVuZCBjbGFzcyBTcEFsdFRyZWVDaGFuZ2U7CiAgICBmcmllbmQgY2xhc3MgU3BCaW5hcnlU
cmVlOwogICAgZnJpZW5kIGNsYXNzIFNwSXRlcmF0b3JfU3BIYXNoVHJlZTsKICAgIFRSRUVfSVRF
TSAqQ3VycmVudE5vZGU7CgogICAgU3BJdGVyYXRvcl9TcEJpbmFyeVRyZWUoU3BCaW5hcnlUcmVl
ICZiaW5hcnlUcmVlLAogICAgICAgICBUUkVFX0lURU0gKmN1cnJlbnROb2RlKQogICAgICA6IEN1
cnJlbnROb2RlKGN1cnJlbnROb2RlKSwgQ29udGFpbmVyKCZiaW5hcnlUcmVlKSB7fQoKCiAgICB2
b2lkIFJlbW92ZU5vZGUoVFJFRV9JVEVNICpub2RlKTsKCiAgcHJvdGVjdGVkOgogICAgU3BCaW5h
cnlUcmVlICpDb250YWluZXI7CgogICAgVFJFRV9JVEVNICpHZXRDdXJyZW50Tm9kZSh2b2lkKSB7
IHJldHVybiBDdXJyZW50Tm9kZTsgfQoKICAgIFNwQmluYXJ5VHJlZSAqR2V0Q29udGFpbmVyKHZv
aWQpIHsgcmV0dXJuIENvbnRhaW5lcjsgfQoKICBwdWJsaWM6CiAgICBTcEl0ZXJhdG9yX1NwQmlu
YXJ5VHJlZSgpIDogQ3VycmVudE5vZGUoX19udWxsKSwgQ29udGFpbmVyKF9fbnVsbCkge30KCiAg
ICBTcEl0ZXJhdG9yX1NwQmluYXJ5VHJlZShTcEJpbmFyeVRyZWUgJmJpbmFyeVRyZWUpOwoKICAg
IFNwSXRlcmF0b3JfU3BCaW5hcnlUcmVlKFNwQmluYXJ5VHJlZSAmYmluYXJ5VHJlZSwgaW50IFRv
cE9yQm90KTsKCiAgICB2aXJ0dWFsIHZvaWQgKkdldEZpcnN0RWxlbWVudCgpOwoKICAgIHZpcnR1
YWwgdm9pZCAqR2V0TGFzdEVsZW1lbnQoKTsKCiAgICB2aXJ0dWFsIHZvaWQgKkdldEN1cnJlbnRF
bGVtZW50KCkgY29uc3QgewogICAgICB2b2lkICplPV9fbnVsbDsKICAgICAgaWYgKEN1cnJlbnRO
b2RlKSBlID0gQ3VycmVudE5vZGUtPkVsZW1lbnQ7CiAgICAgIHJldHVybiBlOwogICAgfQoKICAg
IHZpcnR1YWwgZG91YmxlIEdldEN1cnJlbnRLZXkoKSBjb25zdCB7CiAgICAgIGRvdWJsZSByZXRW
YWwgPSAtMTsKICAgICAgaWYgKEN1cnJlbnROb2RlKXsKICAgICAgICBpZiAoQ3VycmVudE5vZGUt
Pk5vZGVLZXktPkdldE1vZGUoKSA9PSBET1VCTEVfS0VZX01PREUpewogICAgICAgICAgcmV0VmFs
ID0gKigoU3BEb3VibGVLZXkqKUN1cnJlbnROb2RlLT5Ob2RlS2V5KTsKICAgICAgICB9CiAgICAg
ICAgZWxzZSB7CiAgICAgICAgICBQcmludE1lc3NhZ2UoIkVycm9yOiBOb3QgaW4gZG91YmxlIGtl
eSBtb2RlIik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXRWYWw7CiAgICB9Cgog
ICAgdmlydHVhbCBjaGFyKiBHZXRDdXJyZW50S2V5TmFtZSgpIGNvbnN0IHsKICAgICAgY2hhciAq
cmV0VmFsID0gX19udWxsOwogICAgICBpZiAoQ3VycmVudE5vZGUpewogICAgICAgIGlmIChDdXJy
ZW50Tm9kZS0+Tm9kZUtleS0+R2V0TW9kZSgpID09IFNUUklOR19LRVlfTU9ERSl7CiAgICAgICAg
ICByZXRWYWwgPSAoY2hhciAqKSgqKChTcFN0cmluZ0tleSopKEN1cnJlbnROb2RlLT5Ob2RlS2V5
KSkpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIFByaW50TWVzc2FnZSgiRXJy
b3I6IE5vdCBpbiBzdHJpbmcga2V5IG1vZGUiKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0
dXJuIHJldFZhbDsKICAgIH0KCgogICAgdmlydHVhbCB2b2lkICpHZXROZXh0RWxlbWVudCgpOwoK
CiAgICB2aXJ0dWFsIHZvaWQgKkdldFByZXZpb3VzRWxlbWVudCgpOwoKCgoKICAgIHZpcnR1YWwg
dm9pZCAqUmVtb3ZlQ3VycmVudEVsZW1lbnRBbmRHb1RvUHJldmlvdXModm9pZCk7CgoKCgogICAg
dmlydHVhbCB2b2lkICpSZW1vdmVDdXJyZW50RWxlbWVudEFuZEdvVG9OZXh0KHZvaWQpOwoKCiAg
ICBTcEludGVydmFsS2V5KiBHZXRDdXJyZW50S2V5SW50ZXJ2YWwoKSBjb25zdCB7CiAgICAgIGlm
IChDdXJyZW50Tm9kZSAmJiAoQ3VycmVudE5vZGUtPk5vZGVLZXktPkdldE1vZGUoKQogICAgICAg
ICAgICAgICAgICAgICAgICAgID09IElOVEVSVkFMX0tFWV9NT0RFKSkgewogICAgICAgIHJldHVy
biAoU3BJbnRlcnZhbEtleSopQ3VycmVudE5vZGUtPk5vZGVLZXk7CiAgICAgIH0KICAgICAgUHJp
bnRNZXNzYWdlKCJFcnJvcjogTm90IGluIGludGVydmFsIGtleSBtb2RlIik7CiAgICAgIHJldHVy
biBfX251bGw7CiAgICB9CgogICAgU3BTaW1UaW1lIEdldEN1cnJlbnRTaW1UaW1lS2V5KCkgewog
ICAgICBpZiAoQ3VycmVudE5vZGUgJiYgKEN1cnJlbnROb2RlLT5Ob2RlS2V5LT5HZXRNb2RlKCkg
PT0KICAgICAgICBTSU1fVElNRV9LRVlfTU9ERSkpIHsKICAgICAgICByZXR1cm4gKFNwU2ltVGlt
ZSkoKigoU3BTaW1UaW1lS2V5ICopKEN1cnJlbnROb2RlLT5Ob2RlS2V5KSkpOwogICAgICB9CiAg
ICAgIFByaW50TWVzc2FnZSgiRXJyb3I6IE5vdCBpbiBTaW1UaW1lIGtleSBtb2RlIik7CiAgICAg
IHJldHVybiBTcFNpbVRpbWUoLTEsIC0xLCAtMSk7CiAgICB9CgogICAgdm9pZCBQcmludE1lc3Nh
Z2UoY29uc3QgY2hhciAqbXNnKSBjb25zdDsKfTsKCgoKCgoKCmNvbnN0IGRvdWJsZSBTcEluZmlu
aXR5ID0gMS4wZTIwOwpjb25zdCBpbnQgU3BTZWVkSW5pdCA9IDEyMzQ1OwoKCmV4dGVybiBTcFBv
TWVtcG9vbCogR2xvYmFsU3BQb01lbXBvb2w7CgpjbGFzcyBTcEJpbmFyeVRyZWUgOiBwcml2YXRl
IFNwUGVyc2lzdGVuY2VCYXNlQ2xhc3MgewogICAgZnJpZW5kIGNsYXNzIFNwUHJpb3JpdHlUcmVl
OwogICAgZnJpZW5kIGNsYXNzIFNwQWx0VHJlZUNoYW5nZTsKICAgIGZyaWVuZCBjbGFzcyBTcEhh
c2hUcmVlOwogICAgZnJpZW5kIGNsYXNzIFJCX1NwSGFzaFRyZWU7CiAgICBmcmllbmQgY2xhc3Mg
U3BJdGVyYXRvcl9TcEJpbmFyeVRyZWU7CiAgICBmcmllbmQgY2xhc3MgU3BJdGVyYXRvcl9TcEhh
c2hUcmVlOwoKICBwdWJsaWM6CiAgICB2aXJ0dWFsIH5TcEJpbmFyeVRyZWUoKTsKICAgIFNwQmlu
YXJ5VHJlZSgpOgogICAgICBLZXlNb2RlKE5PX0tFWV9NT0RFKSwKICAgICAgUm9vdChfX251bGwp
LAogICAgICBDdXJyZW50Tm9kZShfX251bGwpLAogICAgICBGaXJzdE5vZGUoX19udWxsKSwKICAg
ICAgTGFzdE5vZGUoX19udWxsKSwKICAgICAgTnVtRWxlbWVudHMoMCksCiAgICAgIE1vZGUoTk9S
TUFMX1RSRUVfTU9ERSksCiAgICAgIFRpZUJyZWFrZXIoMCkge30KCiAgICBpbnQgR2V0TnVtRWxl
bWVudHMoKSBjb25zdCB7cmV0dXJuIE51bUVsZW1lbnRzO30KCgogICAgdm9pZCBSZXNldCgpOwoK
ICAgIGRvdWJsZSBHZXRDdXJyZW50S2V5KCkgewogICAgICBkb3VibGUgcmV0VmFsID0gLTE7CiAg
ICAgIGlmIChDdXJyZW50Tm9kZSkgewogICAgICAgIGlmIChLZXlNb2RlID09IERPVUJMRV9LRVlf
TU9ERSkgewogICAgICAgICAgcmV0VmFsID0gKigoU3BEb3VibGVLZXkgKikgQ3VycmVudE5vZGUt
Pk5vZGVLZXkpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIFByaW50TWVzc2Fn
ZSgiRXJyb3I6IE5vdCBpbiBkb3VibGUga2V5IG1vZGUiKTsKICAgICAgICB9CiAgICAgIH0KICAg
ICAgcmV0dXJuIHJldFZhbDsKICAgIH0KCiAgICBjaGFyICpHZXRDdXJyZW50S2V5TmFtZSgpIHsK
ICAgICAgY2hhciAqcmV0VmFsID0gX19udWxsOwogICAgICBpZiAoQ3VycmVudE5vZGUpIHsKICAg
ICAgICBpZiAoS2V5TW9kZSA9PSBTVFJJTkdfS0VZX01PREUpIHsKICAgICAgICAgIHJldFZhbCA9
IChjaGFyICopICgqKChTcFN0cmluZ0tleSAqKSAoQ3VycmVudE5vZGUtPk5vZGVLZXkpKSk7CiAg
ICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgUHJpbnRNZXNzYWdlKCJFcnJvcjogTm90
IGluIHN0cmluZyBrZXkgbW9kZSIpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmV0
VmFsOwogICAgfQoKICAgIFNwSW50ZXJ2YWxLZXkqIEdldEN1cnJlbnRLZXlJbnRlcnZhbCgpIHsK
ICAgICAgaWYgKEN1cnJlbnROb2RlICYmKEtleU1vZGUgPT0gSU5URVJWQUxfS0VZX01PREUpKSB7
CiAgICAgICAgcmV0dXJuKFNwSW50ZXJ2YWxLZXkgKikgQ3VycmVudE5vZGUtPk5vZGVLZXk7CiAg
ICAgIH0KICAgICAgUHJpbnRNZXNzYWdlKCJFcnJvcjogTm90IGluIGludGVydmFsIGtleSBtb2Rl
Iik7CiAgICAgIHJldHVybiBfX251bGw7CiAgICB9CgogICAgU3BTaW1UaW1lIEdldEN1cnJlbnRT
aW1UaW1lS2V5KCkgewogICAgICBpZiAoQ3VycmVudE5vZGUgJiYoS2V5TW9kZSA9PSBTSU1fVElN
RV9LRVlfTU9ERSkpIHsKICAgICAgICByZXR1cm4oU3BTaW1UaW1lKSAoKigoU3BTaW1UaW1lS2V5
ICopIChDdXJyZW50Tm9kZS0+Tm9kZUtleSkpKTsKICAgICAgfQogICAgICBQcmludE1lc3NhZ2Uo
IkVycm9yOiBOb3QgaW4gU2ltVGltZSBrZXkgbW9kZSIpOwogICAgICByZXR1cm4gU3BTaW1UaW1l
KC0xLCAtMSwgLTEpOwogICAgfQoKICAgIHZvaWQgKkdldEN1cnJlbnRFbGVtZW50KCkgewogICAg
ICB2b2lkICplID0gX19udWxsOwogICAgICBpZiAoQ3VycmVudE5vZGUpIHsKICAgICAgICBlID0g
Q3VycmVudE5vZGUtPkVsZW1lbnQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGU7CiAgICB9CgogICAg
dm9pZCBTZXROb3JtYWxUcmVlTW9kZSgpIHtNb2RlID0gTk9STUFMX1RSRUVfTU9ERTt9CiAgICB2
b2lkIFNldEJhbGFuY2VkVHJlZU1vZGUoKSB7TW9kZSA9IEJBTEFOQ0VEX1RSRUVfTU9ERTt9CiAg
ICB2b2lkIFNldFNwbGF5VHJlZU1vZGUoKSB7TW9kZSA9IFNQTEFZX1RSRUVfTU9ERTt9CgogICAg
aW50IElzTm9ybWFsVHJlZU1vZGUoKSB7cmV0dXJuKE1vZGUgPT0gTk9STUFMX1RSRUVfTU9ERSk7
fQogICAgaW50IElzQmFsYW5jZWRUcmVlTW9kZSgpIHtyZXR1cm4oTW9kZSA9PSBCQUxBTkNFRF9U
UkVFX01PREUpO30KICAgIGludCBJc1NwbGF5VHJlZU1vZGUoKSB7cmV0dXJuKE1vZGUgPT0gU1BM
QVlfVFJFRV9NT0RFKTt9CgogICAgdm9pZCBJbnNlcnQodm9pZCAqZWxlbWVudCwgY2hhcioga2V5
TmFtZSwgaW50IHRpZUJyZWFrZXIpOwogICAgdm9pZCBJbnNlcnQodm9pZCAqZWxlbWVudCwgY29u
c3QgU3BTaW1UaW1lICZzaW1UaW1lS2V5LCBpbnQgdGllQnJlYWtlcik7CiAgICB2b2lkIEluc2Vy
dCh2b2lkICplbGVtZW50LCBTcEtleSYga2V5KSB7CiAgICAgIEluc2VydChlbGVtZW50LCAma2V5
KTsKICAgIH0KCiAgICB2b2lkIEluc2VydCh2b2lkICplbGVtZW50LCBkb3VibGUga2V5KSB7CiAg
ICAgIEluc2VydEFuZFJldHVybk5vZGUoZWxlbWVudCwga2V5LCAtMSk7CiAgICB9CgogICAgdm9p
ZCBJbnNlcnQodm9pZCAqZWxlbWVudCwgY2hhcioga2V5TmFtZSkgewogICAgICBJbnNlcnQoZWxl
bWVudCwga2V5TmFtZSwgLTEpOwogICAgfQoKICAgIHZvaWQgKlJlbW92ZShjb25zdCBTcEtleSYg
a2V5KSB7IHJldHVybiBSZW1vdmUoJmtleSk7fQoKICAgIHZvaWQgKkZpbmQoY29uc3QgU3BLZXkm
IGtleSkgeyByZXR1cm4gRmluZCgma2V5KTt9CgogICAgdm9pZCAqRmluZChjb25zdCBkb3VibGUg
a2V5KTsKICAgIHZvaWQgKkZpbmQoY29uc3QgY2hhciAqa2V5TmFtZSk7CgogICAgU3BJdGVyYXRv
cl9TcEJpbmFyeVRyZWUgRmluZEl0ZXJhdG9yKGNvbnN0IGRvdWJsZSBrZXkpOwogICAgU3BJdGVy
YXRvcl9TcEJpbmFyeVRyZWUgRmluZEl0ZXJhdG9yKGNvbnN0IGNoYXIgKmtleU5hbWUpOwoKICAg
IHZvaWQgKlJlbW92ZShkb3VibGUga2V5KTsKICAgIHZvaWQgKlJlbW92ZSh2b2lkKiBrZXkpOwog
ICAgdm9pZCAqUmVtb3ZlKGNoYXIqIGtleU5hbWUpOwogICAgdm9pZCAqUmVtb3ZlKGNvbnN0IFNw
U2ltVGltZSAmc2ltVGltZUtleSk7CgogICAgdm9pZCAqUmVtb3ZlRmlyc3RFbGVtZW50KCkgewog
ICAgICB2b2lkICplbGVtZW50ID0gX19udWxsOwogICAgICBpZiAoRmlyc3ROb2RlKSB7CiAgICAg
ICAgZWxlbWVudCA9IEZpcnN0Tm9kZS0+RWxlbWVudDsKICAgICAgICBSZW1vdmVOb2RlKEZpcnN0
Tm9kZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CgogICAgdm9pZCAqUmVt
b3ZlTGFzdEVsZW1lbnQoKSB7CiAgICAgIHZvaWQgKmVsZW1lbnQgPSBfX251bGw7CiAgICAgIGlm
IChMYXN0Tm9kZSkgewogICAgICAgIGVsZW1lbnQgPSBMYXN0Tm9kZS0+RWxlbWVudDsKICAgICAg
ICBSZW1vdmVOb2RlKExhc3ROb2RlKTsKICAgICAgfQogICAgICByZXR1cm4gZWxlbWVudDsKICAg
IH0KCiAgICB2b2lkICpSZW1vdmVGaXJzdEVsZW1lbnQoZG91YmxlICZrZXkpIHsKICAgICAgdm9p
ZCAqZWxlbWVudCA9IF9fbnVsbDsKICAgICAga2V5ID0gU3BJbmZpbml0eTsKICAgICAgaWYgKEZp
cnN0Tm9kZSkgewogICAgICAgIGVsZW1lbnQgPSBGaXJzdE5vZGUtPkVsZW1lbnQ7CiAgICAgICAg
a2V5ID0gKigoU3BEb3VibGVLZXkgKikgRmlyc3ROb2RlLT5Ob2RlS2V5KTsKICAgICAgICBSZW1v
dmVOb2RlKEZpcnN0Tm9kZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9Cgog
ICAgdm9pZCAqUmVtb3ZlTGFzdEVsZW1lbnQoZG91YmxlICZrZXkpIHsKICAgICAgdm9pZCAqZWxl
bWVudCA9IF9fbnVsbDsKICAgICAga2V5ID0gU3BJbmZpbml0eTsKICAgICAgaWYgKExhc3ROb2Rl
KSB7CiAgICAgICAgZWxlbWVudCA9IExhc3ROb2RlLT5FbGVtZW50OwogICAgICAgIGtleSA9ICoo
KFNwRG91YmxlS2V5ICopIExhc3ROb2RlLT5Ob2RlS2V5KTsKICAgICAgICBSZW1vdmVOb2RlKExh
c3ROb2RlKTsKICAgICAgfQogICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0KCgoKCiAgICB2b2lk
ICpSZW1vdmVDdXJyZW50RWxlbWVudEFuZEdvVG9QcmV2aW91cyh2b2lkKSB7CiAgICAgIHZvaWQg
KmVsZW1lbnQgPSBfX251bGw7CiAgICAgIGlmIChDdXJyZW50Tm9kZSkgewogICAgICAgIGVsZW1l
bnQgPSBDdXJyZW50Tm9kZS0+RWxlbWVudDsKICAgICAgICBUUkVFX0lURU0gKnNhdmVDdXJyZW50
ID0gQ3VycmVudE5vZGU7CiAgICAgICAgR2V0UHJldmlvdXNFbGVtZW50KCk7CiAgICAgICAgUmVt
b3ZlTm9kZShzYXZlQ3VycmVudCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9
CgoKCgogICAgdm9pZCAqUmVtb3ZlQ3VycmVudEVsZW1lbnRBbmRHb1RvTmV4dCh2b2lkKSB7CiAg
ICAgIHZvaWQgKmVsZW1lbnQgPSBfX251bGw7CiAgICAgIGlmIChDdXJyZW50Tm9kZSkgewogICAg
ICAgIGVsZW1lbnQgPSBDdXJyZW50Tm9kZS0+RWxlbWVudDsKICAgICAgICBUUkVFX0lURU0gKnNh
dmVDdXJyZW50ID0gQ3VycmVudE5vZGU7CiAgICAgICAgR2V0TmV4dEVsZW1lbnQoKTsKICAgICAg
ICBSZW1vdmVOb2RlKHNhdmVDdXJyZW50KTsKICAgICAgfQogICAgICByZXR1cm4gZWxlbWVudDsK
ICAgIH0KCiAgICB2b2lkICpHZXRGaXJzdEVsZW1lbnQoKTsKICAgIHZvaWQgKkdldExhc3RFbGVt
ZW50KCk7CgoKICAgIHZvaWQgKkdldE5leHRFbGVtZW50KCk7CgoKICAgIHZvaWQgKkdldFByZXZp
b3VzRWxlbWVudCgpOwoKICAgIHZvaWQgKm9wZXJhdG9yICsrKCkge3JldHVybiBHZXROZXh0RWxl
bWVudCgpO30KICAgIHZvaWQgKm9wZXJhdG9yICsrKGludCkgewogICAgICB2b2lkICplID0gR2V0
Q3VycmVudEVsZW1lbnQoKTsKICAgICAgR2V0TmV4dEVsZW1lbnQoKTsKICAgICAgcmV0dXJuIGU7
CiAgICB9CgogICAgdm9pZCAqb3BlcmF0b3IgLS0oKSB7cmV0dXJuIEdldFByZXZpb3VzRWxlbWVu
dCgpO30KICAgIHZvaWQgKm9wZXJhdG9yIC0tKGludCkgewogICAgICB2b2lkICplID0gR2V0Q3Vy
cmVudEVsZW1lbnQoKTsKICAgICAgR2V0UHJldmlvdXNFbGVtZW50KCk7CiAgICAgIHJldHVybiBl
OwogICAgfQoKICAgIHZvaWQgb3BlcmF0b3IgKz0gKHZvaWQgKnB0cikgewogICAgICBJbnNlcnQo
cHRyKTsKICAgIH0KCiAgICB2b2lkICpvcGVyYXRvciAtPSAodm9pZCAqcHRyKSB7CiAgICAgIHJl
dHVybiBSZW1vdmUocHRyKTsKICAgIH0KCiAgICBlbnVtIHsKICAgICAgVE9QX0ZMQUcsCiAgICAg
IEJPVF9GTEFHCiAgICB9OwoKICAgIHZvaWQgUHJpbnRNZXNzYWdlKGNvbnN0IGNoYXIgKm1zZykg
Y29uc3Q7CgogIHByb3RlY3RlZDoKICAgIHN0YXRpYyBpbnQgRlJFRV9MSVNUX1NJWkU7CiAgICBz
dGF0aWMgY29uc3QgZG91YmxlIFRyZWVCYWxhbmNlUmF0aW87CiAgICBzdGF0aWMgY29uc3QgaW50
IFRyZWVDdXRvZmY7CiAgICBzdGF0aWMgY29uc3QgaW50IE5TcGxheTsKCgogICAgS0VZX01PREUg
S2V5TW9kZTsKCiAgICBUUkVFX0lURU0gKlJvb3Q7CiAgICBUUkVFX0lURU0gKkN1cnJlbnROb2Rl
OwogICAgVFJFRV9JVEVNICpGaXJzdE5vZGU7CiAgICBUUkVFX0lURU0gKkxhc3ROb2RlOwogICAg
aW50IE51bUVsZW1lbnRzOwogICAgaW50IE1vZGU7CiAgICBpbnQgVGllQnJlYWtlcjsKICAgIGlu
dCBMYXN0VGllQnJlYWtlcjsKCiAgICBUUkVFX0lURU0gKlJvdGF0ZUxlZnQoVFJFRV9JVEVNICpp
dCk7CiAgICBUUkVFX0lURU0gKlJvdGF0ZVJpZ2h0KFRSRUVfSVRFTSAqaXQpOwoKICAgIHZvaWQg
SW5zZXJ0U3ViVHJlZShUUkVFX0lURU0gKnN0YXJ0aW5nTm9kZSwgVFJFRV9JVEVNICpzdWJUcmVl
KTsKCiAgICB2b2lkICpGaW5kKGNvbnN0IFNwS2V5KiBrZXksIGNvbnN0IGludCB0aWVCcmVha2Vy
ID0gLTEpIHsKICAgICAgdm9pZCAqcmV0dXJuVmFsdWUgPSBfX251bGw7CiAgICAgIFRSRUVfSVRF
TSAqbm9kZSA9IEZpbmROb2RlKGtleSwgdGllQnJlYWtlcik7CiAgICAgIGlmIChub2RlKSB7CiAg
ICAgICAgcmV0dXJuVmFsdWUgPSBub2RlLT5FbGVtZW50OwogICAgICB9CiAgICAgIHJldHVybiBy
ZXR1cm5WYWx1ZTsKICAgIH0KCiAgICBUUkVFX0lURU0gKkZpbmROb2RlKGNvbnN0IFNwS2V5ICpr
ZXksIGNvbnN0IGludCB0aWVCcmVha2VyKTsKCgoKCiAgICBUUkVFX0lURU0gKkZpbmQoVFJFRV9J
VEVNKiBzdWJUcmVlLCBjb25zdCBUUkVFX0lURU0mIGtleSk7CgogICAgdm9pZCBSZW1vdmVOb2Rl
KFRSRUVfSVRFTSAqbm9kZSk7CgogICAgdmlydHVhbCB2b2lkIEFsbG9jYXRlTW9yZVRyZWVJdGVt
cygpOwogICAgdmlydHVhbCBUUkVFX0lURU0gKk5ld1RyZWVJdGVtKCkgewogICAgICBUUkVFX0lU
RU0gKiBpdGVtID0gKFRSRUVfSVRFTSAqKQogICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFs
U3BQb01lbXBvb2wtPlJlbW92ZUl0ZW0oVHJlZUl0ZW1GcmVlSWQpOwogICAgICBpZiAoaXRlbSA9
PSBfX251bGwpIHsKICAgICAgICBBbGxvY2F0ZU1vcmVUcmVlSXRlbXMoKTsKICAgICAgICBpdGVt
ID0gKFRSRUVfSVRFTSAqKSBHbG9iYWxTcFBvTWVtcG9vbC0+UmVtb3ZlSXRlbShUcmVlSXRlbUZy
ZWVJZCk7CiAgICAgIH0KICAgICAgaXRlbS0+SW5pdCgpOwogICAgICByZXR1cm4gaXRlbTsKICAg
IH0KCiAgICB2aXJ0dWFsIHZvaWQgRGVsZXRlVHJlZUl0ZW0oVFJFRV9JVEVNICppdGVtKSBjb25z
dDsKCiAgICB2aXJ0dWFsIHZvaWQgRGVsZXRlS2V5KFNwS2V5ICopIGNvbnN0OwogICAgdmlydHVh
bCBTcEludGVydmFsS2V5KiBOZXdTcEludGVydmFsS2V5KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZv
aWQgRGVsZXRlU3BJbnRlcnZhbEtleShTcEludGVydmFsS2V5ICopIGNvbnN0OwogICAgdmlydHVh
bCB2b2lkIEFsbG9jYXRlTW9yZVNwSW50ZXJ2YWxLZXlzKCkgY29uc3Q7CgogICAgdmlydHVhbCBT
cFZvaWRQdHJLZXkqIE5ld1NwVm9pZFB0cktleSgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIERl
bGV0ZVNwVm9pZFB0cktleShTcFZvaWRQdHJLZXkgKikgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQg
QWxsb2NhdGVNb3JlU3BWb2lkUHRyS2V5cygpIGNvbnN0OwoKICAgIHZpcnR1YWwgU3BTdHJpbmdL
ZXkqIE5ld1NwU3RyaW5nS2V5KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgRGVsZXRlU3BTdHJp
bmdLZXkoU3BTdHJpbmdLZXkgKikgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgQWxsb2NhdGVNb3Jl
U3BTdHJpbmdLZXlzKCkgY29uc3Q7CgogICAgdmlydHVhbCBTcERvdWJsZUtleSogTmV3U3BEb3Vi
bGVLZXkoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBEZWxldGVTcERvdWJsZUtleShTcERvdWJs
ZUtleSAqKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBBbGxvY2F0ZU1vcmVTcERvdWJsZUtleXMo
KSBjb25zdDsKCiAgICB2aXJ0dWFsIFNwU2ltVGltZUtleSogTmV3U3BTaW1UaW1lS2V5KCkgY29u
c3Q7CiAgICB2aXJ0dWFsIHZvaWQgRGVsZXRlU3BTaW1UaW1lS2V5KFNwU2ltVGltZUtleSAqKSBj
b25zdDsKICAgIHZpcnR1YWwgdm9pZCBBbGxvY2F0ZU1vcmVTcFNpbVRpbWVLZXlzKCkgY29uc3Q7
CgogICAgdm9pZCBDb3JyZWN0TmNoaWxkcmVuVXAoVFJFRV9JVEVNICppdCk7CgogICAgdm9pZCBV
cGRhdGVGaXJzdExhc3ROb2RlKFRSRUVfSVRFTSAqbm9kZSk7CgogICAgVFJFRV9JVEVNICpSb3Vn
aEJhbGFuY2UoVFJFRV9JVEVNICppdCk7CgogICAgdm9pZCBTcGxheShUUkVFX0lURU0gKm5vZGUp
OwoKICAgIHZvaWQgSW5zZXJ0KFRSRUVfSVRFTSogdHJlZUl0ZW0pOwoKICAgICB2b2lkIEluc2Vy
dCh2b2lkKiBlbGVtZW50KSB7CiAgICAgICAgU3BWb2lkUHRyS2V5IHB0cktleSA9IGVsZW1lbnQ7
CiAgICAgICAgSW5zZXJ0KGVsZW1lbnQsICZwdHJLZXkpOwogICAgIH0KCiAgICAgdm9pZCAqUmVt
b3ZlKGNvbnN0IFNwS2V5KiBrZXksIGNvbnN0IGludCB0aWVCcmVha2VyID0gLTEpOwogICAgIGlu
dCBHZXRMYXN0VGllQnJlYWtlcigpIHtyZXR1cm4gTGFzdFRpZUJyZWFrZXI7fQoKICAgIFRSRUVf
SVRFTSAqSW5zZXJ0KHZvaWQgKmVsZW1lbnQsIFNwS2V5KiBrZXksIGludCB0aWVCcmVha2VyID0g
LTEpOwoKICAgIFRSRUVfSVRFTSAqSW5zZXJ0QW5kUmV0dXJuTm9kZSh2b2lkICplbGVtZW50LCBk
b3VibGUga2V5LCBpbnQgdGllQnJlYWtlcik7CgogICAgU3BLZXkqIENsb25lKFNwS2V5KiBrZXkp
IGNvbnN0OwoKICBwcml2YXRlOgogICAgU3BCaW5hcnlUcmVlKFNwQmluYXJ5VHJlZSYpOlNwUGVy
c2lzdGVuY2VCYXNlQ2xhc3MoKSB7fQogICAgdm9pZCBvcGVyYXRvciA9KFNwQmluYXJ5VHJlZSYp
IHt9CgogICAgc3RhdGljIGludCBTdHJpbmdLZXlGcmVlSWQ7CiAgICBzdGF0aWMgaW50IERvdWJs
ZUtleUZyZWVJZDsKICAgIHN0YXRpYyBpbnQgSW50ZXJ2YWxLZXlGcmVlSWQ7CiAgICBzdGF0aWMg
aW50IFZvaWRQdHJLZXlGcmVlSWQ7CiAgICBzdGF0aWMgaW50IFNpbVRpbWVLZXlGcmVlSWQ7CiAg
ICBzdGF0aWMgaW50IFRyZWVJdGVtRnJlZUlkOwp9OwoKaW5saW5lIHZvaWQgU3BCaW5hcnlUcmVl
OjpEZWxldGVTcFNpbVRpbWVLZXkoU3BTaW1UaW1lS2V5ICppdGVtKSBjb25zdCB7CiAgR2xvYmFs
U3BQb01lbXBvb2wtPlJldHVybkl0ZW0oU2ltVGltZUtleUZyZWVJZCwgaXRlbSk7Cn0KCmlubGlu
ZSB2b2lkIFNwQmluYXJ5VHJlZTo6RGVsZXRlU3BEb3VibGVLZXkoU3BEb3VibGVLZXkgKml0ZW0p
IGNvbnN0IHsKICBHbG9iYWxTcFBvTWVtcG9vbC0+UmV0dXJuSXRlbShEb3VibGVLZXlGcmVlSWQs
IGl0ZW0pOwp9CgppbmxpbmUgdm9pZCBTcEJpbmFyeVRyZWU6OkRlbGV0ZVNwSW50ZXJ2YWxLZXko
U3BJbnRlcnZhbEtleSAqaXRlbSkgY29uc3QgewogIEdsb2JhbFNwUG9NZW1wb29sLT5SZXR1cm5J
dGVtKEludGVydmFsS2V5RnJlZUlkLCBpdGVtKTsKfQoKaW5saW5lIHZvaWQgU3BCaW5hcnlUcmVl
OjpEZWxldGVTcFZvaWRQdHJLZXkoU3BWb2lkUHRyS2V5ICppdGVtKSBjb25zdCB7CiAgR2xvYmFs
U3BQb01lbXBvb2wtPlJldHVybkl0ZW0oVm9pZFB0cktleUZyZWVJZCwgaXRlbSk7Cn0KCmlubGlu
ZSB2b2lkIFNwQmluYXJ5VHJlZTo6RGVsZXRlU3BTdHJpbmdLZXkoU3BTdHJpbmdLZXkgKml0ZW0p
IGNvbnN0IHsKICBHbG9iYWxTcFBvTWVtcG9vbC0+UmV0dXJuSXRlbShTdHJpbmdLZXlGcmVlSWQs
IGl0ZW0pOwp9CgppbmxpbmUgdm9pZCBTcEJpbmFyeVRyZWU6OkRlbGV0ZUtleShTcEtleSoga2V5
KSBjb25zdCB7CiAgc3dpdGNoKGtleS0+R2V0TW9kZSgpKSB7CiAgY2FzZSBET1VCTEVfS0VZX01P
REU6CiAgICBEZWxldGVTcERvdWJsZUtleSgoU3BEb3VibGVLZXkgKikga2V5KTsKICAgIGJyZWFr
OwogIGNhc2UgU1RSSU5HX0tFWV9NT0RFOgogICAgRGVsZXRlU3BTdHJpbmdLZXkoKFNwU3RyaW5n
S2V5ICopIGtleSk7CiAgICBicmVhazsKICBjYXNlIElOVEVSVkFMX0tFWV9NT0RFOgogICAgRGVs
ZXRlU3BJbnRlcnZhbEtleSgoU3BJbnRlcnZhbEtleSAqKSBrZXkpOwogICAgYnJlYWs7CiAgY2Fz
ZSBWT0lEX1BUUl9LRVlfTU9ERToKICAgIERlbGV0ZVNwVm9pZFB0cktleSgoU3BWb2lkUHRyS2V5
ICopIGtleSk7CiAgICBicmVhazsKICBjYXNlIFNJTV9USU1FX0tFWV9NT0RFOgogICAgRGVsZXRl
U3BTaW1UaW1lS2V5KChTcFNpbVRpbWVLZXkgKikga2V5KTsKICAgIGJyZWFrOwogIGNhc2UgTk9f
S0VZX01PREU6CiAgICBicmVhazsKICB9Cn0KCgppbmxpbmUgU3BTdHJpbmdLZXkqIFNwQmluYXJ5
VHJlZTo6TmV3U3BTdHJpbmdLZXkoKSBjb25zdCB7CiAgU3BTdHJpbmdLZXkqIHJjID0KKFNwU3Ry
aW5nS2V5ICopIEdsb2JhbFNwUG9NZW1wb29sLT5SZW1vdmVJdGVtKFN0cmluZ0tleUZyZWVJZCk7
CiAgaWYgKHJjID09IF9fbnVsbCkgewogICAgQWxsb2NhdGVNb3JlU3BTdHJpbmdLZXlzKCk7CiAg
ICByYyA9IChTcFN0cmluZ0tleSAqKSBHbG9iYWxTcFBvTWVtcG9vbC0+UmVtb3ZlSXRlbShTdHJp
bmdLZXlGcmVlSWQpOwogIH0KICByZXR1cm4gcmM7Cn0KCmlubGluZSBTcERvdWJsZUtleSogU3BC
aW5hcnlUcmVlOjpOZXdTcERvdWJsZUtleSgpIGNvbnN0IHsKICBTcERvdWJsZUtleSogcmMgPSAo
U3BEb3VibGVLZXkgKikKICAgICAgICAgICAgICAgICAgICBHbG9iYWxTcFBvTWVtcG9vbC0+UmVt
b3ZlSXRlbShEb3VibGVLZXlGcmVlSWQpOwogIGlmIChyYyA9PSBfX251bGwpIHsKICAgIEFsbG9j
YXRlTW9yZVNwRG91YmxlS2V5cygpOwogICAgcmMgPSAoU3BEb3VibGVLZXkgKikgR2xvYmFsU3BQ
b01lbXBvb2wtPlJlbW92ZUl0ZW0oRG91YmxlS2V5RnJlZUlkKTsKICB9CiAgcmV0dXJuIHJjOwp9
CgppbmxpbmUgU3BTaW1UaW1lS2V5KiBTcEJpbmFyeVRyZWU6Ok5ld1NwU2ltVGltZUtleSgpIGNv
bnN0IHsKICBTcFNpbVRpbWVLZXkqIHJjID0gKFNwU2ltVGltZUtleSAqKQogICAgICAgICAgICAg
ICAgICAgICAgR2xvYmFsU3BQb01lbXBvb2wtPlJlbW92ZUl0ZW0oU2ltVGltZUtleUZyZWVJZCk7
CiAgaWYgKHJjID09IF9fbnVsbCkgewogICAgQWxsb2NhdGVNb3JlU3BTaW1UaW1lS2V5cygpOwog
ICAgcmMgPSAoU3BTaW1UaW1lS2V5ICopIEdsb2JhbFNwUG9NZW1wb29sLT5SZW1vdmVJdGVtKFNp
bVRpbWVLZXlGcmVlSWQpOwogIH0KICByZXR1cm4gcmM7Cn0KCmlubGluZSBTcEludGVydmFsS2V5
KiBTcEJpbmFyeVRyZWU6Ok5ld1NwSW50ZXJ2YWxLZXkoKSBjb25zdCB7CiAgU3BJbnRlcnZhbEtl
eSogcmMgPSAoU3BJbnRlcnZhbEtleSAqKQogICAgICAgICAgICAgICAgICAgICAgR2xvYmFsU3BQ
b01lbXBvb2wtPlJlbW92ZUl0ZW0oSW50ZXJ2YWxLZXlGcmVlSWQpOwogIGlmIChyYyA9PSBfX251
bGwpIHsKICAgIEFsbG9jYXRlTW9yZVNwSW50ZXJ2YWxLZXlzKCk7CiAgICByYyA9IChTcEludGVy
dmFsS2V5ICopIEdsb2JhbFNwUG9NZW1wb29sLT5SZW1vdmVJdGVtKEludGVydmFsS2V5RnJlZUlk
KTsKICB9CiAgcmV0dXJuIHJjOwp9CgppbmxpbmUgU3BWb2lkUHRyS2V5KiBTcEJpbmFyeVRyZWU6
Ok5ld1NwVm9pZFB0cktleSgpIGNvbnN0IHsKICBTcFZvaWRQdHJLZXkqIHJjID0gKFNwVm9pZFB0
cktleSAqKQogICAgICAgICAgICAgICAgICAgICBHbG9iYWxTcFBvTWVtcG9vbC0+UmVtb3ZlSXRl
bShWb2lkUHRyS2V5RnJlZUlkKTsKICBpZiAocmMgPT0gX19udWxsKSB7CiAgICBBbGxvY2F0ZU1v
cmVTcFZvaWRQdHJLZXlzKCk7CiAgICByYyA9IChTcFZvaWRQdHJLZXkgKikgR2xvYmFsU3BQb01l
bXBvb2wtPlJlbW92ZUl0ZW0oVm9pZFB0cktleUZyZWVJZCk7CiAgfQogIHJldHVybiByYzsKfQoK
aW5saW5lIHZvaWQgU3BCaW5hcnlUcmVlOjpEZWxldGVUcmVlSXRlbShUUkVFX0lURU0gKml0ZW0p
IGNvbnN0IHsKICBEZWxldGVLZXkoaXRlbS0+Tm9kZUtleSk7CiAgR2xvYmFsU3BQb01lbXBvb2wt
PlJldHVybkl0ZW0oVHJlZUl0ZW1GcmVlSWQsIGl0ZW0pOwp9CgoKaW5saW5lIFNwS2V5KiBTcEJp
bmFyeVRyZWU6OkNsb25lKFNwS2V5KiBrKSBjb25zdCB7CiAgU3BLZXkqIHJjID0gX19udWxsOwog
IHN3aXRjaChrLT5HZXRNb2RlKCkpIHsKICBjYXNlIERPVUJMRV9LRVlfTU9ERToKICAgIHJjID0g
TmV3U3BEb3VibGVLZXkoKTsKICAgICooU3BEb3VibGVLZXkgKikgcmMgPSAqKFNwRG91YmxlS2V5
ICopIGs7CiAgICBicmVhazsKICBjYXNlIFNUUklOR19LRVlfTU9ERToKICAgIHJjID0gTmV3U3BT
dHJpbmdLZXkoKTsKICAgICooU3BTdHJpbmdLZXkgKikgcmMgPSAqKFNwU3RyaW5nS2V5ICopIGs7
CiAgICBicmVhazsKICBjYXNlIElOVEVSVkFMX0tFWV9NT0RFOgogICAgcmMgPSBOZXdTcEludGVy
dmFsS2V5KCk7CiAgICAqKFNwSW50ZXJ2YWxLZXkgKikgcmMgPSAqKFNwSW50ZXJ2YWxLZXkgKikg
azsKICAgIGJyZWFrOwogIGNhc2UgVk9JRF9QVFJfS0VZX01PREU6CiAgICByYyA9IE5ld1NwVm9p
ZFB0cktleSgpOwogICAgKihTcFZvaWRQdHJLZXkgKikgcmMgPSAqKFNwVm9pZFB0cktleSAqKSBr
OwogICAgYnJlYWs7CiAgY2FzZSBTSU1fVElNRV9LRVlfTU9ERToKICAgIHJjID0gTmV3U3BTaW1U
aW1lS2V5KCk7CiAgICAqKFNwU2ltVGltZUtleSAqKSByYyA9ICooU3BTaW1UaW1lS2V5ICopIGs7
CiAgICBicmVhazsKICBjYXNlIE5PX0tFWV9NT0RFOgogICAgYnJlYWs7CiAgfQogIHJldHVybiBy
YzsKfQoKaW5saW5lIHZvaWQqIFNwQmluYXJ5VHJlZTo6R2V0Rmlyc3RFbGVtZW50KCkgewogIHZv
aWQqIHJldHVyblZhbHVlID0gX19udWxsOwogIEN1cnJlbnROb2RlID0gX19udWxsOwogIGlmIChG
aXJzdE5vZGUpIHsKICAgIEN1cnJlbnROb2RlID0gRmlyc3ROb2RlOwogICAgcmV0dXJuVmFsdWUg
PSBGaXJzdE5vZGUtPkVsZW1lbnQ7CiAgfQogIHJldHVybiByZXR1cm5WYWx1ZTsKfQoKaW5saW5l
IHZvaWQqIFNwQmluYXJ5VHJlZTo6R2V0TGFzdEVsZW1lbnQoKSB7CiAgdm9pZCogcmV0dXJuVmFs
dWUgPSBfX251bGw7CiAgQ3VycmVudE5vZGUgPSBfX251bGw7CiAgaWYgKExhc3ROb2RlKSB7CiAg
ICBDdXJyZW50Tm9kZSA9IExhc3ROb2RlOwogICAgcmV0dXJuVmFsdWUgPSBMYXN0Tm9kZS0+RWxl
bWVudDsKICB9CiAgcmV0dXJuIHJldHVyblZhbHVlOwp9CgoKdHlwZWRlZiBlbnVtIHsKICBJRF9U
WVBFX05PTkUsCiAgSURfVFlQRV9JTlQsCiAgSURfVFlQRV9TVFJJTkcKfSBTcFBhcm1TZXRJZFR5
cGU7CgpjbGFzcyBTcFBhcm1TZXQgewogIHB1YmxpYzoKICAgIFNwUGFybVNldCgpIHsKICAgICAg
RWxlbWVudHMuU2V0QmFsYW5jZWRUcmVlTW9kZSgpOwogICAgICBQYWNrID0gUEFDS19ORVRfVFlQ
RVM7CiAgICAgIElkVHlwZSA9IElEX1RZUEVfTk9ORTsKICAgIH0KICAgIFNwUGFybVNldChTcFBh
cm1TZXQmIHNldCk7CiAgICBTcFBhcm1TZXQoY2hhciogYnVmZiwgaW50IHNpemUpOwogICAgflNw
UGFybVNldCgpOwoKICAgIHZvaWQgSW5zZXJ0SW50IChpbnQgcGFybUlkLCBpbnQgdmFsdWUpOwog
ICAgdm9pZCBJbnNlcnRJbnQgKGNoYXIqIHBhcm1OYW1lLCBpbnQgdmFsdWUpOwogICAgdm9pZCBJ
bnNlcnRGbG9hdCAoaW50IHBhcm1JZCwgZmxvYXQgdmFsdWUpOwogICAgdm9pZCBJbnNlcnRGbG9h
dCAoY2hhciogcGFybU5hbWUsIGZsb2F0IHZhbHVlKTsKICAgIHZvaWQgSW5zZXJ0RG91YmxlIChp
bnQgcGFybUlkLCBkb3VibGUgdmFsdWUpOwogICAgdm9pZCBJbnNlcnREb3VibGUgKGNoYXIqIHBh
cm1OYW1lLCBkb3VibGUgdmFsdWUpOwogICAgdm9pZCBJbnNlcnRTdHJpbmcgKGludCBwYXJtSWQs
IGNoYXIqIHZhbHVlKTsKICAgIHZvaWQgSW5zZXJ0U3RyaW5nIChjaGFyKiBwYXJtTmFtZSwgY2hh
ciogdmFsdWUpOwogICAgdm9pZCBJbnNlcnRCdWZmZXIgKGludCBwYXJtSWQsIGNoYXIqIGJ1ZmYs
IGludCBzaXplKTsKICAgIHZvaWQgSW5zZXJ0QnVmZmVyIChjaGFyKiBwYXJtTmFtZSwgY2hhciog
YnVmZiwgaW50IHNpemUpOwoKICAgIGludCBHZXRJbnQgKGludCBwYXJtSWQpOwogICAgaW50IEdl
dEludCAoY2hhciogcGFybU5hbWUpOwogICAgZmxvYXQgR2V0RmxvYXQgKGludCBwYXJtSWQpOwog
ICAgZmxvYXQgR2V0RmxvYXQgKGNoYXIqIHBhcm1OYW1lKTsKICAgIGRvdWJsZSBHZXREb3VibGUg
KGludCBwYXJtSWQpOwogICAgZG91YmxlIEdldERvdWJsZSAoY2hhciogcGFybU5hbWUpOwogICAg
Y2hhciogR2V0U3RyaW5nIChpbnQgcGFybUlkKTsKICAgIGNoYXIqIEdldFN0cmluZyAoY2hhciog
cGFybU5hbWUpOwogICAgY2hhciogR2V0QnVmZmVyIChpbnQgcGFybUlkLCBpbnQmIHNpemUpOwog
ICAgY2hhciogR2V0QnVmZmVyIChjaGFyKiBwYXJtTmFtZSwgaW50JiBzaXplKTsKCiAgICBpbnQg
UmVtb3ZlSW50IChpbnQgcGFybUlkKTsKICAgIGludCBSZW1vdmVJbnQgKGNoYXIqIHBhcm1OYW1l
KTsKICAgIGZsb2F0IFJlbW92ZUZsb2F0IChpbnQgcGFybUlkKTsKICAgIGZsb2F0IFJlbW92ZUZs
b2F0IChjaGFyKiBwYXJtTmFtZSk7CiAgICBkb3VibGUgUmVtb3ZlRG91YmxlIChpbnQgcGFybUlk
KTsKICAgIGRvdWJsZSBSZW1vdmVEb3VibGUgKGNoYXIqIHBhcm1OYW1lKTsKICAgIGNoYXIqIFJl
bW92ZVN0cmluZyAoaW50IHBhcm1JZCk7CiAgICBjaGFyKiBSZW1vdmVTdHJpbmcgKGNoYXIqIHBh
cm1OYW1lKTsKICAgIGNoYXIqIFJlbW92ZUJ1ZmZlciAoaW50IHBhcm1JZCwgaW50JiBzaXplKTsK
ICAgIGNoYXIqIFJlbW92ZUJ1ZmZlciAoY2hhciogcGFybU5hbWUsIGludCYgc2l6ZSk7CgoKCgoK
CiAgICBpbnQgR2V0TnVtRWxlbWVudHMoKSB7IHJldHVybiBFbGVtZW50cy5HZXROdW1FbGVtZW50
cygpOyB9CgoKCgoKCiAgICBTcFBhcm1TZXRJZFR5cGUgR2V0UGFybUlkVHlwZSgpIHsgcmV0dXJu
IElkVHlwZTsgfQoKCgoKCgoKICAgIGludCogR2V0Rmlyc3RJbnRQYXJtSWQoKTsKICAgIGludCog
R2V0TmV4dEludFBhcm1JZCgpOwogICAgY2hhciogR2V0Rmlyc3RTdHJpbmdQYXJtSWQoKTsKICAg
IGNoYXIqIEdldE5leHRTdHJpbmdQYXJtSWQoKTsKICAgIFNwUGFybVNldERhdGFUeXBlIEdldERh
dGFUeXBlIChpbnQgcGFybUlkKTsKICAgIFNwUGFybVNldERhdGFUeXBlIEdldERhdGFUeXBlIChj
aGFyKiBwYXJtTmFtZSk7CgogICAgU3BQYXJtU2V0RWxlbWVudCYgb3BlcmF0b3IgW10gKGludCBw
YXJtSWQpIHsKICAgICAgU3BQYXJtU2V0RWxlbWVudCogdmFsdWU7CiAgICAgIGlmKCh2YWx1ZSA9
IChTcFBhcm1TZXRFbGVtZW50KilFbGVtZW50cy5GaW5kKHBhcm1JZCkpID09IF9fbnVsbCkgewog
ICAgICAgIGlmKElkVHlwZSA9PSBJRF9UWVBFX05PTkUpIElkVHlwZSA9IElEX1RZUEVfSU5UOwog
ICAgICAgIEVsZW1lbnRzLkluc2VydCgodmFsdWU9bmV3IFNwUGFybVNldEVsZW1lbnQoKSksIHBh
cm1JZCk7CiAgICAgIH0KICAgICAgcmV0dXJuICp2YWx1ZTsKICAgIH0KICAgIFNwUGFybVNldEVs
ZW1lbnQmIG9wZXJhdG9yIFtdIChjaGFyKiBwYXJtTmFtZSkgewogICAgICBTcFBhcm1TZXRFbGVt
ZW50KiB2YWx1ZTsKICAgICAgaWYoKHZhbHVlID0gKFNwUGFybVNldEVsZW1lbnQqKUVsZW1lbnRz
LkZpbmQocGFybU5hbWUpKSA9PSBfX251bGwpIHsKICAgICAgICBpZihJZFR5cGUgPT0gSURfVFlQ
RV9OT05FKSBJZFR5cGUgPSBJRF9UWVBFX1NUUklORzsKICAgICAgICBFbGVtZW50cy5JbnNlcnQo
KHZhbHVlPW5ldyBTcFBhcm1TZXRFbGVtZW50KCkpLCBwYXJtTmFtZSk7CiAgICAgIH0KICAgICAg
cmV0dXJuICp2YWx1ZTsKICAgIH0KCiAgICBpbmxpbmUgdm9pZCBTZXRORVRfVFlQRVMoKSB7CgoK
CiAgICAgIFBhY2sgPSBQQUNLX05BVElWRTsKCiAgICB9CiAgICBpbmxpbmUgdm9pZCBTZXROYXRp
dmUoKSB7IFBhY2sgPSBQQUNLX05BVElWRTsgfQogICAgdm9pZCBTZXRYRFIoKTsKCiAgICBjaGFy
KiBHZW5lcmF0ZUJ1ZmYoaW50JiBzaXplKTsKCiAgICBpbnQgR2V0UGFja0xlbmd0aCgpOwogICAg
dm9pZCBQYWNrQnVmZihjaGFyICpidWZmKTsKCiAgICBTcFBhcm1TZXQqIENsb25lKCk7CgogIHBy
aXZhdGU6CgogICAgaW50IEdldEhlYWRlckxlbmd0aCgpOwoKICAgIHZvaWQgR2VuZXJhdGVIZWFk
ZXIoY2hhciogYnVmZiwgaW50JiBvZmZzZXQpOwoKICAgc3RhdGljIGNvbnN0IGNoYXIgTUFHSUM7
CiAgIFNwQmluYXJ5VHJlZSBFbGVtZW50czsKICAgU3BQYXJtU2V0SWRUeXBlIElkVHlwZTsKICAg
U3BQYXJtU2V0UGFja01ldGhvZCBQYWNrOwoKICAgWERSIFhEUkhhbmRsZTsKCiAgIGludCBrZXlI
b2xkZXI7Cn07CgoKCgoKCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCgoKCgoKCgoKCgoKZXh0ZXJu
ICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgogIGNsYXNzIGV4Y2VwdGlvbgogIHsKICBw
dWJsaWM6CiAgICBleGNlcHRpb24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+ZXhjZXB0aW9u
KCkgdGhyb3coKTsKCgogICAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3co
KTsKICB9OwoKCgogIGNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uCiAgewog
IHB1YmxpYzoKICAgIGJhZF9leGNlcHRpb24oKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5i
YWRfZXhjZXB0aW9uKCkgdGhyb3coKTsKICB9OwoKCiAgdHlwZWRlZiB2b2lkICgqdGVybWluYXRl
X2hhbmRsZXIpICgpOwoKICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoK
CiAgdGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhy
b3coKTsKCgogIHZvaWQgdGVybWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp
OwoKCiAgdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxl
cikgdGhyb3coKTsKCgogIHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0
dXJuX18pKTsKCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9CgpuYW1lc3Bh
Y2UgX19nbnVfY3h4CnsKCiAgdm9pZCBfX3ZlcmJvc2VfdGVybWluYXRlX2hhbmRsZXIgKCk7Cn0K
Cn0KCgoKCgoKCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAg
IHN0cnVjdCBjaGFyX3RyYWl0cwogICAgewogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CgogICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3Ry
ZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAg
dHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFz
c2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMik7CgogICAgICBzdGF0
aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYg
X19jMik7CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEs
IGNvbnN0IGNoYXJfdHlwZSYgX19jMik7CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUo
Y29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24p
OwoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3Mp
OwoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5
cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpOwoKICAgICAgc3RhdGlj
IGNoYXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSog
X19zMiwgc2l6ZV90IF9fbik7CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNo
YXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKTsKCiAgICAg
IHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9f
biwgY2hhcl90eXBlIF9fYSk7CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJf
dHlwZShjb25zdCBpbnRfdHlwZSYgX19jKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0
b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYyk7CgogICAgICBzdGF0aWMgYm9vbAogICAg
ICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIp
OwoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpOwoKICAgICAgc3RhdGljIGludF90
eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYyk7CiAgICB9OwoKCgogIHRlbXBs
YXRlPD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPgogICAgewogICAgICB0eXBlZGVmIGNo
YXIgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGludCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBz
dHJlYW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAg
ICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAg
YXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9f
YzEgPSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUm
IF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2My
OyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNv
bnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAg
IHN0YXRpYyBpbnQKICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNo
YXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gbWVtY21wKF9fczEsIF9f
czIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJf
dHlwZSogX19zKQogICAgICB7IHJldHVybiBzdHJsZW4oX19zKTsgfQoKICAgICAgc3RhdGljIGNv
bnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9f
biwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IGNoYXJfdHlwZSo+KG1lbWNocihfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFy
X3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIs
IHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbW1v
dmUoX19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNv
cHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbWNweShfX3MxLCBfX3MyLCBf
X24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSog
X19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxjaGFyX3R5cGUqPihtZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hh
cl90eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0KCgoKICAgICAgc3RhdGljIGludF90
eXBlCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKSk7
IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBf
X2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9
CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50X3R5cGU+KCgtMSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihj
b25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiAoX19jID09IGVvZigpKSA/IDAgOiBf
X2M7IH0KICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hhcl90
PgogICAgewogICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHdp
bnRfdCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5
cGVkZWYgd3N0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVf
dHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNv
bnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGlj
IGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9f
YzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAg
ICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAg
IHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUo
Y29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24p
CiAgICAgIHsgcmV0dXJuIHdtZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGlj
IHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAgICAgIHsgcmV0dXJu
IHdjc2xlbihfX3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5k
KGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkK
ICAgICAgeyByZXR1cm4gd21lbWNocihfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3RhdGljIGNo
YXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19z
MiwgaW50X3R5cGUgX19uKQogICAgICB7IHJldHVybiB3bWVtbW92ZShfX3MxLCBfX3MyLCBfX24p
OyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwg
Y29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiB3bWVtY3B5
KF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2ln
bihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgeyByZXR1
cm4gd21lbXNldChfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAg
ICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykgeyByZXR1cm4gY2hhcl90eXBlKF9f
Yyk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFy
X3R5cGUmIF9fYykgeyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGJvb2wK
ICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBf
X2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlw
ZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oKDB4ZmZmZmZmZmZ1
KSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBl
JiBfX2MpCiAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9mKCkpID8gMCA6IF9fYzsg
fQogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBzdHJ1Y3QgX0NoYXJfdHJhaXRzX21hdGNoCiAgICB7CiAgICAgIF9DaGFyVCBfTV9jOwogICAg
ICBfQ2hhcl90cmFpdHNfbWF0Y2goX0NoYXJUIGNvbnN0JiBfX2MpIDogX01fYyhfX2MpIHsgfQoK
ICAgICAgYm9vbAogICAgICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19hKSB7IHJldHVybiBf
VHJhaXRzOjplcShfTV9jLCBfX2EpOyB9CiAgICB9Owp9CgoKCgoKCgoKCgoKCgoKCgoKZW51bQp7
CiAgX19MQ19DVFlQRSA9IDAsCiAgX19MQ19OVU1FUklDID0gMSwKICBfX0xDX1RJTUUgPSAyLAog
IF9fTENfQ09MTEFURSA9IDMsCiAgX19MQ19NT05FVEFSWSA9IDQsCiAgX19MQ19NRVNTQUdFUyA9
IDUsCiAgX19MQ19BTEwgPSA2LAogIF9fTENfUEFQRVIgPSA3LAogIF9fTENfTkFNRSA9IDgsCiAg
X19MQ19BRERSRVNTID0gOSwKICBfX0xDX1RFTEVQSE9ORSA9IDEwLAogIF9fTENfTUVBU1VSRU1F
TlQgPSAxMSwKICBfX0xDX0lERU5USUZJQ0FUSU9OID0gMTIKfTsKCgpleHRlcm4gIkMiIHsKCnN0
cnVjdCBsY29udgp7CgoKICBjaGFyICpkZWNpbWFsX3BvaW50OwogIGNoYXIgKnRob3VzYW5kc19z
ZXA7CgoKCgoKICBjaGFyICpncm91cGluZzsKCgoKCgogIGNoYXIgKmludF9jdXJyX3N5bWJvbDsK
ICBjaGFyICpjdXJyZW5jeV9zeW1ib2w7CiAgY2hhciAqbW9uX2RlY2ltYWxfcG9pbnQ7CiAgY2hh
ciAqbW9uX3Rob3VzYW5kc19zZXA7CiAgY2hhciAqbW9uX2dyb3VwaW5nOwogIGNoYXIgKnBvc2l0
aXZlX3NpZ247CiAgY2hhciAqbmVnYXRpdmVfc2lnbjsKICBjaGFyIGludF9mcmFjX2RpZ2l0czsK
ICBjaGFyIGZyYWNfZGlnaXRzOwoKICBjaGFyIHBfY3NfcHJlY2VkZXM7CgogIGNoYXIgcF9zZXBf
Ynlfc3BhY2U7CgogIGNoYXIgbl9jc19wcmVjZWRlczsKCiAgY2hhciBuX3NlcF9ieV9zcGFjZTsK
CgoKCgoKICBjaGFyIHBfc2lnbl9wb3NuOwogIGNoYXIgbl9zaWduX3Bvc247CgoKICBjaGFyIGlu
dF9wX2NzX3ByZWNlZGVzOwoKICBjaGFyIGludF9wX3NlcF9ieV9zcGFjZTsKCiAgY2hhciBpbnRf
bl9jc19wcmVjZWRlczsKCiAgY2hhciBpbnRfbl9zZXBfYnlfc3BhY2U7CgoKCgoKCiAgY2hhciBp
bnRfcF9zaWduX3Bvc247CiAgY2hhciBpbnRfbl9zaWduX3Bvc247Cgp9OwoKCgpleHRlcm4gY2hh
ciAqc2V0bG9jYWxlIChpbnQgX19jYXRlZ29yeSwgX19jb25zdCBjaGFyICpfX2xvY2FsZSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBsY29udiAqbG9jYWxlY29udiAodm9pZCkgdGhyb3cgKCk7
CgpleHRlcm4gX19sb2NhbGVfdCBfX25ld2xvY2FsZSAoaW50IF9fY2F0ZWdvcnlfbWFzaywgX19j
b25zdCBjaGFyICpfX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9j
YWxlX3QgX19iYXNlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIF9fbG9jYWxlX3QgX19kdXBsb2NhbGUg
KF9fbG9jYWxlX3QgX19kYXRhc2V0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgX19mcmVlbG9j
YWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKfQoKCgoKCgpuYW1lc3BhY2Ug
c3RkCnsKICB1c2luZyA6Omxjb252OwogIHVzaW5nIDo6c2V0bG9jYWxlOwogIHVzaW5nIDo6bG9j
YWxlY29udjsKfQoKCm5hbWVzcGFjZSBzdGQKewogIHR5cGVkZWYgaW50KiBfX2NfbG9jYWxlOwp9
CgoKCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsKCmVudW0KewogIF9JU3VwcGVyID0gKCgwKSA8IDgg
PyAoKDEgPDwgKDApKSA8PCA4KSA6ICgoMSA8PCAoMCkpID4+IDgpKSwKICBfSVNsb3dlciA9ICgo
MSkgPCA4ID8gKCgxIDw8ICgxKSkgPDwgOCkgOiAoKDEgPDwgKDEpKSA+PiA4KSksCiAgX0lTYWxw
aGEgPSAoKDIpIDwgOCA/ICgoMSA8PCAoMikpIDw8IDgpIDogKCgxIDw8ICgyKSkgPj4gOCkpLAog
IF9JU2RpZ2l0ID0gKCgzKSA8IDggPyAoKDEgPDwgKDMpKSA8PCA4KSA6ICgoMSA8PCAoMykpID4+
IDgpKSwKICBfSVN4ZGlnaXQgPSAoKDQpIDwgOCA/ICgoMSA8PCAoNCkpIDw8IDgpIDogKCgxIDw8
ICg0KSkgPj4gOCkpLAogIF9JU3NwYWNlID0gKCg1KSA8IDggPyAoKDEgPDwgKDUpKSA8PCA4KSA6
ICgoMSA8PCAoNSkpID4+IDgpKSwKICBfSVNwcmludCA9ICgoNikgPCA4ID8gKCgxIDw8ICg2KSkg
PDwgOCkgOiAoKDEgPDwgKDYpKSA+PiA4KSksCiAgX0lTZ3JhcGggPSAoKDcpIDwgOCA/ICgoMSA8
PCAoNykpIDw8IDgpIDogKCgxIDw8ICg3KSkgPj4gOCkpLAogIF9JU2JsYW5rID0gKCg4KSA8IDgg
PyAoKDEgPDwgKDgpKSA8PCA4KSA6ICgoMSA8PCAoOCkpID4+IDgpKSwKICBfSVNjbnRybCA9ICgo
OSkgPCA4ID8gKCgxIDw8ICg5KSkgPDwgOCkgOiAoKDEgPDwgKDkpKSA+PiA4KSksCiAgX0lTcHVu
Y3QgPSAoKDEwKSA8IDggPyAoKDEgPDwgKDEwKSkgPDwgOCkgOiAoKDEgPDwgKDEwKSkgPj4gOCkp
LAogIF9JU2FsbnVtID0gKCgxMSkgPCA4ID8gKCgxIDw8ICgxMSkpIDw8IDgpIDogKCgxIDw8ICgx
MSkpID4+IDgpKQp9OwoKZXh0ZXJuIF9fY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBl
X2I7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b2xvd2VyOwpleHRlcm4gX19j
b25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG91cHBlcjsKCmV4dGVybiBpbnQgaXNhbG51bSAoaW50
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50
IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZ3JhcGgg
KGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBpc3B1bmN0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3hk
aWdpdCAoaW50KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzYmxhbmsgKGludCkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
dG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaSAoaW50
IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX3RvbG93
ZXIgKGludCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9faXNhbG51bV9sIChpbnQsIF9fbG9jYWxl
X3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNhbHBoYV9sIChpbnQsIF9fbG9jYWxlX3QpIHRo
cm93ICgpOwpleHRlcm4gaW50IF9faXNjbnRybF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgp
OwpleHRlcm4gaW50IF9faXNkaWdpdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRl
cm4gaW50IF9faXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50
IF9faXNncmFwaF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNw
cmludF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNwdW5jdF9s
IChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNzcGFjZV9sIChpbnQs
IF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN1cHBlcl9sIChpbnQsIF9fbG9j
YWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN4ZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90
KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX19pc2JsYW5rX2wgKGludCwgX19sb2NhbGVfdCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgX190b2xvd2VyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19s
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fdG91cHBlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90
IF9fbCkgdGhyb3cgKCk7Cgp9CgoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjppc2FsbnVtOwog
IHVzaW5nIDo6aXNhbHBoYTsKICB1c2luZyA6OmlzY250cmw7CiAgdXNpbmcgOjppc2RpZ2l0Owog
IHVzaW5nIDo6aXNncmFwaDsKICB1c2luZyA6OmlzbG93ZXI7CiAgdXNpbmcgOjppc3ByaW50Owog
IHVzaW5nIDo6aXNwdW5jdDsKICB1c2luZyA6Omlzc3BhY2U7CiAgdXNpbmcgOjppc3VwcGVyOwog
IHVzaW5nIDo6aXN4ZGlnaXQ7CiAgdXNpbmcgOjp0b2xvd2VyOwogIHVzaW5nIDo6dG91cHBlcjsK
fQoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKCgogIGNsYXNz
IGJhZF9hbGxvYyA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2FsbG9j
KCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2FsbG9jKCkgdGhyb3coKTsKICB9OwoK
ICBzdHJ1Y3Qgbm90aHJvd190IHsgfTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7
CgoKICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsKCiAgbmV3X2hhbmRsZXIgc2V0X25l
d19oYW5kbGVyKG5ld19oYW5kbGVyKSB0aHJvdygpOwp9Cgp2b2lkKiBvcGVyYXRvciBuZXcoc3Rk
OjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0
ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2
b2lkKikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKikgdGhyb3coKTsKdm9p
ZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93
KCk7CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3df
dCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhy
b3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCosIGNvbnN0IHN0ZDo6
bm90aHJvd190JikgdGhyb3coKTsKCgppbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6
ZV90LCB2b2lkKiBfX3ApIHRocm93KCkgeyByZXR1cm4gX19wOyB9CmlubGluZSB2b2lkKiBvcGVy
YXRvciBuZXdbXShzdGQ6OnNpemVfdCwgdm9pZCogX19wKSB0aHJvdygpIHsgcmV0dXJuIF9fcDsg
fQoKCmlubGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCosIHZvaWQqKSB0aHJvdygpIHsg
fTsKaW5saW5lIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCosIHZvaWQqKSB0aHJvdygpIHsg
fTsKCn0KCgoKCm5hbWVzcGFjZSBzdGQKewoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9U
Mj4Kc3RydWN0IHBhaXIgewogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7CiAgdHlwZWRlZiBfVDIg
c2Vjb25kX3R5cGU7CgogIF9UMSBmaXJzdDsKICBfVDIgc2Vjb25kOwoKCgoKICBwYWlyKCkgOiBm
aXJzdCgpLCBzZWNvbmQoKSB7fQoKCgoKICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDIm
IF9fYikgOiBmaXJzdChfX2EpLCBzZWNvbmQoX19iKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9V
MSwgY2xhc3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJzdChf
X3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx
LCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4m
IF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPT0g
X195LmZpcnN0ICYmIF9feC5zZWNvbmQgPT0gX195LnNlY29uZDsKfQoKCnRlbXBsYXRlIDxjbGFz
cyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBf
VDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0
IDwgX195LmZpcnN0IHx8CiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194
LnNlY29uZCA8IF9feS5zZWNvbmQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1Qy
PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0
IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKCnRlbXBs
YXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHBh
aXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4g
X195IDwgX194Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9v
bCBvcGVyYXRvcjw9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBf
VDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9U
MSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBhaXI8X1QxLCBfVDI+
JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5lIHBhaXI8X1QxLCBf
VDI+IG1ha2VfcGFpcihfVDEgX194LCBfVDIgX195KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBf
VDI+KF9feCwgX195KTsKfQoKfQoKCgoKc3RydWN0IF9fdHJ1ZV90eXBlIHt9OwpzdHJ1Y3QgX19m
YWxzZV90eXBlIHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHMg
ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIHRoaXNfZHVtbXlfbWVtYmVyX211c3RfYmVfZmlyc3Q7
CgogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fZmFsc2VfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlw
ZV90cmFpdHM8Ym9vbD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfX3R5cGVfdHJhaXRzPGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz
aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8
PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7
Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGNoYXI+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx3Y2hh
cl90PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90
cmFpdHM8c2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v
cGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X190eXBlX3RyYWl0czx1bnNpZ25lZCBzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0
ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7
Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGludD4gewogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmc+
IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0
czx1bnNpZ25lZCBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVm
YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1l
bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3Ry
dWN0IF9fdHlwZV90cmFpdHM8bG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRl
bXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZmxvYXQ+
IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0
czxkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190
eXBlX3RyYWl0czxsb25nIGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0czxfVHAqPiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf
dHlwZTsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewog
IHR5cGVkZWYgX19mYWxzZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9J
c19pbnRlZ2VyPGJvb2w+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRl
bXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNpZ25lZCBjaGFy
PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50
ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx3Y2hhcl90PiB7CiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50
ZWdlcjxzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGludD4g
ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X0lzX2ludGVnZXI8dW5zaWduZWQgaW50PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy
YWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nPiB7CiAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1
bnNpZ25lZCBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1w
bGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVk
IGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvciB7CiAgIHR5cGVkZWYg
X19mYWxzZV90eXBlIF9Ob3JtYWw7Cn07CgoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPiBjbGFzcyBfX25vcm1h
bF9pdGVyYXRvcjsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29u
dGFpbmVyPgpzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvcjwgX19nbnVfY3h4OjpfX25vcm1hbF9p
dGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+ID4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IF9Ob3JtYWw7Cn07CgoKCgpuYW1lc3BhY2Ugc3RkCnsKCiAgc3RydWN0IGlucHV0X2l0ZXJhdG9y
X3RhZyB7fTsKCiAgc3RydWN0IG91dHB1dF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCBmb3J3
YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1dF9pdGVyYXRvcl90YWcge307CgogIHN0cnVj
dCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3Rh
ZyB7fTsKCiAgc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIDogcHVibGljIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2F0ZWdvcnks
IHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Rpc3RhbmNlID0gcHRyZGlmZl90LAogICAgICAgICAg
IHR5cGVuYW1lIF9Qb2ludGVyID0gX1RwKiwgdHlwZW5hbWUgX1JlZmVyZW5jZSA9IF9UcCY+CiAg
ICBzdHJ1Y3QgaXRlcmF0b3IgewoKICAgICAgdHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0
ZWdvcnk7CgogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAgdHlwZWRlZiBfRGlz
dGFuY2UgZGlmZmVyZW5jZV90eXBlOwoKICAgICAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOwoK
ICAgICAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3Jf
Y2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZh
bHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5
cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9p
bnRlciBwb2ludGVyOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNl
IHJlZmVyZW5jZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBp
dGVyYXRvcl90cmFpdHM8X1RwKj4gewogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwog
ICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1Rw
KiBwb2ludGVyOwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAgfTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPiB7
CiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdv
cnk7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90
IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgICAg
IHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcj4KICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+
OjppdGVyYXRvcl9jYXRlZ29yeQogICAgX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYp
CiAgICB7IHJldHVybiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9j
YXRlZ29yeSgpOyB9Cgp9CgoKCgoKCgoKCgpuYW1lc3BhY2Ugc3RkCnsKdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w
dXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewoK
ICAgCgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVy
ZW5jZV90eXBlIF9fbiA9IDA7CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAg
KytfX2ZpcnN0OyArK19fbjsKICAgIH0KICAgIHJldHVybiBfX247CiAgfQoKdGVtcGxhdGU8dHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgX19kaXN0YW5j
ZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
bGFzdCwKICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAog
ICAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7CiAgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRv
cj46OmRpZmZlcmVuY2VfdHlwZQogIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCkKICB7CgogICAgcmV0dXJuIF9fZGlzdGFuY2UoX19maXJzdCwg
X19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICB9Cgp0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBfX2Fk
dmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcp
CiAgewoKICAgCiAgICB3aGlsZSAoX19uLS0pICsrX19pOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1l
IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUgdm9p
ZAogIF9fYWR2YW5jZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24s
CiAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAoKICAgIGlm
IChfX24gPiAwKQogICAgICB3aGlsZSAoX19uLS0pICsrX19pOwogICAgZWxzZQogICAgICB3aGls
ZSAoX19uKyspIC0tX19pOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogIGlubGluZSB2b2lkCiAgX19hZHZhbmNlKF9SYW5k
b21BY2Nlc3NJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICByYW5kb21f
YWNjZXNzX2l0ZXJhdG9yX3RhZykKICB7CgogICAKICAgIF9faSArPSBfX247CiAgfQoKdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUg
dm9pZAogIGFkdmFuY2UoX0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikKICB7Cgog
ICAgX19hZHZhbmNlKF9faSwgX19uLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwogIH0KCn0K
CgoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGNs
YXNzIHJldmVyc2VfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAog
ICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46
OmRpZmZlcmVuY2VfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KICAgIHsKICAgIHByb3Rl
Y3RlZDoKICAgICAgX0l0ZXJhdG9yIGN1cnJlbnQ7CgogICAgcHVibGljOgogICAgICB0eXBlZGVm
IF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZl
cmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcmF0b3I+Ojpwb2ludGVyIHBvaW50ZXI7CgogICAgcHVibGljOgoKCgogICAgICByZXZlcnNl
X2l0ZXJhdG9yKCkgeyB9CgoKCgogICAgICBleHBsaWNpdAogICAgICByZXZlcnNlX2l0ZXJhdG9y
KGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194KSB7IH0KCgoKCiAgICAgIHJldmVyc2Vf
aXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvciYgX194KQogICAgICA6IGN1cnJlbnQoX194
LmN1cnJlbnQpIHsgfQoKCgoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAgICAg
IHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKICAg
ICAgICA6IGN1cnJlbnQoX194LmJhc2UoKSkgeyB9CgoKCgogICAgICBpdGVyYXRvcl90eXBlCiAg
ICAgIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9CgoKCgoKCiAgICAgIHJlZmVyZW5j
ZQogICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICB7CiAgICAgICAgX0l0ZXJhdG9yIF9fdG1w
ID0gY3VycmVudDsKICAgICAgICByZXR1cm4gKi0tX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAg
cG9pbnRlcgogICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7
IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpCiAgICAg
IHsKICAgICAgICAtLWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoK
CiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAg
ICAgICByZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgLS1jdXJyZW50Owog
ICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9y
JgogICAgICBvcGVyYXRvci0tKCkKICAgICAgewogICAgICAgICsrY3VycmVudDsKICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciBvcGVyYXRv
ci0tKGludCkKICAgICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190bXAgPSAqdGhpczsK
ICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgoKCgoKCiAg
ICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24p
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3VycmVudCAtIF9fbik7IH0K
CgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrPShkaWZmZXJlbmNl
X3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY3VycmVudCAtPSBfX247CiAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0
b3ItKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRl
cmF0b3IoY3VycmVudCArIF9fbik7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAg
ICAgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY3VycmVu
dCArPSBfX247CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJlZmVy
ZW5jZQogICAgICBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJu
ICooKnRoaXMgKyBfX24pOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
PChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICBj
b25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feS5i
YXNlKCkgPCBfX3guYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAg
IGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPiYgX194LAogICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRv
cj4mIF9feSkKICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCByZXZlcnNl
X2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShj
b25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgIGNv
bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3kg
PCBfX3gpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29s
CiAgICBvcGVyYXRvcj49KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAog
ICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAg
IHsgcmV0dXJuICEoX194IDwgX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+
CiAgICBpbmxpbmUgdHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJl
bmNlX3R5cGUKICAgIG9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feCwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f
eSkKICAgIHsgcmV0dXJuIF9feS5iYXNlKCkgLSBfX3guYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4K
ICAgIG9wZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZl
cmVuY2VfdHlwZSBfX24sCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+JiBfX3gpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4oX194
LmJhc2UoKSAtIF9fbik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNs
YXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRl
cmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgog
ICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBf
Q29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhY2tfaW5z
ZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkgeyB9CgogICAg
ICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWlu
ZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiAgICAgICAgY29udGFpbmVyLT5w
dXNoX2JhY2soX192YWx1ZSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAg
YmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9
CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVy
biAqdGhpczsgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyso
aW50KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRh
aW5lcj4KICAgIGlubGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgYmFj
a19pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpCiAgICB7IHJldHVybiBiYWNrX2luc2VydF9pdGVy
YXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+
CiAgICBjbGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91
dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90
ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0
eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CgoKICAgICAgZXhwbGljaXQgZnJvbnRf
aW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkgeyB9Cgog
ICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29u
dGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGNvbnRhaW5l
ci0+cHVzaF9mcm9udChfX3ZhbHVlKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgog
ICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0
aGlzOyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkg
eyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3IKICAgICAgb3Bl
cmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ29udGFpbmVyPgogICAgaW5saW5lIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PgogICAgZnJvbnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQogICAgeyByZXR1cm4gZnJvbnRf
aW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NvbnRhaW5lcj4KICAgIGNsYXNzIGluc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0
b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAg
IHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwogICAgICB0eXBlbmFtZSBf
Q29udGFpbmVyOjppdGVyYXRvciBpdGVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0Nv
bnRhaW5lciBjb250YWluZXJfdHlwZTsKCgoKCgogICAgICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRh
aW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2kpCiAgICAgIDogY29u
dGFpbmVyKCZfX3gpLCBpdGVyKF9faSkge30KCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAg
b3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3Zh
bHVlKQogICAgICB7CiAgICAgICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFs
dWUpOwogICAgICAgICsraXRlcjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAg
ICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoK
ICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7
IH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVy
biAqdGhpczsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lciwgdHlwZW5h
bWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAg
aW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194LCBfSXRlcmF0b3IgX19pKQogICAgewogICAgICByZXR1
cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvcihfX2kpKTsK
ICAgIH0KfQoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CgoKCgoKCgogIHVzaW5nIHN0ZDo6aXRlcmF0
b3JfdHJhaXRzOwogIHVzaW5nIHN0ZDo6aXRlcmF0b3I7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0
ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgX19ub3JtYWxfaXRlcmF0b3IK
ICAgICAgOiBwdWJsaWMgaXRlcmF0b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRv
cj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlw
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy
YXRvcj46OnBvaW50ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAg
IF9JdGVyYXRvciBfTV9jdXJyZW50OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZl
cmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJh
dG9yPjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVyOwoKICAgICAgX19ub3JtYWxfaXRl
cmF0b3IoKSA6IF9NX2N1cnJlbnQoX0l0ZXJhdG9yKCkpIHsgfQoKICAgICAgZXhwbGljaXQKICAg
ICAgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX0l0ZXJhdG9yJiBfX2kpIDogX01fY3VycmVudChf
X2kpIHsgfQoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAgICBpbmxpbmUgX19u
b3JtYWxfaXRlcmF0b3IoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXIsIF9Db250YWluZXI+
JiBfX2kpCiAgICAgICAgOiBfTV9jdXJyZW50KF9faS5iYXNlKCkpIHsgfQoKCiAgICAgIHJlZmVy
ZW5jZQogICAgICBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqX01fY3VycmVudDsgfQoKICAg
ICAgcG9pbnRlcgogICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsg
fQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7ICsrX01fY3Vy
cmVudDsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVy
YXRvcisrKGludCkgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCsrKTsgfQoK
CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci0tKCkgeyAtLV9NX2N1cnJl
bnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0
b3ItLShpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQtLSk7IH0KCgog
ICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9f
bikgY29uc3QKICAgICAgeyByZXR1cm4gX01fY3VycmVudFtfX25dOyB9CgogICAgICBfX25vcm1h
bF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikK
ICAgICAgeyBfTV9jdXJyZW50ICs9IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1h
bF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisoY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNv
bnN0CiAgICAgIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgKyBfX24pOyB9
CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItPShjb25zdCBkaWZmZXJl
bmNlX3R5cGUmIF9fbikKICAgICAgeyBfTV9jdXJyZW50IC09IF9fbjsgcmV0dXJuICp0aGlzOyB9
CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvci0oY29uc3QgZGlmZmVyZW5j
ZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1
cnJlbnQgLSBfX24pOyB9CgogICAgICBjb25zdCBfSXRlcmF0b3ImCiAgICAgIGJhc2UoKSBjb25z
dCB7IHJldHVybiBfTV9jdXJyZW50OyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl
cmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGlu
ZSBib29sCiAgb3BlcmF0b3I9PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBf
Q29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf
SXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID09
IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1l
IF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0
ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3Qg
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1
cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlu
bGluZSBib29sCiAgb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JM
LCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRv
cjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgp
ICE9IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVu
YW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFs
X2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29u
c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyBy
ZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJhc2UoKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4K
ICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJh
dG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNl
KCkgPCBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBl
bmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFs
X2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29u
c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyBy
ZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAg
aW5saW5lIGJvb2wKICBvcGVyYXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y
TCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRv
cjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgp
ID4gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5h
bWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9p
dGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgY29uc3Qg
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1
cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
dGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5s
aW5lIGJvb2wKICBvcGVyYXRvcjw9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckws
IF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9y
PF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkg
PD0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5h
bWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxf
aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25z
dCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJl
dHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAg
aW5saW5lIGJvb2wKICBvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
ckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJh
dG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNl
KCkgPj0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlw
ZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPj0oY29uc3QgX19ub3Jt
YWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7
IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFzZSgpOyB9CgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFp
bmVyPgogIGlubGluZSB0eXBlbmFtZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29u
dGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgb3BlcmF0b3ItKGNvbnN0IF9fbm9ybWFsX2l0ZXJh
dG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9f
bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVy
biBfX2xocy5iYXNlKCkgLSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0
ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxf
SXRlcmF0b3IsIF9Db250YWluZXI+CiAgb3BlcmF0b3IrKHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJh
dG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAg
ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9faSkK
ICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+KF9faS5i
YXNlKCkgKyBfX24pOyB9Cn0KCgoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBpbmxpbmUgdm9pZAog
ICAgaXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYikKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZh
bHVlX3R5cGUgX1ZhbHVlVHlwZTE7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9Gb3J3YXJkSXRlcjI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOwoKCiAgICAgCiAgICAg
CiAgICAgCiAgICAgCgogICAgICBfVmFsdWVUeXBlMSBfX3RtcCA9ICpfX2E7CiAgICAgICpfX2Eg
PSAqX19iOwogICAgICAqX19iID0gX190bXA7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikKICAgIHsKCiAg
ICAgCgogICAgICBfVHAgX190bXAgPSBfX2E7CiAgICAgIF9fYSA9IF9fYjsKICAgICAgX19iID0g
X190bXA7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb25zdCBf
VHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQogICAgewoKICAgICAK
CiAgICAgIGlmIChfX2IgPCBfX2EpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtYXgoY29uc3Qg
X1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIGlmIChfX2EgPCBf
X2IpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWluKGNvbnN0
IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAg
aWYgKF9fY29tcChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3Qg
X1RwJgogICAgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19j
b21wKQogICAgewoKICAgICAgaWYgKF9fY29tcChfX2EsIF9fYikpIHJldHVybiBfX2I7IHJldHVy
biBfX2E7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9P
dXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCwKICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGZvciAoIDsgX19m
aXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAgICAgICAqX19yZXN1bHQg
PSAqX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUg
X091dHB1dEl0ZXIKICAgIF9fY29weShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAg
ICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBl
CiAgICAgICAgICBfRGlzdGFuY2U7CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAt
IF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKSB7CiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7
CiAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0
dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg
X1RwKgogICAgX19jb3B5X3RyaXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9f
bGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgIHsKICAgICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJz
dCwgc2l6ZW9mKF9UcCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogICAgICByZXR1cm4gX19yZXN1
bHQgKyAoX19sYXN0IC0gX19maXJzdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBf
X2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJu
IF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f
Zmlyc3QpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0
cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xh
c3QsIF9fcmVzdWx0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwKgogICAgX19jb3B5X2F1eDIoX1RwKiBfX2Zp
cnN0LCBfVHAqIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9UcCogX19yZXN1bHQsIF9fdHJ1ZV90
eXBlKQogICAgeyByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29w
eV9hdXgyKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsCiAgICAgICAgICAg
ICAgICBfVHAqIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2
aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAg
ICBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUK
ICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0
czxfVmFsdWVUeXBlPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAgICAg
X1RyaXZpYWw7CiAgICAgIHJldHVybiBfT3V0cHV0SXRlcihfX2NvcHlfYXV4MihfX2ZpcnN0LCBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdC5iYXNl
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHJpdmlhbCgpKSk7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy
PgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX19jb3B5
X2F1eDIoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICBfVHJpdmlhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091
dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQog
ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0
ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LmJh
c2UoKSwgX19sYXN0LmJhc2UoKSwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGlu
ZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90
eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091
dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X25pMihfX2Zp
cnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1
dEl0ZXIKICAgIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX091
dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0lucHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7
CiAgICAgICByZXR1cm4gX19jb3B5X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05v
cm1hbCgpKTsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy
MSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4KICAgIGlubGluZSBfQmlkaXJlY3Rpb25h
bEl0ZXIyCiAgICBfX2NvcHlfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBf
QmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRl
cmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAg
Ki0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9CaWRpcmVjdGlv
bmFsSXRlcj4KICAgIGlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIKICAgIF9fY29weV9iYWNrd2Fy
ZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19u
OwogICAgICBmb3IgKF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAg
ICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9
CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1l
IF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Jvb2xUeXBlPgogICAg
c3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaAogICAgewogICAgICBzdGF0aWMgX0JpZGly
ZWN0aW9uYWxJdGVyMgogICAgICBjb3B5KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgX0Jp
ZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBf
X3Jlc3VsdCkKICAgICAgewogICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAg
ICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9i
YWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgIHsKICAgICAgc3Rh
dGljIF9UcCoKICAgICAgY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0
LCBfVHAqIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgY29uc3QgcHRyZGlmZl90IF9OdW0gPSBf
X2xhc3QgLSBfX2ZpcnN0OwogICAgICAgIG1lbW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0
LCBzaXplb2YoX1RwKSAqIF9OdW0pOwogICAgICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07CiAg
ICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfX2NvcHlf
YmFja3dhcmRfZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICB7CiAg
ICAgIHN0YXRpYyBfVHAqCiAgICAgIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAq
IF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgICAgewogICAgICAgIHJldHVybiBfX2NvcHlfYmFj
a3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgICAgICA6OmNvcHko
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2Jh
Y2t3YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9CSTI+Ojp2YWx1ZV90eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yIF9Ucml2aWFsOwogICAgICByZXR1cm4gX19j
b3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPgogICAgICAgICAgICAg
ICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRl
IDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29w
eV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVz
dWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1eChf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LmJhc2UoKSkpOyB9CgogIHRlbXBsYXRlIDx0eXBlbmFt
ZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2Fy
ZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2Zh
bHNlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFz
dCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkky
PgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0
b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1h
bDsKICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9f
Zmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAg
ICBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJ
MSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIg
X19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNf
bm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19j
b3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUg
X0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBjb3B5X2JhY2t3YXJkKF9CSTEgX19maXJzdCwgX0JJ
MSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMT46Ol9Ob3JtYWwgX19O
b3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9y
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIGZpbGwoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkK
ICAgIHsKCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp
CiAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
T3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVy
CiAgICBmaWxsX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9f
dmFsdWUpCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2Zp
cnN0KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAg
ICB9CgoKCiAgaW5saW5lIHZvaWQKICBmaWxsKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHVuc2ln
bmVkIGNoYXIqIF9fbGFzdCwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogIHsKICAgIHVuc2ln
bmVkIGNoYXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgX190bXAsIF9fbGFzdCAt
IF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHZvaWQKICBmaWxsKHNpZ25lZCBjaGFyKiBfX2ZpcnN0
LCBzaWduZWQgY2hhciogX19sYXN0LCBjb25zdCBzaWduZWQgY2hhciYgX19jKQogIHsKICAgIHNp
Z25lZCBjaGFyIF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgdm9p
ZAogIGZpbGwoY2hhciogX19maXJzdCwgY2hhciogX19sYXN0LCBjb25zdCBjaGFyJiBfX2MpCiAg
ewogICAgY2hhciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgdW5zaWduZWQgY2hhcioKICAgIGZpbGxfbih1bnNp
Z25lZCBjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykK
ICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogICAgICByZXR1
cm4gX19maXJzdCArIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAgICBp
bmxpbmUgc2lnbmVkIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBj
b25zdCBzaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3Qg
KyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBjaGFyKgogICAgZmlsbF9uKGNoYXIqIF9fZmly
c3QsIF9TaXplIF9fbiwgY29uc3QgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3Qs
IF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAg
ICBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4KICAgIG1pc21hdGNoKF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0lucHV0SXRlcjIg
X19maXJzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgICB3aGlsZSAo
X19maXJzdDEgIT0gX19sYXN0MSAmJiAqX19maXJzdDEgPT0gKl9fZmlyc3QyKSB7CiAgICAgICAg
KytfX2ZpcnN0MTsKICAgICAgICArK19fZmlyc3QyOwogICAgICB9CiAgICAgIHJldHVybiBwYWly
PF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBl
bmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+
CiAgICBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwK
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgX0JpbmFyeVBy
ZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHdoaWxlIChf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIp
KSB7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICArK19fZmlyc3QyOwogICAgICB9CiAgICAg
IHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3Qy
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1
dEl0ZXIyPgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf
SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCiAgICB7
CgogICAgIAogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7
ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAgaWYgKCEoKl9fZmlyc3QxID09ICpfX2Zp
cnN0MikpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5
cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0
SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVy
MiBfX2ZpcnN0MiwKICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAg
IHsKCiAgICAgCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19m
aXJzdDEsICsrX19maXJzdDIpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVy
Mj4KICAgIGJvb2wKICAgIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmly
c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAg
IAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19m
aXJzdDIgIT0gX19sYXN0MgogICAgICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsK
ICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAh
PSBfX2xhc3QyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5h
bWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgbGV4aWNvZ3Jh
cGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0
SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29t
cCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEg
JiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJz
dDIpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQog
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0MSA9PSBf
X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CiAgICB9CgogIGlubGluZSBib29sCiAgbGV4
aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDEsIGNvbnN0
IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dW5zaWduZWQgY2hhciogX19maXJzdDIsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCiAg
ewogICAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICAgIGNvbnN0
IHNpemVfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgICBjb25zdCBpbnQgX19yZXN1
bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICAg
IHJldHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19sZW4yOwog
IH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCBjaGFyKiBf
X2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKICB7CgogICAgcmV0dXJu
IGxleGljb2dyYXBoaWNhbF9jb21wYXJlKChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9f
bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBj
aGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0
IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCiAgfQoKfQoKCgoKCgoKCmV4dGVybiAiQyIg
ewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24s
IF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJv
cl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfX2Fzc2Vy
dCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGlu
ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfQoKCgoK
CgoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7
CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19i
YWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZv
aWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro
cm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZh
bGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9l
cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29u
c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFy
KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK
ICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBf
X3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KCgoKbmFtZXNwYWNlIHN0ZAp7
CgoKCgogIHN0cnVjdCBfUmVmY291bnRfQmFzZQogIHsKCiAgICB0eXBlZGVmIHNpemVfdCBfUkNf
dDsKCgogICAgdm9sYXRpbGUgX1JDX3QgX01fcmVmX2NvdW50OwoKCiAgICBfX2d0aHJlYWRfbXV0
ZXhfdCBfTV9yZWZfY291bnRfbG9jazsKCiAgICBfUmVmY291bnRfQmFzZShfUkNfdCBfX24pIDog
X01fcmVmX2NvdW50KF9fbikKICAgIHsKCiAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9fdG1wID0g
ezAsIDAsIDAsIFBUSFJFQURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9fTsKICAgICAgX01fcmVm
X2NvdW50X2xvY2sgPSBfX3RtcDsKCgoKCgogICAgfQoKICAgIHZvaWQKICAgIF9NX2luY3IoKQog
ICAgewogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAg
ICArK19NX3JlZl9jb3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2Nv
dW50X2xvY2spOwogICAgfQoKICAgIF9SQ190CiAgICBfTV9kZWNyKCkKICAgIHsKICAgICAgX19n
dGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgdm9sYXRpbGUgX1JD
X3QgX190bXAgPSAtLV9NX3JlZl9jb3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygm
X01fcmVmX2NvdW50X2xvY2spOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgfTsKCiAgdGVt
cGxhdGU8aW50IF9fZHVtbXk+CiAgICBzdHJ1Y3QgX1N3YXBfbG9ja19zdHJ1Y3QKICAgIHsgc3Rh
dGljIF9fZ3RocmVhZF9tdXRleF90IF9TX3N3YXBfbG9jazsgfTsKCiAgdGVtcGxhdGU8aW50IF9f
ZHVtbXk+CiAgICBfX2d0aHJlYWRfbXV0ZXhfdAogICAgX1N3YXBfbG9ja19zdHJ1Y3Q8X19kdW1t
eT46Ol9TX3N3YXBfbG9jayA9IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAs
IDAgfX07CgoKCiAgaW5saW5lIHVuc2lnbmVkIGxvbmcKICBfQXRvbWljX3N3YXAodW5zaWduZWQg
bG9uZyAqIF9fcCwgdW5zaWduZWQgbG9uZyBfX3EpCiAgewogICAgX19ndGhyZWFkX211dGV4X2xv
Y2soJl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2FwX2xvY2spOwogICAgdW5zaWduZWQgbG9u
ZyBfX3Jlc3VsdCA9ICpfX3A7CiAgICAqX19wID0gX19xOwogICAgX19ndGhyZWFkX211dGV4X3Vu
bG9jaygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAgICByZXR1cm4gX19y
ZXN1bHQ7CiAgfQoKICBzdHJ1Y3QgX1NUTF9tdXRleF9sb2NrCiAgewoKCgoKCiAgICBfX2d0aHJl
YWRfbXV0ZXhfdCBfTV9sb2NrOwoKICAgIHZvaWQKICAgIF9NX2luaXRpYWxpemUoKQogICAgewoK
ICAgIH0KCiAgICB2b2lkCiAgICBfTV9hY3F1aXJlX2xvY2soKQogICAgewoKCgogICAgICBfX2d0
aHJlYWRfbXV0ZXhfbG9jaygmX01fbG9jayk7CiAgICB9CgogICAgdm9pZAogICAgX01fcmVsZWFz
ZV9sb2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fbG9jayk7
CiAgICB9CiAgfTsKCiAgc3RydWN0IF9TVExfYXV0b19sb2NrCiAgewogICAgX1NUTF9tdXRleF9s
b2NrJiBfTV9sb2NrOwoKICAgIF9TVExfYXV0b19sb2NrKF9TVExfbXV0ZXhfbG9jayYgX19sb2Nr
KSA6IF9NX2xvY2soX19sb2NrKQogICAgeyBfTV9sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9Cgog
ICAgfl9TVExfYXV0b19sb2NrKCkgeyBfTV9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9CgogIHBy
aXZhdGU6CiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBfU1RMX2F1dG9fbG9jayYpOwogICAgX1NU
TF9hdXRvX2xvY2soY29uc3QgX1NUTF9hdXRvX2xvY2smKTsKICB9OwoKfQoKCm5hbWVzcGFjZSBz
dGQKewoKICBjbGFzcyBfX25ld19hbGxvYwogIHsKICBwdWJsaWM6CiAgICBzdGF0aWMgdm9pZCoK
ICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiA6Om9wZXJhdG9yIG5ldyhfX24p
OyB9CgogICAgc3RhdGljIHZvaWQKICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QpCiAg
ICB7IDo6b3BlcmF0b3IgZGVsZXRlKF9fcCk7IH0KICB9OwoKICB0ZW1wbGF0ZSA8aW50IF9faW5z
dD4KICAgIGNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlCiAgICB7CiAgICBwcml2YXRlOgog
ICAgICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOwogICAgICBzdGF0aWMgdm9p
ZCogX1Nfb29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7CiAgICAgIHN0YXRpYyB2b2lkICgqIF9f
bWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIHZv
aWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICB2b2lkKiBfX3Jl
c3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9
IF9TX29vbV9tYWxsb2MoX19uKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KCiAg
ICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgKQogICAg
ICB7IGZyZWUoX19wKTsgfQoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIHJlYWxsb2NhdGUodm9p
ZCogX19wLCBzaXplX3QgLCBzaXplX3QgX19uZXdfc3opCiAgICAgIHsKICAgICAgICB2b2lkKiBf
X3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICAgICAgaWYgKDAgPT0gX19yZXN1
bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICAgICAgcmV0
dXJuIF9fcmVzdWx0OwogICAgICB9CgogICAgICBzdGF0aWMgdm9pZCAoKiBfX3NldF9tYWxsb2Nf
aGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogICAgICB7CiAgICAgICAgdm9pZCAoKiBfX29sZCko
KSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIF9fbWFsbG9jX2FsbG9jX29v
bV9oYW5kbGVyID0gX19mOwogICAgICAgIHJldHVybihfX29sZCk7CiAgICAgIH0KICAgIH07CgoK
ICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQgKCogX19tYWxsb2NfYWxsb2NfdGVtcGxh
dGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCkgPSAwOwoKICB0ZW1wbGF0
ZSA8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu
c3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCiAgICB7CiAgICAgIHZvaWQgKCogX19teV9t
YWxsb2NfaGFuZGxlcikoKTsKICAgICAgdm9pZCogX19yZXN1bHQ7CgogICAgICBmb3IgKDs7KQog
ICAgICAgIHsKICAgICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19v
b21faGFuZGxlcjsKICAgICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpCiAgICAg
ICAgICAgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKICAgICAgICAgICgqX19teV9tYWxsb2Nf
aGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgICBp
ZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAgfQogICAg
fQoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX21hbGxvY19hbGxvY190
ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fcmVhbGxvYyh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAg
ICB7CiAgICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgdm9pZCogX19y
ZXN1bHQ7CgogICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgIF9fbXlfbWFsbG9jX2hh
bmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICAgIGlmICgwID09IF9f
bXlfbWFsbG9jX2hhbmRsZXIpCiAgICAgICAgICAgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsK
ICAgICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0g
cmVhbGxvYyhfX3AsIF9fbik7CiAgICAgICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJl
dHVybihfX3Jlc3VsdCk7CiAgICAgICAgfQogICAgfQoKCgoKCgogIHR5cGVkZWYgX19uZXdfYWxs
b2MgX19tZW1faW50ZXJmYWNlOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
ICBjbGFzcyBfX3NpbXBsZV9hbGxvYwogIHsKICBwdWJsaWM6CiAgICBzdGF0aWMgX1RwKiBhbGxv
Y2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4gMCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxv
Yzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHApKTsgfQoKICAgIHN0YXRpYyBfVHAqIGFsbG9j
YXRlKCkKICAgIHsgcmV0dXJuIChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7
IH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAg
eyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1Rw
KSk7IH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wKQogICAgeyBfQWxsb2M6
OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkpOyB9CiAgfTsKCiAgdGVtcGxhdGUgPGNsYXNz
IF9BbGxvYz4KICBjbGFzcyBfX2RlYnVnX2FsbG9jCiAgewogIHByaXZhdGU6CiAgICBlbnVtIHtf
U19leHRyYSA9IDh9OwoKCiAgcHVibGljOgoKICAgIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXpl
X3QgX19uKQogICAgewogICAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9j
YXRlKF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICAgICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19u
OwogICAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICAgIH0KCiAgICBzdGF0
aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsKICAgICAgY2hh
ciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7CiAgICAgIChzdGF0aWNf
Y2FzdDx2b2lkPiAoKCooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24pID8gMCA6IChfX2Fzc2VydF9m
YWlsICgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fbiIsICIvaG9tZS92YW5pd2Fhci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIsIDI3MCwgX19QUkVUVFlfRlVOQ1RJT05f
XyksIDApKSk7CiAgICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsgKGludCkg
X1NfZXh0cmEpOwogICAgfQoKICAgIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwg
c2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opCiAgICB7CiAgICAgIGNoYXIqIF9fcmVh
bF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOwogICAgICAoc3RhdGljX2Nhc3Q8dm9p
ZD4gKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRfc3opID8gMCA6IChfX2Fzc2VydF9mYWls
ICgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6IiwgIi9ob21lL3Zhbml3YWFyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiwgMjc3LCBfX1BSRVRUWV9GVU5DVElP
Tl9fKSwgMCkpKTsKICAgICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopCiAgICAgICAgX0FsbG9j
OjpyZWFsbG9jYXRlKF9fcmVhbF9wLCBfX29sZF9zeiArIChpbnQpIF9TX2V4dHJhLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3ogKyAoaW50KSBfU19leHRyYSk7
CiAgICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3X3N6OwogICAgICByZXR1cm4gX19yZXN1
bHQgKyAoaW50KSBfU19leHRyYTsKICAgIH0KICB9OwoKdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMs
IGludCBfX2luc3Q+CiAgY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlCiAgewogIHByaXZh
dGU6CiAgICBlbnVtIHtfQUxJR04gPSA4fTsKICAgIGVudW0ge19NQVhfQllURVMgPSAxMjh9Owog
ICAgZW51bSB7X05GUkVFTElTVFMgPSBfTUFYX0JZVEVTIC8gX0FMSUdOfTsKCiAgICB1bmlvbiBf
T2JqCiAgICB7CiAgICAgIHVuaW9uIF9PYmoqIF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICBjaGFy
IF9NX2NsaWVudF9kYXRhWzFdOwogICAgfTsKCiAgICBzdGF0aWMgX09iaiogdm9sYXRpbGUgX1Nf
ZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCgogICAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7
CiAgICBzdGF0aWMgY2hhciogX1NfZW5kX2ZyZWU7CiAgICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBf
c2l6ZTsKCiAgICBzdGF0aWMgX1NUTF9tdXRleF9sb2NrIF9TX25vZGVfYWxsb2NhdG9yX2xvY2s7
CgogICAgc3RhdGljIHNpemVfdAogICAgX1Nfcm91bmRfdXAoc2l6ZV90IF9fYnl0ZXMpCiAgICB7
IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpIF9BTElHTi0xKSAmIH4oKHNpemVfdCkgX0FM
SUdOIC0gMSkpOyB9CgogICAgc3RhdGljIHNpemVfdAogICAgX1NfZnJlZWxpc3RfaW5kZXgoc2l6
ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpX0FMSUdOLTEp
LyhzaXplX3QpX0FMSUdOIC0gMSk7IH0KCgoKICAgIHN0YXRpYyB2b2lkKgogICAgX1NfcmVmaWxs
KHNpemVfdCBfX24pOwoKCgogICAgc3RhdGljIGNoYXIqCiAgICBfU19jaHVua19hbGxvYyhzaXpl
X3QgX19zaXplLCBpbnQmIF9fbm9ianMpOwoKCgogICAgY2xhc3MgX0xvY2sKICAgIHsKICAgIHB1
YmxpYzoKICAgICAgX0xvY2soKSB7IGlmIChfX3RocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xv
Y2suX01fYWNxdWlyZV9sb2NrKCk7IH0KICAgICAgfl9Mb2NrKCkgeyBpZiAoX190aHJlYWRzKSBf
U19ub2RlX2FsbG9jYXRvcl9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9CiAgICB9IF9fYXR0cmli
dXRlX18gKChfX3VudXNlZF9fKSk7CiAgICBmcmllbmQgY2xhc3MgX0xvY2s7CgogIHB1YmxpYzoK
CiAgICBzdGF0aWMgdm9pZCoKICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7CiAgICAgIHZv
aWQqIF9fcmV0ID0gMDsKCiAgICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKQogICAg
ICAgIF9fcmV0ID0gX19tZW1faW50ZXJmYWNlOjphbGxvY2F0ZShfX24pOwogICAgICBlbHNlCiAg
ICAgICAgewogICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJl
ZV9saXN0CiAgICAgICAgICAgICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCgoKICAgICAgICAg
IF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICAgICAgIF9PYmoqIF9fcmVzdHJpY3RfXyBfX3Jl
c3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgIGlmIChfX3Jlc3VsdCA9PSAwKQogICAg
ICAgICAgICBfX3JldCA9IF9TX3JlZmlsbChfU19yb3VuZF91cChfX24pKTsKICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0
IC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgIF9fcmV0ID0gX19yZXN1bHQ7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH07CgoKICAgIHN0
YXRpYyB2b2lkCiAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsKICAg
ICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpCiAgICAgICAgX19tZW1faW50ZXJmYWNl
OjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9P
YmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdAogICAgICAgICAgICA9IF9TX2ZyZWVfbGlzdCAr
IF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAgICAgICBfT2JqKiBfX3EgPSAoX09iaiopX19w
OwoKCgogICAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwogICAgICAgICAgX19xIC0+IF9N
X2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgKl9fbXlfZnJlZV9s
aXN0ID0gX19xOwogICAgICAgIH0KICAgIH0KCiAgICBzdGF0aWMgdm9pZCoKICAgIHJlYWxsb2Nh
dGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeik7CiAgfTsKCgog
IHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p
bnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro
cmVhZHMsIF9faW5zdD4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTxib29sIF9f
dGhyZWFkcywgaW50IF9faW5zdD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLAogICAgICAgICAg
ICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikK
ICAgIHsgcmV0dXJuIGZhbHNlOyB9CgoKCgoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50
IF9faW5zdD4KICAgIGNoYXIqCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz
LCBfX2luc3Q+OjpfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBfX25v
YmpzKQogICAgewogICAgICBjaGFyKiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fdG90YWxfYnl0
ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5k
X2ZyZWUgLSBfU19zdGFydF9mcmVlOwoKICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFs
X2J5dGVzKQogICAgICB7CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAg
IF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4oX19yZXN1bHQp
OwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3NpemUpCiAgICAgICAg
ewogICAgICAgICAgX19ub2JqcyA9IChpbnQpKF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAg
ICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgICAgICBfX3Jlc3VsdCA9
IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7
CiAgICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg
IHsKICAgICAgICAgIHNpemVfdCBfX2J5dGVzX3RvX2dldCA9CiAgICAgICAgICAgIDIgKiBfX3Rv
dGFsX2J5dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOwoKICAgICAgICAgIGlm
IChfX2J5dGVzX2xlZnQgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX09iaiogdm9s
YXRpbGUqIF9fbXlfZnJlZV9saXN0ID0KICAgICAgICAgICAgICAgIF9TX2ZyZWVfbGlzdCArIF9T
X2ZyZWVsaXN0X2luZGV4KF9fYnl0ZXNfbGVmdCk7CgogICAgICAgICAgICAgICgoX09iaiopX1Nf
c3RhcnRfZnJlZSkgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAg
ICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopIF9fbWVtX2ludGVyZmFjZTo6
YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwogICAgICAgICAgaWYgKDAgPT0gX1Nfc3RhcnRfZnJl
ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBfX2k7CiAgICAgICAgICAgICAg
X09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAgIF9PYmoqIF9fcDsK
CgoKICAgICAgICAgICAgICBfX2kgPSBfX3NpemU7CiAgICAgICAgICAgICAgZm9yICg7IF9faSA8
PSAoc2l6ZV90KSBfTUFYX0JZVEVTOyBfX2kgKz0gKHNpemVfdCkgX0FMSUdOKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCAr
IF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7CiAgICAgICAgICAgICAgICAgIF9fcCA9ICpfX215X2Zy
ZWVfbGlzdDsKICAgICAgICAgICAgICAgICAgaWYgKDAgIT0gX19wKQogICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcCAtPiBfTV9m
cmVlX2xpc3RfbGluazsKICAgICAgICAgICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hh
ciopX19wOwogICAgICAgICAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVl
ICsgX19pOwogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKF9TX2NodW5rX2FsbG9jKF9fc2l6
ZSwgX19ub2JqcykpOwoKCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gMDsKICAgICAgICAgICAgICBfU19zdGFydF9mcmVl
ID0gKGNoYXIqKV9fbWVtX2ludGVyZmFjZTo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwoKCiAg
ICAgICAgICAgIH0KICAgICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAg
ICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9fYnl0ZXNfdG9fZ2V0OwogICAg
ICAgICAgcmV0dXJuKF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOwogICAgICAgIH0K
ICAgIH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgdm9p
ZCoKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3Jl
ZmlsbChzaXplX3QgX19uKQogICAgewogICAgICBpbnQgX19ub2JqcyA9IDIwOwogICAgICBjaGFy
KiBfX2NodW5rID0gX1NfY2h1bmtfYWxsb2MoX19uLCBfX25vYmpzKTsKICAgICAgX09iaiogdm9s
YXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAgICBfT2JqKiBfX3Jlc3VsdDsKICAgICAgX09iaiog
X19jdXJyZW50X29iajsKICAgICAgX09iaiogX19uZXh0X29iajsKICAgICAgaW50IF9faTsKCiAg
ICAgIGlmICgxID09IF9fbm9ianMpIHJldHVybihfX2NodW5rKTsKICAgICAgX19teV9mcmVlX2xp
c3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCiAgICAgIF9fcmVz
dWx0ID0gKF9PYmoqKV9fY2h1bms7CiAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fbmV4dF9vYmog
PSAoX09iaiopKF9fY2h1bmsgKyBfX24pOwogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKyspIHsK
ICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsKICAgICAgICBfX25leHRfb2JqID0g
KF9PYmoqKSgoY2hhciopX19uZXh0X29iaiArIF9fbik7CiAgICAgICAgaWYgKF9fbm9ianMgLSAx
ID09IF9faSkgewogICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9
IDA7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX19jdXJyZW50
X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IF9fbmV4dF9vYmo7CiAgICAgICAgfQogICAgICB9
CiAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9CgoKICB0ZW1wbGF0ZTxib29sIHRocmVhZHMs
IGludCBpbnN0PgogICAgdm9pZCoKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0aHJlYWRz
LCBpbnN0Pjo6cmVhbGxvY2F0ZSh2b2lkKiBfX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fb2xkX3N6LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25l
d19zeikKICAgIHsKICAgICAgdm9pZCogX19yZXN1bHQ7CiAgICAgIHNpemVfdCBfX2NvcHlfc3o7
CgogICAgICBpZiAoX19vbGRfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTICYmIF9fbmV3X3N6ID4g
KHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICAgIHJldHVybihyZWFsbG9jKF9fcCwgX19uZXdf
c3opKTsKICAgICAgfQogICAgICBpZiAoX1Nfcm91bmRfdXAoX19vbGRfc3opID09IF9TX3JvdW5k
X3VwKF9fbmV3X3N6KSkgcmV0dXJuKF9fcCk7CiAgICAgIF9fcmVzdWx0ID0gYWxsb2NhdGUoX19u
ZXdfc3opOwogICAgICBfX2NvcHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6PyBfX29sZF9zeiA6
IF9fbmV3X3N6OwogICAgICBtZW1jcHkoX19yZXN1bHQsIF9fcCwgX19jb3B5X3N6KTsKICAgICAg
ZGVhbGxvY2F0ZShfX3AsIF9fb2xkX3N6KTsKICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0K
CiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgX1NUTF9tdXRleF9sb2Nr
CiAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfbm9kZV9h
bGxvY2F0b3JfbG9jawogID0geyB7MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAw
LCAwIH19IH07CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIGNoYXIq
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3N0YXJ0X2Zy
ZWUgPSAwOwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICBjaGFyKiBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19lbmRfZnJlZSA9
IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIHNpemVfdCBfX2Rl
ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19oZWFwX3NpemUgPSAw
OwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICB0eXBlbmFtZSBfX2Rl
ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfT2JqKiB2b2xhdGlsZQog
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2ZyZWVfbGlz
dFtfTkZSRUVMSVNUU107CgogIHR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUs
IDA+IF9fYWxsb2M7CiAgdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8ZmFsc2UsIDA+
IF9fc2luZ2xlX2NsaWVudF9hbGxvYzsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFsbG9j
YXRvcgp7CiAgdHlwZWRlZiBfX2FsbG9jIF9BbGxvYzsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90
IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRl
ZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlw
ZWRlZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNl
OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1
Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07CgogIGFs
bG9jYXRvcigpIHRocm93KCkge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3co
KSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9U
cDE+JikgdGhyb3coKSB7fQogIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50ZXIgYWRk
cmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9pbnRl
ciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoK
ICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0
dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBz
aXplb2YoX1RwKSkpCiAgICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCgogIHZvaWQgZGVhbGxv
Y2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRl
KF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0
IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lk
IGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAo
X192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07
Cgp0ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7CnB1YmxpYzoKICB0eXBlZGVmIHNp
emVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7
CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1
Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07Cn07CgoK
dGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIHRy
dWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJl
dHVybiBmYWxzZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3Qg
X19hbGxvY2F0b3IKewogIF9BbGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7CgogIHR5cGVkZWYgc2l6
ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw
ZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAg
dHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJl
bmNlOwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBz
dHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhl
cjsKICB9OwoKICBfX2FsbG9jYXRvcigpIHRocm93KCkge30KICBfX2FsbG9jYXRvcihjb25zdCBf
X2FsbG9jYXRvciYgX19hKSB0aHJvdygpCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191
bmRlcmx5aW5nX2FsbG9jKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPgogIF9fYWxsb2NhdG9y
KGNvbnN0IF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4mIF9fYSkgdGhyb3coKQogICAgOiBfX3Vu
ZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB+X19hbGxvY2F0b3Io
KSB0aHJvdygpIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJl
dHVybiAmX194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gp
IGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwg
Y29uc3Qgdm9pZCogPSAwKSB7CiAgICByZXR1cm4gX19uICE9IDAKICAgICAgICA/IHN0YXRpY19j
YXN0PF9UcCo+KF9fdW5kZXJseWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkp
CiAgICAgICAgOiAwOwogIH0KCgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90
eXBlIF9fbikKICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBz
aXplb2YoX1RwKSk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKQogICAg
eyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBv
aW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2
b2lkIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfQWxsb2M+CmNsYXNzIF9fYWxsb2NhdG9yPHZvaWQsIF9BbGxvYz4gewogIHR5cGVkZWYg
c2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiB2b2lkKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRl
cjsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0
cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVy
OwogIH07Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewog
IHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyA9PSBfX2EyLl9fdW5kZXJseWluZ19hbGxv
YzsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1
cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgIT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0K
CgoKCgoKCnRlbXBsYXRlIDxpbnQgaW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBf
X21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRl
bXBsYXRlIDxpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fbWFsbG9j
X2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9f
bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fZGVidWdf
YWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWJ1Z19hbGxv
YzxfQWxsb2M+JikgewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVy
biBmYWxzZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4Kc3RydWN0
IF9BbGxvY190cmFpdHMKewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IGZh
bHNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPF9UcD46
Om90aGVyIGFsbG9jYXRvcl90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs
bG9jYXRvcj4KY29uc3QgYm9vbCBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2lu
c3RhbmNlbGVzczsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxPgpzdHJ1Y3QgX0Fs
bG9jX3RyYWl0czxfVHAsIGFsbG9jYXRvcjxfVHAxPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBf
U19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2Fs
bG9jPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIGFsbG9jYXRvcjxfVHA+IGFsbG9jYXRvcl90eXBl
Owp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190
cmFpdHM8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4KewogIHN0YXRpYyBj
b25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxv
YzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsKICB0
eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+
IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGJvb2wgX190aHJlYWRz
LCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5z
dGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlw
ZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f
dGhyZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19k
ZWJ1Z19hbGxvYzxfQWxsb2M+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVz
cyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVidWdfYWxsb2M8X0Fs
bG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlYnVnX2Fs
bG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9UcDEsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAg
ICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8
X19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7
CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f
aW5zdD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2Nf
YWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9UcDEsIGJvb2wgX190aHIsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxs
b2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8
X190aHIsIF9faW5zdD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3Mg
PSB0cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9f
YWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgog
ICAgICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X1RwMSwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9y
PF9UcDEsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9T
X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVi
dWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw
LCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKCgogIGV4dGVy
biB0ZW1wbGF0ZSBjbGFzcyBhbGxvY2F0b3I8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz
IGFsbG9jYXRvcjx3Y2hhcl90PjsKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPHRydWUsIDA+OwoKfQoKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CiAgICBpbmxpbmUgdm9pZAogICAgX0NvbnN0
cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKQogICAgeyBuZXcgKHN0YXRpY19jYXN0
PHZvaWQqPihfX3ApKSBfVDEoX192YWx1ZSk7IH0KCgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9U
MT4KICAgIGlubGluZSB2b2lkCiAgICBfQ29uc3RydWN0KF9UMSogX19wKQogICAgeyBuZXcgKHN0
YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEoKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRl
cmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAg
IHsgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSBfRGVzdHJveSgmKl9fZmly
c3QpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZv
aWQKICAgIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwg
X190cnVlX3R5cGUpCiAgICB7IH0KCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgogICAgaW5s
aW5lIHZvaWQKICAgIF9EZXN0cm95KF9UcCogX19wb2ludGVyKQogICAgeyBfX3BvaW50ZXItPn5f
VHAoKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlubGluZSB2
b2lkCiAgICBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0
b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgICAgICAgICAgICAgIF9WYWx1
ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlX3R5cGU+
OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICAgICAgICAgICAgICAgX0hhc190cml2
aWFsX2Rlc3RydWN0b3I7CgogICAgICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0hh
c190cml2aWFsX2Rlc3RydWN0b3IoKSk7CiAgICB9Cn0KCgoKCm5hbWVzcGFjZSBzdGQKewoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAg
IGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVy
PgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19m
YWxzZV90eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICAg
ICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsr
X19jdXIpCiAgICAgICAgICBfQ29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgICAgICBy
ZXR1cm4gX19jdXI7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAg
IF9EZXN0cm95KF9fcmVzdWx0LCBfX2N1cik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRl
cj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHVuaW5pdGlhbGl6ZWRfY29weShfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCiAg
ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46
OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh
aXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICByZXR1cm4gX191bmlu
aXRpYWxpemVkX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9Jc19QT0QoKSk7
CiAgICB9CgogIGlubGluZSBjaGFyKgogIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCBjaGFyKiBf
X2ZpcnN0LCBjb25zdCBjaGFyKiBfX2xhc3QsIGNoYXIqIF9fcmVzdWx0KQogIHsKICAgIG1lbW1v
dmUoX19yZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmlyc3QpOwogICAgcmV0dXJuIF9fcmVz
dWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHdjaGFyX3QqCiAgdW5pbml0
aWFsaXplZF9jb3B5KGNvbnN0IHdjaGFyX3QqIF9fZmlyc3QsIGNvbnN0IHdjaGFyX3QqIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCogX19yZXN1bHQpCiAgewogICAgbWVtbW92
ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKHdjaGFyX3QpICogKF9fbGFzdCAtIF9fZmlyc3Qp
KTsKICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9p
ZAogICAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg
X194LCBfX3RydWVfdHlwZSkKICAgIHsgZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAg
ICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gs
IF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsK
ICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikKICAg
ICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICAgICAgfQogICAgICBjYXRjaCguLi4p
CiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOwogICAgICAgICAg
dGhyb3c7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs
IHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICB1bmluaXRpYWxpemVkX2ZpbGwoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX194KQog
ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+
Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3Ry
YWl0czxfVmFsdWVUeXBlPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgX191bmluaXRpYWxp
emVkX2ZpbGxfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX194LCBfSXNfUE9EKCkpOwogICAgfQoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1l
IF9UcD4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX25f
YXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHJldHVy
biBmaWxsX24oX19maXJzdCwgX19uLCBfX3gpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0
ZXIKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
U2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwg
X19mYWxzZV90eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0Owog
ICAgICB0cnkgewogICAgICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19jdXIpCiAgICAg
ICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICAgICAgcmV0dXJuIF9fY3VyOwogICAg
ICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX2ZpcnN0
LCBfX2N1cik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIGlu
bGluZSBfRm9yd2FyZEl0ZXIKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aXNf
UE9EX3R5cGUgX0lzX1BPRDsKICAgICAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4
KF9fZmlyc3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRl
cj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2NvcHko
X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCiAg
ICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0
MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICB0cnkgewogICAgICAgIHJldHVybiB1bmluaXRp
YWxpemVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIsIF9fbWlkKTsKICAgICAgfQogICAgICBjYXRj
aCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsKICAg
ICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICBpbmxpbmUg
X0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5KF9Gb3J3YXJkSXRlciBf
X3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfVHAmIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdW5pbml0aWFsaXplZF9m
aWxsKF9fcmVzdWx0LCBfX21pZCwgX194KTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gdW5p
bml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19taWQpOwogICAgICB9CiAgICAgIGNh
dGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19taWQpOwog
ICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGlu
ZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEs
IF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21p
ZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKICAg
ICAgdHJ5IHsKICAgICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19taWQyLCBfX2xhc3QyLCBfX3gp
OwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShf
X2ZpcnN0MiwgX19taWQyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KCn0KCgoK
bmFtZXNwYWNlIHN0ZAp7CgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBj
bGFzcyBfVHA+CiAgY2xhc3MgcmF3X3N0b3JhZ2VfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJh
dG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX01faXRlcjsKCiAgICBwdWJsaWM6
CiAgICAgIGV4cGxpY2l0CiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yKF9Gb3J3YXJkSXRlcmF0
b3IgX194KSA6IF9NX2l0ZXIoX194KSB7fQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImCiAg
ICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICByYXdfc3RvcmFnZV9pdGVy
YXRvciYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9UcCYgX19lbGVtZW50KQogICAgICB7CiAgICAg
ICAgX0NvbnN0cnVjdCgmKl9NX2l0ZXIsIF9fZWxlbWVudCk7CiAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICB9CgogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBf
VHA+JgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgICsrX01faXRlcjsKICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3
YXJkSXRlcmF0b3IsIF9UcD4KICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICBy
YXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+IF9fdG1wID0gKnRoaXM7
CiAgICAgICAgKytfTV9pdGVyOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQogICAgfTsK
fQoKCgoKCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPHR5cGVuYW1lIF9UcD4KcGFpcjxfVHAq
LCBwdHJkaWZmX3Q+Cl9fZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAq
KQp7CiAgaWYgKF9fbGVuID4gcHRyZGlmZl90KDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAg
ICBfX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgd2hpbGUgKF9fbGVuID4gMCkg
ewogICAgX1RwKiBfX3RtcCA9IChfVHAqKSBzdGQ6Om1hbGxvYygoc3RkOjpzaXplX3QpX19sZW4g
KiBzaXplb2YoX1RwKSk7CiAgICBpZiAoX190bXAgIT0gMCkKICAgICAgcmV0dXJuIHBhaXI8X1Rw
KiwgcHRyZGlmZl90PihfX3RtcCwgX19sZW4pOwogICAgX19sZW4gLz0gMjsKICB9CgogIHJldHVy
biBwYWlyPF9UcCosIHB0cmRpZmZfdD4oKF9UcCopMCwgMCk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4KICBpbmxpbmUgcGFpcjxfVHAqLHB0cmRpZmZfdD4KICBnZXRfdGVtcG9yYXJ5X2J1ZmZl
cihwdHJkaWZmX3QgX19sZW4pCiAgewogICAgcmV0dXJuIF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIo
X19sZW4sIChfVHAqKSAwKTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgdm9pZAogIHJl
dHVybl90ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKQogIHsKICAgIHN0ZDo6ZnJlZShfX3ApOwog
IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgc3RydWN0IGF1dG9fcHRyX3JlZgp7CiAgIF9U
cDEqIF9NX3B0cjsKCiAgIGV4cGxpY2l0CiAgIGF1dG9fcHRyX3JlZihfVHAxKiBfX3ApCiAgIDog
X01fcHRyKF9fcCkge30KfTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBjbGFzcyBhdXRvX3B0
cgp7CnByaXZhdGU6CiAgX1RwKiBfTV9wdHI7CgpwdWJsaWM6CgogIHR5cGVkZWYgX1RwIGVsZW1l
bnRfdHlwZTsKCgoKCgoKCiAgZXhwbGljaXQKICBhdXRvX3B0cihlbGVtZW50X3R5cGUqIF9fcCA9
IDApIHRocm93KCkKICA6IF9NX3B0cihfX3ApIHsgfQoKICBhdXRvX3B0cihhdXRvX3B0ciYgX19h
KSB0aHJvdygpCiAgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkgeyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcDE+CiAgICBhdXRvX3B0cihhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpCiAgICA6
IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7IH0KCiAgYXV0b19wdHImCiAgb3BlcmF0b3I9KGF1dG9f
cHRyJiBfX2EpIHRocm93KCkKICAgIHsKICAgICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcDE+CiAgICBhdXRv
X3B0ciYKICAgIG9wZXJhdG9yPShhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpCiAgICB7CiAg
ICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIH5h
dXRvX3B0cigpIHsgZGVsZXRlIF9NX3B0cjsgfQoKICBlbGVtZW50X3R5cGUmCiAgb3BlcmF0b3Iq
KCkgY29uc3QgdGhyb3coKSB7IHJldHVybiAqX01fcHRyOyB9CgoKCgoKCgogIGVsZW1lbnRfdHlw
ZSoKICBvcGVyYXRvci0+KCkgY29uc3QgdGhyb3coKSB7IHJldHVybiBfTV9wdHI7IH0KCiAgZWxl
bWVudF90eXBlKgogIGdldCgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gX01fcHRyOyB9CgogIGVs
ZW1lbnRfdHlwZSoKICByZWxlYXNlKCkgdGhyb3coKQogICAgewogICAgICBlbGVtZW50X3R5cGUq
IF9fdG1wID0gX01fcHRyOwogICAgICBfTV9wdHIgPSAwOwogICAgICByZXR1cm4gX190bXA7CiAg
ICB9CgogIHZvaWQKICByZXNldChlbGVtZW50X3R5cGUqIF9fcCA9IDApIHRocm93KCkKICAgIHsK
ICAgICAgaWYgKF9fcCAhPSBfTV9wdHIpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIF9NX3B0
cjsKICAgICAgICAgIF9NX3B0ciA9IF9fcDsKICAgICAgICB9CiAgICB9CgogIGF1dG9fcHRyKGF1
dG9fcHRyX3JlZjxlbGVtZW50X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAgICA6IF9NX3B0cihfX3Jl
Zi5fTV9wdHIpIHt9CgogIGF1dG9fcHRyJgogIG9wZXJhdG9yPShhdXRvX3B0cl9yZWY8ZWxlbWVu
dF90eXBlPiBfX3JlZikgdGhyb3coKQogICAgewogICAgICBpZiAoX19yZWYuX01fcHRyICE9IHRo
aXMtPmdldCgpKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgICAgICBf
TV9wdHIgPSBfX3JlZi5fTV9wdHI7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICBvcGVyYXRvciBhdXRvX3B0cl9yZWY8X1Rw
MT4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGF1dG9fcHRyX3JlZjxfVHAxPih0aGlzLT5yZWxl
YXNlKCkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICBvcGVyYXRvciBhdXRvX3B0
cjxfVHAxPigpIHRocm93KCkKICAgICAgeyByZXR1cm4gYXV0b19wdHI8X1RwMT4odGhpcy0+cmVs
ZWFzZSgpKTsgfQoKfTsKCn0KCgoKCgoKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0FyZywgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IHVuYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9B
cmcgYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07CgoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3Qg
YmluYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAg
dHlwZWRlZiBfQXJnMiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVz
dWx0X3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAm
IF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248
X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1Rw
JiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAtIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CnN0cnVjdCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9U
cD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29u
c3QgeyByZXR1cm4gX194ICogX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0
IGRpdmlkZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9w
ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf
X3ggLyBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1
YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25z
dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9
OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVu
Y3Rpb248X1RwLF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7
IHJldHVybiAtX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8g
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3Io
KShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA9PSBf
X3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29u
c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggIT0gX195OyB9
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXIgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f
eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+IF9feTsgfQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAs
X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg
X195KSBjb25zdCB7IHJldHVybiBfX3ggPCBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpzdHJ1Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi
b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg
Y29uc3QgeyByZXR1cm4gX194ID49IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0
cnVjdCBsZXNzX2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsK
ICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7
IHJldHVybiBfX3ggPD0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9n
aWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wg
b3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJu
IF9feCAmJiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9v
ciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IHx8
IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX25vdCA6IHB1
YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBf
VHAmIF9feCkgY29uc3QgeyByZXR1cm4gIV9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QcmVk
aWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0ZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVu
YW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUsIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVk
aWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJl
ZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5
cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJu
ICFfTV9wcmVkKF9feCk7CiAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxp
bmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDEoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVk
KQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CgoKdGVtcGxh
dGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIGJpbmFyeV9uZWdhdGUKICA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3Vt
ZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgog
IF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29u
c3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShj
b25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gsCiAgICAg
ICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90
eXBlJiBfX3kpIGNvbnN0CiAgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsKICB9Cn07
CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVk
aWNhdGU+Cm5vdDIoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9u
ZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+
CmNsYXNzIGJpbmRlcjFzdAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVy
YXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9u
IG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1
YmxpYzoKICBiaW5kZXIxc3QoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25z
dCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDog
b3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBl
CiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRf
dHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKCiAgdHlw
ZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKHR5cGVuYW1lIF9PcGVy
YXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2
YWx1ZSwgX194KTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBf
VHA+CmlubGluZSBiaW5kZXIxc3Q8X09wZXJhdGlvbj4KYmluZDFzdChjb25zdCBfT3BlcmF0aW9u
JiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6
Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOwogIHJldHVybiBiaW5kZXIxc3Q8X09wZXJh
dGlvbj4oX19mbiwgX0FyZzFfdHlwZShfX3gpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0
aW9uPgpjbGFzcyBiaW5kZXIybmQKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBf
T3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0
aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIHZhbHVl
OwpwdWJsaWM6CiAgYmluZGVyMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAg
Y29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkKICAg
ICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0
X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3Vt
ZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOwogIH0KCgog
IHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBf
T3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBv
cChfX3gsIHZhbHVlKTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFz
cyBfVHA+CmlubGluZSBiaW5kZXIybmQ8X09wZXJhdGlvbj4KYmluZDJuZChjb25zdCBfT3BlcmF0
aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlv
bjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgX0FyZzJfdHlwZTsKICByZXR1cm4gYmluZGVyMm5kPF9P
cGVyYXRpb24+KF9fZm4sIF9BcmcyX3R5cGUoX194KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQXJn
LCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQgKCpf
TV9wdHIpKF9BcmcpOwpwdWJsaWM6CiAgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbigpIHt9CiAg
ZXhwbGljaXQgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnKSkg
OiBfTV9wdHIoX194KSB7fQogIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyBy
ZXR1cm4gX01fcHRyKF9feCk7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jl
c3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gcHRy
X2Z1bihfUmVzdWx0ICgqX194KShfQXJnKSkKewogIHJldHVybiBwb2ludGVyX3RvX3VuYXJ5X2Z1
bmN0aW9uPF9BcmcsIF9SZXN1bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNs
YXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlv
biA6CiAgcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnByb3Rl
Y3RlZDoKICAgIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAgIHBv
aW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmlu
YXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpCiAgICAgIDogX01fcHRy
KF9feCkge30KICAgIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29u
c3QgewogICAgICByZXR1cm4gX01fcHRyKF9feCwgX195KTsKICAgIH0KfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90
b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4KcHRyX2Z1bihfUmVzdWx0ICgq
X194KShfQXJnMSwgX0FyZzIpKSB7CiAgcmV0dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9u
PF9BcmcxLF9BcmcyLF9SZXN1bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1
Y3QgX0lkZW50aXR5IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IHsKICBfVHAmIG9w
ZXJhdG9yKCkoX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQogIGNvbnN0IF9UcCYgb3Bl
cmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0MXN0IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZT4gewogIHR5cGVuYW1lIF9QYWlyOjpm
aXJzdF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3gu
Zmlyc3Q7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigp
KGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1bmFyeV9m
dW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlPgp7CiAgdHlwZW5hbWUg
X1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJl
dHVybiBfX3guc2Vjb25kOwogIH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUm
IG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNv
bmQ7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1
bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGlj
aXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQg
b3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJp
dmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj
bGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxj
b25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0
IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko
Y29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6
CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg
Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9U
cCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9f
cGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3Qg
eyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1
bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhw
bGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9N
X2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgcmV0
dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0
Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNz
IG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1
YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9N
X2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7
IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2Yp
KF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmNsYXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9U
cCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KF9SZXQg
KF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9y
KCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdAogICAgeyByZXR1cm4gKF9fcC0+Kl9N
X2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1f
ZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJs
aWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDog
X01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0
IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9m
KShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJn
PgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw
LF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1Jl
dCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0
b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2Yp
KF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1
bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdCh2
b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1Rw
KiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6Oipf
TV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2
b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJs
aWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3Qp
IDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3Qg
eyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+
IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBt
ZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQg
b3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAg
dm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25z
dF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZv
aWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoq
X19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9U
cCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6Oipf
TV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNz
IG1lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw
KixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoq
X19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwg
X0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChf
VHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpj
bGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlf
ZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0
X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7
fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9f
cC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25z
dDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9y
ZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJn
LHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9f
cGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9B
cmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6
OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFz
cyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9m
dW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30K
ICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3Iu
Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsK
fTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90
PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVu
X3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+Cmlu
bGluZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgp
IGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVt
cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fcmVmX3Q8X1JldCxf
VHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3Jl
Zl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpp
bmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1Rw
OjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+
KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+Cmlu
bGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShf
QXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1f
ZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25z
dCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRl
bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVu
MV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9Bcmcp
KQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1f
ZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9B
cmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+
KF9fZik7IH0KCgoKfQoKCgoKCgp0eXBlZGVmIGludCBfQXRvbWljX3dvcmQ7CgpzdGF0aWMgaW5s
aW5lIF9BdG9taWNfd29yZApfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fZXhjaGFuZ2Vf
YW5kX2FkZCAodm9sYXRpbGUgX0F0b21pY193b3JkICpfX21lbSwgaW50IF9fdmFsKQp7CiAgcmVn
aXN0ZXIgX0F0b21pY193b3JkIF9fcmVzdWx0OwogIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9j
azsgeGFkZGwgJTAsJTIiCiAgICAgICAgICAgICAgICAgICAgICAgIDogIj1yIiAoX19yZXN1bHQp
CiAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiIChfX3ZhbCksICJtIiAoKl9fbWVtKQogICAg
ICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnN0
YXRpYyBpbmxpbmUgdm9pZApfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fYXRvbWljX2Fk
ZCAodm9sYXRpbGUgX0F0b21pY193b3JkKiBfX21lbSwgaW50IF9fdmFsKQp7CiAgX19hc21fXyBf
X3ZvbGF0aWxlX18gKCJsb2NrOyBhZGRsICUwLCUxIgogICAgICAgICAgICAgICAgICAgICAgICA6
IDogImlyIiAoX192YWwpLCAibSIgKCpfX21lbSkgOiAibWVtb3J5Iik7Cn0KCgpuYW1lc3BhY2Ug
c3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBjbGFzcyBiYXNpY19zdHJpbmcKICAgIHsKCiAgICBwdWJsaWM6CiAg
ICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
VHJhaXRzOjpjaGFyX3R5cGUgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2Nh
dG9yX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90eXBlIGRpZmZl
cmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnJlZmVyZW5jZSByZWZl
cmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9yZWZlcmVuY2UgY29u
c3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cG9pbnRlciBwb2lu
dGVyOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcG9pbnRlciBjb25zdF9w
b2ludGVyOwogICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8cG9pbnRl
ciwgYmFzaWNfc3RyaW5nPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9y
bWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIGJhc2ljX3N0cmluZz4KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0
b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9y
PiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHByaXZhdGU6CgogICAgICBzdHJ1Y3QgX1JlcAogICAg
ICB7CgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8Y2hh
cj46Om90aGVyIF9SYXdfYnl0ZXNfYWxsb2M7CgogICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5
cGUgX1NfbWF4X3NpemU7CiAgICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCBfU190ZXJtaW5hbDsK
CiAgICAgICAgc2l6ZV90eXBlIF9NX2xlbmd0aDsKICAgICAgICBzaXplX3R5cGUgX01fY2FwYWNp
dHk7CiAgICAgICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CgogICAgICAgIGJvb2wKICAg
ICAgICBfTV9pc19sZWFrZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMg
PCAwOyB9CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19zaGFyZWQoKSBjb25zdAogICAgICAg
IHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPiAwOyB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9z
ZXRfbGVha2VkKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQoKICAgICAgICB2b2lk
CiAgICAgICAgX01fc2V0X3NoYXJhYmxlKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAwOyB9
CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8X0NoYXJUKj4odGhpcyArIDEpOyB9CgogICAgICAgIF9D
aGFyVCYKICAgICAgICBvcGVyYXRvcltdKHNpemVfdCBfX3MpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiBfTV9yZWZkYXRhKCkgW19fc107IH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX2dy
YWIoY29uc3QgX0FsbG9jJiBfX2FsbG9jMSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jMikKICAgICAg
ICB7CiAgICAgICAgICByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBfX2Fs
bG9jMikKICAgICAgICAgICAgICAgICAgPyBfTV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2FsbG9j
MSk7CiAgICAgICAgfQoKCiAgICAgICAgc3RhdGljIF9SZXAqCiAgICAgICAgX1NfY3JlYXRlKHNp
emVfdCwgY29uc3QgX0FsbG9jJik7CgogICAgICAgIHZvaWQKICAgICAgICBfTV9kaXNwb3NlKGNv
bnN0IF9BbGxvYyYgX19hKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9h
ZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA8PSAwKQogICAgICAgICAgICBfTV9kZXN0cm95KF9fYSk7
CiAgICAgICAgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGVzdHJveShjb25zdCBfQWxsb2Mm
KSB0aHJvdygpOwoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fcmVmY29weSgpIHRocm93KCkK
ICAgICAgICB7CiAgICAgICAgICBfX2F0b21pY19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOwogICAg
ICAgICAgcmV0dXJuIF9NX3JlZmRhdGEoKTsKICAgICAgICB9CgogICAgICAgIF9DaGFyVCoKICAg
ICAgICBfTV9jbG9uZShjb25zdCBfQWxsb2MmLCBzaXplX3R5cGUgX19yZXMgPSAwKTsKICAgICAg
fTsKCgogICAgICBzdHJ1Y3QgX0FsbG9jX2hpZGVyIDogX0FsbG9jCiAgICAgIHsKICAgICAgICBf
QWxsb2NfaGlkZXIoX0NoYXJUKiBfX2RhdCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgOiBf
QWxsb2MoX19hKSwgX01fcChfX2RhdCkgeyB9CgogICAgICAgIF9DaGFyVCogX01fcDsKICAgICAg
fTsKCiAgICBwdWJsaWM6CgoKCiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgbnBvcyA9IHN0
YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpOwoKICAgIHByaXZhdGU6CgogICAgICBtdXRhYmxlIF9B
bGxvY19oaWRlciBfTV9kYXRhcGx1czsKCgoKICAgICAgc3RhdGljIHNpemVfdHlwZSBfU19lbXB0
eV9yZXBfc3RvcmFnZVsoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6
ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCiAgICAgIF9DaGFyVCoKICAgICAgX01f
ZGF0YSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGFwbHVzLl9NX3A7IH0KCiAgICAgIF9D
aGFyVCoKICAgICAgX01fZGF0YShfQ2hhclQqIF9fcCkKICAgICAgeyByZXR1cm4gKF9NX2RhdGFw
bHVzLl9NX3AgPSBfX3ApOyB9CgogICAgICBfUmVwKgogICAgICBfTV9yZXAoKSBjb25zdAogICAg
ICB7IHJldHVybiAmKChyZWludGVycHJldF9jYXN0PF9SZXAqPiAoX01fZGF0YSgpKSlbLTFdKTsg
fQoKCgogICAgICBpdGVyYXRvcgogICAgICBfTV9pYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBfTV9pZW5kKCkgY29uc3Qg
eyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgdm9p
ZAogICAgICBfTV9sZWFrKCkKICAgICAgewogICAgICAgIGlmICghX01fcmVwKCktPl9NX2lzX2xl
YWtlZCgpKQogICAgICAgICAgX01fbGVha19oYXJkKCk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9y
CiAgICAgIF9NX2NoZWNrKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgewogICAgICAgIGlm
IChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJi
YXNpY19zdHJpbmc6Ol9NX2NoZWNrIik7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19w
b3M7CiAgICAgIH0KCgogICAgICBpdGVyYXRvcgogICAgICBfTV9mb2xkKHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fb2ZmKSBjb25zdAogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvZmYg
PSBfX29mZiA8IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHNpemVfdHlwZSBfX25ld29m
ZiA9IF9fdGVzdG9mZiA/IF9fb2ZmIDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAgcmV0
dXJuIChfTV9pYmVnaW4oKSArIF9fcG9zICsgX19uZXdvZmYpOwogICAgICB9CgoKCiAgICAgIHRl
bXBsYXRlPGNsYXNzIF9JdGVyYXRvcj4KICAgICAgICBzdGF0aWMgdm9pZAogICAgICAgIF9TX2Nv
cHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9JdGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikKICAg
ICAgICB7CiAgICAgICAgICBmb3IgKDsgX19rMSAhPSBfX2syOyArK19fazEsICsrX19wKQogICAg
ICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3AsICpfX2sxKTsKICAgICAgICB9CgogICAg
ICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRvciBf
X2sxLCBpdGVyYXRvciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2Uo
KSwgX19rMi5iYXNlKCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJz
KF9DaGFyVCogX19wLCBjb25zdF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2syKQog
ICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9Cgog
ICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfQ2hhclQq
IF9fazEsIF9DaGFyVCogX19rMikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEs
IF9fazIgLSBfX2sxKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhf
Q2hhclQqIF9fcCwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9fazIpCiAgICAg
IHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAgIHZv
aWQKICAgICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6
ZV90eXBlIF9fbGVuMik7CgogICAgICB2b2lkCiAgICAgIF9NX2xlYWtfaGFyZCgpOwoKICAgICAg
c3RhdGljIF9SZXAmCiAgICAgIF9TX2VtcHR5X3JlcCgpCiAgICAgIHsgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PF9SZXAqPigmX1NfZW1wdHlfcmVwX3N0b3JhZ2UpOyB9CgogICAgcHVibGljOgoK
CgoKICAgICAgaW5saW5lCiAgICAgIGJhc2ljX3N0cmluZygpOwoKICAgICAgZXhwbGljaXQKICAg
ICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19hKTsKCgogICAgICBiYXNpY19zdHJpbmco
Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXpl
X3R5cGUgX19uID0gbnBvcyk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcm
IF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19u
LCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBf
X3MsIHNpemVfdHlwZSBfX24sCiAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9
IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBf
QWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKHNpemVfdHlwZSBfX24s
IF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgdGVtcGxh
dGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXJh
dG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB+YmFzaWNfc3RyaW5nKCkKICAgICAg
eyBfTV9yZXAoKS0+X01fZGlzcG9zZSh0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOyB9CgogICAgICBi
YXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7
IHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg
IG9wZXJhdG9yPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcyk7
IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpIHsgcmV0
dXJuIHRoaXMtPmFzc2lnbigxLCBfX2MpOyB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4o
KQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9k
YXRhKCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJh
dG9yCiAgICAgIGVuZCgpCiAgICAgIHsKICAgICAgICAgX01fbGVhaygpOwogICAgICAgICByZXR1
cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsKICAgICAgfQoKICAgICAgY29u
c3RfaXRlcmF0b3IKICAgICAgZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0
b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgog
ICAgICByYmVnaW4oKQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgp
KTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSBjb25zdAog
ICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAg
ICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9p
dGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgog
ICAgICByZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0
aGlzLT5iZWdpbigpKTsgfQoKICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBzaXpl
KCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBl
CiAgICAgIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAg
ICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9SZXA6Ol9TX21h
eF9zaXplOyB9CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQg
X19jKTsKCiAgICAgIHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24pIHsgdGhpcy0+cmVz
aXplKF9fbiwgX0NoYXJUKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgY2FwYWNpdHkoKSBj
b25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fY2FwYWNpdHk7IH0KCiAgICAgIHZvaWQKICAgICAg
cmVzZXJ2ZShzaXplX3R5cGUgX19yZXNfYXJnID0gMCk7CgogICAgICB2b2lkCiAgICAgIGNsZWFy
KCkgeyBfTV9tdXRhdGUoMCwgdGhpcy0+c2l6ZSgpLCAwKTsgfQoKICAgICAgYm9vbAogICAgICBl
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9CgoKICAgICAgY29uc3Rf
cmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10gKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAg
eyByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJh
dG9yW10oc2l6ZV90eXBlIF9fcG9zKQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAg
IHJldHVybiBfTV9kYXRhKClbX19wb3NdOwogICAgICB9CgogICAgICBjb25zdF9yZWZlcmVuY2UK
ICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX24gPj0g
dGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmlu
Zzo6YXQiKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCiAgICAgIHJl
ZmVyZW5jZQogICAgICBhdChzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgaWYgKF9fbiA+
PSBzaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjph
dCIpOwogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAg
ICAgIH0KCgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNf
c3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fc3RyKTsgfQoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0
aGlzLT5hcHBlbmQoX19zKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9
KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChzaXplX3R5cGUoMSksIF9fYyk7IH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19z
dHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0
cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKTsKCiAg
ICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7
IHJldHVybiB0aGlzLT5hcHBlbmQoX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9Cgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19j
KTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0
cmluZyYKICAgICAgICBhcHBlbmQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9p
ZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKF9D
aGFyVCBfX2MpCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgMSwg
X19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3Ry
aW5nJiBfX3N0cik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsK
ICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAg
IGlmIChfX3BvcyA+IF9fc3Ryc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJi
YXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgIGNvbnN0IGJvb2wgX190ZXN0biA9IF9fbiA8
IF9fc3Ryc2l6ZSAtIF9fcG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld3NpemUgPSBf
X3Rlc3RuID8gX19uIDogX19zdHJzaXplIC0gX19wb3M7CiAgICAgICAgcmV0dXJuIHRoaXMtPmFz
c2lnbihfX3N0ci5fTV9kYXRhKCkgKyBfX3BvcywgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X24pCiAgICAgIHsKICAgICAgICBpZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAg
IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgIGlm
IChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywg
X01fZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgp
ICsgdGhpcy0+c2l6ZSgpLCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShf
TV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICAgICAgZWxzZQogICAg
ICAgICAgewoKICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcG9zID0gX19zIC0gX01fZGF0
YSgpOwogICAgICAgICAgICBpZiAoX19wb3MgPj0gX19uKQogICAgICAgICAgICAgIHRyYWl0c190
eXBlOjpjb3B5KF9NX2RhdGEoKSwgX19zLCBfX24pOwogICAgICAgICAgICBlbHNlIGlmIChfX3Bv
cykKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6bW92ZShfTV9kYXRhKCksIF9fcywgX19uKTsK
ICAgICAgICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbjsKICAgICAgICAgICAgX01fZGF0
YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgICAgICAgfQogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25z
dCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcywgdHJhaXRzX3R5
cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oc2l6
ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9p
YmVnaW4oKSwgX01faWVuZCgpLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhc3NpZ24oX0lucHV0
SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJu
IHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsg
fQoKICAgICAgdm9pZAogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19uLCBf
Q2hhclQgX19jKQogICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fbiwgX19jKTsgfQoK
ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgdm9pZCBpbnNlcnQo
aXRlcmF0b3IgX19wLCBfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQp
CiAgICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX2JlZywgX19lbmQpOyB9CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0
ciwgMCwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQo
c2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAg
IHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBz
aXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIGlmIChfX3BvczIgPiBf
X3N0cnNpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpp
bnNlcnQiKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUgLSBf
X3BvczI7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3c2l6ZSA9IF9fdGVzdG4gPyBfX24g
OiBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgICAgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvczEs
IF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9f
cywgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUg
PSB0aGlzLT5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgICAgX190
aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9f
c2l6ZSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24pCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9l
cnJvcigiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lz
X3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAg
ICAgICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkK
ICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywgX01f
aWJlZ2luKCkgKyBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBf
X3MgKyBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKCgoKICAgICAgICAgICAgY29uc3Qg
c2l6ZV90eXBlIF9fb2ZmID0gX19zIC0gX01fZGF0YSgpOwogICAgICAgICAgICBfTV9tdXRhdGUo
X19wb3MsIDAsIF9fbik7CiAgICAgICAgICAgIF9fcyA9IF9NX2RhdGEoKSArIF9fb2ZmOwogICAg
ICAgICAgICBfQ2hhclQqIF9fcCA9IF9NX2RhdGEoKSArIF9fcG9zOwogICAgICAgICAgICBpZiAo
X19zICsgX19uIDw9IF9fcCkKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9f
cywgX19uKTsKICAgICAgICAgICAgZWxzZSBpZiAoX19zID49IF9fcCkKICAgICAgICAgICAgICB0
cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcyArIF9fbiwgX19uKTsKICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19z
LCBfX3AgLSBfX3MpOwogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wICsgKF9f
cCAtIF9fcyksIF9fcCArIF9fbiwgX19uIC0gKF9fcCAtIF9fcykpOwogICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgfQogICAgICAgfQoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9f
cykKICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBlOjps
ZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlw
ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHRoaXMt
Pmluc2VydChfTV9jaGVjayhfX3BvcyksIF9fbiwgX19jKTsKICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFy
VCBfX2MgPSBfQ2hhclQoKSkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9fcCAt
IF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIHNpemVf
dHlwZSgxKSwgX19jKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAg
IHJldHVybiB0aGlzLT5fTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgogICAgICBiYXNpY19z
dHJpbmcmCiAgICAgIGVyYXNlKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBu
cG9zKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3Mp
LCBfTV9mb2xkKF9fcG9zLCBfX24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2Rh
dGEoKSwgX01fZGF0YSgpKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRl
cmF0b3IgX19wb3NpdGlvbikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bvc2l0
aW9uIC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBfX3Bv
c2l0aW9uICsgMSwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5fTV9z
ZXRfbGVha2VkKCk7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9Cgog
ICAgICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xh
c3QpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdpbigp
OwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9NX2Rh
dGEoKSk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVybiBf
TV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBs
YWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uLCBfX3N0ci5fTV9k
YXRhKCksIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFj
ZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMik7Cgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIp
CiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog
ICAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3Jhbmdl
KCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4xID0g
X19uMSA8IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRuMSA9
IF9fdGVzdG4xID8gX19uMSA6IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgIGlmIChfX3NpemUgLSBf
X2ZvbGRuMSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24yKQogICAgICAgICAgX190aHJvd19sZW5n
dGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+
X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQog
ICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXplLCBf
X3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSArIF9fcG9z
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9pYmVnaW4oKSArIF9fcG9zICsg
X19mb2xkbjEsIF9fcywgX19zICsgX19uMik7CgogICAgICAgIGVsc2UgcmV0dXJuCiAgICAgICAg
ICAgICAgIF9NX3JlcGxhY2UoX01faWJlZ2luKCkgKyBfX3BvcywgX01faWJlZ2luKCkgKyBfX3Bv
cyArIF9fZm9sZG4xLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19uMiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8Y29uc3Qg
X0NoYXJUKj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOwogICAgICB9CgogICAgICBiYXNpY19zdHJp
bmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3Qg
X0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbjEsIF9f
cywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24y
LCBfQ2hhclQgX19jKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9z
KSwgX01fZm9sZChfX3BvcywgX19uMSksIF9fbjIsIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIs
IF9fc3RyLl9NX2RhdGEoKSwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7IHJl
dHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsIF9fcywg
X19uKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEs
IGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5y
ZXBsYWNlKF9faTEsIF9faTIsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAg
ICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9f
aTIsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIHJlcGxhY2UoaXRlcmF0
b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9f
azEsIF9JbnB1dEl0ZXJhdG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gX01fcmVwbGFjZShfX2kx
LCBfX2kyLCBfX2sxLCBfX2syLAogICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7IH0KCgoKICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9DaGFy
VCogX19rMSwgX0NoYXJUKiBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19p
MSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBs
YWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19rMSwgY29u
c3QgX0NoYXJUKiBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9N
X2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
azEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0
ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9fazIp
CiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIg
LSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMS5iYXNlKCksIF9fazIg
LSBfX2sxKTsKICAgICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRl
cmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRl
cmF0b3IgX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVn
aW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLmJh
c2UoKSwgX19rMiAtIF9fazEpOwogICAgICAgIH0KCiAgICBwcml2YXRlOgogICAgICB0ZW1wbGF0
ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgX01f
cmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyYXRvciBfX2sx
LAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19rMiwgaW5wdXRfaXRlcmF0b3Jf
dGFnKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2Vfc2FmZShpdGVyYXRvciBfX2kxLCBpdGVyYXRv
ciBfX2kyLCBfRm9yd2FyZEl0ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXJhdG9yIF9fazIpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAg
IHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBf
SW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX1RhZzsKICAgICAgICAgIHJl
dHVybiBfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EsIF9UYWcoKSk7CiAgICAgICAgfQoK
ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAg
ICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3Qg
X0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgICAg
ICB7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KHN0YXRpY19jYXN0PHNpemVfdHlwZT4o
X19iZWcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90
eXBlPihfX2VuZCksIF9fYSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRl
cj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9f
YmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwgX0ludGVn
cmFsOwogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfX2Es
IF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4K
ICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2Jl
ZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAg
ICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcj4K
ICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBfX2Jl
ZywgX0Z3ZEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAg
ICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgogICAgICBzdGF0aWMgX0NoYXJUKgogICAgICBfU19j
b25zdHJ1Y3Qoc2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSk7
CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgdm9pZAogICAg
ICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7CgoKICAg
ICAgY29uc3QgX0NoYXJUKgogICAgICBjX3N0cigpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6
ZV90eXBlIF9fbiA9IHRoaXMtPnNpemUoKTsKICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9N
X2RhdGEoKVtfX25dLCBfUmVwOjpfU190ZXJtaW5hbCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEo
KTsKICAgICAgfQoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBkYXRhKCkgY29uc3QgeyByZXR1
cm4gX01fZGF0YSgpOyB9CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9y
KCkgY29uc3QgeyByZXR1cm4gX01fZGF0YXBsdXM7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBm
aW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNv
bnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0
ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChf
X3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAg
ICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f
cykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUg
X19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5yZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9Cgog
ICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQo
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPnJmaW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7
IH0KCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19w
b3MgPSBucG9zKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIu
c2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0No
YXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBz
aXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
IF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3Ms
IF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAg
ICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fYywgX19wb3MpOyB9CgogICAgICBzaXplX3R5cGUK
ICAgICAgZmluZF9sYXN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBf
X3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3N0
ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAg
ZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw
ZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZmluZF9sYXN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7
IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90
eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19jLCBf
X3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5z
aXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3Qg
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rf
b2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjps
ZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihf
Q2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQog
ICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlw
ZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rf
b2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBl
CiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv
cywKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKICAgICAgc2l6
ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw
ZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rf
b2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90
eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0g
bnBvcykgY29uc3Q7CgogICAgICBiYXNpY19zdHJpbmcKICAgICAgc3Vic3RyKHNpemVfdHlwZSBf
X3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKSBjb25zdAogICAgICB7CiAgICAgICAgaWYg
KF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh
c2ljX3N0cmluZzo6c3Vic3RyIik7CiAgICAgICAgcmV0dXJuIGJhc2ljX3N0cmluZygqdGhpcywg
X19wb3MsIF9fbik7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IGJhc2lj
X3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19zaXplID0g
dGhpcy0+c2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwog
ICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3NpemUsIF9fb3NpemUpOwoKICAgICAgICBp
bnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3N0ci5kYXRhKCksIF9f
bGVuKTsKICAgICAgICBpZiAoIV9fcikKICAgICAgICAgIF9fciA9IF9fc2l6ZSAtIF9fb3NpemU7
CiAgICAgICAgcmV0dXJuIF9fcjsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6
ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBj
b25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlw
ZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgIHNpemVfdHlw
ZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJl
KGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCgoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6
ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OwoK
ICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwg
Y29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0Owog
IH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIGJhc2ljX3N0cmluZygpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2VtcHR5X3JlcCgp
Ll9NX3JlZmNvcHkoKSwgX0FsbG9jKCkpIHsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0
ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBfQ2hh
clQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0
cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRz
LF9BbGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0
IF9DaGFyVCogX19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICBy
ZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywgX0NoYXJUIF9fcmhzKQogICAgewogICAgICB0eXBl
ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5
cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQo
X19zaXplX3R5cGUoMSksIF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5j
b21wYXJlKF9fcmhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
PT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21w
YXJlKF9fbGhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0o
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAg
ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJl
KF9fcmhzKSA9PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAg
ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3Jo
cykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAg
ICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykK
ICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAg
IHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpICE9IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l
IGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMp
IDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29u
c3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgX0NoYXJUKiBfX2xo
cywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID4gMDsgfQoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMu
Y29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
Pihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAg
ICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFy
ZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25z
dCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xo
cykgPCAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAg
ICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAg
IHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsg
cmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25z
dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICB7IHJldHVy
biBfX3Jocy5jb21wYXJlKF9fbGhzKSA+PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAg
ICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
IF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3Qg
X0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBfQ2hhclQqIF9fbGhz
LAogICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8PSAwOyB9CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fbGhzLAogICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX3JocykKICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JiBfX29zLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX3N0cik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1Ry
YWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywK
ICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIs
IF9DaGFyVCBfX2RlbGltKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
X1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19p
cywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19z
dHIpOwp9CgoKCgoKCgoKCgoKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1Rw
PgogICAgdm9pZAogICAgX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs
CiAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19ob2xlSW5kZXgsIF9EaXN0YW5jZSBfX3RvcElu
ZGV4LCBfVHAgX192YWx1ZSkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9s
ZUluZGV4IC0gMSkgLyAyOwogICAgICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYm
ICooX19maXJzdCArIF9fcGFyZW50KSA8IF9fdmFsdWUpIHsKICAgICAgICAqKF9fZmlyc3QgKyBf
X2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7CiAgICAgICAgX19ob2xlSW5kZXgg
PSBfX3BhcmVudDsKICAgICAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAg
ICAgfQogICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAog
ICAgcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVU
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz
SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAg
ICAKCiAgICAgCgogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBlKChfX2xh
c3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICBf
VmFsdWVUeXBlKCooX19sYXN0IC0gMSkpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcCwKICAg
ICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3B1c2hfaGVhcChfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAg
ICAgICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2Nv
bXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8g
MjsKICAgICAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiBfX2NvbXAoKihfX2Zp
cnN0ICsgX19wYXJlbnQpLCBfX3ZhbHVlKSkgewogICAgICAgICooX19maXJzdCArIF9faG9sZUlu
ZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fcGFy
ZW50OwogICAgICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB9CiAg
ICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBp
bmxpbmUgdm9pZAogICAgcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgIF9Db21wYXJlIF9fY29t
cCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlm
ZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgoKICAgICAgX19w
dXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwg
X0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZSgqKF9fbGFzdCAt
IDEpKSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9f
YWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hv
bGVJbmRleCwKICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSkK
ICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICAgICAgX0Rp
c3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogICAgICB3aGlsZSAo
X19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICAgICAgaWYgKCooX19maXJzdCArIF9fc2Vjb25k
Q2hpbGQpIDwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpCiAgICAgICAgICBfX3Nl
Y29uZENoaWxkLS07CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0
ICsgX19zZWNvbmRDaGlsZCk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwog
ICAgICAgIF9fc2Vjb25kQ2hpbGQgPSAyICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsKICAgICAgfQog
ICAgICBpZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAgICAgICooX19maXJzdCArIF9f
aG9sZUluZGV4KSA9ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpOwogICAgICAgIF9f
aG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgICAgIH0KICAgICAgX19wdXNoX2hlYXAo
X19maXJzdCwgX19ob2xlSW5kZXgsIF9fdG9wSW5kZXgsIF9fdmFsdWUpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KICAgIGlu
bGluZSB2b2lkCiAgICBfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5
cGUgX0Rpc3RhbmNlOwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgX19hZGp1c3Rf
aGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwg
X192YWx1ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRv
cj4KICAgIGlubGluZSB2b2lkCiAgICBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19m
aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlw
ZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBf
X2xhc3QgLSAxLCBfX2xhc3QgLSAxLCBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkpKTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlz
dGFuY2UsCiAgICAgICAgICAgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZv
aWQKICAgIF9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0
YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAg
X192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX190b3BJbmRl
eCA9IF9faG9sZUluZGV4OwogICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hv
bGVJbmRleCArIDI7CiAgICAgIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgICAg
ICBpZiAoX19jb21wKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpLCAqKF9fZmlyc3QgKyAoX19z
ZWNvbmRDaGlsZCAtIDEpKSkpCiAgICAgICAgICBfX3NlY29uZENoaWxkLS07CiAgICAgICAgKihf
X2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCk7CiAgICAg
ICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgICAgIF9fc2Vjb25kQ2hpbGQgPSAy
ICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsKICAgICAgfQogICAgICBpZiAoX19zZWNvbmRDaGlsZCA9
PSBfX2xlbikgewogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCAr
IChfX3NlY29uZENoaWxkIC0gMSkpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGls
ZCAtIDE7CiAgICAgIH0KICAgICAgX19wdXNoX2hlYXAoX19maXJzdCwgX19ob2xlSW5kZXgsIF9f
dG9wSW5kZXgsIF9fdmFsdWUsIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg
IGlubGluZSB2b2lkCiAgICBfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy
YXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0OwogICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNl
KF9fbGFzdCAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9fdmFsdWUsIF9fY29tcCk7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5h
bWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0
LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVl
VHlwZTsKICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCBf
VmFsdWVUeXBlKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICB2b2lkCiAgICBtYWtlX2hlYXAoX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAg
ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ
dGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVu
Y2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlm
IChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVu
ID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX3BhcmVudCA9IChfX2xl
biAtIDIpLzI7CgogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIF9fYWRqdXN0X2hlYXAoX19m
aXJzdCwgX19wYXJlbnQsIF9fbGVuLCBfVmFsdWVUeXBlKCooX19maXJzdCArIF9fcGFyZW50KSkp
OwogICAgICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiAgICAgICAgX19wYXJlbnQtLTsK
ICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3Is
IHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIG1ha2VfaGVhcChfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAg
ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAg
ICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNl
VHlwZTsKCgogICAgIAoKCiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwog
ICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX0Rpc3Rh
bmNlVHlwZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpLzI7CgogICAgICB3aGlsZSAodHJ1ZSkgewog
ICAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX19wYXJlbnQsIF9fbGVuLAogICAgICAgICAg
ICAgICAgICAgICAgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpLCBfX2NvbXApOwog
ICAgICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiAgICAgICAgX19wYXJlbnQtLTsKICAg
ICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAg
ICB2b2lkCiAgICBzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CgogICAgIAoKICAgICAKCgogICAgICB3aGls
ZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAgICAgICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0
LS0pOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5
cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
IF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9f
Zmlyc3QgPiAxKQogICAgICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tLCBfX2NvbXApOwog
ICAgfQoKfQoKCgpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJh
dG9yLCBjbGFzcyBfVHA+CiAgY2xhc3MgX1RlbXBvcmFyeV9idWZmZXIKewoKIAoKICBwdHJkaWZm
X3QgX01fb3JpZ2luYWxfbGVuOwogIHB0cmRpZmZfdCBfTV9sZW47CiAgX1RwKiBfTV9idWZmZXI7
CgoKICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZlcigpIHsKICAgIF9NX29yaWdpbmFsX2xlbiA9IF9N
X2xlbjsKICAgIF9NX2J1ZmZlciA9IDA7CgogICAgaWYgKF9NX2xlbiA+IChwdHJkaWZmX3QpKDIx
NDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICAgIF9NX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXpl
b2YoX1RwKTsKCiAgICB3aGlsZSAoX01fbGVuID4gMCkgewogICAgICBfTV9idWZmZXIgPSAoX1Rw
KikgbWFsbG9jKF9NX2xlbiAqIHNpemVvZihfVHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikKICAg
ICAgICBicmVhazsKICAgICAgX01fbGVuIC89IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luaXRp
YWxpemVfYnVmZmVyKGNvbnN0IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5pdGlh
bGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2YWwsIF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0aWFs
aXplZF9maWxsX24oX01fYnVmZmVyLCBfTV9sZW4sIHZhbCk7CiAgfQoKcHVibGljOgoKICBwdHJk
aWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xlbjsgfQoKICBwdHJkaWZmX3QgcmVxdWVz
dGVkX3NpemUoKSBjb25zdCB7IHJldHVybiBfTV9vcmlnaW5hbF9sZW47IH0KCiAgX1RwKiBiZWdp
bigpIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQoKICBfVHAqIGVuZCgpIHsgcmV0dXJuIF9NX2J1ZmZl
ciArIF9NX2xlbjsgfQoKICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmly
c3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5
cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3IKICAgICAgICAg
ICAgX1RyaXZpYWw7CgogICAgdHJ5IHsKICAgICAgX01fbGVuID0gZGlzdGFuY2UoX19maXJzdCwg
X19sYXN0KTsKICAgICAgX01fYWxsb2NhdGVfYnVmZmVyKCk7CiAgICAgIGlmIChfTV9sZW4gPiAw
KQogICAgICAgIF9NX2luaXRpYWxpemVfYnVmZmVyKCpfX2ZpcnN0LCBfVHJpdmlhbCgpKTsKICAg
IH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIGZyZWUoX01fYnVmZmVyKTsKICAgICAg
ICBfTV9idWZmZXIgPSAwOwogICAgICAgIF9NX2xlbiA9IDA7CiAgICAgICAgdGhyb3c7CiAgICAg
IH0KICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsKICAgIF9EZXN0cm95KF9NX2J1ZmZlciwg
X01fYnVmZmVyICsgX01fbGVuKTsKICAgIGZyZWUoX01fYnVmZmVyKTsKICB9Cgpwcml2YXRlOgoK
ICBfVGVtcG9yYXJ5X2J1ZmZlcihjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9CiAgdm9pZCBv
cGVyYXRvcj0oY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQp9OwoKfQoKCgoKbmFtZXNwYWNl
IHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgY29uc3QgX1RwJgogICAg
X19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYykK
ICAgIHsKCiAgICAgCiAgICAgIGlmIChfX2EgPCBfX2IpCiAgICAgICAgaWYgKF9fYiA8IF9fYykK
ICAgICAgICAgIHJldHVybiBfX2I7CiAgICAgICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgICAg
ICAgcmV0dXJuIF9fYzsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19hOwogICAgICBl
bHNlIGlmIChfX2EgPCBfX2MpCiAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19i
IDwgX19jKQogICAgICAgIHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gX19i
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAg
aW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAm
IF9fYiwgY29uc3QgX1RwJiBfX2MsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAg
IGlmIChfX2NvbXAoX19hLCBfX2IpKQogICAgICAgIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAg
ICAgICAgcmV0dXJuIF9fYjsKICAgICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAg
ICAgICAgcmV0dXJuIF9fYzsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19hOwogICAg
ICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVs
c2UgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgZWxzZQog
ICAgICAgIHJldHVybiBfX2I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIs
IHR5cGVuYW1lIF9GdW5jdGlvbj4KICAgIF9GdW5jdGlvbgogICAgZm9yX2VhY2goX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikKICAgIHsKCiAgICAg
CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBfX2Yo
Kl9fZmlyc3QpOwogICAgICByZXR1cm4gX19mOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBm
aW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0
IF9UcCYgX192YWwsCiAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hp
bGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICEoKl9fZmlyc3QgPT0gX192YWwpKQogICAgICAgICsr
X19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfSW5wdXRJ
dGVyCiAgICBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAg
ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90
YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhX19wcmVkKCpfX2Zp
cnN0KSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAg
ICBfUmFuZG9tQWNjZXNzSXRlcgogICAgZmluZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAg
ICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2Nv
dW50CiAgICAgICAgPSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgICAgIGZvciAoIDsgX190
cmlwX2NvdW50ID4gMCA7IC0tX190cmlwX2NvdW50KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09
IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgq
X19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAg
ICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19m
aXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAg
ICAgICArK19fZmlyc3Q7CiAgICAgIH0KCiAgICAgIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7
CiAgICAgIGNhc2UgMzoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2Zp
cnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAyOgogICAgICAgIGlmICgqX19maXJz
dCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNl
IDE6CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAg
ICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMDoKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4g
X19sYXN0OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAg
ZmluZF9pZihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsCiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0g
KF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CgogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAg
OyAtLV9fdHJpcF9jb3VudCkgewogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4g
X19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3Qp
KSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQo
Kl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlm
IChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAg
ICAgIH0KCiAgICAgIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgICAgIGNhc2UgMzoKICAg
ICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2Zp
cnN0OwogICAgICBjYXNlIDI6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBf
X2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAxOgogICAgICAgIGlmIChfX3By
ZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNh
c2UgMDoKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGlu
ZSBfSW5wdXRJdGVyCiAgICBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgogICAgIAogICAgIAoKICAgICAg
cmV0dXJuIGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19pdGVyYXRvcl9jYXRlZ29yeShf
X2ZpcnN0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZF9pZihfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJl
ZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICByZXR1cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xh
c3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgYWRqYWNlbnRf
ZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAg
ICAgCiAgICAgCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9f
bGFzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlKCsr
X19uZXh0ICE9IF9fbGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICAg
ICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgfQog
ICAgICByZXR1cm4gX19sYXN0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0
ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFj
ZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAg
CiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2xh
c3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19f
bmV4dCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9f
bmV4dCkpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBfX2ZpcnN0ID0gX19uZXh0
OwogICAgICB9CiAgICAgIHJldHVybiBfX2xhc3Q7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBjb3VudChfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAogICAg
IAoKICAgICAKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZm
ZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0KQogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbHVlKQogICAgICAgICAgKytfX247
CiAgICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIs
IHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0
SXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgY291bnRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoK
ICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5
cGUgX19uID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog
ICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICAgKytfX247CiAgICAgIHJldHVy
biBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1l
IF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBzZWFyY2goX0ZvcndhcmRJdGVy
MSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9Gb3J3YXJkSXRl
cjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAg
ICAgCgoKCgogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xh
c3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fdG1w
KF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsKICAgICAgaWYgKF9fdG1wID09IF9fbGFzdDIpCiAg
ICAgICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CgoKCiAgICAg
IF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoKICAgICAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7
CgogICAgICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICAgICAgd2hpbGUg
KF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgICBfX2ZpcnN0MSA9IGZpbmQoX19maXJzdDEs
IF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAg
ICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0gX19wMTsKICAgICAgICBfX2N1
cnJlbnQgPSBfX2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAg
ICAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgICAgICB3aGlsZSAoKl9fY3VycmVudCA9PSAqX19w
KSB7CiAgICAgICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIF9f
Zmlyc3QxOwogICAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICAg
IHJldHVybiBfX2xhc3QxOwogICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQog
ICAgICByZXR1cm4gX19maXJzdDE7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk
SXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkPgogICAg
X0ZvcndhcmRJdGVyMQogICAgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJk
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2Fy
ZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgX0JpbmFyeVByZWQgX19wcmVkaWNhdGUpCiAgICB7
CgogICAgIAogICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwg
X19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0Zv
cndhcmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAgIGlmIChfX3Rt
cCA9PSBfX2xhc3QyKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9f
cHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAg
ICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICB9CgoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19w
MSwgX19wOwoKICAgICAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogICAgICBfRm9yd2FyZEl0
ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEpIHsKICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgICAgaWYg
KF9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0g
X19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAg
KytfX2ZpcnN0MTsKICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgIHJl
dHVybiBfX2xhc3QxOwoKICAgICAgICBfX3AgPSBfX3AxOwogICAgICAgIF9fY3VycmVudCA9IF9f
Zmlyc3QxOwogICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4gX19sYXN0
MTsKCiAgICAgICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7CiAgICAg
ICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwog
ICAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBf
X2xhc3QxOwogICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgICByZXR1
cm4gX19maXJzdDE7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw
ZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgc2VhcmNo
X24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKICAgICAKICAgICAK
CiAgICAgCgogICAgICBpZiAoX19jb3VudCA8PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0Owog
ICAgICBlbHNlIHsKICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFs
KTsKICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIF9JbnRlZ2Vy
IF9fbiA9IF9fY291bnQgLSAxOwogICAgICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7
CiAgICAgICAgICArK19faTsKICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAh
PSAwICYmICpfX2kgPT0gX192YWwpIHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIC0t
X19uOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICByZXR1
cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19maXJzdCA9IGZpbmQoX19p
LCBfX2xhc3QsIF9fdmFsKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAg
fQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9JbnRl
Z2VyLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWQ+CiAgICBf
Rm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3Zh
bCwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAog
ICAgIAoKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAg
ICAgIGVsc2UgewogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAg
aWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkKICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9f
bGFzdCkgewogICAgICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAgICAgICBf
Rm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgICAgICsrX19pOwogICAgICAgICAgd2hp
bGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19iaW5hcnlfcHJlZCgqX19pLCBfX3Zh
bCkpIHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIC0tX19uOwogICAgICAgICAgfQog
ICAgICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCkgewogICAgICAgICAg
ICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkKICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9fZmlyc3Qg
PSBfX2k7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAg
IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0Zv
cndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjIKICAgIHN3YXBfcmFuZ2VzKF9Gb3J3YXJkSXRl
cjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlcjIgX19maXJzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKCiAg
ICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikK
ICAgICAgICBpdGVyX3N3YXAoX19maXJzdDEsIF9fZmlyc3QyKTsKICAgICAgcmV0dXJuIF9fZmly
c3QyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0
cHV0SXRlciwgdHlwZW5hbWUgX1VuYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0ZXIKICAgIHRy
YW5zZm9ybShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX191bmFyeV9vcCkKICAg
IHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m
aXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX3VuYXJ5X29wKCpfX2ZpcnN0
KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
dXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAg
ICAgICAgIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24+CiAgICBfT3V0cHV0SXRlcgogICAgdHJh
bnNmb3JtKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAg
ICAgICAgICBfQmluYXJ5T3BlcmF0aW9uIF9fYmluYXJ5X29wKQogICAgewoKICAgICAKICAgICAK
ICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCAr
K19fZmlyc3QyLCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9IF9fYmluYXJ5X29wKCpf
X2ZpcnN0MSwgKl9fZmlyc3QyKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIHJl
cGxhY2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7
CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyAr
K19fZmlyc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVlKQogICAgICAgICAg
Kl9fZmlyc3QgPSBfX25ld192YWx1ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBy
ZXBsYWNlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAg
IHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19maXJzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAgICpfX2Zp
cnN0ID0gX19uZXdfdmFsdWU7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIs
IHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAg
cmVwbGFjZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgY29uc3Qg
X1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAg
ICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwg
KytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdCA9PSBfX29sZF92YWx1ZSA/
IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVu
YW1lIF9QcmVkaWNhdGUsCiAgICAgICAgICAgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIK
ICAgIHJlcGxhY2VfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg
ICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoK
ICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9IF9fcHJlZCgqX19maXJzdCkg
PyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0dlbmVyYXRvcj4KICAg
IHZvaWQKICAgIGdlbmVyYXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LCBfR2VuZXJhdG9yIF9fZ2VuKQogICAgewoKICAgICAKICAgICAKCgogICAgICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX2dlbigp
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUs
IHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAgICBfT3V0cHV0SXRlcgogICAgZ2VuZXJhdGVfbihfT3V0
cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pCiAgICB7CgogICAg
IAoKCgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgICAgKl9f
Zmlyc3QgPSBfX2dlbigpOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4K
ICAgIF9PdXRwdXRJdGVyCiAgICByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0
IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoISgqX19maXJzdCA9PSBf
X3ZhbHVlKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgICArK19f
cmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1By
ZWRpY2F0ZT4KICAgIF9PdXRwdXRJdGVyCiAgICByZW1vdmVfY29weV9pZihfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQsIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoK
ICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgh
X19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAg
ICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3
YXJkSXRlcgogICAgcmVtb3ZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LAogICAgICAgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgog
ICAgIAoKCiAgICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZSk7CiAg
ICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdCA9PSBf
X2xhc3QgPyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9j
b3B5KCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fdmFsdWUpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0
ZXIKICAgIHJlbW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoK
ICAgICAgX19maXJzdCA9IGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOwogICAgICBf
Rm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0
ID8gX19maXJzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weV9p
ZigrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ByZWQpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJ
dGVyCiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg
ICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAg
Kl9fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAg
ICAgICAgaWYgKCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsKICAgICAgICAgIF9fdmFsdWUgPSAq
X19maXJzdDsKICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgICB9CiAgICAg
IHJldHVybiArK19fcmVzdWx0OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
dXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5p
cXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBmb3J3YXJk
X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICB3
aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoISgqX19yZXN1bHQgPT0gKl9f
Zmlyc3QpKQogICAgICAgICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuICsr
X19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICB1bmlxdWVfY29weShfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5
IF9JdGVyVHlwZTsKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0
OwogICAgICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBf
SXRlclR5cGUoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu
YW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX091dHB1dEl0
ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAg
ICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgb3V0
cHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAg
ICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQog
ICAgICAgIGlmICghX19iaW5hcnlfcHJlZChfX3ZhbHVlLCAqX19maXJzdCkpIHsKICAgICAgICAg
IF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAg
ICAgICB9CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVk
aWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQs
CiAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgoK
ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19s
YXN0KQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgKisr
X19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFt
ZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICB1bmlxdWVfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9f
YmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBl
OwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAgIHJl
dHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwKX19yZXN1bHQsIF9fYmluYXJ5X3By
ZWQsIF9JdGVyVHlwZSgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy
PgogICAgX0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgICAgICAKICAgICAgICAgCgoKICAgICAgICAgIF9f
Zmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4g
dW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0KTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0Zv
cndhcmRJdGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoK
ICAgICAKICAgICAKCgoKICAgICAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19s
YXN0LCBfX2JpbmFyeV9wcmVkKTsKICAgICAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9f
bGFzdCwgX19maXJzdCwgX19iaW5hcnlfcHJlZCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQKICAgIF9fcmV2ZXJzZShfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAg
ICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QgfHwgX19m
aXJzdCA9PSAtLV9fbGFzdCkKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIF9fbGFzdCk7CiAgICB9
CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAog
ICAgX19yZXZlcnNlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9y
X3RhZykKICAgIHsKICAgICAgICAgIHdoaWxlIChfX2ZpcnN0IDwgX19sYXN0KQogICAgICAgICAg
ICBpdGVyX3N3YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICByZXZlcnNlKF9CaWRp
cmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewoK
ICAgICAgICAgCgogICAgICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRv
cl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVj
dGlvbmFsSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgcmV2
ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
KQogICAgewoKICAgICAKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsK
ICAgICAgICAtLV9fbGFzdDsKICAgICAgICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAgICAgICsr
X19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRXVjbGlkZWFuUmluZ0VsZW1lbnQ+CiAgICBfRXVjbGlkZWFuUmluZ0VsZW1l
bnQKICAgIF9fZ2NkKF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX20sIF9FdWNsaWRlYW5SaW5nRWxl
bWVudCBfX24pCiAgICB7CiAgICAgIHdoaWxlIChfX24gIT0gMCkgewogICAgICAgIF9FdWNsaWRl
YW5SaW5nRWxlbWVudCBfX3QgPSBfX20gJSBfX247CiAgICAgICAgX19tID0gX19uOwogICAgICAg
IF9fbiA9IF9fdDsKICAgICAgfQogICAgICByZXR1cm4gX19tOwogICAgfQoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y
X3RhZykKICAgIHsKICAgICAgaWYgKChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09
IF9fbWlkZGxlKSkKICAgICAgICByZXR1cm47CgogICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIg
PSBfX21pZGRsZTsKICAgICAgZG8gewogICAgICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3Qy
KyspOwogICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICAgICAgX19taWRkbGUg
PSBfX2ZpcnN0MjsKICAgICAgfSB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KTsKCiAgICAgIF9f
Zmlyc3QyID0gX19taWRkbGU7CgogICAgICB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KSB7CiAg
ICAgICAgc3dhcCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICAgICAgaWYgKF9fZmlyc3Qg
PT0gX19taWRkbGUpCiAgICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAgICAgIGVsc2Ug
aWYgKF9fZmlyc3QyID09IF9fbGFzdCkKICAgICAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CiAg
ICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+
CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
YWcpCiAgICB7CgogICAgIAoKCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9f
bGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX19yZXZlcnNlKF9fZmly
c3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAgX19yZXZl
cnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwoKICAg
ICAgd2hpbGUgKF9fZmlyc3QgIT0gX19taWRkbGUgJiYgX19taWRkbGUgIT0gX19sYXN0KQogICAg
ICAgIHN3YXAgKCpfX2ZpcnN0KyssICotLV9fbGFzdCk7CgogICAgICBpZiAoX19maXJzdCA9PSBf
X21pZGRsZSkgewogICAgICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlv
bmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX3JldmVy
c2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAg
ICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAg
ICB2b2lkCiAgICBfX3JvdGF0ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAg
IHsKCiAgICAgCgoKICAgICAgaWYgKChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09
IF9fbWlkZGxlKSkKICAgICAgICByZXR1cm47CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy
Pjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAt
IF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZSBfX2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7CiAgICAg
IF9EaXN0YW5jZSBfX2wgPSBfX24gLSBfX2s7CgogICAgICBpZiAoX19rID09IF9fbCkgewogICAg
ICAgIHN3YXBfcmFuZ2VzKF9fZmlyc3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7CiAgICAgICAgcmV0
dXJuOwogICAgICB9CgogICAgICBfRGlzdGFuY2UgX19kID0gX19nY2QoX19uLCBfX2spOwoKICAg
ICAgZm9yIChfRGlzdGFuY2UgX19pID0gMDsgX19pIDwgX19kOyBfX2krKykgewogICAgICAgIF9W
YWx1ZVR5cGUgX190bXAgPSAqX19maXJzdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Ag
PSBfX2ZpcnN0OwoKICAgICAgICBpZiAoX19rIDwgX19sKSB7CiAgICAgICAgICBmb3IgKF9EaXN0
YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wvX19kOyBfX2orKykgewogICAgICAgICAgICBpZiAoX19w
ID4gX19maXJzdCArIF9fbCkgewogICAgICAgICAgICAgICpfX3AgPSAqKF9fcCAtIF9fbCk7CiAg
ICAgICAgICAgICAgX19wIC09IF9fbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgKl9fcCA9
ICooX19wICsgX19rKTsKICAgICAgICAgICAgX19wICs9IF9fazsKICAgICAgICAgIH0KICAgICAg
ICB9CgogICAgICAgIGVsc2UgewogICAgICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19q
IDwgX19rL19fZCAtIDE7IF9faiArKykgewogICAgICAgICAgICBpZiAoX19wIDwgX19sYXN0IC0g
X19rKSB7CiAgICAgICAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICAgICAgICBf
X3AgKz0gX19rOwogICAgICAgICAgICB9CgogICAgICAgICAgICAqX19wID0gKiAoX19wIC0gX19s
KTsKICAgICAgICAgICAgX19wIC09IF9fbDsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAg
ICpfX3AgPSBfX3RtcDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJvdGF0ZShfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfRm9yd2FyZEl0ZXIgX19s
YXN0KQogICAgewoKICAgICAKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9Gb3J3YXJkSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsKICAgICAgX19yb3Rh
dGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0l0ZXJUeXBlKCkpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091
dHB1dEl0ZXIKICAgIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfT3V0cHV0
SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgcmV0dXJuIGNvcHkoX19m
aXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19yZXN1bHQpKTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIF9EaXN0YW5jZQogICAg
X19yYW5kb21fbnVtYmVyKF9EaXN0YW5jZSBfX24pCiAgICB7CgogICAgICByZXR1cm4gbHJhbmQ0
OCgpICUgX19uOwoKCgogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl
cj4KICAgIGlubGluZSB2b2lkCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAoKCiAgICAgIGlm
IChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVy
IF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVyX3N3
YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kb21fbnVtYmVyKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9S
YW5kb21OdW1iZXJHZW5lcmF0b3I+CiAgICB2b2lkCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpCiAgICB7CgogICAgIAoKCiAg
ICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nl
c3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBp
dGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAg
IH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJl
ZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19w
cmVkLAogICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlm
IChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogICAgICB3aGlsZSAoX19wcmVk
KCpfX2ZpcnN0KSkKICAgICAgICBpZiAoKytfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmly
c3Q7CgogICAgICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKCiAgICAgIHdoaWxlICgr
K19fbmV4dCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fcHJlZCgqX19uZXh0KSkgewogICAgICAg
ICAgc3dhcCgqX19maXJzdCwgKl9fbmV4dCk7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAg
fQoKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0JpZGlyZWN0aW9u
YWxJdGVyCiAgICBfX3BhcnRpdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAog
ICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdo
aWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgICBpZiAoX19maXJzdCA9
PSBfX2xhc3QpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZSBpZiAo
X19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgZWxzZQog
ICAgICAgICAgICBicmVhazsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAodHJ1ZSkK
ICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICAgICAgcmV0dXJuIF9fZmly
c3Q7CiAgICAgICAgICBlbHNlIGlmICghX19wcmVkKCpfX2xhc3QpKQogICAgICAgICAgICAtLV9f
bGFzdDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgaXRlcl9zd2Fw
KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlu
bGluZSBfRm9yd2FyZEl0ZXIKICAgIHBhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsK
CiAgICAgCiAgICAgCgoKICAgICAgcmV0dXJuIF9fcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwg
X19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KCgoKCgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFt
ZSBfRGlzdGFuY2U+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9faW5wbGFjZV9zdGFibGVfcGFydGl0
aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbikK
ICAgIHsKICAgICAgaWYgKF9fbGVuID09IDEpCiAgICAgICAgcmV0dXJuIF9fcHJlZCgqX19maXJz
dCkgPyBfX2xhc3QgOiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2Zp
cnN0OwogICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogICAgICBfRm9yd2FyZEl0
ZXIgX19iZWdpbiA9IF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbWlkZGxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2xlbiAvIDIpOwogICAgICBfRm9yd2FyZEl0ZXIgX19lbmQgPSBfX2lucGxhY2Vf
c3RhYmxlX3BhcnRpdGlvbihfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyKTsK
ICAgICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7CiAgICAgIGFkdmFuY2UoX19i
ZWdpbiwgZGlzdGFuY2UoX19taWRkbGUsIF9fZW5kKSk7CiAgICAgIHJldHVybiBfX2JlZ2luOwog
ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1Bv
aW50ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNl
PgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgaWYg
KF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQx
ID0gX19maXJzdDsKICAgICAgICBfUG9pbnRlciBfX3Jlc3VsdDIgPSBfX2J1ZmZlcjsKICAgICAg
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0IDsgKytfX2ZpcnN0KQogICAgICAgICAgaWYgKF9f
cHJlZCgqX19maXJzdCkpIHsKICAgICAgICAgICAgKl9fcmVzdWx0MSA9ICpfX2ZpcnN0OwogICAg
ICAgICAgICArK19fcmVzdWx0MTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7CiAgICAgICAgICAgICsrX19yZXN1bHQyOwogICAg
ICAgICAgfQogICAgICAgIGNvcHkoX19idWZmZXIsIF9fcmVzdWx0MiwgX19yZXN1bHQxKTsKICAg
ICAgICByZXR1cm4gX19yZXN1bHQxOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3
YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19s
ZW4gLyAyKTsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19iZWdpbiA9IF9fc3RhYmxlX3BhcnRpdGlv
bl9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
YnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19lbmQgPSBfX3N0
YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xl
biAtIF9fbGVuIC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICByb3RhdGUo
X19iZWdpbiwgX19taWRkbGUsIF9fZW5kKTsKICAgICAgICBhZHZhbmNlKF9fYmVnaW4sIGRpc3Rh
bmNlKF9fbWlkZGxlLCBfX2VuZCkpOwogICAgICAgIHJldHVybiBfX2JlZ2luOwogICAgICB9CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0
ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0
ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZQogICAgICB7CiAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBf
VmFsdWVUeXBlOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3
YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKICAgICAgICBfVGVtcG9y
YXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFz
dCk7CiAgICAgICAgaWYgKF9fYnVmLnNpemUoKSA+IDApCiAgICAgICAgICByZXR1cm4gX19zdGFi
bGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fYnVmLnJl
cXVlc3RlZF9zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2J1Zi5iZWdpbigpLCBfX2J1Zi5zaXplKCkpOwogICAgICAgIGVsc2UKICAgICAgICAg
IHJldHVybiBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJl
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VU
eXBlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfUmFuZG9t
QWNjZXNzSXRlcgogICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfVHAgX19waXZvdCkKICAgIHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICB3aGlsZSAo
Kl9fZmlyc3QgPCBfX3Bpdm90KQogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIC0tX19sYXN0
OwogICAgICAgIHdoaWxlIChfX3Bpdm90IDwgKl9fbGFzdCkKICAgICAgICAgIC0tX19sYXN0Owog
ICAgICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7
CiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0Owog
ICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs
IHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgog
ICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZv
dCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIHdo
aWxlIChfX2NvbXAoKl9fZmlyc3QsIF9fcGl2b3QpKQogICAgICAgICAgKytfX2ZpcnN0OwogICAg
ICAgIC0tX19sYXN0OwogICAgICAgIHdoaWxlIChfX2NvbXAoX19waXZvdCwgKl9fbGFzdCkpCiAg
ICAgICAgICAtLV9fbGFzdDsKICAgICAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAg
ICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwog
ICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgfQoKICBlbnVtIHsgX01fdGhyZXNob2xkID0g
MTYgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h
bWUgX1RwPgogICAgdm9pZAogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkKICAgIHsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAgd2hpbGUgKF9fdmFsIDwgKl9f
bmV4dCkgewogICAgICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAgICAgIF9fbGFzdCA9IF9fbmV4
dDsKICAgICAgICAtLV9fbmV4dDsKICAgICAgfQogICAgICAqX19sYXN0ID0gX192YWw7CiAgICB9
CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5z
ZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAgICAgLS1f
X25leHQ7CiAgICAgIHdoaWxlIChfX2NvbXAoX192YWwsICpfX25leHQpKSB7CiAgICAgICAgKl9f
bGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0OwogICAgICAgIC0tX19uZXh0
OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9faW5zZXJ0aW9uX3NvcnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAg
ewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKCiAgICAgIGZvciAoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAg
ICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6
dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAgICAgaWYgKF9fdmFsIDwgKl9fZmlyc3QpIHsK
ICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgICAgICAg
ICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fdW5n
dWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAg
ICB2b2lkCiAgICBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19j
b21wKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKCiAgICAgIGZv
ciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsr
X19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl
c3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAgICAgaWYgKF9fY29tcChfX3Zh
bCwgKl9fZmlyc3QpKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9faSwgX19p
ICsgMSk7CiAgICAgICAgICAqX19maXJzdCA9IF9fdmFsOwogICAgICAgIH0KICAgICAgICBlbHNl
CiAgICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX192YWwsIF9fY29tcCk7
CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl
cj4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFs
dWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBf
X2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJf
aW5zZXJ0KF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZv
aWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAg
ICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsr
X19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVUeXBlKCpf
X2kpLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChf
X2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgX19pbnNlcnRpb25fc29y
dChfX2ZpcnN0LCBfX2ZpcnN0ICsgX01fdGhyZXNob2xkKTsKICAgICAgICBfX3VuZ3VhcmRlZF9p
bnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBfX2xhc3QpOwogICAgICB9CiAg
ICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9
CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmly
c3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f
Zmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fY29tcCk7CiAgICAgICAgX191bmd1YXJkZWRfaW5zZXJ0
aW9uX3NvcnQoX19maXJzdCArIF9NX3RocmVzaG9sZCwgX19sYXN0LCBfX2NvbXApOwogICAgICB9
CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19j
b21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBf
U2l6ZQogICAgX19sZyhfU2l6ZSBfX24pCiAgICB7CiAgICAgIF9TaXplIF9fazsKICAgICAgZm9y
IChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsKICAgICAgcmV0dXJuIF9fazsK
ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h
bWUgX1NpemU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
X1NpemUgX19kZXB0aF9saW1pdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAg
ICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlmIChf
X2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xh
c3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIC0tX19kZXB0
aF9saW1pdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3Vu
Z3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0g
X19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQs
IF9fbGFzdCwgX19kZXB0aF9saW1pdCk7CiAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAgICAgIH0K
ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h
bWUgX1NpemUsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19pbnRyb3NvcnRfbG9v
cChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQsIF9Db21wYXJlIF9fY29tcCkK
ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz
c0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19m
aXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsK
ICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCwgX19jb21wKTsK
ICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1fX2RlcHRoX2xpbWl0OwogICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRp
dGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Zh
bHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19s
YXN0IC0gMSksIF9fY29tcCkpLAogICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19pbnRyb3Nv
cnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xpbWl0LCBfX2NvbXApOwogICAgICAgIF9f
bGFzdCA9IF9fY3V0OwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVl
VHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAg
ICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2xnKF9fbGFzdCAtIF9fZmly
c3QpICogMik7CiAgICAgICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3Qp
OwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0
eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBzb3J0KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQog
ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz
SXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChf
X2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19s
YXN0LCBfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMiwgX19jb21wKTsKICAgICAgICBfX2ZpbmFs
X2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgfQogICAgfQoK
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAg
IF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUp
IHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgcmV0
dXJuOwogICAgICB9CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCAr
IChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2Zp
cnN0LCBfX21pZGRsZSk7CiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19s
YXN0KTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSk7CiAgICB9CgoKCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJl
PgogICAgdm9pZAogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUp
IHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAg
ICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBf
X2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9z
b3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3Nv
cnQoX19taWRkbGUsIF9fbGFzdCwgX19jb21wKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZl
cihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xhc3Qg
LSBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcjEsIHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBf
X21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBf
X3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplKQogICAgewogICAgICBfRGlzdGFuY2UgX190
d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0
ID49IF9fdHdvX3N0ZXApIHsKICAgICAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmly
c3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0
ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBf
X3Jlc3VsdCk7CiAgICAgICAgX19maXJzdCArPSBfX3R3b19zdGVwOwogICAgICB9CgogICAgICBf
X3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXpl
KTsKICAgICAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsg
X19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAgICAgICAgX19yZXN1bHQpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ
dGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgog
ICAgdm9pZAogICAgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAg
ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdHdvX3N0
ZXAgPSAyICogX19zdGVwX3NpemU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBf
X3R3b19zdGVwKSB7CiAgICAgICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsg
X19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3Np
emUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAgIF9fZmlyc3QgKz0g
X190d29fc3RlcDsKICAgICAgfQogICAgICBfX3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2UoX19s
YXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKCiAgICAgIG1lcmdlKF9fZmlyc3QsIF9fZmly
c3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xh
c3QsCiAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICBfX2NvbXApOwogICAgfQoKICBl
bnVtIHsgX01fY2h1bmtfc2l6ZSA9IDcgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fY2h1bmtfaW5zZXJ0
aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplKQog
ICAgewogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAg
ICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOwog
ICAgICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9u
X3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv
bUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2
b2lkCiAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlIF9fY2h1bmtfc2l6ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB3aGlsZSAo
X19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAgICAgICBfX2luc2VydGlvbl9z
b3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19m
aXJzdCArPSBfX2NodW5rX3NpemU7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2Zp
cnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlcj4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF93
aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIpCiAg
ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ
dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKCiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9
IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZl
ciArIF9fbGVuOwoKICAgICAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX01fY2h1bmtfc2l6ZTsK
ICAgICAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXpl
KTsKCiAgICAgIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICAgICAgX19tZXJnZV9z
b3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUpOwogICAgICAg
IF9fc3RlcF9zaXplICo9IDI7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9f
YnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAq
PSAyOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy
LCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21l
cmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9f
YnVmZmVyLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5j
ZTsKCiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9Qb2lu
dGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICAgICAgX0Rpc3RhbmNlIF9f
c3RlcF9zaXplID0gX01fY2h1bmtfc2l6ZTsKICAgICAgX19jaHVua19pbnNlcnRpb25fc29ydChf
X2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwoKICAgICAgd2hpbGUgKF9fc3Rl
cF9zaXplIDwgX19sZW4pIHsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xh
c3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAq
PSAyOwogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBf
X2ZpcnN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwog
ICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl
bmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19zdGFibGVf
c29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBf
RGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9f
bGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxl
ID0gX19maXJzdCArIF9fbGVuOwogICAgICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAg
ICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIs
IF9fYnVmZmVyX3NpemUpOwogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUs
IF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICB9CiAgICAgIGVsc2Ugewog
ICAgICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZm
ZXIpOwogICAgICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBf
X2J1ZmZlcik7CiAgICAgIH0KICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRs
ZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAg
ICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJf
c2l6ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl
bmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLAogICAgICAgICAgIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgdm9pZAogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlz
dGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9f
YnVmZmVyX3NpemUpIHsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29tcCk7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwg
X19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29tcCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19tZXJnZV9zb3J0
X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19jb21wKTsKICAgICAg
ICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9f
Y29tcCk7CiAgICAgIH0KICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwg
X19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBzdGFibGVfc29ydChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy
Pjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBl
OwoKCiAgICAgCgogICAgIAoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0
ZXIsIF9WYWx1ZVR5cGU+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoYnVmLmJlZ2lu
KCkgPT0gMCkKICAgICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsK
ICAgICAgZWxzZQogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0
LCBidWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgpKSk7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlu
bGluZSB2b2lkCiAgICBzdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBl
IF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAg
ICAgCgoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9WYWx1ZVR5
cGU+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAg
ICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAg
ICBlbHNlCiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1
Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKGJ1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj
Y2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBf
VmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlk
ZGxlKTsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19pIDwg
X19sYXN0OyArK19faSkKICAgICAgICBpZiAoKl9faSA8ICpfX2ZpcnN0KQogICAgICAgICAgX19w
b3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVmFsdWVUeXBlKCpfX2kpKTsKICAgICAg
c29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgcGFydGlh
bF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90
eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgbWFrZV9oZWFwKF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2NvbXApOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9f
bWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgICAgIGlmIChfX2NvbXAoKl9faSwgKl9f
Zmlyc3QpKQogICAgICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVmFs
dWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAgICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUs
IF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIHBhcnRpYWxfc29y
dF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QpCiAgICB7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9J
bnB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh
bmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5j
ZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKICAgICAKCiAgICAgIGlm
IChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsK
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmly
c3Q7CiAgICAgIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAh
PSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAgICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0
OwogICAgICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgICAgICsrX19maXJzdDsKICAgICAg
fQogICAgICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAg
ICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA8ICpf
X3Jlc3VsdF9maXJzdCkKICAgICAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9E
aXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19y
ZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRWYWx1ZVR5cGUoKl9fZmlyc3QpKTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0K
ICAgICAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogICAg
ICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW5wdXRJdGVyLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+
CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0
SXRlcj46OnZhbHVlX3R5cGUgX0lucHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX091dHB1dFZh
bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj
Y2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAog
ICAgIAogICAgIAoKCiAgICAgIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSBy
ZXR1cm4gX19yZXN1bHRfbGFzdDsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVh
bF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgICAgIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYm
IF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAgICAgKl9fcmVzdWx0
X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAg
ICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9f
cmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0
KSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0X2ZpcnN0KSkKICAgICAg
ICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCksCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19yZXN1bHRfcmVhbF9sYXN0IC0gX19y
ZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRWYWx1ZVR5cGUoKl9f
Zmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAgICsrX19maXJz
dDsKICAgICAgfQogICAgICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxf
bGFzdCwgX19jb21wKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBudGhfZWxl
bWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qp
CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl
c3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICB3aGls
ZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1
dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9f
Zmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIGlmIChf
X2N1dCA8PSBfX250aCkKICAgICAgICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgICAgICBlbHNlCiAg
ICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9f
Zmlyc3QsIF9fbGFzdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ
dGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIG50aF9lbGVtZW50KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX250
aCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1
ZVR5cGU7CgoKICAgICAKICAgICAKCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMp
IHsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRl
ZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJz
dCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb21wKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j
b21wKTsKICAgICAgICBpZiAoX19jdXQgPD0gX19udGgpCiAgICAgICAgICBfX2ZpcnN0ID0gX19j
dXQ7CiAgICAgICAgZWxzZQogICAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAgICAgIH0KICAgICAg
X19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVy
CiAgICBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5
cGUgX0Rpc3RhbmNlVHlwZTsKCgoKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5j
ZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VU
eXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9f
bGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUg
PSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYg
KCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAg
ICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAg
ICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgIH0KICAg
ICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
ciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAg
bG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVl
X3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAg
ICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3Qp
OwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxl
OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7
CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9f
aGFsZik7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICAgICAg
X19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4g
PSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9f
bGVuID0gX19oYWxmOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRl
cgogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90
eXBlIF9EaXN0YW5jZVR5cGU7CgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VU
eXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlw
ZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xl
biA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0g
X19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChf
X3ZhbCA8ICpfX21pZGRsZSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2Ug
ewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAg
ICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICB9CiAgICAg
IHJldHVybiBfX2ZpcnN0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs
IHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVw
cGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90
eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G
b3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAg
CgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsK
ICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsK
CiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwog
ICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hh
bGYpOwogICAgICAgIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAgICAgICAgICBfX2xl
biA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsK
ICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAx
OwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBwYWlyPF9Gb3J3YXJk
SXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1Zh
bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJ
dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCiAgICAgCiAgICAgCiAgICAg
CgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsK
ICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwg
X19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFs
ZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFu
Y2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAg
ICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAg
ICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAo
X192YWwgPCAqX19taWRkbGUpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNl
IHsKICAgICAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3Zh
bCk7CiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgICAgIF9fcmlnaHQg
PSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCk7CiAgICAgICAgICByZXR1
cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAg
ICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0
ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBwYWlyPF9Gb3J3YXJk
SXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICBf
Q29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9E
aXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19s
ZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFs
ZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogICAgICB3
aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBf
X21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAg
ICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgICAgICBfX2ZpcnN0ID0g
X19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0g
X19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKF9fdmFsLCAqX19t
aWRkbGUpKQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAg
ICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwsIF9fY29tcCk7
CiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgICAgIF9fcmlnaHQgPSB1
cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCwgX19jb21wKTsKICAgICAgICAg
IHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQp
OwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3
YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9G
b3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgYm9vbAogICAgYmluYXJ5X3NlYXJjaChfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
Y29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCgogICAgIAogICAgIAoKICAgICAKCiAgICAgIF9Gb3J3
YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgICAg
cmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIShfX3ZhbCA8ICpfX2kpOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+
CiAgICBib29sCiAgICBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFy
ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBfRm9yd2FyZEl0ZXIg
X19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wKTsKICAgICAg
cmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIV9fY29tcChfX3ZhbCwgKl9faSk7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5h
bWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRlcjEgX19m
aXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQog
ICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19m
aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKCpf
X2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwog
ICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAq
X19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAg
ICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xh
c3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9P
dXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIK
ICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAg
ICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qy
LCAqX19maXJzdDEpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAg
ICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3Vs
dCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgICsr
X19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNv
cHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lk
CiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIp
CiAgICB7CiAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgICAgICByZXR1
cm47CiAgICAgIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAgICAgIGlmICgqX19taWRk
bGUgPCAqX19maXJzdCkKICAgICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUp
OwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz
dF9jdXQgPSBfX2ZpcnN0OwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0g
X19taWRkbGU7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgX0Rpc3RhbmNlIF9f
bGVuMjIgPSAwOwogICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAgX19sZW4xMSA9
IF9fbGVuMSAvIDI7CiAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAg
ICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3Rf
Y3V0KTsKICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7
CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAg
ICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgIF9fZmlyc3RfY3V0ID0g
dXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOwogICAgICAgIF9f
bGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgIH0KICAgICAgcm90
YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9IF9fZmlyc3RfY3V0OwogICAgICBhZHZhbmNlKF9fbmV3
X21pZGRsZSwgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCkpOwogICAgICBfX21lcmdl
X3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xMSwgX19sZW4yMik7CiAgICAgIF9fbWVyZ2Vf
d2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIgLSBfX2xlbjIy
KTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5
cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdl
X3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGVuMSA9
PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKF9fbGVuMSArIF9f
bGVuMiA9PSAyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsICpfX2ZpcnN0KSkKICAg
ICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgICAgIHJldHVybjsK
ICAgICAgfQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0Owog
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICAgIF9E
aXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICBp
ZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAg
ICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgX19zZWNvbmRfY3V0ID0g
bG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwogICAg
ICAgIF9fbGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgfQog
ICAgICBlbHNlIHsKICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICBhZHZhbmNl
KF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3Vu
ZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgICAgICBfX2xl
bjExID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAgICB9CiAgICAgIHJvdGF0
ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0X2N1dDsKICAgICAgYWR2YW5jZShfX25ld19t
aWRkbGUsIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpKTsKICAgICAgX19tZXJnZV93
aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIsIF9fY29tcCk7CiAgICAgIF9f
bWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIgLSBf
X2xlbjIyLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVj
dGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlw
ZW5hbWUgX0Rpc3RhbmNlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMQogICAgX19yb3RhdGVfYWRh
cHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyMSBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9f
bGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlcjIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZm
ZXJfc2l6ZSkKICAgIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlcl9lbmQ7CiAg
ICAgIGlmIChfX2xlbjEgPiBfX2xlbjIgJiYgX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAg
ICAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAg
ICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAgICAgIHJl
dHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmlyc3QpOwogICAgICB9CiAgICAg
IGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19idWZmZXJfZW5k
ID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgIGNvcHkoX19taWRk
bGUsIF9fbGFzdCwgX19maXJzdCk7CiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19idWZm
ZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBy
b3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7CiAgICAgICAgYWR2YW5jZShfX2ZpcnN0
LCBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KSk7CiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAg
ICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIx
LCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaWRp
cmVjdGlvbmFsSXRlcjM+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzCiAgICBfX21lcmdlX2JhY2t3
YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0Miwg
X0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIzIF9fcmVzdWx0KQogICAgewogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0
MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1
bHQpOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9i
YWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAg
ICAgIC0tX19sYXN0MjsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoKl9fbGFzdDIg
PCAqX19sYXN0MSkgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgICAg
IGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gY29weV9iYWNrd2Fy
ZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFzdDE7CiAg
ICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsK
ICAgICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1cm4gY29w
eV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9f
bGFzdDI7CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAg
ICAgICB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIzLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg
IF9CaWRpcmVjdGlvbmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJ
dGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIy
IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYg
KF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJz
dDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAg
ICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsK
ICAgICAgLS1fX2xhc3QxOwogICAgICAtLV9fbGFzdDI7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAg
ICAgICAgaWYgKF9fY29tcCgqX19sYXN0MiwgKl9fbGFzdDEpKSB7CiAgICAgICAgICAqLS1fX3Jl
c3VsdCA9ICpfX2xhc3QxOwogICAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAg
ICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0
KTsKICAgICAgICAgIC0tX19sYXN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFz
dDIpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEs
IF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MjsKICAgICAgICB9CiAgICAgIH0KICAgIH0K
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9E
aXN0YW5jZSwgdHlwZW5hbWUgX1BvaW50ZXI+CiAgICB2b2lkCiAgICBfX21lcmdlX2FkYXB0aXZl
KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0
YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlz
dGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgICAgIGlmIChfX2xlbjEgPD0gX19sZW4y
ICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVm
ZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAgICAgICAg
bWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCk7
CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkg
ewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xh
c3QsIF9fYnVmZmVyKTsKICAgICAgICAgICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21p
ZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICAgICAgICAgIH0KICAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBf
X2ZpcnN0OwogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19t
aWRkbGU7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgICAgICAgX0Rp
c3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICAgICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAg
ICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgICAgICAgICAgICBh
ZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICAgICAgICAgICAgX19zZWNvbmRf
Y3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgICAg
ICAgICAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwog
ICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICBfX2xlbjIy
ID0gX19sZW4yIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9f
bGVuMjIpOwogICAgICAgICAgICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmly
c3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9
IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgICAgICAgICAgICAgX19y
b3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMjIs
IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlcl9z
aXplKTsKICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwg
X19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu
MjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2
ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBf
X2J1ZmZlcl9zaXplKTsKICAgICAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1BvaW50
ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX2Fk
YXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEs
IF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVy
LCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUg
X19jb21wKQogICAgewogICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9
IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29w
eShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgICAgICBtZXJnZShfX2J1ZmZl
ciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXApOwogICAg
ICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAg
ICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBf
X2J1ZmZlcik7CiAgICAgICAgICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUs
IF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0Owog
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAg
ICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgICAgICAgX0Rpc3RhbmNlIF9f
bGVuMjIgPSAwOwogICAgICAgICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAgICAg
ICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9f
Zmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICAgICAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93
ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwogICAgICAg
ICAgICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAg
ICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIg
PSBfX2xlbjIgLyAyOwogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19s
ZW4yMik7CiAgICAgICAgICAgICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJz
dCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAgICAgICAgICAgICAgIF9f
bGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgICAgICAgIH0KICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgICAgICAgICAg
ICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBf
X2xlbjIyLCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19i
dWZmZXJfc2l6ZSk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJz
dF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICAgICAgICAgICAg
X19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xl
bjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVu
MjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAgICAgICAgfQogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBpbnBs
YWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRl
cj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAg
ICAKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkK
ICAgICAgICByZXR1cm47CgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMSA9IGRpc3RhbmNlKF9f
Zmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjIgPSBkaXN0YW5jZShf
X21pZGRsZSwgX19sYXN0KTsKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFs
SXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgaWYgKF9fYnVm
LmJlZ2luKCkgPT0gMCkKICAgICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yKTsKICAgICAgZWxzZQogICAgICAgIF9fbWVy
Z2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKF9fYnVm
LnNpemUoKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIs
IHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rp
b25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
bWlkZGxlLAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUKICAgICAg
ICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9C
aWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlw
ZTsKCgogICAgIAoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21p
ZGRsZSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xl
bjEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19s
ZW4yID0gZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCk7CgogICAgICBfVGVtcG9yYXJ5X2J1ZmZl
cjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7
CiAgICAgIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19tZXJnZV93aXRob3V0X2J1
ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwgX19jb21wKTsK
ICAgICAgZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9f
bGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdp
bigpLCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0
eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIGJvb2wKICAgIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m
aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAg
ICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19s
YXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgIGVsc2UgaWYoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICAgICAg
KytfX2ZpcnN0MTsKICAgICAgICBlbHNlCiAgICAgICAgICArK19fZmlyc3QxLCArK19fZmlyc3Qy
OwoKICAgICAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICBib29sCiAgICBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy
MiBfX2xhc3QyLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAg
ICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f
bGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgZWxzZSBpZihfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJz
dDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlCiAgICAgICAgICArK19fZmly
c3QxLCArK19fZmlyc3QyOwoKICAgICAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwg
dHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3VuaW9uKF9JbnB1
dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1
dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgIF9PdXRw
dXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAK
CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy
KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAg
ZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAq
X19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsK
ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAg
ICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9
CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xh
c3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg
dHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5
cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF91bmlvbihfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVy
MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgog
ICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIp
KSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3Qx
OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEp
KSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3Qy
OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0
MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0K
ICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBf
X2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0
SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgog
ICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICAg
ICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAg
ICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAg
ICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIs
IHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAg
X091dHB1dEl0ZXIKICAgIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgog
ICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkK
ICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0Miwg
Kl9fZmlyc3QxKSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAg
KytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICByZXR1cm4g
X19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt
ZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAg
c2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s
YXN0MiwKICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAg
ICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0g
X19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDEgPCAq
X19maXJzdDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsr
X19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlm
ICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVs
c2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAg
fQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5
cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091
dHB1dEl0ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J
bnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAg
ICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19s
YXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAg
ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAg
ICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIs
ICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2UgewogICAgICAg
ICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1
cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRw
dXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5w
dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAg
ICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QxIDwg
Kl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICAr
K19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSBp
ZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9
CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0
MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9f
Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAog
ICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9zeW1t
ZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu
cHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAo
X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChf
X2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19m
aXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAg
ICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAg
ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAg
ICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2Zp
cnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShf
X2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAg
IH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVy
CiAgICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1
cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAg
d2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCpfX3Jlc3VsdCA8ICpfX2Zp
cnN0KQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQog
ICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4g
X19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgd2hp
bGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fY29tcCgqX19yZXN1bHQsICpf
X2ZpcnN0KSkgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAg
bWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAg
ICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9f
Zmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxl
ICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdCkK
ICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgog
ICAgX0ZvcndhcmRJdGVyCiAgICBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsK
CiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmly
c3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgr
K19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3Vs
dCkpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsK
ICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgYm9v
bAogICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9fbGFzdCkK
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1fX2k7Cgog
ICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAg
ICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faSA8ICpfX2lpKSB7CiAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCEoKl9faSA8ICotLV9f
aikpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICAg
ICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
fQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2ZXJzZShfX2ZpcnN0
LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9Db21w
YXJlPgogICAgYm9vbAogICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19m
aXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
aSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9fbGFzdCkKICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1fX2k7CgogICAgICBm
b3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgICAgICAt
LV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2ksICpfX2lpKSkgewogICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICghX19jb21wKCpfX2ks
ICotLV9faikpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwog
ICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2ZXJzZShf
X2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAg
fQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBib29s
CiAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQog
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsKCiAg
ICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAg
ICAgIC0tX19pOwogICAgICAgIGlmICgqX19paSA8ICpfX2kpIHsKICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAoISgqLS1fX2ogPCAqX19p
KSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAg
ICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9
CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3Qs
IF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICBib29sCiAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp
cnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfQ29t
cGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19p
ID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQogICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZv
cig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgICAgIC0t
X19pOwogICAgICAgIGlmIChfX2NvbXAoKl9faWksICpfX2kpKSB7CiAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCFfX2NvbXAoKi0tX19q
LCAqX19pKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAg
ICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9f
Zmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9
CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Zvcndh
cmRJdGVyPgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmly
c3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
X2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoK
CgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICAgICAg
Zm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyAr
K19faXRlcikKICAgICAgICAgIGlmICgqX19maXJzdDEgPT0gKl9faXRlcikKICAgICAgICAgICAg
cmV0dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmlu
YXJ5UHJlZGljYXRlPgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJzdF9vZihfSW5wdXRJdGVy
IF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk
SXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgIF9C
aW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoK
CgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICAgICAg
Zm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyAr
K19faXRlcikKICAgICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19pdGVyKSkKICAgICAg
ICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAg
IF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0Zv
cndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3Qy
LCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf
dGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmlyc3QyID09IF9f
bGFzdDIpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3
YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3QxOwogICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAg
ICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgICAgICA9IHNlYXJjaChfX2ZpcnN0
MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogICAgICAgICAgaWYgKF9fbmV3X3Jlc3Vs
dCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgIF9fZmly
c3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIx
LCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVk
aWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19m
aXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
MiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICBmb3J3YXJk
X2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgIF9CaW5h
cnlQcmVkaWNhdGUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikK
ICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVy
MSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgIF9Gb3J3
YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xh
c3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsKICAgICAgICAgIGlmIChfX25ld19yZXN1
bHQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICBfX2Zp
cnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIH0KICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlv
bmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjI+CiAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRp
cmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
MiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICBi
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAg
ICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVj
dGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9C
aWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9SZXZJdGVyMSBfX3JsYXN0MShf
X2ZpcnN0MSk7CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgICAgIF9SZXZJ
dGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxh
c3QyKTsKCiAgICAgIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICAgICAgcmV0dXJuIF9f
bGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQg
PSBfX3JyZXN1bHQuYmFzZSgpOwogICAgICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShf
X2ZpcnN0MiwgX19sYXN0MikpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlk
aXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEg
X19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAog
ICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9p
dGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAg
ewoKICAgICAKICAgICAKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rp
b25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlk
aXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogICAgICBfUmV2SXRlcjEgX19ybGFzdDEoX19m
aXJzdDEpOwogICAgICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogICAgICBfUmV2SXRl
cjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwoKICAgICAgaWYg
KF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxz
ZSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNl
KCk7CiAgICAgICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3Qy
KSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CiAgICB9CgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIGlubGlu
ZSBfRm9yd2FyZEl0ZXIxCiAgICBmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9y
d2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBf
Rm9yd2FyZEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICBy
ZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAg
ICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAg
ICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSk7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRl
cjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBfRm9y
d2FyZEl0ZXIxCiAgICBmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2Fy
ZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAg
IHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3Qx
LCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgX19p
dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRl
cmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXAp
OwogICAgfQoKfQoKCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3QgdHlwZW5hbWUg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9TX21heF9zaXpl
ID0gKCgobnBvcyAtIHNpemVvZihfUmVwKSkvc2l6ZW9mKF9DaGFyVCkpIC0gMSkgLyA0OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGNvbnN0IF9DaGFyVAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICBfUmVwOjpfU190ZXJtaW5hbCA9IF9DaGFyVCgpOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0
IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlw
ZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6bnBvczsKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNp
emVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1NfZW1w
dHlfcmVwX3N0b3JhZ2VbCiAgICAoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXpl
b2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVt
cGxhdGU8dHlwZW5hbWUgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19i
ZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAg
aW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kICYm
IF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZj
b3B5KCk7CgogICAgICAgIF9DaGFyVCBfX2J1ZlsxMDBdOwogICAgICAgIHNpemVfdHlwZSBfX2kg
PSAwOwogICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBzaXplb2YoX19idWYp
IC8gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fYnVmW19faSsrXSA9
ICpfX2JlZzsKICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgIH0KICAgICAgICBfUmVwKiBf
X3IgPSBfUmVwOjpfU19jcmVhdGUoX19pLCBfX2EpOwogICAgICAgIHRyYWl0c190eXBlOjpjb3B5
KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19pKTsKICAgICAgICBfX3ItPl9NX2xlbmd0aCA9
IF9faTsKICAgICAgICB0cnkKICAgICAgICAgIHsKCgoKICAgICAgICAgICAgZm9yICg7OykKICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9fci0+X01fcmVmZGF0
YSgpICsgX19yLT5fTV9sZW5ndGg7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fbGFzdCA9IF9f
ci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9jYXBhY2l0eTsKICAgICAgICAgICAgICAgIGZvciAo
OzspCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoX19iZWcgPT0g
X19lbmQpCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9f
ci0+X01fbGVuZ3RoID0gX19wIC0gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICpfX3AgPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgIGlmIChfX3AgPT0gX19sYXN0KQogICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgKl9fcCsrID0gKl9fYmVnOwogICAgICAgICAgICAgICAg
ICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzaXplX3R5
cGUgX19sZW4gPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAgIF9SZXAq
IF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEsIF9fYSk7CiAgICAgICAgICAg
ICAgICB0cmFpdHNfdHlwZTo6Y29weShfX2Fub3RoZXItPl9NX3JlZmRhdGEoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fcmVmZGF0YSgpLCBfX2xlbik7CiAgICAg
ICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgICAgIF9fciA9IF9f
YW5vdGhlcjsKICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19sZW47CiAgICAgICAg
ICAgICAgfQogICAgICAgICAgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAg
ICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAg
fQogICAgICAgIHJldHVybiAwOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPGNsYXNzIF9J
bkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5k
LCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf
dGFnKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVf
dHlwZT4oZGlzdGFuY2UoX19iZWcsIF9fZW5kKSk7CgoKICAgICAgICBpZiAoX19idWlsdGluX2V4
cGVjdChfX2JlZyA9PSBfSW5JdGVyKCksIDApKQogICAgICAgICAgX190aHJvd19sb2dpY19lcnJv
cigiYXR0ZW1wdCB0byBjcmVhdGUgc3RyaW5nIHdpdGggbnVsbCBwb2ludGVyIik7CgogICAgICAg
IGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1cm4g
X1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6
X1NfY3JlYXRlKF9fZG5ldywgX19hKTsKICAgICAgICB0cnkKICAgICAgICAgIHsgX1NfY29weV9j
aGFycyhfX3ItPl9NX3JlZmRhdGEoKSwgX19iZWcsIF9fZW5kKTsgfQogICAgICAgIGNhdGNoKC4u
LikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19kbmV3OwoK
ICAgICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX2RuZXddID0gX1JlcDo6X1NfdGVybWluYWw7CiAg
ICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJU
KgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfU19jb25z
dHJ1Y3Qoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICB7
CiAgICAgIGlmIChfX24gPT0gMCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgcmV0dXJuIF9T
X2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19j
cmVhdGUoX19uLCBfX2EpOwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19uKQog
ICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fci0+X01fcmVmZGF0YSgpLCBfX24sIF9f
Yyk7CiAgICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX19yLT5f
TV9kZXN0cm95KF9fYSk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIF9fci0+X01f
bGVuZ3RoID0gX19uOwogICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX25dID0gX1JlcDo6X1NfdGVy
bWluYWw7CiAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgOiBfTV9kYXRhcGx1cyhfX3N0ci5fTV9yZXAo
KS0+X01fZ3JhYihfQWxsb2MoKSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKSwKICAgICAgICAgICAg
ICAgICBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxs
b2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KHNpemVfdHlwZSgpLCBfQ2hh
clQoKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgOiBfTV9kYXRhcGx1cyhf
U19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX0FsbG9jKCkpLCBfQWxsb2MoKSkK
ICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBf
X3BvcywKICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkK
ICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9f
YSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg
X19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9f
cywgX19zICsgX19uLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQq
IF9fcywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChf
X3MsIF9fcyA/IF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSA6IDAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhzaXplX3R5
cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMo
X1NfY29uc3RydWN0KF9fbiwgX19jLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlciBfX2JlZywgX0lucHV0SXRl
ciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVj
dChfX2JlZywgX19lbmQsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+Ojphc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIHsKICAg
ICAgaWYgKF9NX3JlcCgpICE9IF9fc3RyLl9NX3JlcCgpKQogICAgICAgIHsKCiAgICAgICAgICBh
bGxvY2F0b3JfdHlwZSBfX2EgPSB0aGlzLT5nZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hh
clQqIF9fdG1wID0gX19zdHIuX01fcmVwKCktPl9NX2dyYWIoX19hLCBfX3N0ci5nZXRfYWxsb2Nh
dG9yKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9N
X2RhdGEoX190bXApOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6
OgogICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmIF9fYSkgdGhyb3cgKCkKICAgIHsKICAgICAg
c2l6ZV90eXBlIF9fc2l6ZSA9IHNpemVvZihfUmVwKSArIChfTV9jYXBhY2l0eSArIDEpICogc2l6
ZW9mKF9DaGFyVCk7CiAgICAgIF9SYXdfYnl0ZXNfYWxsb2MoX19hKS5kZWFsbG9jYXRlKHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpLCBfX3NpemUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQK
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9NX2xlYWtfaGFyZCgp
CiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgX01fbXV0
YXRlKDAsIDAsIDApOwogICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgfQoKCgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6
ZV90eXBlIF9fbGVuMikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlzLT5z
aXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld19zaXplID0gX19vbGRfc2l6ZSArIF9f
bGVuMiAtIF9fbGVuMTsKICAgICAgY29uc3QgX0NoYXJUKiBfX3NyYyA9IF9NX2RhdGEoKSArIF9f
cG9zICsgX19sZW4xOwogICAgICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9fb2xkX3Np
emUgLSBfX3BvcyAtIF9fbGVuMTsKCiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkg
fHwgX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgewoKICAgICAgICAgIGFsbG9jYXRv
cl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKCgogICAgICAgICAgY29uc3Qgc2l6ZV90eXBl
IF9fcGFnZXNpemUgPSA0MDk2OwogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9jX2hl
YWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAgICAgICAgIGNvbnN0IHNpemVfdHlw
ZSBfX3BhZ2VfY2FwYWNpdHkgPSAoX19wYWdlc2l6ZSAtIF9fbWFsbG9jX2hlYWRlcl9zaXplCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc2l6ZW9mKF9SZXAp
IC0gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfUmVwKiBfX3I7CiAgICAgICAgICBp
ZiAoX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkgJiYgX19uZXdfc2l6ZSA+IF9fcGFnZV9jYXBhY2l0
eSkKCiAgICAgICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplID4gMipjYXBh
Y2l0eSgpID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3NpemUgOiAy
KmNhcGFjaXR5KCksIF9fYSk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fciA9IF9SZXA6
Ol9TX2NyZWF0ZShfX25ld19zaXplLCBfX2EpOwogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBpZiAoX19wb3MpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29w
eShfX3ItPl9NX3JlZmRhdGEoKSwgX01fZGF0YSgpLCBfX3Bvcyk7CiAgICAgICAgICAgICAgaWYg
KF9faG93X211Y2gpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3Jl
ZmRhdGEoKSArIF9fcG9zICsgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19zcmMsIF9faG93X211Y2gpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCguLi4p
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rpc3Bvc2UoZ2V0X2FsbG9jYXRv
cigpKTsKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgICAgX01fcmVw
KCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX19yLT5fTV9yZWZkYXRhKCkp
OwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVuMikK
ICAgICAgICB7CgogICAgICAgICAgdHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpICsgX19wb3Mg
KyBfX2xlbjIsIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICB9CiAgICAgIF9NX3JlcCgpLT5f
TV9zZXRfc2hhcmFibGUoKTsKICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbmV3X3NpemU7
CiAgICAgIF9NX2RhdGEoKVtfX25ld19zaXplXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwoKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjpyZXNlcnZlKHNpemVfdHlwZSBfX3JlcykKICAgIHsKICAgICAgaWYgKF9fcmVzID4gdGhpcy0+
Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgewogICAgICAg
ICAgaWYgKF9fcmVzID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgICAgX190aHJvd19sZW5n
dGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzZXJ2ZSIpOwoKICAgICAgICAgIGlmIChfX3JlcyA8
IHRoaXMtPnNpemUoKSkKICAgICAgICAgICAgX19yZXMgPSB0aGlzLT5zaXplKCk7CiAgICAgICAg
ICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hhclQq
IF9fdG1wID0gX01fcmVwKCktPl9NX2Nsb25lKF9fYSwgX19yZXMgLSB0aGlzLT5zaXplKCkpOwog
ICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX190
bXApOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OnN3YXAoYmFzaWNfc3RyaW5nJiBfX3MpCiAgICB7CiAgICAgIGlm
IChfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgX01fcmVwKCktPl9NX3NldF9zaGFy
YWJsZSgpOwogICAgICBpZiAoX19zLl9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICBf
X3MuX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAodGhpcy0+Z2V0X2FsbG9j
YXRvcigpID09IF9fcy5nZXRfYWxsb2NhdG9yKCkpCiAgICAgICAgewogICAgICAgICAgX0NoYXJU
KiBfX3RtcCA9IF9NX2RhdGEoKTsKICAgICAgICAgIF9NX2RhdGEoX19zLl9NX2RhdGEoKSk7CiAg
ICAgICAgICBfX3MuX01fZGF0YShfX3RtcCk7CiAgICAgICAgfQoKICAgICAgZWxzZQogICAgICAg
IHsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDEoX01faWJlZ2luKCksIF9NX2llbmQoKSwg
X19zLmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAyKF9fcy5f
TV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICp0aGlzID0gX190bXAyOwogICAgICAg
ICAgX19zID0gX190bXAxOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwKgogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfU19jcmVhdGUoc2l6ZV90IF9f
Y2FwYWNpdHksIGNvbnN0IF9BbGxvYyYgX19hbGxvYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CgoKICAgICAg
aWYgKF9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSkKCgoKICAgICAgICBfX3Rocm93X2xlbmd0aF9l
cnJvcigiYmFzaWNfc3RyaW5nOjpfU19jcmVhdGUiKTsKCgoKCiAgICAgIHNpemVfdCBfX3NpemUg
PSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CgogICAg
ICBjb25zdCBzaXplX3QgX19wYWdlc2l6ZSA9IDQwOTY7CiAgICAgIGNvbnN0IHNpemVfdCBfX3N1
YnBhZ2VzaXplID0gMTI4OwogICAgICBjb25zdCBzaXplX3QgX19tYWxsb2NfaGVhZGVyX3NpemUg
PSA0ICogc2l6ZW9mICh2b2lkKik7CiAgICAgIGlmICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVy
X3NpemUpID4gX19wYWdlc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19leHRyYSA9
CiAgICAgICAgICAgIChfX3BhZ2VzaXplIC0gKChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6
ZSkgJSBfX3BhZ2VzaXplKSkKICAgICAgICAgICAgJSBfX3BhZ2VzaXplOwogICAgICAgICAgX19j
YXBhY2l0eSArPSBfX2V4dHJhIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfX3NpemUgPSAo
X19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiAgICAgICAg
fQogICAgICBlbHNlIGlmIChfX3NpemUgPiBfX3N1YnBhZ2VzaXplKQogICAgICAgIHsKICAgICAg
ICAgIHNpemVfdCBfX2V4dHJhID0KICAgICAgICAgICAgKF9fc3VicGFnZXNpemUgLSAoKF9fc2l6
ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXplKSAlIF9fc3VicGFnZXNpemUpKQogICAgICAgICAgICAl
IF9fc3VicGFnZXNpemU7CiAgICAgICAgICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBzaXplb2Yo
X0NoYXJUKTsKICAgICAgICAgIF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0No
YXJUKSArIHNpemVvZihfUmVwKTsKICAgICAgICB9CgoKCiAgICAgIHZvaWQqIF9fcGxhY2UgPSBf
UmF3X2J5dGVzX2FsbG9jKF9fYWxsb2MpLmFsbG9jYXRlKF9fc2l6ZSk7CiAgICAgIF9SZXAgKl9f
cCA9IG5ldyAoX19wbGFjZSkgX1JlcDsKICAgICAgX19wLT5fTV9jYXBhY2l0eSA9IF9fY2FwYWNp
dHk7CiAgICAgIF9fcC0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9fcC0+X01fbGVuZ3RoID0g
MDsKICAgICAgcmV0dXJuIF9fcDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBfQ2hhclQqCiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9NX2Nsb25lKGNvbnN0
IF9BbGxvYyYgX19hbGxvYywgc2l6ZV90eXBlIF9fcmVzKQogICAgewoKICAgICAgY29uc3Qgc2l6
ZV90eXBlIF9fcmVxdWVzdGVkX2NhcCA9IF9NX2xlbmd0aCArIF9fcmVzOwoKICAgICAgY29uc3Qg
c2l6ZV90eXBlIF9fcGFnZXNpemUgPSA0MDk2OwogICAgICBjb25zdCBzaXplX3R5cGUgX19tYWxs
b2NfaGVhZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CgogICAgICBjb25zdCBzaXplX3R5
cGUgX19wYWdlX2NhcGFjaXR5ID0KICAgICAgICAoX19wYWdlc2l6ZSAtIF9fbWFsbG9jX2hlYWRl
cl9zaXplIC0gc2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgLyBzaXplb2Yo
X0NoYXJUKTsKICAgICAgX1JlcCogX19yOwogICAgICBpZiAoX19yZXF1ZXN0ZWRfY2FwID4gX01f
Y2FwYWNpdHkgJiYgX19yZXF1ZXN0ZWRfY2FwID4gX19wYWdlX2NhcGFjaXR5KQoKICAgICAgICBf
X3IgPSBfUmVwOjpfU19jcmVhdGUoX19yZXF1ZXN0ZWRfY2FwID4gMipfTV9jYXBhY2l0eSA/CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVxdWVzdGVkX2NhcCA6IDIqX01fY2FwYWNp
dHksIF9fYWxsb2MpOwogICAgICBlbHNlCiAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9f
cmVxdWVzdGVkX2NhcCwgX19hbGxvYyk7CgogICAgICBpZiAoX01fbGVuZ3RoKQogICAgICAgIHsK
ICAgICAgICAgIHRyeQogICAgICAgICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVm
ZGF0YSgpLCBfTV9yZWZkYXRhKCksIF9NX2xlbmd0aCk7IH0KICAgICAgICAgIGNhdGNoKC4uLikK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2FsbG9jKTsKICAg
ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgX19yLT5fTV9s
ZW5ndGggPSBfTV9sZW5ndGg7CiAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjpyZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgaWYgKF9fbiA+
IG1heF9zaXplKCkpCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6
cmVzaXplIik7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlm
IChfX3NpemUgPCBfX24pCiAgICAgICAgdGhpcy0+YXBwZW5kKF9fbiAtIF9fc2l6ZSwgX19jKTsK
ICAgICAgZWxzZSBpZiAoX19uIDwgX19zaXplKQogICAgICAgIHRoaXMtPmVyYXNlKF9fbik7Cgog
ICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kx
LCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAgX0lucHV0
SXRlciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKCiAgICAgICAgYmFzaWNfc3Ry
aW5nIF9fcyhfX2sxLCBfX2syKTsKICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9faTEs
IF9faTIsIF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSk7CiAgICAgIH0KCgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OgogICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0
b3IgX19pMiwgX0ZvcndhcmRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIgX19rMikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2Fz
dDxzaXplX3R5cGU+KGRpc3RhbmNlKF9fazEsIF9fazIpKTsKICAgICAgICBzaXplX3R5cGUgX19k
b2xkID0gX19pMiAtIF9faTE7CiAgICAgICAgc2l6ZV90eXBlIF9fZG1heCA9IHRoaXMtPm1heF9z
aXplKCk7CgogICAgICAgIGlmIChfX2RtYXggPD0gX19kbmV3KQogICAgICAgICAgX190aHJvd19s
ZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X01fcmVwbGFjZSIpOwogICAgICAgIHNpemVfdHlw
ZSBfX29mZiA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgICBfTV9tdXRhdGUoX19vZmYsIF9f
ZG9sZCwgX19kbmV3KTsKCgogICAgICAgIGlmIChfX2RuZXcpCiAgICAgICAgICBfU19jb3B5X2No
YXJzKF9NX2RhdGEoKSArIF9fb2ZmLCBfX2sxLCBfX2syKTsKCiAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFj
ZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0ciwKICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpCiAgICB7
CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIGlm
IChfX3BvczIgPiBfX3N0cnNpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2lj
X3N0cmluZzo6cmVwbGFjZSIpOwogICAgICBjb25zdCBib29sIF9fdGVzdG4yID0gX19uMiA8IF9f
c3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZm9sZG4yID0gX190ZXN0
bjIgPyBfX24yIDogX19zdHJzaXplIC0gX19wb3MyOwogICAgICByZXR1cm4gdGhpcy0+cmVwbGFj
ZShfX3BvczEsIF9fbjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2RhdGEo
KSArIF9fcG9zMiwgX19mb2xkbjIpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgewoKCgog
ICAgICBzaXplX3R5cGUgX19zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19s
ZW4gPSBfX3NpemUgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFj
aXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBfTV9yZXBs
YWNlX3NhZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2liZWdpbigpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2llbmQoKSk7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYg
X19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgIHsKCgoKICAgICAgc2l6
ZV90eXBlIF9fbGVuID0gbWluKF9fc3RyLnNpemUoKSAtIF9fcG9zLCBfX24pICsgdGhpcy0+c2l6
ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJl
c2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01f
aWVuZCgpLCBfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg
X19uKQogICAgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAg
ICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShf
X2xlbik7CiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVuZCgpLCBfTV9pZW5kKCks
IF9fcywgX19zICsgX19uKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6CiAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6
ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlz
LT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICAgcmV0dXJu
IHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRv
cisoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAg
ICBfX3NpemVfdHlwZSBfX2xlbiA9IF9UcmFpdHM6Omxlbmd0aChfX2xocyk7CiAgICAgIF9fc3Ry
aW5nX3R5cGUgX19zdHI7CiAgICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyBfX3Jocy5zaXplKCkp
OwogICAgICBfX3N0ci5hcHBlbmQoX19saHMsIF9fbGhzICsgX19sZW4pOwogICAgICBfX3N0ci5h
cHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xo
cywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAg
ICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBf
X3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVf
dHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19zaXpl
X3R5cGUgX19sZW4gPSBfX3Jocy5zaXplKCk7CiAgICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyAx
KTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX2xocyk7CiAgICAgIF9fc3Ry
LmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y
IF9faTIsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAgewogICAgICBzaXplX3R5cGUg
X19uMSA9IF9faTIgLSBfX2kxOwogICAgICBzaXplX3R5cGUgX19vZmYxID0gX19pMSAtIF9NX2li
ZWdpbigpOwogICAgICBpZiAobWF4X3NpemUoKSAtICh0aGlzLT5zaXplKCkgLSBfX24xKSA8PSBf
X24yKQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlcGxhY2Ui
KTsKICAgICAgX01fbXV0YXRlIChfX29mZjEsIF9fbjEsIF9fbjIpOwoKICAgICAgaWYgKF9fbjIp
CiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKCkgKyBfX29mZjEsIF9fbjIsIF9f
Yyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90
eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBpZiAoX19wb3MgPiB0
aGlzLT5zaXplKCkpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6
Y29weSIpOwoKICAgICAgaWYgKF9fbiA+IHRoaXMtPnNpemUoKSAtIF9fcG9zKQogICAgICAgIF9f
biA9IHRoaXMtPnNpemUoKSAtIF9fcG9zOwoKICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBf
TV9kYXRhKCkgKyBfX3BvcywgX19uKTsKCiAgICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90
eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQo
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QK
ICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90
IF9feHBvcyA9IF9fcG9zOwogICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsK
ICAgICAgZm9yICg7IF9feHBvcyArIF9fbiA8PSBfX3NpemU7ICsrX194cG9zKQogICAgICAgIGlm
ICh0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBfX3hwb3MsIF9fcywgX19uKSA9PSAwKQog
ICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90
eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQo
X0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUg
X19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19yZXQgPSBucG9zOwogICAg
ICBpZiAoX19wb3MgPCBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBf
X2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBzaXplX3R5cGUgX19uID0gX19zaXplIC0gX19w
b3M7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fZGF0
YSArIF9fcG9zLCBfX24sIF9fYyk7CiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICBfX3Jl
dCA9IF9fcCAtIF9fZGF0YTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg
IHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p
IGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAg
IGlmIChfX24gPD0gX19zaXplKQogICAgICAgIHsKICAgICAgICAgIF9fcG9zID0gc3RkOjptaW4o
X19zaXplIC0gX19uLCBfX3Bvcyk7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9N
X2RhdGEoKTsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAodHJh
aXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX19wb3MsIF9fcywgX19uKSA9PSAwKQogICAgICAg
ICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19w
b3MtLSA+IDApOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
dHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBl
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5kKF9D
aGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9f
c2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAg
ICBzaXplX3QgX194cG9zID0gX19zaXplIC0gMTsKICAgICAgICAgIGlmIChfX3hwb3MgPiBfX3Bv
cykKICAgICAgICAgICAgX194cG9zID0gX19wb3M7CgogICAgICAgICAgZm9yICgrK19feHBvczsg
X194cG9zLS0gPiAwOyApCiAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgp
W19feHBvc10sIF9fYykpCiAgICAgICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgICB9CiAg
ICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIGZvciAo
OyBfX24gJiYgX19wb3MgPCB0aGlzLT5zaXplKCk7ICsrX19wb3MpCiAgICAgICAgewogICAgICAg
ICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0
YSgpW19fcG9zXSk7CiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICByZXR1cm4gX19wb3M7
CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9sYXN0X29mKGNvbnN0
IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7
CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUg
JiYgX19uKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAg
ICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBpZiAodHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3NpemVdKSkK
ICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdo
aWxlIChfX3NpemUtLSAhPSAwKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBz
aXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAg
ICAgIGZvciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICgh
dHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3hwb3NdKSkKICAgICAgICAg
IHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVu
YW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25v
dF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVf
dCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9feHBvcyA8IHRoaXMtPnNpemUoKTsgKytf
X3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9f
YykpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpz
aXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg
ZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXpl
X3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6
ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+
IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9k
YXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAg
ICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5w
b3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9z
KSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAg
ICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQog
ICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX19zaXplXSwgX19jKSkK
ICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdo
aWxlIChfX3NpemUtLSk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg
Y29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmlu
ZyYgX19zdHIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXpl
KCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19w
b3MgPiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6
Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemU9IG1pbihfX3NpemUgLSBfX3Bvcywg
X19uKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAg
ICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fc3Ry
LmRhdGEoKSwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0g
X19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUg
X19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAg
ICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAg
IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXpl
ID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MxID4gX19zaXplIHx8IF9fcG9zMiA+IF9f
b3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFy
ZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MxLCBfX24x
KTsKICAgICAgc2l6ZV90eXBlIF9fcm9zaXplID0gbWluKF9fb3NpemUgLSBfX3BvczIsIF9fbjIp
OwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19yb3NpemUpOwogICAgICBp
bnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuZGF0YSgpICsgX19wb3MyLCBfX2xl
bik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX3Jvc2l6ZTsKICAg
ICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNv
bnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlu
dCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19zaXplKTsKICAg
ICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19zaXplIC0gdHJhaXRzX3R5cGU6Omxlbmd0aChf
X3MpOwogICAgICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0
cmluZyA8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9f
cG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAg
IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6
ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7
CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAg
ICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbjEpOwogICAgICBz
aXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0
cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7CiAgICAg
IGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4g
X19yOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24x
LCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAg
ICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3Bv
cyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpj
b21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IG1pbih0cmFpdHNfdHlwZTo6bGVu
Z3RoKF9fcyksIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBf
X3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXpl
KTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9z
LCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9f
b3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQs
IGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHZvaWQKICAgIF9TX3N0cmluZ19jb3B5
KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLAogICAg
ICAgICAgICAgICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUg
X19idWZzaXopCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUg
c2l6ZV90eXBlOwogICAgICBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAg
ICBzaXplX3R5cGUgX19ieXRlcyA9IG1pbihfX3N0cnNpemUsIF9fYnVmc2l6IC0gMSk7CiAgICAg
IF9UcmFpdHM6OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19ieXRlcyk7CiAgICAgIF9fYnVm
W19fYnl0ZXNdID0gX0NoYXJUKCk7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBi
YXNpY19zdHJpbmc8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNo
YXI+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19vc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0b3I8PChiYXNp
Y19vc3RyZWFtPGNoYXI+JiwgY29uc3Qgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi
YXNpY19pc3RyZWFtPGNoYXI+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3Ry
aW5nJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+Jgog
ICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CgogIGV4dGVybiB0ZW1w
bGF0ZSBjbGFzcyBiYXNpY19zdHJpbmc8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi
YXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPHdjaGFy
X3Q+Jiwgd3N0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfb3N0cmVhbTx3Y2hh
cl90PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYsIGNvbnN0IHdzdHJp
bmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mCiAgICBn
ZXRsaW5lKGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3RyaW5nJiwgd2NoYXJfdCk7CiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAgZ2V0bGluZShiYXNp
Y19pc3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYpOwp9CgoKCgoKCgpuYW1lc3BhY2Ugc3RkCnsK
CiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93
X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2
b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNf
ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3Qg
Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2
b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292
ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxv
d19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUo
Y29uc3QgY2hhciogX19zKTsKfQoKCgpuYW1lc3BhY2Ugc3RkCnsKCiAgY2xhc3MgbG9jYWxlOwoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2Uo
X0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
aW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzY250cmwoX0NoYXJULCBj
b25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv
b2wKICAgIGlzdXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzbG93ZXIoX0NoYXJULCBjb25zdCBsb2Nh
bGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlz
YWxwaGEoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgaW5saW5lIGJvb2wKICAgIGlzZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0No
YXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s
aW5lIGJvb2wKICAgIGlzeGRpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCwgY29u
c3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29s
CiAgICBpc2dyYXBoKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvdXBwZXIoX0NoYXJULCBjb25zdCBsb2Nh
bGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAg
dG9sb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKCgogIGNsYXNzIGN0eXBlX2Jhc2U7CiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGU7CiAgdGVtcGxhdGU8PiBj
bGFzcyBjdHlwZTxjaGFyPjsKCiAgdGVtcGxhdGU8PiBjbGFzcyBjdHlwZTx3Y2hhcl90PjsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnluYW1lOwoKCiAgY2xh
c3MgY29kZWN2dF9iYXNlOwogIGNsYXNzIF9fZW5jX3RyYWl0czsKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFz
cyBjb2RlY3Z0OwogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRl
X3Q+OwoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90
PjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBl
bmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFy
VD4gPgogICAgY2xhc3MgbnVtX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG51
bV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdDsKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGNvbGxhdGU7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPiBjbGFzcwogICAgY29sbGF0ZV9ieW5hbWU7CgoKICBjbGFzcyB0aW1lX2Jhc2U7CiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9p
dGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+
CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFz
cyB0aW1lX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy
ID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFt
ZTsKCgogIGNsYXNzIG1vbmV5X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1v
bmV5X2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0g
b3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X3B1dDsKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5
cHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CiAg
ICBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTsKCgogIGNsYXNzIG1lc3NhZ2VzX2Jhc2U7CiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXM7CiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lOwoKCiAgY2xhc3MgbG9jYWxl
CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIGludCBjYXRlZ29yeTsKCgogICAg
Y2xhc3MgZmFjZXQ7CiAgICBjbGFzcyBpZDsKICAgIGNsYXNzIF9JbXBsOwoKICAgIGZyaWVuZCBj
bGFzcyBmYWNldDsKICAgIGZyaWVuZCBjbGFzcyBfSW1wbDsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25z
dCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBi
b29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOwoKCgogICAgc3RhdGlj
IGNvbnN0IGNhdGVnb3J5IG5vbmUgPSAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGN0eXBl
ID0gMUwgPDwgMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBudW1lcmljID0gMUwgPDwgMTsK
ICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjb2xsYXRlID0gMUwgPDwgMjsKICAgIHN0YXRpYyBj
b25zdCBjYXRlZ29yeSB0aW1lID0gMUwgPDwgMzsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBt
b25ldGFyeSA9IDFMIDw8IDQ7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbWVzc2FnZXMgPSAx
TCA8PCA1OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGFsbCA9IChjb2xsYXRlIHwgY3R5cGUg
fCBtb25ldGFyeSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
dW1lcmljIHwgdGltZSB8IG1lc3NhZ2VzKTsKCgogICAgbG9jYWxlKCkgdGhyb3coKTsKCiAgICBs
b2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOwoKICAgIGV4cGxpY2l0CiAgICBs
b2NhbGUoY29uc3QgY2hhciogX19zKTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2Us
IGNvbnN0IGNoYXIqIF9fcywgY2F0ZWdvcnkgX19jYXQpOwoKICAgIGxvY2FsZShjb25zdCBsb2Nh
bGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOwoKICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhl
ciwgX0ZhY2V0KiBfX2YpOwoKICAgIH5sb2NhbGUoKSB0aHJvdygpOwoKICAgIGNvbnN0IGxvY2Fs
ZSYKICAgIG9wZXJhdG9yPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUKICAgICAgY29tYmluZShjb25zdCBs
b2NhbGUmIF9fb3RoZXIpIGNvbnN0OwoKCiAgICBzdHJpbmcKICAgIG5hbWUoKSBjb25zdDsKCiAg
ICBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QgdGhyb3cg
KCk7CgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgbG9jYWxlJiBfX290aGVy
KSBjb25zdCB0aHJvdyAoKQogICAgeyByZXR1cm4gISh0aGlzLT5vcGVyYXRvcj09KF9fb3RoZXIp
KTsgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IoKShjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEsCiAgICAgICAgICAgICAgICAgY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdDsKCgogICAg
c3RhdGljIGxvY2FsZQogICAgZ2xvYmFsKGNvbnN0IGxvY2FsZSYpOwoKICAgIHN0YXRpYyBjb25z
dCBsb2NhbGUmCiAgICBjbGFzc2ljKCk7CgogIHByaXZhdGU6CgogICAgX0ltcGwqIF9NX2ltcGw7
CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfY2xhc3NpYzsKCgogICAgc3RhdGljIF9JbXBsKiBfU19n
bG9iYWw7CgogICAgc3RhdGljIGNvbnN0IHNpemVfdCBfU19udW1fY2F0ZWdvcmllcyA9IDY7Cgog
ICAgZXhwbGljaXQKICAgIGxvY2FsZShfSW1wbCopIHRocm93KCk7CgogICAgc3RhdGljIGlubGlu
ZSB2b2lkCiAgICBfU19pbml0aWFsaXplKCkKICAgIHsKICAgICAgaWYgKCFfU19jbGFzc2ljKQog
ICAgICAgIGNsYXNzaWMoKTsKICAgIH0KCiAgICBzdGF0aWMgY2F0ZWdvcnkKICAgIF9TX25vcm1h
bGl6ZV9jYXRlZ29yeShjYXRlZ29yeSk7CgogICAgdm9pZAogICAgX01fY29hbGVzY2UoY29uc3Qg
bG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsKICB9
OwoKCgogIGNsYXNzIGxvY2FsZTo6X0ltcGwKICB7CiAgcHVibGljOgoKICAgIGZyaWVuZCBjbGFz
cyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpmYWNldDsKCiAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNl
dChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZy
aWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOwoKICBwcml2
YXRlOgoKICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwogICAgZmFjZXQqKiBfTV9mYWNl
dHM7CiAgICBzaXplX3QgX01fZmFjZXRzX3NpemU7CiAgICBjb25zdCBjaGFyKiBfTV9uYW1lc1tf
U19udW1fY2F0ZWdvcmllc107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1Nf
aWRfY3R5cGVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9udW1l
cmljW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfY29sbGF0ZVtd
OwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX3RpbWVbXTsKICAgIHN0
YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9tb25ldGFyeVtdOwogICAgc3RhdGlj
IGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21lc3NhZ2VzW107CiAgICBzdGF0aWMgY29u
c3QgbG9jYWxlOjppZCogY29uc3QqIGNvbnN0IF9TX2ZhY2V0X2NhdGVnb3JpZXNbXTsKCiAgICBp
bmxpbmUgdm9pZAogICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCkKICAgIHsgX19hdG9taWNf
YWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsgfQoKICAgIGlubGluZSB2b2lkCiAgICBfTV9yZW1vdmVf
cmVmZXJlbmNlKCkgdGhyb3coKQogICAgewogICAgICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZf
TV9yZWZlcmVuY2VzLCAtMSkgPT0gMSkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgeyBkZWxldGUgdGhpczsgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7IH0K
ICAgICAgICB9CiAgICB9CgogICAgX0ltcGwoY29uc3QgX0ltcGwmLCBzaXplX3QpOwogICAgX0lt
cGwoY29uc3QgY2hhciosIHNpemVfdCk7CiAgICBfSW1wbChmYWNldCoqLCBzaXplX3QsIGJvb2wp
OwoKICAgfl9JbXBsKCkgdGhyb3coKTsKCiAgICBfSW1wbChjb25zdCBfSW1wbCYpOwoKICAgIHZv
aWQKICAgIG9wZXJhdG9yPShjb25zdCBfSW1wbCYpOwoKICAgIGlubGluZSBib29sCiAgICBfTV9j
aGVja19zYW1lX25hbWUoKQogICAgewogICAgICBib29sIF9fcmV0ID0gdHJ1ZTsKICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IF9fcmV0ICYmIGkgPCBfU19udW1fY2F0ZWdvcmllcyAtIDE7ICsraSkK
ICAgICAgICBfX3JldCAmPSAoc3RyY21wKF9NX25hbWVzW2ldLCBfTV9uYW1lc1tpICsgMV0pID09
IDApOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9j
YXRlZ29yaWVzKGNvbnN0IF9JbXBsKiwgY2F0ZWdvcnkpOwoKICAgIHZvaWQKICAgIF9NX3JlcGxh
Y2VfY2F0ZWdvcnkoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCopOwoKICAg
IHZvaWQKICAgIF9NX3JlcGxhY2VfZmFjZXQoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6Omlk
Kik7CgogICAgdm9pZAogICAgX01faW5zdGFsbF9mYWNldChjb25zdCBsb2NhbGU6OmlkKiwgZmFj
ZXQqKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGlubGluZSB2b2lkCiAg
ICAgIF9NX2luaXRfZmFjZXQoX0ZhY2V0KiBfX2ZhY2V0KQogICAgICB7IF9NX2luc3RhbGxfZmFj
ZXQoJl9GYWNldDo6aWQsIF9fZmFjZXQpOyB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zh
Y2V0PgogICAgbG9jYWxlOjpsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9f
ZikKICAgIHsKICAgICAgX01faW1wbCA9IG5ldyBfSW1wbCgqX19vdGhlci5fTV9pbXBsLCAxKTsK
ICAgICAgX01faW1wbC0+X01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19mKTsKICAgICAg
Zm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX1NfbnVtX2NhdGVnb3JpZXM7ICsrX19pKQogICAg
ICAgIF9NX2ltcGwtPl9NX25hbWVzW19faV0gPSAiKiI7CiAgICB9CgoKICBjbGFzcyBsb2NhbGU6
OmZhY2V0CiAgewogIHByaXZhdGU6CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOwogICAgZnJpZW5k
IGNsYXNzIGxvY2FsZTo6X0ltcGw7CgogICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7Cgog
IHByb3RlY3RlZDoKCgogICAgc3RhdGljIF9fY19sb2NhbGUgX1NfY19sb2NhbGU7CgogICAgZXhw
bGljaXQKICAgIGZhY2V0KHNpemVfdCBfX3JlZnMgPSAwKSB0aHJvdygpOwoKICAgIHZpcnR1YWwK
ICAgIH5mYWNldCgpOwoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19jcmVhdGVfY19sb2NhbGUoX19j
X2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAg
X19jX2xvY2FsZSBfX29sZCA9IDApOwoKICAgIHN0YXRpYyBfX2NfbG9jYWxlCiAgICBfU19jbG9u
ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOwoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19k
ZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYyk7CgogIHByaXZhdGU6CiAgICB2b2lk
CiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICB2b2lkCiAgICBfTV9yZW1vdmVf
cmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICBmYWNldChjb25zdCBmYWNldCYpOwoKICAgIHZvaWQK
ICAgIG9wZXJhdG9yPShjb25zdCBmYWNldCYpOwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjppZAog
IHsKICBwcml2YXRlOgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBs
b2NhbGU6Ol9JbXBsOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQg
Y29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CiAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25z
dCBsb2NhbGUmKSB0aHJvdyAoKTsKCgoKCiAgICBtdXRhYmxlIHNpemVfdCBfTV9pbmRleDsKCgog
ICAgc3RhdGljIF9BdG9taWNfd29yZCBfU19oaWdod2F0ZXI7CgogICAgdm9pZAogICAgb3BlcmF0
b3I9KGNvbnN0IGlkJik7CgogICAgaWQoY29uc3QgaWQmKTsKCiAgcHVibGljOgoKCiAgICBpZCgp
OwoKICAgIGlubGluZSBzaXplX3QKICAgIF9NX2lkKCkgY29uc3QKICAgIHsKICAgICAgaWYgKCFf
TV9pbmRleCkKICAgICAgICBfTV9pbmRleCA9IDEgKyBfX2V4Y2hhbmdlX2FuZF9hZGQoJl9TX2hp
Z2h3YXRlciwgMSk7CiAgICAgIHJldHVybiBfTV9pbmRleCAtIDE7CiAgICB9CiAgfTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0KGNv
bnN0IGxvY2FsZSYgX19sb2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBib29s
CiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKTsKfQoKCgoKCgpuYW1l
c3BhY2Ugc3RkCnsKCgoKCiAgZW51bSBfSW9zX0ZtdGZsYWdzIHsgX01faW9zX2ZtdGZsYWdzX2Vu
ZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3ImKF9Jb3Nf
Rm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdz
KHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5s
aW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcnwoX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10
ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2Ep
IHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9w
ZXJhdG9yXihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4g
X0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9f
YikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8PShfSW9zX0ZtdGZsYWdz
JiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoK
ICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yJj0oX0lvc19GbXRmbGFncyYgX19hLCBf
SW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5l
IF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl49KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRm
bGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBfSW9zX0Zt
dGZsYWdzCiAgb3BlcmF0b3J+KF9Jb3NfRm10ZmxhZ3MgX19hKQogIHsgcmV0dXJuIF9Jb3NfRm10
ZmxhZ3MofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCgogIGVudW0gX0lvc19PcGVubW9kZSB7
IF9NX2lvc19vcGVubW9kZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19PcGVubW9k
ZQogIG9wZXJhdG9yJihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyBy
ZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxp
bnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J8KF9Jb3NfT3Bl
bm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0
YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5l
IF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcl4oX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1v
ZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4g
c3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJh
dG9yfD0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBf
X2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciY9KF9J
b3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19h
ICYgX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3JePShfSW9zX09wZW5t
b2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsg
fQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfihfSW9zX09wZW5tb2RlIF9fYSkK
ICB7IHJldHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgoKICBl
bnVtIF9Jb3NfSW9zdGF0ZSB7IF9NX2lvc19pb3N0YXRlX2VuZCA9IDFMIDw8IDE2IH07CgogIGlu
bGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciYoX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0
YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpICYg
c3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0
b3J8KF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19J
b3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0K
CiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXihfSW9zX0lvc3RhdGUgX19hLCBfSW9z
X0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9f
YSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBv
cGVyYXRvcnw9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJu
IF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3ImPShf
SW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2Eg
JiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXj0oX0lvc19Jb3N0YXRl
JiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9Cgog
IGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcn4oX0lvc19Jb3N0YXRlIF9fYSkKICB7IHJl
dHVybiBfSW9zX0lvc3RhdGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCiAgZW51bSBfSW9z
X1NlZWtkaXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAxTCA8PCAxNiB9OwoKCiAgY2xhc3MgaW9z
X2Jhc2UKICB7CiAgcHVibGljOgoKCiAgICBjbGFzcyBmYWlsdXJlIDogcHVibGljIGV4Y2VwdGlv
bgogICAgewogICAgcHVibGljOgoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGZhaWx1cmUoY29uc3Qg
c3RyaW5nJiBfX3N0cikgdGhyb3coKTsKCgoKICAgICAgdmlydHVhbAogICAgICB+ZmFpbHVyZSgp
IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIHdoYXQoKSBjb25zdCB0
aHJvdygpOwoKICAgIHByaXZhdGU6CiAgICAgIGVudW0geyBfTV9idWZzaXplID0gMjU2IH07CiAg
ICAgIGNoYXIgX01fbmFtZVtfTV9idWZzaXplXTsKCiAgICB9OwoKCiAgICB0eXBlZGVmIF9Jb3Nf
Rm10ZmxhZ3MgZm10ZmxhZ3M7CgogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGJvb2xhbHBoYSA9
IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19ib29sYWxwaGEpOwogICAgc3RhdGljIGNvbnN0IGZt
dGZsYWdzIGRlYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19kZWMpOwogICAgc3RhdGljIGNv
bnN0IGZtdGZsYWdzIGZpeGVkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ZpeGVkKTsKICAg
IHN0YXRpYyBjb25zdCBmbXRmbGFncyBoZXggPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfaGV4
KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBpbnRlcm5hbCA9IGZtdGZsYWdzKF9faW9zX2Zs
YWdzOjpfU19pbnRlcm5hbCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgbGVmdCA9IGZtdGZs
YWdzKF9faW9zX2ZsYWdzOjpfU19sZWZ0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBvY3Qg
PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfb2N0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFn
cyByaWdodCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19yaWdodCk7CiAgICBzdGF0aWMgY29u
c3QgZm10ZmxhZ3Mgc2NpZW50aWZpYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zY2llbnRp
ZmljKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93YmFzZSA9IGZtdGZsYWdzKF9faW9z
X2ZsYWdzOjpfU19zaG93YmFzZSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3BvaW50
ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dwb2ludCk7CiAgICBzdGF0aWMgY29uc3Qg
Zm10ZmxhZ3Mgc2hvd3BvcyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9zKTsKICAg
IHN0YXRpYyBjb25zdCBmbXRmbGFncyBza2lwd3MgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nf
c2tpcHdzKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1bml0YnVmID0gZm10ZmxhZ3MoX19p
b3NfZmxhZ3M6Ol9TX3VuaXRidWYpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVwcGVyY2Fz
ZSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU191cHBlcmNhc2UpOwogICAgc3RhdGljIGNvbnN0
IGZtdGZsYWdzIGFkanVzdGZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2FkanVzdGZp
ZWxkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBiYXNlZmllbGQgPSBmbXRmbGFncyhfX2lv
c19mbGFnczo6X1NfYmFzZWZpZWxkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmbG9hdGZp
ZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Zsb2F0ZmllbGQpOwoKCiAgICB0eXBlZGVm
IF9Jb3NfSW9zdGF0ZSBpb3N0YXRlOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgYmFkYml0ID0g
aW9zdGF0ZShfX2lvc19mbGFnczo6X1NfYmFkYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRl
IGVvZmJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2VvZmJpdCk7CiAgICBzdGF0aWMgY29u
c3QgaW9zdGF0ZSBmYWlsYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfZmFpbGJpdCk7CiAg
ICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBnb29kYml0ID0gaW9zdGF0ZSgwKTsKCgogICAgdHlwZWRl
ZiBfSW9zX09wZW5tb2RlIG9wZW5tb2RlOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGFwcCA9
IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hcHApOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2Rl
IGF0ZSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hdGUpOwogICAgc3RhdGljIGNvbnN0IG9w
ZW5tb2RlIGJpbmFyeSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19iaW4pOwogICAgc3RhdGlj
IGNvbnN0IG9wZW5tb2RlIGluID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2luKTsKICAgIHN0
YXRpYyBjb25zdCBvcGVubW9kZSBvdXQgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1Nfb3V0KTsK
ICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSB0cnVuYyA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpf
U190cnVuYyk7CgoKICAgIHR5cGVkZWYgX0lvc19TZWVrZGlyIHNlZWtkaXI7CiAgICBzdGF0aWMg
Y29uc3Qgc2Vla2RpciBiZWcgPSBzZWVrZGlyKDApOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIg
Y3VyID0gc2Vla2RpcigxKTsKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGVuZCA9IHNlZWtkaXIo
Mik7CgogICAgZW51bSBldmVudAogICAgewogICAgICBlcmFzZV9ldmVudCwKICAgICAgaW1idWVf
ZXZlbnQsCiAgICAgIGNvcHlmbXRfZXZlbnQKICAgIH07CgogICAgdHlwZWRlZiB2b2lkICgqZXZl
bnRfY2FsbGJhY2spIChldmVudCwgaW9zX2Jhc2UmLCBpbnQpOwoKICAgIHZvaWQKICAgIHJlZ2lz
dGVyX2NhbGxiYWNrKGV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4KTsKCiAgcHJvdGVj
dGVkOgoKICAgIHN0cmVhbXNpemUgX01fcHJlY2lzaW9uOwogICAgc3RyZWFtc2l6ZSBfTV93aWR0
aDsKICAgIGZtdGZsYWdzIF9NX2ZsYWdzOwogICAgaW9zdGF0ZSBfTV9leGNlcHRpb247CiAgICBp
b3N0YXRlIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsKCgoKICAgIHN0cnVjdCBfQ2FsbGJhY2tfbGlzdAog
ICAgewoKICAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX25leHQ7CiAgICAgIGlvc19iYXNlOjpldmVu
dF9jYWxsYmFjayBfTV9mbjsKICAgICAgaW50IF9NX2luZGV4OwogICAgICBfQXRvbWljX3dvcmQg
X01fcmVmY291bnQ7CgogICAgICBfQ2FsbGJhY2tfbGlzdChpb3NfYmFzZTo6ZXZlbnRfY2FsbGJh
Y2sgX19mbiwgaW50IF9faW5kZXgsCiAgICAgICAgICAgICAgICAgICAgIF9DYWxsYmFja19saXN0
KiBfX2NiKQogICAgICA6IF9NX25leHQoX19jYiksIF9NX2ZuKF9fZm4pLCBfTV9pbmRleChfX2lu
ZGV4KSwgX01fcmVmY291bnQoMCkgeyB9CgogICAgICB2b2lkCiAgICAgIF9NX2FkZF9yZWZlcmVu
Y2UoKSB7IF9fYXRvbWljX2FkZCgmX01fcmVmY291bnQsIDEpOyB9CgoKICAgICAgaW50CiAgICAg
IF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB7IHJldHVybiBfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3Jl
ZmNvdW50LCAtMSk7IH0KICAgIH07CgogICAgIF9DYWxsYmFja19saXN0KiBfTV9jYWxsYmFja3M7
CgogICAgdm9pZAogICAgX01fY2FsbF9jYWxsYmFja3MoZXZlbnQgX19ldikgdGhyb3coKTsKCiAg
ICB2b2lkCiAgICBfTV9kaXNwb3NlX2NhbGxiYWNrcyh2b2lkKTsKCgogICAgc3RydWN0IF9Xb3Jk
cwogICAgewogICAgICB2b2lkKiBfTV9wd29yZDsKICAgICAgbG9uZyBfTV9pd29yZDsKICAgICAg
X1dvcmRzKCkgOiBfTV9wd29yZCgwKSwgX01faXdvcmQoMCkgeyB9CiAgICB9OwoKCiAgICBfV29y
ZHMgX01fd29yZF96ZXJvOwoKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX2xvY2FsX3dvcmRfc2l6
ZSA9IDg7CiAgICBfV29yZHMgX01fbG9jYWxfd29yZFtfU19sb2NhbF93b3JkX3NpemVdOwoKCiAg
ICBpbnQgX01fd29yZF9zaXplOwogICAgX1dvcmRzKiBfTV93b3JkOwoKICAgIF9Xb3JkcyYKICAg
IF9NX2dyb3dfd29yZHMoaW50IF9faW5kZXgpOwoKCiAgICBsb2NhbGUgX01faW9zX2xvY2FsZTsK
CiAgICB2b2lkCiAgICBfTV9pbml0KCk7CgogIHB1YmxpYzoKCgoKCgogICAgY2xhc3MgSW5pdAog
ICAgewogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7CiAgICBwdWJsaWM6CiAgICAgIEluaXQo
KTsKICAgICAgfkluaXQoKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2lvc19jcmVhdGUo
Ym9vbCBfX3N5bmMpOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfaW9zX2Rlc3Ryb3koKTsK
CiAgICBwcml2YXRlOgogICAgICBzdGF0aWMgaW50IF9TX2lvc19iYXNlX2luaXQ7CiAgICAgIHN0
YXRpYyBib29sIF9TX3N5bmNlZF93aXRoX3N0ZGlvOwogICAgfTsKCgogICAgaW5saW5lIGZtdGZs
YWdzCiAgICBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9NX2ZsYWdzOyB9CgogICAgaW5saW5lIGZt
dGZsYWdzCiAgICBmbGFncyhmbXRmbGFncyBfX2ZtdGZsKQogICAgewogICAgICBmbXRmbGFncyBf
X29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyA9IF9fZm10Zmw7CiAgICAgIHJldHVybiBf
X29sZDsKICAgIH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRm
bCkKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3Mg
fD0gX19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBmbXRmbGFn
cwogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsLCBmbXRmbGFncyBfX21hc2spCiAgICB7CiAgICAg
IGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzICY9IH5fX21hc2s7CiAg
ICAgIF9NX2ZsYWdzIHw9IChfX2ZtdGZsICYgX19tYXNrKTsKICAgICAgcmV0dXJuIF9fb2xkOwog
ICAgfQoKICAgIGlubGluZSB2b2lkCiAgICB1bnNldGYoZm10ZmxhZ3MgX19tYXNrKSB7IF9NX2Zs
YWdzICY9IH5fX21hc2s7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgcHJlY2lzaW9uKCkg
Y29uc3QgeyByZXR1cm4gX01fcHJlY2lzaW9uOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAg
IHByZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29s
ZCA9IF9NX3ByZWNpc2lvbjsKICAgICAgX01fcHJlY2lzaW9uID0gX19wcmVjOwogICAgICByZXR1
cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gX01fd2lkdGg7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoc3Ry
ZWFtc2l6ZSBfX3dpZGUpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV93aWR0aDsK
ICAgICAgX01fd2lkdGggPSBfX3dpZGU7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBz
dGF0aWMgYm9vbAogICAgc3luY193aXRoX3N0ZGlvKGJvb2wgX19zeW5jID0gdHJ1ZSk7CgoKICAg
IGxvY2FsZQogICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAgaW5saW5lIGxvY2Fs
ZQogICAgZ2V0bG9jKCkgY29uc3QgeyByZXR1cm4gX01faW9zX2xvY2FsZTsgfQoKCiAgICBzdGF0
aWMgaW50CiAgICB4YWxsb2MoKSB0aHJvdygpOwoKICAgIGlubGluZSBsb25nJgogICAgaXdvcmQo
aW50IF9faXgpCiAgICB7CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXggPCBfTV93b3JkX3Np
emUpCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29yZFtfX2l4XSA6IF9NX2dyb3dfd29y
ZHMoX19peCk7CiAgICAgIHJldHVybiBfX3dvcmQuX01faXdvcmQ7CiAgICB9CgogICAgaW5saW5l
IHZvaWQqJgogICAgcHdvcmQoaW50IF9faXgpCiAgICB7CiAgICAgIF9Xb3JkcyYgX193b3JkID0g
KF9faXggPCBfTV93b3JkX3NpemUpCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29yZFtf
X2l4XSA6IF9NX2dyb3dfd29yZHMoX19peCk7CiAgICAgIHJldHVybiBfX3dvcmQuX01fcHdvcmQ7
CiAgICB9CgoKICAgIH5pb3NfYmFzZSgpOwoKICBwcm90ZWN0ZWQ6CiAgICBpb3NfYmFzZSgpOwoK
CgogIHByaXZhdGU6CiAgICBpb3NfYmFzZShjb25zdCBpb3NfYmFzZSYpOwoKICAgIGlvc19iYXNl
JgogICAgb3BlcmF0b3I9KGNvbnN0IGlvc19iYXNlJik7CgogIH07CgoKICBpbmxpbmUgaW9zX2Jh
c2UmCiAgYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9z
X2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19i
YXNlJgogIG5vYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0
Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg
aW9zX2Jhc2UmCiAgc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0
Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBp
b3NfYmFzZSYKICBub3Nob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVu
c2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu
ZSBpb3NfYmFzZSYKICBzaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uu
c2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxp
bmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jh
c2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9Cgog
IGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9zKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i
YXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlu
bGluZSBpb3NfYmFzZSYKICBub3Nob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jh
c2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBp
bmxpbmUgaW9zX2Jhc2UmCiAgc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNl
LnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l
IGlvc19iYXNlJgogIG5vc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVu
c2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg
aW9zX2Jhc2UmCiAgdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNl
dGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l
IGlvc19iYXNlJgogIG5vdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNl
LnVuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBp
bmxpbmUgaW9zX2Jhc2UmCiAgdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jh
c2Uuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlu
bGluZSBpb3NfYmFzZSYKICBub3VuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19i
YXNlLnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgoK
ICBpbmxpbmUgaW9zX2Jhc2UmCiAgaW50ZXJuYWwoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAg
X19iYXNlLnNldGYoaW9zX2Jhc2U6OmludGVybmFsLCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwog
ICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbGVmdChpb3NfYmFz
ZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpsZWZ0LCBpb3NfYmFzZTo6
YWRqdXN0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYK
ICByaWdodChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpy
aWdodCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAg
aW5saW5lIGlvc19iYXNlJgogIGRlYyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5z
ZXRmKGlvc19iYXNlOjpkZWMsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFz
ZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBoZXgoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAg
ICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJl
dHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgb2N0KGlvc19iYXNlJiBfX2Jh
c2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6Om9jdCwgaW9zX2Jhc2U6OmJhc2VmaWVs
ZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBmaXhlZChp
b3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpmaXhlZCwgaW9z
X2Jhc2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3Nf
YmFzZSYKICBzY2llbnRpZmljKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYo
aW9zX2Jhc2U6OnNjaWVudGlmaWMsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBf
X2Jhc2U7CiAgfQoKfQoKCgoKCgoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0
cmVhbWJ1ZnMoYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9pb3MsCiAgICAgICAgICAgICAg
ICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmluLAogICAgICAg
ICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQp
OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xh
c3MgYmFzaWNfc3RyZWFtYnVmCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFy
VCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVm
IGN0eXBlPGNoYXJfdHlwZT4gX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVh
bWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpzdGF0ZV90eXBlIF9fc3RhdGVfdHlwZTsKCiAgICAg
IGZyaWVuZCBjbGFzcyBiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZy
aWVuZCBjbGFzcyBiYXNpY19pc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBm
cmllbmQgY2xhc3MgYmFzaWNfb3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAg
ZnJpZW5kIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47
CiAgICAgIGZyaWVuZCBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRz
X3R5cGU+OwoKICAgICAgZnJpZW5kIHN0cmVhbXNpemUKICAgICAgX19jb3B5X3N0cmVhbWJ1ZnM8
PihiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4mIF9faW9zLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbixfX3N0cmVhbWJ1Zl90eXBlKiBf
X3Nib3V0KTsKCiAgICBwcm90ZWN0ZWQ6CgoKCgoKICAgICAgY2hhcl90eXBlKiBfTV9idWY7CgoK
ICAgICAgc2l6ZV90IF9NX2J1Zl9zaXplOwoKCiAgICAgIHNpemVfdCBfTV9idWZfc2l6ZV9vcHQ7
CgoKCiAgICAgIGJvb2wgX01fYnVmX3VuaWZpZWQ7CgoKCgoKCiAgICAgIGNoYXJfdHlwZSogX01f
aW5fYmVnOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2N1cjsKICAgICAgY2hhcl90eXBlKiBfTV9p
bl9lbmQ7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2JlZzsKICAgICAgY2hhcl90eXBlKiBfTV9v
dXRfY3VyOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9lbmQ7CgoKICAgICAgaW9zX2Jhc2U6Om9w
ZW5tb2RlIF9NX21vZGU7CgoKICAgICAgbG9jYWxlIF9NX2J1Zl9sb2NhbGU7CgoKICAgICAgYm9v
bCBfTV9idWZfbG9jYWxlX2luaXQ7CgoKCgoKCiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1Nf
cGJhY2tfc2l6ZSA9IDE7CiAgICAgIGNoYXJfdHlwZSBfTV9wYmFja1tfU19wYmFja19zaXplXTsK
ICAgICAgY2hhcl90eXBlKiBfTV9wYmFja19jdXJfc2F2ZTsKICAgICAgY2hhcl90eXBlKiBfTV9w
YmFja19lbmRfc2F2ZTsKICAgICAgYm9vbCBfTV9wYmFja19pbml0OwoKCiAgICAgIGZwb3M8X19z
dGF0ZV90eXBlPiBfTV9wb3M7CgoKCgogICAgICB2b2lkCiAgICAgIF9NX3BiYWNrX2NyZWF0ZSgp
CiAgICAgIHsKICAgICAgICBpZiAoIV9NX3BiYWNrX2luaXQpCiAgICAgICAgICB7CiAgICAgICAg
ICAgIHNpemVfdCBfX2Rpc3QgPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgICAgIHNp
emVfdCBfX2xlbiA9IG1pbihfU19wYmFja19zaXplLCBfX2Rpc3QpOwogICAgICAgICAgICB0cmFp
dHNfdHlwZTo6Y29weShfTV9wYmFjaywgX01faW5fY3VyLCBfX2xlbik7CiAgICAgICAgICAgIF9N
X3BiYWNrX2N1cl9zYXZlID0gX01faW5fY3VyOwogICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2
ZSA9IF9NX2luX2VuZDsKICAgICAgICAgICAgdGhpcy0+c2V0ZyhfTV9wYmFjaywgX01fcGJhY2ss
IF9NX3BiYWNrICsgX19sZW4pOwogICAgICAgICAgICBfTV9wYmFja19pbml0ID0gdHJ1ZTsKICAg
ICAgICAgIH0KICAgICAgfQoKCgoKICAgICAgdm9pZAogICAgICBfTV9wYmFja19kZXN0cm95KCkK
ICAgICAgewogICAgICAgIGlmIChfTV9wYmFja19pbml0KQogICAgICAgICAgewoKICAgICAgICAg
ICAgc2l6ZV90IF9fb2ZmX2N1ciA9IF9NX2luX2N1ciAtIF9NX3BiYWNrOwoKCiAgICAgICAgICAg
IHNpemVfdCBfX29mZl9lbmQgPSAwOwogICAgICAgICAgICBzaXplX3QgX19wYmFja19sZW4gPSBf
TV9pbl9lbmQgLSBfTV9wYmFjazsKICAgICAgICAgICAgc2l6ZV90IF9fc2F2ZV9sZW4gPSBfTV9w
YmFja19lbmRfc2F2ZSAtIF9NX2J1ZjsKICAgICAgICAgICAgaWYgKF9fcGJhY2tfbGVuID4gX19z
YXZlX2xlbikKICAgICAgICAgICAgICBfX29mZl9lbmQgPSBfX3BiYWNrX2xlbiAtIF9fc2F2ZV9s
ZW47CgogICAgICAgICAgICB0aGlzLT5zZXRnKF9NX2J1ZiwgX01fcGJhY2tfY3VyX3NhdmUgKyBf
X29mZl9jdXIsCiAgICAgICAgICAgICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgKyBfX29m
Zl9lbmQpOwogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9fbnVsbDsKICAgICAgICAg
ICAgX01fcGJhY2tfZW5kX3NhdmUgPSBfX251bGw7CiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQg
PSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgfQoKCgogICAgICB2b2lkCiAgICAgIF9NX2luX2N1
cl9tb3ZlKG9mZl90eXBlIF9fbikKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01f
b3V0X2N1cjsKICAgICAgICBfTV9pbl9jdXIgKz0gX19uOwogICAgICAgIGlmIChfX3Rlc3RvdXQg
JiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBfTV9vdXRfY3VyICs9IF9fbjsKICAgICAgfQoK
ICAgICAgdm9pZAogICAgICBfTV9vdXRfY3VyX21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAg
ICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX2luX2N1cjsKCiAgICAgICAgX01fb3V0X2N1ciArPSBf
X247CiAgICAgICAgaWYgKF9fdGVzdGluICYmIF9NX2J1Zl91bmlmaWVkKQogICAgICAgICAgX01f
aW5fY3VyICs9IF9fbjsKICAgICAgICBpZiAoX01fb3V0X2N1ciA+IF9NX291dF9lbmQpCiAgICAg
ICAgICB7CiAgICAgICAgICAgIF9NX291dF9lbmQgPSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAg
aWYgKF9fdGVzdGluKQogICAgICAgICAgICAgIF9NX2luX2VuZCArPSBfX247CiAgICAgICAgICB9
CiAgICAgIH0KCgoKCiAgICAgIG9mZl90eXBlCiAgICAgIF9NX291dF9idWZfc2l6ZSgpCiAgICAg
IHsKICAgICAgICBvZmZfdHlwZSBfX3JldCA9IDA7CiAgICAgICAgaWYgKF9NX291dF9jdXIpCiAg
ICAgICAgICB7CgogICAgICAgICAgICBpZiAoX01fb3V0X2JlZyA9PSBfTV9idWYpCiAgICAgICAg
ICAgICAgX19yZXQgPSBfTV9vdXRfYmVnICsgX01fYnVmX3NpemUgLSBfTV9vdXRfY3VyOwoKICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fcmV0ID0gX01fb3V0X2VuZCAtIF9NX291dF9j
dXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogIHB1YmxpYzoK
ICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfc3RyZWFtYnVmKCkKICAgICAgewogICAgICAgIF9N
X2J1Zl91bmlmaWVkID0gZmFsc2U7CiAgICAgICAgX01fYnVmX3NpemUgPSAwOwogICAgICAgIF9N
X2J1Zl9zaXplX29wdCA9IDA7CiAgICAgICAgX01fbW9kZSA9IGlvc19iYXNlOjpvcGVubW9kZSgw
KTsKICAgICAgICBfTV9idWZfbG9jYWxlX2luaXQgPSBmYWxzZTsKICAgICAgfQoKCiAgICAgIGxv
Y2FsZQogICAgICBwdWJpbWJ1ZShjb25zdCBsb2NhbGUgJl9fbG9jKQogICAgICB7CiAgICAgICAg
bG9jYWxlIF9fdG1wKHRoaXMtPmdldGxvYygpKTsKICAgICAgICB0aGlzLT5pbWJ1ZShfX2xvYyk7
CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBsb2NhbGUKICAgICAgZ2V0bG9j
KCkgY29uc3QKICAgICAgewogICAgICAgIGlmIChfTV9idWZfbG9jYWxlX2luaXQpCiAgICAgICAg
ICByZXR1cm4gX01fYnVmX2xvY2FsZTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gbG9j
YWxlKCk7CiAgICAgIH0KCgogICAgICBfX3N0cmVhbWJ1Zl90eXBlKgogICAgICBwdWJzZXRidWYo
Y2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5zZXRi
dWYoX19zLCBfX24pOyB9CgogICAgICBwb3NfdHlwZQogICAgICBwdWJzZWVrb2ZmKG9mZl90eXBl
IF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwKICAgICAgICAgICAgICAgICBpb3NfYmFz
ZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAg
eyByZXR1cm4gdGhpcy0+c2Vla29mZihfX29mZiwgX193YXksIF9fbW9kZSk7IH0KCiAgICAgIHBv
c190eXBlCiAgICAgIHB1YnNlZWtwb3MocG9zX3R5cGUgX19zcCwKICAgICAgICAgICAgICAgICBp
b3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkK
ICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla3BvcyhfX3NwLCBfX21vZGUpOyB9CgogICAgICBpbnQK
ICAgICAgcHVic3luYygpIHsgcmV0dXJuIHRoaXMtPnN5bmMoKTsgfQoKCgogICAgICBzdHJlYW1z
aXplCiAgICAgIGluX2F2YWlsKCkKICAgICAgewogICAgICAgIHN0cmVhbXNpemUgX19yZXQ7CiAg
ICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICB7
CiAgICAgICAgICAgIGlmIChfTV9wYmFja19pbml0KQogICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIHNpemVfdCBfX3NhdmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUgLSBfTV9wYmFja19j
dXJfc2F2ZTsKICAgICAgICAgICAgICAgIHNpemVfdCBfX3BiYWNrX2xlbiA9IF9NX2luX2N1ciAt
IF9NX3BiYWNrOwogICAgICAgICAgICAgICAgX19yZXQgPSBfX3NhdmVfbGVuIC0gX19wYmFja19s
ZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgX19yZXQg
PSB0aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0cigpOwogICAgICAgICAgfQogICAgICAgIGVsc2UK
ICAgICAgICAgIF9fcmV0ID0gdGhpcy0+c2hvd21hbnljKCk7CiAgICAgICAgcmV0dXJuIF9fcmV0
OwogICAgICB9CgogICAgICBpbnRfdHlwZQogICAgICBzbmV4dGMoKQogICAgICB7CiAgICAgICAg
aW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgcmV0dXJuICh0cmFp
dHNfdHlwZTo6ZXFfaW50X3R5cGUodGhpcy0+c2J1bXBjKCksIF9fZW9mKQogICAgICAgICAgICAg
ICAgPyBfX2VvZiA6IHRoaXMtPnNnZXRjKCkpOwogICAgICB9CgogICAgICBpbnRfdHlwZQogICAg
ICBzYnVtcGMoKTsKCiAgICAgIGludF90eXBlCiAgICAgIHNnZXRjKCkKICAgICAgewogICAgICAg
IGludF90eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01f
aW5fZW5kKQogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKih0aGlz
LT5ncHRyKCkpKTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3JldCA9IHRoaXMtPnVuZGVyZmxv
dygpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICAgICAgc3RyZWFtc2l6ZQogICAg
ICBzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRo
aXMtPnhzZ2V0bihfX3MsIF9fbik7IH0KCgogICAgICBpbnRfdHlwZQogICAgICBzcHV0YmFja2Mo
Y2hhcl90eXBlIF9fYyk7CgogICAgICBpbnRfdHlwZQogICAgICBzdW5nZXRjKCk7CgoKICAgICAg
aW50X3R5cGUKICAgICAgc3B1dGMoY2hhcl90eXBlIF9fYyk7CgogICAgICBzdHJlYW1zaXplCiAg
ICAgIHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyBy
ZXR1cm4gdGhpcy0+eHNwdXRuKF9fcywgX19uKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgYmFz
aWNfc3RyZWFtYnVmKCkKICAgICAgOiBfTV9idWYoX19udWxsKSwgX01fYnVmX3NpemUoMCksIF9N
X2J1Zl9zaXplX29wdCg4MTkyKSwKICAgICAgX01fYnVmX3VuaWZpZWQoZmFsc2UpLCBfTV9pbl9i
ZWcoMCksIF9NX2luX2N1cigwKSwgX01faW5fZW5kKDApLAogICAgICBfTV9vdXRfYmVnKDApLCBf
TV9vdXRfY3VyKDApLCBfTV9vdXRfZW5kKDApLAogICAgICBfTV9tb2RlKGlvc19iYXNlOjpvcGVu
bW9kZSgwKSksIF9NX2J1Zl9sb2NhbGUobG9jYWxlKCkpLAogICAgICBfTV9idWZfbG9jYWxlX2lu
aXQoZmFsc2UpLCBfTV9wYmFja19jdXJfc2F2ZSgwKSwgX01fcGJhY2tfZW5kX3NhdmUoMCksCiAg
ICAgIF9NX3BiYWNrX2luaXQoZmFsc2UpCiAgICAgIHsgfQoKCiAgICAgIGNoYXJfdHlwZSoKICAg
ICAgZWJhY2soKSBjb25zdCB7IHJldHVybiBfTV9pbl9iZWc7IH0KCiAgICAgIGNoYXJfdHlwZSoK
ICAgICAgZ3B0cigpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2N1cjsgfQoKICAgICAgY2hhcl90eXBl
KgogICAgICBlZ3B0cigpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2VuZDsgfQoKICAgICAgdm9pZAog
ICAgICBnYnVtcChpbnQgX19uKSB7IF9NX2luX2N1ciArPSBfX247IH0KCiAgICAgIHZvaWQKICAg
ICAgc2V0ZyhjaGFyX3R5cGUqIF9fZ2JlZywgY2hhcl90eXBlKiBfX2duZXh0LCBjaGFyX3R5cGUq
IF9fZ2VuZCkKICAgICAgewogICAgICAgIF9NX2luX2JlZyA9IF9fZ2JlZzsKICAgICAgICBfTV9p
bl9jdXIgPSBfX2duZXh0OwogICAgICAgIF9NX2luX2VuZCA9IF9fZ2VuZDsKICAgICAgICBpZiAo
IShfTV9tb2RlICYgaW9zX2Jhc2U6OmluKSAmJiBfX2diZWcgJiYgX19nbmV4dCAmJiBfX2dlbmQp
CiAgICAgICAgICBfTV9tb2RlID0gX01fbW9kZSB8IGlvc19iYXNlOjppbjsKICAgICAgfQoKCiAg
ICAgIGNoYXJfdHlwZSoKICAgICAgcGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfYmVnOyB9
CgogICAgICBjaGFyX3R5cGUqCiAgICAgIHBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfY3Vy
OyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0
X2VuZDsgfQoKICAgICAgdm9pZAogICAgICBwYnVtcChpbnQgX19uKSB7IF9NX291dF9jdXIgKz0g
X19uOyB9CgogICAgICB2b2lkCiAgICAgIHNldHAoY2hhcl90eXBlKiBfX3BiZWcsIGNoYXJfdHlw
ZSogX19wZW5kKQogICAgICB7CiAgICAgICAgX01fb3V0X2JlZyA9IF9NX291dF9jdXIgPSBfX3Bi
ZWc7CiAgICAgICAgX01fb3V0X2VuZCA9IF9fcGVuZDsKICAgICAgICBpZiAoIShfTV9tb2RlICYg
aW9zX2Jhc2U6Om91dCkgJiYgX19wYmVnICYmIF9fcGVuZCkKICAgICAgICAgIF9NX21vZGUgPSBf
TV9tb2RlIHwgaW9zX2Jhc2U6Om91dDsKICAgICAgfQoKCgogICAgICB2aXJ0dWFsIHZvaWQKICAg
ICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgICAgewogICAgICAgIF9NX2J1Zl9sb2Nh
bGVfaW5pdCA9IHRydWU7CiAgICAgICAgaWYgKF9NX2J1Zl9sb2NhbGUgIT0gX19sb2MpCiAgICAg
ICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7CiAgICAgIH0KCgogICAgICB2aXJ0dWFsIGJhc2lj
X3N0cmVhbWJ1ZjxjaGFyX3R5cGUsX1RyYWl0cz4qCiAgICAgIHNldGJ1ZihjaGFyX3R5cGUqLCBz
dHJlYW1zaXplKQogICAgICB7IHJldHVybiB0aGlzOyB9CgogICAgICB2aXJ0dWFsIHBvc190eXBl
CiAgICAgIHNlZWtvZmYob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyLAogICAgICAgICAgICAg
IGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAg
IHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5
cGUKICAgICAgc2Vla3Bvcyhwb3NfdHlwZSwKICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1v
ZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiBwb3NfdHlw
ZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2aXJ0dWFsIGludAogICAgICBzeW5jKCkgeyByZXR1
cm4gMDsgfQoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICBzaG93bWFueWMoKSB7IHJl
dHVybiAwOyB9CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNnZXRuKGNoYXJfdHlw
ZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHVu
ZGVyZmxvdygpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQoKICAgICAgdmly
dHVhbCBpbnRfdHlwZQogICAgICB1ZmxvdygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX3Jl
dCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBib29sIF9fdGVzdGVvZiA9IHRyYWl0c190
eXBlOjplcV9pbnRfdHlwZSh0aGlzLT51bmRlcmZsb3coKSwgX19yZXQpOwogICAgICAgIGJvb2wg
X190ZXN0cGVuZGluZyA9IF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQ7CiAgICAg
ICAgaWYgKCFfX3Rlc3Rlb2YgJiYgX190ZXN0cGVuZGluZykKICAgICAgICAgIHsKICAgICAgICAg
ICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7CiAgICAgICAg
ICAgICsrX01faW5fY3VyOwogICAgICAgICAgICBpZiAoX01fYnVmX3VuaWZpZWQgJiYgX01fbW9k
ZSAmIGlvc19iYXNlOjpvdXQpCiAgICAgICAgICAgICAgKytfTV9vdXRfY3VyOwogICAgICAgICAg
fQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUK
ICAgICAgcGJhY2tmYWlsKGludF90eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICB7IHJl
dHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAg
ICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICB2
aXJ0dWFsIGludF90eXBlCiAgICAgIG92ZXJmbG93KGludF90eXBlID0gdHJhaXRzX3R5cGU6OmVv
ZigpKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCiAgICBwcml2YXRlOgog
ICAgICBiYXNpY19zdHJlYW1idWYoY29uc3QgX19zdHJlYW1idWZfdHlwZSYpIHsgfTsKCiAgICAg
IF9fc3RyZWFtYnVmX3R5cGUmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX3N0cmVhbWJ1Zl90eXBl
JikgeyByZXR1cm4gKnRoaXM7IH07CgogICAgfTsKfQoKCgoKCgoKCm5hbWVzcGFjZSBzdGQKewog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNvbnN0IHNp
emVfdAogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BiYWNrX3NpemU7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVu
YW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNf
c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2J1bXBjKCkKICAgIHsKICAgICAgaW50
X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5k
KQogICAgICAgIHsKICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqKHRoaXMtPmdwdHIoKSk7CiAg
ICAgICAgICBfTV9pbl9jdXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6
OnRvX2ludF90eXBlKF9fYyk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0
aGlzLT51ZmxvdygpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz46OgogICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90
eXBlIF9fcmV0OwogICAgICBib29sIF9fdGVzdHBvcyA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcg
PCBfTV9pbl9jdXI7CiAgICAgIGJvb2wgX190ZXN0bmUgPSBfTV9pbl9jdXIgJiYgIXRyYWl0c190
eXBlOjplcShfX2MsIHRoaXMtPmdwdHIoKVstMV0pOwogICAgICBpZiAoIV9fdGVzdHBvcyB8fCBf
X3Rlc3RuZSkKICAgICAgICBfX3JldCA9IHBiYWNrZmFpbCh0cmFpdHNfdHlwZTo6dG9faW50X3R5
cGUoX19jKSk7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgt
MSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+Z3B0
cigpKTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFt
YnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBzdW5nZXRjKCkKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAg
ICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyKQogICAgICAgIHsKICAg
ICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6
OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9f
cmV0ID0gdGhpcy0+cGJhY2tmYWlsKCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFt
ZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0
cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpCiAgICB7
CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01fb3V0X2J1Zl9zaXplKCkpCiAgICAg
ICAgewogICAgICAgICAgKl9NX291dF9jdXIgPSBfX2M7CiAgICAgICAgICBfTV9vdXRfY3VyX21v
dmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpOwog
ICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+b3ZlcmZsb3codHJhaXRz
X3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUK
ICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHhzZ2V0bihjaGFyX3R5
cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAw
OwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9f
YnVmX2xlbiA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAgICAgICAgIGlmIChfX2J1Zl9sZW4g
PiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9fcmVtYWluaW5nID0gX19u
IC0gX19yZXQ7CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gbWluKF9fYnVmX2xlbiwgX19y
ZW1haW5pbmcpOwogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01faW5fY3Vy
LCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQgKz0gX19sZW47CiAgICAgICAgICAgICAgX19z
ICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKF9fbGVuKTsKICAgICAgICAg
ICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGludF90eXBlIF9fYyA9IHRoaXMtPnVmbG93KCk7CiAgICAgICAgICAgICAgaWYgKCF0cmFp
dHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3MrKywgdHJh
aXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgICAgICAgKytfX3JldDsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVh
bXNpemUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHhzcHV0bihj
b25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVhbXNp
emUgX19yZXQgPSAwOwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAgICAgICAgewogICAgICAg
ICAgb2ZmX3R5cGUgX19idWZfbGVuID0gX01fb3V0X2J1Zl9zaXplKCk7CiAgICAgICAgICBpZiAo
X19idWZfbGVuID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIG9mZl90eXBlIF9fcmVt
YWluaW5nID0gX19uIC0gX19yZXQ7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19sZW4gPSBtaW4o
X19idWZfbGVuLCBfX3JlbWFpbmluZyk7CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHko
X01fb3V0X2N1ciwgX19zLCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQgKz0gX19sZW47CiAg
ICAgICAgICAgICAgX19zICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX291dF9jdXJfbW92ZShf
X2xlbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT5vdmVyZmxvdyh0cmFpdHNf
dHlwZTo6dG9faW50X3R5cGUoKl9fcykpOwogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6
OmVxX2ludF90eXBlKF9fYywgdHJhaXRzX3R5cGU6OmVvZigpKSkKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgKytfX3JldDsKICAgICAgICAgICAgICAgICAgKytfX3M7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUK
ICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfX2lvcywK
ICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBf
X3NiaW4sCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh
aXRzPiogX19zYm91dCkKICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5
cGUgaW50X3R5cGU7CgogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKICAgICAgc3RyZWFtc2l6
ZSBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7CiAgICAgIHN0cmVhbXNpemUgX194dHJj
dDsKICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfX3Nib3V0LT5fTV9tb2RlICYgaW9zX2Jhc2U6Om91
dDsKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgd2hpbGUgKF9fdGVzdHB1dCAmJiBfX2J1
ZnNpemUgIT0gLTEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3h0cmN0ID0gX19zYm91
dC0+c3B1dG4oX19zYmluLT5ncHRyKCksIF9fYnVmc2l6ZSk7CiAgICAgICAgICAgICAgX19yZXQg
Kz0gX194dHJjdDsKICAgICAgICAgICAgICBfX3NiaW4tPl9NX2luX2N1cl9tb3ZlKF9feHRyY3Qp
OwogICAgICAgICAgICAgIGlmIChfX3h0cmN0ID09IF9fYnVmc2l6ZSkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fc2Jpbi0+c2dl
dGMoKSwgX1RyYWl0czo6ZW9mKCkpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgIHsKICAg
ICAgICAgIF9faW9zLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgIGlmICgo
X19pb3MuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmZhaWxiaXQpICE9IDApCiAgICAgICAgICAg
IHRocm93OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKICBleHRlcm4g
dGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVmPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZQog
ICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPGNoYXI+JiwgYmFz
aWNfc3RyZWFtYnVmPGNoYXI+KiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1
ZjxjaGFyPiopOwoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVmPHdjaGFy
X3Q+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1
ZnMoYmFzaWNfaW9zPHdjaGFyX3Q+JiwgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+KiwKICAgICAg
ICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiopOwp9CgoKCgoKCgoKbmFt
ZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPGlu
cHV0X2l0ZXJhdG9yX3RhZywgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSwKICAg
ICAgICAgICAgICAgICAgICAgIF9DaGFyVCosIF9DaGFyVCY+CiAgICB7CiAgICBwdWJsaWM6Cgog
ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFp
dHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlw
ZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1i
dWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0
cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CgoKCgoKCgogICAgICBtdXRhYmxlIHN0cmVhbWJ1Zl90
eXBlKiBfTV9zYnVmOwogICAgICBpbnRfdHlwZSBfTV9jOwoKICAgIHB1YmxpYzoKICAgICAgaXN0
cmVhbWJ1Zl9pdGVyYXRvcigpIHRocm93KCkKICAgICAgOiBfTV9zYnVmKDApLCBfTV9jKHRyYWl0
c190eXBlOjplb2YoKSkgeyB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKGlzdHJlYW1fdHlw
ZSYgX19zKSB0aHJvdygpCiAgICAgIDogX01fc2J1ZihfX3MucmRidWYoKSksIF9NX2ModHJhaXRz
X3R5cGU6OmVvZigpKSB7IH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5
cGUqIF9fcykgdGhyb3coKQogICAgICA6IF9NX3NidWYoX19zKSwgX01fYyh0cmFpdHNfdHlwZTo6
ZW9mKCkpIHsgfQoKCiAgICAgIGNoYXJfdHlwZQogICAgICBvcGVyYXRvciooKSBjb25zdAogICAg
ICB7IHJldHVybiB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9NX2dldCgpKTsgfQoKICAgICAg
aXN0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAgICAgICBj
b25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBpZiAoX01f
c2J1ZiAmJiB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fc2J1Zi0+c2J1bXBjKCksIF9fZW9m
KSkKICAgICAgICAgIF9NX3NidWYgPSAwOwogICAgICAgIGVsc2UKICAgICAgICAgIF9NX2MgPSBf
X2VvZjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGlzdHJlYW1idWZfaXRl
cmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlw
ZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9y
IF9fb2xkID0gKnRoaXM7CiAgICAgICAgaWYgKF9NX3NidWYKICAgICAgICAgICAgJiYgdHJhaXRz
X3R5cGU6OmVxX2ludF90eXBlKChfX29sZC5fTV9jID0gX01fc2J1Zi0+c2J1bXBjKCkpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lb2YpKQogICAgICAgICAgX01f
c2J1ZiA9IDA7CiAgICAgICAgZWxzZQogICAgICAgICAgX01fYyA9IF9fZW9mOwogICAgICAgIHJl
dHVybiBfX29sZDsKICAgICAgfQoKCgoKICAgICAgYm9vbAogICAgICBlcXVhbChjb25zdCBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yJiBfX2IpIGNvbnN0CiAgICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlw
ZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBib29sIF9fdGhpc2VvZiA9IHRy
YWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9nZXQoKSwgX19lb2YpOwogICAgICAgIGJvb2wgX19i
ZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYi5fTV9nZXQoKSwgX19lb2YpOwogICAg
ICAgIHJldHVybiAoX190aGlzZW9mICYmIF9fYmVvZiB8fCAoIV9fdGhpc2VvZiAmJiAhX19iZW9m
KSk7CiAgICAgIH0KCgogICAgcHJpdmF0ZToKICAgICAgaW50X3R5cGUKICAgICAgX01fZ2V0KCkg
Y29uc3QKICAgICAgewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6
OmVvZigpOwogICAgICAgIGludF90eXBlIF9fcmV0ID0gX19lb2Y7CiAgICAgICAgaWYgKF9NX3Ni
dWYpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBl
KF9NX2MsIF9fZW9mKSkKICAgICAgICAgICAgICBfX3JldCA9IF9NX2M7CiAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKChfX3JldCA9IF9N
X3NidWYtPnNnZXRjKCkpLCBfX2VvZikpCiAgICAgICAgICAgICAgICBfTV9zYnVmID0gMDsKICAg
ICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19h
LAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0
cz4mIF9fYikKICAgIHsgcmV0dXJuIF9fYS5lcXVhbChfX2IpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
ciE9KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAg
ICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9f
YikKICAgIHsgcmV0dXJuICFfX2EuZXF1YWwoX19iKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yCiAg
ICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lk
LCB2b2lkPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl
OwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf
c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsKCiAgICBwcml2YXRl
OgogICAgICBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsKICAgICAgYm9vbCBfTV9mYWlsZWQ7Cgog
ICAgcHVibGljOgogICAgICBpbmxpbmUKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihvc3RyZWFt
X3R5cGUmIF9fcykgdGhyb3cgKCkKICAgICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fZmFp
bGVkKCFfTV9zYnVmKSB7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5
cGUqIF9fcykgdGhyb3cgKCkKICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2ZhaWxlZCghX01fc2J1
ZikgeyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oX0NoYXJU
IF9fYyk7CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgog
ICAgICBvcGVyYXRvcisrKGludCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAg
ICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHRocm93KCkKICAgICAg
eyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGJvb2wKICAgICAgZmFpbGVkKCkgY29uc3QgdGhyb3co
KQogICAgICB7IHJldHVybiBfTV9mYWlsZWQ7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBvc3RyZWFtYnVmX2l0ZXJhdG9y
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0
cz46Om9wZXJhdG9yPShfQ2hhclQgX19jKQogICAgewogICAgICBpZiAoIV9NX2ZhaWxlZCAmJgog
ICAgICAgICAgX1RyYWl0czo6ZXFfaW50X3R5cGUoX01fc2J1Zi0+c3B1dGMoX19jKSwgX1RyYWl0
czo6ZW9mKCkpKQogICAgICAgIF9NX2ZhaWxlZCA9IHRydWU7CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KfQoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB3Y3R5cGVf
dDsKCmVudW0KewogIF9fSVN3dXBwZXIgPSAwLAogIF9fSVN3bG93ZXIgPSAxLAogIF9fSVN3YWxw
aGEgPSAyLAogIF9fSVN3ZGlnaXQgPSAzLAogIF9fSVN3eGRpZ2l0ID0gNCwKICBfX0lTd3NwYWNl
ID0gNSwKICBfX0lTd3ByaW50ID0gNiwKICBfX0lTd2dyYXBoID0gNywKICBfX0lTd2JsYW5rID0g
OCwKICBfX0lTd2NudHJsID0gOSwKICBfX0lTd3B1bmN0ID0gMTAsCiAgX19JU3dhbG51bSA9IDEx
LAoKICBfSVN3dXBwZXIgPSAoKF9fSVN3dXBwZXIpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d3VwcGVyKSkgPDwgMjQpIDogKChfX0lTd3VwcGVyKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3dXBwZXIpKSA8PCA4KSA6ICgoX19JU3d1cHBlcikgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd3VwcGVyKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikpID4+IDI0KSkp
KSwKICBfSVN3bG93ZXIgPSAoKF9fSVN3bG93ZXIpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2xvd2VyKSkgPDwgMjQpIDogKChfX0lTd2xvd2VyKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3bG93ZXIpKSA8PCA4KSA6ICgoX19JU3dsb3dlcikgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd2xvd2VyKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikpID4+IDI0KSkp
KSwKICBfSVN3YWxwaGEgPSAoKF9fSVN3YWxwaGEpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2FscGhhKSkgPDwgMjQpIDogKChfX0lTd2FscGhhKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3YWxwaGEpKSA8PCA4KSA6ICgoX19JU3dhbHBoYSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd2FscGhhKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkpID4+IDI0KSkp
KSwKICBfSVN3ZGlnaXQgPSAoKF9fSVN3ZGlnaXQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2RpZ2l0KSkgPDwgMjQpIDogKChfX0lTd2RpZ2l0KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3dkaWdpdCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd2RpZ2l0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkpID4+IDI0KSkp
KSwKICBfSVN3eGRpZ2l0ID0gKChfX0lTd3hkaWdpdCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3eGRpZ2l0KSkgPDwgMjQpIDogKChfX0lTd3hkaWdpdCkgPCAxNiA/IChpbnQpICgoMVVMIDw8
IChfX0lTd3hkaWdpdCkpIDw8IDgpIDogKChfX0lTd3hkaWdpdCkgPCAyNCA/IChpbnQpICgoMVVM
IDw8IChfX0lTd3hkaWdpdCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3eGRpZ2l0KSkg
Pj4gMjQpKSkpLAogIF9JU3dzcGFjZSA9ICgoX19JU3dzcGFjZSkgPCA4ID8gKGludCkgKCgxVUwg
PDwgKF9fSVN3c3BhY2UpKSA8PCAyNCkgOiAoKF9fSVN3c3BhY2UpIDwgMTYgPyAoaW50KSAoKDFV
TCA8PCAoX19JU3dzcGFjZSkpIDw8IDgpIDogKChfX0lTd3NwYWNlKSA8IDI0ID8gKGludCkgKCgx
VUwgPDwgKF9fSVN3c3BhY2UpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3NwYWNlKSkg
Pj4gMjQpKSkpLAogIF9JU3dwcmludCA9ICgoX19JU3dwcmludCkgPCA4ID8gKGludCkgKCgxVUwg
PDwgKF9fSVN3cHJpbnQpKSA8PCAyNCkgOiAoKF9fSVN3cHJpbnQpIDwgMTYgPyAoaW50KSAoKDFV
TCA8PCAoX19JU3dwcmludCkpIDw8IDgpIDogKChfX0lTd3ByaW50KSA8IDI0ID8gKGludCkgKCgx
VUwgPDwgKF9fSVN3cHJpbnQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3ByaW50KSkg
Pj4gMjQpKSkpLAogIF9JU3dncmFwaCA9ICgoX19JU3dncmFwaCkgPCA4ID8gKGludCkgKCgxVUwg
PDwgKF9fSVN3Z3JhcGgpKSA8PCAyNCkgOiAoKF9fSVN3Z3JhcGgpIDwgMTYgPyAoaW50KSAoKDFV
TCA8PCAoX19JU3dncmFwaCkpIDw8IDgpIDogKChfX0lTd2dyYXBoKSA8IDI0ID8gKGludCkgKCgx
VUwgPDwgKF9fSVN3Z3JhcGgpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2dyYXBoKSkg
Pj4gMjQpKSkpLAogIF9JU3dibGFuayA9ICgoX19JU3dibGFuaykgPCA4ID8gKGludCkgKCgxVUwg
PDwgKF9fSVN3YmxhbmspKSA8PCAyNCkgOiAoKF9fSVN3YmxhbmspIDwgMTYgPyAoaW50KSAoKDFV
TCA8PCAoX19JU3dibGFuaykpIDw8IDgpIDogKChfX0lTd2JsYW5rKSA8IDI0ID8gKGludCkgKCgx
VUwgPDwgKF9fSVN3YmxhbmspKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2JsYW5rKSkg
Pj4gMjQpKSkpLAogIF9JU3djbnRybCA9ICgoX19JU3djbnRybCkgPCA4ID8gKGludCkgKCgxVUwg
PDwgKF9fSVN3Y250cmwpKSA8PCAyNCkgOiAoKF9fSVN3Y250cmwpIDwgMTYgPyAoaW50KSAoKDFV
TCA8PCAoX19JU3djbnRybCkpIDw8IDgpIDogKChfX0lTd2NudHJsKSA8IDI0ID8gKGludCkgKCgx
VUwgPDwgKF9fSVN3Y250cmwpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2NudHJsKSkg
Pj4gMjQpKSkpLAogIF9JU3dwdW5jdCA9ICgoX19JU3dwdW5jdCkgPCA4ID8gKGludCkgKCgxVUwg
PDwgKF9fSVN3cHVuY3QpKSA8PCAyNCkgOiAoKF9fSVN3cHVuY3QpIDwgMTYgPyAoaW50KSAoKDFV
TCA8PCAoX19JU3dwdW5jdCkpIDw8IDgpIDogKChfX0lTd3B1bmN0KSA8IDI0ID8gKGludCkgKCgx
VUwgPDwgKF9fSVN3cHVuY3QpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3B1bmN0KSkg
Pj4gMjQpKSkpLAogIF9JU3dhbG51bSA9ICgoX19JU3dhbG51bSkgPCA4ID8gKGludCkgKCgxVUwg
PDwgKF9fSVN3YWxudW0pKSA8PCAyNCkgOiAoKF9fSVN3YWxudW0pIDwgMTYgPyAoaW50KSAoKDFV
TCA8PCAoX19JU3dhbG51bSkpIDw8IDgpIDogKChfX0lTd2FsbnVtKSA8IDI0ID8gKGludCkgKCgx
VUwgPDwgKF9fSVN3YWxudW0pKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2FsbnVtKSkg
Pj4gMjQpKSkpCn07CgoKCmV4dGVybiAiQyIgewoKCgoKCgoKZXh0ZXJuIGludCBpc3dhbG51bSAo
d2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgaXN3YWxwaGEgKHdpbnRfdCBf
X3djKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd2NudHJsICh3aW50X3QgX193YykgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgaXN3ZGlnaXQgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBpc3dncmFwaCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBp
c3dsb3dlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXN3cHJpbnQgKHdp
bnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3cHVuY3QgKHdpbnRfdCBfX3dj
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3c3BhY2UgKHdpbnRfdCBfX3djKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgaXN3dXBwZXIgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgaXN3eGRpZ2l0ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu
dCBpc3dibGFuayAod2ludF90IF9fd2MpIHRocm93ICgpOwoKZXh0ZXJuIHdjdHlwZV90IHdjdHlw
ZSAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3dj
dHlwZSAod2ludF90IF9fd2MsIHdjdHlwZV90IF9fZGVzYykgdGhyb3cgKCk7Cgp0eXBlZGVmIF9f
Y29uc3QgX19pbnQzMl90ICp3Y3RyYW5zX3Q7CgoKZXh0ZXJuIHdpbnRfdCB0b3dsb3dlciAod2lu
dF90IF9fd2MpIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgdG93dXBwZXIgKHdpbnRfdCBfX3dj
KSB0aHJvdyAoKTsKCn0KCmV4dGVybiAiQyIgewoKCgpleHRlcm4gd2N0cmFuc190IHdjdHJhbnMg
KF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3dj
dHJhbnMgKHdpbnRfdCBfX3djLCB3Y3RyYW5zX3QgX19kZXNjKSB0aHJvdyAoKTsKCgoKCgoKCmV4
dGVybiBpbnQgX19pc3dhbG51bV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBfX2lzd2FscGhhX2wgKHdpbnRfdCBfX3djLCBfX2xv
Y2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9faXN3Y250cmxfbCAod2lu
dF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9f
aXN3ZGlnaXRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IF9faXN3Z3JhcGhfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2Nh
bGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd2xvd2VyX2wgKHdpbnRfdCBfX3djLCBf
X2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9faXN3cHJpbnRfbCAo
d2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu
dCBfX2lzd3B1bmN0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgX19pc3dzcGFjZV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBf
X2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3dXBwZXJfbCAod2ludF90IF9f
d2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd3hk
aWdpdF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IF9faXN3YmxhbmtfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUp
IHRocm93ICgpOwoKCgpleHRlcm4gd2N0eXBlX3QgX193Y3R5cGVfbCAoX19jb25zdCBjaGFyICpf
X3Byb3BlcnR5LCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IF9faXN3Y3R5cGVfbCAod2ludF90IF9fd2MsIHdjdHlwZV90IF9fZGVzYywgX19sb2NhbGVf
dCBfX2xvY2FsZSkKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB3aW50X3QgX190b3dsb3dl
cl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IHdpbnRfdCBfX3Rvd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIHdjdHJhbnNfdCBfX3djdHJhbnNfbCAoX19jb25zdCBjaGFyICpf
X3Byb3BlcnR5LCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3
aW50X3QgX190b3djdHJhbnNfbCAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoK
Cn0KCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OndpbnRfdDsKCiAgdXNpbmcgOjp3Y3R5cGVf
dDsKICB1c2luZyA6OndjdHJhbnNfdDsKCiAgdXNpbmcgOjppc3dhbG51bTsKICB1c2luZyA6Omlz
d2FscGhhOwogIHVzaW5nIDo6aXN3Ymxhbms7CiAgdXNpbmcgOjppc3djbnRybDsKICB1c2luZyA6
Omlzd2RpZ2l0OwogIHVzaW5nIDo6aXN3Z3JhcGg7CiAgdXNpbmcgOjppc3dsb3dlcjsKICB1c2lu
ZyA6Omlzd3ByaW50OwogIHVzaW5nIDo6aXN3cHJpbnQ7CiAgdXNpbmcgOjppc3dwdW5jdDsKICB1
c2luZyA6Omlzd3NwYWNlOwogIHVzaW5nIDo6aXN3dXBwZXI7CiAgdXNpbmcgOjppc3d4ZGlnaXQ7
CiAgdXNpbmcgOjppc3djdHlwZTsKICB1c2luZyA6OnRvd2xvd2VyOwogIHVzaW5nIDo6dG93dXBw
ZXI7CiAgdXNpbmcgOjp0b3djdHJhbnM7CiAgdXNpbmcgOjp3Y3RyYW5zOwogIHVzaW5nIDo6d2N0
eXBlOwp9CgoKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9fcGFkOwoKCgoKCiAgc3RydWN0IGN0
eXBlX2Jhc2UKICB7CgogICAgdHlwZWRlZiBjb25zdCBpbnQqIF9fdG9fdHlwZTsKCgoKICAgIHR5
cGVkZWYgdW5zaWduZWQgc2hvcnQgbWFzazsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHVwcGVyID0g
X0lTdXBwZXI7CiAgICBzdGF0aWMgY29uc3QgbWFzayBsb3dlciA9IF9JU2xvd2VyOwogICAgc3Rh
dGljIGNvbnN0IG1hc2sgYWxwaGEgPSBfSVNhbHBoYTsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGRp
Z2l0ID0gX0lTZGlnaXQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayB4ZGlnaXQgPSBfSVN4ZGlnaXQ7
CiAgICBzdGF0aWMgY29uc3QgbWFzayBzcGFjZSA9IF9JU3NwYWNlOwogICAgc3RhdGljIGNvbnN0
IG1hc2sgcHJpbnQgPSBfSVNwcmludDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGdyYXBoID0gX0lT
Z3JhcGg7CiAgICBzdGF0aWMgY29uc3QgbWFzayBjbnRybCA9IF9JU2NudHJsOwogICAgc3RhdGlj
IGNvbnN0IG1hc2sgcHVuY3QgPSBfSVNwdW5jdDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGFsbnVt
ID0gX0lTYWxudW07CiAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz
cyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGN0
eXBlX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKCiAgICAgIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbSwgX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90
eXBlKgogICAgICBpcyhjb25zdCBjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSAqX19o
aSwgbWFzayAqX192ZWMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbG8sIF9f
aGksIF9fdmVjKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBzY2FuX2lzKG1hc2sg
X19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20sIF9fbG8sIF9faGkpOyB9CgogICAg
ICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5
cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fc2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAg
IHRvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91
cHBlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHRvdXBwZXIoY2hhcl90
eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX3RvdXBwZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0b2xv
d2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIo
X19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b2xvd2VyKGNoYXJfdHlwZSog
X19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k
b190b2xvd2VyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgd2lkZW4oY2hh
ciBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fYyk7IH0KCiAgICAg
IGNvbnN0IGNoYXIqCiAgICAgIHdpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9f
aGksIGNoYXJfdHlwZSogX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4o
X19sbywgX19oaSwgX190byk7IH0KCiAgICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlwZSBf
X2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25hcnJvdyhf
X2MsIF9fZGZhdWx0KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBuYXJyb3coY29u
c3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAg
Y2hhciBfX2RmYXVsdCwgY2hhciAqX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
bmFycm93KF9fbG8sIF9faGksIF9fZGZhdWx0LCBfX3RvKTsgfQoKICAgIHByb3RlY3RlZDoKICAg
ICAgZXhwbGljaXQKICAgICAgX19jdHlwZV9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAw
KTogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jdHlw
ZV9hYnN0cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFz
ayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh
cl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw
ZSogX19oaSwKICAgICAgICAgICAgbWFzayogX192ZWMpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1
YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFy
X3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z
dCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3Qo
bWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAg
ICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBj
aGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5
cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3Rv
bG93ZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlw
ZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o
aSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hh
cikgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihj
b25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLAogICAgICAgICAgICAgICBjaGFyX3R5
cGUqIF9fZGVzdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJv
dyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29u
c3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25z
dCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciog
X19kZXN0KSBjb25zdCA9IDA7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgY2xhc3MgY3R5cGUgOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4KICAg
IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBjdHlwZTo6bWFzayBtYXNrOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQg
aWQ7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCkgOiBfX2N0
eXBlX2Fic3RyYWN0X2Jhc2U8X0NoYXJUPihfX3JlZnMpIHsgfQoKICAgcHJvdGVjdGVkOgogICAg
ICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lz
KG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh
cl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw
ZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5
cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29u
c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl
KgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19s
bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl
CiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNo
YXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193
aWRlbihjaGFyIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRv
X3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19k
ZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBl
LCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgog
ICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f
aGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0Owog
ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBjdHlwZTxf
Q2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGN0eXBlPGNoYXI+IDogcHVibGlj
IF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxjaGFyPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlw
ZWRlZiBjaGFyIGNoYXJfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBfX2NfbG9jYWxlIF9N
X2NfbG9jYWxlX2N0eXBlOwogICAgICBib29sIF9NX2RlbDsKICAgICAgX190b190eXBlIF9NX3Rv
dXBwZXI7CiAgICAgIF9fdG9fdHlwZSBfTV90b2xvd2VyOwogICAgICBjb25zdCBtYXNrKiBfTV90
YWJsZTsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwogICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IHRhYmxlX3NpemUgPSAxICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oLTEpOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoY29uc3QgbWFzayogX190YWJsZSA9
IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgZXhwbGlj
aXQKICAgICAgY3R5cGUoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IG1hc2sqIF9fdGFibGUgPSAw
LCBib29sIF9fZGVsID0gZmFsc2UsCiAgICAgICAgICAgIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAg
ICAgIGlubGluZSBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3Q7CgogICAg
ICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgaXMoY29uc3QgY2hhciogX19sbywgY29uc3QgY2hh
ciogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAg
ICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkp
IGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5fbm90KG1hc2sgX19t
LCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgICBwcm90ZWN0
ZWQ6CiAgICAgIGNvbnN0IG1hc2sqCiAgICAgIHRhYmxlKCkgY29uc3QgdGhyb3coKQogICAgICB7
IHJldHVybiBfTV90YWJsZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IG1hc2sqCiAgICAgIGNsYXNz
aWNfdGFibGUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAg
IHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90
eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBj
b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNv
bnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBf
X2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hh
cl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190
b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlw
ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hh
cl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBj
aGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBj
aGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFy
cm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3Qg
Y2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19k
ZXN0KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPGNoYXI+Jgog
ICAgdXNlX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7CgoKCiAgdGVt
cGxhdGU8PgogICAgY2xhc3MgY3R5cGU8d2NoYXJfdD4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFj
dF9iYXNlPHdjaGFyX3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIHdjaGFyX3Qg
Y2hhcl90eXBlOwogICAgICB0eXBlZGVmIHdjdHlwZV90IF9fd21hc2tfdHlwZTsKCiAgICBwcm90
ZWN0ZWQ6CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY3R5cGU7CgogICAgcHVibGljOgoK
ICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShz
aXplX3QgX19yZWZzID0gMCk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShfX2NfbG9jYWxl
IF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgX193bWFz
a190eXBlCiAgICAgIF9NX2NvbnZlcnRfdG9fd21hc2soY29uc3QgbWFzayBfX20pIGNvbnN0OwoK
ICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBk
b19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFy
X3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh
cl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8s
IGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf
dHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywK
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19s
bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl
CiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg
Y2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90
eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVu
KGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihj
b25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBf
X2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9f
bmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAg
ICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKCiAgICB9OwoK
ICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjdHlwZTx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxjdHlw
ZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKCgoKCiAgYm9vbAogIGN0eXBlPGNo
YXI+OjoKICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0CiAgeyByZXR1cm4gX01fdGFibGVb
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV0gJiBfX207IH0KCiAgY29uc3QgY2hhcioK
ICBjdHlwZTxjaGFyPjo6CiAgaXMoY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGln
aCwgbWFzayogX192ZWMpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQogICAg
ICAqX192ZWMrKyA9IF9NX3RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvdysr
KV07CiAgICByZXR1cm4gX19oaWdoOwogIH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6
CiAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGln
aCkgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gKICAgICAgICAgICAmJiAhKF9N
X3RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvdyldICYgX19tKSkKICAgICAg
KytfX2xvdzsKICAgIHJldHVybiBfX2xvdzsKICB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hh
cj46OgogIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciog
X19oaWdoKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaAogICAgICAgICAgICYm
IChfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cpXSAmIF9fbSkgIT0g
MCkKICAgICAgKytfX2xvdzsKICAgIHJldHVybiBfX2xvdzsKICB9CgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnluYW1lIDogcHVibGljIGN0eXBlPF9DaGFy
VD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAg
ICAgZXhwbGljaXQKICAgICAgY3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9f
cmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGVfYnlu
YW1lKCkgeyB9OwogICAgfTsKCgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6
Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7CgogIHRlbXBsYXRlPD4KICAg
IGN0eXBlX2J5bmFtZTx3Y2hhcl90Pjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3Qg
cmVmcyk7CgoKCgoKCiAgY2xhc3MgY29kZWN2dF9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0g
cmVzdWx0CiAgICB7CiAgICAgIG9rLAogICAgICBwYXJ0aWFsLAogICAgICBlcnJvciwKICAgICAg
bm9jb252CiAgICB9OwogIH07CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw
ZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBfX2NvZGVjdnRfYWJz
dHJhY3RfYmFzZQogICAgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGNvZGVjdnRfYmFz
ZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCBy
ZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYg
X0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoK
CiAgICAgIHJlc3VsdAogICAgICBvdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJu
X3R5cGUqIF9fZnJvbSwKICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBj
b25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgZXh0ZXJuX3R5cGUqIF9f
dG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19u
ZXh0KSBjb25zdAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX291dChfX3N0YXRlLCBf
X2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIHJlc3VsdAogICAg
ICB1bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5f
dHlwZSogX190b19lbmQsCiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Vuc2hpZnQoX19zdGF0ZSwgX190byxfX3RvX2Vu
ZCxfX3RvX25leHQpOyB9CgogICAgICByZXN1bHQKICAgICAgaW4oc3RhdGVfdHlwZSYgX19zdGF0
ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgIGlu
dGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgIGludGVybl90
eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX2lu
KF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQpOwogICAgICB9CgogICAgICBp
bnQKICAgICAgZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X2VuY29kaW5nKCk7IH0KCiAgICAgIGJvb2wKICAgICAgYWx3YXlzX25vY29udigpIGNvbnN0IHRo
cm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fYWx3YXlzX25vY29udigpOyB9CgogICAgICBp
bnQKICAgICAgbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90
eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVf
dCBfX21heCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbGVuZ3RoKF9fc3RhdGUsIF9f
ZnJvbSwgX19lbmQsIF9fbWF4KTsgfQoKICAgICAgaW50CiAgICAgIG1heF9sZW5ndGgoKSBjb25z
dCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX21heF9sZW5ndGgoKTsgfQoKICAgIHBy
b3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2Uoc2l6
ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVh
bAogICAgICB+X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1YWwgcmVz
dWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSog
X19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0
IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190
bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3Rv
X25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQo
c3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAg
ZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAw
OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwg
Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAg
IGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGlu
dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAg
ICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBib29sCiAg
ICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZpcnR1YWwg
aW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90
IF9fbWF4KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3Ro
KCkgY29uc3QgdGhyb3coKSA9IDA7CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRl
cm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVj
dnQKICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJu
VCwgX1N0YXRlVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNl
OjpyZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAg
ICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQgc3Rh
dGVfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0
X2Jhc2U8X0ludGVyblQsX0V4dGVyblQsX1N0YXRlVD4gKF9fcmVmcykgeyB9CgogICAgcHJvdGVj
dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9CgogICAgICB2aXJ0dWFsIHJl
c3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUq
IF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25z
dCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9f
dG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190
b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3Rh
dGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0
ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBl
eHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9t
X2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJu
X3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5
cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2Rp
bmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19u
b2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3Ro
KGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAg
ICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgICB9
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVu
YW1lIF9TdGF0ZVQ+CiAgICBsb2NhbGU6OmlkIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBf
U3RhdGVUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIs
IG1ic3RhdGVfdD4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGNoYXIsIGNo
YXIsIG1ic3RhdGVfdD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY2hhciBpbnRl
cm5fdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1i
c3RhdGVfdCBzdGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAg
ZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVk
OgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAog
ICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJv
bSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRl
cm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4
dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlw
ZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5
cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5f
dHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwg
Y29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUq
IF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBf
X3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBj
b25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYo
KSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0
IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAg
Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICB0
ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4KICAg
IDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVf
dD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgd2NoYXJfdCBpbnRlcm5fdHlwZTsK
ICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBz
dGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK
ICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2
aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19v
dXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg
ICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSom
IF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBl
KiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0
ZSwKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9f
ZW5kLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsCiAgICAg
ICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLCBjb25zdCBleHRlcm5fdHlwZSogX19m
cm9tX2VuZCwKICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAg
ICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAg
ICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbAog
ICAgICBpbnQgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAg
ICBib29sIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAog
ICAgICBpbnQgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSog
X19mcm9tLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6
ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgo
KSBjb25zdCB0aHJvdygpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwg
dHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5
bmFtZSA6IHB1YmxpYyBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsK
ICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dF9ieW5hbWUoY29uc3QgY2hh
ciosIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5U
LCBfU3RhdGVUPihfX3JlZnMpIHsgfQogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg
IH5jb2RlY3Z0X2J5bmFtZSgpIHsgfQogICAgfTsKCgoKCgoKCgoKCiAgY2xhc3MgX19udW1fYmFz
ZQogIHsKICBwcm90ZWN0ZWQ6CgoKICAgIHN0YXRpYyBjb25zdCBjaGFyIF9TX2F0b21zW107Cgog
ICAgZW51bQogICAgewogICAgICBfTV96ZXJvLAogICAgICBfTV9lID0gX01femVybyArIDEwLAog
ICAgICBfTV9FID0gX01femVybyArIDExLAogICAgICBfTV9zaXplID0gMjEgKyAxCiAgICB9OwoK
CgogICAgc3RhdGljIGJvb2wKICAgIF9TX2Zvcm1hdF9mbG9hdChjb25zdCBpb3NfYmFzZSYgX19p
bywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9kLAogICAgICAgICAgICAgICAgICAgIHN0cmVhbXNp
emUgX19wcmVjKTsKCgogICAgc3RhdGljIHZvaWQKICAgIF9TX2Zvcm1hdF9pbnQoY29uc3QgaW9z
X2Jhc2UmIF9faW8sIGNoYXIqIF9fZnB0ciwgY2hhciBfX21vZCwgY2hhciBfX21vZGwpOwogIH07
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBudW1wdW5jdCA6IHB1Ymxp
YyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBj
aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7
CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICBwcml2YXRlOgogICAgICBjaGFyX3R5
cGUgX01fZGVjaW1hbF9wb2ludDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7CiAg
ICAgIGNvbnN0IGNoYXIqIF9NX2dyb3VwaW5nOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX3Ry
dWVuYW1lOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX2ZhbHNlbmFtZTsKCiAgICBwdWJsaWM6
CiAgICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2Fs
ZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoKTsgfQoKICAg
ICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3Jl
ZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbnVt
cHVuY3QoX19jbG9jKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7IH0KCiAgICAgIGNo
YXJfdHlwZQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fdGhvdXNhbmRzX3NlcCgpOyB9CgogICAgICBzdHJpbmcKICAgICAgZ3JvdXBpbmcoKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9CgogICAgICBzdHJpbmdfdHlw
ZQogICAgICB0cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RydWVuYW1l
KCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIGZhbHNlbmFtZSgpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX2ZhbHNlbmFtZSgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0
dWFsCiAgICAgIH5udW1wdW5jdCgpOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9f
ZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RlY2ltYWxfcG9pbnQ7IH0K
CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdAog
ICAgICB7IHJldHVybiBfTV90aG91c2FuZHNfc2VwOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZwog
ICAgICBkb19ncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2dyb3VwaW5nOyB9Cgog
ICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX3RydWVuYW1lKCkgY29uc3QKICAgICAg
eyByZXR1cm4gX01fdHJ1ZW5hbWU7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAg
ZG9fZmFsc2VuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZmFsc2VuYW1lOyB9CgoKICAg
ICAgdm9pZAogICAgICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0g
X1NfY19sb2NhbGUpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9j
YWxlOjppZCBudW1wdW5jdDxfQ2hhclQ+OjppZDsKCiAgdGVtcGxhdGU8PgogICAgbnVtcHVuY3Q8
Y2hhcj46On5udW1wdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBudW1wdW5jdDxj
aGFyPjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgoKICB0ZW1w
bGF0ZTw+CiAgICBudW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCk7CgogIHRlbXBsYXRlPD4K
ICAgIHZvaWQKICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9f
Y19sb2NhbGUgX19jbG9jKTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNz
IG51bXB1bmN0X2J5bmFtZSA6IHB1YmxpYyBudW1wdW5jdDxfQ2hhclQ+CiAgICB7CgogICAgICBf
X2NfbG9jYWxlIF9NX2NfbG9jYWxlX251bXB1bmN0OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0
cmluZ190eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3RfYnluYW1lKGNvbnN0IGNo
YXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbnVtcHVuY3Q8X0NoYXJUPihfX3Jl
ZnMpCiAgICAgIHsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVu
Y3QsIF9fcyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfTV9jX2xvY2FsZV9udW1w
dW5jdCk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1
bmN0X2J5bmFtZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9udW1w
dW5jdCk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
SXRlcj4KICAgIGNsYXNzIG51bV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIF9f
bnVtX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6
OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtX2dldChzaXplX3QgX19yZWZzID0gMCkg
OiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0
ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0
ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2Vy
ciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRl
cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBl
CiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p
bywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3Yp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19l
cnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlw
ZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
aW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgbG9uZyYgX192KSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJy
LCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVy
X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCB1bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJf
dHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um
IF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBfX3YpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIs
IF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIGRvdWJsZSYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19p
biwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0
KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9
CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19l
bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2
b2lkKiYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQs
IF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsIH5udW1f
Z2V0KCkgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fZXh0cmFjdF9mbG9hdChpdGVyX3R5
cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsCiAgICAgICAgICAg
ICAgICAgICAgICAgc3RyaW5nJiBfX3h0cmMpIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAg
IF9NX2V4dHJhY3RfaW50KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNl
Ojppb3N0YXRlJiwKICAgICAgICAgICAgICAgICAgICAgc3RyaW5nJiBfX3h0cmMsIGludCYgX19i
YXNlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5
cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGJvb2wmKSBjb25z
dDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVy
X3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBsb25nJikgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlv
c19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgIHVuc2lnbmVk
IHNob3J0JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRl
cl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAog
ICAgICAgICAgICAgdW5zaWduZWQgaW50JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw
ZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyYpIGNvbnN0OwoKCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwg
aW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBsb25nIGxv
bmcmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5
cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAg
ICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJf
dHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZmxvYXQmKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jh
c2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBkb3VibGUmKSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJf
dHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBs
b25nIGRvdWJsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0
KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwKICAgICAgICAgICAgIHZvaWQqJikgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG51bV9nZXQ8X0NoYXJU
LCBfSW5JdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091
dEl0ZXI+CiAgICBjbGFzcyBudW1fcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBf
X251bV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2Fs
ZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBudW1fcHV0KHNpemVfdCBfX3JlZnMgPSAw
KSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQo
aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3Yp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3Yp
OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf
X2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAg
IHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAg
ICAgICAgdW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1
dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChp
dGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcg
X192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwg
X192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFz
ZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9f
dikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9f
dik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNl
JiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUK
ICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGws
CiAgICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0
KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAg
ICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3Ms
IF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVmFsdWVUPgogICAgICAgIGl0ZXJfdHlwZQogICAgICAgIF9NX2NvbnZlcnRfZmxvYXQo
aXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgX19tb2QsIF9WYWx1ZVQgX192KSBjb25zdDsKCiAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgICAgaXRlcl90eXBlCiAgICAgICAgX01fY29udmVy
dF9pbnQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyIF9fbW9kLCBjaGFyIF9fbW9kbCwgX1ZhbHVlVCBfX3YpIGNv
bnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX3dpZGVuX2Zsb2F0KGl0ZXJfdHlwZSwgaW9z
X2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAgICAgICAg
ICAgICAgIGludCBfX2xlbikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fd2lkZW5f
aW50KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNoYXIqIF9f
Y3MsCiAgICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0OwoKICAgICAgaXRlcl90eXBl
CiAgICAgIF9NX2luc2VydChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19m
aWxsLAogICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3dzLCBpbnQgX19sZW4pIGNv
bnN0OwoKICAgICAgdmlydHVhbAogICAgICB+bnVtX3B1dCgpIHsgfTsKCiAgICAgIHZpcnR1YWwg
aXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9f
ZmlsbCwgYm9vbCBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
cHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3Nf
YmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcpIGNvbnN0OwoKCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90
eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw
ZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVu
c2lnbmVkIGxvbmcgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg
ZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUs
IGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX192KSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwg
Y2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgdm9pZCogX192KSBjb25zdDsKICAgIH07CgogIHRlbXBs
YXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCBu
dW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIGNsYXNzIGNvbGxhdGUgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVi
bGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2lj
X3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgIHByb3RlY3RlZDoKCgogICAgICBfX2Nf
bG9jYWxlIF9NX2NfbG9jYWxlX2NvbGxhdGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9j
YWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoc2l6ZV90IF9fcmVmcyA9
IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01fY19sb2NhbGVfY29s
bGF0ZSA9IF9TX2NfbG9jYWxlOyB9CgoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0ZShfX2Nf
bG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChf
X3JlZnMpCiAgICAgIHsgX01fY19sb2NhbGVfY29sbGF0ZSA9IF9TX2Nsb25lX2NfbG9jYWxlKF9f
Y2xvYyk7IH0KCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNv
bnN0IF9DaGFyVCogX19oaTEsCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwgY29u
c3QgX0NoYXJUKiBfX2hpMikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY29tcGFyZShf
X2xvMSwgX19oaTEsIF9fbG8yLCBfX2hpMik7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHRy
YW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fdHJhbnNmb3JtKF9fbG8sIF9faGkpOyB9CgogICAgICBsb25n
CiAgICAgIGhhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2hhc2goX19sbywgX19oaSk7IH0KCgogICAgICBpbnQK
ICAgICAgX01fY29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25zdCBfQ2hhclQqKSBjb25zdDsKCiAg
ICAgIHNpemVfdAogICAgICBfTV90cmFuc2Zvcm0oX0NoYXJUKiwgY29uc3QgX0NoYXJUKiwgc2l6
ZV90KSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2xsYXRlKCkK
ICAgICAgewogICAgICAgIGlmIChfTV9jX2xvY2FsZV9jb2xsYXRlICE9IF9TX2NfbG9jYWxlKQog
ICAgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9jb2xsYXRlKTsKICAgICAg
fQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8x
LCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19s
bzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlw
ZQogICAgICBkb190cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9f
aGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBsb25nCiAgICAgIGRvX2hhc2goY29uc3QgX0NoYXJU
KiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBjb2xsYXRlPF9DaGFyVD46OmlkOwoKCiAgdGVt
cGxhdGU8PgogICAgaW50CiAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIq
LCBjb25zdCBjaGFyKikgY29uc3Q7CgogIHRlbXBsYXRlPD4KICAgIHNpemVfdAogICAgY29sbGF0
ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KSBjb25zdDsK
CgogIHRlbXBsYXRlPD4KICAgIGludAogICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29tcGFyZShj
b25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBz
aXplX3QKICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90KiwgY29uc3Qg
d2NoYXJfdCosIHNpemVfdCkgY29uc3Q7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBjbGFzcyBjb2xsYXRlX2J5bmFtZSA6IHB1YmxpYyBjb2xsYXRlPF9DaGFyVD4KICAgIHsKICAg
IHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJh
c2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgY29s
bGF0ZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBj
b2xsYXRlPF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgaWYgKF9NX2NfbG9jYWxlX2Nv
bGxhdGUgIT0gX1NfY19sb2NhbGUpCiAgICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2Nf
bG9jYWxlX2NvbGxhdGUpOwogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9j
b2xsYXRlLCBfX3MpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg
IH5jb2xsYXRlX2J5bmFtZSgpIHsgfQogICAgfTsKCgogIGNsYXNzIHRpbWVfYmFzZQogIHsKICBw
dWJsaWM6CiAgICBlbnVtIGRhdGVvcmRlciB7IG5vX29yZGVyLCBkbXksIG1keSwgeW1kLCB5ZG0g
fTsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfX3RpbWVwdW5j
dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVm
IF9DaGFyVCBfX2NoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBf
X3N0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgoKICAgICAgc3RhdGlj
IGNvbnN0IF9DaGFyVCogX1NfdGltZXpvbmVzWzE0XTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9f
Y19sb2NhbGUgX01fY19sb2NhbGVfdGltZXB1bmN0OwogICAgICBjb25zdCBjaGFyKiBfTV9uYW1l
X3RpbWVwdW5jdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX2Zvcm1hdDsKICAgICAgY29u
c3QgX0NoYXJUKiBfTV9kYXRlX2VyYV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fdGlt
ZV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fdGltZV9lcmFfZm9ybWF0OwogICAgICBj
b25zdCBfQ2hhclQqIF9NX2RhdGVfdGltZV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f
ZGF0ZV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fYW07CiAgICAgIGNv
bnN0IF9DaGFyVCogX01fcG07CiAgICAgIGNvbnN0IF9DaGFyVCogX01fYW1fcG1fZm9ybWF0OwoK
CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXky
OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5
NDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2Rh
eTY7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5NzsKCgogICAgICBjb25zdCBfQ2hhclQqIF9N
X2RheV9hMTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTI7CiAgICAgIGNvbnN0IF9DaGFy
VCogX01fZGF5X2EzOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hNDsKICAgICAgY29uc3Qg
X0NoYXJUKiBfTV9kYXlfYTU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E2OwogICAgICBj
b25zdCBfQ2hhclQqIF9NX2RheV9hNzsKCgogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDE7
CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwMjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9t
b250aDAzOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDQ7CiAgICAgIGNvbnN0IF9DaGFy
VCogX01fbW9udGgwNTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA2OwogICAgICBjb25z
dCBfQ2hhclQqIF9NX21vbnRoMDc7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwODsKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA5OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRo
MTA7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgxMTsKICAgICAgY29uc3QgX0NoYXJUKiBf
TV9tb250aDEyOwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTAxOwogICAgICBjb25z
dCBfQ2hhclQqIF9NX21vbnRoX2EwMjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDM7
CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA0OwogICAgICBjb25zdCBfQ2hhclQqIF9N
X21vbnRoX2EwNTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDY7CiAgICAgIGNvbnN0
IF9DaGFyVCogX01fbW9udGhfYTA3OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwODsK
ICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDk7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f
bW9udGhfYTEwOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2ExMTsKICAgICAgY29uc3Qg
X0NoYXJUKiBfTV9tb250aF9hMTI7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBf
X3RpbWVwdW5jdChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVm
cyksIF9NX25hbWVfdGltZXB1bmN0KCJDIikKICAgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5j
dCgpOyB9CgogICAgICBleHBsaWNpdAogICAgICBfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xv
YywgY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZh
Y2V0KF9fcmVmcyksIF9NX25hbWVfdGltZXB1bmN0KF9fcykKICAgICAgeyBfTV9pbml0aWFsaXpl
X3RpbWVwdW5jdChfX2Nsb2MpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX3B1dChfQ2hhclQqIF9f
cywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCBfQ2hhclQqIF9fZm9ybWF0LAogICAgICAgICAgICAg
Y29uc3QgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdm9pZAogICAgICBfTV9kYXRlX2Zvcm1hdHMo
Y29uc3QgX0NoYXJUKiogX19kYXRlKSBjb25zdAogICAgICB7CgogICAgICAgIF9fZGF0ZVswXSA9
IF9NX2RhdGVfZm9ybWF0OwogICAgICAgIF9fZGF0ZVsxXSA9IF9NX2RhdGVfZXJhX2Zvcm1hdDsK
ICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV90aW1lX2Zvcm1hdHMoY29uc3QgX0NoYXJUKiog
X190aW1lKSBjb25zdAogICAgICB7CgogICAgICAgIF9fdGltZVswXSA9IF9NX3RpbWVfZm9ybWF0
OwogICAgICAgIF9fdGltZVsxXSA9IF9NX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgfQoKICAgICAg
dm9pZAogICAgICBfTV9hbXBtKGNvbnN0IF9DaGFyVCoqIF9fYW1wbSkgY29uc3QKICAgICAgewog
ICAgICAgIF9fYW1wbVswXSA9IF9NX2FtOwogICAgICAgIF9fYW1wbVsxXSA9IF9NX3BtOwogICAg
ICB9CgogICAgICB2b2lkCiAgICAgIF9NX2RhdGVfdGltZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoq
IF9fZHQpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgX19kdFswXSA9IF9NX2RhdGVfdGltZV9mb3Jt
YXQ7CiAgICAgICAgX19kdFsxXSA9IF9NX2RhdGVfdGltZV9lcmFfZm9ybWF0OwogICAgICB9Cgog
ICAgICB2b2lkCiAgICAgIF9NX2RheXMoY29uc3QgX0NoYXJUKiogX19kYXlzKSBjb25zdAogICAg
ICB7CiAgICAgICAgX19kYXlzWzBdID0gX01fZGF5MTsKICAgICAgICBfX2RheXNbMV0gPSBfTV9k
YXkyOwogICAgICAgIF9fZGF5c1syXSA9IF9NX2RheTM7CiAgICAgICAgX19kYXlzWzNdID0gX01f
ZGF5NDsKICAgICAgICBfX2RheXNbNF0gPSBfTV9kYXk1OwogICAgICAgIF9fZGF5c1s1XSA9IF9N
X2RheTY7CiAgICAgICAgX19kYXlzWzZdID0gX01fZGF5NzsKICAgICAgfQoKICAgICAgdm9pZAog
ICAgICBfTV9kYXlzX2FiYnJldmlhdGVkKGNvbnN0IF9DaGFyVCoqIF9fZGF5cykgY29uc3QKICAg
ICAgewogICAgICAgIF9fZGF5c1swXSA9IF9NX2RheV9hMTsKICAgICAgICBfX2RheXNbMV0gPSBf
TV9kYXlfYTI7CiAgICAgICAgX19kYXlzWzJdID0gX01fZGF5X2EzOwogICAgICAgIF9fZGF5c1sz
XSA9IF9NX2RheV9hNDsKICAgICAgICBfX2RheXNbNF0gPSBfTV9kYXlfYTU7CiAgICAgICAgX19k
YXlzWzVdID0gX01fZGF5X2E2OwogICAgICAgIF9fZGF5c1s2XSA9IF9NX2RheV9hNzsKICAgICAg
fQoKICAgICAgdm9pZAogICAgICBfTV9tb250aHMoY29uc3QgX0NoYXJUKiogX19tb250aHMpIGNv
bnN0CiAgICAgIHsKICAgICAgICBfX21vbnRoc1swXSA9IF9NX21vbnRoMDE7CiAgICAgICAgX19t
b250aHNbMV0gPSBfTV9tb250aDAyOwogICAgICAgIF9fbW9udGhzWzJdID0gX01fbW9udGgwMzsK
ICAgICAgICBfX21vbnRoc1szXSA9IF9NX21vbnRoMDQ7CiAgICAgICAgX19tb250aHNbNF0gPSBf
TV9tb250aDA1OwogICAgICAgIF9fbW9udGhzWzVdID0gX01fbW9udGgwNjsKICAgICAgICBfX21v
bnRoc1s2XSA9IF9NX21vbnRoMDc7CiAgICAgICAgX19tb250aHNbN10gPSBfTV9tb250aDA4Owog
ICAgICAgIF9fbW9udGhzWzhdID0gX01fbW9udGgwOTsKICAgICAgICBfX21vbnRoc1s5XSA9IF9N
X21vbnRoMTA7CiAgICAgICAgX19tb250aHNbMTBdID0gX01fbW9udGgxMTsKICAgICAgICBfX21v
bnRoc1sxMV0gPSBfTV9tb250aDEyOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX21vbnRo
c19hYmJyZXZpYXRlZChjb25zdCBfQ2hhclQqKiBfX21vbnRocykgY29uc3QKICAgICAgewogICAg
ICAgIF9fbW9udGhzWzBdID0gX01fbW9udGhfYTAxOwogICAgICAgIF9fbW9udGhzWzFdID0gX01f
bW9udGhfYTAyOwogICAgICAgIF9fbW9udGhzWzJdID0gX01fbW9udGhfYTAzOwogICAgICAgIF9f
bW9udGhzWzNdID0gX01fbW9udGhfYTA0OwogICAgICAgIF9fbW9udGhzWzRdID0gX01fbW9udGhf
YTA1OwogICAgICAgIF9fbW9udGhzWzVdID0gX01fbW9udGhfYTA2OwogICAgICAgIF9fbW9udGhz
WzZdID0gX01fbW9udGhfYTA3OwogICAgICAgIF9fbW9udGhzWzddID0gX01fbW9udGhfYTA4Owog
ICAgICAgIF9fbW9udGhzWzhdID0gX01fbW9udGhfYTA5OwogICAgICAgIF9fbW9udGhzWzldID0g
X01fbW9udGhfYTEwOwogICAgICAgIF9fbW9udGhzWzEwXSA9IF9NX21vbnRoX2ExMTsKICAgICAg
ICBfX21vbnRoc1sxMV0gPSBfTV9tb250aF9hMTI7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIHZpcnR1YWwKICAgICAgfl9fdGltZXB1bmN0KCk7CgoKICAgICAgdm9pZAogICAgICBfTV9p
bml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9TX2NfbG9jYWxlKTsKICAg
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgX190aW1lcHVu
Y3Q8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6fl9f
dGltZXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGNoYXIqCiAgICBfX3RpbWVwdW5j
dDxjaGFyPjo6X1NfdGltZXpvbmVzWzE0XTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190
aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9j
KTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX3B1dChj
aGFyKiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgY29uc3QgdG0qKSBjb25zdDsKCgogIHRlbXBsYXRl
PD4KICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+Ojp+X190aW1lcHVuY3QoKTsKCiAgdGVtcGxhdGU8
PgogICAgY29uc3Qgd2NoYXJfdCoKICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfU190aW1lem9u
ZXNbMTRdOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6
X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+
CiAgICB2b2lkCiAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01fcHV0KHdjaGFyX3QqLCBzaXpl
X3QsIGNvbnN0IHdjaGFyX3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB0bSopIGNvbnN0OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNvbnN0IF9D
aGFyVCogX190aW1lcHVuY3Q8X0NoYXJUPjo6X1NfdGltZXpvbmVzWzE0XTsKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0IDog
cHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoK
CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0
ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBl
OwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICB0aW1l
X2dldChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0IChfX3JlZnMpIHsg
fQoKICAgICAgZGF0ZW9yZGVyCiAgICAgIGRhdGVfb3JkZXIoKSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb19kYXRlX29yZGVyKCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfdGlt
ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX2dldF90aW1lKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
dG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBp
dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19n
ZXRfZGF0ZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90
eXBlCiAgICAgIGdldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3dlZWtkYXkoX19i
ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBn
ZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg
X19pbywKICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBf
X3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfbW9udGhuYW1lKF9fYmVnLCBf
X2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3ll
YXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19nZXRfeWVhcihfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBf
X3RtKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9nZXQoKSB7
IH0KCiAgICAgIHZpcnR1YWwgZGF0ZW9yZGVyCiAgICAgIGRvX2RhdGVfb3JkZXIoKSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF90aW1lKGl0ZXJfdHlwZSBfX2Jl
ZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0
ZXJfdHlwZQogICAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
Z2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwK
ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0
ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKCiAgICAgIHZvaWQKICAgICAgX01f
ZXh0cmFjdF9udW0oaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21l
bWJlciwKICAgICAgICAgICAgICAgICAgICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBf
X2xlbiwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSwK
ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdDsKCgoK
ICAgICAgdm9pZAogICAgICBfTV9leHRyYWN0X25hbWUoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90
eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9D
aGFyVCoqIF9fbmFtZXMsIHNpemVfdCBfX2luZGV4bGVuLAogICAgICAgICAgICAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdDsKCgogICAgICB2b2lkCiAgICAgIF9NX2V4
dHJhY3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpb3Nf
YmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgdG0qIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hh
clQqIF9fZm9ybWF0KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVy
Pjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAg
IGNsYXNzIHRpbWVfZ2V0X2J5bmFtZSA6IHB1YmxpYyB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+
CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg
IHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX2dl
dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IHRpbWVfZ2V0
PF9DaGFyVCwgX0luSXRlcj4oX19yZWZzKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1
YWwKICAgICAgfnRpbWVfZ2V0X2J5bmFtZSgpIHsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIHRpbWVfcHV0IDogcHVibGlj
IGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAg
IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5
cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRp
bWVfcHV0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7
IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9f
aW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgICAgY29uc3QgX0No
YXJUKiBfX2JlZywgY29uc3QgX0NoYXJUKiBfX2VuZCkgY29uc3Q7CgogICAgICBpdGVyX3R5cGUK
ICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxs
LAogICAgICAgICAgY29uc3QgdG0qIF9fdG0sIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2QgPSAw
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9f
dG0sIF9fZm9ybWF0LCBfX21vZCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAg
ICAgfnRpbWVfcHV0KCkKICAgICAgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBk
b19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNv
bnN0IHRtKiBfX3RtLAogICAgICAgICAgICAgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29u
c3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy
PgogICAgbG9jYWxlOjppZCB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1
dF9ieW5hbWUgOiBwdWJsaWMgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4KICAgIHsKICAgIHB1
YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0
SXRlciBpdGVyX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX3B1dF9ieW5hbWUoY29u
c3QgY2hhciogLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiB0aW1lX3B1dDxfQ2hhclQsIF9P
dXRJdGVyPihfX3JlZnMpCiAgICAgIHsgfTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwK
ICAgICAgfnRpbWVfcHV0X2J5bmFtZSgpIHsgfQogICAgfTsKCgogIGNsYXNzIG1vbmV5X2Jhc2UK
ICB7CiAgcHVibGljOgogICAgZW51bSBwYXJ0IHsgbm9uZSwgc3BhY2UsIHN5bWJvbCwgc2lnbiwg
dmFsdWUgfTsKICAgIHN0cnVjdCBwYXR0ZXJuIHsgY2hhciBmaWVsZFs0XTsgfTsKCiAgICBzdGF0
aWMgY29uc3QgcGF0dGVybiBfU19kZWZhdWx0X3BhdHRlcm47CgoKCiAgICBzdGF0aWMgcGF0dGVy
bgogICAgX1NfY29uc3RydWN0X3BhdHRlcm4oY2hhciBfX3ByZWNlZGVzLCBjaGFyIF9fc3BhY2Us
IGNoYXIgX19wb3NuKTsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0lu
dGw+CiAgICBjbGFzcyBtb25leXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBt
b25leV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpbnRsID0gX0ludGw7CiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk
IGlkOwoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IGNoYXIqIF9NX2dyb3VwaW5nOwogICAgICBj
aGFyX3R5cGUgX01fZGVjaW1hbF9wb2ludDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19z
ZXA7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fY3Vycl9zeW1ib2w7CiAgICAgIGNvbnN0IGNo
YXJfdHlwZSogX01fcG9zaXRpdmVfc2lnbjsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV9uZWdh
dGl2ZV9zaWduOwogICAgICBpbnQgX01fZnJhY19kaWdpdHM7CiAgICAgIHBhdHRlcm4gX01fcG9z
X2Zvcm1hdDsKICAgICAgcGF0dGVybiBfTV9uZWdfZm9ybWF0OwoKICAgIHB1YmxpYzoKICAgICAg
ZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZh
Y2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoKTsgfQoKICAgICAg
ZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciog
X19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAg
ICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jbG9jLCBfX3MpOyB9CgogICAgICBjaGFy
X3R5cGUKICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X2RlY2ltYWxfcG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAo
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAg
IHN0cmluZwogICAgICBncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dy
b3VwaW5nKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIGN1cnJfc3ltYm9sKCkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY3Vycl9zeW1ib2woKTsgfQoKICAgICAgc3RyaW5nX3R5
cGUKICAgICAgcG9zaXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bv
c2l0aXZlX3NpZ24oKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgbmVnYXRpdmVfc2lnbigp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ2F0aXZlX3NpZ24oKTsgfQoKICAgICAg
aW50CiAgICAgIGZyYWNfZGlnaXRzKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZnJh
Y19kaWdpdHMoKTsgfQoKICAgICAgcGF0dGVybgogICAgICBwb3NfZm9ybWF0KCkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9zX2Zvcm1hdCgpOyB9CgogICAgICBwYXR0ZXJuCiAgICAg
IG5lZ19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdfZm9ybWF0KCk7
IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3QoKTsKCiAg
ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25zdAogICAg
ICB7IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQog
ICAgICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRz
X3NlcDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAog
ICAgICB7IHJldHVybiBfTV9ncm91cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQog
ICAgICBkb19jdXJyX3N5bWJvbCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJfc3ltYm9s
OyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX3Bvc2l0aXZlX3NpZ24oKSBj
b25zdAogICAgICB7IHJldHVybiBfTV9wb3NpdGl2ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIHN0
cmluZ190eXBlCiAgICAgIGRvX25lZ2F0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiBf
TV9uZWdhdGl2ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19mcmFjX2RpZ2l0
cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2ZyYWNfZGlnaXRzOyB9CgogICAgICB2aXJ0dWFs
IHBhdHRlcm4KICAgICAgZG9fcG9zX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Bv
c19mb3JtYXQ7IH0KCiAgICAgIHZpcnR1YWwgcGF0dGVybgogICAgICBkb19uZWdfZm9ybWF0KCkg
Y29uc3QKICAgICAgeyByZXR1cm4gX01fbmVnX2Zvcm1hdDsgfQoKCiAgICAgICB2b2lkCiAgICAg
ICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfU19jX2xvY2Fs
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX25hbWUgPSBf
X251bGwpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgog
ICAgbG9jYWxlOjppZCBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+OjppZDsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0PF9D
aGFyVCwgX0ludGw+OjppbnRsOwoKICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PGNoYXIsIHRy
dWU+Ojp+bW9uZXlwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PGNoYXIsIGZh
bHNlPjo6fm1vbmV5cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5j
dDxjaGFyLCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsIGNvbnN0
IGNoYXIqKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxz
ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlLCBjb25zdCBjaGFyKik7CgoK
ICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojp+bW9uZXlwdW5jdCgp
OwoKICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6fm1vbmV5cHVu
Y3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVl
Pjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciopOwoKICB0
ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5p
dGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKTsKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1l
IDogcHVibGljIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4KICAgIHsKICAgICAgX19jX2xvY2Fs
ZSBfTV9jX2xvY2FsZV9tb25leXB1bmN0OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190
eXBlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwoKICAgICAgZXhwbGlj
aXQKICAgICAgbW9uZXlwdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZz
ID0gMCkKICAgICAgOiBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+KF9fcmVmcykKICAgICAgewog
ICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0LCBfX3MpOwog
ICAgICAgIF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfTV9jX2xvY2FsZV9tb25leXB1bmN0KTsK
ICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlwdW5jdF9i
eW5hbWUoKQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbW9uZXlwdW5j
dCk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAg
IGNvbnN0IGJvb2wgbW9uZXlwdW5jdF9ieW5hbWU8X0NoYXJULCBfSW50bD46OmludGw7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIG1vbmV5
X2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl
ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0
aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5X2dldChzaXplX3Qg
X19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUK
ICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRv
dWJsZSYgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywgX19l
bmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fdW5pdHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAg
ICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlw
ZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX3MsIF9fZW5k
LCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX2RpZ2l0cyk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAg
IHZpcnR1YWwKICAgICAgfm1vbmV5X2dldCgpIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK
ICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGws
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBs
b25nIGRvdWJsZSYgX191bml0cykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg
ICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9z
X2Jhc2UmIF9faW8sCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmlu
Z190eXBlJiBfX2RpZ2l0cykgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X2dldDxfQ2hhclQsIF9J
bkl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl
cj4KICAgIGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBw
dWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0
SXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5n
X3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAg
IG1vbmV5X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9
CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBp
b3NfYmFzZSYgX19pbywKICAgICAgICAgIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9f
dW5pdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19p
bywgX19maWxsLCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5
cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBjaGFyX3R5cGUg
X19maWxsLCBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7IH0KCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5X3B1dCgpIHsgfQoKICAgICAg
dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRs
LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgIGxvbmcgZG91
YmxlIF9fdW5pdHMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0
KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9f
ZmlsbCwKICAgICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3Q7CiAg
ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg
bG9jYWxlOjppZCBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKCiAgc3RydWN0IG1l
c3NhZ2VzX2Jhc2UKICB7CiAgICB0eXBlZGVmIGludCBjYXRhbG9nOwogIH07CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzIDogcHVibGljIGxvY2FsZTo6ZmFj
ZXQsIHB1YmxpYyBtZXNzYWdlc19iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVm
IF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3Ry
aW5nX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVf
bWVzc2FnZXM7CgoKICAgICAgY29uc3QgY2hhciogX01fbmFtZV9tZXNzYWdlczsKCgogICAgcHVi
bGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1l
c3NhZ2VzKHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSwg
X01fbmFtZV9tZXNzYWdlcygiQyIpCiAgICAgIHsgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19j
X2xvY2FsZTsgfQoKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzKF9fY19sb2NhbGUgX19j
bG9jLCBjb25zdCBjaGFyKiBfX25hbWUsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2Fs
ZTo6ZmFjZXQoX19yZWZzKQogICAgICB7CiAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fbmFt
ZTsKICAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xv
Yyk7CiAgICAgIH0KCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8
Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsgfQoKCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25z
dCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmLCBjb25zdCBjaGFyKikgY29uc3Q7
CgogICAgICBzdHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3NldCwgaW50
IF9fbXNnaWQsIGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX2dldChfX2MsIF9fc2V0LCBfX21zZ2lkLCBfX3MpOyB9CgogICAgICB2b2lkCiAgICAg
IGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jbG9zZShf
X2MpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlcygpCiAg
ICAgICB7CiAgICAgICAgIGlmIChfTV9jX2xvY2FsZV9tZXNzYWdlcyAhPSBfU19jX2xvY2FsZSkK
ICAgICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKICAg
ICAgIH0KCiAgICAgIHZpcnR1YWwgY2F0YWxvZwogICAgICBkb19vcGVuKGNvbnN0IGJhc2ljX3N0
cmluZzxjaGFyPiYsIGNvbnN0IGxvY2FsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBzdHJpbmdf
dHlwZQogICAgICBkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZ190eXBlJiBf
X2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgZG9fY2xvc2UoY2F0YWxv
ZykgY29uc3Q7CgoKICAgICAgY2hhcioKICAgICAgX01fY29udmVydF90b19jaGFyKGNvbnN0IHN0
cmluZ190eXBlJiBfX21zZykgY29uc3QKICAgICAgewoKICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oY29uc3RfY2FzdDxfQ2hhclQqPihfX21zZy5jX3N0cigpKSk7CiAgICAg
IH0KCgogICAgICBzdHJpbmdfdHlwZQogICAgICBfTV9jb252ZXJ0X2Zyb21fY2hhcihjaGFyKiBf
X21zZykgY29uc3QKICAgICAgewoKICAgICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxj
aGFyPjo6bGVuZ3RoKF9fbXNnKSAtIDE7CgogICAgICAgIHJldHVybiBzdHJpbmdfdHlwZSgpOwog
ICAgICB9CiAgICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjpp
ZCBtZXNzYWdlczxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIHN0cmluZwogICAgbWVz
c2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJikgY29u
c3Q7CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1lIG1lc3NhZ2Vz
PF9DaGFyVD46OmNhdGFsb2cKICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNf
c3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqKSBjb25zdAogICAgeyByZXR1cm4gdGhpcy0+ZG9fb3Blbihf
X3MsIF9fbG9jKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUg
bWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZwogICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fb3Blbihj
b25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdAogICAgeyByZXR1
cm4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdl
czxfQ2hhclQ+OjpzdHJpbmdfdHlwZQogICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fZ2V0KGNhdGFs
b2csIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZ190
eXBlJiBfX2RmYXVsdCkgY29uc3QKICAgIHsgcmV0dXJuIF9fZGZhdWx0OyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIHZvaWQKICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2Nsb3Nl
KGNhdGFsb2cpIGNvbnN0CiAgICB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGNsYXNzIG1lc3NhZ2VzX2J5bmFtZSA6IHB1YmxpYyBtZXNzYWdlczxfQ2hhclQ+CiAgICB7CiAg
ICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBi
YXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1l
c3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6
IG1lc3NhZ2VzPF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX01fbmFtZV9tZXNzYWdl
cyA9IF9fczsKICAgICAgICBpZiAoX01fY19sb2NhbGVfbWVzc2FnZXMgIT0gX1NfY19sb2NhbGUp
CiAgICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKICAg
ICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7CiAgICAg
IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1lc3NhZ2VzX2J5bmFtZSgp
CiAgICAgIHsgfQogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQog
ICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFz
ZTo6c3BhY2UsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5l
IGJvb2wKICAgIGlzcHJpbnQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsg
cmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnBy
aW50LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29s
CiAgICBpc2NudHJsKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVy
biB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpjbnRybCwg
X19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAg
aXN1cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNl
X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6dXBwZXIsIF9fYyk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wgaXNsb3dlcihf
Q2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0
eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6bG93ZXIsIF9fYyk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxwaGEoX0NoYXJU
IF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxf
Q2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFscGhhLCBfX2MpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2RpZ2l0KF9DaGFyVCBfX2Ms
IGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU
PiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwdW5jdChfQ2hhclQgX19jLCBjb25z
dCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf
X2xvYykuaXMoY3R5cGVfYmFzZTo6cHVuY3QsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzeGRpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxv
Y2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9j
KS5pcyhjdHlwZV9iYXNlOjp4ZGlnaXQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxudW0oX0NoYXJUIF9fYywgY29uc3QgbG9jYWxl
JiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlz
KGN0eXBlX2Jhc2U6OmFsbnVtLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGlubGluZSBib29sCiAgICBpc2dyYXBoKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19s
b2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlw
ZV9iYXNlOjpncmFwaCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bmxpbmUgX0NoYXJUCiAgICB0b3VwcGVyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2Mp
CiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS50b3VwcGVyKF9f
Yyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAg
dG9sb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNl
X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG9sb3dlcihfX2MpOyB9Cn0KCgpuYW1lc3Bh
Y2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgY2xhc3MgYmFzaWNfaW9zIDogcHVibGljIGlvc19iYXNlCiAgICB7CiAgICBwdWJsaWM6Cgog
ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1Ry
YWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6
cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5
cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0
eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIG9zdHJlYW1i
dWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsKICAgICAgdHlw
ZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAg
ICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVh
bWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9nZXQ8X0NoYXJULCBfX2lzdHJlYW1idWZfaXRl
cj4gX19udW1nZXRfdHlwZTsKCgogICAgcHJvdGVjdGVkOgogICAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4qIF9NX3RpZTsKICAgICAgbXV0YWJsZSBjaGFyX3R5cGUgX01fZmlsbDsK
ICAgICAgbXV0YWJsZSBib29sIF9NX2ZpbGxfaW5pdDsKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz4qIF9NX3N0cmVhbWJ1ZjsKCgogICAgICBjb25zdCBfX2N0eXBlX3R5cGUq
IF9NX2ZjdHlwZTsKCiAgICAgIGNvbnN0IF9fbnVtcHV0X3R5cGUqIF9NX2ZudW1wdXQ7CgogICAg
ICBjb25zdCBfX251bWdldF90eXBlKiBfTV9mbnVtZ2V0OwoKICAgIHB1YmxpYzoKICAgICAgb3Bl
cmF0b3Igdm9pZCooKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5mYWlsKCkgPyAwIDogY29u
c3RfY2FzdDxiYXNpY19pb3MqPih0aGlzKTsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvciEo
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5mYWlsKCk7IH0KCiAgICAgIGlvc3RhdGUKICAg
ICAgcmRzdGF0ZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsgfQoK
ICAgICAgdm9pZAogICAgICBjbGVhcihpb3N0YXRlIF9fc3RhdGUgPSBnb29kYml0KTsKCiAgICAg
IHZvaWQKICAgICAgc2V0c3RhdGUoaW9zdGF0ZSBfX3N0YXRlKQogICAgICB7IHRoaXMtPmNsZWFy
KHRoaXMtPnJkc3RhdGUoKSB8IF9fc3RhdGUpOyB9CgogICAgICBib29sCiAgICAgIGdvb2QoKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZHN0YXRlKCkgPT0gMDsgfQoKICAgICAgYm9vbAog
ICAgICBlb2YoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgZW9mYml0
KSAhPSAwOyB9CgogICAgICBib29sCiAgICAgIGZhaWwoKSBjb25zdAogICAgICB7IHJldHVybiAo
dGhpcy0+cmRzdGF0ZSgpICYgKGJhZGJpdCB8IGZhaWxiaXQpKSAhPSAwOyB9CgogICAgICBib29s
CiAgICAgIGJhZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBiYWRi
aXQpICE9IDA7IH0KCiAgICAgIGlvc3RhdGUKICAgICAgZXhjZXB0aW9ucygpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIF9NX2V4Y2VwdGlvbjsgfQoKICAgICAgdm9pZAogICAgICBleGNlcHRpb25zKGlv
c3RhdGUgX19leGNlcHQpCiAgICAgIHsKICAgICAgICBfTV9leGNlcHRpb24gPSBfX2V4Y2VwdDsK
ICAgICAgICB0aGlzLT5jbGVhcihfTV9zdHJlYW1idWZfc3RhdGUpOwogICAgICB9CgoKICAgICAg
ZXhwbGljaXQKICAgICAgYmFzaWNfaW9zKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
KiBfX3NiKSA6IGlvc19iYXNlKCkKICAgICAgeyB0aGlzLT5pbml0KF9fc2IpOyB9CgogICAgICB2
aXJ0dWFsCiAgICAgIH5iYXNpY19pb3MoKSB7IH0KCgogICAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4qCiAgICAgIHRpZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3RpZTsgfQoK
ICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KgogICAgICB0aWUoYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX3RpZXN0cikKICAgICAgewogICAgICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV90aWU7CiAgICAgICAgX01fdGllID0g
X190aWVzdHI7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9CgogICAgICBiYXNpY19zdHJl
YW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgICAgcmRidWYoKSBjb25zdAogICAgICB7IHJldHVy
biBfTV9zdHJlYW1idWY7IH0KCiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
KgogICAgICByZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7Cgog
ICAgICBiYXNpY19pb3MmCiAgICAgIGNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3Jocyk7Cgog
ICAgICBjaGFyX3R5cGUKICAgICAgZmlsbCgpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoIV9N
X2ZpbGxfaW5pdCkKICAgICAgICAgIHsKICAgICAgICAgICAgX01fZmlsbCA9IHRoaXMtPndpZGVu
KCcgJyk7CiAgICAgICAgICAgIF9NX2ZpbGxfaW5pdCA9IHRydWU7CiAgICAgICAgICB9CiAgICAg
ICAgcmV0dXJuIF9NX2ZpbGw7CiAgICAgIH0KCiAgICAgIGNoYXJfdHlwZQogICAgICBmaWxsKGNo
YXJfdHlwZSBfX2NoKQogICAgICB7CiAgICAgICAgY2hhcl90eXBlIF9fb2xkID0gdGhpcy0+Zmls
bCgpOwogICAgICAgIF9NX2ZpbGwgPSBfX2NoOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAg
fQoKCiAgICAgIGxvY2FsZQogICAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgICAg
IGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoK
ICAgICAgY2hhcl90eXBlCiAgICAgIHdpZGVuKGNoYXIgX19jKSBjb25zdDsKCiAgICBwcm90ZWN0
ZWQ6CgogICAgICBiYXNpY19pb3MoKSA6IGlvc19iYXNlKCkKICAgICAgeyB9CgogICAgICB2b2lk
CiAgICAgIGluaXQoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAg
ICAgYm9vbAogICAgICBfTV9jaGVja19mYWNldChjb25zdCBsb2NhbGU6OmZhY2V0KiBfX2YpIGNv
bnN0CiAgICAgIHsKICAgICAgICBpZiAoIV9fZikKICAgICAgICAgIF9fdGhyb3dfYmFkX2Nhc3Qo
KTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9jYWNo
ZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xvYyk7CiAgICB9Owp9CgoKCgoKCm5hbWVzcGFjZSBz
dGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZv
aWQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpjbGVhcihpb3N0YXRlIF9fc3RhdGUp
CiAgICB7CiAgICAgIGlmICh0aGlzLT5yZGJ1ZigpKQogICAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0
ZSA9IF9fc3RhdGU7CiAgICAgIGVsc2UKICAgICAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9f
c3RhdGUgfCBiYWRiaXQ7CiAgICAgIGlmICgodGhpcy0+cmRzdGF0ZSgpICYgdGhpcy0+ZXhjZXB0
aW9ucygpKSkKICAgICAgICBfX3Rocm93X2lvc19mYWlsdXJlKCJiYXNpY19pb3M6OmNsZWFyKGlv
c3RhdGUpIGNhdXNlZCBleGNlcHRpb24iKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0
cz4qCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6cmRidWYoYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICB7CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+KiBfX29sZCA9IF9NX3N0cmVhbWJ1ZjsKICAgICAgX01fc3RyZWFtYnVmID0g
X19zYjsKICAgICAgdGhpcy0+Y2xlYXIoKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pb3M8
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpjb3B5Zm10
KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpCiAgICB7CgoKCgogICAgICBfV29yZHMqIF9fd29yZHMg
PSAoX19yaHMuX01fd29yZF9zaXplIDw9IF9TX2xvY2FsX3dvcmRfc2l6ZSkgPwogICAgICAgIF9N
X2xvY2FsX3dvcmQgOiBuZXcgX1dvcmRzW19fcmhzLl9NX3dvcmRfc2l6ZV07CgoKICAgICAgX0Nh
bGxiYWNrX2xpc3QqIF9fY2IgPSBfX3Jocy5fTV9jYWxsYmFja3M7CiAgICAgIGlmIChfX2NiKQog
ICAgICAgIF9fY2ItPl9NX2FkZF9yZWZlcmVuY2UoKTsKICAgICAgX01fY2FsbF9jYWxsYmFja3Mo
ZXJhc2VfZXZlbnQpOwogICAgICBpZiAoX01fd29yZCAhPSBfTV9sb2NhbF93b3JkKQogICAgICAg
IHsKICAgICAgICAgIGRlbGV0ZSBbXSBfTV93b3JkOwogICAgICAgICAgX01fd29yZCA9IDA7CiAg
ICAgICAgfQogICAgICBfTV9kaXNwb3NlX2NhbGxiYWNrcygpOwoKICAgICAgX01fY2FsbGJhY2tz
ID0gX19jYjsKICAgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgX19yaHMuX01fd29yZF9zaXpl
OyArK19faSkKICAgICAgICBfX3dvcmRzW19faV0gPSBfX3Jocy5fTV93b3JkW19faV07CiAgICAg
IGlmIChfTV93b3JkICE9IF9NX2xvY2FsX3dvcmQpCiAgICAgICAgewogICAgICAgICAgZGVsZXRl
IFtdIF9NX3dvcmQ7CiAgICAgICAgICBfTV93b3JkID0gMDsKICAgICAgICB9CiAgICAgIF9NX3dv
cmQgPSBfX3dvcmRzOwogICAgICBfTV93b3JkX3NpemUgPSBfX3Jocy5fTV93b3JkX3NpemU7Cgog
ICAgICB0aGlzLT5mbGFncyhfX3Jocy5mbGFncygpKTsKICAgICAgdGhpcy0+d2lkdGgoX19yaHMu
d2lkdGgoKSk7CiAgICAgIHRoaXMtPnByZWNpc2lvbihfX3Jocy5wcmVjaXNpb24oKSk7CiAgICAg
IHRoaXMtPnRpZShfX3Jocy50aWUoKSk7CiAgICAgIHRoaXMtPmZpbGwoX19yaHMuZmlsbCgpKTsK
CiAgICAgIHRoaXMtPmV4Y2VwdGlvbnMoX19yaHMuZXhjZXB0aW9ucygpKTsKCiAgICAgIF9NX2Nh
bGxfY2FsbGJhY2tzKGNvcHlmbXRfZXZlbnQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNoYXIKICAg
IGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBf
X2RmYXVsdCkgY29uc3QKICAgIHsKICAgICAgY2hhciBfX3JldCA9IF9fZGZhdWx0OwogICAgICBp
ZiAoX01fY2hlY2tfZmFjZXQoX01fZmN0eXBlKSkKICAgICAgICBfX3JldCA9IF9NX2ZjdHlwZS0+
bmFycm93KF9fYywgX19kZmF1bHQpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIF9DaGFyVAogICAgYmFz
aWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OndpZGVuKGNoYXIgX19jKSBjb25zdAogICAgewogICAg
ICBjaGFyX3R5cGUgX19yZXQgPSBjaGFyX3R5cGUoKTsKICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0
KF9NX2ZjdHlwZSkpCiAgICAgICAgX19yZXQgPSBfTV9mY3R5cGUtPndpZGVuKF9fYyk7CiAgICAg
IHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGxvY2FsZQogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46Omlt
YnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGxvY2FsZSBfX29sZCh0aGlzLT5n
ZXRsb2MoKSk7CiAgICAgIGlvc19iYXNlOjppbWJ1ZShfX2xvYyk7CiAgICAgIF9NX2NhY2hlX2Zh
Y2V0cyhfX2xvYyk7CiAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICE9IDApCiAgICAgICAgdGhpcy0+
cmRidWYoKS0+cHViaW1idWUoX19sb2MpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJh
c2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojppbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+KiBfX3NiKQogICAgewoKICAgICAgaW9zX2Jhc2U6Ol9NX2luaXQoKTsKICAgICAgX01f
Y2FjaGVfZmFjZXRzKF9NX2lvc19sb2NhbGUpOwogICAgICBfTV90aWUgPSAwOwoKICAgICAgX01f
ZmlsbCA9IF9DaGFyVCgpOwogICAgICBfTV9maWxsX2luaXQgPSBmYWxzZTsKCiAgICAgIF9NX2V4
Y2VwdGlvbiA9IGdvb2RiaXQ7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9fc2I7CiAgICAgIF9NX3N0
cmVhbWJ1Zl9zdGF0ZSA9IF9fc2IgPyBnb29kYml0IDogYmFkYml0OwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19p
b3M8X0NoYXJULCBfVHJhaXRzPjo6X01fY2FjaGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2Mp
CiAgICB7CiAgICAgIGlmIChoYXNfZmFjZXQ8X19jdHlwZV90eXBlPihfX2xvYykpCiAgICAgICAg
X01fZmN0eXBlID0gJnVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKTsKICAgICAgZWxzZQog
ICAgICAgIF9NX2ZjdHlwZSA9IDA7CgogICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtcHV0X3R5cGU+
KF9fbG9jKSkKICAgICAgICBfTV9mbnVtcHV0ID0gJnVzZV9mYWNldDxfX251bXB1dF90eXBlPihf
X2xvYyk7CiAgICAgIGVsc2UKICAgICAgICBfTV9mbnVtcHV0ID0gMDsKICAgICAgaWYgKGhhc19m
YWNldDxfX251bWdldF90eXBlPihfX2xvYykpCiAgICAgICAgX01fZm51bWdldCA9ICZ1c2VfZmFj
ZXQ8X19udW1nZXRfdHlwZT4oX19sb2MpOwogICAgICBlbHNlCiAgICAgICAgX01fZm51bWdldCA9
IDA7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3M8Y2hhcj47CiAg
ZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lvczx3Y2hhcl90PjsKfQoKCgoKbmFtZXNwYWNl
IHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGNsYXNzIGJhc2ljX29zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBf
VHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9U
cmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJU
LCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hh
clQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRl
cmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBu
dW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5
cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAg
YmFzaWNfb3N0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAgICB7IHRoaXMtPmluaXQo
X19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX29zdHJlYW0oKSB7IH0KCgogICAg
ICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CgoKCiAgICAgIF9fb3N0
cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0
cmVhbV90eXBlJikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19p
b3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAg
ICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19wZikgKGlvc19iYXNlJikpOwoKCiAgICAgIF9f
b3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVh
bV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0
cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGJvb2wgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90
eXBlJgogICAgICBvcGVyYXRvcjw8KHNob3J0IF9fbikKICAgICAgewogICAgICAgIGlvc19iYXNl
OjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwog
ICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4
KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNp
Z25lZCBzaG9ydD4oX19uKSkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiB0aGlzLT5v
cGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOwogICAgICB9CgogICAgICBfX29zdHJl
YW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBfX24pCiAgICAgIHsgcmV0
dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0K
CiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGludCBfX24pCiAgICAgIHsK
ICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jh
c2U6OmJhc2VmaWVsZDsKICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10
ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAg
cmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0K
CiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBfX24p
CiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u
Zz4oX19uKSk7IH0KCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChsb25n
IGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2ln
bmVkIGxvbmcgbG9uZyBfX24pOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRv
cjw8KGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwo
ZmxvYXQgX19mKQogICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGRv
dWJsZT4oX19mKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxv
bmcgZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChj
b25zdCB2b2lkKiBfX3ApOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwo
X19zdHJlYW1idWZfdHlwZSogX19zYik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHB1
dChjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICB3cml0ZShjb25z
dCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUm
CiAgICAgIGZsdXNoKCk7CgoKICAgICAgcG9zX3R5cGUKICAgICAgdGVsbHAoKTsKCiAgICAgIF9f
b3N0cmVhbV90eXBlJgogICAgICBzZWVrcChwb3NfdHlwZSk7CgogICAgICBfX29zdHJlYW1fdHlw
ZSYKICAgICAgc2Vla3Aob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07CgoKICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnkKICAgIHsKCiAgICAgIGJvb2wgX01f
b2s7CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfTV9vczsKCiAgICBwdWJs
aWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJh
aXRzPiYgX19vcyk7CgogICAgICB+c2VudHJ5KCkKICAgICAgewoKICAgICAgICBpZiAoX01fb3Mu
ZmxhZ3MoKSAmIGlvc19iYXNlOjp1bml0YnVmICYmICF1bmNhdWdodF9leGNlcHRpb24oKSkKICAg
ICAgICAgIHsKCiAgICAgICAgICAgIGlmIChfTV9vcy5yZGJ1ZigpICYmIF9NX29zLnJkYnVmKCkt
PnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgICBfTV9vcy5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsKICAgICAgICAgIH0KICAgICAgfQoKICAgICAgb3BlcmF0b3IgYm9vbCgpCiAgICAg
IHsgcmV0dXJuIF9NX29rOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBv
cGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIF9DaGFyVCBf
X2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0
IDw8IF9fb3V0LndpZGVuKF9fYykpOyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAg
IGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJl
YW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo
YmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHNpZ25lZCBjaGFyIF9fYykKICAg
IHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgfQoKICB0ZW1wbGF0
ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9w
ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHVuc2lnbmVkIGNo
YXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4K
ICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z
dHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxh
dGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBv
cGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBzaWdu
ZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19v
c3RyZWFtPGNoYXIsIF9UcmFpdHM+ICYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFy
LCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJu
IChfX291dCA8PCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3MpKTsgfQoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5kbChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mIF9fb3MpCiAgICB7IHJldHVybiBmbHVzaChfX29zLnB1dChfX29zLndpZGVuKCdcbicpKSk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5kcyhiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBfX29zLnB1dChfQ2hhclQoKSk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZmx1c2goYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gX19vcy5mbHVzaCgpOyB9Cgp9CgoKCgoKCgoKCgoK
CgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgoKZXh0ZXJuIGludCBlcnJubzsKCgpl
eHRlcm4gaW50ICpfX2Vycm5vX2xvY2F0aW9uICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGNoYXIgKnByb2dyYW1faW52b2NhdGlvbl9uYW1lLCAq
cHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWU7CgoKCn0KCnR5cGVkZWYgaW50IGVycm9yX3Q7
CgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBsb25nIGRvdWJs
ZSBmbG9hdF90OwoKdHlwZWRlZiBsb25nIGRvdWJsZSBkb3VibGVfdDsKCgoKCmV4dGVybiBkb3Vi
bGUgYWNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hY29zIChkb3Vi
bGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbiAoZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19hc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBk
b3VibGUgYXRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuIChk
b3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbjIgKGRvdWJsZSBfX3ksIGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbjIgKGRvdWJsZSBfX3ksIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgY29zIChkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4g
ZG91YmxlIHNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaW4gKGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW4gKGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHZvaWQgc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gp
IHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3Np
bngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjb3NoIChk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX3NpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW5o
IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGFjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX2Fjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3Vi
bGUgYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbmggKGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGRvdWJsZSBleHAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
ZXhwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBleHAxMCAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAxMCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7CgpleHRlcm4gZG91YmxlIHBvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX3BvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBmcmV4
cCAoZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2ZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBk
b3VibGUgbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX2xkZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGRvdWJsZSBsb2cgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
bG9nIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzEwIChkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzEwIChkb3VibGUgX194KSB0aHJvdyAo
KTsKCgpleHRlcm4gZG91YmxlIG1vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX21vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBleHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBkb3VibGUgX19leHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJs
ZSBsb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cxcCAoZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2diIChkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGRvdWJsZSBleHAyIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4
cDIgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMiAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cyIChkb3VibGUgX194KSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGRvdWJsZSBwb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgp
OyBleHRlcm4gZG91YmxlIF9fcG93IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsK
CgpleHRlcm4gZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fc3FydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgaHlwb3QgKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9faHlwb3QgKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjYnJ0IChk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NicnQgKGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJs
ZSBmYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
IGV4dGVybiBkb3VibGUgX19mYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmbG9vciAoZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19mbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2Ztb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBfX2lzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3Vi
bGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy
biBpbnQgZmluaXRlIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19kcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBzaWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19zaWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gZG91YmxlIGNvcHlzaWduIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19jb3B5c2lnbiAo
ZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCgoKZXh0ZXJuIGRvdWJsZSBuYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9fY29u
c3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
CgpleHRlcm4gaW50IF9faXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAo
ZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2owIChkb3VibGUpIHRocm93ICgpOwpl
eHRlcm4gZG91YmxlIGoxIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajEgKGRv
dWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX2puIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUg
eTAgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195MCAoZG91YmxlKSB0aHJvdyAo
KTsKZXh0ZXJuIGRvdWJsZSB5MSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kx
IChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIHluIChpbnQsIGRvdWJsZSkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX195biAoaW50LCBkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVy
biBkb3VibGUgZXJmIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXJmIChkb3Vi
bGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyZmMgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19lcmZjIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAo
ZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYSAoZG91YmxlKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGRvdWJsZSB0Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX190Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGdhbW1hIChk
b3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBkb3VibGUgbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2Ft
cCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgcmludCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19yaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g
ZG91YmxlIG5leHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3VibGUg
X194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7Cgpl
eHRlcm4gZG91YmxlIG5leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dHRv
d2FyZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBkb3VibGUgcmVtYWluZGVyIChkb3VibGUgX194LCBk
b3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoZG91YmxlIF9f
eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2NhbGIgKGRvdWJsZSBf
X3gsIGRvdWJsZSBfX24pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGIgKGRvdWJsZSBf
X3gsIGRvdWJsZSBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJs
ZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUg
X194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYiAoZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gZG91YmxlIHNjYWxibG4gKGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19zY2FsYmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93
ICgpOwoKCgpleHRlcm4gZG91YmxlIG5lYXJieWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBkb3VibGUgX19uZWFyYnlpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4g
ZG91YmxlIHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JvdW5k
IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91YmxlIF9f
eCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9f
dHJ1bmMgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
CgoKCmV4dGVybiBkb3VibGUgcmVtcXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9f
cXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91Ymxl
IF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludCAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50IChkb3VibGUgX194
KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50IChkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgaW50IF9fbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgbGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50
IF9fbGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZmRpbSAo
ZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mZGltIChk
b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtYXggKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1heCAoZG91
YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChkb3Vi
bGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtaW4gKGRvdWJs
ZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeSAo
ZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCmV4dGVybiBpbnQgX19zaWduYml0IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBkb3VibGUgZm1hIChkb3VibGUg
X194LCBkb3VibGUgX195LCBkb3VibGUgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Zt
YSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgZG91YmxlIF9feikgdGhyb3cgKCk7CgoKCgpleHRl
cm4gZmxvYXQgYWNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3Nm
IChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVy
biBmbG9hdCBhdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZs
b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW4yZiAoZmxvYXQgX195LCBmbG9h
dCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBjb3NmIChmbG9hdCBfX3gpIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19jb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0
IHNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9fdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2lu
Y29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsg
ZXh0ZXJuIHZvaWQgX19zaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0ICpf
X2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgY29zaGYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGZsb2F0IHNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaW5oZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0YW5oZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVy
biBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3No
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4
dGVybiBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0
YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXhwZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGZsb2F0IGV4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fZXhwMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHBvdzEwZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcG93MTBmIChmbG9hdCBfX3gpIHRocm93
ICgpOwoKCgpleHRlcm4gZmxvYXQgZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25l
bnQpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhw
b25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZGV4cGYgKGZsb2F0IF9feCwgaW50IF9f
ZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2dmIChmbG9hdCBfX3gpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19sb2dmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBm
bG9hdCBsb2cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZzEwZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbW9kZmYgKGZsb2F0IF9feCwgZmxv
YXQgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX21vZGZmIChmbG9hdCBfX3gsIGZs
b2F0ICpfX2lwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZXhwbTFmIChmbG9hdCBfX3gp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBtMWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
bG9nMXBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2diZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gZmxvYXQgZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX2V4cDJmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cyZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMmYgKGZsb2F0IF9feCkgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBmbG9hdCBwb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX3Bvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsK
CgpleHRlcm4gZmxvYXQgc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X3NxcnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgaHlwb3RmIChmbG9h
dCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2h5cG90ZiAoZmxvYXQg
X194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGNicnRmIChmbG9hdCBf
X3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jYnJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19jZWlsZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZmFic2YgKGZs
b2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxv
YXQgX19mYWJzZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKZXh0ZXJuIGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fZmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbW9kZiAo
ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbW9kZiAoZmxv
YXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mZiAoZmxv
YXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy
biBpbnQgX19maW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlZiAoZmxv
YXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy
biBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19kcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZmxv
YXQgc2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaWdu
aWZpY2FuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgY29weXNpZ25m
IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOyBleHRlcm4gZmxvYXQgX19jb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZmxvYXQgbmFuZiAo
X19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsgZXh0ZXJuIGZsb2F0IF9fbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0
IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJu
IGludCBpc25hbmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCgpleHRlcm4gZmxvYXQgajBmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX2owZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgajFmIChmbG9hdCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX2oxZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgam5m
IChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fam5mIChpbnQsIGZsb2F0KSB0
aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHkwZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X195MGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHkxZiAoZmxvYXQpIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX195MWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHluZiAo
aW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3luZiAoaW50LCBmbG9hdCkgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGVyZmYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fZXJmZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgZXJmY2YgKGZsb2F0KSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZs
b2F0IGxnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZiAoZmxv
YXQpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgdGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX190Z2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQg
Z2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2dhbW1hZiAoZmxvYXQpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25n
YW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3Np
Z25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IHJpbnRmIChmbG9hdCBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19yaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRl
cm4gZmxvYXQgbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFmdGVyZiAoZmxvYXQg
X194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4
dGVybiBmbG9hdCBuZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dHRvd2Fy
ZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCByZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0
IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JlbWFpbmRlcmYgKGZsb2F0IF9feCwgZmxv
YXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHNjYWxiZiAoZmxvYXQgX194LCBmbG9h
dCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQg
X19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYm5mIChmbG9hdCBfX3gsIGludCBf
X24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24p
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGludCBfX2lsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBz
Y2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19zY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4g
ZmxvYXQgbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbmVh
cmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHJvdW5kZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcm91bmRmIChmbG9hdCBfX3gpIHRocm93
ICgpOwoKCgpleHRlcm4gZmxvYXQgdHJ1bmNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fdHJ1bmNmIChmbG9hdCBfX3gpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBmbG9hdCByZW1x
dW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX3JlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgaW50IF9fbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBs
b25nIGludCBsbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGlu
dCBfX2xscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBscm91
bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmRmIChmbG9h
dCBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kZiAoZmxvYXQgX194KSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhy
b3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGZsb2F0IGZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX2ZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGZsb2F0IGZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2ZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVy
biBpbnQgX19mcGNsYXNzaWZ5ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRmIChmbG9hdCBfX3Zh
bHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJu
IGZsb2F0IGZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19mbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQgX196KSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBhY29zbCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19hdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVy
biBsb25nIGRvdWJsZSBhdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2wgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2wgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lubCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lubCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKCgpleHRlcm4gdm9pZCBzaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
ICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3Np
bmNvc2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9uZyBkb3VibGUg
Kl9fY29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3NobCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zaGwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2luaGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpbmhsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmhsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5obCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NobCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19leHAxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7Cgpl
eHRlcm4gbG9uZyBkb3VibGUgcG93MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19wb3cxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4
dGVybiBsb25nIGRvdWJsZSBmcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZnJleHBsIChsb25nIGRvdWJsZSBfX3gs
IGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxkZXhwbCAo
bG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX2xkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2xvZ2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGxvbmcgZG91YmxlIGxvZzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVy
biBsb25nIGRvdWJsZSBtb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRy
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbW9kZmwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBt
MWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cG0x
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMXBs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cxcGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2JsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dibCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHAybCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMmwgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzJsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cybCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvd2wgKGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
cG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVy
biBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBs
b25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg
ZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2JydGwgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NicnRsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2VpbGwgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NlaWxsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbG9vcmwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Ztb2RsIChs
b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50
IF9faXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWwgKGxvbmcgZG91YmxlIF9fdmFsdWUp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNp
bmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGRyZW1s
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX2RyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cg
KCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpZ25pZmljYW5kbCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3B5c2lnbmwgKGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBs
b25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
CmV4dGVybiBsb25nIGRvdWJsZSBuYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uYW5sIChf
X2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCgoKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFubCAobG9uZyBk
b3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4
dGVybiBsb25nIGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fajBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBq
MWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajFsIChsb25n
IGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwgbG9uZyBkb3Vi
bGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9uZyBkb3VibGUp
IHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX3kwbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4g
bG9uZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX3kxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeW5sIChp
bnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feW5sIChpbnQs
IGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXJmbCAobG9u
ZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZsIChsb25nIGRvdWJs
ZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBlcmZjbCAobG9uZyBkb3VibGUpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpl
eHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19sZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBs
b25nIGRvdWJsZSB0Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX3RnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRv
dWJsZSBnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBs
Z2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19sZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmludGwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0YWZ0ZXJsIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGxv
bmcgZG91YmxlIG5leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19uZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJlbWFp
bmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf
X3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxi
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibG5sIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBuZWFyYnlpbnRs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZWFyYnlp
bnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgcm91
bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yb3Vu
ZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSB0cnVu
Y2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OyBleHRlcm4gbG9uZyBkb3VibGUgX190cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJlbXF1
b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJp
bnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmludGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3VuZGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyb3VuZGwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmRs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZmRpbWwg
KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAo
KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi
bGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1heGwgKGxvbmcgZG91Ymxl
IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1p
bmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0
aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9f
c2lnbmJpdGwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1hbCAobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX2ZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25n
IGRvdWJsZSBfX3opIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2lnbmdhbTsKCmVudW0KICB7CiAg
ICBGUF9OQU4sCgogICAgRlBfSU5GSU5JVEUsCgogICAgRlBfWkVSTywKCiAgICBGUF9TVUJOT1JN
QUwsCgogICAgRlBfTk9STUFMCgogIH07Cgp0eXBlZGVmIGVudW0KewogIF9JRUVFXyA9IC0xLAog
IF9TVklEXywKICBfWE9QRU5fLAogIF9QT1NJWF8sCiAgX0lTT0NfCn0gX0xJQl9WRVJTSU9OX1RZ
UEU7CgoKCgpleHRlcm4gX0xJQl9WRVJTSU9OX1RZUEUgX0xJQl9WRVJTSU9OOwoKc3RydWN0IF9f
ZXhjZXB0aW9uCgoKCiAgewogICAgaW50IHR5cGU7CiAgICBjaGFyICpuYW1lOwogICAgZG91Ymxl
IGFyZzE7CiAgICBkb3VibGUgYXJnMjsKICAgIGRvdWJsZSByZXR2YWw7CiAgfTsKCgpleHRlcm4g
aW50IG1hdGhlcnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAqX19leGMpIHRocm93ICgpOwoKfQoKCm5h
bWVzcGFjZSBzdGQKewoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19jbWF0aF9wb3dl
cihfVHAsIHVuc2lnbmVkIGludCk7CgogIGlubGluZSBkb3VibGUKICBhYnMoZG91YmxlIF9feCkK
ICB7IHJldHVybiBfX2J1aWx0aW5fZmFicyhfX3gpOyB9CgogIGlubGluZSBmbG9hdAogIGFicyhm
bG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNmKF9feCk7IH0KCiAgaW5saW5lIGxv
bmcgZG91YmxlCiAgYWJzKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFi
c2woX194KTsgfQoKCiAgaW5saW5lIGZsb2F0CiAgYWNvcyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6
YWNvc2YoX194KTsgfQoKCgoKCiAgdXNpbmcgOjphY29zOwoKCiAgaW5saW5lIGxvbmcgZG91Ymxl
CiAgYWNvcyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YWNvc2woX194KTsgfQoKCgoKCiAg
dXNpbmcgOjphc2luOwoKCiAgaW5saW5lIGZsb2F0CiAgYXNpbihmbG9hdCBfX3gpIHsgcmV0dXJu
IDo6YXNpbmYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGFzaW4obG9uZyBk
b3VibGUgX194KSB7IHJldHVybiA6OmFzaW5sKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YXRhbjsK
CgogIGlubGluZSBmbG9hdAogIGF0YW4oZmxvYXQgX194KSB7IHJldHVybiA6OmF0YW5mKF9feCk7
IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBhdGFuKGxvbmcgZG91YmxlIF9feCkgeyBy
ZXR1cm4gOjphdGFubChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmF0YW4yOwoKCiAgaW5saW5lIGZs
b2F0CiAgYXRhbjIoZmxvYXQgX195LCBmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YXRhbjJmKF9feSwg
X194KTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBhdGFuMihsb25nIGRvdWJsZSBf
X3ksIGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphdGFuMmwoX195LCBfX3gpOyB9CgoKCgoK
CiAgdXNpbmcgOjpjZWlsOwoKCiAgaW5saW5lIGZsb2F0CiAgY2VpbChmbG9hdCBfX3gpIHsgcmV0
dXJuIDo6Y2VpbGYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGNlaWwobG9u
ZyBkb3VibGUgX194KSB7IHJldHVybiA6OmNlaWxsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6Y29z
OwoKICBpbmxpbmUgZmxvYXQKICBjb3MoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9j
b3NmKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29zKGxvbmcgZG91YmxlIF9feCkK
ICB7IHJldHVybiBfX2J1aWx0aW5fY29zbChfX3gpOyB9CgogIHVzaW5nIDo6Y29zaDsKCgogIGlu
bGluZSBmbG9hdAogIGNvc2goZmxvYXQgX194KSB7IHJldHVybiA6OmNvc2hmKF9feCk7IH0KCgoK
CgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb3NoKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4g
Ojpjb3NobChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmV4cDsKCgogIGlubGluZSBmbG9hdAogIGV4
cChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6ZXhwZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcg
ZG91YmxlCiAgZXhwKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpleHBsKF9feCk7IH0KCgoK
CgogIHVzaW5nIDo6ZmFiczsKCiAgaW5saW5lIGZsb2F0CiAgZmFicyhmbG9hdCBfX3gpCiAgeyBy
ZXR1cm4gX19idWlsdGluX2ZhYnNmKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZmFi
cyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsKF9feCk7IH0KCiAg
dXNpbmcgOjpmbG9vcjsKCgogIGlubGluZSBmbG9hdAogIGZsb29yKGZsb2F0IF9feCkgeyByZXR1
cm4gOjpmbG9vcmYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZsb29yKGxv
bmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpmbG9vcmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpm
bW9kOwoKCiAgaW5saW5lIGZsb2F0CiAgZm1vZChmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZXR1
cm4gOjpmbW9kZihfX3gsIF9feSk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZm1v
ZChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgeyByZXR1cm4gOjpmbW9kbChfX3gs
IF9feSk7IH0KCgoKCgoKICB1c2luZyA6OmZyZXhwOwoKCiAgaW5saW5lIGZsb2F0CiAgZnJleHAo
ZmxvYXQgX194LCBpbnQqIF9fZXhwKSB7IHJldHVybiA6OmZyZXhwZihfX3gsIF9fZXhwKTsgfQoK
CgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZyZXhwKGxvbmcgZG91YmxlIF9feCwgaW50KiBf
X2V4cCkgeyByZXR1cm4gOjpmcmV4cGwoX194LCBfX2V4cCk7IH0KCgoKCgoKICB1c2luZyA6Omxk
ZXhwOwoKCiAgaW5saW5lIGZsb2F0CiAgbGRleHAoZmxvYXQgX194LCBpbnQgX19leHApIHsgcmV0
dXJuIDo6bGRleHBmKF9feCwgX19leHApOyB9CgoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQog
IGxkZXhwKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwKSB7IHJldHVybiA6OmxkZXhwbChfX3gs
IF9fZXhwKTsgfQoKCgoKCgogIHVzaW5nIDo6bG9nOwoKCiAgaW5saW5lIGZsb2F0CiAgbG9nKGZs
b2F0IF9feCkgeyByZXR1cm4gOjpsb2dmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3Vi
bGUKICBsb2cobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmxvZ2woX194KTsgfQoKCgoKCiAg
dXNpbmcgOjpsb2cxMDsKCgogIGlubGluZSBmbG9hdAogIGxvZzEwKGZsb2F0IF9feCkgeyByZXR1
cm4gOjpsb2cxMGYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGxvZzEwKGxv
bmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpsb2cxMGwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpt
b2RmOwoKCiAgaW5saW5lIGZsb2F0CiAgbW9kZihmbG9hdCBfX3gsIGZsb2F0KiBfX2lwdHIpIHsg
cmV0dXJuIDo6bW9kZmYoX194LCBfX2lwdHIpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIG1v
ZGYobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSogX19pcHRyKSB7IHJldHVybiA6Om1vZGZs
KF9feCwgX19pcHRyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1Rw
CiAgICBfX3Bvd19oZWxwZXIoX1RwIF9feCwgaW50IF9fbikKICAgIHsKICAgICAgcmV0dXJuIF9f
biA8IDAKICAgICAgICA/IF9UcCgxKS9fX2NtYXRoX3Bvd2VyKF9feCwgLV9fbikKICAgICAgICA6
IF9fY21hdGhfcG93ZXIoX194LCBfX24pOwogICAgfQoKICB1c2luZyA6OnBvdzsKCgogIGlubGlu
ZSBmbG9hdAogIHBvdyhmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZXR1cm4gOjpwb3dmKF9feCwg
X195KTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3cobG9uZyBkb3VibGUgX194
LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIDo6cG93bChfX3gsIF9feSk7IH0KCgoKCgoKICBp
bmxpbmUgZG91YmxlCiAgcG93KGRvdWJsZSBfX3gsIGludCBfX2kpCiAgeyByZXR1cm4gX19wb3df
aGVscGVyKF9feCwgX19pKTsgfQoKICBpbmxpbmUgZmxvYXQKICBwb3coZmxvYXQgX194LCBpbnQg
X19uKQogIHsgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9fbik7IH0KCiAgaW5saW5lIGxvbmcg
ZG91YmxlCiAgcG93KGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikKICB7IHJldHVybiBfX3Bvd19o
ZWxwZXIoX194LCBfX24pOyB9CgogIHVzaW5nIDo6c2luOwoKICBpbmxpbmUgZmxvYXQKICBzaW4o
ZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5mKF9feCk7IH0KCiAgaW5saW5lIGxv
bmcgZG91YmxlCiAgc2luKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc2lu
bChfX3gpOyB9CgogIHVzaW5nIDo6c2luaDsKCgogIGlubGluZSBmbG9hdAogIHNpbmgoZmxvYXQg
X194KSB7IHJldHVybiA6OnNpbmhmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUK
ICBzaW5oKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpzaW5obChfX3gpOyB9CgoKCgoKICB1
c2luZyA6OnNxcnQ7CgogIGlubGluZSBmbG9hdAogIHNxcnQoZmxvYXQgX194KQogIHsgcmV0dXJu
IF9fYnVpbHRpbl9zcXJ0ZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHNxcnQobG9u
ZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0bChfX3gpOyB9CgogIHVzaW5n
IDo6dGFuOwoKCiAgaW5saW5lIGZsb2F0CiAgdGFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjp0YW5m
KF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICB0YW4obG9uZyBkb3VibGUgX194
KSB7IHJldHVybiA6OnRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjp0YW5oOwoKCiAgaW5saW5l
IGZsb2F0CiAgdGFuaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6dGFuaGYoX194KTsgfQoKCgoKCgog
IGlubGluZSBsb25nIGRvdWJsZQogIHRhbmgobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnRh
bmhsKF9feCk7IH0KCgoKCn0KCgoKCgoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfZnBjbGFzc2lmeShfVHAgX19mKSB7
IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAo
X19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9f
ZikgOiBfX2ZwY2xhc3NpZnlsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICBpbnQKICAgIF9fY2FwdHVyZV9pc2Zpbml0ZShfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChf
X2YpID09IHNpemVvZiAoZmxvYXQpID8gX19maW5pdGVmIChfX2YpIDogc2l6ZW9mIChfX2YpID09
IHNpemVvZiAoZG91YmxlKSA/IF9fZmluaXRlIChfX2YpIDogX19maW5pdGVsIChfX2YpKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc2luZihfVHAg
X19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19pc2luZmYg
KF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19pc2luZiAoX19mKSA6
IF9faXNpbmZsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAg
IF9fY2FwdHVyZV9pc25hbihfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVv
ZiAoZmxvYXQpID8gX19pc25hbmYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3Vi
bGUpID8gX19pc25hbiAoX19mKSA6IF9faXNuYW5sIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc25vcm1hbChfVHAgX19mKSB7IHJldHVy
biAoKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fZikg
OiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX2YpIDog
X19mcGNsYXNzaWZ5bCAoX19mKSkgPT0gRlBfTk9STUFMKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9zaWduYml0KF9UcCBfX2YpIHsgcmV0dXJuIChz
aXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX3NpZ25iaXRmIChfX2YpIDogc2l6ZW9m
IChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fc2lnbmJpdCAoX19mKSA6IF9fc2lnbmJpdGwg
KF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJl
X2lzZ3JlYXRlcihfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiAoX19leHRlbnNpb25f
XyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190eXBlb2ZfXyhfX2YyKSBfX3kg
PSAoX19mMik7ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9feCkgX191ID0gKF9feCk7
IF9fdHlwZW9mX18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZs
b2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3Vi
bGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFO
IHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3Yp
IDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6
IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYmIF9feCA+IF9feTsgfSkpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXNncmVh
dGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9f
ICh7IF9fdHlwZW9mX18oX19mMSkgX194ID0gKF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9feSA9
IChfX2YyKTsgIShfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX194KSBfX3UgPSAoX194KTsg
X190eXBlb2ZfXyhfX3kpIF9fdiA9IChfX3kpOyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxv
YXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJs
ZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4g
fHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikg
OiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDog
X19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSkgJiYgX194ID49IF9feTsgfSkpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXNsZXNz
KF9UcCBfX2YxLCBfVHAgX19mMikgeyByZXR1cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2Zf
XyhfX2YxKSBfX3ggPSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikgX195ID0gKF9fZjIpOyAhKF9f
ZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX3gpIF9fdSA9IChfX3gpOyBfX3R5cGVvZl9fKF9f
eSkgX192ID0gKF9feSk7IChzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xh
c3NpZnlmIChfX3UpIDogc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFz
c2lmeSAoX191KSA6IF9fZnBjbGFzc2lmeWwgKF9fdSkpID09IEZQX05BTiB8fCAoc2l6ZW9mIChf
X3YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX192KSA6IHNpemVvZiAoX192
KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdikgOiBfX2ZwY2xhc3NpZnls
IChfX3YpKSA9PSBGUF9OQU47IH0pKSAmJiBfX3ggPCBfX3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVzc2VxdWFsKF9UcCBfX2Yx
LCBfVHAgX19mMikKICAgICB7IHJldHVybiAoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9f
ZjEpIF9feCA9IChfX2YxKTsgX190eXBlb2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7ICEoX19leHRl
bnNpb25fXyAoeyBfX3R5cGVvZl9fKF9feCkgX191ID0gKF9feCk7IF9fdHlwZW9mX18oX195KSBf
X3YgPSAoX195KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lm
eWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5
IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikg
PT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09
IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9f
dikpID09IEZQX05BTjsgfSkpICYmIF9feCA8PSBfX3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX1RwIF9fZjEs
IF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX19m
MSkgX194ID0gKF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9feSA9IChfX2YyKTsgIShfX2V4dGVu
c2lvbl9fICh7IF9fdHlwZW9mX18oX194KSBfX3UgPSAoX194KTsgX190eXBlb2ZfXyhfX3kpIF9f
diA9IChfX3kpOyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5
ZiAoX191KSA6IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkg
KF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9
PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0g
c2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192
KSkgPT0gRlBfTkFOOyB9KSkgJiYgKF9feCA8IF9feSB8fCBfX3kgPCBfX3gpOyB9KSk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc3Vub3JkZXJl
ZChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190
eXBlb2ZfXyhfX2YxKSBfX3UgPSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikgX192ID0gKF9fZjIp
OyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6
IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBf
X2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2Yg
KGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChk
b3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBf
TkFOOyB9KSk7IH0KfQoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgaW50CiAgICBmcGNsYXNzaWZ5KF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9m
cGNsYXNzaWZ5KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBp
c2Zpbml0ZShfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNmaW5pdGUoX19mKTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzaW5mKF9UcCBfX2YpIHsgcmV0dXJu
IF9fY2FwdHVyZV9pc2luZihfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu
dAogICAgaXNuYW4oX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzbmFuKF9fZik7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc25vcm1hbChfVHAgX19mKSB7IHJl
dHVybiBfX2NhcHR1cmVfaXNub3JtYWwoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBpbnQKICAgIHNpZ25iaXQoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX3NpZ25iaXQo
X19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzZ3JlYXRlcihf
VHAgX19mMSwgX1RwIF9fZjIpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc2dyZWF0ZXIoX19mMSwgX19m
Mik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2dyZWF0ZXJlcXVh
bChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXNncmVhdGVyZXF1
YWwoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBp
c2xlc3MoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJldHVybiBfX2NhcHR1cmVfaXNsZXNzKF9fZjEs
IF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzZXF1
YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVzc2VxdWFs
KF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNs
ZXNzZ3JlYXRlcihfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXNs
ZXNzZ3JlYXRlcihfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp
bnQKICAgIGlzdW5vcmRlcmVkKF9UcCBfX2YxLCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9fY2Fw
dHVyZV9pc3Vub3JkZXJlZChfX2YxLCBfX2YyKTsgfQp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2lu
ZyBfX2dudV9jeHg6OmZwY2xhc3NpZnk7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2Zpbml0ZTsKICB1
c2luZyBfX2dudV9jeHg6OmlzaW5mOwogIHVzaW5nIF9fZ251X2N4eDo6aXNuYW47CiAgdXNpbmcg
X19nbnVfY3h4Ojppc25vcm1hbDsKICB1c2luZyBfX2dudV9jeHg6OnNpZ25iaXQ7CiAgdXNpbmcg
X19nbnVfY3h4Ojppc2dyZWF0ZXI7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2dyZWF0ZXJlcXVhbDsK
ICB1c2luZyBfX2dudV9jeHg6OmlzbGVzczsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVzc2VxdWFs
OwogIHVzaW5nIF9fZ251X2N4eDo6aXNsZXNzZ3JlYXRlcjsKICB1c2luZyBfX2dudV9jeHg6Omlz
dW5vcmRlcmVkOwp9CgoKCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4KICAgIF9UcAogICAgX19jbWF0aF9wb3dlcihfVHAgX194LCB1bnNpZ25lZCBpbnQgX19uKQog
ICAgewogICAgICBfVHAgX195ID0gX19uICUgMiA/IF9feCA6IDE7CgogICAgICB3aGlsZSAoX19u
ID4+PSAxKQogICAgICAgIHsKICAgICAgICAgIF9feCA9IF9feCAqIF9feDsKICAgICAgICAgIGlm
IChfX24gJSAyKQogICAgICAgICAgICBfX3kgPSBfX3kgKiBfX3g7CiAgICAgICAgfQoKICAgICAg
cmV0dXJuIF9feTsKICAgIH0KfQoKCgoKCgoKCgpuYW1lc3BhY2Ugc3RkCnsKICBlbnVtIGZsb2F0
X3JvdW5kX3N0eWxlCiAgewogICAgcm91bmRfaW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgcm91bmRf
dG93YXJkX3plcm8gPSAwLAogICAgcm91bmRfdG9fbmVhcmVzdCA9IDEsCiAgICByb3VuZF90b3dh
cmRfaW5maW5pdHkgPSAyLAogICAgcm91bmRfdG93YXJkX25lZ19pbmZpbml0eSA9IDMKICB9OwoK
ICBlbnVtIGZsb2F0X2Rlbm9ybV9zdHlsZQogIHsKICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0g
LTEsCiAgICBkZW5vcm1fYWJzZW50ID0gMCwKICAgIGRlbm9ybV9wcmVzZW50ID0gMQogIH07CgoK
CgogIHN0cnVjdCBfX251bWVyaWNfbGltaXRzX2Jhc2UKICB7CiAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zcGVjaWFsaXplZCA9IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0g
MDsKICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0g
ZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgc3RhdGlj
IGNvbnN0IGludCByYWRpeCA9IDA7CgogICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQg
PSAwOwogICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICBzdGF0aWMg
Y29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudDEwID0gMDsKCiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsK
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgZmxv
YXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaWVjNTU5ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gZmFs
c2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICBzdGF0aWMg
Y29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf
YmVmb3JlID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRf
c3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHMgOiBwdWJsaWMgX19udW1lcmljX2xpbWl0c19iYXNl
CiAgICB7CiAgICAgIHN0YXRpYyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgbWF4KCkgdGhyb3coKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHJvdW5kX2Vycm9y
KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBf
VHAgaW5maW5pdHkoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAg
ICAgc3RhdGljIF9UcCBxdWlldF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9U
cD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7IHJldHVy
biBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZGVub3JtX21pbigpIHRo
cm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgfTsKCgoKICB0ZW1wbGF0
ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Ym9vbD4KICAgIHsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGJvb2wgbWluKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGJvb2wgbWF4KCkg
dGhyb3coKQogICAgICB7IHJldHVybiB0cnVlOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0cyA9IDE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1
ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBib29sIGVw
c2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29s
IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu
YWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUg
aGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k
ZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGJvb2wgaW5maW5pdHkoKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHF1aWV0X05hTigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgc2lnbmFsaW5n
X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wg
ZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFs
c2U7CgoKCgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWUKICAgICAgICAgICAg
ICAgfHwgdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJv
dW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJp
Y19saW1pdHM8Y2hhcj4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6
ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAoY2hhcikoLTEyNyAtIDEpOyB9CiAgICAgIHN0YXRpYyBjaGFyIG1heCgpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gKGNoYXIpMTI3OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9
IDc7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA3OwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRl
Z2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAg
ICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGNoYXIgZXBzaWxvbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIHJvdW5k
X2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KCiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw
b25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5n
X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19k
ZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3Jt
X2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3co
KQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgc2lnbmFsaW5nX05h
TigpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIGRl
bm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy
bzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxzaWduZWQg
Y2hhcj4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVl
OwoKICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
KC0xMjcgLSAxKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWF4KCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAxMjc7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNzsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgZXBzaWxvbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcm91
bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25l
bnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1
aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05h
TiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5v
cm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xv
c3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRp
YyBzaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgc2lnbmFsaW5n
X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDAp
OyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3Vu
ZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu
ZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxh
dGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGNoYXI+CiAgICB7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1
bnNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0
aWMgdW5zaWduZWQgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgxMjcgKiAyICsg
MSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gODsKICAgICAgc3RhdGljIGNv
bnN0IGludCBkaWdpdHMxMCA9IDI7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50
IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJv
cigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBt
aW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0g
MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFO
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRl
bm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh
bHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1
bnNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgc2lnbmFs
aW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0g
dHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsK
CgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8d2NoYXJfdD4KICAg
IHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAg
c3RhdGljIHdjaGFyX3QgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAod2NoYXJfdCkoLTIx
NDc0ODM2NDdMIC0gMSk7IH0KICAgICAgc3RhdGljIHdjaGFyX3QgbWF4KCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAod2NoYXJfdCkyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgd2No
YXJfdCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB3
Y2hhcl90IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9
IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3Np
Z25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHls
ZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgd2NoYXJfdCBpbmZpbml0eSgpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHF1
aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRp
YyB3Y2hhcl90IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3Qo
KTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJl
dHVybiB3Y2hhcl90KCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9
IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVy
aWNfbGltaXRzPHNob3J0PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFs
aXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgc2hvcnQgbWluKCkgdGhyb3coKQogICAgICB7IHJl
dHVybiAoLTMyNzY3IC0gMSk7IH0KICAgICAgc3RhdGljIHNob3J0IG1heCgpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gMzI3Njc7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTU7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0OwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2Vy
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBz
dGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHNob3J0IGVwc2lsb24oKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHNob3J0IHJvdW5kX2Vycm9y
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVu
b3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFs
c2U7CgogICAgICBzdGF0aWMgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IHNob3J0KCk7IH0KICAgICAgc3RhdGljIHNob3J0IHF1aWV0X05hTigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgZGVub3Jt
X21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQoKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91
bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7Cgog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91
bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBs
YXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD4KICAgIHsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGlj
IHVuc2lnbmVkIHNob3J0IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBz
dGF0aWMgdW5zaWduZWQgc2hvcnQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoMzI3Njcg
KiAyICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTY7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z
aWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBlcHNpbG9uKCkg
dGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBy
b3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNv
bnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
cXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdf
TmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rl
bm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f
bG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGluZmluaXR5KCkgdGhy
b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAg
ICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGRlbm9y
bV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0
PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dh
cmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGlt
aXRzPGludD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0
cnVlOwoKICAgICAgc3RhdGljIGludCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIChpbnQp
KC0yMTQ3NDgzNjQ3TCAtIDEpOyB9CiAgICAgIHN0YXRpYyBpbnQgbWF4KCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAoaW50KTIxNDc0ODM2NDdMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0cyA9IDMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1
ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBpbnQgZXBz
aWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgaW50IHJvdW5k
X2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWll
dF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3Jt
ID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz
ID0gZmFsc2U7CgogICAgICBzdGF0aWMgaW50IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyBpbnQgcXVpZXRfTmFOKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CiAgICAgIHN0YXRp
YyBpbnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVz
c19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv
dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBz
dHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50PgogICAgewogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgaW50
IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGludCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICh1bnNpZ25lZCkoMjE0NzQ4MzY0
N0wgKiAyVSArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMyOwogICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGVwc2lsb24o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBy
b3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNv
bnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
cXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdf
TmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rl
bm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f
bG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBz
dGF0aWMgdW5zaWduZWQgaW50IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHNp
Z25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGludD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1fbWluKCkgdGhyb3co
KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CgogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0g
dHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsK
CgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZz4KICAgIHsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3Rh
dGljIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTIxNDc0ODM2NDdMIC0gMSk7
IH0KICAgICAgc3RhdGljIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAyMTQ3NDgz
NjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGlj
IGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25l
ZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4
cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGlj
IGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0
aWMgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9u
Zz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBzaWduYWxpbmdf
TmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAg
ICBzdGF0aWMgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDxsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0
cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy
b3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmlj
X2xpbWl0czx1bnNpZ25lZCBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z
cGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaW4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4KCkg
dGhyb3coKQogICAgICB7IHJldHVybiAoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9CgogICAgICBz
dGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMyOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwog
ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9
IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0
aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBz
dGF0aWMgdW5zaWduZWQgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg
cXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhy
b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAg
ICBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBz
dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp
bnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5
bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxh
dGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz4KICAgIHsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcg
bG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgtOTIyMzM3MjAzNjg1NDc3NTgwN0xM
IC0gMSk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp
dHMgPSA2MzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE4OwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgbG9u
ZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBsb25n
IGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
aW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0g
MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2ln
bmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxl
IGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
ZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBsb25nIGxvbmcgaW5maW5pdHkoKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAg
c3RhdGljIGxvbmcgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBzaWduYWxpbmdf
TmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9
CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0
aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnlu
ZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg
cm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAg
IHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nIGxvbmc+CiAgICB7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNp
Z25lZCBsb25nIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0
YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoOTIy
MzM3MjAzNjg1NDc3NTgwN0xMICogMlVMTCArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0cyA9IDY0OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTk7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVu
c2lnbmVkIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsK
ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw
b25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRp
YyB1bnNpZ25lZCBsb25nIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVk
IGxvbmcgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9u
ZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZGVu
b3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u
ZyBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw
cyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3Vu
ZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVy
aWNfbGltaXRzPGZsb2F0PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFs
aXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgZmxvYXQgbWluKCkgdGhyb3coKQogICAgICB7IHJl
dHVybiAxLjE3NTQ5NDM1ZS0zOEY7IH0KICAgICAgc3RhdGljIGZsb2F0IG1heCgpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gMy40MDI4MjM0N2UrMzhGOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0cyA9IDI0OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNjsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGZs
b2F0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTkyMDkyOTBlLTA3RjsgfQog
ICAgICBzdGF0aWMgZmxvYXQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEu
MEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTEyNTsKICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0zNzsKICAgICAgc3RhdGljIGNvbnN0
IGludCBtYXhfZXhwb25lbnQgPSAxMjg7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50MTAgPSAzODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGlj
IGZsb2F0IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBGOyB9CiAgICAgIHN0
YXRpYyBmbG9hdCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0KICAg
ICAgc3RhdGljIGZsb2F0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAu
MEY7IH0KICAgICAgc3RhdGljIGZsb2F0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDAuMEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw
cyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91
bmRfdG93YXJkX3plcm87CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19s
aW1pdHM8ZG91YmxlPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXpl
ZCA9IHRydWU7CgogICAgICBzdGF0aWMgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDg7IH0KICAgICAgc3RhdGljIGRvdWJsZSBtYXgoKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4OyB9CgogICAgICBz
dGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDUzOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
czEwID0gMTU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7
CiAgICAgIHN0YXRpYyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMi4y
MjA0NDYwNDkyNTAzMTMxZS0xNjsgfQogICAgICBzdGF0aWMgZG91YmxlIHJvdW5kX2Vycm9yKCkg
dGhyb3coKQogICAgICB7IHJldHVybiAxLjA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
X2V4cG9uZW50ID0gLTEwMjE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAg
PSAtMzA3OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEwMjQ7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzMDg7CgogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5n
X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19k
ZW5vcm0gPQogICAgICAgICAgICAgIGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGRvdWJsZSBpbmZpbml0
eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcXVp
ZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJs
ZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3Rh
dGljIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k
dWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGlj
IGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0KICAgICAgICAgICAgICByb3Vu
ZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xp
bWl0czxsb25nIGRvdWJsZT4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lh
bGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1pbigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gMy4zNjIxMDMxNDMxMTIwOTM1MDYyNmUtNDkzMkw7IH0KICAgICAgc3RhdGlj
IGxvbmcgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xODk3MzE0OTUzNTcy
MzE3NjUwMmUrNDkzMkw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjQ7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxODsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGVwc2ls
b24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5TDsg
fQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIDEuMEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTE2
MzgxOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTQ5MzE7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTYzODQ7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWF4X2V4cG9uZW50MTAgPSA0OTMyOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPQogICAg
ICAgICAgICAgICAgZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUg
aGFzX2Rlbm9ybSA9CiAgICAgICAgICAgICAgICBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPQogICAgICAgICAgICAgICAgZmFsc2U7CgogICAg
ICBzdGF0aWMgbG9uZyBkb3VibGUgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAu
MEw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMC4wTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgc2lnbmFsaW5nX05hTigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUg
ZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQoKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxz
ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxv
YXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPQogICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvOwog
ICAgfTsKCn0KCgoKCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2UgX19jeHhhYml2MQp7CiAgY2xh
c3MgX19jbGFzc190eXBlX2luZm87Cn0KCm5hbWVzcGFjZSBzdGQKewoKCgogIGNsYXNzIHR5cGVf
aW5mbwogIHsKICBwdWJsaWM6CgoKCgogICAgdmlydHVhbCB+dHlwZV9pbmZvKCk7CgogIHByaXZh
dGU6CgogICAgdHlwZV9pbmZvJiBvcGVyYXRvcj0oY29uc3QgdHlwZV9pbmZvJik7CiAgICB0eXBl
X2luZm8oY29uc3QgdHlwZV9pbmZvJik7CgogIHByb3RlY3RlZDoKICAgIGNvbnN0IGNoYXIgKl9f
bmFtZTsKCiAgcHJvdGVjdGVkOgogICAgZXhwbGljaXQgdHlwZV9pbmZvKGNvbnN0IGNoYXIgKl9f
bik6IF9fbmFtZShfX24pIHsgfQoKICBwdWJsaWM6CgoKCiAgICBjb25zdCBjaGFyKiBuYW1lKCkg
Y29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZTsgfQoKICAgIGJvb2wgYmVmb3JlKGNvbnN0IHR5cGVf
aW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVybiBfX25hbWUgPCBfX2FyZy5fX25hbWU7IH0K
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyBy
ZXR1cm4gX19uYW1lID09IF9fYXJnLl9fbmFtZTsgfQoKICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyByZXR1cm4gIW9wZXJhdG9yPT0oX19hcmcp
OyB9CgoKICBwdWJsaWM6CgogICAgdmlydHVhbCBib29sIF9faXNfcG9pbnRlcl9wKCkgY29uc3Q7
CgogICAgdmlydHVhbCBib29sIF9faXNfZnVuY3Rpb25fcCgpIGNvbnN0OwoKCgoKCgoKICAgIHZp
cnR1YWwgYm9vbCBfX2RvX2NhdGNoKGNvbnN0IHR5cGVfaW5mbyAqX190aHJfdHlwZSwgdm9pZCAq
Kl9fdGhyX29iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9fb3V0ZXIp
IGNvbnN0OwoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb191cGNhc3QoY29uc3QgX19jeHhhYml2MTo6
X19jbGFzc190eXBlX2luZm8gKl9fdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgKipfX29ial9wdHIpIGNvbnN0OwogIH07CgoKCiAgY2xhc3MgYmFkX2Nhc3QgOiBwdWJs
aWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9jYXN0KCkgdGhyb3coKSB7IH0KCgog
ICAgdmlydHVhbCB+YmFkX2Nhc3QoKSB0aHJvdygpOwogIH07CgoKICBjbGFzcyBiYWRfdHlwZWlk
IDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfdHlwZWlkICgpIHRocm93
KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF90eXBlaWQoKSB0aHJvdygpOwogIH07Cn0KCn0KCgpu
YW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGUKICAg
IGxvY2FsZTo6Y29tYmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0CiAgICB7CiAgICAg
IF9JbXBsKiBfX3RtcCA9IG5ldyBfSW1wbCgqX01faW1wbCwgMSk7CiAgICAgIF9fdG1wLT5fTV9y
ZXBsYWNlX2ZhY2V0KF9fb3RoZXIuX01faW1wbCwgJl9GYWNldDo6aWQpOwogICAgICByZXR1cm4g
bG9jYWxlKF9fdG1wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBib29sCiAgICBsb2NhbGU6Om9wZXJhdG9y
KCkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX3MyKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIHN0ZDo6Y29sbGF0ZTxfQ2hh
clQ+IF9fY29sbGF0ZV90eXBlOwogICAgICBjb25zdCBfX2NvbGxhdGVfdHlwZSYgX19jb2xsYXRl
ID0gdXNlX2ZhY2V0PF9fY29sbGF0ZV90eXBlPigqdGhpcyk7CiAgICAgIHJldHVybiAoX19jb2xs
YXRlLmNvbXBhcmUoX19zMS5kYXRhKCksIF9fczEuZGF0YSgpICsgX19zMS5sZW5ndGgoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MyLmRhdGEoKSwgX19zMi5kYXRhKCkgKyBf
X3MyLmxlbmd0aCgpKSA8IDApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAg
ICBjb25zdCBfRmFjZXQmCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsK
ICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQuX01faWQoKTsKICAgICAgbG9jYWxlOjpmYWNl
dCoqIF9fZmFjZXRzID0gX19sb2MuX01faW1wbC0+X01fZmFjZXRzOwogICAgICBpZiAoIShfX2kg
PCBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHNfc2l6ZSAmJiBfX2ZhY2V0c1tfX2ldKSkKICAgICAg
ICBfX3Rocm93X2JhZF9jYXN0KCk7CiAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBfRmFj
ZXQmPigqX19mYWNldHNbX19pXSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4K
ICAgIGJvb2wKICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpCiAgICB7
CiAgICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6OmlkLl9NX2lkKCk7CiAgICAgIGxvY2FsZTo6ZmFj
ZXQqKiBfX2ZhY2V0cyA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsKICAgICAgcmV0dXJuIChf
X2kgPCBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHNfc2l6ZSAmJiBfX2ZhY2V0c1tfX2ldKTsKICAg
IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBf
SW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9mbG9h
dChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmcmIF9feHRyYykgY29u
c3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7
CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0
eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsK
ICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxf
Q2hhclQ+ID4oX19sb2MpOwoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMgPSBfX2N0eXBl
LndpZGVuKCcrJyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVzID0gX19jdHlwZS53aWRl
bignLScpOwogICAgICBpbnQgX19wb3MgPSAwOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVn
OwogICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19wbHVzKSB8fCBfX3RyYWl0c190
eXBlOjplcShfX2MsIF9fbWludXMpKQogICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAg
ICAgewogICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAg
ICAgICAgICsrX19wb3M7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgIH0KCgog
ICAgICBjb25zdCBjaGFyX3R5cGUgX196ZXJvID0gX19jdHlwZS53aWRlbihfU19hdG9tc1tfTV96
ZXJvXSk7CiAgICAgIGJvb2wgX19mb3VuZF96ZXJvID0gZmFsc2U7CiAgICAgIHdoaWxlIChfX3Ry
YWl0c190eXBlOjplcShfX2MsIF9femVybykgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgewog
ICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgIF9fZm91bmRfemVybyA9IHRydWU7
CiAgICAgICAgfQogICAgICBpZiAoX19mb3VuZF96ZXJvKQogICAgICAgIHsKICAgICAgICAgIF9f
eHRyYyArPSBfU19hdG9tc1tfTV96ZXJvXTsKICAgICAgICAgICsrX19wb3M7CiAgICAgICAgfQoK
CiAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9NX0UgLSBfTV96ZXJvICsgMTsKICAgICAgY2hh
cl90eXBlIF9fd2F0b21zW19fbGVuXTsKICAgICAgX19jdHlwZS53aWRlbihfU19hdG9tcywgX1Nf
YXRvbXMgKyBfX2xlbiwgX193YXRvbXMpOwogICAgICBib29sIF9fZm91bmRfZGVjID0gZmFsc2U7
CiAgICAgIGJvb2wgX19mb3VuZF9zY2kgPSBmYWxzZTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9f
ZGVjID0gX19ucC5kZWNpbWFsX3BvaW50KCk7CgogICAgICBzdHJpbmcgX19mb3VuZF9ncm91cGlu
ZzsKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAg
IGJvb2wgX19jaGVja19ncm91cGluZyA9IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBpbnQgX19z
ZXBfcG9zID0gMDsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0gX19ucC50aG91c2FuZHNf
c2VwKCk7CgogICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewoKICAgICAgICAg
IGNvbnN0IGNoYXJfdHlwZSogX19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dhdG9tcywgMTAs
IF9fYyk7CgoKICAgICAgICAgIGlmIChfX3AgJiYgIV9fdHJhaXRzX3R5cGU6OmVxKF9fYywgY2hh
cl90eXBlKCkpKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAg
ICAgICAgX194dHJjICs9IF9TX2F0b21zW19fcCAtIF9fd2F0b21zXTsKICAgICAgICAgICAgICAr
K19fc2VwX3BvczsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICB9
CiAgICAgICAgICBlbHNlIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fc2VwKQogICAgICAg
ICAgICAgICAgICAgJiYgX19jaGVja19ncm91cGluZyAmJiAhX19mb3VuZF9kZWMpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIGlmIChfX3NlcF9wb3MpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19z
ZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAg
ICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpm
YWlsYml0OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX2RlYykg
JiYgIV9fZm91bmRfZGVjKQogICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgaWYgKF9fZm91
bmRfZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBz
dGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAg
ICAgICAgICAgX194dHJjICs9ICcuJzsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwog
ICAgICAgICAgICAgIF9fZm91bmRfZGVjID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAg
ZWxzZSBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX193YXRvbXNbX01fZV0pCiAgICAgICAg
ICAgICAgICAgICAgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3dhdG9tc1tfTV9FXSkpCiAg
ICAgICAgICAgICAgICAgICAmJiAhX19mb3VuZF9zY2kgJiYgX19wb3MpCiAgICAgICAgICAgIHsK
CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5u
YXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CgoKICAg
ICAgICAgICAgICBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3BsdXMpCiAgICAgICAgICAg
ICAgICAgIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19taW51cykpCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgICAgIF9feHRyYyAr
PSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICoo
KytfX2JlZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19mb3VuZF9zY2kgPSB0
cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCgogICAgICAgICAgICBicmVhazsKICAg
ICAgICB9CgoKCiAgICAgIGlmIChfX2NoZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcu
c2l6ZSgpKQogICAgICAgIHsKCiAgICAgICAgICBpZiAoIV9fZm91bmRfZGVjKQogICAgICAgICAg
ICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAg
ICAgICBpZiAoIV9fdmVyaWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9fZm91bmRfZ3JvdXBpbmcp
KQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAg
ICAgX194dHJjICs9IGNoYXIoKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9f
ZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAg
IG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X2ludChfSW5JdGVyIF9f
YmVnLCBfSW5JdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nJiBfX3h0cmMsIGludCYgX19iYXNlKSBjb25z
dAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsK
ICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5
cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwog
ICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9D
aGFyVD4gPihfX2xvYyk7CgoKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0g
X19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgaWYgKF9fYmFzZWZpZWxk
ID09IGlvc19iYXNlOjpvY3QpCiAgICAgICAgX19iYXNlID0gODsKICAgICAgZWxzZSBpZiAoX19i
YXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkKICAgICAgICBfX2Jhc2UgPSAxNjsKICAgICAgZWxz
ZQogICAgICAgIF9fYmFzZSA9IDEwOwoKCiAgICAgIGludCBfX3BvcyA9IDA7CiAgICAgIGNoYXJf
dHlwZSBfX2MgPSAqX19iZWc7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMgPSBfX2N0eXBl
LndpZGVuKCcrJyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVzID0gX19jdHlwZS53aWRl
bignLScpOwoKICAgICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fcGx1cykgfHwgX190
cmFpdHNfdHlwZTo6ZXEoX19jLCBfX21pbnVzKSkKICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5k
KQogICAgICAgIHsKICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIo
KSk7CiAgICAgICAgICArK19fcG9zOwogICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAg
ICB9CgoKICAgICAgY29uc3QgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oX1NfYXRv
bXNbX01femVyb10pOwogICAgICBjb25zdCBjaGFyX3R5cGUgX194ID0gX19jdHlwZS53aWRlbign
eCcpOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19YID0gX19jdHlwZS53aWRlbignWCcpOwogICAg
ICBpZiAoX19iYXNlID09IDEwKQogICAgICAgIHsKICAgICAgICAgIGJvb2wgX19mb3VuZF96ZXJv
ID0gZmFsc2U7CiAgICAgICAgICB3aGlsZSAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8p
ICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jID0gKigr
K19fYmVnKTsKICAgICAgICAgICAgICBfX2ZvdW5kX3plcm8gPSB0cnVlOwogICAgICAgICAgICB9
CiAgICAgICAgICBpZiAoX19mb3VuZF96ZXJvKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
X194dHJjICs9IF9TX2F0b21zW19NX3plcm9dOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAg
ICAgICAgICAgaWYgKF9fYmFzZWZpZWxkID09IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3gpCiAgICAgICAgICAgICAg
ICAgICAgICAgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX1gpKQogICAgICAgICAgICAgICAg
ICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAg
ICAgICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsr
X19iZWcpOwogICAgICAgICAgICAgICAgICAgICAgX19iYXNlID0gMTY7CiAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19iYXNl
ID0gODsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxz
ZSBpZiAoX19iYXNlID09IDE2KQogICAgICAgIHsKICAgICAgICAgIGlmIChfX3RyYWl0c190eXBl
OjplcShfX2MsIF9femVybykgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01femVyb107CiAgICAgICAgICAgICAgKytfX3Bv
czsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIGlmICgoX190
cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3gpIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19YKSkK
ICAgICAgICAgICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAg
ICAgICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2Jl
Zyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgoKCiAgICAgIHNp
emVfdCBfX2xlbjsKICAgICAgaWYgKF9fYmFzZSA9PSAxNikKICAgICAgICBfX2xlbiA9IF9NX3Np
emU7CiAgICAgIGVsc2UKICAgICAgICBfX2xlbiA9IF9fYmFzZTsKCgogICAgICBjaGFyX3R5cGUg
X193YXRvbXNbX01fc2l6ZV07CiAgICAgIF9fY3R5cGUud2lkZW4oX1NfYXRvbXMsIF9TX2F0b21z
ICsgX19sZW4sIF9fd2F0b21zKTsKICAgICAgc3RyaW5nIF9fZm91bmRfZ3JvdXBpbmc7CiAgICAg
IGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBib29sIF9f
Y2hlY2tfZ3JvdXBpbmcgPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAgaW50IF9fc2VwX3BvcyA9
IDA7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwog
ICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgY29uc3QgY2hh
cl90eXBlKiBfX3AgPSBfX3RyYWl0c190eXBlOjpmaW5kKF9fd2F0b21zLCBfX2xlbiwgX19jKTsK
CgogICAgICAgICAgaWYgKF9fcCAmJiAhX190cmFpdHNfdHlwZTo6ZXEoX19jLCBjaGFyX3R5cGUo
KSkpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19fcCAt
IF9fd2F0b21zXTsKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgICsrX19zZXBf
cG9zOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19zZXApICYmIF9fY2hlY2tfZ3Jv
dXBpbmcpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIGlmIChfX3NlcF9wb3MpCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGlj
X2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsK
ICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZXJy
IHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQoKICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgfQoKCgogICAgICBpZiAoX19jaGVja19ncm91cGluZyAmJiBfX2ZvdW5kX2dyb3Vw
aW5nLnNpemUoKSkKICAgICAgICB7CgogICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0
aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGlu
ZyhfX2dyb3VwaW5nLCBfX2ZvdW5kX2dyb3VwaW5nKSkKICAgICAgICAgICAgX19lcnIgfD0gaW9z
X2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgfQoKCiAgICAgIF9feHRyYyArPSBjaGFyKCk7CiAgICAg
IGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0Owog
ICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+
OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um
IF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNv
bnN0CiAgICB7CgogICAgICBpZiAoIShfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6Ym9vbGFscGhh
KSkKICAgICAgICB7CgoKICAgICAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgICAgICBpbnQgX19i
YXNlOwogICAgICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8s
IF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CgogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwog
ICAgICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19j
X2xvY2FsZSwgX19iYXNlKTsKICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxi
aXQpICYmIF9fdWwgPD0gMSkKICAgICAgICAgICAgX192ID0gX191bDsKICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgfQoKCiAgICAg
IGVsc2UKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190
cmFpdHNfdHlwZTsKICAgICAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJp
bmdfdHlwZTsKCiAgICAgICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICAg
ICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hh
clQ+ID4oX19sb2MpOwogICAgICAgICAgY29uc3QgX19zdHJpbmdfdHlwZSBfX3RydWUgPSBfX25w
LnRydWVuYW1lKCk7CiAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlIF9fZmFsc2UgPSBfX25w
LmZhbHNlbmFtZSgpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3RydWVzID0gX190cnVl
LmNfc3RyKCk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZmFsc2VzID0gX19mYWxzZS5j
X3N0cigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdHJ1ZW4gPSBfX3RydWUuc2l6ZSgpIC0g
MTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2ZhbHNlbiA9IF9fZmFsc2Uuc2l6ZSgpIC0gMTsK
CiAgICAgICAgICBmb3IgKHNpemVfdCBfX24gPSAwOyBfX2JlZyAhPSBfX2VuZDsgKytfX24pCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnKys7CiAgICAg
ICAgICAgICAgYm9vbCBfX3Rlc3RmID0gX19uIDw9IF9fZmFsc2VuCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPyBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fZmFsc2VzW19fbl0pIDogZmFs
c2U7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3R0ID0gX19uIDw9IF9fdHJ1ZW4KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA/IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX190cnVlc1tfX25d
KSA6IGZhbHNlOwogICAgICAgICAgICAgIGlmICghKF9fdGVzdGYgfHwgX190ZXN0dCkpCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0
OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICBlbHNlIGlmIChfX3Rlc3RmICYmIF9fbiA9PSBfX2ZhbHNlbikKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgX192ID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0dCAmJiBfX24gPT0gX190
cnVlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX192ID0gMTsKICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVv
ZmJpdDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8
X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgbG9uZyYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQg
X19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywg
X19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3Ry
KCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAg
IF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90
eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgIHsK
ICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9l
eHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAg
ICAgIHVuc2lnbmVkIGxvbmcgX191bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3Ry
KCksIF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIg
JiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fdWwgPD0gbnVtZXJpY19saW1pdHM8
dW5zaWduZWQgc2hvcnQ+OjptYXgoKSkKICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBzaG9ydD4oX191bCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp
bGJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0lu
SXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3Nf
YmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVk
IGludCYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19i
YXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19l
cnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICBfX2Nv
bnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jh
c2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYg
X191bCA8PSBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSkKICAgICAgICBfX3Yg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19l
cnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAg
bnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBf
X3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19i
ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRf
dG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAg
ICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6
CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf
X2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3Yp
IGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAg
IF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJj
LCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2Vy
ciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAg
bnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3Ry
aW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2lu
dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29u
dmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNl
KTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0
ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192
KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgz
Mik7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9f
ZXJyLCBfX3h0cmMpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBf
X2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9n
ZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5
cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAg
IF9feHRyYy5yZXNlcnZlKDMyKTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVn
LCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYyk7CiAgICAgIF9fY29udmVydF90b192KF9feHRy
Yy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg
X0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5
cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgewogICAg
ICBzdHJpbmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0g
X01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAg
ICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUp
OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVy
Pjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl
JiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikg
Y29uc3QKICAgIHsKCiAgICAgIHR5cGVkZWYgaW9zX2Jhc2U6OmZtdGZsYWdzIGZtdGZsYWdzOwog
ICAgICBmbXRmbGFncyBfX2ZtdCA9IF9faW8uZmxhZ3MoKTsKICAgICAgZm10ZmxhZ3MgX19mbXRt
YXNrID0gfihpb3NfYmFzZTo6c2hvd3BvcyB8IGlvc19iYXNlOjpiYXNlZmllbGQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IGlvc19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50
ZXJuYWwpOwogICAgICBfX2lvLmZsYWdzKF9fZm10ICYgX19mbXRtYXNrIHwgKGlvc19iYXNlOjpo
ZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsKCiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGlu
dCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lv
LCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwoKCiAgICAgIF9faW8uZmxhZ3MoX19mbXQpOwoKICAg
ICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIo
KSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAm
IGlvc19iYXNlOjpmYWlsYml0KSkKICAgICAgICBfX3YgPSByZWludGVycHJldF9jYXN0PHZvaWQq
PihfX3VsKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Owog
ICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX091dEl0ZXI+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAgICBfT3V0
SXRlcgogICAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgICAgX01fY29udmVydF9m
bG9hdChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyIF9f
bW9kLAogICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVQgX192KSBjb25zdAogICAgICB7CgoK
ICAgICAgICBjb25zdCBpbnQgX19tYXhfZGlnaXRzID0gbnVtZXJpY19saW1pdHM8X1ZhbHVlVD46
OmRpZ2l0czEwICsgMTsKICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyA9IF9faW8ucHJlY2lzaW9u
KCk7CgogICAgICAgIGlmIChfX3ByZWMgPiBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX21heF9k
aWdpdHMpKQogICAgICAgICAgX19wcmVjID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19tYXhf
ZGlnaXRzKTsKCgogICAgICAgIGNoYXIgX19mYnVmWzE2XTsKCgogICAgICAgIGludCBfX2xlbjsK
CgoKICAgICAgICBpbnQgX19jc19zaXplID0gX19tYXhfZGlnaXRzICogMzsKICAgICAgICBjaGFy
KiBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7
CgogICAgICAgIGNvbnN0IGJvb2wgX19mcCA9IF9TX2Zvcm1hdF9mbG9hdChfX2lvLCBfX2ZidWYs
IF9fbW9kLCBfX3ByZWMpOwogICAgICAgIGlmIChfX2ZwKQogICAgICAgICAgX19sZW4gPSBfX2Nv
bnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUsIF9fcHJlYyk7CiAgICAgICAgZWxzZQog
ICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVm
LCBfX3YsIF9TX2NfbG9jYWxlKTsKCgogICAgICAgIGlmIChfX2xlbiA+PSBfX2NzX3NpemUpCiAg
ICAgICAgICB7CiAgICAgICAgICAgIF9fY3Nfc2l6ZSA9IF9fbGVuICsgMTsKICAgICAgICAgICAg
X19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwog
ICAgICAgICAgICBpZiAoX19mcCkKICAgICAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9t
X3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1NfY19sb2NhbGUsIF9fcHJlYyk7CiAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2Zi
dWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2Nh
bGUpOwogICAgICAgICAgfQoKICAgICAgICByZXR1cm4gX01fd2lkZW5fZmxvYXQoX19zLCBfX2lv
LCBfX2ZpbGwsIF9fY3MsIF9fbGVuKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAg
ICAgX091dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICAgIF9NX2Nv
bnZlcnRfaW50KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNo
YXIgX19tb2QsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19tb2RsLCBfVmFsdWVUIF9fdikg
Y29uc3QKICAgICAgewoKCgogICAgICAgIGNoYXIgX19mYnVmWzE2XTsKICAgICAgICBfU19mb3Jt
YXRfaW50KF9faW8sIF9fZmJ1ZiwgX19tb2QsIF9fbW9kbCk7CgoKICAgICAgICBpbnQgX19jc19z
aXplID0gNjQ7CiAgICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0
aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgIGludCBfX2xlbiA9IF9fY29udmVydF9mcm9t
X3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKCiAgICAgICAgaWYgKF9fbGVuID49IF9fY3Nfc2l6
ZSkKICAgICAgICAgIHsKICAgICAgICAgICAgX19jc19zaXplID0gX19sZW4gKyAxOwogICAgICAg
ICAgICBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXpl
KSk7CiAgICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUs
IF9fZmJ1ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19s
b2NhbGUpOwogICAgICAgICAgfQoKCgoKCgogICAgICAgIHJldHVybiBfTV93aWRlbl9pbnQoX19z
LCBfX2lvLCBfX2ZpbGwsIF9fY3MsIF9fbGVuKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0No
YXJULCBfT3V0SXRlcj46OgogICAgX01fd2lkZW5fZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFz
ZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICAgIGlu
dCBfX2xlbikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9f
dHJhaXRzX3R5cGU7CgoKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsK
ICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hh
clQ+ID4oX19sb2MpOwogICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihf
X2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbikpOwoKCiAgICAgIF9DaGFy
VCogX193czIgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihf
Q2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICogX19sZW4gKiAyKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyAr
IF9fbGVuLCBfX3dzKTsKCgogICAgICBjb25zdCBfQ2hhclQqIF9fcDsKICAgICAgY29uc3QgbnVt
cHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2Mp
OwogICAgICBpZiAoX19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dzLCBfX2xlbiwgX19jdHlw
ZS53aWRlbignLicpKSkKICAgICAgICBfX3dzW19fcCAtIF9fd3NdID0gX19ucC5kZWNpbWFsX3Bv
aW50KCk7CgoKCgogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmco
KTsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5mbGFncygpICYg
aW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAg
IHsKICAgICAgICAgIF9DaGFyVCogX19wMjsKICAgICAgICAgIGludCBfX2RlY2xlbiA9IF9fcCA/
IF9fcCAtIF9fd3MgOiBfX2xlbjsKICAgICAgICAgIF9fcDIgPSBfX2FkZF9ncm91cGluZyhfX3dz
MiwgX19ucC50aG91c2FuZHNfc2VwKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19ncm91cGluZy5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3Jv
dXBpbmcuY19zdHIoKSArIF9fZ3JvdXBpbmcuc2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fd3MsIF9fd3MgKyBfX2RlY2xlbik7CiAgICAgICAgICBpbnQgX19uZXdsZW4g
PSBfX3AyIC0gX193czI7CgoKICAgICAgICAgIGlmIChfX3ApCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBfX3RyYWl0c190eXBlOjpjb3B5KF9fcDIsIF9fcCwgX19sZW4gLSBfX2RlY2xlbik7
CiAgICAgICAgICAgICAgX19uZXdsZW4gKz0gX19sZW4gLSBfX2RlY2xlbjsKICAgICAgICAgICAg
fQoKCiAgICAgICAgICBfX3dzID0gX193czI7CiAgICAgICAgICBfX2xlbiA9IF9fbmV3bGVuOwog
ICAgICAgIH0KCiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fd3Ms
IF9fbGVuKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0
SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIF9N
X3dpZGVuX2ludChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBj
aGFyKiBfX2NzLAogICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKCgogICAg
ICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxf
Q2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAg
IF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6
ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqIF9fbGVuKSk7CgoKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19j
YXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbiAq
IDIpKTsKICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwoKCiAg
ICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0No
YXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3Vw
aW5nKCk7CiAgICAgIGNvbnN0IGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8u
ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUo
KSkKICAgICAgICB7CgoKCiAgICAgICAgICBzdHJlYW1zaXplIF9fb2ZmID0gMDsKICAgICAgICAg
IGlmIChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpCiAgICAgICAgICAgIGlmIChf
X2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIF9fb2ZmID0gMTsKICAgICAgICAgICAgICAgICpfX3dzMiA9ICpfX3dzOwogICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkK
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfX29mZiA9IDI7CiAgICAgICAgICAgICAg
ICAqX193czIgPSAqX193czsKICAgICAgICAgICAgICAgICooX193czIgKyAxKSA9ICooX193cyAr
IDEpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIF9DaGFyVCogX19wOwogICAgICAgICAgX19w
ID0gX19hZGRfZ3JvdXBpbmcoX193czIgKyBfX29mZiwgX19ucC50aG91c2FuZHNfc2VwKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNp
emUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd3MgKyBfX29mZiwgX193cyAr
IF9fbGVuKTsKICAgICAgICAgIF9fbGVuID0gX19wIC0gX193czI7CgogICAgICAgICAgX193cyA9
IF9fd3MyOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9NX2luc2VydChfX3MsIF9faW8sIF9fZmls
bCwgX193cywgX19sZW4pOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVy
Pjo6CiAgICBfTV9pbnNlcnQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9f
ZmlsbCwgY29uc3QgX0NoYXJUKiBfX3dzLAogICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QK
ICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7Cgog
ICAgICBzdHJlYW1zaXplIF9fdyA9IF9faW8ud2lkdGgoKTsKICAgICAgX0NoYXJUKiBfX3dzMiA9
IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KiBfX3cpKTsKICAgICAgaWYgKF9fdyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbGVuKSkK
ICAgICAgICB7CiAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9fdHJhaXRzX3R5cGU+OjpfU19wYWQo
X19pbywgX19maWxsLCBfX3dzMiwgX193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3csIF9fbGVuLCB0cnVlKTsKICAgICAgICAgIF9fbGVuID0gc3Rh
dGljX2Nhc3Q8aW50PihfX3cpOwoKICAgICAgICAgIF9fd3MgPSBfX3dzMjsKICAgICAgICB9CiAg
ICAgIF9faW8ud2lkdGgoMCk7CgoKCiAgICAgIGZvciAoaW50IF9faiA9IDA7IF9faiA8IF9fbGVu
OyArK19faiwgKytfX3MpCiAgICAgICAgKl9fcyA9IF9fd3NbX19qXTsKICAgICAgcmV0dXJuIF9f
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4K
ICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChp
dGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3Yp
IGNvbnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFn
cygpOwogICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSA9PSAwKQogICAg
ICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsKICAgICAgICAgIF9fcyA9
IF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAndScsIGNoYXIoKSwgX191dik7CiAg
ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJp
bmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5n
ZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFj
ZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgICAgIF9fc3RyaW5nX3R5cGUgX19u
YW1lOwogICAgICAgICAgaWYgKF9fdikKICAgICAgICAgICAgX19uYW1lID0gX19ucC50cnVlbmFt
ZSgpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX25hbWUgPSBfX25wLmZhbHNlbmFtZSgp
OwogICAgICAgICAgX19zID0gX01faW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX25hbWUuY19z
dHIoKSwgX19uYW1lLnNpemUoKSk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0
ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBf
X3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAg
IHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAnZCcsIGNoYXIoKSwg
X192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgog
ICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0
ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAg
IHVuc2lnbmVkIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19z
LCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcigpLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0No
YXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2Is
IGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9j
b252ZXJ0X2ludChfX3MsIF9fYiwgX19maWxsLCAnZCcsICdsJywgX192KTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51
bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i
YXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmls
bCwgJ3UnLCAnbCcsIF9fdik7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6
CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2Zp
bGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywg
X19pbywgX19maWxsLCBjaGFyKCksIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091
dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90
eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVy
biBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCAnTCcsIF9fdik7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAg
ICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBp
b3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBjb25zdCB2b2lkKiBf
X3YpIGNvbnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5m
bGFncygpOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB+KGlvc19iYXNlOjpzaG93
cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9f
aW8uZmxhZ3MoX19mbGFncyAmIF9fZm10IHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hv
d2Jhc2UpKTsKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgX19zID0gX01fY29udmVydF9p
bnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcigpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPihfX3YpKTsKICAgICAgICAg
IF9faW8uZmxhZ3MoX19mbGFncyk7CiAgICAgICAgfQogICAgICBjYXRjaCAoLi4uKQogICAgICAg
IHsKICAgICAgICAgIF9faW8uZmxhZ3MoX19mbGFncyk7CiAgICAgICAgICB0aHJvdzsKICAgICAg
ICB9CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBtb25leV9nZXQ8X0NoYXJULCBfSW5J
dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wg
X19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdAogICAgewogICAgICBzdHJpbmdfdHlwZSBf
X3N0cjsKICAgICAgX19iZWcgPSB0aGlzLT5kb19nZXQoX19iZWcsIF9fZW5kLCBfX2ludGwsIF9f
aW8sIF9fZXJyLCBfX3N0cik7CgogICAgICBjb25zdCBpbnQgX19uID0gbnVtZXJpY19saW1pdHM8
bG9uZyBkb3VibGU+OjpkaWdpdHMxMDsKICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNo
YXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fbikpOwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBf
X2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2Zh
Y2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IF9DaGFyVCogX193Y3MgPSBf
X3N0ci5jX3N0cigpOwogICAgICBfX2N0eXBlLm5hcnJvdyhfX3djcywgX193Y3MgKyBfX3N0ci5z
aXplKCkgKyAxLCBjaGFyKCksIF9fY3MpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX2NzLCBfX3Vu
aXRzLCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAg
IG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcs
IGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fdW5pdHMpIGNvbnN0CiAg
ICB7CgogICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8X0NoYXJULCB0cnVlPiBfX21vbmV5X3RydWU7
CiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIGZhbHNlPiBfX21vbmV5X2ZhbHNlOwog
ICAgICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFydDsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKCiAgICAgIGNvbnN0IGxvY2FsZSBf
X2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1
c2VfZmFjZXQ8X19tb25leV90cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2Um
IF9fbXBmID0gdXNlX2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5
cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoK
ICAgICAgY29uc3QgbW9uZXlfYmFzZTo6cGF0dGVybiBfX3AgPSBfX2ludGwgPyBfX21wdC5uZWdf
Zm9ybWF0KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBf
X21wZi5uZWdfZm9ybWF0KCk7CgogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3Bvc19zaWduID1f
X2ludGwgPyBfX21wdC5wb3NpdGl2ZV9zaWduKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogX19tcGYucG9zaXRpdmVfc2lnbigpOwogICAgICBjb25zdCBzdHJp
bmdfdHlwZSBfX25lZ19zaWduID1fX2ludGwgPyBfX21wdC5uZWdhdGl2ZV9zaWduKCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYubmVnYXRpdmVfc2ln
bigpOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9w
b2ludCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFs
X3BvaW50KCk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRo
b3VzYW5kc19zZXAoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21w
Zi50aG91c2FuZHNfc2VwKCk7CgogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50
bCA/IF9fbXB0Lmdyb3VwaW5nKCkgOiBfX21wZi5ncm91cGluZygpOwoKCiAgICAgIHN0cmluZ190
eXBlIF9fc2lnbjsKCiAgICAgIHN0cmluZyBfX2dyb3VwaW5nX3RtcDsKCiAgICAgIGludCBfX3Nl
cF9wb3MgPSAwOwoKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CgogICAgICBib29sIF9f
dGVzdGRlY2ZvdW5kID0gZmFsc2U7CgoKICAgICAgc3RyaW5nX3R5cGUgX190ZW1wX3VuaXRzOwoK
ICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgY2hhcl90eXBlIF9fZW9mID0gc3Rh
dGljX2Nhc3Q8Y2hhcl90eXBlPihjaGFyX3RyYWl0czxjaGFyX3R5cGU+Ojplb2YoKSk7CiAgICAg
IGZvciAoaW50IF9faSA9IDA7IF9fYmVnICE9IF9fZW5kICYmIF9faSA8IDQgJiYgX190ZXN0dmFs
aWQ7ICsrX19pKQogICAgICAgIHsKICAgICAgICAgIHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0
PHBhcnQ+KF9fcC5maWVsZFtfX2ldKTsKICAgICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAg
ICAgICAgICAgICAgICBpZiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlCiAgICAg
ICAgICAgICAgICAgICAgICB8fCBfX2kgPCAyIHx8IF9fc2lnbi5zaXplKCkgPiAxCiAgICAgICAg
ICAgICAgICAgICAgICB8fCAoKHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFszXSkgIT0gbW9u
ZXlfYmFzZTo6bm9uZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2kgPT0gMikpCiAg
ICAgICAgICAgICAgICAgICAgewoKCgoKCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJp
bmdfdHlwZSBfX3N5bWJvbCA9IF9faW50bCA/IF9fbXB0LmN1cnJfc3ltYm9sKCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5j
dXJyX3N5bWJvbCgpOwogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19z
eW1ib2wuc2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9faiA9IDA7CiAg
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiBfX2ogPCBfX2xlbiAmJiBfX3N5bWJvbFtfX2pdID09IF9fYykKICAg
ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICoo
KytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgKytfX2o7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgICAgICAgaWYgKF9faiAhPSBfX2xlbiAmJiAo
X19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzaWduOgoKICAg
ICAgICAgICAgICAgICAgaWYgKF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fbmVnX3NpZ24uc2l6ZSgp
KQogICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19w
b3Nfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgX19zaWduID0gX19wb3Nfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19jID0gKigr
K19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmIChfX2MgPT0gX19uZWdfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgX19zaWduID0gX19uZWdfc2lnbjsKICAgICAgICAgICAgICAgICAg
ICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNl
OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9fcG9zX3Np
Z24uc2l6ZSgpICYmIF9fYyA9PSBfX3Bvc19zaWduWzBdKQogICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fcG9zX3NpZ247CiAgICAgICAgICAgICAg
ICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoX19uZWdfc2lnbi5zaXplKCkgJiYgX19jID09IF9fbmVnX3NpZ25b
MF0pCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19zaWduID0g
X19uZWdfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
IGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6CgoKICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVn
ICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19jdHlwZS5pcyhjdHlwZV9i
YXNlOjpkaWdpdCwgX19jKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChfX2MgPT0g
X19kICYmICFfX3Rlc3RkZWNmb3VuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBf
X2MgPT0gX19zZXApKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
IGlmIChfX2MgPT0gX19kKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19ncm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9z
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fdGVzdGRlY2ZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19jID09IF9fc2VwKQogICAgICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBp
bmcuc2l6ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19ncm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBf
cG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3RlbXBfdW5pdHMgKz0gX19jOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICsrX19zZXBfcG9zOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6
OnNwYWNlOgogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpub25lOgoKICAgICAgICAg
ICAgICAgICAgaWYgKF9faSAhPSAzKQogICAgICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAh
PSBfX2VuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jh
c2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsK
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKCiAg
ICAgIGlmIChfX3NpZ24uc2l6ZSgpID4gMSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3R5cGUg
X19sZW4gPSBfX3NpZ24uc2l6ZSgpOwogICAgICAgICAgc2l6ZV90eXBlIF9faSA9IDE7CiAgICAg
ICAgICBmb3IgKDsgX19jICE9IF9fZW9mICYmIF9faSA8IF9fbGVuOyArK19faSkKICAgICAgICAg
ICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9fYyAhPSBfX3NpZ25bX19pXSkKICAgICAgICAg
ICAgICBfX2MgPSAqKCsrX19iZWcpOwoKICAgICAgICAgIGlmIChfX2kgIT0gX19sZW4pCiAgICAg
ICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIHdoaWxlIChfX3Rl
bXBfdW5pdHNbMF0gPT0gX19jdHlwZS53aWRlbignMCcpKQogICAgICAgIF9fdGVtcF91bml0cy5l
cmFzZShfX3RlbXBfdW5pdHMuYmVnaW4oKSk7CgogICAgICBpZiAoX19zaWduLnNpemUoKSAmJiBf
X3NpZ24gPT0gX19uZWdfc2lnbikKICAgICAgICBfX3RlbXBfdW5pdHMuaW5zZXJ0KF9fdGVtcF91
bml0cy5iZWdpbigpLCBfX2N0eXBlLndpZGVuKCctJykpOwoKCiAgICAgIGlmIChfX2dyb3VwaW5n
LnNpemUoKSAmJiBfX2dyb3VwaW5nX3RtcC5zaXplKCkpCiAgICAgICAgewogICAgICAgICAgaWYg
KCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2dyb3VwaW5nX3RtcCkpCiAgICAgICAg
ICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIGlmIChfX2MgPT0gX19l
b2YpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKCgogICAgICBpZiAoIV9fdGVz
dHZhbGlkIHx8ICFfX3RlbXBfdW5pdHMuc2l6ZSgpKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNl
OjpmYWlsYml0OwogICAgICBlbHNlCgogICAgICAgIF9fdGVtcF91bml0cy5zd2FwKF9fdW5pdHMp
OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9P
dXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNl
JiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMp
IGNvbnN0CiAgICB7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAg
ICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU
PiA+KF9fbG9jKTsKCgogICAgICBpbnQgX19jc19zaXplID0gNjQ7CiAgICAgIGNoYXIqIF9fY3Mg
PSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAg
aW50IF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsICIlLjAxTGYiLCBf
X3VuaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsK
CiAgICAgIGlmIChfX2xlbiA+PSBfX2NzX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19jc19z
aXplID0gX19sZW4gKyAxOwogICAgICAgICAgX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1
aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJv
bV92KF9fY3MsIF9fY3Nfc2l6ZSwgIiUuMDFMZiIsIF9fdW5pdHMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUpOwogICAgICAgIH0KCgoKCgoKCiAgICAgIF9D
aGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9m
KF9DaGFyVCkgKiBfX2NzX3NpemUpKTsKICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsg
X19sZW4sIF9fd3MpOwogICAgICBzdHJpbmdfdHlwZSBfX2RpZ2l0cyhfX3dzKTsKICAgICAgcmV0
dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBf
T3V0SXRlcgogICAgbW9uZXlfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVy
X3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGws
CiAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAg
ICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFydDsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xv
YyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3dpZHRoID0gc3RhdGlj
X2Nhc3Q8c2l6ZV90eXBlPihfX2lvLndpZHRoKCkpOwoKCiAgICAgIHR5cGVkZWYgbW9uZXlwdW5j
dDxfQ2hhclQsIHRydWU+IF9fbW9uZXlfdHJ1ZTsKICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9D
aGFyVCwgZmFsc2U+IF9fbW9uZXlfZmFsc2U7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19t
cHQgPSB1c2VfZmFjZXQ8X19tb25leV90cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlf
ZmFsc2UmIF9fbXBmID0gdXNlX2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29u
c3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s
b2MpOwoKCgogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fYmVnID0gX19kaWdpdHMuZGF0YSgpOwog
ICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZW5kID0gX19iZWcgKyBfX2RpZ2l0cy5zaXplKCk7CiAg
ICAgIG1vbmV5X2Jhc2U6OnBhdHRlcm4gX19wOwogICAgICBzdHJpbmdfdHlwZSBfX3NpZ247CiAg
ICAgIGlmICgqX19iZWcgIT0gX19jdHlwZS53aWRlbignLScpKQogICAgICAgIHsKICAgICAgICAg
IF9fcCA9IF9faW50bCA/IF9fbXB0LnBvc19mb3JtYXQoKSA6IF9fbXBmLnBvc19mb3JtYXQoKTsK
ICAgICAgICAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQucG9zaXRpdmVfc2lnbigpIDogX19tcGYu
cG9zaXRpdmVfc2lnbigpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAg
IF9fcCA9IF9faW50bCA/IF9fbXB0Lm5lZ19mb3JtYXQoKSA6IF9fbXBmLm5lZ19mb3JtYXQoKTsK
ICAgICAgICAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpIDogX19tcGYu
bmVnYXRpdmVfc2lnbigpOwogICAgICAgICAgKytfX2JlZzsKICAgICAgICB9CgoKICAgICAgX19l
bmQgPSBfX2N0eXBlLnNjYW5fbm90KGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2JlZywgX19lbmQpOwog
ICAgICBpZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewoKCgogICAgICAgICAgc3RyaW5nX3R5
cGUgX19yZXM7CiAgICAgICAgICBzdHJpbmdfdHlwZSBfX3ZhbHVlOwogICAgICAgICAgY29uc3Qg
c3RyaW5nX3R5cGUgX19zeW1ib2wgPSBfX2ludGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmN1cnJfc3lt
Ym9sKCk7CgoKICAgICAgICAgIGNvbnN0IGludCBfX2ZyYWMgPSBfX2ludGwgPyBfX21wdC5mcmFj
X2RpZ2l0cygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZnJh
Y19kaWdpdHMoKTsKICAgICAgICAgIGlmIChfX2ZyYWMgPiAwKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgY29uc3QgY2hhcl90eXBlIF9fZCA9IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9p
bnQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5k
ZWNpbWFsX3BvaW50KCk7CiAgICAgICAgICAgICAgaWYgKF9fZW5kIC0gX19iZWcgPj0gX19mcmFj
KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5
cGUoX19lbmQgLSBfX2ZyYWMsIF9fZW5kKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNl
cnQoX192YWx1ZS5iZWdpbigpLCBfX2QpOwogICAgICAgICAgICAgICAgICBfX2VuZCAtPSBfX2Zy
YWM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ewoKICAgICAgICAgICAgICAgICAgX192YWx1ZSA9IHN0cmluZ190eXBlKF9fYmVnLCBfX2VuZCk7
CiAgICAgICAgICAgICAgICAgIGludCBfX3BhZGRlYyA9IF9fZnJhYyAtIChfX2VuZCAtIF9fYmVn
KTsKICAgICAgICAgICAgICAgICAgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oJzAn
KTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX3Bh
ZGRlYywgX196ZXJvKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5i
ZWdpbigpLCBfX2QpOwogICAgICAgICAgICAgICAgICBfX2JlZyA9IF9fZW5kOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICB9CgoKCiAgICAgICAgICBpZiAoX19iZWcgIT0gX19lbmQpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50
bCA/IF9fbXB0Lmdyb3VwaW5nKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IF9fbXBmLmdyb3VwaW5nKCk7CiAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBp
bmcuc2l6ZSgpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
X3R5cGUgX19zZXAgPSBfX2ludGwgPyBfX21wdC50aG91c2FuZHNfc2VwKCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYudGhvdXNhbmRzX3Nl
cCgpOwogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2diZWcgPSBfX2dyb3VwaW5nLmNf
c3RyKCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2VuZCA9IF9fZ2JlZyArIF9f
Z3JvdXBpbmcuc2l6ZSgpOwogICAgICAgICAgICAgICAgICBjb25zdCBpbnQgX19uID0gKF9fZW5k
IC0gX19iZWcpICogMjsKICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX3dzMiA9CiAgICAgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yo
X0NoYXJUKSAqIF9fbikpOwogICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fd3NfZW5kID0gX19h
ZGRfZ3JvdXBpbmcoX193czIsIF9fc2VwLCBfX2diZWcsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dlbmQsIF9fYmVnLCBfX2VuZCk7CiAgICAg
ICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KDAsIF9fd3MyLCBfX3dzX2VuZCAtIF9fd3MyKTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3Zh
bHVlLmluc2VydCgwLCBzdHJpbmdfdHlwZShfX2JlZywgX19lbmQpKTsKICAgICAgICAgICAgfQoK
CiAgICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mID0gX19pby5mbGFncygpICYgaW9zX2Jh
c2U6OmFkanVzdGZpZWxkOwogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX192YWx1ZS5zaXpl
KCkgKyBfX3NpZ24uc2l6ZSgpOwogICAgICAgICAgX19sZW4gKz0gKF9faW8uZmxhZ3MoKSAmIGlv
c19iYXNlOjpzaG93YmFzZSkgPyBfX3N5bWJvbC5zaXplKCkgOiAwOwogICAgICAgICAgYm9vbCBf
X3Rlc3RpcGFkID0gX19mID09IGlvc19iYXNlOjppbnRlcm5hbCAmJiBfX2xlbiA8IF9fd2lkdGg7
CgoKICAgICAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IDQ7ICsrX19pKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgcGFydCBfX3doaWNoID0gc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZp
ZWxkW19faV0pOwogICAgICAgICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAgICAg
ICAgICBpZiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKQogICAgICAgICAgICAg
ICAgICAgIF9fcmVzICs9IF9fc3ltYm9sOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c2lnbjoKCgoKICAgICAgICAgICAgICAgICAgaWYg
KF9fc2lnbi5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19zaWduWzBdOwog
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6
dmFsdWU6CiAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fdmFsdWU7CiAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToKCgoKICAg
ICAgICAgICAgICAgICAgaWYgKF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMg
Kz0gc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19jdHlwZS53aWRlbihfX2ZpbGwp
OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFz
ZTo6bm9uZToKICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAg
ICAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCiAg
ICAgICAgICBpZiAoX19zaWduLnNpemUoKSA+IDEpCiAgICAgICAgICAgIF9fcmVzICs9IHN0cmlu
Z190eXBlKF9fc2lnbi5iZWdpbigpICsgMSwgX19zaWduLmVuZCgpKTsKCgogICAgICAgICAgX19s
ZW4gPSBfX3Jlcy5zaXplKCk7CiAgICAgICAgICBpZiAoX193aWR0aCA+IF9fbGVuKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fZiA9PSBpb3NfYmFzZTo6bGVmdCkKCiAgICAgICAg
ICAgICAgICBfX3Jlcy5hcHBlbmQoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAg
ICAgIGVsc2UKCiAgICAgICAgICAgICAgICBfX3Jlcy5pbnNlcnQoMCwgc3RyaW5nX3R5cGUoX193
aWR0aCAtIF9fbGVuLCBfX2ZpbGwpKTsKICAgICAgICAgICAgICBfX2xlbiA9IF9fd2lkdGg7CiAg
ICAgICAgICAgIH0KCgogICAgICAgICAgZm9yIChzaXplX3R5cGUgX19qID0gMDsgX19qIDwgX19s
ZW47ICsrX19qLCArK19fcykKICAgICAgICAgICAgKl9fcyA9IF9fcmVzW19fal07CiAgICAgICAg
fQogICAgICBfX2lvLndpZHRoKDApOwogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdGltZV9iYXNlOjpk
YXRlb3JkZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmRvX2RhdGVfb3JkZXIoKSBj
b25zdAogICAgeyByZXR1cm4gdGltZV9iYXNlOjpub19vcmRlcjsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hh
clQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUmIF9fYmVn
LCBpdGVyX3R5cGUmIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19mb3JtYXQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2Fs
ZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3Qm
IF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29u
c3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s
b2MpOwogICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxfQ2hhclQ+OjpsZW5ndGgoX19m
b3JtYXQpOwoKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19iZWcgIT0gX19lbmQgJiYgX19p
IDwgX19sZW4gJiYgIV9fZXJyOyArK19faSkKICAgICAgICB7CiAgICAgICAgICBjaGFyIF9fYyA9
IF9fZm9ybWF0W19faV07CiAgICAgICAgICBpZiAoX19jID09ICclJykKICAgICAgICAgICAgewoK
ICAgICAgICAgICAgICBfX2MgPSBfX2Zvcm1hdFsrK19faV07CiAgICAgICAgICAgICAgY2hhciBf
X21vZCA9IDA7CiAgICAgICAgICAgICAgaW50IF9fbWVtID0gMDsKICAgICAgICAgICAgICBpZiAo
X19jID09ICdFJyB8fCBfX2MgPT0gJ08nKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICBfX21vZCA9IF9fYzsKICAgICAgICAgICAgICAgICAgX19jID0gX19mb3JtYXRbKytfX2ld
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHN3aXRjaCAoX19jKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2NzOwogICAgICAgICAgICAg
ICAgICBfQ2hhclQgX193Y3NbMTBdOwogICAgICAgICAgICAgICAgY2FzZSAnYSc6CgogICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5czFbN107CiAgICAgICAgICAgICAgICAg
IF9fdHAuX01fZGF5c19hYmJyZXZpYXRlZChfX2RheXMxKTsKICAgICAgICAgICAgICAgICAgX01f
ZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fd2RheSwgX19kYXlzMSwgNywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdBJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXJfdHlwZSogX19kYXlzMls3XTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXlzKF9f
ZGF5czIpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBf
X3RtLT50bV93ZGF5LCBfX2RheXMyLCA3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug
J2gnOgogICAgICAgICAgICAgICAgY2FzZSAnYic6CgogICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyX3R5cGUqIF9fbW9udGhzMVsxMl07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fbW9udGhz
X2FiYnJldmlhdGVkKF9fbW9udGhzMSk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFt
ZShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21vbiwgX19tb250aHMxLCAxMiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICBjYXNlICdCJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlw
ZSogX19tb250aHMyWzEyXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9tb250aHMoX19tb250
aHMyKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190
bS0+dG1fbW9uLCBfX21vbnRoczIsIDEyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug
J2MnOgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2R0WzJdOwogICAgICAg
ICAgICAgICAgICBfX3RwLl9NX2RhdGVfdGltZV9mb3JtYXRzKF9fZHQpOwogICAgICAgICAgICAg
ICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190
bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZHRbMF0pOwogICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgoKICAgICAgICAg
ICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9tZGF5LCAxLCAz
MSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwog
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ0QnOgoKICAgICAg
ICAgICAgICAgICAgX19jcyA9ICIlbS8lZC8leSI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUu
d2lkZW4oX19jcywgX19jcyArIDksIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFj
dF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnSCc6CgogICAgICAgICAgICAgICAgICBfTV9leHRy
YWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDAsIDIzLCAyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnSSc6CgogICAgICAgICAgICAgICAgICBfTV9l
eHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDEsIDEyLCAyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnbSc6CgogICAgICAgICAgICAgICAgICBf
TV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fbWVtLCAxLCAxMiwgMiwgX19jdHlwZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBp
ZiAoIV9fZXJyKQogICAgICAgICAgICAgICAgICAgIF9fdG0tPnRtX21vbiA9IF9fbWVtIC0gMTsK
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdNJzoKCiAgICAg
ICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWluLCAw
LCA1OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIp
OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ24nOgogICAg
ICAgICAgICAgICAgICBpZiAoX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9PSAnXG4nKQogICAg
ICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdSJzoKCiAgICAgICAgICAgICAgICAgIF9fY3Mg
PSAiJUg6JU0iOwogICAgICAgICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA2
LCBfX3djcyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywg
X19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX193Y3MpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
IGNhc2UgJ1MnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5k
LCBfX3RtLT50bV9zZWMsIDAsIDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgY2FzZSAndCc6CiAgICAgICAgICAgICAgICAgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcs
IDApID09ICdcdCcpCiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnVCc6CgogICAgICAgICAg
ICAgICAgICBfX2NzID0gIiVIOiVNOiVTIjsKICAgICAgICAgICAgICAgICAgX19jdHlwZS53aWRl
bihfX2NzLCBfX2NzICsgOSwgX193Y3MpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3Zp
YV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICBjYXNlICd4JzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJf
dHlwZSogX19kYXRlc1syXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXRlX2Zvcm1hdHMo
X19kYXRlcyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywg
X19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19kYXRlc1swXSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgY2FzZSAnWCc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdGlt
ZXNbMl07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fdGltZV9mb3JtYXRzKF9fdGltZXMpOwog
ICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lv
LCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
dGltZXNbMF0pOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug
J3knOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3Rt
LT50bV95ZWFyLCAwLCA5OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j
dHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNh
c2UgJ1knOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBf
X21lbSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCksIDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUs
IF9fZXJyKTsKICAgICAgICAgICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgICAgICAg
ICBfX3RtLT50bV95ZWFyID0gX19tZW0gLSAxOTAwOwogICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgIGNhc2UgJ1onOgoKICAgICAgICAgICAgICAgICAgaWYgKF9fY3R5cGUu
aXMoY3R5cGVfYmFzZTo6dXBwZXIsICpfX2JlZykpCiAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgaW50IF9fdG1wOwogICAgICAgICAgICAgICAgICAgICAgX01fZXh0
cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X1NfdGltZXpvbmVzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0LCBfX2Vycik7CgoKICAgICAgICAgICAgICAg
ICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAgICAgICAgICAgICAgICAgICBpZiAo
IV9fZXJyICYmIF9fdG1wID09IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19jID09
IF9fY3R5cGUud2lkZW4oJy0nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2Mg
PT0gX19jdHlwZS53aWRlbignKycpKSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bXAsIDAs
IDIzLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBl
LCBfX2Vycik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcs
IF9fZW5kLCBfX3RtcCwgMCwgNTksIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgoKICAgICAgICAg
ICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICB7CgogICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9fY3R5cGUubmFycm93KCpfX2JlZywg
MCkpCiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAg
ICBfTV9leHRyYWN0X251bShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQm
IF9fbWVtYmVyLAogICAgICAgICAgICAgICAgICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVf
dCBfX2xlbiwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUs
CiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7
CiAgICAgIHNpemVfdCBfX2kgPSAwOwogICAgICBzdHJpbmcgX19kaWdpdHM7CiAgICAgIGJvb2wg
X190ZXN0dmFsaWQgPSB0cnVlOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICB3
aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19sZW4KICAgICAgICAgICAgICYmIF9fY3R5
cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYykpCiAgICAgICAgewogICAgICAgICAgX19kaWdp
dHMgKz0gX19jdHlwZS5uYXJyb3coX19jLCAwKTsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7
CiAgICAgICAgICArK19faTsKICAgICAgICB9CiAgICAgIGlmIChfX2kgPT0gX19sZW4pCiAgICAg
ICAgewogICAgICAgICAgaW50IF9fdmFsdWUgPSBhdG9pKF9fZGlnaXRzLmNfc3RyKCkpOwogICAg
ICAgICAgaWYgKF9fbWluIDw9IF9fdmFsdWUgJiYgX192YWx1ZSA8PSBfX21heCkKICAgICAgICAg
ICAgX19tZW1iZXIgPSBfX3ZhbHVlOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3Rlc3R2
YWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fdGVzdHZhbGlkID0g
ZmFsc2U7CiAgICAgIGlmICghX190ZXN0dmFsaWQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6
OmZhaWxiaXQ7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
SW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9l
eHRyYWN0X25hbWUoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21l
bWJlciwKICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3Qg
X19pbmRleGxlbiwKICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIp
IGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190
eXBlOwogICAgICBpbnQqIF9fbWF0Y2hlcyA9IHN0YXRpY19jYXN0PGludCo+KF9fYnVpbHRpbl9h
bGxvY2Eoc2l6ZW9mKGludCkgKiBfX2luZGV4bGVuKSk7CiAgICAgIHNpemVfdCBfX25tYXRjaGVz
ID0gMDsKICAgICAgc2l6ZV90IF9fcG9zID0gMDsKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRy
dWU7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lOwoKICAgICAgY2hhcl90eXBlIF9fYyA9
ICpfX2JlZzsKCiAgICAgIGZvciAoc2l6ZV90IF9faTEgPSAwOyBfX2kxIDwgX19pbmRleGxlbjsg
KytfX2kxKQogICAgICAgIGlmIChfX2MgPT0gX19uYW1lc1tfX2kxXVswXSkKICAgICAgICAgIF9f
bWF0Y2hlc1tfX25tYXRjaGVzKytdID0gX19pMTsKCiAgICAgIHdoaWxlKF9fbm1hdGNoZXMgPiAx
KQogICAgICAgIHsKCiAgICAgICAgICBzaXplX3QgX19taW5sZW4gPSAxMDsKICAgICAgICAgIGZv
ciAoc2l6ZV90IF9faTIgPSAwOyBfX2kyIDwgX19ubWF0Y2hlczsgKytfX2kyKQogICAgICAgICAg
ICBfX21pbmxlbiA9IG1pbihfX21pbmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX190
cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZXNbX19tYXRjaGVzW19faTJdXSkpOwoKICAgICAgICAg
IGlmIChfX3BvcyA8IF9fbWlubGVuICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IF9faTMgPSAwOyBfX2kzIDwgX19ubWF0Y2hlczsgKytfX2kz
KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX25hbWUgPSBfX25hbWVzW19f
bWF0Y2hlc1tfX2kzXV07CiAgICAgICAgICAgICAgICAgIGlmIChfX25hbWVbX19wb3NdICE9IF9f
YykKICAgICAgICAgICAgICAgICAgICBfX21hdGNoZXNbX19pM10gPSBfX21hdGNoZXNbLS1fX25t
YXRjaGVzXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQog
ICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICBpZiAoX19ubWF0Y2hlcyA9PSAxKQog
ICAgICAgIHsKCiAgICAgICAgICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1swXV07CiAgICAg
ICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsK
ICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kICYmIF9fbmFt
ZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwoKICAgICAg
ICAgIGlmIChfX2xlbiA9PSBfX3BvcykKICAgICAgICAgICAgX19tZW1iZXIgPSBfX21hdGNoZXNb
MF07CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAg
ICAgfQogICAgICBlbHNlCiAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgaWYgKCFf
X3Rlc3R2YWxpZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgog
ICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfdGltZShpdGVyX3R5cGUg
X19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hh
clQgX193Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJVgiOwogICAgICBsb2NhbGUg
X19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBl
ID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4o
X19jcywgX19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVn
LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9f
ZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2Jl
ZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgog
ICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfZGF0
ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAg
ewogICAgICBfQ2hhclQgX193Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJXgiOwog
ICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNv
bnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9f
Y3R5cGUud2lkZW4oX19jcywgX19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFf
Zm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYg
KF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAg
IHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAg
ICBkb19nZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRt
KiBfX3RtKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190
cmFpdHNfdHlwZTsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190
aW1lcHVuY3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hh
clQ+ID4oX19sb2MpOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5c1s3XTsKICAgICAgX190
cC5fTV9kYXlzX2FiYnJldmlhdGVkKF9fZGF5cyk7CiAgICAgIGludCBfX3RtcHdkYXk7CiAgICAg
IF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG1wd2RheSwgX19kYXlzLCA3LCBfX2Vy
cik7CgoKCgoKCgogICAgICBpZiAoIV9fZXJyKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBf
X3BvcyA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX2RheXNbX190bXB3ZGF5XSk7CiAgICAgICAg
ICBfX3RwLl9NX2RheXMoX19kYXlzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1l
ID0gX19kYXlzW19fdG1wd2RheV07CiAgICAgICAgICBpZiAoX19uYW1lW19fcG9zXSA9PSAqX19i
ZWcpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX190
cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9fcG9zIDwg
X19sZW4gJiYgX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAgJiYgX19uYW1lW19f
cG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwogICAgICAg
ICAgICAgIGlmIChfX2xlbiAhPSBfX3BvcykKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19i
YXNlOjpmYWlsYml0OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAg
ICAgICBfX3RtLT50bV93ZGF5ID0gX190bXB3ZGF5OwogICAgICAgIH0KICAgICAgaWYgKF9fYmVn
ID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVy
biBfX2JlZzsKICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
SXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9f
Z2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwKICAgICAgICAg
ICAgICAgICAgICAgaW9zX2Jhc2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0q
IF9fdG0pIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3Ry
YWl0c190eXBlOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBfX3Rp
bWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFy
VD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19tb250aHNbMTJdOwogICAgICBf
X3RwLl9NX21vbnRoc19hYmJyZXZpYXRlZChfX21vbnRocyk7CiAgICAgIGludCBfX3RtcG1vbjsK
ICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bXBtb24sIF9fbW9udGhzLCAx
MiwgX19lcnIpOwoKCgoKCgoKICAgICAgaWYgKCFfX2VycikKICAgICAgICB7CiAgICAgICAgICBz
aXplX3QgX19wb3MgPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19tb250aHNbX190bXBtb25dKTsK
ICAgICAgICAgIF9fdHAuX01fbW9udGhzKF9fbW9udGhzKTsKICAgICAgICAgIGNvbnN0IGNoYXJf
dHlwZSogX19uYW1lID0gX19tb250aHNbX190bXBtb25dOwogICAgICAgICAgaWYgKF9fbmFtZVtf
X3Bvc10gPT0gKl9fYmVnKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIGNvbnN0IHNpemVf
dCBfX2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWUpOwogICAgICAgICAgICAgIHdo
aWxlIChfX3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAg
ICYmIF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAgICAgICAgICAgKytfX2JlZywgKytf
X3BvczsKICAgICAgICAgICAgICBpZiAoX19sZW4gIT0gX19wb3MpCiAgICAgICAgICAgICAgICBf
X2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCFf
X2VycikKICAgICAgICAgICAgX190bS0+dG1fbW9uID0gX190bXBtb247CiAgICAgICAgfQoKICAg
ICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7
CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVy
Pjo6CiAgICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z
X2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRt
KiBfX3RtKSBjb25zdAogICAgewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwog
ICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy
VD4gPihfX2xvYyk7CgogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBzaXplX3Qg
X19pID0gMDsKICAgICAgc3RyaW5nIF9fZGlnaXRzOwogICAgICB3aGlsZSAoX19pIDwgNCAmJiBf
X2JlZyAhPSBfX2VuZCAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpKQogICAg
ICAgIHsKICAgICAgICAgIF9fZGlnaXRzICs9IF9fY3R5cGUubmFycm93KF9fYywgMCk7CiAgICAg
ICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgKytfX2k7CiAgICAgICAgfQogICAgICBp
ZiAoX19pID09IDIgfHwgX19pID09IDQpCiAgICAgICAgewogICAgICAgICAgbG9uZyBfX2w7CiAg
ICAgICAgICBfX2NvbnZlcnRfdG9fdihfX2RpZ2l0cy5jX3N0cigpLCBfX2wsIF9fZXJyLCBfU19j
X2xvY2FsZSk7CiAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSAmJiBf
X2wgPD0gMjE0NzQ4MzY0NykKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbCA9IF9faSA9
PSAyID8gX19sIDogX19sIC0gMTkwMDsKICAgICAgICAgICAgICBfX3RtLT50bV95ZWFyID0gc3Rh
dGljX2Nhc3Q8aW50PihfX2wpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAg
ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIGlmIChfX2JlZyA9PSBfX2Vu
ZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg
ICBfT3V0SXRlcgogICAgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgcHV0KGl0ZXJf
dHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiBfX3RtLAogICAg
ICAgIGNvbnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0CiAgICB7
CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4g
Y29uc3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAg
d2hpbGUgKF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIGNoYXIgX19jID0gX19j
dHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICBpZiAo
X19jID09ICclJykKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXIgX19mb3JtYXQ7CiAg
ICAgICAgICAgICAgY2hhciBfX21vZCA9IDA7CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0g
MTsKICAgICAgICAgICAgICBfX2MgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApOwogICAgICAg
ICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSAnRScgfHwgX19jID09ICdP
JykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19tb2QgPSBfX2M7CiAgICAg
ICAgICAgICAgICAgIF9fZm9ybWF0ID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAg
ICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICBfX2Zvcm1hdCA9IF9fYzsKICAgICAgICAgICAgICBfX3MgPSB0aGlz
LT5kb19wdXQoX19zLCBfX2lvLCBjaGFyX3R5cGUoKSwgX190bSwgX19mb3JtYXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAg
ZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKl9fcyA9IF9fYzsKICAgICAgICAgICAg
ICArK19fczsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJ
dGVyCiAgICB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBl
IF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAg
ICAgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9f
bG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9
IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hh
clQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7
CgoKCiAgICAgIGNvbnN0IHNpemVfdCBfX21heGxlbiA9IDY0OwogICAgICBjaGFyX3R5cGUqIF9f
cmVzID0KICAgICAgICBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNp
emVvZihjaGFyX3R5cGUpICogX19tYXhsZW4pKTsKCgoKCgoKICAgICAgY2hhcl90eXBlIF9fZm10
WzRdOwogICAgICBfX2ZtdFswXSA9IF9fY3R5cGUud2lkZW4oJyUnKTsKICAgICAgaWYgKCFfX21v
ZCkKICAgICAgICB7CiAgICAgICAgICBfX2ZtdFsxXSA9IF9fZm9ybWF0OwogICAgICAgICAgX19m
bXRbMl0gPSBjaGFyX3R5cGUoKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAg
ICAgICBfX2ZtdFsxXSA9IF9fbW9kOwogICAgICAgICAgX19mbXRbMl0gPSBfX2Zvcm1hdDsKICAg
ICAgICAgIF9fZm10WzNdID0gY2hhcl90eXBlKCk7CiAgICAgICAgfQoKICAgICAgX190cC5fTV9w
dXQoX19yZXMsIF9fbWF4bGVuLCBfX2ZtdCwgX190bSk7CgoKICAgICAgc2l6ZV90IF9fbGVuID0g
Y2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6bGVuZ3RoKF9fcmVzKTsKICAgICAgZm9yIChzaXplX3Qg
X19pID0gMDsgX19pIDwgX19sZW47ICsrX19pLCArK19fcykKICAgICAgICAqX19zID0gX19yZXNb
X19pXTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBpbnQKICAgIGNvbGxhdGU8X0NoYXJUPjo6X01fY29tcGFyZShjb25zdCBfQ2hhclQq
LCBjb25zdCBfQ2hhclQqKSBjb25zdAogICAgeyByZXR1cm4gMDsgfQoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgc2l6ZV90CiAgICBjb2xsYXRlPF9DaGFyVD46Ol9NX3RyYW5zZm9y
bShfQ2hhclQqLCBjb25zdCBfQ2hhclQqLCBzaXplX3QpIGNvbnN0CiAgICB7IHJldHVybiAwOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGludAogICAgY29sbGF0ZTxfQ2hhclQ+
OjoKICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hp
MSwKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hp
MikgY29uc3QKICAgIHsKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19vbmUoX19sbzEsIF9faGkx
KTsKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX190d28oX19sbzIsIF9faGkyKTsKICAgICAgcmV0
dXJuIF9NX2NvbXBhcmUoX19vbmUuY19zdHIoKSwgX190d28uY19zdHIoKSk7CiAgICB9CgogdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgY29sbGF0ZTxfQ2hhclQ+OjpzdHJp
bmdfdHlwZQogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hh
clQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9f
bGVuID0gKF9faGkgLSBfX2xvKSAqIDI7CgogICAgICBfQ2hhclQqIF9fYyA9CiAgICAgICAgc3Rh
dGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbGVu
KSk7CiAgICAgIHNpemVfdCBfX3JlcyA9IF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fbGVuKTsK
CiAgICAgIGlmIChfX3JlcyA+PSBfX2xlbikKICAgICAgICB7CiAgICAgICAgICBfX2MgPQogICAg
ICAgICAgICBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hh
clQpICogKF9fcmVzICsgMSkpKTsKICAgICAgICAgIF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9f
cmVzICsgMSk7CiAgICAgICAgfQogICAgICByZXR1cm4gc3RyaW5nX3R5cGUoX19jKTsKICAgIH0K
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb25nCiAgICBjb2xsYXRlPF9DaGFyVD46
OgogICAgZG9faGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29u
c3QKICAgIHsKICAgICAgdW5zaWduZWQgbG9uZyBfX3ZhbCA9IDA7CiAgICAgIGZvciAoOyBfX2xv
IDwgX19oaTsgKytfX2xvKQogICAgICAgIF9fdmFsID0gKl9fbG8gKyAoKF9fdmFsIDw8IDcpIHwK
ICAgICAgICAgICAgICAgICAgICAgICAoX192YWwgPj4gKG51bWVyaWNfbGltaXRzPHVuc2lnbmVk
IGxvbmc+OjpkaWdpdHMgLSA3KSkpOwogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oX192
YWwpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICB2b2lkCiAgICBfX2Nv
bnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX2luLCBfVHYmIF9fb3V0LCBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGlu
dCBfX2Jhc2UgPSAxMCk7CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICBpbnQKICAg
IF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsIGNvbnN0IGludCBfX3NpemUsIGNvbnN0IGNo
YXIqIF9fZm10LAogICAgICAgICAgICAgICAgICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxl
JiwgaW50IF9fcHJlYyA9IC0xKQogICAgewogICAgICBpbnQgX19yZXQ7CiAgICAgIGNoYXIqIF9f
b2xkID0gc3RyZHVwKHNldGxvY2FsZShfX0xDX0FMTCwgX19udWxsKSk7CiAgICAgIHNldGxvY2Fs
ZShfX0xDX0FMTCwgIkMiKTsKICAgICAgaWYgKF9fcHJlYyA+PSAwKQogICAgICAgIF9fcmV0ID0g
c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKICAgICAgZWxzZQog
ICAgICAgIF9fcmV0ID0gc25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fdik7CiAgICAg
IHNldGxvY2FsZShfX0xDX0FMTCwgX19vbGQpOwogICAgICBmcmVlKF9fb2xkKTsKICAgICAgcmV0
dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBzdHJ1Y3QgX19wYWQKICAgIHsKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1Nf
cGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBfQ2hhclQqIF9fbmV3cywKICAgICAg
ICAgICAgIGNvbnN0IF9DaGFyVCogX19vbGRzLCBjb25zdCBzdHJlYW1zaXplIF9fbmV3bGVuLAog
ICAgICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX29sZGxlbiwgY29uc3QgYm9vbCBfX251bSk7
CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICB2b2lkCiAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoaW9zX2Jhc2UmIF9faW8s
IF9DaGFyVCBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NoYXJU
KiBfX25ld3MsIGNvbnN0IF9DaGFyVCogX19vbGRzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19uZXdsZW4sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX29sZGxlbiwgY29uc3QgYm9vbCBfX251
bSkKICAgIHsKICAgICAgc2l6ZV90IF9fcGxlbiA9IHN0YXRpY19jYXN0PHNpemVfdD4oX19uZXds
ZW4gLSBfX29sZGxlbik7CiAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJU
Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fcGxlbikpOwogICAgICBfVHJh
aXRzOjphc3NpZ24oX19wYWRzLCBfX3BsZW4sIF9fZmlsbCk7CgogICAgICBfQ2hhclQqIF9fYmVn
OwogICAgICBfQ2hhclQqIF9fZW5kOwogICAgICBzaXplX3QgX19tb2QgPSAwOwogICAgICBzaXpl
X3QgX19iZWdsZW47CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2FkanVzdCA9IF9faW8uZmxh
Z3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsKCiAgICAgIGlmIChfX2FkanVzdCA9PSBpb3Nf
YmFzZTo6bGVmdCkKICAgICAgICB7CgogICAgICAgICAgX19iZWcgPSBjb25zdF9jYXN0PF9DaGFy
VCo+KF9fb2xkcyk7CiAgICAgICAgICBfX2JlZ2xlbiA9IF9fb2xkbGVuOwogICAgICAgICAgX19l
bmQgPSBfX3BhZHM7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2FkanVzdCA9PSBpb3NfYmFz
ZTo6aW50ZXJuYWwgJiYgX19udW0pCiAgICAgICAgewoKCgogICAgICAgICAgbG9jYWxlIF9fbG9j
ID0gX19pby5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUg
PSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgICAgIGNvbnN0IF9DaGFy
VCBfX21pbnVzID0gX19jdHlwZS53aWRlbignLScpOwogICAgICAgICAgY29uc3QgX0NoYXJUIF9f
cGx1cyA9IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgICAgIGJvb2wgX190ZXN0c2lnbiA9IF9U
cmFpdHM6OmVxKF9fb2xkc1swXSwgX19taW51cykKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IF9UcmFpdHM6OmVxKF9fb2xkc1swXSwgX19wbHVzKTsKCiAgICAgICAgICBib29sIF9fdGVz
dGhleCA9IF9UcmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJzAnKSwgX19vbGRzWzBdKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiAoX1RyYWl0czo6ZXEoX19jdHlwZS53aWRlbigneCcpLCBf
X29sZHNbMV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfVHJhaXRzOjplcShf
X2N0eXBlLndpZGVuKCdYJyksIF9fb2xkc1sxXSkpOwogICAgICAgICAgaWYgKF9fdGVzdGhleCkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbmV3c1swXSA9IF9fb2xkc1swXTsKICAgICAg
ICAgICAgICBfX25ld3NbMV0gPSBfX29sZHNbMV07CiAgICAgICAgICAgICAgX19tb2QgKz0gMjsK
ICAgICAgICAgICAgICBfX25ld3MgKz0gMjsKICAgICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsK
ICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAgICAgICAgICAgICBfX2VuZCA9IGNv
bnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzICsgX19tb2QpOwogICAgICAgICAgICB9CiAgICAgICAg
ICBlbHNlIGlmIChfX3Rlc3RzaWduKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX1RyYWl0
czo6ZXEoKF9fbmV3c1swXSA9IF9fb2xkc1swXSksIF9fcGx1cykgPyBfX3BsdXMgOiBfX21pbnVz
OwogICAgICAgICAgICAgICsrX19tb2Q7CiAgICAgICAgICAgICAgKytfX25ld3M7CiAgICAgICAg
ICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAg
ICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyArIF9fbW9kKTsK
ICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CgogICAgICAgICAgICAg
IF9fYmVnID0gX19wYWRzOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAg
ICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMpOwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAgIF9fYmVnID0gX19wYWRz
OwogICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nh
c3Q8X0NoYXJUKj4oX19vbGRzKTsKICAgICAgICB9CiAgICAgIF9UcmFpdHM6OmNvcHkoX19uZXdz
LCBfX2JlZywgX19iZWdsZW4pOwogICAgICBfVHJhaXRzOjpjb3B5KF9fbmV3cyArIF9fYmVnbGVu
LCBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld2xlbiAtIF9fYmVnbGVuIC0g
X19tb2QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBib29sCiAgICBf
X3ZlcmlmeV9ncm91cGluZyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiYgX19ncm91cGluZywK
ICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQ+JiBfX2dyb3VwaW5nX3Rt
cCkKICAgIHsKICAgICAgaW50IF9faSA9IDA7CiAgICAgIGludCBfX2ogPSAwOwogICAgICBjb25z
dCBpbnQgX19sZW4gPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAgY29uc3QgaW50IF9fbiA9IF9f
Z3JvdXBpbmdfdG1wLnNpemUoKTsKICAgICAgYm9vbCBfX3Rlc3QgPSB0cnVlOwoKCgoKICAgICAg
d2hpbGUgKF9fdGVzdCAmJiBfX2kgPCBfX24gLSAxKQogICAgICAgIGZvciAoX19qID0gMDsgX190
ZXN0ICYmIF9faiA8IF9fbGVuICYmIF9faSA8IF9fbiAtIDE7ICsrX19qLCsrX19pKQogICAgICAg
ICAgX190ZXN0ICY9IF9fZ3JvdXBpbmdbX19qXSA9PSBfX2dyb3VwaW5nX3RtcFtfX24gLSBfX2kg
LSAxXTsKCgogICAgICBfX2ogPT0gX19sZW4gPyBfX2ogPSAwIDogX19qOwogICAgICBfX3Rlc3Qg
Jj0gX19ncm91cGluZ1tfX2pdID49IF9fZ3JvdXBpbmdfdG1wW19fbiAtIF9faSAtIDFdOwogICAg
ICByZXR1cm4gX190ZXN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIF9DaGFyVCoKICAgIF9fYWRkX2dyb3VwaW5nKF9DaGFyVCogX19zLCBfQ2hhclQgX19zZXAs
CiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2diZWcsIGNvbnN0IGNoYXIqIF9fZ2Vu
ZCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19maXJzdCwgY29uc3QgX0NoYXJU
KiBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gKl9fZ2JlZykKICAg
ICAgICB7CiAgICAgICAgICBfX3MgPSBfX2FkZF9ncm91cGluZyhfX3MsIF9fc2VwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKF9fZ2JlZyArIDEgPT0gX19nZW5kID8gX19nYmVnIDog
X19nYmVnICsgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dlbmQsIF9fZmly
c3QsIF9fbGFzdCAtICpfX2diZWcpOwogICAgICAgICAgX19maXJzdCA9IF9fbGFzdCAtICpfX2di
ZWc7CiAgICAgICAgICAqX19zKysgPSBfX3NlcDsKICAgICAgICB9CiAgICAgIGRvCiAgICAgICAg
Kl9fcysrID0gKl9fZmlyc3QrKzsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KTsKICAg
ICAgcmV0dXJuIF9fczsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVu
Y3Q8Y2hhciwgZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PGNoYXIs
IHRydWU+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCBm
YWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPGNoYXIsIHRy
dWU+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRl
bXBsYXRlIGNsYXNzIG1vbmV5X3B1dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9u
ZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVu
Y3Q8d2NoYXJfdCwgdHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnlu
YW1lPHdjaGFyX3QsIGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9i
eW5hbWU8d2NoYXJfdCwgdHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X2dldDx3
Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfcHV0PHdjaGFyX3Q+OwogIGV4
dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xh
c3MgbnVtcHVuY3RfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fZ2V0
PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fcHV0PGNoYXI+OwogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
bnVtcHVuY3RfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fZ2V0
PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fcHV0PHdjaGFyX3Q+OwogIGV4
dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX3RpbWVwdW5jdDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUg
Y2xhc3MgdGltZV9wdXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0X2J5
bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXQ8Y2hhcj47CiAgZXh0
ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxh
dGUgY2xhc3MgX190aW1lcHVuY3Q8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRp
bWVfcHV0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8
d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0PHdjaGFyX3Q+OwogIGV4
dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldF9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRl
bXBsYXRlIGNsYXNzIG1lc3NhZ2VzPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNz
YWdlc19ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzPHdjaGFy
X3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlc19ieW5hbWU8d2NoYXJfdD47CiAg
ZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGN0eXBlX2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxh
dGUgY2xhc3MgY3R5cGVfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBj
b2RlY3Z0X2J5bmFtZTxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBj
bGFzcyBjb2RlY3Z0X2J5bmFtZTx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OwogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xs
YXRlX2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZTx3Y2hhcl90
PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8d2NoYXJfdD47CgogIGV4
dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+Jgog
ICAgdXNlX2ZhY2V0PGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2Fs
ZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvbGxhdGU8Y2hhcj4mCiAgICB1c2Vf
ZmFjZXQ8Y29sbGF0ZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK
ICAgIGNvbnN0IG51bXB1bmN0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bXB1bmN0PGNoYXI+ID4o
Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX3B1dDxjaGFy
PiYKICAgIHVzZV9mYWNldDxudW1fcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVy
biB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDxudW1fZ2V0
PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9u
ZXlwdW5jdDxjaGFyLCB0cnVlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PGNoYXIsIHRydWU+
ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlwdW5j
dDxjaGFyLCBmYWxzZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxjaGFyLCBmYWxzZT4gPihj
b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9wdXQ8Y2hh
cj4mCiAgICB1c2VfZmFjZXQ8bW9uZXlfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4
dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG1v
bmV5X2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNv
bnN0IF9fdGltZXB1bmN0PGNoYXI+JgogICAgdXNlX2ZhY2V0PF9fdGltZXB1bmN0PGNoYXI+ID4o
Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9wdXQ8Y2hh
cj4mCiAgICB1c2VfZmFjZXQ8dGltZV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0aW1lX2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDx0aW1l
X2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0
IG1lc3NhZ2VzPGNoYXI+JgogICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPGNoYXI+ID4oY29uc3QgbG9j
YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29kZWN2dDx3Y2hhcl90LCBjaGFy
LCBtYnN0YXRlX3Q+JgogICAgdXNlX2ZhY2V0PGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0
ZV90PiA+KGxvY2FsZSBjb25zdCYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvbGxh
dGU8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8Y29sbGF0ZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2Fs
ZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bXB1bmN0PHdjaGFyX3Q+JgogICAg
dXNlX2ZhY2V0PG51bXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0
ZW1wbGF0ZQogICAgY29uc3QgbnVtX3B1dDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxudW1fcHV0
PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3Qg
bnVtX2dldDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxudW1fZ2V0PHdjaGFyX3Q+ID4oY29uc3Qg
bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDx3Y2hhcl90
LCB0cnVlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+ID4oY29uc3Qg
bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDx3Y2hhcl90
LCBmYWxzZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT4gPihjb25z
dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9wdXQ8d2NoYXJf
dD4mCiAgICB1c2VfZmFjZXQ8bW9uZXlfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7Cgog
IGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfZ2V0PHdjaGFyX3Q+JgogICAgdXNlX2Zh
Y2V0PG1vbmV5X2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh
dGUKICAgIGNvbnN0IF9fdGltZXB1bmN0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PF9fdGltZXB1
bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29u
c3QgdGltZV9wdXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8dGltZV9wdXQ8d2NoYXJfdD4gPihj
b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0aW1lX2dldDx3Y2hh
cl90PiYKICAgIHVzZV9mYWNldDx0aW1lX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoK
ICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1lc3NhZ2VzPHdjaGFyX3Q+JgogICAgdXNlX2Zh
Y2V0PG1lc3NhZ2VzPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgoKICBleHRlcm4gdGVtcGxh
dGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoK
ICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2RlY3Z0PGNoYXIsIGNo
YXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi
b29sCiAgICBoYXNfZmFjZXQ8Y29sbGF0ZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl
cm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1wdW5jdDxjaGFyPiA+KGNvbnN0
IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1f
cHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAog
ICAgaGFzX2ZhY2V0PG51bV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlwdW5jdDxjaGFyPiA+KGNvbnN0IGxv
Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9w
dXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAg
ICBoYXNfZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0
ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PF9fdGltZXB1bmN0PGNoYXI+ID4oY29uc3Qg
bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PHRpbWVf
cHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAog
ICAgaGFzX2ZhY2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0
ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1lc3NhZ2VzPGNoYXI+ID4oY29uc3QgbG9j
YWxlJik7CgogZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y3R5cGU8d2No
YXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBo
YXNfZmFjZXQ8Y29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+ID4oY29uc3QgbG9jYWxl
Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvbGxhdGU8d2No
YXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBo
YXNfZmFjZXQ8bnVtcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxv
Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1fZ2V0
PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAog
ICAgaGFzX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfcHV0PHdjaGFyX3Q+ID4o
Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0
PG1vbmV5X2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK
ICAgIGJvb2wKICAgIGhhc19mYWNldDxfX3RpbWVwdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2Fs
ZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1lX3B1dDx3
Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAg
IGhhc19mYWNldDx0aW1lX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g
dGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtZXNzYWdlczx3Y2hhcl90PiA+KGNvbnN0
IGxvY2FsZSYpOwp9CgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
c2VudHJ5OjoKICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcykK
ICAgIDogX01fb2soX19vcy5nb29kKCkpLCBfTV9vcyhfX29zKQogICAgewoKICAgICAgaWYgKF9N
X29rICYmIF9fb3MudGllKCkpCiAgICAgICAgX19vcy50aWUoKS0+Zmx1c2goKTsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoKICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19vc3RyZWFtX3R5cGUm
KSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgb3BlcmF0b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkK
ICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAg
IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMt
PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0
aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQogICAgewog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3Bl
cmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4pCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiICYmIF9fc2JpbikKICAgICAgICB7CiAgICAgICAg
ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICghX19jb3B5X3N0cmVhbWJ1ZnMo
KnRoaXMsIF9fc2JpbiwgdGhpcy0+cmRidWYoKSkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv
bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fc2JpbikKICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46Om9wZXJhdG9yPDwoYm9vbCBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMp
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAg
ICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19u
KS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBfX24pCiAg
ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9f
YyA9IHRoaXMtPmZpbGwoKTsKICAgICAgICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQg
PSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICAgICAgICBpZiAo
X01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgIGJvb2wgX19iID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIGlmICgoX19mbXQgJiBp
b3NfYmFzZTo6b2N0KSB8fCAoX19mbXQgJiBpb3NfYmFzZTo6aGV4KSkKICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fbCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmc+KF9fbik7CiAgICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9m
bnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVkKCk7CiAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19i
ID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX24pLmZhaWxlZCgpOwogICAg
ICAgICAgICAgICAgICBpZiAoX19iKQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0
aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg
ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0
KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlz
LT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8
PChsb25nIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAgaW9zX2Jh
c2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7
CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgICBpZiAoKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCkgfHwgKF9fZm10ICYgaW9zX2Jhc2U6Omhl
eCkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBsb25nIF9fbDsKICAgICAgICAgICAgICAgICAgICAgIF9fbCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmcgbG9uZz4oX19uKTsKICAgICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2Zu
dW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsKICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2Ig
PSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbikuZmFpbGVkKCk7CiAgICAg
ICAgICAgICAgICAgIGlmIChfX2IpCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIF9fbikKICAgIHsKICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg
dHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51
bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywg
dGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj
ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJh
dG9yPDwoZG91YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAg
IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBp
ZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxl
ZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIGRvdWJsZSBfX24pCiAg
ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr
X2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgq
dGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46Om9wZXJhdG9yPDwoY29uc3Qgdm9pZCogX19uKQogICAgewogICAgICBzZW50cnkgX19j
ZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkK
ICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5m
aWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpwdXQoY2hhcl90eXBl
IF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgaW50X3R5cGUgX19wdXQgPSByZGJ1ZigpLT5zcHV0YyhfX2Mp
OwogICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3B1dCwgdHJhaXRzX3R5
cGU6OmVvZigpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6d3JpdGUoY29uc3QgX0No
YXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBzdHJlYW1zaXplIF9fcHV0
ID0gdGhpcy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24pOwogICAgICAgICAgaWYgKCBfX3B1dCAh
PSBfX24pCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmZsdXNoKCkKICAgIHsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgaWYgKHRoaXMtPnJkYnVmKCkgJiYgdGhpcy0+cmRidWYoKS0+cHVic3luYygpID09IC0xKQog
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
Ojpwb3NfdHlwZQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp0ZWxscCgpCiAg
ICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAgICBpZiAoIXRoaXMt
PmZhaWwoKSkKICAgICAgICBfX3JldCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9z
X2Jhc2U6OmN1ciwgaW9zX2Jhc2U6Om91dCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6c2Vla3AocG9zX3R5cGUgX19wb3MpCiAgICB7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQog
ICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJz
ZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6b3V0KTsKCgogICAgICAgICAgaWYgKF9fZXJyID09IHBv
c190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpmYWlsYml0KTsKCiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBzZWVrcChvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19kKQogICAgewogICAg
ICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9fZXJy
ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvdXQpOwoKCiAg
ICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICB9CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9fYykKICAgIHsK
ICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5
cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAg
ICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eo
c2l6ZW9mKF9DaGFyVCkgKiAoX193ICsgMSkpKTsKICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBf
X2M7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAgICAgICAgICAgaWYg
KF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxf
Q2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fYywgX193LCBf
X2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAgICAg
ICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVy
YXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYykKICAg
IHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90
eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAg
ICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX193
ICsgMSkpOwogICAgICAgICAgICAgIF9fcGFkc1swXSA9IF9fYzsKICAgICAgICAgICAgICBzdHJl
YW1zaXplIF9fbGVuID0gMTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkPGNoYXIsIF9UcmFpdHM+OjpfU19wYWQo
X19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZfX2MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAg
ICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQu
d3JpdGUoX19wYWRzLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0
dXJuIF9fb3V0OwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8
PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9f
cykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19v
c3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJi
KF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3MpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRo
KCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihf
X2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7CiAgICAgICAgICAgICAgc3Ry
ZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChf
X3MpKTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19v
dXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19z
ID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBf
X291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JiBfX291dCwgY29uc3QgY2hhciogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKCgoKICAgICAgdHlwZWRlZiBjaGFy
X3RyYWl0czxjaGFyPiBfX3RyYWl0c190eXBlOwoKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5
cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiICYmIF9fcykKICAgICAg
ICB7CiAgICAgICAgICBzaXplX3QgX19jbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7
CiAgICAgICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5f
YWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fY2xlbiArIDEpKSk7CiAgICAgICAgICBmb3IgKHNp
emVfdCBfX2kgPSAwOyBfX2kgPCBfX2NsZW47ICsrX19pKQogICAgICAgICAgICBfX3dzW19faV0g
PSBfX291dC53aWRlbihfX3NbX19pXSk7CiAgICAgICAgICBfQ2hhclQqIF9fc3RyID0gX193czsK
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19s
ZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2NsZW4pOwogICAgICAgICAgICAgIHN0cmVh
bXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9
IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBf
X3cpKTsKCiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9f
b3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX193cywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBf
X3N0ciA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zdHIsIF9fbGVuKTsKICAgICAgICAg
ICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1w
bGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAg
IG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNo
YXIqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+
IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9f
Y2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQogICAgICAgIHsKICAgICAgICAg
IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53
aWR0aCgpOwogICAgICAgICAgICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIqPihf
X2J1aWx0aW5fYWxsb2NhKF9fdykpOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBz
dGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7CgogICAgICAgICAg
ICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
X19wYWQ8Y2hhciwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9f
dywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19zID0gX19wYWRzOwogICAgICAg
ICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBf
X291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBl
bHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JiBfX291dCwKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlw
ZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg
ICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5kYXRhKCk7CiAgICAgICAgICBzdHJlYW1z
aXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRp
Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsK
ICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX3N0
ci5zaXplKCkpOwoKCgogICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5m
aWxsKCksIF9fcGFkcywgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgX19zID0gX19wYWRzOwog
ICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICB9CiAgICAgICAgICBzdHJlYW1z
aXplIF9fcmVzID0gX19vdXQucmRidWYoKS0+c3B1dG4oX19zLCBfX2xlbik7CiAgICAgICAgICBf
X291dC53aWR0aCgwKTsKICAgICAgICAgIGlmIChfX3JlcyAhPSBfX2xlbikKICAgICAgICAgICAg
X19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJu
IF9fb3V0OwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmVhbTxj
aGFyPjsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZW5kbChvc3RyZWFtJik7CiAgZXh0ZXJu
IHRlbXBsYXRlIG9zdHJlYW0mIGVuZHMob3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3Ry
ZWFtJiBmbHVzaChvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9y
PDwob3N0cmVhbSYsIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8
KG9zdHJlYW0mLCB1bnNpZ25lZCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3Bl
cmF0b3I8PChvc3RyZWFtJiwgc2lnbmVkIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFt
JiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9z
dHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IHVuc2lnbmVkIGNoYXIqKTsKICBleHRl
cm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3Qgc2lnbmVkIGNo
YXIqKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+Owog
IGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgZW5kbCh3b3N0cmVhbSYpOwogIGV4dGVybiB0ZW1w
bGF0ZSB3b3N0cmVhbSYgZW5kcyh3b3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVh
bSYgZmx1c2god29zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9y
PDwod29zdHJlYW0mLCB3Y2hhcl90KTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJh
dG9yPDwod29zdHJlYW0mLCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJh
dG9yPDwod29zdHJlYW0mLCBjb25zdCB3Y2hhcl90Kik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3Ry
ZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY29uc3QgY2hhciopOwoKfQoKCgoKCgoKCm5hbWVz
cGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFy
VCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRl
ZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8
X0NoYXJULCBfVHJhaXRzPiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVm
X2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVk
ZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwogICAg
ICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwoKICAgIHByb3RlY3RlZDoKCiAg
ICAgIHN0cmVhbXNpemUgX01fZ2NvdW50OwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIGJhc2ljX2lzdHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgewogICAgICAg
IHRoaXMtPmluaXQoX19zYik7CiAgICAgICAgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsKICAg
ICAgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaXN0cmVhbSgpCiAgICAgIHsgX01fZ2Nv
dW50ID0gc3RyZWFtc2l6ZSgwKTsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5k
IGNsYXNzIHNlbnRyeTsKCgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4o
X19pc3RyZWFtX3R5cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX2lzdHJl
YW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUm
KSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpf
X3BmKShpb3NfYmFzZSYpKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+
Pihib29sJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oc2hv
cnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25l
ZCBzaG9ydCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGlu
dCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVk
IGludCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcm
IF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBs
b25nJiBfX24pOwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcg
bG9uZyYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2ln
bmVkIGxvbmcgbG9uZyYgX19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0
b3I+PihmbG9hdCYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+
KGRvdWJsZSYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxv
bmcgZG91YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4o
dm9pZComIF9fcCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX3N0
cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgICBnY291
bnQodm9pZCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ2NvdW50OyB9CgogICAgICBpbnRfdHlw
ZQogICAgICBnZXQodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJf
dHlwZSYgX19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlKiBf
X3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19p
c3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmdldChfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9Cgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNo
YXJfdHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0
KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdldChfX3NiLCB0
aGlzLT53aWRlbignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5l
KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAg
ICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBz
dHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0bGluZShfX3MsIF9fbiwgdGhp
cy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgaWdub3JlKHN0
cmVhbXNpemUgX19uID0gMSwgaW50X3R5cGUgX19kZWxpbSA9IHRyYWl0c190eXBlOjplb2YoKSk7
CgogICAgICBpbnRfdHlwZQogICAgICBwZWVrKHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUm
CiAgICAgIHJlYWQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHN0cmVh
bXNpemUKICAgICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOwoKICAgICAg
X19pc3RyZWFtX3R5cGUmCiAgICAgIHVuZ2V0KHZvaWQpOwoKICAgICAgaW50CiAgICAgIHN5bmMo
dm9pZCk7CgogICAgICBwb3NfdHlwZQogICAgICB0ZWxsZyh2b2lkKTsKCiAgICAgIF9faXN0cmVh
bV90eXBlJgogICAgICBzZWVrZyhwb3NfdHlwZSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg
ICAgc2Vla2cob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVk
ZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0No
YXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgZXhwbGljaXQK
ICAgICAgc2VudHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywgYm9vbCBf
X25vc2tpcHdzID0gZmFsc2UpOwoKICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuIF9NX29r
OyB9CgogICAgcHJpdmF0ZToKICAgICAgYm9vbCBfTV9vazsKICAgIH07CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19pbiwgX0NoYXJUJiBfX2MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxj
aGFyLCBfVHJhaXRzPiYgX19pbiwgdW5zaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9f
aW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3Mg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+
KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBfX2MpCiAg
ICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRz
PgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19p
c3RyZWFtPGNoYXIsX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0
dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRl
PGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAgICBvcGVy
YXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIqIF9f
cykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFz
cyBiYXNpY19pb3N0cmVhbQogICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+LAogICAgICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAg
ICBwdWJsaWM6CgoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
VHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190
eXBlOwoKCgogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lz
dHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g
X19vc3RyZWFtX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3N0cmVhbShiYXNp
Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgICAgOiBfX2lzdHJlYW1fdHlw
ZShfX3NiKSwgX19vc3RyZWFtX3R5cGUoX19zYikKICAgICAgeyB9CgogICAgICB2aXJ0dWFsCiAg
ICAgIH5iYXNpY19pb3N0cmVhbSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7Cn0KCgoKCgoK
CgoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6CiAg
ICBzZW50cnkoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBib29sIF9fbm9z
a2lwd3MpCiAgICB7CiAgICAgIGlmIChfX2luLmdvb2QoKSkKICAgICAgICB7CiAgICAgICAgICBp
ZiAoX19pbi50aWUoKSkKICAgICAgICAgICAgX19pbi50aWUoKS0+Zmx1c2goKTsKICAgICAgICAg
IGlmICghX19ub3NraXB3cyAmJiAoX19pbi5mbGFncygpICYgaW9zX2Jhc2U6OnNraXB3cykpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gdHJhaXRz
X3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2lu
LnJkYnVmKCk7CiAgICAgICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoK
ICAgICAgICAgICAgICBpZiAoX19pbi5fTV9jaGVja19mYWNldChfX2luLl9NX2ZjdHlwZSkpCiAg
ICAgICAgICAgICAgICB3aGlsZSAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9m
KQogICAgICAgICAgICAgICAgICAgICAgICYmIF9faW4uX01fZmN0eXBlLT5pcyhjdHlwZV9iYXNl
OjpzcGFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJh
aXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKSkKICAgICAgICAgICAgICAgICAgX19jID0gX19z
Yi0+c25leHRjKCk7CgoKCiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlw
ZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVv
ZmJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgaWYgKF9faW4uZ29vZCgpKQog
ICAgICAgIF9NX29rID0gdHJ1ZTsKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9NX29r
ID0gZmFsc2U7CiAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAg
ICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYp
KF9faXN0cmVhbV90eXBlJikpCiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZikoX19p
b3NfdHlwZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQog
ICAgewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Ogog
ICAgb3BlcmF0b3I+Pihib29sJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs
IGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6
Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19m
YWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywg
MCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJy
KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24p
CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2Ri
aXQpOwogICAgICAgICAgICAgIGxvbmcgX19sOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19m
YWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywg
MCwgKnRoaXMsIF9fZXJyLCBfX2wpOwoKCiAgICAgICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3Nf
YmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICAgICAgICAgJiYgKG51bWVyaWNfbGltaXRzPHNob3J0
Pjo6bWluKCkgPD0gX19sCiAgICAgICAgICAgICAgICAgICAgICAmJiBfX2wgPD0gbnVtZXJpY19s
aW1pdHM8c2hvcnQ+OjptYXgoKSkpCiAgICAgICAgICAgICAgICBfX24gPSBfX2w7CiAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7Cgog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0JiBfX24pCiAgICB7CiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
IF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAg
ICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2Zu
dW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVy
YXRvcj4+KGludCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRl
KGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBsb25nIF9fbDsKICAgICAgICAgICAg
ICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVt
Z2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19sKTsKCgogICAgICAgICAgICAgIGlm
ICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAgICAgICAgICYmIChudW1l
cmljX2xpbWl0czxpbnQ+OjptaW4oKSA8PSBfX2wKICAgICAgICAgICAgICAgICAgICAgICYmIF9f
bCA8PSBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCiAgICAgICAgICAgICAgICBfX24gPSBf
X2w7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6
OmZhaWxiaXQ7CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAg
ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg
ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg
ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19uKQogICAg
ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsK
ICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAg
ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh
dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OgogICAgb3BlcmF0b3I+Pihsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jh
c2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVj
a19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhp
cywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9f
ZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg
ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVk
IGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3Nf
YmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1n
ZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19l
cnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAg
ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg
ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19uKQogICAgewog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAg
ICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAg
ICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg
IG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBf
X2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg
ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJy
ID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlm
IChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQt
PmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+
PihmbG9hdCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlv
c19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51
bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBf
X2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihkb3VibGUmIF9fbikKICAgIHsKICAg
ICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAg
X01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg
IG9wZXJhdG9yPj4obG9uZyBkb3VibGUmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq
dGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3Nf
YmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2No
ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0
aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
X19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK
ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odm9pZCom
IF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAo
X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6
Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQog
ICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9f
bik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAg
ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSogX19zYm91dCkKICAg
IHsKICAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgIHsKICAgICAgICAgICB0cnkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
c3RyZWFtc2l6ZSBfX3h0cmN0ID0gMDsKICAgICAgICAgICAgICAgaWYgKF9fc2JvdXQpCiAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYmlu
ID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3Ry
ZWFtYnVmcygqdGhpcywgX19zYmluLCBfX3Nib3V0KTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgIGlmICghX19zYm91dCB8fCAhX194dHJjdCkKICAgICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgICB7CgoKICAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0
eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KHZvaWQpCiAgICB7CiAgICAgIGNv
bnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBpbnRfdHlwZSBf
X2MgPSBfX2VvZjsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAg
ICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAg
ICAgICAgICAgICAgICBfTV9nY291bnQgPSAxOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJp
dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg
ICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi
aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgcmV0dXJuIF9fYzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChjaGFyX3R5cGUmIF9fYykKICAg
IHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsK
ICAgICAgICAgICAgICBpbnRfdHlwZSBfX2J1ZnZhbCA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygp
OwoKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2J1ZnZhbCwg
X19lb2YpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfTV9nY291bnQgPSAx
OwogICAgICAgICAgICAgICAgICBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYnVm
dmFsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwog
ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFt
c2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90
eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAg
ICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAg
ICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAg
ICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIHdoaWxlIChf
TV9nY291bnQgKyAxIDwgX19uCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6
ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190
eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKSkKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAg
ICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgICAgKytf
TV9nY291bnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBl
OjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKICAgICAgaWYgKCFfTV9n
Y291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYiwg
Y2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVs
aW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29u
c3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19z
dHJlYW1idWZfdHlwZSogX190aGlzX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBp
bnRfdHlwZSBfX2MgPSBfX3RoaXNfc2ItPnNnZXRjKCk7CiAgICAgICAgICAgICAgY2hhcl90eXBl
IF9fYzIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CgogICAgICAgICAgICAgIHdo
aWxlICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAg
ICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkKICAgICAg
ICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3NiLnNwdXRjKF9f
YzIpLCBfX2VvZikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX01fZ2Nv
dW50OwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3RoaXNfc2ItPnNuZXh0YygpOwogICAgICAg
ICAgICAgICAgICBfX2MyID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19j
LCBfX2VvZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0
KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFp
bGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldGxpbmUoY2hhcl90
eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAg
X01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShf
X2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBl
Ojplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRi
dWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAg
ICAgICAgICB3aGlsZSAoX01fZ2NvdW50ICsgMSA8IF9fbgogICAgICAgICAgICAgICAgICAgICAm
JiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAgICAg
ICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkpCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFy
X3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAg
ICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
IGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50
X3R5cGUoX19jLCBfX2lkZWxpbSkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgICAgICAgICArK19NX2djb3Vu
dDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9NX2djb3VudCkKICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjoKICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiwgaW50X3R5cGUgX19kZWxpbSkK
ICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1
ZSk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19uID4gMCkKICAgICAgICB7CiAgICAgICAgICB0cnkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRz
X3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlz
LT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7Cgog
ICAgICAgICAgICAgIF9fbiA9IG1pbihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+Ojpt
YXgoKSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbgogICAgICAgICAgICAg
ICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAg
ICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2RlbGltKSkK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7
CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgICBl
bHNlIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2RlbGltKSkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAg
ICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5h
bWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHBlZWsodm9pZCkKICAgIHsKICAgICAgaW50X3R5
cGUgX19jID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0YygpOyB9
CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg
ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX2M7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAg
IHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBfTV9nY291bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbik7
CiAgICAgICAgICAgICAgaWYgKF9NX2djb3VudCAhPSBfX24pCiAgICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UK
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg
IHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgX01f
Z2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChf
X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBzdHJlYW1zaXplIF9fbnVtID0gdGhpcy0+cmRidWYoKS0+aW5fYXZhaWwoKTsKICAgICAgICAg
ICAgICBpZiAoX19udW0gPiAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBf
X251bSA9IG1pbihfX251bSwgX19uKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fbnVtKQogICAg
ICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IHRoaXMtPnJkYnVmKCktPnNnZXRuKF9fcywgX19u
dW0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfTV9nY291bnQ7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6CiAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFp
dHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRo
aXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKCFfX3NiCiAgICAgICAgICAgICAgICAgIHx8
IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3NiLT5zcHV0YmFja2MoX19jKSwgX19lb2YpKQog
ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQog
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46OgogICAgdW5nZXQodm9pZCkKICAgIHsKICAgICAgX01fZ2NvdW50ID0g
MDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBp
bnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVh
bWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoIV9fc2IK
ICAgICAgICAgICAgICAgICAgfHwgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fc2ItPnN1bmdl
dGMoKSwgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsK
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBpbnQKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBzeW5jKHZvaWQpCiAgICB7CiAgICAgIGludCBfX3JldCA9IC0xOwogICAgICBfTV9n
Y291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9f
Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlm
IChfX3NiKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoX19zYi0+cHVi
c3luYygpID09IC0xKQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19y
ZXQgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIHRlbGxnKHZvaWQpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0
ID0gcG9zX3R5cGUoLTEpOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJi
KCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVr
b2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjppbik7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAg
fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIHNlZWtnKHBvc190eXBlIF9fcG9zKQogICAgewogICAgICBfTV9nY291bnQg
PSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgcG9z
X3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6
aW4pOwoKCiAgICAgICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkp
CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAg
ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtnKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFz
ZTo6c2Vla2RpciBfX2RpcikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhp
cy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kaXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppbik7CgoKICAg
ICAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgICAgIH0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp
ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKQogICAgewogICAgICB0
eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAg
ICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwog
ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9f
aW4uZ2V0KF9fYyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg
ICAgICB7CgoKICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IGVsc2UKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0
dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4o
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQqIF9fcykKICAgIHsK
ICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5
cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRf
dHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwogICAgICBzdHJlYW1zaXplIF9fZXh0cmFj
dGVkID0gMDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9f
aW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewoKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gX19pbi53aWR0aCgp
OwogICAgICAgICAgICAgIGlmIChfX251bSA9PSAwKQogICAgICAgICAgICAgICAgX19udW0gPSBu
dW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCk7CgogICAgICAgICAgICAgIGNvbnN0IF9f
Y3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9j
KCkpOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7
CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAg
ICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICB3
aGlsZSAoX19leHRyYWN0ZWQgPCBfX251bSAtIDEKICAgICAgICAgICAgICAgICAgICAgJiYgX19j
ICE9IF9fZW9mICYmICFfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAqX19zKysgPSBfX2M7CiAgICAgICAgICAgICAg
ICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0Yygp
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAg
ICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKCgogICAgICAgICAg
ICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKCiAgICAgICAgICAgICAgX19pbi53aWR0aCgwKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKChfX2luLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYg
KCFfX2V4dHJhY3RlZCkKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsK
ICAgICAgcmV0dXJuIF9faW47CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIHdz
KGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2luKQogICAgewogICAgICB0eXBlZGVm
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1
Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5
cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpp
bnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgY29uc3QgX19jdHlwZV90eXBlJiBfX2N0eXBlID0g
dXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19pbi5nZXRsb2MoKSk7CiAgICAgIGNvbnN0IF9faW50
X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgX19zdHJlYW1idWZfdHlwZSogX19z
YiA9IF9faW4ucmRidWYoKTsKICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoK
ICAgICAgd2hpbGUgKF9fYyAhPSBfX2VvZiAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNl
LCBfX2MpKQogICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICBpZiAoX19jID09IF9f
ZW9mKQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgogICAgICByZXR1
cm4gX19pbjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAg
ICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3Ry
KQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lz
dHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5
cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19z
dHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
aXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAg
ICAgIF9fc2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVh
bV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAg
ICAgICB7CiAgICAgICAgICBfX3N0ci5lcmFzZSgpOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX3cg
PSBfX2luLndpZHRoKCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBfX247CiAgICAgICAgICBfX24g
PSBfX3cgPiAwID8gc3RhdGljX2Nhc3Q8X19zaXplX3R5cGU+KF9fdykgOiBfX3N0ci5tYXhfc2l6
ZSgpOwoKICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxf
X2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBf
X2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9
IF9faW4ucmRidWYoKTsKICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsK
CiAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX24KICAgICAgICAgICAgICAgICAmJiBf
X2MgIT0gX19lb2YgJiYgIV9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19j
KTsKICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAgICAgIF9fYyA9IF9fc2It
PnNuZXh0YygpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19jID09IF9fZW9mKQogICAg
ICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgX19pbi53
aWR0aCgwKTsKICAgICAgICB9CgoKICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKICAgICAgICBfX2lu
LnNldHN0YXRlIChpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICByZXR1cm4gX19pbjsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAgICAgICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKQogICAg
ewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1f
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19p
bnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1i
dWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVh
bV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CgogICAgICBf
X3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7CiAgICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBmYWxz
ZTsKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgdHJ1
ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgX19zdHIuZXJhc2UoKTsK
ICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbiA9IF9fc3RyLm1heF9zaXplKCk7CgogICAgICAgICAg
X19pbnRfdHlwZSBfX2lkZWxpbSA9IF9UcmFpdHM6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAg
ICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgIF9f
aW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICBjb25zdCBfX2ludF90eXBl
IF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9UcmFpdHM6
OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pOwoKICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3Rl
ZCA8PSBfX24KICAgICAgICAgICAgICAgICAmJiAhX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBf
X2VvZikKICAgICAgICAgICAgICAgICAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAg
ICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwog
ICAgICAgICAgICAgIF9fdGVzdGRlbGltID0gX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2lk
ZWxpbSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShf
X2MsIF9fZW9mKSkKICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsK
ICAgICAgICB9CiAgICAgIGlmICghX19leHRyYWN0ZWQgJiYgIV9fdGVzdGRlbGltKQogICAgICAg
IF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19pbjsKICAg
IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+
CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAgICAgICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fc3RyKQogICAgeyByZXR1cm4gZ2V0bGluZShf
X2luLCBfX3N0ciwgX19pbi53aWRlbignXG4nKSk7IH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIGJhc2ljX2lzdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIHdzKGlz
dHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwg
Y2hhciYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBj
aGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHVu
c2lnbmVkIGNoYXImKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3Ry
ZWFtJiwgc2lnbmVkIGNoYXImKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+
Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBv
cGVyYXRvcj4+KGlzdHJlYW0mLCBzaWduZWQgY2hhciopOwoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIGJhc2ljX2lzdHJlYW08d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiB3
cyh3aXN0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0
cmVhbSYsIHdjaGFyX3QmKTsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4o
d2lzdHJlYW0mLCB3Y2hhcl90Kik7Cgp9CgoKCm5hbWVzcGFjZSBzdGQKewogIGV4dGVybiBpc3Ry
ZWFtIGNpbjsKICBleHRlcm4gb3N0cmVhbSBjb3V0OwogIGV4dGVybiBvc3RyZWFtIGNlcnI7CiAg
ZXh0ZXJuIG9zdHJlYW0gY2xvZzsKCiAgZXh0ZXJuIHdpc3RyZWFtIHdjaW47CiAgZXh0ZXJuIHdv
c3RyZWFtIHdjb3V0OwogIGV4dGVybiB3b3N0cmVhbSB3Y2VycjsKICBleHRlcm4gd29zdHJlYW0g
d2Nsb2c7CgoKCiAgc3RhdGljIGlvc19iYXNlOjpJbml0IF9faW9pbml0Owp9CgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCm5hbWVzcGFjZSBzdGQKewoKCiAgY2xhc3Mgc3Ryc3RyZWFtYnVmIDogcHVi
bGljIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyLCBjaGFyX3RyYWl0czxjaGFyPiA+CiAgewogIHB1Ymxp
YzoKCiAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXI+IF9UcmFpdHM7CiAgICB0eXBlZGVmIGJh
c2ljX3N0cmVhbWJ1ZjxjaGFyLCBfVHJhaXRzPiBfQmFzZTsKCiAgcHVibGljOgoKICAgIGV4cGxp
Y2l0IHN0cnN0cmVhbWJ1ZihzdHJlYW1zaXplIF9faW5pdGlhbF9jYXBhY2l0eSA9IDApOwogICAg
c3Ryc3RyZWFtYnVmKHZvaWQqICgqX19hbGxvYykoc2l6ZV90KSwgdm9pZCAoKl9fZnJlZSkodm9p
ZCopKTsKCiAgICBzdHJzdHJlYW1idWYoY2hhciogX19nZXQsIHN0cmVhbXNpemUgX19uLCBjaGFy
KiBfX3B1dCA9IDApOwogICAgc3Ryc3RyZWFtYnVmKHNpZ25lZCBjaGFyKiBfX2dldCwgc3RyZWFt
c2l6ZSBfX24sIHNpZ25lZCBjaGFyKiBfX3B1dCA9IDApOwogICAgc3Ryc3RyZWFtYnVmKHVuc2ln
bmVkIGNoYXIqIF9fZ2V0LCBzdHJlYW1zaXplIF9fbiwgdW5zaWduZWQgY2hhciogX19wdXQ9MCk7
CgogICAgc3Ryc3RyZWFtYnVmKGNvbnN0IGNoYXIqIF9fZ2V0LCBzdHJlYW1zaXplIF9fbik7CiAg
ICBzdHJzdHJlYW1idWYoY29uc3Qgc2lnbmVkIGNoYXIqIF9fZ2V0LCBzdHJlYW1zaXplIF9fbik7
CiAgICBzdHJzdHJlYW1idWYoY29uc3QgdW5zaWduZWQgY2hhciogX19nZXQsIHN0cmVhbXNpemUg
X19uKTsKCiAgICB2aXJ0dWFsIH5zdHJzdHJlYW1idWYoKTsKCiAgcHVibGljOgogICAgdm9pZCBm
cmVlemUoYm9vbCA9IHRydWUpOwogICAgY2hhciogc3RyKCk7CiAgICBpbnQgcGNvdW50KCkgY29u
c3Q7CgogIHByb3RlY3RlZDoKICAgIHZpcnR1YWwgaW50X3R5cGUgb3ZlcmZsb3coaW50X3R5cGUg
X19jID0gX1RyYWl0czo6ZW9mKCkpOwogICAgdmlydHVhbCBpbnRfdHlwZSBwYmFja2ZhaWwoaW50
X3R5cGUgX19jID0gX1RyYWl0czo6ZW9mKCkpOwogICAgdmlydHVhbCBpbnRfdHlwZSB1bmRlcmZs
b3coKTsKICAgIHZpcnR1YWwgX0Jhc2UqIHNldGJ1ZihjaGFyKiBfX2J1Ziwgc3RyZWFtc2l6ZSBf
X24pOwogICAgdmlydHVhbCBwb3NfdHlwZSBzZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFz
ZTo6c2Vla2RpciBfX2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6
b3Blbm1vZGUgX19tb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBpb3NfYmFzZTo6
aW4gfCBpb3NfYmFzZTo6b3V0KTsKICAgIHZpcnR1YWwgcG9zX3R5cGUgc2Vla3Bvcyhwb3NfdHlw
ZSBfX3BvcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7CgogIHByaXZhdGU6CgogICAg
Y2hhciogX01fYWxsb2Moc2l6ZV90KTsKICAgIHZvaWQgX01fZnJlZShjaGFyKik7CgoKICAgIHZv
aWQgX01fc2V0dXAoY2hhciogX19nZXQsIGNoYXIqIF9fcHV0LCBzdHJlYW1zaXplIF9fbik7Cgog
IHByaXZhdGU6CgogICAgdm9pZCogKCpfTV9hbGxvY19mdW4pKHNpemVfdCk7CiAgICB2b2lkICgq
X01fZnJlZV9mdW4pKHZvaWQqKTsKCiAgICBib29sIF9NX2R5bmFtaWMgOiAxOwogICAgYm9vbCBf
TV9mcm96ZW4gOiAxOwogICAgYm9vbCBfTV9jb25zdGFudCA6IDE7CiAgfTsKCgogIGNsYXNzIGlz
dHJzdHJlYW0gOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxjaGFyPgogIHsKICBwdWJsaWM6CiAgICBl
eHBsaWNpdCBpc3Ryc3RyZWFtKGNoYXIqKTsKICAgIGV4cGxpY2l0IGlzdHJzdHJlYW0oY29uc3Qg
Y2hhciopOwogICAgaXN0cnN0cmVhbShjaGFyKiAsIHN0cmVhbXNpemUpOwogICAgaXN0cnN0cmVh
bShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIH5pc3Ryc3RyZWFtKCk7Cgog
ICAgc3Ryc3RyZWFtYnVmKiByZGJ1ZigpIGNvbnN0OwogICAgY2hhciogc3RyKCk7CgogIHByaXZh
dGU6CiAgICBzdHJzdHJlYW1idWYgX01fYnVmOwogIH07CgoKICBjbGFzcyBvc3Ryc3RyZWFtIDog
cHVibGljIGJhc2ljX29zdHJlYW08Y2hhcj4KICB7CiAgcHVibGljOgogICAgb3N0cnN0cmVhbSgp
OwogICAgb3N0cnN0cmVhbShjaGFyKiwgaW50LCBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFz
ZTo6b3V0KTsKICAgIHZpcnR1YWwgfm9zdHJzdHJlYW0oKTsKCiAgICBzdHJzdHJlYW1idWYqIHJk
YnVmKCkgY29uc3Q7CiAgICB2b2lkIGZyZWV6ZShib29sID0gdHJ1ZSk7CiAgICBjaGFyKiBzdHIo
KTsKICAgIGludCBwY291bnQoKSBjb25zdDsKCiAgcHJpdmF0ZToKICAgIHN0cnN0cmVhbWJ1ZiBf
TV9idWY7CiAgfTsKCgogIGNsYXNzIHN0cnN0cmVhbSA6IHB1YmxpYyBiYXNpY19pb3N0cmVhbTxj
aGFyPgogIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwogICAgdHlwZWRl
ZiBjaGFyX3RyYWl0czxjaGFyPjo6aW50X3R5cGUgaW50X3R5cGU7CiAgICB0eXBlZGVmIGNoYXJf
dHJhaXRzPGNoYXI+Ojpwb3NfdHlwZSBwb3NfdHlwZTsKICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8
Y2hhcj46Om9mZl90eXBlIG9mZl90eXBlOwoKICAgIHN0cnN0cmVhbSgpOwogICAgc3Ryc3RyZWFt
KGNoYXIqLCBpbnQsIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNl
OjpvdXQpOwogICAgdmlydHVhbCB+c3Ryc3RyZWFtKCk7CgogICAgc3Ryc3RyZWFtYnVmKiByZGJ1
ZigpIGNvbnN0OwogICAgdm9pZCBmcmVlemUoYm9vbCA9IHRydWUpOwogICAgaW50IHBjb3VudCgp
IGNvbnN0OwogICAgY2hhciogc3RyKCk7CgogIHByaXZhdGU6CiAgICBzdHJzdHJlYW1idWYgX01f
YnVmOwogIH07Cn0KCgp1c2luZyBzdGQ6OnN0cnN0cmVhbWJ1ZjsKdXNpbmcgc3RkOjppc3Ryc3Ry
ZWFtOwp1c2luZyBzdGQ6Om9zdHJzdHJlYW07CnVzaW5nIHN0ZDo6c3Ryc3RyZWFtOwoKCgppbnQg
U3BQYXJtU2V0RGF0YUl0ZW06OnNpemUgPSAzMDsKY2hhciogU3BQYXJtU2V0RGF0YUl0ZW06OnJl
dCA9IG5ldyBjaGFyW1NwUGFybVNldERhdGFJdGVtOjpzaXplXTsKU3BQYXJtU2V0RWxlbWVudDo6
U3BQYXJtU2V0RWxlbWVudCgpIHsKICBEYXRhID0gX19udWxsOwp9CgpTcFBhcm1TZXRFbGVtZW50
OjpTcFBhcm1TZXRFbGVtZW50KGludCB2YWwpIHsKICBEYXRhID0gbmV3IFNwUGFybVNldEludERh
dGEodmFsKTsKfQoKU3BQYXJtU2V0RWxlbWVudDo6U3BQYXJtU2V0RWxlbWVudChmbG9hdCB2YWwp
IHsKICBEYXRhID0gbmV3IFNwUGFybVNldEZsb2F0RGF0YSh2YWwpOwp9CgpTcFBhcm1TZXRFbGVt
ZW50OjpTcFBhcm1TZXRFbGVtZW50KGRvdWJsZSB2YWwpIHsKICBEYXRhID0gbmV3IFNwUGFybVNl
dERvdWJsZURhdGEodmFsKTsKfQoKU3BQYXJtU2V0RWxlbWVudDo6U3BQYXJtU2V0RWxlbWVudChj
aGFyKiB2YWwpIHsKICBEYXRhID0gbmV3IFNwUGFybVNldFN0cmluZ0RhdGEodmFsKTsKfQoKU3BQ
YXJtU2V0RWxlbWVudDo6U3BQYXJtU2V0RWxlbWVudChjaGFyKiB2YWwsIGludCBzaXplKSB7CiAg
RGF0YSA9IG5ldyBTcFBhcm1TZXRCdWZmZXJEYXRhKHZhbCwgc2l6ZSk7Cn0KClNwUGFybVNldEVs
ZW1lbnQ6OlNwUGFybVNldEVsZW1lbnQoY29uc3QgU3BQYXJtU2V0RWxlbWVudCYgZWxlbSkgewog
IGlmIChlbGVtLkRhdGEpCiAgICBEYXRhID0gZWxlbS5EYXRhLT5DbG9uZSgpOwogIGVsc2UKICAg
IERhdGEgPSBfX251bGw7Cn0KClNwUGFybVNldEVsZW1lbnQ6On5TcFBhcm1TZXRFbGVtZW50KCkg
ewogIGlmIChEYXRhKSBkZWxldGUgRGF0YTsKfQoKaW50ClNwUGFybVNldEVsZW1lbnQ6OkdldFBh
Y2tMZW5ndGgoU3BQYXJtU2V0UGFja01ldGhvZCBwYWNrKSB7CiAgaWYgKCFEYXRhKSB7CiAgICBy
ZXR1cm4gMDsKICB9CiAgcmV0dXJuIERhdGEtPkdldFBhY2tMZW5ndGgocGFjayk7Cn0KCnZvaWQK
U3BQYXJtU2V0RWxlbWVudDo6UGFja0J1ZmZlcihTcFBhcm1TZXRQYWNrTWV0aG9kIHBhY2ssCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGJ1ZmYsIGludCYgb2Zmc2V0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBYRFIqIHhkckhhbmRsZSkgewoKCgoKCiAgaWYgKERh
dGEpCgogICAgRGF0YS0+UGFja0J1ZmZlcihwYWNrLCBidWZmLCBvZmZzZXQsIHhkckhhbmRsZSk7
CgoKCiAgZWxzZSB7CiAgICBORVRfSU5UIG5ldG5vbmU7CiAgICBpbnQgaW50bm9uZTsKICAgIHN3
aXRjaChwYWNrKSB7CiAgICBjYXNlIFBBQ0tfTkVUX1RZUEVTOgogICAgICBuZXRub25lID0oaW50
KSBOT05FX0RBVEE7CiAgICAgIG1lbWNweShidWZmK29mZnNldCwoY2hhciopJm5ldG5vbmUsIHNp
emVvZihORVRfSU5UKSk7CiAgICAgIG9mZnNldCArPSBzaXplb2YoTkVUX0lOVCk7CiAgICAgIGJy
ZWFrOwogICAgY2FzZSBQQUNLX05BVElWRToKICAgICAgaW50bm9uZSA9KGludCkgTk9ORV9EQVRB
OwogICAgICBtZW1jcHkoYnVmZitvZmZzZXQsKGNoYXIqKSZpbnRub25lLCBzaXplb2YoaW50KSk7
CiAgICAgIG9mZnNldCArPSBzaXplb2YoaW50KTsKICAgICAgYnJlYWs7CiAgICBjYXNlIFBBQ0tf
WERSOgoKICAgICAgaW50bm9uZSA9KGludCkgTk9ORV9EQVRBOwogICAgICB4ZHJfaW50KHhkckhh
bmRsZSwgJmludG5vbmUpOwoKICAgICAgYnJlYWs7CiAgICB9CiAgfQp9Cgp2b2lkClNwUGFybVNl
dEVsZW1lbnQ6OlVucGFja0J1ZmZlcihTcFBhcm1TZXRQYWNrTWV0aG9kIHBhY2ssCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogYnVmZiwgaW50JiBvZmZzZXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWERSKiB4ZHJIYW5kbGUpIHsKCiAgRGF0YSA9IFNwUGFy
bVNldERhdGFJdGVtOjpVbnBhY2tCdWZmZXIocGFjaywgYnVmZiwgb2Zmc2V0LCB4ZHJIYW5kbGUp
Owp9CgpTcFBhcm1TZXREYXRhSXRlbSoKU3BQYXJtU2V0RGF0YUl0ZW06OlVucGFja0J1ZmZlcihT
cFBhcm1TZXRQYWNrTWV0aG9kIHBhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIqIGJ1ZmYsIGludCYgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBYRFIqIHhkckhhbmRsZSkgewoKCgoKCiAgTkVUX0lOVCBuZXRpbnQ7CiAgaW50IG5vcm1pbnQ7
CiAgU3BQYXJtU2V0RGF0YVR5cGUgZGF0YXR5cGU7CgogIHN3aXRjaChwYWNrKSB7CiAgY2FzZSBQ
QUNLX05FVF9UWVBFUzoKICAgIG1lbWNweSgoY2hhciopJm5ldGludCwgYnVmZitvZmZzZXQsIHNp
emVvZihORVRfSU5UKSk7CiAgICBvZmZzZXQgKz0gc2l6ZW9mKE5FVF9JTlQpOwogICAgZGF0YXR5
cGUgPShTcFBhcm1TZXREYXRhVHlwZSkoaW50KSBuZXRpbnQ7CiAgICBicmVhazsKICBjYXNlIFBB
Q0tfTkFUSVZFOgogICAgbWVtY3B5KChjaGFyKikmbm9ybWludCwgYnVmZitvZmZzZXQsIHNpemVv
ZihpbnQpKTsKICAgIG9mZnNldCArPSBzaXplb2YoaW50KTsKICAgIGRhdGF0eXBlID0oU3BQYXJt
U2V0RGF0YVR5cGUpIG5vcm1pbnQ7CiAgICBicmVhazsKICBjYXNlIFBBQ0tfWERSOgoKICAgIHhk
cl9lbnVtKHhkckhhbmRsZSwoaW50KikmZGF0YXR5cGUpOwoKICAgIGJyZWFrOwogIH0KCiAgc3dp
dGNoKGRhdGF0eXBlKSB7CiAgY2FzZSBJTlRfREFUQToKICAgIHJldHVybiBuZXcgU3BQYXJtU2V0
SW50RGF0YShwYWNrLCBidWZmLCBvZmZzZXQsIHhkckhhbmRsZSk7CiAgY2FzZSBGTE9BVF9EQVRB
OgogICAgcmV0dXJuIG5ldyBTcFBhcm1TZXRGbG9hdERhdGEocGFjaywgYnVmZiwgb2Zmc2V0LCB4
ZHJIYW5kbGUpOwogIGNhc2UgRE9VQkxFX0RBVEE6CiAgICByZXR1cm4gbmV3IFNwUGFybVNldERv
dWJsZURhdGEocGFjaywgYnVmZiwgb2Zmc2V0LCB4ZHJIYW5kbGUpOwogIGNhc2UgU1RSSU5HX0RB
VEE6CiAgICByZXR1cm4gbmV3IFNwUGFybVNldFN0cmluZ0RhdGEocGFjaywgYnVmZiwgb2Zmc2V0
LCB4ZHJIYW5kbGUpOwogIGNhc2UgQlVGRkVSX0RBVEE6CiAgICByZXR1cm4gbmV3IFNwUGFybVNl
dEJ1ZmZlckRhdGEocGFjaywgYnVmZiwgb2Zmc2V0LCB4ZHJIYW5kbGUpOwogIGNhc2UgTk9ORV9E
QVRBOgogICAgYnJlYWs7CiAgfQoKICByZXR1cm4gX19udWxsOwp9CgoKClNwUGFybVNldEludERh
dGE6OlNwUGFybVNldEludERhdGEoU3BQYXJtU2V0UGFja01ldGhvZCBwYWNrLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBidWZmLCBpbnQmIG9mZnNldCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWERSKiB4ZHJIYW5kbGUpIHsKCgoKCiAgTkVU
X0lOVCBuZXRpbnQ7CiAgaW50IG5vcm1pbnQ7CgogIHN3aXRjaChwYWNrKSB7CiAgY2FzZSBQQUNL
X05FVF9UWVBFUzoKICAgIG1lbWNweSgoY2hhciopJm5ldGludCwgYnVmZitvZmZzZXQsIHNpemVv
ZihORVRfSU5UKSk7CiAgICBvZmZzZXQgKz0gc2l6ZW9mKE5FVF9JTlQpOwogICAgVmFsdWUgPSBu
ZXRpbnQ7CiAgICBicmVhazsKICBjYXNlIFBBQ0tfTkFUSVZFOgogICAgbWVtY3B5KChjaGFyKikm
bm9ybWludCwgYnVmZitvZmZzZXQsIHNpemVvZihpbnQpKTsKICAgIG9mZnNldCArPSBzaXplb2Yo
aW50KTsKICAgIFZhbHVlID0gbm9ybWludDsKICAgIGJyZWFrOwogIGNhc2UgUEFDS19YRFI6Cgog
ICAgeGRyX2ludCh4ZHJIYW5kbGUsICZWYWx1ZSk7CgogICAgYnJlYWs7CiAgfQp9CgppbnQKU3BQ
YXJtU2V0SW50RGF0YTo6R2V0UGFja0xlbmd0aChTcFBhcm1TZXRQYWNrTWV0aG9kIHBhY2spIHsK
ICBzd2l0Y2gocGFjaykgewogIGNhc2UgUEFDS19ORVRfVFlQRVM6CiAgICByZXR1cm4gc2l6ZW9m
KE5FVF9JTlQpICogMjsKICBjYXNlIFBBQ0tfTkFUSVZFOgogICAgcmV0dXJuIHNpemVvZihpbnQp
ICogMjsKICBjYXNlIFBBQ0tfWERSOgogICAgcmV0dXJuIHNpemVvZihpbnQpICogMjsKICB9CiAg
cmV0dXJuIDA7Cn0KCnZvaWQKU3BQYXJtU2V0SW50RGF0YTo6UGFja0J1ZmZlcihTcFBhcm1TZXRQ
YWNrTWV0aG9kIHBhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGJ1ZmYs
IGludCYgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRFIqIHhkckhhbmRs
ZSkgewoKCgoKCiAgTkVUX0lOVCBuZXRpbnQ7CiAgaW50IG5vcm1pbnQ7CgogIHN3aXRjaChwYWNr
KSB7CiAgY2FzZSBQQUNLX05FVF9UWVBFUzoKICAgIG5ldGludCA9KGludCkgSU5UX0RBVEE7CiAg
ICBtZW1jcHkoYnVmZitvZmZzZXQsKGNoYXIqKSZuZXRpbnQsIHNpemVvZihORVRfSU5UKSk7CiAg
ICBvZmZzZXQgKz0gc2l6ZW9mKE5FVF9JTlQpOwogICAgbmV0aW50ID0gVmFsdWU7CiAgICBtZW1j
cHkoYnVmZitvZmZzZXQsKGNoYXIqKSZuZXRpbnQsIHNpemVvZihORVRfSU5UKSk7CiAgICBvZmZz
ZXQgKz0gc2l6ZW9mKE5FVF9JTlQpOwogICAgYnJlYWs7CiAgY2FzZSBQQUNLX05BVElWRToKICAg
IG5vcm1pbnQgPShpbnQpIElOVF9EQVRBOwogICAgbWVtY3B5KGJ1ZmYrb2Zmc2V0LChjaGFyKikm
bm9ybWludCwgc2l6ZW9mKGludCkpOwogICAgb2Zmc2V0ICs9IHNpemVvZihpbnQpOwogICAgbWVt
Y3B5KGJ1ZmYrb2Zmc2V0LChjaGFyKikmVmFsdWUsIHNpemVvZihpbnQpKTsKICAgIG9mZnNldCAr
PSBzaXplb2YoaW50KTsKICAgIGJyZWFrOwogIGNhc2UgUEFDS19YRFI6CgogICAgbm9ybWludCA9
KGludCkgSU5UX0RBVEE7CiAgICB4ZHJfZW51bSh4ZHJIYW5kbGUsICZub3JtaW50KTsKICAgIHhk
cl9pbnQoeGRySGFuZGxlLCAmVmFsdWUpOwoKICAgIGJyZWFrOwogIH0KfQoKU3BQYXJtU2V0Rmxv
YXREYXRhOjpTcFBhcm1TZXRGbG9hdERhdGEoU3BQYXJtU2V0UGFja01ldGhvZCBwYWNrLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogYnVmZiwgaW50JiBvZmZz
ZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRFIqIHhkckhhbmRs
ZSkgewoKCgoKICBORVRfRE9VQkxFIG5ldGRvdWJsZTsKICBmbG9hdCBub3JtZmxvYXQ7CgogIHN3
aXRjaChwYWNrKSB7CiAgY2FzZSBQQUNLX05FVF9UWVBFUzoKICAgIG1lbWNweSgoY2hhciopJm5l
dGRvdWJsZSwgYnVmZitvZmZzZXQsIHNpemVvZihORVRfRE9VQkxFKSk7CiAgICBvZmZzZXQgKz0g
c2l6ZW9mKE5FVF9ET1VCTEUpOwogICAgVmFsdWUgPShmbG9hdCkgbmV0ZG91YmxlOwogICAgYnJl
YWs7CiAgY2FzZSBQQUNLX05BVElWRToKICAgIG1lbWNweSgoY2hhciopJm5vcm1mbG9hdCwgYnVm
ZitvZmZzZXQsIHNpemVvZihpbnQpKTsKICAgIG9mZnNldCArPSBzaXplb2YoZmxvYXQpOwogICAg
VmFsdWUgPSBub3JtZmxvYXQ7CiAgICBicmVhazsKICBjYXNlIFBBQ0tfWERSOgoKICAgIHhkcl9m
bG9hdCh4ZHJIYW5kbGUsICZWYWx1ZSk7CgogICAgYnJlYWs7CiAgfQp9CgppbnQKU3BQYXJtU2V0
RmxvYXREYXRhOjpHZXRQYWNrTGVuZ3RoKFNwUGFybVNldFBhY2tNZXRob2QgcGFjaykgewogIHN3
aXRjaChwYWNrKSB7CiAgY2FzZSBQQUNLX05FVF9UWVBFUzoKICAgIHJldHVybiBzaXplb2YoTkVU
X0lOVCkgKyBzaXplb2YoTkVUX0RPVUJMRSk7CiAgY2FzZSBQQUNLX05BVElWRToKICAgIHJldHVy
biBzaXplb2YoaW50KSArIHNpemVvZihmbG9hdCk7CiAgY2FzZSBQQUNLX1hEUjoKICAgIHJldHVy
biBzaXplb2YoaW50KSArIHNpemVvZihmbG9hdCk7CiAgfQogIHJldHVybiAwOwp9Cgp2b2lkClNw
UGFybVNldEZsb2F0RGF0YTo6UGFja0J1ZmZlcihTcFBhcm1TZXRQYWNrTWV0aG9kIHBhY2ssCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogYnVmZiwgaW50JiBvZmZzZXQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWERSKiB4ZHJIYW5kbGUpIHsKCgoKCgogIE5F
VF9JTlQgbmV0ZGF0YTsKICBpbnQgbm9ybWRhdGE7CiAgTkVUX0RPVUJMRSBuZXRkb3VibGU7Cgog
IHN3aXRjaChwYWNrKSB7CiAgY2FzZSBQQUNLX05FVF9UWVBFUzoKICAgIG5ldGRhdGEgPShpbnQp
IEZMT0FUX0RBVEE7CiAgICBtZW1jcHkoYnVmZitvZmZzZXQsKGNoYXIqKSZuZXRkYXRhLCBzaXpl
b2YoTkVUX0lOVCkpOwogICAgb2Zmc2V0ICs9IHNpemVvZihORVRfSU5UKTsKICAgIG5ldGRvdWJs
ZSA9IFZhbHVlOwogICAgbWVtY3B5KGJ1ZmYrb2Zmc2V0LChjaGFyKikmbmV0ZG91YmxlLCBzaXpl
b2YoTkVUX0RPVUJMRSkpOwogICAgb2Zmc2V0ICs9IHNpemVvZihORVRfRE9VQkxFKTsKICAgIGJy
ZWFrOwogIGNhc2UgUEFDS19OQVRJVkU6CiAgICBub3JtZGF0YSA9KGludCkgRkxPQVRfREFUQTsK
ICAgIG1lbWNweShidWZmK29mZnNldCwoY2hhciopJm5vcm1kYXRhLCBzaXplb2YoaW50KSk7CiAg
ICBvZmZzZXQgKz0gc2l6ZW9mKGludCk7CiAgICBtZW1jcHkoYnVmZitvZmZzZXQsKGNoYXIqKSZW
YWx1ZSwgc2l6ZW9mKGZsb2F0KSk7CiAgICBvZmZzZXQgKz0gc2l6ZW9mKGZsb2F0KTsKICAgIGJy
ZWFrOwogIGNhc2UgUEFDS19YRFI6CgogICAgbm9ybWRhdGEgPShpbnQpIEZMT0FUX0RBVEE7CiAg
ICB4ZHJfZW51bSh4ZHJIYW5kbGUsKGludCopJm5vcm1kYXRhKTsKICAgIHhkcl9mbG9hdCh4ZHJI
YW5kbGUsICZWYWx1ZSk7CgogICAgYnJlYWs7CiAgfQp9CgpTcFBhcm1TZXREb3VibGVEYXRhOjpT
cFBhcm1TZXREb3VibGVEYXRhKFNwUGFybVNldFBhY2tNZXRob2QgcGFjaywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogYnVmZiwgaW50JiBvZmZzZXQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhEUiogeGRySGFuZGxlKSB7
CgoKCgogIE5FVF9ET1VCTEUgbmV0ZG91YmxlOwogIGRvdWJsZSBub3JtZG91YmxlOwoKICBzd2l0
Y2gocGFjaykgewogIGNhc2UgUEFDS19ORVRfVFlQRVM6CiAgICBtZW1jcHkoKGNoYXIqKSZuZXRk
b3VibGUsIGJ1ZmYrb2Zmc2V0LCBzaXplb2YoTkVUX0RPVUJMRSkpOwogICAgb2Zmc2V0ICs9IHNp
emVvZihORVRfRE9VQkxFKTsKICAgIFZhbHVlID0gbmV0ZG91YmxlOwogICAgYnJlYWs7CiAgY2Fz
ZSBQQUNLX05BVElWRToKICAgIG1lbWNweSgoY2hhciopJm5vcm1kb3VibGUsIGJ1ZmYrb2Zmc2V0
LCBzaXplb2YoZG91YmxlKSk7CiAgICBvZmZzZXQgKz0gc2l6ZW9mKGRvdWJsZSk7CiAgICBWYWx1
ZSA9IG5vcm1kb3VibGU7CiAgICBicmVhazsKICBjYXNlIFBBQ0tfWERSOgoKICAgIHhkcl9kb3Vi
bGUoeGRySGFuZGxlLCAmVmFsdWUpOwoKICAgIGJyZWFrOwogIH0KfQoKaW50ClNwUGFybVNldERv
dWJsZURhdGE6OkdldFBhY2tMZW5ndGgoU3BQYXJtU2V0UGFja01ldGhvZCBwYWNrKSB7CiAgc3dp
dGNoKHBhY2spIHsKICBjYXNlIFBBQ0tfTkVUX1RZUEVTOgogICAgcmV0dXJuIHNpemVvZihORVRf
SU5UKSArIHNpemVvZihORVRfRE9VQkxFKTsKICBjYXNlIFBBQ0tfTkFUSVZFOgogICAgcmV0dXJu
IHNpemVvZihpbnQpICsgc2l6ZW9mKGRvdWJsZSk7CiAgY2FzZSBQQUNLX1hEUjoKICAgIHJldHVy
biBzaXplb2YoaW50KSArIHNpemVvZihkb3VibGUpOwogIH0KICByZXR1cm4gMDsKfQoKdm9pZApT
cFBhcm1TZXREb3VibGVEYXRhOjpQYWNrQnVmZmVyKFNwUGFybVNldFBhY2tNZXRob2QgcGFjaywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogYnVmZiwgaW50JiBvZmZzZXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhEUiogeGRySGFuZGxlKSB7CgoKCgoK
ICBORVRfSU5UIG5ldGRhdGE7CiAgaW50IGludGRhdGE7CiAgTkVUX0RPVUJMRSBuZXRkb3VibGU7
CgogIHN3aXRjaChwYWNrKSB7CiAgY2FzZSBQQUNLX05FVF9UWVBFUzoKICAgIG5ldGRhdGEgPShp
bnQpIERPVUJMRV9EQVRBOwogICAgbWVtY3B5KGJ1ZmYrb2Zmc2V0LChjaGFyKikmbmV0ZGF0YSwg
c2l6ZW9mKE5FVF9JTlQpKTsKICAgIG9mZnNldCArPSBzaXplb2YoTkVUX0lOVCk7CiAgICBuZXRk
b3VibGUgPSBWYWx1ZTsKICAgIG1lbWNweShidWZmK29mZnNldCwoY2hhciopJm5ldGRvdWJsZSwg
c2l6ZW9mKE5FVF9ET1VCTEUpKTsKICAgIG9mZnNldCArPSBzaXplb2YoTkVUX0RPVUJMRSk7CiAg
ICBicmVhazsKICBjYXNlIFBBQ0tfTkFUSVZFOgogICAgaW50ZGF0YSA9KGludCkgRE9VQkxFX0RB
VEE7CiAgICBtZW1jcHkoYnVmZitvZmZzZXQsKGNoYXIqKSZpbnRkYXRhLCBzaXplb2YoaW50KSk7
CiAgICBvZmZzZXQgKz0gc2l6ZW9mKGludCk7CiAgICBtZW1jcHkoYnVmZitvZmZzZXQsKGNoYXIq
KSZWYWx1ZSwgc2l6ZW9mKGRvdWJsZSkpOwogICAgb2Zmc2V0ICs9IHNpemVvZihkb3VibGUpOwog
ICAgYnJlYWs7CiAgY2FzZSBQQUNLX1hEUjoKCiAgICBpbnRkYXRhID0oaW50KSBET1VCTEVfREFU
QTsKICAgIHhkcl9lbnVtKHhkckhhbmRsZSwoaW50KikmaW50ZGF0YSk7CiAgICB4ZHJfZG91Ymxl
KHhkckhhbmRsZSwgJlZhbHVlKTsKCiAgICBicmVhazsKICB9Cn0KClNwUGFybVNldFN0cmluZ0Rh
dGE6OlNwUGFybVNldFN0cmluZ0RhdGEoU3BQYXJtU2V0UGFja01ldGhvZCBwYWNrLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBidWZmLCBpbnQmIG9mZnNl
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWERSKiB4ZHJIYW5k
bGUpIHsKCgoKCiAgaW50IHN0cmxlbmd0aCA9IHN0cmxlbihidWZmK29mZnNldCkrMTsKCiAgc3dp
dGNoKHBhY2spIHsKICBjYXNlIFBBQ0tfTkVUX1RZUEVTOgogICAgVmFsdWUgPSBuZXcgY2hhcltz
dHJsZW5ndGhdOwogICAgc3RyY3B5KFZhbHVlLCBidWZmK29mZnNldCk7CiAgICBvZmZzZXQgKz0g
c3RybGVuZ3RoOwogICAgYnJlYWs7CiAgY2FzZSBQQUNLX05BVElWRToKICAgIFZhbHVlID0gbmV3
IGNoYXJbc3RybGVuZ3RoXTsKICAgIHN0cmNweShWYWx1ZSwgYnVmZitvZmZzZXQpOwogICAgb2Zm
c2V0ICs9IHN0cmxlbmd0aDsKICAgIGJyZWFrOwogIGNhc2UgUEFDS19YRFI6CgogICAgeGRyX2lu
dCh4ZHJIYW5kbGUsICZzdHJsZW5ndGgpOwogICAgVmFsdWUgPSBuZXcgY2hhcltzdHJsZW5ndGhd
OwogICAgeGRyX3N0cmluZyh4ZHJIYW5kbGUsICZWYWx1ZSwgc3RybGVuZ3RoKTsKCiAgICBicmVh
azsKICB9Cn0KClNwUGFybVNldFN0cmluZ0RhdGE6OlNwUGFybVNldFN0cmluZ0RhdGEoY2hhciog
dmFsKSB7CiAgVmFsdWUgPSBuZXcgY2hhcltzdHJsZW4odmFsKSArIDFdOwogIHN0cmNweShWYWx1
ZSwgdmFsKTsKfQoKdm9pZCBTcFBhcm1TZXRTdHJpbmdEYXRhOjpTZXRTdHJpbmcoY2hhciogdmFs
KSB7CiAgaWYgKHN0cmxlbih2YWwpID4gc3RybGVuKFZhbHVlKSkgewogICAgZGVsZXRlIFtdIFZh
bHVlOwogICAgVmFsdWUgPSBuZXcgY2hhcltzdHJsZW4odmFsKSsxXTsKICB9CiAgc3RyY3B5KFZh
bHVlLCB2YWwpOwp9CgpjaGFyKiBTcFBhcm1TZXRTdHJpbmdEYXRhOjpHZXRCdWZmZXIoaW50Jgog
ICAgc2l6ZV9yZW5hbWVkX3NvX2l0X2RvZXNfbm90X2hpZGVfbWVtYmVyKSB7CiAgc2l6ZV9yZW5h
bWVkX3NvX2l0X2RvZXNfbm90X2hpZGVfbWVtYmVyID0gc3RybGVuKFZhbHVlKSArIDE7CiAgcmV0
dXJuIFZhbHVlOwp9CgoKCmludApTcFBhcm1TZXRTdHJpbmdEYXRhOjpHZXRQYWNrTGVuZ3RoKFNw
UGFybVNldFBhY2tNZXRob2QgcGFjaykgewogIGludCBzdHJsZW5ndGggPSBzdHJsZW4oVmFsdWUp
KzE7CiAgc3dpdGNoKHBhY2spIHsKICBjYXNlIFBBQ0tfTkVUX1RZUEVTOgogICAgcmV0dXJuIHNp
emVvZihORVRfSU5UKSArIHN0cmxlbmd0aDsKICBjYXNlIFBBQ0tfTkFUSVZFOgogICAgcmV0dXJu
IHNpemVvZihpbnQpICsgc3RybGVuZ3RoOwogIGNhc2UgUEFDS19YRFI6CgogICAgcmV0dXJuIHNp
emVvZihpbnQpICogMiArIHN0cmxlbmd0aDsKCgoKICB9CiAgcmV0dXJuIDA7Cn0KCnZvaWQKU3BQ
YXJtU2V0U3RyaW5nRGF0YTo6UGFja0J1ZmZlcihTcFBhcm1TZXRQYWNrTWV0aG9kIHBhY2ssCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGJ1ZmYsIGludCYgb2Zmc2V0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRFIqIHhkckhhbmRsZSkgewoKCgoKCiAg
TkVUX0lOVCBuZXRkYXRhOwogIGludCBpbnRkYXRhOwogIGludCBzdHJsZW5ndGggPSBzdHJsZW4o
VmFsdWUpKzE7CgogIHN3aXRjaChwYWNrKSB7CiAgY2FzZSBQQUNLX05FVF9UWVBFUzoKICAgIG5l
dGRhdGEgPShpbnQpIFNUUklOR19EQVRBOwogICAgbWVtY3B5KGJ1ZmYrb2Zmc2V0LChjaGFyKikm
bmV0ZGF0YSwgc2l6ZW9mKE5FVF9JTlQpKTsKICAgIG9mZnNldCArPSBzaXplb2YoTkVUX0lOVCk7
CiAgICBtZW1jcHkoYnVmZitvZmZzZXQsIFZhbHVlLCBzdHJsZW5ndGgpOwogICAgb2Zmc2V0ICs9
IHN0cmxlbmd0aDsKICAgIGJyZWFrOwogIGNhc2UgUEFDS19OQVRJVkU6CiAgICBpbnRkYXRhID0o
aW50KSBTVFJJTkdfREFUQTsKICAgIG1lbWNweShidWZmK29mZnNldCwoY2hhciopJmludGRhdGEs
IHNpemVvZihpbnQpKTsKICAgIG9mZnNldCArPSBzaXplb2YoaW50KTsKICAgIG1lbWNweShidWZm
K29mZnNldCwgVmFsdWUsIHN0cmxlbmd0aCk7CiAgICBvZmZzZXQgKz0gc3RybGVuZ3RoOwogICAg
YnJlYWs7CiAgY2FzZSBQQUNLX1hEUjoKCiAgICBpbnRkYXRhID0oaW50KSBTVFJJTkdfREFUQTsK
ICAgIHhkcl9lbnVtKHhkckhhbmRsZSwoaW50KikmaW50ZGF0YSk7CiAgICB4ZHJfaW50KHhkckhh
bmRsZSwgJnN0cmxlbmd0aCk7CiAgICB4ZHJfc3RyaW5nKHhkckhhbmRsZSwgJlZhbHVlLCBzdHJs
ZW5ndGgpOwoKICAgIGJyZWFrOwogIH0KfQoKU3BQYXJtU2V0QnVmZmVyRGF0YTo6U3BQYXJtU2V0
QnVmZmVyRGF0YSgKICAgIGNoYXIqIGJ1ZmYsCiAgICBpbnQgc2l6ZV9yZW5hbWVkX3NvX2l0X2Rv
ZXNfbm90X2hpZGVfbWVtYmVyKSB7CiAgU2l6ZSA9IHNpemVfcmVuYW1lZF9zb19pdF9kb2VzX25v
dF9oaWRlX21lbWJlcjsKICBWYWx1ZSA9IG5ldyBjaGFyW1NpemVdOwogIG1lbWNweShWYWx1ZSwg
YnVmZiwgU2l6ZSk7Cn0KCgoKU3BQYXJtU2V0QnVmZmVyRGF0YTo6U3BQYXJtU2V0QnVmZmVyRGF0
YShTcFBhcm1TZXRQYWNrTWV0aG9kIHBhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIqIGJ1ZmYsIGludCYgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBYRFIqIHhkckhhbmRsZSkgewoKCgoKICBORVRfSU5UIG5l
dGludDsKICBpbnQgbm9ybWludDsKCiAgc3dpdGNoKHBhY2spIHsKICBjYXNlIFBBQ0tfTkVUX1RZ
UEVTOgogICAgbWVtY3B5KChjaGFyKikmbmV0aW50LCBidWZmK29mZnNldCwgc2l6ZW9mKE5FVF9J
TlQpKTsKICAgIG9mZnNldCArPSBzaXplb2YoTkVUX0lOVCk7CiAgICBTaXplID0gbmV0aW50Owog
ICAgVmFsdWUgPSBuZXcgY2hhcltTaXplXTsKICAgIG1lbWNweShWYWx1ZSwgYnVmZitvZmZzZXQs
IFNpemUpOwogICAgb2Zmc2V0ICs9IFNpemU7CiAgICBicmVhazsKICBjYXNlIFBBQ0tfTkFUSVZF
OgogICAgbWVtY3B5KChjaGFyKikmbm9ybWludCwgYnVmZitvZmZzZXQsIHNpemVvZihpbnQpKTsK
ICAgIG9mZnNldCArPSBzaXplb2YoaW50KTsKICAgIFNpemUgPSBub3JtaW50OwogICAgVmFsdWUg
PSBuZXcgY2hhcltTaXplXTsKICAgIG1lbWNweShWYWx1ZSwgYnVmZitvZmZzZXQsIFNpemUpOwog
ICAgb2Zmc2V0ICs9IFNpemU7CiAgICBicmVhazsKICBjYXNlIFBBQ0tfWERSOgoKICAgIHhkcl91
X2ludCh4ZHJIYW5kbGUsICZTaXplKTsKICAgIFZhbHVlID0gbmV3IGNoYXJbU2l6ZV07CiAgICB4
ZHJfYnl0ZXMoeGRySGFuZGxlLCAmVmFsdWUsICZTaXplLCBTaXplKTsKCiAgICBicmVhazsKICB9
Cn0KCmludApTcFBhcm1TZXRCdWZmZXJEYXRhOjpHZXRQYWNrTGVuZ3RoKFNwUGFybVNldFBhY2tN
ZXRob2QgcGFjaykgewogIHN3aXRjaChwYWNrKSB7CiAgY2FzZSBQQUNLX05FVF9UWVBFUzoKICAg
IHJldHVybiBzaXplb2YoTkVUX0lOVCkgKiAyICsgU2l6ZTsKICBjYXNlIFBBQ0tfTkFUSVZFOgog
ICAgcmV0dXJuIHNpemVvZihpbnQpICogMiArIFNpemU7CiAgY2FzZSBQQUNLX1hEUjoKCiAgICBy
ZXR1cm4gc2l6ZW9mKGludCkgKiAyICsgU2l6ZTsKCgoKICB9CiAgcmV0dXJuIDA7Cn0KCnZvaWQK
U3BQYXJtU2V0QnVmZmVyRGF0YTo6UGFja0J1ZmZlcihTcFBhcm1TZXRQYWNrTWV0aG9kIHBhY2ss
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGJ1ZmYsIGludCYgb2Zmc2V0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRFIqIHhkckhhbmRsZSkgewoKCgoK
CiAgTkVUX0lOVCBuZXRpbnQ7CiAgaW50IG5vcm1pbnQ7CgogIHN3aXRjaChwYWNrKSB7CiAgY2Fz
ZSBQQUNLX05FVF9UWVBFUzoKICAgIG5ldGludCA9KGludCkgQlVGRkVSX0RBVEE7CiAgICBtZW1j
cHkoYnVmZitvZmZzZXQsKGNoYXIqKSZuZXRpbnQsIHNpemVvZihORVRfSU5UKSk7CiAgICBvZmZz
ZXQgKz0gc2l6ZW9mKE5FVF9JTlQpOwogICAgbmV0aW50ID0gU2l6ZTsKICAgIG1lbWNweShidWZm
K29mZnNldCwoY2hhciopJm5ldGludCwgc2l6ZW9mKE5FVF9JTlQpKTsKICAgIG9mZnNldCArPSBz
aXplb2YoTkVUX0lOVCk7CiAgICBtZW1jcHkoYnVmZitvZmZzZXQsIFZhbHVlLCBTaXplKTsKICAg
IG9mZnNldCArPSBTaXplOwogICAgYnJlYWs7CiAgY2FzZSBQQUNLX05BVElWRToKICAgIG5vcm1p
bnQgPShpbnQpIEJVRkZFUl9EQVRBOwogICAgbWVtY3B5KGJ1ZmYrb2Zmc2V0LChjaGFyKikmbm9y
bWludCwgc2l6ZW9mKGludCkpOwogICAgb2Zmc2V0ICs9IHNpemVvZihpbnQpOwogICAgbWVtY3B5
KGJ1ZmYrb2Zmc2V0LChjaGFyKikmU2l6ZSwgc2l6ZW9mKGludCkpOwogICAgb2Zmc2V0ICs9IHNp
emVvZihpbnQpOwogICAgbWVtY3B5KGJ1ZmYrb2Zmc2V0LCBWYWx1ZSwgU2l6ZSk7CiAgICBvZmZz
ZXQgKz0gU2l6ZTsKICAgIGJyZWFrOwogIGNhc2UgUEFDS19YRFI6CgogICAgbm9ybWludCA9KGlu
dCkgQlVGRkVSX0RBVEE7CiAgICB4ZHJfZW51bSh4ZHJIYW5kbGUsKGludCopJm5vcm1pbnQpOwog
ICAgeGRyX3VfaW50KHhkckhhbmRsZSwgJlNpemUpOwogICAgeGRyX2J5dGVzKHhkckhhbmRsZSwg
JlZhbHVlLCAmU2l6ZSwgU2l6ZSk7CgogICAgYnJlYWs7CiAgfQp9Cgp2b2lkIFNwUGFybVNldElu
dERhdGE6OlNldFN0cmluZyhjaGFyKikgewogIGNlcnIgPDwgIkNhbm5vdCBhc3NpZ24gc3RyaW5n
IHRvIGludCBkYXRhLlxuIjsKfQoKdm9pZCBTcFBhcm1TZXRJbnREYXRhOjpTZXRCdWZmZXIoY2hh
ciosIGludCkgewogIGNlcnIgPDwgIkNhbm5vdCBhc3NpZ24gYnVmZmVyIHRvIGludCBkYXRhLlxu
IjsKfQoKY2hhciogU3BQYXJtU2V0SW50RGF0YTo6R2V0U3RyaW5nKCkgewogIG9zdHJzdHJlYW0g
b3MocmV0LCBzaXplKTsKICBvcyA8PCBWYWx1ZSA8PCBlbmRzOwogIHJldHVybiBvcy5zdHIoKTsK
fQoKCnZvaWQgU3BQYXJtU2V0RmxvYXREYXRhOjpTZXRTdHJpbmcoY2hhciopIHsKICAgIGNlcnIg
PDwgIkNhbm5vdCBhc3NpZ24gc3RyaW5nIHRvIGZsb2F0IGRhdGEuXG4iOwp9Cgp2b2lkIFNwUGFy
bVNldEZsb2F0RGF0YTo6U2V0QnVmZmVyKGNoYXIqLCBpbnQpIHsKICBjZXJyIDw8ICJDYW5ub3Qg
YXNzaWduIGJ1ZmZlciB0byBmbG9hdCBkYXRhLlxuIjsKfQoKY2hhciogU3BQYXJtU2V0RmxvYXRE
YXRhOjpHZXRTdHJpbmcoKSB7CiAgb3N0cnN0cmVhbSBvcyhyZXQsIHNpemUpOwogIG9zIDw8IFZh
bHVlIDw8IGVuZHM7CiAgcmV0dXJuIG9zLnN0cigpOwp9Cgp2b2lkIFNwUGFybVNldERvdWJsZURh
dGE6OlNldFN0cmluZyhjaGFyKikgewogIGNlcnIgPDwgIkNhbm5vdCBhc3NpZ24gc3RyaW5nIHRv
IGRvdWJsZSBkYXRhLlxuIjsKfQp2b2lkIFNwUGFybVNldERvdWJsZURhdGE6OlNldEJ1ZmZlcihj
aGFyKiwgaW50KSB7CiAgY2VyciA8PCAiQ2Fubm90IGFzc2lnbiBidWZmZXIgdG8gZG91YmxlIGRh
dGEuXG4iOwp9CmNoYXIqIFNwUGFybVNldERvdWJsZURhdGE6OkdldFN0cmluZygpIHsKICAgIG9z
dHJzdHJlYW0gb3MocmV0LCBzaXplKTsKICAgIG9zIDw8IFZhbHVlIDw8IGVuZHM7CiAgICByZXR1
cm4gb3Muc3RyKCk7CiAgfQoKCnZvaWQgU3BQYXJtU2V0U3RyaW5nRGF0YTo6U2V0SW50KGludCkg
ewogIGNlcnIgPDwgIkNhbm5vdCBhc3NpZ24gaW50IHRvIHN0cmluZyBkYXRhLlxuIjsKfQp2b2lk
IFNwUGFybVNldFN0cmluZ0RhdGE6OlNldEZsb2F0KGZsb2F0KSB7CiAgY2VyciA8PCAiQ2Fubm90
IGFzc2lnbiBmbG9hdCB0byBzdHJpbmcgZGF0YS5cbiI7Cn0Kdm9pZCBTcFBhcm1TZXRTdHJpbmdE
YXRhOjpTZXREb3VibGUoZG91YmxlKSB7CiAgY2VyciA8PCAiQ2Fubm90IGFzc2lnbiBkb3VibGUg
dG8gc3RyaW5nIGRhdGEuXG4iOwp9CnZvaWQgU3BQYXJtU2V0U3RyaW5nRGF0YTo6U2V0QnVmZmVy
KGNoYXIqLCBpbnQpIHsKICBjZXJyIDw8ICJDYW5ub3QgYXNzaWduIGJ1ZmZlciB0byBzdHJpbmcg
ZGF0YS5cbiI7Cn0KaW50IFNwUGFybVNldFN0cmluZ0RhdGE6OkdldEludCgpIHsKICBjZXJyIDw8
ICJDYW5ub3QgcmV0dXJuIHN0cmluZyBkYXRhIGFzIGludC5cbiI7IHJldHVybiAwOwp9CmZsb2F0
IFNwUGFybVNldFN0cmluZ0RhdGE6OkdldEZsb2F0KCkgewogIGNlcnIgPDwgIkNhbm5vdCByZXR1
cm4gc3RyaW5nIGRhdGEgYXMgZmxvYXQuXG4iOyByZXR1cm4gMDsKfQpkb3VibGUgU3BQYXJtU2V0
U3RyaW5nRGF0YTo6R2V0RG91YmxlKCkgewogIGNlcnIgPDwgIkNhbm5vdCByZXR1cm4gc3RyaW5n
IGRhdGEgYXMgZG91YmxlLlxuIjsgcmV0dXJuIDA7Cn0KCgp2b2lkIFNwUGFybVNldEJ1ZmZlckRh
dGE6OlNldEludChpbnQpIHsKICBjZXJyIDw8ICJDYW5ub3QgYXNzaWduIGludCB0byBidWZmZXIg
ZGF0YS5cbiI7Cn0Kdm9pZCBTcFBhcm1TZXRCdWZmZXJEYXRhOjpTZXRGbG9hdChmbG9hdCkgewog
IGNlcnIgPDwgIkNhbm5vdCBhc3NpZ24gZmxvYXQgdG8gYnVmZmVyIGRhdGEuXG4iOwp9CnZvaWQg
U3BQYXJtU2V0QnVmZmVyRGF0YTo6U2V0RG91YmxlKGRvdWJsZSkgewogIGNlcnIgPDwgIkNhbm5v
dCBhc3NpZ24gZG91YmxlIHRvIGJ1ZmZlciBkYXRhLlxuIjsKfQp2b2lkIFNwUGFybVNldEJ1ZmZl
ckRhdGE6OlNldFN0cmluZyhjaGFyKikgewogIGNlcnIgPDwgIkNhbm5vdCBhc3NpZ24gc3RyaW5n
IHRvIGJ1ZmZlciBkYXRhLlxuIjsKfQoKdm9pZCBTcFBhcm1TZXRCdWZmZXJEYXRhOjpTZXRCdWZm
ZXIoCiAgICBjaGFyKiB2YWwsCiAgICBpbnQgc2l6ZV9yZW5hbWVkX3NvX2l0X2RvZXNfbm90X2hp
ZGVfbWVtYmVyKSB7CiAgaWYgKCh1X2ludClzaXplX3JlbmFtZWRfc29faXRfZG9lc19ub3RfaGlk
ZV9tZW1iZXIgPiBTaXplKSB7CiAgICBkZWxldGUgW10gVmFsdWU7CiAgICBWYWx1ZSA9IG5ldyBj
aGFyW3NpemVfcmVuYW1lZF9zb19pdF9kb2VzX25vdF9oaWRlX21lbWJlcl07CiAgfQogIFNpemUg
PSBzaXplX3JlbmFtZWRfc29faXRfZG9lc19ub3RfaGlkZV9tZW1iZXI7CiAgbWVtY3B5KFZhbHVl
LCB2YWwsIFNpemUpOwp9CgoKaW50IFNwUGFybVNldEJ1ZmZlckRhdGE6OkdldEludCgpIHsKICBj
ZXJyIDw8ICJDYW5ub3QgcmV0dXJuIGJ1ZmZlciBkYXRhIGFzIGludC5cbiI7IHJldHVybiAwOwp9
CmZsb2F0IFNwUGFybVNldEJ1ZmZlckRhdGE6OkdldEZsb2F0KCkgewogIGNlcnIgPDwgIkNhbm5v
dCByZXR1cm4gYnVmZmVyIGRhdGEgYXMgZmxvYXQuXG4iOyByZXR1cm4gMDsKfQpkb3VibGUgU3BQ
YXJtU2V0QnVmZmVyRGF0YTo6R2V0RG91YmxlKCkgewogIGNlcnIgPDwgIkNhbm5vdCByZXR1cm4g
YnVmZmVyIGRhdGEgYXMgZG91YmxlLlxuIjsgcmV0dXJuIDA7Cn0K


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

end of thread, other threads:[~2002-11-14 10:36 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-11-20 12:42 c++/8564: internal compiler error in find_function_data, at function.c:329 with g++ 3.2 reichelt
  -- strict thread matches above, loose matches on Subject: below --
2002-11-20 13:56 Volker Reichelt
2002-11-20  1:26 ron

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