[From nobody Sun Nov  8 19:05:06 2026
Received: (at submit) by bugs.debian.org; 8 Nov 2026 16:20:01 +0000
X-Spam-Checker-Version: SpamAssassin 4.0.1-bugs.debian.org_2005_01_02
 (2024-03-25) on buxtehude.debian.org
X-Spam-Level: 
X-Spam-Status: No, score=-4.6 required=4.0 tests=BAYES_00,DKIM_SIGNED,
 DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FOURLA,FREEMAIL_FROM,
 HTML_MESSAGE,MD5_SHA1_SUM,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS
 autolearn=ham autolearn_force=no
 version=4.0.1-bugs.debian.org_2005_01_02
X-Spam-Bayes: score:0.0000 Tokens: new, 292; hammy, 150; neutral, 417; spammy,
 0. spammytokens: hammytokens:0.000-+--trixie, 0.000-+--forky,
 0.000-+--upstreams, 0.000-+--upstream's, 0.000-+--sk:gitlab
Return-path: &lt;automationcanadian@gmail.com&gt;
Received: from mail-ed1-x535.google.com ([2a00:1450:4864:20::535]:43363)
 by buxtehude.debian.org with esmtps
 (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_128_GCM:128)
 (Exim 4.96) (envelope-from &lt;automationcanadian@gmail.com&gt;)
 id 1xQ5ce-006gKd-2D for submit@bugs.debian.org;
 Sun, 08 Nov 2026 16:20:01 +0000
Received: by mail-ed1-x535.google.com with SMTP id
 4fb4d7f45d1cf-6b7245ab5e2so287981a12.1
 for &lt;submit@bugs.debian.org&gt;; Sun, 08 Nov 2026 08:19:59 -0800 (PST)
ARC-Seal: i=1; a=rsa-sha256; t=1794154796; cv=none;
 d=google.com; s=arc-20260327;
 b=AAEaueujtGTh9LTN1rTfXwR9nOUqjy1B58m6oa/8h9lxdq1Y8w11EFVfAqsw2Ell3B
 jfLpKJ5ase8iLBOnv5AKlUi7YmNce/rj7/sUriYeIF2D6o8cMgLylND2opbP0TI6e1w8
 wHCYra8+qg1naOKaQGj6vxBLg/qp89+7uhMkQUvBKEmA29W1kawliqpw0ZKegO1sEd9w
 M3ySboj8AsaBNX2nm1bFH/n6A8WztCt1MOaz2jCLM14h7vtFmHR5bvwZGdgjBrO1CTaa
 bCW85GdS9JXEVgJezJ1DkcKRoN6WIPbvvVpLX4rQuS5xdNf/zLIqgzhT9R01keYOydhX
 MJ3A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;
 s=arc-20260327; 
 h=cc:to:subject:message-id:date:from:mime-version:dkim-signature;
 bh=WQh1CFYSjuToglwx+lMD/LZ49wxhqkHQllMcVU8sVsE=;
 fh=A2sRwp3OZTpylsUVfbqAIkDU6pxsUX201ADw/mnlBH4=;
 b=Vhs5lO9XFh5mslFUZc/S4x+Hg+kGI/XhYmJfPT4Y46fk12iWB/a5pGiRkW3eL5zQ5B
 ixPIY3by43rbxb941cb4ONxc7XZvMmF1QJMfJk56iuktmAE76v3H8P13114GtAZ7eQiE
 FjSZu7WlTpimcgSDcUSw5uu50XeyFuLCh8FSWhx9K46CejxOIauD+9OLJ6I6U8T0NG7U
 7qZ/mHbGAto6OiA4efh1uKEgVrEnj2CBR5u/CWCuRyqMx4HX50OvPsrmqGmW5FU8LIsE
 Yehns+uBQgxHpOvvmihZq0GldrTHkdsDdFRFPMkaVIUMYcba8tcgneeGtLH674FjTzAZ
 5X7A==; darn=bugs.debian.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20260707; t=1794154796; x=1794759596; darn=bugs.debian.org;
 h=content-type:cc:to:subject:message-id:date:from:mime-version:from
 :to:cc:subject:date:message-id:reply-to:content-type;
 bh=WQh1CFYSjuToglwx+lMD/LZ49wxhqkHQllMcVU8sVsE=;
 b=DavPXwMy8iF98uXy2g0OiHqubJ8GrOORbtjeMYnv6/c1uZhfCljZSxspkJzfc1kHD4
 Cc1CdEeSOI1vuPmNVy23siPA89eLCTpdEjYVPVIx8OUh6jy5SSZFjw27sPvuB+k4zph4
 +uRFN+CFhwCW9/eKPyktRKo9WzTZ/LyS6UgPYgVZvk7C0F2hTL4Y6dpTDMgwAtMj2uB1
 8Rys9s5IfgXlJU1oMxpFhMI3VoSytjVYCs3KXS7HNmP9tEP3SbvXV0dObfNmbEdEwwhz
 ReRPRM2exmvpoUF4a783Eowe0tql1ebKoDqH9njGjJhiyfoLvYpul+aOskH18TMTtxLA
 1EBA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20260707; t=1794154796; x=1794759596;
 h=content-type:cc:to:subject:message-id:date:from:mime-version
 :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to:content-type;
 bh=WQh1CFYSjuToglwx+lMD/LZ49wxhqkHQllMcVU8sVsE=;
 b=M7DukKE2nLov4zE2CLgKVMgHKYzPF/ZrHEPysckVRzauMOiw4+xuAzgiyxhbnc7Srk
 Bthek/4lvKI47pNdd98y5ADSgB/jQZSrHaPwjRSeOTAg1H708CwhicPM/gQzSSNTG3zw
 LZdwFmpSEva9648y5OLfJ0yuIwm9niOyF2E/QA3qOKw7wRgZxxHMx3wmESsE/jfUjXNb
 Xy+3tIJ7rOvuAOwNj9yCh4stCxm/f/H7pvr6wzJlmTfrdcDUBYUSWr2ZnAi0nlzBa24w
 R4mVlogbC7834zJQexooRne4ONk5dzcsWE+L9E45pDvQJeKLuyS7ODfErthde7f7/Hni
 g0jQ==
X-Gm-Message-State: APuU4Z/MyVV3VaozwH3N4LhxddHKIG+91BDMijFqfd5hwSl4eydE50p0
 +gT64UdL1TXd+YKabegrj9L9QM4WMmqpjAbufH53yjXRYDnkEekxv4xZlTM667XyviS4RxisMSD
 pqGpk+FOIBLmrmB3QNRLsJnCL1UMNVqM0CQ==
X-Gm-Gg: AYBFou2NLMtzJl2QcCh1RKXVuU2Xql07J1yq9D3f+dfvfJhXVNSDJC99wc6TTiDdvrj
 e3zGnn160pOkCtrAt0Sn+srBhufCX5RBPMo8jWcjsb5AoE2asZfBtZEwsacNQ2YWWsQYE9drV1H
 aZuLnDjYQSQD9ea4Dw0V9IGcL89exjtvwpoJsn4npE1YWRTd1D1+oRxWlZFqU/AyMT//loPKOa9
 kmu3ooy+oZaOlBIcRO/aSK6LKHs8wJwAde+HL0U4Ifdi5e0d/YN7gaGJPfeMmkcg6PZTn9T6pQ5
 B1jM/z2klmyoGIDr+6tCz0Qx49z6hub4w55Ii/wNISozTmDRF6+Gn8SI9P0Z7AH3/ZQFeeq9NGk
 J2VKB20TGv3DwbhouzL876YiwQL5cXB+4qH8QbCIVm9jNTN2aWRRXpSko
X-Received: by 2002:a17:907:6d24:b0:c4c:e91f:e1db with SMTP id
 a640c23a62f3a-c4d527e74e4mr304761966b.25.1794154796568; Sun, 08 Nov 2026
 08:19:56 -0800 (PST)
MIME-Version: 1.0
From: Sumit Verma &lt;automationcanadian@gmail.com&gt;
Date: Sun, 8 Nov 2026 11:19:44 -0500
X-Gm-Features: AclHuK-nWQDWD0w_WMdeWVNVH89Z4R2NoqvQLqh89L0tVU6JJSjInBC8vPjuoQU
Message-ID: &lt;CAHQpNRbwzUAKyqnDusmbDVQn=Q=2xKVYYb7wHEUw8Zo+fm9zXg@mail.gmail.com&gt;
Subject: evolution-data-server: CVE-2026-110777: local files inlined from
 calendar events; backport for 3.56
To: submit@bugs.debian.org
Cc: team@security.debian.org
Content-Type: multipart/mixed; boundary=&quot;00000000000052a8ea065fc63709&quot;
Delivered-To: submit@bugs.debian.org

--00000000000052a8ea065fc63709
Content-Type: multipart/alternative; boundary=&quot;00000000000052a8e9065fc63707&quot;

--00000000000052a8e9065fc63707
Content-Type: text/plain; charset=&quot;UTF-8&quot;

Source: evolution-data-server
Version: 3.56.2-9
Severity: important
Tags: security upstream patch

Hi,

CVE-2026-110777: an event with an ATTACH property using a file URI can
cause a local file to be read and uploaded to the calendar server by
inlining it. The tracker lists this as unfixed and I found no Debian bug
for it.

Upstream fixed it in two commits on the gnome-51 branch: 2515ec687 and
15b3c521d. The second is 3d6d491ea on master, the commit the tracker names,
so the tracker entry shows only the follow-up. The 3.62.1 tag contains only
the first commit, so experimental's 3.62.1-2 may also need the second; I
did not inspect that package.

Attached is one squashed backport that applies to both 3.56.2-9 (forky/sid)
and 3.56.2-0+deb13u1 (trixie) after their patch series, with no fuzz or
offset. Its source changes are the upstream ones; commit 1's lines that
commit 2 removes are dropped, and the test registration in
tests/libecal/test-cal-utils.c moved because 3.56's main() differs. I
compared the added lines against both upstream commits and found none that
are not upstream's. Bookworm's 3.46.4-2 is not covered.

The patch adds public API, with upstream's Since tags left as they are:
libecal: e_cal_util_sanitize_untrusted(),
e_cal_util_sanitize_untrusted_full(), ECalUtilUriNeedsChangeFunc
libedata-cal: e_cal_backend_sanitize_untrusted()
The new functions need adding to the symbols files, which the patch does
not do.

Testing is limited. Upstream's /ECalUtils/SanitizeUntrusted test passes on
both versions, run in a small driver against the patched e-cal-util object.
That function does not exist before the patch, so there is no before/after
comparison. I did not build the full package, and did not reproduce the
file upload. The backend and meta-backend changes were not exercised at run
time, and test-cal-meta-backend was not run.

Regards,
Sumit Verma

--00000000000052a8e9065fc63707
Content-Type: text/html; charset=&quot;UTF-8&quot;
Content-Transfer-Encoding: quoted-printable

&lt;div dir=3D&quot;ltr&quot;&gt;&lt;div&gt;&lt;div dir=3D&quot;auto&quot;&gt;Source: evolution-data-server&lt;br&gt;Ve=
rsion: 3.56.2-9&lt;br&gt;Severity: important&lt;br&gt;Tags: security upstream patch&lt;br&gt;=
&lt;br&gt;Hi,&lt;br&gt;&lt;br&gt;CVE-2026-110777: an event with an ATTACH property using a fi=
le URI can cause a local file to be read and uploaded to the calendar serve=
r by inlining it. The tracker lists this as unfixed and I found no Debian b=
ug for it.&lt;br&gt;&lt;br&gt;Upstream fixed it in two commits on the gnome-51 branch: =
2515ec687 and 15b3c521d. The second is 3d6d491ea on master, the commit the =
tracker names, so the tracker entry shows only the follow-up. The 3.62.1 ta=
g contains only the first commit, so experimental&#39;s 3.62.1-2 may also n=
eed the second; I did not inspect that package.&lt;br&gt;&lt;br&gt;Attached is one squa=
shed backport that applies to both 3.56.2-9 (forky/sid) and 3.56.2-0+deb13u=
1 (trixie) after their patch series, with no fuzz or offset. Its source cha=
nges are the upstream ones; commit 1&#39;s lines that commit 2 removes are =
dropped, and the test registration in tests/libecal/test-cal-utils.c moved =
because 3.56&#39;s main() differs. I compared the added lines against both =
upstream commits and found none that are not upstream&#39;s. Bookworm&#39;s=
 3.46.4-2 is not covered.&lt;br&gt;&lt;br&gt;The patch adds public API, with upstream&amp;#=
39;s Since tags left as they are:&lt;br&gt;libecal: e_cal_util_sanitize_untrusted=
(), e_cal_util_sanitize_untrusted_full(), ECalUtilUriNeedsChangeFunc&lt;br&gt;lib=
edata-cal: e_cal_backend_sanitize_untrusted()&lt;br&gt;The new functions need add=
ing to the symbols files, which the patch does not do.&lt;br&gt;&lt;br&gt;Testing is li=
mited. Upstream&#39;s /ECalUtils/SanitizeUntrusted test passes on both vers=
ions, run in a small driver against the patched e-cal-util object. That fun=
ction does not exist before the patch, so there is no before/after comparis=
on. I did not build the full package, and did not reproduce the file upload=
. The backend and meta-backend changes were not exercised at run time, and =
test-cal-meta-backend was not run.&lt;br&gt;&lt;br&gt;Regards,&lt;br&gt;Sumit Verma&lt;/div&gt;&lt;/di=
v&gt;&lt;/div&gt;

--00000000000052a8e9065fc63707--

--00000000000052a8ea065fc63709
Content-Type: text/x-diff; charset=&quot;US-ASCII&quot;; 
	name=&quot;evolution-data-server-CVE-2026-110777-3.56.patch&quot;
Content-Disposition: attachment; 
	filename=&quot;evolution-data-server-CVE-2026-110777-3.56.patch&quot;
Content-Transfer-Encoding: base64
Content-ID: &lt;&gt;
X-Attachment-Id: 

RGVzY3JpcHRpb246IENhbGVuZGFyOiBsaW1pdCB3aGljaCBsb2NhbCBmaWxlcyBhcmUgaW5saW5l
ZCBpbiBjb21wb25lbnRzCiBBbiBldmVudCB3aXRoIGFuIEFUVEFDSCBwcm9wZXJ0eSB1c2luZyBh
IGZpbGU6Ly8gVVJJIGNvdWxkIGNhdXNlIGEgbG9jYWwKIGZpbGUgdG8gYmUgcmVhZCBhbmQgdXBs
b2FkZWQgdG8gdGhlIGNhbGVuZGFyIHNlcnZlciBieSBpbmxpbmluZyBpdC4gTWFuZ2xlCiBmaWxl
Oi8vIFVSSXMgb2YgY29tcG9uZW50cyBjb21pbmcgZnJvbSB1bnRydXN0ZWQgc291cmNlcyB0byB4
ZmlsZTovLyAoa2VlcGluZwogdGhvc2UgaW4gdGhlIGJhY2tlbmQncyBjYWNoZSBkaXJlY3Rvcnkp
LCBhbmQgcmVmdXNlIHRvIGlubGluZSBwYXRocyBjb250YWluaW5nCiBwYXJ0cyBwcmVmaXhlZCB3
aXRoICIuIiBvciAiZXRjIiBvdXRzaWRlIG9mIHRoZSB0ZW1wb3JhcnkgYW5kIHVzZXIgY2FjaGUK
IGRpcmVjdG9yaWVzLgogLgogQmFja3BvcnRlZCB0byAzLjU2OiBmdW5jdGlvbmFsIGNvZGUgZnJv
bSB0aGUgdHdvIHVwc3RyZWFtIGNvbW1pdHMgYXBwbGllcwogdW5jaGFuZ2VkOyBvbmx5IHRoZSB0
ZXN0IHJlZ2lzdHJhdGlvbiBpbiB0ZXN0cy9saWJlY2FsL3Rlc3QtY2FsLXV0aWxzLmMgaXMKIHJl
c2VhdGVkLCBhcyAzLjU2J3MgbWFpbigpIGRvZXMgbm90IGNvbnRhaW4gdGhlIEluaXRSZWN1clRh
c2sgdGVzdC4KIC4KIFRoaXMgYWRkcyBwdWJsaWMgQVBJOiBlX2NhbF91dGlsX3Nhbml0aXplX3Vu
dHJ1c3RlZCgpLAogZV9jYWxfdXRpbF9zYW5pdGl6ZV91bnRydXN0ZWRfZnVsbCgpIGFuZCB0aGUg
RUNhbFV0aWxVcmlOZWVkc0NoYW5nZUZ1bmMgdHlwZQogdG8gbGliZWNhbCwgYW5kIGVfY2FsX2Jh
Y2tlbmRfc2FuaXRpemVfdW50cnVzdGVkKCkgdG8gbGliZWRhdGEtY2FsLgpPcmlnaW46IGJhY2tw
b3J0LCBodHRwczovL2dpdGxhYi5nbm9tZS5vcmcvR05PTUUvZXZvbHV0aW9uLWRhdGEtc2VydmVy
Ly0vY29tbWl0LzI1MTVlYzY4N2MzZmNjYmQ3MGJkMjUwMTYxZTI1ZDEwYTYwOTUxZmQKIGh0dHBz
Oi8vZ2l0bGFiLmdub21lLm9yZy9HTk9NRS9ldm9sdXRpb24tZGF0YS1zZXJ2ZXIvLS9jb21taXQv
MTViM2M1MjFkZDE2ZDZiNmY4MjIzMzIyOTFiMzNmNGI0Y2JiMmRiOQpCdWc6IGh0dHBzOi8vZ2l0
bGFiLmdub21lLm9yZy9HTk9NRS9ldm9sdXRpb24tZGF0YS1zZXJ2ZXIvLS9pc3N1ZXMvNjcyCkF1
dGhvcjogU3VtaXQgVmVybWEgPGF1dG9tYXRpb25jYW5hZGlhbkBnbWFpbC5jb20+CkZvcndhcmRl
ZDogbm90LW5lZWRlZApMYXN0LVVwZGF0ZTogMjAyNi0xMS0wOAotLS0KLS0tIGEvc3JjL2NhbGVu
ZGFyL2JhY2tlbmRzL2ZpbGUvZS1jYWwtYmFja2VuZC1maWxlLmMKKysrIGIvc3JjL2NhbGVuZGFy
L2JhY2tlbmRzL2ZpbGUvZS1jYWwtYmFja2VuZC1maWxlLmMKQEAgLTg4MSw2ICs4ODEsNyBAQAog
c3RhdGljIHZvaWQKIHNjYW5fdmNhbGVuZGFyIChFQ2FsQmFja2VuZEZpbGUgKmNiZmlsZSkKIHsK
KwlFQ2FsQmFja2VuZCAqY2FsX2JhY2tlbmQgPSBFX0NBTF9CQUNLRU5EIChjYmZpbGUpOwogCUVD
YWxCYWNrZW5kRmlsZVByaXZhdGUgKnByaXY7CiAJSUNhbENvbXBJdGVyICppdGVyOwogCUlDYWxD
b21wb25lbnQgKmljb21wOwpAQCAtOTA3LDYgKzkwOCw3IEBACiAJCQkJZ19vYmplY3RfcmVmIChp
Y29tcCk7CiAJCQkJaV9jYWxfb2JqZWN0X3NldF9vd25lciAoSV9DQUxfT0JKRUNUIChpY29tcCks
IEdfT0JKRUNUIChwcml2LT52Y2FsZW5kYXIpKTsKIAorCQkJCWVfY2FsX2JhY2tlbmRfc2FuaXRp
emVfdW50cnVzdGVkIChjYWxfYmFja2VuZCwgaWNvbXApOwogCQkJCWNoZWNrX2R1cF91aWQgKGNi
ZmlsZSwgY29tcCk7CiAKIAkJCQlhZGRfY29tcG9uZW50IChjYmZpbGUsIGNvbXAsIEZBTFNFKTsK
QEAgLTM0NzgsNiArMzQ4MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHRXJyb3IgKiplcnJvcikKIHsKIAlFU291cmNlUmVnaXN0cnkgKnJlZ2lzdHJ5OworCUVDYWxC
YWNrZW5kICpjYWxfYmFja2VuZDsKIAlFQ2FsQmFja2VuZEZpbGUgKmNiZmlsZTsKIAlFQ2FsQmFj
a2VuZEZpbGVQcml2YXRlICpwcml2OwogCUVDYWxDbGllbnRUemxvb2t1cElDYWxDb21wRGF0YSAq
bG9va3VwX2RhdGEgPSBOVUxMOwpAQCAtMzQ5MCw2ICszNDkzLDcgQEAKIAlFQ2FsQmFja2VuZEZp
bGVUemlkRGF0YSB0emRhdGE7CiAJR0Vycm9yICplcnIgPSBOVUxMOwogCisJY2FsX2JhY2tlbmQg
PSBFX0NBTF9CQUNLRU5EIChiYWNrZW5kKTsKIAljYmZpbGUgPSBFX0NBTF9CQUNLRU5EX0ZJTEUg
KGJhY2tlbmQpOwogCXByaXYgPSBjYmZpbGUtPnByaXY7CiAKQEAgLTM2NDAsNiArMzY0NCw4IEBA
CiAJCWlmICghY29tcCkKIAkJCWNvbnRpbnVlOwogCisJCWVfY2FsX2JhY2tlbmRfc2FuaXRpemVf
dW50cnVzdGVkIChjYWxfYmFja2VuZCwgc3ViY29tcCk7CisKIAkJLyogU2V0IHRoZSBjcmVhdGVk
IGFuZCBsYXN0IG1vZGlmaWVkIHRpbWVzIG9uIHRoZSBjb21wb25lbnQsIGlmIG5vdCB0aGVyZSBh
bHJlYWR5ICovCiAJCWN1cnJlbnQgPSBpX2NhbF90aW1lX25ld19jdXJyZW50X3dpdGhfem9uZSAo
aV9jYWxfdGltZXpvbmVfZ2V0X3V0Y190aW1lem9uZSAoKSk7CiAKLS0tIGEvc3JjL2NhbGVuZGFy
L2xpYmVjYWwvZS1jYWwtdXRpbC5jCisrKyBiL3NyYy9jYWxlbmRhci9saWJlY2FsL2UtY2FsLXV0
aWwuYwpAQCAtMzE3NSw2ICszMTc1LDcgQEAKIAkJCQkJICBHQ2FuY2VsbGFibGUgKmNhbmNlbGxh
YmxlLAogCQkJCQkgIEdFcnJvciAqKmVycm9yKQogeworCUdGaWxlICpjYWNoZV9kaXIgPSBOVUxM
LCAqdG1wX2RpciA9IE5VTEw7CiAJSUNhbFByb3BlcnR5ICpwcm9wOwogCWNvbnN0IGdjaGFyICp1
aWQ7CiAJZ2Jvb2xlYW4gc3VjY2VzcyA9IFRSVUU7CkBAIC0zMTk2LDUzICszMTk3LDk0IEBACiAJ
CQl1cmxfZGF0YSA9IGlfY2FsX2F0dGFjaF9nZXRfdXJsIChhdHRhY2gpOwogCQkJdXJsID0gdXJs
X2RhdGEgPyBpX2NhbF92YWx1ZV9kZWNvZGVfaWNhbF9zdHJpbmcgKHVybF9kYXRhKSA6IE5VTEw7
CiAKLQkJCWlmICh1cmwgJiYgZ19zdHJfaGFzX3ByZWZpeCAodXJsLCAiZmlsZTovLyIpKSB7CisJ
CQlpZiAodXJsICYmIGdfYXNjaWlfc3RybmNhc2VjbXAgKHVybCwgImZpbGU6Ly8iLCA3KSA9PSAw
KSB7CiAJCQkJR0ZpbGUgKmZpbGU7Ci0JCQkJZ2NoYXIgKmJhc2VuYW1lOwotCQkJCWdjaGFyICpj
b250ZW50OwotCQkJCWdzaXplIGxlbjsKKwkJCQlnY2hhciAqcGF0aDsKKwkJCQlnYm9vbGVhbiBj
YW47CiAKIAkJCQlmaWxlID0gZ19maWxlX25ld19mb3JfdXJpICh1cmwpOwotCQkJCWJhc2VuYW1l
ID0gZ19maWxlX2dldF9iYXNlbmFtZSAoZmlsZSk7Ci0JCQkJaWYgKGdfZmlsZV9sb2FkX2NvbnRl
bnRzIChmaWxlLCBjYW5jZWxsYWJsZSwgJmNvbnRlbnQsICZsZW4sIE5VTEwsIGVycm9yKSkgewot
CQkJCQlJQ2FsQXR0YWNoICpuZXdfYXR0YWNoOwotCQkJCQlJQ2FsUGFyYW1ldGVyICpwYXJhbTsK
LQkJCQkJZ2NoYXIgKmJhc2U2NDsKKwkJCQlwYXRoID0gZ19maWxlX2dldF9wYXRoIChmaWxlKTsK
KwkJCQljYW4gPSBwYXRoICYmICpwYXRoOwogCi0JCQkJCWJhc2U2NCA9IGdfYmFzZTY0X2VuY29k
ZSAoKGNvbnN0IGd1Y2hhciAqKSBjb250ZW50LCBsZW4pOwotCQkJCQluZXdfYXR0YWNoID0gaV9j
YWxfYXR0YWNoX25ld19mcm9tX2RhdGEgKGJhc2U2NCwgKEdGdW5jKSBnX2ZyZWUsIE5VTEwpOwot
CQkJCQlnX2ZyZWUgKGNvbnRlbnQpOworCQkJCWlmIChjYW4pIHsKKwkJCQkJaWYgKCF0bXBfZGly
KQorCQkJCQkJdG1wX2RpciA9IGdfZmlsZV9uZXdfZm9yX3BhdGggKGdfZ2V0X3RtcF9kaXIgKCkp
OworCQkJCQlpZiAoIWNhY2hlX2RpcikKKwkJCQkJCWNhY2hlX2RpciA9IGdfZmlsZV9uZXdfZm9y
X3BhdGggKGdfZ2V0X3VzZXJfY2FjaGVfZGlyICgpKTsKKworCQkJCQljYW4gPSBnX2ZpbGVfaGFz
X3ByZWZpeCAoZmlsZSwgdG1wX2RpcikgfHwKKwkJCQkJCWdfZmlsZV9oYXNfcHJlZml4IChmaWxl
LCBjYWNoZV9kaXIpOworCisJCQkJCWlmICghY2FuKSB7CisJCQkJCQlzdGF0aWMgY29uc3QgZ2No
YXIgKmF2b2lkX3ByZWZpeGVzW10gPSB7ICIuIiwgImV0YyIgfTsKKwkJCQkJCWdjaGFyICoqcGFy
dHM7CisJCQkJCQlndWludCBpaSwgamosIG5fcGFydHM7CisKKwkJCQkJCXBhcnRzID0gZ19zdHJz
cGxpdCAocGF0aCwgR19ESVJfU0VQQVJBVE9SX1MsIC0xKTsKKwkJCQkJCW5fcGFydHMgPSBnX3N0
cnZfbGVuZ3RoIChwYXJ0cyk7CisJCQkJCQljYW4gPSBUUlVFOworCisJCQkJCQlmb3IgKGlpID0g
MDsgY2FuICYmIGlpIDwgR19OX0VMRU1FTlRTIChhdm9pZF9wcmVmaXhlcyk7IGlpKyspIHsKKwkJ
CQkJCQlmb3IgKGpqID0gMDsgamogPCBuX3BhcnRzOyBqaisrKSB7CisJCQkJCQkJCWlmIChnX3N0
cl9oYXNfcHJlZml4IChwYXJ0c1tqal0sIGF2b2lkX3ByZWZpeGVzW2lpXSkpIHsKKwkJCQkJCQkJ
CWNhbiA9IEZBTFNFOworCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJ
CQl9CiAKLQkJCQkJZWN1X3JlbW92ZV9hbGxfYnV0X2ZpbGVuYW1lX3BhcmFtZXRlciAocHJvcCk7
CisJCQkJCQlnX3N0cmZyZWV2IChwYXJ0cyk7CisJCQkJCX0KKwkJCQl9CiAKLQkJCQkJaV9jYWxf
cHJvcGVydHlfc2V0X2F0dGFjaCAocHJvcCwgbmV3X2F0dGFjaCk7Ci0JCQkJCWdfb2JqZWN0X3Vu
cmVmIChuZXdfYXR0YWNoKTsKKwkJCQlpZiAoY2FuKSB7CisJCQkJCWdjaGFyICpiYXNlbmFtZTsK
KwkJCQkJZ2NoYXIgKmNvbnRlbnQ7CisJCQkJCWdzaXplIGxlbjsKKworCQkJCQliYXNlbmFtZSA9
IGdfZmlsZV9nZXRfYmFzZW5hbWUgKGZpbGUpOworCQkJCQlpZiAoZ19maWxlX2xvYWRfY29udGVu
dHMgKGZpbGUsIGNhbmNlbGxhYmxlLCAmY29udGVudCwgJmxlbiwgTlVMTCwgZXJyb3IpKSB7CisJ
CQkJCQlJQ2FsQXR0YWNoICpuZXdfYXR0YWNoOworCQkJCQkJSUNhbFBhcmFtZXRlciAqcGFyYW07
CisJCQkJCQlnY2hhciAqYmFzZTY0OworCisJCQkJCQliYXNlNjQgPSBnX2Jhc2U2NF9lbmNvZGUg
KChjb25zdCBndWNoYXIgKikgY29udGVudCwgbGVuKTsKKwkJCQkJCW5ld19hdHRhY2ggPSBpX2Nh
bF9hdHRhY2hfbmV3X2Zyb21fZGF0YSAoYmFzZTY0LCAoR0Z1bmMpIGdfZnJlZSwgTlVMTCk7CisJ
CQkJCQlnX2ZyZWUgKGNvbnRlbnQpOwogCi0JCQkJCXBhcmFtID0gaV9jYWxfcGFyYW1ldGVyX25l
d192YWx1ZSAoSV9DQUxfVkFMVUVfQklOQVJZKTsKLQkJCQkJaV9jYWxfcHJvcGVydHlfdGFrZV9w
YXJhbWV0ZXIgKHByb3AsIHBhcmFtKTsKKwkJCQkJCWVjdV9yZW1vdmVfYWxsX2J1dF9maWxlbmFt
ZV9wYXJhbWV0ZXIgKHByb3ApOwogCi0JCQkJCXBhcmFtID0gaV9jYWxfcGFyYW1ldGVyX25ld19l
bmNvZGluZyAoSV9DQUxfRU5DT0RJTkdfQkFTRTY0KTsKLQkJCQkJaV9jYWxfcHJvcGVydHlfdGFr
ZV9wYXJhbWV0ZXIgKHByb3AsIHBhcmFtKTsKKwkJCQkJCWlfY2FsX3Byb3BlcnR5X3NldF9hdHRh
Y2ggKHByb3AsIG5ld19hdHRhY2gpOworCQkJCQkJZ19vYmplY3RfdW5yZWYgKG5ld19hdHRhY2gp
OwogCi0JCQkJCS8qIFByZXNlcnZlIGV4aXN0aW5nIEZJTEVOQU1FIHBhcmFtZXRlciAqLwotCQkJ
CQlpZiAoIWVfY2FsX3V0aWxfcHJvcGVydHlfaGFzX3BhcmFtZXRlciAocHJvcCwgSV9DQUxfRklM
RU5BTUVfUEFSQU1FVEVSKSkgewotCQkJCQkJY29uc3QgZ2NoYXIgKnVzZV9maWxlbmFtZSA9IGJh
c2VuYW1lOwotCi0JCQkJCQkvKiBnZW5lcmF0ZWQgZmlsZW5hbWUgYnkgRXZvbHV0aW9uICovCi0J
CQkJCQlpZiAodWlkICYmIGdfc3RyX2hhc19wcmVmaXggKHVzZV9maWxlbmFtZSwgdWlkKSAmJgot
CQkJCQkJICAgIHVzZV9maWxlbmFtZVtzdHJsZW4gKHVpZCldID09ICctJykgewotCQkJCQkJCXVz
ZV9maWxlbmFtZSArPSBzdHJsZW4gKHVpZCkgKyAxOwotCQkJCQkJfQorCQkJCQkJcGFyYW0gPSBp
X2NhbF9wYXJhbWV0ZXJfbmV3X3ZhbHVlIChJX0NBTF9WQUxVRV9CSU5BUlkpOworCQkJCQkJaV9j
YWxfcHJvcGVydHlfdGFrZV9wYXJhbWV0ZXIgKHByb3AsIHBhcmFtKTsKIAotCQkJCQkJcGFyYW0g
PSBpX2NhbF9wYXJhbWV0ZXJfbmV3X2ZpbGVuYW1lICh1c2VfZmlsZW5hbWUpOworCQkJCQkJcGFy
YW0gPSBpX2NhbF9wYXJhbWV0ZXJfbmV3X2VuY29kaW5nIChJX0NBTF9FTkNPRElOR19CQVNFNjQp
OwogCQkJCQkJaV9jYWxfcHJvcGVydHlfdGFrZV9wYXJhbWV0ZXIgKHByb3AsIHBhcmFtKTsKKwor
CQkJCQkJLyogUHJlc2VydmUgZXhpc3RpbmcgRklMRU5BTUUgcGFyYW1ldGVyICovCisJCQkJCQlp
ZiAoIWVfY2FsX3V0aWxfcHJvcGVydHlfaGFzX3BhcmFtZXRlciAocHJvcCwgSV9DQUxfRklMRU5B
TUVfUEFSQU1FVEVSKSkgeworCQkJCQkJCWNvbnN0IGdjaGFyICp1c2VfZmlsZW5hbWUgPSBiYXNl
bmFtZTsKKworCQkJCQkJCS8qIGdlbmVyYXRlZCBmaWxlbmFtZSBieSBFdm9sdXRpb24gKi8KKwkJ
CQkJCQlpZiAodWlkICYmIGdfc3RyX2hhc19wcmVmaXggKHVzZV9maWxlbmFtZSwgdWlkKSAmJgor
CQkJCQkJCSAgICB1c2VfZmlsZW5hbWVbc3RybGVuICh1aWQpXSA9PSAnLScpIHsKKwkJCQkJCQkJ
dXNlX2ZpbGVuYW1lICs9IHN0cmxlbiAodWlkKSArIDE7CisJCQkJCQkJfQorCisJCQkJCQkJcGFy
YW0gPSBpX2NhbF9wYXJhbWV0ZXJfbmV3X2ZpbGVuYW1lICh1c2VfZmlsZW5hbWUpOworCQkJCQkJ
CWlfY2FsX3Byb3BlcnR5X3Rha2VfcGFyYW1ldGVyIChwcm9wLCBwYXJhbSk7CisJCQkJCQl9CisJ
CQkJCX0gZWxzZSB7CisJCQkJCQlzdWNjZXNzID0gRkFMU0U7CiAJCQkJCX0KLQkJCQl9IGVsc2Ug
ewotCQkJCQlzdWNjZXNzID0gRkFMU0U7CisKKwkJCQkJZ19mcmVlIChiYXNlbmFtZSk7CiAJCQkJ
fQogCiAJCQkJZ19vYmplY3RfdW5yZWYgKGZpbGUpOwotCQkJCWdfZnJlZSAoYmFzZW5hbWUpOwor
CQkJCWdfZnJlZSAocGF0aCk7CiAJCQl9CiAKIAkJCWdfZnJlZSAodXJsKTsKQEAgLTMyNTIsNiAr
MzI5NCw4IEBACiAJfQogCiAJZ19jbGVhcl9vYmplY3QgKCZwcm9wKTsKKwlnX2NsZWFyX29iamVj
dCAoJmNhY2hlX2Rpcik7CisJZ19jbGVhcl9vYmplY3QgKCZ0bXBfZGlyKTsKIAogCXJldHVybiBz
dWNjZXNzOwogfQpAQCAtNDA1NCwzICs0MDk4LDEwMyBAQAogCiAJcmV0dXJuIGVtYWlsOwogfQor
CisvKioKKyAqIGVfY2FsX3V0aWxfc2FuaXRpemVfdW50cnVzdGVkX2Z1bGw6CisgKiBAY29tcDog
YW4gI0lDYWxDb21wb25lbnQKKyAqCisgKiBTYW5pdGl6ZXMgdGhlIEBjb21wLCB3aGljaCBjYW4g
YmUgZnJvbSBhbiB1bnRydXN0ZWQgc291cmNlLAorICogdG8gbm90IGNvbnRhaW4gcG9zc2libGUg
aGFybWZ1bCBwcm9wZXJ0aWVzIG9yIHBhcmFtZXRlcnMuCisgKgorICogTm90ZTogVGhpcyBmdW5j
dGlvbiBjaGFuZ2VzIEFQSSBpbiB0aGUgMy42NCBzZXJpZXMsCisgKiAgICBtYXRjaGluZyBlX2Nh
bF91dGlsX3Nhbml0aXplX3VudHJ1c3RlZF9mdWxsKCkuCisgKgorICogU2luY2U6IDMuNjIuMQor
ICoqLwordm9pZAorZV9jYWxfdXRpbF9zYW5pdGl6ZV91bnRydXN0ZWQgKElDYWxDb21wb25lbnQg
KmNvbXApCit7CisJZ19yZXR1cm5faWZfZmFpbCAoSV9DQUxfSVNfQ09NUE9ORU5UIChjb21wKSk7
CisKKwllX2NhbF91dGlsX3Nhbml0aXplX3VudHJ1c3RlZF9mdWxsIChjb21wLCBOVUxMLCBOVUxM
KTsKK30KKworLyoqCisgKiBlX2NhbF91dGlsX3Nhbml0aXplX3VudHJ1c3RlZF9mdWxsOgorICog
QGNvbXA6IGFuICNJQ2FsQ29tcG9uZW50CisgKiBAdXJpX25lZWRzX2NoYW5nZV9mdW5jOiAobnVs
bGFibGUpIChzY29wZSBjYWxsKSAoY2xvc3VyZSB1c2VyX2RhdGEpOiBhbiAjRUNhbFV0aWxVcmlO
ZWVkc0NoYW5nZUZ1bmMKKyAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIEB1
cmlfbmVlZHNfY2hhbmdlX2Z1bmMKKyAqCisgKiBTYW5pdGl6ZXMgdGhlIEBjb21wLCB3aGljaCBj
YW4gYmUgZnJvbSBhbiB1bnRydXN0ZWQgc291cmNlLAorICogdG8gbm90IGNvbnRhaW4gcG9zc2li
bGUgaGFybWZ1bCBwcm9wZXJ0aWVzIG9yIHBhcmFtZXRlcnMuCisgKgorICogVGhlIEB1cmlfbmVl
ZHNfY2hhbmdlX2Z1bmMsIGlmIG5vdCAlTlVMTCwgaXMgY2FsbGVkIGZvciBlYWNoCisgKiBhdHRh
Y2htZW50IFVSSSwgdG8gY2hlY2sgd2hldGhlciB0aGUgVVJJIGlzIHRydXN0ZWQuIEl0IGNhbgor
ICogYmUgYWxzbyB1c2VkIHRvIHJlcGxhY2UgdGhlIGF0dGFjaG1lbnQgVVJJLXMuCisgKiBXaGVu
IHRoZSBAdXJpX25lZWRzX2NoYW5nZV9mdW5jIGlzICVOVUxMIHRoZSBmdW5jdGlvbiBtb2RpZmll
cworICogZWFjaCAiZmlsZTovLyIgVVJJIHRvICJ4ZmlsZTovLyIuCisgKgorICogTm90ZTogVGhp
cyBmdW5jdGlvbiBpcyByZW5hbWVkIHRvIGVfY2FsX3V0aWxfc2FuaXRpemVfdW50cnVzdGVkKCkg
aW4gdGhlIDMuNjQgc2VyaWVzLgorICoKKyAqIFNpbmNlOiAzLjYyLjIKKyAqKi8KK3ZvaWQKK2Vf
Y2FsX3V0aWxfc2FuaXRpemVfdW50cnVzdGVkX2Z1bGwgKElDYWxDb21wb25lbnQgKmNvbXAsCisJ
CQkJICAgIEVDYWxVdGlsVXJpTmVlZHNDaGFuZ2VGdW5jIHVyaV9uZWVkc19jaGFuZ2VfZnVuYywK
KwkJCQkgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCUlDYWxQcm9wZXJ0eSAqcHJvcDsKKwor
CWdfcmV0dXJuX2lmX2ZhaWwgKElfQ0FMX0lTX0NPTVBPTkVOVCAoY29tcCkpOworCisJZm9yIChw
cm9wID0gaV9jYWxfY29tcG9uZW50X2dldF9maXJzdF9wcm9wZXJ0eSAoY29tcCwgSV9DQUxfQVRU
QUNIX1BST1BFUlRZKTsKKwkgICAgIHByb3A7CisJICAgICBnX29iamVjdF91bnJlZiAocHJvcCks
IHByb3AgPSBpX2NhbF9jb21wb25lbnRfZ2V0X25leHRfcHJvcGVydHkgKGNvbXAsIElfQ0FMX0FU
VEFDSF9QUk9QRVJUWSkpIHsKKwkJSUNhbEF0dGFjaCAqYXR0YWNoOworCisJCWF0dGFjaCA9IGlf
Y2FsX3Byb3BlcnR5X2dldF9hdHRhY2ggKHByb3ApOworCQlpZiAoYXR0YWNoICYmIGlfY2FsX2F0
dGFjaF9nZXRfaXNfdXJsIChhdHRhY2gpKSB7CisJCQljb25zdCBnY2hhciAqdXJsX2RhdGE7CisJ
CQlnY2hhciAqdXJsID0gTlVMTDsKKworCQkJdXJsX2RhdGEgPSBpX2NhbF9hdHRhY2hfZ2V0X3Vy
bCAoYXR0YWNoKTsKKwkJCXVybCA9IHVybF9kYXRhID8gaV9jYWxfdmFsdWVfZGVjb2RlX2ljYWxf
c3RyaW5nICh1cmxfZGF0YSkgOiBOVUxMOworCisJCQlpZiAodXJsKSB7CisJCQkJZ2NoYXIgKm5l
d191cmwgPSBOVUxMOworCQkJCWdib29sZWFuIG5lZWRzX2NoYW5nZTsKKworCQkJCWlmICh1cmlf
bmVlZHNfY2hhbmdlX2Z1bmMpIHsKKwkJCQkJbmVlZHNfY2hhbmdlID0gdXJpX25lZWRzX2NoYW5n
ZV9mdW5jICh1cmwsICZuZXdfdXJsLCB1c2VyX2RhdGEpOworCisJCQkJCWlmIChuZWVkc19jaGFu
Z2UgJiYgIW5ld191cmwpCisJCQkJCQluZXdfdXJsID0gZ19zdHJjb25jYXQgKCJ4IiwgdXJsLCBO
VUxMKTsKKwkJCQl9IGVsc2UgeworCQkJCQluZWVkc19jaGFuZ2UgPSBnX2FzY2lpX3N0cm5jYXNl
Y21wICh1cmwsICJmaWxlOi8vIiwgNykgPT0gMDsKKworCQkJCQkvKiBjaGFuZ2VzICJmaWxlOi8v
IiBVUkktcyB0byAieGZpbGU6Ly8iLCB3aGljaCBpcyBub3QgaW5saW5lZCAqLworCQkJCQlpZiAo
bmVlZHNfY2hhbmdlKQorCQkJCQkJbmV3X3VybCA9IGdfc3RyY29uY2F0ICgieCIsIHVybCwgTlVM
TCk7CisJCQkJfQorCisJCQkJaWYgKG5lZWRzX2NoYW5nZSkgeworCQkJCQlJQ2FsQXR0YWNoICpu
ZXdfYXR0YWNoOworCisJCQkJCW5ld19hdHRhY2ggPSBpX2NhbF9hdHRhY2hfbmV3X2Zyb21fdXJs
IChuZXdfdXJsKTsKKworCQkJCQlpX2NhbF9wcm9wZXJ0eV9zZXRfYXR0YWNoIChwcm9wLCBuZXdf
YXR0YWNoKTsKKworCQkJCQlnX29iamVjdF91bnJlZiAobmV3X2F0dGFjaCk7CisJCQkJfQorCisJ
CQkJZ19mcmVlIChuZXdfdXJsKTsKKwkJCX0KKworCQkJZ19mcmVlICh1cmwpOworCQl9CisKKwkJ
Z19jbGVhcl9vYmplY3QgKCZhdHRhY2gpOworCX0KKworCWdfY2xlYXJfb2JqZWN0ICgmcHJvcCk7
Cit9Ci0tLSBhL3NyYy9jYWxlbmRhci9saWJlY2FsL2UtY2FsLXV0aWwuaAorKysgYi9zcmMvY2Fs
ZW5kYXIvbGliZWNhbC9lLWNhbC11dGlsLmgKQEAgLTQ5Myw2ICs0OTMsMjkgQEAKIGNvbnN0IGdj
aGFyICoJZV9jYWxfdXRpbF9nZXRfYXR0ZW5kZWVfZW1haWwJKGNvbnN0IEVDYWxDb21wb25lbnRB
dHRlbmRlZSAqYXR0ZW5kZWUpOwogY29uc3QgZ2NoYXIgKgllX2NhbF91dGlsX2dldF9wcm9wZXJ0
eV9lbWFpbAkoSUNhbFByb3BlcnR5ICpwcm9wKTsKIAorLyoqCisgKiBFQ2FsVXRpbFVyaU5lZWRz
Q2hhbmdlRnVuYzoKKyAqIEBpbl91cmk6IGEgVVJJIHRvIGNoZWNrCisgKiBAb3V0X3VyaTogKG51
bGxhYmxlKSAob3V0KSAodHJhbnNmZXIgZnVsbCk6IGFuIG91dCB2YXJpYWJsZSB0byBvcHRpb25h
bGx5CisgKiAgICBzZXQgYSByZXBsYWNlbWVudCBVUkkgZm9yIHRoZSBAaW5fdXJpCisgKiBAdXNl
cl9kYXRhOiB1c2VyIGRhdGEgcGFzc2VkIHRvIHRoZSBlX2NhbF91dGlsX3Nhbml0aXplX3VudHJ1
c3RlZF9mdWxsKCkKKyAqCisgKiBDYWxsZWQgZm9yIGVhY2ggYXR0YWNobWVudCBVUkksIHRvIGNo
ZWNrIHRoZSBAaW5fdXJpIHdoZXRoZXIgaXQgbmVlZHMgdG8gYmUgcmVwbGFjZWQuCisgKiBUaGUg
ImZpbGU6Ly8iIFVSSS1zIHdoaWNoIG5lZWQgdG8gcmVwbGFjZSB3aWxsIGJlIGNoYW5nZWQgdG8g
InhmaWxlOi8vIiBieQorICogdGhlIGNhbGxlciwgdW5sZXNzIHRoZSBAb3V0X3VyaSBpcyBwb3B1
bGF0ZWQsIGluIHdoaWNoIGNhc2UgdGhlIEBvdXRfdXJpCisgKiBpcyB1c2VkIGluc3RlYWQuCisg
KgorICogUmV0dXJuczogJVRSVUUsIHdoZW4gdGhlIEBpbl91cmkgbmVlZHMgdG8gYmUgY2hhbmdl
ZCwgb3IgJUZBTFNFLCB3aGVuIGl0IHNob3VsZCBzdGF5IGFzIGlzCisgKgorICogU2luY2U6IDMu
NjIuMgorICoqLwordHlwZWRlZiBnYm9vbGVhbiAoKiBFQ2FsVXRpbFVyaU5lZWRzQ2hhbmdlRnVu
YykJKGNvbnN0IGdjaGFyICppbl91cmksCisJCQkJCQkgZ2NoYXIgKipvdXRfdXJpLAorCQkJCQkJ
IGdwb2ludGVyIHVzZXJfZGF0YSk7Cit2b2lkCQllX2NhbF91dGlsX3Nhbml0aXplX3VudHJ1c3Rl
ZAkoSUNhbENvbXBvbmVudCAqY29tcCk7Cit2b2lkCQllX2NhbF91dGlsX3Nhbml0aXplX3VudHJ1
c3RlZF9mdWxsKElDYWxDb21wb25lbnQgKmNvbXAsCisJCQkJCQkgRUNhbFV0aWxVcmlOZWVkc0No
YW5nZUZ1bmMgdXJpX25lZWRzX2NoYW5nZV9mdW5jLAorCQkJCQkJIGdwb2ludGVyIHVzZXJfZGF0
YSk7CiAKIEdfRU5EX0RFQ0xTCiAKLS0tIGEvc3JjL2NhbGVuZGFyL2xpYmVkYXRhLWNhbC9lLWNh
bC1iYWNrZW5kLmMKKysrIGIvc3JjL2NhbGVuZGFyL2xpYmVkYXRhLWNhbC9lLWNhbC1iYWNrZW5k
LmMKQEAgLTQ3MDQsMyArNDcwNCw4MSBAQAogCiAJY2FsX2JhY2tlbmRfZGlzcGF0Y2hfbmV4dF9v
cGVyYXRpb24gKGNhbF9iYWNrZW5kKTsKIH0KKworc3RhdGljIGdib29sZWFuCitlY2JfdXJpX25l
ZWRzX2NoYW5nZV9jYiAoY29uc3QgZ2NoYXIgKmluX3VyaSwKKwkJCSBnY2hhciAqKm91dF91cmks
CisJCQkgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCWNvbnN0IGdjaGFyICpjYWNoZV9kaXIgPSB1
c2VyX2RhdGE7CisJZ2Jvb2xlYW4gbmVlZHNfY2hhbmdlID0gRkFMU0U7CisKKwlpZiAoIWluX3Vy
aSkKKwkJcmV0dXJuIG5lZWRzX2NoYW5nZTsKKworCWlmIChnX2FzY2lpX3N0cm5jYXNlY21wIChp
bl91cmksICJmaWxlOi8vIiwgNykgPT0gMCkgeworCQlHRmlsZSAqZmlsZTsKKworCQlmaWxlID0g
Z19maWxlX25ld19mb3JfdXJpIChpbl91cmkpOworCisJCW5lZWRzX2NoYW5nZSA9ICFnX2ZpbGVf
cGVla19wYXRoIChmaWxlKSB8fCAhY2FjaGVfZGlyIHx8ICEqY2FjaGVfZGlyIHx8ICFnX3N0cl9o
YXNfcHJlZml4IChnX2ZpbGVfcGVla19wYXRoIChmaWxlKSwgY2FjaGVfZGlyKTsKKworCQlnX2Ns
ZWFyX29iamVjdCAoJmZpbGUpOworCX0gZWxzZSBpZiAoaW5fdXJpICYmIGNhY2hlX2RpciAmJiBn
X2FzY2lpX3N0cm5jYXNlY21wIChpbl91cmksICJ4ZmlsZTovLyIsIDgpID09IDApIHsKKwkJR0Zp
bGUgKmZpbGU7CisKKwkJLyogdGhlIGxvY2FsIGF0dGFjaG1lbnRzIGluIHRoZSBiYWNrZW5kIGNh
Y2hlIGNvdWxkIGJlIGluY29ycmVjdGx5IGdhcmJsZWQsCisJCSAgIHRodXMgZml4IHRoZW0gb24g
dGhlIGZseSAqLworCQlmaWxlID0gZ19maWxlX25ld19mb3JfdXJpIChpbl91cmkgKyAxKTsKKwor
CQlpZiAoZ19maWxlX3BlZWtfcGF0aCAoZmlsZSkgJiYgZ19zdHJfaGFzX3ByZWZpeCAoZ19maWxl
X3BlZWtfcGF0aCAoZmlsZSksIGNhY2hlX2RpcikpIHsKKwkJCSpvdXRfdXJpID0gZ19zdHJkdXAg
KGluX3VyaSArIDEpOworCQkJbmVlZHNfY2hhbmdlID0gVFJVRTsKKwkJfQorCisJCWdfY2xlYXJf
b2JqZWN0ICgmZmlsZSk7CisJfQorCisJcmV0dXJuIG5lZWRzX2NoYW5nZTsKK30KKworLyoqCisg
KiBlX2NhbF9iYWNrZW5kX3Nhbml0aXplX3VudHJ1c3RlZDoKKyAqIEBzZWxmOiBhbiAjRUNhbEJh
Y2tlbmQKKyAqIEBjb21wOiBhbiAjSUNhbENvbXBvbmVudAorICoKKyAqIFNhbml0aXplcyB0aGUg
QGNvbXAsIHdoaWNoIGNhbiBiZSBmcm9tIGFuIHVudHJ1c3RlZCBzb3VyY2UsCisgKiB0byBub3Qg
Y29udGFpbiBwb3NzaWJsZSBoYXJtZnVsIHByb3BlcnRpZXMgb3IgcGFyYW1ldGVycy4KKyAqCisg
KiBVbmxpa2UgZV9jYWxfdXRpbF9zYW5pdGl6ZV91bnRydXN0ZWQoKSB0aGlzIGtlZXBzIGF0dGFj
aG1lbnQKKyAqIFVSSS1zIHBvaW50aW5nIHRvIHRoZSBAc2VsZiBjYWNoZSBkaXJlY3RvcnkgdW50
b3VjaGVkLgorICoKKyAqIFNpbmNlOiAzLjYyLjIKKyAqKi8KK3ZvaWQKK2VfY2FsX2JhY2tlbmRf
c2FuaXRpemVfdW50cnVzdGVkIChFQ2FsQmFja2VuZCAqc2VsZiwKKwkJCQkgIElDYWxDb21wb25l
bnQgKmNvbXApCit7CisJZ2NoYXIgKmNhY2hlX2RpciA9IE5VTEw7CisKKwlnX3JldHVybl9pZl9m
YWlsIChFX0lTX0NBTF9CQUNLRU5EIChzZWxmKSk7CisJZ19yZXR1cm5faWZfZmFpbCAoSV9DQUxf
SVNfQ09NUE9ORU5UIChjb21wKSk7CisKKwlnX211dGV4X2xvY2sgKCZzZWxmLT5wcml2LT5wcm9w
ZXJ0eV9sb2NrKTsKKwlpZiAoc2VsZi0+cHJpdi0+Y2FjaGVfZGlyKSB7CisJCWd1aW50IGxlbiA9
IHN0cmxlbiAoc2VsZi0+cHJpdi0+Y2FjaGVfZGlyKTsKKworCQkvKiBhbHdheXMgZW5kIHRoZSBj
YWNoZV9kaXIgd2l0aCB0aGUgZGlyZWN0b3J5IHNlcGFyYXRvciwgdG8gYXZvaWQgcHJlZml4IG1p
c21hdGNoZXMgKi8KKwkJaWYgKGxlbiA+IDAgJiYgc2VsZi0+cHJpdi0+Y2FjaGVfZGlyW2xlbiAt
IDFdID09IEdfRElSX1NFUEFSQVRPUikgeworCQkJY2FjaGVfZGlyID0gZ19zdHJkdXAgKHNlbGYt
PnByaXYtPmNhY2hlX2Rpcik7CisJCX0gZWxzZSBpZiAobGVuID4gMCkgeworCQkJY2FjaGVfZGly
ID0gZ19tYWxsb2MwIChzaXplb2YgKGdjaGFyKSAqIChsZW4gKyAyKSk7CisJCQlnX3dhcm5faWZf
ZmFpbCAoZ19zbnByaW50ZiAoY2FjaGVfZGlyLCBsZW4gKyAyLCAiJXMlYyIsIHNlbGYtPnByaXYt
PmNhY2hlX2RpciwgR19ESVJfU0VQQVJBVE9SKSA8IGxlbiArIDIpOworCQl9CisJfQorCWdfbXV0
ZXhfdW5sb2NrICgmc2VsZi0+cHJpdi0+cHJvcGVydHlfbG9jayk7CisKKwllX2NhbF91dGlsX3Nh
bml0aXplX3VudHJ1c3RlZF9mdWxsIChjb21wLCBlY2JfdXJpX25lZWRzX2NoYW5nZV9jYiwgY2Fj
aGVfZGlyKTsKKworCWdfZnJlZSAoY2FjaGVfZGlyKTsKK30KLS0tIGEvc3JjL2NhbGVuZGFyL2xp
YmVkYXRhLWNhbC9lLWNhbC1iYWNrZW5kLmgKKysrIGIvc3JjL2NhbGVuZGFyL2xpYmVkYXRhLWNh
bC9lLWNhbC1iYWNrZW5kLmgKQEAgLTUzMCw2ICs1MzAsOSBAQAogCQkJCQkJIGdwb2ludGVyIHVz
ZXJfZGF0YSwKIAkJCQkJCSBHRGVzdHJveU5vdGlmeSB1c2VyX2RhdGFfZnJlZSk7CiAKK3ZvaWQJ
CWVfY2FsX2JhY2tlbmRfc2FuaXRpemVfdW50cnVzdGVkKEVDYWxCYWNrZW5kICpzZWxmLAorCQkJ
CQkJIElDYWxDb21wb25lbnQgKmNvbXApOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYgLyogRV9D
QUxfQkFDS0VORF9IICovCi0tLSBhL3NyYy9jYWxlbmRhci9saWJlZGF0YS1jYWwvZS1jYWwtbWV0
YS1iYWNrZW5kLmMKKysrIGIvc3JjL2NhbGVuZGFyL2xpYmVkYXRhLWNhbC9lLWNhbC1tZXRhLWJh
Y2tlbmQuYwpAQCAtMTE2Miw2ICsxMTYyLDcgQEAKIAkJCQkgIEdFcnJvciAqKmVycm9yKQogewog
CUVDYWNoZU9mZmxpbmVGbGFnIG9mZmxpbmVfZmxhZyA9IEVfQ0FDSEVfSVNfT05MSU5FOworCUVD
YWxCYWNrZW5kICpjYWxfYmFja2VuZCA9IEVfQ0FMX0JBQ0tFTkQgKG1ldGFfYmFja2VuZCk7CiAJ
SUNhbENvbXBvbmVudCAqaWNvbXAgPSBOVUxMOwogCUdTTGlzdCAqbmV3X2luc3RhbmNlcyA9IE5V
TEw7CiAJZ2NoYXIgKmV4dHJhID0gTlVMTDsKQEAgLTExOTksNiArMTIwMCw3IEBACiAJCQlFQ2Fs
Q29tcG9uZW50ICpjb21wID0gZV9jYWxfY29tcG9uZW50X25ld19mcm9tX2ljYWxjb21wb25lbnQg
KGlfY2FsX2NvbXBvbmVudF9jbG9uZSAoc3ViY29tcCkpOwogCiAJCQlpZiAoY29tcCkgeworCQkJ
CWVfY2FsX2JhY2tlbmRfc2FuaXRpemVfdW50cnVzdGVkIChjYWxfYmFja2VuZCwgZV9jYWxfY29t
cG9uZW50X2dldF9pY2FsY29tcG9uZW50IChjb21wKSk7CiAJCQkJbmV3X2luc3RhbmNlcyA9IGdf
c2xpc3RfcHJlcGVuZCAobmV3X2luc3RhbmNlcywgY29tcCk7CiAKIAkJCQlpZiAoIWxvYWRlZF91
aWQpCkBAIC0xMjExLDYgKzEyMTMsNyBAQAogCQlpY29tcCA9IE5VTEw7CiAKIAkJaWYgKGNvbXAp
IHsKKwkJCWVfY2FsX2JhY2tlbmRfc2FuaXRpemVfdW50cnVzdGVkIChjYWxfYmFja2VuZCwgZV9j
YWxfY29tcG9uZW50X2dldF9pY2FsY29tcG9uZW50IChjb21wKSk7CiAJCQluZXdfaW5zdGFuY2Vz
ID0gZ19zbGlzdF9wcmVwZW5kIChuZXdfaW5zdGFuY2VzLCBjb21wKTsKIAogCQkJaWYgKCFsb2Fk
ZWRfdWlkKQpAQCAtMjU5MCw2ICsyNTkzLDggQEAKIAljYWxfYmFja2VuZCA9IEVfQ0FMX0JBQ0tF
TkQgKG1ldGFfYmFja2VuZCk7CiAJcmVnaXN0cnkgPSBlX2NhbF9iYWNrZW5kX2dldF9yZWdpc3Ry
eSAoY2FsX2JhY2tlbmQpOwogCisJZV9jYWxfYmFja2VuZF9zYW5pdGl6ZV91bnRydXN0ZWQgKGNh
bF9iYWNrZW5kLCBlX2NhbF9jb21wb25lbnRfZ2V0X2ljYWxjb21wb25lbnQgKGNvbXApKTsKKwog
CS8qIEp1c3QgdG8gY2hlY2sgd2hldGhlciBjb21wb25lbnQgZXhpc3RzIGluIHRoZSBjYWNoZSAq
LwogCWlzX2luX2NhY2hlID0gZV9jYWxfY2FjaGVfY29udGFpbnMgKGNhbF9jYWNoZSwgZV9jYWxf
Y29tcG9uZW50X2lkX2dldF91aWQgKGlkKSwgTlVMTCwgRV9DQUNIRV9FWENMVURFX0RFTEVURUQp
IHx8CiAJCShlX2NhbF9jb21wb25lbnRfaWRfZ2V0X3JpZCAoaWQpICYmIGVfY2FsX2NhY2hlX2Nv
bnRhaW5zIChjYWxfY2FjaGUsIGVfY2FsX2NvbXBvbmVudF9pZF9nZXRfdWlkIChpZCksIGVfY2Fs
X2NvbXBvbmVudF9pZF9nZXRfcmlkIChpZCksIEVfQ0FDSEVfRVhDTFVERV9ERUxFVEVEKSk7Ci0t
LSBhL3Rlc3RzL2xpYmVjYWwvdGVzdC1jYWwtdXRpbHMuYworKysgYi90ZXN0cy9saWJlY2FsL3Rl
c3QtY2FsLXV0aWxzLmMKQEAgLTM1NSw2ICszNTUsNDY2IEBACiAJZ19jbGVhcl9vYmplY3QgKCZu
ZXdfY29tcCk7CiB9CiAKKyNkZWZpbmUgdGVzdF9wYXJhbShfbmFtZSwgX3ZhbHVlKSBHX1NUTVRf
U1RBUlQgeyBcCisJZ2NoYXIgKnBhcmFtOyBcCisJcGFyYW0gPSBpX2NhbF9wcm9wZXJ0eV9nZXRf
cGFyYW1ldGVyX2FzX3N0cmluZyAocHJvcCwgX25hbWUpOyBcCisJZ19hc3NlcnRfY21wc3RyIChw
YXJhbSwgPT0sIF92YWx1ZSk7IFwKKwlnX2ZyZWUgKHBhcmFtKTsgXAorCX0gR19TVE1UX0VORAor
CitzdGF0aWMgZ2Jvb2xlYW4KK3Rlc3Rfc2FuaXRpemVfdW50cnVzdGVkX3VyaV9uZWVkc19jaGFu
Z2VfY2IgKGNvbnN0IGdjaGFyICppbl91cmksCisJCQkJCSAgICAgZ2NoYXIgKipvdXRfdXJpLAor
CQkJCQkgICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwljb25zdCBnY2hhciAqZ29vZF9wYXRo
ID0gdXNlcl9kYXRhOworCWdib29sZWFuIG5lZWRzX2NoYW5nZSA9IEZBTFNFOworCisJaWYgKCFp
bl91cmkpCisJCXJldHVybiBuZWVkc19jaGFuZ2U7CisKKwlpZiAoZ19hc2NpaV9zdHJuY2FzZWNt
cCAoaW5fdXJpLCAiZmlsZTovLyIsIDcpID09IDApIHsKKwkJbmVlZHNfY2hhbmdlID0gIWdfc3Ry
X2hhc19wcmVmaXggKGluX3VyaSArIDcsIGdvb2RfcGF0aCk7CisJfSBlbHNlIGlmIChnX2FzY2lp
X3N0cm5jYXNlY21wIChpbl91cmksICJ4ZmlsZTovLyIsIDgpID09IDApIHsKKwkJbmVlZHNfY2hh
bmdlID0gZ19zdHJfaGFzX3ByZWZpeCAoaW5fdXJpICsgOCwgZ29vZF9wYXRoKTsKKwkJaWYgKG5l
ZWRzX2NoYW5nZSkKKwkJCSpvdXRfdXJpID0gZ19zdHJkdXAgKGluX3VyaSArIDEpOworCX0KKwor
CXJldHVybiBuZWVkc19jaGFuZ2U7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3Nhbml0aXplX3Vu
dHJ1c3RlZCAodm9pZCkKK3sKKwlJQ2FsQ29tcG9uZW50ICppY29tcDsKKwlJQ2FsUHJvcGVydHkg
KnByb3A7CisJZ3VpbnQgbnRoX2F0dGFjaDsKKworCS8qIGZpcnN0IHdoZW4gYWxsIGFyZSBmaW5l
ICovCisJaWNvbXAgPSBpX2NhbF9jb21wb25lbnRfbmV3X2Zyb21fc3RyaW5nICgKKwkJIkJFR0lO
OlZFVkVOVFxyXG4iCisJCSJVSUQ6MVxyXG4iCisJCSJTVU1NQVJZOmZpcnN0XHJcbiIKKwkJIkFU
VEFDSDtGSUxFTkFNRT1sb2dvLnBuZztGTVRUWVBFPWltYWdlL3BuZzpodHRwczovL2dub21lLm9y
Zy9sb2dvLnBuZ1xyXG4iCisJCSJBVFRBQ0g7VkFMVUU9QklOQVJZO0ZJTEVOQU1FPXRleHQudHh0
O0VOQ09ESU5HPUJBU0U2NDphR1ZzYkc4S1xyXG4iCisJCSJBVFRBQ0g6aHR0cHM6Ly9nbm9tZS5v
cmcvXHJcbiIKKwkJIkVORDpWRVZFTlRcclxuIik7CisJZ19hc3NlcnRfbm9ubnVsbCAoaWNvbXAp
OworCisJZm9yIChudGhfYXR0YWNoID0gMCwgcHJvcCA9IGlfY2FsX2NvbXBvbmVudF9nZXRfZmly
c3RfcHJvcGVydHkgKGljb21wLCBJX0NBTF9BTllfUFJPUEVSVFkpOworCSAgICAgcHJvcDsKKwkg
ICAgIGdfb2JqZWN0X3VucmVmIChwcm9wKSwgcHJvcCA9IGlfY2FsX2NvbXBvbmVudF9nZXRfbmV4
dF9wcm9wZXJ0eSAoaWNvbXAsIElfQ0FMX0FOWV9QUk9QRVJUWSkpIHsKKwkJaWYgKGlfY2FsX3By
b3BlcnR5X2lzYSAocHJvcCkgPT0gSV9DQUxfVUlEX1BST1BFUlRZKSB7CisJCQlnX2Fzc2VydF9j
bXBzdHIgKGlfY2FsX3Byb3BlcnR5X2dldF91aWQgKHByb3ApLCA9PSwgIjEiKTsKKwkJfSBlbHNl
IGlmIChpX2NhbF9wcm9wZXJ0eV9pc2EgKHByb3ApID09IElfQ0FMX1NVTU1BUllfUFJPUEVSVFkp
IHsKKwkJCWdfYXNzZXJ0X2NtcHN0ciAoaV9jYWxfcHJvcGVydHlfZ2V0X3N1bW1hcnkgKHByb3Ap
LCA9PSwgImZpcnN0Iik7CisJCX0gZWxzZSBpZiAoaV9jYWxfcHJvcGVydHlfaXNhIChwcm9wKSA9
PSBJX0NBTF9BVFRBQ0hfUFJPUEVSVFkpIHsKKwkJCUlDYWxBdHRhY2ggKmF0dGFjaDsKKworCQkJ
YXR0YWNoID0gaV9jYWxfcHJvcGVydHlfZ2V0X2F0dGFjaCAocHJvcCk7CisJCQlnX2Fzc2VydF9u
b25udWxsIChhdHRhY2gpOworCisJCQludGhfYXR0YWNoKys7CisKKwkJCXN3aXRjaCAobnRoX2F0
dGFjaCkgeworCQkJY2FzZSAxOgorCQkJCWdfYXNzZXJ0X3RydWUgKGlfY2FsX2F0dGFjaF9nZXRf
aXNfdXJsIChhdHRhY2gpKTsKKwkJCQlnX2Fzc2VydF9jbXBzdHIgKGlfY2FsX2F0dGFjaF9nZXRf
dXJsIChhdHRhY2gpLCA9PSwgImh0dHBzOi8vZ25vbWUub3JnL2xvZ28ucG5nIik7CisJCQkJZ19h
c3NlcnRfY21waW50IChpX2NhbF9wcm9wZXJ0eV9jb3VudF9wYXJhbWV0ZXJzIChwcm9wKSwgPT0s
IDIpOworCQkJCXRlc3RfcGFyYW0gKCJmaWxlbmFtZSIsICJsb2dvLnBuZyIpOworCQkJCXRlc3Rf
cGFyYW0gKCJmbXR0eXBlIiwgImltYWdlL3BuZyIpOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgor
CQkJCWdfYXNzZXJ0X2ZhbHNlIChpX2NhbF9hdHRhY2hfZ2V0X2lzX3VybCAoYXR0YWNoKSk7CisJ
CQkJZ19hc3NlcnRfY21wc3RyIChpX2NhbF9hdHRhY2hfZ2V0X2RhdGEgKGF0dGFjaCksID09LCAi
YUdWc2JHOEsiKTsKKwkJCQlnX2Fzc2VydF9jbXBpbnQgKGlfY2FsX3Byb3BlcnR5X2NvdW50X3Bh
cmFtZXRlcnMgKHByb3ApLCA9PSwgMyk7CisJCQkJdGVzdF9wYXJhbSAoInZhbHVlIiwgIkJJTkFS
WSIpOworCQkJCXRlc3RfcGFyYW0gKCJmaWxlbmFtZSIsICJ0ZXh0LnR4dCIpOworCQkJCXRlc3Rf
cGFyYW0gKCJlbmNvZGluZyIsICJCQVNFNjQiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzoKKwkJ
CQlnX2Fzc2VydF90cnVlIChpX2NhbF9hdHRhY2hfZ2V0X2lzX3VybCAoYXR0YWNoKSk7CisJCQkJ
Z19hc3NlcnRfY21wc3RyIChpX2NhbF9hdHRhY2hfZ2V0X3VybCAoYXR0YWNoKSwgPT0sICJodHRw
czovL2dub21lLm9yZy8iKTsKKwkJCQlnX2Fzc2VydF9jbXBpbnQgKGlfY2FsX3Byb3BlcnR5X2Nv
dW50X3BhcmFtZXRlcnMgKHByb3ApLCA9PSwgMCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0Ogor
CQkJCWdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOworCQkJfQorCisJCQlnX2NsZWFyX29iamVjdCAo
JmF0dGFjaCk7CisJCX0gZWxzZSB7CisJCQlnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKwkJfQor
CX0KKworCWdfY2xlYXJfb2JqZWN0ICgmcHJvcCk7CisJZ19hc3NlcnRfY21wdWludCAobnRoX2F0
dGFjaCwgPT0sIDMpOworCisJZV9jYWxfdXRpbF9zYW5pdGl6ZV91bnRydXN0ZWRfZnVsbCAoaWNv
bXAsIE5VTEwsIE5VTEwpOworCisJZm9yIChudGhfYXR0YWNoID0gMCwgcHJvcCA9IGlfY2FsX2Nv
bXBvbmVudF9nZXRfZmlyc3RfcHJvcGVydHkgKGljb21wLCBJX0NBTF9BTllfUFJPUEVSVFkpOwor
CSAgICAgcHJvcDsKKwkgICAgIGdfb2JqZWN0X3VucmVmIChwcm9wKSwgcHJvcCA9IGlfY2FsX2Nv
bXBvbmVudF9nZXRfbmV4dF9wcm9wZXJ0eSAoaWNvbXAsIElfQ0FMX0FOWV9QUk9QRVJUWSkpIHsK
KwkJaWYgKGlfY2FsX3Byb3BlcnR5X2lzYSAocHJvcCkgPT0gSV9DQUxfVUlEX1BST1BFUlRZKSB7
CisJCQlnX2Fzc2VydF9jbXBzdHIgKGlfY2FsX3Byb3BlcnR5X2dldF91aWQgKHByb3ApLCA9PSwg
IjEiKTsKKwkJfSBlbHNlIGlmIChpX2NhbF9wcm9wZXJ0eV9pc2EgKHByb3ApID09IElfQ0FMX1NV
TU1BUllfUFJPUEVSVFkpIHsKKwkJCWdfYXNzZXJ0X2NtcHN0ciAoaV9jYWxfcHJvcGVydHlfZ2V0
X3N1bW1hcnkgKHByb3ApLCA9PSwgImZpcnN0Iik7CisJCX0gZWxzZSBpZiAoaV9jYWxfcHJvcGVy
dHlfaXNhIChwcm9wKSA9PSBJX0NBTF9BVFRBQ0hfUFJPUEVSVFkpIHsKKwkJCUlDYWxBdHRhY2gg
KmF0dGFjaDsKKworCQkJYXR0YWNoID0gaV9jYWxfcHJvcGVydHlfZ2V0X2F0dGFjaCAocHJvcCk7
CisJCQlnX2Fzc2VydF9ub25udWxsIChhdHRhY2gpOworCisJCQludGhfYXR0YWNoKys7CisKKwkJ
CXN3aXRjaCAobnRoX2F0dGFjaCkgeworCQkJY2FzZSAxOgorCQkJCWdfYXNzZXJ0X3RydWUgKGlf
Y2FsX2F0dGFjaF9nZXRfaXNfdXJsIChhdHRhY2gpKTsKKwkJCQlnX2Fzc2VydF9jbXBzdHIgKGlf
Y2FsX2F0dGFjaF9nZXRfdXJsIChhdHRhY2gpLCA9PSwgImh0dHBzOi8vZ25vbWUub3JnL2xvZ28u
cG5nIik7CisJCQkJZ19hc3NlcnRfY21waW50IChpX2NhbF9wcm9wZXJ0eV9jb3VudF9wYXJhbWV0
ZXJzIChwcm9wKSwgPT0sIDIpOworCQkJCXRlc3RfcGFyYW0gKCJmaWxlbmFtZSIsICJsb2dvLnBu
ZyIpOworCQkJCXRlc3RfcGFyYW0gKCJmbXR0eXBlIiwgImltYWdlL3BuZyIpOworCQkJCWJyZWFr
OworCQkJY2FzZSAyOgorCQkJCWdfYXNzZXJ0X2ZhbHNlIChpX2NhbF9hdHRhY2hfZ2V0X2lzX3Vy
bCAoYXR0YWNoKSk7CisJCQkJZ19hc3NlcnRfY21wc3RyIChpX2NhbF9hdHRhY2hfZ2V0X2RhdGEg
KGF0dGFjaCksID09LCAiYUdWc2JHOEsiKTsKKwkJCQlnX2Fzc2VydF9jbXBpbnQgKGlfY2FsX3By
b3BlcnR5X2NvdW50X3BhcmFtZXRlcnMgKHByb3ApLCA9PSwgMyk7CisJCQkJdGVzdF9wYXJhbSAo
InZhbHVlIiwgIkJJTkFSWSIpOworCQkJCXRlc3RfcGFyYW0gKCJmaWxlbmFtZSIsICJ0ZXh0LnR4
dCIpOworCQkJCXRlc3RfcGFyYW0gKCJlbmNvZGluZyIsICJCQVNFNjQiKTsKKwkJCQlicmVhazsK
KwkJCWNhc2UgMzoKKwkJCQlnX2Fzc2VydF90cnVlIChpX2NhbF9hdHRhY2hfZ2V0X2lzX3VybCAo
YXR0YWNoKSk7CisJCQkJZ19hc3NlcnRfY21wc3RyIChpX2NhbF9hdHRhY2hfZ2V0X3VybCAoYXR0
YWNoKSwgPT0sICJodHRwczovL2dub21lLm9yZy8iKTsKKwkJCQlnX2Fzc2VydF9jbXBpbnQgKGlf
Y2FsX3Byb3BlcnR5X2NvdW50X3BhcmFtZXRlcnMgKHByb3ApLCA9PSwgMCk7CisJCQkJYnJlYWs7
CisJCQlkZWZhdWx0OgorCQkJCWdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOworCQkJfQorCisJCQln
X2NsZWFyX29iamVjdCAoJmF0dGFjaCk7CisJCX0gZWxzZSB7CisJCQlnX2Fzc2VydF9ub3RfcmVh
Y2hlZCAoKTsKKwkJfQorCX0KKworCWdfY2xlYXJfb2JqZWN0ICgmcHJvcCk7CisJZ19jbGVhcl9v
YmplY3QgKCZpY29tcCk7CisJZ19hc3NlcnRfY21wdWludCAobnRoX2F0dGFjaCwgPT0sIDMpOwor
CisJLyogdGhlbiB3aGVuIHNvbWUgYXJlIGJhZCAqLworCWljb21wID0gaV9jYWxfY29tcG9uZW50
X25ld19mcm9tX3N0cmluZyAoCisJCSJCRUdJTjpWRVZFTlRcclxuIgorCQkiVUlEOjJcclxuIgor
CQkiU1VNTUFSWTpzZWNvbmRcclxuIgorCQkiQVRUQUNIO0ZJTEVOQU1FPWxvZ28ucG5nO0ZNVFRZ
UEU9aW1hZ2UvcG5nOmZpbGU6Ly8vdG1wL2ltYWdlLnBuZ1xyXG4iCisJCSJBVFRBQ0g7VkFMVUU9
QklOQVJZO0ZJTEVOQU1FPXRleHQudHh0O0VOQ09ESU5HPUJBU0U2NDphR1ZzYkc4S1xyXG4iCisJ
CSJBVFRBQ0g6Y2lkOnBhcnQtaWRcclxuIgorCQkiQVRUQUNIOkZpTGU6Ly95LnpcclxuIgorCQki
RU5EOlZFVkVOVFxyXG4iKTsKKwlnX2Fzc2VydF9ub25udWxsIChpY29tcCk7CisKKwlmb3IgKG50
aF9hdHRhY2ggPSAwLCBwcm9wID0gaV9jYWxfY29tcG9uZW50X2dldF9maXJzdF9wcm9wZXJ0eSAo
aWNvbXAsIElfQ0FMX0FOWV9QUk9QRVJUWSk7CisJICAgICBwcm9wOworCSAgICAgZ19vYmplY3Rf
dW5yZWYgKHByb3ApLCBwcm9wID0gaV9jYWxfY29tcG9uZW50X2dldF9uZXh0X3Byb3BlcnR5IChp
Y29tcCwgSV9DQUxfQU5ZX1BST1BFUlRZKSkgeworCQlpZiAoaV9jYWxfcHJvcGVydHlfaXNhIChw
cm9wKSA9PSBJX0NBTF9VSURfUFJPUEVSVFkpIHsKKwkJCWdfYXNzZXJ0X2NtcHN0ciAoaV9jYWxf
cHJvcGVydHlfZ2V0X3VpZCAocHJvcCksID09LCAiMiIpOworCQl9IGVsc2UgaWYgKGlfY2FsX3By
b3BlcnR5X2lzYSAocHJvcCkgPT0gSV9DQUxfU1VNTUFSWV9QUk9QRVJUWSkgeworCQkJZ19hc3Nl
cnRfY21wc3RyIChpX2NhbF9wcm9wZXJ0eV9nZXRfc3VtbWFyeSAocHJvcCksID09LCAic2Vjb25k
Iik7CisJCX0gZWxzZSBpZiAoaV9jYWxfcHJvcGVydHlfaXNhIChwcm9wKSA9PSBJX0NBTF9BVFRB
Q0hfUFJPUEVSVFkpIHsKKwkJCUlDYWxBdHRhY2ggKmF0dGFjaDsKKworCQkJYXR0YWNoID0gaV9j
YWxfcHJvcGVydHlfZ2V0X2F0dGFjaCAocHJvcCk7CisJCQlnX2Fzc2VydF9ub25udWxsIChhdHRh
Y2gpOworCisJCQludGhfYXR0YWNoKys7CisKKwkJCXN3aXRjaCAobnRoX2F0dGFjaCkgeworCQkJ
Y2FzZSAxOgorCQkJCWdfYXNzZXJ0X3RydWUgKGlfY2FsX2F0dGFjaF9nZXRfaXNfdXJsIChhdHRh
Y2gpKTsKKwkJCQlnX2Fzc2VydF9jbXBzdHIgKGlfY2FsX2F0dGFjaF9nZXRfdXJsIChhdHRhY2gp
LCA9PSwgImZpbGU6Ly8vdG1wL2ltYWdlLnBuZyIpOworCQkJCWdfYXNzZXJ0X2NtcGludCAoaV9j
YWxfcHJvcGVydHlfY291bnRfcGFyYW1ldGVycyAocHJvcCksID09LCAyKTsKKwkJCQl0ZXN0X3Bh
cmFtICgiZmlsZW5hbWUiLCAibG9nby5wbmciKTsKKwkJCQl0ZXN0X3BhcmFtICgiZm10dHlwZSIs
ICJpbWFnZS9wbmciKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlnX2Fzc2VydF9mYWxz
ZSAoaV9jYWxfYXR0YWNoX2dldF9pc191cmwgKGF0dGFjaCkpOworCQkJCWdfYXNzZXJ0X2NtcHN0
ciAoaV9jYWxfYXR0YWNoX2dldF9kYXRhIChhdHRhY2gpLCA9PSwgImFHVnNiRzhLIik7CisJCQkJ
Z19hc3NlcnRfY21waW50IChpX2NhbF9wcm9wZXJ0eV9jb3VudF9wYXJhbWV0ZXJzIChwcm9wKSwg
PT0sIDMpOworCQkJCXRlc3RfcGFyYW0gKCJ2YWx1ZSIsICJCSU5BUlkiKTsKKwkJCQl0ZXN0X3Bh
cmFtICgiZmlsZW5hbWUiLCAidGV4dC50eHQiKTsKKwkJCQl0ZXN0X3BhcmFtICgiZW5jb2Rpbmci
LCAiQkFTRTY0Iik7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQkJZ19hc3NlcnRfdHJ1ZSAo
aV9jYWxfYXR0YWNoX2dldF9pc191cmwgKGF0dGFjaCkpOworCQkJCWdfYXNzZXJ0X2NtcHN0ciAo
aV9jYWxfYXR0YWNoX2dldF91cmwgKGF0dGFjaCksID09LCAiY2lkOnBhcnQtaWQiKTsKKwkJCQln
X2Fzc2VydF9jbXBpbnQgKGlfY2FsX3Byb3BlcnR5X2NvdW50X3BhcmFtZXRlcnMgKHByb3ApLCA9
PSwgMCk7CisJCQkJYnJlYWs7CisJCQljYXNlIDQ6CisJCQkJZ19hc3NlcnRfdHJ1ZSAoaV9jYWxf
YXR0YWNoX2dldF9pc191cmwgKGF0dGFjaCkpOworCQkJCWdfYXNzZXJ0X2NtcHN0ciAoaV9jYWxf
YXR0YWNoX2dldF91cmwgKGF0dGFjaCksID09LCAiRmlMZTovL3kueiIpOworCQkJCWdfYXNzZXJ0
X2NtcGludCAoaV9jYWxfcHJvcGVydHlfY291bnRfcGFyYW1ldGVycyAocHJvcCksID09LCAwKTsK
KwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CisJ
CQl9CisKKwkJCWdfY2xlYXJfb2JqZWN0ICgmYXR0YWNoKTsKKwkJfSBlbHNlIHsKKwkJCWdfYXNz
ZXJ0X25vdF9yZWFjaGVkICgpOworCQl9CisJfQorCisJZ19jbGVhcl9vYmplY3QgKCZwcm9wKTsK
KwlnX2Fzc2VydF9jbXB1aW50IChudGhfYXR0YWNoLCA9PSwgNCk7CisKKwllX2NhbF91dGlsX3Nh
bml0aXplX3VudHJ1c3RlZF9mdWxsIChpY29tcCwgTlVMTCwgTlVMTCk7CisKKwlmb3IgKG50aF9h
dHRhY2ggPSAwLCBwcm9wID0gaV9jYWxfY29tcG9uZW50X2dldF9maXJzdF9wcm9wZXJ0eSAoaWNv
bXAsIElfQ0FMX0FOWV9QUk9QRVJUWSk7CisJICAgICBwcm9wOworCSAgICAgZ19vYmplY3RfdW5y
ZWYgKHByb3ApLCBwcm9wID0gaV9jYWxfY29tcG9uZW50X2dldF9uZXh0X3Byb3BlcnR5IChpY29t
cCwgSV9DQUxfQU5ZX1BST1BFUlRZKSkgeworCQlpZiAoaV9jYWxfcHJvcGVydHlfaXNhIChwcm9w
KSA9PSBJX0NBTF9VSURfUFJPUEVSVFkpIHsKKwkJCWdfYXNzZXJ0X2NtcHN0ciAoaV9jYWxfcHJv
cGVydHlfZ2V0X3VpZCAocHJvcCksID09LCAiMiIpOworCQl9IGVsc2UgaWYgKGlfY2FsX3Byb3Bl
cnR5X2lzYSAocHJvcCkgPT0gSV9DQUxfU1VNTUFSWV9QUk9QRVJUWSkgeworCQkJZ19hc3NlcnRf
Y21wc3RyIChpX2NhbF9wcm9wZXJ0eV9nZXRfc3VtbWFyeSAocHJvcCksID09LCAic2Vjb25kIik7
CisJCX0gZWxzZSBpZiAoaV9jYWxfcHJvcGVydHlfaXNhIChwcm9wKSA9PSBJX0NBTF9BVFRBQ0hf
UFJPUEVSVFkpIHsKKwkJCUlDYWxBdHRhY2ggKmF0dGFjaDsKKworCQkJYXR0YWNoID0gaV9jYWxf
cHJvcGVydHlfZ2V0X2F0dGFjaCAocHJvcCk7CisJCQlnX2Fzc2VydF9ub25udWxsIChhdHRhY2gp
OworCisJCQludGhfYXR0YWNoKys7CisKKwkJCXN3aXRjaCAobnRoX2F0dGFjaCkgeworCQkJY2Fz
ZSAxOgorCQkJCWdfYXNzZXJ0X3RydWUgKGlfY2FsX2F0dGFjaF9nZXRfaXNfdXJsIChhdHRhY2gp
KTsKKwkJCQlnX2Fzc2VydF9jbXBzdHIgKGlfY2FsX2F0dGFjaF9nZXRfdXJsIChhdHRhY2gpLCA9
PSwgInhmaWxlOi8vL3RtcC9pbWFnZS5wbmciKTsKKwkJCQlnX2Fzc2VydF9jbXBpbnQgKGlfY2Fs
X3Byb3BlcnR5X2NvdW50X3BhcmFtZXRlcnMgKHByb3ApLCA9PSwgMik7CisJCQkJdGVzdF9wYXJh
bSAoImZpbGVuYW1lIiwgImxvZ28ucG5nIik7CisJCQkJdGVzdF9wYXJhbSAoImZtdHR5cGUiLCAi
aW1hZ2UvcG5nIik7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJZ19hc3NlcnRfZmFsc2Ug
KGlfY2FsX2F0dGFjaF9nZXRfaXNfdXJsIChhdHRhY2gpKTsKKwkJCQlnX2Fzc2VydF9jbXBzdHIg
KGlfY2FsX2F0dGFjaF9nZXRfZGF0YSAoYXR0YWNoKSwgPT0sICJhR1ZzYkc4SyIpOworCQkJCWdf
YXNzZXJ0X2NtcGludCAoaV9jYWxfcHJvcGVydHlfY291bnRfcGFyYW1ldGVycyAocHJvcCksID09
LCAzKTsKKwkJCQl0ZXN0X3BhcmFtICgidmFsdWUiLCAiQklOQVJZIik7CisJCQkJdGVzdF9wYXJh
bSAoImZpbGVuYW1lIiwgInRleHQudHh0Iik7CisJCQkJdGVzdF9wYXJhbSAoImVuY29kaW5nIiwg
IkJBU0U2NCIpOworCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCWdfYXNzZXJ0X3RydWUgKGlf
Y2FsX2F0dGFjaF9nZXRfaXNfdXJsIChhdHRhY2gpKTsKKwkJCQlnX2Fzc2VydF9jbXBzdHIgKGlf
Y2FsX2F0dGFjaF9nZXRfdXJsIChhdHRhY2gpLCA9PSwgImNpZDpwYXJ0LWlkIik7CisJCQkJZ19h
c3NlcnRfY21waW50IChpX2NhbF9wcm9wZXJ0eV9jb3VudF9wYXJhbWV0ZXJzIChwcm9wKSwgPT0s
IDApOworCQkJCWJyZWFrOworCQkJY2FzZSA0OgorCQkJCWdfYXNzZXJ0X3RydWUgKGlfY2FsX2F0
dGFjaF9nZXRfaXNfdXJsIChhdHRhY2gpKTsKKwkJCQlnX2Fzc2VydF9jbXBzdHIgKGlfY2FsX2F0
dGFjaF9nZXRfdXJsIChhdHRhY2gpLCA9PSwgInhGaUxlOi8veS56Iik7CisJCQkJZ19hc3NlcnRf
Y21waW50IChpX2NhbF9wcm9wZXJ0eV9jb3VudF9wYXJhbWV0ZXJzIChwcm9wKSwgPT0sIDApOwor
CQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKwkJ
CX0KKworCQkJZ19jbGVhcl9vYmplY3QgKCZhdHRhY2gpOworCQl9IGVsc2UgeworCQkJZ19hc3Nl
cnRfbm90X3JlYWNoZWQgKCk7CisJCX0KKwl9CisKKwlnX2NsZWFyX29iamVjdCAoJnByb3ApOwor
CWdfY2xlYXJfb2JqZWN0ICgmaWNvbXApOworCWdfYXNzZXJ0X2NtcHVpbnQgKG50aF9hdHRhY2gs
ID09LCA0KTsKKworCS8qIHRoZW4gd2l0aCBubyBBVFRBQ0ggKi8KKwlpY29tcCA9IGlfY2FsX2Nv
bXBvbmVudF9uZXdfZnJvbV9zdHJpbmcgKAorCQkiQkVHSU46VkVWRU5UXHJcbiIKKwkJIlVJRDoz
XHJcbiIKKwkJIlNVTU1BUlk6dGhpcmRcclxuIgorCQkiRU5EOlZFVkVOVFxyXG4iKTsKKwlnX2Fz
c2VydF9ub25udWxsIChpY29tcCk7CisKKwlmb3IgKHByb3AgPSBpX2NhbF9jb21wb25lbnRfZ2V0
X2ZpcnN0X3Byb3BlcnR5IChpY29tcCwgSV9DQUxfQU5ZX1BST1BFUlRZKTsKKwkgICAgIHByb3A7
CisJICAgICBnX29iamVjdF91bnJlZiAocHJvcCksIHByb3AgPSBpX2NhbF9jb21wb25lbnRfZ2V0
X25leHRfcHJvcGVydHkgKGljb21wLCBJX0NBTF9BTllfUFJPUEVSVFkpKSB7CisJCWlmIChpX2Nh
bF9wcm9wZXJ0eV9pc2EgKHByb3ApID09IElfQ0FMX1VJRF9QUk9QRVJUWSkgeworCQkJZ19hc3Nl
cnRfY21wc3RyIChpX2NhbF9wcm9wZXJ0eV9nZXRfdWlkIChwcm9wKSwgPT0sICIzIik7CisJCX0g
ZWxzZSBpZiAoaV9jYWxfcHJvcGVydHlfaXNhIChwcm9wKSA9PSBJX0NBTF9TVU1NQVJZX1BST1BF
UlRZKSB7CisJCQlnX2Fzc2VydF9jbXBzdHIgKGlfY2FsX3Byb3BlcnR5X2dldF9zdW1tYXJ5IChw
cm9wKSwgPT0sICJ0aGlyZCIpOworCQl9IGVsc2UgeworCQkJZ19hc3NlcnRfbm90X3JlYWNoZWQg
KCk7CisJCX0KKwl9CisKKwlnX2NsZWFyX29iamVjdCAoJnByb3ApOworCisJZV9jYWxfdXRpbF9z
YW5pdGl6ZV91bnRydXN0ZWRfZnVsbCAoaWNvbXAsIE5VTEwsIE5VTEwpOworCisJZm9yIChwcm9w
ID0gaV9jYWxfY29tcG9uZW50X2dldF9maXJzdF9wcm9wZXJ0eSAoaWNvbXAsIElfQ0FMX0FOWV9Q
Uk9QRVJUWSk7CisJICAgICBwcm9wOworCSAgICAgZ19vYmplY3RfdW5yZWYgKHByb3ApLCBwcm9w
ID0gaV9jYWxfY29tcG9uZW50X2dldF9uZXh0X3Byb3BlcnR5IChpY29tcCwgSV9DQUxfQU5ZX1BS
T1BFUlRZKSkgeworCQlpZiAoaV9jYWxfcHJvcGVydHlfaXNhIChwcm9wKSA9PSBJX0NBTF9VSURf
UFJPUEVSVFkpIHsKKwkJCWdfYXNzZXJ0X2NtcHN0ciAoaV9jYWxfcHJvcGVydHlfZ2V0X3VpZCAo
cHJvcCksID09LCAiMyIpOworCQl9IGVsc2UgaWYgKGlfY2FsX3Byb3BlcnR5X2lzYSAocHJvcCkg
PT0gSV9DQUxfU1VNTUFSWV9QUk9QRVJUWSkgeworCQkJZ19hc3NlcnRfY21wc3RyIChpX2NhbF9w
cm9wZXJ0eV9nZXRfc3VtbWFyeSAocHJvcCksID09LCAidGhpcmQiKTsKKwkJfSBlbHNlIHsKKwkJ
CWdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOworCQl9CisJfQorCisJZ19jbGVhcl9vYmplY3QgKCZw
cm9wKTsKKwlnX2NsZWFyX29iamVjdCAoJmljb21wKTsKKworCS8qIHRoZW4gZmxpcCB0aGUgQVRU
QUNIIFVSSS1zICovCisJaWNvbXAgPSBpX2NhbF9jb21wb25lbnRfbmV3X2Zyb21fc3RyaW5nICgK
KwkJIkJFR0lOOlZFVkVOVFxyXG4iCisJCSJVSUQ6NFxyXG4iCisJCSJTVU1NQVJZOmZvdXJ0aFxy
XG4iCisJCSJBVFRBQ0g6ZmlsZTovLy9nb29kL3BhdGgvZmlsZS50eHRcclxuIgorCQkiQVRUQUNI
OmNpZDpwYXJ0LWlkXHJcbiIKKwkJIkFUVEFDSDpmaWxlOi8vL2JhZC9wYXRoL2JhZC54bWxcclxu
IgorCQkiRU5EOlZFVkVOVFxyXG4iKTsKKwlnX2Fzc2VydF9ub25udWxsIChpY29tcCk7CisKKwlm
b3IgKG50aF9hdHRhY2ggPSAwLCBwcm9wID0gaV9jYWxfY29tcG9uZW50X2dldF9maXJzdF9wcm9w
ZXJ0eSAoaWNvbXAsIElfQ0FMX0FOWV9QUk9QRVJUWSk7CisJICAgICBwcm9wOworCSAgICAgZ19v
YmplY3RfdW5yZWYgKHByb3ApLCBwcm9wID0gaV9jYWxfY29tcG9uZW50X2dldF9uZXh0X3Byb3Bl
cnR5IChpY29tcCwgSV9DQUxfQU5ZX1BST1BFUlRZKSkgeworCQlpZiAoaV9jYWxfcHJvcGVydHlf
aXNhIChwcm9wKSA9PSBJX0NBTF9VSURfUFJPUEVSVFkpIHsKKwkJCWdfYXNzZXJ0X2NtcHN0ciAo
aV9jYWxfcHJvcGVydHlfZ2V0X3VpZCAocHJvcCksID09LCAiNCIpOworCQl9IGVsc2UgaWYgKGlf
Y2FsX3Byb3BlcnR5X2lzYSAocHJvcCkgPT0gSV9DQUxfU1VNTUFSWV9QUk9QRVJUWSkgeworCQkJ
Z19hc3NlcnRfY21wc3RyIChpX2NhbF9wcm9wZXJ0eV9nZXRfc3VtbWFyeSAocHJvcCksID09LCAi
Zm91cnRoIik7CisJCX0gZWxzZSBpZiAoaV9jYWxfcHJvcGVydHlfaXNhIChwcm9wKSA9PSBJX0NB
TF9BVFRBQ0hfUFJPUEVSVFkpIHsKKwkJCUlDYWxBdHRhY2ggKmF0dGFjaDsKKworCQkJYXR0YWNo
ID0gaV9jYWxfcHJvcGVydHlfZ2V0X2F0dGFjaCAocHJvcCk7CisJCQlnX2Fzc2VydF9ub25udWxs
IChhdHRhY2gpOworCisJCQludGhfYXR0YWNoKys7CisKKwkJCXN3aXRjaCAobnRoX2F0dGFjaCkg
eworCQkJY2FzZSAxOgorCQkJCWdfYXNzZXJ0X3RydWUgKGlfY2FsX2F0dGFjaF9nZXRfaXNfdXJs
IChhdHRhY2gpKTsKKwkJCQlnX2Fzc2VydF9jbXBzdHIgKGlfY2FsX2F0dGFjaF9nZXRfdXJsIChh
dHRhY2gpLCA9PSwgImZpbGU6Ly8vZ29vZC9wYXRoL2ZpbGUudHh0Iik7CisJCQkJZ19hc3NlcnRf
Y21waW50IChpX2NhbF9wcm9wZXJ0eV9jb3VudF9wYXJhbWV0ZXJzIChwcm9wKSwgPT0sIDApOwor
CQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCWdfYXNzZXJ0X3RydWUgKGlfY2FsX2F0dGFjaF9n
ZXRfaXNfdXJsIChhdHRhY2gpKTsKKwkJCQlnX2Fzc2VydF9jbXBzdHIgKGlfY2FsX2F0dGFjaF9n
ZXRfdXJsIChhdHRhY2gpLCA9PSwgImNpZDpwYXJ0LWlkIik7CisJCQkJZ19hc3NlcnRfY21waW50
IChpX2NhbF9wcm9wZXJ0eV9jb3VudF9wYXJhbWV0ZXJzIChwcm9wKSwgPT0sIDApOworCQkJCWJy
ZWFrOworCQkJY2FzZSAzOgorCQkJCWdfYXNzZXJ0X3RydWUgKGlfY2FsX2F0dGFjaF9nZXRfaXNf
dXJsIChhdHRhY2gpKTsKKwkJCQlnX2Fzc2VydF9jbXBzdHIgKGlfY2FsX2F0dGFjaF9nZXRfdXJs
IChhdHRhY2gpLCA9PSwgImZpbGU6Ly8vYmFkL3BhdGgvYmFkLnhtbCIpOworCQkJCWdfYXNzZXJ0
X2NtcGludCAoaV9jYWxfcHJvcGVydHlfY291bnRfcGFyYW1ldGVycyAocHJvcCksID09LCAwKTsK
KwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CisJ
CQl9CisKKwkJCWdfY2xlYXJfb2JqZWN0ICgmYXR0YWNoKTsKKwkJfSBlbHNlIHsKKwkJCWdfYXNz
ZXJ0X25vdF9yZWFjaGVkICgpOworCQl9CisJfQorCisJZ19jbGVhcl9vYmplY3QgKCZwcm9wKTsK
KwlnX2Fzc2VydF9jbXB1aW50IChudGhfYXR0YWNoLCA9PSwgMyk7CisKKwllX2NhbF91dGlsX3Nh
bml0aXplX3VudHJ1c3RlZF9mdWxsIChpY29tcCwgdGVzdF9zYW5pdGl6ZV91bnRydXN0ZWRfdXJp
X25lZWRzX2NoYW5nZV9jYiwgKGdwb2ludGVyKSAiL2dvb2QvcGF0aC8iKTsKKworCWZvciAobnRo
X2F0dGFjaCA9IDAsIHByb3AgPSBpX2NhbF9jb21wb25lbnRfZ2V0X2ZpcnN0X3Byb3BlcnR5IChp
Y29tcCwgSV9DQUxfQU5ZX1BST1BFUlRZKTsKKwkgICAgIHByb3A7CisJICAgICBnX29iamVjdF91
bnJlZiAocHJvcCksIHByb3AgPSBpX2NhbF9jb21wb25lbnRfZ2V0X25leHRfcHJvcGVydHkgKGlj
b21wLCBJX0NBTF9BTllfUFJPUEVSVFkpKSB7CisJCWlmIChpX2NhbF9wcm9wZXJ0eV9pc2EgKHBy
b3ApID09IElfQ0FMX1VJRF9QUk9QRVJUWSkgeworCQkJZ19hc3NlcnRfY21wc3RyIChpX2NhbF9w
cm9wZXJ0eV9nZXRfdWlkIChwcm9wKSwgPT0sICI0Iik7CisJCX0gZWxzZSBpZiAoaV9jYWxfcHJv
cGVydHlfaXNhIChwcm9wKSA9PSBJX0NBTF9TVU1NQVJZX1BST1BFUlRZKSB7CisJCQlnX2Fzc2Vy
dF9jbXBzdHIgKGlfY2FsX3Byb3BlcnR5X2dldF9zdW1tYXJ5IChwcm9wKSwgPT0sICJmb3VydGgi
KTsKKwkJfSBlbHNlIGlmIChpX2NhbF9wcm9wZXJ0eV9pc2EgKHByb3ApID09IElfQ0FMX0FUVEFD
SF9QUk9QRVJUWSkgeworCQkJSUNhbEF0dGFjaCAqYXR0YWNoOworCisJCQlhdHRhY2ggPSBpX2Nh
bF9wcm9wZXJ0eV9nZXRfYXR0YWNoIChwcm9wKTsKKwkJCWdfYXNzZXJ0X25vbm51bGwgKGF0dGFj
aCk7CisKKwkJCW50aF9hdHRhY2grKzsKKworCQkJc3dpdGNoIChudGhfYXR0YWNoKSB7CisJCQlj
YXNlIDE6CisJCQkJZ19hc3NlcnRfdHJ1ZSAoaV9jYWxfYXR0YWNoX2dldF9pc191cmwgKGF0dGFj
aCkpOworCQkJCWdfYXNzZXJ0X2NtcHN0ciAoaV9jYWxfYXR0YWNoX2dldF91cmwgKGF0dGFjaCks
ID09LCAiZmlsZTovLy9nb29kL3BhdGgvZmlsZS50eHQiKTsKKwkJCQlnX2Fzc2VydF9jbXBpbnQg
KGlfY2FsX3Byb3BlcnR5X2NvdW50X3BhcmFtZXRlcnMgKHByb3ApLCA9PSwgMCk7CisJCQkJYnJl
YWs7CisJCQljYXNlIDI6CisJCQkJZ19hc3NlcnRfdHJ1ZSAoaV9jYWxfYXR0YWNoX2dldF9pc191
cmwgKGF0dGFjaCkpOworCQkJCWdfYXNzZXJ0X2NtcHN0ciAoaV9jYWxfYXR0YWNoX2dldF91cmwg
KGF0dGFjaCksID09LCAiY2lkOnBhcnQtaWQiKTsKKwkJCQlnX2Fzc2VydF9jbXBpbnQgKGlfY2Fs
X3Byb3BlcnR5X2NvdW50X3BhcmFtZXRlcnMgKHByb3ApLCA9PSwgMCk7CisJCQkJYnJlYWs7CisJ
CQljYXNlIDM6CisJCQkJZ19hc3NlcnRfdHJ1ZSAoaV9jYWxfYXR0YWNoX2dldF9pc191cmwgKGF0
dGFjaCkpOworCQkJCWdfYXNzZXJ0X2NtcHN0ciAoaV9jYWxfYXR0YWNoX2dldF91cmwgKGF0dGFj
aCksID09LCAieGZpbGU6Ly8vYmFkL3BhdGgvYmFkLnhtbCIpOworCQkJCWdfYXNzZXJ0X2NtcGlu
dCAoaV9jYWxfcHJvcGVydHlfY291bnRfcGFyYW1ldGVycyAocHJvcCksID09LCAwKTsKKwkJCQli
cmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CisJCQl9CisK
KwkJCWdfY2xlYXJfb2JqZWN0ICgmYXR0YWNoKTsKKwkJfSBlbHNlIHsKKwkJCWdfYXNzZXJ0X25v
dF9yZWFjaGVkICgpOworCQl9CisJfQorCisJZ19jbGVhcl9vYmplY3QgKCZwcm9wKTsKKworCWVf
Y2FsX3V0aWxfc2FuaXRpemVfdW50cnVzdGVkX2Z1bGwgKGljb21wLCB0ZXN0X3Nhbml0aXplX3Vu
dHJ1c3RlZF91cmlfbmVlZHNfY2hhbmdlX2NiLCAoZ3BvaW50ZXIpICIvYmFkL3BhdGgvIik7CisK
Kwlmb3IgKG50aF9hdHRhY2ggPSAwLCBwcm9wID0gaV9jYWxfY29tcG9uZW50X2dldF9maXJzdF9w
cm9wZXJ0eSAoaWNvbXAsIElfQ0FMX0FOWV9QUk9QRVJUWSk7CisJICAgICBwcm9wOworCSAgICAg
Z19vYmplY3RfdW5yZWYgKHByb3ApLCBwcm9wID0gaV9jYWxfY29tcG9uZW50X2dldF9uZXh0X3By
b3BlcnR5IChpY29tcCwgSV9DQUxfQU5ZX1BST1BFUlRZKSkgeworCQlpZiAoaV9jYWxfcHJvcGVy
dHlfaXNhIChwcm9wKSA9PSBJX0NBTF9VSURfUFJPUEVSVFkpIHsKKwkJCWdfYXNzZXJ0X2NtcHN0
ciAoaV9jYWxfcHJvcGVydHlfZ2V0X3VpZCAocHJvcCksID09LCAiNCIpOworCQl9IGVsc2UgaWYg
KGlfY2FsX3Byb3BlcnR5X2lzYSAocHJvcCkgPT0gSV9DQUxfU1VNTUFSWV9QUk9QRVJUWSkgewor
CQkJZ19hc3NlcnRfY21wc3RyIChpX2NhbF9wcm9wZXJ0eV9nZXRfc3VtbWFyeSAocHJvcCksID09
LCAiZm91cnRoIik7CisJCX0gZWxzZSBpZiAoaV9jYWxfcHJvcGVydHlfaXNhIChwcm9wKSA9PSBJ
X0NBTF9BVFRBQ0hfUFJPUEVSVFkpIHsKKwkJCUlDYWxBdHRhY2ggKmF0dGFjaDsKKworCQkJYXR0
YWNoID0gaV9jYWxfcHJvcGVydHlfZ2V0X2F0dGFjaCAocHJvcCk7CisJCQlnX2Fzc2VydF9ub25u
dWxsIChhdHRhY2gpOworCisJCQludGhfYXR0YWNoKys7CisKKwkJCXN3aXRjaCAobnRoX2F0dGFj
aCkgeworCQkJY2FzZSAxOgorCQkJCWdfYXNzZXJ0X3RydWUgKGlfY2FsX2F0dGFjaF9nZXRfaXNf
dXJsIChhdHRhY2gpKTsKKwkJCQlnX2Fzc2VydF9jbXBzdHIgKGlfY2FsX2F0dGFjaF9nZXRfdXJs
IChhdHRhY2gpLCA9PSwgInhmaWxlOi8vL2dvb2QvcGF0aC9maWxlLnR4dCIpOworCQkJCWdfYXNz
ZXJ0X2NtcGludCAoaV9jYWxfcHJvcGVydHlfY291bnRfcGFyYW1ldGVycyAocHJvcCksID09LCAw
KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlnX2Fzc2VydF90cnVlIChpX2NhbF9hdHRh
Y2hfZ2V0X2lzX3VybCAoYXR0YWNoKSk7CisJCQkJZ19hc3NlcnRfY21wc3RyIChpX2NhbF9hdHRh
Y2hfZ2V0X3VybCAoYXR0YWNoKSwgPT0sICJjaWQ6cGFydC1pZCIpOworCQkJCWdfYXNzZXJ0X2Nt
cGludCAoaV9jYWxfcHJvcGVydHlfY291bnRfcGFyYW1ldGVycyAocHJvcCksID09LCAwKTsKKwkJ
CQlicmVhazsKKwkJCWNhc2UgMzoKKwkJCQlnX2Fzc2VydF90cnVlIChpX2NhbF9hdHRhY2hfZ2V0
X2lzX3VybCAoYXR0YWNoKSk7CisJCQkJZ19hc3NlcnRfY21wc3RyIChpX2NhbF9hdHRhY2hfZ2V0
X3VybCAoYXR0YWNoKSwgPT0sICJmaWxlOi8vL2JhZC9wYXRoL2JhZC54bWwiKTsKKwkJCQlnX2Fz
c2VydF9jbXBpbnQgKGlfY2FsX3Byb3BlcnR5X2NvdW50X3BhcmFtZXRlcnMgKHByb3ApLCA9PSwg
MCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWdfYXNzZXJ0X25vdF9yZWFjaGVkICgp
OworCQkJfQorCisJCQlnX2NsZWFyX29iamVjdCAoJmF0dGFjaCk7CisJCX0gZWxzZSB7CisJCQln
X2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKwkJfQorCX0KKworCWdfY2xlYXJfb2JqZWN0ICgmcHJv
cCk7CisJZ19jbGVhcl9vYmplY3QgKCZpY29tcCk7CisJZ19hc3NlcnRfY21wdWludCAobnRoX2F0
dGFjaCwgPT0sIDMpOworfQorCisjdW5kZWYgdGVzdF9wYXJhbQorCiBnaW50CiBtYWluIChnaW50
IGFyZ2MsCiAgICAgICBnY2hhciAqKmFyZ3YpCkBAIC0zNjYsNiArODI2LDcgQEAKIAkJZV90ZXN0
X3NlcnZlcl91dGlsc19zZXR1cCwgdGVzdF9jbGFtcF92dGltZXpvbmUsIGVfdGVzdF9zZXJ2ZXJf
dXRpbHNfdGVhcmRvd24pOwogCWdfdGVzdF9hZGQgKCIvRUNhbFV0aWxzL0NhdGVnb3JpZXMiLCBF
VGVzdFNlcnZlckZpeHR1cmUsICZ0ZXN0X2Nsb3N1cmUsCiAJCWVfdGVzdF9zZXJ2ZXJfdXRpbHNf
c2V0dXAsIHRlc3RfY2F0ZWdvcmllcywgZV90ZXN0X3NlcnZlcl91dGlsc190ZWFyZG93bik7CisJ
Z190ZXN0X2FkZF9mdW5jICgiL0VDYWxVdGlscy9TYW5pdGl6ZVVudHJ1c3RlZCIsIHRlc3Rfc2Fu
aXRpemVfdW50cnVzdGVkKTsKIAogCXJldHVybiBlX3Rlc3Rfc2VydmVyX3V0aWxzX3J1biAoYXJn
YywgYXJndik7CiB9Cg==
--00000000000052a8ea065fc63709--
]