GNU bug report logs - #9747
M-x untabify with "ZERO WIDTH NO-BREAK SPACE" (aka "BYTE ORDER MARK")

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: emacs; Reported by: noloader@HIDDEN; dated Thu, 13 Oct 2011 23:33:01 UTC; Maintainer for emacs is bug-gnu-emacs@HIDDEN.
Changed bug title to 'M-x untabify with "ZERO WIDTH NO-BREAK SPACE" (aka "BYTE ORDER MARK")' from 'C-x h TAB and M-x untabify' Request was from npostavs@HIDDEN to control <at> debbugs.gnu.org. Full text available.

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


Received: (at 9747) by debbugs.gnu.org; 19 Oct 2011 23:56:36 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Oct 19 19:56:36 2011
Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.69)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1RGfzw-0007yZ-L7
	for submit <at> debbugs.gnu.org; Wed, 19 Oct 2011 19:56:36 -0400
Received: from smarty.dreamhost.com ([208.113.175.8])
	by debbugs.gnu.org with esmtp (Exim 4.69)
	(envelope-from <juri@HIDDEN>) id 1RGfzt-0007yP-VR
	for 9747 <at> debbugs.gnu.org; Wed, 19 Oct 2011 19:56:35 -0400
Received: from ps18281.dreamhostps.com (ps18281.dreamhost.com [69.163.218.105])
	by smarty.dreamhost.com (Postfix) with ESMTP id A8D616E8068;
	Wed, 19 Oct 2011 16:55:27 -0700 (PDT)
Received: from localhost (ps18281.dreamhostps.com [69.163.218.105])
	by ps18281.dreamhostps.com (Postfix) with ESMTP id D1587AC9400A;
	Wed, 19 Oct 2011 16:55:26 -0700 (PDT)
From: Juri Linkov <juri@HIDDEN>
To: noloader@HIDDEN
Subject: Re: bug#9747: C-x h TAB and M-x untabify
Organization: JURTA
References: <CAH8yC8kbQo=LjRUv8RzwZnhaYz6AdoKo99+pVgGxkA1PuKwX5A@HIDDEN>
Date: Thu, 20 Oct 2011 02:32:14 +0300
In-Reply-To: <CAH8yC8kbQo=LjRUv8RzwZnhaYz6AdoKo99+pVgGxkA1PuKwX5A@HIDDEN>
	(Jeffrey Walton's message of "Thu, 13 Oct 2011 19:27:54 -0400")
Message-ID: <87zkgwsfo1.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.90 (x86_64-pc-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: -2.7 (--)
X-Debbugs-Envelope-To: 9747
Cc: 9747 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.11
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>
Sender: debbugs-submit-bounces <at> debbugs.gnu.org
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
X-Spam-Score: -2.7 (--)

> I often use C-x h TAB and M-x untabify to format C, C++, and Java code.
>
> If a document has an errant UTF-8 byte order mark (a UTF-8 BOM is EF
> BB BF), Emacs cannot always format the source file.
>
> For example, the attached Java file (JavaEncryptor.java-backup) has
> 1845 BOMs sprinkled throughout. I'm not sure what editor put them in,
> but Emacs does not properly handle some operations with them present.
> If I strip the errant BOMs with the attached program
> (efbbbf-strip.cpp), Emacs will properly format the file.

"BYTE ORDER MARK" is the old name of the U+FEFF character.
The new name is "ZERO WIDTH NO-BREAK SPACE".

You can add to your .emacs something like:

(eval-after-load "cc-mode"
  '(progn (modify-syntax-entry ?\uFEFF " " java-mode-syntax-table)))

and the most of indentation code will work correctly.

However, in some places in core packages we need to replace such code

  (skip-chars-forward " \t")

with

  (skip-chars-forward " \t\uFEFF")

to take into account other whitespace characters.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#9747; Package emacs. Full text available.

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


Received: (at submit) by debbugs.gnu.org; 13 Oct 2011 23:32:24 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Oct 13 19:32:24 2011
Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.69)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1REUlD-0005pN-Vg
	for submit <at> debbugs.gnu.org; Thu, 13 Oct 2011 19:32:24 -0400
Received: from eggs.gnu.org ([140.186.70.92])
	by debbugs.gnu.org with esmtp (Exim 4.69)
	(envelope-from <noloader@HIDDEN>) id 1REUhb-0005jM-5U
	for submit <at> debbugs.gnu.org; Thu, 13 Oct 2011 19:28:40 -0400
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
	(envelope-from <noloader@HIDDEN>) id 1REUgz-0000pI-W9
	for submit <at> debbugs.gnu.org; Thu, 13 Oct 2011 19:28:03 -0400
X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on eggs.gnu.org
X-Spam-Level: 
X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,FREEMAIL_FROM,
	RCVD_IN_DNSWL_LOW, T_DKIM_INVALID,
	T_TO_NO_BRKTS_FREEMAIL autolearn=unavailable version=3.3.1
Received: from lists.gnu.org ([140.186.70.17]:46678)
	by eggs.gnu.org with esmtp (Exim 4.71)
	(envelope-from <noloader@HIDDEN>) id 1REUgz-0000p0-NT
	for submit <at> debbugs.gnu.org; Thu, 13 Oct 2011 19:28:01 -0400
Received: from eggs.gnu.org ([140.186.70.92]:43218)
	by lists.gnu.org with esmtp (Exim 4.71)
	(envelope-from <noloader@HIDDEN>) id 1REUgy-0007Ev-FO
	for bug-gnu-emacs@HIDDEN; Thu, 13 Oct 2011 19:28:01 -0400
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
	(envelope-from <noloader@HIDDEN>) id 1REUgt-0000dg-HI
	for bug-gnu-emacs@HIDDEN; Thu, 13 Oct 2011 19:28:00 -0400
Received: from mail-vw0-f41.google.com ([209.85.212.41]:63418)
	by eggs.gnu.org with esmtp (Exim 4.71)
	(envelope-from <noloader@HIDDEN>) id 1REUgt-0000dS-3Q
	for bug-gnu-emacs@HIDDEN; Thu, 13 Oct 2011 19:27:55 -0400
Received: by vws16 with SMTP id 16so158837vws.0
	for <bug-gnu-emacs@HIDDEN>; Thu, 13 Oct 2011 16:27:54 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=mime-version:reply-to:date:message-id:subject:from:to:content-type;
	bh=3uo8xS/zUj02N9iRLf0wBiDu5Vrf3XDdT/G+ANvxqCU=;
	b=f72fJZoymiikLIBVAznAlTBbFNVCwQQOTUD7DUvskoxqiysVt5eAUQubPcwUM1VUtJ
	IGH188mV6DxVqDHDKRxKH+nYqEaVV9czu/1IcdhfxWmumkO73ucC45m/2AsCt8hVw3kE
	7ZaAvCNkl+tK+SavuyTVoPMPQt1Zfskaq+vFM=
MIME-Version: 1.0
Received: by 10.52.112.135 with SMTP id iq7mr6439259vdb.51.1318548474504; Thu,
	13 Oct 2011 16:27:54 -0700 (PDT)
Received: by 10.220.163.9 with HTTP; Thu, 13 Oct 2011 16:27:54 -0700 (PDT)
Date: Thu, 13 Oct 2011 19:27:54 -0400
Message-ID: <CAH8yC8kbQo=LjRUv8RzwZnhaYz6AdoKo99+pVgGxkA1PuKwX5A@HIDDEN>
Subject: C-x h TAB and M-x untabify
From: Jeffrey Walton <noloader@HIDDEN>
To: bug-gnu-emacs@HIDDEN
Content-Type: multipart/mixed; boundary=bcaec5485cf871279404af367d27
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2)
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3)
X-Received-From: 140.186.70.17
X-Debbugs-Envelope-To: submit
X-Mailman-Approved-At: Thu, 13 Oct 2011 19:32:23 -0400
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.11
Precedence: list
Reply-To: noloader@HIDDEN
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>
Sender: debbugs-submit-bounces <at> debbugs.gnu.org
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org

--bcaec5485cf871279404af367d27
Content-Type: text/plain; charset=ISO-8859-1

I often use C-x h TAB and M-x untabify to format C, C++, and Java code.

If a document has an errant UTF-8 byte order mark (a UTF-8 BOM is EF
BB BF), Emacs cannot always format the source file.

For example, the attached Java file (JavaEncryptor.java-backup) has
1845 BOMs sprinkled throughout. I'm not sure what editor put them in,
but Emacs does not properly handle some operations with them present.
If I strip the errant BOMs with the attached program
(efbbbf-strip.cpp), Emacs will properly format the file.

--bcaec5485cf871279404af367d27
Content-Type: application/octet-stream; name="JavaEncryptor.java-backup"
Content-Disposition: attachment; filename="JavaEncryptor.java-backup"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gtqdmsaw0

LyoqCiAqIE9XQVNQIEVudGVycHJpc2UgU2VjdXJpdHkgQVBJIChFU0FQSSkKICoKICogVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIE9wZW4gV2ViIEFwcGxpY2F0aW9uIFNlY3VyaXR5IFByb2plY3Qg
KE9XQVNQKQogKiBFbnRlcnByaXNlIFNlY3VyaXR5IEFQSSAoRVNBUEkpIHByb2plY3QuIEZvciBk
ZXRhaWxzLCBwbGVhc2Ugc2VlCiAqIDxhIGhyZWY9Imh0dHA6Ly93d3cub3dhc3Aub3JnL2luZGV4
LnBocC9FU0FQSSI+aHR0cDovL3d3dy5vd2FzcC5vcmcvaW5kZXgucGhwL0VTQVBJPC9hPi4KICoK
ICogQ29weXJpZ2h0IChjKSAyMDA3IC0gVGhlIE9XQVNQIEZvdW5kYXRpb24KICoKICogVGhlIEVT
QVBJIGlzIHB1Ymxpc2hlZCBieSBPV0FTUCB1bmRlciB0aGUgQlNEIGxpY2Vuc2UuIFlvdSBzaG91
bGQgcmVhZCBhbmQgYWNjZXB0IHRoZQogKiBMSUNFTlNFIGJlZm9yZSB5b3UgdXNlLCBtb2RpZnks
IGFuZC9vciByZWRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZS4KICoKICogQGF1dGhvciBKZWZmIFdp
bGxpYW1zIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXNwZWN0c2VjdXJpdHkuY29tIj5Bc3BlY3QgU2Vj
dXJpdHk8L2E+CiAqIEBhdXRob3Iga2V2aW4udy53YWxsQGdtYWlsLmNvbQogKiBAY3JlYXRlZCAy
MDA3CiAqLwpwYWNrYWdlIG9yZy5vd2FzcC5lc2FwaS5yZWZlcmVuY2UuY3J5cHRvOwoKaW1wb3J0
IGphdmEuaW8uSU9FeGNlcHRpb247CmltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdF
eGNlcHRpb247CmltcG9ydCBqYXZhLnNlY3VyaXR5LkludmFsaWRBbGdvcml0aG1QYXJhbWV0ZXJF
eGNlcHRpb247CmltcG9ydCBqYXZhLnNlY3VyaXR5LkludmFsaWRLZXlFeGNlcHRpb247CmltcG9y
dCBqYXZhLnNlY3VyaXR5LktleVBhaXI7CmltcG9ydCBqYXZhLnNlY3VyaXR5LktleVBhaXJHZW5l
cmF0b3I7CmltcG9ydCBqYXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3Q7CmltcG9ydCBqYXZhLnNl
Y3VyaXR5Lk5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbjsKaW1wb3J0IGphdmEuc2VjdXJpdHkuTm9T
dWNoUHJvdmlkZXJFeGNlcHRpb247CmltcG9ydCBqYXZhLnNlY3VyaXR5LlByaXZhdGVLZXk7Cmlt
cG9ydCBqYXZhLnNlY3VyaXR5LlByb3ZpZGVyOwppbXBvcnQgamF2YS5zZWN1cml0eS5QdWJsaWNL
ZXk7CmltcG9ydCBqYXZhLnNlY3VyaXR5LlNlY3VyZVJhbmRvbTsKaW1wb3J0IGphdmEuc2VjdXJp
dHkuU2VjdXJpdHk7CmltcG9ydCBqYXZhLnNlY3VyaXR5LlNpZ25hdHVyZTsKaW1wb3J0IGphdmEu
dXRpbC5EYXRlOwppbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwppbXBvcnQgamF2YS51dGlsLk1h
cDsKaW1wb3J0IGphdmEudXRpbC5TZXQ7CmltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKaW1wb3J0
IGphdmEudXRpbC5NYXAuRW50cnk7CgppbXBvcnQgamF2YXguY3J5cHRvLkJhZFBhZGRpbmdFeGNl
cHRpb247CmltcG9ydCBqYXZheC5jcnlwdG8uQ2lwaGVyOwppbXBvcnQgamF2YXguY3J5cHRvLkls
bGVnYWxCbG9ja1NpemVFeGNlcHRpb247Ci8vIGltcG9ydCBqYXZheC5jcnlwdG8uTWFjO++7vyAg
77u/ICDvu78gIC8vIFVuY29tbWVudCBpZiBjb21wdXRlSE1BQygpIGlzIGluY2x1ZGVkLgppbXBv
cnQgamF2YXguY3J5cHRvLk5vU3VjaFBhZGRpbmdFeGNlcHRpb247CmltcG9ydCBqYXZheC5jcnlw
dG8uU2VjcmV0S2V5OwppbXBvcnQgamF2YXguY3J5cHRvLnNwZWMuU2VjcmV0S2V5U3BlYzsKaW1w
b3J0IGphdmF4LmNyeXB0by5zcGVjLkl2UGFyYW1ldGVyU3BlYzsKCmltcG9ydCBvcmcub3dhc3Au
ZXNhcGkuRVNBUEk7CmltcG9ydCBvcmcub3dhc3AuZXNhcGkuRW5jb2RlckNvbnN0YW50czsKaW1w
b3J0IG9yZy5vd2FzcC5lc2FwaS5FbmNyeXB0b3I7CmltcG9ydCBvcmcub3dhc3AuZXNhcGkuTG9n
Z2VyOwppbXBvcnQgb3JnLm93YXNwLmVzYXBpLmNvZGVjcy5IZXg7CmltcG9ydCBvcmcub3dhc3Au
ZXNhcGkuY3J5cHRvLkNpcGhlclNwZWM7CmltcG9ydCBvcmcub3dhc3AuZXNhcGkuY3J5cHRvLkNp
cGhlclRleHQ7CmltcG9ydCBvcmcub3dhc3AuZXNhcGkuY3J5cHRvLkNyeXB0b0hlbHBlcjsKaW1w
b3J0IG9yZy5vd2FzcC5lc2FwaS5jcnlwdG8uS2V5RGVyaXZhdGlvbkZ1bmN0aW9uOwppbXBvcnQg
b3JnLm93YXNwLmVzYXBpLmNyeXB0by5QbGFpblRleHQ7CmltcG9ydCBvcmcub3dhc3AuZXNhcGku
Y3J5cHRvLlNlY3VyaXR5UHJvdmlkZXJMb2FkZXI7CmltcG9ydCBvcmcub3dhc3AuZXNhcGkuZXJy
b3JzLkNvbmZpZ3VyYXRpb25FeGNlcHRpb247CmltcG9ydCBvcmcub3dhc3AuZXNhcGkuZXJyb3Jz
LkVuY3J5cHRpb25FeGNlcHRpb247CmltcG9ydCBvcmcub3dhc3AuZXNhcGkuZXJyb3JzLkludGVn
cml0eUV4Y2VwdGlvbjsKaW1wb3J0IG9yZy5vd2FzcC5lc2FwaS5yZWZlcmVuY2UuRGVmYXVsdFNl
Y3VyaXR5Q29uZmlndXJhdGlvbjsKCi8qKgogKiBSZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2Yg
dGhlIHtAY29kZSBFbmNyeXB0b3J9IGludGVyZmFjZS4gVGhpcyBpbXBsZW1lbnRhdGlvbgogKiBs
YXllcnMgb24gdGhlIEpDRSBwcm92aWRlZCBjcnlwdG9ncmFwaGljIHBhY2thZ2UuIEFsZ29yaXRo
bXMgdXNlZCBhcmUKICogY29uZmlndXJhYmxlIGluIHRoZSB7QGNvZGUgRVNBUEkucHJvcGVydGll
c30gZmlsZS4gVGhlIG1haW4gcHJvcGVydHkKICogY29udHJvbGxpbmcgdGhlIHNlbGVjdGlvbiBv
ZiB0aGlzIGNsYXNzIGlzIHtAY29kZSBFU0FQSS5FbmNyeXB0b3J9LiBNb3N0IG9mCiAqIHRoZSBv
dGhlciBlbmNyeXB0aW9uIHJlbGF0ZWQgcHJvcGVydGllcyBoYXZlIHByb3BlcnR5IG5hbWVzIHRo
YXQgc3RhcnQgd2l0aAogKiB0aGUgc3RyaW5nICJFbmNyeXB0b3IuIi4KICoKICogQGF1dGhvciBK
ZWZmIFdpbGxpYW1zIChqZWZmLndpbGxpYW1zIC5hdC4gYXNwZWN0c2VjdXJpdHkuY29tKSA8YQog
KiAgICAgICAgIGhyZWY9Imh0dHA6Ly93d3cuYXNwZWN0c2VjdXJpdHkuY29tIj5Bc3BlY3QgU2Vj
dXJpdHk8L2E+CiAqIEBhdXRob3Iga2V2aW4udy53YWxsQGdtYWlsLmNvbQogKiBAYXV0aG9yIENo
cmlzIFNjaG1pZHQgKGNocmlzaXNiZWVmIC5hdC4gZ21haWwuY29tKQogKiBAc2luY2UgSnVuZSAx
LCAyMDA3OyBzb21lIG1ldGhvZHMgc2luY2UgRVNBUEkgSmF2YSAyLjAKICogQHNlZSBvcmcub3dh
c3AuZXNhcGkuRW5jcnlwdG9yCiAqLwpwdWJsaWMgZmluYWwgY2xhc3MgSmF2YUVuY3J5cHRvciBp
bXBsZW1lbnRzIEVuY3J5cHRvciB7CiAgICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBFbmNyeXB0
b3Igc2luZ2xldG9uSW5zdGFuY2U7CgogICAgLy8gTm90ZTogVGhpcyBkb3VibGUtY2hlY2sgcGF0
dGVybiBvbmx5IHdvcmtzIGJlY2F1c2Ugc2luZ2xldG9uSW5zdGFuY2UKICAgIC8vICAgICAgIGlz
IGRlY2xhcmVkIHRvIGJlIHZvbGF0aWxlLiAgVXN1YWxseSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQK
ICAgIC8vICAgICAgIHZpYSBFU0FQSS5lbmNyeXB0b3IoKSByYXRoZXIgdGhhbiBkaXJlY3RseS4K
ICAgIHB1YmxpYyBzdGF0aWMgRW5jcnlwdG9yIGdldEluc3RhbmNlKCkgdGhyb3dzIEVuY3J5cHRp
b25FeGNlcHRpb24gewoJaWYgKCBzaW5nbGV0b25JbnN0YW5jZSA9PSBudWxsICkgewoJICAgIHN5
bmNocm9uaXplZCAoIEphdmFFbmNyeXB0b3IuY2xhc3MgKSB7CgkJaWYgKCBzaW5nbGV0b25JbnN0
YW5jZSA9PSBudWxsICkgewoJCSAgICBzaW5nbGV0b25JbnN0YW5jZSA9IG5ldyBKYXZhRW5jcnlw
dG9yKCk7CgkJfQoJICAgIH0KCX0KCXJldHVybiBzaW5nbGV0b25JbnN0YW5jZTsKICAgIH0KCiAg
ICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGluaXRpYWxpemVkID0gZmFsc2U7CgogICAgLy8gZW5j
cnlwdGlvbgogICAgcHJpdmF0ZSBzdGF0aWMgU2VjcmV0S2V5U3BlYyBzZWNyZXRLZXlTcGVjID0g
bnVsbDsgLy8gRElTQ1VTUzogV2h5IHN0YXRpYz8gSW1wbGllcyBvbmUga2V5PyE/CiAgICBwcml2
YXRlIHN0YXRpYyBTdHJpbmcgZW5jcnlwdEFsZ29yaXRobSA9ICJBRVMiOwogICAgcHJpdmF0ZSBz
dGF0aWMgU3RyaW5nIGVuY29kaW5nID0gIlVURi04IjsKICAgIHByaXZhdGUgc3RhdGljIGludCBl
bmNyeXB0aW9uS2V5TGVuZ3RoID0gMTI4OwoKICAgIC8vIGRpZ2l0YWwgc2lnbmF0dXJlcwogICAg
cHJpdmF0ZSBzdGF0aWMgUHJpdmF0ZUtleSBwcml2YXRlS2V5ID0gbnVsbDsKICAgIO+7vyAgICBw
cml2YXRlIHN0YXRpYyBQdWJsaWNLZXkgcHVibGljS2V5ID0gbnVsbDsKICAgIO+7vyAgICBwcml2
YXRlIHN0YXRpYyBTdHJpbmcgc2lnbmF0dXJlQWxnb3JpdGhtID0gIlNIQTF3aXRoRFNBIjsKICAg
IHByaXZhdGUgc3RhdGljIFN0cmluZyByYW5kb21BbGdvcml0aG0gPSAiU0hBMVBSTkciOwogICAg
77u/ICAgIHByaXZhdGUgc3RhdGljIGludCBzaWduYXR1cmVLZXlMZW5ndGggPSAxMDI0OwogICAg
77u/ICAKCe+7vyAgICAvLyBoYXNoaW5nCgnvu78gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGhh
c2hBbGdvcml0aG0gPSAiU0hBLTUxMiI7CiAgICDvu78gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGhh
c2hJdGVyYXRpb25zID0gMTAyNDsKICAgIO+7vyAgCgnvu78gICAgLy8gTG9nZ2luZyAtIERJU0NV
U1M6IFRoaXMgInN0aWNrcyIgdXMgd2l0aCBhIHNwZWNpZmljIGxvZ2dlciB0byB3aGF0ZXZlciBp
dCB3YXMgd2hlbgoJ77u/ICAgIC8v77u/ICDvu78gIO+7vyAg77u/ICDvu78gICAgdGhpcyBjbGFz
cyBpcyBmaXJzdCBsb2FkZWQuIElzIHRoaXMgYSBiaWcgbGltaXRhdGlvbj8gU2luY2UgdGhlcmUK
Ce+7vyAgICAvLyAgICAgICAgICAgICAgICAgICAgaXMgbm8gbWV0aG9kIHRvIHJlc2V0IGl0LCB3
ZSBtYXkgaGFzIHdlbGwgbWFrZSBpdCAnZmluYWwnIGFsc28uCgnvu78gICAgcHJpdmF0ZSBzdGF0
aWMgTG9nZ2VyIGxvZ2dlciA9IEVTQVBJLmdldExvZ2dlcigiSmF2YUVuY3J5cHRvciIpOwogICAg
77u/ICAgIC8vIFVzZWQgdG8gcHJpbnQgb3V0IHdhcm5pbmdzIGFib3V0IGRlcHJlY2F0ZWQgbWV0
aG9kcy4KCe+7vyAgICBwcml2YXRlIHN0YXRpYyBpbnQgZW5jcnlwdENvdW50ZXIgPSAwOwogICAg
77u/77u/ICAgIHByaXZhdGUgc3RhdGljIGludCBkZWNyeXB0Q291bnRlciA9IDA7CiAgICDvu78g
ICAgLy8gRElTQ1VTUzogT0sgdG8gbm90IGhhdmUgYSBwcm9wZXJ0eSBmb3IgdGhpcyB0byBzZXQg
dGhlIGZyZXF1ZW5jeT8KCe+7vyAgICAvLyAgICAgICAgICBUaGUgZGVzaXJlIGlzIHRvIHBlcnN1
YWRlIHBlb3BsZSB0byBtb3ZlIGF3YXkgZnJvbSB0aGVzZQoJ77u/ICAgIC8vICAgICAgICAgIHR3
byBkZXByZWNhdGVkIGVuY3J5cHQoU3RyaW5nKSAvIGRlY3J5cHQoU3RyaW5nKSBtZXRob2RzLAoJ
77u/ICAgIC8vICAgICAgICAgIHNvIHBlcmhhcHMgdGhlIGFubm95YW5jZSBmYWN0b3Igb2Ygbm90
IGJlaW5nIGFibGUgdG8KCe+7vyAgICAvLyAgICAgICAgICBjaGFuZ2UgaXQgd2lsbCBoZWxwLiBG
b3Igbm93LCBpdCBpcyBqdXN0IGhhcmQtY29kZWQgaGVyZS4KCe+7vyAgICAvLyAgICAgICAgICBX
ZSBjb3VsZCBiZSBtZWFuIGFuZCBqdXN0IHByaW50IGEgd2FybmluZyAqZXZlcnkqIHRpbWUuCgnv
u78gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGxvZ0V2ZXJ5TnRoVXNlID0gMjU7CiAgICDv
u78gIAoJ77u/ICAgIC8vICpPbmx5KiB1c2UgdGhpcyBzdHJpbmcgZm9yIHVzZXIgbWVzc2FnZXMg
Zm9yIEVuY3J5cHRpb25FeGNlcHRpb24gd2hlbgogICAgLy8gZGVjcnlwdGlvbiBmYWlscy4gVGhp
cyBpcyB0byBwcmV2ZW50IGluZm9ybWF0aW9uIGxlYWthZ2UgdGhhdCBtYXkgYmUKICAgIC8vIHZh
bHVhYmxlIGluIHZhcmlvdXMgZm9ybXMgb2YgY2lwaGVydGV4dCBhdHRhY2tzLCBzdWNoIGFzIHRo
ZQoJ77u/ICAgIC8vIFBhZGRlZCBPcmFjbGUgYXR0YWNrIGRlc2NyaWJlZCBieSBSaXp6byBhbmQg
RHVvbmcuCglwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVDUllQVElPTl9GQUlMRUQgPQoJ
IkRlY3J5cHRpb24gZmFpbGVkOyBzZWUgbG9ncyBmb3IgZGV0YWlscy4iOwoKICAgIC8vICMgb2Yg
c2Vjb25kcyB0aGF0IGFsbCBmYWlsZWQgZGVjcnlwdGlvbiBhdHRlbXB0cyB3aWxsIHRha2UuIFVz
ZWQgdG8KICAgIC8vIGhlbHAgcHJldmVudCBzaWRlLWNoYW5uZWwgdGltaW5nIGF0dGFja3MuCiAg
ICBwcml2YXRlIHN0YXRpYyBpbnQgTl9TRUNTID0gMjsKCiAgICDvu78gICAgLy8gTG9hZCB0aGUg
cHJlZmVycmVkIEpDRSBwcm92aWRlciBpZiBvbmUgaGFzIGJlZW4gc3BlY2lmaWVkLgoJ77u/ICAg
IHN0YXRpYyB7Cgnvu78gICAgICB0cnkgewoJICAgIFNlY3VyaXR5UHJvdmlkZXJMb2FkZXIubG9h
ZEVTQVBJUHJlZmVycmVkSkNFUHJvdmlkZXIoKTsKCX0gY2F0Y2ggKE5vU3VjaFByb3ZpZGVyRXhj
ZXB0aW9uIGV4KSB7CgkgICAg77u/ICAvLyBOb3RlIHRoYXQgYXVkaXQgbG9nZ2luZyBpcyBkb25l
IGVsc2V3aGVyZSBpbiBjYWxsZWQgbWV0aG9kLgoJCWxvZ2dlci5mYXRhbChMb2dnZXIuU0VDVVJJ
VFlfRkFJTFVSRSwKCQkJICAgICAiSmF2YUVuY3J5cHRvciBmYWlsZWQgdG8gbG9hZCBwcmVmZXJy
ZWQgSkNFIHByb3ZpZGVyLiIsIGV4KTsKCSAgICB0aHJvdyBuZXcgRXhjZXB0aW9uSW5Jbml0aWFs
aXplckVycm9yKGV4KTsKCX0KCXNldHVwQWxnb3JpdGhtcygpOwoJ77u/ICAgIH0KICAgIO+7vyAg
CiAgICAvKioKICAgICAqIEdlbmVyYXRlcyBhIG5ldyBzdHJvbmdseSByYW5kb20gc2VjcmV0IGtl
eSBhbmQgc2FsdCB0aGF0IGNhbiBiZQogICAgICogY29weSBhbmQgcGFzdGVkIGluIHRoZSA8Yj5F
U0FQSS5wcm9wZXJ0aWVzPC9iPiBmaWxlLgogICAgICoKICAgICAqIEBwYXJhbSBhcmdzIFNldCBm
aXJzdCBhcmd1bWVudCB0byAiLXByaW50IiB0byBkaXNwbGF5IGF2YWlsYWJsZSBhbGdvcml0aG1z
IG9uIHN0YW5kYXJkIG91dHB1dC4KICAgICAqIEB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbu+7
vyAgVG8gY292ZXIgYSBtdWx0aXR1ZGUgb2Ygc2lucywgbW9zdGx5IGluIGNvbmZpZ3VyaW5nIEVT
QVBJLnByb3BlcnRpZXMuCiAgICAgKi8KCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdb
XSBhcmdzICkgdGhyb3dzIEV4Y2VwdGlvbiB7Cgnvu78gIO+7vyAgU3lzdGVtLm91dC5wcmludGxu
KCAiR2VuZXJhdGluZyBhIG5ldyBzZWNyZXQgbWFzdGVyIGtleSIgKTsKCe+7vyAg77u/ICAKCSAg
ICDvu78gIO+7vyAgLy8gcHJpbnQgb3V0IGF2YWlsYWJsZSBjaXBoZXJzCgkgICAg77u/ICDvu78g
IGlmICggYXJncy5sZW5ndGggPT0gMSAmJiBhcmdzWzBdLmVxdWFsc0lnbm9yZUNhc2UoIi1wcmlu
dCIgKSApIHsKCSAgICDvu78gIO+7vyAg77u/ICBTeXN0ZW0ub3V0LnByaW50bG4oICJBVkFJTEFC
TEUgQUxHT1JJVEhNUyIgKTsKCgkgICAg77u/ICDvu78gIO+7vyAgUHJvdmlkZXJbXSBwcm92aWRl
cnMgPSBTZWN1cml0eS5nZXRQcm92aWRlcnMoKTsKCSAgICDvu78gIO+7vyAg77u/ICBUcmVlTWFw
PFN0cmluZywgU3RyaW5nPiB0bSA9IG5ldyBUcmVlTWFwPFN0cmluZywgU3RyaW5nPigpOwoJICAg
IO+7vyAg77u/ICDvu78gIC8vIERJU0NVU1M6IE5vdGU6IFdlIGdvIHRocm91Z2ggbXVsdGlwbGUg
cHJvdmlkZXJzLCB5ZXQgbm93aGVyZSBkbyBJCgkJ77u/ICDvu78gIO+7vyAgLy/vu78gIO+7vyAg
77u/ICBzZWUgd2hlcmUgd2UgcHJpbnQgb3V0IHRoZSBQUk9WSURFUiBOQU1FLiBOb3QgYWxsIHBy
b3ZpZGVycwoJCe+7vyAg77u/ICDvu78gIC8v77u/ICDvu78gIO+7vyAgd2lsbCBpbXBsZW1lbnQg
dGhlIHNhbWUgYWxnb3JpdGhtcyBhbmQgc29tZSAicGFydG5lciIgd2l0aAoJCe+7vyAg77u/ICDv
u78gIC8v77u/ICDvu78gIO+7vyAgd2hvbSB3ZSBhcmUgZXhjaGFuZ2luZyBkaWZmZXJlbnQgY3J5
cHRvZ3JhcGhpYyBtZXNzYWdlcyBtYXkKCQnvu78gIO+7vyAg77u/ICAvL++7vyAg77u/ICDvu78g
IGhhdmUgX2RpZmZlcmVudF8gcHJvdmlkZXJzIGluIHRoZWlyIGphdmEuc2VjdXJpdHkgZmlsZS4g
U28KCQnvu78gIO+7vyAg77u/ICAvL++7vyAg77u/ICDvu78gIGl0IHdvdWxkIGJlIHVzZWZ1bCB0
byBrbm93IHRoZSBwcm92aWRlciBuYW1lIHdoZXJlIGVhY2gKCQnvu78gIO+7vyAg77u/ICAvL++7
vyAg77u/ICDvu78gIGFsZ29yaXRobSBpcyBpbXBsZW1lbnRlZC4gTWlnaHQgYmUgZ29vZCB0byBw
cmVwZW5kIHRoZSBwcm92aWRlcgoJCe+7vyAg77u/ICDvu78gIC8v77u/ICDvu78gIO+7vyAgbmFt
ZSB0byB0aGUgJ2tleScgd2l0aCBzb21ldGhpbmcgbGlrZSAicHJvdmlkZXJOYW1lOiAiLiBUaG91
Z2h0cz8KCQnvu78gIO+7vyAg77u/ICBmb3IgKGludCBpID0gMDsgaSAhPSBwcm92aWRlcnMubGVu
Z3RoOyBpKyspIHsKCQnvu78gICAgICAgIC8vIERJU0NVU1M6IFByaW50IHNlY3VyaXR5IHByb3Zp
ZGVyIG5hbWUgaGVyZT8/PwoJCSAgICDvu78gICAgICAgIC8vIE5vdGU6IEZvciBzb21lIG9kZCBy
ZWFzb24sIFByb3ZpZGVyLmtleVNldCgpIHJldHVybnMKCQkgICAg77u/ICAgICAgICAvL++7vyAg
77u/ICAgU2V0PE9iamVjdD4gb2YgdGhlIHByb3BlcnR5IGtleXMgKHdoaWNoIGFyZSBTdHJpbmdz
KQoJCSAgICDvu78gICAgICAgIC8v77u/ICDvu78gICBjb250YWluZWQgaW4gdGhpcyBwcm92aWRl
ciwgYnV0IFNldDxTdHJpbmc+IHNlZW1zCgkJICAgIO+7vyAgICAgICAgLy/vu78gIO+7vyAgIG1v
cmUgYXBwcm9wcmlhdGUuIEJ1dCB0aGF0J3Mgd2h5IHdlIG5lZWQgdGhlIGNhc3QgYmVsb3cuCgkJ
ICAgIO+7vyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PSBQcm92aWRlciAiICsgaSAr
ICI6IiArIHByb3ZpZGVyc1tpXS5nZXROYW1lKCkgKyAiID09PT09PSIpOwoJCe+7vyAgICAgICAg
SXRlcmF0b3I8T2JqZWN0PiBpdCA9IHByb3ZpZGVyc1tpXS5rZXlTZXQoKS5pdGVyYXRvcigpOwoJ
Ce+7vyAg77u/ICDvu78gIO+7vyAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewoJCSAgICDvu78gICAg
ICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpaXQubmV4dCgpOwoJCSAgICDvu78gICAgICAgICAg
U3RyaW5nIHZhbHVlID0gcHJvdmlkZXJzW2ldLmdldFByb3BlcnR5KCBrZXkgKTsKCQkgICAg77u/
ICAgICAgICAgIHRtLnB1dChrZXksIHZhbHVlKTsKCQkgICAg77u/ICAgICAgICAgIFN5c3RlbS5v
dXQucHJpbnRsbigiXHRcdCAgICIgKyBrZXkgKyAiIC0+ICIrIHZhbHVlICk7CgkJICAgIO+7vyAg
77u/ICDvu78gIO+7vyAgfQoJCe+7vyAg77u/ICDvu78gIH0KCgkgICAg77u/ICDvu78gIO+7vyAg
U2V0PCBFbnRyeTxTdHJpbmcsU3RyaW5nPiA+IGtleVZhbHVlU2V0ID0gdG0uZW50cnlTZXQoKTsK
CSAgICDvu78gIO+7vyAg77u/ICBJdGVyYXRvcjxFbnRyeTxTdHJpbmcsIFN0cmluZz4+IGl0ID0g
a2V5VmFsdWVTZXQuaXRlcmF0b3IoKTsKCSAgICDvu78gIO+7vyAg77u/ICB3aGlsZSggaXQuaGFz
TmV4dCgpICkgewoJCe+7vyAg77u/ICDvu78gIO+7vyAgTWFwLkVudHJ5PFN0cmluZyxTdHJpbmc+
IGVudHJ5ID0gaXQubmV4dCgpOwoJCe+7vyAg77u/ICDvu78gIO+7vyAgU3RyaW5nIGtleSA9IGVu
dHJ5LmdldEtleSgpOwoJCe+7vyAg77u/ICDvu78gIO+7vyAgU3RyaW5nIHZhbHVlID0gZW50cnku
Z2V0VmFsdWUoKTsKCQnvu78gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIiAgICIgKyBrZXkg
KyAiIC0+ICIrIHZhbHVlICk7CgkJ77u/ICDvu78gIO+7vyAgfQoJICAgIO+7vyAg77u/ICB9IGVs
c2UgewoJICAgIO+7vyAg77u/ICDvu78gIO+7vyAgLy8gVXNlZCB0byBwcmludCBhIHNpbWlsYXIg
bGluZSB0byB1c2UgJy1wcmludCcgZXZlbiB3aGVuIGl0IHdhcyBzcGVjaWZpZWQuCgkJ77u/ICDv
u78gIO+7vyAgU3lzdGVtLm91dC5wcmludGxuKCAiXHR1c2UgJy1wcmludCcgdG8gYWxzbyBzaG93
IGF2YWlsYWJsZSBjcnlwdG8gYWxnb3JpdGhtcyBmcm9tIGFsbCB0aGUgc2VjdXJpdHkgcHJvdmlk
ZXJzIiApOwoJICAgIO+7vyAg77u/ICB9Cgnvu78gIO+7vyAgCgkgICAg77u/ICDvu78gIC8vIHNl
dHVwIGFsZ29yaXRobXMgLS0gRWFjaCBvZiB0aGVzZSBoYXZlIGRlZmF1bHRzIGlmIG5vdCBzZXQs
IGFsdGhvdWdoCgkgICAg77u/ICDvu78gIC8v77u/ICDvu78gIO+7vyAg77u/ICDvu78gICAgIHNv
bWVvbmUgY291bGQgc2V0IHRoZW0gdG8gc29tZXRoaW5nIGludmFsaWQuIElmCgkgICAg77u/ICDv
u78gIC8v77u/ICDvu78gIO+7vyAg77u/ICDvu78gICAgIHNvIGEgc3VpdGFibGUgZXhjZXB0aW9u
IHdpbGwgYmUgdGhyb3duIGFuZCBkaXNwbGF5ZWQuCgkgICAg77u/ICDvu78gIGVuY3J5cHRBbGdv
cml0aG0gPSBFU0FQSS5zZWN1cml0eUNvbmZpZ3VyYXRpb24oKS5nZXRFbmNyeXB0aW9uQWxnb3Jp
dGhtKCk7Cgnvu78gIO+7vyAgZW5jcnlwdGlvbktleUxlbmd0aCA9IEVTQVBJLnNlY3VyaXR5Q29u
ZmlndXJhdGlvbigpLmdldEVuY3J5cHRpb25LZXlMZW5ndGgoKTsKCe+7vyAg77u/ICByYW5kb21B
bGdvcml0aG0gPSBFU0FQSS5zZWN1cml0eUNvbmZpZ3VyYXRpb24oKS5nZXRSYW5kb21BbGdvcml0
aG0oKTsKCgnvu78gIO+7vyAgU2VjdXJlUmFuZG9tIHJhbmRvbSA9IFNlY3VyZVJhbmRvbS5nZXRJ
bnN0YW5jZShyYW5kb21BbGdvcml0aG0pOwoJ77u/ICDvu78gIFNlY3JldEtleSBzZWNyZXRLZXkg
PSBDcnlwdG9IZWxwZXIuZ2VuZXJhdGVTZWNyZXRLZXkoZW5jcnlwdEFsZ29yaXRobSwgZW5jcnlw
dGlvbktleUxlbmd0aCk7Cgnvu78gIO+7vyAgYnl0ZVtdIHJhdyA9IHNlY3JldEtleS5nZXRFbmNv
ZGVkKCk7Cgnvu78gIO+7vyAgYnl0ZVtdIHNhbHQgPSBuZXcgYnl0ZVsyMF0777u/ICAvLyBPciAx
NjAtYml0czsgYmlnIGVub3VnaCBmb3IgU0hBMSwgYnV0IG5vdCBTSEEtMjU2IG9yIFNIQS01MTIu
CgkJCQkJICAg77u/ICDvu78gIHJhbmRvbS5uZXh0Qnl0ZXMoIHNhbHQgKTsKCe+7vyAg77u/ICBT
dHJpbmcgZW9sID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIsICJcbiIpOyAv
LyBTbyBpdCB3b3JrcyBvbiBXaW5kb3dzIHRvby4KCe+7vyAg77u/ICBTeXN0ZW0ub3V0LnByaW50
bG4oIGVvbCArICJDb3B5IGFuZCBwYXN0ZSB0aGVzZSBsaW5lcyBpbnRvIHlvdXIgRVNBUEkucHJv
cGVydGllcyIgKyBlb2wpOwoJ77u/ICDvu78gIFN5c3RlbS5vdXQucHJpbnRsbiggIiM9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIp
OwoJ77u/ICDvu78gIFN5c3RlbS5vdXQucHJpbnRsbiggIkVuY3J5cHRvci5NYXN0ZXJLZXk9IiAr
IEVTQVBJLmVuY29kZXIoKS5lbmNvZGVGb3JCYXNlNjQocmF3LCBmYWxzZSkgKTsKCe+7vyAg77u/
ICBTeXN0ZW0ub3V0LnByaW50bG4oICJFbmNyeXB0b3IuTWFzdGVyU2FsdD0iICsgRVNBUEkuZW5j
b2RlcigpLmVuY29kZUZvckJhc2U2NChzYWx0LCBmYWxzZSkgKTsKCe+7vyAg77u/ICBTeXN0ZW0u
b3V0LnByaW50bG4oICIjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0iICsgZW9sKTsKICAgIH0KICAgIO+7vyAgCgogICAgLyoqCiAg
ICAgKiBQcml2YXRlIENUT1IgZm9yIHtAY29kZSBKYXZhRW5jcnlwdG9yfSwgY2FsbGVkIGJ5IHtA
Y29kZSBnZXRJbnN0YW5jZSgpfS4KICAgICAqIEB0aHJvd3MgRW5jcnlwdGlvbkV4Y2VwdGlvbiBp
ZiBjYW4ndCBjb25zdHJ1Y3QgdGhpcyBvYmplY3QgZm9yIHNvbWUgcmVhc29uLgogICAgICog77u/
ICDvu78gIO+7vyAg77u/ICDvu78gIE9yaWdpbmFsIGV4Y2VwdGlvbiB3aWxsIGJlIGF0dGFjaGVk
IGFzIHRoZSAnY2F1c2UnLgogICAgICovCglwcml2YXRlIEphdmFFbmNyeXB0b3IoKSB0aHJvd3Mg
RW5jcnlwdGlvbkV4Y2VwdGlvbiB7CglieXRlW10gc2FsdCA9IEVTQVBJLnNlY3VyaXR5Q29uZmln
dXJhdGlvbigpLmdldE1hc3RlclNhbHQoKTsKCWJ5dGVbXSBza2V5ID0gRVNBUEkuc2VjdXJpdHlD
b25maWd1cmF0aW9uKCkuZ2V0TWFzdGVyS2V5KCk7CgoJYXNzZXJ0IHNhbHQgIT0gbnVsbCA6ICJD
YW4ndCBvYnRhaW4gbWFzdGVyIHNhbHQsIEVuY3J5cHRvci5NYXN0ZXJTYWx0IjsKCWFzc2VydCBz
YWx0Lmxlbmd0aCA+PSAxNiA6ICJFbmNyeXB0b3IuTWFzdGVyU2FsdCBtdXN0IGJlIGF0IGxlYXN0
IDE2IGJ5dGVzLiAiICsKCSAgICAiTGVuZ3RoIGlzOiAiICsgc2FsdC5sZW5ndGggKyAiIGJ5dGVz
LiI7Cglhc3NlcnQgc2tleSAhPSBudWxsIDogIkNhbid0IG9idGFpbiBtYXN0ZXIga2V5LCBFbmNy
eXB0b3IuTWFzdGVyS2V5IjsKCWFzc2VydCBza2V5Lmxlbmd0aCA+PSA3IDogIkVuY3J5cHRvci5N
YXN0ZXJLZXkgbXVzdCBiZSBhdCBsZWFzdCA3IGJ5dGVzLiAiICsKCSAgICAiTGVuZ3RoIGlzOiAi
ICsgc2tleS5sZW5ndGggKyAiIGJ5dGVzLiI7CgoJLy8gU2V0IHVwIHNlY3JldEtleVNwZWMgZm9y
IHVzZSBmb3Igc3ltbWV0cmljIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24sCgkvLyBhbmQgc2V0
IHVwIHRoZSBwdWJsaWMvcHJpdmF0ZSBrZXlzIGZvciBhc3ltbWV0cmljIGVuY3J5cHRpb24gLwoJ
Ly8gZGVjcnlwdGlvbi4KCS8vIFRPRE86IE5vdGU6IElmIHdlIGR1bXAgRVNBUEkgMS40IGNyeXB0
byBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LAoJLy8gICAgICAgdGhlbiB3ZSBwcm9iYWJseSB3aWxs
IGRpdGNoIHRoZSBFbmNyeXB0b3IuRW5jcnlwdGlvbkFsZ29yaXRobQoJLy8gICAgICAgcHJvcGVy
dHkuIElmIHNvLCBlbmNyeXB0QWxnb3JpdGhtIHNob3VsZCBwcm9iYWJseSB1c2UKCS8vICAgICAg
IEVuY3J5cHRvci5DaXBoZXJUcmFuc2Zvcm1hdGlvbiBhbmQganVzdCBwdWxsIG9mZiB0aGUgY2lw
aGVyCgkvLyAgICAgICBhbGdvcml0aG0gbmFtZSBzbyB3ZSBjYW4gdXNlIGl0IGhlcmUuCglzeW5j
aHJvbml6ZWQoSmF2YUVuY3J5cHRvci5jbGFzcykgewoJICAgIGlmICggISBpbml0aWFsaXplZCAp
IHsKCQkvLwoJCS8vIEZvciBzeW1tZXRyaWMgZW5jcnlwdGlvbgoJCS8vCgkJLy8gICAgICBOT1RF
OiBGaW5kQnVncyBjb21wbGFpbnMgYWJvdXQgdGhpcwoJCS8vICAgICAgICAgICAgKFNUX1dSSVRF
X1RPX1NUQVRJQ19GUk9NX0lOU1RBTkNFX01FVEhPRCkgYnV0CgkJLy8gICAgICAgICAgICBpdCBz
aG91bGQgYmUgT0sgc2luY2UgaXQgaXMgc3luY2hyb25pemVkIGFuZCBvbmx5CgkJLy8gICAgICAg
ICAgICBkb25lIG9uY2UuIFdoaWxlIHdlIGNvdWxkIHNlcGFyYXRlIHRoaXMgb3V0IGFuZAoJCS8v
ICAgICAgICAgICAgaGFuZGxlIGluIGEgc3RhdGljIGluaXRpYWxpemVyLCBpdCBqdXN0IHNlZW1z
IHRvCgkJLy8gICAgICAgICAgICBmaXQgYmV0dGVyIGhlcmUuCgkJc2VjcmV0S2V5U3BlYyA9IG5l
dyBTZWNyZXRLZXlTcGVjKHNrZXksIGVuY3J5cHRBbGdvcml0aG0gKTsKCgkJLy8KCQkvLyBGb3Ig
YXN5bW1ldHJpYyBlbmNyeXB0aW9uIChpLmUuLCBwdWJsaWMvcHJpdmF0ZSBrZXkpCgkJLy8KCQl0
cnkgewoJCSAgICBTZWN1cmVSYW5kb20gcHJuZyA9IFNlY3VyZVJhbmRvbS5nZXRJbnN0YW5jZShy
YW5kb21BbGdvcml0aG0pOwoKCQkgICAgLy8gQmVjYXVzZSBoYXNoKCkgaXMgbm90IHN0YXRpYyAo
YnV0IGl0IGNvdWxkIGJlIHdlcmUgaW4gbm90CgkJICAgIC8vIGZvciB0aGUgaW50ZXJmYWNlIG1l
dGhvZCBzcGVjaWZpY2F0aW9uIGluIEVuY3J5cHRvciksIHdlCgkJICAgIC8vIGNhbm5vdCBkbyB0
aGlzIGluaXRpYWxpemF0aW9uIGluIGEgc3RhdGljIG1ldGhvZCBvciBzdGF0aWMKCQkgICAgLy8g
aW5pdGlhbGl6ZXIuCgkJICAgIGJ5dGVbXSBzZWVkID0gaGFzaChuZXcgU3RyaW5nKHNrZXksIGVu
Y29kaW5nKSxuZXcgU3RyaW5nKHNhbHQsIGVuY29kaW5nKSkuZ2V0Qnl0ZXMoZW5jb2RpbmcpOwoJ
CSAgICBwcm5nLnNldFNlZWQoc2VlZCk7CgkJICAgIGluaXRLZXlQYWlyKHBybmcpOwoJCX0gY2F0
Y2ggKEV4Y2VwdGlvbiBlKSB7CgkJICAgIHRocm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0aW9uKCJF
bmNyeXB0aW9uIGZhaWx1cmUiLCAiRXJyb3IgY3JlYXRpbmcgRW5jcnlwdG9yIiwgZSk7CgkJfSAg
ICAgICAgICAgICAKCgkJLy8gTWFyayBldmVyeXRoaW5nIGFzIGluaXRpYWxpemVkLgoJCWluaXRp
YWxpemVkID0gdHJ1ZTsKCSAgICB9Cgl9CiAgICB9CgoKCiAgICDvu78gIC8qKgogICAgICAgKiB7
QGluaGVyaXREb2N9CiAgICAgICAqCiAgICAgICDvu78gICAqIEhhc2hlcyB0aGUgZGF0YSB3aXRo
IHRoZSBzdXBwbGllZCBzYWx0IGFuZCB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgc3BlY2lmaWVk
IGluCiAgICAgICDvu78gICAqIHRoZSBFU0FQSSBTZWN1cml0eUNvbmZpZ3VyYXRpb24uCiAgICAg
ICDvu78gICAqLwoJ77u/ICBwdWJsaWMgU3RyaW5nIGhhc2goU3RyaW5nIHBsYWludGV4dCwgU3Ry
aW5nIHNhbHQpIHRocm93cyBFbmNyeXB0aW9uRXhjZXB0aW9uIHsKCe+7vyAg77u/ICByZXR1cm4g
aGFzaCggcGxhaW50ZXh0LCBzYWx0LCBoYXNoSXRlcmF0aW9ucyApOwoJ77u/ICB9CiAgICDvu78g
IAoJ77u/ICAvKioKCSAgICoge0Bpbmhlcml0RG9jfQoJICAgKgoJICAg77u/ICAgKiBIYXNoZXMg
dGhlIGRhdGEgdXNpbmcgdGhlIHNwZWNpZmllZCBhbGdvcml0aG0gYW5kIHRoZSBKYXZhIE1lc3Nh
Z2VEaWdlc3QgY2xhc3MuIFRoaXMgbWV0aG9kCgkgICDvu78gICAqIGZpcnN0IGFkZHMgdGhlIHNh
bHQsIGEgc2VwYXJhdG9yICgiOiIpLCBhbmQgdGhlIGRhdGEsIGFuZCB0aGVuIHJlaGFzaGVzIHRo
ZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMKCSAgIO+7vyAgICogaW4gb3JkZXIgdG8g
aGVscCBzdHJlbmd0aGVuIHdlYWsgcGFzc3dvcmRzLgoJICAg77u/ICAgKi8KCe+7vyAgcHVibGlj
IFN0cmluZyBoYXNoKFN0cmluZyBwbGFpbnRleHQsIFN0cmluZyBzYWx0LCBpbnQgaXRlcmF0aW9u
cykgdGhyb3dzIEVuY3J5cHRpb25FeGNlcHRpb24gewoJ77u/ICDvu78gIGJ5dGVbXSBieXRlcyA9
IG51bGw7Cgnvu78gIO+7vyAgdHJ5IHsKCSAgICDvu78gIO+7vyAg77u/ICBNZXNzYWdlRGlnZXN0
IGRpZ2VzdCA9IE1lc3NhZ2VEaWdlc3QuZ2V0SW5zdGFuY2UoaGFzaEFsZ29yaXRobSk7CgkgICAg
77u/ICDvu78gIO+7vyAgZGlnZXN0LnJlc2V0KCk7CgkgICAg77u/ICDvu78gIO+7vyAgZGlnZXN0
LnVwZGF0ZShFU0FQSS5zZWN1cml0eUNvbmZpZ3VyYXRpb24oKS5nZXRNYXN0ZXJTYWx0KCkpOwoJ
ICAgIO+7vyAg77u/ICDvu78gIGRpZ2VzdC51cGRhdGUoc2FsdC5nZXRCeXRlcyhlbmNvZGluZykp
OwoJICAgIO+7vyAg77u/ICDvu78gIGRpZ2VzdC51cGRhdGUocGxhaW50ZXh0LmdldEJ5dGVzKGVu
Y29kaW5nKSk7CgoJICAgIO+7vyAg77u/ICDvu78gIC8vIHJlaGFzaCBhIG51bWJlciBvZiB0aW1l
cyB0byBoZWxwIHN0cmVuZ3RoZW4gd2VhayBwYXNzd29yZHMKCQnvu78gIO+7vyAg77u/ICBieXRl
cyA9IGRpZ2VzdC5kaWdlc3QoKTsKCSAgICDvu78gIO+7vyAg77u/ICBmb3IgKGludCBpID0gMDsg
aSA8IGl0ZXJhdGlvbnM7IGkrKykgewoJCe+7vyAg77u/ICDvu78gIO+7vyAgZGlnZXN0LnJlc2V0
KCk7CgkJ77u/ICDvu78gIO+7vyAg77u/ICBieXRlcyA9IGRpZ2VzdC5kaWdlc3QoYnl0ZXMpOwoJ
Ce+7vyAg77u/ICDvu78gIH0KCSAgICDvu78gIO+7vyAg77u/ICBTdHJpbmcgZW5jb2RlZCA9IEVT
QVBJLmVuY29kZXIoKS5lbmNvZGVGb3JCYXNlNjQoYnl0ZXMsZmFsc2UpOwoJICAgIO+7vyAg77u/
ICDvu78gIHJldHVybiBlbmNvZGVkOwoJICAgIO+7vyAg77u/ICB9IGNhdGNoIChOb1N1Y2hBbGdv
cml0aG1FeGNlcHRpb24gZSkgewoJICAgIO+7vyAg77u/ICDvu78gIHRocm93IG5ldyBFbmNyeXB0
aW9uRXhjZXB0aW9uKCJJbnRlcm5hbCBlcnJvciIsICJDYW4ndCBmaW5kIGhhc2ggYWxnb3JpdGht
ICIgKyBoYXNoQWxnb3JpdGhtLCBlKTsKCSAgICDvu78gIO+7vyAgfSBjYXRjaCAoVW5zdXBwb3J0
ZWRFbmNvZGluZ0V4Y2VwdGlvbiBleCkgewoJICAgIO+7vyAg77u/ICDvu78gIHRocm93IG5ldyBF
bmNyeXB0aW9uRXhjZXB0aW9uKCJJbnRlcm5hbCBlcnJvciIsICJDYW4ndCBmaW5kIGVuY29kaW5n
IGZvciAiICsgZW5jb2RpbmcsIGV4KTsKCSAgICDvu78gIO+7vyAgfQoJ77u/ICB9CiAgICDvu78g
IAoJ77u/ICAvKioKCSAgICAg77u/ICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdGhhdCBlbmNyeXB0
cyBwbGFpbnRleHQgc3RyaW5ncyB0aGUgbmV3IHdheSAoZGVmYXVsdAoJICAgICDvu78gICAqIGlz
IENCQyBtb2RlIGFuZCBQS0NTNSBwYWRkaW5nKS4gVGhpcyBlbmNyeXB0aW9uIG1ldGhvZCB1c2Vz
IHRoZSBtYXN0ZXIKCSAgICAg77u/ICAgKiBlbmNyeXB0aW9uIGtleSBzcGVjaWZpZWQgYnkgdGhl
IHtAY29kZSBFbmNyeXB0b3IuTWFzdGVyS2V5fSBwcm9wZXJ0eQoJICAgICDvu78gICAqIGluIHtA
Y29kZSBFU0FQSS5wcm9wZXJ0aWVzfS4KCSAgICAg77u/ICAgKgoJICAgICDvu78gICAqIEBwYXJh
bSBwbGFpbnRleHTvu78gIEEgU3RyaW5nIHRvIGJlIGVuY3J5cHRlZAoJICAgICDvu78gICAqIEBy
ZXR1cm7vu78gIEEgYmFzZTY0LWVuY29kZWQgY29tYmluYXRpb24gb2YgSVYgKyByYXcgY2lwaGVy
dGV4dAoJICAgICDvu78gICAqIEB0aHJvd3MgRW5jcnlwdGlvbkV4Y2VwdGlvbu+7vyAgVGhyb3du
IHdoZW4gc29tZXRoaW5nIGdvZXMgd3Jvbmcgd2l0aCB0aGUKCSAgICAg77u/ICAgKiDvu78gIO+7
vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAgZW5jcnlwdGlvbi4KCSAgICAg77u/ICAg
KgoJICAgICDvu78gICAqIEBzZWUgb3JnLm93YXNwLmVzYXBpLkVuY3J5cHRvciNlbmNyeXB0KFBs
YWluVGV4dCkKCSAgICAg77u/ICAgKi8KCe+7vyAgQERlcHJlY2F0ZWQgcHVibGljIFN0cmluZyBl
bmNyeXB0KFN0cmluZyBwbGFpbnRleHQpIHRocm93cyBFbmNyeXB0aW9uRXhjZXB0aW9uCgkJCQkJ
CQkJICAgICDvu78gIHsKCWxvZ1dhcm5pbmcoImVuY3J5cHQiLCAiQ2FsbGluZyBkZXByZWNhdGVk
IGVuY3J5cHQoKSBtZXRob2QuIik7Cgnvu78gIO+7vyAgQ2lwaGVyVGV4dCBjdCA9IG51bGw7Cgnv
u78gIO+7vyAgY3QgPSBlbmNyeXB0KG5ldyBQbGFpblRleHQocGxhaW50ZXh0KSApOwoJ77u/ICDv
u78gIHJldHVybiBjdC5nZXRFbmNvZGVkSVZDaXBoZXJUZXh0KCk7Cgnvu78gIH0KCgogICAg77u/
ICAvKioKCSDvu78gICoge0Bpbmhlcml0RG9jfQoJIO+7vyAgKi8KCe+7vyAgIHB1YmxpYyBDaXBo
ZXJUZXh0IGVuY3J5cHQoUGxhaW5UZXh0IHBsYWludGV4dCkgdGhyb3dzIEVuY3J5cHRpb25FeGNl
cHRpb24gewoJ77u/ICDvu78gICAvLyBOb3cgbW9yZSBvZiBhIGNvbnZlbmllbmNlIGZ1bmN0aW9u
IGZvciB1c2luZyB0aGUgbWFzdGVyIGtleS4KCSAgICDvu78gIO+7vyAgIHJldHVybiBlbmNyeXB0
KHNlY3JldEtleVNwZWMsIHBsYWludGV4dCk7Cgnvu78gICB9CiAgICDvu78gICAKCe+7vyAgIC8q
KgoJICAgICAg77u/ICAgICoge0Bpbmhlcml0RG9jfQoJICAgICAg77u/ICAgICovCgnvu78gICBw
dWJsaWMgQ2lwaGVyVGV4dCBlbmNyeXB0KFNlY3JldEtleSBrZXksIFBsYWluVGV4dCBwbGFpbikK
Ce+7vyAgIO+7vyAg77u/ICDvu78gIHRocm93cyBFbmNyeXB0aW9uRXhjZXB0aW9uCgkJCe+7vyAg
IHsKCe+7vyAg77u/ICAgYnl0ZVtdIHBsYWludGV4dCA9IHBsYWluLmFzQnl0ZXMoKTsKCe+7vyAg
77u/ICAgYm9vbGVhbiBvdmVyd3JpdGVQbGFpbnRleHQgPSBFU0FQSS5zZWN1cml0eUNvbmZpZ3Vy
YXRpb24oKS5vdmVyd3JpdGVQbGFpblRleHQoKTsKCe+7vyAg77u/ICAgYXNzZXJ0IGtleSAhPSBu
dWxsIDogIihNYXN0ZXIpIGVuY3J5cHRpb24ga2V5IG1heSBub3QgYmUgbnVsbCI7Cgnvu78gIO+7
vyAgIAoJICAgIO+7vyAg77u/ICAgYm9vbGVhbiBzdWNjZXNzID0gZmFsc2U777u/ICAvLyBVc2Vk
IGluICdmaW5hbGx5JyBjbGF1c2UuCgkJCQkJICAgICDvu78gIO+7vyAgIFN0cmluZyB4Zm9ybSA9
IG51bGw7Cgnvu78gIO+7vyAgIGludCBrZXlTaXplID0ga2V5LmdldEVuY29kZWQoKS5sZW5ndGgg
KiA4O++7vyAgLy8gQ29udmVydCB0byAjIGJpdHMKCgkJCQkJCQkgICB0cnkgewoJCQkJCQkJICAg
ICAgIHhmb3JtID0gRVNBUEkuc2VjdXJpdHlDb25maWd1cmF0aW9uKCkuZ2V0Q2lwaGVyVHJhbnNm
b3JtYXRpb24oKTsKCQkJCQkJCSAgICAgICBTdHJpbmdbXSBwYXJ0cyA9IHhmb3JtLnNwbGl0KCIv
Iik7CgkJCQkJCQkgICAgICAgYXNzZXJ0IHBhcnRzLmxlbmd0aCA9PSAzIDogIk1hbGZvcm1lZCBj
aXBoZXIgdHJhbnNmb3JtYXRpb246ICIgKyB4Zm9ybTsKCQkJCQkJCSAgICAgICBTdHJpbmcgY2lw
aGVyTW9kZSA9IHBhcnRzWzFdOwoKCQkJCQkJCSAgICAgICAvLyBUaGlzIHdheSB3ZSBjYW4gcHJl
dmVudCBtb2RlcyBsaWtlIE9GQiBhbmQgQ0ZCIHdoZXJlIHRoZSBJViBzaG91bGQgbmV2ZXIKCQkJ
CQkJCSAgICAgICAvLyBiZSByZXBlYXRlZCB3aXRoIHRoZSBzYW1lIGVuY3J5cHRpb24ga2V5IChh
dCBsZWFzdCB1bnRpbCB3ZSBzdXBwb3J0CgkJCQkJCQkgICAgICAgLy8gRW5jcnlwdG9yLkNob29z
ZUlWTWV0aG9kPXNwZWNpZmllZCBhbmQgYWxsb3cgdXMgdG8gc3BlY2lmeSBzb21lIG1lY2hhbmlz
bQoJCQkJCQkJICAgICAgIC8vIHRvIGVuc3VyZSB0aGUgSVYgd2lsbCBuZXZlciBiZSByZXBlYXRl
ZCAoc3VjaCBhcyBhIHRpbWUgc3RhbXAgb3Igb3RoZXIKCQkJCQkJCSAgICAgICAvLyBtb25vdG9u
aWNhbGx5IGluY3JlYXNpbmcgZnVuY3Rpb24pLgoJCQkJCQkJICAgICAgIC8vIERJU0NVU1M6IFNo
b3VsZCB3ZSBpbmNsdWRlIHRoZSBwZXJtaXR0ZWQgY2lwaGVyIG1vZGVzIGluIHRoZSBleGNlcHRp
b24gbXNnPwoJCQkJCQkJICAgICAgIGlmICggISBDcnlwdG9IZWxwZXIuaXNBbGxvd2VkQ2lwaGVy
TW9kZShjaXBoZXJNb2RlKSApIHsKCQkJCQkJCQkgICB0aHJvdyBuZXcgRW5jcnlwdGlvbkV4Y2Vw
dGlvbigiRW5jcnlwdGlvbiBmYWlsdXJlOiBpbnZhbGlkIGNpcGhlciBtb2RlICggIiArIGNpcGhl
ck1vZGUgKyAiKSBmb3IgZW5jcnlwdGlvbiIsCgkJCQkJCQkJCQkJCSAiRW5jcnlwdGlvbiBmYWls
dXJlOiBDaXBoZXIgdHJhbnNmb3JtYXRpb24gIiArIHhmb3JtICsgIiBzcGVjaWZpZXMgaW52YWxp
ZCAiICsKCQkJCQkJCQkJCQkJICJjaXBoZXIgbW9kZSAiICsgY2lwaGVyTW9kZSk7CgkJCQkJCQkg
ICAgICAgfQoKCQkJCQkJCSAgICAgICDvu78gIO+7vyAg77u/ICAgLy8gTm90ZSAtIENpcGhlciBp
cyBub3QgdGhyZWFkLXNhZmUgc28gd2UgY3JlYXRlIG9uZSBsb2NhbGx5CgkJCQkJCQkJICAg77u/
ICDvu78gIO+7vyAgIC8vICAgICAgICBBbHNvLCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGlzIGV2ZW50
dWFsbHkgc28gb3RoZXIgYWxnb3JpdGhtcyBjYW4KCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAg
Ly8gICAgICAgIGJlIHN1cHBvcnRlZC4gRXZlbnR1YWxseSwgdGhlcmUgd2lsbCBiZSBhbiBlbmNy
eXB0KCkgbWV0aG9kIHRoYXQKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgLy8gICAgICAgIHRh
a2VzIGEgKG5ldyBjbGFzcykgQ3J5cHRvQ29udHJvbHMsIGFzIHNvbWV0aGluZyBsaWtlIHRoaXM6
CgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8vICAgICAgICAgIHB1YmxpYyBDaXBoZXJUZXh0
IGVuY3J5cHQoQ3J5cHRvQ29udHJvbHMgY3RybCwgU2VjcmV0S2V5IHNrZXksIFBsYWluVGV4dCBw
bGFpbnRleHQpCgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8vICAgICAgICBhbmQgdGhpcyBt
ZXRob2Qgd2lsbCBqdXN0IGNhbGwgdGhhdCBvbmUuCgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAg
IENpcGhlciBlbmNyeXB0ZXIgPSBDaXBoZXIuZ2V0SW5zdGFuY2UoeGZvcm0pOwoJCQkJCQkJICAg
ICAgIO+7vyAg77u/ICDvu78gICBTdHJpbmcgY2lwaGVyQWxnID0gZW5jcnlwdGVyLmdldEFsZ29y
aXRobSgpOwoJCQkJCQkJICAgICAgIO+7vyAg77u/ICDvu78gICBpbnQga2V5TGVuID0gRVNBUEku
c2VjdXJpdHlDb25maWd1cmF0aW9uKCkuZ2V0RW5jcnlwdGlvbktleUxlbmd0aCgpOwoKCQkJCQkJ
CSAgICAgICDvu78gIO+7vyAg77u/ICAgLy8gRElTQ1VTUzogT0ssIHdoYXQgZG8gd2Ugd2FudCB0
byBkbyBoZXJlIGlmIGtleUxlbiAhPSBrZXlTaXplPyBJZiB1c2Uga2V5TGVuLCBlbmNyeXB0aW9u
CgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8v77u/ICDvu78gICAgICAgY291bGQgZmFpbCB3
aXRoIGFuIGV4Y2VwdGlvbiwgYnV0IHBlcmhhcHMgdGhhdCdzIHdoYXQgd2Ugd2FudC4gT3Igd2Ug
bWF5IGp1c3QgYmUKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgLy/vu78gIO+7vyAg77u/ICAg
T0sgd2l0aCBzaWxlbnRseSB1c2luZyBrZXlTaXplIGFzIGxvbmcgYXMga2V5U2l6ZSA+PSBrZXlM
ZW4sIHdoaWNoIHRoZW4gaW50ZXJwcmV0cwoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICAvL++7
vyAg77u/ICDvu78gICBFU0FQSS5FbmNyeXB0aW9uS2V5TGVuZ3RoIGFzIHRoZSAqbWluaW11bSog
a2V5IHNpemUsIGJ1dCBhcyBsb25nIGFzIHdlIGhhdmUgc29tZXRoaW5nCgkJCQkJCQkJICAg77u/
ICDvu78gIO+7vyAgIC8v77u/ICDvu78gIO+7vyAgIHN0cm9uZ2VyIGl0J3MgT0sgdG8gdXNlIGl0
LiBGb3Igbm93LCBJIGFtIGp1c3QgZ29pbmcgdG8gbG9nIHdhcm5pbmcgaWYgZGlmZmVyZW50LCBi
dXQgdXNlCgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8v77u/ICDvu78gIO+7vyAgIGtleVNp
emUgdW5sZXNzIGtleVNpemUgaXMgU01BTExFUiB0aGFuIEVTQVBJLkVuY3J5cHRpb25LZXlMZW5n
dGgsIGluIHdoaWNoIGNhc2UgSSdtIGdvaW5nCgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8v
77u/ICDvu78gIO+7vyAgIHRvIGxvZyBhbiBlcnJvci4KCQkJCQkJCQkgICDvu78gIO+7vyAg77u/
ICAgLy8KCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgLy/vu78gIO+7vyAg77u/ICAgSU1QT1JU
QU5UIE5PVEU677u/ICBXaGVuIHdlIGdlbmVyYXRlIGtleSBzaXplcyBmb3IgYm90aCBERVMgYW5k
IERFU2VkZSB0aGUgcmVzdWx0IG9mCgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8v77u/ICDv
u78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIFNlY3JldEtleS5nZXRFbmNvZGluZygp
Lmxlbmd0aCBpbmNsdWRlcyB0aGUgVFJVRSBrZXkgc2l6ZSAoaS5lLiwKCQkJCQkJCQkgICDvu78g
IO+7vyAg77u/ICAgLy/vu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAgKndp
dGgqIHRoZSBldmVuIHBhcml0eSBiaXRzKSByYXRoZXIgdGhhbiB0aGUgRUZGRUNUSVZFIGtleSBz
aXplCgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8v77u/ICDvu78gIO+7vyAg77u/ICDvu78g
IO+7vyAg77u/ICDvu78gICh3aGljaCBpbmNpZGVudGFsbHkgaXMgd2hhdCBLZXlHZW5lcmF0b3Iu
aW5pdCgpIGV4cGVjdHMgZm9yIERFUwoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICAvL++7vyAg
77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICBhbmQgREVTZWRlOyBkdWghIE5vdGhp
bmcgbGlrZSBiZWluZyBjb25zaXN0ZW50KS4gVGhpcyBsZWFkcyB0bwoJCQkJCQkJCSAgIO+7vyAg
77u/ICDvu78gICAvL++7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICB0aGUg
Zm9sbG93aW5nIGRpbGVtbWE6CgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8vCgkJCQkJCQkJ
ICAg77u/ICDvu78gIO+7vyAgIC8v77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDv
u78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICBFRkZFQ1RJVkUgS2V5IFNpemXvu78gIO+7vyAg
VFJVRSBLZXkgU2l6ZQoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICAvL++7vyAg77u/ICDvu78g
IO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAgKEtleUdl
bmVyYXRvci5pbml0KCkp77u/ICAoU2VjcmV0S2V5LmdldEVuY29kaW5nKCkubGVuZ3RoKQoJCQkJ
CQkJCSAgIO+7vyAg77u/ICDvu78gICAvL++7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7
vyAg77u/ICDvu78gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8v77u/
ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAgRm9yIERFUzrvu78gICAg
IDU2IGJpdHPvu78gIO+7vyAg77u/ICDvu78gIO+7vyAgICAgICAgICAgIDY0IGJpdHMKCQkJCQkJ
CQkgICDvu78gIO+7vyAg77u/ICAgLy/vu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78g
IO+7vyAg77u/ICBGb3IgREVTZWRlOu+7vyAxMTIgYml0cyAvIDE2OCBiaXRz77u/ICDvu78gIDE5
MiBiaXRzIChhbHdheXMpCgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8vCgkJCQkJCQkJICAg
77u/ICDvu78gIO+7vyAgIC8v77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78g
IFdlIGFyZSB0cnlpbmcgdG8gYXV0b21hdGljYWxseSBkZXRlcm1pbmUgdGhlIGtleSBzaXplIGZy
b20gU2VjcmV0S2V5CgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8v77u/ICDvu78gIO+7vyAg
77u/ICDvu78gIO+7vyAg77u/ICDvu78gIGJhc2VkIG9uIDggKiBTZWNyZXRLZXkuZ2V0RW5jb2Rp
bmcoKS5sZW5ndGgsIGJ1dCBhcyB5b3UgY2FuIHNlZSwgdGhlCgkJCQkJCQkJICAg77u/ICDvu78g
IO+7vyAgIC8v77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIDIga2V5IDNE
RVMgYW5kIHRoZSAzIGtleSAzREVTIGJvdGggdXNlIHRoZSBzYW1lIGtleSBzaXplICgxOTIgYml0
cykKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgLy/vu78gIO+7vyAg77u/ICDvu78gIO+7vyAg
77u/ICDvu78gIO+7vyAgcmVnYXJkbGVzcyBvZiB3aGF0IGlzIHBhc3NlZCB0byBLZXlHZW5lcmF0
b3IuaW5pdCgpLiBUaGVyZSBhcmUgbm8gYWR2ZXJ0aXNlZAoJCQkJCQkJCSAgIO+7vyAg77u/ICDv
u78gICAvL++7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICBtZXRob2RzIHRv
IGdldCB0aGUga2V5IHNpemUgc3BlY2lmaWVkIGJ5IHRoZSBpbml0KCkgbWV0aG9kIHNvIEknbSBu
b3Qgc3VyZSBob3cKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgLy/vu78gIO+7vyAg77u/ICDv
u78gIO+7vyAg77u/ICDvu78gIO+7vyAgdGhpcyBpcyBhY3R1YWxseSB3b3JraW5nIGludGVybmFs
bHkuIEhvd2V2ZXIsIGl0IGRvZXMgcHJlc2VudCBhIHByb2JsZW0gaWYgd2UKCQkJCQkJCQkgICDv
u78gIO+7vyAg77u/ICAgLy/vu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg
d2lzaCB0byBjb21tdW5pY2F0ZSB0aGUgM0RFUyBrZXkgc2l6ZSB0byBhIHJlY2lwaWVudCBmb3Ig
bGF0ZXIgZGVjcnlwdGlvbiBhcwoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICAvL++7vyAg77u/
ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICB0aGV5IHdvdWxkIG5vdCBiZSBhYmxlIHRv
IGRpc3Rpbmd1aXNoIDIga2V5IDNERVMgZnJvbSAzIGtleSAzREVTLgoJCQkJCQkJCSAgIO+7vyAg
77u/ICDvu78gICAvLwoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICAvL++7vyAg77u/ICDvu78g
IO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICBUaGUgb25seSB3b3JrYXJvdW5kIEkga25vdyBpcyB0
byBwYXNzIHRoZSBleHBsaWNpdCBrZXkgc2l6ZSBkb3duLiBIb3dldmVyLCBpZgoJCQkJCQkJCSAg
IO+7vyAg77u/ICDvu78gICAvL++7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/
ICB3ZSBhcmUgZ29pbmcgdG8gZG8gdGhhdCwgSSdkIHByb3Bvc2UgcGFzc2luZyBpbiBhIENpcGhl
clNwZWMgb2JqZWN0IHNvIHdlIGNvdWxkCgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIC8v77u/
ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIHRlbGwgd2hhdCBjaXBoZXIgdHJh
bnNmb3JtYXRpb24gdG8gdXNlIGFzIHdlbGwgaW5zdGVhZCBvZiBqdXN0IHRoZSBrZXkgc2l6ZS4g
VGhlbgoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICAvL++7vyAg77u/ICDvu78gIO+7vyAg77u/
ICDvu78gIO+7vyAg77u/ICB3ZSB3b3VsZCBleHRyYWN0IGtleVNpemUgZnJvbSB0aGUgQ2lwaGVy
U3BlYyBvYmplY3Qgb2YgZnJvbSB0aGUgU2VjcmV0S2V5IG9iamVjdC4KCQkJCQkJCQkgICDvu78g
IO+7vyAg77u/ICAgLy8KCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgaWYgKCBrZXlTaXplICE9
IGtleUxlbiApIHsKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICDvu78gICAvLyBESVNDVVNTOiBU
ZWNobmljYWxseSB0aGlzIGlzIG5vdCBhIHNlY3VyaXR5ICJmYWlsdXJlIiBwZXIgc2UsIGJ1dCBu
b3QgcmVhbGx5IGEgInN1Y2Nlc3MiIGVpdGhlci4KCQkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7
vyAg77u/ICAgbG9nZ2VyLndhcm5pbmcoTG9nZ2VyLlNFQ1VSSVRZX0ZBSUxVUkUsICJFbmNyeXB0
aW9uIGtleSBsZW5ndGggbWlzbWF0Y2guIEVTQVBJLkVuY3J5cHRpb25LZXlMZW5ndGggaXMgIiAr
CgkJCQkJCQkJCQkJICAgICAgIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gICBrZXlMZW4g
KyAiIGJpdHMsIGJ1dCBsZW5ndGggb2YgYWN0dWFsIGVuY3J5cHRpb24ga2V5IGlzICIgKyBrZXlT
aXplICsKCQkJCQkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAg77u/ICAg77u/ICDvu78gICIg
Yml0cy4gIERpZCB5b3UgcmVtZW1iZXIgdG8gcmVnZW5lcmF0ZSB5b3VyIG1hc3RlciBrZXkgKGlm
IHRoYXQgaXMgd2hhdCB5b3UgYXJlIHVzaW5nKT8/PyIpOwoJCQkJCQkJCSAgIO+7vyAg77u/ICDv
u78gICB9CgkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAgIC8vIERJU0NVU1M6IFJlY29uc2lk
ZXIgdGhlc2Ugd2FybmluZ3MuIElmIHRob3VzYW5kcyBvZiBlbmNyeXB0aW9ucyBhcmUgZG9uZSBp
biB0aWdodCBsb29wLCBubyBvbmUgbmVlZHMKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgLy8g
ICAgICAgICAgbW9yZSB0aGFuIDEgd2FybmluZy4gU2hvdWxkIHdlIGRvIHNvbWV0aGluZyBtb3Jl
IGludGVsbGlnZW50IGhlcmU/CgkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAgIGlmICgga2V5U2l6
ZSA8IGtleUxlbiApIHsKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICDvu78gICAvLyBFU0FQSS5F
bmNyeXB0aW9uS2V5TGVuZ3RoIGRlZmF1bHRzIHRvIDEyOCwgYnV0IHRoYXQgbWVhbnMgdGhhdCB3
ZSBjb3VsZCBub3QgdXNlIERFUyAoYXMgd2VhayBhcyBpdAoJCQkJCQkJCSAgICAgICDvu78gIO+7
vyAg77u/ICDvu78gICAvLyBpcyksIGV2ZW4gZm9yIGxlZ2FjeSBjb2RlLiBUaGVyZWZvcmUsIHRo
aXMgaGFzIGJlZW4gY2hhbmdlZCB0byBzaW1wbGUgbG9nIGEgd2FybmluZyByYXRoZXIgdGhhbgoJ
CQkJCQkJCSAgICAgICDvu78gIO+7vyAg77u/ICDvu78gICAvL++7vyAgdGhyb3cgdGhlIGZvbGxv
d2luZyBleGNlcHRpb24uCgkJCQkJCQkJICAgICAgIO+7vyAg77u/ICDvu78gIO+7vyAgIC8v77u/
ICDvu78gIO+7vyAg77u/ICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FeGNlcHRpb24oIkFjdHVh
bCBrZXkgc2l6ZSBvZiAiICsga2V5U2l6ZSArICIgYml0cyBzbWFsbGVyIHRoYW4gc3BlY2lmaWVk
ICIgKwoJCQkJCQkJCSAgICAgICDvu78gIO+7vyAg77u/ICDvu78gICAvL++7vyAg77u/ICDvu78g
IO+7vyAg77u/ICDvu78gICAgImVuY3J5cHRpb24ga2V5IGxlbmd0aCAoRVNBUEkuRW5jcnlwdGlv
bktleUxlbmd0aCkgb2YgIiArIGtleUxlbiArICIgYml0cy4iKTsKCQkJCQkJCQkgICAgICAg77u/
ICDvu78gIO+7vyAg77u/ICAgbG9nZ2VyLndhcm5pbmcoTG9nZ2VyLlNFQ1VSSVRZX0ZBSUxVUkUs
ICJBY3R1YWwga2V5IHNpemUgb2YgIiArIGtleVNpemUgKyAiIGJpdHMgU01BTExFUiBUSEFOIHNw
ZWNpZmllZCAiICsKCQkJCQkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7
vyAgICJlbmNyeXB0aW9uIGtleSBsZW5ndGggKEVTQVBJLkVuY3J5cHRpb25LZXlMZW5ndGgpIG9m
ICIgKyBrZXlMZW4gKyAiIGJpdHMgd2l0aCBjaXBoZXIgYWxnb3JpdGhtICIgKyBjaXBoZXJBbGcp
OwoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICB9CgkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7
vyAgIGlmICgga2V5U2l6ZSA8IDExMiApIHvvu78gIO+7vyAgLy8gTklTVCBTcGVjaWFsIFB1YiA4
MDAtNTcgY29uc2lkZXJzIDExMi1iaXRzIHRvIGJlIHRoZSBtaW5pbWFsbHkgc2FmZSBrZXkgc2l6
ZSBmcm9tIDIwMTAtMjAzMC4KCQkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAg77u/ICAgLy8g
Tm90ZSB0aGF0IDExMiBiaXRzICdqdXN0IGhhcHBlbnMnIHRvIGJlIHNpemUgb2YgMi1rZXkgVHJp
cGxlIERFUyEKCQkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAg77u/ICAgbG9nZ2VyLndhcm5p
bmcoTG9nZ2VyLlNFQ1VSSVRZX0ZBSUxVUkUsICJQb3RlbnRpYWxseSB1bnNlY3VyZSBlbmNyeXB0
aW9uLiBLZXkgc2l6ZSBvZiAiICsga2V5U2l6ZSArICJiaXRzICIgKwoJCQkJCQkJCQkJCSAgICAg
ICAibm90IHN1ZmZpY2llbnRseSBsb25nIGZvciAiICsgY2lwaGVyQWxnICsgIi4gU2hvdWxkIHVz
ZSBhcHByb3ByaWF0ZSBhbGdvcml0aG0gd2l0aCBrZXkgc2l6ZSAiICsKCQkJCQkJCQkJCQkgICAg
ICAgIm9mICphdCBsZWFzdCogMTEyIGJpdHMgZXhjZXB0IHdoZW4gcmVxdWlyZWQgYnkgbGVnYWN5
IGFwcHMuIFNlZSBOSVNUIFNwZWNpYWwgUHViIDgwMC01Ny4iKTsKCQkJCQkJCQkgICDvu78gIO+7
vyAg77u/ICAgfQoJCQkJCQkJICAgICAgIO+7vyAg77u/ICDvu78gICAvLyBDaGVjayBpZiBhbGdv
cml0aG0gbWVudGlvbmVkIGluIFNlY3JldEtleSBpcyBzYW1lIGFzIHRoYXQgYmVpbmcgdXNlZCBm
b3IgQ2lwaGVyIG9iamVjdC4KCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgLy8gVGhleSBzaG91
bGQgYmUgdGhlIHNhbWUuIElmIHRoZXkgYXJlIGRpZmZlcmVudCwgdGhpbmdzIGNvdWxkIGZhaWwu
IChFLmcuLCBERVMgYW5kIERFU2VkZQoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICAvLyByZXF1
aXJlIGtleXMgd2l0aCBldmVuIHBhcml0eS4gRXZlbiBpZiBrZXkgd2FzIHN1ZmZpY2llbnQgc2l6
ZSwgaWYgaXQgZGlkbid0IGhhdmUgdGhlIGNvcnJlY3QKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/
ICAgLy8gcGFyaXR5IGl0IGNvdWxkIGZhaWwuKQoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICAv
LwoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICBTdHJpbmcgc2tleUFsZyA9IGtleS5nZXRBbGdv
cml0aG0oKTsKCQkJCQkJCSAgICAgICDvu78gIO+7vyAg77u/ICAgaWYgKCAhKCBjaXBoZXJBbGcu
c3RhcnRzV2l0aCggc2tleUFsZyArICIvIiApIHx8IGNpcGhlckFsZy5lcXVhbHMoIHNrZXlBbGcg
KSApICkgewoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gIO+7vyAgIC8vIERJU0NVU1M6IFNob3Vs
ZCB3ZSB0aHJvd24gYSBDb25maWd1cmF0aW9uRXhjZXB0aW9uIGhlcmUgb3IganVzdCBsb2cgYSB3
YXJuaW5nPz8/IEknbSBnYW1lIGZvcgoJCQkJCQkJCSAgICAgICDvu78gIO+7vyAg77u/ICDvu78g
ICAvL++7vyAg77u/ICDvu78gICBlaXRoZXIsIGJ1dCBwZXJzb25hbGx5IEknZCBwcmVmZXIgdGhl
IHNxdWVha3kgd2hlZWwgdG8gdGhlIGFubm95aW5nIHRocm93aW5nIG9mCgkJCQkJCQkJICAgICAg
IO+7vyAg77u/ICDvu78gIO+7vyAgIC8v77u/ICDvu78gIO+7vyAgIGEgQ29uZmlndXJhdGlvbkV4
Y2VwdGlvbiAod2hpY2ggaXMgYSBSdW50aW1lRXhjZXB0aW9uKS4gTGVzcyBsaWtlbHkgdG8gdXBz
ZXQKCQkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAg77u/ICAgLy/vu78gIO+7vyAg77u/ICAg
dGhlIGRldmVsb3BtZW50IGNvbW11bml0eS4KCQkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAg
77u/ICAgbG9nZ2VyLndhcm5pbmcoTG9nZ2VyLlNFQ1VSSVRZX0ZBSUxVUkUsICJFbmNyeXB0aW9u
IG1pc21hdGNoIGJldHdlZW4gY2lwaGVyIGFsZ29yaXRobSAoIiArCgkJCQkJCQkJCQkJICAgICAg
IO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gICBjaXBoZXJBbGcgKyAiKSBhbmQgU2VjcmV0
S2V5IGFsZ29yaXRobSAoIiArIHNrZXlBbGcgKyAiKS4gQ2lwaGVyIHdpbGwgdXNlIGFsZ29yaXRo
bSAiICsgY2lwaGVyQWxnKTsKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgfQoKCQkJCQkJCSAg
ICAgICDvu78gIO+7vyAg77u/ICAgYnl0ZVtdIGl2Qnl0ZXMgPSBudWxsOwoJCQkJCQkJICAgICAg
IO+7vyAg77u/ICDvu78gICBDaXBoZXJTcGVjIGNpcGhlclNwZWMgPSBuZXcgQ2lwaGVyU3BlYyhl
bmNyeXB0ZXIsIGtleVNpemUpO++7vyAgLy8gQ291bGQgcGFzcyB0aGUgQUNUVUFMIChpbnRlbmRl
ZCkga2V5IHNpemUKCQkJCQkJCQkJCQkJCQkJCSAgICAg77u/ICDvu78gIO+7vyAgIAoJCQkJCQkJ
CQkJCQkJCQkJICAgICAvLyBVc2luZyBjaXBoZXIgbW9kZSB0aGF0IHN1cHBvcnRzICpib3RoKiBj
b25maWRlbnRpYWxpdHkgKmFuZCogYXV0aGVudGljaXR5PyBJZiBzbywgdGhlbgoJCQkJCQkJCQkJ
CQkJCQkJICAgICAvLyB1c2UgdGhlIHNwZWNpZmllZCBTZWNyZXRLZXkgYXMtaXMgcmF0aGVyIHRo
YW4gY29tcHV0aW5nIGEgZGVyaXZlZCBrZXkgZnJvbSBpdC4gV2UgYWxzbwoJCQkJCQkJCQkJCQkJ
CQkJICAgICAvLyBkb24ndCBleHBlY3QgYSBzZXBhcmF0ZSBNQUMgaW4gdGhlIHNwZWNpZmllZCBD
aXBoZXJUZXh0IG9iamVjdCBzbyB0aGVyZWZvcmUgZG9uJ3QgdHJ5CgkJCQkJCQkJCQkJCQkJCQkg
ICAgIC8vIHRvIHZhbGlkYXRlIGl0LgoJCQkJCQkJCQkJCQkJCQkJICAgICBib29sZWFuIHByZWZl
cnJlZENpcGhlck1vZGUgPSBDcnlwdG9IZWxwZXIuaXNDb21iaW5lZENpcGhlck1vZGUoIGNpcGhl
ck1vZGUgKTsKCQkJCQkJCSAgICAgICBTZWNyZXRLZXkgZW5jS2V5ID0gbnVsbDsKCQkJCQkJCSAg
ICAgICBpZiAoIHByZWZlcnJlZENpcGhlck1vZGUgKSB7CgkJCQkJCQkJICAgZW5jS2V5ID0ga2V5
OwoJCQkJCQkJICAgICAgIH0gZWxzZSB7CgkJCQkJCQkJICAgZW5jS2V5ID0gY29tcHV0ZURlcml2
ZWRLZXkoS2V5RGVyaXZhdGlvbkZ1bmN0aW9uLmtkZlZlcnNpb24sIGdldERlZmF1bHRQUkYoKSwK
CQkJCQkJCQkJCQkgICAgICBrZXksIGtleVNpemUsICJlbmNyeXB0aW9uIik7CgkJCQkJCQkgICAg
ICAgfQoJCQkJCQkJICAgICAgIO+7vyAg77u/ICDvu78gICAKCQkJCQkJCQkgICBpZiAoIGNpcGhl
clNwZWMucmVxdWlyZXNJVigpICkgewoJCQkJCQkJCSAgICAgICBTdHJpbmcgaXZUeXBlID0gRVNB
UEkuc2VjdXJpdHlDb25maWd1cmF0aW9uKCkuZ2V0SVZUeXBlKCk7CgkJCQkJCQkJICAgICAgIEl2
UGFyYW1ldGVyU3BlYyBpdlNwZWMgPSBudWxsOwoJCQkJCQkJCSAgICAgICBpZiAoIGl2VHlwZS5l
cXVhbHNJZ25vcmVDYXNlKCJyYW5kb20iKSApIHsKCQkJCQkJCQkJICAgaXZCeXRlcyA9IEVTQVBJ
LnJhbmRvbWl6ZXIoKS5nZXRSYW5kb21CeXRlcyhlbmNyeXB0ZXIuZ2V0QmxvY2tTaXplKCkpOwoJ
CQkJCQkJCQkgICDvu78gICAgICAgICAgfSBlbHNlIGlmICggaXZUeXBlLmVxdWFsc0lnbm9yZUNh
c2UoImZpeGVkIikgKSB7CgkJCQkJCQkJCSAgIFN0cmluZyBmaXhlZElWQXNIZXggPSBFU0FQSS5z
ZWN1cml0eUNvbmZpZ3VyYXRpb24oKS5nZXRGaXhlZElWKCk7CgkJCQkJCQkJCSAgIGl2Qnl0ZXMg
PSBIZXguZGVjb2RlKGZpeGVkSVZBc0hleCk7CgkJCQkJCQkJCSAgIC8qIEZVVFVSRe+7vyAg77u/
ICAgfSBlbHNlIGlmICggaXZUeXBlLmVxdWFsc0lnbm9yZUNhc2UoInNwZWNpZmllZCIpKSB7CgkJ
CQkJCQkJCSAgIC8vIEZVVFVSRSAtIFRPRE8gIC0gQ3JlYXRlIGluc3RhbmNlIG9mIHNwZWNpZmll
ZCBjbGFzcyB0byB1c2UgZm9yIElWIGdlbmVyYXRpb24gYW5kCgkJCQkJCQkJCSAgIC8v77u/ICDv
u78gIO+7vyAg77u/ICDvu78gICB1c2UgaXQgdG8gY3JlYXRlIHRoZSBpdkJ5dGVzLiAoVGhlIGlu
dGVudCBpcyB0byBtYWtlIHN1cmUgdGhhdAoJCQkJCQkJCQkgICAvL++7vyAg77u/ICDvu78gIO+7
vyAgICAgICAxKSBJVnMgYXJlIG5ldmVyIHJlcGVhdGVkIGZvciBjaXBoZXIgbW9kZXMgbGlrZSBP
RkIgYW5kIENGQiwgYW5kCgkJCQkJCQkJCSAgIC8v77u/ICDvu78gIO+7vyAg77u/ICDvu78gICAy
KSB0byBzY3JlZW4gZm9yIHdlYWsgSVZzIGZvciB0aGUgcGFydGljdWxhciBjaXBoZXIgYWxnb3Jp
dGhtLgoJCQkJCQkJCQkgICAvL++7vyAg77u/ICBJbiBtZWFudGltZSwgdXNlICdyYW5kb20nIGZv
ciBibG9jayBjaXBoZXIgaW4gZmVlZGJhY2sgbW9kZS4gVW5saWtlbHkgdGhleSB3aWxsCgkJCQkJ
CQkJCSAgIC8v77u/ICDvu78gIGJlIHJlcGVhdGVkIHVubGVzcyB5b3UgYXJlIHNhbHRpbmcgU2Vj
dXJlUmFuZG9tIHdpdGggc2FtZSB2YWx1ZSBlYWNoIHRpbWUuIEFueXRoaW5nCgkJCQkJCQkJCSAg
IC8v77u/ICDvu78gIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBzaG91bGQgYmUgc3VpdGFibGUs
IGxpa2UgYSBjb3VudGVyLCBidXQgbmVlZCB0byByZW1lbWJlcgoJCQkJCQkJCQkgICDvu78gIO+7
vyAg77u/ICDvu78gIO+7vyAgIO+7vyAg77u/ICAvL++7vyAg77u/ICBpdCBhY3Jvc3MgSlZNIHJl
c3RhcnRzLiBXYXMgdGhpbmtpbmcgb2YgdXNpbmcgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCku
IFdoaWxlCgkJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICAg77u/ICDvu78gIC8v
77u/ICDvu78gIGl0J3Mgbm90IHBlcmZlY3QgaXQgcHJvYmFibHkgaXMgZ29vZCBlbm91Z2guIENv
dWxkIGV2ZW4gYWxsIChhZHZhbmNlZCkgZGV2ZWxvcGVycwoJCQkJCQkJCQkgICDvu78gIO+7vyAg
77u/ICDvu78gIO+7vyAgIO+7vyAg77u/ICAvLyAgICAgIHRvIGRlZmluZSB0aGVpciBvd24gY2xh
c3MgdG8gY3JlYXRlIGEgdW5pcXVlIElWIHRvIGFsbG93IHRoZW0gc29tZSBjaG9pY2UsIGJ1dAoJ
CQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAgIO+7vyAg77u/ICAvLyAgICAgIGRl
ZmluaXRlbHkgbmVlZCB0byBwcm92aWRlIGEgc2FmZSwgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4K
CQkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gICAgKi8KCQkJCQkJCQkJICAg77u/
ICDvu78gIO+7vyAg77u/ICAgfSBlbHNlIHsKCQkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAg77u/
ICDvu78gICAvLyBUT0RPOiBVcGRhdGUgdG8gYWRkICdzcGVjaWZpZWQnIG9uY2UgdGhhdCBpcyBz
dXBwb3J0ZWQgYW5kIGFkZGVkIGFib3ZlLgoJCQkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAg
77u/ICDvu78gICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbigiUHJvcGVydHkgRW5j
cnlwdG9yLkNob29zZUlWTWV0aG9kIG11c3QgYmUgc2V0IHRvICdyYW5kb20nIG9yICdmaXhlZCci
KTsKCQkJCQkJCQkJICAg77u/ICDvu78gIO+7vyAg77u/ICAgfQoJCQkJCQkJCSAgICAgICDvu78g
IO+7vyAg77u/ICDvu78gICBpdlNwZWMgPSBuZXcgSXZQYXJhbWV0ZXJTcGVjKGl2Qnl0ZXMpOwoJ
CQkJCQkJCSAgICAgICDvu78gIO+7vyAg77u/ICDvu78gICBjaXBoZXJTcGVjLnNldElWKGl2Qnl0
ZXMpOwoJCQkJCQkJCSAgICAgICDvu78gIO+7vyAg77u/ICDvu78gICBlbmNyeXB0ZXIuaW5pdChD
aXBoZXIuRU5DUllQVF9NT0RFLCBlbmNLZXksIGl2U3BlYyk7CgkJCQkJCQkJICAgICAgIO+7vyAg
77u/ICDvu78gICB9IGVsc2UgewoJCQkJCQkJCSAgICAgICDvu78gIO+7vyAg77u/ICDvu78gICBl
bmNyeXB0ZXIuaW5pdChDaXBoZXIuRU5DUllQVF9NT0RFLCBlbmNLZXkpOwoJCQkJCQkJCSAgICAg
ICDvu78gIO+7vyAg77u/ICAgfQoJCQkJCQkJICAgICAgIO+7vyAg77u/ICDvu78gICBsb2dnZXIu
ZGVidWcoTG9nZ2VyLkVWRU5UX1NVQ0NFU1MsICJFbmNyeXB0aW5nIHdpdGggIiArIGNpcGhlclNw
ZWMpOwoJCQkJCQkJICAgICAgIO+7vyAg77u/ICDvu78gICBieXRlW10gcmF3ID0gZW5jcnlwdGVy
LmRvRmluYWwocGxhaW50ZXh0KTsKCQkJCQkJCSAgICAgICAvLyBDb252ZXJ0IHRvIENpcGhlclRl
eHQuCgkJCQkJCQkgICAgICAgQ2lwaGVyVGV4dCBjaXBoZXJ0ZXh0ID0gbmV3IENpcGhlclRleHQo
Y2lwaGVyU3BlYywgcmF3KTsKCQkJCQkJCSAgICAgICDvu78gIO+7vyAg77u/ICAgCgkJCQkJCQkJ
ICAg77u/ICDvu78gIO+7vyAgIC8vIElmIHdlIGFyZSB1c2luZyBhICJwcmVmZXJyZWQiIGNpcGhl
ciBtb2RlLS1pLmUuLCBvbmUgdGhhdCBzdXBwb3J0cyAqYm90aCogY29uZmlkZW50aWFsaXR5IGFu
ZAoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICAvLyBhdXRoZW50aWNpdHksIHRoZXJlIGlzIG5v
IHBvaW50IHRvIHN0b3JlIGEgc2VwYXJhdGUgTUFDIGluIHRoZSBDaXBoZXJUZXh0IG9iamVjdC4g
VGh1cyB3ZSBvbmx5CgkJCQkJCQkJICAgLy8gZG8gdGhpcyB3aGVuIHdlIGFyZSBub3QgdXNpbmcg
c3VjaCBhIGNpcGhlciBtb2RlLgoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICBpZiAoICFwcmVm
ZXJyZWRDaXBoZXJNb2RlICkgewoJCQkJCQkJCSAgIO+7vyAg77u/ICDvu78gICAgICAgLy8gQ29t
cHV0ZSBkZXJpdmVkIGtleSwgYW5kIHRoZW4gdXNlIGl0IHRvIGNvbXB1dGUgYW5kIHN0b3JlIHNl
cGFyYXRlIE1BQyBpbiBDaXBoZXJUZXh0IG9iamVjdC4KCQkJCQkJCQkgICAgICAg77u/ICDvu78g
IO+7vyAgICAgICBTZWNyZXRLZXkgYXV0aEtleSA9IGNvbXB1dGVEZXJpdmVkS2V5KEtleURlcml2
YXRpb25GdW5jdGlvbi5rZGZWZXJzaW9uLCBnZXREZWZhdWx0UFJGKCksCgkJCQkJCQkJCQkJCQkJ
Ce+7vyAg77u/ICDvu78gICAgICDvu78gIO+7vyAgIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDv
u78gIO+7vyAgICAga2V5LCBrZXlTaXplLCAiYXV0aGVudGljaXR5Iik7CgkJCQkJCQkJICAg77u/
ICDvu78gIO+7vyAgICAgICBjaXBoZXJ0ZXh0LmNvbXB1dGVBbmRTdG9yZU1BQyggIGF1dGhLZXkg
KTsKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgfQoJCQkJCQkJICAgICAgIO+7vyAg77u/ICDv
u78gICBsb2dnZXIuZGVidWcoTG9nZ2VyLkVWRU5UX1NVQ0NFU1MsICJKYXZhRW5jcnlwdG9yLmVu
Y3J5cHQoU2VjcmV0S2V5LGJ5dGVbXSxib29sZWFuLGJvb2xlYW4pIC0tIHN1Y2Nlc3MhIik7CgkJ
CQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAgIHN1Y2Nlc3MgPSB0cnVlO++7vyAgLy8gVzAwdCEh
IQoJCQkJCQkJCQkJCSDvu78gIO+7vyAg77u/ICAgcmV0dXJuIGNpcGhlcnRleHQ7CgkJCQkJCQkg
ICAgICAg77u/ICDvu78gIH0gY2F0Y2ggKEludmFsaWRLZXlFeGNlcHRpb24gaWtlKSB7CgkJCQkJ
CQkgICAgICAg77u/ICDvu78gIO+7vyAgIHRocm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0aW9uKCJF
bmNyeXB0aW9uIGZhaWx1cmU6IEludmFsaWQga2V5IGV4Y2VwdGlvbi4iLAoJCQkJCQkJCQkJCQkg
ICAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gICAiUmVxdWVzdGVkIGtleSBzaXplOiAiICsga2V5
U2l6ZSArICJiaXRzIGdyZWF0ZXIgdGhhbiAxMjggYml0cy4gTXVzdCBpbnN0YWxsIHVubGltaXRl
ZCBzdHJlbmd0aCBjcnlwdG8gZXh0ZW5zaW9uIGZyb20gU3VuOiAiICsKCQkJCQkJCQkJCQkJICAg
IO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICAgaWtlLmdldE1lc3NhZ2UoKSwgaWtlKTsKCQkJCQkJ
CSAgICAgICDvu78gIO+7vyAgIH0gY2F0Y2ggKENvbmZpZ3VyYXRpb25FeGNlcHRpb24gY2V4KSB7
CgkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAgIHRocm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0
aW9uKCJFbmNyeXB0aW9uIGZhaWx1cmU6IENvbmZpZ3VyYXRpb24gZXJyb3IuIERldGFpbHMgaW4g
bG9nLiIsICJLZXkgc2l6ZSBtaXNtYXRjaCBvciB1bnN1cHBvcnRlZCBJViBtZXRob2QuICIgKwoJ
CQkJCQkJCQkJCQkgICAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gICAiQ2hlY2sgZW5jcnlwdGlv
biBrZXkgc2l6ZSB2cy4gRVNBUEkuRW5jcnlwdGlvbktleUxlbmd0aCBvciBFbmNyeXB0b3IuQ2hv
b3NlSVZNZXRob2QgcHJvcGVydHkuIiwgY2V4KTsKCQkJCQkJCSAgICAgICDvu78gIO+7vyAgIH0g
Y2F0Y2ggKEludmFsaWRBbGdvcml0aG1QYXJhbWV0ZXJFeGNlcHRpb24gZSkgewoJCQkJCQkJICAg
ICAgIO+7vyAg77u/ICDvu78gICB0aHJvdyBuZXcgRW5jcnlwdGlvbkV4Y2VwdGlvbigiRW5jcnlw
dGlvbiBmYWlsdXJlIChpbnZhbGlkIElWKSIsCgkJCQkJCQkJCQkJCSAgICDvu78gIO+7vyAg77u/
ICDvu78gIO+7vyAgICJFbmNyeXB0aW9uIHByb2JsZW06IEludmFsaWQgSVYgc3BlYzogIiArIGUu
Z2V0TWVzc2FnZSgpLCBlKTsKCQkJCQkJCSAgICAgICDvu78gIO+7vyAgIH0gY2F0Y2ggKElsbGVn
YWxCbG9ja1NpemVFeGNlcHRpb24gZSkgewoJCQkJCQkJICAgICAgIO+7vyAg77u/ICDvu78gICB0
aHJvdyBuZXcgRW5jcnlwdGlvbkV4Y2VwdGlvbigiRW5jcnlwdGlvbiBmYWlsdXJlIChubyBwYWRk
aW5nIHVzZWQ7IGludmFsaWQgaW5wdXQgc2l6ZSkiLAoJCQkJCQkJCQkJCQkgICAg77u/ICDvu78g
IO+7vyAg77u/ICDvu78gICAiRW5jcnlwdGlvbiBwcm9ibGVtOiBJbnZhbGlkIGlucHV0IHNpemUg
d2l0aG91dCBwYWRkaW5nICgiICsgeGZvcm0gKyAiKS4gIiArIGUuZ2V0TWVzc2FnZSgpLCBlKTsK
CQkJCQkJCSAgICAgICDvu78gIO+7vyAgIH0gY2F0Y2ggKEJhZFBhZGRpbmdFeGNlcHRpb24gZSkg
ewoJCQkJCQkJICAgICAgIO+7vyAg77u/ICDvu78gICB0aHJvdyBuZXcgRW5jcnlwdGlvbkV4Y2Vw
dGlvbigiRW5jcnlwdGlvbiBmYWlsdXJlIiwKCQkJCQkJCQkJCQkJICAgIO+7vyAg77u/ICDvu78g
IO+7vyAg77u/ICAgIltOb3RlOiBTaG91bGQgTkVWRVIgaGFwcGVuIGluIGVuY3J5cHRpb24gbW9k
ZS5dIEVuY3J5cHRpb24gcHJvYmxlbTogIiArIGUuZ2V0TWVzc2FnZSgpLCBlKTsKCQkJCQkJCSAg
ICAgICDvu78gIO+7vyAgIH0gY2F0Y2ggKE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiBlKSB7CgkJ
CQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAgIHRocm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0aW9u
KCJFbmNyeXB0aW9uIGZhaWx1cmUgKHVuYXZhaWxhYmxlIGNpcGhlciByZXF1ZXN0ZWQpIiwKCQkJ
CQkJCQkJCQkJICAgIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICAgIkVuY3J5cHRpb24gcHJvYmxl
bTogc3BlY2lmaWVkIGFsZ29yaXRobSBpbiBjaXBoZXIgeGZvcm0gIiArIHhmb3JtICsgIiBub3Qg
YXZhaWxhYmxlOiAiICsgZS5nZXRNZXNzYWdlKCksIGUpOwoJCQkJCQkJICAgICAgIO+7vyAg77u/
ICAgfSBjYXRjaCAoTm9TdWNoUGFkZGluZ0V4Y2VwdGlvbiBlKSB7CgkJCQkJCQkgICAgICAg77u/
ICDvu78gIO+7vyAgIHRocm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0aW9uKCJFbmNyeXB0aW9uIGZh
aWx1cmUgKHVuYXZhaWxhYmxlIHBhZGRpbmcgc2NoZW1lIHJlcXVlc3RlZCkiLAoJCQkJCQkJCQkJ
CQkgICAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gICAiRW5jcnlwdGlvbiBwcm9ibGVtOiBzcGVj
aWZpZWQgcGFkZGluZyBzY2hlbWUgaW4gY2lwaGVyIHhmb3JtICIgKyB4Zm9ybSArICIgbm90IGF2
YWlsYWJsZTogIiArIGUuZ2V0TWVzc2FnZSgpLCBlKTsKCQkJCQkJCSAgICAgICDvu78gIO+7vyAg
IH0gZmluYWxseSB7CgkJCQkJCQkgICAgICAg77u/ICDvu78gIO+7vyAgIC8vIERvbid0IG92ZXJ3
cml0ZSBhbnl0aGluZyBpbiB0aGUgY2FzZSBvZiBleGNlcHRpb25zIGJlY2F1c2UgdGhleSBtYXkg
d2lzaCB0byByZXRyeS4KCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICAgaWYgKCBzdWNjZXNzICYm
IG92ZXJ3cml0ZVBsYWludGV4dCApIHsKCQkJCQkJCQkgICDvu78gIO+7vyAg77u/ICDvu78gICBw
bGFpbi5vdmVyd3JpdGUoKTvvu78gIO+7vyAgLy8gTm90ZTogU2FtZSBhcyBvdmVyd3JpdGluZyAn
cGxhaW50ZXh0JyBieXRlIGFycmF5LgoJCQkJCQkJCQkJCQkgIO+7vyAg77u/ICB9CgkJCQkJCQkg
ICAgICAg77u/ICB9Cgnvu78gICB9CgogICAg77u/ICAvKioKCSDvu78gICAgKiBDb252ZW5pZW5j
ZSBtZXRob2QgdGhhdCBkZWNyeXB0cyBwcmV2aW91c2x5IGVuY3J5cHRlZCBwbGFpbnRleHQgc3Ry
aW5ncwoJIO+7vyAgICAqIHRoYXQgd2VyZSBlbmNyeXB0ZWQgdXNpbmcgdGhlIG5ldyBlbmNyeXB0
aW9uIG1lY2hhbmlzbSAod2l0aCBDQkMgbW9kZSBhbmQKCSDvu78gICAgKiBQS0NTNSBwYWRkaW5n
IGJ5IGRlZmF1bHQpLiAgVGhpcyBkZWNyeXB0aW9uIG1ldGhvZCB1c2VzIHRoZSBtYXN0ZXIKCSDv
u78gICAgKiBlbmNyeXB0aW9uIGtleSBzcGVjaWZpZWQgYnkgdGhlIHtAY29kZSBFbmNyeXB0b3Iu
TWFzdGVyS2V5fSBwcm9wZXJ0eQoJIO+7vyAgICAqIGluIHtAY29kZSBFU0FQSS5wcm9wZXJ0aWVz
fS4KCSDvu78gICAgKgoJIO+7vyAgICAqIEBwYXJhbSBiNjRJVkNpcGhlcnRleHTvu78gIEEgYmFz
ZTY0LWVuY29kZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlCgkg77u/ICAgICog77u/ICDvu78gIO+7
vyAg77u/ICDvu78gIO+7vyAg77u/ICBJViArIHJhdyBjaXBoZXJ0ZXh0IHN0cmluZyB0byBiZSBk
ZWNyeXB0ZWQgd2l0aAoJIO+7vyAgICAqIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7
vyAgdGhlIGRlZmF1bHQgbWFzdGVyIGtleS4KCSDvu78gICAgKiBAcmV0dXJu77u/ICBUaGUgcGxh
aW50ZXh0IHN0cmluZyBwcmlvciB0byBlbmNyeXB0aW9uLgoJIO+7vyAgICAqIEB0aHJvd3MgRW5j
cnlwdGlvbkV4Y2VwdGlvbiBXaGVuIHNvbWV0aGluZyBmYWlscyB3aXRoIHRoZSBkZWNyeXB0aW9u
LgoJIO+7vyAgICAqCgkg77u/ICAgICogQHNlZSBvcmcub3dhc3AuZXNhcGkuRW5jcnlwdG9yI2Rl
Y3J5cHQoQ2lwaGVyVGV4dCkKCSDvu78gICAgKi8KCe+7vyAgIEBEZXByZWNhdGVkIHB1YmxpYyBT
dHJpbmcgZGVjcnlwdChTdHJpbmcgYjY0SVZDaXBoZXJ0ZXh0KSB0aHJvd3MgRW5jcnlwdGlvbkV4
Y2VwdGlvbgoJCQkJCQkJCQkgICAg77u/ICAgewoJ77u/ICAgICAgIGxvZ1dhcm5pbmcoImRlY3J5
cHQiLCAiQ2FsbGluZyBkZXByZWNhdGVkIGRlY3J5cHQoKSBtZXRob2QuIik7Cgnvu78gIO+7vyAg
IENpcGhlclRleHQgY3QgPSBudWxsOwoJ77u/ICDvu78gICB0cnkgewoJICAgIO+7vyAg77u/ICDv
u78gICAvLyBXZSBhc3N1bWUgdGhhdCB0aGUgZGVmYXVsdCBjaXBoZXIgdHJhbnNmb3JtIHdhcyB1
c2VkIHRvIGVuY3J5cHQgdGhpcy4KCQnvu78gIO+7vyAg77u/ICAgY3QgPSBuZXcgQ2lwaGVyVGV4
dCgpOwoKCSAgICDvu78gIO+7vyAg77u/ICAgLy8gTmVlZCB0byBiYXNlNjQgZGVjb2RlIHRoZSBJ
VitjaXBoZXJ0ZXh0IGFuZCBleHRyYWN0IHRoZSBJViB0byBzZXQgaXQgaW4gQ2lwaGVyVGV4dCBv
YmplY3QuCgkJ77u/ICDvu78gIO+7vyAgIGJ5dGVbXSBpdlBsdXNSYXdDaXBoZXJUZXh0ID0gRVNB
UEkuZW5jb2RlcigpLmRlY29kZUZyb21CYXNlNjQoYjY0SVZDaXBoZXJ0ZXh0KTsKCSAgICDvu78g
IO+7vyAg77u/ICAgaW50IGJsb2NrU2l6ZSA9IGN0LmdldEJsb2NrU2l6ZSgpO++7vyAgLy8gU2l6
ZSBpbiBieXRlcy4KCQkJCQkJCSDvu78gIO+7vyAg77u/ICAgYnl0ZVtdIGl2ID0gbmV3IGJ5dGVb
IGJsb2NrU2l6ZSBdOwoJICAgIO+7vyAg77u/ICDvu78gICBDcnlwdG9IZWxwZXIuY29weUJ5dGVB
cnJheShpdlBsdXNSYXdDaXBoZXJUZXh0LCBpdiwgYmxvY2tTaXplKTvvu78gIC8vIENvcHkgdGhl
IGZpcnN0IGJsb2NrU2l6ZSBieXRlcyBpbnRvIGl2IGFycmF5CgkJCQkJCQkJCQkgICAgICDvu78g
IO+7vyAg77u/ICAgaW50IGNpcGhlclRleHRTaXplID0gaXZQbHVzUmF3Q2lwaGVyVGV4dC5sZW5n
dGggLSBibG9ja1NpemU7CgkgICAg77u/ICDvu78gIO+7vyAgIGJ5dGVbXSByYXdDaXBoZXJUZXh0
ID0gbmV3IGJ5dGVbIGNpcGhlclRleHRTaXplIF07CgkgICAg77u/ICDvu78gIO+7vyAgIFN5c3Rl
bS5hcnJheWNvcHkoaXZQbHVzUmF3Q2lwaGVyVGV4dCwgYmxvY2tTaXplLCByYXdDaXBoZXJUZXh0
LCAwLCBjaXBoZXJUZXh0U2l6ZSk7CgkgICAg77u/ICDvu78gIO+7vyAgIGN0LnNldElWYW5kQ2lw
aGVydGV4dChpdiwgcmF3Q2lwaGVyVGV4dCk7CgoJICAgIO+7vyAg77u/ICDvu78gICAvLyBOb3cg
dGhlIENpcGhlclRleHQgb2JqZWN0IHNob3VsZCBiZSBwcmVwYXJlZCB0byB1c2UgaXQgdG8gZGVj
cnlwdC4KCQnvu78gIO+7vyAg77u/ICAgUGxhaW5UZXh0IHBsYWludGV4dCA9IGRlY3J5cHQoY3Qp
OwoJICAgIO+7vyAg77u/ICDvu78gICByZXR1cm4gcGxhaW50ZXh0LnRvU3RyaW5nKCk777u/ICAv
LyBDb252ZXJ0IGJhY2sgdG8gYSBKYXZhIFN0cmluZwoJCQkJCQkgICDvu78gIO+7vyAgIH0gY2F0
Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgewoJICAgIO+7vyAg77u/ICDvu78g
ICAvLyBTaG91bGQgbmV2ZXIgaGFwcGVuOyBVVEYtOCBzaG91bGQgYmUgaW4gcnQuamFyLgoJCe+7
vyAg77u/ICDvu78gICBsb2dnZXIuZXJyb3IoTG9nZ2VyLlNFQ1VSSVRZX0ZBSUxVUkUsICJVVEYt
OCBlbmNvZGluZyBub3QgYXZhaWxhYmxlISBEZWNyeXB0aW9uIGZhaWxlZC4iLCBlKTsKCSAgICDv
u78gIO+7vyAg77u/ICAgcmV0dXJuIG51bGw777u/ICAvLyBDSEVDS01FOiBPciByZS10aHJvdyBv
ciB3aGF0PyBDb3VsZCBhbHNvIHVzZSBuYXRpdmUgZW5jb2RpbmcsIGJ1dCB0aGF0J3MKCQkJCSAg
IO+7vyAg77u/ICDvu78gICAvLyBsaWtlbHkgdG8gY2F1c2UgdW5leHBlY3RlZCBhbmQgdW5kZXNp
cmVkIGVmZmVjdHMgZmFyIGRvd25zdHJlYW0uCgkJCQkgICDvu78gIO+7vyAgIH0gY2F0Y2ggKElP
RXhjZXB0aW9uIGUpIHsKCSAgICDvu78gIO+7vyAg77u/ICAgbG9nZ2VyLmVycm9yKExvZ2dlci5T
RUNVUklUWV9GQUlMVVJFLCAiQmFzZTY0IGRlY29kaW5nIG9mIElWK2NpcGhlcnRleHQgZmFpbGVk
LiBEZWNyeXB0aW9uIGZhaWxlZC4iLCBlKTsKCSAgICDvu78gIO+7vyAg77u/ICAgcmV0dXJuIG51
bGw7CgkgICAg77u/ICDvu78gICB9Cgnvu78gICB9CgogICAg77u/ICAvKioKCSDvu78gICoge0Bp
bmhlcml0RG9jfQoJIO+7vyAgKi8KCe+7vyAgcHVibGljIFBsYWluVGV4dCBkZWNyeXB0KENpcGhl
clRleHQgY2lwaGVydGV4dCkgdGhyb3dzIEVuY3J5cHRpb25FeGNlcHRpb24gewoJ77u/ICDvu78g
ICAvLyBOb3cgbW9yZSBvZiBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciB1c2luZyB0aGUgbWFz
dGVyIGtleS4KCSAgICDvu78gIO+7vyAgIHJldHVybiBkZWNyeXB0KHNlY3JldEtleVNwZWMsIGNp
cGhlcnRleHQpOwoJ77u/ICB9CgogICAg77u/ICAvKioKCSDvu78gICAqIHtAaW5oZXJpdERvY30K
CSDvu78gICAqLwoJ77u/ICBwdWJsaWMgUGxhaW5UZXh0IGRlY3J5cHQoU2VjcmV0S2V5IGtleSwg
Q2lwaGVyVGV4dCBjaXBoZXJ0ZXh0KQoJ77u/ICAgICAgdGhyb3dzIEVuY3J5cHRpb25FeGNlcHRp
b24sIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgoJCSAgICAg77u/ICB7Cgnvu78gICAgICBsb25n
IHN0YXJ0ID0gU3lzdGVtLm5hbm9UaW1lKCk7ICAvLyBDdXJyZW50IHRpbWUgaW4gbmFub3NlY3M7
IHVzZWQgdG8gcHJldmVudCB0aW1pbmcgYXR0YWNrcwoJ77u/ICAgICAgaWYgKCBrZXkgPT0gbnVs
bCApIHsKCSAgICDvu78gICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlv
bigiU2VjcmV0S2V5IGFyZyBtYXkgbm90IGJlIG51bGwiKTsKCSAgICDvu78gICAgICB9Cgnvu78g
ICAgICBpZiAoIGNpcGhlcnRleHQgPT0gbnVsbCApIHsKCSAgICDvu78gICAgICAgICAgdGhyb3cg
bmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ2lwaGVydGV4dCBtYXkgYXJnIG5vdCBiZSBu
dWxsIik7CgkgICAg77u/ICAgICAgfQoKCe+7vyAgICAgIGlmICggISBDcnlwdG9IZWxwZXIuaXNB
bGxvd2VkQ2lwaGVyTW9kZShjaXBoZXJ0ZXh0LmdldENpcGhlck1vZGUoKSkgKSB7CgkgICAg77u/
ICAgICAgICAgIC8vIFRoaXMgcmVhbGx5IHNob3VsZCBiZSBhbiBpbGxlZ2FsIGFyZ3VtZW50IGV4
Y2VwdGlvbiwgYnV0IGl0IGNvdWxkCgkJ77u/ICAgICAgICAgIC8vIG1lYW4gdGhhdCBhIHBhcnRu
ZXIgZW5jcnlwdGVkIHNvbWV0aGluZyB1c2luZyBhIGNpcGhlciBtb2RlIHRoYXQKCQnvu78gICAg
ICAgICAgLy8geW91IGRvIG5vdCBhY2NlcHQsIHNvIGl0J3MgYSBiaXQgbW9yZSBjb21wbGV4IHRo
YW4gdGhhdC4gQWxzbwoJCe+7vyAgICAgICAgICAvLyB0aHJvd2luZyBhbiBJbGxlZ2FsQXJndW1l
bnRFeGNlcHRpb24gZG9lc24ndCBhbGxvdyB1cyB0byBwcm92aWRlCgkJ77u/ICAgICAgICAgIC8v
IHRoZSB0d28gc2VwYXJhdGUgZXJyb3IgbWVzc2FnZXMgb3IgYXV0b21hdGljYWxseSBsb2cgaXQu
CgkJ77u/ICAgICAgICAgIHRocm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0aW9uKERFQ1JZUFRJT05f
RkFJTEVELAoJCQkJCQkJ77u/ICAgICAgICAgICAgICAgICAgIkludmFsaWQgY2lwaGVyIG1vZGUg
IiArIGNpcGhlcnRleHQuZ2V0Q2lwaGVyTW9kZSgpICsKCQkJCQkJCe+7vyAgICAgICAgICAiIG5v
dCBwZXJtaXR0ZWQgZm9yIGRlY3J5cHRpb24gb3IgZW5jcnlwdGlvbiBvcGVyYXRpb25zLiIpOwoJ
ICAgIO+7vyAgICAgIH0KCe+7vyAgICAgIGxvZ2dlci5kZWJ1ZyhMb2dnZXIuRVZFTlRfU1VDQ0VT
UywKCQkJICAg77u/ICAgICAgICAgICAgICAiQXJncyB2YWxpZCBmb3IgSmF2YUVuY3J5cHRvci5k
ZWNyeXB0KFNlY3JldEtleSxDaXBoZXJUZXh0KTogIiArCgkJCSAgIO+7vyAgICAgICAgICAgICAg
Y2lwaGVydGV4dCk7CgoJ77u/ICAgICAgUGxhaW5UZXh0IHBsYWludGV4dCA9IG51bGw7Cgnvu78g
ICAgICBib29sZWFuIGNhdWdodEV4Y2VwdGlvbiA9IGZhbHNlOwoJ77u/ICAgICAgaW50IHByb2dy
ZXNzTWFyayA9IDA7Cgnvu78gICAgICB0cnkgewoJICAgIO+7vyAgICAgICAgICAvLyBGaXJzdCB3
ZSB2YWxpZGF0ZSB0aGUgTUFDLgoJCe+7vyAgICAgICAgICBib29sZWFuIHZhbGlkID0gQ3J5cHRv
SGVscGVyLmlzQ2lwaGVyVGV4dE1BQ3ZhbGlkKGtleSwgY2lwaGVydGV4dCk7CgkgICAg77u/ICAg
ICAgICAgIGlmICggIXZhbGlkICkgewoJCe+7vyAgICAgICAgICAgICAgdHJ5IHsKCQkgICAg77u/
ICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBnb2luZyB0byBmYWlsLCBidXQgd2Ugd2FudCB0
aGUgc2FtZSBwcm9jZXNzaW5nCgkJCe+7vyAgICAgICAgICAgICAgICAgIC8vIHRvIG9jY3VyIGFz
IG11Y2ggYXMgcG9zc2libGUgc28gYXMgdG8gcHJldmVudCB0aW1pbmcKCQkJ77u/ICAgICAgICAg
ICAgICAgICAgLy8gYXR0YWNrcy4gV2UgX2NvdWxkXyBqdXN0IGJlIHNhdGlzZmllZCBieSB0aGUg
YWRkaXRpb25hbAoJCQnvu78gICAgICAgICAgICAgICAgICAvLyBzbGVlcCBpbiB0aGUgJ2ZpbmFs
bHknIGNsYXVzZSwgYnV0IGFuIGF0dGFja2VyIG9uIHRoZQoJCQnvu78gICAgICAgICAgICAgICAg
ICAvLyBzYW1lIHNlcnZlciB3aG8gY2FuIHJ1biBzb21ldGhpbmcgbGlrZSAncHMnIGNhbiB0ZWxs
CgkJCe+7vyAgICAgICAgICAgICAgICAgIC8vIENQVSB0aW1lIHZlcnN1cyB3aGVuIHRoZSBwcm9j
ZXNzIGlzIHNsZWVwaW5nLiBIZW5jZSB3ZQoJCQnvu78gICAgICAgICAgICAgICAgICAvLyB0cnkg
dG8gbWFrZSB0aGlzIGFzIGNsb3NlIGFzIHBvc3NpYmxlLiBTaW5jZSB3ZSBrbm93CgkJCe+7vyAg
ICAgICAgICAgICAgICAgIC8vIGl0IGlzIGdvaW5nIHRvIGZhaWwsIHdlIGlnbm9yZSB0aGUgcmVz
dWx0IGFuZCBpZ25vcmUKCQkJ77u/ICAgICAgICAgICAgICAgICAgLy8gdGhlIChleHBlY3RlZCkg
ZXhjZXB0aW9uLgoJCQnvu78gICAgICAgICAgICAgICAgICBoYW5kbGVEZWNyeXB0aW9uKGtleSwg
Y2lwaGVydGV4dCk7IC8vIElnbm9yZSByZXR1cm4gKHNob3VsZCBmYWlsKS4KCQkgICAg77u/ICAg
ICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewoJCSAgICDvu78gICAgICAgICAgICAg
ICAgICA7ICAgLy8gSWdub3JlCgkJICAgIO+7vyAgICAgICAgICAgICAgfQoJCe+7vyAgICAgICAg
ICAgICAgdGhyb3cgbmV3IEVuY3J5cHRpb25FeGNlcHRpb24oREVDUllQVElPTl9GQUlMRUQsCgkJ
CQkJCQkgICAg77u/ICAgICAgICAgICAgICAgICAgICAgICJEZWNyeXB0aW9uIGZhaWxlZCBiZWNh
dXNlIE1BQyBpbnZhbGlkIGZvciAiICsKCQkJCQkJCSAgICDvu78gICAgICAgICAgICAgICAgICAg
ICAgY2lwaGVydGV4dCk7CgkJ77u/ICAgICAgICAgIH0KCSAgICDvu78gICAgICAgICAgcHJvZ3Jl
c3NNYXJrKys7CgkgICAg77u/ICAgICAgICAgIC8vIFRoZSBkZWNyeXB0aW9uIG9ubHkgY291bnRz
IGlmIHRoZSBNQUMgd2FzIHZhbGlkLgoJCe+7vyAgICAgICAgICBwbGFpbnRleHQgPSBoYW5kbGVE
ZWNyeXB0aW9uKGtleSwgY2lwaGVydGV4dCk7CgkgICAg77u/ICAgICAgICAgIHByb2dyZXNzTWFy
aysrOwoJICAgIO+7vyAgICAgIH0gY2F0Y2goRW5jcnlwdGlvbkV4Y2VwdGlvbiBleCkgewoJICAg
IO+7vyAgICAgICAgICBjYXVnaHRFeGNlcHRpb24gPSB0cnVlOwoJICAgIO+7vyAgICAgICAgICBT
dHJpbmcgbG9nTXNnID0gbnVsbDsKCSAgICDvu78gICAgICAgICAgc3dpdGNoKCBwcm9ncmVzc01h
cmsgKSB7CgkJ77u/ICAgICAgICAgIGNhc2UgMToKCQnvu78gICAgICAgICAgICAgIGxvZ01zZyA9
ICJEZWNyeXB0aW9uIGZhaWxlZCBiZWNhdXNlIE1BQyBpbnZhbGlkLiBTZWUgbG9nZ2VkIGV4Y2Vw
dGlvbiBmb3IgZGV0YWlscy4iOwoJCe+7vyAgICAgICAgICAgICAgYnJlYWs7CgkJ77u/ICAgICAg
ICAgIGNhc2UgMjoKCQnvu78gICAgICAgICAgICAgIGxvZ01zZyA9ICJEZWNyeXB0aW9uIGZhaWxl
ZCBiZWNhdXNlIGhhbmRsZURlY3J5cHRpb24oKSBmYWlsZWQuIFNlZSBsb2dnZWQgZXhjZXB0aW9u
IGZvciBkZXRhaWxzLiI7CgkJ77u/ICAgICAgICAgICAgICBicmVhazsKCQnvu78gICAgICAgICAg
ZGVmYXVsdDoKCQnvu78gICAgICAgICAgICAgIGxvZ01zZyA9ICJQcm9ncmFtbWluZyBlcnJvcjog
dW5leHBlY3RlZCBwcm9ncmVzcyBtYXJrID09ICIgKyBwcm9ncmVzc01hcms7CgkJ77u/ICAgICAg
ICAgIGJyZWFrOwoJCe+7vyAgICAgICAgICB9CgkgICAg77u/ICAgICAgICAgIGxvZ2dlci5lcnJv
cihMb2dnZXIuU0VDVVJJVFlfRkFJTFVSRSwgbG9nTXNnKTsKCSAgICDvu78gICAgICAgICAgdGhy
b3cgZXg7ICAgICAgICAgICAvLyBSZS10aHJvdwoJICAgIO+7vyAgICAgIH0KCe+7vyAgICAgIGZp
bmFsbHkgewoJICAgIO+7vyAgICAgICAgICBpZiAoIGNhdWdodEV4Y2VwdGlvbiApIHsKCQnvu78g
ICAgICAgICAgICAgIC8vIFRoZSByZXN0IG9mIHRoaXMgY29kZSBpcyB0byB0cnkgdG8gYWNjb3Vu
dCBmb3IgYW55IG1pbnV0ZSBkaWZmZXJlbmNlcwoJCSAgICDvu78gICAgICAgICAgICAgIC8vIGlu
IHRoZSB0aW1lIGl0IG1pZ2h0IHRha2UgZm9yIHRoZSB2YXJpb3VzIHJlYXNvbnMgdGhhdCBkZWNy
eXB0aW9uIGZhaWxzCgkJICAgIO+7vyAgICAgICAgICAgICAgLy8gaW4gb3JkZXIgdG8gcHJldmVu
dCBhbnkgb3RoZXIgcG9zc2libGUgdGltaW5nIGF0dGFja3MuIFBlcmhhcHMgaXQgaXMKCQkgICAg
77u/ICAgICAgICAgICAgICAvLyBnb2luZyBvdmVyYm9hcmQuIElmIG5vdGhpbmcgZWxzZSwgaWYg
Tl9TRUNTIGlzIGxhcmdlIGVub3VnaCwgaXQgbWlnaHQKCQkgICAg77u/ICAgICAgICAgICAgICAv
LyBkZXRlciBhdHRlbXB0ZWQgcmVwZWF0ZWQgYXR0YWNrcyBieSBtYWtpbmcgdGhlbSB0YWtlIG11
Y2ggbG9uZ2VyLgoJCSAgICDvu78gICAgICAgICAgICAgIGxvbmcgbm93ID0gU3lzdGVtLm5hbm9U
aW1lKCk7CgkJ77u/ICAgICAgICAgICAgICBsb25nIGVsYXBzZWQgPSBub3cgLSBzdGFydDsKCQnv
u78gICAgICAgICAgICAgIGZpbmFsIGxvbmcgTkFOT1NFQ1NfSU5fU0VDID0gMTAwMDAwMDAwMEw7
IC8vIG5hbm9zZWMgaXMgMTAqKi05IHNlYwoJCe+7vyAgICAgICAgICAgICAgbG9uZyBuU2VjcyA9
IE5fU0VDUyAqIE5BTk9TRUNTX0lOX1NFQzsgIC8vIE4gc2Vjb25kcyBpbiBuYW5vIHNlY29uZHMK
CQnvu78gICAgICAgICAgICAgIGlmICggZWxhcHNlZCA8IG5TZWNzICkgewoJCSAgICDvu78gICAg
ICAgICAgICAgICAgICAvLyBXYW50IHRvIHNsZWVwIHNvIHRvdGFsIHRpbWUgdGFrZW4gaXMgTiBz
ZWNvbmRzLgoJCQnvu78gICAgICAgICAgICAgICAgICBsb25nIGV4dHJhU2xlZXAgPSBuU2VjcyAt
IGVsYXBzZWQ7CgoJCSAgICDvu78gICAgICAgICAgICAgICAgICAvLyAnZXh0cmFTbGVlcCcgaXMg
aW4gbmFub3NlY29uZHMuIE5lZWQgdG8gY29udmVydCB0byBhIG1pbGxpc2VjCgkJCe+7vyAgICAg
ICAgICAgICAgICAgIC8vIHBhcnQgYW5kIG5hbm9zZWMgcGFydC4gTmFub3NlYyBpcyAxMCoqLTks
IG1pbGxzZWMgaXMKCQkJ77u/ICAgICAgICAgICAgICAgICAgLy8gMTAqKi0zLCBzbyBkaXZpZGUg
YnkgKDEwKiotOSAvIDEwKiotMyksIG9yIDEwKio2IHRvCgkJCe+7vyAgICAgICAgICAgICAgICAg
IC8vIGNvbnZlcnQgdG8gZnJvbSBuYW5vc2Vjb25kcyB0byBtaWxsaXNlY29uZHMuCgkJCe+7vyAg
ICAgICAgICAgICAgICAgIGxvbmcgbWlsbGlzID0gZXh0cmFTbGVlcCAvIDEwMDAwMDBMOwoJCSAg
ICDvu78gICAgICAgICAgICAgICAgICBsb25nIG5hbm9zICA9IChleHRyYVNsZWVwIC0gKG1pbGxp
cyAqIDEwMDAwMDBMKSk7CgkJICAgIO+7vyAgICAgICAgICAgICAgICAgIGFzc2VydCBuYW5vcyA+
PSAwICYmIG5hbm9zIDw9IEludGVnZXIuTUFYX1ZBTFVFIDoKCQkgICAgIk5hbm9zZWNzIG91dCBv
ZiBib3VuZHM7IG5hbm9zID0gIiArIG5hbm9zOwoJCSAgICDvu78gICAgICAgICAgICAgICAgICB0
cnkgewoJCQnvu78gICAgICAgICAgICAgICAgICAgICAgVGhyZWFkLnNsZWVwKG1pbGxpcywgKGlu
dCluYW5vcyk7CgkJCe+7vyAgICAgICAgICAgICAgICAgIH0gY2F0Y2goSW50ZXJydXB0ZWRFeGNl
cHRpb24gZXgpIHsKCQkJ77u/ICAgICAgICAgICAgICAgICAgICAgIDsgICAvLyBJZ25vcmUKCQkJ
77u/ICAgICAgICAgICAgICAgICAgfQoJCSAgICDvu78gICAgICAgICAgICAgIH0gLy8gRWxzZSAu
Li4gdGltZSBhbHJlYWR5IGV4Y2VlZHMgTl9TRUNTIHNlYywgc28gZG8gbm90IHNsZWVwLgoJCe+7
vyAgICAgICAgICB9CgkgICAg77u/ICAgICAgfQoJ77u/ICAgICAgcmV0dXJuIHBsYWludGV4dDsK
Ce+7vyAgfQoKICAgIC8vIEhhbmRsZSB0aGUgYWN0dWFsIGRlY3J5cHRpb24gcG9ydGlvbi4gQXQg
dGhpcyBwb2ludCBpdCBpcyBhc3N1bWVkIHRoYXQKICAgIC8vIGFueSBNQUMgaGFzIGFscmVhZHkg
YmVlbiB2YWxpZGF0ZWQuIChCdXQgc2VlICJESVNDVVNTIiBpc3N1ZSwgYmVsb3cuKQogICAgcHJp
dmF0ZSBQbGFpblRleHQgaGFuZGxlRGVjcnlwdGlvbihTZWNyZXRLZXkga2V5LCBDaXBoZXJUZXh0
IGNpcGhlcnRleHQpCgl0aHJvd3MgRW5jcnlwdGlvbkV4Y2VwdGlvbgogICAgewoJaW50IGtleVNp
emUgPSAwOwoJdHJ5IHsKCSAgICBDaXBoZXIgZGVjcnlwdGVyID0gQ2lwaGVyLmdldEluc3RhbmNl
KGNpcGhlcnRleHQuZ2V0Q2lwaGVyVHJhbnNmb3JtYXRpb24oKSk7CgkgICAga2V5U2l6ZSA9IGtl
eS5nZXRFbmNvZGVkKCkubGVuZ3RoICogODsgIC8vIENvbnZlcnQgdG8gIyBiaXRzCgoJICAgIC8v
IFVzaW5nIGNpcGhlciBtb2RlIHRoYXQgc3VwcG9ydHMgKmJvdGgqIGNvbmZpZGVudGlhbGl0eSAq
YW5kKiBhdXRoZW50aWNpdHk/IElmIHNvLCB0aGVuCgkgICAgLy8gdXNlIHRoZSBzcGVjaWZpZWQg
U2VjcmV0S2V5IGFzLWlzIHJhdGhlciB0aGFuIGNvbXB1dGluZyBhIGRlcml2ZWQga2V5IGZyb20g
aXQuIFdlIGFsc28KCSAgICAvLyBkb24ndCBleHBlY3QgYSBzZXBhcmF0ZSBNQUMgaW4gdGhlIHNw
ZWNpZmllZCBDaXBoZXJUZXh0IG9iamVjdCBzbyB0aGVyZWZvcmUgZG9uJ3QgdHJ5CgkgICAgLy8g
dG8gdmFsaWRhdGUgaXQuCgkgICAgYm9vbGVhbiBwcmVmZXJyZWRDaXBoZXJNb2RlID0gQ3J5cHRv
SGVscGVyLmlzQ29tYmluZWRDaXBoZXJNb2RlKCBjaXBoZXJ0ZXh0LmdldENpcGhlck1vZGUoKSAp
OwoJICAgIFNlY3JldEtleSBlbmNLZXkgPSBudWxsOwoJICAgIGlmICggcHJlZmVycmVkQ2lwaGVy
TW9kZSApIHsKCQllbmNLZXkgPSBrZXk7CgkgICAgfSBlbHNlIHsKCQkvLyBUT0RPOiBQRVJGT1JN
QU5DRTogQ2FsY3VsYXRlIGF2ZyB0aW1lIHRoaXMgdGFrZXMgYW5kIGNvbnNpZGVyIGNhY2hpbmcg
Zm9yIHZlcnkgc2hvcnQgaW50ZXJ2YWwKCQkvLyAgICAgICAoZS5nLiwgMiB0byA1IHNlYyB0b3Bz
KS4gT3RoZXJ3aXNlIGRvaW5nIGxvdHMgb2YgZW5jcnlwdGlvbnMgaW4gYSBsb29wIGNvdWxkIHRh
a2UgYSBMT1QgbG9uZ2VyLgoJCS8vICAgICAgIEJ1dCByZW1lbWJlciBKb24gQmVudGxleSdzICJS
dWxlICMxIG9uIHBlcmZvcm1hbmNlOiBGaXJzdCBtYWtlIGl0IHJpZ2h0LCB0aGVuIG1ha2UgaXQg
ZmFzdC4iCgkJ77u/ICAvL++7vyAg77u/ICAgVGhpcyB3b3VsZCBiZSBhIHNlY3VyaXR5IHRyYWRl
LW9mZiBhcyBpdCB3b3VsZCBsZWF2ZSBrZXlzIGluIG1lbW9yeSBhIGJpdCBsb25nZXIsIHNvIGl0
CgkJICAgIO+7vyAgLy/vu78gIO+7vyAgIHNob3VsZCBwcm9iYWJseSBiZSBvZmYgYnkgZGVmYXVs
dCBhbmQgY29udHJvbGxlZCB2aWEgYSBwcm9wZXJ0eS4KCQkgICAgZW5jS2V5ID0gY29tcHV0ZURl
cml2ZWRLZXkoIGNpcGhlcnRleHQuZ2V0S0RGVmVyc2lvbigpLCBjaXBoZXJ0ZXh0LmdldEtERl9Q
UkYoKSwKCQkJCQkJ77u/ICDvu78gICAgICAgICAgICAgICAgICAgICAga2V5LCBrZXlTaXplLCAi
ZW5jcnlwdGlvbiIpOwoJICAgIH0KCSAgICBpZiAoIGNpcGhlcnRleHQucmVxdWlyZXNJVigpICkg
ewoJCWRlY3J5cHRlci5pbml0KENpcGhlci5ERUNSWVBUX01PREUsIGVuY0tleSwgbmV3IEl2UGFy
YW1ldGVyU3BlYyhjaXBoZXJ0ZXh0LmdldElWKCkpKTsKCSAgICB9IGVsc2UgewoJCWRlY3J5cHRl
ci5pbml0KENpcGhlci5ERUNSWVBUX01PREUsIGVuY0tleSk7CgkgICAgfQoJICAgIGJ5dGVbXSBv
dXRwdXQgPSBkZWNyeXB0ZXIuZG9GaW5hbChjaXBoZXJ0ZXh0LmdldFJhd0NpcGhlclRleHQoKSk7
CgkgICAgcmV0dXJuIG5ldyBQbGFpblRleHQob3V0cHV0KTsKCgl9IGNhdGNoIChJbnZhbGlkS2V5
RXhjZXB0aW9uIGlrZSkgewoJICAgIHRocm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0aW9uKERFQ1JZ
UFRJT05fRkFJTEVELCAiTXVzdCBpbnN0YWxsIEpDRSBVbmxpbWl0ZWQgU3RyZW5ndGggSnVyaXNk
aWN0aW9uIFBvbGljeSBGaWxlcyBmcm9tIFN1biIsIGlrZSk7Cgl9IGNhdGNoIChOb1N1Y2hBbGdv
cml0aG1FeGNlcHRpb24gZSkgewoJICAgIHRocm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0aW9uKERF
Q1JZUFRJT05fRkFJTEVELCAiSW52YWxpZCBhbGdvcml0aG0gZm9yIGF2YWlsYWJsZSBKQ0UgcHJv
dmlkZXJzIC0gIiArCgkJCQkJICBjaXBoZXJ0ZXh0LmdldENpcGhlclRyYW5zZm9ybWF0aW9uKCkg
KyAiOiAiICsgZS5nZXRNZXNzYWdlKCksIGUpOwoJfSBjYXRjaCAoTm9TdWNoUGFkZGluZ0V4Y2Vw
dGlvbiBlKSB7CgkgICAgdGhyb3cgbmV3IEVuY3J5cHRpb25FeGNlcHRpb24oREVDUllQVElPTl9G
QUlMRUQsICJJbnZhbGlkIHBhZGRpbmcgc2NoZW1lICgiICsKCQkJCQkgIGNpcGhlcnRleHQuZ2V0
UGFkZGluZ1NjaGVtZSgpICsgIikgZm9yIGNpcGhlciB0cmFuc2Zvcm1hdGlvbiAiICsgY2lwaGVy
dGV4dC5nZXRDaXBoZXJUcmFuc2Zvcm1hdGlvbigpICsKCQkJCQkgICI6ICIgKyBlLmdldE1lc3Nh
Z2UoKSwgZSk7Cgl9IGNhdGNoIChJbnZhbGlkQWxnb3JpdGhtUGFyYW1ldGVyRXhjZXB0aW9uIGUp
IHsKCSAgICB0aHJvdyBuZXcgRW5jcnlwdGlvbkV4Y2VwdGlvbihERUNSWVBUSU9OX0ZBSUxFRCwg
IkRlY3J5cHRpb24gcHJvYmxlbTogIiArIGUuZ2V0TWVzc2FnZSgpLCBlKTsKCX0gY2F0Y2ggKEls
bGVnYWxCbG9ja1NpemVFeGNlcHRpb24gZSkgewoJICAgIHRocm93IG5ldyBFbmNyeXB0aW9uRXhj
ZXB0aW9uKERFQ1JZUFRJT05fRkFJTEVELCAiRGVjcnlwdGlvbiBwcm9ibGVtOiAiICsgZS5nZXRN
ZXNzYWdlKCksIGUpOwoJfSBjYXRjaCAoQmFkUGFkZGluZ0V4Y2VwdGlvbiBlKSB7CgkgICAgLy9E
SVNDVVNTOiBUaGlzIG5lZWRzIGZpeGVkLiBBbHJlYWR5IHZhbGlkYXRlZCBNQUMgaW4gQ3J5cHRv
SGVscGVyLmlzQ2lwaGVyVGV4dE1BQ3ZhbGlkKCkgYWJvdmUuCgkgICAgLy9TbyBvbmx5IHdheSB3
ZSBjb3VsZCBnZXQgYSBwYWRkaW5nIGV4Y2VwdGlvbiBpcyBpZiBpbnZhbGlkIHBhZGRpbmcgd2Vy
ZSB1c2VkIG9yaWdpbmFsbHkgYnkKCSAgICAvL3RoZSBwYXJ0eSBkb2luZyB0aGUgZW5jcnlwdGlv
bi4gKFRoaXMgbWlnaHQgaGFwcGVuIHdpdGggYSBidWdneSBwYWRkaW5nIHNjaGVtZSBmb3IgaW5z
dGFuY2UuKQoJICAgIC8vSXQgKnNlZW1zKiBoYXJtbGVzcyB0aG91Z2gsIHNvIHdpbGwgbGVhdmUg
aXQgZm9yIG5vdywgYW5kIHRlY2huaWNhbGx5LCB3ZSBuZWVkIHRvIGVpdGhlciBjYXRjaCBpdAoJ
ICAgIC8vb3IgZGVjbGFyZSBpdCBpbiBhIHRocm93cyBjbGFzcy4gQ2xlYXJseSB3ZSBkb24ndCB3
YW50IHRvIGRvIHRoZSBsYXRlci4gVGhpcyBzaG91bGQgYmUgZGlzY3Vzc2VkCgkgICAgLy9kdXJp
bmcgYSBjb2RlIGluc3BlY3Rpb24uCgkgICAgU2VjcmV0S2V5IGF1dGhLZXk7CgkgICAgdHJ5IHsK
CQlhdXRoS2V5ID0gY29tcHV0ZURlcml2ZWRLZXkoIGNpcGhlcnRleHQuZ2V0S0RGVmVyc2lvbigp
LCBjaXBoZXJ0ZXh0LmdldEtERl9QUkYoKSwKCQkJCQkgICAgIO+7vyAg77u/ICAgICAgICAgICAg
ICAgICAgICAgICBrZXksIGtleVNpemUsICJhdXRoZW50aWNpdHkiKTsKCSAgICB9IGNhdGNoIChF
eGNlcHRpb24gZTEpIHsKCQl0aHJvdyBuZXcgRW5jcnlwdGlvbkV4Y2VwdGlvbihERUNSWVBUSU9O
X0ZBSUxFRCwKCQkJCQkgICAgICAiRGVjcnlwdGlvbiBwcm9ibGVtIC0tIGZhaWxlZCB0byBjb21w
dXRlIGRlcml2ZWQga2V5IGZvciBhdXRoZW50aWNpdHk6ICIgKyBlMS5nZXRNZXNzYWdlKCksIGUx
KTsKCSAgICB9CgkgICAgYm9vbGVhbiBzdWNjZXNzID0gY2lwaGVydGV4dC52YWxpZGF0ZU1BQygg
YXV0aEtleSApOwoJICAgIGlmICggc3VjY2VzcyApIHsKCQl0aHJvdyBuZXcgRW5jcnlwdGlvbkV4
Y2VwdGlvbihERUNSWVBUSU9OX0ZBSUxFRCwgIkRlY3J5cHRpb24gcHJvYmxlbTogIiArIGUuZ2V0
TWVzc2FnZSgpLCBlKTsKCSAgICB9IGVsc2UgewoJCXRocm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0
aW9uKERFQ1JZUFRJT05fRkFJTEVELAoJCQkJCSAgICAgICJEZWNyeXB0aW9uIHByb2JsZW06IFdB
Uk5JTkc6IEFkdmVyc2FyeSBtYXkgaGF2ZSB0YW1wZXJlZCB3aXRoICIgKwoJCQkJCSAgICAgICJD
aXBoZXJUZXh0IG9iamVjdCBvckNpcGhlclRleHQgb2JqZWN0IG1hbmdsZWQgaW4gdHJhbnNpdDog
IiArIGUuZ2V0TWVzc2FnZSgpLCBlKTsKCSAgICB9Cgl9CiAgICB9CiAgICDvu78gIAoJ77u/ICAv
KioKCSAgICAg77u/ICAqIHtAaW5oZXJpdERvY30KCSAgICAg77u/ICAqLwoJ77u/ICBwdWJsaWMg
U3RyaW5nIHNpZ24oU3RyaW5nIGRhdGEpIHRocm93cyBFbmNyeXB0aW9uRXhjZXB0aW9uIHsKCe+7
vyAg77u/ICB0cnkgewoJICAgIO+7vyAg77u/ICDvu78gIFNpZ25hdHVyZSBzaWduZXIgPSBTaWdu
YXR1cmUuZ2V0SW5zdGFuY2Uoc2lnbmF0dXJlQWxnb3JpdGhtKTsKCSAgICDvu78gIO+7vyAg77u/
ICBzaWduZXIuaW5pdFNpZ24ocHJpdmF0ZUtleSk7CgkgICAg77u/ICDvu78gIO+7vyAgc2lnbmVy
LnVwZGF0ZShkYXRhLmdldEJ5dGVzKGVuY29kaW5nKSk7CgkgICAg77u/ICDvu78gIO+7vyAgYnl0
ZVtdIGJ5dGVzID0gc2lnbmVyLnNpZ24oKTsKCSAgICDvu78gIO+7vyAg77u/ICByZXR1cm4gRVNB
UEkuZW5jb2RlcigpLmVuY29kZUZvckJhc2U2NChieXRlcywgZmFsc2UpOwoJICAgIO+7vyAg77u/
ICB9IGNhdGNoIChJbnZhbGlkS2V5RXhjZXB0aW9uIGlrZSkgewoJICAgIO+7vyAg77u/ICDvu78g
IHRocm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0aW9uKCJFbmNyeXB0aW9uIGZhaWx1cmUiLCAiTXVz
dCBpbnN0YWxsIHVubGltaXRlZCBzdHJlbmd0aCBjcnlwdG8gZXh0ZW5zaW9uIGZyb20gU3VuIiwg
aWtlKTsKCSAgICDvu78gIO+7vyAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKCSAgICDvu78gIO+7
vyAg77u/ICB0aHJvdyBuZXcgRW5jcnlwdGlvbkV4Y2VwdGlvbigiU2lnbmF0dXJlIGZhaWx1cmUi
LCAiQ2FuJ3QgZmluZCBzaWduYXR1cmUgYWxnb3JpdGhtICIgKyBzaWduYXR1cmVBbGdvcml0aG0s
IGUpOwoJICAgIO+7vyAg77u/ICB9Cgnvu78gIH0KICAgIO+7vyAg77u/ICAKCe+7vyAgLyoqCgkg
ICAgIO+7vyAgKiB7QGluaGVyaXREb2N9CgkgICAgIO+7vyAgKi8KCe+7vyAgcHVibGljIGJvb2xl
YW4gdmVyaWZ5U2lnbmF0dXJlKFN0cmluZyBzaWduYXR1cmUsIFN0cmluZyBkYXRhKSB7Cgnvu78g
IO+7vyAgdHJ5IHsKCSAgICDvu78gIO+7vyAg77u/ICBieXRlW10gYnl0ZXMgPSBFU0FQSS5lbmNv
ZGVyKCkuZGVjb2RlRnJvbUJhc2U2NChzaWduYXR1cmUpOwoJICAgIO+7vyAg77u/ICDvu78gIFNp
Z25hdHVyZSBzaWduZXIgPSBTaWduYXR1cmUuZ2V0SW5zdGFuY2Uoc2lnbmF0dXJlQWxnb3JpdGht
KTsKCSAgICDvu78gIO+7vyAg77u/ICBzaWduZXIuaW5pdFZlcmlmeShwdWJsaWNLZXkpOwoJICAg
IO+7vyAg77u/ICDvu78gIHNpZ25lci51cGRhdGUoZGF0YS5nZXRCeXRlcyhlbmNvZGluZykpOwoJ
ICAgIO+7vyAg77u/ICDvu78gIHJldHVybiBzaWduZXIudmVyaWZ5KGJ5dGVzKTsKCSAgICDvu78g
IO+7vyAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKCSAgICDvu78gIO+7vyAgICAgIC8vIE5PVEU6
IEVuY3J5cHRpb25FeGNlcHRpb24gY29uc3RydWN0ZWQgKm9ubHkqIGZvciBzaWRlLWVmZmVjdCBv
ZiBjYXVzaW5nIGxvZ2dpbmcuCgkJ77u/ICDvu78gICAgICAvLyBGaW5kQnVncyBjb21wbGFpbnMg
YWJvdXQgdGhpcyBhbmQgc2luY2UgaXQgZXhhbWluZXMgYnl0ZS1jb2RlLCB0aGVyZSdzIG5vIHdh
eSB0bwoJCe+7vyAg77u/ICAgICAgLy8gc2h1dCBpdCB1cC4KCQnvu78gIO+7vyAg77u/ICBuZXcg
RW5jcnlwdGlvbkV4Y2VwdGlvbigiSW52YWxpZCBzaWduYXR1cmUiLCAiUHJvYmxlbSB2ZXJpZnlp
bmcgc2lnbmF0dXJlOiAiICsgZS5nZXRNZXNzYWdlKCksIGUpOwoJICAgIO+7vyAg77u/ICDvu78g
IHJldHVybiBmYWxzZTsKCSAgICDvu78gIO+7vyAgfQoJ77u/ICB9CgogICAg77u/ICAvKioKCSDv
u78gICoge0Bpbmhlcml0RG9jfQoJICoKCSAqIEBwYXJhbSBleHBpcmF0aW9uCgkgKiBAdGhyb3dz
IEludGVncml0eUV4Y2VwdGlvbgoJICovCgnvu78gIHB1YmxpYyBTdHJpbmcgc2VhbChTdHJpbmcg
ZGF0YSwgbG9uZyBleHBpcmF0aW9uKSB0aHJvd3MgSW50ZWdyaXR5RXhjZXB0aW9uIHsKCe+7vyAg
ICAgIGlmICggZGF0YSA9PSBudWxsICkgewoJICAgIO+7vyAgICAgICAgICB0aHJvdyBuZXcgSWxs
ZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJEYXRhIHRvIGJlIHNlYWxlZCBtYXkgbm90IGJlIG51bGwu
Iik7CgkgICAg77u/ICAgICAgfQoJ77u/ICAgICAgCgkgICAg77u/ICDvu78gIHRyeSB7CgkgICAg
77u/ICDvu78gICAgICBTdHJpbmcgYjY0ZGF0YSA9IG51bGw7CgkgICAgdHJ5IHsKCQliNjRkYXRh
ID0gRVNBUEkuZW5jb2RlcigpLmVuY29kZUZvckJhc2U2NChkYXRhLmdldEJ5dGVzKCJVVEYtOCIp
LCBmYWxzZSk7CgkgICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7
CgkJOyAvLyBJZ25vcmU7IHNob3VsZCBuZXZlciBoYXBwZW4gc2luY2UgVVRGLTggYnVpbHQgaW50
byBydC5qYXIKCSAgICB9CgkgICAg77u/ICDvu78gIO+7vyAgLy8gbWl4IGluIHNvbWUgcmFuZG9t
IGRhdGEgc28gZXZlbiBpZGVudGljYWwgZGF0YSBhbmQgdGltZXN0YW1wIHByb2R1Y2VzIGRpZmZl
cmVudCBzZWFscwoJCe+7vyAg77u/ICDvu78gIFN0cmluZyBub25jZSA9IEVTQVBJLnJhbmRvbWl6
ZXIoKS5nZXRSYW5kb21TdHJpbmcoMTAsIEVuY29kZXJDb25zdGFudHMuQ0hBUl9BTFBIQU5VTUVS
SUNTKTsKCSAgICDvu78gIO+7vyAg77u/ICBTdHJpbmcgcGxhaW50ZXh0ID0gZXhwaXJhdGlvbiAr
ICI6IiArIG5vbmNlICsgIjoiICsgYjY0ZGF0YTsKCSAgICDvu78gIO+7vyAg77u/ICAvLyBhZGQg
aW50ZWdyaXR5IGNoZWNrOyBzaWduYXR1cmUgaXMgYWxyZWFkeSBiYXNlNjQgZW5jb2RlZC4KCQnv
u78gIO+7vyAg77u/ICBTdHJpbmcgc2lnID0gdGhpcy5zaWduKCBwbGFpbnRleHQgKTsKCSAgICDv
u78gIO+7vyAg77u/ICBDaXBoZXJUZXh0IGNpcGhlcnRleHQgPSB0aGlzLmVuY3J5cHQoIG5ldyBQ
bGFpblRleHQocGxhaW50ZXh0ICsgIjoiICsgc2lnKSApOwoJICAgIO+7vyAg77u/ICDvu78gIFN0
cmluZyBzZWFsZWREYXRhID0gRVNBUEkuZW5jb2RlcigpLmVuY29kZUZvckJhc2U2NChjaXBoZXJ0
ZXh0LmFzUG9ydGFibGVTZXJpYWxpemVkQnl0ZUFycmF5KCksIGZhbHNlKTsKCSAgICDvu78gIO+7
vyAg77u/ICByZXR1cm4gc2VhbGVkRGF0YTsKCSAgICDvu78gIO+7vyAgfSBjYXRjaCggRW5jcnlw
dGlvbkV4Y2VwdGlvbiBlICkgewoJICAgIO+7vyAg77u/ICDvu78gIHRocm93IG5ldyBJbnRlZ3Jp
dHlFeGNlcHRpb24oIGUuZ2V0VXNlck1lc3NhZ2UoKSwgZS5nZXRMb2dNZXNzYWdlKCksIGUgKTsK
CSAgICDvu78gIO+7vyAgfQoJ77u/ICB9CgogICAg77u/ICAvKioKCSDvu78gICoge0Bpbmhlcml0
RG9jfQoJIO+7vyAgKi8KCe+7vyAgcHVibGljIFN0cmluZyB1bnNlYWwoU3RyaW5nIHNlYWwpIHRo
cm93cyBFbmNyeXB0aW9uRXhjZXB0aW9uIHsKCe+7vyAg77u/ICBQbGFpblRleHQgcGxhaW50ZXh0
ID0gbnVsbDsKCe+7vyAg77u/ICB0cnkgewoJICAgIO+7vyAg77u/ICAgICAgYnl0ZVtdIGVuY3J5
cHRlZEJ5dGVzID0gRVNBUEkuZW5jb2RlcigpLmRlY29kZUZyb21CYXNlNjQoc2VhbCk7CgkgICAg
77u/ICDvu78gICAgICBDaXBoZXJUZXh0IGNpcGhlclRleHQgPSBudWxsOwoJICAgIO+7vyAg77u/
ICAgICAgdHJ5IHsKCQnvu78gIO+7vyAgICAgICAgICBjaXBoZXJUZXh0ID0gQ2lwaGVyVGV4dC5m
cm9tUG9ydGFibGVTZXJpYWxpemVkQnl0ZXMoZW5jcnlwdGVkQnl0ZXMpOwoJCe+7vyAg77u/ICAg
ICAgfSBjYXRjaCggQXNzZXJ0aW9uRXJyb3IgZSkgewoJCe+7vyAgICAgICAgICAgICAgLy8gU29t
ZSBvZiB0aGUgdGVzdHMgaW4gRW5jcnlwdG9yVGVzdC50ZXN0VmVyaWZ5U2VhbCgpIGFyZSBleGFt
cGxlcyBvZgoJCSAgICDvu78gIO+7vyAgICAgICAgICAvLyB0aGlzIGlmIGFzc2VydGlvbnMgYXJl
IGVuYWJsZWQuCgkJICAgIO+7vyAg77u/ICAgICAgICAgIHRocm93IG5ldyBFbmNyeXB0aW9uRXhj
ZXB0aW9uKCJJbnZhbGlkIHNlYWwiLAoJCQkJCQkJICAgICAg77u/ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VhbCBwYXNzZWQgZ2FyYmFyZ2UgZGF0YSByZXN1
bHRpbmcgaW4gQXNzZXJ0aW9uRXJyb3I6ICIgKyBlKTsKCQnvu78gICAgICAgICAgfQoJICAgIO+7
vyAg77u/ICDvu78gIHBsYWludGV4dCA9IHRoaXMuZGVjcnlwdChjaXBoZXJUZXh0KTsKCgkgICAg
77u/ICDvu78gIO+7vyAgU3RyaW5nW10gcGFydHMgPSBwbGFpbnRleHQudG9TdHJpbmcoKS5zcGxp
dCgiOiIpOwoJICAgIO+7vyAg77u/ICDvu78gIGlmIChwYXJ0cy5sZW5ndGggIT0gNCkgewoJCe+7
vyAg77u/ICDvu78gIO+7vyAgdGhyb3cgbmV3IEVuY3J5cHRpb25FeGNlcHRpb24oIkludmFsaWQg
c2VhbCIsICJTZWFsIHdhcyBub3QgZm9ybWF0dGVkIHByb3Blcmx5LiIpOwoJCe+7vyAg77u/ICDv
u78gIH0KCSAgICDvu78gIAoJCe+7vyAg77u/ICDvu78gIFN0cmluZyB0aW1lc3RyaW5nID0gcGFy
dHNbMF07CgkgICAg77u/ICDvu78gIO+7vyAgbG9uZyBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUo
KTsKCSAgICDvu78gIO+7vyAg77u/ICBsb25nIGV4cGlyYXRpb24gPSBMb25nLnBhcnNlTG9uZyh0
aW1lc3RyaW5nKTsKCSAgICDvu78gIO+7vyAg77u/ICBpZiAobm93ID4gZXhwaXJhdGlvbikgewoJ
Ce+7vyAg77u/ICDvu78gIO+7vyAgdGhyb3cgbmV3IEVuY3J5cHRpb25FeGNlcHRpb24oIkludmFs
aWQgc2VhbCIsICJTZWFsIGV4cGlyYXRpb24gZGF0ZSBvZiAiICsgbmV3IERhdGUoZXhwaXJhdGlv
bikgKyAiIGhhcyBwYXN0LiIpOwoJCe+7vyAg77u/ICDvu78gIH0KCSAgICDvu78gIO+7vyAg77u/
ICBTdHJpbmcgbm9uY2UgPSBwYXJ0c1sxXTsKCSAgICDvu78gIO+7vyAg77u/ICBTdHJpbmcgYjY0
ZGF0YSA9IHBhcnRzWzJdOwoJICAgIO+7vyAg77u/ICDvu78gIFN0cmluZyBzaWcgPSBwYXJ0c1sz
XTsKCSAgICDvu78gIO+7vyAg77u/ICBpZiAoIXRoaXMudmVyaWZ5U2lnbmF0dXJlKHNpZywgdGlt
ZXN0cmluZyArICI6IiArIG5vbmNlICsgIjoiICsgYjY0ZGF0YSApICkgewoJCe+7vyAg77u/ICDv
u78gIO+7vyAgdGhyb3cgbmV3IEVuY3J5cHRpb25FeGNlcHRpb24oIkludmFsaWQgc2VhbCIsICJT
ZWFsIGludGVncml0eSBjaGVjayBmYWlsZWQiKTsKCQnvu78gIO+7vyAg77u/ICB977u/ICAKCQkJ
ICAg77u/ICDvu78gIO+7vyAgcmV0dXJuIG5ldyBTdHJpbmcoRVNBUEkuZW5jb2RlcigpLmRlY29k
ZUZyb21CYXNlNjQoYjY0ZGF0YSksICJVVEYtOCIpOwoJICAgIO+7vyAg77u/ICB9IGNhdGNoIChF
bmNyeXB0aW9uRXhjZXB0aW9uIGUpIHsKCSAgICDvu78gIO+7vyAg77u/ICB0aHJvdyBlOwoJICAg
IO+7vyAg77u/ICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewoJICAgIO+7vyAg77u/ICDvu78gIHRo
cm93IG5ldyBFbmNyeXB0aW9uRXhjZXB0aW9uKCJJbnZhbGlkIHNlYWwiLCAiSW52YWxpZCBzZWFs
OiIgKyBlLmdldE1lc3NhZ2UoKSwgZSk7CgkgICAg77u/ICDvu78gIH0KCe+7vyAgfQoKICAgIO+7
vyAgCgnvu78gIC8qKgoJICAgICDvu78gICoge0Bpbmhlcml0RG9jfQoJICAgICDvu78gICovCgnv
u78gIHB1YmxpYyBib29sZWFuIHZlcmlmeVNlYWwoIFN0cmluZyBzZWFsICkgewoJ77u/ICDvu78g
IHRyeSB7CgkgICAg77u/ICDvu78gIO+7vyAgdW5zZWFsKCBzZWFsICk7CgkgICAg77u/ICDvu78g
IO+7vyAgcmV0dXJuIHRydWU7CgkgICAg77u/ICDvu78gIH0gY2F0Y2goIEVuY3J5cHRpb25FeGNl
cHRpb24gZSApIHsKCSAgICDvu78gIO+7vyAg77u/ICByZXR1cm4gZmFsc2U7CgkgICAg77u/ICDv
u78gIH0KCe+7vyAgfQogICAg77u/ICAKCe+7vyAgLyoqCgkgICAgIO+7vyAgKiB7QGluaGVyaXRE
b2N9CgkgICAgIO+7vyAgKi8KCe+7vyAgcHVibGljIGxvbmcgZ2V0VGltZVN0YW1wKCkgewoJ77u/
ICDvu78gIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKCe+7vyAgfQoKICAgIO+7vyAgLyoq
Cgkg77u/ICAqIHtAaW5oZXJpdERvY30KCSDvu78gICovCgnvu78gIHB1YmxpYyBsb25nIGdldFJl
bGF0aXZlVGltZVN0YW1wKCBsb25nIG9mZnNldCApIHsKCe+7vyAg77u/ICByZXR1cm4gbmV3IERh
dGUoKS5nZXRUaW1lKCkgKyBvZmZzZXQ7Cgnvu78gIH0KCiAgICDvu78gIC8vIERJU0NVU1M6IFdo
eSBleHBlcmltZW50YWw/IFdvdWxkIGhhdmUgdG8gYmUgYWRkZWQgdG8gRW5jcnlwdG9yIGludGVy
ZmFjZQoJ77u/ICAvL++7vyAg77u/ICDvu78gIGJ1dCBvbmx5IDMgdGhpbmdzIEkgc2F3IHdyb25n
IHdpdGggdGhpcyB3YXMgMSkgaXQgdXNlZCBITWFjTUQ1IGluc3RlYWQKCe+7vyAgLy/vu78gIO+7
vyAg77u/ICBvZiBITWFjU0hBMSAoc2VlIGRpc2N1c3Npb24gYmVsb3cpLCAyKSB0aGF0IHRoZSBI
TWFjIGtleSBpcyB0aGUKCe+7vyAgLy/vu78gIO+7vyAg77u/ICBzYW1lIG9uZSB1c2VkIGZvciBl
bmNyeXB0aW9uIChhbHNvIHNlZSBjb21tZW50cyksIGFuZCAzKSBpdCBjYXVnaHQKCe+7vyAgLy/v
u78gIO+7vyAg77u/ICBvdmVybHkgYnJvYWQgZXhjZXB0aW9ucy4gSGVyZSBpdCBpcyB3aXRoIHRo
ZXNlIHNwZWNpZmljIGFyZWFzCgnvu78gIC8v77u/ICDvu78gIO+7vyAgYWRkcmVzc2VkLCBidXQg
bm8gdW5pdCB0ZXN0aW5nIGhhcyBiZWVuIGRvbmUgYXQgdGhpcyBwb2ludC4gLWt3dwogICAgLyoq
CiAgICAgKiBDb21wdXRlIGFuIEhNQUMgZm9yIGEgU3RyaW5nLiAgRXhwZXJpbWVudGFsLgogICAg
ICogQHBhcmFtIGlucHV077u/ICBUaGUgaW5wdXQgZm9yIHdoaWNoIHRvIGNvbXB1dGUgdGhlIEhN
YWMuCiAgICAgKi8KICAgIC8qKioqKioqKioqKioqKioqKioqKgog77u/ICBwdWJsaWMgU3RyaW5n
IGNvbXB1dGVITUFDKCBTdHJpbmcgaW5wdXQgKSB0aHJvd3MgRW5jcnlwdGlvbkV4Y2VwdGlvbiB7
CiDvu78gIO+7vyAgdHJ5IHsKIO+7vyAg77u/ICDvu78gIE1hYyBobWFjID0gTWFjLmdldEluc3Rh
bmNlKCJITWFjU0hBMSIpOyAvLyBESVNDVVNTOiBDaGFuZ2VkIHRvIEhNYWNTSEExLiBNRDUgKmJh
ZGx5KiBicm9rZW4KIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78g
IO+7vyAg77u/ICDvu78gICAgIC8vICAgICAgICAgIFNIQTEgc2hvdWxkIHJlYWxseSBiZSBhdm9p
ZGVkLCBidXQgdXNpbmcKIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDv
u78gIO+7vyAg77u/ICDvu78gICAgIC8v77u/ICDvu78gICAgIGZvciBITUFDLVNIQTEgaXMgYWNj
ZXB0YWJsZSBmb3Igbm93LiBQbGFuCiDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78g
IO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICAgICAvL++7vyAg77u/ICAgICB0byBtaWdyYXRlIHRv
IFNIQS0yNTYgb3IgTklTVCByZXBsYWNlbWVudCBmb3IKIO+7vyAg77u/ICDvu78gIO+7vyAg77u/
ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gICAgIC8v77u/ICDvu78gICAgIFNI
QTEgaW4gbm90IHRvbyBkaXN0YW50IGZ1dHVyZS4KIO+7vyAg77u/ICDvu78gIC8vIERJU0NVU1M6
IEFsc28gbm90IHJlY29tbWVuZGVkIHRoYXQgdGhlIEhNYWMga2V5IGlzIHRoZSBzYW1lIGFzIHRo
ZSBvbmUKIO+7vyAg77u/ICDvu78gIC8v77u/ICDvu78gIO+7vyAgdXNlZCBmb3IgZW5jcnlwdGlv
biAobmFtZWx5LCBFbmNyeXB0b3IuTWFzdGVyS2V5KS4gSWYgYW55dGhpbmcgaXQKIO+7vyAg77u/
ICDvu78gIC8v77u/ICDvu78gIO+7vyAgd291bGQgYmUgYmV0dGVyIHRvIHVzZSBFbmNyeXB0b3Iu
TWFzdGVyU2FsdCBmb3IgdGhlIEhNYWMga2V5LCBvcgog77u/ICDvu78gIO+7vyAgLy/vu78gIO+7
vyAg77u/ICBwZXJoYXBzIGEgZGVyaXZlZCBrZXkgYmFzZWQgb24gdGhlIG1hc3RlciBzYWx0LiAo
T25lIGNvdWxkIHVzZQog77u/ICDvu78gIO+7vyAgLy/vu78gIO+7vyAg77u/ICBLZXlEZXJpdmF0
aW9uRnVuY3Rpb24uY29tcHV0ZURlcml2ZWRLZXkoKS4pCiDvu78gIO+7vyAg77u/ICAvLwog77u/
ICDvu78gIO+7vyAgYnl0ZVtdIHNhbHQgPSBFU0FQSS5zZWN1cml0eUNvbmZpZ3VyYXRpb24oKS5n
ZXRNYXN0ZXJTYWx0KCk7CiDvu78gIO+7vyAg77u/ICBobWFjLmluaXQoIG5ldyBTZWNyZXRLZXlT
cGVjKHNhbHQsICJITWFjU0hBMSIpICk777u/ICAvLyBXYXM677u/ICBobWFjLmluaXQoc2VjcmV0
S2V5U3BlYynvu78gIAog77u/ICDvu78gIO+7vyAgYnl0ZVtdIGluQnl0ZXM7CiDvu78gIO+7vyAg
77u/ICB0cnkgewog77u/ICDvu78gIO+7vyAg77u/ICBpbkJ5dGVzID0gaW5wdXQuZ2V0Qnl0ZXMo
IlVURi04Iik7CiDvu78gIO+7vyAg77u/ICB9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhj
ZXB0aW9uIGUpIHsKIO+7vyAg77u/ICDvu78gIO+7vyAgbG9nZ2VyLndhcm5pbmcoTG9nZ2VyLlNF
Q1VSSVRZX0ZBSUxVUkUsICJjb21wdXRlSE1BQygpOiBDYW4ndCBmaW5kIFVURi04IGVuY29kaW5n
OyB1c2luZyBkZWZhdWx0IGVuY29kaW5nIiwgZSk7CiDvu78gIO+7vyAg77u/ICDvu78gIGluQnl0
ZXMgPSBpbnB1dC5nZXRCeXRlcygpOwog77u/ICDvu78gIO+7vyAgfQog77u/ICDvu78gIO+7vyAg
Ynl0ZVtdIGJ5dGVzID0gaG1hYy5kb0ZpbmFsKCBpbkJ5dGVzICk7CiDvu78gIO+7vyAg77u/ICBy
ZXR1cm4gRVNBUEkuZW5jb2RlcigpLmVuY29kZUZvckJhc2U2NChieXRlcywgZmFsc2UpOwog77u/
ICDvu78gIH0gY2F0Y2ggKEludmFsaWRLZXlFeGNlcHRpb24gaWtlKSB7CiDvu78gIO+7vyAg77u/
ICB0aHJvdyBuZXcgRW5jcnlwdGlvbkV4Y2VwdGlvbigiRW5jcnlwdGlvbiBmYWlsdXJlIiwgIk11
c3QgaW5zdGFsbCB1bmxpbWl0ZWQgc3RyZW5ndGggY3J5cHRvIGV4dGVuc2lvbiBmcm9tIFN1biIs
IGlrZSk7CiDvu78gICAgICB9IGNhdGNoIChOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24gZSkgewog
77u/ICAgICAg77u/ICB0aHJvdyBuZXcgRW5jcnlwdGlvbkV4Y2VwdGlvbigiQ291bGQgbm90IGNv
bXB1dGUgSE1BQyIsICJDYW4ndCBmaW5kIEhNYWNTSEExIGFsZ29yaXRobS4gIiArCiDvu78gICAg
ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg
77u/ICDvu78gIO+7vyAg77u/ICAiUHJvYmxlbSBjb21wdXRpbmcgSE1BQyBmb3IgIiArIGlucHV0
LCBlICk7CiDvu78gICAgICB9CiDvu78gIH0KICAgICoqKioqKioqKioqKioqKioqKioqLwoKICAg
IC8qKgogICAgICogTG9nIGEgc2VjdXJpdHkgd2FybmluZyBldmVyeSBOdGggdGltZSBvbmUgb2Yg
dGhlIGRlcHJlY2F0ZWQgZW5jcnlwdCBvcgogICAgICogZGVjcnlwdCBtZXRob2RzIGFyZSBjYWxs
ZWQuICgnTicgaXMgaGFyZC1jb2RlZCB0byBiZSAyNSBieSBkZWZhdWx0LCBidXQKICAgICAqIG1h
eSBiZSBjaGFuZ2VkIHZpYSB0aGUgc3lzdGVtIHByb3BlcnR5CiAgICAgKiB7QGNvZGUgRVNBUEku
RW5jcnlwdG9yLndhcm5FdmVyeU50aFVzZX0uKSBJbiBvdGhlciB3b3Jkcywgd2UgbmFnCiAgICAg
KiB0aGVtIHVudGlsIHRoZSBnaXZlIGluIGFuZCBjaGFuZ2UgaXQuIDstKQogICAgICoKICAgICAq
IEBwYXJhbSB3aGVyZSBUaGUgc3RyaW5nICJlbmNyeXB0IiBvciAiZGVjcnlwdCIsIGNvcnJlc3Bv
bmRpbmcgdG8gdGhlCiAgICAgKiAgICAgICAgICAgICAgbWV0aG9kIHRoYXQgaXMgYmVpbmcgbG9n
Z2VkLgogICAgICogQHBhcmFtIG1zZyAgIFRoZSBtZXNzYWdlIHRvIGxvZy4KICAgICAqLwoJcHJp
dmF0ZSB2b2lkIGxvZ1dhcm5pbmcoU3RyaW5nIHdoZXJlLCBTdHJpbmcgbXNnKSB7CglpbnQgY291
bnRlciA9IDA7CglpZiAoIHdoZXJlLmVxdWFscygiZW5jcnlwdCIpICkgewoJICAgIGNvdW50ZXIg
PSBlbmNyeXB0Q291bnRlcisrOwoJICAgIHdoZXJlID0gIkphdmFFbmNyeXB0b3IuZW5jcnlwdCgp
OiBbY291bnQ9IiArIGNvdW50ZXIgKyJdIjsKCX0gZWxzZSBpZiAoIHdoZXJlLmVxdWFscygiZGVj
cnlwdCIpICkgewoJICAgIGNvdW50ZXIgPSBkZWNyeXB0Q291bnRlcisrOwoJICAgIHdoZXJlID0g
IkphdmFFbmNyeXB0b3IuZGVjcnlwdCgpOiBbY291bnQ9IiArIGNvdW50ZXIgKyJdIjsKCX0gZWxz
ZSB7CgkgICAgd2hlcmUgPSAiSmF2YUVuY3J5cHRvcjogVW5rbm93biBtZXRob2Q6ICI7Cgl9Cgkv
LyBXZSBsb2cgdGhlIHZlcnkgZmlyc3QgdGltZSAobm90ZSB0aGUgdXNlIG9mIHBvc3QtaW5jcmVt
ZW50IG9uIHRoZQoJLy8gY291bnRlcnMpIGFuZCB0aGVuIGV2ZXJ5IE50aCB0aW1lIHRoZXJlYWZ0
ZXIuIExvZ2dpbmcgZXZlcnkgc2luZ2xlCgkvLyB0aW1lIGlzIGxpa2VseSB0byBiZSB3YXkgdG9v
IG11Y2ggbG9nZ2luZy4KCWlmICggKGNvdW50ZXIgJSBsb2dFdmVyeU50aFVzZSkgPT0gMCApIHsK
CSAgICBsb2dnZXIud2FybmluZyhMb2dnZXIuU0VDVVJJVFlfRkFJTFVSRSwgd2hlcmUgKyBtc2cp
OwoJfQogICAgfQoKICAgIHByaXZhdGUgS2V5RGVyaXZhdGlvbkZ1bmN0aW9uLlBSRl9BTEdPUklU
SE1TIGdldFBSRihTdHJpbmcgbmFtZSkgeyAgICDvu78gIAoJICAgIO+7vyAg77u/ICBTdHJpbmcg
cHJmTmFtZSA9IG51bGw7Cgnvu78gIO+7vyAgaWYgKCBuYW1lID09IG51bGwgKSB7CgkgICAg77u/
ICDvu78gIO+7vyAgcHJmTmFtZSA9IEVTQVBJLnNlY3VyaXR5Q29uZmlndXJhdGlvbigpLmdldEtE
RlBzZXVkb1JhbmRvbUZ1bmN0aW9uKCk7CgkgICAg77u/ICDvu78gIH0gZWxzZSB7CgkgICAg77u/
ICDvu78gIO+7vyAgcHJmTmFtZSA9IG5hbWU7CgkgICAg77u/ICDvu78gIH0KCe+7vyAg77u/ICBL
ZXlEZXJpdmF0aW9uRnVuY3Rpb24uUFJGX0FMR09SSVRITVMgcHJmID0gS2V5RGVyaXZhdGlvbkZ1
bmN0aW9uLmNvbnZlcnROYW1lVG9QUkYocHJmTmFtZSk7Cgnvu78gIO+7vyAgcmV0dXJuIHByZjsK
ICAgIH0KCiAgICBwcml2YXRlIEtleURlcml2YXRpb25GdW5jdGlvbi5QUkZfQUxHT1JJVEhNUyBn
ZXREZWZhdWx0UFJGKCkgewoJ77u/ICDvu78gIFN0cmluZyBwcmZOYW1lID0gRVNBUEkuc2VjdXJp
dHlDb25maWd1cmF0aW9uKCkuZ2V0S0RGUHNldWRvUmFuZG9tRnVuY3Rpb24oKTsKCe+7vyAg77u/
ICByZXR1cm4gZ2V0UFJGKHByZk5hbWUpOwogICAgfQoKICAgIC8vIFByaXZhdGUgaW50ZXJmYWNl
IHRvIGNhbGwgRVNBUEkncyBLREYgdG8gZ2V0IGtleSBmb3IgZW5jcnlwdGlvbiBvciBhdXRoZW50
aWNpdHkuCiAgICBwcml2YXRlIFNlY3JldEtleSBjb21wdXRlRGVyaXZlZEtleShpbnQga2RmVmVy
c2lvbiwgS2V5RGVyaXZhdGlvbkZ1bmN0aW9uLlBSRl9BTEdPUklUSE1TIHByZiwKCQkJCQnvu78g
IO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICDvu78gIO+7vyAg77u/ICBTZWNyZXRLZXkga2RrLCBp
bnQga2V5U2l6ZSwgU3RyaW5nIHB1cnBvc2UpCgnvu78gIHRocm93cyBOb1N1Y2hBbGdvcml0aG1F
eGNlcHRpb24sIEludmFsaWRLZXlFeGNlcHRpb24sIEVuY3J5cHRpb25FeGNlcHRpb24KICAgIHsK
Ce+7vyAgLy8gVGhlc2UgcmVhbGx5IHNob3VsZCBiZSB0dXJuZWQgaW50byBhY3R1YWwgcnVudGlt
ZSBjaGVja3MgYW5kIGFuCgkgICAg77u/ICAvLyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gc2hv
dWxkIGJlIHRocm93biBpZiB0aGV5IGFyZSB2aW9sYXRlZC4KCSAgICDvu78gIC8vIEJ1dCB0aGlz
IHNob3VsZCBiZSBPSyBzaW5jZSB0aGlzIGlzIGEgcHJpdmF0ZSBtZXRob2QuIEFsc28sIHRoaXMg
bWV0aG9kIHdpbGwKCSAgICDvu78gIC8vIGJlIGNhbGxlZCBxdWl0ZSBvZnRlbiBzbyBhc3NlcnRp
b25zIGFyZSBhIGJpZyB3aW4gYXMgdGhleSBjYW4gYmUgZGlzYWJsZWQgb3IKCSAgICDvu78gIC8v
IGVuYWJsZWQgYXQgd2lsbC4KCSAgICDvu78gIGFzc2VydCBwcmYgIT0gbnVsbCA6ICJQc2V1ZG8g
UmFuZG9tIEZ1bmN0aW9uIGZvciBLREYgY2Fubm90IGJlIG51bGwiOwoJ77u/ICBhc3NlcnQga2Rr
ICE9IG51bGwgOiAiS2V5IGRlcml2YXRpb24ga2V5IGNhbm5vdCBiZSBudWxsLiI7Cgnvu78gIC8v
IFdlIHdvdWxkIGNob29zZSBhIGxhcmdlciBtaW5pbXVtIGtleSBzaXplLCBidXQgd2Ugd2FudCB0
byBiZQoJICAgIO+7vyAgLy8gYWJsZSB0byBhY2NlcHQgREVTIGZvciBsZWdhY3kgZW5jcnlwdGlv
biBuZWVkcy4gTklTVCBzYXlzIDExMi1iaXRzIGlzIG1pbi4gSWYgbGVzcyB0aGFuIHRoYXQsCgkg
ICAg77u/ICAvLyB3ZSBwcmludCB3YXJuaW5nLgoJICAgIO+7vyAgYXNzZXJ0IGtleVNpemUgPj0g
NTYgOiAiS2V5IGhhcyBzaXplIG9mICIgKyBrZXlTaXplICsgIiwgd2hpY2ggaXMgbGVzcyB0aGFu
IG1pbmltdW0gb2YgNTYtYml0cy4iOwoJ77u/ICBhc3NlcnQgKGtleVNpemUgJSA4KSA9PSAwIDog
IktleSBzaXplICgiICsga2V5U2l6ZSArICIpIG11c3QgYmUgYSBldmVuIG11bHRpcGxlIG9mIDgt
Yml0cy4iOwoJ77u/ICBhc3NlcnQgcHVycG9zZSAhPSBudWxsIDogIlB1cnBvc2UgY2Fubm90IGJl
IG51bGwuIFNob3VsZCBiZSAnZW5jcnlwdGlvbicgb3IgJ2F1dGhlbnRpY2l0eScuIjsKCe+7vyAg
YXNzZXJ0IHB1cnBvc2UuZXF1YWxzKCJlbmNyeXB0aW9uIikgfHwgcHVycG9zZS5lcXVhbHMoImF1
dGhlbnRpY2l0eSIpIDoKCe+7vyAg77u/ICAiUHVycG9zZSBtdXN0IGJlIFwiZW5jcnlwdGlvblwi
IG9yIFwiYXV0aGVudGljaXR5XCIuIjsKCgnvu78gIEtleURlcml2YXRpb25GdW5jdGlvbiBrZGYg
PSBuZXcgS2V5RGVyaXZhdGlvbkZ1bmN0aW9uKHByZik7Cgnvu78gIGlmICgga2RmVmVyc2lvbiAh
PSAwICkgewoJICAgIO+7vyAg77u/ICBrZGYuc2V0VmVyc2lvbihrZGZWZXJzaW9uKTsKCSAgICDv
u78gIH0KCe+7vyAgcmV0dXJuIGtkZi5jb21wdXRlRGVyaXZlZEtleShrZGssIGtleVNpemUsIHB1
cnBvc2UpOwogICAgfQoKICAgIC8vIEdldCBhbGwgdGhlIGFsZ29yaXRobXMgd2Ugd2lsbCBiZSB1
c2luZyBmcm9tIEVTQVBJLnByb3BlcnRpZXMuCiAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHNldHVw
QWxnb3JpdGhtcygpIHsKCS8vIHNldHVwIGFsZ29yaXRobXMKCWVuY3J5cHRBbGdvcml0aG0gPSBF
U0FQSS5zZWN1cml0eUNvbmZpZ3VyYXRpb24oKS5nZXRFbmNyeXB0aW9uQWxnb3JpdGhtKCk7Cglz
aWduYXR1cmVBbGdvcml0aG0gPSBFU0FQSS5zZWN1cml0eUNvbmZpZ3VyYXRpb24oKS5nZXREaWdp
dGFsU2lnbmF0dXJlQWxnb3JpdGhtKCk7CglyYW5kb21BbGdvcml0aG0gPSBFU0FQSS5zZWN1cml0
eUNvbmZpZ3VyYXRpb24oKS5nZXRSYW5kb21BbGdvcml0aG0oKTsKCWhhc2hBbGdvcml0aG0gPSBF
U0FQSS5zZWN1cml0eUNvbmZpZ3VyYXRpb24oKS5nZXRIYXNoQWxnb3JpdGhtKCk7CgloYXNoSXRl
cmF0aW9ucyA9IEVTQVBJLnNlY3VyaXR5Q29uZmlndXJhdGlvbigpLmdldEhhc2hJdGVyYXRpb25z
KCk7CgllbmNvZGluZyA9IEVTQVBJLnNlY3VyaXR5Q29uZmlndXJhdGlvbigpLmdldENoYXJhY3Rl
ckVuY29kaW5nKCk7CgllbmNyeXB0aW9uS2V5TGVuZ3RoID0gRVNBUEkuc2VjdXJpdHlDb25maWd1
cmF0aW9uKCkuZ2V0RW5jcnlwdGlvbktleUxlbmd0aCgpOwoJc2lnbmF0dXJlS2V5TGVuZ3RoID0g
RVNBUEkuc2VjdXJpdHlDb25maWd1cmF0aW9uKCkuZ2V0RGlnaXRhbFNpZ25hdHVyZUtleUxlbmd0
aCgpOwogICAgfQoKICAgIC8vIFNldCB1cCBzaWduaW5nIGtleSBwYWlyIHVzaW5nIHRoZSBtYXN0
ZXIgcGFzc3dvcmQgYW5kIHNhbHQuIENhbGxlZCAob25jZSkKICAgIC8vIGZyb20gdGhlIEphdmFF
bmNyeXB0b3IgQ1RPUi4KICAgIHByaXZhdGUgc3RhdGljIHZvaWQgaW5pdEtleVBhaXIoU2VjdXJl
UmFuZG9tIHBybmcpIHRocm93cyBOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24gewoJU3RyaW5nIHNp
Z0FsZyA9IHNpZ25hdHVyZUFsZ29yaXRobS50b0xvd2VyQ2FzZSgpOwoJaWYgKCBzaWdBbGcuZW5k
c1dpdGgoIndpdGhkc2EiKSApIHsKCSAgICAvLwoJICAgIC8vIEFkbWl0dGVkbHksIHRoaXMgaXMg
YSBrbHVkZ2UuIEhvd2V2ZXIgZm9yIFN1biBKQ0UsIGV2ZW4gdGhvdWdoCgkgICAgLy8gIlNIQTF3
aXRoRFNBIiBpcyBhIHZhbGlkIHNpZ25hdHVyZSBhbGdvcml0aG0gbmFtZSwgaWYgb25lIGNhbGxz
CgkgICAgLy8gICAgICBLZXlQYWlyR2VuZXJhdG9yIGtwZyA9IEtleVBhaXJHZW5lcmF0b3IuZ2V0
SW5zdGFuY2UoIlNIQTF3aXRoRFNBIik7CgkgICAgLy8gdGhhdCB3aWxsIHRocm93IGEgTm9TdWNo
QWxnb3JpdGhtRXhjZXB0aW9uIHdpdGggYW4gZXhjZXB0aW9uCgkgICAgLy8gbWVzc2FnZSBvZiAi
U0hBMXdpdGhEU0EgS2V5UGFpckdlbmVyYXRvciBub3QgYXZhaWxhYmxlIi4gU2luY2UKCSAgICAv
LyBTSEExd2l0aERTQSBhbmQgRFNBIGtleXMgc2hvdWxkIGJlIGlkZW50aWNhbCwgd2UgdXNlICJE
U0EiCgkgICAgLy8gaW4gdGhlIGNhc2UgdGhhdCBTSEExd2l0aERTQSBvciBTSEF3aXRoRFNBIHdh
cyBzcGVjaWZpZWQuIFRoaXMgaXMKCSAgICAvLyBhbGwganVzdCB0byBtYWtlIHRoZXNlIDIgd29y
ayBhcyBleHBlY3RlZC4gU2lnaC4gKE5vdGU6CgkgICAgLy8gdGhpcyB3YXMgdGVzdGVkIHdpdGgg
SkRLIDEuNi4wXzIxLCBidXQgbGlrZWx5IGZhaWxzIHdpdGggZWFybGllcgoJICAgIC8vIHZlcnNp
b25zIG9mIHRoZSBKREsgYXMgd2VsbC4pCgkgICAgLy8KCSAgICBzaWdBbGcgPSAiRFNBIjsKCX0g
ZWxzZSBpZiAoIHNpZ0FsZy5lbmRzV2l0aCgid2l0aHJzYSIpICkgewoJICAgIC8vIERpdHRvIGZv
ciBSU0EuCgkgICAgc2lnQWxnID0gIlJTQSI7Cgl9CglLZXlQYWlyR2VuZXJhdG9yIGtleUdlbiA9
IEtleVBhaXJHZW5lcmF0b3IuZ2V0SW5zdGFuY2Uoc2lnQWxnKTsKCWtleUdlbi5pbml0aWFsaXpl
KHNpZ25hdHVyZUtleUxlbmd0aCwgcHJuZyk7CglLZXlQYWlyIHBhaXIgPSBrZXlHZW4uZ2VuZXJh
dGVLZXlQYWlyKCk7Cglwcml2YXRlS2V5ID0gcGFpci5nZXRQcml2YXRlKCk7CglwdWJsaWNLZXkg
PSBwYWlyLmdldFB1YmxpYygpOwogICAgfQp9Cgo=
--bcaec5485cf871279404af367d27
Content-Type: text/x-c++src; charset=UTF-8; name="efbbbf-strip.cpp"
Content-Disposition: attachment; filename="efbbbf-strip.cpp"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gtqdod1f1

Ly8gZysrIC1nIC1PMiBlZmJiYmYtc3RyaXAuY3BwIC1vIGVmYmJiZi1zdHJpcC5leGUKCiNpbmNs
dWRlIDxpb3N0cmVhbT4KdXNpbmcgc3RkOjpjb3V0Owp1c2luZyBzdGQ6OmNlcnI7CnVzaW5nIHN0
ZDo6ZW5kbDsKdXNpbmcgc3RkOjppb3NfYmFzZTsKCiNpbmNsdWRlIDxmc3RyZWFtPgp1c2luZyBz
dGQ6Omlmc3RyZWFtOwp1c2luZyBzdGQ6Om9mc3RyZWFtOwoKI2luY2x1ZGUgPHN0cmluZz4KdXNp
bmcgc3RkOjpzdHJpbmc7CgojaW5jbHVkZSA8Y3N0cmluZz4KdXNpbmcgc3RkOjpzdHJsZW47Cgpz
dGF0aWMgY29uc3Qgc3RyaW5nIEVGQkJCRiA9IHN0cmluZygiXHhlZlx4YmJceGJmIik7CnN0YXRp
YyBjb25zdCB1bnNpZ25lZCBpbnQgRUZCQkJGX0xFTiA9IDM7Cgpib29sIFN0cmlwKGNvbnN0IGNo
YXIqIGZpbGVuYW1lKTsKCmludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCnsKICBpZihh
cmdjID09IDEpCiAgewogICAgY2VyciA8PCAiU3RyaXBzIHRleHQgZmlsZXMgb2YgVVRGLTggYnl0
ZSBvcmRlciBtYXJrcyAoQk9NKSBpbiBwbGFjZS4iIDw8IGVuZGw7CiAgICBjZXJyIDw8ICIgIFVz
YWdlOiBlZmJiYmYtc3RyaXAuZXhlIDx0ZXh0IGZpbGU+IFs8dGV4dCBmaWxlPiDigKZdIiA8PCBl
bmRsOwogICAgcmV0dXJuIDE7CiAgfQoKICBmb3IodW5zaWduZWQgaW50IGkgPSAxOyBpIDwgKHVu
c2lnbmVkIGludClhcmdjOyBpKyspCiAgewogICAgU3RyaXAoYXJndltpXSk7CiAgfQp9Cgpib29s
IFN0cmlwKGNvbnN0IGNoYXIqIGZpbGVuYW1lKQp7CiAgaWYgKCAhZmlsZW5hbWUgfHwgMCA9PSBz
dHJsZW4oZmlsZW5hbWUpICkKICAgIHJldHVybiBmYWxzZTsKCiAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogIC8vIFJlYWQgdGhlIGZp
bGUKICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCgogIGlmc3RyZWFtIGlmaWxlKGZpbGVuYW1lKTsKICBpZiggIWlmaWxlLmdvb2QoKSAp
CiAgewogICAgY2VyciA8PCAiVW5hYmxlIHRvIG9wZW4gIiA8PCBmaWxlbmFtZSA8PCAiIGZvciBy
ZWFkaW5nIiA8PCBlbmRsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KICAKICAvLyBSZXNlcnZlIHNp
emUgdG8gc2F2ZSBvbiBhbGxvY2F0aW9ucwogIGlmaWxlLnNlZWtnKDAsIGlvc19iYXNlOjplbmQp
OwogIGlmKCAhaWZpbGUuZ29vZCgpICkKICB7CiAgICBjZXJyIDw8ICJGYWlsZWQgdG8gc2VlayB0
byBlbmQgb2YgIiA8PCBmaWxlbmFtZSA8PCBlbmRsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAg
c2l6ZV90IGZzaXplID0gaWZpbGUudGVsbGcoKTsKICBpZiggIWlmaWxlLmdvb2QoKSApCiAgewog
ICAgY2VyciA8PCAiRmFpbGVkIHRvIGRldGVybWluZSBzaXplIG9mICIgPDwgZmlsZW5hbWUgPDwg
ZW5kbDsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIGlmaWxlLnNlZWtnKDAsIGlvc19iYXNlOjpi
ZWcpOwogIGlmKCAhaWZpbGUuZ29vZCgpICkKICB7CiAgICBjZXJyIDw8ICJGYWlsZWQgdG8gc2Vl
ayB0byBiZWdpbm5pbmcgb2YgIiA8PCBmaWxlbmFtZSA8PCBlbmRsOwogICAgcmV0dXJuIGZhbHNl
OwogIH0KCiAgc3RyaW5nIHN0ciwgbGluZTsKICBzdHIucmVzZXJ2ZShmc2l6ZSk7CgogIC8vIFJl
YWQgdGhlIGZpbGUgbGluZSBieSBsaW5lLiBOb3Qgc3VyZSB3aHkgcmVhZGluZyBpbiBvbmUgZmVs
bCBzd29vcCBmYWlsZWQuLi4uCiAgd2hpbGUoc3RkOjpnZXRsaW5lKGlmaWxlLCBsaW5lKSkKICB7
CiAgICBzdHIgKz0gbGluZTsKICAgIHN0ciArPSAiXG4iOwoKICAgIGlmKCAhaWZpbGUuZ29vZCgp
ICkKICAgICAgYnJlYWs7CiAgfQoKICBpZmlsZS5jbG9zZSgpOwoKICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgLy8gRml4IHRoZSBm
aWxlCiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwoKICBzaXplX3QgY291bnQgPSAwOwogIHN0cmluZzo6c2l6ZV90eXBlIHBvcyA9IDE7
CiAgd2hpbGUoIChwb3MgPSBzdHIuZmluZChFRkJCQkYsIHBvcykpICE9IHN0cmluZzo6bnBvcyAp
CiAgewogICAgIHN0ci5yZXBsYWNlKHBvcywgRUZCQkJGX0xFTiwgIiIpOwogICAgIGNvdW50Kys7
CiAgfQoKICBpZigwID09IGNvdW50KQogIHsKICAgIGNvdXQgPDwgZmlsZW5hbWUgPDwgIjogbm8g
cmVwbGFjZW1lbnRzIiA8PCBlbmRsOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgLy8gV3Jp
dGUgdGhlIGZpbGUKICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCgogIG9mc3RyZWFtIG9maWxlKGZpbGVuYW1lLCBpb3NfYmFzZTo6b3V0
IHwgaW9zX2Jhc2U6OnRydW5jKTsKICBpZiggIW9maWxlLmdvb2QoKSApCiAgewogICAgY2VyciA8
PCAiVW5hYmxlIHRvIG9wZW4gIiA8PCBmaWxlbmFtZSA8PCAiIGZvciB3cml0aW5nIiA8PCBlbmRs
OwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgb2ZpbGUud3JpdGUoc3RyLmRhdGEoKSwgc3RyLnNp
emUoKSk7CiAgaWYoICFvZmlsZS5nb29kKCkgKQogIHsKICAgIGNlcnIgPDwgIkZhaWxlZCB0byB3
cml0ZSAiIDw8IGZpbGVuYW1lIDw8IGVuZGw7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBvZmls
ZS5jbG9zZSgpOwoKICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCiAgLy8gQm9vayBrZWVwaW5nCiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKICBjb3V0IDw8IGZpbGVuYW1l
IDw8ICI6ICIgPDwgY291bnQgPDwgIiByZXBsYWNlbWVudHMiIDw8IGVuZGw7CiAgcmV0dXJuIHRy
dWU7Cn0KCg==
--bcaec5485cf871279404af367d27--




Acknowledgement sent to noloader@HIDDEN:
New bug report received and forwarded. Copy sent to bug-gnu-emacs@HIDDEN. Full text available.
Report forwarded to bug-gnu-emacs@HIDDEN:
bug#9747; Package emacs. 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: Sat, 25 Mar 2017 01:30:02 UTC

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