public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/2585: Internel error compiling the Jikes java compiler with mingw32
@ 2001-08-12 13:00 rodrigc
  0 siblings, 0 replies; 3+ messages in thread
From: rodrigc @ 2001-08-12 13:00 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, lryan, rodrigc, nobody, sweeney

Synopsis: Internel error compiling the Jikes java compiler with mingw32

State-Changed-From-To: open->feedback
State-Changed-By: rodrigc
State-Changed-When: Sun Aug 12 13:00:37 2001
State-Changed-Why:
    Can you:
    (1) Obtain an updated release of mingw from
        http://www.mingw.org
    
    (2) Recompile the example, but follow the
        instructions at http://gcc.gnu.org/bugs.html
        for supplying information to a GNATS bug report.
    
    
    The file that you supplied is missing some header
    files, so I cannot reproduce the problem.

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


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

* Re: c++/2585: Internel error compiling the Jikes java compiler with mingw32
@ 2001-09-15 20:08 rodrigc
  0 siblings, 0 replies; 3+ messages in thread
From: rodrigc @ 2001-09-15 20:08 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, lryan, rodrigc, nobody, sweeney

Synopsis: Internel error compiling the Jikes java compiler with mingw32

State-Changed-From-To: feedback->closed
State-Changed-By: rodrigc
State-Changed-When: Sat Sep 15 20:08:41 2001
State-Changed-Why:
    Feedback not provided.

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


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

* c++/2585: Internel error compiling the Jikes java compiler with mingw32
@ 2001-04-18 20:16 sweeney
  0 siblings, 0 replies; 3+ messages in thread
From: sweeney @ 2001-04-18 20:16 UTC (permalink / raw)
  To: gcc-gnats; +Cc: lryan

>Number:         2585
>Category:       c++
>Synopsis:       Internel error compiling the Jikes java compiler with mingw32
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Apr 18 20:16:00 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     sweeney@evolve.com
>Release:        unknown-1.0
>Organization:
>Environment:
cygwin + mingw32 on NT 4.0
>Description:
Jikes is an open source Java compiler from IBM.  The instructions for obtaining the source and compiling using cygwin and mingw are here:

http://oss.software.ibm.com/developerworks/opensource/jikes/faq/dev-win32.shtml

Unfortunately, the latest source from CVS will not compile due to an internal compiler error as follows:

bash-2.04$ make
make  all-am
make[1]: Entering directory `/cygdrive/g/cvs/jikes/src'
g++ -DHAVE_CONFIG_H -I. -I. -I.     -g -O2 -c -o ast.o ast.cpp
g++ -DHAVE_CONFIG_H -I. -I. -I.     -g -O2 -c -o body.o body.cpp
g++ -DHAVE_CONFIG_H -I. -I. -I.     -g -O2 -c -o bytecode.o bytecode.cpp
g++ -DHAVE_CONFIG_H -I. -I. -I.     -g -O2 -c -o case.o case.cpp
g++ -DHAVE_CONFIG_H -I. -I. -I.     -g -O2 -c -o code.o code.cpp
g++ -DHAVE_CONFIG_H -I. -I. -I.     -g -O2 -c -o control.o control.cpp
g++ -DHAVE_CONFIG_H -I. -I. -I.     -g -O2 -c -o decl.o decl.cpp
g++ -DHAVE_CONFIG_H -I. -I. -I.     -g -O2 -c -o definite.o definite.cpp
g++ -DHAVE_CONFIG_H -I. -I. -I.     -g -O2 -c -o depend.o depend.cpp
g++ -DHAVE_CONFIG_H -I. -I. -I.     -g -O2 -c -o diagnose.o diagnose.cpp
g++ -DHAVE_CONFIG_H -I. -I. -I.     -g -O2 -c -o double.o double.cpp
double.cpp: In method `IEEEfloat::IEEEfloat(const char *, bool = false)':
double.cpp:695: Internal compiler error in `convert_move', at expr.c:570
Please submit a full bug report.
See <URL: http://www.gnu.org/software/gcc/faq.html#bugreport > for instructions.
make[1]: *** [double.o] Error 1
make[1]: Leaving directory `/cygdrive/g/cvs/jikes/src'
make: *** [all] Error 2
bash-2.04$

I am including the offending source file as an attachment.
>How-To-Repeat:
Follow the instructions as on the web page above to download and compile Jikes. (About an hour's work, total)
>Fix:

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

Ly8gJElkOiBkb3VibGUuY3BwLHYgMS4xOCAyMDAxLzA0LzE2IDA3OjI3OjU4IGNhYmJleSBFeHAg
JA0KLy8NCi8vIFRoaXMgc29mdHdhcmUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIElC
TSBKaWtlcyBDb21waWxlcg0KLy8gTGljZW5zZSBBZ3JlZW1lbnQgYXZhaWxhYmxlIGF0IHRoZSBm
b2xsb3dpbmcgVVJMOg0KLy8gaHR0cDovL3d3dy5pYm0uY29tL3Jlc2VhcmNoL2ppa2VzLg0KLy8g
Q29weXJpZ2h0IChDKSAxOTk2LCAxOTk4LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVz
IENvcnBvcmF0aW9uDQovLyBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi8vIFlv
dSBtdXN0IGFjY2VwdCB0aGUgdGVybXMgb2YgdGhhdCBhZ3JlZW1lbnQgdG8gdXNlIHRoaXMgc29m
dHdhcmUuDQovLw0KLy8NCi8vIE5PVEVTOiBUaGUgSUVFRSA3NTQgZW11bGF0aW9uIGNvZGUgaW4g
ZG91YmxlLmggYW5kIGRvdWJsZS5jcHAgd2l0aGluDQovLyBKaWtlcyBhcmUgYWRhcHRlZCBmcm9t
IGNvZGUgd3JpdHRlbiBieSBBbGFuIE0uIFdlYmIgb2YgSUJNJ3MgSHVyc2xleQ0KLy8gbGFiIGlu
IHBvcnRpbmcgdGhlIFN1biBKREsgdG8gU3lzdGVtLzM5MC4NCi8vDQovLw0KLy8NCi8vIEluIGFk
ZGl0aW9uLCB0aGUgY29kZSBmb3IgZW11bGF0aW5nIHRoZSByZW1haW5kZXIgb3BlcmF0b3IsICUs
IGlzDQovLyBhZGFwdGVkIGZyb20gZV9mbW9kLmMsIHBhcnQgb2YgZmRsaWJtLCB0aGUgRnJlZWx5
IERpc3RyaWJ1dGFibGUgTWF0aA0KLy8gTGlicmFyeSBtZW50aW9uZWQgaW4gdGhlIGRvY3VtZW50
YXRpb24gb2YgamF2YS5sYW5nLlN0cmljdE1hdGguICBUaGUNCi8vIG9yaWdpbmFsIGxpYnJhcnkg
aXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly9uZXRsaWIyLmNzLnV0ay5lZHUvZmRsaWJtLg0KLy8NCi8v
IFRoZSBjb2RlIGZyb20gZmRsaWJtIGlzIGNvcHlyaWdodGVkLCBhcyBmb2xsb3dzOg0KLy8gPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLy8gQ29w
eXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4NCi8vDQovLyBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJ
bmMuIGJ1c2luZXNzLg0KLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRp
c3RyaWJ1dGUgdGhpcw0KLy8gc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRo
YXQgdGhpcyBub3RpY2UgDQovLyBpcyBwcmVzZXJ2ZWQuDQovLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQovLw0KLy8NCi8vDQovLyBMaWtld2lz
ZSwgdGhlIGNvZGUgZm9yIGFjY3VyYXRlIGNvbnZlcnNpb25zIGJldHdlZW4gZmxvYXRpbmcgcG9p
bnQNCi8vIGFuZCBkZWNpbWFsIHN0cmluZ3MsIGluIGRvdWJsZS5oLCBkb3VibGUuY3BwLCBwbGF0
Zm9ybS5oLCBhbmQNCi8vIHBsYXRmb3JtLmNwcCwgaXMgYWRhcHRlZCBmcm9tIGR0b2EuYy4gIFRo
ZSBvcmlnaW5hbCBjb2RlIGNhbiBiZQ0KLy8gZm91bmQgYXQgaHR0cDovL25ldGxpYjIuY3MudXRr
LmVkdS9mcC9kdG9hLmMuDQovLw0KLy8gVGhlIGNvZGUgaW4gZHRvYS5jIGlzIGNvcHlyaWdodGVk
IGFzIGZvbGxvd3M6DQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioNCi8vKg0KLy8qIFRoZSBhdXRob3Igb2YgdGhpcyBzb2Z0
d2FyZSBpcyBEYXZpZCBNLiBHYXkuDQovLyoNCi8vKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDIwMDAs
IDIwMDEgYnkgTHVjZW50IFRlY2hub2xvZ2llcy4NCi8vKg0KLy8qIFBlcm1pc3Npb24gdG8gdXNl
LCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQ0KLy8q
IHB1cnBvc2Ugd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhp
cyBlbnRpcmUgbm90aWNlDQovLyogaXMgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiBhbnkgc29m
dHdhcmUgd2hpY2ggaXMgb3IgaW5jbHVkZXMgYSBjb3B5DQovLyogb3IgbW9kaWZpY2F0aW9uIG9m
IHRoaXMgc29mdHdhcmUgYW5kIGluIGFsbCBjb3BpZXMgb2YgdGhlIHN1cHBvcnRpbmcNCi8vKiBk
b2N1bWVudGF0aW9uIGZvciBzdWNoIHNvZnR3YXJlLg0KLy8qDQovLyogVEhJUyBTT0ZUV0FSRSBJ
UyBCRUlORyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQN
Ci8vKiBXQVJSQU5UWS4gIElOIFBBUlRJQ1VMQVIsIE5FSVRIRVIgVEhFIEFVVEhPUiBOT1IgTFVD
RU5UIE1BS0VTIEFOWQ0KLy8qIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIEFOWSBLSU5E
IENPTkNFUk5JTkcgVEhFIE1FUkNIQU5UQUJJTElUWQ0KLy8qIE9GIFRISVMgU09GVFdBUkUgT1Ig
SVRTIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UuDQovLyoNCi8vKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0K
Ly8NCi8vDQoNCiNpbmNsdWRlICJkb3VibGUuaCINCiNpbmNsdWRlICJsb25nLmgiDQoNCiNpZmRl
ZglIQVZFX0pJS0VTX05BTUVTUEFDRQ0KbmFtZXNwYWNlIEppa2VzIHsJLy8gT3BlbiBuYW1lc3Bh
Y2UgSmlrZXMgYmxvY2sNCiNlbmRpZg0KDQojaWZuZGVmIEhBVkVfTUVNQkVSX0NPTlNUQU5UUw0K
Ly8gVkMrKyBjYW4ndCBjb3BlIHdpdGggY29uc3RhbnQgY2xhc3MgbWVtYmVycw0KSUVFRWZsb2F0
IElFRUVmbG9hdDo6dGVuc1tdID0gew0KICAgIDFlMGYsIDFlMWYsIDFlMmYsIDFlM2YsIDFlNGYs
IDFlNWYsIDFlNmYsDQogICAgMWU3ZiwgMWU4ZiwgMWU5ZiwgMWUxMGYNCn07DQpJRUVFZmxvYXQg
SUVFRWZsb2F0OjpiaWd0ZW5zW10gPSB7DQogICAgMWU4ZiwgMWUxNmYsIDFlMzJmDQp9Ow0KDQpJ
RUVFZG91YmxlIElFRUVkb3VibGU6OnRlbnNbXSA9IHsNCiAgICAxZTAsIDFlMSwgMWUyLCAxZTMs
IDFlNCwgMWU1LCAxZTYsIDFlNywNCiAgICAxZTgsIDFlOSwgMWUxMCwgMWUxMSwgMWUxMiwgMWUx
MywgMWUxNCwgMWUxNSwNCiAgICAxZTE2LCAxZTE3LCAxZTE4LCAxZTE5LCAxZTIwLCAxZTIxLCAx
ZTIyDQp9Ow0KSUVFRWRvdWJsZSBJRUVFZG91YmxlOjpiaWd0ZW5zW10gPSB7DQogICAgMWUxNiwg
MWUzMiwgMWU2NCwgMWUxMjgsIDFlMjU2DQp9Ow0KI2Vsc2UNCmNvbnN0IElFRUVmbG9hdCBJRUVF
ZmxvYXQ6OnRlbnNbXSA9IHsNCiAgICAxZTBmLCAxZTFmLCAxZTJmLCAxZTNmLCAxZTRmLCAxZTVm
LCAxZTZmLA0KICAgIDFlN2YsIDFlOGYsIDFlOWYsIDFlMTBmDQp9Ow0KY29uc3QgSUVFRWZsb2F0
IElFRUVmbG9hdDo6YmlndGVuc1tdID0gew0KICAgIDFlOGYsIDFlMTZmLCAxZTMyZg0KfTsNCg0K
Y29uc3QgSUVFRWRvdWJsZSBJRUVFZG91YmxlOjp0ZW5zW10gPSB7DQogICAgMWUwLCAxZTEsIDFl
MiwgMWUzLCAxZTQsIDFlNSwgMWU2LCAxZTcsDQogICAgMWU4LCAxZTksIDFlMTAsIDFlMTEsIDFl
MTIsIDFlMTMsIDFlMTQsIDFlMTUsDQogICAgMWUxNiwgMWUxNywgMWUxOCwgMWUxOSwgMWUyMCwg
MWUyMSwgMWUyMg0KfTsNCmNvbnN0IElFRUVkb3VibGUgSUVFRWRvdWJsZTo6YmlndGVuc1tdID0g
ew0KICAgIDFlMTYsIDFlMzIsIDFlNjQsIDFlMTI4LCAxZTI1Ng0KfTsNCiNlbmRpZg0KDQoNCklF
RUVmbG9hdDo6SUVFRWZsb2F0KGk0IGEpDQp7DQojaWZkZWYgSEFWRV9JRUVFNzU0DQogICAgdmFs
dWUuZmxvYXRfdmFsdWUgPSAoZmxvYXQpIGE7DQojZWxzZQ0KICAgIGludAlzaWduID0gMDsNCg0K
ICAgIGlmIChhIDwgMCkNCiAgICB7DQogICAgICAgIGEgID0gLWE7IC8vIGV2ZW4gd29ya3MgZm9y
IE1JTl9JTlQhDQogICAgICAgIHNpZ24gPSAxOw0KICAgIH0NCiAgICBpZiAoYSA9PSAwKQ0KICAg
ICAgICAqdGhpcyA9IFBPU0lUSVZFX1pFUk8oKTsNCiAgICBlbHNlDQogICAgICAgICp0aGlzID0g
Tm9ybWFsaXplKHNpZ24sIEZSQUNUX1NJWkUsICh1NCkgYSk7DQojZW5kaWYgLy8gSEFWRV9JRUVF
NzU0DQp9DQoNCklFRUVmbG9hdDo6SUVFRWZsb2F0KGNvbnN0IExvbmdJbnQgJmEpDQp7DQojaWZk
ZWYgSEFWRV9JRUVFNzU0DQojIGlmZGVmIEhBVkVfVU5TSUdORURfTE9OR19MT05HDQogICAgdmFs
dWUuZmxvYXRfdmFsdWUgPSAoZmxvYXQpKGk4KSBhLldvcmRzKCk7DQojIGVsc2UNCiAgICB2YWx1
ZS5mbG9hdF92YWx1ZSA9ICgoZmxvYXQpKGk0KSBhLkhpZ2hXb3JkKCkgKiAoZmxvYXQpIDB4NDAw
MDAwMDAgKiA0LjBmKQ0KICAgICAgICArIChmbG9hdCkgYS5Mb3dXb3JkKCk7DQojIGVuZGlmIC8v
IEhBVkVfVU5TSUdORURfTE9OR19MT05HDQojZWxzZQ0KICAgIC8vDQogICAgLy8gVW5mb3J0dW5h
dGVseSwgd2UgY2Fubm90IHJlY3ljbGUgdGhlIExvbmdJbnQuRG91YmxlVmFsdWUoKSBtZXRob2Qs
IHNpbmNlDQogICAgLy8gaW4gcmFyZSBjYXNlcyB0aGUgZG91YmxlIHJvdW5kaW5nIHB1dHMgdXMg
b2ZmIGJ5IG9uZSBiaXQuDQogICAgLy8NCiAgICBpbnQJc2lnbiA9IDA7DQogICAgTG9uZ0ludCBs
ID0gYTsNCg0KICAgIGlmIChhIDwgMCkNCiAgICB7DQogICAgICAgIGwgPSAtYTsNCiAgICAgICAg
c2lnbiA9IDE7DQogICAgICAgIGlmIChsIDwgMCkgLy8gc3BlY2lhbCBjYXNlIE1JTl9MT05HDQog
ICAgICAgIHsNCiAgICAgICAgICAgIHZhbHVlLndvcmQgPSBNSU5fTE9OR19GOw0KICAgICAgICAg
ICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChsID09IDApDQogICAgICAgICp0
aGlzID0gUE9TSVRJVkVfWkVSTygpOw0KICAgIGVsc2UgaWYgKGwuSGlnaFdvcmQoKSA9PSAwKQ0K
ICAgICAgICAqdGhpcyA9IE5vcm1hbGl6ZShzaWduLCBGUkFDVF9TSVpFLCBsLkxvd1dvcmQoKSk7
DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgaW50IGV4cG9uZW50ID0gRlJBQ1RfU0laRSwgcm91
bmQgPSAwOw0KICAgICAgICB3aGlsZSAobC5IaWdoV29yZCgpKQ0KICAgICAgICB7DQogICAgICAg
ICAgICByb3VuZCB8PSAobC5Mb3dXb3JkKCkgJiBCWVRFX01BU0spID8gMSA6IDA7DQogICAgICAg
ICAgICBsID4+PSA4Ow0KICAgICAgICAgICAgZXhwb25lbnQgKz0gODsNCiAgICAgICAgfQ0KICAg
ICAgICAqdGhpcyA9IE5vcm1hbGl6ZShzaWduLCBleHBvbmVudCwgbC5Mb3dXb3JkKCkgfCByb3Vu
ZCk7DQogICAgfQ0KI2VuZGlmIC8vIEhBVkVfSUVFRTc1NA0KfQ0KDQpJRUVFZmxvYXQ6OklFRUVm
bG9hdChjb25zdCBJRUVFZG91YmxlICZkKQ0Kew0KI2lmZGVmIEhBVkVfSUVFRTc1NA0KICAgIHZh
bHVlLmZsb2F0X3ZhbHVlID0gKGZsb2F0KSBkLkRvdWJsZVZpZXcoKTsNCiNlbHNlDQogICAgLy8g
RWl0aGVyIHRydWUgemVybywgZGVub3JtYWxpemVkLCBvciB0b28gc21hbGwNCiAgICBpZiAoZC5F
eHBvbmVudCgpIDwgLUJJQVMgLSAzMCkNCiAgICAgICAgKnRoaXMgPSAoZC5Jc1Bvc2l0aXZlKCkg
PyBQT1NJVElWRV9aRVJPKCkgOiBORUdBVElWRV9aRVJPKCkpOw0KICAgIGVsc2UNCiAgICB7DQog
ICAgICAgIGlmIChkLklzUG9zaXRpdmVJbmZpbml0eSgpKQ0KICAgICAgICAgICAgKnRoaXMgPSBQ
T1NJVElWRV9JTkZJTklUWSgpOw0KICAgICAgICBlbHNlIGlmIChkLklzTmVnYXRpdmVJbmZpbml0
eSgpKQ0KICAgICAgICAgICAgKnRoaXMgPSBORUdBVElWRV9JTkZJTklUWSgpOw0KICAgICAgICBl
bHNlIGlmIChkLklzTmFOKCkpDQogICAgICAgICAgICAqdGhpcyA9IE5hTigpOw0KICAgICAgICBl
bHNlIA0KCXsNCiAgICAgICAgICAgIC8vDQogICAgICAgICAgICAvLyBBIHJlZ3VsYXIsIG5vcm1h
bGl6ZWQgbnVtYmVyIC0gZG8gd29yayBvbiB0aGUgcGFydHMNCiAgICAgICAgICAgIC8vIFNoaWZ0
IHRvIDI2dGggcG9zaXRpb24sIGFkZCBpbXBsaWNpdCBtc2IsIHJvdW5kaW5nIGJpdHMNCiAgICAg
ICAgICAgIC8vDQogICAgICAgICAgICBMb25nSW50IGZyYWN0ID0gZC5GcmFjdGlvbigpIDw8IDU7
DQoJICAgIHU0IGZyYWN0aW9uID0gZnJhY3QuSGlnaFdvcmQoKSB8IChmcmFjdC5Mb3dXb3JkKCkg
PyAweDAyMDAwMDAxDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogMHgwMjAwMDAwMCk7DQoNCgkgICAgKnRoaXMgPSBOb3JtYWxp
emUoZC5TaWduKCksIGQuRXhwb25lbnQoKSAtIDIsIGZyYWN0aW9uKTsNCgl9DQogICAgfQ0KI2Vu
ZGlmIC8vIEhBVkVfSUVFRTc1NA0KfQ0KDQpJRUVFZmxvYXQ6OklFRUVmbG9hdChjb25zdCBjaGFy
ICpzdHIsIGJvb2wgY2hlY2tfaW52YWxpZCkNCnsNCiAgICBpbnQgYmIyLCBiYjUsIGJiZSwgYmQy
LCBiZDUsIGJiYml0cywgYnMyLA0KICAgICAgICBlLCBlMSwgaSwgaiwgazsNCiAgICBpbnQgbmQs
IC8vIG51bWJlciBvZiBkaWdpdHMgaW4gbWFudGlzc2EgKGV4Y2VwdCBleHRyYSAnMCdzKQ0KICAg
ICAgICBuZDAsIC8vIG51bWJlciBvZiBkaWdpdHMgYmVmb3JlICcuJyAoZXhjZXB0IGxlYWRpbmcg
JzAncykNCiAgICAgICAgbmYsIC8vIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgJy4nIChleGNlcHQg
dHJhaWxpbmcgJzAncykNCiAgICAgICAgbno7IC8vIG51bWJlciBvZiBjb25zZWN1dGl2ZSAnMCcg
ZGlnaXRzDQogICAgYm9vbCBuejAsIC8vIHdoZXRoZXIgbGVhZGluZyB6ZXJvIGV4aXN0cw0KICAg
ICAgICAgcm91bmR1cCwgLy8gd2hldGhlciB0byByb3VuZCB1cCBsb25nIHN0cmluZw0KICAgICAg
ICAgc2lnbiwgLy8gaWYgdGhlIHN0cmluZyByZXByZXNlbnRzIGEgbmVnYXRpdmUNCiAgICAgICAg
IGRzaWduLCAvLyB0aGUgc2lnbiBvZiBkZWx0YQ0KICAgICAgICAgZXNpZ247IC8vIHRoZSBzaWdu
IG9mIHRoZSBleHBvbmVudA0KICAgIGNoYXIgYzsNCiAgICBjb25zdCBjaGFyICpzLCAqczAsICpz
MTsNCiAgICBJRUVFZmxvYXQgYWFkaiwgYWFkajE7DQogICAgaTQgTDsNCiAgICBpNCB5LCB6Ow0K
DQogICAgc2lnbiA9IG56MCA9IHJvdW5kdXAgPSBmYWxzZTsNCiAgICBueiA9IDA7DQoNCiAgICAv
Lw0KICAgIC8vIGNvbnN1bWUgd2hpdGVzcGFjZQ0KICAgIC8vDQogICAgZm9yIChzID0gc3RyOyA7
IHMrKykNCiAgICAgICAgc3dpdGNoICgqcykNCiAgICAgICAgew0KICAgICAgICBjYXNlIFVfTUlO
VVM6DQogICAgICAgICAgICBzaWduID0gdHJ1ZTsNCiAgICAgICAgICAgIC8vIGZhbGx0aHJvdWdo
DQogICAgICAgIGNhc2UgVV9QTFVTOg0KICAgICAgICAgICAgaWYgKCorK3MpDQogICAgICAgICAg
ICAgICAgZ290byBicmVhazI7DQogICAgICAgICAgICAvLyBmYWxsdGhyb3VnaA0KICAgICAgICBj
YXNlIFVfTlU6DQogICAgICAgICAgICAqdGhpcyA9IE5hTigpOw0KICAgICAgICAgICAgcmV0dXJu
Ow0KICAgICAgICBjYXNlIFVfU1A6DQogICAgICAgIGNhc2UgVV9IVDoNCiAgICAgICAgY2FzZSBV
X0ZGOg0KICAgICAgICBjYXNlIFVfTEY6DQogICAgICAgIGNhc2UgVV9DUjoNCiAgICAgICAgICAg
IGNvbnRpbnVlOw0KICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgZ290byBicmVhazI7DQog
ICAgICAgIH0NCiBicmVhazI6DQogICAgLy8NCiAgICAvLyBjb25zdW1lIGxlYWRpbmcgMCdzDQog
ICAgLy8NCiAgICBpZiAoKnMgPT0gVV8wKQ0KICAgIHsNCiAgICAgICAgbnowID0gdHJ1ZTsNCiAg
ICAgICAgd2hpbGUgKCorK3MgPT0gVV8wKTsNCg0KICAgICAgICBpZiAoISAqcykNCiAgICAgICAg
ew0KICAgICAgICAgICAgKnRoaXMgPSBzaWduID8gTkVHQVRJVkVfWkVSTygpIDogUE9TSVRJVkVf
WkVSTygpOw0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLy8N
CiAgICAvLyBwYXJzZSBiZWZvcmUgJy4nDQogICAgLy8NCiAgICBzMCA9IHM7DQogICAgeSA9IHog
PSAwOw0KICAgIGZvciAobmQgPSBuZiA9IDA7IChjID0gKnMpID49IFVfMCAmJiBjIDw9IFVfOTsg
bmQrKywgcysrKQ0KICAgICAgICBpZiAobmQgPCA4KQ0KICAgICAgICAgICAgeSA9IDEwICogeSAr
IGMgLSBVXzA7DQogICAgbmQwID0gbmQ7DQogICAgaWYgKGMgPT0gVV9ET1QpDQogICAgew0KICAg
ICAgICAvLw0KICAgICAgICAvLyBwYXJzZSBhZnRlciAnLicNCiAgICAgICAgLy8NCiAgICAgICAg
YyA9ICorK3M7DQogICAgICAgIGlmICghbmQpDQogICAgICAgIHsNCiAgICAgICAgICAgIGZvciAo
IDsgYyA9PSBVXzA7IGMgPSAqKytzKQ0KICAgICAgICAgICAgICAgIG56Kys7DQogICAgICAgICAg
ICBpZiAoYyA+IFVfMCAmJiBjIDw9IFVfOSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg
ICBzMCA9IHM7DQogICAgICAgICAgICAgICAgbmYgKz0gbno7DQogICAgICAgICAgICAgICAgbnog
PSAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGZvciAoIDsgYyA+PSBVXzAg
JiYgYyA8PSBVXzk7IGMgPSAqKytzKQ0KICAgICAgICB7DQogICAgICAgICAgICBueisrOw0KICAg
ICAgICAgICAgaWYgKGMgLT0gVV8wKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIG5m
ICs9IG56Ow0KICAgICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBuejsgaSsrKQ0KICAgICAg
ICAgICAgICAgICAgICBpZiAobmQrKyA8IDgpDQogICAgICAgICAgICAgICAgICAgICAgICB5ICo9
IDEwOw0KICAgICAgICAgICAgICAgIGlmIChuZCsrIDwgOCkNCiAgICAgICAgICAgICAgICAgICAg
eSA9IDEwICogeSArIGM7DQogICAgICAgICAgICAgICAgbnogPSAwOw0KICAgICAgICAgICAgfQ0K
ICAgICAgICB9DQogICAgfQ0KICAgIC8vDQogICAgLy8gY29uc3VtZSBleHBvbmVudA0KICAgIC8v
DQogICAgZSA9IDA7DQogICAgaWYgKGMgPT0gVV9lIHx8IGMgPT0gVV9FKSB7DQogICAgICAgIHN0
ciA9IHM7DQogICAgICAgIGVzaWduID0gZmFsc2U7DQogICAgICAgIHN3aXRjaCAoYyA9ICorK3Mp
DQogICAgICAgIHsNCiAgICAgICAgY2FzZSBVX01JTlVTOg0KICAgICAgICAgICAgZXNpZ24gPSB0
cnVlOw0KICAgICAgICAgICAgLy8gZmFsbHRocm91Z2gNCiAgICAgICAgY2FzZSBVX1BMVVM6DQog
ICAgICAgICAgICBjID0gKisrczsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoYyA+PSBVXzAgJiYg
YyA8PSBVXzkpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmICghbmQgJiYgIW56ICYmICFuejAp
DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgKnRoaXMgPSBzaWduID8gTkVHQVRJVkVf
WkVSTygpIDogUE9TSVRJVkVfWkVSTygpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAg
ICAgICAgIH0NCiAgICAgICAgICAgIHdoaWxlIChjID09IFVfMCkNCiAgICAgICAgICAgICAgICBj
ID0gKisrczsNCiAgICAgICAgICAgIGlmIChjID4gVV8wICYmIGMgPD0gVV85KQ0KICAgICAgICAg
ICAgew0KICAgICAgICAgICAgICAgIEwgPSBjIC0gVV8wOw0KICAgICAgICAgICAgICAgIHMxID0g
czsNCiAgICAgICAgICAgICAgICB3aGlsZSAoKGMgPSAqKytzKSA+PSBVXzAgJiYgYyA8PSBVXzkp
DQogICAgICAgICAgICAgICAgICAgIEwgPSAxMCAqIEwgKyBjIC0gVV8wOw0KICAgICAgICAgICAg
ICAgIC8vDQogICAgICAgICAgICAgICAgLy8gQXZvaWQgY29uZnVzaW9uIGZyb20gZXhwb25lbnRz
IHNvIGxhcmdlIHRoYXQgZSBtaWdodA0KICAgICAgICAgICAgICAgIC8vIG92ZXJmbG93DQogICAg
ICAgICAgICAgICAgaWYgKHMgLSBzMSA+IDggfHwgTCA+IDE5OTk5KQ0KICAgICAgICAgICAgICAg
ICAgICBlID0gMTk5OTk7ICANCiAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAg
ICAgIGUgPSBMOw0KICAgICAgICAgICAgICAgIGlmIChlc2lnbikNCiAgICAgICAgICAgICAgICAg
ICAgZSA9IC1lOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAg
ICAgIGUgPSAwOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgICAgIHMgPSBzdHI7
DQogICAgfQ0KICAgIGlmICghbmQpIHsNCiAgICAgICAgKnRoaXMgPSAoIW56ICYmICFuejApID8g
TmFOKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2lnbiA/IE5FR0FUSVZFX1pF
Uk8oKSA6IFBPU0lUSVZFX1pFUk8oKTsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICAvLw0K
ICAgIC8vIGZvciBsb25nIHN0cmluZ3MsIHJvdW5kIGF3YXkgYWxsIGRpZ2l0cyBiZXlvbmQgbWF4
aW11bSBwcmVjaXNlIHN0cmluZw0KICAgIC8vIGZvciBmcmFjdGlvbiwgdGhlcmUgYXJlIG4gZGVj
aW1hbCBkaWdpdHMgYWZ0ZXIgJy4nIGlmIGxzYiBpcyAyXm47DQogICAgLy8gYnV0IHRoZSBmaXJz
dCBtIG9mIHRoZXNlIGRpZ2l0cyBhcmUgJzAnLCBmb3IgZCA9IHgqMTBebQ0KICAgIC8vIHNvLCBk
aWdpdHMgYWZ0ZXIgTUFYX0RJR0lUUyBtYXkgYmUgaWdub3JlZA0KICAgIC8vDQogICAgaWYgKG5k
ID4gTUFYX0RJR0lUUykNCiAgICB7DQogICAgICAgIGsgPSBuZCAtIE1BWF9ESUdJVFM7DQogICAg
ICAgIGkgPSBNQVhfRElHSVRTIC0gbmQwOw0KICAgICAgICBpZiAoaSA8PSAwKQ0KICAgICAgICB7
DQogICAgICAgICAgICAvLyBkZWNpbWFsIGFmdGVyIGxhc3QgcHJlY2lzZSBkaWdpdA0KICAgICAg
ICAgICAgbmQwID0gTUFYX0RJR0lUUzsNCiAgICAgICAgICAgIG5mID0gaTsNCiAgICAgICAgICAg
IGogPSAwOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYgKGkgPT0gTUFYX0RJR0lUUykNCiAg
ICAgICAgew0KICAgICAgICAgICAgLy8gZGVjaW1hbCBiZWZvcmUgZmlyc3QgcHJlY2lzZSBkaWdp
dA0KICAgICAgICAgICAgbmYgLT0gazsNCiAgICAgICAgICAgIGogPSAwOw0KICAgICAgICB9DQog
ICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgLy8gZGVjaW1hbCBpbnNpZGUgcHJl
Y2lzZSBkaWdpdHMNCiAgICAgICAgICAgIG5mIC09IGs7DQogICAgICAgICAgICBqID0gMTsNCiAg
ICAgICAgfQ0KICAgICAgICByb3VuZHVwID0gczBbTUFYX0RJR0lUUyAtIDEgKyBqXSAhPSBVXzQ7
DQogICAgICAgIG5kID0gTUFYX0RJR0lUUzsNCiAgICB9DQogICAgZTEgPSBlIC09IG5mOw0KCQ0K
ICAgIC8vIA0KICAgIC8vIE5vdyB3ZSBoYXZlIG5kMCBkaWdpdHMsIHN0YXJ0aW5nIGF0IHMwLCBm
b2xsb3dlZCBieSBhDQogICAgLy8gZGVjaW1hbCBwb2ludCwgZm9sbG93ZWQgYnkgbmQtbmQwIGRp
Z2l0cy4gIFRoZSBudW1iZXIgd2UncmUNCiAgICAvLyBhZnRlciBpcyB0aGUgaW50ZWdlciByZXBy
ZXNlbnRlZCBieSB0aG9zZSBkaWdpdHMgdGltZXMgMTAqKmUNCiAgICAvLw0KICAgIGlmICghIG5k
MCkNCiAgICAgICAgbmQwID0gbmQ7DQogICAgayA9IG5kIDwgOCA/IG5kIDogODsNCiAgICAqdGhp
cyA9IElFRUVmbG9hdCh5KTsNCiAgICBpZiAobmQgPCA4KQ0KICAgIHsNCiAgICAgICAgaWYgKCFl
KQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoc2lnbikNCiAgICAgICAgICAgICAgICAqdGhp
cyA9IC0qdGhpczsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICBpZiAo
ZSA+IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmIChlIDw9IDEwKQ0KICAgICAgICAgICAg
ew0KICAgICAgICAgICAgICAgICp0aGlzICo9IHRlbnNbZV07DQogICAgICAgICAgICAgICAgaWYg
KHNpZ24pDQogICAgICAgICAgICAgICAgICAgICp0aGlzID0gLSp0aGlzOw0KICAgICAgICAgICAg
ICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGkgPSA3IC0gbmQ7DQogICAg
ICAgICAgICBpZiAoZSA8PSAxMCArIGkpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAg
ZSAtPSBpOw0KICAgICAgICAgICAgICAgICp0aGlzICo9IHRlbnNbaV07DQogICAgICAgICAgICAg
ICAgKnRoaXMgKj0gdGVuc1tlXTsNCiAgICAgICAgICAgICAgICBpZiAoc2lnbikNCiAgICAgICAg
ICAgICAgICAgICAgKnRoaXMgPSAtKnRoaXM7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAg
ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYgKGUgPj0gLTEwICkNCiAgICAg
ICAgew0KICAgICAgICAgICAgKnRoaXMgLz0gdGVuc1stZV07DQogICAgICAgICAgICBpZiAoc2ln
bikNCiAgICAgICAgICAgICAgICAqdGhpcyA9IC0qdGhpczsNCiAgICAgICAgICAgIHJldHVybjsN
CiAgICAgICAgfQ0KICAgIH0NCiAgICBlMSArPSBuZCAtIGs7DQoJDQogICAgLy8gDQogICAgLy8g
R2V0IHN0YXJ0aW5nIGFwcHJveGltYXRpb246ICp0aGlzICogMTAqKmUxDQogICAgLy8NCiAgICBp
ZiAoZTEgPiAwKQ0KICAgIHsNCiAgICAgICAgaSA9IGUxICYgNzsNCiAgICAgICAgaWYgKGkpDQog
ICAgICAgICAgICAqdGhpcyAqPSB0ZW5zW2ldOw0KICAgICAgICBpZiAoZTEgPj49IDMpDQogICAg
ICAgIHsNCiAgICAgICAgICAgIGlmIChlMSA+IE1BWF9ERUNfRVhQID4+IDMpDQogICAgICAgICAg
ICB7DQogICAgICAgICAgICAgICAgKnRoaXMgPSBjaGVja19pbnZhbGlkID8gTmFOKCkNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzaWduID8gTkVHQVRJVkVfSU5GSU5J
VFkoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBQT1NJ
VElWRV9JTkZJTklUWSgpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0N
CiAgICAgICAgICAgIGZvciAoaiA9IDA7IGUxID4gMTsgaisrLCBlMSA+Pj0gMSkNCiAgICAgICAg
ICAgICAgICBpZiAoZTEgJiAxKQ0KICAgICAgICAgICAgICAgICAgICAqdGhpcyAqPSBiaWd0ZW5z
W2pdOw0KICAgICAgICAgICAgLy8NCiAgICAgICAgICAgIC8vIFRoZSBsYXN0IG11bHRpcGxpY2F0
aW9uIGNvdWxkIG92ZXJmbG93Lg0KICAgICAgICAgICAgLy8NCiAgICAgICAgICAgIHZhbHVlLndv
cmQgLT0gKEZSQUNUX1NJWkUgKyAxKSAqIE1JTl9GUkFDVDsNCiAgICAgICAgICAgICp0aGlzICo9
IGJpZ3RlbnNbal07DQogICAgICAgICAgICB6ID0gRXhwb25lbnQoKTsNCiAgICAgICAgICAgIGlm
ICh6ID4gQklBUyAtIEZSQUNUX1NJWkUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAg
KnRoaXMgPSBjaGVja19pbnZhbGlkID8gTmFOKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiBzaWduID8gTkVHQVRJVkVfSU5GSU5JVFkoKQ0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBQT1NJVElWRV9JTkZJTklUWSgpOw0KICAg
ICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh6ID4g
QklBUyAtIEZSQUNUX1NJWkUgLSAxKQ0KICAgICAgICAgICAgICAgIHZhbHVlLndvcmQgPSBQT1Nf
SU5GIC0gMTsNCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB2YWx1ZS53b3JkICs9
IChGUkFDVF9TSVpFICsgMSkgKiBNSU5fRlJBQ1Q7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxz
ZSBpZiAoZTEgPCAwKQ0KICAgIHsNCiAgICAgICAgZTEgPSAtZTE7DQogICAgICAgIGkgPSBlMSAm
IDc7DQogICAgICAgIGlmIChpKQ0KICAgICAgICAgICAgKnRoaXMgLz0gdGVuc1tpXTsNCiAgICAg
ICAgaWYgKGUxID4+PSAzKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoZTEgPj0gMSA8PCAz
KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICp0aGlzID0gY2hlY2tfaW52YWxpZCA/
IE5hTigpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2lnbiA/IE5F
R0FUSVZFX1pFUk8oKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBQT1NJVElWRV9aRVJPKCk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAg
ICAgfQ0KICAgICAgICAgICAgZm9yIChqID0gMDsgZTEgPiAxOyBqKyssIGUxID4+PSAxKQ0KICAg
ICAgICAgICAgICAgIGlmIChlMSAmIDEpDQogICAgICAgICAgICAgICAgICAgICp0aGlzIC89IGJp
Z3RlbnNbal07DQogICAgICAgICAgICAvLw0KICAgICAgICAgICAgLy8gVGhlIGxhc3QgbXVsdGlw
bGljYXRpb24gY291bGQgdW5kZXJmbG93Lg0KICAgICAgICAgICAgLy8JCQkgDQogICAgICAgICAg
ICBJRUVFZmxvYXQgdG1wKCp0aGlzKTsNCiAgICAgICAgICAgICp0aGlzIC89IGJpZ3RlbnNbal07
DQogICAgICAgICAgICBpZiAoSXNaZXJvKCkpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAg
ICAgKnRoaXMgPSB0bXAgKiAyOw0KICAgICAgICAgICAgICAgICp0aGlzIC89IGJpZ3RlbnNbal07
DQogICAgICAgICAgICAgICAgaWYgKElzWmVybygpKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAg
ICAgICAgICAgICAgICAgKnRoaXMgPSBjaGVja19pbnZhbGlkID8gTmFOKCkNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2lnbiA/IE5FR0FUSVZFX1pFUk8oKQ0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogUE9TSVRJ
VkVfWkVSTygpOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAg
fQ0KICAgICAgICAgICAgICAgIHZhbHVlLndvcmQgPSAxOw0KICAgICAgICAgICAgfQ0KICAgICAg
ICB9DQogICAgfQ0KDQogICAgLy8JIA0KICAgIC8vIE5vdyB0aGUgaGFyZCBwYXJ0IC0tIGFkanVz
dGluZyAqdGhpcyB0byB0aGUgY29ycmVjdCB2YWx1ZS4NCiAgICAvLyBQdXQgZGlnaXRzIGludG8g
YmQ6IHRydWUgdmFsdWUgPSBiZCAqIDEwXmUNCiAgICAvLyANCiAgICBCaWdJbnQgYmQwKHMwLCBu
ZDAsIG5kLCB5LCA4KTsNCiAgICBpZiAocm91bmR1cCkNCiAgICAgICAgKytiZDA7DQogICAgd2hp
bGUgKHRydWUpIHsNCiAgICAgICAgQmlnSW50IGJkKGJkMCk7DQogICAgICAgIEJpZ0ludCBiYigq
dGhpcywgYmJlLCBiYmJpdHMpOyAvLyAqdGhpcyA9IGJiICogMl5iYmUNCiAgICAgICAgQmlnSW50
IGJzKDEpOw0KICAgICAgICBpZiAoZSA+PSAwKQ0KICAgICAgICB7DQogICAgICAgICAgICBiYjIg
PSBiYjUgPSAwOw0KICAgICAgICAgICAgYmQyID0gYmQ1ID0gZTsNCiAgICAgICAgfQ0KICAgICAg
ICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIGJiMiA9IGJiNSA9IC1lOw0KICAgICAgICAg
ICAgYmQyID0gYmQ1ID0gMDsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoYmJlID49IDApDQogICAg
ICAgICAgICBiYjIgKz0gYmJlOw0KICAgICAgICBlbHNlDQogICAgICAgICAgICBiZDIgLT0gYmJl
Ow0KICAgICAgICBiczIgPSBiYjI7DQogICAgICAgIGogPSBiYmU7DQogICAgICAgIGkgPSBqICsg
YmJiaXRzIC0gMTsgLy8gbG9nYigqdGhpcykNCiAgICAgICAgaWYgKGkgPCAxIC0gQklBUykgLy8g
ZGVub3JtYWwNCiAgICAgICAgICAgIGogKz0gQklBUyArIEZSQUNUX1NJWkU7DQogICAgICAgIGVs
c2UNCiAgICAgICAgICAgIGogPSBGUkFDVF9TSVpFICsgMiAtIGJiYml0czsNCiAgICAgICAgYmIy
ICs9IGo7DQogICAgICAgIGJkMiArPSBqOw0KICAgICAgICBpID0gYmIyIDwgYmQyID8gYmIyIDog
YmQyOw0KICAgICAgICBpZiAoaSA+IGJzMikNCiAgICAgICAgICAgIGkgPSBiczI7DQogICAgICAg
IGlmIChpID4gMCkNCiAgICAgICAgew0KICAgICAgICAgICAgYmIyIC09IGk7DQogICAgICAgICAg
ICBiZDIgLT0gaTsNCiAgICAgICAgICAgIGJzMiAtPSBpOw0KICAgICAgICB9DQogICAgICAgIGlm
IChiYjUgPiAwKSB7DQogICAgICAgICAgICBicy5wb3c1bXVsdChiYjUpOw0KICAgICAgICAgICAg
YmIgKj0gYnM7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGJiMiA+IDApDQogICAgICAgICAgICBi
YiA8PD0gYmIyOw0KICAgICAgICBpZiAoYmQ1ID4gMCkNCiAgICAgICAgICAgIGJkLnBvdzVtdWx0
KGJkNSk7DQogICAgICAgIGlmIChiZDIgPiAwKQ0KICAgICAgICAgICAgYmQgPDw9IGJkMjsNCiAg
ICAgICAgaWYgKGJzMiA+IDApDQogICAgICAgICAgICBicyA8PD0gYnMyOw0KICAgICAgICBCaWdJ
bnQgZGVsdGEgPSBiYiAtIGJkOw0KICAgICAgICBkc2lnbiA9IGRlbHRhLklzTmVnYXRpdmUoKTsN
CiAgICAgICAgaWYgKGRzaWduKQ0KICAgICAgICAgICAgZGVsdGEuSXNOZWdhdGl2ZShmYWxzZSk7
DQogICAgICAgIGkgPSBkZWx0YS5jb21wYXJlVG8oYnMpOw0KICAgICAgICAvLw0KICAgICAgICAv
LyBFcnJvciBpcyBsZXNzIHRoYW4gaGFsZiBhbiB1bHAgLS0gY2hlY2sgZm9yDQogICAgICAgIC8v
IHNwZWNpYWwgY2FzZSBvZiBtYW50aXNzYSBhIHBvd2VyIG9mIHR3by4NCiAgICAgICAgLy8NCiAg
ICAgICAgaWYgKGkgPCAwKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoZHNpZ24gfHwgRnJh
Y3RCaXRzKCkgfHwgRXhwb25lbnQoKSA8PSAxIC0gQklBUw0KICAgICAgICAgICAgICAgIHx8IGRl
bHRhLklzWmVybygpKQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgZGVsdGEg
PDw9IDE7DQogICAgICAgICAgICBpZiAoZGVsdGEuY29tcGFyZVRvKGJzKSA+IDApDQoJCS8vIGJv
dW5kYXJ5IGNhc2UgLS0gZGVjcmVtZW50IGV4cG9uZW50DQogICAgICAgICAgICAgICAgdmFsdWUu
d29yZC0tOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICAgICAgLy8NCiAgICAg
ICAgLy8gZXhhY3RseSBoYWxmLXdheSBiZXR3ZWVuDQogICAgICAgIC8vDQogICAgICAgIGVsc2Ug
aWYgKGkgPT0gMCkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHZhbHVlLndvcmQgJiAxKQ0K
ICAgICAgICAgICAgICAgIHZhbHVlLndvcmQgKz0gZHNpZ24gPyAxIDogLTE7DQogICAgICAgICAg
ICBicmVhazsNCiAgICAgICAgfQ0KICAgICAgICAvLw0KICAgICAgICAvLyBtb3JlIHRoYW4gMS8y
IHVscCBvZmYgLSB0cnkgYWdhaW4NCiAgICAgICAgLy8NCiAgICAgICAgYWFkaiA9IFJhdGlvKGRl
bHRhLCBicyk7DQogICAgICAgIGlmIChhYWRqIDw9IDIpDQogICAgICAgIHsNCiAgICAgICAgICAg
IGlmIChkc2lnbikNCiAgICAgICAgICAgICAgICBhYWRqID0gYWFkajEgPSAxOw0KICAgICAgICAg
ICAgZWxzZSBpZiAoRnJhY3RCaXRzKCkpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAg
aWYgKHZhbHVlLndvcmQgPT0gMSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAg
ICAgIC8vIHVuZGVyZmxvdw0KICAgICAgICAgICAgICAgICAgICAqdGhpcyA9IFBPU0lUSVZFX1pF
Uk8oKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAg
ICAgICAgICAgICAgIGFhZGogPSAxOw0KICAgICAgICAgICAgICAgIGFhZGoxID0gLTE7DQogICAg
ICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAg
ICAgLy8NCiAgICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2UgLSBtYW50aXNzYSBpcyBwb3dl
ciBvZiAyDQogICAgICAgICAgICAgICAgLy8JCQkJIA0KICAgICAgICAgICAgICAgIGlmIChhYWRq
IDwgMS4wZikNCiAgICAgICAgICAgICAgICAgICAgYWFkaiA9IDAuNWY7DQogICAgICAgICAgICAg
ICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICBhYWRqICo9IDAuNWY7DQogICAgICAgICAgICAg
ICAgYWFkajEgPSAtYWFkajsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNl
DQogICAgICAgIHsNCiAgICAgICAgICAgIGFhZGogKj0gMC41ZjsNCiAgICAgICAgICAgIGFhZGox
ID0gZHNpZ24gPyBhYWRqIDogLWFhZGo7DQogICAgICAgIH0NCiAgICAgICAgeSA9IEV4cG9uZW50
KCk7DQogICAgICAgIC8vDQogICAgICAgIC8vIENoZWNrIGZvciBvdmVyZmxvdw0KICAgICAgICAv
Lw0KICAgICAgICBpZiAoeSA9PSBCSUFTKQ0KICAgICAgICB7DQogICAgICAgICAgICBJRUVFZmxv
YXQgdG1wKCp0aGlzKTsNCiAgICAgICAgICAgIHZhbHVlLndvcmQgLT0gKEZSQUNUX1NJWkUgKyAx
KSAqIE1JTl9GUkFDVDsNCiAgICAgICAgICAgICp0aGlzICs9IGFhZGoxICogVWxwKCk7DQogICAg
ICAgICAgICBpZiAoRXhwb25lbnQoKSA+PSBCSUFTIC0gRlJBQ1RfU0laRSkNCiAgICAgICAgICAg
IHsNCiAgICAgICAgICAgICAgICBpZiAodG1wLnZhbHVlLndvcmQgPT0gUE9TX0lORiAtIDEpDQog
ICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAvLyBvdmVyZmxvdw0KICAgICAg
ICAgICAgICAgICAgICAqdGhpcyA9IFBPU0lUSVZFX0lORklOSVRZKCk7DQogICAgICAgICAgICAg
ICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB2YWx1ZS53
b3JkID0gUE9TX0lORiAtIDE7DQogICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAg
ICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgdmFsdWUud29yZCArPSAoRlJB
Q1RfU0laRSArIDEpICogTUlOX0ZSQUNUOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAg
ICAgew0KICAgICAgICAgICAgLy8NCiAgICAgICAgICAgIC8vIENvbXB1dGUgYWRqIHNvIHRoYXQg
dGhlIElFRUUgcm91bmRpbmcgcnVsZXMgd2lsbA0KICAgICAgICAgICAgLy8gY29ycmVjdGx5IHJv
dW5kICp0aGlzICsgYWRqIGluIHNvbWUgaGFsZi13YXkgY2FzZXMuDQogICAgICAgICAgICAvLyBJ
ZiAqdGhpcyAqIFVscCgpIGlzIGRlbm9ybWFsaXplZCwgd2UgbXVzdCBhZGp1c3QgYWFkag0KICAg
ICAgICAgICAgLy8gdG8gYXZvaWQgdHJvdWJsZSBmcm9tIGJpdHMgbG9zdCB0byBkZW5vcm1hbGl6
YXRpb24uDQogICAgICAgICAgICAvLw0KICAgICAgICAgICAgaWYgKHkgPD0gRlJBQ1RfU0laRSAt
IEJJQVMgfHwgYWFkaiA+IDEpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgYWFkajEg
PSBJRUVFZmxvYXQoKGFhZGogKyAwLjVmKS5JbnRWYWx1ZSgpKTsNCiAgICAgICAgICAgICAgICBp
ZiAoISBkc2lnbikNCiAgICAgICAgICAgICAgICAgICAgYWFkajEgPSAtYWFkajE7DQogICAgICAg
ICAgICB9DQogICAgICAgICAgICAqdGhpcyArPSBhYWRqMSAqIFVscCgpOw0KICAgICAgICB9DQog
ICAgICAgIGlmICh5ID09IEV4cG9uZW50KCkpDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vDQog
ICAgICAgICAgICAvLyBDYW4gd2Ugc3RvcCBub3c/DQogICAgICAgICAgICAvLyBUaGUgdG9sZXJh
bmNlcyBiZWxvdyBhcmUgY29uc2VydmF0aXZlLg0KICAgICAgICAgICAgLy8NCiAgICAgICAgICAg
IGFhZGogLT0gYWFkai5JbnRWYWx1ZSgpOw0KICAgICAgICAgICAgaWYgKGRzaWduIHx8IEZyYWN0
Qml0cygpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmIChhYWRqIDwgLjQ5OTk5
OTlmIHx8IGFhZGogPiAuNTAwMDAwMWYpDQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAg
ICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSBpZiAoYWFkaiA8IC40OTk5OTk5ZiAvIDIpDQog
ICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKGNoZWNrX2lu
dmFsaWQgJiYgKElzWmVybygpIHx8IElzSW5maW5pdGUoKSkpDQogICAgICAgICp0aGlzID0gTmFO
KCk7DQogICAgZWxzZSBpZiAoc2lnbikNCiAgICAgICAgKnRoaXMgPSAtKnRoaXM7DQp9DQoNCmk0
IElFRUVmbG9hdDo6SW50VmFsdWUoKSBjb25zdA0Kew0KICAgIGlmIChJc05hTigpKQ0KICAgICAg
ICByZXR1cm4gMDsNCiAgICAgICAgICAgIA0KICAgIGludAlzaWduID0gU2lnbigpLA0KICAgICAg
ICBleHBvbmVudCA9IEV4cG9uZW50KCk7DQoNCiAgICBpZiAoSXNJbmZpbml0ZSgpKQ0KICAgICAg
ICByZXR1cm4gc2lnbiA/IE1JTl9JTlQgOiBNQVhfSU5UOw0KDQogICAgLy8gVGhpcyBjb3ZlcnMg
dHJ1ZSB6ZXJvIGFuZCBkZW5vcm1zLg0KICAgIGlmIChleHBvbmVudCA8IDApDQogICAgICAgIHJl
dHVybiAwOw0KDQogICAgaTQgcmVzdWx0ID0gRnJhY3Rpb24oKTsNCg0KICAgIGlmIChleHBvbmVu
dCA+IEZSQUNUX1NJWkUpDQoJcmVzdWx0IDw8PSAoZXhwb25lbnQgLSBGUkFDVF9TSVpFKTsNCiAg
ICBlbHNlIGlmIChleHBvbmVudCA8IEZSQUNUX1NJWkUpDQoJcmVzdWx0ID4+PSAoRlJBQ1RfU0la
RSAtIGV4cG9uZW50KTsNCg0KICAgIHJldHVybiBzaWduID8gLXJlc3VsdCA6IHJlc3VsdDsNCn0N
Cg0KTG9uZ0ludCBJRUVFZmxvYXQ6OkxvbmdWYWx1ZSgpIGNvbnN0DQp7DQogICAgaWYgKElzTmFO
KCkpDQogICAgICAgIHJldHVybiBMb25nSW50KDApOw0KICAgICAgICAgICAgDQogICAgaW50CXNp
Z24gPSBTaWduKCksDQogICAgICAgIGV4cG9uZW50ID0gRXhwb25lbnQoKTsNCg0KICAgIGlmIChJ
c0luZmluaXRlKCkpDQogICAgICAgIHJldHVybiBzaWduID8gTG9uZ0ludDo6TUlOX0xPTkcoKSA6
IExvbmdJbnQ6Ok1BWF9MT05HKCk7DQoNCiAgICAvLyBUaGlzIGNvdmVycyB0cnVlIHplcm8gYW5k
IGRlbm9ybXMuDQogICAgaWYgKGV4cG9uZW50IDwgMCkNCiAgICAgICAgcmV0dXJuIExvbmdJbnQo
MCk7DQoNCiAgICBMb25nSW50IHJlc3VsdChGcmFjdGlvbigpKTsNCg0KICAgIGlmIChleHBvbmVu
dCA+IEZSQUNUX1NJWkUpDQoJcmVzdWx0IDw8PSAoZXhwb25lbnQgLSBGUkFDVF9TSVpFKTsNCiAg
ICBlbHNlIGlmIChleHBvbmVudCA8IEZSQUNUX1NJWkUpDQoJcmVzdWx0ID4+PSAoRlJBQ1RfU0la
RSAtIGV4cG9uZW50KTsNCg0KICAgIHJldHVybiBzaWduID8gKExvbmdJbnQpIC1yZXN1bHQgOiBy
ZXN1bHQ7DQp9DQoNCklFRUVmbG9hdCBJRUVFZmxvYXQ6Ok5vcm1hbGl6ZShpbnQgc2lnbiwgaW50
IGV4cG9uZW50LCB1NCBmcmFjdGlvbikNCnsNCiAgICBib29sIHJvdW5kID0gZmFsc2UsIHN0aWNr
eSA9IGZhbHNlOw0KDQogICAgYXNzZXJ0KGZyYWN0aW9uKTsNCg0KICAgIC8vDQogICAgLy8gTm9y
bWFsaXplIHJpZ2h0LiBTaGlmdCB1bnRpbCB2YWx1ZSA8IE1BWF9GUkFDVC4NCiAgICAvLw0KICAg
IGlmIChmcmFjdGlvbiA+PSBNQVhfRlJBQ1QpDQogICAgew0KCXdoaWxlIChmcmFjdGlvbiA+PSBN
QVhfRlJBQ1QpDQoJew0KCSAgICBzdGlja3kgfD0gcm91bmQ7DQoJICAgIHJvdW5kID0gKGZyYWN0
aW9uICYgMSkgIT0gMDsNCgkgICAgZnJhY3Rpb24gPj49IDE7DQoJICAgIGV4cG9uZW50Kys7DQoJ
fQ0KCWlmIChyb3VuZCAmJiAoc3RpY2t5IHx8IChmcmFjdGlvbiAmIDEpKSAmJiBleHBvbmVudCA+
IC1CSUFTKQ0KICAgICAgICAgICAgLy8NCiAgICAgICAgICAgIC8vIENhcHR1cmUgYW55IG92ZXJm
bG93IGNhdXNlZCBieSByb3VuZGluZy4gTm8gb3RoZXIgY2hlY2tzIGFyZQ0KICAgICAgICAgICAg
Ly8gcmVxdWlyZWQgYmVjYXVzZSBpZiBvdmVyZmxvdyBvY2N1cnJlZCwgdGhlIHRoZSBsb3cgb3Jk
ZXIgYml0DQogICAgICAgICAgICAvLyB3YXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLiBEbyBub3Qg
cm91bmQgZGVub3JtcyB5ZXQuDQogICAgICAgICAgICAvLw0KCSAgICBpZiAoKytmcmFjdGlvbiA+
PSBNQVhfRlJBQ1QpDQoJICAgIHsNCgkJZnJhY3Rpb24gPj49IDE7DQoJCWV4cG9uZW50Kys7DQoJ
ICAgIH0NCiAgICB9DQoNCiAgICAvLw0KICAgIC8vIE5vcm1hbGl6ZSBsZWZ0LiAgU2hpZnQgdW50
aWwgdmFsdWUgPj0gTUlOX0ZSQUNULg0KICAgIC8vDQogICAgZWxzZQ0KCXdoaWxlIChmcmFjdGlv
biA8IE1JTl9GUkFDVCkNCgl7DQoJICAgIGZyYWN0aW9uIDw8PSAxOw0KCSAgICBleHBvbmVudC0t
Ow0KCX0NCg0KICAgIC8vDQogICAgLy8gQ2hlY2sgYW5kIHJlc3BvbmQgdG8gb3ZlcmZsb3cNCiAg
ICAvLw0KICAgIGlmIChleHBvbmVudCA+IEJJQVMpDQogICAgICAgIHJldHVybiBzaWduID8gTkVH
QVRJVkVfSU5GSU5JVFkoKSA6IFBPU0lUSVZFX0lORklOSVRZKCk7DQoNCiAgICAvLw0KICAgIC8v
IENoZWNrIGFuZCByZXNwb25kIHRvIHVuZGVyZmxvdyANCiAgICAvLw0KICAgIGlmIChleHBvbmVu
dCA8PSAtQklBUykNCiAgICB7DQoJd2hpbGUgKGV4cG9uZW50IDw9IC1CSUFTKQ0KCXsNCgkgICAg
c3RpY2t5IHw9IHJvdW5kOw0KCSAgICByb3VuZCA9IChmcmFjdGlvbiAmIDEpICE9IDA7DQoJICAg
IGZyYWN0aW9uID4+PSAxOw0KCSAgICBleHBvbmVudCsrOw0KCX0NCg0KCWlmIChyb3VuZCAmJiAo
c3RpY2t5IHx8IChmcmFjdGlvbiAmIDEpKSkNCgkgICAgZnJhY3Rpb24rKzsNCg0KCWV4cG9uZW50
ID0gLUJJQVM7DQoNCglpZiAoZnJhY3Rpb24gPT0gMCkNCiAgICAgICAgICAgIHJldHVybiBzaWdu
ID8gTkVHQVRJVkVfWkVSTygpIDogUE9TSVRJVkVfWkVSTygpOw0KICAgIH0NCg0KICAgIGZyYWN0
aW9uICY9IEZSQUNUX0JJVFM7DQogICAgZnJhY3Rpb24gfD0gKChleHBvbmVudCArIEJJQVMpIDw8
IEZSQUNUX1NJWkUpOw0KICAgIGlmIChzaWduKQ0KICAgICAgICBmcmFjdGlvbiB8PSBTSUdOX0JJ
VDsNCiAgICByZXR1cm4gSUVFRWZsb2F0KGZyYWN0aW9uKTsNCn0NCg0KaW50IElFRUVmbG9hdDo6
U3BsaXRJbnRvKHU0ICZmcmFjdGlvbikgY29uc3QNCnsNCiAgICBpbnQgZXhwb25lbnQgPSBFeHBv
bmVudCgpOw0KICAgIGZyYWN0aW9uID0gRnJhY3Rpb24oKTsNCg0KICAgIGlmIChleHBvbmVudCA9
PSAtQklBUykNCiAgICB7DQoJZXhwb25lbnQrKzsNCgl3aGlsZSAoZnJhY3Rpb24gPCBNSU5fRlJB
Q1QpDQoJew0KCSAgICBmcmFjdGlvbiA8PD0gMTsNCgkgICAgZXhwb25lbnQtLTsNCgl9DQogICAg
fQ0KDQogICAgcmV0dXJuIGV4cG9uZW50Ow0KfQ0KDQpJRUVFZmxvYXQgSUVFRWZsb2F0OjpVbHAo
KSBjb25zdA0Kew0KICAgIGk0IEw7DQogICAgSUVFRWZsb2F0IGY7DQogICAgZi52YWx1ZS5mbG9h
dF92YWx1ZSA9IHZhbHVlLmZsb2F0X3ZhbHVlOw0KICAgIA0KICAgIEwgPSAoaTQpIGYuRXhwQml0
cygpIC0gRlJBQ1RfU0laRSAqIE1JTl9GUkFDVDsNCiAgICBpZiAoTCA+IDApDQogICAgICAgIGYu
dmFsdWUuaXdvcmQgPSBMOw0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIEwgPSAtTCA+PiBGUkFD
VF9TSVpFOw0KICAgICAgICBmLnZhbHVlLml3b3JkID0gTCA+PSAoaTQpIEZSQUNUX1NJWkUgPyAx
IDogMHg0MDAwMDAgPj4gTDsNCiAgICB9DQogICAgcmV0dXJuIGY7DQp9DQoNCklFRUVmbG9hdCBJ
RUVFZmxvYXQ6OlJhdGlvKGNvbnN0IEJpZ0ludCAmYSwgY29uc3QgQmlnSW50ICZiKQ0Kew0KICAg
IElFRUVmbG9hdCBmYSwgZmI7DQogICAgaW50IGs7DQogICAgZmEgPSBhLkZsb2F0VmFsdWUoKTsN
CiAgICBmYiA9IGIuRmxvYXRWYWx1ZSgpOw0KICAgIGsgPSBiLmhpMGJpdHMoKSAtIGEuaGkwYml0
cygpICsgMzIgKiAoYS53ZHMgLSBiLndkcyk7DQogICAgaWYgKGsgPiAwKQ0KICAgICAgICBmYS52
YWx1ZS53b3JkICs9IGsgKiBNSU5fRlJBQ1Q7DQogICAgZWxzZQ0KICAgICAgICBmYi52YWx1ZS53
b3JkIC09IGsgKiBNSU5fRlJBQ1Q7DQogICAgcmV0dXJuIGZhIC8gZmI7DQp9DQoNCmJvb2wgSUVF
RWZsb2F0OjpvcGVyYXRvcj09IChjb25zdCBJRUVFZmxvYXQgb3ApIGNvbnN0DQp7DQogICAgLy8g
RklYTUU6IFRoaXMgY291bGQgYmUgc3BlZCB1cCBieSBpbmxpbmluZw0KI2lmZGVmIEhBVkVfSUVF
RTc1NA0KICAgIHJldHVybiB2YWx1ZS5mbG9hdF92YWx1ZSA9PSBvcC52YWx1ZS5mbG9hdF92YWx1
ZTsNCiNlbHNlDQogICAgcmV0dXJuIElzTmFOKCkgfHwgb3AuSXNOYU4oKSA/IGZhbHNlDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IElzWmVybygpICYmIG9wLklzWmVybygpID8g
dHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IHZhbHVlLndvcmQgPT0gb3AudmFsdWUud29yZDsNCiNlbmRpZg0KfQ0KDQpib29s
IElFRUVmbG9hdDo6b3BlcmF0b3IhPSAoY29uc3QgSUVFRWZsb2F0IG9wKSBjb25zdA0Kew0KICAg
IC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIHNwZWQgdXAgYnkgaW5saW5pbmcNCiNpZmRlZiBIQVZF
X0lFRUU3NTQNCiAgICByZXR1cm4gdmFsdWUuZmxvYXRfdmFsdWUgIT0gb3AudmFsdWUuZmxvYXRf
dmFsdWU7DQojZWxzZQ0KICAgIHJldHVybiAhKCp0aGlzID09IG9wKTsNCiNlbmRpZg0KfQ0KDQpi
b29sIElFRUVmbG9hdDo6b3BlcmF0b3I8IChjb25zdCBJRUVFZmxvYXQgb3ApIGNvbnN0DQp7DQog
ICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgc3BlZCB1cCBieSBpbmxpbmluZw0KI2lmZGVmIEhB
VkVfSUVFRTc1NA0KICAgIHJldHVybiAodmFsdWUuZmxvYXRfdmFsdWUgPCBvcC52YWx1ZS5mbG9h
dF92YWx1ZSk7DQojZWxzZQ0KICAgIGlmIChJc05hTigpIHx8IG9wLklzTmFOKCkpDQogICAgICAg
IHJldHVybiBmYWxzZTsgLy8gTmFOcyBhcmUgdW5vcmRlcmVkDQogICAgaWYgKElzWmVybygpKQ0K
ICAgICAgICByZXR1cm4gb3AuSXNaZXJvKCkgPyBmYWxzZSA6IG9wLklzUG9zaXRpdmUoKTsNCiAg
ICBpZiAob3AuSXNaZXJvKCkpDQogICAgICAgIHJldHVybiBJc05lZ2F0aXZlKCk7DQogICAgLy8g
RXhwbG9pdCBmYWN0IHRoYXQgcmVtYWluaW5nIElFRUUgZmxvYXRpbmcgcG9pbnQgc29ydCBhcyBz
aWduZWQgaW50cw0KICAgIHJldHVybiB2YWx1ZS5pd29yZCA8IG9wLnZhbHVlLml3b3JkOw0KI2Vu
ZGlmDQp9DQoNCmJvb2wgSUVFRWZsb2F0OjpvcGVyYXRvcjw9IChjb25zdCBJRUVFZmxvYXQgb3Ap
IGNvbnN0DQp7DQogICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgc3BlZCB1cCBieSBpbmxpbmlu
Zw0KI2lmZGVmIEhBVkVfSUVFRTc1NA0KICAgIHJldHVybiAodmFsdWUuZmxvYXRfdmFsdWUgPD0g
b3AudmFsdWUuZmxvYXRfdmFsdWUpOw0KI2Vsc2UNCiAgICByZXR1cm4gKnRoaXMgPCBvcCB8fCAq
dGhpcyA9PSBvcDsNCiNlbmRpZg0KfQ0KDQpib29sIElFRUVmbG9hdDo6b3BlcmF0b3I+IChjb25z
dCBJRUVFZmxvYXQgb3ApIGNvbnN0DQp7DQogICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgc3Bl
ZCB1cCBieSBpbmxpbmluZw0KI2lmZGVmIEhBVkVfSUVFRTc1NA0KICAgIHJldHVybiAodmFsdWUu
ZmxvYXRfdmFsdWUgPiBvcC52YWx1ZS5mbG9hdF92YWx1ZSk7DQojZWxzZQ0KICAgIGlmIChJc05h
TigpIHx8IG9wLklzTmFOKCkpDQogICAgICAgIHJldHVybiBmYWxzZTsgLy8gTmFOcyBhcmUgdW5v
cmRlcmVkLg0KICAgIGlmIChJc1plcm8oKSkNCiAgICAgICAgcmV0dXJuIG9wLklzWmVybygpID8g
ZmFsc2UgOiBvcC5Jc05lZ2F0aXZlKCk7DQogICAgaWYgKG9wLklzWmVybygpKQ0KICAgICAgICBy
ZXR1cm4gSXNQb3NpdGl2ZSgpOw0KICAgIC8vIEV4cGxvaXQgZmFjdCB0aGF0IHJlbWFpbmluZyBJ
RUVFIGZsb2F0aW5nIHBvaW50IHNvcnQgYXMgc2lnbmVkIGludHMNCiAgICByZXR1cm4gdmFsdWUu
aXdvcmQgPiBvcC52YWx1ZS5pd29yZDsNCiNlbmRpZg0KfQ0KDQpib29sIElFRUVmbG9hdDo6b3Bl
cmF0b3I+PSAoY29uc3QgSUVFRWZsb2F0IG9wKSBjb25zdA0Kew0KICAgIC8vIEZJWE1FOiBUaGlz
IGNvdWxkIGJlIHNwZWQgdXAgYnkgaW5saW5pbmcNCiNpZmRlZiBIQVZFX0lFRUU3NTQNCiAgICBy
ZXR1cm4gKHZhbHVlLmZsb2F0X3ZhbHVlID49IG9wLnZhbHVlLmZsb2F0X3ZhbHVlKTsNCiNlbHNl
DQogICAgcmV0dXJuICp0aGlzID4gb3AgfHwgKnRoaXMgPT0gb3A7DQojZW5kaWYNCn0NCg0KSUVF
RWZsb2F0IElFRUVmbG9hdDo6b3BlcmF0b3IrIChjb25zdCBJRUVFZmxvYXQgb3ApIGNvbnN0DQp7
DQojaWZkZWYgSEFWRV9JRUVFNzU0DQogICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgc3BlZCB1
cCBieSBpbmxpbmluZw0KICAgIHJldHVybiBJRUVFZmxvYXQodmFsdWUuZmxvYXRfdmFsdWUgKyBv
cC52YWx1ZS5mbG9hdF92YWx1ZSk7DQojZWxzZQ0KICAgIGlmIChJc05hTigpIHx8IG9wLklzTmFO
KCkpDQogICAgICAgIHJldHVybiBOYU4oKTsgLy8gYXJpdGhtZXRpYyBvbiBOYU5zIG5vdCBhbGxv
d2VkDQoNCiAgICAvLw0KICAgIC8vIEFkZGluZyB1bmxpa2UgaW5maW5pdGllcyBub3QgYWxsb3dl
ZA0KICAgIC8vIEFkZGluZyBpbmZpbml0aWVzIG9mIHNhbWUgc2lnbiBpcyBpbmZpbml0eSBvZiB0
aGF0IHNpZ24NCiAgICAvLyBBZGRpbmcgZmluaXRlIGFuZCBpbmZpbml0eSBwcm9kdWNlcyBpbmZp
bml0eQ0KICAgIC8vDQogICAgaWYgKElzSW5maW5pdGUoKSkNCiAgICAgICAgcmV0dXJuIG9wLklz
SW5maW5pdGUoKSAmJiAoU2lnbigpICE9IG9wLlNpZ24oKSkgPyBOYU4oKSA6ICp0aGlzOw0KICAg
IGlmIChvcC5Jc0luZmluaXRlKCkpDQogICAgICAgIHJldHVybiBvcDsNCg0KICAgIC8vDQogICAg
Ly8gQWRkaW5nIHplcm8gaXMgZWFzeQ0KICAgIC8vDQogICAgaWYgKElzWmVybygpKQ0KICAgICAg
ICByZXR1cm4gKG9wLklzWmVybygpKSA/IChTaWduKCkgIT0gb3AuU2lnbigpKSA/IFBPU0lUSVZF
X1pFUk8oKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6ICp0aGlzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogb3A7DQogICAgaWYg
KG9wLklzWmVybygpKQ0KICAgICAgICByZXR1cm4gKnRoaXM7DQoNCiAgICAvLw0KICAgIC8vIE5v
dyBmb3IgdGhlIHJlYWwgd29yayAtIGRvIG1hbmlwdWxhdGlvbnMgb24gY29waWVzDQogICAgLy8N
CiAgICBpNCB4LCB5LCByb3VuZCA9IDA7DQogICAgaW50IGV4cHgsIGV4cHksIHNpZ254LCBzaWdu
eTsNCg0KICAgIGV4cHggPSBTcGxpdEludG8oKHU0ICYpIHgpOw0KICAgIGV4cHkgPSBvcC5TcGxp
dEludG8oKHU0ICYpIHkpOw0KICAgIA0KICAgIHNpZ254ID0gU2lnbigpOw0KICAgIHNpZ255ID0g
b3AuU2lnbigpOw0KDQogICAgLy8gSWYgdGhlIGV4cG9uZW50cyBhcmUgZmFyIGVub3VnaCBhcGFy
dCwgdGhlIGFuc3dlciBpcyBlYXN5DQogICAgaWYgKGV4cHggPiBleHB5ICsgMjUpDQogICAgICAg
IHJldHVybiAqdGhpczsNCiAgICBpZiAoZXhweSA+IGV4cHggKyAyNSkNCiAgICAgICAgcmV0dXJu
IG9wOw0KDQogICAgLy8NCiAgICAvLyBEZW5vcm1hbGl6ZSB0aGUgZnJhY3Rpb25zLCBzbyB0aGF0
IHRoZSBleHBvbmVudHMgYXJlDQogICAgLy8gdGhlIHNhbWUgYW5kIHRoZW4gc2V0IHRoZSBleHBv
bmVudCBmb3IgdGhlIHJlc3VsdC4NCiAgICAvLyBMZWF2ZSBlbm91Z2ggc3BhY2UgZm9yIG92ZXJm
bG93IGFuZCBJTlRfTUlOIGF2b2lkYW5jZSENCiAgICAvLyANCiAgICBpZiAoc2lnbngpDQogICAg
ICAgIHggPSAteDsNCiAgICBpZiAoc2lnbnkpDQogICAgICAgIHkgPSAteTsNCg0KICAgIHggPDw9
IDY7DQogICAgeSA8PD0gNjsNCg0KICAgIGlmIChleHB4ID4gZXhweSkgew0KICAgICAgICByb3Vu
ZCA9IHkgPDwgKDMyICsgZXhweSAtIGV4cHgpOw0KICAgICAgICB5ID4+PSBleHB4IC0gZXhweTsN
CiAgICB9DQogICAgZWxzZSBpZiAoZXhweSA+IGV4cHgpDQogICAgew0KICAgICAgICByb3VuZCA9
IHggPDwgKDMyICsgZXhweCAtIGV4cHkpOw0KICAgICAgICB4ID4+PSBleHB5IC0gZXhweDsNCiAg
ICAgICAgZXhweCA9IGV4cHk7DQogICAgfQ0KDQogICAgLy8NCiAgICAvLyBEbyB0aGUgYXJpdGht
ZXRpYy4gVGhlIGV4Y2VzcyBtYWduaXR1ZGUgb2YgMzItYml0IGFyaXRobWV0aWMgbWVhbnMNCiAg
ICAvLyBvdmVyZmxvdyBpcyBpbXBvc3NpYmxlICh3ZSBvbmx5IG5lZWQgMSBzcGFyZSBiaXQhKS4g
V2UgZW5zdXJlIHRoYXQNCiAgICAvLyBwcmUtYWxpZ25tZW50IGF2b2lkcyBhbnkgcXVlc3Rpb24g
b2YgSU5UX01JTiBuZWdhdGlvbiBwcm9ibGVtcy4NCiAgICAvLw0KICAgIHggKz0geTsNCiAgICBp
ZiAocm91bmQpDQogICAgICAgIHggfD0gMTsNCg0KICAgIC8vDQogICAgLy8gSWYgdGhlIHJlc3Vs
dCBpcyBuZWdhdGl2ZSwgdGhlbiBtYWtlIHRoZSBmcmFjdGlvbiBwb3NpdGl2ZSBhZ2Fpbg0KICAg
IC8vIGFuZCByZW1lbWJlciB0aGUgc2lnbi4NCiAgICAvLw0KICAgIGlmICh4IDwgMCkNCiAgICB7
DQogICAgICAgIHggPSAteDsNCiAgICAgICAgc2lnbnggPSAxOw0KICAgIH0NCiAgICBlbHNlDQog
ICAgICAgIHNpZ254ID0gMDsNCg0KICAgIGlmICh4ID09IDApDQogICAgICAgIHJldHVybiBzaWdu
eCA/IE5FR0FUSVZFX1pFUk8oKSA6IFBPU0lUSVZFX1pFUk8oKTsNCg0KICAgIC8vDQogICAgLy8g
VGltZSB0byBub3JtYWxpemUgYWdhaW4hIElmIHdlIG5lZWQgdG8gc2hpZnQgbGVmdCAodGhlIGFk
ZGl0aW9uIHdhcw0KICAgIC8vIGVmZmVjdGl2ZWx5IGEgc3VidHJhY3Rpb24pLCB0aGVuIHRoZXJl
IGNhbm5vdCBiZSBhbnkgcmVhc29uIHRvIHJvdW5kLg0KICAgIC8vIElmIHRoZSBudW1iZXIgZml0
cyBleGFjdGx5IHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gZG8gZWl0aGVyLg0KICAgIC8vDQog
ICAgcmV0dXJuIE5vcm1hbGl6ZShzaWdueCwgZXhweCAtIDYsICh1NCkgeCk7DQojZW5kaWYNCn0N
Cg0KSUVFRWZsb2F0IElFRUVmbG9hdDo6b3BlcmF0b3ItICgpIGNvbnN0DQp7DQogICAgLy8gRklY
TUU6IFRoaXMgY291bGQgYmUgc3BlZCB1cCBieSBpbmxpbmluZw0KI2lmZGVmIEhBVkVfSUVFRTc1
NA0KICAgIHJldHVybiBJRUVFZmxvYXQoLXZhbHVlLmZsb2F0X3ZhbHVlKTsNCiNlbHNlDQogICAg
aWYgKElzTmFOKCkpDQogICAgICAgIHJldHVybiAqdGhpczsNCiAgICByZXR1cm4gSUVFRWZsb2F0
KHZhbHVlLndvcmQgXiBTSUdOX0JJVCk7DQojZW5kaWYNCn0NCg0KSUVFRWZsb2F0IElFRUVmbG9h
dDo6b3BlcmF0b3IqIChjb25zdCBJRUVFZmxvYXQgb3ApIGNvbnN0DQp7DQojaWZkZWYgSEFWRV9J
RUVFNzU0DQogICAgcmV0dXJuIElFRUVmbG9hdCh2YWx1ZS5mbG9hdF92YWx1ZSAqIG9wLnZhbHVl
LmZsb2F0X3ZhbHVlKTsNCiNlbHNlDQogICAgaWYgKElzTmFOKCkgfHwgb3AuSXNOYU4oKSkNCiAg
ICAgICAgcmV0dXJuIE5hTigpOyAvLyBhcml0aG1ldGljIG9uIE5hTnMgbm90IGFsbG93ZWQNCg0K
ICAgIGludCBzaWduID0gU2lnbigpIF4gb3AuU2lnbigpOw0KDQogICAgLy8NCiAgICAvLyBJZiBl
aXRoZXIgb3BlcmFuZCBpcyB6ZXJvIG9yIGluZmluaXRlLCB0aGVuIHRoZSBhbnN3ZXIgaXMgZWFz
eS4NCiAgICAvLw0KICAgIGlmIChJc1plcm8oKSkNCiAgICAgICAgcmV0dXJuIG9wLklzSW5maW5p
dGUoKSA/IE5hTigpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzaWduID8gTkVH
QVRJVkVfWkVSTygpIDogUE9TSVRJVkVfWkVSTygpOw0KDQogICAgaWYgKG9wLklzWmVybygpKQ0K
ICAgICAgICByZXR1cm4gSXNJbmZpbml0ZSgpID8gTmFOKCkNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IHNpZ24gPyBORUdBVElWRV9aRVJPKCkgOiBQT1NJVElWRV9aRVJPKCk7DQoNCiAg
ICBpZiAoSXNJbmZpbml0ZSgpIHx8IG9wLklzSW5maW5pdGUoKSkNCiAgICAgICAgcmV0dXJuIHNp
Z24gPyBORUdBVElWRV9JTkZJTklUWSgpIDogUE9TSVRJVkVfSU5GSU5JVFkoKTsNCg0KICAgIC8v
DQogICAgLy8gTm93IGZvciB0aGUgcmVhbCB3b3JrIC0gZG8gbWFuaXB1bGF0aW9ucyBvbiBjb3Bp
ZXMNCiAgICAvLw0KICAgIHU0IHgsIHk7DQogICAgaW50IGV4cG9uZW50Ow0KDQogICAgZXhwb25l
bnQgPSBTcGxpdEludG8oeCkgKyBvcC5TcGxpdEludG8oeSk7DQoNCiAgICAvLw0KICAgIC8vIFRo
ZSBudW1iZXJzIHRvIGJlIG11bHRpcGxpZWQgYXJlIDI0IGJpdHMgaW4gbGVuZ3RoIChzdG9yZWQg
aW4gMzIgYml0DQogICAgLy8gaW50ZWdlcnMpLiBVc2luZyBVTG9uZ0ludCB0byBwZXJmb3JtIHRo
ZSBtdWx0aXBsaWNhdGlvbiwgdGhlIHJlc3VsdA0KICAgIC8vIHdpbGwgYmUgNDYtNDggYml0cyAo
dW5zaWduZWQpOyBzaGlmdCBpdCBiYWNrIHRvIDI4IGJpdHMgZm9yIE5vcm1hbGl6ZSwNCiAgICAv
LyB3aGlsZSBmb2xkaW5nIHRoZSBsb3cgMjAgYml0cyBpbnRvIHRoZSBsc2IgZm9yIHJvdW5kaW5n
IHB1cnBvc2VzLg0KICAgIC8vDQoNCiAgICBVTG9uZ0ludCBhID0geCwNCiAgICAgICAgICAgICBi
ID0geTsNCiAgICBhICo9IGI7DQogICAgYiA9IGEgJiAweGZmZmZmOw0KICAgIGEgPj49IDIwOw0K
ICAgIHggPSBhLkxvd1dvcmQoKSB8ICgoYiA+IDApID8gMSA6IDApOw0KICAgIA0KICAgIHJldHVy
biBOb3JtYWxpemUoc2lnbiwgZXhwb25lbnQgLSAzLCB4KTsNCiNlbmRpZiAvLyBIQVZFX0lFRUU3
NTQNCn0NCg0KSUVFRWZsb2F0IElFRUVmbG9hdDo6b3BlcmF0b3IvIChjb25zdCBJRUVFZmxvYXQg
b3ApIGNvbnN0DQp7DQojaWZkZWYgSEFWRV9JRUVFNzU0DQogICAgcmV0dXJuIG9wLklzWmVybygp
ID8gKChJc05hTigpIHx8IElzWmVybygpKSA/IE5hTigpDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiAoSXNQb3NpdGl2ZSgpIF4gb3AuSXNQb3NpdGl2ZSgpKQ0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBORUdBVElWRV9JTkZJTklUWSgpDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFBPU0lUSVZFX0lORklOSVRZKCkpDQog
ICAgICAgICAgICAgICAgICAgICAgIDogSUVFRWZsb2F0KHZhbHVlLmZsb2F0X3ZhbHVlIC8gb3Au
dmFsdWUuZmxvYXRfdmFsdWUpOw0KI2Vsc2UgLy8gSEFWRV9JRUVFNzU0DQogICAgaWYgKElzTmFO
KCkgfHwgb3AuSXNOYU4oKSkNCiAgICAgICAgcmV0dXJuIE5hTigpOyAvLyBhcml0aG1ldGljIG9u
IE5hTnMgbm90IGFsbG93ZWQNCg0KICAgIGludCBzaWduID0gU2lnbigpIF4gb3AuU2lnbigpOw0K
DQogICAgLy8NCiAgICAvLyBJbmZpbml0aWVzIGFuZCB6ZXJvZXMgYXJlIHNwZWNpYWwuDQogICAg
Ly8NCg0KICAgIGlmIChJc0luZmluaXRlKCkpDQogICAgICAgIHJldHVybiBvcC5Jc0luZmluaXRl
KCkgPyBOYU4oKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2lnbiA/IE5FR0FU
SVZFX0lORklOSVRZKCkgOiBQT1NJVElWRV9JTkZJTklUWSgpOw0KDQogICAgaWYgKG9wLklzSW5m
aW5pdGUoKSkNCiAgICAgICAgcmV0dXJuIHNpZ24gPyBORUdBVElWRV9aRVJPKCkgOiBQT1NJVElW
RV9aRVJPKCk7DQoNCiAgICBpZiAoSXNaZXJvKCkpDQogICAgICAgIHJldHVybiBvcC5Jc1plcm8o
KSA/IE5hTigpDQogICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNpZ24gPyBORUdBVElWRV9a
RVJPKCkgOiBQT1NJVElWRV9aRVJPKCk7DQoNCiAgICBpZiAob3AuSXNaZXJvKCkpDQogICAgICAg
IHJldHVybiBzaWduID8gTkVHQVRJVkVfSU5GSU5JVFkoKSA6IFBPU0lUSVZFX0lORklOSVRZKCk7
DQoNCiAgICAvLw0KICAgIC8vIE5vdyBmb3IgdGhlIHJlYWwgd29yayAtIGRvIG1hbmlwdWxhdGlv
bnMgb24gY29waWVzDQogICAgLy8NCiAgICB1NCB4LCB5Ow0KICAgIGludCBleHBvbmVudDsNCg0K
ICAgIGV4cG9uZW50ID0gU3BsaXRJbnRvKHgpIC0gb3AuU3BsaXRJbnRvKHkpOw0KDQogICAgdTQg
IG1hc2sgICA9IDB4ODAwMDAwMDAsDQogICAgICAgIHJlc3VsdCA9IDA7DQoNCiAgICAvLyBCZWNh
dXNlIGJvdGggdmFsdWVzIGFyZSBub3JtYWxpc2VkLCBhIHNpbmdsZSBzaGlmdCBndWFyYW50ZWVz
IHJlc3VsdHMuDQoNCiAgICBpZiAoeCA8IHkpDQogICAgew0KCXggPDw9IDE7DQoJZXhwb25lbnQt
LTsNCiAgICB9DQoNCiAgICAvLw0KICAgIC8vIElmIHRoZSBudW1lcmF0b3IgaXMgbGFyZ2VyLCB0
aGVuIGl0IGlzIGRpdmlzaWJsZS4NCiAgICAvLyBSZWZsZWN0IHRoaXMgaW4gdGhlIHJlc3VsdCwg
YW5kIGRvIHRoZSBzdWJ0cmFjdGlvbi4NCiAgICAvLyBNYWduaWZ5IHRoZSBudW1lcmF0b3IgYWdh
aW4gYW5kIHJlZHVjZSB0aGUgbWFzay4NCiAgICAvLw0KICAgIHdoaWxlIChtYXNrKQ0KICAgIHsN
CglpZiAoeCA+PSB5KQ0KCXsNCgkgICAgcmVzdWx0ICs9IG1hc2s7DQoJICAgIHggLT0geTsNCgkg
ICAgaWYgKHggPT0gMCkNCgkJYnJlYWs7DQoJfQ0KICAgICAgICB4IDw8PSAxOw0KICAgICAgICBt
YXNrID4+PSAxOw0KICAgIH0NCg0KICAgIHJldHVybiBOb3JtYWxpemUoc2lnbiwgZXhwb25lbnQg
LSA4LCByZXN1bHQpOw0KI2VuZGlmIC8vIEhBVkVfSUVFRTc1NA0KfQ0KDQpJRUVFZmxvYXQgSUVF
RWZsb2F0OjpvcGVyYXRvciUgKGNvbnN0IElFRUVmbG9hdCBvcCkgY29uc3QNCnsNCiNpZmRlZiBI
QVZFX0lFRUU3NTQNCiAgICByZXR1cm4gSUVFRWZsb2F0KChvcC5Jc1plcm8oKSA/IE5hTigpLnZh
bHVlLmZsb2F0X3ZhbHVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZmxv
YXQpIGZtb2QoKGRvdWJsZSkgdmFsdWUuZmxvYXRfdmFsdWUsIChkb3VibGUpIG9wLnZhbHVlLmZs
b2F0X3ZhbHVlKSkpOw0KI2Vsc2UgLy8gSEFWRV9JRUVFNzU0DQogICAgaWYgKElzTmFOKCkgfHwg
b3AuSXNOYU4oKSkNCiAgICAgICAgcmV0dXJuIE5hTigpOyAvLyBhcml0aG1ldGljIG9uIE5hTnMg
bm90IGFsbG93ZWQNCg0KICAgIC8vDQogICAgLy8gSW5maW5pdGllcyBhbmQgemVyb2VzIGFyZSBz
cGVjaWFsLg0KICAgIC8vDQoNCiAgICBpZiAoSXNJbmZpbml0ZSgpIHx8IG9wLklzWmVybygpKQ0K
ICAgICAgICByZXR1cm4gTmFOKCk7DQoNCiAgICBpZiAoSXNaZXJvKCkgfHwgb3AuSXNJbmZpbml0
ZSgpKQ0KICAgICAgICByZXR1cm4gKnRoaXM7DQoNCiAgICAvLw0KICAgIC8vIE5vdyBmb3IgdGhl
IHJlYWwgd29yayAtIGRvIG1hbmlwdWxhdGlvbnMgb24gY29waWVzDQogICAgLy8gVGhpcyBhbGdv
cml0aG0gaXMgZnJvbSBmZGxpYm0uYyAtIHNlZSBhYm92ZSBub3RpY2UNCiAgICAvLw0KDQogICAg
aW50IHNpZ24gPSBTaWduKCk7DQogICAgdTQgeCwgeTsNCiAgICBpbnQgZXhweSwgZXhwb25lbnQ7
DQogICAgaTQgejsNCg0KICAgIGV4cHkgPSBvcC5TcGxpdEludG8oeSk7DQogICAgZXhwb25lbnQg
PSBTcGxpdEludG8oeCkgLSBleHB5Ow0KDQogICAgaWYgKGV4cG9uZW50IDwgMCB8fCAoZXhwb25l
bnQgPT0gMCAmJiB4IDwgeSkpDQogICAgICAgIHJldHVybiAqdGhpczsNCg0KICAgIHdoaWxlIChl
eHBvbmVudC0tKQ0KICAgIHsNCiAgICAgICAgeiA9IHggLSB5Ow0KICAgICAgICBpZiAoeiA8IDAp
DQogICAgICAgICAgICB4IDw8PSAxOw0KICAgICAgICBlbHNlIGlmICh6ID09IDApDQogICAgICAg
ICAgICByZXR1cm4gc2lnbiA/IE5FR0FUSVZFX1pFUk8oKSA6IFBPU0lUSVZFX1pFUk8oKTsNCiAg
ICAgICAgZWxzZQ0KICAgICAgICAgICAgeCA9IHogKyB6Ow0KICAgIH0NCiAgICB6ID0geCAtIHk7
DQogICAgaWYgKHogPj0gMCkNCiAgICAgICAgeCA9IHo7DQoNCiAgICBpZiAoeCA9PSAwKQ0KICAg
ICAgICByZXR1cm4gc2lnbiA/IE5FR0FUSVZFX1pFUk8oKSA6IFBPU0lUSVZFX1pFUk8oKTsNCiAg
ICByZXR1cm4gTm9ybWFsaXplKHNpZ24sIGV4cHksIHgpOw0KI2VuZGlmIC8vIEhBVkVfSUVFRTc1
NA0KfQ0KDQoNCg0KSUVFRWRvdWJsZTo6SUVFRWRvdWJsZShjb25zdCBJRUVFZmxvYXQgJmYpDQp7
DQojaWZkZWYgSEFWRV9JRUVFNzU0DQogICAgdmFsdWUuZG91YmxlX3ZhbHVlID0gKGRvdWJsZSkg
Zi5GbG9hdFZpZXcoKTsNCiNlbHNlDQogICAgaW50IHNpZ24gPSBmLlNpZ24oKTsNCiAgICBpbnQg
ZXhwb25lbnQgPSBmLkV4cG9uZW50KCk7DQoNCiAgICBpZiAoZXhwb25lbnQgPT0gLUlFRUVmbG9h
dDo6QmlhcygpKQ0KICAgIHsNCglpZiAoZi5Jc1plcm8oKSkNCiAgICAgICAgICAgICp0aGlzID0g
c2lnbiA/IE5FR0FUSVZFX1pFUk8oKSA6IFBPU0lUSVZFX1pFUk8oKTsNCgllbHNlDQogICAgICAg
IHsNCiAgICAgICAgICAgIC8vDQogICAgICAgICAgICAvLyBUaGlzIGlzIGEgZGVub3JtYWxpemVk
IG51bWJlciwgc2hpZnQgaXQgdG8gZml0IGRvdWJsZSBmb3JtYXQNCiAgICAgICAgICAgIC8vDQoJ
ICAgICp0aGlzID0gTm9ybWFsaXplKHNpZ24sIDEgLSBJRUVFZmxvYXQ6OkJpYXMoKSwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVMb25nSW50KGYuRnJhY3Rpb24oKSkgPDwgMjkpOw0K
CX0NCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgaWYgKGYuSXNJbmZpbml0ZSgpKQ0K
ICAgICAgICAgICAgKnRoaXMgPSBzaWduID8gTkVHQVRJVkVfSU5GSU5JVFkoKSA6IFBPU0lUSVZF
X0lORklOSVRZKCk7DQogICAgICAgIGVsc2UgaWYgKGYuSXNOYU4oKSkNCiAgICAgICAgICAgICp0
aGlzID0gTmFOKCk7DQogICAgICAgIGVsc2UNCgl7DQogICAgICAgICAgICAvLyBSZWd1bGFyLCBu
b3JtYWxpemVkIG51bWJlci4gIFNoaWZ0IGl0IHRvIGZpdCBkb3VibGUgZm9ybWF0DQogICAgICAg
ICAgICAqdGhpcyA9IE5vcm1hbGl6ZShzaWduLCBleHBvbmVudCwgVUxvbmdJbnQoZi5GcmFjdGlv
bigpKSA8PCAyOSk7DQoJfQ0KICAgIH0NCiNlbmRpZiAvLyBIQVZFX0lFRUU3NTQNCn0NCg0KSUVF
RWRvdWJsZTo6SUVFRWRvdWJsZShpNCBhKQ0Kew0KI2lmZGVmIEhBVkVfSUVFRTc1NA0KICAgIHZh
bHVlLmRvdWJsZV92YWx1ZSA9IChkb3VibGUpIGE7DQojZWxzZQ0KICAgIGludAlzaWduID0gMDsN
Cg0KICAgIGlmIChhIDwgMCkNCiAgICB7DQogICAgICAgIGEgID0gLWE7IC8vIGV2ZW4gd29ya3Mg
Zm9yIE1JTl9JTlQhDQogICAgICAgIHNpZ24gPSAxOw0KICAgIH0NCiAgICBpZiAoYSA9PSAwKQ0K
ICAgICAgICAqdGhpcyA9IFBPU0lUSVZFX1pFUk8oKTsNCiAgICBlbHNlDQogICAgICAgICp0aGlz
ID0gTm9ybWFsaXplKHNpZ24sIEZSQUNUX1NJWkUsIFVMb25nSW50KCh1NCkgYSkpOw0KI2VuZGlm
IC8vIEhBVkVfSUVFRTc1NA0KfQ0KDQpJRUVFZG91YmxlOjpJRUVFZG91YmxlKGNvbnN0IExvbmdJ
bnQgJmEpDQp7DQojaWZkZWYgSEFWRV9JRUVFNzU0DQojIGlmZGVmIEhBVkVfVU5TSUdORURfTE9O
R19MT05HDQogICAgdmFsdWUuZG91YmxlX3ZhbHVlID0gKGRvdWJsZSkoaTgpIGEuV29yZHMoKTsN
CiMgZWxzZQ0KICAgIHZhbHVlLmRvdWJsZV92YWx1ZSA9ICgoZG91YmxlKShpNCkgYS5IaWdoV29y
ZCgpICogKGRvdWJsZSkgMHg0MDAwMDAwMCAqIDQuMCkgKw0KICAgICAgICAoZG91YmxlKSBhLkxv
d1dvcmQoKTsNCiMgZW5kaWYgLy8gSEFWRV9VTlNJR05FRF9MT05HX0xPTkcNCiNlbHNlDQogICAg
aW50CXNpZ24gPSAwOw0KICAgIExvbmdJbnQgbCA9IGE7DQoNCiAgICBpZiAoYSA8IDApDQogICAg
ew0KICAgICAgICBsICA9IC1hOyAvLyBldmVuIHdvcmtzIGZvciBNSU5fTE9ORyENCiAgICAgICAg
c2lnbiA9IDE7DQogICAgfQ0KICAgIGlmIChsID09IDApDQogICAgICAgICp0aGlzID0gUE9TSVRJ
VkVfWkVSTygpOw0KICAgIGVsc2UNCiAgICAgICAgKnRoaXMgPSBOb3JtYWxpemUoc2lnbiwgRlJB
Q1RfU0laRSwgVUxvbmdJbnQobCkpOw0KI2VuZGlmIC8vIEhBVkVfSUVFRTc1NA0KfQ0KDQpJRUVF
ZG91YmxlOjpJRUVFZG91YmxlKGNvbnN0IGNoYXIgKnN0ciwgYm9vbCBjaGVja19pbnZhbGlkKQ0K
ew0KICAgIGludCBiYjIsIGJiNSwgYmJlLCBiZDIsIGJkNSwgYmJiaXRzLCBiczIsDQogICAgICAg
IGUsIGUxLCBpLCBqLCBrOw0KICAgIGludCBuZCwgLy8gbnVtYmVyIG9mIGRpZ2l0cyBpbiBtYW50
aXNzYSAoZXhjZXB0IGV4dHJhICcwJ3MpDQogICAgICAgIG5kMCwgLy8gbnVtYmVyIG9mIGRpZ2l0
cyBiZWZvcmUgJy4nIChleGNlcHQgbGVhZGluZyAnMCdzKQ0KICAgICAgICBuZiwgLy8gbnVtYmVy
IG9mIGRpZ2l0cyBhZnRlciAnLicgKGV4Y2VwdCB0cmFpbGluZyAnMCdzKQ0KICAgICAgICBuejsg
Ly8gbnVtYmVyIG9mIGNvbnNlY3V0aXZlICcwJyBkaWdpdHMNCiAgICBib29sIG56MCwgLy8gd2hl
dGhlciBsZWFkaW5nIHplcm8gZXhpc3RzDQogICAgICAgICByb3VuZHVwLCAvLyB3aGV0aGVyIHRv
IHJvdW5kIHVwIGxvbmcgc3RyaW5nDQogICAgICAgICBzaWduLCAvLyBpZiB0aGUgc3RyaW5nIHJl
cHJlc2VudHMgYSBuZWdhdGl2ZQ0KICAgICAgICAgZHNpZ24sIC8vIHRoZSBzaWduIG9mIGRlbHRh
DQogICAgICAgICBlc2lnbjsgLy8gdGhlIHNpZ24gb2YgdGhlIGV4cG9uZW50DQogICAgY2hhciBj
Ow0KICAgIGNvbnN0IGNoYXIgKnMsICpzMCwgKnMxOw0KICAgIElFRUVkb3VibGUgYWFkaiwgYWFk
ajE7DQogICAgaTQgTDsNCiAgICBpNCB5LCB6Ow0KDQogICAgc2lnbiA9IG56MCA9IHJvdW5kdXAg
PSBmYWxzZTsNCiAgICBueiA9IDA7DQoNCiAgICAvLw0KICAgIC8vIGNvbnN1bWUgd2hpdGVzcGFj
ZQ0KICAgIC8vDQogICAgZm9yIChzID0gc3RyOyA7IHMrKykNCiAgICAgICAgc3dpdGNoICgqcykN
CiAgICAgICAgew0KICAgICAgICBjYXNlIFVfTUlOVVM6DQogICAgICAgICAgICBzaWduID0gdHJ1
ZTsNCiAgICAgICAgICAgIC8vIGZhbGx0aHJvdWdoDQogICAgICAgIGNhc2UgVV9QTFVTOg0KICAg
ICAgICAgICAgaWYgKCorK3MpDQogICAgICAgICAgICAgICAgZ290byBicmVhazI7DQogICAgICAg
ICAgICAvLyBmYWxsdGhyb3VnaA0KICAgICAgICBjYXNlIFVfTlU6DQogICAgICAgICAgICAqdGhp
cyA9IE5hTigpOw0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICBjYXNlIFVfU1BBQ0U6DQog
ICAgICAgIGNhc2UgVV9IVDoNCiAgICAgICAgY2FzZSBVX0ZGOg0KICAgICAgICBjYXNlIFVfTEY6
DQogICAgICAgIGNhc2UgVV9DUjoNCiAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICBkZWZh
dWx0Og0KICAgICAgICAgICAgZ290byBicmVhazI7DQogICAgICAgIH0NCiBicmVhazI6DQogICAg
Ly8NCiAgICAvLyBjb25zdW1lIGxlYWRpbmcgMCdzDQogICAgLy8NCiAgICBpZiAoKnMgPT0gVV8w
KQ0KICAgIHsNCiAgICAgICAgbnowID0gdHJ1ZTsNCiAgICAgICAgd2hpbGUgKCorK3MgPT0gVV8w
KTsNCg0KICAgICAgICBpZiAoISAqcykNCiAgICAgICAgew0KICAgICAgICAgICAgKnRoaXMgPSBz
aWduID8gTkVHQVRJVkVfWkVSTygpIDogUE9TSVRJVkVfWkVSTygpOw0KICAgICAgICAgICAgcmV0
dXJuOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLy8NCiAgICAvLyBwYXJzZSBiZWZvcmUgJy4n
DQogICAgLy8NCiAgICBzMCA9IHM7DQogICAgeSA9IHogPSAwOw0KICAgIGZvciAobmQgPSBuZiA9
IDA7IChjID0gKnMpID49IFVfMCAmJiBjIDw9IFVfOTsgbmQrKywgcysrKQ0KICAgICAgICBpZiAo
bmQgPCA5KQ0KICAgICAgICAgICAgeSA9IDEwICogeSArIGMgLSBVXzA7DQogICAgICAgIGVsc2Ug
aWYgKG5kIDwgMTYpDQogICAgICAgICAgICB6ID0gMTAgKiB6ICsgYyAtIFVfMDsNCiAgICBuZDAg
PSBuZDsNCiAgICBpZiAoYyA9PSBVX0RPVCkNCiAgICB7DQogICAgICAgIC8vDQogICAgICAgIC8v
IHBhcnNlIGFmdGVyICcuJw0KICAgICAgICAvLw0KICAgICAgICBjID0gKisrczsNCiAgICAgICAg
aWYgKCFuZCkNCiAgICAgICAgew0KICAgICAgICAgICAgZm9yICggOyBjID09IFVfMDsgYyA9ICor
K3MpDQogICAgICAgICAgICAgICAgbnorKzsNCiAgICAgICAgICAgIGlmIChjID4gVV8wICYmIGMg
PD0gVV85KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHMwID0gczsNCiAgICAgICAg
ICAgICAgICBuZiArPSBuejsNCiAgICAgICAgICAgICAgICBueiA9IDA7DQogICAgICAgICAgICB9
DQogICAgICAgIH0NCiAgICAgICAgZm9yICggOyBjID49IFVfMCAmJiBjIDw9IFVfOTsgYyA9ICor
K3MpDQogICAgICAgIHsNCiAgICAgICAgICAgIG56Kys7DQogICAgICAgICAgICBpZiAoYyAtPSBV
XzApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgbmYgKz0gbno7DQogICAgICAgICAg
ICAgICAgZm9yIChpID0gMTsgaSA8IG56OyBpKyspDQogICAgICAgICAgICAgICAgICAgIGlmIChu
ZCsrIDwgOSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHkgKj0gMTA7DQogICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKG5kIDw9IDE2KQ0KICAgICAgICAgICAgICAgICAgICAgICAgeiAqPSAx
MDsNCiAgICAgICAgICAgICAgICBpZiAobmQrKyA8IDkpDQogICAgICAgICAgICAgICAgICAgIHkg
PSAxMCAqIHkgKyBjOw0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5kIDw9IDE2KQ0KICAgICAg
ICAgICAgICAgICAgICB6ID0gMTAgKiB6ICsgYzsNCiAgICAgICAgICAgICAgICBueiA9IDA7DQog
ICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgLy8NCiAgICAvLyBjb25zdW1lIGV4
cG9uZW50DQogICAgLy8NCiAgICBlID0gMDsNCiAgICBpZiAoYyA9PSBVX2UgfHwgYyA9PSBVX0Up
IHsNCiAgICAgICAgc3RyID0gczsNCiAgICAgICAgZXNpZ24gPSBmYWxzZTsNCiAgICAgICAgc3dp
dGNoIChjID0gKisrcykNCiAgICAgICAgew0KICAgICAgICBjYXNlIFVfTUlOVVM6DQogICAgICAg
ICAgICBlc2lnbiA9IHRydWU7DQogICAgICAgICAgICAvLyBmYWxsdGhyb3VnaA0KICAgICAgICBj
YXNlIFVfUExVUzoNCiAgICAgICAgICAgIGMgPSAqKytzOw0KICAgICAgICB9DQogICAgICAgIGlm
IChjID49IFVfMCAmJiBjIDw9IFVfOSkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKCFuZCAm
JiAhbnogJiYgIW56MCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAqdGhpcyA9IHNp
Z24gPyBORUdBVElWRV9aRVJPKCkgOiBQT1NJVElWRV9aRVJPKCk7DQogICAgICAgICAgICAgICAg
cmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgd2hpbGUgKGMgPT0gVV8wKQ0KICAg
ICAgICAgICAgICAgIGMgPSAqKytzOw0KICAgICAgICAgICAgaWYgKGMgPiBVXzAgJiYgYyA8PSBV
XzkpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgTCA9IGMgLSBVXzA7DQogICAgICAg
ICAgICAgICAgczEgPSBzOw0KICAgICAgICAgICAgICAgIHdoaWxlICgoYyA9ICorK3MpID49IFVf
MCAmJiBjIDw9IFVfOSkNCiAgICAgICAgICAgICAgICAgICAgTCA9IDEwICogTCArIGMgLSBVXzA7
DQogICAgICAgICAgICAgICAgLy8NCiAgICAgICAgICAgICAgICAvLyBBdm9pZCBjb25mdXNpb24g
ZnJvbSBleHBvbmVudHMgc28gbGFyZ2UgdGhhdCBlIG1pZ2h0DQogICAgICAgICAgICAgICAgLy8g
b3ZlcmZsb3cNCiAgICAgICAgICAgICAgICBpZiAocyAtIHMxID4gOCB8fCBMID4gMTk5OTkpDQog
ICAgICAgICAgICAgICAgICAgIGUgPSAxOTk5OTsgIA0KICAgICAgICAgICAgICAgIGVsc2UNCiAg
ICAgICAgICAgICAgICAgICAgZSA9IEw7DQogICAgICAgICAgICAgICAgaWYgKGVzaWduKQ0KICAg
ICAgICAgICAgICAgICAgICBlID0gLWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNl
DQogICAgICAgICAgICAgICAgZSA9IDA7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAg
ICAgICAgcyA9IHN0cjsNCiAgICB9DQogICAgaWYgKCFuZCkgew0KICAgICAgICAqdGhpcyA9ICgh
bnogJiYgIW56MCkgPyBOYU4oKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzaWdu
ID8gTkVHQVRJVkVfWkVSTygpIDogUE9TSVRJVkVfWkVSTygpOw0KICAgICAgICByZXR1cm47DQog
ICAgfQ0KICAgIC8vDQogICAgLy8gZm9yIGxvbmcgc3RyaW5ncywgcm91bmQgYXdheSBhbGwgZGln
aXRzIGJleW9uZCBtYXhpbXVtIHByZWNpc2Ugc3RyaW5nDQogICAgLy8gZm9yIGZyYWN0aW9uLCB0
aGVyZSBhcmUgbiBkZWNpbWFsIGRpZ2l0cyBhZnRlciAnLicgaWYgbHNiIGlzIDJebjsNCiAgICAv
LyBidXQgdGhlIGZpcnN0IG0gb2YgdGhlc2UgZGlnaXRzIGFyZSAnMCcsIGZvciBkID0geCoxMF5t
DQogICAgLy8gc28sIGRpZ2l0cyBhZnRlciBNQVhfRElHSVRTIG1heSBiZSBpZ25vcmVkDQogICAg
Ly8NCiAgICBpZiAobmQgPiBNQVhfRElHSVRTKQ0KICAgIHsNCiAgICAgICAgayA9IG5kIC0gTUFY
X0RJR0lUUzsNCiAgICAgICAgaSA9IE1BWF9ESUdJVFMgLSBuZDA7DQogICAgICAgIGlmIChpIDw9
IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIGRlY2ltYWwgYWZ0ZXIgbGFzdCBwcmVjaXNl
IGRpZ2l0DQogICAgICAgICAgICBuZDAgPSBNQVhfRElHSVRTOw0KICAgICAgICAgICAgbmYgPSBp
Ow0KICAgICAgICAgICAgaiA9IDA7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiAoaSA9PSBN
QVhfRElHSVRTKQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBkZWNpbWFsIGJlZm9yZSBmaXJz
dCBwcmVjaXNlIGRpZ2l0DQogICAgICAgICAgICBuZiAtPSBrOw0KICAgICAgICAgICAgaiA9IDA7
DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBkZWNp
bWFsIGluc2lkZSBwcmVjaXNlIGRpZ2l0cw0KICAgICAgICAgICAgbmYgLT0gazsNCiAgICAgICAg
ICAgIGogPSAxOw0KICAgICAgICB9DQogICAgICAgIHJvdW5kdXAgPSBzMFtNQVhfRElHSVRTIC0g
MSArIGpdICE9IFVfNDsNCiAgICAgICAgbmQgPSBNQVhfRElHSVRTOw0KICAgIH0NCiAgICBlMSA9
IGUgLT0gbmY7DQoJDQogICAgLy8gDQogICAgLy8gTm93IHdlIGhhdmUgbmQwIGRpZ2l0cywgc3Rh
cnRpbmcgYXQgczAsIGZvbGxvd2VkIGJ5IGENCiAgICAvLyBkZWNpbWFsIHBvaW50LCBmb2xsb3dl
ZCBieSBuZC1uZDAgZGlnaXRzLiAgVGhlIG51bWJlciB3ZSdyZQ0KICAgIC8vIGFmdGVyIGlzIHRo
ZSBpbnRlZ2VyIHJlcHJlc2VudGVkIGJ5IHRob3NlIGRpZ2l0cyB0aW1lcyAxMCoqZQ0KICAgIC8v
DQogICAgaWYgKCEgbmQwKQ0KICAgICAgICBuZDAgPSBuZDsNCiAgICBrID0gbmQgPCAxNiA/IG5k
IDogMTY7DQogICAgKnRoaXMgPSBJRUVFZG91YmxlKHkpOw0KICAgIGlmIChrID4gOSkNCiAgICAg
ICAgKnRoaXMgPSAqdGhpcyAqIHRlbnNbayAtIDldICsgejsNCiAgICBpZiAobmQgPCAxNikNCiAg
ICB7DQogICAgICAgIGlmICghZSkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHNpZ24pDQog
ICAgICAgICAgICAgICAgKnRoaXMgPSAtKnRoaXM7DQogICAgICAgICAgICByZXR1cm47DQogICAg
ICAgIH0NCiAgICAgICAgaWYgKGUgPiAwKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoZSA8
PSAyMikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAqdGhpcyAqPSB0ZW5zW2VdOw0K
ICAgICAgICAgICAgICAgIGlmIChzaWduKQ0KICAgICAgICAgICAgICAgICAgICAqdGhpcyA9IC0q
dGhpczsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAg
ICBpID0gMTUgLSBuZDsNCiAgICAgICAgICAgIGlmIChlIDw9IDIyICsgaSkNCiAgICAgICAgICAg
IHsNCiAgICAgICAgICAgICAgICBlIC09IGk7DQogICAgICAgICAgICAgICAgKnRoaXMgKj0gdGVu
c1tpXTsNCiAgICAgICAgICAgICAgICAqdGhpcyAqPSB0ZW5zW2VdOw0KICAgICAgICAgICAgICAg
IGlmIChzaWduKQ0KICAgICAgICAgICAgICAgICAgICAqdGhpcyA9IC0qdGhpczsNCiAgICAgICAg
ICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBp
ZiAoZSA+PSAtMjIgKQ0KICAgICAgICB7DQogICAgICAgICAgICAqdGhpcyAvPSB0ZW5zWy1lXTsN
CiAgICAgICAgICAgIGlmIChzaWduKQ0KICAgICAgICAgICAgICAgICp0aGlzID0gLSp0aGlzOw0K
ICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgfQ0KICAgIGUxICs9IG5kIC0gazsN
CgkNCiAgICAvLyANCiAgICAvLyBHZXQgc3RhcnRpbmcgYXBwcm94aW1hdGlvbjogKnRoaXMgKiAx
MCoqZTENCiAgICAvLw0KICAgIGlmIChlMSA+IDApDQogICAgew0KICAgICAgICBpID0gZTEgJiAw
eGY7DQogICAgICAgIGlmIChpKQ0KICAgICAgICAgICAgKnRoaXMgKj0gdGVuc1tpXTsNCiAgICAg
ICAgaWYgKGUxID4+PSA0KQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoZTEgPiBNQVhfREVD
X0VYUCA+PiA0KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICp0aGlzID0gY2hlY2tf
aW52YWxpZCA/IE5hTigpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
c2lnbiA/IE5FR0FUSVZFX0lORklOSVRZKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogUE9TSVRJVkVfSU5GSU5JVFkoKTsNCiAgICAgICAgICAgICAgICBy
ZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmb3IgKGogPSAwOyBlMSA+IDE7IGor
KywgZTEgPj49IDEpDQogICAgICAgICAgICAgICAgaWYgKGUxICYgMSkNCiAgICAgICAgICAgICAg
ICAgICAgKnRoaXMgKj0gYmlndGVuc1tqXTsNCiAgICAgICAgICAgIC8vDQogICAgICAgICAgICAv
LyBUaGUgbGFzdCBtdWx0aXBsaWNhdGlvbiBjb3VsZCBvdmVyZmxvdy4NCiAgICAgICAgICAgIC8v
DQogICAgICAgICAgICBzZXRIaWdoV29yZChIaWdoV29yZCgpIC0gKEZSQUNUX1NJWkUgKyAxKSAq
IE1JTl9GUkFDVCk7DQogICAgICAgICAgICAqdGhpcyAqPSBiaWd0ZW5zW2pdOw0KICAgICAgICAg
ICAgeiA9IEV4cG9uZW50KCk7DQogICAgICAgICAgICBpZiAoeiA+IEJJQVMgLSBGUkFDVF9TSVpF
KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICp0aGlzID0gY2hlY2tfaW52YWxpZCA/
IE5hTigpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2lnbiA/IE5F
R0FUSVZFX0lORklOSVRZKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogUE9TSVRJVkVfSU5GSU5JVFkoKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQog
ICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoeiA+IEJJQVMgLSBGUkFDVF9TSVpFIC0gMSkN
CiAgICAgICAgICAgICAgICBzZXRIaWdoQW5kTG93V29yZHMoUE9TX0lORl9ISSAtIDEsIFpFUk9f
TE8gLSAxKTsNCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICBzZXRIaWdoV29yZChI
aWdoV29yZCgpICsgKEZSQUNUX1NJWkUgKyAxKSAqIE1JTl9GUkFDVCk7DQogICAgICAgIH0NCiAg
ICB9DQogICAgZWxzZSBpZiAoZTEgPCAwKQ0KICAgIHsNCiAgICAgICAgZTEgPSAtZTE7DQogICAg
ICAgIGkgPSBlMSAmIDB4ZjsNCiAgICAgICAgaWYgKGkpDQogICAgICAgICAgICAqdGhpcyAvPSB0
ZW5zW2ldOw0KICAgICAgICBpZiAoZTEgPj49IDQpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlm
IChlMSA+PSAxIDw8IDUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgKnRoaXMgPSBj
aGVja19pbnZhbGlkID8gTmFOKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBzaWduID8gTkVHQVRJVkVfWkVSTygpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IFBPU0lUSVZFX1pFUk8oKTsNCiAgICAgICAgICAgICAgICByZXR1
cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmb3IgKGogPSAwOyBlMSA+IDE7IGorKywg
ZTEgPj49IDEpDQogICAgICAgICAgICAgICAgaWYgKGUxICYgMSkNCiAgICAgICAgICAgICAgICAg
ICAgKnRoaXMgLz0gYmlndGVuc1tqXTsNCiAgICAgICAgICAgIC8vDQogICAgICAgICAgICAvLyBU
aGUgbGFzdCBtdWx0aXBsaWNhdGlvbiBjb3VsZCB1bmRlcmZsb3cuDQogICAgICAgICAgICAvLwkJ
CSANCiAgICAgICAgICAgIElFRUVkb3VibGUgdG1wKCp0aGlzKTsNCiAgICAgICAgICAgICp0aGlz
IC89IGJpZ3RlbnNbal07DQogICAgICAgICAgICBpZiAoSXNaZXJvKCkpDQogICAgICAgICAgICB7
DQogICAgICAgICAgICAgICAgKnRoaXMgPSB0bXAgKiAyOw0KICAgICAgICAgICAgICAgICp0aGlz
IC89IGJpZ3RlbnNbal07DQogICAgICAgICAgICAgICAgaWYgKElzWmVybygpKQ0KICAgICAgICAg
ICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSBjaGVja19pbnZhbGlkID8gTmFO
KCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2lnbiA/IE5F
R0FUSVZFX1pFUk8oKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogUE9TSVRJVkVfWkVSTygpOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm47DQog
ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHNldEhpZ2hBbmRMb3dXb3JkcygwLCAx
KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vCSANCiAgICAvLyBO
b3cgdGhlIGhhcmQgcGFydCAtLSBhZGp1c3RpbmcgKnRoaXMgdG8gdGhlIGNvcnJlY3QgdmFsdWUu
DQogICAgLy8gUHV0IGRpZ2l0cyBpbnRvIGJkOiB0cnVlIHZhbHVlID0gYmQgKiAxMF5lDQogICAg
Ly8gDQogICAgQmlnSW50IGJkMChzMCwgbmQwLCBuZCwgeSwgOSk7DQogICAgaWYgKHJvdW5kdXAp
DQogICAgICAgICsrYmQwOw0KICAgIHdoaWxlICh0cnVlKSB7DQogICAgICAgIEJpZ0ludCBiZChi
ZDApOw0KICAgICAgICBCaWdJbnQgYmIoKnRoaXMsIGJiZSwgYmJiaXRzKTsgLy8gKnRoaXMgPSBi
YiAqIDJeYmJlDQogICAgICAgIEJpZ0ludCBicygxKTsNCiAgICAgICAgaWYgKGUgPj0gMCkNCiAg
ICAgICAgew0KICAgICAgICAgICAgYmIyID0gYmI1ID0gMDsNCiAgICAgICAgICAgIGJkMiA9IGJk
NSA9IGU7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBi
YjIgPSBiYjUgPSAtZTsNCiAgICAgICAgICAgIGJkMiA9IGJkNSA9IDA7DQogICAgICAgIH0NCiAg
ICAgICAgaWYgKGJiZSA+PSAwKQ0KICAgICAgICAgICAgYmIyICs9IGJiZTsNCiAgICAgICAgZWxz
ZQ0KICAgICAgICAgICAgYmQyIC09IGJiZTsNCiAgICAgICAgYnMyID0gYmIyOw0KICAgICAgICBq
ID0gYmJlOw0KICAgICAgICBpID0gaiArIGJiYml0cyAtIDE7IC8vIGxvZ2IoKnRoaXMpDQogICAg
ICAgIGlmIChpIDwgMSAtIEJJQVMpIC8vIGRlbm9ybWFsDQogICAgICAgICAgICBqICs9IEJJQVMg
KyBGUkFDVF9TSVpFOw0KICAgICAgICBlbHNlDQogICAgICAgICAgICBqID0gRlJBQ1RfU0laRSAr
IDIgLSBiYmJpdHM7DQogICAgICAgIGJiMiArPSBqOw0KICAgICAgICBiZDIgKz0gajsNCiAgICAg
ICAgaSA9IGJiMiA8IGJkMiA/IGJiMiA6IGJkMjsNCiAgICAgICAgaWYgKGkgPiBiczIpDQogICAg
ICAgICAgICBpID0gYnMyOw0KICAgICAgICBpZiAoaSA+IDApDQogICAgICAgIHsNCiAgICAgICAg
ICAgIGJiMiAtPSBpOw0KICAgICAgICAgICAgYmQyIC09IGk7DQogICAgICAgICAgICBiczIgLT0g
aTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoYmI1ID4gMCkgew0KICAgICAgICAgICAgYnMucG93
NW11bHQoYmI1KTsNCiAgICAgICAgICAgIGJiICo9IGJzOw0KICAgICAgICB9DQogICAgICAgIGlm
IChiYjIgPiAwKQ0KICAgICAgICAgICAgYmIgPDw9IGJiMjsNCiAgICAgICAgaWYgKGJkNSA+IDAp
DQogICAgICAgICAgICBiZC5wb3c1bXVsdChiZDUpOw0KICAgICAgICBpZiAoYmQyID4gMCkNCiAg
ICAgICAgICAgIGJkIDw8PSBiZDI7DQogICAgICAgIGlmIChiczIgPiAwKQ0KICAgICAgICAgICAg
YnMgPDw9IGJzMjsNCiAgICAgICAgQmlnSW50IGRlbHRhID0gYmIgLSBiZDsNCiAgICAgICAgZHNp
Z24gPSBkZWx0YS5Jc05lZ2F0aXZlKCk7DQogICAgICAgIGlmIChkc2lnbikNCiAgICAgICAgICAg
IGRlbHRhLklzTmVnYXRpdmUoZmFsc2UpOw0KICAgICAgICBpID0gZGVsdGEuY29tcGFyZVRvKGJz
KTsNCiAgICAgICAgLy8NCiAgICAgICAgLy8gRXJyb3IgaXMgbGVzcyB0aGFuIGhhbGYgYW4gdWxw
IC0tIGNoZWNrIGZvcg0KICAgICAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgbWFudGlzc2EgYSBwb3dl
ciBvZiB0d28uDQogICAgICAgIC8vDQogICAgICAgIGlmIChpIDwgMCkNCiAgICAgICAgew0KICAg
ICAgICAgICAgaWYgKGRzaWduIHx8IExvd1dvcmQoKSB8fCBGcmFjdEJpdHMoKQ0KICAgICAgICAg
ICAgICAgIHx8IEV4cG9uZW50KCkgPD0gMSAtIEJJQVMgfHwgZGVsdGEuSXNaZXJvKCkpDQogICAg
ICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBkZWx0YSA8PD0gMTsNCiAgICAgICAgICAg
IGlmIChkZWx0YS5jb21wYXJlVG8oYnMpID4gMCkNCgkJLy8gYm91bmRhcnkgY2FzZSAtLSBkZWNy
ZW1lbnQgZXhwb25lbnQNCiAgICAgICAgICAgICAgICBCYXNlTG9uZzo6b3BlcmF0b3IgLS0oKTsN
CiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgICAgIC8vDQogICAgICAgIC8vIGV4
YWN0bHkgaGFsZi13YXkgYmV0d2Vlbg0KICAgICAgICAvLw0KICAgICAgICBlbHNlIGlmIChpID09
IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmIChMb3dXb3JkKCkgJiAxKQ0KICAgICAgICAg
ICAgICAgIEJhc2VMb25nOjpvcGVyYXRvciArPShkc2lnbiA/IDEgOiAtMSk7DQogICAgICAgICAg
ICBicmVhazsNCiAgICAgICAgfQ0KICAgICAgICAvLw0KICAgICAgICAvLyBtb3JlIHRoYW4gMS8y
IHVscCBvZmYgLSB0cnkgYWdhaW4NCiAgICAgICAgLy8NCiAgICAgICAgYWFkaiA9IFJhdGlvKGRl
bHRhLCBicyk7DQogICAgICAgIGlmIChhYWRqIDw9IDIpDQogICAgICAgIHsNCiAgICAgICAgICAg
IGlmIChkc2lnbikNCiAgICAgICAgICAgICAgICBhYWRqID0gYWFkajEgPSAxOw0KICAgICAgICAg
ICAgZWxzZSBpZiAoRnJhY3RCaXRzKCkgfHwgTG93V29yZCgpKQ0KICAgICAgICAgICAgew0KICAg
ICAgICAgICAgICAgIGlmICghSGlnaFdvcmQoKSAmJiBMb3dXb3JkKCkgPT0gMSkNCiAgICAgICAg
ICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIC8vIHVuZGVyZmxvdw0KICAgICAgICAgICAg
ICAgICAgICAqdGhpcyA9IFBPU0lUSVZFX1pFUk8oKTsNCiAgICAgICAgICAgICAgICAgICAgYnJl
YWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGFhZGogPSAxOw0KICAgICAg
ICAgICAgICAgIGFhZGoxID0gLTE7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQog
ICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgLy8NCiAgICAgICAgICAgICAgICAvLyBzcGVj
aWFsIGNhc2UgLSBtYW50aXNzYSBpcyBwb3dlciBvZiAyDQogICAgICAgICAgICAgICAgLy8JCQkJ
IA0KICAgICAgICAgICAgICAgIGlmIChhYWRqIDwgMS4wKQ0KICAgICAgICAgICAgICAgICAgICBh
YWRqID0gMC41Ow0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgYWFk
aiAqPSAwLjU7DQogICAgICAgICAgICAgICAgYWFkajEgPSAtYWFkajsNCiAgICAgICAgICAgIH0N
CiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIGFhZGogKj0g
MC41Ow0KICAgICAgICAgICAgLy8NCiAgICAgICAgICAgIC8vIGdjYyAyLjk1LjIgaGFzIGFuIElD
RSBmcm9tIHRvbyBtYW55IHJlZ2lzdGVycyB3aXRoIHRoaXMgbGluZToNCiAgICAgICAgICAgIC8v
ICAgICAgICAgICAgYWFkajEgPSBkc2lnbiA/IGFhZGogOiAtYWFkajsNCiAgICAgICAgICAgIC8v
DQogICAgICAgICAgICBpZiAoZHNpZ24pDQogICAgICAgICAgICAgICAgYWFkajEgPSBhYWRqOw0K
ICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIGFhZGoxID0gLWFhZGo7DQogICAgICAg
IH0NCiAgICAgICAgeSA9IEV4cG9uZW50KCk7DQogICAgICAgIC8vDQogICAgICAgIC8vIENoZWNr
IGZvciBvdmVyZmxvdw0KICAgICAgICAvLw0KICAgICAgICBpZiAoeSA9PSBCSUFTKQ0KICAgICAg
ICB7DQogICAgICAgICAgICBJRUVFZG91YmxlIHRtcCgqdGhpcyk7DQogICAgICAgICAgICBzZXRI
aWdoV29yZChIaWdoV29yZCgpIC0gKEZSQUNUX1NJWkUgKyAxKSAqIE1JTl9GUkFDVCk7DQogICAg
ICAgICAgICAqdGhpcyArPSBhYWRqMSAqIFVscCgpOw0KICAgICAgICAgICAgaWYgKEV4cG9uZW50
KCkgPj0gQklBUyAtIEZSQUNUX1NJWkUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAg
aWYgKHRtcC5IaWdoV29yZCgpID09IFBPU19JTkZfSEkgLSAxICYmIHRtcC5Mb3dXb3JkKCkgPT0g
WkVST19MTyAtIDEpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAvLyBv
dmVyZmxvdw0KICAgICAgICAgICAgICAgICAgICAqdGhpcyA9IFBPU0lUSVZFX0lORklOSVRZKCk7
DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg
ICAgICAgICBzZXRIaWdoQW5kTG93V29yZHMoUE9TX0lORl9ISSAtIDEsIFpFUk9fTE8gLSAxKTsN
CiAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVs
c2UNCiAgICAgICAgICAgICAgICBzZXRIaWdoV29yZChIaWdoV29yZCgpICsgKEZSQUNUX1NJWkUg
KyAxKSAqIE1JTl9GUkFDVCk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQog
ICAgICAgICAgICAvLw0KICAgICAgICAgICAgLy8gQ29tcHV0ZSBhZGogc28gdGhhdCB0aGUgSUVF
RSByb3VuZGluZyBydWxlcyB3aWxsDQogICAgICAgICAgICAvLyBjb3JyZWN0bHkgcm91bmQgKnRo
aXMgKyBhZGogaW4gc29tZSBoYWxmLXdheSBjYXNlcy4NCiAgICAgICAgICAgIC8vIElmICp0aGlz
ICogVWxwKCkgaXMgZGVub3JtYWxpemVkLCB3ZSBtdXN0IGFkanVzdCBhYWRqDQogICAgICAgICAg
ICAvLyB0byBhdm9pZCB0cm91YmxlIGZyb20gYml0cyBsb3N0IHRvIGRlbm9ybWFsaXphdGlvbi4N
CiAgICAgICAgICAgIC8vDQogICAgICAgICAgICBpZiAoeSA8PSBGUkFDVF9TSVpFIC0gQklBUyB8
fCBhYWRqID4gMSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBhYWRqMSA9IElFRUVk
b3VibGUoKGFhZGogKyAwLjUpLkludFZhbHVlKCkpOw0KICAgICAgICAgICAgICAgIGlmICghIGRz
aWduKQ0KICAgICAgICAgICAgICAgICAgICBhYWRqMSA9IC1hYWRqMTsNCiAgICAgICAgICAgIH0N
CiAgICAgICAgICAgICp0aGlzICs9IGFhZGoxICogVWxwKCk7DQogICAgICAgIH0NCiAgICAgICAg
aWYgKHkgPT0gRXhwb25lbnQoKSkNCiAgICAgICAgew0KICAgICAgICAgICAgLy8NCiAgICAgICAg
ICAgIC8vIENhbiB3ZSBzdG9wIG5vdz8NCiAgICAgICAgICAgIC8vIFRoZSB0b2xlcmFuY2VzIGJl
bG93IGFyZSBjb25zZXJ2YXRpdmUuDQogICAgICAgICAgICAvLw0KICAgICAgICAgICAgYWFkaiAt
PSBhYWRqLkludFZhbHVlKCk7DQogICAgICAgICAgICBpZiAoZHNpZ24gfHwgRnJhY3RCaXRzKCkg
fHwgTG93V29yZCgpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmIChhYWRqIDwg
LjQ5OTk5OTkgfHwgYWFkaiA+IC41MDAwMDAxKQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsN
CiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UgaWYgKGFhZGogPCAuNDk5OTk5OSAvIDIp
DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKGNoZWNr
X2ludmFsaWQgJiYgKElzWmVybygpIHx8IElzSW5maW5pdGUoKSkpDQogICAgICAgICp0aGlzID0g
TmFOKCk7DQogICAgZWxzZSBpZiAoc2lnbikNCiAgICAgICAgKnRoaXMgPSAtKnRoaXM7DQp9DQoN
Cmk0IElFRUVkb3VibGU6OkludFZhbHVlKCkgY29uc3QNCnsNCiAgICBpZiAoSXNOYU4oKSkNCiAg
ICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgDQojaWZkZWYgSEFWRV9JRUVFNzU0DQog
ICAgaWYgKHZhbHVlLmRvdWJsZV92YWx1ZSA8IChkb3VibGUpKGk0KSBNSU5fSU5UKQ0KICAgICAg
ICByZXR1cm4gTUlOX0lOVDsNCiAgICBlbHNlIGlmICh2YWx1ZS5kb3VibGVfdmFsdWUgPiAoZG91
YmxlKSBNQVhfSU5UKQ0KICAgICAgICByZXR1cm4gTUFYX0lOVDsNCiAgICByZXR1cm4gKGk0KSB2
YWx1ZS5kb3VibGVfdmFsdWU7DQojZWxzZQ0KICAgIGludAlzaWduID0gU2lnbigpLA0KICAgICAg
ICBleHBvbmVudCA9IEV4cG9uZW50KCk7DQoNCiAgICBpZiAoSXNJbmZpbml0ZSgpIHx8IGV4cG9u
ZW50ID4gMzApDQogICAgICAgIHJldHVybiBzaWduID8gTUlOX0lOVCA6IE1BWF9JTlQ7DQoNCiAg
ICAvLyBUaGlzIGluY2x1ZGVzIHRydWUgemVybyBhbmQgZGVub3Jtcy4NCiAgICBpZiAoZXhwb25l
bnQgPCAwKQ0KICAgICAgICByZXR1cm4gMDsNCg0KICAgIGk0IHJlc3VsdCA9IChpNCkgKEZyYWN0
aW9uKCkgPj4gKEZSQUNUX1NJWkUgLSBleHBvbmVudCkpLkxvd1dvcmQoKTsNCg0KICAgIHJldHVy
biBzaWduID8gLXJlc3VsdCA6IHJlc3VsdDsNCiNlbmRpZiAvLyBIQVZFX0lFRUU3NTQNCn0NCg0K
TG9uZ0ludCBJRUVFZG91YmxlOjpMb25nVmFsdWUoKSBjb25zdA0Kew0KICAgIGlmIChJc05hTigp
KQ0KICAgICAgICByZXR1cm4gTG9uZ0ludCgwKTsNCiAgICAgICAgICAgIA0KICAgIGludAlzaWdu
ID0gU2lnbigpLA0KICAgICAgICBleHBvbmVudCA9IEV4cG9uZW50KCk7DQoNCiAgICBpZiAoSXNJ
bmZpbml0ZSgpIHx8IGV4cG9uZW50ID4gNjIpDQogICAgICAgIHJldHVybiBzaWduID8gTG9uZ0lu
dDo6TUlOX0xPTkcoKSA6IExvbmdJbnQ6Ok1BWF9MT05HKCk7DQoNCiAgICAvLyBUaGlzIGNvdmVy
cyB0cnVlIHplcm8gYW5kIGRlbm9ybXMuDQogICAgaWYgKGV4cG9uZW50IDwgMCkNCiAgICAgICAg
cmV0dXJuIExvbmdJbnQoMCk7DQoNCiAgICBMb25nSW50IHJlc3VsdCA9IEZyYWN0aW9uKCk7DQoN
CiAgICBpZiAoZXhwb25lbnQgPiAoaW50KSBGUkFDVF9TSVpFKQ0KCXJlc3VsdCA8PD0gKGV4cG9u
ZW50IC0gRlJBQ1RfU0laRSk7DQogICAgZWxzZSBpZiAoZXhwb25lbnQgPCAoaW50KSBGUkFDVF9T
SVpFKQ0KCXJlc3VsdCA+Pj0gKEZSQUNUX1NJWkUgLSBleHBvbmVudCk7DQoNCiAgICByZXR1cm4g
c2lnbiA/IChMb25nSW50KSAtcmVzdWx0IDogcmVzdWx0Ow0KfQ0KDQpJRUVFZG91YmxlIElFRUVk
b3VibGU6Ok5vcm1hbGl6ZShpbnQgc2lnbiwgaW50IGV4cG9uZW50LCBVTG9uZ0ludCBmcmFjdGlv
bikNCnsNCiAgICBib29sIHJvdW5kID0gZmFsc2UsIHN0aWNreSA9IGZhbHNlOw0KDQogICAgYXNz
ZXJ0KGZyYWN0aW9uICE9IDApOw0KDQogICAgLy8NCiAgICAvLyBOb3JtYWxpemUgcmlnaHQuIFNo
aWZ0IHVudGlsIHZhbHVlIDwgTUFYX0ZSQUNULg0KICAgIC8vDQogICAgaWYgKGZyYWN0aW9uLkhp
Z2hXb3JkKCkgPj0gTUFYX0ZSQUNUKQ0KICAgIHsNCgl3aGlsZSAoZnJhY3Rpb24uSGlnaFdvcmQo
KSA+PSBNQVhfRlJBQ1QpDQoJew0KCSAgICBzdGlja3kgfD0gcm91bmQ7DQoJICAgIHJvdW5kID0g
KGZyYWN0aW9uLkxvd1dvcmQoKSAmIDEpICE9IDA7DQoJICAgIGZyYWN0aW9uID4+PSAxOw0KCSAg
ICBleHBvbmVudCsrOw0KCX0NCglpZiAocm91bmQgJiYgKHN0aWNreSB8fCAoZnJhY3Rpb24uTG93
V29yZCgpICYgMSkpICYmIGV4cG9uZW50ID4gLShpbnQpIEJJQVMpDQogICAgICAgICAgICAvLw0K
ICAgICAgICAgICAgLy8gQ2FwdHVyZSBhbnkgb3ZlcmZsb3cgY2F1c2VkIGJ5IHJvdW5kaW5nLiBO
byBvdGhlciBjaGVja3MgYXJlDQogICAgICAgICAgICAvLyByZXF1aXJlZCBiZWNhdXNlIGlmIG92
ZXJmbG93IG9jY3VycmVkLCB0aGUgdGhlIGxvdyBvcmRlciBiaXQNCiAgICAgICAgICAgIC8vIHdh
cyBndWFyYW50ZWVkIHRvIGJlIHplcm8uIERvIG5vdCByb3VuZCBkZW5vcm1zIHlldC4NCiAgICAg
ICAgICAgIC8vDQoJICAgIGlmICgoKytmcmFjdGlvbikuSGlnaFdvcmQoKSA+PSBNQVhfRlJBQ1Qp
DQoJICAgIHsNCgkJZnJhY3Rpb24gPj49IDE7DQoJCWV4cG9uZW50Kys7DQoJICAgIH0NCiAgICB9
DQoNCiAgICAvLw0KICAgIC8vIE5vcm1hbGl6ZSBsZWZ0LiBTaGlmdCB1bnRpbCB2YWx1ZSA+PSBN
SU5fRlJBQ1QuDQogICAgLy8NCiAgICBlbHNlDQoJd2hpbGUgKGZyYWN0aW9uLkhpZ2hXb3JkKCkg
PCBNSU5fRlJBQ1QpDQoJew0KCSAgICBmcmFjdGlvbiA8PD0gMTsNCgkgICAgZXhwb25lbnQtLTsN
Cgl9DQoNCiAgICAvLw0KICAgIC8vIENoZWNrIGFuZCByZXNwb25kIHRvIG92ZXJmbG93DQogICAg
Ly8NCiAgICBpZiAoZXhwb25lbnQgPiAoaW50KSBCSUFTKQ0KICAgICAgICByZXR1cm4gc2lnbiA/
IE5FR0FUSVZFX0lORklOSVRZKCkgOiBQT1NJVElWRV9JTkZJTklUWSgpOw0KDQogICAgLy8NCiAg
ICAvLyBDaGVjayBhbmQgcmVzcG9uZCB0byB1bmRlcmZsb3cgDQogICAgLy8NCiAgICBpZiAoZXhw
b25lbnQgPD0gLShpbnQpIEJJQVMpDQogICAgew0KCXdoaWxlIChleHBvbmVudCA8PSAtKGludCkg
QklBUykNCgl7DQoJICAgIHN0aWNreSB8PSByb3VuZDsNCgkgICAgcm91bmQgPSAoZnJhY3Rpb24u
TG93V29yZCgpICYgMSkgIT0gMDsNCgkgICAgZnJhY3Rpb24gPj49IDE7DQoJICAgIGV4cG9uZW50
Kys7DQoJfQ0KDQoJaWYgKHJvdW5kICYmIChzdGlja3kgfHwgKGZyYWN0aW9uLkxvd1dvcmQoKSAm
IDEpKSkNCgkgICAgZnJhY3Rpb24rKzsNCg0KCWV4cG9uZW50ID0gLShpbnQpIEJJQVM7DQoNCglp
ZiAoZnJhY3Rpb24gPT0gMCkNCiAgICAgICAgICAgIHJldHVybiBzaWduID8gTkVHQVRJVkVfWkVS
TygpIDogUE9TSVRJVkVfWkVSTygpOw0KICAgIH0NCg0KICAgIHJldHVybiBJRUVFZG91YmxlKChz
aWduIDw8IDMxKSB8ICgoZXhwb25lbnQgKyBCSUFTKSA8PCBGUkFDVF9TSVpFX0hJKQ0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChmcmFjdGlvbi5IaWdoV29yZCgpICYgRlJB
Q1RfQklUUyksDQogICAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb24uTG93V29yZCgpKTsNCn0N
Cg0KaW50IElFRUVkb3VibGU6OlNwbGl0SW50byhCYXNlTG9uZyAmZnJhY3Rpb24pIGNvbnN0DQp7
DQogICAgaW50IGV4cG9uZW50ID0gRXhwb25lbnQoKTsNCiAgICBmcmFjdGlvbiA9IEZyYWN0aW9u
KCk7DQoNCiAgICBpZiAoZXhwb25lbnQgPT0gLShpbnQpIEJJQVMpDQogICAgew0KCWV4cG9uZW50
Kys7DQoJd2hpbGUgKGZyYWN0aW9uLkhpZ2hXb3JkKCkgPCBNSU5fRlJBQ1QpDQoJew0KCSAgICBm
cmFjdGlvbiA8PD0gMTsNCgkgICAgZXhwb25lbnQtLTsNCgl9DQogICAgfQ0KDQogICAgcmV0dXJu
IGV4cG9uZW50Ow0KfQ0KDQpJRUVFZG91YmxlIElFRUVkb3VibGU6OlVscCgpIGNvbnN0DQp7DQog
ICAgaTQgTDsNCiAgICBJRUVFZG91YmxlIGQ7DQogICAgZC52YWx1ZS5kb3VibGVfdmFsdWUgPSB2
YWx1ZS5kb3VibGVfdmFsdWU7DQogICAgDQogICAgTCA9IChpNCkgZC5FeHBCaXRzKCkgLSBGUkFD
VF9TSVpFICogTUlOX0ZSQUNUOw0KICAgIGlmIChMID4gMCkNCiAgICAgICAgZC5zZXRIaWdoQW5k
TG93V29yZHMoKHU0KSBMLCAwKTsNCiAgICBlbHNlDQogICAgew0KICAgICAgICBMID0gLUwgPj4g
RlJBQ1RfU0laRV9ISTsNCiAgICAgICAgaWYgKEwgPCAoaTQpIEZSQUNUX1NJWkVfSEkpDQogICAg
ICAgICAgICBkLnNldEhpZ2hBbmRMb3dXb3JkcyhNSU5fRlJBQ1QgPj4gKEwgKyAxKSwgMCk7DQog
ICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgTCAtPSBGUkFDVF9TSVpFX0hJOw0K
ICAgICAgICAgICAgZC5zZXRIaWdoQW5kTG93V29yZHMoMCwgTCA+PSAzMSA/IDEgOiAxIDw8IDMx
IC0gTCk7DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuIGQ7DQp9DQoNCklFRUVkb3VibGUg
SUVFRWRvdWJsZTo6UmF0aW8oY29uc3QgQmlnSW50ICZhLCBjb25zdCBCaWdJbnQgJmIpDQp7DQog
ICAgSUVFRWRvdWJsZSBkYSwgZGI7DQogICAgaW50IGs7DQogICAgZGEgPSBhLkRvdWJsZVZhbHVl
KCk7DQogICAgZGIgPSBiLkRvdWJsZVZhbHVlKCk7DQogICAgayA9IGIuaGkwYml0cygpIC0gYS5o
aTBiaXRzKCkgKyAzMiAqIChhLndkcyAtIGIud2RzKTsNCiAgICBpZiAoayA+IDApDQogICAgICAg
IGRhLnNldEhpZ2hXb3JkKGRhLkhpZ2hXb3JkKCkgKyBrICogTUlOX0ZSQUNUKTsNCiAgICBlbHNl
DQogICAgICAgIGRiLnNldEhpZ2hXb3JkKGRiLkhpZ2hXb3JkKCkgLSBrICogTUlOX0ZSQUNUKTsN
CiAgICByZXR1cm4gZGEgLyBkYjsNCn0NCg0KYm9vbCBJRUVFZG91YmxlOjpvcGVyYXRvcj09IChj
b25zdCBJRUVFZG91YmxlIG9wKSBjb25zdA0Kew0KICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJl
IHNwZWQgdXAgYnkgaW5saW5pbmcNCiNpZmRlZiBIQVZFX0lFRUU3NTQNCiAgICAvLyBUT0RPOiBN
aWNyb3NvZnQgVkMrKyBib3RjaGVzIHRoaXMsIG1peGluZyAxMi4wIGFuZCBOYU4NCiAgICByZXR1
cm4gdmFsdWUuZG91YmxlX3ZhbHVlID09IG9wLnZhbHVlLmRvdWJsZV92YWx1ZTsNCiNlbHNlDQog
ICAgcmV0dXJuIElzTmFOKCkgfHwgb3AuSXNOYU4oKSA/IGZhbHNlDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IElzWmVybygpICYmIG9wLklzWmVybygpID8gdHJ1ZQ0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChC
YXNlTG9uZykgKnRoaXMgPT0gKEJhc2VMb25nKSBvcDsNCiNlbmRpZg0KfQ0KDQpib29sIElFRUVk
b3VibGU6Om9wZXJhdG9yIT0gKGNvbnN0IElFRUVkb3VibGUgb3ApIGNvbnN0DQp7DQogICAgLy8g
RklYTUU6IFRoaXMgY291bGQgYmUgc3BlZCB1cCBieSBpbmxpbmluZw0KI2lmZGVmIEhBVkVfSUVF
RTc1NA0KICAgIHJldHVybiB2YWx1ZS5kb3VibGVfdmFsdWUgIT0gb3AudmFsdWUuZG91YmxlX3Zh
bHVlOw0KI2Vsc2UNCiAgICByZXR1cm4gISgqdGhpcyA9PSBvcCk7DQojZW5kaWYNCn0NCg0KSUVF
RWRvdWJsZSBJRUVFZG91YmxlOjpvcGVyYXRvcisgKGNvbnN0IElFRUVkb3VibGUgb3ApIGNvbnN0
DQp7DQojaWZkZWYgSEFWRV9JRUVFNzU0DQogICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgc3Bl
ZCB1cCBieSBpbmxpbmluZw0KICAgIHJldHVybiBJRUVFZG91YmxlKHZhbHVlLmRvdWJsZV92YWx1
ZSArIG9wLnZhbHVlLmRvdWJsZV92YWx1ZSk7DQojZWxzZQ0KICAgIGlmIChJc05hTigpIHx8IG9w
LklzTmFOKCkpDQogICAgICAgIHJldHVybiBOYU4oKTsgLy8gYXJpdGhtZXRpYyBvbiBOYU5zIG5v
dCBhbGxvd2VkDQoNCiAgICAvLw0KICAgIC8vIEFkZGluZyB1bmxpa2UgaW5maW5pdGllcyBub3Qg
YWxsb3dlZA0KICAgIC8vIEFkZGluZyBpbmZpbml0aWVzIG9mIHNhbWUgc2lnbiBpcyBpbmZpbml0
eSBvZiB0aGF0IHNpZ24NCiAgICAvLyBBZGRpbmcgZmluaXRlIGFuZCBpbmZpbml0eSBwcm9kdWNl
cyBpbmZpbml0eQ0KICAgIC8vDQogICAgaWYgKElzSW5maW5pdGUoKSkNCiAgICAgICAgcmV0dXJu
IG9wLklzSW5maW5pdGUoKSAmJiAoU2lnbigpICE9IG9wLlNpZ24oKSkgPyBOYU4oKSA6ICp0aGlz
Ow0KICAgIGlmIChvcC5Jc0luZmluaXRlKCkpDQogICAgICAgIHJldHVybiBvcDsNCg0KICAgIC8v
DQogICAgLy8gQWRkaW5nIHplcm8gaXMgZWFzeQ0KICAgIC8vDQogICAgaWYgKElzWmVybygpKQ0K
ICAgICAgICByZXR1cm4gKG9wLklzWmVybygpKSA/IChTaWduKCkgIT0gb3AuU2lnbigpKSA/IFBP
U0lUSVZFX1pFUk8oKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6ICp0aGlzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogb3A7DQog
ICAgaWYgKG9wLklzWmVybygpKQ0KICAgICAgICByZXR1cm4gKnRoaXM7DQoNCiAgICAvLw0KICAg
IC8vIE5vdyBmb3IgdGhlIHJlYWwgd29yayAtIGRvIG1hbmlwdWxhdGlvbnMgb24gY29waWVzDQog
ICAgLy8NCiAgICBMb25nSW50IHgsIHksIHJvdW5kID0gMDsNCiAgICBpbnQgZXhweCwgZXhweSwg
c2lnbngsIHNpZ255Ow0KICAgIA0KICAgIGV4cHggPSBTcGxpdEludG8oeCk7DQogICAgZXhweSA9
IG9wLlNwbGl0SW50byh5KTsNCiAgICANCiAgICBzaWdueCA9IFNpZ24oKTsNCiAgICBzaWdueSA9
IG9wLlNpZ24oKTsNCg0KICAgIC8vIElmIHRoZSBleHBvbmVudHMgYXJlIGZhciBlbm91Z2ggYXBh
cnQsIHRoZSBhbnN3ZXIgaXMgZWFzeQ0KICAgIGlmIChleHB4ID4gZXhweSArIDU0KQ0KICAgICAg
ICByZXR1cm4gKnRoaXM7DQogICAgaWYgKGV4cHkgPiBleHB4ICsgNTQpDQogICAgICAgIHJldHVy
biBvcDsNCg0KICAgIC8vDQogICAgLy8gRGVub3JtYWxpemUgdGhlIGZyYWN0aW9ucywgc28gdGhh
dCB0aGUgZXhwb25lbnRzIGFyZQ0KICAgIC8vIHRoZSBzYW1lIGFuZCB0aGVuIHNldCB0aGUgZXhw
b25lbnQgZm9yIHRoZSByZXN1bHQuDQogICAgLy8gTGVhdmUgZW5vdWdoIHNwYWNlIGZvciBvdmVy
ZmxvdyBhbmQgTE9OR19NSU4gYXZvaWRhbmNlIQ0KICAgIC8vIA0KICAgIGlmIChzaWdueCkNCiAg
ICAgICAgeCA9IC14Ow0KICAgIGlmIChzaWdueSkNCiAgICAgICAgeSA9IC15Ow0KDQogICAgeCA8
PD0gODsNCiAgICB5IDw8PSA4Ow0KDQogICAgaWYgKGV4cHggPiBleHB5KQ0KICAgIHsNCiAgICAg
ICAgcm91bmQgPSB5IDw8ICg2NCArIGV4cHkgLSBleHB4KTsNCiAgICAgICAgeSA+Pj0gZXhweCAt
IGV4cHk7DQogICAgfQ0KICAgIGVsc2UgaWYgKGV4cHkgPiBleHB4KQ0KICAgIHsNCiAgICAgICAg
cm91bmQgPSB4IDw8ICg2NCArIGV4cHggLSBleHB5KTsNCiAgICAgICAgeCA+Pj0gZXhweSAtIGV4
cHg7DQogICAgICAgIGV4cHggPSBleHB5Ow0KICAgIH0NCg0KICAgIC8vDQogICAgLy8gRG8gdGhl
IGFyaXRobWV0aWMuIFRoZSBleGNlc3MgbWFnbml0dWRlIG9mIDY0LWJpdCBhcml0aG1ldGljIG1l
YW5zDQogICAgLy8gb3ZlcmZsb3cgaXMgaW1wb3NzaWJsZSAod2Ugb25seSBuZWVkIDEgc3BhcmUg
Yml0ISkuIFdlIGVuc3VyZSB0aGF0DQogICAgLy8gcHJlLWFsaWdubWVudCBhdm9pZHMgYW55IHF1
ZXN0aW9uIG9mIExPTkdfTUlOIG5lZ2F0aW9uIHByb2JsZW1zLg0KICAgIC8vDQogICAgeCArPSB5
Ow0KICAgIGlmIChyb3VuZCAhPSAwKQ0KICAgICAgICB4IHw9IDE7DQoNCiAgICAvLw0KICAgIC8v
IElmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIHRoZW4gbWFrZSB0aGUgZnJhY3Rpb24gcG9zaXRp
dmUgYWdhaW4NCiAgICAvLyBhbmQgcmVtZW1iZXIgdGhlIHNpZ24uDQogICAgLy8NCiAgICBpZiAo
eCA8IDApDQogICAgew0KICAgICAgICB4ID0gLXg7DQogICAgICAgIHNpZ254ID0gMTsNCiAgICB9
DQogICAgZWxzZQ0KICAgICAgICBzaWdueCA9IDA7DQoNCiAgICBpZiAoeCA9PSAwKQ0KICAgICAg
ICByZXR1cm4gc2lnbnggPyBORUdBVElWRV9aRVJPKCkgOiBQT1NJVElWRV9aRVJPKCk7DQoNCiAg
ICAvLw0KICAgIC8vIFRpbWUgdG8gbm9ybWFsaXplIGFnYWluISBJZiB3ZSBuZWVkIHRvIHNoaWZ0
IGxlZnQgKHRoZSBhZGRpdGlvbiB3YXMNCiAgICAvLyBlZmZlY3RpdmVseSBhIHN1YnRyYWN0aW9u
KSwgdGhlbiB0aGVyZSBjYW5ub3QgYmUgYW55IHJlYXNvbiB0byByb3VuZC4NCiAgICAvLyBJZiB0
aGUgbnVtYmVyIGZpdHMgZXhhY3RseSB3ZSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIGRvIGVpdGhl
ci4NCiAgICAvLw0KICAgIHJldHVybiBOb3JtYWxpemUoc2lnbngsIGV4cHggLSA4LCAoVUxvbmdJ
bnQpIHgpOw0KI2VuZGlmDQp9DQoNCklFRUVkb3VibGUgSUVFRWRvdWJsZTo6b3BlcmF0b3ItICgp
IGNvbnN0DQp7DQogICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgc3BlZCB1cCBieSBpbmxpbmlu
Zw0KI2lmZGVmIEhBVkVfSUVFRTc1NA0KICAgIHJldHVybiBJRUVFZG91YmxlKC12YWx1ZS5kb3Vi
bGVfdmFsdWUpOw0KI2Vsc2UNCiAgICBpZiAoSXNOYU4oKSkNCiAgICAgICAgcmV0dXJuICp0aGlz
Ow0KICAgIHJldHVybiBJRUVFZG91YmxlKEhpZ2hXb3JkKCkgXiBTSUdOX0JJVCwgTG93V29yZCgp
KTsNCiNlbmRpZiAvLyBIQVZFX0lFRUU3NTQNCn0NCg0KSUVFRWRvdWJsZSBJRUVFZG91YmxlOjpv
cGVyYXRvciogKGNvbnN0IElFRUVkb3VibGUgb3ApIGNvbnN0DQp7DQojaWZkZWYgSEFWRV9JRUVF
NzU0DQogICAgcmV0dXJuIElFRUVkb3VibGUodmFsdWUuZG91YmxlX3ZhbHVlICogb3AudmFsdWUu
ZG91YmxlX3ZhbHVlKTsNCiNlbHNlDQogICAgaWYgKElzTmFOKCkgfHwgb3AuSXNOYU4oKSkNCiAg
ICAgICAgcmV0dXJuIE5hTigpOyAvLyBhcml0aG1ldGljIG9uIE5hTnMgbm90IGFsbG93ZWQNCg0K
ICAgIGludCBzaWduID0gU2lnbigpIF4gb3AuU2lnbigpOw0KDQogICAgLy8NCiAgICAvLyBJZiBl
aXRoZXIgb3BlcmFuZCBpcyB6ZXJvIG9yIGluZmluaXRlLCB0aGVuIHRoZSBhbnN3ZXIgaXMgZWFz
eS4NCiAgICAvLw0KICAgIGlmIChJc1plcm8oKSkNCiAgICAgICAgcmV0dXJuIG9wLklzSW5maW5p
dGUoKSA/IE5hTigpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzaWduID8gTkVH
QVRJVkVfWkVSTygpIDogUE9TSVRJVkVfWkVSTygpOw0KDQogICAgaWYgKG9wLklzWmVybygpKQ0K
ICAgICAgICByZXR1cm4gSXNJbmZpbml0ZSgpID8gTmFOKCkNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IHNpZ24gPyBORUdBVElWRV9aRVJPKCkgOiBQT1NJVElWRV9aRVJPKCk7DQoNCiAg
ICBpZiAoSXNJbmZpbml0ZSgpIHx8IG9wLklzSW5maW5pdGUoKSkNCiAgICAgICAgcmV0dXJuIHNp
Z24gPyBORUdBVElWRV9JTkZJTklUWSgpIDogUE9TSVRJVkVfSU5GSU5JVFkoKTsNCg0KICAgIC8v
DQogICAgLy8gTm93IGZvciB0aGUgcmVhbCB3b3JrIC0gZG8gbWFuaXB1bGF0aW9ucyBvbiBjb3Bp
ZXMNCiAgICAvLw0KICAgIFVMb25nSW50IHgsIHksIHosIHcsIHByMSwgcHIyOw0KICAgIHU0IHJv
dW5kOw0KICAgIGludCBleHBvbmVudDsNCg0KICAgIGV4cG9uZW50ID0gU3BsaXRJbnRvKHgpICsg
b3AuU3BsaXRJbnRvKHkpOw0KDQogICAgLy8NCiAgICAvLyBUaGUgbnVtYmVycyB0byBiZSBtdWx0
aXBsaWVkIGFyZSA1MyBiaXRzIGluIGxlbmd0aCAoc3RvcmVkIGluIDY0IGJpdA0KICAgIC8vIGlu
dGVnZXJzKS4gU3BsaXQgdGhlbSBpbiAzMiBiaXQgcGFydHMsIHRoZW4gc2hpZnQgcmVzdWx0IGlu
dG8gcGxhY2UuDQogICAgLy8gRm9sZCB0aGUgbG93IG9yZGVyIGJpdHMgaW50byB0aGUgbHNiIGZv
ciByb3VuZGluZyBwdXJwb3Nlcy4NCiAgICAvLw0KICAgIHogPSBVTG9uZ0ludCh4Lkxvd1dvcmQo
KSk7DQogICAgdyA9IFVMb25nSW50KHkuTG93V29yZCgpKTsNCiAgICB4ID4+PSAzMjsNCiAgICB5
ID4+PSAzMjsNCg0KICAgIHByMSA9IHogKiB3OyAvLyBsb3cqbG93DQogICAgcHIyID0geiAqIHkg
KyB4ICogdyArIHByMS5IaWdoV29yZCgpOyAvLyBsb3cqaGlnaCArIGhpZ2gqbG93ICsgYWRqdXN0
ZWQgcHIxDQogICAgcm91bmQgPSBwcjEuTG93V29yZCgpOw0KICAgIHggPSAoeCAqIHkpIDw8IDIw
OyAvLyBoaWdoKmhpZ2gsIGFkanVzdGVkDQoNCiAgICByb3VuZCB8PSBwcjIuTG93V29yZCgpICYg
MHhGRkY7DQogICAgcHIyID4+PSAxMjsNCg0KICAgIHggKz0gcHIyIHwgKHJvdW5kID8gMSA6IDAp
Ow0KDQogICAgcmV0dXJuIE5vcm1hbGl6ZShzaWduLCBleHBvbmVudCAtIDgsIHgpOw0KI2VuZGlm
IC8vIEhBVkVfSUVFRTc1NA0KfQ0KDQpJRUVFZG91YmxlIElFRUVkb3VibGU6Om9wZXJhdG9yLyAo
Y29uc3QgSUVFRWRvdWJsZSBvcCkgY29uc3QNCnsNCiNpZmRlZiBIQVZFX0lFRUU3NTQNCiAgICBy
ZXR1cm4gb3AuSXNaZXJvKCkgPyAoKElzTmFOKCkgfHwgSXNaZXJvKCkpID8gTmFOKCkNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA6IChJc1Bvc2l0aXZlKCkgXiBvcC5Jc1Bvc2l0aXZl
KCkpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE5FR0FUSVZFX0lO
RklOSVRZKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogUE9TSVRJ
VkVfSU5GSU5JVFkoKSkNCiAgICAgICAgICAgICAgICAgICAgICAgOiBJRUVFZG91YmxlKHZhbHVl
LmRvdWJsZV92YWx1ZSAvIG9wLnZhbHVlLmRvdWJsZV92YWx1ZSk7DQojZWxzZSAvLyBIQVZFX0lF
RUU3NTQNCiAgICBpZiAoSXNOYU4oKSB8fCBvcC5Jc05hTigpKQ0KICAgICAgICByZXR1cm4gTmFO
KCk7IC8vIGFyaXRobWV0aWMgb24gTmFOcyBub3QgYWxsb3dlZA0KDQogICAgaW50IHNpZ24gPSBT
aWduKCkgXiBvcC5TaWduKCk7DQoNCiAgICAvLw0KICAgIC8vIEluZmluaXRpZXMgYW5kIHplcm9l
cyBhcmUgc3BlY2lhbC4NCiAgICAvLw0KDQogICAgaWYgKElzSW5maW5pdGUoKSkNCiAgICAgICAg
cmV0dXJuIG9wLklzSW5maW5pdGUoKSA/IE5hTigpDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBzaWduID8gTkVHQVRJVkVfSU5GSU5JVFkoKSA6IFBPU0lUSVZFX0lORklOSVRZKCk7
DQoNCiAgICBpZiAob3AuSXNJbmZpbml0ZSgpKQ0KICAgICAgICByZXR1cm4gc2lnbiA/IE5FR0FU
SVZFX1pFUk8oKSA6IFBPU0lUSVZFX1pFUk8oKTsNCg0KICAgIGlmIChJc1plcm8oKSkNCiAgICAg
ICAgcmV0dXJuIG9wLklzWmVybygpID8gTmFOKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogc2lnbiA/IE5FR0FUSVZFX1pFUk8oKSA6IFBPU0lUSVZFX1pFUk8oKTsNCg0KICAgIGlmIChv
cC5Jc1plcm8oKSkNCiAgICAgICAgcmV0dXJuIHNpZ24gPyBORUdBVElWRV9JTkZJTklUWSgpIDog
UE9TSVRJVkVfSU5GSU5JVFkoKTsNCg0KICAgIC8vDQogICAgLy8gTm93IGZvciB0aGUgcmVhbCB3
b3JrIC0gZG8gbWFuaXB1bGF0aW9ucyBvbiBjb3BpZXMNCiAgICAvLw0KICAgIFVMb25nSW50IHgs
IHk7DQogICAgaW50IGV4cG9uZW50Ow0KDQogICAgZXhwb25lbnQgPSBTcGxpdEludG8oeCkgLSBv
cC5TcGxpdEludG8oeSk7DQoNCiAgICBVTG9uZ0ludCBtYXNrICAoMHg4MDAwMDAwMCwgMHgwMDAw
MDAwMCksDQogICAgICAgICAgICAgcmVzdWx0KDB4MDAwMDAwMDAsIDB4MDAwMDAwMDApOw0KDQog
ICAgLy8gQmVjYXVzZSBib3RoIHZhbHVlcyBhcmUgbm9ybWFsaXNlZCwgYSBzaW5nbGUgc2hpZnQg
Z3VhcmFudGVlcyByZXN1bHRzLg0KDQogICAgaWYgKHggPCB5KQ0KICAgIHsNCgl4IDw8PSAxOw0K
CWV4cG9uZW50LS07DQogICAgfQ0KDQogICAgLy8NCiAgICAvLyBJZiB0aGUgbnVtZXJhdG9yIGlz
IGxhcmdlciwgdGhlbiBpdCBpcyBkaXZpc2libGUuDQogICAgLy8gUmVmbGVjdCB0aGlzIGluIHRo
ZSByZXN1bHQsIGFuZCBkbyB0aGUgc3VidHJhY3Rpb24uDQogICAgLy8gTWFnbmlmeSB0aGUgbnVt
ZXJhdG9yIGFnYWluIGFuZCByZWR1Y2UgdGhlIG1hc2suDQogICAgLy8NCiAgICB3aGlsZSAobWFz
ayAhPSAwKQ0KICAgIHsNCglpZiAoeCA+PSB5KQ0KCXsNCgkgICAgcmVzdWx0ICs9IG1hc2s7DQoJ
ICAgIHggLT0geTsNCgkgICAgaWYgKHggPT0gMCkNCgkJYnJlYWs7DQoJfQ0KICAgICAgICB4IDw8
PSAxOw0KICAgICAgICBtYXNrID4+PSAxOw0KICAgIH0NCg0KICAgIHJldHVybiBOb3JtYWxpemUo
c2lnbiwgZXhwb25lbnQgLSAxMSwgcmVzdWx0KTsNCiNlbmRpZiAvLyBIQVZFX0lFRUU3NTQNCn0N
Cg0KSUVFRWRvdWJsZSBJRUVFZG91YmxlOjpvcGVyYXRvciUgKGNvbnN0IElFRUVkb3VibGUgb3Ap
IGNvbnN0DQp7DQojaWZkZWYgSEFWRV9JRUVFNzU0DQogICAgcmV0dXJuIElFRUVkb3VibGUoKG9w
LklzWmVybygpID8gTmFOKCkudmFsdWUuZG91YmxlX3ZhbHVlDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogZm1vZCh2YWx1ZS5kb3VibGVfdmFsdWUsIG9wLnZhbHVlLmRvdWJs
ZV92YWx1ZSkpKTsNCiNlbHNlIC8vIEhBVkVfSUVFRTc1NA0KICAgIGlmIChJc05hTigpIHx8IG9w
LklzTmFOKCkpDQogICAgICAgIHJldHVybiBOYU4oKTsgLy8gYXJpdGhtZXRpYyBvbiBOYU5zIG5v
dCBhbGxvd2VkDQoNCiAgICAvLw0KICAgIC8vIEluZmluaXRpZXMgYW5kIHplcm9lcyBhcmUgc3Bl
Y2lhbC4NCiAgICAvLw0KDQogICAgaWYgKElzSW5maW5pdGUoKSB8fCBvcC5Jc1plcm8oKSkNCiAg
ICAgICAgcmV0dXJuIE5hTigpOw0KDQogICAgaWYgKElzWmVybygpIHx8IG9wLklzSW5maW5pdGUo
KSkNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KDQogICAgLy8NCiAgICAvLyBOb3cgZm9yIHRoZSBy
ZWFsIHdvcmsgLSBkbyBtYW5pcHVsYXRpb25zIG9uIGNvcGllcw0KICAgIC8vIFRoaXMgYWxnb3Jp
dGhtIGlzIGZyb20gZmRsaWJtLmMgLSBzZWUgYWJvdmUgbm90aWNlDQogICAgLy8NCg0KICAgIGlu
dCBzaWduID0gU2lnbigpOw0KICAgIFVMb25nSW50IHgsIHk7DQogICAgaW50IGV4cHksIGV4cG9u
ZW50Ow0KICAgIExvbmdJbnQgejsNCg0KICAgIGV4cHkgPSBvcC5TcGxpdEludG8oeSk7DQogICAg
ZXhwb25lbnQgPSBTcGxpdEludG8oeCkgLSBleHB5Ow0KDQogICAgaWYgKGV4cG9uZW50IDwgMCB8
fCAoZXhwb25lbnQgPT0gMCAmJiB4IDwgeSkpDQogICAgICAgIHJldHVybiAqdGhpczsNCg0KICAg
IHdoaWxlIChleHBvbmVudC0tKQ0KICAgIHsNCiAgICAgICAgeiA9IHggLSB5Ow0KICAgICAgICBp
ZiAoeiA8IDApDQogICAgICAgICAgICB4IDw8PSAxOw0KICAgICAgICBlbHNlIGlmICh6ID09IDAp
DQogICAgICAgICAgICByZXR1cm4gc2lnbiA/IE5FR0FUSVZFX1pFUk8oKSA6IFBPU0lUSVZFX1pF
Uk8oKTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgeCA9IHogKyB6Ow0KICAgIH0NCiAgICB6
ID0geCAtIHk7DQogICAgaWYgKHogPj0gMCkNCiAgICAgICAgeCA9IHo7DQoNCiAgICBpZiAoeCA9
PSAwKQ0KICAgICAgICByZXR1cm4gc2lnbiA/IE5FR0FUSVZFX1pFUk8oKSA6IFBPU0lUSVZFX1pF
Uk8oKTsNCiAgICByZXR1cm4gTm9ybWFsaXplKHNpZ24sIGV4cHksIHgpOw0KI2VuZGlmIC8vIEhB
VkVfSUVFRTc1NA0KfQ0KDQpib29sIElFRUVkb3VibGU6Om9wZXJhdG9yPCAoY29uc3QgSUVFRWRv
dWJsZSBvcCkgY29uc3QNCnsNCiAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBzcGVkIHVwIGJ5
IGlubGluaW5nDQojaWZkZWYgSEFWRV9JRUVFNzU0DQogICAgcmV0dXJuICh2YWx1ZS5kb3VibGVf
dmFsdWUgPCBvcC52YWx1ZS5kb3VibGVfdmFsdWUpOw0KI2Vsc2UNCiAgICBpZiAoSXNOYU4oKSB8
fCBvcC5Jc05hTigpKQ0KICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5hTnMgYXJlIHVub3JkZXJl
ZA0KICAgIGlmIChJc1plcm8oKSkNCiAgICAgICAgcmV0dXJuIG9wLklzWmVybygpID8gZmFsc2Ug
OiBvcC5Jc1Bvc2l0aXZlKCk7DQogICAgaWYgKG9wLklzWmVybygpKQ0KICAgICAgICByZXR1cm4g
SXNOZWdhdGl2ZSgpOw0KICAgIC8vIEV4cGxvaXQgZmFjdCB0aGF0IHJlbWFpbmluZyBJRUVFIGZs
b2F0aW5nIHBvaW50IHNvcnQgYXMgc2lnbmVkIGludHMNCiAgICB1NCBhID0gSGlnaFdvcmQoKSwg
YiA9IG9wLkhpZ2hXb3JkKCk7DQogICAgcmV0dXJuIChhIDwgYikgfHwgKChhID09IGIpICYmIExv
d1dvcmQoKSA8IG9wLkxvd1dvcmQoKSk7DQojZW5kaWYNCn0NCg0KYm9vbCBJRUVFZG91YmxlOjpv
cGVyYXRvcjw9IChjb25zdCBJRUVFZG91YmxlIG9wKSBjb25zdA0Kew0KICAgIC8vIEZJWE1FOiBU
aGlzIGNvdWxkIGJlIHNwZWQgdXAgYnkgaW5saW5pbmcNCiNpZmRlZiBIQVZFX0lFRUU3NTQNCiAg
ICByZXR1cm4gKHZhbHVlLmRvdWJsZV92YWx1ZSA8PSBvcC52YWx1ZS5kb3VibGVfdmFsdWUpOw0K
I2Vsc2UNCiAgICByZXR1cm4gKnRoaXMgPCBvcCB8fCAqdGhpcyA9PSBvcDsNCiNlbmRpZg0KfQ0K
DQpib29sIElFRUVkb3VibGU6Om9wZXJhdG9yPiAoY29uc3QgSUVFRWRvdWJsZSBvcCkgY29uc3QN
CnsNCiAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBzcGVkIHVwIGJ5IGlubGluaW5nDQojaWZk
ZWYgSEFWRV9JRUVFNzU0DQogICAgcmV0dXJuICh2YWx1ZS5kb3VibGVfdmFsdWUgPiBvcC52YWx1
ZS5kb3VibGVfdmFsdWUpOw0KI2Vsc2UNCiAgICBpZiAoSXNOYU4oKSB8fCBvcC5Jc05hTigpKQ0K
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5hTnMgYXJlIHVub3JkZXJlZC4NCiAgICBpZiAoSXNa
ZXJvKCkpDQogICAgICAgIHJldHVybiBvcC5Jc1plcm8oKSA/IGZhbHNlIDogb3AuSXNOZWdhdGl2
ZSgpOw0KICAgIGlmIChvcC5Jc1plcm8oKSkNCiAgICAgICAgcmV0dXJuIElzUG9zaXRpdmUoKTsN
CiAgICAvLyBFeHBsb2l0IGZhY3QgdGhhdCByZW1haW5pbmcgSUVFRSBmbG9hdGluZyBwb2ludCBz
b3J0IGFzIHNpZ25lZCBpbnRzDQogICAgdTQgYSA9IEhpZ2hXb3JkKCksIGIgPSBvcC5IaWdoV29y
ZCgpOw0KICAgIHJldHVybiAoYSA+IGIpIHx8ICgoYSA9PSBiKSAmJiBMb3dXb3JkKCkgPiBvcC5M
b3dXb3JkKCkpOw0KI2VuZGlmDQp9DQoNCmJvb2wgSUVFRWRvdWJsZTo6b3BlcmF0b3I+PSAoY29u
c3QgSUVFRWRvdWJsZSBvcCkgY29uc3QNCnsNCiAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBz
cGVkIHVwIGJ5IGlubGluaW5nDQojaWZkZWYgSEFWRV9JRUVFNzU0DQogICAgcmV0dXJuICh2YWx1
ZS5kb3VibGVfdmFsdWUgPj0gb3AudmFsdWUuZG91YmxlX3ZhbHVlKTsNCiNlbHNlDQogICAgcmV0
dXJuICp0aGlzID4gb3AgfHwgKnRoaXMgPT0gb3A7DQojZW5kaWYNCn0NCg0KDQojaWZuZGVmIEhB
VkVfTUVNQkVSX0NPTlNUQU5UUw0KdTQgQmlnSW50OjpmaXZlc1tdID0gew0KICAgIDEsIDUsIDI1
LCAxMjUsIDYyNSwgMzEyNSwgMTU2MjUsIDc4MTI1DQp9Ow0KQmlnSW50ICpCaWdJbnQ6OmJpZ2Zp
dmVzW10gPSB7DQogICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwg
TlVMTA0KfTsNCiNlbHNlIC8vIEhBVkVfTUVNQkVSX0NPTlNUQU5UUw0KY29uc3QgdTQgQmlnSW50
OjpmaXZlc1tdID0gew0KICAgIDEsIDUsIDI1LCAxMjUsIDYyNSwgMzEyNSwgMTU2MjUsIDc4MTI1
DQp9Ow0KY29uc3QgQmlnSW50ICpCaWdJbnQ6OmJpZ2ZpdmVzW10gPSB7DQogICAgTlVMTCwgTlVM
TCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTA0KfTsNCiNlbmRpZiAvLyBIQVZF
X01FTUJFUl9DT05TVEFOVFMNCg0KQmlnSW50OjpCaWdJbnQoY29uc3QgSUVFRWZsb2F0ICZmLCBp
bnQgJmUsIGludCAmYml0cykgOiBkYXRhKE5VTEwpDQp7DQogICAgaW50IGZlLCBrOw0KICAgIHU0
IHo7DQogICAgcmVzaXplKDApOw0KICAgIHogPSBmLkZyYWN0aW9uKCk7DQogICAgZmUgPSBmLkV4
cG9uZW50KCk7DQogICAgayA9IGxvMGJpdHMoeik7DQogICAgZGF0YVswXSA9IHo7DQogICAgd2Rz
ID0gMTsNCiAgICBpZiAoZmUgKyBJRUVFZmxvYXQ6OkJpYXMoKSkNCiAgICB7DQogICAgICAgIGUg
PSBrICsgZmUgLSBJRUVFZmxvYXQ6OkZyYWN0U2l6ZSgpOw0KICAgICAgICBiaXRzID0gSUVFRWZs
b2F0OjpGcmFjdFNpemUoKSAtIGsgKyAxOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAg
ICBlID0gayArIGZlIC0gSUVFRWZsb2F0OjpGcmFjdFNpemUoKSArIDE7DQogICAgICAgIGJpdHMg
PSAzMiAtIGhpMGJpdHMoeik7DQogICAgfQ0KfQ0KDQpCaWdJbnQ6OkJpZ0ludChjb25zdCBJRUVF
ZG91YmxlICZkLCBpbnQgJmUsIGludCAmYml0cykgOiBkYXRhKE5VTEwpDQp7DQogICAgaW50IGRl
LCBrOw0KICAgIExvbmdJbnQgeDsNCiAgICB1NCB5LCB6Ow0KDQogICAgcmVzaXplKDEpOw0KICAg
IHggPSBkLkZyYWN0aW9uKCk7DQogICAgeiA9IHguSGlnaFdvcmQoKTsNCiAgICBkZSA9IGQuRXhw
b25lbnQoKTsNCiAgICBpZiAoKHkgPSB4Lkxvd1dvcmQoKSkgIT0gMCkNCiAgICB7DQogICAgICAg
IGlmICgoayA9IGxvMGJpdHMoeSkpICE9IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIGRhdGFb
MF0gPSB5IHwgeiA8PCAzMiAtIGs7DQogICAgICAgICAgICB6ID4+PSBrOw0KICAgICAgICB9DQog
ICAgICAgIGVsc2UNCiAgICAgICAgICAgIGRhdGFbMF0gPSB5Ow0KICAgICAgICB3ZHMgPSAoZGF0
YVsxXSA9IHopID8gMiA6IDE7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIGsgPSBs
bzBiaXRzKHopICsgMzI7DQogICAgICAgIGRhdGFbMF0gPSB6Ow0KICAgICAgICB3ZHMgPSAxOw0K
ICAgIH0NCiAgICBpZiAoZGUgKyBJRUVFZG91YmxlOjpCaWFzKCkpDQogICAgew0KICAgICAgICBl
ID0gayArIGRlIC0gSUVFRWRvdWJsZTo6RnJhY3RTaXplKCk7DQogICAgICAgIGJpdHMgPSBJRUVF
ZG91YmxlOjpGcmFjdFNpemUoKSAtIGsgKyAxOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAg
ICAgICBlID0gayArIGRlIC0gSUVFRWRvdWJsZTo6RnJhY3RTaXplKCkgKyAxOw0KICAgICAgICBi
aXRzID0gMzIgKiB3ZHMgLSBoaTBiaXRzKGRhdGFbd2RzIC0gMV0pOw0KICAgIH0NCn0NCg0KQmln
SW50OjpCaWdJbnQoY29uc3QgY2hhciAqcywgaW50IG5kMCwgaW50IG5kLCB1NCBzdGFydCwgaW50
IHN0YXJ0c2l6ZSkgOg0KICAgIGRhdGEoTlVMTCkNCnsNCiAgICBpbnQgaSwgazsNCiAgICB1NCB4
LCB5Ow0KICAgIHggPSAobmQgKyA4KSAvIDk7DQogICAgZm9yIChrID0gMCwgeSA9IDE7IHggPiB5
OyB5IDw8PSAxLCBrKyspOw0KDQogICAgcmVzaXplKGspOw0KICAgIGRhdGFbMF0gPSBzdGFydDsN
CiAgICB3ZHMgPSAxOw0KICAgIGkgPSBzdGFydHNpemU7DQogICAgaWYgKHN0YXJ0c2l6ZSA8IG5k
MCkNCiAgICB7DQogICAgICAgIHMgKz0gc3RhcnRzaXplOw0KICAgICAgICBkbw0KICAgICAgICAg
ICAgbXVsdGFkZCgxMCwgKnMrKyAtIFVfMCk7DQogICAgICAgIHdoaWxlICgrK2kgPCBuZDApOw0K
ICAgICAgICBzKys7DQogICAgfQ0KICAgIGVsc2UNCiAgICAgICAgcyArPSBzdGFydHNpemUgKyAx
Ow0KDQogICAgZm9yICggOyBpIDwgbmQ7IGkrKykNCiAgICAgICAgbXVsdGFkZCgxMCwgKnMrKyAt
IFVfMCk7DQp9DQoNCkJpZ0ludCAmQmlnSW50OjpvcGVyYXRvciA9KGNvbnN0IEJpZ0ludCAmYikN
CnsNCiAgICBrID0gYi5rOw0KICAgIG1heHdkcyA9IGIubWF4d2RzOw0KICAgIG5lZyA9IGIubmVn
Ow0KICAgIHdkcyA9IGIud2RzOw0KICAgIGRhdGEgPSBuZXcgdTRbbWF4d2RzXTsNCiAgICBtZW1j
cHkoZGF0YSwgYi5kYXRhLCB3ZHMgKiBzaXplb2YodTQpKTsNCiAgICByZXR1cm4gKnRoaXM7DQp9
DQoNCmludCBCaWdJbnQ6OmhpMGJpdHModTQgeCkNCnsNCiAgICBpbnQgayA9IDA7DQogICAgaWYg
KCEgKHggJiAweGZmZmYwMDAwKSkNCiAgICB7DQogICAgICAgIGsgPSAxNjsNCiAgICAgICAgeCA8
PD0gMTY7DQogICAgfQ0KICAgIGlmICghICh4ICYgMHhmZjAwMDAwMCkpDQogICAgew0KICAgICAg
ICBrICs9IDg7DQogICAgICAgIHggPDw9IDg7DQogICAgfQ0KICAgIGlmICghICh4ICYgMHhmMDAw
MDAwMCkpDQogICAgew0KICAgICAgICBrICs9IDQ7DQogICAgICAgIHggPDw9IDQ7DQogICAgfQ0K
ICAgIGlmICghICh4ICYgMHhjMDAwMDAwMCkpDQogICAgew0KICAgICAgICBrICs9IDI7DQogICAg
ICAgIHggPDw9IDI7DQogICAgfQ0KICAgIGlmICghICh4ICYgMHg4MDAwMDAwMCkpDQogICAgew0K
ICAgICAgICBrKys7DQogICAgICAgIGlmICghICh4ICYgMHg0MDAwMDAwMCkpDQogICAgICAgICAg
ICByZXR1cm4gMzI7DQogICAgfQ0KICAgIHJldHVybiBrOw0KfQ0KDQppbnQgQmlnSW50OjpsbzBi
aXRzKHU0ICZ5KQ0Kew0KICAgIGludCBrOw0KICAgIGlmICh5ICYgNykNCiAgICB7DQogICAgICAg
IGlmICh5ICYgMSkNCiAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICBpZiAoeSAmIDIpDQog
ICAgICAgIHsNCiAgICAgICAgICAgIHkgPj49IDE7DQogICAgICAgICAgICByZXR1cm4gMTsNCiAg
ICAgICAgfQ0KICAgICAgICB5ID4+PSAyOw0KICAgICAgICByZXR1cm4gMjsNCiAgICB9DQogICAg
ayA9IDA7DQogICAgaWYgKCEgKHkgJiAweGZmZmYpKQ0KICAgIHsNCiAgICAgICAgayA9IDE2Ow0K
ICAgICAgICB5ID4+PSAxNjsNCiAgICB9DQogICAgaWYgKCEgKHkgJiAweGZmKSkNCiAgICB7DQog
ICAgICAgIGsgKz0gODsNCiAgICAgICAgeSA+Pj0gODsNCiAgICB9DQogICAgaWYgKCEgKHkgJiAw
eGYpKQ0KICAgIHsNCiAgICAgICAgayArPSA0Ow0KICAgICAgICB5ID4+PSA0Ow0KICAgIH0NCiAg
ICBpZiAoISAoeSAmIDB4MykpDQogICAgew0KICAgICAgICBrICs9IDI7DQogICAgICAgIHkgPj49
IDI7DQogICAgfQ0KICAgIGlmICghICh5ICYgMSkpDQogICAgew0KICAgICAgICBrKys7DQogICAg
ICAgIHkgPj49IDE7DQogICAgICAgIGlmICghIHkpDQogICAgICAgICAgICByZXR1cm4gMzI7DQog
ICAgfQ0KICAgIHJldHVybiBrOw0KfQ0KDQpCaWdJbnQgJkJpZ0ludDo6b3BlcmF0b3IgKyhjb25z
dCB1bnNpZ25lZCBvcCkgY29uc3QNCnsNCiAgICBpbnQgaSA9IDA7IC8vIGNvdW50ZXINCiAgICB1
NCBjYXJyeSA9IG9wOyAvLyBjYXJyeSBiZXR3ZWVuIHdvcmRzDQogICAgVUxvbmdJbnQgc3VtOyAv
LyBzdW0NCiAgICBCaWdJbnQgKnJlc3VsdCA9IG5ldyBCaWdJbnQoKnRoaXMpOw0KICAgIHU0ICp4
ID0gcmVzdWx0IC0+IGRhdGE7IC8vIGFjY2VzcyB0byBkYXRhDQogICAgDQogICAgZG8NCiAgICB7
DQogICAgICAgIHN1bSA9IFVMb25nSW50KCp4KSArIGNhcnJ5Ow0KICAgICAgICBjYXJyeSA9IHN1
bS5IaWdoV29yZCgpOw0KICAgICAgICAqeCsrID0gc3VtLkxvd1dvcmQoKTsNCiAgICB9IHdoaWxl
IChjYXJyeSAmJiArK2kgPCB3ZHMpOw0KICAgIGlmIChjYXJyeSAmJiBpID09IHdkcykNCiAgICB7
DQogICAgICAgIGlmICh3ZHMgPT0gbWF4d2RzKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXN1
bHQgLT4gbWF4d2RzID0gMSA8PCAoKytyZXN1bHQgLT4gayk7DQogICAgICAgICAgICB4ID0gbmV3
IHU0W3Jlc3VsdCAtPiBtYXh3ZHNdOw0KICAgICAgICAgICAgbWVtY3B5KHgsIHJlc3VsdCAtPiBk
YXRhLCB3ZHMgKiBzaXplb2YodTQpKTsNCiAgICAgICAgICAgIGRlbGV0ZSByZXN1bHQgLT4gZGF0
YTsNCiAgICAgICAgICAgIHJlc3VsdCAtPiBkYXRhID0geDsNCiAgICAgICAgfQ0KICAgICAgICBy
ZXN1bHQgLT4gZGF0YVtyZXN1bHQgLT4gd2RzKytdID0gY2Fycnk7DQogICAgfQ0KICAgIHJldHVy
biAqcmVzdWx0Ow0KfQ0KDQpCaWdJbnQgJkJpZ0ludDo6b3BlcmF0b3IgLShjb25zdCBCaWdJbnQg
Jm9wKSBjb25zdA0Kew0KICAgIGNvbnN0IEJpZ0ludCAqYSA9IHRoaXMsICpiID0gJm9wOw0KICAg
IEJpZ0ludCAqYyA9IE5VTEw7DQogICAgaW50IGksIHdhLCB3YjsNCiAgICB1NCAqeGEsICp4YWUs
ICp4YiwgKnhiZSwgKnhjOw0KICAgIHU0IGJvcnJvdzsNCiAgICBVTG9uZ0ludCB5Ow0KDQogICAg
aSA9IGEgLT4gY29tcGFyZVRvKG9wKTsNCiAgICBpZiAoISBpKQ0KICAgICAgICByZXR1cm4gKm5l
dyBCaWdJbnQoMCk7DQogICAgaWYgKGkgPCAwKQ0KICAgIHsNCiAgICAgICAgY29uc3QgQmlnSW50
ICp0bXAgPSBhOw0KICAgICAgICBhID0gYjsNCiAgICAgICAgYiA9IHRtcDsNCiAgICAgICAgaSA9
IDE7DQogICAgfQ0KICAgIGVsc2UNCiAgICAgICAgaSA9IDA7DQogICAgYyA9IG5ldyBCaWdJbnQo
MCk7DQogICAgYyAtPiByZXNpemUoYSAtPiBrKTsNCiAgICBjIC0+IG5lZyA9IGkgIT0gMDsNCiAg
ICB3YSA9IGEgLT4gd2RzOw0KICAgIHhhID0gYSAtPiBkYXRhOw0KICAgIHhhZSA9IHhhICsgd2E7
DQogICAgd2IgPSBiIC0+IHdkczsNCiAgICB4YiA9IGIgLT4gZGF0YTsNCiAgICB4YmUgPSB4YiAr
IHdiOw0KICAgIHhjID0gYyAtPiBkYXRhOw0KICAgIGJvcnJvdyA9IDA7DQogICAgZG8NCiAgICB7
DQogICAgICAgIHkgPSBVTG9uZ0ludCgqeGErKykgLSAqeGIrKyAtIGJvcnJvdzsNCiAgICAgICAg
Ym9ycm93ID0geS5IaWdoV29yZCgpICYgMTsNCiAgICAgICAgKnhjKysgPSB5Lkxvd1dvcmQoKTsN
CiAgICB9IHdoaWxlICh4YiA8IHhiZSk7DQogICAgd2hpbGUgKHhhIDwgeGFlKQ0KICAgIHsNCiAg
ICAgICAgeSA9IFVMb25nSW50KCp4YSsrKSAtIGJvcnJvdzsNCiAgICAgICAgYm9ycm93ID0geS5I
aWdoV29yZCgpICYgMTsNCiAgICAgICAgKnhjKysgPSB5Lkxvd1dvcmQoKTsNCiAgICB9DQogICAg
d2hpbGUgKCEqLS14YykNCiAgICAgICAgd2EtLTsNCiAgICBjIC0+IHdkcyA9IHdhOw0KICAgIHJl
dHVybiAqYzsNCn0NCg0KQmlnSW50ICZCaWdJbnQ6Om9wZXJhdG9yICoodW5zaWduZWQgb3ApIGNv
bnN0DQp7DQogICAgaW50IGkgPSAwOyAvLyBjb3VudGVyDQogICAgdTQgY2FycnkgPSAwOyAvLyBj
YXJyeSBiZXR3ZWVuIHdvcmRzDQogICAgVUxvbmdJbnQgcHJvZHVjdDsgLy8gcHJvZHVjdA0KICAg
IEJpZ0ludCAqcmVzdWx0ID0gbmV3IEJpZ0ludCgqdGhpcyk7DQogICAgdTQgKnggPSByZXN1bHQg
LT4gZGF0YTsgLy8gYWNjZXNzIHRvIGRhdGENCiAgICBVTG9uZ0ludCBmYWN0b3IgPSBvcDsgLy8g
YXZvaWQgY3JlYXRpbmcgb2JqZWN0IG11bHRpcGxlIHRpbWVzDQoNCiAgICBkbw0KICAgIHsNCiAg
ICAgICAgcHJvZHVjdCA9IFVMb25nSW50KCp4KSAqIGZhY3RvciArIGNhcnJ5Ow0KICAgICAgICBj
YXJyeSA9IHByb2R1Y3QuSGlnaFdvcmQoKTsNCiAgICAgICAgKngrKyA9IHByb2R1Y3QuTG93V29y
ZCgpOw0KICAgIH0gd2hpbGUgKCsraSA8IHdkcyk7DQogICAgaWYgKGNhcnJ5KQ0KICAgIHsNCiAg
ICAgICAgaWYgKHdkcyA9PSBtYXh3ZHMpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJlc3VsdCAt
PiBtYXh3ZHMgPSAxIDw8ICgrK3Jlc3VsdCAtPiBrKTsNCiAgICAgICAgICAgIHggPSBuZXcgdTRb
cmVzdWx0IC0+IG1heHdkc107DQogICAgICAgICAgICBtZW1jcHkoeCwgcmVzdWx0IC0+IGRhdGEs
IHdkcyAqIHNpemVvZih1NCkpOw0KICAgICAgICAgICAgZGVsZXRlIHJlc3VsdCAtPiBkYXRhOw0K
ICAgICAgICAgICAgcmVzdWx0IC0+IGRhdGEgPSB4Ow0KICAgICAgICB9DQogICAgICAgIHJlc3Vs
dCAtPiBkYXRhW3Jlc3VsdCAtPiB3ZHMrK10gPSBjYXJyeTsNCiAgICB9DQogICAgcmV0dXJuICpy
ZXN1bHQ7DQp9DQoNCkJpZ0ludCAmQmlnSW50OjpvcGVyYXRvciAqKGNvbnN0IEJpZ0ludCAmb3Ap
IGNvbnN0DQp7DQogICAgY29uc3QgQmlnSW50ICphID0gdGhpcywgKmIgPSAmb3A7DQogICAgQmln
SW50ICpjOyAvLyByZXN1bHQNCiAgICBpbnQgazsgLy8gYyAtPiBrDQogICAgaW50IHdhLCB3Yiwg
d2M7IC8vIHdkcyBpbiBlYWNoIG9mIGEsIGIsIGMNCiAgICB1NCAqeCwgKnhhLCAqeGFlLCAqeGIs
ICp4YmUsICp4YywgKnhjMDsNCiAgICB1NCB5LCBjYXJyeTsNCiAgICBVTG9uZ0ludCB6Ow0KDQog
ICAgaWYgKGEgLT4gd2RzIDwgYiAtPiB3ZHMpDQogICAgew0KICAgICAgICBjb25zdCBCaWdJbnQg
KnRtcCA9IGE7DQogICAgICAgIGEgPSBiOw0KICAgICAgICBiID0gdG1wOw0KICAgIH0NCiAgICBr
ID0gYSAtPiBrOw0KICAgIHdhID0gYSAtPiB3ZHM7DQogICAgd2IgPSBiIC0+IHdkczsNCiAgICB3
YyA9IHdhICsgd2I7DQogICAgaWYgKHdjID4gYSAtPiBtYXh3ZHMpDQogICAgICAgIGsrKzsNCiAg
ICBjID0gbmV3IEJpZ0ludCgwKTsNCiAgICBjIC0+IHJlc2l6ZShrKTsNCiAgICBjIC0+IG5lZyA9
IGEgLT4gbmVnIF4gYiAtPiBuZWc7DQogICAgZm9yICh4ID0gYyAtPiBkYXRhLCB4YSA9IHggKyB3
YzsgeCA8IHhhOyB4KyspDQogICAgICAgICp4ID0gMDsNCiAgICB4YSA9IGEgLT4gZGF0YTsNCiAg
ICB4YWUgPSB4YSArIHdhOw0KICAgIHhiID0gYiAtPiBkYXRhOw0KICAgIHhiZSA9IHhiICsgd2I7
DQogICAgeGMwID0gYyAtPiBkYXRhOw0KICAgIGZvciAoIDsgeGIgPCB4YmU7IHhjMCsrKQ0KICAg
IHsNCiAgICAgICAgaWYgKCh5ID0gKnhiKyspICE9IDApDQogICAgICAgIHsNCiAgICAgICAgICAg
IHggPSB4YTsNCiAgICAgICAgICAgIHhjID0geGMwOw0KICAgICAgICAgICAgY2FycnkgPSAwOw0K
ICAgICAgICAgICAgZG8NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB6ID0gVUxvbmdJ
bnQoKngrKykgKiB5ICsgKnhjICsgY2Fycnk7DQogICAgICAgICAgICAgICAgY2FycnkgPSB6Lkhp
Z2hXb3JkKCk7DQogICAgICAgICAgICAgICAgKnhjKysgPSB6Lkxvd1dvcmQoKTsNCiAgICAgICAg
ICAgIH0gd2hpbGUgKHggPCB4YWUpOw0KICAgICAgICAgICAgKnhjID0gY2Fycnk7DQogICAgICAg
IH0NCiAgICB9DQogICAgZm9yICh4YzAgPSBjIC0+IGRhdGEsIHhjID0geGMwICsgd2M7IHdjID4g
MCAmJiAhKi0teGM7IC0td2MpOw0KDQogICAgYyAtPiB3ZHMgPSB3YzsNCiAgICByZXR1cm4gKmM7
DQp9DQoNCkJpZ0ludCAmQmlnSW50OjpvcGVyYXRvciA8PCh1bnNpZ25lZCBvcCkgY29uc3QNCnsN
CiAgICBpbnQgaSwgazEsIG4sIG4xOw0KICAgIHU0ICp4LCAqeDEsICp4ZSwgejsNCiAgICBuID0g
b3AgPj4gNTsNCiAgICBrMSA9IGs7DQogICAgbjEgPSBuICsgd2RzICsgMTsNCiAgICBmb3IgKGkg
PSBtYXh3ZHM7IG4xID4gaTsgaSA8PD0gMSkNCiAgICAgICAgazErKzsNCiAgICBCaWdJbnQgKnJl
c3VsdCA9IG5ldyBCaWdJbnQoKnRoaXMpOw0KICAgIHJlc3VsdCAtPiBtYXh3ZHMgPSAxIDw8IGsx
Ow0KICAgIHJlc3VsdCAtPiBrID0gazE7DQogICAgZGVsZXRlIHJlc3VsdCAtPiBkYXRhOw0KICAg
IHJlc3VsdCAtPiBkYXRhID0geDEgPSBuZXcgdTRbcmVzdWx0IC0+IG1heHdkc107DQogICAgZm9y
IChpID0gMDsgaSA8IG47IGkrKykNCiAgICAgICAgKngxKysgPSAwOw0KICAgIHggPSBkYXRhOw0K
ICAgIHhlID0geCArIHdkczsNCiAgICBpZiAob3AgJj0gMHgxZikNCiAgICB7DQogICAgICAgIGsx
ID0gMzIgLSBvcDsNCiAgICAgICAgeiA9IDA7DQogICAgICAgIGRvDQogICAgICAgIHsNCiAgICAg
ICAgICAgICp4MSsrID0gKnggPDwgb3AgfCB6Ow0KICAgICAgICAgICAgeiA9ICp4KysgPj4gazE7
DQogICAgICAgIH0gd2hpbGUgKHggPCB4ZSk7DQogICAgICAgIGlmICgoKngxID0geikgIT0gMCkN
CiAgICAgICAgICAgICsrbjE7DQogICAgfQ0KICAgIGVsc2UNCiAgICAgICAgZG8NCiAgICAgICAg
ICAgICp4MSsrID0gKngrKzsNCiAgICAgICAgd2hpbGUgKHggPCB4ZSk7DQogICAgcmVzdWx0IC0+
IHdkcyA9IG4xIC0gMTsNCiAgICByZXR1cm4gKnJlc3VsdDsNCn0NCg0KQmlnSW50ICZCaWdJbnQ6
Om11bHRhZGQodW5zaWduZWQgbSwgdW5zaWduZWQgYSkNCnsNCiAgICBpbnQgaSA9IDA7IC8vIGNv
dW50ZXINCiAgICB1NCAqeCA9IGRhdGE7IC8vIGFjY2VzcyB0byBkYXRhDQogICAgdTQgY2Fycnkg
PSBhOyAvLyBjYXJyeSBiZXR3ZWVuIHdvcmRzDQogICAgVUxvbmdJbnQgcHJvZHVjdDsgLy8gcHJv
ZHVjdA0KICAgIFVMb25nSW50IGZhY3RvciA9IG07IC8vIGF2b2lkIGNyZWF0aW5nIG9iamVjdCBt
dWx0aXBsZSB0aW1lcw0KICAgIA0KICAgIGRvDQogICAgew0KICAgICAgICBwcm9kdWN0ID0gVUxv
bmdJbnQoKngpICogZmFjdG9yICsgY2Fycnk7DQogICAgICAgIGNhcnJ5ID0gcHJvZHVjdC5IaWdo
V29yZCgpOw0KICAgICAgICAqeCsrID0gcHJvZHVjdC5Mb3dXb3JkKCk7DQogICAgfSB3aGlsZSAo
KytpIDwgd2RzKTsNCiAgICBpZiAoY2FycnkpDQogICAgew0KICAgICAgICBpZiAod2RzID09IG1h
eHdkcykNCiAgICAgICAgew0KICAgICAgICAgICAgbWF4d2RzID0gMSA8PCAoKytrKTsNCiAgICAg
ICAgICAgIHggPSBuZXcgdTRbbWF4d2RzXTsNCiAgICAgICAgICAgIG1lbWNweSh4LCBkYXRhLCB3
ZHMgKiBzaXplb2YodTQpKTsNCiAgICAgICAgICAgIGRlbGV0ZSBkYXRhOw0KICAgICAgICAgICAg
ZGF0YSA9IHg7DQogICAgICAgIH0NCiAgICAgICAgZGF0YVt3ZHMrK10gPSBjYXJyeTsNCiAgICB9
DQogICAgcmV0dXJuICp0aGlzOw0KfQ0KDQpCaWdJbnQgJkJpZ0ludDo6cG93NW11bHQodW5zaWdu
ZWQgaykNCnsNCiAgICBjb25zdCBCaWdJbnQgKnA1Ow0KICAgIGludCBpOw0KICAgIGFzc2VydChr
IDwgMHg4MDApOw0KICAgIGlmICgoaSA9IGsgJiAweDcpICE9IDApDQogICAgICAgICp0aGlzICo9
IGZpdmVzW2ldOw0KICAgIGlmICghIChrID4+PSAzKSkNCiAgICAgICAgcmV0dXJuICp0aGlzOw0K
ICAgIGlmICghIChwNSA9IGJpZ2ZpdmVzW2kgPSAwXSkpDQogICAgICAgIHA1ID0gYmlnZml2ZXNb
aV0gPSBuZXcgQmlnSW50KDM5MDYyNSk7DQogICAgd2hpbGUgKHRydWUpDQogICAgew0KICAgICAg
ICBpZiAoayAmIDEpDQogICAgICAgICAgICAqdGhpcyAqPSAqcDU7DQogICAgICAgIGlmICghIChr
ID4+PSAxKSkNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBpZiAoISAocDUgPSBiaWdmaXZl
c1srK2ldKSkNCiAgICAgICAgICAgIHA1ID0gYmlnZml2ZXNbaV0gPSBuZXcgQmlnSW50KCpiaWdm
aXZlc1tpLTFdICogKmJpZ2ZpdmVzW2ktMV0pOw0KICAgIH0NCiAgICByZXR1cm4gKnRoaXM7DQp9
DQoNCmludCBCaWdJbnQ6OmNvbXBhcmVUbyhjb25zdCBCaWdJbnQgJmIpIGNvbnN0DQp7DQogICAg
dTQgKnhhLCAqeGEwLCAqeGIsICp4YjA7DQogICAgaW50IGksIGo7DQogICAgaSA9IHdkczsNCiAg
ICBqID0gYi53ZHM7DQogICAgaWYgKGkgLT0gaikNCiAgICAgICAgcmV0dXJuIGk7DQogICAgeGEw
ID0gZGF0YTsNCiAgICB4YSA9IHhhMCArIGo7DQogICAgeGIwID0gYi5kYXRhOw0KICAgIHhiID0g
eGIwICsgajsNCiAgICB3aGlsZSAoeGEgPiB4YTApDQogICAgICAgIGlmICgqLS14YSAhPSAqLS14
YikNCiAgICAgICAgICAgIHJldHVybiAqeGEgPCAqeGIgPyAtMSA6IDE7DQogICAgcmV0dXJuIDA7
DQp9DQoNCmludCBCaWdJbnQ6OnF1b3JlbShjb25zdCBCaWdJbnQgJlMpDQp7DQogICAgaW50IG47
DQogICAgdTQgKmJ4LCAqYnhlLCBxLCAqc3gsICpzeGU7DQogICAgdTQgYm9ycm93LCBjYXJyeTsN
CiAgICBVTG9uZ0ludCB5LCB5czsNCiAgICBuID0gUy53ZHM7DQogICAgaWYgKHdkcyA8IG4pDQog
ICAgICAgIHJldHVybiAwOw0KICAgIHN4ID0gUy5kYXRhOw0KICAgIHN4ZSA9IHN4ICsgLS1uOw0K
ICAgIGJ4ID0gZGF0YTsNCiAgICBieGUgPSBieCArIG47DQogICAgcSA9ICpieGUgLyAoKnN4ZSAr
IDEpOwkgDQogICAgaWYgKHEpDQogICAgew0KICAgICAgICBib3Jyb3cgPSAwOw0KICAgICAgICBj
YXJyeSA9IDA7DQogICAgICAgIGRvDQogICAgICAgIHsNCiAgICAgICAgICAgIHlzID0gVUxvbmdJ
bnQoKnN4KyspICogcSArIGNhcnJ5Ow0KICAgICAgICAgICAgY2FycnkgPSB5cy5IaWdoV29yZCgp
Ow0KICAgICAgICAgICAgeSA9IFVMb25nSW50KCpieCkgLSB5cy5Mb3dXb3JkKCkgLSBib3Jyb3c7
DQogICAgICAgICAgICBib3Jyb3cgPSB5LkhpZ2hXb3JkKCkgJiAxOw0KICAgICAgICAgICAgKmJ4
KysgPSB5Lkxvd1dvcmQoKTsNCiAgICAgICAgfSB3aGlsZSAoc3ggPD0gc3hlKTsNCiAgICAgICAg
aWYgKCEqYnhlKQ0KICAgICAgICB7DQogICAgICAgICAgICBieCA9IGRhdGE7DQogICAgICAgICAg
ICB3aGlsZSAoLS1ieGUgPiBieCAmJiAhKmJ4ZSkNCiAgICAgICAgICAgICAgICAtLW47DQogICAg
ICAgICAgICB3ZHMgPSBuOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChjb21wYXJlVG8oUykg
Pj0gMCkNCiAgICB7DQogICAgICAgIHErKzsNCiAgICAgICAgYm9ycm93ID0gMDsNCiAgICAgICAg
Y2FycnkgPSAwOw0KICAgICAgICBieCA9IGRhdGE7DQogICAgICAgIHN4ID0gUy5kYXRhOw0KICAg
ICAgICBkbw0KICAgICAgICB7DQogICAgICAgICAgICB5cyA9IFVMb25nSW50KCpzeCsrKSArIGNh
cnJ5Ow0KICAgICAgICAgICAgY2FycnkgPSB5cy5IaWdoV29yZCgpOw0KICAgICAgICAgICAgeSA9
IFVMb25nSW50KCpieCkgLSB5cy5Mb3dXb3JkKCkgLSBib3Jyb3c7DQogICAgICAgICAgICBib3Jy
b3cgPSB5LkhpZ2hXb3JkKCkgJiAxOw0KICAgICAgICAgICAgKmJ4KysgPSB5Lkxvd1dvcmQoKTsN
CiAgICAgICAgfSB3aGlsZSAoc3ggPD0gc3hlKTsNCiAgICAgICAgYnggPSBkYXRhOw0KICAgICAg
ICBieGUgPSBieCArIG47DQogICAgICAgIGlmICghKmJ4ZSkNCiAgICAgICAgew0KICAgICAgICAg
ICAgd2hpbGUgKC0tYnhlID4gYnggJiYgISpieGUpDQogICAgICAgICAgICAgICAgLS1uOw0KICAg
ICAgICAgICAgd2RzID0gbjsNCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gcTsNCn0NCg0K
SUVFRWZsb2F0IEJpZ0ludDo6RmxvYXRWYWx1ZSgpIGNvbnN0DQp7DQogICAgdTQgKnhhLCB5LCB6
Ow0KICAgIGludCBrOw0KICAgIHhhID0gZGF0YSArIHdkczsNCiAgICB5ID0gKi0teGE7DQogICAg
ayA9IGhpMGJpdHMoeSk7DQogICAgaWYgKGsgPCA4KQ0KICAgICAgICByZXR1cm4gSUVFRWZsb2F0
KDB4M2Y4MDAwMDAgfCB5ID4+IDggLSBrKTsNCiAgICB6ID0geGEgPiBkYXRhID8gKi0teGEgOiAw
Ow0KICAgIGlmIChrIC09IDgpDQogICAgICAgIHJldHVybiBJRUVFZmxvYXQoMHgzZjgwMDAwMCB8
IHkgPDwgayB8IHogPj4gMzIgLSBrKTsNCiAgICBlbHNlDQogICAgICAgIHJldHVybiBJRUVFZmxv
YXQoMHgzZjgwMDAwMCB8IHkpOw0KfQ0KDQpJRUVFZG91YmxlIEJpZ0ludDo6RG91YmxlVmFsdWUo
KSBjb25zdA0Kew0KICAgIHU0ICp4YSwgdywgeSwgeiwgaGksIGxvOw0KICAgIGludCBrOw0KICAg
IHhhID0gZGF0YSArIHdkczsNCiAgICB5ID0gKi0teGE7DQogICAgayA9IGhpMGJpdHMoeSk7DQog
ICAgaWYgKGsgPCAxMSkNCiAgICB7DQogICAgICAgIGhpID0gMHgzZmYwMDAwMCB8IHkgPj4gMTEg
LSBrOw0KICAgICAgICB3ID0geGEgPiBkYXRhID8gKi0teGEgOiAwOw0KICAgICAgICBsbyA9IHkg
PDwgKDMyLSAxMSkgKyBrIHwgdyA+PiAxMSAtIGs7DQogICAgICAgIHJldHVybiBJRUVFZG91Ymxl
KGhpLCBsbyk7DQogICAgfQ0KICAgIHogPSB4YSA+IGRhdGEgPyAqLS14YSA6IDA7DQogICAgaWYg
KGsgLT0gMTEpDQogICAgew0KICAgICAgICBoaSA9IDB4M2ZmMDAwMDAgfCB5IDw8IGsgfCB6ID4+
IDMyIC0gazsNCiAgICAgICAgeSA9IHhhID4gZGF0YSA/ICotLXhhIDogMDsNCiAgICAgICAgbG8g
PSB6IDw8IGsgfCB5ID4+IDMyIC0gazsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAg
aGkgPSAweDNmZjAwMDAwIHwgeTsNCiAgICAgICAgbG8gPSB6Ow0KICAgIH0NCiAgICByZXR1cm4g
SUVFRWRvdWJsZShoaSwgbG8pOw0KfQ0KDQoNCg0KI2lmZGVmCUhBVkVfSklLRVNfTkFNRVNQQUNF
DQp9CQkJLy8gQ2xvc2UgbmFtZXNwYWNlIEppa2VzIGJsb2NrDQojZW5kaWYNCg0K


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

end of thread, other threads:[~2001-09-15 20:08 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-08-12 13:00 c++/2585: Internel error compiling the Jikes java compiler with mingw32 rodrigc
  -- strict thread matches above, loose matches on Subject: below --
2001-09-15 20:08 rodrigc
2001-04-18 20:16 sweeney

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