GNU bug report logs - #17711
Updated "untangle" script: More functional, and resynced with 2.20

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: grep; Severity: wishlist; Reported by: behoffski <behoffski@HIDDEN>; dated Fri, 6 Jun 2014 03:53:02 UTC; Maintainer for grep is bug-grep@HIDDEN.
Severity set to 'wishlist' from 'normal' Request was from Paul Eggert <eggert@HIDDEN> to control <at> debbugs.gnu.org. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 6 Jun 2014 03:53:01 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Jun 05 23:53:01 2014
Received: from localhost ([127.0.0.1]:46352 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.80)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1WslDA-0003WE-Er
	for submit <at> debbugs.gnu.org; Thu, 05 Jun 2014 23:53:00 -0400
Received: from eggs.gnu.org ([208.118.235.92]:43297)
 by debbugs.gnu.org with esmtp (Exim 4.80)
 (envelope-from <behoffski@HIDDEN>) id 1WslD9-0003Vy-7E
 for submit <at> debbugs.gnu.org; Thu, 05 Jun 2014 23:52:59 -0400
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
 (envelope-from <behoffski@HIDDEN>) id 1WslCl-000084-VV
 for submit <at> debbugs.gnu.org; Thu, 05 Jun 2014 23:52:53 -0400
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org
X-Spam-Level: 
X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50 autolearn=disabled
 version=3.3.2
Received: from lists.gnu.org ([2001:4830:134:3::11]:55004)
 by eggs.gnu.org with esmtp (Exim 4.71)
 (envelope-from <behoffski@HIDDEN>) id 1WslCl-00007y-IG
 for submit <at> debbugs.gnu.org; Thu, 05 Jun 2014 23:52:35 -0400
Received: from eggs.gnu.org ([2001:4830:134:3::10]:44798)
 by lists.gnu.org with esmtp (Exim 4.71)
 (envelope-from <behoffski@HIDDEN>) id 1WslCV-0005Xw-JY
 for bug-grep@HIDDEN; Thu, 05 Jun 2014 23:52:35 -0400
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
 (envelope-from <behoffski@HIDDEN>) id 1WslCD-0008Rs-PU
 for bug-grep@HIDDEN; Thu, 05 Jun 2014 23:52:19 -0400
Received: from ipmail06.adl2.internode.on.net
 ([2001:44b8:8060:ff02:300:1:2:6]:41848)
 by eggs.gnu.org with esmtp (Exim 4.71)
 (envelope-from <behoffski@HIDDEN>) id 1WslC4-0008I0-T2
 for bug-grep@HIDDEN; Thu, 05 Jun 2014 23:52:01 -0400
X-IronPort-Anti-Spam-NotFiltered: toobig
Received: from ppp14-2-27-84.lns21.adl2.internode.on.net (HELO [192.168.1.1])
 ([14.2.27.84])
 by ipmail06.adl2.internode.on.net with ESMTP; 06 Jun 2014 13:21:22 +0930
Message-ID: <53913AB8.50301@HIDDEN>
Date: Fri, 06 Jun 2014 13:21:20 +0930
From: behoffski <behoffski@HIDDEN>
User-Agent: Mozilla/5.0 (X11; Linux x86_64;
 rv:24.0) Gecko/20100101 Thunderbird/24.5.0
MIME-Version: 1.0
To: bug-grep@HIDDEN
Subject: Updated "untangle" script: More functional, and resynced with 2.20
Content-Type: multipart/mixed; boundary="------------020206090706050709060901"
X-detected-operating-system: by eggs.gnu.org: Genre and OS details not
 recognized.
X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address
 (bad octet value).
X-Received-From: 2001:4830:134:3::11
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <http://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <http://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <http://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>

This is a multi-part message in MIME format.
--------------020206090706050709060901
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

G'day,

Here's an updated "untangle" Lua script (http://www.lua.org/),
resynchronised with the changes up until Grep 2.20
(specifically commit ...78f07b8c8e26, the post-release
administrivia commit after the release).

The original script (17 April) was fairly rough and
incomplete in places; and was overshadowed by the many
improvements being made in the lead-up to 2.19, especially
the extremely impressive work from Norihiro, Paul and Jim
at multiple levels to improve performance, documentation, and
code consistency and clarity in many areas.

I still believe that a more fundamental rework of dfa.c, based
on making the token language more expressive, is worthwhile,
but that such an invasive change could only occur if dfa.c was
made easier to modify; hence, this untangle script.

There are two major improvements over the 17 April version:

   1. The modules now clean up after themselves, instead of
      leaving dangling memory blocks.  Running "make check"
      with Valgrind, as per the script suggested by Jim in
      his 21 May message, now runs cleanly, although the
      "symlink" test hangs on my system for both the original
      and modified grep versions, for reasons that I haven't
      tried to track down.

   2. I've created a new module, "mbcsets", which models
      multibyte character class sets at arm's length to users,
      in a similar fashion to the "charclass" module.  The
      result is that the token output from fsaparse should now
      be identical to the token output from parse in dfa.c,
      whereas previously the comparison could only be made at
      the output of fsalex, as it did not share its
      internally-build mbcsets structures.

There's quite a number of implementation differences that are
worth inspecting in the untangled versions:

   1. Charclass has moved from persistent class indices, but
      changing class pointers (due to realloc ()), to also
      explicitly supporting persistent pointers.  This has
      facilitated better charclass caching in various places;

   2. I'm still working towards a scenario where multiple
      lexers/parsers/etc could co-exist in different-locale
      and/or different-regex-option versions, with the locale
      captured when fsalex_syntax () is called by the client,
      and all other users rigorously obtain locale information
      directly or indirectly via the lexer.  This is incomplete;
      one example that I haven't fixed yet is the using_utf8 ()
      test in fsaparse;

   3. find_pred (), in fsalex, exploits the charclass pointer
      guarantee to do lazy caching of predicate searches;

   4. The treatment of \s and \S in fsalex_lex () has been
      rewritten to not use PUSH_LEX_STATE/POP_LEX_STATE, as it
      calls underlying resources such as find_pred directly.
      (Incidentally, the IS_WORD_CONSTITUENT implementation of
      \w/\W in dfa.c is quite different to the \s/\S treatment
      in the original dfa.c:  Is this code correct in a
      multibyte environment?);

   5. I reworked FETCH_WC/FETCH_CHAR only a few days before Paul
      and Norihiro mad extensive improvements;  I've tried to
      integrate their changes into my version without compromising
      their excellent work; my version is sufficiently different,
      in documentation even if nowhere else, to be worth a look;
      and

   6. My personal coding preference is to not guarantee
      single-exit functions, but instead, try to treat exceptional
      and/or simple cases early in the function, with an
      immediate function return.  My hope is that this makes the
      remainder of the function easier to understand, as the
      reader knows that certain cases have been eliminated.

      In this vein, I (possibly rashly) decided to rewrite
      atom () and closure () in fsaparse; all feedback on this
      effort is welcome.

As before, the code modifies dfa.c to create "dfa-prl.c", so
that the original code and the new code can be run in "parallel",
and the outputs compared.  The comparison is logged in
/tmp/parallel.log.  The co-existence of new and old code means
that the new code has to have explicit module name prefixes in
many places, at least to avoid namespace clashes.

This message contains the updated "untangle" Lua script, along
with the "strictness" module, from LuaRocks, that I use to
stop global variables (usually the result of typos) from being
created freely.

I'll post a follow-up message shortly, with the full set of
created and/or modified files created by the script, for those
that (probably quite wisely) may distrust Lua scripts from
strangers.

cheers,

behoffski (Brenton Hoff)
Programmer, Grouse Software

--------------020206090706050709060901
Content-Type: text/plain; charset=us-ascii;
 name="untangle"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="untangle"

IyEvYmluL2VudiBsdWEKCi0tLSBVbnRhbmdsZSAtLSBTY3JpcHQgdG8gZW5hYmxlIHJlZmFj
dG9yaW5nIGRmYS5jICg+NDAwMCBsaW5lcykKCi0tW1sKICAgQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTQgR3JvdXNlIFNvZnR3YXJlLgoKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkKICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g
Mywgb3IgKGF0IHlvdXIgb3B0aW9uKQogICBhbnkgbGF0ZXIgdmVyc2lvbi4KCiAgIFRoaXMg
cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCgogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICBGb3Vu
ZGF0aW9uLCBJbmMuLAogICA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBCi0tXV0KCi0tIEluaXRpYWwgZGVzaWduIGFuZCBp
bXBsZW1lbnRhdGlvbiBieSBiZWhvZmZza2kgb2YgR3JvdXNlIFNvZnR3YXJlLAotLSAyMDEz
LTIwMTQuCgotLVtbCiAgIGRmYS5jIGlzIGEgcGFydGljdWxhcmx5IGJpZyBhbmQgY29tcGxl
eCBwaWVjZSBvZiBzb2Z0d2FyZSwgYW5kIHNlcnZlcwogICBhIG1hc3NpdmUgc2V0IG9mIHVz
ZSBjYXNlcyBhbmQgbWFjaGluZSBlbnZpcm9ubWVudHMuICBIb3dldmVyLCB0byBhCiAgIGxp
bWl0ZWQgZXh0ZW50LCBpdCBoYXMgYmVjb21lIHByaXNvbmVyIG9mIGl0cyBvd24gY29tcGxl
eGl0eTogIFdoaWxlCiAgIGltcHJvdmVtZW50cyBpbiBvbmUgYXJlYSBtYXkgYmUgZmVhc2li
bGUsIHRoZSBpbnRlcnZlbmluZyBsYXllcnMgbWF5CiAgIHJlLWNvZGUgdGhlIHBhdHRlcm4g
aW4gYSBmYXNoaW9uIHRoYXQgbWFrZXMgdGhlIGltcHJvdmVtZW50IGhhcmQgdG8KICAgaW1w
bGVtZW50LgoKICAgU28sIHRoaXMgc2NyaXB0IHRyaWVzIHRvIHVudGFuZ2xlIGRmYS5jIGEg
bGl0dGxlOiAgVG8gYnJlYWsgdGhlCiAgIGxleGljYWwgYW5hbHlzaXMgKHRva2VuIGRlZmlu
aXRpb24sIGNoYXItY2xhc3MgYW5kIG11bHRpYnl0ZS1jbGFzcwogICBzdG9yYWdlIG1hbmFn
ZW1lbnQsIHBhdHRlcm4gaW50ZXJwcmV0YXRpb24gb3B0aW9ucykgaW50byBzZXBhcmF0ZQog
ICBtb2R1bGUocykgKGZzYWxleC5bY2hdLCBmc2F0b2tlbnMuaCwgZnNhdXRpbHMuW2NoXSwg
Li4uID8gbm90IHN1cmUpLgoKICAgSW5pdGlhbGx5LCBpdCBpcyBsaWtlbHkgdGhhdCB0aGUg
InVudGFuZ2xlZCIgdmVyc2lvbiB3aWxsIGhhdmUgdGhlCiAgIHNhbWUgaW1wbGVtZW50YXRp
b24gYXMgdGhlIGN1cnJlbnQgdmVyc2lvbiwgc28gdGhhdCB0aGUgaW50ZWdyaXR5IG9mCiAg
IHRoZSBzcGxpdCBzb3VyY2VzIGNhbiBiZSBjaGVja2VkLiAgRG93biB0aGUgdHJhY2ssIG15
IGhvcGUgaXMgdG8KICAgY2hhbmdlIHNvbWUgaW5mb3JtYXRpb24gdGhhdCBpcyBjdXJlbnRs
eSBjb21tdW5pY2F0ZWQgYnkgI2lmZGVmcwogICBhbmQvb3Igc2VwYXJhdGUgdmFyaWFibGVz
IGludG8gYSBsYXJnZXIsIG1vcmUgZXhwbGljaXQgc2V0IG9mIGxleGljYWwKICAgdG9rZW5z
LCBzbyB0aGF0IHRoZSBwYXJzZXIsIGFuZCB0aGUgZm9sbG93aW5nIERGQSBjb21waWxhdGlv
biBhbmQKICAgYW5hbHlzaXMsIGFyZSBzaW1wbGlmaWVkIGJ5IHRoZSBpbXByb3ZlZCB0b2tl
biBzZXQsIGFuZCB0aGUgZXh0cmEKICAgaW5mb3JtYXRpb24gY2FwdHVyZWQgaW4gdGhlIHRv
a2VucyBlbmFibGVzIG1vcmUgc29waGlzdGljYXRlZAogICBhbmFseXNpcyBvZiB0aGUgcGF0
dGVybiwgbGVhZGluZyB0byBiZXR0ZXIgc2VhcmNoIGVuZ2luZSBjaG9pY2VzLgoKICAgQXQg
dGhlIHRpbWUgb2Ygd3JpdGluZyAoMTcgRmViIDIwMTQpLCBteSBjdXJyZW50IGd1ZXNzIGlz
IHRoYXQgdG9rZW5zCiAgIHdpbGwgYmUgZ3VhcmFudGVlZCB0byBiZSBhdCBsZWFzdCAzMiBi
aXRzIHdpZGUsIHRoZSBsb3dlc3QgYml0cyAoPz8KICAgcHJvYmFibHkgOCBiaXRzKSB3aWxs
IGFsd2F5cyBjb250YWluIHRoZSB0b2tlbiB0eXBlIChvcGNvZGUpLCBhbmQKICAgdGhlIGhp
Z2hlciBiaXRzIGNhbiBvcHRpb25hbGx5IGNvbnRhaW4gaW5mb3JtYXRpb24gcmVsYXRpbmcg
dG8gdGhlCiAgIHRva2VuICg/PyAyNC1iaXQgaW5kZXggcG9pbnRlciBmb3IgY2hhcmFjdGVy
IHNldHMvbXVsdGlieXRlIGNoYXJzZXRzOwogICAyNC1iaXQgdmFsdWUgZm9yIGEgbXVsdGli
eXRlIGNoYXJhY3RlcjsgYW4gOC1iaXQgdmFsdWUgZm9yIGFuIEFTQ0lJCiAgIGNoYXJhY3Rl
ciB3aXRoIGFuIGV4dHJhIGJpdCAoQyBsb2NhbGUpKS4gIEV4aXN0aW5nIChzb21ldGltZXMK
ICAgaW1wbGllZCkgb3Bjb2RlcyB3aWxsIGJlIGV4cGFuZGVkIGludG8gZmFtaWxpZXMgdG8g
ZXhwbGljaXRseSBuYW1lCiAgIHBhcmFtZXRlciBpbnRlcnByZXRhdGlvbiwgZS5nLiBDSEFS
X0VYQUNULCBDSEFSX0NBU0VfSU5TRU5TSVRJVkUsCiAgIENIQVJfQ0FTRV9ET05UX0NBUkUs
IE1CQ0hBUl9FWEFDVCwgTUJDSEFSX0NBU0VfSU5TRU5TSVRJVkUsCiAgIE1CQ0hBUl9DQVNF
X0RPTlRfQ0FSRSwgZXRjLiAgSSdtIG5vdCBzdXJlIGlmIENMQVNTIGFuZCBDTEFTU19JTlZF
UlQKICAgb3Bjb2RlcyBhcmUgd2FycmFudGVkLCBidXQgaXQncyBwb3NzaWJsZTogIFRoZSBl
bmQtb2YtbGluZSBjaGFyYWN0ZXIKICAgcHJvY2Vzc2luZyBpcyBwZXJoYXBzIGJlc3QgZGVm
ZXJyZWQgdG8gdGhlIHBhcnNlIHN0YWdlIGluIGRmYS5jLgogICAoPz8gTWVtbyB0byBzZWxm
OiAgUGVyaGFwcyBsYXRlciBvbiwgc3BsaXQgb3V0IHBhcnNlciB0bwogICBmc2FwYXJzZS5b
Y2hdLikKCiAgIEluY2lkZW50YWxseSwgSSB1c2UgImZzYSIgcmF0aGVyIHRoYW4gImRmYSIg
aW4gdGhlIG5hbWVzIGFib3ZlLCBhcwogICB0aGUgZGV0ZXJtaW5pc3RpYy9ub25kZXRlcm1p
bmlzdGljIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzZWFyY2gKICAgZW5naW5lIGlzbid0IGRp
cmVjdGx5IHJlbGV2YW50IGR1cmluZyBsZXhpbmcgYW5kIHBhcnNpbmcuICBUaGVyZSBhcmUK
ICAgaW5kaXJlY3QgaW5mbHVlbmNlcywgc3VjaCBhcyBjaG9vc2luZyBjaGFyYWN0ZXItYnkt
Y2hhcmFjdGVyCiAgIHJlcHJlc2VudGF0aW9uIG9mIHNpbXBsZSBzdHJpbmdzIGluIHRoZSBp
bnB1dCBwYXR0ZXJuLCBhbmQgdGhlbgogICB3b3JraW5nIGxhdGVyIHRvIGV4dHJhY3QgdGhl
c2Ugc3RyaW5ncyAodGhlICJtdXN0cyIpIHNpbmNlCiAgIHNraXAtYmFzZWQgc3RyaW5nIHNl
YXJjaGVzIGFyZSB2ZXJ5IGVmZmljaWVudC4gIFRoZSBjaG9zZW4KICAgcmVwcmVzZW50YXRp
b24gYWxsb3dzIGZvciBhIHNpbXBsZSwgdW5pZm9ybSB3YXkgb2YgbmFtaW5nIHN0YXRlcwog
ICB0aGF0IGFyZSBhbGl2ZSBkdXJpbmcgdGhlIHNlYXJjaCwgYW5kIHRoaXMgZml0cyB3ZWxs
IHdpdGggdGhlIERGQSdzCiAgIGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIgc2VhcmNoIHN0cmF0
ZWd5LgoKICAgVGhlIHNjcmlwdCBpcyB3cml0dGVuIGluIEx1YSAoaHR0cDovL3d3dy5sdWEu
b3JnKSwgYW5kIHdhcyBkZXZlbG9wZWQKICAgdXNpbmcgTHVhIDUuMS41LiAgSSd2ZSBhbHNv
IHJ1biBpdCBzdWNjZXNzZnVsbHkgd2l0aCBMdWEgNS4yLjMuCgogICBUaGUgcmVhc29ucyBm
b3IgcGVyZm9ybWluZyB0aGlzIHJlZmFjdG9yaW5nIGFzIGEgTHVhIHNjcmlwdCBpcwogICBi
ZWNhdXNlOgogICAgIChhKSBUaGUgcmVmYWN0b3Jpbmcgd2lsbCB0YWtlIGEgKmxvbmcqIHRp
bWUgdG8gZ2V0IHRvIGEgY29oZXJlbnQKICAgICAgICAgbGV2ZWwsIGFuZCB0aGVyZWZvcmUg
a2VlcGluZyB0cmFjayBvZiBjb2RlIGNoYW5nZXMgaW4gdGhlCiAgICAgICAgIG9yaWdpbmFs
IGlzIGNyaXRpY2FsLiAgVGhlIHNjcmlwdCBsZXRzIG1lIHNwbGl0IHVwIHRoZSBjb2RlCiAg
ICAgICAgIGludG8gc25pcHBldHMgKHNlZ21lbnRzKSBpbiBhbiBhdXRvbWF0ZWQgZmFzaGlv
biwgYW5kIHZlcmlmeQogICAgICAgICB0aGF0IHRoZSBvcmlnaW5hbCBjYW4gYmUgZnVsbHkg
cmVjcmVhdGVkIGZyb20gdGhlIHNsaWNlZC11cAogICAgICAgICB2ZXJzaW9uLiAgRWFjaCBz
bmlwcGV0IGdldHMgYW4gdW5pcXVlIG5hbWUsIGFuZCB0aGlzIGlzIHVzZWQKICAgICAgICAg
d2hlbiBzcGVjaWZ5aW5nIG1vZGlmaWVkIHZlcnNpb25zOyB0aHVzLCB0aGUgb3V0cHV0IGhh
cyBzb21lCiAgICAgICAgIHByb3RlY3Rpb24gZnJvbSBjaGFuZ2VzIHRvIHRoZSBpbnB1dDsK
CiAgICAgKGIpIEx1YSBpcyBhIHNtYWxsLCBwb3dlcmZ1bCBzY3JpcHRpbmcgbGFuZ3VhZ2Ug
aW5mbHVlbmNlZCBieQogICAgICAgICBTY2hlbWUsIENMVSwgTW9kdWxhLTIgYW5kIG90aGVy
czsgaXRzIHNwZWVkIGlzIGltcHJlc3NpdmU7CiAgICAgICAgIHdyaXRpbmcgcmVhZGFibGUg
Y29kZSBpcyBmYWlybHkgZWFzeSwgYW5kIGl0cyByZXB1dGF0aW9uIGFuZAogICAgICAgICBz
cGhlcmUgb2YgaW5mbHVlbmNlIGlzIGdyb3dpbmc7CgogICAgIChjKSBMdWEgaGFzIGEgY29t
cGFjdCwgYnV0IHZlcnkgcG93ZXJmdWwgYW5kIGZsZXhpYmxlLCBzdHJpbmcKICAgICAgICAg
bWFuaXB1bGF0aW9uIGxpYnJhcnksIHdoaWNoIHdpbGwgYmUgdXNlZnVsIHdoZW4gd2FudGlu
ZyB0bwogICAgICAgICBwZXJmb3JtIHRyaWNreSBjb2RlIGVkaXRzIGluIGFuIGF1dG9tYXRl
ZCBmYXNoaW9uOyBhbmQKCiAgICAgKGQpIEx1YSdzIGxpY2VuY2UgKGZyb20gNS4wIG9ud2Fy
ZHM7IEknbSB1c2luZyA1LjEpIGlzIHRoZSBNSVQKICAgICAgICAgbGljZW5zZSwgd2hpY2gg
aXMgT3BlbiBTb3VyY2UtY29tcGF0aWJsZSwgc28sIHdoaWxlIGl0IGlzbid0CiAgICAgICAg
IEZyZWUgU29mdHdhcmUsIGl0IGlzIGNvbXBhdGlibGUgZm9yIGEgb25jZS1vZmYgcmVmYWN0
b3JpbmcKICAgICAgICAgcHJvamVjdC4gIChUaGlzIHNjcmlwdCBpcyBsaWNlbmNlZCBhcyBH
UEwzLCBidXQgdGhhdCdzIGFuCiAgICAgICAgIGluZGVwZW5kZW50IGNob2ljZS4pCgotLV1d
CgoKbG9jYWwgaW8gICAgID0gcmVxdWlyZSgiaW8iKQpsb2NhbCBvcyAgICAgPSByZXF1aXJl
KCJvcyIpCmxvY2FsIHN0cmluZyA9IHJlcXVpcmUoInN0cmluZyIpCmxvY2FsIHRhYmxlICA9
IHJlcXVpcmUoInRhYmxlIikKCi0tIEF2b2lkIGx1YXJvY2tzL2x1YXJvY2tzLmxvYWRlciBh
cyBJJ20gbm90IHNvcGhpc3RpY2F0ZWQgYWJvdXQKLS0gaGFuZGxpbmcgZHVhbC1sdWEtNS4x
LzUuMiBtb2R1bGVzLiAgSSB1c2UgInN0cmljdG5lc3MiIHRvIHR1cm4KLS0gdW5pbnRlbmRl
ZCBnbG9iYWxzIGludG8gZXJyb3JzLCBhcyB0aGVzZSBhcmUgYWxtb3N0IGFsd2F5cyB0eXBv
cy4KLS0gVGhlIHN0cmljdG5lc3Mgc2NyaXB0ICh2ZXJzaW9uIDAuMS4wLCBvYnRhaW5lZCBm
cm9tIHRoZSBsdWFyb2NrcwotLSBtYWluIHJlcG9zaXRvcnkpIGlzIGNvbXBhdGlibGUgd2l0
aCBib3RoIEx1YSA1LjEgYW5kIDUuMi4KCi0tIHJlcXVpcmUoImx1YXJvY2tzLmxvYWRlciIp
CnJlcXVpcmUoInN0cmljdG5lc3MiKQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi0tIFBhbmRl
ciB0byAibWFrZSBzeW50YXgtY2hlY2siJ3MgZXhwZWN0YXRpb24gdGhhdCBlcnJvciBtZXNz
YWdlcyBiZQotLSBtYXJrZWQgZm9yIHRyYW5zbGF0aW9uIGJ5IGhhdmluZyBfKC4uLikgd3Jh
cHBpbmcuICBUaGUgQyBzb3VyY2VzCi0tIGFyZSBhbHJlYWR5IG1hcmtlZCBjb3JyZWN0bHk7
IHRoZSBvbmx5IHByb2JsZW0gaXMgdGhhdCBzeW50YXgtY2hlY2sKLS0gYWxzbyBkZW1hbmRz
IHRoYXQgdGhpcyBzY3JpcHQgY29uZm9ybS4gIEkgY2FuJ3QgYmUgYm90aGVyZWQgdHJ5aW5n
Ci0tIHRvIGZpbmUtdHVuZSB0aGUgc291cmNlcywgc28ganVzdCBkdW1teSB1cCBhIGx1YSBm
dW5jdGlvbiB0byBtaW1pYwotLSBpbiBhIHRyaXZpYWwgZmFzaGlvbiB0aGUgbGF5b3V0IHRo
YXQgc3ludGF4LWNoZWNrIGRlbWFuZHMuCgpsb2NhbCBmdW5jdGlvbiBfKC4uLikKICAgICAg
ICByZXR1cm4gLi4uCmVuZAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi0tIFdlIHJlZmVyIHRv
IGxpbmUgbnVtYmVycyBhcyBvZmZzZXRzIGZyb20gYSBzZWN0aW9uIGJvdW5kYXJ5LCBzbyB0
aGF0Ci0tIGlmIGluc2VydGlvbnMvZGVsZXRpb25zIG9jY3VyLCB3ZSBtb3N0bHkgb25seSBo
YXZlIHRvIHJlZGVmaW5lIHRoZQotLSBsb2NhbCBsaW5lIG51bWJlcnMgcGx1cyB0aGUgZm9s
bG93aW5nIHNlY3Rpb24gbnVtYmVycywgbm90IGV2ZXJ5Ci0tIGxpbmUgcmVmZXJlbmNlIHRo
cm91Z2hvdXQgdGhlIHJlc3Qgb2YgdGhlIGZpbGUuCgpsb2NhbCBTZWN0aW9uSW5mbwpkbwog
ICAgICAgIGxvY2FsIEluaXRpYWxTb3VyY2UgPSB7RmlsZW5hbWUgPSAiLW5vbmUtIiwgUHJl
dkxpbmUgPSAtMSwgfQogICAgICAgIFNlY3Rpb25JbmZvID0ge1RpdGxlID0gIih1bnRpdGxl
ZCkiLAogICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSA9IEluaXRpYWxTb3VyY2UsCiAg
ICAgICAgICAgICAgICAgICAgICAgTGluZU5yID0gMH0KZW5kCgpsb2NhbCBmdW5jdGlvbiBT
ZWN0aW9uKFRpdGxlLCBTb3VyY2UsIExpbmVOcikKICAgICAgICBpZiB0eXBlKFNvdXJjZSkg
fj0gInRhYmxlIiB0aGVuCiAgICAgICAgICAgICAgIGVycm9yKF8oIjpTb3VyY2UgbXVzdCBi
ZSBhIGZpbGUtYXMtbGluZXMgdGFibGUgb2JqZWN0IikpCiAgICAgICAgZW5kCgogICAgICAg
IC0tIEFwcGVuZCBhIG5ldyBzZWN0aW9uIGVudHJ5IHRvIHRoZSBsaXN0IG9mIHNlY3Rpb25z
CiAgICAgICAgU2VjdGlvbkluZm9bI1NlY3Rpb25JbmZvICsgMV0gPQogICAgICAgICAgICAg
ICAge1RpdGxlID0gVGl0bGUsIFNvdXJjZSA9IFNvdXJjZSwgTGluZU5yID0gTGluZU5yfQoK
ICAgICAgICAtLSBQZXJoYXBzIHdlIHNob3VsZCBjaGVjayB0aGF0IHNlY3Rpb25zIGRvIG5v
dCBvdmVybGFwIGFuZC9vcgogICAgICAgIC0tIHNraXAgbGluZXMsIGJ1dCBtb3N0IG9mIG91
ciBuZWVkcyBhcmUgbWV0IGJ5IHRoZSBzZWdtZW50CiAgICAgICAgLS0gdGFnZ2luZyBmYWNp
bGl0eSBhbnl3YXksIHNvIGl0J3Mgbm90IGEgcHJpb3JpdHkgYXQgdGhlCiAgICAgICAgLS0g
bW9tZW50LgplbmQKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgotLSBOZXdGaWxlVGFibGUgcmVh
ZHMgYSBmaWxlLCBsaW5lLWJ5LWxpbmUsIGludG8gYSB0YWJsZSwgYW5kIHJldHVybnMKLS0g
dGhlIHRhYmxlLiAgQXJyYXkgKHNlcXVlbmNlIDEuLm4pIHJlZmVyZW5jZXMgYXJlIGZpbGUg
dGV4dCBlbnRyaWVzOwotLSBOYW1lL1ZhbHVlIHBhaXJzIGhvbGQgb3RoZXIgdmFsdWVzIChl
LmcuIGtleXMgIkZpbGVuYW1lIiwgIlByZXZMaW5lIikKbG9jYWwgZnVuY3Rpb24gTmV3Rmls
ZVRhYmxlKEZpbGVuYW1lKQogICAgICAgbG9jYWwgZiA9IGFzc2VydChpby5vcGVuKEZpbGVu
YW1lKSkKICAgICAgIGxvY2FsIFRhYmxlID0ge0ZpbGVuYW1lID0gRmlsZW5hbWUsIFByZXZM
aW5lID0gMX0KICAgICAgIGZvciBsIGluIGY6bGluZXMoKSBkbwogICAgICAgICAgICAgIFRh
YmxlWyNUYWJsZSArIDFdID0gbAogICAgICAgZW5kCiAgICAgICBhc3NlcnQoZjpjbG9zZSgp
KQogICAgICAgcmV0dXJuIFRhYmxlCmVuZAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi0tIFJl
YWQgZGZhLmMsIGRmYS5oIGFuZCBNYWtlZmlsZS5hbSwgbGluZS1ieS1saW5lLCBpbnRvIHRh
Ymxlcwpsb2NhbCBkZmFjICAgICAgID0gTmV3RmlsZVRhYmxlKCJkZmEuYyIpCmxvY2FsIGRm
YWggICAgICAgPSBOZXdGaWxlVGFibGUoImRmYS5oIikKbG9jYWwgbWFrZWZpbGVhbSA9IE5l
d0ZpbGVUYWJsZSgiTWFrZWZpbGUuYW0iKQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmxvY2Fs
IGZ1bmN0aW9uIHByaW50ZihGb3JtYXQsIC4uLikKICAgICAgICBpby53cml0ZShzdHJpbmcu
Zm9ybWF0KEZvcm1hdCwgLi4uKSkKZW5kCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLS0gRnVu
Y3Rpb24gdG8gaW5kZW50IHRleHQgd2l0aCBlbWJlZGRlZCBuZXdsaW5lcwpsb2NhbCBmdW5j
dGlvbiBJbmRlbnQoVGV4dCwgTGV2ZWwpCiAgICAgICAgbG9jYWwgU3BhY2luZyA9IHN0cmlu
Zy5yZXAoIiAiLCBMZXZlbCkKICAgICAgICByZXR1cm4gU3BhY2luZyAuLiBUZXh0OmdzdWIo
IlxuIiwgIlxuIiAuLiBTcGFjaW5nKQplbmQKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgotLSBI
ZWxwZXIgZnVuY3Rpb24gdG8gc2ltcGxpZnkgZXh0cmFjdGluZyBsaW5lcyAocGFyYWdyYXBo
KHMpKSBhcyBhCi0tIG5ld2xpbmUtdGVybWluYXRlZCBzdHJpbmcuCmxvY2FsIGZ1bmN0aW9u
IExpbmVzKFRhYmxlLCBTdGFydCwgRW5kKQotLSAgICAgICAgRW5kID0gRW5kIG9yIFN0YXJ0
CiAgICAgICAgcmV0dXJuIHRhYmxlLmNvbmNhdChUYWJsZSwgIlxuIiwgU3RhcnQsIEVuZCkg
Li4gIlxuIgplbmQKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpsb2NhbCBTZWdzID0ge1NlZ0xp
c3QgPSB7fSwgU2VnU2VxID0ge319CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLS0gRnVuY3Rp
b24gdG8gY3JlYXRlIGEgdGFnZ2VkIGVudHJ5IHdpdGggYSBjb3B5IG9mIGxpbmVzIGZyb20g
YQotLSBzb3VyY2UgZmlsZQpmdW5jdGlvbiBTZWdzOlRhZyhOYW1lLCBTdGFydCwgRW5kKQog
ICAgICAgIGlmIHNlbGYuU2VnTGlzdFtOYW1lXSB+PSBuaWwgdGhlbgogICAgICAgICAgICAg
ICAgZXJyb3IoXygiZHVwbGljYXRlIHNlZ21lbnQgdGFnOiAiIC4uIE5hbWUpKQogICAgICAg
IGVuZAogICAgICAgIEVuZCA9IEVuZCBvciBTdGFydAoKICAgICAgICAtLSBDb252ZXJ0IHNl
Y3Rpb24tb2Zmc2V0IGxpbmUgbnVtYmVycyBpbnRvIGFic29sdXRlIHZhbHVlcwogICAgICAg
IGxvY2FsIEN1cnJlbnRTZWN0aW9uID0gU2VjdGlvbkluZm9bI1NlY3Rpb25JbmZvXQogICAg
ICAgIGxvY2FsIFNvdXJjZSA9IEN1cnJlbnRTZWN0aW9uLlNvdXJjZQogICAgICAgIFN0YXJ0
ID0gU3RhcnQgKyBDdXJyZW50U2VjdGlvbi5MaW5lTnIKICAgICAgICBFbmQgICA9IEVuZCAg
ICsgQ3VycmVudFNlY3Rpb24uTGluZU5yCgogICAgICAgIGxvY2FsIEVudHJ5ID0KICAgICAg
ICAgICAgICAgIHtOYW1lICAgID0gTmFtZSwKICAgICAgICAgICAgICAgICBTb3VyY2UgID0g
U291cmNlLAogICAgICAgICAgICAgICAgIFN0YXJ0ICAgPSBTdGFydCwKICAgICAgICAgICAg
ICAgICBFbmQgICAgID0gRW5kLAogICAgICAgICAgICAgICAgIFJhd1RleHQgPSBMaW5lcyhT
b3VyY2UsIFN0YXJ0LCBFbmQpLAogICAgICAgICAgICAgICAgIFNlY3Rpb24gPSBDdXJyZW50
U2VjdGlvbiwKICAgICAgICB9CgogICAgICAgIC0tIEFzc3VtZSB0aGF0IHRhZ3MgYXJlIGlz
c3VlZCBpbiBhc2NlbmRpbmctbGluZS1udW1iZXIgc2VxdWVuY2UsCiAgICAgICAgLS0gYW5k
IHNvIGtlZXAgdHJhY2sgb2YgaW50ZXJ2ZW5pbmcgdGV4dCBiZXR3ZWVuIHRhZ2dlZCBzZWN0
aW9ucy4KICAgICAgICAtLSAoVGhlc2Ugc2hvdWxkICpvbmx5KiBiZSBibGFuayBsaW5lczsg
YW55dGhpbmcgZWxzZSBpcyBhbiBlcnJvci4pCiAgICAgICAgaWYgU291cmNlLlByZXZMaW5l
IDwgU3RhcnQgdGhlbgogICAgICAgICAgICAgICAgRW50cnkuUHJldlRleHQgPSBMaW5lcyhT
b3VyY2UsIFNvdXJjZS5QcmV2TGluZSwgU3RhcnQgLSAxKQogICAgICAgIGVuZAogICAgICAg
IFNvdXJjZS5QcmV2TGluZSA9IEVuZCArIDEKCiAgICAgICAgLS0gUmVjb3JkIG5ldyBlbnRy
eSwgYm90aCBieSBuYW1lIGFuZCBieSBzZXF1ZW5jZQogICAgICAgIHNlbGYuU2VnTGlzdFtO
YW1lXSA9IEVudHJ5CiAgICAgICAgc2VsZi5TZWdTZXFbI3NlbGYuU2VnU2VxICsgMV0gPSBF
bnRyeQoKLS1bWyBXYXJuaW5nIHR1cm5lZCBvZmYgZm9yIHRoZSBtb21lbnQ6IEl0J3Mgbm90
IHRvcCBvZiB0aGUgcHJpb3JpdHkgbGlzdC4KICAgICAgICAtLSBSZXBvcnQgaG9yaXpvbnRh
bCB0YWJzIGluIHRoZSBzb3VyY2UKICAgICAgICBpZiBFbnRyeS5SYXdUZXh0Om1hdGNoKCJc
dCIpIHRoZW4KICAgICAgICAgICAgICAgIHByaW50KCJXYXJuaW5nOiBTZWdtZW50ICIgLi4K
ICAgICAgICAgICAgICAgICAgICAgICAgIEVudHJ5Lk5hbWUgLi4iIGNvbnRhaW5zIHRhYnMu
IikKICAgICAgICBlbmQKLS1dXQplbmQKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgotLVtbICAt
LSBERUJVRzogT21pdHRlZCBmb3Igbm93LCBidXQgaXQncyB2ZXJ5IGhhbmR5IHRvIGhhdmUg
d2hlbgotLSBtZXJnaW5nIGdpdCBtYXN0ZXIgY2hhbmdlcyB3aXRoIGxvY2FsIGJyYW5jaCBj
aGFuZ2VzLgoKLS0gUHJpbnQgb3V0IGFsbCB0aGUgc2VnbWVudHMgZXh0cmFjdGVkIChvciBt
YW51ZmFjdHVyZWQpIHNvIGZhcgpmb3IgXywgU2VnIGluIGlwYWlycyhTZWdzLlNlZ1NlcSkg
ZG8KICAgICAgICBwcmludGYoIiVzOlxuJXNcbiIsIFNlZy5OYW1lLCBJbmRlbnQoU2VnLlJh
d1RleHQsIDgpKQplbmQKLS1dXQoKLS0gW1sgXV0gLS0gRW1hY3MgcHJldHR5LXByaW50aW5n
IGdldCBjb25mdXNlZCBpZiB0aGlzIGxpbmUgaXNuJ3QgcHJlc2VudC4KCi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCgotLSBDaGVjayB0aGF0IG5vIGltcG9ydGFudCB0ZXh0IChhbnl0aGluZyBv
dGhlciB0aGFuIG5ld2xpbmVzKSBoYXMKLS0gYmVlbiBsZWZ0IHVudGFnZ2VkIChpdCBpcyBj
YXB0dXJlZCBieSBUYWcncyBQcmV2VGV4dCBmYWNpbGl0eSkuCmZvciBfLCBTZWcgaW4gaXBh
aXJzKFNlZ3MuU2VnU2VxKSBkbwogICAgICAgIGxvY2FsIFByZXZUZXh0ID0gU2VnLlByZXZU
ZXh0CiAgICAgICAgaWYgUHJldlRleHQgYW5kIG5vdCBQcmV2VGV4dDptYXRjaCgiXlxuKiQi
KSB0aGVuCiAgICAgICAgICAgICAgICAtLSBXZSd2ZSBmb3VuZCBzb21lIHVudGFnZ2VkIHRl
eHQKICAgICAgICAgICAgICAgIHByaW50ZigiRVJST1I6ICVzOiVkOiVxIGhhcyBwcmVjZWRp
bmcgb21pdHRlZCB0ZXh0OiBcbiVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgIFNlZy5T
b3VyY2UuRmlsZW5hbWUsIFNlZy5TdGFydCwKICAgICAgICAgICAgICAgICAgICAgICBTZWcu
TmFtZSwgSW5kZW50KFByZXZUZXh0LCA4KSkKICAgICAgICBlbmQKZW5kCgotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQoKLS0tIFJlY29uc3RydWN0RmlsZSAtLSBSZWNvbnN0cnVjdCBmaWxlIGZy
b20gdGFnZ2VkIGZyYWdtZW50cwotLSBUaGlzIGZ1bmN0aW9uIGlzIGEgc2FuaXR5IGNoZWNr
IHRoYXQgd2UgY2FuIGZhaXRoZnVsbHkgcmUtYXNzZW1ibGUKLS0gdGhlIG9yaWdpbmFsIHNv
dXJjZSBmaWxlIGZyb20gdGhlIGJyb2tlbi1kb3duIHBpZWNlcy4gIElmIG5vdCwgYW55Ci0t
IGZ1cnRoZXIgcHJvY2Vzc2luZyBoYXMgYSBoaWdoZXIgcHJvYmFiaWxpdHkgb2YgaGF2aW5n
IGRlZmVjdHMuCmxvY2FsIGZ1bmN0aW9uIFJlY29uc3RydWN0RmlsZShTb3VyY2UpCiAgICAg
ICAgLS0gRm9ybSBhIHNpbXBsZSBmaWxlbmFtZSBmb3IgdGhlIHJlY29uc3RydWN0aW9uCiAg
ICAgICAgbG9jYWwgUmVjb25zRmlsZSA9ICJyZWNvbnN0cnVjdGVkLSIgLi4gU291cmNlLkZp
bGVuYW1lCiAgICAgICAgbG9jYWwgZiA9IGFzc2VydChpby5vcGVuKFJlY29uc0ZpbGUsICJ3
IikpCgogICAgICAgIC0tIFNlYXJjaCBmb3IgZWFjaCBzbmlwcGV0IGZyb20gdGhlIHNwZWNp
ZmllZCBzb3VyY2UsIGFuZCB3cml0ZQogICAgICAgIC0tIGl0IChwbHVzIGFueSBwcmVjZWRp
bmcgdGV4dCkgdG8gdGhlIGZpbGUuCiAgICAgICAgZm9yIF8sIFNlZyBpbiBpcGFpcnMoU2Vn
cy5TZWdTZXEpIGRvCiAgICAgICAgICAgICAgICBpZiBTZWcuU291cmNlID09IFNvdXJjZSB0
aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIFNlZy5QcmV2VGV4dCB0aGVuCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGY6d3JpdGUoU2VnLlByZXZUZXh0
KSkKICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgICAg
IGFzc2VydChmOndyaXRlKFNlZy5SYXdUZXh0KSkKICAgICAgICAgICAgICAgIGVuZAogICAg
ICAgIGVuZAogICAgICAgIGFzc2VydChmOmNsb3NlKCkpCmVuZAoKLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KCi0tLSBXcml0ZUZpbGUgLS0gUmVwbGFjZSBmaWxlIHdpdGggc2VnbWVudHMgc3Rv
cmVkIGludGVybmFsbHkKLS0gVGhpcyBpcyBhIHBsYWNlaG9sZGVyIGZ1bmN0aW9uIHRvIHVz
ZSB3aGVuIG9ubHkgbWlub3IgZWRpdHMgdG8gYQotLSBmaWxlIGFyZSBtYWRlLCBhbmQgdGhl
IHNlZ21lbnQgbGlzdCBjYW4gc3RpbGwgYmUgdXNlZCBpbiBvcmRlci4KbG9jYWwgZnVuY3Rp
b24gV3JpdGVGaWxlKFNvdXJjZSkKICAgICAgICAtLSBGb3JtIGEgc2ltcGxlIGZpbGVuYW1l
IGZvciB0aGUgcmVjb25zdHJ1Y3Rpb24KICAgICAgICBsb2NhbCBmID0gYXNzZXJ0KGlvLm9w
ZW4oU291cmNlLkZpbGVuYW1lLCAidyIpKQoKICAgICAgICAtLSBTZWFyY2ggZm9yIGVhY2gg
c25pcHBldCBmcm9tIHRoZSBzcGVjaWZpZWQgc291cmNlLCBhbmQgd3JpdGUKICAgICAgICAt
LSBpdCAocGx1cyBhbnkgcHJlY2VkaW5nIHRleHQpIHRvIHRoZSBmaWxlLgogICAgICAgIGZv
ciBfLCBTZWcgaW4gaXBhaXJzKFNlZ3MuU2VnU2VxKSBkbwogICAgICAgICAgICAgICAgaWYg
U2VnLlNvdXJjZSA9PSBTb3VyY2UgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBpZiBT
ZWcuUHJldlRleHQgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2Vy
dChmOndyaXRlKFNlZy5QcmV2VGV4dCkpCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZAog
ICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZjp3cml0ZShTZWcuUmF3VGV4dCkpCiAg
ICAgICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgICAgICBhc3NlcnQoZjpjbG9zZSgp
KQplbmQKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgotLS0gUmF3VGV4dCAtLSBSZXR1cm4gcmF3
IHRleHQgYXNzb2NpYXRlZCB3aXRoIG5hbWVkIHNlZ21lbnQKLS0gQHBhcmFtIFRhZyAtLSBU
YWcgZ2l2ZW4gdG8gc2VnbWVudCB1cG9uIGNyZWF0aW9uLgotLSBOb3RlIHRoYXQgdGhpcyBm
dW5jdGlvbiBkb2VzIG5vdCByZXBvcnQgYW55IHdoaXRlc3BhY2UgdGhhdCBtYXkKLS0gcHJl
Y2VkZSB0aGUgc2VnbWVudC4KbG9jYWwgZnVuY3Rpb24gUmF3VGV4dChUYWcpCiAgICAgICAg
bG9jYWwgUmF3VGV4dCA9IFNlZ3MuU2VnTGlzdFtUYWddLlJhd1RleHQKICAgICAgICBpZiBu
b3QgUmF3VGV4dCB0aGVuCiAgICAgICAgICAgICAgICBlcnJvcihfKCI6UmF3VGV4dDogTm9u
ZXhpc3RlbnQgdGFnIHJlcXVlc3RlZDogIiAuLiBUYWcpKQogICAgICAgIGVuZAogICAgICAg
IHJldHVybiBSYXdUZXh0CmVuZAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi0tLSBFZGl0ZWRU
ZXh0IC0tIE9idGFpbiByYXcgdGV4dCBib2R5IG9mIHRhZywgd2l0aCBhcHBsaWVkIGVkaXRz
Ci0tIEBwYXJhbSBUYWdOYW1lIC0tIFRhZyBuYW1lIG9mIGNvZGUgc25pcHBldAotLSBAcGFy
YW0gLi4uIC0tIFBhdHRlcm4vU3Vic3QgcGFpcnMsIGUuZy4gImNoYXJjbGFzcyBjIiwgImNo
YXJjbGFzcyAqYyIKLS0gQHJldHVybiBNb2RpZmllZCBmdW5jdGlvbiBkZWNsYXJhdGlvbi4K
LS0gVGhpcyBmdW5jdGlvbiBzaW1wbGlmaWVzIHRoZSBjb2RlIG5lZWRlZCB0byBtYWtlIGds
b2JhbAotLSBzZWFyY2gtYW5kLXJlcGxhY2UgY2hhbmdlcyBvbiBzb3VyY2UgZmlsZXMuICBT
b21lIGNhcmUgYW5kIHByZWNpc2lvbgotLSBpcyBuZWVkZWQgaW4gdGhlIHNvdXJjZSBzZWxl
Y3Rpb24gdG8gYXZvaWQgbWFraW5nIHVuaW50ZW5kZWQgY2hhbmdlcy4KbG9jYWwgZnVuY3Rp
b24gRWRpdGVkVGV4dChUYWdOYW1lLCAuLi4pCiAgICAgICAgbG9jYWwgaCA9IFJhd1RleHQo
VGFnTmFtZSkKCiAgICAgICAgIC0tIElmIHRoZXJlIGFyZSBvcHRpb25hbCBwYXJhbWV0ZXJz
LCB0cmVhdCB0aGVtIGFzIHBhdHRlcm4vc3Vic3QKICAgICAgICAgLS0gcGFpcnMsIGFuZCBh
cHBseSB0aGVtIHRvIHRoZSBoZWFkZXIuCiAgICAgICAgIGxvY2FsIGFyZ3MgPSB7Li4ufQog
ICAgICAgICBpZiAjYXJncyAlIDIgfj0gMCB0aGVuCiAgICAgICAgICAgICAgICAgZXJyb3Io
CiAgICI6RWRpdGVkVGV4dDogUGF0dGVybiBzdXBwbGllZCB3aXRob3V0IGEgbWF0Y2hpbmcg
c3Vic3QgaXRlbSIpCiAgICAgICAgIGVuZAogICAgICAgICBmb3IgaSA9IDEsICNhcmdzLCAy
IGRvCiAgICAgICAgICAgICAgICAgaCA9IGg6Z3N1YihhcmdzW2ldLCBhcmdzW2kgKyAxXSkK
ICAgICAgICAgZW5kCiAgICAgICAgIHJldHVybiBoCmVuZAoKLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KCi0tLSBUZXh0U3Vic3QgLS0gTGlrZSBnc3ViKCksIGJ1dCB3aXRoIG5vIHJlZ2V4cCBw
YXR0ZXJuIG1hdGNoaW5nCi0tIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgZm9yIHJld3Jp
dGluZyBibG9ja3Mgb2YgY29kZSwgd2hlcmUgdGhlCi0tIG9yaWdpbmFsIGhhcyBsb3RzIG9m
IHBhdHRlcm4tbWFnaWMgY2hhcmFjdGVycyBzdWNoIGFzICItIiwgIigiLCAiJSIKLS0gZXRj
LiAgV2UgdXNlIHN0cmluZy5maW5kKCkgYXMgaXQgaGFzIGEgInBsYWluIHRleHQiIHNlYXJj
aCBvcHRpb24uCmxvY2FsIGZ1bmN0aW9uIFRleHRTdWJzdChPcmlnaW5hbCwgU2VhcmNoLCBS
ZXBsYWNlbWVudCkKICAgICAgICBsb2NhbCBQb3MgPSAxCiAgICAgICAgbG9jYWwgVGV4dCA9
IE9yaWdpbmFsCiAgICAgICAgbG9jYWwgRm91bmQgPSBmYWxzZQogICAgICAgIHdoaWxlIHRy
dWUgZG8KICAgICAgICAgICAtLSBGaW5kIHRoZSBzdGFydCBhbmQgZW5kaW5nIGluZGljZXMg
b2YgU2VhcmNoIGluIHRoZSBmaWxlCiAgICAgICAgICAgbG9jYWwgU3RhcnQsIEVuZCA9IFRl
eHQ6ZmluZChTZWFyY2gsIFBvcywgdHJ1ZSk7Ci0tICAgICAgICAgICBwcmludCgiU3RhcnQs
IEVuZCwgUG9zLCBTZWFyY2g6ICIsIFN0YXJ0LCBFbmQsIFBvcywgU2VhcmNoKQogICAgICAg
ICAgIGlmIG5vdCBTdGFydCB0aGVuCiAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICBl
bmQKICAgICAgICAgICBGb3VuZCA9IHRydWUKCiAgICAgICAgICAgLS0gU3BsaWNlIHRoZSBy
ZXBsYWNlbWVudCBpbiwgaW4gcGxhY2Ugb2YgdGhlIHNlYXJjaCB0ZXh0CiAgICAgICAgICAg
VGV4dCA9IFRleHQ6c3ViKDEsIFN0YXJ0IC0gMSkgLi4gUmVwbGFjZW1lbnQKICAgICAgICAg
ICAgICAgICAgLi4gVGV4dDpzdWIoRW5kICsgMSkKICAgICAgICAgICBQb3MgPSBTdGFydCAr
ICNSZXBsYWNlbWVudAogICAgICAgIGVuZAoKICAgICAgICBhc3NlcnQoRm91bmQsICJUZXh0
U3Vic3QgZXhwZWN0ZWQgYXQgbGVhc3QgMSBtYXRjaDogIiAuLiBTZWFyY2gpCgogICAgICAg
IHJldHVybiBUZXh0CmVuZAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi0tLSBXcml0ZUV4dGVy
bkRlY2wgLS0gV3JpdGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gdG8gZ2l2ZW4gZmlsZS4KLS0g
QHBhcmFtIEZpbGUgRmlsZSAoc3RyZWFtKSBvYmplY3QgdG8gcmVjZWl2ZSBlZGl0ZWQgZGVj
bGFyYXRpb24uCi0tIEBQYXJhbSBEZWNsYXJhdGlvbiBGdW5jdGlvbiBkZWNsYXJhdGlvbiAo
d2l0aCBubyBwcmVjZWRpbmcgbGlmZXRpbWUKLS0gICAgICAgIHNwZWNpZmllciwgYW5kIGFs
c28gd2l0aG91dCBhIHRyYWlsaW5nIHNlbWljb2xvbikuCi0tIERlY2xhcmF0aW9ucyBmb3Ig
Z2xvYmFsbHktdmlzaWJsZSAoaW50ZXJmYWNlKSBmdW5jdGlvbnMgbmVlZCB0byBiZQotLSBl
bWl0dGVkIGF0IGxlYXN0IHR3aWNlOiAgT25jZSBpbiB0aGUgaGVhZGVyIGZpbGUsIGFuZCBh
Z2FpbiBpbiB0aGUKLS0gYm9keSBvZiB0aGUgaW1wbGVtZW50aW5nIG1vZHVsZS4gIFRoaXMg
ZnVuY3Rpb24gZWRpdHMgdGhlIHRleHQgb2YKLS0gdGhlIGRlY2xhcmF0aW9uIHRvIGNvbmZv
cm0gdG8gdGhlIHJlcXVpcmVtZW50ZXMgb2YgdGhlIGhlYWRlciBmaWxlLAotLSBuYW1lbHks
IGEgcHJlY2VkaW5nICJleHRlcm4iIGtleXdvcmQsIHBsdXMgYSB0cmFpbGluZyBzZW1pY29s
b24KLS0gYmVmb3JlIHRoZSBmaW5hbCBuZXdsaW5lLiAgVGhlIGVkaXRlZCB0ZXh0IGlzIHRo
ZW4gd3JpdHRlbiB0byB0aGUKLS0gZ2l2ZW4gZmlsZSwgYWxvbmcgd2l0aCB0aGUgdXN1YWwg
YXNzZXJ0IGVycm9yIGNoZWNraW5nLgpsb2NhbCBmdW5jdGlvbiBXcml0ZUV4dGVybkRlY2wo
RmlsZSwgRGVjbGFyYXRpb24pCiAgICAgICAgbG9jYWwgQ29tbWVudCwgRGVjbAogICAgICAg
IENvbW1lbnQsIERlY2wgPSBEZWNsYXJhdGlvbjptYXRjaCgiKC8lKi4tJSovXG4rKSguKiki
KQogICAgICAgIGlmIG5vdCBEZWNsIHRoZW4KICAgICAgICAgICAgICAgIENvbW1lbnQgPSAi
IgogICAgICAgICAgICAgICAgRGVjbCA9IERlY2xhcmF0aW9uCiAgICAgICAgZW5kCgogICAg
ICAgIC0tIEFkZCAiZXh0ZXJuIiBiZWZvcmUgdGhlIHRleHQgb2YgdGhlIGRlY2xhcmF0aW9u
CiAgICAgICAgRGVjbCA9IERlY2w6Z3N1YigiXiIsICJleHRlcm4gIikKCiAgICAgICAtLSBJ
bnNlcnQgYSBzZW1pY29sb24gYmVmb3JlIHRoZSBmaW5hbCBuZXdsaW5lIG9mIHRoZSBkZWNs
YXJhdGlvbi4KICAgICAgIERlY2wgPSBEZWNsOmdzdWIoIlxuJXMqJCIsICI7XG4iKQoKICAg
ICAgIC0tIEZpbmFsbHksIHdyaXRlIHRoZSByZXN1bHQgdG8gdGhlIGZpbGUsIHdpdGggZXJy
b3IgY2hlY2tpbmcKICAgICAgIGFzc2VydChGaWxlOndyaXRlKENvbW1lbnQsIERlY2wsICJc
biIpKQplbmQKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgotLSBQcm9jZXNzIGRmYS5oClNlY3Rp
b24oImRmYS5oIGhlYWRlciIsIGRmYWgsIDApCgpTZWdzOlRhZygiRGVzY3JpcHRpb24uZGZh
aCIsICAgICAgICAgICAgICAgMSkKU2VnczpUYWcoIkNvcHlyaWdodC5kZmFoIiwgICAgICAg
ICAgICAgICAgIDIpClNlZ3M6VGFnKCJMaWNlbnNlV2FycmFudHkuZGZhaCIsICAgICAgICAg
ICA0LCAgMTcpClNlZ3M6VGFnKCJBdXRob3JzLmRmYWgiLCAgICAgICAgICAgICAgICAgIDE5
LCAgMTkpCgpTZWN0aW9uKCJkZmEuaDppbmNsdWRlcyIsIGRmYWgsIDIxKQpTZWdzOlRhZygi
cmVnZXguaCIsICAgICAgICAgICAgICAgICAgICAgICAgMCkKU2VnczpUYWcoInN0ZGJvb2wu
aCIsICAgICAgICAgICAgICAgICAgICAgIDEpClNlZ3M6VGFnKCJzdGRkZWYuaCIsICAgICAg
ICAgICAgICAgICAgICAgICAyKQoKU2VjdGlvbigic3RydWN0IGRmYW11c3QgZGVmbiIsIGRm
YWgsIDI1KQpTZWdzOlRhZygiZGZhbXVzdC1zdHJ1Y3QgZGVzY3JpcHRpb24iLCAgICAgMCwg
ICAxKQpTZWdzOlRhZygiZGZhbXVzdC1zdHJ1Y3QgZGVjbGFyYXRpb24iLCAgICAgMiwgICA5
KQoKU2VjdGlvbigiZGZhIG9wYXF1ZSBzdHJ1Y3QiLCBkZmFoLCAzNikKU2VnczpUYWcoInN0
cnVjdCBkZmEiLCAgICAgICAgICAgICAgICAgICAgIDAsICAgMSkKClNlY3Rpb24oImRmYS5o
OkVudHJ5IFBvaW50cyIsIGRmYWgsIDM5KQpTZWdzOlRhZygiRW50cnkgUG9pbnRzIGhlYWRl
ciIsICAgICAgICAgICAgMCkKU2VnczpUYWcoImRmYWFsbG9jIGRlc2NyaXB0aW9uIiwgICAg
ICAgICAgIDIsICAgNCkKU2VnczpUYWcoImRmYWFsbG9jIGRlY2xhcmF0aW9uIiwgICAgICAg
ICAgIDUpClNlZ3M6VGFnKCJkZmFtdXN0cyBkZXNjcmlwdGlvbiIsICAgICAgICAgICA3KQpT
ZWdzOlRhZygiZGZhbXVzdHMgZGVjbGFyYXRpb24iLCAgICAgICAgICAgOCkKU2VnczpUYWco
ImRmYXN5bnRheCBkZWNsYXJhdGlvbiIsICAgICAgICAgMTAsICAxMykKU2VnczpUYWcoImRm
YWNvbXAgZGVjbGFyYXRpb24iLCAgICAgICAgICAgMTUsICAxOCkKClNlY3Rpb24oImRmYWV4
ZWMgZW50cnkgcG9pbnQiLCBkZmFoLCA1OSkKU2VnczpUYWcoImRmYWV4ZWMgZGVzY3JpcHRp
b24iLCAgICAgICAgICAgIDAsICAxMSkKU2VnczpUYWcoImRmYWV4ZWMgZGVjbGFyYXRpb24i
LCAgICAgICAgICAgMTIsICAxMykKClNlY3Rpb24oIlJlbWFpbmluZyBlbnRyeSBwb2ludHMi
LCBkZmFoLCA3NCkKU2VnczpUYWcoImRmYXN1cGVyc2V0IGRlY2xhcmF0aW9uIiwgICAgICAg
IDAsICAgNSkKU2VnczpUYWcoImRmYWlzZmFzdCBkZWNsYXJhdGlvbiIsICAgICAgICAgIDYs
ICAgNykKU2VnczpUYWcoImRmYWZyZWUgZGVjbGFyYXRpb24iLCAgICAgICAgICAgIDksICAx
MCkKClNlY3Rpb24oIlNwZWNpYWxpc3QgZW50cnkgcG9pbnRzIiwgZGZhaCwgODYpClNlZ3M6
VGFnKCJFbnRyeSBwb2ludHMgZm9yIHBlb3BsZSB3aG8ga25vdyIsIDApClNlZ3M6VGFnKCJk
ZmFpbml0IGRlY2xhcmF0aW9uIiwgICAgICAgICAgICAyLCAgIDMpClNlZ3M6VGFnKCJkZmFw
YXJzZSBkZWNsYXJhdGlvbiIsICAgICAgICAgICA1LCAgIDYpClNlZ3M6VGFnKCJkZmFhbmFs
eXplIGRlY2xhcmF0aW9uIiwgICAgICAgICA4LCAgMTApClNlZ3M6VGFnKCJkZmFzdGF0ZSBk
ZWNsYXJhdGlvbiIsICAgICAgICAgIDEyLCAgMTQpCgpTZWN0aW9uKCJkZmFoIEVycm9yIGhh
bmRsaW5nIiwgZGZhaCwgMTAyKQpTZWdzOlRhZygiRXJyb3IgaGFuZGxpbmcgaW50cm9kdWN0
aW9uIiwgICAgMCkKU2VnczpUYWcoImRmYXdhcm4gZGVjbGFyYXRpb24iLCAgICAgICAgICAg
IDIsICAgNikKU2VnczpUYWcoImRmYWVycm9yIGRlY2xhcmF0aW9uIiwgICAgICAgICAgIDgs
ICAxMSkKClNlY3Rpb24oImV4cG9zZS11c2luZy11dGY4IiwgZGZhaCwgMTE1KQpTZWdzOlRh
ZygidXNpbmctdXRmOC1leHRlcm4iLCAgICAgICAgICAgICAgMCkKCi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCgotLSBQcm9jZXNzIGRmYS5jClNlY3Rpb24oImRmYS5jIGhlYWRlciIsIGRmYWMs
IDApCgpTZWdzOlRhZygiRGVzY3JpcHRpb24uZGZhYyIsICAgICAgICAgICAgICAgMSkKU2Vn
czpUYWcoIkNvcHlyaWdodC5kZmFjIiwgICAgICAgICAgICAgICAgIDIsICAgMykKU2VnczpU
YWcoIkxpY2Vuc2VXYXJyYW50eS5kZmFjIiwgICAgICAgICAgIDUsICAxOCkKU2VnczpUYWco
IkF1dGhvcnMuZGZhYyIsICAgICAgICAgICAgICAgICAgMjAsICAyMSkKU2VnczpUYWcoIkNv
bmZpZ0VudiIsICAgICAgICAgICAgICAgICAgICAgMjMpClNlZ3M6VGFnKCJPd25EZWZzLmRm
YWMiLCAgICAgICAgICAgICAgICAgIDI1KQpTZWdzOlRhZygiR2xvYmFsSW5jbHVkZXMiLCAg
ICAgICAgICAgICAgICAyNywgIDMzKQoKU2VjdGlvbigidmFyaW91cy1tYWNyb3MtYW5kLWhl
bHBlci1mbnMiLCBkZmFjLCAzNSkKU2VnczpUYWcoIlNUUkVRIiwgICAgICAgICAgICAgICAg
ICAgICAgICAgIDApClNlZ3M6VGFnKCJJU0FTQ0lJRElHSVQiLCAgICAgICAgICAgICAgICAg
ICAyLCAgMTApClNlZ3M6VGFnKCJOYXR1cmFsTGFuZ1N1cHBvcnQiLCAgICAgICAgICAgIDEy
LCAgMTMpCgpTZWdzOlRhZygiZGZhLXdjaGFyLXdjdHlwZSBpbmNsdWRlIiwgICAgICAxNSwg
IDE2KQoKU2VnczpUYWcoInhhbGxvYyIsICAgICAgICAgICAgICAgICAgICAgICAgMTgpIC0t
IG1hbGxvYytyZWFsbG9jK09PTSBjaGVjayBmbnMKCi0tICpJbml0aWFsIHBhcnQqIG9mIGNv
ZGUgdG8gbW9kZWwgY2hhcmFjdGVyIGNsYXNzZXMgYXMgYml0IHZlY3RvcnMgaW4gaW50cwpT
ZWN0aW9uKCJJbml0aWFsLWNoYXJjbGFzcy1zZXR1cC1jb2RlIiwgZGZhYywgNTUpClNlZ3M6
VGFnKCJOb0hQVVhCaXRPcHMiLCAgICAgICAgICAgICAgICAgICAwLCAgIDYpClNlZ3M6VGFn
KCJOT1RDSEFSIiwgICAgICAgICAgICAgICAgICAgICAgICA4LCAgIDkpClNlZ3M6VGFnKCJj
aGFyY2xhc3Nfd29yZCB0eXBlZGVmIiwgICAgICAgIDExLCAgMTMpCi0tIHh4UmVtb3ZlZCBT
ZWdzOlRhZygiSU5UQklUUyIsICAgICAgICAgICAgICAgICAgICAgICAxNiwgIDE5KQpTZWdz
OlRhZygiQ0hBUkNMQVNTX1dPUkRfQklUUyIsICAgICAgICAgICAxNSwgIDE3KQpTZWdzOlRh
ZygiQ0hBUkNMQVNTX1dPUkRfTUFTSyIsICAgICAgICAgICAxOSwgIDIxKQpTZWdzOlRhZygi
Q0hBUkNMQVNTX1dPUkRTIGVudW0iLCAgICAgICAgICAyMywgIDI3KQpTZWdzOlRhZygiY2hh
cmNsYXNzX3R5cGVkZWYiLCAgICAgICAgICAgICAyOSwgIDMwKQpTZWdzOlRhZygidG9fdWNo
YXJfdHlwZWNoZWNrIiwgICAgICAgICAgICAzMiwgIDM5KQoKU2VjdGlvbigiQ29udGV4dHMi
LCBkZmFjLCA5NikKLS0gU29tZXdoYXQgaGFpcnkgY29udGV4dCBtYWNoaW5lcnk6IEluaXRp
YWwgY2hhciBjbGFzc2lmaWNhdGlvbiBiaXRzClNlZ3M6VGFnKCJDb250ZXh0X0JpdG1hc2tz
IiwgICAgICAgICAgICAgICAwLCAgMTUpCi0tIENvbnRleHQgbWFjaGluZXJ5OiBDb25zdHJh
aW50cyB0byBtYXRjaCBieSAoQ3JpdGVyaWEsIFByZXZDaCwgQ3VyckNoKQotLSBzcGVjaWZp
Y2F0aW9ucy4KU2VnczpUYWcoIlNVQ0NFRURTX0lOX0NPTlRFWFQiLCAgICAgICAgICAgMTcs
ICAzOSkKLS0gQ29udGV4dCBtYWNoaW5lcnk6IE1hY3JvcyB0byBkZWZpbmUgd2hhdCBhIGNv
bnN0cmFpbnQgZGVwZW5kcyB1cG9uClNlZ3M6VGFnKCJQUkVWXypfREVQRU5ERU5UIiwgICAg
ICAgICAgICAgIDQxLCAgNDkpCi0tIENvbnRleHQgbWFjaGluZXJ5OiBGaW5hbGx5LCB0aGUg
Y29uc3RyYWludCBtYWdpYyBudW1iZXJzIHRoZW1zZWx2ZXM6Ci0tIEJpdCA4LTExOiBWYWxp
ZCBjb250ZXh0cyB3aGVuIG5leHQgaXMgQ1RYX05FV0xJTkU7Ci0tIEJpdCA0LTc6ICBWYWxp
ZCBjb250ZXh0cyB3aGVuIG5leHQgaXMgQ1RYX0xFVFRFUjsgYW5kCi0tIEJpdCAwLTM6ICBW
YWxpZCBjaW50ZXh0cyB3aGVuIG5leHQgaXMgQ1RYX05PTkUuCi0tIE5vdGUgdGhhdCAiQ1RY
X05PTkUiIHByb2JhYmx5IHNob3VsZCBiZSBjYWxsZWQgIkNUWF9PVEhFUlMiLCBhbmQKLS0g
ZGVmaW5lZCBhZnRlciBDVFhfTkVXTElORSBhbmQgQ1RYX0xFVFRFUiwgYnV0IGJlZm9yZSBD
VFhfQUxMClNlZ3M6VGFnKCJDb250ZXh0X01BR0lDX05VTVMiLCAgICAgICAgICAgIDUxLCAg
NjEpCgpTZWN0aW9uKCJMZXhpY2FsIFRva2VucyIsIGRmYWMsIDE1OSkKLS0gPz8gZG9lcyB0
b2tlbiBuZWVkIHRvIGJlIHB0cmRpZmZfdD8gIFNob3VsZCB3ZSBzZXBhcmF0ZSBjb21tZW50
IGZyb20KLS0gY29kZT8KU2VnczpUYWcoIlJlZ2V4cFRva2VuVHlwZSIsICAgICAgICAgICAg
ICAgIDAsICAgNCkKCi0tIExpc3Qgb2YgYWxsIHByZWRlZmluZWQgdG9rZW5zLiAgSW5pdGlh
bGx5LCB3ZSBtZXJlbHkganVzdCBncmFiIGFsbAotLSB0aGUgZGVmaW5pdGlvbnMgaW4gb25l
IHNsYWIuICBIb3dldmVyLCB0aGUgY29tbWVudCBzdGF0ZXMgdGhhdCBzb21lCi0tIHZhbHVl
cyBhcmUgbm90IHJldHVybmVkIGJ5IHRoZSBsZXhpY2FsIGFuYWx5emVyLCBzbyBsYXRlciBv
biwgd2UKLS0gbWF5IG1vdmUgdGhlc2UgaW50byBhIHNlcGFyYXRlIGJsb2NrIHRvIGxpbWl0
IHRoZWlyIHZpc2liaWxpdHkvc2NvcGUuClNlZ3M6VGFnKCJQcmVkZWZpbmVkVG9rZW5zIiwg
ICAgICAgICAgICAgICA2LCAgOTIpCgotLSBSZWNvZ25pemVyICh0b2tlbiBwb3NpdGlvbiAr
IGNvbnN0cmFpbnQpIHBvc2l0aW9uIHR5cGUgKGF0b20pLCBwbHVzCi0tIHRoZSBwb3NpdGlv
bl9zZXQgc3RydWN0dXJlIHRvIGR5bmFtaWNhbGx5IG1hbmFnZSBhcnJheXMgb2YgcG9zaXRp
b24gYXRvbXMuClNlZ3M6VGFnKCJQb3NpdGlvbkF0b20rRHluU2V0IiwgICAgICAgICAgIDk1
LCAxMTEpCgotLSA/PyBTZWN0aW9uIGRlZm4/CgotLSBUaGUgbGVhZl9zZXQgdHlwZSBzZWVt
cyBvdXQtb2YtcGxhY2UgaGVyZTogVGhlIGNvbW1lbnQgcmVmZXJzIHRvCi0tIHBvc2l0aW9u
X3NldCwgYnV0IHRoZSBlbGVtZW50IHBvaW50ZXIgZG9lcyBub3QgKHNpemVfdCksIGFuZCB0
aGUgb25seSB1c2UKLS0gb2YgdGhpcyB0eXBlIGlzIGluIGRmYXN0YXRlIChuZWFyIGxpbmUg
MjUwMCksIGFmdGVyIGxleCBhbmQgcGFyc2UuClNlZ3M6VGFnKCJsZWFmX3NldF90eXBlZGVm
IiwgICAgICAgICAgICAgMTEyLCAxMTgpCgpTZWN0aW9uKCJERkEgc3RhdGUiLCBkZmFjLCAy
NzkpCgotLSBEZWZpbmUgZGZhX3N0YXRlIHR5cGU6IFdoaWxlIHRoZSBsZXhlci9wYXJzZXIg
YXJlIG5vdCBERkEvTkZBLXNwZWNpZmljLAotLSB0aGlzIHR5cGUgZmVhdHVyZXMgcHJvbWlu
ZW50bHkgaW4gcHJvZHVjaW5nIGEgZGZhLXVzYWJsZSBkZXNjcmlwdGlvbiBvZgotLSB0aGUg
c2VhcmNoIGV4cHJlc3Npb24uICBTZWUgZXNwZWNpYWxseSBmaWVsZCAic3RhdGVzIiBvZiAi
c3RydWN0IGRmYSIuClNlZ3M6VGFnKCJkZmFfc3RhdGVfdHlwZWRlZiIsICAgICAgICAgICAg
ICAwLCAgMTUpClNlZ3M6VGFnKCJzdGF0ZV9udW1fdHlwZWRlZiIsICAgICAgICAgICAgIDE2
LCAgMTkpCgpTZWN0aW9uKCJjbGFzc2VzLCBhbGxvYywgbWlzYy4gYml0cyIsIGRmYWMsIDMw
MCkKCi0tIFN0cnVjdCB0byBoYW5kbGUgYm90aCBjaGFyLWJhc2VkIGFuZCB3aWRlLWNoYXIt
YmFzZWQgY2hhcmFjdGVyIGNsYXNzZXMKLS0gImUuZy4sIFthLWNdLCBbWzphbHBoYTpdXSwg
ZXRjLiIKLS0gQ0hBUl9CSVQgaXMgYXQgbWluaW11bSA4LCBidXQgY2FuIGJlIG1vcmUgKGUu
Zy4gMzIgb24gc29tZSBEU1BzKS4KLS0gPz8gQ0hBUl9CSVQgPGxpbWl0cy5oPiB2ZXJzdXMg
Q0hBUkJJVFM/ClNlZ3M6VGFnKCJtYl9jaGFyX2NsYXNzZXNfc3RydWN0IiwgICAgICAgICAw
LCAgMjApCgotLSBNYWluIGRmYSBzdHJ1Y3R1cmUgLS0gKE9jdCAyMDEzIGZpcnN0IGltcHJl
c3Npb246KSBCaXQgb2YgYSBkb2cncwotLSBicmVha2Zhc3Qgd2l0aCBldmVyeXRoaW5nIHRo
cm93biBpbi4gIEluaXRpYWxseSwgbWVyZWx5IGNhcHR1cmUgdGhlCi0tIHdob2xlIHN0cnVj
dHVyZSBpbiBhIHNpbmdsZSBzZWdtZW50LCB0aGVuLCBhcyB0aW1lIGFuZAotLSB1bmRlcnN0
YW5kaW5nIGFkdmFuY2VzLCBicmVhayBpbnRvIG1vcmUgZm9jdXNzZWQgc21hbGxlciBzZWdz
LgpTZWdzOlRhZygiZGZhLXN0cnVjdCBpbnRyby1oZWFkZXIiLCAgICAgICAyMiwgIDI0KQpT
ZWdzOlRhZygiZGZhLXN0cnVjdCBzY2FubmVyIiwgICAgICAgICAgICAyNSwgIDI4KQpTZWdz
OlRhZygiZGZhLXN0cnVjdCBwYXJzZXIiLCAgICAgICAgICAgICAzMCwgIDQzKQpTZWdzOlRh
ZygiZGZhLXN0cnVjdCBwYXJzZXItbXVsdGlieXRlIiwgICA0NCwgIDY0KQpTZWdzOlRhZygi
ZGZhLXN0cnVjdCBtYnJ0b3djX2NhY2hlIiwgICAgICA2NiwgIDY5KQoKU2VjdGlvbigiZGZh
IHN0cnVjdDogYnJhY2tldC9zdGF0ZS9wYXJzZSIsIGRmYWMsIDM3MSkKU2VnczpUYWcoImRm
YS1zdHJ1Y3QgYnJhY2tldC1leHByZXNzaW9ucy1hcnJheSIsIDAsICAgMykKU2VnczpUYWco
ImRmYS1zdHJ1Y3Qgc3VwZXJzZXQiLCAgICAgICAgICAgIDUsICAgNikKU2VnczpUYWcoImRm
YS1zdHJ1Y3Qgc3RhdGUtYnVpbGRlciIsICAgICAgIDgsICAxMSkKU2VnczpUYWcoImRmYS1z
dHJ1Y3QgcGFyc2UtPm5mYSIsICAgICAgICAgMTMsICAyNykKU2VnczpUYWcoImRmYS1zdHJ1
Y3QgZGZhZXhlYyIsICAgICAgICAgICAgMjksICA1MSkKU2VnczpUYWcoImRmYS1zdHJ1Y3Qg
bXVzdHMgbGlzdCIsICAgICAgICAgNTIsICA1NCkKU2VnczpUYWcoImRmYS1zdHJ1Y3QgbWJf
Zm9sbG93cyIsICAgICAgICAgNTUsICA1NikKU2VnczpUYWcoImRmYS1zdHJ1Y3QgbWJfbWF0
Y2hfbGVucyIsICAgICAgNTcsICA1OSkKU2VnczpUYWcoImRmYS1zdHJ1Y3QgY2xvc2luZyBz
eW50YXgiLCAgICAgNjApCgotLSAiU29tZSBtYWNyb3MgZm9yIHVzZXIgYWNjZXNzIHRvIGRm
YSBpbnRlcm5hbHMuICIKU2VjdGlvbigiZGZhIGhlbHBlciBtYWNyb3MgYW5kIGRlY2xzIiwg
ZGZhYywgNDMzKQpTZWdzOlRhZygiZGZhLWFjY2Vzcy1tYWNyb3MtY210IiwgICAgICAgICAg
MCkKU2VnczpUYWcoIkFDQ0VQVElORyIsICAgICAgICAgICAgICAgICAgICAgIDIsICAzKQpT
ZWdzOlRhZygiQUNDRVBUU19JTl9DT05URVhUIiwgICAgICAgICAgICAgNSwgIDcpCgotLSA/
PyBOb3Qgc3VyZSB3aHkgZm9yd2FyZCBkZWNsYXJhdGlvbnMgb2YgZGZhbXVzdCBhbmQgcmVn
ZXhwIGFyZSBoZXJlLgotLSBSZWdleHAgYW5zd2VyOiAgUmVnZXhwIGlzIG5lZWRlZCBpbiBh
dG9tIChMUEFSRU4gcmVnZXhwIFJQQVJFTikuClNlZ3M6VGFnKCJkZmFtdXN0LWZvcndhcmQt
ZGVmIiwgICAgICAgICAgICA5KQpTZWdzOlRhZygicmVnZXhwLWZvcndhcmQtZGVmIiwgICAg
ICAgICAgICAxMCkKCi0tIENvZGUgdG8gbWluaW1pc2UgZXhwZW5zaXZlIGNhbGxzIHRvIG1i
cnRvd2MgYnkgRkVUQ0hfV0MuICBUaGlzIGlzCi0tIGRvbmUgYnkgb2JzZXJ2aW5nIGhvdyB0
aGUgZnVuY3Rpb24gcmVhY3RzIHRvIHNpbmdsZS1vY3RldCBpbnB1dHMsCi0tIGFuZCBzcGxp
dHRpbmcgdGhlIHJlc3VsdHMgaW50byAicmV0dXJuIG9jdGV0IiBhbmQgInByb2JlIGZ1cnRo
ZXIiCi0tIHNldHMgKHdpdGggV0VPRiB0aGUgc2VudGluZWwgZm9yICJwcm9iZSBmdXJ0aGVy
IiwgYW5kIG9jdGV0IHZhbHVlcwotLSBtZWFuaW5nICJyZXR1cm4gdGhpcyB2YWx1ZSIpLgpT
ZWN0aW9uKCJkZmFtYmNhY2hlIGFuZCBtYnNfdG9fd2NoYXIiLCBkZmFjLCA0NDUpClNlZ3M6
VGFnKCJkZmFtYmNhY2hlIiwgICAgICAgICAgICAgICAgICAgICAwLCAgMTIpClNlZ3M6VGFn
KCJtYnNfdG9fd2NoYXIiLCAgICAgICAgICAgICAgICAgIDE0LCAgNTEpCgotLSBEZWJ1ZyB1
dGlsaXR5IHBydG9rLCB3aXRoIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHNlcGFyYXRlZCBv
dXQKU2VjdGlvbigicHJ0b2sgZGVidWciLCBkZmFjLCA0OTgpClNlZ3M6VGFnKCJwcnRvay1p
ZmRlZi1ERUJVRy1zdGFydCIsICAgICAgICAwKQpTZWdzOlRhZygicHJ0b2stZm4tZGVjbCIs
ICAgICAgICAgICAgICAgICAgMiwgICAzKQpTZWdzOlRhZygicHJ0b2stZm4tYm9keSIsICAg
ICAgICAgICAgICAgICAgNCwgIDc1KQpTZWdzOlRhZygicHJ0b2staWZkZWYtREVCVUctZW5k
IiwgICAgICAgICA3NikKCi0tIENoYXJhY3RlciBjbGFzcyBmYWNpbGl0aWVzOiBzaW5nbGUt
Yml0IGJpdCB0ZXN0L3NldC9jbGVhcgpTZWN0aW9uKCJDaGFyYWN0ZXIgY2xhc3Nlcy1pbnRy
byBhbmQgYml0b3BzIiwgZGZhYywgNTc2KQpTZWdzOlRhZygiY2hhcmNsYXNzLXNlY3Rpb24t
aW50cm9kdWN0aW9uIiwgMCkKU2VnczpUYWcoImNoY2xhc3MtdHN0Yml0LWRlY2wiLCAgICAg
ICAgICAgIDIsICAgMykKU2VnczpUYWcoImNoY2xhc3MtdHN0Yml0LWJvZHkiLCAgICAgICAg
ICAgIDQsICAgNikKU2VnczpUYWcoImNoY2xhc3Mtc2V0Yml0LWRlY2wiLCAgICAgICAgICAg
IDgsICAgOSkKU2VnczpUYWcoImNoY2xhc3Mtc2V0Yml0LWJvZHkiLCAgICAgICAgICAgMTAs
ICAxMikKU2VnczpUYWcoImNoY2xhc3MtY2xyYml0LWRlY2wiLCAgICAgICAgICAgMTQsICAx
NSkKU2VnczpUYWcoImNoY2xhc3MtY2xyYml0LWJvZHkiLCAgICAgICAgICAgMTYsICAxOSkK
Ci0tIC4uLiB3aG9sZS1zZXQgY29weSwgY2xlYXIsIGludmVydCwgY29tcGFyZQpTZWN0aW9u
KCJDaGFyYWN0ZXIgY2xhc3Nlcy1zZXQgb3BlcmF0aW9ucyIsIGRmYWMsIDU5NykKU2VnczpU
YWcoImNoY2xhc3MtY29weXNldC1kZWNsIiwgICAgICAgICAgIDAsICAgMSkKU2VnczpUYWco
ImNoY2xhc3MtY29weXNldC1ib2R5IiwgICAgICAgICAgIDIsICAgNCkKU2VnczpUYWcoImNo
Y2xhc3MtemVyb3NldC1kZWNsIiwgICAgICAgICAgIDYsICAgNykKU2VnczpUYWcoImNoY2xh
c3MtemVyb3NldC1ib2R5IiwgICAgICAgICAgIDgsICAxMCkKU2VnczpUYWcoImNoY2xhc3Mt
bm90c2V0LWRlY2wiLCAgICAgICAgICAgMTIsICAxMykKU2VnczpUYWcoImNoY2xhc3Mtbm90
c2V0LWJvZHkiLCAgICAgICAgICAgMTQsICAxOSkKU2VnczpUYWcoImNoY2xhc3MtZXF1YWwt
ZGVjbCIsICAgICAgICAgICAgMjEsICAyMikKU2VnczpUYWcoImNoY2xhc3MtZXF1YWwtYm9k
eSIsICAgICAgICAgICAgMjMsICAyNSkKCi0tIG1heWJlX3JlYWxsb2MgLS0gUmVwbGFjZSBS
RUFMTE9DX0lGX05FQ1NTQVJZIG1hY3JvIHdpdGggZnVuY3Rpb24KU2VjdGlvbigiTWF5YmUt
cmVhbGxvYyBmbiIsIGRmYWMsIDYyNCkKU2VnczpUYWcoIm1heWJlLXJlYWxsb2MiLCAgICAg
ICAgICAgICAgICAgIDAsICAxNSkKCi0tIFJldHVybiB1bmlxdWUgaW5kZXggcmVwcmVzZW50
aW5nIHNwZWNpZmllZCBzZXQuICBSZWZlciB0byBhbiBleGlzdGluZwotLSBzZXQgaWYgcG9z
c2libGUsIG90aGVyd2lkZSBhZGQgdGhpcyBzZXQgdG8gdGhlIHN0b3JlZCBsaXN0LgpTZWN0
aW9uKCJDaGFyY2xhc3Mgc3RvcmFnZSBhbGxvY2F0aW9uLCBpbi1kZmEiLCBkZmFjLCA2NDEp
ClNlZ3M6VGFnKCJjaGFyY2xhc3MtaW5kZXgtcGx1cy1kZmEiLCAgICAgICAwLCAgMTQpClNl
Z3M6VGFnKCJSZWxvY2F0ZWQgZGZhIGZvcndhcmQgZGVjbCIsICAgIDE2LCAgMTcpClNlZ3M6
VGFnKCJyZWRlZmluZWQgY2hhcmNsYXNzX2luZGV4IiwgICAgIDE5LCAgMjQpCgotLSBWYXJp
YWJsZXMgaG9sZGluZyBGU0Egb3B0aW9ucyBzcGVjaWZpZWQgYnkgZGZhc3ludGF4KCkKU2Vj
dGlvbigiRlNBIHN5bnRheCBvcHRpb25zIHN1cHBsaWVkIGJ5IGRmYXN5bnRheCgpIiwgZGZh
YywgNjY3KQpTZWdzOlRhZygibWlzYzogc3ludGF4X2JpdHNfc2V0LCBzeW50YXhfYml0cywg
Y2FzZV9mb2xkLCBlb2xfYnl0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLCAgIDcpCgotLSBTdWRkZW5seSBzd2l0aCBiYWNrIGludG8gY2hhcmFj
dGVyIGNvbnRleHQgaGFuZGxpbmcgKHdlIG5vdyBoYXZlIHRoZQotLSBkZWZpbml0aW9uIG9m
IGVvbGJ5dGUgdG8gdXNlIGZvciBDVFhfTkVXTElORSkKU2VjdGlvbigiTW9yZSBjaGFyYWN0
ZXIgY29udGV4dCBoYW5kbGluZyBzdHVmZiIsIGRmYWMsIDY3NikKU2VnczpUYWcoImNvbnRl
eHQ6IHNiaXQsIGxldHRlcnMsIG5ld2xpbmUiLCAwLCAgIDcpClNlZ3M6VGFnKCJJU19XT1JE
X0NPTlNUSVRVRU5UIiwgICAgICAgICAgICA5LCAgMjApClNlZ3M6VGFnKCJjaGFyX2NvbnRl
eHQgKyB3Y2hhcl9jdHh0IiwgICAgIDIyLCAgNDApCgotLSBVc2VyIGZ1bmN0aW9uIHRoYXQg
Z2xvYmFsbHkgc2V0cyBERkEgb3B0aW9ucwpTZWN0aW9uKCJkZmFzeW50YXgiLCBkZmFjLCA3
MTgpClNlZ3M6VGFnKCJkZmFzeW50YXgiLCAgICAgICAgICAgICAgICAgICAgICAwLCAgMjQp
CgpTZWN0aW9uKCJ3aWRlLWNoYXItc2V0Yml0IGZucyIsIGRmYWMsIDc0NCkKU2VnczpUYWco
InNldGJpdDo6d2NoYXJfdCBjb21tZW50IiwgICAgICAgIDAsICAgNCkKU2VnczpUYWcoIk1C
U19TVVBQT1JUOjpzZXRiaXRfd2MiLCAgICAgICAgIDUsICAxNCkKU2VnczpUYWcoInNldGJp
dF9jYXNlX2ZvbGRfYyIsICAgICAgICAgICAgMTYsICAyNikKClNlY3Rpb24oIlVURi04IGVu
Y29kaW5nIHV0aWxzIiwgZGZhYywgNzc0KQpTZWdzOlRhZygidXNpbmdfdXRmOCIsICAgICAg
ICAgICAgICAgICAgICAgMCwgIDEzKQoKLS0gU2luZ2xlLWJ5dGUgKyBBU0NJSSBvcHRpbWlz
YXRpb24gdGVzdCBmbiBhZGRlZCAoTWFyIDIwMTQpClNlY3Rpb24oIlVzaW5nLXNpbXBsZS1s
b2NhbGUiLCBkZmFjLCA3ODkpClNlZ3M6VGFnKCJ1c2luZy1zaW1wbGUtbG9jYWxlIiwgICAg
ICAgICAgICAwLCAgMzgpCgotLSBVc2luZyB0aGUgdGVybSAiZHJvc3MiIGhlcmUgY29tZXMg
ZnJvbSB0aGUgc291cmNlcyAtLSBhbmQgaXQncyBhIGdvb2QKLS0gbmFtZSB0byB3cmFwIHVw
IHRoZSBhc3NvcnRtZW50IG9mIHN0YXRpYyB2YXJpYWJsZXMgZGVmaW5lZCBoZXJlLgpTZWN0
aW9uKCJMZXhpY2FsIEFuYWx5emVyIERyb3NzIiwgZGZhYywgODI5KQoKLS0gU3RhcnQgYnkg
aGF2aW5nIGFsbCB2YXJzIGluIGEgc2luZ2xlIGNsdW1wOyBwcm9iYWJseSBicmVhayB0aGVt
IGFwYXJ0Ci0tIGxhdGVyIHdoZW4gd2Uga25vdyBtb3JlIGFib3V0IHdoYXQgd2UncmUgZG9p
bmcuClNlZ3M6VGFnKCJsZXgtbWFueS1zdGF0aWMtdmFycyIsICAgICAgICAgICAwLCAgMTkp
ClNlZ3M6VGFnKCJGRVRDSF9XQyIsICAgICAgICAgICAgICAgICAgICAgIDIyLCAgNDgpCgpT
ZWN0aW9uKCJNSU4gKGFuZCBwcmV2aW91c2x5IE1BWCkiLCBkZmFjLCA4NzkpClNlZ3M6VGFn
KCJNSU4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgIDIpCi0tIFNlZ3M6VGFn
KCJNQVgiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLCAgIDUpCgotLSBIYW5kbGUg
aGFpcnkgVW5pY29kZSBub24tbGluZWFyIGNhc2UgZm9sZGluZyBjYXNlcwpTZWN0aW9uKCJI
YWlyeSBVbmljb2RlIGNhc2VfZm9sZGVkX2NvdW50ZXJwYXJ0cyIsIGRmYWMsIDg4MykKU2Vn
czpUYWcoInVuaWNvZGUtbG9uZXNvbWUtbG93ZXItdGFibGUiLCAgIDAsICAxNSkKU2VnczpU
YWcoImRlZi1DQVNFX0ZPTERFRF9CVUZTSVpFIiwgICAgICAgMTcsICAyMikKU2VnczpUYWco
ImNhc2VfZm9sZGVkX2NvdW50ZXJwYXJ0cy1kZWNsIiwgMjQsICAyOCkKU2VnczpUYWcoImNh
c2VfZm9sZGVkX2NvdW50ZXJwYXJ0cy1ib2R5IiwgMjksICA0NSkKCi0tICJhbHBoYSItPmlz
YWxwaGEoKSwgInB1bmN0Ii0+aXNwdW5jdCgpLCAiZGlnaXQiLT5pc2RpZ2l0KCkgZXRjLiBt
YXBwaW5nClNlY3Rpb24oImZpbmQtUG9zaXgtbmFtZWQtcHJlZGljYXRlIiwgZGZhYywgOTMw
KQpTZWdzOlRhZygicHJlZGljYXRlLXR5cGVkZWYiLCAgICAgICAgICAgICAgMCkKU2VnczpU
YWcoIm5hbWUtcHJlZC1pc2J5dGUtYXRvbSIsICAgICAgICAgIDIsICAxMSkKU2VnczpUYWco
InByZWRuYW1lcy1saXN0IiwgICAgICAgICAgICAgICAgMTMsICAyNykKU2VnczpUYWcoImZp
bmQtcHJlZCIsICAgICAgICAgICAgICAgICAgICAgMjksICAzOCkKCi0tIE5PVEU6IFRoZSBj
b21tZW50IHByZWNlZGluZyBwYXJzZV9icmFja2V0X2V4cCBpcyBtaXNsZWFkaW5nOiBUaGUK
LS0gZnVuY3Rpb24gaGFuZGxlcyAqYm90aCogbXVsdGlieXRlLWNoYXIgKHByb2R1Y2VzIGEg
c3RydWN0IG1iX2NoYXJfY2xhc3MpCi0tIGFuZCBzaW5nbGUtYnl0ZS1jaGFyIGNsYXNzZXMg
KHByb2R1Y2VzIGEgY2hhcmNsYXNzKSwgbm90IGp1c3QgbXVsdGlieXRlLgoKLS0gRm9yIHN0
YXJ0ZXJzLCBtZXJlbHkgY29weSBtYXNzaXZlIGZ1bmN0aW9ucyB2ZXJiYXRpbQpTZWN0aW9u
KCJjaGFyY2xhc3MtcGFyc2VyLWFuZC1sZXhlciIsIGRmYWMsIDk3MCkKU2VnczpUYWcoInBh
cnNlX2JyYWNrZXRfZXhwLWRlY2wiLCAgICAgICAgIDAsICAgMykKU2VnczpUYWcoInBhcnNl
X2JyYWNrZXRfZXhwLWJvZHkiLCAgICAgICAgIDQsIDI2OSkKU2VnczpUYWcoImxleC1kZWNs
IiwgICAgICAgICAgICAgICAgICAgICAyNzEsIDI3MikKU2VnczpUYWcoImxleC1ib2R5Iiwg
ICAgICAgICAgICAgICAgICAgICAyNzMsIDU4OSkKClNlY3Rpb24oIlJlY3Vyc2l2ZS1EZXNj
ZW50IFBhcnNlciIsIGRmYWMsIDE1NjEpClNlZ3M6VGFnKCJyZWN1cnNpdmUtZGVzY2VudCBw
YXJzZXIgaW50cm8iLCAwKQpTZWdzOlRhZygibG9va2FoZWFkIHRva2VuIiwgICAgICAgICAg
ICAgICAgMikKU2VnczpUYWcoImRlZmVycmVkLXByb2Qtc3RhY2stZGVwdGgiLCAgICAgIDMs
ICAgNykKU2VnczpUYWcoImFkZHRva19tYiIsICAgICAgICAgICAgICAgICAgICAgIDksICA0
OCkKU2VnczpUYWcoImFkZHRva193YyBmd2QgZGVjbCIsICAgICAgICAgICAgNTApClNlZ3M6
VGFnKCJhZGR0b2siLCAgICAgICAgICAgICAgICAgICAgICAgIDUyLCAxMDYpClNlZ3M6VGFn
KCJhZGR0b2tfd2MiLCAgICAgICAgICAgICAgICAgICAgMTA4LCAxMzgpCgotLSBCb2R5IGlz
IHZvaWQgaWYgTUJTX1NVUFBPUlQgaXNuJ3QgdHJ1ZTsgdGhpcyBpcyBhIHNpbXBsZSB0cmFu
c2Zvcm1hdGlvbiwKLS0gYW5kIHNvIGlzbid0IGJyb2tlbiBvdXQgYnkgb3VyIHNlZ21lbnQg
dGFnZ2luZyBhdCBwcmVzZW50LgpTZWN0aW9uKCJhZGRfdXRmOF9hbnljaGFyIiwgZGZhYywg
MTcwMSkKU2VnczpUYWcoImFkZF91dGY4X2FueWNoYXItZGVjbCIsICAgICAgICAgIDAsICAg
MSkKU2VnczpUYWcoImFkZF91dGY4X2FueWNoYXItYm9keS1zdGFydCIsICAgIDIpClNlZ3M6
VGFnKCJhZGRfdXRmOF9hbnljaGFyLWNsYXNzZXMtYXJyYXkiLCAzLCAgMjEpClNlZ3M6VGFn
KCJhZGRfdXRmOF9hbnljaGFyLWNsYXNzLXRhaWxvciIsIDIzLCAgMzcpClNlZ3M6VGFnKCJh
ZGRfdXRmOF9hbnljaGFyLWRlc2NyaXB0aW9uIiwgIDM5LCAgNDgpClNlZ3M6VGFnKCJhZGRf
dXRmOF9hbnljaGFyLWFkZC10b2tlbnMiLCAgIDQ5LCAgNTYpClNlZ3M6VGFnKCJhZGRfdXRm
OF9hbnljaGFyLWJvZHktZW5kIiwgICAgIDU3KQoKU2VjdGlvbigiUGFyc2VyIiwgZGZhYywg
MTc2MCkKU2VnczpUYWcoIkdyYW1tYXIgc3VtbWFyeSBjb21tZW50IiwgICAgICAgIDAsICAz
MykKU2VnczpUYWcoImF0b20iLCAgICAgICAgICAgICAgICAgICAgICAgICAgMzUsICA5MCkK
U2VnczpUYWcoIm5zdWJ0b2tzIiwgICAgICAgICAgICAgICAgICAgICAgOTIsIDExMSkKU2Vn
czpUYWcoImNvcHl0b2tzIiwgICAgICAgICAgICAgICAgICAgICAxMTMsIDEyNSkKClNlY3Rp
b24oIlBhcnNlciwgUGFydCAyIiwgZGZhYywgMTg4NykKU2VnczpUYWcoImNsb3N1cmUiLCAg
ICAgICAgICAgICAgICAgICAgICAgIDAsICA0MCkKU2VnczpUYWcoImJyYW5jaCIsICAgICAg
ICAgICAgICAgICAgICAgICAgNDIsICA1MSkKU2VnczpUYWcoInJlZ2V4cCIsICAgICAgICAg
ICAgICAgICAgICAgICAgNTMsICA2MykKLS0gZGZhcGFyc2U6IEV4dGVybmFsIHVzZXIncyBt
YWluIGVudHJ5IHBvaW50IGZvciB0aGUgcGFyc2VyCi0tIFN1ZGRlbmx5LCB0aGUgZGZhIHN0
cnVjdCBpcyBzZWVuIG1vcmUgaW4gcGFyYW1ldGVyIGxpc3RzIChhcyAiZCIpLAotLSBhbHRo
b3VnaCBpdCdzIGNvcGllZCB0byB0aGUgZmlsZS1nbG9iYWwtc2NvcGUgdmFyaWFibGUgImRm
YSIgaGVyZS4KU2VnczpUYWcoImRmYXBhcnNlLWRlY2wiLCAgICAgICAgICAgICAgICAgNjUs
ICA2OSkKU2VnczpUYWcoImRmYXBhcnNlLWJvZHkiLCAgICAgICAgICAgICAgICAgNzAsIDEw
MikKCi0tID8/ICBPdXQgb2YgRlNBIHRlcnJpdG9yeSwgYW5kIGludG8gREZBIHRlcnJpdG9y
eS4uLiB5ZXQ/CgpTZWN0aW9uKCJkZmE6IHBvc2l0aW9uX3NldCBvcGVyYXRpb25zIiwgZGZh
YywgMTk5MCkKU2VnczpUYWcoInBvc2l0aW9uX3NldCBpbnRybyIsICAgICAgICAgICAgIDAp
Ci0tIEZ1bmN0aW9uIG5hbWVzICJjb3B5IiwgImluc2VydCIsICJtZXJnZSIgYW5kICJkZWxl
dGUiIGFyZSB0b28gZ2VuZXJpYwotLSBmb3IgbXkgbGlraW5nLiAgSG93ZXZlciwgdGhleSBn
aXZlIGhpbnRzIHRvIHRoZSBoaXN0b3J5IG9mIHRoZSBjb2RlOgotLSBUaGVzZSB3ZXJlIGxp
a2VseSBrZXkgcGFydHMgb2YgdGhlIGVhcmx5IERGQSBpbXBsZW1lbnRhdGlvbiwgYW5kIHNv
Ci0tIGRpZG4ndCBuZWVkIGhpZ2hseS1xdWFsaWZpZWQgbmFtZXMgLS0gbGF0ZXIgYWRkaXRp
b25zIG5lZWRlZCBsb25nZXIKLS0gbmFtZXMgaW4gb3JkZXIgdG8gYXZvaWQgbmFtZXNwYWNl
IGNsYXNoZXMuICBUaGVyZSdzIGFsc28gdGhlIHByb2JsZW0KLS0gdGhhdCBlYXJseSBjb21w
aWxlcnMgb25seSB1c2VkIHRoZSBmaXJzdCBmZXcgY2hhcnMgb2YgYSBuYW1lICg2PykgZm9y
Ci0tIGV4dGVybmFsbHktdmlzaWJsZSBpZGVudGlmaWVycywgc28gdmVyeS10ZXJzZSBuYW1l
cyB3ZXJlIG5lZWRlZCB0bwotLSBzdXJ2aXZlIGluIHRoaXMgZW52aXJvbm1lbnQuClNlZ3M6
VGFnKCJjb3B5IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAyLCAgMTQpClNlZ3M6VGFn
KCJhbGxvY19wb3NpdGlvbl9zZXQiLCAgICAgICAgICAgIDE2LCAgMjIpClNlZ3M6VGFnKCJp
bnNlcnQiLCAgICAgICAgICAgICAgICAgICAgICAgIDI0LCAgNTQpClNlZ3M6VGFnKCJtZXJn
ZSIsICAgICAgICAgICAgICAgICAgICAgICAgIDU2LCAgODQpClNlZ3M6VGFnKCJkZWxldGUi
LCAgICAgICAgICAgICAgICAgICAgICAgIDg2LCAgOTgpClNlZ3M6VGFnKCJzdGF0ZV9pbmRl
eCIsICAgICAgICAgICAgICAgICAgMTAwLCAxNjApIC0tIGZpbmQgYW5kL29yIGNyZWF0ZSBp
dGVtClNlZ3M6VGFnKCJlcHNjbG9zdXJlIiwgICAgICAgICAgICAgICAgICAgMTYyLCAyMjYp
IC0tIGVwc2lsb24gY2xvc3VyZQoKLS0gU29tZSBtb3JlIGZ1bmN0aW9ucyB0byBtYW5pcHVs
YXRlIGNvbnRleHRzCgpTZWN0aW9uKCJDb250ZXh0LWZucyIsIGRmYWMsIDIyMTgpClNlZ3M6
VGFnKCJjaGFyY2xhc3NfY29udGV4dCIsICAgICAgICAgICAgICAwLCAgMjEpClNlZ3M6VGFn
KCJzdGF0ZV9zZXBhcmF0ZV9jb250ZXh0cyIsICAgICAgIDIzLCAgNDQpCgpTZWN0aW9uKCJk
ZmFhbmFseXplIiwgZGZhYywgMjI2NSkKU2VnczpUYWcoImRmYWFuYWx5c2Ugc3VtbWFyeSBj
b21tZW50IiwgICAgIDAsICA1MSkKU2VnczpUYWcoImRmYWFuYWx5c2UiLCAgICAgICAgICAg
ICAgICAgICAgNTIsIDI1OCkKClNlY3Rpb24oImRmYXN0YXRlIiwgZGZhYywgMjUyNikKU2Vn
czpUYWcoImRmYXN0YXRlIHN1bW1hcnkgY29tbWVudCIsICAgICAgIDAsICAyOSkKU2VnczpU
YWcoImRmYXN0YXRlIiwgICAgICAgICAgICAgICAgICAgICAgMzAsIDI4NCkKU2VnczpUYWco
InJlYWxsb2NfdHJhbnNfaWZfbmVjZXNzYXJ5IiwgICAyODYsIDMwOSkKU2VnczpUYWcoImJ1
aWxkX3N0YXRlIiwgICAgICAgICAgICAgICAgICAzMTEsIDM3MikKClNlY3Rpb24oIk11bHRp
Ynl0ZSBmbnMgZm9yIGRmYWV4ZWMiLCBkZmFjLCAyOTAwKQpTZWdzOlRhZygiTXVsdGlieXRl
IGZucyBzZWN0aW9uIGNvbW1lbnQiLCAgMCkKLS0gU2VnczpUYWcoIlNLSVBfUkVNQUlOU19N
Ql9JRl9JTklUSUFMX1NUQVRFIiwgMiwgIDIxKQoKLS0gPz8gTmV3IHNlY3Rpb246IHN0YXRl
IHRyYW5zaXRpb24gc3VwcG9ydC9leGVjdXRpb24/ClNlZ3M6VGFnKCJzdGF0dXNfdHJhbnNp
dF9zdGF0ZSB0eXBlZGVmIiwgICAyLCAgIDkpClNlZ3M6VGFnKCJ0cmFuc2l0X3N0YXRlX3Np
bmdsZWJ5dGUiLCAgICAgIDExLCAgNDcpClNlZ3M6VGFnKCJtYXRjaF9hbnljaGFyIiwgICAg
ICAgICAgICAgICAgIDQ5LCAgNzYpClNlZ3M6VGFnKCJtYXRjaF9tYl9jaGFyc2V0IiwgICAg
ICAgICAgICAgIDc4LCAxNzcpCgpTZWN0aW9uKCJNdWx0aWJ5dGUgZm5zIGZvciBkZmFleGVj
IC0gcGFydCAyIiwgZGZhYywgMzA3OSkKU2VnczpUYWcoImNoZWNrX21hdGNoaW5nX3dpdGhf
bXVsdGlieXRlX29wcyIsICAgMCwgIDI5KQpTZWdzOlRhZygidHJhbnNpdF9zdGF0ZV9jb25z
dW1lXzFjaGFyIiwgICAzMSwgIDc3KQpTZWdzOlRhZygidHJhbnNpdF9zdGF0ZSIsICAgICAg
ICAgICAgICAgICA3OSwgMTU3KQoKU2VjdGlvbigiZGZhZXhlYy9pbml0L29wdC9jb21wL2Zy
ZWUiLCBkZmFjLCAzMjM4KQpTZWdzOlRhZygiZGZhZXhlYyIsICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgMTc3KQpTZWdzOlRhZygiZGZhc3VwZXJzZXQiLCAgICAgICAgICAgICAgICAg
IDE3OSwgMTgzKQpTZWdzOlRhZygiZGRhaXNmYXN0IiwgICAgICAgICAgICAgICAgICAgIDE4
NSwgMTg5KQpTZWdzOlRhZygiZnJlZV9tYmRhdGEiLCAgICAgICAgICAgICAgICAgIDE5MSwg
MjE5KQpTZWdzOlRhZygiZGZhaW5pdCIsICAgICAgICAgICAgICAgICAgICAgIDIyMSwgMjI5
KQpTZWdzOlRhZygiZGZhb3B0aW1pemUiLCAgICAgICAgICAgICAgICAgIDIzMSwgMjY4KQoK
U2VjdGlvbigic3VwZXJzZXQtYnVpbGQsIGNvbXAsIGZyZWUiLCBkZmFjLCAzNTA4KQpTZWdz
OlRhZygiZGZhc3NidWlsZCIsICAgICAgICAgICAgICAgICAgICAgMCwgIDc3KQpTZWdzOlRh
ZygiZGZhY29tcCIsICAgICAgICAgICAgICAgICAgICAgICA3OSwgIDk1KQpTZWdzOlRhZygi
ZGZhZnJlZSIsICAgICAgICAgICAgICAgICAgICAgICA5NywgMTQ3KQotLSBkZmFhbGxvYyAo
YXBwcm94LiBsaW5lIDQxMDYpIHByb2JhYmx5IHNob3VsZCBiZSBoZXJlLi4uCgotLSBLbm93
aW5nIG11c3QtaGF2ZSBzdHJpbmdzIGlzIGhpZ2hseSB2YWx1YWJsZSwgYXMgd2UgY2FuIHVz
ZSB2ZXJ5IGZhc3QKLS0gc2VhcmNoIGFsZ29yaXRobXMgKGUuZy4gQm95ZXItTW9vcmUpIGlu
c3RlYWQgb2YgdGhlIHNsb3csIGdyaW5kaW5nCi0tIGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIg
d29yayBvZiB0aGUgREZBIHNlYXJjaCBlbmdpbmUuICBUaGUgaWRlYSBpcyB0aGF0Ci0tIHRo
ZSBmYXN0IHNlYXJjaCB3aWxsIGhvcGVmdWxseSBlbGltaW5hdGUgbmVhcmx5IGFsbCB0aGUg
bGluZXMgaW4gdGhlCi0tIGZpbGUgKGJ1ZmZlcikgKGUuZy4gcG9zc2libHkgOTklKSwgc28g
d2UgY2FuIGhhdmUgb3VyIGNha2UgYW5kIGVhdCBpdDoKLS0gQSBjb21iaW5hdGlvbiBvZiBh
IHZlcnkgZmFzdCBzZWFyY2ggcHJvZ3JhbSwgdG9nZXRoZXIgd2l0aCBhbiBleHByZXNzaXZl
Ci0tIHNlYXJjaCBlbmdpbmUgdGhhdCBjYW4gaGFuZGxlIHNvcGhpc3RpY2F0ZWQgY29uc3Ry
dWN0cyBzdWNoIGFzIHtuLG19Ci0tIHJlcGVhdCBjb25zdHJ1Y3RzLCBtdWx0aWJ5dGUgY2hh
cmFjdGVycyAoaW5jbHVkaW5nIGNvbGxhdGlvbiBjbGFzc2VzKSBpbgotLSBtdWx0aXBsZSBs
b2NhbGVzLCBhbmQgYmFja3JlZmVyZW5jZXMuClNlY3Rpb24oIm11c3RoYXZlLXN0cmluZ3M6
IGRvY3Mtc3VwcG9ydCIsIGRmYWMsIDM2NTcpClNlZ3M6VGFnKCInbXVzdHMnIGV4cGxhbmF0
aW9uIiwgICAgICAgICAgICAwLCAgODIpClNlZ3M6VGFnKCJpY2F0YWxsb2MiLCAgICAgICAg
ICAgICAgICAgICAgIDg0LCAgOTYpClNlZ3M6VGFnKCJpc3Ryc3RyIiwgICAgICAgICAgICAg
ICAgICAgICAgIDk4LCAxMDkpClNlZ3M6VGFnKCJmcmVlbGlzdCIsICAgICAgICAgICAgICAg
ICAgICAgMTExLCAxMTYpClNlZ3M6VGFnKCJlbmxpc3QiLCAgICAgICAgICAgICAgICAgICAg
ICAgMTE4LCAxNDkpClNlZ3M6VGFnKCJjb21zdWJzIiwgICAgICAgICAgICAgICAgICAgICAg
MTUxLCAxNzYpClNlZ3M6VGFnKCJhZGRsaXN0cyIsICAgICAgICAgICAgICAgICAgICAgMTc4
LCAxODQpClNlZ3M6VGFnKCJpbmJvdGgiLCAgICAgICAgICAgICAgICAgICAgICAgMTg2LCAy
MDUpCgpTZWN0aW9uKCJtdXN0aGF2ZS1zdHJpbmdzOiBIaWdoZXIgZm5zIiwgZGZhYywgMzg2
NCkKU2VnczpUYWcoIm11c3QgdHlwZWRlZiIsICAgICAgICAgICAgICAgICAgIDAsICAxMSkK
U2VnczpUYWcoImFsbG9jbXVzdCIsICAgICAgICAgICAgICAgICAgICAgMTMsICAyNSkKU2Vn
czpUYWcoInJlc2V0bXVzdCIsICAgICAgICAgICAgICAgICAgICAgMjcsICAzNSkKU2VnczpU
YWcoImZyZWVtdXN0IiwgICAgICAgICAgICAgICAgICAgICAgMzcsICA0NikKU2VnczpUYWco
ImRmYW11c3QgZGVjbGFyYXRpb24iLCAgICAgICAgICAgNDgsICA0OSkKU2VnczpUYWcoImRm
YW11c3QgZGVmaW5pdGlvbiIsICAgICAgICAgICAgNTAsIDI1MCkKLS0gZGZhYWxsb2Mgc2hv
dWxkIGJlIG5lYXIgZGZhZnJlZSAoYXBwcm94LiBsaW5lIDM1NTApLCBhcyB0aGV5IGFyZSBh
IHBhaXIKU2VnczpUYWcoImRmYWFsbG9jIiwgICAgICAgICAgICAgICAgICAgICAyNTIsIDI1
NikKU2VnczpUYWcoImRmYW11c3RzIiwgICAgICAgICAgICAgICAgICAgICAyNTgsIDI2MikK
ClNlY3Rpb24oImVuZC1jb25maWd1cmUtdmltLWF0dHJpYnV0ZXMiLCBkZmFjLCA0MTI4KQoK
U2VnczpUYWcoInZpbTogc2V0IHNoaWZ0d2lkdGg9MiIsICAgICAgICAgIDApCgotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQoKLS0gUHJvY2VzcyBNYWtlZmlsZS5hbQpTZWN0aW9uKCJBdXRvbWFr
ZSBmaWxlIGhlYWRlciIsIG1ha2VmaWxlYW0sIDApClNlZ3M6VGFnKCJhdXRvbWFrZS1wcm9j
ZXNzLWhpbnQiLCAgICAgICAgICAxKQpTZWdzOlRhZygiQ29weXJpZ2h0Lm1ha2VmaWxlYW0i
LCAgICAgICAgICAgMikKU2VnczpUYWcoIkNvbW1lbnQtYmxvY2stc3BhY2VyLTEiLCAgICAg
ICAgIDMpClNlZ3M6VGFnKCJMaWNlbnNlV2FycmFudHkubWFrZWZpbGVhbSIsICAgICA0LCAg
MTUpCgotLSBEZWZpbmUgImF1dG9tYWtlLXBlcnNpc3RlbnQiIHNoYWRvdyB2ZXJzaW9ucyBv
ZiBidWlsZC10aW1lIG1hY3JvcwpTZWN0aW9uKCJhbS1wZXJzaXN0ZW50LW1hY3JvcyIsIG1h
a2VmaWxlYW0sIDE3KQpTZWdzOlRhZygiYW06TE4iLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCkKU2VnczpUYWcoImFtOkFNX0NGTEFHUyIsICAgICAgICAgICAgICAgICAgIDIpClNl
Z3M6VGFnKCJhbTpBTV9MREZMQUdTIiwgICAgICAgICAgICAgICAgICA0LCAgIDUpCgpTZWN0
aW9uKCJhbS1wcm9ncmFtcy1nZW5lcmF0ZWQiLCBtYWtlZmlsZWFtLCAyNCkKU2VnczpUYWco
ImFtOmJpbl9QUk9HUkFNUyIsICAgICAgICAgICAgICAgIDApClNlZ3M6VGFnKCJhbTpiaW5f
U0NSSVBUUyIsICAgICAgICAgICAgICAgICAxKQoKU2VjdGlvbigic291cmNlcy1hbmQtaGVh
ZGVycyIsIG1ha2VmaWxlYW0sIDI2KQpTZWdzOlRhZygiZ3JlcF9TT1VSQ0VTIiwgICAgICAg
ICAgICAgICAgICAgMCwgICAzKQpTZWdzOlRhZygibm9pbnN0X0hFQURFUlMiLCAgICAgICAg
ICAgICAgICAgNCkKClNlY3Rpb24oImFkZGl0aW9uYWwgbGluayBsaWJzIiwgbWFrZWZpbGVh
bSwgMzIpClNlZ3M6VGFnKCJMSUJJTlRMIGRvY3VtZW50YXRpb24iLCAgICAgICAgICAgMCwg
ICA0KQpTZWdzOlRhZygiTERBREQgZGVmbiIsICAgICAgICAgICAgICAgICAgICAgIDUsICAg
NykKU2VnczpUYWcoImdyZXBfTERBREQiLCAgICAgICAgICAgICAgICAgICAgICA5KQpTZWdz
OlRhZygiYW06bG9jYWxlZGlyIiwgICAgICAgICAgICAgICAgICAgMTApClNlZ3M6VGFnKCJh
bTpBTV9DUFBGTEFHUyIsICAgICAgICAgICAgICAgICAxMSkKCi0tIFBlcmhhcHMgQ1BQRkxB
R1Mgc2hvdWxkIGJlIGdyb3VwZWQgd2l0aCBvdGhlciBBdXRvbWFrZSBvdmVycmlkZXMgKGxu
IDE3KT8KClNlY3Rpb24oImFtOkVYVFJBX0RJU1QiLCBtYWtlZmlsZWFtLCA0NSkKU2VnczpU
YWcoImFtOmRvc2J1Zi5jIiwgICAgICAgICAgICAgICAgICAgICAwKQoKU2VjdGlvbigiYW06
ZWdyZXAgZmdyZXAiLCBtYWtlZmlsZWFtLCA0NykKU2VnczpUYWcoImVncmVwLWZncmVwIHNj
cmlwdHMiLCAgICAgICAgICAgICAwLCAxNCkKClNlY3Rpb24oImFtOiBjbGVhbiBmaWxlcyIs
IG1ha2VmaWxlYW0sIDYzKQpTZWdzOlRhZygiYW06Q0xFQU5GSUxFUyIsICAgICAgICAgICAg
ICAgICAgIDApCgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi0tW1sKCi0tIERFQlVHOiBPbWl0
dGVkIGZvciBub3cKCi0tIFByaW50IG91dCBhbGwgdGhlIHNlZ21lbnRzIHdlJ3ZlIGV4dHJh
Y3RlZCAob3IgbWFudWZhY3R1cmVkKSBzbyBmYXIKZm9yIF8sIFNlZyBpbiBpcGFpcnMoU2Vn
cy5TZWdTZXEpIGRvCiAgICAgICAgcHJpbnRmKCIlczpcbiVzXG4iLCBTZWcuTmFtZSwgSW5k
ZW50KFNlZy5SYXdUZXh0LCA4KSkKZW5kCgotLV1dCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoK
LS0gQ2hlY2sgdGhhdCBubyBpbXBvcnRhbnQgdGV4dCAoYW55dGhpbmcgb3RoZXIgdGhhbiBu
ZXdsaW5lcykgaGFzIGJlZW4KLS0gbGVmdCB1bnRhZ2dlZCAoaXQgaXMgY2FwdHVyZWQgYnkg
VGFnJ3MgUHJldlRleHQgZmFjaWxpdHkpLgpmb3IgXywgU2VnIGluIGlwYWlycyhTZWdzLlNl
Z1NlcSkgZG8KICAgICAgICBsb2NhbCBQcmV2VGV4dCA9IFNlZy5QcmV2VGV4dAogICAgICAg
IGlmIFByZXZUZXh0IGFuZCBub3QgUHJldlRleHQ6bWF0Y2goIl5cbiokIikgdGhlbgogICAg
ICAgICAgICAgICAgLS0gV2UndmUgZm91bmQgc29tZSB1bnRhZ2dlZCB0ZXh0CiAgICAgICAg
ICAgICAgICBwcmludGYoIkVSUk9SOiAlczolZDolcSBoYXMgcHJlY2VkaW5nIG9taXR0ZWQg
dGV4dDogXG4lc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICBTZWcuU291cmNlLkZpbGVu
YW1lLCBTZWcuU3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgU2VnLk5hbWUsIEluZGVu
dChQcmV2VGV4dCwgOCkpCiAgICAgICAgZW5kCmVuZAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ci0tIENoZWNrIGludGVnaXR5IG9mIG9mIG91ciBkZWNvbnN0cnVjdGlvbiBvZiBlYWNoIGZp
bGUgYnkgcmVjb25zdGl0dXRpbmcKLS0gaXQgZnJvbSB0aGUgaW5kaXZpZHVhbCBwaWVjZXMu
ClJlY29uc3RydWN0RmlsZShkZmFjKQpSZWNvbnN0cnVjdEZpbGUoZGZhaCkKUmVjb25zdHJ1
Y3RGaWxlKG1ha2VmaWxlYW0pCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLS0gVGltZSBmb3Ig
dGhlIHJ1YmJlciB0byBoaXQgdGhlIHJvYWQ6IENyZWF0ZSBuZXcgZmlsZXMgd2l0aCBleGlz
dGluZyBjb250ZW50Ci0tIHJlLW9yZGVyZWQgaW50byAoaG9wZWZ1bGx5KSBtb3JlIGNvaGVy
ZW50IGdyb3Vwcy9tb2R1bGVzLCBhbmQgYWxzbyBtb2RpZnkKLS0gTWFrZWZpbGUuYW0gdG8g
a25vdyBhYm91dCB0aGUgbmV3IHNvdXJjZXMuICBBdCBwcmVzZW50LCB0aGlzIHNjcmlwdCBk
b2Vzbid0Ci0tIHJlLXJ1biBhdXRvbWFrZSBhZnRlciBlZGl0aW5nIE1ha2VmaWxlLmFtOyBt
YXliZSBsYXRlcj8KCgotLSBFZGl0IGZ1bmN0aW9uIGhlYWRlcnMvZGVjbGFyYXRpb25zIGJl
Zm9yZSB3b3JraW5nIG9uIGluZGl2aWR1YWwgZmlsZXMsCi0tIGFzIHdlIHVzZSB0aGVzZSBw
dWJsaWMgdmVyc2lvbiBib3RoIGluIHRoZSBoZWFkZXJzIGFuZCBpbiB0aGUKLS0gaW1wbGVt
ZW50YXRpb25zLgoKbG9jYWwgRGVjbHMgPSB7fQotLSBGdW5jdGlvbnMgZnJvbSBjaGFyY2xh
c3MuW2NoXQoKRGVjbHNbImNoYXJjbGFzcy1pbml0aWFsaXNlIl0gPSBbWwp2b2lkCmNoYXJj
bGFzc19pbml0aWFsaXNlIChzaXplX3QgaW5pdGlhbF9wb29sX3NpemUpCl1dCgpEZWNsc1si
Y2hhcmNsYXNzLWRlc3Ryb3ktbW9kdWxlIl0gPSBbWwp2b2lkCmNoYXJjbGFzc19kZXN0cm95
X21vZHVsZSAodm9pZCkKXV0KCkRlY2xzWyJ0c3RiaXQiXSAgPSBbWwpib29sIF9HTF9BVFRS
SUJVVEVfUFVSRQpjaGFyY2xhc3NfdHN0Yml0IChpbnQgYiwgY2hhcmNsYXNzX3QgY29uc3Qg
KmNjbCkKXV0KRGVjbHNbInNldGJpdCJdICA9IFtbCnZvaWQKY2hhcmNsYXNzX3NldGJpdCAo
aW50IGIsIGNoYXJjbGFzc190ICpjY2wpCl1dCkRlY2xzWyJjbHJiaXQiXSAgPSBbWwp2b2lk
CmNoYXJjbGFzc19jbHJiaXQgKGludCBiLCBjaGFyY2xhc3NfdCAqY2NsKQpdXQpEZWNsc1si
c2V0Yml0X3JhbmdlIl0gID0gW1sKdm9pZApjaGFyY2xhc3Nfc2V0Yml0X3JhbmdlIChpbnQg
c3RhcnQsIGludCBlbmQsIGNoYXJjbGFzc190ICpjY2wpCl1dCkRlY2xzWyJjbHJiaXRfcmFu
Z2UiXSAgPSBbWwp2b2lkCmNoYXJjbGFzc19jbHJiaXRfcmFuZ2UgKGludCBzdGFydCwgaW50
IGVuZCwgY2hhcmNsYXNzX3QgKmNjbCkKXV0KRGVjbHNbImNvcHlzZXQiXSA9IFtbCnZvaWQK
Y2hhcmNsYXNzX2NvcHlzZXQgKGNoYXJjbGFzc190IGNvbnN0ICpzcmMsIGNoYXJjbGFzc190
ICpkc3QpCl1dCkRlY2xzWyJ6ZXJvc2V0Il0gPSBbWwp2b2lkCmNoYXJjbGFzc196ZXJvc2V0
IChjaGFyY2xhc3NfdCAqY2NsKQpdXQpEZWNsc1sibm90c2V0Il0gPSBbWwp2b2lkCmNoYXJj
bGFzc19ub3RzZXQgKGNoYXJjbGFzc190ICpjY2wpCl1dCkRlY2xzWyJlcXVhbCJdID0gW1sK
aW50IF9HTF9BVFRSSUJVVEVfUFVSRQpjaGFyY2xhc3NfZXF1YWwgKGNoYXJjbGFzc190IGNv
bnN0ICpjY2wxLCBjaGFyY2xhc3NfdCBjb25zdCAqY2NsMikKXV0KCkRlY2xzWyJ1bmlvbnNl
dCJdID0gW1sKdm9pZApjaGFyY2xhc3NfdW5pb25zZXQgKGNoYXJjbGFzc190IGNvbnN0ICpz
cmMsIGNoYXJjbGFzc190ICpkc3QpCl1dCgpEZWNsc1siaW50ZXJzZWN0c2V0Il0gPSBbWwp2
b2lkCmNoYXJjbGFzc19pbnRlcnNlY3RzZXQgKGNoYXJjbGFzc190IGNvbnN0ICpzcmMsIGNo
YXJjbGFzc190ICpkc3QpCl1dCgotLSBGdW5jdGlvbnMgZnJvbSBmc2F0b2tlbi5bY2hdCgpE
ZWNsc1sicHJ0b2siXSAgID0gRWRpdGVkVGV4dCgicHJ0b2stZm4tZGVjbCIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJec3RhdGljJXMrIiwgIiIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJwcnRvayAlKHRva2VuIHQlKSIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZnNhdG9rZW5fcHJ0b2sgKGZzYXRva2VuX3Rva2VuX3Qg
dCkiKQoKLS0gRnVuY3Rpb25zIGZyb20gbWJjc2V0cy5bY2hdCgpEZWNsc1sibWJjc2V0cy1p
bml0aWFsaXNlIl0gPSBbWwovKiBQcmVwYXJlIG1vZHVsZSBmb3Igb3BlcmF0aW9uLiAgKi8K
dm9pZAptYmNzZXRzX2luaXRpYWxpc2UgKHZvaWQpCl1dCgpEZWNsc1sibWJjc2V0cy1kZXN0
cm95LW1vZHVsZSJdID0gW1sKLyogRGVzdHJveSBhbGwgY2xhc3NlcywgcGx1cyBhbnkgYXNz
b2NpYXRlZCByZXNvdXJjZXMgb3duZWQgYnkgdGhlCiAgIG1vZHVsZS4gICovCnZvaWQKbWJj
c2V0c19kZXN0cm95X21vZHVsZSAodm9pZCkKXV0KCkRlY2xzWyJtYmNzZXRzLW5ldyJdID0g
W1sKLyogR2VuZXJhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYSBtdWx0aWJ5dGUtY2hhcmFjdGVy
IHNldCBkZXNjcmlwdG9yLiAgKi8KbWJjc2V0c19zZXRfdCAqCm1iY3NldHNfbmV3ICh2b2lk
KQpdXQoKRGVjbHNbIm1iY3NldHMtYWRkLXdjaGFyIl0gPSBbWwovKiBJbmRpdmlkdWFsIHdp
ZGUgY2hhcmFjdGVycy4gICovCnZvaWQKbWJjc2V0c19hZGRfd2NoYXIgKG1iY3NldHNfc2V0
X3QgKm1iYywgd2ludF90IHdjKQpdXQoKRGVjbHNbIm1iY3NldHMtYWRkLXdjaGFyLWxpc3Qi
XSA9IFtbCi8qIEFkZCBhIGxpc3Qgb2Ygd2lkZSBjaGFyYWN0ZXJzIChub3RlOiBub3Qgd2lk
ZSBpbnRlZ2VycykuICAqLwp2b2lkCm1iY3NldHNfYWRkX3djaGFyX2xpc3QgKG1iY3NldHNf
c2V0X3QgKm1iYywKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgd2NoYXJf
dCAqd2NfbGlzdCkKXV0KCkRlY2xzWyJtYmNzZXRzLWFkZC1jbGFzcyJdID0gW1sKLyogQ29t
bW9uIGNoYXJhY3RlciBjbGFzc2VzLCBlLmcuIGFscGhhLCBkaWdpdCwgcHVuY3QgZXRjLiAg
Ki8Kdm9pZAptYmNzZXRzX2FkZF9jbGFzcyAobWJjc2V0c19zZXRfdCAqbWJjLCB3Y3R5cGVf
dCB3Y2hhcl9jbGFzcykKXV0KCkRlY2xzWyJtYmNzZXRzLXNldC1tYXRjaC1zZW5zZSJdID0g
W1sKLyogQnkgZGVmYXVsdCwgY2xhc3NlcyBtYXRjaCB0aGUgc3BlY2lmaWVkIGNoYXJhY3Rl
cnMuICBSZWd1bGFyCiAgIGV4cHJlc3Npb25zIGFsbG93IHRoaXMgc2Vuc2UgdG8gYmUgaW52
ZXJ0ZWQsIHVzdWFsbHkgYnkgdGhlCiAgIGNvbnZlbnRpb24gb2YgIl4iIGJlaW5nIHRoZSBm
aXJzdCBjaGFyYWN0ZXIgb2YgYSBicmFja2V0ZWQgY2xhc3MuCiAgIEJ5IGRlZmF1bHQsIHBv
c2l0aXZlIHNlbnNlIGlzIHNlbGVjdGVkOyB0aGlzIGZ1bmN0aW9uIGxldHMgdGhlCiAgIHVz
ZXIgc3BlY2lmeSB0aGUgc2Vuc2UsIHByb2JhYmx5IHRvIHNwZWNpZnkgaW52ZXJ0ZWQgbWF0
Y2hpbmcuICAgKi8Kdm9pZAptYmNzZXRzX3NldF9tYXRjaF9zZW5zZSAobWJjc2V0c19zZXRf
dCAqbWJjLCBib29sIGludmVydCkKXV0KCkRlY2xzWyJtYmNzZXRzLWFkZC1yYW5nZSJdID0g
W1sKLyogRXhwbGljaXQgY2hhcmFjdGVyIHJhbmdlcy4gICovCnZvaWQKbWJjc2V0c19hZGRf
cmFuZ2UgKG1iY3NldHNfc2V0X3QgKm1iYywgd2ludF90IGJlZywgd2ludF90IGVuZCkKXV0K
CkRlY2xzWyJtYmNzZXRzLWFkZC1lcXVpdnMiXSA9IFtbCnZvaWQKbWJjc2V0c19hZGRfZXF1
aXZzIChtYmNzZXRzX3NldF90ICptYmMsIHdpbnRfdCB3YykKXV0KCkRlY2xzWyJtYmNzZXRz
LWFkZC1jb2xsYXRpb24iXSA9IFtbCnZvaWQKbWJjc2V0c19hZGRfY29sbGF0aW9uIChtYmNz
ZXRzX3NldF90ICptYmMsIHdpbnRfdCB3YykKXV0KCkRlY2xzWyJtYmNzZXRzLXJlY2VpdmUt
aW5jb21wbGV0ZS1jaGFyY2xhc3MiXSA9IFtbCi8qIFJlY2VpdmUgYW4gImluLXdvcmsiIGNo
YXJhY3RlciBjbGFzcywgd2hpY2ggbWF5IG9yIG1heSBub3QgaGF2ZQogICBtZW1iZXJzLiAg
TWJjc2V0IHRha2VzIG93bmVyc2hpcCBvZiB0aGlzIHNldCwgYW5kLCBkZXBlbmRpbmcgb24K
ICAgdGhlIGNpcmN1bXN0YW5jZXMsIGVpdGhlciBtYWludGFpbnMgaXQgaW50ZXJuYWxseSwg
b3IgZWxzZSBjb3BpZXMKICAgaXRzIGNvbnRlbnRzIChpZiBhbnkpIHRvIGl0cyBpbnRlcm5h
bHMsIGFuZCByZWxlYXNlcyAoYWJhbmRvbnMpCiAgIHRoZSBzdXBwbGllZCBzZXQuICBUaGlz
IGZ1bmN0aW9uIG11c3Qgbm90IGFwcGxpZWQgdG8gYSBzZXQgdGhhdAogICBoYXMgYmVlbiBj
b21wbGV0ZWQuICAqLwp2b2lkCm1iY3NldHNfcmVjZWl2ZV9pbmNvbXBsZXRlX2NoYXJjbGFz
cyAobWJjc2V0c19zZXRfdCAqbWJjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXJjbGFzc190ICpjY2wpCl1dCgpEZWNsc1sibWJjc2V0cy1nZXQtY2hhcnMi
XSA9IFtbCi8qIENvcHkgd2lkZSBjaGFyIGxpc3QgdG8gY2FsbGVyJ3Mgd29yayBhcmVhLiAg
Ki8Kdm9pZAptYmNzZXRzX2dldF9jaGFycyAobWJjc2V0c19zZXRfdCAqbWJjLCB3Y2hhcl90
ICpjaGFyX2xpc3QpCl1dCgpEZWNsc1sibWJjc2V0cy1jb21wbGV0ZWQiXSA9IFtbCi8qIE1h
cmsgYSBzZXQgYXMgY29tcGxldGVkOyB0aGUgaW1wbGVtZW50YXRpb24gbWF5IGFsc28gYW5h
bHlzZSBhbmQKICAgb3B0aW1pc2UgdGhlIHNldCBhdCB0aGlzIHBvaW50IChlLmcuIHVzZSBj
aGFyY2xhc3NlcyB0byByZXByZXNlbnQKICAgdW5pYnl0ZSBjaGFyYWN0ZXJzOyBtZXJnZSBv
dmVybGFwcGluZyByYW5nZXM7IHJlbW92ZSB0aGUKICAgaW5kaXZpZHVhbCBsaXN0aW5nIG9m
IGEgY2hhcmFjdGVyIGlmIGl0IGlzIGNvdmVyZWQgYnkgYSByYW5nZSwKICAgZXRjLikKCiAg
IEluIGFkZGl0aW9uLCBub3RlIHRoYXQgbm8gZnVydGhlciBjaGFuZ2VzIChlLmcuIHJlY2Vp
dmUgYW5vdGhlcgogICBpbmNvbXBsZXRlIGNoYXJjbGFzcykgYXJlIGFsbG93ZWQgZm9yIHRo
aXMgc2V0LCBvbmNlICJjb21wbGV0ZWQiCiAgIGlzIGNhbGxlZC4gICovCnZvaWQKbWJjc2V0
c19jb21wbGV0ZWQgKG1iY3NldHNfc2V0X3QgKm1iYykKXV0KCkRlY2xzWyJtYmNzZXRzLWdl
dC1jaGFyYWN0ZXJpc3RpY3MiXSA9IFtbCi8qIFJldHJpZXZlIGhpZ2gtbGV2ZWwgaW5mb3Jt
YXRpb24gYWJvdXQgdGhlIGNsYXNzLCB3aGljaCBpcyB1c2VmdWwKICAgKGluIGZzYXBhcnNl
KSBmb3IgZGVjaWRpbmcgb24gaG93IHRvIGRlYWwgd2l0aCBpdC4gIFdlIGFyZSBmb3JjZWQK
ICAgdG8gcHJvdmlkZSBzaWduaWZpY2FudCBxdWVyeSByZXNvdXJjZXMgc2luY2Ugd2UgZGVt
YW5kIHRoYXQgdGhlCiAgIHR5cGUgaW50ZXJuYWwgcmVtYWluIG9wYXF1ZSAoZXZlbiB0aG91
Z2ggdGhlIGluaXRpYWwKICAgaW1wbGVtZW50YXRpb24gbWF5IGRvIGEgcG9vciBqb2Igb2Yg
dGhpcyBlZmZvcnQpLiAgKi8Kdm9pZAptYmNzZXRzX2dldF9jaGFyYWN0ZXJpc3RpY3MgKG1i
Y3NldHNfc2V0X3QgKm1iYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpw
X2ludmVydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyY2xhc3NfdCAqKnBw
X2NoYXJjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKnBfbmNo
YXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqcF9uY2hfY2xhc3Nl
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKnBfbnJhbmdlcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKnBfbmVxdWl2cywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgKnBfbmNvbGxfZWxlbXMpCl1dCgotLSBGdW5j
dGlvbnMgZnJvbSBmc2FsZXguW2NoXQoKRGVjbHNbImxleC1pbml0aWFsaXNlIl0gPSBbWwov
KiBQcmVwYXJlIG1vZHVsZSBmb3Igb3BlcmF0aW9uLiAgKi8Kdm9pZApmc2FsZXhfaW5pdGlh
bGlzZSAodm9pZCkKXV0KCkRlY2xzWyJsZXgtZGVzdHJveS1tb2R1bGUiXSA9IFtbCi8qIERl
c3Ryb3kgYWxsIGxleGVyIGluc3RhbmNlcywgcGx1cyBhbnkgYXNzb2NpYXRlZCByZXNvdXJj
ZXMgb3duZWQgYnkgdGhlCiAgIG1vZHVsZS4gICovCnZvaWQKZnNhbGV4X2Rlc3Ryb3lfbW9k
dWxlICh2b2lkKQpdXQoKRGVjbHNbImxleC1uZXciXSA9IFtbCi8qIEdlbmVyYXRlIGEgbmV3
IGluc3RhbmNlIG9mIGFuIEZTQSBsZXhlci4gICovCmZzYWxleF9jdHh0X3QgKgpmc2FsZXhf
bmV3ICh2b2lkKQpdXQoKLS0gUmVkZWZpbmUgImxleCIgYXMgImZzYWxleF9sZXgiLCBzbyB3
ZSBjYW4gcnVuIGl0IGluIHBhcmFsbGVsIHdpdGggdGhlCi0tIG9yaWdpbmFsIGNvZGUgaW4g
ZGZhLmMuICBBbHNvIGFkZCBhIChjdXJyZW50bHktdW51c2VkKSBjb250ZXh0IHBvaW50ZXIs
Ci0tICh2b2lkKiwgc2lnaCksIHNvIHRoYXQgd2UgY2FuIGhhdmUgYSBmdWxseS1yZWVudHJh
bnQgbGV4ZXIgc29tZXRpbWUuCkRlY2xzWyJsZXgiXSA9IEVkaXRlZFRleHQoImxleC1kZWNs
IiwKICAgICAgICAgICAgICAgICAgImxleCAlKHZvaWQlKSIsICJmc2FsZXhfbGV4IChmc2Fs
ZXhfY3R4dF90ICpsZXhlcikiLAogICAgICAgICAgICAgICAgICAiXnN0YXRpYyVzK3Rva2Vu
IiwgImZzYXRva2VuX3Rva2VuX3QiKQoKLS0gQXMgcGVyIGRmYV9zeW50YXggaW4gZGZhLmMs
IGNyZWF0ZSBhIGZ1bmN0aW9uIHRvIHJlY2VpdmUgZGlyZWN0aXZlcyBvbgotLSBob3cgdG8g
aW50ZXJwcmV0IFJFcy4KRGVjbHNbImxleC1zeW50YXgiXSA9IFtbCi8qIFJlY2VpdmUgc3lu
dGF4IGRpcmVjdGl2ZXMsIGFuZCBvdGhlciBwYXR0ZXJuIGludGVycHJldGF0aW9uCiAgIGlu
c3RydWN0aW9ucyBzdWNoIGFzIGNhc2UgZm9sZGluZyBhbmQgZW5kLW9mLWxpbmUgY2hhcmFj
dGVyLgogICBJbiBhZGRpdGlvbiwgdGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHZhcmlvdXMg
aW50ZXJuYWwgc3RydWN0dXJlcwogICBiYXNlZCBvbiB0aGUgbG9jYWxlIGluIGZvcmNlLiAg
Ki8Kdm9pZApmc2FsZXhfc3ludGF4IChmc2FsZXhfY3R4dF90ICpsZXhlciwKICAgICAgICAg
ICAgICAgcmVnX3N5bnRheF90IGJpdHMsIGludCBmb2xkLCB1bnNpZ25lZCBjaGFyIGVvbCkK
XV0KCkRlY2xzWyJsZXgtcGF0dGVybiJdID0gW1sKLyogUmVjZWl2ZSB0aGUgcGF0dGVybiwg
YW5kIHJlc2V0IHRoZSBsZXhpY2FsIGFuYWx5c2VyIHN0YXRlLiAgVGhlCiAgIGludGVycHJl
dGF0aW9uIG9mIHRoZSBjaGFycyAob2N0ZXRzPykgaW4gdGhlIHBhdHRlcm4gKEFTQ0lJIGNo
YXJzPwogICB2YXJpYWJsZS1sZW5ndGggVVRGLTggc2VxdWVuY2VzPyAgU2ltcGxpZmllZCBD
aGluZXNlPyAgZXRjLikgZGVwZW5kcyBvbgogICB0aGUgbG9jYWxlIHRoYXQgd2FzIGluIGZv
cmNlIHdoZW4gZnNhbGV4X3N5bnRheCAoKSB3YXMgY2FsbGVkLiAgTlVMcyBtYXkKICAgYmUg
cHJlc2VudCBhbW9uZ3N0IHRoZSBjb2Rlcywgd2hpY2ggaXMgd2h5IHRoZSBsZW5ndGggaXMg
Z2l2ZW4KICAgZXhwbGljaXRseSwgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBzdHJsZW4oMyku
ICAqLwp2b2lkCmZzYWxleF9wYXR0ZXJuIChmc2FsZXhfY3R4dF90ICpsZXhlciwKICAgICAg
ICAgICAgICAgIGNoYXIgY29uc3QgKnBhdHRlcm4sIHNpemVfdCBjb25zdCBwYXR0ZXJuX2xl
bikKCl1dCgpEZWNsc1sibGV4LWV4Y2hhbmdlIl0gPSBbWwovKiBEZWZpbmUgZXh0ZXJuYWwg
ZnVuY3Rpb24gdG8gZG8gbm9uLWNvcmUgZGF0YSBleGNoYW5nZXMgYmV0d2VlbiB0aGUgbGV4
ZXIKICAgYW5kIHRoZSBwYXJzZXIuICBUaGlzIGZ1bmN0aW9uIG11c3QgY29uZm9ybSB0bwog
ICBwcm90b19sZXhwYXJzZV9leGNoYW5nZV9mbl90LiAgVGhpcyBpbnRlcmZhY2UgbGV0cyB0
d28gaW5zdGFuY2VzCiAgIGNvbW11bmljYXRlIHdpdGhvdXQgcmVxdWlyaW5nIGhlbHAgZnJv
bSBhbiBvdXRzaWRlIHBhcnR5LiAgKi8KaW50CmZzYWxleF9leGNoYW5nZSAoZnNhbGV4X2N0
eHRfdCAqbGV4ZXIsCiAgICAgICAgICAgICAgICAgcHJvdG9fbGV4cGFyc2Vfb3Bjb2RlX3Qg
b3Bjb2RlLAogICAgICAgICAgICAgICAgIHZvaWQgKnBhcmFtKQpdXQoKRGVjbHNbImxleC1l
eGNlcHRpb24tZm5zIl0gPSBbWwovKiBSZWNlaXZlIGZ1bmN0aW9ucyB0byBkZWFsIHdpdGgg
ZXhjZXB0aW9ucyBkZXRlY3RlZCBieSB0aGUgbGV4ZXI6CiAgIFdhcm5pbmdzIGFuZCBlcnJv
cnMuICBJbnRlcm5hbGx5LCB3ZSBhZGQgdGhlIF9Ob3JldHVybiBhdHRyaWJ1dGUKICAgdG8g
dGhlIGVycm9yIGNhbGxiYWNrLCB0byBoZWxwIHRoZSBjb21waWxlciB3aXRoIGNvZGUgZmxv
dwogICBhbmFseXNpcy4gICovCnZvaWQKZnNhbGV4X2V4Y2VwdGlvbl9mbnMgKGZzYWxleF9j
dHh0X3QgKmxleGVyLAogICAgICAgICAgICAgICAgICAgICAgZnNhbGV4X3dhcm5fY2FsbGJh
Y2tfZm4gKndhcm5pbmdmbiwKICAgICAgICAgICAgICAgICAgICAgIGZzYWxleF9lcnJvcl9j
YWxsYmFja19mbiAqZXJyb3JmbikKXV0KCi0tIEZ1bmN0aW9ucyBmcm9tIGZzYXBhcnNlLltj
aF0KCkRlY2xzWyJwYXJzZS1pbml0aWFsaXNlIl0gPSBbWwovKiBQcmVwYXJlIG1vZHVsZSBm
b3Igb3BlcmF0aW9uLiAgKi8Kdm9pZApmc2FwYXJzZV9pbml0aWFsaXNlICh2b2lkKQpdXQoK
RGVjbHNbInBhcnNlLWRlc3Ryb3ktbW9kdWxlIl0gPSBbWwovKiBEZXN0cm95IGFsbCBwYXJz
ZXIgaW5zdGFuY2VzLCBwbHVzIGFueSBhc3NvY2lhdGVkIHJlc291cmNlcyBvd25lZCBieSB0
aGUKICAgbW9kdWxlLiAgKi8Kdm9pZApmc2FwYXJzZV9kZXN0cm95X21vZHVsZSAodm9pZCkK
XV0KCkRlY2xzWyJwYXJzZS1uZXciXSA9IFtbCi8qIEdlbmVyYXRlIGEgbmV3IGluc3RhbmNl
IG9mIGFuIEZTQSBwYXJzZXIuICAqLwpmc2FwYXJzZV9jdHh0X3QgKgpmc2FwYXJzZV9uZXcg
KHZvaWQpCl1dCgpEZWNsc1sicGFyc2UtbGV4ZXIiXSA9IFtbCi8qIFJlY2VpdmVyIGEgbGV4
ZXIgZnVuY3Rpb24sIHBsdXMgbGV4ZXIgaW5zdGFuY2UgY29udGV4dCBwb2ludGVyLCBmb3Ig
dXNlIGJ5CiAgIHRoZSBwYXJzZXIuICBBbHRob3VnaCBub3QgbmVlZGVkIGluaXRpYWxseSwg
dGhpcyBwbHVnLWluIGFyY2hpdGVjdHVyZSBtYXkKICAgYmUgdXNlZnVsIGluIHRoZSBmdXR1
cmUsIGFuZCBpdCBicmVha3MgdXAgc29tZSBvZiB0aGUgaW50cmljYXRlCiAgIGNvbm5lY3Rp
b25zIHRoYXQgbWFkZSB0aGUgb3JpZ2luYWwgZGZhLmMgY29kZSBzbyBkYXVudGluZy4gICov
CnZvaWQKZnNhcGFyc2VfbGV4ZXIgKGZzYXBhcnNlX2N0eHRfdCAqcGFyc2VyLAogICAgICAg
ICAgICAgICAgdm9pZCAqbGV4ZXJfY29udGV4dCwKICAgICAgICAgICAgICAgIHByb3RvX2xl
eHBhcnNlX2xleF9mbl90ICpsZXhfZm4sCiAgICAgICAgICAgICAgICBwcm90b19sZXhwYXJz
ZV9leGNoYW5nZV9mbl90ICpsZXhfZXhjaGFuZ2VfZm4pCl1dCgotLSBSZXdyaXRlIGhlYWRl
ciBvZiBmc2FwYXJzZV9wYXJzZSBjb21wbGV0ZWx5IGhlcmUsIGFzIHNwbGl0dGluZyB0aGUg
bGV4ZXIKLS0gaW50byBhIHNlcGFyYXRlIGVudGl0eSBtYWtlcyBtdWNoIG9mIHRoZSBoZWFk
ZXIgaXJyZWxldmFudC4KRGVjbHNbInBhcnNlIl0gPSBbWwovKiBNYWluIGVudHJ5IHBvaW50
IGZvciB0aGUgcGFyc2VyLiAgUGFyc2VyIGlzIGEgcG9pbnRlciB0byBhIHBhcnNlcgogICBj
b250ZXh0IHN0cnVjdCBjcmVhdGVkIGJ5IGZzYXBhcnNlX25ldy4gIEJlZm9yZSBjYWxsaW5n
IHRoaXMgZnVuY3Rpb24sCiAgIHRoZSBwYXJzZXIgaW5zdGFuY2UgbXVzdCBiZSBzdXBwbGll
ZCB3aXRoIGEgbGV4ZXIgKGZzYXBhcnNlX2xleGVyKSwgYW5kCiAgIGFsc28gd2l0aCBjYWxs
YmFjayBmdW5jdGlvbnMgdG8gcmVjZWl2ZSB3YXJuaW5nIGFuZCBlcnJvciByZXBvcnRzCiAg
IChmc2FwYXJzZV9lc2NlcHRpb25fZm5zKS4gICovCnZvaWQKZnNhcGFyc2VfcGFyc2UgKGZz
YXBhcnNlX2N0eHRfdCAqcGFyc2VyKQpdXQoKRGVjbHNbInBhcnNlLWdldC10b2tlbi1saXN0
Il0gPSBbWwovKiBBZnRlciBwYXJzaW5nLCByZXBvcnQgYSBsaXN0IG9mIHRva2VucyBkZXNj
cmliaW5nIHRoZSBwYXR0ZXJuLiAgQ29tcGxleAogICBzdHJ1Y3R1cmVzIHN1Y2ggYXMgYWx0
ZXJuYXRpb24sIGJhY2tyZWZlcmVuY2VzLCBhbmQgbG9jYWxlLWluZHVjZWQKICAgY29tcGxl
eGl0eSBzdWNoIGFzIHZhcmlhYmxlLWxlbmd0aCB1dGY4IHNlcXVlbmNlcyBhcmUgZGVzY3Jp
YmVkIGhlcmUgYnkKICAgYXBwZW5kaW5nIG9wZXJhdG9ycyB0aGF0IGFwcGx5IHRvIHRoZSBw
cmVjZWRpbmcgaXRlbShzKSAocG9zdGZpeAogICBub3RhdGlvbikuICAqLwp2b2lkCmZzYXBh
cnNlX2dldF90b2tlbl9saXN0IChmc2FwYXJzZV9jdHh0X3QgKnBhcnNlciwKICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCAqbnJfdG9rZW5zLAogICAgICAgICAgICAgICAgICAg
ICAgICAgZnNhdG9rZW5fdG9rZW5fdCAqKnRva2VuX2xpc3QpCl1dCgotLSBGdW5jdGlvbnMg
ZnJvbSBmc2FtdXN0cy5bY2hdCgpEZWNsc1sibXVzdCJdID0gW1sKLyogUmVjZWl2ZSBhbiBl
eGlzdGluZyBsaXN0IChwb3NzaWJseSBlbXB0eSkgb2YgbXVzdC1oYXZlIHN0cmluZ3MsIHRv
Z2V0aGVyCiAgIHdpdGggYSBsaXN0IG9mIHRoZSB0b2tlbnMgZm9yIHRoZSBjdXJyZW50IEZT
QSAocG9zdGZpeCB0cmVlIG9yZGVyKSwgYW5kCiAgIGlmIHRoZXJlIGFyZSBhbnkgbW9yZSBt
dXN0LWhhdmUgc3RyaW5ncyBpbiB0aGUgdG9rZW4gbGlzdCwgYWRkIHRoZW0gdG8KICAgdGhl
IG11c3QtaGF2ZSBsaXN0LiAgUmV0dXJucyB0aGUgcG9zc2libHktbW9kaWZpZWQgbGlzdCB0
byB0aGUgY2FsbGVyLgogICBMb2NhbGUgYW5kIHN5bnRheCBpdGVtcyBhcmUgcGFydGlhbGx5
IGNvdmVyZWQgaGVyZSBieSB0aGUgY2FzZV9mb2xkIGFuZAogICB1bmlieXRlX2xvY2FsZSBm
bGFncywgYnV0IHRoaXMgaXMgaW5jb21wbGV0ZSwgYW5kIHNob3VsZCBiZSBhZGRyZXNzZWQg
YnkKICAgU3RhZ2UgMiAoaW1wcm92aW5nIHRoZSBleHByZXNzaXZlbmVzcyBvZiB0b2tlbnMp
LiAgKi8KZnNhbXVzdHNfbGlzdF9lbGVtZW50X3QgKgpmc2FtdXN0c19tdXN0IChmc2FtdXN0
c19saXN0X2VsZW1lbnRfdCAqbXVzdF9saXN0LAogICAgICAgICAgICAgIHNpemVfdCBucl90
b2tlbnMsIGZzYXRva2VuX3Rva2VuX3QgKnRva2VuX2xpc3QsCiAgICAgICAgICAgICAgYm9v
bCBjYXNlX2ZvbGQsIGJvb2wgdW5pYnl0ZV9sb2NhbGUpCl1dCgotLSBGdW5jdGlvbnMgZnJv
bSBoaWdoLWxldmVsLWRmYS5bY2hdCgpEZWNsc1siaGxkZmEtaW5pdGlhbGlzZSJdID0gW1sK
LyogUHJlcGFyZSBtb2R1bGUgZm9yIG9wZXJhdGlvbi4gICovCnZvaWQKaGxkZmFfaW5pdGlh
bGlzZSAodm9pZCkKXV0KCkRlY2xzWyJobGRmYS1kZXN0cm95LW1vZHVsZSJdID0gW1sKLyog
RGVzdHJveSBhbGwgaGlnaC1sZXZlbCBkZmEgaW5zdGFuY2VzLCBwbHVzIGFueSBhc3NvY2lh
dGVkIHJlc291cmNlcyBvd25lZAogICBieSB0aGUgbW9kdWxlLiAgKi8Kdm9pZApobGRmYV9k
ZXN0cm95X21vZHVsZSAodm9pZCkKXV0KCi0tLS0tLS0tLS0tLS0tLS0qKioqKioqKiBjaGFy
Y2xhc3MuaCAqKioqKioqKi0tLS0tLS0tLS0tLS0tLS0KCnByaW50KCJDcmVhdGluZyBjaGFy
Y2xhc3MuaC4uLiIpCmxvY2FsIGYgPSBhc3NlcnQoaW8ub3BlbigiY2hhcmNsYXNzLmgiLCAi
dyIpKQphc3NlcnQoZjp3cml0ZShbWwovKiBjaGFyY2xhc3MgLS0gVG9vbHMgdG8gY3JlYXRl
IGFuZCBtYW5pcHVsYXRlIHNldHMgb2YgY2hhcmFjdGVycyAob2N0ZXRzKQoKXV0pKQphc3Nl
cnQoZjp3cml0ZShSYXdUZXh0KCJDb3B5cmlnaHQuZGZhYyIpLCAiXG4iKSkKYXNzZXJ0KGY6
d3JpdGUoUmF3VGV4dCgiTGljZW5zZVdhcnJhbnR5LmRmYWMiKSwgIlxuIikpCmFzc2VydChm
OndyaXRlKFJhd1RleHQoIkF1dGhvcnMuZGZhYyIpKSkKYXNzZXJ0KGY6d3JpdGUoW1sKCi8q
IDIwMTQ6IFJlcGFja2FnZWQgYnkgInVudGFuZ2xlIiBzY3JpcHQsIHdyaXR0ZW4gYnkgYmVo
b2Zmc2tpLiAgKi8KCi8qIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHNlcnZpY2VzIHRvIGFsbG9j
YXRlLCBtYW5pcHVsYXRlLCBjb25zb2xpZGF0ZQogICBhbmQgZGlzY2FyZCAyNTYtYml0IHZl
Y3RvcnMsIHVzZWQgdG8gZGVzY3JpYmUgOC1iaXQgKG9jdGV0KSBzZXRzLgogICBPY3RldCBp
cyB1c2VkIGFzIHRoZSBtZW1iZXIgbmFtZSBoZXJlLCBhcyAiYnl0ZSIgb3IgImNoYXIiIGNh
bgogICBzb21ldGltZXMgcmVmZXIgdG8gZGlmZmVyZW50IGJpdCBzaXplcyAoZS5nLiBjaGFy
IC0+IDYgYml0cyBvbiBzb21lCiAgIElCTS9DeWJlciBhcmNoaXRlY3R1cmVzOyBjaGFyIC0+
IDMyIGJpdHMgb24gc29tZSBEU1AgYXJjaGl0ZWN0dXJlczsKICAgaW4gQywgc2l6ZW9mIChj
aGFyKSA9PSAxIGJ5IGRlZmluaXRpb24gb24gYWxsIGFyY2hpdGVjdHVyZXMpLgoKICAgVGhl
IGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSAiY2hhcmNsYXNzIiBzZXRzIGFuZCBzZXQgZXhw
cmVzc2lvbiBieQogICBSRSB0b29scyBjYW4gYmUgbm9uLXRyaXZpYWw6ICBNYW55IFVuaWNv
ZGUgY2hhcmFjdGVycyBjYW5ub3QgZml0CiAgIGludG8gOCBiaXRzLCBhbmQgZXZlbiB3aGVy
ZSBvY3RldC1iYXNlZCBjb2RlIHBhZ2VzIGFyZSB1c2VkLAogICBub250cml2aWFsIGNhc2Vz
IGNhbiBhcHBlYXIgKGUuZy4gQ29kZSBwYWdlIDg1NywgTVMtRE9TIFR1cmtpc2gsCiAgIHdo
aWNoIGhhcyBib3RoIGEgZG90dGVkIGFuZCBhIGRvdGxlc3MgbG93ZXJjYXNlIGFuZCB1cHBl
cmNhc2UgIkkiKS4KCiAgIE9uIHRoZSBzdG9yYWdlIHNpZGUsIHRoaW5ncyBhcmUgc2xpZ2h0
bHkgdHJpY2t5IGFuZCBwZXJoYXBzIGV2ZW4KICAgbXVya3kgYXQgdGltZXMuICBUaGUgY2xp
ZW50IHN0YXJ0cyBieSBhbGxvY2F0aW5nIGEgY2hhcmNsYXNzLAogICB3b3JraW5nIG9uIGl0
LCBhbmQgdGhlbiBlaXRoZXIgY29tcGxldGluZyBpdCAodXN1YWxseSkgb3IgYWJhbmRvbmlu
ZwogICBpdC4gIFRoZSB3b3JraW5nIGNsYXNzIChwdW4gaW50ZW5kZWQpIGlzIHJlcHJlc2Vu
dGVkIGJ5IGEgcG9pbnRlci4KICAgSWYgbm90IGFiYW5kb25lZCwgdGhpcyBwb2ludGVyIGlz
IGd1YXJhbnRlZWQgdG8gcmVtYWluIHZhbGlkIGZvciB0aGUKICAgbGlmZXRpbWUgb2YgdGhl
IG1vZHVsZS4KCiAgIFRoZSBtb2R1bGUgdHJpZXMgYWdncmVzc2l2ZWx5IHRvIGVsaW1pbmF0
ZSBkdXBsaWNhdGVzOyB0aGlzIGlzCiAgIHBlcmhhcHMgdGhlIG1haW4gZnVuY3Rpb24gb2Yg
dGhlIGNvbXBsZXRpb24gc3RlcC4gIFNvLCB0aGUgcG9pbnRlcgogICB0aGF0IHJlcHJlc2Vu
dHMgdGhlIGNsYXNzIGFmdGVyIGNvbXBsZXRpb24gbWF5IG5vdCBiZSB0aGUgd29ya2luZwog
ICBwb2ludGVyLgoKICAgSW4gYWRkaXRpb24gdG8gdGhlIHBvaW50ZXIgbWV0aG9kIG9mIHJl
ZmVycmluZyB0byBhIGNsYXNzLCB0aGUKICAgY2xhc3NlcyBjYW4gYmUgdmlld2VkIGFzIGFu
IGFycmF5LCB3aXRoIHRoZSBmaXJzdCBjbGFzcyByZWNlaXZpbmcKICAgaW5kZXggMCwgdGhl
IHNlY29uZCByZWNlaXZpbmcgaW5kZXggMSwgYW5kIHNvIG9uLiAgRnVuY3Rpb25zIGFyZQog
ICBwcm92aWRlZCB0byBtYXAgcG9pbnRlcnMgdG8gaW5kZXhlcywgYW5kIHZpY2UgdmVyc2Eu
ICBUaGUgaW5kZXgKICAgcmVwcmVzZW50YXRpb24gaXMgaGFuZHkgYXMgaXQgaXMgdmVyeSBj
b21wYWN0ICh0eXBpY2FsbHkgbXVjaCBmZXdlcgogICB0aGFuIDI0IGJpdHMpLCB3aGVyZWFz
IHBvaW50ZXJzIGFyZSBhcmNoaXRlY3R1cmUgYW5kIE9TLXNwZWNpZmljLAogICBhbmQgbWF5
IGJlIDY0IGJpdHMgb3IgbW9yZS4KCiAgIEluZGV4IDAgaXMgc3BlY2lhbDsgaXQgd2lsbCBh
bHdheXMgcmVwcmVzZW50IHRoZSB6ZXJvLWNsYXNzIChubwogICBtZW1iZXJzIHNldCkuICBV
c2VycyB3YW50aW5nIHRvIHN0b3JlIGEgc2V0IG9mIG5vbi16ZXJvY2xhc3MgY2xhc3Nlcwog
ICAoZS5nLiB1dGY4KSBjYW4gdXNlIHRoaXMgcHJvcGVydHkgYXMgYSBzZW50aW5lbCAoYSB2
YWx1ZSBvZiAwIGZvciBhCiAgIHN0YXRpYyB2YXJpYWJsZSBjYW4gbWVhbiAibm90IGluaXRp
YWxpc2VkIikuCgogICBGaW5hbGx5LCB0aGVyZSBhcmUgc29tZSAiZ3V0dGVyIiBiaXRzLCBh
dCBsZWFzdCAzIG9uIGVhY2ggZW5kIG9mCiAgIHRoZSBjbGFzcywgc28gdGhhdCwgdG8gYSBs
aW1pdGVkIGV4dGVudCAoYW5kIGVzcGVjaWFsbHkgZm9yIHRoZQogICBjb21tb24gY2FzZSBv
ZiBFT0YgPT0gLTEpLCBiaXRzIGNhbiBiZSBzZXQgYW5kIGNsZWFyZWQgd2l0aG91dAogICBj
YXVzaW5nIHByb2JsZW1zLCBhbmQgdGhlIGNvZGUgZG9lcyBub3QgbmVlZCB0byBpbmNsdWRl
IHRoZSBvdmVyaGVhZAogICBvZiBjaGVja3MgZm9yIG91dC1vZi1ib3VuZCBiaXQgbnVtYmVy
cy4gIFRoZXNlIGd1dHRlciBiaXRzIGFyZQogICBjbGVhcmVkIHdoZW4gdGhlIGNsYXNzIGlz
IGNvbXBsZXRlZCwgc28gRU9GIChmb3IgaW5zdGFuY2UpIHNob3VsZAogICBuZXZlciBiZSBt
ZW1iZXIgb2YgYSBjbGFzcy4gICovCgpdXSkpCgotLSBBZGQgcHJlcHJvY2Vzc29yIGxpbmVz
IHRvIG1ha2UgdGhpcyBoZWFkZXIgZmlsZSBpZGVtcG90ZW50Lgphc3NlcnQoZjp3cml0ZShb
WwoKI2lmbmRlZiBDSEFSQ0xBU1NfSAojZGVmaW5lIENIQVJDTEFTU19IIDEKCi8qIEFsd2F5
cyBpbXBvcnQgZW52aXJvbm1lbnQtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpdGVtcyBmaXJz
dC4gKi8KI2luY2x1ZGUgPGNvbmZpZy5oPgoKI2luY2x1ZGUgPGxpbWl0cy5oPgojaW5jbHVk
ZSA8c3RkYm9vbC5oPgojaW5jbHVkZSA8c3RkZGVmLmg+CgovKiBEZWZpbmUgY2hhcmNsYXNz
IGFzIGFuIG9wYXF1ZSB0eXBlLiAgKi8KdHlwZWRlZiBzdHJ1Y3QgY2hhcmNsYXNzX3N0cnVj
dCBjaGFyY2xhc3NfdDsKCi8qIEZpcnN0IGludGVnZXIgdmFsdWUgdGhhdCBpcyBncmVhdGVy
IHRoYW4gYW55IHVuaWJ5dGUgY2hhci4gIEVhY2gKICAgY2xhc3MgY2FuIG1vZGVsIFswIC4u
IENIQVJDTEFTU19OT1RDSEFSIC0gMV0gbWVtYmVycy4gIFRoZSB1c2VyIG1heQogICByZWZl
cmVuY2UgYSBmZXcgbWVtYmVycyBhYm92ZSBvciBiZWxvdyB0aGlzIHJhbmdlLCB0aGFua3Mg
dG8gdGhlCiAgIGV4cGxpY2l0IGd1dHRlcnMsIGJ1dCB0aGUgbWFyZ2lucyBwcm92aWRlZCBi
eSB0aGlzIGZhY2lsaXR5IGFyZQogICBzbWFsbC4gICovCmVudW0geyBDSEFSQ0xBU1NfTk9U
Q0hBUiA9IDEgPDwgQ0hBUl9CSVQgfTsKCi8qIEluZGljZXMgdG8gdmFsaWQgY2hhcmNsYXNz
ZXMgYXJlIGFsd2F5cyBub24tbmVnYXRpdmU7IHplcm8gaXMKICAgcmVzZXJ2ZWQgYXMgYW4g
aW5kZXggdG8gdGhlIHplcm9jYXNzLCBhbmQgYWxsIG90aGVyIGNsYXNzIGVudGl0aWVzCiAg
IGhhdmUgcG9zaXRpdmUgaW5kaWNlcy4gIFdlIHVzZSBwdHJkaWZmX3QgcmF0aGVyIHRoYW4g
c2l6ZV90IGhlcmUKICAgYXMgLTEgY2FuIGJlIHVzZWQgYXMgYSBzZW50aW5lbCBpbiBzb21l
IHBsYWNlcy4gICovCnR5cGVkZWYgcHRyZGlmZl90IGNoYXJjbGFzc19pbmRleF90OwoKLyog
SW5kZXggemVybyBpcyBzcGVjaWFsOiAgSXQgaXMgdGhlIHplcm8tY2xhc3MgKG5vIGJpdHMg
c2V0KSBjbGFzcy4gICovCmVudW0KewogIENIQVJDTEFTU19aRVJPQ0xBU1NfSU5ERVggPSAw
Cn07CgovKiBFbnRpcmUtbW9kdWxlIGluaXRpYWxpc2F0aW9uIGFuZCBkZXN0cnVjdGlvbiBm
dW5jdGlvbnMuICBUaGUgY2xpZW50CiAgIHNwZWNpZmllcyBzdGFydGluZyBzaXplIGZvciB0
aGUgY2xhc3MgcG9vbC4gIERlc3Ryb3lfbW9kdWxlIHJlbGVhc2VzCiAgIGFsbCByZXNvdXJj
ZXMgYWNxdWlyZWQgYnkgdGhpcyBtb2R1bGUuICAqLwoKXV0pKQpXcml0ZUV4dGVybkRlY2wo
ZiwgRGVjbHNbImNoYXJjbGFzcy1pbml0aWFsaXNlIl0pCldyaXRlRXh0ZXJuRGVjbChmLCBE
ZWNsc1siY2hhcmNsYXNzLWRlc3Ryb3ktbW9kdWxlIl0pCgphc3NlcnQoZjp3cml0ZShbWwov
KiBTaW5nbGUtYml0IG9wZXJhdGlvbnMgKHRlc3QsIHNldCwgY2xlYXIpLiAgKi8KCl1dKSkK
Ci0tIFdyaXRlIGRlY2xhcmF0aW9uIHdpdGggImV4dGVybiIgcHJlY2VkaW5nIGFuZCAiOyIg
Zm9sbG93aW5nIHRleHQuCldyaXRlRXh0ZXJuRGVjbChmLCBEZWNsc1sidHN0Yml0Il0pCldy
aXRlRXh0ZXJuRGVjbChmLCBEZWNsc1sic2V0Yml0Il0pCldyaXRlRXh0ZXJuRGVjbChmLCBE
ZWNsc1siY2xyYml0Il0pCgphc3NlcnQoZjp3cml0ZShbWwovKiBSYW5nZS1vZi1iaXRzIHNl
dCBhbmQgY2xlYXIgb3BlcmF0aW9ucy4gIFRoZXNlIGFyZSBlYXNpZXIgdG8gcmVhZCwKICAg
YW5kIGFsc28gbW9yZSBlZmZpY2llbnQsIHRoYW4gbXVsdGlwbGUgc2luZ2xlLWJpdCBjYWxs
cy4gICovCgpdXSkpCgpXcml0ZUV4dGVybkRlY2woZiwgRGVjbHNbInNldGJpdF9yYW5nZSJd
KQpXcml0ZUV4dGVybkRlY2woZiwgRGVjbHNbImNscmJpdF9yYW5nZSJdKQoKYXNzZXJ0KGY6
d3JpdGUoW1sKLyogV2hvbGUtb2Ytc2V0IG9wZXJhdGlvbnMgKGNvcHksIHplcm8sIGludmVy
dCwgY29tcGFyZS1lcXVhbCkuICAqLwoKXV0pKQoKV3JpdGVFeHRlcm5EZWNsKGYsIERlY2xz
WyJjb3B5c2V0Il0pCldyaXRlRXh0ZXJuRGVjbChmLCBEZWNsc1siemVyb3NldCJdKQpXcml0
ZUV4dGVybkRlY2woZiwgRGVjbHNbIm5vdHNldCJdKQpXcml0ZUV4dGVybkRlY2woZiwgRGVj
bHNbImVxdWFsIl0pCgphc3NlcnQoZjp3cml0ZShbWwovKiBBZGQgInVuaW9uc2V0IiBhbmQg
ImludGVyc2VjdHNldCIgZnVuY3Rpb25zIHNpbmNlIHdob2xlLW9mLWNsYXNzCiAgIG9wZXJh
dGlvbnMgdGVuZCB0byBiZSByZWFzb25hYmx5IGV4cHJlc3NpdmUgYW5kIHNlbGYtZG9jdW1l
bnRpbmcuCiAgIEluIGJvdGggY2FzZXMsIHRoZSBzb3VyY2UgbW9kaWZpZXMgdGhlIGRlc3Rp
bmF0aW9uOyBPUmVkIGluLCBpbiB0aGUKICAgY2FzZSBvZiB1bmlvbnNldDsgQU5EZWQgaW4s
IGluIHRoZSBjYXNlIG9mIGludGVyc2VjdHNldC4gICovCl1dKSkKV3JpdGVFeHRlcm5EZWNs
KGYsIERlY2xzWyJ1bmlvbnNldCJdKQpXcml0ZUV4dGVybkRlY2woZiwgRGVjbHNbImludGVy
c2VjdHNldCJdKQoKYXNzZXJ0KGY6d3JpdGUoW1sKLyogRnVuY3Rpb25zIHRvIGFsbG9jYXRl
LCBjb21wbGV0ZSBhbmQgYWJhbmRvbiBjaGFyY2xhc3Nlcy4gIE5vdGUgdGhhdAogICB0aGUg
bW9kdWxlIGFnZ3Jlc3NpdmVseSB0cmllcyB0byByZXVzZSBleGlzdGluZyBjb21wbGV0ZWQg
Y2xhc3NlcwogICByYXRoZXIgdGhhbiBjcmVhdGUgbmV3IG9uZXMuICBUaGUgbW9kdWxlIHJl
dHVybnMgYW4gdW5pcXVlIGluZGV4CiAgIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVmZXJlbmNl
IHRoZSBtb2R1bGU7IHRoaXMgaW5kZXggc3VwZXJjZWRlcyB0aGUKICAgcG9pbnRlciB1c2Vk
IGR1cmluZyB0aGUgd29yayBwaGFzZSwgZS5nLjoKCiAgICAgICAgd29ya19jbGFzc19wb2lu
dGVyID0gY2hhcmNsYXNzX2FsbG9jICgpOwogICAgICAgIC4uLihTZXQvY2xlYXIgbWVtYmVy
cyBhcyByZXF1aXJlZCB0byBjb25zdHJ1Y3QgYSBjbGFzcyBpbgogICAgICAgICAgICAgd29y
a19jbGFzc19wb2ludGVyLikuLi4KICAgICAgICBjbGFzc19pbmRleCA9IGNoYXJjbGFzc19j
b21wbGV0ZWQgKHdvcmtfY2xhc3NfcG9pbnRlcik7CiAgICAgICAgY29tcGxldGVkX2NsYXNz
X3BvaW50ZXIgPSBjaGFyY2xhc3NfZ2V0X3BvaW50ZXIgKGNsYXNzX2luZGV4KTsKICAgICAg
ICAuLi4oY29tcGxldGVkX2NsYXNzX3BvaW50ZXIgbWlnaHQgbm90ID09IHdvcmtfY2xhc3Nf
cG9pbnRlci4pLi4uCgogICBUaGUgYWdncmVzc2l2ZS1yZXVzZSBwb2xpY3kgYWxzbyBtZWFu
cyB0aGF0IGNvbXBsZXRlZCBjbGFzc2VzIG11c3QKICAgbm90IHVuZGVyZ28gZnVydGhlciBt
b2RpZmljYXRpb24uICBBbm90aGVyIHBpZWNlIG9mIGNvZGluZyBoeWdpZW5lIGlzCiAgIHRo
YXQgdGhlIHBvaW50ZXIgdmFsdWUgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIGNsYXNzIHNob3Vs
ZCBub3QgYmUgdXNlZAogICBvbmNlIHRoZSBjbGFzcyBpcyBlaXRoZXIgY29tcGxldGVkIG9y
IGFiYW5kb25lZC4KCiAgIEFsbG9jYXRpbmcgYW5kIHRoZW4gYWJhbmRvbmluZyBjbGFzc2Vz
IGlzIHVzZWZ1bCB3aGVyZSBhbiBvcGVyYXRpb24KICAgcmVxdWlyZXMgdGVtcG9yYXJ5IGNs
YXNzZXMgZm9yIGEgd2hpbGUsIGJ1dCB0aGVzZSBkbyBub3QgbmVlZCB0byBiZQogICBtYWlu
dGFpbmVkIG9uY2UgdGhlIHdvcmsgaXMgY29tcGxldGUuCgogICAyIE1heSAyMDE0OiBOb3Rl
IHRvIHNlbGYgYW5kIG90aGVyczogSSB3YXMgdXNpbmcgdGhlIHRlcm0gImZpbmFsaXNlIgog
ICBpbnN0ZWFkIG9mICJjb21wbGV0ZWQiIGZvciB0aGUgb3BlcmF0aW9uIHdoZXJlIGEgY2xh
c3MgaGFzIGJlZW4gY29uc3RydWN0ZWQKICAgYW5kIGlzIG5vdyByZWFkeSB0byBiZSB1c2Vk
OyBJJ3ZlIGRlY2lkZWQgdG8gY2hhbmdlIHRoZSB0ZXJtaW5vbG9neSBhZnRlcgogICByZWFk
aW5nIGluIHZhcmlvdXMgcGxhY2VzIGhvdyB0aGUgdGVybSAiZmluYWxpc2UiIGlzIHVzdWFs
bHkgc3Ryb25nbHkKICAgY29ubmVjdGVkIHdpdGggZW5kLW9mLWxpZmUgb3BlcmF0aW9ucyBv
biBhbiBvYmplY3QgYW5kL29yIGNsYXNzLCBub3QgYQogICByZWFkeS1mb3ItdXNlIG9wZXJh
dGlvbi4gIFRoaXMgbm90ZSBpcyBhIHJlbWluZGVyIHRvIG15c2VsZiBhbmQgYSBoaW50IHRv
CiAgIG90aGVycyBhYm91dCB0aGlzIGNoYW5nZSwgaW4gY2FzZSB2ZXN0aWdlcyBvZiB0aGUg
ZWFybGllciBuYW1pbmcgc2NoZW1lCiAgIHNsaXAgdGhyb3VnaCBteSBlZGl0cyBhbmQvb3Ig
YXBwZWFyIGluIHRoZSBjb2RlLiAgKi8KCmV4dGVybiBjaGFyY2xhc3NfdCAqCmNoYXJjbGFz
c19hbGxvYyAodm9pZCk7CgpleHRlcm4gY2hhcmNsYXNzX2luZGV4X3QKY2hhcmNsYXNzX2Nv
bXBsZXRlZCAoY2hhcmNsYXNzX3QgKmNjbCk7CgpleHRlcm4gdm9pZApjaGFyY2xhc3NfYWJh
bmRvbiAoY2hhcmNsYXNzX3QgKmNjbCk7CgovKiBGdW5jdGlvbnMgdG8gbWFwIGJldHdlZW4g
cG9pbnRlciByZWZlcmVuY2VzIGFuZCBpbmRleCByZWZlcmVuY2VzIGZvcgogICBhIGNoYXJj
bGFzcy4gIEFzIGV4cGxhaW5lZCBhYm92ZSwgdGhlIGluZGV4IGlzIGNvbnZlbmllbnQgYXMg
aXQgaXMKICAgdHlwaWNhbGx5IGFuIGFycmF5IHJlZmVyZW5jZSwgYW5kIGlzIHVzdWFsbHkg
bm90IG11Y2ggbGFyZ2VyIHRoYW4gdGhlCiAgIG51bWJlciBvZiBjbGFzc2VzIHRoYXQgaGF2
ZSBiZWVuIGFsbG9jYXRlZC4gICovCgpleHRlcm4gY2hhcmNsYXNzX3QgKiBfR0xfQVRUUklC
VVRFX1BVUkUKY2hhcmNsYXNzX2dldF9wb2ludGVyIChjaGFyY2xhc3NfaW5kZXhfdCBjb25z
dCBpbmRleCk7CgpleHRlcm4gY2hhcmNsYXNzX2luZGV4X3QgX0dMX0FUVFJJQlVURV9QVVJF
CmNoYXJjbGFzc19nZXRfaW5kZXggKGNoYXJjbGFzc190IGNvbnN0ICpjY2wpOwoKLyogUmV0
dXJuIGEgc3RhdGljIHN0cmluZyBkZXNjcmliaW5nIGEgY2xhc3MgKE5vdGU6IG5vdCByZWVu
dHJhbnQpLiAgKi8KZXh0ZXJuIGNoYXIgKgpjaGFyY2xhc3NfZGVzY3JpYmUgKGNoYXJjbGFz
c190IGNvbnN0ICpjY2wpOwoKXV0pKQoKLS0gRmluYWxseSwgYWRkIHRyYWlsZXIgbGluZXMg
KGlkZW1wb3RlbmN5LCB2aW0pCmFzc2VydChmOndyaXRlKFtbCiNlbmRpZiAvKiBDSEFSQ0xB
U1NfSCAqLwoKLyogdmltOnNldCBzaGlmdHdpZHRoPTI6ICovCl1dKSkKCmFzc2VydChmOmNs
b3NlKCkpCgotLS0tLS0tLS0tLS0tLS0tKioqKioqKiogY2hhcmNsYXNzLmMgKioqKioqKiot
LS0tLS0tLS0tLS0tLS0tCgpwcmludCgiQ3JlYXRpbmcgY2hhcmNsYXNzLmMuLi4iKQpsb2Nh
bCBmID0gYXNzZXJ0KGlvLm9wZW4oImNoYXJjbGFzcy5jIiwgInciKSkKYXNzZXJ0KGY6d3Jp
dGUoW1sKLyogY2hhcmNsYXNzIC0tIFRvb2xzIHRvIGNyZWF0ZSBhbmQgbWFuaXB1bGF0ZSBz
ZXRzIG9mIEMgImNoYXIicwoKVGhpcyBtb2R1bGUgcHJvdmlkZXMgdG9vbHMgdG8gY3JlYXRl
LCBtb2RpZnksIHN0b3JlIGFuZCByZXRyaWV2ZSBjaGFyYWN0ZXIKY2xhc3NlcywgYW5kIHBy
b3ZpZGVzIHRvb2xzIHR1bmVkIHRvIHRoZSBuZWVkcyBvZiBSRSBsZXhpY2FsIGFuYWx5c2Vy
cy4KClRoZSBjbGFzcyBpdHNlbGYgaXMgYW4gb3BhcXVlIHR5cGUsIHJlZmVyZW5jZWQgYnkg
YSBwb2ludGVyIHdoaWxlIHVuZGVyCmNvbnN0cnVjdGlvbiwgYW5kIGxhdGVyIGJ5IGFuIHVu
aXF1ZSBpbmRleCB3aGVuIGNvbXBsZXRlZC4gIFRoZSBtb2R1bGUKdHJpZXMgYWdncmVzc2l2
ZWx5IHRvIHJldXNlIGV4aXN0aW5nIGNvbXBsZXRlZCBjbGFzc2VzLCByYXRoZXIgdGhhbiBj
cmVhdGUKZHVwbGljYXRlcy4gIEZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgdG8gbWFwIGJldHdl
ZW4gaW5kZXhlcyBhbmQgcG9pbnRlcnMuCkJlY2F1c2Ugb2YgdGhlIGRlZHVwbGljYXRpb24g
ZWZmb3J0LCB0aGUgaW5kZXggcmVwb3J0ZWQgZm9yIGEgY2xhc3MgdXBvbgpjb21wbGV0aW9u
IG1heSBtYXAgdG8gYSBkaWZmZXJlbnQgcG9pbnRlciB0aGFuIHRoZSBvbmUgc3VwcGxpZWQg
YnkgbmV3ICgpLgoKQ2xhc3NlcyBtYXkgYmUgc2hhcmVkIGJldHdlZW4gZGlmZmVyZW50IGxl
eGVyIGluc3RhbmNlcywgYWx0aG91Z2gsIGF0IHRoZQp0aW1lIG9mIHdyaXRpbmcgKDEwIEFw
cmlsIDIwMTQpIGl0IGlzIG5vdCB0aHJlYWQtc2FmZS4gIEluIG1hbnkgY2FzZXMsCnRoZXJl
IG1pZ2h0IG9ubHkgYmUgb25lIGNsYXNzIHVuZGVyIGNvbnN0cnVjdGlvbiBhdCBhbnkgdGlt
ZSwgd2l0aCB0aGUKZWZmb3J0IGVpdGhlciBjb21wbGV0ZWQgb3IgYWJhbmRvbmVkIHF1aWNr
bHkuICBIb3dldmVyLCB0aGlzIG1vZHVsZQpyZWNvZ25pc2VzIHRoYXQgc29tZXRpbWVzIG11
bHRpcGxlIGNsYXNzZXMgbWlnaHQgYmUgd29ya2VkIG9uIGluIHBhcmFsbGVsLAphbmQgc28g
ZXhwbGljaXRseSBtYXJrcyBlYWNoIGFsbG9jYXRlZCBjbGFzcyBhcmVhIGFzIG9uZSBvZiAi
dW51c2VkIiwKIndvcmsiIG9yICJjb21wbGV0ZWQiLiAgVGhpcyBtYXJraW5nIGlzIGRvbmUg
YnkgYW4gYXJyYXkgb2Ygc3RhdGUgYnl0ZXMKZHluYW1pY2FsbHkgYWxsb2NhdGVkIHdoZW4g
dGhlIHBvb2wgaXMgY3JlYXRlZC4KCl1dKSkKYXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgiQ29w
eXJpZ2h0LmRmYWMiKSwgIlxuIikpCmFzc2VydChmOndyaXRlKFJhd1RleHQoIkxpY2Vuc2VX
YXJyYW50eS5kZmFjIiksICJcbiIpKQphc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJBdXRob3Jz
LmRmYWMiKSkpCmFzc2VydChmOndyaXRlKFtbCgovKiAyMDE0OiBSZXBhY2thZ2VkIGJ5ICJ1
bnRhbmdsZSIgc2NyaXB0LCB3cml0dGVuIGJ5IGJlaG9mZnNraS4gICovCgovKiBBbHdheXMg
aW1wb3J0IGVudmlyb25tZW50LXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaXRlbXMgZmlyc3Qu
ICAqLwojaW5jbHVkZSA8Y29uZmlnLmg+CgojaW5jbHVkZSA8YXNzZXJ0Lmg+CiNpbmNsdWRl
ICJjaGFyY2xhc3MuaCIKI2luY2x1ZGUgPGxpbWl0cy5oPgojaW5jbHVkZSA8c3RkYm9vbC5o
PgojaW5jbHVkZSA8c3RkZGVmLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0
ZGlvLmg+IC8qIGZvciBFT0YgYXNzZXJ0IHRlc3QuICAqLwojaW5jbHVkZSA8c3RyaW5nLmg+
CiNpbmNsdWRlIDx3Y2hhci5oPiAvKiBmb3IgV0VPRiBhc3NlcnQgdGVzdC4gICovCiNpbmNs
dWRlICJ4YWxsb2MuaCIKCi8qIExvd2VyIGJvdW5kIGZvciBzaXplIG9mIGZpcnN0IHBvb2wg
aW4gdGhlIGxpc3QuICAqLwovKiA/PyBTZXQgdG8gMiBmb3IgcG9vbCBkZWJ1ZzsgIFVzZSAx
MCBpbiBwcm9kdWN0aW9uPyAgKi8KI2RlZmluZSBQT09MX01JTklNVU1fSU5JVElBTF9TSVpF
ICAgICAgICAgIDEwCgojaWZuZGVmIE1BWAojIGRlZmluZSBNQVgoYSxiKSAoKGEpID4gKGIp
ID8gKGEpIDogKGIpKQojZW5kaWYKCiNpZm5kZWYgTUlOCiMgZGVmaW5lIE1JTihhLGIpICgo
YSkgPCAoYikgPyAoYSkgOiAoYikpCiNlbmRpZgoKXV0pKQoKYXNzZXJ0KGY6d3JpdGUoW1sK
LyogV2UgbWFpbnRhaW4gYSBsaXN0LW9mLXBvb2xzIGhlcmUsIGNob29zaW5nIHRvIG1hbGxv
YyBhIG5ldyBzbGFiIG9mCiAgIG1lbW9yeSBlYWNoIHRpbWUgd2UgcnVuIG91dCwgaW5zdGVh
ZCBvZiBhIHJlYWxsb2Mgc3RyYXRlZ3kuICBUaGlzIGlzIHNvCiAgIHRoYXQgd2UgY2FuIHBy
b3ZpZGUgYSBndWFyYW50ZWUgdG8gdGhlIHVzZXIgdGhhdCBhbnkgY2xhc3MgcG9pbnRlciBp
c3N1ZWQKICAgcmVtYWlucyB2YWxpZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBtb2R1bGUu
ICAqLwoKdHlwZWRlZiBzaXplX3QgcG9vbF9saXN0X2luZGV4X3Q7CgovKiBEZXNpZ25hdG9y
IGZvciBlYWNoIGNoYXJjbGFzcyBpbiBlYWNoIHBvb2wuICBOb3RlIHRoYXQgZW51bXMgYXJl
IGludHMgYnkKICAgZGVmYXVsdCwgYnV0IHdlIHVzZSBhIHNpbmdsZSB1bnNpZ25lZCBjaGFy
IHBlciBjbGFzcyBpbiBvdXIgZXhwbGljaXQKICAgbWVtb3J5IGFsbG9jYXRpb24uICAqLwp0
eXBlZGVmIGVudW0KewogIFNUQVRFX1VOVVNFRCA9IDAsCiAgU1RBVEVfV09SS0lORyA9IDEs
CiAgU1RBVEVfQ09NUExFVEVEID0gMgp9IGNoYXJjbGFzc19zdGF0ZV90OwoKdHlwZWRlZiBz
dHJ1Y3QgcG9vbF9pbmZvX3N0cnVjdCB7CiAgY2hhcmNsYXNzX2luZGV4X3QgZmlyc3RfaW5k
ZXg7CiAgc2l6ZV90IGFsbG9jOyAgICAgIC8qID8/IFVzZSBwb29sX2xpc3RfaW5kZXhfdCB0
eXBlIGZvciB0aGVzZT8gICovCiAgc2l6ZV90IHVzZWQ7CiAgY2hhcmNsYXNzX3QgKmNsYXNz
ZXM7CgogIC8qIENoYXJjbGFzcyBkZXNpZ25hdG9yIGJ5dGUgYXJyYXksIG9uZSBwZXIgaXRl
bSwgYWxsb2NhdGVkIGR5bmFtaWNhbGx5LiAgKi8KICB1bnNpZ25lZCBjaGFyICpjbGFzc19z
dGF0ZTsKfSBwb29sX3Q7CgpzdGF0aWMgcG9vbF9saXN0X2luZGV4X3QgcG9vbF9saXN0X3Vz
ZWQgID0gMDsKc3RhdGljIHBvb2xfbGlzdF9pbmRleF90IHBvb2xfbGlzdF9hbGxvYyA9IDA7
CnN0YXRpYyBwb29sX3QgKnBvb2xfbGlzdCA9IE5VTEw7CgovKiBXaGlsZSB0aGUgaGVhZGVy
IG9ubHkgZ3VhcmFudGVlcyBhIDMtYml0IGd1dHRlciBhdCBlYWNoIGVuZCBvZiBlYWNoCiAg
IGNsYXNzLCB3ZSB1c2UgYW4gZW50aXJlIHdvcmQgKHR5cGljYWxseSAzMiBiaXRzKSBmb3Ig
dGhlIGd1dHRlciwKICAgd2l0aCBhdCBsZWFzdCAxIHdvcmQgcGxhY2VkIGF0IHRoZSBzdGFy
dCBvZiBlYWNoIHBvb2wsIDEgd29yZCBhcyBhCiAgIHNoYXJlZCBndXR0ZXIgYmV0d2VlbiBl
YWNoIGNsYXNzLCBhbmQgMSB3b3JkIGFmdGVyIHRoZSBsYXN0CiAgIGNsYXNzLiAgKi8KCl1d
KSkKCi0tIERlZmluZSBDSEFSQklUUywgSU5UQklUUywgYW5kIENIQVJDTEFTU19XT1JEUyB1
c2VkIHRvIHNjb3BlIG91dAotLSBzaXplIChpbiBpbnRlZ2Vycykgb2YgYml0LXZlY3RvciBh
cnJheS4KYXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgiTm9IUFVYQml0T3BzIiksICJcbiIpKQot
LSB4eFJlbW92ZWQ6IGFzc2VydChmOndyaXRlKFJhd1RleHQoIkNIQVJCSVRTLW9jdGV0cyIp
LCAiXG4iKSkKLS0geHhSZW1vdmVkOiBhc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJJTlRCSVRT
IiksICJcbiIpKQphc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJjaGFyY2xhc3Nfd29yZCB0eXBl
ZGVmIiksICJcbiIpKQphc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJDSEFSQ0xBU1NfV09SRF9C
SVRTIiksICJcbiIpKQphc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJDSEFSQ0xBU1NfV09SRF9N
QVNLIiksICJcbiIpKQphc3NlcnQoZjp3cml0ZShUZXh0U3Vic3QoUmF3VGV4dCgiQ0hBUkNM
QVNTX1dPUkRTIGVudW0iKSwKICAgICAgICAgICAgICAgICAgICAgICAgIk5PVENIQVIiLCAi
Q0hBUkNMQVNTX05PVENIQVIiKSwgIlxuIikpCi0tXV0KCmFzc2VydChmOndyaXRlKFtbCi8q
IEZsZXNoIG91dCBvcGFxdWUgY2hhcmNsYXNzIHR5cGUgZ2l2ZW4gaW4gdGhlIGhlYWRlciAg
Ki8KLyogVGhlIGd1dHRlciBlbGVtZW50IGZvbGxvd2luZyB0aGUgY2xhc3MgbWVtYmVyIHN0
b3JhZ2UgYWxzbyBzZXJ2ZXMgYXMKICAgdGhlIGd1dHRlciBlbGVtZW50IHAtcmVjZWRpbmcg
dGhlIG5leHQgY2xhc3MgaW4gdGhlIGxpc3QuCgogICBOb3RlIHRoYXQgc2luY2UgdGhlICJn
dXR0ZXIiIG5vdGlvbiBleHBsaWNpdGx5IHBlcm1pdHMgYSByZXN0cmljdGVkIHNldAogICBv
ZiBuZWdhdGl2ZSBpbmRpY2VzLCBtZW1iZXJzIG5lZWQgdG8gYmUgc2lnbmVkLCBub3QgdW5z
aWduZWQsIHNvIHRoYXQKICAgYXJpdGhtZXRpYyBzaGlmdCByaWdodCBjYW4gYmUgdXNlZCB3
aGVyZSBwb3NzaWJsZSAoZS5nLiAtOCA+PiA4ID09IC0xLAogICBub3QgLTggLyAyNTYgPT0g
MCkuICAqLwoKc3RydWN0IGNoYXJjbGFzc19zdHJ1Y3QgewogICBjaGFyY2xhc3Nfd29yZCBt
ZW1iZXJzW0NIQVJDTEFTU19XT1JEU107CiAgIGNoYXJjbGFzc193b3JkIGd1dHRlcl9mb2xs
b3dpbmc7Cn07CgpdXSkpCi0tIERlZmluZSBwdWJsaWMgZnVuY3Rpb25zLiAgV2UndmUgbWFk
ZSBjaGFyY2xhc3MgYW4gb3BhcXVlIGNsYXNzLCBzbwotLSBuZWVkIHRvIGVkaXQgZWFjaCBi
b2R5IHRvIGNoYW5nZSBwYXJhbWV0ZXIgImMiIHRvICIqYyIsIGFuZCBpbiBib2R5Ci0tIGNo
YW5nZSAiYyIgdG8gImMtPm1lbWJlcnMiLgoKYXNzZXJ0KGY6d3JpdGUoW1sKLyogRGVmaW5l
IGNsYXNzIGJpdCBvcGVyYXRpb25zOiB0ZXN0LCBzZXQgYW5kIGNsZWFyIGEgYml0LgoKICAg
R3JycnIuICBJIHdhbnRlZCB0byBleHBsb2l0IGFyaXRobWV0aWMgcmlnaHQgc2hpZnQgdG8g
Y29tZSB1cCB3aXRoIGEKICAgcmVhbGx5IGNoZWFwIGFuZCBuZWF0IHdheSBvZiByZWR1Y2lu
ZyBzbWFsbCBuZWdhdGl2ZSBiaXQgdmFsdWVzLAogICBlc3BlY2lhbGx5IGlmIGIgPT0gRU9G
ID09LTEsIHRvIGFuIGluZGV4IG9mIC0xIHRoYXQgZmFsbHMgbmVhdGx5CiAgIGludG8gdGhl
IGd1dHRlciwgYnV0IHN0cmljdCBDIGNvbmZvcm1hbmNlIGRvZXMgbm90IGd1YXJhbnRlZSB0
aGlzLgogICBUaGUgY29kZSBiZWxvdyBoYW5kbGVzIHRoZSB0d28gbW9zdCBsaWtlbHkgc2Nl
bmFyaW9zLCBidXQsIGFzIHdpdGgKICAgYW55dGhpbmcgdGhhdCBpcyB1bmRlZmluZWQsIHRo
aXMgaXMgcGxheWluZyB3aXRoIGZpcmUuICAqLwoKI2lmIElOVF9NQVggPT0gMjE0NzQ4MzY0
NwojIGRlZmluZSBJTlRfQklUU19MT0cyIDUgICAvKiBsb2cyKHNpemVvZihpbnQpKSArIGxv
ZzIoQ0hBUkNMQVNTX1dPUkRfQklUUykgKi8KI2Vsc2UKIyBlcnJvciAiTm90IGltcGxlbWVu
dGVkOiBBcmNoaXRlY3R1cmVzIHdpdGggaW50cyBvdGhlciB0aGFuIDMyIGJpdHMiCiNlbmRp
ZgoKI2lmICgofjAgPj4gMSkgPCAwKQogIC8qIEFyaXRobWV0aWMgc2hpZnQgcmlnaHQ6IEJv
dGggc2lnbmVkIGFuZCB1bnNpZ25lZCBjYXNlcyBhcmUgb2suICAqLwojIGRlZmluZSBBUklU
SF9TSElGVF9SX0lOVChiKSAoKGIpID4+IElOVF9CSVRTX0xPRzIpCiNlbHNlCiAgLyogQXZv
aWQgdXNpbmcgcmlnaHQgc2hpZnQgaWYgYiBpcyBuZWdhdGl2ZS4gIFRoZSBtYWNybyBtYXkg
ZXZhbHVhdGUgYiB0d2ljZQogICAgIGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4gICovCiMgZGVm
aW5lIEFSSVRIX1NISUZUX1JfSU5UKGIpIFwKICAgICAgKCgoYikgPCAwKSA/IC0xIDogKChi
KSA+PiBJTlRfQklUU19MT0cyKSkKI2VuZGlmCgpdXSkpCmFzc2VydChmOndyaXRlKERlY2xz
WyJ0c3RiaXQiXSkpCmxvY2FsIGJvZHkgPSBFZGl0ZWRUZXh0KCJjaGNsYXNzLXRzdGJpdC1i
b2R5IiwKICAgICAgICAiYyVbYiAvIENIQVJDTEFTU19XT1JEX0JJVFMlXSIsICJjY2wtPm1l
bWJlcnNbQVJJVEhfU0hJRlRfUl9JTlQoYildIikKYXNzZXJ0KGY6d3JpdGUoYm9keSwgIlxu
IikpCmFzc2VydChmOndyaXRlKERlY2xzWyJzZXRiaXQiXSkpCmxvY2FsIGJvZHkgPSBFZGl0
ZWRUZXh0KCJjaGNsYXNzLXNldGJpdC1ib2R5IiwKICAgICAgICAiYyVbYiAvIENIQVJDTEFT
U19XT1JEX0JJVFMlXSIsICJjY2wtPm1lbWJlcnNbQVJJVEhfU0hJRlRfUl9JTlQoYildIikK
YXNzZXJ0KGY6d3JpdGUoYm9keSwgIlxuIikpCmFzc2VydChmOndyaXRlKERlY2xzWyJjbHJi
aXQiXSkpCmxvY2FsIGJvZHkgPSBFZGl0ZWRUZXh0KCJjaGNsYXNzLWNscmJpdC1ib2R5IiwK
ICAgICAgICAiYyVbYiAvIENIQVJDTEFTU19XT1JEX0JJVFMlXSIsICJjY2wtPm1lbWJlcnNb
QVJJVEhfU0hJRlRfUl9JTlQoYildIikKYXNzZXJ0KGY6d3JpdGUoYm9keSwgIlxuIikpCgot
LSBBZGQgInNldGJpdF9yYW5nZSIgYW5kICJjbHJiaXRfcmFuZ2UiLCBtYWlubHkgYXMgaXQg
YWxsb3dzIHRoZSBjbGllbnQKLS0gdG8gd3JpdGUgc2lnbmlmaWNhbnRseSBjbGVhbmVyIGNv
ZGUgaW4gc29tZSBjYXNlcyAodXRmOCksIGJ1dCBhbHNvIGJlY2F1c2UKLS0gdGhpcyBjb2Rl
IGlzIChpbml0aWFsbHkpIG1vZGVzdGx5IG1vcmUgZWZmaWNpZW50LiAgKEkgY291bGQgaW1w
bGVtZW50Ci0tIGJpdG1hc2tzIGhlcmUgdG8gaW1wcm92ZSBlZmZpY2llbmN5IG11Y2ggbW9y
ZSwgYnV0IHRoZXJlIGFyZSBzbyBtYW55Ci0tIHRoaW5ncyB0byBkbyB0aGF0IEknbSBza2lw
cGluZyBpdCBmb3Igbm93LikKYXNzZXJ0KGY6d3JpdGUoRGVjbHNbInNldGJpdF9yYW5nZSJd
LCAiXG4iKSkKYXNzZXJ0KGY6d3JpdGUoW1sKewogIGludCBiaXQ7CgogIC8qIERvIG5vdGhp
bmcgaWYgdGhlIHJhbmdlIGRvZXNuJ3QgbWFrZSBzZW5zZS4gICovCiAgaWYgKGVuZCA8IHN0
YXJ0KQogICAgcmV0dXJuOwogIGlmIChzdGFydCA+PSBDSEFSQ0xBU1NfTk9UQ0hBUikKICAg
IHJldHVybjsKCiAgLyogQ2xpcCB0aGUgcmFuZ2UgdG8gYmUgaW4gdGhlIGludGVydmFsIFst
MS4uTk9UQ0hBUiAtIDFdICovCiAgc3RhcnQgPSBNQVgoc3RhcnQsIC0xKTsKICBlbmQgICA9
IE1BWChlbmQsICAgLTEpOwogIC8qIFdlIGtub3cgc3RhcnQgaXMgPCBDSEFSQ0xBU1NfTk9U
Q0hBUiBmcm9tIHRoZSB0ZXN0IGFib3ZlLiAgKi8KICBlbmQgICA9IE1JTihlbmQsICAgQ0hB
UkNMQVNTX05PVENIQVIgLSAxKTsKCiAgLyogPz8gQ291bGQgY2hlY2sgdGhhdCBjY2wgaXMg
YSB2YWxpZCBjbGFzcywgYnV0IG5vdCBhdCBwcmVzZW50LiAgKi8KCiAgLyogT2theSwgbG9v
cCB0aHJvdWdoIHRoZSByYW5nZSwgYml0LWJ5LWJpdCwgc2V0dGluZyBtZW1iZXJzLiAgKi8K
ICBmb3IgKGJpdCA9IHN0YXJ0OyBiaXQgPD0gZW5kOyBiaXQrKykKICAgIGNjbC0+bWVtYmVy
c1tBUklUSF9TSElGVF9SX0lOVChiaXQpXSB8PSAxVSA8PCBiaXQgJSBDSEFSQ0xBU1NfV09S
RF9CSVRTOwp9CgpdXSkpCgphc3NlcnQoZjp3cml0ZShEZWNsc1siY2xyYml0X3JhbmdlIl0s
ICJcbiIpKQphc3NlcnQoZjp3cml0ZShbWwp7CiAgaW50IGJpdDsKCiAgLyogRG8gbm90aGlu
ZyBpZiB0aGUgcmFuZ2UgZG9lc24ndCBtYWtlIHNlbnNlLiAgKi8KICBpZiAoZW5kIDwgc3Rh
cnQpCiAgICByZXR1cm47CiAgaWYgKHN0YXJ0ID49IENIQVJDTEFTU19OT1RDSEFSKQogICAg
cmV0dXJuOwoKICAvKiBDbGlwIHRoZSByYW5nZSB0byBiZSBpbiB0aGUgaW50ZXJ2YWwgWy0x
Li5OT1RDSEFSIC0gMV0gKi8KICBzdGFydCA9IE1BWChzdGFydCwgLTEpOwogIGVuZCAgID0g
TUFYKGVuZCwgICAtMSk7CiAgLyogV2Uga25vdyBzdGFydCBpcyA8IENIQVJDTEFTU19OT1RD
SEFSIGZyb20gdGhlIHRlc3QgYWJvdmUuICAqLwogIGVuZCAgID0gTUlOKGVuZCwgICBDSEFS
Q0xBU1NfTk9UQ0hBUiAtIDEpOwoKICAvKiA/PyBDb3VsZCBjaGVjayB0aGF0IGNjbCBpcyBh
IHZhbGlkIGNsYXNzLCBidXQgbm90IGF0IHByZXNlbnQuICAqLwoKICAvKiBPa2F5LCBsb29w
IHRocm91Z2ggdGhlIHJhbmdlLCBiaXQtYnktYml0LCBjbGVhcmluZyBtZW1iZXJzLiAgKi8K
ICBmb3IgKGJpdCA9IHN0YXJ0OyBiaXQgPD0gZW5kOyBiaXQrKykKICAgIGNjbC0+bWVtYmVy
c1tBUklUSF9TSElGVF9SX0lOVChiaXQpXSAmPSB+KDFVIDw8IGJpdCAlIENIQVJDTEFTU19X
T1JEX0JJVFMpOwp9CgpdXSkpCgphc3NlcnQoZjp3cml0ZShbWwovKiBEZWZpbmUgd2hvbGUt
c2V0IG9wZXJhdGlvbnM6IENvcHksIGNsZWFyLCBpbnZlcnQsIGNvbXBhcmUgYW5kIHVuaW9u
ICAqLwoKXV0pKQoKYXNzZXJ0KGY6d3JpdGUoRGVjbHNbImNvcHlzZXQiXSkpCmxvY2FsIGJv
ZHkgPSBFZGl0ZWRUZXh0KCJjaGNsYXNzLWNvcHlzZXQtYm9keSIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICJcbiAgbWVtY3B5IC4tXG4iLAogICAgICAgICJcbiAgbWVtY3B5IChkc3Qt
Pm1lbWJlcnMsIHNyYy0+bWVtYmVycywgc2l6ZW9mKHNyYy0+bWVtYmVycykpO1xuIikKYXNz
ZXJ0KGY6d3JpdGUoYm9keSwgIlxuIikpCmFzc2VydChmOndyaXRlKERlY2xzWyJ6ZXJvc2V0
Il0pKQpsb2NhbCBib2R5ID0gRWRpdGVkVGV4dCgiY2hjbGFzcy16ZXJvc2V0LWJvZHkiLAog
ICAgICAgICAgICAgICAgICAiXG4gIG1lbXNldCAuLVxuIiwKICAgICAgICAgICAgICAgICAg
IlxuICBtZW1zZXQgKGNjbC0+bWVtYmVycywgMCwgc2l6ZW9mKGNjbC0+bWVtYmVycykpO1xu
IikKYXNzZXJ0KGY6d3JpdGUoYm9keSwgIlxuIikpCmFzc2VydChmOndyaXRlKERlY2xzWyJu
b3RzZXQiXSkpCmxvY2FsIGJvZHkgPSBFZGl0ZWRUZXh0KCJjaGNsYXNzLW5vdHNldC1ib2R5
IiwKICAgICAgICAgICAgICAiICAgIHMlW2klXSA9IENIQVJDTEFTU19XT1JEX01BU0sgJiB+
cyVbaSVdIiwKICAgICAgICAgICAgICAiICAgIGNjbC0+bWVtYmVyc1tpXSA9IENIQVJDTEFT
U19XT1JEX01BU0sgJiB+Y2NsLT5tZW1iZXJzW2ldIikKYXNzZXJ0KGY6d3JpdGUoYm9keSwg
IlxuIikpCmFzc2VydChmOndyaXRlKERlY2xzWyJlcXVhbCJdKSkKbG9jYWwgYm9keSA9IEVk
aXRlZFRleHQoImNoY2xhc3MtZXF1YWwtYm9keSIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICJcbiAgcmV0dXJuIC4tXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAiXG4gIHJldHVy
biBtZW1jbXAgKGNjbDEtPm1lbWJlcnMsIGNjbDItPm1lbWJlcnMsXG4iCiAgICAgICAgICAu
LiAiICAgICAgIHNpemVvZihjY2wxLT5tZW1iZXJzKSkgPT0gMDtcbiIpCmFzc2VydChmOndy
aXRlKGJvZHksICJcbiIpKQoKLS0gQWRkICJ1bmlvbnNldCIgYW5kICJpbnRlcnNlY3RzZXQi
IGZ1bmN0aW9ucyBzbyB3ZSBjYW4gdXNlIGNsYXNzZXMgbW9yZQotLSBleHByZXNzaXZlbHkg
YW5kIGRpcmVjdGx5Lgphc3NlcnQoZjp3cml0ZShEZWNsc1sidW5pb25zZXQiXSkpCmFzc2Vy
dChmOndyaXRlKFtbCnsKICBpbnQgaTsKCiAgZm9yIChpID0gMDsgaSA8IENIQVJDTEFTU19X
T1JEUzsgKytpKQogICAgZHN0LT5tZW1iZXJzW2ldIHw9IHNyYy0+bWVtYmVyc1tpXTsKfQoK
XV0pKQphc3NlcnQoZjp3cml0ZShEZWNsc1siaW50ZXJzZWN0c2V0Il0pKQphc3NlcnQoZjp3
cml0ZShbWwp7CiAgaW50IGk7CgogIGZvciAoaSA9IDA7IGkgPCBDSEFSQ0xBU1NfV09SRFM7
ICsraSkKICAgIGRzdC0+bWVtYmVyc1tpXSAmPSBzcmMtPm1lbWJlcnNbaV07Cn0KCl1dKSkK
Ci0tIFJld3JpdGUgY2hhcmNsYXNzIHN0b3JhZ2UgaGFuZGxpbmcuICBUaGUgb3JpZ2luYWwg
Y29kZSByZWxhdGluZyB0byB0aGlzCi0tIHN0YXJ0cyBhdCBhYm91dCBsaW5lIDU5NSBpbiBk
ZmEuYywgYnV0IHRoaXMgY29kZSBpcyBzdWZmaWNpZW50bHkKLS0gZGlmZmVyZW50IHRoYXQg
SSdtIHdyaXRpbmcgaXQgZnJvbSBzY3JhdGNoLgphc3NlcnQoZjp3cml0ZShbWwovKiAjaWZk
ZWYgREVCVUcgKi8KCi8qIE55YmJsZSAoNGJpdCktdG8tY2hhciBjb252ZXJzaW9uIGFycmF5
IGZvciBsaXR0bGUtYml0LWVuZGlhbiBueWJibGVzLiAgKi8Kc3RhdGljIGNvbnN0IGNoYXIg
KmRpc3BfbnliYmxlID0gIjA4NGMyYTZlMTk1ZDNiN2YiOwoKLyogUmV0dXJuIGEgc3RhdGlj
IHN0cmluZyBkZXNjcmliaW5nIGEgY2xhc3MgKE5vdGU6IG5vdCByZWVudHJhbnQpLiAgKi8K
Y2hhciAqCmNoYXJjbGFzc19kZXNjcmliZSAoY2hhcmNsYXNzX3QgY29uc3QgKmNjbCkKewog
IC8qIFRoZSBzdHJpbmcgc2hvdWxkIHByb2JhYmx5IGJlIGxlc3MgdGhhbiA5MCBjaGFycywg
YnV0IG92ZXJjb21wZW5zYXRlCiAgICAgZm9yIGxpbWl0ZWQgdW5jZXJ0YWludHkgaW50cm9k
dWNlZCBieSB0aGUgJXAgZm9ybWF0dGluZyBvcGVyYXRvci4gICovCiAgc3RhdGljIGNoYXIg
YnVmWzI1Nl07CiAgY2hhciAqcF9idWYgPSBidWY7CiAgaW50IGk7CgogIHBfYnVmICs9IHNw
cmludGYgKHBfYnVmLCAiMHglMDhseDoiLCAodW5zaWduZWQgbG9uZykgY2NsKTsKICBmb3Ig
KGkgPSAwOyBpIDwgQ0hBUkNMQVNTX1dPUkRTOyBpICs9IDIpCiAgICB7CiAgICAgIGludCBq
ID0gY2NsLT5tZW1iZXJzW2ldOwogICAgICAqcF9idWYrKyA9ICcgJzsKICAgICAgKnBfYnVm
KysgPSBkaXNwX255YmJsZVsoaiA+PiAgMCkgJiAweDBmXTsKICAgICAgKnBfYnVmKysgPSBk
aXNwX255YmJsZVsoaiA+PiAgNCkgJiAweDBmXTsKICAgICAgKnBfYnVmKysgPSBkaXNwX255
YmJsZVsoaiA+PiAgOCkgJiAweDBmXTsKICAgICAgKnBfYnVmKysgPSBkaXNwX255YmJsZVso
aiA+PiAxMikgJiAweDBmXTsKICAgICAgKnBfYnVmKysgPSBkaXNwX255YmJsZVsoaiA+PiAx
NikgJiAweDBmXTsKICAgICAgKnBfYnVmKysgPSBkaXNwX255YmJsZVsoaiA+PiAyMCkgJiAw
eDBmXTsKICAgICAgKnBfYnVmKysgPSBkaXNwX255YmJsZVsoaiA+PiAyNCkgJiAweDBmXTsK
ICAgICAgKnBfYnVmKysgPSBkaXNwX255YmJsZVsoaiA+PiAyOCkgJiAweDBmXTsKCiAgICAg
IGogPSBjY2wtPm1lbWJlcnNbaSArIDFdOwogICAgICAqcF9idWYrKyA9IGRpc3BfbnliYmxl
WyhqID4+ICAwKSAmIDB4MGZdOwogICAgICAqcF9idWYrKyA9IGRpc3BfbnliYmxlWyhqID4+
ICA0KSAmIDB4MGZdOwogICAgICAqcF9idWYrKyA9IGRpc3BfbnliYmxlWyhqID4+ICA4KSAm
IDB4MGZdOwogICAgICAqcF9idWYrKyA9IGRpc3BfbnliYmxlWyhqID4+IDEyKSAmIDB4MGZd
OwogICAgICAqcF9idWYrKyA9IGRpc3BfbnliYmxlWyhqID4+IDE2KSAmIDB4MGZdOwogICAg
ICAqcF9idWYrKyA9IGRpc3BfbnliYmxlWyhqID4+IDIwKSAmIDB4MGZdOwogICAgICAqcF9i
dWYrKyA9IGRpc3BfbnliYmxlWyhqID4+IDI0KSAmIDB4MGZdOwogICAgICAqcF9idWYrKyA9
IGRpc3BfbnliYmxlWyhqID4+IDI4KSAmIDB4MGZdOwogICAgfQogICpwX2J1ZisrID0gJ1ww
JzsKICByZXR1cm4gYnVmOwp9CgovKiBzdGF0aWMgKi8gdm9pZApkZWJ1Z19wb29scyAoY29u
c3QgY2hhciAqbGFiZWwsIGJvb2wgY2xhc3NfY29udGVudHMpCnsKICBwb29sX2xpc3RfaW5k
ZXhfdCBwb29sX25yOwogIHNpemVfdCBjbGFzc19ucjsKCiAgcHJpbnRmICgiXG5Qb29sICVw
IGRlYnVnKCVzKTogW2FsbG9jLCB1c2VkOiAlbGQgJWxkXVxuIiwKICAgICAgICAgIHBvb2xf
bGlzdCwgbGFiZWwsIHBvb2xfbGlzdF9hbGxvYywgcG9vbF9saXN0X3VzZWQpOwogIGZvciAo
cG9vbF9uciA9IDA7IHBvb2xfbnIgPCBwb29sX2xpc3RfdXNlZDsgcG9vbF9ucisrKQogICAg
ewogICAgICBwb29sX3QgKnBvb2wgPSAmcG9vbF9saXN0W3Bvb2xfbnJdOwogICAgICBwcmlu
dGYgKAoiICUzbGQ6IGZpcnN0X2luZGV4LCBhbGxvYywgdXNlZCwgY2xhc3NlczogJTRsZCAl
M2x1ICUzbHUgJXBcbiIsCnBvb2xfbnIsIHBvb2wtPmZpcnN0X2luZGV4LCBwb29sLT5hbGxv
YywgcG9vbC0+dXNlZCwgcG9vbC0+Y2xhc3Nlcyk7CiAgICAgIHByaW50ZiAoIiAgICAgY2xh
c3Nfc3RhdGVzOiAiKTsKICAgICAgZm9yIChjbGFzc19uciA9IDA7IGNsYXNzX25yIDwgcG9v
bC0+YWxsb2M7IGNsYXNzX25yKyspCiAgICAgICAgc3dpdGNoIChwb29sLT5jbGFzc19zdGF0
ZVtjbGFzc19ucl0pIHsKICAgICAgICAgIGNhc2UgU1RBVEVfVU5VU0VEOiAgICBwdXRjaGFy
ICgnLicpOyBicmVhazsKICAgICAgICAgIGNhc2UgU1RBVEVfV09SS0lORzogICBwdXRjaGFy
ICgndycpOyBicmVhazsKICAgICAgICAgIGNhc2UgU1RBVEVfQ09NUExFVEVEOiBwdXRjaGFy
ICgnQycpOyBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6IHByaW50ZiAoIj8lMDJ4IiwgcG9v
bC0+Y2xhc3Nfc3RhdGVbY2xhc3NfbnJdKTsKICAgICAgICB9CiAgICAgIHB1dGNoYXIgKCdc
bicpOwogICAgfQoKICAvKiBJZiBjbGFzcyBjb250ZW50cyByZXF1ZXN0ZWQsIHByaW50IHRo
ZW0gb3V0IGFzIHdlbGwuICAqLwogIGlmIChjbGFzc19jb250ZW50cykKICAgIGZvciAocG9v
bF9uciA9IDA7IHBvb2xfbnIgPCBwb29sX2xpc3RfdXNlZDsgcG9vbF9ucisrKQogICAgICB7
CiAgICAgICAgcG9vbF90ICpwb29sID0gJnBvb2xfbGlzdFtwb29sX25yXTsKICAgICAgICBm
b3IgKGNsYXNzX25yID0gMDsgY2xhc3NfbnIgPCBwb29sLT51c2VkOyBjbGFzc19ucisrKQog
ICAgICAgICAgcHJpbnRmICgiJXNcbiIsCiAgICAgICAgICAgICAgICAgIGNoYXJjbGFzc19k
ZXNjcmliZSAoJnBvb2wtPmNsYXNzZXNbY2xhc3NfbnJdKSk7CiAgICAgIH0KfQoKLyogI2Vu
ZGlmICogREVCVUcgKi8KCnN0YXRpYyBwb29sX3QgKgphZGRfbmV3X3Bvb2wgKHZvaWQpCnsK
ICBwb29sX3QgKnByZXYsICpwb29sOwogIHNpemVfdCBwb29sX2NsYXNzX2FsbG9jOwogIGNo
YXJjbGFzc190ICphbGxvY19tZW07CgogIC8qIElmIHRoZSBwb29scyBsaXN0IGlzIGZ1bGws
IHVzZSB4Mm5yZWFsbG9jIHRvIGV4cGFuZCBpdHMgc2l6ZS4gICovCiAgaWYgKHBvb2xfbGlz
dF91c2VkID09IHBvb2xfbGlzdF9hbGxvYykKICAgICAgcG9vbF9saXN0ID0geDJucmVhbGxv
YyAocG9vbF9saXN0LCAmcG9vbF9saXN0X2FsbG9jLCBzaXplb2YgKHBvb2xfdCkpOwoKICAv
KiBGaW5kIHRoZSBzaXplIG9mIHRoZSBsYXN0IGNoYXJjbGFzcyBwb29sIGluIHRoZSAob2xk
KSBsaXN0LiAgU2NhbGUgdXAKICAgICB0aGUgc2l6ZSBzbyB0aGF0IG1hbGxvYyBhY3Rpdml0
eSB3aWxsIGRlY3JlYXNlIGFzIHRoZSBudW1iZXIgb2YgcG9vbHMKICAgICBpbmNyZWFzZXMu
ICBBbHNvLCBhZGQgMSBoZXJlIGFzIHdlIGtub2NrIG9mZiAxIHRvIHVzZSBhcyBhIGd1dHRl
cgogICAgIGxhdGVyLiAgKi8KICBwcmV2ID0gJnBvb2xfbGlzdFtwb29sX2xpc3RfdXNlZCAt
IDFdOwogIHBvb2xfY2xhc3NfYWxsb2MgPSAocHJldi0+YWxsb2MgKiA1IC8gMikgKyAxOwog
IGFsbG9jX21lbSA9IFhOTUFMTE9DIChwb29sX2NsYXNzX2FsbG9jLCBjaGFyY2xhc3NfdCk7
CgogIC8qIFNldCB1cCB0aGUgbmV3IHBvb2wsIHNoaWZ0aW5nIHRoZSBhbGxvYyBwb2ludGVy
IHRvIGNyZWF0ZSB0aGUgZ3V0dGVyCiAgICAgcHJlY2VkaW5nIHRoZSBmaXJzdCBjbGFzcyBv
ZiB0aGUgcG9vbC4gICovCiAgcG9vbCA9ICZwb29sX2xpc3RbcG9vbF9saXN0X3VzZWQrK107
CiAgcG9vbC0+Y2xhc3NlcyA9IGFsbG9jX21lbSArIDE7CiAgcG9vbC0+Zmlyc3RfaW5kZXgg
PSBwcmV2LT5maXJzdF9pbmRleCArIHByZXYtPmFsbG9jOwogIHBvb2wtPmFsbG9jID0gcG9v
bF9jbGFzc19hbGxvYyAtIDE7CiAgcG9vbC0+dXNlZCA9IDA7CiAgcG9vbC0+Y2xhc3Nfc3Rh
dGUgPSB4emFsbG9jIChwb29sLT5hbGxvYyk7CgogIHJldHVybiBwb29sOwp9CgpjaGFyY2xh
c3NfdCAqCmNoYXJjbGFzc19hbGxvYyAodm9pZCkKewogIHBvb2xfbGlzdF9pbmRleF90IHBv
b2xfbnI7CiAgY2hhcmNsYXNzX3QgKmNsYXNzOwogIHBvb2xfdCAqcG9vbCA9IE5VTEw7CiAg
c2l6ZV90IGNsYXNzX25yOwogIHNpemVfdCBjbGFzc19sYXN0X25yOwogIGNoYXJjbGFzc193
b3JkICpndXR0ZXJfcHJlY2VkaW5nOwoKICAvKiBMb2NhdGUgYSBwb29sIHdpdGggdW51c2Vk
IGVudHJpZXMgKGlmIGFueSkuICAqLwogIGZvciAocG9vbF9uciA9IDA7IHBvb2xfbnIgPCBw
b29sX2xpc3RfdXNlZDsgcG9vbF9ucisrKQogICAgewogICAgICBwb29sID0gJnBvb2xfbGlz
dFtwb29sX25yXTsKCiAgICAgIC8qIFRyeSB1c2UgdGhlIGVhcmxpZXN0IHBvb2wgcG9zc2li
bGUsIGZpcnN0IGJ5IGZpbGxpbmcgaW4gYSBob2xlCiAgICAgICAgIGZyb20gYSB3aXRoZHJh
d24gY2xhc3MsIG9yIGJ5IGdyYWJiaW5nIGFuIHVudXNlZCBjbGFzcyBmcm9tIHRoZQogICAg
ICAgICBlbmQgb2YgdGhlIGxpc3QuICAqLwogICAgICBjbGFzc19sYXN0X25yID0gTUlOKHBv
b2wtPnVzZWQgKyAxLCBwb29sLT5hbGxvYyk7CiAgICAgIGZvciAoY2xhc3NfbnIgPSAwOyBj
bGFzc19uciA8IGNsYXNzX2xhc3RfbnI7IGNsYXNzX25yKyspCiAgICAgICB7CiAgICAgICAg
ICBpZiAocG9vbC0+Y2xhc3Nfc3RhdGVbY2xhc3NfbnJdID09IFNUQVRFX1VOVVNFRCkKICAg
ICAgICAgICAgZ290byBmb3VuZF9wb29sX2FuZF9jbGFzczsKICAgICAgIH0KICAgIH0KCiAg
LyogTm8gc3BhY2UgZm91bmQsIHNvIHByZXBhcmUgYSBuZXcgcG9vbCBhbmQgbWFrZSB0aGlz
IGNsYXNzIGl0cyBmaXJzdAogICAgIGVsZW1lbnQuICAqLwogIHBvb2wgPSBhZGRfbmV3X3Bv
b2wgKCk7CiAgY2xhc3NfbnIgPSAwOwogIC8qIEZBTExUSFJPVUdIICovCgpmb3VuZF9wb29s
X2FuZF9jbGFzczoKICAvKiBNYXJrIHRoZSBmb3VuZCBjbGFzcyBzdGF0ZSBhcyB3b3JraW5n
LCB6ZXJvIGl0cyBlbGVtZW50cywgYW5kIHJldHVybgogICAgICAgY2xhc3MgcG9pbnRlciB0
byBjYWxsZXIuICBaZXJvaW5nIGlzIG5lZWRlZCBhcyB0aGlzIGNsYXNzIG1heSBoYXZlCiAg
ICAgICBiZWVuIHByZXZpb3VzbHkgd29ya2VkIG9uLCBidXQgdGhlbiBhYmFuZG9uZWQgb3Ig
d2l0aGRyYXduLiAgKi8KICBwb29sLT5jbGFzc19zdGF0ZVtjbGFzc19ucl0gPSBTVEFURV9X
T1JLSU5HOwogIGlmIChjbGFzc19uciA+PSBwb29sLT51c2VkKQogICAgcG9vbC0+dXNlZCA9
IGNsYXNzX25yICsgMTsKICBjbGFzcyA9ICZwb29sLT5jbGFzc2VzW2NsYXNzX25yXTsKCiAg
LyogWmVybyBvdXQgdGhlIGNsYXNzJyBtZW1iZXJzLCBhbmQgYWxzbyB0aGUgZ3V0dGVycyBv
biBlYWNoIHNpZGUuICAqLwogIG1lbXNldCAoY2xhc3MsIDAsIHNpemVvZiAoKmNsYXNzKSk7
CiAgZ3V0dGVyX3ByZWNlZGluZyA9ICgoY2hhcmNsYXNzX3dvcmQgKikgY2xhc3MpIC0gMTsK
ICAqZ3V0dGVyX3ByZWNlZGluZyA9IDA7CgogIHJldHVybiBjbGFzczsKfQoKcG9vbF90ICog
X0dMX0FUVFJJQlVURV9QVVJFCmZpbmRfY2xhc3NfcG9vbCAoY2hhcmNsYXNzX3QgY29uc3Qg
KmNjbCkKewogIHBvb2xfbGlzdF9pbmRleF90IHBvb2xfbnI7CiAgcG9vbF90ICpwb29sID0g
TlVMTDsKICBwdHJkaWZmX3QgY2xhc3NfcHRyX29mZnNldDsKCiAgLyogTG9jYXRlIHRoZSBw
b29sIHdob3NlIG1lbW9yeSBhZGRyZXNzIHNwYWNlIGNvdmVycyB0aGlzIGNsYXNzLiAgKi8K
ICAvKiA/PyBQZXJoYXBzIGNoZWNrICZwb29sLT5jbGFzc2VzW3Bvb2wtPmFsbG9jXSBpbiB0
aGlzIGZpcnN0IGxvb3AsIGFuZAogICAgIHRoZW4gY2hlY2sgdGhhdCB0aGUgaW5kZXggaXMg
aW4gdGhlICJ1c2VkIiBwb3J0aW9uIGxhdGVyLCBzbyB3ZSBjYW4KICAgICBkaWFnbm9zZSBt
YWxmb3JtZWQgcG9pbnRlcnMgbW9yZSBleGFjdGx5LiAgKi8KICBmb3IgKHBvb2xfbnIgPSAw
OyBwb29sX25yIDwgcG9vbF9saXN0X3VzZWQ7IHBvb2xfbnIrKykKICAgIHsKICAgICAgcG9v
bCA9ICZwb29sX2xpc3RbcG9vbF9ucl07CiAgICAgIGlmICgocG9vbC0+Y2xhc3NlcyA8PSBj
Y2wpICYmIChjY2wgPCAmcG9vbC0+Y2xhc3Nlc1twb29sLT5hbGxvY10pKQogICAgICAgIGdv
dG8gZm91bmRfcG9vbDsKICAgIH0KCiAgLyogTm8gY3JlZGlibGUgcG9vbCBjYW5kaWRhdGUg
d2FzIGZvdW5kLiAgKi8KICBhc3NlcnQgKCJmaW5kX2NsYXNzX3Bvb2w6IG5vIHBvb2wgZm91
bmQiKTsKICByZXR1cm4gTlVMTDsKCmZvdW5kX3Bvb2w6CiAgLyogTWFrZSBzdXJlIHRoZSBj
bGFzcyBjbGVhcmx5IGxpZXMgb24gYW4gYXJyYXkgYm91bmRhcnkgd2l0aGluIHRoZSBwb29s
J3MKICAgICBtZW1vcnkgYWxsb2NhdGlvbi4gICovCiAgY2xhc3NfcHRyX29mZnNldCA9IChj
aGFyICopIGNjbCAtIChjaGFyICopIHBvb2wtPmNsYXNzZXM7CiAgaWYgKChjbGFzc19wdHJf
b2Zmc2V0ICUgc2l6ZW9mIChjaGFyY2xhc3NfdCkpICE9IDApCiAgICB7CiAgICAgIC8qIFBv
aW50ZXIgZG9lcyBub3QgbGllIGF0IHRoZSBzdGFydCBvZiBhIHBvb2wgbWVtYmVyLiAgKi8K
ICAgICAgYXNzZXJ0ICgiZmluZF9jbGFzc19wb29sOiBwb2ludGVyIG5vdCBhbGlnbmVkLiIp
OwogICAgICByZXR1cm4gTlVMTDsKICAgIH0KCiAgcmV0dXJuIHBvb2w7Cn0KCnN0YXRpYyB2
b2lkCndpdGhkcmF3X2NsYXNzIChjaGFyY2xhc3NfdCAqY2NsLCBwb29sX3QgKmNsYXNzX3Bv
b2wpCnsKICBwb29sX3QgKnBvb2w7CiAgc2l6ZV90IGNsYXNzX25yOwogIGludCAqZ3V0dGVy
X3ByZWNlZGluZzsKCiAgLyogVXNlIHBvb2wgcmVmZXJlbmNlIGlmIGdpdmVuLCBvdGhlcndp
c2Ugd29yayBiYWNrIGZyb20gdGhlIGNsYXNzIHBvaW50ZXIKICAgICB0byBmaW5kIHRoZSBh
c3NvY2lhdGVkIHBvb2wuICAqLwogIHBvb2wgPSAoY2xhc3NfcG9vbCAhPSBOVUxMKSA/IGNs
YXNzX3Bvb2wgOiBmaW5kX2NsYXNzX3Bvb2wgKGNjbCk7CgogIGlmIChwb29sID09IE5VTEwp
CiAgICBhc3NlcnQgKCEiQ291bGQgbm90IGxvY2F0ZSBhIHBvb2wgZm9yIHRoaXMgY2hhcmNs
YXNzIik7CgogIC8qIFplcm8gb3V0IHRoZSBndXR0ZXJzIGVhY2ggc2lkZSBvZiB0aGUgY2xh
c3MuICAqLwogIGNjbC0+Z3V0dGVyX2ZvbGxvd2luZyA9IDA7CiAgZ3V0dGVyX3ByZWNlZGlu
ZyA9ICgoaW50ICopIGNjbCkgLSAxOwogICpndXR0ZXJfcHJlY2VkaW5nID0gMDsKCiAgLyog
V29yayBvdXQgdGhlIGNsYXNzIGluZGV4IGluIHRoZSBwb29sLiAgKi8KICBjbGFzc19uciA9
IGNjbCAtIHBvb2wtPmNsYXNzZXM7CiAgcG9vbC0+Y2xhc3Nfc3RhdGVbY2xhc3NfbnJdID0g
U1RBVEVfVU5VU0VEOwoKICAvKiBJcyB0aGlzIHRoZSBsYXN0IGl0ZW0gd2l0aGluIHRoZSBw
b29sJ3MgY2xhc3MgbGlzdD8gKi8KICBpZiAoY2xhc3NfbnIgPT0gcG9vbC0+dXNlZCAtIDEp
CiAgICB7CiAgICAgIC8qIFllcywgcmVkdWNlIHRoZSBwb29sIG1lbWJlciBjb3VudCBieSAx
LiAgKi8KICAgICAgcG9vbC0+dXNlZC0tOwogICAgICByZXR1cm47CiAgICB9Cn0KCi8qIEZp
bmlzaCBvZmYgY3JlYXRpbmcgYSBjbGFzcywgYW5kIHJlcG9ydCBhbiBpbmRleCB0aGF0IGNh
biBiZSB1c2VkCiAgIHRvIHJlZmVyZW5jZSB0aGUgY2xhc3MuICAqLwpjaGFyY2xhc3NfaW5k
ZXhfdApjaGFyY2xhc3NfY29tcGxldGVkIChjaGFyY2xhc3NfdCAqY2NsKQp7CiAgY2hhcmNs
YXNzX3dvcmQgKmd1dHRlcl9wcmVjZWRpbmc7CiAgcG9vbF9saXN0X2luZGV4X3QgcG9vbF9u
cjsKICBwb29sX3QgKnBvb2w7CiAgY2hhcmNsYXNzX3QgKmZvdW5kID0gTlVMTDsKICBzaXpl
X3QgY2xhc3NfbnI7CiAgcG9vbF90ICpteV9wb29sID0gTlVMTDsKICBzaXplX3QgbXlfY2xh
c3NfbnIgPSAwOwoKICAvKiBTZWFyY2ggYWxsIHBvb2xzIGZvciBhIGNvbXBsZXRlZCBjbGFz
cyBtYXRjaGluZyB0aGlzIGNsYXNzLCBhbmQsIGlmCiAgICAgZm91bmQsIHVzZSBpdCBpbiBw
cmVmZXJlbmNlIHRvIHRoZSBuZXcgb25lLiAgV2hpbGUgc2VhcmNoaW5nLCBhbHNvCiAgICAg
cmVjb3JkIHdoZXJlIHRoZSB3b3JrIGNsYXNzIGlzIGxvY2F0ZWQuICBJZiB3ZSBjYW4ndCBm
aW5kIG91cnNlbHZlcywgdGhlCiAgICAgcG9pbnRlciBpcyBpbnZhbGlkLCBhbmQgdGhyb3cg
YW4gYXNzZXJ0aW9uLiAgICovCiAgZm9yIChwb29sX25yID0gMDsgcG9vbF9uciA8IHBvb2xf
bGlzdF91c2VkOyBwb29sX25yKyspCiAgICB7CiAgICAgIHBvb2wgPSAmcG9vbF9saXN0W3Bv
b2xfbnJdOwogICAgICBmb3IgKGNsYXNzX25yID0gMDsgY2xhc3NfbnIgPCBwb29sLT51c2Vk
OyBjbGFzc19ucisrKQogICAgICAgIHsKICAgICAgICAgIGNoYXJjbGFzc190ICpzZWFyY2gg
PSAmcG9vbC0+Y2xhc3Nlc1tjbGFzc19ucl07CiAgICAgICAgICAvKiBIYXZlIHdlIGZvdW5k
IG91cnNlbHZlcyBpbiB0aGUgbGlzdD8gKi8KICAgICAgICAgIGlmIChzZWFyY2ggPT0gY2Ns
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgLyogWWVzLCByZW1lbWJlciB0aGlzIHBs
YWNlIGluIGNhc2Ugbm8gZHVwbGljYXRlIGlzIGZvdW5kLiAgKi8KICAgICAgICAgICAgICBt
eV9wb29sID0gcG9vbDsKICAgICAgICAgICAgICBteV9jbGFzc19uciA9IGNsYXNzX25yOwog
ICAgICAgICAgfQogICAgICAgICAgaWYgKHBvb2wtPmNsYXNzX3N0YXRlW2NsYXNzX25yXSAh
PSBTVEFURV9DT01QTEVURUQpCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgaWYg
KGNoYXJjbGFzc19lcXVhbCAoc2VhcmNoLCBjY2wpKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgLyogQW5vdGhlciBjbGFzcywgY29tcGxldGVkZWQsIG1hdGNoZXM6ICBVc2UgaXQg
aW4gcHJlZmVyZW5jZQogICAgICAgICAgICAgICAgIHRvIHBvdGVudGlhbGx5IGNyZWF0aW5n
IGEgZHVwbGljYXRlLiAgKi8KICAgICAgICAgICAgICB3aXRoZHJhd19jbGFzcyAoY2NsLCBt
eV9wb29sKTsKICAgICAgICAgICAgICBmb3VuZCA9IHNlYXJjaDsKICAgICAgICAgICAgICBn
b3RvIGZvdW5kX21hdGNoaW5nX2NsYXNzOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
fQoKICAvKiBObyBkdXBsaWNhdGUgZm91bmQuLi4gYnV0IG1ha2Ugc3VyZSB0aGUgc2VhcmNo
IHBvaW50ZXIgaXMga25vd24uICovCiAgYXNzZXJ0IChteV9wb29sICE9IE5VTEwpOwogIGFz
c2VydCAobXlfcG9vbC0+Y2xhc3Nfc3RhdGVbbXlfY2xhc3NfbnJdID09IFNUQVRFX1dPUktJ
TkcpOwoKICAvKiBQcmVwYXJlIHRvIGNvbnZlcnQgdGhlIHNlYXJjaCAod29yaykgY2xhc3Mg
aW50byBhIGNvbXBsZXRlZCBjbGFzcy4gICovCiAgcG9vbCA9IG15X3Bvb2w7CiAgY2xhc3Nf
bnIgPSBteV9jbGFzc19ucjsKICBmb3VuZCA9ICZwb29sLT5jbGFzc2VzW2NsYXNzX25yXTsK
ICAvKiBGQUxMVEhST1VHSCAqLwoKZm91bmRfbWF0Y2hpbmdfY2xhc3M6CiAgLyogQ2xlYXIg
b3V0IHRoZSBndXR0ZXIgaW50ZWdlcnMgZWFjaCBzaWRlIG9mIHRoZSBjbGFzcyBlbnRyeS4g
ICovCiAgZ3V0dGVyX3ByZWNlZGluZyA9IGZvdW5kLT5tZW1iZXJzIC0gMTsKICAqZ3V0dGVy
X3ByZWNlZGluZyA9IDA7CiAgZm91bmQtPmd1dHRlcl9mb2xsb3dpbmcgPSAwOwogIHBvb2wt
PmNsYXNzX3N0YXRlW2NsYXNzX25yXSA9IFNUQVRFX0NPTVBMRVRFRDsKCiAgLyogUmV0dXJu
IHRoZSBpbmRleCBvZiB0aGUgY2xhc3MuICAqLwogIHJldHVybiBwb29sLT5maXJzdF9pbmRl
eCArIGNsYXNzX25yOwp9Cgp2b2lkCmNoYXJjbGFzc19hYmFuZG9uIChjaGFyY2xhc3NfdCAq
Y2NsKQp7CiAgd2l0aGRyYXdfY2xhc3MgKGNjbCwgTlVMTCk7Cn0KCi8qIEFkZGl0aW9uYWwg
ZnVuY3Rpb25zIHRvIGhlbHAgY2xpZW50cyB3b3JrIHdpdGggY2xhc3Nlcy4gICovCgpjaGFy
Y2xhc3NfdCAqIF9HTF9BVFRSSUJVVEVfUFVSRQpjaGFyY2xhc3NfZ2V0X3BvaW50ZXIgKGNo
YXJjbGFzc19pbmRleF90IGNvbnN0IGluZGV4KQp7CiAgcG9vbF9saXN0X2luZGV4X3QgcG9v
bF9ucjsKICBwb29sX3QgKnBvb2w7CgogIC8qIERvZXMgdGhpcyBjbGFzcyBtYXRjaCBhbnkg
Y2xhc3Mgd2UndmUgc2VlbiBwcmV2aW91c2x5PyAqLwogIGZvciAocG9vbF9uciA9IDA7IHBv
b2xfbnIgPCBwb29sX2xpc3RfdXNlZDsgcG9vbF9ucisrKQogICAgewogICAgICAvKiBJcyB0
aGUgaW5kZXggaW5zaWRlIHRoaXMgcG9vbD8gKi8KICAgICAgcG9vbCA9ICZwb29sX2xpc3Rb
cG9vbF9ucl07CiAgICAgIGlmIChwb29sLT5maXJzdF9pbmRleCA8PSBpbmRleAogICAgICAg
ICAgICAgICYmIGluZGV4IDwgKHBvb2wtPmZpcnN0X2luZGV4ICsgcG9vbC0+dXNlZCkpCiAg
ICAgICAgewogICAgICAgICAgLyogWWVzLCBmaW5kIHRoZSBwb2ludGVyIHdpdGhpbiB0aGUg
cG9vbCBhbmQgcmV0dXJuIGl0LiAgKi8KICAgICAgICAgIHJldHVybiAmcG9vbC0+Y2xhc3Nl
c1tpbmRleCAtIHBvb2wtPmZpcnN0X2luZGV4XTsKICAgICAgICB9CiAgICB9CgogIC8qIFRo
ZSBtYXBwaW5nIGFib3ZlIHNob3VsZCBuZXZlciBmYWlsOyB3ZSBjb3VsZCByZXR1cm4gTlVM
TCwgYnV0IHdlCiAgICAgY2hvb3NlIHRvIGFib3J0IGluc3RlYWQuICAqLwogIGFzc2VydCAo
ISJpbmRleC10by1jaGFyY2xhc3MgbWFwcGluZyBmYWlsZWQiKTsKICByZXR1cm4gTlVMTDsK
fQoKY2hhcmNsYXNzX2luZGV4X3QgX0dMX0FUVFJJQlVURV9QVVJFCmNoYXJjbGFzc19nZXRf
aW5kZXggKGNoYXJjbGFzc190IGNvbnN0ICpjY2wpCnsKICBwb29sX3QgKnBvb2w7CgogIC8q
IFRoaXMgY29kZSBpcyBzaW1pbGFyIHRvIGNoYXJjbGFzc19jb21wbGV0ZWQuLi4gcGVyaGFw
cyBtZXJnZT8gKi8KICBwb29sID0gZmluZF9jbGFzc19wb29sIChjY2wpOwogIGlmIChwb29s
ID09IE5VTEwpCiAgICByZXR1cm4gLTE7CgogIC8qIFJlcG9ydCB0aGUgaW5kZXggdG8gdGhl
IGNhbGxlci4gICovCiAgcmV0dXJuIHBvb2wtPmZpcnN0X2luZGV4ICsgKGNjbCAtIHBvb2wt
PmNsYXNzZXMpOwp9CgovKiBGdW5jdGlvbnMgdG8gaW5pdGlhbGlzZSBtb2R1bGUgb24gc3Rh
cnR1cCwgYW5kIHRvIHNodXQgZG93biBhbmQKICAgcmVsZWFzZSBhY3F1aXJlZCByZXNvdXJj
ZXMgYXQgZXhpdC4gICovCgpdXSkpCgphc3NlcnQoZjp3cml0ZShEZWNsc1siY2hhcmNsYXNz
LWRlc3Ryb3ktbW9kdWxlIl0sIFtbCnsKICBwb29sX3QgKmxvY2FsX2xpc3Q7CiAgaW50IGk7
CiAgY2hhcmNsYXNzX3QgKmFsbG9jX21lbTsKCiAgLyogTW92ZSB0aGUgZ2xvYmFsIGxpc3Qg
aGVhZCBpbnRvIGEgbG9jYWwgdmFyaWFibGUsIGFuZCBpbW1lZGlhdGVseSBjbGVhcgogICAg
IHRoZSBnbG9iYWwuICBUaGlzIGlzIGEgaGFsZi1oZWFydGVkIGF0dGVtcHQgdG8gYXZvaWQg
cmFjZSBjb25kaXRpb25zOwogICAgIHRvIGRvIHRoaW5ncyBwcm9wZXJseSwgYSBzeXN0ZW0t
d2lkZSBhdG9taWMgb3BlcmF0aW9uIChsb2NrZWQsCiAgICAgaW5jbHVkaW5nIG11bHRpLUNQ
VSBjYWNoZSBjb2hlcmVuY3kpIG9wZXJhdGlvbiBzaG91bGQgYmUgdXNlZC4gICovCiAgbG9j
YWxfbGlzdCA9IHBvb2xfbGlzdDsKICBwb29sX2xpc3QgPSBOVUxMOwoKICAvKiBJZiB0aGUg
bGlzdCBpcyBhbHJlYWR5IGVtcHR5LCBmaW5pc2ggbm93LiAgKi8KICBpZiAoISBsb2NhbF9s
aXN0KQogICAgcmV0dXJuOwoKICAvKiBGaXJzdCwgZGlzY2FyZCB0aGUgY2hhcmNsYXNzIG1l
bW9yeSBhc3NvY2lhdGVkIHdpdGggZWFjaCBwb29sLAogICAgIGluY2x1ZGluZyBjYXRlcmlu
ZyBmb3IgdGhlIG9mZnNldCB1c2VkIHVwb24gY3JlYXRpb24uICAqLwogIGZvciAoaSA9IDA7
IGkgPCBwb29sX2xpc3RfdXNlZDsgaSsrKQogICAgewogICAgICAvKiBXZSBza2lwcGVkIGFu
IGluaXRpYWwgY2xhc3MgYWZ0ZXIgYWxsb2NhdGlvbiwgaW4gb3JkZXIgdG8gZ2l2ZQogICAg
ICAgICB0aGUgZmlyc3QgY2xhc3MgaW4gdGhlIHBvb2wgYSBndXR0ZXIsIHNvIHVuZG8gdGhl
IG9mZnNldCBoZXJlCiAgICAgICAgIHdoZW4gZnJlZWluZy4gICovCiAgICAgIC8qIFJFTU9W
RU1FOiBXYXMgdHlwZWQgYXMgImd1aXR0ZXIiIGFib3ZlLCBiZWZvcmUgZml4aW5nOyBob3cg
YWJvdXQKICAgICAgICAgY2FsbGluZyBpdCBzb21lIHZhcmlhbnQgb2YgImd1aXRhciI/ISAq
LwogICAgICBhbGxvY19tZW0gPSBsb2NhbF9saXN0W2ldLmNsYXNzZXM7CiAgICAgIGZyZWUg
KGFsbG9jX21lbSAtIDEpOwoKICAgICAgLyogQWxzbyBmcmVlIHVwIHRoZSBjbGFzc19zdGF0
ZSBtZW1vcnkuICAqLwogICAgICBmcmVlIChsb2NhbF9saXN0W2ldLmNsYXNzX3N0YXRlKTsK
ICAgIH0KCiAgLyogU2Vjb25kLCBmcmVlIHVwIHRoZSBwb29sIGxpc3QgaXRzZWxmLiAgKi8K
ICBmcmVlIChsb2NhbF9saXN0KTsKICBwb29sX2xpc3RfdXNlZCA9IDA7Cn0KCl1dKSkKCmFz
c2VydChmOndyaXRlKERlY2xzWyJjaGFyY2xhc3MtaW5pdGlhbGlzZSJdKSkKYXNzZXJ0KGY6
d3JpdGUoW1sKewogIHNpemVfdCBpbml0aWFsX2FsbG9jOwogIGNoYXJjbGFzc190ICphbGxv
Y19tZW07CiAgcG9vbF90ICpwb29sOwogIGNoYXJjbGFzc190ICpjY2w7CiAgY2hhcmNsYXNz
X2luZGV4X3QgemVyb2NsYXNzX2luZGV4OwoKICAvKiBVc3VhbGx5IChnbnVsaWIgYXNzdW1w
dGlvbj8pIEVPRiA9IFdFT0YgPSAtMSwgYnV0IHRoZSBzdGFuZGFyZAogICAgIG1lcmVseSBz
dGF0ZXMgdGhhdCBFT0YgbXVzdCBiZSBhIG5lZ2F0aXZlIGludGVnZXIsIG5vdCBuZWNlc3Nh
cmlseQogICAgIC0xOyBmdXJ0aGVybW9yZSwgdGhlIGRlZmluaXRpb24gZm9yIChJU08gQzkw
KSBXRU9GIHN0YXRlcyB0aGF0IGl0CiAgICAgbmVlZCBub3QgYmUgbmVnYXRpdmUgYXQgYWxs
LCBsZXQgYWxvbmUgZ3VhcmFudGVlZCB0byBiZSAtMS4KCiAgICAgSW4gdGhpcyBkZW1vbnN0
cmF0aW9uL3Byb3RvdHlwZSBjb2RlLCB3ZSBkZW1hbmQgdGhhdCBib3RoIEVPRiBhbmQKICAg
ICBXRU9GIGJlIC0xLCBhcyB0aGlzIHZhbHVlIG1ha2VzIHRoZSBndXR0ZXJzIHdvcnRod2hp
bGU6ICBUaGUgdXNlcgogICAgIGNhbiBiZSByZWxpZXZlZCBvZiBzb21lIGVkZ2UgY2FzZSBw
cm9jZXNzaW5nIGlmIC0xIGlzIHRocm93bgogICAgIG5lYXRseSBpbnRvIHRoZSBndXR0ZXIg
LiAgKi8KICBhc3NlcnQgKEVPRiA9PSAtMSk7CiAgYXNzZXJ0IChXRU9GID09IC0xKTsKCiAg
LyogRmlyc3QsIHNldCB1cCB0aGUgbGlzdC1vZi1wb29scyBzdHJ1Y3R1cmUgd2l0aCBpbml0
aWFsIHN0b3JhZ2UuICAqLwogIHBvb2xfbGlzdF9hbGxvYyA9IDQ7CiAgcG9vbF9saXN0ID0g
KHBvb2xfdCAqKSB4bm1hbGxvYyAocG9vbF9saXN0X2FsbG9jLCBzaXplb2YgKHBvb2xfdCkp
OwoKICAvKiBJZiBpbml0aWFsIHBvb2wgc2l6ZSBpcyBzbWFsbCwgaW5mbGF0ZSBpdCBoZXJl
IGFzIHdlIHByZWZlciB0bwogICAgIHdhc3RlIGEgbGl0dGxlIG1lbW9yeSwgcmF0aGVyIHRo
YW4gaXNzdWUgbWFueSBjYWxscyB0byB4bWFsbG9jICgpLgogICAgIFRoaXMgbWluaW11bSBh
bHNvIGVuc3VyZXMgdGhhdCBvdXIgZG91YmxlLXVwIHBvb2wgc2l6ZSBzdHJhdGVneQogICAg
IGhhcyBhIHNhbmUgKHBlcmhhcHMgb3Zlcmx5IGdlbmVyb3VzPykgc3RhcnRpbmcgcG9pbnQu
ICAqLwogIGluaXRpYWxfYWxsb2MgPSBNQVgoaW5pdGlhbF9wb29sX3NpemUsIFBPT0xfTUlO
SU1VTV9JTklUSUFMX1NJWkUpOwoKICAvKiBTZXQgdXAgdGhlIGZpcnN0IHBvb2wgdXNpbmcg
b3VyIGNob3NlbiBmaXJzdCBhbGxvYyBzaXplLiAgQWxsb2NhdGUKICAgICBhbiBleHRyYSBj
bGFzcywgYW5kIG9mZnNldCB0aGUgcG9vbCBieSB0aGlzIGFtb3VudCwgaW4gb3JkZXIgdG8K
ICAgICBhY2NvbW1vZGF0ZSB0aGUgaW5pdGlhbCBndXR0ZXIgaW50ZWdlci4gIChOb3RlIGZv
ciB0aGUgZnV0dXJlOiAgSWYKICAgICBjaGFyY2xhc3MgYWxpZ25tZW50IGJlY29tZXMgc2ln
bmlmaWNhbnQsIHRoZW4gc2l6ZW9mIChjaGFyY2xhc3MpCiAgICAgYW5kIHRoaXMgb2Zmc2V0
IG1heSBuZWVkIHRvIGJlIGNoYW5nZWQsIHBlcmhhcHMgZm9yIFNJTUQKICAgICBpbnN0cnVj
dGlvbnMuKSAgKi8KICBwb29sX2xpc3RfdXNlZCA9IDE7CiAgcG9vbCA9ICZwb29sX2xpc3Rb
MF07CiAgcG9vbC0+Zmlyc3RfaW5kZXggPSAwOwogIHBvb2wtPmFsbG9jID0gaW5pdGlhbF9h
bGxvYzsKICBwb29sLT51c2VkID0gMDsKICBhbGxvY19tZW0gPSBYTk1BTExPQyAocG9vbC0+
YWxsb2MgKyAxLCBjaGFyY2xhc3NfdCk7CiAgcG9vbC0+Y2xhc3NlcyA9IGFsbG9jX21lbSAr
IDE7CiAgcG9vbC0+Y2xhc3Nfc3RhdGUgPSB4emFsbG9jIChwb29sLT5hbGxvYyk7CgogIC8q
IEVuZm9yY2UgdGhlIGFsbC16ZXJvZXMgY2xhc3MgdG8gYmUgdGhlIGZpcnN0IGNsYXNzLiAg
VGhpcyBpcyBuZWVkZWQKICAgICBhcyAiYWJhbmRvbiIgbWF5IGxlYXZlIGEgaG9sZSBpbiBh
IHBvb2wgaW4gc29tZSBjYXNlcywgYW5kIGluIHRoZXNlCiAgICAgY2FzZXMgd2UgbmVlZCB0
byBlbnN1cmUgdGhhdCBuby1vbmUgZWxzZSBwaWNrcyBpdCB1cCBieSBhY2NpZGVudAogICAg
IChhcyB0aGlzIHdvdWxkIGludmFsaWRhdGUgdGhlIGd1YXJhbnRlZSB0aGF0IHRoZSBtb2R1
bGUgZWxpbWluYXRlcwogICAgIGFsbCBkdXBsaWNhdGVzLCBmcm9tIHRoZSBwb2ludCBvZiB2
aWV3IG9mIHRoZSB1c2VyKS4gIFNvLCB3ZSBzZXQgdGhlCiAgICAgZmlyc3QgY2xhc3MgdG8g
YWxsLXplcm9lcywgYW5kIGFsc28gemVybyBvdXQgYWJhbmRvbmVkIGNsYXNzZXMgd2hlcmUK
ICAgICBhIGhvbGUgaXMgdW5hdm9pZGFibGUuICAqLwogIGNjbCA9IGNoYXJjbGFzc19hbGxv
YyAoKTsgLyogQWxsb2MgZGVsaXZlcnMgYW4gYWxsLXplcm9lcyBjbGFzcy4gICovCiAgemVy
b2NsYXNzX2luZGV4ID0gY2hhcmNsYXNzX2NvbXBsZXRlZCAoY2NsKTsKICBhc3NlcnQgKHpl
cm9jbGFzc19pbmRleCA9PSBDSEFSQ0xBU1NfWkVST0NMQVNTX0lOREVYKTsKCiAgLyogRmlu
YWxseSwgdXNlIGF0ZXhpdCAoKSB0byBhcnJhbmdlIGZvciBtb2R1bGUgY2xlYW51cCBvbiBl
eGl0LiAgKi8KICBhdGV4aXQgKGNoYXJjbGFzc19kZXN0cm95X21vZHVsZSk7Cn0KCl1dKSkK
Ci0tIEZpbmFsbHksIGFkZCB0cmFpbGVyIGxpbmUgKHZpbSkKYXNzZXJ0KGY6d3JpdGUoW1sK
LyogdmltOnNldCBzaGlmdHdpZHRoPTI6ICovCl1dKSkKCmFzc2VydChmOmNsb3NlKCkpCgot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQoKLS0tIEZTQVRva2VuU3Vic3QgLS0gU3Vic3RpdHV0ZSBi
YXJlIHRva2VuIG5hbWVzIHdpdGggbW9kdWxlLXByZWZpeGVkIG5hbWVzCi0tIEtub3dsZWRn
ZSBvZiB0aGUgb3JpZ2luYWwgbmFtZSwgYW5kIGFsc28gYWxsLWNhcHMgdmVyc3VzIGFsbC1s
b3dlcmNhc2UKLS0gdmFyaWFudHMsIGFyZSBjb2xsZWN0ZWQgaGVyZSwgYXMgbXVsdGlwbGUg
cGFydGllcyB3YW50IHRvIGNvbnZlcnQKLS0gdG9rZW5zIGluIHRoZWlyIHRleHQuCi0tIEBw
YXJtZXRlciBPcmlnaW5hbCAtLSBTb3VyY2UgY29kZSB0byBiZSBtb2RpZmllZAotLSBAcmV0
dXJuIENvZGUgd2l0aCBrZXl3b3Jkcy9uYW1lcyBxdWFsaWZpZWQgd2l0aCBhIHByZWZpeCBh
cyBhcHByb3ByaWF0ZQoKbG9jYWwgZnVuY3Rpb24gRlNBVG9rZW5TdWJzdChPcmlnaW5hbCkK
ICAgbG9jYWwgTW9kaWZpZWQgPSBPcmlnaW5hbAoKICAgLS0gSGFuZGxlIG1hY3JvL3VwcGVy
Y2FzZSBuYW1lcyB0aGF0IGFyZSBub3QgdG9rZW5zIChwcmVmaXggRlNBVE9LRU5fKQogICBm
b3IgXywgVXBwZXJjYXNlS2V5d29yZCBpbiBpcGFpcnN7Ik5PVENIQVIifSBkbwogICAgICBs
b2NhbCBTZWFyY2ggPSAiJWZbXyV3XSIgLi4gVXBwZXJjYXNlS2V5d29yZCAuLiAiJWZbJVdd
IgogICAgICBsb2NhbCBSZXBsYWNlID0gIkZTQVRPS0VOXyIgLi4gVXBwZXJjYXNlS2V5d29y
ZAogICAgICBNb2RpZmllZCA9IE1vZGlmaWVkOmdzdWIoU2VhcmNoLCBSZXBsYWNlKQogICBl
bmQKCiAgIC0tIEZpbmFsbHksIGhhbmRsZSB0b2tlbiB2YWx1ZXMgKHByZWZpeCB3aXRoIEZT
QVRPS0VOX1RLXykKICAgZm9yIF8sIFVwcGVyY2FzZVRva2VuIGluIGlwYWlyc3sKICAgICAg
ICAgICJFTkQiLCAiRU1QVFkiLCAiQkFDS1JFRiIsICJCRUdMSU5FIiwgIkVORExJTkUiLAog
ICAgICAgICAgIkJFR1dPUkQiLCAiRU5EV09SRCIsICJMSU1XT1JEIiwgIk5PVExJTVdPUkQi
LCAiUU1BUksiLAogICAgICAgICAgIlNUQVIiLCAiUExVUyIsICJSRVBNTiIsICJDQVQiLCAi
T1IiLCAiTFBBUkVOIiwgIlJQQVJFTiIsCiAgICAgICAgICAiQU5ZQ0hBUiIsICJNQkNTRVQi
LCAiV0NIQVIiLCAiQ1NFVCJ9IGRvCiAgICAgIGxvY2FsIFNlYXJjaCA9ICIlZlsld19dIiAu
LiBVcHBlcmNhc2VUb2tlbiAuLiAiJWZbJVddIgogICAgICBsb2NhbCBSZXBsYWNlID0gIkZT
QVRPS0VOX1RLXyIgLi4gVXBwZXJjYXNlVG9rZW4KICAgICAgTW9kaWZpZWQgPSBNb2RpZmll
ZDpnc3ViKFNlYXJjaCwgUmVwbGFjZSkKICAgZW5kCgogICAtLSBOb3RlOiBXZSBkbyBub3Qg
dHJ5IHRvIG1haW50YWluIGluZGVudGF0aW9uIG9mIGFueSBjb21tZW50cyBhZnRlcgogICAt
LSB0aGUgc3Vic3RpdHV0ZWQgdGV4dC4gIFRoaXMgaXMgYmVjYXVzZSB0aGlzIHByZWZpeGlu
ZyBpcyAoYXQgcHJlc2VudCkKICAgLS0gYSB0ZW1wb3JhcnkgaGFjayB0byBrZWVwIHRoZSBv
cmlnaW5hbCBjb2RlJ3MgYW5kIEZTQVRva2VuJ3MgY29kZQogICAtLSBuYW1lc3BhY2VzIGVu
dGlyZWx5IHNlcGFyYXRlLCBzbyB0aGF0IGJvdGggY2FuIGJlIHJ1biBzaWRlLWJ5LXNpZGUK
ICAgLS0gYW5kIHRoZSBvdXRwdXRzIGNvbXBhcmVkLiAgTGF0ZXIsIGlmL3doZW4gdGhlIHVu
dGFuZ2xlZCBjb2RlIGlzCiAgIC0tIGNob3NlbiB0byByZXBsYWNlIHRoZSBvcmlnaW5hbCwg
dGhlIHByZWZpeGluZyBjYW4gYmUgZWxpbWluYXRlZCwKICAgLS0gYW5kL29yIHRoaXMgZnVu
Y3Rpb24gY2FuIGRvIG1vcmUgdG8gbWFpbnRhaW4gaW5kZW50YXRpb24uCgogICByZXR1cm4g
TW9kaWZpZWQKZW5kCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLS0tLS0tLS0tLS0tLS0tLSoq
KioqKioqIGZzYXRva2VuLmggKioqKioqKiotLS0tLS0tLS0tLS0tLS0tCgpwcmludCgiQ3Jl
YXRpbmcgZnNhdG9rZW4uaC4uLiIpCmxvY2FsIGYgPSBhc3NlcnQoaW8ub3BlbigiZnNhdG9r
ZW4uaCIsICJ3IikpCmFzc2VydChmOndyaXRlKFtbCi8qIGZzYXRva2VuIC0gQ3JlYXRlIHRv
a2VucyBmb3IgYSBjb21wYWN0LCBjb2hlcmVudCByZWd1bGFyIGV4cHJlc3Npb24gbGFuZ3Vh
Z2UKCl1dKSkKYXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgiQ29weXJpZ2h0LmRmYWMiKSwgIlxu
IikpCmFzc2VydChmOndyaXRlKFJhd1RleHQoIkxpY2Vuc2VXYXJyYW50eS5kZmFjIiksICJc
biIpKQphc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJBdXRob3JzLmRmYWMiKSkpCmFzc2VydChm
OndyaXRlKFtbCgovKiAyMDE0OiBSZXBhY2thZ2VkIGJ5ICJ1bnRhbmdsZSIgc2NyaXB0LCB3
cml0dGVuIGJ5IGJlaG9mZnNraS4gICovCgovKiBSZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVy
bnMgYXJlIHByZXNlbnRlZCBhcyB0ZXh0LCBwb3NzaWJseSBBU0NJSTsKICAgdGhlIGZvcm1h
dCBpcyB2ZXJ5IGV4cHJlc3NpdmUsIGJ1dCB0aGlzIGNvbWVzIGF0IHRoZSBjb3N0IG9mIGJl
aW5nCiAgIHNvbWV3aGF0IGV4cGVuc2l2ZSB0byBpbnRlcnByZXQgKGluY2x1ZGluZyBpZGVu
dGlmeWluZyBpbnZhbGlkCiAgIHBhdHRlcm5zKS4gIEJ5IHRva2VuaXNpbmcgdGhlIHBhdHRl
cm4sIHdlIG1ha2UgbGlmZSBtdWNoIGVhc2llciBmb3IKICAgdGhlIHBhcnNlciBhbmQgb3Ro
ZXIgc2VhcmNoIG1hY2hpbmVyeSB0aGF0IGZvbGxvd3MuCgogICBUaGlzIGZpbGUgZGVmaW5l
cyB0aGUgdG9rZW5zIHRoYXQgd2UgdXNlLCBib3RoIGZvciB0aGUgYmVuZWZpdCBvZgogICB0
aGUgbGV4ZXIvcGFyc2VyL2RmYSBhbmFseXNlciB0aGF0IHNoYXJlIHRoaXMgaW5mb3JtYXRp
b24sIGFuZCBmb3IKICAgb3RoZXIgbWFjaGluZXJ5IChzdWNoIGFzIHRoZSBDIGNvbXBpbGVy
KSB0aGF0IG1heSBuZWVkIHRvIHN0b3JlCiAgIGFuZC9vciBtYW5pcHVsYXRlIHRoZXNlIGl0
ZW1zLiAgKi8KCl1dKSkKCi0tIEFkZCBwcmVwcm9jZXNzb3IgbGluZXMgdG8gbWFrZSB0aGlz
IGhlYWRlciBmaWxlIGlkZW1wb3RlbnQuCmFzc2VydChmOndyaXRlKFtbCgojaWZuZGVmIEZT
QVRPS0VOX0gKI2RlZmluZSBGU0FUT0tFTl9IIDEKCi8qIEFsd2F5cyBpbXBvcnQgZW52aXJv
bm1lbnQtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpdGVtcyBmaXJzdC4gICovCiNpbmNsdWRl
IDxjb25maWcuaD4KCi8qIE9idGFpbiBkZWZuLiBvZiBwdHJkaWZmX3QgZnJvbSBzdGRkZWYu
aCwgYW5kIENIQVJfQklUIGZyb20gbGltaXRzLmggICovCiNpbmNsdWRlIDxsaW1pdHMuaD4K
I2luY2x1ZGUgPHN0ZGRlZi5oPgoKLyogQyBzdHJlYW0gb2N0ZXRzLCBhbmQgbm9uLXN0cmVh
bSBFT0YsIGFyZSBzZWxmLXJlcHJlc2VudGluZyB0b2tlbnMuCiAgIFdlIG5lZWQgdG8gaW5j
bHVkZSBzdGRpby5oIHRvIG9idGFpbiB0aGUgZGVmaW5pdGlvbiBvZiBFT0YuICAqLwojaW5j
bHVkZSA8c3RkaW8uaD4KCl1dKSkKCi0tIFdyaXRlIG91dCB0b2tlbi1zcGVjaWZpYyBjb2Rl
IGV4dHJhY3RlZCBmcm9tIGRmYS5jCi0tIHh4UmVtb3ZlZDogYXNzZXJ0KGY6d3JpdGUoUmF3
VGV4dCgiQ0hBUkJJVFMtb2N0ZXRzIiksICJcbiIpKQphc3NlcnQoZjp3cml0ZShGU0FUb2tl
blN1YnN0KFJhd1RleHQoIk5PVENIQVIiKSksICJcbiIpKQphc3NlcnQoZjp3cml0ZShFZGl0
ZWRUZXh0KCJSZWdleHBUb2tlblR5cGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgInR5
cGVkZWYgcHRyZGlmZl90IHRva2VuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBl
ZGVmIHB0cmRpZmZfdCBmc2F0b2tlbl90b2tlbl90IiksICJcbiIpKQphc3NlcnQoZjp3cml0
ZShGU0FUb2tlblN1YnN0KFJhd1RleHQoIlByZWRlZmluZWRUb2tlbnMiKSksICJcbiIpKQoK
LS0gRGVmaW5lIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBwcm92aWRlZCBieSBtb2R1bGUg
Ym9keS4KYXNzZXJ0KGY6d3JpdGUoW1sKCi8qIHBydG9rIC0gRGlzcGxheSB0b2tlbiBuYW1l
IChmb3IgZGVidWdnaW5nKSAqLwojaWZkZWYgREVCVUcKXV0pKQpXcml0ZUV4dGVybkRlY2wo
ZiwgRGVjbHNbInBydG9rIl0pCmFzc2VydChmOndyaXRlKFtbCiNlbmRpZiAvKiBERUJVRyAq
LwpdXSkpCgotLSBGaW5hbGx5LCBhZGQgdHJhaWxlciBsaW5lcyAoaWRlbXBvdGVuY3ksIHZp
bSkKYXNzZXJ0KGY6d3JpdGUoW1sKCiNlbmRpZiAvKiBGU0FUT0tFTl9IICovCgovKiB2aW06
c2V0IHNoaWZ0d2lkdGg9MjogKi8KXV0pKQoKYXNzZXJ0KGY6Y2xvc2UoKSkKCi0tLS0tLS0t
LS0tLS0tLS0qKioqKioqKiBmc2F0b2tlbi5jICoqKioqKioqLS0tLS0tLS0tLS0tLS0tLQoK
cHJpbnQoIkNyZWF0aW5nIGZzYXRva2VuLmMuLi4iKQpsb2NhbCBmID0gYXNzZXJ0KGlvLm9w
ZW4oImZzYXRva2VuLmMiLCAidyIpKQphc3NlcnQoZjp3cml0ZShbWwovKiBmc2F0b2tlbiAt
IFN1cHBvcnQgcm91dGluZXMgc3BlY2lmaWMgdG8gdG9rZW4gZGVmaW5pdGlvbnMKCl1dKSkK
YXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgiQ29weXJpZ2h0LmRmYWMiKSwgIlxuIikpCmFzc2Vy
dChmOndyaXRlKFJhd1RleHQoIkxpY2Vuc2VXYXJyYW50eS5kZmFjIiksICJcbiIpKQphc3Nl
cnQoZjp3cml0ZShSYXdUZXh0KCJBdXRob3JzLmRmYWMiKSkpCmFzc2VydChmOndyaXRlKFtb
CgovKiAyMDE0OiBSZXBhY2thZ2VkIGJ5ICJ1bnRhbmdsZSIgc2NyaXB0LCB3cml0dGVuIGJ5
IGJlaG9mZnNraS4gICovCgovKiBUaGUgbWFqb3JpdHkgb2YgdGhlIGZzYXRva2VuW2NoXSBt
b2R1bGUgaXMgaW4gZnNhdG9rZW4uaCwgYXMgaXQgaXMKICAgc2hhcmVkIGJ5IG90aGVyIG1v
ZHVsZXMuICBUaGlzIGZpbGUgcHJvdmlkZXMgdG9rZW4tc3BlY2lmaWMgc3VwcG9ydAogICBm
dW5jdGlvbnMsIHN1Y2ggYXMgZnVuY3Rpb25zIHRvIHByaW50IHRva2VucyAoZm9yIGRlYnVn
Z2luZykuCgogICBBbHRob3VnaCB0aGVyZSBpcyBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHNv
bWUgZ2VuZXJpYyBjb25zdHJ1Y3RzCiAgIHN1Y2ggYXMgY2hhcmFjdGVyIGNsYXNzZXMgYW5k
IHRoZSBDU0VUIHRva2VuIGRlZmluZWQgaGVyZSwgdGhlCiAgIGdlbmVyaWMgaXRlbXMgYXJl
IGRlZmluZWQgaW4gYSBzZXBhcmF0ZSBzdXBwb3J0IGxpYnJhcnksIG5vdCBpbiB0aGlzCiAg
IG1vZHVsZS4gIFRoaXMgaXMgYmVjYXVzZSB0aGVzZSB0b2tlbnMgYXJlIHZlcnkgRlNBL2dy
ZXAtc3BlY2lmaWMsCiAgIHdoZXJlYXMgdGhlIGdlbmVyaWMgY29uc3J1Y3RzIGFyZSBwb3Rl
bnRpYWxseSB3aWRlbHkgdXNlYWJsZSwgYW5kIG1heQogICBldmVuIGJlIGFtZW5hYmxlIHRv
IGhhcmR3YXJlLXNwZWNpZmljIG9wdGltaXNhdGlvbnMgKHN1Y2ggYXMKICAgc3VwZXJzY2Fs
YXIgb3Bjb2RlcyBzdWNoIGFzOgogICAgICAgICAtIGFuZC9vci9zZXQvY2xlYXIvdGVzdC1h
bmQtc2V0L3Rlc3QtYW5kLWNsZWFyOyBhbmQvb3IKICAgICAgICAgLSBiaXQgY291bnRpbmcK
ICAgb3BlcmF0aW9ucykuICAqLwoKLyogQWx3YXlzIGltcG9ydCBlbnZpcm9ubWVudC1zcGVj
aWZpYyBjb25maWd1cmF0aW9uIGl0ZW1zIGZpcnN0LiAgKi8KI2luY2x1ZGUgPGNvbmZpZy5o
PgoKI2luY2x1ZGUgImZzYXRva2VuLmgiCiNpbmNsdWRlIDxzdGRpby5oPgoKXV0pKQoKYXNz
ZXJ0KGY6d3JpdGUoUmF3VGV4dCgicHJ0b2staWZkZWYtREVCVUctc3RhcnQiKSwgIlxuIikp
CmFzc2VydChmOndyaXRlKERlY2xzWyJwcnRvayJdKSkKYXNzZXJ0KGY6d3JpdGUoRlNBVG9r
ZW5TdWJzdChSYXdUZXh0KCJwcnRvay1mbi1ib2R5IikpLCAiXG4iKSkKYXNzZXJ0KGY6d3Jp
dGUoUmF3VGV4dCgicHJ0b2staWZkZWYtREVCVUctZW5kIikpKQoKLS0gRmluYWxseSwgYWRk
IHRyYWlsZXIgbGluZSAodmltKQphc3NlcnQoZjp3cml0ZShbWwovKiB2aW06c2V0IHNoaWZ0
d2lkdGg9MjogKi8KXV0pKQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi0tLS0tLS0tLS0tLS0t
LS0qKioqKioqKiBtYmNzZXRzLmggKioqKioqKiotLS0tLS0tLS0tLS0tLS0tCgpwcmludCgi
Q3JlYXRpbmcgbWJjc2V0cy5oLi4uIikKbG9jYWwgZiA9IGFzc2VydChpby5vcGVuKCJtYmNz
ZXRzLmgiLCAidyIpKQphc3NlcnQoZjp3cml0ZShbWwovKiBtYmNzZXRzIC0tIEhhbmRsZSBt
dWx0aS1ieXRlIGFuZC9vciBsb2NhbGUtZGVwZW5kZW50IHNldHMgb2YgY2hhcnMuCgpdXSkp
Cgphc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJDb3B5cmlnaHQuZGZhYyIpLCAiXG4iKSkKYXNz
ZXJ0KGY6d3JpdGUoUmF3VGV4dCgiTGljZW5zZVdhcnJhbnR5LmRmYWMiKSwgIlxuIikpCmFz
c2VydChmOndyaXRlKFJhd1RleHQoIkF1dGhvcnMuZGZhYyIpKSkKYXNzZXJ0KGY6d3JpdGUo
W1sKCi8qIDIwMTQ6IENyZWF0ZWQgYnkgInVudGFuZ2xlIiBzY3JpcHQsIHdyaXR0ZW4gYnkg
YmVob2Zmc2tpLgoKPz8gbW9yZSBzdHVmZiBoZXJlCgoqLwoKXV0pKQoKLS0gQWRkIHByZXBy
b2Nlc3NvciBsaW5lcyB0byBtYWtlIHRoaXMgaGVhZGVyIGZpbGUgaWRlbXBvdGVudC4KYXNz
ZXJ0KGY6d3JpdGUoW1sKI2lmbmRlZiBNQkNTRVRTX0gKI2RlZmluZSBNQkNTRVRTX0ggMQoK
LyogQWx3YXlzIGltcG9ydCBlbnZpcm9ubWVudC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGl0
ZW1zIGZpcnN0LiAgKi8KI2luY2x1ZGUgPGNvbmZpZy5oPgoKI2luY2x1ZGUgImNoYXJjbGFz
cy5oIgojaW5jbHVkZSA8c3RkZGVmLmg+CiNpbmNsdWRlIDx3Y3R5cGUuaD4KCi8qIERlZmlu
ZSB0aGUgbXVsdGlieXRlLXNldCBkZXNjcmlwdG9yIGFzIGFuIG9wYXF1ZSB0eXBlLiAgKi8K
dHlwZWRlZiBzdHJ1Y3QgbWJjc2V0c19zZXRfc3RydWN0IG1iY3NldHNfc2V0X3Q7CgpdXSkp
CgpXcml0ZUV4dGVybkRlY2woZiwgRGVjbHNbIm1iY3NldHMtaW5pdGlhbGlzZSJdKQpXcml0
ZUV4dGVybkRlY2woZiwgRGVjbHNbIm1iY3NldHMtZGVzdHJveS1tb2R1bGUiXSkKV3JpdGVF
eHRlcm5EZWNsKGYsIERlY2xzWyJtYmNzZXRzLW5ldyJdKQpXcml0ZUV4dGVybkRlY2woZiwg
RGVjbHNbIm1iY3NldHMtc2V0LW1hdGNoLXNlbnNlIl0pCldyaXRlRXh0ZXJuRGVjbChmLCBE
ZWNsc1sibWJjc2V0cy1hZGQtd2NoYXIiXSkKV3JpdGVFeHRlcm5EZWNsKGYsIERlY2xzWyJt
YmNzZXRzLWFkZC13Y2hhci1saXN0Il0pCldyaXRlRXh0ZXJuRGVjbChmLCBEZWNsc1sibWJj
c2V0cy1hZGQtY2xhc3MiXSkKV3JpdGVFeHRlcm5EZWNsKGYsIERlY2xzWyJtYmNzZXRzLWFk
ZC1yYW5nZSJdKQpXcml0ZUV4dGVybkRlY2woZiwgRGVjbHNbIm1iY3NldHMtcmVjZWl2ZS1p
bmNvbXBsZXRlLWNoYXJjbGFzcyJdKQpXcml0ZUV4dGVybkRlY2woZiwgRGVjbHNbIm1iY3Nl
dHMtZ2V0LWNoYXJhY3RlcmlzdGljcyJdKQpXcml0ZUV4dGVybkRlY2woZiwgRGVjbHNbIm1i
Y3NldHMtZ2V0LWNoYXJzIl0pCgotLSBhZGRfZXF1aXZzIGFuZCBhZGRfY29sbGF0aW9uIG5v
dCBpbXBsZW1lbnRlZCB5ZXQuLi4gcmVtb3ZlIHRoZW0gZnJvbQotLSB0aGUgbW9kdWxlLCBz
byB0aGF0IGdjYyBkb2Vzbid0IGNvbXBsYWluIGFib3V0IHN1Y2ggcGFzc2l2ZSBjb2RlLgot
LVs9WwpXcml0ZUV4dGVybkRlY2woZiwgRGVjbHNbIm1iY3NldHMtYWRkLWVxdWl2cyJdKQpX
cml0ZUV4dGVybkRlY2woZiwgRGVjbHNbIm1iY3NldHMtYWRkLWNvbGxhdGlvbiJdKQotLV09
XQoKV3JpdGVFeHRlcm5EZWNsKGYsIERlY2xzWyJtYmNzZXRzLWNvbXBsZXRlZCJdKQoKLS0g
RmluYWxseSwgYWRkIHRyYWlsZXIgbGluZXMgKGlkZW1wb3RlbmN5LCB2aW0pCmFzc2VydChm
OndyaXRlKFtbCiNlbmRpZiAvKiBNQkNTRVRTX0ggKi8KCi8qIHZpbTpzZXQgc2hpZnR3aWR0
aD0yOiAqLwpdXSkpCgphc3NlcnQoZjpjbG9zZSgpKQoKLS0tLS0tLS0tLS0tLS0tLSoqKioq
KioqIG1iY3NldHMuYyAqKioqKioqKi0tLS0tLS0tLS0tLS0tLS0KCnByaW50KCJDcmVhdGlu
ZyBtYmNzZXRzLmMuLi4iKQpsb2NhbCBmID0gYXNzZXJ0KGlvLm9wZW4oIm1iY3NldHMuYyIs
ICJ3IikpCmFzc2VydChmOndyaXRlKFtbCi8qIG1iY3NldHMgLS0gSGFuZGxlIG11bHRpLWJ5
dGUgYW5kL29yIGxvY2FsZS1kZXBlbmRlbnQgc2V0cyBvZiBjaGFycy4KCl1dKSkKYXNzZXJ0
KGY6d3JpdGUoUmF3VGV4dCgiQ29weXJpZ2h0LmRmYWMiKSwgIlxuIikpCmFzc2VydChmOndy
aXRlKFJhd1RleHQoIkxpY2Vuc2VXYXJyYW50eS5kZmFjIiksICJcbiIpKQphc3NlcnQoZjp3
cml0ZShSYXdUZXh0KCJBdXRob3JzLmRmYWMiKSkpCmFzc2VydChmOndyaXRlKFtbCgovKiAy
MDE0OiBSZXBhY2thZ2VkIGJ5ICJ1bnRhbmdsZSIgc2NyaXB0LCB3cml0dGVuIGJ5IGJlaG9m
ZnNraS4gICovCgovKiA/PyBOZWVkIHRvIGRvY3VtZW50IHRoaW5ncyBoZXJlLi4uCiAqLwoK
LyogQWx3YXlzIGltcG9ydCBlbnZpcm9ubWVudC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGl0
ZW1zIGZpcnN0LiAgKi8KI2luY2x1ZGUgPGNvbmZpZy5oPgoKI2luY2x1ZGUgImNoYXJjbGFz
cy5oIgojaW5jbHVkZSAibWJjc2V0cy5oIgojaW5jbHVkZSA8c3RkYm9vbC5oPgojaW5jbHVk
ZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNp
bmNsdWRlIDx3Y3R5cGUuaD4KI2luY2x1ZGUgInhhbGxvYy5oIgoKLyogRmxlc2ggb3V0IG9w
YXF1ZSB0eXBlIGdpdmVuIGluIHRoZSBoZWFkZXIuICAqLwpzdHJ1Y3QgbWJjc2V0c19zZXRf
c3RydWN0CnsKICAvKiBTaW5nbHktbGlua2VkIGxpc3Qgb2YgYWxsIGluc3RhbmNlcywgc28g
ZGVzdHJveV9tb2R1bGUgY2FuIHJlbGVhc2UKICAgICBhbGwgcmVzb3VyY2VzIGJ5IHRyYXZl
cnNpbmcgdGhlIGxpc3QuICAqLwogIG1iY3NldHNfc2V0X3QgKm5leHRfaW5zdGFuY2U7Cgog
IGNoYXJjbGFzc190ICpjaGFyY2xhc3M7CiAgYm9vbCBpbnZlcnQ7CiAgd2NoYXJfdCAqY2hh
cnM7ICAgICAgICAgICAgICAgLyogTm9ybWFsIGNoYXJhY3RlcnMuICAqLwogIHNpemVfdCBu
Y2hhcnM7CiAgc2l6ZV90IGNoYXJzX2FsbG9jOwogIHdjdHlwZV90ICpjaF9jbGFzc2VzOyAg
ICAgICAgIC8qIENoYXJhY3RlciBjbGFzc2VzLiAgKi8KICBzaXplX3QgbmNoX2NsYXNzZXM7
CiAgc2l6ZV90IGNoX2NsYXNzZXNfYWxsb2M7CiAgc3RydWN0ICAgICAgICAgICAgICAgICAg
ICAgICAgLyogUmFuZ2UgY2hhcmFjdGVycy4gICovCiAgewogICAgd2NoYXJfdCBiZWc7ICAg
ICAgICAgICAgICAgIC8qIFJhbmdlIHN0YXJ0LiAgKi8KICAgIHdjaGFyX3QgZW5kOyAgICAg
ICAgICAgICAgICAvKiBSYW5nZSBlbmQuICAqLwogIH0gKnJhbmdlczsKICBzaXplX3QgbnJh
bmdlczsKICBzaXplX3QgcmFuZ2VzX2FsbG9jOwogIGNoYXIgKiplcXVpdnM7ICAgICAgICAg
ICAgICAgIC8qIEVxdWl2YWxlbmNlIGNsYXNzZXMuICAqLwogIHNpemVfdCBuZXF1aXZzOwog
IHNpemVfdCBlcXVpdnNfYWxsb2M7CiAgY2hhciAqKmNvbGxfZWxlbXM7CiAgc2l6ZV90IG5j
b2xsX2VsZW1zOyAgICAgICAgICAgLyogQ29sbGF0aW5nIGVsZW1lbnRzLiAgKi8KICBzaXpl
X3QgY29sbF9hbGxvYzsKfTsKCi8qIExpbmtlZCBsaXN0IG9mIGFsbCBpbnN0YW5jZXMgY3Jl
YXRlZCBieSB0aGlzIG1vZHVsZS4gICovCnN0YXRpYyBtYmNzZXRzX3NldF90ICptYmNzZXRz
X2luc3RhbmNlc19saXN0X2hlYWQgPSBOVUxMOwoKXV0pKQoKYXNzZXJ0KGY6d3JpdGUoUmF3
VGV4dCgibWF5YmUtcmVhbGxvYyIpLCAiXG4iKSkKCmFzc2VydChmOndyaXRlKERlY2xzWyJt
YmNzZXRzLXNldC1tYXRjaC1zZW5zZSJdLCBbWwp7CiAgbWJjLT5pbnZlcnQgPSBpbnZlcnQ7
Cn0KCl1dKSkKCmFzc2VydChmOndyaXRlKERlY2xzWyJtYmNzZXRzLWFkZC13Y2hhciJdLCBb
Wwp7CiAgLyogPz8gUXVpZXRseSBpZ25vcmUgV0VPRi4uLiBpcyB0aGlzIHJlYXNvbmFibGU/
ICAqLwogIGlmICh3YyA9PSBXRU9GKQogICAgcmV0dXJuOwoKICAvKiBDb3VsZCB0aGlzIGNo
YXJhY3RlciBmaXQgaW50byBhIGNoYXJjbGFzcyBzZXQ/ICovCiAgLyogPz8gV2UgZG9uJ3Qg
a25vdyBkaXJlY3RseSB0aGUgc2lnbmVkbmVzcyBvZiB3aW50X3Q7IGluIGdudWxpYiwgaXQK
ICAgICBpcyB1bnNpZ25lZCwgYW5kIHNvIHRlc3RpbmcgZm9yICJ3YyA+PSAwIiBpcyBmbGFn
Z2VkIGFzIGFuIGVycm9yCiAgICAgYXMgaXQgaXMgcmVkdW5kYW50LiAgSGF2ZSByZW1vdmVk
IHRoZSB0ZXN0IGhlcmUgZm9yIG5vdywgYnV0IG5vdAogICAgIGNvbmZpZGVudCB0aGF0IHRo
aXMgaXMgdGhlIGJlc3QgdHJlYXRtZW50LiAgKi8KICBpZiAoLyogd2MgPj0gMCAmJiAqLyB3
YyA8IENIQVJDTEFTU19OT1RDSEFSKQogICAgewogICAgIC8qIFllcywgZG9lcyB0aGlzIHdp
ZGUgY2hhciBoYXZlIGEgdmFsaWQgdW5pY2hhciByZXByZXNlbnRhdGlvbj8gKi8KICAgICAv
KiA/PyBUaGUgZG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCB3Y3RvYiBzaG91bGQgbm90IGJl
IHVzZWQ7CiAgICAgICAgcGVyaGFwcyB0aGUgdW5pYnl0ZSBjYWNoZSBtYnJ0b3djX2NhY2hl
IGluIGZzYWxleCwgYnVpbHQgYnkKICAgICAgICBpbml0aWFsaXNlX3VjaGFyX3RvX3djX2Nh
Y2hlICgpLCBtaWdodCBiZSByZWxldmFudCBoZXJlPyAgKi8KICAgICBpbnQgYiA9IHdjdG9i
ICh3Yyk7CiAgICAgaWYgKGIgIT0gRU9GKQogICAgICAgewogICAgICAgICAvKiBZZXMsIGFk
ZCB0aGUgY2hhciAoYnl0ZT8pIChvY3RldD8pIHRvIHRoZSBjaGFyY2xhc3Mgc2V0LiAgKi8K
ICAgICAgICAgY2hhcmNsYXNzX3NldGJpdCAoYiwgbWJjLT5jaGFyY2xhc3MpOwogICAgICAg
ICByZXR1cm47CiAgICAgICB9CiAgICB9CgogIC8qIEVuc3VyZSB3ZSBoYXZlIHNwYWNlIHRv
IHN0b3JlIGFub3RoZXIgY2hhcmFjdGVyLiAgKi8KICBtYmMtPmNoYXJzID0gbWF5YmVfcmVh
bGxvYyhtYmMtPmNoYXJzLCBtYmMtPm5jaGFycywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmbWJjLT5jaGFyc19hbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplb2YgKm1iYy0+Y2hhcnMpOwoKICAvKiBBZGQgdGhlIGNoYXJhY3RlciB0byB0aGUgbGlz
dC4gICovCiAgbWJjLT5jaGFyc1ttYmMtPm5jaGFycysrXSA9IHdjOwp9CgpdXSkpCgphc3Nl
cnQoZjp3cml0ZShEZWNsc1sibWJjc2V0cy1hZGQtd2NoYXItbGlzdCJdLCBbWwp7CiAgc2l6
ZV90IGk7CgogIC8qIEVuc3VyZSB3ZSBoYXZlIHNwYWNlIHRvIHN0b3JlIHRoZSBpbmNvbWlu
ZyBsaXN0IGVsZW1lbnQocykuICAqLwogIG1iYy0+Y2hhcnMgPSBtYXliZV9yZWFsbG9jKG1i
Yy0+Y2hhcnMsIG1iYy0+bmNoYXJzICsgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZtYmMtPmNoYXJzX2FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVvZiAqbWJjLT5jaGFycyk7CgogIC8qIEFkZCBhbGwgdGhlIGNoYXJhY3RlcnMgdG8gdGhl
IGxpc3QuICAoPz8gdXNlIG1lbWNweSBoZXJlPykgICovCiAgZm9yIChpID0gMDsgaSA8IGxl
bjsgaSsrKQogICAgbWJjLT5jaGFyc1ttYmMtPm5jaGFycysrXSA9IHdjX2xpc3RbaV07Cn0K
Cl1dKSkKCmFzc2VydChmOndyaXRlKERlY2xzWyJtYmNzZXRzLWFkZC1jbGFzcyJdLCBbWwp7
CiAgLyogPz8gV2UgZG9uJ3QgY2hlY2sgdGhhdCB0aGUgZGVzY3JpcHRvciBpcyB2YWxpZC4g
ICovCgogIC8qIEVuc3VyZSB3ZSBoYXZlIHNwYWNlIHRvIHN0b3JlIGFub3RoZXIgY2xhc3Mg
ZGVzY3JpcHRvci4gICovCiAgbWJjLT5jaF9jbGFzc2VzID0gbWF5YmVfcmVhbGxvYyhtYmMt
PmNoX2NsYXNzZXMsIG1iYy0+bmNoX2NsYXNzZXMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmbWJjLT5jaF9jbGFzc2VzX2FsbG9jLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZW9mICptYmMtPmNoX2NsYXNzZXMpOwoKICAvKiBBZGQgdGhl
IGNsYXNzIGRlc2NyaXB0b3IgdG8gdGhlIGxpc3QuICAqLwogIG1iYy0+Y2hfY2xhc3Nlc1tt
YmMtPm5jaF9jbGFzc2VzKytdID0gd2NoYXJfY2xhc3M7Cn0KCl1dKSkKCmFzc2VydChmOndy
aXRlKERlY2xzWyJtYmNzZXRzLWFkZC1yYW5nZSJdLCBbWwp7CiAgLyogPz8gV2UgZG9uJ3Qg
Y2hlY2sgdGhhdCB0aGUgYmVnaW4vZW5kIGNoYXJzIGFyZSB2YWxpZC4gICovCgogIC8qIEVu
c3VyZSB3ZSBoYXZlIHNwYWNlIHRvIHN0b3JlIGFub3RoZXIgYmVnaW4vZW5kIGNoYXIgcGFp
ci4gICovCiAgbWJjLT5yYW5nZXMgPSBtYXliZV9yZWFsbG9jKG1iYy0+cmFuZ2VzLCBtYmMt
Pm5yYW5nZXMgKyAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWJjLT5yYW5n
ZXNfYWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAqbWJjLT5y
YW5nZXMpOwoKICAvKiBBZGQgdGhlIHJhbmdlIHRvIHRoZSBsaXN0LiAgKi8KICBtYmMtPnJh
bmdlc1ttYmMtPm5yYW5nZXNdLmJlZyAgID0gYmVnOwogIG1iYy0+cmFuZ2VzW21iYy0+bnJh
bmdlcysrXS5lbmQgPSBlbmQ7Cn0KCl1dKSkKCi0tIGFkZF9lcXVpdnMgYW5kIGFkZF9jb2xs
YXRpb24gbm90IGltcGxlbWVudGVkIHlldC4uLiByZW1vdmUgdGhlbSBmcm9tCi0tIHRoZSBt
b2R1bGUsIHNvIHRoYXQgZ2NjIGRvZXNuJ3QgY29tcGxhaW4gYWJvdXQgcGFzc2l2ZSBjb2Rl
LgotLVs9Wwphc3NlcnQoZjp3cml0ZShEZWNsc1sibWJjc2V0cy1hZGQtZXF1aXZzIl0sIFtb
CnsKfQoKXV0pKQoKYXNzZXJ0KGY6d3JpdGUoRGVjbHNbIm1iY3NldHMtYWRkLWNvbGxhdGlv
biJdLCBbWwp7Cn0KCl1dKSkKLS1dPV0KCmFzc2VydChmOndyaXRlKERlY2xzWyJtYmNzZXRz
LXJlY2VpdmUtaW5jb21wbGV0ZS1jaGFyY2xhc3MiXSwgW1sKewogIGNoYXJjbGFzc191bmlv
bnNldCAoY2NsLCBtYmMtPmNoYXJjbGFzcyk7CiAgY2hhcmNsYXNzX2FiYW5kb24gKGNjbCk7
Cn0KCl1dKSkKCmFzc2VydChmOndyaXRlKERlY2xzWyJtYmNzZXRzLWNvbXBsZXRlZCJdLCBb
Wwp7CiAgY2hhcmNsYXNzX3QgKnplcm9zZXQ7CgogIC8qIERpZCB3ZSBlbmQgdXAgcHV0dGlu
ZyBhbnl0aGluZyBpbnRvIHRoZSBjaGFyY2xhc3M/ICAqLwogIHplcm9zZXQgPSBjaGFyY2xh
c3NfZ2V0X3BvaW50ZXIgKDApOwogIGlmIChjaGFyY2xhc3NfZXF1YWwgKG1iYy0+Y2hhcmNs
YXNzLCB6ZXJvc2V0KSkKICAgIHsKICAgICAgLyogTm8sIGFiYW5kb24gdGhlIGNsYXNzLCBh
bmQgdXNlIE5VTEwgYXMgb3VyIHNlbnRpbmVsLiAgKi8KICAgICAgY2hhcmNsYXNzX2FiYW5k
b24gKG1iYy0+Y2hhcmNsYXNzKTsKICAgICAgbWJjLT5jaGFyY2xhc3MgPSBOVUxMOwogICAg
fQogICAgZWxzZQogICAgewogICAgICAvKiBZZXMsIGNvbXBsZXRlIHRoZSBjbGFzcywgYW5k
IG9idGFpbiBhIHBlcnNpc3RlbnQgcG9pbnRlci4gICovCiAgICAgIGNoYXJjbGFzc19pbmRl
eF90IGluZGV4OwogICAgICBpbmRleCA9IGNoYXJjbGFzc19jb21wbGV0ZWQgKG1iYy0+Y2hh
cmNsYXNzKTsKICAgICAgbWJjLT5jaGFyY2xhc3MgPSBjaGFyY2xhc3NfZ2V0X3BvaW50ZXIg
KGluZGV4KTsKICAgIH0KfQoKXV0pKQoKYXNzZXJ0KGY6d3JpdGUoRGVjbHNbIm1iY3NldHMt
Z2V0LWNoYXJhY3RlcmlzdGljcyJdLCBbWwp7CiAgKnBfaW52ZXJ0ICAgICAgPSBtYmMtPmlu
dmVydDsKICAqcHBfY2hhcmNsYXNzICA9IG1iYy0+Y2hhcmNsYXNzOwogICpwX25jaGFycyAg
ICAgID0gbWJjLT5uY2hhcnM7CiAgKnBfbmNoX2NsYXNzZXMgPSBtYmMtPm5jaF9jbGFzc2Vz
OwogICpwX25yYW5nZXMgICAgID0gbWJjLT5ucmFuZ2VzOwogICpwX25lcXVpdnMgICAgID0g
bWJjLT5uZXF1aXZzOwogICpwX25jb2xsX2VsZW1zID0gbWJjLT5uY29sbF9lbGVtczsKfQoK
XV0pKQoKYXNzZXJ0KGY6d3JpdGUoRGVjbHNbIm1iY3NldHMtZ2V0LWNoYXJzIl0sIFtbCnsK
ICBtZW1jcHkgKGNoYXJfbGlzdCwgbWJjLT5jaGFycywgbWJjLT5uY2hhcnMgKiBzaXplb2Yo
KmNoYXJfbGlzdCkpOwp9CgpdXSkpCgoKYXNzZXJ0KGY6d3JpdGUoRGVjbHNbIm1iY3NldHMt
aW5pdGlhbGlzZSJdLCBbWwp7CiAgLyogSW5pdGlhbGlzZSB0aGUgbGlua2VkIGxpc3Qgb2Yg
aW5zdGFuY2VzIGNyZWF0ZWQgYnkgdGhpcyBtb2R1bGUuICAqLwogIG1iY3NldHNfaW5zdGFu
Y2VzX2xpc3RfaGVhZCA9IE5VTEw7CgogIGF0ZXhpdCAobWJjc2V0c19kZXN0cm95X21vZHVs
ZSk7Cn0KCl1dKSkKCmFzc2VydChmOndyaXRlKFtbCi8qIEludGVybmFsIGZ1bmN0aW9uIHRv
IGZyZWUgYWxsIHJlc291cmNlcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHVzZWQgYnkKICAg
YW4gaW5zdGFuY2UuICBUaGUgcG9pbnRlciBpcyBubyBsb25nZXIgdmFsaWQgYWZ0ZXIgdGhp
cyBjYWxsLiAgKi8Kc3RhdGljIHZvaWQKZnJlZV9pbnN0YW5jZSAobWJjc2V0c19zZXRfdCAq
bWJjKQp7CiAgc2l6ZV90IGk7CgogIGZyZWUgKG1iYy0+Y2hhcnMpOwogIGZyZWUgKG1iYy0+
Y2hfY2xhc3Nlcyk7CiAgZnJlZSAobWJjLT5yYW5nZXMpOwoKICBmb3IgKGkgPSAwOyBpIDwg
bWJjLT5uZXF1aXZzOyArK2kpCiAgICBmcmVlIChtYmMtPmVxdWl2c1tpXSk7CiAgZnJlZSAo
bWJjLT5lcXVpdnMpOwoKICBmb3IgKGkgPSAwOyBpIDwgbWJjLT5uY29sbF9lbGVtczsgKytp
KQogICAgZnJlZSAobWJjLT5jb2xsX2VsZW1zW2ldKTsKICBmcmVlIChtYmMtPmNvbGxfZWxl
bXMpOwoKICBmcmVlIChtYmMpOwp9CgpdXSkpCgphc3NlcnQoZjp3cml0ZShEZWNsc1sibWJj
c2V0cy1kZXN0cm95LW1vZHVsZSJdLCBbWwp7CiAgbWJjc2V0c19zZXRfdCAqcF9saXN0Owog
IG1iY3NldHNfc2V0X3QgKnBfbmV4dDsKCiAgLyogTW92ZSB0aGUgZ2xvYmFsIGxpc3QgaGVh
ZCBpbnRvIGEgbG9jYWwgdmFyaWFibGUsIGFuZCBpbW1lZGlhdGVseQogICAgIGNsZWFyIHRo
ZSBnbG9iYWwuICBUaGlzIGlzIGEgaGFsZi1oZWFydGVkIGF0dGVtcHQgdG8gYXZvaWQgcmFj
ZQogICAgIGNvbmRpdGlvbnM7IHRvIGRvIHRoaW5ncyBwcm9wZXJseSwgYSBzeXN0ZW0td2lk
ZSBhdG9taWMgb3BlcmF0aW9uCiAgICAgKGxvY2tlZCwgaW5jbHVkaW5nIG11bHRpLUNQVSBj
YWNoZSBjb2hlcmVuY3kpIG9wZXJhdGlvbiBzaG91bGQgYmUKICAgICB1c2VkLiAgKi8KICBw
X2xpc3QgPSBtYmNzZXRzX2luc3RhbmNlc19saXN0X2hlYWQ7CiAgbWJjc2V0c19pbnN0YW5j
ZXNfbGlzdF9oZWFkID0gTlVMTDsKCiAgLyogVHJhdmVyc2UgdGhlIGxpc3Qgb2YgaW5zdGFu
Y2VzLCByZWxlYXNpbmcgYWxsIHJlc291cmNlcyBhc3NvY2lhdGVkCiAgICAgd2l0aCBlYWNo
IG9uZS4gICovCiAgd2hpbGUgKHBfbGlzdCkKICAgIHsKICAgICAgcF9uZXh0ID0gcF9saXN0
LT5uZXh0X2luc3RhbmNlOwogICAgICBmcmVlX2luc3RhbmNlIChwX2xpc3QpOwogICAgICBw
X2xpc3QgPSBwX25leHQ7CiAgICB9Cn0KCl1dKSkKCmFzc2VydChmOndyaXRlKERlY2xzWyJt
YmNzZXRzLW5ldyJdLCBbWwp7CiAgbWJjc2V0c19zZXRfdCAqbmV3X3NldDsKCiAgLyogQWxs
b2NhdGUgbWVtb3J5IGZvciBuZXcgaW5zdGFuY2UuICAqLwogIG5ld19zZXQgPSB4emFsbG9j
IChzaXplb2YgKCpuZXdfc2V0KSk7CgogIC8qIExpbnQgbmV3IGluc3RhbmNlIGludG8gbGlz
dCBvZiBpbnN0YW5jZXMgY3JlYXRlZCBieSB0aGlzIG1vZHVsZS4gICovCiAgbmV3X3NldC0+
bmV4dF9pbnN0YW5jZSA9IG1iY3NldHNfaW5zdGFuY2VzX2xpc3RfaGVhZDsKICBtYmNzZXRz
X2luc3RhbmNlc19saXN0X2hlYWQgPSBuZXdfc2V0OwoKICAvKiBBbGxvY2F0ZSBhIGNoYXJj
bGFzcyBzZXQgdG8gdGhlIGluc3RhbmNlLCBzbyB3ZSBjYW4gZWFzaWx5IHB1c2gKICAgICBj
b2RlcyBpbnRvIHRoYXQgcmVwcmVzZW50YXRpb24gaWYgcG9zc2libGUuICAqLwogIG5ld19z
ZXQtPmNoYXJjbGFzcyA9IGNoYXJjbGFzc19hbGxvYyAoKTsKCiAgLyogUmVwb3J0IGNyZWF0
ZWQgaW5zdGFuY2UgdG8gdGhlIGNhbGxlci4gICovCiAgcmV0dXJuIG5ld19zZXQ7Cn0KCl1d
KSkKCgotLSBGaW5hbGx5LCBhZGQgdHJhaWxlciBsaW5lICh2aW0pCmFzc2VydChmOndyaXRl
KFtbCi8qIHZpbTpzZXQgc2hpZnR3aWR0aD0yOiAqLwpdXSkpCgotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQoKLS0tLS0tLS0tLS0tLS0tLSoqKioqKioqIHByb3RvLWxleHBhcnNlLmggKioqKioq
KiotLS0tLS0tLS0tLS0tLS0tCgpwcmludCgiQ3JlYXRpbmcgcHJvdG8tbGV4cGFyc2UuaC4u
LiIpCmxvY2FsIGYgPSBhc3NlcnQoaW8ub3BlbigicHJvdG8tbGV4cGFyc2UuaCIsICJ3Iikp
CmFzc2VydChmOndyaXRlKFtbCi8qIHByb3RvLWxleHBhcnNlIC0tIERlZmluZSBob3cgbGV4
ZXIgYW5kIHBhcnNlciBjYW4gaW50ZXJhY3QuCgpdXSkpCgphc3NlcnQoZjp3cml0ZShSYXdU
ZXh0KCJDb3B5cmlnaHQuZGZhYyIpLCAiXG4iKSkKYXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgi
TGljZW5zZVdhcnJhbnR5LmRmYWMiKSwgIlxuIikpCmFzc2VydChmOndyaXRlKFJhd1RleHQo
IkF1dGhvcnMuZGZhYyIpKSkKYXNzZXJ0KGY6d3JpdGUoW1sKCi8qIDIwMTQ6IENyZWF0ZWQg
YnkgInVudGFuZ2xlIiBzY3JpcHQsIHdyaXR0ZW4gYnkgYmVob2Zmc2tpLgoKKEVWRU5UVUFM
TFlSRVdSSVRFTUU6IEEgdmVyeSBsZW5ndGh5IGVkaXRvcmlhbC9kaXNjdXNzaW9uIG9mIHRo
aXMgbW9kdWxlCmZvbGxvd3MsIHBhcnRpYWxseSBpbnRlcnNwZXJzZWQgd2l0aCBhIGRlc2Ny
aXB0aW9uIG9mIGl0cyBpbnRlbmRlZApmdW5jdGlvbi4gIENvbW1lbnRzIGFuZCBjcml0aWNp
c20gYXJlIHdlbGNvbWU7IGlmIGFkb3B0ZWQsIEkgZXhwZWN0IHRoYXQKdGhpcyBjb21tZW50
IGJsb2NrIHdpbGwgYmUgcmV3cml0dGVuIHRvIGJlIG11Y2ggbW9yZSBmb2N1c3NlZCBhbmQg
bXVjaApzaG9ydGVyLikKClRoaXMgZmlsZSBoYXMgYmVlbiBhZGRlZCB2ZXJ5LCB2ZXJ5IGxh
dGUgaW4gdGhlIG5vbi1saW5lYXIgcHJvY2VzcyBvZgpkZXZlbG9waW5nIHRoaXMgY29kZS4g
IEl0IGFkZHJlc3NlcyBhIGZlYXR1cmUgdGhhdCB3YXMgbm90IGFudGljaXBhdGVkIGVhcmx5
Cm9uLCBidXQgd2hpY2ggSSBiZWxpZXZlIGlzIHdvcnRoIGV4cGxvcmluZyBpbiB0aGUgZnV0
dXJlOiAgVGhlIHByZXNlbmNlIG9mCnBsdWdnYWJsZSBsZXhlcnMgdG8gc3VwcGx5IHRvIHRo
ZSBwYXJzZXIsIG9yLCBlcXVpdmFsZW50bHksIGJyZWFraW5nIHVwIHRoZQptYXN0ZXIvc2xh
dmUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHBhcnNlciBhbmQgdGhlIGxleGVyLCBhbmQg
cmVwbGFjaW5nIGl0CndpdGggYSBwZWVyLXRvLXBlZXIgY29udmVyc2F0aW9uIChwZXJoYXBz
IHRoZSBzb2Z0d2FyZSBlcXVpdmFsZW50IG9mIGEKc2hhcmVkIGJ1cykuCgpRdWl0ZSBhIGJp
dCBvZiB0aGUgbmVlZCBmb3IgdGhpcyBwcm90b2NvbC9pbnRlcmZhY2UgbW9kdWxlIGlzIHRo
YXQgSSd2ZQpkZW1hbmRlZCB0aGF0IHRoZSBpbmRpdmlkdWFsIG1vZHVsZXMgc3RyaWN0bHkg
aGlkZSB0aGVpciBpbnRlcm5hbHMsIGFuZCBvbmx5CnNoYXJlIGluZm9ybWF0aW9uIGFuZC9v
ciBjb250cm9sIG9mIHJlc291cmNlcyAoc3VjaCBhcyB0aGUgcGFyc2VyIGNhbGxpbmcKbGV4
ICgpKSBpbiBhbiBleHBsaWNpdCBmYXNoaW9uLiAgRWFybHkgb24sIHRoZSBuYXR1cmUgb2Yg
Y29ubmVjdGlvbnMgYmV0d2Vlbgp0aGUgbGV4ZXIgYW5kIHRoZSBwYXJzZXIgYXBwZWFyZWQg
d2l0aCB0aGUgbmVlZCB0byBjb21tdW5pY2F0ZSB7bWluLG1heH0KdmFsdWVzIGFzIHBhcnQg
b2YgdGhlIFJFUE1OIHRva2VuOyB0aGVuIHRoZSBuZWVkIHRvIGNvbW11bmljYXRlIHRoZSB3
aWRlCmNoYXJhY3RlciBpbXBsaWVkIGJ5IHRoZSBXQ0hBUiB0b2tlbi4KClRoZSBjcmlzaXMg
Y2FtZSBhcm9zZSBmcm9tIGFuIGVhcmx5IGRlY2lzaW9uIHRoYXQgYXQgdGhlIHRpbWUgc2Vl
bWVkIGZhaXJseQptaWxkLCBidXQgZ3JhZHVhbGx5IGdyZXcgYW5kIGdyZXcgb3ZlciB0aW1l
OiB3aGVuIEkgZGVjaWRlZCB0byBleHRlbmQgdGhlCm1lYW5pbmcgb2YgdGhlIGZzYWxleF9z
eW50YXggKCkgY2FsbCB0byBub3Qgb25seSBpbmNsdWRlIHRoZSBwYXJhbWV0ZXJzCm5hbWVk
IGluIHRoZSBjYWxsIChyZWdfc3ludGF4X3QsIGNhc2UgZm9sZGluZywgZW9sIGNoYXIpLCBi
dXQgdG8gYWxzbwpjYXB0dXJlIHRoZSBsb2NhbGUgaW4gZm9yY2UgYXQgdGhhdCBwb2ludCwg
YW5kIG1ha2UgdGhlIGxleGVyJ3MgYmVoYXZpb3VyCm9iZXkgdGhhdCBsb2NhbGUsIGV2ZW4g
aWYgdGhlIGxvY2FsZSB3YXMgc3Vic2VxdWVudGx5IGNoYW5nZWQuCgpBbm90aGVyIGV4YW1w
bGUgb2YgZGF0YSBpbnRlcmNoYW5nZSBpcyB0aGF0IHRoZSBsZXhlciBidWlsZHMgc3RydWN0
dXJlcyB0bwptb2RlbCBtdWx0aWJ5dGUgY2hhcmFjdGVyIHNldHMsIGJ1dCAoYXQgdGhlIHRp
bWUgb3Igd3JpdGluZykgZG9lcyBub3QgcHJvdmlkZQphbiBpbnRlcmZhY2UgZm9yIGNsaWVu
dHMgdG8gYWNjZXNzIHRoaXMgaW5mb3JtYXRpb24uICBUaGUgbmVlZCBmb3IgbWFueSBhbmQK
dmFyaWVkIGludGVyZmFjZSBmdW5jdGlvbiBoYXMgYmVlbiBzdGVhZGlseSBncm93aW5nLCBh
bmQgdGhpcyBpcyBqdXN0IGFub3RoZXIKZXhhbXBsZS4KClRoZSBicmVha2luZyBwb2ludCBj
YW1lIHdoZW4gSSBzYXcgdGhhdCB0aGUgcGFyc2VyIG5lZWRlZCB0byBrbm93IGlmIGl0IHdh
cwppbiBhIHVuaWJ5dGUgb3IgbXVsdGlieXRlIGxvY2FsZSAoY3VycmVudGx5IGRvbmUgYnkg
dGVzdGluZyBNQl9DVVJfTUFYID4gMSkuCklmIHRoZSBsZXhlciB3YXMgdGhlIGF1dGhvcml0
eSBvbiB0aGUgbG9jYWxlLCB0aGVuIHRoZSBwYXJzZXIgbmVlZGVkIHRvCnF1ZXJ5IHRoZSBs
ZXhlciwgc2luY2UsIGJlY2F1c2Ugb2YgdGhlICBwbHVnZ2FibGUtbGV4ZXIgYXJjaGl0ZWN0
dXJlIEknZApjcmVhdGVkLCB0aGUgbGV4ZXIgd2FzIGFscmVhZHkgdGhlIGF1dGhvcml0eSwg
YnV0IG5lZWRlZCB0byBzaGFyZSBpdHMKaW5mb3JtYXRpb24gd2l0aCBvdGhlcnMuICBUaGUg
bnVtYmVyIG9mIHNwZWNpYWxpc2VkIGdldC9zZXQgZnVuY3Rpb25zIG5lZWRlZAp3YXMgb3V0
IG9mIGNvbnRyb2wsIGFuZCwgaWYgYSBwbHVnZ2FibGUgYXJjaGl0ZWN0dXJlIHdhcyB0byBi
ZSBtYWludGFpbmVkLHRoZQpudW1iZXIgaGFkIHRvIGJlIGRyYXN0aWNhbGx5IHJlZHVjZWQu
CgpIZW5jZSwgdGhpcyBtb2R1bGUsIHRoYXQgZGVmaW5lcyB0aGUgaW50ZXJmYWNlL3Byb3Rv
Y29sIHRoYXQgYW55IGxleGVyIG11c3QKc2VydmUsIGFuZCB3aGljaCBhbGxvd3MgYSBsZXhl
ciBhbmQgaXRzIGNsaWVudCB0byBleGNoYW5nZSBpbmZvcm1hdGlvbiBhbmQKbmVnb3RpYXRl
IGluIGEgZmxleGlibGUgZmFzaGlvbi4gIFRoaXMgY29tZXMgYXQgdGhlIGV4dGVudCBvZiB0
eXBlIHNhZmV0eSBpbgptYW55IGNhc2VzLCBidXQgbWFrZXMgZGF0YSBleGNoYW5nZSBtb3Jl
IGZvcm1hbC4KClRoaXMgbW9kdWxlIG9ubHkgbW9kZWxzIGVzc2VudGlhbCBleGNoYW5nZXMg
YmV0d2VlbiB0aGUgcGFyc2VyIGFuZCBsZXhlcgppbnN0YW5jZXMsIGFuZCBlbmNvdXJhZ2Vz
IHRoZSB1c2VyIHRvIG5lZ290aWF0ZSBkaXJlY3RseSB3aXRoIHRoZSBtb2R1bGVzCmZvciB1
bnJlbGF0ZWQgdG9waWNzLiAgRm9yIGV4YW1wbGUsIHRoZSBwYXJzZXIgZG9lcyBub3QgbmVl
ZCB0byBrbm93IHdoYXQgdGhlCm9yaWdpbmFsIHBsYWluLXRleHQgcGF0dGVybiB3YXM7IGl0
IHJlY2VpdmVzIGEgZnVsbCBkZXNjcmlwdGlvbiBvZiB0aGUKcGF0dGVybiB2aWEgdGhlIGxl
eGVyIHRva2VucyBhbmQgYXNzb2NpYXRlZCBwYXJhbWV0ZXJzL3N0cnVjdHVyZXMuICBTbywg
dGhlcmUKaXMgbm8gInBhdHRlcm4iIGludGVyY2hhbmdlIGRlc2NyaWJlZCBoZXJlOiAgVGhl
IGNsaWVudCBjYW4gd29yayBkaXJlY3RseQp3aXRoIHRoZSBsZXhlci4KClRoZSBkZXNpZ24g
aXMgdG8gc3BsaXQgaW50ZXJhY3Rpb25zIGJldHdlZW4gbW9kdWxlcyBpbnRvIHR3byBzZXRz
OiAgRm9yIGNvZGUKdGhhdCBpcyBzbyBjZW50cmFsIHRvIHRoZSBkZXNpZ24gb2YgdGhlIG1v
ZHVsZXMgb24gZWFjaCBzaWRlLCB3aGVyZSBhbgppbmRpcmVjdCBhcHByb2FjaCB3b3VsZCB0
ZW5kIHRvIHNpZ25pZmljYW50bHkgY29tcGxpY2F0ZSB0aGUgZXhjaGFuZ2UsIGFuZC9vcgp3
aGVyZSBlZmZpY2llbmN5IGlzIGEgY2VudHJhbCBjb25jZXJuLCB0aGVuIGEgZGlyZWN0IGZ1
bmN0aW9uIGlzIHByb3ZpZGVkIHRvCmZhY2lsaXRhdGUgZWFjaCBzdWNoIHBvc3NpYmxlIGV4
Y2hhbmdlLgoKVGhlIG90aGVyIHNldCBjb25zaXN0cyBvZiB0aGUgbWFqb3JpdHkgb2YgY2Fz
ZXMgKGJ5IHR5cGUsIGJ1dCB1c3VhbGx5IG5vdCBieQpydW50aW1lIHZvbHVtZSk6ICBGb3Ig
dGhlc2UgY2FzZXMsIGEgZ2VuZXJpYyAiZXhjaGFuZ2UiIGZ1bmN0aW9uIGlzIHByb3ZpZGVk
CmJ5IHRoZSBsZXhlciwgYW5kIGlzIHBsdWdnZWQgaW50byB0aGUgcGFyc2VyLiAgVGhpcyBm
dW5jdGlvbiBoYXMgcGFyYW1ldGVycwphbmQgcmV0dXJuIHZhbHVlcyB0aGF0IHBlcm1pdCB0
aGUgcGFydGllcyB0byBleGNoYW5nZSBpbmZvcm1hdGlvbiwgYWx0aG91Z2gKc29tZSBzdHJp
Y3QgdHlwZSBzYWZldHkgaXMgc2FjcmlmaWNlZCB3aGVyZSBtZW1vcnkgcG9pbnRlcnMgY2Fu
IGNyb3NzIHRoZQpib3VuZGFyeS4gIEEgc2xpZ2h0bHkgc2ltcGxpZmllZCBkZWZpbml0aW9u
IG9mIHRoZSBleGNoYW5nZSBmdW5jdGlvbiBpczoKCiAgICBpbnQgbGV4ZXJfcHJvdmlkZWRf
ZXhjaGFuZ2UgKHZvaWQgKmxleGVyX2luc3RhbmNlX2NvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4Y2hhbmdlX29wY29kZV9lbnVtIG9wY29kZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZ2VuZXJpY19wYXJhbWV0ZXIpOwoK
VGhlIG9wY29kZSBkZWZpbmVzIHdoYXQgbWVhbmluZyAoaWYgYW55KSBpcyBhc3NpZ25lZCB0
byB0aGUgcGFyYW1ldGVyIGFuZC9vcgp0byB0aGUgcmV0dXJuIHZhbHVlLiAgVGhlIGV4Y2hh
bmdlIGZ1bmN0aW9uLCB0aGVzZSBvcGNvZGVzLCBhbmQgdGhlIHJlcXVpcmVkCm1lYW5pbmcg
dGhlIHZhbHVlcyBpbnZvbHZlZCBhcmUgZm9ybWFsbHkgZGVmaW5lZCBieSB0aGlzIG1vZHVs
ZSwgYW5kIGJvdGggdGhlCmxleGVyIGFuZCB0aGUgcGFyc2VyIG11c3QgY29uZm9ybSB0byB0
aGlzIHByb3RvY29sL2ludGVyZmFjZS4gIEJ5IGhhdmluZyB0aGlzCm1vZHVsZSBhcyBhbiBp
bmRlcGVuZGVudCBlbnRpdHksIGl0IHJlaW5mb3JjZXMgdGhlIGluZGVwZW5kZW5jZSBvZiBl
YWNoIHBhcnR5CmluIHRoZSBhcnJhbmdlbWVudCwgYW5kIGNhbiBlYXNlIHRoZSBjcmVhdGlv
biBvZiBhbHRlcm5hdGl2ZXMgKGUuZy4gcGVyaGFwcwp1c2UgYSBtdWNoIHNpbXBsZXIgbGV4
ZXIgZm9yICJncmVwIC1GIiBpbiBhIHVuaWJ5dGUgbG9jYWxlPykuCgpPbiB0aGUgZG93bnNp
ZGUsIHNvbWUgb2YgdGhlIGluaXRpYWwgb3Bjb2Rlcy9leGNoYW5nZXMgSSdtIHdyaXRpbmcg
aGVyZSBhcmUKb2J2aW91c2x5IGRpcmVjdGx5IGxpZnRlZCBmcm9tIHRoZSBleGlzdGluZyBk
ZmEuYyBsZXhlci9wYXJzZXIgaW50ZXJhY3Rpb25zCihlLmcuIHRoZSBtdWx0aWJ5dGUgc2V0
cyBzdHJ1Y3QocykpLiAgSSdtIGhvcGluZyB0aGF0IHRoaXMgd2lsbCBub3QgYmUgYQpmYXRh
bCBmbGF3LCBidXQgaW4gdGhlIGZpbmFsIGFuYWx5c2lzIHRoaXMgbW9kdWxlIGlzIGEgc2lk
ZS1lZmZlY3Qgb2YKcmVxdWlyaW5nIGEgcGx1Z2dhYmxlIGxleGVyIGFyY2hpdGVjdHVyZSwg
YW5kIHRoaXMgbWF5IG5vdCBiZSBhY2NlcHRhYmxlIHRvCm90aGVycy4gICovCgpdXSkpCgot
LSBBZGQgcHJlcHJvY2Vzc29yIGxpbmVzIHRvIG1ha2UgdGhpcyBoZWFkZXIgZmlsZSBpZGVt
cG90ZW50Lgphc3NlcnQoZjp3cml0ZShbWwoKI2lmbmRlZiBQUk9UT19MRVhQQVJTRV9ICiNk
ZWZpbmUgUFJPVE9fTEVYUEFSU0VfSCAxCgovKiBBbHdheXMgaW1wb3J0IGVudmlyb25tZW50
LXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaXRlbXMgZmlyc3QuICAqLwojaW5jbHVkZSA8Y29u
ZmlnLmg+CgovKiBUaGUgbGV4ZXIgcmV0dXJucyBhIHRva2VuLCBkZWZpbmVkIGJ5IGZzYXRv
a2VuLiAgKi8KI2luY2x1ZGUgImZzYXRva2VuLmgiCgpdXSkpCgphc3NlcnQoZjp3cml0ZShb
WwovKiBEZWZpbmUgb3Bjb2RlcyBmb3IgbGV4ZXIvcGFyc2VyIGV4Y2hhbmdlcy4gICovCnR5
cGVkZWYgZW51bSBwcm90b19sZXhwYXJzZV9vcGNvZGVfZW51bQp7Ci8qICBQb3NzaWJsZSBm
dXR1cmUgb3Bjb2RlOiBQUk9UT19MRVhQQVJTRV9PUF9HRVRfTE9DQUxFLCAgZW50aXJlCiAg
ICBsb2NhbGUgZnJvbSB1c2Vsb2NhbGUvZHVwbG9jYWxlICovCiAgUFJPVE9fTEVYUEFSU0Vf
T1BfR0VUX0lTX01VTFRJQllURV9MT0NBTEUsCiAgUFJPVE9fTEVYUEFSU0VfT1BfR0VUX1JF
UE1OX01JTiwKICBQUk9UT19MRVhQQVJTRV9PUF9HRVRfUkVQTU5fTUFYLAogIFBST1RPX0xF
WFBBUlNFX09QX0dFVF9XSURFX0NIQVJfTElTVF9NQVgsCiAgUFJPVE9fTEVYUEFSU0VfT1Bf
R0VUX1dJREVfQ0hBUlMsCiAgUFJPVE9fTEVYUEFSU0VfT1BfR0VUX0RPVENMQVNTLAogIFBS
T1RPX0xFWFBBUlNFX09QX0dFVF9NQkNTRVQsCn0gcHJvdG9fbGV4cGFyc2Vfb3Bjb2RlX3Q7
CgovKiBNb3N0IG9wY29kZXMgYWJvdmUgYXJlIHNlbGYtZG9jdW1lbnRpbmc7IHRoZSAiV0lE
RV9DSEFSKFMpIgogICBpdGVtcyByZXF1aXJlIGEgbGl0dGxlIG1vcmUgZXhwbGFuYXRpb246
CiAgIDEuIFdoZW4gdGhlIGxleGVyIHJldHVybnMgYSBXQ0hBUiB0b2tlbiwgdGhlcmUgaXMg
YXQgbGVhc3Qgb25lCiAgICAgIGV4cGxpY2l0IGNoYXJhY3RlciAoc3BlY2lmaWVkIGluIHRo
ZSBwYXR0ZXJuKSwgcGx1cyBhIGxpc3Qgb2YKICAgICAgemVybyBvciBtb3JlIGFsdGVybmF0
ZSBjaGFyYWN0ZXJzIHRoYXQgYWxzbyBtYXRjaCAodXN1YWxseQogICAgICBiZWNhdXNlIGNh
c2UgZm9sZGluZyBpcyBzZWxlY3RlZCkuICBUaGUgcGFyc2VyIHNob3VsZCB1c2UKICAgICAg
R0VUX1dJREVfQ0hBUlMgaW4gcmVzcG9uc2UgdG8gYSBXQ0hBUiB0b2tlbiB0byBmZXRjaCB0
aGlzIGxpc3QKICAgICAgKGluY2x1ZGluZyB0aGUgZXhwbGljaXQgY2hhcmFjdGVyIGFzIHRo
ZSBmaXJzdCBlbGVtZW50IG9mIHRoZQogICAgICBsaXN0KTsgYW5kCiAgIDIuIFRoZSBHRVRf
V0lERV9DSEFSX0xJU1RfTUFYIGlzIHByb3ZpZGVkIHNvIHRoYXQgdGhlIHBhcnNlciBjYW4K
ICAgICAgYWxsb2NhdGUgc3RvcmFnZSBmb3IgdGhlIGxvbmdlc3QgcG9zc2libGUgbGlzdCwg
ZWl0aGVyIGFzIGEKICAgICAgb25jZS1vZmYgYWxsb2NhdGlvbiBkdXJpbmcgc3RhcnR1cCwg
b3Igb24gYSBjYXNlLWJ5LWNhc2UKICAgICAgYmFzaXMuICAqLwpdXSkpCgphc3NlcnQoZjp3
cml0ZShbWwovKiBEZWNsYXJlIHByb3RvdHlwZXMgZm9yIG1haW4gbGV4IGZ1bmN0aW9uIChs
ZXggKCksIGZldGNoIGEgdG9rZW4pLAogICBhbmQgdGhlIGV4Y2hhbmdlIGZ1bmN0aW9uLiAg
Ki8KdHlwZWRlZiBmc2F0b2tlbl90b2tlbl90IHByb3RvX2xleHBhcnNlX2xleF9mbl90ICh2
b2lkICpsZXhlcl9jb250ZXh0KTsKCnR5cGVkZWYgaW50IHByb3RvX2xleHBhcnNlX2V4Y2hh
bmdlX2ZuX3QgKHZvaWQgKmxleGVyX2NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3RvX2xleHBhcnNlX29wY29kZV90IG9wY29kZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGFyYW1ldGVy
KTsKCl1dKSkKCi0tIEZpbmFsbHksIGFkZCB0cmFpbGVyIGxpbmVzIChpZGVtcG90ZW5jeSwg
dmltKQphc3NlcnQoZjp3cml0ZShbWwoKI2VuZGlmIC8qIFBST1RPX0xFWFBBUlNFX0ggKi8K
Ci8qIHZpbTpzZXQgc2hpZnR3aWR0aD0yOiAqLwpdXSkpCgphc3NlcnQoZjpjbG9zZSgpKQoK
Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCgotLS0tLS0tLS0tLS0tLS0tKioqKioqKiogZnNhbGV4
LmggKioqKioqKiotLS0tLS0tLS0tLS0tLS0tCgpwcmludCgiQ3JlYXRpbmcgZnNhbGV4Lmgu
Li4iKQpsb2NhbCBmID0gYXNzZXJ0KGlvLm9wZW4oImZzYWxleC5oIiwgInciKSkKYXNzZXJ0
KGY6d3JpdGUoW1sKLyogZnNhbGV4IC0gUmVwYWNrYWdlIHBhdHRlcm4gdGV4dCBhcyBjb21w
YWN0LCBleHByZXNzaXZlIHRva2VucwoKXV0pKQphc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJD
b3B5cmlnaHQuZGZhYyIpLCAiXG4iKSkKYXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgiTGljZW5z
ZVdhcnJhbnR5LmRmYWMiKSwgIlxuIikpCmFzc2VydChmOndyaXRlKFJhd1RleHQoIkF1dGhv
cnMuZGZhYyIpKSkKYXNzZXJ0KGY6d3JpdGUoW1sKCi8qIDIwMTQ6IFJlcGFja2FnZWQgYnkg
InVudGFuZ2xlIiBzY3JpcHQsIHdyaXR0ZW4gYnkgYmVob2Zmc2tpLiAgKi8KCl1dKSkKCi0t
IEFkZCBwcmVwcm9jZXNzb3IgbGluZXMgdG8gbWFrZSB0aGlzIGhlYWRlciBmaWxlIGlkZW1w
b3RlbnQuCmFzc2VydChmOndyaXRlKFtbCgojaWZuZGVmIEZTQUxFWF9ICiNkZWZpbmUgRlNB
TEVYX0ggMQoKLyogQWx3YXlzIGltcG9ydCBlbnZpcm9ubWVudC1zcGVjaWZpYyBjb25maWd1
cmF0aW9uIGl0ZW1zIGZpcnN0LiAgKi8KI2luY2x1ZGUgPGNvbmZpZy5oPgoKI2luY2x1ZGUg
ImZzYXRva2VuLmgiCiNpbmNsdWRlICJwcm90by1sZXhwYXJzZS5oIgojaW5jbHVkZSA8cmVn
ZXguaD4KCi8qIE11bHRpcGxlIGxleGVyIGluc3RhbmNlcyBjYW4gZXhpc3QgaW4gcGFyYWxs
ZWwsIHNvIGRlZmluZSBhbgogICBvcGFxdWUgdHlwZSB0byBjb2xsZWN0IHRvZ2V0aGVyIGFs
bCB0aGUgY29udGV4dCByZWxhdGluZyB0byBlYWNoCiAgIGluc3RhbmNlLiAgKi8KdHlwZWRl
ZiBzdHJ1Y3QgZnNhbGV4X2N0eHRfc3RydWN0IGZzYWxleF9jdHh0X3Q7CgpdXSkpCgotLSBG
dW5jdGlvbnMgdG8gZGVhbCB3aXRoIGVudGlyZSBtb2R1bGUgYW5kICphbGwqIGNyZWF0ZWQg
aW5zdGFuY2VzLgpXcml0ZUV4dGVybkRlY2woZiwgRGVjbHNbImxleC1pbml0aWFsaXNlIl0p
CldyaXRlRXh0ZXJuRGVjbChmLCBEZWNsc1sibGV4LWRlc3Ryb3ktbW9kdWxlIl0pCgotLSBE
ZWNsYXJlIGEgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IGxleGVyIHN0YXRlLgpXcml0ZUV4
dGVybkRlY2woZiwgRGVjbHNbImxleC1uZXciXSkKCmFzc2VydChmOndyaXRlKFtbCi8qID8/
IFJlc2VydmUgImZzYWxleF9kaXNjYXJkICgpIiBmb3IgZ2V0dGluZyByaWQgb2YgYSBsZXhl
cgogICBpbnN0YW5jZS4gICovCgpdXSkpCgotLSBBZGQgZXh0ZXJuYWwgZGVjbHMgZm9yIGZz
YWxleF9zeW50YXggYW5kIGZzYWxleF9wYXR0ZXJuLgoKV3JpdGVFeHRlcm5EZWNsKGYsIERl
Y2xzWyJsZXgtc3ludGF4Il0pCldyaXRlRXh0ZXJuRGVjbChmLCBEZWNsc1sibGV4LXBhdHRl
cm4iXSkKCi0tIFdoaWxlIGRmYS5oIGRlY2xhcmVzIGRmYXdhcm4oKSBhbmQgZGZhZXJyb3Io
KSwgYW5kIGRlbWFuZHMgdGhhdCB0aGUKLS0gY2xpZW50IHN1cHBseSBmdW5jdGlvbnMgYXQg
bGluayB0aW1lLCB3ZSBpbnN0ZWFkIHByb3ZpZGUgYW4KLS0gaW50ZXJmYWNlIGZ1bmN0aW9u
IHNvIHRoYXQgdGhlIGZ1bmN0aW9ucyBjYW4gYmUgaGFuZGVkIG92ZXIKLS0gZXhwbGljaXRs
eS4gIFRoaXMgc3R5bGUgbWF5IGJlIHVzZWZ1bCBpbiB0aGUgZnV0dXJlIGlmIHdlIHdhbnQg
dG8KLS0gbW92ZSBmcm9tIGEgc2luZ2xlIGxleGVyIGluc3RhbmNlIHRvIG11bHRpcGxlIGlu
c3RhbmNlcyAob2JqZWN0cz8pCmFzc2VydChmOndyaXRlKFtbCi8qIERlZmluZSBmdW5jdGlv
biBwcm90b3R5cGVzIGZvciB3YXJuaW5nIGFuZCBlcnJvciBjYWxsYmFja3MuICAqLwp0eXBl
ZGVmIHZvaWQKZnNhbGV4X3dhcm5fY2FsbGJhY2tfZm4gKGNvbnN0IGNoYXIgKik7CnR5cGVk
ZWYgdm9pZCAvKiA/PyBfTm9yZXR1cm4/ICovCmZzYWxleF9lcnJvcl9jYWxsYmFja19mbiAo
Y29uc3QgY2hhciAqKTsKCi8qIFJlY2VpdmUgZnVuY3Rpb25zIHRvIGRlYWwgd2l0aCBleGNl
cHRpb25zIGRldGVjdGVkIGJ5IHRoZSBsZXhlcjoKICAgV2FybmluZ3MgYW5kIGVycm9ycy4g
IEludGVybmFsbHksIHdlIGFkZCB0aGUgX05vcmV0dXJuIGF0dHJpYnV0ZQogICB0byB0aGUg
ZXJyb3IgY2FsbGJhY2ssIHRvIGhlbHAgdGhlIGNvbXBpbGVyIHdpdGggY29kZSBmbG93CiAg
IGFuYWx5c2lzLiAgKi8KZXh0ZXJuIHZvaWQKZnNhbGV4X2V4Y2VwdGlvbl9mbnMgKGZzYWxl
eF9jdHh0X3QgKmxleGVyLAogICAgICAgICAgICAgICAgICAgICAgZnNhbGV4X3dhcm5fY2Fs
bGJhY2tfZm4gKndhcm5pbmdmbiwKICAgICAgICAgICAgICAgICAgICAgIGZzYWxleF9lcnJv
cl9jYWxsYmFja19mbiAqZXJyb3Jmbik7CgpdXSkpCgotLSBBZGQgaW50ZXJmYWNlIHRvIGxl
eCgpIGZvciB1c2UgYnkgdGhlIHBhcnNlci4KYXNzZXJ0KGY6d3JpdGUoW1sKLyogTWFpbiBm
dW5jdGlvbiB0byBpbmNyZW1lbnRhbGx5IGNvbnN1bWUgYW5kIGludGVycHJldCB0aGUgcGF0
dGVybgogICB0ZXh0LCBhbmQgcmV0dXJuIGEgdG9rZW4gZGVzY3JpYmluZyBhIHNpbmdsZSBs
ZXhpY2FsIGVsZW1lbnQgYXMgYQogICB0b2tlbiwgcGVyaGFwcyB3aXRoIGltcGxpZWQgcGFy
YW1ldGVycyBzdWNoIGFzIGNoYXJhY3RlciBjbGFzc2VzCiAgIGZvciBDU0VUIHRva2Vucywg
YW5kIHttaW4sbWF4fSB2YWx1ZXMgZm9yIGVhY2ggUkVQTU4gdG9rZW4uICBUaGUKICAgdXNl
ciBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIHJlcGVhdGVkbHksIHJlY2VpdmluZyBvbmUg
dG9rZW4gZWFjaAogICB0aW1lLCB1bnRpbCB0aGUgbGV4ZXIgZGV0ZWN0cyBhIGZhdGFsIGVy
cm9yLCBvciByZXR1cm5zIHRoZSBFTkQKICAgdG9rZW4uICAqLwovKiBUaGlzIGZ1bmN0aW9u
IG11c3QgY29uZm9ybSB0byBwcm90b19sZXhwYXJzZV9sZXhfZm5fdC4gICovCl1dKSkKV3Jp
dGVFeHRlcm5EZWNsKGYsIERlY2xzWyJsZXgiXSkKCi0tIE5vbi1jb3JlIGludGVyYWN0aW9u
cyBiZXR3ZWVuIGxleGVyIGFuZCBwYXJzZXIgZG9uZSBieSBhIHBsdWctaW4gZnVuY3Rpb24u
CldyaXRlRXh0ZXJuRGVjbChmLCBEZWNsc1sibGV4LWV4Y2hhbmdlIl0pCgotLSBGaW5hbGx5
LCBhZGQgdHJhaWxlciBsaW5lcyAoaWRlbXBvdGVuY3ksIHZpbSkKYXNzZXJ0KGY6d3JpdGUo
W1sKCiNlbmRpZiAvKiBGU0FMRVhfSCAqLwoKLyogdmltOnNldCBzaGlmdHdpZHRoPTI6ICov
Cl1dKSkKCmFzc2VydChmOmNsb3NlKCkpCgotLS0tLS0tLS0tLS0tLS0tKioqKioqKiogZnNh
bGV4LmMgKioqKioqKiotLS0tLS0tLS0tLS0tLS0tCgpwcmludCgiQ3JlYXRpbmcgZnNhbGV4
LmMuLi4iKQpsb2NhbCBmID0gYXNzZXJ0KGlvLm9wZW4oImZzYWxleC5jIiwgInciKSkKYXNz
ZXJ0KGY6d3JpdGUoW1sKLyogZnNhbGV4IC0gUmVwYWNrYWdlIHBhdHRlcm4gdGV4dCBhcyBj
b21wYWN0LCBleHByZXNzaXZlIHRva2VucwoKXV0pKQphc3NlcnQoZjp3cml0ZShSYXdUZXh0
KCJDb3B5cmlnaHQuZGZhYyIpLCAiXG4iKSkKYXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgiTGlj
ZW5zZVdhcnJhbnR5LmRmYWMiKSwgIlxuIikpCmFzc2VydChmOndyaXRlKFJhd1RleHQoIkF1
dGhvcnMuZGZhYyIpKSkKYXNzZXJ0KGY6d3JpdGUoW1sKCi8qIDIwMTQ6IFJlcGFja2FnZWQg
YnkgInVudGFuZ2xlIiBzY3JpcHQsIHdyaXR0ZW4gYnkgYmVob2Zmc2tpLiAgKi8KCi8qIEFs
d2F5cyBpbXBvcnQgZW52aXJvbm1lbnQtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpdGVtcyBm
aXJzdC4gICovCiNpbmNsdWRlIDxjb25maWcuaD4gICAgLyogZGVmaW5lIF9HTlVfU09VUkNF
IGZvciByZWdleCBleHRlbnNpb25zLiAgKi8KCiNpbmNsdWRlIDxhc3NlcnQuaD4KI2luY2x1
ZGUgImNoYXJjbGFzcy5oIgojaW5jbHVkZSA8Y3R5cGUuaD4KI2luY2x1ZGUgImZzYWxleC5o
IgojaW5jbHVkZSAiZnNhdG9rZW4uaCIKI2luY2x1ZGUgPGxpbWl0cy5oPgojaW5jbHVkZSA8
bG9jYWxlLmg+CiNpbmNsdWRlICJtYmNzZXRzLmgiCiNpbmNsdWRlICJwcm90by1sZXhwYXJz
ZS5oIgojaW5jbHVkZSA8cmVnZXguaD4KI2luY2x1ZGUgPHN0ZGJvb2wuaD4KI2luY2x1ZGUg
PHN0ZGRlZi5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2lu
Y2x1ZGUgPHdjdHlwZS5oPgojaW5jbHVkZSAieGFsbG9jLmgiCgpdXSkpCgotLSBJbmNsdWRl
IGdldHRleHQgbG9jYWxlIHN1cHBvcnQgZm9yIHN0cmluZ3M6IF8oIm1lc3NhZ2UiKQphc3Nl
cnQoZjp3cml0ZShSYXdUZXh0KCJOYXR1cmFsTGFuZ1N1cHBvcnQiKSwgIlxuIikpCgotLSBH
ZW5lcmFsIGhlbHBlciBtYWNyb3MKYXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgiSVNBU0NJSURJ
R0lUIiksICJcbiIpKQphc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJTVFJFUSIpLCAiXG4iKSkK
YXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgiTUlOIiksICJcbiIpKQoKLS0gRGVmaW5lIHRoZSBw
cmVkaWNhdGUgKnRlbXBsYXRlKiBsaXN0IGJlZm9yZSBmbGVzaGluZyBvdXQgdGhlIG1haW4K
LS0gbGV4ZXIgc3RydWN0LCBhcyB3ZSBuZWVkIHRvIGNvcHkgdGhlIHRlbXBsYXRlLCB2ZXJi
YXRpbSwgaW50byB0aGUKLS0gbGV4ZXIgY29udGV4dCB3aGVuIGEgbmV3IGxleGVyIGlzIGlu
aXRpYWxpc2VkICh0aGVyZSBtYXkgYmUKLS0gcmVhc29ucywgc3VjaCBhcyBsb2NhbGUsIHRo
YXQgdGhlIHNhbWUgcHJlZGljYXRlIG1pZ2h0IG1hcCB0bwotLSBkaWZmZXJlbnQgZWxlbWVu
dHMgaW4gZGlmZmVyZW50IGxleGVycykuCmFzc2VydChmOndyaXRlKFtbCi8qIFRoZSBmb2xs
b3dpbmcgbGlzdCBtYXBzIHRoZSBuYW1lcyBvZiB0aGUgUG9zaXggbmFtZWQgY2hhcmFjdGVy
CiAgIGNsYXNzZXMgdG8gcHJlZGljYXRlIGZ1bmN0aW9ucyB0aGF0IGRldGVybWluZSB3aGV0
aGVyIGEgZ2l2ZW4KICAgY2hhcmFjdGVyIGlzIGluIHRoZSBjbGFzcy4gIFRoZSBsZWFkaW5n
IFsgaGFzIGFscmVhZHkgYmVlbiBlYXRlbiBieQogICB0aGUgbGV4aWNhbCBhbmFseXplci4g
IEFkZGl0aW9uYWwgb2JqZWN0cyBhcmUgcHJvdmlkZWQgdG8gYXNzaXN0CiAgIHRoZSBjbGll
bnQ6IHdjaGFyX2Rlc2MgZm9yIG11bHRpYnl0ZSBtYXRjaGluZywgYW5kIGNsYXNzIGZvciBv
Y3RldAogICBtYXRjaGluZy4gIExhenkgZXZhbHVhdGlvbiBhbmQgY2FjaGluZyBhcmUgdXNl
ZCB0byBtaW5pbWlzZQogICBwcm9jZXNzaW5nIGNvc3RzLCBzbyB0aGVzZSBhZGRpdGlvbmFs
IGl0ZW1zIGFyZSBvbmx5IHZhbGlkIGFmdGVyIGEKICAgY2xhc3MgaGFzIGJlZW4gbG9jYXRl
ZCB1c2luZyBmaW5kX3ByZWQgKCkuICAqLwp0eXBlZGVmIGludCBwcmVkaWNhdGVfdCAod2lu
dF90LCB3Y3R5cGVfdCk7CnR5cGVkZWYgc3RydWN0IHByZWRpY2F0ZV9lbnRyeV9zdHJ1Y3QK
ewogIGNvbnN0IGNoYXIgKm5hbWU7CiAgd2N0eXBlX3Qgd2NoYXJfZGVzYzsKICBjaGFyY2xh
c3NfdCAqY2xhc3M7CiAgYm9vbCBtYXlfYmVfbXVsdGlieXRlOwp9IHByZWRpY2F0ZV9lbnRy
eV90OwoKLyogVGhpcyBsaXN0IGlzIGEgdGVtcGxhdGUsIGNvcGllZCBpbnRvIGVhY2ggbGV4
ZXIncyBzdGF0ZSwgYW5kCiAgIGludGVycm9nYXRlZCBhbmQgdXBkYXRlZCBmcm9tIHRoZXJl
LiAgVGhlIG1lbWJlcnNoaXAgb2YgYSBjbGFzcyBjYW4KICAgdmFyeSBkdWUgdG8gbG9jYWxl
IGFuZCBvdGhlciBzZXR0aW5ncywgc28gZWFjaCBsZXhlciBtdXN0IG1haW50YWluCiAgIGl0
cyBvd24gbGlzdC4gIER1cGxpY2F0ZSBjbGFzcyBzaGFyaW5nIGFjcm9zcyBkaWZmZXJlbnQg
bGV4ZXIKICAgaW5zdGFuY2VzIGlzIGZhY2lsaXRhdGVkIGJ5IGNoZWNrcyBpbiBjaGFyY2xh
c3NfY29tcGxldGVkLiAgKi8KLyogTG9jYWxlIHBvcnRhYmlsaXR5IG5vdGU6IFdlIG1heSBu
ZWVkIHRvIHJlY29yZCB0aGUgZW50aXJlIGV4cGxpY2l0CiAgIGxvY2FsZSB3aGVuIHN5bnRh
eCAoKSBpcyBjYWxsZWQsIGFuZCB0aGVuIHVzZSBpc2FscGhhX2wgKCkgZXRjLgogICBoZXJl
LCBhcyBvdGhlcndpc2UgdGhlIHdjaGFyX2Rlc2MgbWF5IGJlIGludGVycHJldGVkIGF0IHJ1
bnRpbWUgaW4KICAgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgbG9jYWxlLiAgSWYgYSBj
b21wbGV0ZSBjb3B5IG9mIHRoZSBsb2NhbGUKICAgbmVlZHMgdG8gYmUgc3RvcmVkIGxvY2Fs
bHksIHNlZSB1c2Vsb2NhbGUoMykgYW5kIGR1cGxvY2FsZSgzKSAoYW5kCiAgIGZyZWUgdGhl
IGNvcHkgd2l0aCBmcmVlbG9jYWxlKDMpKS4gICovCnN0YXRpYyBwcmVkaWNhdGVfZW50cnlf
dCB0ZW1wbGF0ZV9wcmVkaWNhdGVfbGlzdFtdID0gewogIHsiYWxwaGEiLCAgMCwgTlVMTCwg
dHJ1ZX0sCiAgeyJhbG51bSIsICAwLCBOVUxMLCB0cnVlfSwKICB7ImJsYW5rIiwgIDAsIE5V
TEwsIHRydWV9LAogIHsiY250cmwiLCAgMCwgTlVMTCwgdHJ1ZX0sCiAgeyJkaWdpdCIsICAw
LCBOVUxMLCBmYWxzZX0sCiAgeyJncmFwaCIsICAwLCBOVUxMLCB0cnVlfSwKICB7Imxvd2Vy
IiwgIDAsIE5VTEwsIHRydWV9LAogIHsicHJpbnQiLCAgMCwgTlVMTCwgdHJ1ZX0sCiAgeyJw
dW5jdCIsICAwLCBOVUxMLCB0cnVlfSwKICB7InNwYWNlIiwgIDAsIE5VTEwsIHRydWV9LAog
IHsidXBwZXIiLCAgMCwgTlVMTCwgdHJ1ZX0sCiAgeyJ4ZGlnaXQiLCAwLCBOVUxMLCB0cnVl
fSwKICB7TlVMTCwgMCwgTlVMTH0KfTsKCiNkZWZpbmUgUFJFRElDQVRFX1RFTVBMQVRFX0lU
RU1TIFwKICAgIChzaXplb2YgdGVtcGxhdGVfcHJlZGljYXRlX2xpc3QgLyBzaXplb2YgKnRl
bXBsYXRlX3ByZWRpY2F0ZV9saXN0KQoKXV0pKQoKYXNzZXJ0KGY6d3JpdGUoW1sKLyogRmxl
c2ggb3V0IHRoZSBvcGFxdWUgaW5zdGFuY2UgY29udGV4dCB0eXBlIGdpdmVuIGluIHRoZSBo
ZWFkZXIuICAqLwpzdHJ1Y3QgZnNhbGV4X2N0eHRfc3RydWN0CnsKICAvKiBTaW5nbHktbGlu
a2VkIGxpc3Qgb2YgYWxsIGxleGVyIGluc3RhbmNlcywgc28gZGVzdHJveV9tb2R1bGUgY2Fu
CiAgICAgcmVsZWFzZSBhbGwgcmVzb3VyY2VzIGJ5IHRyYXZlcnNpbmcgdGhlIGxpc3QuICAq
LwogIGZzYWxleF9jdHh0X3QgKm5leHRfaW5zdGFuY2U7CgogIC8qIFVzaW5nIHRoZSBsZXhl
ciB3aXRob3V0IHNldHRpbmcgdGhlIHN5bnRheCBpcyBhIGZhdGFsIGVycm9yLCBzbwogICAg
IHVzZSBhIGZsYWcgc28gd2UgY2FuIHJlcG9ydCBzdWNoIGVycm9ycyBpbiBhIGRpcmVjdCBm
YXNoaW9uLiAgKi8KICBib29sIHN5bnRheF9pbml0aWFsaXNlZDsKCiAgLyogU3ludGF4IGZs
YWdzL2NoYXJhY3RlcnMgZGlyZWN0aW5nIGhvdyB0byBpbnRlcnByZXQgdGhlIHBhdHRlcm4u
ICAqLwogIHJlZ19zeW50YXhfdCBzeW50YXhfYml0czsKICBib29sIGNhc2VfZm9sZDsKICB1
bnNpZ25lZCBjaGFyIGVvbGJ5dGU7CgogIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyBpcyBkb25l
IGJ5IGV4cGxpY2l0IGNhbGxiYWNrcy4gICovCiAgZnNhbGV4X3dhcm5fY2FsbGJhY2tfZm4g
Kndhcm5fY2xpZW50OwogIGZzYWxleF9lcnJvcl9jYWxsYmFja19mbiAqYWJhbmRvbl93aXRo
X2Vycm9yOwoKICAvKiBQYXR0ZXJuIHBvaW50ZXIvbGVuZ3RoLCB1cGRhdGVkIGFzIHBhdHRl
cm4gaXMgY29uc3VtZWQuICAqLwogIGNoYXIgY29uc3QgKmxleHB0cjsKICBzaXplX3QgbGV4
bGVmdDsKCiAgLyogQnJlYWsgb3V0IHNvbWUgcmVnZXggc3ludGF4IGJpdHMgaW50byBib29s
ZWFuIHZhcnMuICBEbyB0aGlzIGZvcgogICAgIHRoZSBvbmVzIHRoYXQgYXJlIGhlYXZpbHkg
dXNlZCwgYW5kL29yIHdoZXJlIHRoZSBuYXR1cmUgb2YgdGhlCiAgICAgYml0bWFzayBmbGFn
IHRlc3QgdGVuZHMgdG8gY2x1dHRlciB0aGUgbGV4ZXIgY29kZS4gICovCiAgYm9vbCByZV9n
bnVfb3BzOyAgICAgICAgICAgICAvKiBHTlUgcmVnZXggb3BlcmF0b3JzIGFyZSBhbGxvd2Vk
LiAgKi8KCiAgLyogQ2FycnkgZG90Y2xhc3MgaGVyZSwgYXMgaXQncyBlYXNpZXIgZm9yIGNs
aWVudHMgKFVURi04KSB0byBwZXJmb3JtCiAgICAgY2xhc3Mgb3BlcmF0aW9ucyB3aXRoIHRo
aXMgY2xhc3MsIHJhdGhlciB0aGFuIHRvIGtub3cgaW50aW1hdGUKICAgICBkZXRhaWxzIG9m
IHRoZSByZWdleCBzeW50YXggY29uZmlndXJhdGlvbiBiaXRzIGFuZCBpdGVtcyBzdWNoIGFz
CiAgICAgZW9sYnl0ZS4gICovCiAgY2hhcmNsYXNzX3QgKmRvdGNsYXNzOyAgICAgICAgIC8q
ICIuIjogQWxsIGNoYXJzIGV4Y2VwdCBlb2xieXRlIGFuZC9vcgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTlVMLCBkZXBlbmRpbmcgb24gc3ludGF4IGZsYWdz
LiAgKi8KICBjaGFyY2xhc3NfaW5kZXhfdCBkb3RjbGFzc19pbmRleDsKCiAgLyogV29yayB2
YXJpYWJsZXMgdG8gaGVscCBvcmdhbmlzZSBsZXhlciBvcGVyYXRpb24uICAqLwogIGZzYXRv
a2VuX3Rva2VuX3QgbGFzdHRvazsKICBib29sIGxhc3RzdGFydDsKICBzaXplX3QgcGFyZW5z
OwoKICAvKiBDaGFyYWN0ZXIgY2xhc3MgcHJlZGljYXRlIG1hcHBpbmcvY2FjaGluZyB0YWJs
ZS4gICovCiAgcHJlZGljYXRlX2VudHJ5X3QgcHJlZGljYXRlc1tQUkVESUNBVEVfVEVNUExB
VEVfSVRFTVNdOwoKICAvKiBNaW5yZXAgYW5kIG1heHJlcCBhcmUgYWN0dWFsbHkgYXNzb2Np
YXRlZCB3aXRoIHRoZSBSRVBNTiB0b2tlbiwKICAgICBhbmQgbmVlZCB0byBiZSBhY2Nlc3Np
YmxlIG91dHNpZGUgdGhpcyBtb2R1bGUgKGJ5IHRoZSBwYXJzZXIpLAogICAgIHBlcmhhcHMg
YnkgYW4gZXhwbGljaXQgaW50ZXJmYWNlIGNhbGwuICBJbiB0aGUgZmFyLCBmYXIgZnV0dXJl
LAogICAgIGEgY29tcGxldGVseS1yZXdvcmtlZCB0b2tlbiBsaXN0IG1heSBzZWUgdGhlc2Ug
dmFsdWVzIHByb3Blcmx5CiAgICAgYmVjb21lIGludGVncmF0ZWQgaW50byB0aGUgdG9rZW4g
c3RyZWFtIChwZXJoYXBzIGJ5IGEgcGFpciBvZgogICAgICJQYXJhbWV0ZXIiIHRva2Vucz8g
IFBlcmhhcHMgYnkgYSBNSU5SRVAgdG9rZW4gd2l0aCAxIHBhcmFtZXRlciwKICAgICBmb2xs
b3dlZCBieSBhIE1BWFJFUCB0b2tlbiB3aXRoIGEgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXI/
KSAgKi8KICBpbnQgbWlucmVwLCBtYXhyZXA7CgogIC8qIEJvb2xlYW5zIHRvIHNpbXBsaWZ5
IHVuaWJ5dGUvbXVsdGlieXRlIGNvZGUgc2VsZWN0aW9uIHBhdGhzLiAgSW4KICAgICBhZGRp
dGlvbiwgb3RoZXIgZmxhZ3MgYXJlIHBsYWNlZCBoZXJlIHRvIHN1bW1hcmlzZSBwcm9wZXJ0
aWVzIG9mCiAgICAgdGhlIGxvY2FsZSBpbiBhIGNvbmNpc2UgZmFzaGlvbiB0aGF0IGNhbiB1
c2VmdWwgd2hlbgogICAgIGltcGxlbWVudGluZyBvcHRpbWlzYXRpb25zLiAgVGhlcmUgbWF5
IGJlIHNvbWUgb3ZlcmxhcCBhbmQvb3IKICAgICByZWR1bmRhbmN5IGhlcmU7IGZsYWcgbmFt
ZXMgYXJlIGNob3NlbiB0byBsZXQgdGhlIHVzZXIgYmUgZGlyZWN0CiAgICAgYW5kIGNvbmNp
c2UsIGJ1dCB3ZSBvbmx5IHByb3ZpZGUgbmFtZXMgZm9yIHRoZSBtb3JlIHBvcHVsYXIgY2Fz
ZXMsCiAgICAgbm90IGFsbC4gICovCiAgY2hhciAqbG9jYWxlX25hbWU7CiAgYm9vbCB1bmli
eXRlX2xvY2FsZTsKICBib29sIG11bHRpYnl0ZV9sb2NhbGU7CiAgYm9vbCBhc2NpaV83Yml0
X2VuY29kaW5nOwogIGJvb2wgdXNpbmdfc2ltcGxlX2xvY2FsZTsKCiAgLyogUkVWSUVXTUU6
IFdpZGUtY2hhcmFjdGVyIHN1cHBvcnQgdmFyaWFibGVzLiAgKi8KICBpbnQgY3VyX21iX2xl
bjsgICAgICAgLyogTGVuZ3RoIChpbiBieXRlcykgb2YgdGhlIGxhc3QgY2hhcmFjdGVyCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoZWQ7IHRoaXMgaXMgbmVlZGVkIHdoZW4g
YmFja2luZyB1cAogICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgbGV4aW5nLiAg
SW4gYSBub24tbXVsdGlieXRlIHNpdHVhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAobG9jYWxlPyksIHRoaXMgdmFyaWFibGUgcmVtYWlucyBhdCAxOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdGhlcndpc2UsIGl0IGlzIHVwZGF0ZWQgYXMgcmVxdWlyZWQgYnkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRkVUQ0hfV0MuICAqLwoKICAvKiBUaGVzZSB2
YXJpYWJsZXMgYXJlIHVzZWQgb25seSBpZiBpbiBhIG11bHRpYnl0ZSBsb2NhbGUuICAqLwog
IHdjaGFyX3Qgd2N0b2s7ICAgICAgICAgLyogU3RvcmFnZSBmb3IgYSBzaW5nbGUgbXVsdGli
eXRlIGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgYm90aCBk
dXJpbmcgbGV4aW5nLCBhbmQgYXMgdGhlIGltcGxpZWQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtZXRlciBvZiBhIFdDSEFSIHRva2VuIHJldHVybmVkIGJ5IHRoZQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGV4ZXIuICAqLwogIG1ic3RhdGVfdCBtYnJ0b3dj
X3N0YXRlOyAvKiBTdGF0ZSBtYW5hZ2VtZW50IGFyZWEgZm9yIG1icnRvd2MgdG8KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXNlLiAqLwoKXV0pKQoKYXNzZXJ0KGY6d3JpdGUo
RWRpdGVkVGV4dCgiZGZhLXN0cnVjdCBtYnJ0b3djX2NhY2hlIiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAiTk9UQ0hBUiIsICJGU0FUT0tFTl9OT1RDSEFSIiksICJcbiIpKQoKLS0g
VXNlIG1iY3NldHMgdG8gaGFuZGxlIG11bHRpYnl0ZSBzZXRzLCBpbnN0ZWFkIG9mIGRvaW5n
IHRoZXNlCi0tIG91cnNlbHZlcwphc3NlcnQoZjp3cml0ZShbWwogIG1iY3NldHNfc2V0X3Qg
KiptYmNzZXRzOwogIHNpemVfdCBubWJjc2V0czsKICBzaXplX3QgbWJjc2V0c19hbGxvYzsK
XV0pKQoKYXNzZXJ0KGY6d3JpdGUoW1sKfTsKCi8qIExpbmtlZCBsaXN0IG9mIGFsbCBpbnN0
YW5jZXMgY3JlYXRlZCBieSB0aGlzIG1vZHVsZS4gICovCnN0YXRpYyBmc2FsZXhfY3R4dF90
ICpmc2FsZXhfaW5zdGFuY2VfbGlzdF9oZWFkID0gTlVMTDsKCl1dKSkKCi0tIEFkZCB1dGls
aXR5IGZ1bmN0aW9uICJtYXliZS1yZWFsbG9jIiwgcHJldmlvdXNseQotLSAiUkVBTExPQ19J
Rl9ORUNFU1NBUlkiLCBoZXJlLCBhcyBhIGdlbmVyaWMgaGVscGVyIGZ1bnRpb24gcGxhY2Vk
Ci0tIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSB0eXBlL3N0cnVjdHVyZSBkZWZpbml0aW9ucywg
YnV0IGJlZm9yZQotLSBpbnRlcmxpbmtlZCBzZXRzIG9mIGhlbHBlciBmdW5jdGlvbnMgc3Vj
aCBhcyAic2V0Yml0X2Nhc2VfZm9sZF9jIi4KYXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgibWF5
YmUtcmVhbGxvYyIpLCAiXG4iKSkKCmFzc2VydChmOndyaXRlKEVkaXRlZFRleHQoInNldGJp
dDo6d2NoYXJfdCBjb21tZW50IiwKICAgICAgICAiRXZlbiBmb3IgTUJfQ1VSX01BWCA9PSAx
LCIsICJFdmVuIGluIHVuaWJ5dGUgbG9jYWxlcywiKSkpCgotLSBVcCB1bnRpbCB0b2RheSAo
OSBNYXIgMjAxNCksIHNldGJpdF9jYXNlX2ZvbGRfYyBmcm9tIHYuIDIuMTcgd2FzIGEKLS0g
Yml0IG9mIGEgbWVzcywgYW5kIHdlbGwgd2l0aGluIG15IHNpZ2h0cyB0byBjbGVhbiB1cC4g
IEhvd2V2ZXIsCi0tIGxhc3QgbmlnaHQsIEkgcmVzeW5jZWQgd2l0aCB0aGUgbGF0ZXN0IGdp
dCBtYXN0ZXIsIGFuZCBpdCBoYXMgYmVlbgotLSByZWNlbnRseSBjbGVhbmVkIHVwIGludG8g
YSB2ZXJzaW9uIHRoYXQncyBwcm9iYWJseSBiZXR0ZXIgdGhhbiB3aGF0Ci0tIEkgd2FzIGNv
bnRlbXBsYXRpbmcuICAoTXkgbWFpbCBmZWVkIHNjcmV3ZWQgdXAganVzdCBhZnRlciB0aGUg
Mi4xNwotLSByZWxlYXNlLCBhbmQgc28gSSBtaXNzZWQgYSB3ZWVrIG9yIHR3bydzIHdvcnRo
IG9mIG1lc3NhZ2VzLikKYXNzZXJ0KGY6d3JpdGUoRlNBVG9rZW5TdWJzdChFZGl0ZWRUZXh0
KCJzZXRiaXRfY2FzZV9mb2xkX2MiLAogICAgICAgICAgImNoYXJjbGFzcyBjIiwgImNoYXJj
bGFzc190ICpjIiwKICAgICAgICAgICJcbiAgICAgIHNldGJpdCAlKGksIGMlKSIsICJcbiAg
ICAgIGNoYXJjbGFzc19zZXRiaXQgKGksIGMpIiwKICAgICAgICAgICIgTUJfQ1VSX01BWCBt
dXN0IGJlIDEuIiwgIldlIG11c3QgYmUgaW4gYW4gdW5pYnl0ZSBsb2NhbGUuIikpLAogICAg
ICAgICAgICAgICAiXG4iKSkKCi0tIHRvX3VjaGFyIGNvbnZlcnRzIGEgY2hhciB0byB1bnNp
Z25lZCBjaGFyLCB1c2luZyBhIGZ1bmN0aW9uIGNhbGwKLS0gcmF0aGVyIHRoYW4gbWVyZWx5
IHR5cGVjYXN0aW5nIGFzIGl0IGNhdGNoZXMgc29tZSB0eXBlIGVycm9ycyB0aGF0Ci0tIHRo
ZSBjYXN0IGRvZXNuJ3QuICBUaGlzIGZuIGlzIHVzZWQgaW4gRkVUQ0hfU0lOR0xFX0NIQVIu
CmFzc2VydChmOndyaXRlKFJhd1RleHQoInRvX3VjaGFyX3R5cGVjaGVjayIpLCAiXG4iKSkK
Ci0tIFNpbmdsZS1ieXRlIGFuZCBtdWx0aWJ5dGUgY2hhcmFjdGVyIGZldGNoaW5nLCByZWFy
cmFuZ2VkIGJ5IGhhbmQuCi0tIE1lcmVseSB3cml0ZSBkZmF0b21iY2FjaGUgdmVyYmF0aW0g
YXQgZmlyc3Q7IHdlIHdpbGwgbmVlZCB0bwotLSBtb2RpZnkgdGhpcyB0byB3b3JrIHByb3Bl
cmx5LgoKLS1hc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJkZmFtYmNhY2hlLWFuZC1tYnNfdG9f
d2NoYXIiKSwgIlxuIikpCmFzc2VydChmOndyaXRlKEVkaXRlZFRleHQoImRmYW1iY2FjaGUi
LAogICAgICAiZGZhbWJjYWNoZSAlKHN0cnVjdCBkZmEgJSpkIiwKICAgICAgImluaXRpYWxp
c2VfdWNoYXJfdG9fd2NfY2FjaGUgKGZzYWxleF9jdHh0X3QgKmxleGVyIiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZCUtPm1icnRvd2NfY2FjaGUiLCAibGV4ZXItPm1icnRvd2Nf
Y2FjaGUiKSwKICAgICAgICAgICAgICAgIlxuIikpCi0tXV0KCmFzc2VydChmOndyaXRlKFtb
Ci8qIFRoaXMgZnVuY3Rpb24gaXMgaW50aW1hdGVseSBjb25uZWN0ZWQgd2l0aCBtdWx0aWJ5
dGUgKHdpZGUtY2hhcikKICAgaGFuZGxpbmcgaW4gdGhlIG1hY3JvIEZFVENIX1dDIGJlbG93
LCBpbiB0aGUgY2FzZSB3aGVyZQogICBGRVRDSF9TSU5HTEVfQ0hBUiBoYXMgcnVuIGJ1dCB0
aGUgcmVzdWx0IGhhcyBiZWVuIGZvdW5kIHRvIGJlCiAgIGluY29uY2x1c2l2ZS4gIEl0IHdv
cmtzIGJ5IHVud2luZGluZyB0aGUgRkVUQ0hfU0lOR0xFX0NIQVIKICAgc2lkZS1lZmZlY3Rz
IChsZXhwdHIvbGV4bGVmdCksIHRoZW4gY2FsbGluZyBtYnJ0b3djIG9uIHRoZSBwYXR0ZXJu
CiAgIHNwYWNlLCBhbmQgY29tbXVuaWNhdGVzIG1icnRvd2MncyB1bmRlcnN0YW5kaW5nIG9m
IHRoZSBvY3RldAogICBzdHJlYW0gYmFjayB0byB0aGUgY2FsbGVyOgogICAgIC0gSWYgYSB2
YWxpZCBtdWx0aWJ5dGUgb2N0ZXQgc2VxdWVuY2UgaXMgbmV4dCwgdGhlbiB0aGUgd2lkZQog
ICAgICAgY2hhcmFjdGVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlcXVlbmNlIGlzIHdyaXR0
ZW4gYmFjayB0bwogICAgICAgKnBfd2NoYXIsIGFuZCB0aGUgbnVtYmVyIG9mIG9jdGV0cyBj
b25zdW1lZCBpcyByZXR1cm5lZDsgb3IKICAgICAtIElmIHRoZSBzZXF1ZW5jZSBpcyBpbnZh
bGlkIGZvciBhbnkgcmVhc29uLCB0aGUgbWJydG93YyB3b3JraW5nCiAgICAgICBzdGF0ZSBp
cyByZXNldCAoemVyb2VkKSwgKnBfd2NoYXIgaXMgbm90IG1vZGlmaWVkLCBhbmQgMSBpcwog
ICAgICAgcmV0dXJuZWQuCiAgIExleGVyIHN0YXRlIHZhcmlhYmxlcywgaW5jbHVkaW5nIGN1
cl9tYl9sZW4sIG1icywgbGV4bGVmdCBhbmQKICAgbGV4cHRyLCBhcmUgdXBkYXRlZCBhcyBh
cHByb3ByaWF0ZSBieSB0aGlzIGZ1bmN0aW9uIChtYWlubHkgaWYKICAgbWJydG93YyBzdWNj
ZWVkcykuICBUaGUgd2lkZSBjaGFyIE5VTCBpcyB1bnVzdWFsIGFzIGl0IGlzIGEKICAgMS1v
Y3RldCBzZXF1ZW5jZSwgdGhlIGxlbmd0aCByZXR1cm5lZCBpcyAwLCB3ZSByZXBvcnQgaXQg
YXMgbGVuZ3RoCiAgIDEsIGJ1dCB3cml0ZSB0aGUgY29udmVydGVkIHdpZGUgY2hhcmFjdGVy
IGluIHRlbXBfd2NoYXIgdG8gdGhlCiAgIGNhbGxlci4gICovCi8qIEFkZGl0aW9uYWwgbm90
ZXM6ICBUaGlzIGNvZGUsIGluIHBhcnRuZXJzaGlwIHdpdGggdGhlIG1hY3JvCiAgIEZFVENI
X1dDLCBpcyBjbG9zZWx5IHJlbGF0ZWQgdG8gbWJzX3RvX3djaGFyIGluIGRmYS5jLiAgVGhl
cmUgaXMKICAgZG9jdW1lbnRhdGlvbiB0aGVyZSAoZS5nLiBwYXR0ZXJuIG11c3QgZW5kIGlu
IGEgc2VudGluZWwsIHNoaWZ0CiAgIGVuY29kaW5ncyBub3Qgc3VwcG9ydGVkLCBwbHVzIG90
aGVyIGNvbW1lbnRzL2d1YXJhbnRlZXMpIHRoYXQgaXMKICAgaW1wb3J0YW50LCBidXQgSSdt
IGRlZmVycmluZyB3cml0aW5nIHVwIGFueXRoaW5nIGF0IHByZXNlbnQgdW50aWwKICAgSSBz
ZWUgaG93IHRoaXMgY29kZSBpcyByZWNlaXZlZC4gICovCnN0YXRpYyBzaXplX3QKZmV0Y2hf
b2Zmc2V0X3dpZGVfY2hhciAoZnNhbGV4X2N0eHRfdCAqbGV4ZXIsIHdjaGFyX3QgKnBfd2No
YXIpCnsKICBzaXplX3QgbmJ5dGVzOwogIHdjaGFyX3QgdGVtcF93Y2hhcjsKCiAgbmJ5dGVz
ID0gbWJydG93YyAoJnRlbXBfd2NoYXIsCiAgICAgICAgICAgICAgICAgICAgbGV4ZXItPmxl
eHB0ciAtIDEsIGxleGVyLT5sZXhsZWZ0ICsgMSwKICAgICAgICAgICAgICAgICAgICAmbGV4
ZXItPm1icnRvd2Nfc3RhdGUpOwogIHN3aXRjaCAobmJ5dGVzKQogICAgewogICAgY2FzZSAo
c2l6ZV90KSAtMjoKICAgIGNhc2UgKHNpemVfdCkgLTE6CiAgICAgIC8qIENvbnZlcnNpb24g
ZmFpbGVkOiBJbmNvbXBsZXRlICgtMikgb3IgaW52YWxpZCAoLTEpCiAgICAgICAgIHNlcXVl
bmNlLiAgKi8KICAgICAgbWVtc2V0ICgmbGV4ZXItPm1icnRvd2Nfc3RhdGUsIDAsIHNpemVv
ZiAobGV4ZXItPm1icnRvd2Nfc3RhdGUpKTsKICAgICAgcmV0dXJuIDE7CgogICAgY2FzZSAo
c2l6ZV90KSAwOgogICAgICAvKiBUaGlzIGlzIHRoZSB3aWRlIE5VTCBjaGFyYWN0ZXIsIGFj
dHVhbGx5IDEgYnl0ZSBsb25nLiAqLwogICAgICBuYnl0ZXMgPSAxOwogICAgICBicmVhazsK
CiAgICBkZWZhdWx0OgogICAgICAvKiBDb252ZXJ0ZWQgY2hhcmFjdGVyIGlzIGluIHRlbXBf
d2NoYXIsIGFuZCBuYnl0ZXMgaXMgYSBieXRlCiAgICAgICAgIGNvdW50LiAgKi8KICAgICAg
YnJlYWs7CiAgICB9CiAgLyogV2UgY29udmVydGVkIDEgb3IgbW9yZSBieXRlcywgdGVsbCBy
ZXN1bHQgdG8gY2FsbGVyLiAgKi8KICAqcF93Y2hhciA9IHRlbXBfd2NoYXI7CgogIC8qIFVw
ZGF0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvbnN1bWVkIChvZmZzZXQgYnkgMSBzaW5jZQog
ICAgIEZFVENIX1NJTkdMRV9DSEFSIGdyYWJiZWQgb25lIGVhcmxpZXIpLiAgKi8KICBsZXhl
ci0+bGV4cHRyICArPSBuYnl0ZXMgLSAxOwogIGxleGVyLT5sZXhsZWZ0IC09IG5ieXRlcyAt
IDE7CgogIHJldHVybiBuYnl0ZXM7Cn0KCl1dKSkKCmFzc2VydChmOndyaXRlKFtbCi8qIFNp
bmdsZS1jaGFyYWN0ZXIgaW5wdXQgZmV0Y2gsIHdpdGggRU9GL2Vycm9yIGhhbmRsaW5nLiAg
Tm90ZSB0aGF0CiAgIGNoYXJhY3RlcnMgYmVjb21lIHVuc2lnbmVkIGhlcmUuICBJZiBubyBj
aGFyYWN0ZXJzIGFyZSBhdmFpbGFibGUsCiAgIHRoZSBtYWNybyBlaXRoZXIgcmV0dXJucyBF
TkQgb3IgcmVwb3J0cyBhbiBlcnJvciwgZGVwZW5kaW5nIG9uCiAgIGVvZmVyci4gIE90aGVy
d2lzZSwgb25lIGNoYXJhY3RlciBpcyBjb25zdW1lZCAobGV4cHRyL2xleGxlZnQpLAogICB0
aGUgY2hhciBpcyBjb252ZXJ0ZWQgaW50byBhbiB1bnNpZ25lZCBjaGFyLCBhbmQgaXMgd3Jp
dHRlbiBpbnRvCiAgIHRoZSBwYXJhbWV0ZXIgYy4gICovCiNkZWZpbmUgRkVUQ0hfU0lOR0xF
X0NIQVIobGV4ZXIsIGMsIGVvZmVycikgICAgICAgICAgICAgICAgICBcCiAgZG8geyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg
ICBpZiAoISAobGV4ZXIpLT5sZXhsZWZ0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgICAgaWYgKChlb2ZlcnIpICE9IDApICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAobGV4ZXIpLT5hYmFuZG9uX3dp
dGhfZXJyb3IgKGVvZmVycik7ICAgICAgICAgICAgICBcCiAgICAgICAgZWxzZSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICBy
ZXR1cm4gRlNBVE9LRU5fVEtfRU5EOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAoYykgPSB0b191Y2hhciAoKihsZXhlciktPmxleHB0cisrKTsgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAobGV4ZXIpLT5sZXhsZWZ0LS07ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgfSB3aGlsZSAoMCkKCi8qIERvIHRoZSBmZXRj
aCBpbiBzdGFnZXM6IFNpbmdsZSBjaGFyLCBvY3RldCttdWx0aWJ5dGUgY2FjaGUKICAgY2hl
Y2ssIGFuZCBwb3NzaWJsZSB3aWRlIGNoYXIgZmV0Y2ggaWYgdGhlIGNhY2hlIHJlc3VsdCBp
bmRpY2F0ZXMKICAgdGhhdCB0aGUgaW5wdXQgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gYSBz
aW5nbGUgb2N0ZXQuICBUaGUgZmlyc3QKICAgZmV0Y2ggaGFuZGxlcyBlbmQtb2YtaW5wdXQg
Y2FzZXMgKGlmIHRoaXMgaGFwcGVucywgY29udHJvbCBuZXZlcgogICByZWFjaGVzIHRoZSBy
ZXN0IG9mIHRoZSBtYWNybyk7IG90aGVyd2lzZSwgaXQgcmV0dXJucyB0ZW1wX3VjaGFyCiAg
IHdoaWNoIGlzIHVzZWQgaW4gdGhlIGNhY2hlIGxvb2t1cCwgYW5kIG1heSBiZSB0aGUgc2lu
Z2xlLW9jdGV0CiAgIHJlc3VsdC4gIEEgY2FjaGUgcmVzdWx0IG9mIFdFT0YgbWVhbnMgdGhh
dCB0aGUgb2N0ZXQgaXMgbm90IGEKICAgY29tcGxldGUgc2VxdWVuY2UgYnkgaXRzZWxmLCBz
byBhIHNlY29uZCBmZXRjaCB0d2Vha3MgbGV4cHRyL2xleGxlZnQKICAgdG8gdW5kbyB0aGUg
c2luZ2xlLWNoYXItZmV0Y2ggc2lkZS1lZmZlY3RzLCBhbmQsIGRlcGVuZGluZyBvbgogICBt
YnJ0b3djIHZhbGlkL2ludmFsaWQgcmVzdWx0LCBwcm9wYWdhdGVzIGVpdGhlciB0aGUgbXVs
dGljaGFyIGZldGNoCiAgIG9yIHRoZSBzaW5nbGUtY2hhciBmZXRjaCBiYWNrIHRvIHRoZSBj
YWxsZXIuICAqLwojIGRlZmluZSBGRVRDSF9XQyhsZXhlciwgYywgd2MsIGVvZmVycikgICAg
ICAgICAgICAgICAgICAgICAgXAogIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgd2NoYXJfdCB0ZW1wX3djOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgdW5zaWduZWQgY2hh
ciB0ZW1wX3VjaGFyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKGxl
eGVyKS0+Y3VyX21iX2xlbiA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgRkVUQ0hfU0lOR0xFX0NIQVIgKChsZXhlciksIHRlbXBfdWNoYXIsIChlb2ZlcnIp
KTsgICAgICAgXAogICAgdGVtcF93YyA9IChsZXhlciktPm1icnRvd2NfY2FjaGVbdGVtcF91
Y2hhcl07ICAgICAgICAgICAgXAogICAgaWYgKHRlbXBfd2MgIT0gV0VPRikgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIChjKSAgPSB0
ZW1wX3VjaGFyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAg
ICh3YykgPSB0ZW1wX3djOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIHNpemVfdCBuYnl0ZXM7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIHRlbXBfd2Mg
PSB0ZW1wX3VjaGFyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAg
IG5ieXRlcyA9IGZldGNoX29mZnNldF93aWRlX2NoYXIgKChsZXhlciksICZ0ZW1wX3djKTsg
XAogICAgICAgICh3YykgPSB0ZW1wX3djOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgICAgIChjKSA9IG5ieXRlcyA9PSAxID8gdGVtcF91Y2hhciA6IEVP
RjsgICAgICAgICAgICAgICAgXAogICAgICAgIChsZXhlciktPmN1cl9tYl9sZW4gPSBuYnl0
ZXM7ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogIH0gd2hpbGUgKDApCgpd
XSkpCgphc3NlcnQoZjp3cml0ZShbWwovKiBHaXZlbiBhIHByZWRpY2F0ZSBuYW1lLCBmaW5k
IGl0IGluIGEgbGlzdCwgYW5kIHJlcG9ydCB0aGUgbGlzdAogICBlbnRyeSB0byB0aGUgY2Fs
bGVyLiAgSWYgdGhlIG5hbWUgaXMgbm90IHJlY29nbmlzZWQsIHRoZSBmdW5jdGlvbgogICBy
ZXR1cm5zIE5VTEwuICBUaGUgbGlzdCBlbnRyeSBpbmNsdWRlcyBhIGNoYXJjbGFzcyBzZXQg
YW5kIChpZgogICByZWxldmFudCkgYSB3aWRlLWNoYXIgZGVzY3JpcHRvciBmb3IgdGVzdGlu
ZyBmb3IgdGhlIHByZWRpY2F0ZS4KICAgTGF6eSBldmFsdWF0aW9uIGFuZCBjYWNoaW5nIGFy
ZSB1c2VkIHRvIGtlZXAgcHJvY2Vzc2luZyBjb3N0cwogICBkb3duLiAgKi8Kc3RhdGljIHBy
ZWRpY2F0ZV9lbnRyeV90ICoKZmluZF9wcmVkIChmc2FsZXhfY3R4dF90ICpsZXhlciwgY29u
c3QgY2hhciAqc3RyKQp7CiAgcHJlZGljYXRlX2VudHJ5X3QgKnBfZW50cnk7CiAgY2hhcmNs
YXNzX3QgKndvcmtfY2xhc3M7CgogIGZvciAocF9lbnRyeSA9IGxleGVyLT5wcmVkaWNhdGVz
OyBwX2VudHJ5LT5uYW1lOyBwX2VudHJ5KyspCiAgICB7CiAgICAgIGlmIChTVFJFUSAoc3Ry
LCBwX2VudHJ5LT5uYW1lKSkKICAgICAgICBicmVhazsKICAgIH0KCiAgLyogSWYgdGhlcmUg
d2FzIG5vIG1hdGNoaW5nIHByZWRpY2F0ZSBuYW1lIGZvdW5kLCByZXR1cm4gTlVMTC4gICov
CiAgaWYgKCEgcF9lbnRyeS0+bmFtZSkKICAgIHJldHVybiBOVUxMOwoKICAvKiBJcyB0aGUg
Y2hhcmNsYXNzIHBvaW50ZXIgTlVMTCBmb3IgdGhpcyBlbnRyeT8gKi8KICBpZiAocF9lbnRy
eS0+Y2xhc3MgPT0gTlVMTCkKICAgIHsKICAgICAgLyogWWVzLCBhbGxvY2F0ZSwgc2V0IHVw
IGFuZCBjYWNoZSBhIGNoYXJjbGFzcyBmb3IgdGhpcwogICAgICAgICBwcmVkaWNhdGUuICBO
b3RlIHRoYXQgdGhlIHdjaGFyX2Rlc2MgZW50cmllcyB3ZXJlIHNldCB1cCBpbgogICAgICAg
ICBmc2FsZXhfc3ludGF4ICgpLiAgKi8KICAgICAgaW50IGk7CiAgICAgIGNoYXJjbGFzc19p
bmRleF90IGluZGV4OwogICAgICB3Y3R5cGVfdCB3Y3R5cGVfZGVzYzsKCiAgICAgIHdjdHlw
ZV9kZXNjID0gcF9lbnRyeS0+d2NoYXJfZGVzYzsKICAgICAgd29ya19jbGFzcyA9IGNoYXJj
bGFzc19hbGxvYyAoKTsKICAgICAgZm9yIChpID0gMDsgaSA8IEZTQVRPS0VOX05PVENIQVI7
IGkrKykKICAgICAgICB7CiAgICAgICAgICB3Y2hhcl90IHdjOwoKICAgICAgICAgIC8qIFRy
eSBpbnRlZ2VyLT51bnNpZ25lZCBjaGFyLT53aWRlIGNoYXIgdXNpbmcgbGV4ZXIncwogICAg
ICAgICAgICAgbWJydG93Y19jYWNoZSBhcnJheSwgYW5kLCBpZiBzdWNjZXNzZnVsLCB0ZXN0
IGZvciBjbGFzcwogICAgICAgICAgICAgbWVtYmVyc2hpcCwgYW5kIHNldCB0aGUgYml0IGlu
IHRoZSBjbGFzcyBpZiB0aGUgdmFsdWUgaXMKICAgICAgICAgICAgIGEgbWVtYmVyLiAgKi8K
ICAgICAgICAgIC8qIEZJWE1FOiBpc3djdHlwZSBkZXBlbmRzIG9uIHRoZSAqY3VycmVudCog
bG9jYWxlCiAgICAgICAgICAgICAoTENfQ1RZUEUpOyB0aGlzIGJyZWFrcyB0aGUgbG9uZy10
ZXJtIGdvYWwgb2YgaGF2aW5nIGVhY2gKICAgICAgICAgICAgIGxleGVyIGluc3RhbmNlIHVz
ZSBvbmx5IHRoZSBsb2NhbGUgaW4gZm9yY2Ugd2hlbgogICAgICAgICAgICAgZnNhbGV4X3N5
bnRheCB3YXMgY2FsbGVkLiAgV2UgY2FuIGZpeCB0aGlzIGJ5IHVzaW5nCiAgICAgICAgICAg
ICBpc2FsbnVtX2wgKCkgZXRjIGhlcmUsIGJ1dCBjYXJyeWluZyBhcm91bmQgYSBmdWxsIGNv
cHkgb2YKICAgICAgICAgICAgIHRoZSBsb2NhbGUgaW4gdGhlIGxleGVyIGluc3RhbmNlIG1h
eSBiZSBleHBlbnNpdmUgb3IKICAgICAgICAgICAgIHBvc3NpYmx5IG5vbi1wb3J0YWJsZSwg
c28gaXQncyBiZWluZyBhdm9pZGVkIHdoaWxlIHRoaXMKICAgICAgICAgICAgIGNvZGUgaXMg
c3RpbGwgaW4gYW4gZXhwZXJpbWVudGFsL3Byb29mLW9mLWNvbmNlcHQKICAgICAgICAgICAg
IGZvcm0uICAqLwogICAgICAgICAgd2MgPSBsZXhlci0+bWJydG93Y19jYWNoZVtpXTsKICAg
ICAgICAgIGlmIChpc3djdHlwZSAod2MsIHdjdHlwZV9kZXNjKSkKICAgICAgICAgICAgY2hh
cmNsYXNzX3NldGJpdCAoaSwgd29ya19jbGFzcyk7CiAgICAgICAgfQoKICAgICAgLyogTWFy
ayB0aGUgY2xhc3MgYXMgY29tcGxldGVkLCBhbmQgb2J0YWluIGEgcGVyc2lzdGVudCBjbGFz
cwogICAgICAgICBwb2ludGVyLiAgKi8KICAgICAgaW5kZXggPSBjaGFyY2xhc3NfY29tcGxl
dGVkICh3b3JrX2NsYXNzKTsKICAgICAgcF9lbnRyeS0+Y2xhc3MgPSBjaGFyY2xhc3NfZ2V0
X3BvaW50ZXIgKGluZGV4KTsKCiAgICB9CgogIC8qIFJldHVybiBwcmVkaWNhdGUgZW50cnkg
dG8gdGhlIGNhbGxlci4gICovCiAgcmV0dXJuIHBfZW50cnk7Cn0KCl1dKSkKCi0tIFJlY2Vu
dGx5LWFkZGVkIG11bHRpYnl0ZSBjb2RlOiBsb25lc29tZV9sb3dlciwgY2FzZV9mb2xkZWRf
Y291bnRlcnBhcnRzCmFzc2VydChmOndyaXRlKFJhd1RleHQoInVuaWNvZGUtbG9uZXNvbWUt
bG93ZXItdGFibGUiKSwgIlxuIikpCgotLSBBZGQgaW4gQ0FTRV9GT0xERURfQlVGU0laRSBh
bmQgY2FzZV9mb2xkZWRfY291bnRlcnBhcnRzIGNvZGUKLS0gYWRkZWQgRmViL01hciAyMDE0
OyByZXZpc2VkIE1heSAyMDE0IHRvIGZpdCB3aXRoaW4gUFJPVE9fTEVYUEFSU0UKLS0gaW5m
cmFzdHJ1Y3R1cmUuCmFzc2VydChmOndyaXRlKFtbCi8qIE1heGltdW0gbnVtYmVyIG9mIHdp
ZGUgY2hhcmFjdGVycyB0aGF0IGNhbiBiZSB0aGUgY2FzZS1mb2xkZWQKICAgY291bnRlcnBh
cnRzIG9mIGEgc2luZ2xlIHdpZGUgY2hhcmFjdGVyLCBub3QgY291bnRpbmcgdGhlIGNoYXJh
Y3RlcgogICBpdHNlbGYuICBUaGlzIGlzIDEgZm9yIHRvd3VwcGVyLCAxIGZvciB0b3dsb3dl
ciwgYW5kIDEgZm9yIGVhY2gKICAgZW50cnkgaW4gbG9uZXNvbWVfbG93ZXJbXS4gICovCmVu
dW0geyBDQVNFX0ZPTERFRF9CVUZTSVpFID0gMSArIDEgKyAxOSB9OwoKXV0pKQoKYXNzZXJ0
KGY6d3JpdGUoW1sKLyogR2l2ZW4gYSB3aWRlIGNoYXJhY3RlciBjLCBhbmQgd29ya2luZyB0
byBhIHNlYXJjaCBzcGVjaWZpY2F0aW9uCiAgIHRoYXQgZGVtYW5kcyB0aGF0IGNhc2UtZm9s
ZGVkIHZhcmlhbnRzIG9mIHRoZSBjaGFyYWN0ZXIgbXVzdCBtYXRjaAogICB3aGVyZXZlciB0
aGF0IGNoYXJhY3RlciBjb3VsZCBtYXRjaCwgZ2VuZXJhdGUgYSBsaXN0IG9mIGFsbAogICBw
b3NzaWJsZSBtYXRjaCBjb3VudGVycGFydHMgdG8gdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIs
IGFuZCByZXR1cm4KICAgdGhhdCBsaXN0LCB0aGUgY2hhcmFjdGVycyB2aWEgYSBwYXJhbWV0
ZXIgcG9pbnRlciwgYW5kIHRoZSBsaXN0CiAgIGxlbmd0aCAocG9zc2libHkgMCkgdmlhIHRo
ZSBmdW5jdGlvbiByZXR1cm4gdmFsdWUuICAqLwovKiA/PyBDSEVDS01FOiBTaG91bGQgcGFy
YW1ldGVyICJjIiBpbiwgYW5kL29yICJmb2xkZWQiIG91dCwgYmUgd2ludF90PyAgKi8Kc3Rh
dGljIGludApjYXNlX2ZvbGRlZF9jb3VudGVycGFydHMgKGZzYWxleF9jdHh0X3QgKmxleGVy
LAogICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgYywKICAgICAgICAgICAgICAg
ICAgICAgICAgICB3Y2hhcl90IGZvbGRlZFtDQVNFX0ZPTERFRF9CVUZTSVpFXSkKXV0pKQph
c3NlcnQoZjp3cml0ZShSYXdUZXh0KCJjYXNlX2ZvbGRlZF9jb3VudGVycGFydHMtYm9keSIp
LCAiXG4iKSkKCi0tIFdyaXRlIG91dCBwYXJzZV9icmFja2V0X2V4cCBkZWNsYXJhdGlvbiwg
bW9kaWZpZWQgdG8gcmV0dXJuIGFuCi0tIGZzYXRva2VuIHZhbHVlLCBhbmQgdG8gaW5jbHVk
ZSBhIGxleGVyIGNvbnRleHQgYSBzaW5nbGUgaW5wdXQKLS0gcGFyYW1ldGVyLgphc3NlcnQo
Zjp3cml0ZShFZGl0ZWRUZXh0KCJwYXJzZV9icmFja2V0X2V4cC1kZWNsIiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInN0YXRpYyB0b2tlbiIsICJzdGF0aWMgZnNhdG9rZW5fdG9r
ZW5fdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICIlKHZvaWQlKSIsICIoZnNhbGV4
X2N0eHRfdCAqbGV4ZXIpIikpKQoKLS0gUmVtb3ZlIHplcm9jbGFzcyBkZWZpbml0aW9uIGZy
b20gYSBuZXN0ZWQgcGxhY2UgaW5zaWRlCi0tIHBhcnNlX2JyYWNrZXRfZXhwIGFzIHdlIG5v
dyBkZXBlbmQgb24gY2hhcmNsYXNzJ3MgZ3VhcmFudGVlIHRoYXQKLS0gY2xhc3MgaW5kZXgg
MCBpcyB0aGUgemVyb3NldC4KbG9jYWwgUGFyc2VCcmFja2V0RXhwID0gUmF3VGV4dCgicGFy
c2VfYnJhY2tldF9leHAtYm9keSIpCgotLSBDbGFzc2VzIGFyZSBub3cgb3BhcXVlLgpQYXJz
ZUJyYWNrZXRFeHAgPSBUZXh0U3Vic3QoUGFyc2VCcmFja2V0RXhwLCBbWwp7CiAgYm9vbCBp
bnZlcnQ7CiAgaW50IGMsIGMxLCBjMjsKICBjaGFyY2xhc3MgY2NsOwpdXSwgW1sKewogIGJv
b2wgaW52ZXJ0OwogIGludCBjLCBjMSwgYzI7CiAgY2hhcmNsYXNzX3QgKmNjbDsKICBtYmNz
ZXRzX3NldF90ICp3b3JrX21iYyA9IE5VTEw7CgpdXSkKCi0tIFJlcGxhY2UgZGZhZXJyb3Ig
YW5kIGRmYXdhcm4gd2l0aCBleHBsaWNpdGx5LXByb3ZpZGVkIGZ1bmN0aW9ucy4KUGFyc2VC
cmFja2V0RXhwID0gVGV4dFN1YnN0KFBhcnNlQnJhY2tldEV4cCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICIgZGZhd2FybiAiLCAgIiBsZXhlci0+d2Fybl9jbGllbnQgIiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIgZGZhZXJyb3IgIiwgIiBsZXhlci0+YWJhbmRv
bl93aXRoX2Vycm9yICIpCgotLSA/PyBUUklBTDogUmVtb3ZlICJGSVhNRTogbXVsdGlieXRl
IGNvZGUgJ3dyb25nIGluIG11bHRpcGxlIHdheXMsIGJ1dAotLSAgICAgICAgICAgICAgICAg
ICBuZXZlciB1c2VkIGluIHByYWN0aWNlLiciClBhcnNlQnJhY2tldEV4cCA9IFRleHRTdWJz
dChQYXJzZUJyYWNrZXRFeHAsIFtbCiAgICAgICAgICAgICAgICAgIC8qIFdoZW4gY2FzZSBm
b2xkaW5nIG1hcCBhIHJhbmdlLCBzYXkgW20tel0gKG9yIGV2ZW4gW00tel0pCiAgICAgICAg
ICAgICAgICAgICAgIHRvIHRoZSBwYWlyIG9mIHJhbmdlcywgW20tel0gW00tWl0uICBBbHRo
b3VnaCB0aGlzIGNvZGUKICAgICAgICAgICAgICAgICAgICAgaXMgd3JvbmcgaW4gbXVsdGlw
bGUgd2F5cywgaXQncyBuZXZlciB1c2VkIGluIHByYWN0aWNlLgogICAgICAgICAgICAgICAg
ICAgICBGSVhNRTogUmVtb3ZlIHRoaXMgKGFuZCByZWxhdGVkKSB1bnVzZWQgY29kZS4gICov
CiAgICAgICAgICAgICAgICAgIGlmICh3YyAhPSBXRU9GICYmIHdjMiAhPSBXRU9GKQogICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHdvcmtfbWJjLT5yYW5n
ZXMKICAgICAgICAgICAgICAgICAgICAgICAgPSBtYXliZV9yZWFsbG9jICh3b3JrX21iYy0+
cmFuZ2VzLCB3b3JrX21iYy0+bnJhbmdlcyArIDIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJnJhbmdlc19hbCwgc2l6ZW9mICp3b3JrX21iYy0+cmFuZ2Vz
KTsKICAgICAgICAgICAgICAgICAgICAgIHdvcmtfbWJjLT5yYW5nZXNbd29ya19tYmMtPm5y
YW5nZXNdLmJlZwogICAgICAgICAgICAgICAgICAgICAgICA9IGNhc2VfZm9sZCA/IHRvd2xv
d2VyICh3YykgOiB3YzsKICAgICAgICAgICAgICAgICAgICAgIHdvcmtfbWJjLT5yYW5nZXNb
d29ya19tYmMtPm5yYW5nZXMrK10uZW5kCiAgICAgICAgICAgICAgICAgICAgICAgID0gY2Fz
ZV9mb2xkID8gdG93bG93ZXIgKHdjMikgOiB3YzI7CgogICAgICAgICAgICAgICAgICAgICAg
aWYgKGNhc2VfZm9sZCAmJiAoaXN3YWxwaGEgKHdjKSB8fCBpc3dhbHBoYSAod2MyKSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jr
X21iYy0+cmFuZ2VzW3dvcmtfbWJjLT5ucmFuZ2VzXS5iZWcgPSB0b3d1cHBlciAod2MpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtfbWJjLT5yYW5nZXNbd29ya19tYmMtPm5y
YW5nZXMrK10uZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHRvd3VwcGVyICh3
YzIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQpd
XSwgW1sKICAgICAgICAgICAgICAgICAgLyogTWVyZWx5IHJlY29yZCByYW5nZSBhcyBnaXZl
bjsgZG9uJ3QgdHJ5IHRvIGhhbmRsZSB0aGUKICAgICAgICAgICAgICAgICAgICAgY2FzZS1m
b2xkaW5nIHZhcmlhbnRzIGhlcmUgZm9yIG5vdy4gICovCiAgICAgICAgICAgICAgICAgIGlm
ICh3YyAhPSBXRU9GICYmIHdjMiAhPSBXRU9GKQogICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgIG1iY3NldHNfYWRkX3JhbmdlKHdvcmtfbWJjLCB3Yywgd2My
KTsKCiAgICAgICAgICAgICAgICAgICAgICAvKiBGSVhNRSwgcGFydCAyOiAgU2luY2UgdGhl
IGNhbm9uaWNhbCBtZWFzdXJlIG9mIGNhc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGVx
dWl2YWxlbmNlIGlzIHVwcGVyY2FzZShBKSA9PSB1cHBlcmNhc2UoQiksIHBlcmhhcHMKICAg
ICAgICAgICAgICAgICAgICAgICAgIHdlIGNvdWxkIGRvIHRoaXMgdHJhbnNmb3JtYXRpb24g
YWJvdmUgaWYgY2FzZV9mb2xkCiAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0cnVlLi4u
IGJ1dCBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIHRocm93IGF3YXkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZm9ybWF0aW9uLiAgKi8KICAgICAgICAgICAgICAgICAgICB9Cl1d
KQoKLS0gTUJDU0VUUzogQ2hhbmdlIG11bHRpYnl0ZSBpbml0aWFsaXNhdGlvbiB0byB1c2Ug
bWJjc2V0cyBtb2R1bGUuCi0tIENoYW5nZSAid29yayIgY2hhcmNsYXNzIChjY2wpIGZyb20g
bG9jYWwgdmFyaWFibGUgdG8gZXhwbGljaXRseS1hbGxvY2F0ZWQKLS0gZHluYW1pYyBjbGFz
cyBmcm9tIGNoYXJjbGFzcy4KUGFyc2VCcmFja2V0RXhwID0gVGV4dFN1YnN0KFBhcnNlQnJh
Y2tldEV4cCwgW1sKICAvKiBXb3JrIGFyZWEgdG8gYnVpbGQgYSBtYl9jaGFyX2NsYXNzZXMu
ICAqLwogIHN0cnVjdCBtYl9jaGFyX2NsYXNzZXMgKndvcmtfbWJjOwogIHNpemVfdCBjaGFy
c19hbCwgcmFuZ2VzX2FsLCBjaF9jbGFzc2VzX2FsLCBlcXVpdnNfYWwsIGNvbGxfZWxlbXNf
YWw7CgogIGNoYXJzX2FsID0gcmFuZ2VzX2FsID0gY2hfY2xhc3Nlc19hbCA9IGVxdWl2c19h
bCA9IGNvbGxfZWxlbXNfYWwgPSAwOwogIGlmIChkZmEtPm11bHRpYnl0ZSkKICAgIHsKICAg
ICAgZGZhLT5tYmNzZXRzID0gbWF5YmVfcmVhbGxvYyAoZGZhLT5tYmNzZXRzLCBkZmEtPm5t
YmNzZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGZhLT5tYmNz
ZXRzX2FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yg
KmRmYS0+bWJjc2V0cyk7CgogICAgICAvKiBkZmEtPm11bHRpYnl0ZV9wcm9wW10gaG9sZCB0
aGUgaW5kZXggb2YgZGZhLT5tYmNzZXRzLgogICAgICAgICBXZSB3aWxsIHVwZGF0ZSBkZmEt
Pm11bHRpYnl0ZV9wcm9wW10gaW4gYWRkdG9rLCBiZWNhdXNlIHdlIGNhbid0CiAgICAgICAg
IGRlY2lkZSB0aGUgaW5kZXggaW4gZGZhLT50b2tlbnNbXS4gICovCgogICAgICAvKiBJbml0
aWFsaXplIHdvcmsgYXJlYS4gICovCiAgICAgIHdvcmtfbWJjID0gJihkZmEtPm1iY3NldHNb
ZGZhLT5ubWJjc2V0cysrXSk7CiAgICAgIG1lbXNldCAod29ya19tYmMsIDAsIHNpemVvZiAq
d29ya19tYmMpOwogICAgfQogIGVsc2UKICAgIHdvcmtfbWJjID0gTlVMTDsKCiAgbWVtc2V0
IChjY2wsIDAsIHNpemVvZiBjY2wpOwogIEZFVENIX1dDIChjLCB3YywgXygidW5iYWxhbmNl
ZCBbIikpOwogIGlmIChjID09ICdeJykKICAgIHsKICAgICAgRkVUQ0hfV0MgKGMsIHdjLCBf
KCJ1bmJhbGFuY2VkIFsiKSk7CiAgICAgIGludmVydCA9IHRydWU7CiAgICAgIGtub3duX2Jy
YWNrZXRfZXhwID0gdXNpbmdfc2ltcGxlX2xvY2FsZSAoKTsKICAgIH0KICBlbHNlCiAgICBp
bnZlcnQgPSBmYWxzZTsKXV0sIFtbCiAgaWYgKGxleGVyLT5tdWx0aWJ5dGVfbG9jYWxlKQog
ICAgewogICAgICAvKiBFbnN1cmUgd2UgaGF2ZSBzcGFjZSB0byBzdG9yZSB0aGUgbmV3IHNl
dC4gICovCiAgICAgIGxleGVyLT5tYmNzZXRzID0gbWF5YmVfcmVhbGxvYyAobGV4ZXItPm1i
Y3NldHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV4ZXItPm5t
YmNzZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZXhlci0+
bWJjc2V0c19hbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplb2Ygd29ya19tYmMpOwoKICAgICAgLyogSW5pdGlhbGl6ZSB3b3JrIGFyZWEuICAqLwog
ICAgICB3b3JrX21iYyA9IG1iY3NldHNfbmV3ICgpOwogICAgICBsZXhlci0+bWJjc2V0c1ts
ZXhlci0+bm1iY3NldHMrK10gPSB3b3JrX21iYzsKICAgIH0KCiAgY2NsID0gY2hhcmNsYXNz
X2FsbG9jICgpOwogIEZFVENIX1dDIChjLCB3YywgXygidW5iYWxhbmNlZCBbIikpOwogIGlm
IChjID09ICdeJykKICAgIHsKICAgICAgRkVUQ0hfV0MgKGMsIHdjLCBfKCJ1bmJhbGFuY2Vk
IFsiKSk7CiAgICAgIGludmVydCA9IHRydWU7CiAgICAgIGtub3duX2JyYWNrZXRfZXhwID0g
bGV4ZXItPnVzaW5nX3NpbXBsZV9sb2NhbGU7CiAgICB9CiAgZWxzZQogICAgaW52ZXJ0ID0g
ZmFsc2U7Cl1dKQoKLS0gQ2hhbmdlIGZpbmRfcHJlZCBjb2RlIHRvIHVzZSB0aGUgdHlwZWRl
ZiwgYW5kIHRvIG1lcmdlIHRoZSBmb3VuZAotLSBwcmVkaWNhdGUgc3RhdGljIGNsYXNzIGlu
dG8gdGhlIGZ1bmN0aW9uJ3MgZHluYW1pYyBjbGFzcy4gIEFsc28KLS0gcmVwbGFjZSBkZmFl
cnJvciB3aXRoIGludGVybmFsIGFiYW5kb25fd2l0aF9lcnJvci4KUGFyc2VCcmFja2V0RXhw
ID0gVGV4dFN1YnN0KFBhcnNlQnJhY2tldEV4cCwgW1sKICAgICAgICAgICAgICBpZiAoYzEg
PT0gJzonKQogICAgICAgICAgICAgICAgLyogQnVpbGQgY2hhcmFjdGVyIGNsYXNzLiAgUE9T
SVggYWxsb3dzIGNoYXJhY3RlcgogICAgICAgICAgICAgICAgICAgY2xhc3NlcyB0byBtYXRj
aCBtdWx0aWNoYXJhY3RlciBjb2xsYXRpbmcgZWxlbWVudHMsCiAgICAgICAgICAgICAgICAg
ICBidXQgdGhlIHJlZ2V4IGNvZGUgZG9lcyBub3Qgc3VwcG9ydCB0aGF0LCBzbyBkbyBub3QK
ICAgICAgICAgICAgICAgICAgIHdvcnJ5IGFib3V0IHRoYXQgcG9zc2liaWxpdHkuICAqLwog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICpjbGFzcwog
ICAgICAgICAgICAgICAgICAgID0gKGNhc2VfZm9sZCAmJiAoU1RSRVEgKHN0ciwgInVwcGVy
IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IFNUUkVRIChzdHIs
ICJsb3dlciIpKSA/ICJhbHBoYSIgOiBzdHIpOwogICAgICAgICAgICAgICAgICBjb25zdCBz
dHJ1Y3QgZGZhX2N0eXBlICpwcmVkID0gZmluZF9wcmVkIChjbGFzcyk7CiAgICAgICAgICAg
ICAgICAgIGlmICghcHJlZCkKICAgICAgICAgICAgICAgICAgICBkZmFlcnJvciAoXygiaW52
YWxpZCBjaGFyYWN0ZXIgY2xhc3MiKSk7CgogICAgICAgICAgICAgICAgICBpZiAoZGZhLT5t
dWx0aWJ5dGUgJiYgIXByZWQtPnNpbmdsZV9ieXRlX29ubHkpCiAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgLyogU3RvcmUgdGhlIGNoYXJhY3RlciBjbGFz
cyBhcyB3Y3R5cGVfdC4gICovCiAgICAgICAgICAgICAgICAgICAgICB3Y3R5cGVfdCB3dCA9
IHdjdHlwZSAoY2xhc3MpOwoKICAgICAgICAgICAgICAgICAgICAgIHdvcmtfbWJjLT5jaF9j
bGFzc2VzCiAgICAgICAgICAgICAgICAgICAgICAgID0gbWF5YmVfcmVhbGxvYyAod29ya19t
YmMtPmNoX2NsYXNzZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd29ya19tYmMtPm5jaF9jbGFzc2VzLCAmY2hfY2xhc3Nlc19hbCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKndvcmtfbWJjLT5jaF9jbGFz
c2VzKTsKICAgICAgICAgICAgICAgICAgICAgIHdvcmtfbWJjLT5jaF9jbGFzc2VzW3dvcmtf
bWJjLT5uY2hfY2xhc3NlcysrXSA9IHd0OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgIGZvciAoYzIgPSAwOyBjMiA8IE5PVENIQVI7ICsrYzIpCiAgICAgICAg
ICAgICAgICAgICAgaWYgKHByZWQtPmZ1bmMgKGMyKSkKICAgICAgICAgICAgICAgICAgICAg
IHNldGJpdCAoYzIsIGNjbCk7CiAgICAgICAgICAgICAgICB9Cl1dLCBbWwogICAgICAgICAg
ICAgIGlmIChjMSA9PSAnOicpCiAgICAgICAgICAgICAgICAvKiBGaW5kIGFuZCBtZXJnZSBu
YW1lZCBjaGFyYWN0ZXIgY2xhc3MuICBQT1NJWCBhbGxvd3MKICAgICAgICAgICAgICAgICAg
IGNoYXJhY3RlciBjbGFzc2VzIHRvIG1hdGNoIG11bHRpY2hhcmFjdGVyIGNvbGxhdGluZwog
ICAgICAgICAgICAgICAgICAgZWxlbWVudHMsIGJ1dCB0aGUgcmVnZXggY29kZSBkb2VzIG5v
dCBzdXBwb3J0IHRoYXQsCiAgICAgICAgICAgICAgICAgICBzbyBkbyBub3Qgd29ycnkgYWJv
dXQgdGhhdCBwb3NzaWJpbGl0eS4gICovCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgIGNoYXIgY29uc3QgKmNsYXNzOwogICAgICAgICAgICAgICAgICBwcmVkaWNhdGVf
ZW50cnlfdCAqcHJlZDsKCiAgICAgICAgICAgICAgICAgIGNsYXNzID0gc3RyOwogICAgICAg
ICAgICAgICAgICBpZiAoY2FzZV9mb2xkICYmIChTVFJFUSAoY2xhc3MsICJ1cHBlciIpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgU1RSRVEgKGNsYXNzLCAi
bG93ZXIiKSkpCiAgICAgICAgICAgICAgICAgICAgY2xhc3MgPSAiYWxwaGEiOwogICAgICAg
ICAgICAgICAgICBwcmVkID0gZmluZF9wcmVkIChsZXhlciwgY2xhc3MpOwogICAgICAgICAg
ICAgICAgICBpZiAoISBwcmVkKQogICAgICAgICAgICAgICAgICAgIGxleGVyLT5hYmFuZG9u
X3dpdGhfZXJyb3IgKF8oImludmFsaWQgY2hhcmFjdGVyIGNsYXNzIikpOwogICAgICAgICAg
ICAgICAgICBjaGFyY2xhc3NfdW5pb25zZXQgKHByZWQtPmNsYXNzLCBjY2wpOwoKICAgICAg
ICAgICAgICAgICAgLyogRG9lcyB0aGlzIGNsYXNzIGhhdmUgYSB3aWRlLWNoYXIgdHlwZSBk
ZXNjcmlwdG9yPyAqLwogICAgICAgICAgICAgICAgICBpZiAobGV4ZXItPm11bHRpYnl0ZV9s
b2NhbGUgJiYgcHJlZC0+bWF5X2JlX211bHRpYnl0ZSkKICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICBtYmNzZXRzX2FkZF9jbGFzcyh3b3JrX21iYywgcHJl
ZC0+d2NoYXJfZGVzYyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fQpdXSkKCi0tIE5vdyBoYXZlIGEgZmxhZywgInVzaW5nX3NpbXBsZV9sb2NhbGUiOyBhbHNv
IHVzZSBzZXRiaXRfcmFuZ2UuClBhcnNlQnJhY2tldEV4cCA9IFRleHRTdWJzdChQYXJzZUJy
YWNrZXRFeHAsIFtbCiAgICAgICAgICAgICAgZWxzZSBpZiAodXNpbmdfc2ltcGxlX2xvY2Fs
ZSAoKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZm9yIChjMSA9IGM7
IGMxIDw9IGMyOyBjMSsrKQogICAgICAgICAgICAgICAgICAgIHNldGJpdCAoYzEsIGNjbCk7
CiAgICAgICAgICAgICAgICAgIGlmIChjYXNlX2ZvbGQpCiAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgaW50IHVjID0gdG91cHBlciAoYyk7CiAgICAgICAg
ICAgICAgICAgICAgICBpbnQgdWMyID0gdG91cHBlciAoYzIpOwogICAgICAgICAgICAgICAg
ICAgICAgZm9yIChjMSA9IDA7IGMxIDwgTk9UQ0hBUjsgYzErKykKICAgICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIGludCB1YzEgPSB0b3VwcGVy
IChjMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVjIDw9IHVjMSAmJiB1YzEg
PD0gdWMyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Yml0IChjMSwgY2NsKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KXV0sIFtb
CiAgICAgICAgICAgICAgZWxzZSBpZiAobGV4ZXItPnVzaW5nX3NpbXBsZV9sb2NhbGUpCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGNoYXJjbGFzc19zZXRiaXRfcmFu
Z2UgKGMsIGMyLCBjY2wpOwogICAgICAgICAgICAgICAgICBpZiAoY2FzZV9mb2xkKQogICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGludCB1YyA9IHRvdXBw
ZXIgKGMpOwogICAgICAgICAgICAgICAgICAgICAgaW50IHVjMiA9IHRvdXBwZXIgKGMyKTsK
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoYzEgPSAwOyBjMSA8IE5PVENIQVI7IGMxKysp
CiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgdWMxID0gdG91cHBlciAoYzEpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1
YyA8PSB1YzEgJiYgdWMxIDw9IHVjMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXJjbGFzc19zZXRiaXQgKGMxLCBjY2wpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgfQpdXSkKCi0tIEtlZXAgY3JhY2tpbmcgZG93biBvbiBNQl9D
VVJfTUFYLCBjYXNlLWJ5LWNhc2UKUGFyc2VCcmFja2V0RXhwID0gVGV4dFN1YnN0KFBhcnNl
QnJhY2tldEV4cCwgW1sKICAgICAgaWYgKCFkZmEtPm11bHRpYnl0ZSkKICAgICAgICB7CiAg
ICAgICAgICBpZiAoY2FzZV9mb2xkKQogICAgICAgICAgICBzZXRiaXRfY2FzZV9mb2xkX2Mg
KGMsIGNjbCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHNldGJpdCAoYywgY2NsKTsK
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KXV0sIFtbCiAgICAgIGlmIChsZXhlci0+
dW5pYnl0ZV9sb2NhbGUpCiAgICAgICAgewogICAgICAgICAgaWYgKGNhc2VfZm9sZCkKICAg
ICAgICAgICAgc2V0Yml0X2Nhc2VfZm9sZF9jIChjLCBjY2wpOwogICAgICAgICAgZWxzZQog
ICAgICAgICAgICBjaGFyY2xhc3Nfc2V0Yml0IChjLCBjY2wpOwogICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgfQpdXSkKUGFyc2VCcmFja2V0RXhwID0gVGV4dFN1YnN0KFBhcnNlQnJh
Y2tldEV4cCwgW1sKICAgICAgICAgIGlmIChjMiAhPSAnXScpCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBpZiAoYzIgPT0gJ1xcJyAmJiAoc3ludGF4X2JpdHMgJiBSRV9CQUNLU0xB
U0hfRVNDQVBFX0lOX0xJU1RTKSkKICAgICAgICAgICAgICAgIEZFVENIX1dDIChjMiwgd2My
LCBfKCJ1bmJhbGFuY2VkIFsiKSk7CgogICAgICAgICAgICAgIGlmIChkZmEtPm11bHRpYnl0
ZSkKICAgICAgICAgICAgICAgIHsKXV0sIFtbCiAgICAgICAgICBpZiAoYzIgIT0gJ10nKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKGMyID09ICdcXCcgJiYgKHN5bnRheF9i
aXRzICYgUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUykpCiAgICAgICAgICAgICAgICBG
RVRDSF9XQyAoYzIsIHdjMiwgXygidW5iYWxhbmNlZCBbIikpOwoKICAgICAgICAgICAgICBp
ZiAobGV4ZXItPm11bHRpYnl0ZV9sb2NhbGUpCiAgICAgICAgICAgICAgICB7Cl1dKQoKLS0g
SGFjayBhcm91bmQgd2l0aCBDQVNFX0ZPTERFRF9CVUZTSVpFIGNvZGUgYnkgaGFuZApQYXJz
ZUJyYWNrZXRFeHAgPSBUZXh0U3Vic3QoUGFyc2VCcmFja2V0RXhwLCBbWwogICAgICAgICAg
d2NoYXJfdCBmb2xkZWRbQ0FTRV9GT0xERURfQlVGU0laRSArIDFdOwogICAgICAgICAgaW50
IGk7CiAgICAgICAgICBpbnQgbiA9IChjYXNlX2ZvbGQgPyBjYXNlX2ZvbGRlZF9jb3VudGVy
cGFydHMgKHdjLCBmb2xkZWQgKyAxKSArIDEKICAgICAgICAgICAgICAgICAgIDogMSk7CiAg
ICAgICAgICBmb2xkZWRbMF0gPSB3YzsKICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBp
KyspCiAgICAgICAgICAgIGlmICghc2V0Yml0X3djIChmb2xkZWRbaV0sIGNjbCkpCiAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgd29ya19tYmMtPmNoYXJzCiAgICAgICAgICAg
ICAgICAgID0gbWF5YmVfcmVhbGxvYyAod29ya19tYmMtPmNoYXJzLCB3b3JrX21iYy0+bmNo
YXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGFyc19hbCwgc2l6
ZW9mICp3b3JrX21iYy0+Y2hhcnMpOwogICAgICAgICAgICAgICAgd29ya19tYmMtPmNoYXJz
W3dvcmtfbWJjLT5uY2hhcnMrK10gPSBmb2xkZWRbaV07CiAgICAgICAgICAgICAgfQpdXSwg
W1sKICAgICAgICAgIHdjaGFyX3QgZm9sZGVkW0NBU0VfRk9MREVEX0JVRlNJWkUgKyAxXTsK
ICAgICAgICAgIGludCBuID0gMTsKCiAgICAgICAgICBmb2xkZWRbMF0gPSB3YzsKICAgICAg
ICAgIGlmIChjYXNlX2ZvbGQpCiAgICAgICAgICAgIG4gKz0gY2FzZV9mb2xkZWRfY291bnRl
cnBhcnRzIChsZXhlciwgd2MsICZmb2xkZWRbMV0pOwogICAgICAgICAgbWJjc2V0c19hZGRf
d2NoYXJfbGlzdCAod29ya19tYmMsIG4sIGZvbGRlZCk7Cl1dKQoKLS0gQ29udmVydCBtb2R1
bGUtZ2xvYmFsIHZhcmlhYmxlIHJlZmVyZW5jZXMgdG8gaW5zdGFuY2UtbG9jYWwgcmVmcy4K
UGFyc2VCcmFja2V0RXhwID0gVGV4dFN1YnN0KFBhcnNlQnJhY2tldEV4cCwgW1sKICAgICAg
ICAgICAgICAgICAgRkVUQ0hfV0MgKGMsIHdjLCBfKCJ1bmJhbGFuY2VkIFsiKSk7CiAgICAg
ICAgICAgICAgICAgIGlmICgoYyA9PSBjMSAmJiAqbGV4cHRyID09ICddJykgfHwgbGV4bGVm
dCA9PSAwKQpdXSwgW1sKICAgICAgICAgICAgICAgICAgRkVUQ0hfV0MgKGMsIHdjLCBfKCJ1
bmJhbGFuY2VkIFsiKSk7CiAgICAgICAgICAgICAgICAgIGlmICgoYyA9PSBjMSAmJiAqbGV4
ZXItPmxleHB0ciA9PSAnXScpCiAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbGV4ZXIt
PmxleGxlZnQgPT0gMCkKXV0pClBhcnNlQnJhY2tldEV4cCA9IFRleHRTdWJzdChQYXJzZUJy
YWNrZXRFeHAsIFtbCiAgICAgICAgICAvKiBJbiB0aGUgY2FzZSBbeC1dLCB0aGUgLSBpcyBh
biBvcmRpbmFyeSBoeXBoZW4sCiAgICAgICAgICAgICB3aGljaCBpcyBsZWZ0IGluIGMxLCB0
aGUgbG9va2FoZWFkIGNoYXJhY3Rlci4gICovCiAgICAgICAgICBsZXhwdHIgLT0gY3VyX21i
X2xlbjsKICAgICAgICAgIGxleGxlZnQgKz0gY3VyX21iX2xlbjsKXV0sIFtbCiAgICAgICAg
ICAvKiBJbiB0aGUgY2FzZSBbeC1dLCB0aGUgLSBpcyBhbiBvcmRpbmFyeSBoeXBoZW4sCiAg
ICAgICAgICAgICB3aGljaCBpcyBsZWZ0IGluIGMxLCB0aGUgbG9va2FoZWFkIGNoYXJhY3Rl
ci4gICovCiAgICAgICAgICBsZXhlci0+bGV4cHRyICAtPSBsZXhlci0+Y3VyX21iX2xlbjsK
ICAgICAgICAgIGxleGVyLT5sZXhsZWZ0ICs9IGxleGVyLT5jdXJfbWJfbGVuOwpdXSkKClBh
cnNlQnJhY2tldEV4cCA9IFRleHRTdWJzdChQYXJzZUJyYWNrZXRFeHAsIFs9WwogICAgICAg
ICAgLyogQSBicmFja2V0IGV4cHJlc3Npb24gbGlrZSBbYS1bLmFhLl1dIG1hdGNoZXMgYW4g
dW5rbm93biBzZXQuCiAgICAgICAgICAgICBUcmVhdCBpdCBsaWtlIFstYVsuYWEuXV0gd2hp
bGUgcGFyc2luZyBpdCwgYW5kCiAgICAgICAgICAgICByZW1lbWJlciB0aGF0IHRoZSBzZXQg
aXMgdW5rbm93bi4gICovCiAgICAgICAgICBpZiAoYzIgPT0gJ1snICYmICpsZXhwdHIgPT0g
Jy4nKQpdPV0sIFs9WwogICAgICAgICAgLyogQSBicmFja2V0IGV4cHJlc3Npb24gbGlrZSBb
YS1bLmFhLl1dIG1hdGNoZXMgYW4gdW5rbm93bgogICAgICAgICAgICAgc2V0LiAgVHJlYXQg
aXQgbGlrZSBbLWFbLmFhLl1dIHdoaWxlIHBhcnNpbmcgaXQsIGFuZAogICAgICAgICAgICAg
cmVtZW1iZXIgdGhhdCB0aGUgc2V0IGlzIHVua25vd24uICAqLwogICAgICAgICAgaWYgKGMy
ID09ICdbJyAmJiAqbGV4ZXItPmxleHB0ciA9PSAnLicpCl09XSkKClBhcnNlQnJhY2tldEV4
cCA9IFRleHRTdWJzdChQYXJzZUJyYWNrZXRFeHAsIFtbCiAgaWYgKGRmYS0+bXVsdGlieXRl
KQogICAgewogICAgICBzdGF0aWMgY2hhcmNsYXNzIHplcm9jbGFzczsKICAgICAgd29ya19t
YmMtPmludmVydCA9IGludmVydDsKICAgICAgd29ya19tYmMtPmNzZXQgPSBlcXVhbCAoY2Ns
LCB6ZXJvY2xhc3MpID8gLTEgOiBjaGFyY2xhc3NfaW5kZXggKGNjbCk7CiAgICAgIHJldHVy
biBNQkNTRVQ7CiAgICB9CgogIGlmIChpbnZlcnQpCiAgICB7CiAgICAgIGFzc2VydCAoIWRm
YS0+bXVsdGlieXRlKTsKICAgICAgbm90c2V0IChjY2wpOwogICAgICBpZiAoc3ludGF4X2Jp
dHMgJiBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUpCiAgICAgICAgY2xyYml0IChlb2xieXRl
LCBjY2wpOwogICAgfQoKICByZXR1cm4gQ1NFVCArIGNoYXJjbGFzc19pbmRleCAoY2NsKTsK
XV0sIFtbCiAgaWYgKGxleGVyLT5tdWx0aWJ5dGVfbG9jYWxlKQogICAgewogICAgICBtYmNz
ZXRzX3NldF9tYXRjaF9zZW5zZSAod29ya19tYmMsIGludmVydCk7CiAgICAgIG1iY3NldHNf
cmVjZWl2ZV9pbmNvbXBsZXRlX2NoYXJjbGFzcyAod29ya19tYmMsIGNjbCk7CiAgICAgIG1i
Y3NldHNfY29tcGxldGVkICh3b3JrX21iYyk7CiAgICAgIHJldHVybiBNQkNTRVQ7CiAgICB9
CgogIGlmIChpbnZlcnQpCiAgICB7CiAgICAgIGNoYXJjbGFzc19ub3RzZXQgKGNjbCk7CiAg
ICAgIGlmIChzeW50YXhfYml0cyAmIFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSkKICAgICAg
ICBjaGFyY2xhc3NfY2xyYml0IChlb2xieXRlLCBjY2wpOwogICAgfQoKICByZXR1cm4gQ1NF
VCArIGNoYXJjbGFzc19jb21wbGV0ZWQgKGNjbCk7Cl1dKQoKLS0gUmV3cml0ZSB0b2tlbiBy
ZWZlcmVuY2VzIHRvIGhhdmUgZXhwbGljaXQgRlNBVE9LRU5fIHByZWZpeGVzLgpQYXJzZUJy
YWNrZXRFeHAgPSBGU0FUb2tlblN1YnN0KFBhcnNlQnJhY2tldEV4cCkKCi0tIFJld3JpdGUg
cmVmZXJlbmNlcyB0byB2YXJpYWJsZXMgbW92ZWQgaW50byBsZXhlciBjb250ZXh0LgotLSBU
cnkgcGF0dGVybiBzZWFyY2gvcmVwbGFjZSBmb3IgdGhlc2UgdmFyaWFibGVzOyB0aGlzIG1h
eSBjYXVzZQotLSBjb2xsYXRlcmFsIGRhbWFnZSwgYnV0IHRoZSBhbHRlcm5hdGl2ZSBpcyB0
ZWRpb3VzLgpmb3IgXywgS2V5d29yZCBpbiBpcGFpcnN7ImNhc2VfZm9sZCIsICJzeW50YXhf
Yml0cyIsICJlb2xieXRlIiwgImRvdGNsYXNzIn0gZG8KICAgUGFyc2VCcmFja2V0RXhwID0g
UGFyc2VCcmFja2V0RXhwOmdzdWIoIihbXiV3X10pIiAuLiBLZXl3b3JkIC4uICIoW14ld19d
KSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMWxleGVyLT4i
IC4uIEtleXdvcmQgLi4gIiUyIikKZW5kClBhcnNlQnJhY2tldEV4cCA9IFBhcnNlQnJhY2tl
dEV4cDpnc3ViKCIgIEZFVENIX1dDICUoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIiAgRkVUQ0hfV0MgKGxleGVyLCAiKQphc3NlcnQoZjp3cml0ZShQYXJz
ZUJyYWNrZXRFeHAsICJcbiIpKQoKLS0gTGV4IGRlY2wgYW5kIGJvZHk7IGxvdHMgbW9yZSBs
ZXhlci0+IGVkaXRzIGluIHRoZSBib2R5Li4uCmFzc2VydChmOndyaXRlKERlY2xzWyJsZXgi
XSkpCmxvY2FsIExleEJvZHkgPSBSYXdUZXh0KCJsZXgtYm9keSIpCgotLSBXZSBzZXQgdXAg
c3RhdGljICJsZXR0ZXJzIiBhbmQgIm5vdGxldHRlcnMiIGNsYXNzZXMgKGFuZCBhc3NvY2lh
dGVkCi0tIGluZGljZXMpIGluIGZzYWxleF9zeW50YXgsIHNvIHRoZSBjb2RlIGhlcmUgY2Fu
IGJlIG11Y2gsIG11Y2ggc2ltcGxlci4KLS0gTm90ZSAoYWdhaW4pIHRoYXQgImxldHRlcnMi
IGlzIGEgcm90dGVuIG5hbWUgZm9yIElTX1dPUkRfQ09OU1RJVFVFTlQKLS0gY2hhcmFjdGVy
czogaXNhbG51bSgpIHBsdXMgJ18nLCBidXQgdGhhdCdzIGhvdyBsZXR0ZXJzL25vdGxldHRl
cnMgaXMKLS0gc2V0IHVwLiAgV2UgYWxzbyByZW1vdmUgdmFyaWFibGVzIGMyIGFuZCBjY2wg
ZnJvbSBMZXhCb2R5LiAgRmluYWxseSwKLS0gd2UgdGVzdCBzeW50YXhfaW5pdGlhbGlzZWQg
ZmlvcnN0LCBhcyBsZWF2aW5nIHRoaXMgdW5zZXQgaXMgYSBmYXRhbAotLSBlcnJvci4KTGV4
Qm9keSA9IFRleHRTdWJzdChMZXhCb2R5LCBbWwp7CiAgaW50IGMsIGMyOwogIGJvb2wgYmFj
a3NsYXNoID0gZmFsc2U7CiAgY2hhcmNsYXNzIGNjbDsKICBpbnQgaTsKXV0sIFtbCnsKICBp
bnQgYzsKICBib29sIGJhY2tzbGFzaCA9IGZhbHNlOwogIGludCBpOwogIHByZWRpY2F0ZV9l
bnRyeV90ICpwcmVkaWNhdGU7CiAgY2hhcmNsYXNzX3QgKndvcmtfY2xhc3M7CiAgY2hhcmNs
YXNzX2luZGV4X3QgY2xhc3NfaW5kZXg7CiAgbWJjc2V0c19zZXRfdCAqd29ya19tYmM7CiAg
Ym9vbCBpbnZlcnQ7CgogIC8qIEVuc3VyZSB0aGF0IHN5bnRheCAoKSBoYXMgYmVlbiBjYWxs
ZWQgb24gdGhpcyBsZXhlciBpbnN0YW5jZTsgbWFueQogICAgIHRoaW5ncyB3aWxsIGZhaWwg
aWYgdGhpcyBpc24ndCBkb25lLiAgKi8KICBhc3NlcnQgKGxleGVyLT5zeW50YXhfaW5pdGlh
bGlzZWQpOwpdXSkKLS0gUmVwbGFjZSBkZmFlcnJvciBhbmQgZGZhd2FybiB3aXRoIGV4cGxp
Y2l0bHktcHJvdmlkZWQgZnVuY3Rpb25zLgpMZXhCb2R5ID0gTGV4Qm9keTpnc3ViKCIgZGZh
d2FybiAiLCAiIGxleGVyLT53YXJuX2NsaWVudCAiKQpMZXhCb2R5ID0gTGV4Qm9keTpnc3Vi
KCIgZGZhZXJyb3IgIiwgIiBsZXhlci0+YWJhbmRvbl93aXRoX2Vycm9yICIpCgotLSBEZWFs
IHdpdGggc29tZSBlYXJseSBjYXNlcyB3aGVyZSBzdGF0aWMgdmFycyBhcmUgbm93IGluIGxl
eGVyIHN0YXRlCkxleEJvZHkgPSBUZXh0U3Vic3QoTGV4Qm9keSwgW1sKICBmb3IgKGkgPSAw
OyBpIDwgMjsgKytpKQogICAgewogICAgICBGRVRDSF9XQyAoYywgd2N0b2ssIE5VTEwpOwoK
ICAgICAgc3dpdGNoIChjKQogICAgICAgIHsKICAgICAgICBjYXNlICdcXCc6CiAgICAgICAg
ICBpZiAoYmFja3NsYXNoKQogICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOwogICAgICAg
ICAgaWYgKGxleGxlZnQgPT0gMCkKXV0sIFtbCiAgZm9yIChpID0gMDsgaSA8IDI7ICsraSkK
ICAgIHsKICAgICAgRkVUQ0hfV0MgKGMsIGxleGVyLT53Y3RvaywgTlVMTCk7CgogICAgICBz
d2l0Y2ggKGMpCiAgICAgICAgewogICAgICAgIGNhc2UgJ1xcJzoKICAgICAgICAgIGlmIChi
YWNrc2xhc2gpCiAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CiAgICAgICAgICBpZiAo
bGV4ZXItPmxleGxlZnQgPT0gMCkKXV0pCgotLSBNYWtlICJub3QtUkVfTk9fR05VX09QVFMi
IG1vcmUgcmVhZGFibGUgYnkgdXNpbmcgYSBkaXJlY3QgZmxhZyB2YXJpYWJsZS4KTGV4Qm9k
eSA9IFRleHRTdWJzdChMZXhCb2R5LAogICAgICAgICAgICAgICAgICAgICIhKHN5bnRheF9i
aXRzICYgUkVfTk9fR05VX09QUykiLAogICAgICAgICAgICAgICAgICAgICJsZXhlci0+cmVf
Z251X29wcyIpCgotLSBIYW5kbGUgIlxzIiBhbmQgIlxTIiBpbiB0aGUgc2FtZSBmYXNoaW9u
IGFzICJcdyIgYW1kICJcVyIuICBIb3dldmVyLAotLSBtdWx0aWJ5dGUgaXNzdWVzIGFyZSBt
b3JlIG9mIGEgZGlyZWN0IGlzc3VlIGluIHRoZSBjb2RlLgpMZXhCb2R5ID0gVGV4dFN1YnN0
KExleEJvZHksIFs9PVsKICAgICAgICBjYXNlICdzJzoKICAgICAgICBjYXNlICdTJzoKICAg
ICAgICAgIGlmICghYmFja3NsYXNoIHx8IChzeW50YXhfYml0cyAmIFJFX05PX0dOVV9PUFMp
KQogICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOwogICAgICAgICAgaWYgKCFkZmEtPm11
bHRpYnl0ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHplcm9zZXQgKGNjbCk7CiAg
ICAgICAgICAgICAgZm9yIChjMiA9IDA7IGMyIDwgTk9UQ0hBUjsgKytjMikKICAgICAgICAg
ICAgICAgIGlmIChpc3NwYWNlIChjMikpCiAgICAgICAgICAgICAgICAgIHNldGJpdCAoYzIs
IGNjbCk7CiAgICAgICAgICAgICAgaWYgKGMgPT0gJ1MnKQogICAgICAgICAgICAgICAgbm90
c2V0IChjY2wpOwogICAgICAgICAgICAgIGxhc3RzdGFydCA9IGZhbHNlOwogICAgICAgICAg
ICAgIHJldHVybiBsYXN0dG9rID0gQ1NFVCArIGNoYXJjbGFzc19pbmRleCAoY2NsKTsKICAg
ICAgICAgICAgfQoKI2RlZmluZSBQVVNIX0xFWF9TVEFURShzKQkJCVwKICBkbwkJCQkJCVwK
ICAgIHsJCQkJCQlcCiAgICAgIGNoYXIgY29uc3QgKmxleHB0cl9zYXZlZCA9IGxleHB0cjsJ
XAogICAgICBzaXplX3QgbGV4bGVmdF9zYXZlZCA9IGxleGxlZnQ7CQlcCiAgICAgIGxleHB0
ciA9IChzKTsJCQkJXAogICAgICBsZXhsZWZ0ID0gc3RybGVuIChsZXhwdHIpCgojZGVmaW5l
IFBPUF9MRVhfU1RBVEUoKQkJCQlcCiAgICAgIGxleHB0ciA9IGxleHB0cl9zYXZlZDsJCQlc
CiAgICAgIGxleGxlZnQgPSBsZXhsZWZ0X3NhdmVkOwkJCVwKICAgIH0JCQkJCQlcCiAgd2hp
bGUgKDApCgogICAgICAgICAgLyogRklYTUU6IHNlZSBpZiBvcHRpbWl6aW5nIHRoaXMsIGFz
IGlzIGRvbmUgd2l0aCBBTllDSEFSIGFuZAogICAgICAgICAgICAgYWRkX3V0ZjhfYW55Y2hh
ciwgbWFrZXMgc2Vuc2UuICAqLwoKICAgICAgICAgIC8qIFxzIGFuZCBcUyBhcmUgZG9jdW1l
bnRlZCB0byBiZSBlcXVpdmFsZW50IHRvIFtbOnNwYWNlOl1dIGFuZAogICAgICAgICAgICAg
W15bOnNwYWNlOl1dIHJlc3BlY3RpdmVseSwgc28gdGVsbCB0aGUgbGV4ZXIgdG8gcHJvY2Vz
cyB0aG9zZQogICAgICAgICAgICAgc3RyaW5ncywgZWFjaCBtaW51cyBpdHMgImFscmVhZHkg
cHJvY2Vzc2VkIiAnWycuICAqLwogICAgICAgICAgUFVTSF9MRVhfU1RBVEUgKGMgPT0gJ3Mn
ID8gIls6c3BhY2U6XV0iIDogIl5bOnNwYWNlOl1dIik7CgogICAgICAgICAgbGFzdHRvayA9
IHBhcnNlX2JyYWNrZXRfZXhwICgpOwoKICAgICAgICAgIFBPUF9MRVhfU1RBVEUgKCk7Cgog
ICAgICAgICAgbGFzdHN0YXJ0ID0gZmFsc2U7CiAgICAgICAgICByZXR1cm4gbGFzdHRvazsK
XT09XSwgWz09WwogICAgICAgIGNhc2UgJ3MnOgogICAgICAgIGNhc2UgJ1MnOgogICAgICAg
ICAgIC8qICJccyIgPT0gIltbOnNwYWNlOl1dIjsgIlxTIiA9PSAiW15bOnNwYWNlOl1dIi4g
ICovCiAgICAgICAgICBpZiAoISAoYmFja3NsYXNoICYmIGxleGVyLT5yZV9nbnVfb3BzKSkK
ICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKICAgICAgICAgIGxleGVyLT5sYXN0c3Rh
cnQgPSBmYWxzZTsKICAgICAgICAgIGludmVydCA9IGMgPT0gJ1MnOwogICAgICAgICAgcHJl
ZGljYXRlID0gZmluZF9wcmVkIChsZXhlciwgInNwYWNlIik7CiAgICAgICAgICBpZiAoYyA9
PSAncycpCiAgICAgICAgICAgIGNsYXNzX2luZGV4ID0gY2hhcmNsYXNzX2dldF9pbmRleCAo
cHJlZGljYXRlLT5jbGFzcyk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAvKiBJbnZlcnQgdGhlIHByZWRpY2F0ZSBjbGFzcyBpbiBhIHdvcmsgY2xhc3Mu
ICAqLwogICAgICAgICAgICAgIHdvcmtfY2xhc3MgPSBjaGFyY2xhc3NfYWxsb2MgKCk7CiAg
ICAgICAgICAgICAgY2hhcmNsYXNzX2NvcHlzZXQgKHByZWRpY2F0ZS0+Y2xhc3MsIHdvcmtf
Y2xhc3MpOwogICAgICAgICAgICAgIGNoYXJjbGFzc19ub3RzZXQgKHdvcmtfY2xhc3MpOwog
ICAgICAgICAgICAgIGNsYXNzX2luZGV4ID0gY2hhcmNsYXNzX2NvbXBsZXRlZCAod29ya19j
bGFzcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChsZXhlci0+dW5pYnl0ZV9sb2Nh
bGUpCiAgICAgICAgICAgIHJldHVybiBsZXhlci0+bGFzdHRvayA9IEZTQVRPS0VOX1RLX0NT
RVQgKyBjbGFzc19pbmRleDsKCiAgICAgICAgICAvKiBGSVhNRTogc2VlIGlmIG9wdGltaXpp
bmcgdGhpcywgYXMgaXMgZG9uZSB3aXRoIEFOWUNIQVIgYW5kCiAgICAgICAgICAgICBhZGRf
dXRmOF9hbnljaGFyLCBtYWtlcyBzZW5zZS4gICovCgogICAgICAgICAgLyogTXVsdGlieXRl
IGxvY2FsZTogIEZpbGwgb3V0IGFuIGVudGlyZSBzZXQgZGVzY3JpcHRpb24uICAqLwogICAg
ICAgICAgbGV4ZXItPm1iY3NldHMgPSBtYXliZV9yZWFsbG9jIChsZXhlci0+bWJjc2V0cywg
bGV4ZXItPm5tYmNzZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmbGV4ZXItPm1iY3NldHNfYWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVvZiB3b3JrX21iYyk7CiAgICAgICAgICB3b3JrX21iYyA9
IG1iY3NldHNfbmV3ICgpOwogICAgICAgICAgbGV4ZXItPm1iY3NldHNbbGV4ZXItPm5tYmNz
ZXRzKytdID0gd29ya19tYmM7CiAgICAgICAgICBtYmNzZXRzX3NldF9tYXRjaF9zZW5zZSAo
d29ya19tYmMsIGludmVydCk7CiAgICAgICAgICBtYmNzZXRzX2FkZF9jbGFzcyAod29ya19t
YmMsIHByZWRpY2F0ZS0+d2NoYXJfZGVzYyk7CgogICAgICAgICAgLyogPz8gUkVWSUVXTUU6
ICJpbnZlcnQiIGluIHBhcnNlX2JyYWNrZXRfZXhwIGxlYWRzIHRvIEJBQ0tSRUYKICAgICAg
ICAgICAgICg9PSAidGhpcyBpcyB0b28gaGFyZCBmb3IgbWUiKSB0b2tlbiB2aWEga25vd25f
YnJhY2tldF9leHAKICAgICAgICAgICAgIGZsYWcuICovCiAgICAgICAgICBpZiAoKGMgPT0g
J1MnKSAmJiAhbGV4ZXItPnVzaW5nX3NpbXBsZV9sb2NhbGUpCiAgICAgICAgICAgIHJldHVy
biBsZXhlci0+bGFzdHRvayA9IEZTQVRPS0VOX1RLX0JBQ0tSRUY7CiAgICAgICAgICBlbHNl
CiAgICAgICAgICAgIHJldHVybiBsZXhlci0+bGFzdHRvayA9IEZTQVRPS0VOX1RLX01CQ1NF
VDsKXT09XSkKCkxleEJvZHkgPSBUZXh0U3Vic3QoTGV4Qm9keSwgW1sKICAgICAgICBjYXNl
ICd3JzoKICAgICAgICBjYXNlICdXJzoKICAgICAgICAgIGlmICghYmFja3NsYXNoIHx8IChz
eW50YXhfYml0cyAmIFJFX05PX0dOVV9PUFMpKQogICAgICAgICAgICBnb3RvIG5vcm1hbF9j
aGFyOwogICAgICAgICAgemVyb3NldCAoY2NsKTsKICAgICAgICAgIGZvciAoYzIgPSAwOyBj
MiA8IE5PVENIQVI7ICsrYzIpCiAgICAgICAgICAgIGlmIChJU19XT1JEX0NPTlNUSVRVRU5U
IChjMikpCiAgICAgICAgICAgICAgc2V0Yml0IChjMiwgY2NsKTsKICAgICAgICAgIGlmIChj
ID09ICdXJykKICAgICAgICAgICAgbm90c2V0IChjY2wpOwogICAgICAgICAgbGFzdHN0YXJ0
ID0gZmFsc2U7CiAgICAgICAgICByZXR1cm4gbGFzdHRvayA9IENTRVQgKyBjaGFyY2xhc3Nf
aW5kZXggKGNjbCk7Cl1dLApbPT1bCiAgICAgICAgIGNhc2UgJ3cnOgogICAgICAgICBjYXNl
ICdXJzoKICAgICAgICAgICAvKiBDYW4gbWVhbiAiW19bOmFsbnVtOl1dIiAoXHcpIG9yIGl0
cyBpbnZlcnNlIChcVykuICAqLwogICAgICAgICAgIGlmICghIChiYWNrc2xhc2ggJiYgbGV4
ZXItPnJlX2dudV9vcHMpKQogICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKICAgICAg
ICAgICBsZXhlci0+bGFzdHN0YXJ0ID0gZmFsc2U7CiAgICAgICAgICAgcHJlZGljYXRlID0g
ZmluZF9wcmVkIChsZXhlciwgImFsbnVtIik7CiAgICAgICAgICAgd29ya19jbGFzcyA9IGNo
YXJjbGFzc19hbGxvYyAoKTsKICAgICAgICAgICBjaGFyY2xhc3NfY29weXNldCAocHJlZGlj
YXRlLT5jbGFzcywgd29ya19jbGFzcyk7CiAgICAgICAgICAgY2hhcmNsYXNzX3NldGJpdCAo
J18nLCB3b3JrX2NsYXNzKTsKICAgICAgICAgICBpZiAoYyA9PSAnVycpCiAgICAgICAgICAg
ICBjaGFyY2xhc3Nfbm90c2V0ICh3b3JrX2NsYXNzKTsKICAgICAgICAgICByZXR1cm4gbGFz
dHRvayA9IEZTQVRPS0VOX1RLX0NTRVQKICAgICAgICAgICAgICAgICAgICAgICArIGNoYXJj
bGFzc19jb21wbGV0ZWQgKHdvcmtfY2xhc3MpOwpdPT1dKQoKLS0gRWRpdCBtYXRjaC1hbnkg
KCIuIikgdG8gdXNlIGEgc3RhdGljIGNsYXNzLCBpbiBhIHNpbWlsYXIgZmFzaGlvbiB0bwot
LSB0aGUgc3Vic3RpdHV0aW9uIGFib3ZlLiAgVGhlIHdvcmsgaGFzIGJlZW4gc2hpZnRlZCBp
bnRvIGZzYWxleF9zeW50YXguCkxleEJvZHkgPSBUZXh0U3Vic3QoTGV4Qm9keSwgW1sKICAg
ICAgICBjYXNlICcuJzoKICAgICAgICAgIGlmIChiYWNrc2xhc2gpCiAgICAgICAgICAgIGdv
dG8gbm9ybWFsX2NoYXI7CiAgICAgICAgICBpZiAoZGZhLT5tdWx0aWJ5dGUpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAvKiBJbiBtdWx0aWJ5dGUgZW52aXJvbm1lbnQgcGVyaW9k
IG11c3QgbWF0Y2ggd2l0aCBhIHNpbmdsZQogICAgICAgICAgICAgICAgIGNoYXJhY3RlciBu
b3QgYSBieXRlLiAgU28gd2UgdXNlIEFOWUNIQVIuICAqLwogICAgICAgICAgICAgIGxhc3Rz
dGFydCA9IGZhbHNlOwogICAgICAgICAgICAgIHJldHVybiBsYXN0dG9rID0gQU5ZQ0hBUjsK
ICAgICAgICAgICAgfQogICAgICAgICAgemVyb3NldCAoY2NsKTsKICAgICAgICAgIG5vdHNl
dCAoY2NsKTsKICAgICAgICAgIGlmICghKHN5bnRheF9iaXRzICYgUkVfRE9UX05FV0xJTkUp
KQogICAgICAgICAgICBjbHJiaXQgKGVvbGJ5dGUsIGNjbCk7CiAgICAgICAgICBpZiAoc3lu
dGF4X2JpdHMgJiBSRV9ET1RfTk9UX05VTEwpCiAgICAgICAgICAgIGNscmJpdCAoJ1wwJywg
Y2NsKTsKICAgICAgICAgIGxhc3RzdGFydCA9IGZhbHNlOwogICAgICAgICAgcmV0dXJuIGxh
c3R0b2sgPSBDU0VUICsgY2hhcmNsYXNzX2luZGV4IChjY2wpOwpdXSwgW1sKICAgICAgICBj
YXNlICcuJzoKICAgICAgICAgIGlmIChiYWNrc2xhc2gpCiAgICAgICAgICAgIGdvdG8gbm9y
bWFsX2NoYXI7CiAgICAgICAgICBsZXhlci0+bGFzdHN0YXJ0ID0gZmFsc2U7CiAgICAgICAg
ICBpZiAobGV4ZXItPm11bHRpYnl0ZV9sb2NhbGUpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAvKiBJbiBtdWx0aWJ5dGUgZW52aXJvbm1lbnQgcGVyaW9kIG11c3QgbWF0Y2ggd2l0
aCBhIHNpbmdsZQogICAgICAgICAgICAgICAgIGNoYXJhY3RlciBub3QgYSBieXRlLiAgU28g
d2UgdXNlIEFOWUNIQVIuICAqLwogICAgICAgICAgICAgIHJldHVybiBsYXN0dG9rID0gRlNB
VE9LRU5fVEtfQU5ZQ0hBUjsKICAgICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGxhc3R0
b2sgPSBGU0FUT0tFTl9US19DU0VUICsgbGV4ZXItPmRvdGNsYXNzX2luZGV4OwpdXSkKCi0t
IEZpbmFsbHksIGVkaXQgbGV4Ym9keSB3aGVyZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBh
cmUgaGFja2VkIGludG8KLS0gY2xhc3NlcyBpZiBjYXNlIGZvbGRpbmcgaXMgc2VsZWN0ZWQu
ICBUaGlzIGlzIHRoZSBrZXkgcGxhY2UgdGhhdCBJCi0tIHdvdWxkIGxpa2UgdG8gYXR0YWNr
IGluIFN0YWdlIDI6ICBSZWNhc3QgdGhlIHRva2VuIHNldCBzbyB0aGF0Ci0tIGhpZ2gtbGV2
ZWwgaW5mb3JtYXRpb24gaXMgbW9kZWxsZWQgZXhwbGljaXRseSBmb3IgbG9uZ2VyIChlc3Bl
Y2lhbGx5Ci0tIHVwIHRvIHdoZXJlIGRmYW11c3RzIGNhbiBjb250ZW1wbGF0ZSBmb3JtaW5n
ICJjYXNlLWluc2Vuc2l0aXZlIGZpeGVkCi0tIHN0cmluZ3MiIGFzIGEgc2VhcmNoIG9wdGlv
bikuCkxleEJvZHkgPSBUZXh0U3Vic3QoTGV4Qm9keSwgW1sKICAgICAgICBkZWZhdWx0Ogog
ICAgICAgIG5vcm1hbF9jaGFyOgogICAgICAgICAgbGFzdHN0YXJ0ID0gZmFsc2U7CiAgICAg
ICAgICAvKiBGb3IgbXVsdGlieXRlIGNoYXJhY3RlciBzZXRzLCBmb2xkaW5nIGlzIGRvbmUg
aW4gYXRvbS4gIEFsd2F5cwogICAgICAgICAgICAgcmV0dXJuIFdDSEFSLiAgKi8KICAgICAg
ICAgIGlmIChkZmEtPm11bHRpYnl0ZSkKICAgICAgICAgICAgcmV0dXJuIGxhc3R0b2sgPSBX
Q0hBUjsKCiAgICAgICAgICBpZiAoY2FzZV9mb2xkICYmIGlzYWxwaGEgKGMpKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgemVyb3NldCAoY2NsKTsKICAgICAgICAgICAgICBzZXRi
aXRfY2FzZV9mb2xkX2MgKGMsIGNjbCk7CiAgICAgICAgICAgICAgcmV0dXJuIGxhc3R0b2sg
PSBDU0VUICsgY2hhcmNsYXNzX2luZGV4IChjY2wpOwogICAgICAgICAgICB9CgogICAgICAg
ICAgcmV0dXJuIGxhc3R0b2sgPSBjOwpdXSwgW1sKICAgICAgICBkZWZhdWx0OgogICAgICAg
IG5vcm1hbF9jaGFyOgogICAgICAgICAgbGV4ZXItPmxhc3RzdGFydCA9IGZhbHNlOwogICAg
ICAgICAgLyogRm9yIG11bHRpYnl0ZSBjaGFyYWN0ZXIgc2V0cywgZm9sZGluZyBpcyBkb25l
IGluIGF0b20sIHNvCiAgICAgICAgICAgICBhbHdheXMgcmV0dXJuIFdDSEFSLiAgKi8KICAg
ICAgICAgIGlmIChsZXhlci0+bXVsdGlieXRlX2xvY2FsZSkKICAgICAgICAgICAgcmV0dXJu
IGxhc3R0b2sgPSBGU0FUT0tFTl9US19XQ0hBUjsKCiAgICAgICAgICBpZiAoY2FzZV9mb2xk
ICYmIGlzYWxwaGEgKGMpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcmNsYXNz
X3QgKmNjbCA9IGNoYXJjbGFzc19hbGxvYyAoKTsKICAgICAgICAgICAgICBzZXRiaXRfY2Fz
ZV9mb2xkX2MgKGMsIGNjbCk7CiAgICAgICAgICAgICAgcmV0dXJuIGxhc3R0b2sgPSBGU0FU
T0tFTl9US19DU0VUCiAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjaGFyY2xhc3NfY29t
cGxldGVkIChjY2wpOwogICAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuIGxhc3R0b2sg
PSBjOwpdXSkKCkxleEJvZHkgPSBUZXh0U3Vic3QoTGV4Qm9keSwgW1sKICAgICAgICBjYXNl
ICckJzoKICAgICAgICAgIGlmIChiYWNrc2xhc2gpCiAgICAgICAgICAgIGdvdG8gbm9ybWFs
X2NoYXI7CiAgICAgICAgICBpZiAoc3ludGF4X2JpdHMgJiBSRV9DT05URVhUX0lOREVQX0FO
Q0hPUlMKICAgICAgICAgICAgICB8fCBsZXhsZWZ0ID09IDAKICAgICAgICAgICAgICB8fCAo
c3ludGF4X2JpdHMgJiBSRV9OT19CS19QQVJFTlMKICAgICAgICAgICAgICAgICAgPyBsZXhs
ZWZ0ID4gMCAmJiAqbGV4cHRyID09ICcpJwogICAgICAgICAgICAgICAgICA6IGxleGxlZnQg
PiAxICYmIGxleHB0clswXSA9PSAnXFwnICYmIGxleHB0clsxXSA9PSAnKScpCiAgICAgICAg
ICAgICAgfHwgKHN5bnRheF9iaXRzICYgUkVfTk9fQktfVkJBUgogICAgICAgICAgICAgICAg
ICA/IGxleGxlZnQgPiAwICYmICpsZXhwdHIgPT0gJ3wnCiAgICAgICAgICAgICAgICAgIDog
bGV4bGVmdCA+IDEgJiYgbGV4cHRyWzBdID09ICdcXCcgJiYgbGV4cHRyWzFdID09ICd8JykK
ICAgICAgICAgICAgICB8fCAoKHN5bnRheF9iaXRzICYgUkVfTkVXTElORV9BTFQpCiAgICAg
ICAgICAgICAgICAgICYmIGxleGxlZnQgPiAwICYmICpsZXhwdHIgPT0gJ1xuJykpCiAgICAg
ICAgICAgIHJldHVybiBsYXN0dG9rID0gRU5ETElORTsKICAgICAgICAgIGdvdG8gbm9ybWFs
X2NoYXI7Cl1dLCBbWwogICAgICAgIGNhc2UgJyQnOgogICAgICAgICAgaWYgKGJhY2tzbGFz
aCkKICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKICAgICAgICAgIGlmIChzeW50YXhf
Yml0cyAmIFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUwogICAgICAgICAgICAgIHx8IGxleGVy
LT5sZXhsZWZ0ID09IDAKICAgICAgICAgICAgICB8fCAoc3ludGF4X2JpdHMgJiBSRV9OT19C
S19QQVJFTlMKICAgICAgICAgICAgICAgICAgPyBsZXhlci0+bGV4bGVmdCA+IDAgJiYgKmxl
eGVyLT5sZXhwdHIgPT0gJyknCiAgICAgICAgICAgICAgICAgIDogbGV4ZXItPmxleGxlZnQg
PiAxICYmIGxleGVyLT5sZXhwdHJbMF0gPT0gJ1xcJyAmJiBsZXhlci0+bGV4cHRyWzFdID09
ICcpJykKICAgICAgICAgICAgICB8fCAoc3ludGF4X2JpdHMgJiBSRV9OT19CS19WQkFSCiAg
ICAgICAgICAgICAgICAgID8gbGV4ZXItPmxleGxlZnQgPiAwICYmICpsZXhlci0+bGV4cHRy
ID09ICd8JwogICAgICAgICAgICAgICAgICA6IGxleGVyLT5sZXhsZWZ0ID4gMSAmJiBsZXhl
ci0+bGV4cHRyWzBdID09ICdcXCcgJiYgbGV4ZXItPmxleHB0clsxXSA9PSAnfCcpCiAgICAg
ICAgICAgICAgfHwgKChzeW50YXhfYml0cyAmIFJFX05FV0xJTkVfQUxUKQogICAgICAgICAg
ICAgICAgICAmJiBsZXhlci0+bGV4bGVmdCA+IDAgJiYgKmxleGVyLT5sZXhwdHIgPT0gJ1xu
JykpCiAgICAgICAgICAgIHJldHVybiBsYXN0dG9rID0gRU5ETElORTsKICAgICAgICAgIGdv
dG8gbm9ybWFsX2NoYXI7Cl1dKQoKLS0gVXNlIHRlbXBvcmFyeSBtaW5yZXAvbWF4cmVwIHZh
cmlhYmxlcyBpbiBsZXhlciAie30iIHByb2Nlc3NpbmcsIGFuZCBjb3B5Ci0tIHRoZXNlIHZh
bHVlcyB0byBsZXhlci0+bWlucmVwIGFuZCBsZXhlci0+bWF4cmVwIHdoZW4gY29tcGxldGUu
CkxleEJvZHkgPSBUZXh0U3Vic3QoTGV4Qm9keSwgW1sKICAgICAgICAgIC8qIENhc2VzOgog
ICAgICAgICAgICAge019IC0gZXhhY3QgY291bnQKICAgICAgICAgICAgIHtNLH0gLSBtaW5p
bXVtIGNvdW50LCBtYXhpbXVtIGlzIGluZmluaXR5CiAgICAgICAgICAgICB7LE59IC0gMCB0
aHJvdWdoIE4KICAgICAgICAgICAgIHssfSAtIDAgdG8gaW5maW5pdHkgKHNhbWUgYXMgJyon
KQogICAgICAgICAgICAge00sTn0gLSBNIHRocm91Z2ggTiAqLwogICAgICAgICAgewogICAg
ICAgICAgICBjaGFyIGNvbnN0ICpwID0gbGV4cHRyOwogICAgICAgICAgICBjaGFyIGNvbnN0
ICpsaW0gPSBwICsgbGV4bGVmdDsKICAgICAgICAgICAgbWlucmVwID0gbWF4cmVwID0gLTE7
Cl1dLCBbWwogICAgICAgICAgLyogQ2FzZXM6CiAgICAgICAgICAgICB7TX0gLSBleGFjdCBj
b3VudAogICAgICAgICAgICAge00sfSAtIG1pbmltdW0gY291bnQsIG1heGltdW0gaXMgaW5m
aW5pdHkKICAgICAgICAgICAgIHssTn0gLSAwIHRocm91Z2ggTgogICAgICAgICAgICAgeyx9
IC0gMCB0byBpbmZpbml0eSAoc2FtZSBhcyAnKicpCiAgICAgICAgICAgICB7TSxOfSAtIE0g
dGhyb3VnaCBOICovCiAgICAgICAgICB7CiAgICAgICAgICAgIGNoYXIgY29uc3QgKnAgPSBs
ZXhlci0+bGV4cHRyOwogICAgICAgICAgICBjaGFyIGNvbnN0ICpsaW0gPSBwICsgbGV4ZXIt
PmxleGxlZnQ7CiAgICAgICAgICAgIGludCBtaW5yZXAgPSAtMTsKICAgICAgICAgICAgaW50
IG1heHJlcCA9IC0xOwpdXSkKCkxleEJvZHkgPSBUZXh0U3Vic3QoTGV4Qm9keSwgW1sKICAg
ICAgICAgICAgaWYgKFJFX0RVUF9NQVggPCBtYXhyZXApCiAgICAgICAgICAgICAgbGV4ZXIt
PmFiYW5kb25fd2l0aF9lcnJvciAoXygicmVndWxhciBleHByZXNzaW9uIHRvbyBiaWciKSk7
CiAgICAgICAgICAgIGxleHB0ciA9IHA7CiAgICAgICAgICAgIGxleGxlZnQgPSBsaW0gLSBw
OwogICAgICAgICAgfQogICAgICAgICAgbGFzdHN0YXJ0ID0gZmFsc2U7CiAgICAgICAgICBy
ZXR1cm4gbGFzdHRvayA9IFJFUE1OOwpdXSwgW1sKICAgICAgICAgICAgaWYgKFJFX0RVUF9N
QVggPCBtYXhyZXApCiAgICAgICAgICAgICAgbGV4ZXItPmFiYW5kb25fd2l0aF9lcnJvciAo
XygicmVndWxhciBleHByZXNzaW9uIHRvbyBiaWciKSk7CiAgICAgICAgICAgIGxleGVyLT5s
ZXhwdHIgPSBwOwogICAgICAgICAgICBsZXhlci0+bGV4bGVmdCA9IGxpbSAtIHA7CiAgICAg
ICAgICAgIGxleGVyLT5taW5yZXAgPSBtaW5yZXA7CiAgICAgICAgICAgIGxleGVyLT5tYXhy
ZXAgPSBtYXhyZXA7CiAgICAgICAgICB9CiAgICAgICAgICBsZXhlci0+bGFzdHN0YXJ0ID0g
ZmFsc2U7CiAgICAgICAgICByZXR1cm4gbGFzdHRvayA9IFJFUE1OOwpdXSkKCkxleEJvZHkg
PSBUZXh0U3Vic3QoTGV4Qm9keSwgW1sKICAgICAgICBjYXNlICdeJzoKICAgICAgICAgIGlm
IChiYWNrc2xhc2gpCiAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CiAgICAgICAgICBp
ZiAoc3ludGF4X2JpdHMgJiBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMKICAgICAgICAgICAg
ICB8fCBsYXN0dG9rID09IEVORCB8fCBsYXN0dG9rID09IExQQVJFTiB8fCBsYXN0dG9rID09
IE9SKQogICAgICAgICAgICByZXR1cm4gbGFzdHRvayA9IEJFR0xJTkU7CiAgICAgICAgICBn
b3RvIG5vcm1hbF9jaGFyOwpdXSwgW1sKICAgICAgICBjYXNlICdeJzoKICAgICAgICAgIGlm
IChiYWNrc2xhc2gpCiAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CiAgICAgICAgICBp
ZiAoc3ludGF4X2JpdHMgJiBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMKICAgICAgICAgICAg
ICB8fCBsZXhlci0+bGFzdHRvayA9PSBFTkQgfHwgbGV4ZXItPmxhc3R0b2sgPT0gTFBBUkVO
IHx8IGxleGVyLT5sYXN0dG9rID09IE9SKQogICAgICAgICAgICByZXR1cm4gbGFzdHRvayA9
IEJFR0xJTkU7CiAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOwpdXSkKCi0tIFJlcGxhY2Ug
YWxsICJyZXR1cm4gbGFzdHRvayA9ICIgY2FzZXMgd2l0aCAicmV0dXJuIGxleGVyLT5sYXN0
dG9rID0gIgpMZXhCb2R5ID0gVGV4dFN1YnN0KExleEJvZHksCiAgICAgICAgICAgICAgICAg
ICAgIiByZXR1cm4gbGFzdHRvayA9ICIsICIgcmV0dXJuIGxleGVyLT5sYXN0dG9rID0gIikK
Ci0tIFRoZXJlJ3MgYSBmZXcgcmVtYWluaW5nICIgbGFzdHN0YXJ0IiBjYXNlcyBpbiB0aGUg
Y29kZQpMZXhCb2R5ID0gVGV4dFN1YnN0KExleEJvZHksCiAgICAgICAgICAgICAgICAgICAg
IiBsYXN0c3RhcnQiLCAiIGxleGVyLT5sYXN0c3RhcnQiKQoKLS0gRGVhbCB3aXRoICJwYXJl
bnMiIHZhcmlhYmxlLCBtb3ZlZCBpbnRvIGxld3hlciBzdGF0ZQpMZXhCb2R5ID0gVGV4dFN1
YnN0KExleEJvZHksICIgKytwYXJlbnM7IiwgIiArK2xleGVyLT5wYXJlbnM7IikKTGV4Qm9k
eSA9IFRleHRTdWJzdChMZXhCb2R5LCAiIC0tcGFyZW5zOyIsICIgLS1sZXhlci0+cGFyZW5z
OyIpCkxleEJvZHkgPSBUZXh0U3Vic3QoTGV4Qm9keSwgW1sKICAgICAgICAgIGlmIChwYXJl
bnMgPT0gMCAmJiBzeW50YXhfYml0cyAmIFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQp
Cl1dLCBbWwogICAgICAgICAgaWYgKGxleGVyLT5wYXJlbnMgPT0gMCAmJiBzeW50YXhfYml0
cyAmIFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQpCl1dKQoKTGV4Qm9keSA9IExleEJv
ZHk6Z3N1YigiIEZFVENIX1dDICUoIiwgIiBGRVRDSF9XQyAobGV4ZXIsICIpCkxleEJvZHkg
PSBMZXhCb2R5OmdzdWIoIiBwYXJzZV9icmFja2V0X2V4cCAlKCUpIiwKICAgICAgICAgICAg
ICAgICAgICAgICAiIHBhcnNlX2JyYWNrZXRfZXhwIChsZXhlcikiKQotLSBBZGQgZnNhdG9r
ZW4gcHJlZml4ZXMgYWZ0ZXIgbWFqb3IgZWRpdHMgaGF2ZSBiZWVuIGRvbmUuCkxleEJvZHkg
PSBGU0FUb2tlblN1YnN0KExleEJvZHkpCgotLSBSZXdyaXRlIHJlZmVyZW5jZXMgdG8gdmFy
aWFibGVzIG1vdmVkIGludG8gbGV4ZXIuCi0tIFRyeSBwYXR0ZXJuIHNlYXJjaC9yZXBsYWNl
IGZvciB0aGVzZSB2YXJpYWJsZXM7IHRoaXMgbWF5IGNhdXNlCi0tIGNvbGxhdGVyYWwgZGFt
YWdlLCBidXQgdGhlIGFsdGVybmF0aXZlIGlzIHRlZGlvdXMuCmZvciBfLCBLZXl3b3JkIGlu
IGlwYWlyc3siY2FzZV9mb2xkIiwgInN5bnRheF9iaXRzIiwgImVvbGJ5dGUiLCAiZG90Y2xh
c3MifSBkbwogICBMZXhCb2R5ID0gTGV4Qm9keTpnc3ViKCIoW14ld19dKSIgLi4gS2V5d29y
ZCAuLiAiKFteJXdfXSkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiJTFsZXhlci0+
IiAuLiBLZXl3b3JkIC4uICIlMiIpCmVuZAphc3NlcnQoZjp3cml0ZShMZXhCb2R5LCAiXG4i
KSkKCmFzc2VydChmOndyaXRlKERlY2xzWyJsZXgtcGF0dGVybiJdLCBbWwp7CiAgLyogQ29w
eSBwYXJhbWV0ZXJzIHRvIGludGVybmFsIHN0YXRlIHZhcmlhYmxlcy4gICovCiAgbGV4ZXIt
PmxleHB0ciA9IHBhdHRlcm47CiAgbGV4ZXItPmxleGxlZnQgPSBwYXR0ZXJuX2xlbjsKCiAg
LyogUmVzZXQgbGV4aWNhbCBzY2FubmVyIHN0YXRlLiAgKi8KICBsZXhlci0+bGFzdHRvayA9
IEZTQVRPS0VOX1RLX0VORDsKICBsZXhlci0+bGFzdHN0YXJ0ID0gMTsKICBsZXhlci0+cGFy
ZW5zID0gMDsKCiAgLyogUmVzZXQgbXVsdGlieXRlIHBhcnNpbmcgc3RhdGUuICAqLwogIGxl
eGVyLT5jdXJfbWJfbGVuID0gMTsKICBtZW1zZXQgKCZsZXhlci0+bWJydG93Y19zdGF0ZSwg
MCwgc2l6ZW9mIChsZXhlci0+bWJydG93Y19zdGF0ZSkpOwp9CgpdXSkpCgphc3NlcnQoZjp3
cml0ZShbWwovKiBSZXBvcnQgd2hldGhlciBjb2RlcyAwLTEyNyBjb25mb3JtIHRvIEFTQ0lJ
IGVuY29kaW5nLiAgVGhpcyBpcyBoYW5keQogICBmb3Igb3B0aW1pc2F0aW9uLCBwYXJ0aWN1
bGFybHkgbG93ZXItY2FzZSBhbmQgdXBwZXItY2FzZSBjaGFyYWN0ZXJzLAogICBhcyB0aGUg
Y29kZXMgYXJlIGNvbnRpZ3VvdXMsIHVubGlrZSBFQkNESUMuICBBU0NJSSBpcyBhbHNvIGEg
Y29tbW9uCiAgIGRlbm9taW5hdG9yIGluIG1hbnkgb3RoZXIgdW5pYnl0ZSBjb2RlIHBhZ2Vz
IChsb2NhbGVzKSwgYW5kIGFsc28gaW4KICAgdGhlIG11bHRpYnl0ZSBVVEYtOCBsb2NhbGUu
ICAqLwpzdGF0aWMgYm9vbCBfR0xfQVRUUklCVVRFX1BVUkUKY2hhcl9lbmNvZGluZ183Yml0
c19pc19hc2NpaSAodm9pZCkKewogIC8qIFRydWUgaWYgdGhlIG5hdGl2ZSBjaGFyYWN0ZXIg
c2V0IGlzIGtub3duIHRvIGJlIGNvbXBhdGlibGUgd2l0aAogICAgIHRoZSBDIGxvY2FsZS4g
IFRoZSBmb2xsb3dpbmcgdGVzdCBpc24ndCBwZXJmZWN0LCBidXQgaXQncyBnb29kCiAgICAg
ZW5vdWdoIGluIHByYWN0aWNlLCBhcyBvbmx5IEFTQ0lJIGFuZCBFQkNESUMgYXJlIGluIGNv
bW1vbiB1c2UKICAgICBhbmQgdGhpcyB0ZXN0IGNvcnJlY3RseSBhY2NlcHRzIEFTQ0lJIGFu
ZCByZWplY3RzIEVCQ0RJQy4gICovCiAgY29uc3QgYm9vbCBpc19hc2NpaSA9CiAgICAgICAg
J1xiJyA9PSAgIDggJiYgJ1x0JyA9PSAgIDkgJiYgJ1xuJyA9PSAgMTAgJiYgJ1x2JyA9PSAg
MTEKICAgICAmJiAnXGYnID09ICAxMiAmJiAnXHInID09ICAxMyAmJiAnICcgID09ICAzMiAm
JiAnIScgID09ICAzMwogICAgICYmICciJyAgPT0gIDM0ICYmICcjJyAgPT0gIDM1ICYmICcl
JyAgPT0gIDM3ICYmICcmJyAgPT0gIDM4CiAgICAgJiYgJ1wnJyA9PSAgMzkgJiYgJygnICA9
PSAgNDAgJiYgJyknICA9PSAgNDEgJiYgJyonICA9PSAgNDIKICAgICAmJiAnKycgID09ICA0
MyAmJiAnLCcgID09ICA0NCAmJiAnLScgID09ICA0NSAmJiAnLicgID09ICA0NgogICAgICYm
ICcvJyAgPT0gIDQ3ICYmICcwJyAgPT0gIDQ4ICYmICc5JyAgPT0gIDU3ICYmICc6JyAgPT0g
IDU4CiAgICAgJiYgJzsnICA9PSAgNTkgJiYgJzwnICA9PSAgNjAgJiYgJz0nICA9PSAgNjEg
JiYgJz4nICA9PSAgNjIKICAgICAmJiAnPycgID09ICA2MyAmJiAnQScgID09ICA2NSAmJiAn
WicgID09ICA5MCAmJiAnWycgID09ICA5MQogICAgICYmICdcXCcgPT0gIDkyICYmICddJyAg
PT0gIDkzICYmICdeJyAgPT0gIDk0ICYmICdfJyAgPT0gIDk1CiAgICAgJiYgJ2EnICA9PSAg
OTcgJiYgJ3onICA9PSAxMjIgJiYgJ3snICA9PSAxMjMgJiYgJ3wnICA9PSAxMjQKICAgICAm
JiAnfScgID09IDEyNSAmJiAnficgID09IDEyNjsKICByZXR1cm4gaXNfYXNjaWk7Cn0KCl1d
KSkKCmFzc2VydChmOndyaXRlKERlY2xzWyJsZXgtc3ludGF4Il0sIFtbCnsKICBjaGFyY2xh
c3NfdCAqd29ya19jbGFzczsKICBwcmVkaWNhdGVfZW50cnlfdCAqcHJlZDsKICBjaGFyIGNv
bnN0ICpsb2NhbGVfbmFtZTsKCiAgLyogU2V0IGEgZmxhZyBub3RpbmcgdGhhdCB0aGlzIGxl
eGVyIGhhcyBoYWQgaXRzIHN5bnRheCBwYXJhbXMKICAgICBzZXQuICAqLwogIGxleGVyLT5z
eW50YXhfaW5pdGlhbGlzZWQgPSB0cnVlOwoKICAvKiBSZWNvcmQgdGhlIGZ1bmN0aW9uIHBh
cmFtZXRlcnMgaW4gb3VyIGxvY2FsIGNvbnRleHQuICAqLwogIGxleGVyLT5zeW50YXhfYml0
cyA9IGJpdHM7CiAgbGV4ZXItPmNhc2VfZm9sZCA9IGZvbGQ7CiAgbGV4ZXItPmVvbGJ5dGUg
PSBlb2w7CgogIC8qIFNldCB1cCB1bmlieXRlL211bHRpYnl0ZSBmbGFncywgYmFzZWQgb24g
TUJfQ1VSX01BWCwgd2hpY2gKICAgICBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IGxvY2FsZS4g
IFdlIGNhcHR1cmUgdGhpcyBpbmZvcm1hdGlvbiBoZXJlCiAgICAgYXMgdGhlIGxvY2FsZSBt
YXkgY2hhbmdlIGxhdGVyLiAgQXQgcHJlc2VudCwgd2UgZG9uJ3QgY2FwdHVyZQogICAgIE1C
X0NVUl9NQVggaXRzZWxmLiAgKi8KICBpZiAoTUJfQ1VSX01BWCA+IDEpCiAgICB7CiAgICAg
IC8qIE11bHRpYnl0ZSBsb2NhbGU6IFByZXBhcmUgYm9vbGVhbnMgdG8gbWFrZSBjb2RlIGVh
c2llciB0bwogICAgICAgICByZWFkICovCiAgICAgIGxleGVyLT51bmlieXRlX2xvY2FsZSA9
IGZhbHNlOwogICAgICBsZXhlci0+bXVsdGlieXRlX2xvY2FsZSA9IHRydWU7CgogICAgICAv
KiBEaXNjYXJkIGFueSBlYXJsaWVyIHN0b3JhZ2Ugd2UgbWF5IGhhdmUgYWNxdWlyZWQuICAq
LwogICAgICBmcmVlIChsZXhlci0+bWJjc2V0cyk7CiAgICAgIGxleGVyLT5tYmNzZXRzID0g
TlVMTDsKCiAgICAgIC8qIFNldCB1cCBhbiBhcnJheSBvZiBzdHJ1Y3R1cmVzIHRvIGhvbGQg
bXVsdGlieXRlIGNoYXJhY3RlcgogICAgICAgICBzZXRzLiAgKi8KICAgICAgbGV4ZXItPm5t
YmNzZXRzID0gMDsKICAgICAgbGV4ZXItPm1iY3NldHNfYWxsb2MgPSAyOwogICAgICBsZXhl
ci0+bWJjc2V0cyA9IHh6YWxsb2MgKHNpemVvZiAoKmxleGVyLT5tYmNzZXRzKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbGV4ZXItPm1iY3NldHNfYWxsb2Mp
OwogICAgfQogICAgZWxzZQogICAgewogICAgICAvKiBVbmlieXRlIGxvY2FsZTogUHJlcGFy
ZSBib29sZWFucyB0byBtYWtlIGNvZGUgZWFzaWVyIHRvCiAgICAgICAgIHJlYWQgKi8KICAg
ICAgbGV4ZXItPnVuaWJ5dGVfbG9jYWxlID0gdHJ1ZTsKICAgICAgbGV4ZXItPm11bHRpYnl0
ZV9sb2NhbGUgPSBmYWxzZTsKICAgIH0KCiAgLyogQ2hhcmNsYXNzIGd1YXJhbnRlZXMgdGhh
dCBjbGFzcyBpbmRleCAwIGlzIHplcm9jbGFzcywgc28gd2UgZG9uJ3QKICAgICBuZWVkIHRv
IHNldCBpdCB1cCBoZXJlLiAgKi8KCiAvKiBTZXQgdXAgYSBjaGFyYWN0ZXIgY2xhc3MgdG8g
bWF0Y2ggYW55Y2hhciAoJy4nKSwgdGFpbG9yZWQgdG8KICAgIGFjY29tbW9kYXRlIG9wdGlv
bnMgZnJvbSB0aGUgcmVnZXggc3ludGF4LiAgKi8KICB3b3JrX2NsYXNzID0gY2hhcmNsYXNz
X2FsbG9jICgpOwogIGNoYXJjbGFzc19ub3RzZXQgKHdvcmtfY2xhc3MpOwogIGlmICghIChs
ZXhlci0+c3ludGF4X2JpdHMgJiBSRV9ET1RfTkVXTElORSkpCiAgICB7CiAgICAgIGNoYXJj
bGFzc19jbHJiaXQgKGxleGVyLT5lb2xieXRlLCB3b3JrX2NsYXNzKTsKICAgIH0KICBpZiAo
bGV4ZXItPnN5bnRheF9iaXRzICYgUkVfRE9UX05PVF9OVUxMKQogICAgewogICAgICBjaGFy
Y2xhc3NfY2xyYml0ICgwLCB3b3JrX2NsYXNzKTsKICAgIH0KICBsZXhlci0+ZG90Y2xhc3Nf
aW5kZXggPSBjaGFyY2xhc3NfY29tcGxldGVkICh3b3JrX2NsYXNzKTsKICBsZXhlci0+ZG90
Y2xhc3MgPSBjaGFyY2xhc3NfZ2V0X3BvaW50ZXIgKGxleGVyLT5kb3RjbGFzc19pbmRleCk7
CgogIC8qIFRlc3RpbmcgZm9yIHRoZSBhYnNlbmNlIG9mIFJFX05PX0dOVV9PUFMgaW4gc3lu
dGF4X2JpdHMgaGFwcGVucwogICAgIG9mdGVuLCBzbyBzZXQgYSBkaXJlY3QgZmxhZyB2YXJp
YWJsZTogIFRoaXMgbWFrZXMgY29kZSBtb3JlCiAgICAgcmVhZGFibGUuICAqLwogIGxleGVy
LT5yZV9nbnVfb3BzID0gISAobGV4ZXItPnN5bnRheF9iaXRzICYgUkVfTk9fR05VX09QUyk7
CgogIC8qIEluaXRpYWxpc2UgY2FjaGUgYW5kIG90aGVyIHRhYmxlcyB0aGF0IGhhdmUgc3lu
dGF4IGFuZC9vciBsb2NhbGUKICAgICBpbmZsdWVuY2VzLiAgKi8KCiAgLyogU2V0IHVwIHRo
ZSB3Y2hhcl9kZXNjIGZpZWxkcyBvZiB0aGUgcHJlZGljYXRlIHRhYmxlLiAgKi8KICBmb3Ig
KHByZWQgPSBsZXhlci0+cHJlZGljYXRlczsgcHJlZC0+bmFtZSAhPSBOVUxMOyBwcmVkKysp
CiAgICBwcmVkLT53Y2hhcl9kZXNjID0gd2N0eXBlIChwcmVkLT5uYW1lKTsKCiAgLyogUmVj
b3JkIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGxvY2FsZS4gIE5vdGUgdGhhdCBzZXRsb2Nh
bGUgY2FuCiAgICAgcmV0dXJuIE5VTEwgZm9yIHRoZSBuYW1lLiAgKi8KICBsZXhlci0+bG9j
YWxlX25hbWUgPSBOVUxMOwogIGxvY2FsZV9uYW1lID0gc2V0bG9jYWxlIChMQ19BTEwsIE5V
TEwpOwogIGlmIChsb2NhbGVfbmFtZSAhPSBOVUxMKQogICAgbGV4ZXItPmxvY2FsZV9uYW1l
ID0geHN0cmR1cCAobG9jYWxlX25hbWUpOwoKICAvKiBEZXRlcm1pbmUgaWYgdGhlIGxvY2Fs
ZSdzIHRyZWF0bWVudCBvZiBjb2RlcyAwLTEyNyBtYXRjaGVzIEFTQ0lJLAogICAgIGFzIHNv
bWUgb3BlcmF0aW9ucyAoZS5nLiAiW2Mtdl0iKSBiZWNvbWUgZWFzaWVyIHRvIGhhbmRsZS4g
ICovCiAgbGV4ZXItPmFzY2lpXzdiaXRfZW5jb2RpbmcgPSBjaGFyX2VuY29kaW5nXzdiaXRz
X2lzX2FzY2lpICgpOwoKICAvKiBGdXJ0aGVyIG9wdGltaXNhdGlvbnMgYXJlIHBvc3NpYmxl
IGlmIHRoZSBsb2NhbGUgaXMgYW4gdW5pYnl0ZQogICAgIEFTQ0lJIDctYml0IEMvUE9TSVgg
ZW52aXJvbm1lbnQsIGFuZCB0aGlzIGlzIGEgY29tbW9uIGNhc2UsIHNvCiAgICAgc3BlbmQg
c29tZSBlZmZvcnQgbG9va2luZyBmb3IgdGhpcyBzaXR1YXRpb24uICAqLwogIGxleGVyLT51
c2luZ19zaW1wbGVfbG9jYWxlID0gZmFsc2U7CiAgaWYgKGxleGVyLT51bmlieXRlX2xvY2Fs
ZSAmJiBsZXhlci0+YXNjaWlfN2JpdF9lbmNvZGluZykKICAgIHsKICAgICAgbGV4ZXItPnVz
aW5nX3NpbXBsZV9sb2NhbGUgPSAhIGxleGVyLT5sb2NhbGVfbmFtZQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IFNUUkVRIChsZXhlci0+bG9jYWxlX25hbWUsICJD
IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBTVFJFUSAobGV4ZXIt
PmxvY2FsZV9uYW1lLCAiUE9TSVgiKTsKICAgIH0KCiAgLyogSW5pdGlhbGlzZSBjYWNoZSB0
aGF0IGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiB1bmlieXRlIGFuZCBtdWx0aWJ5dGUKICAgICAo
d2lkZSkgY2hhcmFjdGVycyBiYXNlZCBvbiB0aGUgbGVhZGluZyBvY3RldC4gICovCiAgaW5p
dGlhbGlzZV91Y2hhcl90b193Y19jYWNoZSAobGV4ZXIpOwoKICAvKiA/PyBJZiBhIGNvbXBs
ZXRlIGNvcHkgb2YgdGhlIGxvY2FsZSBuZWVkcyB0byBiZSBzdG9yZWQgd2l0aGluCiAgICAg
dGhpcyBpbnN0YW5jZSwgc2VlICB1c2Vsb2NhbGUoMykgYW5kIGR1cGxvY2FsZSgzKSAoYW5k
IGZyZWUgdGhlCiAgICAgY29weSB3aXRoIGZyZWVsb2NhbGUoMykpLiAgKi8KCn0KCl1dKSkK
Ci0tIDEyIEFwciAyMDE0OiBTdXBwb3J0IHRoZSBuZXdseS1pbnRyb2R1Y2VkICJleGNoYW5n
ZSIgaW50ZXJmYWNlCmFzc2VydChmOndyaXRlKERlY2xzWyJsZXgtZXhjaGFuZ2UiXSwgW1sK
ewogIHN3aXRjaCAob3Bjb2RlKQogICAgewogICAgY2FzZSBQUk9UT19MRVhQQVJTRV9PUF9H
RVRfSVNfTVVMVElCWVRFX0xPQ0FMRToKICAgICAgcmV0dXJuIChpbnQpIGxleGVyLT5tdWx0
aWJ5dGVfbG9jYWxlOwogICAgY2FzZSBQUk9UT19MRVhQQVJTRV9PUF9HRVRfUkVQTU5fTUlO
OgogICAgICByZXR1cm4gbGV4ZXItPm1pbnJlcDsKICAgIGNhc2UgUFJPVE9fTEVYUEFSU0Vf
T1BfR0VUX1JFUE1OX01BWDoKICAgICAgcmV0dXJuIGxleGVyLT5tYXhyZXA7CiAgICBjYXNl
IFBST1RPX0xFWFBBUlNFX09QX0dFVF9XSURFX0NIQVJfTElTVF9NQVg6CiAgICAgIC8qIE9y
aWdpbmFsIHRva2VuLCBwbHVzIHVwcGVyL2xvd2VyY2FzZSwgcGx1cyBleHRlbmRlZCB2YXJp
YW50cy4gICovCiAgICAgIHJldHVybiAxICsgQ0FTRV9GT0xERURfQlVGU0laRTsKICAgIGNh
c2UgUFJPVE9fTEVYUEFSU0VfT1BfR0VUX1dJREVfQ0hBUlM6CiAgICAgIHsKICAgICAgICB3
Y2hhcl90ICpwX3djID0gKHdjaGFyX3QgKikgcGFyYW07CgogICAgICAgIC8qIFJlY29yZCB0
aGUgb3JpZ2luYWwgdG9rZW4gKHdjdG9rKSBpbXBsaWNpdGx5IGFzc29jaWF0ZWQgd2l0aAog
ICAgICAgICAgIFdDSEFSLiAgKi8KICAgICAgICAqcF93YysrID0gbGV4ZXItPndjdG9rOwoK
ICAgICAgICAvKiBBZGQgaW4gZGlyZWN0IGFuZC9vciBpbmRpcmVjdCBjYXNlIGVxdWl2YWxl
bnRzLCBhcyBhcHByb3ByaWF0ZS4gICovCiAgICAgICAgaWYgKGxleGVyLT5jYXNlX2ZvbGQp
CiAgICAgICAgICBwX3djICs9IGNhc2VfZm9sZGVkX2NvdW50ZXJwYXJ0cyAobGV4ZXIsIGxl
eGVyLT53Y3RvaywgcF93Yyk7CgogICAgICAgIC8qIFJldHVybiBob3cgbWFueSB3aWRlIGNo
YXJzIChhdCBsZWFzdCAxKSBhcmUgaW4gdGhlIGxpc3QuICAqLwogICAgICAgIHJldHVybiBw
X3djIC0gKHdjaGFyX3QgKikgcGFyYW07CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNl
IFBST1RPX0xFWFBBUlNFX09QX0dFVF9ET1RDTEFTUzoKICAgICAgKigoY2hhcmNsYXNzX3Qg
KiopIHBhcmFtKSA9IGxleGVyLT5kb3RjbGFzczsKICAgICAgYnJlYWs7CiAgICBjYXNlIFBS
T1RPX0xFWFBBUlNFX09QX0dFVF9NQkNTRVQ6CiAgICAgIC8qIFJldHVybiB0aGUgc2V0IGFz
c29jaWF0ZWQgd2l0aCB0aGUgbW9zdCByZWNlbnQgTUJDU0VUIHRva2VuLiAgKi8KICAgICAg
KigobWJjc2V0c19zZXRfdCAqKikgcGFyYW0pID0gbGV4ZXItPm1iY3NldHNbbGV4ZXItPm5t
YmNzZXRzIC0gMV07CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgLyogPz8gTm90
IHN1cmUgaWYgd2Ugc2hvdWxkIGNvbXBsYWluL2Fzc2VydCBvciBtZXJlbHkgaWdub3JlIGFu
CiAgICAgICAgIG9wY29kZSB0aGF0IHdlIGRvbid0IHJlY29nbmlzZSBoZXJlLiAgKi8KICAg
ICAgYXNzZXJ0ICghInVucmVjb2duaXNlZCBQUk9UT19MRVhQQVJTRSBvcGNvZGUiKTsKICAg
ICAgLyogTk9UUkVBQ0hFRCAqLwogICAgICBicmVhazsKICAgIH0KCiAgICAvKiBJZiB3ZSBy
ZWFjaCBoZXJlLCByZXR1cm4gdmFsdWUgaXMgdW5pbXBvcnRhbnQsIHNvIGp1c3Qgc2F5IDAu
ICAqLwogICAgcmV0dXJuIDA7Cn0KCl1dKSkKCmFzc2VydChmOndyaXRlKERlY2xzWyJsZXgt
ZXhjZXB0aW9uLWZucyJdLCBbWwp7CiAgLyogUmVjb3JkIHRoZSBwcm92aWRlZCBmdW5jdGlv
bnMgaW4gdGhlIGxleGVyJ3MgY29udGV4dC4gICovCiAgbGV4ZXItPndhcm5fY2xpZW50ICAg
ICAgICA9IHdhcm5pbmdmbjsKICBsZXhlci0+YWJhbmRvbl93aXRoX2Vycm9yID0gZXJyb3Jm
bjsKfQoKXV0pKQoKYXNzZXJ0KGY6d3JpdGUoW1sKLyogQWRkICJub3QgcHJvdmlkZWQhIiBz
dHViIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgaWYgdGhlIGNsaWVudAogICBmYWlscyB0
byBwcm92aWRlIHByb3BlciByZXNvdXJjZXMuICBUaGlzIGlzIGEgaGFjaywgbWVyZWx5IHRv
IGdldAogICB0aGUgbW9kdWxlIHN0YXJ0ZWQ7IGJldHRlciB0cmVhdG1lbnQgbmVlZHMgdG8g
YmUgYWRkZWQgbGF0ZXIuICAqLwpzdGF0aWMgdm9pZApub19mdW5jdGlvbl9wcm92aWRlZCAo
dm9pZCAqdW51c2VkKQp7CiBhc3NlcnQgKCEiZnNhbGV4OiBQbHVnLWluIGZ1bmN0aW9uIHJl
cXVpcmVkLCBidXQgbm90IHByb3ZpZGVkLiIpOwp9CgpdXSkpCgotLSBEZWZpbmUgYSAibmV3
IiBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhbiBpbml0aWFsIHBhcnNlciBjb250ZXh0Lgphc3Nl
cnQoZjp3cml0ZShEZWNsc1sibGV4LW5ldyJdLCBbWwp7CiAgZnNhbGV4X2N0eHRfdCAqbmV3
X2NvbnRleHQ7CgogIC8qIEFjcXVpcmUgemVyb2VkIG1lbW9yeSBmb3IgbmV3IGxleGVyIGNv
bnRleHQuICAqLwogIG5ld19jb250ZXh0ID0gWFpBTExPQyAoZnNhbGV4X2N0eHRfdCk7Cgog
IC8qID8/IFBvaW50IHdhcm5pbmcgYW5kIGVycm9yIGZ1bmN0aW9ucyB0byBhICJ5b3UgbmVl
ZCB0byB0ZWxsIG1lCiAgICAgdGhlc2UgZmlyc3QhIiBmdW5jdGlvbj8gKi8KICBuZXdfY29u
dGV4dC0+d2Fybl9jbGllbnQgICAgICAgID0gKGZzYWxleF93YXJuX2NhbGxiYWNrX2ZuICop
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vX2Z1bmN0aW9uX3Byb3Zp
ZGVkOwogIG5ld19jb250ZXh0LT5hYmFuZG9uX3dpdGhfZXJyb3IgPSAoZnNhbGV4X2Vycm9y
X2NhbGxiYWNrX2ZuICopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
X2Z1bmN0aW9uX3Byb3ZpZGVkOwoKICAvKiBEZWZhdWx0IHRvIHdvcmtpbmcgaW4gYSBub24t
bXVsdGlieXRlIGxvY2FsZS4gIEluIHNvbWUgY2FzZXMsCiAgICAgRkVUQ0hfV0MgbmV2ZXIg
c2V0cyB0aGlzIHZhcmlhYmxlIChhcyBpdCdzIGFzc3VtZWQgdG8gYmUgMSksIHNvCiAgICAg
ZnVsZmlsIHRoaXMgZXhwZWN0YXRpb24gaGVyZS4gICovCiAgbmV3X2NvbnRleHQtPmN1cl9t
Yl9sZW4gPSAxOwoKICAvKiBDb3B5IHRoZSB0ZW1wbGF0ZSBwcmVkaWNhdGUgbGlzdCBpbnRv
IHRoaXMgY29udGV4dCwgc28gdGhhdCB3ZQogICAgIGNhbiBoYXZlIGxleGVyLXNwZWNpZmlj
IG5hbWVkIHByZWRpY2F0ZSBjbGFzc2VzLiAgKi8KICBtZW1jcHkgKG5ld19jb250ZXh0LT5w
cmVkaWNhdGVzLCB0ZW1wbGF0ZV9wcmVkaWNhdGVfbGlzdCwKICAgICAgICAgc2l6ZW9mIChu
ZXdfY29udGV4dC0+cHJlZGljYXRlcykpOwoKICAvKiBEZWZhdWx0IHRvIHVuaWJ5dGUgbG9j
YWxlIGF0IGZpcnN0OyB0aGUgZmluYWwgbG9jYWxlIHNldHRpbmcgaXMKICAgICBtYWRlIGFj
Y29yZGluZyB0byB3aGF0J3MgaW4gZm9yY2Ugd2hlbiBmc2FsZXhfc3ludGF4ICgpIGlzCiAg
ICAgY2FsbGVkLiAgKi8KICBuZXdfY29udGV4dC0+dW5pYnl0ZV9sb2NhbGUgPSB0cnVlOwog
IG5ld19jb250ZXh0LT5tdWx0aWJ5dGVfbG9jYWxlID0gZmFsc2U7CgogIC8qIE1hbnkgdGhp
bmdzIGRlcGVuZCBvbiBkZWNpc2lvbnMgbWFkZSBpbiBmc2FsZXhfc3ludGF4ICgpLCBzbyBu
b3RlCiAgICAgaGVyZSB0aGF0IGl0IGhhc24ndCBiZWVuIGNhbGxlZCB5ZXQsIGFuZCBmYWls
IGdyYWNlZnVsbHkgbGF0ZXIgaWYKICAgICB0aGUgY2xpZW50IGhhc24ndCBjYWxsZWQgdGhl
IGZ1bmN0aW9uIGJlZm9yZSBjb21tZW5jaW5nIHdvcmsuICAqLwogIG5ld19jb250ZXh0LT5z
eW50YXhfaW5pdGlhbGlzZWQgPSBmYWxzZTsKCiAgLyogQWRkIHRoaXMgaW5zdGFuY2UgYXQg
dGhlIGhlYWQgb2YgdGhlIG1vZHVsZSdzIGxpc3QuICAqLwogIG5ld19jb250ZXh0LT5uZXh0
X2luc3RhbmNlID0gZnNhbGV4X2luc3RhbmNlX2xpc3RfaGVhZDsKICBmc2FsZXhfaW5zdGFu
Y2VfbGlzdF9oZWFkID0gbmV3X2NvbnRleHQ7CgogIHJldHVybiBuZXdfY29udGV4dDsKfQoK
XV0pKQoKYXNzZXJ0KGY6d3JpdGUoW1sKLyogSW50ZXJuYWwgZnVuY3Rpb24gdG8gZnJlZSBh
bGwgcmVzb3VyY2VzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdXNlZAogICBieSBhbiBpbnN0
YW5jZS4gIFRoZSBwb2ludGVyIGlzIG5vIGxvbmdlciB2YWxpZCBhZnRlciB0aGlzIGNhbGwu
ICAqLwpzdGF0aWMgdm9pZApmcmVlX2luc3RhbmNlIChmc2FsZXhfY3R4dF90ICpsZXhlcikK
ewogIC8qIEZyZWUgdG9wLWxldmVsIHN0cnVjdHVyZXMuICAqLwogIGZyZWUgKGxleGVyLT5s
b2NhbGVfbmFtZSk7CiAgZnJlZSAobGV4ZXItPm1iY3NldHMpOwogIGZyZWUgKGxleGVyKTsK
CiAgLyogTm90ZSB0aGF0IG11bHRpYnl0ZSBzZXRzIGFyZSBubyBsb25nZXIgc3RvcmVkIGV4
cGxpY2l0bHkgaW4KICAgICB0aGUgaW5zdGFuY2U7IGFwYXJ0IGZyb20gdGhlIHBvaW50ZXIg
bGlzdCAoZnJlZWQgYWJvdmUpLCB0aGUKICAgICBzZXQgY29udGVudHMgYXJlIGZyZWVkIHNl
cGFyYXRlbHkgd2hlbiBtYmNzZXRzIG1vZHVsZSBpcwogICAgIGRlc3Ryb3llZC4gICovCn0K
Cl1dKSkKCmFzc2VydChmOndyaXRlKERlY2xzWyJsZXgtZGVzdHJveS1tb2R1bGUiXSwgW1sK
ewogIGZzYWxleF9jdHh0X3QgKnBfbGlzdDsKICBmc2FsZXhfY3R4dF90ICpwX25leHQ7Cgog
IC8qIE1vdmUgdGhlIGdsb2JhbCBsaXN0IGhlYWQgaW50byBhIGxvY2FsIHZhcmlhYmxlLCBh
bmQgaW1tZWRpYXRlbHkKICAgICBjbGVhciB0aGUgZ2xvYmFsLiAgVGhpcyBpcyBhIGhhbGYt
aGVhcnRlZCBhdHRlbXB0IHRvIGF2b2lkIHJhY2UKICAgICBjb25kaXRpb25zOyB0byBkbyB0
aGluZ3MgcHJvcGVybHksIGEgc3lzdGVtLXdpZGUgYXRvbWljCiAgICAgb3BlcmF0aW9uIChs
b2NrZWQsIGluY2x1ZGluZyBtdWx0aS1DUFUgY2FjaGUgY29oZXJlbmN5KSBvcGVyYXRpb24K
ICAgICBzaG91bGQgYmUgdXNlZC4gICovCiAgcF9saXN0ID0gZnNhbGV4X2luc3RhbmNlX2xp
c3RfaGVhZDsKICBmc2FsZXhfaW5zdGFuY2VfbGlzdF9oZWFkID0gTlVMTDsKCiAgLyogVHJh
dmVyc2UgdGhlIGxpc3Qgb2YgaW5zdGFuY2VzLCByZWxlYXNpbmcgYWxsIHJlc291cmNlcwog
ICAgIGFzc29jaWF0ZWQgd2l0aCBlYWNoIG9uZS4gICovCiAgd2hpbGUgKHBfbGlzdCkKICAg
IHsKICAgICAgcF9uZXh0ID0gcF9saXN0LT5uZXh0X2luc3RhbmNlOwogICAgICBmcmVlX2lu
c3RhbmNlIChwX2xpc3QpOwogICAgICBwX2xpc3QgPSBwX25leHQ7CiAgICB9Cn0KCl1dKSkK
CmFzc2VydChmOndyaXRlKERlY2xzWyJsZXgtaW5pdGlhbGlzZSJdLCBbWwp7CiAgLyogSW5p
dGlhbGlzZSB0aGUgbGlua2VkIGxpc3Qgb2YgaW5zdGFuY2VzIGNyZWF0ZWQgYnkgdGhpcyBt
b2R1bGUuICAqLwogIGZzYWxleF9pbnN0YW5jZV9saXN0X2hlYWQgPSBOVUxMOwoKICBhdGV4
aXQgKGZzYWxleF9kZXN0cm95X21vZHVsZSk7Cn0KCl1dKSkKCi0tIEZpbmFsbHksIGFkZCB0
cmFpbGVyIGxpbmUgKHZpbSkKYXNzZXJ0KGY6d3JpdGUoW1sKLyogdmltOnNldCBzaGlmdHdp
ZHRoPTI6ICovCl1dKSkKCmFzc2VydChmOmNsb3NlKCkpCgotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQoKLS0tLS0tLS0tLS0tLS0tLSoqKioqKioqIGZzYXBhcnNlLmggKioqKioqKiotLS0tLS0t
LS0tLS0tLS0tCgpwcmludCgiQ3JlYXRpbmcgZnNhcGFyc2UuaC4uLiIpCmxvY2FsIGYgPSBh
c3NlcnQoaW8ub3BlbigiZnNhcGFyc2UuaCIsICJ3IikpCmFzc2VydChmOndyaXRlKFtbCi8q
IGZzYXBhcnNlIC0tIEJ1aWxkIGEgc3RydWN0dXJlIG5hbWluZyByZWxhdGlvbnNoaXBzIChz
ZXF1ZW5jZXMsCiAgICAgICAgICAgICAgIGFsdGVybmF0aXZlcywgb3B0aW9ucyBhbmQgcHJl
Y2VkZW5jZSkgb2YgdG9rZW5zCgpdXSkpCmFzc2VydChmOndyaXRlKFJhd1RleHQoIkNvcHly
aWdodC5kZmFjIiksICJcbiIpKQphc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJMaWNlbnNlV2Fy
cmFudHkuZGZhYyIpLCAiXG4iKSkKYXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgiQXV0aG9ycy5k
ZmFjIikpKQphc3NlcnQoZjp3cml0ZShbWwoKLyogMjAxNDogUmVwYWNrYWdlZCBieSAidW50
YW5nbGUiIHNjcmlwdCwgd3JpdHRlbiBieSBiZWhvZmZza2kuICAqLwoKLyogVGhpcyBmdW5j
dGlvbiByZWNlaXZlcyBhIHN0cmVhbSBvZiB0b2tlbnMgZnJvbSBmc2FsZXgsIGFuZAogICBw
cm9jZXNzZXMgdGhlbSB0byBpbXBvc2UgcHJlY2VkZW5jZSBydWxlcyBhbmQgdG8gZGVzY3Jp
YmUgY29tcGxleAogICBwYXR0ZXJuIGVsZW1lbnRzIHRoYXQgYXJlIGJleW9uZCB0aGUgY2Fw
YWJpbGl0eSBvZiB0aGUgc2ltcGxlCiAgIGxleGVyLiAgSW4gYWRkaXRpb24gdG8gdGhlIGNh
c2VzIGV4cGxpY2l0IGluIHRoZSBzeW50YXggKGUuZy4KICAgIihhYnxjKSIsIHZhcmlhYmxl
LWxlbmd0aCBtdWx0aWJ5dGUgZW5jb2RpbmdzIChVVEYtODsgY29kZXNldHMKICAgaW5jbHVk
aW5nIG1vZGlmaWVycyBhbmQvb3Igc2hpZnQgaXRlbXMpIGFsc28gcmVxdWlyZSB0aGVzZSBl
bmhhbmNlZAogICBmYWNpbGl0aWVzLiAgKi8KCl1dKSkKCi0tIEFkZCBwcmVwcm9jZXNzb3Ig
bGluZXMgdG8gbWFrZSB0aGlzIGhlYWRlciBmaWxlIGlkZW1wb3RlbnQuCmFzc2VydChmOndy
aXRlKFtbCiNpZm5kZWYgRlNBUEFSU0VfSAojZGVmaW5lIEZTQVBBUlNFX0ggMQoKLyogQWx3
YXlzIGltcG9ydCBlbnZpcm9ubWVudC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGl0ZW1zIGZp
cnN0LiAgKi8KI2luY2x1ZGUgPGNvbmZpZy5oPgoKI2luY2x1ZGUgImZzYXRva2VuLmgiCiNp
bmNsdWRlICJwcm90by1sZXhwYXJzZS5oIgoKLyogTXVsdGlwbGUgcGFyc2VyIGluc3RhbmNl
cyBjYW4gZXhpc3QgaW4gcGFyYWxsZWwsIHNvIGRlZmluZSBhbiBvcGFxdWUKICAgdHlwZSB0
byBjb2xsZWN0IHRvZ2V0aGVyIGFsbCB0aGUgY29udGV4dCByZWxhdGluZyB0byBlYWNoIGlu
c3RhbmNlLiAgKi8KdHlwZWRlZiBzdHJ1Y3QgZnNhcGFyc2VfY3R4dF9zdHJ1Y3QgZnNhcGFy
c2VfY3R4dF90OwoKLyogQWxsb3cgY29uZmlndXJhYmxlIHBhcnNlci9sZXhlciBjb21iaW5h
dGlvbnMgYnkgdXNpbmcgYSBwbHVnaW4gaW50ZXJmYWNlCiAgIGZvciBsZXhlciBpbnZvY2F0
aW9uLiAgKi8KdHlwZWRlZiBmc2F0b2tlbl90b2tlbl90CmZzYXBhcnNlX2xleGVyX2ZuX3Qg
KHZvaWQgKmxleGVyX2NvbnRleHQpOwoKLyogRnVuY3Rpb25zIHRvIGluaXRpYWxpc2UgYW5k
IHRlYXIgZG93biBlbnRpcmUgbW9kdWxlIGFuZCBhbGwgYXNzb2NpYXRlZAogICBpbnN0YW5j
ZXMuICAqLwoKXV0pKQoKV3JpdGVFeHRlcm5EZWNsKGYsIERlY2xzWyJwYXJzZS1pbml0aWFs
aXNlIl0pCldyaXRlRXh0ZXJuRGVjbChmLCBEZWNsc1sicGFyc2UtZGVzdHJveS1tb2R1bGUi
XSkKCmFzc2VydChmOndyaXRlKFtbCi8qIEZ1bmN0aW9ucyB0byBjcmVhdGUgYSBuZXcgcGFy
c2VyIGluc3RhbmNlLCBhbmQgdG8gY29ubmVjdCBpdCB3aXRoCiAgIGEgY29tcGF0aWJsZSBs
ZXhlciBpbnN0YW5jZS4gICovCgpdXSkpCldyaXRlRXh0ZXJuRGVjbChmLCBEZWNsc1sicGFy
c2UtbmV3Il0pCldyaXRlRXh0ZXJuRGVjbChmLCBEZWNsc1sicGFyc2UtbGV4ZXIiXSkKCi0t
IEZJWE1FOiBUaGUgZm9sbG93aW5nIGlzIGEgY29weS1wYXN0ZS1hbmQtcmVuYW1lLWVkaXQg
ZnJvbSB0aGUgZnNhbGV4Ci0tIGNvZGUuICBJcyB0aGVyZSBhIGxlc3MgcmVkdW5kYW50IHdh
eSBvZiBkb2luZyB0aGlzPwoKLS0gV2hpbGUgZGZhLmggZGVjbGFyZXMgZGZhd2FybigpIGFu
ZCBkZmFlcnJvcigpLCBhbmQgZGVtYW5kcyB0aGF0IHRoZQotLSBjbGllbnQgc3VwcGx5IGZ1
bmN0aW9ucyBhdCBsaW5rIHRpbWUsIHdlIGluc3RlYWQgcHJvdmlkZSBhbgotLSBpbnRlcmZh
Y2UgZnVuY3Rpb24gc28gdGhhdCB0aGUgZnVuY3Rpb25zIGNhbiBiZSBoYW5kZWQgb3Zlcgot
LSBleHBsaWNpdGx5LiAgVGhpcyBzdHlsZSBtYXkgYmUgdXNlZnVsIGluIHRoZSBmdXR1cmUg
aWYgd2Ugd2FudCB0bwotLSBtb3ZlIGZyb20gYSBzaW5nbGUgcGFyc2VyIGluc3RhbmNlIHRv
IG11bHRpcGxlIGluc3RhbmNlcyAob2JqZWN0cz8pCmFzc2VydChmOndyaXRlKFtbCi8qIERl
ZmluZSBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciB3YXJuaW5nIGFuZCBlcnJvciBjYWxsYmFj
a3MuICAqLwp0eXBlZGVmIHZvaWQKZnNhcGFyc2Vfd2Fybl9jYWxsYmFja19mbiAoY29uc3Qg
Y2hhciAqKTsKdHlwZWRlZiB2b2lkIC8qID8/IF9Ob3JldHVybj8gKi8KZnNhcGFyc2VfZXJy
b3JfY2FsbGJhY2tfZm4gKGNvbnN0IGNoYXIgKik7CgovKiBSZWNlaXZlIGZ1bmN0aW9ucyB0
byBkZWFsIHdpdGggZXhjZXB0aW9ucyBkZXRlY3RlZCBieSB0aGUgcGFyc2VyOgogICBXYXJu
aW5ncyBhbmQgZXJyb3JzLiAgSW50ZXJuYWxseSwgd2UgYWRkIHRoZSBfTm9yZXR1cm4gYXR0
cmlidXRlCiAgIHRvIHRoZSBlcnJvciBjYWxsYmFjaywgdG8gaGVscCB0aGUgY29tcGlsZXIg
d2l0aCBjb2RlIGZsb3cKICAgYW5hbHlzaXMuICAqLwpleHRlcm4gdm9pZApmc2FwYXJzZV9l
eGNlcHRpb25fZm5zIChmc2FwYXJzZV9jdHh0X3QgKnBhcnNlciwKICAgICAgICAgICAgICAg
ICAgICAgIGZzYXBhcnNlX3dhcm5fY2FsbGJhY2tfZm4gKndhcm5pbmdmbiwKICAgICAgICAg
ICAgICAgICAgICAgIGZzYXBhcnNlX2Vycm9yX2NhbGxiYWNrX2ZuICplcnJvcmZuKTsKCl1d
KSkKCldyaXRlRXh0ZXJuRGVjbChmLCBEZWNsc1sicGFyc2UiXSkKCldyaXRlRXh0ZXJuRGVj
bChmLCBEZWNsc1sicGFyc2UtZ2V0LXRva2VuLWxpc3QiXSkKCi0tIEZpbmFsbHksIGFkZCB0
cmFpbGVyIGxpbmVzIChpZGVtcG90ZW5jeSwgdmltKQphc3NlcnQoZjp3cml0ZShbWwojZW5k
aWYgLyogRlNBUEFSU0VfSCAqLwoKLyogdmltOnNldCBzaGlmdHdpZHRoPTI6ICovCl1dKSkK
CmFzc2VydChmOmNsb3NlKCkpCgotLS0tLS0tLS0tLS0tLS0tKioqKioqKiogZnNhcGFyc2Uu
YyAqKioqKioqKi0tLS0tLS0tLS0tLS0tLS0KCnByaW50KCJDcmVhdGluZyBmc2FwYXJzZS5j
Li4uIikKbG9jYWwgZiA9IGFzc2VydChpby5vcGVuKCJmc2FwYXJzZS5jIiwgInciKSkKYXNz
ZXJ0KGY6d3JpdGUoW1sKLyogZnNhcGFyc2UgLS0gQnVpbGQgYSBzdHJ1Y3R1cmUgbmFtaW5n
IHJlbGF0aW9uc2hpcHMgKHNlcXVlbmNlcywKICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmVz
LCBiYWNrcmVmZXJlbmNlcywgb3B0aW9ucyBhbmQgcHJlY2VkZW5jZSkKICAgICAgICAgICAg
ICAgb2YgdG9rZW5zCgpdXSkpCmFzc2VydChmOndyaXRlKFJhd1RleHQoIkNvcHlyaWdodC5k
ZmFjIiksICJcbiIpKQphc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJMaWNlbnNlV2FycmFudHku
ZGZhYyIpLCAiXG4iKSkKYXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgiQXV0aG9ycy5kZmFjIikp
KQphc3NlcnQoZjp3cml0ZShbWwoKLyogMjAxNDogUmVwYWNrYWdlZCBieSAidW50YW5nbGUi
IHNjcmlwdCwgd3JpdHRlbiBieSBiZWhvZmZza2kuICAqLwoKLyogVGhpcyBmdW5jdGlvbiBy
ZWNlaXZlcyBhIHN0cmVhbSBvZiB0b2tlbnMgZnJvbSBmc2FsZXgsIGFuZCBwcm9jZXNzZXMK
ICAgdGhlbSB0byBpbXBvc2UgcHJlY2VkZW5jZSBydWxlcyBhbmQgdG8gZGVzY3JpYmUgY29t
cGxleCBwYXR0ZXJuCiAgIGVsZW1lbnRzIHRoYXQgYXJlIGJleW9uZCB0aGUgY2FwYWJpbGl0
eSBvZiB0aGUgc2ltcGxlIGxleGVyLiAgSW4KICAgYWRkaXRpb24gdG8gdGhlIGNhc2VzIGV4
cGxpY2l0IGluIHRoZSBzeW50YXggKGUuZy4iKGFifGMpIiwKICAgdmFyaWFibGUtbGVuZ3Ro
IG11bHRpYnl0ZSBlbmNvZGluZ3MgKFVURi04OyBjb2Rlc2V0cyBpbmNsdWRpbmcKICAgbW9k
aWZpZXJzIGFuZC9vciBzaGlmdCBpdGVtcykgYWxzbyByZXF1aXJlIHRoZXNlIGVuaGFuY2Vk
CiAgIGZhY2lsaXRpZXMuICAqLwoKXV0pKQoKYXNzZXJ0KGY6d3JpdGUoW1sKLyogQWx3YXlz
IGltcG9ydCBlbnZpcm9ubWVudC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGl0ZW1zIGZpcnN0
LiAgKi8KI2luY2x1ZGUgPGNvbmZpZy5oPgoKI2luY2x1ZGUgPGFzc2VydC5oPgojaW5jbHVk
ZSAiY2hhcmNsYXNzLmgiCiNpbmNsdWRlICJmc2FwYXJzZS5oIgojaW5jbHVkZSAiZnNhbGV4
LmgiCiNpbmNsdWRlICJmc2F0b2tlbi5oIgojaW5jbHVkZSAibWJjc2V0cy5oIgojaW5jbHVk
ZSAicHJvdG8tbGV4cGFyc2UuaCIKI2luY2x1ZGUgPHN0ZGJvb2wuaD4KI2luY2x1ZGUgPHN0
ZGxpYi5oPgojaW5jbHVkZSAieGFsbG9jLmgiCgovKiBnZXR0ZXh0LmggZW5zdXJlcyB0aGF0
IHdlIGRvbid0IHVzZSBnZXR0ZXh0IGlmIEVOQUJMRV9OTFMgaXMgbm90IGRlZmluZWQgKi8K
I2luY2x1ZGUgImdldHRleHQuaCIKI2RlZmluZSBfKHN0cikgZ2V0dGV4dCAoc3RyKQoKI2lu
Y2x1ZGUgPHdjaGFyLmg+CiNpbmNsdWRlIDx3Y3R5cGUuaD4KCl1dKSkKCi0tIEdlbmVyYWwg
aGVscGVyIG1hY3Jvcwphc3NlcnQoZjp3cml0ZShbWwojaWYgSEFWRV9MQU5HSU5GT19DT0RF
U0VUCiMgaW5jbHVkZSA8bGFuZ2luZm8uaD4KI2VuZGlmCgpdXSkpCgphc3NlcnQoZjp3cml0
ZShbWwovKiBmc2FwYXJzZV9jdHh0OiBHYXRoZXIgYWxsIHRoZSBjb250ZXh0IHRvIGRvIHdp
dGggdGhlIHBhcnNlciBpbnRvIGEKICAgc2luZ2xlIHN0cnVjdC4gIFdlIGRvIHRoaXMgbWFp
bmx5IGJlY2F1c2UgaXQgbWFrZSBpdCBlYXNpZXIgdG8KICAgY29udGVtcGxhdGUgaGF2aW5n
IG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGlzIG1vZHVsZSBydW5uaW5nIGluCiAgIHBhcmFs
bGVsLCBidXQgYWxzbyBiZWNhdXNlIGl0IG1ha2VzIHRyYW5zbGF0aW5nIGZyb20gImRmYS0+
IiBlYXNpZXIuCiAgIFRoaXMgZGVmaW5pdGlvbiBmbGVzaGVzIG91dCB0aGUgb3BhcXVlIHR5
cGUgZ2l2ZW4gaW4gdGhlIG1vZHVsZQogICBoZWFkZXIuICAqLwpzdHJ1Y3QgZnNhcGFyc2Vf
Y3R4dF9zdHJ1Y3QKewogIC8qIFNpbmdseS1saW5rZWQgbGlzdCBvZiBhbGwgcGFyc2VyIGlu
c3RhbmNlcywgc28gZGVzdHJveV9tb2R1bGUgY2FuCiAgICAgcmVsZWFzZSBhbGwgcmVzb3Vy
Y2VzIGJ5IHRyYXZlcnNpbmcgdGhlIGxpc3QuICAqLwogIGZzYXBhcnNlX2N0eHRfdCAqbmV4
dF9pbnN0YW5jZTsKCiAgLyogV2FybmluZyBhbmQgYWJvcnQgZnVuY3Rpb25zIHByb3ZpZGVk
IGJ5IGNsaWVudC4gICovCiAgZnNhbGV4X3dhcm5fY2FsbGJhY2tfZm4gKndhcm5fY2xpZW50
OwogIGZzYWxleF9lcnJvcl9jYWxsYmFja19mbiAqYWJhbmRvbl93aXRoX2Vycm9yOwoKICAv
KiBQbHVnLWluIGZ1bmN0aW9ucyBhbmQgY29udGV4dCB0byBkZWFsIHdpdGggbGV4ZXIgYXQg
YXJtJ3MKICAgICBsZW5ndGguICAqLwogIHByb3RvX2xleHBhcnNlX2xleF9mbl90ICpsZXhl
cjsKICBwcm90b19sZXhwYXJzZV9leGNoYW5nZV9mbl90ICpsZXhfZXhjaGFuZ2U7CiAgdm9p
ZCAqbGV4X2NvbnRleHQ7CgogIC8qIEluZm9ybWF0aW9uIGFib3V0IGxvY2FsZSAobmVlZHMg
dG8gc3luYyB3aXRoIGxleGVyLi4uPykgKi8KICBib29sIG11bHRpYnl0ZV9sb2NhbGU7CiAg
Ym9vbCB1bmlieXRlX2xvY2FsZTsKCiAgLyogVmFyaWFibGUgdG8gc3RvcmUgYSBkeW5hbWlj
YWxseS1hbGxvY2F0ZWQgbGlzdCBvZiB3aWRlIGNoYXJhY3RlcnMuCiAgICAgVGhlIHBhcnNl
ciBuZWVkcyB0byBmZXRjaCB0aGlzIGxpc3Qgd2hlbmV2ZXIgYSBXQ0hBUiB0b2tlbiBpcwog
ICAgIHJlY2VpdmVkLiAgKi8KICBpbnQgd2lkZV9jaGFyc19tYXg7CiAgd2NoYXJfdCAqd2lk
ZV9jaGFyX2xpc3Q7CgogIGZzYXRva2VuX3Rva2VuX3QgbG9va2FoZWFkX3Rva2VuOwoKICBz
aXplX3QgY3VycmVudF9kZXB0aDsgICAgICAvKiBDdXJyZW50IGRlcHRoIG9mIGEgaHlwb3Ro
ZXRpY2FsIHN0YWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9sZGluZyBkZWZl
cnJlZCBwcm9kdWN0aW9ucy4gIFRoaXMgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1c2VkIHRvIGRldGVybWluZSB0aGUgZGVwdGggdGhhdCB3aWxsIGJlCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgb2YgdGhlIHJlYWwgc3RhY2sgbGF0ZXIgb24g
aW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZmFhbmFseXplLiAgKi8KXV0pKQoK
LS0gVWdoLi4uIGNodWNrIGluIGEgc2xhYiBvZiB0aGUgZGZhIHN0cnVjdCBoZXJlLCBzaWdo
Lgphc3NlcnQoZjp3cml0ZShFZGl0ZWRUZXh0KCJkZmEtc3RydWN0IHBhcnNlciIsCiAgICAg
ICAgICAiICB0b2tlbiAlKnRva2VucyIsICIgIGZzYXRva2VuX3Rva2VuX3QgKnRva2VucyIs
CiAgICAgICAgICAiICB0b2tlbiB1dGY4X2FueWNoYXJfIiwgIiAgZnNhdG9rZW5fdG9rZW5f
dCB1dGY4X2FueWNoYXJfIikpKQoKYXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgiZGZhLXN0cnVj
dCBwYXJzZXItbXVsdGlieXRlIiksICJcbiIpKQoKLS0gVXNlIG1iY3NldHMgdG8gaGFuZGxl
IG11bHRpYnl0ZSBzZXRzLCBpbnN0ZWFkIG9mIGRvaW5nIHRoZXNlIG91cnNlbHZlcwphc3Nl
cnQoZjp3cml0ZShbWwogIG1iY3NldHNfc2V0X3QgKiptYmNzZXRzOwogIHNpemVfdCBubWJj
c2V0czsKICBzaXplX3QgbWJjc2V0c19hbGxvYzsKXV0pKQoKYXNzZXJ0KGY6d3JpdGUoW1sK
fTsKCi8qIExpbmtlZCBsaXN0IG9mIGFsbCBpbnN0YW5jZXMgY3JlYXRlZCBieSB0aGlzIG1v
ZHVsZS4gICovCnN0YXRpYyBmc2FwYXJzZV9jdHh0X3QgKmZzYXBhcnNlX2luc3RhbmNlX2xp
c3RfaGVhZCA9IE5VTEw7CgpdXSkpCgotLSBBZGQgdXRpbGl0eSBmdW5jdGlvbiAibWF5YmUt
cmVhbGxvYyIsIHByZXZpb3VzbHkgIlJFQUxMT0NfSUZfTkVDRVNTQVJZIiwKLS0gaGVyZSwg
YXMgYSBnZW5lcmljIGhlbHBlciBmdW50aW9uLgphc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJt
YXliZS1yZWFsbG9jIiksICJcbiIpKQoKYXNzZXJ0KGY6d3JpdGUoRWRpdGVkVGV4dCgidXNp
bmdfdXRmOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiXG5pbnRcbnVzaW5nX3V0Zjgg
IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbnN0YXRpYyBpbnRcbnVzaW5nX3V0
ZjggIiksICJcbiIpKQoKYXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgicmVjdXJzaXZlLWRlc2Nl
bnQgcGFyc2VyIGludHJvIiksICJcbiIpKQoKbG9jYWwgQWRkdG9rX21iQm9keSA9IEVkaXRl
ZFRleHQoImFkZHRva19tYiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHRva19t
YiAlKHRva2VuIHQsIiwKICAgICAgICAgICAiYWRkdG9rX21iIChmc2FwYXJzZV9jdHh0X3Qg
KnBhcnNlciwgZnNhdG9rZW5fdG9rZW5fdCB0LCIsCiAgICAgICAgICAgImRmYSUtPiIsICJw
YXJzZXItPiIsCiAgICAgICAgICAgIk1CX0NVUl9NQVggPiAxIiwgInBhcnNlci0+bXVsdGli
eXRlX2xvY2FsZSIsCiAgICAgICAgICAgIiUtJS1kZXB0aCIsICItLXBhcnNlci0+Y3VycmVu
dF9kZXB0aCIsCiAgICAgICAgICAgIiUrJStkZXB0aCIsICIrK3BhcnNlci0+Y3VycmVudF9k
ZXB0aCIpCkFkZHRva19tYkJvZHkgPSBUZXh0U3Vic3QoQWRkdG9rX21iQm9keSwgW1sKICBp
ZiAoZGVwdGggPiBwYXJzZXItPmRlcHRoKQogICAgcGFyc2VyLT5kZXB0aCA9IGRlcHRoOwpd
XSwgW1sKICBpZiAocGFyc2VyLT5kZXB0aCA8IHBhcnNlci0+Y3VycmVudF9kZXB0aCkKICAg
IHBhcnNlci0+ZGVwdGggPSBwYXJzZXItPmN1cnJlbnRfZGVwdGg7Cl1dKQphc3NlcnQoZjp3
cml0ZShGU0FUb2tlblN1YnN0KEFkZHRva19tYkJvZHkpLCAiXG4iKSkKYXNzZXJ0KGY6d3Jp
dGUoRWRpdGVkVGV4dCgiYWRkdG9rX3djIGZ3ZCBkZWNsIiwKICAgICAgICAgImFkZHRva193
YyAlKCIsICJhZGR0b2tfd2MgKGZzYXBhcnNlX2N0eHRfdCAqcGFyc2VyLCAiKSwKICAgICAg
ICAgICAgICAgIlxuIikpCgotLVtbIC0tIE1CQ1NFVFMKbG9jYWwgQWRkdG9rQm9keSA9IEVk
aXRlZFRleHQoImFkZHRvayIsCiAgICAgICAgICAgIlxuYWRkdG9rICUodG9rZW4gdCUpIiwK
ICAgICAgICAgICAiXG5hZGR0b2sgKGZzYXBhcnNlX2N0eHRfdCAqcGFyc2VyLCBmc2F0b2tl
bl90b2tlbl90IHQpIiwKICAgICAgICAgICAiZGZhJS0+IiwgInBhcnNlci0+IiwKICAgICAg
ICAgICAiTUJfQ1VSX01BWCA+IDEiLCAicGFyc2VyLT5tdWx0aWJ5dGVfbG9jYWxlIiwKICAg
ICAgICAgICAiICBhZGR0b2tfd2MgJSgiLCAiICBhZGR0b2tfd2MgKHBhcnNlciwgIiwKICAg
ICAgICAgICAiICBhZGR0b2tfbWIgJSgiLCAiICBhZGR0b2tfbWIgKHBhcnNlciwgIiwKICAg
ICAgICAgICAiICBhZGR0b2sgJSgiLCAgICAiICBhZGR0b2sgKHBhcnNlciwgIikKYXNzZXJ0
KGY6d3JpdGUoRlNBVG9rZW5TdWJzdChBZGR0b2tCb2R5KSkpCi0tXV0KCmFzc2VydChmOndy
aXRlKFtbCi8qIFNpZ2guICBNYmNzZXRzIGlzIHNvIGRpc3J1cHRpdmUgKGludGltYXRlIGRl
dGFpbHMgaGlkZGVuLCBieQogICBkZXNpZ24pLCB0aGF0IHdlIGFyZSB3cml0aW5nIGFkZHRv
ayBoZXJlIGZyb20gc2NyYXRjaC4gICovCnN0YXRpYyB2b2lkCmFkZHRvayAoZnNhcGFyc2Vf
Y3R4dF90ICpwYXJzZXIsIGZzYXRva2VuX3Rva2VuX3QgdCkKewogIGJvb2wgbmVlZF9vciA9
IGZhbHNlOwogIG1iY3NldHNfc2V0X3QgKndvcmtfbWJjOwogIGJvb2wgaW52ZXJ0OwogIGNo
YXJjbGFzc190ICpjaGFyY2xhc3M7CiAgc2l6ZV90IG5jaGFyczsKICBzaXplX3QgbmNoX2Ns
YXNzZXM7CiAgc2l6ZV90IG5yYW5nZXM7CiAgc2l6ZV90IG5lcXVpdnM7CiAgc2l6ZV90IG5j
b2xsX2VsZW1zOwoKICBpZiAodCAhPSBGU0FUT0tFTl9US19NQkNTRVQgfHwgcGFyc2VyLT51
bmlieXRlX2xvY2FsZSkKICAgIHsKICAgICAgYWRkdG9rX21iIChwYXJzZXIsIHQsIDMpOwog
ICAgICByZXR1cm47CiAgICB9CgogIHdvcmtfbWJjID0gcGFyc2VyLT5tYmNzZXRzW3BhcnNl
ci0+bm1iY3NldHMgLSAxXTsKICBtYmNzZXRzX2dldF9jaGFyYWN0ZXJpc3RpY3MgKHdvcmtf
bWJjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmludmVydCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZjaGFyY2xhc3MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmbmNoYXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5j
aF9jbGFzc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5yYW5nZXMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVxdWl2cywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZuY29sbF9lbGVtcyk7CgogIGlmIChuY2hhcnMgJiYgIWludmVy
dCkKICAgIHsKICAgICAgc2l6ZV90IGk7CiAgICAgIHdjaGFyX3QgKmNoYXJfbGlzdDsKCiAg
ICAgIGNoYXJfbGlzdCA9IHhubWFsbG9jIChuY2hhcnMsIHNpemVvZiAqY2hhcl9saXN0KTsK
ICAgICAgbWJjc2V0c19nZXRfY2hhcnMgKHdvcmtfbWJjLCBjaGFyX2xpc3QpOwogICAgICBh
ZGR0b2tfd2MgKHBhcnNlciwgY2hhcl9saXN0WzBdKTsKICAgICAgZm9yIChpID0gMTsgaSA8
IG5jaGFyczsgaSsrKQogICAgICAgIHsKICAgICAgICAgIGFkZHRva193YyAocGFyc2VyLCBj
aGFyX2xpc3RbaV0pOwogICAgICAgICAgYWRkdG9rIChwYXJzZXIsIEZTQVRPS0VOX1RLX09S
KTsKICAgICAgICB9CiAgICAgIGZyZWUgKGNoYXJfbGlzdCk7CiAgICAgIG5lZWRfb3IgPSB0
cnVlOwogICAgfQoKICAvKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG5vbi10cml2aWFsIGNvbXBv
bmVudHMsIGl0J3MgdG9vIGhhcmQgdG8gZGVhbAogICAgIHdpdGggaGVyZSwgc28gaGFuZCBp
dCBvbiB0byBoaWdoZXItdXAgbWFjaGluZXJ5LiAgKi8KICBpZiAoaW52ZXJ0IHx8IG5jaF9j
bGFzc2VzIHx8IG5yYW5nZXMgfHwgbmNvbGxfZWxlbXMpCiAgICB7CiAgICAgIGFkZHRva19t
YiAocGFyc2VyLCBGU0FUT0tFTl9US19NQkNTRVQsCiAgICAgICAgICAgICAgICAgKChwYXJz
ZXItPm5tYmNzZXRzIC0gMSkgPDwgMikgKyAzKTsKICAgICAgaWYgKG5lZWRfb3IpCiAgICAg
ICAgYWRkdG9rIChwYXJzZXIsIEZTQVRPS0VOX1RLX09SKTsKICAgIH0KCiAgLyogSW5kaXZp
ZHVhbCBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBoYW5kbGVkIGFib3ZlLCBzbyB0aGUgb25seSBj
YXNlCiAgICAgcmVtYWluaW5nIGlzIHdoZXJlIGNvZGVzIGhhdmUgYmVlbiBzaW1wbGlmaWVk
IGludG8gY2hhcmNsYXNzCiAgICAgbWVtYmVycy4gICovCiAgZWxzZSBpZiAoY2hhcmNsYXNz
KQogICAgewogICAgICBhZGR0b2sgKHBhcnNlciwgRlNBVE9LRU5fVEtfQ1NFVCArIGNoYXJj
bGFzc19nZXRfaW5kZXggKGNoYXJjbGFzcykpOwogICAgICBpZiAobmVlZF9vcikKICAgICAg
ICBhZGR0b2sgKHBhcnNlciwgRlNBVE9LRU5fVEtfT1IpOwogICAgfQp9CgpdXSkpCgotLSBD
SEFOR0UsIHBvc3NpYmx5IGJ1Z2d5OiBjdXJfbWJfbGVuIGFwcGVhcnMgaW4gY2xlYXJseS1j
b25uZWN0ZWQKLS0gcGxhY2VzIGluIHRoZSBsZXhlciAoRkVUQ0hfV0MgYW5kIHBhcnNlX2Jy
YWNrZXRfZXhwKTsgaG93ZXZlciwgaXQKLS0gYWxzbyBhcHBlYXJzIGluIGFkZHRva193Yywg
aW4gYSB3YXkgdGhhdCBzZWVtcyB0byBiZSBsb2NhbC1vbmx5LgotLSBJJ20gY2hvb3Npbmcg
dG8gYWRkIGEgbG9jYWwgYWRkdG9rX21iX2xlbiB2YXJpYWJsZSBpbiBhZGR0b2tfd2MsCi0t
IGFzIG15IGJlbGllZiAoYWZ0ZXIgcmV2aWV3aW5nIHRoZSBjb2RlKSBpcyB0aGF0IHRoZSB0
d28gdXNlcyBvZgotLSB0aGUgc2FtZSB2YXJpYWJsZSBhcmUgbm90IHJlbGF0ZWQuICBXaXRo
b3V0IHRoaXMgYWRkaXRpb24sIHRoZQotLSB2YXJpYWJsZSBpcyBmbGFnZ2VkIGFzIHVuZGVj
bGFyZWQsIGFzIHRoZSBvdGhlciBkZWZpbml0aW9uIGlzIGluCi0tIHRoZSBsZXhlciBtb2R1
bGUuCmxvY2FsIEFkZHRva193Y01CU0JvZHkgPSBFZGl0ZWRUZXh0KCJhZGR0b2tfd2MiLAog
ICAgICAgICAgICJcbmFkZHRva193YyAlKCIsICJcbmFkZHRva193YyAoZnNhcGFyc2VfY3R4
dF90ICpwYXJzZXIsICIsCiAgICAgICAgICAgIiAgYWRkdG9rX21iICUoIiwgIiAgYWRkdG9r
X21iIChwYXJzZXIsICIsCiAgICAgICAgICAgIiAgYWRkdG9rICUoIiwgICAgIiAgYWRkdG9r
IChwYXJzZXIsICIpCgpBZGR0b2tfd2NNQlNCb2R5ID0gVGV4dFN1YnN0KEFkZHRva193Y01C
U0JvZHksIFtbCiAgdW5zaWduZWQgY2hhciBidWZbTUJfTEVOX01BWF07CiAgbWJzdGF0ZV90
IHMgPSB7IDAgfTsKICBpbnQgaTsKICBzaXplX3Qgc3RvcmVkX2J5dGVzID0gd2NydG9tYiAo
KGNoYXIgKikgYnVmLCB3YywgJnMpOwoKICBpZiAoc3RvcmVkX2J5dGVzICE9IChzaXplX3Qp
IC0xKQpdXSwgW1sKICB1bnNpZ25lZCBjaGFyIGJ1ZltNQl9MRU5fTUFYXTsKICBtYnN0YXRl
X3QgcyA9IHsgMCB9OwogIGludCBpOwogIGludCBjdXJfbWJfbGVuOwogIHNpemVfdCBzdG9y
ZWRfYnl0ZXMgPSB3Y3J0b21iICgoY2hhciAqKSBidWYsIHdjLCAmcyk7CgogIGlmIChzdG9y
ZWRfYnl0ZXMgIT0gKHNpemVfdCkgLTEpCl1dKQphc3NlcnQoZjp3cml0ZShGU0FUb2tlblN1
YnN0KEFkZHRva193Y01CU0JvZHkpKSkKCi0tIFVzZSBiZWVmZWQtdXAgY2hhcmNsYXNzIChz
ZXRiaXRfcmFuZ2UpIGFuZCBkb3RjbGFzcyAoZnJvbSBsZXhlcikgdG8KLS0gY29uc3RydWN0
IGNoYXJjbGFzc2VzIGZvciBVVEYtOCBzZXF1ZW5jZXMgd2l0aG91dCBrbm93aW5nIGNoYXJj
bGFzcwotLSBpbnRlcm5hbHMgYW5kIGFsc28gd2l0aG91dCBrbm93aW5nIGRldGFpbHMgb2Yg
cmVnZXgKLS0gc3ludGF4L2NvbmZpZ3VyYXRpb24gcmVnYXJkaW5nIGVuZC1vZi1saW5lLiAg
V2UgYWxzbyBkZXBlbmQgb24KLS0gY2hhcmNsYXNzJ3MgcGVybWlzc2lvbiB0byB1c2UgMCBh
cyBhICJub3QtaW5pdGlhbGlzZWQiIHNlbnRpbmVsCi0tIGhlcmUuCmFzc2VydChmOndyaXRl
KEVkaXRlZFRleHQoImFkZF91dGY4X2FueWNoYXItZGVjbCIsCiAgICAgICAgICAgIlxuYWRk
X3V0ZjhfYW55Y2hhciAlKHZvaWQlKSIsCiAgICAgICAgICAgIlxuYWRkX3V0ZjhfYW55Y2hh
ciAoZnNhcGFyc2VfY3R4dF90ICpwYXJzZXIpIikpKQphc3NlcnQoZjp3cml0ZShSYXdUZXh0
KCJhZGRfdXRmOF9hbnljaGFyLWJvZHktc3RhcnQiKSkpCmFzc2VydChmOndyaXRlKFtbCiAg
dW5zaWduZWQgaW50IGk7CgogIC8qIEhhdmUgd2Ugc2V0IHVwIHRoZSBjbGFzc2VzIGZvciB0
aGUgMS1ieXRlIHRvIDQtYnl0ZSBzZXF1ZW5jZSB0eXBlcz8gICovCiAgaWYgKHBhcnNlci0+
dXRmOF9hbnljaGFyX2NsYXNzZXNbMF0gPT0gMCkKICAgIHsKICAgICAgLyogTm8sIGZpcnN0
IHRpbWUgd2UndmUgYmVlbiBjYWxsZWQsIHNvIHNldCB0aGVtIHVwIG5vdy4gICovCiAgICAg
IGNoYXJjbGFzc190ICpjY2w7CiAgICAgIGNvbnN0IGNoYXJjbGFzc190ICpkb3RjbGFzczsK
CiAgICAgIC8qIEluZGV4IDA6IDgwLWJmIC0tIE5vbi1sZWFkaW5nIGJ5dGVzLiAgKi8KICAg
ICAgY2NsID0gY2hhcmNsYXNzX2FsbG9jICgpOwogICAgICBjaGFyY2xhc3Nfc2V0Yml0X3Jh
bmdlICgweDgwLCAweGJmLCBjY2wpOwogICAgICBwYXJzZXItPnV0ZjhfYW55Y2hhcl9jbGFz
c2VzWzBdID0gY2hhcmNsYXNzX2NvbXBsZXRlZCAoY2NsKTsKCiAgICAgIC8qIEluZGV4IDE6
IDAwLTdmIC0tIDEtYnl0ZSBsZWFkaW5nIHNlcSwgbWludXMgZG90Y2xhc3MgZXhjZXB0aW9u
cy4gICovCiAgICAgIGNjbCA9IGNoYXJjbGFzc19hbGxvYyAoKTsKICAgICAgY2hhcmNsYXNz
X3NldGJpdF9yYW5nZSAoMHgwMCwgMHg3ZiwgY2NsKTsKICAgICAgZnNhbGV4X2V4Y2hhbmdl
IChwYXJzZXItPmxleF9jb250ZXh0LCBQUk9UT19MRVhQQVJTRV9PUF9HRVRfRE9UQ0xBU1Ms
CiAgICAgICAgICAgICAgICAgICAgICAgJmRvdGNsYXNzKTsKICAgICAgY2hhcmNsYXNzX2lu
dGVyc2VjdHNldCAoZG90Y2xhc3MsIGNjbCk7CiAgICAgIHBhcnNlci0+dXRmOF9hbnljaGFy
X2NsYXNzZXNbMV0gPSBjaGFyY2xhc3NfY29tcGxldGVkIChjY2wpOwoKICAgICAgLyogSW5k
ZXggMjogYzItZGYgLS0gMi1ieXRlIHNlcXVlbmNlLiAgKi8KICAgICAgY2NsID0gY2hhcmNs
YXNzX2FsbG9jICgpOwogICAgICBjaGFyY2xhc3Nfc2V0Yml0X3JhbmdlICgweGMyLCAweGRm
LCBjY2wpOwogICAgICBwYXJzZXItPnV0ZjhfYW55Y2hhcl9jbGFzc2VzWzJdID0gY2hhcmNs
YXNzX2NvbXBsZXRlZCAoY2NsKTsKCiAgICAgIC8qIEluZGV4IDI6IGUwLWVmIC0tIDMtYnl0
ZSBzZXF1ZW5jZS4gICovCiAgICAgIGNjbCA9IGNoYXJjbGFzc19hbGxvYyAoKTsKICAgICAg
Y2hhcmNsYXNzX3NldGJpdF9yYW5nZSAoMHhlMCwgMHhlZiwgY2NsKTsKICAgICAgcGFyc2Vy
LT51dGY4X2FueWNoYXJfY2xhc3Nlc1szXSA9IGNoYXJjbGFzc19jb21wbGV0ZWQgKGNjbCk7
CgogICAgICAvKiBJbmRleCAyOiBmMC1mNyAtLSA0LWJ5dGUgc2VxdWVuY2UuICAqLwogICAg
ICBjY2wgPSBjaGFyY2xhc3NfYWxsb2MgKCk7CiAgICAgIGNoYXJjbGFzc19zZXRiaXRfcmFu
Z2UgKDB4ZjAsIDB4ZjcsIGNjbCk7CiAgICAgIHBhcnNlci0+dXRmOF9hbnljaGFyX2NsYXNz
ZXNbNF0gPSBjaGFyY2xhc3NfY29tcGxldGVkIChjY2wpOwogICAgfQoKXV0pKQoKLS0gV3Jp
dGUgb3V0IHV0Zjggc2VxdWVuY2UgZG9jdW1lbnRhdGlvbjsgZml4IHNvbWUgZG9jIHR5cG9z
Lgphc3NlcnQoZjp3cml0ZShFZGl0ZWRUZXh0KCJhZGRfdXRmOF9hbnljaGFyLWRlc2NyaXB0
aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAifFsweGUwLTB4ZWZbMHg4MC0weGJm
XVsweDgwLTB4YmZdIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAifFsweGUwLTB4ZWZd
WzB4ODAtMHhiZl1bMHg4MC0weGJmXSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgInxb
MHhmMC1mN11bMHg4MC0weGJmXVsweDgwLTB4YmZdWzB4ODAtMHhiZl0iLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICJ8WzB4ZjAtMHhmN11bMHg4MC0weGJmXVsweDgwLTB4YmZdWzB4
ODAtMHhiZl0iCikpKQphc3NlcnQoZjp3cml0ZShbWwogIC8qIFdyaXRlIG91dCBsZWFmIHRv
a2VucyBmb3IgZWFjaCBvZiB0aGUgZm91ciBwb3NzaWJsZSBzdGFydGluZyBieXRlcy4gICov
CiAgZm9yIChpID0gMTsgaSA8IDU7IGkrKykKICAgIGFkZHRvayAocGFyc2VyLCBGU0FUT0tF
Tl9US19DU0VUICsgcGFyc2VyLT51dGY4X2FueWNoYXJfY2xhc3Nlc1tpXSk7CiAgLyogQWRk
IGZvbGxvdy1vbiBjbGFzc2VzLCBwbHVzIHRva2VucyB0byBidWlsZCBhIHBvc3RmaXggdHJl
ZQogICAgIGNvdmVyaW5nIGFsbCBmb3VyIGFsdGVybmF0aXZlcyBvZiB2YWxpZCBVVEYtOCBz
ZXF1ZW5jZXMuICAqLwogIGZvciAoaSA9IDE7IGkgPD0gMzsgaSsrKQogICAgewogICAgICBh
ZGR0b2sgKHBhcnNlciwgRlNBVE9LRU5fVEtfQ1NFVCArIHBhcnNlci0+dXRmOF9hbnljaGFy
X2NsYXNzZXNbMF0pOwogICAgICBhZGR0b2sgKHBhcnNlciwgRlNBVE9LRU5fVEtfQ0FUKTsK
ICAgICAgYWRkdG9rIChwYXJzZXIsIEZTQVRPS0VOX1RLX09SKTsKICAgIH0KXV0pKQphc3Nl
cnQoZjp3cml0ZShSYXdUZXh0KCJhZGRfdXRmOF9hbnljaGFyLWJvZHktZW5kIiksICJcbiIp
KQoKYXNzZXJ0KGY6d3JpdGUoRlNBVG9rZW5TdWJzdChSYXdUZXh0KCJHcmFtbWFyIHN1bW1h
cnkgY29tbWVudCIpKSwgIlxuIikpCgphc3NlcnQoZjp3cml0ZShbWwovKiBQcm92aWRlIGEg
Zm9yd2FyZCBkZWNsYXJhdGlvbiBmb3IgcmVnZXhwLCBhcyBpdCBpcyBhdCB0aGUgdG9wIG9m
CiAgIHRoZSBwYXJzZSB0cmVlLCBidXQgaXMgcmVmZXJlbmNlZCBieSBhdG9tLCBhdCB0aGUg
Ym90dG9tIG9mIHRoZQogICB0cmVlLiAgKi8Kc3RhdGljIHZvaWQgcmVnZXhwIChmc2FwYXJz
ZV9jdHh0X3QgKnBhcnNlcik7CgpdXSkpCi0tW1tdXQoKYXNzZXJ0KGY6d3JpdGUoW1sKLyog
MyBKdW5lIDIwMTQ6IEkgbXVzdCBiZSBhIHN1Y2tlciBmb3IgcHVuaXNobWVudCwgYW5kL29y
IGdvaW5nIGNyYXp5OwogICAgd2hhdGV2ZXIuICBJJ3ZlIGxvb2tlZCBhdCB0aGUgcGFydGlh
bGx5LWVkaXRlZCBjb2RlIGZvciAiYXRvbSIsCiAgICBsb29raW5nIGF0IGl0IGluIHRoZSAo
aW5jb21wbGV0ZSkgbGlnaHQgb2YgaW50cm9kdWNpbmcgdGhlIG1iY3NldHMKICAgIGNoYW5n
ZS4uLiBhbmQgaGF2ZSBkZWNpZGVkLCBqdXN0IGFzIEkgcHJldmlvdXNseSBkaWQgd2l0aAog
ICAgY2xvc3VyZSAoKSBiZWxvdywgdG8gcmV3cml0ZSBpdCBmcm9tIHNjcmF0Y2guICBTbywg
aGVyZSBnb2VzLi4uICAqLwpzdGF0aWMgdm9pZAphdG9tIChmc2FwYXJzZV9jdHh0X3QgKnBh
cnNlcikKewogIGZzYXRva2VuX3Rva2VuX3QgdG9rID0gcGFyc2VyLT5sb29rYWhlYWRfdG9r
ZW47CgogIC8qIEZvciBhIHVuaWJ5dGUgY2hhcmFjdGVyLCBpdCBpcyBpdHMgb3duIHRva2Vu
LiAgKi8KICBpZiAodG9rID49IDAgJiYgdG9rIDwgRlNBVE9LRU5fTk9UQ0hBUikKICAgIHsK
ICAgICAgYWRkdG9rIChwYXJzZXIsIHRvayk7CiAgICAgIHBhcnNlci0+bG9va2FoZWFkX3Rv
a2VuID0gcGFyc2VyLT5sZXhlciAocGFyc2VyLT5sZXhfY29udGV4dCk7CiAgICAgIHJldHVy
bjsKICAgIH0KCiAgLyogRm9yIGEgdW5pYnl0ZSBjaGFyYWN0ZXIgc2V0IChDU0VUICsgaW5k
ZXgpLCBpdCBpcyBpdHMgb3duIHRva2VuLiAgKi8KICBpZiAodG9rID49IEZTQVRPS0VOX1RL
X0NTRVQpCiAgICB7CiAgICAgIGFkZHRvayAocGFyc2VyLCB0b2spOwogICAgICBwYXJzZXIt
Pmxvb2thaGVhZF90b2tlbiA9IHBhcnNlci0+bGV4ZXIgKHBhcnNlci0+bGV4X2NvbnRleHQp
OwogICAgICByZXR1cm47CiAgICB9CgogIC8qIEZvciBBTllDSEFSIGluIGFuIFVURi04IHNl
dHRpbmcsIHVzZSBhIGhpZXJhcmNoeSBvZiBDU0VUcy4gICovCiAgaWYgKHRvayA9PSBGU0FU
T0tFTl9US19BTllDSEFSICYmIHVzaW5nX3V0ZjggKCkpCiAgICB7CiAgICAgIC8qIEZvciBV
VEYtOCwgZXhwYW5kIHRoZSBwZXJpb2QgdG8gYSBzZXJpZXMgb2YgQ1NFVHMgdGhhdCBkZWZp
bmUKICAgICAgICAgYSB2YWxpZCBVVEYtOCBjaGFyYWN0ZXIuICBUaGlzIGF2b2lkcyB1c2lu
ZyB0aGUgc2xvdyBtdWx0aWJ5dGUKICAgICAgICAgcGF0aC4gIEknbSBwcmV0dHkgc3VyZSBp
dCB3b3VsZCBiZSBib3RoIHByb2ZpdGFibGUgYW5kIGNvcnJlY3QKICAgICAgICAgdG8gZG8g
aXQgZm9yIGFueSBlbmNvZGluZzsgaG93ZXZlciwgdGhlIG9wdGltaXphdGlvbiBtdXN0IGJl
CiAgICAgICAgIGRvbmUgbWFudWFsbHkgYXMgaXQgaXMgZG9uZSBhYm92ZSBpbiBhZGRfdXRm
OF9hbnljaGFyLiAgU28sCiAgICAgICAgIGxldCdzIHN0YXJ0IHdpdGggVVRGLTg6IGl0IGlz
IHRoZSBtb3N0IHVzZWQsIGFuZCB0aGUgc3RydWN0dXJlCiAgICAgICAgIG9mIHRoZSBlbmNv
ZGluZyBtYWtlcyB0aGUgY29ycmVjdG5lc3MgbW9yZSBvYnZpb3VzLiAgKi8KICAgICAgYWRk
X3V0ZjhfYW55Y2hhciAocGFyc2VyKTsKICAgICAgcGFyc2VyLT5sb29rYWhlYWRfdG9rZW4g
PSBwYXJzZXItPmxleGVyIChwYXJzZXItPmxleF9jb250ZXh0KTsKICAgICAgcmV0dXJuOwog
ICAgfQoKICAvKiBVc2Ugc3dpdGNoIHRvIGNhcnZlIHVwIHRoZSByZW1haW5pbmcgY2FzZXMg
aW50byBncm91cHMuICAqLwogIHN3aXRjaCAodG9rKQogICAgewogICAgY2FzZSBGU0FUT0tF
Tl9US19XQ0hBUjoKICAgICAgewogICAgICAgIC8qIFdpZGUgY2hhcmFjdGVyLCBwb3NzaWJs
eSBpbmNsdWRpbmcgZXF1aXZhbGVudCBjaGFyYWN0ZXJzCiAgICAgICAgICAgKHByb2JhYmx5
IGR1ZSB0byBzZWxlY3Rpb24gb2YgY2FzZSBmb2xkaW5nKS4gICovCiAgICAgICAgaW50IG5y
X3dpZGVfY2hhcnM7CgogICAgICAgIG5yX3dpZGVfY2hhcnMgPSBmc2FsZXhfZXhjaGFuZ2Ug
KHBhcnNlci0+bGV4X2NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJPVE9fTEVYUEFSU0VfT1BfR0VUX1dJREVfQ0hBUlMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLT53aWRlX2NoYXJfbGlzdCk7
CiAgICAgICAgYXNzZXJ0KG5yX3dpZGVfY2hhcnMgPj0gMSk7CiAgICAgICAgaWYgKHBhcnNl
ci0+d2lkZV9jaGFyX2xpc3RbMF0gPT0gV0VPRikKICAgICAgICAgIGFkZHRvayAocGFyc2Vy
LCBGU0FUT0tFTl9US19CQUNLUkVGKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAg
ICAgICAgIGludCBpOwoKICAgICAgICAgICAgYWRkdG9rX3djIChwYXJzZXIsIHBhcnNlci0+
d2lkZV9jaGFyX2xpc3RbMF0pOwogICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbnJfd2lk
ZV9jaGFyczsgaSsrKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGFkZHRva193
YyAocGFyc2VyLCBwYXJzZXItPndpZGVfY2hhcl9saXN0W2ldKTsKICAgICAgICAgICAgICAg
IGFkZHRvayAocGFyc2VyLCBGU0FUT0tFTl9US19PUik7CiAgICAgICAgICAgICAgfQogICAg
ICAgICAgfQogICAgICAgIHBhcnNlci0+bG9va2FoZWFkX3Rva2VuID0gcGFyc2VyLT5sZXhl
ciAocGFyc2VyLT5sZXhfY29udGV4dCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAg
Y2FzZSBGU0FUT0tFTl9US19NQkNTRVQ6CiAgICAgIHsKICAgICAgICBtYmNzZXRzX3NldF90
ICp3b3JrX21iYzsKCiAgICAgICAgLyogQWNxdWlyZSBzcGFjZSB0byBzdG9yZSBzZXQgcG9p
bnRlci4gIFNhZGx5ICg/KSwgZnNhcGFyc2UKICAgICAgICAgICBtYWludGFpbnMgYSBkdXBs
aWNhdGUgbGlzdCB0byBmc2FsZXggYXQgcHJlc2VudC4gICovCiAgICAgICAgcGFyc2VyLT5t
YmNzZXRzID0gbWF5YmVfcmVhbGxvYyAocGFyc2VyLT5tYmNzZXRzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci0+bm1iY3NldHMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcnNlci0+bWJjc2V0c19hbGxv
YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Ygd29y
a19tYmMpOwoKICAgICAgICAvKiBHZXQgc2V0IHBvaW50ZXIgZnJvbSBmc2FsZXgsIGFuZCBh
ZGQgaXQgdG8gdGhlIGxpc3QuICAqLwogICAgICAgIGZzYWxleF9leGNoYW5nZSAocGFyc2Vy
LT5sZXhfY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RPX0xFWFBBUlNF
X09QX0dFVF9NQkNTRVQsCiAgICAgICAgICAgICAgICAgICAgICAgICAmd29ya19tYmMpOwog
ICAgICAgIHBhcnNlci0+bWJjc2V0c1twYXJzZXItPm5tYmNzZXRzKytdID0gd29ya19tYmM7
CgogICAgICAgIC8qIFdlIGNvdWxkIGZhbGwtdGhyb3VnaCBjYXNlIGxhYmVscyB0byB0aGUg
YWRkdG9rIGNvZGUgYmVsb3csCiAgICAgICAgICAgYnV0IGFtIGtlZXBpbmcgY29kZSBzZWN0
aW9ucyBzZXBhcmF0ZSBkdWUgdG8gYW4gb3ZlcmFidW5kYW5jZQogICAgICAgICAgIG9mIGNh
dXRpb24uICAqLwogICAgICAgIGFkZHRvayAocGFyc2VyLCB0b2spOwogICAgICAgIHBhcnNl
ci0+bG9va2FoZWFkX3Rva2VuID0gcGFyc2VyLT5sZXhlciAocGFyc2VyLT5sZXhfY29udGV4
dCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgY2FzZSBGU0FUT0tFTl9US19BTllD
SEFSOgogICAgY2FzZSBGU0FUT0tFTl9US19CQUNLUkVGOgogICAgY2FzZSBGU0FUT0tFTl9U
S19CRUdMSU5FOgogICAgY2FzZSBGU0FUT0tFTl9US19FTkRMSU5FOgogICAgY2FzZSBGU0FU
T0tFTl9US19CRUdXT1JEOgogICAgY2FzZSBGU0FUT0tFTl9US19FTkRXT1JEOgogICAgY2Fz
ZSBGU0FUT0tFTl9US19MSU1XT1JEOgogICAgY2FzZSBGU0FUT0tFTl9US19OT1RMSU1XT1JE
OgogICAgICBhZGR0b2sgKHBhcnNlciwgdG9rKTsKICAgICAgcGFyc2VyLT5sb29rYWhlYWRf
dG9rZW4gPSBwYXJzZXItPmxleGVyIChwYXJzZXItPmxleF9jb250ZXh0KTsKICAgICAgcmV0
dXJuOwoKICAgIGNhc2UgRlNBVE9LRU5fVEtfTFBBUkVOOgogICAgICBwYXJzZXItPmxvb2th
aGVhZF90b2tlbiA9IHBhcnNlci0+bGV4ZXIgKHBhcnNlci0+bGV4X2NvbnRleHQpOwogICAg
ICByZWdleHAgKHBhcnNlcik7CiAgICAgIGlmIChwYXJzZXItPmxvb2thaGVhZF90b2tlbiAh
PSBGU0FUT0tFTl9US19SUEFSRU4pCiAgICAgICAgcGFyc2VyLT5hYmFuZG9uX3dpdGhfZXJy
b3IgKF8oInVuYmFsYW5jZWQgKCIpKTsKICAgICAgcGFyc2VyLT5sb29rYWhlYWRfdG9rZW4g
PSBwYXJzZXItPmxleGVyIChwYXJzZXItPmxleF9jb250ZXh0KTsKICAgICAgcmV0dXJuOwoK
ICAgIGRlZmF1bHQ6CiAgICAgIGFkZHRvayAocGFyc2VyLCBGU0FUT0tFTl9US19FTVBUWSk7
CiAgICAgIHJldHVybjsKICB9CgogIC8qIE5PVFJFQUNIRUQgKi8KfQoKXV0pKQoKLS1bPT09
Wwpsb2NhbCBBdG9tRm4gPSBSYXdUZXh0KCJhdG9tIikKQXRvbUZuID0gVGV4dFN1YnN0KEF0
b21GbiwgW1sKc3RhdGljIHZvaWQKYXRvbSAodm9pZCkKewogIGlmICh0b2sgPT0gV0NIQVIp
CiAgICB7CiAgICAgIGlmICh3Y3RvayA9PSBXRU9GKQogICAgICAgIGFkZHRvayAoQkFDS1JF
Rik7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBhZGR0b2tfd2MgKHdjdG9rKTsK
CiAgICAgICAgICBpZiAoY2FzZV9mb2xkKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
d2NoYXJfdCBmb2xkZWRbQ0FTRV9GT0xERURfQlVGU0laRV07CiAgICAgICAgICAgICAgaW50
IGksIG4gPSBjYXNlX2ZvbGRlZF9jb3VudGVycGFydHMgKHdjdG9rLCBmb2xkZWQpOwogICAg
ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIGFkZHRva193YyAoZm9sZGVkW2ldKTsKICAgICAgICAgICAgICAg
ICAgYWRkdG9rIChPUik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg
ICB9Cl1dLCBbWwpzdGF0aWMgdm9pZAphdG9tIChmc2FwYXJzZV9jdHh0X3QgKnBhcnNlcikK
ewogIGZzYXRva2VuX3Rva2VuX3QgdG9rID0gcGFyc2VyLT5sb29rYWhlYWRfdG9rZW47Cgog
IGlmICh0b2sgPT0gV0NIQVIpCiAgICB7CiAgICAgIGludCBucl93aWRlX2NoYXJzOwoKICAg
ICAgbnJfd2lkZV9jaGFycyA9IGZzYWxleF9leGNoYW5nZSAocGFyc2VyLT5sZXhfY29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVE9fTEVYUEFS
U0VfT1BfR0VUX1dJREVfQ0hBUlMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcnNlci0+d2lkZV9jaGFyX2xpc3QpOwogICAgICBhc3NlcnQgKG5yX3dpZGVf
Y2hhcnMgPj0gMSk7CiAgICAgIGlmIChwYXJzZXItPndpZGVfY2hhcl9saXN0WzBdID09IFdF
T0YpCiAgICAgICAgYWRkdG9rIChCQUNLUkVGKTsKICAgICAgZWxzZQogICAgICAgIHsKICAg
ICAgICAgIGludCBpOwoKICAgICAgICAgIGFkZHRva193YyAocGFyc2VyLT53aWRlX2NoYXJf
bGlzdFswXSk7CiAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbnJfd2lkZV9jaGFyczsgaSsr
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgYWRkdG9rX3djIChwYXJzZXItPndpZGVf
Y2hhcl9saXN0W2ldKTsKICAgICAgICAgICAgICBhZGR0b2sgKEZTQVRPS0VOX1RLX09SKTsK
ICAgICAgICAgICAgfQogICAgICAgIH0KXV0pCkF0b21GbiA9IFRleHRTdWJzdChBdG9tRm4s
IFtbCiAgZWxzZSBpZiAodG9rID09IExQQVJFTikKICAgIHsKICAgICAgdG9rID0gbGV4ICgp
OwogICAgICByZWdleHAgKCk7CiAgICAgIGlmICh0b2sgIT0gUlBBUkVOKQpdXSwgW1sKICBl
bHNlIGlmICh0b2sgPT0gTFBBUkVOKQogICAgewogICAgICBwYXJzZXItPmxvb2thaGVhZF90
b2tlbiA9IHBhcnNlci0+bGV4ZXIgKHBhcnNlci0+bGV4X2NvbnRleHQpOwogICAgICByZWdl
eHAgKHBhcnNlcik7CiAgICAgIHRvayA9IHBhcnNlci0+bG9va2FoZWFkX3Rva2VuOwogICAg
ICBpZiAodG9rICE9IFJQQVJFTikKXV0pCkF0b21GbiA9IFRleHRTdWJzdChBdG9tRm4sCiAg
ICAgICAgICIgIHRvayA9IGxleCAoKSIsCiAgICAgICAgICIgIHBhcnNlci0+bG9va2FoZWFk
X3Rva2VuID0gcGFyc2VyLT5sZXhlciAocGFyc2VyLT5sZXhfY29udGV4dCkiKQpBdG9tRm4g
PSBUZXh0U3Vic3QoQXRvbUZuLAogICAgICAgICAiICBkZmFlcnJvciAoXygiLAogICAgICAg
ICAiICBwYXJzZXItPmFiYW5kb25fd2l0aF9lcnJvciAoXygiKQoKQXRvbUZuID0gQXRvbUZu
OmdzdWIoIiAgYWRkdG9rICUoIiwgICAgIiAgYWRkdG9rIChwYXJzZXIsICIpCkF0b21GbiA9
IEF0b21Gbjpnc3ViKCIgIGFkZHRva193YyAlKCIsICIgIGFkZHRva193YyAocGFyc2VyLCAi
KQpBdG9tRm4gPSBBdG9tRm46Z3N1YigiICBhZGRfdXRmOF9hbnljaGFyICUoJSkiLAogICAg
ICAgICAgICAgICAgICAgICAiICBhZGRfdXRmOF9hbnljaGFyIChwYXJzZXIpIikKYXNzZXJ0
KGY6d3JpdGUoRlNBVG9rZW5TdWJzdChBdG9tRm4pLCAiXG4iKSkKLS1dPT09XQoKCmFzc2Vy
dChmOndyaXRlKEZTQVRva2VuU3Vic3QoRWRpdGVkVGV4dCgibnN1YnRva3MiLAogICAgICAg
ICAgICJcbm5zdWJ0b2tzICUoIiwgICJcbm5zdWJ0b2tzIChmc2FwYXJzZV9jdHh0X3QgKnBh
cnNlciwgIiwKICAgICAgICAgICAiIG5zdWJ0b2tzICUoIiwgICAiIG5zdWJ0b2tzIChwYXJz
ZXIsICIsCiAgICAgICAgICAgImRmYSUtPiIsICAgICAgICAgInBhcnNlci0+IikpLAogICAg
ICAgICAgICAgICAiXG4iKSkKYXNzZXJ0KGY6d3JpdGUoRlNBVG9rZW5TdWJzdChFZGl0ZWRU
ZXh0KCJjb3B5dG9rcyIsCiAgICAgICAgICAgIlxuY29weXRva3MgJSgiLCAgIlxuY29weXRv
a3MgKGZzYXBhcnNlX2N0eHRfdCAqcGFyc2VyLCAiLAogICAgICAgICAgICIgYWRkdG9rX21i
ICUoIiwgICIgYWRkdG9rX21iIChwYXJzZXIsICIsCiAgICAgICAgICAgImRmYSUtPiIsICAg
ICAgICAgInBhcnNlci0+IiwKICAgICAgICAgICAiTUJfQ1VSX01BWCA+IDEiLCAicGFyc2Vy
LT5tdWx0aWJ5dGVfbG9jYWxlIikpLAogICAgICAgICAgICAgICAiXG4iKSkKCmFzc2VydChm
OndyaXRlKFtbCi8qIFJld3JpdGluZyBmc2FwYXJzZTpjbG9zdXJlICgpIGZyb20gc2NyYXRj
aDsgb3JpZ2luYWwgaXMgY2xldmVyIGJ1dCBhCiAgIGxpdHRsZSB0cmlja3kgdG8gZm9sbG93
LCBzbyBJJ20gdHJ5aW5nIHRvIGJyZWFrIHVwIGEgd2hpbGUgKyBjb21wb3VuZC1pZgogICBs
b29wIGludG8gYSBzaW1wbGVyIGNvbnN0cnVjdCAobW9yZSBsaWtlIGEgZmluaXRlLXN0YXRl
IG1hY2hpbmUpLiAgQWxzbywKICAgZWRpdHMgc3VjaCBhcyByZXBsYWNpbmcgImRmYS0+IiB3
aXRoICJwYXJzZXItPiIgYXJlIGRvbmUgaGVyZSwgYWRkaW5nCiAgICJwYXJzZXIiIGFzIGEg
cGFyYW1ldGVyIGluIGxvdHMgb2YgcGxhY2VzLCBhcyB3ZWxsIGFzIHRoZSBsb25nLXdpbmRl
ZAogICBGU0FUT0tFTl9US18iIHByZWZpeC4KCiAgIEknbSBub3Qgc3VyZSBpZiB0aGlzIHZl
cnNpb24gaXMgYW4gaW1wcm92ZW1lbnQgb3ZlciB0aGUgb3JpZ2luYWw7IHRoZQogICBuZWVk
IHRvIHVzZSAicGFyc2VyLT5sb29rYWhlYWRfdG9rZW4iIGluc3RlYWQgb2YgInRvayIgaW5m
bHVlbmNlZCBteQogICBkZWNpc2lvbiB0byB0cnkgdGhpcy4uLiBidXQgdGhlIGp1cnkgaXMg
c3RpbGwgb3V0LiAgKi8Kc3RhdGljIHZvaWQKY2xvc3VyZSAoZnNhcGFyc2VfY3R4dF90ICpw
YXJzZXIpCnsKcmVzdGFydF9jbG9zdXJlOgogIGF0b20gKHBhcnNlcik7CiAgZm9yICg7OykK
ICAgIHsKICAgICAgc3dpdGNoIChwYXJzZXItPmxvb2thaGVhZF90b2tlbikKICAgICAgICB7
CiAgICAgICAgICBjYXNlIEZTQVRPS0VOX1RLX1FNQVJLOgogICAgICAgICAgY2FzZSBGU0FU
T0tFTl9US19TVEFSOgogICAgICAgICAgY2FzZSBGU0FUT0tFTl9US19QTFVTOgogICAgICAg
ICAgICBhZGR0b2sgKHBhcnNlciwgcGFyc2VyLT5sb29rYWhlYWRfdG9rZW4pOwogICAgICAg
ICAgICBwYXJzZXItPmxvb2thaGVhZF90b2tlbiA9IHBhcnNlci0+bGV4ZXIgKHBhcnNlci0+
bGV4X2NvbnRleHQpOwogICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICBjYXNlIEZT
QVRPS0VOX1RLX1JFUE1OOgogICAgICAgICAgICAvKiBSRVBNTiBuZWVkcyBleHRyYSB3b3Jr
OyBtb3ZlIG91dHNpZGUgdGhlIHN3aXRjaCBzdGF0ZW1lbnQuICAqLwogICAgICAgICAgICBi
cmVhazsKCiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAvKiBNZXJlbHkgbGV0IHRo
ZSBpbnRpYWwgYXRvbSBjYWxsIHN0YW5kIGFzIG91ciByZXR1cm4gcmVzdWx0LiAgKi8KICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgIC8qIERlYWwgd2l0aCBSRVBNTntt
aW4sIG1heH0gY2FzZXMgaW4gYSBzZXBhcmF0ZSBibG9jay4gICovCiAgICAgIHsKICAgICAg
ICBpbnQgaTsKICAgICAgICBzaXplX3QgcHJldl9zdWJfaW5kZXgsIG50b2tlbnM7CiAgICAg
ICAgaW50IG1pbnJlcCwgbWF4cmVwOwoKICAgICAgICAvKiBHZXQgdGhlIHttaW4sIG1heH0g
cGFpciBkZWNvZGVkIGJ5IHRoZSBsZXhlci4gICovCiAgICAgICAgbWlucmVwID0gcGFyc2Vy
LT5sZXhfZXhjaGFuZ2UgKHBhcnNlci0+bGV4X2NvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBST1RPX0xFWFBBUlNFX09QX0dFVF9SRVBNTl9NSU4s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgICAg
IG1heHJlcCA9IHBhcnNlci0+bGV4X2V4Y2hhbmdlIChwYXJzZXItPmxleF9jb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9UT19MRVhQQVJTRV9P
UF9HRVRfUkVQTU5fTUFYLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOVUxMKTsKCiAgICAgICAgLyogRmluZCBvdXQgaG93IG1hbnkgdG9rZW5zIGFyZSBpbiB0
aGUgcGVjZWRpbmcgdG9rZW4gbGlzdCB0aGF0IGFyZQogICAgICAgICAgIGNvdmVyZWQgYnkg
dGhpcyBSRVBNTiBkaXJlY3RpdmUuICBUaGlzIGludm9sdmVzIGNhcmVmdWxseSB3b3JraW5n
CiAgICAgICAgICAgYmFja3dhcmRzIHRocm91Z2ggdGhlIGxpbmVhciwgcG9zdGZpeCB0b2tl
biBvcmRlcmluZy4gICovCiAgICAgICAgbnRva2VucyA9IG5zdWJ0b2tzIChwYXJzZXIsIHBh
cnNlci0+dGluZGV4KTsKCiAgICAgICAgLyogSWYgbWluIGFuZCBtYXggYXJlIGJvdGggemVy
bywgbWVyZWx5IHJlbW92ZSBwcmVjZWRpbmcKICAgICAgICAgICBzdWJleHByZXNzaW9uLCBn
ZXQgYSBuZXcgdG9rZW4sIGFuZCByZXN0YXJ0IHRoZSBhdG9tL2Nsb3N1cmUKICAgICAgICAg
ICBwcm9jZXNzaW5nIGZyb20gdGhlIHRvcCBvZiB0aGUgZnVuY3Rpb24uICBOb3Qgc3VyZSBp
ZiBwZW9wbGUgd2lsbAogICAgICAgICAgIGxpa2UgdGhpcyBnb3RvIHN0YXRlbWVudCwgYnV0
IHdlJ2xsIGdpdmUgaXQgYSB3aGlybC4gICAqLwogICAgICAgIGlmIChtaW5yZXAgPT0gMCAm
JiBtYXhyZXAgPT0gMCkKICAgICAgICAgIHsKICAgICAgICAgICAgcGFyc2VyLT50aW5kZXgg
LT0gbnRva2VuczsKICAgICAgICAgICAgcGFyc2VyLT5sb29rYWhlYWRfdG9rZW4gPSBwYXJz
ZXItPmxleGVyIChwYXJzZXItPmxleF9jb250ZXh0KTsKICAgICAgICAgICAgZ290byByZXN0
YXJ0X2Nsb3N1cmU7CiAgICAgICAgICB9CgogICAgICAgIC8qIE5vbi16ZXJvIG1pbiBvciBt
YXgsIGRlZmluZWQgYXMgZm9sbG93czoKICAgICAgICAgICAgIHtufSAgIFRoZSBwcmVjZWRp
bmcgaXRlbSBpcyBtYXRjaGVkIGV4YWN0bHkgbiB0aW1lcy4KICAgICAgICAgICAgIHtuLH0g
IFRoZSBwcmVjZWRpbmcgaXRlbSBpcyBtYXRjaGVkIG4gb3IgbW9yZSB0aW1lcy4KICAgICAg
ICAgICAgIHssbX0gIFRoZSBwcmVjZWRpbmcgaXRlbSBpcyBtYXRjaGVkIGF0IG1vc3QgbSB0
aW1lcyAoR05VIGV4dC4pCiAgICAgICAgICAgICB7bixtfSBUaGUgcHJlY2VkaW5nIGl0ZW0g
aXMgbWF0Y2hlZCBhdCBsZWFzdCBuLCBidXQgbm90IG1vcmUKICAgICAgICAgICAgICAgICAg
IHRoYW4gbSB0aW1lcy4KICAgICAgICAgICBGb3Ige24sfSBhbmQgeyxtfSBjYXNlcywgdGhl
IG9taXR0ZWQgcGFyYW1ldGVyIGlzIHJlcG9ydGVkIGhlcmUKICAgICAgICAgICBhcyBhIG5l
Z2F0aXZlIHZhbHVlLiAgKi8KICAgICAgICBwcmV2X3N1Yl9pbmRleCA9IHBhcnNlci0+dGlu
ZGV4IC0gbnRva2VuczsKICAgICAgICBpZiAobWF4cmVwIDwgMCkKICAgICAgICAgIGFkZHRv
ayAocGFyc2VyLCBGU0FUT0tFTl9US19QTFVTKTsKICAgICAgICBpZiAobWlucmVwID09IDAp
CiAgICAgICAgICBhZGR0b2sgKHBhcnNlciwgRlNBVE9LRU5fVEtfUU1BUkspOwogICAgICAg
IGZvciAoaSA9IDE7IGkgPCBtaW5yZXA7ICsraSkKICAgICAgICAgIHsKICAgICAgICAgICAg
Y29weXRva3MgKHBhcnNlciwgcHJldl9zdWJfaW5kZXgsIG50b2tlbnMpOwogICAgICAgICAg
ICBhZGR0b2sgKHBhcnNlciwgRlNBVE9LRU5fVEtfQ0FUKTsKICAgICAgICAgIH0KICAgICAg
ICBmb3IgKDsgaSA8IG1heHJlcDsgKytpKQogICAgICAgICAgewogICAgICAgICAgICBjb3B5
dG9rcyAocGFyc2VyLCBwcmV2X3N1Yl9pbmRleCwgbnRva2Vucyk7CiAgICAgICAgICAgIGFk
ZHRvayAocGFyc2VyLCBGU0FUT0tFTl9US19RTUFSSyk7CiAgICAgICAgICAgIGFkZHRvayAo
cGFyc2VyLCBGU0FUT0tFTl9US19DQVQpOwogICAgICAgICAgfQogICAgICAgIC8qIFByaW1l
IHRoZSBwYXJzZXIgd2l0aCB0aGUgbmV4dCB0b2tlbiBhZnRlciBSRVBNTiBhbmQgbG9vcC4g
ICovCiAgICAgICAgcGFyc2VyLT5sb29rYWhlYWRfdG9rZW4gPSBwYXJzZXItPmxleGVyIChw
YXJzZXItPmxleF9jb250ZXh0KTsKICAgICAgfQogICAgfQp9CgpdXSkpCgpsb2NhbCBCcmFu
Y2hCb2R5ID0gRWRpdGVkVGV4dCgiYnJhbmNoIiwKICAgICAgICAgICAiXG5icmFuY2ggJSh2
b2lkJSkiLCAiXG5icmFuY2ggKGZzYXBhcnNlX2N0eHRfdCAqcGFyc2VyKSIsCiAgICAgICAg
ICAgIiBhZGR0b2sgJSgiLCAgICAgIiBhZGR0b2sgKHBhcnNlciwgIiwKICAgICAgICAgICAi
IGNsb3N1cmUgJSglKSIsICAiIGNsb3N1cmUgKHBhcnNlcikiKQpCcmFuY2hCb2R5ID0gVGV4
dFN1YnN0KEJyYW5jaEJvZHksIFtbCnsKICBjbG9zdXJlIChwYXJzZXIpOwogIHdoaWxlICh0
b2sgIT0gUlBBUkVOICYmIHRvayAhPSBPUiAmJiB0b2sgPj0gMCkKICAgIHsKICAgICAgY2xv
c3VyZSAocGFyc2VyKTsKICAgICAgYWRkdG9rIChwYXJzZXIsIENBVCk7CiAgICB9Cl1dLCBb
Wwp7CiAgZnNhdG9rZW5fdG9rZW5fdCB0b2s7CgogIGNsb3N1cmUgKHBhcnNlcik7CiAgdG9r
ID0gcGFyc2VyLT5sb29rYWhlYWRfdG9rZW47CiAgd2hpbGUgKHRvayAhPSBSUEFSRU4gJiYg
dG9rICE9IE9SICYmIHRvayA+PSAwKQogICAgewogICAgICBjbG9zdXJlIChwYXJzZXIpOwog
ICAgICB0b2sgPSBwYXJzZXItPmxvb2thaGVhZF90b2tlbjsKICAgICAgYWRkdG9rIChwYXJz
ZXIsIENBVCk7CiAgICB9Cl1dKQphc3NlcnQoZjp3cml0ZShGU0FUb2tlblN1YnN0KEJyYW5j
aEJvZHkpLCAiXG4iKSkKCmxvY2FsIFJlZ2V4cEJvZHkgPSBFZGl0ZWRUZXh0KCJyZWdleHAi
LAogICAgICAgICAgICJcbnJlZ2V4cCAlKHZvaWQlKSIsICJcbnJlZ2V4cCAoZnNhcGFyc2Vf
Y3R4dF90ICpwYXJzZXIpIiwKICAgICAgICAgICAiZGZhJS0+IiwgICAgICAgICAicGFyc2Vy
LT4iLAogICAgICAgICAgICIgYWRkdG9rICUoIiwgICAgIiBhZGR0b2sgKHBhcnNlciwgIiwK
ICAgICAgICAgICAiIGF0b20gJSglKSIsICAgICIgYXRvbSAocGFyc2VyKSIsCiAgICAgICAg
ICAgIiBicmFuY2ggJSglKSIsICAiIGJyYW5jaCAocGFyc2VyKSIsCiAgICAgICAgICAgIiBj
bG9zdXJlICUoJSkiLCAiIGNsb3N1cmUgKHBhcnNlcikiKQpSZWdleHBCb2R5ID0gVGV4dFN1
YnN0KFJlZ2V4cEJvZHksCiAgICAgICAgICIgIHRvayA9IGxleCAoKSIsCiAgICAgICAgICIg
IHBhcnNlci0+bG9va2FoZWFkX3Rva2VuID0gcGFyc2VyLT5sZXhlciAocGFyc2VyLT5sZXhf
Y29udGV4dCkiKQpSZWdleHBCb2R5ID0gVGV4dFN1YnN0KFJlZ2V4cEJvZHksIFtbCiAgd2hp
bGUgKHRvayA9PSBPUikKICAgIHsKXV0sIFtbCiAgd2hpbGUgKHBhcnNlci0+bG9va2FoZWFk
X3Rva2VuID09IE9SKQogICAgewpdXSkKCmFzc2VydChmOndyaXRlKEZTQVRva2VuU3Vic3Qo
UmVnZXhwQm9keSksICJcbiIpKQoKLS0gUmV3cml0ZSBib2R5IG9mIGZzYXBhcnNlX3BhcnNl
IChkZmFwYXJzZSkgd2l0aG91dCBzdWJzdGl0dXRpb25zLCBhcyBtdWNoCi0tIG9mIHRoZSBp
bml0aWFsaXNhdGlvbiBjb2RlIGhlcmUgaGFzIGJlZW4gbWFkZSByZWR1bmRhbnQgYXMgdGhl
IGNsaWVudCBjYW4KLS0gaW5zdGFudGlhdGUgYW5kIGNvbmZpZ3VyZSB0aGUgbGV4ZXIgaW5k
ZXBlbmRlbnRseS4KYXNzZXJ0KGY6d3JpdGUoRGVjbHNbInBhcnNlIl0sIFtbCnsKICAvKiBP
YnRhaW4gYW4gaW5pdGlhbCB0b2tlbiBmb3IgbG9va2FoZWFkLCBhbmQga2VlcCB0cmFja2lu
ZyB0cmVlIGRlcHRoLiAgKi8KICBwYXJzZXItPmxvb2thaGVhZF90b2tlbiA9IHBhcnNlci0+
bGV4ZXIgKHBhcnNlci0+bGV4X2NvbnRleHQpOwogIHBhcnNlci0+Y3VycmVudF9kZXB0aCA9
IHBhcnNlci0+ZGVwdGg7CgogIC8qIFJ1biByZWdleHAgdG8gbWFuYWdlIHRoZSBuZXh0IGxl
dmVsIG9mIHBhcnNpbmcuICAqLwogIHJlZ2V4cCAocGFyc2VyKTsKICBpZiAocGFyc2VyLT5s
b29rYWhlYWRfdG9rZW4gIT0gRlNBVE9LRU5fVEtfRU5EKQogICAgcGFyc2VyLT5hYmFuZG9u
X3dpdGhfZXJyb3IgKF8oInVuYmFsYW5jZWQgKSIpKTsKCiAgLyogSWYgbXVsdGlwbGUgZXhw
cmVzc2lvbnMgYXJlIHBhcnNlZCwgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IHBhdHRlcnMgYXJl
CiAgICAgcHJlc2VudGVkIGFzIGFsdGVybmF0aXZlcyB0byBwcmVjZWRpbmcgcGF0dGVybnMu
ICAqLwogIGFkZHRvayAocGFyc2VyLCBGU0FUT0tFTl9US19FTkQgLSBwYXJzZXItPm5yZWdl
eHBzKTsKICBhZGR0b2sgKHBhcnNlciwgRlNBVE9LRU5fVEtfQ0FUKTsKICBpZiAocGFyc2Vy
LT5ucmVnZXhwcykKICAgIGFkZHRvayAocGFyc2VyLCBGU0FUT0tFTl9US19PUik7CgogICsr
cGFyc2VyLT5ucmVnZXhwczsKfQoKXV0pKQoKYXNzZXJ0KGY6d3JpdGUoW1sKLyogUmVjZWl2
ZSBmdW5jdGlvbnMgdG8gZGVhbCB3aXRoIGV4Y2VwdGlvbnMgZGV0ZWN0ZWQgYnkgdGhlIHBh
cnNlcjoKICAgV2FybmluZ3MgYW5kIGVycm9ycy4gIEludGVybmFsbHksIHdlIGFkZCB0aGUg
X05vcmV0dXJuIGF0dHJpYnV0ZQogICB0byB0aGUgZXJyb3IgY2FsbGJhY2ssIHRvIGhlbHAg
dGhlIGNvbXBpbGVyIHdpdGggY29kZSBmbG93CiAgIGFuYWx5c2lzLiAgKi8KZXh0ZXJuIHZv
aWQKZnNhcGFyc2VfZXhjZXB0aW9uX2ZucyAoZnNhcGFyc2VfY3R4dF90ICpwYXJzZXIsCiAg
ICAgICAgICAgICAgICAgICAgICBmc2FwYXJzZV93YXJuX2NhbGxiYWNrX2ZuICp3YXJuaW5n
Zm4sCiAgICAgICAgICAgICAgICAgICAgICBmc2FwYXJzZV9lcnJvcl9jYWxsYmFja19mbiAq
ZXJyb3JmbikKewogIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyBpcyBkb25lIGJ5IGV4cGxpY2l0
IGNhbGxiYWNrcy4gICovCiAgcGFyc2VyLT53YXJuX2NsaWVudCA9IHdhcm5pbmdmbjsKICBw
YXJzZXItPmFiYW5kb25fd2l0aF9lcnJvciA9IGVycm9yZm47Cn0KCi8qIEFkZCAibm90IHBy
b3ZpZGVkISIgc3R1YiBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGlmIHRoZSBjbGllbnQK
ICAgZmFpbHMgdG8gcHJvdmlkZSBwcm9wZXIgcmVzb3VyY2VzLiAgVGhpcyBpcyBhIGhhY2ss
IG1lcmVseSB0byBnZXQgdGhlCiAgIG1vZHVsZSBzdGFydGVkOyBiZXR0ZXIgdHJlYXRtZW50
IG5lZWRzIHRvIGJlIGFkZGVkIGxhdGVyLiAgKi8Kc3RhdGljIHZvaWQKbm9fZnVuY3Rpb25f
cHJvdmlkZWQgKHZvaWQgKnVudXNlZCkKewogIGFzc2VydCAoISJmc2FwYXJzZTogUGx1Zy1p
biBmdW5jdGlvbiByZXF1aXJlZCwgYnV0IG5vdCBwcm92aWRlZC4iKTsKfQoKXV0pKQoKYXNz
ZXJ0KGY6d3JpdGUoRGVjbHNbInBhcnNlLWxleGVyIl0sIFtbCnsKICBib29sIGlzX211bHRp
Ynl0ZTsKICBpbnQgd2NoYXJzX21heDsKCiAgLyogUmVjb3JkIHN1cHBsaWVkIGxleGVyIGZ1
bmN0aW9uIGFuZCBjb250ZXh0IGZvciB1c2UgbGF0ZXIuICAqLwogIHBhcnNlci0+bGV4X2Nv
bnRleHQgID0gbGV4ZXJfY29udGV4dDsKICBwYXJzZXItPmxleGVyICAgICAgICA9IGxleF9m
bjsKICBwYXJzZXItPmxleF9leGNoYW5nZSA9IGxleF9leGNoYW5nZV9mbjsKCiAgLyogUXVl
cnkgbGV4ZXIgdG8gZ2V0IG11bHRpYnl0ZSBuYXR1cmUgb2YgdGhpcyBsb2NhbGUuICAqLwog
IGlzX211bHRpYnl0ZQogICAgICA9IGxleF9leGNoYW5nZV9mbiAobGV4ZXJfY29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RPX0xFWFBBUlNFX09QX0dFVF9JU19NVUxU
SUJZVEVfTE9DQUxFLAogICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAgcGFyc2Vy
LT5tdWx0aWJ5dGVfbG9jYWxlID0gaXNfbXVsdGlieXRlOwogIHBhcnNlci0+dW5pYnl0ZV9s
b2NhbGUgPSAhIGlzX211bHRpYnl0ZTsKCiAgLyogU2V0IHVwIFdDSEFSIHRva2VuIGluZnJh
c3RydWN0dXJlOiAgV2lkZS1jaGFyIGxpc3QvYXJyYXkvd2hhdGV2ZXIuICBXZQogICAgIGZy
ZWUgdGhlIHdpZGVfY2hhcl9saXN0IGZpcnN0LCBpbiBjYXNlIHNvbWVvbmUgY2FsbHMgdGhp
cyBmdW5jdGlvbgogICAgIG11bHRpcGxlIHRpbWVzLCBzbyB0aGF0IGVhcmxpZXIgYWxsb2Nh
dGlvbnMgYXJlIGNvcnJlY3RseSBmcmVlZCB1cCwgYW5kCiAgICAgd2UgdXNlIHRoZSB2YWx1
ZSBhZHZpc2VkIGJ5IHRoZSBtb3N0IHJlY2VudCBsZXhlciBwcmVzZW50ZWQgdG8gdXMuICAq
LwogIHdjaGFyc19tYXggPSBsZXhfZXhjaGFuZ2VfZm4gKGxleGVyX2NvbnRleHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVE9fTEVYUEFSU0VfT1BfR0VUX1dJREVf
Q0hBUl9MSVNUX01BWCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsK
ICBwYXJzZXItPndpZGVfY2hhcnNfbWF4ID0gd2NoYXJzX21heDsKICBmcmVlIChwYXJzZXIt
PndpZGVfY2hhcl9saXN0KTsKICBwYXJzZXItPndpZGVfY2hhcl9saXN0ID0gTlVMTDsKICBp
ZiAod2NoYXJzX21heCkKICAgIHBhcnNlci0+d2lkZV9jaGFyX2xpc3QgPSB4bm1hbGxvYyAo
d2NoYXJzX21heCwgc2l6ZW9mICh3Y2hhcl90KSk7Cn0KCl1dKSkKCi0tIERlZmluZSBhICJu
ZXciIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGFuIGluaXRpYWwgcGFyc2VyIGNvbnRleHQuCmFz
c2VydChmOndyaXRlKERlY2xzWyJwYXJzZS1uZXciXSwgW1sKewogIGZzYXBhcnNlX2N0eHRf
dCAqbmV3X2NvbnRleHQ7CgogIC8qIEFjcXVpcmUgemVyb2VkIG1lbW9yeSBmb3IgbmV3IHBh
cnNlciBjb250ZXh0LiAgKi8KICBuZXdfY29udGV4dCA9IFhaQUxMT0MgKGZzYXBhcnNlX2N0
eHRfdCk7CgogIC8qID8/IFBvaW50IHdhcm5pbmcsIGVycm9yIGFuZCBsZXhlciBmdW5jdGlv
bnMgdG8gYSAieW91IG5lZWQgdG8gdGVsbCBtZQogICAgIHRoZXNlIGZpcnN0ISIgZnVuY3Rp
b24/ICovCiAgbmV3X2NvbnRleHQtPndhcm5fY2xpZW50ICAgICAgICA9IChmc2FwYXJzZV93
YXJuX2NhbGxiYWNrX2ZuICopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vX2Z1bmN0aW9uX3Byb3ZpZGVkOwogIG5ld19jb250ZXh0LT5hYmFuZG9uX3dpdGhfZXJy
b3IgPSAoZnNhcGFyc2VfZXJyb3JfY2FsbGJhY2tfZm4gKikKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9fZnVuY3Rpb25fcHJvdmlkZWQ7CiAgbmV3X2NvbnRleHQt
PmxleGVyICAgICAgICAgICAgICA9IChmc2FwYXJzZV9sZXhlcl9mbl90ICAqKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub19mdW5jdGlvbl9wcm92aWRlZDsKCiAg
LyogRGVmYXVsdCB0byB1bmlieXRlIGxvY2FsZS4uLiBidXQgd2Ugc3luY2hyb25pc2Ugd2l0
aCB0aGUgbGV4ZXIgbGF0ZXIuICovCiAgbmV3X2NvbnRleHQtPm11bHRpYnl0ZV9sb2NhbGUg
PSBmYWxzZTsKICBuZXdfY29udGV4dC0+dW5pYnl0ZV9sb2NhbGUgPSB0cnVlOwoKICAvKiBB
ZGQgdGhpcyBpbnN0YW5jZSBhdCB0aGUgaGVhZCBvZiB0aGUgbW9kdWxlJ3MgbGlzdC4gICov
CiAgbmV3X2NvbnRleHQtPm5leHRfaW5zdGFuY2UgPSBmc2FwYXJzZV9pbnN0YW5jZV9saXN0
X2hlYWQ7CiAgZnNhcGFyc2VfaW5zdGFuY2VfbGlzdF9oZWFkID0gbmV3X2NvbnRleHQ7Cgog
IHJldHVybiBuZXdfY29udGV4dDsKfQoKXV0pKQoKLS0gRlNBTXVzdHMsIGFuZCBhbHNvIGRl
YnVnZ2luZyB1c2VycywgdXNlIHRoZSBmaW5hbCB0b2tlbiBsaXN0IGdlbmVyYXRlZAotLSBi
eSB0aGUgcGFyc2VyLCBzbyBwcm92aWRlIGFuIGludGVyZmFjZSBmb3IgdGhlbSB0byBhY2Nl
c3MgdGhlIGxpc3QuCmFzc2VydChmOndyaXRlKERlY2xzWyJwYXJzZS1nZXQtdG9rZW4tbGlz
dCJdLCBbWwp7CiAgKm5yX3Rva2VucyAgPSBwYXJzZXItPnRpbmRleDsKICAqdG9rZW5fbGlz
dCA9IHBhcnNlci0+dG9rZW5zOwp9CgpdXSkpCgphc3NlcnQoZjp3cml0ZShbWwovKiBJbnRl
cm5hbCBmdW5jdGlvbiB0byBmcmVlIGFsbCByZXNvdXJjZXMgZGlyZWN0bHkgb3IgaW5kaXJl
Y3RseSB1c2VkIGJ5IGFuCiAgIGluc3RhbmNlLiAgVGhlIHBvaW50ZXIgaXMgbm8gbG9uZ2Vy
IHZhbGlkIGFmdGVyIHRoaXMgY2FsbC4gICovCnN0YXRpYyB2b2lkCmZyZWVfaW5zdGFuY2Ug
KGZzYXBhcnNlX2N0eHRfdCAqcGFyc2VyKQp7CiAgZnJlZSAocGFyc2VyLT53aWRlX2NoYXJf
bGlzdCk7CiAgZnJlZSAocGFyc2VyLT50b2tlbnMpOwogIGZyZWUgKHBhcnNlci0+bXVsdGli
eXRlX3Byb3ApOwogIGZyZWUgKHBhcnNlcik7Cn0KCl1dKSkKCmFzc2VydChmOndyaXRlKERl
Y2xzWyJwYXJzZS1kZXN0cm95LW1vZHVsZSJdLCBbWwp7CiAgZnNhcGFyc2VfY3R4dF90ICpw
X2xpc3Q7CiAgZnNhcGFyc2VfY3R4dF90ICpwX25leHQ7CgogIC8qIE1vdmUgdGhlIGdsb2Jh
bCBsaXN0IGhlYWQgaW50byBhIGxvY2FsIHZhcmlhYmxlLCBhbmQgaW1tZWRpYXRlbHkgY2xl
YXIKICAgICB0aGUgZ2xvYmFsLiAgVGhpcyBpcyBhIGhhbGYtaGVhcnRlZCBhdHRlbXB0IHRv
IGF2b2lkIHJhY2UgY29uZGl0aW9uczsKICAgICB0byBkbyB0aGluZ3MgcHJvcGVybHksIGEg
c3lzdGVtLXdpZGUgYXRvbWljIG9wZXJhdGlvbiAobG9ja2VkLAogICAgIGluY2x1ZGluZyBt
dWx0aS1DUFUgY2FjaGUgY29oZXJlbmN5KSBvcGVyYXRpb24gc2hvdWxkIGJlIHVzZWQuICAq
LwogIHBfbGlzdCA9IGZzYXBhcnNlX2luc3RhbmNlX2xpc3RfaGVhZDsKICBmc2FwYXJzZV9p
bnN0YW5jZV9saXN0X2hlYWQgPSBOVUxMOwoKICAvKiBUcmF2ZXJzZSB0aGUgbGlzdCBvZiBp
bnN0YW5jZXMsIHJlbGVhc2luZyBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQKICAgICB3aXRo
IGVhY2ggb25lLiAgKi8KICB3aGlsZSAocF9saXN0KQogICAgewogICAgICBwX25leHQgPSBw
X2xpc3QtPm5leHRfaW5zdGFuY2U7CiAgICAgIGZyZWVfaW5zdGFuY2UgKHBfbGlzdCk7CiAg
ICAgIHBfbGlzdCA9IHBfbmV4dDsKICAgIH0KfQoKXV0pKQoKYXNzZXJ0KGY6d3JpdGUoRGVj
bHNbInBhcnNlLWluaXRpYWxpc2UiXSwgW1sKewogIC8qIEluaXRpYWxpc2UgdGhlIGxpbmtl
ZCBsaXN0IG9mIGluc3RhbmNlcyBjcmVhdGVkIGJ5IHRoaXMgbW9kdWxlLiAgKi8KICBmc2Fw
YXJzZV9pbnN0YW5jZV9saXN0X2hlYWQgPSBOVUxMOwoKICAvKiBDbGVhbiB1cCByZXNvdXJj
ZXMgdXBvbiBleGl0LiAgKi8KICBhdGV4aXQgKGZzYXBhcnNlX2Rlc3Ryb3lfbW9kdWxlKTsK
fQoKXV0pKQoKLS0gRmluYWxseSwgYWRkIHRyYWlsZXIgbGluZXMgKHZpbSkKYXNzZXJ0KGY6
d3JpdGUoW1sKLyogdmltOnNldCBzaGlmdHdpZHRoPTI6ICovCl1dKSkKCmFzc2VydChmOmNs
b3NlKCkpCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLS0tLS0tLS0tLS0tLS0tLSoqKioqKioq
IGZzYW11c3RzLmggKioqKioqKiotLS0tLS0tLS0tLS0tLS0tCgpwcmludCgiQ3JlYXRpbmcg
ZnNhbXVzdHMuaC4uLiIpCmxvY2FsIGYgPSBhc3NlcnQoaW8ub3BlbigiZnNhbXVzdHMuaCIs
ICJ3IikpCmFzc2VydChmOndyaXRlKFtbCi8qIGZzYW11c3RzIC0tIFJlcG9ydCBhIGxpc3Qg
b2YgbXVzdC1oYXZlIHNpbXBsZSBzdHJpbmdzIGluIHRoZSBwYXR0ZXJuCgpdXSkpCmFzc2Vy
dChmOndyaXRlKFJhd1RleHQoIkNvcHlyaWdodC5kZmFjIiksICJcbiIpKQphc3NlcnQoZjp3
cml0ZShSYXdUZXh0KCJMaWNlbnNlV2FycmFudHkuZGZhYyIpLCAiXG4iKSkKYXNzZXJ0KGY6
d3JpdGUoUmF3VGV4dCgiQXV0aG9ycy5kZmFjIikpKQphc3NlcnQoZjp3cml0ZShbWwoKLyog
MjAxNDogUmVwYWNrYWdlZCBieSAidW50YW5nbGUiIHNjcmlwdCwgd3JpdHRlbiBieSBiZWhv
ZmZza2kuICAqLwoKLyogPz8gSW5zZXJ0IGxvbmcgZGVzY3JpcHRpb24vZGlzY3Vzc2lvbiBo
ZXJlLiAgKi8KCl1dKSkKCi0tIEFkZCBwcmVwcm9jZXNzb3IgbGluZXMgdG8gbWFrZSB0aGlz
IGhlYWRlciBmaWxlIGlkZW1wb3RlbnQuCmFzc2VydChmOndyaXRlKFtbCiNpZm5kZWYgRlNB
TVVTVFNfSAojZGVmaW5lIEZTQU1VU1RTX0ggMQoKLyogQWx3YXlzIGltcG9ydCBlbnZpcm9u
bWVudC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGl0ZW1zIGZpcnN0LiAgKi8KI2luY2x1ZGUg
PGNvbmZpZy5oPgoKI2luY2x1ZGUgImZzYXRva2VuLmgiCgpdXSkpCgotLSBSYXRoZXIgdGhh
biBhY2N1bXVsYXRpbmcgIm11c3QiIHN0cmluZ3MgaW5zaWRlIHRoZSBpbnRlcm5hbHMsIGFu
ZAotLSBvYnRhaW5pbmcgYSBwb2ludGVyIHRvIHRoZSBsaXN0IGF0IHRoZSBlbmQsIHdlIGV4
cGxpY2l0bHkgbmFtZSB0aGUKLS0gbGlzdCBpbiB0aGUgIm11c3QiIChub3RlOiAqbm90KiAi
bXVzdHMiKSBjYWxsLCBhbmQgcmVjZWl2ZSBhbgotLSB1cGRhdGVkIHBvaW50ZXIgYXMgdGhl
IHJldHVybiB2YWx1ZS4gIEJlY2F1c2UgdGhlIHN0cnVjdHVyZSBpcwotLSBpbnZvbHZlZCBt
b3JlIGhlYXZpbHkgaW4gdGhlIGludGVyZmFjZSwgY2hhbmdlIGl0IHRvIGEgdHlwZWRlZi4K
YXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgiZGZhbXVzdC1zdHJ1Y3QgZGVzY3JpcHRpb24iKSkp
CmFzc2VydChmOndyaXRlKFtbCnR5cGVkZWYgc3RydWN0IGZzYW11c3RzX2xpc3RfZWxlbWVu
dAp7CiAgYm9vbCBleGFjdDsKICBib29sIGJlZ2xpbmU7CiAgYm9vbCBlbmRsaW5lOwogIGNo
YXIgKm11c3Q7CiAgc3RydWN0IGZzYW11c3RzX2xpc3RfZWxlbWVudCAqbmV4dDsKfSBmc2Ft
dXN0c19saXN0X2VsZW1lbnRfdDsKCl1dKSkKCldyaXRlRXh0ZXJuRGVjbChmLCBEZWNsc1si
bXVzdCJdKQoKLS0gRmluYWxseSwgYWRkIHRyYWlsZXIgbGluZXMgKGlkZW1wb3RlbmN5LCB2
aW0pCmFzc2VydChmOndyaXRlKFtbCiNlbmRpZiAvKiBGU0FNVVNUU19IICovCgovKiB2aW06
c2V0IHNoaWZ0d2lkdGg9MjogKi8KXV0pKQoKYXNzZXJ0KGY6Y2xvc2UoKSkKCi0tLS0tLS0t
LS0tLS0tLS0qKioqKioqKiBmc2FtdXN0cy5jICoqKioqKioqLS0tLS0tLS0tLS0tLS0tLQoK
cHJpbnQoIkNyZWF0aW5nIGZzYW11c3RzLmMuLi4iKQpsb2NhbCBmID0gYXNzZXJ0KGlvLm9w
ZW4oImZzYW11c3RzLmMiLCAidyIpKQphc3NlcnQoZjp3cml0ZShbWwovKiBmc2FtdXN0cyAt
LSBSZXBvcnQgYSBsaXN0IG9mIG11c3QtaGF2ZSBzaW1wbGUgc3RyaW5ncyBpbiB0aGUgcGF0
dGVybgoKXV0pKQphc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJDb3B5cmlnaHQuZGZhYyIpLCAi
XG4iKSkKYXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgiTGljZW5zZVdhcnJhbnR5LmRmYWMiKSwg
IlxuIikpCmFzc2VydChmOndyaXRlKFJhd1RleHQoIkF1dGhvcnMuZGZhYyIpKSkKYXNzZXJ0
KGY6d3JpdGUoW1sKCi8qIDIwMTQ6IFJlcGFja2FnZWQgYnkgInVudGFuZ2xlIiBzY3JpcHQs
IHdyaXR0ZW4gYnkgYmVob2Zmc2tpLiAgKi8KCi8qICg/PyBMb25nIGRlc2NyaXB0aW9uL2Rp
c2N1c3Npb24gZ29lcyBoZXJlLi4uKSAqLwoKXV0pKQoKYXNzZXJ0KGY6d3JpdGUoW1sKLyog
QWx3YXlzIGltcG9ydCBlbnZpcm9ubWVudC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGl0ZW1z
IGZpcnN0LiAgKi8KI2luY2x1ZGUgPGNvbmZpZy5oPgoKI2luY2x1ZGUgPGFzc2VydC5oPgoj
aW5jbHVkZSAiY2hhcmNsYXNzLmgiCiNpbmNsdWRlIDxjdHlwZS5oPgojaW5jbHVkZSAiZnNh
bXVzdHMuaCIKI2luY2x1ZGUgImZzYXRva2VuLmgiCiNpbmNsdWRlIDxzdGRib29sLmg+CiNp
bmNsdWRlIDxzdGRkZWYuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5n
Lmg+CiNpbmNsdWRlICJ4YWxsb2MuaCIKCiNpZiBERUJVRwojaW5jbHVkZSA8c3RkaW8uaD4K
I2VuZGlmIC8qIERFQlVHICovCgpdXSkpCgphc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJTVFJF
USIpLCAiXG4iKSkKCmFzc2VydChmOndyaXRlKFJhd1RleHQoIidtdXN0cycgZXhwbGFuYXRp
b24iKSwgIlxuIikpCmFzc2VydChmOndyaXRlKFJhd1RleHQoImljYXRhbGxvYyIpLCAiXG4i
KSkKYXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgiaXN0cnN0ciIpLCAiXG4iKSkKYXNzZXJ0KGY6
d3JpdGUoUmF3VGV4dCgiZnJlZWxpc3QiKSwgIlxuIikpCmFzc2VydChmOndyaXRlKFJhd1Rl
eHQoImVubGlzdCIpLCAiXG4iKSkKYXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgiY29tc3VicyIp
LCAiXG4iKSkKYXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgiYWRkbGlzdHMiKSwgIlxuIikpCmFz
c2VydChmOndyaXRlKFJhd1RleHQoImluYm90aCIpLCAiXG4iKSkKCmFzc2VydChmOndyaXRl
KFJhd1RleHQoIm11c3QgdHlwZWRlZiIpLCAiXG4iKSkKYXNzZXJ0KGY6d3JpdGUoUmF3VGV4
dCgiYWxsb2NtdXN0IiksICJcbiIpKQphc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJyZXNldG11
c3QiKSwgIlxuIikpCmFzc2VydChmOndyaXRlKFJhd1RleHQoImZyZWVtdXN0IiksICJcbiIp
KQoKLS0gQ2hhbmdlIGRmYW11c3QgdG8gZnNhbXVzdF9tdXN0LCByZW1vdmUgZGZhIHN0cnVj
dCwgYW5kIHJlbmFtZSB0b2tlbnMKYXNzZXJ0KGY6d3JpdGUoRGVjbHNbIm11c3QiXSkpCmxv
Y2FsIE11c3RCb2R5ID0gRWRpdGVkVGV4dCgiZGZhbXVzdCBkZWZpbml0aW9uIiwKICAgICIg
IHRva2VuIHQ7IiwgICAiICBmc2F0b2tlbl90b2tlbl90IHQ7IiwKICAgICIgIHRva2VuIHQg
PSAiLCAiICBmc2F0b2tlbl90b2tlbl90IHQgPSAiLAogICAgIiAgcHJ0b2sgIiwgIiAgZnNh
dG9rZW5fcHJ0b2sgIikKbG9jYWwgTXVzdEJvZHkgPSBUZXh0U3Vic3QoTXVzdEJvZHksIFtb
CiAgc3RydWN0IGRmYW11c3QgKmRtOwpdXSwgIiIpCk11c3RCb2R5ID0gVGV4dFN1YnN0KE11
c3RCb2R5LCAiZC0+dGluZGV4IiwgIm5yX3Rva2VucyIpCk11c3RCb2R5ID0gVGV4dFN1YnN0
KE11c3RCb2R5LCAiZC0+dG9rZW5zIiwgInRva2VuX2xpc3QiKQpNdXN0Qm9keSA9IFRleHRT
dWJzdChNdXN0Qm9keSwgImQtPm11c3RzIiwgIm11c3RfbGlzdCIpCk11c3RCb2R5ID0gVGV4
dFN1YnN0KE11c3RCb2R5LCAiIWQtPm11bHRpYnl0ZSIsICJ1bmlieXRlX2xvY2FsZSIpCgpN
dXN0Qm9keSA9IFRleHRTdWJzdChNdXN0Qm9keSwgW1sKICAgICAgICAgICAgICBjaGFyY2xh
c3MgKmNjbCA9ICZkLT5jaGFyY2xhc3Nlc1t0IC0gQ1NFVF07CiAgICAgICAgICAgICAgaW50
IGo7CiAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IE5PVENIQVI7IGorKykKICAgICAg
ICAgICAgICAgIGlmICh0c3RiaXQgKGosICpjY2wpKQogICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICBpZiAoISAoaiA8IE5PVENIQVIpKQogICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgdCA9IGo7CiAgICAgICAgICAgICAgd2hpbGUgKCsraiA8
IE5PVENIQVIpCiAgICAgICAgICAgICAgICBpZiAodHN0Yml0IChqLCAqY2NsKQpdXSwgW1sK
ICAgICAgICAgICAgICBjaGFyY2xhc3NfdCAqY2NsID0gY2hhcmNsYXNzX2dldF9wb2ludGVy
ICh0IC0gQ1NFVCk7CiAgICAgICAgICAgICAgaW50IGo7CiAgICAgICAgICAgICAgZm9yIChq
ID0gMDsgaiA8IE5PVENIQVI7IGorKykKICAgICAgICAgICAgICAgIGlmIChjaGFyY2xhc3Nf
dHN0Yml0IChqLCBjY2wpKQogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICBpZiAoISAoaiA8IE5PVENIQVIpKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgdCA9IGo7CiAgICAgICAgICAgICAgd2hpbGUgKCsraiA8IE5PVENIQVIpCiAgICAg
ICAgICAgICAgICBpZiAoY2hhcmNsYXNzX3RzdGJpdCAoaiwgY2NsKQpdXSkKCk11c3RCb2R5
ID0gVGV4dFN1YnN0KE11c3RCb2R5LCBbWwpkb25lOgogIGlmICgqcmVzdWx0KQogICAgewog
ICAgICBkbSA9IHhtYWxsb2MgKHNpemVvZiAqZG0pOwogICAgICBkbS0+ZXhhY3QgPSBleGFj
dDsKICAgICAgZG0tPmJlZ2xpbmUgPSBiZWdsaW5lOwogICAgICBkbS0+ZW5kbGluZSA9IGVu
ZGxpbmU7CiAgICAgIGRtLT5tdXN0ID0geHN0cmR1cCAocmVzdWx0KTsKICAgICAgZG0tPm5l
eHQgPSBtdXN0X2xpc3Q7CiAgICAgIG11c3RfbGlzdCA9IGRtOwogICAgfQoKICB3aGlsZSAo
bXApCiAgICB7CiAgICAgIG11c3QgKnByZXYgPSBtcC0+cHJldjsKICAgICAgZnJlZW11c3Qg
KG1wKTsKICAgICAgbXAgPSBwcmV2OwogICAgfQpdXSwgW1sKZG9uZToKICBpZiAoc3RybGVu
IChyZXN1bHQpKQogICAgewogICAgICBmc2FtdXN0c19saXN0X2VsZW1lbnRfdCAqZG07Cgog
ICAgICBkbSA9IHhtYWxsb2MgKHNpemVvZiAqZG0pOwogICAgICBkbS0+ZXhhY3QgPSBleGFj
dDsKICAgICAgZG0tPmJlZ2xpbmUgPSBiZWdsaW5lOwogICAgICBkbS0+ZW5kbGluZSA9IGVu
ZGxpbmU7CiAgICAgIGRtLT5tdXN0ID0geHN0cmR1cCAocmVzdWx0KTsKICAgICAgZG0tPm5l
eHQgPSBtdXN0X2xpc3Q7CiAgICAgIG11c3RfbGlzdCA9IGRtOwogICAgfQoKICB3aGlsZSAo
bXApCiAgICB7CiAgICAgIG11c3QgKnByZXYgPSBtcC0+cHJldjsKICAgICAgZnJlZW11c3Qg
KG1wKTsKICAgICAgbXAgPSBwcmV2OwogICAgfQoKICByZXR1cm4gbXVzdF9saXN0OwpdXSkK
CmFzc2VydChmOndyaXRlKEZTQVRva2VuU3Vic3QoTXVzdEJvZHkpLCAiXG4iKSkKCi0tIE5v
dCBuZWVkZWQ6IGFzc2VydChmOndyaXRlKFJhd1RleHQoImRmYW11c3RzIiksICJcbiIpKQoK
LS0gRmluYWxseSwgYWRkIHRyYWlsZXIgbGluZXMgKHZpbSkKYXNzZXJ0KGY6d3JpdGUoW1sK
LyogdmltOnNldCBzaGlmdHdpZHRoPTI6ICovCl1dKSkKCmFzc2VydChmOmNsb3NlKCkpCgot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQoKLS1bPVsKCi0tLS0tLS0tLS0tLS0tLS0qKioqKioqKiBo
aWdoLWxldmVsLWRmYS5oICoqKioqKioqLS0tLS0tLS0tLS0tLS0tLQoKcHJpbnQoIkNyZWF0
aW5nIGhpZ2gtbGV2ZWwtZGZhLmguLi4iKQpsb2NhbCBmID0gYXNzZXJ0KGlvLm9wZW4oImhp
Z2gtbGV2ZWwtZGZhLmgiLCAidyIpKQphc3NlcnQoZjp3cml0ZShbWwovKiBoaWdoX2xldmVs
X2RmYSAtLSBIaWdoLWxldmVsIGRmYSBmdW5jdGlvbnMgdGhhdCBwcm9jZXNzIGxvd2VyLWxl
dmVsIGluZm8KCl1dKSkKYXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgiQ29weXJpZ2h0LmRmYWMi
KSwgIlxuIikpCmFzc2VydChmOndyaXRlKFJhd1RleHQoIkxpY2Vuc2VXYXJyYW50eS5kZmFj
IiksICJcbiIpKQphc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJBdXRob3JzLmRmYWMiKSkpCmFz
c2VydChmOndyaXRlKFtbCgovKiAyMDE0OiBSZXBhY2thZ2VkIGJ5ICJ1bnRhbmdsZSIgc2Ny
aXB0LCB3cml0dGVuIGJ5IGJlaG9mZnNraS4gICovCgovKiAoPz8gTG9uZyBkZXNjcmlwdGlv
bi9kaXNjdXNzaW9uIGdvZXMgaGVyZS4uLikgKi8KCl1dKSkKCi0tIEFkZCBwcmVwcm9jZXNz
b3IgbGluZXMgdG8gbWFrZSB0aGlzIGhlYWRlciBmaWxlIGlkZW1wb3RlbnQuCmFzc2VydChm
OndyaXRlKFtbCiNpZm5kZWYgSElHSF9MRVZFTF9ERkFfSAojZGVmaW5lIEhJR0hfTEVWRUxf
REZBX0ggMQoKLyogQWx3YXlzIGltcG9ydCBlbnZpcm9ubWVudC1zcGVjaWZpYyBjb25maWd1
cmF0aW9uIGl0ZW1zIGZpcnN0LiAgKi8KI2luY2x1ZGUgPGNvbmZpZy5oPgoKI2luY2x1ZGUg
ImZzYXRva2VuLmgiCgpdXSkpCgphc3NlcnQoZjp3cml0ZShbWwovKiBGdW5jdGlvbnMgdG8g
aW5pdGlhbGlzZSBhbmQgdGVhciBkb3duIGVudGlyZSBtb2R1bGUgYW5kIGFsbCBhc3NvY2lh
dGVkCiAgIGluc3RhbmNlcy4gICovCgpdXSkpCgpXcml0ZUV4dGVybkRlY2woZiwgRGVjbHNb
ImhsZGZhLWluaXRpYWxpc2UiXSkKV3JpdGVFeHRlcm5EZWNsKGYsIERlY2xzWyJobGRmYS1k
ZXN0cm95LW1vZHVsZSJdKQoKYXNzZXJ0KGY6d3JpdGUoW1sKLyogRnVuY3Rpb25zIHRvIGNy
ZWF0ZSBhIG5ldyBwYXJzZXIgaW5zdGFuY2UsIGFuZCB0byBjb25uZWN0IGl0IHdpdGggYQog
ICBjb21wYXRpYmxlIGxleGVyIGluc3RhbmNlLiAgKi8KCl1dKSkKLS0gV3JpdGVFeHRlcm5E
ZWNsKGYsIERlY2xzWyJobGRmYS1uZXciXSkKCi0tIEZJWE1FOiBUaGUgZm9sbG93aW5nIGlz
IGEgY29weS1wYXN0ZS1hbmQtcmVuYW1lLWVkaXQgZnJvbSB0aGUgZnNhbGV4IGNvZGUuCi0t
IElzIHRoZXJlIGEgbGVzcyByZWR1bmRhbnQgd2F5IG9mIGRvaW5nIHRoaXM/CgotLSBXaGls
ZSBkZmEuaCBkZWNsYXJlcyBkZmF3YXJuKCkgYW5kIGRmYWVycm9yKCksIGFuZCBkZW1hbmRz
IHRoYXQgdGhlIGNsaWVudAotLSBzdXBwbHkgZnVuY3Rpb25zIGF0IGxpbmsgdGltZSwgd2Ug
aW5zdGVhZCBwcm92aWRlIGFuIGludGVyZmFjZSBmdW5jdGlvbgotLSBzbyB0aGF0IHRoZSBm
dW5jdGlvbnMgY2FuIGJlIGhhbmRlZCBvdmVyIGV4cGxpY2l0bHkuICBUaGlzIHN0eWxlIG1h
eSBiZQotLSB1c2VmdWwgaW4gdGhlIGZ1dHVyZSBpZiB3ZSB3YW50IHRvIG1vdmUgZnJvbSBh
IHNpbmdsZSBobGRmYSBpbnN0YW5jZSB0bwotLSBtdWx0aXBsZSBpbnN0YW5jZXMgKG9iamVj
dHM/KQphc3NlcnQoZjp3cml0ZShbWwovKiBEZWZpbmUgZnVuY3Rpb24gcHJvdG90eXBlcyBm
b3Igd2FybmluZyBhbmQgZXJyb3IgY2FsbGJhY2tzLiAgKi8KdHlwZWRlZiB2b2lkCmhsZGZh
X3dhcm5fY2FsbGJhY2tfZm4gKGNvbnN0IGNoYXIgKik7CnR5cGVkZWYgdm9pZCAvKiA/PyBf
Tm9yZXR1cm4/ICovCmhsZGZhX19lcnJvcl9jYWxsYmFja19mbiAoY29uc3QgY2hhciAqKTsK
Cl1dKSkKCi0tIEZpbmFsbHksIGFkZCB0cmFpbGVyIGxpbmVzIChpZGVtcG90ZW5jeSwgdmlt
KQphc3NlcnQoZjp3cml0ZShbWwojZW5kaWYgLyogSElHSF9MRVZFTF9ERkFfSCAqLwoKLyog
dmltOnNldCBzaGlmdHdpZHRoPTI6ICovCl1dKSkKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgot
LS0tLS0tLS0tLS0tLS0tKioqKioqKiogaGlnaC1sZXZlbC1kZmEuYyAqKioqKioqKi0tLS0t
LS0tLS0tLS0tLS0KCnByaW50KCJDcmVhdGluZyBoaWdoLWxldmVsLWRmYS5jLi4uIikKbG9j
YWwgZiA9IGFzc2VydChpby5vcGVuKCJoaWdoLWxldmVsLWRmYS5jIiwgInciKSkKYXNzZXJ0
KGY6d3JpdGUoW1sKLyogaGlnaF9sZXZlbF9kZmEgLS0gSGlnaC1sZXZlbCBkZmEgZnVuY3Rp
b25zIHRoYXQgcHJvY2VzcyBsb3dlci1sZXZlbCBpbmZvCgpdXSkpCmFzc2VydChmOndyaXRl
KFJhd1RleHQoIkNvcHlyaWdodC5kZmFjIiksICJcbiIpKQphc3NlcnQoZjp3cml0ZShSYXdU
ZXh0KCJMaWNlbnNlV2FycmFudHkuZGZhYyIpLCAiXG4iKSkKYXNzZXJ0KGY6d3JpdGUoUmF3
VGV4dCgiQXV0aG9ycy5kZmFjIikpKQphc3NlcnQoZjp3cml0ZShbWwoKLyogMjAxNDogUmVw
YWNrYWdlZCBieSAidW50YW5nbGUiIHNjcmlwdCwgd3JpdHRlbiBieSBiZWhvZmZza2kuICAq
LwoKLyogKD8/IExvbmcgZGVzY3JpcHRpb24vZGlzY3Vzc2lvbiBnb2VzIGhlcmUuLi4pICov
CgpdXSkpCgphc3NlcnQoZjp3cml0ZShbWwovKiBBbHdheXMgaW1wb3J0IGVudmlyb25tZW50
LXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaXRlbXMgZmlyc3QuICAqLwojaW5jbHVkZSA8Y29u
ZmlnLmg+CgojaW5jbHVkZSA8YXNzZXJ0Lmg+CiNpbmNsdWRlICJjaGFyY2xhc3MuaCIKI2lu
Y2x1ZGUgPGN0eXBlLmg+CiNpbmNsdWRlICJoaWdoLWxldmVsLWRmYS5oIgojaW5jbHVkZSAi
ZnNhdG9rZW4uaCIKI2luY2x1ZGUgPHN0ZGJvb2wuaD4KI2luY2x1ZGUgPHN0ZGRlZi5oPgoj
aW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgInhhbGxv
Yy5oIgoKI2lmIERFQlVHCiNpbmNsdWRlIDxzdGRpby5oPgojZW5kaWYgLyogREVCVUcgKi8K
Cl1dKSkKCmFzc2VydChmOndyaXRlKFJhd1RleHQoIlBvc2l0aW9uQXRvbStEeW5TZXQiKSwg
IlxuIikpCmFzc2VydChmOndyaXRlKFJhd1RleHQoImxlYWZfc2V0X3R5cGVkZWYiKSwgIlxu
IikpCmFzc2VydChmOndyaXRlKFJhd1RleHQoImRmYV9zdGF0ZV90eXBlZGVmIiksICJcbiIp
KQphc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJzdGF0ZV9udW1fdHlwZWRlZiIpLCAiXG4iKSkK
CmFzc2VydChmOndyaXRlKFJhd1RleHQoImNvcHkiKSwgIlxuIikpCmFzc2VydChmOndyaXRl
KFJhd1RleHQoImFsbG9jX3Bvc2l0aW9uX3NldCIpLCAiXG4iKSkKYXNzZXJ0KGY6d3JpdGUo
UmF3VGV4dCgiaW5zZXJ0IiksICJcbiIpKQphc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJtZXJn
ZSIpLCAiXG4iKSkKYXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgiZGVsZXRlIiksICJcbiIpKQph
c3NlcnQoZjp3cml0ZShSYXdUZXh0KCJzdGF0ZV9pbmRleCIpLCAiXG4iKSkKYXNzZXJ0KGY6
d3JpdGUoUmF3VGV4dCgiZXBzY2xvc3VyZSIpLCAiXG4iKSkKCmFzc2VydChmOndyaXRlKFJh
d1RleHQoImNoYXJjbGFzc19jb250ZXh0IiksICJcbiIpKQphc3NlcnQoZjp3cml0ZShSYXdU
ZXh0KCJzdGF0ZV9zZXBhcmF0ZV9jb250ZXh0cyIpLCAiXG4iKSkKCmFzc2VydChmOndyaXRl
KFJhd1RleHQoImRmYWFuYWx5c2Ugc3VtbWFyeSBjb21tZW50IiksICJcbiIpKQphc3NlcnQo
Zjp3cml0ZShSYXdUZXh0KCJkZmFhbmFseXNlIiksICJcbiIpKQoKYXNzZXJ0KGY6d3JpdGUo
UmF3VGV4dCgiZGZhc3RhdGUgc3VtbWFyeSBjb21tZW50IiksICJcbiIpKQphc3NlcnQoZjp3
cml0ZShSYXdUZXh0KCJkZmFzdGF0ZSIpLCAiXG4iKSkKYXNzZXJ0KGY6d3JpdGUoUmF3VGV4
dCgicmVhbGxvY190cmFuc19pZl9uZWNlc3NhcnkiKSwgIlxuIikpCmFzc2VydChmOndyaXRl
KFJhd1RleHQoImJ1aWxkX3N0YXRlIiksICJcbiIpKQoKYXNzZXJ0KGY6d3JpdGUoUmF3VGV4
dCgiTXVsdGlieXRlIGZucyBzZWN0aW9uIGNvbW1lbnQiKSwgIlxuIikpCgphc3NlcnQoZjp3
cml0ZShSYXdUZXh0KCJzdGF0dXNfdHJhbnNpdF9zdGF0ZSB0eXBlZGVmIiksICJcbiIpKQph
c3NlcnQoZjp3cml0ZShSYXdUZXh0KCJ0cmFuc2l0X3N0YXRlX3NpbmdsZWJ5dGUiKSwgIlxu
IikpCmFzc2VydChmOndyaXRlKFJhd1RleHQoIm1hdGNoX2FueWNoYXIiKSwgIlxuIikpCmFz
c2VydChmOndyaXRlKFJhd1RleHQoIm1hdGNoX21iX2NoYXJzZXQiKSwgIlxuIikpCgphc3Nl
cnQoZjp3cml0ZShSYXdUZXh0KCJjaGVja19tYXRjaGluZ193aXRoX211bHRpYnl0ZV9vcHMi
KSwgIlxuIikpCmFzc2VydChmOndyaXRlKFJhd1RleHQoInRyYW5zaXRfc3RhdGVfY29uc3Vt
ZV8xY2hhciIpLCAiXG4iKSkKYXNzZXJ0KGY6d3JpdGUoUmF3VGV4dCgidHJhbnNpdF9zdGF0
ZSIpLCAiXG4iKSkKCmFzc2VydChmOndyaXRlKFJhd1RleHQoImRmYWV4ZWMiKSwgIlxuIikp
CmFzc2VydChmOndyaXRlKFJhd1RleHQoImRmYXN1cGVyc2V0IiksICJcbiIpKQphc3NlcnQo
Zjp3cml0ZShSYXdUZXh0KCJkZGFpc2Zhc3QiKSwgIlxuIikpCmFzc2VydChmOndyaXRlKFJh
d1RleHQoImZyZWVfbWJkYXRhIiksICJcbiIpKQphc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJk
ZmFpbml0IiksICJcbiIpKQphc3NlcnQoZjp3cml0ZShSYXdUZXh0KCJkZmFvcHRpbWl6ZSIp
LCAiXG4iKSkKCmFzc2VydChmOndyaXRlKFJhd1RleHQoImRmYXNzYnVpbGQiKSwgIlxuIikp
CmFzc2VydChmOndyaXRlKFJhd1RleHQoImRmYWNvbXAiKSwgIlxuIikpCmFzc2VydChmOndy
aXRlKFJhd1RleHQoImRmYWZyZWUiKSwgIlxuIikpCmFzc2VydChmOndyaXRlKFJhd1RleHQo
ImRmYWFsbG9jIiksICAiXG4iKSkKCmFzc2VydChmOmNsb3NlKCkpCgotLV09XQoKLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KCi0tLS0tLS0tLS0tLS0tLS0qKioqKioqKiBkZmEtcHJsLmMgKioq
KioqKiotLS0tLS0tLS0tLS0tLS0tCgotLSBkZmEtcHJsLmMgLS0gIlBhcmFsbGVsIiB2ZXJz
aW9uIG9mIGRmYS5jLCB3aGljaCBpcyB1c2VkIHRvIHF1YW50aWZ5IHRoZQotLSBwZXJmb3Jt
YW5jZSBvZiB0aGUgbmV3IGNvZGUgYnkgcnVubmluZyBpdCBpbiBwYXJhbGxlbCB3aXRoIHRo
ZSBleGlzdGluZwotLSBjb2RlLCBhbmQgY2hlY2tpbmcgdGhhdCB0aGUgb3V0cHV0cyBhcmUg
aWRlbnRpY2FsLgoKcHJpbnQoIkdlbmVyYXRpbmcgZGZhLXBybC5jIGJ5IGNvcHlpbmcgZGZh
LmMgYW5kIHRoZW4gYXBwbHlpbmcgZWRpdHMiKQoKb3MuZXhlY3V0ZSgiY3AgLWZwIGRmYS5j
IGRmYS1wcmwuYyIpCgotLSBSZWFkIHRoZSBlbnRpcmUgZmlsZSBpbnRvIGEgc2luZ2xlIHNl
Z21lbnQKbG9jYWwgZGZhcHJsYyA9IE5ld0ZpbGVUYWJsZSgiZGZhLXBybC5jIikKU2VjdGlv
bigiZGZhLXBybCIsIGRmYXBybGMsIDApClNlZ3M6VGFnKCJkZmEtcHJsLmMiLCAxLCAjZGZh
cHJsYykKCi0tIEFwcGx5IGVkaXRzIHJhdGhlciBjcnVkZWx5LCBzaWdoLgotLSBkZmFzeW50
YXgoKSBuZWVkcyB0byBiZSBtb2RpZmllZCB0byBpbml0aWFsaXNlIGZzYWxleF9zeW50YXgo
KTsKLS0gdGhpcyBpcyBhbHNvIHBlcmhhcHMgdGhlIGJlc3QgcG9pbnQgdG8gYWRkIG9uY2Ut
b2ZmIGluaXRpYWxpc2F0aW9uCi0tIGNhbGxzIGZvciB0aGUgbmV3IG1vZHVsZXMuCi0tIFdl
IGNoYW5nZSBkZmEtcHJsLmMncyBsZXgoKSBmdW5jdGlvbiBpbnRvIE9yaWdpbmFsTGV4RnVu
Y3Rpb24oKSAob3IKLS0gd2hhdGV2ZXIpLCBpbnRyb2R1Y2UgYSBuZXcgbGV4KCkgZnVuY3Rp
b24gdGhhdCBjYWxscyB0aGUgbmV3IGNvZGUgYW5kCi0tIHRoZSBleGlzdGluZyBjb2RlIHNp
ZGUtYnktc2lkZSwgYW5kIGNvbXBhcmVzIHRoZSByZXN1bHQuCgpsb2NhbCBib2R5ID0gUmF3
VGV4dCgiZGZhLXBybC5jIikKYm9keSA9IFRleHRTdWJzdChib2R5LCBbWwojaW5jbHVkZSA8
YXNzZXJ0Lmg+CiNpbmNsdWRlIDxjdHlwZS5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1
ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8bGltaXRzLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4K
I2luY2x1ZGUgPGxvY2FsZS5oPgpdXSwgW1sKI2luY2x1ZGUgPGFzc2VydC5oPgojaW5jbHVk
ZSA8Y3R5cGUuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2lu
Y2x1ZGUgPGxpbWl0cy5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxsb2NhbGUu
aD4KCi8qIEhPT0s6IEhhY2sgaW4gaW50ZXJmYWNlcyB0byBuZXcgY2hhcmNsYXNzIGFuZCBm
c2EqIG1vZHVsZXMuICAqLwojaW5jbHVkZSAiY2hhcmNsYXNzLmgiCiNpbmNsdWRlICJmc2F0
b2tlbi5oIgojaW5jbHVkZSAiZnNhbGV4LmgiCiNpbmNsdWRlICJmc2FtdXN0cy5oIgojaW5j
bHVkZSAiZnNhcGFyc2UuaCIKI2luY2x1ZGUgIm1iY3NldHMuaCIKI2luY2x1ZGUgInByb3Rv
LWxleHBhcnNlLmgiCgovKiBIT09LOiBGaWxlIGhhbmRsZSBmb3IgaG9vay9wYXJhbGxlbCBs
ZXgvcGFyc2UgZGVidWcvbG9nIG1lc3NhZ2VzICovCkZJTEUgKnBsbF9sb2cgPSBOVUxMOwoK
I2RlZmluZSBIT09LX0xPR19GSUxFTkFNRSAgICIvdG1wL3BhcmFsbGVsLmxvZyIKCi8qIEhP
T0s6IFN0YXRpYyB2YXJpYWJsZXMgdG8gaG9sZCBvcGFxdWUgcGFyc2VyIGFuZCBsZXhlciBj
b250ZXh0cy4gICovCnN0YXRpYyBmc2FwYXJzZV9jdHh0X3QgKnBhcnNlciA9IE5VTEw7CnN0
YXRpYyBmc2FsZXhfY3R4dF90ICpsZXhlciA9IE5VTEw7CgovKiBIT09LOiBTdG9yZSBtdXN0
cyBsaXN0IGFzIGEgc3RhdGljIHZhcmlhYmxlIHNvIHdlIGNhbiBmcmVlIGl0IGNvcnJlY3Rs
eS4gICovCnN0YXRpYyBmc2FtdXN0c19saXN0X2VsZW1lbnRfdCAqbXVzdHMgPSBOVUxMOwoK
XV0pCgotLSBXaGVuIGRmYXN5bnRheCByZWNlaXZlcyBzeW50YXggb3B0aW9ucywgYWxzbyB0
ZWxsIGZzYWxleF9zeW50YXguCmJvZHkgPSBUZXh0U3Vic3QoYm9keSwgW1sKLyogRW50cnkg
cG9pbnQgdG8gc2V0IHN5bnRheCBvcHRpb25zLiAgKi8Kdm9pZApkZmFzeW50YXggKHJlZ19z
eW50YXhfdCBiaXRzLCBpbnQgZm9sZCwgdW5zaWduZWQgY2hhciBlb2wpCnsKICB1bnNpZ25l
ZCBpbnQgaTsKCiAgc3ludGF4X2JpdHNfc2V0ID0gMTsKICBzeW50YXhfYml0cyA9IGJpdHM7
CiAgY2FzZV9mb2xkID0gZm9sZCAhPSAwOwogIGVvbGJ5dGUgPSBlb2w7CgpdXSwgW1sKdHlw
ZWRlZiBzdHJ1Y3QgcmVnZXhfbmFtZV9tYXBwaW5nX3N0cnVjdAp7CiAgcmVnX3N5bnRheF90
IGZsYWc7CiAgY29uc3QgY2hhciAqbmFtZTsKfSByZWdleF9uYW1lX21hcHBpbmdfdDsKCnN0
YXRpYyByZWdleF9uYW1lX21hcHBpbmdfdCByZWdleF9uYW1lc1tdID0gewogIHtSRV9CQUNL
U0xBU0hfRVNDQVBFX0lOX0xJU1RTLCAiYmFja3NsYXNoX2VzY2FwZV9pbl9saXN0cyJ9LAog
IHtSRV9CS19QTFVTX1FNLCAgICAgICAgICAgICAgICAiYmtfcGx1c19xbSJ9LAogIHtSRV9D
SEFSX0NMQVNTRVMsICAgICAgICAgICAgICAiY2hhcl9jbGFzc2VzIn0sCiAge1JFX0NPTlRF
WFRfSU5ERVBfQU5DSE9SUywgICAgICJjb250ZXh0X2luZGVwX2FuY2hvcnMifSwKICB7UkVf
Q09OVEVYVF9JTkRFUF9PUFMsICAgICAgICAgImNvbnRleHRfaW5kZXBfb3BzIn0sCiAge1JF
X0NPTlRFWFRfSU5WQUxJRF9PUFMsICAgICAgICJjb250ZXh0X2ludmFsaWRfb3BzIn0sCiAg
e1JFX0RPVF9ORVdMSU5FLCAgICAgICAgICAgICAgICJkb3RfbmV3bGluZSJ9LAogIHtSRV9E
T1RfTk9UX05VTEwsICAgICAgICAgICAgICAiZG90X25vdF9udWxsIn0sCiAge1JFX0hBVF9M
SVNUU19OT1RfTkVXTElORSwgICAgICJoYXRfbGlzdHNfbm90X25ld2xpbmUifSwKICB7UkVf
SU5URVJWQUxTLCAgICAgICAgICAgICAgICAgImludGVydmFscyJ9LAogIHtSRV9MSU1JVEVE
X09QUywgICAgICAgICAgICAgICAibGltaXRlZF9vcHMifSwKICB7UkVfTkVXTElORV9BTFQs
ICAgICAgICAgICAgICAgIm5ld2xpbmVfYWx0In0sCiAge1JFX05PX0JLX0JSQUNFUywgICAg
ICAgICAgICAgICJub19ia19icmFjZXMifSwKICB7UkVfTk9fQktfUEFSRU5TLCAgICAgICAg
ICAgICAgIm5vX2JrX3BhcmVucyJ9LAogIHtSRV9OT19CS19SRUZTLCAgICAgICAgICAgICAg
ICAibm9fYmtfcmVmcyJ9LAogIHtSRV9OT19CS19WQkFSLCAgICAgICAgICAgICAgICAibm9f
YmtfdmJhciJ9LAogIHtSRV9OT19FTVBUWV9SQU5HRVMsICAgICAgICAgICAibm9fZW1wdHlf
cmFuZ2VzIn0sCiAge1JFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQsICJ1bm1hdGNoZWRf
cmlnaHRfcGFyZW5fb3JkIn0sCiAge1JFX05PX1BPU0lYX0JBQ0tUUkFDS0lORywgICAgICJu
b19wb3NpeF9iYWNrdHJhY2tpbmcifSwKICB7UkVfTk9fR05VX09QUywgICAgICAgICAgICAg
ICAgIm5vX2dudV9vcHMifSwKICB7UkVfREVCVUcsICAgICAgICAgICAgICAgICAgICAgImRl
YnVnIn0sCiAge1JFX0lOVkFMSURfSU5URVJWQUxfT1JELCAgICAgICJpbnZhbGlkX2ludGVy
dmFsX29yZCJ9LAogIHtSRV9JQ0FTRSwgICAgICAgICAgICAgICAgICAgICAiaWNhc2UifSwK
ICB7UkVfQ0FSRVRfQU5DSE9SU19IRVJFLCAgICAgICAgImNhcmV0X2FuY2hvcnNfaGVyZSJ9
LAogIHtSRV9DT05URVhUX0lOVkFMSURfRFVQLCAgICAgICAiY29udGV4dF9pbnZhbGlkX2R1
cCJ9LAogIHtSRV9OT19TVUIsICAgICAgICAgICAgICAgICAgICAibm9fc3ViIn0sCiAgezAs
IE5VTEx9Cn07CgovKiBFbnRyeSBwb2ludCB0byBzZXQgc3ludGF4IG9wdGlvbnMuICAqLwp2
b2lkCmRmYXN5bnRheCAocmVnX3N5bnRheF90IGJpdHMsIGludCBmb2xkLCB1bnNpZ25lZCBj
aGFyIGVvbCkKewogIHVuc2lnbmVkIGludCBpOwoKICAvKiBIb29rOiBEZWJ1ZyBidWZmZXIg
dG8gcmVjb3JkIHNlYXJjaCBzeW50YXggc3BlY2lmaWNhdGlvbnMuICAqLwogIHN0YXRpYyBj
aGFyIGJ1ZlsyNTZdOwogIGNoYXIgKnBfYnVmOwogIGNoYXIgKmxvY2FsZTsKCiAgc3ludGF4
X2JpdHNfc2V0ID0gMTsKICBzeW50YXhfYml0cyA9IGJpdHM7CiAgY2FzZV9mb2xkID0gZm9s
ZCAhPSAwOwogIGVvbGJ5dGUgPSBlb2w7CgogIEhPT0tfc2V0X3VwX2ZzYV9zdHVmZl9pZl9u
b3RfZG9uZV9hbHJlYWR5ICgpOwoKICAvKiBIT09LOiBUZWxsIGZzYWxleCBtb2R1bGUgYWJv
dXQgc3ludGF4IHNlbGVjdGlvbnMuICAqLwogIGZzYWxleF9zeW50YXggKGxleGVyLCBiaXRz
LCBmb2xkLCBlb2wpOwoKICAvKiBIT09LOiBSZWNvcmQgc3ludGF4IHNlbGVjdGlvbnMgaW4g
ZGVidWcgbG9nZmlsZS4gICovCiAgaWYgKCEgcGxsX2xvZykKICAgIHBsbF9sb2cgPSBmb3Bl
biAoSE9PS19MT0dfRklMRU5BTUUsICJhIik7CiAgbG9jYWxlID0gc2V0bG9jYWxlIChMQ19B
TEwsIE5VTEwpOwogIGZwcmludGYgKHBsbF9sb2csICJcblN5bnRheDogQ2FzZSBmb2xkOiAl
ZDsgZW9sIGNoYXI6ICUwMng7IGxvY2FsZTogJXMiLAogICAgICAgICAgZm9sZCwgKGludCkg
ZW9sLCBsb2NhbGUpOwogIHBfYnVmID0gYnVmOwogICpwX2J1ZisrID0gJ1xuJzsKICAqcF9i
dWYrKyA9ICcgJzsKICAqcF9idWYgICA9ICdcMCc7CiAgZm9yIChpID0gMDsgcmVnZXhfbmFt
ZXNbaV0ubmFtZTsgaSsrKQogICAgewogICAgICBjaGFyIGZsYWdfY2hhciA9IChiaXRzICYg
cmVnZXhfbmFtZXNbaV0uZmxhZykgPyAnKycgOiAnLSc7CiAgICAgIHBfYnVmICs9IHNwcmlu
dGYocF9idWYsICIgJWMlcyIsIGZsYWdfY2hhciwgcmVnZXhfbmFtZXNbaV0ubmFtZSk7CiAg
ICAgIGlmIChzdHJsZW4gKGJ1ZikgPj0gODIpCiAgICAgICAgewogICAgICAgICAgZnByaW50
ZiAocGxsX2xvZywgIiVzIiwgYnVmKTsKICAgICAgICAgIHBfYnVmID0gJmJ1ZlsyXTsKICAg
ICAgICAgICpwX2J1ZiA9ICdcMCc7CiAgICAgICAgfQogICAgfQogIGZwcmludGYgKHBsbF9s
b2csICIlc1xuIiwgYnVmKTsKCiAgLyogT2theSwgbm93IHRoZSBwYXJzZXIgY2FuIHRhbGsg
dG8gYSBsZXhlciB0aGF0IGtub3dzIGxvY2FsZSBhbmQgc3ludGF4CiAgICAgY29uZmlndXJh
dGlvbiBkZXRhaWxzLiAgKi8KICBmc2FwYXJzZV9sZXhlciAocGFyc2VyLCBsZXhlciwKICAg
ICAgICAgICAgICAgICAgKHByb3RvX2xleHBhcnNlX2xleF9mbl90ICopIGZzYWxleF9sZXgs
CiAgICAgICAgICAgICAgICAgIChwcm90b19sZXhwYXJzZV9leGNoYW5nZV9mbl90ICopIGZz
YWxleF9leGNoYW5nZSk7CgpdXSkKCmJvZHkgPSBUZXh0U3Vic3QgKGJvZHksIFtbCi8qIEVu
dHJ5IHBvaW50IHRvIHNldCBzeW50YXggb3B0aW9ucy4gICovCnZvaWQKZGZhc3ludGF4IChy
ZWdfc3ludGF4X3QgYml0cywgaW50IGZvbGQsIHVuc2lnbmVkIGNoYXIgZW9sKQpdXSwgW1sK
LyogSE9PSzogV2hlbiB3ZSBhYm9ydCwgZ2V0IHJpZCBvZiByZXNvdXJjZXMgdGhhdCB3ZSd2
ZSBhY3F1aXJlZCwgYmVmb3JlCiAgIGZpbmFsbHkgaGFuZGluZyBjb250cm9sIHRvIHRoZSBh
Ym9ydCBtZWNoYW5pc20uICBXZSBkbyB0aGlzIHRvIG1pbmltaXNlCiAgIHJlc291cmNlIGFs
bG9jYXRpb24gZXJyb3IgcmVwb3J0ZWQgYnkgVmFsZ3JpbmQ7IEkgYmVsaWV2ZSB0aGF0IGl0
IGlzIG5vdAogICB2aXRhbCB0byBkbyBzbyBvdGhlcndpc2UgKGJ1dCBJIG1heSBiZSB3cm9u
ZykuICAqLwpzdGF0aWMgdm9pZApIT09LX3RlYXJfZG93bl9hZGRpdGlvbmFsX2luZnJhc3Ry
dWN0dXJlICh2b2lkKQp7Ci8qIE1vZHVsZXMgZGVzdHJveSB0aGVtc2VsdmVzIHZpYSBhIG1v
ZHVsZS13aWRlIGF0ZXhpdCAoKSByZWdpc3RyYXRpb24uICAqLwojaWYgMAogIGZzYWxleF9k
ZXN0cm95X21vZHVsZSAoKTsKICBmc2FwYXJzZV9kZXN0cm95X21vZHVsZSAoKTsKICBjaGFy
Y2xhc3NfZGVzdHJveV9tb2R1bGUgKCk7CiNlbmRpZiAvKiAwICovCgogIHBhcnNlciA9IE5V
TEw7CiAgbGV4ZXIgPSBOVUxMOwogIC8qIGZzYXRva2VuLCBwcm90by1sZXhwYXJzZSBhbmQg
ZGZhLXBybCBpdHNlbGYgZG8gbm90IG5lZWQKICAgICBhdHRlbnRpb24gKHlldD8pLiAgKi8K
CiAgLyogUmVsZWFzZSB0aGUgIm11c3RzIiBsaXN0IHdlIGNvbXBpbGVkIGVhcmxpZXIuICAq
LwogIHsKICAgIGZzYW11c3RzX2xpc3RfZWxlbWVudF90ICptbGlzdDsKICAgIGZzYW11c3Rz
X2xpc3RfZWxlbWVudF90ICptbmV4dDsKCiAgICBmb3IgKG1saXN0ID0gbXVzdHM7IG1saXN0
OyBtbGlzdCA9IG1uZXh0KQogICAgICB7CiAgICAgICBtbmV4dCA9IG1saXN0LT5uZXh0Owog
ICAgICAgZnJlZSAobWxpc3QtPm11c3QpOwogICAgICAgZnJlZSAobWxpc3QpOwogICAgICB9
CgogICAgbXVzdHMgPSBOVUxMOwogIH0KfQoKLyogSE9PSzogUHJvdmlkZSBlcnJvci93YXJu
aW5nIGZ1bmN0aW9ucyB0aGF0IGluY2x1ZGUgbG9nZ2luZy4gICovCnN0YXRpYyB2b2lkCmxl
eGVyX3dhcm4oY29uc3QgY2hhciAqd2FybmluZykKewogIGlmICghIHBsbF9sb2cpCiAgICBw
bGxfbG9nID0gZm9wZW4gKEhPT0tfTE9HX0ZJTEVOQU1FLCAiYSIpOwogIGZwcmludGYgKHBs
bF9sb2csICJsZXhlciB3YXJuaW5nOiAlc1xuIiwgd2FybmluZyk7CiAgZmZsdXNoIChOVUxM
KTsKICBkZmF3YXJuICh3YXJuaW5nKTsKfQpzdGF0aWMgX05vcmV0dXJuIHZvaWQKbGV4ZXJf
ZXJyb3IoY29uc3QgY2hhciAqcmVhc29uKQp7CiAgaWYgKCEgcGxsX2xvZykKICAgIHBsbF9s
b2cgPSBmb3BlbiAoSE9PS19MT0dfRklMRU5BTUUsICJhIik7CiAgZnByaW50ZiAocGxsX2xv
ZywgImxleGVyIGVycm9yOiAlc1xuIiwgcmVhc29uKTsKICBIT09LX3RlYXJfZG93bl9hZGRp
dGlvbmFsX2luZnJhc3RydWN0dXJlICgpOwogIGZmbHVzaCAoTlVMTCk7CiAgZGZhZXJyb3Ig
KHJlYXNvbik7Cn0KCnN0YXRpYyB2b2lkCnBhcnNlcl93YXJuKGNvbnN0IGNoYXIgKndhcm5p
bmcpCnsKICBpZiAoISBwbGxfbG9nKQogICAgcGxsX2xvZyA9IGZvcGVuIChIT09LX0xPR19G
SUxFTkFNRSwgImEiKTsKICBmcHJpbnRmIChwbGxfbG9nLCAicGFyc2VyIHdhcm5pbmc6ICVz
XG4iLCB3YXJuaW5nKTsKICBmZmx1c2ggKE5VTEwpOwogIGRmYXdhcm4gKHdhcm5pbmcpOwp9
CnN0YXRpYyBfTm9yZXR1cm4gdm9pZApwYXJzZXJfZXJyb3IoY29uc3QgY2hhciAqcmVhc29u
KQp7CiAgaWYgKCEgcGxsX2xvZykKICAgIHBsbF9sb2cgPSBmb3BlbiAoSE9PS19MT0dfRklM
RU5BTUUsICJhIik7CiAgZnByaW50ZiAocGxsX2xvZywgInBhcnNlciBlcnJvcjogJXNcbiIs
IHJlYXNvbik7CiAgSE9PS190ZWFyX2Rvd25fYWRkaXRpb25hbF9pbmZyYXN0cnVjdHVyZSAo
KTsKICBmZmx1c2ggKE5VTEwpOwogIGRmYWVycm9yIChyZWFzb24pOwp9CgpzdGF0aWMgdm9p
ZApIT09LX3NldF91cF9mc2Ffc3R1ZmZfaWZfbm90X2RvbmVfYWxyZWFkeSAodm9pZCkKewog
IC8qIElmIGxleGVyIGNvbnRleHQgaXMgcHJlc2VudCwgdGhpcyBmdW5jdGlvbiBoYXMgYmVl
biBydW4gcHJldmlvdXNseS4gICovCiAgaWYgKGxleGVyICE9IE5VTEwpCiAgICByZXR1cm47
CgogIC8qIEluaXRpYWxpc2UgbW9kdWxlcyBiZWZvcmUgY3JlYXRpbmcgaW5zdGFuY2VzLiAg
Ki8KICBmc2FsZXhfaW5pdGlhbGlzZSAoKTsKICBmc2FwYXJzZV9pbml0aWFsaXNlICgpOwoK
ICAvKiBDcmVhdGUgYSBuZXcgbGV4ZXIgaW5zdGFuY2UsIGFuZCBnaXZlIGl0IGVycm9yL3dh
cm5pbmcgZm5zICAqLwogIGxleGVyID0gZnNhbGV4X25ldyAoKTsKICBmc2FsZXhfZXhjZXB0
aW9uX2ZucyAobGV4ZXIsIGxleGVyX3dhcm4sIGxleGVyX2Vycm9yKTsKCiAgLyogU3RhcnQg
d2l0aCBhIHBvb2wgb2YgMTAgY2hhcmNsYXNzZXMuICAqLwogIGNoYXJjbGFzc19pbml0aWFs
aXNlICgxMCk7CgogIC8qIEluaWlhbGlzZSBtdWx0aWJ5dGUtY2hhci1zZXRzIG1vZHVsZS4g
ICovCiAgbWJjc2V0c19pbml0aWFsaXNlICgpOwoKICAvKiBDcmVhdGUgYSBuZXcgcGFyc2Vy
IGluc3RhbmNlLCBhbmQgZ2l2ZSBpdCBlcnJvci93YXJuaW5nIGZ1bmN0aW9ucy4KICAgICBE
ZWZlciBjb25uZWN0aW5nIHVwIHRoZSBsZXhlciB1bnRpbCBsZXhlciBzeW50YXggaGFzIGJl
ZW4gc2V0IHVwLiAgKi8KICBwYXJzZXIgPSBmc2FwYXJzZV9uZXcgKCk7CiAgZnNhcGFyc2Vf
ZXhjZXB0aW9uX2ZucyAocGFyc2VyLCBwYXJzZXJfd2FybiwgcGFyc2VyX2Vycm9yKTsKfQoK
LyogRW50cnkgcG9pbnQgdG8gc2V0IHN5bnRheCBvcHRpb25zLiAgKi8Kdm9pZApkZmFzeW50
YXggKHJlZ19zeW50YXhfdCBiaXRzLCBpbnQgZm9sZCwgdW5zaWduZWQgY2hhciBlb2wpCl1d
KQoKLS0gV2hlbmV2ZXIgbGV4IGlzIGNhbGxlZCB0byBnZXQgYSB0b2tlbiwgY2FsbCB0aGUg
b3JpZ2luYWwgbGV4IGFuZCBhbHNvCi0tIGZzYWxleF9sZXggaW4gcGFyYWxsZWwsIGFuZCBj
b21wYXJlIHRoZSByZXN1bHRzLiAgVHdvIGNoYW5nZXMgdG8gZG8KLS0gdGhpczogMS4gUmVu
YW1lICJsZXgiIHRvICJvcmlnaW5hbF9sZXgiLiAgMi4gQWRkIGEgbmV3ICJsZXgiIGZ1bmN0
aW9uCi0tIHRoYXQgY2FsbHMgYm90aCAib3JpZ2luYWxfbGV4IiBhbmQgdGhlbiAiZnNhbGV4
X2xleCIsIGFuZCBjb21wYXJlcyB0aGUKLS0gcmVzdWx0Lgpib2R5ID0gVGV4dFN1YnN0KGJv
ZHksIFtbCnN0YXRpYyB0b2tlbgpsZXggKHZvaWQpCnsKICBpbnQgYywgYzI7CiAgYm9vbCBi
YWNrc2xhc2ggPSBmYWxzZTsKXV0sIFtbCnN0YXRpYyB0b2tlbgpvcmlnaW5hbF9sZXggKHZv
aWQpCnsKICBpbnQgYywgYzI7CiAgYm9vbCBiYWNrc2xhc2ggPSBmYWxzZTsKXV0pCmJvZHkg
PSBUZXh0U3Vic3QoYm9keSwgW1sKLyogUmVjdXJzaXZlIGRlc2NlbnQgcGFyc2VyIGZvciBy
ZWd1bGFyIGV4cHJlc3Npb25zLiAgKi8KCnN0YXRpYyB0b2tlbiB0b2s7ICAgICAgICAgICAg
ICAgLyogTG9va2FoZWFkIHRva2VuLiAgKi8Kc3RhdGljIHNpemVfdCBkZXB0aDsgICAgICAg
ICAgICAvKiBDdXJyZW50IGRlcHRoIG9mIGEgaHlwb3RoZXRpY2FsIHN0YWNrCl1dLCBbWwpz
dGF0aWMgdG9rZW4KbGV4ICh2b2lkKQp7CiAgdG9rZW4gICAgICAgICAgICBvcmlnaW5hbF90
b2tlbjsKICBmc2F0b2tlbl90b2tlbl90IGZzYWxleF90b2tlbjsKICBjb25zdCBjaGFyICph
bGFybTsKCiAgb3JpZ2luYWxfdG9rZW4gPSBvcmlnaW5hbF9sZXggKCk7CiAgZnNhbGV4X3Rv
a2VuICAgPSBmc2FsZXhfbGV4IChsZXhlcik7CiAgYWxhcm0gPSAiIjsKICBpZiAoKG9yaWdp
bmFsX3Rva2VuICE9IGZzYWxleF90b2tlbikgJiYgKG9yaWdpbmFsX3Rva2VuIDwgQ1NFVCkp
CiAgICBhbGFybSA9ICIgKioqIEVSUk9SOiBUb2tlbiBtaXNtYXRjaCI7CiAgZnByaW50ZiAo
cGxsX2xvZywgIlRva2VuIGRlYnVnOiBPcmlnaW5hbCwgZnNhbGV4OiAlMDhseCAlMDhseCAl
c1xuIiwKICAgICAgICAgb3JpZ2luYWxfdG9rZW4sIGZzYWxleF90b2tlbiwgYWxhcm0pOwoK
ICBpZiAoZnNhbGV4X3Rva2VuID09IEZTQVRPS0VOX1RLX1JFUE1OKQogICAgewogICAgICBp
bnQgeF9taW5yZXAsIHhfbWF4cmVwOwogICAgICB4X21pbnJlcCA9IGZzYWxleF9leGNoYW5n
ZShsZXhlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVE9fTEVYUEFS
U0VfT1BfR0VUX1JFUE1OX01JTiwgTlVMTCk7CiAgICAgIHhfbWF4cmVwID0gZnNhbGV4X2V4
Y2hhbmdlKGxleGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9UT19M
RVhQQVJTRV9PUF9HRVRfUkVQTU5fTUFYLCBOVUxMKTsKICAgICAgZnByaW50ZiAocGxsX2xv
ZywgIiAgICAgICBPcmlnaW5hbCBSRVBNTnslZCwlZH07ICAiLCBtaW5yZXAsIG1heHJlcCk7
CiAgICAgIGZwcmludGYgKHBsbF9sb2csICIgIEZTQVRPS0VOX1RLX1JFUE1OeyVkLCVkfVxu
IiwgeF9taW5yZXAsIHhfbWF4cmVwKTsKICAgICAgaWYgKCh4X21pbnJlcCAhPSBtaW5yZXAp
IHx8ICh4X21heHJlcCAhPSBtYXhyZXApKQogICAgICAgIGZwcmludGYgKHBsbF9sb2csICIg
KioqIEVSUk9SOiBNaW4sIG1heCByZXAgZG9lc24ndCBtYXRjaFxuIik7CiAgICB9CgogIGVs
c2UgaWYgKGZzYWxleF90b2tlbiA+PSBGU0FUT0tFTl9US19DU0VUKQogICAgewogICAgICBz
aXplX3QgaW5kZXg7CiAgICAgIHVuc2lnbmVkIGludCAqIG9yaWdfY2NsOwogICAgICBpbnQg
aTsKICAgICAgY2hhcmNsYXNzX3QgKmNoYXJzZXQ7CiAgICAgIGNoYXIgKmRlc2NyaXB0aW9u
OwogICAgICBzdGF0aWMgY2hhciBidWZbMjU2XTsKICAgICAgY2hhciAqcF9idWY7CgovKiBO
eWJibGUgKDRiaXQpLXRvLWNoYXIgY29udmVyc2lvbiBhcnJheSBmb3IgbGl0dGxlLWJpdC1l
bmRpYW4gbnliYmxlcy4gICovCnN0YXRpYyBjb25zdCBjaGFyICpkaXNwX255YmJsZSA9ICIw
ODRjMmE2ZTE5NWQzYjdmIjsKCiAgICAgIC8qIFJlcG9ydCBkZXRhaWxzIG9mIHRoZSBvcmln
aW5hbCBjaGFyY2xhcyBwcm9kdWNlZCBieSBkZmEuYy4gICovCiAgICAgIGluZGV4ID0gb3Jp
Z2luYWxfdG9rZW4gLSBDU0VUOwogICAgICBwX2J1ZiA9IGJ1ZjsKICAgICAgb3JpZ19jY2wg
PSBkZmEtPmNoYXJjbGFzc2VzW2luZGV4XTsKICAgICAgZm9yIChpID0gMDsgaSA8IENIQVJD
TEFTU19XT1JEUzsgaSArPSAyKQogICAgICAgIHsKICAgICAgICAgIGNoYXJjbGFzc193b3Jk
IGogPSBvcmlnX2NjbFtpXTsKICAgICAgICAgICpwX2J1ZisrID0gJyAnOwogICAgICAgICAg
KnBfYnVmKysgPSBkaXNwX255YmJsZVsoaiA+PiAgMCkgJiAweDBmXTsKICAgICAgICAgICpw
X2J1ZisrID0gZGlzcF9ueWJibGVbKGogPj4gIDQpICYgMHgwZl07CiAgICAgICAgICAqcF9i
dWYrKyA9IGRpc3BfbnliYmxlWyhqID4+ICA4KSAmIDB4MGZdOwogICAgICAgICAgKnBfYnVm
KysgPSBkaXNwX255YmJsZVsoaiA+PiAxMikgJiAweDBmXTsKICAgICAgICAgICpwX2J1Zisr
ID0gZGlzcF9ueWJibGVbKGogPj4gMTYpICYgMHgwZl07CiAgICAgICAgICAqcF9idWYrKyA9
IGRpc3BfbnliYmxlWyhqID4+IDIwKSAmIDB4MGZdOwogICAgICAgICAgKnBfYnVmKysgPSBk
aXNwX255YmJsZVsoaiA+PiAyNCkgJiAweDBmXTsKICAgICAgICAgICpwX2J1ZisrID0gZGlz
cF9ueWJibGVbKGogPj4gMjgpICYgMHgwZl07CgogICAgICAgICAgaiA9IG9yaWdfY2NsW2kg
KyAxXTsKICAgICAgICAgICpwX2J1ZisrID0gZGlzcF9ueWJibGVbKGogPj4gIDApICYgMHgw
Zl07CiAgICAgICAgICAqcF9idWYrKyA9IGRpc3BfbnliYmxlWyhqID4+ICA0KSAmIDB4MGZd
OwogICAgICAgICAgKnBfYnVmKysgPSBkaXNwX255YmJsZVsoaiA+PiAgOCkgJiAweDBmXTsK
ICAgICAgICAgICpwX2J1ZisrID0gZGlzcF9ueWJibGVbKGogPj4gMTIpICYgMHgwZl07CiAg
ICAgICAgICAqcF9idWYrKyA9IGRpc3BfbnliYmxlWyhqID4+IDE2KSAmIDB4MGZdOwogICAg
ICAgICAgKnBfYnVmKysgPSBkaXNwX255YmJsZVsoaiA+PiAyMCkgJiAweDBmXTsKICAgICAg
ICAgICpwX2J1ZisrID0gZGlzcF9ueWJibGVbKGogPj4gMjQpICYgMHgwZl07CiAgICAgICAg
ICAqcF9idWYrKyA9IGRpc3BfbnliYmxlWyhqID4+IDI4KSAmIDB4MGZdOwogICAgICAgIH0K
ICAgICAgKnBfYnVmKysgPSAnXDAnOwogICAgICBmcHJpbnRmIChwbGxfbG9nLCAiICAgICAg
ICAgICAgICBvcmlnaW5hbCBbJTNsdV06JXNcbiIsIGluZGV4LCBidWYpOwoKICAgICAgLyog
QWxzbyByZXBvcnQgdGhlIGNoYXJjbGFzcyBtZW1iZXIgZGV0YWlscyBmcm9tIGZzYWxleCBl
dGMuICAqLwogICAgICBpbmRleCA9IGZzYWxleF90b2tlbiAtIEZTQVRPS0VOX1RLX0NTRVQ7
CiAgICAgIGNoYXJzZXQgPSBjaGFyY2xhc3NfZ2V0X3BvaW50ZXIgKGluZGV4KTsKICAgICAg
ZGVzY3JpcHRpb24gPSBjaGFyY2xhc3NfZGVzY3JpYmUgKGNoYXJzZXQpOwogICAgICBpbmRl
eCA9IGNoYXJjbGFzc19nZXRfaW5kZXggKGNoYXJzZXQpOwogICAgICBmcHJpbnRmIChwbGxf
bG9nLCAiICAgIGZzYWxleDogWyUzbHVdICVzXG4iLCBpbmRleCwgZGVzY3JpcHRpb24pOwog
ICAgICBpZiAoISBjaGFyY2xhc3NfZXF1YWwgKGNoYXJzZXQsIChjaGFyY2xhc3NfdCBjb25z
dCAqKSBvcmlnX2NjbCkpCiAgICAgICAgZnByaW50ZiAocGxsX2xvZywgIiAqKiogRVJST1I6
IENoYXJjbGFzcyBtaXNtYXRjaFxuIik7CiAgICB9CgogIHJldHVybiBvcmlnaW5hbF90b2tl
bjsKfQoKc3RhdGljIHZvaWQKc2hvd19tdXN0cyAoY29uc3QgY2hhciAqdGl0bGUsIGZzYW11
c3RzX2xpc3RfZWxlbWVudF90ICpsaXN0KQp7CiAgZnNhbXVzdHNfbGlzdF9lbGVtZW50X3Qg
KmVsZW07CiAgc3RhdGljIGNoYXIgYnVmWzI1Nl07CiAgY2hhciAqcF9idWY7CgogIGZwcmlu
dGYgKHBsbF9sb2csICJcbiVzOlxuIiwgdGl0bGUpOwoKICBwX2J1ZiA9IGJ1ZjsKICBmb3Ig
KGVsZW0gPSBsaXN0OyBlbGVtICE9IE5VTEw7IGVsZW0gPSBlbGVtLT5uZXh0KQogICAgewog
ICAgICBpZiAoKChwX2J1ZiAtIGJ1ZikgKyA0ICsgc3RybGVuIChlbGVtLT5tdXN0KSkgPiA3
MikKICAgICAgICB7CiAgICAgICAgICBmcHJpbnRmKHBsbF9sb2csICIgJXNcbiIsIGJ1Zik7
CiAgICAgICAgICBwX2J1ZiA9IGJ1ZjsKICAgICAgICB9CiAgICAgICAgcF9idWYgKz0gc3By
aW50ZiAocF9idWYsICIgKCVzKSA+JXM8IiwKICAgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtLT5leGFjdCA/ICJFbnRpcmUiIDogInBhcnRpYWwiLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW0tPm11c3QpOwogICAgfQogIGZwcmludGYgKHBsbF9sb2csICIlc1xuIiwg
YnVmKTsKfQoKLyogUmVjdXJzaXZlIGRlc2NlbnQgcGFyc2VyIGZvciByZWd1bGFyIGV4cHJl
c3Npb25zLiAgKi8KCnN0YXRpYyB0b2tlbiB0b2s7ICAgICAgICAgICAgICAgLyogTG9va2Fo
ZWFkIHRva2VuLiAgKi8Kc3RhdGljIHNpemVfdCBkZXB0aDsgICAgICAgICAgICAvKiBDdXJy
ZW50IGRlcHRoIG9mIGEgaHlwb3RoZXRpY2FsIHN0YWNrCl1dKQoKYm9keSA9IFRleHRTdWJz
dChib2R5LApbWwovKiBQYXJzZSBhbmQgYW5hbHl6ZSBhIHNpbmdsZSBzdHJpbmcgb2YgdGhl
IGdpdmVuIGxlbmd0aC4gICovCnZvaWQKZGZhY29tcCAoY2hhciBjb25zdCAqcywgc2l6ZV90
IGxlbiwgc3RydWN0IGRmYSAqZCwgaW50IHNlYXJjaGZsYWcpCnsKICBkZmFpbml0IChkKTsK
ICBkZmFtYmNhY2hlIChkKTsKICBkZmFwYXJzZSAocywgbGVuLCBkKTsKICBkZmFtdXN0IChk
KTsKXV0sCltbCi8qIFJ1biB0aGUgZnNhKiBldGMgbW9kdWxlcyAocGFyc2luZy9sZXhpbmcv
dG9rZW5zL2NoYXJjbGFzcykgZmlyc3QsIHRoZW4KICAgcnVuIHRoZSBvcmlnaW5hbCBkZmEg
Y29kZSwgd2l0aCBhIGhvb2sgYWRkZWQgdGhhdCB0aGUgcGFyc2VyL2xleGVyCiAgIGludGVy
ZmFjZSBpbiB0aGUgb3JpZ2luYWwgY29kZSBjYWxscyB0aGUgbmV3IGNvZGUgaW4gcGFyYWxs
ZWwsIHNvIHRoYXQKICAgdGhlIHZlcmFjaXR5IG9mIHRoZSBsZXhpY2FsIHRva2VuIHN0cmVh
bXMgY2FuIGJlIGluc3BlY3RlZCAodGhleSBzaG91bGQKICAgYmUgaWRlbnRpY2FsKS4gIEFm
dGVyIHRoZXNlIHJ1bnMsIHRoZSBwYXJzZXIgdG9rZW4gbGlzdCBmcm9tIGVhY2ggc2lkZQog
ICBpcyBleHRyYWN0ZWQgYW5kIGNvbXBhcmVkLCBhbmQgc2hvdWxkIGFsc28gYmUgaWRlbnRp
Y2FsLiAgICovCgovKiBQYXJzZSBhbmQgYW5hbHl6ZSBhIHNpbmdsZSBzdHJpbmcgb2YgdGhl
IGdpdmVuIGxlbmd0aC4gICovCnZvaWQKZGZhY29tcCAoY2hhciBjb25zdCAqcywgc2l6ZV90
IGxlbiwgc3RydWN0IGRmYSAqZCwgaW50IHNlYXJjaGZsYWcpCnsKICBzaXplX3QgaTsKCiAg
SE9PS19zZXRfdXBfZnNhX3N0dWZmX2lmX25vdF9kb25lX2FscmVhZHkgKCk7CgogIC8qIEhP
T0s6IFdyaXRlIHRoZSBzZWFyY2ggcGF0dGVybiB0byB0aGUgbG9nZmlsZS4uICAqLwogIGlm
ICghIHBsbF9sb2cpCiAgICBwbGxfbG9nID0gZm9wZW4oSE9PS19MT0dfRklMRU5BTUUsICJh
Iik7CiAgZnByaW50ZiAocGxsX2xvZywgIlBhdHRlcm46Iik7CiAgZm9yIChpID0gMDsgaSA8
IGxlbjsgaSsrKQogICAgICBmcHJpbnRmIChwbGxfbG9nLCAiICAlYyIsIGlzcHJpbnQgKHNb
aV0pID8gc1tpXSA6ICcgJyk7CiAgZnByaW50ZiAocGxsX2xvZywgIlxuICAgICAgICAiKTsK
ICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCiAgICBmcHJpbnRmIChwbGxfbG9nLCAiICUw
MngiLCAoKHVuc2lnbmVkKSBzW2ldKSAmIDB4ZmYpOwogIGZwcmludGYgKHBsbF9sb2csICJc
biIpOwoKICAvKiBIT09LOiBSdW4gdGhlIG5ldyBjb2RlIGZpcnN0IHNvIGFueSBkZXBlbmRl
bmNpZXMgb24gb2xkIGNvZGUgYXJlIG1vcmUKICAgICBsaWtlbHkgdG8gYnJpbmcgdXAgZXJy
b3JzLiAgKi8KICBmc2FsZXhfcGF0dGVybiAobGV4ZXIsIHMsIGxlbik7CiAgZnNhcGFyc2Vf
cGFyc2UgKHBhcnNlcik7CgogIC8qIFJlLXByaW1lIGZzYWxleCAoKSB0byBhbmFseXNlIHRo
ZSBwYXR0ZXJuIGEgc2Vjb25kIHRpbWUsIHNvIHRoYXQKICAgICBsZXhpY2FsIHRva2VucyBm
cm9tIGJvdGggc3lzdGVtcyBjYW4gYmUgY29tcGFyZWQgc2lkZS1ieS1zaWRlLgogICAgIFRo
aXMgbGV4aWNhbC10b2tlbi1jaGVjayB3YXRjaGVzIHRoZSBhY3Rpdml0eSBhdCB0aGUgcGFy
c2VyL2xleGVyCiAgICAgYm91bmRhcnk7IHRoZSBjb2RlIGJlbG93IGNvbXBhcmVzIHRoZSBv
dXRwdXRzIG9mIHRoZSBvcmlnaW5hbCBwYXJzZXIKICAgICBhbmQgZnNhcGFyc2UsIGFuZCB0
aGV5IHNob3VsZCBhbHNvIGJlIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgKHNvbWUKICAgICBk
aWZmZXJlbmNlcyBjYW4gb2NjdXIgaW4gdGhlIGluZGljZXMgYWRkZWQgdG8gQ1NFVCB0b2tl
bnMsIGJ1dAogICAgIHRoZSByZWZlcmVuY2VkIHNldCBzaG91bGQgYmUgaWRlbnRpY2FsKS4g
ICovCiAgZnNhbGV4X3BhdHRlcm4gKGxleGVyLCBzLCBsZW4pOwoKICBkZmFpbml0IChkKTsK
ICBkZmFtYmNhY2hlIChkKTsKICBkZmFwYXJzZSAocywgbGVuLCBkKTsKICBkZmFtdXN0IChk
KTsKCiAgLyogWUVUIEFOT1RIRVIgSEFDSywgMTYgQXByaWwgMjAxNCAod2FzIGl0IHJlbGF0
ZWQgdG8gdGhlIGx1bmFyIGVjbGlwc2UKICAgICBsYXN0IG5pZ2h0Pz8gISE/PyApCiAgICAg
Q29tcGFyZSwgc2lkZS1ieS1zaWRlLCB0aGUgbGlzdCBvZiB0b2tlbnMgZ2VuZXJhdGVkIGJ5
IGRmYS5jIGFuZCBieQogICAgIGZzYXBhcnNlLCBhbmQgd3JpdGUgdGhlc2UgdG8gdGhlIGRl
YnVnIGxvZyBmaWxlLiAgQXMgZWxzZXdoZXJlLCB0aGVzZQogICAgIHNob3VsZCBiZSBpZGVu
dGljYWwsIGFzIHRoZSBtb2R1bGFyaXNlZCBjb2RlIHN0YXJ0cyBhcyBhIGZ1bmN0aW9uYWwK
ICAgICBjbG9uZSBvZiB0aGUgb3JpZ2luYWwgY29kZS4gIChMYXRlciwgaWYvd2hlbiB0b2tl
bnMgYXJlIHJld29ya2VkIHRvCiAgICAgbWFpbnRhaW4gYWJzdHJhY3Rpb25zIGF0IGEgaGln
aGVyIGxldmVsLCB0aGUgdG9rZW4gbGlzdHMgd2lsbAogICAgIGRpZmZlci4pICAqLwogIHsK
ICAgIHNpemVfdCBucl90b2tlbnM7CiAgICBmc2F0b2tlbl90b2tlbl90ICp0b2tlbl9saXN0
OwogICAgc2l6ZV90IGo7CiAgICBzaXplX3QgbWF4X2luZGV4OwoKICAgIGZzYXBhcnNlX2dl
dF90b2tlbl9saXN0IChwYXJzZXIsICZucl90b2tlbnMsICZ0b2tlbl9saXN0KTsKICAgIGZw
cmludGYgKHBsbF9sb2csICJcbnRva2VuczogIG9yaWdpbmFsICBmc2FwYXJzZVxuIik7CiAg
ICBtYXhfaW5kZXggPSBkLT50aW5kZXggPiBucl90b2tlbnMgPyBkLT50aW5kZXggOiBucl90
b2tlbnM7CiAgICBmb3IgKGogPSAwOyBqIDwgbWF4X2luZGV4OyArK2opCiAgICAgIHsKICAg
ICAgICBzdGF0aWMgY2hhciBidWZbMjU2XTsKICAgICAgICBpZiAoaiA8IGQtPnRpbmRleCkK
ICAgICAgICAgIHsKICAgICAgICAgICAgc3ByaW50ZiAoYnVmLCAiJTAybHgiLCBkLT50b2tl
bnNbal0pOwogICAgICAgICAgICBmcHJpbnRmIChwbGxfbG9nLCAiJTE3cyAiLCBidWYpOwog
ICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBmcHJpbnRmIChwbGxfbG9n
LCAiJTE3cyIsICIiKTsKICAgICAgICBpZiAoaiA8IG5yX3Rva2VucykKICAgICAgICAgIHsK
ICAgICAgICAgICAgc3ByaW50ZiAoYnVmLCAiJTAybHgiLCB0b2tlbl9saXN0W2pdKTsKICAg
ICAgICAgICAgZnByaW50ZiAocGxsX2xvZywgIiU5cyIsIGJ1Zik7CiAgICAgICAgICB9CiAg
ICAgICAgZnByaW50ZiAocGxsX2xvZywgIlxuIik7CiAgICAgIH0KCiAgICAvKiBBbmQgZmlu
YWxseSwgc2VlIGhvdyBleHRyYWN0aW5nIG11c3RzIGZyb20gZGZhLmMgY29tcGFyZXMgdG8g
ZXh0cmFjdGluZwogICAgICAgbXVzdHMgdmlhIHRoZSBmc2EvY2hhcmNsYXNzIGZhbWlseSBv
ZiBmdW5jdGlvbnM7IGFnYWluLCB0aGVzZSBzaG91bGQKICAgICAgIGJlIGlkZW50aWNhbC4g
ICovCiAgICBtdXN0cyA9IChmc2FtdXN0c19saXN0X2VsZW1lbnRfdCAqKSBkLT5tdXN0czsK
ICAgIHNob3dfbXVzdHMgKCJvcmlnaW5hbCBkZmEuYyIsIG11c3RzKTsKCiAgICAvKiBBTk9U
SEVSIFVHTFkgSEFDSzogUmVseSBvbiBkZmEuYydzIGNhc2VfZm9sZCBhbmQgdW5pYnl0ZSBs
b2NhbGUgd2hlbgogICAgICAgaW5zdHJ1Y3RpbmcgZGZhbXVzdCBob3cgdG8gb3BlcmF0ZTsg
YW4gIkV4Y2hhbmdlIiBmdW5jdGlvbiBtaWdodCBiZQogICAgICAgbW9yZSBhcHByb3ByaWF0
ZSBpbiB0aGUgc2hvcnQtdG8tbWlkLXRlcm0sIGJ1dCBpbiB0aGUgbG9uZ2VyIHRlcm0sCiAg
ICAgICB0aGUgdG9rZW4gdm9jYWJsdWFyeSBzaG91bGQgZ2V0IG1vcmUgZXhwcmVzc2l2ZSwg
c28gdGhhdCBpbmZvcm1hdGlvbgogICAgICAgY2FuIGJlIGNvbnZleWVkIGRpcmVjdGx5LiAg
Ki8KICAgIG11c3RzID0gZnNhbXVzdHNfbXVzdCAoTlVMTCwgbnJfdG9rZW5zLCB0b2tlbl9s
aXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZmEuYyBjb3B5OiAqLyBjYXNl
X2ZvbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgKGRmYS5jKSBs
b2NhbGU6ICovIE1CX0NVUl9NQVggPT0gMSk7CiAgICBzaG93X211c3RzICgiZnNhKiBldCBh
bCBmdW5jdGlvbnMiLCBtdXN0cyk7CiAgfQoKXV0pCgotLSBOb3csIGFkZCBjYWxscyBhdCB0
aGUgZW5kIG9mIGRmYWZyZWUgKCkgdG8gZGVzdHJveSB0aGUgZW50aXJlIG1vZHVsZXMKLS0g
YW5kIGFzc29jaWF0ZWQgaW5zdGFuY2VzIHNldCB1cCBieSBlYXJsaWVyIGhvb2tzLgoKYm9k
eSA9IFRleHRTdWJzdChib2R5LCBbWwogIGZvciAoZG0gPSBkLT5tdXN0czsgZG07IGRtID0g
bmRtKQogICAgewogICAgICBuZG0gPSBkbS0+bmV4dDsKICAgICAgZnJlZSAoZG0tPm11c3Qp
OwogICAgICBmcmVlIChkbSk7CiAgICB9CgogIGlmIChkLT5zdXBlcnNldCkKICAgIGRmYWZy
ZWUgKGQtPnN1cGVyc2V0KTsKXV0sIFtbCiAgZm9yIChkbSA9IGQtPm11c3RzOyBkbTsgZG0g
PSBuZG0pCiAgICB7CiAgICAgIG5kbSA9IGRtLT5uZXh0OwogICAgICBmcmVlIChkbS0+bXVz
dCk7CiAgICAgIGZyZWUgKGRtKTsKICAgIH0KCiAgaWYgKGQtPnN1cGVyc2V0KQogICAgZGZh
ZnJlZSAoZC0+c3VwZXJzZXQpOwoKICAvKiBIT09LOiBUZWFyIGRvd24gYWxsIHRoZSBpbmZy
YXN0cnVjdHVyZSBhZGRlZCBmb3IgcGFyYWxsZWwgb3BlcmF0aW9uLiAgKi8KICBIT09LX3Rl
YXJfZG93bl9hZGRpdGlvbmFsX2luZnJhc3RydWN0dXJlICgpOwpdXSkKCi0tIEZpbmFsbHks
IHdyaXRlIHRoZSBtb2RpZmllZCBkZmEgY29kZSB0byBhIHNlcGFyYXRlIEMgZmlsZS4KbG9j
YWwgZiA9IGFzc2VydChpby5vcGVuKCJkZmEtcHJsLmMiLCAidyIpKQphc3NlcnQoZjp3cml0
ZShib2R5KSkKYXNzZXJ0KGY6Y2xvc2UoKSkKCi0tLS0tLS0tLS0tLS0tLS0qKioqKioqKiBN
YWtlZmlsZS5hbSAqKioqKioqKi0tLS0tLS0tLS0tLS0tLS0KCnByaW50KCJNb2RpZnlpbmcg
KGlmIG5lZWRlZCkgTWFrZWZpbGUuYW07IHlvdSBtYXkgbmVlZCB0byByZS1ydW4gYXV0b21h
a2UuLi4iKQpsb2NhbCBTZWcgPSBTZWdzLlNlZ0xpc3RbImdyZXBfU09VUkNFUyJdCmxvY2Fs
IHQgPSBTZWcuUmF3VGV4dAppZiBub3QgdDptYXRjaCgiIGNoYXJjbGFzcy5jIGZzYXRva2Vu
LmMgZnNhbGV4LmMgIgogICAgICAgICAgICAgICAgICAgICAuLiAiZnNhcGFyc2UuYyBmc2Ft
dXN0cy5jIG1iY3NldHMuYyBkZmEtcHJsLmMgIikgdGhlbgogICB0ID0gdDpnc3ViKCJkZmEu
YyAiLAogICAgICAiY2hhcmNsYXNzLmMgZnNhdG9rZW4uYyBmc2FsZXguYyAiCiAgICAgICAg
ICAgIC4uICJmc2FwYXJzZS5jIGZzYW11c3RzLmMgbWJjc2V0cy5jIGRmYS1wcmwuYyAiKQoK
ICAgLS0gSXQgaXMgdmVyeSBCYWQgRm9ybSB0byBtb2RpZnkgdGhlIG9yaWdpbmFsIHJhdyBz
ZWdtZW50LCBidXQgd2UncmUKICAgLS0gdGlyZWQgYXQgdGhpcyBwb2ludC4KICAgU2VnLlJh
d1RleHQgPSB0CgogICAtLSBXcml0ZSBvdXQgdGhlIG1vZGlmaWVkIGZpbGU7IGFzc3VtZSBi
YWNrdXAgbWFkZSBzZXBhcmF0ZWx5IChHaXQ/KQogICBXcml0ZUZpbGUobWFrZWZpbGVhbSkK
ZW5kCg==
--------------020206090706050709060901
Content-Type: text/x-lua;
 name="strictness.lua"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="strictness.lua"

-- ================================================================
-- "strictness" tracks declaration and assignment of globals in Lua
-- Copyright (c) 2013 Roland Y., MIT License
-- v0.1.0 - compatible Lua 5.1, 5.2
-- ================================================================

local setmetatable = setmetatable
local getmetatable = getmetatable
local type = type
local rawget = rawget
local rawset = rawset
local unpack = unpack
local error = error
local getfenv = getfenv

-- ===================
-- Private helpers
-- ===================

-- Lua reserved keywords
local luaKeyword = {
  ['and'] = true,     ['break'] = true,   ['do'] = true,
  ['else'] = true,    ['elseif'] = true,  ['end'] = true ,
  ['false'] = true,   ['for'] = true,     ['function'] = true,
  ['if'] = true,      ['in'] = true,      ['local'] = true ,
  ['nil'] = true,     ['not'] = true ,    ['or'] = true,
  ['repeat'] = true,  ['return'] = true,  ['then'] = true ,
  ['true'] = true ,   ['until'] = true ,  ['while'] = true,
}

-- Register for declared globals, defined as a table
-- with weak values.
local declared_globals = setmetatable({},{__mode = 'v'})

-- The global env _G metatable
local _G_mt

-- A custom error function
local function err(msg, level)  return error(msg, level or 3) end

-- Custom assert with error level depth
local function assert(cond, msg, level)
  if not cond then
    return err(msg, level or 4)
  end
end

-- Custom argument type assertion helper
local function assert_type(var, expected_type, argn, level)
  local var_type = type(var)
  assert(var_type == expected_type,
    ('Bad argument #%d to global (%s expected, got %s)')
      :format(argn or 1, expected_type, var_type), level)
end

-- Checks in the register if the given global was declared
local function is_declared(varname)
  return declared_globals[varname]
end

-- Checks if the passed-in string can be a valid Lua identifier
local function is_valid_identifier(iden)
  return iden:match('^[%a_]+[%w_]*$') and not luaKeyword[iden]
end

-- ==========================
-- Module functions
-- ==========================

-- Allows the declaration of passed in varnames
local function declare_global(...)
  local vars = {...}
  assert(#vars > 0,
    'bad argument #1 to global (expected strings, got nil)')
  for i,varname in ipairs({...}) do
    assert_type(varname, 'string',i, 5)
    assert(is_valid_identifier(varname),
      ('bad argument #%d to global. "%s" is not a valid Lua identifier')
        :format(i, varname))
    declared_globals[varname] = true
  end
end

-- Allows the given function to write globals
local function declare_global_func(f)
  assert_type(f, 'function', nil, 5)
  return function(...)
    local old_index, old_newindex = _G_mt.__index, _G_mt.__newindex
    _G_mt.__index, _G_mt.__newindex = nil, nil
    local results = {f(...)}
    _G_mt.__index, _G_mt.__newindex = old_index, old_newindex
    return unpack(results)
  end
end

-- ==========================
-- Locking the global env _G
-- ==========================

do

  -- Catches the current env
  local ENV = _VERSION:match('5.2') and _G or getfenv()
  
  -- Preserves a possible existing metatable for the current env
  _G_mt = getmetatable(ENV)
  if not _G_mt then
    _G_mt = {}
    setmetatable(ENV,_G_mt)
  end

  -- Locks access to undeclared globals
  _G_mt.__index = function(env, varname)
    if not is_declared(varname) then
      err(('Attempt to read undeclared global variable "%s"')
        :format(varname))
    end
    return rawget(env, varname)
  end

  -- Locks assignment of undeclared globals
  _G_mt.__newindex = function(env, varname, value)
    if not is_declared(varname) then
      err(('Attempt to assign undeclared global variable "%s"')
        :format(varname))
    end
    rawset(env, varname, value)
  end
  
  rawset(ENV, 'global', declare_global)
  rawset(ENV, 'globalize', declare_global_func)

end
--------------020206090706050709060901--




Acknowledgement sent to behoffski <behoffski@HIDDEN>:
New bug report received and forwarded. Copy sent to bug-grep@HIDDEN. Full text available.
Report forwarded to bug-grep@HIDDEN:
bug#17711; Package grep. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Mon, 25 Nov 2019 12:00:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.