public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c/6964: Internal compiler error using -O2 but ok using -O0
@ 2002-10-23  6:12 reichelt
  0 siblings, 0 replies; 4+ messages in thread
From: reichelt @ 2002-10-23  6:12 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, jari, nobody

Synopsis: Internal compiler error using -O2 but ok using -O0

State-Changed-From-To: open->closed
State-Changed-By: reichelt
State-Changed-When: Wed Oct 23 06:12:33 2002
State-Changed-Why:
    Fixed in 3.2 and main trunk.

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


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

* Re: c/6964: Internal compiler error using -O2 but ok using -O0
@ 2002-07-02 11:16 Reichelt
  0 siblings, 0 replies; 4+ messages in thread
From: Reichelt @ 2002-07-02 11:16 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

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

From: Reichelt <reichelt@igpm.rwth-aachen.de>
To: gcc-gnats@gcc.gnu.org, jari@thep.lu.se, gcc-bugs@gcc.gnu.org,
        nobody@gcc.gnu.org
Cc:  
Subject: Re: c/6964: Internal compiler error using -O2 but ok using -O0
Date: Tue, 2 Jul 2002 20:47:12 +0200

 Hi,
 
 the bug seems to be fixed since both testcases (the original one and the
 reduced one) now compile fine with gcc 3.1.1 20020701 and gcc 3.2
 20020702 (checked on i686-pc-linux-gnu).
 
 Hence, the PR can probably be closed.
 
 Greetings,
 Volker Reichelt
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=6964
 
 


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

* Re: c/6964: Internal compiler error using -O2 but ok using -O0
@ 2002-06-12  7:46 Reichelt
  0 siblings, 0 replies; 4+ messages in thread
From: Reichelt @ 2002-06-12  7:46 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

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

From: Reichelt <reichelt@igpm.rwth-aachen.de>
To: gcc-gnats@gcc.gnu.org, jari@thep.lu.se, nobody@gcc.gnu.org,
        gcc-bugs@gcc.gnu.org
Cc:  
Subject: Re: c/6964: Internal compiler error using -O2 but ok using -O0
Date: Wed, 12 Jun 2002 17:14:48 +0200

 Hi,
 
 the testcase can be reduced to the following code snippet
 (which even fails with "gcc -O -c"):
 
 ------------------------------snip here--------------------------
 float foo (void)
 {
     float x[2];
     return x[1];
 }
 ------------------------------snip here--------------------------
 
 The bug is a regression from 3.0.x and is present in 3.1 and the main
 trunk (gcc 3.2 20020609) - checked on a i686-pc-linux-gnu.
 
 Greetings,
 Volker Reichelt
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=6964
 
 


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

* c/6964: Internal compiler error using -O2 but ok using -O0
@ 2002-06-07 14:26 jari
  0 siblings, 0 replies; 4+ messages in thread
From: jari @ 2002-06-07 14:26 UTC (permalink / raw)
  To: gcc-gnats

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 420228 bytes --]


>Number:         6964
>Category:       c
>Synopsis:       Internal compiler error using -O2 but ok using -O0
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Fri Jun 07 14:26:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Jari Häkkinen
>Release:        gcc version 3.1.1 20020605 (prerelease)
>Organization:
>Environment:
i686-pc-linux-gnu/kernel 2.4.18-4
>Description:
I am trying to run the test after compiling the latest CVS version of GNU Scientific Library, but the compiler aborts. Asked GSL mailing list for support but the consensus was that this error should be reported to gcc development team.

A plain 'configure' was used when gcc was compiled.

Compilation command:
/usr/local/bin/gcc -DHAVE_CONFIG_H -I. -I. -O2 -c test.c
gives the below respons. Compilation is ok if optimization is turned off (-O0).

In file included from test.c:61:
test_complex_source.c: In function `test_complex_float_trap':
test_complex_source.c:258: Internal compiler error in subst, at combine.c:3546
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:

>Fix:

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

IyAxICJ0ZXN0LmMiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5lPiIKIyAxICJ0
ZXN0LmMiCiMgMjAgInRlc3QuYyIKIyAxICJjb25maWcuaCIgMQojIDIxICJ0ZXN0LmMiIDIKCgoK
CgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOTEgIi91c3IvaW5j
bHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAy
OTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMjAgIi91c3IvaW5jbHVkZS9mZWF0
dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAzMjEgIi91c3Iv
aW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMK
CgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEu
MS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVk
IGludCBzaXplX3Q7CiMgMjk0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBsb25nIGludCB3Y2hhcl90Owoj
IDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCiMgOTQgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9
IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25n
IGludCByZW07CiAgfSBsZGl2X3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0
ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSA7CgoKCmV4dGVybiBkb3Vi
bGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25n
IGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0cikgOwojIDE2MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBsb25nIGlu
dCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSA7CgpleHRl
cm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIDsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9u
ZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2Jhc2UpIDsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3Ry
dG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh
c2UpCiAgICAgOwoKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRv
bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSA7CgpfX2V4
dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgOwoj
IDI1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfaW50
ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkK
ICAgICA7CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgOwpleHRlcm4gbG9uZyBkb3VibGUg
X19zdHJ0b2xkX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXAp
IDsKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19z
dHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICA7CgoK
CgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpCnsKICByZXR1cm4gX19zdHJ0
b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25n
IGludApzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b2xf
aW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5l
IHVuc2lnbmVkIGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKQp7CiAg
cmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsK
fQojIDMyNSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9f
aW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICBpbnQgX19iYXNlKQp7CiAg
cmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsK
fQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0
cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50
ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgoKX19leHRlbnNpb25fXyBl
eHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9f
YmFzZSkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9f
YmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBs
b25nIGludApzdHJ0b3VsbCAoX19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBf
X3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKZXh0
ZXJuIF9faW5saW5lIGRvdWJsZQphdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJldHVy
biBzdHJ0b2QgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApKTsKfQpleHRlcm4gX19pbmxp
bmUgaW50CmF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIChpbnQpIHN0cnRv
bCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsKfQpleHRlcm4gX19pbmxpbmUg
bG9uZyBpbnQKYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpCnsKICByZXR1cm4gc3RydG9sIChf
X25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSwgMTApOwp9CgoKX19leHRlbnNpb25fXyBleHRl
cm4gX19pbmxpbmUgbG9uZyBsb25nIGludAphdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCnsK
ICByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsKfQoj
IDM4NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpsNjRhIChsb25nIGlu
dCBfX24pIDsKCgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAx
IDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy90eXBlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwojIDEg
Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9z
dGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVk
ZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hv
cnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBf
X3VfbG9uZzsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9f
dV9xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90Owoj
IDQ5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19p
bnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNo
b3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7
CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWlu
dDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2
NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2
NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9f
ZGV2X3Q7CnR5cGVkZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsK
dHlwZWRlZiBfX3VfbG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVk
ZWYgX191X2ludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBf
X3F1YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6
ZV90Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGlt
NjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50
IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVm
IGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5
cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoK
dHlwZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0
eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3Bp
ZF90OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGlu
dCBfX2Jsa2NudF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9f
dV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoK
CnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Zp
bGNudDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9m
Zl90IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1
bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7
CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVh
ZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vz
ci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGlu
dCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0
eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3Rh
dHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVz
Y3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRf
YXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1
Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGlu
dCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0Owog
IHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJf
dDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9j
azsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlw
ZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBl
ZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBp
bnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293
bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7
Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5k
Owp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90Owoj
IDE0MCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIGludCBwdGhyZWFkX3Q7CiMgMTQ0ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAy
IDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiBfX3VfY2hh
ciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2lu
dDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBl
ZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCgoKdHlw
ZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKIyA2MSAiL3Vz
ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVk
ZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRl
ZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0eXBl
ZGVmIF9fb2ZmX3Qgb2ZmX3Q7CiMgOTkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBl
ZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgp0eXBlZGVmIF9faWRfdCBpZF90OwoKCgoKdHlwZWRlZiBf
X3NzaXplX3Qgc3NpemVfdDsKCgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVm
IF9fY2FkZHJfdCBjYWRkcl90OwoKCgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKIyAxMzIgIi91
c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwoj
IDcwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwojIDgy
ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90Owoj
IDk0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMg
MTMzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwojIDE0NiAiL3Vzci9pbmNsdWRlL3N5
cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi91c3IvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMiAzCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5z
aWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxOTAg
Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1
dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1
dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1
dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1
dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4
X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQg
aW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9f
KSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k
ZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChf
X21vZGVfXyAoX193b3JkX18pKSk7CiMgMjEyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFu
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5j
bHVkZS9lbmRpYW4uaCIgMiAzCiMgMjEzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoK
CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9z
eXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
c2lnc2V0LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVm
IGludCBfX3NpZ19hdG9taWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQg
bG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSld
OwogIH0gX19zaWdzZXRfdDsKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoK
CnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1l
LmgiIDEgMwojIDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7
CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgNDUgIi91
c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1l
LmgiIDEgMwojIDY3ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDMKc3RydWN0IHRpbWV2YWwK
ICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsK
IyA0NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKdHlwZWRlZiBfX3N1c2Vjb25k
c190IHN1c2Vjb25kc190OwoKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoKCgoKCgoK
dHlwZWRlZiBzdHJ1Y3QKICB7CgoKCgoKCiAgICBfX2ZkX21hc2sgX19mZHNfYml0c1sxMDI0IC8g
KDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsKCgogIH0gZmRfc2V0OwoKCgoKCgp0eXBlZGVmIF9f
ZmRfbWFzayBmZF9tYXNrOwojIDk1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCgoKCgoK
CgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVh
ZGZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAog
ICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAg
ICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSA7CiMgMTE4
ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCgojIDIxNiAiL3Vzci9pbmNsdWRlL3N5cy90
eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwojIDIx
OSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKIyAyMzAgIi91c3IvaW5jbHVkZS9zeXMv
dHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2Js
a2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250X3Q7CiMg
MjYyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKCiMgMzkxICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDIgMwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2b2lkKSA7CgoKZXh0ZXJu
IHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgOwoKCgoKCmV4dGVybiBjaGFyICpp
bml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSA7CgoKCmV4dGVybiBjaGFyICpzZXRz
dGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewog
ICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsK
ICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAg
ICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFu
ZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qg
Kl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBp
bnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSA7CgpleHRlcm4gaW50IGluaXRz
dGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYs
CiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIDsKCmV4dGVy
biBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgOwoKCgoK
CmV4dGVybiBpbnQgcmFuZCAodm9pZCkgOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGlu
dCBfX3NlZWQpIDsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSA7
CgoKCgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGRvdWJsZSBlcmFu
ZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiBsb25nIGludCBs
cmFuZDQ4ICh2b2lkKSA7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBp
bnQgX194c3ViaVszXSkgOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSA7CmV4dGVy
biBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4
dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgOwpleHRlcm4gdW5zaWduZWQg
c2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pIDsKZXh0
ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIDsKCgoKCgpz
dHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsKICAg
IHVuc2lnbmVkIHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9f
YzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcg
aW50IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRh
ICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jl
c3RyaWN0IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBp
bnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEg
Kl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVz
dHJpY3QgX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhf
ZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50
ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBz
aG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4
X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGlu
dCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3Qg
ZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg
bG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVu
c2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAg
IGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3Ig
KGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAg
OwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSwK
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIDsKCmV4
dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7CiMgNTI3ICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9fc2l6
ZSkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNp
emVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxv
Y19fKSk7CgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19z
aXplKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9p
ZCAqX19wdHIpIDsKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSA7CgoKCiMgMSAi
L3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAz
CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNs
dWRlL3N0ZGRlZi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCgoKCgoK
CmV4dGVybiB2b2lkICphbGxvY2EgKHNpemVfdCBfX3NpemUpIDsKCgoKCgoKIyA1NDcgIi91c3Iv
aW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChzaXplX3QgX19z
aXplKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDU2MSAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAzCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoX19ub3Jl
dHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIDsK
CgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9p
ZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICA7CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50
IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMgNTg3ICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25h
bWUpIDsKCgoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25h
bWUpIDsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIDsKCgoKCgpleHRl
cm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1
ZSwgaW50IF9fcmVwbGFjZSkKICAgICA7CgoKZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBj
aGFyICpfX25hbWUpIDsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgOwojIDYyMyAi
L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVt
cGxhdGUpIDsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgOwoj
IDY1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFy
ICpfX3RlbXBsYXRlKSA7CgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19jb25zdCBjaGFyICpfX2Nv
bW1hbmQpIDsKIyA2NzIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVh
bHBhdGggKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSA7CgoKCgoKCnR5cGVkZWYgaW50ICgq
X19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CiMgNjg5ICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKmJzZWFyY2ggKF9fY29uc3Qgdm9p
ZCAqX19rZXksIF9fY29uc3Qgdm9pZCAqX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpl
eHRlcm4gdm9pZCBxc29ydCAodm9pZCAqX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9f
c2l6ZSwKICAgICAgICAgICAgICAgICAgIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRl
cm4gaW50IGFicyAoaW50IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4g
bG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CiMgNzEwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9f
bnVtZXIsIGludCBfX2Rlbm9tKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0
ZXJuIGxkaXZfdCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAg
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyA3MjggIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMwpleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50
ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg
X19zaWduKSA7CgoKCgpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k
aWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9f
cmVzdHJpY3QgX19zaWduKSA7CgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUs
IGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIDsKCgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9u
ZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAq
X19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CmV4dGVybiBjaGFy
ICpxZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAg
ICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7
CmV4dGVybiBjaGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBj
aGFyICpfX2J1ZikgOwoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQg
X19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50
ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBfX2xlbikgOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUs
IGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAg
ICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAg
ICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSA7CgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91
YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz
dHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAg
ICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBxZmN2
dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAg
ICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAg
ICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7CgoK
CgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3QgX19uKSA7CgoK
ZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSA7CgoKZXh0
ZXJuIGludCB3Y3RvbWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSA7CgoKCmV4dGVybiBz
aXplX3QgbWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSA7Cgpl
eHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9f
bikKICAgICA7CgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNw
b25zZSkgOwojIDg1OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgZ2V0bG9h
ZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgOwoKCgoKCgojIDI3ICJ0ZXN0
LmMiIDIKIyAxICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9m
Y250bC5oIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2ZjbnRsLmgiIDEgMwojIDEzNiAi
L3Vzci9pbmNsdWRlL2JpdHMvZmNudGwuaCIgMwpzdHJ1Y3QgZmxvY2sKICB7CiAgICBzaG9ydCBp
bnQgbF90eXBlOwogICAgc2hvcnQgaW50IGxfd2hlbmNlOwoKICAgIF9fb2ZmX3QgbF9zdGFydDsK
ICAgIF9fb2ZmX3QgbF9sZW47CgoKCgogICAgX19waWRfdCBsX3BpZDsKICB9OwojIDM0ICIvdXNy
L2luY2x1ZGUvZmNudGwuaCIgMiAzCiMgNjAgIi91c3IvaW5jbHVkZS9mY250bC5oIiAzCmV4dGVy
biBpbnQgZmNudGwgKGludCBfX2ZkLCBpbnQgX19jbWQsIC4uLikgOwoKCgoKCmV4dGVybiBpbnQg
b3BlbiAoX19jb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX29mbGFnLCAuLi4pIDsKIyA4MyAiL3Vz
ci9pbmNsdWRlL2ZjbnRsLmgiIDMKZXh0ZXJuIGludCBjcmVhdCAoX19jb25zdCBjaGFyICpfX2Zp
bGUsIF9fbW9kZV90IF9fbW9kZSkgOwojIDExMiAiL3Vzci9pbmNsdWRlL2ZjbnRsLmgiIDMKZXh0
ZXJuIGludCBsb2NrZiAoaW50IF9fZmQsIGludCBfX2NtZCwgX19vZmZfdCBfX2xlbikgOwojIDE2
NSAiL3Vzci9pbmNsdWRlL2ZjbnRsLmgiIDMKCiMgMjggInRlc3QuYyIgMgojIDEgIi91c3IvbG9j
YWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRpby5oIiAx
IDMKIyAzOSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9p
bmNsdWRlL3N0ZGlvLmgiIDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0NCAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoj
IDU0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1
ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwojIDY0ICIvdXNyL2xv
Y2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIg
Mwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgNzQgIi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2xpYmlvLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiMgMTQgIi91c3IvaW5jbHVkZS9fR19jb25m
aWcuaCIgMwojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4x
LjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzIxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI0ICIv
dXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAz
CiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vz
ci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAx
IDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDY3ICIvdXNyL2luY2x1ZGUvd2No
YXIuaCIgMwp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3
aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRl
X3Q7CiMgMjUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHN0cnVjdAp7
CiAgX19vZmZfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlw
ZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9
IF9HX2Zwb3M2NF90OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvZ2NvbnYuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoj
IDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVk
ZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyAyOSAiL3Vz
ci9pbmNsdWRlL2djb252LmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9pbmNs
dWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZf
Tk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZ
X0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAog
IF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1Is
CiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1Qg
PSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBf
X2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9h
ZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpf
X2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9k
YXRhICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIg
KiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9f
Z2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpf
X2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAo
Kl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFy
ICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBj
aGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAo
dm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hh
ciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBj
aGFyICosIF9fY29uc3QgY2hhciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0
KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19l
bmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252
X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJh
bnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsK
ICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoK
CgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpf
X3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRl
cjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2Zj
dCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0
IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRl
ZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgog
IGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0
ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19v
dXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVy
OwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9f
bWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFu
czsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7
CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBf
X2djb252X3N0ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNs
dWRlL19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5m
byBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0
cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252
X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19I
SV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo
X19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3Qg
X19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzMgIi91c3IvaW5jbHVkZS9s
aWJpby5oIiAyIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2xvY2Fs
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkYXJnLmgiIDEg
MwojIDQzICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2lu
Y2x1ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlz
dDsKIyA1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE2MCAiL3Vzci9pbmNsdWRlL2xp
YmlvLmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNzAgIi91c3Iv
aW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBf
SU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxF
ICpfc2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn07
CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3Bh
cnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2NvbnYKfTsKIyAyNjEgIi91
c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoK
CiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9f
cmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7
CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lP
X2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNl
OwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoK
ICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXpl
OwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47
CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAg
X0lPX2xvY2tfdCAqX2xvY2s7CiMgMzA1ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2Zm
NjRfdCBfb2Zmc2V0OwoKCgoKCiAgdm9pZCAqX19wYWQxOwogIHZvaWQgKl9fcGFkMjsKCiAgaW50
IF9tb2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAo
dm9pZCAqKV07Cgp9OwoKCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9JT19GSUxFOwoKCnN0cnVj
dCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rk
aW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4g
c3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDM0NCAiL3Vzci9pbmNsdWRl
L2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tp
ZSwgY2hhciAqX19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVf
dCBfX2lvX3dyaXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVm
IGludCBfX2lvX3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQg
X193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CiMgMzk2
ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklM
RSAqKSA7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9fb3Zl
cmZsb3cgKF9JT19GSUxFICosIGludCkgOwpleHRlcm4gd2ludF90IF9fd3VuZGVyZmxvdyAoX0lP
X0ZJTEUgKikgOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiB3
aW50X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkgOwojIDQyNiAiL3Vzci9pbmNs
dWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0
ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBf
SU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklM
RSAqX19mcCkgOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkg
OwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIDsKZXh0ZXJuIHZv
aWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2Nr
ZmlsZSAoX0lPX0ZJTEUgKikgOwojIDQ1NiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJu
IGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19y
ZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19y
ZXN0cmljdCkgOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3Qs
IGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNf
dmFfbGlzdCkgOwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9f
c3NpemVfdCkgOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBz
aXplX3QpIDsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2Zm
NjRfdCwgaW50LCBpbnQpIDsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUg
KiwgX19vZmY2NF90LCBpbnQpIDsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChf
SU9fRklMRSAqKSA7CiMgNzUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4xLjEvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyA4OSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBfR19m
cG9zX3QgZnBvc190OwojIDEzOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRp
b19saW0uaCIgMSAzCiMgMTM5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCmV4dGVybiBGSUxFICpzdGRpbjsKZXh0
ZXJuIEZJTEUgKnN0ZG91dDsKZXh0ZXJuIEZJTEUgKnN0ZGVycjsKIyAxNTMgIi91c3IvbG9jYWwv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4
dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIDsKCmV4dGVybiBpbnQg
cmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSA7CgoKCgpl
eHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgOwojIDE3MiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIg
KnRtcG5hbSAoY2hhciAqX19zKSA7CgoKCgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9f
cykgOwojIDE4OSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEu
MS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAq
X19kaXIsIF9fY29uc3QgY2hhciAqX19wZngpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9j
X18pKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlIChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGlu
dCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2Vk
IChGSUxFICpfX3N0cmVhbSkgOwojIDIxMiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZvcGVuIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgOwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4g
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAg
ICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CiMgMjQyICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklM
RSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSA7CiMgMjY1ICIvdXNy
L2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8u
aCIgMwpleHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIg
Kl9fcmVzdHJpY3QgX19idWYpIDsKCgoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAg
IGludCBfX21vZGVzLCBzaXplX3QgX19uKSA7CgoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSkgOwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYg
KEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJp
Y3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgcHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3Ry
aWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
b3JtYXQsIC4uLikgOwoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19z
LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg
IF9fZ251Y192YV9saXN0IF9fYXJnKSA7CgpleHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgOwoKZXh0
ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19h
cmcpIDsKCgoKZXh0ZXJuIGludCBzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVf
dCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm9ybWF0LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm
X18sIDMsIDQpKSk7CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3Ms
IHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgX19hdHRyaWJ1dGVf
XyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CiMgMzM2ICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRl
cm4gaW50IGZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50
IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJu
IGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwojIDM2MiAiL3Vz
ci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGlv
LmgiIDMKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBnZXRj
IChGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiBpbnQgZ2V0Y2hhciAodm9pZCkgOwoKCgoKCgoK
ZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGdl
dGNoYXJfdW5sb2NrZWQgKHZvaWQpIDsKCgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJ
TEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0
cmVhbSkgOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0
ZXJuIGludCBwdXRjaGFyIChpbnQgX19jKSA7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9j
a2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9j
a2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IHB1dGNoYXJfdW5sb2Nr
ZWQgKGludCBfX2MpIDsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSA7CgoK
ZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGNo
YXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSkKICAgICA7CiMgNDI4ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqZ2V0cyAoY2hh
ciAqX19zKSA7CiMgNDUyICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIDsKIyA0NjIg
Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9z
dGRpby5oIiAzCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpfX3MpIDsKCgoKZXh0ZXJu
IGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBzaXplX3Qg
ZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCmV4dGVy
biBzaXplX3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBf
X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0
IF9fcykgOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0
IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CmV4dGVybiBzaXplX3QgZndyaXRl
X3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwgbG9u
ZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChGSUxF
ICpfX3N0cmVhbSkgOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgOwojIDUw
NiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRl
L3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt
LCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgOwoKZXh0ZXJuIGludCBmc2V0cG9zIChG
SUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSA7CiMgNTQyICIvdXNyL2xvY2Fs
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwpl
eHRlcm4gdm9pZCBjbGVhcmVyciAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmVvZiAo
RklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSkgOwoK
CgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJu
IGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGZlcnJvcl91
bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiB2b2lkIHBlcnJvciAoX19jb25z
dCBjaGFyICpfX3MpIDsKCgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNo
YXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKIyA1NzMgIi91c3IvbG9jYWwvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZmls
ZW5vIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJ
TEUgKl9fc3RyZWFtKSA7CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBjaGFyICpf
X2NvbW1hbmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgOwoKCmV4dGVybiBpbnQgcGNsb3NlIChG
SUxFICpfX3N0cmVhbSkgOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIDsK
IyA2MjAgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5j
bHVkZS9zdGRpby5oIiAzCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIDsK
CgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIHZv
aWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSA7CiMgNjQxICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvYml0cy9zdGRp
by5oIiAzCmV4dGVybiBfX2lubGluZSBpbnQKdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKewogIHJldHVybiB2ZnByaW50ZiAoc3Rk
b3V0LCBfX2ZtdCwgX19hcmcpOwp9CgoKZXh0ZXJuIF9faW5saW5lIGludApnZXRjaGFyICh2b2lk
KQp7CiAgcmV0dXJuIF9JT19nZXRjIChzdGRpbik7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBpbnQK
Z2V0Y191bmxvY2tlZCAoRklMRSAqX19mcCkKewogIHJldHVybiAoKF9fZnApLT5fSU9fcmVhZF9w
dHIgPj0gKF9fZnApLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2ZwKSA6ICoodW5zaWduZWQg
Y2hhciAqKSAoX19mcCktPl9JT19yZWFkX3B0cisrKTsKfQoKCmV4dGVybiBfX2lubGluZSBpbnQK
Z2V0Y2hhcl91bmxvY2tlZCAodm9pZCkKewogIHJldHVybiAoKHN0ZGluKS0+X0lPX3JlYWRfcHRy
ID49IChzdGRpbiktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGluKSA6ICoodW5zaWduZWQg
Y2hhciAqKSAoc3RkaW4pLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBp
bnQKcHV0Y2hhciAoaW50IF9fYykKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQpOwp9
CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpf
X3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3Ry
ZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNo
YXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIr
KyA9IChfX2MpKSk7Cn0KCgoKCgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNfdW5sb2NrZWQgKGlu
dCBfX2MsIEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRl
X3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFt
LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+
X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCmV4dGVybiBfX2lubGluZSBpbnQKcHV0Y2hh
cl91bmxvY2tlZCAoaW50IF9fYykKewogIHJldHVybiAoKChzdGRvdXQpLT5fSU9fd3JpdGVfcHRy
ID49IChzdGRvdXQpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHN0ZG91dCwgKHVuc2ln
bmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRvdXQpLT5fSU9fd3JpdGVf
cHRyKysgPSAoX19jKSkpOwp9CiMgMTExICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAzCmV4
dGVybiBfX2lubGluZSBpbnQKZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pCnsKICByZXR1
cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoKCmV4dGVybiBfX2lubGlu
ZSBpbnQKZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0
cmVhbSktPl9mbGFncyAmIDB4MjApICE9IDApOwp9CiMgNjQyICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCiMgMjkg
InRlc3QuYyIgMgojIDEgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX21hdGguaCIgMSAzCiMgMjIgIi91
c3IvaW5jbHVkZS9nc2wvZ3NsX21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDEg
MwojIDI5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L2h1Z2VfdmFsLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgoKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDEgMwojIDQxICIvdXNyL2luY2x1ZGUvbWF0
aC5oIiAyIDMKIyA2MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgi
IDMKZXh0ZXJuIGRvdWJsZSBhY29zIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19hY29z
IChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIGFzaW4gKGRvdWJsZSBfX3gpIDsgZXh0ZXJu
IGRvdWJsZSBfX2FzaW4gKGRvdWJsZSBfX3gpIDsKCmV4dGVybiBkb3VibGUgYXRhbiAoZG91Ymxl
IF9feCkgOyBleHRlcm4gZG91YmxlIF9fYXRhbiAoZG91YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJs
ZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYXRhbjIg
KGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gZG91YmxlIGNvcyAoZG91YmxlIF9f
eCkgOyBleHRlcm4gZG91YmxlIF9fY29zIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIHNp
biAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fc2luIChkb3VibGUgX194KSA7CgpleHRl
cm4gZG91YmxlIHRhbiAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fdGFuIChkb3VibGUg
X194KSA7CiMgNzggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3Vi
bGUgY29zaCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fY29zaCAoZG91YmxlIF9feCkg
OwoKZXh0ZXJuIGRvdWJsZSBzaW5oIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19zaW5o
IChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIHRhbmggKGRvdWJsZSBfX3gpIDsgZXh0ZXJu
IGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGRvdWJsZSBhY29zaCAoZG91
YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYWNvc2ggKGRvdWJsZSBfX3gpIDsKCmV4dGVybiBk
b3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2FzaW5oIChkb3VibGUg
X194KSA7CgpleHRlcm4gZG91YmxlIGF0YW5oIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUg
X19hdGFuaCAoZG91YmxlIF9feCkgOwoKCgoKCmV4dGVybiBkb3VibGUgZXhwIChkb3VibGUgX194
KSA7IGV4dGVybiBkb3VibGUgX19leHAgKGRvdWJsZSBfX3gpIDsKIyAxMDYgIi91c3IvaW5jbHVk
ZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgZnJleHAgKGRvdWJsZSBfX3gsIGlu
dCAqX19leHBvbmVudCkgOyBleHRlcm4gZG91YmxlIF9fZnJleHAgKGRvdWJsZSBfX3gsIGludCAq
X19leHBvbmVudCkgOwoKCmV4dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4
cG9uZW50KSA7IGV4dGVybiBkb3VibGUgX19sZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhwb25l
bnQpIDsKCgpleHRlcm4gZG91YmxlIGxvZyAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9f
bG9nIChkb3VibGUgX194KSA7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoZG91YmxlIF9feCkgOyBl
eHRlcm4gZG91YmxlIF9fbG9nMTAgKGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gZG91YmxlIG1vZGYg
KGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSA7IGV4dGVybiBkb3VibGUgX19tb2RmIChkb3Vi
bGUgX194LCBkb3VibGUgKl9faXB0cikgOwoKCgpleHRlcm4gZG91YmxlIGV4cG0xIChkb3VibGUg
X194KSA7IGV4dGVybiBkb3VibGUgX19leHBtMSAoZG91YmxlIF9feCkgOwoKCmV4dGVybiBkb3Vi
bGUgbG9nMXAgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2xvZzFwIChkb3VibGUgX194
KSA7CgoKZXh0ZXJuIGRvdWJsZSBsb2diIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19s
b2diIChkb3VibGUgX194KSA7CiMgMTQzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIg
MwpleHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOyBleHRlcm4gZG91
YmxlIF9fcG93IChkb3VibGUgX194LCBkb3VibGUgX195KSA7CgoKZXh0ZXJuIGRvdWJsZSBzcXJ0
IChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19zcXJ0IChkb3VibGUgX194KSA7CgoKCmV4
dGVybiBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGRvdWJs
ZSBfX2h5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSA7CgoKCgpleHRlcm4gZG91YmxlIGNi
cnQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2NicnQgKGRvdWJsZSBfX3gpIDsKCgoK
CgoKZXh0ZXJuIGRvdWJsZSBjZWlsIChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7IGV4dGVybiBkb3VibGUgX19jZWlsIChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19mYWJzIChkb3VibGUgX194KSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmbG9vciAoZG91YmxlIF9f
eCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmxvb3IgKGRv
dWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZt
b2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJs
ZSBfX3gsIGRvdWJsZSBfX3kpIDsKCgoKCmV4dGVybiBpbnQgX19pc2luZiAoZG91YmxlIF9fdmFs
dWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlIChk
b3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGlu
dCBpc2luZiAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl
eHRlcm4gaW50IGZpbml0ZSAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgpleHRlcm4gZG91YmxlIGRyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsgZXh0
ZXJuIGRvdWJsZSBfX2RyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGRv
dWJsZSBzaWduaWZpY2FuZCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fc2lnbmlmaWNh
bmQgKGRvdWJsZSBfX3gpIDsKCgoKCmV4dGVybiBkb3VibGUgY29weXNpZ24gKGRvdWJsZSBfX3gs
IGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBf
X2NvcHlzaWduIChkb3VibGUgX194LCBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CiMgMjA5ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gaW50
IF9faXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
CmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX19qMCAo
ZG91YmxlKSA7CmV4dGVybiBkb3VibGUgajEgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fajEg
KGRvdWJsZSkgOwpleHRlcm4gZG91YmxlIGpuIChpbnQsIGRvdWJsZSkgOyBleHRlcm4gZG91Ymxl
IF9fam4gKGludCwgZG91YmxlKSA7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJsZSkgOyBleHRlcm4g
ZG91YmxlIF9feTAgKGRvdWJsZSkgOwpleHRlcm4gZG91YmxlIHkxIChkb3VibGUpIDsgZXh0ZXJu
IGRvdWJsZSBfX3kxIChkb3VibGUpIDsKZXh0ZXJuIGRvdWJsZSB5biAoaW50LCBkb3VibGUpIDsg
ZXh0ZXJuIGRvdWJsZSBfX3luIChpbnQsIGRvdWJsZSkgOwoKCgoKCmV4dGVybiBkb3VibGUgZXJm
IChkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX2VyZiAoZG91YmxlKSA7CmV4dGVybiBkb3VibGUg
ZXJmYyAoZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX19lcmZjIChkb3VibGUpIDsKZXh0ZXJuIGRv
dWJsZSBsZ2FtbWEgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hIChkb3VibGUpIDsK
IyAyMzggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgZ2Ft
bWEgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fZ2FtbWEgKGRvdWJsZSkgOwoKCgoKCgpleHRl
cm4gZG91YmxlIGxnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgOyBleHRlcm4gZG91
YmxlIF9fbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSA7CgoKCgoKCmV4dGVybiBk
b3VibGUgcmludCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fcmludCAoZG91YmxlIF9f
eCkgOwoKCmV4dGVybiBkb3VibGUgbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpl
eHRlcm4gZG91YmxlIHJlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOyBleHRlcm4g
ZG91YmxlIF9fcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSA7CgoKCmV4dGVybiBk
b3VibGUgc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIDsgZXh0ZXJuIGRvdWJsZSBfX3Nj
YWxiIChkb3VibGUgX194LCBkb3VibGUgX19uKSA7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibiAo
ZG91YmxlIF9feCwgaW50IF9fbikgOyBleHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194
LCBpbnQgX19uKSA7CgoKCmV4dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGlu
dCBfX2lsb2diIChkb3VibGUgX194KSA7CiMgNjQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoj
IDgyICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNh
bGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4g
ZmxvYXQgYWNvc2YgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hY29zZiAoZmxvYXQgX194
KSA7CgpleHRlcm4gZmxvYXQgYXNpbmYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hc2lu
ZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgOyBleHRlcm4g
ZmxvYXQgX19hdGFuZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgYXRhbjJmIChmbG9hdCBf
X3ksIGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQg
X194KSA7CgoKZXh0ZXJuIGZsb2F0IGNvc2YgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19j
b3NmIChmbG9hdCBfX3gpIDsKCmV4dGVybiBmbG9hdCBzaW5mIChmbG9hdCBfX3gpIDsgZXh0ZXJu
IGZsb2F0IF9fc2luZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgdGFuZiAoZmxvYXQgX194
KSA7IGV4dGVybiBmbG9hdCBfX3RhbmYgKGZsb2F0IF9feCkgOwojIDc4ICIvdXNyL2luY2x1ZGUv
Yml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZmxvYXQgY29zaGYgKGZsb2F0IF9feCkgOyBleHRl
cm4gZmxvYXQgX19jb3NoZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgc2luaGYgKGZsb2F0
IF9feCkgOyBleHRlcm4gZmxvYXQgX19zaW5oZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQg
dGFuaGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX190YW5oZiAoZmxvYXQgX194KSA7CgoK
CmV4dGVybiBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hY29zaGYg
KGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0IGFzaW5oZiAoZmxvYXQgX194KSA7IGV4dGVybiBm
bG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgYXRhbmhmIChmbG9hdCBf
X3gpIDsgZXh0ZXJuIGZsb2F0IF9fYXRhbmhmIChmbG9hdCBfX3gpIDsKCgoKCgpleHRlcm4gZmxv
YXQgZXhwZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2V4cGYgKGZsb2F0IF9feCkgOwoj
IDEwNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IGZyZXhw
ZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpIDsgZXh0ZXJuIGZsb2F0IF9fZnJleHBmIChm
bG9hdCBfX3gsIGludCAqX19leHBvbmVudCkgOwoKCmV4dGVybiBmbG9hdCBsZGV4cGYgKGZsb2F0
IF9feCwgaW50IF9fZXhwb25lbnQpIDsgZXh0ZXJuIGZsb2F0IF9fbGRleHBmIChmbG9hdCBfX3gs
IGludCBfX2V4cG9uZW50KSA7CgoKZXh0ZXJuIGZsb2F0IGxvZ2YgKGZsb2F0IF9feCkgOyBleHRl
cm4gZmxvYXQgX19sb2dmIChmbG9hdCBfX3gpIDsKCgpleHRlcm4gZmxvYXQgbG9nMTBmIChmbG9h
dCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fbG9nMTBmIChmbG9hdCBfX3gpIDsKCgpleHRlcm4gZmxv
YXQgbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikgOyBleHRlcm4gZmxvYXQgX19tb2Rm
ZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKSA7CgoKCmV4dGVybiBmbG9hdCBleHBtMWYgKGZs
b2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19leHBtMWYgKGZsb2F0IF9feCkgOwoKCmV4dGVybiBm
bG9hdCBsb2cxcGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19sb2cxcGYgKGZsb2F0IF9f
eCkgOwoKCmV4dGVybiBmbG9hdCBsb2diZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2xv
Z2JmIChmbG9hdCBfX3gpIDsKIyAxNDMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAz
CmV4dGVybiBmbG9hdCBwb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQg
X19wb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOwoKCmV4dGVybiBmbG9hdCBzcXJ0ZiAoZmxv
YXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3NxcnRmIChmbG9hdCBfX3gpIDsKCgoKZXh0ZXJuIGZs
b2F0IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9faHlwb3Rm
IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOwoKCgoKZXh0ZXJuIGZsb2F0IGNicnRmIChmbG9hdCBf
X3gpIDsgZXh0ZXJuIGZsb2F0IF9fY2JydGYgKGZsb2F0IF9feCkgOwoKCgoKCgpleHRlcm4gZmxv
YXQgY2VpbGYgKGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4g
ZmxvYXQgX19jZWlsZiAoZmxvYXQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
ZXh0ZXJuIGZsb2F0IGZhYnNmIChmbG9hdCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsgZXh0ZXJuIGZsb2F0IF9fZmFic2YgKGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCmV4dGVybiBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19mbG9vcmYgKGZsb2F0IF9feCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBmbW9kZiAoZmxvYXQgX194LCBmbG9h
dCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9fZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7CgoK
CgpleHRlcm4gaW50IF9faXNpbmZmIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmZmIChmbG9hdCBfX3ZhbHVl
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVmIChmbG9h
dCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGRy
ZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQgX19kcmVtZiAoZmxvYXQg
X194LCBmbG9hdCBfX3kpIDsKCgoKZXh0ZXJuIGZsb2F0IHNpZ25pZmljYW5kZiAoZmxvYXQgX194
KSA7IGV4dGVybiBmbG9hdCBfX3NpZ25pZmljYW5kZiAoZmxvYXQgX194KSA7CgoKCgpleHRlcm4g
ZmxvYXQgY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19jb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgMjA5ICIvdXNyL2luY2x1ZGUvYml0cy9t
YXRoY2FsbHMuaCIgMwpleHRlcm4gaW50IF9faXNuYW5mIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVl
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGowZiAoZmxvYXQp
IDsgZXh0ZXJuIGZsb2F0IF9fajBmIChmbG9hdCkgOwpleHRlcm4gZmxvYXQgajFmIChmbG9hdCkg
OyBleHRlcm4gZmxvYXQgX19qMWYgKGZsb2F0KSA7CmV4dGVybiBmbG9hdCBqbmYgKGludCwgZmxv
YXQpIDsgZXh0ZXJuIGZsb2F0IF9fam5mIChpbnQsIGZsb2F0KSA7CmV4dGVybiBmbG9hdCB5MGYg
KGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX3kwZiAoZmxvYXQpIDsKZXh0ZXJuIGZsb2F0IHkxZiAo
ZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9hdCkgOwpleHRlcm4gZmxvYXQgeW5mIChp
bnQsIGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX3luZiAoaW50LCBmbG9hdCkgOwoKCgoKCmV4dGVy
biBmbG9hdCBlcmZmIChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX19lcmZmIChmbG9hdCkgOwpleHRl
cm4gZmxvYXQgZXJmY2YgKGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX2VyZmNmIChmbG9hdCkgOwpl
eHRlcm4gZmxvYXQgbGdhbW1hZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZiAoZmxv
YXQpIDsKIyAyMzggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9h
dCBnYW1tYWYgKGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX2dhbW1hZiAoZmxvYXQpIDsKCgoKCgoK
ZXh0ZXJuIGZsb2F0IGxnYW1tYWZfciAoZmxvYXQsIGludCAqX19zaWduZ2FtcCkgOyBleHRlcm4g
ZmxvYXQgX19sZ2FtbWFmX3IgKGZsb2F0LCBpbnQgKl9fc2lnbmdhbXApIDsKCgoKCgoKZXh0ZXJu
IGZsb2F0IHJpbnRmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9f
eCkgOwoKCmV4dGVybiBmbG9hdCBuZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19uZXh0YWZ0ZXJmIChmbG9h
dCBfX3gsIGZsb2F0IF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVy
biBmbG9hdCByZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQg
X19yZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOwoKCgpleHRlcm4gZmxvYXQgc2Nh
bGJmIChmbG9hdCBfX3gsIGZsb2F0IF9fbikgOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKGZsb2F0
IF9feCwgZmxvYXQgX19uKSA7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJuZiAoZmxvYXQgX194LCBp
bnQgX19uKSA7IGV4dGVybiBmbG9hdCBfX3NjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbikgOwoK
CgpleHRlcm4gaW50IGlsb2diZiAoZmxvYXQgX194KSA7IGV4dGVybiBpbnQgX19pbG9nYmYgKGZs
b2F0IF9feCkgOwojIDgzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA5OSAiL3Vzci9pbmNs
dWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1
NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91YmxlIGFj
b3NsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2wgKGxvbmcg
ZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5sIChsb25nIGRvdWJsZSBfX3gp
IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW4ybCAo
bG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
YXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25n
IGRvdWJsZSBjb3NsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29z
bCAobG9uZyBkb3VibGUgX194KSA7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lubCAobG9uZyBkb3Vi
bGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCkgOwoK
ZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBk
b3VibGUgX190YW5sIChsb25nIGRvdWJsZSBfX3gpIDsKIyA3OCAiL3Vzci9pbmNsdWRlL2JpdHMv
bWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2hsIChsb25nIGRvdWJsZSBfX3gp
IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zaGwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fc2luaGwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmhsIChs
b25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFuaGwgKGxvbmcgZG91Ymxl
IF9feCkgOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIDsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBs
b25nIGRvdWJsZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUg
X19hc2luaGwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5obCAo
bG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5obCAobG9uZyBkb3Vi
bGUgX194KSA7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cGwgKGxvbmcgZG91YmxlIF9feCkg
OyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBsIChsb25nIGRvdWJsZSBfX3gpIDsKIyAxMDYgIi91
c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBmcmV4cGwg
KGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSA7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2ZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIDsKCgpleHRlcm4gbG9u
ZyBkb3VibGUgbGRleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSA7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2xkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkg
OwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fbG9nbCAobG9uZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IGxvZzEwbCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzEwbCAo
bG9uZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG1vZGZsIChsb25nIGRvdWJs
ZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbW9kZmwg
KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgOwoKCgpleHRlcm4gbG9uZyBk
b3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhw
bTFsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMXBsIChsb25n
IGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMXBsIChsb25nIGRvdWJsZSBf
X3gpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRl
cm4gbG9uZyBkb3VibGUgX19sb2dibCAobG9uZyBkb3VibGUgX194KSA7CiMgMTQzICIvdXNyL2lu
Y2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gbG9uZyBkb3VibGUgcG93bCAobG9uZyBk
b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93bCAo
bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUg
c3FydGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19zcXJ0bCAobG9u
ZyBkb3VibGUgX194KSA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91Ymxl
IF9feCwgbG9uZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2h5cG90bCAobG9u
ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBj
YnJ0bCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NicnRsIChsb25n
IGRvdWJsZSBfX3gpIDsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJs
ZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
Y2VpbGwgKGxvbmcgZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4
dGVybiBsb25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmxvb3Js
IChsb25nIGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Ztb2RsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3Vi
bGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19m
aW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCgpleHRlcm4gaW50IGlzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1
ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBkcmVt
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKCmV4dGVybiBs
b25nIGRvdWJsZSBzaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBk
b3VibGUgX19zaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGNvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29weXNpZ25sIChs
b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwojIDIwOSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGludCBf
X2lzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCgpleHRlcm4gaW50IGlzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKSA7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2owbCAobG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91
YmxlIGoxbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajFsIChsb25nIGRv
dWJsZSkgOwpleHRlcm4gbG9uZyBkb3VibGUgam5sIChpbnQsIGxvbmcgZG91YmxlKSA7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2pubCAoaW50LCBsb25nIGRvdWJsZSkgOwpleHRlcm4gbG9uZyBkb3Vi
bGUgeTBsIChsb25nIGRvdWJsZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX195MGwgKGxvbmcgZG91
YmxlKSA7CmV4dGVybiBsb25nIGRvdWJsZSB5MWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25n
IGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50
LCBsb25nIGRvdWJsZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX195bmwgKGludCwgbG9uZyBkb3Vi
bGUpIDsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXJmbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fZXJmbCAobG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIGVy
ZmNsIChsb25nIGRvdWJsZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBkb3Vi
bGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBs
b25nIGRvdWJsZSBfX2xnYW1tYWwgKGxvbmcgZG91YmxlKSA7CiMgMjM4ICIvdXNyL2luY2x1ZGUv
Yml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gbG9uZyBkb3VibGUgZ2FtbWFsIChsb25nIGRvdWJs
ZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19nYW1tYWwgKGxvbmcgZG91YmxlKSA7CgoKCgoKCmV4
dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXAp
IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3Np
Z25nYW1wKSA7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByaW50bCAobG9uZyBkb3VibGUgX194
KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JpbnRsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRl
cm4gbG9uZyBkb3VibGUgbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf
X3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4
dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtYWluZGVybCAobG9uZyBk
b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWlu
ZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIHNjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIDsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbikg
OwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9f
bikgOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYm5sIChsb25nIGRvdWJsZSBfX3gsIGludCBf
X24pIDsKCgoKZXh0ZXJuIGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gaW50
IF9faWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIDsKIyAxMDAgIi91c3IvaW5jbHVkZS9tYXRoLmgi
IDIgMwojIDExMyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpleHRlcm4gaW50IHNpZ25nYW07CiMg
MjQwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCnR5cGVkZWYgZW51bQp7CiAgX0lFRUVfID0gLTEs
CiAgX1NWSURfLAogIF9YT1BFTl8sCiAgX1BPU0lYXywKICBfSVNPQ18KfSBfTElCX1ZFUlNJT05f
VFlQRTsKCgoKCmV4dGVybiBfTElCX1ZFUlNJT05fVFlQRSBfTElCX1ZFUlNJT047CiMgMjY1ICIv
dXNyL2luY2x1ZGUvbWF0aC5oIiAzCnN0cnVjdCBleGNlcHRpb24KCiAgewogICAgaW50IHR5cGU7
CiAgICBjaGFyICpuYW1lOwogICAgZG91YmxlIGFyZzE7CiAgICBkb3VibGUgYXJnMjsKICAgIGRv
dWJsZSByZXR2YWw7CiAgfTsKCgoKCmV4dGVybiBpbnQgbWF0aGVyciAoc3RydWN0IGV4Y2VwdGlv
biAqX19leGMpOwojIDM1MCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL21hdGhpbmxpbmUuaCIgMSAzCiMgMjkxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5s
aW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBfX3NnbiAoZG91YmxlKSA7IGV4dGVybiBf
X2lubGluZSBkb3VibGUgX19zZ24gKGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAw
LjAgOiAoX194ID4gMC4wID8gMS4wIDogLTEuMCk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9f
c2duZiAoZmxvYXQpIDsgZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxvYXQgX194KSB7
IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjApOyB9IGV4
dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBf
X2lubGluZSBsb25nIGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX194
ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfQojIDQyNiAiL3Vzci9p
bmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBkb3VibGUgYXRhbjIg
KGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsg
X19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gp
LCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5l
IGZsb2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUp
IDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0
ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRv
dWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGls
ZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAi
c3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9f
YXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25n
IGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192
YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsg
fQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgZm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg
eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglm
cHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9f
dmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFs
dWU7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg
eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglm
cHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9f
dmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFs
dWU7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBf
X3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIg
ImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAi
Y2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA0NDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxp
bmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHsgcmVnaXN0
ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChf
X3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5saW5l
IGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNt
IF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJl
dHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgc3FydGwgKGxvbmcg
ZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xh
dGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9f
cmVzdWx0OyB9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJs
ZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVf
XyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3Vs
dDsgfQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgeyByZXR1cm4g
X19idWlsdGluX2ZhYnMgKF9feCk7IH0KZXh0ZXJuIF9faW5saW5lIGZsb2F0IGZhYnNmIChmbG9h
dCBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZiAoX194KTsgfQpleHRlcm4gX19pbmxpbmUg
bG9uZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX19idWlsdGluX2Zh
YnNsIChfX3gpOyB9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRv
dWJsZSBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbCAoX194KTsgfQojIDQ2NyAiL3Vzci9p
bmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBkb3VibGUgYXRhbiAo
ZG91YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVf
XyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSki
KTsgcmV0dXJuIF9fcmVzdWx0OyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBhdGFuZiAoZmxvYXQg
X194KSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQx
OyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVy
biBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91
YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGls
ZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgx
KSIpOyByZXR1cm4gX19yZXN1bHQ7IH0KCmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBfX3Nn
bjFsIChsb25nIGRvdWJsZSkgOyBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ24xbCAo
bG9uZyBkb3VibGUgX194KSB7IF9fZXh0ZW5zaW9uX18gdW5pb24geyBsb25nIGRvdWJsZSBfX3hs
ZDsgdW5zaWduZWQgaW50IF9feGlbM107IH0gX19uID0geyBfX3hsZDogX194IH07IF9fbi5fX3hp
WzJdID0gKF9fbi5fX3hpWzJdICYgMHg4MDAwKSB8IDB4M2ZmZjsgX19uLl9feGlbMV0gPSAweDgw
MDAwMDAwOyBfX24uX194aVswXSA9IDA7IHJldHVybiBfX24uX194bGQ7IH0KIyA0OTMgIi91c3Iv
aW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlIGZsb29y
IChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUg
dW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9f
Y3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3
dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cg
JTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10
IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDog
OiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGZs
b29yZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRp
bGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50
IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBf
X2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxk
Y3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDog
Ij10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAi
IDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcg
ZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f
dmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5z
aWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDog
Ij1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBf
X3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGls
ZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0
aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1MDQg
Ii91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91Ymxl
IGNlaWwgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xh
dGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBp
bnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7
IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJm
bGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIg
OiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAl
MCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxv
YXQgY2VpbGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3Zv
bGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0
IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cp
KTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAo
ImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50
IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3
ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBs
b25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl
IF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUg
dW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAi
IDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBfX2Fz
bSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xh
dGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3Zv
bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1
MjIgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91
YmxlCmxkZXhwIChkb3VibGUgX194LCBpbnQgX195KQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUg
X192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDog
IjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9CiMg
NTQwICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRv
dWJsZSBsb2cxcCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBp
ZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUgKiAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwTCkg
X192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7IGVsc2UgX19hc20gX192b2xhdGlsZV9fICgiZmxk
bG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhwMSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194
KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgbG9n
MXBmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFi
c2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUg
PSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQi
ICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3Qo
MSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGxvZzFw
bCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IGlmIChf
X2ZhYnNsIChfX3gpID49IDEuMCAtIDAuNSAqIDEuNDE0MjEzNTYyMzczMDk1MDQ4ODBMKSBfX3Zh
bHVlID0gbG9nbCAoMS4wICsgX194KTsgZWxzZSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjJc
blx0IiAiZnhjaFxuXHQiICJmeWwyeHAxIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpIDog
InN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9CiMgNTU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRo
aW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBhc2luaCAoZG91YmxlIF9feCkgeyBy
ZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAo
X195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9f
c2duMWwgKF9feCkpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCkg
eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFw
bCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAq
IF9fc2duMWwgKF9feCkpOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhc2luaGwgKGxv
bmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gp
OyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkg
KyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9CgoKCgpleHRlcm4gX19pbmxpbmUgZG91
YmxlIGFjb3NoIChkb3VibGUgX194KSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3gg
LSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGFj
b3NoZiAoZmxvYXQgX194KSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3ggLSAxLjAp
ICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGFj
b3NobCAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3gg
LSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0KCgpleHRlcm4gX19pbmxpbmUgZG91Ymxl
IGF0YW5oIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wg
KF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkg
KiBfX3NnbjFsIChfX3gpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBhdGFuaGYgKGZsb2F0IF9f
eCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAu
NSAqIGxvZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsg
fSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHsg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIC0wLjUgKiBs
b2cxcGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kpKSAqIF9fc2duMWwgKF9feCk7IH0KCgoK
CmV4dGVybiBfX2lubGluZSBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHsg
cmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0gZXh0ZXJuIF9faW5saW5l
IGZsb2F0IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIF9fc3FydGwgKF9f
eCAqIF9feCArIF9feSAqIF9feSk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGh5cG90
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIF9fc3FydGwgKF9f
eCAqIF9feCArIF9feSAqIF9feSk7IH0KCmV4dGVybiBfX2lubGluZSBkb3VibGUgbG9nYiAoZG91
YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRv
dWJsZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9f
anVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0
ZXJuIF9faW5saW5lIGZsb2F0IGxvZ2JmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxl
X18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAo
X194KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBsb2di
bCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lz
dGVyIGxvbmcgZG91YmxlIF9fanVuazsgX19hc20gX192b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQi
IDogIj10IiAoX19qdW5rKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192
YWx1ZTsgfQojIDY1MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBf
X2lubGluZSBkb3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgeyByZWdpc3RlciBk
b3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxl
X18gKCIxOglmcHJlbTFcblx0IiAiZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6
ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9f
eSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGRyZW1m
IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0
ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAi
ZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZh
IiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9f
dmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgeyByZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIg
aW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAiZnN0
c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAo
X19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFs
dWU7IH0KIyA2NjYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19p
bmxpbmUgaW50Cl9fZmluaXRlIChkb3VibGUgX194KQp7CiAgcmV0dXJuIChfX2V4dGVuc2lvbl9f
CiAgICAgICAgICAoKCgoKHVuaW9uIHsgZG91YmxlIF9fZDsgaW50IF9faVsyXTsgfSkge19fZDog
X194fSkuX19pWzFdCiAgICAgICAgICAgICB8IDB4ODAwZmZmZmZ1KSArIDEpID4+IDMxKSk7Cn0K
IyAzNTEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDQxMSAiL3Vzci9pbmNsdWRlL21hdGgu
aCIgMwoKIyAyMyAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfbWF0aC5oIiAyIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvZ3NsL2dzbF9zeXMuaCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3N5cy5o
IiAzCgoKZG91YmxlIGdzbF9sb2cxcCAoY29uc3QgZG91YmxlIHgpOwpkb3VibGUgZ3NsX2V4cG0x
IChjb25zdCBkb3VibGUgeCk7CmRvdWJsZSBnc2xfaHlwb3QgKGNvbnN0IGRvdWJsZSB4LCBjb25z
dCBkb3VibGUgeSk7CmRvdWJsZSBnc2xfYWNvc2ggKGNvbnN0IGRvdWJsZSB4KTsKZG91YmxlIGdz
bF9hc2luaCAoY29uc3QgZG91YmxlIHgpOwpkb3VibGUgZ3NsX2F0YW5oIChjb25zdCBkb3VibGUg
eCk7CgppbnQgZ3NsX2lzbmFuIChjb25zdCBkb3VibGUgeCk7CmludCBnc2xfaXNpbmYgKGNvbnN0
IGRvdWJsZSB4KTsKaW50IGdzbF9maW5pdGUgKGNvbnN0IGRvdWJsZSB4KTsKCmRvdWJsZSBnc2xf
bmFuICh2b2lkKTsKZG91YmxlIGdzbF9wb3NpbmYgKHZvaWQpOwpkb3VibGUgZ3NsX25lZ2luZiAo
dm9pZCk7CmRvdWJsZSBnc2xfZmRpdiAoY29uc3QgZG91YmxlIHgsIGNvbnN0IGRvdWJsZSB5KTsK
CmRvdWJsZSBnc2xfY29lcmNlX2RvdWJsZSAoY29uc3QgZG91YmxlIHgpOwpmbG9hdCBnc2xfY29l
cmNlX2Zsb2F0IChjb25zdCBmbG9hdCB4KTsKbG9uZyBkb3VibGUgZ3NsX2NvZXJjZV9sb25nX2Rv
dWJsZSAoY29uc3QgbG9uZyBkb3VibGUgeCk7CgoKIyAyNCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xf
bWF0aC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9tYWNoaW5lLmgiIDEgMwoKCgoK
IyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1
ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMS4xL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMwoKCgoK
CgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5j
bHVkZS9saW1pdHMuaCIgMSAzCiMgMTMyICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMS4xL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGlt
aXRzLmgiIDEgMwojIDE0NCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4
MV9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAzNiAi
L3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgv
bGltaXRzLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCiMg
MTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDE0NSAiL3Vzci9pbmNs
dWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGltLmgi
IDEgMwojIDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAxMzMgIi91c3IvbG9jYWwv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9saW1pdHMuaCIgMiAz
CiMgOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNs
dWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA2ICIvdXNyL2luY2x1ZGUv
Z3NsL2dzbF9tYWNoaW5lLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9mbG9hdC5oIiAxIDMKIyA3ICIvdXNyL2luY2x1ZGUv
Z3NsL2dzbF9tYWNoaW5lLmgiIDIgMwojIDI1ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9tYXRoLmgi
IDIgMwojIDEgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ByZWNpc2lvbi5oIiAxIDMKIyAzNSAiL3Vz
ci9pbmNsdWRlL2dzbC9nc2xfcHJlY2lzaW9uLmgiIDMKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgZ3NsX3ByZWNfdDsKIyA1NSAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfcHJlY2lzaW9uLmgiIDMK
ZXh0ZXJuIGNvbnN0IGRvdWJsZSBnc2xfcHJlY19lcHNbXTsKZXh0ZXJuIGNvbnN0IGRvdWJsZSBn
c2xfcHJlY19zcXJ0X2Vwc1tdOwpleHRlcm4gY29uc3QgZG91YmxlIGdzbF9wcmVjX3Jvb3QzX2Vw
c1tdOwpleHRlcm4gY29uc3QgZG91YmxlIGdzbF9wcmVjX3Jvb3Q0X2Vwc1tdOwpleHRlcm4gY29u
c3QgZG91YmxlIGdzbF9wcmVjX3Jvb3Q1X2Vwc1tdOwpleHRlcm4gY29uc3QgZG91YmxlIGdzbF9w
cmVjX3Jvb3Q2X2Vwc1tdOwoKCgojIDI2ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9tYXRoLmgiIDIg
MwojIDEgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX25hbi5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRl
L2dzbC9nc2xfbWF0aC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9wb3dfaW50Lmgi
IDEgMwojIDMzICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9wb3dfaW50LmgiIDMKCgoKZXh0ZXJuIGlu
bGluZSBkb3VibGUgZ3NsX3Bvd18yKGNvbnN0IGRvdWJsZSB4KTsKZXh0ZXJuIGlubGluZSBkb3Vi
bGUgZ3NsX3Bvd18zKGNvbnN0IGRvdWJsZSB4KTsKZXh0ZXJuIGlubGluZSBkb3VibGUgZ3NsX3Bv
d180KGNvbnN0IGRvdWJsZSB4KTsKZXh0ZXJuIGlubGluZSBkb3VibGUgZ3NsX3Bvd181KGNvbnN0
IGRvdWJsZSB4KTsKZXh0ZXJuIGlubGluZSBkb3VibGUgZ3NsX3Bvd182KGNvbnN0IGRvdWJsZSB4
KTsKZXh0ZXJuIGlubGluZSBkb3VibGUgZ3NsX3Bvd183KGNvbnN0IGRvdWJsZSB4KTsKZXh0ZXJu
IGlubGluZSBkb3VibGUgZ3NsX3Bvd184KGNvbnN0IGRvdWJsZSB4KTsKZXh0ZXJuIGlubGluZSBk
b3VibGUgZ3NsX3Bvd185KGNvbnN0IGRvdWJsZSB4KTsKCmV4dGVybiBpbmxpbmUgZG91YmxlIGdz
bF9wb3dfMihjb25zdCBkb3VibGUgeCkgeyByZXR1cm4geCp4OyB9CmV4dGVybiBpbmxpbmUgZG91
YmxlIGdzbF9wb3dfMyhjb25zdCBkb3VibGUgeCkgeyByZXR1cm4geCp4Kng7IH0KZXh0ZXJuIGlu
bGluZSBkb3VibGUgZ3NsX3Bvd180KGNvbnN0IGRvdWJsZSB4KSB7IGRvdWJsZSB4MiA9IHgqeDsg
cmV0dXJuIHgyKngyOyB9CmV4dGVybiBpbmxpbmUgZG91YmxlIGdzbF9wb3dfNShjb25zdCBkb3Vi
bGUgeCkgeyBkb3VibGUgeDIgPSB4Kng7IHJldHVybiB4Mip4Mip4OyB9CmV4dGVybiBpbmxpbmUg
ZG91YmxlIGdzbF9wb3dfNihjb25zdCBkb3VibGUgeCkgeyBkb3VibGUgeDIgPSB4Kng7IHJldHVy
biB4Mip4Mip4MjsgfQpleHRlcm4gaW5saW5lIGRvdWJsZSBnc2xfcG93XzcoY29uc3QgZG91Ymxl
IHgpIHsgZG91YmxlIHgzID0geCp4Kng7IHJldHVybiB4Myp4Myp4OyB9CmV4dGVybiBpbmxpbmUg
ZG91YmxlIGdzbF9wb3dfOChjb25zdCBkb3VibGUgeCkgeyBkb3VibGUgeDIgPSB4Kng7IGRvdWJs
ZSB4NCA9IHgyKngyOyByZXR1cm4geDQqeDQ7IH0KZXh0ZXJuIGlubGluZSBkb3VibGUgZ3NsX3Bv
d185KGNvbnN0IGRvdWJsZSB4KSB7IGRvdWJsZSB4MyA9IHgqeCp4OyByZXR1cm4geDMqeDMqeDM7
IH0KIyA2NCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfcG93X2ludC5oIiAzCmRvdWJsZSBnc2xfcG93
X2ludChkb3VibGUgeCwgaW50IG4pOwoKCiMgMjggIi91c3IvaW5jbHVkZS9nc2wvZ3NsX21hdGgu
aCIgMiAzCiMgMTA4ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9tYXRoLmgiIDMKCiMgMTI2ICIvdXNy
L2luY2x1ZGUvZ3NsL2dzbF9tYXRoLmgiIDMKZG91YmxlIGdzbF9tYXggKGRvdWJsZSBhLCBkb3Vi
bGUgYik7CmRvdWJsZSBnc2xfbWluIChkb3VibGUgYSwgZG91YmxlIGIpOwoKCgoKZXh0ZXJuIGlu
bGluZSBpbnQgR1NMX01BWF9JTlQgKGludCBhLCBpbnQgYik7CmV4dGVybiBpbmxpbmUgaW50IEdT
TF9NSU5fSU5UIChpbnQgYSwgaW50IGIpOwpleHRlcm4gaW5saW5lIGRvdWJsZSBHU0xfTUFYX0RC
TCAoZG91YmxlIGEsIGRvdWJsZSBiKTsKZXh0ZXJuIGlubGluZSBkb3VibGUgR1NMX01JTl9EQkwg
KGRvdWJsZSBhLCBkb3VibGUgYik7CmV4dGVybiBpbmxpbmUgbG9uZyBkb3VibGUgR1NMX01BWF9M
REJMIChsb25nIGRvdWJsZSBhLCBsb25nIGRvdWJsZSBiKTsKZXh0ZXJuIGlubGluZSBsb25nIGRv
dWJsZSBHU0xfTUlOX0xEQkwgKGxvbmcgZG91YmxlIGEsIGxvbmcgZG91YmxlIGIpOwoKZXh0ZXJu
IGlubGluZSBpbnQKR1NMX01BWF9JTlQgKGludCBhLCBpbnQgYikKewogIHJldHVybiAoKGEpID4g
KGIpID8gKGEpIDogKGIpKTsKfQoKZXh0ZXJuIGlubGluZSBpbnQKR1NMX01JTl9JTlQgKGludCBh
LCBpbnQgYikKewogIHJldHVybiAoKGEpIDwgKGIpID8gKGEpIDogKGIpKTsKfQoKZXh0ZXJuIGlu
bGluZSBkb3VibGUKR1NMX01BWF9EQkwgKGRvdWJsZSBhLCBkb3VibGUgYikKewogIHJldHVybiAo
KGEpID4gKGIpID8gKGEpIDogKGIpKTsKfQoKZXh0ZXJuIGlubGluZSBkb3VibGUKR1NMX01JTl9E
QkwgKGRvdWJsZSBhLCBkb3VibGUgYikKewogIHJldHVybiAoKGEpIDwgKGIpID8gKGEpIDogKGIp
KTsKfQoKZXh0ZXJuIGlubGluZSBsb25nIGRvdWJsZQpHU0xfTUFYX0xEQkwgKGxvbmcgZG91Ymxl
IGEsIGxvbmcgZG91YmxlIGIpCnsKICByZXR1cm4gKChhKSA+IChiKSA/IChhKSA6IChiKSk7Cn0K
CmV4dGVybiBpbmxpbmUgbG9uZyBkb3VibGUKR1NMX01JTl9MREJMIChsb25nIGRvdWJsZSBhLCBs
b25nIGRvdWJsZSBiKQp7CiAgcmV0dXJuICgoYSkgPCAoYikgPyAoYSkgOiAoYikpOwp9CiMgMTg1
ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9tYXRoLmgiIDMKc3RydWN0IGdzbF9mdW5jdGlvbl9zdHJ1
Y3QKewogIGRvdWJsZSAoKiBmdW5jdGlvbikgKGRvdWJsZSB4LCB2b2lkICogcGFyYW1zKTsKICB2
b2lkICogcGFyYW1zOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgZ3NsX2Z1bmN0aW9uX3N0cnVjdCBnc2xf
ZnVuY3Rpb24gOwoKCgoKCnN0cnVjdCBnc2xfZnVuY3Rpb25fZmRmX3N0cnVjdAp7CiAgZG91Ymxl
ICgqIGYpIChkb3VibGUgeCwgdm9pZCAqIHBhcmFtcyk7CiAgZG91YmxlICgqIGRmKSAoZG91Ymxl
IHgsIHZvaWQgKiBwYXJhbXMpOwogIHZvaWQgKCogZmRmKSAoZG91YmxlIHgsIHZvaWQgKiBwYXJh
bXMsIGRvdWJsZSAqIGYsIGRvdWJsZSAqIGRmKTsKICB2b2lkICogcGFyYW1zOwp9OwoKdHlwZWRl
ZiBzdHJ1Y3QgZ3NsX2Z1bmN0aW9uX2ZkZl9zdHJ1Y3QgZ3NsX2Z1bmN0aW9uX2ZkZiA7CiMgMjE0
ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9tYXRoLmgiIDMKc3RydWN0IGdzbF9mdW5jdGlvbl92ZWNf
c3RydWN0CnsKICBpbnQgKCogZnVuY3Rpb24pIChkb3VibGUgeCwgZG91YmxlIHlbXSwgdm9pZCAq
IHBhcmFtcyk7CiAgdm9pZCAqIHBhcmFtczsKfTsKCnR5cGVkZWYgc3RydWN0IGdzbF9mdW5jdGlv
bl92ZWNfc3RydWN0IGdzbF9mdW5jdGlvbl92ZWMgOwoKCgoKIyAzMCAidGVzdC5jIiAyCiMgMSAi
L3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yLmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9n
c2wvZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1
ZGUvZ3NsL2dzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZS5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2dzbC9nc2xfZXJybm8uaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX2Vycm5v
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9l
cnJuby5oIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDEgMwojIDI1ICIv
dXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5v
LmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJybm8uaCIgMSAzCiMgNSAiL3Vzci9p
bmNsdWRlL2xpbnV4L2Vycm5vLmgiIDIgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5o
IiAyIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwpleHRlcm4gaW50IGVycm5v
OwoKCmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKIyAzNyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMwojIDU5ICIvdXNyL2lu
Y2x1ZGUvZXJybm8uaCIgMwoKIyAyNSAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfZXJybm8uaCIgMiAz
CiMgMzYgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX2Vycm5vLmgiIDMKCgplbnVtIHsKICBHU0xfU1VD
Q0VTUyA9IDAsCiAgR1NMX0ZBSUxVUkUgPSAtMSwKICBHU0xfQ09OVElOVUUgPSAtMiwKICBHU0xf
RURPTSA9IDEsCiAgR1NMX0VSQU5HRSA9IDIsCiAgR1NMX0VGQVVMVCA9IDMsCiAgR1NMX0VJTlZB
TCA9IDQsCiAgR1NMX0VGQUlMRUQgPSA1LAogIEdTTF9FRkFDVE9SID0gNiwKICBHU0xfRVNBTklU
WSA9IDcsCiAgR1NMX0VOT01FTSA9IDgsCiAgR1NMX0VCQURGVU5DID0gOSwKICBHU0xfRVJVTkFX
QVkgPSAxMCwKICBHU0xfRU1BWElURVIgPSAxMSwKICBHU0xfRVpFUk9ESVYgPSAxMiwKICBHU0xf
RUJBRFRPTCA9IDEzLAogIEdTTF9FVE9MID0gMTQsCiAgR1NMX0VVTkRSRkxXID0gMTUsCiAgR1NM
X0VPVlJGTFcgPSAxNiwKICBHU0xfRUxPU1MgPSAxNywKICBHU0xfRVJPVU5EID0gMTgsCiAgR1NM
X0VCQURMRU4gPSAxOSwKICBHU0xfRU5PVFNRUiA9IDIwLAogIEdTTF9FU0lORyA9IDIxLAogIEdT
TF9FRElWRVJHRSA9IDIyLAogIEdTTF9FVU5TVVAgPSAyMywKICBHU0xfRVVOSU1QTCA9IDI0LAog
IEdTTF9FQ0FDSEUgPSAyNSwKICBHU0xfRVRBQkxFID0gMjYsCiAgR1NMX0VOT1BST0cgPSAyNywK
ICBHU0xfRU5PUFJPR0ogPSAyOCwKICBHU0xfRVRPTEYgPSAyOSwKICBHU0xfRVRPTFggPSAzMCwK
ICBHU0xfRVRPTEcgPSAzMSwKICBHU0xfRU9GID0gMzIKfSA7Cgp2b2lkIGdzbF9lcnJvciAoY29u
c3QgY2hhciAqIHJlYXNvbiwgY29uc3QgY2hhciAqIGZpbGUsIGludCBsaW5lLAogICAgICAgICAg
ICAgICAgaW50IGdzbF9lcnJubyk7Cgp2b2lkIGdzbF93YXJuaW5nIChjb25zdCBjaGFyICogcmVh
c29uLCBjb25zdCBjaGFyICogZmlsZSwgaW50IGxpbmUsCiAgICAgICAgICAgICAgICAgIGludCBn
c2xfZXJybm8pIDsKCnZvaWQgZ3NsX3N0cmVhbV9wcmludGYgKGNvbnN0IGNoYXIgKmxhYmVsLCBj
b25zdCBjaGFyICpmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZSwgY29uc3Qg
Y2hhciAqcmVhc29uKTsKCmNvbnN0IGNoYXIgKiBnc2xfc3RyZXJyb3IgKGNvbnN0IGludCBnc2xf
ZXJybm8pOwoKdHlwZWRlZiB2b2lkIGdzbF9lcnJvcl9oYW5kbGVyX3QgKGNvbnN0IGNoYXIgKiBy
ZWFzb24sIGNvbnN0IGNoYXIgKiBmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGxpbmUsIGludCBnc2xfZXJybm8pOwoKdHlwZWRlZiB2b2lkIGdzbF9zdHJlYW1faGFu
ZGxlcl90IChjb25zdCBjaGFyICogbGFiZWwsIGNvbnN0IGNoYXIgKiBmaWxlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lLCBjb25zdCBjaGFyICogcmVhc29uKTsK
CmdzbF9lcnJvcl9oYW5kbGVyX3QgKgpnc2xfc2V0X2Vycm9yX2hhbmRsZXIgKGdzbF9lcnJvcl9o
YW5kbGVyX3QgKiBuZXdfaGFuZGxlcik7Cgpnc2xfZXJyb3JfaGFuZGxlcl90ICoKZ3NsX3NldF9l
cnJvcl9oYW5kbGVyX29mZiAodm9pZCk7Cgpnc2xfc3RyZWFtX2hhbmRsZXJfdCAqCmdzbF9zZXRf
c3RyZWFtX2hhbmRsZXIgKGdzbF9zdHJlYW1faGFuZGxlcl90ICogbmV3X2hhbmRsZXIpOwoKRklM
RSAqIGdzbF9zZXRfc3RyZWFtIChGSUxFICogbmV3X3N0cmVhbSk7CiMgMTU2ICIvdXNyL2luY2x1
ZGUvZ3NsL2dzbF9lcnJuby5oIiAzCmV4dGVybiBpbnQgZ3NsX3dhcm5pbmdzX29mZiA7CiMgMTgw
ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9lcnJuby5oIiAzCgojIDI1ICIvdXNyL2luY2x1ZGUvZ3Ns
L2dzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUv
Z3NsL2dzbF9jb21wbGV4LmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9jb21wbGV4
LmgiIDMKCgoKCnR5cGVkZWYgZG91YmxlICogZ3NsX2NvbXBsZXhfcGFja2VkIDsKdHlwZWRlZiBm
bG9hdCAqIGdzbF9jb21wbGV4X3BhY2tlZF9mbG9hdCA7CnR5cGVkZWYgbG9uZyBkb3VibGUgKiBn
c2xfY29tcGxleF9wYWNrZWRfbG9uZ19kb3VibGUgOwoKdHlwZWRlZiBjb25zdCBkb3VibGUgKiBn
c2xfY29uc3RfY29tcGxleF9wYWNrZWQgOwp0eXBlZGVmIGNvbnN0IGZsb2F0ICogZ3NsX2NvbnN0
X2NvbXBsZXhfcGFja2VkX2Zsb2F0IDsKdHlwZWRlZiBjb25zdCBsb25nIGRvdWJsZSAqIGdzbF9j
b25zdF9jb21wbGV4X3BhY2tlZF9sb25nX2RvdWJsZSA7CgoKCnR5cGVkZWYgZG91YmxlICogZ3Ns
X2NvbXBsZXhfcGFja2VkX2FycmF5IDsKdHlwZWRlZiBmbG9hdCAqIGdzbF9jb21wbGV4X3BhY2tl
ZF9hcnJheV9mbG9hdCA7CnR5cGVkZWYgbG9uZyBkb3VibGUgKiBnc2xfY29tcGxleF9wYWNrZWRf
YXJyYXlfbG9uZ19kb3VibGUgOwoKdHlwZWRlZiBjb25zdCBkb3VibGUgKiBnc2xfY29uc3RfY29t
cGxleF9wYWNrZWRfYXJyYXkgOwp0eXBlZGVmIGNvbnN0IGZsb2F0ICogZ3NsX2NvbnN0X2NvbXBs
ZXhfcGFja2VkX2FycmF5X2Zsb2F0IDsKdHlwZWRlZiBjb25zdCBsb25nIGRvdWJsZSAqIGdzbF9j
b25zdF9jb21wbGV4X3BhY2tlZF9hcnJheV9sb25nX2RvdWJsZSA7CgoKCgoKCgp0eXBlZGVmIGRv
dWJsZSAqIGdzbF9jb21wbGV4X3BhY2tlZF9wdHIgOwp0eXBlZGVmIGZsb2F0ICogZ3NsX2NvbXBs
ZXhfcGFja2VkX2Zsb2F0X3B0ciA7CnR5cGVkZWYgbG9uZyBkb3VibGUgKiBnc2xfY29tcGxleF9w
YWNrZWRfbG9uZ19kb3VibGVfcHRyIDsKCnR5cGVkZWYgY29uc3QgZG91YmxlICogZ3NsX2NvbnN0
X2NvbXBsZXhfcGFja2VkX3B0ciA7CnR5cGVkZWYgY29uc3QgZmxvYXQgKiBnc2xfY29uc3RfY29t
cGxleF9wYWNrZWRfZmxvYXRfcHRyIDsKdHlwZWRlZiBjb25zdCBsb25nIGRvdWJsZSAqIGdzbF9j
b25zdF9jb21wbGV4X3BhY2tlZF9sb25nX2RvdWJsZV9wdHIgOwoKCnR5cGVkZWYgc3RydWN0CiAg
ewogICAgbG9uZyBkb3VibGUgZGF0WzJdOwogIH0KZ3NsX2NvbXBsZXhfbG9uZ19kb3VibGU7Cgp0
eXBlZGVmIHN0cnVjdAogIHsKICAgIGRvdWJsZSBkYXRbMl07CiAgfQpnc2xfY29tcGxleDsKCnR5
cGVkZWYgc3RydWN0CiAgewogICAgZmxvYXQgZGF0WzJdOwogIH0KZ3NsX2NvbXBsZXhfZmxvYXQ7
CiMgMTAxICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9jb21wbGV4LmgiIDMKCiMgMjYgIi91c3IvaW5j
bHVkZS9nc2wvZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlLmgiIDIgMwojIDEgIi91c3Iv
aW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNs
dWRlL2dzbC9nc2xfdmVjdG9yX2xvbmdfZG91YmxlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ3Ns
L2dzbF9ibG9ja19sb25nX2RvdWJsZS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2dzbC9nc2xf
YmxvY2tfbG9uZ19kb3VibGUuaCIgMwoKCnN0cnVjdCBnc2xfYmxvY2tfbG9uZ19kb3VibGVfc3Ry
dWN0CnsKICBzaXplX3Qgc2l6ZTsKICBsb25nIGRvdWJsZSAqZGF0YTsKfTsKCnR5cGVkZWYgc3Ry
dWN0IGdzbF9ibG9ja19sb25nX2RvdWJsZV9zdHJ1Y3QgZ3NsX2Jsb2NrX2xvbmdfZG91YmxlOwoK
Z3NsX2Jsb2NrX2xvbmdfZG91YmxlICpnc2xfYmxvY2tfbG9uZ19kb3VibGVfYWxsb2MgKGNvbnN0
IHNpemVfdCBuKTsKZ3NsX2Jsb2NrX2xvbmdfZG91YmxlICpnc2xfYmxvY2tfbG9uZ19kb3VibGVf
Y2FsbG9jIChjb25zdCBzaXplX3Qgbik7CnZvaWQgZ3NsX2Jsb2NrX2xvbmdfZG91YmxlX2ZyZWUg
KGdzbF9ibG9ja19sb25nX2RvdWJsZSAqIGIpOwoKaW50IGdzbF9ibG9ja19sb25nX2RvdWJsZV9m
cmVhZCAoRklMRSAqIHN0cmVhbSwgZ3NsX2Jsb2NrX2xvbmdfZG91YmxlICogYik7CmludCBnc2xf
YmxvY2tfbG9uZ19kb3VibGVfZndyaXRlIChGSUxFICogc3RyZWFtLCBjb25zdCBnc2xfYmxvY2tf
bG9uZ19kb3VibGUgKiBiKTsKaW50IGdzbF9ibG9ja19sb25nX2RvdWJsZV9mc2NhbmYgKEZJTEUg
KiBzdHJlYW0sIGdzbF9ibG9ja19sb25nX2RvdWJsZSAqIGIpOwppbnQgZ3NsX2Jsb2NrX2xvbmdf
ZG91YmxlX2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja19sb25nX2RvdWJs
ZSAqIGIsIGNvbnN0IGNoYXIgKmZvcm1hdCk7CgppbnQgZ3NsX2Jsb2NrX2xvbmdfZG91YmxlX3Jh
d19mcmVhZCAoRklMRSAqIHN0cmVhbSwgbG9uZyBkb3VibGUgKiBiLCBjb25zdCBzaXplX3Qgbiwg
Y29uc3Qgc2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfbG9uZ19kb3VibGVfcmF3X2Z3cml0
ZSAoRklMRSAqIHN0cmVhbSwgY29uc3QgbG9uZyBkb3VibGUgKiBiLCBjb25zdCBzaXplX3Qgbiwg
Y29uc3Qgc2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfbG9uZ19kb3VibGVfcmF3X2ZzY2Fu
ZiAoRklMRSAqIHN0cmVhbSwgbG9uZyBkb3VibGUgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qg
c2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfbG9uZ19kb3VibGVfcmF3X2ZwcmludGYgKEZJ
TEUgKiBzdHJlYW0sIGNvbnN0IGxvbmcgZG91YmxlICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0
IHNpemVfdCBzdHJpZGUsIGNvbnN0IGNoYXIgKmZvcm1hdCk7CgpzaXplX3QgZ3NsX2Jsb2NrX2xv
bmdfZG91YmxlX3NpemUgKGNvbnN0IGdzbF9ibG9ja19sb25nX2RvdWJsZSAqIGIpOwpsb25nIGRv
dWJsZSAqIGdzbF9ibG9ja19sb25nX2RvdWJsZV9kYXRhIChjb25zdCBnc2xfYmxvY2tfbG9uZ19k
b3VibGUgKiBiKTsKCgojIDI2ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfbG9uZ19kb3Vi
bGUuaCIgMiAzCiMgMzcgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZS5o
IiAzCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHNpemVfdCBzaXplOwogIHNpemVfdCBzdHJpZGU7CiAg
bG9uZyBkb3VibGUgKmRhdGE7CiAgZ3NsX2Jsb2NrX2xvbmdfZG91YmxlICpibG9jazsKICBpbnQg
b3duZXI7Cn0KZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZTsKCnR5cGVkZWYgc3RydWN0CnsKICBnc2xf
dmVjdG9yX2xvbmdfZG91YmxlIHZlY3RvcjsKfSBfZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV92aWV3
OwoKdHlwZWRlZiBfZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV92aWV3IGdzbF92ZWN0b3JfbG9uZ19k
b3VibGVfdmlldzsKCnR5cGVkZWYgc3RydWN0CnsKICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlIHZl
Y3RvcjsKfSBfZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9jb25zdF92aWV3OwoKdHlwZWRlZiBjb25z
dCBfZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9jb25zdF92aWV3IGdzbF92ZWN0b3JfbG9uZ19kb3Vi
bGVfY29uc3RfdmlldzsKCgoKCmdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKmdzbF92ZWN0b3JfbG9u
Z19kb3VibGVfYWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAq
Z3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9jYWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKCmdzbF92ZWN0
b3JfbG9uZ19kb3VibGUgKmdzbF92ZWN0b3JfbG9uZ19kb3VibGVfYWxsb2NfZnJvbV9ibG9jayAo
Z3NsX2Jsb2NrX2xvbmdfZG91YmxlICogYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgb2Zmc2V0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBuLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHNpemVfdCBzdHJpZGUpOwoKZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAqZ3NsX3ZlY3Rvcl9sb25n
X2RvdWJsZV9hbGxvY19mcm9tX3ZlY3RvciAoZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAqIHYsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHNpemVfdCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgc3RyaWRlKTsKCnZvaWQgZ3Ns
X3ZlY3Rvcl9sb25nX2RvdWJsZV9mcmVlIChnc2xfdmVjdG9yX2xvbmdfZG91YmxlICogdik7CgoK
Cl9nc2xfdmVjdG9yX2xvbmdfZG91YmxlX3ZpZXcKZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV92aWV3
X2FycmF5IChsb25nIGRvdWJsZSAqdiwgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfbG9uZ19kb3Vi
bGVfdmlldwpnc2xfdmVjdG9yX2xvbmdfZG91YmxlX3ZpZXdfYXJyYXlfd2l0aF9zdHJpZGUgKGxv
bmcgZG91YmxlICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfbG9uZ19kb3VibGVfY29uc3Rfdmlldwpnc2xfdmVjdG9y
X2xvbmdfZG91YmxlX2NvbnN0X3ZpZXdfYXJyYXkgKGNvbnN0IGxvbmcgZG91YmxlICp2LCBzaXpl
X3Qgbik7CgpfZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9jb25zdF92aWV3CmdzbF92ZWN0b3JfbG9u
Z19kb3VibGVfY29uc3Rfdmlld19hcnJheV93aXRoX3N0cmlkZSAoY29uc3QgbG9uZyBkb3VibGUg
KmJhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV92aWV3CmdzbF92ZWN0b3JfbG9u
Z19kb3VibGVfc3VidmVjdG9yIChnc2xfdmVjdG9yX2xvbmdfZG91YmxlICp2LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV92aWV3CmdzbF92ZWN0b3JfbG9uZ19k
b3VibGVfc3VidmVjdG9yX3dpdGhfc3RyaWRlIChnc2xfdmVjdG9yX2xvbmdfZG91YmxlICp2LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfbG9u
Z19kb3VibGVfY29uc3Rfdmlldwpnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2NvbnN0X3N1YnZlY3Rv
ciAoY29uc3QgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAqdiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfbG9uZ19kb3VibGVfY29uc3Rfdmlldwpnc2xfdmVjdG9y
X2xvbmdfZG91YmxlX2NvbnN0X3N1YnZlY3Rvcl93aXRoX3N0cmlkZSAoY29uc3QgZ3NsX3ZlY3Rv
cl9sb25nX2RvdWJsZSAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBuKTsKCgoKbG9uZyBkb3VibGUgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJs
ZV9nZXQgKGNvbnN0IGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiB2LCBjb25zdCBzaXplX3QgaSk7
CnZvaWQgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9zZXQgKGdzbF92ZWN0b3JfbG9uZ19kb3VibGUg
KiB2LCBjb25zdCBzaXplX3QgaSwgbG9uZyBkb3VibGUgeCk7Cgpsb25nIGRvdWJsZSAqZ3NsX3Zl
Y3Rvcl9sb25nX2RvdWJsZV9wdHIgKGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiB2LCBjb25zdCBz
aXplX3QgaSk7CmNvbnN0IGxvbmcgZG91YmxlICpnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2NvbnN0
X3B0ciAoY29uc3QgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAqIHYsIGNvbnN0IHNpemVfdCBpKTsK
CnZvaWQgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9zZXRfemVybyAoZ3NsX3ZlY3Rvcl9sb25nX2Rv
dWJsZSAqIHYpOwp2b2lkIGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfc2V0X2FsbCAoZ3NsX3ZlY3Rv
cl9sb25nX2RvdWJsZSAqIHYsIGxvbmcgZG91YmxlIHgpOwppbnQgZ3NsX3ZlY3Rvcl9sb25nX2Rv
dWJsZV9zZXRfYmFzaXMgKGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiB2LCBzaXplX3QgaSk7Cgpp
bnQgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9mcmVhZCAoRklMRSAqIHN0cmVhbSwgZ3NsX3ZlY3Rv
cl9sb25nX2RvdWJsZSAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9md3JpdGUgKEZJ
TEUgKiBzdHJlYW0sIGNvbnN0IGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiB2KTsKaW50IGdzbF92
ZWN0b3JfbG9uZ19kb3VibGVfZnNjYW5mIChGSUxFICogc3RyZWFtLCBnc2xfdmVjdG9yX2xvbmdf
ZG91YmxlICogdik7CmludCBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2ZwcmludGYgKEZJTEUgKiBz
dHJlYW0sIGNvbnN0IGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiB2LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQpOwoKaW50IGdzbF92ZWN0b3JfbG9uZ19k
b3VibGVfbWVtY3B5IChnc2xfdmVjdG9yX2xvbmdfZG91YmxlICogZGVzdCwgY29uc3QgZ3NsX3Zl
Y3Rvcl9sb25nX2RvdWJsZSAqIHNyYyk7CgppbnQgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9yZXZl
cnNlIChnc2xfdmVjdG9yX2xvbmdfZG91YmxlICogdik7CgppbnQgZ3NsX3ZlY3Rvcl9sb25nX2Rv
dWJsZV9zd2FwIChnc2xfdmVjdG9yX2xvbmdfZG91YmxlICogdiwgZ3NsX3ZlY3Rvcl9sb25nX2Rv
dWJsZSAqIHcpOwppbnQgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9zd2FwX2VsZW1lbnRzIChnc2xf
dmVjdG9yX2xvbmdfZG91YmxlICogdiwgY29uc3Qgc2l6ZV90IGksIGNvbnN0IHNpemVfdCBqKTsK
CmxvbmcgZG91YmxlIGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfbWF4IChjb25zdCBnc2xfdmVjdG9y
X2xvbmdfZG91YmxlICogdik7CmxvbmcgZG91YmxlIGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfbWlu
IChjb25zdCBnc2xfdmVjdG9yX2xvbmdfZG91YmxlICogdik7CnZvaWQgZ3NsX3ZlY3Rvcl9sb25n
X2RvdWJsZV9taW5tYXggKGNvbnN0IGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiB2LCBsb25nIGRv
dWJsZSAqIG1pbl9vdXQsIGxvbmcgZG91YmxlICogbWF4X291dCk7CgpzaXplX3QgZ3NsX3ZlY3Rv
cl9sb25nX2RvdWJsZV9tYXhfaW5kZXggKGNvbnN0IGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiB2
KTsKc2l6ZV90IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfbWluX2luZGV4IChjb25zdCBnc2xfdmVj
dG9yX2xvbmdfZG91YmxlICogdik7CnZvaWQgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9taW5tYXhf
aW5kZXggKGNvbnN0IGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiB2LCBzaXplX3QgKiBpbWluLCBz
aXplX3QgKiBpbWF4KTsKCmludCBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2FkZCAoZ3NsX3ZlY3Rv
cl9sb25nX2RvdWJsZSAqIGEsIGNvbnN0IGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiBiKTsKaW50
IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfc3ViIChnc2xfdmVjdG9yX2xvbmdfZG91YmxlICogYSwg
Y29uc3QgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAqIGIpOwppbnQgZ3NsX3ZlY3Rvcl9sb25nX2Rv
dWJsZV9tdWwgKGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiBhLCBjb25zdCBnc2xfdmVjdG9yX2xv
bmdfZG91YmxlICogYik7CmludCBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2RpdiAoZ3NsX3ZlY3Rv
cl9sb25nX2RvdWJsZSAqIGEsIGNvbnN0IGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiBiKTsKaW50
IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfc2NhbGUgKGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiBh
LCBjb25zdCBkb3VibGUgeCk7CmludCBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2FkZF9jb25zdGFu
dCAoZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAqIGEsIGNvbnN0IGRvdWJsZSB4KTsKCmludCBnc2xf
dmVjdG9yX2xvbmdfZG91YmxlX2lzbnVsbCAoY29uc3QgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAq
IHYpOwoKZXh0ZXJuIGludCBnc2xfY2hlY2tfcmFuZ2U7CgoKCmV4dGVybiBpbmxpbmUKbG9uZyBk
b3VibGUKZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9nZXQgKGNvbnN0IGdzbF92ZWN0b3JfbG9uZ19k
b3VibGUgKiB2LCBjb25zdCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewog
ICAgICBkbyB7IGdzbF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUv
Z3NsL2dzbF92ZWN0b3JfbG9uZ19kb3VibGUuaCIsIDE3NCwgR1NMX0VJTlZBTCkgOyByZXR1cm4g
MCA7IH0gd2hpbGUgKDApOwogICAgfQoKICByZXR1cm4gdi0+ZGF0YVtpICogdi0+c3RyaWRlXTsK
fQoKZXh0ZXJuIGlubGluZQp2b2lkCmdzbF92ZWN0b3JfbG9uZ19kb3VibGVfc2V0IChnc2xfdmVj
dG9yX2xvbmdfZG91YmxlICogdiwgY29uc3Qgc2l6ZV90IGksIGxvbmcgZG91YmxlIHgpCnsKCiAg
aWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQg
b2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2xvbmdfZG91YmxlLmgiLCAx
ODcsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHYtPmRhdGFb
aSAqIHYtPnN0cmlkZV0gPSB4Owp9CgpleHRlcm4gaW5saW5lCmxvbmcgZG91YmxlICoKZ3NsX3Zl
Y3Rvcl9sb25nX2RvdWJsZV9wdHIgKGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiB2LCBjb25zdCBz
aXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAgICBkbyB7IGdzbF9lcnJv
ciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfbG9u
Z19kb3VibGUuaCIsIDIwMCwgR1NMX0VJTlZBTCkgOyByZXR1cm4gMCA7IH0gd2hpbGUgKDApOwog
ICAgfQoKICByZXR1cm4gKGxvbmcgZG91YmxlICopICh2LT5kYXRhICsgaSAqIHYtPnN0cmlkZSk7
Cn0KCmV4dGVybiBpbmxpbmUKY29uc3QgbG9uZyBkb3VibGUgKgpnc2xfdmVjdG9yX2xvbmdfZG91
YmxlX2NvbnN0X3B0ciAoY29uc3QgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAqIHYsIGNvbnN0IHNp
emVfdCBpKQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9y
ICgiaW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9sb25n
X2RvdWJsZS5oIiwgMjEzLCBHU0xfRUlOVkFMKSA7IHJldHVybiAwIDsgfSB3aGlsZSAoMCk7CiAg
ICB9CgogIHJldHVybiAoY29uc3QgbG9uZyBkb3VibGUgKikgKHYtPmRhdGEgKyBpICogdi0+c3Ry
aWRlKTsKfQoKCgoKCiMgMjcgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9jb21wbGV4X2xv
bmdfZG91YmxlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9jb21wbGV4
LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfY29tcGxleF9sb25nX2Rv
dWJsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9ibG9ja19jb21wbGV4X2xvbmdf
ZG91YmxlLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9ibG9ja19jb21wbGV4X2xv
bmdfZG91YmxlLmgiIDMKCgpzdHJ1Y3QgZ3NsX2Jsb2NrX2NvbXBsZXhfbG9uZ19kb3VibGVfc3Ry
dWN0CnsKICBzaXplX3Qgc2l6ZTsKICBsb25nIGRvdWJsZSAqZGF0YTsKfTsKCnR5cGVkZWYgc3Ry
dWN0IGdzbF9ibG9ja19jb21wbGV4X2xvbmdfZG91YmxlX3N0cnVjdCBnc2xfYmxvY2tfY29tcGxl
eF9sb25nX2RvdWJsZTsKCmdzbF9ibG9ja19jb21wbGV4X2xvbmdfZG91YmxlICpnc2xfYmxvY2tf
Y29tcGxleF9sb25nX2RvdWJsZV9hbGxvYyAoY29uc3Qgc2l6ZV90IG4pOwpnc2xfYmxvY2tfY29t
cGxleF9sb25nX2RvdWJsZSAqZ3NsX2Jsb2NrX2NvbXBsZXhfbG9uZ19kb3VibGVfY2FsbG9jIChj
b25zdCBzaXplX3Qgbik7CnZvaWQgZ3NsX2Jsb2NrX2NvbXBsZXhfbG9uZ19kb3VibGVfZnJlZSAo
Z3NsX2Jsb2NrX2NvbXBsZXhfbG9uZ19kb3VibGUgKiBiKTsKCmludCBnc2xfYmxvY2tfY29tcGxl
eF9sb25nX2RvdWJsZV9mcmVhZCAoRklMRSAqIHN0cmVhbSwgZ3NsX2Jsb2NrX2NvbXBsZXhfbG9u
Z19kb3VibGUgKiBiKTsKaW50IGdzbF9ibG9ja19jb21wbGV4X2xvbmdfZG91YmxlX2Z3cml0ZSAo
RklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX2Jsb2NrX2NvbXBsZXhfbG9uZ19kb3VibGUgKiBiKTsK
aW50IGdzbF9ibG9ja19jb21wbGV4X2xvbmdfZG91YmxlX2ZzY2FuZiAoRklMRSAqIHN0cmVhbSwg
Z3NsX2Jsb2NrX2NvbXBsZXhfbG9uZ19kb3VibGUgKiBiKTsKaW50IGdzbF9ibG9ja19jb21wbGV4
X2xvbmdfZG91YmxlX2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja19jb21w
bGV4X2xvbmdfZG91YmxlICogYiwgY29uc3QgY2hhciAqZm9ybWF0KTsKCmludCBnc2xfYmxvY2tf
Y29tcGxleF9sb25nX2RvdWJsZV9yYXdfZnJlYWQgKEZJTEUgKiBzdHJlYW0sIGxvbmcgZG91Ymxl
ICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUpOwppbnQgZ3NsX2Jsb2Nr
X2NvbXBsZXhfbG9uZ19kb3VibGVfcmF3X2Z3cml0ZSAoRklMRSAqIHN0cmVhbSwgY29uc3QgbG9u
ZyBkb3VibGUgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSk7CmludCBn
c2xfYmxvY2tfY29tcGxleF9sb25nX2RvdWJsZV9yYXdfZnNjYW5mIChGSUxFICogc3RyZWFtLCBs
b25nIGRvdWJsZSAqIGIsIGNvbnN0IHNpemVfdCBuLCBjb25zdCBzaXplX3Qgc3RyaWRlKTsKaW50
IGdzbF9ibG9ja19jb21wbGV4X2xvbmdfZG91YmxlX3Jhd19mcHJpbnRmIChGSUxFICogc3RyZWFt
LCBjb25zdCBsb25nIGRvdWJsZSAqIGIsIGNvbnN0IHNpemVfdCBuLCBjb25zdCBzaXplX3Qgc3Ry
aWRlLCBjb25zdCBjaGFyICpmb3JtYXQpOwoKc2l6ZV90IGdzbF9ibG9ja19jb21wbGV4X2xvbmdf
ZG91YmxlX3NpemUgKGNvbnN0IGdzbF9ibG9ja19jb21wbGV4X2xvbmdfZG91YmxlICogYik7Cmxv
bmcgZG91YmxlICogZ3NsX2Jsb2NrX2NvbXBsZXhfbG9uZ19kb3VibGVfZGF0YSAoY29uc3QgZ3Ns
X2Jsb2NrX2NvbXBsZXhfbG9uZ19kb3VibGUgKiBiKTsKCgojIDI5ICIvdXNyL2luY2x1ZGUvZ3Ns
L2dzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZS5oIiAyIDMKIyA0MCAiL3Vzci9pbmNsdWRl
L2dzbC9nc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGUuaCIgMwoKCnR5cGVkZWYgc3RydWN0
CnsKICBzaXplX3Qgc2l6ZTsKICBzaXplX3Qgc3RyaWRlOwogIGxvbmcgZG91YmxlICpkYXRhOwog
IGdzbF9ibG9ja19jb21wbGV4X2xvbmdfZG91YmxlICpibG9jazsKICBpbnQgb3duZXI7Cn0gZ3Ns
X3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlOwoKdHlwZWRlZiBzdHJ1Y3QKewogIGdzbF92ZWN0
b3JfY29tcGxleF9sb25nX2RvdWJsZSB2ZWN0b3I7Cn0gX2dzbF92ZWN0b3JfY29tcGxleF9sb25n
X2RvdWJsZV92aWV3OwoKdHlwZWRlZiBfZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3Zp
ZXcgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3ZpZXc7Cgp0eXBlZGVmIHN0cnVjdAp7
CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlIHZlY3RvcjsKfSBfZ3NsX3ZlY3Rvcl9j
b21wbGV4X2xvbmdfZG91YmxlX2NvbnN0X3ZpZXc7Cgp0eXBlZGVmIGNvbnN0IF9nc2xfdmVjdG9y
X2NvbXBsZXhfbG9uZ19kb3VibGVfY29uc3RfdmlldyBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19k
b3VibGVfY29uc3RfdmlldzsKCgoKZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlICpnc2xf
dmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfYWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKZ3NsX3Zl
Y3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlICpnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVf
Y2FsbG9jIChjb25zdCBzaXplX3Qgbik7Cgpnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGUg
Kgpnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfYWxsb2NfZnJvbV9ibG9jayAoZ3NsX2Js
b2NrX2NvbXBsZXhfbG9uZ19kb3VibGUgKiBiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBuLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHN0cmlkZSk7Cgpnc2xfdmVjdG9y
X2NvbXBsZXhfbG9uZ19kb3VibGUgKgpnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfYWxs
b2NfZnJvbV92ZWN0b3IgKGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqIHYsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBvZmZz
ZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNp
emVfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzaXplX3Qgc3RyaWRlKTsKCnZvaWQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX2Zy
ZWUgKGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqIHYpOwoKCgpfZ3NsX3ZlY3Rvcl9j
b21wbGV4X2xvbmdfZG91YmxlX3ZpZXcKZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3Zp
ZXdfYXJyYXkgKGxvbmcgZG91YmxlICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV92aWV3
CmdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV92aWV3X2FycmF5X3dpdGhfc3RyaWRlIChs
b25nIGRvdWJsZSAqYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91
YmxlX2NvbnN0X3ZpZXcKZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX2NvbnN0X3ZpZXdf
YXJyYXkgKGNvbnN0IGxvbmcgZG91YmxlICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY29tcGxleF9sb25nX2Rv
dWJsZV9jb25zdF92aWV3CmdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV9jb25zdF92aWV3
X2FycmF5X3dpdGhfc3RyaWRlIChjb25zdCBsb25nIGRvdWJsZSAqYmFzZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3ZpZXcKZ3NsX3ZlY3Rv
cl9jb21wbGV4X2xvbmdfZG91YmxlX3N1YnZlY3RvciAoZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdf
ZG91YmxlICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBu
KTsKCgpfZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3ZpZXcKZ3NsX3ZlY3Rvcl9jb21w
bGV4X2xvbmdfZG91YmxlX3N1YnZlY3Rvcl93aXRoX3N0cmlkZSAoZ3NsX3ZlY3Rvcl9jb21wbGV4
X2xvbmdfZG91YmxlICp2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJs
ZV9jb25zdF92aWV3CmdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV9jb25zdF9zdWJ2ZWN0
b3IgKGNvbnN0IGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqYmFzZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgoKX2dzbF92
ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV9jb25zdF92aWV3CmdzbF92ZWN0b3JfY29tcGxleF9s
b25nX2RvdWJsZV9jb25zdF9zdWJ2ZWN0b3Jfd2l0aF9zdHJpZGUgKGNvbnN0IGdzbF92ZWN0b3Jf
Y29tcGxleF9sb25nX2RvdWJsZSAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCl9nc2xf
dmVjdG9yX2xvbmdfZG91YmxlX3ZpZXcKZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3Jl
YWwgKGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqdik7CgpfZ3NsX3ZlY3Rvcl9sb25n
X2RvdWJsZV92aWV3CmdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV9pbWFnIChnc2xfdmVj
dG9yX2NvbXBsZXhfbG9uZ19kb3VibGUgKnYpOwoKX2dzbF92ZWN0b3JfbG9uZ19kb3VibGVfY29u
c3Rfdmlldwpnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfY29uc3RfcmVhbCAoY29uc3Qg
Z3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlICp2KTsKCl9nc2xfdmVjdG9yX2xvbmdfZG91
YmxlX2NvbnN0X3ZpZXcKZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX2NvbnN0X2ltYWcg
KGNvbnN0IGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqdik7CgoKCgpnc2xfY29tcGxl
eF9sb25nX2RvdWJsZQpnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfZ2V0IChjb25zdCBn
c2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGUgKiB2LCBjb25zdCBzaXplX3QgaSk7Cgp2b2lk
IGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV9zZXQgKGdzbF92ZWN0b3JfY29tcGxleF9s
b25nX2RvdWJsZSAqIHYsIGNvbnN0IHNpemVfdCBpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdzbF9jb21wbGV4X2xvbmdfZG91YmxlIHopOwoKZ3NsX2NvbXBsZXhfbG9uZ19k
b3VibGUKKmdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV9wdHIgKGdzbF92ZWN0b3JfY29t
cGxleF9sb25nX2RvdWJsZSAqIHYsIGNvbnN0IHNpemVfdCBpKTsKCmNvbnN0IGdzbF9jb21wbGV4
X2xvbmdfZG91YmxlCipnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfY29uc3RfcHRyIChj
b25zdCBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGUgKiB2LCBjb25zdCBzaXplX3QgaSk7
Cgp2b2lkIGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV9zZXRfemVybyAoZ3NsX3ZlY3Rv
cl9jb21wbGV4X2xvbmdfZG91YmxlICogdik7CnZvaWQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdf
ZG91YmxlX3NldF9hbGwgKGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqIHYsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzbF9jb21wbGV4X2xvbmdfZG91Ymxl
IHopOwppbnQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3NldF9iYXNpcyAoZ3NsX3Zl
Y3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlICogdiwgc2l6ZV90IGkpOwoKaW50IGdzbF92ZWN0b3Jf
Y29tcGxleF9sb25nX2RvdWJsZV9mcmVhZCAoRklMRSAqIHN0cmVhbSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlICogdik7
CmludCBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfZndyaXRlIChGSUxFICogc3RyZWFt
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3NsX3ZlY3Rvcl9j
b21wbGV4X2xvbmdfZG91YmxlICogdik7CmludCBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3Vi
bGVfZnNjYW5mIChGSUxFICogc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlICogdik7CmludCBnc2xfdmVjdG9y
X2NvbXBsZXhfbG9uZ19kb3VibGVfZnByaW50ZiAoRklMRSAqIHN0cmVhbSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19k
b3VibGUgKiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKmZvcm1hdCk7CgppbnQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX21lbWNweSAo
Z3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlICogZGVzdCwgY29uc3QgZ3NsX3ZlY3Rvcl9j
b21wbGV4X2xvbmdfZG91YmxlICogc3JjKTsKCmludCBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19k
b3VibGVfcmV2ZXJzZSAoZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlICogdik7CgppbnQg
Z3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3N3YXAgKGdzbF92ZWN0b3JfY29tcGxleF9s
b25nX2RvdWJsZSAqIHYsIGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqIHcpOwppbnQg
Z3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3N3YXBfZWxlbWVudHMgKGdzbF92ZWN0b3Jf
Y29tcGxleF9sb25nX2RvdWJsZSAqIHYsIGNvbnN0IHNpemVfdCBpLCBjb25zdCBzaXplX3Qgaik7
CgppbnQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX2lzbnVsbCAoY29uc3QgZ3NsX3Zl
Y3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlICogdik7CgpleHRlcm4gaW50IGdzbF9jaGVja19yYW5n
ZTsKCgoKZXh0ZXJuIGlubGluZQpnc2xfY29tcGxleF9sb25nX2RvdWJsZQpnc2xfdmVjdG9yX2Nv
bXBsZXhfbG9uZ19kb3VibGVfZ2V0IChjb25zdCBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3Vi
bGUgKiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgaSkKewoK
ICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAgICBjb25zdCBnc2xfY29tcGxleF9sb25nX2Rv
dWJsZSB6ZXJvID0ge3swLCAwfX07CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0IG9m
IHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91Ymxl
LmgiLCAxOTIsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIHplcm8gOyB9IHdoaWxlICgwKTsKICAgIH0K
CiAgcmV0dXJuICooKGdzbF9jb21wbGV4X2xvbmdfZG91YmxlKikmKCh2KS0+ZGF0YVsyKihpKSoo
diktPnN0cmlkZV0pKTsKfQoKZXh0ZXJuIGlubGluZQp2b2lkCmdzbF92ZWN0b3JfY29tcGxleF9s
b25nX2RvdWJsZV9zZXQgKGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqIHYsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBpLCBnc2xfY29tcGxleF9sb25n
X2RvdWJsZSB6KQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vy
cm9yICgiaW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9j
b21wbGV4X2xvbmdfZG91YmxlLmgiLCAyMDYsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDsgfSB3aGls
ZSAoMCk7CiAgICB9CgogICooKGdzbF9jb21wbGV4X2xvbmdfZG91YmxlKikmKCh2KS0+ZGF0YVsy
KihpKSoodiktPnN0cmlkZV0pKSA9IHo7Cn0KCmV4dGVybiBpbmxpbmUKZ3NsX2NvbXBsZXhfbG9u
Z19kb3VibGUgKgpnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfcHRyIChnc2xfdmVjdG9y
X2NvbXBsZXhfbG9uZ19kb3VibGUgKiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAgICBkbyB7IGdz
bF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0
b3JfY29tcGxleF9sb25nX2RvdWJsZS5oIiwgMjIwLCBHU0xfRUlOVkFMKSA7IHJldHVybiAwIDsg
fSB3aGlsZSAoMCk7CiAgICB9CgogIHJldHVybiAoKGdzbF9jb21wbGV4X2xvbmdfZG91YmxlKikm
KCh2KS0+ZGF0YVsyKihpKSoodiktPnN0cmlkZV0pKTsKfQoKZXh0ZXJuIGlubGluZQpjb25zdCBn
c2xfY29tcGxleF9sb25nX2RvdWJsZSAqCmdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV9j
b25zdF9wdHIgKGNvbnN0IGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqIHYsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBpKQp7CgogIGlmIChp
ID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0IG9mIHJh
bmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlLmgi
LCAyMzQsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDAgOyB9IHdoaWxlICgwKTsKICAgIH0KCiAgcmV0
dXJuICgoZ3NsX2NvbXBsZXhfbG9uZ19kb3VibGUqKSYoKHYpLT5kYXRhWzIqKGkpKih2KS0+c3Ry
aWRlXSkpOwp9CgoKCgoKIyA1ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3IuaCIgMiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2NvbXBsZXhfZG91YmxlLmgiIDEgMwojIDI2
ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfY29tcGxleF9kb3VibGUuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9kb3VibGUuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVk
ZS9nc2wvZ3NsX3ZlY3Rvcl9kb3VibGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX2Js
b2NrX2RvdWJsZS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfYmxvY2tfZG91Ymxl
LmgiIDMKCgpzdHJ1Y3QgZ3NsX2Jsb2NrX3N0cnVjdAp7CiAgc2l6ZV90IHNpemU7CiAgZG91Ymxl
ICpkYXRhOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgZ3NsX2Jsb2NrX3N0cnVjdCBnc2xfYmxvY2s7Cgpn
c2xfYmxvY2sgKmdzbF9ibG9ja19hbGxvYyAoY29uc3Qgc2l6ZV90IG4pOwpnc2xfYmxvY2sgKmdz
bF9ibG9ja19jYWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKdm9pZCBnc2xfYmxvY2tfZnJlZSAoZ3Ns
X2Jsb2NrICogYik7CgppbnQgZ3NsX2Jsb2NrX2ZyZWFkIChGSUxFICogc3RyZWFtLCBnc2xfYmxv
Y2sgKiBiKTsKaW50IGdzbF9ibG9ja19md3JpdGUgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9i
bG9jayAqIGIpOwppbnQgZ3NsX2Jsb2NrX2ZzY2FuZiAoRklMRSAqIHN0cmVhbSwgZ3NsX2Jsb2Nr
ICogYik7CmludCBnc2xfYmxvY2tfZnByaW50ZiAoRklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX2Js
b2NrICogYiwgY29uc3QgY2hhciAqZm9ybWF0KTsKCmludCBnc2xfYmxvY2tfcmF3X2ZyZWFkIChG
SUxFICogc3RyZWFtLCBkb3VibGUgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0
cmlkZSk7CmludCBnc2xfYmxvY2tfcmF3X2Z3cml0ZSAoRklMRSAqIHN0cmVhbSwgY29uc3QgZG91
YmxlICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUpOwppbnQgZ3NsX2Js
b2NrX3Jhd19mc2NhbmYgKEZJTEUgKiBzdHJlYW0sIGRvdWJsZSAqIGIsIGNvbnN0IHNpemVfdCBu
LCBjb25zdCBzaXplX3Qgc3RyaWRlKTsKaW50IGdzbF9ibG9ja19yYXdfZnByaW50ZiAoRklMRSAq
IHN0cmVhbSwgY29uc3QgZG91YmxlICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBz
dHJpZGUsIGNvbnN0IGNoYXIgKmZvcm1hdCk7CgpzaXplX3QgZ3NsX2Jsb2NrX3NpemUgKGNvbnN0
IGdzbF9ibG9jayAqIGIpOwpkb3VibGUgKiBnc2xfYmxvY2tfZGF0YSAoY29uc3QgZ3NsX2Jsb2Nr
ICogYik7CgoKIyAyNiAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2RvdWJsZS5oIiAyIDMK
IyAzNyAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2RvdWJsZS5oIiAzCgoKdHlwZWRlZiBz
dHJ1Y3QKewogIHNpemVfdCBzaXplOwogIHNpemVfdCBzdHJpZGU7CiAgZG91YmxlICpkYXRhOwog
IGdzbF9ibG9jayAqYmxvY2s7CiAgaW50IG93bmVyOwp9CmdzbF92ZWN0b3I7Cgp0eXBlZGVmIHN0
cnVjdAp7CiAgZ3NsX3ZlY3RvciB2ZWN0b3I7Cn0gX2dzbF92ZWN0b3JfdmlldzsKCnR5cGVkZWYg
X2dzbF92ZWN0b3JfdmlldyBnc2xfdmVjdG9yX3ZpZXc7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgZ3Ns
X3ZlY3RvciB2ZWN0b3I7Cn0gX2dzbF92ZWN0b3JfY29uc3RfdmlldzsKCnR5cGVkZWYgY29uc3Qg
X2dzbF92ZWN0b3JfY29uc3RfdmlldyBnc2xfdmVjdG9yX2NvbnN0X3ZpZXc7CgoKCgpnc2xfdmVj
dG9yICpnc2xfdmVjdG9yX2FsbG9jIChjb25zdCBzaXplX3Qgbik7CmdzbF92ZWN0b3IgKmdzbF92
ZWN0b3JfY2FsbG9jIChjb25zdCBzaXplX3Qgbik7Cgpnc2xfdmVjdG9yICpnc2xfdmVjdG9yX2Fs
bG9jX2Zyb21fYmxvY2sgKGdzbF9ibG9jayAqIGIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG9mZnNldCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qg
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzaXplX3Qgc3RyaWRlKTsKCmdzbF92ZWN0b3IgKmdzbF92ZWN0b3JfYWxsb2NfZnJvbV92
ZWN0b3IgKGdzbF92ZWN0b3IgKiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgb2Zmc2V0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c2l6ZV90IHN0cmlkZSk7Cgp2b2lkIGdzbF92ZWN0b3JfZnJlZSAoZ3NsX3ZlY3RvciAqIHYpOwoK
CgpfZ3NsX3ZlY3Rvcl92aWV3CmdzbF92ZWN0b3Jfdmlld19hcnJheSAoZG91YmxlICp2LCBzaXpl
X3Qgbik7CgpfZ3NsX3ZlY3Rvcl92aWV3CmdzbF92ZWN0b3Jfdmlld19hcnJheV93aXRoX3N0cmlk
ZSAoZG91YmxlICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY29uc3Rfdmlldwpnc2xfdmVjdG9yX2NvbnN0X3ZpZXdf
YXJyYXkgKGNvbnN0IGRvdWJsZSAqdiwgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY29uc3Rfdmll
dwpnc2xfdmVjdG9yX2NvbnN0X3ZpZXdfYXJyYXlfd2l0aF9zdHJpZGUgKGNvbnN0IGRvdWJsZSAq
YmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX3ZpZXcKZ3NsX3ZlY3Rvcl9zdWJ2ZWN0b3IgKGdzbF92
ZWN0b3IgKnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX3ZpZXcKZ3NsX3ZlY3Rv
cl9zdWJ2ZWN0b3Jfd2l0aF9zdHJpZGUgKGdzbF92ZWN0b3IgKnYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9jb25zdF92aWV3CmdzbF92ZWN0
b3JfY29uc3Rfc3VidmVjdG9yIChjb25zdCBnc2xfdmVjdG9yICp2LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9jb25zdF92aWV3CmdzbF92ZWN0b3JfY29uc3Rf
c3VidmVjdG9yX3dpdGhfc3RyaWRlIChjb25zdCBnc2xfdmVjdG9yICp2LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKCgpkb3VibGUg
Z3NsX3ZlY3Rvcl9nZXQgKGNvbnN0IGdzbF92ZWN0b3IgKiB2LCBjb25zdCBzaXplX3QgaSk7CnZv
aWQgZ3NsX3ZlY3Rvcl9zZXQgKGdzbF92ZWN0b3IgKiB2LCBjb25zdCBzaXplX3QgaSwgZG91Ymxl
IHgpOwoKZG91YmxlICpnc2xfdmVjdG9yX3B0ciAoZ3NsX3ZlY3RvciAqIHYsIGNvbnN0IHNpemVf
dCBpKTsKY29uc3QgZG91YmxlICpnc2xfdmVjdG9yX2NvbnN0X3B0ciAoY29uc3QgZ3NsX3ZlY3Rv
ciAqIHYsIGNvbnN0IHNpemVfdCBpKTsKCnZvaWQgZ3NsX3ZlY3Rvcl9zZXRfemVybyAoZ3NsX3Zl
Y3RvciAqIHYpOwp2b2lkIGdzbF92ZWN0b3Jfc2V0X2FsbCAoZ3NsX3ZlY3RvciAqIHYsIGRvdWJs
ZSB4KTsKaW50IGdzbF92ZWN0b3Jfc2V0X2Jhc2lzIChnc2xfdmVjdG9yICogdiwgc2l6ZV90IGkp
OwoKaW50IGdzbF92ZWN0b3JfZnJlYWQgKEZJTEUgKiBzdHJlYW0sIGdzbF92ZWN0b3IgKiB2KTsK
aW50IGdzbF92ZWN0b3JfZndyaXRlIChGSUxFICogc3RyZWFtLCBjb25zdCBnc2xfdmVjdG9yICog
dik7CmludCBnc2xfdmVjdG9yX2ZzY2FuZiAoRklMRSAqIHN0cmVhbSwgZ3NsX3ZlY3RvciAqIHYp
OwppbnQgZ3NsX3ZlY3Rvcl9mcHJpbnRmIChGSUxFICogc3RyZWFtLCBjb25zdCBnc2xfdmVjdG9y
ICogdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0KTsK
CmludCBnc2xfdmVjdG9yX21lbWNweSAoZ3NsX3ZlY3RvciAqIGRlc3QsIGNvbnN0IGdzbF92ZWN0
b3IgKiBzcmMpOwoKaW50IGdzbF92ZWN0b3JfcmV2ZXJzZSAoZ3NsX3ZlY3RvciAqIHYpOwoKaW50
IGdzbF92ZWN0b3Jfc3dhcCAoZ3NsX3ZlY3RvciAqIHYsIGdzbF92ZWN0b3IgKiB3KTsKaW50IGdz
bF92ZWN0b3Jfc3dhcF9lbGVtZW50cyAoZ3NsX3ZlY3RvciAqIHYsIGNvbnN0IHNpemVfdCBpLCBj
b25zdCBzaXplX3Qgaik7Cgpkb3VibGUgZ3NsX3ZlY3Rvcl9tYXggKGNvbnN0IGdzbF92ZWN0b3Ig
KiB2KTsKZG91YmxlIGdzbF92ZWN0b3JfbWluIChjb25zdCBnc2xfdmVjdG9yICogdik7CnZvaWQg
Z3NsX3ZlY3Rvcl9taW5tYXggKGNvbnN0IGdzbF92ZWN0b3IgKiB2LCBkb3VibGUgKiBtaW5fb3V0
LCBkb3VibGUgKiBtYXhfb3V0KTsKCnNpemVfdCBnc2xfdmVjdG9yX21heF9pbmRleCAoY29uc3Qg
Z3NsX3ZlY3RvciAqIHYpOwpzaXplX3QgZ3NsX3ZlY3Rvcl9taW5faW5kZXggKGNvbnN0IGdzbF92
ZWN0b3IgKiB2KTsKdm9pZCBnc2xfdmVjdG9yX21pbm1heF9pbmRleCAoY29uc3QgZ3NsX3ZlY3Rv
ciAqIHYsIHNpemVfdCAqIGltaW4sIHNpemVfdCAqIGltYXgpOwoKaW50IGdzbF92ZWN0b3JfYWRk
IChnc2xfdmVjdG9yICogYSwgY29uc3QgZ3NsX3ZlY3RvciAqIGIpOwppbnQgZ3NsX3ZlY3Rvcl9z
dWIgKGdzbF92ZWN0b3IgKiBhLCBjb25zdCBnc2xfdmVjdG9yICogYik7CmludCBnc2xfdmVjdG9y
X211bCAoZ3NsX3ZlY3RvciAqIGEsIGNvbnN0IGdzbF92ZWN0b3IgKiBiKTsKaW50IGdzbF92ZWN0
b3JfZGl2IChnc2xfdmVjdG9yICogYSwgY29uc3QgZ3NsX3ZlY3RvciAqIGIpOwppbnQgZ3NsX3Zl
Y3Rvcl9zY2FsZSAoZ3NsX3ZlY3RvciAqIGEsIGNvbnN0IGRvdWJsZSB4KTsKaW50IGdzbF92ZWN0
b3JfYWRkX2NvbnN0YW50IChnc2xfdmVjdG9yICogYSwgY29uc3QgZG91YmxlIHgpOwoKaW50IGdz
bF92ZWN0b3JfaXNudWxsIChjb25zdCBnc2xfdmVjdG9yICogdik7CgpleHRlcm4gaW50IGdzbF9j
aGVja19yYW5nZTsKCgoKZXh0ZXJuIGlubGluZQpkb3VibGUKZ3NsX3ZlY3Rvcl9nZXQgKGNvbnN0
IGdzbF92ZWN0b3IgKiB2LCBjb25zdCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQog
ICAgewogICAgICBkbyB7IGdzbF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2lu
Y2x1ZGUvZ3NsL2dzbF92ZWN0b3JfZG91YmxlLmgiLCAxNzQsIEdTTF9FSU5WQUwpIDsgcmV0dXJu
IDAgOyB9IHdoaWxlICgwKTsKICAgIH0KCiAgcmV0dXJuIHYtPmRhdGFbaSAqIHYtPnN0cmlkZV07
Cn0KCmV4dGVybiBpbmxpbmUKdm9pZApnc2xfdmVjdG9yX3NldCAoZ3NsX3ZlY3RvciAqIHYsIGNv
bnN0IHNpemVfdCBpLCBkb3VibGUgeCkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAg
ICBkbyB7IGdzbF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUvZ3Ns
L2dzbF92ZWN0b3JfZG91YmxlLmgiLCAxODcsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDsgfSB3aGls
ZSAoMCk7CiAgICB9CgogIHYtPmRhdGFbaSAqIHYtPnN0cmlkZV0gPSB4Owp9CgpleHRlcm4gaW5s
aW5lCmRvdWJsZSAqCmdzbF92ZWN0b3JfcHRyIChnc2xfdmVjdG9yICogdiwgY29uc3Qgc2l6ZV90
IGkpCnsKCiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJp
bmRleCBvdXQgb2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2RvdWJsZS5o
IiwgMjAwLCBHU0xfRUlOVkFMKSA7IHJldHVybiAwIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHJl
dHVybiAoZG91YmxlICopICh2LT5kYXRhICsgaSAqIHYtPnN0cmlkZSk7Cn0KCmV4dGVybiBpbmxp
bmUKY29uc3QgZG91YmxlICoKZ3NsX3ZlY3Rvcl9jb25zdF9wdHIgKGNvbnN0IGdzbF92ZWN0b3Ig
KiB2LCBjb25zdCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAgICBk
byB7IGdzbF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUvZ3NsL2dz
bF92ZWN0b3JfZG91YmxlLmgiLCAyMTMsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDAgOyB9IHdoaWxl
ICgwKTsKICAgIH0KCiAgcmV0dXJuIChjb25zdCBkb3VibGUgKikgKHYtPmRhdGEgKyBpICogdi0+
c3RyaWRlKTsKfQoKCgoKCiMgMjcgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9jb21wbGV4
X2RvdWJsZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfYmxvY2tfY29tcGxleF9k
b3VibGUuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX2Jsb2NrX2NvbXBsZXhfZG91
YmxlLmgiIDMKCgpzdHJ1Y3QgZ3NsX2Jsb2NrX2NvbXBsZXhfc3RydWN0CnsKICBzaXplX3Qgc2l6
ZTsKICBkb3VibGUgKmRhdGE7Cn07Cgp0eXBlZGVmIHN0cnVjdCBnc2xfYmxvY2tfY29tcGxleF9z
dHJ1Y3QgZ3NsX2Jsb2NrX2NvbXBsZXg7Cgpnc2xfYmxvY2tfY29tcGxleCAqZ3NsX2Jsb2NrX2Nv
bXBsZXhfYWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKZ3NsX2Jsb2NrX2NvbXBsZXggKmdzbF9ibG9j
a19jb21wbGV4X2NhbGxvYyAoY29uc3Qgc2l6ZV90IG4pOwp2b2lkIGdzbF9ibG9ja19jb21wbGV4
X2ZyZWUgKGdzbF9ibG9ja19jb21wbGV4ICogYik7CgppbnQgZ3NsX2Jsb2NrX2NvbXBsZXhfZnJl
YWQgKEZJTEUgKiBzdHJlYW0sIGdzbF9ibG9ja19jb21wbGV4ICogYik7CmludCBnc2xfYmxvY2tf
Y29tcGxleF9md3JpdGUgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja19jb21wbGV4ICog
Yik7CmludCBnc2xfYmxvY2tfY29tcGxleF9mc2NhbmYgKEZJTEUgKiBzdHJlYW0sIGdzbF9ibG9j
a19jb21wbGV4ICogYik7CmludCBnc2xfYmxvY2tfY29tcGxleF9mcHJpbnRmIChGSUxFICogc3Ry
ZWFtLCBjb25zdCBnc2xfYmxvY2tfY29tcGxleCAqIGIsIGNvbnN0IGNoYXIgKmZvcm1hdCk7Cgpp
bnQgZ3NsX2Jsb2NrX2NvbXBsZXhfcmF3X2ZyZWFkIChGSUxFICogc3RyZWFtLCBkb3VibGUgKiBi
LCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfY29t
cGxleF9yYXdfZndyaXRlIChGSUxFICogc3RyZWFtLCBjb25zdCBkb3VibGUgKiBiLCBjb25zdCBz
aXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfY29tcGxleF9yYXdf
ZnNjYW5mIChGSUxFICogc3RyZWFtLCBkb3VibGUgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qg
c2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfY29tcGxleF9yYXdfZnByaW50ZiAoRklMRSAq
IHN0cmVhbSwgY29uc3QgZG91YmxlICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBz
dHJpZGUsIGNvbnN0IGNoYXIgKmZvcm1hdCk7CgpzaXplX3QgZ3NsX2Jsb2NrX2NvbXBsZXhfc2l6
ZSAoY29uc3QgZ3NsX2Jsb2NrX2NvbXBsZXggKiBiKTsKZG91YmxlICogZ3NsX2Jsb2NrX2NvbXBs
ZXhfZGF0YSAoY29uc3QgZ3NsX2Jsb2NrX2NvbXBsZXggKiBiKTsKCgojIDI5ICIvdXNyL2luY2x1
ZGUvZ3NsL2dzbF92ZWN0b3JfY29tcGxleF9kb3VibGUuaCIgMiAzCiMgNDAgIi91c3IvaW5jbHVk
ZS9nc2wvZ3NsX3ZlY3Rvcl9jb21wbGV4X2RvdWJsZS5oIiAzCgoKdHlwZWRlZiBzdHJ1Y3QKewog
IHNpemVfdCBzaXplOwogIHNpemVfdCBzdHJpZGU7CiAgZG91YmxlICpkYXRhOwogIGdzbF9ibG9j
a19jb21wbGV4ICpibG9jazsKICBpbnQgb3duZXI7Cn0gZ3NsX3ZlY3Rvcl9jb21wbGV4OwoKdHlw
ZWRlZiBzdHJ1Y3QKewogIGdzbF92ZWN0b3JfY29tcGxleCB2ZWN0b3I7Cn0gX2dzbF92ZWN0b3Jf
Y29tcGxleF92aWV3OwoKdHlwZWRlZiBfZ3NsX3ZlY3Rvcl9jb21wbGV4X3ZpZXcgZ3NsX3ZlY3Rv
cl9jb21wbGV4X3ZpZXc7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4IHZl
Y3RvcjsKfSBfZ3NsX3ZlY3Rvcl9jb21wbGV4X2NvbnN0X3ZpZXc7Cgp0eXBlZGVmIGNvbnN0IF9n
c2xfdmVjdG9yX2NvbXBsZXhfY29uc3RfdmlldyBnc2xfdmVjdG9yX2NvbXBsZXhfY29uc3Rfdmll
dzsKCgoKZ3NsX3ZlY3Rvcl9jb21wbGV4ICpnc2xfdmVjdG9yX2NvbXBsZXhfYWxsb2MgKGNvbnN0
IHNpemVfdCBuKTsKZ3NsX3ZlY3Rvcl9jb21wbGV4ICpnc2xfdmVjdG9yX2NvbXBsZXhfY2FsbG9j
IChjb25zdCBzaXplX3Qgbik7Cgpnc2xfdmVjdG9yX2NvbXBsZXggKgpnc2xfdmVjdG9yX2NvbXBs
ZXhfYWxsb2NfZnJvbV9ibG9jayAoZ3NsX2Jsb2NrX2NvbXBsZXggKiBiLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG9mZnNldCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBuLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHN0cmlk
ZSk7Cgpnc2xfdmVjdG9yX2NvbXBsZXggKgpnc2xfdmVjdG9yX2NvbXBsZXhfYWxsb2NfZnJvbV92
ZWN0b3IgKGdzbF92ZWN0b3JfY29tcGxleCAqIHYsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBvZmZzZXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBuLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgc3RyaWRlKTsKCnZv
aWQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2ZyZWUgKGdzbF92ZWN0b3JfY29tcGxleCAqIHYpOwoKCgpf
Z3NsX3ZlY3Rvcl9jb21wbGV4X3ZpZXcKZ3NsX3ZlY3Rvcl9jb21wbGV4X3ZpZXdfYXJyYXkgKGRv
dWJsZSAqYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBu
KTsKCl9nc2xfdmVjdG9yX2NvbXBsZXhfdmlldwpnc2xfdmVjdG9yX2NvbXBsZXhfdmlld19hcnJh
eV93aXRoX3N0cmlkZSAoZG91YmxlICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX2NvbXBs
ZXhfY29uc3Rfdmlldwpnc2xfdmVjdG9yX2NvbXBsZXhfY29uc3Rfdmlld19hcnJheSAoY29uc3Qg
ZG91YmxlICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY29tcGxleF9jb25zdF92aWV3CmdzbF92ZWN0b3JfY29t
cGxleF9jb25zdF92aWV3X2FycmF5X3dpdGhfc3RyaWRlIChjb25zdCBkb3VibGUgKmJhc2UsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY29tcGxleF92aWV3CmdzbF92ZWN0b3Jf
Y29tcGxleF9zdWJ2ZWN0b3IgKGdzbF92ZWN0b3JfY29tcGxleCAqYmFzZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgoKX2dzbF92ZWN0b3JfY29tcGxleF92
aWV3CmdzbF92ZWN0b3JfY29tcGxleF9zdWJ2ZWN0b3Jfd2l0aF9zdHJpZGUgKGdzbF92ZWN0b3Jf
Y29tcGxleCAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX2NvbXBsZXhfY29uc3Rfdmlldwpnc2xf
dmVjdG9yX2NvbXBsZXhfY29uc3Rfc3VidmVjdG9yIChjb25zdCBnc2xfdmVjdG9yX2NvbXBsZXgg
KmJhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IG4pOwoKCl9nc2xfdmVjdG9yX2NvbXBsZXhfY29uc3Rfdmlldwpnc2xfdmVjdG9yX2NvbXBs
ZXhfY29uc3Rfc3VidmVjdG9yX3dpdGhfc3RyaWRlIChjb25zdCBnc2xfdmVjdG9yX2NvbXBsZXgg
KnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl92aWV3CmdzbF92ZWN0
b3JfY29tcGxleF9yZWFsIChnc2xfdmVjdG9yX2NvbXBsZXggKnYpOwoKX2dzbF92ZWN0b3Jfdmll
dwpnc2xfdmVjdG9yX2NvbXBsZXhfaW1hZyAoZ3NsX3ZlY3Rvcl9jb21wbGV4ICp2KTsKCl9nc2xf
dmVjdG9yX2NvbnN0X3ZpZXcKZ3NsX3ZlY3Rvcl9jb21wbGV4X2NvbnN0X3JlYWwgKGNvbnN0IGdz
bF92ZWN0b3JfY29tcGxleCAqdik7CgpfZ3NsX3ZlY3Rvcl9jb25zdF92aWV3CmdzbF92ZWN0b3Jf
Y29tcGxleF9jb25zdF9pbWFnIChjb25zdCBnc2xfdmVjdG9yX2NvbXBsZXggKnYpOwoKCgoKZ3Ns
X2NvbXBsZXgKZ3NsX3ZlY3Rvcl9jb21wbGV4X2dldCAoY29uc3QgZ3NsX3ZlY3Rvcl9jb21wbGV4
ICogdiwgY29uc3Qgc2l6ZV90IGkpOwoKdm9pZCBnc2xfdmVjdG9yX2NvbXBsZXhfc2V0IChnc2xf
dmVjdG9yX2NvbXBsZXggKiB2LCBjb25zdCBzaXplX3QgaSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnc2xfY29tcGxleCB6KTsKCmdzbF9jb21wbGV4Cipnc2xfdmVjdG9yX2Nv
bXBsZXhfcHRyIChnc2xfdmVjdG9yX2NvbXBsZXggKiB2LCBjb25zdCBzaXplX3QgaSk7Cgpjb25z
dCBnc2xfY29tcGxleAoqZ3NsX3ZlY3Rvcl9jb21wbGV4X2NvbnN0X3B0ciAoY29uc3QgZ3NsX3Zl
Y3Rvcl9jb21wbGV4ICogdiwgY29uc3Qgc2l6ZV90IGkpOwoKdm9pZCBnc2xfdmVjdG9yX2NvbXBs
ZXhfc2V0X3plcm8gKGdzbF92ZWN0b3JfY29tcGxleCAqIHYpOwp2b2lkIGdzbF92ZWN0b3JfY29t
cGxleF9zZXRfYWxsIChnc2xfdmVjdG9yX2NvbXBsZXggKiB2LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnc2xfY29tcGxleCB6KTsKaW50IGdzbF92ZWN0b3JfY29tcGxl
eF9zZXRfYmFzaXMgKGdzbF92ZWN0b3JfY29tcGxleCAqIHYsIHNpemVfdCBpKTsKCmludCBnc2xf
dmVjdG9yX2NvbXBsZXhfZnJlYWQgKEZJTEUgKiBzdHJlYW0sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdzbF92ZWN0b3JfY29tcGxleCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl9j
b21wbGV4X2Z3cml0ZSAoRklMRSAqIHN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGdzbF92ZWN0b3JfY29tcGxleCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl9j
b21wbGV4X2ZzY2FuZiAoRklMRSAqIHN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdzbF92ZWN0b3JfY29tcGxleCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl9jb21wbGV4
X2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ3NsX3ZlY3Rvcl9jb21wbGV4ICogdiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQpOwoKaW50IGdzbF92ZWN0b3JfY29t
cGxleF9tZW1jcHkgKGdzbF92ZWN0b3JfY29tcGxleCAqIGRlc3QsIGNvbnN0IGdzbF92ZWN0b3Jf
Y29tcGxleCAqIHNyYyk7CgppbnQgZ3NsX3ZlY3Rvcl9jb21wbGV4X3JldmVyc2UgKGdzbF92ZWN0
b3JfY29tcGxleCAqIHYpOwoKaW50IGdzbF92ZWN0b3JfY29tcGxleF9zd2FwIChnc2xfdmVjdG9y
X2NvbXBsZXggKiB2LCBnc2xfdmVjdG9yX2NvbXBsZXggKiB3KTsKaW50IGdzbF92ZWN0b3JfY29t
cGxleF9zd2FwX2VsZW1lbnRzIChnc2xfdmVjdG9yX2NvbXBsZXggKiB2LCBjb25zdCBzaXplX3Qg
aSwgY29uc3Qgc2l6ZV90IGopOwoKaW50IGdzbF92ZWN0b3JfY29tcGxleF9pc251bGwgKGNvbnN0
IGdzbF92ZWN0b3JfY29tcGxleCAqIHYpOwoKZXh0ZXJuIGludCBnc2xfY2hlY2tfcmFuZ2U7CgoK
CmV4dGVybiBpbmxpbmUKZ3NsX2NvbXBsZXgKZ3NsX3ZlY3Rvcl9jb21wbGV4X2dldCAoY29uc3Qg
Z3NsX3ZlY3Rvcl9jb21wbGV4ICogdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc2l6ZV90IGkpCnsKCiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAgY29uc3QgZ3Ns
X2NvbXBsZXggemVybyA9IHt7MCwgMH19OwogICAgICBkbyB7IGdzbF9lcnJvciAoImluZGV4IG91
dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfY29tcGxleF9kb3VibGUu
aCIsIDE5MiwgR1NMX0VJTlZBTCkgOyByZXR1cm4gemVybyA7IH0gd2hpbGUgKDApOwogICAgfQoK
ICByZXR1cm4gKigoZ3NsX2NvbXBsZXgqKSYoKHYpLT5kYXRhWzIqKGkpKih2KS0+c3RyaWRlXSkp
Owp9CgpleHRlcm4gaW5saW5lCnZvaWQKZ3NsX3ZlY3Rvcl9jb21wbGV4X3NldCAoZ3NsX3ZlY3Rv
cl9jb21wbGV4ICogdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90
IGksIGdzbF9jb21wbGV4IHopCnsKCiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAgZG8g
eyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xf
dmVjdG9yX2NvbXBsZXhfZG91YmxlLmgiLCAyMDYsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDsgfSB3
aGlsZSAoMCk7CiAgICB9CgogICooKGdzbF9jb21wbGV4KikmKCh2KS0+ZGF0YVsyKihpKSoodikt
PnN0cmlkZV0pKSA9IHo7Cn0KCmV4dGVybiBpbmxpbmUKZ3NsX2NvbXBsZXggKgpnc2xfdmVjdG9y
X2NvbXBsZXhfcHRyIChnc2xfdmVjdG9yX2NvbXBsZXggKiB2LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewog
ICAgICBkbyB7IGdzbF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUv
Z3NsL2dzbF92ZWN0b3JfY29tcGxleF9kb3VibGUuaCIsIDIyMCwgR1NMX0VJTlZBTCkgOyByZXR1
cm4gMCA7IH0gd2hpbGUgKDApOwogICAgfQoKICByZXR1cm4gKChnc2xfY29tcGxleCopJigodikt
PmRhdGFbMiooaSkqKHYpLT5zdHJpZGVdKSk7Cn0KCmV4dGVybiBpbmxpbmUKY29uc3QgZ3NsX2Nv
bXBsZXggKgpnc2xfdmVjdG9yX2NvbXBsZXhfY29uc3RfcHRyIChjb25zdCBnc2xfdmVjdG9yX2Nv
bXBsZXggKiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXpl
X3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAgICBkbyB7IGdzbF9lcnJvciAo
ImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfY29tcGxl
eF9kb3VibGUuaCIsIDIzNCwgR1NMX0VJTlZBTCkgOyByZXR1cm4gMCA7IH0gd2hpbGUgKDApOwog
ICAgfQoKICByZXR1cm4gKChnc2xfY29tcGxleCopJigodiktPmRhdGFbMiooaSkqKHYpLT5zdHJp
ZGVdKSk7Cn0KCgoKCgojIDYgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvci5oIiAyIDMKIyAx
ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfY29tcGxleF9mbG9hdC5oIiAxIDMKIyAyNiAi
L3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXQuaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9mbG9hdC5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2dz
bC9nc2xfdmVjdG9yX2Zsb2F0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9ibG9ja19m
bG9hdC5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfYmxvY2tfZmxvYXQuaCIgMwoK
CnN0cnVjdCBnc2xfYmxvY2tfZmxvYXRfc3RydWN0CnsKICBzaXplX3Qgc2l6ZTsKICBmbG9hdCAq
ZGF0YTsKfTsKCnR5cGVkZWYgc3RydWN0IGdzbF9ibG9ja19mbG9hdF9zdHJ1Y3QgZ3NsX2Jsb2Nr
X2Zsb2F0OwoKZ3NsX2Jsb2NrX2Zsb2F0ICpnc2xfYmxvY2tfZmxvYXRfYWxsb2MgKGNvbnN0IHNp
emVfdCBuKTsKZ3NsX2Jsb2NrX2Zsb2F0ICpnc2xfYmxvY2tfZmxvYXRfY2FsbG9jIChjb25zdCBz
aXplX3Qgbik7CnZvaWQgZ3NsX2Jsb2NrX2Zsb2F0X2ZyZWUgKGdzbF9ibG9ja19mbG9hdCAqIGIp
OwoKaW50IGdzbF9ibG9ja19mbG9hdF9mcmVhZCAoRklMRSAqIHN0cmVhbSwgZ3NsX2Jsb2NrX2Zs
b2F0ICogYik7CmludCBnc2xfYmxvY2tfZmxvYXRfZndyaXRlIChGSUxFICogc3RyZWFtLCBjb25z
dCBnc2xfYmxvY2tfZmxvYXQgKiBiKTsKaW50IGdzbF9ibG9ja19mbG9hdF9mc2NhbmYgKEZJTEUg
KiBzdHJlYW0sIGdzbF9ibG9ja19mbG9hdCAqIGIpOwppbnQgZ3NsX2Jsb2NrX2Zsb2F0X2Zwcmlu
dGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja19mbG9hdCAqIGIsIGNvbnN0IGNoYXIg
KmZvcm1hdCk7CgppbnQgZ3NsX2Jsb2NrX2Zsb2F0X3Jhd19mcmVhZCAoRklMRSAqIHN0cmVhbSwg
ZmxvYXQgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSk7CmludCBnc2xf
YmxvY2tfZmxvYXRfcmF3X2Z3cml0ZSAoRklMRSAqIHN0cmVhbSwgY29uc3QgZmxvYXQgKiBiLCBj
b25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfZmxvYXRf
cmF3X2ZzY2FuZiAoRklMRSAqIHN0cmVhbSwgZmxvYXQgKiBiLCBjb25zdCBzaXplX3QgbiwgY29u
c3Qgc2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfZmxvYXRfcmF3X2ZwcmludGYgKEZJTEUg
KiBzdHJlYW0sIGNvbnN0IGZsb2F0ICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBz
dHJpZGUsIGNvbnN0IGNoYXIgKmZvcm1hdCk7CgpzaXplX3QgZ3NsX2Jsb2NrX2Zsb2F0X3NpemUg
KGNvbnN0IGdzbF9ibG9ja19mbG9hdCAqIGIpOwpmbG9hdCAqIGdzbF9ibG9ja19mbG9hdF9kYXRh
IChjb25zdCBnc2xfYmxvY2tfZmxvYXQgKiBiKTsKCgojIDI2ICIvdXNyL2luY2x1ZGUvZ3NsL2dz
bF92ZWN0b3JfZmxvYXQuaCIgMiAzCiMgMzcgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9m
bG9hdC5oIiAzCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHNpemVfdCBzaXplOwogIHNpemVfdCBzdHJp
ZGU7CiAgZmxvYXQgKmRhdGE7CiAgZ3NsX2Jsb2NrX2Zsb2F0ICpibG9jazsKICBpbnQgb3duZXI7
Cn0KZ3NsX3ZlY3Rvcl9mbG9hdDsKCnR5cGVkZWYgc3RydWN0CnsKICBnc2xfdmVjdG9yX2Zsb2F0
IHZlY3RvcjsKfSBfZ3NsX3ZlY3Rvcl9mbG9hdF92aWV3OwoKdHlwZWRlZiBfZ3NsX3ZlY3Rvcl9m
bG9hdF92aWV3IGdzbF92ZWN0b3JfZmxvYXRfdmlldzsKCnR5cGVkZWYgc3RydWN0CnsKICBnc2xf
dmVjdG9yX2Zsb2F0IHZlY3RvcjsKfSBfZ3NsX3ZlY3Rvcl9mbG9hdF9jb25zdF92aWV3OwoKdHlw
ZWRlZiBjb25zdCBfZ3NsX3ZlY3Rvcl9mbG9hdF9jb25zdF92aWV3IGdzbF92ZWN0b3JfZmxvYXRf
Y29uc3RfdmlldzsKCgoKCmdzbF92ZWN0b3JfZmxvYXQgKmdzbF92ZWN0b3JfZmxvYXRfYWxsb2Mg
KGNvbnN0IHNpemVfdCBuKTsKZ3NsX3ZlY3Rvcl9mbG9hdCAqZ3NsX3ZlY3Rvcl9mbG9hdF9jYWxs
b2MgKGNvbnN0IHNpemVfdCBuKTsKCmdzbF92ZWN0b3JfZmxvYXQgKmdzbF92ZWN0b3JfZmxvYXRf
YWxsb2NfZnJvbV9ibG9jayAoZ3NsX2Jsb2NrX2Zsb2F0ICogYiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgb2Zmc2V0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHNpemVfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHNpemVfdCBzdHJpZGUpOwoKZ3NsX3ZlY3Rvcl9mbG9hdCAqZ3NsX3ZlY3Rv
cl9mbG9hdF9hbGxvY19mcm9tX3ZlY3RvciAoZ3NsX3ZlY3Rvcl9mbG9hdCAqIHYsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVf
dCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHNpemVfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgc3RyaWRlKTsKCnZvaWQgZ3NsX3ZlY3Rv
cl9mbG9hdF9mcmVlIChnc2xfdmVjdG9yX2Zsb2F0ICogdik7CgoKCl9nc2xfdmVjdG9yX2Zsb2F0
X3ZpZXcKZ3NsX3ZlY3Rvcl9mbG9hdF92aWV3X2FycmF5IChmbG9hdCAqdiwgc2l6ZV90IG4pOwoK
X2dzbF92ZWN0b3JfZmxvYXRfdmlldwpnc2xfdmVjdG9yX2Zsb2F0X3ZpZXdfYXJyYXlfd2l0aF9z
dHJpZGUgKGZsb2F0ICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfZmxvYXRfY29uc3Rfdmlldwpnc2xfdmVjdG9yX2Zs
b2F0X2NvbnN0X3ZpZXdfYXJyYXkgKGNvbnN0IGZsb2F0ICp2LCBzaXplX3Qgbik7CgpfZ3NsX3Zl
Y3Rvcl9mbG9hdF9jb25zdF92aWV3CmdzbF92ZWN0b3JfZmxvYXRfY29uc3Rfdmlld19hcnJheV93
aXRoX3N0cmlkZSAoY29uc3QgZmxvYXQgKmJhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9mbG9hdF92
aWV3CmdzbF92ZWN0b3JfZmxvYXRfc3VidmVjdG9yIChnc2xfdmVjdG9yX2Zsb2F0ICp2LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9mbG9hdF92aWV3CmdzbF92ZWN0b3JfZmxvYXRf
c3VidmVjdG9yX3dpdGhfc3RyaWRlIChnc2xfdmVjdG9yX2Zsb2F0ICp2LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfZmxvYXRfY29uc3Rfdmll
dwpnc2xfdmVjdG9yX2Zsb2F0X2NvbnN0X3N1YnZlY3RvciAoY29uc3QgZ3NsX3ZlY3Rvcl9mbG9h
dCAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfZmxvYXRf
Y29uc3Rfdmlldwpnc2xfdmVjdG9yX2Zsb2F0X2NvbnN0X3N1YnZlY3Rvcl93aXRoX3N0cmlkZSAo
Y29uc3QgZ3NsX3ZlY3Rvcl9mbG9hdCAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCgoKZmxvYXQgZ3NsX3ZlY3Rvcl9mbG9hdF9n
ZXQgKGNvbnN0IGdzbF92ZWN0b3JfZmxvYXQgKiB2LCBjb25zdCBzaXplX3QgaSk7CnZvaWQgZ3Ns
X3ZlY3Rvcl9mbG9hdF9zZXQgKGdzbF92ZWN0b3JfZmxvYXQgKiB2LCBjb25zdCBzaXplX3QgaSwg
ZmxvYXQgeCk7CgpmbG9hdCAqZ3NsX3ZlY3Rvcl9mbG9hdF9wdHIgKGdzbF92ZWN0b3JfZmxvYXQg
KiB2LCBjb25zdCBzaXplX3QgaSk7CmNvbnN0IGZsb2F0ICpnc2xfdmVjdG9yX2Zsb2F0X2NvbnN0
X3B0ciAoY29uc3QgZ3NsX3ZlY3Rvcl9mbG9hdCAqIHYsIGNvbnN0IHNpemVfdCBpKTsKCnZvaWQg
Z3NsX3ZlY3Rvcl9mbG9hdF9zZXRfemVybyAoZ3NsX3ZlY3Rvcl9mbG9hdCAqIHYpOwp2b2lkIGdz
bF92ZWN0b3JfZmxvYXRfc2V0X2FsbCAoZ3NsX3ZlY3Rvcl9mbG9hdCAqIHYsIGZsb2F0IHgpOwpp
bnQgZ3NsX3ZlY3Rvcl9mbG9hdF9zZXRfYmFzaXMgKGdzbF92ZWN0b3JfZmxvYXQgKiB2LCBzaXpl
X3QgaSk7CgppbnQgZ3NsX3ZlY3Rvcl9mbG9hdF9mcmVhZCAoRklMRSAqIHN0cmVhbSwgZ3NsX3Zl
Y3Rvcl9mbG9hdCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl9mbG9hdF9md3JpdGUgKEZJTEUgKiBzdHJl
YW0sIGNvbnN0IGdzbF92ZWN0b3JfZmxvYXQgKiB2KTsKaW50IGdzbF92ZWN0b3JfZmxvYXRfZnNj
YW5mIChGSUxFICogc3RyZWFtLCBnc2xfdmVjdG9yX2Zsb2F0ICogdik7CmludCBnc2xfdmVjdG9y
X2Zsb2F0X2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF92ZWN0b3JfZmxvYXQgKiB2
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQpOwoKaW50
IGdzbF92ZWN0b3JfZmxvYXRfbWVtY3B5IChnc2xfdmVjdG9yX2Zsb2F0ICogZGVzdCwgY29uc3Qg
Z3NsX3ZlY3Rvcl9mbG9hdCAqIHNyYyk7CgppbnQgZ3NsX3ZlY3Rvcl9mbG9hdF9yZXZlcnNlIChn
c2xfdmVjdG9yX2Zsb2F0ICogdik7CgppbnQgZ3NsX3ZlY3Rvcl9mbG9hdF9zd2FwIChnc2xfdmVj
dG9yX2Zsb2F0ICogdiwgZ3NsX3ZlY3Rvcl9mbG9hdCAqIHcpOwppbnQgZ3NsX3ZlY3Rvcl9mbG9h
dF9zd2FwX2VsZW1lbnRzIChnc2xfdmVjdG9yX2Zsb2F0ICogdiwgY29uc3Qgc2l6ZV90IGksIGNv
bnN0IHNpemVfdCBqKTsKCmZsb2F0IGdzbF92ZWN0b3JfZmxvYXRfbWF4IChjb25zdCBnc2xfdmVj
dG9yX2Zsb2F0ICogdik7CmZsb2F0IGdzbF92ZWN0b3JfZmxvYXRfbWluIChjb25zdCBnc2xfdmVj
dG9yX2Zsb2F0ICogdik7CnZvaWQgZ3NsX3ZlY3Rvcl9mbG9hdF9taW5tYXggKGNvbnN0IGdzbF92
ZWN0b3JfZmxvYXQgKiB2LCBmbG9hdCAqIG1pbl9vdXQsIGZsb2F0ICogbWF4X291dCk7CgpzaXpl
X3QgZ3NsX3ZlY3Rvcl9mbG9hdF9tYXhfaW5kZXggKGNvbnN0IGdzbF92ZWN0b3JfZmxvYXQgKiB2
KTsKc2l6ZV90IGdzbF92ZWN0b3JfZmxvYXRfbWluX2luZGV4IChjb25zdCBnc2xfdmVjdG9yX2Zs
b2F0ICogdik7CnZvaWQgZ3NsX3ZlY3Rvcl9mbG9hdF9taW5tYXhfaW5kZXggKGNvbnN0IGdzbF92
ZWN0b3JfZmxvYXQgKiB2LCBzaXplX3QgKiBpbWluLCBzaXplX3QgKiBpbWF4KTsKCmludCBnc2xf
dmVjdG9yX2Zsb2F0X2FkZCAoZ3NsX3ZlY3Rvcl9mbG9hdCAqIGEsIGNvbnN0IGdzbF92ZWN0b3Jf
ZmxvYXQgKiBiKTsKaW50IGdzbF92ZWN0b3JfZmxvYXRfc3ViIChnc2xfdmVjdG9yX2Zsb2F0ICog
YSwgY29uc3QgZ3NsX3ZlY3Rvcl9mbG9hdCAqIGIpOwppbnQgZ3NsX3ZlY3Rvcl9mbG9hdF9tdWwg
KGdzbF92ZWN0b3JfZmxvYXQgKiBhLCBjb25zdCBnc2xfdmVjdG9yX2Zsb2F0ICogYik7CmludCBn
c2xfdmVjdG9yX2Zsb2F0X2RpdiAoZ3NsX3ZlY3Rvcl9mbG9hdCAqIGEsIGNvbnN0IGdzbF92ZWN0
b3JfZmxvYXQgKiBiKTsKaW50IGdzbF92ZWN0b3JfZmxvYXRfc2NhbGUgKGdzbF92ZWN0b3JfZmxv
YXQgKiBhLCBjb25zdCBkb3VibGUgeCk7CmludCBnc2xfdmVjdG9yX2Zsb2F0X2FkZF9jb25zdGFu
dCAoZ3NsX3ZlY3Rvcl9mbG9hdCAqIGEsIGNvbnN0IGRvdWJsZSB4KTsKCmludCBnc2xfdmVjdG9y
X2Zsb2F0X2lzbnVsbCAoY29uc3QgZ3NsX3ZlY3Rvcl9mbG9hdCAqIHYpOwoKZXh0ZXJuIGludCBn
c2xfY2hlY2tfcmFuZ2U7CgoKCmV4dGVybiBpbmxpbmUKZmxvYXQKZ3NsX3ZlY3Rvcl9mbG9hdF9n
ZXQgKGNvbnN0IGdzbF92ZWN0b3JfZmxvYXQgKiB2LCBjb25zdCBzaXplX3QgaSkKewoKICBpZiAo
aSA+PSB2LT5zaXplKQogICAgewogICAgICBkbyB7IGdzbF9lcnJvciAoImluZGV4IG91dCBvZiBy
YW5nZSIsICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfZmxvYXQuaCIsIDE3NCwgR1NMX0VJ
TlZBTCkgOyByZXR1cm4gMCA7IH0gd2hpbGUgKDApOwogICAgfQoKICByZXR1cm4gdi0+ZGF0YVtp
ICogdi0+c3RyaWRlXTsKfQoKZXh0ZXJuIGlubGluZQp2b2lkCmdzbF92ZWN0b3JfZmxvYXRfc2V0
IChnc2xfdmVjdG9yX2Zsb2F0ICogdiwgY29uc3Qgc2l6ZV90IGksIGZsb2F0IHgpCnsKCiAgaWYg
KGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2Yg
cmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2Zsb2F0LmgiLCAxODcsIEdTTF9F
SU5WQUwpIDsgcmV0dXJuIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHYtPmRhdGFbaSAqIHYtPnN0
cmlkZV0gPSB4Owp9CgpleHRlcm4gaW5saW5lCmZsb2F0ICoKZ3NsX3ZlY3Rvcl9mbG9hdF9wdHIg
KGdzbF92ZWN0b3JfZmxvYXQgKiB2LCBjb25zdCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5z
aXplKQogICAgewogICAgICBkbyB7IGdzbF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIv
dXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfZmxvYXQuaCIsIDIwMCwgR1NMX0VJTlZBTCkgOyBy
ZXR1cm4gMCA7IH0gd2hpbGUgKDApOwogICAgfQoKICByZXR1cm4gKGZsb2F0ICopICh2LT5kYXRh
ICsgaSAqIHYtPnN0cmlkZSk7Cn0KCmV4dGVybiBpbmxpbmUKY29uc3QgZmxvYXQgKgpnc2xfdmVj
dG9yX2Zsb2F0X2NvbnN0X3B0ciAoY29uc3QgZ3NsX3ZlY3Rvcl9mbG9hdCAqIHYsIGNvbnN0IHNp
emVfdCBpKQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9y
ICgiaW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9mbG9h
dC5oIiwgMjEzLCBHU0xfRUlOVkFMKSA7IHJldHVybiAwIDsgfSB3aGlsZSAoMCk7CiAgICB9Cgog
IHJldHVybiAoY29uc3QgZmxvYXQgKikgKHYtPmRhdGEgKyBpICogdi0+c3RyaWRlKTsKfQoKCgoK
CiMgMjcgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0LmgiIDIgMwoK
IyAxICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9ibG9ja19jb21wbGV4X2Zsb2F0LmgiIDEgMwojIDM2
ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9ibG9ja19jb21wbGV4X2Zsb2F0LmgiIDMKCgpzdHJ1Y3Qg
Z3NsX2Jsb2NrX2NvbXBsZXhfZmxvYXRfc3RydWN0CnsKICBzaXplX3Qgc2l6ZTsKICBmbG9hdCAq
ZGF0YTsKfTsKCnR5cGVkZWYgc3RydWN0IGdzbF9ibG9ja19jb21wbGV4X2Zsb2F0X3N0cnVjdCBn
c2xfYmxvY2tfY29tcGxleF9mbG9hdDsKCmdzbF9ibG9ja19jb21wbGV4X2Zsb2F0ICpnc2xfYmxv
Y2tfY29tcGxleF9mbG9hdF9hbGxvYyAoY29uc3Qgc2l6ZV90IG4pOwpnc2xfYmxvY2tfY29tcGxl
eF9mbG9hdCAqZ3NsX2Jsb2NrX2NvbXBsZXhfZmxvYXRfY2FsbG9jIChjb25zdCBzaXplX3Qgbik7
CnZvaWQgZ3NsX2Jsb2NrX2NvbXBsZXhfZmxvYXRfZnJlZSAoZ3NsX2Jsb2NrX2NvbXBsZXhfZmxv
YXQgKiBiKTsKCmludCBnc2xfYmxvY2tfY29tcGxleF9mbG9hdF9mcmVhZCAoRklMRSAqIHN0cmVh
bSwgZ3NsX2Jsb2NrX2NvbXBsZXhfZmxvYXQgKiBiKTsKaW50IGdzbF9ibG9ja19jb21wbGV4X2Zs
b2F0X2Z3cml0ZSAoRklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX2Jsb2NrX2NvbXBsZXhfZmxvYXQg
KiBiKTsKaW50IGdzbF9ibG9ja19jb21wbGV4X2Zsb2F0X2ZzY2FuZiAoRklMRSAqIHN0cmVhbSwg
Z3NsX2Jsb2NrX2NvbXBsZXhfZmxvYXQgKiBiKTsKaW50IGdzbF9ibG9ja19jb21wbGV4X2Zsb2F0
X2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja19jb21wbGV4X2Zsb2F0ICog
YiwgY29uc3QgY2hhciAqZm9ybWF0KTsKCmludCBnc2xfYmxvY2tfY29tcGxleF9mbG9hdF9yYXdf
ZnJlYWQgKEZJTEUgKiBzdHJlYW0sIGZsb2F0ICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNp
emVfdCBzdHJpZGUpOwppbnQgZ3NsX2Jsb2NrX2NvbXBsZXhfZmxvYXRfcmF3X2Z3cml0ZSAoRklM
RSAqIHN0cmVhbSwgY29uc3QgZmxvYXQgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90
IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfY29tcGxleF9mbG9hdF9yYXdfZnNjYW5mIChGSUxFICog
c3RyZWFtLCBmbG9hdCAqIGIsIGNvbnN0IHNpemVfdCBuLCBjb25zdCBzaXplX3Qgc3RyaWRlKTsK
aW50IGdzbF9ibG9ja19jb21wbGV4X2Zsb2F0X3Jhd19mcHJpbnRmIChGSUxFICogc3RyZWFtLCBj
b25zdCBmbG9hdCAqIGIsIGNvbnN0IHNpemVfdCBuLCBjb25zdCBzaXplX3Qgc3RyaWRlLCBjb25z
dCBjaGFyICpmb3JtYXQpOwoKc2l6ZV90IGdzbF9ibG9ja19jb21wbGV4X2Zsb2F0X3NpemUgKGNv
bnN0IGdzbF9ibG9ja19jb21wbGV4X2Zsb2F0ICogYik7CmZsb2F0ICogZ3NsX2Jsb2NrX2NvbXBs
ZXhfZmxvYXRfZGF0YSAoY29uc3QgZ3NsX2Jsb2NrX2NvbXBsZXhfZmxvYXQgKiBiKTsKCgojIDI5
ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfY29tcGxleF9mbG9hdC5oIiAyIDMKIyA0MCAi
L3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXQuaCIgMwoKCnR5cGVkZWYg
c3RydWN0CnsKICBzaXplX3Qgc2l6ZTsKICBzaXplX3Qgc3RyaWRlOwogIGZsb2F0ICpkYXRhOwog
IGdzbF9ibG9ja19jb21wbGV4X2Zsb2F0ICpibG9jazsKICBpbnQgb3duZXI7Cn0gZ3NsX3ZlY3Rv
cl9jb21wbGV4X2Zsb2F0OwoKdHlwZWRlZiBzdHJ1Y3QKewogIGdzbF92ZWN0b3JfY29tcGxleF9m
bG9hdCB2ZWN0b3I7Cn0gX2dzbF92ZWN0b3JfY29tcGxleF9mbG9hdF92aWV3OwoKdHlwZWRlZiBf
Z3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3ZpZXcgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3Zp
ZXc7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0IHZlY3RvcjsK
fSBfZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2NvbnN0X3ZpZXc7Cgp0eXBlZGVmIGNvbnN0IF9n
c2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfY29uc3RfdmlldyBnc2xfdmVjdG9yX2NvbXBsZXhfZmxv
YXRfY29uc3RfdmlldzsKCgoKZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0ICpnc2xfdmVjdG9yX2Nv
bXBsZXhfZmxvYXRfYWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zs
b2F0ICpnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfY2FsbG9jIChjb25zdCBzaXplX3Qgbik7Cgpn
c2xfdmVjdG9yX2NvbXBsZXhfZmxvYXQgKgpnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfYWxsb2Nf
ZnJvbV9ibG9jayAoZ3NsX2Jsb2NrX2NvbXBsZXhfZmxvYXQgKiBiLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG9mZnNldCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBuLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHN0cmlkZSk7
Cgpnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXQgKgpnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfYWxs
b2NfZnJvbV92ZWN0b3IgKGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCAqIHYsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBvZmZzZXQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBu
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXpl
X3Qgc3RyaWRlKTsKCnZvaWQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2ZyZWUgKGdzbF92ZWN0
b3JfY29tcGxleF9mbG9hdCAqIHYpOwoKCgpfZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3ZpZXcK
Z3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3ZpZXdfYXJyYXkgKGZsb2F0ICpiYXNlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY29t
cGxleF9mbG9hdF92aWV3CmdzbF92ZWN0b3JfY29tcGxleF9mbG9hdF92aWV3X2FycmF5X3dpdGhf
c3RyaWRlIChmbG9hdCAqYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0
X2NvbnN0X3ZpZXcKZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2NvbnN0X3ZpZXdfYXJyYXkgKGNv
bnN0IGZsb2F0ICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY29tcGxleF9mbG9hdF9jb25zdF92aWV3CmdzbF92
ZWN0b3JfY29tcGxleF9mbG9hdF9jb25zdF92aWV3X2FycmF5X3dpdGhfc3RyaWRlIChjb25zdCBm
bG9hdCAqYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zs
b2F0X3ZpZXcKZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3N1YnZlY3RvciAoZ3NsX3ZlY3Rvcl9j
b21wbGV4X2Zsb2F0ICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBuKTsKCgpfZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3ZpZXcKZ3NsX3ZlY3Rvcl9jb21w
bGV4X2Zsb2F0X3N1YnZlY3Rvcl93aXRoX3N0cmlkZSAoZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0
ICp2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY29tcGxleF9mbG9hdF9jb25zdF92aWV3CmdzbF92
ZWN0b3JfY29tcGxleF9mbG9hdF9jb25zdF9zdWJ2ZWN0b3IgKGNvbnN0IGdzbF92ZWN0b3JfY29t
cGxleF9mbG9hdCAqYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3Qgbik7CgoKX2dzbF92ZWN0b3JfY29tcGxleF9mbG9hdF9jb25zdF92aWV3
CmdzbF92ZWN0b3JfY29tcGxleF9mbG9hdF9jb25zdF9zdWJ2ZWN0b3Jfd2l0aF9zdHJpZGUgKGNv
bnN0IGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCAqdiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBu
KTsKCl9nc2xfdmVjdG9yX2Zsb2F0X3ZpZXcKZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3JlYWwg
KGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCAqdik7CgpfZ3NsX3ZlY3Rvcl9mbG9hdF92aWV3Cmdz
bF92ZWN0b3JfY29tcGxleF9mbG9hdF9pbWFnIChnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXQgKnYp
OwoKX2dzbF92ZWN0b3JfZmxvYXRfY29uc3Rfdmlldwpnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRf
Y29uc3RfcmVhbCAoY29uc3QgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0ICp2KTsKCl9nc2xfdmVj
dG9yX2Zsb2F0X2NvbnN0X3ZpZXcKZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2NvbnN0X2ltYWcg
KGNvbnN0IGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCAqdik7CgoKCgpnc2xfY29tcGxleF9mbG9h
dApnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfZ2V0IChjb25zdCBnc2xfdmVjdG9yX2NvbXBsZXhf
ZmxvYXQgKiB2LCBjb25zdCBzaXplX3QgaSk7Cgp2b2lkIGdzbF92ZWN0b3JfY29tcGxleF9mbG9h
dF9zZXQgKGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCAqIHYsIGNvbnN0IHNpemVfdCBpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzbF9jb21wbGV4X2Zsb2F0IHopOwoKZ3Ns
X2NvbXBsZXhfZmxvYXQKKmdzbF92ZWN0b3JfY29tcGxleF9mbG9hdF9wdHIgKGdzbF92ZWN0b3Jf
Y29tcGxleF9mbG9hdCAqIHYsIGNvbnN0IHNpemVfdCBpKTsKCmNvbnN0IGdzbF9jb21wbGV4X2Zs
b2F0Cipnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfY29uc3RfcHRyIChjb25zdCBnc2xfdmVjdG9y
X2NvbXBsZXhfZmxvYXQgKiB2LCBjb25zdCBzaXplX3QgaSk7Cgp2b2lkIGdzbF92ZWN0b3JfY29t
cGxleF9mbG9hdF9zZXRfemVybyAoZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0ICogdik7CnZvaWQg
Z3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3NldF9hbGwgKGdzbF92ZWN0b3JfY29tcGxleF9mbG9h
dCAqIHYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzbF9jb21wbGV4
X2Zsb2F0IHopOwppbnQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3NldF9iYXNpcyAoZ3NsX3Zl
Y3Rvcl9jb21wbGV4X2Zsb2F0ICogdiwgc2l6ZV90IGkpOwoKaW50IGdzbF92ZWN0b3JfY29tcGxl
eF9mbG9hdF9mcmVhZCAoRklMRSAqIHN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0ICogdik7CmludCBnc2xfdmVjdG9yX2Nv
bXBsZXhfZmxvYXRfZndyaXRlIChGSUxFICogc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0ICogdik7CmludCBn
c2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfZnNjYW5mIChGSUxFICogc3RyZWFtLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0ICogdik7
CmludCBnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfZnByaW50ZiAoRklMRSAqIHN0cmVhbSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnc2xfdmVjdG9yX2NvbXBs
ZXhfZmxvYXQgKiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKmZvcm1hdCk7CgppbnQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X21lbWNweSAoZ3Ns
X3ZlY3Rvcl9jb21wbGV4X2Zsb2F0ICogZGVzdCwgY29uc3QgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zs
b2F0ICogc3JjKTsKCmludCBnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfcmV2ZXJzZSAoZ3NsX3Zl
Y3Rvcl9jb21wbGV4X2Zsb2F0ICogdik7CgppbnQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3N3
YXAgKGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCAqIHYsIGdzbF92ZWN0b3JfY29tcGxleF9mbG9h
dCAqIHcpOwppbnQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3N3YXBfZWxlbWVudHMgKGdzbF92
ZWN0b3JfY29tcGxleF9mbG9hdCAqIHYsIGNvbnN0IHNpemVfdCBpLCBjb25zdCBzaXplX3Qgaik7
CgppbnQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2lzbnVsbCAoY29uc3QgZ3NsX3ZlY3Rvcl9j
b21wbGV4X2Zsb2F0ICogdik7CgpleHRlcm4gaW50IGdzbF9jaGVja19yYW5nZTsKCgoKZXh0ZXJu
IGlubGluZQpnc2xfY29tcGxleF9mbG9hdApnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfZ2V0IChj
b25zdCBnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXQgKiB2LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAg
ICBjb25zdCBnc2xfY29tcGxleF9mbG9hdCB6ZXJvID0ge3swLCAwfX07CiAgICAgIGRvIHsgZ3Ns
X2Vycm9yICgiaW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rv
cl9jb21wbGV4X2Zsb2F0LmgiLCAxOTIsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIHplcm8gOyB9IHdo
aWxlICgwKTsKICAgIH0KCiAgcmV0dXJuICooKGdzbF9jb21wbGV4X2Zsb2F0KikmKCh2KS0+ZGF0
YVsyKihpKSoodiktPnN0cmlkZV0pKTsKfQoKZXh0ZXJuIGlubGluZQp2b2lkCmdzbF92ZWN0b3Jf
Y29tcGxleF9mbG9hdF9zZXQgKGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCAqIHYsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBpLCBnc2xfY29tcGxleF9mbG9hdCB6
KQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5k
ZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zs
b2F0LmgiLCAyMDYsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDsgfSB3aGlsZSAoMCk7CiAgICB9Cgog
ICooKGdzbF9jb21wbGV4X2Zsb2F0KikmKCh2KS0+ZGF0YVsyKihpKSoodiktPnN0cmlkZV0pKSA9
IHo7Cn0KCmV4dGVybiBpbmxpbmUKZ3NsX2NvbXBsZXhfZmxvYXQgKgpnc2xfdmVjdG9yX2NvbXBs
ZXhfZmxvYXRfcHRyIChnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXQgKiB2LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQog
ICAgewogICAgICBkbyB7IGdzbF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2lu
Y2x1ZGUvZ3NsL2dzbF92ZWN0b3JfY29tcGxleF9mbG9hdC5oIiwgMjIwLCBHU0xfRUlOVkFMKSA7
IHJldHVybiAwIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHJldHVybiAoKGdzbF9jb21wbGV4X2Zs
b2F0KikmKCh2KS0+ZGF0YVsyKihpKSoodiktPnN0cmlkZV0pKTsKfQoKZXh0ZXJuIGlubGluZQpj
b25zdCBnc2xfY29tcGxleF9mbG9hdCAqCmdzbF92ZWN0b3JfY29tcGxleF9mbG9hdF9jb25zdF9w
dHIgKGNvbnN0IGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCAqIHYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBpKQp7CgogIGlmIChpID49IHYtPnNpemUp
CiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3Iv
aW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0LmgiLCAyMzQsIEdTTF9FSU5WQUwp
IDsgcmV0dXJuIDAgOyB9IHdoaWxlICgwKTsKICAgIH0KCiAgcmV0dXJuICgoZ3NsX2NvbXBsZXhf
ZmxvYXQqKSYoKHYpLT5kYXRhWzIqKGkpKih2KS0+c3RyaWRlXSkpOwp9CgoKCgoKIyA3ICIvdXNy
L2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3IuaCIgMiAzCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZ3Ns
L2dzbF92ZWN0b3JfdWxvbmcuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rv
cl91bG9uZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfYmxvY2tfdWxvbmcuaCIgMSAz
CiMgMzYgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX2Jsb2NrX3Vsb25nLmgiIDMKCgpzdHJ1Y3QgZ3Ns
X2Jsb2NrX3Vsb25nX3N0cnVjdAp7CiAgc2l6ZV90IHNpemU7CiAgdW5zaWduZWQgbG9uZyAqZGF0
YTsKfTsKCnR5cGVkZWYgc3RydWN0IGdzbF9ibG9ja191bG9uZ19zdHJ1Y3QgZ3NsX2Jsb2NrX3Vs
b25nOwoKZ3NsX2Jsb2NrX3Vsb25nICpnc2xfYmxvY2tfdWxvbmdfYWxsb2MgKGNvbnN0IHNpemVf
dCBuKTsKZ3NsX2Jsb2NrX3Vsb25nICpnc2xfYmxvY2tfdWxvbmdfY2FsbG9jIChjb25zdCBzaXpl
X3Qgbik7CnZvaWQgZ3NsX2Jsb2NrX3Vsb25nX2ZyZWUgKGdzbF9ibG9ja191bG9uZyAqIGIpOwoK
aW50IGdzbF9ibG9ja191bG9uZ19mcmVhZCAoRklMRSAqIHN0cmVhbSwgZ3NsX2Jsb2NrX3Vsb25n
ICogYik7CmludCBnc2xfYmxvY2tfdWxvbmdfZndyaXRlIChGSUxFICogc3RyZWFtLCBjb25zdCBn
c2xfYmxvY2tfdWxvbmcgKiBiKTsKaW50IGdzbF9ibG9ja191bG9uZ19mc2NhbmYgKEZJTEUgKiBz
dHJlYW0sIGdzbF9ibG9ja191bG9uZyAqIGIpOwppbnQgZ3NsX2Jsb2NrX3Vsb25nX2ZwcmludGYg
KEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja191bG9uZyAqIGIsIGNvbnN0IGNoYXIgKmZv
cm1hdCk7CgppbnQgZ3NsX2Jsb2NrX3Vsb25nX3Jhd19mcmVhZCAoRklMRSAqIHN0cmVhbSwgdW5z
aWduZWQgbG9uZyAqIGIsIGNvbnN0IHNpemVfdCBuLCBjb25zdCBzaXplX3Qgc3RyaWRlKTsKaW50
IGdzbF9ibG9ja191bG9uZ19yYXdfZndyaXRlIChGSUxFICogc3RyZWFtLCBjb25zdCB1bnNpZ25l
ZCBsb25nICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUpOwppbnQgZ3Ns
X2Jsb2NrX3Vsb25nX3Jhd19mc2NhbmYgKEZJTEUgKiBzdHJlYW0sIHVuc2lnbmVkIGxvbmcgKiBi
LCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfdWxv
bmdfcmF3X2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IHVuc2lnbmVkIGxvbmcgKiBiLCBj
b25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSwgY29uc3QgY2hhciAqZm9ybWF0KTsK
CnNpemVfdCBnc2xfYmxvY2tfdWxvbmdfc2l6ZSAoY29uc3QgZ3NsX2Jsb2NrX3Vsb25nICogYik7
CnVuc2lnbmVkIGxvbmcgKiBnc2xfYmxvY2tfdWxvbmdfZGF0YSAoY29uc3QgZ3NsX2Jsb2NrX3Vs
b25nICogYik7CgoKIyAyNiAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX3Vsb25nLmgiIDIg
MwojIDM3ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfdWxvbmcuaCIgMwoKCnR5cGVkZWYg
c3RydWN0CnsKICBzaXplX3Qgc2l6ZTsKICBzaXplX3Qgc3RyaWRlOwogIHVuc2lnbmVkIGxvbmcg
KmRhdGE7CiAgZ3NsX2Jsb2NrX3Vsb25nICpibG9jazsKICBpbnQgb3duZXI7Cn0KZ3NsX3ZlY3Rv
cl91bG9uZzsKCnR5cGVkZWYgc3RydWN0CnsKICBnc2xfdmVjdG9yX3Vsb25nIHZlY3RvcjsKfSBf
Z3NsX3ZlY3Rvcl91bG9uZ192aWV3OwoKdHlwZWRlZiBfZ3NsX3ZlY3Rvcl91bG9uZ192aWV3IGdz
bF92ZWN0b3JfdWxvbmdfdmlldzsKCnR5cGVkZWYgc3RydWN0CnsKICBnc2xfdmVjdG9yX3Vsb25n
IHZlY3RvcjsKfSBfZ3NsX3ZlY3Rvcl91bG9uZ19jb25zdF92aWV3OwoKdHlwZWRlZiBjb25zdCBf
Z3NsX3ZlY3Rvcl91bG9uZ19jb25zdF92aWV3IGdzbF92ZWN0b3JfdWxvbmdfY29uc3RfdmlldzsK
CgoKCmdzbF92ZWN0b3JfdWxvbmcgKmdzbF92ZWN0b3JfdWxvbmdfYWxsb2MgKGNvbnN0IHNpemVf
dCBuKTsKZ3NsX3ZlY3Rvcl91bG9uZyAqZ3NsX3ZlY3Rvcl91bG9uZ19jYWxsb2MgKGNvbnN0IHNp
emVfdCBuKTsKCmdzbF92ZWN0b3JfdWxvbmcgKmdzbF92ZWN0b3JfdWxvbmdfYWxsb2NfZnJvbV9i
bG9jayAoZ3NsX2Jsb2NrX3Vsb25nICogYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgb2Zmc2V0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBuLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHNpemVfdCBzdHJpZGUpOwoKZ3NsX3ZlY3Rvcl91bG9uZyAqZ3NsX3ZlY3Rvcl91bG9uZ19hbGxv
Y19mcm9tX3ZlY3RvciAoZ3NsX3ZlY3Rvcl91bG9uZyAqIHYsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBvZmZzZXQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHNpemVfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzaXplX3Qgc3RyaWRlKTsKCnZvaWQgZ3NsX3ZlY3Rvcl91bG9uZ19mcmVl
IChnc2xfdmVjdG9yX3Vsb25nICogdik7CgoKCl9nc2xfdmVjdG9yX3Vsb25nX3ZpZXcKZ3NsX3Zl
Y3Rvcl91bG9uZ192aWV3X2FycmF5ICh1bnNpZ25lZCBsb25nICp2LCBzaXplX3Qgbik7CgpfZ3Ns
X3ZlY3Rvcl91bG9uZ192aWV3CmdzbF92ZWN0b3JfdWxvbmdfdmlld19hcnJheV93aXRoX3N0cmlk
ZSAodW5zaWduZWQgbG9uZyAqYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX3Vsb25nX2NvbnN0X3ZpZXcKZ3NsX3ZlY3Rv
cl91bG9uZ19jb25zdF92aWV3X2FycmF5IChjb25zdCB1bnNpZ25lZCBsb25nICp2LCBzaXplX3Qg
bik7CgpfZ3NsX3ZlY3Rvcl91bG9uZ19jb25zdF92aWV3CmdzbF92ZWN0b3JfdWxvbmdfY29uc3Rf
dmlld19hcnJheV93aXRoX3N0cmlkZSAoY29uc3QgdW5zaWduZWQgbG9uZyAqYmFzZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsK
Cl9nc2xfdmVjdG9yX3Vsb25nX3ZpZXcKZ3NsX3ZlY3Rvcl91bG9uZ19zdWJ2ZWN0b3IgKGdzbF92
ZWN0b3JfdWxvbmcgKnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX3Vsb25nX3Zp
ZXcKZ3NsX3ZlY3Rvcl91bG9uZ19zdWJ2ZWN0b3Jfd2l0aF9zdHJpZGUgKGdzbF92ZWN0b3JfdWxv
bmcgKnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3Zl
Y3Rvcl91bG9uZ19jb25zdF92aWV3CmdzbF92ZWN0b3JfdWxvbmdfY29uc3Rfc3VidmVjdG9yIChj
b25zdCBnc2xfdmVjdG9yX3Vsb25nICp2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7
CgpfZ3NsX3ZlY3Rvcl91bG9uZ19jb25zdF92aWV3CmdzbF92ZWN0b3JfdWxvbmdfY29uc3Rfc3Vi
dmVjdG9yX3dpdGhfc3RyaWRlIChjb25zdCBnc2xfdmVjdG9yX3Vsb25nICp2LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKCgp1bnNp
Z25lZCBsb25nIGdzbF92ZWN0b3JfdWxvbmdfZ2V0IChjb25zdCBnc2xfdmVjdG9yX3Vsb25nICog
diwgY29uc3Qgc2l6ZV90IGkpOwp2b2lkIGdzbF92ZWN0b3JfdWxvbmdfc2V0IChnc2xfdmVjdG9y
X3Vsb25nICogdiwgY29uc3Qgc2l6ZV90IGksIHVuc2lnbmVkIGxvbmcgeCk7Cgp1bnNpZ25lZCBs
b25nICpnc2xfdmVjdG9yX3Vsb25nX3B0ciAoZ3NsX3ZlY3Rvcl91bG9uZyAqIHYsIGNvbnN0IHNp
emVfdCBpKTsKY29uc3QgdW5zaWduZWQgbG9uZyAqZ3NsX3ZlY3Rvcl91bG9uZ19jb25zdF9wdHIg
KGNvbnN0IGdzbF92ZWN0b3JfdWxvbmcgKiB2LCBjb25zdCBzaXplX3QgaSk7Cgp2b2lkIGdzbF92
ZWN0b3JfdWxvbmdfc2V0X3plcm8gKGdzbF92ZWN0b3JfdWxvbmcgKiB2KTsKdm9pZCBnc2xfdmVj
dG9yX3Vsb25nX3NldF9hbGwgKGdzbF92ZWN0b3JfdWxvbmcgKiB2LCB1bnNpZ25lZCBsb25nIHgp
OwppbnQgZ3NsX3ZlY3Rvcl91bG9uZ19zZXRfYmFzaXMgKGdzbF92ZWN0b3JfdWxvbmcgKiB2LCBz
aXplX3QgaSk7CgppbnQgZ3NsX3ZlY3Rvcl91bG9uZ19mcmVhZCAoRklMRSAqIHN0cmVhbSwgZ3Ns
X3ZlY3Rvcl91bG9uZyAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl91bG9uZ19md3JpdGUgKEZJTEUgKiBz
dHJlYW0sIGNvbnN0IGdzbF92ZWN0b3JfdWxvbmcgKiB2KTsKaW50IGdzbF92ZWN0b3JfdWxvbmdf
ZnNjYW5mIChGSUxFICogc3RyZWFtLCBnc2xfdmVjdG9yX3Vsb25nICogdik7CmludCBnc2xfdmVj
dG9yX3Vsb25nX2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF92ZWN0b3JfdWxvbmcg
KiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQpOwoK
aW50IGdzbF92ZWN0b3JfdWxvbmdfbWVtY3B5IChnc2xfdmVjdG9yX3Vsb25nICogZGVzdCwgY29u
c3QgZ3NsX3ZlY3Rvcl91bG9uZyAqIHNyYyk7CgppbnQgZ3NsX3ZlY3Rvcl91bG9uZ19yZXZlcnNl
IChnc2xfdmVjdG9yX3Vsb25nICogdik7CgppbnQgZ3NsX3ZlY3Rvcl91bG9uZ19zd2FwIChnc2xf
dmVjdG9yX3Vsb25nICogdiwgZ3NsX3ZlY3Rvcl91bG9uZyAqIHcpOwppbnQgZ3NsX3ZlY3Rvcl91
bG9uZ19zd2FwX2VsZW1lbnRzIChnc2xfdmVjdG9yX3Vsb25nICogdiwgY29uc3Qgc2l6ZV90IGks
IGNvbnN0IHNpemVfdCBqKTsKCnVuc2lnbmVkIGxvbmcgZ3NsX3ZlY3Rvcl91bG9uZ19tYXggKGNv
bnN0IGdzbF92ZWN0b3JfdWxvbmcgKiB2KTsKdW5zaWduZWQgbG9uZyBnc2xfdmVjdG9yX3Vsb25n
X21pbiAoY29uc3QgZ3NsX3ZlY3Rvcl91bG9uZyAqIHYpOwp2b2lkIGdzbF92ZWN0b3JfdWxvbmdf
bWlubWF4IChjb25zdCBnc2xfdmVjdG9yX3Vsb25nICogdiwgdW5zaWduZWQgbG9uZyAqIG1pbl9v
dXQsIHVuc2lnbmVkIGxvbmcgKiBtYXhfb3V0KTsKCnNpemVfdCBnc2xfdmVjdG9yX3Vsb25nX21h
eF9pbmRleCAoY29uc3QgZ3NsX3ZlY3Rvcl91bG9uZyAqIHYpOwpzaXplX3QgZ3NsX3ZlY3Rvcl91
bG9uZ19taW5faW5kZXggKGNvbnN0IGdzbF92ZWN0b3JfdWxvbmcgKiB2KTsKdm9pZCBnc2xfdmVj
dG9yX3Vsb25nX21pbm1heF9pbmRleCAoY29uc3QgZ3NsX3ZlY3Rvcl91bG9uZyAqIHYsIHNpemVf
dCAqIGltaW4sIHNpemVfdCAqIGltYXgpOwoKaW50IGdzbF92ZWN0b3JfdWxvbmdfYWRkIChnc2xf
dmVjdG9yX3Vsb25nICogYSwgY29uc3QgZ3NsX3ZlY3Rvcl91bG9uZyAqIGIpOwppbnQgZ3NsX3Zl
Y3Rvcl91bG9uZ19zdWIgKGdzbF92ZWN0b3JfdWxvbmcgKiBhLCBjb25zdCBnc2xfdmVjdG9yX3Vs
b25nICogYik7CmludCBnc2xfdmVjdG9yX3Vsb25nX211bCAoZ3NsX3ZlY3Rvcl91bG9uZyAqIGEs
IGNvbnN0IGdzbF92ZWN0b3JfdWxvbmcgKiBiKTsKaW50IGdzbF92ZWN0b3JfdWxvbmdfZGl2IChn
c2xfdmVjdG9yX3Vsb25nICogYSwgY29uc3QgZ3NsX3ZlY3Rvcl91bG9uZyAqIGIpOwppbnQgZ3Ns
X3ZlY3Rvcl91bG9uZ19zY2FsZSAoZ3NsX3ZlY3Rvcl91bG9uZyAqIGEsIGNvbnN0IGRvdWJsZSB4
KTsKaW50IGdzbF92ZWN0b3JfdWxvbmdfYWRkX2NvbnN0YW50IChnc2xfdmVjdG9yX3Vsb25nICog
YSwgY29uc3QgZG91YmxlIHgpOwoKaW50IGdzbF92ZWN0b3JfdWxvbmdfaXNudWxsIChjb25zdCBn
c2xfdmVjdG9yX3Vsb25nICogdik7CgpleHRlcm4gaW50IGdzbF9jaGVja19yYW5nZTsKCgoKZXh0
ZXJuIGlubGluZQp1bnNpZ25lZCBsb25nCmdzbF92ZWN0b3JfdWxvbmdfZ2V0IChjb25zdCBnc2xf
dmVjdG9yX3Vsb25nICogdiwgY29uc3Qgc2l6ZV90IGkpCnsKCiAgaWYgKGkgPj0gdi0+c2l6ZSkK
ICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFuZ2UiLCAiL3Vzci9p
bmNsdWRlL2dzbC9nc2xfdmVjdG9yX3Vsb25nLmgiLCAxNzQsIEdTTF9FSU5WQUwpIDsgcmV0dXJu
IDAgOyB9IHdoaWxlICgwKTsKICAgIH0KCiAgcmV0dXJuIHYtPmRhdGFbaSAqIHYtPnN0cmlkZV07
Cn0KCmV4dGVybiBpbmxpbmUKdm9pZApnc2xfdmVjdG9yX3Vsb25nX3NldCAoZ3NsX3ZlY3Rvcl91
bG9uZyAqIHYsIGNvbnN0IHNpemVfdCBpLCB1bnNpZ25lZCBsb25nIHgpCnsKCiAgaWYgKGkgPj0g
di0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFuZ2Ui
LCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX3Vsb25nLmgiLCAxODcsIEdTTF9FSU5WQUwp
IDsgcmV0dXJuIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHYtPmRhdGFbaSAqIHYtPnN0cmlkZV0g
PSB4Owp9CgpleHRlcm4gaW5saW5lCnVuc2lnbmVkIGxvbmcgKgpnc2xfdmVjdG9yX3Vsb25nX3B0
ciAoZ3NsX3ZlY3Rvcl91bG9uZyAqIHYsIGNvbnN0IHNpemVfdCBpKQp7CgogIGlmIChpID49IHYt
PnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0IG9mIHJhbmdlIiwg
Ii91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl91bG9uZy5oIiwgMjAwLCBHU0xfRUlOVkFMKSA7
IHJldHVybiAwIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHJldHVybiAodW5zaWduZWQgbG9uZyAq
KSAodi0+ZGF0YSArIGkgKiB2LT5zdHJpZGUpOwp9CgpleHRlcm4gaW5saW5lCmNvbnN0IHVuc2ln
bmVkIGxvbmcgKgpnc2xfdmVjdG9yX3Vsb25nX2NvbnN0X3B0ciAoY29uc3QgZ3NsX3ZlY3Rvcl91
bG9uZyAqIHYsIGNvbnN0IHNpemVfdCBpKQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7CiAg
ICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9n
c2wvZ3NsX3ZlY3Rvcl91bG9uZy5oIiwgMjEzLCBHU0xfRUlOVkFMKSA7IHJldHVybiAwIDsgfSB3
aGlsZSAoMCk7CiAgICB9CgogIHJldHVybiAoY29uc3QgdW5zaWduZWQgbG9uZyAqKSAodi0+ZGF0
YSArIGkgKiB2LT5zdHJpZGUpOwp9CgoKCgoKIyAxMyAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVj
dG9yLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9sb25nLmgiIDEgMwoj
IDI1ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfbG9uZy5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2dzbC9nc2xfYmxvY2tfbG9uZy5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2dzbC9nc2xf
YmxvY2tfbG9uZy5oIiAzCgoKc3RydWN0IGdzbF9ibG9ja19sb25nX3N0cnVjdAp7CiAgc2l6ZV90
IHNpemU7CiAgbG9uZyAqZGF0YTsKfTsKCnR5cGVkZWYgc3RydWN0IGdzbF9ibG9ja19sb25nX3N0
cnVjdCBnc2xfYmxvY2tfbG9uZzsKCmdzbF9ibG9ja19sb25nICpnc2xfYmxvY2tfbG9uZ19hbGxv
YyAoY29uc3Qgc2l6ZV90IG4pOwpnc2xfYmxvY2tfbG9uZyAqZ3NsX2Jsb2NrX2xvbmdfY2FsbG9j
IChjb25zdCBzaXplX3Qgbik7CnZvaWQgZ3NsX2Jsb2NrX2xvbmdfZnJlZSAoZ3NsX2Jsb2NrX2xv
bmcgKiBiKTsKCmludCBnc2xfYmxvY2tfbG9uZ19mcmVhZCAoRklMRSAqIHN0cmVhbSwgZ3NsX2Js
b2NrX2xvbmcgKiBiKTsKaW50IGdzbF9ibG9ja19sb25nX2Z3cml0ZSAoRklMRSAqIHN0cmVhbSwg
Y29uc3QgZ3NsX2Jsb2NrX2xvbmcgKiBiKTsKaW50IGdzbF9ibG9ja19sb25nX2ZzY2FuZiAoRklM
RSAqIHN0cmVhbSwgZ3NsX2Jsb2NrX2xvbmcgKiBiKTsKaW50IGdzbF9ibG9ja19sb25nX2Zwcmlu
dGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja19sb25nICogYiwgY29uc3QgY2hhciAq
Zm9ybWF0KTsKCmludCBnc2xfYmxvY2tfbG9uZ19yYXdfZnJlYWQgKEZJTEUgKiBzdHJlYW0sIGxv
bmcgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxv
Y2tfbG9uZ19yYXdfZndyaXRlIChGSUxFICogc3RyZWFtLCBjb25zdCBsb25nICogYiwgY29uc3Qg
c2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUpOwppbnQgZ3NsX2Jsb2NrX2xvbmdfcmF3X2Zz
Y2FuZiAoRklMRSAqIHN0cmVhbSwgbG9uZyAqIGIsIGNvbnN0IHNpemVfdCBuLCBjb25zdCBzaXpl
X3Qgc3RyaWRlKTsKaW50IGdzbF9ibG9ja19sb25nX3Jhd19mcHJpbnRmIChGSUxFICogc3RyZWFt
LCBjb25zdCBsb25nICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUsIGNv
bnN0IGNoYXIgKmZvcm1hdCk7CgpzaXplX3QgZ3NsX2Jsb2NrX2xvbmdfc2l6ZSAoY29uc3QgZ3Ns
X2Jsb2NrX2xvbmcgKiBiKTsKbG9uZyAqIGdzbF9ibG9ja19sb25nX2RhdGEgKGNvbnN0IGdzbF9i
bG9ja19sb25nICogYik7CgoKIyAyNiAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2xvbmcu
aCIgMiAzCiMgMzcgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9sb25nLmgiIDMKCgp0eXBl
ZGVmIHN0cnVjdAp7CiAgc2l6ZV90IHNpemU7CiAgc2l6ZV90IHN0cmlkZTsKICBsb25nICpkYXRh
OwogIGdzbF9ibG9ja19sb25nICpibG9jazsKICBpbnQgb3duZXI7Cn0KZ3NsX3ZlY3Rvcl9sb25n
OwoKdHlwZWRlZiBzdHJ1Y3QKewogIGdzbF92ZWN0b3JfbG9uZyB2ZWN0b3I7Cn0gX2dzbF92ZWN0
b3JfbG9uZ192aWV3OwoKdHlwZWRlZiBfZ3NsX3ZlY3Rvcl9sb25nX3ZpZXcgZ3NsX3ZlY3Rvcl9s
b25nX3ZpZXc7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgZ3NsX3ZlY3Rvcl9sb25nIHZlY3RvcjsKfSBf
Z3NsX3ZlY3Rvcl9sb25nX2NvbnN0X3ZpZXc7Cgp0eXBlZGVmIGNvbnN0IF9nc2xfdmVjdG9yX2xv
bmdfY29uc3RfdmlldyBnc2xfdmVjdG9yX2xvbmdfY29uc3RfdmlldzsKCgoKCmdzbF92ZWN0b3Jf
bG9uZyAqZ3NsX3ZlY3Rvcl9sb25nX2FsbG9jIChjb25zdCBzaXplX3Qgbik7CmdzbF92ZWN0b3Jf
bG9uZyAqZ3NsX3ZlY3Rvcl9sb25nX2NhbGxvYyAoY29uc3Qgc2l6ZV90IG4pOwoKZ3NsX3ZlY3Rv
cl9sb25nICpnc2xfdmVjdG9yX2xvbmdfYWxsb2NfZnJvbV9ibG9jayAoZ3NsX2Jsb2NrX2xvbmcg
KiBiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHNpemVfdCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHN0cmlkZSk7Cgpnc2xf
dmVjdG9yX2xvbmcgKmdzbF92ZWN0b3JfbG9uZ19hbGxvY19mcm9tX3ZlY3RvciAoZ3NsX3ZlY3Rv
cl9sb25nICogdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc2l6ZV90IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG4sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBzdHJp
ZGUpOwoKdm9pZCBnc2xfdmVjdG9yX2xvbmdfZnJlZSAoZ3NsX3ZlY3Rvcl9sb25nICogdik7CgoK
Cl9nc2xfdmVjdG9yX2xvbmdfdmlldwpnc2xfdmVjdG9yX2xvbmdfdmlld19hcnJheSAobG9uZyAq
diwgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfbG9uZ192aWV3CmdzbF92ZWN0b3JfbG9uZ192aWV3
X2FycmF5X3dpdGhfc3RyaWRlIChsb25nICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfbG9uZ19jb25zdF92aWV3Cmdz
bF92ZWN0b3JfbG9uZ19jb25zdF92aWV3X2FycmF5IChjb25zdCBsb25nICp2LCBzaXplX3Qgbik7
CgpfZ3NsX3ZlY3Rvcl9sb25nX2NvbnN0X3ZpZXcKZ3NsX3ZlY3Rvcl9sb25nX2NvbnN0X3ZpZXdf
YXJyYXlfd2l0aF9zdHJpZGUgKGNvbnN0IGxvbmcgKmJhc2UsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9s
b25nX3ZpZXcKZ3NsX3ZlY3Rvcl9sb25nX3N1YnZlY3RvciAoZ3NsX3ZlY3Rvcl9sb25nICp2LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9sb25nX3ZpZXcKZ3NsX3ZlY3Rvcl9sb25n
X3N1YnZlY3Rvcl93aXRoX3N0cmlkZSAoZ3NsX3ZlY3Rvcl9sb25nICp2LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfbG9uZ19jb25zdF92aWV3
CmdzbF92ZWN0b3JfbG9uZ19jb25zdF9zdWJ2ZWN0b3IgKGNvbnN0IGdzbF92ZWN0b3JfbG9uZyAq
diwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfbG9uZ19jb25z
dF92aWV3CmdzbF92ZWN0b3JfbG9uZ19jb25zdF9zdWJ2ZWN0b3Jfd2l0aF9zdHJpZGUgKGNvbnN0
IGdzbF92ZWN0b3JfbG9uZyAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBuKTsKCgoKbG9uZyBnc2xfdmVjdG9yX2xvbmdfZ2V0IChjb25z
dCBnc2xfdmVjdG9yX2xvbmcgKiB2LCBjb25zdCBzaXplX3QgaSk7CnZvaWQgZ3NsX3ZlY3Rvcl9s
b25nX3NldCAoZ3NsX3ZlY3Rvcl9sb25nICogdiwgY29uc3Qgc2l6ZV90IGksIGxvbmcgeCk7Cgps
b25nICpnc2xfdmVjdG9yX2xvbmdfcHRyIChnc2xfdmVjdG9yX2xvbmcgKiB2LCBjb25zdCBzaXpl
X3QgaSk7CmNvbnN0IGxvbmcgKmdzbF92ZWN0b3JfbG9uZ19jb25zdF9wdHIgKGNvbnN0IGdzbF92
ZWN0b3JfbG9uZyAqIHYsIGNvbnN0IHNpemVfdCBpKTsKCnZvaWQgZ3NsX3ZlY3Rvcl9sb25nX3Nl
dF96ZXJvIChnc2xfdmVjdG9yX2xvbmcgKiB2KTsKdm9pZCBnc2xfdmVjdG9yX2xvbmdfc2V0X2Fs
bCAoZ3NsX3ZlY3Rvcl9sb25nICogdiwgbG9uZyB4KTsKaW50IGdzbF92ZWN0b3JfbG9uZ19zZXRf
YmFzaXMgKGdzbF92ZWN0b3JfbG9uZyAqIHYsIHNpemVfdCBpKTsKCmludCBnc2xfdmVjdG9yX2xv
bmdfZnJlYWQgKEZJTEUgKiBzdHJlYW0sIGdzbF92ZWN0b3JfbG9uZyAqIHYpOwppbnQgZ3NsX3Zl
Y3Rvcl9sb25nX2Z3cml0ZSAoRklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX3ZlY3Rvcl9sb25nICog
dik7CmludCBnc2xfdmVjdG9yX2xvbmdfZnNjYW5mIChGSUxFICogc3RyZWFtLCBnc2xfdmVjdG9y
X2xvbmcgKiB2KTsKaW50IGdzbF92ZWN0b3JfbG9uZ19mcHJpbnRmIChGSUxFICogc3RyZWFtLCBj
b25zdCBnc2xfdmVjdG9yX2xvbmcgKiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICpmb3JtYXQpOwoKaW50IGdzbF92ZWN0b3JfbG9uZ19tZW1jcHkgKGdzbF92ZWN0
b3JfbG9uZyAqIGRlc3QsIGNvbnN0IGdzbF92ZWN0b3JfbG9uZyAqIHNyYyk7CgppbnQgZ3NsX3Zl
Y3Rvcl9sb25nX3JldmVyc2UgKGdzbF92ZWN0b3JfbG9uZyAqIHYpOwoKaW50IGdzbF92ZWN0b3Jf
bG9uZ19zd2FwIChnc2xfdmVjdG9yX2xvbmcgKiB2LCBnc2xfdmVjdG9yX2xvbmcgKiB3KTsKaW50
IGdzbF92ZWN0b3JfbG9uZ19zd2FwX2VsZW1lbnRzIChnc2xfdmVjdG9yX2xvbmcgKiB2LCBjb25z
dCBzaXplX3QgaSwgY29uc3Qgc2l6ZV90IGopOwoKbG9uZyBnc2xfdmVjdG9yX2xvbmdfbWF4IChj
b25zdCBnc2xfdmVjdG9yX2xvbmcgKiB2KTsKbG9uZyBnc2xfdmVjdG9yX2xvbmdfbWluIChjb25z
dCBnc2xfdmVjdG9yX2xvbmcgKiB2KTsKdm9pZCBnc2xfdmVjdG9yX2xvbmdfbWlubWF4IChjb25z
dCBnc2xfdmVjdG9yX2xvbmcgKiB2LCBsb25nICogbWluX291dCwgbG9uZyAqIG1heF9vdXQpOwoK
c2l6ZV90IGdzbF92ZWN0b3JfbG9uZ19tYXhfaW5kZXggKGNvbnN0IGdzbF92ZWN0b3JfbG9uZyAq
IHYpOwpzaXplX3QgZ3NsX3ZlY3Rvcl9sb25nX21pbl9pbmRleCAoY29uc3QgZ3NsX3ZlY3Rvcl9s
b25nICogdik7CnZvaWQgZ3NsX3ZlY3Rvcl9sb25nX21pbm1heF9pbmRleCAoY29uc3QgZ3NsX3Zl
Y3Rvcl9sb25nICogdiwgc2l6ZV90ICogaW1pbiwgc2l6ZV90ICogaW1heCk7CgppbnQgZ3NsX3Zl
Y3Rvcl9sb25nX2FkZCAoZ3NsX3ZlY3Rvcl9sb25nICogYSwgY29uc3QgZ3NsX3ZlY3Rvcl9sb25n
ICogYik7CmludCBnc2xfdmVjdG9yX2xvbmdfc3ViIChnc2xfdmVjdG9yX2xvbmcgKiBhLCBjb25z
dCBnc2xfdmVjdG9yX2xvbmcgKiBiKTsKaW50IGdzbF92ZWN0b3JfbG9uZ19tdWwgKGdzbF92ZWN0
b3JfbG9uZyAqIGEsIGNvbnN0IGdzbF92ZWN0b3JfbG9uZyAqIGIpOwppbnQgZ3NsX3ZlY3Rvcl9s
b25nX2RpdiAoZ3NsX3ZlY3Rvcl9sb25nICogYSwgY29uc3QgZ3NsX3ZlY3Rvcl9sb25nICogYik7
CmludCBnc2xfdmVjdG9yX2xvbmdfc2NhbGUgKGdzbF92ZWN0b3JfbG9uZyAqIGEsIGNvbnN0IGRv
dWJsZSB4KTsKaW50IGdzbF92ZWN0b3JfbG9uZ19hZGRfY29uc3RhbnQgKGdzbF92ZWN0b3JfbG9u
ZyAqIGEsIGNvbnN0IGRvdWJsZSB4KTsKCmludCBnc2xfdmVjdG9yX2xvbmdfaXNudWxsIChjb25z
dCBnc2xfdmVjdG9yX2xvbmcgKiB2KTsKCmV4dGVybiBpbnQgZ3NsX2NoZWNrX3JhbmdlOwoKCgpl
eHRlcm4gaW5saW5lCmxvbmcKZ3NsX3ZlY3Rvcl9sb25nX2dldCAoY29uc3QgZ3NsX3ZlY3Rvcl9s
b25nICogdiwgY29uc3Qgc2l6ZV90IGkpCnsKCiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAg
ICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dz
bC9nc2xfdmVjdG9yX2xvbmcuaCIsIDE3NCwgR1NMX0VJTlZBTCkgOyByZXR1cm4gMCA7IH0gd2hp
bGUgKDApOwogICAgfQoKICByZXR1cm4gdi0+ZGF0YVtpICogdi0+c3RyaWRlXTsKfQoKZXh0ZXJu
IGlubGluZQp2b2lkCmdzbF92ZWN0b3JfbG9uZ19zZXQgKGdzbF92ZWN0b3JfbG9uZyAqIHYsIGNv
bnN0IHNpemVfdCBpLCBsb25nIHgpCnsKCiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAg
ZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9n
c2xfdmVjdG9yX2xvbmcuaCIsIDE4NywgR1NMX0VJTlZBTCkgOyByZXR1cm4gOyB9IHdoaWxlICgw
KTsKICAgIH0KCiAgdi0+ZGF0YVtpICogdi0+c3RyaWRlXSA9IHg7Cn0KCmV4dGVybiBpbmxpbmUK
bG9uZyAqCmdzbF92ZWN0b3JfbG9uZ19wdHIgKGdzbF92ZWN0b3JfbG9uZyAqIHYsIGNvbnN0IHNp
emVfdCBpKQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9y
ICgiaW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9sb25n
LmgiLCAyMDAsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDAgOyB9IHdoaWxlICgwKTsKICAgIH0KCiAg
cmV0dXJuIChsb25nICopICh2LT5kYXRhICsgaSAqIHYtPnN0cmlkZSk7Cn0KCmV4dGVybiBpbmxp
bmUKY29uc3QgbG9uZyAqCmdzbF92ZWN0b3JfbG9uZ19jb25zdF9wdHIgKGNvbnN0IGdzbF92ZWN0
b3JfbG9uZyAqIHYsIGNvbnN0IHNpemVfdCBpKQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7
CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVk
ZS9nc2wvZ3NsX3ZlY3Rvcl9sb25nLmgiLCAyMTMsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDAgOyB9
IHdoaWxlICgwKTsKICAgIH0KCiAgcmV0dXJuIChjb25zdCBsb25nICopICh2LT5kYXRhICsgaSAq
IHYtPnN0cmlkZSk7Cn0KCgoKCgojIDE0ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3IuaCIg
MiAzCgojIDEgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl91aW50LmgiIDEgMwojIDI1ICIv
dXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfdWludC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dz
bC9nc2xfYmxvY2tfdWludC5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfYmxvY2tf
dWludC5oIiAzCgoKc3RydWN0IGdzbF9ibG9ja191aW50X3N0cnVjdAp7CiAgc2l6ZV90IHNpemU7
CiAgdW5zaWduZWQgaW50ICpkYXRhOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgZ3NsX2Jsb2NrX3VpbnRf
c3RydWN0IGdzbF9ibG9ja191aW50OwoKZ3NsX2Jsb2NrX3VpbnQgKmdzbF9ibG9ja191aW50X2Fs
bG9jIChjb25zdCBzaXplX3Qgbik7CmdzbF9ibG9ja191aW50ICpnc2xfYmxvY2tfdWludF9jYWxs
b2MgKGNvbnN0IHNpemVfdCBuKTsKdm9pZCBnc2xfYmxvY2tfdWludF9mcmVlIChnc2xfYmxvY2tf
dWludCAqIGIpOwoKaW50IGdzbF9ibG9ja191aW50X2ZyZWFkIChGSUxFICogc3RyZWFtLCBnc2xf
YmxvY2tfdWludCAqIGIpOwppbnQgZ3NsX2Jsb2NrX3VpbnRfZndyaXRlIChGSUxFICogc3RyZWFt
LCBjb25zdCBnc2xfYmxvY2tfdWludCAqIGIpOwppbnQgZ3NsX2Jsb2NrX3VpbnRfZnNjYW5mIChG
SUxFICogc3RyZWFtLCBnc2xfYmxvY2tfdWludCAqIGIpOwppbnQgZ3NsX2Jsb2NrX3VpbnRfZnBy
aW50ZiAoRklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX2Jsb2NrX3VpbnQgKiBiLCBjb25zdCBjaGFy
ICpmb3JtYXQpOwoKaW50IGdzbF9ibG9ja191aW50X3Jhd19mcmVhZCAoRklMRSAqIHN0cmVhbSwg
dW5zaWduZWQgaW50ICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUpOwpp
bnQgZ3NsX2Jsb2NrX3VpbnRfcmF3X2Z3cml0ZSAoRklMRSAqIHN0cmVhbSwgY29uc3QgdW5zaWdu
ZWQgaW50ICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUpOwppbnQgZ3Ns
X2Jsb2NrX3VpbnRfcmF3X2ZzY2FuZiAoRklMRSAqIHN0cmVhbSwgdW5zaWduZWQgaW50ICogYiwg
Y29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUpOwppbnQgZ3NsX2Jsb2NrX3VpbnRf
cmF3X2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IHVuc2lnbmVkIGludCAqIGIsIGNvbnN0
IHNpemVfdCBuLCBjb25zdCBzaXplX3Qgc3RyaWRlLCBjb25zdCBjaGFyICpmb3JtYXQpOwoKc2l6
ZV90IGdzbF9ibG9ja191aW50X3NpemUgKGNvbnN0IGdzbF9ibG9ja191aW50ICogYik7CnVuc2ln
bmVkIGludCAqIGdzbF9ibG9ja191aW50X2RhdGEgKGNvbnN0IGdzbF9ibG9ja191aW50ICogYik7
CgoKIyAyNiAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX3VpbnQuaCIgMiAzCiMgMzcgIi91
c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl91aW50LmgiIDMKCgp0eXBlZGVmIHN0cnVjdAp7CiAg
c2l6ZV90IHNpemU7CiAgc2l6ZV90IHN0cmlkZTsKICB1bnNpZ25lZCBpbnQgKmRhdGE7CiAgZ3Ns
X2Jsb2NrX3VpbnQgKmJsb2NrOwogIGludCBvd25lcjsKfQpnc2xfdmVjdG9yX3VpbnQ7Cgp0eXBl
ZGVmIHN0cnVjdAp7CiAgZ3NsX3ZlY3Rvcl91aW50IHZlY3RvcjsKfSBfZ3NsX3ZlY3Rvcl91aW50
X3ZpZXc7Cgp0eXBlZGVmIF9nc2xfdmVjdG9yX3VpbnRfdmlldyBnc2xfdmVjdG9yX3VpbnRfdmll
dzsKCnR5cGVkZWYgc3RydWN0CnsKICBnc2xfdmVjdG9yX3VpbnQgdmVjdG9yOwp9IF9nc2xfdmVj
dG9yX3VpbnRfY29uc3RfdmlldzsKCnR5cGVkZWYgY29uc3QgX2dzbF92ZWN0b3JfdWludF9jb25z
dF92aWV3IGdzbF92ZWN0b3JfdWludF9jb25zdF92aWV3OwoKCgoKZ3NsX3ZlY3Rvcl91aW50ICpn
c2xfdmVjdG9yX3VpbnRfYWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKZ3NsX3ZlY3Rvcl91aW50ICpn
c2xfdmVjdG9yX3VpbnRfY2FsbG9jIChjb25zdCBzaXplX3Qgbik7Cgpnc2xfdmVjdG9yX3VpbnQg
KmdzbF92ZWN0b3JfdWludF9hbGxvY19mcm9tX2Jsb2NrIChnc2xfYmxvY2tfdWludCAqIGIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c2l6ZV90IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzaXplX3QgbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgc3RyaWRlKTsKCmdzbF92ZWN0b3Jf
dWludCAqZ3NsX3ZlY3Rvcl91aW50X2FsbG9jX2Zyb21fdmVjdG9yIChnc2xfdmVjdG9yX3VpbnQg
KiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzaXplX3Qgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHN0cmlkZSk7Cgp2
b2lkIGdzbF92ZWN0b3JfdWludF9mcmVlIChnc2xfdmVjdG9yX3VpbnQgKiB2KTsKCgoKX2dzbF92
ZWN0b3JfdWludF92aWV3CmdzbF92ZWN0b3JfdWludF92aWV3X2FycmF5ICh1bnNpZ25lZCBpbnQg
KnYsIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX3VpbnRfdmlldwpnc2xfdmVjdG9yX3VpbnRfdmll
d19hcnJheV93aXRoX3N0cmlkZSAodW5zaWduZWQgaW50ICpiYXNlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfdWludF9jb25z
dF92aWV3CmdzbF92ZWN0b3JfdWludF9jb25zdF92aWV3X2FycmF5IChjb25zdCB1bnNpZ25lZCBp
bnQgKnYsIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX3VpbnRfY29uc3Rfdmlldwpnc2xfdmVjdG9y
X3VpbnRfY29uc3Rfdmlld19hcnJheV93aXRoX3N0cmlkZSAoY29uc3QgdW5zaWduZWQgaW50ICpi
YXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfdWludF92aWV3CmdzbF92ZWN0b3JfdWludF9zdWJ2ZWN0
b3IgKGdzbF92ZWN0b3JfdWludCAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3Jf
dWludF92aWV3CmdzbF92ZWN0b3JfdWludF9zdWJ2ZWN0b3Jfd2l0aF9zdHJpZGUgKGdzbF92ZWN0
b3JfdWludCAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0cmlk
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCl9n
c2xfdmVjdG9yX3VpbnRfY29uc3Rfdmlldwpnc2xfdmVjdG9yX3VpbnRfY29uc3Rfc3VidmVjdG9y
IChjb25zdCBnc2xfdmVjdG9yX3VpbnQgKnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBu
KTsKCl9nc2xfdmVjdG9yX3VpbnRfY29uc3Rfdmlldwpnc2xfdmVjdG9yX3VpbnRfY29uc3Rfc3Vi
dmVjdG9yX3dpdGhfc3RyaWRlIChjb25zdCBnc2xfdmVjdG9yX3VpbnQgKnYsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgoKCnVuc2ln
bmVkIGludCBnc2xfdmVjdG9yX3VpbnRfZ2V0IChjb25zdCBnc2xfdmVjdG9yX3VpbnQgKiB2LCBj
b25zdCBzaXplX3QgaSk7CnZvaWQgZ3NsX3ZlY3Rvcl91aW50X3NldCAoZ3NsX3ZlY3Rvcl91aW50
ICogdiwgY29uc3Qgc2l6ZV90IGksIHVuc2lnbmVkIGludCB4KTsKCnVuc2lnbmVkIGludCAqZ3Ns
X3ZlY3Rvcl91aW50X3B0ciAoZ3NsX3ZlY3Rvcl91aW50ICogdiwgY29uc3Qgc2l6ZV90IGkpOwpj
b25zdCB1bnNpZ25lZCBpbnQgKmdzbF92ZWN0b3JfdWludF9jb25zdF9wdHIgKGNvbnN0IGdzbF92
ZWN0b3JfdWludCAqIHYsIGNvbnN0IHNpemVfdCBpKTsKCnZvaWQgZ3NsX3ZlY3Rvcl91aW50X3Nl
dF96ZXJvIChnc2xfdmVjdG9yX3VpbnQgKiB2KTsKdm9pZCBnc2xfdmVjdG9yX3VpbnRfc2V0X2Fs
bCAoZ3NsX3ZlY3Rvcl91aW50ICogdiwgdW5zaWduZWQgaW50IHgpOwppbnQgZ3NsX3ZlY3Rvcl91
aW50X3NldF9iYXNpcyAoZ3NsX3ZlY3Rvcl91aW50ICogdiwgc2l6ZV90IGkpOwoKaW50IGdzbF92
ZWN0b3JfdWludF9mcmVhZCAoRklMRSAqIHN0cmVhbSwgZ3NsX3ZlY3Rvcl91aW50ICogdik7Cmlu
dCBnc2xfdmVjdG9yX3VpbnRfZndyaXRlIChGSUxFICogc3RyZWFtLCBjb25zdCBnc2xfdmVjdG9y
X3VpbnQgKiB2KTsKaW50IGdzbF92ZWN0b3JfdWludF9mc2NhbmYgKEZJTEUgKiBzdHJlYW0sIGdz
bF92ZWN0b3JfdWludCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl91aW50X2ZwcmludGYgKEZJTEUgKiBz
dHJlYW0sIGNvbnN0IGdzbF92ZWN0b3JfdWludCAqIHYsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCk7CgppbnQgZ3NsX3ZlY3Rvcl91aW50X21lbWNweSAo
Z3NsX3ZlY3Rvcl91aW50ICogZGVzdCwgY29uc3QgZ3NsX3ZlY3Rvcl91aW50ICogc3JjKTsKCmlu
dCBnc2xfdmVjdG9yX3VpbnRfcmV2ZXJzZSAoZ3NsX3ZlY3Rvcl91aW50ICogdik7CgppbnQgZ3Ns
X3ZlY3Rvcl91aW50X3N3YXAgKGdzbF92ZWN0b3JfdWludCAqIHYsIGdzbF92ZWN0b3JfdWludCAq
IHcpOwppbnQgZ3NsX3ZlY3Rvcl91aW50X3N3YXBfZWxlbWVudHMgKGdzbF92ZWN0b3JfdWludCAq
IHYsIGNvbnN0IHNpemVfdCBpLCBjb25zdCBzaXplX3Qgaik7Cgp1bnNpZ25lZCBpbnQgZ3NsX3Zl
Y3Rvcl91aW50X21heCAoY29uc3QgZ3NsX3ZlY3Rvcl91aW50ICogdik7CnVuc2lnbmVkIGludCBn
c2xfdmVjdG9yX3VpbnRfbWluIChjb25zdCBnc2xfdmVjdG9yX3VpbnQgKiB2KTsKdm9pZCBnc2xf
dmVjdG9yX3VpbnRfbWlubWF4IChjb25zdCBnc2xfdmVjdG9yX3VpbnQgKiB2LCB1bnNpZ25lZCBp
bnQgKiBtaW5fb3V0LCB1bnNpZ25lZCBpbnQgKiBtYXhfb3V0KTsKCnNpemVfdCBnc2xfdmVjdG9y
X3VpbnRfbWF4X2luZGV4IChjb25zdCBnc2xfdmVjdG9yX3VpbnQgKiB2KTsKc2l6ZV90IGdzbF92
ZWN0b3JfdWludF9taW5faW5kZXggKGNvbnN0IGdzbF92ZWN0b3JfdWludCAqIHYpOwp2b2lkIGdz
bF92ZWN0b3JfdWludF9taW5tYXhfaW5kZXggKGNvbnN0IGdzbF92ZWN0b3JfdWludCAqIHYsIHNp
emVfdCAqIGltaW4sIHNpemVfdCAqIGltYXgpOwoKaW50IGdzbF92ZWN0b3JfdWludF9hZGQgKGdz
bF92ZWN0b3JfdWludCAqIGEsIGNvbnN0IGdzbF92ZWN0b3JfdWludCAqIGIpOwppbnQgZ3NsX3Zl
Y3Rvcl91aW50X3N1YiAoZ3NsX3ZlY3Rvcl91aW50ICogYSwgY29uc3QgZ3NsX3ZlY3Rvcl91aW50
ICogYik7CmludCBnc2xfdmVjdG9yX3VpbnRfbXVsIChnc2xfdmVjdG9yX3VpbnQgKiBhLCBjb25z
dCBnc2xfdmVjdG9yX3VpbnQgKiBiKTsKaW50IGdzbF92ZWN0b3JfdWludF9kaXYgKGdzbF92ZWN0
b3JfdWludCAqIGEsIGNvbnN0IGdzbF92ZWN0b3JfdWludCAqIGIpOwppbnQgZ3NsX3ZlY3Rvcl91
aW50X3NjYWxlIChnc2xfdmVjdG9yX3VpbnQgKiBhLCBjb25zdCBkb3VibGUgeCk7CmludCBnc2xf
dmVjdG9yX3VpbnRfYWRkX2NvbnN0YW50IChnc2xfdmVjdG9yX3VpbnQgKiBhLCBjb25zdCBkb3Vi
bGUgeCk7CgppbnQgZ3NsX3ZlY3Rvcl91aW50X2lzbnVsbCAoY29uc3QgZ3NsX3ZlY3Rvcl91aW50
ICogdik7CgpleHRlcm4gaW50IGdzbF9jaGVja19yYW5nZTsKCgoKZXh0ZXJuIGlubGluZQp1bnNp
Z25lZCBpbnQKZ3NsX3ZlY3Rvcl91aW50X2dldCAoY29uc3QgZ3NsX3ZlY3Rvcl91aW50ICogdiwg
Y29uc3Qgc2l6ZV90IGkpCnsKCiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBn
c2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVj
dG9yX3VpbnQuaCIsIDE3NCwgR1NMX0VJTlZBTCkgOyByZXR1cm4gMCA7IH0gd2hpbGUgKDApOwog
ICAgfQoKICByZXR1cm4gdi0+ZGF0YVtpICogdi0+c3RyaWRlXTsKfQoKZXh0ZXJuIGlubGluZQp2
b2lkCmdzbF92ZWN0b3JfdWludF9zZXQgKGdzbF92ZWN0b3JfdWludCAqIHYsIGNvbnN0IHNpemVf
dCBpLCB1bnNpZ25lZCBpbnQgeCkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAgICBk
byB7IGdzbF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUvZ3NsL2dz
bF92ZWN0b3JfdWludC5oIiwgMTg3LCBHU0xfRUlOVkFMKSA7IHJldHVybiA7IH0gd2hpbGUgKDAp
OwogICAgfQoKICB2LT5kYXRhW2kgKiB2LT5zdHJpZGVdID0geDsKfQoKZXh0ZXJuIGlubGluZQp1
bnNpZ25lZCBpbnQgKgpnc2xfdmVjdG9yX3VpbnRfcHRyIChnc2xfdmVjdG9yX3VpbnQgKiB2LCBj
b25zdCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAgICBkbyB7IGdz
bF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0
b3JfdWludC5oIiwgMjAwLCBHU0xfRUlOVkFMKSA7IHJldHVybiAwIDsgfSB3aGlsZSAoMCk7CiAg
ICB9CgogIHJldHVybiAodW5zaWduZWQgaW50ICopICh2LT5kYXRhICsgaSAqIHYtPnN0cmlkZSk7
Cn0KCmV4dGVybiBpbmxpbmUKY29uc3QgdW5zaWduZWQgaW50ICoKZ3NsX3ZlY3Rvcl91aW50X2Nv
bnN0X3B0ciAoY29uc3QgZ3NsX3ZlY3Rvcl91aW50ICogdiwgY29uc3Qgc2l6ZV90IGkpCnsKCiAg
aWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQg
b2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX3VpbnQuaCIsIDIxMywgR1NM
X0VJTlZBTCkgOyByZXR1cm4gMCA7IH0gd2hpbGUgKDApOwogICAgfQoKICByZXR1cm4gKGNvbnN0
IHVuc2lnbmVkIGludCAqKSAodi0+ZGF0YSArIGkgKiB2LT5zdHJpZGUpOwp9CgoKCgoKIyAxNiAi
L3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nc2wv
Z3NsX3ZlY3Rvcl9pbnQuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9p
bnQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX2Jsb2NrX2ludC5oIiAxIDMKIyAzNiAi
L3Vzci9pbmNsdWRlL2dzbC9nc2xfYmxvY2tfaW50LmgiIDMKCgpzdHJ1Y3QgZ3NsX2Jsb2NrX2lu
dF9zdHJ1Y3QKewogIHNpemVfdCBzaXplOwogIGludCAqZGF0YTsKfTsKCnR5cGVkZWYgc3RydWN0
IGdzbF9ibG9ja19pbnRfc3RydWN0IGdzbF9ibG9ja19pbnQ7Cgpnc2xfYmxvY2tfaW50ICpnc2xf
YmxvY2tfaW50X2FsbG9jIChjb25zdCBzaXplX3Qgbik7CmdzbF9ibG9ja19pbnQgKmdzbF9ibG9j
a19pbnRfY2FsbG9jIChjb25zdCBzaXplX3Qgbik7CnZvaWQgZ3NsX2Jsb2NrX2ludF9mcmVlIChn
c2xfYmxvY2tfaW50ICogYik7CgppbnQgZ3NsX2Jsb2NrX2ludF9mcmVhZCAoRklMRSAqIHN0cmVh
bSwgZ3NsX2Jsb2NrX2ludCAqIGIpOwppbnQgZ3NsX2Jsb2NrX2ludF9md3JpdGUgKEZJTEUgKiBz
dHJlYW0sIGNvbnN0IGdzbF9ibG9ja19pbnQgKiBiKTsKaW50IGdzbF9ibG9ja19pbnRfZnNjYW5m
IChGSUxFICogc3RyZWFtLCBnc2xfYmxvY2tfaW50ICogYik7CmludCBnc2xfYmxvY2tfaW50X2Zw
cmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja19pbnQgKiBiLCBjb25zdCBjaGFy
ICpmb3JtYXQpOwoKaW50IGdzbF9ibG9ja19pbnRfcmF3X2ZyZWFkIChGSUxFICogc3RyZWFtLCBp
bnQgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxv
Y2tfaW50X3Jhd19md3JpdGUgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGludCAqIGIsIGNvbnN0IHNp
emVfdCBuLCBjb25zdCBzaXplX3Qgc3RyaWRlKTsKaW50IGdzbF9ibG9ja19pbnRfcmF3X2ZzY2Fu
ZiAoRklMRSAqIHN0cmVhbSwgaW50ICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBz
dHJpZGUpOwppbnQgZ3NsX2Jsb2NrX2ludF9yYXdfZnByaW50ZiAoRklMRSAqIHN0cmVhbSwgY29u
c3QgaW50ICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUsIGNvbnN0IGNo
YXIgKmZvcm1hdCk7CgpzaXplX3QgZ3NsX2Jsb2NrX2ludF9zaXplIChjb25zdCBnc2xfYmxvY2tf
aW50ICogYik7CmludCAqIGdzbF9ibG9ja19pbnRfZGF0YSAoY29uc3QgZ3NsX2Jsb2NrX2ludCAq
IGIpOwoKCiMgMjYgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9pbnQuaCIgMiAzCiMgMzcg
Ii91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9pbnQuaCIgMwoKCnR5cGVkZWYgc3RydWN0CnsK
ICBzaXplX3Qgc2l6ZTsKICBzaXplX3Qgc3RyaWRlOwogIGludCAqZGF0YTsKICBnc2xfYmxvY2tf
aW50ICpibG9jazsKICBpbnQgb3duZXI7Cn0KZ3NsX3ZlY3Rvcl9pbnQ7Cgp0eXBlZGVmIHN0cnVj
dAp7CiAgZ3NsX3ZlY3Rvcl9pbnQgdmVjdG9yOwp9IF9nc2xfdmVjdG9yX2ludF92aWV3OwoKdHlw
ZWRlZiBfZ3NsX3ZlY3Rvcl9pbnRfdmlldyBnc2xfdmVjdG9yX2ludF92aWV3OwoKdHlwZWRlZiBz
dHJ1Y3QKewogIGdzbF92ZWN0b3JfaW50IHZlY3RvcjsKfSBfZ3NsX3ZlY3Rvcl9pbnRfY29uc3Rf
dmlldzsKCnR5cGVkZWYgY29uc3QgX2dzbF92ZWN0b3JfaW50X2NvbnN0X3ZpZXcgZ3NsX3ZlY3Rv
cl9pbnRfY29uc3RfdmlldzsKCgoKCmdzbF92ZWN0b3JfaW50ICpnc2xfdmVjdG9yX2ludF9hbGxv
YyAoY29uc3Qgc2l6ZV90IG4pOwpnc2xfdmVjdG9yX2ludCAqZ3NsX3ZlY3Rvcl9pbnRfY2FsbG9j
IChjb25zdCBzaXplX3Qgbik7Cgpnc2xfdmVjdG9yX2ludCAqZ3NsX3ZlY3Rvcl9pbnRfYWxsb2Nf
ZnJvbV9ibG9jayAoZ3NsX2Jsb2NrX2ludCAqIGIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG9mZnNldCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qg
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzaXplX3Qgc3RyaWRlKTsKCmdzbF92ZWN0b3JfaW50ICpnc2xfdmVjdG9yX2ludF9hbGxv
Y19mcm9tX3ZlY3RvciAoZ3NsX3ZlY3Rvcl9pbnQgKiB2LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgb2Zmc2V0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
aXplX3QgbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc2l6ZV90IHN0cmlkZSk7Cgp2b2lkIGdzbF92ZWN0b3JfaW50X2ZyZWUgKGdz
bF92ZWN0b3JfaW50ICogdik7CgoKCl9nc2xfdmVjdG9yX2ludF92aWV3CmdzbF92ZWN0b3JfaW50
X3ZpZXdfYXJyYXkgKGludCAqdiwgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfaW50X3ZpZXcKZ3Ns
X3ZlY3Rvcl9pbnRfdmlld19hcnJheV93aXRoX3N0cmlkZSAoaW50ICpiYXNlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfaW50
X2NvbnN0X3ZpZXcKZ3NsX3ZlY3Rvcl9pbnRfY29uc3Rfdmlld19hcnJheSAoY29uc3QgaW50ICp2
LCBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9pbnRfY29uc3Rfdmlldwpnc2xfdmVjdG9yX2ludF9j
b25zdF92aWV3X2FycmF5X3dpdGhfc3RyaWRlIChjb25zdCBpbnQgKmJhc2UsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3Ns
X3ZlY3Rvcl9pbnRfdmlldwpnc2xfdmVjdG9yX2ludF9zdWJ2ZWN0b3IgKGdzbF92ZWN0b3JfaW50
ICp2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9pbnRfdmlldwpnc2xfdmVjdG9y
X2ludF9zdWJ2ZWN0b3Jfd2l0aF9zdHJpZGUgKGdzbF92ZWN0b3JfaW50ICp2LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfaW50X2NvbnN0X3Zp
ZXcKZ3NsX3ZlY3Rvcl9pbnRfY29uc3Rfc3VidmVjdG9yIChjb25zdCBnc2xfdmVjdG9yX2ludCAq
diwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfaW50X2NvbnN0
X3ZpZXcKZ3NsX3ZlY3Rvcl9pbnRfY29uc3Rfc3VidmVjdG9yX3dpdGhfc3RyaWRlIChjb25zdCBn
c2xfdmVjdG9yX2ludCAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBuKTsKCgoKaW50IGdzbF92ZWN0b3JfaW50X2dldCAoY29uc3QgZ3Ns
X3ZlY3Rvcl9pbnQgKiB2LCBjb25zdCBzaXplX3QgaSk7CnZvaWQgZ3NsX3ZlY3Rvcl9pbnRfc2V0
IChnc2xfdmVjdG9yX2ludCAqIHYsIGNvbnN0IHNpemVfdCBpLCBpbnQgeCk7CgppbnQgKmdzbF92
ZWN0b3JfaW50X3B0ciAoZ3NsX3ZlY3Rvcl9pbnQgKiB2LCBjb25zdCBzaXplX3QgaSk7CmNvbnN0
IGludCAqZ3NsX3ZlY3Rvcl9pbnRfY29uc3RfcHRyIChjb25zdCBnc2xfdmVjdG9yX2ludCAqIHYs
IGNvbnN0IHNpemVfdCBpKTsKCnZvaWQgZ3NsX3ZlY3Rvcl9pbnRfc2V0X3plcm8gKGdzbF92ZWN0
b3JfaW50ICogdik7CnZvaWQgZ3NsX3ZlY3Rvcl9pbnRfc2V0X2FsbCAoZ3NsX3ZlY3Rvcl9pbnQg
KiB2LCBpbnQgeCk7CmludCBnc2xfdmVjdG9yX2ludF9zZXRfYmFzaXMgKGdzbF92ZWN0b3JfaW50
ICogdiwgc2l6ZV90IGkpOwoKaW50IGdzbF92ZWN0b3JfaW50X2ZyZWFkIChGSUxFICogc3RyZWFt
LCBnc2xfdmVjdG9yX2ludCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl9pbnRfZndyaXRlIChGSUxFICog
c3RyZWFtLCBjb25zdCBnc2xfdmVjdG9yX2ludCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl9pbnRfZnNj
YW5mIChGSUxFICogc3RyZWFtLCBnc2xfdmVjdG9yX2ludCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl9p
bnRfZnByaW50ZiAoRklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX3ZlY3Rvcl9pbnQgKiB2LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQpOwoKaW50IGdzbF92
ZWN0b3JfaW50X21lbWNweSAoZ3NsX3ZlY3Rvcl9pbnQgKiBkZXN0LCBjb25zdCBnc2xfdmVjdG9y
X2ludCAqIHNyYyk7CgppbnQgZ3NsX3ZlY3Rvcl9pbnRfcmV2ZXJzZSAoZ3NsX3ZlY3Rvcl9pbnQg
KiB2KTsKCmludCBnc2xfdmVjdG9yX2ludF9zd2FwIChnc2xfdmVjdG9yX2ludCAqIHYsIGdzbF92
ZWN0b3JfaW50ICogdyk7CmludCBnc2xfdmVjdG9yX2ludF9zd2FwX2VsZW1lbnRzIChnc2xfdmVj
dG9yX2ludCAqIHYsIGNvbnN0IHNpemVfdCBpLCBjb25zdCBzaXplX3Qgaik7CgppbnQgZ3NsX3Zl
Y3Rvcl9pbnRfbWF4IChjb25zdCBnc2xfdmVjdG9yX2ludCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl9p
bnRfbWluIChjb25zdCBnc2xfdmVjdG9yX2ludCAqIHYpOwp2b2lkIGdzbF92ZWN0b3JfaW50X21p
bm1heCAoY29uc3QgZ3NsX3ZlY3Rvcl9pbnQgKiB2LCBpbnQgKiBtaW5fb3V0LCBpbnQgKiBtYXhf
b3V0KTsKCnNpemVfdCBnc2xfdmVjdG9yX2ludF9tYXhfaW5kZXggKGNvbnN0IGdzbF92ZWN0b3Jf
aW50ICogdik7CnNpemVfdCBnc2xfdmVjdG9yX2ludF9taW5faW5kZXggKGNvbnN0IGdzbF92ZWN0
b3JfaW50ICogdik7CnZvaWQgZ3NsX3ZlY3Rvcl9pbnRfbWlubWF4X2luZGV4IChjb25zdCBnc2xf
dmVjdG9yX2ludCAqIHYsIHNpemVfdCAqIGltaW4sIHNpemVfdCAqIGltYXgpOwoKaW50IGdzbF92
ZWN0b3JfaW50X2FkZCAoZ3NsX3ZlY3Rvcl9pbnQgKiBhLCBjb25zdCBnc2xfdmVjdG9yX2ludCAq
IGIpOwppbnQgZ3NsX3ZlY3Rvcl9pbnRfc3ViIChnc2xfdmVjdG9yX2ludCAqIGEsIGNvbnN0IGdz
bF92ZWN0b3JfaW50ICogYik7CmludCBnc2xfdmVjdG9yX2ludF9tdWwgKGdzbF92ZWN0b3JfaW50
ICogYSwgY29uc3QgZ3NsX3ZlY3Rvcl9pbnQgKiBiKTsKaW50IGdzbF92ZWN0b3JfaW50X2RpdiAo
Z3NsX3ZlY3Rvcl9pbnQgKiBhLCBjb25zdCBnc2xfdmVjdG9yX2ludCAqIGIpOwppbnQgZ3NsX3Zl
Y3Rvcl9pbnRfc2NhbGUgKGdzbF92ZWN0b3JfaW50ICogYSwgY29uc3QgZG91YmxlIHgpOwppbnQg
Z3NsX3ZlY3Rvcl9pbnRfYWRkX2NvbnN0YW50IChnc2xfdmVjdG9yX2ludCAqIGEsIGNvbnN0IGRv
dWJsZSB4KTsKCmludCBnc2xfdmVjdG9yX2ludF9pc251bGwgKGNvbnN0IGdzbF92ZWN0b3JfaW50
ICogdik7CgpleHRlcm4gaW50IGdzbF9jaGVja19yYW5nZTsKCgoKZXh0ZXJuIGlubGluZQppbnQK
Z3NsX3ZlY3Rvcl9pbnRfZ2V0IChjb25zdCBnc2xfdmVjdG9yX2ludCAqIHYsIGNvbnN0IHNpemVf
dCBpKQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgi
aW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9pbnQuaCIs
IDE3NCwgR1NMX0VJTlZBTCkgOyByZXR1cm4gMCA7IH0gd2hpbGUgKDApOwogICAgfQoKICByZXR1
cm4gdi0+ZGF0YVtpICogdi0+c3RyaWRlXTsKfQoKZXh0ZXJuIGlubGluZQp2b2lkCmdzbF92ZWN0
b3JfaW50X3NldCAoZ3NsX3ZlY3Rvcl9pbnQgKiB2LCBjb25zdCBzaXplX3QgaSwgaW50IHgpCnsK
CiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBv
dXQgb2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2ludC5oIiwgMTg3LCBH
U0xfRUlOVkFMKSA7IHJldHVybiA7IH0gd2hpbGUgKDApOwogICAgfQoKICB2LT5kYXRhW2kgKiB2
LT5zdHJpZGVdID0geDsKfQoKZXh0ZXJuIGlubGluZQppbnQgKgpnc2xfdmVjdG9yX2ludF9wdHIg
KGdzbF92ZWN0b3JfaW50ICogdiwgY29uc3Qgc2l6ZV90IGkpCnsKCiAgaWYgKGkgPj0gdi0+c2l6
ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFuZ2UiLCAiL3Vz
ci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2ludC5oIiwgMjAwLCBHU0xfRUlOVkFMKSA7IHJldHVy
biAwIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHJldHVybiAoaW50ICopICh2LT5kYXRhICsgaSAq
IHYtPnN0cmlkZSk7Cn0KCmV4dGVybiBpbmxpbmUKY29uc3QgaW50ICoKZ3NsX3ZlY3Rvcl9pbnRf
Y29uc3RfcHRyIChjb25zdCBnc2xfdmVjdG9yX2ludCAqIHYsIGNvbnN0IHNpemVfdCBpKQp7Cgog
IGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0
IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9pbnQuaCIsIDIxMywgR1NM
X0VJTlZBTCkgOyByZXR1cm4gMCA7IH0gd2hpbGUgKDApOwogICAgfQoKICByZXR1cm4gKGNvbnN0
IGludCAqKSAodi0+ZGF0YSArIGkgKiB2LT5zdHJpZGUpOwp9CgoKCgoKIyAxNyAiL3Vzci9pbmNs
dWRlL2dzbC9nc2xfdmVjdG9yLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0
b3JfdXNob3J0LmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfdXNob3J0
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9ibG9ja191c2hvcnQuaCIgMSAzCiMgMzYg
Ii91c3IvaW5jbHVkZS9nc2wvZ3NsX2Jsb2NrX3VzaG9ydC5oIiAzCgoKc3RydWN0IGdzbF9ibG9j
a191c2hvcnRfc3RydWN0CnsKICBzaXplX3Qgc2l6ZTsKICB1bnNpZ25lZCBzaG9ydCAqZGF0YTsK
fTsKCnR5cGVkZWYgc3RydWN0IGdzbF9ibG9ja191c2hvcnRfc3RydWN0IGdzbF9ibG9ja191c2hv
cnQ7Cgpnc2xfYmxvY2tfdXNob3J0ICpnc2xfYmxvY2tfdXNob3J0X2FsbG9jIChjb25zdCBzaXpl
X3Qgbik7CmdzbF9ibG9ja191c2hvcnQgKmdzbF9ibG9ja191c2hvcnRfY2FsbG9jIChjb25zdCBz
aXplX3Qgbik7CnZvaWQgZ3NsX2Jsb2NrX3VzaG9ydF9mcmVlIChnc2xfYmxvY2tfdXNob3J0ICog
Yik7CgppbnQgZ3NsX2Jsb2NrX3VzaG9ydF9mcmVhZCAoRklMRSAqIHN0cmVhbSwgZ3NsX2Jsb2Nr
X3VzaG9ydCAqIGIpOwppbnQgZ3NsX2Jsb2NrX3VzaG9ydF9md3JpdGUgKEZJTEUgKiBzdHJlYW0s
IGNvbnN0IGdzbF9ibG9ja191c2hvcnQgKiBiKTsKaW50IGdzbF9ibG9ja191c2hvcnRfZnNjYW5m
IChGSUxFICogc3RyZWFtLCBnc2xfYmxvY2tfdXNob3J0ICogYik7CmludCBnc2xfYmxvY2tfdXNo
b3J0X2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja191c2hvcnQgKiBiLCBj
b25zdCBjaGFyICpmb3JtYXQpOwoKaW50IGdzbF9ibG9ja191c2hvcnRfcmF3X2ZyZWFkIChGSUxF
ICogc3RyZWFtLCB1bnNpZ25lZCBzaG9ydCAqIGIsIGNvbnN0IHNpemVfdCBuLCBjb25zdCBzaXpl
X3Qgc3RyaWRlKTsKaW50IGdzbF9ibG9ja191c2hvcnRfcmF3X2Z3cml0ZSAoRklMRSAqIHN0cmVh
bSwgY29uc3QgdW5zaWduZWQgc2hvcnQgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90
IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfdXNob3J0X3Jhd19mc2NhbmYgKEZJTEUgKiBzdHJlYW0s
IHVuc2lnbmVkIHNob3J0ICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUp
OwppbnQgZ3NsX2Jsb2NrX3VzaG9ydF9yYXdfZnByaW50ZiAoRklMRSAqIHN0cmVhbSwgY29uc3Qg
dW5zaWduZWQgc2hvcnQgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSwg
Y29uc3QgY2hhciAqZm9ybWF0KTsKCnNpemVfdCBnc2xfYmxvY2tfdXNob3J0X3NpemUgKGNvbnN0
IGdzbF9ibG9ja191c2hvcnQgKiBiKTsKdW5zaWduZWQgc2hvcnQgKiBnc2xfYmxvY2tfdXNob3J0
X2RhdGEgKGNvbnN0IGdzbF9ibG9ja191c2hvcnQgKiBiKTsKCgojIDI2ICIvdXNyL2luY2x1ZGUv
Z3NsL2dzbF92ZWN0b3JfdXNob3J0LmgiIDIgMwojIDM3ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92
ZWN0b3JfdXNob3J0LmgiIDMKCgp0eXBlZGVmIHN0cnVjdAp7CiAgc2l6ZV90IHNpemU7CiAgc2l6
ZV90IHN0cmlkZTsKICB1bnNpZ25lZCBzaG9ydCAqZGF0YTsKICBnc2xfYmxvY2tfdXNob3J0ICpi
bG9jazsKICBpbnQgb3duZXI7Cn0KZ3NsX3ZlY3Rvcl91c2hvcnQ7Cgp0eXBlZGVmIHN0cnVjdAp7
CiAgZ3NsX3ZlY3Rvcl91c2hvcnQgdmVjdG9yOwp9IF9nc2xfdmVjdG9yX3VzaG9ydF92aWV3OwoK
dHlwZWRlZiBfZ3NsX3ZlY3Rvcl91c2hvcnRfdmlldyBnc2xfdmVjdG9yX3VzaG9ydF92aWV3OwoK
dHlwZWRlZiBzdHJ1Y3QKewogIGdzbF92ZWN0b3JfdXNob3J0IHZlY3RvcjsKfSBfZ3NsX3ZlY3Rv
cl91c2hvcnRfY29uc3RfdmlldzsKCnR5cGVkZWYgY29uc3QgX2dzbF92ZWN0b3JfdXNob3J0X2Nv
bnN0X3ZpZXcgZ3NsX3ZlY3Rvcl91c2hvcnRfY29uc3RfdmlldzsKCgoKCmdzbF92ZWN0b3JfdXNo
b3J0ICpnc2xfdmVjdG9yX3VzaG9ydF9hbGxvYyAoY29uc3Qgc2l6ZV90IG4pOwpnc2xfdmVjdG9y
X3VzaG9ydCAqZ3NsX3ZlY3Rvcl91c2hvcnRfY2FsbG9jIChjb25zdCBzaXplX3Qgbik7Cgpnc2xf
dmVjdG9yX3VzaG9ydCAqZ3NsX3ZlY3Rvcl91c2hvcnRfYWxsb2NfZnJvbV9ibG9jayAoZ3NsX2Js
b2NrX3VzaG9ydCAqIGIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgc3Ry
aWRlKTsKCmdzbF92ZWN0b3JfdXNob3J0ICpnc2xfdmVjdG9yX3VzaG9ydF9hbGxvY19mcm9tX3Zl
Y3RvciAoZ3NsX3ZlY3Rvcl91c2hvcnQgKiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgb2Zmc2V0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qg
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc2l6ZV90IHN0cmlkZSk7Cgp2b2lkIGdzbF92ZWN0b3JfdXNob3J0X2ZyZWUgKGdzbF92
ZWN0b3JfdXNob3J0ICogdik7CgoKCl9nc2xfdmVjdG9yX3VzaG9ydF92aWV3CmdzbF92ZWN0b3Jf
dXNob3J0X3ZpZXdfYXJyYXkgKHVuc2lnbmVkIHNob3J0ICp2LCBzaXplX3Qgbik7CgpfZ3NsX3Zl
Y3Rvcl91c2hvcnRfdmlldwpnc2xfdmVjdG9yX3VzaG9ydF92aWV3X2FycmF5X3dpdGhfc3RyaWRl
ICh1bnNpZ25lZCBzaG9ydCAqYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX3VzaG9ydF9jb25zdF92aWV3CmdzbF92ZWN0
b3JfdXNob3J0X2NvbnN0X3ZpZXdfYXJyYXkgKGNvbnN0IHVuc2lnbmVkIHNob3J0ICp2LCBzaXpl
X3Qgbik7CgpfZ3NsX3ZlY3Rvcl91c2hvcnRfY29uc3Rfdmlldwpnc2xfdmVjdG9yX3VzaG9ydF9j
b25zdF92aWV3X2FycmF5X3dpdGhfc3RyaWRlIChjb25zdCB1bnNpZ25lZCBzaG9ydCAqYmFzZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3Ry
aWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBuKTsKCl9nc2xfdmVjdG9yX3VzaG9ydF92aWV3CmdzbF92ZWN0b3JfdXNob3J0X3N1YnZlY3Rv
ciAoZ3NsX3ZlY3Rvcl91c2hvcnQgKnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9y
X3VzaG9ydF92aWV3CmdzbF92ZWN0b3JfdXNob3J0X3N1YnZlY3Rvcl93aXRoX3N0cmlkZSAoZ3Ns
X3ZlY3Rvcl91c2hvcnQgKnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
bik7CgpfZ3NsX3ZlY3Rvcl91c2hvcnRfY29uc3Rfdmlldwpnc2xfdmVjdG9yX3VzaG9ydF9jb25z
dF9zdWJ2ZWN0b3IgKGNvbnN0IGdzbF92ZWN0b3JfdXNob3J0ICp2LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl91c2hvcnRfY29uc3Rfdmlldwpnc2xfdmVjdG9y
X3VzaG9ydF9jb25zdF9zdWJ2ZWN0b3Jfd2l0aF9zdHJpZGUgKGNvbnN0IGdzbF92ZWN0b3JfdXNo
b3J0ICp2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IG4pOwoKCgp1bnNpZ25lZCBzaG9ydCBnc2xfdmVjdG9yX3VzaG9ydF9nZXQgKGNvbnN0
IGdzbF92ZWN0b3JfdXNob3J0ICogdiwgY29uc3Qgc2l6ZV90IGkpOwp2b2lkIGdzbF92ZWN0b3Jf
dXNob3J0X3NldCAoZ3NsX3ZlY3Rvcl91c2hvcnQgKiB2LCBjb25zdCBzaXplX3QgaSwgdW5zaWdu
ZWQgc2hvcnQgeCk7Cgp1bnNpZ25lZCBzaG9ydCAqZ3NsX3ZlY3Rvcl91c2hvcnRfcHRyIChnc2xf
dmVjdG9yX3VzaG9ydCAqIHYsIGNvbnN0IHNpemVfdCBpKTsKY29uc3QgdW5zaWduZWQgc2hvcnQg
KmdzbF92ZWN0b3JfdXNob3J0X2NvbnN0X3B0ciAoY29uc3QgZ3NsX3ZlY3Rvcl91c2hvcnQgKiB2
LCBjb25zdCBzaXplX3QgaSk7Cgp2b2lkIGdzbF92ZWN0b3JfdXNob3J0X3NldF96ZXJvIChnc2xf
dmVjdG9yX3VzaG9ydCAqIHYpOwp2b2lkIGdzbF92ZWN0b3JfdXNob3J0X3NldF9hbGwgKGdzbF92
ZWN0b3JfdXNob3J0ICogdiwgdW5zaWduZWQgc2hvcnQgeCk7CmludCBnc2xfdmVjdG9yX3VzaG9y
dF9zZXRfYmFzaXMgKGdzbF92ZWN0b3JfdXNob3J0ICogdiwgc2l6ZV90IGkpOwoKaW50IGdzbF92
ZWN0b3JfdXNob3J0X2ZyZWFkIChGSUxFICogc3RyZWFtLCBnc2xfdmVjdG9yX3VzaG9ydCAqIHYp
OwppbnQgZ3NsX3ZlY3Rvcl91c2hvcnRfZndyaXRlIChGSUxFICogc3RyZWFtLCBjb25zdCBnc2xf
dmVjdG9yX3VzaG9ydCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl91c2hvcnRfZnNjYW5mIChGSUxFICog
c3RyZWFtLCBnc2xfdmVjdG9yX3VzaG9ydCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl91c2hvcnRfZnBy
aW50ZiAoRklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX3ZlY3Rvcl91c2hvcnQgKiB2LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQpOwoKaW50IGdzbF92ZWN0
b3JfdXNob3J0X21lbWNweSAoZ3NsX3ZlY3Rvcl91c2hvcnQgKiBkZXN0LCBjb25zdCBnc2xfdmVj
dG9yX3VzaG9ydCAqIHNyYyk7CgppbnQgZ3NsX3ZlY3Rvcl91c2hvcnRfcmV2ZXJzZSAoZ3NsX3Zl
Y3Rvcl91c2hvcnQgKiB2KTsKCmludCBnc2xfdmVjdG9yX3VzaG9ydF9zd2FwIChnc2xfdmVjdG9y
X3VzaG9ydCAqIHYsIGdzbF92ZWN0b3JfdXNob3J0ICogdyk7CmludCBnc2xfdmVjdG9yX3VzaG9y
dF9zd2FwX2VsZW1lbnRzIChnc2xfdmVjdG9yX3VzaG9ydCAqIHYsIGNvbnN0IHNpemVfdCBpLCBj
b25zdCBzaXplX3Qgaik7Cgp1bnNpZ25lZCBzaG9ydCBnc2xfdmVjdG9yX3VzaG9ydF9tYXggKGNv
bnN0IGdzbF92ZWN0b3JfdXNob3J0ICogdik7CnVuc2lnbmVkIHNob3J0IGdzbF92ZWN0b3JfdXNo
b3J0X21pbiAoY29uc3QgZ3NsX3ZlY3Rvcl91c2hvcnQgKiB2KTsKdm9pZCBnc2xfdmVjdG9yX3Vz
aG9ydF9taW5tYXggKGNvbnN0IGdzbF92ZWN0b3JfdXNob3J0ICogdiwgdW5zaWduZWQgc2hvcnQg
KiBtaW5fb3V0LCB1bnNpZ25lZCBzaG9ydCAqIG1heF9vdXQpOwoKc2l6ZV90IGdzbF92ZWN0b3Jf
dXNob3J0X21heF9pbmRleCAoY29uc3QgZ3NsX3ZlY3Rvcl91c2hvcnQgKiB2KTsKc2l6ZV90IGdz
bF92ZWN0b3JfdXNob3J0X21pbl9pbmRleCAoY29uc3QgZ3NsX3ZlY3Rvcl91c2hvcnQgKiB2KTsK
dm9pZCBnc2xfdmVjdG9yX3VzaG9ydF9taW5tYXhfaW5kZXggKGNvbnN0IGdzbF92ZWN0b3JfdXNo
b3J0ICogdiwgc2l6ZV90ICogaW1pbiwgc2l6ZV90ICogaW1heCk7CgppbnQgZ3NsX3ZlY3Rvcl91
c2hvcnRfYWRkIChnc2xfdmVjdG9yX3VzaG9ydCAqIGEsIGNvbnN0IGdzbF92ZWN0b3JfdXNob3J0
ICogYik7CmludCBnc2xfdmVjdG9yX3VzaG9ydF9zdWIgKGdzbF92ZWN0b3JfdXNob3J0ICogYSwg
Y29uc3QgZ3NsX3ZlY3Rvcl91c2hvcnQgKiBiKTsKaW50IGdzbF92ZWN0b3JfdXNob3J0X211bCAo
Z3NsX3ZlY3Rvcl91c2hvcnQgKiBhLCBjb25zdCBnc2xfdmVjdG9yX3VzaG9ydCAqIGIpOwppbnQg
Z3NsX3ZlY3Rvcl91c2hvcnRfZGl2IChnc2xfdmVjdG9yX3VzaG9ydCAqIGEsIGNvbnN0IGdzbF92
ZWN0b3JfdXNob3J0ICogYik7CmludCBnc2xfdmVjdG9yX3VzaG9ydF9zY2FsZSAoZ3NsX3ZlY3Rv
cl91c2hvcnQgKiBhLCBjb25zdCBkb3VibGUgeCk7CmludCBnc2xfdmVjdG9yX3VzaG9ydF9hZGRf
Y29uc3RhbnQgKGdzbF92ZWN0b3JfdXNob3J0ICogYSwgY29uc3QgZG91YmxlIHgpOwoKaW50IGdz
bF92ZWN0b3JfdXNob3J0X2lzbnVsbCAoY29uc3QgZ3NsX3ZlY3Rvcl91c2hvcnQgKiB2KTsKCmV4
dGVybiBpbnQgZ3NsX2NoZWNrX3JhbmdlOwoKCgpleHRlcm4gaW5saW5lCnVuc2lnbmVkIHNob3J0
CmdzbF92ZWN0b3JfdXNob3J0X2dldCAoY29uc3QgZ3NsX3ZlY3Rvcl91c2hvcnQgKiB2LCBjb25z
dCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAgICBkbyB7IGdzbF9l
cnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3Jf
dXNob3J0LmgiLCAxNzQsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDAgOyB9IHdoaWxlICgwKTsKICAg
IH0KCiAgcmV0dXJuIHYtPmRhdGFbaSAqIHYtPnN0cmlkZV07Cn0KCmV4dGVybiBpbmxpbmUKdm9p
ZApnc2xfdmVjdG9yX3VzaG9ydF9zZXQgKGdzbF92ZWN0b3JfdXNob3J0ICogdiwgY29uc3Qgc2l6
ZV90IGksIHVuc2lnbmVkIHNob3J0IHgpCnsKCiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAg
ICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dz
bC9nc2xfdmVjdG9yX3VzaG9ydC5oIiwgMTg3LCBHU0xfRUlOVkFMKSA7IHJldHVybiA7IH0gd2hp
bGUgKDApOwogICAgfQoKICB2LT5kYXRhW2kgKiB2LT5zdHJpZGVdID0geDsKfQoKZXh0ZXJuIGlu
bGluZQp1bnNpZ25lZCBzaG9ydCAqCmdzbF92ZWN0b3JfdXNob3J0X3B0ciAoZ3NsX3ZlY3Rvcl91
c2hvcnQgKiB2LCBjb25zdCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewog
ICAgICBkbyB7IGdzbF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUv
Z3NsL2dzbF92ZWN0b3JfdXNob3J0LmgiLCAyMDAsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDAgOyB9
IHdoaWxlICgwKTsKICAgIH0KCiAgcmV0dXJuICh1bnNpZ25lZCBzaG9ydCAqKSAodi0+ZGF0YSAr
IGkgKiB2LT5zdHJpZGUpOwp9CgpleHRlcm4gaW5saW5lCmNvbnN0IHVuc2lnbmVkIHNob3J0ICoK
Z3NsX3ZlY3Rvcl91c2hvcnRfY29uc3RfcHRyIChjb25zdCBnc2xfdmVjdG9yX3VzaG9ydCAqIHYs
IGNvbnN0IHNpemVfdCBpKQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsg
Z3NsX2Vycm9yICgiaW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3Zl
Y3Rvcl91c2hvcnQuaCIsIDIxMywgR1NMX0VJTlZBTCkgOyByZXR1cm4gMCA7IH0gd2hpbGUgKDAp
OwogICAgfQoKICByZXR1cm4gKGNvbnN0IHVuc2lnbmVkIHNob3J0ICopICh2LT5kYXRhICsgaSAq
IHYtPnN0cmlkZSk7Cn0KCgoKCgojIDE5ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3IuaCIg
MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX3Nob3J0LmgiIDEgMwojIDI1ICIv
dXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3Jfc2hvcnQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9n
c2wvZ3NsX2Jsb2NrX3Nob3J0LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9ibG9j
a19zaG9ydC5oIiAzCgoKc3RydWN0IGdzbF9ibG9ja19zaG9ydF9zdHJ1Y3QKewogIHNpemVfdCBz
aXplOwogIHNob3J0ICpkYXRhOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgZ3NsX2Jsb2NrX3Nob3J0X3N0
cnVjdCBnc2xfYmxvY2tfc2hvcnQ7Cgpnc2xfYmxvY2tfc2hvcnQgKmdzbF9ibG9ja19zaG9ydF9h
bGxvYyAoY29uc3Qgc2l6ZV90IG4pOwpnc2xfYmxvY2tfc2hvcnQgKmdzbF9ibG9ja19zaG9ydF9j
YWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKdm9pZCBnc2xfYmxvY2tfc2hvcnRfZnJlZSAoZ3NsX2Js
b2NrX3Nob3J0ICogYik7CgppbnQgZ3NsX2Jsb2NrX3Nob3J0X2ZyZWFkIChGSUxFICogc3RyZWFt
LCBnc2xfYmxvY2tfc2hvcnQgKiBiKTsKaW50IGdzbF9ibG9ja19zaG9ydF9md3JpdGUgKEZJTEUg
KiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja19zaG9ydCAqIGIpOwppbnQgZ3NsX2Jsb2NrX3Nob3J0
X2ZzY2FuZiAoRklMRSAqIHN0cmVhbSwgZ3NsX2Jsb2NrX3Nob3J0ICogYik7CmludCBnc2xfYmxv
Y2tfc2hvcnRfZnByaW50ZiAoRklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX2Jsb2NrX3Nob3J0ICog
YiwgY29uc3QgY2hhciAqZm9ybWF0KTsKCmludCBnc2xfYmxvY2tfc2hvcnRfcmF3X2ZyZWFkIChG
SUxFICogc3RyZWFtLCBzaG9ydCAqIGIsIGNvbnN0IHNpemVfdCBuLCBjb25zdCBzaXplX3Qgc3Ry
aWRlKTsKaW50IGdzbF9ibG9ja19zaG9ydF9yYXdfZndyaXRlIChGSUxFICogc3RyZWFtLCBjb25z
dCBzaG9ydCAqIGIsIGNvbnN0IHNpemVfdCBuLCBjb25zdCBzaXplX3Qgc3RyaWRlKTsKaW50IGdz
bF9ibG9ja19zaG9ydF9yYXdfZnNjYW5mIChGSUxFICogc3RyZWFtLCBzaG9ydCAqIGIsIGNvbnN0
IHNpemVfdCBuLCBjb25zdCBzaXplX3Qgc3RyaWRlKTsKaW50IGdzbF9ibG9ja19zaG9ydF9yYXdf
ZnByaW50ZiAoRklMRSAqIHN0cmVhbSwgY29uc3Qgc2hvcnQgKiBiLCBjb25zdCBzaXplX3Qgbiwg
Y29uc3Qgc2l6ZV90IHN0cmlkZSwgY29uc3QgY2hhciAqZm9ybWF0KTsKCnNpemVfdCBnc2xfYmxv
Y2tfc2hvcnRfc2l6ZSAoY29uc3QgZ3NsX2Jsb2NrX3Nob3J0ICogYik7CnNob3J0ICogZ3NsX2Js
b2NrX3Nob3J0X2RhdGEgKGNvbnN0IGdzbF9ibG9ja19zaG9ydCAqIGIpOwoKCiMgMjYgIi91c3Iv
aW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9zaG9ydC5oIiAyIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2dz
bC9nc2xfdmVjdG9yX3Nob3J0LmgiIDMKCgp0eXBlZGVmIHN0cnVjdAp7CiAgc2l6ZV90IHNpemU7
CiAgc2l6ZV90IHN0cmlkZTsKICBzaG9ydCAqZGF0YTsKICBnc2xfYmxvY2tfc2hvcnQgKmJsb2Nr
OwogIGludCBvd25lcjsKfQpnc2xfdmVjdG9yX3Nob3J0OwoKdHlwZWRlZiBzdHJ1Y3QKewogIGdz
bF92ZWN0b3Jfc2hvcnQgdmVjdG9yOwp9IF9nc2xfdmVjdG9yX3Nob3J0X3ZpZXc7Cgp0eXBlZGVm
IF9nc2xfdmVjdG9yX3Nob3J0X3ZpZXcgZ3NsX3ZlY3Rvcl9zaG9ydF92aWV3OwoKdHlwZWRlZiBz
dHJ1Y3QKewogIGdzbF92ZWN0b3Jfc2hvcnQgdmVjdG9yOwp9IF9nc2xfdmVjdG9yX3Nob3J0X2Nv
bnN0X3ZpZXc7Cgp0eXBlZGVmIGNvbnN0IF9nc2xfdmVjdG9yX3Nob3J0X2NvbnN0X3ZpZXcgZ3Ns
X3ZlY3Rvcl9zaG9ydF9jb25zdF92aWV3OwoKCgoKZ3NsX3ZlY3Rvcl9zaG9ydCAqZ3NsX3ZlY3Rv
cl9zaG9ydF9hbGxvYyAoY29uc3Qgc2l6ZV90IG4pOwpnc2xfdmVjdG9yX3Nob3J0ICpnc2xfdmVj
dG9yX3Nob3J0X2NhbGxvYyAoY29uc3Qgc2l6ZV90IG4pOwoKZ3NsX3ZlY3Rvcl9zaG9ydCAqZ3Ns
X3ZlY3Rvcl9zaG9ydF9hbGxvY19mcm9tX2Jsb2NrIChnc2xfYmxvY2tfc2hvcnQgKiBiLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNp
emVfdCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc2l6ZV90IG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHN0cmlkZSk7Cgpnc2xfdmVjdG9yX3No
b3J0ICpnc2xfdmVjdG9yX3Nob3J0X2FsbG9jX2Zyb21fdmVjdG9yIChnc2xfdmVjdG9yX3Nob3J0
ICogdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc2l6ZV90IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG4sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBzdHJpZGUpOwoK
dm9pZCBnc2xfdmVjdG9yX3Nob3J0X2ZyZWUgKGdzbF92ZWN0b3Jfc2hvcnQgKiB2KTsKCgoKX2dz
bF92ZWN0b3Jfc2hvcnRfdmlldwpnc2xfdmVjdG9yX3Nob3J0X3ZpZXdfYXJyYXkgKHNob3J0ICp2
LCBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9zaG9ydF92aWV3CmdzbF92ZWN0b3Jfc2hvcnRfdmll
d19hcnJheV93aXRoX3N0cmlkZSAoc2hvcnQgKmJhc2UsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9zaG9ydF9jb25zdF92aWV3
CmdzbF92ZWN0b3Jfc2hvcnRfY29uc3Rfdmlld19hcnJheSAoY29uc3Qgc2hvcnQgKnYsIHNpemVf
dCBuKTsKCl9nc2xfdmVjdG9yX3Nob3J0X2NvbnN0X3ZpZXcKZ3NsX3ZlY3Rvcl9zaG9ydF9jb25z
dF92aWV3X2FycmF5X3dpdGhfc3RyaWRlIChjb25zdCBzaG9ydCAqYmFzZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCl9nc2xf
dmVjdG9yX3Nob3J0X3ZpZXcKZ3NsX3ZlY3Rvcl9zaG9ydF9zdWJ2ZWN0b3IgKGdzbF92ZWN0b3Jf
c2hvcnQgKnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX3Nob3J0X3ZpZXcKZ3Ns
X3ZlY3Rvcl9zaG9ydF9zdWJ2ZWN0b3Jfd2l0aF9zdHJpZGUgKGdzbF92ZWN0b3Jfc2hvcnQgKnYs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9z
aG9ydF9jb25zdF92aWV3CmdzbF92ZWN0b3Jfc2hvcnRfY29uc3Rfc3VidmVjdG9yIChjb25zdCBn
c2xfdmVjdG9yX3Nob3J0ICp2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3Ns
X3ZlY3Rvcl9zaG9ydF9jb25zdF92aWV3CmdzbF92ZWN0b3Jfc2hvcnRfY29uc3Rfc3VidmVjdG9y
X3dpdGhfc3RyaWRlIChjb25zdCBnc2xfdmVjdG9yX3Nob3J0ICp2LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKCgpzaG9ydCBnc2xf
dmVjdG9yX3Nob3J0X2dldCAoY29uc3QgZ3NsX3ZlY3Rvcl9zaG9ydCAqIHYsIGNvbnN0IHNpemVf
dCBpKTsKdm9pZCBnc2xfdmVjdG9yX3Nob3J0X3NldCAoZ3NsX3ZlY3Rvcl9zaG9ydCAqIHYsIGNv
bnN0IHNpemVfdCBpLCBzaG9ydCB4KTsKCnNob3J0ICpnc2xfdmVjdG9yX3Nob3J0X3B0ciAoZ3Ns
X3ZlY3Rvcl9zaG9ydCAqIHYsIGNvbnN0IHNpemVfdCBpKTsKY29uc3Qgc2hvcnQgKmdzbF92ZWN0
b3Jfc2hvcnRfY29uc3RfcHRyIChjb25zdCBnc2xfdmVjdG9yX3Nob3J0ICogdiwgY29uc3Qgc2l6
ZV90IGkpOwoKdm9pZCBnc2xfdmVjdG9yX3Nob3J0X3NldF96ZXJvIChnc2xfdmVjdG9yX3Nob3J0
ICogdik7CnZvaWQgZ3NsX3ZlY3Rvcl9zaG9ydF9zZXRfYWxsIChnc2xfdmVjdG9yX3Nob3J0ICog
diwgc2hvcnQgeCk7CmludCBnc2xfdmVjdG9yX3Nob3J0X3NldF9iYXNpcyAoZ3NsX3ZlY3Rvcl9z
aG9ydCAqIHYsIHNpemVfdCBpKTsKCmludCBnc2xfdmVjdG9yX3Nob3J0X2ZyZWFkIChGSUxFICog
c3RyZWFtLCBnc2xfdmVjdG9yX3Nob3J0ICogdik7CmludCBnc2xfdmVjdG9yX3Nob3J0X2Z3cml0
ZSAoRklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX3ZlY3Rvcl9zaG9ydCAqIHYpOwppbnQgZ3NsX3Zl
Y3Rvcl9zaG9ydF9mc2NhbmYgKEZJTEUgKiBzdHJlYW0sIGdzbF92ZWN0b3Jfc2hvcnQgKiB2KTsK
aW50IGdzbF92ZWN0b3Jfc2hvcnRfZnByaW50ZiAoRklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX3Zl
Y3Rvcl9zaG9ydCAqIHYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KmZvcm1hdCk7CgppbnQgZ3NsX3ZlY3Rvcl9zaG9ydF9tZW1jcHkgKGdzbF92ZWN0b3Jfc2hvcnQg
KiBkZXN0LCBjb25zdCBnc2xfdmVjdG9yX3Nob3J0ICogc3JjKTsKCmludCBnc2xfdmVjdG9yX3No
b3J0X3JldmVyc2UgKGdzbF92ZWN0b3Jfc2hvcnQgKiB2KTsKCmludCBnc2xfdmVjdG9yX3Nob3J0
X3N3YXAgKGdzbF92ZWN0b3Jfc2hvcnQgKiB2LCBnc2xfdmVjdG9yX3Nob3J0ICogdyk7CmludCBn
c2xfdmVjdG9yX3Nob3J0X3N3YXBfZWxlbWVudHMgKGdzbF92ZWN0b3Jfc2hvcnQgKiB2LCBjb25z
dCBzaXplX3QgaSwgY29uc3Qgc2l6ZV90IGopOwoKc2hvcnQgZ3NsX3ZlY3Rvcl9zaG9ydF9tYXgg
KGNvbnN0IGdzbF92ZWN0b3Jfc2hvcnQgKiB2KTsKc2hvcnQgZ3NsX3ZlY3Rvcl9zaG9ydF9taW4g
KGNvbnN0IGdzbF92ZWN0b3Jfc2hvcnQgKiB2KTsKdm9pZCBnc2xfdmVjdG9yX3Nob3J0X21pbm1h
eCAoY29uc3QgZ3NsX3ZlY3Rvcl9zaG9ydCAqIHYsIHNob3J0ICogbWluX291dCwgc2hvcnQgKiBt
YXhfb3V0KTsKCnNpemVfdCBnc2xfdmVjdG9yX3Nob3J0X21heF9pbmRleCAoY29uc3QgZ3NsX3Zl
Y3Rvcl9zaG9ydCAqIHYpOwpzaXplX3QgZ3NsX3ZlY3Rvcl9zaG9ydF9taW5faW5kZXggKGNvbnN0
IGdzbF92ZWN0b3Jfc2hvcnQgKiB2KTsKdm9pZCBnc2xfdmVjdG9yX3Nob3J0X21pbm1heF9pbmRl
eCAoY29uc3QgZ3NsX3ZlY3Rvcl9zaG9ydCAqIHYsIHNpemVfdCAqIGltaW4sIHNpemVfdCAqIGlt
YXgpOwoKaW50IGdzbF92ZWN0b3Jfc2hvcnRfYWRkIChnc2xfdmVjdG9yX3Nob3J0ICogYSwgY29u
c3QgZ3NsX3ZlY3Rvcl9zaG9ydCAqIGIpOwppbnQgZ3NsX3ZlY3Rvcl9zaG9ydF9zdWIgKGdzbF92
ZWN0b3Jfc2hvcnQgKiBhLCBjb25zdCBnc2xfdmVjdG9yX3Nob3J0ICogYik7CmludCBnc2xfdmVj
dG9yX3Nob3J0X211bCAoZ3NsX3ZlY3Rvcl9zaG9ydCAqIGEsIGNvbnN0IGdzbF92ZWN0b3Jfc2hv
cnQgKiBiKTsKaW50IGdzbF92ZWN0b3Jfc2hvcnRfZGl2IChnc2xfdmVjdG9yX3Nob3J0ICogYSwg
Y29uc3QgZ3NsX3ZlY3Rvcl9zaG9ydCAqIGIpOwppbnQgZ3NsX3ZlY3Rvcl9zaG9ydF9zY2FsZSAo
Z3NsX3ZlY3Rvcl9zaG9ydCAqIGEsIGNvbnN0IGRvdWJsZSB4KTsKaW50IGdzbF92ZWN0b3Jfc2hv
cnRfYWRkX2NvbnN0YW50IChnc2xfdmVjdG9yX3Nob3J0ICogYSwgY29uc3QgZG91YmxlIHgpOwoK
aW50IGdzbF92ZWN0b3Jfc2hvcnRfaXNudWxsIChjb25zdCBnc2xfdmVjdG9yX3Nob3J0ICogdik7
CgpleHRlcm4gaW50IGdzbF9jaGVja19yYW5nZTsKCgoKZXh0ZXJuIGlubGluZQpzaG9ydApnc2xf
dmVjdG9yX3Nob3J0X2dldCAoY29uc3QgZ3NsX3ZlY3Rvcl9zaG9ydCAqIHYsIGNvbnN0IHNpemVf
dCBpKQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgi
aW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9zaG9ydC5o
IiwgMTc0LCBHU0xfRUlOVkFMKSA7IHJldHVybiAwIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHJl
dHVybiB2LT5kYXRhW2kgKiB2LT5zdHJpZGVdOwp9CgpleHRlcm4gaW5saW5lCnZvaWQKZ3NsX3Zl
Y3Rvcl9zaG9ydF9zZXQgKGdzbF92ZWN0b3Jfc2hvcnQgKiB2LCBjb25zdCBzaXplX3QgaSwgc2hv
cnQgeCkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAgICBkbyB7IGdzbF9lcnJvciAo
ImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3Jfc2hvcnQu
aCIsIDE4NywgR1NMX0VJTlZBTCkgOyByZXR1cm4gOyB9IHdoaWxlICgwKTsKICAgIH0KCiAgdi0+
ZGF0YVtpICogdi0+c3RyaWRlXSA9IHg7Cn0KCmV4dGVybiBpbmxpbmUKc2hvcnQgKgpnc2xfdmVj
dG9yX3Nob3J0X3B0ciAoZ3NsX3ZlY3Rvcl9zaG9ydCAqIHYsIGNvbnN0IHNpemVfdCBpKQp7Cgog
IGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0
IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9zaG9ydC5oIiwgMjAwLCBH
U0xfRUlOVkFMKSA7IHJldHVybiAwIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHJldHVybiAoc2hv
cnQgKikgKHYtPmRhdGEgKyBpICogdi0+c3RyaWRlKTsKfQoKZXh0ZXJuIGlubGluZQpjb25zdCBz
aG9ydCAqCmdzbF92ZWN0b3Jfc2hvcnRfY29uc3RfcHRyIChjb25zdCBnc2xfdmVjdG9yX3Nob3J0
ICogdiwgY29uc3Qgc2l6ZV90IGkpCnsKCiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAg
ZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9n
c2xfdmVjdG9yX3Nob3J0LmgiLCAyMTMsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDAgOyB9IHdoaWxl
ICgwKTsKICAgIH0KCiAgcmV0dXJuIChjb25zdCBzaG9ydCAqKSAodi0+ZGF0YSArIGkgKiB2LT5z
dHJpZGUpOwp9CgoKCgoKIyAyMCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yLmgiIDIgMwoK
IyAxICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfdWNoYXIuaCIgMSAzCiMgMjUgIi91c3Iv
aW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl91Y2hhci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dzbC9n
c2xfYmxvY2tfdWNoYXIuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX2Jsb2NrX3Vj
aGFyLmgiIDMKCgpzdHJ1Y3QgZ3NsX2Jsb2NrX3VjaGFyX3N0cnVjdAp7CiAgc2l6ZV90IHNpemU7
CiAgdW5zaWduZWQgY2hhciAqZGF0YTsKfTsKCnR5cGVkZWYgc3RydWN0IGdzbF9ibG9ja191Y2hh
cl9zdHJ1Y3QgZ3NsX2Jsb2NrX3VjaGFyOwoKZ3NsX2Jsb2NrX3VjaGFyICpnc2xfYmxvY2tfdWNo
YXJfYWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKZ3NsX2Jsb2NrX3VjaGFyICpnc2xfYmxvY2tfdWNo
YXJfY2FsbG9jIChjb25zdCBzaXplX3Qgbik7CnZvaWQgZ3NsX2Jsb2NrX3VjaGFyX2ZyZWUgKGdz
bF9ibG9ja191Y2hhciAqIGIpOwoKaW50IGdzbF9ibG9ja191Y2hhcl9mcmVhZCAoRklMRSAqIHN0
cmVhbSwgZ3NsX2Jsb2NrX3VjaGFyICogYik7CmludCBnc2xfYmxvY2tfdWNoYXJfZndyaXRlIChG
SUxFICogc3RyZWFtLCBjb25zdCBnc2xfYmxvY2tfdWNoYXIgKiBiKTsKaW50IGdzbF9ibG9ja191
Y2hhcl9mc2NhbmYgKEZJTEUgKiBzdHJlYW0sIGdzbF9ibG9ja191Y2hhciAqIGIpOwppbnQgZ3Ns
X2Jsb2NrX3VjaGFyX2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja191Y2hh
ciAqIGIsIGNvbnN0IGNoYXIgKmZvcm1hdCk7CgppbnQgZ3NsX2Jsb2NrX3VjaGFyX3Jhd19mcmVh
ZCAoRklMRSAqIHN0cmVhbSwgdW5zaWduZWQgY2hhciAqIGIsIGNvbnN0IHNpemVfdCBuLCBjb25z
dCBzaXplX3Qgc3RyaWRlKTsKaW50IGdzbF9ibG9ja191Y2hhcl9yYXdfZndyaXRlIChGSUxFICog
c3RyZWFtLCBjb25zdCB1bnNpZ25lZCBjaGFyICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNp
emVfdCBzdHJpZGUpOwppbnQgZ3NsX2Jsb2NrX3VjaGFyX3Jhd19mc2NhbmYgKEZJTEUgKiBzdHJl
YW0sIHVuc2lnbmVkIGNoYXIgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlk
ZSk7CmludCBnc2xfYmxvY2tfdWNoYXJfcmF3X2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSwg
Y29uc3QgY2hhciAqZm9ybWF0KTsKCnNpemVfdCBnc2xfYmxvY2tfdWNoYXJfc2l6ZSAoY29uc3Qg
Z3NsX2Jsb2NrX3VjaGFyICogYik7CnVuc2lnbmVkIGNoYXIgKiBnc2xfYmxvY2tfdWNoYXJfZGF0
YSAoY29uc3QgZ3NsX2Jsb2NrX3VjaGFyICogYik7CgoKIyAyNiAiL3Vzci9pbmNsdWRlL2dzbC9n
c2xfdmVjdG9yX3VjaGFyLmgiIDIgMwojIDM3ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3Jf
dWNoYXIuaCIgMwoKCnR5cGVkZWYgc3RydWN0CnsKICBzaXplX3Qgc2l6ZTsKICBzaXplX3Qgc3Ry
aWRlOwogIHVuc2lnbmVkIGNoYXIgKmRhdGE7CiAgZ3NsX2Jsb2NrX3VjaGFyICpibG9jazsKICBp
bnQgb3duZXI7Cn0KZ3NsX3ZlY3Rvcl91Y2hhcjsKCnR5cGVkZWYgc3RydWN0CnsKICBnc2xfdmVj
dG9yX3VjaGFyIHZlY3RvcjsKfSBfZ3NsX3ZlY3Rvcl91Y2hhcl92aWV3OwoKdHlwZWRlZiBfZ3Ns
X3ZlY3Rvcl91Y2hhcl92aWV3IGdzbF92ZWN0b3JfdWNoYXJfdmlldzsKCnR5cGVkZWYgc3RydWN0
CnsKICBnc2xfdmVjdG9yX3VjaGFyIHZlY3RvcjsKfSBfZ3NsX3ZlY3Rvcl91Y2hhcl9jb25zdF92
aWV3OwoKdHlwZWRlZiBjb25zdCBfZ3NsX3ZlY3Rvcl91Y2hhcl9jb25zdF92aWV3IGdzbF92ZWN0
b3JfdWNoYXJfY29uc3RfdmlldzsKCgoKCmdzbF92ZWN0b3JfdWNoYXIgKmdzbF92ZWN0b3JfdWNo
YXJfYWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKZ3NsX3ZlY3Rvcl91Y2hhciAqZ3NsX3ZlY3Rvcl91
Y2hhcl9jYWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKCmdzbF92ZWN0b3JfdWNoYXIgKmdzbF92ZWN0
b3JfdWNoYXJfYWxsb2NfZnJvbV9ibG9jayAoZ3NsX2Jsb2NrX3VjaGFyICogYiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qg
b2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHNpemVfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBzdHJpZGUpOwoKZ3NsX3ZlY3Rvcl91Y2hhciAq
Z3NsX3ZlY3Rvcl91Y2hhcl9hbGxvY19mcm9tX3ZlY3RvciAoZ3NsX3ZlY3Rvcl91Y2hhciAqIHYs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHNpemVfdCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgc3RyaWRlKTsKCnZvaWQg
Z3NsX3ZlY3Rvcl91Y2hhcl9mcmVlIChnc2xfdmVjdG9yX3VjaGFyICogdik7CgoKCl9nc2xfdmVj
dG9yX3VjaGFyX3ZpZXcKZ3NsX3ZlY3Rvcl91Y2hhcl92aWV3X2FycmF5ICh1bnNpZ25lZCBjaGFy
ICp2LCBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl91Y2hhcl92aWV3CmdzbF92ZWN0b3JfdWNoYXJf
dmlld19hcnJheV93aXRoX3N0cmlkZSAodW5zaWduZWQgY2hhciAqYmFzZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX3VjaGFy
X2NvbnN0X3ZpZXcKZ3NsX3ZlY3Rvcl91Y2hhcl9jb25zdF92aWV3X2FycmF5IChjb25zdCB1bnNp
Z25lZCBjaGFyICp2LCBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl91Y2hhcl9jb25zdF92aWV3Cmdz
bF92ZWN0b3JfdWNoYXJfY29uc3Rfdmlld19hcnJheV93aXRoX3N0cmlkZSAoY29uc3QgdW5zaWdu
ZWQgY2hhciAqYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX3VjaGFyX3ZpZXcKZ3NsX3ZlY3Rvcl91
Y2hhcl9zdWJ2ZWN0b3IgKGdzbF92ZWN0b3JfdWNoYXIgKnYsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsK
Cl9nc2xfdmVjdG9yX3VjaGFyX3ZpZXcKZ3NsX3ZlY3Rvcl91Y2hhcl9zdWJ2ZWN0b3Jfd2l0aF9z
dHJpZGUgKGdzbF92ZWN0b3JfdWNoYXIgKnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl91Y2hhcl9jb25zdF92aWV3CmdzbF92ZWN0b3JfdWNo
YXJfY29uc3Rfc3VidmVjdG9yIChjb25zdCBnc2xfdmVjdG9yX3VjaGFyICp2LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl91Y2hhcl9jb25zdF92aWV3CmdzbF92
ZWN0b3JfdWNoYXJfY29uc3Rfc3VidmVjdG9yX3dpdGhfc3RyaWRlIChjb25zdCBnc2xfdmVjdG9y
X3VjaGFyICp2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IG4pOwoKCgp1bnNpZ25lZCBjaGFyIGdzbF92ZWN0b3JfdWNoYXJfZ2V0IChjb25z
dCBnc2xfdmVjdG9yX3VjaGFyICogdiwgY29uc3Qgc2l6ZV90IGkpOwp2b2lkIGdzbF92ZWN0b3Jf
dWNoYXJfc2V0IChnc2xfdmVjdG9yX3VjaGFyICogdiwgY29uc3Qgc2l6ZV90IGksIHVuc2lnbmVk
IGNoYXIgeCk7Cgp1bnNpZ25lZCBjaGFyICpnc2xfdmVjdG9yX3VjaGFyX3B0ciAoZ3NsX3ZlY3Rv
cl91Y2hhciAqIHYsIGNvbnN0IHNpemVfdCBpKTsKY29uc3QgdW5zaWduZWQgY2hhciAqZ3NsX3Zl
Y3Rvcl91Y2hhcl9jb25zdF9wdHIgKGNvbnN0IGdzbF92ZWN0b3JfdWNoYXIgKiB2LCBjb25zdCBz
aXplX3QgaSk7Cgp2b2lkIGdzbF92ZWN0b3JfdWNoYXJfc2V0X3plcm8gKGdzbF92ZWN0b3JfdWNo
YXIgKiB2KTsKdm9pZCBnc2xfdmVjdG9yX3VjaGFyX3NldF9hbGwgKGdzbF92ZWN0b3JfdWNoYXIg
KiB2LCB1bnNpZ25lZCBjaGFyIHgpOwppbnQgZ3NsX3ZlY3Rvcl91Y2hhcl9zZXRfYmFzaXMgKGdz
bF92ZWN0b3JfdWNoYXIgKiB2LCBzaXplX3QgaSk7CgppbnQgZ3NsX3ZlY3Rvcl91Y2hhcl9mcmVh
ZCAoRklMRSAqIHN0cmVhbSwgZ3NsX3ZlY3Rvcl91Y2hhciAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl91
Y2hhcl9md3JpdGUgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF92ZWN0b3JfdWNoYXIgKiB2KTsK
aW50IGdzbF92ZWN0b3JfdWNoYXJfZnNjYW5mIChGSUxFICogc3RyZWFtLCBnc2xfdmVjdG9yX3Vj
aGFyICogdik7CmludCBnc2xfdmVjdG9yX3VjaGFyX2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNv
bnN0IGdzbF92ZWN0b3JfdWNoYXIgKiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICpmb3JtYXQpOwoKaW50IGdzbF92ZWN0b3JfdWNoYXJfbWVtY3B5IChnc2xfdmVj
dG9yX3VjaGFyICogZGVzdCwgY29uc3QgZ3NsX3ZlY3Rvcl91Y2hhciAqIHNyYyk7CgppbnQgZ3Ns
X3ZlY3Rvcl91Y2hhcl9yZXZlcnNlIChnc2xfdmVjdG9yX3VjaGFyICogdik7CgppbnQgZ3NsX3Zl
Y3Rvcl91Y2hhcl9zd2FwIChnc2xfdmVjdG9yX3VjaGFyICogdiwgZ3NsX3ZlY3Rvcl91Y2hhciAq
IHcpOwppbnQgZ3NsX3ZlY3Rvcl91Y2hhcl9zd2FwX2VsZW1lbnRzIChnc2xfdmVjdG9yX3VjaGFy
ICogdiwgY29uc3Qgc2l6ZV90IGksIGNvbnN0IHNpemVfdCBqKTsKCnVuc2lnbmVkIGNoYXIgZ3Ns
X3ZlY3Rvcl91Y2hhcl9tYXggKGNvbnN0IGdzbF92ZWN0b3JfdWNoYXIgKiB2KTsKdW5zaWduZWQg
Y2hhciBnc2xfdmVjdG9yX3VjaGFyX21pbiAoY29uc3QgZ3NsX3ZlY3Rvcl91Y2hhciAqIHYpOwp2
b2lkIGdzbF92ZWN0b3JfdWNoYXJfbWlubWF4IChjb25zdCBnc2xfdmVjdG9yX3VjaGFyICogdiwg
dW5zaWduZWQgY2hhciAqIG1pbl9vdXQsIHVuc2lnbmVkIGNoYXIgKiBtYXhfb3V0KTsKCnNpemVf
dCBnc2xfdmVjdG9yX3VjaGFyX21heF9pbmRleCAoY29uc3QgZ3NsX3ZlY3Rvcl91Y2hhciAqIHYp
OwpzaXplX3QgZ3NsX3ZlY3Rvcl91Y2hhcl9taW5faW5kZXggKGNvbnN0IGdzbF92ZWN0b3JfdWNo
YXIgKiB2KTsKdm9pZCBnc2xfdmVjdG9yX3VjaGFyX21pbm1heF9pbmRleCAoY29uc3QgZ3NsX3Zl
Y3Rvcl91Y2hhciAqIHYsIHNpemVfdCAqIGltaW4sIHNpemVfdCAqIGltYXgpOwoKaW50IGdzbF92
ZWN0b3JfdWNoYXJfYWRkIChnc2xfdmVjdG9yX3VjaGFyICogYSwgY29uc3QgZ3NsX3ZlY3Rvcl91
Y2hhciAqIGIpOwppbnQgZ3NsX3ZlY3Rvcl91Y2hhcl9zdWIgKGdzbF92ZWN0b3JfdWNoYXIgKiBh
LCBjb25zdCBnc2xfdmVjdG9yX3VjaGFyICogYik7CmludCBnc2xfdmVjdG9yX3VjaGFyX211bCAo
Z3NsX3ZlY3Rvcl91Y2hhciAqIGEsIGNvbnN0IGdzbF92ZWN0b3JfdWNoYXIgKiBiKTsKaW50IGdz
bF92ZWN0b3JfdWNoYXJfZGl2IChnc2xfdmVjdG9yX3VjaGFyICogYSwgY29uc3QgZ3NsX3ZlY3Rv
cl91Y2hhciAqIGIpOwppbnQgZ3NsX3ZlY3Rvcl91Y2hhcl9zY2FsZSAoZ3NsX3ZlY3Rvcl91Y2hh
ciAqIGEsIGNvbnN0IGRvdWJsZSB4KTsKaW50IGdzbF92ZWN0b3JfdWNoYXJfYWRkX2NvbnN0YW50
IChnc2xfdmVjdG9yX3VjaGFyICogYSwgY29uc3QgZG91YmxlIHgpOwoKaW50IGdzbF92ZWN0b3Jf
dWNoYXJfaXNudWxsIChjb25zdCBnc2xfdmVjdG9yX3VjaGFyICogdik7CgpleHRlcm4gaW50IGdz
bF9jaGVja19yYW5nZTsKCgoKZXh0ZXJuIGlubGluZQp1bnNpZ25lZCBjaGFyCmdzbF92ZWN0b3Jf
dWNoYXJfZ2V0IChjb25zdCBnc2xfdmVjdG9yX3VjaGFyICogdiwgY29uc3Qgc2l6ZV90IGkpCnsK
CiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBv
dXQgb2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX3VjaGFyLmgiLCAxNzQs
IEdTTF9FSU5WQUwpIDsgcmV0dXJuIDAgOyB9IHdoaWxlICgwKTsKICAgIH0KCiAgcmV0dXJuIHYt
PmRhdGFbaSAqIHYtPnN0cmlkZV07Cn0KCmV4dGVybiBpbmxpbmUKdm9pZApnc2xfdmVjdG9yX3Vj
aGFyX3NldCAoZ3NsX3ZlY3Rvcl91Y2hhciAqIHYsIGNvbnN0IHNpemVfdCBpLCB1bnNpZ25lZCBj
aGFyIHgpCnsKCiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3Ig
KCJpbmRleCBvdXQgb2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX3VjaGFy
LmgiLCAxODcsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHYt
PmRhdGFbaSAqIHYtPnN0cmlkZV0gPSB4Owp9CgpleHRlcm4gaW5saW5lCnVuc2lnbmVkIGNoYXIg
Kgpnc2xfdmVjdG9yX3VjaGFyX3B0ciAoZ3NsX3ZlY3Rvcl91Y2hhciAqIHYsIGNvbnN0IHNpemVf
dCBpKQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgi
aW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl91Y2hhci5o
IiwgMjAwLCBHU0xfRUlOVkFMKSA7IHJldHVybiAwIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHJl
dHVybiAodW5zaWduZWQgY2hhciAqKSAodi0+ZGF0YSArIGkgKiB2LT5zdHJpZGUpOwp9CgpleHRl
cm4gaW5saW5lCmNvbnN0IHVuc2lnbmVkIGNoYXIgKgpnc2xfdmVjdG9yX3VjaGFyX2NvbnN0X3B0
ciAoY29uc3QgZ3NsX3ZlY3Rvcl91Y2hhciAqIHYsIGNvbnN0IHNpemVfdCBpKQp7CgogIGlmIChp
ID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0IG9mIHJh
bmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl91Y2hhci5oIiwgMjEzLCBHU0xfRUlO
VkFMKSA7IHJldHVybiAwIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHJldHVybiAoY29uc3QgdW5z
aWduZWQgY2hhciAqKSAodi0+ZGF0YSArIGkgKiB2LT5zdHJpZGUpOwp9CgoKCgoKIyAyMiAiL3Vz
ci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nc2wvZ3Ns
X3ZlY3Rvcl9jaGFyLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfY2hh
ci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfYmxvY2tfY2hhci5oIiAxIDMKIyAzNiAi
L3Vzci9pbmNsdWRlL2dzbC9nc2xfYmxvY2tfY2hhci5oIiAzCgoKc3RydWN0IGdzbF9ibG9ja19j
aGFyX3N0cnVjdAp7CiAgc2l6ZV90IHNpemU7CiAgY2hhciAqZGF0YTsKfTsKCnR5cGVkZWYgc3Ry
dWN0IGdzbF9ibG9ja19jaGFyX3N0cnVjdCBnc2xfYmxvY2tfY2hhcjsKCmdzbF9ibG9ja19jaGFy
ICpnc2xfYmxvY2tfY2hhcl9hbGxvYyAoY29uc3Qgc2l6ZV90IG4pOwpnc2xfYmxvY2tfY2hhciAq
Z3NsX2Jsb2NrX2NoYXJfY2FsbG9jIChjb25zdCBzaXplX3Qgbik7CnZvaWQgZ3NsX2Jsb2NrX2No
YXJfZnJlZSAoZ3NsX2Jsb2NrX2NoYXIgKiBiKTsKCmludCBnc2xfYmxvY2tfY2hhcl9mcmVhZCAo
RklMRSAqIHN0cmVhbSwgZ3NsX2Jsb2NrX2NoYXIgKiBiKTsKaW50IGdzbF9ibG9ja19jaGFyX2Z3
cml0ZSAoRklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX2Jsb2NrX2NoYXIgKiBiKTsKaW50IGdzbF9i
bG9ja19jaGFyX2ZzY2FuZiAoRklMRSAqIHN0cmVhbSwgZ3NsX2Jsb2NrX2NoYXIgKiBiKTsKaW50
IGdzbF9ibG9ja19jaGFyX2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja19j
aGFyICogYiwgY29uc3QgY2hhciAqZm9ybWF0KTsKCmludCBnc2xfYmxvY2tfY2hhcl9yYXdfZnJl
YWQgKEZJTEUgKiBzdHJlYW0sIGNoYXIgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90
IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfY2hhcl9yYXdfZndyaXRlIChGSUxFICogc3RyZWFtLCBj
b25zdCBjaGFyICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUpOwppbnQg
Z3NsX2Jsb2NrX2NoYXJfcmF3X2ZzY2FuZiAoRklMRSAqIHN0cmVhbSwgY2hhciAqIGIsIGNvbnN0
IHNpemVfdCBuLCBjb25zdCBzaXplX3Qgc3RyaWRlKTsKaW50IGdzbF9ibG9ja19jaGFyX3Jhd19m
cHJpbnRmIChGSUxFICogc3RyZWFtLCBjb25zdCBjaGFyICogYiwgY29uc3Qgc2l6ZV90IG4sIGNv
bnN0IHNpemVfdCBzdHJpZGUsIGNvbnN0IGNoYXIgKmZvcm1hdCk7CgpzaXplX3QgZ3NsX2Jsb2Nr
X2NoYXJfc2l6ZSAoY29uc3QgZ3NsX2Jsb2NrX2NoYXIgKiBiKTsKY2hhciAqIGdzbF9ibG9ja19j
aGFyX2RhdGEgKGNvbnN0IGdzbF9ibG9ja19jaGFyICogYik7CgoKIyAyNiAiL3Vzci9pbmNsdWRl
L2dzbC9nc2xfdmVjdG9yX2NoYXIuaCIgMiAzCiMgMzcgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3Zl
Y3Rvcl9jaGFyLmgiIDMKCgp0eXBlZGVmIHN0cnVjdAp7CiAgc2l6ZV90IHNpemU7CiAgc2l6ZV90
IHN0cmlkZTsKICBjaGFyICpkYXRhOwogIGdzbF9ibG9ja19jaGFyICpibG9jazsKICBpbnQgb3du
ZXI7Cn0KZ3NsX3ZlY3Rvcl9jaGFyOwoKdHlwZWRlZiBzdHJ1Y3QKewogIGdzbF92ZWN0b3JfY2hh
ciB2ZWN0b3I7Cn0gX2dzbF92ZWN0b3JfY2hhcl92aWV3OwoKdHlwZWRlZiBfZ3NsX3ZlY3Rvcl9j
aGFyX3ZpZXcgZ3NsX3ZlY3Rvcl9jaGFyX3ZpZXc7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgZ3NsX3Zl
Y3Rvcl9jaGFyIHZlY3RvcjsKfSBfZ3NsX3ZlY3Rvcl9jaGFyX2NvbnN0X3ZpZXc7Cgp0eXBlZGVm
IGNvbnN0IF9nc2xfdmVjdG9yX2NoYXJfY29uc3RfdmlldyBnc2xfdmVjdG9yX2NoYXJfY29uc3Rf
dmlldzsKCgoKCmdzbF92ZWN0b3JfY2hhciAqZ3NsX3ZlY3Rvcl9jaGFyX2FsbG9jIChjb25zdCBz
aXplX3Qgbik7CmdzbF92ZWN0b3JfY2hhciAqZ3NsX3ZlY3Rvcl9jaGFyX2NhbGxvYyAoY29uc3Qg
c2l6ZV90IG4pOwoKZ3NsX3ZlY3Rvcl9jaGFyICpnc2xfdmVjdG9yX2NoYXJfYWxsb2NfZnJvbV9i
bG9jayAoZ3NsX2Jsb2NrX2NoYXIgKiBiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBvZmZzZXQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG4sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c2l6ZV90IHN0cmlkZSk7Cgpnc2xfdmVjdG9yX2NoYXIgKmdzbF92ZWN0b3JfY2hhcl9hbGxvY19m
cm9tX3ZlY3RvciAoZ3NsX3ZlY3Rvcl9jaGFyICogdiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG9mZnNldCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6
ZV90IG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHNpemVfdCBzdHJpZGUpOwoKdm9pZCBnc2xfdmVjdG9yX2NoYXJfZnJlZSAoZ3Ns
X3ZlY3Rvcl9jaGFyICogdik7CgoKCl9nc2xfdmVjdG9yX2NoYXJfdmlldwpnc2xfdmVjdG9yX2No
YXJfdmlld19hcnJheSAoY2hhciAqdiwgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY2hhcl92aWV3
CmdzbF92ZWN0b3JfY2hhcl92aWV3X2FycmF5X3dpdGhfc3RyaWRlIChjaGFyICpiYXNlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0
b3JfY2hhcl9jb25zdF92aWV3CmdzbF92ZWN0b3JfY2hhcl9jb25zdF92aWV3X2FycmF5IChjb25z
dCBjaGFyICp2LCBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9jaGFyX2NvbnN0X3ZpZXcKZ3NsX3Zl
Y3Rvcl9jaGFyX2NvbnN0X3ZpZXdfYXJyYXlfd2l0aF9zdHJpZGUgKGNvbnN0IGNoYXIgKmJhc2Us
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0
cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3Qgbik7CgpfZ3NsX3ZlY3Rvcl9jaGFyX3ZpZXcKZ3NsX3ZlY3Rvcl9jaGFyX3N1YnZlY3RvciAo
Z3NsX3ZlY3Rvcl9jaGFyICp2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9jaGFy
X3ZpZXcKZ3NsX3ZlY3Rvcl9jaGFyX3N1YnZlY3Rvcl93aXRoX3N0cmlkZSAoZ3NsX3ZlY3Rvcl9j
aGFyICp2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92
ZWN0b3JfY2hhcl9jb25zdF92aWV3CmdzbF92ZWN0b3JfY2hhcl9jb25zdF9zdWJ2ZWN0b3IgKGNv
bnN0IGdzbF92ZWN0b3JfY2hhciAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoK
X2dzbF92ZWN0b3JfY2hhcl9jb25zdF92aWV3CmdzbF92ZWN0b3JfY2hhcl9jb25zdF9zdWJ2ZWN0
b3Jfd2l0aF9zdHJpZGUgKGNvbnN0IGdzbF92ZWN0b3JfY2hhciAqdiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCgoKY2hhciBnc2xf
dmVjdG9yX2NoYXJfZ2V0IChjb25zdCBnc2xfdmVjdG9yX2NoYXIgKiB2LCBjb25zdCBzaXplX3Qg
aSk7CnZvaWQgZ3NsX3ZlY3Rvcl9jaGFyX3NldCAoZ3NsX3ZlY3Rvcl9jaGFyICogdiwgY29uc3Qg
c2l6ZV90IGksIGNoYXIgeCk7CgpjaGFyICpnc2xfdmVjdG9yX2NoYXJfcHRyIChnc2xfdmVjdG9y
X2NoYXIgKiB2LCBjb25zdCBzaXplX3QgaSk7CmNvbnN0IGNoYXIgKmdzbF92ZWN0b3JfY2hhcl9j
b25zdF9wdHIgKGNvbnN0IGdzbF92ZWN0b3JfY2hhciAqIHYsIGNvbnN0IHNpemVfdCBpKTsKCnZv
aWQgZ3NsX3ZlY3Rvcl9jaGFyX3NldF96ZXJvIChnc2xfdmVjdG9yX2NoYXIgKiB2KTsKdm9pZCBn
c2xfdmVjdG9yX2NoYXJfc2V0X2FsbCAoZ3NsX3ZlY3Rvcl9jaGFyICogdiwgY2hhciB4KTsKaW50
IGdzbF92ZWN0b3JfY2hhcl9zZXRfYmFzaXMgKGdzbF92ZWN0b3JfY2hhciAqIHYsIHNpemVfdCBp
KTsKCmludCBnc2xfdmVjdG9yX2NoYXJfZnJlYWQgKEZJTEUgKiBzdHJlYW0sIGdzbF92ZWN0b3Jf
Y2hhciAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl9jaGFyX2Z3cml0ZSAoRklMRSAqIHN0cmVhbSwgY29u
c3QgZ3NsX3ZlY3Rvcl9jaGFyICogdik7CmludCBnc2xfdmVjdG9yX2NoYXJfZnNjYW5mIChGSUxF
ICogc3RyZWFtLCBnc2xfdmVjdG9yX2NoYXIgKiB2KTsKaW50IGdzbF92ZWN0b3JfY2hhcl9mcHJp
bnRmIChGSUxFICogc3RyZWFtLCBjb25zdCBnc2xfdmVjdG9yX2NoYXIgKiB2LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQpOwoKaW50IGdzbF92ZWN0b3Jf
Y2hhcl9tZW1jcHkgKGdzbF92ZWN0b3JfY2hhciAqIGRlc3QsIGNvbnN0IGdzbF92ZWN0b3JfY2hh
ciAqIHNyYyk7CgppbnQgZ3NsX3ZlY3Rvcl9jaGFyX3JldmVyc2UgKGdzbF92ZWN0b3JfY2hhciAq
IHYpOwoKaW50IGdzbF92ZWN0b3JfY2hhcl9zd2FwIChnc2xfdmVjdG9yX2NoYXIgKiB2LCBnc2xf
dmVjdG9yX2NoYXIgKiB3KTsKaW50IGdzbF92ZWN0b3JfY2hhcl9zd2FwX2VsZW1lbnRzIChnc2xf
dmVjdG9yX2NoYXIgKiB2LCBjb25zdCBzaXplX3QgaSwgY29uc3Qgc2l6ZV90IGopOwoKY2hhciBn
c2xfdmVjdG9yX2NoYXJfbWF4IChjb25zdCBnc2xfdmVjdG9yX2NoYXIgKiB2KTsKY2hhciBnc2xf
dmVjdG9yX2NoYXJfbWluIChjb25zdCBnc2xfdmVjdG9yX2NoYXIgKiB2KTsKdm9pZCBnc2xfdmVj
dG9yX2NoYXJfbWlubWF4IChjb25zdCBnc2xfdmVjdG9yX2NoYXIgKiB2LCBjaGFyICogbWluX291
dCwgY2hhciAqIG1heF9vdXQpOwoKc2l6ZV90IGdzbF92ZWN0b3JfY2hhcl9tYXhfaW5kZXggKGNv
bnN0IGdzbF92ZWN0b3JfY2hhciAqIHYpOwpzaXplX3QgZ3NsX3ZlY3Rvcl9jaGFyX21pbl9pbmRl
eCAoY29uc3QgZ3NsX3ZlY3Rvcl9jaGFyICogdik7CnZvaWQgZ3NsX3ZlY3Rvcl9jaGFyX21pbm1h
eF9pbmRleCAoY29uc3QgZ3NsX3ZlY3Rvcl9jaGFyICogdiwgc2l6ZV90ICogaW1pbiwgc2l6ZV90
ICogaW1heCk7CgppbnQgZ3NsX3ZlY3Rvcl9jaGFyX2FkZCAoZ3NsX3ZlY3Rvcl9jaGFyICogYSwg
Y29uc3QgZ3NsX3ZlY3Rvcl9jaGFyICogYik7CmludCBnc2xfdmVjdG9yX2NoYXJfc3ViIChnc2xf
dmVjdG9yX2NoYXIgKiBhLCBjb25zdCBnc2xfdmVjdG9yX2NoYXIgKiBiKTsKaW50IGdzbF92ZWN0
b3JfY2hhcl9tdWwgKGdzbF92ZWN0b3JfY2hhciAqIGEsIGNvbnN0IGdzbF92ZWN0b3JfY2hhciAq
IGIpOwppbnQgZ3NsX3ZlY3Rvcl9jaGFyX2RpdiAoZ3NsX3ZlY3Rvcl9jaGFyICogYSwgY29uc3Qg
Z3NsX3ZlY3Rvcl9jaGFyICogYik7CmludCBnc2xfdmVjdG9yX2NoYXJfc2NhbGUgKGdzbF92ZWN0
b3JfY2hhciAqIGEsIGNvbnN0IGRvdWJsZSB4KTsKaW50IGdzbF92ZWN0b3JfY2hhcl9hZGRfY29u
c3RhbnQgKGdzbF92ZWN0b3JfY2hhciAqIGEsIGNvbnN0IGRvdWJsZSB4KTsKCmludCBnc2xfdmVj
dG9yX2NoYXJfaXNudWxsIChjb25zdCBnc2xfdmVjdG9yX2NoYXIgKiB2KTsKCmV4dGVybiBpbnQg
Z3NsX2NoZWNrX3JhbmdlOwoKCgpleHRlcm4gaW5saW5lCmNoYXIKZ3NsX3ZlY3Rvcl9jaGFyX2dl
dCAoY29uc3QgZ3NsX3ZlY3Rvcl9jaGFyICogdiwgY29uc3Qgc2l6ZV90IGkpCnsKCiAgaWYgKGkg
Pj0gdi0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFu
Z2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2NoYXIuaCIsIDE3NCwgR1NMX0VJTlZB
TCkgOyByZXR1cm4gMCA7IH0gd2hpbGUgKDApOwogICAgfQoKICByZXR1cm4gdi0+ZGF0YVtpICog
di0+c3RyaWRlXTsKfQoKZXh0ZXJuIGlubGluZQp2b2lkCmdzbF92ZWN0b3JfY2hhcl9zZXQgKGdz
bF92ZWN0b3JfY2hhciAqIHYsIGNvbnN0IHNpemVfdCBpLCBjaGFyIHgpCnsKCiAgaWYgKGkgPj0g
di0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFuZ2Ui
LCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2NoYXIuaCIsIDE4NywgR1NMX0VJTlZBTCkg
OyByZXR1cm4gOyB9IHdoaWxlICgwKTsKICAgIH0KCiAgdi0+ZGF0YVtpICogdi0+c3RyaWRlXSA9
IHg7Cn0KCmV4dGVybiBpbmxpbmUKY2hhciAqCmdzbF92ZWN0b3JfY2hhcl9wdHIgKGdzbF92ZWN0
b3JfY2hhciAqIHYsIGNvbnN0IHNpemVfdCBpKQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7
CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVk
ZS9nc2wvZ3NsX3ZlY3Rvcl9jaGFyLmgiLCAyMDAsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDAgOyB9
IHdoaWxlICgwKTsKICAgIH0KCiAgcmV0dXJuIChjaGFyICopICh2LT5kYXRhICsgaSAqIHYtPnN0
cmlkZSk7Cn0KCmV4dGVybiBpbmxpbmUKY29uc3QgY2hhciAqCmdzbF92ZWN0b3JfY2hhcl9jb25z
dF9wdHIgKGNvbnN0IGdzbF92ZWN0b3JfY2hhciAqIHYsIGNvbnN0IHNpemVfdCBpKQp7CgogIGlm
IChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0IG9m
IHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9jaGFyLmgiLCAyMTMsIEdTTF9F
SU5WQUwpIDsgcmV0dXJuIDAgOyB9IHdoaWxlICgwKTsKICAgIH0KCiAgcmV0dXJuIChjb25zdCBj
aGFyICopICh2LT5kYXRhICsgaSAqIHYtPnN0cmlkZSk7Cn0KCgoKCgojIDIzICIvdXNyL2luY2x1
ZGUvZ3NsL2dzbF92ZWN0b3IuaCIgMiAzCiMgMzEgInRlc3QuYyIgMgojIDEgIi91c3IvaW5jbHVk
ZS9nc2wvZ3NsX3Rlc3QuaCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3Rlc3QuaCIg
MwoKCnZvaWQKICBnc2xfdGVzdCAoaW50IHN0YXR1cywgY29uc3QgY2hhciAqdGVzdF9kZXNjcmlw
dGlvbiwgLi4uKTsKCnZvaWQKZ3NsX3Rlc3RfcmVsIChkb3VibGUgcmVzdWx0LCBkb3VibGUgZXhw
ZWN0ZWQsIGRvdWJsZSByZWxhdGl2ZV9lcnJvciwKICAgICAgICAgICAgICBjb25zdCBjaGFyICp0
ZXN0X2Rlc2NyaXB0aW9uLCAuLi4pIDsKCnZvaWQKZ3NsX3Rlc3RfYWJzIChkb3VibGUgcmVzdWx0
LCBkb3VibGUgZXhwZWN0ZWQsIGRvdWJsZSBhYnNvbHV0ZV9lcnJvciwKICAgICAgICAgICAgICBj
b25zdCBjaGFyICp0ZXN0X2Rlc2NyaXB0aW9uLCAuLi4pIDsKCnZvaWQKZ3NsX3Rlc3RfZmFjdG9y
IChkb3VibGUgcmVzdWx0LCBkb3VibGUgZXhwZWN0ZWQsIGRvdWJsZSBmYWN0b3IsCiAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqdGVzdF9kZXNjcmlwdGlvbiwgLi4uKSA7Cgp2b2lkCmdzbF90
ZXN0X2ludCAoaW50IHJlc3VsdCwgaW50IGV4cGVjdGVkLCBjb25zdCBjaGFyICp0ZXN0X2Rlc2Ny
aXB0aW9uLCAuLi4pIDsKCnZvaWQKZ3NsX3Rlc3Rfc3RyIChjb25zdCBjaGFyICogcmVzdWx0LCBj
b25zdCBjaGFyICogZXhwZWN0ZWQsCiAgICAgICAgICAgICAgY29uc3QgY2hhciAqdGVzdF9kZXNj
cmlwdGlvbiwgLi4uKSA7Cgp2b2lkCiAgZ3NsX3Rlc3RfdmVyYm9zZSAoaW50IHZlcmJvc2UpIDsK
CmludAogIGdzbF90ZXN0X3N1bW1hcnkgKHZvaWQpIDsKCgoKIyAzMiAidGVzdC5jIiAyCiMgMSAi
L3Vzci9pbmNsdWRlL2dzbC9nc2xfaWVlZV91dGlscy5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRl
L2dzbC9nc2xfaWVlZV91dGlscy5oIiAzCgoKZW51bSB7CiAgR1NMX0lFRUVfVFlQRV9OQU4gPSAx
LAogIEdTTF9JRUVFX1RZUEVfSU5GID0gMiwKICBHU0xfSUVFRV9UWVBFX05PUk1BTCA9IDMsCiAg
R1NMX0lFRUVfVFlQRV9ERU5PUk1BTCA9IDQsCiAgR1NMX0lFRUVfVFlQRV9aRVJPID0gNQp9IDsK
CnR5cGVkZWYgc3RydWN0IHsKICBpbnQgc2lnbiA7CiAgY2hhciBtYW50aXNzYVsyNF0gOwogIGlu
dCBleHBvbmVudCA7CiAgaW50IHR5cGUgOwp9IGdzbF9pZWVlX2Zsb2F0X3JlcCA7Cgp0eXBlZGVm
IHN0cnVjdCB7CiAgaW50IHNpZ24gOwogIGNoYXIgbWFudGlzc2FbNTNdIDsKICBpbnQgZXhwb25l
bnQgOwogIGludCB0eXBlIDsKfSBnc2xfaWVlZV9kb3VibGVfcmVwIDsKCgp2b2lkIGdzbF9pZWVl
X3ByaW50Zl9mbG9hdCAoY29uc3QgZmxvYXQgKiB4KSA7CnZvaWQgZ3NsX2llZWVfcHJpbnRmX2Rv
dWJsZSAoY29uc3QgZG91YmxlICogeCkgOwoKdm9pZCBnc2xfaWVlZV9mcHJpbnRmX2Zsb2F0IChG
SUxFICogc3RyZWFtLCBjb25zdCBmbG9hdCAqIHgpIDsKdm9pZCBnc2xfaWVlZV9mcHJpbnRmX2Rv
dWJsZSAoRklMRSAqIHN0cmVhbSwgY29uc3QgZG91YmxlICogeCkgOwoKdm9pZCBnc2xfaWVlZV9m
bG9hdF90b19yZXAgKGNvbnN0IGZsb2F0ICogeCwgZ3NsX2llZWVfZmxvYXRfcmVwICogcikgOwp2
b2lkIGdzbF9pZWVlX2RvdWJsZV90b19yZXAgKGNvbnN0IGRvdWJsZSAqIHgsIGdzbF9pZWVlX2Rv
dWJsZV9yZXAgKiByKSA7CgplbnVtIHsKICBHU0xfSUVFRV9TSU5HTEVfUFJFQ0lTSU9OID0gMSwK
ICBHU0xfSUVFRV9ET1VCTEVfUFJFQ0lTSU9OID0gMiwKICBHU0xfSUVFRV9FWFRFTkRFRF9QUkVD
SVNJT04gPSAzCn0gOwoKZW51bSB7CiAgR1NMX0lFRUVfUk9VTkRfVE9fTkVBUkVTVCA9IDEsCiAg
R1NMX0lFRUVfUk9VTkRfRE9XTiA9IDIsCiAgR1NMX0lFRUVfUk9VTkRfVVAgPSAzLAogIEdTTF9J
RUVFX1JPVU5EX1RPX1pFUk8gPSA0Cn0gOwoKZW51bSB7CiAgR1NMX0lFRUVfTUFTS19JTlZBTElE
ID0gMSwKICBHU0xfSUVFRV9NQVNLX0RFTk9STUFMSVpFRCA9IDIsCiAgR1NMX0lFRUVfTUFTS19E
SVZJU0lPTl9CWV9aRVJPID0gNCwKICBHU0xfSUVFRV9NQVNLX09WRVJGTE9XID0gOCwKICBHU0xf
SUVFRV9NQVNLX1VOREVSRkxPVyA9IDE2LAogIEdTTF9JRUVFX01BU0tfQUxMID0gMzEsCiAgR1NM
X0lFRUVfVFJBUF9JTkVYQUNUID0gMzIKfSA7Cgp2b2lkIGdzbF9pZWVlX2Vudl9zZXR1cCAodm9p
ZCkgOwppbnQgZ3NsX2llZWVfcmVhZF9tb2RlX3N0cmluZyAoY29uc3QgY2hhciAqIGRlc2NyaXB0
aW9uLCBpbnQgKiBwcmVjaXNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
KiByb3VuZGluZywgaW50ICogZXhjZXB0aW9uX21hc2spIDsKaW50IGdzbF9pZWVlX3NldF9tb2Rl
IChpbnQgcHJlY2lzaW9uLCBpbnQgcm91bmRpbmcsIGludCBleGNlcHRpb25fbWFzaykgOwoKCiMg
MzMgInRlc3QuYyIgMgoKaW50IHN0YXR1cyA9IDA7CiMgNDMgInRlc3QuYyIKIyAxICJ0ZW1wbGF0
ZXNfb24uaCIgMQojIDQ0ICJ0ZXN0LmMiIDIKIyAxICJ0ZXN0X2NvbXBsZXhfc291cmNlLmMiIDEK
IyAyMCAidGVzdF9jb21wbGV4X3NvdXJjZS5jIgp2b2lkIHRlc3RfY29tcGxleF9sb25nX2RvdWJs
ZV9mdW5jICh2b2lkKTsKdm9pZCB0ZXN0X2NvbXBsZXhfbG9uZ19kb3VibGVfYmluYXJ5ICh2b2lk
KTsKdm9pZCB0ZXN0X2NvbXBsZXhfbG9uZ19kb3VibGVfdHJhcCAodm9pZCk7Cgp2b2lkCnRlc3Rf
Y29tcGxleF9sb25nX2RvdWJsZV9mdW5jICh2b2lkKQp7CiAgc2l6ZV90IGk7CgogIGdzbF92ZWN0
b3JfY29tcGxleF9sb25nX2RvdWJsZSAqIHYgPSBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3Vi
bGVfY2FsbG9jICgxMDI3KTsKCiAgZ3NsX3Rlc3QgKHYtPmRhdGEgPT0gMCwgImdzbF92ZWN0b3Jf
Y29tcGxleF9sb25nX2RvdWJsZSIgIl9hbGxvYyByZXR1cm5zIHZhbGlkIHBvaW50ZXIiKTsKICBn
c2xfdGVzdCAodi0+c2l6ZSAhPSAxMDI3LCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91Ymxl
IiAiX2FsbG9jIHJldHVybnMgdmFsaWQgc2l6ZSIpOwogIGdzbF90ZXN0ICh2LT5zdHJpZGUgIT0g
MSwgImdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSIgIl9hbGxvYyByZXR1cm5zIHVuaXQg
c3RyaWRlIik7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdzbF9j
b21wbGV4X2xvbmdfZG91YmxlIHggPSB7ezAuMEwsMC4wTH19OwogICAgICAoKHgpLmRhdFswXSkg
PSAobG9uZyBkb3VibGUpaTsKICAgICAgKCh4KS5kYXRbMV0pID0gKGxvbmcgZG91YmxlKShpICsg
MTIzNCk7CiAgICAgIGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV9zZXQgKHYsIGksIHgp
OwogICAgfTsKCiAgc3RhdHVzID0gMDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAg
IHsKICAgICAgaWYgKHYtPmRhdGFbMiAqIGldICE9IChsb25nIGRvdWJsZSkgaSB8fCB2LT5kYXRh
WzIgKiBpICsgMV0gIT0gKGxvbmcgZG91YmxlKSAoaSArIDEyMzQpKQogICAgICAgIHN0YXR1cyA9
IDE7CiAgICB9OwoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdf
ZG91YmxlIiAiX3NldCB3cml0ZXMgaW50byBhcnJheSBjb3JyZWN0bHkiKTsKCiAgc3RhdHVzID0g
MDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgZ3NsX2NvbXBsZXhf
bG9uZ19kb3VibGUgeCwgeTsKICAgICAgKCh4KS5kYXRbMF0pID0gKGxvbmcgZG91YmxlKWk7CiAg
ICAgICgoeCkuZGF0WzFdKSA9IChsb25nIGRvdWJsZSkoaSArIDEyMzQpOwogICAgICB5ID0gZ3Ns
X3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX2dldCAodiwgaSk7CiAgICAgIGlmICghKCgoeCku
ZGF0WzBdID09ICh5KS5kYXRbMF0pICYmICgoeCkuZGF0WzFdID09ICh5KS5kYXRbMV0pKSkKICAg
ICAgICBzdGF0dXMgPSAxOwogICAgfTsKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9j
b21wbGV4X2xvbmdfZG91YmxlIiAiX2dldCByZWFkcyBmcm9tIGFycmF5IGNvcnJlY3RseSIpOwoK
CgogIHYtPnN0cmlkZSA9IDIgOwoKICBzdGF0dXMgPSAwOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAy
NyAvIDI7IGkrKykKICAgIHsKICAgICAgZ3NsX2NvbXBsZXhfbG9uZ19kb3VibGUgeCwgeTsKICAg
ICAgKCh4KS5kYXRbMF0pID0gKGxvbmcgZG91YmxlKSgyICogaSk7CiAgICAgICgoeCkuZGF0WzFd
KSA9IChsb25nIGRvdWJsZSkoMiAqIGkgKyAxMjM0KTsKICAgICAgeSA9IGdzbF92ZWN0b3JfY29t
cGxleF9sb25nX2RvdWJsZV9nZXQgKHYsIGkpOwogICAgICBpZiAoISgoKHgpLmRhdFswXSA9PSAo
eSkuZGF0WzBdKSAmJiAoKHgpLmRhdFsxXSA9PSAoeSkuZGF0WzFdKSkpCiAgICAgICAgc3RhdHVz
ID0gMTsKICAgIH07CiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfY29tcGxleF9sb25n
X2RvdWJsZSIgIl9nZXQgcmVhZHMgZnJvbSBhcnJheSBjb3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsK
CiAgZm9yIChpID0gMDsgaSA8IDEwMjcgLyAyOyBpKyspCiAgICB7CiAgICAgIGdzbF9jb21wbGV4
X2xvbmdfZG91YmxlIHg7CiAgICAgICgoeCkuZGF0WzBdKSA9IChsb25nIGRvdWJsZSlpIDsKICAg
ICAgKCh4KS5kYXRbMV0pID0gKGxvbmcgZG91YmxlKShpICsgMTIzNCk7CiAgICAgIGdzbF92ZWN0
b3JfY29tcGxleF9sb25nX2RvdWJsZV9zZXQgKHYsIGksIHgpOwogICAgfTsKCiAgc3RhdHVzID0g
MDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjcgLyAyOyBpKyspCiAgICB7CiAgICAgIGlmICh2LT5k
YXRhWzIgKiAyICogaV0gIT0gKGxvbmcgZG91YmxlKSBpIHx8IHYtPmRhdGFbMiAqIDIgKiBpICsg
MV0gIT0gKGxvbmcgZG91YmxlKSAoaSArIDEyMzQpKQogICAgICAgIHN0YXR1cyA9IDE7CiAgICB9
OwoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlIiAi
X3NldCB3cml0ZXMgaW50byBhcnJheSBjb3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsKCgoKICB2LT5z
dHJpZGUgPSAxIDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgZ3Ns
X2NvbXBsZXhfbG9uZ19kb3VibGUgeCA9IHt7MC4wTCwwLjBMfX07CiAgICAgICgoeCkuZGF0WzBd
KSA9IChsb25nIGRvdWJsZSlpOwogICAgICAoKHgpLmRhdFsxXSkgPSAobG9uZyBkb3VibGUpKGkg
KyAxMjM0KTsKICAgICAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3NldCAodiwgaSwg
eCk7CiAgICB9OwoKCiAgewogICAgZ3NsX2NvbXBsZXhfbG9uZ19kb3VibGUgeCwgeSwgciwgcyA7
CiAgICAoKHgpLmRhdFswXSkgPSAyIDsKICAgICgoeCkuZGF0WzFdKSA9IDIgKyAxMjM0OwogICAg
KCh5KS5kYXRbMF0pID0gNSA7CiAgICAoKHkpLmRhdFsxXSkgPSA1ICsgMTIzNDsKCiAgICBnc2xf
dmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfc3dhcF9lbGVtZW50cyAodiwgMiwgNSkgOwoKICAg
IHIgPSBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfZ2V0KHYsMik7CiAgICBzID0gZ3Ns
X3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX2dldCh2LDUpOwoKICAgIHN0YXR1cyA9ICEgKCgo
cikuZGF0WzBdID09ICh5KS5kYXRbMF0pICYmICgocikuZGF0WzFdID09ICh5KS5kYXRbMV0pKSA7
CiAgICBzdGF0dXMgfD0gISAoKChzKS5kYXRbMF0gPT0gKHgpLmRhdFswXSkgJiYgKChzKS5kYXRb
MV0gPT0gKHgpLmRhdFsxXSkpIDsKCiAgICBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVf
c3dhcF9lbGVtZW50cyAodiwgMiwgNSkgOwoKICAgIHIgPSBnc2xfdmVjdG9yX2NvbXBsZXhfbG9u
Z19kb3VibGVfZ2V0KHYsMik7CiAgICBzID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91Ymxl
X2dldCh2LDUpOwoKICAgIHN0YXR1cyB8PSAhICgoKHIpLmRhdFswXSA9PSAoeCkuZGF0WzBdKSAm
JiAoKHIpLmRhdFsxXSA9PSAoeCkuZGF0WzFdKSkgOwogICAgc3RhdHVzIHw9ICEgKCgocykuZGF0
WzBdID09ICh5KS5kYXRbMF0pICYmICgocykuZGF0WzFdID09ICh5KS5kYXRbMV0pKSA7CiAgfQoK
ICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlIiAiX3N3
YXBfZWxlbWVudHMiICIiICIgZXhjaGFuZ2VzIGVsZW1lbnRzIGNvcnJlY3RseSIpIDsKCiAgc3Rh
dHVzID0gMDsKCiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3JldmVyc2UgKHYpIDsK
CiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgZ3NsX2NvbXBsZXhfbG9u
Z19kb3VibGUgeCxyIDsKICAgICAgKCh4KS5kYXRbMF0pID0gKGxvbmcgZG91YmxlKSgxMDI3IC0g
aSAtIDEpIDsKICAgICAgKCh4KS5kYXRbMV0pID0gKGxvbmcgZG91YmxlKSgxMDI3IC0gaSAtIDEg
KyAxMjM0KTsKCiAgICAgIHIgPSBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfZ2V0ICh2
LCBpKTsKCiAgICAgIHN0YXR1cyB8PSAhKCgocikuZGF0WzBdID09ICh4KS5kYXRbMF0pICYmICgo
cikuZGF0WzFdID09ICh4KS5kYXRbMV0pKTsKICAgIH0KCiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdz
bF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSIgIl9yZXZlcnNlIiAiIiAiIHJldmVyc2VzIGVs
ZW1lbnRzIGNvcnJlY3RseSIpIDsKCiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX2Zy
ZWUgKHYpOwp9Cgp2b2lkCnRlc3RfY29tcGxleF9sb25nX2RvdWJsZV9iaW5hcnkgKHZvaWQpCnsK
ICBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGUgKiB2ID0gZ3NsX3ZlY3Rvcl9jb21wbGV4
X2xvbmdfZG91YmxlX2NhbGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91
YmxlICogdyA9IGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV9jYWxsb2MgKDEwMjcpOwoK
ICBzaXplX3QgaTsKCiAgewogICAgRklMRSAqZiA9IGZvcGVuICgidGVzdC5kYXQiLCAid2IiKTsK
CiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgZ3NsX2NvbXBs
ZXhfbG9uZ19kb3VibGUgeCA9IHt7MC4wTCwwLjBMfX07CiAgICAgICAgKCh4KS5kYXRbMF0pID0g
KGxvbmcgZG91YmxlKSgxMDI3IC0gaSk7CiAgICAgICAgKCh4KS5kYXRbMV0pID0gKGxvbmcgZG91
YmxlKSgxMDI3IC0gaSArIDEpOwogICAgICAgIGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJs
ZV9zZXQgKHYsIGksIHgpOwogICAgICB9OwoKICAgIGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2Rv
dWJsZV9md3JpdGUgKGYsIHYpOwoKICAgIGZjbG9zZSAoZik7CiAgfQoKICB7CiAgICBGSUxFICpm
ID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJyYiIpOwoKICAgIGdzbF92ZWN0b3JfY29tcGxleF9sb25n
X2RvdWJsZV9mcmVhZCAoZiwgdyk7CgogICAgc3RhdHVzID0gMDsKICAgIGZvciAoaSA9IDA7IGkg
PCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBpZiAody0+ZGF0YVsyICogaV0gIT0gKGxvbmcg
ZG91YmxlKSAoMTAyNyAtIGkpIHx8IHctPmRhdGFbMiAqIGkgKyAxXSAhPSAobG9uZyBkb3VibGUp
ICgxMDI3IC0gaSArIDEpKQogICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgfTsKICAgIGZjbG9z
ZSAoZik7CiAgfQoKICBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfZnJlZSAodik7CiAg
Z3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX2ZyZWUgKHcpOwoKICBnc2xfdGVzdCAoc3Rh
dHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlIiAiX3dyaXRlIGFuZCByZWFkIHdv
cmsgY29ycmVjdGx5Iik7Cgp9CgoKdm9pZAp0ZXN0X2NvbXBsZXhfbG9uZ19kb3VibGVfdHJhcCAo
dm9pZCkKewogIGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqIHZjID0gZ3NsX3ZlY3Rv
cl9jb21wbGV4X2xvbmdfZG91YmxlX2FsbG9jICgxMDI3KTsKCiAgZ3NsX2NvbXBsZXhfbG9uZ19k
b3VibGUgeiA9IHt7KGxvbmcgZG91YmxlKTEuMiwgKGxvbmcgZG91YmxlKTMuNH19OwogIGdzbF9j
b21wbGV4X2xvbmdfZG91YmxlIHoxID0ge3sobG9uZyBkb3VibGUpNC41LCAobG9uZyBkb3VibGUp
Ni43fX07CgogIHNpemVfdCBqID0gMDsKCiAgc3RhdHVzID0gMDsKICBnc2xfdmVjdG9yX2NvbXBs
ZXhfbG9uZ19kb3VibGVfc2V0ICh2YywgaiAtIDEsIHopOwogIGdzbF90ZXN0ICghc3RhdHVzLAog
ICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlIiAiX3NldCB0cmFwcyBp
bmRleCBiZWxvdyBsb3dlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIGdzbF92ZWN0b3JfY29t
cGxleF9sb25nX2RvdWJsZV9zZXQgKHZjLCAxMDI3ICsgMSwgeik7CiAgZ3NsX3Rlc3QgKCFzdGF0
dXMsCiAgICAgICAgICAgICJnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGUiICJfc2V0IHRy
YXBzIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rv
cl9jb21wbGV4X2xvbmdfZG91YmxlX3NldCAodmMsIDEwMjcsIHopOwogIGdzbF90ZXN0ICghc3Rh
dHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlIiAiX3NldCB0cmFwcyBpbmRleCBh
dCB1cHBlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIHoxID0gZ3NsX3ZlY3Rvcl9jb21wbGV4
X2xvbmdfZG91YmxlX2dldCAodmMsIGogLSAxKTsKICBnc2xfdGVzdCAoIXN0YXR1cywKICAgICAg
ICAgICAgImdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSIgIl9nZXQgdHJhcHMgaW5kZXgg
YmVsb3cgbG93ZXIgYm91bmQiKTsKCiAgZ3NsX3Rlc3QgKCgoejEpLmRhdFswXSkgIT0gMCwKICAg
ICAgICAgICAgImdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSIgIl9nZXQgcmV0dXJucyB6
ZXJvIHJlYWwgYmVsb3cgbG93ZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoKCh6MSkuZGF0WzFdKSAh
PSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlIiAiX2dldCBy
ZXR1cm5zIHplcm8gaW1hZyBiZWxvdyBsb3dlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIHox
ID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX2dldCAodmMsIDEwMjcgKyAxKTsKICBn
c2xfdGVzdCAoIXN0YXR1cywKICAgICAgICAgICAgImdzbF92ZWN0b3JfY29tcGxleF9sb25nX2Rv
dWJsZSIgIl9nZXQgdHJhcHMgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKICBnc2xfdGVzdCAo
KCh6MSkuZGF0WzBdKSAhPSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdf
ZG91YmxlIiAiX2dldCByZXR1cm5zIHplcm8gcmVhbCBhYm92ZSB1cHBlciBib3VuZCIpOwogIGdz
bF90ZXN0ICgoKHoxKS5kYXRbMV0pICE9IDAsCiAgICAgICAgICAgICJnc2xfdmVjdG9yX2NvbXBs
ZXhfbG9uZ19kb3VibGUiICJfZ2V0IHJldHVybnMgemVybyBpbWFnIGFib3ZlIHVwcGVyIGJvdW5k
Iik7CgogIHN0YXR1cyA9IDA7CiAgejEgPSBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVf
Z2V0ICh2YywgMTAyNyk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2NvbXBsZXhf
bG9uZ19kb3VibGUiICJfZ2V0IHRyYXBzIGluZGV4IGF0IHVwcGVyIGJvdW5kIik7CiAgZ3NsX3Rl
c3QgKCgoejEpLmRhdFswXSkgIT0gMCwKICAgICAgICAgICAgImdzbF92ZWN0b3JfY29tcGxleF9s
b25nX2RvdWJsZSIgIl9nZXQgcmV0dXJucyB6ZXJvIHJlYWwgYXQgdXBwZXIgYm91bmQiKTsKICBn
c2xfdGVzdCAoKCh6MSkuZGF0WzFdKSAhPSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21w
bGV4X2xvbmdfZG91YmxlIiAiX2dldCByZXR1cm5zIHplcm8gaW1hZyBhdCB1cHBlciBib3VuZCIp
OwoKICBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfZnJlZSAodmMpOwp9CiMgNDUgInRl
c3QuYyIgMgoKIyAxICJ0ZXN0X2NvbXBsZXhfaW8uYyIgMQojIDIwICJ0ZXN0X2NvbXBsZXhfaW8u
YyIKdm9pZCB0ZXN0X2NvbXBsZXhfbG9uZ19kb3VibGVfdGV4dCAodm9pZCk7CgoKdm9pZAp0ZXN0
X2NvbXBsZXhfbG9uZ19kb3VibGVfdGV4dCAodm9pZCkKewogIGdzbF92ZWN0b3JfY29tcGxleF9s
b25nX2RvdWJsZSAqIHYgPSBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfYWxsb2MgKDEw
MjcpOwogIGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqIHcgPSBnc2xfdmVjdG9yX2Nv
bXBsZXhfbG9uZ19kb3VibGVfYWxsb2MgKDEwMjcpOwoKICBzaXplX3QgaTsKCiAgewogICAgRklM
RSAqZiA9IGZvcGVuICgidGVzdC50eHQiLCAidyIpOwoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3
OyBpKyspCiAgICAgIHsKICAgICAgICBnc2xfY29tcGxleF9sb25nX2RvdWJsZSB4OwogICAgICAg
ICgoeCkuZGF0WzBdKSA9IChsb25nIGRvdWJsZSlpOwogICAgICAgICgoeCkuZGF0WzFdKSA9IChs
b25nIGRvdWJsZSkoaSArIDEpOwogICAgICAgIGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJs
ZV9zZXQgKHYsIGksIHgpOwogICAgICB9OwoKICAgIGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2Rv
dWJsZV9mcHJpbnRmIChmLCB2LCAiJUxnIik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAg
IEZJTEUgKmYgPSBmb3BlbiAoInRlc3QudHh0IiwgInIiKTsKCiAgICBnc2xfdmVjdG9yX2NvbXBs
ZXhfbG9uZ19kb3VibGVfZnNjYW5mIChmLCB3KTsKCiAgICBzdGF0dXMgPSAwOwogICAgZm9yIChp
ID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGlmICh3LT5kYXRhWzIgKiBpXSAh
PSAobG9uZyBkb3VibGUpIGkgfHwgdy0+ZGF0YVsyICogaSArIDFdICE9IChsb25nIGRvdWJsZSkg
KGkgKyAxKSkKICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgIH07CiAgICBmY2xvc2UgKGYpOwog
IH0KCiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX2ZyZWUgKHYpOwogIGdzbF92ZWN0
b3JfY29tcGxleF9sb25nX2RvdWJsZV9mcmVlICh3KTsKCiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdz
bF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSIgIl9mcHJpbnRmIGFuZCBmc2NhbmYgd29yayBj
b3JyZWN0bHkiKTsKfQojIDQ3ICJ0ZXN0LmMiIDIKCiMgMSAidGVtcGxhdGVzX29mZi5oIiAxCiMg
NDkgInRlc3QuYyIgMgoKCgoKIyAxICJ0ZW1wbGF0ZXNfb24uaCIgMQojIDU0ICJ0ZXN0LmMiIDIK
IyAxICJ0ZXN0X2NvbXBsZXhfc291cmNlLmMiIDEKIyAyMCAidGVzdF9jb21wbGV4X3NvdXJjZS5j
Igp2b2lkIHRlc3RfY29tcGxleF9mdW5jICh2b2lkKTsKdm9pZCB0ZXN0X2NvbXBsZXhfYmluYXJ5
ICh2b2lkKTsKdm9pZCB0ZXN0X2NvbXBsZXhfdHJhcCAodm9pZCk7Cgp2b2lkCnRlc3RfY29tcGxl
eF9mdW5jICh2b2lkKQp7CiAgc2l6ZV90IGk7CgogIGdzbF92ZWN0b3JfY29tcGxleCAqIHYgPSBn
c2xfdmVjdG9yX2NvbXBsZXhfY2FsbG9jICgxMDI3KTsKCiAgZ3NsX3Rlc3QgKHYtPmRhdGEgPT0g
MCwgImdzbF92ZWN0b3JfY29tcGxleCIgIl9hbGxvYyByZXR1cm5zIHZhbGlkIHBvaW50ZXIiKTsK
ICBnc2xfdGVzdCAodi0+c2l6ZSAhPSAxMDI3LCAiZ3NsX3ZlY3Rvcl9jb21wbGV4IiAiX2FsbG9j
IHJldHVybnMgdmFsaWQgc2l6ZSIpOwogIGdzbF90ZXN0ICh2LT5zdHJpZGUgIT0gMSwgImdzbF92
ZWN0b3JfY29tcGxleCIgIl9hbGxvYyByZXR1cm5zIHVuaXQgc3RyaWRlIik7CgogIGZvciAoaSA9
IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdzbF9jb21wbGV4IHggPSB7ezAuMCwwLjB9
fTsKICAgICAgKCh4KS5kYXRbMF0pID0gKGRvdWJsZSlpOwogICAgICAoKHgpLmRhdFsxXSkgPSAo
ZG91YmxlKShpICsgMTIzNCk7CiAgICAgIGdzbF92ZWN0b3JfY29tcGxleF9zZXQgKHYsIGksIHgp
OwogICAgfTsKCiAgc3RhdHVzID0gMDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAg
IHsKICAgICAgaWYgKHYtPmRhdGFbMiAqIGldICE9IChkb3VibGUpIGkgfHwgdi0+ZGF0YVsyICog
aSArIDFdICE9IChkb3VibGUpIChpICsgMTIzNCkpCiAgICAgICAgc3RhdHVzID0gMTsKICAgIH07
CgogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2NvbXBsZXgiICJfc2V0IHdyaXRlcyBp
bnRvIGFycmF5IGNvcnJlY3RseSIpOwoKICBzdGF0dXMgPSAwOwoKICBmb3IgKGkgPSAwOyBpIDwg
MTAyNzsgaSsrKQogICAgewogICAgICBnc2xfY29tcGxleCB4LCB5OwogICAgICAoKHgpLmRhdFsw
XSkgPSAoZG91YmxlKWk7CiAgICAgICgoeCkuZGF0WzFdKSA9IChkb3VibGUpKGkgKyAxMjM0KTsK
ICAgICAgeSA9IGdzbF92ZWN0b3JfY29tcGxleF9nZXQgKHYsIGkpOwogICAgICBpZiAoISgoKHgp
LmRhdFswXSA9PSAoeSkuZGF0WzBdKSAmJiAoKHgpLmRhdFsxXSA9PSAoeSkuZGF0WzFdKSkpCiAg
ICAgICAgc3RhdHVzID0gMTsKICAgIH07CiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3Jf
Y29tcGxleCIgIl9nZXQgcmVhZHMgZnJvbSBhcnJheSBjb3JyZWN0bHkiKTsKCgoKICB2LT5zdHJp
ZGUgPSAyIDsKCiAgc3RhdHVzID0gMDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjcgLyAyOyBpKysp
CiAgICB7CiAgICAgIGdzbF9jb21wbGV4IHgsIHk7CiAgICAgICgoeCkuZGF0WzBdKSA9IChkb3Vi
bGUpKDIgKiBpKTsKICAgICAgKCh4KS5kYXRbMV0pID0gKGRvdWJsZSkoMiAqIGkgKyAxMjM0KTsK
ICAgICAgeSA9IGdzbF92ZWN0b3JfY29tcGxleF9nZXQgKHYsIGkpOwogICAgICBpZiAoISgoKHgp
LmRhdFswXSA9PSAoeSkuZGF0WzBdKSAmJiAoKHgpLmRhdFsxXSA9PSAoeSkuZGF0WzFdKSkpCiAg
ICAgICAgc3RhdHVzID0gMTsKICAgIH07CiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3Jf
Y29tcGxleCIgIl9nZXQgcmVhZHMgZnJvbSBhcnJheSBjb3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsK
CiAgZm9yIChpID0gMDsgaSA8IDEwMjcgLyAyOyBpKyspCiAgICB7CiAgICAgIGdzbF9jb21wbGV4
IHg7CiAgICAgICgoeCkuZGF0WzBdKSA9IChkb3VibGUpaSA7CiAgICAgICgoeCkuZGF0WzFdKSA9
IChkb3VibGUpKGkgKyAxMjM0KTsKICAgICAgZ3NsX3ZlY3Rvcl9jb21wbGV4X3NldCAodiwgaSwg
eCk7CiAgICB9OwoKICBzdGF0dXMgPSAwOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7IGkr
KykKICAgIHsKICAgICAgaWYgKHYtPmRhdGFbMiAqIDIgKiBpXSAhPSAoZG91YmxlKSBpIHx8IHYt
PmRhdGFbMiAqIDIgKiBpICsgMV0gIT0gKGRvdWJsZSkgKGkgKyAxMjM0KSkKICAgICAgICBzdGF0
dXMgPSAxOwogICAgfTsKCiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfY29tcGxleCIg
Il9zZXQgd3JpdGVzIGludG8gYXJyYXkgY29ycmVjdGx5IHdpdGggc3RyaWRlIik7CgoKCiAgdi0+
c3RyaWRlID0gMSA7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdz
bF9jb21wbGV4IHggPSB7ezAuMCwwLjB9fTsKICAgICAgKCh4KS5kYXRbMF0pID0gKGRvdWJsZSlp
OwogICAgICAoKHgpLmRhdFsxXSkgPSAoZG91YmxlKShpICsgMTIzNCk7CiAgICAgIGdzbF92ZWN0
b3JfY29tcGxleF9zZXQgKHYsIGksIHgpOwogICAgfTsKCgogIHsKICAgIGdzbF9jb21wbGV4IHgs
IHksIHIsIHMgOwogICAgKCh4KS5kYXRbMF0pID0gMiA7CiAgICAoKHgpLmRhdFsxXSkgPSAyICsg
MTIzNDsKICAgICgoeSkuZGF0WzBdKSA9IDUgOwogICAgKCh5KS5kYXRbMV0pID0gNSArIDEyMzQ7
CgogICAgZ3NsX3ZlY3Rvcl9jb21wbGV4X3N3YXBfZWxlbWVudHMgKHYsIDIsIDUpIDsKCiAgICBy
ID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2dldCh2LDIpOwogICAgcyA9IGdzbF92ZWN0b3JfY29tcGxl
eF9nZXQodiw1KTsKCiAgICBzdGF0dXMgPSAhICgoKHIpLmRhdFswXSA9PSAoeSkuZGF0WzBdKSAm
JiAoKHIpLmRhdFsxXSA9PSAoeSkuZGF0WzFdKSkgOwogICAgc3RhdHVzIHw9ICEgKCgocykuZGF0
WzBdID09ICh4KS5kYXRbMF0pICYmICgocykuZGF0WzFdID09ICh4KS5kYXRbMV0pKSA7CgogICAg
Z3NsX3ZlY3Rvcl9jb21wbGV4X3N3YXBfZWxlbWVudHMgKHYsIDIsIDUpIDsKCiAgICByID0gZ3Ns
X3ZlY3Rvcl9jb21wbGV4X2dldCh2LDIpOwogICAgcyA9IGdzbF92ZWN0b3JfY29tcGxleF9nZXQo
diw1KTsKCiAgICBzdGF0dXMgfD0gISAoKChyKS5kYXRbMF0gPT0gKHgpLmRhdFswXSkgJiYgKChy
KS5kYXRbMV0gPT0gKHgpLmRhdFsxXSkpIDsKICAgIHN0YXR1cyB8PSAhICgoKHMpLmRhdFswXSA9
PSAoeSkuZGF0WzBdKSAmJiAoKHMpLmRhdFsxXSA9PSAoeSkuZGF0WzFdKSkgOwogIH0KCiAgZ3Ns
X3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfY29tcGxleCIgIl9zd2FwX2VsZW1lbnRzIiAiIiAi
IGV4Y2hhbmdlcyBlbGVtZW50cyBjb3JyZWN0bHkiKSA7CgogIHN0YXR1cyA9IDA7CgogIGdzbF92
ZWN0b3JfY29tcGxleF9yZXZlcnNlICh2KSA7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKysp
CiAgICB7CiAgICAgIGdzbF9jb21wbGV4IHgsciA7CiAgICAgICgoeCkuZGF0WzBdKSA9IChkb3Vi
bGUpKDEwMjcgLSBpIC0gMSkgOwogICAgICAoKHgpLmRhdFsxXSkgPSAoZG91YmxlKSgxMDI3IC0g
aSAtIDEgKyAxMjM0KTsKCiAgICAgIHIgPSBnc2xfdmVjdG9yX2NvbXBsZXhfZ2V0ICh2LCBpKTsK
CiAgICAgIHN0YXR1cyB8PSAhKCgocikuZGF0WzBdID09ICh4KS5kYXRbMF0pICYmICgocikuZGF0
WzFdID09ICh4KS5kYXRbMV0pKTsKICAgIH0KCiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0
b3JfY29tcGxleCIgIl9yZXZlcnNlIiAiIiAiIHJldmVyc2VzIGVsZW1lbnRzIGNvcnJlY3RseSIp
IDsKCiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2ZyZWUgKHYpOwp9Cgp2b2lkCnRlc3RfY29tcGxleF9i
aW5hcnkgKHZvaWQpCnsKICBnc2xfdmVjdG9yX2NvbXBsZXggKiB2ID0gZ3NsX3ZlY3Rvcl9jb21w
bGV4X2NhbGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4ICogdyA9IGdzbF92ZWN0b3Jf
Y29tcGxleF9jYWxsb2MgKDEwMjcpOwoKICBzaXplX3QgaTsKCiAgewogICAgRklMRSAqZiA9IGZv
cGVuICgidGVzdC5kYXQiLCAid2IiKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQog
ICAgICB7CiAgICAgICAgZ3NsX2NvbXBsZXggeCA9IHt7MC4wLDAuMH19OwogICAgICAgICgoeCku
ZGF0WzBdKSA9IChkb3VibGUpKDEwMjcgLSBpKTsKICAgICAgICAoKHgpLmRhdFsxXSkgPSAoZG91
YmxlKSgxMDI3IC0gaSArIDEpOwogICAgICAgIGdzbF92ZWN0b3JfY29tcGxleF9zZXQgKHYsIGks
IHgpOwogICAgICB9OwoKICAgIGdzbF92ZWN0b3JfY29tcGxleF9md3JpdGUgKGYsIHYpOwoKICAg
IGZjbG9zZSAoZik7CiAgfQoKICB7CiAgICBGSUxFICpmID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJy
YiIpOwoKICAgIGdzbF92ZWN0b3JfY29tcGxleF9mcmVhZCAoZiwgdyk7CgogICAgc3RhdHVzID0g
MDsKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBpZiAody0+
ZGF0YVsyICogaV0gIT0gKGRvdWJsZSkgKDEwMjcgLSBpKSB8fCB3LT5kYXRhWzIgKiBpICsgMV0g
IT0gKGRvdWJsZSkgKDEwMjcgLSBpICsgMSkpCiAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICB9
OwogICAgZmNsb3NlIChmKTsKICB9CgogIGdzbF92ZWN0b3JfY29tcGxleF9mcmVlICh2KTsKICBn
c2xfdmVjdG9yX2NvbXBsZXhfZnJlZSAodyk7CgogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVj
dG9yX2NvbXBsZXgiICJfd3JpdGUgYW5kIHJlYWQgd29yayBjb3JyZWN0bHkiKTsKCn0KCgp2b2lk
CnRlc3RfY29tcGxleF90cmFwICh2b2lkKQp7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4ICogdmMgPSBn
c2xfdmVjdG9yX2NvbXBsZXhfYWxsb2MgKDEwMjcpOwoKICBnc2xfY29tcGxleCB6ID0ge3soZG91
YmxlKTEuMiwgKGRvdWJsZSkzLjR9fTsKICBnc2xfY29tcGxleCB6MSA9IHt7KGRvdWJsZSk0LjUs
IChkb3VibGUpNi43fX07CgogIHNpemVfdCBqID0gMDsKCiAgc3RhdHVzID0gMDsKICBnc2xfdmVj
dG9yX2NvbXBsZXhfc2V0ICh2YywgaiAtIDEsIHopOwogIGdzbF90ZXN0ICghc3RhdHVzLAogICAg
ICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21wbGV4IiAiX3NldCB0cmFwcyBpbmRleCBiZWxvdyBsb3dl
ciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIGdzbF92ZWN0b3JfY29tcGxleF9zZXQgKHZjLCAx
MDI3ICsgMSwgeik7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsCiAgICAgICAgICAgICJnc2xfdmVjdG9y
X2NvbXBsZXgiICJfc2V0IHRyYXBzIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5kIik7CgogIHN0YXR1
cyA9IDA7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X3NldCAodmMsIDEwMjcsIHopOwogIGdzbF90ZXN0
ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4IiAiX3NldCB0cmFwcyBpbmRleCBhdCB1cHBl
ciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIHoxID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2dldCAo
dmMsIGogLSAxKTsKICBnc2xfdGVzdCAoIXN0YXR1cywKICAgICAgICAgICAgImdzbF92ZWN0b3Jf
Y29tcGxleCIgIl9nZXQgdHJhcHMgaW5kZXggYmVsb3cgbG93ZXIgYm91bmQiKTsKCiAgZ3NsX3Rl
c3QgKCgoejEpLmRhdFswXSkgIT0gMCwKICAgICAgICAgICAgImdzbF92ZWN0b3JfY29tcGxleCIg
Il9nZXQgcmV0dXJucyB6ZXJvIHJlYWwgYmVsb3cgbG93ZXIgYm91bmQiKTsKICBnc2xfdGVzdCAo
KCh6MSkuZGF0WzFdKSAhPSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21wbGV4IiAiX2dl
dCByZXR1cm5zIHplcm8gaW1hZyBiZWxvdyBsb3dlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwog
IHoxID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2dldCAodmMsIDEwMjcgKyAxKTsKICBnc2xfdGVzdCAo
IXN0YXR1cywKICAgICAgICAgICAgImdzbF92ZWN0b3JfY29tcGxleCIgIl9nZXQgdHJhcHMgaW5k
ZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoKCh6MSkuZGF0WzBdKSAhPSAwLAog
ICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21wbGV4IiAiX2dldCByZXR1cm5zIHplcm8gcmVhbCBh
Ym92ZSB1cHBlciBib3VuZCIpOwogIGdzbF90ZXN0ICgoKHoxKS5kYXRbMV0pICE9IDAsCiAgICAg
ICAgICAgICJnc2xfdmVjdG9yX2NvbXBsZXgiICJfZ2V0IHJldHVybnMgemVybyBpbWFnIGFib3Zl
IHVwcGVyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgejEgPSBnc2xfdmVjdG9yX2NvbXBsZXhf
Z2V0ICh2YywgMTAyNyk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2NvbXBsZXgi
ICJfZ2V0IHRyYXBzIGluZGV4IGF0IHVwcGVyIGJvdW5kIik7CiAgZ3NsX3Rlc3QgKCgoejEpLmRh
dFswXSkgIT0gMCwKICAgICAgICAgICAgImdzbF92ZWN0b3JfY29tcGxleCIgIl9nZXQgcmV0dXJu
cyB6ZXJvIHJlYWwgYXQgdXBwZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoKCh6MSkuZGF0WzFdKSAh
PSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21wbGV4IiAiX2dldCByZXR1cm5zIHplcm8g
aW1hZyBhdCB1cHBlciBib3VuZCIpOwoKICBnc2xfdmVjdG9yX2NvbXBsZXhfZnJlZSAodmMpOwp9
CiMgNTUgInRlc3QuYyIgMgojIDEgInRlc3RfY29tcGxleF9pby5jIiAxCiMgMjAgInRlc3RfY29t
cGxleF9pby5jIgp2b2lkIHRlc3RfY29tcGxleF90ZXh0ICh2b2lkKTsKCgp2b2lkCnRlc3RfY29t
cGxleF90ZXh0ICh2b2lkKQp7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4ICogdiA9IGdzbF92ZWN0b3Jf
Y29tcGxleF9hbGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4ICogdyA9IGdzbF92ZWN0
b3JfY29tcGxleF9hbGxvYyAoMTAyNyk7CgogIHNpemVfdCBpOwoKICB7CiAgICBGSUxFICpmID0g
Zm9wZW4gKCJ0ZXN0LnR4dCIsICJ3Iik7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykK
ICAgICAgewogICAgICAgIGdzbF9jb21wbGV4IHg7CiAgICAgICAgKCh4KS5kYXRbMF0pID0gKGRv
dWJsZSlpOwogICAgICAgICgoeCkuZGF0WzFdKSA9IChkb3VibGUpKGkgKyAxKTsKICAgICAgICBn
c2xfdmVjdG9yX2NvbXBsZXhfc2V0ICh2LCBpLCB4KTsKICAgICAgfTsKCiAgICBnc2xfdmVjdG9y
X2NvbXBsZXhfZnByaW50ZiAoZiwgdiwgIiVnIik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsK
ICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3QudHh0IiwgInIiKTsKCiAgICBnc2xfdmVjdG9yX2Nv
bXBsZXhfZnNjYW5mIChmLCB3KTsKCiAgICBzdGF0dXMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8
IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGlmICh3LT5kYXRhWzIgKiBpXSAhPSAoZG91Ymxl
KSBpIHx8IHctPmRhdGFbMiAqIGkgKyAxXSAhPSAoZG91YmxlKSAoaSArIDEpKQogICAgICAgICAg
c3RhdHVzID0gMTsKICAgICAgfTsKICAgIGZjbG9zZSAoZik7CiAgfQoKICBnc2xfdmVjdG9yX2Nv
bXBsZXhfZnJlZSAodik7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2ZyZWUgKHcpOwoKICBnc2xfdGVz
dCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4IiAiX2ZwcmludGYgYW5kIGZzY2FuZiB3b3Jr
IGNvcnJlY3RseSIpOwp9CiMgNTYgInRlc3QuYyIgMgojIDEgInRlbXBsYXRlc19vZmYuaCIgMQoj
IDU3ICJ0ZXN0LmMiIDIKCgoKIyAxICJ0ZW1wbGF0ZXNfb24uaCIgMQojIDYxICJ0ZXN0LmMiIDIK
IyAxICJ0ZXN0X2NvbXBsZXhfc291cmNlLmMiIDEKIyAyMCAidGVzdF9jb21wbGV4X3NvdXJjZS5j
Igp2b2lkIHRlc3RfY29tcGxleF9mbG9hdF9mdW5jICh2b2lkKTsKdm9pZCB0ZXN0X2NvbXBsZXhf
ZmxvYXRfYmluYXJ5ICh2b2lkKTsKdm9pZCB0ZXN0X2NvbXBsZXhfZmxvYXRfdHJhcCAodm9pZCk7
Cgp2b2lkCnRlc3RfY29tcGxleF9mbG9hdF9mdW5jICh2b2lkKQp7CiAgc2l6ZV90IGk7CgogIGdz
bF92ZWN0b3JfY29tcGxleF9mbG9hdCAqIHYgPSBnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfY2Fs
bG9jICgxMDI3KTsKCiAgZ3NsX3Rlc3QgKHYtPmRhdGEgPT0gMCwgImdzbF92ZWN0b3JfY29tcGxl
eF9mbG9hdCIgIl9hbGxvYyByZXR1cm5zIHZhbGlkIHBvaW50ZXIiKTsKICBnc2xfdGVzdCAodi0+
c2l6ZSAhPSAxMDI3LCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0IiAiX2FsbG9jIHJldHVybnMg
dmFsaWQgc2l6ZSIpOwogIGdzbF90ZXN0ICh2LT5zdHJpZGUgIT0gMSwgImdzbF92ZWN0b3JfY29t
cGxleF9mbG9hdCIgIl9hbGxvYyByZXR1cm5zIHVuaXQgc3RyaWRlIik7CgogIGZvciAoaSA9IDA7
IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdzbF9jb21wbGV4X2Zsb2F0IHggPSB7ezAuMEYs
MC4wRn19OwogICAgICAoKHgpLmRhdFswXSkgPSAoZmxvYXQpaTsKICAgICAgKCh4KS5kYXRbMV0p
ID0gKGZsb2F0KShpICsgMTIzNCk7CiAgICAgIGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdF9zZXQg
KHYsIGksIHgpOwogICAgfTsKCiAgc3RhdHVzID0gMDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7
IGkrKykKICAgIHsKICAgICAgaWYgKHYtPmRhdGFbMiAqIGldICE9IChmbG9hdCkgaSB8fCB2LT5k
YXRhWzIgKiBpICsgMV0gIT0gKGZsb2F0KSAoaSArIDEyMzQpKQogICAgICAgIHN0YXR1cyA9IDE7
CiAgICB9OwoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0IiAi
X3NldCB3cml0ZXMgaW50byBhcnJheSBjb3JyZWN0bHkiKTsKCiAgc3RhdHVzID0gMDsKCiAgZm9y
IChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgZ3NsX2NvbXBsZXhfZmxvYXQgeCwg
eTsKICAgICAgKCh4KS5kYXRbMF0pID0gKGZsb2F0KWk7CiAgICAgICgoeCkuZGF0WzFdKSA9IChm
bG9hdCkoaSArIDEyMzQpOwogICAgICB5ID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2dldCAo
diwgaSk7CiAgICAgIGlmICghKCgoeCkuZGF0WzBdID09ICh5KS5kYXRbMF0pICYmICgoeCkuZGF0
WzFdID09ICh5KS5kYXRbMV0pKSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKICBnc2xfdGVz
dCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0IiAiX2dldCByZWFkcyBmcm9tIGFy
cmF5IGNvcnJlY3RseSIpOwoKCgogIHYtPnN0cmlkZSA9IDIgOwoKICBzdGF0dXMgPSAwOwoKICBm
b3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7IGkrKykKICAgIHsKICAgICAgZ3NsX2NvbXBsZXhfZmxv
YXQgeCwgeTsKICAgICAgKCh4KS5kYXRbMF0pID0gKGZsb2F0KSgyICogaSk7CiAgICAgICgoeCku
ZGF0WzFdKSA9IChmbG9hdCkoMiAqIGkgKyAxMjM0KTsKICAgICAgeSA9IGdzbF92ZWN0b3JfY29t
cGxleF9mbG9hdF9nZXQgKHYsIGkpOwogICAgICBpZiAoISgoKHgpLmRhdFswXSA9PSAoeSkuZGF0
WzBdKSAmJiAoKHgpLmRhdFsxXSA9PSAoeSkuZGF0WzFdKSkpCiAgICAgICAgc3RhdHVzID0gMTsK
ICAgIH07CiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCIgIl9n
ZXQgcmVhZHMgZnJvbSBhcnJheSBjb3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsKCiAgZm9yIChpID0g
MDsgaSA8IDEwMjcgLyAyOyBpKyspCiAgICB7CiAgICAgIGdzbF9jb21wbGV4X2Zsb2F0IHg7CiAg
ICAgICgoeCkuZGF0WzBdKSA9IChmbG9hdClpIDsKICAgICAgKCh4KS5kYXRbMV0pID0gKGZsb2F0
KShpICsgMTIzNCk7CiAgICAgIGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdF9zZXQgKHYsIGksIHgp
OwogICAgfTsKCiAgc3RhdHVzID0gMDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjcgLyAyOyBpKysp
CiAgICB7CiAgICAgIGlmICh2LT5kYXRhWzIgKiAyICogaV0gIT0gKGZsb2F0KSBpIHx8IHYtPmRh
dGFbMiAqIDIgKiBpICsgMV0gIT0gKGZsb2F0KSAoaSArIDEyMzQpKQogICAgICAgIHN0YXR1cyA9
IDE7CiAgICB9OwoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0
IiAiX3NldCB3cml0ZXMgaW50byBhcnJheSBjb3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsKCgoKICB2
LT5zdHJpZGUgPSAxIDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAg
Z3NsX2NvbXBsZXhfZmxvYXQgeCA9IHt7MC4wRiwwLjBGfX07CiAgICAgICgoeCkuZGF0WzBdKSA9
IChmbG9hdClpOwogICAgICAoKHgpLmRhdFsxXSkgPSAoZmxvYXQpKGkgKyAxMjM0KTsKICAgICAg
Z3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3NldCAodiwgaSwgeCk7CiAgICB9OwoKCiAgewogICAg
Z3NsX2NvbXBsZXhfZmxvYXQgeCwgeSwgciwgcyA7CiAgICAoKHgpLmRhdFswXSkgPSAyIDsKICAg
ICgoeCkuZGF0WzFdKSA9IDIgKyAxMjM0OwogICAgKCh5KS5kYXRbMF0pID0gNSA7CiAgICAoKHkp
LmRhdFsxXSkgPSA1ICsgMTIzNDsKCiAgICBnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfc3dhcF9l
bGVtZW50cyAodiwgMiwgNSkgOwoKICAgIHIgPSBnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfZ2V0
KHYsMik7CiAgICBzID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2dldCh2LDUpOwoKICAgIHN0
YXR1cyA9ICEgKCgocikuZGF0WzBdID09ICh5KS5kYXRbMF0pICYmICgocikuZGF0WzFdID09ICh5
KS5kYXRbMV0pKSA7CiAgICBzdGF0dXMgfD0gISAoKChzKS5kYXRbMF0gPT0gKHgpLmRhdFswXSkg
JiYgKChzKS5kYXRbMV0gPT0gKHgpLmRhdFsxXSkpIDsKCiAgICBnc2xfdmVjdG9yX2NvbXBsZXhf
ZmxvYXRfc3dhcF9lbGVtZW50cyAodiwgMiwgNSkgOwoKICAgIHIgPSBnc2xfdmVjdG9yX2NvbXBs
ZXhfZmxvYXRfZ2V0KHYsMik7CiAgICBzID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2dldCh2
LDUpOwoKICAgIHN0YXR1cyB8PSAhICgoKHIpLmRhdFswXSA9PSAoeCkuZGF0WzBdKSAmJiAoKHIp
LmRhdFsxXSA9PSAoeCkuZGF0WzFdKSkgOwogICAgc3RhdHVzIHw9ICEgKCgocykuZGF0WzBdID09
ICh5KS5kYXRbMF0pICYmICgocykuZGF0WzFdID09ICh5KS5kYXRbMV0pKSA7CiAgfQoKICBnc2xf
dGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0IiAiX3N3YXBfZWxlbWVudHMi
ICIiICIgZXhjaGFuZ2VzIGVsZW1lbnRzIGNvcnJlY3RseSIpIDsKCiAgc3RhdHVzID0gMDsKCiAg
Z3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3JldmVyc2UgKHYpIDsKCiAgZm9yIChpID0gMDsgaSA8
IDEwMjc7IGkrKykKICAgIHsKICAgICAgZ3NsX2NvbXBsZXhfZmxvYXQgeCxyIDsKICAgICAgKCh4
KS5kYXRbMF0pID0gKGZsb2F0KSgxMDI3IC0gaSAtIDEpIDsKICAgICAgKCh4KS5kYXRbMV0pID0g
KGZsb2F0KSgxMDI3IC0gaSAtIDEgKyAxMjM0KTsKCiAgICAgIHIgPSBnc2xfdmVjdG9yX2NvbXBs
ZXhfZmxvYXRfZ2V0ICh2LCBpKTsKCiAgICAgIHN0YXR1cyB8PSAhKCgocikuZGF0WzBdID09ICh4
KS5kYXRbMF0pICYmICgocikuZGF0WzFdID09ICh4KS5kYXRbMV0pKTsKICAgIH0KCiAgZ3NsX3Rl
c3QgKHN0YXR1cywgImdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCIgIl9yZXZlcnNlIiAiIiAiIHJl
dmVyc2VzIGVsZW1lbnRzIGNvcnJlY3RseSIpIDsKCiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0
X2ZyZWUgKHYpOwp9Cgp2b2lkCnRlc3RfY29tcGxleF9mbG9hdF9iaW5hcnkgKHZvaWQpCnsKICBn
c2xfdmVjdG9yX2NvbXBsZXhfZmxvYXQgKiB2ID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2Nh
bGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0ICogdyA9IGdzbF92ZWN0b3Jf
Y29tcGxleF9mbG9hdF9jYWxsb2MgKDEwMjcpOwoKICBzaXplX3QgaTsKCiAgewogICAgRklMRSAq
ZiA9IGZvcGVuICgidGVzdC5kYXQiLCAid2IiKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsg
aSsrKQogICAgICB7CiAgICAgICAgZ3NsX2NvbXBsZXhfZmxvYXQgeCA9IHt7MC4wRiwwLjBGfX07
CiAgICAgICAgKCh4KS5kYXRbMF0pID0gKGZsb2F0KSgxMDI3IC0gaSk7CiAgICAgICAgKCh4KS5k
YXRbMV0pID0gKGZsb2F0KSgxMDI3IC0gaSArIDEpOwogICAgICAgIGdzbF92ZWN0b3JfY29tcGxl
eF9mbG9hdF9zZXQgKHYsIGksIHgpOwogICAgICB9OwoKICAgIGdzbF92ZWN0b3JfY29tcGxleF9m
bG9hdF9md3JpdGUgKGYsIHYpOwoKICAgIGZjbG9zZSAoZik7CiAgfQoKICB7CiAgICBGSUxFICpm
ID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJyYiIpOwoKICAgIGdzbF92ZWN0b3JfY29tcGxleF9mbG9h
dF9mcmVhZCAoZiwgdyk7CgogICAgc3RhdHVzID0gMDsKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3
OyBpKyspCiAgICAgIHsKICAgICAgICBpZiAody0+ZGF0YVsyICogaV0gIT0gKGZsb2F0KSAoMTAy
NyAtIGkpIHx8IHctPmRhdGFbMiAqIGkgKyAxXSAhPSAoZmxvYXQpICgxMDI3IC0gaSArIDEpKQog
ICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgfTsKICAgIGZjbG9zZSAoZik7CiAgfQoKICBnc2xf
dmVjdG9yX2NvbXBsZXhfZmxvYXRfZnJlZSAodik7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0
X2ZyZWUgKHcpOwoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0
IiAiX3dyaXRlIGFuZCByZWFkIHdvcmsgY29ycmVjdGx5Iik7Cgp9CgoKdm9pZAp0ZXN0X2NvbXBs
ZXhfZmxvYXRfdHJhcCAodm9pZCkKewogIGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCAqIHZjID0g
Z3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2FsbG9jICgxMDI3KTsKCiAgZ3NsX2NvbXBsZXhfZmxv
YXQgeiA9IHt7KGZsb2F0KTEuMiwgKGZsb2F0KTMuNH19OwogIGdzbF9jb21wbGV4X2Zsb2F0IHox
ID0ge3soZmxvYXQpNC41LCAoZmxvYXQpNi43fX07CgogIHNpemVfdCBqID0gMDsKCiAgc3RhdHVz
ID0gMDsKICBnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfc2V0ICh2YywgaiAtIDEsIHopOwogIGdz
bF90ZXN0ICghc3RhdHVzLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0IiAi
X3NldCB0cmFwcyBpbmRleCBiZWxvdyBsb3dlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIGdz
bF92ZWN0b3JfY29tcGxleF9mbG9hdF9zZXQgKHZjLCAxMDI3ICsgMSwgeik7CiAgZ3NsX3Rlc3Qg
KCFzdGF0dXMsCiAgICAgICAgICAgICJnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXQiICJfc2V0IHRy
YXBzIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rv
cl9jb21wbGV4X2Zsb2F0X3NldCAodmMsIDEwMjcsIHopOwogIGdzbF90ZXN0ICghc3RhdHVzLCAi
Z3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0IiAiX3NldCB0cmFwcyBpbmRleCBhdCB1cHBlciBib3Vu
ZCIpOwoKICBzdGF0dXMgPSAwOwogIHoxID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2dldCAo
dmMsIGogLSAxKTsKICBnc2xfdGVzdCAoIXN0YXR1cywKICAgICAgICAgICAgImdzbF92ZWN0b3Jf
Y29tcGxleF9mbG9hdCIgIl9nZXQgdHJhcHMgaW5kZXggYmVsb3cgbG93ZXIgYm91bmQiKTsKCiAg
Z3NsX3Rlc3QgKCgoejEpLmRhdFswXSkgIT0gMCwKICAgICAgICAgICAgImdzbF92ZWN0b3JfY29t
cGxleF9mbG9hdCIgIl9nZXQgcmV0dXJucyB6ZXJvIHJlYWwgYmVsb3cgbG93ZXIgYm91bmQiKTsK
ICBnc2xfdGVzdCAoKCh6MSkuZGF0WzFdKSAhPSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9j
b21wbGV4X2Zsb2F0IiAiX2dldCByZXR1cm5zIHplcm8gaW1hZyBiZWxvdyBsb3dlciBib3VuZCIp
OwoKICBzdGF0dXMgPSAwOwogIHoxID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2dldCAodmMs
IDEwMjcgKyAxKTsKICBnc2xfdGVzdCAoIXN0YXR1cywKICAgICAgICAgICAgImdzbF92ZWN0b3Jf
Y29tcGxleF9mbG9hdCIgIl9nZXQgdHJhcHMgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKICBn
c2xfdGVzdCAoKCh6MSkuZGF0WzBdKSAhPSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21w
bGV4X2Zsb2F0IiAiX2dldCByZXR1cm5zIHplcm8gcmVhbCBhYm92ZSB1cHBlciBib3VuZCIpOwog
IGdzbF90ZXN0ICgoKHoxKS5kYXRbMV0pICE9IDAsCiAgICAgICAgICAgICJnc2xfdmVjdG9yX2Nv
bXBsZXhfZmxvYXQiICJfZ2V0IHJldHVybnMgemVybyBpbWFnIGFib3ZlIHVwcGVyIGJvdW5kIik7
CgogIHN0YXR1cyA9IDA7CiAgejEgPSBnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfZ2V0ICh2Yywg
MTAyNyk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXQiICJf
Z2V0IHRyYXBzIGluZGV4IGF0IHVwcGVyIGJvdW5kIik7CiAgZ3NsX3Rlc3QgKCgoejEpLmRhdFsw
XSkgIT0gMCwKICAgICAgICAgICAgImdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCIgIl9nZXQgcmV0
dXJucyB6ZXJvIHJlYWwgYXQgdXBwZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoKCh6MSkuZGF0WzFd
KSAhPSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0IiAiX2dldCByZXR1
cm5zIHplcm8gaW1hZyBhdCB1cHBlciBib3VuZCIpOwoKICBnc2xfdmVjdG9yX2NvbXBsZXhfZmxv
YXRfZnJlZSAodmMpOwp9CiMgNjIgInRlc3QuYyIgMgojIDEgInRlc3RfY29tcGxleF9pby5jIiAx
CiMgMjAgInRlc3RfY29tcGxleF9pby5jIgp2b2lkIHRlc3RfY29tcGxleF9mbG9hdF90ZXh0ICh2
b2lkKTsKCgp2b2lkCnRlc3RfY29tcGxleF9mbG9hdF90ZXh0ICh2b2lkKQp7CiAgZ3NsX3ZlY3Rv
cl9jb21wbGV4X2Zsb2F0ICogdiA9IGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdF9hbGxvYyAoMTAy
Nyk7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0ICogdyA9IGdzbF92ZWN0b3JfY29tcGxleF9m
bG9hdF9hbGxvYyAoMTAyNyk7CgogIHNpemVfdCBpOwoKICB7CiAgICBGSUxFICpmID0gZm9wZW4g
KCJ0ZXN0LnR4dCIsICJ3Iik7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAg
ewogICAgICAgIGdzbF9jb21wbGV4X2Zsb2F0IHg7CiAgICAgICAgKCh4KS5kYXRbMF0pID0gKGZs
b2F0KWk7CiAgICAgICAgKCh4KS5kYXRbMV0pID0gKGZsb2F0KShpICsgMSk7CiAgICAgICAgZ3Ns
X3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3NldCAodiwgaSwgeCk7CiAgICAgIH07CgogICAgZ3NsX3Zl
Y3Rvcl9jb21wbGV4X2Zsb2F0X2ZwcmludGYgKGYsIHYsICIlZyIpOwoKICAgIGZjbG9zZSAoZik7
CiAgfQoKICB7CiAgICBGSUxFICpmID0gZm9wZW4gKCJ0ZXN0LnR4dCIsICJyIik7CgogICAgZ3Ns
X3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2ZzY2FuZiAoZiwgdyk7CgogICAgc3RhdHVzID0gMDsKICAg
IGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBpZiAody0+ZGF0YVsy
ICogaV0gIT0gKGZsb2F0KSBpIHx8IHctPmRhdGFbMiAqIGkgKyAxXSAhPSAoZmxvYXQpIChpICsg
MSkpCiAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICB9OwogICAgZmNsb3NlIChmKTsKICB9Cgog
IGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdF9mcmVlICh2KTsKICBnc2xfdmVjdG9yX2NvbXBsZXhf
ZmxvYXRfZnJlZSAodyk7CgogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2NvbXBsZXhf
ZmxvYXQiICJfZnByaW50ZiBhbmQgZnNjYW5mIHdvcmsgY29ycmVjdGx5Iik7Cn0KIyA2MyAidGVz
dC5jIiAyCiMgMSAidGVtcGxhdGVzX29mZi5oIiAxCiMgNjQgInRlc3QuYyIgMgoKCgojIDEgInRl
bXBsYXRlc19vbi5oIiAxCiMgNjggInRlc3QuYyIgMgojIDEgInRlc3Rfc291cmNlLmMiIDEKIyAy
MCAidGVzdF9zb3VyY2UuYyIKdm9pZCB0ZXN0X2xvbmdfZG91YmxlX2Z1bmMgKHZvaWQpOwp2b2lk
IHRlc3RfbG9uZ19kb3VibGVfYmluYXJ5ICh2b2lkKTsKdm9pZCB0ZXN0X2xvbmdfZG91YmxlX3Ry
YXAgKHZvaWQpOwoKdm9pZAp0ZXN0X2xvbmdfZG91YmxlX2Z1bmMgKHZvaWQpCnsKICBnc2xfdmVj
dG9yX2xvbmdfZG91YmxlICogdjsKICBzaXplX3QgaTsKCiAgdiA9IGdzbF92ZWN0b3JfbG9uZ19k
b3VibGVfY2FsbG9jICgxMDI3KTsKCiAgZ3NsX3Rlc3QgKHYtPmRhdGEgPT0gMCwgImdzbF92ZWN0
b3JfbG9uZ19kb3VibGUiICJfYWxsb2MgcmV0dXJucyB2YWxpZCBwb2ludGVyIik7CiAgZ3NsX3Rl
c3QgKHYtPnNpemUgIT0gMTAyNywgImdzbF92ZWN0b3JfbG9uZ19kb3VibGUiICJfYWxsb2MgcmV0
dXJucyB2YWxpZCBzaXplIik7CiAgZ3NsX3Rlc3QgKHYtPnN0cmlkZSAhPSAxLCAiZ3NsX3ZlY3Rv
cl9sb25nX2RvdWJsZSIgIl9hbGxvYyByZXR1cm5zIHVuaXQgc3RyaWRlIik7CgogIGZvciAoaSA9
IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfc2V0
ICh2LCBpLCAobG9uZyBkb3VibGUpIGkpOwogICAgfQoKCiAgc3RhdHVzID0gMDsKCiAgZm9yIChp
ID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgaWYgKHYtPmRhdGFbaV0gIT0gKGxvbmcg
ZG91YmxlKSBpKQogICAgICAgIHN0YXR1cyA9IDE7CiAgICB9OwoKICBnc2xfdGVzdCAoc3RhdHVz
LAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSIgIl9zZXQiICIiICIgd3JpdGVz
IGludG8gYXJyYXkgY29ycmVjdGx5Iik7CgoKICBzdGF0dXMgPSAwOwogIGZvciAoaSA9IDA7IGkg
PCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGlmIChnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2dldCAo
diwgaSkgIT0gKGxvbmcgZG91YmxlKSBpKQogICAgICAgIHN0YXR1cyA9IDE7CiAgICB9OwogIGdz
bF90ZXN0IChzdGF0dXMsCiAgICAgICAgICAgICJnc2xfdmVjdG9yX2xvbmdfZG91YmxlIiAiX2dl
dCIgIiIgIiByZWFkcyBmcm9tIGFycmF5IGNvcnJlY3RseSIpOwoKCgoKICB2LT5zdHJpZGUgPSAy
OwoKICBzdGF0dXMgPSAwOwogIGZvciAoaSA9IDA7IGkgPCAxMDI3IC8gMjsgaSsrKQogICAgewog
ICAgICBpZiAoZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9nZXQgKHYsIGkpICE9IChsb25nIGRvdWJs
ZSkgKDIgKiBpKSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKICBnc2xfdGVzdCAoc3RhdHVz
LCAiZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSIgIl9nZXQiICIiICIgcmVhZHMgY29ycmVjdGx5IHdp
dGggc3RyaWRlIik7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3IC8gMjsgaSsrKQogICAgewogICAg
ICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX3NldCAodiwgaSwgKGxvbmcgZG91YmxlKSAoaSArIDEw
MDApKTsKICAgIH07CgogIHN0YXR1cyA9IDA7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3IC8gMjsg
aSsrKQogICAgewogICAgICBpZiAodi0+ZGF0YVsyICogaV0gIT0gKGxvbmcgZG91YmxlKSAoaSAr
IDEwMDApKQogICAgICAgIHN0YXR1cyA9IDE7CiAgICB9OwoKICBnc2xfdGVzdCAoc3RhdHVzLCAi
Z3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSIgIl9zZXQiICIiICIgd3JpdGVzIGNvcnJlY3RseSB3aXRo
IHN0cmlkZSIpOwoKCgogIHYtPnN0cmlkZSA9IDEgOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsg
aSsrKQogICAgewogICAgICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX3NldCAodiwgaSwgKGxvbmcg
ZG91YmxlKSBpKTsKICAgIH0KCiAgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9zd2FwX2VsZW1lbnRz
ICh2LCAyLCA1KSA7CgogIHN0YXR1cyA9IChnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2dldCh2LDIp
ICE9IDUpIDsKICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZ2V0KHYsNSkgIT0g
MikgOwoKICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX3N3YXBfZWxlbWVudHMgKHYsIDIsIDUpIDsK
CiAgc3RhdHVzIHw9IChnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2dldCh2LDIpICE9IDIpIDsKICBz
dGF0dXMgfD0gKGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZ2V0KHYsNSkgIT0gNSkgOwoKICBnc2xf
dGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSIgIl9zd2FwX2VsZW1lbnRzIiAi
IiAiIGV4Y2hhbmdlcyBlbGVtZW50cyBjb3JyZWN0bHkiKSA7CgogIHN0YXR1cyA9IDA7CgogIGdz
bF92ZWN0b3JfbG9uZ19kb3VibGVfcmV2ZXJzZSAodikgOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAy
NzsgaSsrKQogICAgewogICAgICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZ2V0
ICh2LCBpKSAhPSAobG9uZyBkb3VibGUpICgxMDI3IC0gaSAtIDEpKTsKICAgIH0KCiAgZ3NsX3Rl
c3QgKHN0YXR1cywgImdzbF92ZWN0b3JfbG9uZ19kb3VibGUiICJfcmV2ZXJzZSIgIiIgIiByZXZl
cnNlcyBlbGVtZW50cyBjb3JyZWN0bHkiKSA7CgogIHsKICAgIGxvbmcgZG91YmxlIGV4cF9tYXgg
PSBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2dldCh2LCAwKTsKICAgIGxvbmcgZG91YmxlIGV4cF9t
aW4gPSBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2dldCh2LCAwKTsKICAgIHNpemVfdCBleHBfaW1h
eCA9IDAsIGV4cF9pbWluID0gMDsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAg
ICB7CiAgICAgICAgbG9uZyBkb3VibGUgayA9IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZ2V0ICh2
LCBpKSA7CiAgICAgICAgaWYgKGsgPCBleHBfbWluKSB7CiAgICAgICAgICBleHBfbWluID0gZ3Ns
X3ZlY3Rvcl9sb25nX2RvdWJsZV9nZXQgKHYsIGkpOwogICAgICAgICAgZXhwX2ltaW4gPSBpOwog
ICAgICAgIH0KICAgICAgfQoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsK
ICAgICAgICBsb25nIGRvdWJsZSBrID0gZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9nZXQgKHYsIGkp
IDsKICAgICAgICBpZiAoayA+IGV4cF9tYXgpIHsKICAgICAgICAgIGV4cF9tYXggPSBnc2xfdmVj
dG9yX2xvbmdfZG91YmxlX2dldCAodiwgaSkgOwogICAgICAgICAgZXhwX2ltYXggPSBpOwogICAg
ICAgIH0KICAgICAgfQoKICAgIHsKICAgICAgbG9uZyBkb3VibGUgbWF4ID0gZ3NsX3ZlY3Rvcl9s
b25nX2RvdWJsZV9tYXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChtYXggIT0gZXhwX21heCwgImdz
bF92ZWN0b3JfbG9uZ19kb3VibGUiICJfbWF4IHJldHVybnMgY29ycmVjdCBtYXhpbXVtIHZhbHVl
Iik7CiAgICB9CgogICAgewogICAgICBsb25nIGRvdWJsZSBtaW4gPSBnc2xfdmVjdG9yX2xvbmdf
ZG91YmxlX21pbiAodikgOwoKICAgICAgZ3NsX3Rlc3QgKG1pbiAhPSBleHBfbWluLCAiZ3NsX3Zl
Y3Rvcl9sb25nX2RvdWJsZSIgIl9taW4gcmV0dXJucyBjb3JyZWN0IG1pbmltdW0gdmFsdWUiKTsK
ICAgIH0KCiAgICB7CiAgICAgIGxvbmcgZG91YmxlIG1pbiwgbWF4OwogICAgICBnc2xfdmVjdG9y
X2xvbmdfZG91YmxlX21pbm1heCAodiwgJm1pbiwgJm1heCk7CgogICAgICBnc2xfdGVzdCAobWF4
ICE9IGV4cF9tYXgsICJnc2xfdmVjdG9yX2xvbmdfZG91YmxlIiAiX21pbm1heCByZXR1cm5zIGNv
cnJlY3QgbWF4aW11bSB2YWx1ZSIpOwogICAgICBnc2xfdGVzdCAobWluICE9IGV4cF9taW4sICJn
c2xfdmVjdG9yX2xvbmdfZG91YmxlIiAiX21pbm1heCByZXR1cm5zIGNvcnJlY3QgbWluaW11bSB2
YWx1ZSIpOwogICAgfQoKCiAgICB7CiAgICAgIHNpemVfdCBpbWF4ID0gZ3NsX3ZlY3Rvcl9sb25n
X2RvdWJsZV9tYXhfaW5kZXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChpbWF4ICE9IGV4cF9pbWF4
LCAiZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSIgIl9tYXhfaW5kZXggcmV0dXJucyBjb3JyZWN0IG1h
eGltdW0gaSIpOwogICAgfQoKICAgIHsKICAgICAgc2l6ZV90IGltaW4gPSBnc2xfdmVjdG9yX2xv
bmdfZG91YmxlX21pbl9pbmRleCAodikgOwoKICAgICAgZ3NsX3Rlc3QgKGltaW4gIT0gZXhwX2lt
aW4sICJnc2xfdmVjdG9yX2xvbmdfZG91YmxlIiAiX21pbl9pbmRleCByZXR1cm5zIGNvcnJlY3Qg
bWluaW11bSBpIik7CiAgICB9CgogICAgewogICAgICBzaXplX3QgaW1pbiwgaW1heDsKCiAgICAg
IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfbWlubWF4X2luZGV4ICh2LCAmaW1pbiwgJmltYXgpOwoK
ICAgICAgZ3NsX3Rlc3QgKGltYXggIT0gZXhwX2ltYXgsICJnc2xfdmVjdG9yX2xvbmdfZG91Ymxl
IiAiX21pbm1heF9pbmRleCByZXR1cm5zIGNvcnJlY3QgbWF4aW11bSBpIik7CiAgICAgIGdzbF90
ZXN0IChpbWluICE9IGV4cF9pbWluLCAiZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSIgIl9taW5tYXhf
aW5kZXggcmV0dXJucyBjb3JyZWN0IG1pbmltdW0gaSIpOwogICAgfQogIH0KCgogIHsKICAgIGdz
bF92ZWN0b3JfbG9uZ19kb3VibGUgKiBhID0gZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9jYWxsb2Mg
KDEwMjcpOwogICAgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAqIGIgPSBnc2xfdmVjdG9yX2xvbmdf
ZG91YmxlX2NhbGxvYyAoMTAyNyk7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAg
ICAgewogICAgICAgIGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfc2V0IChhLCBpLCAobG9uZyBkb3Vi
bGUpKDMgKyBpKSk7CiAgICAgICAgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9zZXQgKGIsIGksIChs
b25nIGRvdWJsZSkoMyArIDIgKiBpKSk7CiAgICAgIH0KCiAgICBnc2xfdmVjdG9yX2xvbmdfZG91
YmxlX21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2FkZCAodiwgYik7
CgogICAgewogICAgICBpbnQgc3RhdHVzID0gMDsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3
OyBpKyspCiAgICAgICAgewogICAgICAgICAgbG9uZyBkb3VibGUgciA9IGdzbF92ZWN0b3JfbG9u
Z19kb3VibGVfZ2V0ICh2LGkpOwogICAgICAgICAgbG9uZyBkb3VibGUgeCA9IGdzbF92ZWN0b3Jf
bG9uZ19kb3VibGVfZ2V0IChhLGkpOwogICAgICAgICAgbG9uZyBkb3VibGUgeSA9IGdzbF92ZWN0
b3JfbG9uZ19kb3VibGVfZ2V0IChiLGkpOwogICAgICAgICAgbG9uZyBkb3VibGUgeiA9IHggKyB5
OwogICAgICAgICAgaWYgKHIgIT0geikKICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9
CiAgICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2xvbmdfZG91YmxlIiAiX2FkZCBh
ZGRzIGNvcnJlY3RseSIpOwogICAgfQoKCiAgICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX21lbWNw
eSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX3N1YiAodiwgYik7CgogICAgewog
ICAgICBpbnQgc3RhdHVzID0gMDsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAg
ICAgICAgewogICAgICAgICAgbG9uZyBkb3VibGUgciA9IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVf
Z2V0ICh2LGkpOwogICAgICAgICAgbG9uZyBkb3VibGUgeCA9IGdzbF92ZWN0b3JfbG9uZ19kb3Vi
bGVfZ2V0IChhLGkpOwogICAgICAgICAgbG9uZyBkb3VibGUgeSA9IGdzbF92ZWN0b3JfbG9uZ19k
b3VibGVfZ2V0IChiLGkpOwogICAgICAgICAgbG9uZyBkb3VibGUgeiA9IHggLSB5OwogICAgICAg
ICAgaWYgKHIgIT0geikKICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAgIGdz
bF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2xvbmdfZG91YmxlIiAiX3N1YiBzdWJ0cmFjdHMg
Y29ycmVjdGx5Iik7CiAgICB9CgogICAgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9tZW1jcHkgKHYs
IGEpOwogICAgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9tdWwgKHYsIGIpOwoKICAgIHsKICAgICAg
aW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAg
IHsKICAgICAgICAgIGxvbmcgZG91YmxlIHIgPSBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2dldCAo
dixpKTsKICAgICAgICAgIGxvbmcgZG91YmxlIHggPSBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2dl
dCAoYSxpKTsKICAgICAgICAgIGxvbmcgZG91YmxlIHkgPSBnc2xfdmVjdG9yX2xvbmdfZG91Ymxl
X2dldCAoYixpKTsKICAgICAgICAgIGxvbmcgZG91YmxlIHogPSB4ICogeTsKICAgICAgICAgIGlm
IChyICE9IHopCiAgICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVz
dCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSIgIl9tdWwgbXVsdGlwbGllcyBjb3Jy
ZWN0bHkiKTsKICAgIH0KCiAgICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX21lbWNweSAodiwgYSk7
CiAgICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2RpdiAodiwgYik7CgogICAgewogICAgICBpbnQg
c3RhdHVzID0gMDsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgICAgewog
ICAgICAgICAgbG9uZyBkb3VibGUgciA9IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZ2V0ICh2LGkp
OwogICAgICAgICAgbG9uZyBkb3VibGUgeCA9IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZ2V0IChh
LGkpOwogICAgICAgICAgbG9uZyBkb3VibGUgeSA9IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZ2V0
IChiLGkpOwogICAgICAgICAgbG9uZyBkb3VibGUgeiA9IHggLyB5OwogICAgICAgICAgaWYgKGZh
YnMociAtIHopID4gMiAqIDEuMTkyMDkyODk1NTA3ODEyNWUtMDcgKiBmYWJzKHopKQogICAgICAg
ICAgICBzdGF0dXMgPSAxOwogICAgICAgIH0KICAgICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92
ZWN0b3JfbG9uZ19kb3VibGUiICJfZGl2IGRpdmlkZXMgY29ycmVjdGx5Iik7CiAgICB9CgoKICAg
IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZnJlZSAoYSk7CiAgICBnc2xfdmVjdG9yX2xvbmdfZG91
YmxlX2ZyZWUgKGIpOwogIH0KCgoKCiAgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9mcmVlICh2KTsK
fQoKCnZvaWQKdGVzdF9sb25nX2RvdWJsZV9iaW5hcnkgKHZvaWQpCnsKICBnc2xfdmVjdG9yX2xv
bmdfZG91YmxlICogdiA9IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfY2FsbG9jICgxMDI3KTsKICBn
c2xfdmVjdG9yX2xvbmdfZG91YmxlICogdyA9IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfY2FsbG9j
ICgxMDI3KTsKCiAgc2l6ZV90IGk7CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3QuZGF0
IiwgIndiIik7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAg
IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfc2V0ICh2LCBpLCAobG9uZyBkb3VibGUpICgxMDI3IC0g
aSkpOwogICAgICB9OwoKICAgIGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZndyaXRlIChmLCB2KTsK
CiAgICBmY2xvc2UgKGYpOwogIH0KCiAgewogICAgRklMRSAqZiA9IGZvcGVuICgidGVzdC5kYXQi
LCAicmIiKTsKCiAgICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2ZyZWFkIChmLCB3KTsKCiAgICBz
dGF0dXMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAg
IGlmICh3LT5kYXRhW2ldICE9IChsb25nIGRvdWJsZSkgKDEwMjcgLSBpKSkKICAgICAgICAgIHN0
YXR1cyA9IDE7CiAgICAgIH07CgogICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfbG9u
Z19kb3VibGUiICJfd3JpdGUgYW5kIHJlYWQgd29yayBjb3JyZWN0bHkiKTsKCiAgICBmY2xvc2Ug
KGYpOwogIH0KCiAgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9mcmVlICh2KTsKICBnc2xfdmVjdG9y
X2xvbmdfZG91YmxlX2ZyZWUgKHcpOwp9Cgp2b2lkCnRlc3RfbG9uZ19kb3VibGVfdHJhcCAodm9p
ZCkKewogIGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiB2ID0gZ3NsX3ZlY3Rvcl9sb25nX2RvdWJs
ZV9hbGxvYyAoMTAyNyk7CgogIHNpemVfdCBqID0gMDsKICBkb3VibGUgeDsKCiAgc3RhdHVzID0g
MDsKICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX3NldCAodiwgaiAtIDEsIChsb25nIGRvdWJsZSkw
KTsKICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3JfbG9uZ19kb3VibGUiICJfc2V0IHRy
YXBzIGluZGV4IGJlbG93IGxvd2VyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rv
cl9sb25nX2RvdWJsZV9zZXQgKHYsIDEwMjcgKyAxLCAobG9uZyBkb3VibGUpMCk7CiAgZ3NsX3Rl
c3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2xvbmdfZG91YmxlIiAiX3NldCB0cmFwcyBpbmRleCBh
Ym92ZSB1cHBlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIGdzbF92ZWN0b3JfbG9uZ19kb3Vi
bGVfc2V0ICh2LCAxMDI3LCAobG9uZyBkb3VibGUpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJn
c2xfdmVjdG9yX2xvbmdfZG91YmxlIiAiX3NldCB0cmFwcyBpbmRleCBhdCB1cHBlciBib3VuZCIp
OwoKICBzdGF0dXMgPSAwOwogIHggPSBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2dldCAodiwgaiAt
IDEpOwogIGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSIgIl9nZXQg
dHJhcHMgaW5kZXggYmVsb3cgbG93ZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoeCAhPSAwLAogICAg
ICAgICAiZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSIgIl9nZXQgcmV0dXJucyB6ZXJvIGZvciBpbmRl
eCBiZWxvdyBsb3dlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIHggPSBnc2xfdmVjdG9yX2xv
bmdfZG91YmxlX2dldCAodiwgMTAyNyArIDEpOwogIGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3Zl
Y3Rvcl9sb25nX2RvdWJsZSIgIl9nZXQgdHJhcHMgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsK
ICBnc2xfdGVzdCAoeCAhPSAwLAogICAgICAgICAiZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSIgIl9n
ZXQgcmV0dXJucyB6ZXJvIGZvciBpbmRleCBhYm92ZSB1cHBlciBib3VuZCIpOwoKICBzdGF0dXMg
PSAwOwogIHggPSBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2dldCAodiwgMTAyNyk7CiAgZ3NsX3Rl
c3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2xvbmdfZG91YmxlIiAiX2dldCB0cmFwcyBpbmRleCBh
dCB1cHBlciBib3VuZCIpOwogIGdzbF90ZXN0ICh4ICE9IDAsCiAgICAgICAgICAgICJnc2xfdmVj
dG9yX2xvbmdfZG91YmxlIiAiX2dldCByZXR1cm5zIHplcm8gZm9yIGluZGV4IGF0IHVwcGVyIGJv
dW5kIik7CgogIGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZnJlZSAodik7Cn0KIyA2OSAidGVzdC5j
IiAyCgojIDEgInRlc3RfaW8uYyIgMQojIDIwICJ0ZXN0X2lvLmMiCnZvaWQgdGVzdF9sb25nX2Rv
dWJsZV90ZXh0ICh2b2lkKTsKCnZvaWQKdGVzdF9sb25nX2RvdWJsZV90ZXh0ICh2b2lkKQp7CiAg
Z3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAqIHYgPSBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2FsbG9j
ICgxMDI3KTsKICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlICogdyA9IGdzbF92ZWN0b3JfbG9uZ19k
b3VibGVfYWxsb2MgKDEwMjcpOwoKICBzaXplX3QgaTsKCiAgewogICAgRklMRSAqZiA9IGZvcGVu
ICgidGVzdC50eHQiLCAidyIpOwoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAg
IHsKICAgICAgICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX3NldCAodiwgaSwgKGxvbmcgZG91Ymxl
KSBpKTsKICAgICAgfTsKCiAgICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2ZwcmludGYgKGYsIHYs
ICIlTGciKTsKCiAgICBmY2xvc2UgKGYpOwogIH0KCiAgewogICAgRklMRSAqZiA9IGZvcGVuICgi
dGVzdC50eHQiLCAiciIpOwoKICAgIGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZnNjYW5mIChmLCB3
KTsKCiAgICBzdGF0dXMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAg
ewogICAgICAgIGlmICh3LT5kYXRhW2ldICE9IChsb25nIGRvdWJsZSkgaSkKICAgICAgICAgIHN0
YXR1cyA9IDE7CiAgICAgIH07CgogICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfbG9u
Z19kb3VibGUiICJfZnByaW50ZiBhbmQgZnNjYW5mIHdvcmsgY29ycmVjdGx5Iik7CgogICAgZmNs
b3NlIChmKTsKICB9CgogIGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZnJlZSAodik7CiAgZ3NsX3Zl
Y3Rvcl9sb25nX2RvdWJsZV9mcmVlICh3KTsKfQojIDcxICJ0ZXN0LmMiIDIKCiMgMSAidGVtcGxh
dGVzX29mZi5oIiAxCiMgNzMgInRlc3QuYyIgMgoKCgojIDEgInRlbXBsYXRlc19vbi5oIiAxCiMg
NzcgInRlc3QuYyIgMgojIDEgInRlc3Rfc291cmNlLmMiIDEKIyAyMCAidGVzdF9zb3VyY2UuYyIK
dm9pZCB0ZXN0X2Z1bmMgKHZvaWQpOwp2b2lkIHRlc3RfYmluYXJ5ICh2b2lkKTsKdm9pZCB0ZXN0
X3RyYXAgKHZvaWQpOwoKdm9pZAp0ZXN0X2Z1bmMgKHZvaWQpCnsKICBnc2xfdmVjdG9yICogdjsK
ICBzaXplX3QgaTsKCiAgdiA9IGdzbF92ZWN0b3JfY2FsbG9jICgxMDI3KTsKCiAgZ3NsX3Rlc3Qg
KHYtPmRhdGEgPT0gMCwgImdzbF92ZWN0b3IiICJfYWxsb2MgcmV0dXJucyB2YWxpZCBwb2ludGVy
Iik7CiAgZ3NsX3Rlc3QgKHYtPnNpemUgIT0gMTAyNywgImdzbF92ZWN0b3IiICJfYWxsb2MgcmV0
dXJucyB2YWxpZCBzaXplIik7CiAgZ3NsX3Rlc3QgKHYtPnN0cmlkZSAhPSAxLCAiZ3NsX3ZlY3Rv
ciIgIl9hbGxvYyByZXR1cm5zIHVuaXQgc3RyaWRlIik7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3
OyBpKyspCiAgICB7CiAgICAgIGdzbF92ZWN0b3Jfc2V0ICh2LCBpLCAoZG91YmxlKSBpKTsKICAg
IH0KCgogIHN0YXR1cyA9IDA7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAg
ICAgIGlmICh2LT5kYXRhW2ldICE9IChkb3VibGUpIGkpCiAgICAgICAgc3RhdHVzID0gMTsKICAg
IH07CgogIGdzbF90ZXN0IChzdGF0dXMsCiAgICAgICAgICAgICJnc2xfdmVjdG9yIiAiX3NldCIg
IiIgIiB3cml0ZXMgaW50byBhcnJheSBjb3JyZWN0bHkiKTsKCgogIHN0YXR1cyA9IDA7CiAgZm9y
IChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgaWYgKGdzbF92ZWN0b3JfZ2V0ICh2
LCBpKSAhPSAoZG91YmxlKSBpKQogICAgICAgIHN0YXR1cyA9IDE7CiAgICB9OwogIGdzbF90ZXN0
IChzdGF0dXMsCiAgICAgICAgICAgICJnc2xfdmVjdG9yIiAiX2dldCIgIiIgIiByZWFkcyBmcm9t
IGFycmF5IGNvcnJlY3RseSIpOwoKCgoKICB2LT5zdHJpZGUgPSAyOwoKICBzdGF0dXMgPSAwOwog
IGZvciAoaSA9IDA7IGkgPCAxMDI3IC8gMjsgaSsrKQogICAgewogICAgICBpZiAoZ3NsX3ZlY3Rv
cl9nZXQgKHYsIGkpICE9IChkb3VibGUpICgyICogaSkpCiAgICAgICAgc3RhdHVzID0gMTsKICAg
IH07CiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3IiICJfZ2V0IiAiIiAiIHJlYWRzIGNv
cnJlY3RseSB3aXRoIHN0cmlkZSIpOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7IGkrKykK
ICAgIHsKICAgICAgZ3NsX3ZlY3Rvcl9zZXQgKHYsIGksIChkb3VibGUpIChpICsgMTAwMCkpOwog
ICAgfTsKCiAgc3RhdHVzID0gMDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjcgLyAyOyBpKyspCiAg
ICB7CiAgICAgIGlmICh2LT5kYXRhWzIgKiBpXSAhPSAoZG91YmxlKSAoaSArIDEwMDApKQogICAg
ICAgIHN0YXR1cyA9IDE7CiAgICB9OwoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3RvciIg
Il9zZXQiICIiICIgd3JpdGVzIGNvcnJlY3RseSB3aXRoIHN0cmlkZSIpOwoKCgogIHYtPnN0cmlk
ZSA9IDEgOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBnc2xfdmVj
dG9yX3NldCAodiwgaSwgKGRvdWJsZSkgaSk7CiAgICB9CgogIGdzbF92ZWN0b3Jfc3dhcF9lbGVt
ZW50cyAodiwgMiwgNSkgOwoKICBzdGF0dXMgPSAoZ3NsX3ZlY3Rvcl9nZXQodiwyKSAhPSA1KSA7
CiAgc3RhdHVzIHw9IChnc2xfdmVjdG9yX2dldCh2LDUpICE9IDIpIDsKCiAgZ3NsX3ZlY3Rvcl9z
d2FwX2VsZW1lbnRzICh2LCAyLCA1KSA7CgogIHN0YXR1cyB8PSAoZ3NsX3ZlY3Rvcl9nZXQodiwy
KSAhPSAyKSA7CiAgc3RhdHVzIHw9IChnc2xfdmVjdG9yX2dldCh2LDUpICE9IDUpIDsKCiAgZ3Ns
X3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3IiICJfc3dhcF9lbGVtZW50cyIgIiIgIiBleGNoYW5n
ZXMgZWxlbWVudHMgY29ycmVjdGx5IikgOwoKICBzdGF0dXMgPSAwOwoKICBnc2xfdmVjdG9yX3Jl
dmVyc2UgKHYpIDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgc3Rh
dHVzIHw9IChnc2xfdmVjdG9yX2dldCAodiwgaSkgIT0gKGRvdWJsZSkgKDEwMjcgLSBpIC0gMSkp
OwogICAgfQoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3RvciIgIl9yZXZlcnNlIiAiIiAi
IHJldmVyc2VzIGVsZW1lbnRzIGNvcnJlY3RseSIpIDsKCiAgewogICAgZG91YmxlIGV4cF9tYXgg
PSBnc2xfdmVjdG9yX2dldCh2LCAwKTsKICAgIGRvdWJsZSBleHBfbWluID0gZ3NsX3ZlY3Rvcl9n
ZXQodiwgMCk7CiAgICBzaXplX3QgZXhwX2ltYXggPSAwLCBleHBfaW1pbiA9IDA7CgogICAgZm9y
IChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGRvdWJsZSBrID0gZ3NsX3Zl
Y3Rvcl9nZXQgKHYsIGkpIDsKICAgICAgICBpZiAoayA8IGV4cF9taW4pIHsKICAgICAgICAgIGV4
cF9taW4gPSBnc2xfdmVjdG9yX2dldCAodiwgaSk7CiAgICAgICAgICBleHBfaW1pbiA9IGk7CiAg
ICAgICAgfQogICAgICB9CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewog
ICAgICAgIGRvdWJsZSBrID0gZ3NsX3ZlY3Rvcl9nZXQgKHYsIGkpIDsKICAgICAgICBpZiAoayA+
IGV4cF9tYXgpIHsKICAgICAgICAgIGV4cF9tYXggPSBnc2xfdmVjdG9yX2dldCAodiwgaSkgOwog
ICAgICAgICAgZXhwX2ltYXggPSBpOwogICAgICAgIH0KICAgICAgfQoKICAgIHsKICAgICAgZG91
YmxlIG1heCA9IGdzbF92ZWN0b3JfbWF4ICh2KSA7CgogICAgICBnc2xfdGVzdCAobWF4ICE9IGV4
cF9tYXgsICJnc2xfdmVjdG9yIiAiX21heCByZXR1cm5zIGNvcnJlY3QgbWF4aW11bSB2YWx1ZSIp
OwogICAgfQoKICAgIHsKICAgICAgZG91YmxlIG1pbiA9IGdzbF92ZWN0b3JfbWluICh2KSA7Cgog
ICAgICBnc2xfdGVzdCAobWluICE9IGV4cF9taW4sICJnc2xfdmVjdG9yIiAiX21pbiByZXR1cm5z
IGNvcnJlY3QgbWluaW11bSB2YWx1ZSIpOwogICAgfQoKICAgIHsKICAgICAgZG91YmxlIG1pbiwg
bWF4OwogICAgICBnc2xfdmVjdG9yX21pbm1heCAodiwgJm1pbiwgJm1heCk7CgogICAgICBnc2xf
dGVzdCAobWF4ICE9IGV4cF9tYXgsICJnc2xfdmVjdG9yIiAiX21pbm1heCByZXR1cm5zIGNvcnJl
Y3QgbWF4aW11bSB2YWx1ZSIpOwogICAgICBnc2xfdGVzdCAobWluICE9IGV4cF9taW4sICJnc2xf
dmVjdG9yIiAiX21pbm1heCByZXR1cm5zIGNvcnJlY3QgbWluaW11bSB2YWx1ZSIpOwogICAgfQoK
CiAgICB7CiAgICAgIHNpemVfdCBpbWF4ID0gZ3NsX3ZlY3Rvcl9tYXhfaW5kZXggKHYpIDsKCiAg
ICAgIGdzbF90ZXN0IChpbWF4ICE9IGV4cF9pbWF4LCAiZ3NsX3ZlY3RvciIgIl9tYXhfaW5kZXgg
cmV0dXJucyBjb3JyZWN0IG1heGltdW0gaSIpOwogICAgfQoKICAgIHsKICAgICAgc2l6ZV90IGlt
aW4gPSBnc2xfdmVjdG9yX21pbl9pbmRleCAodikgOwoKICAgICAgZ3NsX3Rlc3QgKGltaW4gIT0g
ZXhwX2ltaW4sICJnc2xfdmVjdG9yIiAiX21pbl9pbmRleCByZXR1cm5zIGNvcnJlY3QgbWluaW11
bSBpIik7CiAgICB9CgogICAgewogICAgICBzaXplX3QgaW1pbiwgaW1heDsKCiAgICAgIGdzbF92
ZWN0b3JfbWlubWF4X2luZGV4ICh2LCAmaW1pbiwgJmltYXgpOwoKICAgICAgZ3NsX3Rlc3QgKGlt
YXggIT0gZXhwX2ltYXgsICJnc2xfdmVjdG9yIiAiX21pbm1heF9pbmRleCByZXR1cm5zIGNvcnJl
Y3QgbWF4aW11bSBpIik7CiAgICAgIGdzbF90ZXN0IChpbWluICE9IGV4cF9pbWluLCAiZ3NsX3Zl
Y3RvciIgIl9taW5tYXhfaW5kZXggcmV0dXJucyBjb3JyZWN0IG1pbmltdW0gaSIpOwogICAgfQog
IH0KCgogIHsKICAgIGdzbF92ZWN0b3IgKiBhID0gZ3NsX3ZlY3Rvcl9jYWxsb2MgKDEwMjcpOwog
ICAgZ3NsX3ZlY3RvciAqIGIgPSBnc2xfdmVjdG9yX2NhbGxvYyAoMTAyNyk7CgogICAgZm9yIChp
ID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGdzbF92ZWN0b3Jfc2V0IChhLCBp
LCAoZG91YmxlKSgzICsgaSkpOwogICAgICAgIGdzbF92ZWN0b3Jfc2V0IChiLCBpLCAoZG91Ymxl
KSgzICsgMiAqIGkpKTsKICAgICAgfQoKICAgIGdzbF92ZWN0b3JfbWVtY3B5ICh2LCBhKTsKICAg
IGdzbF92ZWN0b3JfYWRkICh2LCBiKTsKCiAgICB7CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAg
ICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgICB7CiAgICAgICAgICBkb3VibGUg
ciA9IGdzbF92ZWN0b3JfZ2V0ICh2LGkpOwogICAgICAgICAgZG91YmxlIHggPSBnc2xfdmVjdG9y
X2dldCAoYSxpKTsKICAgICAgICAgIGRvdWJsZSB5ID0gZ3NsX3ZlY3Rvcl9nZXQgKGIsaSk7CiAg
ICAgICAgICBkb3VibGUgeiA9IHggKyB5OwogICAgICAgICAgaWYgKHIgIT0geikKICAgICAgICAg
ICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVj
dG9yIiAiX2FkZCBhZGRzIGNvcnJlY3RseSIpOwogICAgfQoKCiAgICBnc2xfdmVjdG9yX21lbWNw
eSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX3N1YiAodiwgYik7CgogICAgewogICAgICBpbnQgc3Rh
dHVzID0gMDsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgICAgewogICAg
ICAgICAgZG91YmxlIHIgPSBnc2xfdmVjdG9yX2dldCAodixpKTsKICAgICAgICAgIGRvdWJsZSB4
ID0gZ3NsX3ZlY3Rvcl9nZXQgKGEsaSk7CiAgICAgICAgICBkb3VibGUgeSA9IGdzbF92ZWN0b3Jf
Z2V0IChiLGkpOwogICAgICAgICAgZG91YmxlIHogPSB4IC0geTsKICAgICAgICAgIGlmIChyICE9
IHopCiAgICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVzdCAoc3Rh
dHVzLCAiZ3NsX3ZlY3RvciIgIl9zdWIgc3VidHJhY3RzIGNvcnJlY3RseSIpOwogICAgfQoKICAg
IGdzbF92ZWN0b3JfbWVtY3B5ICh2LCBhKTsKICAgIGdzbF92ZWN0b3JfbXVsICh2LCBiKTsKCiAg
ICB7CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkr
KykKICAgICAgICB7CiAgICAgICAgICBkb3VibGUgciA9IGdzbF92ZWN0b3JfZ2V0ICh2LGkpOwog
ICAgICAgICAgZG91YmxlIHggPSBnc2xfdmVjdG9yX2dldCAoYSxpKTsKICAgICAgICAgIGRvdWJs
ZSB5ID0gZ3NsX3ZlY3Rvcl9nZXQgKGIsaSk7CiAgICAgICAgICBkb3VibGUgeiA9IHggKiB5Owog
ICAgICAgICAgaWYgKHIgIT0geikKICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAg
ICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yIiAiX211bCBtdWx0aXBsaWVzIGNvcnJl
Y3RseSIpOwogICAgfQoKICAgIGdzbF92ZWN0b3JfbWVtY3B5ICh2LCBhKTsKICAgIGdzbF92ZWN0
b3JfZGl2ICh2LCBiKTsKCiAgICB7CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9yIChp
ID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgICB7CiAgICAgICAgICBkb3VibGUgciA9IGdzbF92
ZWN0b3JfZ2V0ICh2LGkpOwogICAgICAgICAgZG91YmxlIHggPSBnc2xfdmVjdG9yX2dldCAoYSxp
KTsKICAgICAgICAgIGRvdWJsZSB5ID0gZ3NsX3ZlY3Rvcl9nZXQgKGIsaSk7CiAgICAgICAgICBk
b3VibGUgeiA9IHggLyB5OwogICAgICAgICAgaWYgKGZhYnMociAtIHopID4gMiAqIDEuMTkyMDky
ODk1NTA3ODEyNWUtMDcgKiBmYWJzKHopKQogICAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICAg
IH0KICAgICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3IiICJfZGl2IGRpdmlkZXMgY29y
cmVjdGx5Iik7CiAgICB9CgoKICAgIGdzbF92ZWN0b3JfZnJlZSAoYSk7CiAgICBnc2xfdmVjdG9y
X2ZyZWUgKGIpOwogIH0KCgoKCiAgZ3NsX3ZlY3Rvcl9mcmVlICh2KTsKfQoKCnZvaWQKdGVzdF9i
aW5hcnkgKHZvaWQpCnsKICBnc2xfdmVjdG9yICogdiA9IGdzbF92ZWN0b3JfY2FsbG9jICgxMDI3
KTsKICBnc2xfdmVjdG9yICogdyA9IGdzbF92ZWN0b3JfY2FsbG9jICgxMDI3KTsKCiAgc2l6ZV90
IGk7CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3QuZGF0IiwgIndiIik7CgogICAgZm9y
IChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGdzbF92ZWN0b3Jfc2V0ICh2
LCBpLCAoZG91YmxlKSAoMTAyNyAtIGkpKTsKICAgICAgfTsKCiAgICBnc2xfdmVjdG9yX2Z3cml0
ZSAoZiwgdik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAo
InRlc3QuZGF0IiwgInJiIik7CgogICAgZ3NsX3ZlY3Rvcl9mcmVhZCAoZiwgdyk7CgogICAgc3Rh
dHVzID0gMDsKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBp
ZiAody0+ZGF0YVtpXSAhPSAoZG91YmxlKSAoMTAyNyAtIGkpKQogICAgICAgICAgc3RhdHVzID0g
MTsKICAgICAgfTsKCiAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3RvciIgIl93cml0ZSBh
bmQgcmVhZCB3b3JrIGNvcnJlY3RseSIpOwoKICAgIGZjbG9zZSAoZik7CiAgfQoKICBnc2xfdmVj
dG9yX2ZyZWUgKHYpOwogIGdzbF92ZWN0b3JfZnJlZSAodyk7Cn0KCnZvaWQKdGVzdF90cmFwICh2
b2lkKQp7CiAgZ3NsX3ZlY3RvciAqIHYgPSBnc2xfdmVjdG9yX2FsbG9jICgxMDI3KTsKCiAgc2l6
ZV90IGogPSAwOwogIGRvdWJsZSB4OwoKICBzdGF0dXMgPSAwOwogIGdzbF92ZWN0b3Jfc2V0ICh2
LCBqIC0gMSwgKGRvdWJsZSkwKTsKICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3IiICJf
c2V0IHRyYXBzIGluZGV4IGJlbG93IGxvd2VyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgZ3Ns
X3ZlY3Rvcl9zZXQgKHYsIDEwMjcgKyAxLCAoZG91YmxlKTApOwogIGdzbF90ZXN0ICghc3RhdHVz
LCAiZ3NsX3ZlY3RvciIgIl9zZXQgdHJhcHMgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKCiAg
c3RhdHVzID0gMDsKICBnc2xfdmVjdG9yX3NldCAodiwgMTAyNywgKGRvdWJsZSkwKTsKICBnc2xf
dGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3IiICJfc2V0IHRyYXBzIGluZGV4IGF0IHVwcGVyIGJv
dW5kIik7CgogIHN0YXR1cyA9IDA7CiAgeCA9IGdzbF92ZWN0b3JfZ2V0ICh2LCBqIC0gMSk7CiAg
Z3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yIiAiX2dldCB0cmFwcyBpbmRleCBiZWxvdyBs
b3dlciBib3VuZCIpOwogIGdzbF90ZXN0ICh4ICE9IDAsCiAgICAgICAgICJnc2xfdmVjdG9yIiAi
X2dldCByZXR1cm5zIHplcm8gZm9yIGluZGV4IGJlbG93IGxvd2VyIGJvdW5kIik7CgogIHN0YXR1
cyA9IDA7CiAgeCA9IGdzbF92ZWN0b3JfZ2V0ICh2LCAxMDI3ICsgMSk7CiAgZ3NsX3Rlc3QgKCFz
dGF0dXMsICJnc2xfdmVjdG9yIiAiX2dldCB0cmFwcyBpbmRleCBhYm92ZSB1cHBlciBib3VuZCIp
OwogIGdzbF90ZXN0ICh4ICE9IDAsCiAgICAgICAgICJnc2xfdmVjdG9yIiAiX2dldCByZXR1cm5z
IHplcm8gZm9yIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgeCA9
IGdzbF92ZWN0b3JfZ2V0ICh2LCAxMDI3KTsKICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0
b3IiICJfZ2V0IHRyYXBzIGluZGV4IGF0IHVwcGVyIGJvdW5kIik7CiAgZ3NsX3Rlc3QgKHggIT0g
MCwKICAgICAgICAgICAgImdzbF92ZWN0b3IiICJfZ2V0IHJldHVybnMgemVybyBmb3IgaW5kZXgg
YXQgdXBwZXIgYm91bmQiKTsKCiAgZ3NsX3ZlY3Rvcl9mcmVlICh2KTsKfQojIDc4ICJ0ZXN0LmMi
IDIKIyAxICJ0ZXN0X2lvLmMiIDEKIyAyMCAidGVzdF9pby5jIgp2b2lkIHRlc3RfdGV4dCAodm9p
ZCk7Cgp2b2lkCnRlc3RfdGV4dCAodm9pZCkKewogIGdzbF92ZWN0b3IgKiB2ID0gZ3NsX3ZlY3Rv
cl9hbGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3RvciAqIHcgPSBnc2xfdmVjdG9yX2FsbG9jICgxMDI3
KTsKCiAgc2l6ZV90IGk7CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3QudHh0IiwgInci
KTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgZ3NsX3Zl
Y3Rvcl9zZXQgKHYsIGksIChkb3VibGUpIGkpOwogICAgICB9OwoKICAgIGdzbF92ZWN0b3JfZnBy
aW50ZiAoZiwgdiwgIiVnIik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAgIEZJTEUgKmYg
PSBmb3BlbiAoInRlc3QudHh0IiwgInIiKTsKCiAgICBnc2xfdmVjdG9yX2ZzY2FuZiAoZiwgdyk7
CgogICAgc3RhdHVzID0gMDsKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsK
ICAgICAgICBpZiAody0+ZGF0YVtpXSAhPSAoZG91YmxlKSBpKQogICAgICAgICAgc3RhdHVzID0g
MTsKICAgICAgfTsKCiAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3RvciIgIl9mcHJpbnRm
IGFuZCBmc2NhbmYgd29yayBjb3JyZWN0bHkiKTsKCiAgICBmY2xvc2UgKGYpOwogIH0KCiAgZ3Ns
X3ZlY3Rvcl9mcmVlICh2KTsKICBnc2xfdmVjdG9yX2ZyZWUgKHcpOwp9CiMgNzkgInRlc3QuYyIg
MgojIDEgInRlbXBsYXRlc19vZmYuaCIgMQojIDgwICJ0ZXN0LmMiIDIKCgoKIyAxICJ0ZW1wbGF0
ZXNfb24uaCIgMQojIDg0ICJ0ZXN0LmMiIDIKIyAxICJ0ZXN0X3NvdXJjZS5jIiAxCiMgMjAgInRl
c3Rfc291cmNlLmMiCnZvaWQgdGVzdF9mbG9hdF9mdW5jICh2b2lkKTsKdm9pZCB0ZXN0X2Zsb2F0
X2JpbmFyeSAodm9pZCk7CnZvaWQgdGVzdF9mbG9hdF90cmFwICh2b2lkKTsKCnZvaWQKdGVzdF9m
bG9hdF9mdW5jICh2b2lkKQp7CiAgZ3NsX3ZlY3Rvcl9mbG9hdCAqIHY7CiAgc2l6ZV90IGk7Cgog
IHYgPSBnc2xfdmVjdG9yX2Zsb2F0X2NhbGxvYyAoMTAyNyk7CgogIGdzbF90ZXN0ICh2LT5kYXRh
ID09IDAsICJnc2xfdmVjdG9yX2Zsb2F0IiAiX2FsbG9jIHJldHVybnMgdmFsaWQgcG9pbnRlciIp
OwogIGdzbF90ZXN0ICh2LT5zaXplICE9IDEwMjcsICJnc2xfdmVjdG9yX2Zsb2F0IiAiX2FsbG9j
IHJldHVybnMgdmFsaWQgc2l6ZSIpOwogIGdzbF90ZXN0ICh2LT5zdHJpZGUgIT0gMSwgImdzbF92
ZWN0b3JfZmxvYXQiICJfYWxsb2MgcmV0dXJucyB1bml0IHN0cmlkZSIpOwoKICBmb3IgKGkgPSAw
OyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBnc2xfdmVjdG9yX2Zsb2F0X3NldCAodiwgaSwg
KGZsb2F0KSBpKTsKICAgIH0KCgogIHN0YXR1cyA9IDA7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3
OyBpKyspCiAgICB7CiAgICAgIGlmICh2LT5kYXRhW2ldICE9IChmbG9hdCkgaSkKICAgICAgICBz
dGF0dXMgPSAxOwogICAgfTsKCiAgZ3NsX3Rlc3QgKHN0YXR1cywKICAgICAgICAgICAgImdzbF92
ZWN0b3JfZmxvYXQiICJfc2V0IiAiIiAiIHdyaXRlcyBpbnRvIGFycmF5IGNvcnJlY3RseSIpOwoK
CiAgc3RhdHVzID0gMDsKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBp
ZiAoZ3NsX3ZlY3Rvcl9mbG9hdF9nZXQgKHYsIGkpICE9IChmbG9hdCkgaSkKICAgICAgICBzdGF0
dXMgPSAxOwogICAgfTsKICBnc2xfdGVzdCAoc3RhdHVzLAogICAgICAgICAgICAiZ3NsX3ZlY3Rv
cl9mbG9hdCIgIl9nZXQiICIiICIgcmVhZHMgZnJvbSBhcnJheSBjb3JyZWN0bHkiKTsKCgoKCiAg
di0+c3RyaWRlID0gMjsKCiAgc3RhdHVzID0gMDsKICBmb3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7
IGkrKykKICAgIHsKICAgICAgaWYgKGdzbF92ZWN0b3JfZmxvYXRfZ2V0ICh2LCBpKSAhPSAoZmxv
YXQpICgyICogaSkpCiAgICAgICAgc3RhdHVzID0gMTsKICAgIH07CiAgZ3NsX3Rlc3QgKHN0YXR1
cywgImdzbF92ZWN0b3JfZmxvYXQiICJfZ2V0IiAiIiAiIHJlYWRzIGNvcnJlY3RseSB3aXRoIHN0
cmlkZSIpOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7IGkrKykKICAgIHsKICAgICAgZ3Ns
X3ZlY3Rvcl9mbG9hdF9zZXQgKHYsIGksIChmbG9hdCkgKGkgKyAxMDAwKSk7CiAgICB9OwoKICBz
dGF0dXMgPSAwOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7IGkrKykKICAgIHsKICAgICAg
aWYgKHYtPmRhdGFbMiAqIGldICE9IChmbG9hdCkgKGkgKyAxMDAwKSkKICAgICAgICBzdGF0dXMg
PSAxOwogICAgfTsKCiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfZmxvYXQiICJfc2V0
IiAiIiAiIHdyaXRlcyBjb3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsKCgoKICB2LT5zdHJpZGUgPSAx
IDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgZ3NsX3ZlY3Rvcl9m
bG9hdF9zZXQgKHYsIGksIChmbG9hdCkgaSk7CiAgICB9CgogIGdzbF92ZWN0b3JfZmxvYXRfc3dh
cF9lbGVtZW50cyAodiwgMiwgNSkgOwoKICBzdGF0dXMgPSAoZ3NsX3ZlY3Rvcl9mbG9hdF9nZXQo
diwyKSAhPSA1KSA7CiAgc3RhdHVzIHw9IChnc2xfdmVjdG9yX2Zsb2F0X2dldCh2LDUpICE9IDIp
IDsKCiAgZ3NsX3ZlY3Rvcl9mbG9hdF9zd2FwX2VsZW1lbnRzICh2LCAyLCA1KSA7CgogIHN0YXR1
cyB8PSAoZ3NsX3ZlY3Rvcl9mbG9hdF9nZXQodiwyKSAhPSAyKSA7CiAgc3RhdHVzIHw9IChnc2xf
dmVjdG9yX2Zsb2F0X2dldCh2LDUpICE9IDUpIDsKCiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92
ZWN0b3JfZmxvYXQiICJfc3dhcF9lbGVtZW50cyIgIiIgIiBleGNoYW5nZXMgZWxlbWVudHMgY29y
cmVjdGx5IikgOwoKICBzdGF0dXMgPSAwOwoKICBnc2xfdmVjdG9yX2Zsb2F0X3JldmVyc2UgKHYp
IDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgc3RhdHVzIHw9IChn
c2xfdmVjdG9yX2Zsb2F0X2dldCAodiwgaSkgIT0gKGZsb2F0KSAoMTAyNyAtIGkgLSAxKSk7CiAg
ICB9CgogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2Zsb2F0IiAiX3JldmVyc2UiICIi
ICIgcmV2ZXJzZXMgZWxlbWVudHMgY29ycmVjdGx5IikgOwoKICB7CiAgICBmbG9hdCBleHBfbWF4
ID0gZ3NsX3ZlY3Rvcl9mbG9hdF9nZXQodiwgMCk7CiAgICBmbG9hdCBleHBfbWluID0gZ3NsX3Zl
Y3Rvcl9mbG9hdF9nZXQodiwgMCk7CiAgICBzaXplX3QgZXhwX2ltYXggPSAwLCBleHBfaW1pbiA9
IDA7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGZsb2F0
IGsgPSBnc2xfdmVjdG9yX2Zsb2F0X2dldCAodiwgaSkgOwogICAgICAgIGlmIChrIDwgZXhwX21p
bikgewogICAgICAgICAgZXhwX21pbiA9IGdzbF92ZWN0b3JfZmxvYXRfZ2V0ICh2LCBpKTsKICAg
ICAgICAgIGV4cF9pbWluID0gaTsKICAgICAgICB9CiAgICAgIH0KCiAgICBmb3IgKGkgPSAwOyBp
IDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgZmxvYXQgayA9IGdzbF92ZWN0b3JfZmxvYXRf
Z2V0ICh2LCBpKSA7CiAgICAgICAgaWYgKGsgPiBleHBfbWF4KSB7CiAgICAgICAgICBleHBfbWF4
ID0gZ3NsX3ZlY3Rvcl9mbG9hdF9nZXQgKHYsIGkpIDsKICAgICAgICAgIGV4cF9pbWF4ID0gaTsK
ICAgICAgICB9CiAgICAgIH0KCiAgICB7CiAgICAgIGZsb2F0IG1heCA9IGdzbF92ZWN0b3JfZmxv
YXRfbWF4ICh2KSA7CgogICAgICBnc2xfdGVzdCAobWF4ICE9IGV4cF9tYXgsICJnc2xfdmVjdG9y
X2Zsb2F0IiAiX21heCByZXR1cm5zIGNvcnJlY3QgbWF4aW11bSB2YWx1ZSIpOwogICAgfQoKICAg
IHsKICAgICAgZmxvYXQgbWluID0gZ3NsX3ZlY3Rvcl9mbG9hdF9taW4gKHYpIDsKCiAgICAgIGdz
bF90ZXN0IChtaW4gIT0gZXhwX21pbiwgImdzbF92ZWN0b3JfZmxvYXQiICJfbWluIHJldHVybnMg
Y29ycmVjdCBtaW5pbXVtIHZhbHVlIik7CiAgICB9CgogICAgewogICAgICBmbG9hdCBtaW4sIG1h
eDsKICAgICAgZ3NsX3ZlY3Rvcl9mbG9hdF9taW5tYXggKHYsICZtaW4sICZtYXgpOwoKICAgICAg
Z3NsX3Rlc3QgKG1heCAhPSBleHBfbWF4LCAiZ3NsX3ZlY3Rvcl9mbG9hdCIgIl9taW5tYXggcmV0
dXJucyBjb3JyZWN0IG1heGltdW0gdmFsdWUiKTsKICAgICAgZ3NsX3Rlc3QgKG1pbiAhPSBleHBf
bWluLCAiZ3NsX3ZlY3Rvcl9mbG9hdCIgIl9taW5tYXggcmV0dXJucyBjb3JyZWN0IG1pbmltdW0g
dmFsdWUiKTsKICAgIH0KCgogICAgewogICAgICBzaXplX3QgaW1heCA9IGdzbF92ZWN0b3JfZmxv
YXRfbWF4X2luZGV4ICh2KSA7CgogICAgICBnc2xfdGVzdCAoaW1heCAhPSBleHBfaW1heCwgImdz
bF92ZWN0b3JfZmxvYXQiICJfbWF4X2luZGV4IHJldHVybnMgY29ycmVjdCBtYXhpbXVtIGkiKTsK
ICAgIH0KCiAgICB7CiAgICAgIHNpemVfdCBpbWluID0gZ3NsX3ZlY3Rvcl9mbG9hdF9taW5faW5k
ZXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChpbWluICE9IGV4cF9pbWluLCAiZ3NsX3ZlY3Rvcl9m
bG9hdCIgIl9taW5faW5kZXggcmV0dXJucyBjb3JyZWN0IG1pbmltdW0gaSIpOwogICAgfQoKICAg
IHsKICAgICAgc2l6ZV90IGltaW4sIGltYXg7CgogICAgICBnc2xfdmVjdG9yX2Zsb2F0X21pbm1h
eF9pbmRleCAodiwgJmltaW4sICZpbWF4KTsKCiAgICAgIGdzbF90ZXN0IChpbWF4ICE9IGV4cF9p
bWF4LCAiZ3NsX3ZlY3Rvcl9mbG9hdCIgIl9taW5tYXhfaW5kZXggcmV0dXJucyBjb3JyZWN0IG1h
eGltdW0gaSIpOwogICAgICBnc2xfdGVzdCAoaW1pbiAhPSBleHBfaW1pbiwgImdzbF92ZWN0b3Jf
ZmxvYXQiICJfbWlubWF4X2luZGV4IHJldHVybnMgY29ycmVjdCBtaW5pbXVtIGkiKTsKICAgIH0K
ICB9CgoKICB7CiAgICBnc2xfdmVjdG9yX2Zsb2F0ICogYSA9IGdzbF92ZWN0b3JfZmxvYXRfY2Fs
bG9jICgxMDI3KTsKICAgIGdzbF92ZWN0b3JfZmxvYXQgKiBiID0gZ3NsX3ZlY3Rvcl9mbG9hdF9j
YWxsb2MgKDEwMjcpOwoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAg
ICAgICBnc2xfdmVjdG9yX2Zsb2F0X3NldCAoYSwgaSwgKGZsb2F0KSgzICsgaSkpOwogICAgICAg
IGdzbF92ZWN0b3JfZmxvYXRfc2V0IChiLCBpLCAoZmxvYXQpKDMgKyAyICogaSkpOwogICAgICB9
CgogICAgZ3NsX3ZlY3Rvcl9mbG9hdF9tZW1jcHkgKHYsIGEpOwogICAgZ3NsX3ZlY3Rvcl9mbG9h
dF9hZGQgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkg
PSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIGZsb2F0IHIgPSBnc2xfdmVj
dG9yX2Zsb2F0X2dldCAodixpKTsKICAgICAgICAgIGZsb2F0IHggPSBnc2xfdmVjdG9yX2Zsb2F0
X2dldCAoYSxpKTsKICAgICAgICAgIGZsb2F0IHkgPSBnc2xfdmVjdG9yX2Zsb2F0X2dldCAoYixp
KTsKICAgICAgICAgIGZsb2F0IHogPSB4ICsgeTsKICAgICAgICAgIGlmIChyICE9IHopCiAgICAg
ICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3Ns
X3ZlY3Rvcl9mbG9hdCIgIl9hZGQgYWRkcyBjb3JyZWN0bHkiKTsKICAgIH0KCgogICAgZ3NsX3Zl
Y3Rvcl9mbG9hdF9tZW1jcHkgKHYsIGEpOwogICAgZ3NsX3ZlY3Rvcl9mbG9hdF9zdWIgKHYsIGIp
OwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAy
NzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIGZsb2F0IHIgPSBnc2xfdmVjdG9yX2Zsb2F0X2dl
dCAodixpKTsKICAgICAgICAgIGZsb2F0IHggPSBnc2xfdmVjdG9yX2Zsb2F0X2dldCAoYSxpKTsK
ICAgICAgICAgIGZsb2F0IHkgPSBnc2xfdmVjdG9yX2Zsb2F0X2dldCAoYixpKTsKICAgICAgICAg
IGZsb2F0IHogPSB4IC0geTsKICAgICAgICAgIGlmIChyICE9IHopCiAgICAgICAgICAgIHN0YXR1
cyA9IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9mbG9h
dCIgIl9zdWIgc3VidHJhY3RzIGNvcnJlY3RseSIpOwogICAgfQoKICAgIGdzbF92ZWN0b3JfZmxv
YXRfbWVtY3B5ICh2LCBhKTsKICAgIGdzbF92ZWN0b3JfZmxvYXRfbXVsICh2LCBiKTsKCiAgICB7
CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykK
ICAgICAgICB7CiAgICAgICAgICBmbG9hdCByID0gZ3NsX3ZlY3Rvcl9mbG9hdF9nZXQgKHYsaSk7
CiAgICAgICAgICBmbG9hdCB4ID0gZ3NsX3ZlY3Rvcl9mbG9hdF9nZXQgKGEsaSk7CiAgICAgICAg
ICBmbG9hdCB5ID0gZ3NsX3ZlY3Rvcl9mbG9hdF9nZXQgKGIsaSk7CiAgICAgICAgICBmbG9hdCB6
ID0geCAqIHk7CiAgICAgICAgICBpZiAociAhPSB6KQogICAgICAgICAgICBzdGF0dXMgPSAxOwog
ICAgICAgIH0KICAgICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfZmxvYXQiICJfbXVs
IG11bHRpcGxpZXMgY29ycmVjdGx5Iik7CiAgICB9CgogICAgZ3NsX3ZlY3Rvcl9mbG9hdF9tZW1j
cHkgKHYsIGEpOwogICAgZ3NsX3ZlY3Rvcl9mbG9hdF9kaXYgKHYsIGIpOwoKICAgIHsKICAgICAg
aW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAg
IHsKICAgICAgICAgIGZsb2F0IHIgPSBnc2xfdmVjdG9yX2Zsb2F0X2dldCAodixpKTsKICAgICAg
ICAgIGZsb2F0IHggPSBnc2xfdmVjdG9yX2Zsb2F0X2dldCAoYSxpKTsKICAgICAgICAgIGZsb2F0
IHkgPSBnc2xfdmVjdG9yX2Zsb2F0X2dldCAoYixpKTsKICAgICAgICAgIGZsb2F0IHogPSB4IC8g
eTsKICAgICAgICAgIGlmIChmYWJzKHIgLSB6KSA+IDIgKiAxLjE5MjA5Mjg5NTUwNzgxMjVlLTA3
ICogZmFicyh6KSkKICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAgIGdzbF90
ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2Zsb2F0IiAiX2RpdiBkaXZpZGVzIGNvcnJlY3RseSIp
OwogICAgfQoKCiAgICBnc2xfdmVjdG9yX2Zsb2F0X2ZyZWUgKGEpOwogICAgZ3NsX3ZlY3Rvcl9m
bG9hdF9mcmVlIChiKTsKICB9CgoKCgogIGdzbF92ZWN0b3JfZmxvYXRfZnJlZSAodik7Cn0KCgp2
b2lkCnRlc3RfZmxvYXRfYmluYXJ5ICh2b2lkKQp7CiAgZ3NsX3ZlY3Rvcl9mbG9hdCAqIHYgPSBn
c2xfdmVjdG9yX2Zsb2F0X2NhbGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3Rvcl9mbG9hdCAqIHcgPSBn
c2xfdmVjdG9yX2Zsb2F0X2NhbGxvYyAoMTAyNyk7CgogIHNpemVfdCBpOwoKICB7CiAgICBGSUxF
ICpmID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJ3YiIpOwoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3
OyBpKyspCiAgICAgIHsKICAgICAgICBnc2xfdmVjdG9yX2Zsb2F0X3NldCAodiwgaSwgKGZsb2F0
KSAoMTAyNyAtIGkpKTsKICAgICAgfTsKCiAgICBnc2xfdmVjdG9yX2Zsb2F0X2Z3cml0ZSAoZiwg
dik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3Qu
ZGF0IiwgInJiIik7CgogICAgZ3NsX3ZlY3Rvcl9mbG9hdF9mcmVhZCAoZiwgdyk7CgogICAgc3Rh
dHVzID0gMDsKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBp
ZiAody0+ZGF0YVtpXSAhPSAoZmxvYXQpICgxMDI3IC0gaSkpCiAgICAgICAgICBzdGF0dXMgPSAx
OwogICAgICB9OwoKICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2Zsb2F0IiAiX3dy
aXRlIGFuZCByZWFkIHdvcmsgY29ycmVjdGx5Iik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIGdz
bF92ZWN0b3JfZmxvYXRfZnJlZSAodik7CiAgZ3NsX3ZlY3Rvcl9mbG9hdF9mcmVlICh3KTsKfQoK
dm9pZAp0ZXN0X2Zsb2F0X3RyYXAgKHZvaWQpCnsKICBnc2xfdmVjdG9yX2Zsb2F0ICogdiA9IGdz
bF92ZWN0b3JfZmxvYXRfYWxsb2MgKDEwMjcpOwoKICBzaXplX3QgaiA9IDA7CiAgZG91YmxlIHg7
CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl9mbG9hdF9zZXQgKHYsIGogLSAxLCAoZmxvYXQp
MCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2Zsb2F0IiAiX3NldCB0cmFwcyBp
bmRleCBiZWxvdyBsb3dlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIGdzbF92ZWN0b3JfZmxv
YXRfc2V0ICh2LCAxMDI3ICsgMSwgKGZsb2F0KTApOwogIGdzbF90ZXN0ICghc3RhdHVzLCAiZ3Ns
X3ZlY3Rvcl9mbG9hdCIgIl9zZXQgdHJhcHMgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKCiAg
c3RhdHVzID0gMDsKICBnc2xfdmVjdG9yX2Zsb2F0X3NldCAodiwgMTAyNywgKGZsb2F0KTApOwog
IGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9mbG9hdCIgIl9zZXQgdHJhcHMgaW5kZXgg
YXQgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICB4ID0gZ3NsX3ZlY3Rvcl9mbG9hdF9n
ZXQgKHYsIGogLSAxKTsKICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3JfZmxvYXQiICJf
Z2V0IHRyYXBzIGluZGV4IGJlbG93IGxvd2VyIGJvdW5kIik7CiAgZ3NsX3Rlc3QgKHggIT0gMCwK
ICAgICAgICAgImdzbF92ZWN0b3JfZmxvYXQiICJfZ2V0IHJldHVybnMgemVybyBmb3IgaW5kZXgg
YmVsb3cgbG93ZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICB4ID0gZ3NsX3ZlY3Rvcl9mbG9h
dF9nZXQgKHYsIDEwMjcgKyAxKTsKICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3JfZmxv
YXQiICJfZ2V0IHRyYXBzIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5kIik7CiAgZ3NsX3Rlc3QgKHgg
IT0gMCwKICAgICAgICAgImdzbF92ZWN0b3JfZmxvYXQiICJfZ2V0IHJldHVybnMgemVybyBmb3Ig
aW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICB4ID0gZ3NsX3ZlY3Rv
cl9mbG9hdF9nZXQgKHYsIDEwMjcpOwogIGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9m
bG9hdCIgIl9nZXQgdHJhcHMgaW5kZXggYXQgdXBwZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoeCAh
PSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9mbG9hdCIgIl9nZXQgcmV0dXJucyB6ZXJvIGZv
ciBpbmRleCBhdCB1cHBlciBib3VuZCIpOwoKICBnc2xfdmVjdG9yX2Zsb2F0X2ZyZWUgKHYpOwp9
CiMgODUgInRlc3QuYyIgMgojIDEgInRlc3RfaW8uYyIgMQojIDIwICJ0ZXN0X2lvLmMiCnZvaWQg
dGVzdF9mbG9hdF90ZXh0ICh2b2lkKTsKCnZvaWQKdGVzdF9mbG9hdF90ZXh0ICh2b2lkKQp7CiAg
Z3NsX3ZlY3Rvcl9mbG9hdCAqIHYgPSBnc2xfdmVjdG9yX2Zsb2F0X2FsbG9jICgxMDI3KTsKICBn
c2xfdmVjdG9yX2Zsb2F0ICogdyA9IGdzbF92ZWN0b3JfZmxvYXRfYWxsb2MgKDEwMjcpOwoKICBz
aXplX3QgaTsKCiAgewogICAgRklMRSAqZiA9IGZvcGVuICgidGVzdC50eHQiLCAidyIpOwoKICAg
IGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBnc2xfdmVjdG9yX2Zs
b2F0X3NldCAodiwgaSwgKGZsb2F0KSBpKTsKICAgICAgfTsKCiAgICBnc2xfdmVjdG9yX2Zsb2F0
X2ZwcmludGYgKGYsIHYsICIlZyIpOwoKICAgIGZjbG9zZSAoZik7CiAgfQoKICB7CiAgICBGSUxF
ICpmID0gZm9wZW4gKCJ0ZXN0LnR4dCIsICJyIik7CgogICAgZ3NsX3ZlY3Rvcl9mbG9hdF9mc2Nh
bmYgKGYsIHcpOwoKICAgIHN0YXR1cyA9IDA7CiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsr
KQogICAgICB7CiAgICAgICAgaWYgKHctPmRhdGFbaV0gIT0gKGZsb2F0KSBpKQogICAgICAgICAg
c3RhdHVzID0gMTsKICAgICAgfTsKCiAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9m
bG9hdCIgIl9mcHJpbnRmIGFuZCBmc2NhbmYgd29yayBjb3JyZWN0bHkiKTsKCiAgICBmY2xvc2Ug
KGYpOwogIH0KCiAgZ3NsX3ZlY3Rvcl9mbG9hdF9mcmVlICh2KTsKICBnc2xfdmVjdG9yX2Zsb2F0
X2ZyZWUgKHcpOwp9CiMgODYgInRlc3QuYyIgMgojIDEgInRlbXBsYXRlc19vZmYuaCIgMQojIDg3
ICJ0ZXN0LmMiIDIKCgoKIyAxICJ0ZW1wbGF0ZXNfb24uaCIgMQojIDkxICJ0ZXN0LmMiIDIKIyAx
ICJ0ZXN0X3NvdXJjZS5jIiAxCiMgMjAgInRlc3Rfc291cmNlLmMiCnZvaWQgdGVzdF91bG9uZ19m
dW5jICh2b2lkKTsKdm9pZCB0ZXN0X3Vsb25nX2JpbmFyeSAodm9pZCk7CnZvaWQgdGVzdF91bG9u
Z190cmFwICh2b2lkKTsKCnZvaWQKdGVzdF91bG9uZ19mdW5jICh2b2lkKQp7CiAgZ3NsX3ZlY3Rv
cl91bG9uZyAqIHY7CiAgc2l6ZV90IGk7CgogIHYgPSBnc2xfdmVjdG9yX3Vsb25nX2NhbGxvYyAo
MTAyNyk7CgogIGdzbF90ZXN0ICh2LT5kYXRhID09IDAsICJnc2xfdmVjdG9yX3Vsb25nIiAiX2Fs
bG9jIHJldHVybnMgdmFsaWQgcG9pbnRlciIpOwogIGdzbF90ZXN0ICh2LT5zaXplICE9IDEwMjcs
ICJnc2xfdmVjdG9yX3Vsb25nIiAiX2FsbG9jIHJldHVybnMgdmFsaWQgc2l6ZSIpOwogIGdzbF90
ZXN0ICh2LT5zdHJpZGUgIT0gMSwgImdzbF92ZWN0b3JfdWxvbmciICJfYWxsb2MgcmV0dXJucyB1
bml0IHN0cmlkZSIpOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBn
c2xfdmVjdG9yX3Vsb25nX3NldCAodiwgaSwgKHVuc2lnbmVkIGxvbmcpIGkpOwogICAgfQoKCiAg
c3RhdHVzID0gMDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgaWYg
KHYtPmRhdGFbaV0gIT0gKHVuc2lnbmVkIGxvbmcpIGkpCiAgICAgICAgc3RhdHVzID0gMTsKICAg
IH07CgogIGdzbF90ZXN0IChzdGF0dXMsCiAgICAgICAgICAgICJnc2xfdmVjdG9yX3Vsb25nIiAi
X3NldCIgIiIgIiB3cml0ZXMgaW50byBhcnJheSBjb3JyZWN0bHkiKTsKCgogIHN0YXR1cyA9IDA7
CiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgaWYgKGdzbF92ZWN0b3Jf
dWxvbmdfZ2V0ICh2LCBpKSAhPSAodW5zaWduZWQgbG9uZykgaSkKICAgICAgICBzdGF0dXMgPSAx
OwogICAgfTsKICBnc2xfdGVzdCAoc3RhdHVzLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl91bG9u
ZyIgIl9nZXQiICIiICIgcmVhZHMgZnJvbSBhcnJheSBjb3JyZWN0bHkiKTsKCgoKCiAgdi0+c3Ry
aWRlID0gMjsKCiAgc3RhdHVzID0gMDsKICBmb3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7IGkrKykK
ICAgIHsKICAgICAgaWYgKGdzbF92ZWN0b3JfdWxvbmdfZ2V0ICh2LCBpKSAhPSAodW5zaWduZWQg
bG9uZykgKDIgKiBpKSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKICBnc2xfdGVzdCAoc3Rh
dHVzLCAiZ3NsX3ZlY3Rvcl91bG9uZyIgIl9nZXQiICIiICIgcmVhZHMgY29ycmVjdGx5IHdpdGgg
c3RyaWRlIik7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3IC8gMjsgaSsrKQogICAgewogICAgICBn
c2xfdmVjdG9yX3Vsb25nX3NldCAodiwgaSwgKHVuc2lnbmVkIGxvbmcpIChpICsgMTAwMCkpOwog
ICAgfTsKCiAgc3RhdHVzID0gMDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjcgLyAyOyBpKyspCiAg
ICB7CiAgICAgIGlmICh2LT5kYXRhWzIgKiBpXSAhPSAodW5zaWduZWQgbG9uZykgKGkgKyAxMDAw
KSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKCiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92
ZWN0b3JfdWxvbmciICJfc2V0IiAiIiAiIHdyaXRlcyBjb3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsK
CgoKICB2LT5zdHJpZGUgPSAxIDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsK
ICAgICAgZ3NsX3ZlY3Rvcl91bG9uZ19zZXQgKHYsIGksICh1bnNpZ25lZCBsb25nKSBpKTsKICAg
IH0KCiAgZ3NsX3ZlY3Rvcl91bG9uZ19zd2FwX2VsZW1lbnRzICh2LCAyLCA1KSA7CgogIHN0YXR1
cyA9IChnc2xfdmVjdG9yX3Vsb25nX2dldCh2LDIpICE9IDUpIDsKICBzdGF0dXMgfD0gKGdzbF92
ZWN0b3JfdWxvbmdfZ2V0KHYsNSkgIT0gMikgOwoKICBnc2xfdmVjdG9yX3Vsb25nX3N3YXBfZWxl
bWVudHMgKHYsIDIsIDUpIDsKCiAgc3RhdHVzIHw9IChnc2xfdmVjdG9yX3Vsb25nX2dldCh2LDIp
ICE9IDIpIDsKICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfdWxvbmdfZ2V0KHYsNSkgIT0gNSkgOwoK
ICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91bG9uZyIgIl9zd2FwX2VsZW1lbnRzIiAi
IiAiIGV4Y2hhbmdlcyBlbGVtZW50cyBjb3JyZWN0bHkiKSA7CgogIHN0YXR1cyA9IDA7CgogIGdz
bF92ZWN0b3JfdWxvbmdfcmV2ZXJzZSAodikgOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsr
KQogICAgewogICAgICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfdWxvbmdfZ2V0ICh2LCBpKSAhPSAo
dW5zaWduZWQgbG9uZykgKDEwMjcgLSBpIC0gMSkpOwogICAgfQoKICBnc2xfdGVzdCAoc3RhdHVz
LCAiZ3NsX3ZlY3Rvcl91bG9uZyIgIl9yZXZlcnNlIiAiIiAiIHJldmVyc2VzIGVsZW1lbnRzIGNv
cnJlY3RseSIpIDsKCiAgewogICAgdW5zaWduZWQgbG9uZyBleHBfbWF4ID0gZ3NsX3ZlY3Rvcl91
bG9uZ19nZXQodiwgMCk7CiAgICB1bnNpZ25lZCBsb25nIGV4cF9taW4gPSBnc2xfdmVjdG9yX3Vs
b25nX2dldCh2LCAwKTsKICAgIHNpemVfdCBleHBfaW1heCA9IDAsIGV4cF9pbWluID0gMDsKCiAg
ICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgdW5zaWduZWQgbG9u
ZyBrID0gZ3NsX3ZlY3Rvcl91bG9uZ19nZXQgKHYsIGkpIDsKICAgICAgICBpZiAoayA8IGV4cF9t
aW4pIHsKICAgICAgICAgIGV4cF9taW4gPSBnc2xfdmVjdG9yX3Vsb25nX2dldCAodiwgaSk7CiAg
ICAgICAgICBleHBfaW1pbiA9IGk7CiAgICAgICAgfQogICAgICB9CgogICAgZm9yIChpID0gMDsg
aSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIHVuc2lnbmVkIGxvbmcgayA9IGdzbF92ZWN0
b3JfdWxvbmdfZ2V0ICh2LCBpKSA7CiAgICAgICAgaWYgKGsgPiBleHBfbWF4KSB7CiAgICAgICAg
ICBleHBfbWF4ID0gZ3NsX3ZlY3Rvcl91bG9uZ19nZXQgKHYsIGkpIDsKICAgICAgICAgIGV4cF9p
bWF4ID0gaTsKICAgICAgICB9CiAgICAgIH0KCiAgICB7CiAgICAgIHVuc2lnbmVkIGxvbmcgbWF4
ID0gZ3NsX3ZlY3Rvcl91bG9uZ19tYXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChtYXggIT0gZXhw
X21heCwgImdzbF92ZWN0b3JfdWxvbmciICJfbWF4IHJldHVybnMgY29ycmVjdCBtYXhpbXVtIHZh
bHVlIik7CiAgICB9CgogICAgewogICAgICB1bnNpZ25lZCBsb25nIG1pbiA9IGdzbF92ZWN0b3Jf
dWxvbmdfbWluICh2KSA7CgogICAgICBnc2xfdGVzdCAobWluICE9IGV4cF9taW4sICJnc2xfdmVj
dG9yX3Vsb25nIiAiX21pbiByZXR1cm5zIGNvcnJlY3QgbWluaW11bSB2YWx1ZSIpOwogICAgfQoK
ICAgIHsKICAgICAgdW5zaWduZWQgbG9uZyBtaW4sIG1heDsKICAgICAgZ3NsX3ZlY3Rvcl91bG9u
Z19taW5tYXggKHYsICZtaW4sICZtYXgpOwoKICAgICAgZ3NsX3Rlc3QgKG1heCAhPSBleHBfbWF4
LCAiZ3NsX3ZlY3Rvcl91bG9uZyIgIl9taW5tYXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0gdmFs
dWUiKTsKICAgICAgZ3NsX3Rlc3QgKG1pbiAhPSBleHBfbWluLCAiZ3NsX3ZlY3Rvcl91bG9uZyIg
Il9taW5tYXggcmV0dXJucyBjb3JyZWN0IG1pbmltdW0gdmFsdWUiKTsKICAgIH0KCgogICAgewog
ICAgICBzaXplX3QgaW1heCA9IGdzbF92ZWN0b3JfdWxvbmdfbWF4X2luZGV4ICh2KSA7CgogICAg
ICBnc2xfdGVzdCAoaW1heCAhPSBleHBfaW1heCwgImdzbF92ZWN0b3JfdWxvbmciICJfbWF4X2lu
ZGV4IHJldHVybnMgY29ycmVjdCBtYXhpbXVtIGkiKTsKICAgIH0KCiAgICB7CiAgICAgIHNpemVf
dCBpbWluID0gZ3NsX3ZlY3Rvcl91bG9uZ19taW5faW5kZXggKHYpIDsKCiAgICAgIGdzbF90ZXN0
IChpbWluICE9IGV4cF9pbWluLCAiZ3NsX3ZlY3Rvcl91bG9uZyIgIl9taW5faW5kZXggcmV0dXJu
cyBjb3JyZWN0IG1pbmltdW0gaSIpOwogICAgfQoKICAgIHsKICAgICAgc2l6ZV90IGltaW4sIGlt
YXg7CgogICAgICBnc2xfdmVjdG9yX3Vsb25nX21pbm1heF9pbmRleCAodiwgJmltaW4sICZpbWF4
KTsKCiAgICAgIGdzbF90ZXN0IChpbWF4ICE9IGV4cF9pbWF4LCAiZ3NsX3ZlY3Rvcl91bG9uZyIg
Il9taW5tYXhfaW5kZXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0gaSIpOwogICAgICBnc2xfdGVz
dCAoaW1pbiAhPSBleHBfaW1pbiwgImdzbF92ZWN0b3JfdWxvbmciICJfbWlubWF4X2luZGV4IHJl
dHVybnMgY29ycmVjdCBtaW5pbXVtIGkiKTsKICAgIH0KICB9CgoKICB7CiAgICBnc2xfdmVjdG9y
X3Vsb25nICogYSA9IGdzbF92ZWN0b3JfdWxvbmdfY2FsbG9jICgxMDI3KTsKICAgIGdzbF92ZWN0
b3JfdWxvbmcgKiBiID0gZ3NsX3ZlY3Rvcl91bG9uZ19jYWxsb2MgKDEwMjcpOwoKICAgIGZvciAo
aSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBnc2xfdmVjdG9yX3Vsb25nX3Nl
dCAoYSwgaSwgKHVuc2lnbmVkIGxvbmcpKDMgKyBpKSk7CiAgICAgICAgZ3NsX3ZlY3Rvcl91bG9u
Z19zZXQgKGIsIGksICh1bnNpZ25lZCBsb25nKSgzICsgMiAqIGkpKTsKICAgICAgfQoKICAgIGdz
bF92ZWN0b3JfdWxvbmdfbWVtY3B5ICh2LCBhKTsKICAgIGdzbF92ZWN0b3JfdWxvbmdfYWRkICh2
LCBiKTsKCiAgICB7CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9yIChpID0gMDsgaSA8
IDEwMjc7IGkrKykKICAgICAgICB7CiAgICAgICAgICB1bnNpZ25lZCBsb25nIHIgPSBnc2xfdmVj
dG9yX3Vsb25nX2dldCAodixpKTsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgeCA9IGdzbF92ZWN0
b3JfdWxvbmdfZ2V0IChhLGkpOwogICAgICAgICAgdW5zaWduZWQgbG9uZyB5ID0gZ3NsX3ZlY3Rv
cl91bG9uZ19nZXQgKGIsaSk7CiAgICAgICAgICB1bnNpZ25lZCBsb25nIHogPSB4ICsgeTsKICAg
ICAgICAgIGlmIChyICE9IHopCiAgICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQogICAg
ICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91bG9uZyIgIl9hZGQgYWRkcyBjb3JyZWN0
bHkiKTsKICAgIH0KCgogICAgZ3NsX3ZlY3Rvcl91bG9uZ19tZW1jcHkgKHYsIGEpOwogICAgZ3Ns
X3ZlY3Rvcl91bG9uZ19zdWIgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7Cgog
ICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIHVuc2ln
bmVkIGxvbmcgciA9IGdzbF92ZWN0b3JfdWxvbmdfZ2V0ICh2LGkpOwogICAgICAgICAgdW5zaWdu
ZWQgbG9uZyB4ID0gZ3NsX3ZlY3Rvcl91bG9uZ19nZXQgKGEsaSk7CiAgICAgICAgICB1bnNpZ25l
ZCBsb25nIHkgPSBnc2xfdmVjdG9yX3Vsb25nX2dldCAoYixpKTsKICAgICAgICAgIHVuc2lnbmVk
IGxvbmcgeiA9IHggLSB5OwogICAgICAgICAgaWYgKHIgIT0geikKICAgICAgICAgICAgc3RhdHVz
ID0gMTsKICAgICAgICB9CiAgICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX3Vsb25n
IiAiX3N1YiBzdWJ0cmFjdHMgY29ycmVjdGx5Iik7CiAgICB9CgogICAgZ3NsX3ZlY3Rvcl91bG9u
Z19tZW1jcHkgKHYsIGEpOwogICAgZ3NsX3ZlY3Rvcl91bG9uZ19tdWwgKHYsIGIpOwoKICAgIHsK
ICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQog
ICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgciA9IGdzbF92ZWN0b3JfdWxvbmdfZ2V0
ICh2LGkpOwogICAgICAgICAgdW5zaWduZWQgbG9uZyB4ID0gZ3NsX3ZlY3Rvcl91bG9uZ19nZXQg
KGEsaSk7CiAgICAgICAgICB1bnNpZ25lZCBsb25nIHkgPSBnc2xfdmVjdG9yX3Vsb25nX2dldCAo
YixpKTsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgeiA9IHggKiB5OwogICAgICAgICAgaWYgKHIg
IT0geikKICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAgIGdzbF90ZXN0IChz
dGF0dXMsICJnc2xfdmVjdG9yX3Vsb25nIiAiX211bCBtdWx0aXBsaWVzIGNvcnJlY3RseSIpOwog
ICAgfQoKICAgIGdzbF92ZWN0b3JfdWxvbmdfbWVtY3B5ICh2LCBhKTsKICAgIGdzbF92ZWN0b3Jf
dWxvbmdfZGl2ICh2LCBiKTsKCiAgICB7CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9y
IChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgICB7CiAgICAgICAgICB1bnNpZ25lZCBsb25n
IHIgPSBnc2xfdmVjdG9yX3Vsb25nX2dldCAodixpKTsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcg
eCA9IGdzbF92ZWN0b3JfdWxvbmdfZ2V0IChhLGkpOwogICAgICAgICAgdW5zaWduZWQgbG9uZyB5
ID0gZ3NsX3ZlY3Rvcl91bG9uZ19nZXQgKGIsaSk7CiAgICAgICAgICB1bnNpZ25lZCBsb25nIHog
PSB4IC8geTsKICAgICAgICAgIGlmIChmYWJzKHIgLSB6KSA+IDIgKiAxLjE5MjA5Mjg5NTUwNzgx
MjVlLTA3ICogZmFicyh6KSkKICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAg
IGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX3Vsb25nIiAiX2RpdiBkaXZpZGVzIGNvcnJl
Y3RseSIpOwogICAgfQoKCiAgICBnc2xfdmVjdG9yX3Vsb25nX2ZyZWUgKGEpOwogICAgZ3NsX3Zl
Y3Rvcl91bG9uZ19mcmVlIChiKTsKICB9CgoKCgogIGdzbF92ZWN0b3JfdWxvbmdfZnJlZSAodik7
Cn0KCgp2b2lkCnRlc3RfdWxvbmdfYmluYXJ5ICh2b2lkKQp7CiAgZ3NsX3ZlY3Rvcl91bG9uZyAq
IHYgPSBnc2xfdmVjdG9yX3Vsb25nX2NhbGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3Rvcl91bG9uZyAq
IHcgPSBnc2xfdmVjdG9yX3Vsb25nX2NhbGxvYyAoMTAyNyk7CgogIHNpemVfdCBpOwoKICB7CiAg
ICBGSUxFICpmID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJ3YiIpOwoKICAgIGZvciAoaSA9IDA7IGkg
PCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBnc2xfdmVjdG9yX3Vsb25nX3NldCAodiwgaSwg
KHVuc2lnbmVkIGxvbmcpICgxMDI3IC0gaSkpOwogICAgICB9OwoKICAgIGdzbF92ZWN0b3JfdWxv
bmdfZndyaXRlIChmLCB2KTsKCiAgICBmY2xvc2UgKGYpOwogIH0KCiAgewogICAgRklMRSAqZiA9
IGZvcGVuICgidGVzdC5kYXQiLCAicmIiKTsKCiAgICBnc2xfdmVjdG9yX3Vsb25nX2ZyZWFkIChm
LCB3KTsKCiAgICBzdGF0dXMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAg
ICAgewogICAgICAgIGlmICh3LT5kYXRhW2ldICE9ICh1bnNpZ25lZCBsb25nKSAoMTAyNyAtIGkp
KQogICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgfTsKCiAgICBnc2xfdGVzdCAoc3RhdHVzLCAi
Z3NsX3ZlY3Rvcl91bG9uZyIgIl93cml0ZSBhbmQgcmVhZCB3b3JrIGNvcnJlY3RseSIpOwoKICAg
IGZjbG9zZSAoZik7CiAgfQoKICBnc2xfdmVjdG9yX3Vsb25nX2ZyZWUgKHYpOwogIGdzbF92ZWN0
b3JfdWxvbmdfZnJlZSAodyk7Cn0KCnZvaWQKdGVzdF91bG9uZ190cmFwICh2b2lkKQp7CiAgZ3Ns
X3ZlY3Rvcl91bG9uZyAqIHYgPSBnc2xfdmVjdG9yX3Vsb25nX2FsbG9jICgxMDI3KTsKCiAgc2l6
ZV90IGogPSAwOwogIGRvdWJsZSB4OwoKICBzdGF0dXMgPSAwOwogIGdzbF92ZWN0b3JfdWxvbmdf
c2V0ICh2LCBqIC0gMSwgKHVuc2lnbmVkIGxvbmcpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJn
c2xfdmVjdG9yX3Vsb25nIiAiX3NldCB0cmFwcyBpbmRleCBiZWxvdyBsb3dlciBib3VuZCIpOwoK
ICBzdGF0dXMgPSAwOwogIGdzbF92ZWN0b3JfdWxvbmdfc2V0ICh2LCAxMDI3ICsgMSwgKHVuc2ln
bmVkIGxvbmcpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX3Vsb25nIiAiX3Nl
dCB0cmFwcyBpbmRleCBhYm92ZSB1cHBlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIGdzbF92
ZWN0b3JfdWxvbmdfc2V0ICh2LCAxMDI3LCAodW5zaWduZWQgbG9uZykwKTsKICBnc2xfdGVzdCAo
IXN0YXR1cywgImdzbF92ZWN0b3JfdWxvbmciICJfc2V0IHRyYXBzIGluZGV4IGF0IHVwcGVyIGJv
dW5kIik7CgogIHN0YXR1cyA9IDA7CiAgeCA9IGdzbF92ZWN0b3JfdWxvbmdfZ2V0ICh2LCBqIC0g
MSk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX3Vsb25nIiAiX2dldCB0cmFwcyBp
bmRleCBiZWxvdyBsb3dlciBib3VuZCIpOwogIGdzbF90ZXN0ICh4ICE9IDAsCiAgICAgICAgICJn
c2xfdmVjdG9yX3Vsb25nIiAiX2dldCByZXR1cm5zIHplcm8gZm9yIGluZGV4IGJlbG93IGxvd2Vy
IGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgeCA9IGdzbF92ZWN0b3JfdWxvbmdfZ2V0ICh2LCAx
MDI3ICsgMSk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX3Vsb25nIiAiX2dldCB0
cmFwcyBpbmRleCBhYm92ZSB1cHBlciBib3VuZCIpOwogIGdzbF90ZXN0ICh4ICE9IDAsCiAgICAg
ICAgICJnc2xfdmVjdG9yX3Vsb25nIiAiX2dldCByZXR1cm5zIHplcm8gZm9yIGluZGV4IGFib3Zl
IHVwcGVyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgeCA9IGdzbF92ZWN0b3JfdWxvbmdfZ2V0
ICh2LCAxMDI3KTsKICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3JfdWxvbmciICJfZ2V0
IHRyYXBzIGluZGV4IGF0IHVwcGVyIGJvdW5kIik7CiAgZ3NsX3Rlc3QgKHggIT0gMCwKICAgICAg
ICAgICAgImdzbF92ZWN0b3JfdWxvbmciICJfZ2V0IHJldHVybnMgemVybyBmb3IgaW5kZXggYXQg
dXBwZXIgYm91bmQiKTsKCiAgZ3NsX3ZlY3Rvcl91bG9uZ19mcmVlICh2KTsKfQojIDkyICJ0ZXN0
LmMiIDIKIyAxICJ0ZXN0X2lvLmMiIDEKIyAyMCAidGVzdF9pby5jIgp2b2lkIHRlc3RfdWxvbmdf
dGV4dCAodm9pZCk7Cgp2b2lkCnRlc3RfdWxvbmdfdGV4dCAodm9pZCkKewogIGdzbF92ZWN0b3Jf
dWxvbmcgKiB2ID0gZ3NsX3ZlY3Rvcl91bG9uZ19hbGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3Rvcl91
bG9uZyAqIHcgPSBnc2xfdmVjdG9yX3Vsb25nX2FsbG9jICgxMDI3KTsKCiAgc2l6ZV90IGk7Cgog
IHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3QudHh0IiwgInciKTsKCiAgICBmb3IgKGkgPSAw
OyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgZ3NsX3ZlY3Rvcl91bG9uZ19zZXQgKHYs
IGksICh1bnNpZ25lZCBsb25nKSBpKTsKICAgICAgfTsKCiAgICBnc2xfdmVjdG9yX3Vsb25nX2Zw
cmludGYgKGYsIHYsICIlbHUiKTsKCiAgICBmY2xvc2UgKGYpOwogIH0KCiAgewogICAgRklMRSAq
ZiA9IGZvcGVuICgidGVzdC50eHQiLCAiciIpOwoKICAgIGdzbF92ZWN0b3JfdWxvbmdfZnNjYW5m
IChmLCB3KTsKCiAgICBzdGF0dXMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykK
ICAgICAgewogICAgICAgIGlmICh3LT5kYXRhW2ldICE9ICh1bnNpZ25lZCBsb25nKSBpKQogICAg
ICAgICAgc3RhdHVzID0gMTsKICAgICAgfTsKCiAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3Zl
Y3Rvcl91bG9uZyIgIl9mcHJpbnRmIGFuZCBmc2NhbmYgd29yayBjb3JyZWN0bHkiKTsKCiAgICBm
Y2xvc2UgKGYpOwogIH0KCiAgZ3NsX3ZlY3Rvcl91bG9uZ19mcmVlICh2KTsKICBnc2xfdmVjdG9y
X3Vsb25nX2ZyZWUgKHcpOwp9CiMgOTMgInRlc3QuYyIgMgojIDEgInRlbXBsYXRlc19vZmYuaCIg
MQojIDk0ICJ0ZXN0LmMiIDIKCgoKIyAxICJ0ZW1wbGF0ZXNfb24uaCIgMQojIDk4ICJ0ZXN0LmMi
IDIKIyAxICJ0ZXN0X3NvdXJjZS5jIiAxCiMgMjAgInRlc3Rfc291cmNlLmMiCnZvaWQgdGVzdF9s
b25nX2Z1bmMgKHZvaWQpOwp2b2lkIHRlc3RfbG9uZ19iaW5hcnkgKHZvaWQpOwp2b2lkIHRlc3Rf
bG9uZ190cmFwICh2b2lkKTsKCnZvaWQKdGVzdF9sb25nX2Z1bmMgKHZvaWQpCnsKICBnc2xfdmVj
dG9yX2xvbmcgKiB2OwogIHNpemVfdCBpOwoKICB2ID0gZ3NsX3ZlY3Rvcl9sb25nX2NhbGxvYyAo
MTAyNyk7CgogIGdzbF90ZXN0ICh2LT5kYXRhID09IDAsICJnc2xfdmVjdG9yX2xvbmciICJfYWxs
b2MgcmV0dXJucyB2YWxpZCBwb2ludGVyIik7CiAgZ3NsX3Rlc3QgKHYtPnNpemUgIT0gMTAyNywg
ImdzbF92ZWN0b3JfbG9uZyIgIl9hbGxvYyByZXR1cm5zIHZhbGlkIHNpemUiKTsKICBnc2xfdGVz
dCAodi0+c3RyaWRlICE9IDEsICJnc2xfdmVjdG9yX2xvbmciICJfYWxsb2MgcmV0dXJucyB1bml0
IHN0cmlkZSIpOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBnc2xf
dmVjdG9yX2xvbmdfc2V0ICh2LCBpLCAobG9uZykgaSk7CiAgICB9CgoKICBzdGF0dXMgPSAwOwoK
ICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBpZiAodi0+ZGF0YVtpXSAh
PSAobG9uZykgaSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKCiAgZ3NsX3Rlc3QgKHN0YXR1
cywKICAgICAgICAgICAgImdzbF92ZWN0b3JfbG9uZyIgIl9zZXQiICIiICIgd3JpdGVzIGludG8g
YXJyYXkgY29ycmVjdGx5Iik7CgoKICBzdGF0dXMgPSAwOwogIGZvciAoaSA9IDA7IGkgPCAxMDI3
OyBpKyspCiAgICB7CiAgICAgIGlmIChnc2xfdmVjdG9yX2xvbmdfZ2V0ICh2LCBpKSAhPSAobG9u
ZykgaSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKICBnc2xfdGVzdCAoc3RhdHVzLAogICAg
ICAgICAgICAiZ3NsX3ZlY3Rvcl9sb25nIiAiX2dldCIgIiIgIiByZWFkcyBmcm9tIGFycmF5IGNv
cnJlY3RseSIpOwoKCgoKICB2LT5zdHJpZGUgPSAyOwoKICBzdGF0dXMgPSAwOwogIGZvciAoaSA9
IDA7IGkgPCAxMDI3IC8gMjsgaSsrKQogICAgewogICAgICBpZiAoZ3NsX3ZlY3Rvcl9sb25nX2dl
dCAodiwgaSkgIT0gKGxvbmcpICgyICogaSkpCiAgICAgICAgc3RhdHVzID0gMTsKICAgIH07CiAg
Z3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfbG9uZyIgIl9nZXQiICIiICIgcmVhZHMgY29y
cmVjdGx5IHdpdGggc3RyaWRlIik7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3IC8gMjsgaSsrKQog
ICAgewogICAgICBnc2xfdmVjdG9yX2xvbmdfc2V0ICh2LCBpLCAobG9uZykgKGkgKyAxMDAwKSk7
CiAgICB9OwoKICBzdGF0dXMgPSAwOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7IGkrKykK
ICAgIHsKICAgICAgaWYgKHYtPmRhdGFbMiAqIGldICE9IChsb25nKSAoaSArIDEwMDApKQogICAg
ICAgIHN0YXR1cyA9IDE7CiAgICB9OwoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9s
b25nIiAiX3NldCIgIiIgIiB3cml0ZXMgY29ycmVjdGx5IHdpdGggc3RyaWRlIik7CgoKCiAgdi0+
c3RyaWRlID0gMSA7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdz
bF92ZWN0b3JfbG9uZ19zZXQgKHYsIGksIChsb25nKSBpKTsKICAgIH0KCiAgZ3NsX3ZlY3Rvcl9s
b25nX3N3YXBfZWxlbWVudHMgKHYsIDIsIDUpIDsKCiAgc3RhdHVzID0gKGdzbF92ZWN0b3JfbG9u
Z19nZXQodiwyKSAhPSA1KSA7CiAgc3RhdHVzIHw9IChnc2xfdmVjdG9yX2xvbmdfZ2V0KHYsNSkg
IT0gMikgOwoKICBnc2xfdmVjdG9yX2xvbmdfc3dhcF9lbGVtZW50cyAodiwgMiwgNSkgOwoKICBz
dGF0dXMgfD0gKGdzbF92ZWN0b3JfbG9uZ19nZXQodiwyKSAhPSAyKSA7CiAgc3RhdHVzIHw9IChn
c2xfdmVjdG9yX2xvbmdfZ2V0KHYsNSkgIT0gNSkgOwoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3Ns
X3ZlY3Rvcl9sb25nIiAiX3N3YXBfZWxlbWVudHMiICIiICIgZXhjaGFuZ2VzIGVsZW1lbnRzIGNv
cnJlY3RseSIpIDsKCiAgc3RhdHVzID0gMDsKCiAgZ3NsX3ZlY3Rvcl9sb25nX3JldmVyc2UgKHYp
IDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgc3RhdHVzIHw9IChn
c2xfdmVjdG9yX2xvbmdfZ2V0ICh2LCBpKSAhPSAobG9uZykgKDEwMjcgLSBpIC0gMSkpOwogICAg
fQoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9sb25nIiAiX3JldmVyc2UiICIiICIg
cmV2ZXJzZXMgZWxlbWVudHMgY29ycmVjdGx5IikgOwoKICB7CiAgICBsb25nIGV4cF9tYXggPSBn
c2xfdmVjdG9yX2xvbmdfZ2V0KHYsIDApOwogICAgbG9uZyBleHBfbWluID0gZ3NsX3ZlY3Rvcl9s
b25nX2dldCh2LCAwKTsKICAgIHNpemVfdCBleHBfaW1heCA9IDAsIGV4cF9pbWluID0gMDsKCiAg
ICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgbG9uZyBrID0gZ3Ns
X3ZlY3Rvcl9sb25nX2dldCAodiwgaSkgOwogICAgICAgIGlmIChrIDwgZXhwX21pbikgewogICAg
ICAgICAgZXhwX21pbiA9IGdzbF92ZWN0b3JfbG9uZ19nZXQgKHYsIGkpOwogICAgICAgICAgZXhw
X2ltaW4gPSBpOwogICAgICAgIH0KICAgICAgfQoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBp
KyspCiAgICAgIHsKICAgICAgICBsb25nIGsgPSBnc2xfdmVjdG9yX2xvbmdfZ2V0ICh2LCBpKSA7
CiAgICAgICAgaWYgKGsgPiBleHBfbWF4KSB7CiAgICAgICAgICBleHBfbWF4ID0gZ3NsX3ZlY3Rv
cl9sb25nX2dldCAodiwgaSkgOwogICAgICAgICAgZXhwX2ltYXggPSBpOwogICAgICAgIH0KICAg
ICAgfQoKICAgIHsKICAgICAgbG9uZyBtYXggPSBnc2xfdmVjdG9yX2xvbmdfbWF4ICh2KSA7Cgog
ICAgICBnc2xfdGVzdCAobWF4ICE9IGV4cF9tYXgsICJnc2xfdmVjdG9yX2xvbmciICJfbWF4IHJl
dHVybnMgY29ycmVjdCBtYXhpbXVtIHZhbHVlIik7CiAgICB9CgogICAgewogICAgICBsb25nIG1p
biA9IGdzbF92ZWN0b3JfbG9uZ19taW4gKHYpIDsKCiAgICAgIGdzbF90ZXN0IChtaW4gIT0gZXhw
X21pbiwgImdzbF92ZWN0b3JfbG9uZyIgIl9taW4gcmV0dXJucyBjb3JyZWN0IG1pbmltdW0gdmFs
dWUiKTsKICAgIH0KCiAgICB7CiAgICAgIGxvbmcgbWluLCBtYXg7CiAgICAgIGdzbF92ZWN0b3Jf
bG9uZ19taW5tYXggKHYsICZtaW4sICZtYXgpOwoKICAgICAgZ3NsX3Rlc3QgKG1heCAhPSBleHBf
bWF4LCAiZ3NsX3ZlY3Rvcl9sb25nIiAiX21pbm1heCByZXR1cm5zIGNvcnJlY3QgbWF4aW11bSB2
YWx1ZSIpOwogICAgICBnc2xfdGVzdCAobWluICE9IGV4cF9taW4sICJnc2xfdmVjdG9yX2xvbmci
ICJfbWlubWF4IHJldHVybnMgY29ycmVjdCBtaW5pbXVtIHZhbHVlIik7CiAgICB9CgoKICAgIHsK
ICAgICAgc2l6ZV90IGltYXggPSBnc2xfdmVjdG9yX2xvbmdfbWF4X2luZGV4ICh2KSA7CgogICAg
ICBnc2xfdGVzdCAoaW1heCAhPSBleHBfaW1heCwgImdzbF92ZWN0b3JfbG9uZyIgIl9tYXhfaW5k
ZXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0gaSIpOwogICAgfQoKICAgIHsKICAgICAgc2l6ZV90
IGltaW4gPSBnc2xfdmVjdG9yX2xvbmdfbWluX2luZGV4ICh2KSA7CgogICAgICBnc2xfdGVzdCAo
aW1pbiAhPSBleHBfaW1pbiwgImdzbF92ZWN0b3JfbG9uZyIgIl9taW5faW5kZXggcmV0dXJucyBj
b3JyZWN0IG1pbmltdW0gaSIpOwogICAgfQoKICAgIHsKICAgICAgc2l6ZV90IGltaW4sIGltYXg7
CgogICAgICBnc2xfdmVjdG9yX2xvbmdfbWlubWF4X2luZGV4ICh2LCAmaW1pbiwgJmltYXgpOwoK
ICAgICAgZ3NsX3Rlc3QgKGltYXggIT0gZXhwX2ltYXgsICJnc2xfdmVjdG9yX2xvbmciICJfbWlu
bWF4X2luZGV4IHJldHVybnMgY29ycmVjdCBtYXhpbXVtIGkiKTsKICAgICAgZ3NsX3Rlc3QgKGlt
aW4gIT0gZXhwX2ltaW4sICJnc2xfdmVjdG9yX2xvbmciICJfbWlubWF4X2luZGV4IHJldHVybnMg
Y29ycmVjdCBtaW5pbXVtIGkiKTsKICAgIH0KICB9CgoKICB7CiAgICBnc2xfdmVjdG9yX2xvbmcg
KiBhID0gZ3NsX3ZlY3Rvcl9sb25nX2NhbGxvYyAoMTAyNyk7CiAgICBnc2xfdmVjdG9yX2xvbmcg
KiBiID0gZ3NsX3ZlY3Rvcl9sb25nX2NhbGxvYyAoMTAyNyk7CgogICAgZm9yIChpID0gMDsgaSA8
IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGdzbF92ZWN0b3JfbG9uZ19zZXQgKGEsIGksIChs
b25nKSgzICsgaSkpOwogICAgICAgIGdzbF92ZWN0b3JfbG9uZ19zZXQgKGIsIGksIChsb25nKSgz
ICsgMiAqIGkpKTsKICAgICAgfQoKICAgIGdzbF92ZWN0b3JfbG9uZ19tZW1jcHkgKHYsIGEpOwog
ICAgZ3NsX3ZlY3Rvcl9sb25nX2FkZCAodiwgYik7CgogICAgewogICAgICBpbnQgc3RhdHVzID0g
MDsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgICAgewogICAgICAgICAg
bG9uZyByID0gZ3NsX3ZlY3Rvcl9sb25nX2dldCAodixpKTsKICAgICAgICAgIGxvbmcgeCA9IGdz
bF92ZWN0b3JfbG9uZ19nZXQgKGEsaSk7CiAgICAgICAgICBsb25nIHkgPSBnc2xfdmVjdG9yX2xv
bmdfZ2V0IChiLGkpOwogICAgICAgICAgbG9uZyB6ID0geCArIHk7CiAgICAgICAgICBpZiAociAh
PSB6KQogICAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICAgIH0KICAgICAgZ3NsX3Rlc3QgKHN0
YXR1cywgImdzbF92ZWN0b3JfbG9uZyIgIl9hZGQgYWRkcyBjb3JyZWN0bHkiKTsKICAgIH0KCgog
ICAgZ3NsX3ZlY3Rvcl9sb25nX21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX2xvbmdfc3Vi
ICh2LCBiKTsKCiAgICB7CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9yIChpID0gMDsg
aSA8IDEwMjc7IGkrKykKICAgICAgICB7CiAgICAgICAgICBsb25nIHIgPSBnc2xfdmVjdG9yX2xv
bmdfZ2V0ICh2LGkpOwogICAgICAgICAgbG9uZyB4ID0gZ3NsX3ZlY3Rvcl9sb25nX2dldCAoYSxp
KTsKICAgICAgICAgIGxvbmcgeSA9IGdzbF92ZWN0b3JfbG9uZ19nZXQgKGIsaSk7CiAgICAgICAg
ICBsb25nIHogPSB4IC0geTsKICAgICAgICAgIGlmIChyICE9IHopCiAgICAgICAgICAgIHN0YXR1
cyA9IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9sb25n
IiAiX3N1YiBzdWJ0cmFjdHMgY29ycmVjdGx5Iik7CiAgICB9CgogICAgZ3NsX3ZlY3Rvcl9sb25n
X21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX2xvbmdfbXVsICh2LCBiKTsKCiAgICB7CiAg
ICAgIGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAg
ICAgICB7CiAgICAgICAgICBsb25nIHIgPSBnc2xfdmVjdG9yX2xvbmdfZ2V0ICh2LGkpOwogICAg
ICAgICAgbG9uZyB4ID0gZ3NsX3ZlY3Rvcl9sb25nX2dldCAoYSxpKTsKICAgICAgICAgIGxvbmcg
eSA9IGdzbF92ZWN0b3JfbG9uZ19nZXQgKGIsaSk7CiAgICAgICAgICBsb25nIHogPSB4ICogeTsK
ICAgICAgICAgIGlmIChyICE9IHopCiAgICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQog
ICAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9sb25nIiAiX211bCBtdWx0aXBsaWVz
IGNvcnJlY3RseSIpOwogICAgfQoKICAgIGdzbF92ZWN0b3JfbG9uZ19tZW1jcHkgKHYsIGEpOwog
ICAgZ3NsX3ZlY3Rvcl9sb25nX2RpdiAodiwgYik7CgogICAgewogICAgICBpbnQgc3RhdHVzID0g
MDsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgICAgewogICAgICAgICAg
bG9uZyByID0gZ3NsX3ZlY3Rvcl9sb25nX2dldCAodixpKTsKICAgICAgICAgIGxvbmcgeCA9IGdz
bF92ZWN0b3JfbG9uZ19nZXQgKGEsaSk7CiAgICAgICAgICBsb25nIHkgPSBnc2xfdmVjdG9yX2xv
bmdfZ2V0IChiLGkpOwogICAgICAgICAgbG9uZyB6ID0geCAvIHk7CiAgICAgICAgICBpZiAoZmFi
cyhyIC0geikgPiAyICogMS4xOTIwOTI4OTU1MDc4MTI1ZS0wNyAqIGZhYnMoeikpCiAgICAgICAg
ICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3Zl
Y3Rvcl9sb25nIiAiX2RpdiBkaXZpZGVzIGNvcnJlY3RseSIpOwogICAgfQoKCiAgICBnc2xfdmVj
dG9yX2xvbmdfZnJlZSAoYSk7CiAgICBnc2xfdmVjdG9yX2xvbmdfZnJlZSAoYik7CiAgfQoKCgoK
ICBnc2xfdmVjdG9yX2xvbmdfZnJlZSAodik7Cn0KCgp2b2lkCnRlc3RfbG9uZ19iaW5hcnkgKHZv
aWQpCnsKICBnc2xfdmVjdG9yX2xvbmcgKiB2ID0gZ3NsX3ZlY3Rvcl9sb25nX2NhbGxvYyAoMTAy
Nyk7CiAgZ3NsX3ZlY3Rvcl9sb25nICogdyA9IGdzbF92ZWN0b3JfbG9uZ19jYWxsb2MgKDEwMjcp
OwoKICBzaXplX3QgaTsKCiAgewogICAgRklMRSAqZiA9IGZvcGVuICgidGVzdC5kYXQiLCAid2Ii
KTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgZ3NsX3Zl
Y3Rvcl9sb25nX3NldCAodiwgaSwgKGxvbmcpICgxMDI3IC0gaSkpOwogICAgICB9OwoKICAgIGdz
bF92ZWN0b3JfbG9uZ19md3JpdGUgKGYsIHYpOwoKICAgIGZjbG9zZSAoZik7CiAgfQoKICB7CiAg
ICBGSUxFICpmID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJyYiIpOwoKICAgIGdzbF92ZWN0b3JfbG9u
Z19mcmVhZCAoZiwgdyk7CgogICAgc3RhdHVzID0gMDsKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3
OyBpKyspCiAgICAgIHsKICAgICAgICBpZiAody0+ZGF0YVtpXSAhPSAobG9uZykgKDEwMjcgLSBp
KSkKICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgIH07CgogICAgZ3NsX3Rlc3QgKHN0YXR1cywg
ImdzbF92ZWN0b3JfbG9uZyIgIl93cml0ZSBhbmQgcmVhZCB3b3JrIGNvcnJlY3RseSIpOwoKICAg
IGZjbG9zZSAoZik7CiAgfQoKICBnc2xfdmVjdG9yX2xvbmdfZnJlZSAodik7CiAgZ3NsX3ZlY3Rv
cl9sb25nX2ZyZWUgKHcpOwp9Cgp2b2lkCnRlc3RfbG9uZ190cmFwICh2b2lkKQp7CiAgZ3NsX3Zl
Y3Rvcl9sb25nICogdiA9IGdzbF92ZWN0b3JfbG9uZ19hbGxvYyAoMTAyNyk7CgogIHNpemVfdCBq
ID0gMDsKICBkb3VibGUgeDsKCiAgc3RhdHVzID0gMDsKICBnc2xfdmVjdG9yX2xvbmdfc2V0ICh2
LCBqIC0gMSwgKGxvbmcpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2xvbmci
ICJfc2V0IHRyYXBzIGluZGV4IGJlbG93IGxvd2VyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAg
Z3NsX3ZlY3Rvcl9sb25nX3NldCAodiwgMTAyNyArIDEsIChsb25nKTApOwogIGdzbF90ZXN0ICgh
c3RhdHVzLCAiZ3NsX3ZlY3Rvcl9sb25nIiAiX3NldCB0cmFwcyBpbmRleCBhYm92ZSB1cHBlciBi
b3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIGdzbF92ZWN0b3JfbG9uZ19zZXQgKHYsIDEwMjcsIChs
b25nKTApOwogIGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9sb25nIiAiX3NldCB0cmFw
cyBpbmRleCBhdCB1cHBlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIHggPSBnc2xfdmVjdG9y
X2xvbmdfZ2V0ICh2LCBqIC0gMSk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2xv
bmciICJfZ2V0IHRyYXBzIGluZGV4IGJlbG93IGxvd2VyIGJvdW5kIik7CiAgZ3NsX3Rlc3QgKHgg
IT0gMCwKICAgICAgICAgImdzbF92ZWN0b3JfbG9uZyIgIl9nZXQgcmV0dXJucyB6ZXJvIGZvciBp
bmRleCBiZWxvdyBsb3dlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIHggPSBnc2xfdmVjdG9y
X2xvbmdfZ2V0ICh2LCAxMDI3ICsgMSk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9y
X2xvbmciICJfZ2V0IHRyYXBzIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5kIik7CiAgZ3NsX3Rlc3Qg
KHggIT0gMCwKICAgICAgICAgImdzbF92ZWN0b3JfbG9uZyIgIl9nZXQgcmV0dXJucyB6ZXJvIGZv
ciBpbmRleCBhYm92ZSB1cHBlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIHggPSBnc2xfdmVj
dG9yX2xvbmdfZ2V0ICh2LCAxMDI3KTsKICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3Jf
bG9uZyIgIl9nZXQgdHJhcHMgaW5kZXggYXQgdXBwZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoeCAh
PSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9sb25nIiAiX2dldCByZXR1cm5zIHplcm8gZm9y
IGluZGV4IGF0IHVwcGVyIGJvdW5kIik7CgogIGdzbF92ZWN0b3JfbG9uZ19mcmVlICh2KTsKfQoj
IDk5ICJ0ZXN0LmMiIDIKIyAxICJ0ZXN0X2lvLmMiIDEKIyAyMCAidGVzdF9pby5jIgp2b2lkIHRl
c3RfbG9uZ190ZXh0ICh2b2lkKTsKCnZvaWQKdGVzdF9sb25nX3RleHQgKHZvaWQpCnsKICBnc2xf
dmVjdG9yX2xvbmcgKiB2ID0gZ3NsX3ZlY3Rvcl9sb25nX2FsbG9jICgxMDI3KTsKICBnc2xfdmVj
dG9yX2xvbmcgKiB3ID0gZ3NsX3ZlY3Rvcl9sb25nX2FsbG9jICgxMDI3KTsKCiAgc2l6ZV90IGk7
CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3QudHh0IiwgInciKTsKCiAgICBmb3IgKGkg
PSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgZ3NsX3ZlY3Rvcl9sb25nX3NldCAo
diwgaSwgKGxvbmcpIGkpOwogICAgICB9OwoKICAgIGdzbF92ZWN0b3JfbG9uZ19mcHJpbnRmIChm
LCB2LCAiJWxkIik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAgIEZJTEUgKmYgPSBmb3Bl
biAoInRlc3QudHh0IiwgInIiKTsKCiAgICBnc2xfdmVjdG9yX2xvbmdfZnNjYW5mIChmLCB3KTsK
CiAgICBzdGF0dXMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewog
ICAgICAgIGlmICh3LT5kYXRhW2ldICE9IChsb25nKSBpKQogICAgICAgICAgc3RhdHVzID0gMTsK
ICAgICAgfTsKCiAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9sb25nIiAiX2Zwcmlu
dGYgYW5kIGZzY2FuZiB3b3JrIGNvcnJlY3RseSIpOwoKICAgIGZjbG9zZSAoZik7CiAgfQoKICBn
c2xfdmVjdG9yX2xvbmdfZnJlZSAodik7CiAgZ3NsX3ZlY3Rvcl9sb25nX2ZyZWUgKHcpOwp9CiMg
MTAwICJ0ZXN0LmMiIDIKIyAxICJ0ZW1wbGF0ZXNfb2ZmLmgiIDEKIyAxMDEgInRlc3QuYyIgMgoK
CgojIDEgInRlbXBsYXRlc19vbi5oIiAxCiMgMTA1ICJ0ZXN0LmMiIDIKIyAxICJ0ZXN0X3NvdXJj
ZS5jIiAxCiMgMjAgInRlc3Rfc291cmNlLmMiCnZvaWQgdGVzdF91aW50X2Z1bmMgKHZvaWQpOwp2
b2lkIHRlc3RfdWludF9iaW5hcnkgKHZvaWQpOwp2b2lkIHRlc3RfdWludF90cmFwICh2b2lkKTsK
CnZvaWQKdGVzdF91aW50X2Z1bmMgKHZvaWQpCnsKICBnc2xfdmVjdG9yX3VpbnQgKiB2OwogIHNp
emVfdCBpOwoKICB2ID0gZ3NsX3ZlY3Rvcl91aW50X2NhbGxvYyAoMTAyNyk7CgogIGdzbF90ZXN0
ICh2LT5kYXRhID09IDAsICJnc2xfdmVjdG9yX3VpbnQiICJfYWxsb2MgcmV0dXJucyB2YWxpZCBw
b2ludGVyIik7CiAgZ3NsX3Rlc3QgKHYtPnNpemUgIT0gMTAyNywgImdzbF92ZWN0b3JfdWludCIg
Il9hbGxvYyByZXR1cm5zIHZhbGlkIHNpemUiKTsKICBnc2xfdGVzdCAodi0+c3RyaWRlICE9IDEs
ICJnc2xfdmVjdG9yX3VpbnQiICJfYWxsb2MgcmV0dXJucyB1bml0IHN0cmlkZSIpOwoKICBmb3Ig
KGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBnc2xfdmVjdG9yX3VpbnRfc2V0ICh2
LCBpLCAodW5zaWduZWQgaW50KSBpKTsKICAgIH0KCgogIHN0YXR1cyA9IDA7CgogIGZvciAoaSA9
IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGlmICh2LT5kYXRhW2ldICE9ICh1bnNpZ25l
ZCBpbnQpIGkpCiAgICAgICAgc3RhdHVzID0gMTsKICAgIH07CgogIGdzbF90ZXN0IChzdGF0dXMs
CiAgICAgICAgICAgICJnc2xfdmVjdG9yX3VpbnQiICJfc2V0IiAiIiAiIHdyaXRlcyBpbnRvIGFy
cmF5IGNvcnJlY3RseSIpOwoKCiAgc3RhdHVzID0gMDsKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsg
aSsrKQogICAgewogICAgICBpZiAoZ3NsX3ZlY3Rvcl91aW50X2dldCAodiwgaSkgIT0gKHVuc2ln
bmVkIGludCkgaSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKICBnc2xfdGVzdCAoc3RhdHVz
LAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl91aW50IiAiX2dldCIgIiIgIiByZWFkcyBmcm9tIGFy
cmF5IGNvcnJlY3RseSIpOwoKCgoKICB2LT5zdHJpZGUgPSAyOwoKICBzdGF0dXMgPSAwOwogIGZv
ciAoaSA9IDA7IGkgPCAxMDI3IC8gMjsgaSsrKQogICAgewogICAgICBpZiAoZ3NsX3ZlY3Rvcl91
aW50X2dldCAodiwgaSkgIT0gKHVuc2lnbmVkIGludCkgKDIgKiBpKSkKICAgICAgICBzdGF0dXMg
PSAxOwogICAgfTsKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91aW50IiAiX2dldCIg
IiIgIiByZWFkcyBjb3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsKCiAgZm9yIChpID0gMDsgaSA8IDEw
MjcgLyAyOyBpKyspCiAgICB7CiAgICAgIGdzbF92ZWN0b3JfdWludF9zZXQgKHYsIGksICh1bnNp
Z25lZCBpbnQpIChpICsgMTAwMCkpOwogICAgfTsKCiAgc3RhdHVzID0gMDsKCiAgZm9yIChpID0g
MDsgaSA8IDEwMjcgLyAyOyBpKyspCiAgICB7CiAgICAgIGlmICh2LT5kYXRhWzIgKiBpXSAhPSAo
dW5zaWduZWQgaW50KSAoaSArIDEwMDApKQogICAgICAgIHN0YXR1cyA9IDE7CiAgICB9OwoKICBn
c2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91aW50IiAiX3NldCIgIiIgIiB3cml0ZXMgY29y
cmVjdGx5IHdpdGggc3RyaWRlIik7CgoKCiAgdi0+c3RyaWRlID0gMSA7CgogIGZvciAoaSA9IDA7
IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdzbF92ZWN0b3JfdWludF9zZXQgKHYsIGksICh1
bnNpZ25lZCBpbnQpIGkpOwogICAgfQoKICBnc2xfdmVjdG9yX3VpbnRfc3dhcF9lbGVtZW50cyAo
diwgMiwgNSkgOwoKICBzdGF0dXMgPSAoZ3NsX3ZlY3Rvcl91aW50X2dldCh2LDIpICE9IDUpIDsK
ICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfdWludF9nZXQodiw1KSAhPSAyKSA7CgogIGdzbF92ZWN0
b3JfdWludF9zd2FwX2VsZW1lbnRzICh2LCAyLCA1KSA7CgogIHN0YXR1cyB8PSAoZ3NsX3ZlY3Rv
cl91aW50X2dldCh2LDIpICE9IDIpIDsKICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfdWludF9nZXQo
diw1KSAhPSA1KSA7CgogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX3VpbnQiICJfc3dh
cF9lbGVtZW50cyIgIiIgIiBleGNoYW5nZXMgZWxlbWVudHMgY29ycmVjdGx5IikgOwoKICBzdGF0
dXMgPSAwOwoKICBnc2xfdmVjdG9yX3VpbnRfcmV2ZXJzZSAodikgOwoKICBmb3IgKGkgPSAwOyBp
IDwgMTAyNzsgaSsrKQogICAgewogICAgICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfdWludF9nZXQg
KHYsIGkpICE9ICh1bnNpZ25lZCBpbnQpICgxMDI3IC0gaSAtIDEpKTsKICAgIH0KCiAgZ3NsX3Rl
c3QgKHN0YXR1cywgImdzbF92ZWN0b3JfdWludCIgIl9yZXZlcnNlIiAiIiAiIHJldmVyc2VzIGVs
ZW1lbnRzIGNvcnJlY3RseSIpIDsKCiAgewogICAgdW5zaWduZWQgaW50IGV4cF9tYXggPSBnc2xf
dmVjdG9yX3VpbnRfZ2V0KHYsIDApOwogICAgdW5zaWduZWQgaW50IGV4cF9taW4gPSBnc2xfdmVj
dG9yX3VpbnRfZ2V0KHYsIDApOwogICAgc2l6ZV90IGV4cF9pbWF4ID0gMCwgZXhwX2ltaW4gPSAw
OwoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICB1bnNpZ25l
ZCBpbnQgayA9IGdzbF92ZWN0b3JfdWludF9nZXQgKHYsIGkpIDsKICAgICAgICBpZiAoayA8IGV4
cF9taW4pIHsKICAgICAgICAgIGV4cF9taW4gPSBnc2xfdmVjdG9yX3VpbnRfZ2V0ICh2LCBpKTsK
ICAgICAgICAgIGV4cF9pbWluID0gaTsKICAgICAgICB9CiAgICAgIH0KCiAgICBmb3IgKGkgPSAw
OyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgdW5zaWduZWQgaW50IGsgPSBnc2xfdmVj
dG9yX3VpbnRfZ2V0ICh2LCBpKSA7CiAgICAgICAgaWYgKGsgPiBleHBfbWF4KSB7CiAgICAgICAg
ICBleHBfbWF4ID0gZ3NsX3ZlY3Rvcl91aW50X2dldCAodiwgaSkgOwogICAgICAgICAgZXhwX2lt
YXggPSBpOwogICAgICAgIH0KICAgICAgfQoKICAgIHsKICAgICAgdW5zaWduZWQgaW50IG1heCA9
IGdzbF92ZWN0b3JfdWludF9tYXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChtYXggIT0gZXhwX21h
eCwgImdzbF92ZWN0b3JfdWludCIgIl9tYXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0gdmFsdWUi
KTsKICAgIH0KCiAgICB7CiAgICAgIHVuc2lnbmVkIGludCBtaW4gPSBnc2xfdmVjdG9yX3VpbnRf
bWluICh2KSA7CgogICAgICBnc2xfdGVzdCAobWluICE9IGV4cF9taW4sICJnc2xfdmVjdG9yX3Vp
bnQiICJfbWluIHJldHVybnMgY29ycmVjdCBtaW5pbXVtIHZhbHVlIik7CiAgICB9CgogICAgewog
ICAgICB1bnNpZ25lZCBpbnQgbWluLCBtYXg7CiAgICAgIGdzbF92ZWN0b3JfdWludF9taW5tYXgg
KHYsICZtaW4sICZtYXgpOwoKICAgICAgZ3NsX3Rlc3QgKG1heCAhPSBleHBfbWF4LCAiZ3NsX3Zl
Y3Rvcl91aW50IiAiX21pbm1heCByZXR1cm5zIGNvcnJlY3QgbWF4aW11bSB2YWx1ZSIpOwogICAg
ICBnc2xfdGVzdCAobWluICE9IGV4cF9taW4sICJnc2xfdmVjdG9yX3VpbnQiICJfbWlubWF4IHJl
dHVybnMgY29ycmVjdCBtaW5pbXVtIHZhbHVlIik7CiAgICB9CgoKICAgIHsKICAgICAgc2l6ZV90
IGltYXggPSBnc2xfdmVjdG9yX3VpbnRfbWF4X2luZGV4ICh2KSA7CgogICAgICBnc2xfdGVzdCAo
aW1heCAhPSBleHBfaW1heCwgImdzbF92ZWN0b3JfdWludCIgIl9tYXhfaW5kZXggcmV0dXJucyBj
b3JyZWN0IG1heGltdW0gaSIpOwogICAgfQoKICAgIHsKICAgICAgc2l6ZV90IGltaW4gPSBnc2xf
dmVjdG9yX3VpbnRfbWluX2luZGV4ICh2KSA7CgogICAgICBnc2xfdGVzdCAoaW1pbiAhPSBleHBf
aW1pbiwgImdzbF92ZWN0b3JfdWludCIgIl9taW5faW5kZXggcmV0dXJucyBjb3JyZWN0IG1pbmlt
dW0gaSIpOwogICAgfQoKICAgIHsKICAgICAgc2l6ZV90IGltaW4sIGltYXg7CgogICAgICBnc2xf
dmVjdG9yX3VpbnRfbWlubWF4X2luZGV4ICh2LCAmaW1pbiwgJmltYXgpOwoKICAgICAgZ3NsX3Rl
c3QgKGltYXggIT0gZXhwX2ltYXgsICJnc2xfdmVjdG9yX3VpbnQiICJfbWlubWF4X2luZGV4IHJl
dHVybnMgY29ycmVjdCBtYXhpbXVtIGkiKTsKICAgICAgZ3NsX3Rlc3QgKGltaW4gIT0gZXhwX2lt
aW4sICJnc2xfdmVjdG9yX3VpbnQiICJfbWlubWF4X2luZGV4IHJldHVybnMgY29ycmVjdCBtaW5p
bXVtIGkiKTsKICAgIH0KICB9CgoKICB7CiAgICBnc2xfdmVjdG9yX3VpbnQgKiBhID0gZ3NsX3Zl
Y3Rvcl91aW50X2NhbGxvYyAoMTAyNyk7CiAgICBnc2xfdmVjdG9yX3VpbnQgKiBiID0gZ3NsX3Zl
Y3Rvcl91aW50X2NhbGxvYyAoMTAyNyk7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykK
ICAgICAgewogICAgICAgIGdzbF92ZWN0b3JfdWludF9zZXQgKGEsIGksICh1bnNpZ25lZCBpbnQp
KDMgKyBpKSk7CiAgICAgICAgZ3NsX3ZlY3Rvcl91aW50X3NldCAoYiwgaSwgKHVuc2lnbmVkIGlu
dCkoMyArIDIgKiBpKSk7CiAgICAgIH0KCiAgICBnc2xfdmVjdG9yX3VpbnRfbWVtY3B5ICh2LCBh
KTsKICAgIGdzbF92ZWN0b3JfdWludF9hZGQgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1
cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAg
ICAgIHVuc2lnbmVkIGludCByID0gZ3NsX3ZlY3Rvcl91aW50X2dldCAodixpKTsKICAgICAgICAg
IHVuc2lnbmVkIGludCB4ID0gZ3NsX3ZlY3Rvcl91aW50X2dldCAoYSxpKTsKICAgICAgICAgIHVu
c2lnbmVkIGludCB5ID0gZ3NsX3ZlY3Rvcl91aW50X2dldCAoYixpKTsKICAgICAgICAgIHVuc2ln
bmVkIGludCB6ID0geCArIHk7CiAgICAgICAgICBpZiAociAhPSB6KQogICAgICAgICAgICBzdGF0
dXMgPSAxOwogICAgICAgIH0KICAgICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfdWlu
dCIgIl9hZGQgYWRkcyBjb3JyZWN0bHkiKTsKICAgIH0KCgogICAgZ3NsX3ZlY3Rvcl91aW50X21l
bWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX3VpbnRfc3ViICh2LCBiKTsKCiAgICB7CiAgICAg
IGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAg
ICB7CiAgICAgICAgICB1bnNpZ25lZCBpbnQgciA9IGdzbF92ZWN0b3JfdWludF9nZXQgKHYsaSk7
CiAgICAgICAgICB1bnNpZ25lZCBpbnQgeCA9IGdzbF92ZWN0b3JfdWludF9nZXQgKGEsaSk7CiAg
ICAgICAgICB1bnNpZ25lZCBpbnQgeSA9IGdzbF92ZWN0b3JfdWludF9nZXQgKGIsaSk7CiAgICAg
ICAgICB1bnNpZ25lZCBpbnQgeiA9IHggLSB5OwogICAgICAgICAgaWYgKHIgIT0geikKICAgICAg
ICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xf
dmVjdG9yX3VpbnQiICJfc3ViIHN1YnRyYWN0cyBjb3JyZWN0bHkiKTsKICAgIH0KCiAgICBnc2xf
dmVjdG9yX3VpbnRfbWVtY3B5ICh2LCBhKTsKICAgIGdzbF92ZWN0b3JfdWludF9tdWwgKHYsIGIp
OwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAy
NzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGludCByID0gZ3NsX3ZlY3Rvcl91
aW50X2dldCAodixpKTsKICAgICAgICAgIHVuc2lnbmVkIGludCB4ID0gZ3NsX3ZlY3Rvcl91aW50
X2dldCAoYSxpKTsKICAgICAgICAgIHVuc2lnbmVkIGludCB5ID0gZ3NsX3ZlY3Rvcl91aW50X2dl
dCAoYixpKTsKICAgICAgICAgIHVuc2lnbmVkIGludCB6ID0geCAqIHk7CiAgICAgICAgICBpZiAo
ciAhPSB6KQogICAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICAgIH0KICAgICAgZ3NsX3Rlc3Qg
KHN0YXR1cywgImdzbF92ZWN0b3JfdWludCIgIl9tdWwgbXVsdGlwbGllcyBjb3JyZWN0bHkiKTsK
ICAgIH0KCiAgICBnc2xfdmVjdG9yX3VpbnRfbWVtY3B5ICh2LCBhKTsKICAgIGdzbF92ZWN0b3Jf
dWludF9kaXYgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3Ig
KGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGludCBy
ID0gZ3NsX3ZlY3Rvcl91aW50X2dldCAodixpKTsKICAgICAgICAgIHVuc2lnbmVkIGludCB4ID0g
Z3NsX3ZlY3Rvcl91aW50X2dldCAoYSxpKTsKICAgICAgICAgIHVuc2lnbmVkIGludCB5ID0gZ3Ns
X3ZlY3Rvcl91aW50X2dldCAoYixpKTsKICAgICAgICAgIHVuc2lnbmVkIGludCB6ID0geCAvIHk7
CiAgICAgICAgICBpZiAoZmFicyhyIC0geikgPiAyICogMS4xOTIwOTI4OTU1MDc4MTI1ZS0wNyAq
IGZhYnMoeikpCiAgICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVz
dCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91aW50IiAiX2RpdiBkaXZpZGVzIGNvcnJlY3RseSIpOwog
ICAgfQoKCiAgICBnc2xfdmVjdG9yX3VpbnRfZnJlZSAoYSk7CiAgICBnc2xfdmVjdG9yX3VpbnRf
ZnJlZSAoYik7CiAgfQoKCgoKICBnc2xfdmVjdG9yX3VpbnRfZnJlZSAodik7Cn0KCgp2b2lkCnRl
c3RfdWludF9iaW5hcnkgKHZvaWQpCnsKICBnc2xfdmVjdG9yX3VpbnQgKiB2ID0gZ3NsX3ZlY3Rv
cl91aW50X2NhbGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3Rvcl91aW50ICogdyA9IGdzbF92ZWN0b3Jf
dWludF9jYWxsb2MgKDEwMjcpOwoKICBzaXplX3QgaTsKCiAgewogICAgRklMRSAqZiA9IGZvcGVu
ICgidGVzdC5kYXQiLCAid2IiKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAg
ICB7CiAgICAgICAgZ3NsX3ZlY3Rvcl91aW50X3NldCAodiwgaSwgKHVuc2lnbmVkIGludCkgKDEw
MjcgLSBpKSk7CiAgICAgIH07CgogICAgZ3NsX3ZlY3Rvcl91aW50X2Z3cml0ZSAoZiwgdik7Cgog
ICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3QuZGF0Iiwg
InJiIik7CgogICAgZ3NsX3ZlY3Rvcl91aW50X2ZyZWFkIChmLCB3KTsKCiAgICBzdGF0dXMgPSAw
OwogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGlmICh3LT5k
YXRhW2ldICE9ICh1bnNpZ25lZCBpbnQpICgxMDI3IC0gaSkpCiAgICAgICAgICBzdGF0dXMgPSAx
OwogICAgICB9OwoKICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX3VpbnQiICJfd3Jp
dGUgYW5kIHJlYWQgd29yayBjb3JyZWN0bHkiKTsKCiAgICBmY2xvc2UgKGYpOwogIH0KCiAgZ3Ns
X3ZlY3Rvcl91aW50X2ZyZWUgKHYpOwogIGdzbF92ZWN0b3JfdWludF9mcmVlICh3KTsKfQoKdm9p
ZAp0ZXN0X3VpbnRfdHJhcCAodm9pZCkKewogIGdzbF92ZWN0b3JfdWludCAqIHYgPSBnc2xfdmVj
dG9yX3VpbnRfYWxsb2MgKDEwMjcpOwoKICBzaXplX3QgaiA9IDA7CiAgZG91YmxlIHg7CgogIHN0
YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl91aW50X3NldCAodiwgaiAtIDEsICh1bnNpZ25lZCBpbnQp
MCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX3VpbnQiICJfc2V0IHRyYXBzIGlu
ZGV4IGJlbG93IGxvd2VyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl91aW50
X3NldCAodiwgMTAyNyArIDEsICh1bnNpZ25lZCBpbnQpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMs
ICJnc2xfdmVjdG9yX3VpbnQiICJfc2V0IHRyYXBzIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5kIik7
CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl91aW50X3NldCAodiwgMTAyNywgKHVuc2lnbmVk
IGludCkwKTsKICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3JfdWludCIgIl9zZXQgdHJh
cHMgaW5kZXggYXQgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICB4ID0gZ3NsX3ZlY3Rv
cl91aW50X2dldCAodiwgaiAtIDEpOwogIGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91
aW50IiAiX2dldCB0cmFwcyBpbmRleCBiZWxvdyBsb3dlciBib3VuZCIpOwogIGdzbF90ZXN0ICh4
ICE9IDAsCiAgICAgICAgICJnc2xfdmVjdG9yX3VpbnQiICJfZ2V0IHJldHVybnMgemVybyBmb3Ig
aW5kZXggYmVsb3cgbG93ZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICB4ID0gZ3NsX3ZlY3Rv
cl91aW50X2dldCAodiwgMTAyNyArIDEpOwogIGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3ZlY3Rv
cl91aW50IiAiX2dldCB0cmFwcyBpbmRleCBhYm92ZSB1cHBlciBib3VuZCIpOwogIGdzbF90ZXN0
ICh4ICE9IDAsCiAgICAgICAgICJnc2xfdmVjdG9yX3VpbnQiICJfZ2V0IHJldHVybnMgemVybyBm
b3IgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICB4ID0gZ3NsX3Zl
Y3Rvcl91aW50X2dldCAodiwgMTAyNyk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9y
X3VpbnQiICJfZ2V0IHRyYXBzIGluZGV4IGF0IHVwcGVyIGJvdW5kIik7CiAgZ3NsX3Rlc3QgKHgg
IT0gMCwKICAgICAgICAgICAgImdzbF92ZWN0b3JfdWludCIgIl9nZXQgcmV0dXJucyB6ZXJvIGZv
ciBpbmRleCBhdCB1cHBlciBib3VuZCIpOwoKICBnc2xfdmVjdG9yX3VpbnRfZnJlZSAodik7Cn0K
IyAxMDYgInRlc3QuYyIgMgojIDEgInRlc3RfaW8uYyIgMQojIDIwICJ0ZXN0X2lvLmMiCnZvaWQg
dGVzdF91aW50X3RleHQgKHZvaWQpOwoKdm9pZAp0ZXN0X3VpbnRfdGV4dCAodm9pZCkKewogIGdz
bF92ZWN0b3JfdWludCAqIHYgPSBnc2xfdmVjdG9yX3VpbnRfYWxsb2MgKDEwMjcpOwogIGdzbF92
ZWN0b3JfdWludCAqIHcgPSBnc2xfdmVjdG9yX3VpbnRfYWxsb2MgKDEwMjcpOwoKICBzaXplX3Qg
aTsKCiAgewogICAgRklMRSAqZiA9IGZvcGVuICgidGVzdC50eHQiLCAidyIpOwoKICAgIGZvciAo
aSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBnc2xfdmVjdG9yX3VpbnRfc2V0
ICh2LCBpLCAodW5zaWduZWQgaW50KSBpKTsKICAgICAgfTsKCiAgICBnc2xfdmVjdG9yX3VpbnRf
ZnByaW50ZiAoZiwgdiwgIiV1Iik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAgIEZJTEUg
KmYgPSBmb3BlbiAoInRlc3QudHh0IiwgInIiKTsKCiAgICBnc2xfdmVjdG9yX3VpbnRfZnNjYW5m
IChmLCB3KTsKCiAgICBzdGF0dXMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykK
ICAgICAgewogICAgICAgIGlmICh3LT5kYXRhW2ldICE9ICh1bnNpZ25lZCBpbnQpIGkpCiAgICAg
ICAgICBzdGF0dXMgPSAxOwogICAgICB9OwoKICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVj
dG9yX3VpbnQiICJfZnByaW50ZiBhbmQgZnNjYW5mIHdvcmsgY29ycmVjdGx5Iik7CgogICAgZmNs
b3NlIChmKTsKICB9CgogIGdzbF92ZWN0b3JfdWludF9mcmVlICh2KTsKICBnc2xfdmVjdG9yX3Vp
bnRfZnJlZSAodyk7Cn0KIyAxMDcgInRlc3QuYyIgMgojIDEgInRlbXBsYXRlc19vZmYuaCIgMQoj
IDEwOCAidGVzdC5jIiAyCgoKCiMgMSAidGVtcGxhdGVzX29uLmgiIDEKIyAxMTIgInRlc3QuYyIg
MgojIDEgInRlc3Rfc291cmNlLmMiIDEKIyAyMCAidGVzdF9zb3VyY2UuYyIKdm9pZCB0ZXN0X2lu
dF9mdW5jICh2b2lkKTsKdm9pZCB0ZXN0X2ludF9iaW5hcnkgKHZvaWQpOwp2b2lkIHRlc3RfaW50
X3RyYXAgKHZvaWQpOwoKdm9pZAp0ZXN0X2ludF9mdW5jICh2b2lkKQp7CiAgZ3NsX3ZlY3Rvcl9p
bnQgKiB2OwogIHNpemVfdCBpOwoKICB2ID0gZ3NsX3ZlY3Rvcl9pbnRfY2FsbG9jICgxMDI3KTsK
CiAgZ3NsX3Rlc3QgKHYtPmRhdGEgPT0gMCwgImdzbF92ZWN0b3JfaW50IiAiX2FsbG9jIHJldHVy
bnMgdmFsaWQgcG9pbnRlciIpOwogIGdzbF90ZXN0ICh2LT5zaXplICE9IDEwMjcsICJnc2xfdmVj
dG9yX2ludCIgIl9hbGxvYyByZXR1cm5zIHZhbGlkIHNpemUiKTsKICBnc2xfdGVzdCAodi0+c3Ry
aWRlICE9IDEsICJnc2xfdmVjdG9yX2ludCIgIl9hbGxvYyByZXR1cm5zIHVuaXQgc3RyaWRlIik7
CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdzbF92ZWN0b3JfaW50
X3NldCAodiwgaSwgKGludCkgaSk7CiAgICB9CgoKICBzdGF0dXMgPSAwOwoKICBmb3IgKGkgPSAw
OyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBpZiAodi0+ZGF0YVtpXSAhPSAoaW50KSBpKQog
ICAgICAgIHN0YXR1cyA9IDE7CiAgICB9OwoKICBnc2xfdGVzdCAoc3RhdHVzLAogICAgICAgICAg
ICAiZ3NsX3ZlY3Rvcl9pbnQiICJfc2V0IiAiIiAiIHdyaXRlcyBpbnRvIGFycmF5IGNvcnJlY3Rs
eSIpOwoKCiAgc3RhdHVzID0gMDsKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgewog
ICAgICBpZiAoZ3NsX3ZlY3Rvcl9pbnRfZ2V0ICh2LCBpKSAhPSAoaW50KSBpKQogICAgICAgIHN0
YXR1cyA9IDE7CiAgICB9OwogIGdzbF90ZXN0IChzdGF0dXMsCiAgICAgICAgICAgICJnc2xfdmVj
dG9yX2ludCIgIl9nZXQiICIiICIgcmVhZHMgZnJvbSBhcnJheSBjb3JyZWN0bHkiKTsKCgoKCiAg
di0+c3RyaWRlID0gMjsKCiAgc3RhdHVzID0gMDsKICBmb3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7
IGkrKykKICAgIHsKICAgICAgaWYgKGdzbF92ZWN0b3JfaW50X2dldCAodiwgaSkgIT0gKGludCkg
KDIgKiBpKSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKICBnc2xfdGVzdCAoc3RhdHVzLCAi
Z3NsX3ZlY3Rvcl9pbnQiICJfZ2V0IiAiIiAiIHJlYWRzIGNvcnJlY3RseSB3aXRoIHN0cmlkZSIp
OwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7IGkrKykKICAgIHsKICAgICAgZ3NsX3ZlY3Rv
cl9pbnRfc2V0ICh2LCBpLCAoaW50KSAoaSArIDEwMDApKTsKICAgIH07CgogIHN0YXR1cyA9IDA7
CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3IC8gMjsgaSsrKQogICAgewogICAgICBpZiAodi0+ZGF0
YVsyICogaV0gIT0gKGludCkgKGkgKyAxMDAwKSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsK
CiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfaW50IiAiX3NldCIgIiIgIiB3cml0ZXMg
Y29ycmVjdGx5IHdpdGggc3RyaWRlIik7CgoKCiAgdi0+c3RyaWRlID0gMSA7CgogIGZvciAoaSA9
IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdzbF92ZWN0b3JfaW50X3NldCAodiwgaSwg
KGludCkgaSk7CiAgICB9CgogIGdzbF92ZWN0b3JfaW50X3N3YXBfZWxlbWVudHMgKHYsIDIsIDUp
IDsKCiAgc3RhdHVzID0gKGdzbF92ZWN0b3JfaW50X2dldCh2LDIpICE9IDUpIDsKICBzdGF0dXMg
fD0gKGdzbF92ZWN0b3JfaW50X2dldCh2LDUpICE9IDIpIDsKCiAgZ3NsX3ZlY3Rvcl9pbnRfc3dh
cF9lbGVtZW50cyAodiwgMiwgNSkgOwoKICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfaW50X2dldCh2
LDIpICE9IDIpIDsKICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfaW50X2dldCh2LDUpICE9IDUpIDsK
CiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfaW50IiAiX3N3YXBfZWxlbWVudHMiICIi
ICIgZXhjaGFuZ2VzIGVsZW1lbnRzIGNvcnJlY3RseSIpIDsKCiAgc3RhdHVzID0gMDsKCiAgZ3Ns
X3ZlY3Rvcl9pbnRfcmV2ZXJzZSAodikgOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQog
ICAgewogICAgICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfaW50X2dldCAodiwgaSkgIT0gKGludCkg
KDEwMjcgLSBpIC0gMSkpOwogICAgfQoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9p
bnQiICJfcmV2ZXJzZSIgIiIgIiByZXZlcnNlcyBlbGVtZW50cyBjb3JyZWN0bHkiKSA7CgogIHsK
ICAgIGludCBleHBfbWF4ID0gZ3NsX3ZlY3Rvcl9pbnRfZ2V0KHYsIDApOwogICAgaW50IGV4cF9t
aW4gPSBnc2xfdmVjdG9yX2ludF9nZXQodiwgMCk7CiAgICBzaXplX3QgZXhwX2ltYXggPSAwLCBl
eHBfaW1pbiA9IDA7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAg
ICAgIGludCBrID0gZ3NsX3ZlY3Rvcl9pbnRfZ2V0ICh2LCBpKSA7CiAgICAgICAgaWYgKGsgPCBl
eHBfbWluKSB7CiAgICAgICAgICBleHBfbWluID0gZ3NsX3ZlY3Rvcl9pbnRfZ2V0ICh2LCBpKTsK
ICAgICAgICAgIGV4cF9pbWluID0gaTsKICAgICAgICB9CiAgICAgIH0KCiAgICBmb3IgKGkgPSAw
OyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgaW50IGsgPSBnc2xfdmVjdG9yX2ludF9n
ZXQgKHYsIGkpIDsKICAgICAgICBpZiAoayA+IGV4cF9tYXgpIHsKICAgICAgICAgIGV4cF9tYXgg
PSBnc2xfdmVjdG9yX2ludF9nZXQgKHYsIGkpIDsKICAgICAgICAgIGV4cF9pbWF4ID0gaTsKICAg
ICAgICB9CiAgICAgIH0KCiAgICB7CiAgICAgIGludCBtYXggPSBnc2xfdmVjdG9yX2ludF9tYXgg
KHYpIDsKCiAgICAgIGdzbF90ZXN0IChtYXggIT0gZXhwX21heCwgImdzbF92ZWN0b3JfaW50IiAi
X21heCByZXR1cm5zIGNvcnJlY3QgbWF4aW11bSB2YWx1ZSIpOwogICAgfQoKICAgIHsKICAgICAg
aW50IG1pbiA9IGdzbF92ZWN0b3JfaW50X21pbiAodikgOwoKICAgICAgZ3NsX3Rlc3QgKG1pbiAh
PSBleHBfbWluLCAiZ3NsX3ZlY3Rvcl9pbnQiICJfbWluIHJldHVybnMgY29ycmVjdCBtaW5pbXVt
IHZhbHVlIik7CiAgICB9CgogICAgewogICAgICBpbnQgbWluLCBtYXg7CiAgICAgIGdzbF92ZWN0
b3JfaW50X21pbm1heCAodiwgJm1pbiwgJm1heCk7CgogICAgICBnc2xfdGVzdCAobWF4ICE9IGV4
cF9tYXgsICJnc2xfdmVjdG9yX2ludCIgIl9taW5tYXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0g
dmFsdWUiKTsKICAgICAgZ3NsX3Rlc3QgKG1pbiAhPSBleHBfbWluLCAiZ3NsX3ZlY3Rvcl9pbnQi
ICJfbWlubWF4IHJldHVybnMgY29ycmVjdCBtaW5pbXVtIHZhbHVlIik7CiAgICB9CgoKICAgIHsK
ICAgICAgc2l6ZV90IGltYXggPSBnc2xfdmVjdG9yX2ludF9tYXhfaW5kZXggKHYpIDsKCiAgICAg
IGdzbF90ZXN0IChpbWF4ICE9IGV4cF9pbWF4LCAiZ3NsX3ZlY3Rvcl9pbnQiICJfbWF4X2luZGV4
IHJldHVybnMgY29ycmVjdCBtYXhpbXVtIGkiKTsKICAgIH0KCiAgICB7CiAgICAgIHNpemVfdCBp
bWluID0gZ3NsX3ZlY3Rvcl9pbnRfbWluX2luZGV4ICh2KSA7CgogICAgICBnc2xfdGVzdCAoaW1p
biAhPSBleHBfaW1pbiwgImdzbF92ZWN0b3JfaW50IiAiX21pbl9pbmRleCByZXR1cm5zIGNvcnJl
Y3QgbWluaW11bSBpIik7CiAgICB9CgogICAgewogICAgICBzaXplX3QgaW1pbiwgaW1heDsKCiAg
ICAgIGdzbF92ZWN0b3JfaW50X21pbm1heF9pbmRleCAodiwgJmltaW4sICZpbWF4KTsKCiAgICAg
IGdzbF90ZXN0IChpbWF4ICE9IGV4cF9pbWF4LCAiZ3NsX3ZlY3Rvcl9pbnQiICJfbWlubWF4X2lu
ZGV4IHJldHVybnMgY29ycmVjdCBtYXhpbXVtIGkiKTsKICAgICAgZ3NsX3Rlc3QgKGltaW4gIT0g
ZXhwX2ltaW4sICJnc2xfdmVjdG9yX2ludCIgIl9taW5tYXhfaW5kZXggcmV0dXJucyBjb3JyZWN0
IG1pbmltdW0gaSIpOwogICAgfQogIH0KCgogIHsKICAgIGdzbF92ZWN0b3JfaW50ICogYSA9IGdz
bF92ZWN0b3JfaW50X2NhbGxvYyAoMTAyNyk7CiAgICBnc2xfdmVjdG9yX2ludCAqIGIgPSBnc2xf
dmVjdG9yX2ludF9jYWxsb2MgKDEwMjcpOwoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKysp
CiAgICAgIHsKICAgICAgICBnc2xfdmVjdG9yX2ludF9zZXQgKGEsIGksIChpbnQpKDMgKyBpKSk7
CiAgICAgICAgZ3NsX3ZlY3Rvcl9pbnRfc2V0IChiLCBpLCAoaW50KSgzICsgMiAqIGkpKTsKICAg
ICAgfQoKICAgIGdzbF92ZWN0b3JfaW50X21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX2lu
dF9hZGQgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkg
PSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIGludCByID0gZ3NsX3ZlY3Rv
cl9pbnRfZ2V0ICh2LGkpOwogICAgICAgICAgaW50IHggPSBnc2xfdmVjdG9yX2ludF9nZXQgKGEs
aSk7CiAgICAgICAgICBpbnQgeSA9IGdzbF92ZWN0b3JfaW50X2dldCAoYixpKTsKICAgICAgICAg
IGludCB6ID0geCArIHk7CiAgICAgICAgICBpZiAociAhPSB6KQogICAgICAgICAgICBzdGF0dXMg
PSAxOwogICAgICAgIH0KICAgICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfaW50IiAi
X2FkZCBhZGRzIGNvcnJlY3RseSIpOwogICAgfQoKCiAgICBnc2xfdmVjdG9yX2ludF9tZW1jcHkg
KHYsIGEpOwogICAgZ3NsX3ZlY3Rvcl9pbnRfc3ViICh2LCBiKTsKCiAgICB7CiAgICAgIGludCBz
dGF0dXMgPSAwOwoKICAgICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgICB7CiAg
ICAgICAgICBpbnQgciA9IGdzbF92ZWN0b3JfaW50X2dldCAodixpKTsKICAgICAgICAgIGludCB4
ID0gZ3NsX3ZlY3Rvcl9pbnRfZ2V0IChhLGkpOwogICAgICAgICAgaW50IHkgPSBnc2xfdmVjdG9y
X2ludF9nZXQgKGIsaSk7CiAgICAgICAgICBpbnQgeiA9IHggLSB5OwogICAgICAgICAgaWYgKHIg
IT0geikKICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAgIGdzbF90ZXN0IChz
dGF0dXMsICJnc2xfdmVjdG9yX2ludCIgIl9zdWIgc3VidHJhY3RzIGNvcnJlY3RseSIpOwogICAg
fQoKICAgIGdzbF92ZWN0b3JfaW50X21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX2ludF9t
dWwgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAw
OyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIGludCByID0gZ3NsX3ZlY3Rvcl9p
bnRfZ2V0ICh2LGkpOwogICAgICAgICAgaW50IHggPSBnc2xfdmVjdG9yX2ludF9nZXQgKGEsaSk7
CiAgICAgICAgICBpbnQgeSA9IGdzbF92ZWN0b3JfaW50X2dldCAoYixpKTsKICAgICAgICAgIGlu
dCB6ID0geCAqIHk7CiAgICAgICAgICBpZiAociAhPSB6KQogICAgICAgICAgICBzdGF0dXMgPSAx
OwogICAgICAgIH0KICAgICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfaW50IiAiX211
bCBtdWx0aXBsaWVzIGNvcnJlY3RseSIpOwogICAgfQoKICAgIGdzbF92ZWN0b3JfaW50X21lbWNw
eSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX2ludF9kaXYgKHYsIGIpOwoKICAgIHsKICAgICAgaW50
IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsK
ICAgICAgICAgIGludCByID0gZ3NsX3ZlY3Rvcl9pbnRfZ2V0ICh2LGkpOwogICAgICAgICAgaW50
IHggPSBnc2xfdmVjdG9yX2ludF9nZXQgKGEsaSk7CiAgICAgICAgICBpbnQgeSA9IGdzbF92ZWN0
b3JfaW50X2dldCAoYixpKTsKICAgICAgICAgIGludCB6ID0geCAvIHk7CiAgICAgICAgICBpZiAo
ZmFicyhyIC0geikgPiAyICogMS4xOTIwOTI4OTU1MDc4MTI1ZS0wNyAqIGZhYnMoeikpCiAgICAg
ICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3Ns
X3ZlY3Rvcl9pbnQiICJfZGl2IGRpdmlkZXMgY29ycmVjdGx5Iik7CiAgICB9CgoKICAgIGdzbF92
ZWN0b3JfaW50X2ZyZWUgKGEpOwogICAgZ3NsX3ZlY3Rvcl9pbnRfZnJlZSAoYik7CiAgfQoKCgoK
ICBnc2xfdmVjdG9yX2ludF9mcmVlICh2KTsKfQoKCnZvaWQKdGVzdF9pbnRfYmluYXJ5ICh2b2lk
KQp7CiAgZ3NsX3ZlY3Rvcl9pbnQgKiB2ID0gZ3NsX3ZlY3Rvcl9pbnRfY2FsbG9jICgxMDI3KTsK
ICBnc2xfdmVjdG9yX2ludCAqIHcgPSBnc2xfdmVjdG9yX2ludF9jYWxsb2MgKDEwMjcpOwoKICBz
aXplX3QgaTsKCiAgewogICAgRklMRSAqZiA9IGZvcGVuICgidGVzdC5kYXQiLCAid2IiKTsKCiAg
ICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgZ3NsX3ZlY3Rvcl9p
bnRfc2V0ICh2LCBpLCAoaW50KSAoMTAyNyAtIGkpKTsKICAgICAgfTsKCiAgICBnc2xfdmVjdG9y
X2ludF9md3JpdGUgKGYsIHYpOwoKICAgIGZjbG9zZSAoZik7CiAgfQoKICB7CiAgICBGSUxFICpm
ID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJyYiIpOwoKICAgIGdzbF92ZWN0b3JfaW50X2ZyZWFkIChm
LCB3KTsKCiAgICBzdGF0dXMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAg
ICAgewogICAgICAgIGlmICh3LT5kYXRhW2ldICE9IChpbnQpICgxMDI3IC0gaSkpCiAgICAgICAg
ICBzdGF0dXMgPSAxOwogICAgICB9OwoKICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9y
X2ludCIgIl93cml0ZSBhbmQgcmVhZCB3b3JrIGNvcnJlY3RseSIpOwoKICAgIGZjbG9zZSAoZik7
CiAgfQoKICBnc2xfdmVjdG9yX2ludF9mcmVlICh2KTsKICBnc2xfdmVjdG9yX2ludF9mcmVlICh3
KTsKfQoKdm9pZAp0ZXN0X2ludF90cmFwICh2b2lkKQp7CiAgZ3NsX3ZlY3Rvcl9pbnQgKiB2ID0g
Z3NsX3ZlY3Rvcl9pbnRfYWxsb2MgKDEwMjcpOwoKICBzaXplX3QgaiA9IDA7CiAgZG91YmxlIHg7
CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl9pbnRfc2V0ICh2LCBqIC0gMSwgKGludCkwKTsK
ICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3JfaW50IiAiX3NldCB0cmFwcyBpbmRleCBi
ZWxvdyBsb3dlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIGdzbF92ZWN0b3JfaW50X3NldCAo
diwgMTAyNyArIDEsIChpbnQpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2lu
dCIgIl9zZXQgdHJhcHMgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsK
ICBnc2xfdmVjdG9yX2ludF9zZXQgKHYsIDEwMjcsIChpbnQpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0
dXMsICJnc2xfdmVjdG9yX2ludCIgIl9zZXQgdHJhcHMgaW5kZXggYXQgdXBwZXIgYm91bmQiKTsK
CiAgc3RhdHVzID0gMDsKICB4ID0gZ3NsX3ZlY3Rvcl9pbnRfZ2V0ICh2LCBqIC0gMSk7CiAgZ3Ns
X3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2ludCIgIl9nZXQgdHJhcHMgaW5kZXggYmVsb3cg
bG93ZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoeCAhPSAwLAogICAgICAgICAiZ3NsX3ZlY3Rvcl9p
bnQiICJfZ2V0IHJldHVybnMgemVybyBmb3IgaW5kZXggYmVsb3cgbG93ZXIgYm91bmQiKTsKCiAg
c3RhdHVzID0gMDsKICB4ID0gZ3NsX3ZlY3Rvcl9pbnRfZ2V0ICh2LCAxMDI3ICsgMSk7CiAgZ3Ns
X3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2ludCIgIl9nZXQgdHJhcHMgaW5kZXggYWJvdmUg
dXBwZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoeCAhPSAwLAogICAgICAgICAiZ3NsX3ZlY3Rvcl9p
bnQiICJfZ2V0IHJldHVybnMgemVybyBmb3IgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKCiAg
c3RhdHVzID0gMDsKICB4ID0gZ3NsX3ZlY3Rvcl9pbnRfZ2V0ICh2LCAxMDI3KTsKICBnc2xfdGVz
dCAoIXN0YXR1cywgImdzbF92ZWN0b3JfaW50IiAiX2dldCB0cmFwcyBpbmRleCBhdCB1cHBlciBi
b3VuZCIpOwogIGdzbF90ZXN0ICh4ICE9IDAsCiAgICAgICAgICAgICJnc2xfdmVjdG9yX2ludCIg
Il9nZXQgcmV0dXJucyB6ZXJvIGZvciBpbmRleCBhdCB1cHBlciBib3VuZCIpOwoKICBnc2xfdmVj
dG9yX2ludF9mcmVlICh2KTsKfQojIDExMyAidGVzdC5jIiAyCiMgMSAidGVzdF9pby5jIiAxCiMg
MjAgInRlc3RfaW8uYyIKdm9pZCB0ZXN0X2ludF90ZXh0ICh2b2lkKTsKCnZvaWQKdGVzdF9pbnRf
dGV4dCAodm9pZCkKewogIGdzbF92ZWN0b3JfaW50ICogdiA9IGdzbF92ZWN0b3JfaW50X2FsbG9j
ICgxMDI3KTsKICBnc2xfdmVjdG9yX2ludCAqIHcgPSBnc2xfdmVjdG9yX2ludF9hbGxvYyAoMTAy
Nyk7CgogIHNpemVfdCBpOwoKICB7CiAgICBGSUxFICpmID0gZm9wZW4gKCJ0ZXN0LnR4dCIsICJ3
Iik7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGdzbF92
ZWN0b3JfaW50X3NldCAodiwgaSwgKGludCkgaSk7CiAgICAgIH07CgogICAgZ3NsX3ZlY3Rvcl9p
bnRfZnByaW50ZiAoZiwgdiwgIiVkIik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAgIEZJ
TEUgKmYgPSBmb3BlbiAoInRlc3QudHh0IiwgInIiKTsKCiAgICBnc2xfdmVjdG9yX2ludF9mc2Nh
bmYgKGYsIHcpOwoKICAgIHN0YXR1cyA9IDA7CiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsr
KQogICAgICB7CiAgICAgICAgaWYgKHctPmRhdGFbaV0gIT0gKGludCkgaSkKICAgICAgICAgIHN0
YXR1cyA9IDE7CiAgICAgIH07CgogICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfaW50
IiAiX2ZwcmludGYgYW5kIGZzY2FuZiB3b3JrIGNvcnJlY3RseSIpOwoKICAgIGZjbG9zZSAoZik7
CiAgfQoKICBnc2xfdmVjdG9yX2ludF9mcmVlICh2KTsKICBnc2xfdmVjdG9yX2ludF9mcmVlICh3
KTsKfQojIDExNCAidGVzdC5jIiAyCiMgMSAidGVtcGxhdGVzX29mZi5oIiAxCiMgMTE1ICJ0ZXN0
LmMiIDIKCgoKIyAxICJ0ZW1wbGF0ZXNfb24uaCIgMQojIDExOSAidGVzdC5jIiAyCiMgMSAidGVz
dF9zb3VyY2UuYyIgMQojIDIwICJ0ZXN0X3NvdXJjZS5jIgp2b2lkIHRlc3RfdXNob3J0X2Z1bmMg
KHZvaWQpOwp2b2lkIHRlc3RfdXNob3J0X2JpbmFyeSAodm9pZCk7CnZvaWQgdGVzdF91c2hvcnRf
dHJhcCAodm9pZCk7Cgp2b2lkCnRlc3RfdXNob3J0X2Z1bmMgKHZvaWQpCnsKICBnc2xfdmVjdG9y
X3VzaG9ydCAqIHY7CiAgc2l6ZV90IGk7CgogIHYgPSBnc2xfdmVjdG9yX3VzaG9ydF9jYWxsb2Mg
KDEwMjcpOwoKICBnc2xfdGVzdCAodi0+ZGF0YSA9PSAwLCAiZ3NsX3ZlY3Rvcl91c2hvcnQiICJf
YWxsb2MgcmV0dXJucyB2YWxpZCBwb2ludGVyIik7CiAgZ3NsX3Rlc3QgKHYtPnNpemUgIT0gMTAy
NywgImdzbF92ZWN0b3JfdXNob3J0IiAiX2FsbG9jIHJldHVybnMgdmFsaWQgc2l6ZSIpOwogIGdz
bF90ZXN0ICh2LT5zdHJpZGUgIT0gMSwgImdzbF92ZWN0b3JfdXNob3J0IiAiX2FsbG9jIHJldHVy
bnMgdW5pdCBzdHJpZGUiKTsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAg
ICAgZ3NsX3ZlY3Rvcl91c2hvcnRfc2V0ICh2LCBpLCAodW5zaWduZWQgc2hvcnQpIGkpOwogICAg
fQoKCiAgc3RhdHVzID0gMDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAg
ICAgaWYgKHYtPmRhdGFbaV0gIT0gKHVuc2lnbmVkIHNob3J0KSBpKQogICAgICAgIHN0YXR1cyA9
IDE7CiAgICB9OwoKICBnc2xfdGVzdCAoc3RhdHVzLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl91
c2hvcnQiICJfc2V0IiAiIiAiIHdyaXRlcyBpbnRvIGFycmF5IGNvcnJlY3RseSIpOwoKCiAgc3Rh
dHVzID0gMDsKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBpZiAoZ3Ns
X3ZlY3Rvcl91c2hvcnRfZ2V0ICh2LCBpKSAhPSAodW5zaWduZWQgc2hvcnQpIGkpCiAgICAgICAg
c3RhdHVzID0gMTsKICAgIH07CiAgZ3NsX3Rlc3QgKHN0YXR1cywKICAgICAgICAgICAgImdzbF92
ZWN0b3JfdXNob3J0IiAiX2dldCIgIiIgIiByZWFkcyBmcm9tIGFycmF5IGNvcnJlY3RseSIpOwoK
CgoKICB2LT5zdHJpZGUgPSAyOwoKICBzdGF0dXMgPSAwOwogIGZvciAoaSA9IDA7IGkgPCAxMDI3
IC8gMjsgaSsrKQogICAgewogICAgICBpZiAoZ3NsX3ZlY3Rvcl91c2hvcnRfZ2V0ICh2LCBpKSAh
PSAodW5zaWduZWQgc2hvcnQpICgyICogaSkpCiAgICAgICAgc3RhdHVzID0gMTsKICAgIH07CiAg
Z3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfdXNob3J0IiAiX2dldCIgIiIgIiByZWFkcyBj
b3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjcgLyAyOyBpKysp
CiAgICB7CiAgICAgIGdzbF92ZWN0b3JfdXNob3J0X3NldCAodiwgaSwgKHVuc2lnbmVkIHNob3J0
KSAoaSArIDEwMDApKTsKICAgIH07CgogIHN0YXR1cyA9IDA7CgogIGZvciAoaSA9IDA7IGkgPCAx
MDI3IC8gMjsgaSsrKQogICAgewogICAgICBpZiAodi0+ZGF0YVsyICogaV0gIT0gKHVuc2lnbmVk
IHNob3J0KSAoaSArIDEwMDApKQogICAgICAgIHN0YXR1cyA9IDE7CiAgICB9OwoKICBnc2xfdGVz
dCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91c2hvcnQiICJfc2V0IiAiIiAiIHdyaXRlcyBjb3JyZWN0
bHkgd2l0aCBzdHJpZGUiKTsKCgoKICB2LT5zdHJpZGUgPSAxIDsKCiAgZm9yIChpID0gMDsgaSA8
IDEwMjc7IGkrKykKICAgIHsKICAgICAgZ3NsX3ZlY3Rvcl91c2hvcnRfc2V0ICh2LCBpLCAodW5z
aWduZWQgc2hvcnQpIGkpOwogICAgfQoKICBnc2xfdmVjdG9yX3VzaG9ydF9zd2FwX2VsZW1lbnRz
ICh2LCAyLCA1KSA7CgogIHN0YXR1cyA9IChnc2xfdmVjdG9yX3VzaG9ydF9nZXQodiwyKSAhPSA1
KSA7CiAgc3RhdHVzIHw9IChnc2xfdmVjdG9yX3VzaG9ydF9nZXQodiw1KSAhPSAyKSA7CgogIGdz
bF92ZWN0b3JfdXNob3J0X3N3YXBfZWxlbWVudHMgKHYsIDIsIDUpIDsKCiAgc3RhdHVzIHw9IChn
c2xfdmVjdG9yX3VzaG9ydF9nZXQodiwyKSAhPSAyKSA7CiAgc3RhdHVzIHw9IChnc2xfdmVjdG9y
X3VzaG9ydF9nZXQodiw1KSAhPSA1KSA7CgogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9y
X3VzaG9ydCIgIl9zd2FwX2VsZW1lbnRzIiAiIiAiIGV4Y2hhbmdlcyBlbGVtZW50cyBjb3JyZWN0
bHkiKSA7CgogIHN0YXR1cyA9IDA7CgogIGdzbF92ZWN0b3JfdXNob3J0X3JldmVyc2UgKHYpIDsK
CiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgc3RhdHVzIHw9IChnc2xf
dmVjdG9yX3VzaG9ydF9nZXQgKHYsIGkpICE9ICh1bnNpZ25lZCBzaG9ydCkgKDEwMjcgLSBpIC0g
MSkpOwogICAgfQoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91c2hvcnQiICJfcmV2
ZXJzZSIgIiIgIiByZXZlcnNlcyBlbGVtZW50cyBjb3JyZWN0bHkiKSA7CgogIHsKICAgIHVuc2ln
bmVkIHNob3J0IGV4cF9tYXggPSBnc2xfdmVjdG9yX3VzaG9ydF9nZXQodiwgMCk7CiAgICB1bnNp
Z25lZCBzaG9ydCBleHBfbWluID0gZ3NsX3ZlY3Rvcl91c2hvcnRfZ2V0KHYsIDApOwogICAgc2l6
ZV90IGV4cF9pbWF4ID0gMCwgZXhwX2ltaW4gPSAwOwoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3
OyBpKyspCiAgICAgIHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBrID0gZ3NsX3ZlY3Rvcl91c2hv
cnRfZ2V0ICh2LCBpKSA7CiAgICAgICAgaWYgKGsgPCBleHBfbWluKSB7CiAgICAgICAgICBleHBf
bWluID0gZ3NsX3ZlY3Rvcl91c2hvcnRfZ2V0ICh2LCBpKTsKICAgICAgICAgIGV4cF9pbWluID0g
aTsKICAgICAgICB9CiAgICAgIH0KCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAg
ICB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgayA9IGdzbF92ZWN0b3JfdXNob3J0X2dldCAodiwg
aSkgOwogICAgICAgIGlmIChrID4gZXhwX21heCkgewogICAgICAgICAgZXhwX21heCA9IGdzbF92
ZWN0b3JfdXNob3J0X2dldCAodiwgaSkgOwogICAgICAgICAgZXhwX2ltYXggPSBpOwogICAgICAg
IH0KICAgICAgfQoKICAgIHsKICAgICAgdW5zaWduZWQgc2hvcnQgbWF4ID0gZ3NsX3ZlY3Rvcl91
c2hvcnRfbWF4ICh2KSA7CgogICAgICBnc2xfdGVzdCAobWF4ICE9IGV4cF9tYXgsICJnc2xfdmVj
dG9yX3VzaG9ydCIgIl9tYXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0gdmFsdWUiKTsKICAgIH0K
CiAgICB7CiAgICAgIHVuc2lnbmVkIHNob3J0IG1pbiA9IGdzbF92ZWN0b3JfdXNob3J0X21pbiAo
dikgOwoKICAgICAgZ3NsX3Rlc3QgKG1pbiAhPSBleHBfbWluLCAiZ3NsX3ZlY3Rvcl91c2hvcnQi
ICJfbWluIHJldHVybnMgY29ycmVjdCBtaW5pbXVtIHZhbHVlIik7CiAgICB9CgogICAgewogICAg
ICB1bnNpZ25lZCBzaG9ydCBtaW4sIG1heDsKICAgICAgZ3NsX3ZlY3Rvcl91c2hvcnRfbWlubWF4
ICh2LCAmbWluLCAmbWF4KTsKCiAgICAgIGdzbF90ZXN0IChtYXggIT0gZXhwX21heCwgImdzbF92
ZWN0b3JfdXNob3J0IiAiX21pbm1heCByZXR1cm5zIGNvcnJlY3QgbWF4aW11bSB2YWx1ZSIpOwog
ICAgICBnc2xfdGVzdCAobWluICE9IGV4cF9taW4sICJnc2xfdmVjdG9yX3VzaG9ydCIgIl9taW5t
YXggcmV0dXJucyBjb3JyZWN0IG1pbmltdW0gdmFsdWUiKTsKICAgIH0KCgogICAgewogICAgICBz
aXplX3QgaW1heCA9IGdzbF92ZWN0b3JfdXNob3J0X21heF9pbmRleCAodikgOwoKICAgICAgZ3Ns
X3Rlc3QgKGltYXggIT0gZXhwX2ltYXgsICJnc2xfdmVjdG9yX3VzaG9ydCIgIl9tYXhfaW5kZXgg
cmV0dXJucyBjb3JyZWN0IG1heGltdW0gaSIpOwogICAgfQoKICAgIHsKICAgICAgc2l6ZV90IGlt
aW4gPSBnc2xfdmVjdG9yX3VzaG9ydF9taW5faW5kZXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChp
bWluICE9IGV4cF9pbWluLCAiZ3NsX3ZlY3Rvcl91c2hvcnQiICJfbWluX2luZGV4IHJldHVybnMg
Y29ycmVjdCBtaW5pbXVtIGkiKTsKICAgIH0KCiAgICB7CiAgICAgIHNpemVfdCBpbWluLCBpbWF4
OwoKICAgICAgZ3NsX3ZlY3Rvcl91c2hvcnRfbWlubWF4X2luZGV4ICh2LCAmaW1pbiwgJmltYXgp
OwoKICAgICAgZ3NsX3Rlc3QgKGltYXggIT0gZXhwX2ltYXgsICJnc2xfdmVjdG9yX3VzaG9ydCIg
Il9taW5tYXhfaW5kZXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0gaSIpOwogICAgICBnc2xfdGVz
dCAoaW1pbiAhPSBleHBfaW1pbiwgImdzbF92ZWN0b3JfdXNob3J0IiAiX21pbm1heF9pbmRleCBy
ZXR1cm5zIGNvcnJlY3QgbWluaW11bSBpIik7CiAgICB9CiAgfQoKCiAgewogICAgZ3NsX3ZlY3Rv
cl91c2hvcnQgKiBhID0gZ3NsX3ZlY3Rvcl91c2hvcnRfY2FsbG9jICgxMDI3KTsKICAgIGdzbF92
ZWN0b3JfdXNob3J0ICogYiA9IGdzbF92ZWN0b3JfdXNob3J0X2NhbGxvYyAoMTAyNyk7CgogICAg
Zm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGdzbF92ZWN0b3JfdXNo
b3J0X3NldCAoYSwgaSwgKHVuc2lnbmVkIHNob3J0KSgzICsgaSkpOwogICAgICAgIGdzbF92ZWN0
b3JfdXNob3J0X3NldCAoYiwgaSwgKHVuc2lnbmVkIHNob3J0KSgzICsgMiAqIGkpKTsKICAgICAg
fQoKICAgIGdzbF92ZWN0b3JfdXNob3J0X21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX3Vz
aG9ydF9hZGQgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3Ig
KGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIHNob3J0
IHIgPSBnc2xfdmVjdG9yX3VzaG9ydF9nZXQgKHYsaSk7CiAgICAgICAgICB1bnNpZ25lZCBzaG9y
dCB4ID0gZ3NsX3ZlY3Rvcl91c2hvcnRfZ2V0IChhLGkpOwogICAgICAgICAgdW5zaWduZWQgc2hv
cnQgeSA9IGdzbF92ZWN0b3JfdXNob3J0X2dldCAoYixpKTsKICAgICAgICAgIHVuc2lnbmVkIHNo
b3J0IHogPSB4ICsgeTsKICAgICAgICAgIGlmIChyICE9IHopCiAgICAgICAgICAgIHN0YXR1cyA9
IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91c2hvcnQi
ICJfYWRkIGFkZHMgY29ycmVjdGx5Iik7CiAgICB9CgoKICAgIGdzbF92ZWN0b3JfdXNob3J0X21l
bWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX3VzaG9ydF9zdWIgKHYsIGIpOwoKICAgIHsKICAg
ICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAg
ICAgIHsKICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHIgPSBnc2xfdmVjdG9yX3VzaG9ydF9nZXQg
KHYsaSk7CiAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB4ID0gZ3NsX3ZlY3Rvcl91c2hvcnRfZ2V0
IChhLGkpOwogICAgICAgICAgdW5zaWduZWQgc2hvcnQgeSA9IGdzbF92ZWN0b3JfdXNob3J0X2dl
dCAoYixpKTsKICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHogPSB4IC0geTsKICAgICAgICAgIGlm
IChyICE9IHopCiAgICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVz
dCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91c2hvcnQiICJfc3ViIHN1YnRyYWN0cyBjb3JyZWN0bHki
KTsKICAgIH0KCiAgICBnc2xfdmVjdG9yX3VzaG9ydF9tZW1jcHkgKHYsIGEpOwogICAgZ3NsX3Zl
Y3Rvcl91c2hvcnRfbXVsICh2LCBiKTsKCiAgICB7CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAg
ICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgICB7CiAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCByID0gZ3NsX3ZlY3Rvcl91c2hvcnRfZ2V0ICh2LGkpOwogICAgICAgICAgdW5zaWdu
ZWQgc2hvcnQgeCA9IGdzbF92ZWN0b3JfdXNob3J0X2dldCAoYSxpKTsKICAgICAgICAgIHVuc2ln
bmVkIHNob3J0IHkgPSBnc2xfdmVjdG9yX3VzaG9ydF9nZXQgKGIsaSk7CiAgICAgICAgICB1bnNp
Z25lZCBzaG9ydCB6ID0geCAqIHk7CiAgICAgICAgICBpZiAociAhPSB6KQogICAgICAgICAgICBz
dGF0dXMgPSAxOwogICAgICAgIH0KICAgICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3Jf
dXNob3J0IiAiX211bCBtdWx0aXBsaWVzIGNvcnJlY3RseSIpOwogICAgfQoKICAgIGdzbF92ZWN0
b3JfdXNob3J0X21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX3VzaG9ydF9kaXYgKHYsIGIp
OwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAy
NzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHIgPSBnc2xfdmVjdG9y
X3VzaG9ydF9nZXQgKHYsaSk7CiAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB4ID0gZ3NsX3ZlY3Rv
cl91c2hvcnRfZ2V0IChhLGkpOwogICAgICAgICAgdW5zaWduZWQgc2hvcnQgeSA9IGdzbF92ZWN0
b3JfdXNob3J0X2dldCAoYixpKTsKICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHogPSB4IC8geTsK
ICAgICAgICAgIGlmIChmYWJzKHIgLSB6KSA+IDIgKiAxLjE5MjA5Mjg5NTUwNzgxMjVlLTA3ICog
ZmFicyh6KSkKICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAgIGdzbF90ZXN0
IChzdGF0dXMsICJnc2xfdmVjdG9yX3VzaG9ydCIgIl9kaXYgZGl2aWRlcyBjb3JyZWN0bHkiKTsK
ICAgIH0KCgogICAgZ3NsX3ZlY3Rvcl91c2hvcnRfZnJlZSAoYSk7CiAgICBnc2xfdmVjdG9yX3Vz
aG9ydF9mcmVlIChiKTsKICB9CgoKCgogIGdzbF92ZWN0b3JfdXNob3J0X2ZyZWUgKHYpOwp9CgoK
dm9pZAp0ZXN0X3VzaG9ydF9iaW5hcnkgKHZvaWQpCnsKICBnc2xfdmVjdG9yX3VzaG9ydCAqIHYg
PSBnc2xfdmVjdG9yX3VzaG9ydF9jYWxsb2MgKDEwMjcpOwogIGdzbF92ZWN0b3JfdXNob3J0ICog
dyA9IGdzbF92ZWN0b3JfdXNob3J0X2NhbGxvYyAoMTAyNyk7CgogIHNpemVfdCBpOwoKICB7CiAg
ICBGSUxFICpmID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJ3YiIpOwoKICAgIGZvciAoaSA9IDA7IGkg
PCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBnc2xfdmVjdG9yX3VzaG9ydF9zZXQgKHYsIGks
ICh1bnNpZ25lZCBzaG9ydCkgKDEwMjcgLSBpKSk7CiAgICAgIH07CgogICAgZ3NsX3ZlY3Rvcl91
c2hvcnRfZndyaXRlIChmLCB2KTsKCiAgICBmY2xvc2UgKGYpOwogIH0KCiAgewogICAgRklMRSAq
ZiA9IGZvcGVuICgidGVzdC5kYXQiLCAicmIiKTsKCiAgICBnc2xfdmVjdG9yX3VzaG9ydF9mcmVh
ZCAoZiwgdyk7CgogICAgc3RhdHVzID0gMDsKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKysp
CiAgICAgIHsKICAgICAgICBpZiAody0+ZGF0YVtpXSAhPSAodW5zaWduZWQgc2hvcnQpICgxMDI3
IC0gaSkpCiAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICB9OwoKICAgIGdzbF90ZXN0IChzdGF0
dXMsICJnc2xfdmVjdG9yX3VzaG9ydCIgIl93cml0ZSBhbmQgcmVhZCB3b3JrIGNvcnJlY3RseSIp
OwoKICAgIGZjbG9zZSAoZik7CiAgfQoKICBnc2xfdmVjdG9yX3VzaG9ydF9mcmVlICh2KTsKICBn
c2xfdmVjdG9yX3VzaG9ydF9mcmVlICh3KTsKfQoKdm9pZAp0ZXN0X3VzaG9ydF90cmFwICh2b2lk
KQp7CiAgZ3NsX3ZlY3Rvcl91c2hvcnQgKiB2ID0gZ3NsX3ZlY3Rvcl91c2hvcnRfYWxsb2MgKDEw
MjcpOwoKICBzaXplX3QgaiA9IDA7CiAgZG91YmxlIHg7CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3Zl
Y3Rvcl91c2hvcnRfc2V0ICh2LCBqIC0gMSwgKHVuc2lnbmVkIHNob3J0KTApOwogIGdzbF90ZXN0
ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91c2hvcnQiICJfc2V0IHRyYXBzIGluZGV4IGJlbG93IGxv
d2VyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl91c2hvcnRfc2V0ICh2LCAx
MDI3ICsgMSwgKHVuc2lnbmVkIHNob3J0KTApOwogIGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3Zl
Y3Rvcl91c2hvcnQiICJfc2V0IHRyYXBzIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5kIik7CgogIHN0
YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl91c2hvcnRfc2V0ICh2LCAxMDI3LCAodW5zaWduZWQgc2hv
cnQpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX3VzaG9ydCIgIl9zZXQgdHJh
cHMgaW5kZXggYXQgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICB4ID0gZ3NsX3ZlY3Rv
cl91c2hvcnRfZ2V0ICh2LCBqIC0gMSk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9y
X3VzaG9ydCIgIl9nZXQgdHJhcHMgaW5kZXggYmVsb3cgbG93ZXIgYm91bmQiKTsKICBnc2xfdGVz
dCAoeCAhPSAwLAogICAgICAgICAiZ3NsX3ZlY3Rvcl91c2hvcnQiICJfZ2V0IHJldHVybnMgemVy
byBmb3IgaW5kZXggYmVsb3cgbG93ZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICB4ID0gZ3Ns
X3ZlY3Rvcl91c2hvcnRfZ2V0ICh2LCAxMDI3ICsgMSk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJn
c2xfdmVjdG9yX3VzaG9ydCIgIl9nZXQgdHJhcHMgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsK
ICBnc2xfdGVzdCAoeCAhPSAwLAogICAgICAgICAiZ3NsX3ZlY3Rvcl91c2hvcnQiICJfZ2V0IHJl
dHVybnMgemVybyBmb3IgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsK
ICB4ID0gZ3NsX3ZlY3Rvcl91c2hvcnRfZ2V0ICh2LCAxMDI3KTsKICBnc2xfdGVzdCAoIXN0YXR1
cywgImdzbF92ZWN0b3JfdXNob3J0IiAiX2dldCB0cmFwcyBpbmRleCBhdCB1cHBlciBib3VuZCIp
OwogIGdzbF90ZXN0ICh4ICE9IDAsCiAgICAgICAgICAgICJnc2xfdmVjdG9yX3VzaG9ydCIgIl9n
ZXQgcmV0dXJucyB6ZXJvIGZvciBpbmRleCBhdCB1cHBlciBib3VuZCIpOwoKICBnc2xfdmVjdG9y
X3VzaG9ydF9mcmVlICh2KTsKfQojIDEyMCAidGVzdC5jIiAyCiMgMSAidGVzdF9pby5jIiAxCiMg
MjAgInRlc3RfaW8uYyIKdm9pZCB0ZXN0X3VzaG9ydF90ZXh0ICh2b2lkKTsKCnZvaWQKdGVzdF91
c2hvcnRfdGV4dCAodm9pZCkKewogIGdzbF92ZWN0b3JfdXNob3J0ICogdiA9IGdzbF92ZWN0b3Jf
dXNob3J0X2FsbG9jICgxMDI3KTsKICBnc2xfdmVjdG9yX3VzaG9ydCAqIHcgPSBnc2xfdmVjdG9y
X3VzaG9ydF9hbGxvYyAoMTAyNyk7CgogIHNpemVfdCBpOwoKICB7CiAgICBGSUxFICpmID0gZm9w
ZW4gKCJ0ZXN0LnR4dCIsICJ3Iik7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAg
ICAgewogICAgICAgIGdzbF92ZWN0b3JfdXNob3J0X3NldCAodiwgaSwgKHVuc2lnbmVkIHNob3J0
KSBpKTsKICAgICAgfTsKCiAgICBnc2xfdmVjdG9yX3VzaG9ydF9mcHJpbnRmIChmLCB2LCAiJWh1
Iik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3Qu
dHh0IiwgInIiKTsKCiAgICBnc2xfdmVjdG9yX3VzaG9ydF9mc2NhbmYgKGYsIHcpOwoKICAgIHN0
YXR1cyA9IDA7CiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAg
aWYgKHctPmRhdGFbaV0gIT0gKHVuc2lnbmVkIHNob3J0KSBpKQogICAgICAgICAgc3RhdHVzID0g
MTsKICAgICAgfTsKCiAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91c2hvcnQiICJf
ZnByaW50ZiBhbmQgZnNjYW5mIHdvcmsgY29ycmVjdGx5Iik7CgogICAgZmNsb3NlIChmKTsKICB9
CgogIGdzbF92ZWN0b3JfdXNob3J0X2ZyZWUgKHYpOwogIGdzbF92ZWN0b3JfdXNob3J0X2ZyZWUg
KHcpOwp9CiMgMTIxICJ0ZXN0LmMiIDIKIyAxICJ0ZW1wbGF0ZXNfb2ZmLmgiIDEKIyAxMjIgInRl
c3QuYyIgMgoKCgojIDEgInRlbXBsYXRlc19vbi5oIiAxCiMgMTI2ICJ0ZXN0LmMiIDIKIyAxICJ0
ZXN0X3NvdXJjZS5jIiAxCiMgMjAgInRlc3Rfc291cmNlLmMiCnZvaWQgdGVzdF9zaG9ydF9mdW5j
ICh2b2lkKTsKdm9pZCB0ZXN0X3Nob3J0X2JpbmFyeSAodm9pZCk7CnZvaWQgdGVzdF9zaG9ydF90
cmFwICh2b2lkKTsKCnZvaWQKdGVzdF9zaG9ydF9mdW5jICh2b2lkKQp7CiAgZ3NsX3ZlY3Rvcl9z
aG9ydCAqIHY7CiAgc2l6ZV90IGk7CgogIHYgPSBnc2xfdmVjdG9yX3Nob3J0X2NhbGxvYyAoMTAy
Nyk7CgogIGdzbF90ZXN0ICh2LT5kYXRhID09IDAsICJnc2xfdmVjdG9yX3Nob3J0IiAiX2FsbG9j
IHJldHVybnMgdmFsaWQgcG9pbnRlciIpOwogIGdzbF90ZXN0ICh2LT5zaXplICE9IDEwMjcsICJn
c2xfdmVjdG9yX3Nob3J0IiAiX2FsbG9jIHJldHVybnMgdmFsaWQgc2l6ZSIpOwogIGdzbF90ZXN0
ICh2LT5zdHJpZGUgIT0gMSwgImdzbF92ZWN0b3Jfc2hvcnQiICJfYWxsb2MgcmV0dXJucyB1bml0
IHN0cmlkZSIpOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBnc2xf
dmVjdG9yX3Nob3J0X3NldCAodiwgaSwgKHNob3J0KSBpKTsKICAgIH0KCgogIHN0YXR1cyA9IDA7
CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGlmICh2LT5kYXRhW2ld
ICE9IChzaG9ydCkgaSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKCiAgZ3NsX3Rlc3QgKHN0
YXR1cywKICAgICAgICAgICAgImdzbF92ZWN0b3Jfc2hvcnQiICJfc2V0IiAiIiAiIHdyaXRlcyBp
bnRvIGFycmF5IGNvcnJlY3RseSIpOwoKCiAgc3RhdHVzID0gMDsKICBmb3IgKGkgPSAwOyBpIDwg
MTAyNzsgaSsrKQogICAgewogICAgICBpZiAoZ3NsX3ZlY3Rvcl9zaG9ydF9nZXQgKHYsIGkpICE9
IChzaG9ydCkgaSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKICBnc2xfdGVzdCAoc3RhdHVz
LAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9zaG9ydCIgIl9nZXQiICIiICIgcmVhZHMgZnJvbSBh
cnJheSBjb3JyZWN0bHkiKTsKCgoKCiAgdi0+c3RyaWRlID0gMjsKCiAgc3RhdHVzID0gMDsKICBm
b3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7IGkrKykKICAgIHsKICAgICAgaWYgKGdzbF92ZWN0b3Jf
c2hvcnRfZ2V0ICh2LCBpKSAhPSAoc2hvcnQpICgyICogaSkpCiAgICAgICAgc3RhdHVzID0gMTsK
ICAgIH07CiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3Jfc2hvcnQiICJfZ2V0IiAiIiAi
IHJlYWRzIGNvcnJlY3RseSB3aXRoIHN0cmlkZSIpOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNyAv
IDI7IGkrKykKICAgIHsKICAgICAgZ3NsX3ZlY3Rvcl9zaG9ydF9zZXQgKHYsIGksIChzaG9ydCkg
KGkgKyAxMDAwKSk7CiAgICB9OwoKICBzdGF0dXMgPSAwOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAy
NyAvIDI7IGkrKykKICAgIHsKICAgICAgaWYgKHYtPmRhdGFbMiAqIGldICE9IChzaG9ydCkgKGkg
KyAxMDAwKSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKCiAgZ3NsX3Rlc3QgKHN0YXR1cywg
ImdzbF92ZWN0b3Jfc2hvcnQiICJfc2V0IiAiIiAiIHdyaXRlcyBjb3JyZWN0bHkgd2l0aCBzdHJp
ZGUiKTsKCgoKICB2LT5zdHJpZGUgPSAxIDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykK
ICAgIHsKICAgICAgZ3NsX3ZlY3Rvcl9zaG9ydF9zZXQgKHYsIGksIChzaG9ydCkgaSk7CiAgICB9
CgogIGdzbF92ZWN0b3Jfc2hvcnRfc3dhcF9lbGVtZW50cyAodiwgMiwgNSkgOwoKICBzdGF0dXMg
PSAoZ3NsX3ZlY3Rvcl9zaG9ydF9nZXQodiwyKSAhPSA1KSA7CiAgc3RhdHVzIHw9IChnc2xfdmVj
dG9yX3Nob3J0X2dldCh2LDUpICE9IDIpIDsKCiAgZ3NsX3ZlY3Rvcl9zaG9ydF9zd2FwX2VsZW1l
bnRzICh2LCAyLCA1KSA7CgogIHN0YXR1cyB8PSAoZ3NsX3ZlY3Rvcl9zaG9ydF9nZXQodiwyKSAh
PSAyKSA7CiAgc3RhdHVzIHw9IChnc2xfdmVjdG9yX3Nob3J0X2dldCh2LDUpICE9IDUpIDsKCiAg
Z3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3Jfc2hvcnQiICJfc3dhcF9lbGVtZW50cyIgIiIg
IiBleGNoYW5nZXMgZWxlbWVudHMgY29ycmVjdGx5IikgOwoKICBzdGF0dXMgPSAwOwoKICBnc2xf
dmVjdG9yX3Nob3J0X3JldmVyc2UgKHYpIDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykK
ICAgIHsKICAgICAgc3RhdHVzIHw9IChnc2xfdmVjdG9yX3Nob3J0X2dldCAodiwgaSkgIT0gKHNo
b3J0KSAoMTAyNyAtIGkgLSAxKSk7CiAgICB9CgogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVj
dG9yX3Nob3J0IiAiX3JldmVyc2UiICIiICIgcmV2ZXJzZXMgZWxlbWVudHMgY29ycmVjdGx5Iikg
OwoKICB7CiAgICBzaG9ydCBleHBfbWF4ID0gZ3NsX3ZlY3Rvcl9zaG9ydF9nZXQodiwgMCk7CiAg
ICBzaG9ydCBleHBfbWluID0gZ3NsX3ZlY3Rvcl9zaG9ydF9nZXQodiwgMCk7CiAgICBzaXplX3Qg
ZXhwX2ltYXggPSAwLCBleHBfaW1pbiA9IDA7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkr
KykKICAgICAgewogICAgICAgIHNob3J0IGsgPSBnc2xfdmVjdG9yX3Nob3J0X2dldCAodiwgaSkg
OwogICAgICAgIGlmIChrIDwgZXhwX21pbikgewogICAgICAgICAgZXhwX21pbiA9IGdzbF92ZWN0
b3Jfc2hvcnRfZ2V0ICh2LCBpKTsKICAgICAgICAgIGV4cF9pbWluID0gaTsKICAgICAgICB9CiAg
ICAgIH0KCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgc2hv
cnQgayA9IGdzbF92ZWN0b3Jfc2hvcnRfZ2V0ICh2LCBpKSA7CiAgICAgICAgaWYgKGsgPiBleHBf
bWF4KSB7CiAgICAgICAgICBleHBfbWF4ID0gZ3NsX3ZlY3Rvcl9zaG9ydF9nZXQgKHYsIGkpIDsK
ICAgICAgICAgIGV4cF9pbWF4ID0gaTsKICAgICAgICB9CiAgICAgIH0KCiAgICB7CiAgICAgIHNo
b3J0IG1heCA9IGdzbF92ZWN0b3Jfc2hvcnRfbWF4ICh2KSA7CgogICAgICBnc2xfdGVzdCAobWF4
ICE9IGV4cF9tYXgsICJnc2xfdmVjdG9yX3Nob3J0IiAiX21heCByZXR1cm5zIGNvcnJlY3QgbWF4
aW11bSB2YWx1ZSIpOwogICAgfQoKICAgIHsKICAgICAgc2hvcnQgbWluID0gZ3NsX3ZlY3Rvcl9z
aG9ydF9taW4gKHYpIDsKCiAgICAgIGdzbF90ZXN0IChtaW4gIT0gZXhwX21pbiwgImdzbF92ZWN0
b3Jfc2hvcnQiICJfbWluIHJldHVybnMgY29ycmVjdCBtaW5pbXVtIHZhbHVlIik7CiAgICB9Cgog
ICAgewogICAgICBzaG9ydCBtaW4sIG1heDsKICAgICAgZ3NsX3ZlY3Rvcl9zaG9ydF9taW5tYXgg
KHYsICZtaW4sICZtYXgpOwoKICAgICAgZ3NsX3Rlc3QgKG1heCAhPSBleHBfbWF4LCAiZ3NsX3Zl
Y3Rvcl9zaG9ydCIgIl9taW5tYXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0gdmFsdWUiKTsKICAg
ICAgZ3NsX3Rlc3QgKG1pbiAhPSBleHBfbWluLCAiZ3NsX3ZlY3Rvcl9zaG9ydCIgIl9taW5tYXgg
cmV0dXJucyBjb3JyZWN0IG1pbmltdW0gdmFsdWUiKTsKICAgIH0KCgogICAgewogICAgICBzaXpl
X3QgaW1heCA9IGdzbF92ZWN0b3Jfc2hvcnRfbWF4X2luZGV4ICh2KSA7CgogICAgICBnc2xfdGVz
dCAoaW1heCAhPSBleHBfaW1heCwgImdzbF92ZWN0b3Jfc2hvcnQiICJfbWF4X2luZGV4IHJldHVy
bnMgY29ycmVjdCBtYXhpbXVtIGkiKTsKICAgIH0KCiAgICB7CiAgICAgIHNpemVfdCBpbWluID0g
Z3NsX3ZlY3Rvcl9zaG9ydF9taW5faW5kZXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChpbWluICE9
IGV4cF9pbWluLCAiZ3NsX3ZlY3Rvcl9zaG9ydCIgIl9taW5faW5kZXggcmV0dXJucyBjb3JyZWN0
IG1pbmltdW0gaSIpOwogICAgfQoKICAgIHsKICAgICAgc2l6ZV90IGltaW4sIGltYXg7CgogICAg
ICBnc2xfdmVjdG9yX3Nob3J0X21pbm1heF9pbmRleCAodiwgJmltaW4sICZpbWF4KTsKCiAgICAg
IGdzbF90ZXN0IChpbWF4ICE9IGV4cF9pbWF4LCAiZ3NsX3ZlY3Rvcl9zaG9ydCIgIl9taW5tYXhf
aW5kZXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0gaSIpOwogICAgICBnc2xfdGVzdCAoaW1pbiAh
PSBleHBfaW1pbiwgImdzbF92ZWN0b3Jfc2hvcnQiICJfbWlubWF4X2luZGV4IHJldHVybnMgY29y
cmVjdCBtaW5pbXVtIGkiKTsKICAgIH0KICB9CgoKICB7CiAgICBnc2xfdmVjdG9yX3Nob3J0ICog
YSA9IGdzbF92ZWN0b3Jfc2hvcnRfY2FsbG9jICgxMDI3KTsKICAgIGdzbF92ZWN0b3Jfc2hvcnQg
KiBiID0gZ3NsX3ZlY3Rvcl9zaG9ydF9jYWxsb2MgKDEwMjcpOwoKICAgIGZvciAoaSA9IDA7IGkg
PCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBnc2xfdmVjdG9yX3Nob3J0X3NldCAoYSwgaSwg
KHNob3J0KSgzICsgaSkpOwogICAgICAgIGdzbF92ZWN0b3Jfc2hvcnRfc2V0IChiLCBpLCAoc2hv
cnQpKDMgKyAyICogaSkpOwogICAgICB9CgogICAgZ3NsX3ZlY3Rvcl9zaG9ydF9tZW1jcHkgKHYs
IGEpOwogICAgZ3NsX3ZlY3Rvcl9zaG9ydF9hZGQgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0
YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAg
ICAgICAgIHNob3J0IHIgPSBnc2xfdmVjdG9yX3Nob3J0X2dldCAodixpKTsKICAgICAgICAgIHNo
b3J0IHggPSBnc2xfdmVjdG9yX3Nob3J0X2dldCAoYSxpKTsKICAgICAgICAgIHNob3J0IHkgPSBn
c2xfdmVjdG9yX3Nob3J0X2dldCAoYixpKTsKICAgICAgICAgIHNob3J0IHogPSB4ICsgeTsKICAg
ICAgICAgIGlmIChyICE9IHopCiAgICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQogICAg
ICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9zaG9ydCIgIl9hZGQgYWRkcyBjb3JyZWN0
bHkiKTsKICAgIH0KCgogICAgZ3NsX3ZlY3Rvcl9zaG9ydF9tZW1jcHkgKHYsIGEpOwogICAgZ3Ns
X3ZlY3Rvcl9zaG9ydF9zdWIgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7Cgog
ICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIHNob3J0
IHIgPSBnc2xfdmVjdG9yX3Nob3J0X2dldCAodixpKTsKICAgICAgICAgIHNob3J0IHggPSBnc2xf
dmVjdG9yX3Nob3J0X2dldCAoYSxpKTsKICAgICAgICAgIHNob3J0IHkgPSBnc2xfdmVjdG9yX3No
b3J0X2dldCAoYixpKTsKICAgICAgICAgIHNob3J0IHogPSB4IC0geTsKICAgICAgICAgIGlmIChy
ICE9IHopCiAgICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVzdCAo
c3RhdHVzLCAiZ3NsX3ZlY3Rvcl9zaG9ydCIgIl9zdWIgc3VidHJhY3RzIGNvcnJlY3RseSIpOwog
ICAgfQoKICAgIGdzbF92ZWN0b3Jfc2hvcnRfbWVtY3B5ICh2LCBhKTsKICAgIGdzbF92ZWN0b3Jf
c2hvcnRfbXVsICh2LCBiKTsKCiAgICB7CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9y
IChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgICB7CiAgICAgICAgICBzaG9ydCByID0gZ3Ns
X3ZlY3Rvcl9zaG9ydF9nZXQgKHYsaSk7CiAgICAgICAgICBzaG9ydCB4ID0gZ3NsX3ZlY3Rvcl9z
aG9ydF9nZXQgKGEsaSk7CiAgICAgICAgICBzaG9ydCB5ID0gZ3NsX3ZlY3Rvcl9zaG9ydF9nZXQg
KGIsaSk7CiAgICAgICAgICBzaG9ydCB6ID0geCAqIHk7CiAgICAgICAgICBpZiAociAhPSB6KQog
ICAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICAgIH0KICAgICAgZ3NsX3Rlc3QgKHN0YXR1cywg
ImdzbF92ZWN0b3Jfc2hvcnQiICJfbXVsIG11bHRpcGxpZXMgY29ycmVjdGx5Iik7CiAgICB9Cgog
ICAgZ3NsX3ZlY3Rvcl9zaG9ydF9tZW1jcHkgKHYsIGEpOwogICAgZ3NsX3ZlY3Rvcl9zaG9ydF9k
aXYgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAw
OyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIHNob3J0IHIgPSBnc2xfdmVjdG9y
X3Nob3J0X2dldCAodixpKTsKICAgICAgICAgIHNob3J0IHggPSBnc2xfdmVjdG9yX3Nob3J0X2dl
dCAoYSxpKTsKICAgICAgICAgIHNob3J0IHkgPSBnc2xfdmVjdG9yX3Nob3J0X2dldCAoYixpKTsK
ICAgICAgICAgIHNob3J0IHogPSB4IC8geTsKICAgICAgICAgIGlmIChmYWJzKHIgLSB6KSA+IDIg
KiAxLjE5MjA5Mjg5NTUwNzgxMjVlLTA3ICogZmFicyh6KSkKICAgICAgICAgICAgc3RhdHVzID0g
MTsKICAgICAgICB9CiAgICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX3Nob3J0IiAi
X2RpdiBkaXZpZGVzIGNvcnJlY3RseSIpOwogICAgfQoKCiAgICBnc2xfdmVjdG9yX3Nob3J0X2Zy
ZWUgKGEpOwogICAgZ3NsX3ZlY3Rvcl9zaG9ydF9mcmVlIChiKTsKICB9CgoKCgogIGdzbF92ZWN0
b3Jfc2hvcnRfZnJlZSAodik7Cn0KCgp2b2lkCnRlc3Rfc2hvcnRfYmluYXJ5ICh2b2lkKQp7CiAg
Z3NsX3ZlY3Rvcl9zaG9ydCAqIHYgPSBnc2xfdmVjdG9yX3Nob3J0X2NhbGxvYyAoMTAyNyk7CiAg
Z3NsX3ZlY3Rvcl9zaG9ydCAqIHcgPSBnc2xfdmVjdG9yX3Nob3J0X2NhbGxvYyAoMTAyNyk7Cgog
IHNpemVfdCBpOwoKICB7CiAgICBGSUxFICpmID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJ3YiIpOwoK
ICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBnc2xfdmVjdG9y
X3Nob3J0X3NldCAodiwgaSwgKHNob3J0KSAoMTAyNyAtIGkpKTsKICAgICAgfTsKCiAgICBnc2xf
dmVjdG9yX3Nob3J0X2Z3cml0ZSAoZiwgdik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAg
IEZJTEUgKmYgPSBmb3BlbiAoInRlc3QuZGF0IiwgInJiIik7CgogICAgZ3NsX3ZlY3Rvcl9zaG9y
dF9mcmVhZCAoZiwgdyk7CgogICAgc3RhdHVzID0gMDsKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3
OyBpKyspCiAgICAgIHsKICAgICAgICBpZiAody0+ZGF0YVtpXSAhPSAoc2hvcnQpICgxMDI3IC0g
aSkpCiAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICB9OwoKICAgIGdzbF90ZXN0IChzdGF0dXMs
ICJnc2xfdmVjdG9yX3Nob3J0IiAiX3dyaXRlIGFuZCByZWFkIHdvcmsgY29ycmVjdGx5Iik7Cgog
ICAgZmNsb3NlIChmKTsKICB9CgogIGdzbF92ZWN0b3Jfc2hvcnRfZnJlZSAodik7CiAgZ3NsX3Zl
Y3Rvcl9zaG9ydF9mcmVlICh3KTsKfQoKdm9pZAp0ZXN0X3Nob3J0X3RyYXAgKHZvaWQpCnsKICBn
c2xfdmVjdG9yX3Nob3J0ICogdiA9IGdzbF92ZWN0b3Jfc2hvcnRfYWxsb2MgKDEwMjcpOwoKICBz
aXplX3QgaiA9IDA7CiAgZG91YmxlIHg7CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl9zaG9y
dF9zZXQgKHYsIGogLSAxLCAoc2hvcnQpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVj
dG9yX3Nob3J0IiAiX3NldCB0cmFwcyBpbmRleCBiZWxvdyBsb3dlciBib3VuZCIpOwoKICBzdGF0
dXMgPSAwOwogIGdzbF92ZWN0b3Jfc2hvcnRfc2V0ICh2LCAxMDI3ICsgMSwgKHNob3J0KTApOwog
IGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9zaG9ydCIgIl9zZXQgdHJhcHMgaW5kZXgg
YWJvdmUgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICBnc2xfdmVjdG9yX3Nob3J0X3Nl
dCAodiwgMTAyNywgKHNob3J0KTApOwogIGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9z
aG9ydCIgIl9zZXQgdHJhcHMgaW5kZXggYXQgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsK
ICB4ID0gZ3NsX3ZlY3Rvcl9zaG9ydF9nZXQgKHYsIGogLSAxKTsKICBnc2xfdGVzdCAoIXN0YXR1
cywgImdzbF92ZWN0b3Jfc2hvcnQiICJfZ2V0IHRyYXBzIGluZGV4IGJlbG93IGxvd2VyIGJvdW5k
Iik7CiAgZ3NsX3Rlc3QgKHggIT0gMCwKICAgICAgICAgImdzbF92ZWN0b3Jfc2hvcnQiICJfZ2V0
IHJldHVybnMgemVybyBmb3IgaW5kZXggYmVsb3cgbG93ZXIgYm91bmQiKTsKCiAgc3RhdHVzID0g
MDsKICB4ID0gZ3NsX3ZlY3Rvcl9zaG9ydF9nZXQgKHYsIDEwMjcgKyAxKTsKICBnc2xfdGVzdCAo
IXN0YXR1cywgImdzbF92ZWN0b3Jfc2hvcnQiICJfZ2V0IHRyYXBzIGluZGV4IGFib3ZlIHVwcGVy
IGJvdW5kIik7CiAgZ3NsX3Rlc3QgKHggIT0gMCwKICAgICAgICAgImdzbF92ZWN0b3Jfc2hvcnQi
ICJfZ2V0IHJldHVybnMgemVybyBmb3IgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKCiAgc3Rh
dHVzID0gMDsKICB4ID0gZ3NsX3ZlY3Rvcl9zaG9ydF9nZXQgKHYsIDEwMjcpOwogIGdzbF90ZXN0
ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9zaG9ydCIgIl9nZXQgdHJhcHMgaW5kZXggYXQgdXBwZXIg
Ym91bmQiKTsKICBnc2xfdGVzdCAoeCAhPSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9zaG9y
dCIgIl9nZXQgcmV0dXJucyB6ZXJvIGZvciBpbmRleCBhdCB1cHBlciBib3VuZCIpOwoKICBnc2xf
dmVjdG9yX3Nob3J0X2ZyZWUgKHYpOwp9CiMgMTI3ICJ0ZXN0LmMiIDIKIyAxICJ0ZXN0X2lvLmMi
IDEKIyAyMCAidGVzdF9pby5jIgp2b2lkIHRlc3Rfc2hvcnRfdGV4dCAodm9pZCk7Cgp2b2lkCnRl
c3Rfc2hvcnRfdGV4dCAodm9pZCkKewogIGdzbF92ZWN0b3Jfc2hvcnQgKiB2ID0gZ3NsX3ZlY3Rv
cl9zaG9ydF9hbGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3Rvcl9zaG9ydCAqIHcgPSBnc2xfdmVjdG9y
X3Nob3J0X2FsbG9jICgxMDI3KTsKCiAgc2l6ZV90IGk7CgogIHsKICAgIEZJTEUgKmYgPSBmb3Bl
biAoInRlc3QudHh0IiwgInciKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAg
ICB7CiAgICAgICAgZ3NsX3ZlY3Rvcl9zaG9ydF9zZXQgKHYsIGksIChzaG9ydCkgaSk7CiAgICAg
IH07CgogICAgZ3NsX3ZlY3Rvcl9zaG9ydF9mcHJpbnRmIChmLCB2LCAiJWhkIik7CgogICAgZmNs
b3NlIChmKTsKICB9CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3QudHh0IiwgInIiKTsK
CiAgICBnc2xfdmVjdG9yX3Nob3J0X2ZzY2FuZiAoZiwgdyk7CgogICAgc3RhdHVzID0gMDsKICAg
IGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBpZiAody0+ZGF0YVtp
XSAhPSAoc2hvcnQpIGkpCiAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICB9OwoKICAgIGdzbF90
ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX3Nob3J0IiAiX2ZwcmludGYgYW5kIGZzY2FuZiB3b3Jr
IGNvcnJlY3RseSIpOwoKICAgIGZjbG9zZSAoZik7CiAgfQoKICBnc2xfdmVjdG9yX3Nob3J0X2Zy
ZWUgKHYpOwogIGdzbF92ZWN0b3Jfc2hvcnRfZnJlZSAodyk7Cn0KIyAxMjggInRlc3QuYyIgMgoj
IDEgInRlbXBsYXRlc19vZmYuaCIgMQojIDEyOSAidGVzdC5jIiAyCgoKCiMgMSAidGVtcGxhdGVz
X29uLmgiIDEKIyAxMzMgInRlc3QuYyIgMgojIDEgInRlc3Rfc291cmNlLmMiIDEKIyAyMCAidGVz
dF9zb3VyY2UuYyIKdm9pZCB0ZXN0X3VjaGFyX2Z1bmMgKHZvaWQpOwp2b2lkIHRlc3RfdWNoYXJf
YmluYXJ5ICh2b2lkKTsKdm9pZCB0ZXN0X3VjaGFyX3RyYXAgKHZvaWQpOwoKdm9pZAp0ZXN0X3Vj
aGFyX2Z1bmMgKHZvaWQpCnsKICBnc2xfdmVjdG9yX3VjaGFyICogdjsKICBzaXplX3QgaTsKCiAg
diA9IGdzbF92ZWN0b3JfdWNoYXJfY2FsbG9jICgxMDI3KTsKCiAgZ3NsX3Rlc3QgKHYtPmRhdGEg
PT0gMCwgImdzbF92ZWN0b3JfdWNoYXIiICJfYWxsb2MgcmV0dXJucyB2YWxpZCBwb2ludGVyIik7
CiAgZ3NsX3Rlc3QgKHYtPnNpemUgIT0gMTAyNywgImdzbF92ZWN0b3JfdWNoYXIiICJfYWxsb2Mg
cmV0dXJucyB2YWxpZCBzaXplIik7CiAgZ3NsX3Rlc3QgKHYtPnN0cmlkZSAhPSAxLCAiZ3NsX3Zl
Y3Rvcl91Y2hhciIgIl9hbGxvYyByZXR1cm5zIHVuaXQgc3RyaWRlIik7CgogIGZvciAoaSA9IDA7
IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdzbF92ZWN0b3JfdWNoYXJfc2V0ICh2LCBpLCAo
dW5zaWduZWQgY2hhcikgaSk7CiAgICB9CgoKICBzdGF0dXMgPSAwOwoKICBmb3IgKGkgPSAwOyBp
IDwgMTAyNzsgaSsrKQogICAgewogICAgICBpZiAodi0+ZGF0YVtpXSAhPSAodW5zaWduZWQgY2hh
cikgaSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKCiAgZ3NsX3Rlc3QgKHN0YXR1cywKICAg
ICAgICAgICAgImdzbF92ZWN0b3JfdWNoYXIiICJfc2V0IiAiIiAiIHdyaXRlcyBpbnRvIGFycmF5
IGNvcnJlY3RseSIpOwoKCiAgc3RhdHVzID0gMDsKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsr
KQogICAgewogICAgICBpZiAoZ3NsX3ZlY3Rvcl91Y2hhcl9nZXQgKHYsIGkpICE9ICh1bnNpZ25l
ZCBjaGFyKSBpKQogICAgICAgIHN0YXR1cyA9IDE7CiAgICB9OwogIGdzbF90ZXN0IChzdGF0dXMs
CiAgICAgICAgICAgICJnc2xfdmVjdG9yX3VjaGFyIiAiX2dldCIgIiIgIiByZWFkcyBmcm9tIGFy
cmF5IGNvcnJlY3RseSIpOwoKCgoKICB2LT5zdHJpZGUgPSAyOwoKICBzdGF0dXMgPSAwOwogIGZv
ciAoaSA9IDA7IGkgPCAxMDI3IC8gMjsgaSsrKQogICAgewogICAgICBpZiAoZ3NsX3ZlY3Rvcl91
Y2hhcl9nZXQgKHYsIGkpICE9ICh1bnNpZ25lZCBjaGFyKSAoMiAqIGkpKQogICAgICAgIHN0YXR1
cyA9IDE7CiAgICB9OwogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX3VjaGFyIiAiX2dl
dCIgIiIgIiByZWFkcyBjb3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsKCiAgZm9yIChpID0gMDsgaSA8
IDEwMjcgLyAyOyBpKyspCiAgICB7CiAgICAgIGdzbF92ZWN0b3JfdWNoYXJfc2V0ICh2LCBpLCAo
dW5zaWduZWQgY2hhcikgKGkgKyAxMDAwKSk7CiAgICB9OwoKICBzdGF0dXMgPSAwOwoKICBmb3Ig
KGkgPSAwOyBpIDwgMTAyNyAvIDI7IGkrKykKICAgIHsKICAgICAgaWYgKHYtPmRhdGFbMiAqIGld
ICE9ICh1bnNpZ25lZCBjaGFyKSAoaSArIDEwMDApKQogICAgICAgIHN0YXR1cyA9IDE7CiAgICB9
OwoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91Y2hhciIgIl9zZXQiICIiICIgd3Jp
dGVzIGNvcnJlY3RseSB3aXRoIHN0cmlkZSIpOwoKCgogIHYtPnN0cmlkZSA9IDEgOwoKICBmb3Ig
KGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBnc2xfdmVjdG9yX3VjaGFyX3NldCAo
diwgaSwgKHVuc2lnbmVkIGNoYXIpIGkpOwogICAgfQoKICBnc2xfdmVjdG9yX3VjaGFyX3N3YXBf
ZWxlbWVudHMgKHYsIDIsIDUpIDsKCiAgc3RhdHVzID0gKGdzbF92ZWN0b3JfdWNoYXJfZ2V0KHYs
MikgIT0gNSkgOwogIHN0YXR1cyB8PSAoZ3NsX3ZlY3Rvcl91Y2hhcl9nZXQodiw1KSAhPSAyKSA7
CgogIGdzbF92ZWN0b3JfdWNoYXJfc3dhcF9lbGVtZW50cyAodiwgMiwgNSkgOwoKICBzdGF0dXMg
fD0gKGdzbF92ZWN0b3JfdWNoYXJfZ2V0KHYsMikgIT0gMikgOwogIHN0YXR1cyB8PSAoZ3NsX3Zl
Y3Rvcl91Y2hhcl9nZXQodiw1KSAhPSA1KSA7CgogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVj
dG9yX3VjaGFyIiAiX3N3YXBfZWxlbWVudHMiICIiICIgZXhjaGFuZ2VzIGVsZW1lbnRzIGNvcnJl
Y3RseSIpIDsKCiAgc3RhdHVzID0gMDsKCiAgZ3NsX3ZlY3Rvcl91Y2hhcl9yZXZlcnNlICh2KSA7
CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIHN0YXR1cyB8PSAoZ3Ns
X3ZlY3Rvcl91Y2hhcl9nZXQgKHYsIGkpICE9ICh1bnNpZ25lZCBjaGFyKSAoMTAyNyAtIGkgLSAx
KSk7CiAgICB9CgogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX3VjaGFyIiAiX3JldmVy
c2UiICIiICIgcmV2ZXJzZXMgZWxlbWVudHMgY29ycmVjdGx5IikgOwoKICB7CiAgICB1bnNpZ25l
ZCBjaGFyIGV4cF9tYXggPSBnc2xfdmVjdG9yX3VjaGFyX2dldCh2LCAwKTsKICAgIHVuc2lnbmVk
IGNoYXIgZXhwX21pbiA9IGdzbF92ZWN0b3JfdWNoYXJfZ2V0KHYsIDApOwogICAgc2l6ZV90IGV4
cF9pbWF4ID0gMCwgZXhwX2ltaW4gPSAwOwoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKysp
CiAgICAgIHsKICAgICAgICB1bnNpZ25lZCBjaGFyIGsgPSBnc2xfdmVjdG9yX3VjaGFyX2dldCAo
diwgaSkgOwogICAgICAgIGlmIChrIDwgZXhwX21pbikgewogICAgICAgICAgZXhwX21pbiA9IGdz
bF92ZWN0b3JfdWNoYXJfZ2V0ICh2LCBpKTsKICAgICAgICAgIGV4cF9pbWluID0gaTsKICAgICAg
ICB9CiAgICAgIH0KCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAg
ICAgdW5zaWduZWQgY2hhciBrID0gZ3NsX3ZlY3Rvcl91Y2hhcl9nZXQgKHYsIGkpIDsKICAgICAg
ICBpZiAoayA+IGV4cF9tYXgpIHsKICAgICAgICAgIGV4cF9tYXggPSBnc2xfdmVjdG9yX3VjaGFy
X2dldCAodiwgaSkgOwogICAgICAgICAgZXhwX2ltYXggPSBpOwogICAgICAgIH0KICAgICAgfQoK
ICAgIHsKICAgICAgdW5zaWduZWQgY2hhciBtYXggPSBnc2xfdmVjdG9yX3VjaGFyX21heCAodikg
OwoKICAgICAgZ3NsX3Rlc3QgKG1heCAhPSBleHBfbWF4LCAiZ3NsX3ZlY3Rvcl91Y2hhciIgIl9t
YXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0gdmFsdWUiKTsKICAgIH0KCiAgICB7CiAgICAgIHVu
c2lnbmVkIGNoYXIgbWluID0gZ3NsX3ZlY3Rvcl91Y2hhcl9taW4gKHYpIDsKCiAgICAgIGdzbF90
ZXN0IChtaW4gIT0gZXhwX21pbiwgImdzbF92ZWN0b3JfdWNoYXIiICJfbWluIHJldHVybnMgY29y
cmVjdCBtaW5pbXVtIHZhbHVlIik7CiAgICB9CgogICAgewogICAgICB1bnNpZ25lZCBjaGFyIG1p
biwgbWF4OwogICAgICBnc2xfdmVjdG9yX3VjaGFyX21pbm1heCAodiwgJm1pbiwgJm1heCk7Cgog
ICAgICBnc2xfdGVzdCAobWF4ICE9IGV4cF9tYXgsICJnc2xfdmVjdG9yX3VjaGFyIiAiX21pbm1h
eCByZXR1cm5zIGNvcnJlY3QgbWF4aW11bSB2YWx1ZSIpOwogICAgICBnc2xfdGVzdCAobWluICE9
IGV4cF9taW4sICJnc2xfdmVjdG9yX3VjaGFyIiAiX21pbm1heCByZXR1cm5zIGNvcnJlY3QgbWlu
aW11bSB2YWx1ZSIpOwogICAgfQoKCiAgICB7CiAgICAgIHNpemVfdCBpbWF4ID0gZ3NsX3ZlY3Rv
cl91Y2hhcl9tYXhfaW5kZXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChpbWF4ICE9IGV4cF9pbWF4
LCAiZ3NsX3ZlY3Rvcl91Y2hhciIgIl9tYXhfaW5kZXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0g
aSIpOwogICAgfQoKICAgIHsKICAgICAgc2l6ZV90IGltaW4gPSBnc2xfdmVjdG9yX3VjaGFyX21p
bl9pbmRleCAodikgOwoKICAgICAgZ3NsX3Rlc3QgKGltaW4gIT0gZXhwX2ltaW4sICJnc2xfdmVj
dG9yX3VjaGFyIiAiX21pbl9pbmRleCByZXR1cm5zIGNvcnJlY3QgbWluaW11bSBpIik7CiAgICB9
CgogICAgewogICAgICBzaXplX3QgaW1pbiwgaW1heDsKCiAgICAgIGdzbF92ZWN0b3JfdWNoYXJf
bWlubWF4X2luZGV4ICh2LCAmaW1pbiwgJmltYXgpOwoKICAgICAgZ3NsX3Rlc3QgKGltYXggIT0g
ZXhwX2ltYXgsICJnc2xfdmVjdG9yX3VjaGFyIiAiX21pbm1heF9pbmRleCByZXR1cm5zIGNvcnJl
Y3QgbWF4aW11bSBpIik7CiAgICAgIGdzbF90ZXN0IChpbWluICE9IGV4cF9pbWluLCAiZ3NsX3Zl
Y3Rvcl91Y2hhciIgIl9taW5tYXhfaW5kZXggcmV0dXJucyBjb3JyZWN0IG1pbmltdW0gaSIpOwog
ICAgfQogIH0KCgogIHsKICAgIGdzbF92ZWN0b3JfdWNoYXIgKiBhID0gZ3NsX3ZlY3Rvcl91Y2hh
cl9jYWxsb2MgKDEwMjcpOwogICAgZ3NsX3ZlY3Rvcl91Y2hhciAqIGIgPSBnc2xfdmVjdG9yX3Vj
aGFyX2NhbGxvYyAoMTAyNyk7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAg
ewogICAgICAgIGdzbF92ZWN0b3JfdWNoYXJfc2V0IChhLCBpLCAodW5zaWduZWQgY2hhcikoMyAr
IGkpKTsKICAgICAgICBnc2xfdmVjdG9yX3VjaGFyX3NldCAoYiwgaSwgKHVuc2lnbmVkIGNoYXIp
KDMgKyAyICogaSkpOwogICAgICB9CgogICAgZ3NsX3ZlY3Rvcl91Y2hhcl9tZW1jcHkgKHYsIGEp
OwogICAgZ3NsX3ZlY3Rvcl91Y2hhcl9hZGQgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1
cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgciA9IGdzbF92ZWN0b3JfdWNoYXJfZ2V0ICh2LGkpOwogICAgICAg
ICAgdW5zaWduZWQgY2hhciB4ID0gZ3NsX3ZlY3Rvcl91Y2hhcl9nZXQgKGEsaSk7CiAgICAgICAg
ICB1bnNpZ25lZCBjaGFyIHkgPSBnc2xfdmVjdG9yX3VjaGFyX2dldCAoYixpKTsKICAgICAgICAg
IHVuc2lnbmVkIGNoYXIgeiA9IHggKyB5OwogICAgICAgICAgaWYgKHIgIT0geikKICAgICAgICAg
ICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVj
dG9yX3VjaGFyIiAiX2FkZCBhZGRzIGNvcnJlY3RseSIpOwogICAgfQoKCiAgICBnc2xfdmVjdG9y
X3VjaGFyX21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX3VjaGFyX3N1YiAodiwgYik7Cgog
ICAgewogICAgICBpbnQgc3RhdHVzID0gMDsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBp
KyspCiAgICAgICAgewogICAgICAgICAgdW5zaWduZWQgY2hhciByID0gZ3NsX3ZlY3Rvcl91Y2hh
cl9nZXQgKHYsaSk7CiAgICAgICAgICB1bnNpZ25lZCBjaGFyIHggPSBnc2xfdmVjdG9yX3VjaGFy
X2dldCAoYSxpKTsKICAgICAgICAgIHVuc2lnbmVkIGNoYXIgeSA9IGdzbF92ZWN0b3JfdWNoYXJf
Z2V0IChiLGkpOwogICAgICAgICAgdW5zaWduZWQgY2hhciB6ID0geCAtIHk7CiAgICAgICAgICBp
ZiAociAhPSB6KQogICAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICAgIH0KICAgICAgZ3NsX3Rl
c3QgKHN0YXR1cywgImdzbF92ZWN0b3JfdWNoYXIiICJfc3ViIHN1YnRyYWN0cyBjb3JyZWN0bHki
KTsKICAgIH0KCiAgICBnc2xfdmVjdG9yX3VjaGFyX21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVj
dG9yX3VjaGFyX211bCAodiwgYik7CgogICAgewogICAgICBpbnQgc3RhdHVzID0gMDsKCiAgICAg
IGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgICAgewogICAgICAgICAgdW5zaWduZWQg
Y2hhciByID0gZ3NsX3ZlY3Rvcl91Y2hhcl9nZXQgKHYsaSk7CiAgICAgICAgICB1bnNpZ25lZCBj
aGFyIHggPSBnc2xfdmVjdG9yX3VjaGFyX2dldCAoYSxpKTsKICAgICAgICAgIHVuc2lnbmVkIGNo
YXIgeSA9IGdzbF92ZWN0b3JfdWNoYXJfZ2V0IChiLGkpOwogICAgICAgICAgdW5zaWduZWQgY2hh
ciB6ID0geCAqIHk7CiAgICAgICAgICBpZiAociAhPSB6KQogICAgICAgICAgICBzdGF0dXMgPSAx
OwogICAgICAgIH0KICAgICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfdWNoYXIiICJf
bXVsIG11bHRpcGxpZXMgY29ycmVjdGx5Iik7CiAgICB9CgogICAgZ3NsX3ZlY3Rvcl91Y2hhcl9t
ZW1jcHkgKHYsIGEpOwogICAgZ3NsX3ZlY3Rvcl91Y2hhcl9kaXYgKHYsIGIpOwoKICAgIHsKICAg
ICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAg
ICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGNoYXIgciA9IGdzbF92ZWN0b3JfdWNoYXJfZ2V0ICh2
LGkpOwogICAgICAgICAgdW5zaWduZWQgY2hhciB4ID0gZ3NsX3ZlY3Rvcl91Y2hhcl9nZXQgKGEs
aSk7CiAgICAgICAgICB1bnNpZ25lZCBjaGFyIHkgPSBnc2xfdmVjdG9yX3VjaGFyX2dldCAoYixp
KTsKICAgICAgICAgIHVuc2lnbmVkIGNoYXIgeiA9IHggLyB5OwogICAgICAgICAgaWYgKGZhYnMo
ciAtIHopID4gMiAqIDEuMTkyMDkyODk1NTA3ODEyNWUtMDcgKiBmYWJzKHopKQogICAgICAgICAg
ICBzdGF0dXMgPSAxOwogICAgICAgIH0KICAgICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0
b3JfdWNoYXIiICJfZGl2IGRpdmlkZXMgY29ycmVjdGx5Iik7CiAgICB9CgoKICAgIGdzbF92ZWN0
b3JfdWNoYXJfZnJlZSAoYSk7CiAgICBnc2xfdmVjdG9yX3VjaGFyX2ZyZWUgKGIpOwogIH0KCgoK
CiAgZ3NsX3ZlY3Rvcl91Y2hhcl9mcmVlICh2KTsKfQoKCnZvaWQKdGVzdF91Y2hhcl9iaW5hcnkg
KHZvaWQpCnsKICBnc2xfdmVjdG9yX3VjaGFyICogdiA9IGdzbF92ZWN0b3JfdWNoYXJfY2FsbG9j
ICgxMDI3KTsKICBnc2xfdmVjdG9yX3VjaGFyICogdyA9IGdzbF92ZWN0b3JfdWNoYXJfY2FsbG9j
ICgxMDI3KTsKCiAgc2l6ZV90IGk7CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3QuZGF0
IiwgIndiIik7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAg
IGdzbF92ZWN0b3JfdWNoYXJfc2V0ICh2LCBpLCAodW5zaWduZWQgY2hhcikgKDEwMjcgLSBpKSk7
CiAgICAgIH07CgogICAgZ3NsX3ZlY3Rvcl91Y2hhcl9md3JpdGUgKGYsIHYpOwoKICAgIGZjbG9z
ZSAoZik7CiAgfQoKICB7CiAgICBGSUxFICpmID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJyYiIpOwoK
ICAgIGdzbF92ZWN0b3JfdWNoYXJfZnJlYWQgKGYsIHcpOwoKICAgIHN0YXR1cyA9IDA7CiAgICBm
b3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgaWYgKHctPmRhdGFbaV0g
IT0gKHVuc2lnbmVkIGNoYXIpICgxMDI3IC0gaSkpCiAgICAgICAgICBzdGF0dXMgPSAxOwogICAg
ICB9OwoKICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX3VjaGFyIiAiX3dyaXRlIGFu
ZCByZWFkIHdvcmsgY29ycmVjdGx5Iik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIGdzbF92ZWN0
b3JfdWNoYXJfZnJlZSAodik7CiAgZ3NsX3ZlY3Rvcl91Y2hhcl9mcmVlICh3KTsKfQoKdm9pZAp0
ZXN0X3VjaGFyX3RyYXAgKHZvaWQpCnsKICBnc2xfdmVjdG9yX3VjaGFyICogdiA9IGdzbF92ZWN0
b3JfdWNoYXJfYWxsb2MgKDEwMjcpOwoKICBzaXplX3QgaiA9IDA7CiAgZG91YmxlIHg7CgogIHN0
YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl91Y2hhcl9zZXQgKHYsIGogLSAxLCAodW5zaWduZWQgY2hh
cikwKTsKICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3JfdWNoYXIiICJfc2V0IHRyYXBz
IGluZGV4IGJlbG93IGxvd2VyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl91
Y2hhcl9zZXQgKHYsIDEwMjcgKyAxLCAodW5zaWduZWQgY2hhcikwKTsKICBnc2xfdGVzdCAoIXN0
YXR1cywgImdzbF92ZWN0b3JfdWNoYXIiICJfc2V0IHRyYXBzIGluZGV4IGFib3ZlIHVwcGVyIGJv
dW5kIik7CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl91Y2hhcl9zZXQgKHYsIDEwMjcsICh1
bnNpZ25lZCBjaGFyKTApOwogIGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91Y2hhciIg
Il9zZXQgdHJhcHMgaW5kZXggYXQgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICB4ID0g
Z3NsX3ZlY3Rvcl91Y2hhcl9nZXQgKHYsIGogLSAxKTsKICBnc2xfdGVzdCAoIXN0YXR1cywgImdz
bF92ZWN0b3JfdWNoYXIiICJfZ2V0IHRyYXBzIGluZGV4IGJlbG93IGxvd2VyIGJvdW5kIik7CiAg
Z3NsX3Rlc3QgKHggIT0gMCwKICAgICAgICAgImdzbF92ZWN0b3JfdWNoYXIiICJfZ2V0IHJldHVy
bnMgemVybyBmb3IgaW5kZXggYmVsb3cgbG93ZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICB4
ID0gZ3NsX3ZlY3Rvcl91Y2hhcl9nZXQgKHYsIDEwMjcgKyAxKTsKICBnc2xfdGVzdCAoIXN0YXR1
cywgImdzbF92ZWN0b3JfdWNoYXIiICJfZ2V0IHRyYXBzIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5k
Iik7CiAgZ3NsX3Rlc3QgKHggIT0gMCwKICAgICAgICAgImdzbF92ZWN0b3JfdWNoYXIiICJfZ2V0
IHJldHVybnMgemVybyBmb3IgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0g
MDsKICB4ID0gZ3NsX3ZlY3Rvcl91Y2hhcl9nZXQgKHYsIDEwMjcpOwogIGdzbF90ZXN0ICghc3Rh
dHVzLCAiZ3NsX3ZlY3Rvcl91Y2hhciIgIl9nZXQgdHJhcHMgaW5kZXggYXQgdXBwZXIgYm91bmQi
KTsKICBnc2xfdGVzdCAoeCAhPSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl91Y2hhciIgIl9n
ZXQgcmV0dXJucyB6ZXJvIGZvciBpbmRleCBhdCB1cHBlciBib3VuZCIpOwoKICBnc2xfdmVjdG9y
X3VjaGFyX2ZyZWUgKHYpOwp9CiMgMTM0ICJ0ZXN0LmMiIDIKIyAxICJ0ZXN0X2lvLmMiIDEKIyAy
MCAidGVzdF9pby5jIgp2b2lkIHRlc3RfdWNoYXJfdGV4dCAodm9pZCk7Cgp2b2lkCnRlc3RfdWNo
YXJfdGV4dCAodm9pZCkKewogIGdzbF92ZWN0b3JfdWNoYXIgKiB2ID0gZ3NsX3ZlY3Rvcl91Y2hh
cl9hbGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3Rvcl91Y2hhciAqIHcgPSBnc2xfdmVjdG9yX3VjaGFy
X2FsbG9jICgxMDI3KTsKCiAgc2l6ZV90IGk7CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRl
c3QudHh0IiwgInciKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAg
ICAgICAgZ3NsX3ZlY3Rvcl91Y2hhcl9zZXQgKHYsIGksICh1bnNpZ25lZCBjaGFyKSBpKTsKICAg
ICAgfTsKCiAgICBnc2xfdmVjdG9yX3VjaGFyX2ZwcmludGYgKGYsIHYsICIldSIpOwoKICAgIGZj
bG9zZSAoZik7CiAgfQoKICB7CiAgICBGSUxFICpmID0gZm9wZW4gKCJ0ZXN0LnR4dCIsICJyIik7
CgogICAgZ3NsX3ZlY3Rvcl91Y2hhcl9mc2NhbmYgKGYsIHcpOwoKICAgIHN0YXR1cyA9IDA7CiAg
ICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgaWYgKHctPmRhdGFb
aV0gIT0gKHVuc2lnbmVkIGNoYXIpIGkpCiAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICB9OwoK
ICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX3VjaGFyIiAiX2ZwcmludGYgYW5kIGZz
Y2FuZiB3b3JrIGNvcnJlY3RseSIpOwoKICAgIGZjbG9zZSAoZik7CiAgfQoKICBnc2xfdmVjdG9y
X3VjaGFyX2ZyZWUgKHYpOwogIGdzbF92ZWN0b3JfdWNoYXJfZnJlZSAodyk7Cn0KIyAxMzUgInRl
c3QuYyIgMgojIDEgInRlbXBsYXRlc19vZmYuaCIgMQojIDEzNiAidGVzdC5jIiAyCgoKCiMgMSAi
dGVtcGxhdGVzX29uLmgiIDEKIyAxNDAgInRlc3QuYyIgMgojIDEgInRlc3Rfc291cmNlLmMiIDEK
IyAyMCAidGVzdF9zb3VyY2UuYyIKdm9pZCB0ZXN0X2NoYXJfZnVuYyAodm9pZCk7CnZvaWQgdGVz
dF9jaGFyX2JpbmFyeSAodm9pZCk7CnZvaWQgdGVzdF9jaGFyX3RyYXAgKHZvaWQpOwoKdm9pZAp0
ZXN0X2NoYXJfZnVuYyAodm9pZCkKewogIGdzbF92ZWN0b3JfY2hhciAqIHY7CiAgc2l6ZV90IGk7
CgogIHYgPSBnc2xfdmVjdG9yX2NoYXJfY2FsbG9jICgxMDI3KTsKCiAgZ3NsX3Rlc3QgKHYtPmRh
dGEgPT0gMCwgImdzbF92ZWN0b3JfY2hhciIgIl9hbGxvYyByZXR1cm5zIHZhbGlkIHBvaW50ZXIi
KTsKICBnc2xfdGVzdCAodi0+c2l6ZSAhPSAxMDI3LCAiZ3NsX3ZlY3Rvcl9jaGFyIiAiX2FsbG9j
IHJldHVybnMgdmFsaWQgc2l6ZSIpOwogIGdzbF90ZXN0ICh2LT5zdHJpZGUgIT0gMSwgImdzbF92
ZWN0b3JfY2hhciIgIl9hbGxvYyByZXR1cm5zIHVuaXQgc3RyaWRlIik7CgogIGZvciAoaSA9IDA7
IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdzbF92ZWN0b3JfY2hhcl9zZXQgKHYsIGksIChj
aGFyKSBpKTsKICAgIH0KCgogIHN0YXR1cyA9IDA7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBp
KyspCiAgICB7CiAgICAgIGlmICh2LT5kYXRhW2ldICE9IChjaGFyKSBpKQogICAgICAgIHN0YXR1
cyA9IDE7CiAgICB9OwoKICBnc2xfdGVzdCAoc3RhdHVzLAogICAgICAgICAgICAiZ3NsX3ZlY3Rv
cl9jaGFyIiAiX3NldCIgIiIgIiB3cml0ZXMgaW50byBhcnJheSBjb3JyZWN0bHkiKTsKCgogIHN0
YXR1cyA9IDA7CiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgaWYgKGdz
bF92ZWN0b3JfY2hhcl9nZXQgKHYsIGkpICE9IChjaGFyKSBpKQogICAgICAgIHN0YXR1cyA9IDE7
CiAgICB9OwogIGdzbF90ZXN0IChzdGF0dXMsCiAgICAgICAgICAgICJnc2xfdmVjdG9yX2NoYXIi
ICJfZ2V0IiAiIiAiIHJlYWRzIGZyb20gYXJyYXkgY29ycmVjdGx5Iik7CgoKCgogIHYtPnN0cmlk
ZSA9IDI7CgogIHN0YXR1cyA9IDA7CiAgZm9yIChpID0gMDsgaSA8IDEwMjcgLyAyOyBpKyspCiAg
ICB7CiAgICAgIGlmIChnc2xfdmVjdG9yX2NoYXJfZ2V0ICh2LCBpKSAhPSAoY2hhcikgKDIgKiBp
KSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3Zl
Y3Rvcl9jaGFyIiAiX2dldCIgIiIgIiByZWFkcyBjb3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsKCiAg
Zm9yIChpID0gMDsgaSA8IDEwMjcgLyAyOyBpKyspCiAgICB7CiAgICAgIGdzbF92ZWN0b3JfY2hh
cl9zZXQgKHYsIGksIChjaGFyKSAoaSArIDEwMDApKTsKICAgIH07CgogIHN0YXR1cyA9IDA7Cgog
IGZvciAoaSA9IDA7IGkgPCAxMDI3IC8gMjsgaSsrKQogICAgewogICAgICBpZiAodi0+ZGF0YVsy
ICogaV0gIT0gKGNoYXIpIChpICsgMTAwMCkpCiAgICAgICAgc3RhdHVzID0gMTsKICAgIH07Cgog
IGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2NoYXIiICJfc2V0IiAiIiAiIHdyaXRlcyBj
b3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsKCgoKICB2LT5zdHJpZGUgPSAxIDsKCiAgZm9yIChpID0g
MDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgZ3NsX3ZlY3Rvcl9jaGFyX3NldCAodiwgaSwg
KGNoYXIpIGkpOwogICAgfQoKICBnc2xfdmVjdG9yX2NoYXJfc3dhcF9lbGVtZW50cyAodiwgMiwg
NSkgOwoKICBzdGF0dXMgPSAoZ3NsX3ZlY3Rvcl9jaGFyX2dldCh2LDIpICE9IDUpIDsKICBzdGF0
dXMgfD0gKGdzbF92ZWN0b3JfY2hhcl9nZXQodiw1KSAhPSAyKSA7CgogIGdzbF92ZWN0b3JfY2hh
cl9zd2FwX2VsZW1lbnRzICh2LCAyLCA1KSA7CgogIHN0YXR1cyB8PSAoZ3NsX3ZlY3Rvcl9jaGFy
X2dldCh2LDIpICE9IDIpIDsKICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfY2hhcl9nZXQodiw1KSAh
PSA1KSA7CgogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2NoYXIiICJfc3dhcF9lbGVt
ZW50cyIgIiIgIiBleGNoYW5nZXMgZWxlbWVudHMgY29ycmVjdGx5IikgOwoKICBzdGF0dXMgPSAw
OwoKICBnc2xfdmVjdG9yX2NoYXJfcmV2ZXJzZSAodikgOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAy
NzsgaSsrKQogICAgewogICAgICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfY2hhcl9nZXQgKHYsIGkp
ICE9IChjaGFyKSAoMTAyNyAtIGkgLSAxKSk7CiAgICB9CgogIGdzbF90ZXN0IChzdGF0dXMsICJn
c2xfdmVjdG9yX2NoYXIiICJfcmV2ZXJzZSIgIiIgIiByZXZlcnNlcyBlbGVtZW50cyBjb3JyZWN0
bHkiKSA7CgogIHsKICAgIGNoYXIgZXhwX21heCA9IGdzbF92ZWN0b3JfY2hhcl9nZXQodiwgMCk7
CiAgICBjaGFyIGV4cF9taW4gPSBnc2xfdmVjdG9yX2NoYXJfZ2V0KHYsIDApOwogICAgc2l6ZV90
IGV4cF9pbWF4ID0gMCwgZXhwX2ltaW4gPSAwOwoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBp
KyspCiAgICAgIHsKICAgICAgICBjaGFyIGsgPSBnc2xfdmVjdG9yX2NoYXJfZ2V0ICh2LCBpKSA7
CiAgICAgICAgaWYgKGsgPCBleHBfbWluKSB7CiAgICAgICAgICBleHBfbWluID0gZ3NsX3ZlY3Rv
cl9jaGFyX2dldCAodiwgaSk7CiAgICAgICAgICBleHBfaW1pbiA9IGk7CiAgICAgICAgfQogICAg
ICB9CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGNoYXIg
ayA9IGdzbF92ZWN0b3JfY2hhcl9nZXQgKHYsIGkpIDsKICAgICAgICBpZiAoayA+IGV4cF9tYXgp
IHsKICAgICAgICAgIGV4cF9tYXggPSBnc2xfdmVjdG9yX2NoYXJfZ2V0ICh2LCBpKSA7CiAgICAg
ICAgICBleHBfaW1heCA9IGk7CiAgICAgICAgfQogICAgICB9CgogICAgewogICAgICBjaGFyIG1h
eCA9IGdzbF92ZWN0b3JfY2hhcl9tYXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChtYXggIT0gZXhw
X21heCwgImdzbF92ZWN0b3JfY2hhciIgIl9tYXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0gdmFs
dWUiKTsKICAgIH0KCiAgICB7CiAgICAgIGNoYXIgbWluID0gZ3NsX3ZlY3Rvcl9jaGFyX21pbiAo
dikgOwoKICAgICAgZ3NsX3Rlc3QgKG1pbiAhPSBleHBfbWluLCAiZ3NsX3ZlY3Rvcl9jaGFyIiAi
X21pbiByZXR1cm5zIGNvcnJlY3QgbWluaW11bSB2YWx1ZSIpOwogICAgfQoKICAgIHsKICAgICAg
Y2hhciBtaW4sIG1heDsKICAgICAgZ3NsX3ZlY3Rvcl9jaGFyX21pbm1heCAodiwgJm1pbiwgJm1h
eCk7CgogICAgICBnc2xfdGVzdCAobWF4ICE9IGV4cF9tYXgsICJnc2xfdmVjdG9yX2NoYXIiICJf
bWlubWF4IHJldHVybnMgY29ycmVjdCBtYXhpbXVtIHZhbHVlIik7CiAgICAgIGdzbF90ZXN0ICht
aW4gIT0gZXhwX21pbiwgImdzbF92ZWN0b3JfY2hhciIgIl9taW5tYXggcmV0dXJucyBjb3JyZWN0
IG1pbmltdW0gdmFsdWUiKTsKICAgIH0KCgogICAgewogICAgICBzaXplX3QgaW1heCA9IGdzbF92
ZWN0b3JfY2hhcl9tYXhfaW5kZXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChpbWF4ICE9IGV4cF9p
bWF4LCAiZ3NsX3ZlY3Rvcl9jaGFyIiAiX21heF9pbmRleCByZXR1cm5zIGNvcnJlY3QgbWF4aW11
bSBpIik7CiAgICB9CgogICAgewogICAgICBzaXplX3QgaW1pbiA9IGdzbF92ZWN0b3JfY2hhcl9t
aW5faW5kZXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChpbWluICE9IGV4cF9pbWluLCAiZ3NsX3Zl
Y3Rvcl9jaGFyIiAiX21pbl9pbmRleCByZXR1cm5zIGNvcnJlY3QgbWluaW11bSBpIik7CiAgICB9
CgogICAgewogICAgICBzaXplX3QgaW1pbiwgaW1heDsKCiAgICAgIGdzbF92ZWN0b3JfY2hhcl9t
aW5tYXhfaW5kZXggKHYsICZpbWluLCAmaW1heCk7CgogICAgICBnc2xfdGVzdCAoaW1heCAhPSBl
eHBfaW1heCwgImdzbF92ZWN0b3JfY2hhciIgIl9taW5tYXhfaW5kZXggcmV0dXJucyBjb3JyZWN0
IG1heGltdW0gaSIpOwogICAgICBnc2xfdGVzdCAoaW1pbiAhPSBleHBfaW1pbiwgImdzbF92ZWN0
b3JfY2hhciIgIl9taW5tYXhfaW5kZXggcmV0dXJucyBjb3JyZWN0IG1pbmltdW0gaSIpOwogICAg
fQogIH0KCgogIHsKICAgIGdzbF92ZWN0b3JfY2hhciAqIGEgPSBnc2xfdmVjdG9yX2NoYXJfY2Fs
bG9jICgxMDI3KTsKICAgIGdzbF92ZWN0b3JfY2hhciAqIGIgPSBnc2xfdmVjdG9yX2NoYXJfY2Fs
bG9jICgxMDI3KTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAg
ICAgZ3NsX3ZlY3Rvcl9jaGFyX3NldCAoYSwgaSwgKGNoYXIpKDMgKyBpKSk7CiAgICAgICAgZ3Ns
X3ZlY3Rvcl9jaGFyX3NldCAoYiwgaSwgKGNoYXIpKDMgKyAyICogaSkpOwogICAgICB9CgogICAg
Z3NsX3ZlY3Rvcl9jaGFyX21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX2NoYXJfYWRkICh2
LCBiKTsKCiAgICB7CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9yIChpID0gMDsgaSA8
IDEwMjc7IGkrKykKICAgICAgICB7CiAgICAgICAgICBjaGFyIHIgPSBnc2xfdmVjdG9yX2NoYXJf
Z2V0ICh2LGkpOwogICAgICAgICAgY2hhciB4ID0gZ3NsX3ZlY3Rvcl9jaGFyX2dldCAoYSxpKTsK
ICAgICAgICAgIGNoYXIgeSA9IGdzbF92ZWN0b3JfY2hhcl9nZXQgKGIsaSk7CiAgICAgICAgICBj
aGFyIHogPSB4ICsgeTsKICAgICAgICAgIGlmIChyICE9IHopCiAgICAgICAgICAgIHN0YXR1cyA9
IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jaGFyIiAi
X2FkZCBhZGRzIGNvcnJlY3RseSIpOwogICAgfQoKCiAgICBnc2xfdmVjdG9yX2NoYXJfbWVtY3B5
ICh2LCBhKTsKICAgIGdzbF92ZWN0b3JfY2hhcl9zdWIgKHYsIGIpOwoKICAgIHsKICAgICAgaW50
IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsK
ICAgICAgICAgIGNoYXIgciA9IGdzbF92ZWN0b3JfY2hhcl9nZXQgKHYsaSk7CiAgICAgICAgICBj
aGFyIHggPSBnc2xfdmVjdG9yX2NoYXJfZ2V0IChhLGkpOwogICAgICAgICAgY2hhciB5ID0gZ3Ns
X3ZlY3Rvcl9jaGFyX2dldCAoYixpKTsKICAgICAgICAgIGNoYXIgeiA9IHggLSB5OwogICAgICAg
ICAgaWYgKHIgIT0geikKICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAgIGdz
bF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2NoYXIiICJfc3ViIHN1YnRyYWN0cyBjb3JyZWN0
bHkiKTsKICAgIH0KCiAgICBnc2xfdmVjdG9yX2NoYXJfbWVtY3B5ICh2LCBhKTsKICAgIGdzbF92
ZWN0b3JfY2hhcl9tdWwgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAg
ICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIGNoYXIgciA9
IGdzbF92ZWN0b3JfY2hhcl9nZXQgKHYsaSk7CiAgICAgICAgICBjaGFyIHggPSBnc2xfdmVjdG9y
X2NoYXJfZ2V0IChhLGkpOwogICAgICAgICAgY2hhciB5ID0gZ3NsX3ZlY3Rvcl9jaGFyX2dldCAo
YixpKTsKICAgICAgICAgIGNoYXIgeiA9IHggKiB5OwogICAgICAgICAgaWYgKHIgIT0geikKICAg
ICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAgIGdzbF90ZXN0IChzdGF0dXMsICJn
c2xfdmVjdG9yX2NoYXIiICJfbXVsIG11bHRpcGxpZXMgY29ycmVjdGx5Iik7CiAgICB9CgogICAg
Z3NsX3ZlY3Rvcl9jaGFyX21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX2NoYXJfZGl2ICh2
LCBiKTsKCiAgICB7CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9yIChpID0gMDsgaSA8
IDEwMjc7IGkrKykKICAgICAgICB7CiAgICAgICAgICBjaGFyIHIgPSBnc2xfdmVjdG9yX2NoYXJf
Z2V0ICh2LGkpOwogICAgICAgICAgY2hhciB4ID0gZ3NsX3ZlY3Rvcl9jaGFyX2dldCAoYSxpKTsK
ICAgICAgICAgIGNoYXIgeSA9IGdzbF92ZWN0b3JfY2hhcl9nZXQgKGIsaSk7CiAgICAgICAgICBj
aGFyIHogPSB4IC8geTsKICAgICAgICAgIGlmIChmYWJzKHIgLSB6KSA+IDIgKiAxLjE5MjA5Mjg5
NTUwNzgxMjVlLTA3ICogZmFicyh6KSkKICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9
CiAgICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2NoYXIiICJfZGl2IGRpdmlkZXMg
Y29ycmVjdGx5Iik7CiAgICB9CgoKICAgIGdzbF92ZWN0b3JfY2hhcl9mcmVlIChhKTsKICAgIGdz
bF92ZWN0b3JfY2hhcl9mcmVlIChiKTsKICB9CgoKCgogIGdzbF92ZWN0b3JfY2hhcl9mcmVlICh2
KTsKfQoKCnZvaWQKdGVzdF9jaGFyX2JpbmFyeSAodm9pZCkKewogIGdzbF92ZWN0b3JfY2hhciAq
IHYgPSBnc2xfdmVjdG9yX2NoYXJfY2FsbG9jICgxMDI3KTsKICBnc2xfdmVjdG9yX2NoYXIgKiB3
ID0gZ3NsX3ZlY3Rvcl9jaGFyX2NhbGxvYyAoMTAyNyk7CgogIHNpemVfdCBpOwoKICB7CiAgICBG
SUxFICpmID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJ3YiIpOwoKICAgIGZvciAoaSA9IDA7IGkgPCAx
MDI3OyBpKyspCiAgICAgIHsKICAgICAgICBnc2xfdmVjdG9yX2NoYXJfc2V0ICh2LCBpLCAoY2hh
cikgKDEwMjcgLSBpKSk7CiAgICAgIH07CgogICAgZ3NsX3ZlY3Rvcl9jaGFyX2Z3cml0ZSAoZiwg
dik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3Qu
ZGF0IiwgInJiIik7CgogICAgZ3NsX3ZlY3Rvcl9jaGFyX2ZyZWFkIChmLCB3KTsKCiAgICBzdGF0
dXMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGlm
ICh3LT5kYXRhW2ldICE9IChjaGFyKSAoMTAyNyAtIGkpKQogICAgICAgICAgc3RhdHVzID0gMTsK
ICAgICAgfTsKCiAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jaGFyIiAiX3dyaXRl
IGFuZCByZWFkIHdvcmsgY29ycmVjdGx5Iik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIGdzbF92
ZWN0b3JfY2hhcl9mcmVlICh2KTsKICBnc2xfdmVjdG9yX2NoYXJfZnJlZSAodyk7Cn0KCnZvaWQK
dGVzdF9jaGFyX3RyYXAgKHZvaWQpCnsKICBnc2xfdmVjdG9yX2NoYXIgKiB2ID0gZ3NsX3ZlY3Rv
cl9jaGFyX2FsbG9jICgxMDI3KTsKCiAgc2l6ZV90IGogPSAwOwogIGRvdWJsZSB4OwoKICBzdGF0
dXMgPSAwOwogIGdzbF92ZWN0b3JfY2hhcl9zZXQgKHYsIGogLSAxLCAoY2hhcikwKTsKICBnc2xf
dGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3JfY2hhciIgIl9zZXQgdHJhcHMgaW5kZXggYmVsb3cg
bG93ZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICBnc2xfdmVjdG9yX2NoYXJfc2V0ICh2LCAx
MDI3ICsgMSwgKGNoYXIpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2NoYXIi
ICJfc2V0IHRyYXBzIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAg
Z3NsX3ZlY3Rvcl9jaGFyX3NldCAodiwgMTAyNywgKGNoYXIpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0
dXMsICJnc2xfdmVjdG9yX2NoYXIiICJfc2V0IHRyYXBzIGluZGV4IGF0IHVwcGVyIGJvdW5kIik7
CgogIHN0YXR1cyA9IDA7CiAgeCA9IGdzbF92ZWN0b3JfY2hhcl9nZXQgKHYsIGogLSAxKTsKICBn
c2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3JfY2hhciIgIl9nZXQgdHJhcHMgaW5kZXggYmVs
b3cgbG93ZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoeCAhPSAwLAogICAgICAgICAiZ3NsX3ZlY3Rv
cl9jaGFyIiAiX2dldCByZXR1cm5zIHplcm8gZm9yIGluZGV4IGJlbG93IGxvd2VyIGJvdW5kIik7
CgogIHN0YXR1cyA9IDA7CiAgeCA9IGdzbF92ZWN0b3JfY2hhcl9nZXQgKHYsIDEwMjcgKyAxKTsK
ICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3JfY2hhciIgIl9nZXQgdHJhcHMgaW5kZXgg
YWJvdmUgdXBwZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoeCAhPSAwLAogICAgICAgICAiZ3NsX3Zl
Y3Rvcl9jaGFyIiAiX2dldCByZXR1cm5zIHplcm8gZm9yIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5k
Iik7CgogIHN0YXR1cyA9IDA7CiAgeCA9IGdzbF92ZWN0b3JfY2hhcl9nZXQgKHYsIDEwMjcpOwog
IGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jaGFyIiAiX2dldCB0cmFwcyBpbmRleCBh
dCB1cHBlciBib3VuZCIpOwogIGdzbF90ZXN0ICh4ICE9IDAsCiAgICAgICAgICAgICJnc2xfdmVj
dG9yX2NoYXIiICJfZ2V0IHJldHVybnMgemVybyBmb3IgaW5kZXggYXQgdXBwZXIgYm91bmQiKTsK
CiAgZ3NsX3ZlY3Rvcl9jaGFyX2ZyZWUgKHYpOwp9CiMgMTQxICJ0ZXN0LmMiIDIKIyAxICJ0ZXN0
X2lvLmMiIDEKIyAyMCAidGVzdF9pby5jIgp2b2lkIHRlc3RfY2hhcl90ZXh0ICh2b2lkKTsKCnZv
aWQKdGVzdF9jaGFyX3RleHQgKHZvaWQpCnsKICBnc2xfdmVjdG9yX2NoYXIgKiB2ID0gZ3NsX3Zl
Y3Rvcl9jaGFyX2FsbG9jICgxMDI3KTsKICBnc2xfdmVjdG9yX2NoYXIgKiB3ID0gZ3NsX3ZlY3Rv
cl9jaGFyX2FsbG9jICgxMDI3KTsKCiAgc2l6ZV90IGk7CgogIHsKICAgIEZJTEUgKmYgPSBmb3Bl
biAoInRlc3QudHh0IiwgInciKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAg
ICB7CiAgICAgICAgZ3NsX3ZlY3Rvcl9jaGFyX3NldCAodiwgaSwgKGNoYXIpIGkpOwogICAgICB9
OwoKICAgIGdzbF92ZWN0b3JfY2hhcl9mcHJpbnRmIChmLCB2LCAiJWQiKTsKCiAgICBmY2xvc2Ug
KGYpOwogIH0KCiAgewogICAgRklMRSAqZiA9IGZvcGVuICgidGVzdC50eHQiLCAiciIpOwoKICAg
IGdzbF92ZWN0b3JfY2hhcl9mc2NhbmYgKGYsIHcpOwoKICAgIHN0YXR1cyA9IDA7CiAgICBmb3Ig
KGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgaWYgKHctPmRhdGFbaV0gIT0g
KGNoYXIpIGkpCiAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICB9OwoKICAgIGdzbF90ZXN0IChz
dGF0dXMsICJnc2xfdmVjdG9yX2NoYXIiICJfZnByaW50ZiBhbmQgZnNjYW5mIHdvcmsgY29ycmVj
dGx5Iik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIGdzbF92ZWN0b3JfY2hhcl9mcmVlICh2KTsK
ICBnc2xfdmVjdG9yX2NoYXJfZnJlZSAodyk7Cn0KIyAxNDIgInRlc3QuYyIgMgojIDEgInRlbXBs
YXRlc19vZmYuaCIgMQojIDE0MyAidGVzdC5jIiAyCgoKdm9pZCBteV9lcnJvcl9oYW5kbGVyIChj
b25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIgKmZpbGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGxpbmUsIGludCBlcnIpOwoKaW50Cm1haW4gKHZvaWQpCnsKICBnc2xfaWVlZV9lbnZf
c2V0dXAgKCk7CgogIHRlc3RfZnVuYyAoKTsKICB0ZXN0X2Zsb2F0X2Z1bmMgKCk7CiAgdGVzdF9s
b25nX2RvdWJsZV9mdW5jICgpOwogIHRlc3RfdWxvbmdfZnVuYyAoKTsKICB0ZXN0X2xvbmdfZnVu
YyAoKTsKICB0ZXN0X3VpbnRfZnVuYyAoKTsKICB0ZXN0X2ludF9mdW5jICgpOwogIHRlc3RfdXNo
b3J0X2Z1bmMgKCk7CiAgdGVzdF9zaG9ydF9mdW5jICgpOwogIHRlc3RfdWNoYXJfZnVuYyAoKTsK
ICB0ZXN0X2NoYXJfZnVuYyAoKTsKICB0ZXN0X2NvbXBsZXhfZnVuYyAoKTsKICB0ZXN0X2NvbXBs
ZXhfZmxvYXRfZnVuYyAoKTsKICB0ZXN0X2NvbXBsZXhfbG9uZ19kb3VibGVfZnVuYyAoKTsKCiAg
dGVzdF90ZXh0ICgpOwogIHRlc3RfZmxvYXRfdGV4dCAoKTsKCiAgdGVzdF9sb25nX2RvdWJsZV90
ZXh0ICgpOwoKICB0ZXN0X3Vsb25nX3RleHQgKCk7CiAgdGVzdF9sb25nX3RleHQgKCk7CiAgdGVz
dF91aW50X3RleHQgKCk7CiAgdGVzdF9pbnRfdGV4dCAoKTsKICB0ZXN0X3VzaG9ydF90ZXh0ICgp
OwogIHRlc3Rfc2hvcnRfdGV4dCAoKTsKICB0ZXN0X3VjaGFyX3RleHQgKCk7CiAgdGVzdF9jaGFy
X3RleHQgKCk7CiAgdGVzdF9jb21wbGV4X3RleHQgKCk7CiAgdGVzdF9jb21wbGV4X2Zsb2F0X3Rl
eHQgKCk7CgogIHRlc3RfY29tcGxleF9sb25nX2RvdWJsZV90ZXh0ICgpOwoKCiAgdGVzdF9iaW5h
cnkgKCk7CiAgdGVzdF9mbG9hdF9iaW5hcnkgKCk7CiAgdGVzdF9sb25nX2RvdWJsZV9iaW5hcnkg
KCk7CiAgdGVzdF91bG9uZ19iaW5hcnkgKCk7CiAgdGVzdF9sb25nX2JpbmFyeSAoKTsKICB0ZXN0
X3VpbnRfYmluYXJ5ICgpOwogIHRlc3RfaW50X2JpbmFyeSAoKTsKICB0ZXN0X3VzaG9ydF9iaW5h
cnkgKCk7CiAgdGVzdF9zaG9ydF9iaW5hcnkgKCk7CiAgdGVzdF91Y2hhcl9iaW5hcnkgKCk7CiAg
dGVzdF9jaGFyX2JpbmFyeSAoKTsKICB0ZXN0X2NvbXBsZXhfYmluYXJ5ICgpOwogIHRlc3RfY29t
cGxleF9mbG9hdF9iaW5hcnkgKCk7CiAgdGVzdF9jb21wbGV4X2xvbmdfZG91YmxlX2JpbmFyeSAo
KTsKCiAgZ3NsX3dhcm5pbmdzX29mZiA9IDE7CgogIGdzbF9zZXRfZXJyb3JfaGFuZGxlciAoJm15
X2Vycm9yX2hhbmRsZXIpOwoKICB0ZXN0X3RyYXAgKCk7CiAgdGVzdF9mbG9hdF90cmFwICgpOwog
IHRlc3RfbG9uZ19kb3VibGVfdHJhcCAoKTsKICB0ZXN0X3Vsb25nX3RyYXAgKCk7CiAgdGVzdF9s
b25nX3RyYXAgKCk7CiAgdGVzdF91aW50X3RyYXAgKCk7CiAgdGVzdF9pbnRfdHJhcCAoKTsKICB0
ZXN0X3VzaG9ydF90cmFwICgpOwogIHRlc3Rfc2hvcnRfdHJhcCAoKTsKICB0ZXN0X3VjaGFyX3Ry
YXAgKCk7CiAgdGVzdF9jaGFyX3RyYXAgKCk7CiAgdGVzdF9jb21wbGV4X3RyYXAgKCk7CiAgdGVz
dF9jb21wbGV4X2Zsb2F0X3RyYXAgKCk7CiAgdGVzdF9jb21wbGV4X2xvbmdfZG91YmxlX3RyYXAg
KCk7CgogIGV4aXQgKGdzbF90ZXN0X3N1bW1hcnkgKCkpOwp9Cgp2b2lkCm15X2Vycm9yX2hhbmRs
ZXIgKGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGludCBl
cnIpCnsKICBpZiAoMCkKICAgIHByaW50ZiAoIihjYXVnaHQgWyVzOiVkOiAlcyAoJWQpXSlcbiIs
IGZpbGUsIGxpbmUsIHJlYXNvbiwgZXJyKTsKICBzdGF0dXMgPSAxOwp9Cg==


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

end of thread, other threads:[~2002-10-23 13:12 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-10-23  6:12 c/6964: Internal compiler error using -O2 but ok using -O0 reichelt
  -- strict thread matches above, loose matches on Subject: below --
2002-07-02 11:16 Reichelt
2002-06-12  7:46 Reichelt
2002-06-07 14:26 jari

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).