GNU logs - #78898, boring messages


Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#78898: Make read/readevalloop reentrant
Resent-From: Lynn Winebarger <owinebar@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Wed, 25 Jun 2025 22:01:05 +0000
Resent-Message-ID: <handler.78898.B.175088883323247 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: report 78898
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: 78898 <at> debbugs.gnu.org
X-Debbugs-Original-To: bug-gnu-emacs@HIDDEN
Received: via spool by submit <at> debbugs.gnu.org id=B.175088883323247
          (code B ref -1); Wed, 25 Jun 2025 22:01:05 +0000
Received: (at submit) by debbugs.gnu.org; 25 Jun 2025 22:00:33 +0000
Received: from localhost ([127.0.0.1]:39724 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uUYAS-00062n-Uz
	for submit <at> debbugs.gnu.org; Wed, 25 Jun 2025 18:00:33 -0400
Received: from lists.gnu.org ([2001:470:142::17]:57280)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <owinebar@HIDDEN>)
 id 1uUYAO-0005z4-VF
 for submit <at> debbugs.gnu.org; Wed, 25 Jun 2025 18:00:29 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <owinebar@HIDDEN>)
 id 1uUYAI-00008e-8r
 for bug-gnu-emacs@HIDDEN; Wed, 25 Jun 2025 18:00:22 -0400
Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <owinebar@HIDDEN>)
 id 1uUYA7-0000Cq-4w
 for bug-gnu-emacs@HIDDEN; Wed, 25 Jun 2025 18:00:21 -0400
Received: by mail-wr1-x42a.google.com with SMTP id
 ffacd0b85a97d-3a4eb4dfd8eso46130f8f.2
 for <bug-gnu-emacs@HIDDEN>; Wed, 25 Jun 2025 15:00:07 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1750888805; x=1751493605; darn=gnu.org;
 h=to:subject:message-id:date:from:mime-version:from:to:cc:subject
 :date:message-id:reply-to;
 bh=TMnGVL9C7COiKSV+MkD+BXwRc2YK6JzTTJgIaKmE6rM=;
 b=DgoZ54SwhfLXJqvdyACZaHKm/I/YCORQUQNQotidnVnLyH3GTtHTGoJSvEuoMSjVmT
 mFyK2STJ/w9GQaOK1O1d9J0u6qjdSfo438XD3OahB6fsoZ7HAqeF3F5zJXlUivngqkX1
 0ZylGKPLryNciSu2sYhJISusW7Uz8H2d6YQE62LD5gDjZsE1uN/LQv/Kiz/dKm6kz0et
 Bdy08c2OGzstyRKcDf4gS6dZaSPQQ2S6H1BoOWQVSH0UcfU7657vy8P4QVdkEigLlysm
 u/Lz82w8hOLyzPCQzp9w63Y9cewwmVpgmTT7onjNuDQym/2Ycwrsgez9lUuP+4VdtGxw
 Mb1w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1750888805; x=1751493605;
 h=to:subject:message-id:date:from:mime-version:x-gm-message-state
 :from:to:cc:subject:date:message-id:reply-to;
 bh=TMnGVL9C7COiKSV+MkD+BXwRc2YK6JzTTJgIaKmE6rM=;
 b=KZQNXFIcaWwopfPDv/902TXX2kf4NN7qjJaqX2ak4+5g/RMUPWMhHKTAwodCfjocJz
 0ZYWF8YBMjJ8t60Bj1K7xUOC0Ws9A/ZtZsmKNIZq5TGC9qtxQQ+ohEGJhqDTnNGoG/Ta
 GDiBYNio/EY9W+v+2ioxd19cjsYxYvj5NTCTzquGdZknHKTsuqd2tOGRxMbdkesDHz9h
 thbTymgs6acqkVtdIoEfT38whZUCyTh2FOEy69GlF08ikxHUNKiNRbR49raZzS+Hg9zJ
 6matBsJkMCMICLbaRIIfM/mw3B3sYSWvkFbRNK2DZVEmFryIxK4Oa3Rta5DuW3ZajG9d
 SPuQ==
X-Gm-Message-State: AOJu0YxKTZTf0Xj71Gtih9PyXpG2MEl3wdcJIZn6mO6ESpxVg1aT5e+B
 CzUG5h31TnUi9HWkkNgf2YJDdA4qbb9tPTUiB0D1ZBRPa/mkwHezQ/lS2eDDTY/3m3wVdTAKP0E
 1hhS6MksVLP2FdG6CcJU31E3jwEljcd6QB8Tr
X-Gm-Gg: ASbGncsby+zatV3IIJnzAE1VYkikXh3OM2f5PgAFHdwIj7m66Tx5gxkDXcXTPuKXrhR
 1uzSfmyj0ZBODYTxvbyLQFck3edh2CshHe6Jc/Q7iJ88L/eLJUYLCiGOloMRAAFDiCdmKls5F8i
 lx4VidRTV5ADkJnfzSayBwmlANXq16uuEHn3c9rIq70gj4V4LP0d1q7bI8
X-Google-Smtp-Source: AGHT+IGU3yNOGSp5R1Ldk3JiulkM+Sjxouwz6K4j7IEAmEmeb+EOE72PawGkUOVcsc0yHVlVLIouWYa1F5vjBHEXUjo=
X-Received: by 2002:a05:6000:4304:b0:3a3:5c97:70c with SMTP id
 ffacd0b85a97d-3a6ed647497mr1518836f8f.14.1750888805167; Wed, 25 Jun 2025
 15:00:05 -0700 (PDT)
MIME-Version: 1.0
From: Lynn Winebarger <owinebar@HIDDEN>
Date: Wed, 25 Jun 2025 17:59:53 -0400
X-Gm-Features: Ac12FXzD_npQwpv_bTKwMwc-WAJslr047lba9JXrvAeFDPnC8ImhtAKBwq7is9w
Message-ID: <CAM=F=bB2qY_xnrGHwbn1s3b_=f+vri0c252jGgTFpDtrN2pfgA@HIDDEN>
Content-Type: multipart/mixed; boundary="00000000000046262406386c91be"
Received-SPF: pass client-ip=2a00:1450:4864:20::42a;
 envelope-from=owinebar@HIDDEN; helo=mail-wr1-x42a.google.com
X-Spam_score_int: 0
X-Spam_score: -0.1
X-Spam_bar: /
X-Spam_report: (-0.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 PDS_OTHER_BAD_TLD=1.999, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=no autolearn_force=no
X-Spam_action: no action
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://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: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>

--00000000000046262406386c91be
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

In the recursive sense, not the "safe for concurrency" sense.

I want to use readevalloop to process command-line arguments, and my
initial attempts failed to handle '"(load "loadup.el") (princ
"Done")'.  So I took a stab at making all the entry points synchronize
with an explicit stack of continuation frames shared between read0 and
readevalloop.

The attached diff is against master from a couple of days ago.  For
me, a configure/build (from scratch) completes *almost* everything
(including the standard AOT native-compiled bits) - it chokes on
lisp/leim/ja-dic.el due to a failure in a compiled function in
bytecomp.elc.  There are clearly still some issues where the new code
is not dealing with unibyte/multibyte correctly.  For example, running
emacs -Q shows the initial scratch buffer contents as:

;; This buffer is for text that is not saved, and for Lisp evaluation.
;; To create a file, visit it with =C3=A2=E2=82=AC=CB=9CC-x C-f=C3=A2=E2=82=
=AC=E2=84=A2 and enter text in its buffer.

This is definitely not ready for committing, but I'm hoping someone
else finds this of interest and maybe can spot where I'm going wrong
with the unibyte/multibyte handling.  Or what is going on with
ja-dic.el.  The error I'm seeing there is in the execution of some
byte-code, where some bit-wise operator gets a non-numeric argument.
My only idea at present is to diff the byte-compiled libraries and see
what's going on there - theoretically, there shouldn't be any change
in the results of the byte-compiler.

Thanks,
Lynn

--00000000000046262406386c91be
Content-Type: text/x-patch; charset="US-ASCII"; name="reentrant-read.patch"
Content-Disposition: attachment; filename="reentrant-read.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_mcch2k7z0>
X-Attachment-Id: f_mcch2k7z0

ZGlmZiAtLWdpdCBhL3NyYy9jb2RpbmcuYyBiL3NyYy9jb2RpbmcuYwppbmRleCBhOTIzYjZiZDgy
ZC4uYjczYWQzOGNjMGEgMTAwNjQ0Ci0tLSBhL3NyYy9jb2RpbmcuYworKysgYi9zcmMvY29kaW5n
LmMKQEAgLTEyMzA0LDYgKzEyMzA0LDI5IEBAIHN5c3RlbSAoZS5nLiBgaXNvLTIwMjItN2JpdCcp
LgogICBmb3IgKGludCBpID0gMDsgaSA8IGNvZGluZ19jYXRlZ29yeV9tYXg7IGkrKykKICAgICBG
c2V0IChBUkVGIChWY29kaW5nX2NhdGVnb3J5X3RhYmxlLCBpKSwgUW5vX2NvbnZlcnNpb24pOwog
CisgIHBsaXN0WzFdID0gYXJnc1tjb2RpbmdfYXJnX25hbWVdID0gUXJhd190ZXh0OworICBwbGlz
dFszXSA9IGFyZ3NbY29kaW5nX2FyZ19tbmVtb25pY10gPSBtYWtlX2ZpeG51bSAoJ3QnKTsKKyAg
cGxpc3RbNV0gPSBhcmdzW2NvZGluZ19hcmdfY29kaW5nX3R5cGVdID0gUXJhd190ZXh0OworICAv
KiBUaGlzIGlzIGFscmVhZHkgc2V0LgorICAgICBwbGlzdFs3XSA9IGFyZ3NbY29kaW5nX2FyZ19h
c2NpaV9jb21wYXRpYmxlX3BdID0gUXQ7ICovCisgIHBsaXN0WzhdID0gaW50ZXJuX2Nfc3RyaW5n
ICgiOmNoYXJzZXQtbGlzdCIpOworICBwbGlzdFs5XSA9IGFyZ3NbY29kaW5nX2FyZ19jaGFyc2V0
X2xpc3RdID0gUW5pbDsKKyAgcGxpc3RbMTFdID0gYXJnc1tjb2RpbmdfYXJnX2Zvcl91bmlieXRl
XSA9IFF0OworI2RlZmluZSBSQVdfVEVYVF9ERVNDUklQVElPTiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAiUmF3IHRleHQsIHdoaWNoIG1lYW5zIHRleHQg
Y29udGFpbnMgcmFuZG9tIDgtYml0IGNvZGVzLlxuIiAgICAgICAgICAgXAorICAgICJFbmNvZGlu
ZyB0ZXh0IHdpdGggdGhpcyBjb2Rpbmcgc3lzdGVtIHByb2R1Y2VzIHRoZSBhY3R1YWwgYnl0ZVxu
IiAgXAorICAgICJzZXF1ZW5jZSBvZiB0aGUgdGV4dCBpbiBidWZmZXJzIGFuZCBzdHJpbmdzLiAg
QW4gZXhjZXB0aW9uIGlzIG1hZGUgZm9yXG4iIFwKKyAgICAiY2hhcmFjdGVycyBmcm9tIHRoZSBg
ZWlnaHQtYml0JyBjaGFyYWN0ZXIgc2V0LiAgRWFjaCBvZiB0aGVtIGlzIGVuY29kZWRcbiIgXAor
ICAgICJpbnRvIGEgc2luZ2xlIGJ5dGUuXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICJXaGVuIHlvdSB2aXNpdCBh
IGZpbGUgd2l0aCB0aGlzIGNvZGluZywgdGhlIGZpbGUgaXMgcmVhZCBpbnRvIGFcbiIgXAorICAg
ICJ1bmlieXRlIGJ1ZmZlciBhcyBpcyAoZXhjZXB0IGZvciBFT0wgZm9ybWF0KSwgdGh1cyBlYWNo
IGJ5dGUgb2YgYSBmaWxlXG4iIFwKKyAgICAiaXMgdHJlYXRlZCBhcyBhIGNoYXJhY3Rlci4iCisg
IHBsaXN0WzEzXSA9IGJ1aWxkX3N0cmluZyAoUkFXX1RFWFRfREVTQ1JJUFRJT04pOworICBwbGlz
dFsxNV0gPSBhcmdzW2NvZGluZ19hcmdfZW9sX3R5cGVdID0gUW5pbDsKKyAgYXJnc1tjb2Rpbmdf
YXJnX3BsaXN0XSA9IENBTExNQU5ZIChGbGlzdCwgcGxpc3QpOworICBGZGVmaW5lX2NvZGluZ19z
eXN0ZW1faW50ZXJuYWwgKGNvZGluZ19hcmdfbWF4LCBhcmdzKTsKKwogICBwZHVtcGVyX2RvX25v
d19hbmRfYWZ0ZXJfbG9hZCAocmVzZXRfY29kaW5nX2FmdGVyX3BkdW1wZXJfbG9hZCk7CiAKICAg
REVGU1lNIChRVW5rbm93bl9lcnJvciwgIlVua25vd24gZXJyb3IiKTsKZGlmZiAtLWdpdCBhL3Ny
Yy9scmVhZC5jIGIvc3JjL2xyZWFkLmMKaW5kZXggNDBlYjZhZDc4NzUuLmJkZmU1YzM1NTAwIDEw
MDY0NAotLS0gYS9zcmMvbHJlYWQuYworKysgYi9zcmMvbHJlYWQuYwpAQCAtNDYsNiArNDYsNyBA
QCAjZGVmaW5lIERFRklORV9TWU1CT0xTCiAjaW5jbHVkZSAicGR1bXBlci5oIgogI2luY2x1ZGUg
PGMtY3R5cGUuaD4KICNpbmNsdWRlIDx2bGEuaD4KKyNpbmNsdWRlICJzeXN0dHkuaCIKIAogI2lm
ZGVmIE1TRE9TCiAjaW5jbHVkZSAibXNkb3MuaCIKQEAgLTE2OCw0MCArMTY5LDE3IEBAICNkZWZp
bmUgVVNFX0FORFJPSURfQVNTRVRTCiAjIGVuZGlmCiAjZW5kaWYKIAotLyogVGhlIG9iamVjdHMg
b3IgcGxhY2Vob2xkZXJzIHJlYWQgd2l0aCB0aGUgI249b2JqZWN0IGZvcm0uCi0KLSAgIEEgaGFz
aCB0YWJsZSBtYXBzIGEgbnVtYmVyIHRvIGVpdGhlciBhIHBsYWNlaG9sZGVyICh3aGlsZSB0aGUK
LSAgIG9iamVjdCBpcyBzdGlsbCBiZWluZyBwYXJzZWQsIGluIGNhc2UgaXQncyByZWZlcmVuY2Vk
IHdpdGhpbiBpdHMKLSAgIG93biBkZWZpbml0aW9uKSBvciB0byB0aGUgY29tcGxldGVkIG9iamVj
dC4gIFdpdGggc21hbGwgaW50ZWdlcnMKLSAgIGZvciBrZXlzLCBpdCdzIGVmZmVjdGl2ZWx5IGxp
dHRsZSBtb3JlIHRoYW4gYSB2ZWN0b3IsIGJ1dCBpdCdsbAotICAgbWFuYWdlIGFueSBuZWVkZWQg
cmVzaXppbmcgZm9yIHVzLgotCi0gICBUaGUgdmFyaWFibGUgbXVzdCBiZSByZXNldCB0byBhbiBl
bXB0eSBoYXNoIHRhYmxlIGJlZm9yZSBhbGwKLSAgIHRvcC1sZXZlbCBjYWxscyB0byByZWFkMC4g
IEluIGJldHdlZW4gY2FsbHMsIGl0IG1heSBiZSBhbiBlbXB0eQotICAgaGFzaCB0YWJsZSBsZWZ0
IHVudXNlZCBmcm9tIHRoZSBwcmV2aW91cyBjYWxsICh0byByZWR1Y2UKLSAgIGFsbG9jYXRpb25z
KSwgb3IgbmlsLiAgKi8KLXN0YXRpYyBMaXNwX09iamVjdCByZWFkX29iamVjdHNfbWFwOwotCi0v
KiBUaGUgcmVjdXJzaXZlIG9iamVjdHMgcmVhZCB3aXRoIHRoZSAjbj1vYmplY3QgZm9ybS4KLQot
ICAgT2JqZWN0cyB0aGF0IG1pZ2h0IGhhdmUgY2lyY3VsYXIgcmVmZXJlbmNlcyBhcmUgc3RvcmVk
IGhlcmUsIHNvCi0gICB0aGF0IHJlY3Vyc2l2ZSBzdWJzdGl0dXRpb24ga25vd3Mgbm90IHRvIGtl
ZXAgcHJvY2Vzc2luZyB0aGVtCi0gICBtdWx0aXBsZSB0aW1lcy4KLQotICAgT25seSBvYmplY3Rz
IHRoYXQgYXJlIGNvbXBsZXRlbHkgcHJvY2Vzc2VkLCBpbmNsdWRpbmcgc3Vic3RpdHV0aW5nCi0g
ICByZWZlcmVuY2VzIHRvIHRoZW1zZWx2ZXMgKGJ1dCBub3QgbmVjZXNzYXJpbHkgcmVwbGFjaW5n
Ci0gICBwbGFjZWhvbGRlcnMgZm9yIG90aGVyIG9iamVjdHMgc3RpbGwgYmVpbmcgcmVhZCksIGFy
ZSBzdG9yZWQuCiAKLSAgIEEgaGFzaCB0YWJsZSBpcyB1c2VkIGZvciBlZmZpY2llbnQgbG9va3Vw
cyBvZiBrZXlzLiAgV2UgZG9uJ3QgY2FyZQotICAgd2hhdCB0aGUgdmFsdWUgc2xvdHMgaG9sZC4g
IFRoZSB2YXJpYWJsZSBtdXN0IGJlIHNldCB0byBhbiBlbXB0eQotICAgaGFzaCB0YWJsZSBiZWZv
cmUgYWxsIHRvcC1sZXZlbCBjYWxscyB0byByZWFkMC4gIEluIGJldHdlZW4gY2FsbHMsCi0gICBp
dCBtYXkgYmUgYW4gZW1wdHkgaGFzaCB0YWJsZSBsZWZ0IHVudXNlZCBmcm9tIHRoZSBwcmV2aW91
cyBjYWxsCi0gICAodG8gcmVkdWNlIGFsbG9jYXRpb25zKSwgb3IgbmlsLiAgKi8KKyNpZiAwCiBz
dGF0aWMgTGlzcF9PYmplY3QgcmVhZF9vYmplY3RzX2NvbXBsZXRlZDsKKyNlbmRpZgogCitlbnVt
IHsKKyAgSU5GSUxFX0JVRkZFUl9TSVpFID0gTUFYX01VTFRJQllURV9MRU5HVEggLSAxCit9Owog
LyogRmlsZSBhbmQgbG9va2FoZWFkIGZvciBnZXQtZmlsZS1jaGFyIGFuZCBnZXQtZW1hY3MtbXVs
ZS1maWxlLWNoYXIKICAgIHRvIHJlYWQgZnJvbS4gIFVzZWQgYnkgRmxvYWQuICAqLwotc3RhdGlj
IHN0cnVjdCBpbmZpbGUKK3N0cnVjdCBpbmZpbGUKIHsKICAgLyogVGhlIGlucHV0IHN0cmVhbS4g
ICovCiAgIGZpbGVfc3RyZWFtIHN0cmVhbTsKQEAgLTIxMSwxNiArMTg5LDEyMyBAQCAjZGVmaW5l
IFVTRV9BTkRST0lEX0FTU0VUUwogCiAgIC8qIExvb2thaGVhZCBieXRlcywgaW4gcmV2ZXJzZSBv
cmRlci4gIEtlZXAgdGhlc2UgaGVyZSBiZWNhdXNlIGl0IGlzCiAgICAgIG5vdCBwb3J0YWJsZSB0
byB1bmdldGMgbW9yZSB0aGFuIG9uZSBieXRlIGF0IGEgdGltZS4gICovCi0gIHVuc2lnbmVkIGNo
YXIgYnVmW01BWF9NVUxUSUJZVEVfTEVOR1RIIC0gMV07Ci19ICppbmZpbGU7CisgIHVuc2lnbmVk
IGNoYXIgYnVmW0lORklMRV9CVUZGRVJfU0laRV07CisgIC8qIGlzIHRoaXMgc2Vla2FibGU/ICov
CisgIGJvb2wgc2Vla2FibGU7CisgIGJvb2wgbXVsZTsKKyAgTGlzcF9PYmplY3QgY29kaW5nOwor
fTsKKworI2RlZmluZSBJTklUX0lORklMRSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICgoc3RydWN0IGluZmlsZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAuc3RyZWFtID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgIC5sb29rYWhlYWQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgLmJ1ZiA9ICB7IDAgfSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAuc2Vla2FibGUgPSBmYWxzZSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgIC5tdWxlID0gZmFsc2UgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgIH0gKQorCitzdHJ1Y3QgaW5zdHJpbmcKK3sKKyAgTGlz
cF9PYmplY3Qgc3RyaW5nOworICBwdHJkaWZmX3Qgc3RhcnQ7CisgIHB0cmRpZmZfdCBsaW1pdDsK
K307CisjZGVmaW5lIElOSVRfSU5TVFJJTkcoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgKChzdHJ1Y3QgaW5zdHJpbmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgIC5zdHJpbmcgPSBRbmlsLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgLnN0YXJ0ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAubGltaXQgPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICB9ICkKKworCitzdHJ1Y3QgaW5idWZmZXIKK3sKKyAgTGlzcF9P
YmplY3QgYnVmZmVyOworfTsKKyNkZWZpbmUgSU5JVF9JTkJVRkZFUigpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAoKHN0cnVjdCBpbmJ1ZmZlcikgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgLmJ1ZmZlciA9IFFuaWwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgfSApCisKK3N0cnVjdCBpbm1hcmtlcgorewor
ICBzdHJ1Y3QgaW5idWZmZXIgYjsKKyAgTGlzcF9PYmplY3QgbWFya2VyOworfTsKKyNkZWZpbmUg
SU5JVF9JTk1BUktFUigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKHN0
cnVjdCBpbm1hcmtlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgLmIgPSBJTklUX0lOQlVGRkVSKCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAubWFya2VyID0gUW5pbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICB9ICkKKworc3RydWN0IGlucHJvYworeworICBMaXNwX09iamVjdCBwcm9jOworfTsKK3N0
cnVjdCBpbmluZGlyZWN0Cit7CisgIHN0cnVjdCBscmVhZF9mcmFtZSAqc291cmNlOworfTsKKyNk
ZWZpbmUgSU5JVF9JTlBST0MoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAoKHN0cnVjdCBpbnByb2MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgLnByb2MgPSBRbmlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgfSApCisKK3R5cGVkZWYgZW51bSBscmVhZF9pbnB1dF90eXBlCit7CisgIExSRUFE
X0lOUFVUX1VOSU5JVCwKKyAgTFJFQURfSU5QVVRfRklMRSwKKyAgTFJFQURfSU5QVVRfRklMRV9N
VUxFLAorICBMUkVBRF9JTlBVVF9TVFJJTkcsCisgIExSRUFEX0lOUFVUX0JVRkZFUiwKKyAgTFJF
QURfSU5QVVRfTUFSS0VSLAorICBMUkVBRF9JTlBVVF9QUk9DRURVUkUsCisgIExSRUFEX0lOUFVU
X0JJTkFSWSwKKyAgTFJFQURfSU5QVVRfSU5ESVJFQ1QsCisgIExSRUFEX0lOUFVUX05VTEwKK30g
bHJlYWRfaW5wdXRfdHlwZTsKKworI2RlZmluZSBWQUxJRF9JTlBVVF9UWVBFKGluKSAoICgoaW4p
ID49IExSRUFEX0lOUFVUX1VOSU5JVCkgJiYgKChpbikgPD0gTFJFQURfSU5QVVRfTlVMTCkgKQor
CisjZGVmaW5lIEZST01fRklMRV9QKGFyZykgICAgICAgICAgICAgICAgICAgICAgICBcCisoKGFy
ZykgPT0gTFJFQURfSU5QVVRfRklMRSB8fCAoYXJnKSA9PSBMUkVBRF9JTlBVVF9GSUxFX01VTEUp
CisjZGVmaW5lIEZST01fQlVGRkVSX1AoYXJnKSAoKGFyZykgPT0gTFJFQURfSU5QVVRfQlVGRkVS
KQorI2RlZmluZSBGUk9NX01BUktFUl9QKGFyZykgKChhcmcpID09IExSRUFEX0lOUFVUX01BUktF
UikKKyNkZWZpbmUgSEFTX0JVRkZFUl9QKGFyZykgKChGUk9NX0JVRkZFUl9QIChhcmcpKSB8fCAo
RlJPTV9NQVJLRVJfUCAoYXJnKSkpCisjaWYgMAorI2RlZmluZSBGUk9NX1BST0NfUChhcmcpICgo
YXJnKSA9PSBMUkVBRF9JTlBVVF9QUk9DRURVUkUpCisjZGVmaW5lIEZST01fU1RSSU5HX1AoYXJn
KSAoKGFyZykgPT0gTFJFQURfSU5QVVRfU1RSSU5HKQorI2VuZGlmCisKK3N0cnVjdCBpbm51bGwK
K3sKK307CisKK2VudW0geworICBMUkVBRF9JTlBVVF9TSVpFID0gTUFYIChNQVggKHNpemVvZiAo
c3RydWN0IGluZmlsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChz
dHJ1Y3QgaW5tYXJrZXIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChzdHJ1
Y3QgaW5zdHJpbmcpKQorfTsKK3R5cGVkZWYgdW5pb24gbHJlYWRfaW5wdXQKK3sKKyAgdW5zaWdu
ZWQgY2hhciB1bmluaXRbTFJFQURfSU5QVVRfU0laRV07CisgIHN0cnVjdCBpbmZpbGUgZjsKKyAg
c3RydWN0IGluc3RyaW5nIHM7CisgIHN0cnVjdCBpbmJ1ZmZlciBiOworICBzdHJ1Y3QgaW5tYXJr
ZXIgbTsKKyAgc3RydWN0IGlucHJvYyBwOworICBzdHJ1Y3QgaW5pbmRpcmVjdCBmcmFtZTsKKyAg
c3RydWN0IGlubnVsbCBuOworfSBscmVhZF9pbnB1dDsKIAotLyogRm9yIHVzZSB3aXRoaW4gcmVh
ZC1mcm9tLXN0cmluZyAodGhpcyByZWFkZXIgaXMgbm9uLXJlZW50cmFudCEhKSAgKi8KLXN0YXRp
YyBwdHJkaWZmX3QgcmVhZF9mcm9tX3N0cmluZ19pbmRleDsKLXN0YXRpYyBwdHJkaWZmX3QgcmVh
ZF9mcm9tX3N0cmluZ19pbmRleF9ieXRlOwotc3RhdGljIHB0cmRpZmZfdCByZWFkX2Zyb21fc3Ry
aW5nX2xpbWl0OworI2RlZmluZSBJTklUX0xSRUFEX0lOUFVUIChscmVhZF9pbnB1dCkgeyAudW5p
bml0ICA9ICB7IDAgfSB9CiAKLS8qIFBvc2l0aW9uIGluIG9iamVjdCBmcm9tIHdoaWNoIGNoYXJh
Y3RlcnMgYXJlIGJlaW5nIHJlYWQgYnkgYHJlYWRjaGFyJy4gICovCi1zdGF0aWMgRU1BQ1NfSU5U
IHJlYWRjaGFyX29mZnNldDsKIAogc3RydWN0IHNhdmVkX3N0cmluZyB7CiAgIGNoYXIgKnN0cmlu
ZzsgICAgICAgICAgICAgICAgIC8qIHN0cmluZyBpbiBhbGxvY2F0ZWQgYnVmZmVyICovCkBAIC0y
MjgsMjI1ICszMTMsMTI5OCBAQCAjZGVmaW5lIFVTRV9BTkRST0lEX0FTU0VUUwogICBwdHJkaWZm
X3QgbGVuZ3RoOyAgICAgICAgICAgICAvKiBsZW5ndGggb2Ygc3RyaW5nIGluIGJ1ZmZlciAqLwog
ICBmaWxlX29mZnNldCBwb3NpdGlvbjsgICAgICAgICAvKiBwb3NpdGlvbiBpbiBmaWxlIHRoZSBz
dHJpbmcgY2FtZSBmcm9tICovCiB9OworI2RlZmluZSBJTklUX1NBVkVEX1NUUklORyAoKHN0cnVj
dCBzYXZlZF9zdHJpbmcpIHsgTlVMTCwgMCwgMCwgMCB9KQogCisjaWYgMAogLyogVGhlIGxhc3Qg
dHdvIHN0cmluZ3Mgc2tpcHBlZCB3aXRoICNAIChtb3N0IHJlY2VudCBmaXJzdCkuICAqLwogc3Rh
dGljIHN0cnVjdCBzYXZlZF9zdHJpbmcgc2F2ZWRfc3RyaW5nc1syXTsKKyNlbmRpZgogCi0vKiBB
IGxpc3Qgb2YgZmlsZSBuYW1lcyBmb3IgZmlsZXMgYmVpbmcgbG9hZGVkIGluIEZsb2FkLiAgVXNl
ZCB0bwotICAgY2hlY2sgZm9yIHJlY3Vyc2l2ZSBsb2Fkcy4gICovCit0eXBlZGVmIGVudW0gbHJl
YWRfbXVsdGlieXRlCit7CisgIExSRUFEX01VTFRJQllURV9JTkRFVEVSTUlOQVRFID0gLTEsIC8q
IEZvciByZXNldHRpbmcgICovCisgIExSRUFEX01VTFRJQllURV9GQUxTRSAgPSAwLAorICBMUkVB
RF9NVUxUSUJZVEVfVFJVRSAgPSAxCit9IGxyZWFkX211bHRpYnl0ZTsKIAotc3RhdGljIExpc3Bf
T2JqZWN0IFZsb2Fkc19pbl9wcm9ncmVzczsKIAotc3RhdGljIGludCByZWFkX2VtYWNzX211bGVf
Y2hhciAoaW50LCBpbnQgKCopIChpbnQsIExpc3BfT2JqZWN0KSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIExpc3BfT2JqZWN0KTsKKyNkZWZpbmUgVkFMSURfTVVMVElCWVRFX01B
U0sgKChscmVhZF9tdWx0aWJ5dGUpIH4oMUwpKQorI2RlZmluZSBWQUxJRF9NVUxUSUJZVEUobSkg
KCAoIChWQUxJRF9NVUxUSUJZVEVfTUFTSykgJiAoIChscmVhZF9tdWx0aWJ5dGUpIG0gKSApID09
ICgobHJlYWRfbXVsdGlieXRlKSAwKSApCisvKiBUaGUgcmVmZXJlbmNlIG9iYXJyYXkgZm9yIGlu
dGVybmluZyBzeW1ib2xzIGVzdGFibGlzaGVkIGF0IGluaXRpYWxpemF0aW9uCisgICBvbmx5IHdy
aXR0ZW4gdG8gb25jZS4gKi8KK3N0YXRpYyBMaXNwX09iamVjdCBpbml0aWFsX29iYXJyYXk7CiAK
LXN0YXRpYyB2b2lkIHJlYWRldmFsbG9vcCAoTGlzcF9PYmplY3QsIHN0cnVjdCBpbmZpbGUgKiwg
TGlzcF9PYmplY3QsIGJvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIExpc3BfT2JqZWN0
LCBMaXNwX09iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzcF9PYmplY3QsIExp
c3BfT2JqZWN0KTsKK3N0YXRpYyBMaXNwX09iamVjdCBtYWtlX29iYXJyYXkgKHVuc2lnbmVkIGJp
dHMpOwogCi1zdGF0aWMgdm9pZCBidWlsZF9sb2FkX2hpc3RvcnkgKExpc3BfT2JqZWN0LCBib29s
KTsKKy8qIFdoZW4gYW4gb2JqZWN0IGlzIHJlYWQsIHRoZSB0eXBlIG9mIHRoZSB0b3AgcmVhZCBz
dGFjayBlbnRyeSBpbmRpY2F0ZXMKKyAgIHRoZSBzeW50YWN0aWMgY29udGV4dC4gICovCitlbnVt
IHJlYWRfZW50cnlfdHlwZQoreworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBw
cmVjZWRpbmcgc3ludGFjdGljIGNvbnRleHQgKi8KKyAgUkVfbGlzdF9zdGFydCwgICAgICAgICAg
ICAgICAgLyogIigiICovCiAKLXN0YXRpYyBMaXNwX09iamVjdCBvYmxvb2t1cF9jb25zaWRlcmlu
Z19zaG9ydGhhbmQgKExpc3BfT2JqZWN0LCBjb25zdCBjaGFyICosCi0JCQkJCQkgICBwdHJkaWZm
X3QsIHB0cmRpZmZfdCwKLQkJCQkJCSAgIGNoYXIgKiosIHB0cmRpZmZfdCAqLAotCQkJCQkJICAg
cHRyZGlmZl90ICopOworICBSRV9saXN0LCAgICAgICAgICAgICAgICAgICAgICAvKiAiKCIgKCsg
T0JKRUNUKSAqLworICBSRV9saXN0X2RvdCwgICAgICAgICAgICAgICAgICAvKiAiKCIgKCsgT0JK
RUNUKSAiLiIgKi8KIAotDAotLyogRnVuY3Rpb24gdGhhdCByZWFkcyBvbmUgYnl0ZSBmcm9tIHRo
ZSBjdXJyZW50IHNvdXJjZSBSRUFEQ0hBUkZVTgotICAgb3IgdW5yZWFkcyBvbmUgYnl0ZS4gIElm
IHRoZSBpbnRlZ2VyIGFyZ3VtZW50IEMgaXMgLTEsIGl0IHJldHVybnMKLSAgIG9uZSByZWFkIGJ5
dGUsIG9yIC0xIHdoZW4gdGhlcmUncyBubyBtb3JlIGJ5dGUgaW4gdGhlIHNvdXJjZS4gIElmIEMK
LSAgIGlzIDAgb3IgcG9zaXRpdmUsIGl0IHVucmVhZHMgQywgYW5kIHRoZSByZXR1cm4gdmFsdWUg
aXMgbm90Ci0gICBpbnRlcmVzdGluZy4gICovCisgIFJFX3ZlY3RvciwgICAgICAgICAgICAgICAg
ICAgIC8qICJbIiAoKiBPQkpFQ1QpICovCisgIFJFX3JlY29yZCwgICAgICAgICAgICAgICAgICAg
IC8qICIjcygiICgqIE9CSkVDVCkgKi8KKyAgUkVfY2hhcl90YWJsZSwgICAgICAgICAgICAgICAg
LyogIiNeWyIgKCogT0JKRUNUKSAqLworICBSRV9zdWJfY2hhcl90YWJsZSwgICAgICAgICAgICAv
KiAiI15eWyIgKCogT0JKRUNUKSAqLworICBSRV9ieXRlX2NvZGUsICAgICAgICAgICAgICAgICAv
KiAiI1siICgqIE9CSkVDVCkgKi8KKyAgUkVfc3RyaW5nX3Byb3BzLCAgICAgICAgICAgICAgLyog
IiMoIiAoKiBPQkpFQ1QpICovCiAKLXN0YXRpYyBpbnQgcmVhZGJ5dGVfZnJvbV9maWxlIChpbnQs
IExpc3BfT2JqZWN0KTsKKyAgUkVfc3BlY2lhbCwgICAgICAgICAgICAgICAgICAgLyogIiciIHwg
IiMnIiB8ICJgIiB8ICIsIiB8ICIsQCIgKi8KIAotLyogSGFuZGxlIHVucmVhZGluZyBhbmQgcmVy
ZWFkaW5nIG9mIGNoYXJhY3RlcnMuCi0gICBXcml0ZSBSRUFEQ0hBUiB0byByZWFkIGEgY2hhcmFj
dGVyLAotICAgVU5SRUFEKGMpIHRvIHVucmVhZCBjIHRvIGJlIHJlYWQgYWdhaW4uCisgIFJFX251
bWJlcmVkLCAgICAgICAgICAgICAgICAgIC8qICIjIiAoKyBESUdJVCkgIj0iICovCit9OwogCi0g
ICBUaGVzZSBtYWNyb3MgY29ycmVjdGx5IHJlYWQvdW5yZWFkIG11bHRpYnl0ZSBjaGFyYWN0ZXJz
LiAgKi8KK3N0cnVjdCByZWFkX3N0YWNrX2VudHJ5Cit7CisgIGVudW0gcmVhZF9lbnRyeV90eXBl
IHR5cGU7CisgIHVuaW9uIHsKKyAgICAvKiBSRV9saXN0LCBSRV9saXN0X2RvdCAqLworICAgIHN0
cnVjdCB7CisgICAgICBMaXNwX09iamVjdCBoZWFkOyAgICAgICAgIC8qIGZpcnN0IGNvbnMgb2Yg
bGlzdCAqLworICAgICAgTGlzcF9PYmplY3QgdGFpbDsgICAgICAgICAvKiBsYXN0IGNvbnMgb2Yg
bGlzdCAqLworICAgIH0gbGlzdDsKKworICAgIC8qIFJFX3ZlY3RvciwgUkVfcmVjb3JkLCBSRV9j
aGFyX3RhYmxlLCBSRV9zdWJfY2hhcl90YWJsZSwKKyAgICAgICBSRV9ieXRlX2NvZGUsIFJFX3N0
cmluZ19wcm9wcyAqLworICAgIHN0cnVjdCB7CisgICAgICBMaXNwX09iamVjdCBlbGVtczsgICAg
ICAgIC8qIGxpc3Qgb2YgZWxlbWVudHMgaW4gcmV2ZXJzZSBvcmRlciAqLworICAgICAgYm9vbCBv
bGRfbG9jYXRlX3N5bXM7ICAgICAvKiBvbGQgdmFsdWUgb2YgbG9jYXRlX3N5bXMgKi8KKyAgICB9
IHZlY3RvcjsKKworICAgIC8qIFJFX3NwZWNpYWwgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgTGlz
cF9PYmplY3Qgc3ltYm9sOyAgICAgICAvKiBzeW1ib2wgZnJvbSBzcGVjaWFsIHN5bnRheCAqLwor
ICAgIH0gc3BlY2lhbDsKKworICAgIC8qIFJFX251bWJlcmVkICovCisgICAgc3RydWN0IHsKKyAg
ICAgIExpc3BfT2JqZWN0IG51bWJlcjsgICAgICAgLyogbnVtYmVyIGFzIGEgZml4bnVtICovCisg
ICAgICBMaXNwX09iamVjdCBwbGFjZWhvbGRlcjsgIC8qIHBsYWNlaG9sZGVyIG9iamVjdCAqLwor
ICAgIH0gbnVtYmVyZWQ7CisgIH0gdTsKK307CisKK3N0cnVjdCByZWFkX3N0YWNrCit7CisgIHN0
cnVjdCByZWFkX3N0YWNrX2VudHJ5ICpzdGFjazsgIC8qIGJhc2Ugb2Ygc3RhY2sgKi8KKyAgcHRy
ZGlmZl90IHNpemU7ICAgICAgICAgICAgICAgICAgLyogYWxsb2NhdGVkIHNpemUgaW4gZW50cmll
cyAqLworICBwdHJkaWZmX3Qgc3A7ICAgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IG51bWJl
ciBvZiBlbnRyaWVzICovCit9OwogCi0jZGVmaW5lIFJFQURDSEFSIHJlYWRjaGFyIChyZWFkY2hh
cmZ1biwgTlVMTCkKLSNkZWZpbmUgVU5SRUFEKGMpIHVucmVhZGNoYXIgKHJlYWRjaGFyZnVuLCBj
KQorI2RlZmluZSBJTklUX1JFQURfU1RBQ0sge05VTEwsIDAsIDB9CisjaWYgMAorc3RhdGljIHN0
cnVjdCByZWFkX3N0YWNrIHJkc3RhY2sgPSB7TlVMTCwgMCwgMH07CisjZW5kaWYKKworLyogc3Rk
aW4gaXMgdGhlIG9ubHkgZmlsZSBkZXNjcmlwdG9yIGZvciB3aGljaCBuZXN0ZWQgcmVhZHMgYXJl
CisgICBleHBlY3RlZCB0byBjb25zdW1lIGNoYXJhY3RlcnMgaW4gYSBub24tcmVlbnRyYW50IHdh
eQorICAgVGhhdCBpcywgYSB1c2VyIHByb3ZpZGluZyBpbnB1dCB0byBhIGxpc3AgcHJvZ3JhbSBi
ZWluZyAibG9hZGVkIgorICAgZnJvbSBzdGRpbiBzaG91bGQgbm90IGV4cGVjdCB0aGF0IGlucHV0
IHRvIGJlIHJlYWQgYWdhaW4gYXMgcGFydAorICAgb2YgdGhhdCBsaXNwIHByb2dyYW0uCisgICBD
bG9zaW5nIGFuZCByZW9wZW5pbmcgc3RkaW4gbXVzdCByZWluaXRpYWxpemUgdGhpcyBkYXRhIGZv
ciB0aGlzCisgICB0byB3b3JrLgorKi8KK3N0YXRpYyBzdHJ1Y3QgbHJlYWRfc3RkaW9fZGF0YQor
eworICBzdHJ1Y3QgaW5maWxlIHM7CisgIHB0cmRpZmZfdCBjaGFyX29mZnNldDsKKyAgcHRyZGlm
Zl90IGJ5dGVfb2Zmc2V0OworICBpbnQgdW5yZWFkX2NoYXI7CisgIGludCB1bnJlYWRfYnl0ZXM7
CisgIGJvb2wgcmVhZF9lb2Y7CisgIGJvb2wgbXVsdGlieXRlOworICBMaXNwX09iamVjdCBjb2Rp
bmc7Cit9IHN0ZGluX2luZmlsZTsKIAotLyogU2FtZSBhcyBSRUFEQ0hBUiBidXQgc2V0ICpNVUxU
SUJZVEUgdG8gdGhlIG11bHRpYnl0ZW5lc3Mgb2YgdGhlIHNvdXJjZS4gICovCi0jZGVmaW5lIFJF
QURDSEFSX1JFUE9SVF9NVUxUSUJZVEUobXVsdGlieXRlKSByZWFkY2hhciAocmVhZGNoYXJmdW4s
IG11bHRpYnl0ZSkKIAotLyogV2hlbiBSRUFEQ0hBUkZVTiBpcyBRZ2V0X2ZpbGVfY2hhciBvciBR
Z2V0X2VtYWNzX211bGVfZmlsZV9jaGFyLAorLyogU2F2ZSBhbGwgc3RhdGUgdG8gcmVzdG9yZSBm
b3IgcmVhZCAqLworLyogaS5lLiBhbGwgc3RhdGljIEMgdmFyaWFibGVzIEZyZWFkIHJlZmVyZW5j
ZXMgICovCisvKiBTaG91bGQgdGhpcyBpbmNsdWRlIGluaXRpYWxfb2JhcnJheSBhbmQgb2Jsb29r
dXBfbGFzdF9idWNrZXRfbnVtYmVyPyAqLwordHlwZWRlZiBlbnVtIGxyZWFkX2ZyYW1lX3R5cGUK
K3sKKyAgTFJFQURfRlJBTUVfVU5JTklULAorICAvKiBzb21lIGZvcm0gb2YgInJlYWQiIGNhbGwq
LworICBMUkVBRF9GUkFNRV9TSU5HTEUsCisgIC8qIHNvbWUgZm9ybSBvZiByZWFkZXZhbGxvb3Ag
Y2FsbCovCisgIExSRUFEX0ZSQU1FX01VTFRJUExFCit9IGxyZWFkX2ZyYW1lX3R5cGU7CisKK3R5
cGVkZWYgc3RydWN0IGxyZWFkX2ZyYW1lIGxyZWFkX2ZyYW1lOwordHlwZWRlZiBpbnQgKCpyZWFk
b25lY2hhcl9mdW5jKShyZWdpc3RlciBscmVhZF9mcmFtZSAqKTsKK3N0cnVjdCBscmVhZF9mcmFt
ZQoreworICBscmVhZF9mcmFtZV90eXBlIHR5cGU7CisgIGxyZWFkX2ZyYW1lICpwcmV2OworICBs
cmVhZF9pbnB1dF90eXBlIGludHlwZTsKKyAgbHJlYWRfaW5wdXQgaW5wdXQ7CisgIHJlYWRvbmVj
aGFyX2Z1bmMgcmVhZG9uZWNoYXI7CisgIC8qIGZyYW1lIG1heSByZXF1aXJlIHVud2luZGluZyBh
cm91bmQgaW50ZXJydXB0IHByb2Nlc3NpbmcvZXZhbCAqLworICBzcGVjcGRsX3JlZiBkeW5hbWlj
X2ZyYW1lOworICBzcGVjcGRsX3JlZiByZXN0b3JlX2ZyYW1lX2lkeDsKKyAgLyogV2hlbiBSRUFE
Q0hBUkZVTiBpcyBRZ2V0X2ZpbGVfY2hhciBvciBRZ2V0X2VtYWNzX211bGVfZmlsZV9jaGFyLAog
ICAgICB3ZSB1c2UgdGhpcyB0byBrZWVwIGFuIHVucmVhZCBjaGFyYWN0ZXIgYmVjYXVzZQogICAg
ICBhIGZpbGUgc3RyZWFtIGNhbid0IGhhbmRsZSBtdWx0aWJ5dGUtY2hhciB1bnJlYWRpbmcuICBU
aGUgdmFsdWUgLTEKICAgICAgbWVhbnMgdGhhdCB0aGVyZSdzIG5vIHVucmVhZCBjaGFyYWN0ZXIu
ICAqLwotc3RhdGljIGludCB1bnJlYWRfY2hhciA9IC0xOworICBpbnQgdW5yZWFkX2NoYXI7Cisg
IC8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgdG8gZW5jb2RlIHVucmVhZF9jaGFyKi8K
KyAgaW50IHVucmVhZF9ieXRlczsKKyAgYm9vbCByZWFkX2VvZjsKKyAgcHRyZGlmZl90IGNoYXJf
b2Zmc2V0OworICBwdHJkaWZmX3QgYnl0ZV9vZmZzZXQ7CisgIHN0cnVjdCBzYXZlZF9zdHJpbmcg
c2F2ZWRfc3RyaW5nc1syXTsKKyAgc3RydWN0IHJlYWRfc3RhY2sgcmRzdGFjazsKKyAgcHRyZGlm
Zl90IGJhc2Vfc3A7CisgIC8qIEEgbGlzdCBvZiBmaWxlIG5hbWVzIGZvciBmaWxlcyBiZWluZyBs
b2FkZWQgaW4gRmxvYWQuCisgICAgIFVzZWQgdG8gY2hlY2sgZm9yIHJlY3Vyc2l2ZSBsb2FkcyAq
LworICBMaXNwX09iamVjdCBsb2Fkc19pbl9wcm9ncmVzczsKKy8qIFRoZSBvYmplY3RzIG9yIHBs
YWNlaG9sZGVycyByZWFkIHdpdGggdGhlICNuPW9iamVjdCBmb3JtLgogCi1zdGF0aWMgaW50Ci1y
ZWFkY2hhciAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGJvb2wgKm11bHRpYnl0ZSkKLXsKLSAg
TGlzcF9PYmplY3QgdGVtOwotICByZWdpc3RlciBpbnQgYzsKLSAgaW50ICgqcmVhZGJ5dGUpIChp
bnQsIExpc3BfT2JqZWN0KTsKLSAgdW5zaWduZWQgY2hhciBidWZbTUFYX01VTFRJQllURV9MRU5H
VEhdOwotICBpbnQgaSwgbGVuOwotICBib29sIGVtYWNzX211bGVfZW5jb2RpbmcgPSAwOworICAg
QSBoYXNoIHRhYmxlIG1hcHMgYSBudW1iZXIgdG8gZWl0aGVyIGEgcGxhY2Vob2xkZXIgKHdoaWxl
IHRoZQorICAgb2JqZWN0IGlzIHN0aWxsIGJlaW5nIHBhcnNlZCwgaW4gY2FzZSBpdCdzIHJlZmVy
ZW5jZWQgd2l0aGluIGl0cworICAgb3duIGRlZmluaXRpb24pIG9yIHRvIHRoZSBjb21wbGV0ZWQg
b2JqZWN0LiAgV2l0aCBzbWFsbCBpbnRlZ2VycworICAgZm9yIGtleXMsIGl0J3MgZWZmZWN0aXZl
bHkgbGl0dGxlIG1vcmUgdGhhbiBhIHZlY3RvciwgYnV0IGl0J2xsCisgICBtYW5hZ2UgYW55IG5l
ZWRlZCByZXNpemluZyBmb3IgdXMuCiAKLSAgaWYgKG11bHRpYnl0ZSkKLSAgICAqbXVsdGlieXRl
ID0gMDsKKyAgIFRoZSB2YXJpYWJsZSBtdXN0IGJlIHJlc2V0IHRvIGFuIGVtcHR5IGhhc2ggdGFi
bGUgYmVmb3JlIGFsbAorICAgdG9wLWxldmVsIGNhbGxzIHRvIHJlYWQwLiAgSW4gYmV0d2VlbiBj
YWxscywgaXQgbWF5IGJlIGFuIGVtcHR5CisgICBoYXNoIHRhYmxlIGxlZnQgdW51c2VkIGZyb20g
dGhlIHByZXZpb3VzIGNhbGwgKHRvIHJlZHVjZQorICAgYWxsb2NhdGlvbnMpLCBvciBuaWwuICAq
LworICBMaXNwX09iamVjdCBvYmplY3RzX21hcDsKIAotICByZWFkY2hhcl9vZmZzZXQrKzsKKy8q
IFRoZSByZWN1cnNpdmUgb2JqZWN0cyByZWFkIHdpdGggdGhlICNuPW9iamVjdCBmb3JtLgogCi0g
IGlmIChCVUZGRVJQIChyZWFkY2hhcmZ1bikpCi0gICAgewotICAgICAgcmVnaXN0ZXIgc3RydWN0
IGJ1ZmZlciAqaW5idWZmZXIgPSBYQlVGRkVSIChyZWFkY2hhcmZ1bik7CisgICBPYmplY3RzIHRo
YXQgbWlnaHQgaGF2ZSBjaXJjdWxhciByZWZlcmVuY2VzIGFyZSBzdG9yZWQgaGVyZSwgc28KKyAg
IHRoYXQgcmVjdXJzaXZlIHN1YnN0aXR1dGlvbiBrbm93cyBub3QgdG8ga2VlcCBwcm9jZXNzaW5n
IHRoZW0KKyAgIG11bHRpcGxlIHRpbWVzLgogCi0gICAgICBwdHJkaWZmX3QgcHRfYnl0ZSA9IEJV
Rl9QVF9CWVRFIChpbmJ1ZmZlcik7CisgICBPbmx5IG9iamVjdHMgdGhhdCBhcmUgY29tcGxldGVs
eSBwcm9jZXNzZWQsIGluY2x1ZGluZyBzdWJzdGl0dXRpbmcKKyAgIHJlZmVyZW5jZXMgdG8gdGhl
bXNlbHZlcyAoYnV0IG5vdCBuZWNlc3NhcmlseSByZXBsYWNpbmcKKyAgIHBsYWNlaG9sZGVycyBm
b3Igb3RoZXIgb2JqZWN0cyBzdGlsbCBiZWluZyByZWFkKSwgYXJlIHN0b3JlZC4KIAotICAgICAg
aWYgKCEgQlVGRkVSX0xJVkVfUCAoaW5idWZmZXIpKQotCXJldHVybiAtMTsKKyAgIEEgaGFzaCB0
YWJsZSBpcyB1c2VkIGZvciBlZmZpY2llbnQgbG9va3VwcyBvZiBrZXlzLiAgV2UgZG9uJ3QgY2Fy
ZQorICAgd2hhdCB0aGUgdmFsdWUgc2xvdHMgaG9sZC4gIFRoZSB2YXJpYWJsZSBtdXN0IGJlIHNl
dCB0byBhbiBlbXB0eQorICAgaGFzaCB0YWJsZSBiZWZvcmUgYWxsIHRvcC1sZXZlbCBjYWxscyB0
byByZWFkMC4gIEluIGJldHdlZW4gY2FsbHMsCisgICBpdCBtYXkgYmUgYW4gZW1wdHkgaGFzaCB0
YWJsZSBsZWZ0IHVudXNlZCBmcm9tIHRoZSBwcmV2aW91cyBjYWxsCisgICAodG8gcmVkdWNlIGFs
bG9jYXRpb25zKSwgb3IgbmlsLiAgKi8KKyAgTGlzcF9PYmplY3Qgb2JqZWN0c19jb21wbGV0ZWQ7
CisgIGxyZWFkX211bHRpYnl0ZSBtdWx0aWJ5dGU7CisgIGJvb2wgbG9jYXRlX3N5bXM7CisgIExp
c3BfT2JqZWN0IHN0YXJ0OworICBMaXNwX09iamVjdCBlbmQ7CisgIGJvb2wgaW50ZXJydXB0ZWQ7
CisgIC8qIG9ubHkgc2V0IGZvciBlbWFjcy1tdWxlIGVuY29kZWQgZmlsZSwgZm9yIGxhc3QgcmVh
ZCBjaGFyYWN0ZXIgKi8KKyAgc3RydWN0IGNoYXJzZXQgKm11bGVfY2hhcnNldDsKKyAgLyogVGhl
c2UgYXJlIG9ubHkgdXNlZCBpbiBNVUxUSVBMRSB0eXBlIGZyYW1lcyovCisgIGludCBuZXhwcnM7
CisgIHNwZWNwZGxfcmVmIGxvb3BfZHluYW1pY19mcmFtZTsKKyAgYm9vbCB3aG9sZV9idWZmZXI7
CisgIExpc3BfT2JqZWN0IGZ1bGxfbmFtZTsKKyAgTGlzcF9PYmplY3QgbmFtZTsKKyAgTGlzcF9P
YmplY3Qgc291cmNlbmFtZTsKKyAgTGlzcF9PYmplY3QgcmVhZGZ1bjsKKyAgYm9vbCBwcmludGZs
YWc7CisgIExpc3BfT2JqZWN0IHZhbHVlOworICBMaXNwX09iamVjdCBlcnJvcjsKK307CiAKLSAg
ICAgIGlmIChwdF9ieXRlID49IEJVRl9aVl9CWVRFIChpbmJ1ZmZlcikpCi0JcmV0dXJuIC0xOwor
I2lmZGVmIFdSQVBfU1BFQ1BETF9SRUYKKyNkZWZpbmUgU1BFQ1BETF9SRUZfVU5JTklUIChzcGVj
cGRsX3JlZikgeyAtMSB9CisjZGVmaW5lIFVOSU5JVF9TUEVDUERMX1JFRihyKSAoKHIpLmJ5dGVz
ID09IC0xKQorI2Vsc2UKKyNkZWZpbmVTUEVDUERMX1JFRl9VTklOSVQgLTEKKyNkZWZpbmUgVU5J
TklUX1NQRUNQRExfUkVGKHIpICgocikgPT0gLTEpCisjZW5kaWYKIAotICAgICAgaWYgKCEgTklM
UCAoQlZBUiAoaW5idWZmZXIsIGVuYWJsZV9tdWx0aWJ5dGVfY2hhcmFjdGVycykpKQotCXsKLQkg
IC8qIEZldGNoIHRoZSBjaGFyYWN0ZXIgY29kZSBmcm9tIHRoZSBidWZmZXIuICAqLwotCSAgdW5z
aWduZWQgY2hhciAqcCA9IEJVRl9CWVRFX0FERFJFU1MgKGluYnVmZmVyLCBwdF9ieXRlKTsKLQkg
IGludCBjbGVuOwotCSAgYyA9IHN0cmluZ19jaGFyX2FuZF9sZW5ndGggKHAsICZjbGVuKTsKLQkg
IHB0X2J5dGUgKz0gY2xlbjsKLQkgIGlmIChtdWx0aWJ5dGUpCi0JICAgICptdWx0aWJ5dGUgPSAx
OwotCX0KLSAgICAgIGVsc2UKLQl7Ci0JICBjID0gQlVGX0ZFVENIX0JZVEUgKGluYnVmZmVyLCBw
dF9ieXRlKTsKLQkgIGlmICghIEFTQ0lJX0NIQVJfUCAoYykpCi0JICAgIGMgPSBCWVRFOF9UT19D
SEFSIChjKTsKLQkgIHB0X2J5dGUrKzsKLQl9Ci0gICAgICBTRVRfQlVGX1BUX0JPVEggKGluYnVm
ZmVyLCBCVUZfUFQgKGluYnVmZmVyKSArIDEsIHB0X2J5dGUpOworI2RlZmluZSBJTklUX0xSRUFE
X0ZSQU1FKCkgICAgICAobHJlYWRfZnJhbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIC50eXBlID0gTFJFQURfRlJBTUVfVU5JTklULCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgLmludHlwZSA9IExSRUFE
X0lOUFVUX1VOSU5JVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgLmlucHV0ID0gSU5JVF9MUkVBRF9JTlBVVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgLmR5bmFtaWNfZnJhbWUgPSBTUEVDUERMX1JFRl9VTklOSVQs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgLnJlc3RvcmVfZnJhbWVfaWR4
ID0gU1BFQ1BETF9SRUZfVU5JTklULCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
LnVucmVhZF9jaGFyID0gLTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgLnVucmVhZF9ieXRlcyA9IDAsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgLnJlYWRfZW9mID0gZmFsc2UsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgLmNo
YXJfb2Zmc2V0ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgLmJ5dGVfb2Zmc2V0ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgLnNhdmVkX3N0cmluZ3MgPSB7IElOSVRf
U0FWRURfU1RSSU5HLCBJTklUX1NBVkVEX1NUUklORyB9LCAgICAgICAgXAorICAgICAgLnJkc3Rh
Y2sgPSBJTklUX1JFQURfU1RBQ0ssICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgLmJhc2Vfc3AgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgLmxvYWRzX2luX3Byb2dyZXNzID0gUW5pbCwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgLm9iamVjdHNf
bWFwID0gUW5pbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgLm9iamVjdHNfY29tcGxldGVkID0gUW5pbCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgLm11bHRpYnl0ZSA9IExSRUFEX01VTFRJQllURV9J
TkRFVEVSTUlOQVRFLCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgLmxvY2F0ZV9zeW1z
ID0gZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgLnN0YXJ0ID0gUW5pbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgLmVuZCA9IFFuaWwsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgLmZ1bGxfbmFtZSA9IFFu
aWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgLm5hbWUgPSBRbmlsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgLnNvdXJjZW5hbWUgPSBRbmlsLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgLnJlYWRmdW4gPSBRbmlsLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
LnByaW50ZmxhZyA9IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgLm5leHBycyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgLmxvb3BfZHluYW1pY19mcmFtZSA9
IFNQRUNQRExfUkVGX1VOSU5JVCwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgLndo
b2xlX2J1ZmZlciA9IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgLnZhbHVlID0gUW5pbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgLmVycm9yID0gUW5pbCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgLmludGVy
cnVwdGVkID0gZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgLnByZXYgPSBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgLm11bGVfY2hhcnNldCA9IE5VTEwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworLyogVGhp
cyBzaG91bGQgYmUgdGhyZWFkLWxvY2FsICovCitzdGF0aWMgbHJlYWRfZnJhbWUgKmN1cnJlbnRf
ZnJhbWUgPSBOVUxMOworc3RhdGljIHZvaWQgaW5pdF9scmVhZF9pbnB1dF9mcm9tX3N0cmVhbSAo
bHJlYWRfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTGlzcF9PYmplY3Qgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTGlzcF9PYmplY3Qgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBMaXNwX09iamVjdCBlbmQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGxvY2F0ZV9zeW1zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZWVrYWJsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKnN0cmVhbV9maWxlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzcF9PYmplY3QgY29kaW5nKTsKKworc3Rh
dGljIHZvaWQgaW5pdF9scmVhZF9ldmFsX3BhcmFtcyAobHJlYWRfZnJhbWUgKmZyYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzcF9PYmplY3QgZnVsbF9uYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzcF9PYmplY3QgbmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3BfT2JqZWN0IHJlYWRmdW4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHdob2xlX2J1ZmZlcik7CisK
K3N0YXRpYyB2b2lkIGFjdGl2YXRlX2xyZWFkX2ZyYW1lIChscmVhZF9mcmFtZSAqbmV3X2ZyYW1l
LCBscmVhZF9mcmFtZV90eXBlIG5ld190eXBlKTsKK3N0YXRpYyB2b2lkIHJlc3RvcmVfbHJlYWRf
ZnJhbWUgKHZvaWQgKnApOworCisKK3ZvaWQgdW5yZWFkY2hhciAocmVnaXN0ZXIgbHJlYWRfZnJh
bWUgKmZyYW1lLCBpbnQgYyk7CitzdGF0aWMgQVZPSUQgaW52YWxpZF9zeW50YXhfbGlzcCAocmVn
aXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLCBMaXNwX09iamVjdCBzKTsKK3N0YXRpYyBBVk9JRCBp
bnZhbGlkX3N5bnRheCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLCBjb25zdCBjaGFyICpz
KTsKKworLyogS2VlcCB0cmFjayBvZiB3aGljaCBmdW5jdGlvbnMgcmVxdWlyZSBhIGZyYW1lIHBh
cmFtZXRlcgorICAgYnkgZGVjbGFyaW5nIHRoZW0gaGVyZSwgd2hldGhlciBpdCdzIG5lZWRlZCBv
ciBub3QgKi8KK3N0YXRpYyBpbnQgY2hhcmFjdGVyX25hbWVfdG9fY29kZSAocmVnaXN0ZXIgbHJl
YWRfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
IGNvbnN0ICpuYW1lLCBwdHJkaWZmX3QgbmFtZV9sZW4pOworc3RhdGljIGludCByZWFkX2NoYXJf
ZXNjYXBlIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUsIGludCBuZXh0X2NoYXIpOworc3Rh
dGljIHZvaWQgaW52YWxpZF9yYWRpeF9pbnRlZ2VyIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJh
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNQUNTX0lOVCByYWRpeCk7
CitzdGF0aWMgTGlzcF9PYmplY3QgcmVhZF9pbnRlZ2VyIChyZWdpc3RlciBscmVhZF9mcmFtZSAq
ZnJhbWUsIGludCByYWRpeCk7CitzdGF0aWMgTGlzcF9PYmplY3QgcmVhZF9jaGFyX2xpdGVyYWwg
KHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSk7CitzdGF0aWMgTGlzcF9PYmplY3QgcmVhZF9z
dHJpbmdfbGl0ZXJhbCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKTsKK3N0YXRpYyBMaXNw
X09iamVjdCBnZXRfbGF6eV9zdHJpbmcgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3BfT2JqZWN0IHZhbCk7CitzdGF0
aWMgYm9vbCBza2lwX2xhenlfc3RyaW5nIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUpOwor
c3RhdGljIExpc3BfT2JqZWN0IGJ5dGVjb2RlX2Zyb21fcmV2X2xpc3QgKHJlZ2lzdGVyIGxyZWFk
X2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBMaXNwX09iamVjdCBlbGVtcyk7CisKK3N0YXRpYyBMaXNwX09iamVjdCBjaGFyX3RhYmxlX2Zy
b21fcmV2X2xpc3QgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3BfT2JqZWN0IGVsZW1zKTsKK3N0YXRp
YyBMaXNwX09iamVjdCBzdWJfY2hhcl90YWJsZV9mcm9tX3Jldl9saXN0IChyZWdpc3RlciBscmVh
ZF9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTGlzcF9PYmplY3QgZWxlbXMpOworc3RhdGljIExpc3BfT2JqZWN0IHN0cmluZ19w
cm9wc19mcm9tX3Jldl9saXN0IChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3BfT2JqZWN0IGVsZW1z
KTsKK3N0YXRpYyBMaXNwX09iamVjdCByZWFkX2Jvb2xfdmVjdG9yIChyZWdpc3RlciBscmVhZF9m
cmFtZSAqZnJhbWUpOworc3RhdGljIHZvaWQgc2tpcF9zcGFjZV9hbmRfY29tbWVudHMgKHJlZ2lz
dGVyIGxyZWFkX2ZyYW1lICpmcmFtZSk7CitzdGF0aWMgTGlzcF9PYmplY3QgcmVhZDAgKHJlZ2lz
dGVyIGxyZWFkX2ZyYW1lICpmcmFtZSk7CitzdGF0aWMgTGlzcF9PYmplY3QgY2FsbF9yZWFkMCAo
TGlzcF9PYmplY3QgZnJhbWVwdHIpCit7CisgIHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSA9
IHhtaW50X3BvaW50ZXIgKGZyYW1lcHRyKTsKKyAgcmV0dXJuIHJlYWQwIChmcmFtZSk7Cit9Citz
dGF0aWMgYm9vbCBoYW5kbGVfcmVhZF9zdHJlYW1fZGVmYXVsdHMgKExpc3BfT2JqZWN0ICpzdHJl
YW0pOworc3RhdGljIHN0cnVjdCBidWZmZXIgKmxyZWFkX2dldF9idWZmZXIgKHJlZ2lzdGVyIGxy
ZWFkX2ZyYW1lICpmcmFtZSk7CitzdGF0aWMgTGlzcF9PYmplY3QgbHJlYWRfZ2V0X2J1ZmZlcl9v
YmogKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSk7CiAKLSAgICAgIHJldHVybiBjOwotICAg
IH0KLSAgaWYgKE1BUktFUlAgKHJlYWRjaGFyZnVuKSkKLSAgICB7Ci0gICAgICByZWdpc3RlciBz
dHJ1Y3QgYnVmZmVyICppbmJ1ZmZlciA9IFhNQVJLRVIgKHJlYWRjaGFyZnVuKS0+YnVmZmVyOwog
Ci0gICAgICBwdHJkaWZmX3QgYnl0ZXBvcyA9IG1hcmtlcl9ieXRlX3Bvc2l0aW9uIChyZWFkY2hh
cmZ1bik7CitzdGF0aWMgTGlzcF9PYmplY3QgcmVhZGV2YWxsb29wIChMaXNwX09iamVjdCBmcmFt
ZXB0cik7CitzdGF0aWMgTGlzcF9PYmplY3QgcmVhZGV2YWxsb29wX2VvZl9oYW5kbGVyIChMaXNw
X09iamVjdCBpZ25vcmVkKTsKK3N0YXRpYyBMaXNwX09iamVjdCBscmVhZF9zZXRfcmVhZF9lb2Yg
KExpc3BfT2JqZWN0IGRhdGEpOworc3RhdGljIGJvb2wgc2V0dXBfYnVmZmVyX2Zvcl9yZWFkZXZh
bGxvb3AgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBMaXNwX09iamVjdCBzdGFydCwgTGlzcF9PYmplY3QgZW5k
KTsKK3N0YXRpYyB2b2lkIHByZXBhcmVfYnVmZmVyX2Zvcl9pbnRlcnJ1cHRpYmxlX3JlYWQgKHJl
Z2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSk7CitzdGF0aWMgTGlzcF9PYmplY3QgaW50ZXJydXB0
X2Vycm9yX2hhbmRsZXIgKExpc3BfT2JqZWN0IGRhdGEpOworc3RhdGljIExpc3BfT2JqZWN0IGJh
c2VfaW50ZXJydXB0X2Vycm9yX2hhbmRsZXIgKExpc3BfT2JqZWN0IGRhdGEpOworc3RhdGljIExp
c3BfT2JqZWN0IHJlYWRldmFsbG9vcF9lb2ZfdHJhbXBvbGluZSAoTGlzcF9PYmplY3QgZnJhbWVw
dHIpOwogCi0gICAgICBpZiAoYnl0ZXBvcyA+PSBCVUZfWlZfQllURSAoaW5idWZmZXIpKQotCXJl
dHVybiAtMTsKK3N0YXRpYyB2b2lkIGJ1aWxkX2xvYWRfaGlzdG9yeSAocmVnaXN0ZXIgbHJlYWRf
ZnJhbWUgKmZyYW1lLCBMaXNwX09iamVjdCwgYm9vbCk7CisKK3N0YXRpYyBwdHJkaWZmX3Qgb2Jh
cnJheV9pbmRleCAoc3RydWN0IExpc3BfT2JhcnJheSAqb2EsIGNvbnN0IGNoYXIgKnN0ciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyZGlmZl90IHNpemVfYnl0ZSk7CitzdGF0
aWMgTGlzcF9PYmplY3Qgb2Jsb29rdXBfY29uc2lkZXJpbmdfc2hvcnRoYW5kIChMaXNwX09iamVj
dCwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHRyZGlmZl90LCBwdHJkaWZmX3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqLCBwdHJkaWZmX3QgKiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCAq
KTsKKworLyogR3JvdyBhIHJlYWQgYnVmZmVyIEJVRiB0aGF0IGNvbnRhaW5zIE9GRlNFVCB1c2Vm
dWwgYnl0ZXMgb2YgZGF0YSwKKyAgIGJ5IGF0IGxlYXN0IE1BWF9NVUxUSUJZVEVfTEVOR1RIIGJ5
dGVzLiAgVXBkYXRlICpCVUZfQUREUiBhbmQKKyAgICpCVUZfU0laRSBhY2NvcmRpbmdseTsgMCA8
PSBPRkZTRVQgPD0gKkJVRl9TSVpFLiAgSWYgKkJVRl9BRERSIGlzCisgICBpbml0aWFsbHkgbnVs
bCwgQlVGIGlzIG9uIHRoZSBzdGFjazogY29weSBpdHMgZGF0YSB0byB0aGUgbmV3IGhlYXAKKyAg
IGJ1ZmZlci4gIE90aGVyd2lzZSwgQlVGIG11c3QgZXF1YWwgKkJVRl9BRERSIGFuZCBjYW4gc2lt
cGx5IGJlCisgICByZWFsbG9jYXRlZC4gIEVpdGhlciB3YXksIHJlbWVtYmVyIHRoZSBoZWFwIGFs
bG9jYXRpb24gKHdoaWNoIGlzIGF0CisgICBwZGwgc2xvdCBDT1VOVCkgc28gdGhhdCBpdCBjYW4g
YmUgZnJlZWQgd2hlbiB1bndpbmRpbmcgdGhlIHN0YWNrLiovCiAKLSAgICAgIGlmICghIE5JTFAg
KEJWQVIgKGluYnVmZmVyLCBlbmFibGVfbXVsdGlieXRlX2NoYXJhY3RlcnMpKSkKK3N0YXRpYyBj
aGFyICoKK2dyb3dfcmVhZF9idWZmZXIgKGNoYXIgKmJ1ZiwgcHRyZGlmZl90IG9mZnNldCwKKyAg
ICAgICAgICAgICAgICAgIGNoYXIgKipidWZfYWRkciwgcHRyZGlmZl90ICpidWZfc2l6ZSwgc3Bl
Y3BkbF9yZWYgY291bnQpCit7CisgIGNoYXIgKnAgPSB4cGFsbG9jICgqYnVmX2FkZHIsIGJ1Zl9z
aXplLCBNQVhfTVVMVElCWVRFX0xFTkdUSCwgLTEsIDEpOworICBpZiAoISpidWZfYWRkcikKICAg
ICB7Ci0JICAvKiBGZXRjaCB0aGUgY2hhcmFjdGVyIGNvZGUgZnJvbSB0aGUgYnVmZmVyLiAgKi8K
LQkgIHVuc2lnbmVkIGNoYXIgKnAgPSBCVUZfQllURV9BRERSRVNTIChpbmJ1ZmZlciwgYnl0ZXBv
cyk7Ci0JICBpbnQgY2xlbjsKLQkgIGMgPSBzdHJpbmdfY2hhcl9hbmRfbGVuZ3RoIChwLCAmY2xl
bik7Ci0JICBieXRlcG9zICs9IGNsZW47Ci0JICBpZiAobXVsdGlieXRlKQotCSAgICAqbXVsdGli
eXRlID0gMTsKKyAgICAgIG1lbWNweSAocCwgYnVmLCBvZmZzZXQpOworICAgICAgcmVjb3JkX3Vu
d2luZF9wcm90ZWN0X3B0ciAoeGZyZWUsIHApOwogICAgIH0KICAgZWxzZQorICAgIHNldF91bndp
bmRfcHJvdGVjdF9wdHIgKGNvdW50LCB4ZnJlZSwgcCk7CisgICpidWZfYWRkciA9IHA7CisgIHJl
dHVybiBwOworfQorCisvKiBncm93X3JlYWRfYnVmZmVyLCBidXQgZm9yIGludHMgKGVtYWNzIGNo
YXJhY3RlciB2YWx1ZXMpICovCitzdGF0aWMgaW50ICoKK2dyb3dfaW50X2J1ZmZlciAoaW50ICpi
dWYsIHB0cmRpZmZfdCBvZmZzZXQsCisgICAgICAgICAgICAgICAgIGludCAqKmJ1Zl9hZGRyLCBw
dHJkaWZmX3QgKmJ1Zl9zaXplLCBzcGVjcGRsX3JlZiBjb3VudCkKK3sKKyAgaW50ICpwID0geHBh
bGxvYyAoKmJ1Zl9hZGRyLCBidWZfc2l6ZSwgMSwgLTEsIHNpemVvZiAoaW50KSk7CisgIGlmICgh
KmJ1Zl9hZGRyKQogICAgIHsKLQkgIGMgPSBCVUZfRkVUQ0hfQllURSAoaW5idWZmZXIsIGJ5dGVw
b3MpOwotCSAgaWYgKCEgQVNDSUlfQ0hBUl9QIChjKSkKLQkgICAgYyA9IEJZVEU4X1RPX0NIQVIg
KGMpOwotCSAgYnl0ZXBvcysrOworICAgICAgbWVtY3B5IChwLCBidWYsIG9mZnNldCAqIHNpemVv
ZiAoaW50KSk7CisgICAgICByZWNvcmRfdW53aW5kX3Byb3RlY3RfcHRyICh4ZnJlZSwgcCk7CiAg
ICAgfQorICBlbHNlCisgICAgc2V0X3Vud2luZF9wcm90ZWN0X3B0ciAoY291bnQsIHhmcmVlLCBw
KTsKKyAgKmJ1Zl9hZGRyID0gcDsKKyAgcmV0dXJuIHA7Cit9CisKK0lOTElORSB2b2lkCitscmVh
ZF91bndpbmRfZm9yX2V2YWwgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyAgLyog
aWYgKFVOSU5JVF9TUEVDUERMX1JFRihmcmFtZS0+ZHluYW1pY19mcmFtZSkpICovCisgIC8qICAg
cmV0dXJuOyAqLworICBlYXNzZXJ0ICghVU5JTklUX1NQRUNQRExfUkVGKGZyYW1lLT5keW5hbWlj
X2ZyYW1lKSk7CisgIHVuYmluZF90byAoZnJhbWUtPmR5bmFtaWNfZnJhbWUsIFFuaWwpOworfQog
Ci0gICAgICBYTUFSS0VSIChyZWFkY2hhcmZ1biktPmJ5dGVwb3MgPSBieXRlcG9zOwotICAgICAg
WE1BUktFUiAocmVhZGNoYXJmdW4pLT5jaGFycG9zKys7CitJTkxJTkUgdm9pZAorbHJlYWRfaW5p
dF9keW5hbWljX2ZyYW1lIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUpCit7CisgIC8qIGlm
ICghVU5JTklUX1NQRUNQRExfUkVGKGZyYW1lLT5keW5hbWljX2ZyYW1lKSkgKi8KKyAgLyogICB1
bmJpbmRfdG8gKGZyYW1lLT5keW5hbWljX2ZyYW1lLCBRbmlsKTsgKi8KKyAgZWFzc2VydCAoVU5J
TklUX1NQRUNQRExfUkVGKGZyYW1lLT5keW5hbWljX2ZyYW1lKSk7CisgIGZyYW1lLT5keW5hbWlj
X2ZyYW1lID0gU1BFQ1BETF9JTkRFWCAoKTsKK30KIAotICAgICAgcmV0dXJuIGM7Ci0gICAgfQog
Ci0gIGlmIChFUSAocmVhZGNoYXJmdW4sIFFnZXRfZmlsZV9jaGFyKSkKK0xpc3BfT2JqZWN0Cits
cmVhZF9zZXRfcmVhZF9lb2YgKExpc3BfT2JqZWN0IGRhdGEpCit7CisgIGN1cnJlbnRfZnJhbWUt
PnJlYWRfZW9mID0gdHJ1ZTsKKyAgcmV0dXJuIFFuaWw7Cit9CisKK0xpc3BfT2JqZWN0CityZWFk
ZXZhbGxvb3BfZW9mX2hhbmRsZXIgKExpc3BfT2JqZWN0IGlnbm9yZWQpCit7CisgIHJlZ2lzdGVy
IGxyZWFkX2ZyYW1lICpmcmFtZSA9IGN1cnJlbnRfZnJhbWU7CisgIGZyYW1lLT5yZWFkX2VvZiA9
IHRydWU7CisgIHJldHVybiBmcmFtZS0+dmFsdWU7Cit9CisKKworI2RlZmluZSBVTlJFQ09HTkla
RURfTFJFQURfSU5QVVRfQ0FTRVMoc3JjKSAgICAgXAorICAgIGNhc2UgTFJFQURfSU5QVVRfVU5J
TklUOlwKKyAgICAgIHhzaWduYWwxIChRZXJyb3IsXAorICAgICAgICAgICAgICAgIENBTExOIChG
Zm9ybWF0LFwKKyAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfc3RyaW5nICgiSW50ZXJuYWwg
ZXJyb3I6ICIgc3JjIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOiB0
eXBlIG9mIGlucHV0IHRvICIgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJyZWFkKC0qKSB1bmluaXRpYWxpemVkOiAlcyIpLCBcCisgICAgICAgICAgICAg
ICAgICAgICAgIG1ha2VfZml4bnVtKChFTUFDU19JTlQpIGZyYW1lLT5pbnR5cGUpKSk7ICAgXAor
ICAgICAgYnJlYWs7XAorICAgIGRlZmF1bHQ6XAorICAgICAgeHNpZ25hbDEgKFFlcnJvcixcCisg
ICAgICAgICAgICAgICAgQ0FMTE4gKEZmb3JtYXQsXAorICAgICAgICAgICAgICAgICAgICAgICBi
dWlsZF9zdHJpbmcgKCJJbnRlcm5hbCBlcnJvcjo6ICIgc3JjIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiOiB0eXBlIG9mIGlucHV0IHRvICIgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZCgtKikgdW5yZWNvZ25p
emVkOiAlcyIpLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9maXhudW0oKEVN
QUNTX0lOVCkgZnJhbWUtPmludHlwZSkpKTsKKworCitzdGF0aWMgYm9vbAorbHJlYWRfZnJhbWVf
cmVxdWlyZXNfcmV3aW5kX2J1ZmZlciAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKQorewor
ICBzd2l0Y2ggKGZyYW1lLT5pbnR5cGUpCiAgICAgewotICAgICAgZWFzc2VydCAoaW5maWxlKTsK
LSAgICAgIHJlYWRieXRlID0gcmVhZGJ5dGVfZnJvbV9maWxlOwotICAgICAgZ290byByZWFkX211
bHRpYnl0ZTsKKyAgICBjYXNlIExSRUFEX0lOUFVUX0ZJTEU6CisgICAgY2FzZSBMUkVBRF9JTlBV
VF9GSUxFX01VTEU6CisgICAgICByZXR1cm4gIShmcmFtZS0+aW5wdXQuZi5zZWVrYWJsZSk7Cisg
ICAgY2FzZSBMUkVBRF9JTlBVVF9QUk9DRURVUkU6CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBj
YXNlIExSRUFEX0lOUFVUX0lORElSRUNUOgorICAgICAgcmV0dXJuIGxyZWFkX2ZyYW1lX3JlcXVp
cmVzX3Jld2luZF9idWZmZXIgKGZyYW1lLT5pbnB1dC5mcmFtZS5zb3VyY2UpOworICAgIGNhc2Ug
TFJFQURfSU5QVVRfQlVGRkVSOgorICAgIGNhc2UgTFJFQURfSU5QVVRfTUFSS0VSOgorICAgIGNh
c2UgTFJFQURfSU5QVVRfU1RSSU5HOgorICAgIGNhc2UgTFJFQURfSU5QVVRfQklOQVJZOgorICAg
IGNhc2UgTFJFQURfSU5QVVRfTlVMTDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIFVOUkVD
T0dOSVpFRF9MUkVBRF9JTlBVVF9DQVNFUyAoInJlcXVpcmVzX3Jld2luZF9idWZmZXIiKTsKICAg
ICB9Cit9CiAKLSAgaWYgKFNUUklOR1AgKHJlYWRjaGFyZnVuKSkKK3N0YXRpYyB2b2lkCitscmVh
ZF9yZXdpbmRfaW5wdXQgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwgaW50IGxvb2thaGVh
ZCwgaW50ICpidWYpCit7CisgIHN3aXRjaCAoZnJhbWUtPmludHlwZSkKICAgICB7Ci0gICAgICBp
ZiAocmVhZF9mcm9tX3N0cmluZ19pbmRleCA+PSByZWFkX2Zyb21fc3RyaW5nX2xpbWl0KQotCWMg
PSAtMTsKLSAgICAgIGVsc2UgaWYgKFNUUklOR19NVUxUSUJZVEUgKHJlYWRjaGFyZnVuKSkKKyAg
ICBjYXNlIExSRUFEX0lOUFVUX0ZJTEU6CisgICAgY2FzZSBMUkVBRF9JTlBVVF9GSUxFX01VTEU6
CisgICAgICB7CisgICAgICAgIGlmIChmcmFtZS0+aW5wdXQuZi5zZWVrYWJsZSkKICAgICAgICAg
ICB7Ci0JICBpZiAobXVsdGlieXRlKQotCSAgICAqbXVsdGlieXRlID0gMTsKLQkgIGMgPSAoZmV0
Y2hfc3RyaW5nX2NoYXJfYWR2YW5jZV9ub19jaGVjawotCSAgICAgICAocmVhZGNoYXJmdW4sCi0J
CSZyZWFkX2Zyb21fc3RyaW5nX2luZGV4LAotCQkmcmVhZF9mcm9tX3N0cmluZ19pbmRleF9ieXRl
KSk7CisgICAgICAgICAgICByZXdpbmQgKGZyYW1lLT5pbnB1dC5mLnN0cmVhbSk7CiAgICAgICAg
ICAgfQotICAgICAgZWxzZQorICAgICAgICBlbHNlIGlmIChidWYpCisgICAgICAgICAgeworICAg
ICAgICAgICAgLyogQXQgbGVhc3QgdHJ5IHVuZ2V0YyAqLworICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciBjaGFyYnVmW01BWF9NVUxUSUJZVEVfTEVOR1RIXSA9IHswfTsKKyAgICAgICAgICAgIGlu
dCBsZW4gPSAwOworICAgICAgICAgICAgaWYgKGZyYW1lLT5tdWx0aWJ5dGUpCiAgICAgICAgICAg
ICAgIHsKLQkgIGMgPSBTUkVGIChyZWFkY2hhcmZ1biwgcmVhZF9mcm9tX3N0cmluZ19pbmRleF9i
eXRlKTsKLQkgIHJlYWRfZnJvbV9zdHJpbmdfaW5kZXgrKzsKLQkgIHJlYWRfZnJvbV9zdHJpbmdf
aW5kZXhfYnl0ZSsrOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBsb29rYWhlYWQgLTE7
IGkgPj0gMDsgaS0tKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBs
ZW4gPSBDSEFSX1NUUklORyAoYnVmW2ldLCBjaGFyYnVmKTsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaiA9IGxlbiAtIDE7IGogPj0gMDsgai0tKQorICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuZ2V0YyAoY2hhcmJ1ZltqXSwgZnJhbWUtPmlu
cHV0LmYuc3RyZWFtKTsKICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICByZXR1cm4gYzsK
ICAgICAgICAgICAgICAgICAgIH0KLQotICBpZiAoRVEgKHJlYWRjaGFyZnVuLCBRZ2V0X2VtYWNz
X211bGVfZmlsZV9jaGFyKSkKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IGxvb2thaGVhZCAtMTsg
aSA+PSAwOyBpLS0pCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVu
Z2V0YyAoKHVuc2lnbmVkIGNoYXIpIENIQVJfVE9fQllURTgoYnVmW2ldKSwgZnJhbWUtPmlucHV0
LmYuc3RyZWFtKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHhzaWduYWwxIChR
ZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfc3RyaW5nICgiSW50ZXJuYWwgZXJy
b3I6IGNhbm5vdCByZXdpbmQgIgorICAgICAgICAgICAgICAgICAgICAgICAgIm5vbi1zZWVrYWJs
ZSBzdHJlYW0gaW4gcmVhZCgtKikuIikpOworICAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJy
ZWFrOworICAgIGNhc2UgTFJFQURfSU5QVVRfU1RSSU5HOgorICAgICAgeworICAgICAgICBmcmFt
ZS0+Y2hhcl9vZmZzZXQgPSBmcmFtZS0+aW5wdXQucy5zdGFydDsKKyAgICAgICAgZnJhbWUtPmJ5
dGVfb2Zmc2V0CisgICAgICAgICAgPSBzdHJpbmdfY2hhcl90b19ieXRlIChmcmFtZS0+aW5wdXQu
cy5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+aW5wdXQu
cy5zdGFydCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVUX1BS
T0NFRFVSRToKKyAgICAgIHsKKyAgICAgICAgaWYgKGJ1ZikKKyAgICAgICAgICB7CisgICAgICAg
ICAgICBmb3IgKGludCBpID0gbG9va2FoZWFkIC0xOyBpID49IDA7IGktLSkKKyAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGNhbGxuIChmcmFtZS0+aW5wdXQucC5wcm9jLCBtYWtlX2Zp
eG51bSAoYnVmW2ldKSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgICB7CisgICAgICAgICAgICB4c2lnbmFsMSAoUWVycm9yLAorICAgICAgICAg
ICAgICAgICAgICAgIGJ1aWxkX3N0cmluZyAoIkludGVybmFsIGVycm9yOiBjYW5ub3QgcmV3aW5k
ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkKC0qKSBzdHJlYW0g
c3BlY2lmaWVkIGFzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJieSBh
IGZ1bmN0aW9uLiIpKTsKKyAgICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBj
YXNlIExSRUFEX0lOUFVUX0JVRkZFUjoKKyAgICBjYXNlIExSRUFEX0lOUFVUX01BUktFUjoKKyAg
ICAgIHsKKyAgICAgICAgRmdvdG9fY2hhciAobWFrZV9maXhudW0gKDApKTsKKyAgICAgIH0KKyAg
ICAgIGJyZWFrOworICAgIGNhc2UgTFJFQURfSU5QVVRfSU5ESVJFQ1Q6CisgICAgICByZXR1cm4g
bHJlYWRfcmV3aW5kX2lucHV0IChmcmFtZS0+aW5wdXQuZnJhbWUuc291cmNlLCBsb29rYWhlYWQs
IGJ1Zik7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9CSU5BUlk6CisgICAgY2FzZSBMUkVBRF9JTlBV
VF9OVUxMOgorICAgICAgeworICAgICAgICAvKiBOb3RoaW5nIHRvIGRvKi8KKyAgICAgIH0KKyAg
ICAgIGJyZWFrOworICAgICAgVU5SRUNPR05JWkVEX0xSRUFEX0lOUFVUX0NBU0VTICgicmV3aW5k
X2lucHV0Iik7CisgICAgfQorICBmcmFtZS0+Y2hhcl9vZmZzZXQgPSAwOworICBmcmFtZS0+Ynl0
ZV9vZmZzZXQgPSAwOworfQorCitzdGF0aWMgdm9pZAoraW5pdF9pbmZpbGUgKHJlZ2lzdGVyIGxy
ZWFkX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICBmaWxlX3N0cmVhbSBzdHJlYW0sIGJvb2wg
c2Vla2FibGUsIGJvb2wgbXVsZSwKKyAgICAgICAgICAgICBMaXNwX09iamVjdCBjb2RpbmcpCit7
CisgIGZyYW1lLT5pbnB1dC5mID0gSU5JVF9JTkZJTEUgKCk7CisgIGZyYW1lLT5pbnB1dC5mLnN0
cmVhbSA9IHN0cmVhbTsKKyAgZnJhbWUtPmlucHV0LmYuc2Vla2FibGUgPSBzZWVrYWJsZTsKKyAg
ZnJhbWUtPmlucHV0LmYubXVsZSA9IG11bGU7CisgIGlmIChmcmFtZS0+aW5wdXQuZi5zZWVrYWJs
ZSAmJgorICAgICAgKGZ0ZWxsbyAoZnJhbWUtPmlucHV0LmYuc3RyZWFtKSAhPSAwKSkKKyAgICB7
CisgICAgICBmc2Vla28gKGZyYW1lLT5pbnB1dC5mLnN0cmVhbSwgMCwgU0VFS19TRVQpOworICAg
IH0KKyAgaWYgKE5JTFAgKGNvZGluZykpCisgICAgY29kaW5nID0gUW5vX2NvbnZlcnNpb247Cisg
IGZyYW1lLT5pbnB1dC5mLmNvZGluZyA9IGNvZGluZzsKKyAgaWYgKCFWQUxJRF9NVUxUSUJZVEUg
KGZyYW1lLT5tdWx0aWJ5dGUpKQorICAgIHsKKyAgICAgIENIRUNLX0NPRElOR19TWVNURU0gKGZy
YW1lLT5pbnB1dC5mLmNvZGluZyk7CisgICAgICBwdHJkaWZmX3QgaWQgPSBDT0RJTkdfU1lTVEVN
X0lEIChmcmFtZS0+aW5wdXQuZi5jb2RpbmcpOworICAgICAgZnJhbWUtPm11bHRpYnl0ZSA9IE5J
TFAgKENPRElOR19BVFRSX0ZPUl9VTklCWVRFIChDT0RJTkdfSURfQVRUUlMgKGlkKSkpID8KKyAg
ICAgICAgTFJFQURfTVVMVElCWVRFX1RSVUUgOiBMUkVBRF9NVUxUSUJZVEVfRkFMU0U7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZAoraW5pdF9pbnN0cmluZyAocmVnaXN0ZXIgbHJlYWRfZnJhbWUg
KmZyYW1lLAorICAgICAgICAgICAgICAgTGlzcF9PYmplY3Qgc3RyaW5nKQoreworICBwdHJkaWZm
X3Qgc3RhcnR2YWwsIGVuZHZhbDsKKyAgZnJhbWUtPmlucHV0LnMgPSBJTklUX0lOU1RSSU5HKCk7
CisKKyAgaWYgKE5JTFAgKGZyYW1lLT5zdGFydCkpCisgICAgZnJhbWUtPnN0YXJ0ICA9IG1ha2Vf
Zml4bnVtKDApOworICBpZiAoTklMUCAoZnJhbWUtPmVuZCkpCisgICAgZnJhbWUtPmVuZCA9IG1h
a2VfZml4bnVtIChTQ0hBUlMgKHN0cmluZykpOworCisgIENIRUNLX0ZJWE5VTSAoZnJhbWUtPnN0
YXJ0KTsKKyAgQ0hFQ0tfRklYTlVNIChmcmFtZS0+ZW5kKTsKKyAgZnJhbWUtPmlucHV0LnMuc3Ry
aW5nID0gc3RyaW5nOworCisgIHZhbGlkYXRlX3N1YmFycmF5IChzdHJpbmcsIGZyYW1lLT5zdGFy
dCwgZnJhbWUtPmVuZCwgU0NIQVJTIChzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgJnN0
YXJ0dmFsLCAmZW5kdmFsKTsKKyAgZnJhbWUtPmlucHV0LnMuc3RhcnQgPSBzdGFydHZhbDsKKyAg
ZnJhbWUtPmlucHV0LnMubGltaXQgPSBlbmR2YWw7CisgIGZyYW1lLT5jaGFyX29mZnNldCA9IGZy
YW1lLT5pbnB1dC5zLnN0YXJ0OworICBmcmFtZS0+Ynl0ZV9vZmZzZXQKKyAgICA9IHN0cmluZ19j
aGFyX3RvX2J5dGUgKGZyYW1lLT5pbnB1dC5zLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZyYW1lLT5pbnB1dC5zLnN0YXJ0KTsKKyAgaWYgKCFWQUxJRF9NVUxUSUJZVEUgKGZy
YW1lLT5tdWx0aWJ5dGUpKQorICAgIGZyYW1lLT5tdWx0aWJ5dGUgPSBTVFJJTkdfTVVMVElCWVRF
IChmcmFtZS0+aW5wdXQucy5zdHJpbmcpOworfQorCitzdGF0aWMgdm9pZAoraW5pdF9pbmJ1ZmZl
ciAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgTGlzcF9PYmpl
Y3QgYnVmZmVyKQoreworICBmcmFtZS0+aW5wdXQuYiA9IElOSVRfSU5CVUZGRVIgKCk7CisgIHN0
cnVjdCBidWZmZXIgKmJ1ZiA9IFhCVUZGRVIgKGJ1ZmZlcik7CisKKyAgaWYgKE5JTFAgKGZyYW1l
LT5mdWxsX25hbWUpKQorICAgIHsKKyAgICAgIGZyYW1lLT5mdWxsX25hbWUgPSAgQlZBUiAoYnVm
LCBmaWxlbmFtZSk7CisgICAgfQorICBpZiAoIU5JTFAgKGZyYW1lLT5uYW1lKSAmJiBOSUxQIChm
cmFtZS0+ZnVsbF9uYW1lKSkKKyAgICB7CisgICAgICBpZiAoTklMUCAoRmZpbGVfbmFtZV9hYnNv
bHV0ZV9wIChmcmFtZS0+bmFtZSkpKQorICAgICAgICBmcmFtZS0+ZnVsbF9uYW1lID0gRmV4cGFu
ZF9maWxlX25hbWUgKGZyYW1lLT5uYW1lLCBCVkFSIChidWYsIGRpcmVjdG9yeSkpOworICAgICAg
ZWxzZQorICAgICAgICBmcmFtZS0+ZnVsbF9uYW1lID0gZnJhbWUtPm5hbWU7CisgICAgfQorICBp
ZiAoTklMUCAoZnJhbWUtPm5hbWUpICYmICFOSUxQIChmcmFtZS0+ZnVsbF9uYW1lKSkKKyAgICB7
CisgICAgICBmcmFtZS0+bmFtZSA9IEZmaWxlX25hbWVfbm9uZGlyZWN0b3J5IChmcmFtZS0+ZnVs
bF9uYW1lKTsKKyAgICB9CisgIGZyYW1lLT5pbnB1dC5iLmJ1ZmZlciA9IGJ1ZmZlcjsKKyAgZnJh
bWUtPmNoYXJfb2Zmc2V0ID0gQlVGX1BUIChidWYpOworICBmcmFtZS0+Ynl0ZV9vZmZzZXQgPSBC
VUZfUFRfQllURSAoYnVmKTsKKyAgaWYgKCFWQUxJRF9NVUxUSUJZVEUgKGZyYW1lLT5tdWx0aWJ5
dGUpKQorICAgIGZyYW1lLT5tdWx0aWJ5dGUgPSAhIE5JTFAgKEJWQVIgKGJ1ZiwgZW5hYmxlX211
bHRpYnl0ZV9jaGFyYWN0ZXJzKSk7Cit9CisKK3N0YXRpYyB2b2lkCitpbml0X2lubWFya2VyIChy
ZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICBMaXNwX09iamVjdCBt
YXJrZXIpCit7CisgIGZyYW1lLT5pbnB1dC5tID0gSU5JVF9JTk1BUktFUigpOworICBmcmFtZS0+
aW5wdXQubS5tYXJrZXIgPSBtYXJrZXI7CisgIGlmIChOSUxQIChmcmFtZS0+c3RhcnQpKQorICAg
IGZyYW1lLT5zdGFydCA9IG1hcmtlcjsKKyAgaW5pdF9pbmJ1ZmZlciAoZnJhbWUsIEZtYXJrZXJf
YnVmZmVyKG1hcmtlcikpOworfQorCisvKiBEZXRlcm1pbmUgbXVsdGlieXRlICovCitJTkxJTkUg
dm9pZAorcmVwb3J0X2xyZWFkX211bHRpYnl0ZSAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1l
KQoreworICAvKiBFeHBlY3QgYW55IGludGVycnVwdGlvbiBvZiByZWFkIHRoYXQgbWlnaHQgY2F1
c2UKKyAgICAgYSBjaGFuZ2UgaW4gdGhlIGNvZGluZyB0byBzZXQgdGhlIGludGVycnVwdGVkIGZy
YW1lJ3MKKyAgICAgbXVsdGlieXRlIHN0YXR1cyB0byBpbmRldGVybWluYXRlLiAgT3RoZXJ3aXNl
LAorICAgICB0aGUgY29kaW5nIG9mIGFuIGlucHV0IGlzIHJlcXVpcmVkIHRvIHJlbWFpbiBjb25z
dGFudAorICAgICBmb3IgdGhlIGR1cmF0aW9uIG9mIGEgc2luZ2xlIGNhbGwgdG8gcmVhZCAqLwor
ICBpZiAoZnJhbWUtPm11bHRpYnl0ZSAhPSBMUkVBRF9NVUxUSUJZVEVfSU5ERVRFUk1JTkFURSkK
KyAgICByZXR1cm47CisgIHN3aXRjaCAoZnJhbWUtPmludHlwZSkKKyAgICB7CisgICAgY2FzZSBM
UkVBRF9JTlBVVF9GSUxFOgorICAgICAgeworICAgICAgICBmcmFtZS0+bXVsdGlieXRlID0gTFJF
QURfTVVMVElCWVRFX1RSVUU7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIExSRUFE
X0lOUFVUX0ZJTEVfTVVMRToKKyAgICAgIGZyYW1lLT5tdWx0aWJ5dGUgPSBMUkVBRF9NVUxUSUJZ
VEVfVFJVRTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJFQURfSU5QVVRfU1RSSU5HOgorICAg
ICAgeworICAgICAgICBmcmFtZS0+bXVsdGlieXRlCisgICAgICAgICAgPSAoU1RSSU5HX01VTFRJ
QllURSAoZnJhbWUtPmlucHV0LnMuc3RyaW5nKSkKKyAgICAgICAgICA/IExSRUFEX01VTFRJQllU
RV9UUlVFCisgICAgICAgICAgOiBMUkVBRF9NVUxUSUJZVEVfRkFMU0U7CisgICAgICB9CisgICAg
ICBicmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVUX1BST0NFRFVSRToKKyAgICAgIGZyYW1lLT5t
dWx0aWJ5dGUgPSBMUkVBRF9NVUxUSUJZVEVfVFJVRTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug
TFJFQURfSU5QVVRfQlVGRkVSOgorICAgICAgeworICAgICAgICBzdHJ1Y3QgYnVmZmVyICppbmJ1
ZmZlciA9IFhCVUZGRVIgKGZyYW1lLT5pbnB1dC5iLmJ1ZmZlcik7CisgICAgICAgIGZyYW1lLT5t
dWx0aWJ5dGUKKyAgICAgICAgICA9ICghIE5JTFAgKEJWQVIgKGluYnVmZmVyLCBlbmFibGVfbXVs
dGlieXRlX2NoYXJhY3RlcnMpKSkKKyAgICAgICAgICA/IExSRUFEX01VTFRJQllURV9UUlVFCisg
ICAgICAgICAgOiBMUkVBRF9NVUxUSUJZVEVfRkFMU0U7CisgICAgICB9CisgICAgICBicmVhazsK
KyAgICBjYXNlIExSRUFEX0lOUFVUX01BUktFUjoKKyAgICAgIHsKKyAgICAgICAgc3RydWN0IGJ1
ZmZlciAqaW5idWZmZXIgPSBYQlVGRkVSIChmcmFtZS0+aW5wdXQubS5iLmJ1ZmZlcik7CisgICAg
ICAgIGZyYW1lLT5tdWx0aWJ5dGUKKyAgICAgICAgICA9ICghIE5JTFAgKEJWQVIgKGluYnVmZmVy
LCBlbmFibGVfbXVsdGlieXRlX2NoYXJhY3RlcnMpKSkKKyAgICAgICAgICA/IExSRUFEX01VTFRJ
QllURV9UUlVFCisgICAgICAgICAgOiBMUkVBRF9NVUxUSUJZVEVfRkFMU0U7CisgICAgICB9Cisg
ICAgICBicmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVUX0lORElSRUNUOgorICAgICAgcmVwb3J0
X2xyZWFkX211bHRpYnl0ZSAoZnJhbWUtPmlucHV0LmZyYW1lLnNvdXJjZSk7CisgICAgICBmcmFt
ZS0+bXVsdGlieXRlID0gZnJhbWUtPmlucHV0LmZyYW1lLnNvdXJjZS0+bXVsdGlieXRlOworICAg
ICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9CSU5BUlk6CisgICAgICAgIGZyYW1lLT5t
dWx0aWJ5dGUgPSBMUkVBRF9NVUxUSUJZVEVfRkFMU0U7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTFJFQURfSU5QVVRfTlVMTDoKKyAgICAgIHsKKyAgICAgICAgLyogQ29tcGxldGVseSBtZWFu
aW5nbGVzcyAqLworICAgICAgICBmcmFtZS0+bXVsdGlieXRlID0gTFJFQURfTVVMVElCWVRFX1RS
VUU7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICAgIFVOUkVDT0dOSVpFRF9MUkVBRF9JTlBV
VF9DQVNFUygicmVwb3J0X211bHRpYnl0ZSIpOworICAgIH0KKworfQorCisMCisvKiBGdW5jdGlv
biB0aGF0IHJlYWRzIG9uZSBieXRlIGZyb20gdGhlIGN1cnJlbnQgc291cmNlIFJFQURDSEFSRlVO
CisgICBvciB1bnJlYWRzIG9uZSBieXRlLiAgSWYgdGhlIGludGVnZXIgYXJndW1lbnQgQyBpcyAt
MSwgaXQgcmV0dXJucworICAgb25lIHJlYWQgYnl0ZSwgb3IgLTEgd2hlbiB0aGVyZSdzIG5vIG1v
cmUgYnl0ZSBpbiB0aGUgc291cmNlLiAgSWYgQworICAgaXMgMCBvciBwb3NpdGl2ZSwgaXQgdW5y
ZWFkcyBDLCBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyBub3QKKyAgIGludGVyZXN0aW5nLiAgKi8K
KworCitzdGF0aWMgaW50IHJlYWRieXRlX2Zyb21fZmlsZSAocmVnaXN0ZXIgbHJlYWRfZnJhbWUg
KmZyYW1lKTsKKworCitzdGF0aWMgYm9vbAorY2xlYW51cF9hZnRlcl9pbnRlcnJ1cHRfcCAocmVn
aXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKQoreworICBzd2l0Y2ggKGZyYW1lLT5pbnR5cGUpCisg
ICAgeworICAgIGNhc2UgTFJFQURfSU5QVVRfUFJPQ0VEVVJFOgorICAgIGNhc2UgTFJFQURfSU5Q
VVRfU1RSSU5HOgorICAgIGNhc2UgTFJFQURfSU5QVVRfQklOQVJZOgorICAgIGNhc2UgTFJFQURf
SU5QVVRfTlVMTDoKKyAgICBjYXNlIExSRUFEX0lOUFVUX0ZJTEU6CisgICAgY2FzZSBMUkVBRF9J
TlBVVF9GSUxFX01VTEU6CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBicmVhazsKKyAgICBj
YXNlIExSRUFEX0lOUFVUX0JVRkZFUjoKKyAgICBjYXNlIExSRUFEX0lOUFVUX01BUktFUjoKKyAg
ICAgIHJldHVybiAoZnJhbWUtPnR5cGUgPT0gTFJFQURfRlJBTUVfTVVMVElQTEUpOworICAgICAg
YnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9JTkRJUkVDVDoKKyAgICAgIHJldHVybiBjbGVh
bnVwX2FmdGVyX2ludGVycnVwdF9wIChmcmFtZS0+aW5wdXQuZnJhbWUuc291cmNlKTsKKyAgICAg
IFVOUkVDT0dOSVpFRF9MUkVBRF9JTlBVVF9DQVNFUygiY2xlYW51cF9hZnRlcl9pbnRlcnJ1cHRf
cCIpOworICAgIH0KKyAgZWFzc2VydCAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitscmVhZF9jb250
aW51ZV9mcmFtZV9hZnRlcl9pbnRlcnJ1cHQgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkK
K3sKKyAgLyogSWYgd2UgYXJlIHVud2luZGluZyBkdWUgdG8gYSBub24tbG9jYWwgZXhpdCBkdXJp
bmcgYW4KKyAgICAgaW50ZXJydXB0LCBkbyBub3RoaW5nKi8KKyAgaWYgKGZyYW1lLT5pbnRlcnJ1
cHRlZCkKKyAgICByZXR1cm47CisgIHVuYmluZF90byAoZnJhbWUtPmR5bmFtaWNfZnJhbWUsIFFu
aWwpOworICAvKiBuZWVkIHRvIGVuc3VyZSBidWZmZXJzIGFyZSBzdGlsbCBzYWZlICovCisgIHN3
aXRjaCAoZnJhbWUtPmludHlwZSkKKyAgICB7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9QUk9DRURV
UkU6CisgICAgY2FzZSBMUkVBRF9JTlBVVF9TVFJJTkc6CisgICAgY2FzZSBMUkVBRF9JTlBVVF9C
SU5BUlk6CisgICAgY2FzZSBMUkVBRF9JTlBVVF9OVUxMOgorICAgIGNhc2UgTFJFQURfSU5QVVRf
RklMRToKKyAgICBjYXNlIExSRUFEX0lOUFVUX0ZJTEVfTVVMRToKKyAgICAgIGJyZWFrOworICAg
IGNhc2UgTFJFQURfSU5QVVRfQlVGRkVSOgorICAgIGNhc2UgTFJFQURfSU5QVVRfTUFSS0VSOgor
ICAgICAgaWYgKGZyYW1lLT50eXBlID09IExSRUFEX0ZSQU1FX01VTFRJUExFKQorICAgICAgICBw
cmVwYXJlX2J1ZmZlcl9mb3JfaW50ZXJydXB0aWJsZV9yZWFkIChmcmFtZSk7CisgICAgICBicmVh
azsKKyAgICBjYXNlIExSRUFEX0lOUFVUX0lORElSRUNUOgorICAgICAgbHJlYWRfY29udGludWVf
ZnJhbWVfYWZ0ZXJfaW50ZXJydXB0IChmcmFtZS0+aW5wdXQuZnJhbWUuc291cmNlKTsKKyAgICAg
IGJyZWFrOworICAgICAgVU5SRUNPR05JWkVEX0xSRUFEX0lOUFVUX0NBU0VTKCJjb250aW51ZV9m
cmFtZV9hZnRlcl9pbnRlcnJ1cHQiKTsKKyAgICB9Cit9CisKK3N0YXRpYyBMaXNwX09iamVjdAor
Y2FsbF9tYXliZV9xdWl0ICh2b2lkKQoreworICBtYXliZV9xdWl0KCk7CisgIHJldHVybiBRbmls
OworfQorc3RhdGljIHZvaWQKK2xyZWFkX21heWJlX3F1aXQgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1l
ICpmcmFtZSkKK3sKKyAgYm9vbCBuZWVkX2NsZWFudXAgPSBjbGVhbnVwX2FmdGVyX2ludGVycnVw
dF9wIChmcmFtZSk7CisgIC8qIGVuc3VyZSBmcmFtZSBpcyBwcm9wZXJseSByZXN0b3JlZCBpZgor
ICAgICBzb21lIGNvZGUgYWZmZWN0cyBhIGxpc3Agb2JqZWN0IHdlIGFyZQorICAgICB3b3JraW5n
IHdpdGggKi8KKyAgaWYgKG5lZWRfY2xlYW51cCkKKyAgICB7CisgICAgICAvKiB0aGlzIHNob3Vs
ZCBsZWF2ZSB0aGUgYmluZGluZyB0byByZXN0b3JlIHRoZSBwcmV2aW91cworICAgICAgICAgZnJh
bWUgaW4gcGxhY2UgKi8KKyAgICAgIGxyZWFkX3Vud2luZF9mb3JfZXZhbCAoZnJhbWUpOworICAg
IH0KKyAgc3BlY3BkbF9yZWYgY291bnQgPSBTUEVDUERMX0lOREVYKCk7CisgIC8qIGFueSBlcnJv
cnMgdGhyb3duIGR1cmluZyBhbiBpbnRlcnJ1cHQgaGFuZGxlciB3aWxsIGJlIGlnbm9yZWQgaW4g
dGhlCisgICAgIGR5bmFtaWMgZXh0ZW50IG9mIHRoaXMgZnJhbWUsIGkuZS4gc3B1cmlvdXMgZW5k
LW9mLWZpbGUgc2lnbmFscyAqLworICAvKiBzaG91bGQgYWxzbyBkZWFsIHdpdGggdGhyb3dzLCBi
dXQgd2UgZG9uJ3QgaW5zdGFsbCBhbnkgY2F0Y2ggaGFuZGxlcnMgKi8KKyAgLyogb2YgY291cnNl
LCB0aGlzIGRvZXMgbm90IGRlYWwgd2l0aCBhbGwgdGhlIG90aGVyIHBsYWNlcyBpbnRlcnJ1cHRz
CisgICAgIGNvdWxkIGJlIHByb2Nlc3NlZCBkdXJpbmcgYSByZWFkIG9yIHJlYWRldmFsbG9vcC4u
Li4gKi8KKyAgZnJhbWUtPmludGVycnVwdGVkID0gdHJ1ZTsKKyAgaW50ZXJuYWxfY29uZGl0aW9u
X2Nhc2UgKGNhbGxfbWF5YmVfcXVpdCwgUXQsIGludGVycnVwdF9lcnJvcl9oYW5kbGVyKTsKKyAg
ZnJhbWUtPmludGVycnVwdGVkID0gZmFsc2U7CisgIGlmIChuZWVkX2NsZWFudXApCisgICAgewor
ICAgICAgZWFzc2VydCAoIXNwZWNwZGxfcmVmX2x0IChjb3VudCwgZnJhbWUtPmR5bmFtaWNfZnJh
bWUpKTsKKyAgICAgIHVuYmluZF90byAoY291bnQsIFFuaWwpOworICAgICAgbHJlYWRfY29udGlu
dWVfZnJhbWVfYWZ0ZXJfaW50ZXJydXB0IChmcmFtZSk7CisgICAgfQorfQorCitzdGF0aWMgaW50
CityZWFkYnl0ZV9mcm9tX3N0ZGlvIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUpCit7Cisg
IGlmIChmcmFtZS0+aW5wdXQuZi5sb29rYWhlYWQpCisgICAgeworICAgICAgcmV0dXJuIChmcmFt
ZS0+aW5wdXQuZi5idWZbLS0oZnJhbWUtPmlucHV0LmYubG9va2FoZWFkKV0pOworICAgIH0KKwor
ICBpbnQgYzsKKworICBibG9ja19pbnB1dCAoKTsKKworI2lmICFkZWZpbmVkIFVTRV9BTkRST0lE
X0FTU0VUUworCisgIC8qIEludGVycnVwdGVkIHJlYWRzIGhhdmUgYmVlbiBvYnNlcnZlZCB3aGls
ZSByZWFkaW5nIG92ZXIgdGhlIG5ldHdvcmsuICAqLworICB3aGlsZSAoKGMgPSBnZXRjIChmcmFt
ZS0+aW5wdXQuZi5zdHJlYW0pKSA9PSBFT0YgJiYgZXJybm8gPT0gRUlOVFIKKyAgICAgICAgICYm
IGZlcnJvciAoZnJhbWUtPmlucHV0LmYuc3RyZWFtKSkKKyAgICB7CisgICAgICB1bmJsb2NrX2lu
cHV0ICgpOworICAgICAgbHJlYWRfbWF5YmVfcXVpdCAoZnJhbWUpOworICAgICAgYmxvY2tfaW5w
dXQgKCk7CisgICAgICBjbGVhcmVyciAoZnJhbWUtPmlucHV0LmYuc3RyZWFtKTsKKyAgICB9CisK
KyNlbHNlCisKKyAgeworICAgIGNoYXIgYnl0ZTsKKyAgICBzc2l6ZV90IHJjOworCisgIHJldHJ5
OgorICAgIHJjID0gYW5kcm9pZF9hc3NldF9yZWFkIChmcmFtZS0+aW5wdXQuZi5zdHJlYW0sICZi
eXRlLCAxKTsKKworICAgIGlmIChyYyA9PSAwKQorICAgICAgYyA9IEVPRjsKKyAgICBlbHNlIGlm
IChyYyA9PSAtMSkKKyAgICAgIHsKKyAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKQorICAgICAg
ICAgIHsKKyAgICAgICAgICAgIHVuYmxvY2tfaW5wdXQgKCk7CisgICAgICAgICAgICBscmVhZF9t
YXliZV9xdWl0IChmcmFtZSk7CisgICAgICAgICAgICBibG9ja19pbnB1dCAoKTsKKyAgICAgICAg
ICAgIGdvdG8gcmV0cnk7CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgYyA9
IEVPRjsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBjID0gKHVuc2lnbmVkIGNoYXIpIGJ5dGU7
CisgIH0KKworI2VuZGlmCisKKyAgdW5ibG9ja19pbnB1dCAoKTsKKyAgaWYgKGMgPT0gRU9GKQog
ICAgIHsKLSAgICAgIHJlYWRieXRlID0gcmVhZGJ5dGVfZnJvbV9maWxlOwotICAgICAgZWFzc2Vy
dCAoaW5maWxlKTsKLSAgICAgIGVtYWNzX211bGVfZW5jb2RpbmcgPSAxOwotICAgICAgZ290byBy
ZWFkX211bHRpYnl0ZTsKKyAgICAgIGZyYW1lLT5yZWFkX2VvZiA9IHRydWU7CisgICAgICBjID0g
LTE7CiAgICAgfQorICByZXR1cm4gYzsKK30KIAotICB0ZW0gPSBjYWxsMCAocmVhZGNoYXJmdW4p
Oworc3RhdGljIGludAorcmVhZGJ5dGVfZnJvbV9maWxlIChyZWdpc3RlciBscmVhZF9mcmFtZSAq
ZnJhbWUpCit7CisgIGVhc3NlcnQgKEZST01fRklMRV9QIChmcmFtZS0+aW50eXBlKSAmJiAoZnJh
bWUtPmlucHV0LmYuc3RyZWFtKSk7CisKKyAgcmV0dXJuIHJlYWRieXRlX2Zyb21fc3RkaW8gKGZy
YW1lKTsKK30KIAotICBpZiAoIUZJWE5VTVAgKHRlbSkpCisKKy8qIEhhbmRsZSB1bnJlYWRpbmcg
YW5kIHJlcmVhZGluZyBvZiBjaGFyYWN0ZXJzLgorICAgV3JpdGUgUkVBRENIQVIgdG8gcmVhZCBh
IGNoYXJhY3RlciwKKyAgIFVOUkVBRChjKSB0byB1bnJlYWQgYyB0byBiZSByZWFkIGFnYWluLgor
CisgICBUaGVzZSBtYWNyb3MgY29ycmVjdGx5IHJlYWQvdW5yZWFkIG11bHRpYnl0ZSBjaGFyYWN0
ZXJzLiAgKi8KKworI2RlZmluZSBSRUFEQ0hBUihmcmFtZSkgKGZyYW1lLT5yZWFkb25lY2hhcihm
cmFtZSkpCisjZGVmaW5lIFVOUkVBRChmcmFtZSxjKSB1bnJlYWRjaGFyIChmcmFtZSwgYykKKwor
CitJTkxJTkUgaW50CitnZXRfZW1hY3NfbXVsZV9jaGFyX2xlbmd0aCAoc3RydWN0IGNoYXJzZXQg
KmNzLCBpbnQgYykKK3sKKyAgaW50IGRpbWVuc2lvbiA9IENIQVJTRVRfRElNRU5TSU9OIChjcyk7
CisgIHVuc2lnbmVkIGNvZGUgPSBFTkNPREVfQ0hBUiAoY3MsIGMpOworICBpbnQgc3o7CisgIGZv
ciAoc3ogPSAwOyBkaW1lbnNpb24gPiAwICYmIChjb2RlICYgMHhGRik7IGRpbWVuc2lvbi0tKQor
ICAgIHsKKyAgICAgIHN6Kys7CisgICAgICBjb2RlID4+PSA4OworICAgIH0KKyAgcmV0dXJuIHN6
OworfQorCisKKyNkZWZpbmUgUkVBRENIQVJfQkVHSU4oZnJhbWUpIFwKKyAgaW50IGM7IFwKKyAg
ZG8gXAorICAgIHsgXAorICAgICAgaWYgKGZyYW1lLT51bnJlYWRfY2hhciA+PSAwKSBcCisgICAg
ICAgIHsgXAorICAgICAgICAgIGMgPSBmcmFtZS0+dW5yZWFkX2NoYXI7IFwKKyAgICAgICAgICBm
cmFtZS0+dW5yZWFkX2NoYXIgPSAtMTsgXAorICAgICAgICAgIGZyYW1lLT5jaGFyX29mZnNldCsr
OyBcCisgICAgICAgICAgZnJhbWUtPmJ5dGVfb2Zmc2V0ICs9IGZyYW1lLT51bnJlYWRfYnl0ZXM7
IFwKKyAgICAgICAgICBmcmFtZS0+dW5yZWFkX2J5dGVzID0gMDsgXAorICAgICAgICAgIHJldHVy
biBjOyBcCisgICAgICAgIH0gXAorICAgIH0gXAorICB3aGlsZSAoMCkKKworI2RlZmluZSBSRUFE
Q0hBUl9GUk9NX0ZJTEVfQkVHSU4oZnJhbWUpIFwKKyAgdW5zaWduZWQgY2hhciBidWZbNF07IFwK
KyAgUkVBRENIQVJfQkVHSU4oZnJhbWUpOyBcCisgIGMgPSByZWFkYnl0ZV9mcm9tX2ZpbGUgKGZy
YW1lKTsgXAorICBpZiAoYyA8IDApIFwKKyAgICB7IFwKKyAgICAgIGZyYW1lLT5yZWFkX2VvZiA9
IHRydWU7IFwKKyAgICAgIHJldHVybiBjOyBcCisgICAgfSBcCisgIGRvIFwKKyAgICB7IFwKKyAg
ICAgIGlmIChBU0NJSV9DSEFSX1AgKGMpKSBcCisgICAgICAgIHsgXAorICAgICAgICAgIGZyYW1l
LT5jaGFyX29mZnNldCsrOyBcCisgICAgICAgICAgZnJhbWUtPmJ5dGVfb2Zmc2V0Kys7IFwKKyAg
ICAgICAgICByZXR1cm4gYzsgXAorICAgICAgIH0gXAorICB9IHdoaWxlICgwKQorCisvKiBpbnRl
cm5hbCBmb3JtIG9mIC9kZXYvbnVsbCAqLworc3RhdGljIGludAorcmVhZGNoYXJfZnJvbV9udWxs
IChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUpCit7CisgIGZyYW1lLT5yZWFkX2VvZiA9IHRy
dWU7CiAgIHJldHVybiAtMTsKLSAgcmV0dXJuIFhGSVhOVU0gKHRlbSk7Cit9CiAKLSByZWFkX211
bHRpYnl0ZToKLSAgaWYgKHVucmVhZF9jaGFyID49IDApCisvKiBIYW5kbGUgZW1hY3MtaW50ZXJu
YWwgY29kaW5nICovCitzdGF0aWMgaW50CityZWFkY2hhcl9mcm9tX211bHRpYnl0ZV9maWxlIChy
ZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUpCit7CisgIFJFQURDSEFSX0ZST01fRklMRV9CRUdJ
TihmcmFtZSk7CisgIGludCBpID0gMDsKKyAgYnVmW2krK10gPSBjOworICBpbnQgbGVuID0gQllU
RVNfQllfQ0hBUl9IRUFEIChjKTsKKyAgd2hpbGUgKGkgPCBsZW4pCisgICAgeworICAgICAgYnVm
W2krK10gPSBjID0gcmVhZGJ5dGVfZnJvbV9maWxlIChmcmFtZSk7CisgICAgICBpZiAoYyA8IDAg
fHwgISBUUkFJTElOR19DT0RFX1AgKGMpKQorICAgICAgICB7CisgICAgICAgICAgZm9yIChpIC09
IGMgPCAwOyAwIDwgLS1pOyApCisgICAgICAgICAgICBmcmFtZS0+aW5wdXQuZi5idWZbZnJhbWUt
PmlucHV0LmYubG9va2FoZWFkKytdID0gYzsKKyAgICAgICAgICByZXR1cm4gQllURThfVE9fQ0hB
UiAoYnVmWzBdKTsKKyAgICAgICAgfQorICAgIH0KKyAgZnJhbWUtPmNoYXJfb2Zmc2V0Kys7Cisg
IGMgPSBTVFJJTkdfQ0hBUiAoYnVmKTsKKyAgZnJhbWUtPmJ5dGVfb2Zmc2V0ICs9IENIQVJfQllU
RVMoYyk7CisgIHJldHVybiBjOworfQorCitzdGF0aWMgaW50CityZWFkY2hhcl9mcm9tX3VuaWJ5
dGVfZmlsZSAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKQoreworICBSRUFEQ0hBUl9CRUdJ
TihmcmFtZSk7CisgIGMgPSByZWFkYnl0ZV9mcm9tX2ZpbGUgKGZyYW1lKTsKKyAgaWYgKGMgPCAw
KQogICAgIHsKLSAgICAgIGMgPSB1bnJlYWRfY2hhcjsKLSAgICAgIHVucmVhZF9jaGFyID0gLTE7
CisgICAgICBmcmFtZS0+cmVhZF9lb2YgPSB0cnVlOwogICAgICAgcmV0dXJuIGM7CiAgICAgfQot
ICBjID0gKCpyZWFkYnl0ZSkgKC0xLCByZWFkY2hhcmZ1bik7Ci0gIGlmIChjIDwgMCkKLSAgICBy
ZXR1cm4gYzsKLSAgaWYgKG11bHRpYnl0ZSkKLSAgICAqbXVsdGlieXRlID0gMTsKLSAgaWYgKEFT
Q0lJX0NIQVJfUCAoYykpCi0gICAgcmV0dXJuIGM7Ci0gIGlmIChlbWFjc19tdWxlX2VuY29kaW5n
KQotICAgIHJldHVybiByZWFkX2VtYWNzX211bGVfY2hhciAoYywgcmVhZGJ5dGUsIHJlYWRjaGFy
ZnVuKTsKLSAgaSA9IDA7Ci0gIGJ1ZltpKytdID0gYzsKLSAgbGVuID0gQllURVNfQllfQ0hBUl9I
RUFEIChjKTsKLSAgd2hpbGUgKGkgPCBsZW4pCisgIGZyYW1lLT5jaGFyX29mZnNldCsrOworICBm
cmFtZS0+Ynl0ZV9vZmZzZXQrKzsKKyAgcmV0dXJuIGM7Cit9CisKKy8qIFJlYWQgb25lIG5vbi1B
U0NJSSBjaGFyYWN0ZXIgZnJvbSBJTkZJTEUuICBUaGUgY2hhcmFjdGVyIGlzCisgICBlbmNvZGVk
IGluIGBlbWFjcy1tdWxlJyBhbmQgdGhlIGZpcnN0IGJ5dGUgaXMgYWxyZWFkeSByZWFkIGluCisg
ICBDLiAgKi8KKworc3RhdGljIGludAorcmVhZGNoYXJfZnJvbV9tdWxlX2ZpbGUgKHJlZ2lzdGVy
IGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyAgUkVBRENIQVJfRlJPTV9GSUxFX0JFR0lOKGZyYW1l
KTsKKyAgLyogRW1hY3MtbXVsZSBjb2RpbmcgdXNlcyBhdCBtb3N0IDQtYnl0ZSBmb3Igb25lIGNo
YXJhY3Rlci4gICovCisgIGludCBsZW4gPSBlbWFjc19tdWxlX2J5dGVzW2NdOworICBzdHJ1Y3Qg
Y2hhcnNldCAqY2hhcnNldDsKKyAgdW5zaWduZWQgY29kZTsKKworICBpZiAobGVuID09IDEpCisg
ICAgLyogQyBpcyBub3QgYSB2YWxpZCBsZWFkaW5nLWNvZGUgb2YgYGVtYWNzLW11bGUnLiAgKi8K
KyAgICByZXR1cm4gQllURThfVE9fQ0hBUiAoYyk7CisKKyAgaW50IGkgPSAwOworICBidWZbaSsr
XSA9IGM7CisgIHdoaWxlIChpIDwgbGVuKQorICAgIHsKKyAgICAgIGJ1ZltpKytdID0gYyA9IHJl
YWRieXRlX2Zyb21fZmlsZSAoZnJhbWUpOworICAgICAgaWYgKGMgPCAweEEwKQorICAgICAgICB7
CisgICAgICAgICAgZm9yIChpIC09IGMgPCAwOyAwIDwgLS1pOyApCisgICAgICAgICAgICBmcmFt
ZS0+aW5wdXQuZi5idWZbZnJhbWUtPmlucHV0LmYubG9va2FoZWFkKytdID0gYzsKKyAgICAgICAg
ICByZXR1cm4gQllURThfVE9fQ0hBUiAoYnVmWzBdKTsKKyAgICAgICAgfQorICAgIH0KKworICBp
ZiAobGVuID09IDIpCisgICAgeworICAgICAgY2hhcnNldCA9IENIQVJTRVRfRlJPTV9JRCAoZW1h
Y3NfbXVsZV9jaGFyc2V0W2J1ZlswXV0pOworICAgICAgY29kZSA9IGJ1ZlsxXSAmIDB4N0Y7Cisg
ICAgfQorICBlbHNlIGlmIChsZW4gPT0gMykKKyAgICB7CisgICAgICBpZiAoYnVmWzBdID09IEVN
QUNTX01VTEVfTEVBRElOR19DT0RFX1BSSVZBVEVfMTEKKyAgICAgICAgICB8fCBidWZbMF0gPT0g
RU1BQ1NfTVVMRV9MRUFESU5HX0NPREVfUFJJVkFURV8xMikKKyAgICAgICAgeworICAgICAgICAg
IGNoYXJzZXQgPSBDSEFSU0VUX0ZST01fSUQgKGVtYWNzX211bGVfY2hhcnNldFtidWZbMV1dKTsK
KyAgICAgICAgICBjb2RlID0gYnVmWzJdICYgMHg3RjsKKyAgICAgICAgfQorICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgY2hhcnNldCA9IENIQVJTRVRfRlJPTV9JRCAoZW1hY3NfbXVs
ZV9jaGFyc2V0W2J1ZlswXV0pOworICAgICAgICAgIGNvZGUgPSAoKGJ1ZlsxXSA8PCA4KSB8IGJ1
ZlsyXSkgJiAweDdGN0Y7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBj
aGFyc2V0ID0gQ0hBUlNFVF9GUk9NX0lEIChlbWFjc19tdWxlX2NoYXJzZXRbYnVmWzFdXSk7Cisg
ICAgICBjb2RlID0gKChidWZbMl0gPDwgOCkgfCBidWZbM10pICYgMHg3RjdGOworICAgIH0KKyAg
ZnJhbWUtPm11bGVfY2hhcnNldCA9IGNoYXJzZXQ7CisgIGMgPSBERUNPREVfQ0hBUiAoY2hhcnNl
dCwgY29kZSk7CisgIGlmIChjIDwgMCkKKyAgICBpbnZhbGlkX3N5bnRheCAoZnJhbWUsICJpbnZh
bGlkIG11bHRpYnl0ZSBmb3JtIik7CisgIHJldHVybiBjOworfQorCisjZGVmaW5lIFJFQURDSEFS
X1NUUklOR19CRUdJTihmcmFtZSkgXAorICByZWdpc3RlciBpbnQgYzsgXAorICBkbyBcCisgICAg
eyBcCisgICAgICBpZiAoZnJhbWUtPmNoYXJfb2Zmc2V0ID49IGZyYW1lLT5pbnB1dC5zLmxpbWl0
KSBcCisgICAgICAgIHsgXAorICAgICAgICAgIGMgPSAtMTsgXAorICAgICAgICAgIGZyYW1lLT5y
ZWFkX2VvZiA9IHRydWU7IFwKKyAgICAgICAgICByZXR1cm4gYzsgXAorICAgICAgICB9IFwKKyAg
ICB9IFwKKyAgd2hpbGUgKDApOworCisKK3N0YXRpYyBpbnQKK3JlYWRjaGFyX2Zyb21fbXVsdGli
eXRlX3N0cmluZyAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKQoreworICBSRUFEQ0hBUl9T
VFJJTkdfQkVHSU4gKGZyYW1lKTsKKyAgYyA9IGZldGNoX3N0cmluZ19jaGFyX2FkdmFuY2Vfbm9f
Y2hlY2sgKGZyYW1lLT5pbnB1dC5zLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICYoZnJhbWUtPmNoYXJfb2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICYoZnJhbWUtPmJ5dGVfb2Zmc2V0KSk7CisgIHJldHVy
biBjOworfQorCitzdGF0aWMgaW50CityZWFkY2hhcl9mcm9tX3VuaWJ5dGVfc3RyaW5nIChyZWdp
c3RlciBscmVhZF9mcmFtZSAqZnJhbWUpCit7CisgIFJFQURDSEFSX1NUUklOR19CRUdJTiAoZnJh
bWUpOworICBjID0gU1JFRiAoZnJhbWUtPmlucHV0LnMuc3RyaW5nLCBmcmFtZS0+Ynl0ZV9vZmZz
ZXQpOworICBmcmFtZS0+Y2hhcl9vZmZzZXQrKzsKKyAgZnJhbWUtPmJ5dGVfb2Zmc2V0Kys7Cisg
IHJldHVybiBjOworfQorCisKKyNkZWZpbmUgUkVBRENIQVJfQlVGRkVSX1NFVFVQKGZyYW1lLHNy
Yyxwb3MpICAgIFwKKyAgaW50IGM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgc3RydWN0IGJ1ZmZlciAqaW5idWZmZXIgPSBYQlVGRkVSICggKHNyYykgKTsgIFwK
KyAgaWYgKCEgQlVGRkVSX0xJVkVfUCAoaW5idWZmZXIpKSAgICAgICAgICAgICAgIFwKKyAgICBy
ZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcHRyZGlmZl90
IGJ5dGVwb3MgPSAoIHBvcyApOyAgICAgICAgICAgICAgICAgIFwKKyAgZG8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmIChieXRlcG9zID49IEJVRl9aVl9C
WVRFIChpbmJ1ZmZlcikpICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICBmcmFtZS0+cmVhZF9lb2YgPSB0cnVlOyAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFJFQURDSEFSX0JVRkZFUl9CRUdJTihmcmFtZSxzcmMp
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICBSRUFEQ0hBUl9CVUZGRVJfU0VUVVAgKGZyYW1l
LCBzcmMsIEJVRl9QVF9CWVRFIChpbmJ1ZmZlcikpCisKKyNkZWZpbmUgUkVBRENIQVJfQlVGRkVS
X0ZFVENIX01VTFRJQllURShmcmFtZSkgXAorICAvKiBGZXRjaCB0aGUgY2hhcmFjdGVyIGNvZGUg
ZnJvbSB0aGUgYnVmZmVyLiAgKi8gXAorICB1bnNpZ25lZCBjaGFyICpwID0gQlVGX0JZVEVfQURE
UkVTUyAoaW5idWZmZXIsIGJ5dGVwb3MpOyBcCisgIGludCBjbGVuOyBcCisgIGMgPSBzdHJpbmdf
Y2hhcl9hbmRfbGVuZ3RoIChwLCAmY2xlbik7IFwKKyAgYnl0ZXBvcyArPSBjbGVuCisKKyNkZWZp
bmUgUkVBRENIQVJfQlVGRkVSX0ZFVENIX1VOSUJZVEUoZnJhbWUpIFwKKyAgYyA9IEJVRl9GRVRD
SF9CWVRFIChpbmJ1ZmZlciwgYnl0ZXBvcyk7IFwKKyAgYyA9IFVOSUJZVEVfVE9fQ0hBUiAoYyk7
IFwKKyAgYnl0ZXBvcysrCisKKyNkZWZpbmUgUkVBRENIQVJfQlVGRkVSX0VORChmcmFtZSkgXAor
ICBTRVRfQlVGX1BUX0JPVEggKGluYnVmZmVyLCBCVUZfUFQgKGluYnVmZmVyKSArIDEsIGJ5dGVw
b3MpOyBcCisgIGZyYW1lLT5jaGFyX29mZnNldCA9IEJVRl9QVChpbmJ1ZmZlcik7IFwKKyAgZnJh
bWUtPmJ5dGVfb2Zmc2V0ID0gYnl0ZXBvcworCisjZGVmaW5lIFJFQURDSEFSX01BUktFUl9CRUdJ
TihmcmFtZSkgXAorICBSRUFEQ0hBUl9CVUZGRVJfU0VUVVAgKGZyYW1lLCBmcmFtZS0+aW5wdXQu
bS5iLmJ1ZmZlciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcl9ieXRlX3Bvc2l0
aW9uIChmcmFtZS0+aW5wdXQubS5tYXJrZXIpKQorCisjZGVmaW5lIFJFQURDSEFSX01BUktFUl9F
TkQoZnJhbWUpIFwKKyAgZnJhbWUtPmJ5dGVfb2Zmc2V0ID0gWE1BUktFUiAoZnJhbWUtPmlucHV0
Lm0ubWFya2VyKS0+Ynl0ZXBvcyA9IGJ5dGVwb3M7IFwKKyAgZnJhbWUtPmNoYXJfb2Zmc2V0ID0g
KysoWE1BUktFUiAoZnJhbWUtPmlucHV0Lm0ubWFya2VyKS0+Y2hhcnBvcykKKworc3RhdGljIGlu
dAorcmVhZGNoYXJfZnJvbV9tdWx0aWJ5dGVfYnVmZmVyIChyZWdpc3RlciBscmVhZF9mcmFtZSAq
ZnJhbWUpCit7CisgIFJFQURDSEFSX0JVRkZFUl9CRUdJTiAoZnJhbWUsIGZyYW1lLT5pbnB1dC5i
LmJ1ZmZlcik7CisgIFJFQURDSEFSX0JVRkZFUl9GRVRDSF9NVUxUSUJZVEUoZnJhbWUpOworICBS
RUFEQ0hBUl9CVUZGRVJfRU5EKGZyYW1lKTsKKyAgcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBpbnQK
K3JlYWRjaGFyX2Zyb21fdW5pYnl0ZV9idWZmZXIgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFt
ZSkKK3sKKyAgUkVBRENIQVJfQlVGRkVSX0JFR0lOIChmcmFtZSxmcmFtZS0+aW5wdXQuYi5idWZm
ZXIpOworICBSRUFEQ0hBUl9CVUZGRVJfRkVUQ0hfVU5JQllURSAoZnJhbWUpOworICBSRUFEQ0hB
Ul9CVUZGRVJfRU5EIChmcmFtZSk7CisgIHJldHVybiBjOworfQorCitzdGF0aWMgaW50CityZWFk
Y2hhcl9mcm9tX211bHRpYnl0ZV9tYXJrZXIgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkK
K3sKKyAgUkVBRENIQVJfTUFSS0VSX0JFR0lOIChmcmFtZSk7CisgIFJFQURDSEFSX0JVRkZFUl9G
RVRDSF9NVUxUSUJZVEUgKGZyYW1lKTsKKyAgUkVBRENIQVJfTUFSS0VSX0VORCAoZnJhbWUpOwor
ICByZXR1cm4gYzsKK30KKworc3RhdGljIGludAorcmVhZGNoYXJfZnJvbV91bmlieXRlX21hcmtl
ciAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKQoreworICBSRUFEQ0hBUl9NQVJLRVJfQkVH
SU4gKGZyYW1lKTsKKyAgUkVBRENIQVJfQlVGRkVSX0ZFVENIX1VOSUJZVEUgKGZyYW1lKTsKKyAg
UkVBRENIQVJfTUFSS0VSX0VORCAoZnJhbWUpOworICByZXR1cm4gYzsKK30KKworc3RhdGljIGlu
dAorcmVhZGNoYXJfZnJvbV9tdWx0aWJ5dGVfcHJvY2VkdXJlIChyZWdpc3RlciBscmVhZF9mcmFt
ZSAqZnJhbWUpCit7CisgIFJFQURDSEFSX0JFR0lOKGZyYW1lKTsKKyAgTGlzcF9PYmplY3QgdGVt
ID0gY2FsbDAgKGZyYW1lLT5pbnB1dC5wLnByb2MpOworICBjID0gKCFGSVhOVU1QICh0ZW0pKSA/
IC0xIDogWEZJWE5VTSh0ZW0pOworICBpZiAoYyA9PSAtMSkKKyAgICAgIGZyYW1lLT5yZWFkX2Vv
ZiA9IHRydWU7CisgIHJldHVybiBjOworfQorCitzdGF0aWMgaW50CityZWFkY2hhcl9mcm9tX2lu
ZGlyZWN0IChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUpCit7CisgIGxyZWFkX2ZyYW1lICpz
b3VyY2UgPSBmcmFtZS0+aW5wdXQuZnJhbWUuc291cmNlOworICBpbnQgYzsKKyAgYyA9IFJFQURD
SEFSIChzb3VyY2UpOworICBmcmFtZS0+Y2hhcl9vZmZzZXQgPSBzb3VyY2UtPmNoYXJfb2Zmc2V0
OworICBmcmFtZS0+Ynl0ZV9vZmZzZXQgPSBzb3VyY2UtPmJ5dGVfb2Zmc2V0OworICByZXR1cm4g
YzsKK30KKworLyogZGVmaW5lIHNvbWUgdXNlZnVsIGNhc2UgY29uc3RhbnRzICovCitlbnVtIHsK
KyAgVU5JQllURV9GSUxFID0gTFJFQURfSU5QVVRfRklMRSA8PCAxIHwgTFJFQURfTVVMVElCWVRF
X0ZBTFNFLAorICBNVUxUSUJZVEVfRklMRSA9IExSRUFEX0lOUFVUX0ZJTEUgPDwgMSB8IExSRUFE
X01VTFRJQllURV9UUlVFLAorICBVTklCWVRFX0ZJTEVfTVVMRSA9IExSRUFEX0lOUFVUX0ZJTEVf
TVVMRSA8PCAxIHwgTFJFQURfTVVMVElCWVRFX0ZBTFNFLAorICBNVUxUSUJZVEVfRklMRV9NVUxF
ID0gTFJFQURfSU5QVVRfRklMRV9NVUxFIDw8IDEgfCBMUkVBRF9NVUxUSUJZVEVfVFJVRSwKKyAg
VU5JQllURV9TVFJJTkcgPSBMUkVBRF9JTlBVVF9TVFJJTkcgPDwgMSB8IExSRUFEX01VTFRJQllU
RV9GQUxTRSwKKyAgTVVMVElCWVRFX1NUUklORyA9IExSRUFEX0lOUFVUX1NUUklORyA8PCAxIHwg
TFJFQURfTVVMVElCWVRFX1RSVUUsCisgIFVOSUJZVEVfQlVGRkVSID0gTFJFQURfSU5QVVRfQlVG
RkVSIDw8IDEgfCBMUkVBRF9NVUxUSUJZVEVfRkFMU0UsCisgIE1VTFRJQllURV9CVUZGRVIgPSBM
UkVBRF9JTlBVVF9CVUZGRVIgPDwgMSB8IExSRUFEX01VTFRJQllURV9UUlVFLAorICBVTklCWVRF
X01BUktFUiA9IExSRUFEX0lOUFVUX01BUktFUiA8PCAxIHwgTFJFQURfTVVMVElCWVRFX0ZBTFNF
LAorICBNVUxUSUJZVEVfTUFSS0VSID0gTFJFQURfSU5QVVRfTUFSS0VSIDw8IDEgfCBMUkVBRF9N
VUxUSUJZVEVfVFJVRSwKKyAgVU5JQllURV9QUk9DRURVUkUgPSBMUkVBRF9JTlBVVF9QUk9DRURV
UkUgPDwgMSB8IExSRUFEX01VTFRJQllURV9GQUxTRSwKKyAgTVVMVElCWVRFX1BST0NFRFVSRSA9
IExSRUFEX0lOUFVUX1BST0NFRFVSRSA8PCAxIHwgTFJFQURfTVVMVElCWVRFX1RSVUUsCisgIFVO
SUJZVEVfQklOQVJZID0gTFJFQURfSU5QVVRfQklOQVJZIDw8IDEgfCBMUkVBRF9NVUxUSUJZVEVf
RkFMU0UsCisgIE1VTFRJQllURV9CSU5BUlkgPSBMUkVBRF9JTlBVVF9CSU5BUlkgPDwgMSB8IExS
RUFEX01VTFRJQllURV9UUlVFLAorICBVTklCWVRFX0lORElSRUNUID0gTFJFQURfSU5QVVRfSU5E
SVJFQ1QgPDwgMSB8IExSRUFEX01VTFRJQllURV9GQUxTRSwKKyAgTVVMVElCWVRFX0lORElSRUNU
ID0gTFJFQURfSU5QVVRfSU5ESVJFQ1QgPDwgMSB8IExSRUFEX01VTFRJQllURV9UUlVFLAorICBV
TklCWVRFX05VTEwgPSBMUkVBRF9JTlBVVF9OVUxMIDw8IDEgfCBMUkVBRF9NVUxUSUJZVEVfRkFM
U0UsCisgIE1VTFRJQllURV9OVUxMID0gTFJFQURfSU5QVVRfTlVMTCA8PCAxIHwgTFJFQURfTVVM
VElCWVRFX1RSVUUKK307CisKK3N0YXRpYyByZWFkb25lY2hhcl9mdW5jIHJlYWRvbmVjaGFyX3Ri
bFtNVUxUSUJZVEVfTlVMTCArIDFdID0KKyAgeworICAgIE5VTEwsCisgICAgW1VOSUJZVEVfRklM
RV0gPSByZWFkY2hhcl9mcm9tX3VuaWJ5dGVfZmlsZSwKKyAgICBbTVVMVElCWVRFX0ZJTEVdID0g
cmVhZGNoYXJfZnJvbV9tdWx0aWJ5dGVfZmlsZSwKKyAgICBbVU5JQllURV9GSUxFX01VTEVdID0g
TlVMTCwKKyAgICBbTVVMVElCWVRFX0ZJTEVfTVVMRV0gPSByZWFkY2hhcl9mcm9tX211bGVfZmls
ZSwKKyAgICBbVU5JQllURV9TVFJJTkddID0gcmVhZGNoYXJfZnJvbV91bmlieXRlX3N0cmluZywK
KyAgICBbTVVMVElCWVRFX1NUUklOR10gPSByZWFkY2hhcl9mcm9tX211bHRpYnl0ZV9zdHJpbmcs
CisgICAgW1VOSUJZVEVfQlVGRkVSXSA9IHJlYWRjaGFyX2Zyb21fdW5pYnl0ZV9idWZmZXIsCisg
ICAgW01VTFRJQllURV9CVUZGRVJdID0gcmVhZGNoYXJfZnJvbV9tdWx0aWJ5dGVfYnVmZmVyLAor
ICAgIFtVTklCWVRFX01BUktFUl0gPSByZWFkY2hhcl9mcm9tX3VuaWJ5dGVfbWFya2VyLAorICAg
IFtNVUxUSUJZVEVfTUFSS0VSXSA9IHJlYWRjaGFyX2Zyb21fbXVsdGlieXRlX21hcmtlciwKKyAg
ICBbVU5JQllURV9QUk9DRURVUkVdID0gTlVMTCwKKyAgICBbTVVMVElCWVRFX1BST0NFRFVSRV0g
PSByZWFkY2hhcl9mcm9tX211bHRpYnl0ZV9wcm9jZWR1cmUsCisgICAgW1VOSUJZVEVfTlVMTF0g
PSByZWFkY2hhcl9mcm9tX2luZGlyZWN0LAorICAgIFtNVUxUSUJZVEVfTlVMTF0gPSByZWFkY2hh
cl9mcm9tX2luZGlyZWN0LAorICAgIFtVTklCWVRFX05VTExdID0gcmVhZGNoYXJfZnJvbV9udWxs
LAorICAgIFtNVUxUSUJZVEVfTlVMTF0gPSByZWFkY2hhcl9mcm9tX251bGwKKyAgfTsKKworI2lm
IDAKK3N0YXRpYyByZWFkb25lY2hhcl9mdW5jIHJlYWRvbmVjaGFyID0gTlVMTDsKKyNlbmRpZgor
CitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZV9yZWFkb25lY2hhciAocmVnaXN0ZXIgbHJlYWRfZnJh
bWUgKmZyYW1lKQoreworIHJldHJ5OgorICBpZiAoVkFMSURfTVVMVElCWVRFIChmcmFtZS0+bXVs
dGlieXRlKSkKKyAgICB7CisgICAgICBpZiAoVkFMSURfSU5QVVRfVFlQRSAoZnJhbWUtPmludHlw
ZSkpCisgICAgICAgIGZyYW1lLT5yZWFkb25lY2hhciA9IHJlYWRvbmVjaGFyX3RibFsoZnJhbWUt
PmludHlwZSA8PCAxKSArIGZyYW1lLT5tdWx0aWJ5dGVdOworICAgICAgZWxzZQorICAgICAgICB4
c2lnbmFsMSAoUWVycm9yLAorICAgICAgICAgICAgICAgICAgQ0FMTE4gKEZmb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgYnVpbGRfc3RyaW5nICgiSW52YWxpZCBpbnB1dCB0eXBlIGZv
ciByZWFkKC0qKTogJVMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2ZpeG51bShm
cmFtZS0+aW50eXBlKSkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHJlcG9ydF9scmVh
ZF9tdWx0aWJ5dGUoZnJhbWUpOworICAgICAgaWYgKFZBTElEX01VTFRJQllURSAoZnJhbWUtPm11
bHRpYnl0ZSkpCisgICAgICAgIGdvdG8gcmV0cnk7CisgICAgICB4c2lnbmFsMSAoUWVycm9yLAor
ICAgICAgICAgICAgICAgIGJ1aWxkX3N0cmluZyAoIkludGVybmFsIGVycm9yOiBtdWx0aWJ5dGUt
bmVzcyBvZiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5wdXQgdG8gcmVhZCgt
KikgY291bGQgbm90IGJlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXRlcm1p
bmVkIikpOworICAgIH0KKyAgaWYgKCFmcmFtZS0+cmVhZG9uZWNoYXIpCisgICAgeHNpZ25hbDEg
KFFlcnJvciwKKyAgICAgICAgICAgICAgQ0FMTE4gKEZmb3JtYXQsCisgICAgICAgICAgICAgICAg
ICAgICBidWlsZF9zdHJpbmcgKCJJbnZhbGlkIHJlYWRvbmVjaGFyIGZ1bmN0aW9uICIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciByZWFkKC0qKTogaW5wdXQgdHlwZSAl
UywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlieXRlICVTIiks
CisgICAgICAgICAgICAgICAgICAgICBtYWtlX2ZpeG51bShmcmFtZS0+aW50eXBlKSwgbWFrZV9m
aXhudW0oZnJhbWUtPm11bHRpYnl0ZSkpKTsKK30KKworREVGVU4gKCJyZWFkZXItaW5wdXQtc3Ry
ZWFtIiwKKyAgICAgICBGcmVhZGVyX2lucHV0X3N0cmVhbSwgU3JlYWRlcl9pbnB1dF9zdHJlYW0s
IDAsIDEsIDAsCisgICAgICAgZG9jOiAvKiBSZWFkIENIQVJBQ1RFUiBmcm9tIGN1cnJlbnQgcmVh
ZGVyIHN0cmVhbS4KK09ubHkgZm9yIGludGVybmFsIHVzZS4qLykKKyAgKExpc3BfT2JqZWN0IGNo
YXJhY3RlcikKK3sKKyAgcmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lID0gY3VycmVudF9mcmFt
ZTsKKyAgaW50IGM7CisgIGlmIChOSUxQIChjaGFyYWN0ZXIpKQorICAgIGMgPSAtMTsKKyAgZWxz
ZSBpZiAoQ0hBUkFDVEVSUCAoY2hhcmFjdGVyKSkKKyAgICBjID0gWEZJWE5VTSAoY2hhcmFjdGVy
KTsKKyAgZWxzZQorICAgIHhzaWduYWwxIChRZXJyb3IsCisgICAgICAgICAgICAgIENBTExOIChG
Zm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgYnVpbGRfc3RyaW5nICgicmVhZGVyLWlucHV0
LXN0cmVhbTogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQg
bm90IGEgY2hhcmFjdGVyOiAnJXMnIiksCisgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIp
KTsKKyAgaWYgKGZyYW1lICYmIGZyYW1lLT5yZWFkb25lY2hhcikKICAgICB7Ci0gICAgICBidWZb
aSsrXSA9IGMgPSAoKnJlYWRieXRlKSAoLTEsIHJlYWRjaGFyZnVuKTsKLSAgICAgIGlmIChjIDwg
MCB8fCAhIFRSQUlMSU5HX0NPREVfUCAoYykpCisgICAgICBpZiAoYyA+PSAwKQogICAgICAgICB7
Ci0JICBmb3IgKGkgLT0gYyA8IDA7IDAgPCAtLWk7ICkKLQkgICAgKCpyZWFkYnl0ZSkgKGJ1Zltp
XSwgcmVhZGNoYXJmdW4pOwotCSAgcmV0dXJuIEJZVEU4X1RPX0NIQVIgKGJ1ZlswXSk7CisgICAg
ICAgICAgVU5SRUFEIChmcmFtZSwgYyk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAg
YyA9IFJFQURDSEFSIChmcmFtZSk7CiAgICAgfQorICBlbHNlCisgICAgeworICAgICAgeHNpZ25h
bDEgKFFlcnJvciwKKyAgICAgICAgICAgICAgICBidWlsZF9zdHJpbmcgKCJyZWFkZXItaW5wdXQt
c3RyZWFtOiByZWFkZXIgbm90IGFjdGl2ZSIpKTsKICAgICB9Ci0gIHJldHVybiBTVFJJTkdfQ0hB
UiAoYnVmKTsKKyAgcmV0dXJuIChtYWtlX2ZpeG51bSAoYykpOwogfQogCi0jZGVmaW5lIEZST01f
RklMRV9QKHJlYWRjaGFyZnVuKQkJCVwKLSAgKEVRIChyZWFkY2hhcmZ1biwgUWdldF9maWxlX2No
YXIpCQkJXAotICAgfHwgRVEgKHJlYWRjaGFyZnVuLCBRZ2V0X2VtYWNzX211bGVfZmlsZV9jaGFy
KSkKLQogc3RhdGljIHZvaWQKLXNraXBfZHluX2J5dGVzIChMaXNwX09iamVjdCByZWFkY2hhcmZ1
biwgcHRyZGlmZl90IG4pCitza2lwX2R5bl9ieXRlcyAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZy
YW1lLCBwdHJkaWZmX3QgbikKIHsKLSAgaWYgKEZST01fRklMRV9QIChyZWFkY2hhcmZ1bikpCisg
IGlmIChGUk9NX0ZJTEVfUCAoZnJhbWUtPmludHlwZSkgJiYgIWZyYW1lLT5tdWx0aWJ5dGUpCiAg
ICAgewogICAgICAgYmxvY2tfaW5wdXQgKCk7ICAgICAgICAgICAvKiBGSVhNRTogTm90IHN1cmUg
aWYgaXQncyBuZWVkZWQuICAqLwotICAgICAgZmlsZV9zZWVrIChpbmZpbGUtPnN0cmVhbSwgbiAt
IGluZmlsZS0+bG9va2FoZWFkLCBTRUVLX0NVUik7CisgICAgICBmaWxlX3NlZWsgKGZyYW1lLT5p
bnB1dC5mLnN0cmVhbSwgbiAtIGZyYW1lLT5pbnB1dC5mLmxvb2thaGVhZCwgU0VFS19DVVIpOwor
ICAgICAgZnJhbWUtPmNoYXJfb2Zmc2V0ICs9IG47CisgICAgICBmcmFtZS0+Ynl0ZV9vZmZzZXQg
Kz0gbjsKICAgICAgIHVuYmxvY2tfaW5wdXQgKCk7Ci0gICAgICBpbmZpbGUtPmxvb2thaGVhZCA9
IDA7CisgICAgICBmcmFtZS0+aW5wdXQuZi5sb29rYWhlYWQgPSAwOwogICAgIH0KICAgZWxzZQog
ICAgIHsgLyogV2UncmUgbm90IHJlYWRpbmcgZGlyZWN0bHkgZnJvbSBhIGZpbGUuICBJbiB0aGF0
IGNhc2UsIGl0J3MgZGlmZmljdWx0CkBAIC00NTcsMTUzICsxNjE1LDE5NCBAQCBza2lwX2R5bl9i
eXRlcyAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIHB0cmRpZmZfdCBuKQogICAgICAgICAgdGhh
dCBcMDM3IGlzIHRoZSBmaW5hbCBjaGFyLiAgKi8KICAgICAgIGludCBjOwogICAgICAgZG8gewot
CWMgPSBSRUFEQ0hBUjsKKyAgICAgICAgYyA9IFJFQURDSEFSIChmcmFtZSk7CiAgICAgICB9IHdo
aWxlIChjID49IDAgJiYgYyAhPSAnXDAzNycpOwogICAgIH0KIH0KIAogc3RhdGljIHZvaWQKLXNr
aXBfZHluX2VvZiAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCitza2lwX2R5bl9lb2YgKHJlZ2lz
dGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKIHsKLSAgaWYgKEZST01fRklMRV9QIChyZWFkY2hhcmZ1
bikpCisgIGlmIChGUk9NX0ZJTEVfUCAoZnJhbWUtPmludHlwZSkgJiYgIWZyYW1lLT5tdWx0aWJ5
dGUpCiAgICAgewogICAgICAgYmxvY2tfaW5wdXQgKCk7ICAgICAgICAgICAvKiBGSVhNRTogTm90
IHN1cmUgaWYgaXQncyBuZWVkZWQuICAqLwotICAgICAgZmlsZV9zZWVrIChpbmZpbGUtPnN0cmVh
bSwgMCwgU0VFS19FTkQpOworICAgICAgcHRyZGlmZl90IG4gPSBmaWxlX3RlbGwgKGZyYW1lLT5p
bnB1dC5mLnN0cmVhbSk7CisgICAgICBmaWxlX3NlZWsgKGZyYW1lLT5pbnB1dC5mLnN0cmVhbSwg
MCwgU0VFS19FTkQpOworICAgICAgbiA9IGZpbGVfdGVsbCAoZnJhbWUtPmlucHV0LmYuc3RyZWFt
KSAtIG47CisgICAgICBmcmFtZS0+Y2hhcl9vZmZzZXQgKz0gbjsKKyAgICAgIGZyYW1lLT5ieXRl
X29mZnNldCArPSBuOwogICAgICAgdW5ibG9ja19pbnB1dCAoKTsKLSAgICAgIGluZmlsZS0+bG9v
a2FoZWFkID0gMDsKKyAgICAgIGZyYW1lLT5pbnB1dC5mLmxvb2thaGVhZCA9IDA7CisgICAgICBm
cmFtZS0+cmVhZF9lb2YgPSB0cnVlOwogICAgIH0KICAgZWxzZQotICAgIHdoaWxlIChSRUFEQ0hB
UiA+PSAwKTsKKyAgICB3aGlsZSAoUkVBRENIQVIgKGZyYW1lKSA+PSAwKTsKIH0KIAotLyogVW5y
ZWFkIHRoZSBjaGFyYWN0ZXIgQyBpbiB0aGUgd2F5IGFwcHJvcHJpYXRlIGZvciB0aGUgc3RyZWFt
IFJFQURDSEFSRlVOLgotICAgSWYgdGhlIHN0cmVhbSBpcyBhIHVzZXIgZnVuY3Rpb24sIGNhbGwg
aXQgd2l0aCB0aGUgY2hhciBhcyBhcmd1bWVudC4gICovCi0KLXN0YXRpYyB2b2lkCi11bnJlYWRj
aGFyIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwgaW50IGMpCit2b2lkCit1bnJlYWRjaGFyIChy
ZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUsaW50IGMpCiB7Ci0gIHJlYWRjaGFyX29mZnNldC0t
OwotICBpZiAoYyA9PSAtMSkKLSAgICAvKiBEb24ndCBiYWNrIHVwIHRoZSBwb2ludGVyIGlmIHdl
J3JlIHVucmVhZGluZyB0aGUgZW5kLW9mLWlucHV0IG1hcmssCi0gICAgICAgc2luY2UgcmVhZGNo
YXIgZGlkbid0IGFkdmFuY2UgaXQgd2hlbiB3ZSByZWFkIGl0LiAgKi8KLSAgICA7Ci0gIGVsc2Ug
aWYgKEJVRkZFUlAgKHJlYWRjaGFyZnVuKSkKKyAgaWYgKGMgPCAwKQorICAgIHJldHVybjsKKyAg
c3dpdGNoIChmcmFtZS0+aW50eXBlKQogICAgIHsKLSAgICAgIHN0cnVjdCBidWZmZXIgKmIgPSBY
QlVGRkVSIChyZWFkY2hhcmZ1bik7Ci0gICAgICBwdHJkaWZmX3QgY2hhcnBvcyA9IEJVRl9QVCAo
Yik7Ci0gICAgICBwdHJkaWZmX3QgYnl0ZXBvcyA9IEJVRl9QVF9CWVRFIChiKTsKLQotICAgICAg
aWYgKCEgTklMUCAoQlZBUiAoYiwgZW5hYmxlX211bHRpYnl0ZV9jaGFyYWN0ZXJzKSkpCi0JYnl0
ZXBvcyAtPSBidWZfcHJldl9jaGFyX2xlbiAoYiwgYnl0ZXBvcyk7CisgICAgY2FzZSBMUkVBRF9J
TlBVVF9GSUxFOgorICAgICAgeworICAgICAgICBmcmFtZS0+dW5yZWFkX2NoYXIgPSBjOworICAg
ICAgICBmcmFtZS0+Y2hhcl9vZmZzZXQtLTsKKyAgICAgICAgaWYgKGZyYW1lLT5tdWx0aWJ5dGUp
CisgICAgICAgICAgeworICAgICAgICAgICAgZnJhbWUtPnVucmVhZF9ieXRlcyA9IENIQVJfQllU
RVMoYyk7CisgICAgICAgICAgICBmcmFtZS0+Ynl0ZV9vZmZzZXQgLT0gZnJhbWUtPnVucmVhZF9i
eXRlczsKKyAgICAgICAgICB9CiAgICAgICAgIGVsc2UKLQlieXRlcG9zLS07Ci0KLSAgICAgIFNF
VF9CVUZfUFRfQk9USCAoYiwgY2hhcnBvcyAtIDEsIGJ5dGVwb3MpOworICAgICAgICAgIHsKKyAg
ICAgICAgICAgIGZyYW1lLT51bnJlYWRfYnl0ZXMgPSAxOworICAgICAgICAgICAgZnJhbWUtPmJ5
dGVfb2Zmc2V0LS07CisgICAgICAgICAgfQogICAgICAgfQotICBlbHNlIGlmIChNQVJLRVJQIChy
ZWFkY2hhcmZ1bikpCisgICAgICBicmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVUX0ZJTEVfTVVM
RToKICAgICAgIHsKLSAgICAgIHN0cnVjdCBidWZmZXIgKmIgPSBYTUFSS0VSIChyZWFkY2hhcmZ1
biktPmJ1ZmZlcjsKLSAgICAgIHB0cmRpZmZfdCBieXRlcG9zID0gWE1BUktFUiAocmVhZGNoYXJm
dW4pLT5ieXRlcG9zOwotCi0gICAgICBYTUFSS0VSIChyZWFkY2hhcmZ1biktPmNoYXJwb3MtLTsK
LSAgICAgIGlmICghIE5JTFAgKEJWQVIgKGIsIGVuYWJsZV9tdWx0aWJ5dGVfY2hhcmFjdGVycykp
KQotCWJ5dGVwb3MgLT0gYnVmX3ByZXZfY2hhcl9sZW4gKGIsIGJ5dGVwb3MpOwotICAgICAgZWxz
ZQotCWJ5dGVwb3MtLTsKLQotICAgICAgWE1BUktFUiAocmVhZGNoYXJmdW4pLT5ieXRlcG9zID0g
Ynl0ZXBvczsKKyAgICAgICAgZnJhbWUtPnVucmVhZF9jaGFyID0gYzsKKyAgICAgICAgZnJhbWUt
PmNoYXJfb2Zmc2V0LS07CisgICAgICAgIGZyYW1lLT51bnJlYWRfYnl0ZXMKKyAgICAgICAgICA9
IGdldF9lbWFjc19tdWxlX2NoYXJfbGVuZ3RoIChmcmFtZS0+bXVsZV9jaGFyc2V0LCBjKTsKKyAg
ICAgICAgZnJhbWUtPmJ5dGVfb2Zmc2V0IC09IGZyYW1lLT51bnJlYWRfYnl0ZXM7CiAgICAgICB9
Ci0gIGVsc2UgaWYgKFNUUklOR1AgKHJlYWRjaGFyZnVuKSkKKyAgICAgIGJyZWFrOworICAgIGNh
c2UgTFJFQURfSU5QVVRfU1RSSU5HOgogICAgICAgewotICAgICAgcmVhZF9mcm9tX3N0cmluZ19p
bmRleC0tOwotICAgICAgcmVhZF9mcm9tX3N0cmluZ19pbmRleF9ieXRlCi0JPSBzdHJpbmdfY2hh
cl90b19ieXRlIChyZWFkY2hhcmZ1biwgcmVhZF9mcm9tX3N0cmluZ19pbmRleCk7CisgICAgICAg
IGZyYW1lLT5jaGFyX29mZnNldC0tOworICAgICAgICBmcmFtZS0+Ynl0ZV9vZmZzZXQgLT0gZnJh
bWUtPm11bHRpYnl0ZSA/IENIQVJfQllURVMgKGMpIDogMTsKICAgICAgIH0KLSAgZWxzZSBpZiAo
RlJPTV9GSUxFX1AgKHJlYWRjaGFyZnVuKSkKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJFQURf
SU5QVVRfUFJPQ0VEVVJFOgogICAgICAgewotICAgICAgdW5yZWFkX2NoYXIgPSBjOworICAgICAg
ICBjYWxsbiAoZnJhbWUtPmlucHV0LnAucHJvYywgbWFrZV9maXhudW0gKGMpKTsKKyAgICAgICAg
ZnJhbWUtPmNoYXJfb2Zmc2V0LS07CisgICAgICAgIGZyYW1lLT5ieXRlX29mZnNldCAtPSBDSEFS
X0JZVEVTKGMpOwogICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9C
VUZGRVI6CisgICAgICB7CisgICAgICAgIHN0cnVjdCBidWZmZXIgKmIgPSBYQlVGRkVSIChmcmFt
ZS0+aW5wdXQuYi5idWZmZXIpOworICAgICAgICBmcmFtZS0+Y2hhcl9vZmZzZXQgPSBCVUZfUFQg
KGIpOworICAgICAgICBmcmFtZS0+Ynl0ZV9vZmZzZXQgPSBCVUZfUFRfQllURSAoYik7CisgICAg
ICAgIGlmIChmcmFtZS0+bXVsdGlieXRlKQorICAgICAgICAgIGZyYW1lLT5ieXRlX29mZnNldCAt
PSBidWZfcHJldl9jaGFyX2xlbiAoYiwgZnJhbWUtPmJ5dGVfb2Zmc2V0KTsKICAgICAgICAgZWxz
ZQotICAgIGNhbGxuIChyZWFkY2hhcmZ1biwgbWFrZV9maXhudW0gKGMpKTsKLX0KLQotc3RhdGlj
IGludAotcmVhZGJ5dGVfZnJvbV9zdGRpbyAodm9pZCkKLXsKLSAgaWYgKGluZmlsZS0+bG9va2Fo
ZWFkKQotICAgIHJldHVybiBpbmZpbGUtPmJ1ZlstLWluZmlsZS0+bG9va2FoZWFkXTsKLQotICBp
bnQgYzsKLSAgZmlsZV9zdHJlYW0gaW5zdHJlYW0gPSBpbmZpbGUtPnN0cmVhbTsKLQotICBibG9j
a19pbnB1dCAoKTsKLQotI2lmICFkZWZpbmVkIFVTRV9BTkRST0lEX0FTU0VUUwotCi0gIC8qIElu
dGVycnVwdGVkIHJlYWRzIGhhdmUgYmVlbiBvYnNlcnZlZCB3aGlsZSByZWFkaW5nIG92ZXIgdGhl
IG5ldHdvcmsuICAqLwotICB3aGlsZSAoKGMgPSBnZXRjIChpbnN0cmVhbSkpID09IEVPRiAmJiBl
cnJubyA9PSBFSU5UUiAmJiBmZXJyb3IgKGluc3RyZWFtKSkKKyAgICAgICAgICBmcmFtZS0+Ynl0
ZV9vZmZzZXQtLTsKKyAgICAgICAgZnJhbWUtPmNoYXJfb2Zmc2V0LS07CisgICAgICAgIFNFVF9C
VUZfUFRfQk9USCAoYiwgZnJhbWUtPmNoYXJfb2Zmc2V0LCBmcmFtZS0+Ynl0ZV9vZmZzZXQpOwor
ICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9NQVJLRVI6CiAgICAg
ICB7Ci0gICAgICB1bmJsb2NrX2lucHV0ICgpOwotICAgICAgbWF5YmVfcXVpdCAoKTsKLSAgICAg
IGJsb2NrX2lucHV0ICgpOwotICAgICAgY2xlYXJlcnIgKGluc3RyZWFtKTsKKyAgICAgICAgc3Ry
dWN0IGJ1ZmZlciAqYiA9IFhNQVJLRVIgKGZyYW1lLT5pbnB1dC5tLm1hcmtlciktPmJ1ZmZlcjsK
KyAgICAgICAgZnJhbWUtPmJ5dGVfb2Zmc2V0ID0gWE1BUktFUiAoZnJhbWUtPmlucHV0Lm0ubWFy
a2VyKS0+Ynl0ZXBvczsKKyAgICAgICAgZnJhbWUtPmNoYXJfb2Zmc2V0ID0gLS0oWE1BUktFUiAo
ZnJhbWUtPmlucHV0Lm0ubWFya2VyKS0+Y2hhcnBvcyk7CisgICAgICAgIGlmIChmcmFtZS0+bXVs
dGlieXRlKQorICAgICAgICAgIGZyYW1lLT5ieXRlX29mZnNldCAtPSBidWZfcHJldl9jaGFyX2xl
biAoYiwgZnJhbWUtPmJ5dGVfb2Zmc2V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGZyYW1l
LT5ieXRlX29mZnNldC0tOworICAgICAgICBYTUFSS0VSIChmcmFtZS0+aW5wdXQubS5tYXJrZXIp
LT5ieXRlcG9zID0gZnJhbWUtPmJ5dGVfb2Zmc2V0OworICAgICAgfQorICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBMUkVBRF9JTlBVVF9CSU5BUlk6CisgICAgY2FzZSBMUkVBRF9JTlBVVF9OVUxMOgor
ICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9JTkRJUkVDVDoKKyAgICAgIHVucmVh
ZGNoYXIgKGZyYW1lLT5pbnB1dC5mcmFtZS5zb3VyY2UsIGMpOworICAgICAgYnJlYWs7CisgICAg
ICBVTlJFQ09HTklaRURfTFJFQURfSU5QVVRfQ0FTRVMoInVucmVhZGNoYXIiKQogICAgIH0KK30K
IAotI2Vsc2UKKy8qIE1ha2Ugc3VyZSB0aGUgZmlsZSBzdHJlYW0gZWF0cyB0aGUgZmluYWwgdW5y
ZWFkY2hhcgorICAgYWZ0ZXIgYSByZWFkIG9wZXJhdGlvbiB0aGF0IHdvbid0IGJlIGNvbnRpbnVl
ZCwKKyAgIGkuZS4gaW4gYSBzaW5nbGUgb3BlcmF0aW9uICovCiAKK3N0YXRpYyB2b2lkCitjbG9z
aW5nX3VucmVhZGNoYXIgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyAgc3dpdGNo
IChmcmFtZS0+aW50eXBlKQorICAgIHsKKyAgICBjYXNlIExSRUFEX0lOUFVUX1BST0NFRFVSRToK
KyAgICBjYXNlIExSRUFEX0lOUFVUX0JVRkZFUjoKKyAgICBjYXNlIExSRUFEX0lOUFVUX01BUktF
UjoKKyAgICBjYXNlIExSRUFEX0lOUFVUX1NUUklORzoKKyAgICBjYXNlIExSRUFEX0lOUFVUX0JJ
TkFSWToKKyAgICBjYXNlIExSRUFEX0lOUFVUX05VTEw6CisgICAgICBicmVhazsKKyAgICBjYXNl
IExSRUFEX0lOUFVUX0ZJTEU6CisgICAgY2FzZSBMUkVBRF9JTlBVVF9GSUxFX01VTEU6CisgICAg
ICBpZiAoZnJhbWUtPnR5cGUgPT0gTFJFQURfRlJBTUVfU0lOR0xFKQogICAgICAgICB7Ci0gICAg
Y2hhciBieXRlOwotICAgIHNzaXplX3QgcmM7Ci0KLSAgcmV0cnk6Ci0gICAgcmMgPSBhbmRyb2lk
X2Fzc2V0X3JlYWQgKGluc3RyZWFtLCAmYnl0ZSwgMSk7Ci0KLSAgICBpZiAocmMgPT0gMCkKLSAg
ICAgIGMgPSBFT0Y7Ci0gICAgZWxzZSBpZiAocmMgPT0gLTEpCisgICAgICAgICAgLyogYWx3YXlz
IHB1dCBiYWNrIGFueSBsb29zZSBieXRlcyB0aGF0IGhhdmUgYmVlbiBwZWVrZWQKKyAgICAgICAg
ICAgICBidXQgbm90IHBhcnQgb2YgYSBjaGFyYWN0ZXIgY29uc3VtZWQgYnkgcmVhZDAgKi8KKyAg
ICAgICAgICBmb3IgKGludCBpID0gZnJhbWUtPmlucHV0LmYubG9va2FoZWFkLTE7IGkgPj0gMDsg
aS0tKQogICAgICAgICAgICAgewotCWlmIChlcnJubyA9PSBFSU5UUikKKyAgICAgICAgICAgICAg
dW5nZXRjIChmcmFtZS0+aW5wdXQuZi5idWZbaV0sIGZyYW1lLT5pbnB1dC5mLnN0cmVhbSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgZnJhbWUtPmlucHV0LmYubG9va2FoZWFkID0gMDsKKyAg
ICAgICAgICAvKiBUaGVuIGFueSBjaGFyYWN0ZXIgdGhhdCBoYXMgYmVlbiB1bnJlYWQKKyAgICAg
ICAgICAgICBoYXMgdG8gYmUgdHVybmVkIGludG8gYSBieXRlCisgICAgICAgICAgICAgZW5jb2Rp
bmcgYW5kIHJldHVybmVkICovCisgICAgICAgICAgaWYgKGZyYW1lLT51bnJlYWRfY2hhciA+PSAw
KQogICAgICAgICAgICAgewotCSAgICB1bmJsb2NrX2lucHV0ICgpOwotCSAgICBtYXliZV9xdWl0
ICgpOwotCSAgICBibG9ja19pbnB1dCAoKTsKLQkgICAgZ290byByZXRyeTsKKyAgICAgICAgICAg
ICAgaW50IGMgPSBmcmFtZS0+dW5yZWFkX2NoYXI7CisgICAgICAgICAgICAgIGludCBkaW0gPSBm
cmFtZS0+dW5yZWFkX2J5dGVzOworICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQVhf
TVVMVElCWVRFX0xFTkdUSF07CisgICAgICAgICAgICAgIGZyYW1lLT51bnJlYWRfY2hhciA9IC0x
OworICAgICAgICAgICAgICBmcmFtZS0+dW5yZWFkX2J5dGVzID0gMDsKKyAgICAgICAgICAgICAg
aWYgKGZyYW1lLT5tdWx0aWJ5dGUgJiYgIWZyYW1lLT5pbnB1dC5mLm11bGUpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgLyogb25seSBlbWFjcy1pbnRlcm5hbCBjb2Rpbmcg
YWxsb3dlZAorICAgICAgICAgICAgICAgICAgICAgZm9yIGFjdHVhbCBtdWx0aWJ5dGUgZmlsZSBz
dHJlYW1zCisgICAgICAgICAgICAgICAgICAgICBPbmx5IGNhc2UgaXMgcmVhZGluZyBmcm9tIHN0
YW5kYXJkCisgICAgICAgICAgICAgICAgICAgICBpbnB1dCBpbiBub24tZWRpdG9yIG1vZGUuCisg
ICAgICAgICAgICAgICAgICAgICBCeXRlLWNvbXBpbGVkIGZpbGVzIGFyZSBlaXRoZXIgaW4KKyAg
ICAgICAgICAgICAgICAgICAgIG5vLWNvbnZlcnNpb24gdW5pYnl0ZSBvciBlbWFjcy1tdWxlCisg
ICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgaW50IGxlbiA9IENIQVJfU1RS
SU5HIChjLCBidWYpOworICAgICAgICAgICAgICAgICAgZWFzc3VtZSAobGVuID09IGRpbSk7Cisg
ICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gKGxlbiAtIDEpOyBpID49IDA7IGktLSkKKyAg
ICAgICAgICAgICAgICAgICAgdW5nZXRjIChidWZbaV0sIGZyYW1lLT5pbnB1dC5mLnN0cmVhbSk7
CiAgICAgICAgICAgICAgICAgfQotCWVsc2UKLQkgIGMgPSBFT0Y7CisgICAgICAgICAgICAgIGVs
c2UgaWYgKCFmcmFtZS0+bXVsdGlieXRlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgIC8qIHVuaWJ5dGUgKi8KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgIGMgPSAodW5zaWduZWQgY2hhcikgYnl0ZTsKLSAgfQotCi0jZW5kaWYKLQotICB1
bmJsb2NrX2lucHV0ICgpOwotCi0gIHJldHVybiAoYyA9PSBFT0YgPyAtMSA6IGMpOwotfQotCi1z
dGF0aWMgaW50Ci1yZWFkYnl0ZV9mcm9tX2ZpbGUgKGludCBjLCBMaXNwX09iamVjdCByZWFkY2hh
cmZ1bikKLXsKLSAgZWFzc2VydCAoaW5maWxlKTsKLSAgaWYgKGMgPj0gMCkKICAgICAgICAgICAg
ICAgICB7Ci0gICAgICBlYXNzZXJ0IChpbmZpbGUtPmxvb2thaGVhZCA8IHNpemVvZiBpbmZpbGUt
PmJ1Zik7Ci0gICAgICBpbmZpbGUtPmJ1ZltpbmZpbGUtPmxvb2thaGVhZCsrXSA9IGM7Ci0gICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgIC8qIGVtYWNzLW11bGUgZW5jb2RpbmcKKyAg
ICAgICAgICAgICAgICAgICAgIExlYXN0IGxpa2VseSBjYXNlIGxhc3QgKi8KKyAgICAgICAgICAg
ICAgICAgIGludCBzeiA9IENIQVJTRVRfRElNRU5TSU9OIChmcmFtZS0+bXVsZV9jaGFyc2V0KTsK
KyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvZGUgPSBFTkNPREVfQ0hBUiAoZnJhbWUtPm11
bGVfY2hhcnNldCwgYyk7CisgICAgICAgICAgICAgICAgICBpbnQgbGVuOworICAgICAgICAgICAg
ICAgICAgZm9yIChsZW4gPSAwOyBzeiA+IDAgJiYgKGNvZGUgJiAweEZGKTsgc3otLSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGJ1ZltsZW4rK10gPSAodW5z
aWduZWQgY2hhcikgKGNvZGUgJiAweEZGKTsKKyAgICAgICAgICAgICAgICAgICAgICBjb2RlID4+
PSA4OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlYXNzdW1lIChs
ZW4gPT0gZGltKTsKKyAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAobGVuIC0gMSk7IGkg
Pj0gMDsgaS0tKQorICAgICAgICAgICAgICAgICAgICB1bmdldGMgKGJ1ZltpXSwgZnJhbWUtPmlu
cHV0LmYuc3RyZWFtKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgIGJyZWFrOworICAgICAgVU5SRUNPR05JWkVEX0xSRUFEX0lOUFVUX0NBU0VTKCJj
bG9zaW5nX3VucmVhZGNoYXIiKTsKICAgICB9Ci0KLSAgcmV0dXJuIHJlYWRieXRlX2Zyb21fc3Rk
aW8gKCk7CiB9Ci0KIC8qIFNpZ25hbCBRaW52YWxpZF9yZWFkX3N5bnRheCBlcnJvci4KICAgIFMg
aXMgZXJyb3Igc3RyaW5nIG9mIGxlbmd0aCBOIChpZiA+IDApICAqLwogCi1zdGF0aWMgQVZPSUQK
LWludmFsaWRfc3ludGF4X2xpc3AgKExpc3BfT2JqZWN0IHMsIExpc3BfT2JqZWN0IHJlYWRjaGFy
ZnVuKQorQVZPSUQKK2ludmFsaWRfc3ludGF4X2xpc3AgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpm
cmFtZSwgTGlzcF9PYmplY3QgcykKIHsKLSAgaWYgKEJVRkZFUlAgKHJlYWRjaGFyZnVuKSkKKyAg
aWYgKEhBU19CVUZGRVJfUCAoZnJhbWUtPmludHlwZSkpCiAgICAgewogICAgICAgcHRyZGlmZl90
IGxpbmUsIGNvbHVtbjsKIApAQCAtNjEyLDcgKzE4MTEsNyBAQCBpbnZhbGlkX3N5bnRheF9saXNw
IChMaXNwX09iamVjdCBzLCBMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKICAgICAgICAgc3BlY3Bk
bF9yZWYgY291bnQgPSBTUEVDUERMX0lOREVYICgpOwogCiAgICAgICAgIHJlY29yZF91bndpbmRf
cHJvdGVjdF9leGN1cnNpb24gKCk7Ci0Jc2V0X2J1ZmZlcl9pbnRlcm5hbCAoWEJVRkZFUiAocmVh
ZGNoYXJmdW4pKTsKKyAgICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAobHJlYWRfZ2V0X2J1ZmZl
cihmcmFtZSkpOwogICAgICAgICBsaW5lID0gY291bnRfbGluZXMgKEJFR1ZfQllURSwgUFRfQllU
RSkgKyAxOwogICAgICAgICBjb2x1bW4gPSBjdXJyZW50X2NvbHVtbiAoKTsKICAgICAgICAgdW5i
aW5kX3RvIChjb3VudCwgUW5pbCk7CkBAIC02MjUsNzMgKzE4MjQsMTMgQEAgaW52YWxpZF9zeW50
YXhfbGlzcCAoTGlzcF9PYmplY3QgcywgTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCiAgICAgeHNp
Z25hbDEgKFFpbnZhbGlkX3JlYWRfc3ludGF4LCBzKTsKIH0KIAotc3RhdGljIEFWT0lECi1pbnZh
bGlkX3N5bnRheCAoY29uc3QgY2hhciAqcywgTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCitBVk9J
RAoraW52YWxpZF9zeW50YXggKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwgY29uc3QgY2hh
ciAqcykKIHsKLSAgaW52YWxpZF9zeW50YXhfbGlzcCAoYnVpbGRfc3RyaW5nIChzKSwgcmVhZGNo
YXJmdW4pOworICBpbnZhbGlkX3N5bnRheF9saXNwIChmcmFtZSwgYnVpbGRfc3RyaW5nIChzKSk7
CiB9CiAKIAotLyogUmVhZCBvbmUgbm9uLUFTQ0lJIGNoYXJhY3RlciBmcm9tIElORklMRS4gIFRo
ZSBjaGFyYWN0ZXIgaXMKLSAgIGVuY29kZWQgaW4gYGVtYWNzLW11bGUnIGFuZCB0aGUgZmlyc3Qg
Ynl0ZSBpcyBhbHJlYWR5IHJlYWQgaW4KLSAgIEMuICAqLwotCi1zdGF0aWMgaW50Ci1yZWFkX2Vt
YWNzX211bGVfY2hhciAoaW50IGMsIGludCAoKnJlYWRieXRlKSAoaW50LCBMaXNwX09iamVjdCks
IExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQotewotICAvKiBFbWFjcy1tdWxlIGNvZGluZyB1c2Vz
IGF0IG1vc3QgNC1ieXRlIGZvciBvbmUgY2hhcmFjdGVyLiAgKi8KLSAgdW5zaWduZWQgY2hhciBi
dWZbNF07Ci0gIGludCBsZW4gPSBlbWFjc19tdWxlX2J5dGVzW2NdOwotICBzdHJ1Y3QgY2hhcnNl
dCAqY2hhcnNldDsKLSAgaW50IGk7Ci0gIHVuc2lnbmVkIGNvZGU7Ci0KLSAgaWYgKGxlbiA9PSAx
KQotICAgIC8qIEMgaXMgbm90IGEgdmFsaWQgbGVhZGluZy1jb2RlIG9mIGBlbWFjcy1tdWxlJy4g
ICovCi0gICAgcmV0dXJuIEJZVEU4X1RPX0NIQVIgKGMpOwotCi0gIGkgPSAwOwotICBidWZbaSsr
XSA9IGM7Ci0gIHdoaWxlIChpIDwgbGVuKQotICAgIHsKLSAgICAgIGJ1ZltpKytdID0gYyA9ICgq
cmVhZGJ5dGUpICgtMSwgcmVhZGNoYXJmdW4pOwotICAgICAgaWYgKGMgPCAweEEwKQotCXsKLQkg
IGZvciAoaSAtPSBjIDwgMDsgMCA8IC0taTsgKQotCSAgICAoKnJlYWRieXRlKSAoYnVmW2ldLCBy
ZWFkY2hhcmZ1bik7Ci0JICByZXR1cm4gQllURThfVE9fQ0hBUiAoYnVmWzBdKTsKLQl9Ci0gICAg
fQotCi0gIGlmIChsZW4gPT0gMikKLSAgICB7Ci0gICAgICBjaGFyc2V0ID0gQ0hBUlNFVF9GUk9N
X0lEIChlbWFjc19tdWxlX2NoYXJzZXRbYnVmWzBdXSk7Ci0gICAgICBjb2RlID0gYnVmWzFdICYg
MHg3RjsKLSAgICB9Ci0gIGVsc2UgaWYgKGxlbiA9PSAzKQotICAgIHsKLSAgICAgIGlmIChidWZb
MF0gPT0gRU1BQ1NfTVVMRV9MRUFESU5HX0NPREVfUFJJVkFURV8xMQotCSAgfHwgYnVmWzBdID09
IEVNQUNTX01VTEVfTEVBRElOR19DT0RFX1BSSVZBVEVfMTIpCi0JewotCSAgY2hhcnNldCA9IENI
QVJTRVRfRlJPTV9JRCAoZW1hY3NfbXVsZV9jaGFyc2V0W2J1ZlsxXV0pOwotCSAgY29kZSA9IGJ1
ZlsyXSAmIDB4N0Y7Ci0JfQotICAgICAgZWxzZQotCXsKLQkgIGNoYXJzZXQgPSBDSEFSU0VUX0ZS
T01fSUQgKGVtYWNzX211bGVfY2hhcnNldFtidWZbMF1dKTsKLQkgIGNvZGUgPSAoKGJ1ZlsxXSA8
PCA4KSB8IGJ1ZlsyXSkgJiAweDdGN0Y7Ci0JfQotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAg
IGNoYXJzZXQgPSBDSEFSU0VUX0ZST01fSUQgKGVtYWNzX211bGVfY2hhcnNldFtidWZbMV1dKTsK
LSAgICAgIGNvZGUgPSAoKGJ1ZlsyXSA8PCA4KSB8IGJ1ZlszXSkgJiAweDdGN0Y7Ci0gICAgfQot
ICBjID0gREVDT0RFX0NIQVIgKGNoYXJzZXQsIGNvZGUpOwotICBpZiAoYyA8IDApCi0gICAgaW52
YWxpZF9zeW50YXggKCJpbnZhbGlkIG11bHRpYnl0ZSBmb3JtIiwgcmVhZGNoYXJmdW4pOwotICBy
ZXR1cm4gYzsKLX0KIAogCiAvKiBBbiBpbi1wcm9ncmVzcyBzdWJzdGl0dXRpb24gb2YgT0JKRUNU
IGZvciBQTEFDRUhPTERFUi4gICovCkBAIC03MDgsMTMgKzE4NDcsMzcgQEAgcmVhZF9lbWFjc19t
dWxlX2NoYXIgKGludCBjLCBpbnQgKCpyZWFkYnl0ZSkgKGludCwgTGlzcF9PYmplY3QpLCBMaXNw
X09iamVjdCByZWEKICAgTGlzcF9PYmplY3Qgc2VlbjsKIH07CiAKLXN0YXRpYyBMaXNwX09iamVj
dCByZWFkX2ludGVybmFsX3N0YXJ0IChMaXNwX09iamVjdCwgTGlzcF9PYmplY3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzcF9PYmplY3QsIGJvb2wpOwotc3Rh
dGljIExpc3BfT2JqZWN0IHJlYWQwIChMaXNwX09iamVjdCwgYm9vbCk7Ci0KIHN0YXRpYyBMaXNw
X09iamVjdCBzdWJzdGl0dXRlX29iamVjdF9yZWN1cnNlIChzdHJ1Y3Qgc3Vic3QgKiwgTGlzcF9P
YmplY3QpOwogc3RhdGljIHZvaWQgc3Vic3RpdHV0ZV9pbl9pbnRlcnZhbCAoSU5URVJWQUwsIHZv
aWQgKik7CiAKKy8qIGlmIGFuIGVycm9yIHdhcyB0aHJvd24gZHVyaW5nIGFuIGludGVycnVwdCBh
bmQgbm90IGNhdWdodCwgaXQgc2hvdWxkbid0IGJlIGhhbmRsZWQKKyAgIGJ5IHRoaXMgZnJhbWUs
IGJ1dCBjb250aW51ZSB1bndpbmRpbmcKKyAqLworTGlzcF9PYmplY3QKK2ludGVycnVwdF9lcnJv
cl9oYW5kbGVyIChMaXNwX09iamVjdCBkYXRhKQoreworICAvKiBkYXRhIHNob3VsZCBhbHdheXMg
YmUgYSBjb25zKi8KKyAgZWFzc2VydCAoQ09OU1AgKGRhdGEpKTsKKyAgaWYgKEVRIChYQ0FSIChk
YXRhKSwgUWVycm9yX2R1cmluZ19pbnRlcnJ1cHQpKQorICAgIEZzaWduYWwgKFhDQVIgKGRhdGEp
LFhDRFIgKGRhdGEpKTsKKyAgZWxzZQorICAgIEZzaWduYWwgKFFlcnJvcl9kdXJpbmdfaW50ZXJy
dXB0LCBkYXRhKTsKKyAgZWFzc3VtZSAoZmFsc2UpOworfQorCitMaXNwX09iamVjdAorYmFzZV9p
bnRlcnJ1cHRfZXJyb3JfaGFuZGxlciAoTGlzcF9PYmplY3QgZGF0YSkKK3sKKyAgLyogZGF0YSBz
aG91bGQgYWx3YXlzIGJlIGEgY29ucyovCisgIGVhc3NlcnQgKENPTlNQIChkYXRhKSk7CisgIGlm
IChFUSAoWENBUiAoZGF0YSksIFFlcnJvcl9kdXJpbmdfaW50ZXJydXB0KSkKKyAgICBkYXRhID0g
WENEUiAoZGF0YSk7CisgIC8qIHdlIGhhdmUgc2tpcHBlZCBhbGwgbHJlYWQgZnJhbWVzIG5vdyAq
LworICBlYXNzZXJ0IChDT05TUCAoZGF0YSkpOworICBGc2lnbmFsIChYQ0FSIChkYXRhKSwgWENE
UiAoZGF0YSkpOworICBlYXNzdW1lIChmYWxzZSk7Cit9CisKIAwKIC8qIEdldCBhIGNoYXJhY3Rl
ciBmcm9tIHRoZSB0dHkuICAqLwogCkBAIC05ODgsNDIgKzIxNTEsNjIgQEAgREVGVU4gKCJyZWFk
LWNoYXItZXhjbHVzaXZlIiwgRnJlYWRfY2hhcl9leGNsdXNpdmUsIFNyZWFkX2NoYXJfZXhjbHVz
aXZlLCAwLCAzLAogICBDb29raWVfTGV4ICAgICAgICAgICAgICAgICAgICAvKiBleHBsaWNpdCBs
ZXhpY2FsIGJpbmRpbmcgKi8KIH0gbGV4aWNhbF9jb29raWVfdDsKIAotLyogRGV0ZXJtaW5lIGlm
IHRoZSBsaXNwIGNvZGUgcmVhZCB1c2luZyBSRUFEQ0hBUkZVTiBkZWZpbmVzIGEKLSAgIGBsZXhp
Y2FsLWJpbmRpbmcnIGZpbGUgdmFyaWFibGUgcmV0dXJuIGl0cyB2YWx1ZS4KLSAgIEFmdGVyIHJl
dHVybmluZywgdGhlIHN0cmVhbSBpcyBwb3NpdGlvbmVkIGZvbGxvd2luZyB0aGUgZmlyc3QgbGlu
ZSwKLSAgIGlmIGl0IGlzIGEgY29tbWVudCBvciAjISBsaW5lLCBvdGhlcndpc2Ugbm90aGluZyBp
cyByZWFkLiAgKi8KKy8qIERldGVybWluZSBpZiB0aGUgbGlzcCBjb2RlIHJlYWQgZnJvbSB0aGUg
aW5wdXQgb2YgRlJBTUUgZGVmaW5lcyBhCisgICBgbGV4aWNhbC1iaW5kaW5nJyBmaWxlIHZhcmlh
YmxlIHJldHVybiBpdHMgdmFsdWUuICAqLwogCiBzdGF0aWMgbGV4aWNhbF9jb29raWVfdAotbGlz
cF9maWxlX2xleGljYWxfY29va2llIChMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKK2xpc3BfZmls
ZV9sZXhpY2FsX2Nvb2tpZSAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKQogewotICBpbnQg
Y2ggPSBSRUFEQ0hBUjsKLQorICBzcGVjcGRsX3JlZiBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7
CisgIC8qIGhvbGQgYW4gODAtY29sdW1uIGxpbmVzIGJlY2F1c2Ugb2YgYXV0b21hdGljIGFkZGlu
ZyBvZiBjb29raWUKKyAgICAgYXQgZW5kIG9mIGZpcnN0IGxpbmUsIHdoaWNoIG1heSBhbHJlYWR5
IGJlIDgwIGNoYXJhY3RlcnMgb3IgbW9yZSAqLworICBpbnQgc3RhY2tfYnVmZmVyWzgwXSA9IHsg
MCB9OworICBpbnQgKmhlYXBidWYgPSBOVUxMOworICBib29sIG5lZWRzX2J1ZmZlciA9IGxyZWFk
X2ZyYW1lX3JlcXVpcmVzX3Jld2luZF9idWZmZXIgKGZyYW1lKTsKKyAgaW50ICpidWYgPSBuZWVk
c19idWZmZXIgPyBzdGFja19idWZmZXIgOiBOVUxMOworICBwdHJkaWZmX3QgYnVmX3N6ID0gbmVl
ZHNfYnVmZmVyID8gc2l6ZW9mIHN0YWNrX2J1ZmZlciA6IDA7CisgIGludCBsb29rYWhlYWQgPSAw
OworICBpbnQgKnAgPSBidWY7CisgIGludCAqZW5kID0gYnVmICsgYnVmX3N6OworICAvKiBBbGxv
dyB0aGUgY29va2llIGFueXdoZXJlIGluIGEgbGVhZGluZyBjb21tZW50IGJsb2NrLAorICAgICBu
b3QganVzdCB0aGUgZmlyc3QgbGluZS4gICovCisgIGxleGljYWxfY29va2llX3QgcnYgPSBDb29r
aWVfTm9uZTsKKyAgaW50IGNoID0gLTE7CisjZGVmaW5lIENPT0tJRV9SRUFEX0FORF9CVUZGRVIo
YykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGMgPSBSRUFEQ0hB
UiAoZnJhbWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgIGlmIChjIDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgZ290byBub3RfZm91bmQ7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChuZWVkc19idWZm
ZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAqcCsrID0gYzsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBpZiAoZW5kIC0gcCA8
IDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgbG9va2FoZWFkID0gcCAtIGJ1ZjsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgYnVmID0gZ3Jvd19p
bnRfYnVmZmVyIChidWYsIGxvb2thaGVhZCwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGVhcGJ1ZiwgJmJ1Zl9zeiwgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgcCA9IGJ1ZiArIGxvb2th
aGVhZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgZW5kID0gYnVmICsgYnVmX3N6OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorICBDT09LSUVfUkVBRF9BTkRfQlVG
RkVSIChjaCk7CiAgIGlmIChjaCA9PSAnIycpCiAgICAgewotICAgICAgY2ggPSBSRUFEQ0hBUjsK
KyAgICAgIENPT0tJRV9SRUFEX0FORF9CVUZGRVIgKGNoKTsKICAgICAgIGlmIChjaCAhPSAnIScp
CisgICAgICAgIGdvdG8gbm90X2ZvdW5kOworICAgICAgd2hpbGUgKGNoICE9ICdcbicgJiYgY2gg
IT0gRU9GKQogICAgICAgICB7Ci0gICAgICAgICAgVU5SRUFEIChjaCk7Ci0gICAgICAgICAgVU5S
RUFEICgnIycpOwotICAgICAgICAgIHJldHVybiBDb29raWVfTm9uZTsKKyAgICAgICAgICBDT09L
SUVfUkVBRF9BTkRfQlVGRkVSIChjaCk7CiAgICAgICAgIH0KLSAgICAgIHdoaWxlIChjaCAhPSAn
XG4nICYmIGNoICE9IEVPRikKLSAgICAgICAgY2ggPSBSRUFEQ0hBUjsKLSAgICAgIGlmIChjaCA9
PSAnXG4nKSBjaCA9IFJFQURDSEFSOworICAgICAgaWYgKGNoID09ICdcbicpCisgICAgICAgIGdv
dG8gbm90X2ZvdW5kOwogICAgICAgLyogSXQgaXMgT0sgdG8gbGVhdmUgdGhlIHBvc2l0aW9uIGFm
dGVyIGEgIyEgbGluZSwgc2luY2UKICAgICAgICAgIHRoYXQgaXMgd2hhdCByZWFkMCBkb2VzLiAg
Ki8KICAgICB9Ci0KLSAgaWYgKGNoICE9ICc7JykKLSAgICAvKiBUaGUgZmlyc3QgbGluZSBpc24n
dCBhIGNvbW1lbnQsIGp1c3QgZ2l2ZSB1cC4gICovCi0gICAgewotICAgICAgVU5SRUFEIChjaCk7
Ci0gICAgICByZXR1cm4gQ29va2llX05vbmU7Ci0gICAgfQotICBlbHNlCisgIHdoaWxlIChjaCA9
PSAnOycpCiAgICAgLyogTG9vayBmb3IgYW4gYXBwcm9wcmlhdGUgZmlsZS12YXJpYWJsZSBpbiB0
aGUgZmlyc3QgbGluZS4gICovCiAgICAgewotICAgICAgbGV4aWNhbF9jb29raWVfdCBydiA9IENv
b2tpZV9Ob25lOwogICAgICAgZW51bSB7CiAgICAgICAgIE5PTUlOQUwsIEFGVEVSX0ZJUlNUX0RB
U0gsIEFGVEVSX0FTVEVSSVgKICAgICAgIH0gYmVnX2VuZF9zdGF0ZSA9IE5PTUlOQUw7CkBAIC0x
MDQ0LDcgKzIyMjcsNyBAQCAjZGVmaW5lIFVQREFURV9CRUdfRU5EX1NUQVRFKGNoKQkJCQlcCiAg
ICAgICAvKiBTa2lwIHVudGlsIHdlIGdldCB0byB0aGUgZmlsZSB2YXJzLCBpZiBhbnkuICAqLwog
ICAgICAgZG8KICAgICAgICAgewotCSAgY2ggPSBSRUFEQ0hBUjsKKyAgICAgICAgICBDT09LSUVf
UkVBRF9BTkRfQlVGRkVSIChjaCk7CiAgICAgICAgICAgVVBEQVRFX0JFR19FTkRfU1RBVEUgKGNo
KTsKICAgICAgICAgfQogICAgICAgd2hpbGUgKCFpbl9maWxlX3ZhcnMgJiYgY2ggIT0gJ1xuJyAm
JiBjaCAhPSBFT0YpOwpAQCAtMTA1NCwxMSArMjIzNywxMyBAQCAjZGVmaW5lIFVQREFURV9CRUdf
RU5EX1NUQVRFKGNoKQkJCQlcCiAgICAgICAgICAgY2hhciB2YXJbMTAwXSwgdmFsWzEwMF07CiAg
ICAgICAgICAgdW5zaWduZWQgaTsKIAotCSAgY2ggPSBSRUFEQ0hBUjsKKyAgICAgICAgICBDT09L
SUVfUkVBRF9BTkRfQlVGRkVSIChjaCk7CiAKICAgICAgICAgICAvKiBSZWFkIGEgdmFyaWFibGUg
bmFtZS4gICovCiAgICAgICAgICAgd2hpbGUgKGNoID09ICcgJyB8fCBjaCA9PSAnXHQnKQotCSAg
ICBjaCA9IFJFQURDSEFSOworICAgICAgICAgICAgeworICAgICAgICAgICAgICBDT09LSUVfUkVB
RF9BTkRfQlVGRkVSIChjaCk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICBpID0gMDsKICAg
ICAgICAgICBiZWdfZW5kX3N0YXRlID0gTk9NSU5BTDsKQEAgLTEwNjcsMTIgKzIyNTIsMTIgQEAg
I2RlZmluZSBVUERBVEVfQkVHX0VORF9TVEFURShjaCkJCQkJXAogICAgICAgICAgICAgICBpZiAo
aSA8IHNpemVvZiB2YXIgLSAxKQogICAgICAgICAgICAgICAgIHZhcltpKytdID0gY2g7CiAgICAg
ICAgICAgICAgIFVQREFURV9CRUdfRU5EX1NUQVRFIChjaCk7Ci0JICAgICAgY2ggPSBSRUFEQ0hB
UjsKKyAgICAgICAgICAgICAgQ09PS0lFX1JFQURfQU5EX0JVRkZFUiAoY2gpOwogICAgICAgICAg
ICAgfQogCi0JICAvKiBTdG9wIHNjYW5uaW5nIGlmIG5vIGNvbG9uIHdhcyBmb3VuZCBiZWZvcmUg
ZW5kIG1hcmtlci4gICovCisgICAgICAgICAgLyogQ2hlY2sgbmV4dCBsaW5lIGlmIG5vIGNvbG9u
IHdhcyBmb3VuZCBiZWZvcmUgZW5kIG1hcmtlci4gICovCiAgICAgICAgICAgaWYgKCFpbl9maWxl
X3ZhcnMgfHwgY2ggPT0gJ1xuJyB8fCBjaCA9PSBFT0YpCi0JICAgIGJyZWFrOworICAgICAgICAg
ICAgZ290byBmaW5pc2hfbGluZTsKIAogICAgICAgICAgIHdoaWxlIChpID4gMCAmJiAodmFyW2kg
LSAxXSA9PSAnICcgfHwgdmFyW2kgLSAxXSA9PSAnXHQnKSkKICAgICAgICAgICAgIGktLTsKQEAg
LTEwODEsMTAgKzIyNjYsMTIgQEAgI2RlZmluZSBVUERBVEVfQkVHX0VORF9TVEFURShjaCkJCQkJ
XAogICAgICAgICAgIGlmIChjaCA9PSAnOicpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
IC8qIFJlYWQgYSB2YXJpYWJsZSB2YWx1ZS4gICovCi0JICAgICAgY2ggPSBSRUFEQ0hBUjsKKyAg
ICAgICAgICAgICAgQ09PS0lFX1JFQURfQU5EX0JVRkZFUiAoY2gpOwogCiAgICAgICAgICAgICAg
IHdoaWxlIChjaCA9PSAnICcgfHwgY2ggPT0gJ1x0JykKLQkJY2ggPSBSRUFEQ0hBUjsKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBDT09LSUVfUkVBRF9BTkRfQlVGRkVSIChj
aCk7CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgIGkgPSAwOwogICAgICAgICAg
ICAgICBiZWdfZW5kX3N0YXRlID0gTk9NSU5BTDsKQEAgLTEwOTMsNyArMjI4MCw3IEBAICNkZWZp
bmUgVVBEQVRFX0JFR19FTkRfU1RBVEUoY2gpCQkJCVwKICAgICAgICAgICAgICAgICAgIGlmIChp
IDwgc2l6ZW9mIHZhbCAtIDEpCiAgICAgICAgICAgICAgICAgICAgIHZhbFtpKytdID0gY2g7CiAg
ICAgICAgICAgICAgICAgICBVUERBVEVfQkVHX0VORF9TVEFURSAoY2gpOwotCQkgIGNoID0gUkVB
RENIQVI7CisgICAgICAgICAgICAgICAgICBDT09LSUVfUkVBRF9BTkRfQlVGRkVSIChjaCk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoISBpbl9maWxlX3ZhcnMpCiAgICAg
ICAgICAgICAgICAgLyogVGhlIHZhbHVlIHdhcyB0ZXJtaW5hdGVkIGJ5IGFuIGVuZC1tYXJrZXIs
IHdoaWNoIHJlbW92ZS4gICovCkBAIC0xMTA2LDE2ICsyMjkzLDI1IEBAICNkZWZpbmUgVVBEQVRF
X0JFR19FTkRfU1RBVEUoY2gpCQkJCVwKICAgICAgICAgICAgICAgICAvKiBUaGlzIGlzIGl0Li4u
ICAqLwogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgIHJ2ID0gc3RyY21wICh2
YWwsICJuaWwiKSAhPSAwID8gQ29va2llX0xleCA6IENvb2tpZV9EeW47Ci0JCSAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaF9saW5lOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgfQotCisgICAgZmluaXNoX2xpbmU6CiAgICAgICB3aGlsZSAo
Y2ggIT0gJ1xuJyAmJiBjaCAhPSBFT0YpCi0JY2ggPSBSRUFEQ0hBUjsKLQotICAgICAgcmV0dXJu
IHJ2OworICAgICAgICB7CisgICAgICAgICAgQ09PS0lFX1JFQURfQU5EX0JVRkZFUiAoY2gpOwor
ICAgICAgICB9CisgICAgICBpZiAocnYgIT0gQ29va2llX05vbmUpCisgICAgICAgIGdvdG8gZG9u
ZTsKKyAgICAgIENPT0tJRV9SRUFEX0FORF9CVUZGRVIgKGNoKTsKICAgICB9Cisgbm90X2ZvdW5k
OgorICBscmVhZF9yZXdpbmRfaW5wdXQoZnJhbWUsIGxvb2thaGVhZCwgYnVmKTsKKyBkb25lOgor
ICB1bmJpbmRfdG8gKGNvdW50LCBRbmlsKTsKKyAgcmV0dXJuIHJ2OworCiB9CiAMCiAvKiBWYWx1
ZSBpcyBhIHZlcnNpb24gbnVtYmVyIG9mIGJ5dGUgY29tcGlsZWQgY29kZSBpZiB0aGUgZmlsZQpA
QCAtMTE2NSw3ICsyMzYxLDcgQEAgc2FmZV90b19sb2FkX3ZlcnNpb24gKExpc3BfT2JqZWN0IGZp
bGUsIGxyZWFkX2ZkIGZkKQogc3RhdGljIHZvaWQKIHJlY29yZF9sb2FkX3Vud2luZCAoTGlzcF9P
YmplY3Qgb2xkKQogewotICBWbG9hZHNfaW5fcHJvZ3Jlc3MgPSBvbGQ7CisgIGN1cnJlbnRfZnJh
bWUtPmxvYWRzX2luX3Byb2dyZXNzID0gb2xkOwogfQogCiAvKiBUaGlzIGhhbmRsZXIgZnVuY3Rp
b24gaXMgdXNlZCB2aWEgaW50ZXJuYWxfY29uZGl0aW9uX2Nhc2VfMS4gICovCkBAIC0xMjA1LDIx
ICsyNDAxLDcgQEAgREVGVU4gKCJnZXQtbG9hZC1zdWZmaXhlcyIsIEZnZXRfbG9hZF9zdWZmaXhl
cywgU2dldF9sb2FkX3N1ZmZpeGVzLCAwLCAwLCAwLAogICAgICAgTGlzcF9PYmplY3QgZXh0cyA9
IFZsb2FkX2ZpbGVfcmVwX3N1ZmZpeGVzOwogICAgICAgTGlzcF9PYmplY3Qgc3VmZml4ID0gWENB
UiAoc3VmZml4ZXMpOwogICAgICAgRk9SX0VBQ0hfVEFJTCAoZXh0cykKLQl7Ci0JICBMaXNwX09i
amVjdCBleHQgPSBYQ0FSIChleHRzKTsKLSNpZmRlZiBIQVZFX01PRFVMRVMKLQkgIGlmIChTQ0hB
UlMgKGV4dCkgPiAwCi0JICAgICAgJiYgKHN1ZmZpeF9wIChzdWZmaXgsIE1PRFVMRVNfU1VGRklY
KQotIyBpZmRlZiBNT0RVTEVTX1NFQ09OREFSWV9TVUZGSVgKLQkJICB8fCBzdWZmaXhfcCAoc3Vm
Zml4LCBNT0RVTEVTX1NFQ09OREFSWV9TVUZGSVgpCi0jIGVuZGlmCi0JCSApCi0JICAgICAgJiYg
IU5JTFAgKEZtZW1iZXIgKGV4dCwgRnN5bWJvbF92YWx1ZSAoCi0JCQkJCVFqa2FfY29tcHJfbG9h
ZF9zdWZmaXhlcykpKSkKLQkgICAgY29udGludWU7Ci0jZW5kaWYKLQkgIGxzdCA9IEZjb25zIChj
b25jYXQyIChzdWZmaXgsIGV4dCksIGxzdCk7Ci0JfQorICAgICAgICBsc3QgPSBGY29ucyAoY29u
Y2F0MiAoc3VmZml4LCBYQ0FSIChleHRzKSksIGxzdCk7CiAgICAgfQogICByZXR1cm4gRm5yZXZl
cnNlIChsc3QpOwogfQpAQCAtMTIzOCwxMCArMjQyMCwxNCBAQCBzdWZmaXhfcCAoTGlzcF9PYmpl
Y3Qgc3RyaW5nLCBjb25zdCBjaGFyICpzdWZmaXgpCiBzdGF0aWMgdm9pZAogY2xvc2VfaW5maWxl
X3Vud2luZCAodm9pZCAqYXJnKQogewotICBzdHJ1Y3QgaW5maWxlICpwcmV2X2luZmlsZSA9IGFy
ZzsKKyAgLyogc3RydWN0IGluZmlsZSAqcHJldl9pbmZpbGUgPSBhcmc7CiAgIGVhc3NlcnQgKGlu
ZmlsZSAmJiBpbmZpbGUgIT0gcHJldl9pbmZpbGUpOwogICBmaWxlX3N0cmVhbV9jbG9zZSAoaW5m
aWxlLT5zdHJlYW0pOwogICBpbmZpbGUgPSBwcmV2X2luZmlsZTsKKyAgKi8KKyAgbHJlYWRfZnJh
bWUgKmZyYW1lID0gKGxyZWFkX2ZyYW1lICopIGFyZzsKKyAgZWFzc2VydCAoRlJPTV9GSUxFX1Ao
ZnJhbWUtPmludHlwZSkgJiYgZnJhbWUtPmlucHV0LmYuc3RyZWFtKTsKKyAgZmlsZV9zdHJlYW1f
Y2xvc2UgKGZyYW1lLT5pbnB1dC5mLnN0cmVhbSk7CiB9CiAKIC8qIENvbXB1dGUgdGhlIGZpbGVu
YW1lIHdlIHdhbnQgaW4gYGxvYWQtaGlzdG9yeScgYW5kIGBsb2FkLWZpbGUtbmFtZScuICAqLwpA
QCAtMTI4Niw5ICsyNDcyLDkgQEAgY2xvc2VfZmlsZV91bndpbmRfYW5kcm9pZF9mZCAodm9pZCAq
cHRyKQogI2VuZGlmCiAKIHN0YXRpYyBMaXNwX09iamVjdAotZ2V0X2xleGljYWxfYmluZGluZyAo
TGlzcF9PYmplY3Qgc3RyZWFtLCBMaXNwX09iamVjdCBmcm9tKQorZ2V0X2xleGljYWxfYmluZGlu
ZyAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLCBMaXNwX09iamVjdCBmcm9tKQogewotICBs
ZXhpY2FsX2Nvb2tpZV90IGxleGMgPSBsaXNwX2ZpbGVfbGV4aWNhbF9jb29raWUgKHN0cmVhbSk7
CisgIGxleGljYWxfY29va2llX3QgbGV4YyA9IGxpc3BfZmlsZV9sZXhpY2FsX2Nvb2tpZSAoZnJh
bWUpOwogICByZXR1cm4gKChsZXhjID09IENvb2tpZV9MZXgKICAgICAgICAgICAgPyBRdAogICAg
ICAgICAgICA6IChsZXhjID09IENvb2tpZV9EeW4KQEAgLTEzMDAsNiArMjQ4Niw4MiBAQCBnZXRf
bGV4aWNhbF9iaW5kaW5nIChMaXNwX09iamVjdCBzdHJlYW0sIExpc3BfT2JqZWN0IGZyb20pCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20pKSkpKTsKIH0KIAorc3RhdGljIHZvaWQKK2xv
YWRfc291cmNlX2ZpbGVfa2lsbF9idWZmZXIgKExpc3BfT2JqZWN0IGJ1ZmZlcikKK3sKKyAgc3Bl
Y3BkbF9yZWYgY291bnQgPSBTUEVDUERMX0lOREVYICgpOworICBzcGVjYmluZCAoUWtpbGxfYnVm
ZmVyX2hvb2ssIFFuaWwpOworICBzcGVjYmluZCAoUWtpbGxfYnVmZmVyX3F1ZXJ5X2Z1bmN0aW9u
cywgUW5pbCk7CisgIHVuYmluZF90byAoY291bnQsIEZraWxsX2J1ZmZlciAoYnVmZmVyKSk7Cit9
CisKKy8qIFByaW1pdGl2ZSB2ZXJzaW9uIG9mIGxvYWQtd2l0aC1jb2RlLWNvbnZlcnNpb24gKi8K
K3N0YXRpYyBMaXNwX09iamVjdAorbG9hZF9zb3VyY2VfZmlsZSAoTGlzcF9PYmplY3QgZnVsbG5h
bWUsIExpc3BfT2JqZWN0IGZpbGUsCisgICAgICAgICAgICAgICAgICBMaXNwX09iamVjdCBub2Vy
cm9yLCBMaXNwX09iamVjdCBub21lc3NhZ2UpCit7CisgIGlmIChOSUxQIChGZmlsZV9yZWFkYWJs
ZV9wIChmdWxsbmFtZSkpKQorICAgIHsKKyAgICAgIGlmIChOSUxQIChub2Vycm9yKSkKKyAgICAg
ICAgeworICAgICAgICAgIHhzaWduYWwyIChRZmlsZV9lcnJvciwKKyAgICAgICAgICAgICAgICAg
ICAgYnVpbGRfc3RyaW5nICgiQ2Fubm90IG9wZW4gbG9hZCBmaWxlIiksCisgICAgICAgICAgICAg
ICAgICAgIGZpbGUpOworICAgICAgICB9CisgICAgICByZXR1cm4gKFFuaWwpOworICAgIH0KKyAg
TGlzcF9PYmplY3Qgc291cmNlbmFtZSA9IHdpbGxfZHVtcF9wICgpID8gZmlsZSA6IGZ1bGxuYW1l
OworICBMaXNwX09iamVjdCBidWZmZXJfbmFtZQorICAgID0gRmdlbmVyYXRlX25ld19idWZmZXJf
bmFtZSAoYnVpbGRfc3RyaW5nICgiICpsb2FkKiIpLCBRbmlsKTsKKyAgTGlzcF9PYmplY3QgYnVm
ZmVyID0gRmdldF9idWZmZXJfY3JlYXRlIChidWZmZXJfbmFtZSwgUW5pbCk7CisgIHNwZWNwZGxf
cmVmIGNvdW50ID0gU1BFQ1BETF9JTkRFWCAoKTsKKyAgLyogdGhpcyBpcyBvbmx5IGNhbGxlZCBm
b3Igc291cmNlIGZpbGVzICovCisgIC8qIGxvYWQtd2l0aC1jb2RlLWNvbnZlcnNpb24gYmluZHMg
bG9hZC1pbi1wcm9ncmVzcyBpbiBhbiBvdXRlcgorICAgICBzY29wZSwgd2hlcmUgRmxvYWQgYmlu
ZHMgaXQgd2l0aCBsb2FkLWZpbGUtbmFtZSwgZXRjLCBiZWxvdyAqLworICBzcGVjYmluZCAoUWxv
YWRfaW5fcHJvZ3Jlc3MsIFF0KTsKKyAgaWYgKE5JTFAgKG5vbWVzc2FnZSkpCisgICAgbWVzc2Fn
ZV93aXRoX3N0cmluZyAoIkxvYWRpbmcgJXMgKHNvdXJjZSkuLi4iLCBmaWxlLCAxKTsKKyAgaWYg
KCFOSUxQIChWcHVyaWZ5X2ZsYWcpKQorICAgIHsKKyAgICAgIFZwcmVsb2FkZWRfZmlsZV9saXN0
ID0gRmNvbnMgKGZpbGUsIFZwcmVsb2FkZWRfZmlsZV9saXN0KTsKKyAgICB9CisgIHsKKyAgICBz
cGVjcGRsX3JlZiBjb3VudDEgPSBTUEVDUERMX0lOREVYICgpOworCisgICAgcmVjb3JkX3Vud2lu
ZF9wcm90ZWN0IChsb2FkX3NvdXJjZV9maWxlX2tpbGxfYnVmZmVyLCBidWZmZXIpOworICAgIC8q
IGxvYWQtd2l0aC1jb2RlLWNvbnZlcnNpb24gc2V0cyBsb2FkLWZpbGUtbmFtZSB0byBmdWxsbmFt
ZSwgYnV0CisgICAgICAgbG9hZCBzZXRzIGl0IHRvIGZpbGUgPyAqLworICAgIHNwZWNiaW5kIChR
bG9hZF9maWxlX25hbWUsIGZpbGUpOworICAgIHNwZWNiaW5kIChRbG9hZF90cnVlX2ZpbGVfbmFt
ZSwgZnVsbG5hbWUpOworICAgIHNwZWNiaW5kIChRaW5oaWJpdF9maWxlX25hbWVfb3BlcmF0aW9u
LCBRbmlsKTsKKyAgICAvKiBJZiBhdXRvLWNvZGluZyB3YXMgaW1wbGVtZW50ZWQsIGxvYWQgd291
bGQgaGF2ZSBjYWxsZWQKKyAgICAgICBsb2FkLXdpdGgtY29kZS1jb252ZXJzaW9uIGluc3RlYWQg
b2YgdGhpcywgc28gZG9uJ3QgYm90aGVyICovCisgICAgcmVjb3JkX3Vud2luZF9jdXJyZW50X2J1
ZmZlciAoKTsKKyAgICBGc2V0X2J1ZmZlciAoYnVmZmVyKTsKKyAgICBGc2V0X2J1ZmZlcl9tdWx0
aWJ5dGUgKFF0KTsKKyAgICB7CisgICAgICBzcGVjcGRsX3JlZiBjb3VudDIgPSBTUEVDUERMX0lO
REVYICgpOworICAgICAgc3BlY2JpbmQgKFFkZWFjdGl2YXRlX21hcmssIFFuaWwpOworICAgICAg
dW5iaW5kX3RvIChjb3VudDIsCisgICAgICAgICAgICAgICAgIEZpbnNlcnRfZmlsZV9jb250ZW50
cyAoZnVsbG5hbWUsIFFuaWwsIFFuaWwsIFFuaWwsIFFuaWwpKTsKKyAgICB9CisgICAgLyogZG9u
J3Qgd29ycnkgYWJvdXQgc2hvcnRoYW5kcyBpbiB0ZW1hY3Mgc2FucyBsb2FkdXAqLworICAgIC8q
IENBVkVBVCBFTVBUT1I6IHJlcXVpcmUgZW1hY3MgbGlzcCBzb3VyY2UgZmlsZXMgcmVhZCBieSB0
ZW1hY3Mgc2FucworICAgICAgIGxvYWR1cCBhcmUgaW4gZW5jb2RpbmcgY29tcGF0aWJsZSB3aXRo
IGVtYWNzLWludGVybmFsICovCisgICAgLyogaW5zdGVhZCBvZiBGc2V0X2J1ZmZlcl9tb2RpZmll
ZF9wLCBhdm9pZCBib3RoZXJpbmcgd2l0aAorICAgICAgIHRoZSBtb2RlLWxpbmUgKi8KKyAgICBG
cmVzdG9yZV9idWZmZXJfbW9kaWZpZWRfcCAoUW5pbCk7CisgICAgdW5iaW5kX3RvIChjb3VudDEs
CisgICAgICAgICAgICAgICBGZXZhbF9idWZmZXIgKGJ1ZmZlciwgUW5pbCwgc291cmNlbmFtZSwg
UW5pbCwgUXQpKTsKKyAgfQorICBpZiAoIU5JTFAgKEZmYm91bmRwIChRZG9fYWZ0ZXJfbG9hZF9l
dmFsdWF0aW9uKSkpCisgICAgY2FsbG4gKFFkb19hZnRlcl9sb2FkX2V2YWx1YXRpb24sIGZpbGUp
OworICBpZiAoTklMUCAobm9tZXNzYWdlKSkKKyAgICBtZXNzYWdlX3dpdGhfc3RyaW5nICgiTG9h
ZGluZyAlcyAoc291cmNlKS4uLmRvbmUiLCBmaWxlLCAxKTsKKyAgcmV0dXJuIHVuYmluZF90byAo
Y291bnQsIFF0KTsKK30KKworCiBERUZVTiAoImxvYWQiLCBGbG9hZCwgU2xvYWQsIDEsIDUsIDAs
CiAgICAgICAgZG9jOiAvKiBFeGVjdXRlIGEgZmlsZSBvZiBMaXNwIGNvZGUgbmFtZWQgRklMRS4K
IEZpcnN0IHRyeSBGSUxFIHdpdGggYC5lbGMnIGFwcGVuZGVkLCB0aGVuIHRyeSB3aXRoIGAuZWwn
LCB0aGVuIHRyeQpAQCAtMTQzOCwxNiArMjY5OSwxMiBAQCBERUZVTiAoImxvYWQiLCBGbG9hZCwg
U2xvYWQsIDEsIDUsIDAsCiAgICAgICAgICAgICBzdWZmaXhlcyA9IENBTExOIChGYXBwZW5kLCBz
dWZmaXhlcywgVmxvYWRfZmlsZV9yZXBfc3VmZml4ZXMpOwogICAgICAgICB9CiAKLSAgICAgIExp
c3BfT2JqZWN0IGxvYWRfcGF0aCA9IFZsb2FkX3BhdGg7Ci0gICAgICBpZiAoRlVOQ1RJT05QIChW
bG9hZF9wYXRoX2ZpbHRlcl9mdW5jdGlvbikpCi0JbG9hZF9wYXRoID0gY2FsbG4gKFZsb2FkX3Bh
dGhfZmlsdGVyX2Z1bmN0aW9uLCBsb2FkX3BhdGgsIGZpbGUsIHN1ZmZpeGVzKTsKLQogI2lmICFk
ZWZpbmVkIFVTRV9BTkRST0lEX0FTU0VUUwotICAgICAgZmQgPSBvcGVucCAobG9hZF9wYXRoLCBm
aWxlLCBzdWZmaXhlcywgJmZvdW5kLCBRbmlsLAorICAgICAgZmQgPSBvcGVucCAoVmxvYWRfcGF0
aCwgZmlsZSwgc3VmZml4ZXMsICZmb3VuZCwgUW5pbCwKICAgICAgICAgICAgICAgICAgIGxvYWRf
cHJlZmVyX25ld2VyLCBub19uYXRpdmUsIE5VTEwpOwogI2Vsc2UKICAgICAgIGFzc2V0ID0gTlVM
TDsKLSAgICAgIHJjID0gb3BlbnAgKGxvYWRfcGF0aCwgZmlsZSwgc3VmZml4ZXMsICZmb3VuZCwg
UW5pbCwKKyAgICAgIHJjID0gb3BlbnAgKFZsb2FkX3BhdGgsIGZpbGUsIHN1ZmZpeGVzLCAmZm91
bmQsIFFuaWwsCiAgICAgICAgICAgICAgICAgICBsb2FkX3ByZWZlcl9uZXdlciwgbm9fbmF0aXZl
LCAmYXNzZXQpOwogICAgICAgZmQuZmQgPSByYzsKICAgICAgIGZkLmFzc2V0ID0gYXNzZXQ7CkBA
IC0xNDk3LDYgKzI3NTQsMTcgQEAgREVGVU4gKCJsb2FkIiwgRmxvYWQsIFNsb2FkLCAxLCA1LCAw
LAogICAgICAgICBmZCA9IC0yOwogI2VuZGlmCiAgICAgfQorICAvKiBUaGlzIGR1bW15IGZyYW1l
IG5lZWRzIHRvIGJlIGFjdGl2YXRlZCBiZWZvcmUgYW55IHJlZmVyZW5jZQorICAgICB0byBhIG51
bGwgY3VycmVudF9mcmFtZSBtYXkgb2NjdXIsIGFuZCBiZWZvcmUgYW55CisgICAgIG5ldyBlbnRy
aWVzIGFyZSBwdXNoZWQgb24gdGhlIFNQRUNQREwsIGJ1dCBhZnRlcgorICAgICB3ZSBrbm93IHRo
ZSBmaWxlIGV4aXN0cyBhbmQgdGhhdCB3ZSBhcmUgaGFuZGxpbmcgaXQgKi8KKyAgbHJlYWRfZnJh
bWUgbG9hZF9mcmFtZSA9IElOSVRfTFJFQURfRlJBTUUgKCk7CisgIGxvYWRfZnJhbWUubG9vcF9k
eW5hbWljX2ZyYW1lID0gU1BFQ1BETF9JTkRFWCAoKTsKKyAgaW5pdF9scmVhZF9pbnB1dF9mcm9t
X3N0cmVhbSAoJmxvYWRfZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFu
aWwsIFFuaWwsIFFuaWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBm
YWxzZSwgTlVMTCwgUW5pbCk7CisgIGFjdGl2YXRlX2xyZWFkX2ZyYW1lICgmbG9hZF9mcmFtZSwg
TFJFQURfRlJBTUVfTVVMVElQTEUpOworICBscmVhZF9pbml0X2R5bmFtaWNfZnJhbWUgKCZsb2Fk
X2ZyYW1lKTsKIAogI2lmICFkZWZpbmVkIFVTRV9BTkRST0lEX0FTU0VUUwogICBpZiAoMCA8PSBm
ZCkKQEAgLTE1MzQsMjEgKzI4MDIsMjYgQEAgREVGVU4gKCJsb2FkIiwgRmxvYWQsIFNsb2FkLCAx
LCA1LCAwLAogICAvKiBDaGVjayBpZiB3ZSdyZSBzdHVjayBpbiBhIHJlY3Vyc2l2ZSBsb2FkIGN5
Y2xlLgogCiAgICAgIDIwMDAtMDktMjE6IEl0J3Mgbm90IHBvc3NpYmxlIHRvIGp1c3QgY2hlY2sg
Zm9yIHRoZSBmaWxlIGxvYWRlZAotICAgICBiZWluZyBhIG1lbWJlciBvZiBWbG9hZHNfaW5fcHJv
Z3Jlc3MuICBUaGlzIGZhaWxzIGJlY2F1c2Ugb2YgdGhlCisgICAgIGJlaW5nIGEgbWVtYmVyIG9m
IGZyYW1lLT5sb2Fkc19pbl9wcm9ncmVzcy4gIFRoaXMgZmFpbHMgYmVjYXVzZSBvZiB0aGUKICAg
ICAgd2F5IHRoZSBieXRlIGNvbXBpbGVyIGN1cnJlbnRseSB3b3JrczsgYHByb3ZpZGUncyBhcmUg
bm90CiAgICAgIGV2YWx1YXRlZCwgc2VlIGZvbnQtbG9jay5lbC9qaXQtbG9jay5lbCBhcyBhbiBl
eGFtcGxlLiAgVGhpcwogICAgICBsZWFkcyB0byBhIGNlcnRhaW4gYW1vdW50IG9mIGBgbm9ybWFs
JycgcmVjdXJzaW9uLgogCiAgICAgIEFsc28sIGp1c3QgbG9hZGluZyBhIGZpbGUgcmVjdXJzaXZl
bHkgaXMgbm90IGFsd2F5cyBhbiBlcnJvciBpbgogICAgICB0aGUgZ2VuZXJhbCBjYXNlOyB0aGUg
c2Vjb25kIGxvYWQgbWF5IGRvIHNvbWV0aGluZyBkaWZmZXJlbnQuICAqLworICAvKiBkdW1teSBm
cmFtZSB0aGF0IHJlYWQgZnJvbSAvZGV2L251bGwgKi8KKyAgZWFzc3VtZSAoY3VycmVudF9mcmFt
ZSAhPSBOVUxMKTsKICAgewogICAgIGludCBsb2FkX2NvdW50ID0gMDsKLSAgICBMaXNwX09iamVj
dCB0ZW0gPSBWbG9hZHNfaW5fcHJvZ3Jlc3M7CisgICAgTGlzcF9PYmplY3QgdGVtID0gY3VycmVu
dF9mcmFtZS0+bG9hZHNfaW5fcHJvZ3Jlc3M7CiAgICAgRk9SX0VBQ0hfVEFJTF9TQUZFICh0ZW0p
CiAgICAgICBpZiAoIU5JTFAgKEZlcXVhbCAoZm91bmQsIFhDQVIgKHRlbSkpKSAmJiAoKytsb2Fk
X2NvdW50ID4gMykpCi0Jc2lnbmFsX2Vycm9yICgiUmVjdXJzaXZlIGxvYWQiLCBGY29ucyAoZm91
bmQsIFZsb2Fkc19pbl9wcm9ncmVzcykpOwotICAgIHJlY29yZF91bndpbmRfcHJvdGVjdCAocmVj
b3JkX2xvYWRfdW53aW5kLCBWbG9hZHNfaW5fcHJvZ3Jlc3MpOwotICAgIFZsb2Fkc19pbl9wcm9n
cmVzcyA9IEZjb25zIChmb3VuZCwgVmxvYWRzX2luX3Byb2dyZXNzKTsKKyAgICAgICAgc2lnbmFs
X2Vycm9yICgiUmVjdXJzaXZlIGxvYWQiLAorICAgICAgICAgICAgICAgICAgICAgIEZjb25zIChm
b3VuZCwgY3VycmVudF9mcmFtZS0+bG9hZHNfaW5fcHJvZ3Jlc3MpKTsKKyAgICByZWNvcmRfdW53
aW5kX3Byb3RlY3QgKHJlY29yZF9sb2FkX3Vud2luZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRfZnJhbWUtPmxvYWRzX2luX3Byb2dyZXNzKTsKKyAgICBjdXJyZW50X2ZyYW1l
LT5sb2Fkc19pbl9wcm9ncmVzcworICAgICAgPSBGY29ucyAoZm91bmQsIGN1cnJlbnRfZnJhbWUt
PmxvYWRzX2luX3Byb2dyZXNzKTsKICAgfQogCiAgIC8qIEFsbCBsb2FkcyBhcmUgYnkgZGVmYXVs
dCBkeW5hbWljLCB1bmxlc3MgdGhlIGZpbGUgaXRzZWxmIHNwZWNpZmllcwpAQCAtMTYzNiw4ICsy
OTA5LDYgQEAgREVGVU4gKCJsb2FkIiwgRmxvYWQsIFNsb2FkLCAxLCA1LCAwLAogICBlbHNlIGlm
ICghaXNfbW9kdWxlICYmICFpc19uYXRpdmVfZWxpc3ApCiAgICAgewogICAgICAgLyogV2UgYXJl
IGxvYWRpbmcgYSBzb3VyY2UgZmlsZSAoKi5lbCkuICAqLwotICAgICAgaWYgKCFOSUxQIChWbG9h
ZF9zb3VyY2VfZmlsZV9mdW5jdGlvbikpCi0JewogICAgICAgTGlzcF9PYmplY3QgdmFsOwogCiAg
ICAgICBpZiAobHJlYWRfZmRfcCkKQEAgLTE2NDUsMTMgKzI5MTYsMjMgQEAgREVGVU4gKCJsb2Fk
IiwgRmxvYWQsIFNsb2FkLCAxLCA1LCAwLAogICAgICAgICAgIGxyZWFkX2Nsb3NlIChmZCk7CiAg
ICAgICAgICAgY2xlYXJfdW53aW5kX3Byb3RlY3QgKGZkX2luZGV4KTsKICAgICAgICAgfQorICAg
ICAgbm9tZXNzYWdlID0gKE5JTFAgKG5vbWVzc2FnZSkgfHwgZm9yY2VfbG9hZF9tZXNzYWdlcykg
PyBRbmlsIDogUXQ7CisgICAgICBpZiAoIU5JTFAgKFZsb2FkX3NvdXJjZV9maWxlX2Z1bmN0aW9u
KSkKICAgICAgICAgdmFsID0gY2FsbG4gKFZsb2FkX3NvdXJjZV9maWxlX2Z1bmN0aW9uLCBmb3Vu
ZCwgaGlzdF9maWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICBOSUxQIChub2Vycm9yKSA/
IFFuaWwgOiBRdCwKLQkJICAgICAgIChOSUxQIChub21lc3NhZ2UpIHx8IGZvcmNlX2xvYWRfbWVz
c2FnZXMpID8gUW5pbCA6IFF0KTsKLQkgIHJldHVybiB1bmJpbmRfdG8gKGNvdW50LCB2YWwpOwot
CX0KKyAgICAgICAgICAgICAgICAgICAgIG5vbWVzc2FnZSk7CisgICAgICBlbHNlCisgICAgICAv
KiBQZXJmb3JtIGJhc2ljIGVtYWNzLWludGVybmFsIG9ubHkgYnVmZmVyIGV2YWx1YXRpb24KKyAg
ICAgICAgIEFueW9uZSBsb2FkaW5nIGxpc3Agc291cmNlIGZpbGVzIGluIGFuIGluY29tcGF0aWJs
ZQorICAgICAgICAgY29kaW5nIGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIG11bGUuZWwgYmVm
b3JlaGFuZC4gKi8KKyAgICAgICAgdmFsID0gbG9hZF9zb3VyY2VfZmlsZSAoZm91bmQsIGhpc3Rf
ZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSUxQIChub2Vycm9y
KSA/IFFuaWwgOiBRdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9tZXNzYWdl
KTsKKyAgICAgIHJldHVybiB1bmJpbmRfdG8gKGxvYWRfZnJhbWUubG9vcF9keW5hbWljX2ZyYW1l
LCB2YWwpOworCiAgICAgfQogCisgIGJvb2wgc2Vla2FibGUgPSB0cnVlOwogICBpZiAoIWxyZWFk
X2ZkX3ApCiAgICAgewogICAgICAgLyogV2Ugc29tZWhvdyBnb3QgaGVyZSB3aXRoIGZkID09IC0y
LCBtZWFuaW5nIHRoZSBmaWxlIGlzIGRlZW1lZApAQCAtMTY2OCw2ICsyOTQ5LDEyIEBAIERFRlVO
ICgibG9hZCIsIEZsb2FkLCBTbG9hZCwgMSwgNSwgMCwKICAgICAgIGVmb3VuZCA9IEVOQ09ERV9G
SUxFIChmb3VuZCk7CiAgICAgICBzdHJlYW0gPSBlbWFjc19mb3BlbiAoU1NEQVRBIChlZm91bmQp
LCBmbW9kZSk7CiAjZWxzZQorICAgICAgc3RydWN0IHN0YXQgc3Q7CisgICAgICBpZiAobHJlYWRf
ZnN0YXQgKGZkLCAmc3QpICE9IDApCisgICAgICAgIHJlcG9ydF9maWxlX2Vycm9yICgiTG9hZCBm
aWxlIHN0YXR1cyBmYWlsdXJlIiwgZmlsZSk7CisgICAgICAvKiBBdCBsZWFzdCBmb3IgcmVndWxh
ciBmaWxlcywgZW5zdXJlIHJlc3VtaW5nIGEgcmVhZAorICAgICAgICAgb3BlcmF0aW9uIHdpbGwg
c3RhcnQgd2hlcmUgaXQgbGVmdCBvZmYuICovCisgICAgICBzZWVrYWJsZSA9IFNfSVNSRUcgKHN0
LnN0X21vZGUpOwogI2lmICFkZWZpbmVkIFVTRV9BTkRST0lEX0FTU0VUUwogICAgICAgc3RyZWFt
ID0gZW1hY3NfZmRvcGVuIChmZCwgZm1vZGUpOwogI2Vsc2UKQEAgLTE2NzksMTEgKzI5NjYsMTAg
QEAgREVGVU4gKCJsb2FkIiwgRmxvYWQsIFNsb2FkLCAxLCA1LCAwLAogI2VuZGlmCiAjZW5kaWYK
ICAgICB9Ci0KLSAgLyogRGVjbGFyZSBoZXJlIHJhdGhlciB0aGFuIGluc2lkZSB0aGUgZWxzZS1w
YXJ0IGJlY2F1c2UgdGhlIHN0b3JhZ2UKLSAgICAgbWlnaHQgYmUgYWNjZXNzZWQgYnkgdGhlIHVu
YmluZF90byBjYWxsIGJlbG93LiAgKi8KLSAgc3RydWN0IGluZmlsZSBpbnB1dDsKLQorICAvKiB3
ZSBtYXkgb3IgbWF5IG5vdCBuZWVkIHRoaXMgKi8KKyAgbHJlYWRfZnJhbWUgdGhpc19mcmFtZSA9
IElOSVRfTFJFQURfRlJBTUUgKCk7CisgIExpc3BfT2JqZWN0IGNvZGluZyA9IFFub19jb252ZXJz
aW9uOworICB0aGlzX2ZyYW1lLmxvb3BfZHluYW1pY19mcmFtZSA9IFNQRUNQRExfSU5ERVgoKTsK
ICAgaWYgKGlzX21vZHVsZSB8fCBpc19uYXRpdmVfZWxpc3ApCiAgICAgewogICAgICAgLyogYG1v
ZHVsZS1sb2FkJyB1c2VzIHRoZSBmaWxlIG5hbWUsIHNvIHdlIGNhbiBjbG9zZSB0aGUgc3RyZWFt
CkBAIC0xNjkzLDE3ICsyOTc5LDI3IEBAIERFRlVOICgibG9hZCIsIEZsb2FkLCBTbG9hZCwgMSwg
NSwgMCwKICAgICAgICAgICBscmVhZF9jbG9zZSAoZmQpOwogICAgICAgICAgIGNsZWFyX3Vud2lu
ZF9wcm90ZWN0IChmZF9pbmRleCk7CiAgICAgICAgIH0KKyAgICAgIHRoaXNfZnJhbWUuaW50eXBl
ID0gTFJFQURfSU5QVVRfQklOQVJZOwogICAgIH0KICAgZWxzZQogICAgIHsKICAgICAgIGlmICgh
ZmlsZV9zdHJlYW1fdmFsaWRfcCAoc3RyZWFtKSkKICAgICAgICAgcmVwb3J0X2ZpbGVfZXJyb3Ig
KCJPcGVuaW5nIHN0ZGlvIHN0cmVhbSIsIGZpbGUpOwotICAgICAgc2V0X3Vud2luZF9wcm90ZWN0
X3B0ciAoZmRfaW5kZXgsIGNsb3NlX2luZmlsZV91bndpbmQsIGluZmlsZSk7Ci0gICAgICBpbnB1
dC5zdHJlYW0gPSBzdHJlYW07Ci0gICAgICBpbnB1dC5sb29rYWhlYWQgPSAwOwotICAgICAgaW5m
aWxlID0gJmlucHV0OwotICAgICAgdW5yZWFkX2NoYXIgPSAtMTsKKworICAgICAgQVVUT19MSVNU
MyAoc3RyZWFtX2FyZywgUWdldF9maWxlX2NoYXIsIGZpbGUsIGhpc3RfZmlsZV9uYW1lKTsKKyAg
ICAgIGlmICh2ZXJzaW9uICYmIHZlcnNpb24gPCAyMikKKyAgICAgICAgeworICAgICAgICAgIFhT
RVRDQVIgKHN0cmVhbV9hcmcsIFFnZXRfZW1hY3NfbXVsZV9maWxlX2NoYXIpOworICAgICAgICAg
IGNvZGluZyA9IFFlbWFjc19tdWxlOworICAgICAgICAgIHNwZWNiaW5kIChRbG9hZF9mb3JjZV9k
b2Nfc3RyaW5ncywgUXQpOworICAgICAgICB9CisKKyAgICAgIGluaXRfbHJlYWRfaW5wdXRfZnJv
bV9zdHJlYW0gKCZ0aGlzX2ZyYW1lLCBzdHJlYW1fYXJnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUW5pbCwgUW5pbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZhbHNlLCBzZWVrYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cmVhbSwgY29kaW5nKTsKICAgICB9CisgIGluaXRfbHJlYWRfZXZhbF9wYXJhbXMoJnRo
aXNfZnJhbWUsIGZvdW5kLCBoaXN0X2ZpbGVfbmFtZSwgUW5pbCwgZmFsc2UpOwogCiAgIGlmICgh
IE5JTFAgKFZwdXJpZnlfZmxhZykpCiAgICAgVnByZWxvYWRlZF9maWxlX2xpc3QgPSBGY29ucyAo
ZmlsZSwgVnByZWxvYWRlZF9maWxlX2xpc3QpOwpAQCAtMTczMyw3ICszMDI5LDcgQEAgREVGVU4g
KCJsb2FkIiwgRmxvYWQsIFNsb2FkLCAxLCA1LCAwLAogI2lmZGVmIEhBVkVfTU9EVUxFUwogICAg
ICAgbG9hZGhpc3RfaW5pdGlhbGl6ZSAoZm91bmQpOwogICAgICAgRm1vZHVsZV9sb2FkIChmb3Vu
ZCk7Ci0gICAgICBidWlsZF9sb2FkX2hpc3RvcnkgKGZvdW5kLCB0cnVlKTsKKyAgICAgIGJ1aWxk
X2xvYWRfaGlzdG9yeSAoJnRoaXNfZnJhbWUsZm91bmQsIHRydWUpOwogI2Vsc2UKICAgICAgIC8q
IFRoaXMgY2Fubm90IGhhcHBlbi4gICovCiAgICAgICBlbWFjc19hYm9ydCAoKTsKQEAgLTE3NDQs
NyArMzA0MCw3IEBAIERFRlVOICgibG9hZCIsIEZsb2FkLCBTbG9hZCwgMSwgNSwgMCwKICNpZmRl
ZiBIQVZFX05BVElWRV9DT01QCiAgICAgICBsb2FkaGlzdF9pbml0aWFsaXplIChoaXN0X2ZpbGVf
bmFtZSk7CiAgICAgICBGbmF0aXZlX2VsaXNwX2xvYWQgKGZvdW5kLCBRbmlsKTsKLSAgICAgIGJ1
aWxkX2xvYWRfaGlzdG9yeSAoaGlzdF9maWxlX25hbWUsIHRydWUpOworICAgICAgYnVpbGRfbG9h
ZF9oaXN0b3J5ICgmdGhpc19mcmFtZSxoaXN0X2ZpbGVfbmFtZSwgdHJ1ZSk7CiAjZWxzZQogICAg
ICAgLyogVGhpcyBjYW5ub3QgaGFwcGVuLiAgKi8KICAgICAgIGVtYWNzX2Fib3J0ICgpOwpAQCAt
MTc1MywyMCArMzA0OSwxNiBAQCBERUZVTiAoImxvYWQiLCBGbG9hZCwgU2xvYWQsIDEsIDUsIDAs
CiAgICAgfQogICBlbHNlCiAgICAgewotICAgICAgRnNldCAoUWxleGljYWxfYmluZGluZywKLQkg
ICAgZ2V0X2xleGljYWxfYmluZGluZyAoUWdldF9maWxlX2NoYXIsIGNvbXBpbGVkID8gUW5pbCA6
IGZpbGUpKTsKKyAgICAgIC8qIFVzZSBpbnRlcm5hbCBmdW5jdGlvbiB0byBldmFsdWF0ZSBzb3Vy
Y2UgZmlsZXMKKyAgICAgICAgIGZyb20gYnVmZmVycywgc28gYWx3YXlzIGNvbXBpbGVkIGFuZCBs
ZXhpY2FsLWJpbmRpbmcgPSB0Ki8KKyAgICAgIGVhc3NlcnQgKGNvbXBpbGVkID09IDEpOwogCi0g
ICAgICBpZiAoISB2ZXJzaW9uIHx8IHZlcnNpb24gPj0gMjIpCi0gICAgICAgIHJlYWRldmFsbG9v
cCAoUWdldF9maWxlX2NoYXIsICZpbnB1dCwgaGlzdF9maWxlX25hbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgMCwgUW5pbCwgUW5pbCwgUW5pbCwgUW5pbCk7Ci0gICAgICBlbHNlCi0gICAgICAg
IHsKLSAgICAgICAgICAvKiBXZSBjYW4ndCBoYW5kbGUgYSBmaWxlIHdoaWNoIHdhcyBjb21waWxl
ZCB3aXRoCi0gICAgICAgICAgICAgYnl0ZS1jb21waWxlLWR5bmFtaWMgYnkgb2xkZXIgdmVyc2lv
biBvZiBFbWFjcy4gICovCi0gICAgICAgICAgc3BlY2JpbmQgKFFsb2FkX2ZvcmNlX2RvY19zdHJp
bmdzLCBRdCk7Ci0gICAgICAgICAgcmVhZGV2YWxsb29wIChRZ2V0X2VtYWNzX211bGVfZmlsZV9j
aGFyLCAmaW5wdXQsIGhpc3RfZmlsZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgMCwg
UW5pbCwgUW5pbCwgUW5pbCwgUW5pbCk7Ci0gICAgICAgIH0KKyAgICAgIGFjdGl2YXRlX2xyZWFk
X2ZyYW1lICgmdGhpc19mcmFtZSwgTFJFQURfRlJBTUVfTVVMVElQTEUpOworICAgICAgc2V0X3Vu
d2luZF9wcm90ZWN0X3B0ciAoZmRfaW5kZXgsIGNsb3NlX2luZmlsZV91bndpbmQsICZ0aGlzX2Zy
YW1lKTsKKyAgICAgIGludGVybmFsX2NvbmRpdGlvbl9jYXNlXzEgKHJlYWRldmFsbG9vcF9lb2Zf
dHJhbXBvbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VfbWludF9w
dHIoJnRoaXNfZnJhbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdDEg
KFFlcnJvcl9kdXJpbmdfaW50ZXJydXB0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJhc2VfaW50ZXJydXB0X2Vycm9yX2hhbmRsZXIpOwogICAgIH0KICAgdW5iaW5kX3RvIChj
b3VudCwgUW5pbCk7CiAKQEAgLTE3NzQsMTEgKzMwNjYsMTEgQEAgREVGVU4gKCJsb2FkIiwgRmxv
YWQsIFNsb2FkLCAxLCA1LCAwLAogICBpZiAoIU5JTFAgKEZmYm91bmRwIChRZG9fYWZ0ZXJfbG9h
ZF9ldmFsdWF0aW9uKSkpCiAgICAgY2FsbG4gKFFkb19hZnRlcl9sb2FkX2V2YWx1YXRpb24sIGhp
c3RfZmlsZV9uYW1lKTsKIAotICBmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZRUxUUyAoc2F2ZWRf
c3RyaW5ncyk7IGkrKykKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWUVMVFMgKHRoaXNfZnJh
bWUuc2F2ZWRfc3RyaW5ncyk7IGkrKykKICAgICB7Ci0gICAgICB4ZnJlZSAoc2F2ZWRfc3RyaW5n
c1tpXS5zdHJpbmcpOwotICAgICAgc2F2ZWRfc3RyaW5nc1tpXS5zdHJpbmcgPSBOVUxMOwotICAg
ICAgc2F2ZWRfc3RyaW5nc1tpXS5zaXplID0gMDsKKyAgICAgIHhmcmVlICh0aGlzX2ZyYW1lLnNh
dmVkX3N0cmluZ3NbaV0uc3RyaW5nKTsKKyAgICAgIHRoaXNfZnJhbWUuc2F2ZWRfc3RyaW5nc1tp
XS5zdHJpbmcgPSBOVUxMOworICAgICAgdGhpc19mcmFtZS5zYXZlZF9zdHJpbmdzW2ldLnNpemUg
PSAwOwogICAgIH0KIAogICAvKiBUaGUgIi4uLmRvbmUiIG1lc3NhZ2VzIGFyZSBzaG93biBvbmx5
IGluIGludGVyYWN0aXZlIG1vZGUsIGJlY2F1c2UKQEAgLTIyODgsNyArMzU4MCw3IEBAIG9wZW5w
IChMaXNwX09iamVjdCBwYXRoLCBMaXNwX09iamVjdCBzdHIsIExpc3BfT2JqZWN0IHN1ZmZpeGVz
LAogICAgcGFydCBvZiBpdC4gICovCiAKIHN0YXRpYyB2b2lkCi1idWlsZF9sb2FkX2hpc3Rvcnkg
KExpc3BfT2JqZWN0IGZpbGVuYW1lLCBib29sIGVudGlyZSkKK2J1aWxkX2xvYWRfaGlzdG9yeSAo
cmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLCBMaXNwX09iamVjdCBmaWxlbmFtZSwgYm9vbCBl
bnRpcmUpCiB7CiAgIExpc3BfT2JqZWN0IHRhaWwsIHByZXYsIG5ld2VsdDsKICAgTGlzcF9PYmpl
Y3QgdGVtLCB0ZW0yOwpAQCAtMjMyNywxMyArMzYxOSwxMyBAQCBidWlsZF9sb2FkX2hpc3Rvcnkg
KExpc3BfT2JqZWN0IGZpbGVuYW1lLCBib29sIGVudGlyZSkKICAgICAgICAgICAgICAgICAgIGlm
IChOSUxQIChGbWVtYmVyIChuZXdlbHQsIHRlbSkpKQogICAgICAgICAgICAgICAgICAgICBGc2V0
Y2FyICh0YWlsLCBGY29ucyAoWENBUiAodGVtKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEZjb25zIChuZXdlbHQsIFhDRFIgKHRlbSkpKSk7Ci0JCSAgbWF5YmVf
cXVpdCAoKTsKKyAgICAgICAgICAgICAgICAgIGxyZWFkX21heWJlX3F1aXQgKGZyYW1lKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIGVsc2UKICAg
ICAgICAgcHJldiA9IHRhaWw7Ci0gICAgICBtYXliZV9xdWl0ICgpOworICAgICAgbHJlYWRfbWF5
YmVfcXVpdCAoZnJhbWUpOwogICAgIH0KIAogICAvKiBJZiB3ZSdyZSBsb2FkaW5nIGFuIGVudGly
ZSBmaWxlLCBjb25zIHRoZSBuZXcgYXNzb2Mgb250byB0aGUKQEAgLTIzNDksMTkgKzM2NDEsMjkg
QEAgYnVpbGRfbG9hZF9oaXN0b3J5IChMaXNwX09iamVjdCBmaWxlbmFtZSwgYm9vbCBlbnRpcmUp
CiAgICAgICBWY3VycmVudF9sb2FkX2xpc3QgPSBRdDsKICAgICB9CiB9Ci0KLXN0YXRpYyB2b2lk
Ci1yZWFkZXZhbGxvb3BfMSAoaW50IG9sZCkKK0xpc3BfT2JqZWN0CityZWFkZXZhbGxvb3BfZW9m
X3RyYW1wb2xpbmUgKExpc3BfT2JqZWN0IGZyYW1lcHRyKQogewotICBsb2FkX2NvbnZlcnRfdG9f
dW5pYnl0ZSA9IG9sZDsKKyAgbHJlYWRfZnJhbWUgKmZyYW1lID0geG1pbnRfcG9pbnRlciAoZnJh
bWVwdHIpOworICBlYXNzZXJ0ICghVU5JTklUX1NQRUNQRExfUkVGKGZyYW1lLT5sb29wX2R5bmFt
aWNfZnJhbWUpKTsKKyAgTGlzcF9PYmplY3QgdmFsID0KKyAgICBpbnRlcm5hbF9jb25kaXRpb25f
Y2FzZV8xIChyZWFkZXZhbGxvb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJh
bWVwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdDEgKFFlbmRfb2ZfZmls
ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGV2YWxsb29wX2VvZl9oYW5k
bGVyKTsKKyAgYnVpbGRfbG9hZF9oaXN0b3J5IChmcmFtZSwgZnJhbWUtPnNvdXJjZW5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgRlJPTV9GSUxFX1AgKGZyYW1lLT5pbnR5cGUpIHx8IGZyYW1l
LT53aG9sZV9idWZmZXIpOworICByZXR1cm4gdW5iaW5kX3RvIChmcmFtZS0+bG9vcF9keW5hbWlj
X2ZyYW1lLCB2YWwpOwogfQogCisKIC8qIFNpZ25hbCBhbiBgZW5kLW9mLWZpbGUnIGVycm9yLCBp
ZiBwb3NzaWJsZSB3aXRoIGZpbGUgbmFtZQogICAgaW5mb3JtYXRpb24uICAqLwogCiBzdGF0aWMg
QVZPSUQKLWVuZF9vZl9maWxlX2Vycm9yICh2b2lkKQorZW5kX29mX2ZpbGVfZXJyb3IgKHJlZ2lz
dGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKIHsKKyAgZnJhbWUtPnJlYWRfZW9mID0gdHJ1ZTsKICAg
aWYgKFNUUklOR1AgKFZsb2FkX3RydWVfZmlsZV9uYW1lKSkKICAgICB4c2lnbmFsMSAoUWVuZF9v
Zl9maWxlLCBWbG9hZF90cnVlX2ZpbGVfbmFtZSk7CiAKQEAgLTIzODksOTMgKzM2OTEsMTQ1IEBA
IHJlYWRldmFsbG9vcF9lYWdlcl9leHBhbmRfZXZhbCAoTGlzcF9PYmplY3QgdmFsLCBMaXNwX09i
amVjdCBtYWNyb2V4cGFuZCkKICAgcmV0dXJuIHZhbDsKIH0KIAotLyogVU5JQllURSBzcGVjaWZp
ZXMgaG93IHRvIHNldCBsb2FkX2NvbnZlcnRfdG9fdW5pYnl0ZQotICAgZm9yIHRoaXMgaW52b2Nh
dGlvbi4KLSAgIFJFQURGVU4sIGlmIG5vbi1uaWwsIGlzIHVzZWQgaW5zdGVhZCBvZiBgcmVhZCcu
CitMaXNwX09iamVjdAorbHJlYWRfZ2V0X2J1ZmZlcl9vYmogKHJlZ2lzdGVyIGxyZWFkX2ZyYW1l
ICpmcmFtZSkKK3sKKyAgc3dpdGNoIChmcmFtZS0+aW50eXBlKQorICAgIHsKKyAgICBjYXNlIExS
RUFEX0lOUFVUX0JVRkZFUjoKKyAgICAgIHJldHVybiBmcmFtZS0+aW5wdXQuYi5idWZmZXI7Cisg
ICAgICBicmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVUX01BUktFUjoKKyAgICAgIHJldHVybiBm
cmFtZS0+aW5wdXQubS5iLmJ1ZmZlcjsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
Lyogc2tpcCAqLworICAgIH0KKyAgcmV0dXJuIFFuaWw7Cit9CiAKLSAgIFNUQVJULCBFTkQgc3Bl
Y2lmeSByZWdpb24gdG8gcmVhZCBpbiBjdXJyZW50IGJ1ZmZlciAoZnJvbSBldmFsLXJlZ2lvbiku
Ci0gICBJZiB0aGUgaW5wdXQgaXMgbm90IGZyb20gYSBidWZmZXIsIHRoZXkgbXVzdCBiZSBuaWwu
ICAqLworc3RydWN0IGJ1ZmZlciAqCitscmVhZF9nZXRfYnVmZmVyIChyZWdpc3RlciBscmVhZF9m
cmFtZSAqZnJhbWUpCit7CisgIHN3aXRjaCAoZnJhbWUtPmludHlwZSkKKyAgICB7CisgICAgY2Fz
ZSBMUkVBRF9JTlBVVF9CVUZGRVI6CisgICAgICByZXR1cm4gWEJVRkZFUihmcmFtZS0+aW5wdXQu
Yi5idWZmZXIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9NQVJLRVI6Cisg
ICAgICByZXR1cm4gWEJVRkZFUiAoZnJhbWUtPmlucHV0Lm0uYi5idWZmZXIpOworICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAvKiBza2lwICovCisgICAgfQorICByZXR1cm4gTlVMTDsK
K30KIAotc3RhdGljIHZvaWQKLXJlYWRldmFsbG9vcCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4s
Ci0JICAgICAgc3RydWN0IGluZmlsZSAqaW5maWxlMCwKLQkgICAgICBMaXNwX09iamVjdCBzb3Vy
Y2VuYW1lLAotCSAgICAgIGJvb2wgcHJpbnRmbGFnLAotCSAgICAgIExpc3BfT2JqZWN0IHVuaWJ5
dGUsIExpc3BfT2JqZWN0IHJlYWRmdW4sCitzdGF0aWMgTGlzcF9PYmplY3QKK2J1ZmZlcl9wb2lu
dF9tYXJrZXIgKExpc3BfT2JqZWN0IGJ1ZmZlcikKK3sKKyAgc3RydWN0IGJ1ZmZlciAqYnVmID0g
WEJVRkZFUiAoYnVmZmVyKTsKKyAgaWYgKGJ1ZiA9PSBjdXJyZW50X2J1ZmZlcikKKyAgICByZXR1
cm4gRnBvaW50X21hcmtlcigpOworICBpZiAoTklMUCAoQlZBUiAoYnVmLCBwdF9tYXJrZXIpKSkK
KyAgICB7CisgICAgICBMaXNwX09iamVjdCB0bXAgPSBGbWFrZV9tYXJrZXIoKTsKKyAgICAgIHJl
dHVybiBGc2V0X21hcmtlciAodG1wLCBtYWtlX2ZpeG51bSAoYnVmLT5wdCksIGJ1ZmZlcik7Cisg
ICAgfQorICAvKiBlbHNlICovCisgIHJldHVybiBGY29weV9tYXJrZXIgKEJWQVIgKGJ1ZiwgcHRf
bWFya2VyKSwgUW5pbCk7Cit9CisKKy8qIERvbid0IGFsdGVyIHRoZSBidWZmZXIsIGp1c3QgY29u
c3RydWN0IG1hcmtlcnMgZm9yCisgICBmcmFtZS0+c3RhcnQgYW5kIGZyYW1lLT5lbmQgZGlyZWN0
bHkgKi8KK2Jvb2wKK3NldHVwX2J1ZmZlcl9mb3JfcmVhZGV2YWxsb29wIChyZWdpc3RlciBscmVh
ZF9mcmFtZSAqZnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzcF9PYmpl
Y3Qgc3RhcnQsIExpc3BfT2JqZWN0IGVuZCkKIHsKLSAgaW50IGM7Ci0gIExpc3BfT2JqZWN0IHZh
bDsKICAgc3BlY3BkbF9yZWYgY291bnQgPSBTUEVDUERMX0lOREVYICgpOwotICBzdHJ1Y3QgYnVm
ZmVyICpiID0gMDsKLSAgYm9vbCBjb250aW51ZV9yZWFkaW5nX3A7Ci0gIExpc3BfT2JqZWN0IGxl
eF9ib3VuZDsKLSAgLyogVHJ1ZSBpZiByZWFkaW5nIGFuIGVudGlyZSBidWZmZXIuICAqLwotICBi
b29sIHdob2xlX2J1ZmZlciA9IDA7Ci0gIC8qIFRydWUgb24gdGhlIGZpcnN0IHRpbWUgYXJvdW5k
LiAgKi8KLSAgYm9vbCBmaXJzdF9zZXhwID0gMTsKLSAgTGlzcF9PYmplY3QgbWFjcm9leHBhbmQ7
Ci0KLSAgaWYgKCFOSUxQIChzb3VyY2VuYW1lKSkKLSAgICBDSEVDS19TVFJJTkcgKHNvdXJjZW5h
bWUpOwotCi0gIG1hY3JvZXhwYW5kID0gUWludGVybmFsX21hY3JvZXhwYW5kX2Zvcl9sb2FkOwot
Ci0gIGlmIChOSUxQIChGZmJvdW5kcCAobWFjcm9leHBhbmQpKQotICAgICAgfHwgKFNUUklOR1Ag
KHNvdXJjZW5hbWUpICYmIHN1ZmZpeF9wIChzb3VyY2VuYW1lLCAiLmVsYyIpKSkKLSAgICAvKiBE
b24ndCBtYWNyb2V4cGFuZCBiZWZvcmUgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gaXMgZGVm
aW5lZAotICAgICAgIGFuZCBkb24ndCBib3RoZXIgbWFjcm9leHBhbmRpbmcgaW4gLmVsYyBmaWxl
cywgc2luY2UgaXQgc2hvdWxkIGhhdmUKLSAgICAgICBiZWVuIGRvbmUgYWxyZWFkeS4gICovCi0g
ICAgbWFjcm9leHBhbmQgPSBRbmlsOwotCi0gIGlmIChNQVJLRVJQIChyZWFkY2hhcmZ1bikpCisg
IExpc3BfT2JqZWN0IGJ1ZmZlciA9IGxyZWFkX2dldF9idWZmZXJfb2JqIChmcmFtZSk7CisgIHN0
cnVjdCBidWZmZXIgKmJ1ZiA9IE5JTFAgKGJ1ZmZlcikgPyBOVUxMIDogWEJVRkZFUiAoYnVmZmVy
KTsKKyAgaWYgKE5JTFAgKGVuZCkpCisgICAgeworICAgICAgTGlzcF9PYmplY3QgdG1wID0gRm1h
a2VfbWFya2VyKCk7CisgICAgICBmcmFtZS0+ZW5kID0gRnNldF9tYXJrZXIgKHRtcCwgbWFrZV9m
aXhudW0gKEJVRl9aIChidWYpKSxidWZmZXIpOworICAgIH0KKyAgZWxzZSBpZiAoRklYTlVNUCAo
ZW5kKSkKKyAgICB7CisgICAgICBMaXNwX09iamVjdCB0bXAgPSBGbWFrZV9tYXJrZXIoKTsKKyAg
ICAgIGZyYW1lLT5lbmQgPSBGc2V0X21hcmtlciAodG1wLCBlbmQsYnVmZmVyKTsKKyAgICB9Cisg
IGVsc2UgaWYgKCFNQVJLRVJQIChlbmQpKQorICAgIHhzaWduYWwxIChRZXJyb3IsIENBTExOIChG
Zm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF9zdHJpbmcgKCJyZWFk
OiBlbmQgYXJndW1lbnQgbXVzdCBiZSBuaWwsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAibnVtYmVyLCBvciBtYXJrZXI6ICVTIiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZCkpOworICBlbHNlCiAgICAgeworICAgICAgaWYgKFhNQVJLRVIgKGVuZCktPmJ1ZmZl
ciA9PSBidWYpCisgICAgICAgIGZyYW1lLT5lbmQgPSBlbmQ7CisgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICBMaXNwX09iamVjdCB0bXAgPSBGbWFrZV9tYXJrZXIgKCk7CisgICAgICAg
ICAgZnJhbWUtPmVuZCA9IEZzZXRfbWFya2VyICh0bXAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYWtlX2ZpeG51bSAoWE1BUktFUihlbmQpLT5jaGFycG9zKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcik7CisgICAgICAgIH0KKyAgICB9
CiAgIGlmIChOSUxQIChzdGFydCkpCi0Jc3RhcnQgPSByZWFkY2hhcmZ1bjsKKyAgICB7CisgICAg
ICBmcmFtZS0+c3RhcnQgPSBidWZmZXJfcG9pbnRfbWFya2VyIChidWZmZXIpOwogICAgIH0KLQot
ICBpZiAoQlVGRkVSUCAocmVhZGNoYXJmdW4pKQotICAgIGIgPSBYQlVGRkVSIChyZWFkY2hhcmZ1
bik7Ci0gIGVsc2UgaWYgKE1BUktFUlAgKHJlYWRjaGFyZnVuKSkKLSAgICBiID0gWE1BUktFUiAo
cmVhZGNoYXJmdW4pLT5idWZmZXI7Ci0KLSAgLyogV2UgYXNzdW1lIFNUQVJUIGlzIG5pbCB3aGVu
IGlucHV0IGlzIG5vdCBmcm9tIGEgYnVmZmVyLiAgKi8KLSAgaWYgKCEgTklMUCAoc3RhcnQpICYm
ICFiKQotICAgIGVtYWNzX2Fib3J0ICgpOwotCi0gIHNwZWNiaW5kIChRc3RhbmRhcmRfaW5wdXQs
IHJlYWRjaGFyZnVuKTsKLSAgcmVjb3JkX3Vud2luZF9wcm90ZWN0X2ludCAocmVhZGV2YWxsb29w
XzEsIGxvYWRfY29udmVydF90b191bmlieXRlKTsKLSAgbG9hZF9jb252ZXJ0X3RvX3VuaWJ5dGUg
PSAhTklMUCAodW5pYnl0ZSk7Ci0KLSAgLyogSWYgbGV4aWNhbCBiaW5kaW5nIGlzIGFjdGl2ZSAo
ZWl0aGVyIGJlY2F1c2UgaXQgd2FzIHNwZWNpZmllZCBpbgotICAgICB0aGUgZmlsZSdzIGhlYWRl
ciwgb3IgdmlhIGEgYnVmZmVyLWxvY2FsIHZhcmlhYmxlKSwgY3JlYXRlIGFuIGVtcHR5Ci0gICAg
IGxleGljYWwgZW52aXJvbm1lbnQsIG90aGVyd2lzZSwgdHVybiBvZmYgbGV4aWNhbCBiaW5kaW5n
LiAgKi8KLSAgbGV4X2JvdW5kID0gZmluZF9zeW1ib2xfdmFsdWUgKFFsZXhpY2FsX2JpbmRpbmcp
OwotICBzcGVjYmluZCAoUWludGVybmFsX2ludGVycHJldGVyX2Vudmlyb25tZW50LAotCSAgICAo
TklMUCAobGV4X2JvdW5kKSB8fCBCQVNFX0VRIChsZXhfYm91bmQsIFF1bmJvdW5kKQotCSAgICAg
PyBRbmlsIDogbGlzdDEgKFF0KSkpOwotICBzcGVjYmluZCAoUW1hY3JvZXhwX19keW52YXJzLCBW
bWFjcm9leHBfX2R5bnZhcnMpOwotCi0gIC8qIEVuc3VyZSBzb3VyY2VuYW1lIGlzIGFic29sdXRl
LCBleGNlcHQgd2hpbHN0IHByZWxvYWRpbmcuICAqLwotICBpZiAoIXdpbGxfZHVtcF9wICgpCi0g
ICAgICAmJiAhTklMUCAoc291cmNlbmFtZSkgJiYgIU5JTFAgKEZmaWxlX25hbWVfYWJzb2x1dGVf
cCAoc291cmNlbmFtZSkpKQotICAgIHNvdXJjZW5hbWUgPSBGZXhwYW5kX2ZpbGVfbmFtZSAoc291
cmNlbmFtZSwgUW5pbCk7Ci0KLSAgbG9hZGhpc3RfaW5pdGlhbGl6ZSAoc291cmNlbmFtZSk7Ci0K
LSAgY29udGludWVfcmVhZGluZ19wID0gMTsKLSAgd2hpbGUgKGNvbnRpbnVlX3JlYWRpbmdfcCkK
KyAgZWxzZSBpZiAoRklYTlVNUCAoc3RhcnQpKQogICAgIHsKLSAgICAgIHNwZWNwZGxfcmVmIGNv
dW50MSA9IFNQRUNQRExfSU5ERVggKCk7CisgICAgICBMaXNwX09iamVjdCB0bXAgPSBGbWFrZV9t
YXJrZXIoKTsKKyAgICAgIGZyYW1lLT5zdGFydCA9IEZzZXRfbWFya2VyICh0bXAsIHN0YXJ0LCBi
dWZmZXIpOworICAgIH0KKyAgZWxzZSBpZiAoIU1BUktFUlAgKHN0YXJ0KSkKKyAgICB4c2lnbmFs
MSAoUWVycm9yLCBDQUxMTiAoRmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnVpbGRfc3RyaW5nICgicmVhZDogc3RhcnQgYXJndW1lbnQgbXVzdCBiZSBuaWwsICIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAibnVtYmVyLCBvciBtYXJrZXI6ICVTIiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0KSk7CisgIGVsc2UKKyAgICB7CisgICAgICAv
KiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhlIG1hcmtlciBpcyBmcm9tIHRoZSBidWZmZXIgKi8K
KyAgICAgIGlmIChYTUFSS0VSIChzdGFydCktPmJ1ZmZlciA9PSBidWYpCisgICAgICAgIGZyYW1l
LT5zdGFydCA9IHN0YXJ0OworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgTGlzcF9P
YmplY3QgdG1wID0gRm1ha2VfbWFya2VyICgpOworICAgICAgICAgIGZyYW1lLT5zdGFydAorICAg
ICAgICAgICAgPSBGc2V0X21hcmtlciAodG1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWFrZV9maXhudW0gKFhNQVJLRVIoc3RhcnQpLT5jaGFycG9zKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJ1ZmZlcik7CisgICAgICAgIH0KKyAgICB9CisgIC8qIGlzIHJlc3RyaWN0aW9u
IHRoZSB3aG9sZSBidWZmZXI/ICovCisgIGJvb2wgcnYgPSAoKFhNQVJLRVIgKGZyYW1lLT5zdGFy
dCktPmNoYXJwb3MgPT0gQlVGX0JFRyAoYnVmKSkKKyAgICAgICAgICAgICAmJiAoWE1BUktFUiAo
ZnJhbWUtPmVuZCktPmNoYXJwb3MgPT0gQlVGX1ogKGJ1ZikpKTsKKyAgdW5iaW5kX3RvIChjb3Vu
dCxRbmlsKTsKKyAgcmV0dXJuIHJ2OworfQogCi0gICAgICBpZiAoYiAhPSAwICYmICFCVUZGRVJf
TElWRV9QIChiKSkKKy8qIFRoaXMgcHJvY2VkdXJlIHBlcmZvcm1zIDIgZnVuY3Rpb25zOgorICAg
QXJyYW5nZSBmb3IgbGlzcC12aXNpYmxlIHN0YXRlIG9mIGJ1ZmZlciBhdCBlbnRyeSB0byByZWFk
IGZ1bmN0aW9uIHRvIGJlCisgICAgICAgcmVpbnN0YXRlZCB3aGVuIHRoZSBkeW5hbWljIGZyYW1l
IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVhZC9yZWFkZXZhbGxvb3AKKyAgICAgICBpcyB1bndvdW5k
LgorICAgU2V0IGJ1ZmZlciBzdGF0ZSBmb3IgdXNlIGJ5IHJlYWQuCisgICBGb3IgcmVjdXJzaXZl
bHktcmVlbnRyYW50IHJlYWQvZXZhbCwgdGhpcyBoYXMgdG8gYmUgY2FsbGVkIGF0IGFueSAocmUp
ZW50cnkKKyAgIHRvIHJlYWQsIGFuZCB1bndvdW5kIHRvIHBlcmZvcm0gYW55IGludGVydmVuaW5n
IGV2YWwgYXMgd2VsbCBhcyBhZnRlcgorICAgcmVhZDAgaGFzIGNvbXBsZXRlZC4KKyAqLwordm9p
ZAorcHJlcGFyZV9idWZmZXJfZm9yX2ludGVycnVwdGlibGVfcmVhZCAocmVnaXN0ZXIgbHJlYWRf
ZnJhbWUgKmZyYW1lKQoreworICAvKiBMaXNwX09iamVjdCBidWZmZXIgPSBscmVhZF9nZXRfYnVm
ZmVyX29iaihmcmFtZSk7ICovCisgIHN0cnVjdCBidWZmZXIgKmJ1ZiA9IGxyZWFkX2dldF9idWZm
ZXIoZnJhbWUpOworICBpZiAoYnVmICE9IDAgJiYgIUJVRkZFUl9MSVZFX1AgKGJ1ZikpCiAgICAg
ZXJyb3IgKCJSZWFkaW5nIGZyb20ga2lsbGVkIGJ1ZmZlciIpOwotCi0gICAgICBpZiAoIU5JTFAg
KHN0YXJ0KSkKLQl7CiAgIC8qIFN3aXRjaCB0byB0aGUgYnVmZmVyIHdlIGFyZSByZWFkaW5nIGZy
b20uICAqLwogICByZWNvcmRfdW53aW5kX3Byb3RlY3RfZXhjdXJzaW9uICgpOwotCSAgc2V0X2J1
ZmZlcl9pbnRlcm5hbCAoYik7CisgIHNldF9idWZmZXJfaW50ZXJuYWwgKGJ1Zik7CiAKICAgLyog
U2F2ZSBwb2ludCBpbiBpdC4gICovCiAgIHJlY29yZF91bndpbmRfcHJvdGVjdF9leGN1cnNpb24g
KCk7CkBAIC0yNDg1LDEwOCArMzgzOSwyNjggQEAgcmVhZGV2YWxsb29wIChMaXNwX09iamVjdCBy
ZWFkY2hhcmZ1biwKICAgLyogVGhvc2UgZ2V0IHVuYm91bmQgYWZ0ZXIgd2UgcmVhZCBvbmUgZXhw
cmVzc2lvbi4gICovCiAKICAgLyogU2V0IHBvaW50IGFuZCBaViBhcm91bmQgc3R1ZmYgdG8gYmUg
cmVhZC4gICovCi0JICBGZ290b19jaGFyIChzdGFydCk7Ci0JICBpZiAoIU5JTFAgKGVuZCkpCi0J
ICAgIEZuYXJyb3dfdG9fcmVnaW9uIChtYWtlX2ZpeG51bSAoQkVHViksIGVuZCk7CisgIEZnb3Rv
X2NoYXIgKGZyYW1lLT5zdGFydCk7CisgIEZuYXJyb3dfdG9fcmVnaW9uIChtYWtlX2ZpeG51bSAo
QkVHViksIGZyYW1lLT5lbmQpOworfQogCi0JICAvKiBKdXN0IGZvciBjbGVhbmxpbmVzcywgY29u
dmVydCBFTkQgdG8gYSBtYXJrZXIKLQkgICAgIGlmIGl0IGlzIGFuIGludGVnZXIuICAqLwotCSAg
aWYgKEZJWE5VTVAgKGVuZCkpCi0JICAgIGVuZCA9IEZwb2ludF9tYXhfbWFya2VyICgpOwotCX0K
Ky8qIFJFQURGVU4sIGlmIG5vbi1uaWwsIGlzIHVzZWQgaW5zdGVhZCBvZiBgcmVhZCcuCisKKyAg
IFNUQVJULCBFTkQgc3BlY2lmeSByZWdpb24gdG8gcmVhZCBpbiBjdXJyZW50IGJ1ZmZlciAoZnJv
bSBldmFsLXJlZ2lvbikuCisgICBJZiB0aGUgaW5wdXQgaXMgbm90IGZyb20gYSBidWZmZXIsIHRo
ZXkgbXVzdCBiZSBuaWwuICAqLworCitzdGF0aWMgTGlzcF9PYmplY3QKK25vbnN0YW5kYXJkX3Jl
YWQgKExpc3BfT2JqZWN0IGZyYW1lcHRyKQoreworICByZWdpc3RlciBscmVhZF9mcmFtZSAqZnJh
bWUgPSB4bWludF9wb2ludGVyIChmcmFtZXB0cik7CisgIExpc3BfT2JqZWN0IHZhbDsKKyAgaWYg
KCFOSUxQIChmcmFtZS0+cmVhZGZ1bikpCisgICAgeworICAgICAgdmFsID0gY2FsbG4gKGZyYW1l
LT5yZWFkZnVuLCBRcmVhZGVyX2lucHV0X3N0cmVhbSk7CiAKLSAgICAgIC8qIE9uIHRoZSBmaXJz
dCBjeWNsZSwgd2UgY2FuIGVhc2lseSB0ZXN0IGhlcmUKLQkgd2hldGhlciB3ZSBhcmUgcmVhZGlu
ZyB0aGUgd2hvbGUgYnVmZmVyLiAgKi8KLSAgICAgIGlmIChiICYmIGZpcnN0X3NleHApCi0Jd2hv
bGVfYnVmZmVyID0gKEJVRl9QVCAoYikgPT0gQlVGX0JFRyAoYikgJiYgQlVGX1pWIChiKSA9PSBC
VUZfWiAoYikpOworICAgICAgLyogSWYgUkVBRENIQVJGVU4gaGFzIHNldCBwb2ludCB0byBaViwg
d2Ugc2hvdWxkCisgICAgICAgICBzdG9wIHJlYWRpbmcsIGV2ZW4gaWYgdGhlIGZvcm0gcmVhZCBz
ZXRzIHBvaW50CisgICAgICAgICB0byBhIGRpZmZlcmVudCB2YWx1ZSB3aGVuIGV2YWx1YXRlZC4g
ICovCisgICAgICBpZiAoRlJPTV9CVUZGRVJfUCAoZnJhbWUtPmludHlwZSkpCisgICAgICAgIHsK
KyAgICAgICAgICBzdHJ1Y3QgYnVmZmVyICpidWYgPSBscmVhZF9nZXRfYnVmZmVyIChmcmFtZSk7
CisgICAgICAgICAgaWYgKEJVRl9QVCAoYnVmKSA9PSBCVUZfWlYgKGJ1ZikpCisgICAgICAgICAg
ICBmcmFtZS0+cmVhZF9lb2YgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAg
eworICAgICAgLyogISBOSUxQIChWbG9hZF9yZWFkX2Z1bmN0aW9uKQorICAgICAgICAgfHwgIUVR
IChWbG9hZF9yZWFkX2Z1bmN0aW9uLCBRcmVhZCkgKi8KKyAgICAgIHZhbCA9IGNhbGxuIChWbG9h
ZF9yZWFkX2Z1bmN0aW9uLCBRcmVhZGVyX2lucHV0X3N0cmVhbSk7CisgICAgfQorICByZXR1cm4g
dmFsOworfQogCi0gICAgICBlYXNzZXJ0ICghaW5maWxlMCB8fCBpbmZpbGUgPT0gaW5maWxlMCk7
CitJTkxJTkUgdm9pZAorbHJlYWRfc2tpcF93aGl0ZXNwYWNlIChyZWdpc3RlciBscmVhZF9mcmFt
ZSAqZnJhbWUpCit7CisgIGludCBjOworICAvKiB0aGlzIGlzIG9ubHkgY29ycmVjdCBpZiB3ZSBr
bm93IHJlYWQwIGlzIGdvaW5nCisgICAgIHRvIGJlIHJlYWRpbmcgZXhwcmVzc2lvbnMgZnJvbSBz
b3VyY2UuICBPdGhlcgorICAgICByZWFkZXJzIG1pZ2h0IGRvIHNvbWV0aGluZyB3aXRoIGNvbW1l
bnRzIGFuZAorICAgICB3aGl0ZXNwYWNlLiAqLworICAvKiBvbmx5IGJlbmVmaXQgaXMgdG8gYXZv
aWQgY29uZGl0aW9uLWNhc2UgZm9yCisgICAgIGNhdGNoaW5nIGVuZC1vZi1maWxlID8gKi8KICBy
ZWFkX25leHQ6Ci0gICAgICBjID0gUkVBRENIQVI7CisgIGMgPSBSRUFEQ0hBUiAoZnJhbWUpOwog
ICBpZiAoYyA9PSAnOycpCiAgICAgewotCSAgd2hpbGUgKChjID0gUkVBRENIQVIpICE9ICdcbicg
JiYgYyAhPSAtMSk7CisgICAgICB3aGlsZSAoKGMgPSBSRUFEQ0hBUiAoZnJhbWUpKSAhPSAnXG4n
ICYmIGMgIT0gLTEpOwogICAgICAgZ290byByZWFkX25leHQ7CiAgICAgfQogICBpZiAoYyA8IDAp
CiAgICAgewotCSAgdW5iaW5kX3RvIChjb3VudDEsIFFuaWwpOwotCSAgYnJlYWs7CisgICAgICBm
cmFtZS0+cmVhZF9lb2YgPSB0cnVlOwogICAgIH0KIAogICAvKiBJZ25vcmUgd2hpdGVzcGFjZSBo
ZXJlLCBzbyB3ZSBjYW4gZGV0ZWN0IGVvZi4gICovCiAgIGlmIChjID09ICcgJyB8fCBjID09ICdc
dCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xmJyB8fCBjID09ICdccicKICAgICAgIHx8IGMgPT0g
Tk9fQlJFQUtfU1BBQ0UpCiAgICAgZ290byByZWFkX25leHQ7Ci0gICAgICBVTlJFQUQgKGMpOwor
ICBVTlJFQUQgKGZyYW1lLCBjKTsKK30KIAotICAgICAgaWYgKCEgSEFTSF9UQUJMRV9QIChyZWFk
X29iamVjdHNfbWFwKQotCSAgfHwgWEhBU0hfVEFCTEUgKHJlYWRfb2JqZWN0c19tYXApLT5jb3Vu
dCkKLQlyZWFkX29iamVjdHNfbWFwCi0JICA9IG1ha2VfaGFzaF90YWJsZSAoJmhhc2h0ZXN0X2Vx
LCBERUZBVUxUX0hBU0hfU0laRSwgV2Vha19Ob25lKTsKLSAgICAgIGlmICghIEhBU0hfVEFCTEVf
UCAocmVhZF9vYmplY3RzX2NvbXBsZXRlZCkKLQkgIHx8IFhIQVNIX1RBQkxFIChyZWFkX29iamVj
dHNfY29tcGxldGVkKS0+Y291bnQpCi0JcmVhZF9vYmplY3RzX2NvbXBsZXRlZAotCSAgPSBtYWtl
X2hhc2hfdGFibGUgKCZoYXNodGVzdF9lcSwgREVGQVVMVF9IQVNIX1NJWkUsIFdlYWtfTm9uZSk7
Ci0gICAgICBpZiAoIU5JTFAgKFZwdXJpZnlfZmxhZykgJiYgYyA9PSAnKCcpCi0JdmFsID0gcmVh
ZDAgKHJlYWRjaGFyZnVuLCBmYWxzZSk7Ci0gICAgICBlbHNlCi0JewotCSAgaWYgKCFOSUxQIChy
ZWFkZnVuKSkKK3N0YXRpYyBMaXNwX09iamVjdAorcmVhZGV2YWxsb29wIChMaXNwX09iamVjdCBm
cmFtZXB0cikKK3sKKyAgcmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lID0geG1pbnRfcG9pbnRl
ciAoZnJhbWVwdHIpOworICBMaXNwX09iamVjdCB2YWw7CisgIHN0cnVjdCBidWZmZXIgKmIgPSBs
cmVhZF9nZXRfYnVmZmVyIChmcmFtZSk7CisgIExpc3BfT2JqZWN0IGxleF9ib3VuZDsKKyAgLyog
VHJ1ZSBpZiByZWFkaW5nIGFuIGVudGlyZSBidWZmZXIuICAqLworICBMaXNwX09iamVjdCBtYWNy
b2V4cGFuZDsKKyAgYm9vbCBjb21waWxlZCA9IChTVFJJTkdQIChmcmFtZS0+c291cmNlbmFtZSkg
JiYgc3VmZml4X3AgKGZyYW1lLT5zb3VyY2VuYW1lLCAiLmVsYyIpKTsKKyAgYm9vbCBpZ25vcmVf
cmVhZGZ1biA9IE5JTFAgKGZyYW1lLT5yZWFkZnVuKTsKKyAgYm9vbCB1c2VfcmVhZDAgPSBjb21w
aWxlZCB8fCB3aWxsX2R1bXBfcCgpCisgICAgfHwgKGlnbm9yZV9yZWFkZnVuCisgICAgICAgICYm
IChOSUxQIChWbG9hZF9yZWFkX2Z1bmN0aW9uKQorICAgICAgICAgICAgfHwgRVEgKFZsb2FkX3Jl
YWRfZnVuY3Rpb24sIFFyZWFkKSkpOworICBMaXNwX09iamVjdCBwcmV2X1Zsb2FkX3JlYWRfZnVu
Y3Rpb24gPSBWbG9hZF9yZWFkX2Z1bmN0aW9uOworCisgIG1hY3JvZXhwYW5kID0gUWludGVybmFs
X21hY3JvZXhwYW5kX2Zvcl9sb2FkOworCisgIGlmIChOSUxQIChGZmJvdW5kcCAobWFjcm9leHBh
bmQpKSB8fCBjb21waWxlZCkKKyAgICAvKiBEb24ndCBtYWNyb2V4cGFuZCBiZWZvcmUgdGhlIGNv
cnJlc3BvbmRpbmcgZnVuY3Rpb24gaXMgZGVmaW5lZAorICAgICAgIGFuZCBkb24ndCBib3RoZXIg
bWFjcm9leHBhbmRpbmcgaW4gLmVsYyBmaWxlcywgc2luY2UgaXQgc2hvdWxkIGhhdmUKKyAgICAg
ICBiZWVuIGRvbmUgYWxyZWFkeS4gICovCisgICAgbWFjcm9leHBhbmQgPSBRbmlsOworCisgIC8q
IFdlIGFzc3VtZSBTVEFSVCBpcyBuaWwgd2hlbiBpbnB1dCBpcyBub3QgZnJvbSBhIGJ1ZmZlci4g
ICovCisgIGlmICghIE5JTFAgKGZyYW1lLT5zdGFydCkgJiYgIWIpCisgICAgZW1hY3NfYWJvcnQg
KCk7CisKKyAgc3BlY2JpbmQgKFFzdGFuZGFyZF9pbnB1dCwgUXJlYWRlcl9pbnB1dF9zdHJlYW0p
OworCisgIC8qIElmIGxleGljYWwgYmluZGluZyBpcyBhY3RpdmUgKGVpdGhlciBiZWNhdXNlIGl0
IHdhcyBzcGVjaWZpZWQgaW4KKyAgICAgdGhlIGZpbGUncyBoZWFkZXIsIG9yIHZpYSBhIGJ1ZmZl
ci1sb2NhbCB2YXJpYWJsZSksIGNyZWF0ZSBhbiBlbXB0eQorICAgICBsZXhpY2FsIGVudmlyb25t
ZW50LCBvdGhlcndpc2UsIHR1cm4gb2ZmIGxleGljYWwgYmluZGluZy4gICovCisgIGxleF9ib3Vu
ZCA9IGZpbmRfc3ltYm9sX3ZhbHVlIChRbGV4aWNhbF9iaW5kaW5nKTsKKyAgc3BlY2JpbmQgKFFp
bnRlcm5hbF9pbnRlcnByZXRlcl9lbnZpcm9ubWVudCwKKyAgICAgICAgICAgIChOSUxQIChsZXhf
Ym91bmQpIHx8IEJBU0VfRVEgKGxleF9ib3VuZCwgUXVuYm91bmQpCisgICAgICAgICAgICAgPyBR
bmlsIDogbGlzdDEgKFF0KSkpOworICBzcGVjYmluZCAoUW1hY3JvZXhwX19keW52YXJzLCBWbWFj
cm9leHBfX2R5bnZhcnMpOworCisgIGxvYWRoaXN0X2luaXRpYWxpemUgKGZyYW1lLT5zb3VyY2Vu
YW1lKTsKKyAgaWYgKGIgIT0gTlVMTCkKKyAgICBmcmFtZS0+d2hvbGVfYnVmZmVyID0KKyAgICAg
IHNldHVwX2J1ZmZlcl9mb3JfcmVhZGV2YWxsb29wIChmcmFtZSwgZnJhbWUtPnN0YXJ0LCBmcmFt
ZS0+ZW5kKQorICAgICAgfHwgZnJhbWUtPndob2xlX2J1ZmZlcjsKKworICBscmVhZF9pbml0X2R5
bmFtaWNfZnJhbWUgKGZyYW1lKTsKKworICB3aGlsZSAoIWZyYW1lLT5yZWFkX2VvZikKICAgICB7
Ci0JICAgICAgdmFsID0gY2FsbG4gKHJlYWRmdW4sIHJlYWRjaGFyZnVuKTsKKyAgICAgIGZyYW1l
LT5vYmplY3RzX21hcCA9IEZjbHJoYXNoIChmcmFtZS0+b2JqZWN0c19tYXApOworICAgICAgZnJh
bWUtPm9iamVjdHNfY29tcGxldGVkID0gRmNscmhhc2ggKGZyYW1lLT5vYmplY3RzX2NvbXBsZXRl
ZCk7CiAKLQkgICAgICAvKiBJZiBSRUFEQ0hBUkZVTiBoYXMgc2V0IHBvaW50IHRvIFpWLCB3ZSBz
aG91bGQKLQkgICAgICAgICBzdG9wIHJlYWRpbmcsIGV2ZW4gaWYgdGhlIGZvcm0gcmVhZCBzZXRz
IHBvaW50Ci0JCSB0byBhIGRpZmZlcmVudCB2YWx1ZSB3aGVuIGV2YWx1YXRlZC4gICovCi0JICAg
ICAgaWYgKEJVRkZFUlAgKHJlYWRjaGFyZnVuKSkKKyAgICAgIGlmIChiKQorICAgICAgICBwcmVw
YXJlX2J1ZmZlcl9mb3JfaW50ZXJydXB0aWJsZV9yZWFkIChmcmFtZSk7CisKKyAgICAgIC8qIEhh
bmRsZSB0aGUgbW9zdCBjb21tb24gY2FzZSBmaXJzdCAqLworICAgICAgLyogbm90IHN1cmUgd2h5
IHRoZSBWcHVyaWZ5X2ZsYWcvd2lsbF9kdW1wX3AgY2FzZSBpcyBzcGVjaWFsICovCisgICAgICBp
ZiAodXNlX3JlYWQwKQogICAgICAgICB7Ci0JCSAgc3RydWN0IGJ1ZmZlciAqYnVmID0gWEJVRkZF
UiAocmVhZGNoYXJmdW4pOwotCQkgIGlmIChCVUZfUFQgKGJ1ZikgPT0gQlVGX1pWIChidWYpKQot
CQkgICAgY29udGludWVfcmVhZGluZ19wID0gMDsKKyAgICAgICAgLyogYXZvaWQgY29uZGl0aW9u
IGNhc2UgKi8KKyAgICAgICAgICBscmVhZF9za2lwX3doaXRlc3BhY2UgKGZyYW1lKTsKKyAgICAg
ICAgICBpZiAoZnJhbWUtPnJlYWRfZW9mKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBs
cmVhZF91bndpbmRfZm9yX2V2YWwgKGZyYW1lKTsKKyAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CisgICAgICAgICAgdmFsID0gcmVhZDAgKGZyYW1lKTsKKyAgICAgICAgICBmcmFt
ZS0+bmV4cHJzKys7CiAgICAgICAgIH0KLQkgIGVsc2UgaWYgKCEgTklMUCAoVmxvYWRfcmVhZF9m
dW5jdGlvbikpCi0JICAgIHZhbCA9IGNhbGxuIChWbG9hZF9yZWFkX2Z1bmN0aW9uLCByZWFkY2hh
cmZ1bik7CiAgICAgICBlbHNlCi0JICAgIHZhbCA9IHJlYWRfaW50ZXJuYWxfc3RhcnQgKHJlYWRj
aGFyZnVuLCBRbmlsLCBRbmlsLCBmYWxzZSk7CisgICAgICAgIHsKKyAgICAgICAgICAvKiByZWFk
IHN0b3BzIGJ5IHNpZ25hbGluZyBlbmQtb2YtZmlsZQorICAgICAgICAgICAgIE11c3Qgbm90IHJl
dHVybiBhIHZhbHVlIGFuZCBzZXQgcmVhZF9lb2YhCisgICAgICAgICAgICovCisgICAgICAgICAg
dmFsID0gaW50ZXJuYWxfY29uZGl0aW9uX2Nhc2VfMSAobm9uc3RhbmRhcmRfcmVhZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX21pbnRfcHRyIChmcmFt
ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdDEgKFFl
bmRfb2ZfZmlsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bHJlYWRfc2V0X3JlYWRfZW9mKTsKKyAgICAgICAgICBpZiAoZnJhbWUtPnJlYWRfZW9mKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBlYXNzZXJ0ICghVU5JTklUX1NQRUNQRExfUkVGIChm
cmFtZS0+ZHluYW1pY19mcmFtZSkpOworICAgICAgICAgICAgICBscmVhZF91bndpbmRfZm9yX2V2
YWwgKGZyYW1lKTsKKyAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAv
KiBFbXB0eSBoYXNoZXMgY2FuIGJlIHJldXNlZDsgb3RoZXJ3aXNlLCByZXNldCBvbiBuZXh0IGNh
bGwuICAqLwotICAgICAgaWYgKEhBU0hfVEFCTEVfUCAocmVhZF9vYmplY3RzX21hcCkKLQkgICYm
IFhIQVNIX1RBQkxFIChyZWFkX29iamVjdHNfbWFwKS0+Y291bnQgPiAwKQotCXJlYWRfb2JqZWN0
c19tYXAgPSBRbmlsOwotICAgICAgaWYgKEhBU0hfVEFCTEVfUCAocmVhZF9vYmplY3RzX2NvbXBs
ZXRlZCkKLQkgICYmIFhIQVNIX1RBQkxFIChyZWFkX29iamVjdHNfY29tcGxldGVkKS0+Y291bnQg
PiAwKQotCXJlYWRfb2JqZWN0c19jb21wbGV0ZWQgPSBRbmlsOworICAgICAgICAgIGZyYW1lLT5u
ZXhwcnMrKzsKKyAgICAgICAgfQorCiAKLSAgICAgIGlmICghTklMUCAoc3RhcnQpICYmIGNvbnRp
bnVlX3JlYWRpbmdfcCkKLQlzdGFydCA9IEZwb2ludF9tYXJrZXIgKCk7CisgICAgICBpZiAoYiAm
JiAhZnJhbWUtPnJlYWRfZW9mKQorICAgICAgICB7CisgICAgICAgICAgZnJhbWUtPnN0YXJ0ID0g
RnBvaW50X21hcmtlciAoKTsKKyAgICAgICAgICBmcmFtZS0+Y2hhcl9vZmZzZXQgPSBYTUFSS0VS
IChmcmFtZS0+c3RhcnQpLT5jaGFycG9zOworICAgICAgICAgIGZyYW1lLT5ieXRlX29mZnNldCA9
IFhNQVJLRVIgKGZyYW1lLT5zdGFydCktPmJ5dGVwb3M7CisgICAgICAgIH0KIAogICAgICAgLyog
UmVzdG9yZSBzYXZlZCBwb2ludCBhbmQgQkVHVi4gICovCi0gICAgICB1bmJpbmRfdG8gKGNvdW50
MSwgUW5pbCk7CisgICAgICBlYXNzZXJ0ICghVU5JTklUX1NQRUNQRExfUkVGIChmcmFtZS0+ZHlu
YW1pY19mcmFtZSkpOworICAgICAgbHJlYWRfdW53aW5kX2Zvcl9ldmFsIChmcmFtZSk7CiAKICAg
ICAgIC8qIE5vdyBldmFsIHdoYXQgd2UganVzdCByZWFkLiAgKi8KICAgICAgIGlmICghTklMUCAo
bWFjcm9leHBhbmQpKQotICAgICAgICB2YWwgPSByZWFkZXZhbGxvb3BfZWFnZXJfZXhwYW5kX2V2
YWwgKHZhbCwgbWFjcm9leHBhbmQpOworICAgICAgICBmcmFtZS0+dmFsdWUgPSByZWFkZXZhbGxv
b3BfZWFnZXJfZXhwYW5kX2V2YWwgKHZhbCwgbWFjcm9leHBhbmQpOwogICAgICAgZWxzZQotICAg
ICAgICB2YWwgPSBldmFsX3N1YiAodmFsKTsKKyAgICAgICAgZnJhbWUtPnZhbHVlID0gZXZhbF9z
dWIgKHZhbCk7CisKKyAgICAgIGxyZWFkX3Vud2luZF9mb3JfZXZhbCAoZnJhbWUpOworCisgICAg
ICAvKiBjaGVjayBpZiB0aGUgZXZhbHVhdGlvbiBhZmZlY3RlZCB3aGV0aGVyIHdlIGNhbiB1c2Ug
dGhlCisgICAgICAgICBzaG9ydGN1dCB0byByZWFkMCAqLworICAgICAgaWYgKCFFUSAoVmxvYWRf
cmVhZF9mdW5jdGlvbiwgcHJldl9WbG9hZF9yZWFkX2Z1bmN0aW9uKSkKKyAgICAgICAgeworICAg
ICAgICAgIHByZXZfVmxvYWRfcmVhZF9mdW5jdGlvbiA9IFZsb2FkX3JlYWRfZnVuY3Rpb247Cisg
ICAgICAgICAgdXNlX3JlYWQwID0gY29tcGlsZWQgfHwgd2lsbF9kdW1wX3AgKCkKKyAgICAgICAg
ICAgIHx8IChpZ25vcmVfcmVhZGZ1bgorICAgICAgICAgICAgICAgICYmIChOSUxQIChWbG9hZF9y
ZWFkX2Z1bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICB8fCBFUSAoVmxvYWRfcmVhZF9mdW5j
dGlvbiwgUXJlYWQpKSk7CisgICAgICAgIH0KIAotICAgICAgaWYgKHByaW50ZmxhZykKKyAgICAg
IGlmIChmcmFtZS0+cHJpbnRmbGFnKQogICAgICAgICB7Ci0JICBWdmFsdWVzID0gRmNvbnMgKHZh
bCwgVnZhbHVlcyk7CisgICAgICAgICAgVnZhbHVlcyA9IEZjb25zIChmcmFtZS0+dmFsdWUsIFZ2
YWx1ZXMpOwogICAgICAgICAgIGlmIChFUSAoVnN0YW5kYXJkX291dHB1dCwgUXQpKQotCSAgICBG
cHJpbjEgKHZhbCwgUW5pbCwgUW5pbCk7CisgICAgICAgICAgICBGcHJpbjEgKGZyYW1lLT52YWx1
ZSwgUW5pbCwgUW5pbCk7CiAgICAgICAgICAgZWxzZQotCSAgICBGcHJpbnQgKHZhbCwgUW5pbCk7
CisgICAgICAgICAgICBGcHJpbnQgKGZyYW1lLT52YWx1ZSwgUW5pbCk7CiAgICAgICAgIH0KIAot
ICAgICAgZmlyc3Rfc2V4cCA9IDA7CiAgICAgfQorICByZXR1cm4gZnJhbWUtPnZhbHVlOworfQog
Ci0gIGJ1aWxkX2xvYWRfaGlzdG9yeSAoc291cmNlbmFtZSwKLQkJICAgICAgaW5maWxlMCB8fCB3
aG9sZV9idWZmZXIpOwogCi0gIHVuYmluZF90byAoY291bnQsIFFuaWwpOworc3RhdGljIExpc3Bf
T2JqZWN0CitlbnRlcl9idWZmZXJfcmVhZGV2YWxsb29wIChMaXNwX09iamVjdCBidWZmZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBMaXNwX09iamVjdCBwcmludGZsYWcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBMaXNwX09iamVjdCBmaWxlbmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIExpc3BfT2JqZWN0IGRvX2FsbG93X3ByaW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTGlzcF9PYmplY3Qgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBMaXNwX09iamVjdCBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXNwX09iamVj
dCByZWFkX2Z1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3aG9sZV9i
dWZmZXIpCit7CisgIExpc3BfT2JqZWN0IHRlbSwgYnVmLCB2YWwgPSBRbmlsOworICBzcGVjcGRs
X3JlZiBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7CisgIGxyZWFkX2ZyYW1lIHRoaXNfZnJhbWUg
PSBJTklUX0xSRUFEX0ZSQU1FKCk7CisgIExpc3BfT2JqZWN0IGZ1bGxfbmFtZTsKKyAgaWYgKE5J
TFAgKGJ1ZmZlcikpCisgICAgYnVmID0gRmN1cnJlbnRfYnVmZmVyICgpOworICBlbHNlCisgICAg
YnVmID0gRmdldF9idWZmZXIgKGJ1ZmZlcik7CisgIGlmIChOSUxQIChidWYpKQorICAgIGVycm9y
ICgiTm8gc3VjaCBidWZmZXIiKTsKKworICBpZiAoTklMUCAocHJpbnRmbGFnKSAmJiBOSUxQIChk
b19hbGxvd19wcmludCkpCisgICAgdGVtID0gUXN5bWJvbHA7CisgIGVsc2UKKyAgICB0ZW0gPSBw
cmludGZsYWc7CisgIGlmIChOSUxQIChmaWxlbmFtZSkpCisgICAgZmlsZW5hbWUgPSBCVkFSIChY
QlVGRkVSIChidWYpLCBmaWxlbmFtZSk7CisgIGlmIChOSUxQIChGZmlsZV9uYW1lX2Fic29sdXRl
X3AgKGZpbGVuYW1lKSkpCisgICAgZnVsbF9uYW1lID0gRmV4cGFuZF9maWxlX25hbWUgKGZpbGVu
YW1lLCBRbmlsKTsKKyAgZWxzZQorICAgIGZ1bGxfbmFtZSA9IGZpbGVuYW1lOworICBzcGVjYmlu
ZCAoUWV2YWxfYnVmZmVyX2xpc3QsIEZjb25zIChidWYsIFZldmFsX2J1ZmZlcl9saXN0KSk7Cisg
IHNwZWNiaW5kIChRc3RhbmRhcmRfb3V0cHV0LCB0ZW0pOworICB0aGlzX2ZyYW1lLmxvb3BfZHlu
YW1pY19mcmFtZSA9IFNQRUNQRExfSU5ERVggKCk7CisgIGluaXRfbHJlYWRfaW5wdXRfZnJvbV9z
dHJlYW0gKCZ0aGlzX2ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZm
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBlbmQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCB0cnVlLCBOVUxMLFFuaWwpOworICBpbml0
X2xyZWFkX2V2YWxfcGFyYW1zKCZ0aGlzX2ZyYW1lLCBmdWxsX25hbWUsIGZpbGVuYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlYWRfZnVuY3Rpb24sIHdob2xlX2J1ZmZlcik7CisgIC8q
IG5vdGUgYXQgdGhpcyBzdGFnZSwgd2hvbGVfYnVmZmVyIGlzIGRldGVybWluZWQgYnkgdGhlIGNh
bGxlcgorICAgICB3YW50cyB0byBzZXQgbGV4aWNhbCBzY29waW5nIGJhc2VkIG9uIHRoZSBidWZm
ZXIgY29udGVudHMKKyAgICAgcmVhZGV2YWxsb29wIHdpbGwgc2V0IGl0IGZvciB0aGUgc2FrZSBv
ZiByZWNvcmRpbmcgbG9hZCBoaXN0b3J5CisgICAgIGJhc2VkIG9uIHRoZSBzdGFydCBhbmQgZW5k
LCBldmVuIGlmIHRoZSBjYWxsZXIgZG9lcyBub3QKKyAgICAgbWFrZSBpdCBleHBsaWNpdC4KKyAg
ICovCisgIC8qIGZyYW1lLT5yZWFkb25lY2hhciBtdXN0IGJlIHNldCB0byB1c2UgUkVBRENIQVIs
CisgICAgIGJ1dCBhY3RpdmF0ZV9scmVhZF9mcmFtZSBhbHRlcnMgdGhlIHNwZWNwZGwKKyAgICAg
bWF5IGFmZmVjdHMgdGhlIG9yZGVyIG9mIHRoZSB1bndpbmQtcHJvdGVjdHMgdmVyc3VzCisgICAg
IHByZS1yZWZhY3RvcmluZyAqLworICBpZiAod2hvbGVfYnVmZmVyKQorICAgIHsKKyAgICAgIHJl
Y29yZF91bndpbmRfcHJvdGVjdF9leGN1cnNpb24gKCk7CisgICAgICBCVUZfVEVNUF9TRVRfUFQg
KFhCVUZGRVIgKGJ1ZiksIEJVRl9CRUdWIChYQlVGRkVSIChidWYpKSk7CisgICAgICBzcGVjYmlu
ZCAoUWxleGljYWxfYmluZGluZywgZ2V0X2xleGljYWxfYmluZGluZyAoJnRoaXNfZnJhbWUsIGJ1
ZikpOworICAgICAgQlVGX1RFTVBfU0VUX1BUIChYQlVGRkVSIChidWYpLCBCVUZfQkVHViAoWEJV
RkZFUiAoYnVmKSkpOworICAgIH0KKyAgYWN0aXZhdGVfbHJlYWRfZnJhbWUgKCZ0aGlzX2ZyYW1l
LCBMUkVBRF9GUkFNRV9NVUxUSVBMRSk7CisgIHZhbCA9IGludGVybmFsX2NvbmRpdGlvbl9jYXNl
XzEgKHJlYWRldmFsbG9vcF9lb2ZfdHJhbXBvbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWFrZV9taW50X3B0ciAoJnRoaXNfZnJhbWUpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaXN0MSAoUXQpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBiYXNlX2ludGVycnVwdF9lcnJvcl9oYW5kbGVyKTsKKyAgcmV0dXJuIHVuYmlu
ZF90byAoY291bnQsIHZhbCk7CiB9CiAKIERFRlVOICgiZXZhbC1idWZmZXIiLCBGZXZhbF9idWZm
ZXIsIFNldmFsX2J1ZmZlciwgMCwgNSwgIiIsCkBAIC0yNjA3LDQ5ICs0MTIxLDE5IEBAIERFRlVO
ICgiZXZhbC1idWZmZXIiLCBGZXZhbF9idWZmZXIsIFNldmFsX2J1ZmZlciwgMCwgNSwgIiIsCiAg
ZXZhbHVhdGVkIGNvZGUgc2hvdWxkIHdvcmsgbm9ybWFsbHkgZXZlbiBpZiBQUklOVEZMQUcgaXMg
bmlsLCBpbgogIHdoaWNoIGNhc2UgdGhlIG91dHB1dCBpcyBkaXNwbGF5ZWQgaW4gdGhlIGVjaG8g
YXJlYS4KIAotVGhpcyBmdW5jdGlvbiBpZ25vcmVzIHRoZSBnbG9iYWwgdmFsdWUgb2YgdGhlIGBs
ZXhpY2FsLWJpbmRpbmcnCi12YXJpYWJsZS4gIEluc3RlYWQgaXQgd2lsbCBoZWVkIHRoZSBidWZm
ZXItbG9jYWwgdmFsdWUgb2YgdGhhdAotdmFyaWFibGUgYW5kIGFueQorVGhpcyBmdW5jdGlvbiBp
Z25vcmVzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBgbGV4aWNhbC1iaW5kaW5nJwordmFyaWFi
bGUuICBJbnN0ZWFkIGl0IHdpbGwgaGVlZCBhbnkKICAgLSotIGxleGljYWwtYmluZGluZzogdCAt
Ki0KLXNldHRpbmdzIGluIHRoZSBidWZmZXI7IGlmIHRoZXJlIGlzIG5vIHN1Y2ggc2V0dGluZywg
YW5kIHRoZQotYnVmZmVyLWxvY2FsIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBpcyBuaWwsIHRoZSBi
dWZmZXIgd2lsbCBiZQotZXZhbHVhdGVkIHdpdGggdGhlIHZhbHVlIG9mIGBsZXhpY2FsIGJpbmRp
bmcnIGVxdWFsIHRvIGl0cwotdG9wLWxldmVsIGRlZmF1bHQgdmFsdWUsIGFzIHJldHVybmVkIGJ5
IGBkZWZhdWx0LXRvcGxldmVsLXZhbHVlJy4KK3NldHRpbmdzIGluIHRoZSBidWZmZXIsIGFuZCBp
ZiB0aGVyZSBpcyBubyBzdWNoIHNldHRpbmcsIHRoZSBidWZmZXIKK3dpbGwgYmUgZXZhbHVhdGVk
IHdpdGhvdXQgbGV4aWNhbCBiaW5kaW5nLgogCiBUaGlzIGZ1bmN0aW9uIHByZXNlcnZlcyB0aGUg
cG9zaXRpb24gb2YgcG9pbnQuICAqLykKICAgKExpc3BfT2JqZWN0IGJ1ZmZlciwgTGlzcF9PYmpl
Y3QgcHJpbnRmbGFnLCBMaXNwX09iamVjdCBmaWxlbmFtZSwKICAgIExpc3BfT2JqZWN0IHVuaWJ5
dGUsIExpc3BfT2JqZWN0IGRvX2FsbG93X3ByaW50KQogewotICBzcGVjcGRsX3JlZiBjb3VudCA9
IFNQRUNQRExfSU5ERVggKCk7Ci0gIExpc3BfT2JqZWN0IHRlbSwgYnVmOwotCi0gIGlmIChOSUxQ
IChidWZmZXIpKQotICAgIGJ1ZiA9IEZjdXJyZW50X2J1ZmZlciAoKTsKLSAgZWxzZQotICAgIGJ1
ZiA9IEZnZXRfYnVmZmVyIChidWZmZXIpOwotICBpZiAoTklMUCAoYnVmKSkKLSAgICBlcnJvciAo
Ik5vIHN1Y2ggYnVmZmVyIik7Ci0KLSAgaWYgKE5JTFAgKHByaW50ZmxhZykgJiYgTklMUCAoZG9f
YWxsb3dfcHJpbnQpKQotICAgIHRlbSA9IFFzeW1ib2xwOwotICBlbHNlCi0gICAgdGVtID0gcHJp
bnRmbGFnOwotCi0gIGlmIChOSUxQIChmaWxlbmFtZSkpCi0gICAgZmlsZW5hbWUgPSBCVkFSIChY
QlVGRkVSIChidWYpLCBmaWxlbmFtZSk7Ci0KLSAgc3BlY2JpbmQgKFFldmFsX2J1ZmZlcl9saXN0
LCBGY29ucyAoYnVmLCBWZXZhbF9idWZmZXJfbGlzdCkpOwotICBzcGVjYmluZCAoUXN0YW5kYXJk
X291dHB1dCwgdGVtKTsKLSAgcmVjb3JkX3Vud2luZF9wcm90ZWN0X2V4Y3Vyc2lvbiAoKTsKLSAg
QlVGX1RFTVBfU0VUX1BUIChYQlVGRkVSIChidWYpLCBCVUZfQkVHViAoWEJVRkZFUiAoYnVmKSkp
OwotICAvKiBEb24ndCBlbWl0IGEgd2FybmluZyBhYm91dCAnbGV4aWNhbC1iaW5kaW5nJyBpZiBp
dCBhbHJlYWR5IGhhcyBhCi0gICAgIGxvY2FsIGJpbmRpbmcgaW4gdGhlIGJ1ZmZlci4gICovCi0g
IGlmIChOSUxQIChGbG9jYWxfdmFyaWFibGVfcCAoUWxleGljYWxfYmluZGluZywgYnVmKSkpCi0g
ICAgc3BlY2JpbmQgKFFsZXhpY2FsX2JpbmRpbmcsIGdldF9sZXhpY2FsX2JpbmRpbmcgKGJ1Ziwg
YnVmKSk7Ci0gIEJVRl9URU1QX1NFVF9QVCAoWEJVRkZFUiAoYnVmKSwgQlVGX0JFR1YgKFhCVUZG
RVIgKGJ1ZikpKTsKLSAgcmVhZGV2YWxsb29wIChidWYsIDAsIGZpbGVuYW1lLAotCQkhTklMUCAo
cHJpbnRmbGFnKSwgdW5pYnl0ZSwgUW5pbCwgUW5pbCwgUW5pbCk7Ci0gIHJldHVybiB1bmJpbmRf
dG8gKGNvdW50LCBRbmlsKTsKKyAgcmV0dXJuIGVudGVyX2J1ZmZlcl9yZWFkZXZhbGxvb3AgKGJ1
ZmZlciwgcHJpbnRmbGFnLCBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvX2FsbG93X3ByaW50LCBRbmlsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUW5pbCwgUW5pbCwgdHJ1ZSk7CiB9CiAKIERFRlVOICgiZXZhbC1yZWdpb24iLCBG
ZXZhbF9yZWdpb24sIFNldmFsX3JlZ2lvbiwgMiwgNCwgInIiLApAQCAtMjY2NywyOCArNDE1MSw0
OCBAQCBERUZVTiAoImV2YWwtcmVnaW9uIiwgRmV2YWxfcmVnaW9uLCBTZXZhbF9yZWdpb24sIDIs
IDQsICJyIiwKIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgbW92ZSBwb2ludC4gICovKQogICAoTGlz
cF9PYmplY3Qgc3RhcnQsIExpc3BfT2JqZWN0IGVuZCwgTGlzcF9PYmplY3QgcHJpbnRmbGFnLCBM
aXNwX09iamVjdCByZWFkX2Z1bmN0aW9uKQogewotICAvKiBGSVhNRTogRG8gdGhlIGV2YWwtc2V4
cC1hZGQtZGVmdmFycyBkYW5jZSEgICovCi0gIHNwZWNwZGxfcmVmIGNvdW50ID0gU1BFQ1BETF9J
TkRFWCAoKTsKLSAgTGlzcF9PYmplY3QgdGVtLCBjYnVmOworICByZXR1cm4gZW50ZXJfYnVmZmVy
X3JlYWRldmFsbG9vcCAoUW5pbCwgcHJpbnRmbGFnLCBRbmlsLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUW5pbCwgc3RhcnQsIGVuZCwgcmVhZF9mdW5jdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKK30KIAotICBjYnVmID0gRmN1
cnJlbnRfYnVmZmVyICgpOwogCi0gIGlmIChOSUxQIChwcmludGZsYWcpKQotICAgIHRlbSA9IFFz
eW1ib2xwOworDAorc3RhdGljIExpc3BfT2JqZWN0CitlbnRlcl9yZWFkIChMaXNwX09iamVjdCBz
dHJlYW0sIExpc3BfT2JqZWN0IHN0YXJ0LCBMaXNwX09iamVjdCBlbmQsCisgICAgICAgICAgICBi
b29sIGxvY2F0ZV9zeW1zLCBwdHJkaWZmX3QgKmNoYXJfb2Zmc2V0KQoreworICBpZiAoIWhhbmRs
ZV9yZWFkX3N0cmVhbV9kZWZhdWx0cyAoJnN0cmVhbSkpCisgICAgcmV0dXJuIHN0cmVhbTsKKyAg
bHJlYWRfZnJhbWUgdGhpc19mcmFtZSA9IElOSVRfTFJFQURfRlJBTUUoKTsKKyAgdGhpc19mcmFt
ZS5sb29wX2R5bmFtaWNfZnJhbWUgPSBTUEVDUERMX0lOREVYICgpOworICBpbml0X2xyZWFkX2lu
cHV0X2Zyb21fc3RyZWFtICgmdGhpc19mcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgZW5k
LCBsb2NhdGVfc3ltcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICBO
VUxMLCBRbmlsKTsKKyAgYWN0aXZhdGVfbHJlYWRfZnJhbWUgKCZ0aGlzX2ZyYW1lLCBMUkVBRF9G
UkFNRV9TSU5HTEUpOworICBscmVhZF9pbml0X2R5bmFtaWNfZnJhbWUgKCZ0aGlzX2ZyYW1lKTsK
KyAgaWYgKGNoYXJfb2Zmc2V0KQorICAgICpjaGFyX29mZnNldCA9IHRoaXNfZnJhbWUuY2hhcl9v
ZmZzZXQ7CisgIExpc3BfT2JqZWN0IGRhdGEgPSBRbmlsOworICAvKiBGcmVhZCBtYXkgYmUgY2Fs
bGVkIHdoaWxlIGxvYWRpbmcgdGhlIGR1bXAgZmlsZSAqLworICBpZiAoaW5pdGlhbGl6ZWQgfHwg
d2lsbF9kdW1wX3AoKSkKKyAgICB7CisgICAgICBkYXRhID0gaW50ZXJuYWxfY29uZGl0aW9uX2Nh
c2VfMSAoY2FsbF9yZWFkMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYWtlX21pbnRfcHRyICgmdGhpc19mcmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUWVycm9yX2R1cmluZ19pbnRlcnJ1cHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9pbnRlcnJ1cHRfZXJyb3JfaGFuZGxlcik7Cisg
ICAgfQogICBlbHNlCi0gICAgdGVtID0gcHJpbnRmbGFnOwotICBzcGVjYmluZCAoUXN0YW5kYXJk
X291dHB1dCwgdGVtKTsKLSAgc3BlY2JpbmQgKFFldmFsX2J1ZmZlcl9saXN0LCBGY29ucyAoY2J1
ZiwgVmV2YWxfYnVmZmVyX2xpc3QpKTsKLQotICAvKiBgcmVhZGV2YWxsb29wJyBjYWxscyBmdW5j
dGlvbnMgd2hpY2ggY2hlY2sgdGhlIHR5cGUgb2Ygc3RhcnQgYW5kIGVuZC4gICovCi0gIHJlYWRl
dmFsbG9vcCAoY2J1ZiwgMCwgQlZBUiAoWEJVRkZFUiAoY2J1ZiksIGZpbGVuYW1lKSwKLQkJIU5J
TFAgKHByaW50ZmxhZyksIFFuaWwsIHJlYWRfZnVuY3Rpb24sCi0JCXN0YXJ0LCBlbmQpOwotCi0g
IHJldHVybiB1bmJpbmRfdG8gKGNvdW50LCBRbmlsKTsKKyAgICB7CisgICAgICBkYXRhID0gcmVh
ZDAgKCZ0aGlzX2ZyYW1lKTsKKyAgICB9CisgIGlmIChjaGFyX29mZnNldCkKKyAgICAqY2hhcl9v
ZmZzZXQgPSB0aGlzX2ZyYW1lLmNoYXJfb2Zmc2V0OworICAgdW5iaW5kX3RvICh0aGlzX2ZyYW1l
Lmxvb3BfZHluYW1pY19mcmFtZSwgUW5pbCk7CisgICByZXR1cm4gZGF0YTsKIH0KIAotDAogREVG
VU4gKCJyZWFkIiwgRnJlYWQsIFNyZWFkLCAwLCAxLCAwLAogICAgICAgIGRvYzogLyogUmVhZCBv
bmUgTGlzcCBleHByZXNzaW9uIGFzIHRleHQgZnJvbSBTVFJFQU0sIHJldHVybiBhcyBMaXNwIG9i
amVjdC4KIElmIFNUUkVBTSBpcyBuaWwsIHVzZSB0aGUgdmFsdWUgb2YgYHN0YW5kYXJkLWlucHV0
JyAod2hpY2ggc2VlKS4KQEAgLTI3MDIsMTggKzQyMDYsNyBAQCBERUZVTiAoInJlYWQiLCBGcmVh
ZCwgU3JlYWQsIDAsIDEsIDAsCiAgICAgc3RhbmRhcmQgaW5wdXQgaW4gYmF0Y2ggbW9kZSkuICAq
LykKICAgKExpc3BfT2JqZWN0IHN0cmVhbSkKIHsKLSAgaWYgKE5JTFAgKHN0cmVhbSkpCi0gICAg
c3RyZWFtID0gVnN0YW5kYXJkX2lucHV0OwotICBpZiAoRVEgKHN0cmVhbSwgUXQpKQotICAgIHN0
cmVhbSA9IFFyZWFkX2NoYXI7Ci0gIGlmIChFUSAoc3RyZWFtLCBRcmVhZF9jaGFyKSkKLSAgICAv
KiBGSVhNRTogPyEgVGhpcyBpcyB1c2VkIHdoZW4gdGhlIHJlYWRlciBpcyBjYWxsZWQgZnJvbSB0
aGUKLSAgICAgICBtaW5pYnVmZmVyIHdpdGhvdXQgYSBzdHJlYW0sIGFzIGluIChyZWFkKS4gIEJ1
dCBpcyB0aGlzIGZlYXR1cmUKLSAgICAgICBldmVyIHVzZWQsIGFuZCBpZiBzbywgd2h5PyAgSU9X
LCB3aWxsIGFueXRoaW5nIGJyZWFrIGlmIHRoaXMKLSAgICAgICBmZWF0dXJlIGlzIHJlbW92ZWQg
IT8gICovCi0gICAgcmV0dXJuIGNhbGxuIChRcmVhZF9taW5pYnVmZmVyLCBidWlsZF9zdHJpbmcg
KCJMaXNwIGV4cHJlc3Npb246ICIpKTsKLQotICByZXR1cm4gcmVhZF9pbnRlcm5hbF9zdGFydCAo
c3RyZWFtLCBRbmlsLCBRbmlsLCBmYWxzZSk7CisgIHJldHVybiBlbnRlcl9yZWFkIChzdHJlYW0s
IFFuaWwsIFFuaWwsIGZhbHNlLCBOVUxMKTsKIH0KIAogREVGVU4gKCJyZWFkLXBvc2l0aW9uaW5n
LXN5bWJvbHMiLCBGcmVhZF9wb3NpdGlvbmluZ19zeW1ib2xzLApAQCAtMjczMiwxNSArNDIyNSw3
IEBAIERFRlVOICgicmVhZC1wb3NpdGlvbmluZy1zeW1ib2xzIiwgRnJlYWRfcG9zaXRpb25pbmdf
c3ltYm9scywKICAgICBzdGFuZGFyZCBpbnB1dCBpbiBiYXRjaCBtb2RlKS4gICovKQogICAoTGlz
cF9PYmplY3Qgc3RyZWFtKQogewotICBpZiAoTklMUCAoc3RyZWFtKSkKLSAgICBzdHJlYW0gPSBW
c3RhbmRhcmRfaW5wdXQ7Ci0gIGlmIChFUSAoc3RyZWFtLCBRdCkpCi0gICAgc3RyZWFtID0gUXJl
YWRfY2hhcjsKLSAgaWYgKEVRIChzdHJlYW0sIFFyZWFkX2NoYXIpKQotICAgIC8qIEZJWE1FOiA/
ISBXaGVuIGlzIHRoaXMgdXNlZCAhPyAgKi8KLSAgICByZXR1cm4gY2FsbG4gKFFyZWFkX21pbmli
dWZmZXIsIGJ1aWxkX3N0cmluZyAoIkxpc3AgZXhwcmVzc2lvbjogIikpOwotCi0gIHJldHVybiBy
ZWFkX2ludGVybmFsX3N0YXJ0IChzdHJlYW0sIFFuaWwsIFFuaWwsIHRydWUpOworICByZXR1cm4g
ZW50ZXJfcmVhZCAoc3RyZWFtLCBRbmlsLCBRbmlsLCB0cnVlLCBOVUxMKTsKIH0KIAogREVGVU4g
KCJyZWFkLWZyb20tc3RyaW5nIiwgRnJlYWRfZnJvbV9zdHJpbmcsIFNyZWFkX2Zyb21fc3RyaW5n
LCAxLCAzLCAwLApAQCAtMjc1NCw5MiArNDIzOSwxOTkgQEAgREVGVU4gKCJyZWFkLWZyb20tc3Ry
aW5nIiwgRnJlYWRfZnJvbV9zdHJpbmcsIFNyZWFkX2Zyb21fc3RyaW5nLCAxLCAzLCAwLAogICAo
TGlzcF9PYmplY3Qgc3RyaW5nLCBMaXNwX09iamVjdCBzdGFydCwgTGlzcF9PYmplY3QgZW5kKQog
ewogICBMaXNwX09iamVjdCByZXQ7CisgIHB0cmRpZmZfdCBwb3M7CiAgIENIRUNLX1NUUklORyAo
c3RyaW5nKTsKLSAgLyogYHJlYWRfaW50ZXJuYWxfc3RhcnQnIHNldHMgYHJlYWRfZnJvbV9zdHJp
bmdfaW5kZXgnLiAgKi8KLSAgcmV0ID0gcmVhZF9pbnRlcm5hbF9zdGFydCAoc3RyaW5nLCBzdGFy
dCwgZW5kLCBmYWxzZSk7Ci0gIHJldHVybiBGY29ucyAocmV0LCBtYWtlX2ZpeG51bSAocmVhZF9m
cm9tX3N0cmluZ19pbmRleCkpOworICByZXQgPSBlbnRlcl9yZWFkIChzdHJpbmcsIHN0YXJ0LCBl
bmQsIGZhbHNlLCAmcG9zKTsKKyAgcmV0dXJuIEZjb25zIChyZXQsIG1ha2VfZml4bnVtIChwb3Mp
KTsKK30KKworYm9vbAoraGFuZGxlX3JlYWRfc3RyZWFtX2RlZmF1bHRzIChMaXNwX09iamVjdCAq
c3RyZWFtKQoreworICBpZiAoTklMUCAoKnN0cmVhbSkpCisgICAgKnN0cmVhbSA9IFZzdGFuZGFy
ZF9pbnB1dDsKKyAgaWYgKEVRICgqc3RyZWFtLCBRdCkpCisgICAgKnN0cmVhbSA9IFFyZWFkX2No
YXI7CisgIGlmIChFUSAoKnN0cmVhbSwgUXJlYWRfY2hhcikpCisgICAgeworICAgICAgLyogRklY
TUU6IHJlYWRfbWluaWJ1ZmZlciBkb2VzIG5vdCBvZmZlciBhbiBvcHRpb24gZm9yCisgICAgICAg
ICByZXR1cm5pbmcgc3ltYm9scyB3aXRoIHBvc2l0aW9uICovCisgICAgICAvKiBGSVhNRTogPyEg
VGhpcyBpcyB1c2VkIHdoZW4gdGhlIHJlYWRlciBpcyBjYWxsZWQgZnJvbSB0aGUKKyAgICAgICAg
IG1pbmlidWZmZXIgd2l0aG91dCBhIHN0cmVhbSwgYXMgaW4gKHJlYWQpLiAgQnV0IGlzIHRoaXMg
ZmVhdHVyZQorICAgICAgICAgZXZlciB1c2VkLCBhbmQgaWYgc28sIHdoeT8gIElPVywgd2lsbCBh
bnl0aGluZyBicmVhayBpZiB0aGlzCisgICAgICAgICBmZWF0dXJlIGlzIHJlbW92ZWQgIT8gICov
CisgICAgICBpZiAoIU5JTFAgKEZmYm91bmRwIChRcmVhZF9taW5pYnVmZmVyKSkpCisgICAgICAg
ICpzdHJlYW0gPSBjYWxsbiAoUXJlYWRfbWluaWJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBidWlsZF9zdHJpbmcgKCJMaXNwIGV4cHJlc3Npb246ICIpKTsKKyAgICAgIGVsc2UKKyAg
ICAgICAgLyogRnJvbSBpbml0aWFsIGRlZmluaXRpb24gb2YgcmVhZC1taW5pYnVmZmVyIGluIHN1
YnIuZWwgKi8KKyAgICAgICAgKnN0cmVhbSA9IEZyZWFkX2Zyb21fbWluaWJ1ZmZlciAoYnVpbGRf
c3RyaW5nICgiTGlzcCBleHByZXNzaW9uOiAiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUW5pbCwgVm1pbmlidWZmZXJfbG9jYWxfbWFwLCBRdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUW1pbmlidWZmZXJfaGlzdG9yeSwgUW5p
bCwgUW5pbCk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICByZXR1cm4gdHJ1ZTsKIH0K
IAotLyogRnVuY3Rpb24gdG8gc2V0IHVwIHRoZSBnbG9iYWwgY29udGV4dCB3ZSBuZWVkIGluIHRv
cGxldmVsIHJlYWQKLSAgIGNhbGxzLiAgU1RBUlQgYW5kIEVORCBvbmx5IHVzZWQgd2hlbiBTVFJF
QU0gaXMgYSBzdHJpbmcuCi0gICBMT0NBVEVfU1lNUyB0cnVlIG1lYW5zIHJlYWQgc3ltYm9sIG9j
Y3VycmVuY2VzIGFzIHN5bWJvbHMgd2l0aAotICAgcG9zaXRpb24uICAqLwotc3RhdGljIExpc3Bf
T2JqZWN0Ci1yZWFkX2ludGVybmFsX3N0YXJ0IChMaXNwX09iamVjdCBzdHJlYW0sIExpc3BfT2Jq
ZWN0IHN0YXJ0LCBMaXNwX09iamVjdCBlbmQsCi0gICAgICAgICAgICAgICAgICAgICBib29sIGxv
Y2F0ZV9zeW1zKQorLyogQ29udmVydCByZWFkIGFyZ3VtZW50IGludG8gbHJlYWRfaW5wdXQgb2Yg
YXBwcm9wcmlhdGUgdHlwZSAqLwordm9pZAoraW5pdF9scmVhZF9pbnB1dF9mcm9tX3N0cmVhbSAo
bHJlYWRfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzcF9P
YmplY3Qgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzcF9PYmplY3Qg
c3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXNwX09iamVjdCBlbmQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGxvY2F0ZV9zeW1zLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZWVrYWJsZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZJTEUgKnN0cmVhbV9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTGlzcF9PYmplY3QgY29kaW5nKQogewotICBMaXNwX09iamVjdCByZXR2YWw7Ci0KLSAgcmVh
ZGNoYXJfb2Zmc2V0ID0gQlVGRkVSUCAoc3RyZWFtKSA/IFhCVUZGRVIgKHN0cmVhbSktPnB0IDog
MDsKLSAgLyogV2UgY2FuIGdldCBjYWxsZWQgZnJvbSByZWFkZXZhbGxvb3Agd2hpY2ggbWF5IGhh
dmUgc2V0IHRoZXNlCi0gICAgIGFscmVhZHkuICAqLwotICBpZiAoISBIQVNIX1RBQkxFX1AgKHJl
YWRfb2JqZWN0c19tYXApCi0gICAgICB8fCBYSEFTSF9UQUJMRSAocmVhZF9vYmplY3RzX21hcCkt
PmNvdW50KQotICAgIHJlYWRfb2JqZWN0c19tYXAKLSAgICAgID0gbWFrZV9oYXNoX3RhYmxlICgm
aGFzaHRlc3RfZXEsIERFRkFVTFRfSEFTSF9TSVpFLCBXZWFrX05vbmUpOwotICBpZiAoISBIQVNI
X1RBQkxFX1AgKHJlYWRfb2JqZWN0c19jb21wbGV0ZWQpCi0gICAgICB8fCBYSEFTSF9UQUJMRSAo
cmVhZF9vYmplY3RzX2NvbXBsZXRlZCktPmNvdW50KQotICAgIHJlYWRfb2JqZWN0c19jb21wbGV0
ZWQKLSAgICAgID0gbWFrZV9oYXNoX3RhYmxlICgmaGFzaHRlc3RfZXEsIERFRkFVTFRfSEFTSF9T
SVpFLCBXZWFrX05vbmUpOwotCi0gIGlmIChTVFJJTkdQIChzdHJlYW0pCi0gICAgICB8fCAoKENP
TlNQIChzdHJlYW0pICYmIFNUUklOR1AgKFhDQVIgKHN0cmVhbSkpKSkpCisgIExpc3BfT2JqZWN0
IGZ1bGxfbmFtZSA9IFFuaWw7CisgIExpc3BfT2JqZWN0IG5hbWUgPSBRbmlsOworICBpZiAoIU5J
TFAgKGNvZGluZykpCisgICAgeworICAgICAgQ0hFQ0tfQ09ESU5HX1NZU1RFTSAoY29kaW5nKTsK
KyAgICAgIHB0cmRpZmZfdCBpZCA9IENPRElOR19TWVNURU1fSUQgKGNvZGluZyk7CisgICAgICBm
cmFtZS0+bXVsdGlieXRlID0gTklMUCAoQ09ESU5HX0FUVFJfRk9SX1VOSUJZVEUgKENPRElOR19J
RF9BVFRSUyAoaWQpKSkgPworICAgICAgICBMUkVBRF9NVUxUSUJZVEVfVFJVRSA6IExSRUFEX01V
TFRJQllURV9GQUxTRTsKKyAgICB9CisgIGlmIChDT05TUCAoc3RyZWFtKSkKKyAgICB7CisgICAg
ICBMaXNwX09iamVjdCBiYXNlX3N0cmVhbSA9IFhDQVIgKHN0cmVhbSk7CisgICAgICBpZiAoQ09O
U1AgKGJhc2Vfc3RyZWFtKSkKKyAgICAgICAgLyogZGlzYWxsb3cgbmVzdGVkIGNvbnMgdG8gYXZv
aWQgaW5maW5pdGUKKyAgICAgICAgICAgcmVjdXJzaW9uIG9uIGNpcmN1bGFyIGlucHV0ICovCisg
ICAgICAgIHhzaWduYWwxIChRZXJyb3IsCisgICAgICAgICAgICAgICAgICBDQUxMTiAoRmZvcm1h
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF9zdHJpbmcgKCJyZWFkOiBOZXN0ZWQg
Y29uczogJVMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0pKTsKKyAgICAgIExp
c3BfT2JqZWN0IGl0ZW0xID0gWENEUiAoc3RyZWFtKTsKKyAgICAgIExpc3BfT2JqZWN0IGl0ZW0y
ID0gUW5pbDsKKyAgICAgIGlmIChDT05TUCAoaXRlbTEpKQogICAgICAgewotICAgICAgcHRyZGlm
Zl90IHN0YXJ0dmFsLCBlbmR2YWw7Ci0gICAgICBMaXNwX09iamVjdCBzdHJpbmc7Ci0KLSAgICAg
IGlmIChTVFJJTkdQIChzdHJlYW0pKQotCXN0cmluZyA9IHN0cmVhbTsKKyAgICAgICAgaXRlbTIg
PSBYQ0RSIChpdGVtMSk7CisgICAgICAgIGl0ZW0xID0gWENBUihpdGVtMSk7CisgICAgICB9Cisg
ICAgICBpZiAoQlVGRkVSUCAoYmFzZV9zdHJlYW0pIHx8IE1BUktFUlAgKGJhc2Vfc3RyZWFtKQor
ICAgICAgICAgIHx8IFNUUklOR1AgKGJhc2Vfc3RyZWFtKSkKKyAgICAgICAgeworICAgICAgICAg
IHN0YXJ0ID0gKE5JTFAgKHN0YXJ0KSkgPyBpdGVtMSA6IHN0YXJ0OworICAgICAgICAgIGVuZCA9
IChOSUxQIChlbmQpKSA/IGl0ZW0yIDogZW5kOworICAgICAgICB9CiAgICAgICBlbHNlCi0Jc3Ry
aW5nID0gWENBUiAoc3RyZWFtKTsKLQotICAgICAgdmFsaWRhdGVfc3ViYXJyYXkgKHN0cmluZywg
c3RhcnQsIGVuZCwgU0NIQVJTIChzdHJpbmcpLAotCQkJICZzdGFydHZhbCwgJmVuZHZhbCk7Ci0K
LSAgICAgIHJlYWRfZnJvbV9zdHJpbmdfaW5kZXggPSBzdGFydHZhbDsKLSAgICAgIHJlYWRfZnJv
bV9zdHJpbmdfaW5kZXhfYnl0ZSA9IHN0cmluZ19jaGFyX3RvX2J5dGUgKHN0cmluZywgc3RhcnR2
YWwpOwotICAgICAgcmVhZF9mcm9tX3N0cmluZ19saW1pdCA9IGVuZHZhbDsKKyAgICAgICAgewor
ICAgICAgICAgIGlmIChOSUxQIChuYW1lKSkKKyAgICAgICAgICAgIG5hbWUgPSBpdGVtMTsKKyAg
ICAgICAgICBpZiAoTklMUCAoZnVsbF9uYW1lKSkKKyAgICAgICAgICAgIGZ1bGxfbmFtZSA9IE5J
TFAgKGl0ZW0yKSA/IGl0ZW0xIDogaXRlbTI7CiAgICAgICAgIH0KLQotICByZXR2YWwgPSByZWFk
MCAoc3RyZWFtLCBsb2NhdGVfc3ltcyk7Ci0gIGlmIChIQVNIX1RBQkxFX1AgKHJlYWRfb2JqZWN0
c19tYXApCi0gICAgICAmJiBYSEFTSF9UQUJMRSAocmVhZF9vYmplY3RzX21hcCktPmNvdW50ID4g
MCkKLSAgICByZWFkX29iamVjdHNfbWFwID0gUW5pbDsKLSAgaWYgKEhBU0hfVEFCTEVfUCAocmVh
ZF9vYmplY3RzX2NvbXBsZXRlZCkKLSAgICAgICYmIFhIQVNIX1RBQkxFIChyZWFkX29iamVjdHNf
Y29tcGxldGVkKS0+Y291bnQgPiAwKQotICAgIHJlYWRfb2JqZWN0c19jb21wbGV0ZWQgPSBRbmls
OwotICByZXR1cm4gcmV0dmFsOworICAgICAgICAgIHN0cmVhbSA9IGJhc2Vfc3RyZWFtOworICAg
IH0KKyAgZnJhbWUtPnN0YXJ0ID0gc3RhcnQ7CisgIGZyYW1lLT5lbmQgPSBlbmQ7CisgIGZyYW1l
LT5mdWxsX25hbWUgPSBmdWxsX25hbWU7CisgIGZyYW1lLT5uYW1lID0gbmFtZTsKKyAgZnJhbWUt
PmxvY2F0ZV9zeW1zID0gbG9jYXRlX3N5bXM7CisgIGlmIChCVUZGRVJQIChzdHJlYW0pKQorICAg
IHsKKyAgICAgIGZyYW1lLT5pbnR5cGUgPSBMUkVBRF9JTlBVVF9CVUZGRVI7CisgICAgICBpbml0
X2luYnVmZmVyIChmcmFtZSxzdHJlYW0pOworICAgIH0KKyAgZWxzZSBpZiAoTUFSS0VSUCAoc3Ry
ZWFtKSkKKyAgICB7CisgICAgICBmcmFtZS0+aW50eXBlID0gTFJFQURfSU5QVVRfTUFSS0VSOwor
ICAgICAgaW5pdF9pbm1hcmtlciAoZnJhbWUsc3RyZWFtKTsKKyAgICB9CisgIGVsc2UgaWYgKFNU
UklOR1AgKHN0cmVhbSkpCisgICAgeworICAgICAgZnJhbWUtPmludHlwZSA9IExSRUFEX0lOUFVU
X1NUUklORzsKKyAgICAgIGluaXRfaW5zdHJpbmcgKGZyYW1lLCBzdHJlYW0pOworICAgIH0KKyAg
ZWxzZSBpZiAoRVEgKHN0cmVhbSwgUWdldF9maWxlX2NoYXIpKQorICAgIHsKKyAgICAgIC8qIGFi
dXNlIHN0YXJ0IGFuZCBlbmQgYXJndW1lbnRzIGZvciBmdWxsX25hbWUgYW5kIGZpbGUgKi8KKyAg
ICAgIGVhc3NlcnQgKHN0cmVhbV9maWxlICE9IE5VTEwpOworICAgICAgZnJhbWUtPmludHlwZSA9
IExSRUFEX0lOUFVUX0ZJTEU7CisgICAgICBpbml0X2luZmlsZSAoZnJhbWUsIHN0cmVhbV9maWxl
LCBzZWVrYWJsZSwgZmFsc2UsIGNvZGluZyk7CisgICAgfQorICBlbHNlIGlmIChFUSAoc3RyZWFt
LCBRcmVhZGVyX2lucHV0X3N0cmVhbSkpCisgICAgeworICAgICAgZnJhbWUtPmludHlwZSA9IExS
RUFEX0lOUFVUX0lORElSRUNUOworICAgICAgbHJlYWRfZnJhbWUgKnNvdXJjZSA9IGN1cnJlbnRf
ZnJhbWU7CisgICAgICB3aGlsZSAoc291cmNlICYmIHNvdXJjZS0+aW50eXBlID09IExSRUFEX0lO
UFVUX0lORElSRUNUKQorICAgICAgICBzb3VyY2UgPSBzb3VyY2UtPmlucHV0LmZyYW1lLnNvdXJj
ZTsKKyAgICAgIGlmICghIHNvdXJjZSkKKyAgICAgICAgZnJhbWUtPmludHlwZSA9IExSRUFEX0lO
UFVUX05VTEw7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBmcmFtZS0+aW5wdXQu
ZnJhbWUuc291cmNlID0gc291cmNlOworICAgICAgICAgIGZyYW1lLT5jaGFyX29mZnNldCA9IHNv
dXJjZS0+Y2hhcl9vZmZzZXQ7CisgICAgICAgICAgZnJhbWUtPmJ5dGVfb2Zmc2V0ID0gc291cmNl
LT5ieXRlX29mZnNldDsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZSBpZiAoRVEgKHN0cmVhbSwg
UWdldF9lbWFjc19tdWxlX2ZpbGVfY2hhcikpCisgICAgeworICAgICAgZWFzc2VydCAoc3RyZWFt
X2ZpbGUgIT0gTlVMTCk7CisgICAgICBmcmFtZS0+aW50eXBlID0gTFJFQURfSU5QVVRfRklMRV9N
VUxFOworICAgICAgaW5pdF9pbmZpbGUgKGZyYW1lLCBzdHJlYW1fZmlsZSwgc2Vla2FibGUsIHRy
dWUsIGNvZGluZyk7CisgICAgfQorICBlbHNlIGlmIChOSUxQIChzdHJlYW0pKQorICAgIHsKKyAg
ICAgIGZyYW1lLT5pbnR5cGUgPSBMUkVBRF9JTlBVVF9OVUxMOworICAgICAgZnJhbWUtPmNoYXJf
b2Zmc2V0ID0gMDsKKyAgICAgIGZyYW1lLT5ieXRlX29mZnNldCA9IDA7CisgICAgfQorICBlbHNl
CisgICAgeworICAgICAgLyogRXZpZGVudGx5IHRoaXMgbXVzdCBiZSBhIGZ1bmN0aW9uIG5hbWUg
b3IgdmFsdWUgKi8KKyAgICAgIGZyYW1lLT5pbnR5cGUgPSBMUkVBRF9JTlBVVF9QUk9DRURVUkU7
CisgICAgICBmcmFtZS0+aW5wdXQucCA9IElOSVRfSU5QUk9DKCk7CisgICAgICBmcmFtZS0+aW5w
dXQucC5wcm9jID0gc3RyZWFtOworICAgICAgZnJhbWUtPmNoYXJfb2Zmc2V0ID0gMDsKKyAgICAg
IGZyYW1lLT5ieXRlX29mZnNldCA9IDA7CisgICAgfQorICBpZiAoZnJhbWUtPmludHlwZSAhPSBM
UkVBRF9JTlBVVF9OVUxMKQorICAgIHsKKyAgICAgIC8qIHN0YXJ0IHdpdGggZGVmYXVsdHMgdGhh
dCBhcmVuJ3Qgc3RhdGljIChJTklUX0xSRUFEX0ZSQU1FKCkpKi8KKyAgICAgIGZyYW1lLT5vYmpl
Y3RzX21hcAorICAgICAgICA9IG1ha2VfaGFzaF90YWJsZSAoJmhhc2h0ZXN0X2VxLCBERUZBVUxU
X0hBU0hfU0laRSwgV2Vha19Ob25lKTsKKyAgICAgIGZyYW1lLT5vYmplY3RzX2NvbXBsZXRlZAor
ICAgICAgICA9IG1ha2VfaGFzaF90YWJsZSAoJmhhc2h0ZXN0X2VxLCBERUZBVUxUX0hBU0hfU0la
RSwgV2Vha19Ob25lKTsKKyAgICB9CisgIC8qIGZyYW1lLT5tdWx0aWJ5dGUgbXVzdCBiZSBpbml0
aWFsaXplZCEgKi8KKyAgaW5pdGlhbGl6ZV9yZWFkb25lY2hhciAoZnJhbWUpOwogfQotDAotLyog
R3JvdyBhIHJlYWQgYnVmZmVyIEJVRiB0aGF0IGNvbnRhaW5zIE9GRlNFVCB1c2VmdWwgYnl0ZXMg
b2YgZGF0YSwKLSAgIGJ5IGF0IGxlYXN0IE1BWF9NVUxUSUJZVEVfTEVOR1RIIGJ5dGVzLiAgVXBk
YXRlICpCVUZfQUREUiBhbmQKLSAgICpCVUZfU0laRSBhY2NvcmRpbmdseTsgMCA8PSBPRkZTRVQg
PD0gKkJVRl9TSVpFLiAgSWYgKkJVRl9BRERSIGlzCi0gICBpbml0aWFsbHkgbnVsbCwgQlVGIGlz
IG9uIHRoZSBzdGFjazogY29weSBpdHMgZGF0YSB0byB0aGUgbmV3IGhlYXAKLSAgIGJ1ZmZlci4g
IE90aGVyd2lzZSwgQlVGIG11c3QgZXF1YWwgKkJVRl9BRERSIGFuZCBjYW4gc2ltcGx5IGJlCi0g
ICByZWFsbG9jYXRlZC4gIEVpdGhlciB3YXksIHJlbWVtYmVyIHRoZSBoZWFwIGFsbG9jYXRpb24g
KHdoaWNoIGlzIGF0Ci0gICBwZGwgc2xvdCBDT1VOVCkgc28gdGhhdCBpdCBjYW4gYmUgZnJlZWQg
d2hlbiB1bndpbmRpbmcgdGhlIHN0YWNrLiovCiAKLXN0YXRpYyBjaGFyICoKLWdyb3dfcmVhZF9i
dWZmZXIgKGNoYXIgKmJ1ZiwgcHRyZGlmZl90IG9mZnNldCwKLQkJICBjaGFyICoqYnVmX2FkZHIs
IHB0cmRpZmZfdCAqYnVmX3NpemUsIHNwZWNwZGxfcmVmIGNvdW50KQordm9pZAoraW5pdF9scmVh
ZF9ldmFsX3BhcmFtcyAobHJlYWRfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgTGlzcF9PYmplY3QgZnVsbF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgTGlzcF9P
YmplY3QgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIExpc3BfT2JqZWN0IHJlYWRmdW4s
CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIHdob2xlX2J1ZmZlcikKIHsKLSAgY2hhciAq
cCA9IHhwYWxsb2MgKCpidWZfYWRkciwgYnVmX3NpemUsIE1BWF9NVUxUSUJZVEVfTEVOR1RILCAt
MSwgMSk7Ci0gIGlmICghKmJ1Zl9hZGRyKQorICBpZiAoIU5JTFAgKGZ1bGxfbmFtZSkpCisgICAg
ZnJhbWUtPmZ1bGxfbmFtZSA9IGZ1bGxfbmFtZTsKKyAgaWYgKCFOSUxQIChuYW1lKSkKKyAgICBm
cmFtZS0+bmFtZSA9IG5hbWU7CisgIGlmICghTklMUCAoZnJhbWUtPm5hbWUpICYmIE5JTFAgKGZy
YW1lLT5mdWxsX25hbWUpKQogICAgIHsKLSAgICAgIG1lbWNweSAocCwgYnVmLCBvZmZzZXQpOwot
ICAgICAgcmVjb3JkX3Vud2luZF9wcm90ZWN0X3B0ciAoeGZyZWUsIHApOworICAgICAgZnJhbWUt
PmZ1bGxfbmFtZSA9IEZleHBhbmRfZmlsZV9uYW1lIChmcmFtZS0+bmFtZSwgUW5pbCk7CiAgICAg
fQotICBlbHNlCi0gICAgc2V0X3Vud2luZF9wcm90ZWN0X3B0ciAoY291bnQsIHhmcmVlLCBwKTsK
LSAgKmJ1Zl9hZGRyID0gcDsKLSAgcmV0dXJuIHA7CisgIGlmICghTklMUCAoZnJhbWUtPmZ1bGxf
bmFtZSkgJiYgTklMUCAoZnJhbWUtPm5hbWUpKQorICAgIHsKKyAgICAgIGZyYW1lLT5uYW1lID0g
RmZpbGVfbmFtZV9ub25kaXJlY3RvcnkgKGZyYW1lLT5mdWxsX25hbWUpOworICAgIH0KKyAgZnJh
bWUtPnNvdXJjZW5hbWUgPSB3aWxsX2R1bXBfcCAoKSA/IGZyYW1lLT5uYW1lIDogZnJhbWUtPmZ1
bGxfbmFtZTsKKyAgZnJhbWUtPnJlYWRmdW4gPSByZWFkZnVuOworICBmcmFtZS0+d2hvbGVfYnVm
ZmVyID0gd2hvbGVfYnVmZmVyOworCiB9CiAKKworDAorCiAvKiBSZXR1cm4gdGhlIHNjYWxhciB2
YWx1ZSB0aGF0IGhhcyB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgbmFtZSBOQU1FLgogICAgUmFpc2Ug
J2ludmFsaWQtcmVhZC1zeW50YXgnIGlmIHRoZXJlIGlzIG5vIHN1Y2ggY2hhcmFjdGVyLiAgKi8K
LXN0YXRpYyBpbnQKLWNoYXJhY3Rlcl9uYW1lX3RvX2NvZGUgKGNoYXIgY29uc3QgKm5hbWUsIHB0
cmRpZmZfdCBuYW1lX2xlbiwKLQkJCUxpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQoraW50CitjaGFy
YWN0ZXJfbmFtZV90b19jb2RlIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUsIGNoYXIgY29u
c3QgKm5hbWUsIHB0cmRpZmZfdCBuYW1lX2xlbikKIHsKICAgLyogRm9yICJVK1hYWFgiLCBwYXNz
IHRoZSBsZWFkaW5nICcrJyB0byBzdHJpbmdfdG9fbnVtYmVyIHRvIHJlamVjdAogICAgICBtb25z
dHJvc2l0aWVzIGxpa2UgIlUrLTAwMDAiLiAgKi8KQEAgLTI4NTUsNyArNDQ0Nyw3IEBAIGNoYXJh
Y3Rlcl9uYW1lX3RvX2NvZGUgKGNoYXIgY29uc3QgKm5hbWUsIHB0cmRpZmZfdCBuYW1lX2xlbiwK
ICAgICB7CiAgICAgICBBVVRPX1NUUklORyAoZm9ybWF0LCAiXFxOeyVzfSIpOwogICAgICAgQVVU
T19TVFJJTkdfV0lUSF9MRU4gKG5hbWVzdHIsIG5hbWUsIG5hbWVfbGVuKTsKLSAgICAgIGludmFs
aWRfc3ludGF4X2xpc3AgKENBTExOIChGZm9ybWF0LCBmb3JtYXQsIG5hbWVzdHIpLCByZWFkY2hh
cmZ1bik7CisgICAgICBpbnZhbGlkX3N5bnRheF9saXNwIChmcmFtZSwgQ0FMTE4gKEZmb3JtYXQs
IGZvcm1hdCwgbmFtZXN0cikpOwogICAgIH0KIAogICByZXR1cm4gRklYTlVNUCAoY29kZSkgPyBY
RklYTlVNIChjb2RlKSA6IC0xOwpAQCAtMjg2OCw3ICs0NDYwLDcgQEAgY2hhcmFjdGVyX25hbWVf
dG9fY29kZSAoY2hhciBjb25zdCAqbmFtZSwgcHRyZGlmZl90IG5hbWVfbGVuLAogLyogUmVhZCBh
IGNoYXJhY3RlciBlc2NhcGUgc2VxdWVuY2UsIGFzc3VtaW5nIHdlIGp1c3QgcmVhZCBhIGJhY2tz
bGFzaAogICAgYW5kIG9uZSBtb3JlIGNoYXJhY3RlciAobmV4dF9jaGFyKS4gICovCiBzdGF0aWMg
aW50Ci1yZWFkX2NoYXJfZXNjYXBlIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwgaW50IG5leHRf
Y2hhcikKK3JlYWRfY2hhcl9lc2NhcGUgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwgaW50
IG5leHRfY2hhcikKIHsKICAgaW50IG1vZGlmaWVycyA9IDA7CiAgIHB0cmRpZmZfdCBuY29udHJv
bCA9IDA7CkBAIC0yODgyLDcgKzQ0NzQsNyBAQCByZWFkX2NoYXJfZXNjYXBlIChMaXNwX09iamVj
dCByZWFkY2hhcmZ1biwgaW50IG5leHRfY2hhcikKICAgc3dpdGNoIChjKQogICAgIHsKICAgICBj
YXNlIC0xOgotICAgICAgZW5kX29mX2ZpbGVfZXJyb3IgKCk7CisgICAgICBlbmRfb2ZfZmlsZV9l
cnJvciAoZnJhbWUpOwogCiAgICAgY2FzZSAnYSc6IGNociA9ICdcYSc7IGJyZWFrOwogICAgIGNh
c2UgJ2InOiBjaHIgPSAnXGInOyBicmVhazsKQEAgLTI5MDgsMTMgKzQ1MDAsMTMgQEAgcmVhZF9j
aGFyX2VzY2FwZSAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGludCBuZXh0X2NoYXIpCiAKICAg
ICBtb2Rfa2V5OgogICAgICAgewotCWludCBjMSA9IFJFQURDSEFSOworICAgICAgICBpbnQgYzEg
PSBSRUFEQ0hBUiAoZnJhbWUpOwogICAgICAgICBpZiAoYzEgIT0gJy0nKQogICAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmIChjID09ICdzJykKICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIC8qIFxzIG5vdCBmb2xsb3dlZCBieSBhIGh5cGhlbiBpcyBTUEMuICAqLwotCQlVTlJFQUQg
KGMxKTsKKyAgICAgICAgICAgICAgICBVTlJFQUQgKGZyYW1lLCBjMSk7CiAgICAgICAgICAgICAg
ICAgY2hyID0gJyAnOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICB9CkBA
IC0yOTIzLDEwICs0NTE1LDEwIEBAIHJlYWRfY2hhcl9lc2NhcGUgKExpc3BfT2JqZWN0IHJlYWRj
aGFyZnVuLCBpbnQgbmV4dF9jaGFyKQogICAgICAgICAgICAgICBlcnJvciAoIkludmFsaWQgZXNj
YXBlIGNoYXIgc3ludGF4OiBcXCVjIG5vdCBmb2xsb3dlZCBieSAtIiwgYyk7CiAgICAgICAgICAg
fQogICAgICAgICBtb2RpZmllcnMgfD0gbW9kOwotCWMxID0gUkVBRENIQVI7CisgICAgICAgIGMx
ID0gUkVBRENIQVIgKGZyYW1lKTsKICAgICAgICAgaWYgKGMxID09ICdcXCcpCiAgICAgICAgICAg
ewotCSAgICBuZXh0X2NoYXIgPSBSRUFEQ0hBUjsKKyAgICAgICAgICAgIG5leHRfY2hhciA9IFJF
QURDSEFSIChmcmFtZSk7CiAgICAgICAgICAgICBnb3RvIGFnYWluOwogICAgICAgICAgIH0KICAg
ICAgICAgY2hyID0gYzE7CkBAIC0yOTM4LDcgKzQ1MzAsNyBAQCByZWFkX2NoYXJfZXNjYXBlIChM
aXNwX09iamVjdCByZWFkY2hhcmZ1biwgaW50IG5leHRfY2hhcikKICAgICAgICBLZWVwIGEgY291
bnQgb2YgdGhlbSBhbmQgYXBwbHkgdGhlbSBzZXBhcmF0ZWx5LiAgKi8KICAgICBjYXNlICdDJzoK
ICAgICAgIHsKLQlpbnQgYzEgPSBSRUFEQ0hBUjsKKyAgICAgICAgaW50IGMxID0gUkVBRENIQVIg
KGZyYW1lKTsKICAgICAgICAgaWYgKGMxICE9ICctJykKICAgICAgICAgICBlcnJvciAoIkludmFs
aWQgZXNjYXBlIGNoYXIgc3ludGF4OiBcXCVjIG5vdCBmb2xsb3dlZCBieSAtIiwgYyk7CiAgICAg
ICB9CkBAIC0yOTQ3LDEwICs0NTM5LDEwIEBAIHJlYWRfY2hhcl9lc2NhcGUgKExpc3BfT2JqZWN0
IHJlYWRjaGFyZnVuLCBpbnQgbmV4dF9jaGFyKQogICAgIGNhc2UgJ14nOgogICAgICAgewogICAg
ICAgICBuY29udHJvbCsrOwotCWludCBjMSA9IFJFQURDSEFSOworICAgICAgICBpbnQgYzEgPSBS
RUFEQ0hBUiAoZnJhbWUpOwogICAgICAgICBpZiAoYzEgPT0gJ1xcJykKICAgICAgICAgICB7Ci0J
ICAgIG5leHRfY2hhciA9IFJFQURDSEFSOworICAgICAgICAgICAgbmV4dF9jaGFyID0gUkVBRENI
QVIgKGZyYW1lKTsKICAgICAgICAgICAgIGdvdG8gYWdhaW47CiAgICAgICAgICAgfQogICAgICAg
ICBjaHIgPSBjMTsKQEAgLTI5NjUsMTAgKzQ1NTcsMTAgQEAgcmVhZF9jaGFyX2VzY2FwZSAoTGlz
cF9PYmplY3QgcmVhZGNoYXJmdW4sIGludCBuZXh0X2NoYXIpCiAgICAgICAgIGludCBjb3VudCA9
IDA7CiAgICAgICAgIHdoaWxlIChjb3VudCA8IDIpCiAgICAgICAgICAgewotCSAgICBpbnQgYyA9
IFJFQURDSEFSOworICAgICAgICAgICAgaW50IGMgPSBSRUFEQ0hBUiAoZnJhbWUpOwogICAgICAg
ICAgICAgaWYgKGMgPCAnMCcgfHwgYyA+ICc3JykKICAgICAgICAgICAgICAgewotCQlVTlJFQUQg
KGMpOworICAgICAgICAgICAgICAgIFVOUkVBRCAoZnJhbWUsIGMpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpID0gKGkgPDwgMykgKyAoYyAt
ICcwJyk7CkBAIC0yOTg5LDExICs0NTgxLDExIEBAIHJlYWRfY2hhcl9lc2NhcGUgKExpc3BfT2Jq
ZWN0IHJlYWRjaGFyZnVuLCBpbnQgbmV4dF9jaGFyKQogICAgICAgICBpbnQgY291bnQgPSAwOwog
ICAgICAgICB3aGlsZSAoMSkKICAgICAgICAgICB7Ci0JICAgIGludCBjID0gUkVBRENIQVI7Cisg
ICAgICAgICAgICBpbnQgYyA9IFJFQURDSEFSIChmcmFtZSk7CiAgICAgICAgICAgICBpbnQgZGln
aXQgPSBjaGFyX2hleGRpZ2l0IChjKTsKICAgICAgICAgICAgIGlmIChkaWdpdCA8IDApCiAgICAg
ICAgICAgICAgIHsKLQkJVU5SRUFEIChjKTsKKyAgICAgICAgICAgICAgICBVTlJFQUQgKGZyYW1l
LCBjKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaSA9IChpIDw8IDQpICsgZGlnaXQ7CkBAIC0zMDI2LDcgKzQ2MTgsNyBAQCByZWFkX2NoYXJf
ZXNjYXBlIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwgaW50IG5leHRfY2hhcikKICAgICAgICAg
dW5zaWduZWQgaW50IGkgPSAwOwogICAgICAgICBmb3IgKGludCBjb3VudCA9IDA7IGNvdW50IDwg
dW5pY29kZV9oZXhfY291bnQ7IGNvdW50KyspCiAgICAgICAgICAgewotCSAgICBpbnQgYyA9IFJF
QURDSEFSOworICAgICAgICAgICAgaW50IGMgPSBSRUFEQ0hBUiAoZnJhbWUpOwogICAgICAgICAg
ICAgaWYgKGMgPCAwKQogICAgICAgICAgICAgICBlcnJvciAoIk1hbGZvcm1lZCBVbmljb2RlIGVz
Y2FwZTogXFwlYyV4IiwKICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGVfaGV4X2NvdW50ID09
IDQgPyAndScgOiAnVScsIGkpOwpAQCAtMzA0NSwyNiArNDYzNywyNSBAQCByZWFkX2NoYXJfZXNj
YXBlIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwgaW50IG5leHRfY2hhcikKICAgICAvKiBOYW1l
ZCBjaGFyYWN0ZXI6IFxOe25hbWV9ICovCiAgICAgY2FzZSAnTic6CiAgICAgICB7Ci0gICAgICAg
IGludCBjID0gUkVBRENIQVI7CisgICAgICAgIGludCBjID0gUkVBRENIQVIgKGZyYW1lKTsKICAg
ICAgICAgaWYgKGMgIT0gJ3snKQotICAgICAgICAgIGludmFsaWRfc3ludGF4ICgiRXhwZWN0ZWQg
b3BlbmluZyBicmFjZSBhZnRlciBcXE4iLCByZWFkY2hhcmZ1bik7CisgICAgICAgICAgaW52YWxp
ZF9zeW50YXggKGZyYW1lLCAiRXhwZWN0ZWQgb3BlbmluZyBicmFjZSBhZnRlciBcXE4iKTsKICAg
ICAgICAgY2hhciBuYW1lW1VOSUNPREVfQ0hBUkFDVEVSX05BTUVfTEVOR1RIX0JPVU5EICsgMV07
CiAgICAgICAgIGJvb2wgd2hpdGVzcGFjZSA9IGZhbHNlOwogICAgICAgICBwdHJkaWZmX3QgbGVu
Z3RoID0gMDsKICAgICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgICAgewotICAgICAgICAgICAg
aW50IGMgPSBSRUFEQ0hBUjsKKyAgICAgICAgICAgIGludCBjID0gUkVBRENIQVIgKGZyYW1lKTsK
ICAgICAgICAgICAgIGlmIChjIDwgMCkKLSAgICAgICAgICAgICAgZW5kX29mX2ZpbGVfZXJyb3Ig
KCk7CisgICAgICAgICAgICAgIGVuZF9vZl9maWxlX2Vycm9yIChmcmFtZSk7CiAgICAgICAgICAg
ICBpZiAoYyA9PSAnfScpCiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKGMg
Pj0gMHg4MCkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIEFVVE9fU1RSSU5HIChm
b3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGNoYXJhY3RlciBV
KyUwNFggaW4gY2hhcmFjdGVyIG5hbWUiKTsKLQkJaW52YWxpZF9zeW50YXhfbGlzcCAoQ0FMTE4g
KEZmb3JtYXQsIGZvcm1hdCwKLQkJCQkJICAgIG1ha2VfZml4ZWRfbmF0bnVtIChjKSksCi0JCQkJ
ICAgICByZWFkY2hhcmZ1bik7CisgICAgICAgICAgICAgICAgaW52YWxpZF9zeW50YXhfbGlzcCAo
ZnJhbWUsIENBTExOIChGZm9ybWF0LCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2ZpeGVkX25hdG51bSAoYykpKTsKICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgLyogVHJlYXQgbXVsdGlwbGUgYWRqYWNlbnQgd2hpdGVz
cGFjZSBjaGFyYWN0ZXJzIGFzIGEKICAgICAgICAgICAgICAgIHNpbmdsZSBzcGFjZSBjaGFyYWN0
ZXIuICBUaGlzIG1ha2VzIGl0IGVhc2llciB0byB1c2UKQEAgLTMwODAsMTUgKzQ2NzEsMTUgQEAg
cmVhZF9jaGFyX2VzY2FwZSAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGludCBuZXh0X2NoYXIp
CiAgICAgICAgICAgICAgIHdoaXRlc3BhY2UgPSBmYWxzZTsKICAgICAgICAgICAgIG5hbWVbbGVu
Z3RoKytdID0gYzsKICAgICAgICAgICAgIGlmIChsZW5ndGggPj0gc2l6ZW9mIG5hbWUpCi0gICAg
ICAgICAgICAgIGludmFsaWRfc3ludGF4ICgiQ2hhcmFjdGVyIG5hbWUgdG9vIGxvbmciLCByZWFk
Y2hhcmZ1bik7CisgICAgICAgICAgICAgIGludmFsaWRfc3ludGF4IChmcmFtZSwgIkNoYXJhY3Rl
ciBuYW1lIHRvbyBsb25nIik7CiAgICAgICAgICAgfQogICAgICAgICBpZiAobGVuZ3RoID09IDAp
Ci0gICAgICAgICAgaW52YWxpZF9zeW50YXggKCJFbXB0eSBjaGFyYWN0ZXIgbmFtZSIsIHJlYWRj
aGFyZnVuKTsKKyAgICAgICAgICBpbnZhbGlkX3N5bnRheCAoZnJhbWUsICJFbXB0eSBjaGFyYWN0
ZXIgbmFtZSIpOwogICAgICAgICBuYW1lW2xlbmd0aF0gPSAnXDAnOwogCiAgICAgICAgIC8qIGNo
YXJhY3Rlcl9uYW1lX3RvX2NvZGUgY2FuIGludm9rZSByZWFkMCwgcmVjdXJzaXZlbHkuCiAgICAg
ICAgICAgIFRoaXMgaXMgd2h5IHJlYWQwIG5lZWRzIHRvIGJlIHJlLWVudHJhbnQuICAqLwotCWNo
ciA9IGNoYXJhY3Rlcl9uYW1lX3RvX2NvZGUgKG5hbWUsIGxlbmd0aCwgcmVhZGNoYXJmdW4pOwor
ICAgICAgICBjaHIgPSBjaGFyYWN0ZXJfbmFtZV90b19jb2RlIChmcmFtZSwgbmFtZSwgbGVuZ3Ro
KTsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAKQEAgLTMwOTgsNyArNDY4OSw3IEBAIHJlYWRf
Y2hhcl9lc2NhcGUgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBpbnQgbmV4dF9jaGFyKQogICAg
IH0KICAgZWFzc2VydCAoY2hyID49IDAgJiYgY2hyIDwgKDEgPDwgQ0hBUkFDVEVSQklUUykpOwog
ICBpZiAoY2hyIDwgMCB8fCBjaHIgPj0gKDEgPDwgQ0hBUkFDVEVSQklUUykpCi0gICAgaW52YWxp
ZF9zeW50YXggKCJJbnZhbGlkIGNoYXJhY3RlciIsIHJlYWRjaGFyZnVuKTsKKyAgICBpbnZhbGlk
X3N5bnRheCAoZnJhbWUsICJJbnZhbGlkIGNoYXJhY3RlciIpOwogCiAgIC8qIEFwcGx5IENvbnRy
b2wgbW9kaWZpZXJzLCB1c2luZyB0aGUgcnVsZXM6CiAgICAgIFxDLVggPSBhc2NpaV9jdHJsKG5v
bW9kKFgpKSB8IG1vZHMoWCkgIGlmIG5vbW9kKFgpIGlzIG9uZSBvZjoKQEAgLTMxNDYsMTMgKzQ3
MzcsMTMgQEAgZGlnaXRfdG9fbnVtYmVyIChpbnQgY2hhcmFjdGVyLCBpbnQgYmFzZSkKICAgcmV0
dXJuIGRpZ2l0IDwgYmFzZSA/IGRpZ2l0IDogLTE7CiB9CiAKLXN0YXRpYyB2b2lkCi1pbnZhbGlk
X3JhZGl4X2ludGVnZXIgKEVNQUNTX0lOVCByYWRpeCwgTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4p
Cit2b2lkCitpbnZhbGlkX3JhZGl4X2ludGVnZXIgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFt
ZSwgRU1BQ1NfSU5UIHJhZGl4KQogewogICBzdGF0aWMgY2hhciBjb25zdCBmb3JtYXRbXSA9ICJp
bnRlZ2VyLCByYWRpeCAlInBJImQiOwogICBjaGFyIGJ1ZltzaXplb2YgZm9ybWF0IC0gc2l6ZW9m
ICIlInBJImQiICsgSU5UX0JVRlNJWkVfQk9VTkQgKHJhZGl4KV07CiAgIHNwcmludGYgKGJ1Ziwg
Zm9ybWF0LCByYWRpeCk7Ci0gIGludmFsaWRfc3ludGF4IChidWYsIHJlYWRjaGFyZnVuKTsKKyAg
aW52YWxpZF9zeW50YXggKGZyYW1lLCBidWYpOwogfQogCiAvKiBSZWFkIGFuIGludGVnZXIgaW4g
cmFkaXggUkFESVggdXNpbmcgUkVBRENIQVJGVU4gdG8gcmVhZApAQCAtMzE2MCw4ICs0NzUxLDgg
QEAgaW52YWxpZF9yYWRpeF9pbnRlZ2VyIChFTUFDU19JTlQgcmFkaXgsIExpc3BfT2JqZWN0IHJl
YWRjaGFyZnVuKQogICAgVmFsdWUgaXMgdGhlIGludGVnZXIgcmVhZC4KICAgIFNpZ25hbCBhbiBl
cnJvciBpZiBlbmNvdW50ZXJpbmcgaW52YWxpZCByZWFkIHN5bnRheC4gICovCiAKLXN0YXRpYyBM
aXNwX09iamVjdAotcmVhZF9pbnRlZ2VyIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwgaW50IHJh
ZGl4KQorTGlzcF9PYmplY3QKK3JlYWRfaW50ZWdlciAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZy
YW1lLCBpbnQgcmFkaXgpCiB7CiAgIGNoYXIgc3RhY2tidWZbMjBdOwogICBjaGFyICpyZWFkX2J1
ZmZlciA9IHN0YWNrYnVmOwpAQCAtMzE3MSwxMSArNDc2MiwxMSBAQCByZWFkX2ludGVnZXIgKExp
c3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBpbnQgcmFkaXgpCiAgIGludCB2YWxpZCA9IC0xOyAvKiAx
IGlmIHZhbGlkLCAwIGlmIG5vdCwgLTEgaWYgaW5jb21wbGV0ZS4gICovCiAgIHNwZWNwZGxfcmVm
IGNvdW50ID0gU1BFQ1BETF9JTkRFWCAoKTsKIAotICBpbnQgYyA9IFJFQURDSEFSOworICBpbnQg
YyA9IFJFQURDSEFSIChmcmFtZSk7CiAgIGlmIChjID09ICctJyB8fCBjID09ICcrJykKICAgICB7
CiAgICAgICAqcCsrID0gYzsKLSAgICAgIGMgPSBSRUFEQ0hBUjsKKyAgICAgIGMgPSBSRUFEQ0hB
UiAoZnJhbWUpOwogICAgIH0KIAogICBpZiAoYyA9PSAnMCcpCkBAIC0zMTg2LDcgKzQ3NzcsNyBA
QCByZWFkX2ludGVnZXIgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBpbnQgcmFkaXgpCiAgICAg
ICAvKiBJZ25vcmUgcmVkdW5kYW50IGxlYWRpbmcgemVyb3MsIHNvIHRoZSBidWZmZXIgZG9lc24n
dAogICAgICAgICAgZmlsbCB1cCB3aXRoIHRoZW0uICAqLwogICAgICAgZG8KLQljID0gUkVBRENI
QVI7CisgICAgICAgIGMgPSBSRUFEQ0hBUiAoZnJhbWUpOwogICAgICAgd2hpbGUgKGMgPT0gJzAn
KTsKICAgICB9CiAKQEAgLTMyMDYsMTMgKzQ3OTcsMTMgQEAgcmVhZF9pbnRlZ2VyIChMaXNwX09i
amVjdCByZWFkY2hhcmZ1biwgaW50IHJhZGl4KQogICAgICAgICAgIHAgPSByZWFkX2J1ZmZlciAr
IG9mZnNldDsKICAgICAgICAgfQogICAgICAgKnArKyA9IGM7Ci0gICAgICBjID0gUkVBRENIQVI7
CisgICAgICBjID0gUkVBRENIQVIgKGZyYW1lKTsKICAgICB9CiAKLSAgVU5SRUFEIChjKTsKKyAg
VU5SRUFEIChmcmFtZSwgYyk7CiAKICAgaWYgKHZhbGlkICE9IDEpCi0gICAgaW52YWxpZF9yYWRp
eF9pbnRlZ2VyIChyYWRpeCwgcmVhZGNoYXJmdW4pOworICAgIGludmFsaWRfcmFkaXhfaW50ZWdl
ciAoZnJhbWUscmFkaXgpOwogCiAgICpwID0gJ1wwJzsKICAgcmV0dXJuIHVuYmluZF90byAoY291
bnQsIHN0cmluZ190b19udW1iZXIgKHJlYWRfYnVmZmVyLCByYWRpeCwgTlVMTCkpOwpAQCAtMzIy
MCwxMiArNDgxMSwxMiBAQCByZWFkX2ludGVnZXIgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBp
bnQgcmFkaXgpCiAMCiAKIC8qIFJlYWQgYSBjaGFyYWN0ZXIgbGl0ZXJhbCAocHJlY2VkZWQgYnkg
YD8nKS4gICovCi1zdGF0aWMgTGlzcF9PYmplY3QKLXJlYWRfY2hhcl9saXRlcmFsIChMaXNwX09i
amVjdCByZWFkY2hhcmZ1bikKK0xpc3BfT2JqZWN0CityZWFkX2NoYXJfbGl0ZXJhbCAocmVnaXN0
ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKQogewotICBpbnQgY2ggPSBSRUFEQ0hBUjsKKyAgaW50IGNo
ID0gUkVBRENIQVIgKGZyYW1lKTsKICAgaWYgKGNoIDwgMCkKLSAgICBlbmRfb2ZfZmlsZV9lcnJv
ciAoKTsKKyAgICBlbmRfb2ZfZmlsZV9lcnJvciAoZnJhbWUpOwogCiAgIC8qIEFjY2VwdCBgc2lu
Z2xlIHNwYWNlJyBzeW50YXggbGlrZSAobGlzdCA/IHgpIHdoZXJlIHRoZQogICAgICB3aGl0ZXNw
YWNlIGNoYXJhY3RlciBpcyBTUEMgb3IgVEFCLgpAQCAtMzI0NSw3ICs0ODM2LDcgQEAgcmVhZF9j
aGFyX2xpdGVyYWwgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQogICAgIH0KIAogICBpZiAoY2gg
PT0gJ1xcJykKLSAgICBjaCA9IHJlYWRfY2hhcl9lc2NhcGUgKHJlYWRjaGFyZnVuLCBSRUFEQ0hB
Uik7CisgICAgY2ggPSByZWFkX2NoYXJfZXNjYXBlIChmcmFtZSwgUkVBRENIQVIgKGZyYW1lKSk7
CiAKICAgaW50IG1vZGlmaWVycyA9IGNoICYgQ0hBUl9NT0RJRklFUl9NQVNLOwogICBjaCAmPSB+
Q0hBUl9NT0RJRklFUl9NQVNLOwpAQCAtMzI1MywyMCArNDg0NCwyMCBAQCByZWFkX2NoYXJfbGl0
ZXJhbCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCiAgICAgY2ggPSBDSEFSX1RPX0JZVEU4IChj
aCk7CiAgIGNoIHw9IG1vZGlmaWVyczsKIAotICBpbnQgbmNoID0gUkVBRENIQVI7Ci0gIFVOUkVB
RCAobmNoKTsKKyAgaW50IG5jaCA9IFJFQURDSEFSIChmcmFtZSk7CisgIFVOUkVBRCAoZnJhbWUs
IG5jaCk7CiAgIGlmIChuY2ggPD0gMzIKICAgICAgIHx8IG5jaCA9PSAnIicgfHwgbmNoID09ICdc
JycgfHwgbmNoID09ICc7JyB8fCBuY2ggPT0gJygnCiAgICAgICB8fCBuY2ggPT0gJyknIHx8IG5j
aCA9PSAnWycgIHx8IG5jaCA9PSAnXScgfHwgbmNoID09ICcjJwogICAgICAgfHwgbmNoID09ICc/
JyB8fCBuY2ggPT0gJ2AnICB8fCBuY2ggPT0gJywnIHx8IG5jaCA9PSAnLicpCiAgICAgcmV0dXJu
IG1ha2VfZml4bnVtIChjaCk7CiAKLSAgaW52YWxpZF9zeW50YXggKCI/IiwgcmVhZGNoYXJmdW4p
OworICBpbnZhbGlkX3N5bnRheCAoZnJhbWUsICI/Iik7CiB9CiAKIC8qIFJlYWQgYSBzdHJpbmcg
bGl0ZXJhbCAocHJlY2VkZWQgYnkgJyInKS4gICovCi1zdGF0aWMgTGlzcF9PYmplY3QKLXJlYWRf
c3RyaW5nX2xpdGVyYWwgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQorTGlzcF9PYmplY3QKK3Jl
YWRfc3RyaW5nX2xpdGVyYWwgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKIHsKICAgY2hh
ciBzdGFja2J1ZlsxMDI0XTsKICAgY2hhciAqcmVhZF9idWZmZXIgPSBzdGFja2J1ZjsKQEAgLTMy
ODQsNyArNDg3NSw3IEBAIHJlYWRfc3RyaW5nX2xpdGVyYWwgKExpc3BfT2JqZWN0IHJlYWRjaGFy
ZnVuKQogICBwdHJkaWZmX3QgbmNoYXJzID0gMDsKIAogICBpbnQgY2g7Ci0gIHdoaWxlICgoY2gg
PSBSRUFEQ0hBUikgPj0gMCAmJiBjaCAhPSAnXCInKQorICB3aGlsZSAoKGNoID0gUkVBRENIQVIg
KGZyYW1lKSkgPj0gMCAmJiBjaCAhPSAnXCInKQogICAgIHsKICAgICAgIGlmIChlbmQgLSBwIDwg
TUFYX01VTFRJQllURV9MRU5HVEgpCiAgICAgICAgIHsKQEAgLTMyOTksNyArNDg5MCw3IEBAIHJl
YWRfc3RyaW5nX2xpdGVyYWwgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQogICAgICAgaWYgKGNo
ID09ICdcXCcpCiAgICAgICAgIHsKICAgICAgICAgICAvKiBGaXJzdCBhcHBseSBzdHJpbmctc3Bl
Y2lmaWMgZXNjYXBlIHJ1bGVzOiAgKi8KLQkgIGNoID0gUkVBRENIQVI7CisgICAgICAgICAgY2gg
PSBSRUFEQ0hBUiAoZnJhbWUpOwogICAgICAgICAgIHN3aXRjaCAoY2gpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICBjYXNlICdzJzoKQEAgLTMzMTEsNyArNDkwMiw3IEBAIHJlYWRfc3RyaW5n
X2xpdGVyYWwgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQogICAgICAgICAgICAgICAvKiBgXFNQ
QycgYW5kIGBcTEYnIGdlbmVyYXRlIG5vIGNoYXJhY3RlcnMgYXQgYWxsLiAgKi8KICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICBkZWZhdWx0OgotCSAgICAgIGNoID0gcmVhZF9j
aGFyX2VzY2FwZSAocmVhZGNoYXJmdW4sIGNoKTsKKyAgICAgICAgICAgICAgY2ggPSByZWFkX2No
YXJfZXNjYXBlIChmcmFtZSwgY2gpOwogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KIApAQCAtMzM1Niw3ICs0OTQ3LDcgQEAgcmVhZF9zdHJpbmdfbGl0ZXJhbCAoTGlzcF9PYmpl
Y3QgcmVhZGNoYXJmdW4pCiAKICAgICAgICAgICAvKiBBbnkgbW9kaWZpZXJzIHJlbWFpbmluZyBh
cmUgaW52YWxpZC4gICovCiAgICAgICAgICAgaWYgKG1vZGlmaWVycykKLQkgICAgaW52YWxpZF9z
eW50YXggKCJJbnZhbGlkIG1vZGlmaWVyIGluIHN0cmluZyIsIHJlYWRjaGFyZnVuKTsKKyAgICAg
ICAgICAgIGludmFsaWRfc3ludGF4IChmcmFtZSwgIkludmFsaWQgbW9kaWZpZXIgaW4gc3RyaW5n
Iik7CiAgICAgICAgICAgcCArPSBDSEFSX1NUUklORyAoY2gsICh1bnNpZ25lZCBjaGFyICopIHAp
OwogICAgICAgICB9CiAgICAgICBlbHNlCkBAIC0zMzcxLDcgKzQ5NjIsNyBAQCByZWFkX3N0cmlu
Z19saXRlcmFsIChMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKICAgICB9CiAKICAgaWYgKGNoIDwg
MCkKLSAgICBlbmRfb2ZfZmlsZV9lcnJvciAoKTsKKyAgICBlbmRfb2ZfZmlsZV9lcnJvciAoZnJh
bWUpOwogCiAgIGlmICghZm9yY2VfbXVsdGlieXRlICYmIGZvcmNlX3NpbmdsZWJ5dGUpCiAgICAg
ewpAQCAtMzQ2NywyMyArNTA1OCwyMiBAQCB2ZWN0b3JfZnJvbV9yZXZfbGlzdCAoTGlzcF9PYmpl
Y3QgZWxlbXMpCiAgIHJldHVybiBvYmo7CiB9CiAKLXN0YXRpYyBMaXNwX09iamVjdCBnZXRfbGF6
eV9zdHJpbmcgKExpc3BfT2JqZWN0IHZhbCk7CiAKLXN0YXRpYyBMaXNwX09iamVjdAotYnl0ZWNv
ZGVfZnJvbV9yZXZfbGlzdCAoTGlzcF9PYmplY3QgZWxlbXMsIExpc3BfT2JqZWN0IHJlYWRjaGFy
ZnVuKQorTGlzcF9PYmplY3QKK2J5dGVjb2RlX2Zyb21fcmV2X2xpc3QgKHJlZ2lzdGVyIGxyZWFk
X2ZyYW1lICpmcmFtZSwgTGlzcF9PYmplY3QgZWxlbXMpCiB7CiAgIExpc3BfT2JqZWN0IG9iaiA9
IHZlY3Rvcl9mcm9tX3Jldl9saXN0IChlbGVtcyk7CiAgIExpc3BfT2JqZWN0ICp2ZWMgPSBYVkVD
VE9SIChvYmopLT5jb250ZW50czsKICAgcHRyZGlmZl90IHNpemUgPSBBU0laRSAob2JqKTsKIAot
ICBpZiAoaW5maWxlICYmIHNpemUgPj0gQ0xPU1VSRV9DT05TVEFOVFMpCisgIGlmIChmcmFtZS0+
aW5wdXQuZi5zdHJlYW0gJiYgc2l6ZSA+PSBDTE9TVVJFX0NPTlNUQU5UUykKICAgICB7CiAgICAg
ICAvKiBBbHdheXMgcmVhZCAnbGF6aWx5LWxvYWRlZCcgYnl0ZWNvZGUgKGdlbmVyYXRlZCBieSB0
aGUKICAgICAgICAgIGBieXRlLWNvbXBpbGUtZHluYW1pYycgZmVhdHVyZSBwcmlvciB0byBFbWFj
cyAzMCkgZWFnZXJseSwgdG8KICAgICAgICAgIGF2b2lkIGNvZGUgaW4gdGhlIGZhc3QgcGF0aCBk
dXJpbmcgZXhlY3V0aW9uLiAgKi8KICAgICAgIGlmIChDT05TUCAodmVjW0NMT1NVUkVfQ09ERV0p
CiAgICAgICAgICAgJiYgRklYTlVNUCAoWENEUiAodmVjW0NMT1NVUkVfQ09ERV0pKSkKLSAgICAg
ICAgdmVjW0NMT1NVUkVfQ09ERV0gPSBnZXRfbGF6eV9zdHJpbmcgKHZlY1tDTE9TVVJFX0NPREVd
KTsKKyAgICAgICAgdmVjW0NMT1NVUkVfQ09ERV0gPSBnZXRfbGF6eV9zdHJpbmcgKGZyYW1lLCB2
ZWNbQ0xPU1VSRV9DT0RFXSk7CiAKICAgICAgIC8qIExhemlseS1sb2FkZWQgYnl0ZWNvZGUgaXMg
cmVwcmVzZW50ZWQgYnkgdGhlIGNvbnN0YW50IHNsb3QgYmVpbmcgbmlsCiAgICAgICAgICBhbmQg
dGhlIGJ5dGVjb2RlIHNsb3QgYSAobGF6aWx5IGxvYWRlZCkgc3RyaW5nIGNvbnRhaW5pbmcgdGhl
CkBAIC0zNDk0LDEzICs1MDg0LDEzIEBAIGJ5dGVjb2RlX2Zyb21fcmV2X2xpc3QgKExpc3BfT2Jq
ZWN0IGVsZW1zLCBMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKICAgICAgICAgICBlYXNzZXJ0ICgh
U1RSSU5HX01VTFRJQllURSAoZW5jKSk7CiAgICAgICAgICAgLyogVGhlIHN0cmluZyAoYWx3YXlz
IHVuaWJ5dGUpIG11c3QgYmUgZGVjb2RlZCB0byBiZSBwYXJzZWQuICAqLwogICAgICAgICAgIGVu
YyA9IEZkZWNvZGVfY29kaW5nX3N0cmluZyAoZW5jLAotCQkJCSAgICAgICBFUSAocmVhZGNoYXJm
dW4sCi0JCQkJCSAgIFFnZXRfZW1hY3NfbXVsZV9maWxlX2NoYXIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoRlJPTV9GSUxFX1AgKGZyYW1lLT5pbnR5cGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZnJhbWUtPmlucHV0LmYubXVs
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUWVtYWNzX211bGUg
OiBRdXRmXzhfZW1hY3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR
dCwgUW5pbCk7CiAgICAgICAgICAgTGlzcF9PYmplY3QgcGFpciA9IEZyZWFkIChlbmMpOwogICAg
ICAgICAgIGlmICghQ09OU1AgKHBhaXIpKQotCSAgICBpbnZhbGlkX3N5bnRheCAoIkludmFsaWQg
Ynl0ZS1jb2RlIG9iamVjdCIsIHJlYWRjaGFyZnVuKTsKKyAgICAgICAgICAgIGludmFsaWRfc3lu
dGF4IChmcmFtZSwgIkludmFsaWQgYnl0ZS1jb2RlIG9iamVjdCIpOwogCiAgICAgICAgICAgdmVj
W0NMT1NVUkVfQ09ERV0gPSBYQ0FSIChwYWlyKTsKICAgICAgICAgICB2ZWNbQ0xPU1VSRV9DT05T
VEFOVFNdID0gWENEUiAocGFpcik7CkBAIC0zNTE4LDcgKzUxMDgsNyBAQCBieXRlY29kZV9mcm9t
X3Jldl9saXN0IChMaXNwX09iamVjdCBlbGVtcywgTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCiAg
ICAgICAgICAgICB8fCAoQ09OU1AgKHZlY1tDTE9TVVJFX0NPREVdKSAvKiBJbnRlcnByZXRlZCBm
dW5jdGlvbi4gICovCiAgICAgICAgICAgICAgICAgJiYgKENPTlNQICh2ZWNbQ0xPU1VSRV9DT05T
VEFOVFNdKQogICAgICAgICAgICAgICAgICAgICB8fCBOSUxQICh2ZWNbQ0xPU1VSRV9DT05TVEFO
VFNdKSkpKSkpCi0gICAgaW52YWxpZF9zeW50YXggKCJJbnZhbGlkIGJ5dGUtY29kZSBvYmplY3Qi
LCByZWFkY2hhcmZ1bik7CisgICAgaW52YWxpZF9zeW50YXggKGZyYW1lLCAiSW52YWxpZCBieXRl
LWNvZGUgb2JqZWN0Iik7CiAKICAgaWYgKFNUUklOR1AgKHZlY1tDTE9TVVJFX0NPREVdKSkKICAg
ICB7CkBAIC0zNTM4LDE5ICs1MTI4LDE5IEBAIGJ5dGVjb2RlX2Zyb21fcmV2X2xpc3QgKExpc3Bf
T2JqZWN0IGVsZW1zLCBMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKICAgcmV0dXJuIG9iajsKIH0K
IAotc3RhdGljIExpc3BfT2JqZWN0Ci1jaGFyX3RhYmxlX2Zyb21fcmV2X2xpc3QgKExpc3BfT2Jq
ZWN0IGVsZW1zLCBMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKK0xpc3BfT2JqZWN0CitjaGFyX3Rh
YmxlX2Zyb21fcmV2X2xpc3QgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwgTGlzcF9PYmpl
Y3QgZWxlbXMpCiB7CiAgIExpc3BfT2JqZWN0IG9iaiA9IHZlY3Rvcl9mcm9tX3Jldl9saXN0IChl
bGVtcyk7CiAgIGlmIChBU0laRSAob2JqKSA8IENIQVJfVEFCTEVfU1RBTkRBUkRfU0xPVFMpCi0g
ICAgaW52YWxpZF9zeW50YXggKCJJbnZhbGlkIHNpemUgY2hhci10YWJsZSIsIHJlYWRjaGFyZnVu
KTsKKyAgICBpbnZhbGlkX3N5bnRheCAoZnJhbWUsICJJbnZhbGlkIHNpemUgY2hhci10YWJsZSIp
OwogICBYU0VUUFZFQ1RZUEUgKFhWRUNUT1IgKG9iaiksIFBWRUNfQ0hBUl9UQUJMRSk7CiAgIHJl
dHVybiBvYmo7CiAKIH0KIAotc3RhdGljIExpc3BfT2JqZWN0Ci1zdWJfY2hhcl90YWJsZV9mcm9t
X3Jldl9saXN0IChMaXNwX09iamVjdCBlbGVtcywgTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCitM
aXNwX09iamVjdAorc3ViX2NoYXJfdGFibGVfZnJvbV9yZXZfbGlzdCAocmVnaXN0ZXIgbHJlYWRf
ZnJhbWUgKmZyYW1lLCBMaXNwX09iamVjdCBlbGVtcykKIHsKICAgLyogQSBzdWItY2hhci10YWJs
ZSBjYW4ndCBiZSByZWFkIGFzIGEgcmVndWxhciB2ZWN0b3IgYmVjYXVzZSBvZiB0d28KICAgICAg
QyBpbnRlZ2VyIGZpZWxkcy4gICovCkBAIC0zNTgxLDIzICs1MTcxLDIzIEBAIHN1Yl9jaGFyX3Rh
YmxlX2Zyb21fcmV2X2xpc3QgKExpc3BfT2JqZWN0IGVsZW1zLCBMaXNwX09iamVjdCByZWFkY2hh
cmZ1bikKICAgcmV0dXJuIHRibDsKIH0KIAotc3RhdGljIExpc3BfT2JqZWN0Ci1zdHJpbmdfcHJv
cHNfZnJvbV9yZXZfbGlzdCAoTGlzcF9PYmplY3QgZWxlbXMsIExpc3BfT2JqZWN0IHJlYWRjaGFy
ZnVuKQorTGlzcF9PYmplY3QKK3N0cmluZ19wcm9wc19mcm9tX3Jldl9saXN0IChyZWdpc3RlciBs
cmVhZF9mcmFtZSAqZnJhbWUsIExpc3BfT2JqZWN0IGVsZW1zKQogewogICBlbGVtcyA9IEZucmV2
ZXJzZSAoZWxlbXMpOwogICBpZiAoTklMUCAoZWxlbXMpIHx8ICFTVFJJTkdQIChYQ0FSIChlbGVt
cykpKQotICAgIGludmFsaWRfc3ludGF4ICgiIyIsIHJlYWRjaGFyZnVuKTsKKyAgICBpbnZhbGlk
X3N5bnRheCAoZnJhbWUsICIjIik7CiAgIExpc3BfT2JqZWN0IG9iaiA9IFhDQVIgKGVsZW1zKTsK
ICAgZm9yIChMaXNwX09iamVjdCB0bCA9IFhDRFIgKGVsZW1zKTsgIU5JTFAgKHRsKTspCiAgICAg
ewogICAgICAgTGlzcF9PYmplY3QgYmVnID0gWENBUiAodGwpOwogICAgICAgdGwgPSBYQ0RSICh0
bCk7CiAgICAgICBpZiAoTklMUCAodGwpKQotCWludmFsaWRfc3ludGF4ICgiSW52YWxpZCBzdHJp
bmcgcHJvcGVydHkgbGlzdCIsIHJlYWRjaGFyZnVuKTsKKyAgICAgICAgaW52YWxpZF9zeW50YXgg
KGZyYW1lLCAiSW52YWxpZCBzdHJpbmcgcHJvcGVydHkgbGlzdCIpOwogICAgICAgTGlzcF9PYmpl
Y3QgZW5kID0gWENBUiAodGwpOwogICAgICAgdGwgPSBYQ0RSICh0bCk7CiAgICAgICBpZiAoTklM
UCAodGwpKQotCWludmFsaWRfc3ludGF4ICgiSW52YWxpZCBzdHJpbmcgcHJvcGVydHkgbGlzdCIs
IHJlYWRjaGFyZnVuKTsKKyAgICAgICAgaW52YWxpZF9zeW50YXggKGZyYW1lLCAiSW52YWxpZCBz
dHJpbmcgcHJvcGVydHkgbGlzdCIpOwogICAgICAgTGlzcF9PYmplY3QgcGxpc3QgPSBYQ0FSICh0
bCk7CiAgICAgICB0bCA9IFhDRFIgKHRsKTsKICAgICAgIEZzZXRfdGV4dF9wcm9wZXJ0aWVzIChi
ZWcsIGVuZCwgcGxpc3QsIG9iaik7CkBAIC0zNjA2LDM1ICs1MTk2LDM1IEBAIHN0cmluZ19wcm9w
c19mcm9tX3Jldl9saXN0IChMaXNwX09iamVjdCBlbGVtcywgTGlzcF9PYmplY3QgcmVhZGNoYXJm
dW4pCiB9CiAKIC8qIFJlYWQgYSBib29sIHZlY3RvciAocHJlY2VkZWQgYnkgIiMmIikuICAqLwot
c3RhdGljIExpc3BfT2JqZWN0Ci1yZWFkX2Jvb2xfdmVjdG9yIChMaXNwX09iamVjdCByZWFkY2hh
cmZ1bikKK0xpc3BfT2JqZWN0CityZWFkX2Jvb2xfdmVjdG9yIChyZWdpc3RlciBscmVhZF9mcmFt
ZSAqZnJhbWUpCiB7CiAgIEVNQUNTX0lOVCBsZW5ndGggPSAwOwogICBmb3IgKDs7KQogICAgIHsK
LSAgICAgIGludCBjID0gUkVBRENIQVI7CisgICAgICBpbnQgYyA9IFJFQURDSEFSIChmcmFtZSk7
CiAgICAgICBpZiAoYyA8ICcwJyB8fCBjID4gJzknKQogICAgICAgICB7CiAgICAgICAgICAgaWYg
KGMgIT0gJyInKQotCSAgICBpbnZhbGlkX3N5bnRheCAoIiMmIiwgcmVhZGNoYXJmdW4pOworICAg
ICAgICAgICAgaW52YWxpZF9zeW50YXggKGZyYW1lLCAiIyYiKTsKICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgaWYgKGNrZF9tdWwgKCZsZW5ndGgsIGxlbmd0aCwgMTApCiAgICAg
ICAgICAgfHwgY2tkX2FkZCAoJmxlbmd0aCwgbGVuZ3RoLCBjIC0gJzAnKSkKLQlpbnZhbGlkX3N5
bnRheCAoIiMmIiwgcmVhZGNoYXJmdW4pOworICAgICAgICBpbnZhbGlkX3N5bnRheCAoZnJhbWUs
ICIjJiIpOwogICAgIH0KICAgaWYgKEJPT0xfVkVDVE9SX0xFTkdUSF9NQVggPCBsZW5ndGgpCi0g
ICAgaW52YWxpZF9zeW50YXggKCIjJiIsIHJlYWRjaGFyZnVuKTsKKyAgICBpbnZhbGlkX3N5bnRh
eCAoZnJhbWUsICIjJiIpOwogCiAgIHB0cmRpZmZfdCBzaXplX2luX2NoYXJzID0gYm9vbF92ZWN0
b3JfYnl0ZXMgKGxlbmd0aCk7Ci0gIExpc3BfT2JqZWN0IHN0ciA9IHJlYWRfc3RyaW5nX2xpdGVy
YWwgKHJlYWRjaGFyZnVuKTsKKyAgTGlzcF9PYmplY3Qgc3RyID0gcmVhZF9zdHJpbmdfbGl0ZXJh
bCAoZnJhbWUpOwogICBpZiAoU1RSSU5HX01VTFRJQllURSAoc3RyKQogICAgICAgfHwgIShzaXpl
X2luX2NoYXJzID09IFNDSEFSUyAoc3RyKQotCSAgIC8qIFdlIHVzZWQgdG8gcHJpbnQgMSBjaGFy
IHRvbyBtYW55IHdoZW4gdGhlIG51bWJlciBvZiBiaXRzCisvKiBXZSB1c2VkIHRvIHByaW50IDEg
Y2hhciB0b28gbWFueSB3aGVuIHRoZSBudW1iZXIgb2YgYml0cwogICAgd2FzIGEgbXVsdGlwbGUg
b2YgOC4gIEFjY2VwdCBzdWNoIGlucHV0IGluIGNhc2UgaXQgY2FtZQogICAgZnJvbSBhbiBvbGQg
dmVyc2lvbi4gICovCiAgICAgICAgICAgIHx8IGxlbmd0aCA9PSAoU0NIQVJTIChzdHIpIC0gMSkg
KiBCT09MX1ZFQ1RPUl9CSVRTX1BFUl9DSEFSKSkKLSAgICBpbnZhbGlkX3N5bnRheCAoIiMmLi4u
IiwgcmVhZGNoYXJmdW4pOworICAgIGludmFsaWRfc3ludGF4IChmcmFtZSwgIiMmLi4uIik7CiAK
ICAgTGlzcF9PYmplY3Qgb2JqID0gbWFrZV91bmluaXRfYm9vbF92ZWN0b3IgKGxlbmd0aCk7CiAg
IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBib29sX3ZlY3Rvcl91Y2hhcl9kYXRhIChvYmopOwpAQCAt
MzY0OCwxNCArNTIzOCwxNCBAQCByZWFkX2Jvb2xfdmVjdG9yIChMaXNwX09iamVjdCByZWFkY2hh
cmZ1bikKIC8qIFNraXAgKGFuZCBvcHRpb25hbGx5IHJlbWVtYmVyKSBhIGxhemlseS1sb2FkZWQg
c3RyaW5nCiAgICBwcmVjZWRlZCBieSAiI0AiLiAgUmV0dXJuIHRydWUgaWYgdGhpcyB3YXMgYSBu
b3JtYWwgc2tpcCwKICAgIGZhbHNlIGlmIHdlIHJlYWQgI0AwMCAod2hpY2ggc2tpcHMgdG8gRU9C
L0VPRikuICAqLwotc3RhdGljIGJvb2wKLXNraXBfbGF6eV9zdHJpbmcgKExpc3BfT2JqZWN0IHJl
YWRjaGFyZnVuKQorYm9vbAorc2tpcF9sYXp5X3N0cmluZyAocmVnaXN0ZXIgbHJlYWRfZnJhbWUg
KmZyYW1lKQogewogICBwdHJkaWZmX3QgbnNraXAgPSAwOwogICBwdHJkaWZmX3QgZGlnaXRzID0g
MDsKICAgZm9yICg7OykKICAgICB7Ci0gICAgICBpbnQgYyA9IFJFQURDSEFSOworICAgICAgaW50
IGMgPSBSRUFEQ0hBUiAoZnJhbWUpOwogICAgICAgaWYgKGMgPCAnMCcgfHwgYyA+ICc5JykKICAg
ICAgICAgewogICAgICAgICAgIGlmIChuc2tpcCA+IDApCkBAIC0zNjY1LDM1ICs1MjU1LDM1IEBA
IHNraXBfbGF6eV9zdHJpbmcgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQogICAgICAgICAgICAg
ICAgYSBzcGFjZS4gICovCiAgICAgICAgICAgICBuc2tpcC0tOwogICAgICAgICAgIGVsc2UKLQkg
ICAgVU5SRUFEIChjKTsKKyAgICAgICAgICAgIFVOUkVBRCAoZnJhbWUsIGMpOwogICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICBpZiAoY2tkX211bCAoJm5za2lwLCBuc2tpcCwgMTAp
CiAgICAgICAgICAgfHwgY2tkX2FkZCAoJm5za2lwLCBuc2tpcCwgYyAtICcwJykpCi0JaW52YWxp
ZF9zeW50YXggKCIjQCIsIHJlYWRjaGFyZnVuKTsKKyAgICAgICAgaW52YWxpZF9zeW50YXggKGZy
YW1lLCAiI0AiKTsKICAgICAgIGRpZ2l0cysrOwogICAgICAgaWYgKGRpZ2l0cyA9PSAyICYmIG5z
a2lwID09IDApCiAgICAgICAgIHsKICAgICAgICAgICAvKiAjQDAwIG1lYW5zICJyZWFkIG5pbCBh
bmQgc2tpcCB0byBlbmQiICovCi0JICBza2lwX2R5bl9lb2YgKHJlYWRjaGFyZnVuKTsKKyAgICAg
ICAgICBza2lwX2R5bl9lb2YgKGZyYW1lKTsKICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgaWYgKGxvYWRfZm9yY2VfZG9jX3N0cmluZ3MgJiYgRlJPTV9GSUxF
X1AgKHJlYWRjaGFyZnVuKSkKKyAgaWYgKGxvYWRfZm9yY2VfZG9jX3N0cmluZ3MgJiYgRlJPTV9G
SUxFX1AgKGZyYW1lLT5pbnR5cGUpKQogICAgIHsKICAgICAgIC8qIElmIHdlIGFyZSBzdXBwb3Nl
ZCB0byBmb3JjZSBkb2Mgc3RyaW5ncyBpbnRvIGNvcmUgcmlnaHQgbm93LAogICAgICAgICAgcmVj
b3JkIHRoZSBsYXN0IHN0cmluZyB0aGF0IHdlIHNraXBwZWQsCiAgICAgICAgICBhbmQgcmVjb3Jk
IHdoZXJlIGluIHRoZSBmaWxlIGl0IGNvbWVzIGZyb20uICAqLwogCiAgICAgICAvKiBGaXJzdCBl
eGNoYW5nZSB0aGUgdHdvIHNhdmVkX3N0cmluZ3MuICAqLwotICAgICAgc3RhdGljX2Fzc2VydCAo
QVJSQVlFTFRTIChzYXZlZF9zdHJpbmdzKSA9PSAyKTsKLSAgICAgIHN0cnVjdCBzYXZlZF9zdHJp
bmcgdCA9IHNhdmVkX3N0cmluZ3NbMF07Ci0gICAgICBzYXZlZF9zdHJpbmdzWzBdID0gc2F2ZWRf
c3RyaW5nc1sxXTsKLSAgICAgIHNhdmVkX3N0cmluZ3NbMV0gPSB0OworICAgICAgc3RhdGljX2Fz
c2VydCAoQVJSQVlFTFRTIChmcmFtZS0+c2F2ZWRfc3RyaW5ncykgPT0gMik7CisgICAgICBzdHJ1
Y3Qgc2F2ZWRfc3RyaW5nIHQgPSBmcmFtZS0+c2F2ZWRfc3RyaW5nc1swXTsKKyAgICAgIGZyYW1l
LT5zYXZlZF9zdHJpbmdzWzBdID0gZnJhbWUtPnNhdmVkX3N0cmluZ3NbMV07CisgICAgICBmcmFt
ZS0+c2F2ZWRfc3RyaW5nc1sxXSA9IHQ7CiAKICAgICAgIGVudW0geyBleHRyYSA9IDEwMCB9Owot
ICAgICAgc3RydWN0IHNhdmVkX3N0cmluZyAqc3MgPSAmc2F2ZWRfc3RyaW5nc1swXTsKKyAgICAg
IHN0cnVjdCBzYXZlZF9zdHJpbmcgKnNzID0gJihmcmFtZS0+c2F2ZWRfc3RyaW5nc1swXSk7CiAg
ICAgICBpZiAoc3MtPnNpemUgPT0gMCkKICAgICAgICAgewogICAgICAgICAgIHNzLT5zaXplID0g
bnNraXAgKyBleHRyYTsKQEAgLTM3MDUsMTQgKzUyOTUsMTQgQEAgc2tpcF9sYXp5X3N0cmluZyAo
TGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCiAgICAgICAgICAgc3MtPnN0cmluZyA9IHhyZWFsbG9j
IChzcy0+c3RyaW5nLCBzcy0+c2l6ZSk7CiAgICAgICAgIH0KIAotICAgICAgZmlsZV9zdHJlYW0g
aW5zdHJlYW0gPSBpbmZpbGUtPnN0cmVhbTsKLSAgICAgIHNzLT5wb3NpdGlvbiA9IChmaWxlX3Rl
bGwgKGluc3RyZWFtKSAtIGluZmlsZS0+bG9va2FoZWFkKTsKKyAgICAgIGZpbGVfc3RyZWFtIGlu
c3RyZWFtID0gZnJhbWUtPmlucHV0LmYuc3RyZWFtOworICAgICAgc3MtPnBvc2l0aW9uID0gKGZp
bGVfdGVsbCAoaW5zdHJlYW0pIC0gZnJhbWUtPmlucHV0LmYubG9va2FoZWFkKTsKIAogICAgICAg
LyogQ29weSB0aGF0IG1hbnkgYnl0ZXMgaW50byB0aGUgc2F2ZWQgc3RyaW5nLiAgKi8KICAgICAg
IHB0cmRpZmZfdCBpID0gMDsKICAgICAgIGludCBjID0gMDsKLSAgICAgIGZvciAoaW50IG4gPSBt
aW4gKG5za2lwLCBpbmZpbGUtPmxvb2thaGVhZCk7IG4gPiAwOyBuLS0pCi0Jc3MtPnN0cmluZ1tp
KytdID0gYyA9IGluZmlsZS0+YnVmWy0taW5maWxlLT5sb29rYWhlYWRdOworICAgICAgZm9yIChp
bnQgbiA9IG1pbiAobnNraXAsIGZyYW1lLT5pbnB1dC5mLmxvb2thaGVhZCk7IG4gPiAwOyBuLS0p
CisgICAgICAgIHNzLT5zdHJpbmdbaSsrXSA9IGMgPSBmcmFtZS0+aW5wdXQuZi5idWZbLS0oZnJh
bWUtPmlucHV0LmYubG9va2FoZWFkKV07CiAgICAgICBibG9ja19pbnB1dCAoKTsKICAgICAgIGZv
ciAoOyBpIDwgbnNraXAgJiYgYyA+PSAwOyBpKyspCiAgICAgICAgIHNzLT5zdHJpbmdbaV0gPSBj
ID0gZmlsZV9nZXRfY2hhciAoaW5zdHJlYW0pOwpAQCAtMzcyMiwxNSArNTMxMiwxNSBAQCBza2lw
X2xhenlfc3RyaW5nIChMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKICAgICB9CiAgIGVsc2UKICAg
ICAvKiBTa2lwIHRoYXQgbWFueSBieXRlcy4gICovCi0gICAgc2tpcF9keW5fYnl0ZXMgKHJlYWRj
aGFyZnVuLCBuc2tpcCk7CisgICAgc2tpcF9keW5fYnl0ZXMgKGZyYW1lLCBuc2tpcCk7CiAKICAg
cmV0dXJuIHRydWU7CiB9CiAKIC8qIEdpdmVuIGEgbGF6eS1sb2FkZWQgc3RyaW5nIGRlc2lnbmF0
b3IgVkFMLCByZXR1cm4gdGhlIGFjdHVhbCBzdHJpbmcuCiAgICBWQUwgaXMgKEZJTEVOQU1FIC4g
UE9TKS4gICovCi1zdGF0aWMgTGlzcF9PYmplY3QKLWdldF9sYXp5X3N0cmluZyAoTGlzcF9PYmpl
Y3QgdmFsKQorTGlzcF9PYmplY3QKK2dldF9sYXp5X3N0cmluZyAocmVnaXN0ZXIgbHJlYWRfZnJh
bWUgKmZyYW1lLExpc3BfT2JqZWN0IHZhbCkKIHsKICAgLyogR2V0IGEgZG9jIHN0cmluZyBmcm9t
IHRoZSBmaWxlIHdlIGFyZSBsb2FkaW5nLgogICAgICBJZiBpdCdzIGluIGEgc2F2ZWQgc3RyaW5n
LCBnZXQgaXQgZnJvbSB0aGVyZS4KQEAgLTM3NDQsOCArNTMzNCw4IEBAIGdldF9sYXp5X3N0cmlu
ZyAoTGlzcF9PYmplY3QgdmFsKQogICAgICBzdHJpbmdzIHN0YXJ0ZWQgd2l0aCBhbiBhc3Rlcmlz
ayk7IHRha2UgdGhlIGFic29sdXRlIHZhbHVlIGZvcgogICAgICBjb21wYXRpYmlsaXR5LiAgKi8K
ICAgRU1BQ1NfSU5UIHBvcyA9IGVhYnMgKFhGSVhOVU0gKFhDRFIgKHZhbCkpKTsKLSAgc3RydWN0
IHNhdmVkX3N0cmluZyAqc3MgPSAmc2F2ZWRfc3RyaW5nc1swXTsKLSAgc3RydWN0IHNhdmVkX3N0
cmluZyAqc3NlbmQgPSBzcyArIEFSUkFZRUxUUyAoc2F2ZWRfc3RyaW5ncyk7CisgIHN0cnVjdCBz
YXZlZF9zdHJpbmcgKnNzID0gJihmcmFtZS0+c2F2ZWRfc3RyaW5nc1swXSk7CisgIHN0cnVjdCBz
YXZlZF9zdHJpbmcgKnNzZW5kID0gc3MgKyBBUlJBWUVMVFMgKGZyYW1lLT5zYXZlZF9zdHJpbmdz
KTsKICAgd2hpbGUgKHNzIDwgc3NlbmQKICAgICAgICAgICYmICEocG9zID49IHNzLT5wb3NpdGlv
biAmJiBwb3MgPCBzcy0+cG9zaXRpb24gKyBzcy0+bGVuZ3RoKSkKICAgICBzcysrOwpAQCAtMzc4
OSw5MiArNTM3OSwzMCBAQCBzeW1ib2xfY2hhcl9zcGFuIChjb25zdCBjaGFyICpzKQogICByZXR1
cm4gcCAtIHM7CiB9CiAKLXN0YXRpYyB2b2lkCi1za2lwX3NwYWNlX2FuZF9jb21tZW50cyAoTGlz
cF9PYmplY3QgcmVhZGNoYXJmdW4pCit2b2lkCitza2lwX3NwYWNlX2FuZF9jb21tZW50cyAocmVn
aXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKQogewogICBpbnQgYzsKICAgZG8KICAgICB7Ci0gICAg
ICBjID0gUkVBRENIQVI7CisgICAgICBjID0gUkVBRENIQVIgKGZyYW1lKTsKICAgICAgIGlmIChj
ID09ICc7JykKICAgICAgICAgZG8KLQkgIGMgPSBSRUFEQ0hBUjsKKyAgICAgICAgICBjID0gUkVB
RENIQVIgKGZyYW1lKTsKICAgICAgICAgd2hpbGUgKGMgPj0gMCAmJiBjICE9ICdcbicpOwogICAg
ICAgaWYgKGMgPCAwKQotCWVuZF9vZl9maWxlX2Vycm9yICgpOworICAgICAgICBlbmRfb2ZfZmls
ZV9lcnJvciAoZnJhbWUpOwogICAgIH0KICAgd2hpbGUgKGMgPD0gMzIgfHwgYyA9PSBOT19CUkVB
S19TUEFDRSk7Ci0gIFVOUkVBRCAoYyk7CisgIFVOUkVBRCAoZnJhbWUsIGMpOwogfQogCi0vKiBX
aGVuIGFuIG9iamVjdCBpcyByZWFkLCB0aGUgdHlwZSBvZiB0aGUgdG9wIHJlYWQgc3RhY2sgZW50
cnkgaW5kaWNhdGVzCi0gICB0aGUgc3ludGFjdGljIGNvbnRleHQuICAqLwotZW51bSByZWFkX2Vu
dHJ5X3R5cGUKLXsKLQkJCQkvKiBwcmVjZWRpbmcgc3ludGFjdGljIGNvbnRleHQgKi8KLSAgUkVf
bGlzdF9zdGFydCwJCS8qICIoIiAqLwotCi0gIFJFX2xpc3QsCQkJLyogIigiICgrIE9CSkVDVCkg
Ki8KLSAgUkVfbGlzdF9kb3QsCQkJLyogIigiICgrIE9CSkVDVCkgIi4iICovCi0KLSAgUkVfdmVj
dG9yLAkJCS8qICJbIiAoKiBPQkpFQ1QpICovCi0gIFJFX3JlY29yZCwJCQkvKiAiI3MoIiAoKiBP
QkpFQ1QpICovCi0gIFJFX2NoYXJfdGFibGUsCQkvKiAiI15bIiAoKiBPQkpFQ1QpICovCi0gIFJF
X3N1Yl9jaGFyX3RhYmxlLAkJLyogIiNeXlsiICgqIE9CSkVDVCkgKi8KLSAgUkVfYnl0ZV9jb2Rl
LAkJCS8qICIjWyIgKCogT0JKRUNUKSAqLwotICBSRV9zdHJpbmdfcHJvcHMsCQkvKiAiIygiICgq
IE9CSkVDVCkgKi8KLQotICBSRV9zcGVjaWFsLAkJCS8qICInIiB8ICIjJyIgfCAiYCIgfCAiLCIg
fCAiLEAiICovCi0KLSAgUkVfbnVtYmVyZWQsCQkJLyogIiMiICgrIERJR0lUKSAiPSIgKi8KLX07
Ci0KLXN0cnVjdCByZWFkX3N0YWNrX2VudHJ5Ci17Ci0gIGVudW0gcmVhZF9lbnRyeV90eXBlIHR5
cGU7Ci0gIHVuaW9uIHsKLSAgICAvKiBSRV9saXN0LCBSRV9saXN0X2RvdCAqLwotICAgIHN0cnVj
dCB7Ci0gICAgICBMaXNwX09iamVjdCBoZWFkOwkJLyogZmlyc3QgY29ucyBvZiBsaXN0ICovCi0g
ICAgICBMaXNwX09iamVjdCB0YWlsOwkJLyogbGFzdCBjb25zIG9mIGxpc3QgKi8KLSAgICB9IGxp
c3Q7Ci0KLSAgICAvKiBSRV92ZWN0b3IsIFJFX3JlY29yZCwgUkVfY2hhcl90YWJsZSwgUkVfc3Vi
X2NoYXJfdGFibGUsCi0gICAgICAgUkVfYnl0ZV9jb2RlLCBSRV9zdHJpbmdfcHJvcHMgKi8KLSAg
ICBzdHJ1Y3QgewotICAgICAgTGlzcF9PYmplY3QgZWxlbXM7CS8qIGxpc3Qgb2YgZWxlbWVudHMg
aW4gcmV2ZXJzZSBvcmRlciAqLwotICAgICAgYm9vbCBvbGRfbG9jYXRlX3N5bXM7CS8qIG9sZCB2
YWx1ZSBvZiBsb2NhdGVfc3ltcyAqLwotICAgIH0gdmVjdG9yOwotCi0gICAgLyogUkVfc3BlY2lh
bCAqLwotICAgIHN0cnVjdCB7Ci0gICAgICBMaXNwX09iamVjdCBzeW1ib2w7CS8qIHN5bWJvbCBm
cm9tIHNwZWNpYWwgc3ludGF4ICovCi0gICAgfSBzcGVjaWFsOwotCi0gICAgLyogUkVfbnVtYmVy
ZWQgKi8KLSAgICBzdHJ1Y3QgewotICAgICAgTGlzcF9PYmplY3QgbnVtYmVyOwkvKiBudW1iZXIg
YXMgYSBmaXhudW0gKi8KLSAgICAgIExpc3BfT2JqZWN0IHBsYWNlaG9sZGVyOwkvKiBwbGFjZWhv
bGRlciBvYmplY3QgKi8KLSAgICB9IG51bWJlcmVkOwotICB9IHU7Ci19OwotCi1zdHJ1Y3QgcmVh
ZF9zdGFjawotewotICBzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSAqc3RhY2s7ICAvKiBiYXNlIG9m
IHN0YWNrICovCi0gIHB0cmRpZmZfdCBzaXplOwkJICAgLyogYWxsb2NhdGVkIHNpemUgaW4gZW50
cmllcyAqLwotICBwdHJkaWZmX3Qgc3A7CQkJICAgLyogY3VycmVudCBudW1iZXIgb2YgZW50cmll
cyAqLwotfTsKLQotc3RhdGljIHN0cnVjdCByZWFkX3N0YWNrIHJkc3RhY2sgPSB7TlVMTCwgMCwg
MH07Ci0KLXZvaWQKLW1hcmtfbHJlYWQgKHZvaWQpCitJTkxJTkUgdm9pZAorbWFya19yZHN0YWNr
IChzdHJ1Y3QgcmVhZF9zdGFjayAqcmRzdGFjaykKIHsKLSAgLyogTWFyayB0aGUgcmVhZCBzdGFj
aywgd2hpY2ggbWF5IGNvbnRhaW4gZGF0YSBub3Qgb3RoZXJ3aXNlIHRyYWNlZCAqLwotICBmb3Ig
KHB0cmRpZmZfdCBpID0gMDsgaSA8IHJkc3RhY2suc3A7IGkrKykKKyAgZm9yIChwdHJkaWZmX3Qg
aSA9IDA7IGkgPCByZHN0YWNrLT5zcDsgaSsrKQogICAgIHsKLSAgICAgIHN0cnVjdCByZWFkX3N0
YWNrX2VudHJ5ICplID0gJnJkc3RhY2suc3RhY2tbaV07CisgICAgICBzdHJ1Y3QgcmVhZF9zdGFj
a19lbnRyeSAqZSA9ICYocmRzdGFjay0+c3RhY2tbaV0pOwogICAgICAgc3dpdGNoIChlLT50eXBl
KQogICAgICAgICB7CiAgICAgICAgIGNhc2UgUkVfbGlzdF9zdGFydDoKQEAgLTM5MDMsNTUgKzU0
MzEsMTE2IEBAIG1hcmtfbHJlYWQgKHZvaWQpCiAgICAgfQogfQogCitJTkxJTkUgdm9pZAorbWFy
a19scmVhZF9pbnB1dCAobHJlYWRfZnJhbWUgKmZyYW1lKQoreworICBzd2l0Y2ggKGZyYW1lLT5p
bnR5cGUpCisgICAgeworICAgIGNhc2UgTFJFQURfSU5QVVRfRklMRToKKyAgICBjYXNlIExSRUFE
X0lOUFVUX0ZJTEVfTVVMRToKKyAgICAgIG1hcmtfb2JqZWN0IChmcmFtZS0+aW5wdXQuZi5jb2Rp
bmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9QUk9DRURVUkU6CisgICAg
ICBtYXJrX29iamVjdCAoZnJhbWUtPmlucHV0LnAucHJvYyk7CisgICAgICBicmVhazsKKyAgICBj
YXNlIExSRUFEX0lOUFVUX01BUktFUjoKKyAgICAgIG1hcmtfb2JqZWN0IChmcmFtZS0+aW5wdXQu
bS5tYXJrZXIpOworICAgICAgbWFya19vYmplY3QgKGZyYW1lLT5pbnB1dC5tLmIuYnVmZmVyKTsK
KyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJFQURfSU5QVVRfQlVGRkVSOgorICAgICAgbWFya19v
YmplY3QgKGZyYW1lLT5pbnB1dC5iLmJ1ZmZlcik7CisgICAgICBicmVhazsKKyAgICBjYXNlIExS
RUFEX0lOUFVUX1NUUklORzoKKyAgICAgIG1hcmtfb2JqZWN0IChmcmFtZS0+aW5wdXQucy5zdHJp
bmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9OVUxMOgorICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgIC8qIGRvIG5vdGhpbmcgKi8KKyAgICB9Cit9Cit2b2lk
CittYXJrX2xyZWFkICh2b2lkKQoreworICByZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUgPSBj
dXJyZW50X2ZyYW1lOworICAvKiBBbGwgdGhlIGZyYW1lIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRl
ZCBvbiB0aGUgQyBzdGFjayBzb21ld2hlcmUKKyAgICAgTm90IHN1cmUgaWYgdGhpcyBpcyByZWR1
bmRhbnQgb3IgcmVxdWlyZWQgKi8KKyAgd2hpbGUgKGZyYW1lICE9IE5VTEwpCisgICAgeworICAg
ICAgbWFya19scmVhZF9pbnB1dCAoZnJhbWUpOworICAgICAgbWFya19yZHN0YWNrICgmKGZyYW1l
LT5yZHN0YWNrKSk7CisgICAgICBtYXJrX29iamVjdCAoZnJhbWUtPmxvYWRzX2luX3Byb2dyZXNz
KTsKKyAgICAgIG1hcmtfb2JqZWN0IChmcmFtZS0+b2JqZWN0c19tYXApOworICAgICAgbWFya19v
YmplY3QgKGZyYW1lLT5vYmplY3RzX2NvbXBsZXRlZCk7CisgICAgICBtYXJrX29iamVjdCAoZnJh
bWUtPnN0YXJ0KTsKKyAgICAgIG1hcmtfb2JqZWN0IChmcmFtZS0+ZW5kKTsKKyAgICAgIG1hcmtf
b2JqZWN0IChmcmFtZS0+ZnVsbF9uYW1lKTsKKyAgICAgIG1hcmtfb2JqZWN0IChmcmFtZS0+bmFt
ZSk7CisgICAgICBtYXJrX29iamVjdCAoZnJhbWUtPnNvdXJjZW5hbWUpOworICAgICAgbWFya19v
YmplY3QgKGZyYW1lLT5yZWFkZnVuKTsKKyAgICAgIG1hcmtfb2JqZWN0IChmcmFtZS0+dmFsdWUp
OworICAgICAgbWFya19vYmplY3QgKGZyYW1lLT5lcnJvcik7CisgICAgICBpZiAoZnJhbWUtPm11
bGVfY2hhcnNldCkKKyAgICAgICAgbWFya19vYmplY3QgKGZyYW1lLT5tdWxlX2NoYXJzZXQtPmF0
dHJpYnV0ZXMpOworICAgICAgZnJhbWUgPSBmcmFtZS0+cHJldjsKKyAgICB9Cit9CisKIHN0YXRp
YyBpbmxpbmUgc3RydWN0IHJlYWRfc3RhY2tfZW50cnkgKgotcmVhZF9zdGFja190b3AgKHZvaWQp
CityZWFkX3N0YWNrX3RvcCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKQogewotICBlYXNz
dW1lIChyZHN0YWNrLnNwID4gMCk7Ci0gIHJldHVybiAmcmRzdGFjay5zdGFja1tyZHN0YWNrLnNw
IC0gMV07CisgIGVhc3N1bWUgKGZyYW1lLT5yZHN0YWNrLnNwID4gMCk7CisgIHJldHVybiAmKGZy
YW1lLT5yZHN0YWNrLnN0YWNrW2ZyYW1lLT5yZHN0YWNrLnNwIC0gMV0pOwogfQogCiBzdGF0aWMg
aW5saW5lIHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5ICoKLXJlYWRfc3RhY2tfcG9wICh2b2lkKQor
cmVhZF9zdGFja19wb3AgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKIHsKLSAgZWFzc3Vt
ZSAocmRzdGFjay5zcCA+IDApOwotICByZXR1cm4gJnJkc3RhY2suc3RhY2tbLS1yZHN0YWNrLnNw
XTsKKworCisKKyAgZWFzc3VtZSAoZnJhbWUtPnJkc3RhY2suc3AgPiAwKTsKKyAgcmV0dXJuICYo
ZnJhbWUtPnJkc3RhY2suc3RhY2tbLS0oZnJhbWUtPnJkc3RhY2suc3ApXSk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbAotcmVhZF9zdGFja19lbXB0eV9wIChwdHJkaWZmX3QgYmFzZV9zcCkKK0lO
TElORSBib29sCityZWFkX3N0YWNrX2VtcHR5X3AgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFt
ZSkKIHsKLSAgcmV0dXJuIHJkc3RhY2suc3AgPD0gYmFzZV9zcDsKKyAgZWFzc2VydCAoZnJhbWUt
PmJhc2Vfc3AgPT0gMCk7CisgIHJldHVybiBmcmFtZS0+cmRzdGFjay5zcCA8PSBmcmFtZS0+YmFz
ZV9zcDsKIH0KIAogTk9fSU5MSU5FIHN0YXRpYyB2b2lkCi1ncm93X3JlYWRfc3RhY2sgKHZvaWQp
Citncm93X3JlYWRfc3RhY2sgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKIHsKLSAgc3Ry
dWN0IHJlYWRfc3RhY2sgKnJzID0gJnJkc3RhY2s7CisgIHN0cnVjdCByZWFkX3N0YWNrICpycyA9
ICZmcmFtZS0+cmRzdGFjazsKICAgZWFzc2VydCAocnMtPnNwID09IHJzLT5zaXplKTsKICAgcnMt
PnN0YWNrID0geHBhbGxvYyAocnMtPnN0YWNrLCAmcnMtPnNpemUsIDEsIC0xLCBzaXplb2YgKnJz
LT5zdGFjayk7CiAgIGVhc3NlcnQgKHJzLT5zcCA8IHJzLT5zaXplKTsKIH0KIAotc3RhdGljIGlu
bGluZSB2b2lkCi1yZWFkX3N0YWNrX3B1c2ggKHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5IGUpCitJ
TkxJTkUgdm9pZAorcmVhZF9zdGFja19wdXNoIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUs
c3RydWN0IHJlYWRfc3RhY2tfZW50cnkgZSkKIHsKLSAgaWYgKHJkc3RhY2suc3AgPj0gcmRzdGFj
ay5zaXplKQotICAgIGdyb3dfcmVhZF9zdGFjayAoKTsKLSAgcmRzdGFjay5zdGFja1tyZHN0YWNr
LnNwKytdID0gZTsKKyAgaWYgKGZyYW1lLT5yZHN0YWNrLnNwID49IGZyYW1lLT5yZHN0YWNrLnNp
emUpCisgICAgZ3Jvd19yZWFkX3N0YWNrIChmcmFtZSk7CisgIGZyYW1lLT5yZHN0YWNrLnN0YWNr
W2ZyYW1lLT5yZHN0YWNrLnNwKytdID0gZTsKIH0KIAogc3RhdGljIHZvaWQKLXJlYWRfc3RhY2tf
cmVzZXQgKGludG1heF90IHNwKQorcmVhZF9zdGFja19yZXNldCAodm9pZCAqcCkKIHsKLSAgZWFz
c2VydCAoc3AgPD0gcmRzdGFjay5zcCk7Ci0gIHJkc3RhY2suc3AgPSBzcDsKKyAgcmVnaXN0ZXIg
bHJlYWRfZnJhbWUgKmZyYW1lID0gcDsKKyAgZWFzc2VydCAoZnJhbWUtPmJhc2Vfc3AgPT0gMCk7
CisgIGVhc3NlcnQgKGZyYW1lLT5iYXNlX3NwIDw9IGZyYW1lLT5yZHN0YWNrLnNwKTsKKyAgZnJh
bWUtPnJkc3RhY2suc3AgPSBmcmFtZS0+YmFzZV9zcDsKIH0KIAotI2RlZmluZSBSRUFEX0FORF9C
VUZGRVIoYykJCQlcCi0gIGMgPSBSRUFEQ0hBUjsJCQkJCVwKKyNkZWZpbmUgUkVBRF9BTkRfQlVG
RkVSKGZyYW1lLGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
YyA9IFJFQURDSEFSIChmcmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgaWYgKGMgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBJTlZBTElEX1NZTlRBWF9XSVRI
X0JVRkZFUiAoKTsJCVwKLSAgaWYgKG11bHRpYnl0ZSkJCQkJXAorICAgIElOVkFMSURfU1lOVEFY
X1dJVEhfQlVGRkVSIChmcmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICBpZiAoZnJhbWUtPm11bHRpYnl0ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgIHAgKz0gQ0hBUl9TVFJJTkcgKGMsICh1bnNpZ25lZCBjaGFy
ICopIHApOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBlbHNlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
ICpwKysgPSBjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXApAQCAtMzk1OSwyMSArNTU0OCwyMiBAQCAjZGVmaW5lIFJFQURfQU5EX0JV
RkZFUihjKQkJCVwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIG9mZnNldCA9IHAgLSByZWFkX2J1
ZmZlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIHJl
YWRfYnVmZmVyID0gZ3Jvd19yZWFkX2J1ZmZlciAocmVhZF9idWZmZXIsIG9mZnNldCwJCVwKLQkJ
CQkgICAgICAgJmhlYXBidWYsICZyZWFkX2J1ZmZlcl9zaXplLCBjb3VudCk7IFwKKwkJCQkgICAg
ICAmaGVhcGJ1ZiwgJnJlYWRfYnVmZmVyX3NpemUsCVwKKwkJCQkgICAgICBjb3VudCk7CQkJCVwK
ICAgICAgIHAgPSByZWFkX2J1ZmZlciArIG9mZnNldDsJCQkJCQlcCiAgICAgICBlbmQgPSByZWFk
X2J1ZmZlciArIHJlYWRfYnVmZmVyX3NpemU7CQkJCVwKICAgICB9CiAKLSNkZWZpbmUgSU5WQUxJ
RF9TWU5UQVhfV0lUSF9CVUZGRVIoKQkJXAorI2RlZmluZSBJTlZBTElEX1NZTlRBWF9XSVRIX0JV
RkZFUihmcmFtZSkJXAogICB7CQkJCQkJXAogICAgICpwID0gMDsJCQkJCVwKLSAgICBpbnZhbGlk
X3N5bnRheCAocmVhZF9idWZmZXIsIHJlYWRjaGFyZnVuKTsJXAorICAgIGludmFsaWRfc3ludGF4
IChmcmFtZSwgcmVhZF9idWZmZXIpOwlcCiAgIH0KIAogLyogUmVhZCBhIExpc3Agb2JqZWN0Lgog
ICAgSWYgTE9DQVRFX1NZTVMgaXMgdHJ1ZSwgc3ltYm9scyBhcmUgcmVhZCB3aXRoIHBvc2l0aW9u
LiAgKi8KLXN0YXRpYyBMaXNwX09iamVjdAotcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVu
LCBib29sIGxvY2F0ZV9zeW1zKQorTGlzcF9PYmplY3QKK3JlYWQwIChyZWdpc3RlciBscmVhZF9m
cmFtZSAqZnJhbWUpCiB7CiAgIGNoYXIgc3RhY2tidWZbNjRdOwogICBjaGFyICpyZWFkX2J1ZmZl
ciA9IHN0YWNrYnVmOwpAQCAtMzk4Miw4ICs1NTcyLDEwIEBAIHJlYWQwIChMaXNwX09iamVjdCBy
ZWFkY2hhcmZ1biwgYm9vbCBsb2NhdGVfc3ltcykKICAgY2hhciAqaGVhcGJ1ZiA9IE5VTEw7CiAK
ICAgc3BlY3BkbF9yZWYgYmFzZV9wZGwgPSBTUEVDUERMX0lOREVYICgpOwotICBwdHJkaWZmX3Qg
YmFzZV9zcCA9IHJkc3RhY2suc3A7Ci0gIHJlY29yZF91bndpbmRfcHJvdGVjdF9pbnRtYXggKHJl
YWRfc3RhY2tfcmVzZXQsIGJhc2Vfc3ApOworICAvKiBUaGlzIGFzc2lnbm1lbnQgb2YgYmFzZV9z
cCBzaG91bGQgYWx3YXlzIGJlIDAuCisgICAgIE1heWJlIGl0IHdhcyB1c2VmdWwgd2hlbiByZWFk
MC9yZWFkMSB1c2VkIHJlY3Vyc2l2ZSBjYWxscz8qLworICBmcmFtZS0+YmFzZV9zcCA9IGZyYW1l
LT5yZHN0YWNrLnNwOworICByZWNvcmRfdW53aW5kX3Byb3RlY3RfcHRyIChyZWFkX3N0YWNrX3Jl
c2V0LCBmcmFtZSk7CiAKICAgc3BlY3BkbF9yZWYgY291bnQgPSBTUEVDUERMX0lOREVYICgpOwog
CkBAIC0zOTkxLDM3ICs1NTgzLDM3IEBAIHJlYWQwIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwg
Ym9vbCBsb2NhdGVfc3ltcykKICAgYm9vbCBza2lwX3Nob3J0aGFuZDsKIAogICAvKiBSZWFkIGFu
IG9iamVjdCBpbnRvIGBvYmonLiAgKi8KLSByZWFkX29iajogOworIHJlYWRfb2JqOgogICBMaXNw
X09iamVjdCBvYmo7Ci0gIGJvb2wgbXVsdGlieXRlOwotICBpbnQgYyA9IFJFQURDSEFSX1JFUE9S
VF9NVUxUSUJZVEUgKCZtdWx0aWJ5dGUpOworCisgIGludCBjID0gUkVBRENIQVIgKGZyYW1lKTsK
ICAgaWYgKGMgPCAwKQotICAgIGVuZF9vZl9maWxlX2Vycm9yICgpOworICAgIGVuZF9vZl9maWxl
X2Vycm9yIChmcmFtZSk7CiAKICAgc3dpdGNoIChjKQogICAgIHsKICAgICBjYXNlICcoJzoKLSAg
ICAgIHJlYWRfc3RhY2tfcHVzaCAoKHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5KSB7LnR5cGUgPSBS
RV9saXN0X3N0YXJ0fSk7CisgICAgICByZWFkX3N0YWNrX3B1c2ggKGZyYW1lLChzdHJ1Y3QgcmVh
ZF9zdGFja19lbnRyeSkgey50eXBlID0gUkVfbGlzdF9zdGFydH0pOwogICAgICAgZ290byByZWFk
X29iajsKIAogICAgIGNhc2UgJyknOgotICAgICAgaWYgKHJlYWRfc3RhY2tfZW1wdHlfcCAoYmFz
ZV9zcCkpCi0JaW52YWxpZF9zeW50YXggKCIpIiwgcmVhZGNoYXJmdW4pOwotICAgICAgc3dpdGNo
IChyZWFkX3N0YWNrX3RvcCAoKS0+dHlwZSkKKyAgICAgIGlmIChyZWFkX3N0YWNrX2VtcHR5X3Ag
KGZyYW1lKSkKKyAgICAgICAgaW52YWxpZF9zeW50YXggKGZyYW1lLCAiKSIpOworICAgICAgc3dp
dGNoIChyZWFkX3N0YWNrX3RvcCAoZnJhbWUpLT50eXBlKQogICAgICAgICB7CiAgICAgICAgIGNh
c2UgUkVfbGlzdF9zdGFydDoKLQkgIHJlYWRfc3RhY2tfcG9wICgpOworICAgICAgICAgIHJlYWRf
c3RhY2tfcG9wIChmcmFtZSk7CiAgICAgICAgICAgb2JqID0gUW5pbDsKICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBSRV9saXN0OgotCSAgb2JqID0gcmVhZF9zdGFja19wb3AgKCktPnUu
bGlzdC5oZWFkOworICAgICAgICAgIG9iaiA9IHJlYWRfc3RhY2tfcG9wIChmcmFtZSktPnUubGlz
dC5oZWFkOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJFX3JlY29yZDoKICAgICAg
ICAgICB7Ci0JICAgIGxvY2F0ZV9zeW1zID0gcmVhZF9zdGFja190b3AgKCktPnUudmVjdG9yLm9s
ZF9sb2NhdGVfc3ltczsKLQkgICAgTGlzcF9PYmplY3QgZWxlbXMgPSBGbnJldmVyc2UgKHJlYWRf
c3RhY2tfcG9wICgpLT51LnZlY3Rvci5lbGVtcyk7CisgICAgICAgICAgICBmcmFtZS0+bG9jYXRl
X3N5bXMgPSByZWFkX3N0YWNrX3RvcCAoZnJhbWUpLT51LnZlY3Rvci5vbGRfbG9jYXRlX3N5bXM7
CisgICAgICAgICAgICBMaXNwX09iamVjdCBlbGVtcyA9IEZucmV2ZXJzZSAocmVhZF9zdGFja19w
b3AgKGZyYW1lKS0+dS52ZWN0b3IuZWxlbXMpOwogICAgICAgICAgICAgaWYgKE5JTFAgKGVsZW1z
KSkKLQkgICAgICBpbnZhbGlkX3N5bnRheCAoIiNzIiwgcmVhZGNoYXJmdW4pOworICAgICAgICAg
ICAgICBpbnZhbGlkX3N5bnRheCAoZnJhbWUsICIjcyIpOwogCiAgICAgICAgICAgICBpZiAoQkFT
RV9FUSAoWENBUiAoZWxlbXMpLCBRaGFzaF90YWJsZSkpCiAgICAgICAgICAgICAgIG9iaiA9IGhh
c2hfdGFibGVfZnJvbV9wbGlzdCAoWENEUiAoZWxlbXMpKTsKQEAgLTQwMzAsNTAgKzU2MjIsNDYg
QEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBib29sIGxvY2F0ZV9zeW1zKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgfQogICAgICAgICBjYXNlIFJFX3N0cmluZ19wcm9w
czoKLQkgIGxvY2F0ZV9zeW1zID0gcmVhZF9zdGFja190b3AgKCktPnUudmVjdG9yLm9sZF9sb2Nh
dGVfc3ltczsKLQkgIG9iaiA9IHN0cmluZ19wcm9wc19mcm9tX3Jldl9saXN0IChyZWFkX3N0YWNr
X3BvcCAoKSAtPnUudmVjdG9yLmVsZW1zLAotCQkJCQkgICAgcmVhZGNoYXJmdW4pOworICAgICAg
ICAgIGZyYW1lLT5sb2NhdGVfc3ltcyA9IHJlYWRfc3RhY2tfdG9wIChmcmFtZSktPnUudmVjdG9y
Lm9sZF9sb2NhdGVfc3ltczsKKyAgICAgICAgICBvYmogPSBzdHJpbmdfcHJvcHNfZnJvbV9yZXZf
bGlzdCAoZnJhbWUsIHJlYWRfc3RhY2tfcG9wIChmcmFtZSkgLT51LnZlY3Rvci5lbGVtcyk7CiAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0JICBpbnZhbGlkX3N5bnRheCAoIiki
LCByZWFkY2hhcmZ1bik7CisgICAgICAgICAgaW52YWxpZF9zeW50YXggKGZyYW1lLCAiKSIpOwog
ICAgICAgICB9CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgJ1snOgotICAgICAgcmVhZF9zdGFj
a19wdXNoICgoc3RydWN0IHJlYWRfc3RhY2tfZW50cnkpIHsKKyAgICAgIHJlYWRfc3RhY2tfcHVz
aCAoZnJhbWUsIChzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSkgewogICAgICAgICAgIC50eXBlID0g
UkVfdmVjdG9yLAogICAgICAgICAgIC51LnZlY3Rvci5lbGVtcyA9IFFuaWwsCi0JICAudS52ZWN0
b3Iub2xkX2xvY2F0ZV9zeW1zID0gbG9jYXRlX3N5bXMsCisgICAgICAgICAgLnUudmVjdG9yLm9s
ZF9sb2NhdGVfc3ltcyA9IGZyYW1lLT5sb2NhdGVfc3ltcywKICAgICAgICAgfSk7CiAgICAgICAv
KiBGSVhNRTogc2hvdWxkIHZlY3RvcnMgYmUgcmVhZCB3aXRoIGxvY2F0ZV9zeW1zPWZhbHNlPyAg
Ki8KICAgICAgIGdvdG8gcmVhZF9vYmo7CiAKICAgICBjYXNlICddJzoKLSAgICAgIGlmIChyZWFk
X3N0YWNrX2VtcHR5X3AgKGJhc2Vfc3ApKQotCWludmFsaWRfc3ludGF4ICgiXSIsIHJlYWRjaGFy
ZnVuKTsKLSAgICAgIHN3aXRjaCAocmVhZF9zdGFja190b3AgKCktPnR5cGUpCisgICAgICBpZiAo
cmVhZF9zdGFja19lbXB0eV9wIChmcmFtZSkpCisgICAgICAgIGludmFsaWRfc3ludGF4IChmcmFt
ZSwgIl0iKTsKKyAgICAgIHN3aXRjaCAocmVhZF9zdGFja190b3AgKGZyYW1lKS0+dHlwZSkKICAg
ICAgICAgewogICAgICAgICBjYXNlIFJFX3ZlY3RvcjoKLQkgIGxvY2F0ZV9zeW1zID0gcmVhZF9z
dGFja190b3AgKCktPnUudmVjdG9yLm9sZF9sb2NhdGVfc3ltczsKLQkgIG9iaiA9IHZlY3Rvcl9m
cm9tX3Jldl9saXN0IChyZWFkX3N0YWNrX3BvcCAoKS0+dS52ZWN0b3IuZWxlbXMpOworICAgICAg
ICAgIGZyYW1lLT5sb2NhdGVfc3ltcyA9IHJlYWRfc3RhY2tfdG9wIChmcmFtZSktPnUudmVjdG9y
Lm9sZF9sb2NhdGVfc3ltczsKKyAgICAgICAgICBvYmogPSB2ZWN0b3JfZnJvbV9yZXZfbGlzdCAo
cmVhZF9zdGFja19wb3AgKGZyYW1lKS0+dS52ZWN0b3IuZWxlbXMpOwogICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFJFX2J5dGVfY29kZToKLQkgIGxvY2F0ZV9zeW1zID0gcmVhZF9zdGFj
a190b3AgKCktPnUudmVjdG9yLm9sZF9sb2NhdGVfc3ltczsKLQkgIG9iaiA9IGJ5dGVjb2RlX2Zy
b21fcmV2X2xpc3QgKHJlYWRfc3RhY2tfcG9wICgpLT51LnZlY3Rvci5lbGVtcywKLQkJCQkJcmVh
ZGNoYXJmdW4pOworICAgICAgICAgIGZyYW1lLT5sb2NhdGVfc3ltcyA9IHJlYWRfc3RhY2tfdG9w
IChmcmFtZSktPnUudmVjdG9yLm9sZF9sb2NhdGVfc3ltczsKKyAgICAgICAgICBvYmogPSBieXRl
Y29kZV9mcm9tX3Jldl9saXN0IChmcmFtZSxyZWFkX3N0YWNrX3BvcCAoZnJhbWUpLT51LnZlY3Rv
ci5lbGVtcyk7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUkVfY2hhcl90YWJsZToK
LQkgIGxvY2F0ZV9zeW1zID0gcmVhZF9zdGFja190b3AgKCktPnUudmVjdG9yLm9sZF9sb2NhdGVf
c3ltczsKLQkgIG9iaiA9IGNoYXJfdGFibGVfZnJvbV9yZXZfbGlzdCAocmVhZF9zdGFja19wb3Ag
KCktPnUudmVjdG9yLmVsZW1zLAotCQkJCQkgIHJlYWRjaGFyZnVuKTsKKyAgICAgICAgICBmcmFt
ZS0+bG9jYXRlX3N5bXMgPSByZWFkX3N0YWNrX3RvcCAoZnJhbWUpLT51LnZlY3Rvci5vbGRfbG9j
YXRlX3N5bXM7CisgICAgICAgICAgb2JqID0gY2hhcl90YWJsZV9mcm9tX3Jldl9saXN0IChmcmFt
ZSwgcmVhZF9zdGFja19wb3AgKGZyYW1lKS0+dS52ZWN0b3IuZWxlbXMpOwogICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFJFX3N1Yl9jaGFyX3RhYmxlOgotCSAgbG9jYXRlX3N5bXMgPSBy
ZWFkX3N0YWNrX3RvcCAoKS0+dS52ZWN0b3Iub2xkX2xvY2F0ZV9zeW1zOwotCSAgb2JqID0gc3Vi
X2NoYXJfdGFibGVfZnJvbV9yZXZfbGlzdCAocmVhZF9zdGFja19wb3AgKCktPnUudmVjdG9yLmVs
ZW1zLAotCQkJCQkgICAgICByZWFkY2hhcmZ1bik7CisgICAgICAgICAgZnJhbWUtPmxvY2F0ZV9z
eW1zID0gcmVhZF9zdGFja190b3AgKGZyYW1lKS0+dS52ZWN0b3Iub2xkX2xvY2F0ZV9zeW1zOwor
ICAgICAgICAgIG9iaiA9IHN1Yl9jaGFyX3RhYmxlX2Zyb21fcmV2X2xpc3QgKGZyYW1lLCByZWFk
X3N0YWNrX3BvcCAoZnJhbWUpLT51LnZlY3Rvci5lbGVtcyk7CiAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6Ci0JICBpbnZhbGlkX3N5bnRheCAoIl0iLCByZWFkY2hhcmZ1bik7Cisg
ICAgICAgICAgaW52YWxpZF9zeW50YXggKGZyYW1lLCAiXSIpOwogICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICBicmVhazsKQEAgLTQwODUsMTMgKzU2NzMsMTMgQEAgcmVhZDAgKExp
c3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBib29sIGxvY2F0ZV9zeW1zKQogCiAgICAgICAgICpwKysg
PSAnIyc7CiAgICAgICAgIGludCBjaDsKLQlSRUFEX0FORF9CVUZGRVIgKGNoKTsKKyAgICAgICAg
UkVBRF9BTkRfQlVGRkVSIChmcmFtZSxjaCk7CiAKICAgICAgICAgc3dpdGNoIChjaCkKICAgICAg
ICAgICB7CiAgICAgICAgICAgY2FzZSAnXCcnOgogICAgICAgICAgICAgLyogIydYIC0tIHNwZWNp
YWwgc3ludGF4IGZvciAoZnVuY3Rpb24gWCkgKi8KLQkgICAgcmVhZF9zdGFja19wdXNoICgoc3Ry
dWN0IHJlYWRfc3RhY2tfZW50cnkpIHsKKyAgICAgICAgICAgIHJlYWRfc3RhY2tfcHVzaCAoZnJh
bWUsIChzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSkgewogICAgICAgICAgICAgICAgIC50eXBlID0g
UkVfc3BlY2lhbCwKICAgICAgICAgICAgICAgICAudS5zcGVjaWFsLnN5bWJvbCA9IFFmdW5jdGlv
biwKICAgICAgICAgICAgICAgfSk7CkBAIC00MTA0LDgyICs1NjkyLDgyIEBAIHJlYWQwIChMaXNw
X09iamVjdCByZWFkY2hhcmZ1biwgYm9vbCBsb2NhdGVfc3ltcykKIAogICAgICAgICAgIGNhc2Ug
J3MnOgogICAgICAgICAgICAgLyogI3MoLi4uKSAtLSBhIHJlY29yZCBvciBoYXNoLXRhYmxlICov
Ci0JICAgIFJFQURfQU5EX0JVRkZFUiAoY2gpOworICAgICAgICAgICAgUkVBRF9BTkRfQlVGRkVS
IChmcmFtZSxjaCk7CiAgICAgICAgICAgICBpZiAoY2ggIT0gJygnKQogICAgICAgICAgICAgICB7
Ci0JCVVOUkVBRCAoY2gpOwotCQlJTlZBTElEX1NZTlRBWF9XSVRIX0JVRkZFUiAoKTsKKyAgICAg
ICAgICAgICAgICBVTlJFQUQgKGZyYW1lLCBjaCk7CisgICAgICAgICAgICAgICAgSU5WQUxJRF9T
WU5UQVhfV0lUSF9CVUZGRVIgKGZyYW1lKTsKICAgICAgICAgICAgICAgfQotCSAgICByZWFkX3N0
YWNrX3B1c2ggKChzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSkgeworICAgICAgICAgICAgcmVhZF9z
dGFja19wdXNoIChmcmFtZSwgKHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5KSB7CiAgICAgICAgICAg
ICAgICAgLnR5cGUgPSBSRV9yZWNvcmQsCiAgICAgICAgICAgICAgICAgLnUudmVjdG9yLmVsZW1z
ID0gUW5pbCwKLQkJLnUudmVjdG9yLm9sZF9sb2NhdGVfc3ltcyA9IGxvY2F0ZV9zeW1zLAorICAg
ICAgICAgICAgICAgIC51LnZlY3Rvci5vbGRfbG9jYXRlX3N5bXMgPSBmcmFtZS0+bG9jYXRlX3N5
bXMsCiAgICAgICAgICAgICAgIH0pOwotCSAgICBsb2NhdGVfc3ltcyA9IGZhbHNlOworICAgICAg
ICAgICAgZnJhbWUtPmxvY2F0ZV9zeW1zID0gZmFsc2U7CiAgICAgICAgICAgICBnb3RvIHJlYWRf
b2JqOwogCiAgICAgICAgICAgY2FzZSAnXic6CiAgICAgICAgICAgICAvKiAjXlsuLi5dICAtLSBj
aGFyLXRhYmxlCiAgICAgICAgICAgICAgICAjXl5bLi4uXSAtLSBzdWItY2hhci10YWJsZSAqLwot
CSAgICBSRUFEX0FORF9CVUZGRVIgKGNoKTsKKyAgICAgICAgICAgIFJFQURfQU5EX0JVRkZFUiAo
ZnJhbWUsY2gpOwogICAgICAgICAgICAgaWYgKGNoID09ICdeJykKICAgICAgICAgICAgICAgewot
CQljaCA9IFJFQURDSEFSOworICAgICAgICAgICAgICAgIGNoID0gUkVBRENIQVIgKGZyYW1lKTsK
ICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ1snKQogICAgICAgICAgICAgICAgICAgewotCQkg
ICAgcmVhZF9zdGFja19wdXNoICgoc3RydWN0IHJlYWRfc3RhY2tfZW50cnkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmVhZF9zdGFja19wdXNoIChmcmFtZSwgKHN0cnVjdCByZWFkX3N0YWNrX2Vu
dHJ5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAudHlwZSA9IFJFX3N1Yl9jaGFyX3RhYmxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgLnUudmVjdG9yLmVsZW1zID0gUW5pbCwKLQkJCS51
LnZlY3Rvci5vbGRfbG9jYXRlX3N5bXMgPSBsb2NhdGVfc3ltcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC51LnZlY3Rvci5vbGRfbG9jYXRlX3N5bXMgPSBmcmFtZS0+bG9jYXRlX3N5bXMsCiAg
ICAgICAgICAgICAgICAgICAgICAgfSk7Ci0JCSAgICBsb2NhdGVfc3ltcyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICBmcmFtZS0+bG9jYXRlX3N5bXMgPSBmYWxzZTsKICAgICAgICAgICAg
ICAgICAgICAgZ290byByZWFkX29iajsKICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICB7Ci0JCSAgICBVTlJFQUQgKGNoKTsKLQkJICAg
IElOVkFMSURfU1lOVEFYX1dJVEhfQlVGRkVSICgpOworICAgICAgICAgICAgICAgICAgICBVTlJF
QUQgKGZyYW1lLCBjaCk7CisgICAgICAgICAgICAgICAgICAgIElOVkFMSURfU1lOVEFYX1dJVEhf
QlVGRkVSIChmcmFtZSk7CiAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGVsc2UgaWYgKGNoID09ICdbJykKICAgICAgICAgICAgICAgewotCQlyZWFkX3N0
YWNrX3B1c2ggKChzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSkgeworICAgICAgICAgICAgICAgIHJl
YWRfc3RhY2tfcHVzaCAoZnJhbWUsIChzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSkgewogICAgICAg
ICAgICAgICAgICAgICAudHlwZSA9IFJFX2NoYXJfdGFibGUsCiAgICAgICAgICAgICAgICAgICAg
IC51LnZlY3Rvci5lbGVtcyA9IFFuaWwsCi0JCSAgICAudS52ZWN0b3Iub2xkX2xvY2F0ZV9zeW1z
ID0gbG9jYXRlX3N5bXMsCisgICAgICAgICAgICAgICAgICAgIC51LnZlY3Rvci5vbGRfbG9jYXRl
X3N5bXMgPSBmcmFtZS0+bG9jYXRlX3N5bXMsCiAgICAgICAgICAgICAgICAgICB9KTsKLQkJbG9j
YXRlX3N5bXMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmcmFtZS0+bG9jYXRlX3N5bXMgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICBnb3RvIHJlYWRfb2JqOwogICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgIHsKLQkJVU5SRUFEIChjaCk7Ci0JCUlOVkFM
SURfU1lOVEFYX1dJVEhfQlVGRkVSICgpOworICAgICAgICAgICAgICAgIFVOUkVBRCAoZnJhbWUs
IGNoKTsKKyAgICAgICAgICAgICAgICBJTlZBTElEX1NZTlRBWF9XSVRIX0JVRkZFUiAoZnJhbWUp
OwogICAgICAgICAgICAgICB9CiAKICAgICAgICAgICBjYXNlICcoJzoKICAgICAgICAgICAgIC8q
ICMoLi4uKSAtLSBzdHJpbmcgd2l0aCBwcm9wZXJ0aWVzICovCi0JICAgIHJlYWRfc3RhY2tfcHVz
aCAoKHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5KSB7CisgICAgICAgICAgICByZWFkX3N0YWNrX3B1
c2ggKGZyYW1lLCAoc3RydWN0IHJlYWRfc3RhY2tfZW50cnkpIHsKICAgICAgICAgICAgICAgICAu
dHlwZSA9IFJFX3N0cmluZ19wcm9wcywKICAgICAgICAgICAgICAgICAudS52ZWN0b3IuZWxlbXMg
PSBRbmlsLAotCQkudS52ZWN0b3Iub2xkX2xvY2F0ZV9zeW1zID0gbG9jYXRlX3N5bXMsCisgICAg
ICAgICAgICAgICAgLnUudmVjdG9yLm9sZF9sb2NhdGVfc3ltcyA9IGZyYW1lLT5sb2NhdGVfc3lt
cywKICAgICAgICAgICAgICAgfSk7Ci0JICAgIGxvY2F0ZV9zeW1zID0gZmFsc2U7CisgICAgICAg
ICAgICBmcmFtZS0+bG9jYXRlX3N5bXMgPSBmYWxzZTsKICAgICAgICAgICAgIGdvdG8gcmVhZF9v
Ymo7CiAKICAgICAgICAgICBjYXNlICdbJzoKICAgICAgICAgICAgIC8qICNbLi4uXSAtLSBieXRl
LWNvZGUgKi8KLQkgICAgcmVhZF9zdGFja19wdXNoICgoc3RydWN0IHJlYWRfc3RhY2tfZW50cnkp
IHsKKyAgICAgICAgICAgIHJlYWRfc3RhY2tfcHVzaCAoZnJhbWUsIChzdHJ1Y3QgcmVhZF9zdGFj
a19lbnRyeSkgewogICAgICAgICAgICAgICAgIC50eXBlID0gUkVfYnl0ZV9jb2RlLAogICAgICAg
ICAgICAgICAgIC51LnZlY3Rvci5lbGVtcyA9IFFuaWwsCi0JCS51LnZlY3Rvci5vbGRfbG9jYXRl
X3N5bXMgPSBsb2NhdGVfc3ltcywKKyAgICAgICAgICAgICAgICAudS52ZWN0b3Iub2xkX2xvY2F0
ZV9zeW1zID0gZnJhbWUtPmxvY2F0ZV9zeW1zLAogICAgICAgICAgICAgICB9KTsKLQkgICAgbG9j
YXRlX3N5bXMgPSBmYWxzZTsKKyAgICAgICAgICAgIGZyYW1lLT5sb2NhdGVfc3ltcyA9IGZhbHNl
OwogICAgICAgICAgICAgZ290byByZWFkX29iajsKIAogICAgICAgICAgIGNhc2UgJyYnOgogICAg
ICAgICAgICAgLyogIyZOIi4uLiIgLS0gYm9vbC12ZWN0b3IgKi8KLQkgICAgb2JqID0gcmVhZF9i
b29sX3ZlY3RvciAocmVhZGNoYXJmdW4pOworICAgICAgICAgICAgb2JqID0gcmVhZF9ib29sX3Zl
Y3RvciAoZnJhbWUpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICBjYXNlICchJzoK
QEAgLTQxODgsMzEgKzU3NzYsMzEgQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBi
b29sIGxvY2F0ZV9zeW1zKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBpbnQgYzsKICAg
ICAgICAgICAgICAgZG8KLQkJYyA9IFJFQURDSEFSOworICAgICAgICAgICAgICAgIGMgPSBSRUFE
Q0hBUiAoZnJhbWUpOwogICAgICAgICAgICAgICB3aGlsZSAoYyA+PSAwICYmIGMgIT0gJ1xuJyk7
CiAgICAgICAgICAgICAgIGdvdG8gcmVhZF9vYmo7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICBjYXNlICd4JzoKICAgICAgICAgICBjYXNlICdYJzoKLQkgICAgb2JqID0gcmVhZF9pbnRlZ2Vy
IChyZWFkY2hhcmZ1biwgMTYpOworICAgICAgICAgICAgb2JqID0gcmVhZF9pbnRlZ2VyIChmcmFt
ZSwgMTYpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICBjYXNlICdvJzoKICAgICAg
ICAgICBjYXNlICdPJzoKLQkgICAgb2JqID0gcmVhZF9pbnRlZ2VyIChyZWFkY2hhcmZ1biwgOCk7
CisgICAgICAgICAgICBvYmogPSByZWFkX2ludGVnZXIgKGZyYW1lLCA4KTsKICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgICAgY2FzZSAnYic6CiAgICAgICAgICAgY2FzZSAnQic6Ci0JICAg
IG9iaiA9IHJlYWRfaW50ZWdlciAocmVhZGNoYXJmdW4sIDIpOworICAgICAgICAgICAgb2JqID0g
cmVhZF9pbnRlZ2VyIChmcmFtZSwgMik7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAg
IGNhc2UgJ0AnOgogICAgICAgICAgICAgLyogI0BOVU1CRVIgaXMgdXNlZCB0byBza2lwIE5VTUJF
UiBmb2xsb3dpbmcgYnl0ZXMuCiAgICAgICAgICAgICAgICBUaGF0J3MgdXNlZCBpbiAuZWxjIGZp
bGVzIHRvIHNraXAgb3ZlciBkb2Mgc3RyaW5ncwogICAgICAgICAgICAgICAgYW5kIGZ1bmN0aW9u
IGRlZmluaXRpb25zIHRoYXQgY2FuIGJlIGxvYWRlZCBsYXppbHkuICAqLwotCSAgICBpZiAoc2tp
cF9sYXp5X3N0cmluZyAocmVhZGNoYXJmdW4pKQorICAgICAgICAgICAgaWYgKHNraXBfbGF6eV9z
dHJpbmcgKGZyYW1lKSkKICAgICAgICAgICAgICAgZ290byByZWFkX29iajsKICAgICAgICAgICAg
IG9iaiA9IFFuaWw7ICAgICAgIC8qICNAMDAgc2tpcHMgdG8gRU9CL0VPRiBhbmQgeWllbGRzIG5p
bC4gICovCiAgICAgICAgICAgICBicmVhazsKQEAgLTQyMjQsMTQgKzU4MTIsMTQgQEAgcmVhZDAg
KExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBib29sIGxvY2F0ZV9zeW1zKQogCiAgICAgICAgICAg
Y2FzZSAnOic6CiAgICAgICAgICAgICAvKiAjOlggLS0gdW5pbnRlcm5lZCBzeW1ib2wgKi8KLQkg
ICAgYyA9IFJFQURDSEFSOworICAgICAgICAgICAgYyA9IFJFQURDSEFSIChmcmFtZSk7CiAgICAg
ICAgICAgICBpZiAoYyA8PSAzMiB8fCBjID09IE5PX0JSRUFLX1NQQUNFCiAgICAgICAgICAgICAg
ICAgfHwgYyA9PSAnIicgfHwgYyA9PSAnXCcnIHx8IGMgPT0gJzsnIHx8IGMgPT0gJyMnCiAgICAg
ICAgICAgICAgICAgfHwgYyA9PSAnKCcgfHwgYyA9PSAnKScgIHx8IGMgPT0gJ1snIHx8IGMgPT0g
J10nCiAgICAgICAgICAgICAgICAgfHwgYyA9PSAnYCcgfHwgYyA9PSAnLCcpCiAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAvKiBObyBzeW1ib2wgY2hhcmFjdGVyIGZvbGxvd3M6IHRo
aXMgaXMgdGhlIGVtcHR5IHN5bWJvbC4gICovCi0JCVVOUkVBRCAoYyk7CisgICAgICAgICAgICAg
ICAgVU5SRUFEIChmcmFtZSwgYyk7CiAgICAgICAgICAgICAgICAgb2JqID0gRm1ha2Vfc3ltYm9s
IChlbXB0eV91bmlieXRlX3N0cmluZyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgIH0KQEAgLTQyNDEsMTQgKzU4MjksMTQgQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRj
aGFyZnVuLCBib29sIGxvY2F0ZV9zeW1zKQogCiAgICAgICAgICAgY2FzZSAnXyc6CiAgICAgICAg
ICAgICAvKiAjX1ggLS0gc3ltYm9sIHdpdGhvdXQgc2hvcnRoYW5kICovCi0JICAgIGMgPSBSRUFE
Q0hBUjsKKyAgICAgICAgICAgIGMgPSBSRUFEQ0hBUiAoZnJhbWUpOwogICAgICAgICAgICAgaWYg
KGMgPD0gMzIgfHwgYyA9PSBOT19CUkVBS19TUEFDRQogICAgICAgICAgICAgICAgIHx8IGMgPT0g
JyInIHx8IGMgPT0gJ1wnJyB8fCBjID09ICc7JyB8fCBjID09ICcjJwogICAgICAgICAgICAgICAg
IHx8IGMgPT0gJygnIHx8IGMgPT0gJyknICB8fCBjID09ICdbJyB8fCBjID09ICddJwogICAgICAg
ICAgICAgICAgIHx8IGMgPT0gJ2AnIHx8IGMgPT0gJywnKQogICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgLyogTm8gc3ltYm9sIGNoYXJhY3RlciBmb2xsb3dzOiB0aGlzIGlzIHRoZSBl
bXB0eSBzeW1ib2wuICAqLwotCQlVTlJFQUQgKGMpOworICAgICAgICAgICAgICAgIFVOUkVBRCAo
ZnJhbWUsIGMpOwogICAgICAgICAgICAgICAgIG9iaiA9IEZpbnRlcm4gKGVtcHR5X3VuaWJ5dGVf
c3RyaW5nLCBRbmlsKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgfQpA
QCAtNDI2NCwxOSArNTg1MiwxOSBAQCByZWFkMCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGJv
b2wgbG9jYXRlX3N5bXMpCiAgICAgICAgICAgICAgICAgaW50IGM7CiAgICAgICAgICAgICAgICAg
Zm9yICg7OykKICAgICAgICAgICAgICAgICAgIHsKLQkJICAgIFJFQURfQU5EX0JVRkZFUiAoYyk7
CisgICAgICAgICAgICAgICAgICAgIFJFQURfQU5EX0JVRkZFUiAoZnJhbWUsYyk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChjIDwgJzAnIHx8IGMgPiAnOScpCiAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGlmIChja2RfbXVsICgmbiwgbiwgMTApCiAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBja2RfYWRkICgmbiwgbiwgYyAtICcwJykpCi0JCSAg
ICAgIElOVkFMSURfU1lOVEFYX1dJVEhfQlVGRkVSICgpOworICAgICAgICAgICAgICAgICAgICAg
IElOVkFMSURfU1lOVEFYX1dJVEhfQlVGRkVSIChmcmFtZSk7CiAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ3InIHx8IGMgPT0gJ1InKQogICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAvKiAjTnJESUdJVFMgLS0gcmFkaXgtTiBudW1i
ZXIgKi8KLQkJICAgIGlmIChuIDwgMiB8fCBuID4gMzYpCi0JCSAgICAgIGludmFsaWRfcmFkaXhf
aW50ZWdlciAobiwgcmVhZGNoYXJmdW4pOwotCQkgICAgb2JqID0gcmVhZF9pbnRlZ2VyIChyZWFk
Y2hhcmZ1biwgbik7CisgICAgICAgICAgICAgICAgICAgIGlmIChuIDwgMCB8fCBuID4gMzYpCisg
ICAgICAgICAgICAgICAgICAgICAgaW52YWxpZF9yYWRpeF9pbnRlZ2VyIChmcmFtZSxuKTsKKyAg
ICAgICAgICAgICAgICAgICAgb2JqID0gcmVhZF9pbnRlZ2VyIChmcmFtZSwgbik7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG4gPD0gTU9TVF9QT1NJVElWRV9GSVhOVU0gJiYgIU5JTFAgKFZyZWFkX2NpcmNs
ZSkpCkBAIC00Mjg3LDcgKzU4NzUsNyBAQCByZWFkMCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4s
IGJvb2wgbG9jYXRlX3N5bXMpCiAgICAgICAgICAgICAgICAgICAgICAgICBMaXNwX09iamVjdCBw
bGFjZWhvbGRlciA9IEZjb25zIChRbmlsLCBRbmlsKTsKIAogICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaAotCQkJICA9IFhIQVNIX1RBQkxFIChyZWFkX29i
amVjdHNfbWFwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBYSEFTSF9UQUJMRSAoZnJh
bWUtPm9iamVjdHNfbWFwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIExpc3BfT2JqZWN0IG51
bWJlciA9IG1ha2VfZml4bnVtIChuKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfaGFz
aF90IGhhc2g7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdHJkaWZmX3QgaSA9IGhhc2hfZmlu
ZF9nZXRfaGFzaCAoaCwgbnVtYmVyLCAmaGFzaCk7CkBAIC00Mjk2LDcgKzU4ODQsNyBAQCByZWFk
MCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGJvb2wgbG9jYXRlX3N5bXMpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldF9oYXNoX3ZhbHVlX3Nsb3QgKGgsIGksIHBsYWNlaG9sZGVyKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGFzaF9wdXQgKGgsIG51bWJlciwgcGxhY2Vob2xkZXIsIGhhc2gpOwotCQkJcmVhZF9zdGFja19w
dXNoICgoc3RydWN0IHJlYWRfc3RhY2tfZW50cnkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlYWRfc3RhY2tfcHVzaCAoZnJhbWUsIChzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlID0gUkVfbnVtYmVyZWQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLnUubnVtYmVyZWQubnVtYmVyID0gbnVtYmVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC51Lm51bWJlcmVkLnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXIs
CkBAIC00MzA3LDQyICs1ODk1LDQyIEBAIHJlYWQwIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwg
Ym9vbCBsb2NhdGVfc3ltcykKICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvKiAjTiMgLS0gcmVmZXJlbmNlIHRvIG51bWJlcmVkIG9iamVjdCAqLwogICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaAotCQkJICA9IFhI
QVNIX1RBQkxFIChyZWFkX29iamVjdHNfbWFwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
PSBYSEFTSF9UQUJMRSAoZnJhbWUtPm9iamVjdHNfbWFwKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHB0cmRpZmZfdCBpID0gaGFzaF9maW5kIChoLCBtYWtlX2ZpeG51bSAobikpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGkgPCAwKQotCQkJICBJTlZBTElEX1NZTlRBWF9XSVRIX0JV
RkZFUiAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9TWU5UQVhfV0lUSF9C
VUZGRVIgKGZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiA9IEhBU0hfVkFMVUUg
KGgsIGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlCi0JCSAgICAgIElOVkFMSURfU1lOVEFY
X1dJVEhfQlVGRkVSICgpOworICAgICAgICAgICAgICAgICAgICAgIElOVkFMSURfU1lOVEFYX1dJ
VEhfQlVGRkVSIChmcmFtZSk7CiAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ZWxzZQotCQkgIElOVkFMSURfU1lOVEFYX1dJVEhfQlVGRkVSICgpOworICAgICAgICAgICAgICAg
ICAgSU5WQUxJRF9TWU5UQVhfV0lUSF9CVUZGRVIgKGZyYW1lKTsKICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgZWxzZQotCSAgICAgIElOVkFMSURfU1lOVEFYX1dJVEhfQlVGRkVSICgpOwor
ICAgICAgICAgICAgICBJTlZBTElEX1NZTlRBWF9XSVRIX0JVRkZFUiAoZnJhbWUpOwogICAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAKICAgICBjYXNlICc/JzoKLSAgICAgIG9i
aiA9IHJlYWRfY2hhcl9saXRlcmFsIChyZWFkY2hhcmZ1bik7CisgICAgICBvYmogPSByZWFkX2No
YXJfbGl0ZXJhbCAoZnJhbWUpOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlICciJzoKLSAgICAg
IG9iaiA9IHJlYWRfc3RyaW5nX2xpdGVyYWwgKHJlYWRjaGFyZnVuKTsKKyAgICAgIG9iaiA9IHJl
YWRfc3RyaW5nX2xpdGVyYWwgKGZyYW1lKTsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAnXCcn
OgotICAgICAgcmVhZF9zdGFja19wdXNoICgoc3RydWN0IHJlYWRfc3RhY2tfZW50cnkpIHsKKyAg
ICAgIHJlYWRfc3RhY2tfcHVzaCAoZnJhbWUsIChzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSkgewog
ICAgICAgICAgIC50eXBlID0gUkVfc3BlY2lhbCwKICAgICAgICAgICAudS5zcGVjaWFsLnN5bWJv
bCA9IFFxdW90ZSwKICAgICAgICAgfSk7CiAgICAgICBnb3RvIHJlYWRfb2JqOwogCiAgICAgY2Fz
ZSAnYCc6Ci0gICAgICByZWFkX3N0YWNrX3B1c2ggKChzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSkg
eworICAgICAgcmVhZF9zdGFja19wdXNoIChmcmFtZSwgKHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5
KSB7CiAgICAgICAgICAgLnR5cGUgPSBSRV9zcGVjaWFsLAogICAgICAgICAgIC51LnNwZWNpYWwu
c3ltYm9sID0gUWJhY2txdW90ZSwKICAgICAgICAgfSk7CkBAIC00MzUwLDE3ICs1OTM4LDE3IEBA
IHJlYWQwIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwgYm9vbCBsb2NhdGVfc3ltcykKIAogICAg
IGNhc2UgJywnOgogICAgICAgewotCWludCBjaCA9IFJFQURDSEFSOworICAgICAgICBpbnQgY2gg
PSBSRUFEQ0hBUiAoZnJhbWUpOwogICAgICAgICBMaXNwX09iamVjdCBzeW07CiAgICAgICAgIGlm
IChjaCA9PSAnQCcpCiAgICAgICAgICAgc3ltID0gUWNvbW1hX2F0OwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgewogICAgICAgICAgICAgaWYgKGNoID49IDApCi0JICAgICAgVU5SRUFEIChjaCk7
CisgICAgICAgICAgICAgIFVOUkVBRCAoZnJhbWUsIGNoKTsKICAgICAgICAgICAgIHN5bSA9IFFj
b21tYTsKICAgICAgICAgICB9Ci0JcmVhZF9zdGFja19wdXNoICgoc3RydWN0IHJlYWRfc3RhY2tf
ZW50cnkpIHsKKyAgICAgICAgcmVhZF9zdGFja19wdXNoIChmcmFtZSwgKHN0cnVjdCByZWFkX3N0
YWNrX2VudHJ5KSB7CiAgICAgICAgICAgICAudHlwZSA9IFJFX3NwZWNpYWwsCiAgICAgICAgICAg
ICAudS5zcGVjaWFsLnN5bWJvbCA9IHN5bSwKICAgICAgICAgICB9KTsKQEAgLTQzNzEsMjcgKzU5
NTksMjcgQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBib29sIGxvY2F0ZV9zeW1z
KQogICAgICAgewogICAgICAgICBpbnQgYzsKICAgICAgICAgZG8KLQkgIGMgPSBSRUFEQ0hBUjsK
KyAgICAgICAgICBjID0gUkVBRENIQVIgKGZyYW1lKTsKICAgICAgICAgd2hpbGUgKGMgPj0gMCAm
JiBjICE9ICdcbicpOwogICAgICAgICBnb3RvIHJlYWRfb2JqOwogICAgICAgfQogCiAgICAgY2Fz
ZSAnLic6CiAgICAgICB7Ci0JaW50IG5jaCA9IFJFQURDSEFSOwotCVVOUkVBRCAobmNoKTsKKyAg
ICAgICAgaW50IG5jaCA9IFJFQURDSEFSIChmcmFtZSk7CisgICAgICAgIFVOUkVBRCAoZnJhbWUs
IG5jaCk7CiAgICAgICAgIGlmIChuY2ggPD0gMzIgfHwgbmNoID09IE5PX0JSRUFLX1NQQUNFCiAg
ICAgICAgICAgICB8fCBuY2ggPT0gJyInIHx8IG5jaCA9PSAnXCcnIHx8IG5jaCA9PSAnOycKICAg
ICAgICAgICAgIHx8IG5jaCA9PSAnKCcgfHwgbmNoID09ICdbJyB8fCBuY2ggPT0gJyMnCiAgICAg
ICAgICAgICB8fCBuY2ggPT0gJz8nIHx8IG5jaCA9PSAnYCcgfHwgbmNoID09ICcsJykKICAgICAg
ICAgICB7Ci0JICAgIGlmICghcmVhZF9zdGFja19lbXB0eV9wIChiYXNlX3NwKQotCQkmJiByZWFk
X3N0YWNrX3RvcCAoKS0+dHlwZSA9PSAgUkVfbGlzdCkKKyAgICAgICAgICAgIGlmICghcmVhZF9z
dGFja19lbXB0eV9wIChmcmFtZSkKKyAgICAgICAgICAgICAgICAmJiByZWFkX3N0YWNrX3RvcCAo
ZnJhbWUpLT50eXBlID09ICBSRV9saXN0KQogICAgICAgICAgICAgICB7Ci0JCXJlYWRfc3RhY2tf
dG9wICgpLT50eXBlID0gUkVfbGlzdF9kb3Q7CisgICAgICAgICAgICAgICAgcmVhZF9zdGFja190
b3AgKGZyYW1lKS0+dHlwZSA9IFJFX2xpc3RfZG90OwogICAgICAgICAgICAgICAgIGdvdG8gcmVh
ZF9vYmo7CiAgICAgICAgICAgICAgIH0KLQkgICAgaW52YWxpZF9zeW50YXggKCIuIiwgcmVhZGNo
YXJmdW4pOworICAgICAgICAgICAgaW52YWxpZF9zeW50YXggKGZyYW1lLCAiLiIpOwogICAgICAg
ICAgIH0KICAgICAgIH0KICAgICAgIC8qIG1heSBiZSBhIG51bWJlciBvciBzeW1ib2wgc3RhcnRp
bmcgd2l0aCBhIGRvdCAqLwpAQCAtNDQwOSw3ICs1OTk3LDcgQEAgcmVhZDAgKExpc3BfT2JqZWN0
IHJlYWRjaGFyZnVuLCBib29sIGxvY2F0ZV9zeW1zKQogICAgICAgICBjaGFyICpwID0gcmVhZF9i
dWZmZXI7CiAgICAgICAgIGNoYXIgKmVuZCA9IHJlYWRfYnVmZmVyICsgcmVhZF9idWZmZXJfc2l6
ZTsKICAgICAgICAgYm9vbCBxdW90ZWQgPSBmYWxzZTsKLQlFTUFDU19JTlQgc3RhcnRfcG9zaXRp
b24gPSByZWFkY2hhcl9vZmZzZXQgLSAxOworICAgICAgICBFTUFDU19JTlQgc3RhcnRfcG9zaXRp
b24gPSBmcmFtZS0+Y2hhcl9vZmZzZXQgLSAxOwogCiAgICAgICAgIGRvCiAgICAgICAgICAgewpA
QCAtNDQyNSwxNyArNjAxMywxNyBAQCByZWFkMCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGJv
b2wgbG9jYXRlX3N5bXMpCiAKICAgICAgICAgICAgIGlmIChjID09ICdcXCcpCiAgICAgICAgICAg
ICAgIHsKLQkJYyA9IFJFQURDSEFSOworICAgICAgICAgICAgICAgIGMgPSBSRUFEQ0hBUiAoZnJh
bWUpOwogICAgICAgICAgICAgICAgIGlmIChjIDwgMCkKLQkJICBlbmRfb2ZfZmlsZV9lcnJvciAo
KTsKKyAgICAgICAgICAgICAgICAgIGVuZF9vZl9maWxlX2Vycm9yIChmcmFtZSk7CiAgICAgICAg
ICAgICAgICAgcXVvdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgfQogCi0JICAgIGlmIChtdWx0
aWJ5dGUpCisgICAgICAgICAgICBpZiAoZnJhbWUtPm11bHRpYnl0ZSkKICAgICAgICAgICAgICAg
cCArPSBDSEFSX1NUUklORyAoYywgKHVuc2lnbmVkIGNoYXIgKikgcCk7CiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICpwKysgPSBjOwotCSAgICBjID0gUkVBRENIQVI7CisgICAgICAg
ICAgICBjID0gUkVBRENIQVIgKGZyYW1lKTsKICAgICAgICAgICB9CiAgICAgICAgIHdoaWxlIChj
ID4gMzIKICAgICAgICAgICAgICAgICYmIGMgIT0gTk9fQlJFQUtfU1BBQ0UKQEAgLTQ0NDYsNyAr
NjAzNCw3IEBAIHJlYWQwIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwgYm9vbCBsb2NhdGVfc3lt
cykKIAogICAgICAgICAqcCA9IDA7CiAgICAgICAgIHB0cmRpZmZfdCBuYnl0ZXMgPSBwIC0gcmVh
ZF9idWZmZXI7Ci0JVU5SRUFEIChjKTsKKyAgICAgICAgVU5SRUFEIChmcmFtZSwgYyk7CiAKICAg
ICAgICAgLyogT25seSBhdHRlbXB0IHRvIHBhcnNlIHRoZSB0b2tlbiBhcyBhIG51bWJlciBpZiBp
dCBzdGFydHMgYXMgb25lLiAgKi8KICAgICAgICAgY2hhciBjMCA9IHJlYWRfYnVmZmVyWzBdOwpA
QCAtNDQ2NCwxNCArNjA1MiwxNCBAQCByZWFkMCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGJv
b2wgbG9jYXRlX3N5bXMpCiAKICAgICAgICAgLyogc3ltYm9sLCBwb3NzaWJseSB1bmludGVybmVk
ICovCiAgICAgICAgIHB0cmRpZmZfdCBuY2hhcnMKLQkgID0gKG11bHRpYnl0ZQorICAgICAgICAg
ID0gKGZyYW1lLT5tdWx0aWJ5dGUKICAgICAgICAgICAgICA/IG11bHRpYnl0ZV9jaGFyc19pbl90
ZXh0ICgodW5zaWduZWQgY2hhciAqKXJlYWRfYnVmZmVyLCBuYnl0ZXMpCiAgICAgICAgICAgICAg
OiBuYnl0ZXMpOwogICAgICAgICBMaXNwX09iamVjdCByZXN1bHQ7CiAgICAgICAgIGlmICh1bmlu
dGVybmVkX3N5bWJvbCkKICAgICAgICAgICB7CiAgICAgICAgICAgICBMaXNwX09iamVjdCBuYW1l
Ci0JICAgICAgPSBtYWtlX3NwZWNpZmllZF9zdHJpbmcgKHJlYWRfYnVmZmVyLCBuY2hhcnMsIG5i
eXRlcywgbXVsdGlieXRlKTsKKyAgICAgICAgICAgICAgPSBtYWtlX3NwZWNpZmllZF9zdHJpbmcg
KHJlYWRfYnVmZmVyLCBuY2hhcnMsIG5ieXRlcywgZnJhbWUtPm11bHRpYnl0ZSk7CiAgICAgICAg
ICAgICByZXN1bHQgPSBGbWFrZV9zeW1ib2wgKG5hbWUpOwogICAgICAgICAgIH0KICAgICAgICAg
ZWxzZQpAQCAtNDQ4OCw3ICs2MDc2LDcgQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVu
LCBib29sIGxvY2F0ZV9zeW1zKQogCiAgICAgICAgICAgICBMaXNwX09iamVjdCBmb3VuZDsKICAg
ICAgICAgICAgIGlmIChza2lwX3Nob3J0aGFuZAotCQkvKiBXZSBleGVtcHQgY2hhcmFjdGVycyB1
c2VkIGluIHRoZSAiY29yZSIgRW1hY3MgTGlzcAorLyogV2UgZXhlbXB0IGNoYXJhY3RlcnMgdXNl
ZCBpbiB0aGUgImNvcmUiIEVtYWNzIExpc3AKICAgIHN5bWJvbHMgdGhhdCBhcmUgY29tcHJpc2Vk
IGVudGlyZWx5IG9mIGNoYXJhY3RlcnMKICAgIHRoYXQgaGF2ZSB0aGUgJ3N5bWJvbCBjb25zdGl0
dWVudCcgc3ludGF4IGZyb20KICAgIHRyYW5zZm9ybWluZyBhY2NvcmRpbmcgdG8gc2hvcnRoYW5k
cy4gICovCkBAIC00NTA3LDE4ICs2MDk1LDE4IEBAIHJlYWQwIChMaXNwX09iamVjdCByZWFkY2hh
cmZ1biwgYm9vbCBsb2NhdGVfc3ltcykKICAgICAgICAgICAgICAgICBMaXNwX09iamVjdCBuYW1l
ID0gbWFrZV9zcGVjaWZpZWRfc3RyaW5nIChsb25naGFuZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25naGFuZF9jaGFycywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
b25naGFuZF9ieXRlcywKLQkJCQkJCQkgIG11bHRpYnl0ZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtPm11bHRpYnl0ZSk7
CiAgICAgICAgICAgICAgICAgeGZyZWUgKGxvbmdoYW5kKTsKICAgICAgICAgICAgICAgICByZXN1
bHQgPSBpbnRlcm5fZHJpdmVyIChuYW1lLCBvYmFycmF5LCBmb3VuZCk7CiAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIExp
c3BfT2JqZWN0IG5hbWUgPSBtYWtlX3NwZWNpZmllZF9zdHJpbmcgKHJlYWRfYnVmZmVyLCBuY2hh
cnMsCi0JCQkJCQkJICBuYnl0ZXMsIG11bHRpYnl0ZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmJ5dGVzLCBmcmFtZS0+bXVsdGli
eXRlKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBpbnRlcm5fZHJpdmVyIChuYW1lLCBvYmFy
cmF5LCBmb3VuZCk7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICB9Ci0JaWYgKGxvY2F0ZV9z
eW1zICYmICFOSUxQIChyZXN1bHQpKQorICAgICAgICBpZiAoZnJhbWUtPmxvY2F0ZV9zeW1zICYm
ICFOSUxQIChyZXN1bHQpKQogICAgICAgICAgIHJlc3VsdCA9IGJ1aWxkX3N5bWJvbF93aXRoX3Bv
cyAocmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFr
ZV9maXhudW0gKHN0YXJ0X3Bvc2l0aW9uKSk7CiAKQEAgLTQ1MjksOSArNjExNyw5IEBAIHJlYWQw
IChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwgYm9vbCBsb2NhdGVfc3ltcykKIAogICAvKiBXZSBo
YXZlIHJlYWQgYW4gb2JqZWN0IGluIGBvYmonLiAgVXNlIHRoZSBzdGFjayB0byBkZWNpZGUgd2hh
dCB0bwogICAgICBkbyB3aXRoIGl0LiAgKi8KLSAgd2hpbGUgKHJkc3RhY2suc3AgPiBiYXNlX3Nw
KQorICB3aGlsZSAoZnJhbWUtPnJkc3RhY2suc3AgPiBmcmFtZS0+YmFzZV9zcCkKICAgICB7Ci0g
ICAgICBzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSAqZSA9IHJlYWRfc3RhY2tfdG9wICgpOworICAg
ICAgc3RydWN0IHJlYWRfc3RhY2tfZW50cnkgKmUgPSByZWFkX3N0YWNrX3RvcCAoZnJhbWUpOwog
ICAgICAgc3dpdGNoIChlLT50eXBlKQogICAgICAgICB7CiAgICAgICAgIGNhc2UgUkVfbGlzdF9z
dGFydDoKQEAgLTQ1NDksMTIgKzYxMzcsMTIgQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFy
ZnVuLCBib29sIGxvY2F0ZV9zeW1zKQogCiAgICAgICAgIGNhc2UgUkVfbGlzdF9kb3Q6CiAgICAg
ICAgICAgewotCSAgICBza2lwX3NwYWNlX2FuZF9jb21tZW50cyAocmVhZGNoYXJmdW4pOwotCSAg
ICBpbnQgY2ggPSBSRUFEQ0hBUjsKKyAgICAgICAgICAgIHNraXBfc3BhY2VfYW5kX2NvbW1lbnRz
IChmcmFtZSk7CisgICAgICAgICAgICBpbnQgY2ggPSBSRUFEQ0hBUiAoZnJhbWUpOwogICAgICAg
ICAgICAgaWYgKGNoICE9ICcpJykKLQkgICAgICBpbnZhbGlkX3N5bnRheCAoImV4cGVjdGVkICki
LCByZWFkY2hhcmZ1bik7CisgICAgICAgICAgICAgIGludmFsaWRfc3ludGF4IChmcmFtZSwgImV4
cGVjdGVkICkiKTsKICAgICAgICAgICAgIFhTRVRDRFIgKGUtPnUubGlzdC50YWlsLCBvYmopOwot
CSAgICByZWFkX3N0YWNrX3BvcCAoKTsKKyAgICAgICAgICAgIHJlYWRfc3RhY2tfcG9wIChmcmFt
ZSk7CiAgICAgICAgICAgICBvYmogPSBlLT51Lmxpc3QuaGVhZDsKIAogICAgICAgICAgICAgLyog
SGFjazogaW1tZWRpYXRlbHkgY29udmVydCAoIyQgLiBGSVhOVU0pIHRvIHRoZSBjb3JyZXNwb25k
aW5nCkBAIC00NTYzLDcgKzYxNTEsNyBAQCByZWFkMCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4s
IGJvb2wgbG9jYXRlX3N5bXMpCiAgICAgICAgICAgICAgICAgJiYgQkFTRV9FUSAoWENBUiAob2Jq
KSwgVmxvYWRfZmlsZV9uYW1lKQogICAgICAgICAgICAgICAgICYmICFOSUxQIChYQ0FSIChvYmop
KQogICAgICAgICAgICAgICAgICYmIEZJWE5VTVAgKFhDRFIgKG9iaikpKQotCSAgICAgIG9iaiA9
IGdldF9sYXp5X3N0cmluZyAob2JqKTsKKyAgICAgICAgICAgICAgb2JqID0gZ2V0X2xhenlfc3Ry
aW5nIChmcmFtZSwgb2JqKTsKIAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgfQpAQCAt
NDU3OCwxOSArNjE2NiwxOSBAQCByZWFkMCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGJvb2wg
bG9jYXRlX3N5bXMpCiAgICAgICAgICAgZ290byByZWFkX29iajsKIAogICAgICAgICBjYXNlIFJF
X3NwZWNpYWw6Ci0JICByZWFkX3N0YWNrX3BvcCAoKTsKKyAgICAgICAgICByZWFkX3N0YWNrX3Bv
cCAoZnJhbWUpOwogICAgICAgICAgIG9iaiA9IGxpc3QyIChlLT51LnNwZWNpYWwuc3ltYm9sLCBv
YmopOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgUkVfbnVtYmVyZWQ6CiAgICAg
ICAgICAgewotCSAgICByZWFkX3N0YWNrX3BvcCAoKTsKKyAgICAgICAgICAgIHJlYWRfc3RhY2tf
cG9wIChmcmFtZSk7CiAgICAgICAgICAgICBMaXNwX09iamVjdCBwbGFjZWhvbGRlciA9IGUtPnUu
bnVtYmVyZWQucGxhY2Vob2xkZXI7CiAgICAgICAgICAgICBpZiAoQ09OU1AgKG9iaikpCiAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAoQkFTRV9FUSAob2JqLCBwbGFjZWhvbGRl
cikpCiAgICAgICAgICAgICAgICAgICAvKiBDYXRjaCBzaWxseSBnYW1lcyBsaWtlICMxPSMxIyAq
LwotCQkgIGludmFsaWRfc3ludGF4ICgibm9uc2Vuc2ljYWwgc2VsZi1yZWZlcmVuY2UiLCByZWFk
Y2hhcmZ1bik7CisgICAgICAgICAgICAgICAgICBpbnZhbGlkX3N5bnRheCAoZnJhbWUsICJub25z
ZW5zaWNhbCBzZWxmLXJlZmVyZW5jZSIpOwogCiAgICAgICAgICAgICAgICAgLyogT3B0aW1pemF0
aW9uOiBzaW5jZSB0aGUgcGxhY2Vob2xkZXIgaXMgYWxyZWFkeQogICAgICAgICAgICAgICAgICAg
IGEgY29ucywgcmVwdXJwb3NlIGl0IGFzIHRoZSBhY3R1YWwgdmFsdWUuCkBAIC00NjAxLDcgKzYx
ODksNyBAQCByZWFkMCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGJvb2wgbG9jYXRlX3N5bXMp
CiAgICAgICAgICAgICAgICAgRnNldGNkciAocGxhY2Vob2xkZXIsIFhDRFIgKG9iaikpOwogCiAg
ICAgICAgICAgICAgICAgc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaDIKLQkJICA9IFhIQVNIX1RB
QkxFIChyZWFkX29iamVjdHNfY29tcGxldGVkKTsKKyAgICAgICAgICAgICAgICAgID0gWEhBU0hf
VEFCTEUgKGZyYW1lLT5vYmplY3RzX2NvbXBsZXRlZCk7CiAgICAgICAgICAgICAgICAgaGFzaF9o
YXNoX3QgaGFzaDsKICAgICAgICAgICAgICAgICBwdHJkaWZmX3QgaSA9IGhhc2hfZmluZF9nZXRf
aGFzaCAoaDIsIHBsYWNlaG9sZGVyLCAmaGFzaCk7CiAgICAgICAgICAgICAgICAgZWFzc2VydCAo
aSA8IDApOwpAQCAtNDYxNiw3ICs2MjA0LDcgQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFy
ZnVuLCBib29sIGxvY2F0ZV9zeW1zKQogICAgICAgICAgICAgICAgICAgICAmJiAhKFNUUklOR1Ag
KG9iaikgJiYgIXN0cmluZ19pbnRlcnZhbHMgKG9iaikpKQogICAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpoMgotCQkgICAgICA9
IFhIQVNIX1RBQkxFIChyZWFkX29iamVjdHNfY29tcGxldGVkKTsKKyAgICAgICAgICAgICAgICAg
ICAgICA9IFhIQVNIX1RBQkxFIChmcmFtZS0+b2JqZWN0c19jb21wbGV0ZWQpOwogICAgICAgICAg
ICAgICAgICAgICBoYXNoX2hhc2hfdCBoYXNoOwogICAgICAgICAgICAgICAgICAgICBwdHJkaWZm
X3QgaSA9IGhhc2hfZmluZF9nZXRfaGFzaCAoaDIsIG9iaiwgJmhhc2gpOwogICAgICAgICAgICAg
ICAgICAgICBlYXNzZXJ0IChpIDwgMCk7CkBAIC00NjI1LDEwICs2MjEzLDEwIEBAIHJlYWQwIChM
aXNwX09iamVjdCByZWFkY2hhcmZ1biwgYm9vbCBsb2NhdGVfc3ltcykKIAogICAgICAgICAgICAg
ICAgIC8qIE5vdyBwdXQgaXQgZXZlcnl3aGVyZSB0aGUgcGxhY2Vob2xkZXIgd2FzLi4uICAqLwog
ICAgICAgICAgICAgICAgIEZscmVhZF9fc3Vic3RpdHV0ZV9vYmplY3RfaW5fc3VidHJlZSAob2Jq
LCBwbGFjZWhvbGRlciwKLQkJCQkJCSAgICAgIHJlYWRfb2JqZWN0c19jb21wbGV0ZWQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUt
Pm9iamVjdHNfY29tcGxldGVkKTsKIAogICAgICAgICAgICAgICAgIC8qIC4uLmFuZCAjbiMgd2ls
bCB1c2UgdGhlIHJlYWwgdmFsdWUgZnJvbSBub3cgb24uICAqLwotCQlzdHJ1Y3QgTGlzcF9IYXNo
X1RhYmxlICpoID0gWEhBU0hfVEFCTEUgKHJlYWRfb2JqZWN0c19tYXApOworICAgICAgICAgICAg
ICAgIHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmggPSBYSEFTSF9UQUJMRSAoZnJhbWUtPm9iamVj
dHNfbWFwKTsKICAgICAgICAgICAgICAgICBoYXNoX2hhc2hfdCBoYXNoOwogICAgICAgICAgICAg
ICAgIHB0cmRpZmZfdCBpID0gaGFzaF9maW5kX2dldF9oYXNoIChoLCBlLT51Lm51bWJlcmVkLm51
bWJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Jmhhc2gpOwpAQCAtNDYzOSw3ICs2MjI3LDggQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFy
ZnVuLCBib29sIGxvY2F0ZV9zeW1zKQogICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLQor
ICAvKiBBdHRlbXB0IHRvIGZsdXNoIGFueSB1bnJlYWQgY2hhciBhbmQvb3IgYnVmZmVyZWQgYnl0
ZXMgKi8KKyAgY2xvc2luZ191bnJlYWRjaGFyIChmcmFtZSk7CiAgIHJldHVybiB1bmJpbmRfdG8g
KGJhc2VfcGRsLCBvYmopOwogfQogCkBAIC00OTAwLDE0ICs2NDg5LDYgQEAgc3RyaW5nX3RvX251
bWJlciAoY2hhciBjb25zdCAqc3RyaW5nLCBpbnQgYmFzZSwgcHRyZGlmZl90ICpwbGVuKQogfQog
CiAMCi1zdGF0aWMgTGlzcF9PYmplY3QgaW5pdGlhbF9vYmFycmF5OwotCi0vKiBgb2Jsb29rdXAn
IHN0b3JlcyB0aGUgYnVja2V0IG51bWJlciBoZXJlLCBmb3IgdGhlIHNha2Ugb2YgRnVuaW50ZXJu
LiAgKi8KLQotc3RhdGljIHNpemVfdCBvYmxvb2t1cF9sYXN0X2J1Y2tldF9udW1iZXI7Ci0KLXN0
YXRpYyBMaXNwX09iamVjdCBtYWtlX29iYXJyYXkgKHVuc2lnbmVkIGJpdHMpOwotCiAvKiBTbG93
IHBhdGggb2JhcnJheSBjaGVjazogcmV0dXJuIHRoZSBvYmFycmF5IHRvIHVzZSBvciBzaWduYWwg
YW4gZXJyb3IuICAqLwogTGlzcF9PYmplY3QKIGNoZWNrX29iYXJyYXlfc2xvdyAoTGlzcF9PYmpl
Y3Qgb2JhcnJheSkKQEAgLTQ5ODcsNyArNjU2OCw3IEBAIGludGVybl8xIChjb25zdCBjaGFyICpz
dHIsIHB0cmRpZmZfdCBsZW4pCiAgIExpc3BfT2JqZWN0IHRlbSA9IG9ibG9va3VwIChvYmFycmF5
LCBzdHIsIGxlbiwgbGVuKTsKIAogICByZXR1cm4gKEJBUkVfU1lNQk9MX1AgKHRlbSkgPyB0ZW0K
LQkgIC8qIFRoZSBhYm92ZSBgb2Jsb29rdXAnIHdhcyBkb25lIG9uIHRoZSBiYXNpcyBvZiBuY2hh
cnM9PW5ieXRlcywgc28KKy8qIFRoZSBhYm92ZSBgb2Jsb29rdXAnIHdhcyBkb25lIG9uIHRoZSBi
YXNpcyBvZiBuY2hhcnM9PW5ieXRlcywgc28KICAgIHRoZSBzdHJpbmcgaGFzIHRvIGJlIHVuaWJ5
dGUuICAqLwogICAgICAgICAgIDogaW50ZXJuX2RyaXZlciAobWFrZV91bmlieXRlX3N0cmluZyAo
c3RyLCBsZW4pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JhcnJheSwgdGVtKSk7CkBA
IC01MTQ5LDE0ICs2NzMwLDE0IEBAIERFRlVOICgidW5pbnRlcm4iLCBGdW5pbnRlcm4sIFN1bmlu
dGVybiwgMiwgMiwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
Q0hBUlMgKHN0cmluZyksIFNCWVRFUyAoc3RyaW5nKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmbG9uZ2hhbmQsICZsb25naGFuZF9jaGFycywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbG9uZ2hhbmRfYnl0ZXMpOworICBpZiAoRklY
TlVNUCAodGVtKQorLyogSWYgYXJnIHdhcyBhIHN5bWJvbCwgZG9uJ3QgZGVsZXRlIGFueXRoaW5n
IGJ1dCB0aGF0IHN5bWJvbCBpdHNlbGYuICAqLworICAgICAgfHwgKEJBUkVfU1lNQk9MX1AgKG5h
bWUpICYmICFCQVNFX0VRIChuYW1lLCB0ZW0pKSkKKyAgICB7CiAgICAgICBpZiAobG9uZ2hhbmQp
Ci0gICAgeGZyZWUobG9uZ2hhbmQpOwotCi0gIGlmIChGSVhOVU1QICh0ZW0pKQotICAgIHJldHVy
biBRbmlsOwotICAvKiBJZiBhcmcgd2FzIGEgc3ltYm9sLCBkb24ndCBkZWxldGUgYW55dGhpbmcg
YnV0IHRoYXQgc3ltYm9sIGl0c2VsZi4gICovCi0gIGlmIChCQVJFX1NZTUJPTF9QIChuYW1lKSAm
JiAhQkFTRV9FUSAobmFtZSwgdGVtKSkKKyAgICAgICAgeGZyZWUgKGxvbmdoYW5kKTsKICAgICAg
IHJldHVybiBRbmlsOworICAgIH0KIAogICAvKiBUaGVyZSBhcmUgcGxlbnR5IG9mIG90aGVyIHN5
bWJvbHMgd2hpY2ggd2lsbCBzY3JldyB1cCB0aGUgRW1hY3MKICAgICAgc2Vzc2lvbiBpZiB3ZSB1
bmludGVybiB0aGVtLCBhcyB3ZWxsIGFzIGV2ZW4gbW9yZSB3YXlzIHRvIHVzZQpAQCAtNTE2OCw3
ICs2NzQ5LDIzIEBAIERFRlVOICgidW5pbnRlcm4iLCBGdW5pbnRlcm4sIFN1bmludGVybiwgMiwg
MiwgMCwKICAgc3RydWN0IExpc3BfU3ltYm9sICpzeW0gPSBYQkFSRV9TWU1CT0wgKHRlbSk7CiAg
IHN5bS0+dS5zLmludGVybmVkID0gU1lNQk9MX1VOSU5URVJORUQ7CiAKLSAgcHRyZGlmZl90IGlk
eCA9IG9ibG9va3VwX2xhc3RfYnVja2V0X251bWJlcjsKKyAgcHRyZGlmZl90IGlkeCA9IC0xOwor
ICB7CisgICAgLyogRG9uJ3QgdXNlIGEgc3RhdGljIHZhcmlhYmxlIGp1c3QgdG8gYXZvaWQgdGhp
cworICAgICAgIC0gaG93IGZyZXF1ZW50bHkgdXNlZCBpcyB1bmludGVybiB0aGF0IHVzaW5nIGEg
c3RhdGljIHZhcmlhYmxlCisgICAgICAgdG8gb3B0aW1pemUgYXdheSB0aGlzIHJlZHVuZGFudCBp
bmRleCBjYWxjdWxhdGlvbiB3b3VsZCBiZQorICAgICAgIHdvcnRoIGl0PyAqLworICAgIHN0cnVj
dCBMaXNwX09iYXJyYXkgKm8gPSBYT0JBUlJBWSAob2JhcnJheSk7CisgICAgaWYgKGxvbmdoYW5k
KQorICAgICAgeworICAgICAgICBpZHggPSBvYmFycmF5X2luZGV4IChvLCBsb25naGFuZCwgbG9u
Z2hhbmRfYnl0ZXMpOworICAgICAgICB4ZnJlZSAobG9uZ2hhbmQpOworICAgICAgfQorICAgIGVs
c2UKKyAgICAgIHsKKyAgICAgICAgaWR4ID0gb2JhcnJheV9pbmRleCAobyxTU0RBVEEgKHN0cmlu
ZyksIFNCWVRFUyAoc3RyaW5nKSk7CisgICAgICB9CisgIH0KICAgTGlzcF9PYmplY3QgKmxvYyA9
ICZYT0JBUlJBWSAob2JhcnJheSktPmJ1Y2tldHNbaWR4XTsKIAogICBlYXNzZXJ0IChCQVJFX1NZ
TUJPTF9QICgqbG9jKSk7CkBAIC01MTk0LDcgKzY3OTEsNyBAQCBERUZVTiAoInVuaW50ZXJuIiwg
RnVuaW50ZXJuLCBTdW5pbnRlcm4sIDIsIDIsIDAsCiAMCiAKIC8qIEJ1Y2tldCBpbmRleCBvZiB0
aGUgc3RyaW5nIFNUUiBvZiBsZW5ndGggU0laRV9CWVRFIGJ5dGVzIGluIG9iYXJyYXkgT0EuICAq
Lwotc3RhdGljIHB0cmRpZmZfdAorcHRyZGlmZl90CiBvYmFycmF5X2luZGV4IChzdHJ1Y3QgTGlz
cF9PYmFycmF5ICpvYSwgY29uc3QgY2hhciAqc3RyLCBwdHJkaWZmX3Qgc2l6ZV9ieXRlKQogewog
ICBFTUFDU19VSU5UIGhhc2ggPSBoYXNoX2NoYXJfYXJyYXkgKHN0ciwgc2l6ZV9ieXRlKTsKQEAg
LTUyMTUsNyArNjgxMiw2IEBAIG9ibG9va3VwIChMaXNwX09iamVjdCBvYmFycmF5LCByZWdpc3Rl
ciBjb25zdCBjaGFyICpwdHIsIHB0cmRpZmZfdCBzaXplLCBwdHJkaWZmCiAgIHB0cmRpZmZfdCBp
ZHggPSBvYmFycmF5X2luZGV4IChvLCBwdHIsIHNpemVfYnl0ZSk7CiAgIExpc3BfT2JqZWN0IGJ1
Y2tldCA9IG8tPmJ1Y2tldHNbaWR4XTsKIAotICBvYmxvb2t1cF9sYXN0X2J1Y2tldF9udW1iZXIg
PSBpZHg7CiAgIGlmICghQkFTRV9FUSAoYnVja2V0LCBtYWtlX2ZpeG51bSAoMCkpKQogICAgIHsK
ICAgICAgIExpc3BfT2JqZWN0IHN5bSA9IGJ1Y2tldDsKQEAgLTU2MjksNyArNzIyNSw3IEBAIGxv
YWRfcGF0aF9jaGVjayAoTGlzcF9PYmplY3QgbHBhdGgpCiBzdGF0aWMgTGlzcF9PYmplY3QKIGxv
YWRfcGF0aF9kZWZhdWx0ICh2b2lkKQogewotICBpZiAod2lsbF9kdW1wX3AgKCkpCisgIGlmICh3
aWxsX2R1bXBfcCAoKSB8fCAoIWluaXRpYWxpemVkICYmICFOSUxQKFZpbnN0YWxsYXRpb25fZGly
ZWN0b3J5KSkpCiAgICAgLyogUEFUSF9EVU1QTE9BRFNFQVJDSCBpcyB0aGUgbGlzcCBkaXIgaW4g
dGhlIHNvdXJjZSBkaXJlY3RvcnkuCiAgICAgICAgV2UgdXNlZCB0byBhZGQgLi4vbGlzcCAoaWUg
dGhlIGxpc3AgZGlyIGluIHRoZSBidWlsZAogICAgICAgIGRpcmVjdG9yeSkgYXQgdGhlIGZyb250
IGhlcmUsIGJ1dCB0aGF0IHNob3VsZCBub3QgYmUKQEAgLTU4MDEsNyArNzM5NywxNSBAQCBpbml0
X2xyZWFkICh2b2lkKQogICBWbG9hZF9maWxlX25hbWUgPSBRbmlsOwogICBWbG9hZF90cnVlX2Zp
bGVfbmFtZSA9IFFuaWw7CiAgIFZzdGFuZGFyZF9pbnB1dCA9IFF0OwotICBWbG9hZHNfaW5fcHJv
Z3Jlc3MgPSBRbmlsOworCisgIHN0ZGluX2luZmlsZS5zLnN0cmVhbSA9IHN0ZGluOworICBzdGRp
bl9pbmZpbGUucy5sb29rYWhlYWQgPSAwOworICBtZW1zZXQgKHN0ZGluX2luZmlsZS5zLmJ1Ziwg
MCwgc2l6ZW9mKHN0ZGluX2luZmlsZS5zLmJ1ZikpOworICAvKiBXZSB0cmVhdCBzdGRpbiBhcyBh
IGZpZm8gZXZlbiBpZiBpdCByZWFsbHkgaXMgYSByZWd1bGFyIGZpbGUgKi8KKyAgc3RkaW5faW5m
aWxlLnMuc2Vla2FibGUgPSBmYWxzZTsKKyAgc3RkaW5faW5maWxlLnVucmVhZF9jaGFyID0gLTE7
CisgIHN0ZGluX2luZmlsZS51bnJlYWRfYnl0ZXMgPSAwOworICBzdGRpbl9pbmZpbGUucmVhZF9l
b2YgPSBmYWxzZTsKIH0KIAogLyogUHJpbnQgYSB3YXJuaW5nIHRoYXQgZGlyZWN0b3J5IGludGVu
ZGVkIGZvciB1c2UgVVNFIGFuZCB3aXRoIG5hbWUKQEAgLTU4MzgsNiArNzQ0MiwxNTcgQEAgZGly
X3dhcm5pbmcgKGNoYXIgY29uc3QgKnVzZSwgTGlzcF9PYmplY3QgZGlybmFtZSkKICAgICB9CiB9
CiAKK3ZvaWQKK2FjdGl2YXRlX2xyZWFkX2ZyYW1lIChscmVhZF9mcmFtZSAqbmV3X2ZyYW1lLCBs
cmVhZF9mcmFtZV90eXBlIG5ld190eXBlKQoreworICByZWdpc3RlciBscmVhZF9mcmFtZSAqZnJh
bWUgPSBjdXJyZW50X2ZyYW1lOworICAvKiBhc3N1bWUgdHlwZSwgaW50eXBlLCBpbnB1dCwgYW5k
IGxvY2F0ZV9zeW1zCisgICAgIGZpZWxkcyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgYnkgZW50cnkg
cG9pbnQgKi8KKyAgZWFzc2VydCAobmV3X2ZyYW1lLT5pbnR5cGUgIT0gTFJFQURfSU5QVVRfVU5J
TklUKTsKKyAgLyogVXBkYXRlIHRoZSBzdGRpbiBzdHJlYW0gZGF0YSBhcyBpdCBtYXkgYmUgdXNl
ZCByZWN1cnNpdmVseSAqLworICBpZiAoZnJhbWUgJiYgZnJhbWUtPmludHlwZSA9PSBMUkVBRF9J
TlBVVF9GSUxFCisgICAgICAmJiAoZnJhbWUtPmlucHV0LmYuc3RyZWFtID09IHN0ZGluKSkKKyAg
ICB7CisgICAgICBzdGRpbl9pbmZpbGUucy5sb29rYWhlYWQgPSBmcmFtZS0+aW5wdXQuZi5sb29r
YWhlYWQ7CisgICAgICBtZW1jcHkgKHN0ZGluX2luZmlsZS5zLmJ1ZiwgZnJhbWUtPmlucHV0LmYu
YnVmLCBzaXplb2Yoc3RkaW5faW5maWxlLnMuYnVmKSk7CisgICAgICBzdGRpbl9pbmZpbGUuYnl0
ZV9vZmZzZXQgPSBmcmFtZS0+Ynl0ZV9vZmZzZXQ7CisgICAgICBzdGRpbl9pbmZpbGUuY2hhcl9v
ZmZzZXQgPSBmcmFtZS0+Y2hhcl9vZmZzZXQ7CisgICAgICBzdGRpbl9pbmZpbGUudW5yZWFkX2No
YXIgPSBmcmFtZS0+dW5yZWFkX2NoYXI7CisgICAgICBzdGRpbl9pbmZpbGUudW5yZWFkX2J5dGVz
ID0gZnJhbWUtPnVucmVhZF9ieXRlczsKKyAgICAgIHN0ZGluX2luZmlsZS5yZWFkX2VvZiA9IGZy
YW1lLT5yZWFkX2VvZjsKKyAgICB9CisgIGlmIChuZXdfZnJhbWUgIT0gZnJhbWUpCisgICAgLyog
RmxvYWQgbWF5IHJldXNlIGFuIGFjdGl2YXRlZCBkdW1teSBmcmFtZSAqLworICAgIG5ld19mcmFt
ZS0+cHJldiA9IGZyYW1lOworICBmcmFtZSA9IG5ld19mcmFtZTsKKyAgZnJhbWUtPnR5cGUgPSBu
ZXdfdHlwZTsKKyAgaWYgKGN1cnJlbnRfZnJhbWUgJiYgY3VycmVudF9mcmFtZSAhPSBmcmFtZSkK
KyAgICBmcmFtZS0+bG9hZHNfaW5fcHJvZ3Jlc3MgPSBjdXJyZW50X2ZyYW1lLT5sb2Fkc19pbl9w
cm9ncmVzczsKKworICAvKiBjaGFuZ2UgdGhlIHN0YW5kYXJkIGluaXRpYWxpemF0aW9uIGFzIG5l
ZWRlZCBmb3IgZGlmZmVyZW50IGlucHV0IHR5cGVzICovCisgIHN3aXRjaCAoZnJhbWUtPmludHlw
ZSkKKyAgICB7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9GSUxFOgorICAgICAgaWYgKGZyYW1lLT5p
bnB1dC5mLnN0cmVhbSA9PSBzdGRpbikKKyAgICAgICAgeworICAgICAgICAgIGZyYW1lLT51bnJl
YWRfY2hhciA9IHN0ZGluX2luZmlsZS51bnJlYWRfY2hhcjsKKyAgICAgICAgICBmcmFtZS0+cmVh
ZF9lb2YgPSBzdGRpbl9pbmZpbGUucmVhZF9lb2Y7CisgICAgICAgICAgZnJhbWUtPmNoYXJfb2Zm
c2V0ID0gc3RkaW5faW5maWxlLmNoYXJfb2Zmc2V0OworICAgICAgICAgIGZyYW1lLT5ieXRlX29m
ZnNldCA9IHN0ZGluX2luZmlsZS5ieXRlX29mZnNldDsKKyAgICAgICAgfQorICAgICAgZWxzZSBp
ZiAoZnJhbWUtPmlucHV0LmYuc2Vla2FibGUgJiYKKyAgICAgICAgICAgICAgIChmdGVsbG8gKGZy
YW1lLT5pbnB1dC5mLnN0cmVhbSkgIT0gMCkpCisgICAgICAgIHsKKyAgICAgICAgICBmc2Vla28g
KGZyYW1lLT5pbnB1dC5mLnN0cmVhbSwgMCwgU0VFS19TRVQpOworICAgICAgICB9CisgICAgICBi
cmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVUX1NUUklORzoKKyAgICAgIHsKKyAgICAgICAgZnJh
bWUtPmNoYXJfb2Zmc2V0ID0gZnJhbWUtPmlucHV0LnMuc3RhcnQ7CisgICAgICAgIGZyYW1lLT5i
eXRlX29mZnNldAorICAgICAgICAgID0gc3RyaW5nX2NoYXJfdG9fYnl0ZSAoZnJhbWUtPmlucHV0
LnMuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmlucHV0
LnMuc3RhcnQpOworICAgICAgICAvKiBmcmFtZS0+bXVsdGlieXRlID0gU1RSSU5HX01VTFRJQllU
RSAoZnJhbWUtPmlucHV0LnMuc3RyaW5nKTsgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAg
IGNhc2UgTFJFQURfSU5QVVRfUFJPQ0VEVVJFOgorICAgICAgZnJhbWUtPmNoYXJfb2Zmc2V0ID0g
MDsKKyAgICAgIGZyYW1lLT5ieXRlX29mZnNldCA9IDA7CisgICAgICAvKiBpbXBsaWNpdGx5IGVu
Y29kZWQgYXMgZW1hY3MtaW50ZXJuYWwsCisgICAgICAgICBhcyB3ZSBvbmx5IGV2ZXIgc2VlIHRo
ZSBjaGFyYWN0ZXIgdmFsdWVzICovCisgICAgICAvKiBmcmFtZS0+bXVsdGlieXRlID0gTFJFQURf
TVVMVElCWVRFX1RSVUU7ICovCisgICAgICBicmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVUX0JV
RkZFUjoKKyAgICAgIHsKKyAgICAgICAgc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKGZyYW1l
LT5pbnB1dC5iLmJ1ZmZlcik7CisgICAgICAgIGZyYW1lLT5jaGFyX29mZnNldCA9IEJVRl9QVCAo
Yik7CisgICAgICAgIGZyYW1lLT5ieXRlX29mZnNldCA9IEJVRl9QVF9CWVRFIChiKTsKKyAgICAg
ICAgLyogZnJhbWUtPm11bHRpYnl0ZSA9ICEgTklMUCAoQlZBUiAoYiwgZW5hYmxlX211bHRpYnl0
ZV9jaGFyYWN0ZXJzKSk7ICovCisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIExSRUFE
X0lOUFVUX01BUktFUjoKKyAgICAgIHsKKyAgICAgICAgc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZG
RVIgKGZyYW1lLT5pbnB1dC5tLmIuYnVmZmVyKTsKKyAgICAgICAgZnJhbWUtPmNoYXJfb2Zmc2V0
ID0gQlVGX1BUIChiKTsKKyAgICAgICAgZnJhbWUtPmJ5dGVfb2Zmc2V0ID0gQlVGX1BUX0JZVEUg
KGIpOworICAgICAgICAvKiBmcmFtZS0+bXVsdGlieXRlID0gISBOSUxQIChCVkFSIChiLCBlbmFi
bGVfbXVsdGlieXRlX2NoYXJhY3RlcnMpKTsgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAg
IGNhc2UgTFJFQURfSU5QVVRfQklOQVJZOgorICAgIGNhc2UgTFJFQURfSU5QVVRfTlVMTDoKKyAg
ICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJFQURfSU5Q
VVRfSU5ESVJFQ1Q6CisgICAgICBmcmFtZS0+Y2hhcl9vZmZzZXQgPSBmcmFtZS0+aW5wdXQuZnJh
bWUuc291cmNlLT5jaGFyX29mZnNldDsKKyAgICAgIGZyYW1lLT5ieXRlX29mZnNldCA9IGZyYW1l
LT5pbnB1dC5mcmFtZS5zb3VyY2UtPmJ5dGVfb2Zmc2V0OworICAgICAgYnJlYWs7CisgICAgICBV
TlJFQ09HTklaRURfTFJFQURfSU5QVVRfQ0FTRVMoImFjdGl2YXRlX2xyZWFkX2ZyYW1lIik7Cisg
ICAgfQorICBpZiAoY3VycmVudF9mcmFtZSAhPSBmcmFtZSkKKyAgICB7CisgICAgICAvKiBkb24n
dCBwb3AgdHdpY2UgKi8KKyAgICAgIGZyYW1lLT5yZXN0b3JlX2ZyYW1lX2lkeCA9IFNQRUNQRExf
SU5ERVgoKTsKKyAgICAgIHJlY29yZF91bndpbmRfcHJvdGVjdF9wdHIgKHJlc3RvcmVfbHJlYWRf
ZnJhbWUsIGN1cnJlbnRfZnJhbWUpOworICAgICAgY3VycmVudF9mcmFtZSA9IGZyYW1lOworICAg
IH0KK30KKwordm9pZAorcmVzdG9yZV9scmVhZF9mcmFtZSAodm9pZCAqcCkKK3sKKyAgcmVnaXN0
ZXIgbHJlYWRfZnJhbWUgKmZyYW1lID0gY3VycmVudF9mcmFtZTsKKworICAvKiBVcGRhdGUgdGhl
IHN0ZGluIHN0cmVhbSBkYXRhIGFzIGl0IG1heSBiZSB1c2VkIHJlY3Vyc2l2ZWx5ICovCisgIGlm
IChmcmFtZS0+aW50eXBlID09IExSRUFEX0lOUFVUX0ZJTEUKKyAgICAgICYmIGZyYW1lLT5pbnB1
dC5mLnN0cmVhbSA9PSBzdGRpbikKKyAgICB7CisgICAgICBzdGRpbl9pbmZpbGUucy5sb29rYWhl
YWQgPSBmcmFtZS0+aW5wdXQuZi5sb29rYWhlYWQ7CisgICAgICBtZW1jcHkgKHN0ZGluX2luZmls
ZS5zLmJ1ZiwgZnJhbWUtPmlucHV0LmYuYnVmLCBzaXplb2Yoc3RkaW5faW5maWxlLnMuYnVmKSk7
CisgICAgICBzdGRpbl9pbmZpbGUudW5yZWFkX2NoYXIgPSBmcmFtZS0+dW5yZWFkX2NoYXI7Cisg
ICAgICBzdGRpbl9pbmZpbGUucmVhZF9lb2YgPSBmcmFtZS0+cmVhZF9lb2Y7CisgICAgICBzdGRp
bl9pbmZpbGUuY2hhcl9vZmZzZXQgPSBmcmFtZS0+Y2hhcl9vZmZzZXQ7CisgICAgICBzdGRpbl9p
bmZpbGUuYnl0ZV9vZmZzZXQgPSBmcmFtZS0+Ynl0ZV9vZmZzZXQ7CisgICAgfQorICBmcmFtZSA9
IChscmVhZF9mcmFtZSAqKSBwOworICAvKiBjaGFuZ2UgdGhlIHN0YW5kYXJkIGluaXRpYWxpemF0
aW9uIGFzIG5lZWRlZCBmb3IgZGlmZmVyZW50IGlucHV0IHR5cGVzICovCisgIGlmIChmcmFtZSkK
KyAgICB7CisgICAgICBzd2l0Y2ggKGZyYW1lLT5pbnR5cGUpCisgICAgICAgIHsKKyAgICAgICAg
Y2FzZSBMUkVBRF9JTlBVVF9GSUxFOgorICAgICAgICBjYXNlIExSRUFEX0lOUFVUX0ZJTEVfTVVM
RToKKyAgICAgICAgICAvKiBJJ20gbm90IHN1cmUgYW55dGhpbmcgZWxzZSBoYXMgYWNjZXNzIHRv
IHRoZXNlIHN0cmVhbSBvYmplY3RzLAorICAgICAgICAgICAgIGV4Y2VwdCBtYXliZSB0aHJvdWdo
ICJyZWFkZXItaW5wdXQtc3RyZWFtIiwKKyAgICAgICAgICAgICBidXQganVzdCBpbiBjYXNlLCBl
bnN1cmUgd2UgYXJlIGF0IHRoZSBzYW1lIG9mZnNldAorICAgICAgICAgICAgIE90aGVyd2lzZSwg
ZW5zdXJlICJzZWVrYWJsZSIgZmxhZyBpcyBvZmYgKi8KKyAgICAgICAgICBpZiAoZnJhbWUtPmlu
cHV0LmYuc2Vla2FibGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZzZWVrbyAoZnJh
bWUtPmlucHV0LmYuc3RyZWFtLCAob2ZmX3QpIGZyYW1lLT5ieXRlX29mZnNldCwgU0VFS19TRVQp
OworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExSRUFEX0lO
UFVUX1NUUklORzoKKyAgICAgICAgY2FzZSBMUkVBRF9JTlBVVF9QUk9DRURVUkU6CisgICAgICAg
ICAgLyogTXVsaXRieXRlIGNhbm5vdCBiZSBjaGFuZ2VkIGhlcmUqLworICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIExSRUFEX0lOUFVUX0JVRkZFUjoKKyAgICAgICAgY2FzZSBMUkVBRF9J
TlBVVF9NQVJLRVI6CisgICAgICAgICAgLyogTWlnaHQgaGF2ZSBjaGFuZ2VkIG11bHRpYnl0ZSov
CisgICAgICAgICAgcmVwb3J0X2xyZWFkX211bHRpYnl0ZSAoZnJhbWUpOworICAgICAgICAgIGlu
aXRpYWxpemVfcmVhZG9uZWNoYXIgKGZyYW1lKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBMUkVBRF9JTlBVVF9CSU5BUlk6CisgICAgICAgIGNhc2UgTFJFQURfSU5QVVRfTlVMTDoK
KyAgICAgICAgICAvKiBub3RoaW5nIHRvIGRvICovCisgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTFJFQURfSU5QVVRfSU5ESVJFQ1Q6CisgICAgICAgICAgLyogbm90aGluZyB0byBkbywg
bWF5YmUgKi8KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgICBVTlJFQ09HTklaRURfTFJFQURf
SU5QVVRfQ0FTRVMoInJlc3RvcmVfbHJlYWRfZnJhbWUiKTsKKyAgICAgICAgfQorICAgIH0KKyAg
Y3VycmVudF9mcmFtZSA9IGZyYW1lOworfQorCiB2b2lkCiBzeW1zX29mX2xyZWFkICh2b2lkKQog
ewpAQCAtNTk0NCw4ICs3NzAwLDYgQEAgc3ltc19vZl9scmVhZCAodm9pZCkKIGN1c3RvbWl6ZSBg
amthLWNvbXByLWxvYWQtc3VmZml4ZXMnIHJhdGhlciB0aGFuIHRoZSBwcmVzZW50IHZhcmlhYmxl
LiAgKi8pOwogICBWbG9hZF9maWxlX3JlcF9zdWZmaXhlcyA9IGxpc3QxIChlbXB0eV91bmlieXRl
X3N0cmluZyk7CiAKLSAgREVGU1lNIChRamthX2NvbXByX2xvYWRfc3VmZml4ZXMsICJqa2EtY29t
cHItbG9hZC1zdWZmaXhlcyIpOwotCiAgIERFRlZBUl9CT09MICgibG9hZC1pbi1wcm9ncmVzcyIs
IGxvYWRfaW5fcHJvZ3Jlc3MsCiAgICAgZG9jOiAvKiBOb24tbmlsIGlmIGluc2lkZSBvZiBgbG9h
ZCcuICAqLyk7CiAgIERFRlNZTSAoUWxvYWRfaW5fcHJvZ3Jlc3MsICJsb2FkLWluLXByb2dyZXNz
Iik7CkBAIC02MDEwLDYgKzc3NjQsNyBAQCBzeW1zX29mX2xyZWFkICh2b2lkKQogICAgIGRvYzog
LyogVXNlZCBmb3IgaW50ZXJuYWwgcHVycG9zZXMgYnkgYGxvYWQnLiAgKi8pOwogICBWY3VycmVu
dF9sb2FkX2xpc3QgPSBRbmlsOwogCisgIERFRlNZTSAoUWxvYWRfcmVhZF9mdW5jdGlvbiwibG9h
ZC1yZWFkLWZ1bmN0aW9uIik7CiAgIERFRlZBUl9MSVNQICgibG9hZC1yZWFkLWZ1bmN0aW9uIiwg
VmxvYWRfcmVhZF9mdW5jdGlvbiwKICAgICBkb2M6IC8qIEZ1bmN0aW9uIHVzZWQgZm9yIHJlYWRp
bmcgZXhwcmVzc2lvbnMuCiBJdCBpcyB1c2VkIGJ5IGBsb2FkJyBhbmQgYGV2YWwtcmVnaW9uJy4K
QEAgLTYxMjcsMzAgKzc4ODIsMjggQEAgc3ltc19vZl9scmVhZCAodm9pZCkKIHRocm91Z2ggYHJl
cXVpcmUnLiAgKi8pOwogICBsb2FkX25vX25hdGl2ZSA9IGZhbHNlOwogCi0gIERFRlZBUl9MSVNQ
ICgibG9hZC1wYXRoLWZpbHRlci1mdW5jdGlvbiIsCi0JICAgICAgIFZsb2FkX3BhdGhfZmlsdGVy
X2Z1bmN0aW9uLAotCSAgICAgICBkb2M6IC8qIElmIG5vbi1uaWwsIGEgZnVuY3Rpb24gdG8gZmls
dGVyIGBsb2FkLXBhdGgnIGZvciBgbG9hZCcuCi0KLUlmIHRoaXMgdmFyaWFibGUgaXMgYSBmdW5j
dGlvbiwgaXQgaXMgY2FsbGVkIHdoZW4gYGxvYWQnIGlzIGFib3V0IHRvCi1zZWFyY2ggZm9yIGEg
ZmlsZSBhbG9uZyBgbG9hZC1wYXRoJy4gIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhy
ZWUKLWFyZ3VtZW50czogdGhlIGN1cnJlbnQgdmFsdWUgb2YgYGxvYWQtcGF0aCcgKGEgbGlzdCBv
ZiBkaXJlY3RvcmllcyksCi10aGUgRklMRSBhcmd1bWVudCB0byBgbG9hZCcsIGFuZCB0aGUgY3Vy
cmVudCBsaXN0IG9mIGxvYWQtc3VmZml4ZXMuCi0KLUl0IHNob3VsZCByZXR1cm4gYSAoaG9wZWZ1
bGx5IHNob3J0ZXIpIGxpc3Qgb2YgZGlyZWN0b3JpZXMsIHdoaWNoIGBsb2FkJwotd2lsbCB1c2Ug
aW5zdGVhZCBvZiBgbG9hZC1wYXRoJyB0byBsb29rIGZvciB0aGUgZmlsZSB0byBsb2FkLiAgKi8p
OwotICBWbG9hZF9wYXRoX2ZpbHRlcl9mdW5jdGlvbiA9IFFuaWw7Ci0KICAgLyogVnNvdXJjZV9k
aXJlY3Rvcnkgd2FzIGluaXRpYWxpemVkIGluIGluaXRfbHJlYWQuICAqLwogCiAgIERFRlNZTSAo
UWN1cnJlbnRfbG9hZF9saXN0LCAiY3VycmVudC1sb2FkLWxpc3QiKTsKICAgREVGU1lNIChRc3Rh
bmRhcmRfaW5wdXQsICJzdGFuZGFyZC1pbnB1dCIpOwogICBERUZTWU0gKFFyZWFkX2NoYXIsICJy
ZWFkLWNoYXIiKTsKICAgREVGU1lNIChRZ2V0X2ZpbGVfY2hhciwgImdldC1maWxlLWNoYXIiKTsK
LQorICBERUZTWU0gKFFyZWFkZXJfaW5wdXRfc3RyZWFtLCAicmVhZGVyLWlucHV0LXN0cmVhbSIp
OworICBkZWZzdWJyICgmU3JlYWRlcl9pbnB1dF9zdHJlYW0pOwogICAvKiBVc2VkIGluc3RlYWQg
b2YgUWdldF9maWxlX2NoYXIgd2hpbGUgbG9hZGluZyAqLmVsYyBmaWxlcyBjb21waWxlZAogICAg
ICBieSBFbWFjcyAyMSBvciBvbGRlci4gICovCiAgIERFRlNZTSAoUWdldF9lbWFjc19tdWxlX2Zp
bGVfY2hhciwgImdldC1lbWFjcy1tdWxlLWZpbGUtY2hhciIpOwogCisgIC8qIFRoaXMgaXMgYW4g
aW50ZXJuYWwgc2lnbmFsIGZvciBza2lwcGluZyBoYW5kbGVycyB3aGVuIGFuIGludGVycnVwdAor
ICAgICBwcm9kdWNlcyBhbiB1bmhhbmRsZWQgc2lnbmFsKi8KKyAgREVGU1lNIChRZXJyb3JfZHVy
aW5nX2ludGVycnVwdCwiZXJyb3ItZHVyaW5nLWludGVycnVwdCIpOworICAvKiBUaGlzIGlzIHVz
ZWQgZm9yIHNraXBwaW5nIGZyYW1lcywgc28gbm8gb3RoZXIgaGFuZGxlcnMgYXJlIGFsbG93ZWQg
dG8gaW50ZXJjZXB0Ki8KKyAgRnB1dCAoUWVycm9yX2R1cmluZ19pbnRlcnJ1cHQsIFFlcnJvcl9j
b25kaXRpb25zLAorICAgICAgICBRbmlsKTsKKyAgRnB1dCAoUWVycm9yX2R1cmluZ19pbnRlcnJ1
cHQsIFFlcnJvcl9tZXNzYWdlLAorICAgICAgICBidWlsZF9zdHJpbmcgKCJVbmhhbmRsZWQgZXJy
b3ItZHVyaW5nLWludGVycnVwdDogaW50ZXJuYWwgZXJyb3IiKSk7CisKKwogICBERUZTWU0gKFFs
b2FkX2ZvcmNlX2RvY19zdHJpbmdzLCAibG9hZC1mb3JjZS1kb2Mtc3RyaW5ncyIpOwogCiAgIERF
RlNZTSAoUWJhY2txdW90ZSwgImAiKTsKQEAgLTYxNzUsMTMgKzc5MjgsNiBAQCBzeW1zX29mX2xy
ZWFkICh2b2lkKQogICBERUZTWU0gKFFkaXJfb2ssICJkaXItb2siKTsKICAgREVGU1lNIChRZG9f
YWZ0ZXJfbG9hZF9ldmFsdWF0aW9uLCAiZG8tYWZ0ZXItbG9hZC1ldmFsdWF0aW9uIik7CiAKLSAg
c3RhdGljcHJvICgmcmVhZF9vYmplY3RzX21hcCk7Ci0gIHJlYWRfb2JqZWN0c19tYXAgPSBRbmls
OwotICBzdGF0aWNwcm8gKCZyZWFkX29iamVjdHNfY29tcGxldGVkKTsKLSAgcmVhZF9vYmplY3Rz
X2NvbXBsZXRlZCA9IFFuaWw7Ci0KLSAgVmxvYWRzX2luX3Byb2dyZXNzID0gUW5pbDsKLSAgc3Rh
dGljcHJvICgmVmxvYWRzX2luX3Byb2dyZXNzKTsKIAogICBERUZTWU0gKFFoYXNoX3RhYmxlLCAi
aGFzaC10YWJsZSIpOwogICBERUZTWU0gKFFkYXRhLCAiZGF0YSIpOwo=
--00000000000046262406386c91be--




Message sent:


Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Mailer: MIME-tools 5.505 (Entity 5.505)
Content-Type: text/plain; charset=utf-8
X-Loop: help-debbugs@HIDDEN
From: help-debbugs@HIDDEN (GNU bug Tracking System)
To: Lynn Winebarger <owinebar@HIDDEN>
Subject: bug#78898: Acknowledgement (Make read/readevalloop reentrant)
Message-ID: <handler.78898.B.175088883323247.ack <at> debbugs.gnu.org>
References: <CAM=F=bB2qY_xnrGHwbn1s3b_=f+vri0c252jGgTFpDtrN2pfgA@HIDDEN>
X-Gnu-PR-Message: ack 78898
X-Gnu-PR-Package: emacs
Reply-To: 78898 <at> debbugs.gnu.org
Date: Wed, 25 Jun 2025 22:01:07 +0000

Thank you for filing a new bug report with debbugs.gnu.org.

This is an automatically generated reply to let you know your message
has been received.

Your message is being forwarded to the package maintainers and other
interested parties for their attention; they will reply in due course.

Your message has been sent to the package maintainer(s):
 bug-gnu-emacs@HIDDEN

If you wish to submit further information on this problem, please
send it to 78898 <at> debbugs.gnu.org.

Please do not send mail to help-debbugs@HIDDEN unless you wish
to report a problem with the Bug-tracking system.

--=20
78898: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D78898
GNU Bug Tracking System
Contact help-debbugs@HIDDEN with problems


Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#78898: Make read/readevalloop reentrant
Resent-From: Lynn Winebarger <owinebar@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 26 Jun 2025 23:17:05 +0000
Resent-Message-ID: <handler.78898.B78898.175097978028148 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 78898
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: 78898 <at> debbugs.gnu.org
Received: via spool by 78898-submit <at> debbugs.gnu.org id=B78898.175097978028148
          (code B ref 78898); Thu, 26 Jun 2025 23:17:05 +0000
Received: (at 78898) by debbugs.gnu.org; 26 Jun 2025 23:16:20 +0000
Received: from localhost ([127.0.0.1]:54889 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uUvpM-0007Jv-7U
	for submit <at> debbugs.gnu.org; Thu, 26 Jun 2025 19:16:20 -0400
Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]:41787)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <owinebar@HIDDEN>)
 id 1uUvpI-0007Ij-HY
 for 78898 <at> debbugs.gnu.org; Thu, 26 Jun 2025 19:16:17 -0400
Received: by mail-wr1-x42e.google.com with SMTP id
 ffacd0b85a97d-3a6f24ef3acso159577f8f.3
 for <78898 <at> debbugs.gnu.org>; Thu, 26 Jun 2025 16:16:16 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1750979769; x=1751584569; darn=debbugs.gnu.org;
 h=to:subject:message-id:date:from:in-reply-to:references:mime-version
 :from:to:cc:subject:date:message-id:reply-to;
 bh=y2BY4Bxq7Q0TSBEs0lqvL+1b5KVruBjwZDjhZ5dSu8c=;
 b=ToZmOjtB5iDkAEsGqGmf5+MA/8VL4o+eR7zCnuxTnUgKop4tDJtozJ5DWaa2uI/xsM
 AUX3Q7zjDg55AbROniVExSnnweYssP3uURsyCPlPqt7D1/hbMrGU56tEvkWioChZWHvp
 FvXt8hK2UyiAXE/4prcMlvtigBSvhLb6kAsoecRKPPrtIIXvQ/F6sxeqPaUYuRuIFtwI
 RZ0GgjzvEzN30AuRyWvHVL4CUGxxqaSN4tsRtSTUkLs15SuoHzOD/SfV9Cq7aqsrScha
 7iNKD3P/RshKDn/qwJ9UPxzboM8qVJJTjRX+t08zdmIY5Md4EScifLsTmoZjwYwSga30
 qXQA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1750979769; x=1751584569;
 h=to:subject:message-id:date:from:in-reply-to:references:mime-version
 :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=y2BY4Bxq7Q0TSBEs0lqvL+1b5KVruBjwZDjhZ5dSu8c=;
 b=otJVAEtDf7eNtubDC1uXadI48n4OCm4GqNGR+mY74/KH3jlw4EPu92wd187I5Wwfvi
 W7Ty/Rho9WqEBAx6fYQPIyG9OKeazMYY1Z6oDQDYWtyJHW0Q1gTXdEMWIFt4s0z5f1F/
 gPqTzPheCDT6TxyrjQaFp0+YediIn/2w4n87LkLBXRBijRhGwq35kYNGaQWJtAm+ywyO
 40/qMAqg5cZWuSZqLTCCEulfj3W9tH8mslBw3NyappuOkLY2x1sRoREf8HI3neRCMpLD
 GGqBvvzYDHEPlYU/3wkqwCmTGIjDzpFh596Z4Eblm+tCbO9QSUDNm85PTGwqEqyaa3vk
 2CxA==
X-Gm-Message-State: AOJu0Ywo5dkgAuBIyQjHni/F3ei3nOrTBtm92UApBo9OjuVTgW0iTaQR
 TTbt1nuMLa+tgRHls5lYUdTd4yxPhKA5hW8DyjU+VjQznzIzfakpU3DLHyHlX20lfHoOCcnuEOa
 ms5lgwjEVOfZ0yTRosz4g92ZRZHv2boc1smgI
X-Gm-Gg: ASbGncv28GqzIvEASUGOdo6cWvCCnn9E853v/ft8Xc8lGU1OW1OyUuUqFTmcQWBhh6r
 nLmt2atkTD87Kpbc1za+4V4uV5eANMDli+kFcVN1IlCZiDk8ug/h+Ls+rLppuT3Jp4Y0Rc8Rb+/
 COmidjHYaLNVz4IynmW2KYbGKOD6TTy+7QN/QOQiWSSoUnSLEQZLz0aX+p
X-Google-Smtp-Source: AGHT+IFjzl25sT1C//5qksBMCnTHVByxjIHc2Z3rrW0lYb8UwqNdb/guOwKn2Gii9ig6L6fLbs3FIHmnkJKXNZzbiE4=
X-Received: by 2002:a05:6000:2d06:b0:3a5:8934:4948 with SMTP id
 ffacd0b85a97d-3a9000ac999mr243880f8f.12.1750979769123; Thu, 26 Jun 2025
 16:16:09 -0700 (PDT)
MIME-Version: 1.0
References: <CAM=F=bB2qY_xnrGHwbn1s3b_=f+vri0c252jGgTFpDtrN2pfgA@HIDDEN>
In-Reply-To: <CAM=F=bB2qY_xnrGHwbn1s3b_=f+vri0c252jGgTFpDtrN2pfgA@HIDDEN>
From: Lynn Winebarger <owinebar@HIDDEN>
Date: Thu, 26 Jun 2025 19:15:57 -0400
X-Gm-Features: Ac12FXw8IkzzjIy7efDDATP0w779spCYU8nGZut4ppqfrb4DVVGay-XMVGmjMnY
Message-ID: <CAM=F=bD0Y_NWKq8Y1bfG7EkyfeQTUatny6bSjtufjPmZLfkS+A@HIDDEN>
Content-Type: multipart/mixed; boundary="00000000000025f44f063881bfa1"
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://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: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>

--00000000000025f44f063881bfa1
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Wed, Jun 25, 2025 at 6:01=E2=80=AFPM Lynn Winebarger <owinebar@HIDDEN=
> wrote:
>
> In the recursive sense, not the "safe for concurrency" sense.
>
> I want to use readevalloop to process command-line arguments, and my
> initial attempts failed to handle '"(load "loadup.el") (princ
> "Done")'.  So I took a stab at making all the entry points synchronize
> with an explicit stack of continuation frames shared between read0 and
> readevalloop.
>
> The attached diff is against master from a couple of days ago.  For
> me, a configure/build (from scratch) completes *almost* everything
> (including the standard AOT native-compiled bits) - it chokes on
> lisp/leim/ja-dic.el due to a failure in a compiled function in
> bytecomp.elc.  There are clearly still some issues where the new code
> is not dealing with unibyte/multibyte correctly.  For example, running
> emacs -Q shows the initial scratch buffer contents as:
>
> ;; This buffer is for text that is not saved, and for Lisp evaluation.
> ;; To create a file, visit it with =C3=A2=E2=82=AC=CB=9CC-x C-f=C3=A2=E2=
=82=AC=E2=84=A2 and enter text in its buffer.
>
> This is definitely not ready for committing, but I'm hoping someone
> else finds this of interest and maybe can spot where I'm going wrong
> with the unibyte/multibyte handling.  Or what is going on with
> ja-dic.el.  The error I'm seeing there is in the execution of some
> byte-code, where some bit-wise operator gets a non-numeric argument.
> My only idea at present is to diff the byte-compiled libraries and see
> what's going on there - theoretically, there shouldn't be any change
> in the results of the byte-compiler.


It was pointed out to me that the patch did not actually apply cleanly
to master.
I'm attaching a patch generated by 'git format-path' after installing
the modified lread.c to a freshly cloned master.  That failed to
build, so this patch is not quite the same.  The one issue I mentioned
about the initial scratch buffer seems to have resolved, at least.
When I start it without '-Q', though, the button that precedes the
missing lexical-binding cookie message is labeled with '=C3=A2\226_'
instead of whatever the text should be.  The 'ja-dic.el' file still
produces the same error, but putting a pre-built copy of ja-dic.elc in
the source tree allowed the build to complete.
My configuration options are "--enable-checking=3Dyes,glyphs
--enable-check-lisp-object-type 'CFLAGS=3D-O0 -g3 -gdwarf-5
-fvar-tracking -gstatement-frontiers'
--infodir=3D/usr/local/share/emacs/31/share/info
--mandir=3D/usr/local/share/emacs/31/share/man
--docdir=3D/usr/local/share/emacs/31/share/doc/emacs
--localedir=3D/usr/local/share/emacs/31/share/locale --with-x --with-xim
--with-sound --with-xpm --with-jpeg --with-tiff --with-gif --with-png
--with-rsvg --with-imagemagick --with-dbus --with-gpm
--with-x-toolkit=3Dgtk3 --with-toolkit-scroll-bars --with-libotf
--with-m17n-flt --with-cairo --with-xwidgets --disable-build-details
--without-pop --with-mailutils --without-hesiod --with-gameuser=3D:games
--with-kerberos --with-kerberos5 --with-file-notification=3Dinotify
--with-modules --with-tree-sitter NATIVE_COMPILATION_AOT=3Dyes"
Although it is not currently building all the libraries natively AOT.
Which is probably good, because the native compiler seems to be even
slower than usual while bootstrapping.

--00000000000025f44f063881bfa1
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0001-Changes-to-make-entry-to-read0-and-readevalloop-recu.patch"
Content-Disposition: attachment; 
	filename="0001-Changes-to-make-entry-to-read0-and-readevalloop-recu.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_mcdzptut0>
X-Attachment-Id: f_mcdzptut0

RnJvbSBmYzIxYWM4OGEwYTJlOWE0YWIxMzJkOGIxNmNmNDA2Mjk3NDJkNTZmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBPbm5pZSBMeW5uIFdpbmViYXJnZXIgPG93aW5lYmFyQGdtYWls
LmNvbT4KRGF0ZTogVGh1LCAyNiBKdW4gMjAyNSAxNDowMToxMyAtMDQwMApTdWJqZWN0OiBbUEFU
Q0hdIENoYW5nZXMgdG8gbWFrZSBlbnRyeSB0byByZWFkMCBhbmQgcmVhZGV2YWxsb29wIHJlY3Vy
c2l2ZWx5CiByZWVudHJhbnQuCgpGaXhlZCBpc3N1ZXMgd2l0aCBpbmRpcmVjdCBscmVhZF9mcmFt
ZXMKLS0tCiBzcmMvY29kaW5nLmMgfCAgIDIzICsKIHNyYy9scmVhZC5jICB8IDQ4MDYgKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KIDIgZmlsZXMgY2hh
bmdlZCwgMzM0OCBpbnNlcnRpb25zKCspLCAxNDgxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh
L3NyYy9jb2RpbmcuYyBiL3NyYy9jb2RpbmcuYwppbmRleCBhOTIzYjZiZDgyZC4uZjRjZTFjNGI1
YmQgMTAwNjQ0Ci0tLSBhL3NyYy9jb2RpbmcuYworKysgYi9zcmMvY29kaW5nLmMKQEAgLTEyMzA0
LDYgKzEyMzA0LDI5IEBAIHN5c3RlbSAoZS5nLiBgaXNvLTIwMjItN2JpdCcpLgogICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvZGluZ19jYXRlZ29yeV9tYXg7IGkrKykKICAgICBGc2V0IChBUkVGIChW
Y29kaW5nX2NhdGVnb3J5X3RhYmxlLCBpKSwgUW5vX2NvbnZlcnNpb24pOwogCisgIHBsaXN0WzFd
ID0gYXJnc1tjb2RpbmdfYXJnX25hbWVdID0gUXJhd190ZXh0OworICBwbGlzdFszXSA9IGFyZ3Nb
Y29kaW5nX2FyZ19tbmVtb25pY10gPSBtYWtlX2ZpeG51bSAoJ3QnKTsKKyAgcGxpc3RbNV0gPSBh
cmdzW2NvZGluZ19hcmdfY29kaW5nX3R5cGVdID0gUXJhd190ZXh0OworICAvKiBUaGlzIGlzIGFs
cmVhZHkgc2V0LgorICAgICBwbGlzdFs3XSA9IGFyZ3NbY29kaW5nX2FyZ19hc2NpaV9jb21wYXRp
YmxlX3BdID0gUXQ7ICovCisgIHBsaXN0WzhdID0gaW50ZXJuX2Nfc3RyaW5nICgiOmNoYXJzZXQt
bGlzdCIpOworICBwbGlzdFs5XSA9IGFyZ3NbY29kaW5nX2FyZ19jaGFyc2V0X2xpc3RdID0gUW5p
bDsKKyAgcGxpc3RbMTFdID0gYXJnc1tjb2RpbmdfYXJnX2Zvcl91bmlieXRlXSA9IFF0OworI2Rl
ZmluZSBSQVdfVEVYVF9ERVNDUklQVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAiUmF3IHRleHQsIHdoaWNoIG1lYW5zIHRleHQgY29udGFpbnMgcmFu
ZG9tIDgtYml0IGNvZGVzLlxuIiAgICAgICAgICAgXAorICAgICJFbmNvZGluZyB0ZXh0IHdpdGgg
dGhpcyBjb2Rpbmcgc3lzdGVtIHByb2R1Y2VzIHRoZSBhY3R1YWwgYnl0ZVxuIiAgXAorICAgICJz
ZXF1ZW5jZSBvZiB0aGUgdGV4dCBpbiBidWZmZXJzIGFuZCBzdHJpbmdzLiAgQW4gZXhjZXB0aW9u
IGlzIG1hZGUgZm9yXG4iIFwKKyAgICAiY2hhcmFjdGVycyBmcm9tIHRoZSBgZWlnaHQtYml0JyBj
aGFyYWN0ZXIgc2V0LiAgRWFjaCBvZiB0aGVtIGlzIGVuY29kZWRcbiIgXAorICAgICJpbnRvIGEg
c2luZ2xlIGJ5dGUuXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICJXaGVuIHlvdSB2aXNpdCBhIGZpbGUgd2l0aCB0
aGlzIGNvZGluZywgdGhlIGZpbGUgaXMgcmVhZCBpbnRvIGFcbiIgXAorICAgICJ1bmlieXRlIGJ1
ZmZlciBhcyBpcyAoZXhjZXB0IGZvciBFT0wgZm9ybWF0KSwgdGh1cyBlYWNoIGJ5dGUgb2YgYSBm
aWxlXG4iIFwKKyAgICAiaXMgdHJlYXRlZCBhcyBhIGNoYXJhY3Rlci4iCisgIHBsaXN0WzEzXSA9
IGJ1aWxkX3N0cmluZyAoUkFXX1RFWFRfREVTQ1JJUFRJT04pOworICBwbGlzdFsxNV0gPSBhcmdz
W2NvZGluZ19hcmdfZW9sX3R5cGVdID0gUW5pbDsKKyAgYXJnc1tjb2RpbmdfYXJnX3BsaXN0XSA9
IENBTExNQU5ZIChGbGlzdCwgcGxpc3QpOworICBGZGVmaW5lX2NvZGluZ19zeXN0ZW1faW50ZXJu
YWwgKGNvZGluZ19hcmdfbWF4LCBhcmdzKTsKKwogICBwZHVtcGVyX2RvX25vd19hbmRfYWZ0ZXJf
bG9hZCAocmVzZXRfY29kaW5nX2FmdGVyX3BkdW1wZXJfbG9hZCk7CiAKICAgREVGU1lNIChRVW5r
bm93bl9lcnJvciwgIlVua25vd24gZXJyb3IiKTsKZGlmZiAtLWdpdCBhL3NyYy9scmVhZC5jIGIv
c3JjL2xyZWFkLmMKaW5kZXggNDBlYjZhZDc4NzUuLjBmYmUxODdiNWE4IDEwMDY0NAotLS0gYS9z
cmMvbHJlYWQuYworKysgYi9zcmMvbHJlYWQuYwpAQCAtNDYsNiArNDYsNyBAQCAjZGVmaW5lIERF
RklORV9TWU1CT0xTCiAjaW5jbHVkZSAicGR1bXBlci5oIgogI2luY2x1ZGUgPGMtY3R5cGUuaD4K
ICNpbmNsdWRlIDx2bGEuaD4KKyNpbmNsdWRlICJzeXN0dHkuaCIKIAogI2lmZGVmIE1TRE9TCiAj
aW5jbHVkZSAibXNkb3MuaCIKQEAgLTU4LDIzICs1OSwyMyBAQCAjZGVmaW5lIERFRklORV9TWU1C
T0xTCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KIAotI2lmICFkZWZp
bmVkIEhBVkVfQU5EUk9JRCB8fCBkZWZpbmVkIEFORFJPSURfU1RVQklGWQlcCisjaWYgIWRlZmlu
ZWQgSEFWRV9BTkRST0lEIHx8IGRlZmluZWQgQU5EUk9JRF9TVFVCSUZZICAgIFwKICAgfHwgKF9f
QU5EUk9JRF9BUElfXyA8IDkpCiAKLSNkZWZpbmUgbHJlYWRfZmQJaW50CisjZGVmaW5lIGxyZWFk
X2ZkICAgICAgICBpbnQKICNkZWZpbmUgbHJlYWRfZmRfY21wKG4pIChmZCA9PSAobikpCi0jZGVm
aW5lIGxyZWFkX2ZkX3AJKGZkID49IDApCi0jZGVmaW5lIGxyZWFkX2Nsb3NlCWVtYWNzX2Nsb3Nl
Ci0jZGVmaW5lIGxyZWFkX2ZzdGF0CXN5c19mc3RhdAotI2RlZmluZSBscmVhZF9yZWFkX3F1aXQJ
ZW1hY3NfcmVhZF9xdWl0Ci0jZGVmaW5lIGxyZWFkX2xzZWVrCWxzZWVrCi0KLSNkZWZpbmUgZmls
ZV9zdHJlYW0JCUZJTEUgKgotI2RlZmluZSBmaWxlX3NlZWsJCWZzZWVrCi0jZGVmaW5lIGZpbGVf
c3RyZWFtX3ZhbGlkX3AocCkJKHApCi0jZGVmaW5lIGZpbGVfc3RyZWFtX2Nsb3NlCWVtYWNzX2Zj
bG9zZQotI2RlZmluZSBmaWxlX3N0cmVhbV9pbnZhbGlkCU5VTEwKLSNkZWZpbmUgZmlsZV9nZXRf
Y2hhcgkJZ2V0YworI2RlZmluZSBscmVhZF9mZF9wICAgICAgKGZkID49IDApCisjZGVmaW5lIGxy
ZWFkX2Nsb3NlICAgICBlbWFjc19jbG9zZQorI2RlZmluZSBscmVhZF9mc3RhdCAgICAgc3lzX2Zz
dGF0CisjZGVmaW5lIGxyZWFkX3JlYWRfcXVpdCBlbWFjc19yZWFkX3F1aXQKKyNkZWZpbmUgbHJl
YWRfbHNlZWsgICAgIGxzZWVrCisKKyNkZWZpbmUgZmlsZV9zdHJlYW0gICAgICAgICAgICAgRklM
RSAqCisjZGVmaW5lIGZpbGVfc2VlayAgICAgICAgICAgICAgIGZzZWVrCisjZGVmaW5lIGZpbGVf
c3RyZWFtX3ZhbGlkX3AocCkgIChwKQorI2RlZmluZSBmaWxlX3N0cmVhbV9jbG9zZSAgICAgICBl
bWFjc19mY2xvc2UKKyNkZWZpbmUgZmlsZV9zdHJlYW1faW52YWxpZCAgICAgTlVMTAorI2RlZmlu
ZSBmaWxlX2dldF9jaGFyICAgICAgICAgICBnZXRjCiAKICNpZmRlZiBIQVZFX0ZTRUVLTwogI2Rl
ZmluZSBmaWxlX29mZnNldCBvZmZfdApAQCAtMTAyLDEzICsxMDMsMTMgQEAgI2RlZmluZSBmaWxl
X3RlbGwgZnRlbGwKICAgIHBhcnRpY3VsYXIgc3lzdGVtLCBmYWxsIGJhY2sgdG8gdGhlIHVzdWFs
IGZpbGUgZGVzY3JpcHRvci1iYXNlZAogICAgY29kZS4gICovCiAKLSNkZWZpbmUgbHJlYWRfZmQJ
c3RydWN0IGFuZHJvaWRfZmRfb3JfYXNzZXQKLSNkZWZpbmUgbHJlYWRfZmRfY21wKG4pCSghZmQu
YXNzZXQgJiYgZmQuZmQgPT0gKG4pKQotI2RlZmluZSBscmVhZF9mZF9wCShmZC5hc3NldCB8fCBm
ZC5mZCA+PSAwKQotI2RlZmluZSBscmVhZF9jbG9zZQlhbmRyb2lkX2Nsb3NlX2Fzc2V0Ci0jZGVm
aW5lIGxyZWFkX2ZzdGF0CWFuZHJvaWRfYXNzZXRfZnN0YXQKLSNkZWZpbmUgbHJlYWRfcmVhZF9x
dWl0CWFuZHJvaWRfYXNzZXRfcmVhZF9xdWl0Ci0jZGVmaW5lIGxyZWFkX2xzZWVrCWFuZHJvaWRf
YXNzZXRfbHNlZWsKKyNkZWZpbmUgbHJlYWRfZmQgICAgICAgIHN0cnVjdCBhbmRyb2lkX2ZkX29y
X2Fzc2V0CisjZGVmaW5lIGxyZWFkX2ZkX2NtcChuKSAoIWZkLmFzc2V0ICYmIGZkLmZkID09IChu
KSkKKyNkZWZpbmUgbHJlYWRfZmRfcCAgICAgIChmZC5hc3NldCB8fCBmZC5mZCA+PSAwKQorI2Rl
ZmluZSBscmVhZF9jbG9zZSAgICAgYW5kcm9pZF9jbG9zZV9hc3NldAorI2RlZmluZSBscmVhZF9m
c3RhdCAgICAgYW5kcm9pZF9hc3NldF9mc3RhdAorI2RlZmluZSBscmVhZF9yZWFkX3F1aXQgYW5k
cm9pZF9hc3NldF9yZWFkX3F1aXQKKyNkZWZpbmUgbHJlYWRfbHNlZWsgICAgIGFuZHJvaWRfYXNz
ZXRfbHNlZWsKIAogLyogVGhlIGludmFsaWQgZmlsZSBzdHJlYW0uICAqLwogCkBAIC0xMTgsMTMg
KzExOSwxMyBAQCAjZGVmaW5lIGxyZWFkX2xzZWVrCWFuZHJvaWRfYXNzZXRfbHNlZWsKICAgICBO
VUxMLAogICB9OwogCi0jZGVmaW5lIGZpbGVfc3RyZWFtCQlzdHJ1Y3QgYW5kcm9pZF9mZF9vcl9h
c3NldAotI2RlZmluZSBmaWxlX29mZnNldAkJb2ZmX3QKLSNkZWZpbmUgZmlsZV90ZWxsKG4pCQlh
bmRyb2lkX2Fzc2V0X2xzZWVrIChuLCAwLCBTRUVLX0NVUikKLSNkZWZpbmUgZmlsZV9zZWVrCQlh
bmRyb2lkX2Fzc2V0X2xzZWVrCi0jZGVmaW5lIGZpbGVfc3RyZWFtX3ZhbGlkX3AocCkJKChwKS5h
c3NldCB8fCAocCkuZmQgPj0gMCkKLSNkZWZpbmUgZmlsZV9zdHJlYW1fY2xvc2UJYW5kcm9pZF9j
bG9zZV9hc3NldAotI2RlZmluZSBmaWxlX3N0cmVhbV9pbnZhbGlkCWludmFsaWRfZmlsZV9zdHJl
YW0KKyNkZWZpbmUgZmlsZV9zdHJlYW0gICAgICAgICAgICAgc3RydWN0IGFuZHJvaWRfZmRfb3Jf
YXNzZXQKKyNkZWZpbmUgZmlsZV9vZmZzZXQgICAgICAgICAgICAgb2ZmX3QKKyNkZWZpbmUgZmls
ZV90ZWxsKG4pICAgICAgICAgICAgYW5kcm9pZF9hc3NldF9sc2VlayAobiwgMCwgU0VFS19DVVIp
CisjZGVmaW5lIGZpbGVfc2VlayAgICAgICAgICAgICAgIGFuZHJvaWRfYXNzZXRfbHNlZWsKKyNk
ZWZpbmUgZmlsZV9zdHJlYW1fdmFsaWRfcChwKSAgKChwKS5hc3NldCB8fCAocCkuZmQgPj0gMCkK
KyNkZWZpbmUgZmlsZV9zdHJlYW1fY2xvc2UgICAgICAgYW5kcm9pZF9jbG9zZV9hc3NldAorI2Rl
ZmluZSBmaWxlX3N0cmVhbV9pbnZhbGlkICAgICBpbnZhbGlkX2ZpbGVfc3RyZWFtCiAKIC8qIFJl
dHVybiBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSB0aGUgZmlsZSBpbnB1dCBzdHJlYW0gU1RSRUFN
LgogICAgVmFsdWUgYW5kIGVycm9ycyBhcmUgdGhlIHNhbWUgYXMgZ2V0Yy4gICovCkBAIC0xNjgs
NiArMTY5LDI5OCBAQCAjZGVmaW5lIFVTRV9BTkRST0lEX0FTU0VUUwogIyBlbmRpZgogI2VuZGlm
CiAKKworI2lmIDAKK3N0YXRpYyBMaXNwX09iamVjdCByZWFkX29iamVjdHNfY29tcGxldGVkOwor
I2VuZGlmCisKK2VudW0geworICBJTkZJTEVfQlVGRkVSX1NJWkUgPSBNQVhfTVVMVElCWVRFX0xF
TkdUSCAtIDEKK307CisvKiBGaWxlIGFuZCBsb29rYWhlYWQgZm9yIGdldC1maWxlLWNoYXIgYW5k
IGdldC1lbWFjcy1tdWxlLWZpbGUtY2hhcgorICAgdG8gcmVhZCBmcm9tLiAgVXNlZCBieSBGbG9h
ZC4gICovCitzdHJ1Y3QgaW5maWxlCit7CisgIC8qIFRoZSBpbnB1dCBzdHJlYW0uICAqLworICBm
aWxlX3N0cmVhbSBzdHJlYW07CisKKyAgLyogTG9va2FoZWFkIGJ5dGUgY291bnQuICAqLworICBz
aWduZWQgY2hhciBsb29rYWhlYWQ7CisKKyAgLyogTG9va2FoZWFkIGJ5dGVzLCBpbiByZXZlcnNl
IG9yZGVyLiAgS2VlcCB0aGVzZSBoZXJlIGJlY2F1c2UgaXQgaXMKKyAgICAgbm90IHBvcnRhYmxl
IHRvIHVuZ2V0YyBtb3JlIHRoYW4gb25lIGJ5dGUgYXQgYSB0aW1lLiAgKi8KKyAgdW5zaWduZWQg
Y2hhciBidWZbSU5GSUxFX0JVRkZFUl9TSVpFXTsKKyAgLyogaXMgdGhpcyBzZWVrYWJsZT8gKi8K
KyAgYm9vbCBzZWVrYWJsZTsKKyAgYm9vbCBtdWxlOworICBMaXNwX09iamVjdCBjb2Rpbmc7Cit9
OworCisjZGVmaW5lIElOSVRfSU5GSUxFKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgKChzdHJ1Y3QgaW5maWxlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgIC5zdHJlYW0gPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgLmxvb2thaGVhZCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAuYnVmID0gIHsgMCB9LCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgIC5zZWVrYWJsZSA9IGZhbHNlLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgLm11bGUgPSBmYWxzZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgfSApCisKK3N0cnVjdCBpbnN0cmluZworeworICBMaXNw
X09iamVjdCBzdHJpbmc7CisgIHB0cmRpZmZfdCBzdGFydDsKKyAgcHRyZGlmZl90IGxpbWl0Owor
fTsKKyNkZWZpbmUgSU5JVF9JTlNUUklORygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAoKHN0cnVjdCBpbnN0cmluZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgLnN0cmluZyA9IFFuaWwsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAuc3RhcnQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgIC5saW1pdCA9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgIH0gKQorCisKK3N0cnVjdCBpbmJ1ZmZlcgoreworICBMaXNwX09i
amVjdCBidWZmZXI7Cit9OworI2RlZmluZSBJTklUX0lOQlVGRkVSKCkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICgoc3RydWN0IGluYnVmZmVyKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAuYnVmZmVyID0gUW5pbCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICB9ICkKKworc3RydWN0IGlubWFya2VyCit7Cisg
IHN0cnVjdCBpbmJ1ZmZlciBiOworICBMaXNwX09iamVjdCBtYXJrZXI7Cit9OworI2RlZmluZSBJ
TklUX0lOTUFSS0VSKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgoc3Ry
dWN0IGlubWFya2VyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAuYiA9IElOSVRfSU5CVUZGRVIoKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgIC5tYXJrZXIgPSBRbmlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgIH0gKQorCitzdHJ1Y3QgaW5wcm9jCit7CisgIExpc3BfT2JqZWN0IHByb2M7Cit9Oworc3Ry
dWN0IGluaW5kaXJlY3QKK3sKKyAgc3RydWN0IGxyZWFkX2ZyYW1lICpzb3VyY2U7Cit9OworI2Rl
ZmluZSBJTklUX0lOUFJPQygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICgoc3RydWN0IGlucHJvYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAucHJvYyA9IFFuaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICB9ICkKKwordHlwZWRlZiBlbnVtIGxyZWFkX2lucHV0X3R5cGUKK3sKKyAgTFJFQURf
SU5QVVRfVU5JTklULAorICBMUkVBRF9JTlBVVF9GSUxFLAorICBMUkVBRF9JTlBVVF9GSUxFX01V
TEUsCisgIExSRUFEX0lOUFVUX1NUUklORywKKyAgTFJFQURfSU5QVVRfQlVGRkVSLAorICBMUkVB
RF9JTlBVVF9NQVJLRVIsCisgIExSRUFEX0lOUFVUX1BST0NFRFVSRSwKKyAgTFJFQURfSU5QVVRf
QklOQVJZLAorICBMUkVBRF9JTlBVVF9JTkRJUkVDVCwKKyAgTFJFQURfSU5QVVRfTlVMTAorfSBs
cmVhZF9pbnB1dF90eXBlOworCisjZGVmaW5lIFZBTElEX0lOUFVUX1RZUEUoaW4pICggKChpbikg
Pj0gTFJFQURfSU5QVVRfVU5JTklUKSAmJiAoKGluKSA8PSBMUkVBRF9JTlBVVF9OVUxMKSApCisK
KyNkZWZpbmUgRlJPTV9GSUxFX1AoYXJnKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKygoYXJn
KSA9PSBMUkVBRF9JTlBVVF9GSUxFIHx8IChhcmcpID09IExSRUFEX0lOUFVUX0ZJTEVfTVVMRSkK
KyNkZWZpbmUgRlJPTV9CVUZGRVJfUChhcmcpICgoYXJnKSA9PSBMUkVBRF9JTlBVVF9CVUZGRVIp
CisjZGVmaW5lIEZST01fTUFSS0VSX1AoYXJnKSAoKGFyZykgPT0gTFJFQURfSU5QVVRfTUFSS0VS
KQorI2RlZmluZSBIQVNfQlVGRkVSX1AoYXJnKSAoKEZST01fQlVGRkVSX1AgKGFyZykpIHx8IChG
Uk9NX01BUktFUl9QIChhcmcpKSkKKyNpZiAwCisjZGVmaW5lIEZST01fUFJPQ19QKGFyZykgKChh
cmcpID09IExSRUFEX0lOUFVUX1BST0NFRFVSRSkKKyNkZWZpbmUgRlJPTV9TVFJJTkdfUChhcmcp
ICgoYXJnKSA9PSBMUkVBRF9JTlBVVF9TVFJJTkcpCisjZW5kaWYKKworc3RydWN0IGlubnVsbAor
eworfTsKKworZW51bSB7CisgIExSRUFEX0lOUFVUX1NJWkUgPSBNQVggKE1BWCAoc2l6ZW9mIChz
dHJ1Y3QgaW5maWxlKSwKKwkJCSAgICAgICBzaXplb2YgKHN0cnVjdCBpbm1hcmtlcikpLAorCQkJ
ICBzaXplb2YgKHN0cnVjdCBpbnN0cmluZykpCit9OwordHlwZWRlZiB1bmlvbiBscmVhZF9pbnB1
dAoreworICB1bnNpZ25lZCBjaGFyIHVuaW5pdFtMUkVBRF9JTlBVVF9TSVpFXTsKKyAgc3RydWN0
IGluZmlsZSBmOworICBzdHJ1Y3QgaW5zdHJpbmcgczsKKyAgc3RydWN0IGluYnVmZmVyIGI7Cisg
IHN0cnVjdCBpbm1hcmtlciBtOworICBzdHJ1Y3QgaW5wcm9jIHA7CisgIHN0cnVjdCBpbmluZGly
ZWN0IGZyYW1lOworICBzdHJ1Y3QgaW5udWxsIG47Cit9IGxyZWFkX2lucHV0OworCisjZGVmaW5l
IElOSVRfTFJFQURfSU5QVVQgKGxyZWFkX2lucHV0KSB7IC51bmluaXQgID0gIHsgMCB9IH0KKwor
CitzdHJ1Y3Qgc2F2ZWRfc3RyaW5nIHsKKyAgY2hhciAqc3RyaW5nOyAgICAgICAgICAgICAgICAg
Lyogc3RyaW5nIGluIGFsbG9jYXRlZCBidWZmZXIgKi8KKyAgcHRyZGlmZl90IHNpemU7ICAgICAg
ICAgICAgICAgLyogYWxsb2NhdGVkIHNpemUgb2YgYnVmZmVyICovCisgIHB0cmRpZmZfdCBsZW5n
dGg7ICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBzdHJpbmcgaW4gYnVmZmVyICovCisgIGZpbGVf
b2Zmc2V0IHBvc2l0aW9uOyAgICAgICAgIC8qIHBvc2l0aW9uIGluIGZpbGUgdGhlIHN0cmluZyBj
YW1lIGZyb20gKi8KK307CisjZGVmaW5lIElOSVRfU0FWRURfU1RSSU5HICgoc3RydWN0IHNhdmVk
X3N0cmluZykgeyBOVUxMLCAwLCAwLCAwIH0pCisKKyNpZiAwCisvKiBUaGUgbGFzdCB0d28gc3Ry
aW5ncyBza2lwcGVkIHdpdGggI0AgKG1vc3QgcmVjZW50IGZpcnN0KS4gICovCitzdGF0aWMgc3Ry
dWN0IHNhdmVkX3N0cmluZyBzYXZlZF9zdHJpbmdzWzJdOworI2VuZGlmCisKK3R5cGVkZWYgZW51
bSBscmVhZF9tdWx0aWJ5dGUKK3sKKyAgTFJFQURfTVVMVElCWVRFX0lOREVURVJNSU5BVEUgPSAt
MSwgLyogRm9yIHJlc2V0dGluZyAgKi8KKyAgTFJFQURfTVVMVElCWVRFX0ZBTFNFICA9IDAsCisg
IExSRUFEX01VTFRJQllURV9UUlVFICA9IDEKK30gbHJlYWRfbXVsdGlieXRlOworCisKKyNkZWZp
bmUgVkFMSURfTVVMVElCWVRFX01BU0sgKChscmVhZF9tdWx0aWJ5dGUpIH4oMUwpKQorI2RlZmlu
ZSBWQUxJRF9NVUxUSUJZVEUobSkgKCAoIChWQUxJRF9NVUxUSUJZVEVfTUFTSykgJiAoIChscmVh
ZF9tdWx0aWJ5dGUpIG0gKSApID09ICgobHJlYWRfbXVsdGlieXRlKSAwKSApCisvKiBUaGUgcmVm
ZXJlbmNlIG9iYXJyYXkgZm9yIGludGVybmluZyBzeW1ib2xzIGVzdGFibGlzaGVkIGF0IGluaXRp
YWxpemF0aW9uCisgICBvbmx5IHdyaXR0ZW4gdG8gb25jZS4gKi8KK3N0YXRpYyBMaXNwX09iamVj
dCBpbml0aWFsX29iYXJyYXk7CisKK3N0YXRpYyBMaXNwX09iamVjdCBtYWtlX29iYXJyYXkgKHVu
c2lnbmVkIGJpdHMpOworCisvKiBXaGVuIGFuIG9iamVjdCBpcyByZWFkLCB0aGUgdHlwZSBvZiB0
aGUgdG9wIHJlYWQgc3RhY2sgZW50cnkgaW5kaWNhdGVzCisgICB0aGUgc3ludGFjdGljIGNvbnRl
eHQuICAqLworZW51bSByZWFkX2VudHJ5X3R5cGUKK3sKKwkJCQkvKiBwcmVjZWRpbmcgc3ludGFj
dGljIGNvbnRleHQgKi8KKyAgUkVfbGlzdF9zdGFydCwgICAgICAgICAgICAgICAgLyogIigiICov
CisKKyAgUkVfbGlzdCwgICAgICAgICAgICAgICAgICAgICAgLyogIigiICgrIE9CSkVDVCkgKi8K
KyAgUkVfbGlzdF9kb3QsICAgICAgICAgICAgICAgICAgLyogIigiICgrIE9CSkVDVCkgIi4iICov
CisKKyAgUkVfdmVjdG9yLCAgICAgICAgICAgICAgICAgICAgLyogIlsiICgqIE9CSkVDVCkgKi8K
KyAgUkVfcmVjb3JkLCAgICAgICAgICAgICAgICAgICAgLyogIiNzKCIgKCogT0JKRUNUKSAqLwor
ICBSRV9jaGFyX3RhYmxlLCAgICAgICAgICAgICAgICAvKiAiI15bIiAoKiBPQkpFQ1QpICovCisg
IFJFX3N1Yl9jaGFyX3RhYmxlLCAgICAgICAgICAgIC8qICIjXl5bIiAoKiBPQkpFQ1QpICovCisg
IFJFX2J5dGVfY29kZSwgICAgICAgICAgICAgICAgIC8qICIjWyIgKCogT0JKRUNUKSAqLworICBS
RV9zdHJpbmdfcHJvcHMsICAgICAgICAgICAgICAvKiAiIygiICgqIE9CSkVDVCkgKi8KKworICBS
RV9zcGVjaWFsLCAgICAgICAgICAgICAgICAgICAvKiAiJyIgfCAiIyciIHwgImAiIHwgIiwiIHwg
IixAIiAqLworCisgIFJFX251bWJlcmVkLCAgICAgICAgICAgICAgICAgIC8qICIjIiAoKyBESUdJ
VCkgIj0iICovCit9OworCitzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeQoreworICBlbnVtIHJlYWRf
ZW50cnlfdHlwZSB0eXBlOworICB1bmlvbiB7CisgICAgLyogUkVfbGlzdCwgUkVfbGlzdF9kb3Qg
Ki8KKyAgICBzdHJ1Y3QgeworICAgICAgTGlzcF9PYmplY3QgaGVhZDsgICAgICAgICAvKiBmaXJz
dCBjb25zIG9mIGxpc3QgKi8KKyAgICAgIExpc3BfT2JqZWN0IHRhaWw7ICAgICAgICAgLyogbGFz
dCBjb25zIG9mIGxpc3QgKi8KKyAgICB9IGxpc3Q7CisKKyAgICAvKiBSRV92ZWN0b3IsIFJFX3Jl
Y29yZCwgUkVfY2hhcl90YWJsZSwgUkVfc3ViX2NoYXJfdGFibGUsCisgICAgICAgUkVfYnl0ZV9j
b2RlLCBSRV9zdHJpbmdfcHJvcHMgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgTGlzcF9PYmplY3Qg
ZWxlbXM7ICAgICAgICAvKiBsaXN0IG9mIGVsZW1lbnRzIGluIHJldmVyc2Ugb3JkZXIgKi8KKyAg
ICAgIGJvb2wgb2xkX2xvY2F0ZV9zeW1zOyAgICAgLyogb2xkIHZhbHVlIG9mIGxvY2F0ZV9zeW1z
ICovCisgICAgfSB2ZWN0b3I7CisKKyAgICAvKiBSRV9zcGVjaWFsICovCisgICAgc3RydWN0IHsK
KyAgICAgIExpc3BfT2JqZWN0IHN5bWJvbDsgICAgICAgLyogc3ltYm9sIGZyb20gc3BlY2lhbCBz
eW50YXggKi8KKyAgICB9IHNwZWNpYWw7CisKKyAgICAvKiBSRV9udW1iZXJlZCAqLworICAgIHN0
cnVjdCB7CisgICAgICBMaXNwX09iamVjdCBudW1iZXI7ICAgICAgIC8qIG51bWJlciBhcyBhIGZp
eG51bSAqLworICAgICAgTGlzcF9PYmplY3QgcGxhY2Vob2xkZXI7ICAvKiBwbGFjZWhvbGRlciBv
YmplY3QgKi8KKyAgICB9IG51bWJlcmVkOworICB9IHU7Cit9OworCitzdHJ1Y3QgcmVhZF9zdGFj
aworeworICBzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSAqc3RhY2s7ICAvKiBiYXNlIG9mIHN0YWNr
ICovCisgIHB0cmRpZmZfdCBzaXplOyAgICAgICAgICAgICAgICAgIC8qIGFsbG9jYXRlZCBzaXpl
IGluIGVudHJpZXMgKi8KKyAgcHRyZGlmZl90IHNwOyAgICAgICAgICAgICAgICAgICAgLyogY3Vy
cmVudCBudW1iZXIgb2YgZW50cmllcyAqLworfTsKKworI2RlZmluZSBJTklUX1JFQURfU1RBQ0sg
e05VTEwsIDAsIDB9CisjaWYgMAorc3RhdGljIHN0cnVjdCByZWFkX3N0YWNrIHJkc3RhY2sgPSB7
TlVMTCwgMCwgMH07CisjZW5kaWYKKworLyogc3RkaW4gaXMgdGhlIG9ubHkgZmlsZSBkZXNjcmlw
dG9yIGZvciB3aGljaCBuZXN0ZWQgcmVhZHMgYXJlCisgICBleHBlY3RlZCB0byBjb25zdW1lIGNo
YXJhY3RlcnMgaW4gYSBub24tcmVlbnRyYW50IHdheQorICAgVGhhdCBpcywgYSB1c2VyIHByb3Zp
ZGluZyBpbnB1dCB0byBhIGxpc3AgcHJvZ3JhbSBiZWluZyAibG9hZGVkIgorICAgZnJvbSBzdGRp
biBzaG91bGQgbm90IGV4cGVjdCB0aGF0IGlucHV0IHRvIGJlIHJlYWQgYWdhaW4gYXMgcGFydAor
ICAgb2YgdGhhdCBsaXNwIHByb2dyYW0uCisgICBDbG9zaW5nIGFuZCByZW9wZW5pbmcgc3RkaW4g
bXVzdCByZWluaXRpYWxpemUgdGhpcyBkYXRhIGZvciB0aGlzCisgICB0byB3b3JrLgorKi8KK3N0
YXRpYyBzdHJ1Y3QgbHJlYWRfc3RkaW9fZGF0YQoreworICBzdHJ1Y3QgaW5maWxlIHM7CisgIHB0
cmRpZmZfdCBjaGFyX29mZnNldDsKKyAgcHRyZGlmZl90IGJ5dGVfb2Zmc2V0OworICBpbnQgdW5y
ZWFkX2NoYXI7CisgIGludCB1bnJlYWRfYnl0ZXM7CisgIGJvb2wgcmVhZF9lb2Y7CisgIGJvb2wg
bXVsdGlieXRlOworICBMaXNwX09iamVjdCBjb2Rpbmc7Cit9IHN0ZGluX2luZmlsZTsKKworCisv
KiBTYXZlIGFsbCBzdGF0ZSB0byByZXN0b3JlIGZvciByZWFkICovCisvKiBpLmUuIGFsbCBzdGF0
aWMgQyB2YXJpYWJsZXMgRnJlYWQgcmVmZXJlbmNlcyAgKi8KKy8qIFNob3VsZCB0aGlzIGluY2x1
ZGUgaW5pdGlhbF9vYmFycmF5IGFuZCBvYmxvb2t1cF9sYXN0X2J1Y2tldF9udW1iZXI/ICovCit0
eXBlZGVmIGVudW0gbHJlYWRfZnJhbWVfdHlwZQoreworICBMUkVBRF9GUkFNRV9VTklOSVQsCisg
IC8qIHNvbWUgZm9ybSBvZiAicmVhZCIgY2FsbCovCisgIExSRUFEX0ZSQU1FX1NJTkdMRSwKKyAg
Lyogc29tZSBmb3JtIG9mIHJlYWRldmFsbG9vcCBjYWxsKi8KKyAgTFJFQURfRlJBTUVfTVVMVElQ
TEUKK30gbHJlYWRfZnJhbWVfdHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QgbHJlYWRfZnJhbWUgbHJl
YWRfZnJhbWU7Cit0eXBlZGVmIGludCAoKnJlYWRvbmVjaGFyX2Z1bmMpKHJlZ2lzdGVyIGxyZWFk
X2ZyYW1lICopOworc3RydWN0IGxyZWFkX2ZyYW1lCit7CisgIGxyZWFkX2ZyYW1lX3R5cGUgdHlw
ZTsKKyAgbHJlYWRfZnJhbWUgKnByZXY7CisgIGxyZWFkX2lucHV0X3R5cGUgaW50eXBlOworICBs
cmVhZF9pbnB1dCBpbnB1dDsKKyAgcmVhZG9uZWNoYXJfZnVuYyByZWFkb25lY2hhcjsKKyAgLyog
ZnJhbWUgbWF5IHJlcXVpcmUgdW53aW5kaW5nIGFyb3VuZCBpbnRlcnJ1cHQgcHJvY2Vzc2luZy9l
dmFsICovCisgIHNwZWNwZGxfcmVmIGR5bmFtaWNfZnJhbWU7CisgIHNwZWNwZGxfcmVmIHJlc3Rv
cmVfZnJhbWVfaWR4OworICAvKiBXaGVuIFJFQURDSEFSRlVOIGlzIFFnZXRfZmlsZV9jaGFyIG9y
IFFnZXRfZW1hY3NfbXVsZV9maWxlX2NoYXIsCisgICAgIHdlIHVzZSB0aGlzIHRvIGtlZXAgYW4g
dW5yZWFkIGNoYXJhY3RlciBiZWNhdXNlCisgICAgIGEgZmlsZSBzdHJlYW0gY2FuJ3QgaGFuZGxl
IG11bHRpYnl0ZS1jaGFyIHVucmVhZGluZy4gIFRoZSB2YWx1ZSAtMQorICAgICBtZWFucyB0aGF0
IHRoZXJlJ3Mgbm8gdW5yZWFkIGNoYXJhY3Rlci4gICovCisgIGludCB1bnJlYWRfY2hhcjsKKyAg
LyogVGhlIG51bWJlciBvZiBieXRlcyByZXF1aXJlZCB0byBlbmNvZGUgdW5yZWFkX2NoYXIqLwor
ICBpbnQgdW5yZWFkX2J5dGVzOworICBib29sIHJlYWRfZW9mOworICBwdHJkaWZmX3QgY2hhcl9v
ZmZzZXQ7CisgIHB0cmRpZmZfdCBieXRlX29mZnNldDsKKyAgc3RydWN0IHNhdmVkX3N0cmluZyBz
YXZlZF9zdHJpbmdzWzJdOworICBzdHJ1Y3QgcmVhZF9zdGFjayByZHN0YWNrOworICBwdHJkaWZm
X3QgYmFzZV9zcDsKKyAgLyogQSBsaXN0IG9mIGZpbGUgbmFtZXMgZm9yIGZpbGVzIGJlaW5nIGxv
YWRlZCBpbiBGbG9hZC4KKyAgICAgVXNlZCB0byBjaGVjayBmb3IgcmVjdXJzaXZlIGxvYWRzICov
CisgIExpc3BfT2JqZWN0IGxvYWRzX2luX3Byb2dyZXNzOwogLyogVGhlIG9iamVjdHMgb3IgcGxh
Y2Vob2xkZXJzIHJlYWQgd2l0aCB0aGUgI249b2JqZWN0IGZvcm0uCiAKICAgIEEgaGFzaCB0YWJs
ZSBtYXBzIGEgbnVtYmVyIHRvIGVpdGhlciBhIHBsYWNlaG9sZGVyICh3aGlsZSB0aGUKQEAgLTE4
MCw3ICs0NzMsNyBAQCAjZGVmaW5lIFVTRV9BTkRST0lEX0FTU0VUUwogICAgdG9wLWxldmVsIGNh
bGxzIHRvIHJlYWQwLiAgSW4gYmV0d2VlbiBjYWxscywgaXQgbWF5IGJlIGFuIGVtcHR5CiAgICBo
YXNoIHRhYmxlIGxlZnQgdW51c2VkIGZyb20gdGhlIHByZXZpb3VzIGNhbGwgKHRvIHJlZHVjZQog
ICAgYWxsb2NhdGlvbnMpLCBvciBuaWwuICAqLwotc3RhdGljIExpc3BfT2JqZWN0IHJlYWRfb2Jq
ZWN0c19tYXA7CisgIExpc3BfT2JqZWN0IG9iamVjdHNfbWFwOwogCiAvKiBUaGUgcmVjdXJzaXZl
IG9iamVjdHMgcmVhZCB3aXRoIHRoZSAjbj1vYmplY3QgZm9ybS4KIApAQCAtMTk3LDI1NiArNDkw
LDExMjUgQEAgI2RlZmluZSBVU0VfQU5EUk9JRF9BU1NFVFMKICAgIGhhc2ggdGFibGUgYmVmb3Jl
IGFsbCB0b3AtbGV2ZWwgY2FsbHMgdG8gcmVhZDAuICBJbiBiZXR3ZWVuIGNhbGxzLAogICAgaXQg
bWF5IGJlIGFuIGVtcHR5IGhhc2ggdGFibGUgbGVmdCB1bnVzZWQgZnJvbSB0aGUgcHJldmlvdXMg
Y2FsbAogICAgKHRvIHJlZHVjZSBhbGxvY2F0aW9ucyksIG9yIG5pbC4gICovCi1zdGF0aWMgTGlz
cF9PYmplY3QgcmVhZF9vYmplY3RzX2NvbXBsZXRlZDsKLQotLyogRmlsZSBhbmQgbG9va2FoZWFk
IGZvciBnZXQtZmlsZS1jaGFyIGFuZCBnZXQtZW1hY3MtbXVsZS1maWxlLWNoYXIKLSAgIHRvIHJl
YWQgZnJvbS4gIFVzZWQgYnkgRmxvYWQuICAqLwotc3RhdGljIHN0cnVjdCBpbmZpbGUKLXsKLSAg
LyogVGhlIGlucHV0IHN0cmVhbS4gICovCi0gIGZpbGVfc3RyZWFtIHN0cmVhbTsKLQotICAvKiBM
b29rYWhlYWQgYnl0ZSBjb3VudC4gICovCi0gIHNpZ25lZCBjaGFyIGxvb2thaGVhZDsKLQotICAv
KiBMb29rYWhlYWQgYnl0ZXMsIGluIHJldmVyc2Ugb3JkZXIuICBLZWVwIHRoZXNlIGhlcmUgYmVj
YXVzZSBpdCBpcwotICAgICBub3QgcG9ydGFibGUgdG8gdW5nZXRjIG1vcmUgdGhhbiBvbmUgYnl0
ZSBhdCBhIHRpbWUuICAqLwotICB1bnNpZ25lZCBjaGFyIGJ1ZltNQVhfTVVMVElCWVRFX0xFTkdU
SCAtIDFdOwotfSAqaW5maWxlOwotCi0vKiBGb3IgdXNlIHdpdGhpbiByZWFkLWZyb20tc3RyaW5n
ICh0aGlzIHJlYWRlciBpcyBub24tcmVlbnRyYW50ISEpICAqLwotc3RhdGljIHB0cmRpZmZfdCBy
ZWFkX2Zyb21fc3RyaW5nX2luZGV4Owotc3RhdGljIHB0cmRpZmZfdCByZWFkX2Zyb21fc3RyaW5n
X2luZGV4X2J5dGU7Ci1zdGF0aWMgcHRyZGlmZl90IHJlYWRfZnJvbV9zdHJpbmdfbGltaXQ7Ci0K
LS8qIFBvc2l0aW9uIGluIG9iamVjdCBmcm9tIHdoaWNoIGNoYXJhY3RlcnMgYXJlIGJlaW5nIHJl
YWQgYnkgYHJlYWRjaGFyJy4gICovCi1zdGF0aWMgRU1BQ1NfSU5UIHJlYWRjaGFyX29mZnNldDsK
LQotc3RydWN0IHNhdmVkX3N0cmluZyB7Ci0gIGNoYXIgKnN0cmluZzsJCSAgICAgICAgLyogc3Ry
aW5nIGluIGFsbG9jYXRlZCBidWZmZXIgKi8KLSAgcHRyZGlmZl90IHNpemU7CQkvKiBhbGxvY2F0
ZWQgc2l6ZSBvZiBidWZmZXIgKi8KLSAgcHRyZGlmZl90IGxlbmd0aDsJCS8qIGxlbmd0aCBvZiBz
dHJpbmcgaW4gYnVmZmVyICovCi0gIGZpbGVfb2Zmc2V0IHBvc2l0aW9uOwkJLyogcG9zaXRpb24g
aW4gZmlsZSB0aGUgc3RyaW5nIGNhbWUgZnJvbSAqLworICBMaXNwX09iamVjdCBvYmplY3RzX2Nv
bXBsZXRlZDsKKyAgbHJlYWRfbXVsdGlieXRlIG11bHRpYnl0ZTsKKyAgYm9vbCBsb2NhdGVfc3lt
czsKKyAgTGlzcF9PYmplY3Qgc3RhcnQ7CisgIExpc3BfT2JqZWN0IGVuZDsKKyAgYm9vbCBpbnRl
cnJ1cHRlZDsKKyAgLyogb25seSBzZXQgZm9yIGVtYWNzLW11bGUgZW5jb2RlZCBmaWxlLCBmb3Ig
bGFzdCByZWFkIGNoYXJhY3RlciAqLworICBzdHJ1Y3QgY2hhcnNldCAqbXVsZV9jaGFyc2V0Owor
ICAvKiBUaGVzZSBhcmUgb25seSB1c2VkIGluIE1VTFRJUExFIHR5cGUgZnJhbWVzKi8KKyAgaW50
IG5leHByczsKKyAgc3BlY3BkbF9yZWYgbG9vcF9keW5hbWljX2ZyYW1lOworICBib29sIHdob2xl
X2J1ZmZlcjsKKyAgTGlzcF9PYmplY3QgZnVsbF9uYW1lOworICBMaXNwX09iamVjdCBuYW1lOwor
ICBMaXNwX09iamVjdCBzb3VyY2VuYW1lOworICBMaXNwX09iamVjdCByZWFkZnVuOworICBib29s
IHByaW50ZmxhZzsKKyAgTGlzcF9PYmplY3QgdmFsdWU7CisgIExpc3BfT2JqZWN0IGVycm9yOwog
fTsKIAotLyogVGhlIGxhc3QgdHdvIHN0cmluZ3Mgc2tpcHBlZCB3aXRoICNAIChtb3N0IHJlY2Vu
dCBmaXJzdCkuICAqLwotc3RhdGljIHN0cnVjdCBzYXZlZF9zdHJpbmcgc2F2ZWRfc3RyaW5nc1sy
XTsKKyNpZmRlZiBXUkFQX1NQRUNQRExfUkVGCisjZGVmaW5lIFNQRUNQRExfUkVGX1VOSU5JVCAo
c3BlY3BkbF9yZWYpIHsgLTEgfQorI2RlZmluZSBVTklOSVRfU1BFQ1BETF9SRUYocikgKChyKS5i
eXRlcyA9PSAtMSkKKyNlbHNlCisjZGVmaW5lU1BFQ1BETF9SRUZfVU5JTklUIC0xCisjZGVmaW5l
IFVOSU5JVF9TUEVDUERMX1JFRihyKSAoKHIpID09IC0xKQorI2VuZGlmCiAKLS8qIEEgbGlzdCBv
ZiBmaWxlIG5hbWVzIGZvciBmaWxlcyBiZWluZyBsb2FkZWQgaW4gRmxvYWQuICBVc2VkIHRvCi0g
ICBjaGVjayBmb3IgcmVjdXJzaXZlIGxvYWRzLiAgKi8KKyNkZWZpbmUgSU5JVF9MUkVBRF9GUkFN
RSgpICAgICAgKGxyZWFkX2ZyYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAudHlwZSA9IExSRUFEX0ZSQU1FX1VOSU5JVCwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5pbnR5cGUgPSBMUkVBRF9JTlBV
VF9VTklOSVQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5p
bnB1dCA9IElOSVRfTFJFQURfSU5QVVQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgIC5keW5hbWljX2ZyYW1lID0gU1BFQ1BETF9SRUZfVU5JTklULCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5yZXN0b3JlX2ZyYW1lX2lkeCA9IFNQ
RUNQRExfUkVGX1VOSU5JVCwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC51bnJl
YWRfY2hhciA9IC0xLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgIC51bnJlYWRfYnl0ZXMgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5yZWFkX2VvZiA9IGZhbHNlLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5jaGFyX29m
ZnNldCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgIC5ieXRlX29mZnNldCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5zYXZlZF9zdHJpbmdzID0geyBJTklUX1NBVkVE
X1NUUklORywgSU5JVF9TQVZFRF9TVFJJTkcgfSwgICAgICAgIFwKKyAgICAgIC5yZHN0YWNrID0g
SU5JVF9SRUFEX1NUQUNLLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgIC5iYXNlX3NwID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgIC5sb2Fkc19pbl9wcm9ncmVzcyA9IFFuaWwsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5vYmplY3RzX21hcCA9
IFFuaWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgIC5vYmplY3RzX2NvbXBsZXRlZCA9IFFuaWwsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgIC5tdWx0aWJ5dGUgPSBMUkVBRF9NVUxUSUJZVEVfSU5ERVRF
Uk1JTkFURSwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5sb2NhdGVfc3ltcyA9IGZh
bHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
IC5zdGFydCA9IFFuaWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgIC5lbmQgPSBRbmlsLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5mdWxsX25hbWUgPSBRbmlsLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5u
YW1lID0gUW5pbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgIC5zb3VyY2VuYW1lID0gUW5pbCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5yZWFkZnVuID0gUW5pbCwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5wcmlu
dGZsYWcgPSBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgIC5uZXhwcnMgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5sb29wX2R5bmFtaWNfZnJhbWUgPSBTUEVD
UERMX1JFRl9VTklOSVQsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC53aG9sZV9i
dWZmZXIgPSBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgIC52YWx1ZSA9IFFuaWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5lcnJvciA9IFFuaWwsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5pbnRlcnJ1cHRl
ZCA9IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgIC5wcmV2ID0gTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgIC5tdWxlX2NoYXJzZXQgPSBOVUxMICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKLXN0YXRpYyBMaXNw
X09iamVjdCBWbG9hZHNfaW5fcHJvZ3Jlc3M7CisvKiBUaGlzIHNob3VsZCBiZSB0aHJlYWQtbG9j
YWwgKi8KK3N0YXRpYyBscmVhZF9mcmFtZSAqY3VycmVudF9mcmFtZSA9IE5VTEw7CitzdGF0aWMg
dm9pZCBpbml0X2xyZWFkX2lucHV0X2Zyb21fc3RyZWFtIChscmVhZF9mcmFtZSAqZnJhbWUsCisJ
CQkJCSAgTGlzcF9PYmplY3Qgc3RyZWFtLAorCQkJCQkgIExpc3BfT2JqZWN0IHN0YXJ0LAorCQkJ
CQkgIExpc3BfT2JqZWN0IGVuZCwKKwkJCQkJICBib29sIGxvY2F0ZV9zeW1zLAorCQkJCQkgIGJv
b2wgc2Vla2FibGUsCisJCQkJCSAgRklMRSAqc3RyZWFtX2ZpbGUsCisJCQkJCSAgTGlzcF9PYmpl
Y3QgY29kaW5nKTsKKworc3RhdGljIHZvaWQgaW5pdF9scmVhZF9ldmFsX3BhcmFtcyAobHJlYWRf
ZnJhbWUgKmZyYW1lLAorCQkJCSAgICBMaXNwX09iamVjdCBmdWxsX25hbWUsCisJCQkJICAgIExp
c3BfT2JqZWN0IG5hbWUsCisJCQkJICAgIExpc3BfT2JqZWN0IHJlYWRmdW4sCisJCQkJICAgIGJv
b2wgd2hvbGVfYnVmZmVyKTsKKworc3RhdGljIHZvaWQgYWN0aXZhdGVfbHJlYWRfZnJhbWUgKGxy
ZWFkX2ZyYW1lICpuZXdfZnJhbWUsIGxyZWFkX2ZyYW1lX3R5cGUgbmV3X3R5cGUpOworc3RhdGlj
IHZvaWQgcmVzdG9yZV9scmVhZF9mcmFtZSAodm9pZCAqcCk7CisKKwordm9pZCB1bnJlYWRjaGFy
IChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUsIGludCBjKTsKK3N0YXRpYyBBVk9JRCBpbnZh
bGlkX3N5bnRheF9saXNwIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUsIExpc3BfT2JqZWN0
IHMpOworc3RhdGljIEFWT0lEIGludmFsaWRfc3ludGF4IChyZWdpc3RlciBscmVhZF9mcmFtZSAq
ZnJhbWUsIGNvbnN0IGNoYXIgKnMpOworCisvKiBLZWVwIHRyYWNrIG9mIHdoaWNoIGZ1bmN0aW9u
cyByZXF1aXJlIGEgZnJhbWUgcGFyYW1ldGVyCisgICBieSBkZWNsYXJpbmcgdGhlbSBoZXJlLCB3
aGV0aGVyIGl0J3MgbmVlZGVkIG9yIG5vdCAqLworc3RhdGljIGludCBjaGFyYWN0ZXJfbmFtZV90
b19jb2RlIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUsCisJCQkJICAgY2hhciBjb25zdCAq
bmFtZSwgcHRyZGlmZl90IG5hbWVfbGVuKTsKK3N0YXRpYyBpbnQgcmVhZF9jaGFyX2VzY2FwZSAo
cmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLCBpbnQgbmV4dF9jaGFyKTsKK3N0YXRpYyB2b2lk
IGludmFsaWRfcmFkaXhfaW50ZWdlciAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLAorCQkJ
CSAgIEVNQUNTX0lOVCByYWRpeCk7CitzdGF0aWMgTGlzcF9PYmplY3QgcmVhZF9pbnRlZ2VyIChy
ZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUsIGludCByYWRpeCk7CitzdGF0aWMgTGlzcF9PYmpl
Y3QgcmVhZF9jaGFyX2xpdGVyYWwgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSk7CitzdGF0
aWMgTGlzcF9PYmplY3QgcmVhZF9zdHJpbmdfbGl0ZXJhbCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUg
KmZyYW1lKTsKK3N0YXRpYyBMaXNwX09iamVjdCBnZXRfbGF6eV9zdHJpbmcgKHJlZ2lzdGVyIGxy
ZWFkX2ZyYW1lICpmcmFtZSwKKwkJCQkgICAgTGlzcF9PYmplY3QgdmFsKTsKK3N0YXRpYyBib29s
IHNraXBfbGF6eV9zdHJpbmcgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSk7CitzdGF0aWMg
TGlzcF9PYmplY3QgYnl0ZWNvZGVfZnJvbV9yZXZfbGlzdCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUg
KmZyYW1lLAorCQkJCQkgICBMaXNwX09iamVjdCBlbGVtcyk7CisKK3N0YXRpYyBMaXNwX09iamVj
dCBjaGFyX3RhYmxlX2Zyb21fcmV2X2xpc3QgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwK
KwkJCQkJICAgICBMaXNwX09iamVjdCBlbGVtcyk7CitzdGF0aWMgTGlzcF9PYmplY3Qgc3ViX2No
YXJfdGFibGVfZnJvbV9yZXZfbGlzdCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLAorCQkJ
CQkJIExpc3BfT2JqZWN0IGVsZW1zKTsKK3N0YXRpYyBMaXNwX09iamVjdCBzdHJpbmdfcHJvcHNf
ZnJvbV9yZXZfbGlzdCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLAorCQkJCQkgICAgICAg
TGlzcF9PYmplY3QgZWxlbXMpOworc3RhdGljIExpc3BfT2JqZWN0IHJlYWRfYm9vbF92ZWN0b3Ig
KHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSk7CitzdGF0aWMgdm9pZCBza2lwX3NwYWNlX2Fu
ZF9jb21tZW50cyAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKTsKK3N0YXRpYyBMaXNwX09i
amVjdCByZWFkMCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKTsKK3N0YXRpYyBMaXNwX09i
amVjdCBjYWxsX3JlYWQwIChMaXNwX09iamVjdCBmcmFtZXB0cikKK3sKKyAgcmVnaXN0ZXIgbHJl
YWRfZnJhbWUgKmZyYW1lID0geG1pbnRfcG9pbnRlciAoZnJhbWVwdHIpOworICByZXR1cm4gcmVh
ZDAgKGZyYW1lKTsKK30KK3N0YXRpYyBib29sIGhhbmRsZV9yZWFkX3N0cmVhbV9kZWZhdWx0cyAo
TGlzcF9PYmplY3QgKnN0cmVhbSk7CitzdGF0aWMgc3RydWN0IGJ1ZmZlciAqbHJlYWRfZ2V0X2J1
ZmZlciAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKTsKK3N0YXRpYyBMaXNwX09iamVjdCBs
cmVhZF9nZXRfYnVmZmVyX29iaiAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKTsKIAotc3Rh
dGljIGludCByZWFkX2VtYWNzX211bGVfY2hhciAoaW50LCBpbnQgKCopIChpbnQsIExpc3BfT2Jq
ZWN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3BfT2JqZWN0KTsKIAot
c3RhdGljIHZvaWQgcmVhZGV2YWxsb29wIChMaXNwX09iamVjdCwgc3RydWN0IGluZmlsZSAqLCBM
aXNwX09iamVjdCwgYm9vbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzcF9PYmplY3Qs
IExpc3BfT2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBMaXNwX09iamVjdCwgTGlz
cF9PYmplY3QpOworc3RhdGljIExpc3BfT2JqZWN0IHJlYWRldmFsbG9vcCAoTGlzcF9PYmplY3Qg
ZnJhbWVwdHIpOworc3RhdGljIExpc3BfT2JqZWN0IHJlYWRldmFsbG9vcF9lb2ZfaGFuZGxlciAo
TGlzcF9PYmplY3QgaWdub3JlZCk7CitzdGF0aWMgTGlzcF9PYmplY3QgbHJlYWRfc2V0X3JlYWRf
ZW9mIChMaXNwX09iamVjdCBkYXRhKTsKK3N0YXRpYyBib29sIHNldHVwX2J1ZmZlcl9mb3JfcmVh
ZGV2YWxsb29wIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUsCisJCQkJCSAgIExpc3BfT2Jq
ZWN0IHN0YXJ0LCBMaXNwX09iamVjdCBlbmQpOworc3RhdGljIHZvaWQgcHJlcGFyZV9idWZmZXJf
Zm9yX2ludGVycnVwdGlibGVfcmVhZCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKTsKK3N0
YXRpYyBMaXNwX09iamVjdCBpbnRlcnJ1cHRfZXJyb3JfaGFuZGxlciAoTGlzcF9PYmplY3QgZGF0
YSk7CitzdGF0aWMgTGlzcF9PYmplY3QgYmFzZV9pbnRlcnJ1cHRfZXJyb3JfaGFuZGxlciAoTGlz
cF9PYmplY3QgZGF0YSk7CitzdGF0aWMgTGlzcF9PYmplY3QgcmVhZGV2YWxsb29wX2VvZl90cmFt
cG9saW5lIChMaXNwX09iamVjdCBmcmFtZXB0cik7CiAKLXN0YXRpYyB2b2lkIGJ1aWxkX2xvYWRf
aGlzdG9yeSAoTGlzcF9PYmplY3QsIGJvb2wpOworc3RhdGljIHZvaWQgYnVpbGRfbG9hZF9oaXN0
b3J5IChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUsIExpc3BfT2JqZWN0LCBib29sKTsKIAor
c3RhdGljIHB0cmRpZmZfdCBvYmFycmF5X2luZGV4IChzdHJ1Y3QgTGlzcF9PYmFycmF5ICpvYSwg
Y29uc3QgY2hhciAqc3RyLAorCQkJCXB0cmRpZmZfdCBzaXplX2J5dGUpOwogc3RhdGljIExpc3Bf
T2JqZWN0IG9ibG9va3VwX2NvbnNpZGVyaW5nX3Nob3J0aGFuZCAoTGlzcF9PYmplY3QsIGNvbnN0
IGNoYXIgKiwKIAkJCQkJCSAgIHB0cmRpZmZfdCwgcHRyZGlmZl90LAogCQkJCQkJICAgY2hhciAq
KiwgcHRyZGlmZl90ICosCiAJCQkJCQkgICBwdHJkaWZmX3QgKik7CiAKLQwKLS8qIEZ1bmN0aW9u
IHRoYXQgcmVhZHMgb25lIGJ5dGUgZnJvbSB0aGUgY3VycmVudCBzb3VyY2UgUkVBRENIQVJGVU4K
LSAgIG9yIHVucmVhZHMgb25lIGJ5dGUuICBJZiB0aGUgaW50ZWdlciBhcmd1bWVudCBDIGlzIC0x
LCBpdCByZXR1cm5zCi0gICBvbmUgcmVhZCBieXRlLCBvciAtMSB3aGVuIHRoZXJlJ3Mgbm8gbW9y
ZSBieXRlIGluIHRoZSBzb3VyY2UuICBJZiBDCi0gICBpcyAwIG9yIHBvc2l0aXZlLCBpdCB1bnJl
YWRzIEMsIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlzIG5vdAotICAgaW50ZXJlc3RpbmcuICAqLwot
Ci1zdGF0aWMgaW50IHJlYWRieXRlX2Zyb21fZmlsZSAoaW50LCBMaXNwX09iamVjdCk7CisvKiBH
cm93IGEgcmVhZCBidWZmZXIgQlVGIHRoYXQgY29udGFpbnMgT0ZGU0VUIHVzZWZ1bCBieXRlcyBv
ZiBkYXRhLAorICAgYnkgYXQgbGVhc3QgTUFYX01VTFRJQllURV9MRU5HVEggYnl0ZXMuICBVcGRh
dGUgKkJVRl9BRERSIGFuZAorICAgKkJVRl9TSVpFIGFjY29yZGluZ2x5OyAwIDw9IE9GRlNFVCA8
PSAqQlVGX1NJWkUuICBJZiAqQlVGX0FERFIgaXMKKyAgIGluaXRpYWxseSBudWxsLCBCVUYgaXMg
b24gdGhlIHN0YWNrOiBjb3B5IGl0cyBkYXRhIHRvIHRoZSBuZXcgaGVhcAorICAgYnVmZmVyLiAg
T3RoZXJ3aXNlLCBCVUYgbXVzdCBlcXVhbCAqQlVGX0FERFIgYW5kIGNhbiBzaW1wbHkgYmUKKyAg
IHJlYWxsb2NhdGVkLiAgRWl0aGVyIHdheSwgcmVtZW1iZXIgdGhlIGhlYXAgYWxsb2NhdGlvbiAo
d2hpY2ggaXMgYXQKKyAgIHBkbCBzbG90IENPVU5UKSBzbyB0aGF0IGl0IGNhbiBiZSBmcmVlZCB3
aGVuIHVud2luZGluZyB0aGUgc3RhY2suKi8KIAotLyogSGFuZGxlIHVucmVhZGluZyBhbmQgcmVy
ZWFkaW5nIG9mIGNoYXJhY3RlcnMuCi0gICBXcml0ZSBSRUFEQ0hBUiB0byByZWFkIGEgY2hhcmFj
dGVyLAotICAgVU5SRUFEKGMpIHRvIHVucmVhZCBjIHRvIGJlIHJlYWQgYWdhaW4uCitzdGF0aWMg
Y2hhciAqCitncm93X3JlYWRfYnVmZmVyIChjaGFyICpidWYsIHB0cmRpZmZfdCBvZmZzZXQsCisJ
CSAgY2hhciAqKmJ1Zl9hZGRyLCBwdHJkaWZmX3QgKmJ1Zl9zaXplLCBzcGVjcGRsX3JlZiBjb3Vu
dCkKK3sKKyAgY2hhciAqcCA9IHhwYWxsb2MgKCpidWZfYWRkciwgYnVmX3NpemUsIE1BWF9NVUxU
SUJZVEVfTEVOR1RILCAtMSwgMSk7CisgIGlmICghKmJ1Zl9hZGRyKQorICAgIHsKKyAgICAgIG1l
bWNweSAocCwgYnVmLCBvZmZzZXQpOworICAgICAgcmVjb3JkX3Vud2luZF9wcm90ZWN0X3B0ciAo
eGZyZWUsIHApOworICAgIH0KKyAgZWxzZQorICAgIHNldF91bndpbmRfcHJvdGVjdF9wdHIgKGNv
dW50LCB4ZnJlZSwgcCk7CisgICpidWZfYWRkciA9IHA7CisgIHJldHVybiBwOworfQogCi0gICBU
aGVzZSBtYWNyb3MgY29ycmVjdGx5IHJlYWQvdW5yZWFkIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLiAg
Ki8KKy8qIGdyb3dfcmVhZF9idWZmZXIsIGJ1dCBmb3IgaW50cyAoZW1hY3MgY2hhcmFjdGVyIHZh
bHVlcykgKi8KK3N0YXRpYyBpbnQgKgorZ3Jvd19pbnRfYnVmZmVyIChpbnQgKmJ1ZiwgcHRyZGlm
Zl90IG9mZnNldCwKKwkJIGludCAqKmJ1Zl9hZGRyLCBwdHJkaWZmX3QgKmJ1Zl9zaXplLCBzcGVj
cGRsX3JlZiBjb3VudCkKK3sKKyAgaW50ICpwID0geHBhbGxvYyAoKmJ1Zl9hZGRyLCBidWZfc2l6
ZSwgMSwgLTEsIHNpemVvZiAoaW50KSk7CisgIGlmICghKmJ1Zl9hZGRyKQorICAgIHsKKyAgICAg
IG1lbWNweSAocCwgYnVmLCBvZmZzZXQgKiBzaXplb2YgKGludCkpOworICAgICAgcmVjb3JkX3Vu
d2luZF9wcm90ZWN0X3B0ciAoeGZyZWUsIHApOworICAgIH0KKyAgZWxzZQorICAgIHNldF91bndp
bmRfcHJvdGVjdF9wdHIgKGNvdW50LCB4ZnJlZSwgcCk7CisgICpidWZfYWRkciA9IHA7CisgIHJl
dHVybiBwOworfQogCi0jZGVmaW5lIFJFQURDSEFSIHJlYWRjaGFyIChyZWFkY2hhcmZ1biwgTlVM
TCkKLSNkZWZpbmUgVU5SRUFEKGMpIHVucmVhZGNoYXIgKHJlYWRjaGFyZnVuLCBjKQorSU5MSU5F
IHZvaWQKK2xyZWFkX3Vud2luZF9mb3JfZXZhbCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1l
KQoreworICAvKiBpZiAoVU5JTklUX1NQRUNQRExfUkVGKGZyYW1lLT5keW5hbWljX2ZyYW1lKSkg
Ki8KKyAgLyogICByZXR1cm47ICovCisgIGVhc3NlcnQgKCFVTklOSVRfU1BFQ1BETF9SRUYoZnJh
bWUtPmR5bmFtaWNfZnJhbWUpKTsKKyAgdW5iaW5kX3RvIChmcmFtZS0+ZHluYW1pY19mcmFtZSwg
UW5pbCk7Cit9CiAKLS8qIFNhbWUgYXMgUkVBRENIQVIgYnV0IHNldCAqTVVMVElCWVRFIHRvIHRo
ZSBtdWx0aWJ5dGVuZXNzIG9mIHRoZSBzb3VyY2UuICAqLwotI2RlZmluZSBSRUFEQ0hBUl9SRVBP
UlRfTVVMVElCWVRFKG11bHRpYnl0ZSkgcmVhZGNoYXIgKHJlYWRjaGFyZnVuLCBtdWx0aWJ5dGUp
CitJTkxJTkUgdm9pZAorbHJlYWRfaW5pdF9keW5hbWljX2ZyYW1lIChyZWdpc3RlciBscmVhZF9m
cmFtZSAqZnJhbWUpCit7CisgIC8qIGlmICghVU5JTklUX1NQRUNQRExfUkVGKGZyYW1lLT5keW5h
bWljX2ZyYW1lKSkgKi8KKyAgLyogICB1bmJpbmRfdG8gKGZyYW1lLT5keW5hbWljX2ZyYW1lLCBR
bmlsKTsgKi8KKyAgZWFzc2VydCAoVU5JTklUX1NQRUNQRExfUkVGKGZyYW1lLT5keW5hbWljX2Zy
YW1lKSk7CisgIGZyYW1lLT5keW5hbWljX2ZyYW1lID0gU1BFQ1BETF9JTkRFWCAoKTsKK30KIAot
LyogV2hlbiBSRUFEQ0hBUkZVTiBpcyBRZ2V0X2ZpbGVfY2hhciBvciBRZ2V0X2VtYWNzX211bGVf
ZmlsZV9jaGFyLAotICAgd2UgdXNlIHRoaXMgdG8ga2VlcCBhbiB1bnJlYWQgY2hhcmFjdGVyIGJl
Y2F1c2UKLSAgIGEgZmlsZSBzdHJlYW0gY2FuJ3QgaGFuZGxlIG11bHRpYnl0ZS1jaGFyIHVucmVh
ZGluZy4gIFRoZSB2YWx1ZSAtMQotICAgbWVhbnMgdGhhdCB0aGVyZSdzIG5vIHVucmVhZCBjaGFy
YWN0ZXIuICAqLwotc3RhdGljIGludCB1bnJlYWRfY2hhciA9IC0xOwogCi1zdGF0aWMgaW50Ci1y
ZWFkY2hhciAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGJvb2wgKm11bHRpYnl0ZSkKK0xpc3Bf
T2JqZWN0CitscmVhZF9zZXRfcmVhZF9lb2YgKExpc3BfT2JqZWN0IGRhdGEpCiB7Ci0gIExpc3Bf
T2JqZWN0IHRlbTsKLSAgcmVnaXN0ZXIgaW50IGM7Ci0gIGludCAoKnJlYWRieXRlKSAoaW50LCBM
aXNwX09iamVjdCk7Ci0gIHVuc2lnbmVkIGNoYXIgYnVmW01BWF9NVUxUSUJZVEVfTEVOR1RIXTsK
LSAgaW50IGksIGxlbjsKLSAgYm9vbCBlbWFjc19tdWxlX2VuY29kaW5nID0gMDsKLQotICBpZiAo
bXVsdGlieXRlKQotICAgICptdWx0aWJ5dGUgPSAwOworICBjdXJyZW50X2ZyYW1lLT5yZWFkX2Vv
ZiA9IHRydWU7CisgIHJldHVybiBRbmlsOworfQogCi0gIHJlYWRjaGFyX29mZnNldCsrOworTGlz
cF9PYmplY3QKK3JlYWRldmFsbG9vcF9lb2ZfaGFuZGxlciAoTGlzcF9PYmplY3QgaWdub3JlZCkK
K3sKKyAgcmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lID0gY3VycmVudF9mcmFtZTsKKyAgZnJh
bWUtPnJlYWRfZW9mID0gdHJ1ZTsKKyAgcmV0dXJuIGZyYW1lLT52YWx1ZTsKK30KIAotICBpZiAo
QlVGRkVSUCAocmVhZGNoYXJmdW4pKQotICAgIHsKLSAgICAgIHJlZ2lzdGVyIHN0cnVjdCBidWZm
ZXIgKmluYnVmZmVyID0gWEJVRkZFUiAocmVhZGNoYXJmdW4pOwogCi0gICAgICBwdHJkaWZmX3Qg
cHRfYnl0ZSA9IEJVRl9QVF9CWVRFIChpbmJ1ZmZlcik7CisjZGVmaW5lIFVOUkVDT0dOSVpFRF9M
UkVBRF9JTlBVVF9DQVNFUyhzcmMpICAgICBcCisgICAgY2FzZSBMUkVBRF9JTlBVVF9VTklOSVQ6
XAorICAgICAgeHNpZ25hbDEgKFFlcnJvcixcCisJCUNBTExOIChGZm9ybWF0LFwKKwkJICAgICAg
IGJ1aWxkX3N0cmluZyAoIkludGVybmFsIGVycm9yOiAiIHNyYyBcCisJCQkJICAgICAiOiB0eXBl
IG9mIGlucHV0IHRvICIgICAgICAgICAgXAorCQkJCSAgICAgInJlYWQoLSopIHVuaW5pdGlhbGl6
ZWQ6ICVzIiksIFwKKwkJICAgICAgIG1ha2VfZml4bnVtKChFTUFDU19JTlQpIGZyYW1lLT5pbnR5
cGUpKSk7ICAgXAorICAgICAgYnJlYWs7XAorICAgIGRlZmF1bHQ6XAorICAgICAgeHNpZ25hbDEg
KFFlcnJvcixcCisJCUNBTExOIChGZm9ybWF0LFwKKwkJICAgICAgIGJ1aWxkX3N0cmluZyAoIklu
dGVybmFsIGVycm9yOjogIiBzcmMgXAorCQkJCSAgICAgIjogdHlwZSBvZiBpbnB1dCB0byAiICAg
ICAgICAgICAgICBcCisJCQkJICAgICAicmVhZCgtKikgdW5yZWNvZ25pemVkOiAlcyIpLCAgICAg
IFwKKwkJICAgICAgIG1ha2VfZml4bnVtKChFTUFDU19JTlQpIGZyYW1lLT5pbnR5cGUpKSk7CiAK
LSAgICAgIGlmICghIEJVRkZFUl9MSVZFX1AgKGluYnVmZmVyKSkKLQlyZXR1cm4gLTE7CiAKLSAg
ICAgIGlmIChwdF9ieXRlID49IEJVRl9aVl9CWVRFIChpbmJ1ZmZlcikpCi0JcmV0dXJuIC0xOwor
c3RhdGljIGJvb2wKK2xyZWFkX2ZyYW1lX3JlcXVpcmVzX3Jld2luZF9idWZmZXIgKHJlZ2lzdGVy
IGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyAgc3dpdGNoIChmcmFtZS0+aW50eXBlKQorICAgIHsK
KyAgICBjYXNlIExSRUFEX0lOUFVUX0ZJTEU6CisgICAgY2FzZSBMUkVBRF9JTlBVVF9GSUxFX01V
TEU6CisgICAgICByZXR1cm4gIShmcmFtZS0+aW5wdXQuZi5zZWVrYWJsZSk7CisgICAgY2FzZSBM
UkVBRF9JTlBVVF9QUk9DRURVUkU6CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIExSRUFE
X0lOUFVUX0lORElSRUNUOgorICAgICAgcmV0dXJuIGxyZWFkX2ZyYW1lX3JlcXVpcmVzX3Jld2lu
ZF9idWZmZXIgKGZyYW1lLT5pbnB1dC5mcmFtZS5zb3VyY2UpOworICAgIGNhc2UgTFJFQURfSU5Q
VVRfQlVGRkVSOgorICAgIGNhc2UgTFJFQURfSU5QVVRfTUFSS0VSOgorICAgIGNhc2UgTFJFQURf
SU5QVVRfU1RSSU5HOgorICAgIGNhc2UgTFJFQURfSU5QVVRfQklOQVJZOgorICAgIGNhc2UgTFJF
QURfSU5QVVRfTlVMTDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIFVOUkVDT0dOSVpFRF9M
UkVBRF9JTlBVVF9DQVNFUyAoInJlcXVpcmVzX3Jld2luZF9idWZmZXIiKTsKKyAgICB9Cit9CiAK
LSAgICAgIGlmICghIE5JTFAgKEJWQVIgKGluYnVmZmVyLCBlbmFibGVfbXVsdGlieXRlX2NoYXJh
Y3RlcnMpKSkKLQl7Ci0JICAvKiBGZXRjaCB0aGUgY2hhcmFjdGVyIGNvZGUgZnJvbSB0aGUgYnVm
ZmVyLiAgKi8KLQkgIHVuc2lnbmVkIGNoYXIgKnAgPSBCVUZfQllURV9BRERSRVNTIChpbmJ1ZmZl
ciwgcHRfYnl0ZSk7Ci0JICBpbnQgY2xlbjsKLQkgIGMgPSBzdHJpbmdfY2hhcl9hbmRfbGVuZ3Ro
IChwLCAmY2xlbik7Ci0JICBwdF9ieXRlICs9IGNsZW47Ci0JICBpZiAobXVsdGlieXRlKQotCSAg
ICAqbXVsdGlieXRlID0gMTsKLQl9Ci0gICAgICBlbHNlCi0JewotCSAgYyA9IEJVRl9GRVRDSF9C
WVRFIChpbmJ1ZmZlciwgcHRfYnl0ZSk7Ci0JICBpZiAoISBBU0NJSV9DSEFSX1AgKGMpKQotCSAg
ICBjID0gQllURThfVE9fQ0hBUiAoYyk7Ci0JICBwdF9ieXRlKys7Ci0JfQotICAgICAgU0VUX0JV
Rl9QVF9CT1RIIChpbmJ1ZmZlciwgQlVGX1BUIChpbmJ1ZmZlcikgKyAxLCBwdF9ieXRlKTsKK3N0
YXRpYyB2b2lkCitscmVhZF9yZXdpbmRfaW5wdXQgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFt
ZSwgaW50IGxvb2thaGVhZCwgaW50ICpidWYpCit7CisgIHN3aXRjaCAoZnJhbWUtPmludHlwZSkK
KyAgICB7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9GSUxFOgorICAgIGNhc2UgTFJFQURfSU5QVVRf
RklMRV9NVUxFOgorICAgICAgeworCWlmIChmcmFtZS0+aW5wdXQuZi5zZWVrYWJsZSkKKwkgIHsK
KwkgICAgcmV3aW5kIChmcmFtZS0+aW5wdXQuZi5zdHJlYW0pOworCSAgfQorCWVsc2UgaWYgKGJ1
ZikKKwkgIHsKKwkgICAgLyogQXQgbGVhc3QgdHJ5IHVuZ2V0YyAqLworCSAgICB1bnNpZ25lZCBj
aGFyIGNoYXJidWZbTUFYX01VTFRJQllURV9MRU5HVEhdID0gezB9OworCSAgICBpbnQgbGVuID0g
MDsKKwkgICAgaWYgKGZyYW1lLT5tdWx0aWJ5dGUpCisJICAgICAgeworCQlmb3IgKGludCBpID0g
bG9va2FoZWFkIC0xOyBpID49IDA7IGktLSkKKwkJICB7CisJCSAgICBsZW4gPSBDSEFSX1NUUklO
RyAoYnVmW2ldLCBjaGFyYnVmKTsKKwkJICAgIGZvciAoaW50IGogPSBsZW4gLSAxOyBqID49IDA7
IGotLSkKKwkJICAgICAgeworCQkJdW5nZXRjIChjaGFyYnVmW2pdLCBmcmFtZS0+aW5wdXQuZi5z
dHJlYW0pOworCQkgICAgICB9CisJCSAgfQorCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsK
KwkJZm9yIChpbnQgaSA9IGxvb2thaGVhZCAtMTsgaSA+PSAwOyBpLS0pCisJCSAgeworCQkgICAg
dW5nZXRjICgodW5zaWduZWQgY2hhcikgQ0hBUl9UT19CWVRFOChidWZbaV0pLCBmcmFtZS0+aW5w
dXQuZi5zdHJlYW0pOworCQkgIH0KKwkgICAgICB9CisJICB9CisJZWxzZQorCSAgeworCSAgICB4
c2lnbmFsMSAoUWVycm9yLAorCQkgICAgICBidWlsZF9zdHJpbmcgKCJJbnRlcm5hbCBlcnJvcjog
Y2Fubm90IHJld2luZCAiCisJCQkibm9uLXNlZWthYmxlIHN0cmVhbSBpbiByZWFkKC0qKS4iKSk7
CisJICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVUX1NUUklO
RzoKKyAgICAgIHsKKwlmcmFtZS0+Y2hhcl9vZmZzZXQgPSBmcmFtZS0+aW5wdXQucy5zdGFydDsK
KwlmcmFtZS0+Ynl0ZV9vZmZzZXQKKwkgID0gc3RyaW5nX2NoYXJfdG9fYnl0ZSAoZnJhbWUtPmlu
cHV0LnMuc3RyaW5nLAorCQkJCSBmcmFtZS0+aW5wdXQucy5zdGFydCk7CisgICAgICB9CisgICAg
ICBicmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVUX1BST0NFRFVSRToKKyAgICAgIHsKKwlpZiAo
YnVmKQorCSAgeworCSAgICBmb3IgKGludCBpID0gbG9va2FoZWFkIC0xOyBpID49IDA7IGktLSkK
KwkgICAgICB7CisJCWNhbGxuIChmcmFtZS0+aW5wdXQucC5wcm9jLCBtYWtlX2ZpeG51bSAoYnVm
W2ldKSk7CisJICAgICAgfQorCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgeHNpZ25hbDEgKFFlcnJv
ciwKKwkJICAgICAgYnVpbGRfc3RyaW5nICgiSW50ZXJuYWwgZXJyb3I6IGNhbm5vdCByZXdpbmQg
IgorCQkJCSAgICAicmVhZCgtKikgc3RyZWFtIHNwZWNpZmllZCBhcyAiCisJCQkJICAgICJieSBh
IGZ1bmN0aW9uLiIpKTsKKwkgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJF
QURfSU5QVVRfQlVGRkVSOgorICAgIGNhc2UgTFJFQURfSU5QVVRfTUFSS0VSOgorICAgICAgewor
CUZnb3RvX2NoYXIgKG1ha2VfZml4bnVtICgwKSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAg
ICBjYXNlIExSRUFEX0lOUFVUX0lORElSRUNUOgorICAgICAgcmV0dXJuIGxyZWFkX3Jld2luZF9p
bnB1dCAoZnJhbWUtPmlucHV0LmZyYW1lLnNvdXJjZSwgbG9va2FoZWFkLCBidWYpOworICAgIGNh
c2UgTFJFQURfSU5QVVRfQklOQVJZOgorICAgIGNhc2UgTFJFQURfSU5QVVRfTlVMTDoKKyAgICAg
IHsKKwkvKiBOb3RoaW5nIHRvIGRvKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgICAgVU5S
RUNPR05JWkVEX0xSRUFEX0lOUFVUX0NBU0VTICgicmV3aW5kX2lucHV0Iik7CisgICAgfQorICBm
cmFtZS0+Y2hhcl9vZmZzZXQgPSAwOworICBmcmFtZS0+Ynl0ZV9vZmZzZXQgPSAwOworfQogCi0g
ICAgICByZXR1cm4gYzsKK3N0YXRpYyB2b2lkCitpbml0X2luZmlsZSAocmVnaXN0ZXIgbHJlYWRf
ZnJhbWUgKmZyYW1lLAorCSAgICAgZmlsZV9zdHJlYW0gc3RyZWFtLCBib29sIHNlZWthYmxlLCBi
b29sIG11bGUsCisJICAgICBMaXNwX09iamVjdCBjb2RpbmcpCit7CisgIGZyYW1lLT5pbnB1dC5m
ID0gSU5JVF9JTkZJTEUgKCk7CisgIGZyYW1lLT5pbnB1dC5mLnN0cmVhbSA9IHN0cmVhbTsKKyAg
ZnJhbWUtPmlucHV0LmYuc2Vla2FibGUgPSBzZWVrYWJsZTsKKyAgZnJhbWUtPmlucHV0LmYubXVs
ZSA9IG11bGU7CisgIGlmIChmcmFtZS0+aW5wdXQuZi5zZWVrYWJsZSAmJgorICAgICAgKGZ0ZWxs
byAoZnJhbWUtPmlucHV0LmYuc3RyZWFtKSAhPSAwKSkKKyAgICB7CisgICAgICBmc2Vla28gKGZy
YW1lLT5pbnB1dC5mLnN0cmVhbSwgMCwgU0VFS19TRVQpOwogICAgIH0KLSAgaWYgKE1BUktFUlAg
KHJlYWRjaGFyZnVuKSkKKyAgaWYgKE5JTFAgKGNvZGluZykpCisgICAgY29kaW5nID0gUW5vX2Nv
bnZlcnNpb247CisgIGZyYW1lLT5pbnB1dC5mLmNvZGluZyA9IGNvZGluZzsKKyAgaWYgKCFWQUxJ
RF9NVUxUSUJZVEUgKGZyYW1lLT5tdWx0aWJ5dGUpKQogICAgIHsKLSAgICAgIHJlZ2lzdGVyIHN0
cnVjdCBidWZmZXIgKmluYnVmZmVyID0gWE1BUktFUiAocmVhZGNoYXJmdW4pLT5idWZmZXI7Ci0K
LSAgICAgIHB0cmRpZmZfdCBieXRlcG9zID0gbWFya2VyX2J5dGVfcG9zaXRpb24gKHJlYWRjaGFy
ZnVuKTsKLQotICAgICAgaWYgKGJ5dGVwb3MgPj0gQlVGX1pWX0JZVEUgKGluYnVmZmVyKSkKLQly
ZXR1cm4gLTE7CisgICAgICBDSEVDS19DT0RJTkdfU1lTVEVNIChmcmFtZS0+aW5wdXQuZi5jb2Rp
bmcpOworICAgICAgcHRyZGlmZl90IGlkID0gQ09ESU5HX1NZU1RFTV9JRCAoZnJhbWUtPmlucHV0
LmYuY29kaW5nKTsKKyAgICAgIGZyYW1lLT5tdWx0aWJ5dGUgPSBOSUxQIChDT0RJTkdfQVRUUl9G
T1JfVU5JQllURSAoQ09ESU5HX0lEX0FUVFJTIChpZCkpKSA/CisJTFJFQURfTVVMVElCWVRFX1RS
VUUgOiBMUkVBRF9NVUxUSUJZVEVfRkFMU0U7CisgICAgfQorfQogCi0gICAgICBpZiAoISBOSUxQ
IChCVkFSIChpbmJ1ZmZlciwgZW5hYmxlX211bHRpYnl0ZV9jaGFyYWN0ZXJzKSkpCitzdGF0aWMg
dm9pZAoraW5pdF9pbnN0cmluZyAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLAorCSAgICAg
ICBMaXNwX09iamVjdCBzdHJpbmcpCit7CisgIHB0cmRpZmZfdCBzdGFydHZhbCwgZW5kdmFsOwor
ICBmcmFtZS0+aW5wdXQucyA9IElOSVRfSU5TVFJJTkcoKTsKKworICBpZiAoTklMUCAoZnJhbWUt
PnN0YXJ0KSkKKyAgICBmcmFtZS0+c3RhcnQgID0gbWFrZV9maXhudW0oMCk7CisgIGlmIChOSUxQ
IChmcmFtZS0+ZW5kKSkKKyAgICBmcmFtZS0+ZW5kID0gbWFrZV9maXhudW0gKFNDSEFSUyAoc3Ry
aW5nKSk7CisKKyAgQ0hFQ0tfRklYTlVNIChmcmFtZS0+c3RhcnQpOworICBDSEVDS19GSVhOVU0g
KGZyYW1lLT5lbmQpOworICBmcmFtZS0+aW5wdXQucy5zdHJpbmcgPSBzdHJpbmc7CisKKyAgdmFs
aWRhdGVfc3ViYXJyYXkgKHN0cmluZywgZnJhbWUtPnN0YXJ0LCBmcmFtZS0+ZW5kLCBTQ0hBUlMg
KHN0cmluZyksCisJCSAgICAgJnN0YXJ0dmFsLCAmZW5kdmFsKTsKKyAgZnJhbWUtPmlucHV0LnMu
c3RhcnQgPSBzdGFydHZhbDsKKyAgZnJhbWUtPmlucHV0LnMubGltaXQgPSBlbmR2YWw7CisgIGZy
YW1lLT5jaGFyX29mZnNldCA9IGZyYW1lLT5pbnB1dC5zLnN0YXJ0OworICBmcmFtZS0+Ynl0ZV9v
ZmZzZXQKKyAgICA9IHN0cmluZ19jaGFyX3RvX2J5dGUgKGZyYW1lLT5pbnB1dC5zLnN0cmluZywK
KwkJCSAgIGZyYW1lLT5pbnB1dC5zLnN0YXJ0KTsKKyAgaWYgKCFWQUxJRF9NVUxUSUJZVEUgKGZy
YW1lLT5tdWx0aWJ5dGUpKQorICAgIGZyYW1lLT5tdWx0aWJ5dGUgPSBTVFJJTkdfTVVMVElCWVRF
IChmcmFtZS0+aW5wdXQucy5zdHJpbmcpOworfQorCitzdGF0aWMgdm9pZAoraW5pdF9pbmJ1ZmZl
ciAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLAorCSAgICAgICBMaXNwX09iamVjdCBidWZm
ZXIpCit7CisgIGZyYW1lLT5pbnB1dC5iID0gSU5JVF9JTkJVRkZFUiAoKTsKKyAgc3RydWN0IGJ1
ZmZlciAqYnVmID0gWEJVRkZFUiAoYnVmZmVyKTsKKworICBpZiAoTklMUCAoZnJhbWUtPmZ1bGxf
bmFtZSkpCisgICAgeworICAgICAgZnJhbWUtPmZ1bGxfbmFtZSA9ICBCVkFSIChidWYsIGZpbGVu
YW1lKTsKKyAgICB9CisgIGlmICghTklMUCAoZnJhbWUtPm5hbWUpICYmIE5JTFAgKGZyYW1lLT5m
dWxsX25hbWUpKQorICAgIHsKKyAgICAgIGlmIChOSUxQIChGZmlsZV9uYW1lX2Fic29sdXRlX3Ag
KGZyYW1lLT5uYW1lKSkpCisJZnJhbWUtPmZ1bGxfbmFtZSA9IEZleHBhbmRfZmlsZV9uYW1lIChm
cmFtZS0+bmFtZSwgQlZBUiAoYnVmLCBkaXJlY3RvcnkpKTsKKyAgICAgIGVsc2UKKwlmcmFtZS0+
ZnVsbF9uYW1lID0gZnJhbWUtPm5hbWU7CisgICAgfQorICBpZiAoTklMUCAoZnJhbWUtPm5hbWUp
ICYmICFOSUxQIChmcmFtZS0+ZnVsbF9uYW1lKSkKKyAgICB7CisgICAgICBmcmFtZS0+bmFtZSA9
IEZmaWxlX25hbWVfbm9uZGlyZWN0b3J5IChmcmFtZS0+ZnVsbF9uYW1lKTsKKyAgICB9CisgIGZy
YW1lLT5pbnB1dC5iLmJ1ZmZlciA9IGJ1ZmZlcjsKKyAgZnJhbWUtPmNoYXJfb2Zmc2V0ID0gQlVG
X1BUIChidWYpOworICBmcmFtZS0+Ynl0ZV9vZmZzZXQgPSBCVUZfUFRfQllURSAoYnVmKTsKKyAg
aWYgKCFWQUxJRF9NVUxUSUJZVEUgKGZyYW1lLT5tdWx0aWJ5dGUpKQorICAgIGZyYW1lLT5tdWx0
aWJ5dGUgPSAhIE5JTFAgKEJWQVIgKGJ1ZiwgZW5hYmxlX211bHRpYnl0ZV9jaGFyYWN0ZXJzKSk7
Cit9CisKK3N0YXRpYyB2b2lkCitpbml0X2lubWFya2VyIChyZWdpc3RlciBscmVhZF9mcmFtZSAq
ZnJhbWUsCisJICAgICAgIExpc3BfT2JqZWN0IG1hcmtlcikKK3sKKyAgZnJhbWUtPmlucHV0Lm0g
PSBJTklUX0lOTUFSS0VSKCk7CisgIGZyYW1lLT5pbnB1dC5tLm1hcmtlciA9IG1hcmtlcjsKKyAg
aWYgKE5JTFAgKGZyYW1lLT5zdGFydCkpCisgICAgZnJhbWUtPnN0YXJ0ID0gbWFya2VyOworICBp
bml0X2luYnVmZmVyIChmcmFtZSwgRm1hcmtlcl9idWZmZXIobWFya2VyKSk7Cit9CisKKy8qIERl
dGVybWluZSBtdWx0aWJ5dGUgKi8KK0lOTElORSB2b2lkCityZXBvcnRfbHJlYWRfbXVsdGlieXRl
IChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUpCit7CisgIC8qIEV4cGVjdCBhbnkgaW50ZXJy
dXB0aW9uIG9mIHJlYWQgdGhhdCBtaWdodCBjYXVzZQorICAgICBhIGNoYW5nZSBpbiB0aGUgY29k
aW5nIHRvIHNldCB0aGUgaW50ZXJydXB0ZWQgZnJhbWUncworICAgICBtdWx0aWJ5dGUgc3RhdHVz
IHRvIGluZGV0ZXJtaW5hdGUuICBPdGhlcndpc2UsCisgICAgIHRoZSBjb2Rpbmcgb2YgYW4gaW5w
dXQgaXMgcmVxdWlyZWQgdG8gcmVtYWluIGNvbnN0YW50CisgICAgIGZvciB0aGUgZHVyYXRpb24g
b2YgYSBzaW5nbGUgY2FsbCB0byByZWFkICovCisgIGlmIChmcmFtZS0+bXVsdGlieXRlICE9IExS
RUFEX01VTFRJQllURV9JTkRFVEVSTUlOQVRFKQorICAgIHJldHVybjsKKyAgc3dpdGNoIChmcmFt
ZS0+aW50eXBlKQorICAgIHsKKyAgICBjYXNlIExSRUFEX0lOUFVUX0ZJTEU6CisgICAgICB7CisJ
ZnJhbWUtPm11bHRpYnl0ZSA9IExSRUFEX01VTFRJQllURV9UUlVFOworICAgICAgfQorICAgICAg
YnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9GSUxFX01VTEU6CisgICAgICBmcmFtZS0+bXVs
dGlieXRlID0gTFJFQURfTVVMVElCWVRFX1RSVUU7CisgICAgICBicmVhazsKKyAgICBjYXNlIExS
RUFEX0lOUFVUX1NUUklORzoKKyAgICAgIHsKKwlmcmFtZS0+bXVsdGlieXRlCisJICA9IChTVFJJ
TkdfTVVMVElCWVRFIChmcmFtZS0+aW5wdXQucy5zdHJpbmcpKQorCSAgPyBMUkVBRF9NVUxUSUJZ
VEVfVFJVRQorCSAgOiBMUkVBRF9NVUxUSUJZVEVfRkFMU0U7CisgICAgICB9CisgICAgICBicmVh
azsKKyAgICBjYXNlIExSRUFEX0lOUFVUX1BST0NFRFVSRToKKyAgICAgIGZyYW1lLT5tdWx0aWJ5
dGUgPSBMUkVBRF9NVUxUSUJZVEVfVFJVRTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJFQURf
SU5QVVRfQlVGRkVSOgorICAgICAgeworCXN0cnVjdCBidWZmZXIgKmluYnVmZmVyID0gWEJVRkZF
UiAoZnJhbWUtPmlucHV0LmIuYnVmZmVyKTsKKwlmcmFtZS0+bXVsdGlieXRlCisJICA9ICghIE5J
TFAgKEJWQVIgKGluYnVmZmVyLCBlbmFibGVfbXVsdGlieXRlX2NoYXJhY3RlcnMpKSkKKwkgID8g
TFJFQURfTVVMVElCWVRFX1RSVUUKKwkgIDogTFJFQURfTVVMVElCWVRFX0ZBTFNFOworICAgICAg
fQorICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9NQVJLRVI6CisgICAgICB7CisJ
c3RydWN0IGJ1ZmZlciAqaW5idWZmZXIgPSBYQlVGRkVSIChmcmFtZS0+aW5wdXQubS5iLmJ1ZmZl
cik7CisJZnJhbWUtPm11bHRpYnl0ZQorCSAgPSAoISBOSUxQIChCVkFSIChpbmJ1ZmZlciwgZW5h
YmxlX211bHRpYnl0ZV9jaGFyYWN0ZXJzKSkpCisJICA/IExSRUFEX01VTFRJQllURV9UUlVFCisJ
ICA6IExSRUFEX01VTFRJQllURV9GQUxTRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNh
c2UgTFJFQURfSU5QVVRfSU5ESVJFQ1Q6CisgICAgICByZXBvcnRfbHJlYWRfbXVsdGlieXRlIChm
cmFtZS0+aW5wdXQuZnJhbWUuc291cmNlKTsKKyAgICAgIGZyYW1lLT5tdWx0aWJ5dGUgPSBmcmFt
ZS0+aW5wdXQuZnJhbWUuc291cmNlLT5tdWx0aWJ5dGU7CisgICAgICBicmVhazsKKyAgICBjYXNl
IExSRUFEX0lOUFVUX0JJTkFSWToKKwlmcmFtZS0+bXVsdGlieXRlID0gTFJFQURfTVVMVElCWVRF
X0ZBTFNFOworCWJyZWFrOworICAgIGNhc2UgTFJFQURfSU5QVVRfTlVMTDoKKyAgICAgIHsKKwkv
KiBDb21wbGV0ZWx5IG1lYW5pbmdsZXNzICovCisJZnJhbWUtPm11bHRpYnl0ZSA9IExSRUFEX01V
TFRJQllURV9UUlVFOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgICBVTlJFQ09HTklaRURf
TFJFQURfSU5QVVRfQ0FTRVMoInJlcG9ydF9tdWx0aWJ5dGUiKTsKKyAgICB9CisKK30KKworDAor
LyogRnVuY3Rpb24gdGhhdCByZWFkcyBvbmUgYnl0ZSBmcm9tIHRoZSBjdXJyZW50IHNvdXJjZSBS
RUFEQ0hBUkZVTgorICAgb3IgdW5yZWFkcyBvbmUgYnl0ZS4gIElmIHRoZSBpbnRlZ2VyIGFyZ3Vt
ZW50IEMgaXMgLTEsIGl0IHJldHVybnMKKyAgIG9uZSByZWFkIGJ5dGUsIG9yIC0xIHdoZW4gdGhl
cmUncyBubyBtb3JlIGJ5dGUgaW4gdGhlIHNvdXJjZS4gIElmIEMKKyAgIGlzIDAgb3IgcG9zaXRp
dmUsIGl0IHVucmVhZHMgQywgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgbm90CisgICBpbnRlcmVz
dGluZy4gICovCisKKworc3RhdGljIGludCByZWFkYnl0ZV9mcm9tX2ZpbGUgKHJlZ2lzdGVyIGxy
ZWFkX2ZyYW1lICpmcmFtZSk7CisKKworc3RhdGljIGJvb2wKK2NsZWFudXBfYWZ0ZXJfaW50ZXJy
dXB0X3AgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyAgc3dpdGNoIChmcmFtZS0+
aW50eXBlKQorICAgIHsKKyAgICBjYXNlIExSRUFEX0lOUFVUX1BST0NFRFVSRToKKyAgICBjYXNl
IExSRUFEX0lOUFVUX1NUUklORzoKKyAgICBjYXNlIExSRUFEX0lOUFVUX0JJTkFSWToKKyAgICBj
YXNlIExSRUFEX0lOUFVUX05VTEw6CisgICAgY2FzZSBMUkVBRF9JTlBVVF9GSUxFOgorICAgIGNh
c2UgTFJFQURfSU5QVVRfRklMRV9NVUxFOgorICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgYnJl
YWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9CVUZGRVI6CisgICAgY2FzZSBMUkVBRF9JTlBVVF9N
QVJLRVI6CisgICAgICByZXR1cm4gKGZyYW1lLT50eXBlID09IExSRUFEX0ZSQU1FX01VTFRJUExF
KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJFQURfSU5QVVRfSU5ESVJFQ1Q6CisgICAgICBy
ZXR1cm4gY2xlYW51cF9hZnRlcl9pbnRlcnJ1cHRfcCAoZnJhbWUtPmlucHV0LmZyYW1lLnNvdXJj
ZSk7CisgICAgICBVTlJFQ09HTklaRURfTFJFQURfSU5QVVRfQ0FTRVMoImNsZWFudXBfYWZ0ZXJf
aW50ZXJydXB0X3AiKTsKKyAgICB9CisgIGVhc3NlcnQgKDApOworfQorCitzdGF0aWMgdm9pZAor
bHJlYWRfY29udGludWVfZnJhbWVfYWZ0ZXJfaW50ZXJydXB0IChyZWdpc3RlciBscmVhZF9mcmFt
ZSAqZnJhbWUpCit7CisgIC8qIElmIHdlIGFyZSB1bndpbmRpbmcgZHVlIHRvIGEgbm9uLWxvY2Fs
IGV4aXQgZHVyaW5nIGFuCisgICAgIGludGVycnVwdCwgZG8gbm90aGluZyovCisgIGlmIChmcmFt
ZS0+aW50ZXJydXB0ZWQpCisgICAgcmV0dXJuOworICB1bmJpbmRfdG8gKGZyYW1lLT5keW5hbWlj
X2ZyYW1lLCBRbmlsKTsKKyAgLyogbmVlZCB0byBlbnN1cmUgYnVmZmVycyBhcmUgc3RpbGwgc2Fm
ZSAqLworICBzd2l0Y2ggKGZyYW1lLT5pbnR5cGUpCisgICAgeworICAgIGNhc2UgTFJFQURfSU5Q
VVRfUFJPQ0VEVVJFOgorICAgIGNhc2UgTFJFQURfSU5QVVRfU1RSSU5HOgorICAgIGNhc2UgTFJF
QURfSU5QVVRfQklOQVJZOgorICAgIGNhc2UgTFJFQURfSU5QVVRfTlVMTDoKKyAgICBjYXNlIExS
RUFEX0lOUFVUX0ZJTEU6CisgICAgY2FzZSBMUkVBRF9JTlBVVF9GSUxFX01VTEU6CisgICAgICBi
cmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVUX0JVRkZFUjoKKyAgICBjYXNlIExSRUFEX0lOUFVU
X01BUktFUjoKKyAgICAgIGlmIChmcmFtZS0+dHlwZSA9PSBMUkVBRF9GUkFNRV9NVUxUSVBMRSkK
KwlwcmVwYXJlX2J1ZmZlcl9mb3JfaW50ZXJydXB0aWJsZV9yZWFkIChmcmFtZSk7CisgICAgICBi
cmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVUX0lORElSRUNUOgorICAgICAgbHJlYWRfY29udGlu
dWVfZnJhbWVfYWZ0ZXJfaW50ZXJydXB0IChmcmFtZS0+aW5wdXQuZnJhbWUuc291cmNlKTsKKyAg
ICAgIGJyZWFrOworICAgICAgVU5SRUNPR05JWkVEX0xSRUFEX0lOUFVUX0NBU0VTKCJjb250aW51
ZV9mcmFtZV9hZnRlcl9pbnRlcnJ1cHQiKTsKKyAgICB9Cit9CisKK3N0YXRpYyBMaXNwX09iamVj
dAorY2FsbF9tYXliZV9xdWl0ICh2b2lkKQoreworICBtYXliZV9xdWl0KCk7CisgIHJldHVybiBR
bmlsOworfQorc3RhdGljIHZvaWQKK2xyZWFkX21heWJlX3F1aXQgKHJlZ2lzdGVyIGxyZWFkX2Zy
YW1lICpmcmFtZSkKK3sKKyAgYm9vbCBuZWVkX2NsZWFudXAgPSBjbGVhbnVwX2FmdGVyX2ludGVy
cnVwdF9wIChmcmFtZSk7CisgIC8qIGVuc3VyZSBmcmFtZSBpcyBwcm9wZXJseSByZXN0b3JlZCBp
ZgorICAgICBzb21lIGNvZGUgYWZmZWN0cyBhIGxpc3Agb2JqZWN0IHdlIGFyZQorICAgICB3b3Jr
aW5nIHdpdGggKi8KKyAgaWYgKG5lZWRfY2xlYW51cCkKKyAgICB7CisgICAgICAvKiB0aGlzIHNo
b3VsZCBsZWF2ZSB0aGUgYmluZGluZyB0byByZXN0b3JlIHRoZSBwcmV2aW91cworCSBmcmFtZSBp
biBwbGFjZSAqLworICAgICAgbHJlYWRfdW53aW5kX2Zvcl9ldmFsIChmcmFtZSk7CisgICAgfQor
ICBzcGVjcGRsX3JlZiBjb3VudCA9IFNQRUNQRExfSU5ERVgoKTsKKyAgLyogYW55IGVycm9ycyB0
aHJvd24gZHVyaW5nIGFuIGludGVycnVwdCBoYW5kbGVyIHdpbGwgYmUgaWdub3JlZCBpbiB0aGUK
KyAgICAgZHluYW1pYyBleHRlbnQgb2YgdGhpcyBmcmFtZSwgaS5lLiBzcHVyaW91cyBlbmQtb2Yt
ZmlsZSBzaWduYWxzICovCisgIC8qIHNob3VsZCBhbHNvIGRlYWwgd2l0aCB0aHJvd3MsIGJ1dCB3
ZSBkb24ndCBpbnN0YWxsIGFueSBjYXRjaCBoYW5kbGVycyAqLworICAvKiBvZiBjb3Vyc2UsIHRo
aXMgZG9lcyBub3QgZGVhbCB3aXRoIGFsbCB0aGUgb3RoZXIgcGxhY2VzIGludGVycnVwdHMKKyAg
ICAgY291bGQgYmUgcHJvY2Vzc2VkIGR1cmluZyBhIHJlYWQgb3IgcmVhZGV2YWxsb29wLi4uLiAq
LworICBmcmFtZS0+aW50ZXJydXB0ZWQgPSB0cnVlOworICBpbnRlcm5hbF9jb25kaXRpb25fY2Fz
ZSAoY2FsbF9tYXliZV9xdWl0LCBRdCwgaW50ZXJydXB0X2Vycm9yX2hhbmRsZXIpOworICBmcmFt
ZS0+aW50ZXJydXB0ZWQgPSBmYWxzZTsKKyAgaWYgKG5lZWRfY2xlYW51cCkKKyAgICB7CisgICAg
ICBlYXNzZXJ0ICghc3BlY3BkbF9yZWZfbHQgKGNvdW50LCBmcmFtZS0+ZHluYW1pY19mcmFtZSkp
OworICAgICAgdW5iaW5kX3RvIChjb3VudCwgUW5pbCk7CisgICAgICBscmVhZF9jb250aW51ZV9m
cmFtZV9hZnRlcl9pbnRlcnJ1cHQgKGZyYW1lKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQKK3Jl
YWRieXRlX2Zyb21fc3RkaW8gKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyAgaWYg
KGZyYW1lLT5pbnB1dC5mLmxvb2thaGVhZCkKKyAgICB7CisgICAgICByZXR1cm4gKGZyYW1lLT5p
bnB1dC5mLmJ1ZlstLShmcmFtZS0+aW5wdXQuZi5sb29rYWhlYWQpXSk7CisgICAgfQorCisgIGlu
dCBjOworCisgIGJsb2NrX2lucHV0ICgpOworCisjaWYgIWRlZmluZWQgVVNFX0FORFJPSURfQVNT
RVRTCisKKyAgLyogSW50ZXJydXB0ZWQgcmVhZHMgaGF2ZSBiZWVuIG9ic2VydmVkIHdoaWxlIHJl
YWRpbmcgb3ZlciB0aGUgbmV0d29yay4gICovCisgIHdoaWxlICgoYyA9IGdldGMgKGZyYW1lLT5p
bnB1dC5mLnN0cmVhbSkpID09IEVPRiAmJiBlcnJubyA9PSBFSU5UUgorCSAmJiBmZXJyb3IgKGZy
YW1lLT5pbnB1dC5mLnN0cmVhbSkpCisgICAgeworICAgICAgdW5ibG9ja19pbnB1dCAoKTsKKyAg
ICAgIGxyZWFkX21heWJlX3F1aXQgKGZyYW1lKTsKKyAgICAgIGJsb2NrX2lucHV0ICgpOworICAg
ICAgY2xlYXJlcnIgKGZyYW1lLT5pbnB1dC5mLnN0cmVhbSk7CisgICAgfQorCisjZWxzZQorCisg
IHsKKyAgICBjaGFyIGJ5dGU7CisgICAgc3NpemVfdCByYzsKKworICByZXRyeToKKyAgICByYyA9
IGFuZHJvaWRfYXNzZXRfcmVhZCAoZnJhbWUtPmlucHV0LmYuc3RyZWFtLCAmYnl0ZSwgMSk7CisK
KyAgICBpZiAocmMgPT0gMCkKKyAgICAgIGMgPSBFT0Y7CisgICAgZWxzZSBpZiAocmMgPT0gLTEp
CisgICAgICB7CisJaWYgKGVycm5vID09IEVJTlRSKQorCSAgeworCSAgICB1bmJsb2NrX2lucHV0
ICgpOworCSAgICBscmVhZF9tYXliZV9xdWl0IChmcmFtZSk7CisJICAgIGJsb2NrX2lucHV0ICgp
OworCSAgICBnb3RvIHJldHJ5OworCSAgfQorCWVsc2UKKwkgIGMgPSBFT0Y7CisgICAgICB9Cisg
ICAgZWxzZQorICAgICAgYyA9ICh1bnNpZ25lZCBjaGFyKSBieXRlOworICB9CisKKyNlbmRpZgor
CisgIHVuYmxvY2tfaW5wdXQgKCk7CisgIGlmIChjID09IEVPRikKKyAgICB7CisgICAgICBmcmFt
ZS0+cmVhZF9lb2YgPSB0cnVlOworICAgICAgYyA9IC0xOworICAgIH0KKyAgcmV0dXJuIGM7Cit9
CisKK3N0YXRpYyBpbnQKK3JlYWRieXRlX2Zyb21fZmlsZSAocmVnaXN0ZXIgbHJlYWRfZnJhbWUg
KmZyYW1lKQoreworICBlYXNzZXJ0IChGUk9NX0ZJTEVfUCAoZnJhbWUtPmludHlwZSkgJiYgKGZy
YW1lLT5pbnB1dC5mLnN0cmVhbSkpOworCisgIHJldHVybiByZWFkYnl0ZV9mcm9tX3N0ZGlvIChm
cmFtZSk7Cit9CisKKworLyogSGFuZGxlIHVucmVhZGluZyBhbmQgcmVyZWFkaW5nIG9mIGNoYXJh
Y3RlcnMuCisgICBXcml0ZSBSRUFEQ0hBUiB0byByZWFkIGEgY2hhcmFjdGVyLAorICAgVU5SRUFE
KGMpIHRvIHVucmVhZCBjIHRvIGJlIHJlYWQgYWdhaW4uCisKKyAgIFRoZXNlIG1hY3JvcyBjb3Jy
ZWN0bHkgcmVhZC91bnJlYWQgbXVsdGlieXRlIGNoYXJhY3RlcnMuICAqLworCisjZGVmaW5lIFJF
QURDSEFSKGZyYW1lKSAoZnJhbWUtPnJlYWRvbmVjaGFyKGZyYW1lKSkKKyNkZWZpbmUgVU5SRUFE
KGZyYW1lLGMpIHVucmVhZGNoYXIgKGZyYW1lLCBjKQorCisKK0lOTElORSBpbnQKK2dldF9lbWFj
c19tdWxlX2NoYXJfbGVuZ3RoIChzdHJ1Y3QgY2hhcnNldCAqY3MsIGludCBjKQoreworICBpbnQg
ZGltZW5zaW9uID0gQ0hBUlNFVF9ESU1FTlNJT04gKGNzKTsKKyAgdW5zaWduZWQgY29kZSA9IEVO
Q09ERV9DSEFSIChjcywgYyk7CisgIGludCBzejsKKyAgZm9yIChzeiA9IDA7IGRpbWVuc2lvbiA+
IDAgJiYgKGNvZGUgJiAweEZGKTsgZGltZW5zaW9uLS0pCisgICAgeworICAgICAgc3orKzsKKyAg
ICAgIGNvZGUgPj49IDg7CisgICAgfQorICByZXR1cm4gc3o7Cit9CisKKworI2RlZmluZSBSRUFE
Q0hBUl9CRUdJTihmcmFtZSkgXAorICBpbnQgYzsgXAorICBkbyBcCisgICAgeyBcCisgICAgICBp
ZiAoZnJhbWUtPnVucmVhZF9jaGFyID49IDApIFwKKwl7IFwKKwkgIGMgPSBmcmFtZS0+dW5yZWFk
X2NoYXI7IFwKKwkgIGZyYW1lLT51bnJlYWRfY2hhciA9IC0xOyBcCisJICBmcmFtZS0+Y2hhcl9v
ZmZzZXQrKzsgXAorCSAgZnJhbWUtPmJ5dGVfb2Zmc2V0ICs9IGZyYW1lLT51bnJlYWRfYnl0ZXM7
IFwKKwkgIGZyYW1lLT51bnJlYWRfYnl0ZXMgPSAwOyBcCisJICByZXR1cm4gYzsgXAorCX0gXAor
ICAgIH0gXAorICB3aGlsZSAoMCkKKworI2RlZmluZSBSRUFEQ0hBUl9GUk9NX0ZJTEVfQkVHSU4o
ZnJhbWUpIFwKKyAgdW5zaWduZWQgY2hhciBidWZbNF07IFwKKyAgUkVBRENIQVJfQkVHSU4oZnJh
bWUpOyBcCisgIGMgPSByZWFkYnl0ZV9mcm9tX2ZpbGUgKGZyYW1lKTsgXAorICBpZiAoYyA8IDAp
IFwKKyAgICB7IFwKKyAgICAgIGZyYW1lLT5yZWFkX2VvZiA9IHRydWU7IFwKKyAgICAgIHJldHVy
biBjOyBcCisgICAgfSBcCisgIGRvIFwKKyAgICB7IFwKKyAgICAgIGlmIChBU0NJSV9DSEFSX1Ag
KGMpKSBcCisJeyBcCisJICBmcmFtZS0+Y2hhcl9vZmZzZXQrKzsgXAorCSAgZnJhbWUtPmJ5dGVf
b2Zmc2V0Kys7IFwKKwkgIHJldHVybiBjOyBcCisgICAgICAgfSBcCisgIH0gd2hpbGUgKDApCisK
Ky8qIGludGVybmFsIGZvcm0gb2YgL2Rldi9udWxsICovCitzdGF0aWMgaW50CityZWFkY2hhcl9m
cm9tX251bGwgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyAgZnJhbWUtPnJlYWRf
ZW9mID0gdHJ1ZTsKKyAgcmV0dXJuIC0xOworfQorCisvKiBIYW5kbGUgZW1hY3MtaW50ZXJuYWwg
Y29kaW5nICovCitzdGF0aWMgaW50CityZWFkY2hhcl9mcm9tX211bHRpYnl0ZV9maWxlIChyZWdp
c3RlciBscmVhZF9mcmFtZSAqZnJhbWUpCit7CisgIFJFQURDSEFSX0ZST01fRklMRV9CRUdJTihm
cmFtZSk7CisgIGludCBpID0gMDsKKyAgYnVmW2krK10gPSBjOworICBpbnQgbGVuID0gQllURVNf
QllfQ0hBUl9IRUFEIChjKTsKKyAgd2hpbGUgKGkgPCBsZW4pCisgICAgeworICAgICAgYnVmW2kr
K10gPSBjID0gcmVhZGJ5dGVfZnJvbV9maWxlIChmcmFtZSk7CisgICAgICBpZiAoYyA8IDAgfHwg
ISBUUkFJTElOR19DT0RFX1AgKGMpKQorCXsKKwkgIGZvciAoaSAtPSBjIDwgMDsgMCA8IC0taTsg
KQorCSAgICBmcmFtZS0+aW5wdXQuZi5idWZbZnJhbWUtPmlucHV0LmYubG9va2FoZWFkKytdID0g
YzsKKwkgIHJldHVybiBCWVRFOF9UT19DSEFSIChidWZbMF0pOworCX0KKyAgICB9CisgIGZyYW1l
LT5jaGFyX29mZnNldCsrOworICBjID0gU1RSSU5HX0NIQVIgKGJ1Zik7CisgIGZyYW1lLT5ieXRl
X29mZnNldCArPSBDSEFSX0JZVEVTKGMpOworICByZXR1cm4gYzsKK30KKworc3RhdGljIGludAor
cmVhZGNoYXJfZnJvbV91bmlieXRlX2ZpbGUgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkK
K3sKKyAgUkVBRENIQVJfQkVHSU4oZnJhbWUpOworICBjID0gcmVhZGJ5dGVfZnJvbV9maWxlIChm
cmFtZSk7CisgIGlmIChjIDwgMCkKKyAgICB7CisgICAgICBmcmFtZS0+cmVhZF9lb2YgPSB0cnVl
OworICAgICAgcmV0dXJuIGM7CisgICAgfQorICBmcmFtZS0+Y2hhcl9vZmZzZXQrKzsKKyAgZnJh
bWUtPmJ5dGVfb2Zmc2V0Kys7CisgIHJldHVybiBjOworfQorCisvKiBSZWFkIG9uZSBub24tQVND
SUkgY2hhcmFjdGVyIGZyb20gSU5GSUxFLiAgVGhlIGNoYXJhY3RlciBpcworICAgZW5jb2RlZCBp
biBgZW1hY3MtbXVsZScgYW5kIHRoZSBmaXJzdCBieXRlIGlzIGFscmVhZHkgcmVhZCBpbgorICAg
Qy4gICovCisKK3N0YXRpYyBpbnQKK3JlYWRjaGFyX2Zyb21fbXVsZV9maWxlIChyZWdpc3RlciBs
cmVhZF9mcmFtZSAqZnJhbWUpCit7CisgIFJFQURDSEFSX0ZST01fRklMRV9CRUdJTihmcmFtZSk7
CisgIC8qIEVtYWNzLW11bGUgY29kaW5nIHVzZXMgYXQgbW9zdCA0LWJ5dGUgZm9yIG9uZSBjaGFy
YWN0ZXIuICAqLworICBpbnQgbGVuID0gZW1hY3NfbXVsZV9ieXRlc1tjXTsKKyAgc3RydWN0IGNo
YXJzZXQgKmNoYXJzZXQ7CisgIHVuc2lnbmVkIGNvZGU7CisKKyAgaWYgKGxlbiA9PSAxKQorICAg
IC8qIEMgaXMgbm90IGEgdmFsaWQgbGVhZGluZy1jb2RlIG9mIGBlbWFjcy1tdWxlJy4gICovCisg
ICAgcmV0dXJuIEJZVEU4X1RPX0NIQVIgKGMpOworCisgIGludCBpID0gMDsKKyAgYnVmW2krK10g
PSBjOworICB3aGlsZSAoaSA8IGxlbikKKyAgICB7CisgICAgICBidWZbaSsrXSA9IGMgPSByZWFk
Ynl0ZV9mcm9tX2ZpbGUgKGZyYW1lKTsKKyAgICAgIGlmIChjIDwgMHhBMCkKIAl7Ci0JICAvKiBG
ZXRjaCB0aGUgY2hhcmFjdGVyIGNvZGUgZnJvbSB0aGUgYnVmZmVyLiAgKi8KLQkgIHVuc2lnbmVk
IGNoYXIgKnAgPSBCVUZfQllURV9BRERSRVNTIChpbmJ1ZmZlciwgYnl0ZXBvcyk7Ci0JICBpbnQg
Y2xlbjsKLQkgIGMgPSBzdHJpbmdfY2hhcl9hbmRfbGVuZ3RoIChwLCAmY2xlbik7Ci0JICBieXRl
cG9zICs9IGNsZW47Ci0JICBpZiAobXVsdGlieXRlKQotCSAgICAqbXVsdGlieXRlID0gMTsKKwkg
IGZvciAoaSAtPSBjIDwgMDsgMCA8IC0taTsgKQorCSAgICBmcmFtZS0+aW5wdXQuZi5idWZbZnJh
bWUtPmlucHV0LmYubG9va2FoZWFkKytdID0gYzsKKwkgIHJldHVybiBCWVRFOF9UT19DSEFSIChi
dWZbMF0pOworCX0KKyAgICB9CisKKyAgaWYgKGxlbiA9PSAyKQorICAgIHsKKyAgICAgIGNoYXJz
ZXQgPSBDSEFSU0VUX0ZST01fSUQgKGVtYWNzX211bGVfY2hhcnNldFtidWZbMF1dKTsKKyAgICAg
IGNvZGUgPSBidWZbMV0gJiAweDdGOworICAgIH0KKyAgZWxzZSBpZiAobGVuID09IDMpCisgICAg
eworICAgICAgaWYgKGJ1ZlswXSA9PSBFTUFDU19NVUxFX0xFQURJTkdfQ09ERV9QUklWQVRFXzEx
CisJICB8fCBidWZbMF0gPT0gRU1BQ1NfTVVMRV9MRUFESU5HX0NPREVfUFJJVkFURV8xMikKKwl7
CisJICBjaGFyc2V0ID0gQ0hBUlNFVF9GUk9NX0lEIChlbWFjc19tdWxlX2NoYXJzZXRbYnVmWzFd
XSk7CisJICBjb2RlID0gYnVmWzJdICYgMHg3RjsKIAl9CiAgICAgICBlbHNlCiAJewotCSAgYyA9
IEJVRl9GRVRDSF9CWVRFIChpbmJ1ZmZlciwgYnl0ZXBvcyk7Ci0JICBpZiAoISBBU0NJSV9DSEFS
X1AgKGMpKQotCSAgICBjID0gQllURThfVE9fQ0hBUiAoYyk7Ci0JICBieXRlcG9zKys7CisJICBj
aGFyc2V0ID0gQ0hBUlNFVF9GUk9NX0lEIChlbWFjc19tdWxlX2NoYXJzZXRbYnVmWzBdXSk7CisJ
ICBjb2RlID0gKChidWZbMV0gPDwgOCkgfCBidWZbMl0pICYgMHg3RjdGOwogCX0KKyAgICB9Cisg
IGVsc2UKKyAgICB7CisgICAgICBjaGFyc2V0ID0gQ0hBUlNFVF9GUk9NX0lEIChlbWFjc19tdWxl
X2NoYXJzZXRbYnVmWzFdXSk7CisgICAgICBjb2RlID0gKChidWZbMl0gPDwgOCkgfCBidWZbM10p
ICYgMHg3RjdGOworICAgIH0KKyAgZnJhbWUtPm11bGVfY2hhcnNldCA9IGNoYXJzZXQ7CisgIGMg
PSBERUNPREVfQ0hBUiAoY2hhcnNldCwgY29kZSk7CisgIGlmIChjIDwgMCkKKyAgICBpbnZhbGlk
X3N5bnRheCAoZnJhbWUsICJpbnZhbGlkIG11bHRpYnl0ZSBmb3JtIik7CisgIHJldHVybiBjOwor
fQogCi0gICAgICBYTUFSS0VSIChyZWFkY2hhcmZ1biktPmJ5dGVwb3MgPSBieXRlcG9zOwotICAg
ICAgWE1BUktFUiAocmVhZGNoYXJmdW4pLT5jaGFycG9zKys7CisjZGVmaW5lIFJFQURDSEFSX1NU
UklOR19CRUdJTihmcmFtZSkgXAorICByZWdpc3RlciBpbnQgYzsgXAorICBkbyBcCisgICAgeyBc
CisgICAgICBpZiAoZnJhbWUtPmNoYXJfb2Zmc2V0ID49IGZyYW1lLT5pbnB1dC5zLmxpbWl0KSBc
CisJeyBcCisJICBjID0gLTE7IFwKKwkgIGZyYW1lLT5yZWFkX2VvZiA9IHRydWU7IFwKKwkgIHJl
dHVybiBjOyBcCisJfSBcCisgICAgfSBcCisgIHdoaWxlICgwKTsKIAotICAgICAgcmV0dXJuIGM7
Ci0gICAgfQogCi0gIGlmIChFUSAocmVhZGNoYXJmdW4sIFFnZXRfZmlsZV9jaGFyKSkKK3N0YXRp
YyBpbnQKK3JlYWRjaGFyX2Zyb21fbXVsdGlieXRlX3N0cmluZyAocmVnaXN0ZXIgbHJlYWRfZnJh
bWUgKmZyYW1lKQoreworICBSRUFEQ0hBUl9TVFJJTkdfQkVHSU4gKGZyYW1lKTsKKyAgYyA9IGZl
dGNoX3N0cmluZ19jaGFyX2FkdmFuY2Vfbm9fY2hlY2sgKGZyYW1lLT5pbnB1dC5zLnN0cmluZywK
KwkJCQkJICAmKGZyYW1lLT5jaGFyX29mZnNldCksCisJCQkJCSAgJihmcmFtZS0+Ynl0ZV9vZmZz
ZXQpKTsKKyAgcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRjaGFyX2Zyb21fdW5pYnl0
ZV9zdHJpbmcgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyAgUkVBRENIQVJfU1RS
SU5HX0JFR0lOIChmcmFtZSk7CisgIGMgPSBTUkVGIChmcmFtZS0+aW5wdXQucy5zdHJpbmcsIGZy
YW1lLT5ieXRlX29mZnNldCk7CisgIGZyYW1lLT5jaGFyX29mZnNldCsrOworICBmcmFtZS0+Ynl0
ZV9vZmZzZXQrKzsKKyAgcmV0dXJuIGM7Cit9CisKKworI2RlZmluZSBSRUFEQ0hBUl9CVUZGRVJf
U0VUVVAoZnJhbWUsc3JjLHBvcykgICAgXAorICBpbnQgYzsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICBzdHJ1Y3QgYnVmZmVyICppbmJ1ZmZlciA9IFhCVUZGRVIg
KCAoc3JjKSApOyAgXAorICBpZiAoISBCVUZGRVJfTElWRV9QIChpbmJ1ZmZlcikpICAgICAgICAg
ICAgICAgXAorICAgIHJldHVybiAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICBwdHJkaWZmX3QgYnl0ZXBvcyA9ICggcG9zICk7ICAgICAgICAgICAgICAgICAgXAorICBk
byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYgKGJ5dGVw
b3MgPj0gQlVGX1pWX0JZVEUgKGluYnVmZmVyKSkgICAgXAorCXsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisJICBmcmFtZS0+cmVhZF9lb2YgPSB0cnVlOyAgICAgICAg
ICAgICAgIFwKKwkgIHJldHVybiAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkK
KworI2RlZmluZSBSRUFEQ0hBUl9CVUZGRVJfQkVHSU4oZnJhbWUsc3JjKSAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgUkVBRENIQVJfQlVGRkVSX1NFVFVQIChmcmFtZSwgc3JjLCBCVUZfUFRf
QllURSAoaW5idWZmZXIpKQorCisjZGVmaW5lIFJFQURDSEFSX0JVRkZFUl9GRVRDSF9NVUxUSUJZ
VEUoZnJhbWUpIFwKKyAgLyogRmV0Y2ggdGhlIGNoYXJhY3RlciBjb2RlIGZyb20gdGhlIGJ1ZmZl
ci4gICovIFwKKyAgdW5zaWduZWQgY2hhciAqcCA9IEJVRl9CWVRFX0FERFJFU1MgKGluYnVmZmVy
LCBieXRlcG9zKTsgXAorICBpbnQgY2xlbjsgXAorICBjID0gc3RyaW5nX2NoYXJfYW5kX2xlbmd0
aCAocCwgJmNsZW4pOyBcCisgIGJ5dGVwb3MgKz0gY2xlbgorCisjZGVmaW5lIFJFQURDSEFSX0JV
RkZFUl9GRVRDSF9VTklCWVRFKGZyYW1lKSBcCisgIGMgPSBCVUZfRkVUQ0hfQllURSAoaW5idWZm
ZXIsIGJ5dGVwb3MpOyBcCisgIGMgPSBVTklCWVRFX1RPX0NIQVIgKGMpOyBcCisgIGJ5dGVwb3Mr
KworCisjZGVmaW5lIFJFQURDSEFSX0JVRkZFUl9FTkQoZnJhbWUpIFwKKyAgU0VUX0JVRl9QVF9C
T1RIIChpbmJ1ZmZlciwgQlVGX1BUIChpbmJ1ZmZlcikgKyAxLCBieXRlcG9zKTsgXAorICBmcmFt
ZS0+Y2hhcl9vZmZzZXQgPSBCVUZfUFQoaW5idWZmZXIpOyBcCisgIGZyYW1lLT5ieXRlX29mZnNl
dCA9IGJ5dGVwb3MKKworI2RlZmluZSBSRUFEQ0hBUl9NQVJLRVJfQkVHSU4oZnJhbWUpIFwKKyAg
UkVBRENIQVJfQlVGRkVSX1NFVFVQIChmcmFtZSwgZnJhbWUtPmlucHV0Lm0uYi5idWZmZXIsIFwK
KwkJCSBtYXJrZXJfYnl0ZV9wb3NpdGlvbiAoZnJhbWUtPmlucHV0Lm0ubWFya2VyKSkKKworI2Rl
ZmluZSBSRUFEQ0hBUl9NQVJLRVJfRU5EKGZyYW1lKSBcCisgIGZyYW1lLT5ieXRlX29mZnNldCA9
IFhNQVJLRVIgKGZyYW1lLT5pbnB1dC5tLm1hcmtlciktPmJ5dGVwb3MgPSBieXRlcG9zOyBcCisg
IGZyYW1lLT5jaGFyX29mZnNldCA9ICsrKFhNQVJLRVIgKGZyYW1lLT5pbnB1dC5tLm1hcmtlcikt
PmNoYXJwb3MpCisKK3N0YXRpYyBpbnQKK3JlYWRjaGFyX2Zyb21fbXVsdGlieXRlX2J1ZmZlciAo
cmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKQoreworICBSRUFEQ0hBUl9CVUZGRVJfQkVHSU4g
KGZyYW1lLCBmcmFtZS0+aW5wdXQuYi5idWZmZXIpOworICBSRUFEQ0hBUl9CVUZGRVJfRkVUQ0hf
TVVMVElCWVRFKGZyYW1lKTsKKyAgUkVBRENIQVJfQlVGRkVSX0VORChmcmFtZSk7CisgIHJldHVy
biBjOworfQorCitzdGF0aWMgaW50CityZWFkY2hhcl9mcm9tX3VuaWJ5dGVfYnVmZmVyIChyZWdp
c3RlciBscmVhZF9mcmFtZSAqZnJhbWUpCit7CisgIFJFQURDSEFSX0JVRkZFUl9CRUdJTiAoZnJh
bWUsZnJhbWUtPmlucHV0LmIuYnVmZmVyKTsKKyAgUkVBRENIQVJfQlVGRkVSX0ZFVENIX1VOSUJZ
VEUgKGZyYW1lKTsKKyAgUkVBRENIQVJfQlVGRkVSX0VORCAoZnJhbWUpOworICByZXR1cm4gYzsK
K30KKworc3RhdGljIGludAorcmVhZGNoYXJfZnJvbV9tdWx0aWJ5dGVfbWFya2VyIChyZWdpc3Rl
ciBscmVhZF9mcmFtZSAqZnJhbWUpCit7CisgIFJFQURDSEFSX01BUktFUl9CRUdJTiAoZnJhbWUp
OworICBSRUFEQ0hBUl9CVUZGRVJfRkVUQ0hfTVVMVElCWVRFIChmcmFtZSk7CisgIFJFQURDSEFS
X01BUktFUl9FTkQgKGZyYW1lKTsKKyAgcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRj
aGFyX2Zyb21fdW5pYnl0ZV9tYXJrZXIgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sK
KyAgUkVBRENIQVJfTUFSS0VSX0JFR0lOIChmcmFtZSk7CisgIFJFQURDSEFSX0JVRkZFUl9GRVRD
SF9VTklCWVRFIChmcmFtZSk7CisgIFJFQURDSEFSX01BUktFUl9FTkQgKGZyYW1lKTsKKyAgcmV0
dXJuIGM7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRjaGFyX2Zyb21fbXVsdGlieXRlX3Byb2NlZHVy
ZSAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKQoreworICBSRUFEQ0hBUl9CRUdJTihmcmFt
ZSk7CisgIExpc3BfT2JqZWN0IHRlbSA9IGNhbGwwIChmcmFtZS0+aW5wdXQucC5wcm9jKTsKKyAg
YyA9ICghRklYTlVNUCAodGVtKSkgPyAtMSA6IFhGSVhOVU0odGVtKTsKKyAgaWYgKGMgPT0gLTEp
CisgICAgICBmcmFtZS0+cmVhZF9lb2YgPSB0cnVlOworICByZXR1cm4gYzsKK30KKworc3RhdGlj
IGludAorcmVhZGNoYXJfZnJvbV9pbmRpcmVjdCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1l
KQoreworICBscmVhZF9mcmFtZSAqc291cmNlID0gZnJhbWUtPmlucHV0LmZyYW1lLnNvdXJjZTsK
KyAgaW50IGM7CisgIGMgPSBSRUFEQ0hBUiAoc291cmNlKTsKKyAgZnJhbWUtPmNoYXJfb2Zmc2V0
ID0gc291cmNlLT5jaGFyX29mZnNldDsKKyAgZnJhbWUtPmJ5dGVfb2Zmc2V0ID0gc291cmNlLT5i
eXRlX29mZnNldDsKKyAgZnJhbWUtPm11bGVfY2hhcnNldCA9IHNvdXJjZS0+bXVsZV9jaGFyc2V0
OworICBmcmFtZS0+dW5yZWFkX2NoYXIgPSBzb3VyY2UtPnVucmVhZF9jaGFyOworICBmcmFtZS0+
dW5yZWFkX2J5dGVzID0gc291cmNlLT51bnJlYWRfYnl0ZXM7CisgIGZyYW1lLT5yZWFkX2VvZiA9
IHNvdXJjZS0+cmVhZF9lb2Y7CisgIHJldHVybiBjOworfQorCisvKiBkZWZpbmUgc29tZSB1c2Vm
dWwgY2FzZSBjb25zdGFudHMgKi8KK2VudW0geworICBVTklCWVRFX0ZJTEUgPSBMUkVBRF9JTlBV
VF9GSUxFIDw8IDEgfCBMUkVBRF9NVUxUSUJZVEVfRkFMU0UsCisgIE1VTFRJQllURV9GSUxFID0g
TFJFQURfSU5QVVRfRklMRSA8PCAxIHwgTFJFQURfTVVMVElCWVRFX1RSVUUsCisgIFVOSUJZVEVf
RklMRV9NVUxFID0gTFJFQURfSU5QVVRfRklMRV9NVUxFIDw8IDEgfCBMUkVBRF9NVUxUSUJZVEVf
RkFMU0UsCisgIE1VTFRJQllURV9GSUxFX01VTEUgPSBMUkVBRF9JTlBVVF9GSUxFX01VTEUgPDwg
MSB8IExSRUFEX01VTFRJQllURV9UUlVFLAorICBVTklCWVRFX1NUUklORyA9IExSRUFEX0lOUFVU
X1NUUklORyA8PCAxIHwgTFJFQURfTVVMVElCWVRFX0ZBTFNFLAorICBNVUxUSUJZVEVfU1RSSU5H
ID0gTFJFQURfSU5QVVRfU1RSSU5HIDw8IDEgfCBMUkVBRF9NVUxUSUJZVEVfVFJVRSwKKyAgVU5J
QllURV9CVUZGRVIgPSBMUkVBRF9JTlBVVF9CVUZGRVIgPDwgMSB8IExSRUFEX01VTFRJQllURV9G
QUxTRSwKKyAgTVVMVElCWVRFX0JVRkZFUiA9IExSRUFEX0lOUFVUX0JVRkZFUiA8PCAxIHwgTFJF
QURfTVVMVElCWVRFX1RSVUUsCisgIFVOSUJZVEVfTUFSS0VSID0gTFJFQURfSU5QVVRfTUFSS0VS
IDw8IDEgfCBMUkVBRF9NVUxUSUJZVEVfRkFMU0UsCisgIE1VTFRJQllURV9NQVJLRVIgPSBMUkVB
RF9JTlBVVF9NQVJLRVIgPDwgMSB8IExSRUFEX01VTFRJQllURV9UUlVFLAorICBVTklCWVRFX1BS
T0NFRFVSRSA9IExSRUFEX0lOUFVUX1BST0NFRFVSRSA8PCAxIHwgTFJFQURfTVVMVElCWVRFX0ZB
TFNFLAorICBNVUxUSUJZVEVfUFJPQ0VEVVJFID0gTFJFQURfSU5QVVRfUFJPQ0VEVVJFIDw8IDEg
fCBMUkVBRF9NVUxUSUJZVEVfVFJVRSwKKyAgVU5JQllURV9CSU5BUlkgPSBMUkVBRF9JTlBVVF9C
SU5BUlkgPDwgMSB8IExSRUFEX01VTFRJQllURV9GQUxTRSwKKyAgTVVMVElCWVRFX0JJTkFSWSA9
IExSRUFEX0lOUFVUX0JJTkFSWSA8PCAxIHwgTFJFQURfTVVMVElCWVRFX1RSVUUsCisgIFVOSUJZ
VEVfSU5ESVJFQ1QgPSBMUkVBRF9JTlBVVF9JTkRJUkVDVCA8PCAxIHwgTFJFQURfTVVMVElCWVRF
X0ZBTFNFLAorICBNVUxUSUJZVEVfSU5ESVJFQ1QgPSBMUkVBRF9JTlBVVF9JTkRJUkVDVCA8PCAx
IHwgTFJFQURfTVVMVElCWVRFX1RSVUUsCisgIFVOSUJZVEVfTlVMTCA9IExSRUFEX0lOUFVUX05V
TEwgPDwgMSB8IExSRUFEX01VTFRJQllURV9GQUxTRSwKKyAgTVVMVElCWVRFX05VTEwgPSBMUkVB
RF9JTlBVVF9OVUxMIDw8IDEgfCBMUkVBRF9NVUxUSUJZVEVfVFJVRQorfTsKKworc3RhdGljIHJl
YWRvbmVjaGFyX2Z1bmMgcmVhZG9uZWNoYXJfdGJsW01VTFRJQllURV9OVUxMICsgMV0gPQorICB7
CisgICAgTlVMTCwKKyAgICBbVU5JQllURV9GSUxFXSA9IHJlYWRjaGFyX2Zyb21fdW5pYnl0ZV9m
aWxlLAorICAgIFtNVUxUSUJZVEVfRklMRV0gPSByZWFkY2hhcl9mcm9tX211bHRpYnl0ZV9maWxl
LAorICAgIFtVTklCWVRFX0ZJTEVfTVVMRV0gPSBOVUxMLAorICAgIFtNVUxUSUJZVEVfRklMRV9N
VUxFXSA9IHJlYWRjaGFyX2Zyb21fbXVsZV9maWxlLAorICAgIFtVTklCWVRFX1NUUklOR10gPSBy
ZWFkY2hhcl9mcm9tX3VuaWJ5dGVfc3RyaW5nLAorICAgIFtNVUxUSUJZVEVfU1RSSU5HXSA9IHJl
YWRjaGFyX2Zyb21fbXVsdGlieXRlX3N0cmluZywKKyAgICBbVU5JQllURV9CVUZGRVJdID0gcmVh
ZGNoYXJfZnJvbV91bmlieXRlX2J1ZmZlciwKKyAgICBbTVVMVElCWVRFX0JVRkZFUl0gPSByZWFk
Y2hhcl9mcm9tX211bHRpYnl0ZV9idWZmZXIsCisgICAgW1VOSUJZVEVfTUFSS0VSXSA9IHJlYWRj
aGFyX2Zyb21fdW5pYnl0ZV9tYXJrZXIsCisgICAgW01VTFRJQllURV9NQVJLRVJdID0gcmVhZGNo
YXJfZnJvbV9tdWx0aWJ5dGVfbWFya2VyLAorICAgIFtVTklCWVRFX1BST0NFRFVSRV0gPSBOVUxM
LAorICAgIFtNVUxUSUJZVEVfUFJPQ0VEVVJFXSA9IHJlYWRjaGFyX2Zyb21fbXVsdGlieXRlX3By
b2NlZHVyZSwKKyAgICBbVU5JQllURV9JTkRJUkVDVF0gPSByZWFkY2hhcl9mcm9tX2luZGlyZWN0
LAorICAgIFtNVUxUSUJZVEVfSU5ESVJFQ1RdID0gcmVhZGNoYXJfZnJvbV9pbmRpcmVjdCwKKyAg
ICBbVU5JQllURV9OVUxMXSA9IHJlYWRjaGFyX2Zyb21fbnVsbCwKKyAgICBbTVVMVElCWVRFX05V
TExdID0gcmVhZGNoYXJfZnJvbV9udWxsCisgIH07CisKKyNpZiAwCitzdGF0aWMgcmVhZG9uZWNo
YXJfZnVuYyByZWFkb25lY2hhciA9IE5VTEw7CisjZW5kaWYKKworc3RhdGljIHZvaWQKK2luaXRp
YWxpemVfcmVhZG9uZWNoYXIgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyByZXRy
eToKKyAgaWYgKFZBTElEX01VTFRJQllURSAoZnJhbWUtPm11bHRpYnl0ZSkpCisgICAgeworICAg
ICAgaWYgKFZBTElEX0lOUFVUX1RZUEUgKGZyYW1lLT5pbnR5cGUpKQorCWZyYW1lLT5yZWFkb25l
Y2hhciA9IHJlYWRvbmVjaGFyX3RibFsoZnJhbWUtPmludHlwZSA8PCAxKSB8IGZyYW1lLT5tdWx0
aWJ5dGVdOworICAgICAgZWxzZQorCXhzaWduYWwxIChRZXJyb3IsCisJCSAgQ0FMTE4gKEZmb3Jt
YXQsCisJCQkgYnVpbGRfc3RyaW5nICgiSW52YWxpZCBpbnB1dCB0eXBlIGZvciByZWFkKC0qKTog
JVMiKSwKKwkJCSBtYWtlX2ZpeG51bShmcmFtZS0+aW50eXBlKSkpOworICAgIH0KKyAgZWxzZQog
ICAgIHsKLSAgICAgIGVhc3NlcnQgKGluZmlsZSk7Ci0gICAgICByZWFkYnl0ZSA9IHJlYWRieXRl
X2Zyb21fZmlsZTsKLSAgICAgIGdvdG8gcmVhZF9tdWx0aWJ5dGU7CisgICAgICByZXBvcnRfbHJl
YWRfbXVsdGlieXRlKGZyYW1lKTsKKyAgICAgIGlmIChWQUxJRF9NVUxUSUJZVEUgKGZyYW1lLT5t
dWx0aWJ5dGUpKQorCWdvdG8gcmV0cnk7CisgICAgICB4c2lnbmFsMSAoUWVycm9yLAorCQlidWls
ZF9zdHJpbmcgKCJJbnRlcm5hbCBlcnJvcjogbXVsdGlieXRlLW5lc3Mgb2YgIgorCQkJICAgICAg
ImlucHV0IHRvIHJlYWQoLSopIGNvdWxkIG5vdCBiZSAiCisJCQkgICAgICAiZGV0ZXJtaW5lZCIp
KTsKICAgICB9CisgIGlmICghZnJhbWUtPnJlYWRvbmVjaGFyKQorICAgIHhzaWduYWwxIChRZXJy
b3IsCisJICAgICAgQ0FMTE4gKEZmb3JtYXQsCisJCSAgICAgYnVpbGRfc3RyaW5nICgiSW52YWxp
ZCByZWFkb25lY2hhciBmdW5jdGlvbiAiCisJCQkJICAgImZvciByZWFkKC0qKTogaW5wdXQgdHlw
ZSAlUywgIgorCQkJCSAgICJtdWx0aWJ5dGUgJVMiKSwKKwkJICAgICBtYWtlX2ZpeG51bShmcmFt
ZS0+aW50eXBlKSwgbWFrZV9maXhudW0oZnJhbWUtPm11bHRpYnl0ZSkpKTsKK30KIAotICBpZiAo
U1RSSU5HUCAocmVhZGNoYXJmdW4pKQorREVGVU4gKCJyZWFkZXItaW5wdXQtc3RyZWFtIiwKKyAg
ICAgICBGcmVhZGVyX2lucHV0X3N0cmVhbSwgU3JlYWRlcl9pbnB1dF9zdHJlYW0sIDAsIDEsIDAs
CisgICAgICAgZG9jOiAvKiBSZWFkIENIQVJBQ1RFUiBmcm9tIGN1cnJlbnQgcmVhZGVyIHN0cmVh
bS4KK09ubHkgZm9yIGludGVybmFsIHVzZS4qLykKKyAgKExpc3BfT2JqZWN0IGNoYXJhY3RlcikK
K3sKKyAgcmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lID0gY3VycmVudF9mcmFtZTsKKyAgaW50
IGM7CisgIGlmIChOSUxQIChjaGFyYWN0ZXIpKQorICAgIGMgPSAtMTsKKyAgZWxzZSBpZiAoQ0hB
UkFDVEVSUCAoY2hhcmFjdGVyKSkKKyAgICBjID0gWEZJWE5VTSAoY2hhcmFjdGVyKTsKKyAgZWxz
ZQorICAgIHhzaWduYWwxIChRZXJyb3IsCisJICAgICAgQ0FMTE4gKEZmb3JtYXQsCisJCSAgICAg
YnVpbGRfc3RyaW5nICgicmVhZGVyLWlucHV0LXN0cmVhbTogIgorCQkJCSAgICJhcmd1bWVudCBu
b3QgYSBjaGFyYWN0ZXI6ICclcyciKSwKKwkJICAgICBjaGFyYWN0ZXIpKTsKKyAgaWYgKGZyYW1l
ICYmIGZyYW1lLT5yZWFkb25lY2hhcikKICAgICB7Ci0gICAgICBpZiAocmVhZF9mcm9tX3N0cmlu
Z19pbmRleCA+PSByZWFkX2Zyb21fc3RyaW5nX2xpbWl0KQotCWMgPSAtMTsKLSAgICAgIGVsc2Ug
aWYgKFNUUklOR19NVUxUSUJZVEUgKHJlYWRjaGFyZnVuKSkKKyAgICAgIGlmIChjID49IDApCiAJ
ewotCSAgaWYgKG11bHRpYnl0ZSkKLQkgICAgKm11bHRpYnl0ZSA9IDE7Ci0JICBjID0gKGZldGNo
X3N0cmluZ19jaGFyX2FkdmFuY2Vfbm9fY2hlY2sKLQkgICAgICAgKHJlYWRjaGFyZnVuLAotCQkm
cmVhZF9mcm9tX3N0cmluZ19pbmRleCwKLQkJJnJlYWRfZnJvbV9zdHJpbmdfaW5kZXhfYnl0ZSkp
OworCSAgVU5SRUFEIChmcmFtZSwgYyk7CiAJfQogICAgICAgZWxzZQotCXsKLQkgIGMgPSBTUkVG
IChyZWFkY2hhcmZ1biwgcmVhZF9mcm9tX3N0cmluZ19pbmRleF9ieXRlKTsKLQkgIHJlYWRfZnJv
bV9zdHJpbmdfaW5kZXgrKzsKLQkgIHJlYWRfZnJvbV9zdHJpbmdfaW5kZXhfYnl0ZSsrOwotCX0K
LSAgICAgIHJldHVybiBjOwotICAgIH0KLQotICBpZiAoRVEgKHJlYWRjaGFyZnVuLCBRZ2V0X2Vt
YWNzX211bGVfZmlsZV9jaGFyKSkKLSAgICB7Ci0gICAgICByZWFkYnl0ZSA9IHJlYWRieXRlX2Zy
b21fZmlsZTsKLSAgICAgIGVhc3NlcnQgKGluZmlsZSk7Ci0gICAgICBlbWFjc19tdWxlX2VuY29k
aW5nID0gMTsKLSAgICAgIGdvdG8gcmVhZF9tdWx0aWJ5dGU7Ci0gICAgfQotCi0gIHRlbSA9IGNh
bGwwIChyZWFkY2hhcmZ1bik7Ci0KLSAgaWYgKCFGSVhOVU1QICh0ZW0pKQotICAgIHJldHVybiAt
MTsKLSAgcmV0dXJuIFhGSVhOVU0gKHRlbSk7Ci0KLSByZWFkX211bHRpYnl0ZToKLSAgaWYgKHVu
cmVhZF9jaGFyID49IDApCi0gICAgewotICAgICAgYyA9IHVucmVhZF9jaGFyOwotICAgICAgdW5y
ZWFkX2NoYXIgPSAtMTsKLSAgICAgIHJldHVybiBjOworCWMgPSBSRUFEQ0hBUiAoZnJhbWUpOwog
ICAgIH0KLSAgYyA9ICgqcmVhZGJ5dGUpICgtMSwgcmVhZGNoYXJmdW4pOwotICBpZiAoYyA8IDAp
Ci0gICAgcmV0dXJuIGM7Ci0gIGlmIChtdWx0aWJ5dGUpCi0gICAgKm11bHRpYnl0ZSA9IDE7Ci0g
IGlmIChBU0NJSV9DSEFSX1AgKGMpKQotICAgIHJldHVybiBjOwotICBpZiAoZW1hY3NfbXVsZV9l
bmNvZGluZykKLSAgICByZXR1cm4gcmVhZF9lbWFjc19tdWxlX2NoYXIgKGMsIHJlYWRieXRlLCBy
ZWFkY2hhcmZ1bik7Ci0gIGkgPSAwOwotICBidWZbaSsrXSA9IGM7Ci0gIGxlbiA9IEJZVEVTX0JZ
X0NIQVJfSEVBRCAoYyk7Ci0gIHdoaWxlIChpIDwgbGVuKQorICBlbHNlCiAgICAgewotICAgICAg
YnVmW2krK10gPSBjID0gKCpyZWFkYnl0ZSkgKC0xLCByZWFkY2hhcmZ1bik7Ci0gICAgICBpZiAo
YyA8IDAgfHwgISBUUkFJTElOR19DT0RFX1AgKGMpKQotCXsKLQkgIGZvciAoaSAtPSBjIDwgMDsg
MCA8IC0taTsgKQotCSAgICAoKnJlYWRieXRlKSAoYnVmW2ldLCByZWFkY2hhcmZ1bik7Ci0JICBy
ZXR1cm4gQllURThfVE9fQ0hBUiAoYnVmWzBdKTsKLQl9CisgICAgICB4c2lnbmFsMSAoUWVycm9y
LAorCQlidWlsZF9zdHJpbmcgKCJyZWFkZXItaW5wdXQtc3RyZWFtOiByZWFkZXIgbm90IGFjdGl2
ZSIpKTsKICAgICB9Ci0gIHJldHVybiBTVFJJTkdfQ0hBUiAoYnVmKTsKKyAgcmV0dXJuIChtYWtl
X2ZpeG51bSAoYykpOwogfQogCi0jZGVmaW5lIEZST01fRklMRV9QKHJlYWRjaGFyZnVuKQkJCVwK
LSAgKEVRIChyZWFkY2hhcmZ1biwgUWdldF9maWxlX2NoYXIpCQkJXAotICAgfHwgRVEgKHJlYWRj
aGFyZnVuLCBRZ2V0X2VtYWNzX211bGVfZmlsZV9jaGFyKSkKLQogc3RhdGljIHZvaWQKLXNraXBf
ZHluX2J5dGVzIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwgcHRyZGlmZl90IG4pCitza2lwX2R5
bl9ieXRlcyAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLCBwdHJkaWZmX3QgbikKIHsKLSAg
aWYgKEZST01fRklMRV9QIChyZWFkY2hhcmZ1bikpCisgIGlmIChGUk9NX0ZJTEVfUCAoZnJhbWUt
PmludHlwZSkgJiYgIWZyYW1lLT5tdWx0aWJ5dGUpCiAgICAgewotICAgICAgYmxvY2tfaW5wdXQg
KCk7CQkvKiBGSVhNRTogTm90IHN1cmUgaWYgaXQncyBuZWVkZWQuICAqLwotICAgICAgZmlsZV9z
ZWVrIChpbmZpbGUtPnN0cmVhbSwgbiAtIGluZmlsZS0+bG9va2FoZWFkLCBTRUVLX0NVUik7Cisg
ICAgICBibG9ja19pbnB1dCAoKTsgICAgICAgICAgIC8qIEZJWE1FOiBOb3Qgc3VyZSBpZiBpdCdz
IG5lZWRlZC4gICovCisgICAgICBmaWxlX3NlZWsgKGZyYW1lLT5pbnB1dC5mLnN0cmVhbSwgbiAt
IGZyYW1lLT5pbnB1dC5mLmxvb2thaGVhZCwgU0VFS19DVVIpOworICAgICAgZnJhbWUtPmNoYXJf
b2Zmc2V0ICs9IG47CisgICAgICBmcmFtZS0+Ynl0ZV9vZmZzZXQgKz0gbjsKICAgICAgIHVuYmxv
Y2tfaW5wdXQgKCk7Ci0gICAgICBpbmZpbGUtPmxvb2thaGVhZCA9IDA7CisgICAgICBmcmFtZS0+
aW5wdXQuZi5sb29rYWhlYWQgPSAwOwogICAgIH0KICAgZWxzZQogICAgIHsgLyogV2UncmUgbm90
IHJlYWRpbmcgZGlyZWN0bHkgZnJvbSBhIGZpbGUuICBJbiB0aGF0IGNhc2UsIGl0J3MgZGlmZmlj
dWx0CkBAIC00NTcsMTUzICsxNjE5LDIwNiBAQCBza2lwX2R5bl9ieXRlcyAoTGlzcF9PYmplY3Qg
cmVhZGNoYXJmdW4sIHB0cmRpZmZfdCBuKQogCSB0aGF0IFwwMzcgaXMgdGhlIGZpbmFsIGNoYXIu
ICAqLwogICAgICAgaW50IGM7CiAgICAgICBkbyB7Ci0JYyA9IFJFQURDSEFSOworCWMgPSBSRUFE
Q0hBUiAoZnJhbWUpOwogICAgICAgfSB3aGlsZSAoYyA+PSAwICYmIGMgIT0gJ1wwMzcnKTsKICAg
ICB9CiB9CiAKIHN0YXRpYyB2b2lkCi1za2lwX2R5bl9lb2YgKExpc3BfT2JqZWN0IHJlYWRjaGFy
ZnVuKQorc2tpcF9keW5fZW9mIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUpCiB7Ci0gIGlm
IChGUk9NX0ZJTEVfUCAocmVhZGNoYXJmdW4pKQorICBpZiAoRlJPTV9GSUxFX1AgKGZyYW1lLT5p
bnR5cGUpICYmICFmcmFtZS0+bXVsdGlieXRlKQogICAgIHsKLSAgICAgIGJsb2NrX2lucHV0ICgp
OwkJLyogRklYTUU6IE5vdCBzdXJlIGlmIGl0J3MgbmVlZGVkLiAgKi8KLSAgICAgIGZpbGVfc2Vl
ayAoaW5maWxlLT5zdHJlYW0sIDAsIFNFRUtfRU5EKTsKKyAgICAgIGJsb2NrX2lucHV0ICgpOyAg
ICAgICAgICAgLyogRklYTUU6IE5vdCBzdXJlIGlmIGl0J3MgbmVlZGVkLiAgKi8KKyAgICAgIHB0
cmRpZmZfdCBuID0gZmlsZV90ZWxsIChmcmFtZS0+aW5wdXQuZi5zdHJlYW0pOworICAgICAgZmls
ZV9zZWVrIChmcmFtZS0+aW5wdXQuZi5zdHJlYW0sIDAsIFNFRUtfRU5EKTsKKyAgICAgIG4gPSBm
aWxlX3RlbGwgKGZyYW1lLT5pbnB1dC5mLnN0cmVhbSkgLSBuOworICAgICAgZnJhbWUtPmNoYXJf
b2Zmc2V0ICs9IG47CisgICAgICBmcmFtZS0+Ynl0ZV9vZmZzZXQgKz0gbjsKICAgICAgIHVuYmxv
Y2tfaW5wdXQgKCk7Ci0gICAgICBpbmZpbGUtPmxvb2thaGVhZCA9IDA7Ci0gICAgfQotICBlbHNl
Ci0gICAgd2hpbGUgKFJFQURDSEFSID49IDApOwotfQotCi0vKiBVbnJlYWQgdGhlIGNoYXJhY3Rl
ciBDIGluIHRoZSB3YXkgYXBwcm9wcmlhdGUgZm9yIHRoZSBzdHJlYW0gUkVBRENIQVJGVU4uCi0g
ICBJZiB0aGUgc3RyZWFtIGlzIGEgdXNlciBmdW5jdGlvbiwgY2FsbCBpdCB3aXRoIHRoZSBjaGFy
IGFzIGFyZ3VtZW50LiAgKi8KLQotc3RhdGljIHZvaWQKLXVucmVhZGNoYXIgKExpc3BfT2JqZWN0
IHJlYWRjaGFyZnVuLCBpbnQgYykKLXsKLSAgcmVhZGNoYXJfb2Zmc2V0LS07Ci0gIGlmIChjID09
IC0xKQotICAgIC8qIERvbid0IGJhY2sgdXAgdGhlIHBvaW50ZXIgaWYgd2UncmUgdW5yZWFkaW5n
IHRoZSBlbmQtb2YtaW5wdXQgbWFyaywKLSAgICAgICBzaW5jZSByZWFkY2hhciBkaWRuJ3QgYWR2
YW5jZSBpdCB3aGVuIHdlIHJlYWQgaXQuICAqLwotICAgIDsKLSAgZWxzZSBpZiAoQlVGRkVSUCAo
cmVhZGNoYXJmdW4pKQotICAgIHsKLSAgICAgIHN0cnVjdCBidWZmZXIgKmIgPSBYQlVGRkVSIChy
ZWFkY2hhcmZ1bik7Ci0gICAgICBwdHJkaWZmX3QgY2hhcnBvcyA9IEJVRl9QVCAoYik7Ci0gICAg
ICBwdHJkaWZmX3QgYnl0ZXBvcyA9IEJVRl9QVF9CWVRFIChiKTsKLQotICAgICAgaWYgKCEgTklM
UCAoQlZBUiAoYiwgZW5hYmxlX211bHRpYnl0ZV9jaGFyYWN0ZXJzKSkpCi0JYnl0ZXBvcyAtPSBi
dWZfcHJldl9jaGFyX2xlbiAoYiwgYnl0ZXBvcyk7Ci0gICAgICBlbHNlCi0JYnl0ZXBvcy0tOwot
Ci0gICAgICBTRVRfQlVGX1BUX0JPVEggKGIsIGNoYXJwb3MgLSAxLCBieXRlcG9zKTsKLSAgICB9
Ci0gIGVsc2UgaWYgKE1BUktFUlAgKHJlYWRjaGFyZnVuKSkKLSAgICB7Ci0gICAgICBzdHJ1Y3Qg
YnVmZmVyICpiID0gWE1BUktFUiAocmVhZGNoYXJmdW4pLT5idWZmZXI7Ci0gICAgICBwdHJkaWZm
X3QgYnl0ZXBvcyA9IFhNQVJLRVIgKHJlYWRjaGFyZnVuKS0+Ynl0ZXBvczsKLQotICAgICAgWE1B
UktFUiAocmVhZGNoYXJmdW4pLT5jaGFycG9zLS07Ci0gICAgICBpZiAoISBOSUxQIChCVkFSIChi
LCBlbmFibGVfbXVsdGlieXRlX2NoYXJhY3RlcnMpKSkKLQlieXRlcG9zIC09IGJ1Zl9wcmV2X2No
YXJfbGVuIChiLCBieXRlcG9zKTsKLSAgICAgIGVsc2UKLQlieXRlcG9zLS07Ci0KLSAgICAgIFhN
QVJLRVIgKHJlYWRjaGFyZnVuKS0+Ynl0ZXBvcyA9IGJ5dGVwb3M7Ci0gICAgfQotICBlbHNlIGlm
IChTVFJJTkdQIChyZWFkY2hhcmZ1bikpCi0gICAgewotICAgICAgcmVhZF9mcm9tX3N0cmluZ19p
bmRleC0tOwotICAgICAgcmVhZF9mcm9tX3N0cmluZ19pbmRleF9ieXRlCi0JPSBzdHJpbmdfY2hh
cl90b19ieXRlIChyZWFkY2hhcmZ1biwgcmVhZF9mcm9tX3N0cmluZ19pbmRleCk7Ci0gICAgfQot
ICBlbHNlIGlmIChGUk9NX0ZJTEVfUCAocmVhZGNoYXJmdW4pKQotICAgIHsKLSAgICAgIHVucmVh
ZF9jaGFyID0gYzsKKyAgICAgIGZyYW1lLT5pbnB1dC5mLmxvb2thaGVhZCA9IDA7CisgICAgICBm
cmFtZS0+cmVhZF9lb2YgPSB0cnVlOwogICAgIH0KICAgZWxzZQotICAgIGNhbGxuIChyZWFkY2hh
cmZ1biwgbWFrZV9maXhudW0gKGMpKTsKKyAgICB3aGlsZSAoUkVBRENIQVIgKGZyYW1lKSA+PSAw
KTsKIH0KIAotc3RhdGljIGludAotcmVhZGJ5dGVfZnJvbV9zdGRpbyAodm9pZCkKK3ZvaWQKK3Vu
cmVhZGNoYXIgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSxpbnQgYykKIHsKLSAgaWYgKGlu
ZmlsZS0+bG9va2FoZWFkKQotICAgIHJldHVybiBpbmZpbGUtPmJ1ZlstLWluZmlsZS0+bG9va2Fo
ZWFkXTsKLQotICBpbnQgYzsKLSAgZmlsZV9zdHJlYW0gaW5zdHJlYW0gPSBpbmZpbGUtPnN0cmVh
bTsKLQotICBibG9ja19pbnB1dCAoKTsKLQotI2lmICFkZWZpbmVkIFVTRV9BTkRST0lEX0FTU0VU
UwotCi0gIC8qIEludGVycnVwdGVkIHJlYWRzIGhhdmUgYmVlbiBvYnNlcnZlZCB3aGlsZSByZWFk
aW5nIG92ZXIgdGhlIG5ldHdvcmsuICAqLwotICB3aGlsZSAoKGMgPSBnZXRjIChpbnN0cmVhbSkp
ID09IEVPRiAmJiBlcnJubyA9PSBFSU5UUiAmJiBmZXJyb3IgKGluc3RyZWFtKSkKKyAgaWYgKGMg
PCAwKQorICAgIHJldHVybjsKKyAgc3dpdGNoIChmcmFtZS0+aW50eXBlKQogICAgIHsKLSAgICAg
IHVuYmxvY2tfaW5wdXQgKCk7Ci0gICAgICBtYXliZV9xdWl0ICgpOwotICAgICAgYmxvY2tfaW5w
dXQgKCk7Ci0gICAgICBjbGVhcmVyciAoaW5zdHJlYW0pOwotICAgIH0KLQotI2Vsc2UKLQotICB7
Ci0gICAgY2hhciBieXRlOwotICAgIHNzaXplX3QgcmM7Ci0KLSAgcmV0cnk6Ci0gICAgcmMgPSBh
bmRyb2lkX2Fzc2V0X3JlYWQgKGluc3RyZWFtLCAmYnl0ZSwgMSk7Ci0KLSAgICBpZiAocmMgPT0g
MCkKLSAgICAgIGMgPSBFT0Y7Ci0gICAgZWxzZSBpZiAocmMgPT0gLTEpCisgICAgY2FzZSBMUkVB
RF9JTlBVVF9GSUxFOgogICAgICAgewotCWlmIChlcnJubyA9PSBFSU5UUikKKwlmcmFtZS0+dW5y
ZWFkX2NoYXIgPSBjOworCWZyYW1lLT5jaGFyX29mZnNldC0tOworCWlmIChmcmFtZS0+bXVsdGli
eXRlKQogCSAgewotCSAgICB1bmJsb2NrX2lucHV0ICgpOwotCSAgICBtYXliZV9xdWl0ICgpOwot
CSAgICBibG9ja19pbnB1dCAoKTsKLQkgICAgZ290byByZXRyeTsKKwkgICAgZnJhbWUtPnVucmVh
ZF9ieXRlcyA9IENIQVJfQllURVMoYyk7CisJICAgIGZyYW1lLT5ieXRlX29mZnNldCAtPSBmcmFt
ZS0+dW5yZWFkX2J5dGVzOwogCSAgfQogCWVsc2UKLQkgIGMgPSBFT0Y7CisJICB7CisJICAgIGZy
YW1lLT51bnJlYWRfYnl0ZXMgPSAxOworCSAgICBmcmFtZS0+Ynl0ZV9vZmZzZXQtLTsKKwkgIH0K
ICAgICAgIH0KLSAgICBlbHNlCi0gICAgICBjID0gKHVuc2lnbmVkIGNoYXIpIGJ5dGU7Ci0gIH0K
LQotI2VuZGlmCi0KLSAgdW5ibG9ja19pbnB1dCAoKTsKLQotICByZXR1cm4gKGMgPT0gRU9GID8g
LTEgOiBjKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJFQURfSU5QVVRfRklMRV9NVUxFOgor
ICAgICAgeworCWZyYW1lLT51bnJlYWRfY2hhciA9IGM7CisJZnJhbWUtPmNoYXJfb2Zmc2V0LS07
CisJZnJhbWUtPnVucmVhZF9ieXRlcworCSAgPSBnZXRfZW1hY3NfbXVsZV9jaGFyX2xlbmd0aCAo
ZnJhbWUtPm11bGVfY2hhcnNldCwgYyk7CisJZnJhbWUtPmJ5dGVfb2Zmc2V0IC09IGZyYW1lLT51
bnJlYWRfYnl0ZXM7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVU
X1NUUklORzoKKyAgICAgIHsKKwlmcmFtZS0+Y2hhcl9vZmZzZXQtLTsKKwlmcmFtZS0+Ynl0ZV9v
ZmZzZXQgLT0gZnJhbWUtPm11bHRpYnl0ZSA/IENIQVJfQllURVMgKGMpIDogMTsKKyAgICAgIH0K
KyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJFQURfSU5QVVRfUFJPQ0VEVVJFOgorICAgICAgewor
CWNhbGxuIChmcmFtZS0+aW5wdXQucC5wcm9jLCBtYWtlX2ZpeG51bSAoYykpOworCWZyYW1lLT5j
aGFyX29mZnNldC0tOworCWZyYW1lLT5ieXRlX29mZnNldCAtPSBDSEFSX0JZVEVTKGMpOworICAg
ICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9CVUZGRVI6CisgICAgICB7
CisJc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKGZyYW1lLT5pbnB1dC5iLmJ1ZmZlcik7CisJ
ZnJhbWUtPmNoYXJfb2Zmc2V0ID0gQlVGX1BUIChiKTsKKwlmcmFtZS0+Ynl0ZV9vZmZzZXQgPSBC
VUZfUFRfQllURSAoYik7CisJaWYgKGZyYW1lLT5tdWx0aWJ5dGUpCisJICBmcmFtZS0+Ynl0ZV9v
ZmZzZXQgLT0gYnVmX3ByZXZfY2hhcl9sZW4gKGIsIGZyYW1lLT5ieXRlX29mZnNldCk7CisJZWxz
ZQorCSAgZnJhbWUtPmJ5dGVfb2Zmc2V0LS07CisJZnJhbWUtPmNoYXJfb2Zmc2V0LS07CisJU0VU
X0JVRl9QVF9CT1RIIChiLCBmcmFtZS0+Y2hhcl9vZmZzZXQsIGZyYW1lLT5ieXRlX29mZnNldCk7
CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVUX01BUktFUjoKKyAg
ICAgIHsKKwlzdHJ1Y3QgYnVmZmVyICpiID0gWE1BUktFUiAoZnJhbWUtPmlucHV0Lm0ubWFya2Vy
KS0+YnVmZmVyOworCWZyYW1lLT5ieXRlX29mZnNldCA9IFhNQVJLRVIgKGZyYW1lLT5pbnB1dC5t
Lm1hcmtlciktPmJ5dGVwb3M7CisJZnJhbWUtPmNoYXJfb2Zmc2V0ID0gLS0oWE1BUktFUiAoZnJh
bWUtPmlucHV0Lm0ubWFya2VyKS0+Y2hhcnBvcyk7CisJaWYgKGZyYW1lLT5tdWx0aWJ5dGUpCisJ
ICBmcmFtZS0+Ynl0ZV9vZmZzZXQgLT0gYnVmX3ByZXZfY2hhcl9sZW4gKGIsIGZyYW1lLT5ieXRl
X29mZnNldCk7CisJZWxzZQorCSAgZnJhbWUtPmJ5dGVfb2Zmc2V0LS07CisJWE1BUktFUiAoZnJh
bWUtPmlucHV0Lm0ubWFya2VyKS0+Ynl0ZXBvcyA9IGZyYW1lLT5ieXRlX29mZnNldDsKKyAgICAg
IH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJFQURfSU5QVVRfQklOQVJZOgorICAgIGNhc2Ug
TFJFQURfSU5QVVRfTlVMTDoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJFQURfSU5QVVRfSU5E
SVJFQ1Q6CisgICAgICB1bnJlYWRjaGFyIChmcmFtZS0+aW5wdXQuZnJhbWUuc291cmNlLCBjKTsK
KyAgICAgIGJyZWFrOworICAgICAgVU5SRUNPR05JWkVEX0xSRUFEX0lOUFVUX0NBU0VTKCJ1bnJl
YWRjaGFyIikKKyAgICB9CiB9CiAKLXN0YXRpYyBpbnQKLXJlYWRieXRlX2Zyb21fZmlsZSAoaW50
IGMsIExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQorLyogTWFrZSBzdXJlIHRoZSBmaWxlIHN0cmVh
bSBlYXRzIHRoZSBmaW5hbCB1bnJlYWRjaGFyCisgICBhZnRlciBhIHJlYWQgb3BlcmF0aW9uIHRo
YXQgd29uJ3QgYmUgY29udGludWVkLAorICAgaS5lLiBpbiBhIHNpbmdsZSBvcGVyYXRpb24gKi8K
Kworc3RhdGljIHZvaWQKK2Nsb3NpbmdfdW5yZWFkY2hhciAocmVnaXN0ZXIgbHJlYWRfZnJhbWUg
KmZyYW1lKQogewotICBlYXNzZXJ0IChpbmZpbGUpOwotICBpZiAoYyA+PSAwKQorICBzd2l0Y2gg
KGZyYW1lLT5pbnR5cGUpCiAgICAgewotICAgICAgZWFzc2VydCAoaW5maWxlLT5sb29rYWhlYWQg
PCBzaXplb2YgaW5maWxlLT5idWYpOwotICAgICAgaW5maWxlLT5idWZbaW5maWxlLT5sb29rYWhl
YWQrK10gPSBjOwotICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIGNhc2UgTFJFQURfSU5QVVRf
UFJPQ0VEVVJFOgorICAgIGNhc2UgTFJFQURfSU5QVVRfQlVGRkVSOgorICAgIGNhc2UgTFJFQURf
SU5QVVRfTUFSS0VSOgorICAgIGNhc2UgTFJFQURfSU5QVVRfU1RSSU5HOgorICAgIGNhc2UgTFJF
QURfSU5QVVRfQklOQVJZOgorICAgIGNhc2UgTFJFQURfSU5QVVRfTlVMTDoKKyAgICAgIGJyZWFr
OworICAgIGNhc2UgTFJFQURfSU5QVVRfRklMRToKKyAgICBjYXNlIExSRUFEX0lOUFVUX0ZJTEVf
TVVMRToKKyAgICAgIGlmIChmcmFtZS0+dHlwZSA9PSBMUkVBRF9GUkFNRV9TSU5HTEUpCisJewor
CSAgLyogYWx3YXlzIHB1dCBiYWNrIGFueSBsb29zZSBieXRlcyB0aGF0IGhhdmUgYmVlbiBwZWVr
ZWQKKwkgICAgIGJ1dCBub3QgcGFydCBvZiBhIGNoYXJhY3RlciBjb25zdW1lZCBieSByZWFkMCAq
LworCSAgZm9yIChpbnQgaSA9IGZyYW1lLT5pbnB1dC5mLmxvb2thaGVhZC0xOyBpID49IDA7IGkt
LSkKKwkgICAgeworCSAgICAgIHVuZ2V0YyAoZnJhbWUtPmlucHV0LmYuYnVmW2ldLCBmcmFtZS0+
aW5wdXQuZi5zdHJlYW0pOworCSAgICB9CisJICBmcmFtZS0+aW5wdXQuZi5sb29rYWhlYWQgPSAw
OworCSAgLyogVGhlbiBhbnkgY2hhcmFjdGVyIHRoYXQgaGFzIGJlZW4gdW5yZWFkCisJICAgICBo
YXMgdG8gYmUgdHVybmVkIGludG8gYSBieXRlCisJICAgICBlbmNvZGluZyBhbmQgcmV0dXJuZWQg
Ki8KKwkgIGlmIChmcmFtZS0+dW5yZWFkX2NoYXIgPj0gMCkKKwkgICAgeworCSAgICAgIGludCBj
ID0gZnJhbWUtPnVucmVhZF9jaGFyOworCSAgICAgIGludCBkaW0gPSBmcmFtZS0+dW5yZWFkX2J5
dGVzOworCSAgICAgIHVuc2lnbmVkIGNoYXIgYnVmW01BWF9NVUxUSUJZVEVfTEVOR1RIXTsKKwkg
ICAgICBmcmFtZS0+dW5yZWFkX2NoYXIgPSAtMTsKKwkgICAgICBmcmFtZS0+dW5yZWFkX2J5dGVz
ID0gMDsKKwkgICAgICBpZiAoZnJhbWUtPm11bHRpYnl0ZSAmJiAhZnJhbWUtPmlucHV0LmYubXVs
ZSkKKwkJeworCQkgIC8qIG9ubHkgZW1hY3MtaW50ZXJuYWwgY29kaW5nIGFsbG93ZWQKKwkJICAg
ICBmb3IgYWN0dWFsIG11bHRpYnl0ZSBmaWxlIHN0cmVhbXMKKwkJICAgICBPbmx5IGNhc2UgaXMg
cmVhZGluZyBmcm9tIHN0YW5kYXJkCisJCSAgICAgaW5wdXQgaW4gbm9uLWVkaXRvciBtb2RlLgor
CQkgICAgIEJ5dGUtY29tcGlsZWQgZmlsZXMgYXJlIGVpdGhlciBpbgorCQkgICAgIG5vLWNvbnZl
cnNpb24gdW5pYnl0ZSBvciBlbWFjcy1tdWxlCisJCSAgKi8KKwkJICBpbnQgbGVuID0gQ0hBUl9T
VFJJTkcgKGMsIGJ1Zik7CisJCSAgZWFzc3VtZSAobGVuID09IGRpbSk7CisJCSAgZm9yIChpbnQg
aSA9IChsZW4gLSAxKTsgaSA+PSAwOyBpLS0pCisJCSAgICB1bmdldGMgKGJ1ZltpXSwgZnJhbWUt
PmlucHV0LmYuc3RyZWFtKTsKKwkJfQorCSAgICAgIGVsc2UgaWYgKCFmcmFtZS0+bXVsdGlieXRl
KQorCQl7CisJCSAgLyogdW5pYnl0ZSAqLworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgLyog
ZW1hY3MtbXVsZSBlbmNvZGluZworCQkgICAgIExlYXN0IGxpa2VseSBjYXNlIGxhc3QgKi8KKwkJ
ICBpbnQgc3ogPSBDSEFSU0VUX0RJTUVOU0lPTiAoZnJhbWUtPm11bGVfY2hhcnNldCk7CisJCSAg
dW5zaWduZWQgY29kZSA9IEVOQ09ERV9DSEFSIChmcmFtZS0+bXVsZV9jaGFyc2V0LCBjKTsKKwkJ
ICBpbnQgbGVuOworCQkgIGZvciAobGVuID0gMDsgc3ogPiAwICYmIChjb2RlICYgMHhGRik7IHN6
LS0pCisJCSAgICB7CisJCSAgICAgIGJ1ZltsZW4rK10gPSAodW5zaWduZWQgY2hhcikgKGNvZGUg
JiAweEZGKTsKKwkJICAgICAgY29kZSA+Pj0gODsKKwkJICAgIH0KKwkJICBlYXNzdW1lIChsZW4g
PT0gZGltKTsKKwkJICBmb3IgKGludCBpID0gKGxlbiAtIDEpOyBpID49IDA7IGktLSkKKwkJICAg
IHVuZ2V0YyAoYnVmW2ldLCBmcmFtZS0+aW5wdXQuZi5zdHJlYW0pOworCQl9CisJICAgIH0KKwl9
CisgICAgICBicmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVUX0lORElSRUNUOgorICAgICAgewor
CWxyZWFkX2ZyYW1lICpzb3VyY2UgPSBmcmFtZS0+aW5wdXQuZnJhbWUuc291cmNlOworCWNsb3Np
bmdfdW5yZWFkY2hhciAoc291cmNlKTsKKwlmcmFtZS0+Y2hhcl9vZmZzZXQgPSBzb3VyY2UtPmNo
YXJfb2Zmc2V0OworCWZyYW1lLT5ieXRlX29mZnNldCA9IHNvdXJjZS0+Ynl0ZV9vZmZzZXQ7CisJ
ZnJhbWUtPnVucmVhZF9jaGFyID0gc291cmNlLT51bnJlYWRfY2hhcjsKKwlmcmFtZS0+dW5yZWFk
X2J5dGVzID0gc291cmNlLT51bnJlYWRfYnl0ZXM7CisJZnJhbWUtPm11bGVfY2hhcnNldCA9IHNv
dXJjZS0+bXVsZV9jaGFyc2V0OworICAgICAgfQorICAgICAgYnJlYWs7CiAKLSAgcmV0dXJuIHJl
YWRieXRlX2Zyb21fc3RkaW8gKCk7CisgICAgICBVTlJFQ09HTklaRURfTFJFQURfSU5QVVRfQ0FT
RVMoImNsb3NpbmdfdW5yZWFkY2hhciIpOworICAgIH0KIH0KLQogLyogU2lnbmFsIFFpbnZhbGlk
X3JlYWRfc3ludGF4IGVycm9yLgogICAgUyBpcyBlcnJvciBzdHJpbmcgb2YgbGVuZ3RoIE4gKGlm
ID4gMCkgICovCiAKLXN0YXRpYyBBVk9JRAotaW52YWxpZF9zeW50YXhfbGlzcCAoTGlzcF9PYmpl
Y3QgcywgTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCitBVk9JRAoraW52YWxpZF9zeW50YXhfbGlz
cCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLCBMaXNwX09iamVjdCBzKQogewotICBpZiAo
QlVGRkVSUCAocmVhZGNoYXJmdW4pKQorICBpZiAoSEFTX0JVRkZFUl9QIChmcmFtZS0+aW50eXBl
KSkKICAgICB7CiAgICAgICBwdHJkaWZmX3QgbGluZSwgY29sdW1uOwogCkBAIC02MTIsNyArMTgy
Nyw3IEBAIGludmFsaWRfc3ludGF4X2xpc3AgKExpc3BfT2JqZWN0IHMsIExpc3BfT2JqZWN0IHJl
YWRjaGFyZnVuKQogCXNwZWNwZGxfcmVmIGNvdW50ID0gU1BFQ1BETF9JTkRFWCAoKTsKIAogCXJl
Y29yZF91bndpbmRfcHJvdGVjdF9leGN1cnNpb24gKCk7Ci0Jc2V0X2J1ZmZlcl9pbnRlcm5hbCAo
WEJVRkZFUiAocmVhZGNoYXJmdW4pKTsKKwlzZXRfYnVmZmVyX2ludGVybmFsIChscmVhZF9nZXRf
YnVmZmVyKGZyYW1lKSk7CiAJbGluZSA9IGNvdW50X2xpbmVzIChCRUdWX0JZVEUsIFBUX0JZVEUp
ICsgMTsKIAljb2x1bW4gPSBjdXJyZW50X2NvbHVtbiAoKTsKIAl1bmJpbmRfdG8gKGNvdW50LCBR
bmlsKTsKQEAgLTYyMSw3NyArMTgzNiwyMCBAQCBpbnZhbGlkX3N5bnRheF9saXNwIChMaXNwX09i
amVjdCBzLCBMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKICAgICAgIHhzaWduYWwgKFFpbnZhbGlk
X3JlYWRfc3ludGF4LAogCSAgICAgICBsaXN0MyAocywgbWFrZV9maXhudW0gKGxpbmUpLCBtYWtl
X2ZpeG51bSAoY29sdW1uKSkpOwogICAgIH0KKyAgZWxzZSBpZiAoZnJhbWUtPmludHlwZSA9PSBM
UkVBRF9JTlBVVF9JTkRJUkVDVAorICAgICAgJiYgZnJhbWUtPmlucHV0LmZyYW1lLnNvdXJjZSkK
KyAgICBpbnZhbGlkX3N5bnRheF9saXNwIChmcmFtZS0+aW5wdXQuZnJhbWUuc291cmNlLHMpOwog
ICBlbHNlCiAgICAgeHNpZ25hbDEgKFFpbnZhbGlkX3JlYWRfc3ludGF4LCBzKTsKIH0KIAotc3Rh
dGljIEFWT0lECi1pbnZhbGlkX3N5bnRheCAoY29uc3QgY2hhciAqcywgTGlzcF9PYmplY3QgcmVh
ZGNoYXJmdW4pCitBVk9JRAoraW52YWxpZF9zeW50YXggKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpm
cmFtZSwgY29uc3QgY2hhciAqcykKIHsKLSAgaW52YWxpZF9zeW50YXhfbGlzcCAoYnVpbGRfc3Ry
aW5nIChzKSwgcmVhZGNoYXJmdW4pOworICBpbnZhbGlkX3N5bnRheF9saXNwIChmcmFtZSwgYnVp
bGRfc3RyaW5nIChzKSk7CiB9CiAKIAotLyogUmVhZCBvbmUgbm9uLUFTQ0lJIGNoYXJhY3RlciBm
cm9tIElORklMRS4gIFRoZSBjaGFyYWN0ZXIgaXMKLSAgIGVuY29kZWQgaW4gYGVtYWNzLW11bGUn
IGFuZCB0aGUgZmlyc3QgYnl0ZSBpcyBhbHJlYWR5IHJlYWQgaW4KLSAgIEMuICAqLwotCi1zdGF0
aWMgaW50Ci1yZWFkX2VtYWNzX211bGVfY2hhciAoaW50IGMsIGludCAoKnJlYWRieXRlKSAoaW50
LCBMaXNwX09iamVjdCksIExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQotewotICAvKiBFbWFjcy1t
dWxlIGNvZGluZyB1c2VzIGF0IG1vc3QgNC1ieXRlIGZvciBvbmUgY2hhcmFjdGVyLiAgKi8KLSAg
dW5zaWduZWQgY2hhciBidWZbNF07Ci0gIGludCBsZW4gPSBlbWFjc19tdWxlX2J5dGVzW2NdOwot
ICBzdHJ1Y3QgY2hhcnNldCAqY2hhcnNldDsKLSAgaW50IGk7Ci0gIHVuc2lnbmVkIGNvZGU7Ci0K
LSAgaWYgKGxlbiA9PSAxKQotICAgIC8qIEMgaXMgbm90IGEgdmFsaWQgbGVhZGluZy1jb2RlIG9m
IGBlbWFjcy1tdWxlJy4gICovCi0gICAgcmV0dXJuIEJZVEU4X1RPX0NIQVIgKGMpOwotCi0gIGkg
PSAwOwotICBidWZbaSsrXSA9IGM7Ci0gIHdoaWxlIChpIDwgbGVuKQotICAgIHsKLSAgICAgIGJ1
ZltpKytdID0gYyA9ICgqcmVhZGJ5dGUpICgtMSwgcmVhZGNoYXJmdW4pOwotICAgICAgaWYgKGMg
PCAweEEwKQotCXsKLQkgIGZvciAoaSAtPSBjIDwgMDsgMCA8IC0taTsgKQotCSAgICAoKnJlYWRi
eXRlKSAoYnVmW2ldLCByZWFkY2hhcmZ1bik7Ci0JICByZXR1cm4gQllURThfVE9fQ0hBUiAoYnVm
WzBdKTsKLQl9Ci0gICAgfQotCi0gIGlmIChsZW4gPT0gMikKLSAgICB7Ci0gICAgICBjaGFyc2V0
ID0gQ0hBUlNFVF9GUk9NX0lEIChlbWFjc19tdWxlX2NoYXJzZXRbYnVmWzBdXSk7Ci0gICAgICBj
b2RlID0gYnVmWzFdICYgMHg3RjsKLSAgICB9Ci0gIGVsc2UgaWYgKGxlbiA9PSAzKQotICAgIHsK
LSAgICAgIGlmIChidWZbMF0gPT0gRU1BQ1NfTVVMRV9MRUFESU5HX0NPREVfUFJJVkFURV8xMQot
CSAgfHwgYnVmWzBdID09IEVNQUNTX01VTEVfTEVBRElOR19DT0RFX1BSSVZBVEVfMTIpCi0Jewot
CSAgY2hhcnNldCA9IENIQVJTRVRfRlJPTV9JRCAoZW1hY3NfbXVsZV9jaGFyc2V0W2J1ZlsxXV0p
OwotCSAgY29kZSA9IGJ1ZlsyXSAmIDB4N0Y7Ci0JfQotICAgICAgZWxzZQotCXsKLQkgIGNoYXJz
ZXQgPSBDSEFSU0VUX0ZST01fSUQgKGVtYWNzX211bGVfY2hhcnNldFtidWZbMF1dKTsKLQkgIGNv
ZGUgPSAoKGJ1ZlsxXSA8PCA4KSB8IGJ1ZlsyXSkgJiAweDdGN0Y7Ci0JfQotICAgIH0KLSAgZWxz
ZQotICAgIHsKLSAgICAgIGNoYXJzZXQgPSBDSEFSU0VUX0ZST01fSUQgKGVtYWNzX211bGVfY2hh
cnNldFtidWZbMV1dKTsKLSAgICAgIGNvZGUgPSAoKGJ1ZlsyXSA8PCA4KSB8IGJ1ZlszXSkgJiAw
eDdGN0Y7Ci0gICAgfQotICBjID0gREVDT0RFX0NIQVIgKGNoYXJzZXQsIGNvZGUpOwotICBpZiAo
YyA8IDApCi0gICAgaW52YWxpZF9zeW50YXggKCJpbnZhbGlkIG11bHRpYnl0ZSBmb3JtIiwgcmVh
ZGNoYXJmdW4pOwotICByZXR1cm4gYzsKLX0KIAogCiAvKiBBbiBpbi1wcm9ncmVzcyBzdWJzdGl0
dXRpb24gb2YgT0JKRUNUIGZvciBQTEFDRUhPTERFUi4gICovCkBAIC03MDgsMTMgKzE4NjYsMzcg
QEAgcmVhZF9lbWFjc19tdWxlX2NoYXIgKGludCBjLCBpbnQgKCpyZWFkYnl0ZSkgKGludCwgTGlz
cF9PYmplY3QpLCBMaXNwX09iamVjdCByZWEKICAgTGlzcF9PYmplY3Qgc2VlbjsKIH07CiAKLXN0
YXRpYyBMaXNwX09iamVjdCByZWFkX2ludGVybmFsX3N0YXJ0IChMaXNwX09iamVjdCwgTGlzcF9P
YmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzcF9PYmpl
Y3QsIGJvb2wpOwotc3RhdGljIExpc3BfT2JqZWN0IHJlYWQwIChMaXNwX09iamVjdCwgYm9vbCk7
Ci0KIHN0YXRpYyBMaXNwX09iamVjdCBzdWJzdGl0dXRlX29iamVjdF9yZWN1cnNlIChzdHJ1Y3Qg
c3Vic3QgKiwgTGlzcF9PYmplY3QpOwogc3RhdGljIHZvaWQgc3Vic3RpdHV0ZV9pbl9pbnRlcnZh
bCAoSU5URVJWQUwsIHZvaWQgKik7CiAKKy8qIGlmIGFuIGVycm9yIHdhcyB0aHJvd24gZHVyaW5n
IGFuIGludGVycnVwdCBhbmQgbm90IGNhdWdodCwgaXQgc2hvdWxkbid0IGJlIGhhbmRsZWQKKyAg
IGJ5IHRoaXMgZnJhbWUsIGJ1dCBjb250aW51ZSB1bndpbmRpbmcKKyAqLworTGlzcF9PYmplY3QK
K2ludGVycnVwdF9lcnJvcl9oYW5kbGVyIChMaXNwX09iamVjdCBkYXRhKQoreworICAvKiBkYXRh
IHNob3VsZCBhbHdheXMgYmUgYSBjb25zKi8KKyAgZWFzc2VydCAoQ09OU1AgKGRhdGEpKTsKKyAg
aWYgKEVRIChYQ0FSIChkYXRhKSwgUWVycm9yX2R1cmluZ19pbnRlcnJ1cHQpKQorICAgIEZzaWdu
YWwgKFhDQVIgKGRhdGEpLFhDRFIgKGRhdGEpKTsKKyAgZWxzZQorICAgIEZzaWduYWwgKFFlcnJv
cl9kdXJpbmdfaW50ZXJydXB0LCBkYXRhKTsKKyAgZWFzc3VtZSAoZmFsc2UpOworfQorCitMaXNw
X09iamVjdAorYmFzZV9pbnRlcnJ1cHRfZXJyb3JfaGFuZGxlciAoTGlzcF9PYmplY3QgZGF0YSkK
K3sKKyAgLyogZGF0YSBzaG91bGQgYWx3YXlzIGJlIGEgY29ucyovCisgIGVhc3NlcnQgKENPTlNQ
IChkYXRhKSk7CisgIGlmIChFUSAoWENBUiAoZGF0YSksIFFlcnJvcl9kdXJpbmdfaW50ZXJydXB0
KSkKKyAgICBkYXRhID0gWENEUiAoZGF0YSk7CisgIC8qIHdlIGhhdmUgc2tpcHBlZCBhbGwgbHJl
YWQgZnJhbWVzIG5vdyAqLworICBlYXNzZXJ0IChDT05TUCAoZGF0YSkpOworICBGc2lnbmFsIChY
Q0FSIChkYXRhKSwgWENEUiAoZGF0YSkpOworICBlYXNzdW1lIChmYWxzZSk7Cit9CisKIAwKIC8q
IEdldCBhIGNoYXJhY3RlciBmcm9tIHRoZSB0dHkuICAqLwogCkBAIC05ODMsNjggKzIxNjUsODgg
QEAgREVGVU4gKCJyZWFkLWNoYXItZXhjbHVzaXZlIiwgRnJlYWRfY2hhcl9leGNsdXNpdmUsIFNy
ZWFkX2NoYXJfZXhjbHVzaXZlLCAwLCAzLAogDAogCiB0eXBlZGVmIGVudW0gewotICBDb29raWVf
Tm9uZSwJCQkvKiBubyBjb29raWUgKi8KLSAgQ29va2llX0R5biwJCQkvKiBleHBsaWNpdCBkeW5h
bWljIGJpbmRpbmcgKi8KLSAgQ29va2llX0xleAkJCS8qIGV4cGxpY2l0IGxleGljYWwgYmluZGlu
ZyAqLworICBDb29raWVfTm9uZSwgICAgICAgICAgICAgICAgICAvKiBubyBjb29raWUgKi8KKyAg
Q29va2llX0R5biwgICAgICAgICAgICAgICAgICAgLyogZXhwbGljaXQgZHluYW1pYyBiaW5kaW5n
ICovCisgIENvb2tpZV9MZXggICAgICAgICAgICAgICAgICAgIC8qIGV4cGxpY2l0IGxleGljYWwg
YmluZGluZyAqLwogfSBsZXhpY2FsX2Nvb2tpZV90OwogCi0vKiBEZXRlcm1pbmUgaWYgdGhlIGxp
c3AgY29kZSByZWFkIHVzaW5nIFJFQURDSEFSRlVOIGRlZmluZXMgYQotICAgYGxleGljYWwtYmlu
ZGluZycgZmlsZSB2YXJpYWJsZSByZXR1cm4gaXRzIHZhbHVlLgotICAgQWZ0ZXIgcmV0dXJuaW5n
LCB0aGUgc3RyZWFtIGlzIHBvc2l0aW9uZWQgZm9sbG93aW5nIHRoZSBmaXJzdCBsaW5lLAotICAg
aWYgaXQgaXMgYSBjb21tZW50IG9yICMhIGxpbmUsIG90aGVyd2lzZSBub3RoaW5nIGlzIHJlYWQu
ICAqLworLyogRGV0ZXJtaW5lIGlmIHRoZSBsaXNwIGNvZGUgcmVhZCBmcm9tIHRoZSBpbnB1dCBv
ZiBGUkFNRSBkZWZpbmVzIGEKKyAgIGBsZXhpY2FsLWJpbmRpbmcnIGZpbGUgdmFyaWFibGUgcmV0
dXJuIGl0cyB2YWx1ZS4gICovCiAKIHN0YXRpYyBsZXhpY2FsX2Nvb2tpZV90Ci1saXNwX2ZpbGVf
bGV4aWNhbF9jb29raWUgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQorbGlzcF9maWxlX2xleGlj
YWxfY29va2llIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUpCiB7Ci0gIGludCBjaCA9IFJF
QURDSEFSOwotCisgIHNwZWNwZGxfcmVmIGNvdW50ID0gU1BFQ1BETF9JTkRFWCAoKTsKKyAgLyog
aG9sZCBhbiA4MC1jb2x1bW4gbGluZXMgYmVjYXVzZSBvZiBhdXRvbWF0aWMgYWRkaW5nIG9mIGNv
b2tpZQorICAgICBhdCBlbmQgb2YgZmlyc3QgbGluZSwgd2hpY2ggbWF5IGFscmVhZHkgYmUgODAg
Y2hhcmFjdGVycyBvciBtb3JlICovCisgIGludCBzdGFja19idWZmZXJbODBdID0geyAwIH07Cisg
IGludCAqaGVhcGJ1ZiA9IE5VTEw7CisgIGJvb2wgbmVlZHNfYnVmZmVyID0gbHJlYWRfZnJhbWVf
cmVxdWlyZXNfcmV3aW5kX2J1ZmZlciAoZnJhbWUpOworICBpbnQgKmJ1ZiA9IG5lZWRzX2J1ZmZl
ciA/IHN0YWNrX2J1ZmZlciA6IE5VTEw7CisgIHB0cmRpZmZfdCBidWZfc3ogPSBuZWVkc19idWZm
ZXIgPyBzaXplb2Ygc3RhY2tfYnVmZmVyIDogMDsKKyAgaW50IGxvb2thaGVhZCA9IDA7CisgIGlu
dCAqcCA9IGJ1ZjsKKyAgaW50ICplbmQgPSBidWYgKyBidWZfc3o7CisgIC8qIEFsbG93IHRoZSBj
b29raWUgYW55d2hlcmUgaW4gYSBsZWFkaW5nIGNvbW1lbnQgYmxvY2ssCisgICAgIG5vdCBqdXN0
IHRoZSBmaXJzdCBsaW5lLiAgKi8KKyAgbGV4aWNhbF9jb29raWVfdCBydiA9IENvb2tpZV9Ob25l
OworICBpbnQgY2ggPSAtMTsKKyNkZWZpbmUgQ09PS0lFX1JFQURfQU5EX0JVRkZFUihjKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgYyA9IFJFQURDSEFSIChmcmFt
ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
aWYgKGMgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBnb3RvIG5vdF9mb3VuZDsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKG5lZWRzX2J1ZmZlcikgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICpwKysgPSBjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmIChlbmQgLSBwIDwgMikgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorCSAgbG9va2FoZWFkID0gcCAtIGJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisJICBidWYgPSBncm93X2ludF9idWZmZXIgKGJ1ZiwgbG9va2FoZWFkLCAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgJmhlYXBidWYsICZidWZfc3osICAgICAgICAg
ICAgICAgICAgICAgXAorCQkJCSBjb3VudCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisJICBwID0gYnVmICsgbG9va2FoZWFkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKwkgIGVuZCA9IGJ1ZiArIGJ1Zl9zejsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorICBDT09LSUVfUkVB
RF9BTkRfQlVGRkVSIChjaCk7CiAgIGlmIChjaCA9PSAnIycpCiAgICAgewotICAgICAgY2ggPSBS
RUFEQ0hBUjsKKyAgICAgIENPT0tJRV9SRUFEX0FORF9CVUZGRVIgKGNoKTsKICAgICAgIGlmIChj
aCAhPSAnIScpCi0gICAgICAgIHsKLSAgICAgICAgICBVTlJFQUQgKGNoKTsKLSAgICAgICAgICBV
TlJFQUQgKCcjJyk7Ci0gICAgICAgICAgcmV0dXJuIENvb2tpZV9Ob25lOwotICAgICAgICB9CisJ
Z290byBub3RfZm91bmQ7CiAgICAgICB3aGlsZSAoY2ggIT0gJ1xuJyAmJiBjaCAhPSBFT0YpCi0g
ICAgICAgIGNoID0gUkVBRENIQVI7Ci0gICAgICBpZiAoY2ggPT0gJ1xuJykgY2ggPSBSRUFEQ0hB
UjsKKwl7CisJICBDT09LSUVfUkVBRF9BTkRfQlVGRkVSIChjaCk7CisJfQorICAgICAgaWYgKGNo
ID09ICdcbicpCisJZ290byBub3RfZm91bmQ7CiAgICAgICAvKiBJdCBpcyBPSyB0byBsZWF2ZSB0
aGUgcG9zaXRpb24gYWZ0ZXIgYSAjISBsaW5lLCBzaW5jZQogCSB0aGF0IGlzIHdoYXQgcmVhZDAg
ZG9lcy4gICovCiAgICAgfQotCi0gIGlmIChjaCAhPSAnOycpCi0gICAgLyogVGhlIGZpcnN0IGxp
bmUgaXNuJ3QgYSBjb21tZW50LCBqdXN0IGdpdmUgdXAuICAqLwotICAgIHsKLSAgICAgIFVOUkVB
RCAoY2gpOwotICAgICAgcmV0dXJuIENvb2tpZV9Ob25lOwotICAgIH0KLSAgZWxzZQorICB3aGls
ZSAoY2ggPT0gJzsnKQogICAgIC8qIExvb2sgZm9yIGFuIGFwcHJvcHJpYXRlIGZpbGUtdmFyaWFi
bGUgaW4gdGhlIGZpcnN0IGxpbmUuICAqLwogICAgIHsKLSAgICAgIGxleGljYWxfY29va2llX3Qg
cnYgPSBDb29raWVfTm9uZTsKICAgICAgIGVudW0gewogCU5PTUlOQUwsIEFGVEVSX0ZJUlNUX0RB
U0gsIEFGVEVSX0FTVEVSSVgKICAgICAgIH0gYmVnX2VuZF9zdGF0ZSA9IE5PTUlOQUw7CiAgICAg
ICBib29sIGluX2ZpbGVfdmFycyA9IDA7CiAKLSNkZWZpbmUgVVBEQVRFX0JFR19FTkRfU1RBVEUo
Y2gpCQkJCVwKLSAgaWYgKGJlZ19lbmRfc3RhdGUgPT0gTk9NSU5BTCkJCQkJCVwKLSAgICBiZWdf
ZW5kX3N0YXRlID0gKGNoID09ICctJyA/IEFGVEVSX0ZJUlNUX0RBU0ggOiBOT01JTkFMKTsJXAot
ICBlbHNlIGlmIChiZWdfZW5kX3N0YXRlID09IEFGVEVSX0ZJUlNUX0RBU0gpCQkJXAotICAgIGJl
Z19lbmRfc3RhdGUgPSAoY2ggPT0gJyonID8gQUZURVJfQVNURVJJWCA6IE5PTUlOQUwpOwlcCi0g
IGVsc2UgaWYgKGJlZ19lbmRfc3RhdGUgPT0gQUZURVJfQVNURVJJWCkJCQlcCi0gICAgewkJCQkJ
CQkJXAotICAgICAgaWYgKGNoID09ICctJykJCQkJCQlcCi0JaW5fZmlsZV92YXJzID0gIWluX2Zp
bGVfdmFyczsJCQkJXAotICAgICAgYmVnX2VuZF9zdGF0ZSA9IE5PTUlOQUw7CQkJCQlcCisjZGVm
aW5lIFVQREFURV9CRUdfRU5EX1NUQVRFKGNoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICBpZiAoYmVnX2VuZF9zdGF0ZSA9PSBOT01JTkFMKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBiZWdfZW5kX3N0YXRlID0gKGNoID09ICctJyA/IEFGVEVSX0ZJ
UlNUX0RBU0ggOiBOT01JTkFMKTsgICBcCisgIGVsc2UgaWYgKGJlZ19lbmRfc3RhdGUgPT0gQUZU
RVJfRklSU1RfREFTSCkgICAgICAgICAgICAgICAgICAgXAorICAgIGJlZ19lbmRfc3RhdGUgPSAo
Y2ggPT0gJyonID8gQUZURVJfQVNURVJJWCA6IE5PTUlOQUwpOyAgICAgIFwKKyAgZWxzZSBpZiAo
YmVnX2VuZF9zdGF0ZSA9PSBBRlRFUl9BU1RFUklYKSAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgaWYgKGNoID09ICctJykgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKwlpbl9maWxlX3ZhcnMgPSAhaW5fZmlsZV92YXJzOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGJlZ19lbmRfc3RhdGUgPSBOT01JTkFMOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQogCiAgICAgICAvKiBTa2lwIHVu
dGlsIHdlIGdldCB0byB0aGUgZmlsZSB2YXJzLCBpZiBhbnkuICAqLwogICAgICAgZG8KIAl7Ci0J
ICBjaCA9IFJFQURDSEFSOworCSAgQ09PS0lFX1JFQURfQU5EX0JVRkZFUiAoY2gpOwogCSAgVVBE
QVRFX0JFR19FTkRfU1RBVEUgKGNoKTsKIAl9CiAgICAgICB3aGlsZSAoIWluX2ZpbGVfdmFycyAm
JiBjaCAhPSAnXG4nICYmIGNoICE9IEVPRik7CkBAIC0xMDU0LDExICsyMjU2LDEzIEBAICNkZWZp
bmUgVVBEQVRFX0JFR19FTkRfU1RBVEUoY2gpCQkJCVwKIAkgIGNoYXIgdmFyWzEwMF0sIHZhbFsx
MDBdOwogCSAgdW5zaWduZWQgaTsKIAotCSAgY2ggPSBSRUFEQ0hBUjsKKwkgIENPT0tJRV9SRUFE
X0FORF9CVUZGRVIgKGNoKTsKIAogCSAgLyogUmVhZCBhIHZhcmlhYmxlIG5hbWUuICAqLwogCSAg
d2hpbGUgKGNoID09ICcgJyB8fCBjaCA9PSAnXHQnKQotCSAgICBjaCA9IFJFQURDSEFSOworCSAg
ICB7CisJICAgICAgQ09PS0lFX1JFQURfQU5EX0JVRkZFUiAoY2gpOworCSAgICB9CiAKIAkgIGkg
PSAwOwogCSAgYmVnX2VuZF9zdGF0ZSA9IE5PTUlOQUw7CkBAIC0xMDY3LDEyICsyMjcxLDEyIEBA
ICNkZWZpbmUgVVBEQVRFX0JFR19FTkRfU1RBVEUoY2gpCQkJCVwKIAkgICAgICBpZiAoaSA8IHNp
emVvZiB2YXIgLSAxKQogCQl2YXJbaSsrXSA9IGNoOwogCSAgICAgIFVQREFURV9CRUdfRU5EX1NU
QVRFIChjaCk7Ci0JICAgICAgY2ggPSBSRUFEQ0hBUjsKKwkgICAgICBDT09LSUVfUkVBRF9BTkRf
QlVGRkVSIChjaCk7CiAJICAgIH0KIAotCSAgLyogU3RvcCBzY2FubmluZyBpZiBubyBjb2xvbiB3
YXMgZm91bmQgYmVmb3JlIGVuZCBtYXJrZXIuICAqLworCSAgLyogQ2hlY2sgbmV4dCBsaW5lIGlm
IG5vIGNvbG9uIHdhcyBmb3VuZCBiZWZvcmUgZW5kIG1hcmtlci4gICovCiAJICBpZiAoIWluX2Zp
bGVfdmFycyB8fCBjaCA9PSAnXG4nIHx8IGNoID09IEVPRikKLQkgICAgYnJlYWs7CisJICAgIGdv
dG8gZmluaXNoX2xpbmU7CiAKIAkgIHdoaWxlIChpID4gMCAmJiAodmFyW2kgLSAxXSA9PSAnICcg
fHwgdmFyW2kgLSAxXSA9PSAnXHQnKSkKIAkgICAgaS0tOwpAQCAtMTA4MSwxMCArMjI4NSwxMiBA
QCAjZGVmaW5lIFVQREFURV9CRUdfRU5EX1NUQVRFKGNoKQkJCQlcCiAJICBpZiAoY2ggPT0gJzon
KQogCSAgICB7CiAJICAgICAgLyogUmVhZCBhIHZhcmlhYmxlIHZhbHVlLiAgKi8KLQkgICAgICBj
aCA9IFJFQURDSEFSOworCSAgICAgIENPT0tJRV9SRUFEX0FORF9CVUZGRVIgKGNoKTsKIAogCSAg
ICAgIHdoaWxlIChjaCA9PSAnICcgfHwgY2ggPT0gJ1x0JykKLQkJY2ggPSBSRUFEQ0hBUjsKKwkJ
eworCQkgIENPT0tJRV9SRUFEX0FORF9CVUZGRVIgKGNoKTsKKwkJfQogCiAJICAgICAgaSA9IDA7
CiAJICAgICAgYmVnX2VuZF9zdGF0ZSA9IE5PTUlOQUw7CkBAIC0xMDkzLDcgKzIyOTksNyBAQCAj
ZGVmaW5lIFVQREFURV9CRUdfRU5EX1NUQVRFKGNoKQkJCQlcCiAJCSAgaWYgKGkgPCBzaXplb2Yg
dmFsIC0gMSkKIAkJICAgIHZhbFtpKytdID0gY2g7CiAJCSAgVVBEQVRFX0JFR19FTkRfU1RBVEUg
KGNoKTsKLQkJICBjaCA9IFJFQURDSEFSOworCQkgIENPT0tJRV9SRUFEX0FORF9CVUZGRVIgKGNo
KTsKIAkJfQogCSAgICAgIGlmICghIGluX2ZpbGVfdmFycykKIAkJLyogVGhlIHZhbHVlIHdhcyB0
ZXJtaW5hdGVkIGJ5IGFuIGVuZC1tYXJrZXIsIHdoaWNoIHJlbW92ZS4gICovCkBAIC0xMTA2LDE2
ICsyMzEyLDI1IEBAICNkZWZpbmUgVVBEQVRFX0JFR19FTkRfU1RBVEUoY2gpCQkJCVwKIAkJLyog
VGhpcyBpcyBpdC4uLiAgKi8KIAkJewogCQkgIHJ2ID0gc3RyY21wICh2YWwsICJuaWwiKSAhPSAw
ID8gQ29va2llX0xleCA6IENvb2tpZV9EeW47Ci0JCSAgYnJlYWs7CisJCSAgZ290byBmaW5pc2hf
bGluZTsKIAkJfQogCSAgICB9CiAJfQotCisgICAgZmluaXNoX2xpbmU6CiAgICAgICB3aGlsZSAo
Y2ggIT0gJ1xuJyAmJiBjaCAhPSBFT0YpCi0JY2ggPSBSRUFEQ0hBUjsKLQotICAgICAgcmV0dXJu
IHJ2OworCXsKKwkgIENPT0tJRV9SRUFEX0FORF9CVUZGRVIgKGNoKTsKKwl9CisgICAgICBpZiAo
cnYgIT0gQ29va2llX05vbmUpCisJZ290byBkb25lOworICAgICAgQ09PS0lFX1JFQURfQU5EX0JV
RkZFUiAoY2gpOwogICAgIH0KKyBub3RfZm91bmQ6CisgIGxyZWFkX3Jld2luZF9pbnB1dChmcmFt
ZSwgbG9va2FoZWFkLCBidWYpOworIGRvbmU6CisgIHVuYmluZF90byAoY291bnQsIFFuaWwpOwor
ICByZXR1cm4gcnY7CisKIH0KIAwKIC8qIFZhbHVlIGlzIGEgdmVyc2lvbiBudW1iZXIgb2YgYnl0
ZSBjb21waWxlZCBjb2RlIGlmIHRoZSBmaWxlCkBAIC0xMTY1LDcgKzIzODAsNyBAQCBzYWZlX3Rv
X2xvYWRfdmVyc2lvbiAoTGlzcF9PYmplY3QgZmlsZSwgbHJlYWRfZmQgZmQpCiBzdGF0aWMgdm9p
ZAogcmVjb3JkX2xvYWRfdW53aW5kIChMaXNwX09iamVjdCBvbGQpCiB7Ci0gIFZsb2Fkc19pbl9w
cm9ncmVzcyA9IG9sZDsKKyAgY3VycmVudF9mcmFtZS0+bG9hZHNfaW5fcHJvZ3Jlc3MgPSBvbGQ7
CiB9CiAKIC8qIFRoaXMgaGFuZGxlciBmdW5jdGlvbiBpcyB1c2VkIHZpYSBpbnRlcm5hbF9jb25k
aXRpb25fY2FzZV8xLiAgKi8KQEAgLTEyMDUsMjEgKzI0MjAsNyBAQCBERUZVTiAoImdldC1sb2Fk
LXN1ZmZpeGVzIiwgRmdldF9sb2FkX3N1ZmZpeGVzLCBTZ2V0X2xvYWRfc3VmZml4ZXMsIDAsIDAs
IDAsCiAgICAgICBMaXNwX09iamVjdCBleHRzID0gVmxvYWRfZmlsZV9yZXBfc3VmZml4ZXM7CiAg
ICAgICBMaXNwX09iamVjdCBzdWZmaXggPSBYQ0FSIChzdWZmaXhlcyk7CiAgICAgICBGT1JfRUFD
SF9UQUlMIChleHRzKQotCXsKLQkgIExpc3BfT2JqZWN0IGV4dCA9IFhDQVIgKGV4dHMpOwotI2lm
ZGVmIEhBVkVfTU9EVUxFUwotCSAgaWYgKFNDSEFSUyAoZXh0KSA+IDAKLQkgICAgICAmJiAoc3Vm
Zml4X3AgKHN1ZmZpeCwgTU9EVUxFU19TVUZGSVgpCi0jIGlmZGVmIE1PRFVMRVNfU0VDT05EQVJZ
X1NVRkZJWAotCQkgIHx8IHN1ZmZpeF9wIChzdWZmaXgsIE1PRFVMRVNfU0VDT05EQVJZX1NVRkZJ
WCkKLSMgZW5kaWYKLQkJICkKLQkgICAgICAmJiAhTklMUCAoRm1lbWJlciAoZXh0LCBGc3ltYm9s
X3ZhbHVlICgKLQkJCQkJUWprYV9jb21wcl9sb2FkX3N1ZmZpeGVzKSkpKQotCSAgICBjb250aW51
ZTsKLSNlbmRpZgotCSAgbHN0ID0gRmNvbnMgKGNvbmNhdDIgKHN1ZmZpeCwgZXh0KSwgbHN0KTsK
LQl9CisJbHN0ID0gRmNvbnMgKGNvbmNhdDIgKHN1ZmZpeCwgWENBUiAoZXh0cykpLCBsc3QpOwog
ICAgIH0KICAgcmV0dXJuIEZucmV2ZXJzZSAobHN0KTsKIH0KQEAgLTEyMzgsMTAgKzI0MzksMTQg
QEAgc3VmZml4X3AgKExpc3BfT2JqZWN0IHN0cmluZywgY29uc3QgY2hhciAqc3VmZml4KQogc3Rh
dGljIHZvaWQKIGNsb3NlX2luZmlsZV91bndpbmQgKHZvaWQgKmFyZykKIHsKLSAgc3RydWN0IGlu
ZmlsZSAqcHJldl9pbmZpbGUgPSBhcmc7CisgIC8qIHN0cnVjdCBpbmZpbGUgKnByZXZfaW5maWxl
ID0gYXJnOwogICBlYXNzZXJ0IChpbmZpbGUgJiYgaW5maWxlICE9IHByZXZfaW5maWxlKTsKICAg
ZmlsZV9zdHJlYW1fY2xvc2UgKGluZmlsZS0+c3RyZWFtKTsKICAgaW5maWxlID0gcHJldl9pbmZp
bGU7CisgICovCisgIGxyZWFkX2ZyYW1lICpmcmFtZSA9IChscmVhZF9mcmFtZSAqKSBhcmc7Cisg
IGVhc3NlcnQgKEZST01fRklMRV9QKGZyYW1lLT5pbnR5cGUpICYmIGZyYW1lLT5pbnB1dC5mLnN0
cmVhbSk7CisgIGZpbGVfc3RyZWFtX2Nsb3NlIChmcmFtZS0+aW5wdXQuZi5zdHJlYW0pOwogfQog
CiAvKiBDb21wdXRlIHRoZSBmaWxlbmFtZSB3ZSB3YW50IGluIGBsb2FkLWhpc3RvcnknIGFuZCBg
bG9hZC1maWxlLW5hbWUnLiAgKi8KQEAgLTEyODYsMjAgKzI0OTEsOTYgQEAgY2xvc2VfZmlsZV91
bndpbmRfYW5kcm9pZF9mZCAodm9pZCAqcHRyKQogI2VuZGlmCiAKIHN0YXRpYyBMaXNwX09iamVj
dAotZ2V0X2xleGljYWxfYmluZGluZyAoTGlzcF9PYmplY3Qgc3RyZWFtLCBMaXNwX09iamVjdCBm
cm9tKQorZ2V0X2xleGljYWxfYmluZGluZyAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLCBM
aXNwX09iamVjdCBmcm9tKQogewotICBsZXhpY2FsX2Nvb2tpZV90IGxleGMgPSBsaXNwX2ZpbGVf
bGV4aWNhbF9jb29raWUgKHN0cmVhbSk7CisgIGxleGljYWxfY29va2llX3QgbGV4YyA9IGxpc3Bf
ZmlsZV9sZXhpY2FsX2Nvb2tpZSAoZnJhbWUpOwogICByZXR1cm4gKChsZXhjID09IENvb2tpZV9M
ZXgKIAkgICA/IFF0CiAJICAgOiAobGV4YyA9PSBDb29raWVfRHluCiAJICAgICAgPyBRbmlsCi0J
ICAgICAgOiAoKE5JTFAgKGZyb20pCS8qIExvYWRpbmcgYSBieXRlLWNvbXBpbGVkIGZpbGUuICAq
LworCSAgICAgIDogKChOSUxQIChmcm9tKSAgIC8qIExvYWRpbmcgYSBieXRlLWNvbXBpbGVkIGZp
bGUuICAqLwogCQkgIHx8IE5JTFAgKFZpbnRlcm5hbF9fZ2V0X2RlZmF1bHRfbGV4aWNhbF9iaW5k
aW5nX2Z1bmN0aW9uKSkKIAkJID8gRmRlZmF1bHRfdG9wbGV2ZWxfdmFsdWUgKFFsZXhpY2FsX2Jp
bmRpbmcpCiAJCSA6IGNhbGxuIChWaW50ZXJuYWxfX2dldF9kZWZhdWx0X2xleGljYWxfYmluZGlu
Z19mdW5jdGlvbiwKIAkJCSAgZnJvbSkpKSkpOwogfQogCitzdGF0aWMgdm9pZAorbG9hZF9zb3Vy
Y2VfZmlsZV9raWxsX2J1ZmZlciAoTGlzcF9PYmplY3QgYnVmZmVyKQoreworICBzcGVjcGRsX3Jl
ZiBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7CisgIHNwZWNiaW5kIChRa2lsbF9idWZmZXJfaG9v
aywgUW5pbCk7CisgIHNwZWNiaW5kIChRa2lsbF9idWZmZXJfcXVlcnlfZnVuY3Rpb25zLCBRbmls
KTsKKyAgdW5iaW5kX3RvIChjb3VudCwgRmtpbGxfYnVmZmVyIChidWZmZXIpKTsKK30KKworLyog
UHJpbWl0aXZlIHZlcnNpb24gb2YgbG9hZC13aXRoLWNvZGUtY29udmVyc2lvbiAqLworc3RhdGlj
IExpc3BfT2JqZWN0Citsb2FkX3NvdXJjZV9maWxlIChMaXNwX09iamVjdCBmdWxsbmFtZSwgTGlz
cF9PYmplY3QgZmlsZSwKKwkJICBMaXNwX09iamVjdCBub2Vycm9yLCBMaXNwX09iamVjdCBub21l
c3NhZ2UpCit7CisgIGlmIChOSUxQIChGZmlsZV9yZWFkYWJsZV9wIChmdWxsbmFtZSkpKQorICAg
IHsKKyAgICAgIGlmIChOSUxQIChub2Vycm9yKSkKKwl7CisJICB4c2lnbmFsMiAoUWZpbGVfZXJy
b3IsCisJCSAgICBidWlsZF9zdHJpbmcgKCJDYW5ub3Qgb3BlbiBsb2FkIGZpbGUiKSwKKwkJICAg
IGZpbGUpOworCX0KKyAgICAgIHJldHVybiAoUW5pbCk7CisgICAgfQorICBMaXNwX09iamVjdCBz
b3VyY2VuYW1lID0gd2lsbF9kdW1wX3AgKCkgPyBmaWxlIDogZnVsbG5hbWU7CisgIExpc3BfT2Jq
ZWN0IGJ1ZmZlcl9uYW1lCisgICAgPSBGZ2VuZXJhdGVfbmV3X2J1ZmZlcl9uYW1lIChidWlsZF9z
dHJpbmcgKCIgKmxvYWQqIiksIFFuaWwpOworICBMaXNwX09iamVjdCBidWZmZXIgPSBGZ2V0X2J1
ZmZlcl9jcmVhdGUgKGJ1ZmZlcl9uYW1lLCBRbmlsKTsKKyAgc3BlY3BkbF9yZWYgY291bnQgPSBT
UEVDUERMX0lOREVYICgpOworICAvKiB0aGlzIGlzIG9ubHkgY2FsbGVkIGZvciBzb3VyY2UgZmls
ZXMgKi8KKyAgLyogbG9hZC13aXRoLWNvZGUtY29udmVyc2lvbiBiaW5kcyBsb2FkLWluLXByb2dy
ZXNzIGluIGFuIG91dGVyCisgICAgIHNjb3BlLCB3aGVyZSBGbG9hZCBiaW5kcyBpdCB3aXRoIGxv
YWQtZmlsZS1uYW1lLCBldGMsIGJlbG93ICovCisgIHNwZWNiaW5kIChRbG9hZF9pbl9wcm9ncmVz
cywgUXQpOworICBpZiAoTklMUCAobm9tZXNzYWdlKSkKKyAgICBtZXNzYWdlX3dpdGhfc3RyaW5n
ICgiTG9hZGluZyAlcyAoc291cmNlKS4uLiIsIGZpbGUsIDEpOworICBpZiAoIU5JTFAgKFZwdXJp
ZnlfZmxhZykpCisgICAgeworICAgICAgVnByZWxvYWRlZF9maWxlX2xpc3QgPSBGY29ucyAoZmls
ZSwgVnByZWxvYWRlZF9maWxlX2xpc3QpOworICAgIH0KKyAgeworICAgIHNwZWNwZGxfcmVmIGNv
dW50MSA9IFNQRUNQRExfSU5ERVggKCk7CisKKyAgICByZWNvcmRfdW53aW5kX3Byb3RlY3QgKGxv
YWRfc291cmNlX2ZpbGVfa2lsbF9idWZmZXIsIGJ1ZmZlcik7CisgICAgLyogbG9hZC13aXRoLWNv
ZGUtY29udmVyc2lvbiBzZXRzIGxvYWQtZmlsZS1uYW1lIHRvIGZ1bGxuYW1lLCBidXQKKyAgICAg
ICBsb2FkIHNldHMgaXQgdG8gZmlsZSA/ICovCisgICAgc3BlY2JpbmQgKFFsb2FkX2ZpbGVfbmFt
ZSwgZmlsZSk7CisgICAgc3BlY2JpbmQgKFFsb2FkX3RydWVfZmlsZV9uYW1lLCBmdWxsbmFtZSk7
CisgICAgc3BlY2JpbmQgKFFpbmhpYml0X2ZpbGVfbmFtZV9vcGVyYXRpb24sIFFuaWwpOworICAg
IC8qIElmIGF1dG8tY29kaW5nIHdhcyBpbXBsZW1lbnRlZCwgbG9hZCB3b3VsZCBoYXZlIGNhbGxl
ZAorICAgICAgIGxvYWQtd2l0aC1jb2RlLWNvbnZlcnNpb24gaW5zdGVhZCBvZiB0aGlzLCBzbyBk
b24ndCBib3RoZXIgKi8KKyAgICByZWNvcmRfdW53aW5kX2N1cnJlbnRfYnVmZmVyICgpOworICAg
IEZzZXRfYnVmZmVyIChidWZmZXIpOworICAgIEZzZXRfYnVmZmVyX211bHRpYnl0ZSAoUXQpOwor
ICAgIHsKKyAgICAgIHNwZWNwZGxfcmVmIGNvdW50MiA9IFNQRUNQRExfSU5ERVggKCk7CisgICAg
ICBzcGVjYmluZCAoUWRlYWN0aXZhdGVfbWFyaywgUW5pbCk7CisgICAgICB1bmJpbmRfdG8gKGNv
dW50MiwKKwkJIEZpbnNlcnRfZmlsZV9jb250ZW50cyAoZnVsbG5hbWUsIFFuaWwsIFFuaWwsIFFu
aWwsIFFuaWwpKTsKKyAgICB9CisgICAgLyogZG9uJ3Qgd29ycnkgYWJvdXQgc2hvcnRoYW5kcyBp
biB0ZW1hY3Mgc2FucyBsb2FkdXAqLworICAgIC8qIENBVkVBVCBFTVBUT1I6IHJlcXVpcmUgZW1h
Y3MgbGlzcCBzb3VyY2UgZmlsZXMgcmVhZCBieSB0ZW1hY3Mgc2FucworICAgICAgIGxvYWR1cCBh
cmUgaW4gZW5jb2RpbmcgY29tcGF0aWJsZSB3aXRoIGVtYWNzLWludGVybmFsICovCisgICAgLyog
aW5zdGVhZCBvZiBGc2V0X2J1ZmZlcl9tb2RpZmllZF9wLCBhdm9pZCBib3RoZXJpbmcgd2l0aAor
ICAgICAgIHRoZSBtb2RlLWxpbmUgKi8KKyAgICBGcmVzdG9yZV9idWZmZXJfbW9kaWZpZWRfcCAo
UW5pbCk7CisgICAgdW5iaW5kX3RvIChjb3VudDEsCisJICAgICAgIEZldmFsX2J1ZmZlciAoYnVm
ZmVyLCBRbmlsLCBzb3VyY2VuYW1lLCBRbmlsLCBRdCkpOworICB9CisgIGlmICghTklMUCAoRmZi
b3VuZHAgKFFkb19hZnRlcl9sb2FkX2V2YWx1YXRpb24pKSkKKyAgICBjYWxsbiAoUWRvX2FmdGVy
X2xvYWRfZXZhbHVhdGlvbiwgZmlsZSk7CisgIGlmIChOSUxQIChub21lc3NhZ2UpKQorICAgIG1l
c3NhZ2Vfd2l0aF9zdHJpbmcgKCJMb2FkaW5nICVzIChzb3VyY2UpLi4uZG9uZSIsIGZpbGUsIDEp
OworICByZXR1cm4gdW5iaW5kX3RvIChjb3VudCwgUXQpOworfQorCisKIERFRlVOICgibG9hZCIs
IEZsb2FkLCBTbG9hZCwgMSwgNSwgMCwKICAgICAgICBkb2M6IC8qIEV4ZWN1dGUgYSBmaWxlIG9m
IExpc3AgY29kZSBuYW1lZCBGSUxFLgogRmlyc3QgdHJ5IEZJTEUgd2l0aCBgLmVsYycgYXBwZW5k
ZWQsIHRoZW4gdHJ5IHdpdGggYC5lbCcsIHRoZW4gdHJ5CkBAIC0xMzY0LDcgKzI2NDUsNiBAQCBE
RUZVTiAoImxvYWQiLCBGbG9hZCwgU2xvYWQsIDEsIDUsIDAsCiAgIExpc3BfT2JqZWN0IGhhbmRs
ZXI7CiAgIGNvbnN0IGNoYXIgKmZtb2RlID0gInIiIEZPUEVOX1RFWFQ7CiAgIGludCB2ZXJzaW9u
OwotCiAgIENIRUNLX1NUUklORyAoZmlsZSk7CiAKICAgLyogSWYgZmlsZSBuYW1lIGlzIG1hZ2lj
LCBjYWxsIHRoZSBoYW5kbGVyLiAgKi8KQEAgLTE0MTUsMTEgKzI2OTUsMTEgQEAgREVGVU4gKCJs
b2FkIiwgRmxvYWQsIFNsb2FkLCAxLCA1LCAwLAogI2lmZGVmIEhBVkVfTU9EVUxFUwogCSAgICAg
IHx8IHN1ZmZpeF9wIChmaWxlLCBNT0RVTEVTX1NVRkZJWCkKICNpZmRlZiBNT0RVTEVTX1NFQ09O
REFSWV9TVUZGSVgKLSAgICAgICAgICAgICAgfHwgc3VmZml4X3AgKGZpbGUsIE1PRFVMRVNfU0VD
T05EQVJZX1NVRkZJWCkKKwkgICAgICB8fCBzdWZmaXhfcCAoZmlsZSwgTU9EVUxFU19TRUNPTkRB
UllfU1VGRklYKQogI2VuZGlmCiAjZW5kaWYKICNpZmRlZiBIQVZFX05BVElWRV9DT01QCi0gICAg
ICAgICAgICAgIHx8IHN1ZmZpeF9wIChmaWxlLCBOQVRJVkVfRUxJU1BfU1VGRklYKQorCSAgICAg
IHx8IHN1ZmZpeF9wIChmaWxlLCBOQVRJVkVfRUxJU1BfU1VGRklYKQogI2VuZGlmCiAJICAgICAg
KQogCSAgICBtdXN0X3N1ZmZpeCA9IFFuaWw7CkBAIC0xNDM4LDE2ICsyNzE4LDEyIEBAIERFRlVO
ICgibG9hZCIsIEZsb2FkLCBTbG9hZCwgMSwgNSwgMCwKIAkgICAgc3VmZml4ZXMgPSBDQUxMTiAo
RmFwcGVuZCwgc3VmZml4ZXMsIFZsb2FkX2ZpbGVfcmVwX3N1ZmZpeGVzKTsKIAl9CiAKLSAgICAg
IExpc3BfT2JqZWN0IGxvYWRfcGF0aCA9IFZsb2FkX3BhdGg7Ci0gICAgICBpZiAoRlVOQ1RJT05Q
IChWbG9hZF9wYXRoX2ZpbHRlcl9mdW5jdGlvbikpCi0JbG9hZF9wYXRoID0gY2FsbG4gKFZsb2Fk
X3BhdGhfZmlsdGVyX2Z1bmN0aW9uLCBsb2FkX3BhdGgsIGZpbGUsIHN1ZmZpeGVzKTsKLQogI2lm
ICFkZWZpbmVkIFVTRV9BTkRST0lEX0FTU0VUUwotICAgICAgZmQgPSBvcGVucCAobG9hZF9wYXRo
LCBmaWxlLCBzdWZmaXhlcywgJmZvdW5kLCBRbmlsLAorICAgICAgZmQgPSBvcGVucCAoVmxvYWRf
cGF0aCwgZmlsZSwgc3VmZml4ZXMsICZmb3VuZCwgUW5pbCwKIAkJICBsb2FkX3ByZWZlcl9uZXdl
ciwgbm9fbmF0aXZlLCBOVUxMKTsKICNlbHNlCiAgICAgICBhc3NldCA9IE5VTEw7Ci0gICAgICBy
YyA9IG9wZW5wIChsb2FkX3BhdGgsIGZpbGUsIHN1ZmZpeGVzLCAmZm91bmQsIFFuaWwsCisgICAg
ICByYyA9IG9wZW5wIChWbG9hZF9wYXRoLCBmaWxlLCBzdWZmaXhlcywgJmZvdW5kLCBRbmlsLAog
CQkgIGxvYWRfcHJlZmVyX25ld2VyLCBub19uYXRpdmUsICZhc3NldCk7CiAgICAgICBmZC5mZCA9
IHJjOwogICAgICAgZmQuYXNzZXQgPSBhc3NldDsKQEAgLTE0OTcsNiArMjc3MywxNyBAQCBERUZV
TiAoImxvYWQiLCBGbG9hZCwgU2xvYWQsIDEsIDUsIDAsCiAJZmQgPSAtMjsKICNlbmRpZgogICAg
IH0KKyAgLyogVGhpcyBkdW1teSBmcmFtZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQgYmVmb3JlIGFu
eSByZWZlcmVuY2UKKyAgICAgdG8gYSBudWxsIGN1cnJlbnRfZnJhbWUgbWF5IG9jY3VyLCBhbmQg
YmVmb3JlIGFueQorICAgICBuZXcgZW50cmllcyBhcmUgcHVzaGVkIG9uIHRoZSBTUEVDUERMLCBi
dXQgYWZ0ZXIKKyAgICAgd2Uga25vdyB0aGUgZmlsZSBleGlzdHMgYW5kIHRoYXQgd2UgYXJlIGhh
bmRsaW5nIGl0ICovCisgIGxyZWFkX2ZyYW1lIGxvYWRfZnJhbWUgPSBJTklUX0xSRUFEX0ZSQU1F
ICgpOworICBsb2FkX2ZyYW1lLmxvb3BfZHluYW1pY19mcmFtZSA9IFNQRUNQRExfSU5ERVggKCk7
CisgIGluaXRfbHJlYWRfaW5wdXRfZnJvbV9zdHJlYW0gKCZsb2FkX2ZyYW1lLAorCQkJCVFuaWws
IFFuaWwsIFFuaWwsCisJCQkJZmFsc2UsIGZhbHNlLCBOVUxMLCBRbmlsKTsKKyAgYWN0aXZhdGVf
bHJlYWRfZnJhbWUgKCZsb2FkX2ZyYW1lLCBMUkVBRF9GUkFNRV9NVUxUSVBMRSk7CisgIGxyZWFk
X2luaXRfZHluYW1pY19mcmFtZSAoJmxvYWRfZnJhbWUpOwogCiAjaWYgIWRlZmluZWQgVVNFX0FO
RFJPSURfQVNTRVRTCiAgIGlmICgwIDw9IGZkKQpAQCAtMTUzNCwyMSArMjgyMSwyNiBAQCBERUZV
TiAoImxvYWQiLCBGbG9hZCwgU2xvYWQsIDEsIDUsIDAsCiAgIC8qIENoZWNrIGlmIHdlJ3JlIHN0
dWNrIGluIGEgcmVjdXJzaXZlIGxvYWQgY3ljbGUuCiAKICAgICAgMjAwMC0wOS0yMTogSXQncyBu
b3QgcG9zc2libGUgdG8ganVzdCBjaGVjayBmb3IgdGhlIGZpbGUgbG9hZGVkCi0gICAgIGJlaW5n
IGEgbWVtYmVyIG9mIFZsb2Fkc19pbl9wcm9ncmVzcy4gIFRoaXMgZmFpbHMgYmVjYXVzZSBvZiB0
aGUKKyAgICAgYmVpbmcgYSBtZW1iZXIgb2YgZnJhbWUtPmxvYWRzX2luX3Byb2dyZXNzLiAgVGhp
cyBmYWlscyBiZWNhdXNlIG9mIHRoZQogICAgICB3YXkgdGhlIGJ5dGUgY29tcGlsZXIgY3VycmVu
dGx5IHdvcmtzOyBgcHJvdmlkZSdzIGFyZSBub3QKICAgICAgZXZhbHVhdGVkLCBzZWUgZm9udC1s
b2NrLmVsL2ppdC1sb2NrLmVsIGFzIGFuIGV4YW1wbGUuICBUaGlzCiAgICAgIGxlYWRzIHRvIGEg
Y2VydGFpbiBhbW91bnQgb2YgYGBub3JtYWwnJyByZWN1cnNpb24uCiAKICAgICAgQWxzbywganVz
dCBsb2FkaW5nIGEgZmlsZSByZWN1cnNpdmVseSBpcyBub3QgYWx3YXlzIGFuIGVycm9yIGluCiAg
ICAgIHRoZSBnZW5lcmFsIGNhc2U7IHRoZSBzZWNvbmQgbG9hZCBtYXkgZG8gc29tZXRoaW5nIGRp
ZmZlcmVudC4gICovCisgIC8qIGR1bW15IGZyYW1lIHRoYXQgcmVhZCBmcm9tIC9kZXYvbnVsbCAq
LworICBlYXNzdW1lIChjdXJyZW50X2ZyYW1lICE9IE5VTEwpOwogICB7CiAgICAgaW50IGxvYWRf
Y291bnQgPSAwOwotICAgIExpc3BfT2JqZWN0IHRlbSA9IFZsb2Fkc19pbl9wcm9ncmVzczsKKyAg
ICBMaXNwX09iamVjdCB0ZW0gPSBjdXJyZW50X2ZyYW1lLT5sb2Fkc19pbl9wcm9ncmVzczsKICAg
ICBGT1JfRUFDSF9UQUlMX1NBRkUgKHRlbSkKICAgICAgIGlmICghTklMUCAoRmVxdWFsIChmb3Vu
ZCwgWENBUiAodGVtKSkpICYmICgrK2xvYWRfY291bnQgPiAzKSkKLQlzaWduYWxfZXJyb3IgKCJS
ZWN1cnNpdmUgbG9hZCIsIEZjb25zIChmb3VuZCwgVmxvYWRzX2luX3Byb2dyZXNzKSk7Ci0gICAg
cmVjb3JkX3Vud2luZF9wcm90ZWN0IChyZWNvcmRfbG9hZF91bndpbmQsIFZsb2Fkc19pbl9wcm9n
cmVzcyk7Ci0gICAgVmxvYWRzX2luX3Byb2dyZXNzID0gRmNvbnMgKGZvdW5kLCBWbG9hZHNfaW5f
cHJvZ3Jlc3MpOworCXNpZ25hbF9lcnJvciAoIlJlY3Vyc2l2ZSBsb2FkIiwKKwkJICAgICAgRmNv
bnMgKGZvdW5kLCBjdXJyZW50X2ZyYW1lLT5sb2Fkc19pbl9wcm9ncmVzcykpOworICAgIHJlY29y
ZF91bndpbmRfcHJvdGVjdCAocmVjb3JkX2xvYWRfdW53aW5kLAorCQkJICAgY3VycmVudF9mcmFt
ZS0+bG9hZHNfaW5fcHJvZ3Jlc3MpOworICAgIGN1cnJlbnRfZnJhbWUtPmxvYWRzX2luX3Byb2dy
ZXNzCisgICAgICA9IEZjb25zIChmb3VuZCwgY3VycmVudF9mcmFtZS0+bG9hZHNfaW5fcHJvZ3Jl
c3MpOwogICB9CiAKICAgLyogQWxsIGxvYWRzIGFyZSBieSBkZWZhdWx0IGR5bmFtaWMsIHVubGVz
cyB0aGUgZmlsZSBpdHNlbGYgc3BlY2lmaWVzCkBAIC0xNTYzLDkgKzI4NTUsOSBAQCBERUZVTiAo
ImxvYWQiLCBGbG9hZCwgU2xvYWQsIDEsIDUsIDAsCiAgICAgOiBmb3VuZDsKIAogICBoaXN0X2Zp
bGVfbmFtZSA9ICghIE5JTFAgKFZwdXJpZnlfZmxhZykKLSAgICAgICAgICAgICAgICAgICAgPyBj
b25jYXQyIChGZmlsZV9uYW1lX2RpcmVjdG9yeSAoZmlsZSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRmZpbGVfbmFtZV9ub25kaXJlY3RvcnkgKGZvdW5kX2VmZikpCi0gICAgICAg
ICAgICAgICAgICAgIDogZm91bmRfZWZmKTsKKwkJICAgID8gY29uY2F0MiAoRmZpbGVfbmFtZV9k
aXJlY3RvcnkgKGZpbGUpLAorCQkJICAgICAgIEZmaWxlX25hbWVfbm9uZGlyZWN0b3J5IChmb3Vu
ZF9lZmYpKQorCQkgICAgOiBmb3VuZF9lZmYpOwogCiAgIHZlcnNpb24gPSAtMTsKIApAQCAtMTU5
Nyw2MSArMjg4OSw2OSBAQCBERUZVTiAoImxvYWQiLCBGbG9hZCwgU2xvYWQsIDEsIDUsIDAsCiAJ
ICBlZm91bmQgPSBFTkNPREVfRklMRSAoZm91bmQpOwogCSAgZm1vZGUgPSAiciIgRk9QRU5fQklO
QVJZOwogCi0gICAgICAgICAgLyogb3BlbnAgYWxyZWFkeSBjaGVja2VkIGZvciBuZXduZXNzLCBu
byBwb2ludCBkb2luZyBpdCBhZ2Fpbi4KLSAgICAgICAgICAgICBGSVhNRSB3b3VsZCBiZSBuaWNl
IHRvIGdldCBhIG1lc3NhZ2Ugd2hlbiBvcGVucAotICAgICAgICAgICAgIGlnbm9yZXMgc3VmZml4
IG9yZGVyIGR1ZSB0byBsb2FkX3ByZWZlcl9uZXdlci4gICovCi0gICAgICAgICAgaWYgKCFsb2Fk
X3ByZWZlcl9uZXdlciAmJiBpc19lbGMpCi0gICAgICAgICAgICB7CisJICAvKiBvcGVucCBhbHJl
YWR5IGNoZWNrZWQgZm9yIG5ld25lc3MsIG5vIHBvaW50IGRvaW5nIGl0IGFnYWluLgorCSAgICAg
RklYTUUgd291bGQgYmUgbmljZSB0byBnZXQgYSBtZXNzYWdlIHdoZW4gb3BlbnAKKwkgICAgIGln
bm9yZXMgc3VmZml4IG9yZGVyIGR1ZSB0byBsb2FkX3ByZWZlcl9uZXdlci4gICovCisJICBpZiAo
IWxvYWRfcHJlZmVyX25ld2VyICYmIGlzX2VsYykKKwkgICAgewogCSAgICAgIHJlc3VsdCA9IGVt
YWNzX2ZzdGF0YXQgKEFUX0ZEQ1dELCBTU0RBVEEgKGVmb3VuZCksICZzMSwgMCk7Ci0gICAgICAg
ICAgICAgIGlmIChyZXN1bHQgPT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICBTU0VUIChlZm91bmQsIFNCWVRFUyAoZWZvdW5kKSAtIDEsIDApOworCSAgICAgIGlmIChy
ZXN1bHQgPT0gMCkKKwkJeworCQkgIFNTRVQgKGVmb3VuZCwgU0JZVEVTIChlZm91bmQpIC0gMSwg
MCk7CiAJCSAgcmVzdWx0ID0gZW1hY3NfZnN0YXRhdCAoQVRfRkRDV0QsIFNTREFUQSAoZWZvdW5k
KSwgJnMyLCAwKTsKLSAgICAgICAgICAgICAgICAgIFNTRVQgKGVmb3VuZCwgU0JZVEVTIChlZm91
bmQpIC0gMSwgJ2MnKTsKLSAgICAgICAgICAgICAgICB9CisJCSAgU1NFVCAoZWZvdW5kLCBTQllU
RVMgKGVmb3VuZCkgLSAxLCAnYycpOworCQl9CiAKLSAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9
PSAwCi0gICAgICAgICAgICAgICAgICAmJiB0aW1lc3BlY19jbXAgKGdldF9zdGF0X210aW1lICgm
czEpLCBnZXRfc3RhdF9tdGltZSAoJnMyKSkgPCAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgIC8qIE1ha2UgdGhlIHByb2dyZXNzIG1lc3NhZ2VzIG1lbnRpb24gdGhhdCBz
b3VyY2UgaXMgbmV3ZXIuICAqLwotICAgICAgICAgICAgICAgICAgbmV3ZXIgPSAxOworCSAgICAg
IGlmIChyZXN1bHQgPT0gMAorCQkgICYmIHRpbWVzcGVjX2NtcCAoZ2V0X3N0YXRfbXRpbWUgKCZz
MSksIGdldF9zdGF0X210aW1lICgmczIpKSA8IDApCisJCXsKKwkJICAvKiBNYWtlIHRoZSBwcm9n
cmVzcyBtZXNzYWdlcyBtZW50aW9uIHRoYXQgc291cmNlIGlzIG5ld2VyLiAgKi8KKwkJICBuZXdl
ciA9IDE7CiAKLSAgICAgICAgICAgICAgICAgIC8qIElmIHdlIHdvbid0IHByaW50IGFub3RoZXIg
bWVzc2FnZSwgbWVudGlvbiB0aGlzIGFueXdheS4gICovCi0gICAgICAgICAgICAgICAgICBpZiAo
IU5JTFAgKG5vbWVzc2FnZSkgJiYgIWZvcmNlX2xvYWRfbWVzc2FnZXMKKwkJICAvKiBJZiB3ZSB3
b24ndCBwcmludCBhbm90aGVyIG1lc3NhZ2UsIG1lbnRpb24gdGhpcyBhbnl3YXkuICAqLworCQkg
IGlmICghTklMUCAobm9tZXNzYWdlKSAmJiAhZm9yY2VfbG9hZF9tZXNzYWdlcwogCQkgICAgICAv
KiBXZSBkb24ndCB3YW50IHRoaXMgbWVzc2FnZSBkdXJpbmcKIAkJCSBib290c3RyYXBwaW5nIGZv
ciB0aGUgImNvbXBpbGUtZmlyc3QiIC5lbGMKIAkJCSBmaWxlcywgd2hpY2ggaGF2ZSBoYWQgdGhl
aXIgdGltZXN0YW1wcyBzZXQgdG8KIAkJCSB0aGUgZXBvY2guICBTZWUgYnVnICM1ODIyNC4gICov
CiAJCSAgICAgICYmIHRpbWVzcGVjX2NtcCAoZ2V0X3N0YXRfbXRpbWUgKCZzMSksIGVwb2NoX3Rp
bWVzcGVjKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIExp
c3BfT2JqZWN0IG1zZ19maWxlOwotICAgICAgICAgICAgICAgICAgICAgIG1zZ19maWxlID0gRnN1
YnN0cmluZyAoZm91bmQsIG1ha2VfZml4bnVtICgwKSwgbWFrZV9maXhudW0gKC0xKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgbWVzc2FnZV93aXRoX3N0cmluZyAoIlNvdXJjZSBmaWxlIGAlcycg
bmV3ZXIgdGhhbiBieXRlLWNvbXBpbGVkIGZpbGU7IHVzaW5nIG9sZGVyIGZpbGUiLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ19maWxlLCAxKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gLyogIWxv
YWRfcHJlZmVyX25ld2VyICovCisJCSAgICB7CisJCSAgICAgIExpc3BfT2JqZWN0IG1zZ19maWxl
OworCQkgICAgICBtc2dfZmlsZSA9IEZzdWJzdHJpbmcgKGZvdW5kLCBtYWtlX2ZpeG51bSAoMCks
IG1ha2VfZml4bnVtICgtMSkpOworCQkgICAgICBtZXNzYWdlX3dpdGhfc3RyaW5nICgiU291cmNl
IGZpbGUgYCVzJyBuZXdlciB0aGFuIGJ5dGUtY29tcGlsZWQgZmlsZTsgdXNpbmcgb2xkZXIgZmls
ZSIsCisJCQkJCSAgIG1zZ19maWxlLCAxKTsKKwkJICAgIH0KKwkJfQorCSAgICB9IC8qICFsb2Fk
X3ByZWZlcl9uZXdlciAqLwogCX0KICAgICB9CiAgIGVsc2UgaWYgKCFpc19tb2R1bGUgJiYgIWlz
X25hdGl2ZV9lbGlzcCkKICAgICB7CiAgICAgICAvKiBXZSBhcmUgbG9hZGluZyBhIHNvdXJjZSBm
aWxlICgqLmVsKS4gICovCi0gICAgICBpZiAoIU5JTFAgKFZsb2FkX3NvdXJjZV9maWxlX2Z1bmN0
aW9uKSkKLQl7Ci0JICBMaXNwX09iamVjdCB2YWw7CisgICAgICBMaXNwX09iamVjdCB2YWw7CiAK
LQkgIGlmIChscmVhZF9mZF9wKQotCSAgICB7Ci0JICAgICAgbHJlYWRfY2xvc2UgKGZkKTsKLQkg
ICAgICBjbGVhcl91bndpbmRfcHJvdGVjdCAoZmRfaW5kZXgpOwotCSAgICB9Ci0JICB2YWwgPSBj
YWxsbiAoVmxvYWRfc291cmNlX2ZpbGVfZnVuY3Rpb24sIGZvdW5kLCBoaXN0X2ZpbGVfbmFtZSwK
LQkJICAgICAgIE5JTFAgKG5vZXJyb3IpID8gUW5pbCA6IFF0LAotCQkgICAgICAgKE5JTFAgKG5v
bWVzc2FnZSkgfHwgZm9yY2VfbG9hZF9tZXNzYWdlcykgPyBRbmlsIDogUXQpOwotCSAgcmV0dXJu
IHVuYmluZF90byAoY291bnQsIHZhbCk7CisgICAgICBpZiAobHJlYWRfZmRfcCkKKwl7CisJICBs
cmVhZF9jbG9zZSAoZmQpOworCSAgY2xlYXJfdW53aW5kX3Byb3RlY3QgKGZkX2luZGV4KTsKIAl9
CisgICAgICBub21lc3NhZ2UgPSAoTklMUCAobm9tZXNzYWdlKSB8fCBmb3JjZV9sb2FkX21lc3Nh
Z2VzKSA/IFFuaWwgOiBRdDsKKyAgICAgIGlmICghTklMUCAoVmxvYWRfc291cmNlX2ZpbGVfZnVu
Y3Rpb24pKQorCXZhbCA9IGNhbGxuIChWbG9hZF9zb3VyY2VfZmlsZV9mdW5jdGlvbiwgZm91bmQs
IGhpc3RfZmlsZV9uYW1lLAorCQkgICAgIE5JTFAgKG5vZXJyb3IpID8gUW5pbCA6IFF0LAorCQkg
ICAgIG5vbWVzc2FnZSk7CisgICAgICBlbHNlCisgICAgICAvKiBQZXJmb3JtIGJhc2ljIGVtYWNz
LWludGVybmFsIG9ubHkgYnVmZmVyIGV2YWx1YXRpb24KKwkgQW55b25lIGxvYWRpbmcgbGlzcCBz
b3VyY2UgZmlsZXMgaW4gYW4gaW5jb21wYXRpYmxlCisJIGNvZGluZyBpcyByZXNwb25zaWJsZSBm
b3IgbG9hZGluZyBtdWxlLmVsIGJlZm9yZWhhbmQuICovCisJdmFsID0gbG9hZF9zb3VyY2VfZmls
ZSAoZm91bmQsIGhpc3RfZmlsZV9uYW1lLAorCQkJCU5JTFAgKG5vZXJyb3IpID8gUW5pbCA6IFF0
LAorCQkJCW5vbWVzc2FnZSk7CisgICAgICByZXR1cm4gdW5iaW5kX3RvIChsb2FkX2ZyYW1lLmxv
b3BfZHluYW1pY19mcmFtZSwgdmFsKTsKKwogICAgIH0KIAorICBib29sIHNlZWthYmxlID0gdHJ1
ZTsKICAgaWYgKCFscmVhZF9mZF9wKQogICAgIHsKICAgICAgIC8qIFdlIHNvbWVob3cgZ290IGhl
cmUgd2l0aCBmZCA9PSAtMiwgbWVhbmluZyB0aGUgZmlsZSBpcyBkZWVtZWQKQEAgLTE2NjgsNiAr
Mjk2OCwxMiBAQCBERUZVTiAoImxvYWQiLCBGbG9hZCwgU2xvYWQsIDEsIDUsIDAsCiAgICAgICBl
Zm91bmQgPSBFTkNPREVfRklMRSAoZm91bmQpOwogICAgICAgc3RyZWFtID0gZW1hY3NfZm9wZW4g
KFNTREFUQSAoZWZvdW5kKSwgZm1vZGUpOwogI2Vsc2UKKyAgICAgIHN0cnVjdCBzdGF0IHN0Owor
ICAgICAgaWYgKGxyZWFkX2ZzdGF0IChmZCwgJnN0KSAhPSAwKQorCXJlcG9ydF9maWxlX2Vycm9y
ICgiTG9hZCBmaWxlIHN0YXR1cyBmYWlsdXJlIiwgZmlsZSk7CisgICAgICAvKiBBdCBsZWFzdCBm
b3IgcmVndWxhciBmaWxlcywgZW5zdXJlIHJlc3VtaW5nIGEgcmVhZAorCSBvcGVyYXRpb24gd2ls
bCBzdGFydCB3aGVyZSBpdCBsZWZ0IG9mZi4gKi8KKyAgICAgIHNlZWthYmxlID0gU19JU1JFRyAo
c3Quc3RfbW9kZSk7CiAjaWYgIWRlZmluZWQgVVNFX0FORFJPSURfQVNTRVRTCiAgICAgICBzdHJl
YW0gPSBlbWFjc19mZG9wZW4gKGZkLCBmbW9kZSk7CiAjZWxzZQpAQCAtMTY3OSwzMSArMjk4NSw0
MCBAQCBERUZVTiAoImxvYWQiLCBGbG9hZCwgU2xvYWQsIDEsIDUsIDAsCiAjZW5kaWYKICNlbmRp
ZgogICAgIH0KLQotICAvKiBEZWNsYXJlIGhlcmUgcmF0aGVyIHRoYW4gaW5zaWRlIHRoZSBlbHNl
LXBhcnQgYmVjYXVzZSB0aGUgc3RvcmFnZQotICAgICBtaWdodCBiZSBhY2Nlc3NlZCBieSB0aGUg
dW5iaW5kX3RvIGNhbGwgYmVsb3cuICAqLwotICBzdHJ1Y3QgaW5maWxlIGlucHV0OwotCisgIC8q
IHdlIG1heSBvciBtYXkgbm90IG5lZWQgdGhpcyAqLworICBscmVhZF9mcmFtZSB0aGlzX2ZyYW1l
ID0gSU5JVF9MUkVBRF9GUkFNRSAoKTsKKyAgTGlzcF9PYmplY3QgY29kaW5nID0gUW5vX2NvbnZl
cnNpb247CisgIHRoaXNfZnJhbWUubG9vcF9keW5hbWljX2ZyYW1lID0gU1BFQ1BETF9JTkRFWCgp
OwogICBpZiAoaXNfbW9kdWxlIHx8IGlzX25hdGl2ZV9lbGlzcCkKICAgICB7CiAgICAgICAvKiBg
bW9kdWxlLWxvYWQnIHVzZXMgdGhlIGZpbGUgbmFtZSwgc28gd2UgY2FuIGNsb3NlIHRoZSBzdHJl
YW0KLSAgICAgICAgIG5vdy4gICovCisJIG5vdy4gICovCiAgICAgICBpZiAobHJlYWRfZmRfcCkK
LSAgICAgICAgewotICAgICAgICAgIGxyZWFkX2Nsb3NlIChmZCk7Ci0gICAgICAgICAgY2xlYXJf
dW53aW5kX3Byb3RlY3QgKGZkX2luZGV4KTsKLSAgICAgICAgfQorCXsKKwkgIGxyZWFkX2Nsb3Nl
IChmZCk7CisJICBjbGVhcl91bndpbmRfcHJvdGVjdCAoZmRfaW5kZXgpOworCX0KKyAgICAgIHRo
aXNfZnJhbWUuaW50eXBlID0gTFJFQURfSU5QVVRfQklOQVJZOwogICAgIH0KICAgZWxzZQogICAg
IHsKICAgICAgIGlmICghZmlsZV9zdHJlYW1fdmFsaWRfcCAoc3RyZWFtKSkKLSAgICAgICAgcmVw
b3J0X2ZpbGVfZXJyb3IgKCJPcGVuaW5nIHN0ZGlvIHN0cmVhbSIsIGZpbGUpOwotICAgICAgc2V0
X3Vud2luZF9wcm90ZWN0X3B0ciAoZmRfaW5kZXgsIGNsb3NlX2luZmlsZV91bndpbmQsIGluZmls
ZSk7Ci0gICAgICBpbnB1dC5zdHJlYW0gPSBzdHJlYW07Ci0gICAgICBpbnB1dC5sb29rYWhlYWQg
PSAwOwotICAgICAgaW5maWxlID0gJmlucHV0OwotICAgICAgdW5yZWFkX2NoYXIgPSAtMTsKKwly
ZXBvcnRfZmlsZV9lcnJvciAoIk9wZW5pbmcgc3RkaW8gc3RyZWFtIiwgZmlsZSk7CisKKyAgICAg
IEFVVE9fTElTVDMgKHN0cmVhbV9hcmcsIFFnZXRfZmlsZV9jaGFyLCBmaWxlLCBoaXN0X2ZpbGVf
bmFtZSk7CisgICAgICBpZiAodmVyc2lvbiAmJiB2ZXJzaW9uIDwgMjIpCisJeworCSAgWFNFVENB
UiAoc3RyZWFtX2FyZywgUWdldF9lbWFjc19tdWxlX2ZpbGVfY2hhcik7CisJICBjb2RpbmcgPSBR
ZW1hY3NfbXVsZTsKKwkgIHNwZWNiaW5kIChRbG9hZF9mb3JjZV9kb2Nfc3RyaW5ncywgUXQpOwor
CX0KKworICAgICAgaW5pdF9scmVhZF9pbnB1dF9mcm9tX3N0cmVhbSAoJnRoaXNfZnJhbWUsIHN0
cmVhbV9hcmcsCisJCQkJICAgIFFuaWwsIFFuaWwsCisJCQkJICAgIGZhbHNlLCBzZWVrYWJsZSwK
KwkJCQkgICAgc3RyZWFtLCBjb2RpbmcpOwogICAgIH0KKyAgaW5pdF9scmVhZF9ldmFsX3BhcmFt
cygmdGhpc19mcmFtZSwgZm91bmQsIGhpc3RfZmlsZV9uYW1lLCBRbmlsLCBmYWxzZSk7CiAKICAg
aWYgKCEgTklMUCAoVnB1cmlmeV9mbGFnKSkKICAgICBWcHJlbG9hZGVkX2ZpbGVfbGlzdCA9IEZj
b25zIChmaWxlLCBWcHJlbG9hZGVkX2ZpbGVfbGlzdCk7CkBAIC0xNzExLDkgKzMwMjYsOSBAQCBE
RUZVTiAoImxvYWQiLCBGbG9hZCwgU2xvYWQsIDEsIDUsIDAsCiAgIGlmIChOSUxQIChub21lc3Nh
Z2UpIHx8IGZvcmNlX2xvYWRfbWVzc2FnZXMpCiAgICAgewogICAgICAgaWYgKGlzX21vZHVsZSkK
LSAgICAgICAgbWVzc2FnZV93aXRoX3N0cmluZyAoIkxvYWRpbmcgJXMgKG1vZHVsZSkuLi4iLCBm
aWxlLCAxKTsKKwltZXNzYWdlX3dpdGhfc3RyaW5nICgiTG9hZGluZyAlcyAobW9kdWxlKS4uLiIs
IGZpbGUsIDEpOwogICAgICAgZWxzZSBpZiAoaXNfbmF0aXZlX2VsaXNwKQotICAgICAgICBtZXNz
YWdlX3dpdGhfc3RyaW5nICgiTG9hZGluZyAlcyAobmF0aXZlLWNvbXBpbGVkIGVsaXNwKS4uLiIs
IGZpbGUsIDEpOworCW1lc3NhZ2Vfd2l0aF9zdHJpbmcgKCJMb2FkaW5nICVzIChuYXRpdmUtY29t
cGlsZWQgZWxpc3ApLi4uIiwgZmlsZSwgMSk7CiAgICAgICBlbHNlIGlmICghY29tcGlsZWQpCiAJ
bWVzc2FnZV93aXRoX3N0cmluZyAoIkxvYWRpbmcgJXMgKHNvdXJjZSkuLi4iLCBmaWxlLCAxKTsK
ICAgICAgIGVsc2UgaWYgKG5ld2VyKQpAQCAtMTczMyw3ICszMDQ4LDcgQEAgREVGVU4gKCJsb2Fk
IiwgRmxvYWQsIFNsb2FkLCAxLCA1LCAwLAogI2lmZGVmIEhBVkVfTU9EVUxFUwogICAgICAgbG9h
ZGhpc3RfaW5pdGlhbGl6ZSAoZm91bmQpOwogICAgICAgRm1vZHVsZV9sb2FkIChmb3VuZCk7Ci0g
ICAgICBidWlsZF9sb2FkX2hpc3RvcnkgKGZvdW5kLCB0cnVlKTsKKyAgICAgIGJ1aWxkX2xvYWRf
aGlzdG9yeSAoJnRoaXNfZnJhbWUsZm91bmQsIHRydWUpOwogI2Vsc2UKICAgICAgIC8qIFRoaXMg
Y2Fubm90IGhhcHBlbi4gICovCiAgICAgICBlbWFjc19hYm9ydCAoKTsKQEAgLTE3NDQsNyArMzA1
OSw3IEBAIERFRlVOICgibG9hZCIsIEZsb2FkLCBTbG9hZCwgMSwgNSwgMCwKICNpZmRlZiBIQVZF
X05BVElWRV9DT01QCiAgICAgICBsb2FkaGlzdF9pbml0aWFsaXplIChoaXN0X2ZpbGVfbmFtZSk7
CiAgICAgICBGbmF0aXZlX2VsaXNwX2xvYWQgKGZvdW5kLCBRbmlsKTsKLSAgICAgIGJ1aWxkX2xv
YWRfaGlzdG9yeSAoaGlzdF9maWxlX25hbWUsIHRydWUpOworICAgICAgYnVpbGRfbG9hZF9oaXN0
b3J5ICgmdGhpc19mcmFtZSxoaXN0X2ZpbGVfbmFtZSwgdHJ1ZSk7CiAjZWxzZQogICAgICAgLyog
VGhpcyBjYW5ub3QgaGFwcGVuLiAgKi8KICAgICAgIGVtYWNzX2Fib3J0ICgpOwpAQCAtMTc1Mywy
MCArMzA2OCwxNiBAQCBERUZVTiAoImxvYWQiLCBGbG9hZCwgU2xvYWQsIDEsIDUsIDAsCiAgICAg
fQogICBlbHNlCiAgICAgewotICAgICAgRnNldCAoUWxleGljYWxfYmluZGluZywKLQkgICAgZ2V0
X2xleGljYWxfYmluZGluZyAoUWdldF9maWxlX2NoYXIsIGNvbXBpbGVkID8gUW5pbCA6IGZpbGUp
KTsKLQotICAgICAgaWYgKCEgdmVyc2lvbiB8fCB2ZXJzaW9uID49IDIyKQotICAgICAgICByZWFk
ZXZhbGxvb3AgKFFnZXRfZmlsZV9jaGFyLCAmaW5wdXQsIGhpc3RfZmlsZV9uYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgIDAsIFFuaWwsIFFuaWwsIFFuaWwsIFFuaWwpOwotICAgICAgZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgLyogV2UgY2FuJ3QgaGFuZGxlIGEgZmlsZSB3aGljaCB3YXMg
Y29tcGlsZWQgd2l0aAotICAgICAgICAgICAgIGJ5dGUtY29tcGlsZS1keW5hbWljIGJ5IG9sZGVy
IHZlcnNpb24gb2YgRW1hY3MuICAqLwotICAgICAgICAgIHNwZWNiaW5kIChRbG9hZF9mb3JjZV9k
b2Nfc3RyaW5ncywgUXQpOwotICAgICAgICAgIHJlYWRldmFsbG9vcCAoUWdldF9lbWFjc19tdWxl
X2ZpbGVfY2hhciwgJmlucHV0LCBoaXN0X2ZpbGVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIFFuaWwsIFFuaWwsIFFuaWwsIFFuaWwpOwotICAgICAgICB9CisgICAgICAvKiBVc2Ug
aW50ZXJuYWwgZnVuY3Rpb24gdG8gZXZhbHVhdGUgc291cmNlIGZpbGVzCisJIGZyb20gYnVmZmVy
cywgc28gYWx3YXlzIGNvbXBpbGVkIGFuZCBsZXhpY2FsLWJpbmRpbmcgPSB0Ki8KKyAgICAgIGVh
c3NlcnQgKGNvbXBpbGVkID09IDEpOworCisgICAgICBhY3RpdmF0ZV9scmVhZF9mcmFtZSAoJnRo
aXNfZnJhbWUsIExSRUFEX0ZSQU1FX01VTFRJUExFKTsKKyAgICAgIHNldF91bndpbmRfcHJvdGVj
dF9wdHIgKGZkX2luZGV4LCBjbG9zZV9pbmZpbGVfdW53aW5kLCAmdGhpc19mcmFtZSk7CisgICAg
ICBpbnRlcm5hbF9jb25kaXRpb25fY2FzZV8xIChyZWFkZXZhbGxvb3BfZW9mX3RyYW1wb2xpbmUs
CisJCQkJIG1ha2VfbWludF9wdHIoJnRoaXNfZnJhbWUpLAorCQkJCSBsaXN0MSAoUWVycm9yX2R1
cmluZ19pbnRlcnJ1cHQpLAorCQkJCSBiYXNlX2ludGVycnVwdF9lcnJvcl9oYW5kbGVyKTsKICAg
ICB9CiAgIHVuYmluZF90byAoY291bnQsIFFuaWwpOwogCkBAIC0xNzc0LDExICszMDg1LDExIEBA
IERFRlVOICgibG9hZCIsIEZsb2FkLCBTbG9hZCwgMSwgNSwgMCwKICAgaWYgKCFOSUxQIChGZmJv
dW5kcCAoUWRvX2FmdGVyX2xvYWRfZXZhbHVhdGlvbikpKQogICAgIGNhbGxuIChRZG9fYWZ0ZXJf
bG9hZF9ldmFsdWF0aW9uLCBoaXN0X2ZpbGVfbmFtZSk7CiAKLSAgZm9yIChpbnQgaSA9IDA7IGkg
PCBBUlJBWUVMVFMgKHNhdmVkX3N0cmluZ3MpOyBpKyspCisgIGZvciAoaW50IGkgPSAwOyBpIDwg
QVJSQVlFTFRTICh0aGlzX2ZyYW1lLnNhdmVkX3N0cmluZ3MpOyBpKyspCiAgICAgewotICAgICAg
eGZyZWUgKHNhdmVkX3N0cmluZ3NbaV0uc3RyaW5nKTsKLSAgICAgIHNhdmVkX3N0cmluZ3NbaV0u
c3RyaW5nID0gTlVMTDsKLSAgICAgIHNhdmVkX3N0cmluZ3NbaV0uc2l6ZSA9IDA7CisgICAgICB4
ZnJlZSAodGhpc19mcmFtZS5zYXZlZF9zdHJpbmdzW2ldLnN0cmluZyk7CisgICAgICB0aGlzX2Zy
YW1lLnNhdmVkX3N0cmluZ3NbaV0uc3RyaW5nID0gTlVMTDsKKyAgICAgIHRoaXNfZnJhbWUuc2F2
ZWRfc3RyaW5nc1tpXS5zaXplID0gMDsKICAgICB9CiAKICAgLyogVGhlICIuLi5kb25lIiBtZXNz
YWdlcyBhcmUgc2hvd24gb25seSBpbiBpbnRlcmFjdGl2ZSBtb2RlLCBiZWNhdXNlCkBAIC0xNzg3
LDcgKzMwOTgsNyBAQCBERUZVTiAoImxvYWQiLCBGbG9hZCwgU2xvYWQsIDEsIDUsIDAsCiAgIGlm
ICghbm9uaW50ZXJhY3RpdmUgJiYgKE5JTFAgKG5vbWVzc2FnZSkgfHwgZm9yY2VfbG9hZF9tZXNz
YWdlcykpCiAgICAgewogICAgICAgaWYgKGlzX21vZHVsZSkKLSAgICAgICAgbWVzc2FnZV93aXRo
X3N0cmluZyAoIkxvYWRpbmcgJXMgKG1vZHVsZSkuLi5kb25lIiwgZmlsZSwgMSk7CisJbWVzc2Fn
ZV93aXRoX3N0cmluZyAoIkxvYWRpbmcgJXMgKG1vZHVsZSkuLi5kb25lIiwgZmlsZSwgMSk7CiAg
ICAgICBlbHNlIGlmIChpc19uYXRpdmVfZWxpc3ApCiAJbWVzc2FnZV93aXRoX3N0cmluZyAoIkxv
YWRpbmcgJXMgKG5hdGl2ZS1jb21waWxlZCBlbGlzcCkuLi5kb25lIiwgZmlsZSwgMSk7CiAgICAg
ICBlbHNlIGlmICghY29tcGlsZWQpCkBAIC0yMTY1LDE0ICszNDc2LDE0IEBAIG9wZW5wIChMaXNw
X09iamVjdCBwYXRoLCBMaXNwX09iamVjdCBzdHIsIExpc3BfT2JqZWN0IHN1ZmZpeGVzLAogCSAg
ICAgIH0KIAkgICAgZWxzZQogCSAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiAgSW4gc29tZSBz
eXN0ZW1zIChsaWtlIFdpbmRvd3MpIGZpbmRpbmcgb3V0IGlmIGEKLSAgICAgICAgICAgICAgICAg
ICAgZmlsZSBleGlzdHMgaXMgY2hlYXBlciB0byBkbyB0aGFuIGFjdHVhbGx5IG9wZW5pbmcKLSAg
ICAgICAgICAgICAgICAgICAgaXQuICBPbmx5IG9wZW4gdGhlIGZpbGUgd2hlbiB3ZSBhcmUgc3Vy
ZSB0aGF0IGl0Ci0gICAgICAgICAgICAgICAgICAgIGV4aXN0cy4gICovCisJCS8qICBJbiBzb21l
IHN5c3RlbXMgKGxpa2UgV2luZG93cykgZmluZGluZyBvdXQgaWYgYQorCQkgICAgZmlsZSBleGlz
dHMgaXMgY2hlYXBlciB0byBkbyB0aGFuIGFjdHVhbGx5IG9wZW5pbmcKKwkJICAgIGl0LiAgT25s
eSBvcGVuIHRoZSBmaWxlIHdoZW4gd2UgYXJlIHN1cmUgdGhhdCBpdAorCQkgICAgZXhpc3RzLiAg
Ki8KICNpZmRlZiBXSU5ET1dTTlQKLSAgICAgICAgICAgICAgICBpZiAoc3lzX2ZhY2Nlc3NhdCAo
QVRfRkRDV0QsIHBmbiwgUl9PSywgQVRfRUFDQ0VTUykpCi0gICAgICAgICAgICAgICAgICBmZCA9
IC0xOwotICAgICAgICAgICAgICAgIGVsc2UKKwkJaWYgKHN5c19mYWNjZXNzYXQgKEFUX0ZEQ1dE
LCBwZm4sIFJfT0ssIEFUX0VBQ0NFU1MpKQorCQkgIGZkID0gLTE7CisJCWVsc2UKICNlbmRpZgog
CQkgIHsKICNpZiAhZGVmaW5lZCBVU0VfQU5EUk9JRF9BU1NFVFMKQEAgLTIyODgsNyArMzU5OSw3
IEBAIG9wZW5wIChMaXNwX09iamVjdCBwYXRoLCBMaXNwX09iamVjdCBzdHIsIExpc3BfT2JqZWN0
IHN1ZmZpeGVzLAogICAgcGFydCBvZiBpdC4gICovCiAKIHN0YXRpYyB2b2lkCi1idWlsZF9sb2Fk
X2hpc3RvcnkgKExpc3BfT2JqZWN0IGZpbGVuYW1lLCBib29sIGVudGlyZSkKK2J1aWxkX2xvYWRf
aGlzdG9yeSAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLCBMaXNwX09iamVjdCBmaWxlbmFt
ZSwgYm9vbCBlbnRpcmUpCiB7CiAgIExpc3BfT2JqZWN0IHRhaWwsIHByZXYsIG5ld2VsdDsKICAg
TGlzcF9PYmplY3QgdGVtLCB0ZW0yOwpAQCAtMjMyNiwxNCArMzYzNywxNCBAQCBidWlsZF9sb2Fk
X2hpc3RvcnkgKExpc3BfT2JqZWN0IGZpbGVuYW1lLCBib29sIGVudGlyZSkKIAogCQkgIGlmIChO
SUxQIChGbWVtYmVyIChuZXdlbHQsIHRlbSkpKQogCQkgICAgRnNldGNhciAodGFpbCwgRmNvbnMg
KFhDQVIgKHRlbSksCi0JCSAgICAgCQkJICBGY29ucyAobmV3ZWx0LCBYQ0RSICh0ZW0pKSkpOwot
CQkgIG1heWJlX3F1aXQgKCk7CisJCQkJCSAgRmNvbnMgKG5ld2VsdCwgWENEUiAodGVtKSkpKTsK
KwkJICBscmVhZF9tYXliZV9xdWl0IChmcmFtZSk7CiAJCX0KIAkgICAgfQogCX0KICAgICAgIGVs
c2UKIAlwcmV2ID0gdGFpbDsKLSAgICAgIG1heWJlX3F1aXQgKCk7CisgICAgICBscmVhZF9tYXli
ZV9xdWl0IChmcmFtZSk7CiAgICAgfQogCiAgIC8qIElmIHdlJ3JlIGxvYWRpbmcgYW4gZW50aXJl
IGZpbGUsIGNvbnMgdGhlIG5ldyBhc3NvYyBvbnRvIHRoZQpAQCAtMjM0NSwyMyArMzY1NiwzMyBA
QCBidWlsZF9sb2FkX2hpc3RvcnkgKExpc3BfT2JqZWN0IGZpbGVuYW1lLCBib29sIGVudGlyZSkK
ICAgICAgIGVhc3NlcnQgKCFOSUxQIChGZXF1YWwgKGZpbGVuYW1lLCBGY2FyICh0ZW0pKSkpOwog
ICAgICAgVmxvYWRfaGlzdG9yeSA9IEZjb25zICh0ZW0sIFZsb2FkX2hpc3RvcnkpOwogICAgICAg
LyogRklYTUU6IFRoZXJlIHNob3VsZCBiZSBhbiB1bmJpbmRfdG8gcmlnaHQgYWZ0ZXIgY2FsbGlu
ZyB1cyB3aGljaAotICAgICAgICAgc2hvdWxkIHJlLWVzdGFibGlzaCB0aGUgcHJldmlvdXMgdmFs
dWUgb2YgVmN1cnJlbnRfbG9hZF9saXN0LiAgKi8KKwkgc2hvdWxkIHJlLWVzdGFibGlzaCB0aGUg
cHJldmlvdXMgdmFsdWUgb2YgVmN1cnJlbnRfbG9hZF9saXN0LiAgKi8KICAgICAgIFZjdXJyZW50
X2xvYWRfbGlzdCA9IFF0OwogICAgIH0KIH0KLQotc3RhdGljIHZvaWQKLXJlYWRldmFsbG9vcF8x
IChpbnQgb2xkKQorTGlzcF9PYmplY3QKK3JlYWRldmFsbG9vcF9lb2ZfdHJhbXBvbGluZSAoTGlz
cF9PYmplY3QgZnJhbWVwdHIpCiB7Ci0gIGxvYWRfY29udmVydF90b191bmlieXRlID0gb2xkOwor
ICBscmVhZF9mcmFtZSAqZnJhbWUgPSB4bWludF9wb2ludGVyIChmcmFtZXB0cik7CisgIGVhc3Nl
cnQgKCFVTklOSVRfU1BFQ1BETF9SRUYoZnJhbWUtPmxvb3BfZHluYW1pY19mcmFtZSkpOworICBM
aXNwX09iamVjdCB2YWwgPQorICAgIGludGVybmFsX2NvbmRpdGlvbl9jYXNlXzEgKHJlYWRldmFs
bG9vcCwKKwkJCSAgICAgICBmcmFtZXB0ciwKKwkJCSAgICAgICBsaXN0MSAoUWVuZF9vZl9maWxl
KSwKKwkJCSAgICAgICByZWFkZXZhbGxvb3BfZW9mX2hhbmRsZXIpOworICBidWlsZF9sb2FkX2hp
c3RvcnkgKGZyYW1lLCBmcmFtZS0+c291cmNlbmFtZSwKKwkJICAgICAgRlJPTV9GSUxFX1AgKGZy
YW1lLT5pbnR5cGUpIHx8IGZyYW1lLT53aG9sZV9idWZmZXIpOworICByZXR1cm4gdW5iaW5kX3Rv
IChmcmFtZS0+bG9vcF9keW5hbWljX2ZyYW1lLCB2YWwpOwogfQogCisKIC8qIFNpZ25hbCBhbiBg
ZW5kLW9mLWZpbGUnIGVycm9yLCBpZiBwb3NzaWJsZSB3aXRoIGZpbGUgbmFtZQogICAgaW5mb3Jt
YXRpb24uICAqLwogCiBzdGF0aWMgQVZPSUQKLWVuZF9vZl9maWxlX2Vycm9yICh2b2lkKQorZW5k
X29mX2ZpbGVfZXJyb3IgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKIHsKKyAgZnJhbWUt
PnJlYWRfZW9mID0gdHJ1ZTsKICAgaWYgKFNUUklOR1AgKFZsb2FkX3RydWVfZmlsZV9uYW1lKSkK
ICAgICB4c2lnbmFsMSAoUWVuZF9vZl9maWxlLCBWbG9hZF90cnVlX2ZpbGVfbmFtZSk7CiAKQEAg
LTIzODksNjMgKzM3MTAsMjU2IEBAIHJlYWRldmFsbG9vcF9lYWdlcl9leHBhbmRfZXZhbCAoTGlz
cF9PYmplY3QgdmFsLCBMaXNwX09iamVjdCBtYWNyb2V4cGFuZCkKICAgcmV0dXJuIHZhbDsKIH0K
IAotLyogVU5JQllURSBzcGVjaWZpZXMgaG93IHRvIHNldCBsb2FkX2NvbnZlcnRfdG9fdW5pYnl0
ZQotICAgZm9yIHRoaXMgaW52b2NhdGlvbi4KLSAgIFJFQURGVU4sIGlmIG5vbi1uaWwsIGlzIHVz
ZWQgaW5zdGVhZCBvZiBgcmVhZCcuCitMaXNwX09iamVjdAorbHJlYWRfZ2V0X2J1ZmZlcl9vYmog
KHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyAgc3dpdGNoIChmcmFtZS0+aW50eXBl
KQorICAgIHsKKyAgICBjYXNlIExSRUFEX0lOUFVUX0JVRkZFUjoKKyAgICAgIHJldHVybiBmcmFt
ZS0+aW5wdXQuYi5idWZmZXI7CisgICAgICBicmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVUX01B
UktFUjoKKyAgICAgIHJldHVybiBmcmFtZS0+aW5wdXQubS5iLmJ1ZmZlcjsKKyAgICAgIGJyZWFr
OworICAgIGNhc2UgTFJFQURfSU5QVVRfSU5ESVJFQ1Q6CisgICAgICByZXR1cm4gbHJlYWRfZ2V0
X2J1ZmZlcl9vYmogKGZyYW1lLT5pbnB1dC5mcmFtZS5zb3VyY2UpOworICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAvKiBza2lwICovCisgICAgfQorICByZXR1cm4gUW5pbDsKK30KKwor
c3RydWN0IGJ1ZmZlciAqCitscmVhZF9nZXRfYnVmZmVyIChyZWdpc3RlciBscmVhZF9mcmFtZSAq
ZnJhbWUpCit7CisgIHN3aXRjaCAoZnJhbWUtPmludHlwZSkKKyAgICB7CisgICAgY2FzZSBMUkVB
RF9JTlBVVF9CVUZGRVI6CisgICAgICByZXR1cm4gWEJVRkZFUihmcmFtZS0+aW5wdXQuYi5idWZm
ZXIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9NQVJLRVI6CisgICAgICBy
ZXR1cm4gWEJVRkZFUiAoZnJhbWUtPmlucHV0Lm0uYi5idWZmZXIpOworICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBMUkVBRF9JTlBVVF9JTkRJUkVDVDoKKyAgICAgIHJldHVybiBscmVhZF9nZXRfYnVm
ZmVyIChmcmFtZS0+aW5wdXQuZnJhbWUuc291cmNlKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgLyogc2tpcCAqLworICAgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBM
aXNwX09iamVjdAorYnVmZmVyX3BvaW50X21hcmtlciAoTGlzcF9PYmplY3QgYnVmZmVyKQorewor
ICBzdHJ1Y3QgYnVmZmVyICpidWYgPSBYQlVGRkVSIChidWZmZXIpOworICBpZiAoYnVmID09IGN1
cnJlbnRfYnVmZmVyKQorICAgIHJldHVybiBGcG9pbnRfbWFya2VyKCk7CisgIGlmIChOSUxQIChC
VkFSIChidWYsIHB0X21hcmtlcikpKQorICAgIHsKKyAgICAgIExpc3BfT2JqZWN0IHRtcCA9IEZt
YWtlX21hcmtlcigpOworICAgICAgcmV0dXJuIEZzZXRfbWFya2VyICh0bXAsIG1ha2VfZml4bnVt
IChidWYtPnB0KSwgYnVmZmVyKTsKKyAgICB9CisgIC8qIGVsc2UgKi8KKyAgcmV0dXJuIEZjb3B5
X21hcmtlciAoQlZBUiAoYnVmLCBwdF9tYXJrZXIpLCBRbmlsKTsKK30KKworLyogRG9uJ3QgYWx0
ZXIgdGhlIGJ1ZmZlciwganVzdCBjb25zdHJ1Y3QgbWFya2VycyBmb3IKKyAgIGZyYW1lLT5zdGFy
dCBhbmQgZnJhbWUtPmVuZCBkaXJlY3RseSAqLworYm9vbAorc2V0dXBfYnVmZmVyX2Zvcl9yZWFk
ZXZhbGxvb3AgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwKKwkJCSAgICAgICBMaXNwX09i
amVjdCBzdGFydCwgTGlzcF9PYmplY3QgZW5kKQoreworICBzcGVjcGRsX3JlZiBjb3VudCA9IFNQ
RUNQRExfSU5ERVggKCk7CisgIExpc3BfT2JqZWN0IGJ1ZmZlciA9IGxyZWFkX2dldF9idWZmZXJf
b2JqIChmcmFtZSk7CisgIHN0cnVjdCBidWZmZXIgKmJ1ZiA9IE5JTFAgKGJ1ZmZlcikgPyBOVUxM
IDogWEJVRkZFUiAoYnVmZmVyKTsKKyAgaWYgKE5JTFAgKGVuZCkpCisgICAgeworICAgICAgTGlz
cF9PYmplY3QgdG1wID0gRm1ha2VfbWFya2VyKCk7CisgICAgICBmcmFtZS0+ZW5kID0gRnNldF9t
YXJrZXIgKHRtcCwgbWFrZV9maXhudW0gKEJVRl9aIChidWYpKSxidWZmZXIpOworICAgIH0KKyAg
ZWxzZSBpZiAoRklYTlVNUCAoZW5kKSkKKyAgICB7CisgICAgICBMaXNwX09iamVjdCB0bXAgPSBG
bWFrZV9tYXJrZXIoKTsKKyAgICAgIGZyYW1lLT5lbmQgPSBGc2V0X21hcmtlciAodG1wLCBlbmQs
YnVmZmVyKTsKKyAgICB9CisgIGVsc2UgaWYgKCFNQVJLRVJQIChlbmQpKQorICAgIHhzaWduYWwx
IChRZXJyb3IsIENBTExOIChGZm9ybWF0LAorCQkJICAgICBidWlsZF9zdHJpbmcgKCJyZWFkOiBl
bmQgYXJndW1lbnQgbXVzdCBiZSBuaWwsICIKKwkJCSAgICAgICAibnVtYmVyLCBvciBtYXJrZXI6
ICVTIiksCisJCQkgICAgIGVuZCkpOworICBlbHNlCisgICAgeworICAgICAgaWYgKFhNQVJLRVIg
KGVuZCktPmJ1ZmZlciA9PSBidWYpCisJZnJhbWUtPmVuZCA9IGVuZDsKKyAgICAgIGVsc2UKKwl7
CisJICBMaXNwX09iamVjdCB0bXAgPSBGbWFrZV9tYXJrZXIgKCk7CisJICBmcmFtZS0+ZW5kID0g
RnNldF9tYXJrZXIgKHRtcCwKKwkJCQkgICAgbWFrZV9maXhudW0gKFhNQVJLRVIoZW5kKS0+Y2hh
cnBvcyksCisJCQkJICAgIGJ1ZmZlcik7CisJfQorICAgIH0KKyAgaWYgKE5JTFAgKHN0YXJ0KSkK
KyAgICB7CisgICAgICBmcmFtZS0+c3RhcnQgPSBidWZmZXJfcG9pbnRfbWFya2VyIChidWZmZXIp
OworICAgIH0KKyAgZWxzZSBpZiAoRklYTlVNUCAoc3RhcnQpKQorICAgIHsKKyAgICAgIExpc3Bf
T2JqZWN0IHRtcCA9IEZtYWtlX21hcmtlcigpOworICAgICAgZnJhbWUtPnN0YXJ0ID0gRnNldF9t
YXJrZXIgKHRtcCwgc3RhcnQsIGJ1ZmZlcik7CisgICAgfQorICBlbHNlIGlmICghTUFSS0VSUCAo
c3RhcnQpKQorICAgIHhzaWduYWwxIChRZXJyb3IsIENBTExOIChGZm9ybWF0LAorCQkJICAgICBi
dWlsZF9zdHJpbmcgKCJyZWFkOiBzdGFydCBhcmd1bWVudCBtdXN0IGJlIG5pbCwgIgorCQkJICAg
ICAgICJudW1iZXIsIG9yIG1hcmtlcjogJVMiKSwKKwkJCSAgICAgc3RhcnQpKTsKKyAgZWxzZQor
ICAgIHsKKyAgICAgIC8qIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGUgbWFya2VyIGlzIGZyb20g
dGhlIGJ1ZmZlciAqLworICAgICAgaWYgKFhNQVJLRVIgKHN0YXJ0KS0+YnVmZmVyID09IGJ1ZikK
KwlmcmFtZS0+c3RhcnQgPSBzdGFydDsKKyAgICAgIGVsc2UKKwl7CisJICBMaXNwX09iamVjdCB0
bXAgPSBGbWFrZV9tYXJrZXIgKCk7CisJICBmcmFtZS0+c3RhcnQKKwkgICAgPSBGc2V0X21hcmtl
ciAodG1wLAorCQkJICAgbWFrZV9maXhudW0gKFhNQVJLRVIoc3RhcnQpLT5jaGFycG9zKSwKKwkJ
CSAgIGJ1ZmZlcik7CisJfQorICAgIH0KKyAgLyogaXMgcmVzdHJpY3Rpb24gdGhlIHdob2xlIGJ1
ZmZlcj8gKi8KKyAgYm9vbCBydiA9ICgoWE1BUktFUiAoZnJhbWUtPnN0YXJ0KS0+Y2hhcnBvcyA9
PSBCVUZfQkVHIChidWYpKQorCSAgICAgJiYgKFhNQVJLRVIgKGZyYW1lLT5lbmQpLT5jaGFycG9z
ID09IEJVRl9aIChidWYpKSk7CisgIHVuYmluZF90byAoY291bnQsUW5pbCk7CisgIHJldHVybiBy
djsKK30KKworLyogVGhpcyBwcm9jZWR1cmUgcGVyZm9ybXMgMiBmdW5jdGlvbnM6CisgICBBcnJh
bmdlIGZvciBsaXNwLXZpc2libGUgc3RhdGUgb2YgYnVmZmVyIGF0IGVudHJ5IHRvIHJlYWQgZnVu
Y3Rpb24gdG8gYmUKKyAgICAgICByZWluc3RhdGVkIHdoZW4gdGhlIGR5bmFtaWMgZnJhbWUgYXNz
b2NpYXRlZCB3aXRoIHRoZSByZWFkL3JlYWRldmFsbG9vcAorICAgICAgIGlzIHVud291bmQuCisg
ICBTZXQgYnVmZmVyIHN0YXRlIGZvciB1c2UgYnkgcmVhZC4KKyAgIEZvciByZWN1cnNpdmVseS1y
ZWVudHJhbnQgcmVhZC9ldmFsLCB0aGlzIGhhcyB0byBiZSBjYWxsZWQgYXQgYW55IChyZSllbnRy
eQorICAgdG8gcmVhZCwgYW5kIHVud291bmQgdG8gcGVyZm9ybSBhbnkgaW50ZXJ2ZW5pbmcgZXZh
bCBhcyB3ZWxsIGFzIGFmdGVyCisgICByZWFkMCBoYXMgY29tcGxldGVkLgorICovCit2b2lkCitw
cmVwYXJlX2J1ZmZlcl9mb3JfaW50ZXJydXB0aWJsZV9yZWFkIChyZWdpc3RlciBscmVhZF9mcmFt
ZSAqZnJhbWUpCit7CisgIC8qIExpc3BfT2JqZWN0IGJ1ZmZlciA9IGxyZWFkX2dldF9idWZmZXJf
b2JqKGZyYW1lKTsgKi8KKyAgc3RydWN0IGJ1ZmZlciAqYnVmID0gbHJlYWRfZ2V0X2J1ZmZlcihm
cmFtZSk7CisgIGlmIChidWYgIT0gMCAmJiAhQlVGRkVSX0xJVkVfUCAoYnVmKSkKKyAgICBlcnJv
ciAoIlJlYWRpbmcgZnJvbSBraWxsZWQgYnVmZmVyIik7CisgIC8qIFN3aXRjaCB0byB0aGUgYnVm
ZmVyIHdlIGFyZSByZWFkaW5nIGZyb20uICAqLworICByZWNvcmRfdW53aW5kX3Byb3RlY3RfZXhj
dXJzaW9uICgpOworICBzZXRfYnVmZmVyX2ludGVybmFsIChidWYpOworCisgIC8qIFNhdmUgcG9p
bnQgaW4gaXQuICAqLworICByZWNvcmRfdW53aW5kX3Byb3RlY3RfZXhjdXJzaW9uICgpOworICAv
KiBTYXZlIFpWIGluIGl0LiAgKi8KKyAgcmVjb3JkX3Vud2luZF9wcm90ZWN0IChzYXZlX3Jlc3Ry
aWN0aW9uX3Jlc3RvcmUsIHNhdmVfcmVzdHJpY3Rpb25fc2F2ZSAoKSk7CisgIGxhYmVsZWRfcmVz
dHJpY3Rpb25zX3JlbW92ZV9pbl9jdXJyZW50X2J1ZmZlciAoKTsKKyAgLyogVGhvc2UgZ2V0IHVu
Ym91bmQgYWZ0ZXIgd2UgcmVhZCBvbmUgZXhwcmVzc2lvbi4gICovCisKKyAgLyogU2V0IHBvaW50
IGFuZCBaViBhcm91bmQgc3R1ZmYgdG8gYmUgcmVhZC4gICovCisgIEZnb3RvX2NoYXIgKGZyYW1l
LT5zdGFydCk7CisgIEZuYXJyb3dfdG9fcmVnaW9uIChtYWtlX2ZpeG51bSAoQkVHViksIGZyYW1l
LT5lbmQpOworfQorCisvKiBSRUFERlVOLCBpZiBub24tbmlsLCBpcyB1c2VkIGluc3RlYWQgb2Yg
YHJlYWQnLgogCiAgICBTVEFSVCwgRU5EIHNwZWNpZnkgcmVnaW9uIHRvIHJlYWQgaW4gY3VycmVu
dCBidWZmZXIgKGZyb20gZXZhbC1yZWdpb24pLgogICAgSWYgdGhlIGlucHV0IGlzIG5vdCBmcm9t
IGEgYnVmZmVyLCB0aGV5IG11c3QgYmUgbmlsLiAgKi8KIAotc3RhdGljIHZvaWQKLXJlYWRldmFs
bG9vcCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sCi0JICAgICAgc3RydWN0IGluZmlsZSAqaW5m
aWxlMCwKLQkgICAgICBMaXNwX09iamVjdCBzb3VyY2VuYW1lLAotCSAgICAgIGJvb2wgcHJpbnRm
bGFnLAotCSAgICAgIExpc3BfT2JqZWN0IHVuaWJ5dGUsIExpc3BfT2JqZWN0IHJlYWRmdW4sCi0J
ICAgICAgTGlzcF9PYmplY3Qgc3RhcnQsIExpc3BfT2JqZWN0IGVuZCkKK3N0YXRpYyBMaXNwX09i
amVjdAorbm9uc3RhbmRhcmRfcmVhZCAoTGlzcF9PYmplY3QgZnJhbWVwdHIpCit7CisgIHJlZ2lz
dGVyIGxyZWFkX2ZyYW1lICpmcmFtZSA9IHhtaW50X3BvaW50ZXIgKGZyYW1lcHRyKTsKKyAgTGlz
cF9PYmplY3QgdmFsOworICBpZiAoIU5JTFAgKGZyYW1lLT5yZWFkZnVuKSkKKyAgICB7CisgICAg
ICB2YWwgPSBjYWxsbiAoZnJhbWUtPnJlYWRmdW4sIFFyZWFkZXJfaW5wdXRfc3RyZWFtKTsKKwor
ICAgICAgLyogSWYgUkVBRENIQVJGVU4gaGFzIHNldCBwb2ludCB0byBaViwgd2Ugc2hvdWxkCisJ
IHN0b3AgcmVhZGluZywgZXZlbiBpZiB0aGUgZm9ybSByZWFkIHNldHMgcG9pbnQKKwkgdG8gYSBk
aWZmZXJlbnQgdmFsdWUgd2hlbiBldmFsdWF0ZWQuICAqLworICAgICAgaWYgKEZST01fQlVGRkVS
X1AgKGZyYW1lLT5pbnR5cGUpKQorCXsKKwkgIHN0cnVjdCBidWZmZXIgKmJ1ZiA9IGxyZWFkX2dl
dF9idWZmZXIgKGZyYW1lKTsKKwkgIGlmIChCVUZfUFQgKGJ1ZikgPT0gQlVGX1pWIChidWYpKQor
CSAgICBmcmFtZS0+cmVhZF9lb2YgPSB0cnVlOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7Cisg
ICAgICAvKiAhIE5JTFAgKFZsb2FkX3JlYWRfZnVuY3Rpb24pCisJIHx8ICFFUSAoVmxvYWRfcmVh
ZF9mdW5jdGlvbiwgUXJlYWQpICovCisgICAgICB2YWwgPSBjYWxsbiAoVmxvYWRfcmVhZF9mdW5j
dGlvbiwgUXJlYWRlcl9pbnB1dF9zdHJlYW0pOworICAgIH0KKyAgcmV0dXJuIHZhbDsKK30KKwor
SU5MSU5FIHZvaWQKK2xyZWFkX3NraXBfd2hpdGVzcGFjZSAocmVnaXN0ZXIgbHJlYWRfZnJhbWUg
KmZyYW1lKQogewogICBpbnQgYzsKKyAgLyogdGhpcyBpcyBvbmx5IGNvcnJlY3QgaWYgd2Uga25v
dyByZWFkMCBpcyBnb2luZworICAgICB0byBiZSByZWFkaW5nIGV4cHJlc3Npb25zIGZyb20gc291
cmNlLiAgT3RoZXIKKyAgICAgcmVhZGVycyBtaWdodCBkbyBzb21ldGhpbmcgd2l0aCBjb21tZW50
cyBhbmQKKyAgICAgd2hpdGVzcGFjZS4gKi8KKyAgLyogb25seSBiZW5lZml0IGlzIHRvIGF2b2lk
IGNvbmRpdGlvbi1jYXNlIGZvcgorICAgICBjYXRjaGluZyBlbmQtb2YtZmlsZSA/ICovCisgcmVh
ZF9uZXh0OgorICBjID0gUkVBRENIQVIgKGZyYW1lKTsKKyAgaWYgKGMgPT0gJzsnKQorICAgIHsK
KyAgICAgIHdoaWxlICgoYyA9IFJFQURDSEFSIChmcmFtZSkpICE9ICdcbicgJiYgYyAhPSAtMSk7
CisgICAgICBnb3RvIHJlYWRfbmV4dDsKKyAgICB9CisgIGlmIChjIDwgMCkKKyAgICB7CisgICAg
ICBmcmFtZS0+cmVhZF9lb2YgPSB0cnVlOworICAgIH0KKworICAvKiBJZ25vcmUgd2hpdGVzcGFj
ZSBoZXJlLCBzbyB3ZSBjYW4gZGV0ZWN0IGVvZi4gICovCisgIGlmIChjID09ICcgJyB8fCBjID09
ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xmJyB8fCBjID09ICdccicKKyAgICAgIHx8IGMg
PT0gTk9fQlJFQUtfU1BBQ0UpCisgICAgZ290byByZWFkX25leHQ7CisgIFVOUkVBRCAoZnJhbWUs
IGMpOworfQorCitzdGF0aWMgTGlzcF9PYmplY3QKK3JlYWRldmFsbG9vcCAoTGlzcF9PYmplY3Qg
ZnJhbWVwdHIpCit7CisgIHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSA9IHhtaW50X3BvaW50
ZXIgKGZyYW1lcHRyKTsKICAgTGlzcF9PYmplY3QgdmFsOwotICBzcGVjcGRsX3JlZiBjb3VudCA9
IFNQRUNQRExfSU5ERVggKCk7Ci0gIHN0cnVjdCBidWZmZXIgKmIgPSAwOwotICBib29sIGNvbnRp
bnVlX3JlYWRpbmdfcDsKKyAgc3RydWN0IGJ1ZmZlciAqYiA9IGxyZWFkX2dldF9idWZmZXIgKGZy
YW1lKTsKICAgTGlzcF9PYmplY3QgbGV4X2JvdW5kOwogICAvKiBUcnVlIGlmIHJlYWRpbmcgYW4g
ZW50aXJlIGJ1ZmZlci4gICovCi0gIGJvb2wgd2hvbGVfYnVmZmVyID0gMDsKLSAgLyogVHJ1ZSBv
biB0aGUgZmlyc3QgdGltZSBhcm91bmQuICAqLwotICBib29sIGZpcnN0X3NleHAgPSAxOwogICBM
aXNwX09iamVjdCBtYWNyb2V4cGFuZDsKLQotICBpZiAoIU5JTFAgKHNvdXJjZW5hbWUpKQotICAg
IENIRUNLX1NUUklORyAoc291cmNlbmFtZSk7CisgIGJvb2wgY29tcGlsZWQgPSAoU1RSSU5HUCAo
ZnJhbWUtPnNvdXJjZW5hbWUpICYmIHN1ZmZpeF9wIChmcmFtZS0+c291cmNlbmFtZSwgIi5lbGMi
KSk7CisgIGJvb2wgaWdub3JlX3JlYWRmdW4gPSBOSUxQIChmcmFtZS0+cmVhZGZ1bik7CisgIGJv
b2wgdXNlX3JlYWQwID0gY29tcGlsZWQgfHwgd2lsbF9kdW1wX3AoKQorICAgIHx8IChpZ25vcmVf
cmVhZGZ1bgorCSYmIChOSUxQIChWbG9hZF9yZWFkX2Z1bmN0aW9uKQorCSAgICB8fCBFUSAoVmxv
YWRfcmVhZF9mdW5jdGlvbiwgUXJlYWQpKSk7CisgIExpc3BfT2JqZWN0IHByZXZfVmxvYWRfcmVh
ZF9mdW5jdGlvbiA9IFZsb2FkX3JlYWRfZnVuY3Rpb247CiAKICAgbWFjcm9leHBhbmQgPSBRaW50
ZXJuYWxfbWFjcm9leHBhbmRfZm9yX2xvYWQ7CiAKLSAgaWYgKE5JTFAgKEZmYm91bmRwIChtYWNy
b2V4cGFuZCkpCi0gICAgICB8fCAoU1RSSU5HUCAoc291cmNlbmFtZSkgJiYgc3VmZml4X3AgKHNv
dXJjZW5hbWUsICIuZWxjIikpKQorICBpZiAoTklMUCAoRmZib3VuZHAgKG1hY3JvZXhwYW5kKSkg
fHwgY29tcGlsZWQpCiAgICAgLyogRG9uJ3QgbWFjcm9leHBhbmQgYmVmb3JlIHRoZSBjb3JyZXNw
b25kaW5nIGZ1bmN0aW9uIGlzIGRlZmluZWQKICAgICAgICBhbmQgZG9uJ3QgYm90aGVyIG1hY3Jv
ZXhwYW5kaW5nIGluIC5lbGMgZmlsZXMsIHNpbmNlIGl0IHNob3VsZCBoYXZlCiAgICAgICAgYmVl
biBkb25lIGFscmVhZHkuICAqLwogICAgIG1hY3JvZXhwYW5kID0gUW5pbDsKIAotICBpZiAoTUFS
S0VSUCAocmVhZGNoYXJmdW4pKQotICAgIHsKLSAgICAgIGlmIChOSUxQIChzdGFydCkpCi0Jc3Rh
cnQgPSByZWFkY2hhcmZ1bjsKLSAgICB9Ci0KLSAgaWYgKEJVRkZFUlAgKHJlYWRjaGFyZnVuKSkK
LSAgICBiID0gWEJVRkZFUiAocmVhZGNoYXJmdW4pOwotICBlbHNlIGlmIChNQVJLRVJQIChyZWFk
Y2hhcmZ1bikpCi0gICAgYiA9IFhNQVJLRVIgKHJlYWRjaGFyZnVuKS0+YnVmZmVyOwotCiAgIC8q
IFdlIGFzc3VtZSBTVEFSVCBpcyBuaWwgd2hlbiBpbnB1dCBpcyBub3QgZnJvbSBhIGJ1ZmZlci4g
ICovCi0gIGlmICghIE5JTFAgKHN0YXJ0KSAmJiAhYikKKyAgaWYgKCEgTklMUCAoZnJhbWUtPnN0
YXJ0KSAmJiAhYikKICAgICBlbWFjc19hYm9ydCAoKTsKIAotICBzcGVjYmluZCAoUXN0YW5kYXJk
X2lucHV0LCByZWFkY2hhcmZ1bik7Ci0gIHJlY29yZF91bndpbmRfcHJvdGVjdF9pbnQgKHJlYWRl
dmFsbG9vcF8xLCBsb2FkX2NvbnZlcnRfdG9fdW5pYnl0ZSk7Ci0gIGxvYWRfY29udmVydF90b191
bmlieXRlID0gIU5JTFAgKHVuaWJ5dGUpOworICBzcGVjYmluZCAoUXN0YW5kYXJkX2lucHV0LCBR
cmVhZGVyX2lucHV0X3N0cmVhbSk7CiAKICAgLyogSWYgbGV4aWNhbCBiaW5kaW5nIGlzIGFjdGl2
ZSAoZWl0aGVyIGJlY2F1c2UgaXQgd2FzIHNwZWNpZmllZCBpbgogICAgICB0aGUgZmlsZSdzIGhl
YWRlciwgb3IgdmlhIGEgYnVmZmVyLWxvY2FsIHZhcmlhYmxlKSwgY3JlYXRlIGFuIGVtcHR5CkBA
IC0yNDU2LDEzNyArMzk3MCwxOTEgQEAgcmVhZGV2YWxsb29wIChMaXNwX09iamVjdCByZWFkY2hh
cmZ1biwKIAkgICAgID8gUW5pbCA6IGxpc3QxIChRdCkpKTsKICAgc3BlY2JpbmQgKFFtYWNyb2V4
cF9fZHludmFycywgVm1hY3JvZXhwX19keW52YXJzKTsKIAotICAvKiBFbnN1cmUgc291cmNlbmFt
ZSBpcyBhYnNvbHV0ZSwgZXhjZXB0IHdoaWxzdCBwcmVsb2FkaW5nLiAgKi8KLSAgaWYgKCF3aWxs
X2R1bXBfcCAoKQotICAgICAgJiYgIU5JTFAgKHNvdXJjZW5hbWUpICYmICFOSUxQIChGZmlsZV9u
YW1lX2Fic29sdXRlX3AgKHNvdXJjZW5hbWUpKSkKLSAgICBzb3VyY2VuYW1lID0gRmV4cGFuZF9m
aWxlX25hbWUgKHNvdXJjZW5hbWUsIFFuaWwpOworICBsb2FkaGlzdF9pbml0aWFsaXplIChmcmFt
ZS0+c291cmNlbmFtZSk7CisgIGlmIChiICE9IE5VTEwpCisgICAgZnJhbWUtPndob2xlX2J1ZmZl
ciA9CisgICAgICBzZXR1cF9idWZmZXJfZm9yX3JlYWRldmFsbG9vcCAoZnJhbWUsIGZyYW1lLT5z
dGFydCwgZnJhbWUtPmVuZCkKKyAgICAgIHx8IGZyYW1lLT53aG9sZV9idWZmZXI7CiAKLSAgbG9h
ZGhpc3RfaW5pdGlhbGl6ZSAoc291cmNlbmFtZSk7CisgIGxyZWFkX2luaXRfZHluYW1pY19mcmFt
ZSAoZnJhbWUpOwogCi0gIGNvbnRpbnVlX3JlYWRpbmdfcCA9IDE7Ci0gIHdoaWxlIChjb250aW51
ZV9yZWFkaW5nX3ApCisgIHdoaWxlICghZnJhbWUtPnJlYWRfZW9mKQogICAgIHsKLSAgICAgIHNw
ZWNwZGxfcmVmIGNvdW50MSA9IFNQRUNQRExfSU5ERVggKCk7Ci0KLSAgICAgIGlmIChiICE9IDAg
JiYgIUJVRkZFUl9MSVZFX1AgKGIpKQotCWVycm9yICgiUmVhZGluZyBmcm9tIGtpbGxlZCBidWZm
ZXIiKTsKKyAgICAgIGZyYW1lLT5vYmplY3RzX21hcCA9IEZjbHJoYXNoIChmcmFtZS0+b2JqZWN0
c19tYXApOworICAgICAgZnJhbWUtPm9iamVjdHNfY29tcGxldGVkID0gRmNscmhhc2ggKGZyYW1l
LT5vYmplY3RzX2NvbXBsZXRlZCk7CiAKLSAgICAgIGlmICghTklMUCAoc3RhcnQpKQotCXsKLQkg
IC8qIFN3aXRjaCB0byB0aGUgYnVmZmVyIHdlIGFyZSByZWFkaW5nIGZyb20uICAqLwotCSAgcmVj
b3JkX3Vud2luZF9wcm90ZWN0X2V4Y3Vyc2lvbiAoKTsKLQkgIHNldF9idWZmZXJfaW50ZXJuYWwg
KGIpOwotCi0JICAvKiBTYXZlIHBvaW50IGluIGl0LiAgKi8KLQkgIHJlY29yZF91bndpbmRfcHJv
dGVjdF9leGN1cnNpb24gKCk7Ci0JICAvKiBTYXZlIFpWIGluIGl0LiAgKi8KLQkgIHJlY29yZF91
bndpbmRfcHJvdGVjdCAoc2F2ZV9yZXN0cmljdGlvbl9yZXN0b3JlLCBzYXZlX3Jlc3RyaWN0aW9u
X3NhdmUgKCkpOwotCSAgbGFiZWxlZF9yZXN0cmljdGlvbnNfcmVtb3ZlX2luX2N1cnJlbnRfYnVm
ZmVyICgpOwotCSAgLyogVGhvc2UgZ2V0IHVuYm91bmQgYWZ0ZXIgd2UgcmVhZCBvbmUgZXhwcmVz
c2lvbi4gICovCi0KLQkgIC8qIFNldCBwb2ludCBhbmQgWlYgYXJvdW5kIHN0dWZmIHRvIGJlIHJl
YWQuICAqLwotCSAgRmdvdG9fY2hhciAoc3RhcnQpOwotCSAgaWYgKCFOSUxQIChlbmQpKQotCSAg
ICBGbmFycm93X3RvX3JlZ2lvbiAobWFrZV9maXhudW0gKEJFR1YpLCBlbmQpOwotCi0JICAvKiBK
dXN0IGZvciBjbGVhbmxpbmVzcywgY29udmVydCBFTkQgdG8gYSBtYXJrZXIKLQkgICAgIGlmIGl0
IGlzIGFuIGludGVnZXIuICAqLwotCSAgaWYgKEZJWE5VTVAgKGVuZCkpCi0JICAgIGVuZCA9IEZw
b2ludF9tYXhfbWFya2VyICgpOwotCX0KKyAgICAgIGlmIChiKQorCXByZXBhcmVfYnVmZmVyX2Zv
cl9pbnRlcnJ1cHRpYmxlX3JlYWQgKGZyYW1lKTsKIAotICAgICAgLyogT24gdGhlIGZpcnN0IGN5
Y2xlLCB3ZSBjYW4gZWFzaWx5IHRlc3QgaGVyZQotCSB3aGV0aGVyIHdlIGFyZSByZWFkaW5nIHRo
ZSB3aG9sZSBidWZmZXIuICAqLwotICAgICAgaWYgKGIgJiYgZmlyc3Rfc2V4cCkKLQl3aG9sZV9i
dWZmZXIgPSAoQlVGX1BUIChiKSA9PSBCVUZfQkVHIChiKSAmJiBCVUZfWlYgKGIpID09IEJVRl9a
IChiKSk7Ci0KLSAgICAgIGVhc3NlcnQgKCFpbmZpbGUwIHx8IGluZmlsZSA9PSBpbmZpbGUwKTsK
LSAgICByZWFkX25leHQ6Ci0gICAgICBjID0gUkVBRENIQVI7Ci0gICAgICBpZiAoYyA9PSAnOycp
CisgICAgICAvKiBIYW5kbGUgdGhlIG1vc3QgY29tbW9uIGNhc2UgZmlyc3QgKi8KKyAgICAgIC8q
IG5vdCBzdXJlIHdoeSB0aGUgVnB1cmlmeV9mbGFnL3dpbGxfZHVtcF9wIGNhc2UgaXMgc3BlY2lh
bCAqLworICAgICAgaWYgKHVzZV9yZWFkMCkKIAl7Ci0JICB3aGlsZSAoKGMgPSBSRUFEQ0hBUikg
IT0gJ1xuJyAmJiBjICE9IC0xKTsKLQkgIGdvdG8gcmVhZF9uZXh0OwotCX0KLSAgICAgIGlmIChj
IDwgMCkKLQl7Ci0JICB1bmJpbmRfdG8gKGNvdW50MSwgUW5pbCk7Ci0JICBicmVhazsKKwkvKiBh
dm9pZCBjb25kaXRpb24gY2FzZSAqLworCSAgbHJlYWRfc2tpcF93aGl0ZXNwYWNlIChmcmFtZSk7
CisJICBpZiAoZnJhbWUtPnJlYWRfZW9mKQorCSAgICB7CisJICAgICAgbHJlYWRfdW53aW5kX2Zv
cl9ldmFsIChmcmFtZSk7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIHZhbCA9IHJlYWQwIChm
cmFtZSk7CisJICBmcmFtZS0+bmV4cHJzKys7CiAJfQotCi0gICAgICAvKiBJZ25vcmUgd2hpdGVz
cGFjZSBoZXJlLCBzbyB3ZSBjYW4gZGV0ZWN0IGVvZi4gICovCi0gICAgICBpZiAoYyA9PSAnICcg
fHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcZicgfHwgYyA9PSAnXHInCi0JICB8
fCBjID09IE5PX0JSRUFLX1NQQUNFKQotCWdvdG8gcmVhZF9uZXh0OwotICAgICAgVU5SRUFEIChj
KTsKLQotICAgICAgaWYgKCEgSEFTSF9UQUJMRV9QIChyZWFkX29iamVjdHNfbWFwKQotCSAgfHwg
WEhBU0hfVEFCTEUgKHJlYWRfb2JqZWN0c19tYXApLT5jb3VudCkKLQlyZWFkX29iamVjdHNfbWFw
Ci0JICA9IG1ha2VfaGFzaF90YWJsZSAoJmhhc2h0ZXN0X2VxLCBERUZBVUxUX0hBU0hfU0laRSwg
V2Vha19Ob25lKTsKLSAgICAgIGlmICghIEhBU0hfVEFCTEVfUCAocmVhZF9vYmplY3RzX2NvbXBs
ZXRlZCkKLQkgIHx8IFhIQVNIX1RBQkxFIChyZWFkX29iamVjdHNfY29tcGxldGVkKS0+Y291bnQp
Ci0JcmVhZF9vYmplY3RzX2NvbXBsZXRlZAotCSAgPSBtYWtlX2hhc2hfdGFibGUgKCZoYXNodGVz
dF9lcSwgREVGQVVMVF9IQVNIX1NJWkUsIFdlYWtfTm9uZSk7Ci0gICAgICBpZiAoIU5JTFAgKFZw
dXJpZnlfZmxhZykgJiYgYyA9PSAnKCcpCi0JdmFsID0gcmVhZDAgKHJlYWRjaGFyZnVuLCBmYWxz
ZSk7CiAgICAgICBlbHNlCiAJewotCSAgaWYgKCFOSUxQIChyZWFkZnVuKSkKKwkgIC8qIHJlYWQg
c3RvcHMgYnkgc2lnbmFsaW5nIGVuZC1vZi1maWxlCisJICAgICBNdXN0IG5vdCByZXR1cm4gYSB2
YWx1ZSBhbmQgc2V0IHJlYWRfZW9mIQorCSAgICovCisJICB2YWwgPSBpbnRlcm5hbF9jb25kaXRp
b25fY2FzZV8xIChub25zdGFuZGFyZF9yZWFkLAorCQkJCQkgICBtYWtlX21pbnRfcHRyIChmcmFt
ZSksCisJCQkJCSAgIGxpc3QxIChRZW5kX29mX2ZpbGUpLAorCQkJCQkgICBscmVhZF9zZXRfcmVh
ZF9lb2YpOworCSAgaWYgKGZyYW1lLT5yZWFkX2VvZikKIAkgICAgewotCSAgICAgIHZhbCA9IGNh
bGxuIChyZWFkZnVuLCByZWFkY2hhcmZ1bik7Ci0KLQkgICAgICAvKiBJZiBSRUFEQ0hBUkZVTiBo
YXMgc2V0IHBvaW50IHRvIFpWLCB3ZSBzaG91bGQKLQkgICAgICAgICBzdG9wIHJlYWRpbmcsIGV2
ZW4gaWYgdGhlIGZvcm0gcmVhZCBzZXRzIHBvaW50Ci0JCSB0byBhIGRpZmZlcmVudCB2YWx1ZSB3
aGVuIGV2YWx1YXRlZC4gICovCi0JICAgICAgaWYgKEJVRkZFUlAgKHJlYWRjaGFyZnVuKSkKLQkJ
ewotCQkgIHN0cnVjdCBidWZmZXIgKmJ1ZiA9IFhCVUZGRVIgKHJlYWRjaGFyZnVuKTsKLQkJICBp
ZiAoQlVGX1BUIChidWYpID09IEJVRl9aViAoYnVmKSkKLQkJICAgIGNvbnRpbnVlX3JlYWRpbmdf
cCA9IDA7Ci0JCX0KKwkgICAgICBlYXNzZXJ0ICghVU5JTklUX1NQRUNQRExfUkVGIChmcmFtZS0+
ZHluYW1pY19mcmFtZSkpOworCSAgICAgIGxyZWFkX3Vud2luZF9mb3JfZXZhbCAoZnJhbWUpOwor
CSAgICAgIGJyZWFrOwogCSAgICB9Ci0JICBlbHNlIGlmICghIE5JTFAgKFZsb2FkX3JlYWRfZnVu
Y3Rpb24pKQotCSAgICB2YWwgPSBjYWxsbiAoVmxvYWRfcmVhZF9mdW5jdGlvbiwgcmVhZGNoYXJm
dW4pOwotCSAgZWxzZQotCSAgICB2YWwgPSByZWFkX2ludGVybmFsX3N0YXJ0IChyZWFkY2hhcmZ1
biwgUW5pbCwgUW5pbCwgZmFsc2UpOworCSAgZnJhbWUtPm5leHBycysrOwogCX0KLSAgICAgIC8q
IEVtcHR5IGhhc2hlcyBjYW4gYmUgcmV1c2VkOyBvdGhlcndpc2UsIHJlc2V0IG9uIG5leHQgY2Fs
bC4gICovCi0gICAgICBpZiAoSEFTSF9UQUJMRV9QIChyZWFkX29iamVjdHNfbWFwKQotCSAgJiYg
WEhBU0hfVEFCTEUgKHJlYWRfb2JqZWN0c19tYXApLT5jb3VudCA+IDApCi0JcmVhZF9vYmplY3Rz
X21hcCA9IFFuaWw7Ci0gICAgICBpZiAoSEFTSF9UQUJMRV9QIChyZWFkX29iamVjdHNfY29tcGxl
dGVkKQotCSAgJiYgWEhBU0hfVEFCTEUgKHJlYWRfb2JqZWN0c19jb21wbGV0ZWQpLT5jb3VudCA+
IDApCi0JcmVhZF9vYmplY3RzX2NvbXBsZXRlZCA9IFFuaWw7CiAKLSAgICAgIGlmICghTklMUCAo
c3RhcnQpICYmIGNvbnRpbnVlX3JlYWRpbmdfcCkKLQlzdGFydCA9IEZwb2ludF9tYXJrZXIgKCk7
CisKKyAgICAgIGlmIChiICYmICFmcmFtZS0+cmVhZF9lb2YpCisJeworCSAgZnJhbWUtPnN0YXJ0
ID0gRnBvaW50X21hcmtlciAoKTsKKwkgIGZyYW1lLT5jaGFyX29mZnNldCA9IFhNQVJLRVIgKGZy
YW1lLT5zdGFydCktPmNoYXJwb3M7CisJICBmcmFtZS0+Ynl0ZV9vZmZzZXQgPSBYTUFSS0VSIChm
cmFtZS0+c3RhcnQpLT5ieXRlcG9zOworCX0KIAogICAgICAgLyogUmVzdG9yZSBzYXZlZCBwb2lu
dCBhbmQgQkVHVi4gICovCi0gICAgICB1bmJpbmRfdG8gKGNvdW50MSwgUW5pbCk7CisgICAgICBl
YXNzZXJ0ICghVU5JTklUX1NQRUNQRExfUkVGIChmcmFtZS0+ZHluYW1pY19mcmFtZSkpOworICAg
ICAgbHJlYWRfdW53aW5kX2Zvcl9ldmFsIChmcmFtZSk7CiAKICAgICAgIC8qIE5vdyBldmFsIHdo
YXQgd2UganVzdCByZWFkLiAgKi8KICAgICAgIGlmICghTklMUCAobWFjcm9leHBhbmQpKQotICAg
ICAgICB2YWwgPSByZWFkZXZhbGxvb3BfZWFnZXJfZXhwYW5kX2V2YWwgKHZhbCwgbWFjcm9leHBh
bmQpOworCWZyYW1lLT52YWx1ZSA9IHJlYWRldmFsbG9vcF9lYWdlcl9leHBhbmRfZXZhbCAodmFs
LCBtYWNyb2V4cGFuZCk7CiAgICAgICBlbHNlCi0gICAgICAgIHZhbCA9IGV2YWxfc3ViICh2YWwp
OworCWZyYW1lLT52YWx1ZSA9IGV2YWxfc3ViICh2YWwpOworCisgICAgICBscmVhZF91bndpbmRf
Zm9yX2V2YWwgKGZyYW1lKTsKKworICAgICAgLyogY2hlY2sgaWYgdGhlIGV2YWx1YXRpb24gYWZm
ZWN0ZWQgd2hldGhlciB3ZSBjYW4gdXNlIHRoZQorCSBzaG9ydGN1dCB0byByZWFkMCAqLworICAg
ICAgaWYgKCFFUSAoVmxvYWRfcmVhZF9mdW5jdGlvbiwgcHJldl9WbG9hZF9yZWFkX2Z1bmN0aW9u
KSkKKwl7CisJICBwcmV2X1Zsb2FkX3JlYWRfZnVuY3Rpb24gPSBWbG9hZF9yZWFkX2Z1bmN0aW9u
OworCSAgdXNlX3JlYWQwID0gY29tcGlsZWQgfHwgd2lsbF9kdW1wX3AgKCkKKwkgICAgfHwgKGln
bm9yZV9yZWFkZnVuCisJCSYmIChOSUxQIChWbG9hZF9yZWFkX2Z1bmN0aW9uKQorCQkgICAgfHwg
RVEgKFZsb2FkX3JlYWRfZnVuY3Rpb24sIFFyZWFkKSkpOworCX0KIAotICAgICAgaWYgKHByaW50
ZmxhZykKKyAgICAgIGlmIChmcmFtZS0+cHJpbnRmbGFnKQogCXsKLQkgIFZ2YWx1ZXMgPSBGY29u
cyAodmFsLCBWdmFsdWVzKTsKKwkgIFZ2YWx1ZXMgPSBGY29ucyAoZnJhbWUtPnZhbHVlLCBWdmFs
dWVzKTsKIAkgIGlmIChFUSAoVnN0YW5kYXJkX291dHB1dCwgUXQpKQotCSAgICBGcHJpbjEgKHZh
bCwgUW5pbCwgUW5pbCk7CisJICAgIEZwcmluMSAoZnJhbWUtPnZhbHVlLCBRbmlsLCBRbmlsKTsK
IAkgIGVsc2UKLQkgICAgRnByaW50ICh2YWwsIFFuaWwpOworCSAgICBGcHJpbnQgKGZyYW1lLT52
YWx1ZSwgUW5pbCk7CiAJfQogCi0gICAgICBmaXJzdF9zZXhwID0gMDsKICAgICB9CisgIHJldHVy
biBmcmFtZS0+dmFsdWU7Cit9CiAKLSAgYnVpbGRfbG9hZF9oaXN0b3J5IChzb3VyY2VuYW1lLAot
CQkgICAgICBpbmZpbGUwIHx8IHdob2xlX2J1ZmZlcik7CiAKLSAgdW5iaW5kX3RvIChjb3VudCwg
UW5pbCk7CitzdGF0aWMgTGlzcF9PYmplY3QKK2VudGVyX3N0cmVhbV9yZWFkZXZhbGxvb3AgKExp
c3BfT2JqZWN0IHN0cmVhbSkKK3sKKyAgTGlzcF9PYmplY3QgdmFsID0gUW5pbDsKKyAgbHJlYWRf
ZnJhbWUgdGhpc19mcmFtZSA9IElOSVRfTFJFQURfRlJBTUUoKTsKKyAgdGhpc19mcmFtZS5sb29w
X2R5bmFtaWNfZnJhbWUgPSBTUEVDUERMX0lOREVYICgpOworCisgIGluaXRfbHJlYWRfaW5wdXRf
ZnJvbV9zdHJlYW0gKCZ0aGlzX2ZyYW1lLAorCQkJCXN0cmVhbSwKKwkJCQlRbmlsLCBRbmlsLAor
CQkJCWZhbHNlLCBmYWxzZSwgTlVMTCwgUW5pbCk7CisgIGluaXRfbHJlYWRfZXZhbF9wYXJhbXMo
JnRoaXNfZnJhbWUsIFFuaWwsIFFuaWwsCisJCQkgUW5pbCwgZmFsc2UpOworICBhY3RpdmF0ZV9s
cmVhZF9mcmFtZSAoJnRoaXNfZnJhbWUsIExSRUFEX0ZSQU1FX01VTFRJUExFKTsKKyAgdmFsID0g
aW50ZXJuYWxfY29uZGl0aW9uX2Nhc2VfMSAocmVhZGV2YWxsb29wX2VvZl90cmFtcG9saW5lLAor
CQkJCSAgIG1ha2VfbWludF9wdHIgKCZ0aGlzX2ZyYW1lKSwKKwkJCQkgICBsaXN0MSAoUXQpLAor
CQkJCSAgIGJhc2VfaW50ZXJydXB0X2Vycm9yX2hhbmRsZXIpOworICByZXR1cm4gdW5iaW5kX3Rv
ICh0aGlzX2ZyYW1lLmxvb3BfZHluYW1pY19mcmFtZSwgdmFsKTsKK30KKworc3RhdGljIExpc3Bf
T2JqZWN0CitlbnRlcl9idWZmZXJfcmVhZGV2YWxsb29wIChMaXNwX09iamVjdCBidWZmZXIsCisJ
CQkgICBMaXNwX09iamVjdCBwcmludGZsYWcsCisJCQkgICBMaXNwX09iamVjdCBmaWxlbmFtZSwK
KwkJCSAgIExpc3BfT2JqZWN0IGRvX2FsbG93X3ByaW50LAorCQkJICAgTGlzcF9PYmplY3Qgc3Rh
cnQsCisJCQkgICBMaXNwX09iamVjdCBlbmQsCisJCQkgICBMaXNwX09iamVjdCByZWFkX2Z1bmN0
aW9uLAorCQkJICAgYm9vbCB3aG9sZV9idWZmZXIpCit7CisgIExpc3BfT2JqZWN0IHRlbSwgYnVm
LCB2YWwgPSBRbmlsOworICBzcGVjcGRsX3JlZiBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7Cisg
IGxyZWFkX2ZyYW1lIHRoaXNfZnJhbWUgPSBJTklUX0xSRUFEX0ZSQU1FKCk7CisgIExpc3BfT2Jq
ZWN0IGZ1bGxfbmFtZTsKKyAgaWYgKE5JTFAgKGJ1ZmZlcikpCisgICAgYnVmID0gRmN1cnJlbnRf
YnVmZmVyICgpOworICBlbHNlCisgICAgYnVmID0gRmdldF9idWZmZXIgKGJ1ZmZlcik7CisgIGlm
IChOSUxQIChidWYpKQorICAgIGVycm9yICgiTm8gc3VjaCBidWZmZXIiKTsKKworICBpZiAoTklM
UCAocHJpbnRmbGFnKSAmJiBOSUxQIChkb19hbGxvd19wcmludCkpCisgICAgdGVtID0gUXN5bWJv
bHA7CisgIGVsc2UKKyAgICB0ZW0gPSBwcmludGZsYWc7CisgIGlmIChOSUxQIChmaWxlbmFtZSkp
CisgICAgZmlsZW5hbWUgPSBCVkFSIChYQlVGRkVSIChidWYpLCBmaWxlbmFtZSk7CisgIGlmIChO
SUxQIChGZmlsZV9uYW1lX2Fic29sdXRlX3AgKGZpbGVuYW1lKSkpCisgICAgZnVsbF9uYW1lID0g
RmV4cGFuZF9maWxlX25hbWUgKGZpbGVuYW1lLCBRbmlsKTsKKyAgZWxzZQorICAgIGZ1bGxfbmFt
ZSA9IGZpbGVuYW1lOworICBzcGVjYmluZCAoUWV2YWxfYnVmZmVyX2xpc3QsIEZjb25zIChidWYs
IFZldmFsX2J1ZmZlcl9saXN0KSk7CisgIHNwZWNiaW5kIChRc3RhbmRhcmRfb3V0cHV0LCB0ZW0p
OworICB0aGlzX2ZyYW1lLmxvb3BfZHluYW1pY19mcmFtZSA9IFNQRUNQRExfSU5ERVggKCk7Cisg
IGluaXRfbHJlYWRfaW5wdXRfZnJvbV9zdHJlYW0gKCZ0aGlzX2ZyYW1lLAorCQkJCWJ1ZiwKKwkJ
CQlzdGFydCwgZW5kLAorCQkJCWZhbHNlLCB0cnVlLCBOVUxMLFFuaWwpOworICBpbml0X2xyZWFk
X2V2YWxfcGFyYW1zKCZ0aGlzX2ZyYW1lLCBmdWxsX25hbWUsIGZpbGVuYW1lLAorCQkJIHJlYWRf
ZnVuY3Rpb24sIHdob2xlX2J1ZmZlcik7CisgIC8qIG5vdGUgYXQgdGhpcyBzdGFnZSwgd2hvbGVf
YnVmZmVyIGlzIGRldGVybWluZWQgYnkgdGhlIGNhbGxlcgorICAgICB3YW50cyB0byBzZXQgbGV4
aWNhbCBzY29waW5nIGJhc2VkIG9uIHRoZSBidWZmZXIgY29udGVudHMKKyAgICAgcmVhZGV2YWxs
b29wIHdpbGwgc2V0IGl0IGZvciB0aGUgc2FrZSBvZiByZWNvcmRpbmcgbG9hZCBoaXN0b3J5Cisg
ICAgIGJhc2VkIG9uIHRoZSBzdGFydCBhbmQgZW5kLCBldmVuIGlmIHRoZSBjYWxsZXIgZG9lcyBu
b3QKKyAgICAgbWFrZSBpdCBleHBsaWNpdC4KKyAgICovCisgIC8qIGZyYW1lLT5yZWFkb25lY2hh
ciBtdXN0IGJlIHNldCB0byB1c2UgUkVBRENIQVIsCisgICAgIGJ1dCBhY3RpdmF0ZV9scmVhZF9m
cmFtZSBhbHRlcnMgdGhlIHNwZWNwZGwKKyAgICAgbWF5IGFmZmVjdHMgdGhlIG9yZGVyIG9mIHRo
ZSB1bndpbmQtcHJvdGVjdHMgdmVyc3VzCisgICAgIHByZS1yZWZhY3RvcmluZyAqLworICBpZiAo
d2hvbGVfYnVmZmVyKQorICAgIHsKKyAgICAgIHJlY29yZF91bndpbmRfcHJvdGVjdF9leGN1cnNp
b24gKCk7CisgICAgICBCVUZfVEVNUF9TRVRfUFQgKFhCVUZGRVIgKGJ1ZiksIEJVRl9CRUdWIChY
QlVGRkVSIChidWYpKSk7CisgICAgICBzcGVjYmluZCAoUWxleGljYWxfYmluZGluZywgZ2V0X2xl
eGljYWxfYmluZGluZyAoJnRoaXNfZnJhbWUsIGJ1ZikpOworICAgICAgQlVGX1RFTVBfU0VUX1BU
IChYQlVGRkVSIChidWYpLCBCVUZfQkVHViAoWEJVRkZFUiAoYnVmKSkpOworICAgIH0KKyAgYWN0
aXZhdGVfbHJlYWRfZnJhbWUgKCZ0aGlzX2ZyYW1lLCBMUkVBRF9GUkFNRV9NVUxUSVBMRSk7Cisg
IHZhbCA9IGludGVybmFsX2NvbmRpdGlvbl9jYXNlXzEgKHJlYWRldmFsbG9vcF9lb2ZfdHJhbXBv
bGluZSwKKwkJCQkgICBtYWtlX21pbnRfcHRyICgmdGhpc19mcmFtZSksCisJCQkJICAgbGlzdDEg
KFF0KSwKKwkJCQkgICBiYXNlX2ludGVycnVwdF9lcnJvcl9oYW5kbGVyKTsKKyAgcmV0dXJuIHVu
YmluZF90byAoY291bnQsIHZhbCk7Cit9CisKK0RFRlVOICgiZXZhbC1zdHJlYW0iLCBGZXZhbF9z
dHJlYW0sIFNldmFsX3N0cmVhbSwgMSwgMSwgIiIsCisgIGRvYzogLyogRXhlY3V0ZSB0aGUgc2Vx
dWVuY2Ugb2YgZm9ybXMgcmVhZCBmcm9tIFNUUkVBTQorZm9yIGFueSBpbnB1dCBzdHJlYW0gYXJn
dW1lbnQuICovKQorICAoTGlzcF9PYmplY3Qgc3RyZWFtKQoreworICByZXR1cm4gZW50ZXJfc3Ry
ZWFtX3JlYWRldmFsbG9vcCAoc3RyZWFtKTsKIH0KIAogREVGVU4gKCJldmFsLWJ1ZmZlciIsIEZl
dmFsX2J1ZmZlciwgU2V2YWxfYnVmZmVyLCAwLCA1LCAiIiwKQEAgLTI2MDcsNDkgKzQxNzUsMTkg
QEAgREVGVU4gKCJldmFsLWJ1ZmZlciIsIEZldmFsX2J1ZmZlciwgU2V2YWxfYnVmZmVyLCAwLCA1
LCAiIiwKICBldmFsdWF0ZWQgY29kZSBzaG91bGQgd29yayBub3JtYWxseSBldmVuIGlmIFBSSU5U
RkxBRyBpcyBuaWwsIGluCiAgd2hpY2ggY2FzZSB0aGUgb3V0cHV0IGlzIGRpc3BsYXllZCBpbiB0
aGUgZWNobyBhcmVhLgogCi1UaGlzIGZ1bmN0aW9uIGlnbm9yZXMgdGhlIGdsb2JhbCB2YWx1ZSBv
ZiB0aGUgYGxleGljYWwtYmluZGluZycKLXZhcmlhYmxlLiAgSW5zdGVhZCBpdCB3aWxsIGhlZWQg
dGhlIGJ1ZmZlci1sb2NhbCB2YWx1ZSBvZiB0aGF0Ci12YXJpYWJsZSBhbmQgYW55CitUaGlzIGZ1
bmN0aW9uIGlnbm9yZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGBsZXhpY2FsLWJpbmRpbmcn
Cit2YXJpYWJsZS4gIEluc3RlYWQgaXQgd2lsbCBoZWVkIGFueQogICAtKi0gbGV4aWNhbC1iaW5k
aW5nOiB0IC0qLQotc2V0dGluZ3MgaW4gdGhlIGJ1ZmZlcjsgaWYgdGhlcmUgaXMgbm8gc3VjaCBz
ZXR0aW5nLCBhbmQgdGhlCi1idWZmZXItbG9jYWwgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGlzIG5p
bCwgdGhlIGJ1ZmZlciB3aWxsIGJlCi1ldmFsdWF0ZWQgd2l0aCB0aGUgdmFsdWUgb2YgYGxleGlj
YWwgYmluZGluZycgZXF1YWwgdG8gaXRzCi10b3AtbGV2ZWwgZGVmYXVsdCB2YWx1ZSwgYXMgcmV0
dXJuZWQgYnkgYGRlZmF1bHQtdG9wbGV2ZWwtdmFsdWUnLgorc2V0dGluZ3MgaW4gdGhlIGJ1ZmZl
ciwgYW5kIGlmIHRoZXJlIGlzIG5vIHN1Y2ggc2V0dGluZywgdGhlIGJ1ZmZlcgord2lsbCBiZSBl
dmFsdWF0ZWQgd2l0aG91dCBsZXhpY2FsIGJpbmRpbmcuCiAKIFRoaXMgZnVuY3Rpb24gcHJlc2Vy
dmVzIHRoZSBwb3NpdGlvbiBvZiBwb2ludC4gICovKQogICAoTGlzcF9PYmplY3QgYnVmZmVyLCBM
aXNwX09iamVjdCBwcmludGZsYWcsIExpc3BfT2JqZWN0IGZpbGVuYW1lLAogICAgTGlzcF9PYmpl
Y3QgdW5pYnl0ZSwgTGlzcF9PYmplY3QgZG9fYWxsb3dfcHJpbnQpCiB7Ci0gIHNwZWNwZGxfcmVm
IGNvdW50ID0gU1BFQ1BETF9JTkRFWCAoKTsKLSAgTGlzcF9PYmplY3QgdGVtLCBidWY7Ci0KLSAg
aWYgKE5JTFAgKGJ1ZmZlcikpCi0gICAgYnVmID0gRmN1cnJlbnRfYnVmZmVyICgpOwotICBlbHNl
Ci0gICAgYnVmID0gRmdldF9idWZmZXIgKGJ1ZmZlcik7Ci0gIGlmIChOSUxQIChidWYpKQotICAg
IGVycm9yICgiTm8gc3VjaCBidWZmZXIiKTsKLQotICBpZiAoTklMUCAocHJpbnRmbGFnKSAmJiBO
SUxQIChkb19hbGxvd19wcmludCkpCi0gICAgdGVtID0gUXN5bWJvbHA7Ci0gIGVsc2UKLSAgICB0
ZW0gPSBwcmludGZsYWc7Ci0KLSAgaWYgKE5JTFAgKGZpbGVuYW1lKSkKLSAgICBmaWxlbmFtZSA9
IEJWQVIgKFhCVUZGRVIgKGJ1ZiksIGZpbGVuYW1lKTsKLQotICBzcGVjYmluZCAoUWV2YWxfYnVm
ZmVyX2xpc3QsIEZjb25zIChidWYsIFZldmFsX2J1ZmZlcl9saXN0KSk7Ci0gIHNwZWNiaW5kIChR
c3RhbmRhcmRfb3V0cHV0LCB0ZW0pOwotICByZWNvcmRfdW53aW5kX3Byb3RlY3RfZXhjdXJzaW9u
ICgpOwotICBCVUZfVEVNUF9TRVRfUFQgKFhCVUZGRVIgKGJ1ZiksIEJVRl9CRUdWIChYQlVGRkVS
IChidWYpKSk7Ci0gIC8qIERvbid0IGVtaXQgYSB3YXJuaW5nIGFib3V0ICdsZXhpY2FsLWJpbmRp
bmcnIGlmIGl0IGFscmVhZHkgaGFzIGEKLSAgICAgbG9jYWwgYmluZGluZyBpbiB0aGUgYnVmZmVy
LiAgKi8KLSAgaWYgKE5JTFAgKEZsb2NhbF92YXJpYWJsZV9wIChRbGV4aWNhbF9iaW5kaW5nLCBi
dWYpKSkKLSAgICBzcGVjYmluZCAoUWxleGljYWxfYmluZGluZywgZ2V0X2xleGljYWxfYmluZGlu
ZyAoYnVmLCBidWYpKTsKLSAgQlVGX1RFTVBfU0VUX1BUIChYQlVGRkVSIChidWYpLCBCVUZfQkVH
ViAoWEJVRkZFUiAoYnVmKSkpOwotICByZWFkZXZhbGxvb3AgKGJ1ZiwgMCwgZmlsZW5hbWUsCi0J
CSFOSUxQIChwcmludGZsYWcpLCB1bmlieXRlLCBRbmlsLCBRbmlsLCBRbmlsKTsKLSAgcmV0dXJu
IHVuYmluZF90byAoY291bnQsIFFuaWwpOworICByZXR1cm4gZW50ZXJfYnVmZmVyX3JlYWRldmFs
bG9vcCAoYnVmZmVyLCBwcmludGZsYWcsIGZpbGVuYW1lLAorCQkJCSAgICBkb19hbGxvd19wcmlu
dCwgUW5pbCwKKwkJCQkgICAgUW5pbCwgUW5pbCwgdHJ1ZSk7CiB9CiAKIERFRlVOICgiZXZhbC1y
ZWdpb24iLCBGZXZhbF9yZWdpb24sIFNldmFsX3JlZ2lvbiwgMiwgNCwgInIiLApAQCAtMjY2Nywy
OCArNDIwNSw0OCBAQCBERUZVTiAoImV2YWwtcmVnaW9uIiwgRmV2YWxfcmVnaW9uLCBTZXZhbF9y
ZWdpb24sIDIsIDQsICJyIiwKIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgbW92ZSBwb2ludC4gICov
KQogICAoTGlzcF9PYmplY3Qgc3RhcnQsIExpc3BfT2JqZWN0IGVuZCwgTGlzcF9PYmplY3QgcHJp
bnRmbGFnLCBMaXNwX09iamVjdCByZWFkX2Z1bmN0aW9uKQogewotICAvKiBGSVhNRTogRG8gdGhl
IGV2YWwtc2V4cC1hZGQtZGVmdmFycyBkYW5jZSEgICovCi0gIHNwZWNwZGxfcmVmIGNvdW50ID0g
U1BFQ1BETF9JTkRFWCAoKTsKLSAgTGlzcF9PYmplY3QgdGVtLCBjYnVmOworICByZXR1cm4gZW50
ZXJfYnVmZmVyX3JlYWRldmFsbG9vcCAoUW5pbCwgcHJpbnRmbGFnLCBRbmlsLAorCQkJCSAgICBR
bmlsLCBzdGFydCwgZW5kLCByZWFkX2Z1bmN0aW9uLAorCQkJCSAgICBmYWxzZSk7Cit9CiAKLSAg
Y2J1ZiA9IEZjdXJyZW50X2J1ZmZlciAoKTsKIAotICBpZiAoTklMUCAocHJpbnRmbGFnKSkKLSAg
ICB0ZW0gPSBRc3ltYm9scDsKKwwKK3N0YXRpYyBMaXNwX09iamVjdAorZW50ZXJfcmVhZCAoTGlz
cF9PYmplY3Qgc3RyZWFtLCBMaXNwX09iamVjdCBzdGFydCwgTGlzcF9PYmplY3QgZW5kLAorCSAg
ICBib29sIGxvY2F0ZV9zeW1zLCBwdHJkaWZmX3QgKmNoYXJfb2Zmc2V0KQoreworICBpZiAoIWhh
bmRsZV9yZWFkX3N0cmVhbV9kZWZhdWx0cyAoJnN0cmVhbSkpCisgICAgcmV0dXJuIHN0cmVhbTsK
KyAgbHJlYWRfZnJhbWUgdGhpc19mcmFtZSA9IElOSVRfTFJFQURfRlJBTUUoKTsKKyAgdGhpc19m
cmFtZS5sb29wX2R5bmFtaWNfZnJhbWUgPSBTUEVDUERMX0lOREVYICgpOworICBpbml0X2xyZWFk
X2lucHV0X2Zyb21fc3RyZWFtICgmdGhpc19mcmFtZSwKKwkJCQlzdHJlYW0sCisJCQkJc3RhcnQs
IGVuZCwgbG9jYXRlX3N5bXMsCisJCQkJZmFsc2UsICBOVUxMLCBRbmlsKTsKKyAgYWN0aXZhdGVf
bHJlYWRfZnJhbWUgKCZ0aGlzX2ZyYW1lLCBMUkVBRF9GUkFNRV9TSU5HTEUpOworICBscmVhZF9p
bml0X2R5bmFtaWNfZnJhbWUgKCZ0aGlzX2ZyYW1lKTsKKyAgaWYgKGNoYXJfb2Zmc2V0KQorICAg
ICpjaGFyX29mZnNldCA9IHRoaXNfZnJhbWUuY2hhcl9vZmZzZXQ7CisgIExpc3BfT2JqZWN0IGRh
dGEgPSBRbmlsOworICAvKiBGcmVhZCBtYXkgYmUgY2FsbGVkIHdoaWxlIGxvYWRpbmcgdGhlIGR1
bXAgZmlsZSAqLworICBpZiAoaW5pdGlhbGl6ZWQgfHwgd2lsbF9kdW1wX3AoKSkKKyAgICB7Cisg
ICAgICBkYXRhID0gaW50ZXJuYWxfY29uZGl0aW9uX2Nhc2VfMSAoY2FsbF9yZWFkMCwKKwkJCQkJ
bWFrZV9taW50X3B0ciAoJnRoaXNfZnJhbWUpLAorCQkJCQlRZXJyb3JfZHVyaW5nX2ludGVycnVw
dCwKKwkJCQkJYmFzZV9pbnRlcnJ1cHRfZXJyb3JfaGFuZGxlcik7CisgICAgfQogICBlbHNlCi0g
ICAgdGVtID0gcHJpbnRmbGFnOwotICBzcGVjYmluZCAoUXN0YW5kYXJkX291dHB1dCwgdGVtKTsK
LSAgc3BlY2JpbmQgKFFldmFsX2J1ZmZlcl9saXN0LCBGY29ucyAoY2J1ZiwgVmV2YWxfYnVmZmVy
X2xpc3QpKTsKLQotICAvKiBgcmVhZGV2YWxsb29wJyBjYWxscyBmdW5jdGlvbnMgd2hpY2ggY2hl
Y2sgdGhlIHR5cGUgb2Ygc3RhcnQgYW5kIGVuZC4gICovCi0gIHJlYWRldmFsbG9vcCAoY2J1Ziwg
MCwgQlZBUiAoWEJVRkZFUiAoY2J1ZiksIGZpbGVuYW1lKSwKLQkJIU5JTFAgKHByaW50ZmxhZyks
IFFuaWwsIHJlYWRfZnVuY3Rpb24sCi0JCXN0YXJ0LCBlbmQpOwotCi0gIHJldHVybiB1bmJpbmRf
dG8gKGNvdW50LCBRbmlsKTsKKyAgICB7CisgICAgICBkYXRhID0gcmVhZDAgKCZ0aGlzX2ZyYW1l
KTsKKyAgICB9CisgIGlmIChjaGFyX29mZnNldCkKKyAgICAqY2hhcl9vZmZzZXQgPSB0aGlzX2Zy
YW1lLmNoYXJfb2Zmc2V0OworICAgdW5iaW5kX3RvICh0aGlzX2ZyYW1lLmxvb3BfZHluYW1pY19m
cmFtZSwgUW5pbCk7CisgICByZXR1cm4gZGF0YTsKIH0KIAotDAogREVGVU4gKCJyZWFkIiwgRnJl
YWQsIFNyZWFkLCAwLCAxLCAwLAogICAgICAgIGRvYzogLyogUmVhZCBvbmUgTGlzcCBleHByZXNz
aW9uIGFzIHRleHQgZnJvbSBTVFJFQU0sIHJldHVybiBhcyBMaXNwIG9iamVjdC4KIElmIFNUUkVB
TSBpcyBuaWwsIHVzZSB0aGUgdmFsdWUgb2YgYHN0YW5kYXJkLWlucHV0JyAod2hpY2ggc2VlKS4K
QEAgLTI3MDIsMTggKzQyNjAsNyBAQCBERUZVTiAoInJlYWQiLCBGcmVhZCwgU3JlYWQsIDAsIDEs
IDAsCiAgICAgc3RhbmRhcmQgaW5wdXQgaW4gYmF0Y2ggbW9kZSkuICAqLykKICAgKExpc3BfT2Jq
ZWN0IHN0cmVhbSkKIHsKLSAgaWYgKE5JTFAgKHN0cmVhbSkpCi0gICAgc3RyZWFtID0gVnN0YW5k
YXJkX2lucHV0OwotICBpZiAoRVEgKHN0cmVhbSwgUXQpKQotICAgIHN0cmVhbSA9IFFyZWFkX2No
YXI7Ci0gIGlmIChFUSAoc3RyZWFtLCBRcmVhZF9jaGFyKSkKLSAgICAvKiBGSVhNRTogPyEgVGhp
cyBpcyB1c2VkIHdoZW4gdGhlIHJlYWRlciBpcyBjYWxsZWQgZnJvbSB0aGUKLSAgICAgICBtaW5p
YnVmZmVyIHdpdGhvdXQgYSBzdHJlYW0sIGFzIGluIChyZWFkKS4gIEJ1dCBpcyB0aGlzIGZlYXR1
cmUKLSAgICAgICBldmVyIHVzZWQsIGFuZCBpZiBzbywgd2h5PyAgSU9XLCB3aWxsIGFueXRoaW5n
IGJyZWFrIGlmIHRoaXMKLSAgICAgICBmZWF0dXJlIGlzIHJlbW92ZWQgIT8gICovCi0gICAgcmV0
dXJuIGNhbGxuIChRcmVhZF9taW5pYnVmZmVyLCBidWlsZF9zdHJpbmcgKCJMaXNwIGV4cHJlc3Np
b246ICIpKTsKLQotICByZXR1cm4gcmVhZF9pbnRlcm5hbF9zdGFydCAoc3RyZWFtLCBRbmlsLCBR
bmlsLCBmYWxzZSk7CisgIHJldHVybiBlbnRlcl9yZWFkIChzdHJlYW0sIFFuaWwsIFFuaWwsIGZh
bHNlLCBOVUxMKTsKIH0KIAogREVGVU4gKCJyZWFkLXBvc2l0aW9uaW5nLXN5bWJvbHMiLCBGcmVh
ZF9wb3NpdGlvbmluZ19zeW1ib2xzLApAQCAtMjczMiwxNSArNDI3OSw3IEBAIERFRlVOICgicmVh
ZC1wb3NpdGlvbmluZy1zeW1ib2xzIiwgRnJlYWRfcG9zaXRpb25pbmdfc3ltYm9scywKICAgICBz
dGFuZGFyZCBpbnB1dCBpbiBiYXRjaCBtb2RlKS4gICovKQogICAoTGlzcF9PYmplY3Qgc3RyZWFt
KQogewotICBpZiAoTklMUCAoc3RyZWFtKSkKLSAgICBzdHJlYW0gPSBWc3RhbmRhcmRfaW5wdXQ7
Ci0gIGlmIChFUSAoc3RyZWFtLCBRdCkpCi0gICAgc3RyZWFtID0gUXJlYWRfY2hhcjsKLSAgaWYg
KEVRIChzdHJlYW0sIFFyZWFkX2NoYXIpKQotICAgIC8qIEZJWE1FOiA/ISBXaGVuIGlzIHRoaXMg
dXNlZCAhPyAgKi8KLSAgICByZXR1cm4gY2FsbG4gKFFyZWFkX21pbmlidWZmZXIsIGJ1aWxkX3N0
cmluZyAoIkxpc3AgZXhwcmVzc2lvbjogIikpOwotCi0gIHJldHVybiByZWFkX2ludGVybmFsX3N0
YXJ0IChzdHJlYW0sIFFuaWwsIFFuaWwsIHRydWUpOworICByZXR1cm4gZW50ZXJfcmVhZCAoc3Ry
ZWFtLCBRbmlsLCBRbmlsLCB0cnVlLCBOVUxMKTsKIH0KIAogREVGVU4gKCJyZWFkLWZyb20tc3Ry
aW5nIiwgRnJlYWRfZnJvbV9zdHJpbmcsIFNyZWFkX2Zyb21fc3RyaW5nLCAxLCAzLCAwLApAQCAt
Mjc1NCw5MiArNDI5MywxOTkgQEAgREVGVU4gKCJyZWFkLWZyb20tc3RyaW5nIiwgRnJlYWRfZnJv
bV9zdHJpbmcsIFNyZWFkX2Zyb21fc3RyaW5nLCAxLCAzLCAwLAogICAoTGlzcF9PYmplY3Qgc3Ry
aW5nLCBMaXNwX09iamVjdCBzdGFydCwgTGlzcF9PYmplY3QgZW5kKQogewogICBMaXNwX09iamVj
dCByZXQ7CisgIHB0cmRpZmZfdCBwb3M7CiAgIENIRUNLX1NUUklORyAoc3RyaW5nKTsKLSAgLyog
YHJlYWRfaW50ZXJuYWxfc3RhcnQnIHNldHMgYHJlYWRfZnJvbV9zdHJpbmdfaW5kZXgnLiAgKi8K
LSAgcmV0ID0gcmVhZF9pbnRlcm5hbF9zdGFydCAoc3RyaW5nLCBzdGFydCwgZW5kLCBmYWxzZSk7
Ci0gIHJldHVybiBGY29ucyAocmV0LCBtYWtlX2ZpeG51bSAocmVhZF9mcm9tX3N0cmluZ19pbmRl
eCkpOworICByZXQgPSBlbnRlcl9yZWFkIChzdHJpbmcsIHN0YXJ0LCBlbmQsIGZhbHNlLCAmcG9z
KTsKKyAgcmV0dXJuIEZjb25zIChyZXQsIG1ha2VfZml4bnVtIChwb3MpKTsKIH0KIAotLyogRnVu
Y3Rpb24gdG8gc2V0IHVwIHRoZSBnbG9iYWwgY29udGV4dCB3ZSBuZWVkIGluIHRvcGxldmVsIHJl
YWQKLSAgIGNhbGxzLiAgU1RBUlQgYW5kIEVORCBvbmx5IHVzZWQgd2hlbiBTVFJFQU0gaXMgYSBz
dHJpbmcuCi0gICBMT0NBVEVfU1lNUyB0cnVlIG1lYW5zIHJlYWQgc3ltYm9sIG9jY3VycmVuY2Vz
IGFzIHN5bWJvbHMgd2l0aAotICAgcG9zaXRpb24uICAqLwotc3RhdGljIExpc3BfT2JqZWN0Ci1y
ZWFkX2ludGVybmFsX3N0YXJ0IChMaXNwX09iamVjdCBzdHJlYW0sIExpc3BfT2JqZWN0IHN0YXJ0
LCBMaXNwX09iamVjdCBlbmQsCi0gICAgICAgICAgICAgICAgICAgICBib29sIGxvY2F0ZV9zeW1z
KQotewotICBMaXNwX09iamVjdCByZXR2YWw7Ci0KLSAgcmVhZGNoYXJfb2Zmc2V0ID0gQlVGRkVS
UCAoc3RyZWFtKSA/IFhCVUZGRVIgKHN0cmVhbSktPnB0IDogMDsKLSAgLyogV2UgY2FuIGdldCBj
YWxsZWQgZnJvbSByZWFkZXZhbGxvb3Agd2hpY2ggbWF5IGhhdmUgc2V0IHRoZXNlCi0gICAgIGFs
cmVhZHkuICAqLwotICBpZiAoISBIQVNIX1RBQkxFX1AgKHJlYWRfb2JqZWN0c19tYXApCi0gICAg
ICB8fCBYSEFTSF9UQUJMRSAocmVhZF9vYmplY3RzX21hcCktPmNvdW50KQotICAgIHJlYWRfb2Jq
ZWN0c19tYXAKLSAgICAgID0gbWFrZV9oYXNoX3RhYmxlICgmaGFzaHRlc3RfZXEsIERFRkFVTFRf
SEFTSF9TSVpFLCBXZWFrX05vbmUpOwotICBpZiAoISBIQVNIX1RBQkxFX1AgKHJlYWRfb2JqZWN0
c19jb21wbGV0ZWQpCi0gICAgICB8fCBYSEFTSF9UQUJMRSAocmVhZF9vYmplY3RzX2NvbXBsZXRl
ZCktPmNvdW50KQotICAgIHJlYWRfb2JqZWN0c19jb21wbGV0ZWQKLSAgICAgID0gbWFrZV9oYXNo
X3RhYmxlICgmaGFzaHRlc3RfZXEsIERFRkFVTFRfSEFTSF9TSVpFLCBXZWFrX05vbmUpOwotCi0g
IGlmIChTVFJJTkdQIChzdHJlYW0pCi0gICAgICB8fCAoKENPTlNQIChzdHJlYW0pICYmIFNUUklO
R1AgKFhDQVIgKHN0cmVhbSkpKSkpCi0gICAgewotICAgICAgcHRyZGlmZl90IHN0YXJ0dmFsLCBl
bmR2YWw7Ci0gICAgICBMaXNwX09iamVjdCBzdHJpbmc7Ci0KLSAgICAgIGlmIChTVFJJTkdQIChz
dHJlYW0pKQotCXN0cmluZyA9IHN0cmVhbTsKK2Jvb2wKK2hhbmRsZV9yZWFkX3N0cmVhbV9kZWZh
dWx0cyAoTGlzcF9PYmplY3QgKnN0cmVhbSkKK3sKKyAgaWYgKE5JTFAgKCpzdHJlYW0pKQorICAg
ICpzdHJlYW0gPSBWc3RhbmRhcmRfaW5wdXQ7CisgIGlmIChFUSAoKnN0cmVhbSwgUXQpKQorICAg
ICpzdHJlYW0gPSBRcmVhZF9jaGFyOworICBpZiAoRVEgKCpzdHJlYW0sIFFyZWFkX2NoYXIpKQor
ICAgIHsKKyAgICAgIC8qIEZJWE1FOiByZWFkX21pbmlidWZmZXIgZG9lcyBub3Qgb2ZmZXIgYW4g
b3B0aW9uIGZvcgorCSByZXR1cm5pbmcgc3ltYm9scyB3aXRoIHBvc2l0aW9uICovCisgICAgICAv
KiBGSVhNRTogPyEgVGhpcyBpcyB1c2VkIHdoZW4gdGhlIHJlYWRlciBpcyBjYWxsZWQgZnJvbSB0
aGUKKwkgbWluaWJ1ZmZlciB3aXRob3V0IGEgc3RyZWFtLCBhcyBpbiAocmVhZCkuICBCdXQgaXMg
dGhpcyBmZWF0dXJlCisJIGV2ZXIgdXNlZCwgYW5kIGlmIHNvLCB3aHk/ICBJT1csIHdpbGwgYW55
dGhpbmcgYnJlYWsgaWYgdGhpcworCSBmZWF0dXJlIGlzIHJlbW92ZWQgIT8gICovCisgICAgICBp
ZiAoIU5JTFAgKEZmYm91bmRwIChRcmVhZF9taW5pYnVmZmVyKSkpCisJKnN0cmVhbSA9IGNhbGxu
IChRcmVhZF9taW5pYnVmZmVyLAorCQkJIGJ1aWxkX3N0cmluZyAoIkxpc3AgZXhwcmVzc2lvbjog
IikpOwogICAgICAgZWxzZQotCXN0cmluZyA9IFhDQVIgKHN0cmVhbSk7Ci0KLSAgICAgIHZhbGlk
YXRlX3N1YmFycmF5IChzdHJpbmcsIHN0YXJ0LCBlbmQsIFNDSEFSUyAoc3RyaW5nKSwKLQkJCSAm
c3RhcnR2YWwsICZlbmR2YWwpOworCS8qIEZyb20gaW5pdGlhbCBkZWZpbml0aW9uIG9mIHJlYWQt
bWluaWJ1ZmZlciBpbiBzdWJyLmVsICovCisJKnN0cmVhbSA9IEZyZWFkX2Zyb21fbWluaWJ1ZmZl
ciAoYnVpbGRfc3RyaW5nICgiTGlzcCBleHByZXNzaW9uOiAiKSwKKwkJCQkJIFFuaWwsIFZtaW5p
YnVmZmVyX2xvY2FsX21hcCwgUXQsCisJCQkJCSBRbWluaWJ1ZmZlcl9oaXN0b3J5LCBRbmlsLCBR
bmlsKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIHJldHVybiB0cnVlOworfQogCi0g
ICAgICByZWFkX2Zyb21fc3RyaW5nX2luZGV4ID0gc3RhcnR2YWw7Ci0gICAgICByZWFkX2Zyb21f
c3RyaW5nX2luZGV4X2J5dGUgPSBzdHJpbmdfY2hhcl90b19ieXRlIChzdHJpbmcsIHN0YXJ0dmFs
KTsKLSAgICAgIHJlYWRfZnJvbV9zdHJpbmdfbGltaXQgPSBlbmR2YWw7CisvKiBDb252ZXJ0IHJl
YWQgYXJndW1lbnQgaW50byBscmVhZF9pbnB1dCBvZiBhcHByb3ByaWF0ZSB0eXBlICovCit2b2lk
Citpbml0X2xyZWFkX2lucHV0X2Zyb21fc3RyZWFtIChscmVhZF9mcmFtZSAqZnJhbWUsCisJCQkg
ICAgICBMaXNwX09iamVjdCBzdHJlYW0sCisJCQkgICAgICBMaXNwX09iamVjdCBzdGFydCwKKwkJ
CSAgICAgIExpc3BfT2JqZWN0IGVuZCwKKwkJCSAgICAgIGJvb2wgbG9jYXRlX3N5bXMsCisJCQkg
ICAgICBib29sIHNlZWthYmxlLAorCQkJICAgICAgRklMRSAqc3RyZWFtX2ZpbGUsCisJCQkgICAg
ICBMaXNwX09iamVjdCBjb2RpbmcpCit7CisgIExpc3BfT2JqZWN0IGZ1bGxfbmFtZSA9IFFuaWw7
CisgIExpc3BfT2JqZWN0IG5hbWUgPSBRbmlsOworICBpZiAoIU5JTFAgKGNvZGluZykpCisgICAg
eworICAgICAgQ0hFQ0tfQ09ESU5HX1NZU1RFTSAoY29kaW5nKTsKKyAgICAgIHB0cmRpZmZfdCBp
ZCA9IENPRElOR19TWVNURU1fSUQgKGNvZGluZyk7CisgICAgICBmcmFtZS0+bXVsdGlieXRlID0g
TklMUCAoQ09ESU5HX0FUVFJfRk9SX1VOSUJZVEUgKENPRElOR19JRF9BVFRSUyAoaWQpKSkgPwor
CUxSRUFEX01VTFRJQllURV9UUlVFIDogTFJFQURfTVVMVElCWVRFX0ZBTFNFOworICAgIH0KKyAg
aWYgKENPTlNQIChzdHJlYW0pKQorICAgIHsKKyAgICAgIExpc3BfT2JqZWN0IGJhc2Vfc3RyZWFt
ID0gWENBUiAoc3RyZWFtKTsKKyAgICAgIGlmIChDT05TUCAoYmFzZV9zdHJlYW0pKQorCS8qIGRp
c2FsbG93IG5lc3RlZCBjb25zIHRvIGF2b2lkIGluZmluaXRlCisJICAgcmVjdXJzaW9uIG9uIGNp
cmN1bGFyIGlucHV0ICovCisJeHNpZ25hbDEgKFFlcnJvciwKKwkJICBDQUxMTiAoRmZvcm1hdCwK
KwkJCSBidWlsZF9zdHJpbmcgKCJyZWFkOiBOZXN0ZWQgY29uczogJVMiKSwKKwkJCSBzdHJlYW0p
KTsKKyAgICAgIExpc3BfT2JqZWN0IGl0ZW0xID0gWENEUiAoc3RyZWFtKTsKKyAgICAgIExpc3Bf
T2JqZWN0IGl0ZW0yID0gUW5pbDsKKyAgICAgIGlmIChDT05TUCAoaXRlbTEpKQorICAgICAgewor
CWl0ZW0yID0gWENEUiAoaXRlbTEpOworCWl0ZW0xID0gWENBUihpdGVtMSk7CisgICAgICB9Cisg
ICAgICBpZiAoQlVGRkVSUCAoYmFzZV9zdHJlYW0pIHx8IE1BUktFUlAgKGJhc2Vfc3RyZWFtKQor
CSAgfHwgU1RSSU5HUCAoYmFzZV9zdHJlYW0pKQorCXsKKwkgIHN0YXJ0ID0gKE5JTFAgKHN0YXJ0
KSkgPyBpdGVtMSA6IHN0YXJ0OworCSAgZW5kID0gKE5JTFAgKGVuZCkpID8gaXRlbTIgOiBlbmQ7
CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmIChOSUxQIChuYW1lKSkKKwkgICAgbmFtZSA9IGl0
ZW0xOworCSAgaWYgKE5JTFAgKGZ1bGxfbmFtZSkpCisJICAgIGZ1bGxfbmFtZSA9IE5JTFAgKGl0
ZW0yKSA/IGl0ZW0xIDogaXRlbTI7CisJfQorCSAgc3RyZWFtID0gYmFzZV9zdHJlYW07CisgICAg
fQorICBmcmFtZS0+c3RhcnQgPSBzdGFydDsKKyAgZnJhbWUtPmVuZCA9IGVuZDsKKyAgZnJhbWUt
PmZ1bGxfbmFtZSA9IGZ1bGxfbmFtZTsKKyAgZnJhbWUtPm5hbWUgPSBuYW1lOworICBmcmFtZS0+
bG9jYXRlX3N5bXMgPSBsb2NhdGVfc3ltczsKKyAgaWYgKEJVRkZFUlAgKHN0cmVhbSkpCisgICAg
eworICAgICAgZnJhbWUtPmludHlwZSA9IExSRUFEX0lOUFVUX0JVRkZFUjsKKyAgICAgIGluaXRf
aW5idWZmZXIgKGZyYW1lLHN0cmVhbSk7CisgICAgfQorICBlbHNlIGlmIChNQVJLRVJQIChzdHJl
YW0pKQorICAgIHsKKyAgICAgIGZyYW1lLT5pbnR5cGUgPSBMUkVBRF9JTlBVVF9NQVJLRVI7Cisg
ICAgICBpbml0X2lubWFya2VyIChmcmFtZSxzdHJlYW0pOworICAgIH0KKyAgZWxzZSBpZiAoU1RS
SU5HUCAoc3RyZWFtKSkKKyAgICB7CisgICAgICBmcmFtZS0+aW50eXBlID0gTFJFQURfSU5QVVRf
U1RSSU5HOworICAgICAgaW5pdF9pbnN0cmluZyAoZnJhbWUsIHN0cmVhbSk7CisgICAgfQorICBl
bHNlIGlmIChFUSAoc3RyZWFtLCBRZ2V0X2ZpbGVfY2hhcikpCisgICAgeworICAgICAgLyogYWJ1
c2Ugc3RhcnQgYW5kIGVuZCBhcmd1bWVudHMgZm9yIGZ1bGxfbmFtZSBhbmQgZmlsZSAqLworICAg
ICAgZWFzc2VydCAoc3RyZWFtX2ZpbGUgIT0gTlVMTCk7CisgICAgICBmcmFtZS0+aW50eXBlID0g
TFJFQURfSU5QVVRfRklMRTsKKyAgICAgIGluaXRfaW5maWxlIChmcmFtZSwgc3RyZWFtX2ZpbGUs
IHNlZWthYmxlLCBmYWxzZSwgY29kaW5nKTsKKyAgICB9CisgIGVsc2UgaWYgKEVRIChzdHJlYW0s
IFFyZWFkZXJfaW5wdXRfc3RyZWFtKSkKKyAgICB7CisgICAgICBmcmFtZS0+aW50eXBlID0gTFJF
QURfSU5QVVRfSU5ESVJFQ1Q7CisgICAgICBscmVhZF9mcmFtZSAqc291cmNlID0gY3VycmVudF9m
cmFtZTsKKyAgICAgIHdoaWxlIChzb3VyY2UgJiYgc291cmNlLT5pbnR5cGUgPT0gTFJFQURfSU5Q
VVRfSU5ESVJFQ1QpCisJc291cmNlID0gc291cmNlLT5pbnB1dC5mcmFtZS5zb3VyY2U7CisgICAg
ICBpZiAoISBzb3VyY2UpCisJZnJhbWUtPmludHlwZSA9IExSRUFEX0lOUFVUX05VTEw7CisgICAg
ICBlbHNlCisJeworCSAgZnJhbWUtPmlucHV0LmZyYW1lLnNvdXJjZSA9IHNvdXJjZTsKKwkgIGZy
YW1lLT5jaGFyX29mZnNldCA9IHNvdXJjZS0+Y2hhcl9vZmZzZXQ7CisJICBmcmFtZS0+Ynl0ZV9v
ZmZzZXQgPSBzb3VyY2UtPmJ5dGVfb2Zmc2V0OworCX0KKyAgICB9CisgIGVsc2UgaWYgKEVRIChz
dHJlYW0sIFFnZXRfZW1hY3NfbXVsZV9maWxlX2NoYXIpKQorICAgIHsKKyAgICAgIGVhc3NlcnQg
KHN0cmVhbV9maWxlICE9IE5VTEwpOworICAgICAgZnJhbWUtPmludHlwZSA9IExSRUFEX0lOUFVU
X0ZJTEVfTVVMRTsKKyAgICAgIGluaXRfaW5maWxlIChmcmFtZSwgc3RyZWFtX2ZpbGUsIHNlZWth
YmxlLCB0cnVlLCBjb2RpbmcpOworICAgIH0KKyAgZWxzZSBpZiAoTklMUCAoc3RyZWFtKSkKKyAg
ICB7CisgICAgICBmcmFtZS0+aW50eXBlID0gTFJFQURfSU5QVVRfTlVMTDsKKyAgICAgIGZyYW1l
LT5jaGFyX29mZnNldCA9IDA7CisgICAgICBmcmFtZS0+Ynl0ZV9vZmZzZXQgPSAwOworICAgIH0K
KyAgZWxzZQorICAgIHsKKyAgICAgIC8qIEV2aWRlbnRseSB0aGlzIG11c3QgYmUgYSBmdW5jdGlv
biBuYW1lIG9yIHZhbHVlICovCisgICAgICBmcmFtZS0+aW50eXBlID0gTFJFQURfSU5QVVRfUFJP
Q0VEVVJFOworICAgICAgZnJhbWUtPmlucHV0LnAgPSBJTklUX0lOUFJPQygpOworICAgICAgZnJh
bWUtPmlucHV0LnAucHJvYyA9IHN0cmVhbTsKKyAgICAgIGZyYW1lLT5jaGFyX29mZnNldCA9IDA7
CisgICAgICBmcmFtZS0+Ynl0ZV9vZmZzZXQgPSAwOworICAgIH0KKyAgaWYgKGZyYW1lLT5pbnR5
cGUgIT0gTFJFQURfSU5QVVRfTlVMTCkKKyAgICB7CisgICAgICAvKiBzdGFydCB3aXRoIGRlZmF1
bHRzIHRoYXQgYXJlbid0IHN0YXRpYyAoSU5JVF9MUkVBRF9GUkFNRSgpKSovCisgICAgICBmcmFt
ZS0+b2JqZWN0c19tYXAKKwk9IG1ha2VfaGFzaF90YWJsZSAoJmhhc2h0ZXN0X2VxLCBERUZBVUxU
X0hBU0hfU0laRSwgV2Vha19Ob25lKTsKKyAgICAgIGZyYW1lLT5vYmplY3RzX2NvbXBsZXRlZAor
CT0gbWFrZV9oYXNoX3RhYmxlICgmaGFzaHRlc3RfZXEsIERFRkFVTFRfSEFTSF9TSVpFLCBXZWFr
X05vbmUpOwogICAgIH0KLQotICByZXR2YWwgPSByZWFkMCAoc3RyZWFtLCBsb2NhdGVfc3ltcyk7
Ci0gIGlmIChIQVNIX1RBQkxFX1AgKHJlYWRfb2JqZWN0c19tYXApCi0gICAgICAmJiBYSEFTSF9U
QUJMRSAocmVhZF9vYmplY3RzX21hcCktPmNvdW50ID4gMCkKLSAgICByZWFkX29iamVjdHNfbWFw
ID0gUW5pbDsKLSAgaWYgKEhBU0hfVEFCTEVfUCAocmVhZF9vYmplY3RzX2NvbXBsZXRlZCkKLSAg
ICAgICYmIFhIQVNIX1RBQkxFIChyZWFkX29iamVjdHNfY29tcGxldGVkKS0+Y291bnQgPiAwKQot
ICAgIHJlYWRfb2JqZWN0c19jb21wbGV0ZWQgPSBRbmlsOwotICByZXR1cm4gcmV0dmFsOworICAv
KiBmcmFtZS0+bXVsdGlieXRlIG11c3QgYmUgaW5pdGlhbGl6ZWQhICovCisgIGluaXRpYWxpemVf
cmVhZG9uZWNoYXIgKGZyYW1lKTsKIH0KLQwKLS8qIEdyb3cgYSByZWFkIGJ1ZmZlciBCVUYgdGhh
dCBjb250YWlucyBPRkZTRVQgdXNlZnVsIGJ5dGVzIG9mIGRhdGEsCi0gICBieSBhdCBsZWFzdCBN
QVhfTVVMVElCWVRFX0xFTkdUSCBieXRlcy4gIFVwZGF0ZSAqQlVGX0FERFIgYW5kCi0gICAqQlVG
X1NJWkUgYWNjb3JkaW5nbHk7IDAgPD0gT0ZGU0VUIDw9ICpCVUZfU0laRS4gIElmICpCVUZfQURE
UiBpcwotICAgaW5pdGlhbGx5IG51bGwsIEJVRiBpcyBvbiB0aGUgc3RhY2s6IGNvcHkgaXRzIGRh
dGEgdG8gdGhlIG5ldyBoZWFwCi0gICBidWZmZXIuICBPdGhlcndpc2UsIEJVRiBtdXN0IGVxdWFs
ICpCVUZfQUREUiBhbmQgY2FuIHNpbXBseSBiZQotICAgcmVhbGxvY2F0ZWQuICBFaXRoZXIgd2F5
LCByZW1lbWJlciB0aGUgaGVhcCBhbGxvY2F0aW9uICh3aGljaCBpcyBhdAotICAgcGRsIHNsb3Qg
Q09VTlQpIHNvIHRoYXQgaXQgY2FuIGJlIGZyZWVkIHdoZW4gdW53aW5kaW5nIHRoZSBzdGFjay4q
LwogCi1zdGF0aWMgY2hhciAqCi1ncm93X3JlYWRfYnVmZmVyIChjaGFyICpidWYsIHB0cmRpZmZf
dCBvZmZzZXQsCi0JCSAgY2hhciAqKmJ1Zl9hZGRyLCBwdHJkaWZmX3QgKmJ1Zl9zaXplLCBzcGVj
cGRsX3JlZiBjb3VudCkKK3ZvaWQKK2luaXRfbHJlYWRfZXZhbF9wYXJhbXMgKGxyZWFkX2ZyYW1l
ICpmcmFtZSwKKwkJCUxpc3BfT2JqZWN0IGZ1bGxfbmFtZSwKKwkJCUxpc3BfT2JqZWN0IG5hbWUs
CisJCQlMaXNwX09iamVjdCByZWFkZnVuLAorCQkJYm9vbCB3aG9sZV9idWZmZXIpCiB7Ci0gIGNo
YXIgKnAgPSB4cGFsbG9jICgqYnVmX2FkZHIsIGJ1Zl9zaXplLCBNQVhfTVVMVElCWVRFX0xFTkdU
SCwgLTEsIDEpOwotICBpZiAoISpidWZfYWRkcikKKyAgaWYgKCFOSUxQIChmdWxsX25hbWUpKQor
ICAgIGZyYW1lLT5mdWxsX25hbWUgPSBmdWxsX25hbWU7CisgIGlmICghTklMUCAobmFtZSkpCisg
ICAgZnJhbWUtPm5hbWUgPSBuYW1lOworICBpZiAoIU5JTFAgKGZyYW1lLT5uYW1lKSAmJiBOSUxQ
IChmcmFtZS0+ZnVsbF9uYW1lKSkKICAgICB7Ci0gICAgICBtZW1jcHkgKHAsIGJ1Ziwgb2Zmc2V0
KTsKLSAgICAgIHJlY29yZF91bndpbmRfcHJvdGVjdF9wdHIgKHhmcmVlLCBwKTsKKyAgICAgIGZy
YW1lLT5mdWxsX25hbWUgPSBGZXhwYW5kX2ZpbGVfbmFtZSAoZnJhbWUtPm5hbWUsIFFuaWwpOwog
ICAgIH0KLSAgZWxzZQotICAgIHNldF91bndpbmRfcHJvdGVjdF9wdHIgKGNvdW50LCB4ZnJlZSwg
cCk7Ci0gICpidWZfYWRkciA9IHA7Ci0gIHJldHVybiBwOworICBpZiAoIU5JTFAgKGZyYW1lLT5m
dWxsX25hbWUpICYmIE5JTFAgKGZyYW1lLT5uYW1lKSkKKyAgICB7CisgICAgICBmcmFtZS0+bmFt
ZSA9IEZmaWxlX25hbWVfbm9uZGlyZWN0b3J5IChmcmFtZS0+ZnVsbF9uYW1lKTsKKyAgICB9Cisg
IGZyYW1lLT5zb3VyY2VuYW1lID0gd2lsbF9kdW1wX3AgKCkgPyBmcmFtZS0+bmFtZSA6IGZyYW1l
LT5mdWxsX25hbWU7CisgIGZyYW1lLT5yZWFkZnVuID0gcmVhZGZ1bjsKKyAgZnJhbWUtPndob2xl
X2J1ZmZlciA9IHdob2xlX2J1ZmZlcjsKKwogfQogCisKKwwKKwogLyogUmV0dXJuIHRoZSBzY2Fs
YXIgdmFsdWUgdGhhdCBoYXMgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIG5hbWUgTkFNRS4KICAgIFJh
aXNlICdpbnZhbGlkLXJlYWQtc3ludGF4JyBpZiB0aGVyZSBpcyBubyBzdWNoIGNoYXJhY3Rlci4g
ICovCi1zdGF0aWMgaW50Ci1jaGFyYWN0ZXJfbmFtZV90b19jb2RlIChjaGFyIGNvbnN0ICpuYW1l
LCBwdHJkaWZmX3QgbmFtZV9sZW4sCi0JCQlMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKK2ludAor
Y2hhcmFjdGVyX25hbWVfdG9fY29kZSAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLCBjaGFy
IGNvbnN0ICpuYW1lLCBwdHJkaWZmX3QgbmFtZV9sZW4pCiB7CiAgIC8qIEZvciAiVStYWFhYIiwg
cGFzcyB0aGUgbGVhZGluZyAnKycgdG8gc3RyaW5nX3RvX251bWJlciB0byByZWplY3QKICAgICAg
bW9uc3Ryb3NpdGllcyBsaWtlICJVKy0wMDAwIi4gICovCkBAIC0yODU1LDcgKzQ1MDEsNyBAQCBj
aGFyYWN0ZXJfbmFtZV90b19jb2RlIChjaGFyIGNvbnN0ICpuYW1lLCBwdHJkaWZmX3QgbmFtZV9s
ZW4sCiAgICAgewogICAgICAgQVVUT19TVFJJTkcgKGZvcm1hdCwgIlxcTnslc30iKTsKICAgICAg
IEFVVE9fU1RSSU5HX1dJVEhfTEVOIChuYW1lc3RyLCBuYW1lLCBuYW1lX2xlbik7Ci0gICAgICBp
bnZhbGlkX3N5bnRheF9saXNwIChDQUxMTiAoRmZvcm1hdCwgZm9ybWF0LCBuYW1lc3RyKSwgcmVh
ZGNoYXJmdW4pOworICAgICAgaW52YWxpZF9zeW50YXhfbGlzcCAoZnJhbWUsIENBTExOIChGZm9y
bWF0LCBmb3JtYXQsIG5hbWVzdHIpKTsKICAgICB9CiAKICAgcmV0dXJuIEZJWE5VTVAgKGNvZGUp
ID8gWEZJWE5VTSAoY29kZSkgOiAtMTsKQEAgLTI4NjgsNyArNDUxNCw3IEBAIGNoYXJhY3Rlcl9u
YW1lX3RvX2NvZGUgKGNoYXIgY29uc3QgKm5hbWUsIHB0cmRpZmZfdCBuYW1lX2xlbiwKIC8qIFJl
YWQgYSBjaGFyYWN0ZXIgZXNjYXBlIHNlcXVlbmNlLCBhc3N1bWluZyB3ZSBqdXN0IHJlYWQgYSBi
YWNrc2xhc2gKICAgIGFuZCBvbmUgbW9yZSBjaGFyYWN0ZXIgKG5leHRfY2hhcikuICAqLwogc3Rh
dGljIGludAotcmVhZF9jaGFyX2VzY2FwZSAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGludCBu
ZXh0X2NoYXIpCityZWFkX2NoYXJfZXNjYXBlIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUs
IGludCBuZXh0X2NoYXIpCiB7CiAgIGludCBtb2RpZmllcnMgPSAwOwogICBwdHJkaWZmX3QgbmNv
bnRyb2wgPSAwOwpAQCAtMjg4Miw3ICs0NTI4LDcgQEAgcmVhZF9jaGFyX2VzY2FwZSAoTGlzcF9P
YmplY3QgcmVhZGNoYXJmdW4sIGludCBuZXh0X2NoYXIpCiAgIHN3aXRjaCAoYykKICAgICB7CiAg
ICAgY2FzZSAtMToKLSAgICAgIGVuZF9vZl9maWxlX2Vycm9yICgpOworICAgICAgZW5kX29mX2Zp
bGVfZXJyb3IgKGZyYW1lKTsKIAogICAgIGNhc2UgJ2EnOiBjaHIgPSAnXGEnOyBicmVhazsKICAg
ICBjYXNlICdiJzogY2hyID0gJ1xiJzsgYnJlYWs7CkBAIC0yOTA4LDEzICs0NTU0LDEzIEBAIHJl
YWRfY2hhcl9lc2NhcGUgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBpbnQgbmV4dF9jaGFyKQog
CiAgICAgbW9kX2tleToKICAgICAgIHsKLQlpbnQgYzEgPSBSRUFEQ0hBUjsKKwlpbnQgYzEgPSBS
RUFEQ0hBUiAoZnJhbWUpOwogCWlmIChjMSAhPSAnLScpCiAJICB7CiAJICAgIGlmIChjID09ICdz
JykKIAkgICAgICB7CiAJCS8qIFxzIG5vdCBmb2xsb3dlZCBieSBhIGh5cGhlbiBpcyBTUEMuICAq
LwotCQlVTlJFQUQgKGMxKTsKKwkJVU5SRUFEIChmcmFtZSwgYzEpOwogCQljaHIgPSAnICc7CiAJ
CWJyZWFrOwogCSAgICAgIH0KQEAgLTI5MjMsMTAgKzQ1NjksMTAgQEAgcmVhZF9jaGFyX2VzY2Fw
ZSAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGludCBuZXh0X2NoYXIpCiAJICAgICAgZXJyb3Ig
KCJJbnZhbGlkIGVzY2FwZSBjaGFyIHN5bnRheDogXFwlYyBub3QgZm9sbG93ZWQgYnkgLSIsIGMp
OwogCSAgfQogCW1vZGlmaWVycyB8PSBtb2Q7Ci0JYzEgPSBSRUFEQ0hBUjsKKwljMSA9IFJFQURD
SEFSIChmcmFtZSk7CiAJaWYgKGMxID09ICdcXCcpCiAJICB7Ci0JICAgIG5leHRfY2hhciA9IFJF
QURDSEFSOworCSAgICBuZXh0X2NoYXIgPSBSRUFEQ0hBUiAoZnJhbWUpOwogCSAgICBnb3RvIGFn
YWluOwogCSAgfQogCWNociA9IGMxOwpAQCAtMjkzOCw3ICs0NTg0LDcgQEAgcmVhZF9jaGFyX2Vz
Y2FwZSAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGludCBuZXh0X2NoYXIpCiAgICAgICAgS2Vl
cCBhIGNvdW50IG9mIHRoZW0gYW5kIGFwcGx5IHRoZW0gc2VwYXJhdGVseS4gICovCiAgICAgY2Fz
ZSAnQyc6CiAgICAgICB7Ci0JaW50IGMxID0gUkVBRENIQVI7CisJaW50IGMxID0gUkVBRENIQVIg
KGZyYW1lKTsKIAlpZiAoYzEgIT0gJy0nKQogCSAgZXJyb3IgKCJJbnZhbGlkIGVzY2FwZSBjaGFy
IHN5bnRheDogXFwlYyBub3QgZm9sbG93ZWQgYnkgLSIsIGMpOwogICAgICAgfQpAQCAtMjk0Nywx
MCArNDU5MywxMCBAQCByZWFkX2NoYXJfZXNjYXBlIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwg
aW50IG5leHRfY2hhcikKICAgICBjYXNlICdeJzoKICAgICAgIHsKIAluY29udHJvbCsrOwotCWlu
dCBjMSA9IFJFQURDSEFSOworCWludCBjMSA9IFJFQURDSEFSIChmcmFtZSk7CiAJaWYgKGMxID09
ICdcXCcpCiAJICB7Ci0JICAgIG5leHRfY2hhciA9IFJFQURDSEFSOworCSAgICBuZXh0X2NoYXIg
PSBSRUFEQ0hBUiAoZnJhbWUpOwogCSAgICBnb3RvIGFnYWluOwogCSAgfQogCWNociA9IGMxOwpA
QCAtMjk2NSwxMCArNDYxMSwxMCBAQCByZWFkX2NoYXJfZXNjYXBlIChMaXNwX09iamVjdCByZWFk
Y2hhcmZ1biwgaW50IG5leHRfY2hhcikKIAlpbnQgY291bnQgPSAwOwogCXdoaWxlIChjb3VudCA8
IDIpCiAJICB7Ci0JICAgIGludCBjID0gUkVBRENIQVI7CisJICAgIGludCBjID0gUkVBRENIQVIg
KGZyYW1lKTsKIAkgICAgaWYgKGMgPCAnMCcgfHwgYyA+ICc3JykKIAkgICAgICB7Ci0JCVVOUkVB
RCAoYyk7CisJCVVOUkVBRCAoZnJhbWUsIGMpOwogCQlicmVhazsKIAkgICAgICB9CiAJICAgIGkg
PSAoaSA8PCAzKSArIChjIC0gJzAnKTsKQEAgLTI5ODksMTEgKzQ2MzUsMTEgQEAgcmVhZF9jaGFy
X2VzY2FwZSAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGludCBuZXh0X2NoYXIpCiAJaW50IGNv
dW50ID0gMDsKIAl3aGlsZSAoMSkKIAkgIHsKLQkgICAgaW50IGMgPSBSRUFEQ0hBUjsKKwkgICAg
aW50IGMgPSBSRUFEQ0hBUiAoZnJhbWUpOwogCSAgICBpbnQgZGlnaXQgPSBjaGFyX2hleGRpZ2l0
IChjKTsKIAkgICAgaWYgKGRpZ2l0IDwgMCkKIAkgICAgICB7Ci0JCVVOUkVBRCAoYyk7CisJCVVO
UkVBRCAoZnJhbWUsIGMpOwogCQlicmVhazsKIAkgICAgICB9CiAJICAgIGkgPSAoaSA8PCA0KSAr
IGRpZ2l0OwpAQCAtMzAyNiw3ICs0NjcyLDcgQEAgcmVhZF9jaGFyX2VzY2FwZSAoTGlzcF9PYmpl
Y3QgcmVhZGNoYXJmdW4sIGludCBuZXh0X2NoYXIpCiAJdW5zaWduZWQgaW50IGkgPSAwOwogCWZv
ciAoaW50IGNvdW50ID0gMDsgY291bnQgPCB1bmljb2RlX2hleF9jb3VudDsgY291bnQrKykKIAkg
IHsKLQkgICAgaW50IGMgPSBSRUFEQ0hBUjsKKwkgICAgaW50IGMgPSBSRUFEQ0hBUiAoZnJhbWUp
OwogCSAgICBpZiAoYyA8IDApCiAJICAgICAgZXJyb3IgKCJNYWxmb3JtZWQgVW5pY29kZSBlc2Nh
cGU6IFxcJWMleCIsCiAJCSAgICAgdW5pY29kZV9oZXhfY291bnQgPT0gNCA/ICd1JyA6ICdVJywg
aSk7CkBAIC0zMDQ1LDUwICs0NjkxLDQ5IEBAIHJlYWRfY2hhcl9lc2NhcGUgKExpc3BfT2JqZWN0
IHJlYWRjaGFyZnVuLCBpbnQgbmV4dF9jaGFyKQogICAgIC8qIE5hbWVkIGNoYXJhY3RlcjogXE57
bmFtZX0gKi8KICAgICBjYXNlICdOJzoKICAgICAgIHsKLSAgICAgICAgaW50IGMgPSBSRUFEQ0hB
UjsKLSAgICAgICAgaWYgKGMgIT0gJ3snKQotICAgICAgICAgIGludmFsaWRfc3ludGF4ICgiRXhw
ZWN0ZWQgb3BlbmluZyBicmFjZSBhZnRlciBcXE4iLCByZWFkY2hhcmZ1bik7Ci0gICAgICAgIGNo
YXIgbmFtZVtVTklDT0RFX0NIQVJBQ1RFUl9OQU1FX0xFTkdUSF9CT1VORCArIDFdOwotICAgICAg
ICBib29sIHdoaXRlc3BhY2UgPSBmYWxzZTsKLSAgICAgICAgcHRyZGlmZl90IGxlbmd0aCA9IDA7
Ci0gICAgICAgIHdoaWxlICh0cnVlKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGludCBjID0g
UkVBRENIQVI7Ci0gICAgICAgICAgICBpZiAoYyA8IDApCi0gICAgICAgICAgICAgIGVuZF9vZl9m
aWxlX2Vycm9yICgpOwotICAgICAgICAgICAgaWYgKGMgPT0gJ30nKQotICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGlmIChjID49IDB4ODApCi0gICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBBVVRPX1NUUklORyAoZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiSW52YWxpZCBjaGFyYWN0ZXIgVSslMDRYIGluIGNoYXJhY3RlciBuYW1lIik7Ci0JCWlu
dmFsaWRfc3ludGF4X2xpc3AgKENBTExOIChGZm9ybWF0LCBmb3JtYXQsCi0JCQkJCSAgICBtYWtl
X2ZpeGVkX25hdG51bSAoYykpLAotCQkJCSAgICAgcmVhZGNoYXJmdW4pOwotICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAvKiBUcmVhdCBtdWx0aXBsZSBhZGphY2VudCB3aGl0ZXNwYWNlIGNo
YXJhY3RlcnMgYXMgYQotICAgICAgICAgICAgICAgc2luZ2xlIHNwYWNlIGNoYXJhY3Rlci4gIFRo
aXMgbWFrZXMgaXQgZWFzaWVyIHRvIHVzZQotICAgICAgICAgICAgICAgY2hhcmFjdGVyIG5hbWVz
IGluIGUuZy4gbXVsdGktbGluZSBzdHJpbmdzLiAgKi8KLSAgICAgICAgICAgIGlmIChjX2lzc3Bh
Y2UgKGMpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHdoaXRlc3BhY2Up
Ci0gICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBjID0gJyAnOwot
ICAgICAgICAgICAgICAgIHdoaXRlc3BhY2UgPSB0cnVlOwotICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHdoaXRlc3BhY2UgPSBmYWxzZTsKLSAgICAgICAg
ICAgIG5hbWVbbGVuZ3RoKytdID0gYzsKLSAgICAgICAgICAgIGlmIChsZW5ndGggPj0gc2l6ZW9m
IG5hbWUpCi0gICAgICAgICAgICAgIGludmFsaWRfc3ludGF4ICgiQ2hhcmFjdGVyIG5hbWUgdG9v
IGxvbmciLCByZWFkY2hhcmZ1bik7Ci0gICAgICAgICAgfQotICAgICAgICBpZiAobGVuZ3RoID09
IDApCi0gICAgICAgICAgaW52YWxpZF9zeW50YXggKCJFbXB0eSBjaGFyYWN0ZXIgbmFtZSIsIHJl
YWRjaGFyZnVuKTsKKwlpbnQgYyA9IFJFQURDSEFSIChmcmFtZSk7CisJaWYgKGMgIT0gJ3snKQor
CSAgaW52YWxpZF9zeW50YXggKGZyYW1lLCAiRXhwZWN0ZWQgb3BlbmluZyBicmFjZSBhZnRlciBc
XE4iKTsKKwljaGFyIG5hbWVbVU5JQ09ERV9DSEFSQUNURVJfTkFNRV9MRU5HVEhfQk9VTkQgKyAx
XTsKKwlib29sIHdoaXRlc3BhY2UgPSBmYWxzZTsKKwlwdHJkaWZmX3QgbGVuZ3RoID0gMDsKKwl3
aGlsZSAodHJ1ZSkKKwkgIHsKKwkgICAgaW50IGMgPSBSRUFEQ0hBUiAoZnJhbWUpOworCSAgICBp
ZiAoYyA8IDApCisJICAgICAgZW5kX29mX2ZpbGVfZXJyb3IgKGZyYW1lKTsKKwkgICAgaWYgKGMg
PT0gJ30nKQorCSAgICAgIGJyZWFrOworCSAgICBpZiAoYyA+PSAweDgwKQorCSAgICAgIHsKKwkJ
QVVUT19TVFJJTkcgKGZvcm1hdCwKKwkJCSAgICAgIkludmFsaWQgY2hhcmFjdGVyIFUrJTA0WCBp
biBjaGFyYWN0ZXIgbmFtZSIpOworCQlpbnZhbGlkX3N5bnRheF9saXNwIChmcmFtZSwgQ0FMTE4g
KEZmb3JtYXQsIGZvcm1hdCwKKwkJCQkJCSAgIG1ha2VfZml4ZWRfbmF0bnVtIChjKSkpOworCSAg
ICAgIH0KKwkgICAgLyogVHJlYXQgbXVsdGlwbGUgYWRqYWNlbnQgd2hpdGVzcGFjZSBjaGFyYWN0
ZXJzIGFzIGEKKwkgICAgICAgc2luZ2xlIHNwYWNlIGNoYXJhY3Rlci4gIFRoaXMgbWFrZXMgaXQg
ZWFzaWVyIHRvIHVzZQorCSAgICAgICBjaGFyYWN0ZXIgbmFtZXMgaW4gZS5nLiBtdWx0aS1saW5l
IHN0cmluZ3MuICAqLworCSAgICBpZiAoY19pc3NwYWNlIChjKSkKKwkgICAgICB7CisJCWlmICh3
aGl0ZXNwYWNlKQorCQkgIGNvbnRpbnVlOworCQljID0gJyAnOworCQl3aGl0ZXNwYWNlID0gdHJ1
ZTsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICB3aGl0ZXNwYWNlID0gZmFsc2U7CisJICAg
IG5hbWVbbGVuZ3RoKytdID0gYzsKKwkgICAgaWYgKGxlbmd0aCA+PSBzaXplb2YgbmFtZSkKKwkg
ICAgICBpbnZhbGlkX3N5bnRheCAoZnJhbWUsICJDaGFyYWN0ZXIgbmFtZSB0b28gbG9uZyIpOwor
CSAgfQorCWlmIChsZW5ndGggPT0gMCkKKwkgIGludmFsaWRfc3ludGF4IChmcmFtZSwgIkVtcHR5
IGNoYXJhY3RlciBuYW1lIik7CiAJbmFtZVtsZW5ndGhdID0gJ1wwJzsKIAogCS8qIGNoYXJhY3Rl
cl9uYW1lX3RvX2NvZGUgY2FuIGludm9rZSByZWFkMCwgcmVjdXJzaXZlbHkuCiAJICAgVGhpcyBp
cyB3aHkgcmVhZDAgbmVlZHMgdG8gYmUgcmUtZW50cmFudC4gICovCi0JY2hyID0gY2hhcmFjdGVy
X25hbWVfdG9fY29kZSAobmFtZSwgbGVuZ3RoLCByZWFkY2hhcmZ1bik7CisJY2hyID0gY2hhcmFj
dGVyX25hbWVfdG9fY29kZSAoZnJhbWUsIG5hbWUsIGxlbmd0aCk7CiAJYnJlYWs7CiAgICAgICB9
CiAKQEAgLTMwOTgsMTkgKzQ3NDMsMTkgQEAgcmVhZF9jaGFyX2VzY2FwZSAoTGlzcF9PYmplY3Qg
cmVhZGNoYXJmdW4sIGludCBuZXh0X2NoYXIpCiAgICAgfQogICBlYXNzZXJ0IChjaHIgPj0gMCAm
JiBjaHIgPCAoMSA8PCBDSEFSQUNURVJCSVRTKSk7CiAgIGlmIChjaHIgPCAwIHx8IGNociA+PSAo
MSA8PCBDSEFSQUNURVJCSVRTKSkKLSAgICBpbnZhbGlkX3N5bnRheCAoIkludmFsaWQgY2hhcmFj
dGVyIiwgcmVhZGNoYXJmdW4pOworICAgIGludmFsaWRfc3ludGF4IChmcmFtZSwgIkludmFsaWQg
Y2hhcmFjdGVyIik7CiAKICAgLyogQXBwbHkgQ29udHJvbCBtb2RpZmllcnMsIHVzaW5nIHRoZSBy
dWxlczoKICAgICAgXEMtWCA9IGFzY2lpX2N0cmwobm9tb2QoWCkpIHwgbW9kcyhYKSAgaWYgbm9t
b2QoWCkgaXMgb25lIG9mOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQS1aIGEteiA/IEAgWyBcIF0gXiBfCisJCQkJCQlBLVogYS16ID8gQCBbIFwgXSBe
IF8KIAotICAgICAgICAgICAgWCB8IGN0cmxfbW9kaWZpZXIgICAgICAgICAgICAgICBvdGhlcndp
c2UKKwkgICAgWCB8IGN0cmxfbW9kaWZpZXIgICAgICAgICAgICAgICBvdGhlcndpc2UKIAogICAg
ICB3aGVyZQotICAgICAgICAgbm9tb2QoYykgPSBjIHdpdGhvdXQgbW9kaWZpZXJzCisJIG5vbW9k
KGMpID0gYyB3aXRob3V0IG1vZGlmaWVycwogCSBtb2RzKGMpICA9IHRoZSBtb2RpZmllcnMgb2Yg
YwotICAgICAgICAgYXNjaWlfY3RybChjKSA9IDEyNyAgICAgICBpZiBjID0gJz8nCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgYyAmIDB4MWYgIG90aGVyd2lzZQorCSBhc2NpaV9jdHJsKGMpID0g
MTI3ICAgICAgIGlmIGMgPSAnPycKKwkJCSBjICYgMHgxZiAgb3RoZXJ3aXNlCiAgICovCiAgIHdo
aWxlIChuY29udHJvbCA+IDApCiAgICAgewpAQCAtMzE0NiwxMyArNDc5MSwxMyBAQCBkaWdpdF90
b19udW1iZXIgKGludCBjaGFyYWN0ZXIsIGludCBiYXNlKQogICByZXR1cm4gZGlnaXQgPCBiYXNl
ID8gZGlnaXQgOiAtMTsKIH0KIAotc3RhdGljIHZvaWQKLWludmFsaWRfcmFkaXhfaW50ZWdlciAo
RU1BQ1NfSU5UIHJhZGl4LCBMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKK3ZvaWQKK2ludmFsaWRf
cmFkaXhfaW50ZWdlciAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLCBFTUFDU19JTlQgcmFk
aXgpCiB7CiAgIHN0YXRpYyBjaGFyIGNvbnN0IGZvcm1hdFtdID0gImludGVnZXIsIHJhZGl4ICUi
cEkiZCI7CiAgIGNoYXIgYnVmW3NpemVvZiBmb3JtYXQgLSBzaXplb2YgIiUicEkiZCIgKyBJTlRf
QlVGU0laRV9CT1VORCAocmFkaXgpXTsKICAgc3ByaW50ZiAoYnVmLCBmb3JtYXQsIHJhZGl4KTsK
LSAgaW52YWxpZF9zeW50YXggKGJ1ZiwgcmVhZGNoYXJmdW4pOworICBpbnZhbGlkX3N5bnRheCAo
ZnJhbWUsIGJ1Zik7CiB9CiAKIC8qIFJlYWQgYW4gaW50ZWdlciBpbiByYWRpeCBSQURJWCB1c2lu
ZyBSRUFEQ0hBUkZVTiB0byByZWFkCkBAIC0zMTYwLDggKzQ4MDUsOCBAQCBpbnZhbGlkX3JhZGl4
X2ludGVnZXIgKEVNQUNTX0lOVCByYWRpeCwgTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCiAgICBW
YWx1ZSBpcyB0aGUgaW50ZWdlciByZWFkLgogICAgU2lnbmFsIGFuIGVycm9yIGlmIGVuY291bnRl
cmluZyBpbnZhbGlkIHJlYWQgc3ludGF4LiAgKi8KIAotc3RhdGljIExpc3BfT2JqZWN0Ci1yZWFk
X2ludGVnZXIgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBpbnQgcmFkaXgpCitMaXNwX09iamVj
dAorcmVhZF9pbnRlZ2VyIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUsIGludCByYWRpeCkK
IHsKICAgY2hhciBzdGFja2J1ZlsyMF07CiAgIGNoYXIgKnJlYWRfYnVmZmVyID0gc3RhY2tidWY7
CkBAIC0zMTcxLDExICs0ODE2LDExIEBAIHJlYWRfaW50ZWdlciAoTGlzcF9PYmplY3QgcmVhZGNo
YXJmdW4sIGludCByYWRpeCkKICAgaW50IHZhbGlkID0gLTE7IC8qIDEgaWYgdmFsaWQsIDAgaWYg
bm90LCAtMSBpZiBpbmNvbXBsZXRlLiAgKi8KICAgc3BlY3BkbF9yZWYgY291bnQgPSBTUEVDUERM
X0lOREVYICgpOwogCi0gIGludCBjID0gUkVBRENIQVI7CisgIGludCBjID0gUkVBRENIQVIgKGZy
YW1lKTsKICAgaWYgKGMgPT0gJy0nIHx8IGMgPT0gJysnKQogICAgIHsKICAgICAgICpwKysgPSBj
OwotICAgICAgYyA9IFJFQURDSEFSOworICAgICAgYyA9IFJFQURDSEFSIChmcmFtZSk7CiAgICAg
fQogCiAgIGlmIChjID09ICcwJykKQEAgLTMxODYsNyArNDgzMSw3IEBAIHJlYWRfaW50ZWdlciAo
TGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGludCByYWRpeCkKICAgICAgIC8qIElnbm9yZSByZWR1
bmRhbnQgbGVhZGluZyB6ZXJvcywgc28gdGhlIGJ1ZmZlciBkb2Vzbid0CiAJIGZpbGwgdXAgd2l0
aCB0aGVtLiAgKi8KICAgICAgIGRvCi0JYyA9IFJFQURDSEFSOworCWMgPSBSRUFEQ0hBUiAoZnJh
bWUpOwogICAgICAgd2hpbGUgKGMgPT0gJzAnKTsKICAgICB9CiAKQEAgLTMyMDYsMTMgKzQ4NTEs
MTMgQEAgcmVhZF9pbnRlZ2VyIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwgaW50IHJhZGl4KQog
CSAgcCA9IHJlYWRfYnVmZmVyICsgb2Zmc2V0OwogCX0KICAgICAgICpwKysgPSBjOwotICAgICAg
YyA9IFJFQURDSEFSOworICAgICAgYyA9IFJFQURDSEFSIChmcmFtZSk7CiAgICAgfQogCi0gIFVO
UkVBRCAoYyk7CisgIFVOUkVBRCAoZnJhbWUsIGMpOwogCiAgIGlmICh2YWxpZCAhPSAxKQotICAg
IGludmFsaWRfcmFkaXhfaW50ZWdlciAocmFkaXgsIHJlYWRjaGFyZnVuKTsKKyAgICBpbnZhbGlk
X3JhZGl4X2ludGVnZXIgKGZyYW1lLHJhZGl4KTsKIAogICAqcCA9ICdcMCc7CiAgIHJldHVybiB1
bmJpbmRfdG8gKGNvdW50LCBzdHJpbmdfdG9fbnVtYmVyIChyZWFkX2J1ZmZlciwgcmFkaXgsIE5V
TEwpKTsKQEAgLTMyMjAsMTIgKzQ4NjUsMTIgQEAgcmVhZF9pbnRlZ2VyIChMaXNwX09iamVjdCBy
ZWFkY2hhcmZ1biwgaW50IHJhZGl4KQogDAogCiAvKiBSZWFkIGEgY2hhcmFjdGVyIGxpdGVyYWwg
KHByZWNlZGVkIGJ5IGA/JykuICAqLwotc3RhdGljIExpc3BfT2JqZWN0Ci1yZWFkX2NoYXJfbGl0
ZXJhbCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCitMaXNwX09iamVjdAorcmVhZF9jaGFyX2xp
dGVyYWwgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKIHsKLSAgaW50IGNoID0gUkVBRENI
QVI7CisgIGludCBjaCA9IFJFQURDSEFSIChmcmFtZSk7CiAgIGlmIChjaCA8IDApCi0gICAgZW5k
X29mX2ZpbGVfZXJyb3IgKCk7CisgICAgZW5kX29mX2ZpbGVfZXJyb3IgKGZyYW1lKTsKIAogICAv
KiBBY2NlcHQgYHNpbmdsZSBzcGFjZScgc3ludGF4IGxpa2UgKGxpc3QgPyB4KSB3aGVyZSB0aGUK
ICAgICAgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgU1BDIG9yIFRBQi4KQEAgLTMyNDUsNyArNDg5
MCw3IEBAIHJlYWRfY2hhcl9saXRlcmFsIChMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKICAgICB9
CiAKICAgaWYgKGNoID09ICdcXCcpCi0gICAgY2ggPSByZWFkX2NoYXJfZXNjYXBlIChyZWFkY2hh
cmZ1biwgUkVBRENIQVIpOworICAgIGNoID0gcmVhZF9jaGFyX2VzY2FwZSAoZnJhbWUsIFJFQURD
SEFSIChmcmFtZSkpOwogCiAgIGludCBtb2RpZmllcnMgPSBjaCAmIENIQVJfTU9ESUZJRVJfTUFT
SzsKICAgY2ggJj0gfkNIQVJfTU9ESUZJRVJfTUFTSzsKQEAgLTMyNTMsMjAgKzQ4OTgsMjAgQEAg
cmVhZF9jaGFyX2xpdGVyYWwgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQogICAgIGNoID0gQ0hB
Ul9UT19CWVRFOCAoY2gpOwogICBjaCB8PSBtb2RpZmllcnM7CiAKLSAgaW50IG5jaCA9IFJFQURD
SEFSOwotICBVTlJFQUQgKG5jaCk7CisgIGludCBuY2ggPSBSRUFEQ0hBUiAoZnJhbWUpOworICBV
TlJFQUQgKGZyYW1lLCBuY2gpOwogICBpZiAobmNoIDw9IDMyCiAgICAgICB8fCBuY2ggPT0gJyIn
IHx8IG5jaCA9PSAnXCcnIHx8IG5jaCA9PSAnOycgfHwgbmNoID09ICcoJwogICAgICAgfHwgbmNo
ID09ICcpJyB8fCBuY2ggPT0gJ1snICB8fCBuY2ggPT0gJ10nIHx8IG5jaCA9PSAnIycKICAgICAg
IHx8IG5jaCA9PSAnPycgfHwgbmNoID09ICdgJyAgfHwgbmNoID09ICcsJyB8fCBuY2ggPT0gJy4n
KQogICAgIHJldHVybiBtYWtlX2ZpeG51bSAoY2gpOwogCi0gIGludmFsaWRfc3ludGF4ICgiPyIs
IHJlYWRjaGFyZnVuKTsKKyAgaW52YWxpZF9zeW50YXggKGZyYW1lLCAiPyIpOwogfQogCiAvKiBS
ZWFkIGEgc3RyaW5nIGxpdGVyYWwgKHByZWNlZGVkIGJ5ICciJykuICAqLwotc3RhdGljIExpc3Bf
T2JqZWN0Ci1yZWFkX3N0cmluZ19saXRlcmFsIChMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKK0xp
c3BfT2JqZWN0CityZWFkX3N0cmluZ19saXRlcmFsIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJh
bWUpCiB7CiAgIGNoYXIgc3RhY2tidWZbMTAyNF07CiAgIGNoYXIgKnJlYWRfYnVmZmVyID0gc3Rh
Y2tidWY7CkBAIC0zMjg0LDcgKzQ5MjksNyBAQCByZWFkX3N0cmluZ19saXRlcmFsIChMaXNwX09i
amVjdCByZWFkY2hhcmZ1bikKICAgcHRyZGlmZl90IG5jaGFycyA9IDA7CiAKICAgaW50IGNoOwot
ICB3aGlsZSAoKGNoID0gUkVBRENIQVIpID49IDAgJiYgY2ggIT0gJ1wiJykKKyAgd2hpbGUgKChj
aCA9IFJFQURDSEFSIChmcmFtZSkpID49IDAgJiYgY2ggIT0gJ1wiJykKICAgICB7CiAgICAgICBp
ZiAoZW5kIC0gcCA8IE1BWF9NVUxUSUJZVEVfTEVOR1RIKQogCXsKQEAgLTMyOTksNyArNDk0NCw3
IEBAIHJlYWRfc3RyaW5nX2xpdGVyYWwgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQogICAgICAg
aWYgKGNoID09ICdcXCcpCiAJewogCSAgLyogRmlyc3QgYXBwbHkgc3RyaW5nLXNwZWNpZmljIGVz
Y2FwZSBydWxlczogICovCi0JICBjaCA9IFJFQURDSEFSOworCSAgY2ggPSBSRUFEQ0hBUiAoZnJh
bWUpOwogCSAgc3dpdGNoIChjaCkKIAkgICAgewogCSAgICBjYXNlICdzJzoKQEAgLTMzMTEsNyAr
NDk1Niw3IEBAIHJlYWRfc3RyaW5nX2xpdGVyYWwgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQog
CSAgICAgIC8qIGBcU1BDJyBhbmQgYFxMRicgZ2VuZXJhdGUgbm8gY2hhcmFjdGVycyBhdCBhbGwu
ICAqLwogCSAgICAgIGNvbnRpbnVlOwogCSAgICBkZWZhdWx0OgotCSAgICAgIGNoID0gcmVhZF9j
aGFyX2VzY2FwZSAocmVhZGNoYXJmdW4sIGNoKTsKKwkgICAgICBjaCA9IHJlYWRfY2hhcl9lc2Nh
cGUgKGZyYW1lLCBjaCk7CiAJICAgICAgYnJlYWs7CiAJICAgIH0KIApAQCAtMzMyMiw3ICs0OTY3
LDcgQEAgcmVhZF9zdHJpbmdfbGl0ZXJhbCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCiAJICAg
IGZvcmNlX3NpbmdsZWJ5dGUgPSB0cnVlOwogCSAgZWxzZSBpZiAoISBBU0NJSV9DSEFSX1AgKGNo
KSkKIAkgICAgZm9yY2VfbXVsdGlieXRlID0gdHJ1ZTsKLQkgIGVsc2UJCS8qIEkuZS4gQVNDSUlf
Q0hBUl9QIChjaCkuICAqLworCSAgZWxzZSAgICAgICAgICAvKiBJLmUuIEFTQ0lJX0NIQVJfUCAo
Y2gpLiAgKi8KIAkgICAgewogCSAgICAgIC8qIEFsbG93IGBcQy1TUEMnIGFuZCBgXF5TUEMnLiAg
VGhpcyBpcyBkb25lIGhlcmUgYmVjYXVzZQogCQkgdGhlIGxpdGVyYWxzID9cQy1TUEMgYW5kID9c
XlNQQyAocmF0aGVyIGluY29uc2lzdGVudGx5KQpAQCAtMzM1Niw3ICs1MDAxLDcgQEAgcmVhZF9z
dHJpbmdfbGl0ZXJhbCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCiAKIAkgIC8qIEFueSBtb2Rp
ZmllcnMgcmVtYWluaW5nIGFyZSBpbnZhbGlkLiAgKi8KIAkgIGlmIChtb2RpZmllcnMpCi0JICAg
IGludmFsaWRfc3ludGF4ICgiSW52YWxpZCBtb2RpZmllciBpbiBzdHJpbmciLCByZWFkY2hhcmZ1
bik7CisJICAgIGludmFsaWRfc3ludGF4IChmcmFtZSwgIkludmFsaWQgbW9kaWZpZXIgaW4gc3Ry
aW5nIik7CiAJICBwICs9IENIQVJfU1RSSU5HIChjaCwgKHVuc2lnbmVkIGNoYXIgKikgcCk7CiAJ
fQogICAgICAgZWxzZQpAQCAtMzM3MSw3ICs1MDE2LDcgQEAgcmVhZF9zdHJpbmdfbGl0ZXJhbCAo
TGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCiAgICAgfQogCiAgIGlmIChjaCA8IDApCi0gICAgZW5k
X29mX2ZpbGVfZXJyb3IgKCk7CisgICAgZW5kX29mX2ZpbGVfZXJyb3IgKGZyYW1lKTsKIAogICBp
ZiAoIWZvcmNlX211bHRpYnl0ZSAmJiBmb3JjZV9zaW5nbGVieXRlKQogICAgIHsKQEAgLTMzOTYs
MTQgKzUwNDEsMTQgQEAgaGFzaF90YWJsZV9mcm9tX3BsaXN0IChMaXNwX09iamVjdCBwbGlzdCkK
ICAgTGlzcF9PYmplY3QgKnBhciA9IHBhcmFtczsKIAogICAvKiBUaGlzIGlzIHJlcGV0aXRpdmUg
YnV0IGZhc3QgYW5kIHNpbXBsZS4gICovCi0jZGVmaW5lIEFERFBBUkFNKG5hbWUpCQkJCQlcCi0g
IGRvIHsJCQkJCQkJXAotICAgIExpc3BfT2JqZWN0IHZhbCA9IHBsaXN0X2dldCAocGxpc3QsIFEg
IyMgbmFtZSk7CVwKLSAgICBpZiAoIU5JTFAgKHZhbCkpCQkJCQlcCi0gICAgICB7CQkJCQkJCVwK
LQkqcGFyKysgPSBRQyAjIyBuYW1lOwkJCQlcCi0JKnBhcisrID0gdmFsOwkJCQkJXAotICAgICAg
fQkJCQkJCQlcCisjZGVmaW5lIEFERFBBUkFNKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIExpc3BfT2JqZWN0IHZhbCA9IHBsaXN0X2dldCAocGxpc3QsIFEg
IyMgbmFtZSk7ICAgICBcCisgICAgaWYgKCFOSUxQICh2YWwpKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorCSpwYXIrKyA9IFFDICMjIG5hbWU7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKwkqcGFyKysgPSB2YWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgfSB3aGlsZSAoMCkKIAogICBBRERQQVJBTSAodGVzdCk7CkBAIC0zNDY3
LDQ0ICs1MTEyLDQzIEBAIHZlY3Rvcl9mcm9tX3Jldl9saXN0IChMaXNwX09iamVjdCBlbGVtcykK
ICAgcmV0dXJuIG9iajsKIH0KIAotc3RhdGljIExpc3BfT2JqZWN0IGdldF9sYXp5X3N0cmluZyAo
TGlzcF9PYmplY3QgdmFsKTsKIAotc3RhdGljIExpc3BfT2JqZWN0Ci1ieXRlY29kZV9mcm9tX3Jl
dl9saXN0IChMaXNwX09iamVjdCBlbGVtcywgTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCitMaXNw
X09iamVjdAorYnl0ZWNvZGVfZnJvbV9yZXZfbGlzdCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZy
YW1lLCBMaXNwX09iamVjdCBlbGVtcykKIHsKICAgTGlzcF9PYmplY3Qgb2JqID0gdmVjdG9yX2Zy
b21fcmV2X2xpc3QgKGVsZW1zKTsKICAgTGlzcF9PYmplY3QgKnZlYyA9IFhWRUNUT1IgKG9iaikt
PmNvbnRlbnRzOwogICBwdHJkaWZmX3Qgc2l6ZSA9IEFTSVpFIChvYmopOwogCi0gIGlmIChpbmZp
bGUgJiYgc2l6ZSA+PSBDTE9TVVJFX0NPTlNUQU5UUykKKyAgaWYgKGZyYW1lLT5pbnB1dC5mLnN0
cmVhbSAmJiBzaXplID49IENMT1NVUkVfQ09OU1RBTlRTKQogICAgIHsKICAgICAgIC8qIEFsd2F5
cyByZWFkICdsYXppbHktbG9hZGVkJyBieXRlY29kZSAoZ2VuZXJhdGVkIGJ5IHRoZQotICAgICAg
ICAgYGJ5dGUtY29tcGlsZS1keW5hbWljJyBmZWF0dXJlIHByaW9yIHRvIEVtYWNzIDMwKSBlYWdl
cmx5LCB0bwotICAgICAgICAgYXZvaWQgY29kZSBpbiB0aGUgZmFzdCBwYXRoIGR1cmluZyBleGVj
dXRpb24uICAqLworCSBgYnl0ZS1jb21waWxlLWR5bmFtaWMnIGZlYXR1cmUgcHJpb3IgdG8gRW1h
Y3MgMzApIGVhZ2VybHksIHRvCisJIGF2b2lkIGNvZGUgaW4gdGhlIGZhc3QgcGF0aCBkdXJpbmcg
ZXhlY3V0aW9uLiAgKi8KICAgICAgIGlmIChDT05TUCAodmVjW0NMT1NVUkVfQ09ERV0pCi0gICAg
ICAgICAgJiYgRklYTlVNUCAoWENEUiAodmVjW0NMT1NVUkVfQ09ERV0pKSkKLSAgICAgICAgdmVj
W0NMT1NVUkVfQ09ERV0gPSBnZXRfbGF6eV9zdHJpbmcgKHZlY1tDTE9TVVJFX0NPREVdKTsKKwkg
ICYmIEZJWE5VTVAgKFhDRFIgKHZlY1tDTE9TVVJFX0NPREVdKSkpCisJdmVjW0NMT1NVUkVfQ09E
RV0gPSBnZXRfbGF6eV9zdHJpbmcgKGZyYW1lLCB2ZWNbQ0xPU1VSRV9DT0RFXSk7CiAKICAgICAg
IC8qIExhemlseS1sb2FkZWQgYnl0ZWNvZGUgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIGNvbnN0YW50
IHNsb3QgYmVpbmcgbmlsCi0gICAgICAgICBhbmQgdGhlIGJ5dGVjb2RlIHNsb3QgYSAobGF6aWx5
IGxvYWRlZCkgc3RyaW5nIGNvbnRhaW5pbmcgdGhlCi0gICAgICAgICBwcmludCByZXByZXNlbnRh
dGlvbiBvZiAoQllURUNPREUgLiBDT05TVEFOVFMpLiAgKi8KKwkgYW5kIHRoZSBieXRlY29kZSBz
bG90IGEgKGxhemlseSBsb2FkZWQpIHN0cmluZyBjb250YWluaW5nIHRoZQorCSBwcmludCByZXBy
ZXNlbnRhdGlvbiBvZiAoQllURUNPREUgLiBDT05TVEFOVFMpLiAgKi8KICAgICAgIGlmIChOSUxQ
ICh2ZWNbQ0xPU1VSRV9DT05TVEFOVFNdKSAmJiBTVFJJTkdQICh2ZWNbQ0xPU1VSRV9DT0RFXSkp
Ci0gICAgICAgIHsKLSAgICAgICAgICBMaXNwX09iamVjdCBlbmMgPSB2ZWNbQ0xPU1VSRV9DT0RF
XTsKKwl7CisJICBMaXNwX09iamVjdCBlbmMgPSB2ZWNbQ0xPU1VSRV9DT0RFXTsKIAkgIGVhc3Nl
cnQgKCFTVFJJTkdfTVVMVElCWVRFIChlbmMpKTsKIAkgIC8qIFRoZSBzdHJpbmcgKGFsd2F5cyB1
bmlieXRlKSBtdXN0IGJlIGRlY29kZWQgdG8gYmUgcGFyc2VkLiAgKi8KIAkgIGVuYyA9IEZkZWNv
ZGVfY29kaW5nX3N0cmluZyAoZW5jLAotCQkJCSAgICAgICBFUSAocmVhZGNoYXJmdW4sCi0JCQkJ
CSAgIFFnZXRfZW1hY3NfbXVsZV9maWxlX2NoYXIpCisJCQkJICAgICAgIChGUk9NX0ZJTEVfUCAo
ZnJhbWUtPmludHlwZSkKKwkJCQkJJiYgZnJhbWUtPmlucHV0LmYubXVsZSkKIAkJCQkgICAgICAg
PyBRZW1hY3NfbXVsZSA6IFF1dGZfOF9lbWFjcywKIAkJCQkgICAgICAgUXQsIFFuaWwpOwogCSAg
TGlzcF9PYmplY3QgcGFpciA9IEZyZWFkIChlbmMpOwotICAgICAgICAgIGlmICghQ09OU1AgKHBh
aXIpKQotCSAgICBpbnZhbGlkX3N5bnRheCAoIkludmFsaWQgYnl0ZS1jb2RlIG9iamVjdCIsIHJl
YWRjaGFyZnVuKTsKKwkgIGlmICghQ09OU1AgKHBhaXIpKQorCSAgICBpbnZhbGlkX3N5bnRheCAo
ZnJhbWUsICJJbnZhbGlkIGJ5dGUtY29kZSBvYmplY3QiKTsKIAotICAgICAgICAgIHZlY1tDTE9T
VVJFX0NPREVdID0gWENBUiAocGFpcik7Ci0gICAgICAgICAgdmVjW0NMT1NVUkVfQ09OU1RBTlRT
XSA9IFhDRFIgKHBhaXIpOwotICAgICAgICB9CisJICB2ZWNbQ0xPU1VSRV9DT0RFXSA9IFhDQVIg
KHBhaXIpOworCSAgdmVjW0NMT1NVUkVfQ09OU1RBTlRTXSA9IFhDRFIgKHBhaXIpOworCX0KICAg
ICB9CiAKICAgaWYgKCEoc2l6ZSA+PSBDTE9TVVJFX1NUQUNLX0RFUFRIICYmIHNpemUgPD0gQ0xP
U1VSRV9JTlRFUkFDVElWRSArIDEKQEAgLTM1MTYsMTkgKzUxNjAsMTkgQEAgYnl0ZWNvZGVfZnJv
bV9yZXZfbGlzdCAoTGlzcF9PYmplY3QgZWxlbXMsIExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQog
CSAgICAgJiYgc2l6ZSA+IENMT1NVUkVfU1RBQ0tfREVQVEgKIAkgICAgICYmIChGSVhOQVRQICh2
ZWNbQ0xPU1VSRV9TVEFDS19ERVBUSF0pKSkKIAkgICAgfHwgKENPTlNQICh2ZWNbQ0xPU1VSRV9D
T0RFXSkgLyogSW50ZXJwcmV0ZWQgZnVuY3Rpb24uICAqLwotCSAgICAgICAgJiYgKENPTlNQICh2
ZWNbQ0xPU1VSRV9DT05TVEFOVFNdKQotCSAgICAgICAgICAgIHx8IE5JTFAgKHZlY1tDTE9TVVJF
X0NPTlNUQU5UU10pKSkpKSkKLSAgICBpbnZhbGlkX3N5bnRheCAoIkludmFsaWQgYnl0ZS1jb2Rl
IG9iamVjdCIsIHJlYWRjaGFyZnVuKTsKKwkJJiYgKENPTlNQICh2ZWNbQ0xPU1VSRV9DT05TVEFO
VFNdKQorCQkgICAgfHwgTklMUCAodmVjW0NMT1NVUkVfQ09OU1RBTlRTXSkpKSkpKQorICAgIGlu
dmFsaWRfc3ludGF4IChmcmFtZSwgIkludmFsaWQgYnl0ZS1jb2RlIG9iamVjdCIpOwogCiAgIGlm
IChTVFJJTkdQICh2ZWNbQ0xPU1VSRV9DT0RFXSkpCiAgICAgewogICAgICAgaWYgKFNUUklOR19N
VUxUSUJZVEUgKHZlY1tDTE9TVVJFX0NPREVdKSkKLSAgICAgICAgLyogQllURVNUUiBtdXN0IGhh
dmUgYmVlbiBwcm9kdWNlZCBieSBFbWFjcyAyMC4yIG9yIGVhcmxpZXIKLSAgICAgICAgICAgYmVj
YXVzZSBpdCBwcm9kdWNlZCBhIHJhdyA4LWJpdCBzdHJpbmcgZm9yIGJ5dGUtY29kZSBhbmQKLSAg
ICAgICAgICAgbm93IHN1Y2ggYSBieXRlLWNvZGUgc3RyaW5nIGlzIGxvYWRlZCBhcyBtdWx0aWJ5
dGUgd2l0aAotICAgICAgICAgICByYXcgOC1iaXQgY2hhcmFjdGVycyBjb252ZXJ0ZWQgdG8gbXVs
dGlieXRlIGZvcm0uCi0gICAgICAgICAgIENvbnZlcnQgdGhlbSBiYWNrIHRvIHRoZSBvcmlnaW5h
bCB1bmlieXRlIGZvcm0uICAqLwotICAgICAgICB2ZWNbQ0xPU1VSRV9DT0RFXSA9IEZzdHJpbmdf
YXNfdW5pYnl0ZSAodmVjW0NMT1NVUkVfQ09ERV0pOworCS8qIEJZVEVTVFIgbXVzdCBoYXZlIGJl
ZW4gcHJvZHVjZWQgYnkgRW1hY3MgMjAuMiBvciBlYXJsaWVyCisJICAgYmVjYXVzZSBpdCBwcm9k
dWNlZCBhIHJhdyA4LWJpdCBzdHJpbmcgZm9yIGJ5dGUtY29kZSBhbmQKKwkgICBub3cgc3VjaCBh
IGJ5dGUtY29kZSBzdHJpbmcgaXMgbG9hZGVkIGFzIG11bHRpYnl0ZSB3aXRoCisJICAgcmF3IDgt
Yml0IGNoYXJhY3RlcnMgY29udmVydGVkIHRvIG11bHRpYnl0ZSBmb3JtLgorCSAgIENvbnZlcnQg
dGhlbSBiYWNrIHRvIHRoZSBvcmlnaW5hbCB1bmlieXRlIGZvcm0uICAqLworCXZlY1tDTE9TVVJF
X0NPREVdID0gRnN0cmluZ19hc191bmlieXRlICh2ZWNbQ0xPU1VSRV9DT0RFXSk7CiAKICAgICAg
IC8qIEJ5dGVjb2RlIG11c3QgYmUgaW1tb3ZhYmxlLiAgKi8KICAgICAgIHBpbl9zdHJpbmcgKHZl
Y1tDTE9TVVJFX0NPREVdKTsKQEAgLTM1MzgsMTkgKzUxODIsMTkgQEAgYnl0ZWNvZGVfZnJvbV9y
ZXZfbGlzdCAoTGlzcF9PYmplY3QgZWxlbXMsIExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQogICBy
ZXR1cm4gb2JqOwogfQogCi1zdGF0aWMgTGlzcF9PYmplY3QKLWNoYXJfdGFibGVfZnJvbV9yZXZf
bGlzdCAoTGlzcF9PYmplY3QgZWxlbXMsIExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQorTGlzcF9P
YmplY3QKK2NoYXJfdGFibGVfZnJvbV9yZXZfbGlzdCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZy
YW1lLCBMaXNwX09iamVjdCBlbGVtcykKIHsKICAgTGlzcF9PYmplY3Qgb2JqID0gdmVjdG9yX2Zy
b21fcmV2X2xpc3QgKGVsZW1zKTsKICAgaWYgKEFTSVpFIChvYmopIDwgQ0hBUl9UQUJMRV9TVEFO
REFSRF9TTE9UUykKLSAgICBpbnZhbGlkX3N5bnRheCAoIkludmFsaWQgc2l6ZSBjaGFyLXRhYmxl
IiwgcmVhZGNoYXJmdW4pOworICAgIGludmFsaWRfc3ludGF4IChmcmFtZSwgIkludmFsaWQgc2l6
ZSBjaGFyLXRhYmxlIik7CiAgIFhTRVRQVkVDVFlQRSAoWFZFQ1RPUiAob2JqKSwgUFZFQ19DSEFS
X1RBQkxFKTsKICAgcmV0dXJuIG9iajsKIAogfQogCi1zdGF0aWMgTGlzcF9PYmplY3QKLXN1Yl9j
aGFyX3RhYmxlX2Zyb21fcmV2X2xpc3QgKExpc3BfT2JqZWN0IGVsZW1zLCBMaXNwX09iamVjdCBy
ZWFkY2hhcmZ1bikKK0xpc3BfT2JqZWN0CitzdWJfY2hhcl90YWJsZV9mcm9tX3Jldl9saXN0IChy
ZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUsIExpc3BfT2JqZWN0IGVsZW1zKQogewogICAvKiBB
IHN1Yi1jaGFyLXRhYmxlIGNhbid0IGJlIHJlYWQgYXMgYSByZWd1bGFyIHZlY3RvciBiZWNhdXNl
IG9mIHR3bwogICAgICBDIGludGVnZXIgZmllbGRzLiAgKi8KQEAgLTM1ODEsMjMgKzUyMjUsMjMg
QEAgc3ViX2NoYXJfdGFibGVfZnJvbV9yZXZfbGlzdCAoTGlzcF9PYmplY3QgZWxlbXMsIExpc3Bf
T2JqZWN0IHJlYWRjaGFyZnVuKQogICByZXR1cm4gdGJsOwogfQogCi1zdGF0aWMgTGlzcF9PYmpl
Y3QKLXN0cmluZ19wcm9wc19mcm9tX3Jldl9saXN0IChMaXNwX09iamVjdCBlbGVtcywgTGlzcF9P
YmplY3QgcmVhZGNoYXJmdW4pCitMaXNwX09iamVjdAorc3RyaW5nX3Byb3BzX2Zyb21fcmV2X2xp
c3QgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwgTGlzcF9PYmplY3QgZWxlbXMpCiB7CiAg
IGVsZW1zID0gRm5yZXZlcnNlIChlbGVtcyk7CiAgIGlmIChOSUxQIChlbGVtcykgfHwgIVNUUklO
R1AgKFhDQVIgKGVsZW1zKSkpCi0gICAgaW52YWxpZF9zeW50YXggKCIjIiwgcmVhZGNoYXJmdW4p
OworICAgIGludmFsaWRfc3ludGF4IChmcmFtZSwgIiMiKTsKICAgTGlzcF9PYmplY3Qgb2JqID0g
WENBUiAoZWxlbXMpOwogICBmb3IgKExpc3BfT2JqZWN0IHRsID0gWENEUiAoZWxlbXMpOyAhTklM
UCAodGwpOykKICAgICB7CiAgICAgICBMaXNwX09iamVjdCBiZWcgPSBYQ0FSICh0bCk7CiAgICAg
ICB0bCA9IFhDRFIgKHRsKTsKICAgICAgIGlmIChOSUxQICh0bCkpCi0JaW52YWxpZF9zeW50YXgg
KCJJbnZhbGlkIHN0cmluZyBwcm9wZXJ0eSBsaXN0IiwgcmVhZGNoYXJmdW4pOworCWludmFsaWRf
c3ludGF4IChmcmFtZSwgIkludmFsaWQgc3RyaW5nIHByb3BlcnR5IGxpc3QiKTsKICAgICAgIExp
c3BfT2JqZWN0IGVuZCA9IFhDQVIgKHRsKTsKICAgICAgIHRsID0gWENEUiAodGwpOwogICAgICAg
aWYgKE5JTFAgKHRsKSkKLQlpbnZhbGlkX3N5bnRheCAoIkludmFsaWQgc3RyaW5nIHByb3BlcnR5
IGxpc3QiLCByZWFkY2hhcmZ1bik7CisJaW52YWxpZF9zeW50YXggKGZyYW1lLCAiSW52YWxpZCBz
dHJpbmcgcHJvcGVydHkgbGlzdCIpOwogICAgICAgTGlzcF9PYmplY3QgcGxpc3QgPSBYQ0FSICh0
bCk7CiAgICAgICB0bCA9IFhDRFIgKHRsKTsKICAgICAgIEZzZXRfdGV4dF9wcm9wZXJ0aWVzIChi
ZWcsIGVuZCwgcGxpc3QsIG9iaik7CkBAIC0zNjA2LDM1ICs1MjUwLDM1IEBAIHN0cmluZ19wcm9w
c19mcm9tX3Jldl9saXN0IChMaXNwX09iamVjdCBlbGVtcywgTGlzcF9PYmplY3QgcmVhZGNoYXJm
dW4pCiB9CiAKIC8qIFJlYWQgYSBib29sIHZlY3RvciAocHJlY2VkZWQgYnkgIiMmIikuICAqLwot
c3RhdGljIExpc3BfT2JqZWN0Ci1yZWFkX2Jvb2xfdmVjdG9yIChMaXNwX09iamVjdCByZWFkY2hh
cmZ1bikKK0xpc3BfT2JqZWN0CityZWFkX2Jvb2xfdmVjdG9yIChyZWdpc3RlciBscmVhZF9mcmFt
ZSAqZnJhbWUpCiB7CiAgIEVNQUNTX0lOVCBsZW5ndGggPSAwOwogICBmb3IgKDs7KQogICAgIHsK
LSAgICAgIGludCBjID0gUkVBRENIQVI7CisgICAgICBpbnQgYyA9IFJFQURDSEFSIChmcmFtZSk7
CiAgICAgICBpZiAoYyA8ICcwJyB8fCBjID4gJzknKQogCXsKIAkgIGlmIChjICE9ICciJykKLQkg
ICAgaW52YWxpZF9zeW50YXggKCIjJiIsIHJlYWRjaGFyZnVuKTsKKwkgICAgaW52YWxpZF9zeW50
YXggKGZyYW1lLCAiIyYiKTsKIAkgIGJyZWFrOwogCX0KICAgICAgIGlmIChja2RfbXVsICgmbGVu
Z3RoLCBsZW5ndGgsIDEwKQogCSAgfHwgY2tkX2FkZCAoJmxlbmd0aCwgbGVuZ3RoLCBjIC0gJzAn
KSkKLQlpbnZhbGlkX3N5bnRheCAoIiMmIiwgcmVhZGNoYXJmdW4pOworCWludmFsaWRfc3ludGF4
IChmcmFtZSwgIiMmIik7CiAgICAgfQogICBpZiAoQk9PTF9WRUNUT1JfTEVOR1RIX01BWCA8IGxl
bmd0aCkKLSAgICBpbnZhbGlkX3N5bnRheCAoIiMmIiwgcmVhZGNoYXJmdW4pOworICAgIGludmFs
aWRfc3ludGF4IChmcmFtZSwgIiMmIik7CiAKICAgcHRyZGlmZl90IHNpemVfaW5fY2hhcnMgPSBi
b29sX3ZlY3Rvcl9ieXRlcyAobGVuZ3RoKTsKLSAgTGlzcF9PYmplY3Qgc3RyID0gcmVhZF9zdHJp
bmdfbGl0ZXJhbCAocmVhZGNoYXJmdW4pOworICBMaXNwX09iamVjdCBzdHIgPSByZWFkX3N0cmlu
Z19saXRlcmFsIChmcmFtZSk7CiAgIGlmIChTVFJJTkdfTVVMVElCWVRFIChzdHIpCiAgICAgICB8
fCAhKHNpemVfaW5fY2hhcnMgPT0gU0NIQVJTIChzdHIpCi0JICAgLyogV2UgdXNlZCB0byBwcmlu
dCAxIGNoYXIgdG9vIG1hbnkgd2hlbiB0aGUgbnVtYmVyIG9mIGJpdHMKLQkgICAgICB3YXMgYSBt
dWx0aXBsZSBvZiA4LiAgQWNjZXB0IHN1Y2ggaW5wdXQgaW4gY2FzZSBpdCBjYW1lCi0JICAgICAg
ZnJvbSBhbiBvbGQgdmVyc2lvbi4gICovCisvKiBXZSB1c2VkIHRvIHByaW50IDEgY2hhciB0b28g
bWFueSB3aGVuIHRoZSBudW1iZXIgb2YgYml0cworICAgd2FzIGEgbXVsdGlwbGUgb2YgOC4gIEFj
Y2VwdCBzdWNoIGlucHV0IGluIGNhc2UgaXQgY2FtZQorICAgZnJvbSBhbiBvbGQgdmVyc2lvbi4g
ICovCiAJICAgfHwgbGVuZ3RoID09IChTQ0hBUlMgKHN0cikgLSAxKSAqIEJPT0xfVkVDVE9SX0JJ
VFNfUEVSX0NIQVIpKQotICAgIGludmFsaWRfc3ludGF4ICgiIyYuLi4iLCByZWFkY2hhcmZ1bik7
CisgICAgaW52YWxpZF9zeW50YXggKGZyYW1lLCAiIyYuLi4iKTsKIAogICBMaXNwX09iamVjdCBv
YmogPSBtYWtlX3VuaW5pdF9ib29sX3ZlY3RvciAobGVuZ3RoKTsKICAgdW5zaWduZWQgY2hhciAq
ZGF0YSA9IGJvb2xfdmVjdG9yX3VjaGFyX2RhdGEgKG9iaik7CkBAIC0zNjQ4LDE0ICs1MjkyLDE0
IEBAIHJlYWRfYm9vbF92ZWN0b3IgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQogLyogU2tpcCAo
YW5kIG9wdGlvbmFsbHkgcmVtZW1iZXIpIGEgbGF6aWx5LWxvYWRlZCBzdHJpbmcKICAgIHByZWNl
ZGVkIGJ5ICIjQCIuICBSZXR1cm4gdHJ1ZSBpZiB0aGlzIHdhcyBhIG5vcm1hbCBza2lwLAogICAg
ZmFsc2UgaWYgd2UgcmVhZCAjQDAwICh3aGljaCBza2lwcyB0byBFT0IvRU9GKS4gICovCi1zdGF0
aWMgYm9vbAotc2tpcF9sYXp5X3N0cmluZyAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCitib29s
Citza2lwX2xhenlfc3RyaW5nIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUpCiB7CiAgIHB0
cmRpZmZfdCBuc2tpcCA9IDA7CiAgIHB0cmRpZmZfdCBkaWdpdHMgPSAwOwogICBmb3IgKDs7KQog
ICAgIHsKLSAgICAgIGludCBjID0gUkVBRENIQVI7CisgICAgICBpbnQgYyA9IFJFQURDSEFSIChm
cmFtZSk7CiAgICAgICBpZiAoYyA8ICcwJyB8fCBjID4gJzknKQogCXsKIAkgIGlmIChuc2tpcCA+
IDApCkBAIC0zNjY1LDM1ICs1MzA5LDM1IEBAIHNraXBfbGF6eV9zdHJpbmcgKExpc3BfT2JqZWN0
IHJlYWRjaGFyZnVuKQogCSAgICAgICBhIHNwYWNlLiAgKi8KIAkgICAgbnNraXAtLTsKIAkgIGVs
c2UKLQkgICAgVU5SRUFEIChjKTsKKwkgICAgVU5SRUFEIChmcmFtZSwgYyk7CiAJICBicmVhazsK
IAl9CiAgICAgICBpZiAoY2tkX211bCAoJm5za2lwLCBuc2tpcCwgMTApCiAJICB8fCBja2RfYWRk
ICgmbnNraXAsIG5za2lwLCBjIC0gJzAnKSkKLQlpbnZhbGlkX3N5bnRheCAoIiNAIiwgcmVhZGNo
YXJmdW4pOworCWludmFsaWRfc3ludGF4IChmcmFtZSwgIiNAIik7CiAgICAgICBkaWdpdHMrKzsK
ICAgICAgIGlmIChkaWdpdHMgPT0gMiAmJiBuc2tpcCA9PSAwKQogCXsKIAkgIC8qICNAMDAgbWVh
bnMgInJlYWQgbmlsIGFuZCBza2lwIHRvIGVuZCIgKi8KLQkgIHNraXBfZHluX2VvZiAocmVhZGNo
YXJmdW4pOworCSAgc2tpcF9keW5fZW9mIChmcmFtZSk7CiAJICByZXR1cm4gZmFsc2U7CiAJfQog
ICAgIH0KIAotICBpZiAobG9hZF9mb3JjZV9kb2Nfc3RyaW5ncyAmJiBGUk9NX0ZJTEVfUCAocmVh
ZGNoYXJmdW4pKQorICBpZiAobG9hZF9mb3JjZV9kb2Nfc3RyaW5ncyAmJiBGUk9NX0ZJTEVfUCAo
ZnJhbWUtPmludHlwZSkpCiAgICAgewogICAgICAgLyogSWYgd2UgYXJlIHN1cHBvc2VkIHRvIGZv
cmNlIGRvYyBzdHJpbmdzIGludG8gY29yZSByaWdodCBub3csCiAJIHJlY29yZCB0aGUgbGFzdCBz
dHJpbmcgdGhhdCB3ZSBza2lwcGVkLAogCSBhbmQgcmVjb3JkIHdoZXJlIGluIHRoZSBmaWxlIGl0
IGNvbWVzIGZyb20uICAqLwogCiAgICAgICAvKiBGaXJzdCBleGNoYW5nZSB0aGUgdHdvIHNhdmVk
X3N0cmluZ3MuICAqLwotICAgICAgc3RhdGljX2Fzc2VydCAoQVJSQVlFTFRTIChzYXZlZF9zdHJp
bmdzKSA9PSAyKTsKLSAgICAgIHN0cnVjdCBzYXZlZF9zdHJpbmcgdCA9IHNhdmVkX3N0cmluZ3Nb
MF07Ci0gICAgICBzYXZlZF9zdHJpbmdzWzBdID0gc2F2ZWRfc3RyaW5nc1sxXTsKLSAgICAgIHNh
dmVkX3N0cmluZ3NbMV0gPSB0OworICAgICAgc3RhdGljX2Fzc2VydCAoQVJSQVlFTFRTIChmcmFt
ZS0+c2F2ZWRfc3RyaW5ncykgPT0gMik7CisgICAgICBzdHJ1Y3Qgc2F2ZWRfc3RyaW5nIHQgPSBm
cmFtZS0+c2F2ZWRfc3RyaW5nc1swXTsKKyAgICAgIGZyYW1lLT5zYXZlZF9zdHJpbmdzWzBdID0g
ZnJhbWUtPnNhdmVkX3N0cmluZ3NbMV07CisgICAgICBmcmFtZS0+c2F2ZWRfc3RyaW5nc1sxXSA9
IHQ7CiAKICAgICAgIGVudW0geyBleHRyYSA9IDEwMCB9OwotICAgICAgc3RydWN0IHNhdmVkX3N0
cmluZyAqc3MgPSAmc2F2ZWRfc3RyaW5nc1swXTsKKyAgICAgIHN0cnVjdCBzYXZlZF9zdHJpbmcg
KnNzID0gJihmcmFtZS0+c2F2ZWRfc3RyaW5nc1swXSk7CiAgICAgICBpZiAoc3MtPnNpemUgPT0g
MCkKIAl7CiAJICBzcy0+c2l6ZSA9IG5za2lwICsgZXh0cmE7CkBAIC0zNzA1LDE0ICs1MzQ5LDE0
IEBAIHNraXBfbGF6eV9zdHJpbmcgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQogCSAgc3MtPnN0
cmluZyA9IHhyZWFsbG9jIChzcy0+c3RyaW5nLCBzcy0+c2l6ZSk7CiAJfQogCi0gICAgICBmaWxl
X3N0cmVhbSBpbnN0cmVhbSA9IGluZmlsZS0+c3RyZWFtOwotICAgICAgc3MtPnBvc2l0aW9uID0g
KGZpbGVfdGVsbCAoaW5zdHJlYW0pIC0gaW5maWxlLT5sb29rYWhlYWQpOworICAgICAgZmlsZV9z
dHJlYW0gaW5zdHJlYW0gPSBmcmFtZS0+aW5wdXQuZi5zdHJlYW07CisgICAgICBzcy0+cG9zaXRp
b24gPSAoZmlsZV90ZWxsIChpbnN0cmVhbSkgLSBmcmFtZS0+aW5wdXQuZi5sb29rYWhlYWQpOwog
CiAgICAgICAvKiBDb3B5IHRoYXQgbWFueSBieXRlcyBpbnRvIHRoZSBzYXZlZCBzdHJpbmcuICAq
LwogICAgICAgcHRyZGlmZl90IGkgPSAwOwogICAgICAgaW50IGMgPSAwOwotICAgICAgZm9yIChp
bnQgbiA9IG1pbiAobnNraXAsIGluZmlsZS0+bG9va2FoZWFkKTsgbiA+IDA7IG4tLSkKLQlzcy0+
c3RyaW5nW2krK10gPSBjID0gaW5maWxlLT5idWZbLS1pbmZpbGUtPmxvb2thaGVhZF07CisgICAg
ICBmb3IgKGludCBuID0gbWluIChuc2tpcCwgZnJhbWUtPmlucHV0LmYubG9va2FoZWFkKTsgbiA+
IDA7IG4tLSkKKwlzcy0+c3RyaW5nW2krK10gPSBjID0gZnJhbWUtPmlucHV0LmYuYnVmWy0tKGZy
YW1lLT5pbnB1dC5mLmxvb2thaGVhZCldOwogICAgICAgYmxvY2tfaW5wdXQgKCk7CiAgICAgICBm
b3IgKDsgaSA8IG5za2lwICYmIGMgPj0gMDsgaSsrKQogCXNzLT5zdHJpbmdbaV0gPSBjID0gZmls
ZV9nZXRfY2hhciAoaW5zdHJlYW0pOwpAQCAtMzcyMiwxNSArNTM2NiwxNSBAQCBza2lwX2xhenlf
c3RyaW5nIChMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKICAgICB9CiAgIGVsc2UKICAgICAvKiBT
a2lwIHRoYXQgbWFueSBieXRlcy4gICovCi0gICAgc2tpcF9keW5fYnl0ZXMgKHJlYWRjaGFyZnVu
LCBuc2tpcCk7CisgICAgc2tpcF9keW5fYnl0ZXMgKGZyYW1lLCBuc2tpcCk7CiAKICAgcmV0dXJu
IHRydWU7CiB9CiAKIC8qIEdpdmVuIGEgbGF6eS1sb2FkZWQgc3RyaW5nIGRlc2lnbmF0b3IgVkFM
LCByZXR1cm4gdGhlIGFjdHVhbCBzdHJpbmcuCiAgICBWQUwgaXMgKEZJTEVOQU1FIC4gUE9TKS4g
ICovCi1zdGF0aWMgTGlzcF9PYmplY3QKLWdldF9sYXp5X3N0cmluZyAoTGlzcF9PYmplY3QgdmFs
KQorTGlzcF9PYmplY3QKK2dldF9sYXp5X3N0cmluZyAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZy
YW1lLExpc3BfT2JqZWN0IHZhbCkKIHsKICAgLyogR2V0IGEgZG9jIHN0cmluZyBmcm9tIHRoZSBm
aWxlIHdlIGFyZSBsb2FkaW5nLgogICAgICBJZiBpdCdzIGluIGEgc2F2ZWQgc3RyaW5nLCBnZXQg
aXQgZnJvbSB0aGVyZS4KQEAgLTM3NDQsOCArNTM4OCw4IEBAIGdldF9sYXp5X3N0cmluZyAoTGlz
cF9PYmplY3QgdmFsKQogICAgICBzdHJpbmdzIHN0YXJ0ZWQgd2l0aCBhbiBhc3Rlcmlzayk7IHRh
a2UgdGhlIGFic29sdXRlIHZhbHVlIGZvcgogICAgICBjb21wYXRpYmlsaXR5LiAgKi8KICAgRU1B
Q1NfSU5UIHBvcyA9IGVhYnMgKFhGSVhOVU0gKFhDRFIgKHZhbCkpKTsKLSAgc3RydWN0IHNhdmVk
X3N0cmluZyAqc3MgPSAmc2F2ZWRfc3RyaW5nc1swXTsKLSAgc3RydWN0IHNhdmVkX3N0cmluZyAq
c3NlbmQgPSBzcyArIEFSUkFZRUxUUyAoc2F2ZWRfc3RyaW5ncyk7CisgIHN0cnVjdCBzYXZlZF9z
dHJpbmcgKnNzID0gJihmcmFtZS0+c2F2ZWRfc3RyaW5nc1swXSk7CisgIHN0cnVjdCBzYXZlZF9z
dHJpbmcgKnNzZW5kID0gc3MgKyBBUlJBWUVMVFMgKGZyYW1lLT5zYXZlZF9zdHJpbmdzKTsKICAg
d2hpbGUgKHNzIDwgc3NlbmQKIAkgJiYgIShwb3MgPj0gc3MtPnBvc2l0aW9uICYmIHBvcyA8IHNz
LT5wb3NpdGlvbiArIHNzLT5sZW5ndGgpKQogICAgIHNzKys7CkBAIC0zNzg0LDk3ICs1NDI4LDM1
IEBAIHN5bWJvbF9jaGFyX3NwYW4gKGNvbnN0IGNoYXIgKnMpCiB7CiAgIGNvbnN0IGNoYXIgKnAg
PSBzOwogICB3aGlsZSAoICAgKnAgPT0gJ14nIHx8ICpwID09ICcqJyB8fCAqcCA9PSAnKycgfHwg
KnAgPT0gJy0nIHx8ICpwID09ICcvJwotCSB8fCAqcCA9PSAnPCcgfHwgKnAgPT0gJz0nIHx8ICpw
ID09ICc+JyB8fCAqcCA9PSAnXycgfHwgKnAgPT0gJ3wnKQorCSAgICB8fCAqcCA9PSAnPCcgfHwg
KnAgPT0gJz0nIHx8ICpwID09ICc+JyB8fCAqcCA9PSAnXycgfHwgKnAgPT0gJ3wnKQogICAgIHAr
KzsKICAgcmV0dXJuIHAgLSBzOwogfQogCi1zdGF0aWMgdm9pZAotc2tpcF9zcGFjZV9hbmRfY29t
bWVudHMgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQordm9pZAorc2tpcF9zcGFjZV9hbmRfY29t
bWVudHMgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKIHsKICAgaW50IGM7CiAgIGRvCiAg
ICAgewotICAgICAgYyA9IFJFQURDSEFSOworICAgICAgYyA9IFJFQURDSEFSIChmcmFtZSk7CiAg
ICAgICBpZiAoYyA9PSAnOycpCiAJZG8KLQkgIGMgPSBSRUFEQ0hBUjsKKwkgIGMgPSBSRUFEQ0hB
UiAoZnJhbWUpOwogCXdoaWxlIChjID49IDAgJiYgYyAhPSAnXG4nKTsKICAgICAgIGlmIChjIDwg
MCkKLQllbmRfb2ZfZmlsZV9lcnJvciAoKTsKKwllbmRfb2ZfZmlsZV9lcnJvciAoZnJhbWUpOwog
ICAgIH0KICAgd2hpbGUgKGMgPD0gMzIgfHwgYyA9PSBOT19CUkVBS19TUEFDRSk7Ci0gIFVOUkVB
RCAoYyk7CisgIFVOUkVBRCAoZnJhbWUsIGMpOwogfQogCi0vKiBXaGVuIGFuIG9iamVjdCBpcyBy
ZWFkLCB0aGUgdHlwZSBvZiB0aGUgdG9wIHJlYWQgc3RhY2sgZW50cnkgaW5kaWNhdGVzCi0gICB0
aGUgc3ludGFjdGljIGNvbnRleHQuICAqLwotZW51bSByZWFkX2VudHJ5X3R5cGUKLXsKLQkJCQkv
KiBwcmVjZWRpbmcgc3ludGFjdGljIGNvbnRleHQgKi8KLSAgUkVfbGlzdF9zdGFydCwJCS8qICIo
IiAqLwotCi0gIFJFX2xpc3QsCQkJLyogIigiICgrIE9CSkVDVCkgKi8KLSAgUkVfbGlzdF9kb3Qs
CQkJLyogIigiICgrIE9CSkVDVCkgIi4iICovCi0KLSAgUkVfdmVjdG9yLAkJCS8qICJbIiAoKiBP
QkpFQ1QpICovCi0gIFJFX3JlY29yZCwJCQkvKiAiI3MoIiAoKiBPQkpFQ1QpICovCi0gIFJFX2No
YXJfdGFibGUsCQkvKiAiI15bIiAoKiBPQkpFQ1QpICovCi0gIFJFX3N1Yl9jaGFyX3RhYmxlLAkJ
LyogIiNeXlsiICgqIE9CSkVDVCkgKi8KLSAgUkVfYnl0ZV9jb2RlLAkJCS8qICIjWyIgKCogT0JK
RUNUKSAqLwotICBSRV9zdHJpbmdfcHJvcHMsCQkvKiAiIygiICgqIE9CSkVDVCkgKi8KLQotICBS
RV9zcGVjaWFsLAkJCS8qICInIiB8ICIjJyIgfCAiYCIgfCAiLCIgfCAiLEAiICovCi0KLSAgUkVf
bnVtYmVyZWQsCQkJLyogIiMiICgrIERJR0lUKSAiPSIgKi8KLX07Ci0KLXN0cnVjdCByZWFkX3N0
YWNrX2VudHJ5Ci17Ci0gIGVudW0gcmVhZF9lbnRyeV90eXBlIHR5cGU7Ci0gIHVuaW9uIHsKLSAg
ICAvKiBSRV9saXN0LCBSRV9saXN0X2RvdCAqLwotICAgIHN0cnVjdCB7Ci0gICAgICBMaXNwX09i
amVjdCBoZWFkOwkJLyogZmlyc3QgY29ucyBvZiBsaXN0ICovCi0gICAgICBMaXNwX09iamVjdCB0
YWlsOwkJLyogbGFzdCBjb25zIG9mIGxpc3QgKi8KLSAgICB9IGxpc3Q7Ci0KLSAgICAvKiBSRV92
ZWN0b3IsIFJFX3JlY29yZCwgUkVfY2hhcl90YWJsZSwgUkVfc3ViX2NoYXJfdGFibGUsCi0gICAg
ICAgUkVfYnl0ZV9jb2RlLCBSRV9zdHJpbmdfcHJvcHMgKi8KLSAgICBzdHJ1Y3QgewotICAgICAg
TGlzcF9PYmplY3QgZWxlbXM7CS8qIGxpc3Qgb2YgZWxlbWVudHMgaW4gcmV2ZXJzZSBvcmRlciAq
LwotICAgICAgYm9vbCBvbGRfbG9jYXRlX3N5bXM7CS8qIG9sZCB2YWx1ZSBvZiBsb2NhdGVfc3lt
cyAqLwotICAgIH0gdmVjdG9yOwotCi0gICAgLyogUkVfc3BlY2lhbCAqLwotICAgIHN0cnVjdCB7
Ci0gICAgICBMaXNwX09iamVjdCBzeW1ib2w7CS8qIHN5bWJvbCBmcm9tIHNwZWNpYWwgc3ludGF4
ICovCi0gICAgfSBzcGVjaWFsOwotCi0gICAgLyogUkVfbnVtYmVyZWQgKi8KLSAgICBzdHJ1Y3Qg
ewotICAgICAgTGlzcF9PYmplY3QgbnVtYmVyOwkvKiBudW1iZXIgYXMgYSBmaXhudW0gKi8KLSAg
ICAgIExpc3BfT2JqZWN0IHBsYWNlaG9sZGVyOwkvKiBwbGFjZWhvbGRlciBvYmplY3QgKi8KLSAg
ICB9IG51bWJlcmVkOwotICB9IHU7Ci19OwotCi1zdHJ1Y3QgcmVhZF9zdGFjawotewotICBzdHJ1
Y3QgcmVhZF9zdGFja19lbnRyeSAqc3RhY2s7ICAvKiBiYXNlIG9mIHN0YWNrICovCi0gIHB0cmRp
ZmZfdCBzaXplOwkJICAgLyogYWxsb2NhdGVkIHNpemUgaW4gZW50cmllcyAqLwotICBwdHJkaWZm
X3Qgc3A7CQkJICAgLyogY3VycmVudCBudW1iZXIgb2YgZW50cmllcyAqLwotfTsKLQotc3RhdGlj
IHN0cnVjdCByZWFkX3N0YWNrIHJkc3RhY2sgPSB7TlVMTCwgMCwgMH07Ci0KLXZvaWQKLW1hcmtf
bHJlYWQgKHZvaWQpCitJTkxJTkUgdm9pZAorbWFya19yZHN0YWNrIChzdHJ1Y3QgcmVhZF9zdGFj
ayAqcmRzdGFjaykKIHsKLSAgLyogTWFyayB0aGUgcmVhZCBzdGFjaywgd2hpY2ggbWF5IGNvbnRh
aW4gZGF0YSBub3Qgb3RoZXJ3aXNlIHRyYWNlZCAqLwotICBmb3IgKHB0cmRpZmZfdCBpID0gMDsg
aSA8IHJkc3RhY2suc3A7IGkrKykKKyAgZm9yIChwdHJkaWZmX3QgaSA9IDA7IGkgPCByZHN0YWNr
LT5zcDsgaSsrKQogICAgIHsKLSAgICAgIHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5ICplID0gJnJk
c3RhY2suc3RhY2tbaV07CisgICAgICBzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSAqZSA9ICYocmRz
dGFjay0+c3RhY2tbaV0pOwogICAgICAgc3dpdGNoIChlLT50eXBlKQogCXsKIAljYXNlIFJFX2xp
c3Rfc3RhcnQ6CkBAIC0zOTAzLDc3ICs1NDg1LDEzOSBAQCBtYXJrX2xyZWFkICh2b2lkKQogICAg
IH0KIH0KIAorSU5MSU5FIHZvaWQKK21hcmtfbHJlYWRfaW5wdXQgKGxyZWFkX2ZyYW1lICpmcmFt
ZSkKK3sKKyAgc3dpdGNoIChmcmFtZS0+aW50eXBlKQorICAgIHsKKyAgICBjYXNlIExSRUFEX0lO
UFVUX0ZJTEU6CisgICAgY2FzZSBMUkVBRF9JTlBVVF9GSUxFX01VTEU6CisgICAgICBtYXJrX29i
amVjdCAoZnJhbWUtPmlucHV0LmYuY29kaW5nKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJF
QURfSU5QVVRfUFJPQ0VEVVJFOgorICAgICAgbWFya19vYmplY3QgKGZyYW1lLT5pbnB1dC5wLnBy
b2MpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9NQVJLRVI6CisgICAgICBt
YXJrX29iamVjdCAoZnJhbWUtPmlucHV0Lm0ubWFya2VyKTsKKyAgICAgIG1hcmtfb2JqZWN0IChm
cmFtZS0+aW5wdXQubS5iLmJ1ZmZlcik7CisgICAgICBicmVhazsKKyAgICBjYXNlIExSRUFEX0lO
UFVUX0JVRkZFUjoKKyAgICAgIG1hcmtfb2JqZWN0IChmcmFtZS0+aW5wdXQuYi5idWZmZXIpOwor
ICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9TVFJJTkc6CisgICAgICBtYXJrX29i
amVjdCAoZnJhbWUtPmlucHV0LnMuc3RyaW5nKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJF
QURfSU5QVVRfTlVMTDoKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAvKiBkbyBu
b3RoaW5nICovCisgICAgfQorfQordm9pZAorbWFya19scmVhZCAodm9pZCkKK3sKKyAgcmVnaXN0
ZXIgbHJlYWRfZnJhbWUgKmZyYW1lID0gY3VycmVudF9mcmFtZTsKKyAgLyogQWxsIHRoZSBmcmFt
ZSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgb24gdGhlIEMgc3RhY2sgc29tZXdoZXJlCisgICAg
IE5vdCBzdXJlIGlmIHRoaXMgaXMgcmVkdW5kYW50IG9yIHJlcXVpcmVkICovCisgIHdoaWxlIChm
cmFtZSAhPSBOVUxMKQorICAgIHsKKyAgICAgIG1hcmtfbHJlYWRfaW5wdXQgKGZyYW1lKTsKKyAg
ICAgIG1hcmtfcmRzdGFjayAoJihmcmFtZS0+cmRzdGFjaykpOworICAgICAgbWFya19vYmplY3Qg
KGZyYW1lLT5sb2Fkc19pbl9wcm9ncmVzcyk7CisgICAgICBtYXJrX29iamVjdCAoZnJhbWUtPm9i
amVjdHNfbWFwKTsKKyAgICAgIG1hcmtfb2JqZWN0IChmcmFtZS0+b2JqZWN0c19jb21wbGV0ZWQp
OworICAgICAgbWFya19vYmplY3QgKGZyYW1lLT5zdGFydCk7CisgICAgICBtYXJrX29iamVjdCAo
ZnJhbWUtPmVuZCk7CisgICAgICBtYXJrX29iamVjdCAoZnJhbWUtPmZ1bGxfbmFtZSk7CisgICAg
ICBtYXJrX29iamVjdCAoZnJhbWUtPm5hbWUpOworICAgICAgbWFya19vYmplY3QgKGZyYW1lLT5z
b3VyY2VuYW1lKTsKKyAgICAgIG1hcmtfb2JqZWN0IChmcmFtZS0+cmVhZGZ1bik7CisgICAgICBt
YXJrX29iamVjdCAoZnJhbWUtPnZhbHVlKTsKKyAgICAgIG1hcmtfb2JqZWN0IChmcmFtZS0+ZXJy
b3IpOworICAgICAgaWYgKGZyYW1lLT5tdWxlX2NoYXJzZXQpCisJbWFya19vYmplY3QgKGZyYW1l
LT5tdWxlX2NoYXJzZXQtPmF0dHJpYnV0ZXMpOworICAgICAgZnJhbWUgPSBmcmFtZS0+cHJldjsK
KyAgICB9Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlYWRfc3RhY2tfZW50cnkgKgotcmVh
ZF9zdGFja190b3AgKHZvaWQpCityZWFkX3N0YWNrX3RvcCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUg
KmZyYW1lKQogewotICBlYXNzdW1lIChyZHN0YWNrLnNwID4gMCk7Ci0gIHJldHVybiAmcmRzdGFj
ay5zdGFja1tyZHN0YWNrLnNwIC0gMV07CisgIGVhc3N1bWUgKGZyYW1lLT5yZHN0YWNrLnNwID4g
MCk7CisgIHJldHVybiAmKGZyYW1lLT5yZHN0YWNrLnN0YWNrW2ZyYW1lLT5yZHN0YWNrLnNwIC0g
MV0pOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5ICoKLXJlYWRf
c3RhY2tfcG9wICh2b2lkKQorcmVhZF9zdGFja19wb3AgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpm
cmFtZSkKIHsKLSAgZWFzc3VtZSAocmRzdGFjay5zcCA+IDApOwotICByZXR1cm4gJnJkc3RhY2su
c3RhY2tbLS1yZHN0YWNrLnNwXTsKKworCisKKyAgZWFzc3VtZSAoZnJhbWUtPnJkc3RhY2suc3Ag
PiAwKTsKKyAgcmV0dXJuICYoZnJhbWUtPnJkc3RhY2suc3RhY2tbLS0oZnJhbWUtPnJkc3RhY2su
c3ApXSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbAotcmVhZF9zdGFja19lbXB0eV9wIChwdHJk
aWZmX3QgYmFzZV9zcCkKK0lOTElORSBib29sCityZWFkX3N0YWNrX2VtcHR5X3AgKHJlZ2lzdGVy
IGxyZWFkX2ZyYW1lICpmcmFtZSkKIHsKLSAgcmV0dXJuIHJkc3RhY2suc3AgPD0gYmFzZV9zcDsK
KyAgZWFzc2VydCAoZnJhbWUtPmJhc2Vfc3AgPT0gMCk7CisgIHJldHVybiBmcmFtZS0+cmRzdGFj
ay5zcCA8PSBmcmFtZS0+YmFzZV9zcDsKIH0KIAogTk9fSU5MSU5FIHN0YXRpYyB2b2lkCi1ncm93
X3JlYWRfc3RhY2sgKHZvaWQpCitncm93X3JlYWRfc3RhY2sgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1l
ICpmcmFtZSkKIHsKLSAgc3RydWN0IHJlYWRfc3RhY2sgKnJzID0gJnJkc3RhY2s7CisgIHN0cnVj
dCByZWFkX3N0YWNrICpycyA9ICZmcmFtZS0+cmRzdGFjazsKICAgZWFzc2VydCAocnMtPnNwID09
IHJzLT5zaXplKTsKICAgcnMtPnN0YWNrID0geHBhbGxvYyAocnMtPnN0YWNrLCAmcnMtPnNpemUs
IDEsIC0xLCBzaXplb2YgKnJzLT5zdGFjayk7CiAgIGVhc3NlcnQgKHJzLT5zcCA8IHJzLT5zaXpl
KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1yZWFkX3N0YWNrX3B1c2ggKHN0cnVjdCByZWFk
X3N0YWNrX2VudHJ5IGUpCitJTkxJTkUgdm9pZAorcmVhZF9zdGFja19wdXNoIChyZWdpc3RlciBs
cmVhZF9mcmFtZSAqZnJhbWUsc3RydWN0IHJlYWRfc3RhY2tfZW50cnkgZSkKIHsKLSAgaWYgKHJk
c3RhY2suc3AgPj0gcmRzdGFjay5zaXplKQotICAgIGdyb3dfcmVhZF9zdGFjayAoKTsKLSAgcmRz
dGFjay5zdGFja1tyZHN0YWNrLnNwKytdID0gZTsKKyAgaWYgKGZyYW1lLT5yZHN0YWNrLnNwID49
IGZyYW1lLT5yZHN0YWNrLnNpemUpCisgICAgZ3Jvd19yZWFkX3N0YWNrIChmcmFtZSk7CisgIGZy
YW1lLT5yZHN0YWNrLnN0YWNrW2ZyYW1lLT5yZHN0YWNrLnNwKytdID0gZTsKIH0KIAogc3RhdGlj
IHZvaWQKLXJlYWRfc3RhY2tfcmVzZXQgKGludG1heF90IHNwKQotewotICBlYXNzZXJ0IChzcCA8
PSByZHN0YWNrLnNwKTsKLSAgcmRzdGFjay5zcCA9IHNwOwotfQotCi0jZGVmaW5lIFJFQURfQU5E
X0JVRkZFUihjKQkJCVwKLSAgYyA9IFJFQURDSEFSOwkJCQkJXAotICBpZiAoYyA8IDApCQkJCQlc
Ci0gICAgSU5WQUxJRF9TWU5UQVhfV0lUSF9CVUZGRVIgKCk7CQlcCi0gIGlmIChtdWx0aWJ5dGUp
CQkJCVwKLSAgICBwICs9IENIQVJfU1RSSU5HIChjLCAodW5zaWduZWQgY2hhciAqKSBwKTsJXAot
ICBlbHNlCQkJCQkJXAotICAgICpwKysgPSBjOwkJCQkJXAotICBpZiAoZW5kIC0gcCA8IE1BWF9N
VUxUSUJZVEVfTEVOR1RIICsgMSkJXAotICAgIHsJCQkJCQlcCi0gICAgICAgb2Zmc2V0ID0gcCAt
IHJlYWRfYnVmZmVyOwkJXAotICAgICAgIHJlYWRfYnVmZmVyID0gZ3Jvd19yZWFkX2J1ZmZlciAo
cmVhZF9idWZmZXIsIG9mZnNldCwgXAotCQkJCSAgICAgICAmaGVhcGJ1ZiwgJnJlYWRfYnVmZmVy
X3NpemUsIGNvdW50KTsgXAotICAgICAgIHAgPSByZWFkX2J1ZmZlciArIG9mZnNldDsJCQkJCVwK
LSAgICAgICBlbmQgPSByZWFkX2J1ZmZlciArIHJlYWRfYnVmZmVyX3NpemU7CQkJCVwKLSAgICB9
Ci0KLSNkZWZpbmUgSU5WQUxJRF9TWU5UQVhfV0lUSF9CVUZGRVIoKQkJXAorcmVhZF9zdGFja19y
ZXNldCAodm9pZCAqcCkKK3sKKyAgcmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lID0gcDsKKyAg
ZWFzc2VydCAoZnJhbWUtPmJhc2Vfc3AgPT0gMCk7CisgIGVhc3NlcnQgKGZyYW1lLT5iYXNlX3Nw
IDw9IGZyYW1lLT5yZHN0YWNrLnNwKTsKKyAgZnJhbWUtPnJkc3RhY2suc3AgPSBmcmFtZS0+YmFz
ZV9zcDsKK30KKworI2RlZmluZSBSRUFEX0FORF9CVUZGRVIoZnJhbWUsYykgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjID0gUkVBRENIQVIgKGZyYW1lKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoYyA8
IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIElOVkFMSURfU1lOVEFYX1dJVEhfQlVGRkVSIChmcmFtZSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoZnJhbWUtPm11bHRpYnl0ZSkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHAgKz0gQ0hB
Ul9TVFJJTkcgKGMsICh1bnNpZ25lZCBjaGFyICopIHApOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICpwKysgPSBjOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoZW5kIC0gcCA8
IE1BWF9NVUxUSUJZVEVfTEVOR1RIICsgMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgb2Zmc2V0ID0gcCAtIHJlYWRfYnVmZmVyOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVhZF9idWZmZXIg
PSBncm93X3JlYWRfYnVmZmVyIChyZWFkX2J1ZmZlciwgb2Zmc2V0LAkJXAorCQkJCSAgICAgICZo
ZWFwYnVmLCAmcmVhZF9idWZmZXJfc2l6ZSwJXAorCQkJCSAgICAgIGNvdW50KTsJCQkJXAorICAg
ICAgcCA9IHJlYWRfYnVmZmVyICsgb2Zmc2V0OwkJCQkJCVwKKyAgICAgIGVuZCA9IHJlYWRfYnVm
ZmVyICsgcmVhZF9idWZmZXJfc2l6ZTsJCQkJXAorICAgIH0KKworI2RlZmluZSBJTlZBTElEX1NZ
TlRBWF9XSVRIX0JVRkZFUihmcmFtZSkJXAogICB7CQkJCQkJXAogICAgICpwID0gMDsJCQkJCVwK
LSAgICBpbnZhbGlkX3N5bnRheCAocmVhZF9idWZmZXIsIHJlYWRjaGFyZnVuKTsJXAorICAgIGlu
dmFsaWRfc3ludGF4IChmcmFtZSwgcmVhZF9idWZmZXIpOwlcCiAgIH0KIAogLyogUmVhZCBhIExp
c3Agb2JqZWN0LgogICAgSWYgTE9DQVRFX1NZTVMgaXMgdHJ1ZSwgc3ltYm9scyBhcmUgcmVhZCB3
aXRoIHBvc2l0aW9uLiAgKi8KLXN0YXRpYyBMaXNwX09iamVjdAotcmVhZDAgKExpc3BfT2JqZWN0
IHJlYWRjaGFyZnVuLCBib29sIGxvY2F0ZV9zeW1zKQorTGlzcF9PYmplY3QKK3JlYWQwIChyZWdp
c3RlciBscmVhZF9mcmFtZSAqZnJhbWUpCiB7CiAgIGNoYXIgc3RhY2tidWZbNjRdOwogICBjaGFy
ICpyZWFkX2J1ZmZlciA9IHN0YWNrYnVmOwpAQCAtMzk4Miw4ICs1NjI2LDEwIEBAIHJlYWQwIChM
aXNwX09iamVjdCByZWFkY2hhcmZ1biwgYm9vbCBsb2NhdGVfc3ltcykKICAgY2hhciAqaGVhcGJ1
ZiA9IE5VTEw7CiAKICAgc3BlY3BkbF9yZWYgYmFzZV9wZGwgPSBTUEVDUERMX0lOREVYICgpOwot
ICBwdHJkaWZmX3QgYmFzZV9zcCA9IHJkc3RhY2suc3A7Ci0gIHJlY29yZF91bndpbmRfcHJvdGVj
dF9pbnRtYXggKHJlYWRfc3RhY2tfcmVzZXQsIGJhc2Vfc3ApOworICAvKiBUaGlzIGFzc2lnbm1l
bnQgb2YgYmFzZV9zcCBzaG91bGQgYWx3YXlzIGJlIDAuCisgICAgIE1heWJlIGl0IHdhcyB1c2Vm
dWwgd2hlbiByZWFkMC9yZWFkMSB1c2VkIHJlY3Vyc2l2ZSBjYWxscz8qLworICBmcmFtZS0+YmFz
ZV9zcCA9IGZyYW1lLT5yZHN0YWNrLnNwOworICByZWNvcmRfdW53aW5kX3Byb3RlY3RfcHRyIChy
ZWFkX3N0YWNrX3Jlc2V0LCBmcmFtZSk7CiAKICAgc3BlY3BkbF9yZWYgY291bnQgPSBTUEVDUERM
X0lOREVYICgpOwogCkBAIC0zOTkxLDM3ICs1NjM3LDM3IEBAIHJlYWQwIChMaXNwX09iamVjdCBy
ZWFkY2hhcmZ1biwgYm9vbCBsb2NhdGVfc3ltcykKICAgYm9vbCBza2lwX3Nob3J0aGFuZDsKIAog
ICAvKiBSZWFkIGFuIG9iamVjdCBpbnRvIGBvYmonLiAgKi8KLSByZWFkX29iajogOworIHJlYWRf
b2JqOgogICBMaXNwX09iamVjdCBvYmo7Ci0gIGJvb2wgbXVsdGlieXRlOwotICBpbnQgYyA9IFJF
QURDSEFSX1JFUE9SVF9NVUxUSUJZVEUgKCZtdWx0aWJ5dGUpOworCisgIGludCBjID0gUkVBRENI
QVIgKGZyYW1lKTsKICAgaWYgKGMgPCAwKQotICAgIGVuZF9vZl9maWxlX2Vycm9yICgpOworICAg
IGVuZF9vZl9maWxlX2Vycm9yIChmcmFtZSk7CiAKICAgc3dpdGNoIChjKQogICAgIHsKICAgICBj
YXNlICcoJzoKLSAgICAgIHJlYWRfc3RhY2tfcHVzaCAoKHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5
KSB7LnR5cGUgPSBSRV9saXN0X3N0YXJ0fSk7CisgICAgICByZWFkX3N0YWNrX3B1c2ggKGZyYW1l
LChzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSkgey50eXBlID0gUkVfbGlzdF9zdGFydH0pOwogICAg
ICAgZ290byByZWFkX29iajsKIAogICAgIGNhc2UgJyknOgotICAgICAgaWYgKHJlYWRfc3RhY2tf
ZW1wdHlfcCAoYmFzZV9zcCkpCi0JaW52YWxpZF9zeW50YXggKCIpIiwgcmVhZGNoYXJmdW4pOwot
ICAgICAgc3dpdGNoIChyZWFkX3N0YWNrX3RvcCAoKS0+dHlwZSkKKyAgICAgIGlmIChyZWFkX3N0
YWNrX2VtcHR5X3AgKGZyYW1lKSkKKwlpbnZhbGlkX3N5bnRheCAoZnJhbWUsICIpIik7CisgICAg
ICBzd2l0Y2ggKHJlYWRfc3RhY2tfdG9wIChmcmFtZSktPnR5cGUpCiAJewogCWNhc2UgUkVfbGlz
dF9zdGFydDoKLQkgIHJlYWRfc3RhY2tfcG9wICgpOworCSAgcmVhZF9zdGFja19wb3AgKGZyYW1l
KTsKIAkgIG9iaiA9IFFuaWw7CiAJICBicmVhazsKIAljYXNlIFJFX2xpc3Q6Ci0JICBvYmogPSBy
ZWFkX3N0YWNrX3BvcCAoKS0+dS5saXN0LmhlYWQ7CisJICBvYmogPSByZWFkX3N0YWNrX3BvcCAo
ZnJhbWUpLT51Lmxpc3QuaGVhZDsKIAkgIGJyZWFrOwogCWNhc2UgUkVfcmVjb3JkOgogCSAgewot
CSAgICBsb2NhdGVfc3ltcyA9IHJlYWRfc3RhY2tfdG9wICgpLT51LnZlY3Rvci5vbGRfbG9jYXRl
X3N5bXM7Ci0JICAgIExpc3BfT2JqZWN0IGVsZW1zID0gRm5yZXZlcnNlIChyZWFkX3N0YWNrX3Bv
cCAoKS0+dS52ZWN0b3IuZWxlbXMpOworCSAgICBmcmFtZS0+bG9jYXRlX3N5bXMgPSByZWFkX3N0
YWNrX3RvcCAoZnJhbWUpLT51LnZlY3Rvci5vbGRfbG9jYXRlX3N5bXM7CisJICAgIExpc3BfT2Jq
ZWN0IGVsZW1zID0gRm5yZXZlcnNlIChyZWFkX3N0YWNrX3BvcCAoZnJhbWUpLT51LnZlY3Rvci5l
bGVtcyk7CiAJICAgIGlmIChOSUxQIChlbGVtcykpCi0JICAgICAgaW52YWxpZF9zeW50YXggKCIj
cyIsIHJlYWRjaGFyZnVuKTsKKwkgICAgICBpbnZhbGlkX3N5bnRheCAoZnJhbWUsICIjcyIpOwog
CiAJICAgIGlmIChCQVNFX0VRIChYQ0FSIChlbGVtcyksIFFoYXNoX3RhYmxlKSkKIAkgICAgICBv
YmogPSBoYXNoX3RhYmxlX2Zyb21fcGxpc3QgKFhDRFIgKGVsZW1zKSk7CkBAIC00MDMwLDUwICs1
Njc2LDQ2IEBAIHJlYWQwIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwgYm9vbCBsb2NhdGVfc3lt
cykKIAkgICAgYnJlYWs7CiAJICB9CiAJY2FzZSBSRV9zdHJpbmdfcHJvcHM6Ci0JICBsb2NhdGVf
c3ltcyA9IHJlYWRfc3RhY2tfdG9wICgpLT51LnZlY3Rvci5vbGRfbG9jYXRlX3N5bXM7Ci0JICBv
YmogPSBzdHJpbmdfcHJvcHNfZnJvbV9yZXZfbGlzdCAocmVhZF9zdGFja19wb3AgKCkgLT51LnZl
Y3Rvci5lbGVtcywKLQkJCQkJICAgIHJlYWRjaGFyZnVuKTsKKwkgIGZyYW1lLT5sb2NhdGVfc3lt
cyA9IHJlYWRfc3RhY2tfdG9wIChmcmFtZSktPnUudmVjdG9yLm9sZF9sb2NhdGVfc3ltczsKKwkg
IG9iaiA9IHN0cmluZ19wcm9wc19mcm9tX3Jldl9saXN0IChmcmFtZSwgcmVhZF9zdGFja19wb3Ag
KGZyYW1lKSAtPnUudmVjdG9yLmVsZW1zKTsKIAkgIGJyZWFrOwogCWRlZmF1bHQ6Ci0JICBpbnZh
bGlkX3N5bnRheCAoIikiLCByZWFkY2hhcmZ1bik7CisJICBpbnZhbGlkX3N5bnRheCAoZnJhbWUs
ICIpIik7CiAJfQogICAgICAgYnJlYWs7CiAKICAgICBjYXNlICdbJzoKLSAgICAgIHJlYWRfc3Rh
Y2tfcHVzaCAoKHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5KSB7CisgICAgICByZWFkX3N0YWNrX3B1
c2ggKGZyYW1lLCAoc3RydWN0IHJlYWRfc3RhY2tfZW50cnkpIHsKIAkgIC50eXBlID0gUkVfdmVj
dG9yLAogCSAgLnUudmVjdG9yLmVsZW1zID0gUW5pbCwKLQkgIC51LnZlY3Rvci5vbGRfbG9jYXRl
X3N5bXMgPSBsb2NhdGVfc3ltcywKKwkgIC51LnZlY3Rvci5vbGRfbG9jYXRlX3N5bXMgPSBmcmFt
ZS0+bG9jYXRlX3N5bXMsCiAJfSk7CiAgICAgICAvKiBGSVhNRTogc2hvdWxkIHZlY3RvcnMgYmUg
cmVhZCB3aXRoIGxvY2F0ZV9zeW1zPWZhbHNlPyAgKi8KICAgICAgIGdvdG8gcmVhZF9vYmo7CiAK
ICAgICBjYXNlICddJzoKLSAgICAgIGlmIChyZWFkX3N0YWNrX2VtcHR5X3AgKGJhc2Vfc3ApKQot
CWludmFsaWRfc3ludGF4ICgiXSIsIHJlYWRjaGFyZnVuKTsKLSAgICAgIHN3aXRjaCAocmVhZF9z
dGFja190b3AgKCktPnR5cGUpCisgICAgICBpZiAocmVhZF9zdGFja19lbXB0eV9wIChmcmFtZSkp
CisJaW52YWxpZF9zeW50YXggKGZyYW1lLCAiXSIpOworICAgICAgc3dpdGNoIChyZWFkX3N0YWNr
X3RvcCAoZnJhbWUpLT50eXBlKQogCXsKIAljYXNlIFJFX3ZlY3RvcjoKLQkgIGxvY2F0ZV9zeW1z
ID0gcmVhZF9zdGFja190b3AgKCktPnUudmVjdG9yLm9sZF9sb2NhdGVfc3ltczsKLQkgIG9iaiA9
IHZlY3Rvcl9mcm9tX3Jldl9saXN0IChyZWFkX3N0YWNrX3BvcCAoKS0+dS52ZWN0b3IuZWxlbXMp
OworCSAgZnJhbWUtPmxvY2F0ZV9zeW1zID0gcmVhZF9zdGFja190b3AgKGZyYW1lKS0+dS52ZWN0
b3Iub2xkX2xvY2F0ZV9zeW1zOworCSAgb2JqID0gdmVjdG9yX2Zyb21fcmV2X2xpc3QgKHJlYWRf
c3RhY2tfcG9wIChmcmFtZSktPnUudmVjdG9yLmVsZW1zKTsKIAkgIGJyZWFrOwogCWNhc2UgUkVf
Ynl0ZV9jb2RlOgotCSAgbG9jYXRlX3N5bXMgPSByZWFkX3N0YWNrX3RvcCAoKS0+dS52ZWN0b3Iu
b2xkX2xvY2F0ZV9zeW1zOwotCSAgb2JqID0gYnl0ZWNvZGVfZnJvbV9yZXZfbGlzdCAocmVhZF9z
dGFja19wb3AgKCktPnUudmVjdG9yLmVsZW1zLAotCQkJCQlyZWFkY2hhcmZ1bik7CisJICBmcmFt
ZS0+bG9jYXRlX3N5bXMgPSByZWFkX3N0YWNrX3RvcCAoZnJhbWUpLT51LnZlY3Rvci5vbGRfbG9j
YXRlX3N5bXM7CisJICBvYmogPSBieXRlY29kZV9mcm9tX3Jldl9saXN0IChmcmFtZSxyZWFkX3N0
YWNrX3BvcCAoZnJhbWUpLT51LnZlY3Rvci5lbGVtcyk7CiAJICBicmVhazsKIAljYXNlIFJFX2No
YXJfdGFibGU6Ci0JICBsb2NhdGVfc3ltcyA9IHJlYWRfc3RhY2tfdG9wICgpLT51LnZlY3Rvci5v
bGRfbG9jYXRlX3N5bXM7Ci0JICBvYmogPSBjaGFyX3RhYmxlX2Zyb21fcmV2X2xpc3QgKHJlYWRf
c3RhY2tfcG9wICgpLT51LnZlY3Rvci5lbGVtcywKLQkJCQkJICByZWFkY2hhcmZ1bik7CisJICBm
cmFtZS0+bG9jYXRlX3N5bXMgPSByZWFkX3N0YWNrX3RvcCAoZnJhbWUpLT51LnZlY3Rvci5vbGRf
bG9jYXRlX3N5bXM7CisJICBvYmogPSBjaGFyX3RhYmxlX2Zyb21fcmV2X2xpc3QgKGZyYW1lLCBy
ZWFkX3N0YWNrX3BvcCAoZnJhbWUpLT51LnZlY3Rvci5lbGVtcyk7CiAJICBicmVhazsKIAljYXNl
IFJFX3N1Yl9jaGFyX3RhYmxlOgotCSAgbG9jYXRlX3N5bXMgPSByZWFkX3N0YWNrX3RvcCAoKS0+
dS52ZWN0b3Iub2xkX2xvY2F0ZV9zeW1zOwotCSAgb2JqID0gc3ViX2NoYXJfdGFibGVfZnJvbV9y
ZXZfbGlzdCAocmVhZF9zdGFja19wb3AgKCktPnUudmVjdG9yLmVsZW1zLAotCQkJCQkgICAgICBy
ZWFkY2hhcmZ1bik7CisJICBmcmFtZS0+bG9jYXRlX3N5bXMgPSByZWFkX3N0YWNrX3RvcCAoZnJh
bWUpLT51LnZlY3Rvci5vbGRfbG9jYXRlX3N5bXM7CisJICBvYmogPSBzdWJfY2hhcl90YWJsZV9m
cm9tX3Jldl9saXN0IChmcmFtZSwgcmVhZF9zdGFja19wb3AgKGZyYW1lKS0+dS52ZWN0b3IuZWxl
bXMpOwogCSAgYnJlYWs7CiAJZGVmYXVsdDoKLQkgIGludmFsaWRfc3ludGF4ICgiXSIsIHJlYWRj
aGFyZnVuKTsKKwkgIGludmFsaWRfc3ludGF4IChmcmFtZSwgIl0iKTsKIAkgIGJyZWFrOwogCX0K
ICAgICAgIGJyZWFrOwpAQCAtNDA4NSwxMyArNTcyNywxMyBAQCByZWFkMCAoTGlzcF9PYmplY3Qg
cmVhZGNoYXJmdW4sIGJvb2wgbG9jYXRlX3N5bXMpCiAKIAkqcCsrID0gJyMnOwogCWludCBjaDsK
LQlSRUFEX0FORF9CVUZGRVIgKGNoKTsKKwlSRUFEX0FORF9CVUZGRVIgKGZyYW1lLGNoKTsKIAog
CXN3aXRjaCAoY2gpCiAJICB7CiAJICBjYXNlICdcJyc6CiAJICAgIC8qICMnWCAtLSBzcGVjaWFs
IHN5bnRheCBmb3IgKGZ1bmN0aW9uIFgpICovCi0JICAgIHJlYWRfc3RhY2tfcHVzaCAoKHN0cnVj
dCByZWFkX3N0YWNrX2VudHJ5KSB7CisJICAgIHJlYWRfc3RhY2tfcHVzaCAoZnJhbWUsIChzdHJ1
Y3QgcmVhZF9zdGFja19lbnRyeSkgewogCQkudHlwZSA9IFJFX3NwZWNpYWwsCiAJCS51LnNwZWNp
YWwuc3ltYm9sID0gUWZ1bmN0aW9uLAogCSAgICAgIH0pOwpAQCAtNDEwNCw4MiArNTc0Niw4MiBA
QCByZWFkMCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGJvb2wgbG9jYXRlX3N5bXMpCiAKIAkg
IGNhc2UgJ3MnOgogCSAgICAvKiAjcyguLi4pIC0tIGEgcmVjb3JkIG9yIGhhc2gtdGFibGUgKi8K
LQkgICAgUkVBRF9BTkRfQlVGRkVSIChjaCk7CisJICAgIFJFQURfQU5EX0JVRkZFUiAoZnJhbWUs
Y2gpOwogCSAgICBpZiAoY2ggIT0gJygnKQogCSAgICAgIHsKLQkJVU5SRUFEIChjaCk7Ci0JCUlO
VkFMSURfU1lOVEFYX1dJVEhfQlVGRkVSICgpOworCQlVTlJFQUQgKGZyYW1lLCBjaCk7CisJCUlO
VkFMSURfU1lOVEFYX1dJVEhfQlVGRkVSIChmcmFtZSk7CiAJICAgICAgfQotCSAgICByZWFkX3N0
YWNrX3B1c2ggKChzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSkgeworCSAgICByZWFkX3N0YWNrX3B1
c2ggKGZyYW1lLCAoc3RydWN0IHJlYWRfc3RhY2tfZW50cnkpIHsKIAkJLnR5cGUgPSBSRV9yZWNv
cmQsCiAJCS51LnZlY3Rvci5lbGVtcyA9IFFuaWwsCi0JCS51LnZlY3Rvci5vbGRfbG9jYXRlX3N5
bXMgPSBsb2NhdGVfc3ltcywKKwkJLnUudmVjdG9yLm9sZF9sb2NhdGVfc3ltcyA9IGZyYW1lLT5s
b2NhdGVfc3ltcywKIAkgICAgICB9KTsKLQkgICAgbG9jYXRlX3N5bXMgPSBmYWxzZTsKKwkgICAg
ZnJhbWUtPmxvY2F0ZV9zeW1zID0gZmFsc2U7CiAJICAgIGdvdG8gcmVhZF9vYmo7CiAKIAkgIGNh
c2UgJ14nOgogCSAgICAvKiAjXlsuLi5dICAtLSBjaGFyLXRhYmxlCiAJICAgICAgICNeXlsuLi5d
IC0tIHN1Yi1jaGFyLXRhYmxlICovCi0JICAgIFJFQURfQU5EX0JVRkZFUiAoY2gpOworCSAgICBS
RUFEX0FORF9CVUZGRVIgKGZyYW1lLGNoKTsKIAkgICAgaWYgKGNoID09ICdeJykKIAkgICAgICB7
Ci0JCWNoID0gUkVBRENIQVI7CisJCWNoID0gUkVBRENIQVIgKGZyYW1lKTsKIAkJaWYgKGNoID09
ICdbJykKIAkJICB7Ci0JCSAgICByZWFkX3N0YWNrX3B1c2ggKChzdHJ1Y3QgcmVhZF9zdGFja19l
bnRyeSkgeworCQkgICAgcmVhZF9zdGFja19wdXNoIChmcmFtZSwgKHN0cnVjdCByZWFkX3N0YWNr
X2VudHJ5KSB7CiAJCQkudHlwZSA9IFJFX3N1Yl9jaGFyX3RhYmxlLAogCQkJLnUudmVjdG9yLmVs
ZW1zID0gUW5pbCwKLQkJCS51LnZlY3Rvci5vbGRfbG9jYXRlX3N5bXMgPSBsb2NhdGVfc3ltcywK
KwkJCS51LnZlY3Rvci5vbGRfbG9jYXRlX3N5bXMgPSBmcmFtZS0+bG9jYXRlX3N5bXMsCiAJCSAg
ICAgIH0pOwotCQkgICAgbG9jYXRlX3N5bXMgPSBmYWxzZTsKKwkJICAgIGZyYW1lLT5sb2NhdGVf
c3ltcyA9IGZhbHNlOwogCQkgICAgZ290byByZWFkX29iajsKIAkJICB9CiAJCWVsc2UKIAkJICB7
Ci0JCSAgICBVTlJFQUQgKGNoKTsKLQkJICAgIElOVkFMSURfU1lOVEFYX1dJVEhfQlVGRkVSICgp
OworCQkgICAgVU5SRUFEIChmcmFtZSwgY2gpOworCQkgICAgSU5WQUxJRF9TWU5UQVhfV0lUSF9C
VUZGRVIgKGZyYW1lKTsKIAkJICB9CiAJICAgICAgfQogCSAgICBlbHNlIGlmIChjaCA9PSAnWycp
CiAJICAgICAgewotCQlyZWFkX3N0YWNrX3B1c2ggKChzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSkg
eworCQlyZWFkX3N0YWNrX3B1c2ggKGZyYW1lLCAoc3RydWN0IHJlYWRfc3RhY2tfZW50cnkpIHsK
IAkJICAgIC50eXBlID0gUkVfY2hhcl90YWJsZSwKIAkJICAgIC51LnZlY3Rvci5lbGVtcyA9IFFu
aWwsCi0JCSAgICAudS52ZWN0b3Iub2xkX2xvY2F0ZV9zeW1zID0gbG9jYXRlX3N5bXMsCisJCSAg
ICAudS52ZWN0b3Iub2xkX2xvY2F0ZV9zeW1zID0gZnJhbWUtPmxvY2F0ZV9zeW1zLAogCQkgIH0p
OwotCQlsb2NhdGVfc3ltcyA9IGZhbHNlOworCQlmcmFtZS0+bG9jYXRlX3N5bXMgPSBmYWxzZTsK
IAkJZ290byByZWFkX29iajsKIAkgICAgICB9CiAJICAgIGVsc2UKIAkgICAgICB7Ci0JCVVOUkVB
RCAoY2gpOwotCQlJTlZBTElEX1NZTlRBWF9XSVRIX0JVRkZFUiAoKTsKKwkJVU5SRUFEIChmcmFt
ZSwgY2gpOworCQlJTlZBTElEX1NZTlRBWF9XSVRIX0JVRkZFUiAoZnJhbWUpOwogCSAgICAgIH0K
IAogCSAgY2FzZSAnKCc6CiAJICAgIC8qICMoLi4uKSAtLSBzdHJpbmcgd2l0aCBwcm9wZXJ0aWVz
ICovCi0JICAgIHJlYWRfc3RhY2tfcHVzaCAoKHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5KSB7CisJ
ICAgIHJlYWRfc3RhY2tfcHVzaCAoZnJhbWUsIChzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSkgewog
CQkudHlwZSA9IFJFX3N0cmluZ19wcm9wcywKIAkJLnUudmVjdG9yLmVsZW1zID0gUW5pbCwKLQkJ
LnUudmVjdG9yLm9sZF9sb2NhdGVfc3ltcyA9IGxvY2F0ZV9zeW1zLAorCQkudS52ZWN0b3Iub2xk
X2xvY2F0ZV9zeW1zID0gZnJhbWUtPmxvY2F0ZV9zeW1zLAogCSAgICAgIH0pOwotCSAgICBsb2Nh
dGVfc3ltcyA9IGZhbHNlOworCSAgICBmcmFtZS0+bG9jYXRlX3N5bXMgPSBmYWxzZTsKIAkgICAg
Z290byByZWFkX29iajsKIAogCSAgY2FzZSAnWyc6CiAJICAgIC8qICNbLi4uXSAtLSBieXRlLWNv
ZGUgKi8KLQkgICAgcmVhZF9zdGFja19wdXNoICgoc3RydWN0IHJlYWRfc3RhY2tfZW50cnkpIHsK
KwkgICAgcmVhZF9zdGFja19wdXNoIChmcmFtZSwgKHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5KSB7
CiAJCS50eXBlID0gUkVfYnl0ZV9jb2RlLAogCQkudS52ZWN0b3IuZWxlbXMgPSBRbmlsLAotCQku
dS52ZWN0b3Iub2xkX2xvY2F0ZV9zeW1zID0gbG9jYXRlX3N5bXMsCisJCS51LnZlY3Rvci5vbGRf
bG9jYXRlX3N5bXMgPSBmcmFtZS0+bG9jYXRlX3N5bXMsCiAJICAgICAgfSk7Ci0JICAgIGxvY2F0
ZV9zeW1zID0gZmFsc2U7CisJICAgIGZyYW1lLT5sb2NhdGVfc3ltcyA9IGZhbHNlOwogCSAgICBn
b3RvIHJlYWRfb2JqOwogCiAJICBjYXNlICcmJzoKIAkgICAgLyogIyZOIi4uLiIgLS0gYm9vbC12
ZWN0b3IgKi8KLQkgICAgb2JqID0gcmVhZF9ib29sX3ZlY3RvciAocmVhZGNoYXJmdW4pOworCSAg
ICBvYmogPSByZWFkX2Jvb2xfdmVjdG9yIChmcmFtZSk7CiAJICAgIGJyZWFrOwogCiAJICBjYXNl
ICchJzoKQEAgLTQxODgsMzMgKzU4MzAsMzMgQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFy
ZnVuLCBib29sIGxvY2F0ZV9zeW1zKQogCSAgICB7CiAJICAgICAgaW50IGM7CiAJICAgICAgZG8K
LQkJYyA9IFJFQURDSEFSOworCQljID0gUkVBRENIQVIgKGZyYW1lKTsKIAkgICAgICB3aGlsZSAo
YyA+PSAwICYmIGMgIT0gJ1xuJyk7CiAJICAgICAgZ290byByZWFkX29iajsKIAkgICAgfQogCiAJ
ICBjYXNlICd4JzoKIAkgIGNhc2UgJ1gnOgotCSAgICBvYmogPSByZWFkX2ludGVnZXIgKHJlYWRj
aGFyZnVuLCAxNik7CisJICAgIG9iaiA9IHJlYWRfaW50ZWdlciAoZnJhbWUsIDE2KTsKIAkgICAg
YnJlYWs7CiAKIAkgIGNhc2UgJ28nOgogCSAgY2FzZSAnTyc6Ci0JICAgIG9iaiA9IHJlYWRfaW50
ZWdlciAocmVhZGNoYXJmdW4sIDgpOworCSAgICBvYmogPSByZWFkX2ludGVnZXIgKGZyYW1lLCA4
KTsKIAkgICAgYnJlYWs7CiAKIAkgIGNhc2UgJ2InOgogCSAgY2FzZSAnQic6Ci0JICAgIG9iaiA9
IHJlYWRfaW50ZWdlciAocmVhZGNoYXJmdW4sIDIpOworCSAgICBvYmogPSByZWFkX2ludGVnZXIg
KGZyYW1lLCAyKTsKIAkgICAgYnJlYWs7CiAKIAkgIGNhc2UgJ0AnOgogCSAgICAvKiAjQE5VTUJF
UiBpcyB1c2VkIHRvIHNraXAgTlVNQkVSIGZvbGxvd2luZyBieXRlcy4KIAkgICAgICAgVGhhdCdz
IHVzZWQgaW4gLmVsYyBmaWxlcyB0byBza2lwIG92ZXIgZG9jIHN0cmluZ3MKIAkgICAgICAgYW5k
IGZ1bmN0aW9uIGRlZmluaXRpb25zIHRoYXQgY2FuIGJlIGxvYWRlZCBsYXppbHkuICAqLwotCSAg
ICBpZiAoc2tpcF9sYXp5X3N0cmluZyAocmVhZGNoYXJmdW4pKQorCSAgICBpZiAoc2tpcF9sYXp5
X3N0cmluZyAoZnJhbWUpKQogCSAgICAgIGdvdG8gcmVhZF9vYmo7Ci0JICAgIG9iaiA9IFFuaWw7
CSAgICAgIC8qICNAMDAgc2tpcHMgdG8gRU9CL0VPRiBhbmQgeWllbGRzIG5pbC4gICovCisJICAg
IG9iaiA9IFFuaWw7ICAgICAgIC8qICNAMDAgc2tpcHMgdG8gRU9CL0VPRiBhbmQgeWllbGRzIG5p
bC4gICovCiAJICAgIGJyZWFrOwogCiAJICBjYXNlICckJzoKQEAgLTQyMjQsMTQgKzU4NjYsMTQg
QEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBib29sIGxvY2F0ZV9zeW1zKQogCiAJ
ICBjYXNlICc6JzoKIAkgICAgLyogIzpYIC0tIHVuaW50ZXJuZWQgc3ltYm9sICovCi0JICAgIGMg
PSBSRUFEQ0hBUjsKKwkgICAgYyA9IFJFQURDSEFSIChmcmFtZSk7CiAJICAgIGlmIChjIDw9IDMy
IHx8IGMgPT0gTk9fQlJFQUtfU1BBQ0UKIAkJfHwgYyA9PSAnIicgfHwgYyA9PSAnXCcnIHx8IGMg
PT0gJzsnIHx8IGMgPT0gJyMnCiAJCXx8IGMgPT0gJygnIHx8IGMgPT0gJyknICB8fCBjID09ICdb
JyB8fCBjID09ICddJwogCQl8fCBjID09ICdgJyB8fCBjID09ICcsJykKIAkgICAgICB7CiAJCS8q
IE5vIHN5bWJvbCBjaGFyYWN0ZXIgZm9sbG93czogdGhpcyBpcyB0aGUgZW1wdHkgc3ltYm9sLiAg
Ki8KLQkJVU5SRUFEIChjKTsKKwkJVU5SRUFEIChmcmFtZSwgYyk7CiAJCW9iaiA9IEZtYWtlX3N5
bWJvbCAoZW1wdHlfdW5pYnl0ZV9zdHJpbmcpOwogCQlicmVhazsKIAkgICAgICB9CkBAIC00MjQx
LDE0ICs1ODgzLDE0IEBAIHJlYWQwIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwgYm9vbCBsb2Nh
dGVfc3ltcykKIAogCSAgY2FzZSAnXyc6CiAJICAgIC8qICNfWCAtLSBzeW1ib2wgd2l0aG91dCBz
aG9ydGhhbmQgKi8KLQkgICAgYyA9IFJFQURDSEFSOworCSAgICBjID0gUkVBRENIQVIgKGZyYW1l
KTsKIAkgICAgaWYgKGMgPD0gMzIgfHwgYyA9PSBOT19CUkVBS19TUEFDRQogCQl8fCBjID09ICci
JyB8fCBjID09ICdcJycgfHwgYyA9PSAnOycgfHwgYyA9PSAnIycKIAkJfHwgYyA9PSAnKCcgfHwg
YyA9PSAnKScgIHx8IGMgPT0gJ1snIHx8IGMgPT0gJ10nCiAJCXx8IGMgPT0gJ2AnIHx8IGMgPT0g
JywnKQogCSAgICAgIHsKIAkJLyogTm8gc3ltYm9sIGNoYXJhY3RlciBmb2xsb3dzOiB0aGlzIGlz
IHRoZSBlbXB0eSBzeW1ib2wuICAqLwotCQlVTlJFQUQgKGMpOworCQlVTlJFQUQgKGZyYW1lLCBj
KTsKIAkJb2JqID0gRmludGVybiAoZW1wdHlfdW5pYnl0ZV9zdHJpbmcsIFFuaWwpOwogCQlicmVh
azsKIAkgICAgICB9CkBAIC00MjY0LDE5ICs1OTA2LDE5IEBAIHJlYWQwIChMaXNwX09iamVjdCBy
ZWFkY2hhcmZ1biwgYm9vbCBsb2NhdGVfc3ltcykKIAkJaW50IGM7CiAJCWZvciAoOzspCiAJCSAg
ewotCQkgICAgUkVBRF9BTkRfQlVGRkVSIChjKTsKKwkJICAgIFJFQURfQU5EX0JVRkZFUiAoZnJh
bWUsYyk7CiAJCSAgICBpZiAoYyA8ICcwJyB8fCBjID4gJzknKQogCQkgICAgICBicmVhazsKIAkJ
ICAgIGlmIChja2RfbXVsICgmbiwgbiwgMTApCiAJCQl8fCBja2RfYWRkICgmbiwgbiwgYyAtICcw
JykpCi0JCSAgICAgIElOVkFMSURfU1lOVEFYX1dJVEhfQlVGRkVSICgpOworCQkgICAgICBJTlZB
TElEX1NZTlRBWF9XSVRIX0JVRkZFUiAoZnJhbWUpOwogCQkgIH0KIAkJaWYgKGMgPT0gJ3InIHx8
IGMgPT0gJ1InKQogCQkgIHsKIAkJICAgIC8qICNOckRJR0lUUyAtLSByYWRpeC1OIG51bWJlciAq
LwotCQkgICAgaWYgKG4gPCAyIHx8IG4gPiAzNikKLQkJICAgICAgaW52YWxpZF9yYWRpeF9pbnRl
Z2VyIChuLCByZWFkY2hhcmZ1bik7Ci0JCSAgICBvYmogPSByZWFkX2ludGVnZXIgKHJlYWRjaGFy
ZnVuLCBuKTsKKwkJICAgIGlmIChuIDwgMCB8fCBuID4gMzYpCisJCSAgICAgIGludmFsaWRfcmFk
aXhfaW50ZWdlciAoZnJhbWUsbik7CisJCSAgICBvYmogPSByZWFkX2ludGVnZXIgKGZyYW1lLCBu
KTsKIAkJICAgIGJyZWFrOwogCQkgIH0KIAkJZWxzZSBpZiAobiA8PSBNT1NUX1BPU0lUSVZFX0ZJ
WE5VTSAmJiAhTklMUCAoVnJlYWRfY2lyY2xlKSkKQEAgLTQyODcsNyArNTkyOSw3IEBAIHJlYWQw
IChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwgYm9vbCBsb2NhdGVfc3ltcykKIAkJCUxpc3BfT2Jq
ZWN0IHBsYWNlaG9sZGVyID0gRmNvbnMgKFFuaWwsIFFuaWwpOwogCiAJCQlzdHJ1Y3QgTGlzcF9I
YXNoX1RhYmxlICpoCi0JCQkgID0gWEhBU0hfVEFCTEUgKHJlYWRfb2JqZWN0c19tYXApOworCQkJ
ICA9IFhIQVNIX1RBQkxFIChmcmFtZS0+b2JqZWN0c19tYXApOwogCQkJTGlzcF9PYmplY3QgbnVt
YmVyID0gbWFrZV9maXhudW0gKG4pOwogCQkJaGFzaF9oYXNoX3QgaGFzaDsKIAkJCXB0cmRpZmZf
dCBpID0gaGFzaF9maW5kX2dldF9oYXNoIChoLCBudW1iZXIsICZoYXNoKTsKQEAgLTQyOTYsNyAr
NTkzOCw3IEBAIHJlYWQwIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwgYm9vbCBsb2NhdGVfc3lt
cykKIAkJCSAgc2V0X2hhc2hfdmFsdWVfc2xvdCAoaCwgaSwgcGxhY2Vob2xkZXIpOwogCQkJZWxz
ZQogCQkJICBoYXNoX3B1dCAoaCwgbnVtYmVyLCBwbGFjZWhvbGRlciwgaGFzaCk7Ci0JCQlyZWFk
X3N0YWNrX3B1c2ggKChzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSkgeworCQkJcmVhZF9zdGFja19w
dXNoIChmcmFtZSwgKHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5KSB7CiAJCQkgICAgLnR5cGUgPSBS
RV9udW1iZXJlZCwKIAkJCSAgICAudS5udW1iZXJlZC5udW1iZXIgPSBudW1iZXIsCiAJCQkgICAg
LnUubnVtYmVyZWQucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlciwKQEAgLTQzMDcsNDIgKzU5NDks
NDIgQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBib29sIGxvY2F0ZV9zeW1zKQog
CQkgICAgICB7CiAJCQkvKiAjTiMgLS0gcmVmZXJlbmNlIHRvIG51bWJlcmVkIG9iamVjdCAqLwog
CQkJc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaAotCQkJICA9IFhIQVNIX1RBQkxFIChyZWFkX29i
amVjdHNfbWFwKTsKKwkJCSAgPSBYSEFTSF9UQUJMRSAoZnJhbWUtPm9iamVjdHNfbWFwKTsKIAkJ
CXB0cmRpZmZfdCBpID0gaGFzaF9maW5kIChoLCBtYWtlX2ZpeG51bSAobikpOwogCQkJaWYgKGkg
PCAwKQotCQkJICBJTlZBTElEX1NZTlRBWF9XSVRIX0JVRkZFUiAoKTsKKwkJCSAgSU5WQUxJRF9T
WU5UQVhfV0lUSF9CVUZGRVIgKGZyYW1lKTsKIAkJCW9iaiA9IEhBU0hfVkFMVUUgKGgsIGkpOwog
CQkJYnJlYWs7CiAJCSAgICAgIH0KIAkJICAgIGVsc2UKLQkJICAgICAgSU5WQUxJRF9TWU5UQVhf
V0lUSF9CVUZGRVIgKCk7CisJCSAgICAgIElOVkFMSURfU1lOVEFYX1dJVEhfQlVGRkVSIChmcmFt
ZSk7CiAJCSAgfQogCQllbHNlCi0JCSAgSU5WQUxJRF9TWU5UQVhfV0lUSF9CVUZGRVIgKCk7CisJ
CSAgSU5WQUxJRF9TWU5UQVhfV0lUSF9CVUZGRVIgKGZyYW1lKTsKIAkgICAgICB9CiAJICAgIGVs
c2UKLQkgICAgICBJTlZBTElEX1NZTlRBWF9XSVRIX0JVRkZFUiAoKTsKKwkgICAgICBJTlZBTElE
X1NZTlRBWF9XSVRIX0JVRkZFUiAoZnJhbWUpOwogCSAgfQogCWJyZWFrOwogICAgICAgfQogCiAg
ICAgY2FzZSAnPyc6Ci0gICAgICBvYmogPSByZWFkX2NoYXJfbGl0ZXJhbCAocmVhZGNoYXJmdW4p
OworICAgICAgb2JqID0gcmVhZF9jaGFyX2xpdGVyYWwgKGZyYW1lKTsKICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSAnIic6Ci0gICAgICBvYmogPSByZWFkX3N0cmluZ19saXRlcmFsIChyZWFkY2hh
cmZ1bik7CisgICAgICBvYmogPSByZWFkX3N0cmluZ19saXRlcmFsIChmcmFtZSk7CiAgICAgICBi
cmVhazsKIAogICAgIGNhc2UgJ1wnJzoKLSAgICAgIHJlYWRfc3RhY2tfcHVzaCAoKHN0cnVjdCBy
ZWFkX3N0YWNrX2VudHJ5KSB7CisgICAgICByZWFkX3N0YWNrX3B1c2ggKGZyYW1lLCAoc3RydWN0
IHJlYWRfc3RhY2tfZW50cnkpIHsKIAkgIC50eXBlID0gUkVfc3BlY2lhbCwKIAkgIC51LnNwZWNp
YWwuc3ltYm9sID0gUXF1b3RlLAogCX0pOwogICAgICAgZ290byByZWFkX29iajsKIAogICAgIGNh
c2UgJ2AnOgotICAgICAgcmVhZF9zdGFja19wdXNoICgoc3RydWN0IHJlYWRfc3RhY2tfZW50cnkp
IHsKKyAgICAgIHJlYWRfc3RhY2tfcHVzaCAoZnJhbWUsIChzdHJ1Y3QgcmVhZF9zdGFja19lbnRy
eSkgewogCSAgLnR5cGUgPSBSRV9zcGVjaWFsLAogCSAgLnUuc3BlY2lhbC5zeW1ib2wgPSBRYmFj
a3F1b3RlLAogCX0pOwpAQCAtNDM1MCwxNyArNTk5MiwxNyBAQCByZWFkMCAoTGlzcF9PYmplY3Qg
cmVhZGNoYXJmdW4sIGJvb2wgbG9jYXRlX3N5bXMpCiAKICAgICBjYXNlICcsJzoKICAgICAgIHsK
LQlpbnQgY2ggPSBSRUFEQ0hBUjsKKwlpbnQgY2ggPSBSRUFEQ0hBUiAoZnJhbWUpOwogCUxpc3Bf
T2JqZWN0IHN5bTsKIAlpZiAoY2ggPT0gJ0AnKQogCSAgc3ltID0gUWNvbW1hX2F0OwogCWVsc2UK
IAkgIHsKIAkgICAgaWYgKGNoID49IDApCi0JICAgICAgVU5SRUFEIChjaCk7CisJICAgICAgVU5S
RUFEIChmcmFtZSwgY2gpOwogCSAgICBzeW0gPSBRY29tbWE7CiAJICB9Ci0JcmVhZF9zdGFja19w
dXNoICgoc3RydWN0IHJlYWRfc3RhY2tfZW50cnkpIHsKKwlyZWFkX3N0YWNrX3B1c2ggKGZyYW1l
LCAoc3RydWN0IHJlYWRfc3RhY2tfZW50cnkpIHsKIAkgICAgLnR5cGUgPSBSRV9zcGVjaWFsLAog
CSAgICAudS5zcGVjaWFsLnN5bWJvbCA9IHN5bSwKIAkgIH0pOwpAQCAtNDM3MSwyNyArNjAxMywy
NyBAQCByZWFkMCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGJvb2wgbG9jYXRlX3N5bXMpCiAg
ICAgICB7CiAJaW50IGM7CiAJZG8KLQkgIGMgPSBSRUFEQ0hBUjsKKwkgIGMgPSBSRUFEQ0hBUiAo
ZnJhbWUpOwogCXdoaWxlIChjID49IDAgJiYgYyAhPSAnXG4nKTsKIAlnb3RvIHJlYWRfb2JqOwog
ICAgICAgfQogCiAgICAgY2FzZSAnLic6CiAgICAgICB7Ci0JaW50IG5jaCA9IFJFQURDSEFSOwot
CVVOUkVBRCAobmNoKTsKKwlpbnQgbmNoID0gUkVBRENIQVIgKGZyYW1lKTsKKwlVTlJFQUQgKGZy
YW1lLCBuY2gpOwogCWlmIChuY2ggPD0gMzIgfHwgbmNoID09IE5PX0JSRUFLX1NQQUNFCiAJICAg
IHx8IG5jaCA9PSAnIicgfHwgbmNoID09ICdcJycgfHwgbmNoID09ICc7JwogCSAgICB8fCBuY2gg
PT0gJygnIHx8IG5jaCA9PSAnWycgfHwgbmNoID09ICcjJwogCSAgICB8fCBuY2ggPT0gJz8nIHx8
IG5jaCA9PSAnYCcgfHwgbmNoID09ICcsJykKIAkgIHsKLQkgICAgaWYgKCFyZWFkX3N0YWNrX2Vt
cHR5X3AgKGJhc2Vfc3ApCi0JCSYmIHJlYWRfc3RhY2tfdG9wICgpLT50eXBlID09ICBSRV9saXN0
KQorCSAgICBpZiAoIXJlYWRfc3RhY2tfZW1wdHlfcCAoZnJhbWUpCisJCSYmIHJlYWRfc3RhY2tf
dG9wIChmcmFtZSktPnR5cGUgPT0gIFJFX2xpc3QpCiAJICAgICAgewotCQlyZWFkX3N0YWNrX3Rv
cCAoKS0+dHlwZSA9IFJFX2xpc3RfZG90OworCQlyZWFkX3N0YWNrX3RvcCAoZnJhbWUpLT50eXBl
ID0gUkVfbGlzdF9kb3Q7CiAJCWdvdG8gcmVhZF9vYmo7CiAJICAgICAgfQotCSAgICBpbnZhbGlk
X3N5bnRheCAoIi4iLCByZWFkY2hhcmZ1bik7CisJICAgIGludmFsaWRfc3ludGF4IChmcmFtZSwg
Ii4iKTsKIAkgIH0KICAgICAgIH0KICAgICAgIC8qIG1heSBiZSBhIG51bWJlciBvciBzeW1ib2wg
c3RhcnRpbmcgd2l0aCBhIGRvdCAqLwpAQCAtNDQwOSw3ICs2MDUxLDcgQEAgcmVhZDAgKExpc3Bf
T2JqZWN0IHJlYWRjaGFyZnVuLCBib29sIGxvY2F0ZV9zeW1zKQogCWNoYXIgKnAgPSByZWFkX2J1
ZmZlcjsKIAljaGFyICplbmQgPSByZWFkX2J1ZmZlciArIHJlYWRfYnVmZmVyX3NpemU7CiAJYm9v
bCBxdW90ZWQgPSBmYWxzZTsKLQlFTUFDU19JTlQgc3RhcnRfcG9zaXRpb24gPSByZWFkY2hhcl9v
ZmZzZXQgLSAxOworCUVNQUNTX0lOVCBzdGFydF9wb3NpdGlvbiA9IGZyYW1lLT5jaGFyX29mZnNl
dCAtIDE7CiAKIAlkbwogCSAgewpAQCAtNDQyNSwyOCArNjA2NywyOCBAQCByZWFkMCAoTGlzcF9P
YmplY3QgcmVhZGNoYXJmdW4sIGJvb2wgbG9jYXRlX3N5bXMpCiAKIAkgICAgaWYgKGMgPT0gJ1xc
JykKIAkgICAgICB7Ci0JCWMgPSBSRUFEQ0hBUjsKKwkJYyA9IFJFQURDSEFSIChmcmFtZSk7CiAJ
CWlmIChjIDwgMCkKLQkJICBlbmRfb2ZfZmlsZV9lcnJvciAoKTsKKwkJICBlbmRfb2ZfZmlsZV9l
cnJvciAoZnJhbWUpOwogCQlxdW90ZWQgPSB0cnVlOwogCSAgICAgIH0KIAotCSAgICBpZiAobXVs
dGlieXRlKQorCSAgICBpZiAoZnJhbWUtPm11bHRpYnl0ZSkKIAkgICAgICBwICs9IENIQVJfU1RS
SU5HIChjLCAodW5zaWduZWQgY2hhciAqKSBwKTsKIAkgICAgZWxzZQogCSAgICAgICpwKysgPSBj
OwotCSAgICBjID0gUkVBRENIQVI7CisJICAgIGMgPSBSRUFEQ0hBUiAoZnJhbWUpOwogCSAgfQog
CXdoaWxlIChjID4gMzIKIAkgICAgICAgJiYgYyAhPSBOT19CUkVBS19TUEFDRQogCSAgICAgICAm
JiAoYyA+PSAxMjgKIAkJICAgfHwgISggICBjID09ICciJyB8fCBjID09ICdcJycgfHwgYyA9PSAn
OycgfHwgYyA9PSAnIycKLQkJCXx8IGMgPT0gJygnIHx8IGMgPT0gJyknICB8fCBjID09ICdbJyB8
fCBjID09ICddJwotCQkJfHwgYyA9PSAnYCcgfHwgYyA9PSAnLCcpKSk7CisJCQkgICB8fCBjID09
ICcoJyB8fCBjID09ICcpJyAgfHwgYyA9PSAnWycgfHwgYyA9PSAnXScKKwkJCSAgIHx8IGMgPT0g
J2AnIHx8IGMgPT0gJywnKSkpOwogCiAJKnAgPSAwOwogCXB0cmRpZmZfdCBuYnl0ZXMgPSBwIC0g
cmVhZF9idWZmZXI7Ci0JVU5SRUFEIChjKTsKKwlVTlJFQUQgKGZyYW1lLCBjKTsKIAogCS8qIE9u
bHkgYXR0ZW1wdCB0byBwYXJzZSB0aGUgdG9rZW4gYXMgYSBudW1iZXIgaWYgaXQgc3RhcnRzIGFz
IG9uZS4gICovCiAJY2hhciBjMCA9IHJlYWRfYnVmZmVyWzBdOwpAQCAtNDQ2NCwxNCArNjEwNiwx
NCBAQCByZWFkMCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGJvb2wgbG9jYXRlX3N5bXMpCiAK
IAkvKiBzeW1ib2wsIHBvc3NpYmx5IHVuaW50ZXJuZWQgKi8KIAlwdHJkaWZmX3QgbmNoYXJzCi0J
ICA9IChtdWx0aWJ5dGUKKwkgID0gKGZyYW1lLT5tdWx0aWJ5dGUKIAkgICAgID8gbXVsdGlieXRl
X2NoYXJzX2luX3RleHQgKCh1bnNpZ25lZCBjaGFyICopcmVhZF9idWZmZXIsIG5ieXRlcykKIAkg
ICAgIDogbmJ5dGVzKTsKIAlMaXNwX09iamVjdCByZXN1bHQ7CiAJaWYgKHVuaW50ZXJuZWRfc3lt
Ym9sKQogCSAgewogCSAgICBMaXNwX09iamVjdCBuYW1lCi0JICAgICAgPSBtYWtlX3NwZWNpZmll
ZF9zdHJpbmcgKHJlYWRfYnVmZmVyLCBuY2hhcnMsIG5ieXRlcywgbXVsdGlieXRlKTsKKwkgICAg
ICA9IG1ha2Vfc3BlY2lmaWVkX3N0cmluZyAocmVhZF9idWZmZXIsIG5jaGFycywgbmJ5dGVzLCBm
cmFtZS0+bXVsdGlieXRlKTsKIAkgICAgcmVzdWx0ID0gRm1ha2Vfc3ltYm9sIChuYW1lKTsKIAkg
IH0KIAllbHNlCkBAIC00NDg4LDEwICs2MTMwLDEwIEBAIHJlYWQwIChMaXNwX09iamVjdCByZWFk
Y2hhcmZ1biwgYm9vbCBsb2NhdGVfc3ltcykKIAogCSAgICBMaXNwX09iamVjdCBmb3VuZDsKIAkg
ICAgaWYgKHNraXBfc2hvcnRoYW5kCi0JCS8qIFdlIGV4ZW1wdCBjaGFyYWN0ZXJzIHVzZWQgaW4g
dGhlICJjb3JlIiBFbWFjcyBMaXNwCi0JCSAgIHN5bWJvbHMgdGhhdCBhcmUgY29tcHJpc2VkIGVu
dGlyZWx5IG9mIGNoYXJhY3RlcnMKLQkJICAgdGhhdCBoYXZlIHRoZSAnc3ltYm9sIGNvbnN0aXR1
ZW50JyBzeW50YXggZnJvbQotCQkgICB0cmFuc2Zvcm1pbmcgYWNjb3JkaW5nIHRvIHNob3J0aGFu
ZHMuICAqLworLyogV2UgZXhlbXB0IGNoYXJhY3RlcnMgdXNlZCBpbiB0aGUgImNvcmUiIEVtYWNz
IExpc3AKKyAgIHN5bWJvbHMgdGhhdCBhcmUgY29tcHJpc2VkIGVudGlyZWx5IG9mIGNoYXJhY3Rl
cnMKKyAgIHRoYXQgaGF2ZSB0aGUgJ3N5bWJvbCBjb25zdGl0dWVudCcgc3ludGF4IGZyb20KKyAg
IHRyYW5zZm9ybWluZyBhY2NvcmRpbmcgdG8gc2hvcnRoYW5kcy4gICovCiAJCXx8IHN5bWJvbF9j
aGFyX3NwYW4gKHJlYWRfYnVmZmVyKSA+PSBuYnl0ZXMpCiAJICAgICAgZm91bmQgPSBvYmxvb2t1
cCAob2JhcnJheSwgcmVhZF9idWZmZXIsIG5jaGFycywgbmJ5dGVzKTsKIAkgICAgZWxzZQpAQCAt
NDUwNywxOCArNjE0OSwxOCBAQCByZWFkMCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGJvb2wg
bG9jYXRlX3N5bXMpCiAJCUxpc3BfT2JqZWN0IG5hbWUgPSBtYWtlX3NwZWNpZmllZF9zdHJpbmcg
KGxvbmdoYW5kLAogCQkJCQkJCSAgbG9uZ2hhbmRfY2hhcnMsCiAJCQkJCQkJICBsb25naGFuZF9i
eXRlcywKLQkJCQkJCQkgIG11bHRpYnl0ZSk7CisJCQkJCQkJICBmcmFtZS0+bXVsdGlieXRlKTsK
IAkJeGZyZWUgKGxvbmdoYW5kKTsKIAkJcmVzdWx0ID0gaW50ZXJuX2RyaXZlciAobmFtZSwgb2Jh
cnJheSwgZm91bmQpOwogCSAgICAgIH0KIAkgICAgZWxzZQogCSAgICAgIHsKIAkJTGlzcF9PYmpl
Y3QgbmFtZSA9IG1ha2Vfc3BlY2lmaWVkX3N0cmluZyAocmVhZF9idWZmZXIsIG5jaGFycywKLQkJ
CQkJCQkgIG5ieXRlcywgbXVsdGlieXRlKTsKKwkJCQkJCQkgIG5ieXRlcywgZnJhbWUtPm11bHRp
Ynl0ZSk7CiAJCXJlc3VsdCA9IGludGVybl9kcml2ZXIgKG5hbWUsIG9iYXJyYXksIGZvdW5kKTsK
IAkgICAgICB9CiAJICB9Ci0JaWYgKGxvY2F0ZV9zeW1zICYmICFOSUxQIChyZXN1bHQpKQorCWlm
IChmcmFtZS0+bG9jYXRlX3N5bXMgJiYgIU5JTFAgKHJlc3VsdCkpCiAJICByZXN1bHQgPSBidWls
ZF9zeW1ib2xfd2l0aF9wb3MgKHJlc3VsdCwKIAkJCQkJICBtYWtlX2ZpeG51bSAoc3RhcnRfcG9z
aXRpb24pKTsKIApAQCAtNDUyOSw5ICs2MTcxLDkgQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRj
aGFyZnVuLCBib29sIGxvY2F0ZV9zeW1zKQogCiAgIC8qIFdlIGhhdmUgcmVhZCBhbiBvYmplY3Qg
aW4gYG9iaicuICBVc2UgdGhlIHN0YWNrIHRvIGRlY2lkZSB3aGF0IHRvCiAgICAgIGRvIHdpdGgg
aXQuICAqLwotICB3aGlsZSAocmRzdGFjay5zcCA+IGJhc2Vfc3ApCisgIHdoaWxlIChmcmFtZS0+
cmRzdGFjay5zcCA+IGZyYW1lLT5iYXNlX3NwKQogICAgIHsKLSAgICAgIHN0cnVjdCByZWFkX3N0
YWNrX2VudHJ5ICplID0gcmVhZF9zdGFja190b3AgKCk7CisgICAgICBzdHJ1Y3QgcmVhZF9zdGFj
a19lbnRyeSAqZSA9IHJlYWRfc3RhY2tfdG9wIChmcmFtZSk7CiAgICAgICBzd2l0Y2ggKGUtPnR5
cGUpCiAJewogCWNhc2UgUkVfbGlzdF9zdGFydDoKQEAgLTQ1NDksMTIgKzYxOTEsMTIgQEAgcmVh
ZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBib29sIGxvY2F0ZV9zeW1zKQogCiAJY2FzZSBS
RV9saXN0X2RvdDoKIAkgIHsKLQkgICAgc2tpcF9zcGFjZV9hbmRfY29tbWVudHMgKHJlYWRjaGFy
ZnVuKTsKLQkgICAgaW50IGNoID0gUkVBRENIQVI7CisJICAgIHNraXBfc3BhY2VfYW5kX2NvbW1l
bnRzIChmcmFtZSk7CisJICAgIGludCBjaCA9IFJFQURDSEFSIChmcmFtZSk7CiAJICAgIGlmIChj
aCAhPSAnKScpCi0JICAgICAgaW52YWxpZF9zeW50YXggKCJleHBlY3RlZCApIiwgcmVhZGNoYXJm
dW4pOworCSAgICAgIGludmFsaWRfc3ludGF4IChmcmFtZSwgImV4cGVjdGVkICkiKTsKIAkgICAg
WFNFVENEUiAoZS0+dS5saXN0LnRhaWwsIG9iaik7Ci0JICAgIHJlYWRfc3RhY2tfcG9wICgpOwor
CSAgICByZWFkX3N0YWNrX3BvcCAoZnJhbWUpOwogCSAgICBvYmogPSBlLT51Lmxpc3QuaGVhZDsK
IAogCSAgICAvKiBIYWNrOiBpbW1lZGlhdGVseSBjb252ZXJ0ICgjJCAuIEZJWE5VTSkgdG8gdGhl
IGNvcnJlc3BvbmRpbmcKQEAgLTQ1NjMsNyArNjIwNSw3IEBAIHJlYWQwIChMaXNwX09iamVjdCBy
ZWFkY2hhcmZ1biwgYm9vbCBsb2NhdGVfc3ltcykKIAkJJiYgQkFTRV9FUSAoWENBUiAob2JqKSwg
VmxvYWRfZmlsZV9uYW1lKQogCQkmJiAhTklMUCAoWENBUiAob2JqKSkKIAkJJiYgRklYTlVNUCAo
WENEUiAob2JqKSkpCi0JICAgICAgb2JqID0gZ2V0X2xhenlfc3RyaW5nIChvYmopOworCSAgICAg
IG9iaiA9IGdldF9sYXp5X3N0cmluZyAoZnJhbWUsIG9iaik7CiAKIAkgICAgYnJlYWs7CiAJICB9
CkBAIC00NTc4LDE5ICs2MjIwLDE5IEBAIHJlYWQwIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwg
Ym9vbCBsb2NhdGVfc3ltcykKIAkgIGdvdG8gcmVhZF9vYmo7CiAKIAljYXNlIFJFX3NwZWNpYWw6
Ci0JICByZWFkX3N0YWNrX3BvcCAoKTsKKwkgIHJlYWRfc3RhY2tfcG9wIChmcmFtZSk7CiAJICBv
YmogPSBsaXN0MiAoZS0+dS5zcGVjaWFsLnN5bWJvbCwgb2JqKTsKIAkgIGJyZWFrOwogCiAJY2Fz
ZSBSRV9udW1iZXJlZDoKIAkgIHsKLQkgICAgcmVhZF9zdGFja19wb3AgKCk7CisJICAgIHJlYWRf
c3RhY2tfcG9wIChmcmFtZSk7CiAJICAgIExpc3BfT2JqZWN0IHBsYWNlaG9sZGVyID0gZS0+dS5u
dW1iZXJlZC5wbGFjZWhvbGRlcjsKIAkgICAgaWYgKENPTlNQIChvYmopKQogCSAgICAgIHsKIAkJ
aWYgKEJBU0VfRVEgKG9iaiwgcGxhY2Vob2xkZXIpKQogCQkgIC8qIENhdGNoIHNpbGx5IGdhbWVz
IGxpa2UgIzE9IzEjICovCi0JCSAgaW52YWxpZF9zeW50YXggKCJub25zZW5zaWNhbCBzZWxmLXJl
ZmVyZW5jZSIsIHJlYWRjaGFyZnVuKTsKKwkJICBpbnZhbGlkX3N5bnRheCAoZnJhbWUsICJub25z
ZW5zaWNhbCBzZWxmLXJlZmVyZW5jZSIpOwogCiAJCS8qIE9wdGltaXphdGlvbjogc2luY2UgdGhl
IHBsYWNlaG9sZGVyIGlzIGFscmVhZHkKIAkJICAgYSBjb25zLCByZXB1cnBvc2UgaXQgYXMgdGhl
IGFjdHVhbCB2YWx1ZS4KQEAgLTQ2MDEsNyArNjI0Myw3IEBAIHJlYWQwIChMaXNwX09iamVjdCBy
ZWFkY2hhcmZ1biwgYm9vbCBsb2NhdGVfc3ltcykKIAkJRnNldGNkciAocGxhY2Vob2xkZXIsIFhD
RFIgKG9iaikpOwogCiAJCXN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmgyCi0JCSAgPSBYSEFTSF9U
QUJMRSAocmVhZF9vYmplY3RzX2NvbXBsZXRlZCk7CisJCSAgPSBYSEFTSF9UQUJMRSAoZnJhbWUt
Pm9iamVjdHNfY29tcGxldGVkKTsKIAkJaGFzaF9oYXNoX3QgaGFzaDsKIAkJcHRyZGlmZl90IGkg
PSBoYXNoX2ZpbmRfZ2V0X2hhc2ggKGgyLCBwbGFjZWhvbGRlciwgJmhhc2gpOwogCQllYXNzZXJ0
IChpIDwgMCk7CkBAIC00NjE2LDcgKzYyNTgsNyBAQCByZWFkMCAoTGlzcF9PYmplY3QgcmVhZGNo
YXJmdW4sIGJvb2wgbG9jYXRlX3N5bXMpCiAJCSAgICAmJiAhKFNUUklOR1AgKG9iaikgJiYgIXN0
cmluZ19pbnRlcnZhbHMgKG9iaikpKQogCQkgIHsKIAkJICAgIHN0cnVjdCBMaXNwX0hhc2hfVGFi
bGUgKmgyCi0JCSAgICAgID0gWEhBU0hfVEFCTEUgKHJlYWRfb2JqZWN0c19jb21wbGV0ZWQpOwor
CQkgICAgICA9IFhIQVNIX1RBQkxFIChmcmFtZS0+b2JqZWN0c19jb21wbGV0ZWQpOwogCQkgICAg
aGFzaF9oYXNoX3QgaGFzaDsKIAkJICAgIHB0cmRpZmZfdCBpID0gaGFzaF9maW5kX2dldF9oYXNo
IChoMiwgb2JqLCAmaGFzaCk7CiAJCSAgICBlYXNzZXJ0IChpIDwgMCk7CkBAIC00NjI1LDEwICs2
MjY3LDEwIEBAIHJlYWQwIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwgYm9vbCBsb2NhdGVfc3lt
cykKIAogCQkvKiBOb3cgcHV0IGl0IGV2ZXJ5d2hlcmUgdGhlIHBsYWNlaG9sZGVyIHdhcy4uLiAg
Ki8KIAkJRmxyZWFkX19zdWJzdGl0dXRlX29iamVjdF9pbl9zdWJ0cmVlIChvYmosIHBsYWNlaG9s
ZGVyLAotCQkJCQkJICAgICAgcmVhZF9vYmplY3RzX2NvbXBsZXRlZCk7CisJCQkJCQkgICAgICBm
cmFtZS0+b2JqZWN0c19jb21wbGV0ZWQpOwogCiAJCS8qIC4uLmFuZCAjbiMgd2lsbCB1c2UgdGhl
IHJlYWwgdmFsdWUgZnJvbSBub3cgb24uICAqLwotCQlzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpo
ID0gWEhBU0hfVEFCTEUgKHJlYWRfb2JqZWN0c19tYXApOworCQlzdHJ1Y3QgTGlzcF9IYXNoX1Rh
YmxlICpoID0gWEhBU0hfVEFCTEUgKGZyYW1lLT5vYmplY3RzX21hcCk7CiAJCWhhc2hfaGFzaF90
IGhhc2g7CiAJCXB0cmRpZmZfdCBpID0gaGFzaF9maW5kX2dldF9oYXNoIChoLCBlLT51Lm51bWJl
cmVkLm51bWJlciwKIAkJCQkJCSAgJmhhc2gpOwpAQCAtNDYzOSw3ICs2MjgxLDggQEAgcmVhZDAg
KExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBib29sIGxvY2F0ZV9zeW1zKQogCSAgfQogCX0KICAg
ICB9Ci0KKyAgLyogQXR0ZW1wdCB0byBmbHVzaCBhbnkgdW5yZWFkIGNoYXIgYW5kL29yIGJ1ZmZl
cmVkIGJ5dGVzICovCisgIGNsb3NpbmdfdW5yZWFkY2hhciAoZnJhbWUpOwogICByZXR1cm4gdW5i
aW5kX3RvIChiYXNlX3BkbCwgb2JqKTsKIH0KIApAQCAtNDY5Niw3ICs2MzM5LDcgQEAgc3Vic3Rp
dHV0ZV9vYmplY3RfcmVjdXJzZSAoc3RydWN0IHN1YnN0ICpzdWJzdCwgTGlzcF9PYmplY3Qgc3Vi
dHJlZSkKICAgICAgIHsKIAlwdHJkaWZmX3QgaSA9IDAsIGxlbmd0aCA9IDA7CiAJaWYgKEJPT0xf
VkVDVE9SX1AgKHN1YnRyZWUpKQotCSAgcmV0dXJuIHN1YnRyZWU7CQkvKiBObyBzdWItb2JqZWN0
cyBhbnl3YXkuICAqLworCSAgcmV0dXJuIHN1YnRyZWU7ICAgICAgICAgICAgICAgLyogTm8gc3Vi
LW9iamVjdHMgYW55d2F5LiAgKi8KIAllbHNlIGlmIChDSEFSX1RBQkxFX1AgKHN1YnRyZWUpIHx8
IFNVQl9DSEFSX1RBQkxFX1AgKHN1YnRyZWUpCiAJCSB8fCBDTE9TVVJFUCAoc3VidHJlZSkgfHwg
SEFTSF9UQUJMRV9QIChzdWJ0cmVlKQogCQkgfHwgUkVDT1JEUCAoc3VidHJlZSkpCkBAIC00OTAw
LDE0ICs2NTQzLDYgQEAgc3RyaW5nX3RvX251bWJlciAoY2hhciBjb25zdCAqc3RyaW5nLCBpbnQg
YmFzZSwgcHRyZGlmZl90ICpwbGVuKQogfQogCiAMCi1zdGF0aWMgTGlzcF9PYmplY3QgaW5pdGlh
bF9vYmFycmF5OwotCi0vKiBgb2Jsb29rdXAnIHN0b3JlcyB0aGUgYnVja2V0IG51bWJlciBoZXJl
LCBmb3IgdGhlIHNha2Ugb2YgRnVuaW50ZXJuLiAgKi8KLQotc3RhdGljIHNpemVfdCBvYmxvb2t1
cF9sYXN0X2J1Y2tldF9udW1iZXI7Ci0KLXN0YXRpYyBMaXNwX09iamVjdCBtYWtlX29iYXJyYXkg
KHVuc2lnbmVkIGJpdHMpOwotCiAvKiBTbG93IHBhdGggb2JhcnJheSBjaGVjazogcmV0dXJuIHRo
ZSBvYmFycmF5IHRvIHVzZSBvciBzaWduYWwgYW4gZXJyb3IuICAqLwogTGlzcF9PYmplY3QKIGNo
ZWNrX29iYXJyYXlfc2xvdyAoTGlzcF9PYmplY3Qgb2JhcnJheSkKQEAgLTQ5ODcsOCArNjYyMiw4
IEBAIGludGVybl8xIChjb25zdCBjaGFyICpzdHIsIHB0cmRpZmZfdCBsZW4pCiAgIExpc3BfT2Jq
ZWN0IHRlbSA9IG9ibG9va3VwIChvYmFycmF5LCBzdHIsIGxlbiwgbGVuKTsKIAogICByZXR1cm4g
KEJBUkVfU1lNQk9MX1AgKHRlbSkgPyB0ZW0KLQkgIC8qIFRoZSBhYm92ZSBgb2Jsb29rdXAnIHdh
cyBkb25lIG9uIHRoZSBiYXNpcyBvZiBuY2hhcnM9PW5ieXRlcywgc28KLQkgICAgIHRoZSBzdHJp
bmcgaGFzIHRvIGJlIHVuaWJ5dGUuICAqLworLyogVGhlIGFib3ZlIGBvYmxvb2t1cCcgd2FzIGRv
bmUgb24gdGhlIGJhc2lzIG9mIG5jaGFycz09bmJ5dGVzLCBzbworICAgdGhlIHN0cmluZyBoYXMg
dG8gYmUgdW5pYnl0ZS4gICovCiAJICA6IGludGVybl9kcml2ZXIgKG1ha2VfdW5pYnl0ZV9zdHJp
bmcgKHN0ciwgbGVuKSwKIAkJCSAgIG9iYXJyYXksIHRlbSkpOwogfQpAQCAtNTE0OSwyNiArNjc4
NCw0MiBAQCBERUZVTiAoInVuaW50ZXJuIiwgRnVuaW50ZXJuLCBTdW5pbnRlcm4sIDIsIDIsIDAs
CiAJCQkJCVNDSEFSUyAoc3RyaW5nKSwgU0JZVEVTIChzdHJpbmcpLAogCQkJCQkmbG9uZ2hhbmQs
ICZsb25naGFuZF9jaGFycywKIAkJCQkJJmxvbmdoYW5kX2J5dGVzKTsKLSAgaWYgKGxvbmdoYW5k
KQotICAgIHhmcmVlKGxvbmdoYW5kKTsKLQotICBpZiAoRklYTlVNUCAodGVtKSkKLSAgICByZXR1
cm4gUW5pbDsKLSAgLyogSWYgYXJnIHdhcyBhIHN5bWJvbCwgZG9uJ3QgZGVsZXRlIGFueXRoaW5n
IGJ1dCB0aGF0IHN5bWJvbCBpdHNlbGYuICAqLwotICBpZiAoQkFSRV9TWU1CT0xfUCAobmFtZSkg
JiYgIUJBU0VfRVEgKG5hbWUsIHRlbSkpCi0gICAgcmV0dXJuIFFuaWw7CisgIGlmIChGSVhOVU1Q
ICh0ZW0pCisvKiBJZiBhcmcgd2FzIGEgc3ltYm9sLCBkb24ndCBkZWxldGUgYW55dGhpbmcgYnV0
IHRoYXQgc3ltYm9sIGl0c2VsZi4gICovCisgICAgICB8fCAoQkFSRV9TWU1CT0xfUCAobmFtZSkg
JiYgIUJBU0VfRVEgKG5hbWUsIHRlbSkpKQorICAgIHsKKyAgICAgIGlmIChsb25naGFuZCkKKwl4
ZnJlZSAobG9uZ2hhbmQpOworICAgICAgcmV0dXJuIFFuaWw7CisgICAgfQogCiAgIC8qIFRoZXJl
IGFyZSBwbGVudHkgb2Ygb3RoZXIgc3ltYm9scyB3aGljaCB3aWxsIHNjcmV3IHVwIHRoZSBFbWFj
cwogICAgICBzZXNzaW9uIGlmIHdlIHVuaW50ZXJuIHRoZW0sIGFzIHdlbGwgYXMgZXZlbiBtb3Jl
IHdheXMgdG8gdXNlCiAgICAgIGBzZXRxJyBvciBgZnNldCcgb3Igd2hhdG5vdCB0byBtYWtlIHRo
ZSBFbWFjcyBzZXNzaW9uCiAgICAgIHVudXNhYmxlLiAgTGV0J3Mgbm90IGdvIGRvd24gdGhpcyBz
aWxseSByb2FkLiAgLS1TdGVmICAqLwogICAvKiBpZiAoTklMUCAodGVtKSB8fCBFUSAodGVtLCBR
dCkpCi0gICAgICAgZXJyb3IgKCJBdHRlbXB0IHRvIHVuaW50ZXJuIHQgb3IgbmlsIik7ICovCisg
ICAgIGVycm9yICgiQXR0ZW1wdCB0byB1bmludGVybiB0IG9yIG5pbCIpOyAqLwogCiAgIHN0cnVj
dCBMaXNwX1N5bWJvbCAqc3ltID0gWEJBUkVfU1lNQk9MICh0ZW0pOwogICBzeW0tPnUucy5pbnRl
cm5lZCA9IFNZTUJPTF9VTklOVEVSTkVEOwogCi0gIHB0cmRpZmZfdCBpZHggPSBvYmxvb2t1cF9s
YXN0X2J1Y2tldF9udW1iZXI7CisgIHB0cmRpZmZfdCBpZHggPSAtMTsKKyAgeworICAgIC8qIERv
bid0IHVzZSBhIHN0YXRpYyB2YXJpYWJsZSBqdXN0IHRvIGF2b2lkIHRoaXMKKyAgICAgICAtIGhv
dyBmcmVxdWVudGx5IHVzZWQgaXMgdW5pbnRlcm4gdGhhdCB1c2luZyBhIHN0YXRpYyB2YXJpYWJs
ZQorICAgICAgIHRvIG9wdGltaXplIGF3YXkgdGhpcyByZWR1bmRhbnQgaW5kZXggY2FsY3VsYXRp
b24gd291bGQgYmUKKyAgICAgICB3b3J0aCBpdD8gKi8KKyAgICBzdHJ1Y3QgTGlzcF9PYmFycmF5
ICpvID0gWE9CQVJSQVkgKG9iYXJyYXkpOworICAgIGlmIChsb25naGFuZCkKKyAgICAgIHsKKwlp
ZHggPSBvYmFycmF5X2luZGV4IChvLCBsb25naGFuZCwgbG9uZ2hhbmRfYnl0ZXMpOworCXhmcmVl
IChsb25naGFuZCk7CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworCWlkeCA9IG9iYXJyYXlf
aW5kZXggKG8sU1NEQVRBIChzdHJpbmcpLCBTQllURVMgKHN0cmluZykpOworICAgICAgfQorICB9
CiAgIExpc3BfT2JqZWN0ICpsb2MgPSAmWE9CQVJSQVkgKG9iYXJyYXkpLT5idWNrZXRzW2lkeF07
CiAKICAgZWFzc2VydCAoQkFSRV9TWU1CT0xfUCAoKmxvYykpOwpAQCAtNTE5NCw3ICs2ODQ1LDcg
QEAgREVGVU4gKCJ1bmludGVybiIsIEZ1bmludGVybiwgU3VuaW50ZXJuLCAyLCAyLCAwLAogDAog
CiAvKiBCdWNrZXQgaW5kZXggb2YgdGhlIHN0cmluZyBTVFIgb2YgbGVuZ3RoIFNJWkVfQllURSBi
eXRlcyBpbiBvYmFycmF5IE9BLiAgKi8KLXN0YXRpYyBwdHJkaWZmX3QKK3B0cmRpZmZfdAogb2Jh
cnJheV9pbmRleCAoc3RydWN0IExpc3BfT2JhcnJheSAqb2EsIGNvbnN0IGNoYXIgKnN0ciwgcHRy
ZGlmZl90IHNpemVfYnl0ZSkKIHsKICAgRU1BQ1NfVUlOVCBoYXNoID0gaGFzaF9jaGFyX2FycmF5
IChzdHIsIHNpemVfYnl0ZSk7CkBAIC01MjE1LDcgKzY4NjYsNiBAQCBvYmxvb2t1cCAoTGlzcF9P
YmplY3Qgb2JhcnJheSwgcmVnaXN0ZXIgY29uc3QgY2hhciAqcHRyLCBwdHJkaWZmX3Qgc2l6ZSwg
cHRyZGlmZgogICBwdHJkaWZmX3QgaWR4ID0gb2JhcnJheV9pbmRleCAobywgcHRyLCBzaXplX2J5
dGUpOwogICBMaXNwX09iamVjdCBidWNrZXQgPSBvLT5idWNrZXRzW2lkeF07CiAKLSAgb2Jsb29r
dXBfbGFzdF9idWNrZXRfbnVtYmVyID0gaWR4OwogICBpZiAoIUJBU0VfRVEgKGJ1Y2tldCwgbWFr
ZV9maXhudW0gKDApKSkKICAgICB7CiAgICAgICBMaXNwX09iamVjdCBzeW0gPSBidWNrZXQ7CkBA
IC01NTg4LDExICs3MjM4LDExIEBAIGxvYWRfcGF0aF9jaGVjayAoTGlzcF9PYmplY3QgbHBhdGgp
CiAgICAgICBMaXNwX09iamVjdCBkaXJmaWxlOwogICAgICAgZGlyZmlsZSA9IEZjYXIgKHBhdGhf
dGFpbCk7CiAgICAgICBpZiAoU1RSSU5HUCAoZGlyZmlsZSkpCi0gICAgICAgIHsKLSAgICAgICAg
ICBkaXJmaWxlID0gRmRpcmVjdG9yeV9maWxlX25hbWUgKGRpcmZpbGUpOwotICAgICAgICAgIGlm
ICghIGZpbGVfYWNjZXNzaWJsZV9kaXJlY3RvcnlfcCAoZGlyZmlsZSkpCi0gICAgICAgICAgICBk
aXJfd2FybmluZyAoIkxpc3AgZGlyZWN0b3J5IiwgWENBUiAocGF0aF90YWlsKSk7Ci0gICAgICAg
IH0KKwl7CisJICBkaXJmaWxlID0gRmRpcmVjdG9yeV9maWxlX25hbWUgKGRpcmZpbGUpOworCSAg
aWYgKCEgZmlsZV9hY2Nlc3NpYmxlX2RpcmVjdG9yeV9wIChkaXJmaWxlKSkKKwkgICAgZGlyX3dh
cm5pbmcgKCJMaXNwIGRpcmVjdG9yeSIsIFhDQVIgKHBhdGhfdGFpbCkpOworCX0KICAgICB9CiB9
CiAKQEAgLTU2MjksNyArNzI3OSw3IEBAIGxvYWRfcGF0aF9jaGVjayAoTGlzcF9PYmplY3QgbHBh
dGgpCiBzdGF0aWMgTGlzcF9PYmplY3QKIGxvYWRfcGF0aF9kZWZhdWx0ICh2b2lkKQogewotICBp
ZiAod2lsbF9kdW1wX3AgKCkpCisgIGlmICh3aWxsX2R1bXBfcCAoKSB8fCAoIWluaXRpYWxpemVk
ICYmICFOSUxQKFZpbnN0YWxsYXRpb25fZGlyZWN0b3J5KSkpCiAgICAgLyogUEFUSF9EVU1QTE9B
RFNFQVJDSCBpcyB0aGUgbGlzcCBkaXIgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCiAgICAgICAg
V2UgdXNlZCB0byBhZGQgLi4vbGlzcCAoaWUgdGhlIGxpc3AgZGlyIGluIHRoZSBidWlsZAogICAg
ICAgIGRpcmVjdG9yeSkgYXQgdGhlIGZyb250IGhlcmUsIGJ1dCB0aGF0IHNob3VsZCBub3QgYmUK
QEAgLTU2NDYsODQgKzcyOTYsODQgQEAgbG9hZF9wYXRoX2RlZmF1bHQgKHZvaWQpCiAgICAgICBM
aXNwX09iamVjdCB0ZW0sIHRlbTE7CiAKICAgICAgIC8qIEFkZCB0byB0aGUgcGF0aCB0aGUgbGlz
cCBzdWJkaXIgb2YgdGhlIGluc3RhbGxhdGlvbgotICAgICAgICAgZGlyLCBpZiBpdCBpcyBhY2Nl
c3NpYmxlLiAgTm90ZTogaW4gb3V0LW9mLXRyZWUgYnVpbGRzLAotICAgICAgICAgdGhpcyBkaXJl
Y3RvcnkgaXMgZW1wdHkgc2F2ZSBmb3IgTWFrZWZpbGUuICAqLworCSBkaXIsIGlmIGl0IGlzIGFj
Y2Vzc2libGUuICBOb3RlOiBpbiBvdXQtb2YtdHJlZSBidWlsZHMsCisJIHRoaXMgZGlyZWN0b3J5
IGlzIGVtcHR5IHNhdmUgZm9yIE1ha2VmaWxlLiAgKi8KICAgICAgIHRlbSA9IEZleHBhbmRfZmls
ZV9uYW1lIChidWlsZF9zdHJpbmcgKCJsaXNwIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVmluc3RhbGxhdGlvbl9kaXJlY3RvcnkpOworCQkJICAgICAgIFZpbnN0YWxsYXRpb25f
ZGlyZWN0b3J5KTsKICAgICAgIHRlbTEgPSBGZmlsZV9hY2Nlc3NpYmxlX2RpcmVjdG9yeV9wICh0
ZW0pOwogICAgICAgaWYgKCFOSUxQICh0ZW0xKSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChO
SUxQIChGbWVtYmVyICh0ZW0sIGxwYXRoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
IC8qIFdlIGFyZSBydW5uaW5nIHVuaW5zdGFsbGVkLiAgVGhlIGRlZmF1bHQgbG9hZC1wYXRoCi0g
ICAgICAgICAgICAgICAgIHBvaW50cyB0byB0aGUgZXZlbnR1YWwgaW5zdGFsbGVkIGxpc3AgZGly
ZWN0b3JpZXMuCi0gICAgICAgICAgICAgICAgIFdlIHNob3VsZCBub3QgdXNlIHRob3NlIG5vdywg
ZXZlbiBpZiB0aGV5IGV4aXN0LAotICAgICAgICAgICAgICAgICBzbyBzdGFydCBvdmVyIGZyb20g
YSBjbGVhbiBzbGF0ZS4gICovCi0gICAgICAgICAgICAgIGxwYXRoID0gbGlzdDEgKHRlbSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KKwl7CisJICBpZiAoTklMUCAoRm1lbWJlciAodGVtLCBs
cGF0aCkpKQorCSAgICB7CisJICAgICAgLyogV2UgYXJlIHJ1bm5pbmcgdW5pbnN0YWxsZWQuICBU
aGUgZGVmYXVsdCBsb2FkLXBhdGgKKwkJIHBvaW50cyB0byB0aGUgZXZlbnR1YWwgaW5zdGFsbGVk
IGxpc3AgZGlyZWN0b3JpZXMuCisJCSBXZSBzaG91bGQgbm90IHVzZSB0aG9zZSBub3csIGV2ZW4g
aWYgdGhleSBleGlzdCwKKwkJIHNvIHN0YXJ0IG92ZXIgZnJvbSBhIGNsZWFuIHNsYXRlLiAgKi8K
KwkgICAgICBscGF0aCA9IGxpc3QxICh0ZW0pOworCSAgICB9CisJfQogICAgICAgZWxzZQotICAg
ICAgICAvKiBUaGF0IGRpciBkb2Vzbid0IGV4aXN0LCBzbyBhZGQgdGhlIGJ1aWxkLXRpbWUKLSAg
ICAgICAgICAgTGlzcCBkaXJzIGluc3RlYWQuICAqLwotICAgICAgICB7Ci0gICAgICAgICAgTGlz
cF9PYmplY3QgZHVtcF9wYXRoID0KLSAgICAgICAgICAgIGRlY29kZV9lbnZfcGF0aCAoMCwgUEFU
SF9EVU1QTE9BRFNFQVJDSCwgMCk7Ci0gICAgICAgICAgbHBhdGggPSBuY29uYzIgKGxwYXRoLCBk
dW1wX3BhdGgpOwotICAgICAgICB9CisJLyogVGhhdCBkaXIgZG9lc24ndCBleGlzdCwgc28gYWRk
IHRoZSBidWlsZC10aW1lCisJICAgTGlzcCBkaXJzIGluc3RlYWQuICAqLworCXsKKwkgIExpc3Bf
T2JqZWN0IGR1bXBfcGF0aCA9CisJICAgIGRlY29kZV9lbnZfcGF0aCAoMCwgUEFUSF9EVU1QTE9B
RFNFQVJDSCwgMCk7CisJICBscGF0aCA9IG5jb25jMiAobHBhdGgsIGR1bXBfcGF0aCk7CisJfQog
CiAgICAgICAvKiBBZGQgc2l0ZS1saXNwIHVuZGVyIHRoZSBpbnN0YWxsYXRpb24gZGlyLCBpZiBp
dCBleGlzdHMuICAqLwogICAgICAgaWYgKCFub19zaXRlX2xpc3ApCi0gICAgICAgIHsKLSAgICAg
ICAgICB0ZW0gPSBGZXhwYW5kX2ZpbGVfbmFtZSAoYnVpbGRfc3RyaW5nICgic2l0ZS1saXNwIiks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpbnN0YWxsYXRpb25fZGlyZWN0
b3J5KTsKLSAgICAgICAgICB0ZW0xID0gRmZpbGVfYWNjZXNzaWJsZV9kaXJlY3RvcnlfcCAodGVt
KTsKLSAgICAgICAgICBpZiAoIU5JTFAgKHRlbTEpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBpZiAoTklMUCAoRm1lbWJlciAodGVtLCBscGF0aCkpKQotICAgICAgICAgICAgICAgIGxw
YXRoID0gRmNvbnMgKHRlbSwgbHBhdGgpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJewor
CSAgdGVtID0gRmV4cGFuZF9maWxlX25hbWUgKGJ1aWxkX3N0cmluZyAoInNpdGUtbGlzcCIpLAor
CQkJCSAgIFZpbnN0YWxsYXRpb25fZGlyZWN0b3J5KTsKKwkgIHRlbTEgPSBGZmlsZV9hY2Nlc3Np
YmxlX2RpcmVjdG9yeV9wICh0ZW0pOworCSAgaWYgKCFOSUxQICh0ZW0xKSkKKwkgICAgeworCSAg
ICAgIGlmIChOSUxQIChGbWVtYmVyICh0ZW0sIGxwYXRoKSkpCisJCWxwYXRoID0gRmNvbnMgKHRl
bSwgbHBhdGgpOworCSAgICB9CisJfQogCiAgICAgICAvKiBJZiBFbWFjcyB3YXMgbm90IGJ1aWx0
IGluIHRoZSBzb3VyY2UgZGlyZWN0b3J5LAotICAgICAgICAgYW5kIGl0IGlzIHJ1biBmcm9tIHdo
ZXJlIGl0IHdhcyBidWlsdCwgYWRkIHRvIGxvYWQtcGF0aAotICAgICAgICAgdGhlIGxpc3AgYW5k
IHNpdGUtbGlzcCBkaXJzIHVuZGVyIHRoYXQgZGlyZWN0b3J5LiAgKi8KKwkgYW5kIGl0IGlzIHJ1
biBmcm9tIHdoZXJlIGl0IHdhcyBidWlsdCwgYWRkIHRvIGxvYWQtcGF0aAorCSB0aGUgbGlzcCBh
bmQgc2l0ZS1saXNwIGRpcnMgdW5kZXIgdGhhdCBkaXJlY3RvcnkuICAqLwogCiAgICAgICBpZiAo
TklMUCAoRmVxdWFsIChWaW5zdGFsbGF0aW9uX2RpcmVjdG9yeSwgVnNvdXJjZV9kaXJlY3Rvcnkp
KSkKLSAgICAgICAgewotICAgICAgICAgIExpc3BfT2JqZWN0IHRlbTI7Ci0KLSAgICAgICAgICB0
ZW0gPSBGZXhwYW5kX2ZpbGVfbmFtZSAoYnVpbGRfc3RyaW5nICgic3JjL01ha2VmaWxlIiksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpbnN0YWxsYXRpb25fZGlyZWN0b3J5
KTsKLSAgICAgICAgICB0ZW0xID0gRmZpbGVfZXhpc3RzX3AgKHRlbSk7Ci0KLSAgICAgICAgICAv
KiBEb24ndCBiZSBmb29sZWQgaWYgdGhleSBtb3ZlZCB0aGUgZW50aXJlIHNvdXJjZSB0cmVlCi0g
ICAgICAgICAgICAgQUZURVIgZHVtcGluZyBFbWFjcy4gIElmIHRoZSBidWlsZCBkaXJlY3Rvcnkg
aXMgaW5kZWVkCi0gICAgICAgICAgICAgZGlmZmVyZW50IGZyb20gdGhlIHNvdXJjZSBkaXIsIHNy
Yy9NYWtlZmlsZS5pbiBhbmQKLSAgICAgICAgICAgICBzcmMvTWFrZWZpbGUgd2lsbCBub3QgYmUg
Zm91bmQgdG9nZXRoZXIuICAqLwotICAgICAgICAgIHRlbSA9IEZleHBhbmRfZmlsZV9uYW1lIChi
dWlsZF9zdHJpbmcgKCJzcmMvTWFrZWZpbGUuaW4iKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVmluc3RhbGxhdGlvbl9kaXJlY3RvcnkpOwotICAgICAgICAgIHRlbTIgPSBG
ZmlsZV9leGlzdHNfcCAodGVtKTsKLSAgICAgICAgICBpZiAoIU5JTFAgKHRlbTEpICYmIE5JTFAg
KHRlbTIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0ZW0gPSBGZXhwYW5kX2ZpbGVf
bmFtZSAoYnVpbGRfc3RyaW5nICgibGlzcCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVnNvdXJjZV9kaXJlY3RvcnkpOwotCi0gICAgICAgICAgICAgIGlmIChOSUxQ
IChGbWVtYmVyICh0ZW0sIGxwYXRoKSkpCi0gICAgICAgICAgICAgICAgbHBhdGggPSBGY29ucyAo
dGVtLCBscGF0aCk7Ci0KLSAgICAgICAgICAgICAgaWYgKCFub19zaXRlX2xpc3ApCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgdGVtID0gRmV4cGFuZF9maWxlX25hbWUgKGJ1
aWxkX3N0cmluZyAoInNpdGUtbGlzcCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFZzb3VyY2VfZGlyZWN0b3J5KTsKLSAgICAgICAgICAgICAgICAgIHRlbTEg
PSBGZmlsZV9hY2Nlc3NpYmxlX2RpcmVjdG9yeV9wICh0ZW0pOwotICAgICAgICAgICAgICAgICAg
aWYgKCFOSUxQICh0ZW0xKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgIGlmIChOSUxQIChGbWVtYmVyICh0ZW0sIGxwYXRoKSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBscGF0aCA9IEZjb25zICh0ZW0sIGxwYXRoKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSAvKiBWaW5zdGFs
bGF0aW9uX2RpcmVjdG9yeSAhPSBWc291cmNlX2RpcmVjdG9yeSAqLworCXsKKwkgIExpc3BfT2Jq
ZWN0IHRlbTI7CisKKwkgIHRlbSA9IEZleHBhbmRfZmlsZV9uYW1lIChidWlsZF9zdHJpbmcgKCJz
cmMvTWFrZWZpbGUiKSwKKwkJCQkgICBWaW5zdGFsbGF0aW9uX2RpcmVjdG9yeSk7CisJICB0ZW0x
ID0gRmZpbGVfZXhpc3RzX3AgKHRlbSk7CisKKwkgIC8qIERvbid0IGJlIGZvb2xlZCBpZiB0aGV5
IG1vdmVkIHRoZSBlbnRpcmUgc291cmNlIHRyZWUKKwkgICAgIEFGVEVSIGR1bXBpbmcgRW1hY3Mu
ICBJZiB0aGUgYnVpbGQgZGlyZWN0b3J5IGlzIGluZGVlZAorCSAgICAgZGlmZmVyZW50IGZyb20g
dGhlIHNvdXJjZSBkaXIsIHNyYy9NYWtlZmlsZS5pbiBhbmQKKwkgICAgIHNyYy9NYWtlZmlsZSB3
aWxsIG5vdCBiZSBmb3VuZCB0b2dldGhlci4gICovCisJICB0ZW0gPSBGZXhwYW5kX2ZpbGVfbmFt
ZSAoYnVpbGRfc3RyaW5nICgic3JjL01ha2VmaWxlLmluIiksCisJCQkJICAgVmluc3RhbGxhdGlv
bl9kaXJlY3RvcnkpOworCSAgdGVtMiA9IEZmaWxlX2V4aXN0c19wICh0ZW0pOworCSAgaWYgKCFO
SUxQICh0ZW0xKSAmJiBOSUxQICh0ZW0yKSkKKwkgICAgeworCSAgICAgIHRlbSA9IEZleHBhbmRf
ZmlsZV9uYW1lIChidWlsZF9zdHJpbmcgKCJsaXNwIiksCisJCQkJICAgICAgIFZzb3VyY2VfZGly
ZWN0b3J5KTsKKworCSAgICAgIGlmIChOSUxQIChGbWVtYmVyICh0ZW0sIGxwYXRoKSkpCisJCWxw
YXRoID0gRmNvbnMgKHRlbSwgbHBhdGgpOworCisJICAgICAgaWYgKCFub19zaXRlX2xpc3ApCisJ
CXsKKwkJICB0ZW0gPSBGZXhwYW5kX2ZpbGVfbmFtZSAoYnVpbGRfc3RyaW5nICgic2l0ZS1saXNw
IiksCisJCQkJCSAgIFZzb3VyY2VfZGlyZWN0b3J5KTsKKwkJICB0ZW0xID0gRmZpbGVfYWNjZXNz
aWJsZV9kaXJlY3RvcnlfcCAodGVtKTsKKwkJICBpZiAoIU5JTFAgKHRlbTEpKQorCQkgICAgewor
CQkgICAgICBpZiAoTklMUCAoRm1lbWJlciAodGVtLCBscGF0aCkpKQorCQkJbHBhdGggPSBGY29u
cyAodGVtLCBscGF0aCk7CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0gLyogVmluc3RhbGxhdGlv
bl9kaXJlY3RvcnkgIT0gVnNvdXJjZV9kaXJlY3RvcnkgKi8KIAogICAgIH0gLyogaWYgVmluc3Rh
bGxhdGlvbl9kaXJlY3RvcnkgKi8KIApAQCAtNTc0Niw1MyArNzM5Niw1MyBAQCBpbml0X2xyZWFk
ICh2b2lkKQogICAgICAgbG9hZF9wYXRoX2NoZWNrIChWbG9hZF9wYXRoKTsKIAogICAgICAgLyog
SWYgbm8gbmlscyBpbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUsIHVzZSBhcy1pcy4KLSAgICAg
ICAgIE90aGVyd2lzZSwgcmVwbGFjZSBhbnkgbmlscyB3aXRoIHRoZSBkZWZhdWx0LiAgKi8KKwkg
T3RoZXJ3aXNlLCByZXBsYWNlIGFueSBuaWxzIHdpdGggdGhlIGRlZmF1bHQuICAqLwogICAgICAg
aWYgKCEgTklMUCAoRm1lbXEgKFFuaWwsIFZsb2FkX3BhdGgpKSkKLSAgICAgICAgewotICAgICAg
ICAgIExpc3BfT2JqZWN0IGVsZW0sIGVscGF0aCA9IFZsb2FkX3BhdGg7Ci0gICAgICAgICAgTGlz
cF9PYmplY3QgZGVmYXVsdF9scGF0aCA9IGxvYWRfcGF0aF9kZWZhdWx0ICgpOwotCi0gICAgICAg
ICAgLyogQ2hlY2sgZGVmYXVsdHMsIGJlZm9yZSBhZGRpbmcgc2l0ZS1saXNwLiAgKi8KLSAgICAg
ICAgICBsb2FkX3BhdGhfY2hlY2sgKGRlZmF1bHRfbHBhdGgpOwotCi0gICAgICAgICAgLyogQWRk
IHRoZSBzaXRlLWxpc3AgZGlyZWN0b3JpZXMgdG8gdGhlIGZyb250IG9mIHRoZSBkZWZhdWx0LiAg
Ki8KLSAgICAgICAgICBpZiAoIW5vX3NpdGVfbGlzcCAmJiBQQVRIX1NJVEVMT0FEU0VBUkNIWzBd
ICE9ICdcMCcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIExpc3BfT2JqZWN0IHNpdGVs
aXNwOwotICAgICAgICAgICAgICBzaXRlbGlzcCA9IGRlY29kZV9lbnZfcGF0aCAoMCwgUEFUSF9T
SVRFTE9BRFNFQVJDSCwgMCk7Ci0gICAgICAgICAgICAgIGlmICghIE5JTFAgKHNpdGVsaXNwKSkK
LSAgICAgICAgICAgICAgICBkZWZhdWx0X2xwYXRoID0gbmNvbmMyIChzaXRlbGlzcCwgZGVmYXVs
dF9scGF0aCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICBWbG9hZF9wYXRoID0gUW5pbDsK
LQotICAgICAgICAgIC8qIFJlcGxhY2UgbmlscyBmcm9tIEVNQUNTTE9BRFBBVEggYnkgZGVmYXVs
dC4gICovCi0gICAgICAgICAgd2hpbGUgKENPTlNQIChlbHBhdGgpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBlbGVtID0gWENBUiAoZWxwYXRoKTsKLSAgICAgICAgICAgICAgZWxwYXRo
ID0gWENEUiAoZWxwYXRoKTsKLSAgICAgICAgICAgICAgVmxvYWRfcGF0aCA9IENBTExOIChGYXBw
ZW5kLCBWbG9hZF9wYXRoLAorCXsKKwkgIExpc3BfT2JqZWN0IGVsZW0sIGVscGF0aCA9IFZsb2Fk
X3BhdGg7CisJICBMaXNwX09iamVjdCBkZWZhdWx0X2xwYXRoID0gbG9hZF9wYXRoX2RlZmF1bHQg
KCk7CisKKwkgIC8qIENoZWNrIGRlZmF1bHRzLCBiZWZvcmUgYWRkaW5nIHNpdGUtbGlzcC4gICov
CisJICBsb2FkX3BhdGhfY2hlY2sgKGRlZmF1bHRfbHBhdGgpOworCisJICAvKiBBZGQgdGhlIHNp
dGUtbGlzcCBkaXJlY3RvcmllcyB0byB0aGUgZnJvbnQgb2YgdGhlIGRlZmF1bHQuICAqLworCSAg
aWYgKCFub19zaXRlX2xpc3AgJiYgUEFUSF9TSVRFTE9BRFNFQVJDSFswXSAhPSAnXDAnKQorCSAg
ICB7CisJICAgICAgTGlzcF9PYmplY3Qgc2l0ZWxpc3A7CisJICAgICAgc2l0ZWxpc3AgPSBkZWNv
ZGVfZW52X3BhdGggKDAsIFBBVEhfU0lURUxPQURTRUFSQ0gsIDApOworCSAgICAgIGlmICghIE5J
TFAgKHNpdGVsaXNwKSkKKwkJZGVmYXVsdF9scGF0aCA9IG5jb25jMiAoc2l0ZWxpc3AsIGRlZmF1
bHRfbHBhdGgpOworCSAgICB9CisKKwkgIFZsb2FkX3BhdGggPSBRbmlsOworCisJICAvKiBSZXBs
YWNlIG5pbHMgZnJvbSBFTUFDU0xPQURQQVRIIGJ5IGRlZmF1bHQuICAqLworCSAgd2hpbGUgKENP
TlNQIChlbHBhdGgpKQorCSAgICB7CisJICAgICAgZWxlbSA9IFhDQVIgKGVscGF0aCk7CisJICAg
ICAgZWxwYXRoID0gWENEUiAoZWxwYXRoKTsKKwkgICAgICBWbG9hZF9wYXRoID0gQ0FMTE4gKEZh
cHBlbmQsIFZsb2FkX3BhdGgsCiAJCQkJICBOSUxQIChlbGVtKSA/IGRlZmF1bHRfbHBhdGggOiBs
aXN0MSAoZWxlbSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAvKiBGbWVtcSAoUW5pbCwgVmxvYWRfcGF0aCkgKi8KKwkgICAgfQorCX0gICAgICAgICAg
ICAgICAgICAgICAgIC8qIEZtZW1xIChRbmlsLCBWbG9hZF9wYXRoKSAqLwogICAgIH0KICAgZWxz
ZQogICAgIHsKICAgICAgIFZsb2FkX3BhdGggPSBsb2FkX3BhdGhfZGVmYXVsdCAoKTsKIAogICAg
ICAgLyogQ2hlY2sgYmVmb3JlIGFkZGluZyBzaXRlLWxpc3AgZGlyZWN0b3JpZXMuCi0gICAgICAg
ICBUaGUgaW5zdGFsbCBzaG91bGQgaGF2ZSBjcmVhdGVkIHRoZW0sIGJ1dCB0aGV5IGFyZSBub3QK
LSAgICAgICAgIHJlcXVpcmVkLCBzbyBubyBuZWVkIHRvIHdhcm4gaWYgdGhleSBhcmUgYWJzZW50
LgotICAgICAgICAgT3Igd2UgbWlnaHQgYmUgcnVubmluZyBiZWZvcmUgaW5zdGFsbGF0aW9uLiAg
Ki8KKwkgVGhlIGluc3RhbGwgc2hvdWxkIGhhdmUgY3JlYXRlZCB0aGVtLCBidXQgdGhleSBhcmUg
bm90CisJIHJlcXVpcmVkLCBzbyBubyBuZWVkIHRvIHdhcm4gaWYgdGhleSBhcmUgYWJzZW50Lgor
CSBPciB3ZSBtaWdodCBiZSBydW5uaW5nIGJlZm9yZSBpbnN0YWxsYXRpb24uICAqLwogICAgICAg
bG9hZF9wYXRoX2NoZWNrIChWbG9hZF9wYXRoKTsKIAogICAgICAgLyogQWRkIHRoZSBzaXRlLWxp
c3AgZGlyZWN0b3JpZXMgYXQgdGhlIGZyb250LiAgKi8KICAgICAgIGlmICghd2lsbF9kdW1wX3Ag
KCkgJiYgIW5vX3NpdGVfbGlzcCAmJiBQQVRIX1NJVEVMT0FEU0VBUkNIWzBdICE9ICdcMCcpCi0g
ICAgICAgIHsKLSAgICAgICAgICBMaXNwX09iamVjdCBzaXRlbGlzcDsKLSAgICAgICAgICBzaXRl
bGlzcCA9IGRlY29kZV9lbnZfcGF0aCAoMCwgUEFUSF9TSVRFTE9BRFNFQVJDSCwgMCk7Ci0gICAg
ICAgICAgaWYgKCEgTklMUCAoc2l0ZWxpc3ApKSBWbG9hZF9wYXRoID0gbmNvbmMyIChzaXRlbGlz
cCwgVmxvYWRfcGF0aCk7Ci0gICAgICAgIH0KKwl7CisJICBMaXNwX09iamVjdCBzaXRlbGlzcDsK
KwkgIHNpdGVsaXNwID0gZGVjb2RlX2Vudl9wYXRoICgwLCBQQVRIX1NJVEVMT0FEU0VBUkNILCAw
KTsKKwkgIGlmICghIE5JTFAgKHNpdGVsaXNwKSkgVmxvYWRfcGF0aCA9IG5jb25jMiAoc2l0ZWxp
c3AsIFZsb2FkX3BhdGgpOworCX0KICAgICB9CiAKICAgVnZhbHVlcyA9IFFuaWw7CkBAIC01ODAx
LDcgKzc0NTEsMTUgQEAgaW5pdF9scmVhZCAodm9pZCkKICAgVmxvYWRfZmlsZV9uYW1lID0gUW5p
bDsKICAgVmxvYWRfdHJ1ZV9maWxlX25hbWUgPSBRbmlsOwogICBWc3RhbmRhcmRfaW5wdXQgPSBR
dDsKLSAgVmxvYWRzX2luX3Byb2dyZXNzID0gUW5pbDsKKworICBzdGRpbl9pbmZpbGUucy5zdHJl
YW0gPSBzdGRpbjsKKyAgc3RkaW5faW5maWxlLnMubG9va2FoZWFkID0gMDsKKyAgbWVtc2V0IChz
dGRpbl9pbmZpbGUucy5idWYsIDAsIHNpemVvZihzdGRpbl9pbmZpbGUucy5idWYpKTsKKyAgLyog
V2UgdHJlYXQgc3RkaW4gYXMgYSBmaWZvIGV2ZW4gaWYgaXQgcmVhbGx5IGlzIGEgcmVndWxhciBm
aWxlICovCisgIHN0ZGluX2luZmlsZS5zLnNlZWthYmxlID0gZmFsc2U7CisgIHN0ZGluX2luZmls
ZS51bnJlYWRfY2hhciA9IC0xOworICBzdGRpbl9pbmZpbGUudW5yZWFkX2J5dGVzID0gMDsKKyAg
c3RkaW5faW5maWxlLnJlYWRfZW9mID0gZmFsc2U7CiB9CiAKIC8qIFByaW50IGEgd2FybmluZyB0
aGF0IGRpcmVjdG9yeSBpbnRlbmRlZCBmb3IgdXNlIFVTRSBhbmQgd2l0aCBuYW1lCkBAIC01ODM4
LDYgKzc0OTYsMTk5IEBAIGRpcl93YXJuaW5nIChjaGFyIGNvbnN0ICp1c2UsIExpc3BfT2JqZWN0
IGRpcm5hbWUpCiAgICAgfQogfQogCit2b2lkCithY3RpdmF0ZV9scmVhZF9mcmFtZSAobHJlYWRf
ZnJhbWUgKm5ld19mcmFtZSwgbHJlYWRfZnJhbWVfdHlwZSBuZXdfdHlwZSkKK3sKKyAgcmVnaXN0
ZXIgbHJlYWRfZnJhbWUgKmZyYW1lID0gY3VycmVudF9mcmFtZTsKKyAgLyogYXNzdW1lIHR5cGUs
IGludHlwZSwgaW5wdXQsIGFuZCBsb2NhdGVfc3ltcworICAgICBmaWVsZHMgaGF2ZSBiZWVuIGlu
aXRpYWxpemVkIGJ5IGVudHJ5IHBvaW50ICovCisgIGVhc3NlcnQgKG5ld19mcmFtZS0+aW50eXBl
ICE9IExSRUFEX0lOUFVUX1VOSU5JVCk7CisgIC8qIFVwZGF0ZSB0aGUgc3RkaW4gc3RyZWFtIGRh
dGEgYXMgaXQgbWF5IGJlIHVzZWQgcmVjdXJzaXZlbHkgKi8KKyAgaWYgKGZyYW1lICYmIGZyYW1l
LT5pbnR5cGUgPT0gTFJFQURfSU5QVVRfRklMRQorICAgICAgJiYgKGZyYW1lLT5pbnB1dC5mLnN0
cmVhbSA9PSBzdGRpbikpCisgICAgeworICAgICAgc3RkaW5faW5maWxlLnMubG9va2FoZWFkID0g
ZnJhbWUtPmlucHV0LmYubG9va2FoZWFkOworICAgICAgbWVtY3B5IChzdGRpbl9pbmZpbGUucy5i
dWYsIGZyYW1lLT5pbnB1dC5mLmJ1Ziwgc2l6ZW9mKHN0ZGluX2luZmlsZS5zLmJ1ZikpOworICAg
ICAgc3RkaW5faW5maWxlLmJ5dGVfb2Zmc2V0ID0gZnJhbWUtPmJ5dGVfb2Zmc2V0OworICAgICAg
c3RkaW5faW5maWxlLmNoYXJfb2Zmc2V0ID0gZnJhbWUtPmNoYXJfb2Zmc2V0OworICAgICAgc3Rk
aW5faW5maWxlLnVucmVhZF9jaGFyID0gZnJhbWUtPnVucmVhZF9jaGFyOworICAgICAgc3RkaW5f
aW5maWxlLnVucmVhZF9ieXRlcyA9IGZyYW1lLT51bnJlYWRfYnl0ZXM7CisgICAgICBzdGRpbl9p
bmZpbGUucmVhZF9lb2YgPSBmcmFtZS0+cmVhZF9lb2Y7CisgICAgfQorICBpZiAobmV3X2ZyYW1l
ICE9IGZyYW1lKQorICAgIC8qIEZsb2FkIG1heSByZXVzZSBhbiBhY3RpdmF0ZWQgZHVtbXkgZnJh
bWUgKi8KKyAgICBuZXdfZnJhbWUtPnByZXYgPSBmcmFtZTsKKyAgZnJhbWUgPSBuZXdfZnJhbWU7
CisgIGZyYW1lLT50eXBlID0gbmV3X3R5cGU7CisgIGlmIChjdXJyZW50X2ZyYW1lICYmIGN1cnJl
bnRfZnJhbWUgIT0gZnJhbWUpCisgICAgZnJhbWUtPmxvYWRzX2luX3Byb2dyZXNzID0gY3VycmVu
dF9mcmFtZS0+bG9hZHNfaW5fcHJvZ3Jlc3M7CisKKyAgLyogY2hhbmdlIHRoZSBzdGFuZGFyZCBp
bml0aWFsaXphdGlvbiBhcyBuZWVkZWQgZm9yIGRpZmZlcmVudCBpbnB1dCB0eXBlcyAqLworICBz
d2l0Y2ggKGZyYW1lLT5pbnR5cGUpCisgICAgeworICAgIGNhc2UgTFJFQURfSU5QVVRfRklMRToK
KyAgICAgIGlmIChmcmFtZS0+aW5wdXQuZi5zdHJlYW0gPT0gc3RkaW4pCisJeworCSAgZnJhbWUt
PnVucmVhZF9jaGFyID0gc3RkaW5faW5maWxlLnVucmVhZF9jaGFyOworCSAgZnJhbWUtPnJlYWRf
ZW9mID0gc3RkaW5faW5maWxlLnJlYWRfZW9mOworCSAgZnJhbWUtPmNoYXJfb2Zmc2V0ID0gc3Rk
aW5faW5maWxlLmNoYXJfb2Zmc2V0OworCSAgZnJhbWUtPmJ5dGVfb2Zmc2V0ID0gc3RkaW5faW5m
aWxlLmJ5dGVfb2Zmc2V0OworCX0KKyAgICAgIGVsc2UgaWYgKGZyYW1lLT5pbnB1dC5mLnNlZWth
YmxlICYmCisJICAgICAgIChmdGVsbG8gKGZyYW1lLT5pbnB1dC5mLnN0cmVhbSkgIT0gMCkpCisJ
eworCSAgZnNlZWtvIChmcmFtZS0+aW5wdXQuZi5zdHJlYW0sIDAsIFNFRUtfU0VUKTsKKwl9Cisg
ICAgICBicmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVUX1NUUklORzoKKyAgICAgIHsKKwlmcmFt
ZS0+Y2hhcl9vZmZzZXQgPSBmcmFtZS0+aW5wdXQucy5zdGFydDsKKwlmcmFtZS0+Ynl0ZV9vZmZz
ZXQKKwkgID0gc3RyaW5nX2NoYXJfdG9fYnl0ZSAoZnJhbWUtPmlucHV0LnMuc3RyaW5nLAorCQkJ
CSBmcmFtZS0+aW5wdXQucy5zdGFydCk7CisJLyogZnJhbWUtPm11bHRpYnl0ZSA9IFNUUklOR19N
VUxUSUJZVEUgKGZyYW1lLT5pbnB1dC5zLnN0cmluZyk7ICovCisgICAgICB9CisgICAgICBicmVh
azsKKyAgICBjYXNlIExSRUFEX0lOUFVUX1BST0NFRFVSRToKKyAgICAgIGZyYW1lLT5jaGFyX29m
ZnNldCA9IDA7CisgICAgICBmcmFtZS0+Ynl0ZV9vZmZzZXQgPSAwOworICAgICAgLyogaW1wbGlj
aXRseSBlbmNvZGVkIGFzIGVtYWNzLWludGVybmFsLAorCSBhcyB3ZSBvbmx5IGV2ZXIgc2VlIHRo
ZSBjaGFyYWN0ZXIgdmFsdWVzICovCisgICAgICAvKiBmcmFtZS0+bXVsdGlieXRlID0gTFJFQURf
TVVMVElCWVRFX1RSVUU7ICovCisgICAgICBicmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVUX0JV
RkZFUjoKKyAgICAgIHsKKwlzdHJ1Y3QgYnVmZmVyICpiID0gWEJVRkZFUiAoZnJhbWUtPmlucHV0
LmIuYnVmZmVyKTsKKwlmcmFtZS0+Y2hhcl9vZmZzZXQgPSBCVUZfUFQgKGIpOworCWZyYW1lLT5i
eXRlX29mZnNldCA9IEJVRl9QVF9CWVRFIChiKTsKKwkvKiBmcmFtZS0+bXVsdGlieXRlID0gISBO
SUxQIChCVkFSIChiLCBlbmFibGVfbXVsdGlieXRlX2NoYXJhY3RlcnMpKTsgKi8KKyAgICAgIH0K
KyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJFQURfSU5QVVRfTUFSS0VSOgorICAgICAgeworCXN0
cnVjdCBidWZmZXIgKmIgPSBYQlVGRkVSIChmcmFtZS0+aW5wdXQubS5iLmJ1ZmZlcik7CisJZnJh
bWUtPmNoYXJfb2Zmc2V0ID0gQlVGX1BUIChiKTsKKwlmcmFtZS0+Ynl0ZV9vZmZzZXQgPSBCVUZf
UFRfQllURSAoYik7CisJLyogZnJhbWUtPm11bHRpYnl0ZSA9ICEgTklMUCAoQlZBUiAoYiwgZW5h
YmxlX211bHRpYnl0ZV9jaGFyYWN0ZXJzKSk7ICovCisgICAgICB9CisgICAgICBicmVhazsKKyAg
ICBjYXNlIExSRUFEX0lOUFVUX0JJTkFSWToKKyAgICBjYXNlIExSRUFEX0lOUFVUX05VTEw6Cisg
ICAgICAvKiBub3RoaW5nIHRvIGRvICovCisgICAgICBicmVhazsKKyAgICBjYXNlIExSRUFEX0lO
UFVUX0lORElSRUNUOgorICAgICAgeworCWxyZWFkX2ZyYW1lICpzb3VyY2UgPSBmcmFtZS0+aW5w
dXQuZnJhbWUuc291cmNlOworCS8qIGNvcHkgdGhlIGl0ZW1zIHRoYXQgcmVmbGVjdCBpbmZvcm1h
dGlvbiBmb3IgKnJlYWRpbmcqLAorCSAgIG5vdCBldmFsdWF0aW5nCisJICAgSWYgcmVhZGVyLWlu
cHV0LXN0cmVhbSBpcyBjYWxsZWQgZHVyaW5nIGFuIGludGVycnVwdAorCSAgIGluIHRoZSBtaWRk
bGUgb2YgYSByZWFkLCB3ZSBpZ25vcmUgYW55IGludGVycnVwdGlvbgorCSAgIG9mIG9iamVjdF9t
YXAgYW5kIG9iamVjdHNfY29tcGxldGVkCisJKi8KKwlmcmFtZS0+dW5yZWFkX2NoYXIgPSBzb3Vy
Y2UtPnVucmVhZF9jaGFyOworCWZyYW1lLT51bnJlYWRfYnl0ZXMgPSBzb3VyY2UtPnVucmVhZF9i
eXRlczsKKwlmcmFtZS0+cmVhZF9lb2YgPSBzb3VyY2UtPnJlYWRfZW9mOworCWZyYW1lLT5jaGFy
X29mZnNldCA9IHNvdXJjZS0+Y2hhcl9vZmZzZXQ7CisJZnJhbWUtPmJ5dGVfb2Zmc2V0ID0gc291
cmNlLT5ieXRlX29mZnNldDsKKwlmcmFtZS0+c2F2ZWRfc3RyaW5nc1swXSA9IHNvdXJjZS0+c2F2
ZWRfc3RyaW5nc1swXTsKKwlmcmFtZS0+c2F2ZWRfc3RyaW5nc1sxXSA9IHNvdXJjZS0+c2F2ZWRf
c3RyaW5nc1sxXTsKKwlmcmFtZS0+bXVsdGlieXRlID0gc291cmNlLT5tdWx0aWJ5dGU7CisJZnJh
bWUtPnN0YXJ0ID0gc291cmNlLT5zdGFydDsKKwlmcmFtZS0+ZW5kID0gc291cmNlLT5lbmQ7CisJ
ZnJhbWUtPmZ1bGxfbmFtZSA9IHNvdXJjZS0+ZnVsbF9uYW1lOworCWZyYW1lLT5uYW1lID0gc291
cmNlLT5uYW1lOworCWZyYW1lLT5zb3VyY2VuYW1lID0gc291cmNlLT5zb3VyY2VuYW1lOworCWZy
YW1lLT5tdWxlX2NoYXJzZXQgPSBzb3VyY2UtPm11bGVfY2hhcnNldDsKKyAgICAgIH0KKyAgICAg
IGJyZWFrOworICAgICAgVU5SRUNPR05JWkVEX0xSRUFEX0lOUFVUX0NBU0VTKCJhY3RpdmF0ZV9s
cmVhZF9mcmFtZSIpOworICAgIH0KKyAgaWYgKGN1cnJlbnRfZnJhbWUgIT0gZnJhbWUpCisgICAg
eworICAgICAgLyogZG9uJ3QgcG9wIHR3aWNlICovCisgICAgICBmcmFtZS0+cmVzdG9yZV9mcmFt
ZV9pZHggPSBTUEVDUERMX0lOREVYKCk7CisgICAgICByZWNvcmRfdW53aW5kX3Byb3RlY3RfcHRy
IChyZXN0b3JlX2xyZWFkX2ZyYW1lLCBjdXJyZW50X2ZyYW1lKTsKKyAgICAgIGN1cnJlbnRfZnJh
bWUgPSBmcmFtZTsKKyAgICB9Cit9CisKK3ZvaWQKK3Jlc3RvcmVfbHJlYWRfZnJhbWUgKHZvaWQg
KnApCit7CisgIHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSA9IGN1cnJlbnRfZnJhbWU7CisK
KyAgLyogVXBkYXRlIHRoZSBzdGRpbiBzdHJlYW0gZGF0YSBhcyBpdCBtYXkgYmUgdXNlZCByZWN1
cnNpdmVseSAqLworICBpZiAoZnJhbWUtPmludHlwZSA9PSBMUkVBRF9JTlBVVF9GSUxFCisgICAg
ICAmJiBmcmFtZS0+aW5wdXQuZi5zdHJlYW0gPT0gc3RkaW4pCisgICAgeworICAgICAgc3RkaW5f
aW5maWxlLnMubG9va2FoZWFkID0gZnJhbWUtPmlucHV0LmYubG9va2FoZWFkOworICAgICAgbWVt
Y3B5IChzdGRpbl9pbmZpbGUucy5idWYsIGZyYW1lLT5pbnB1dC5mLmJ1Ziwgc2l6ZW9mKHN0ZGlu
X2luZmlsZS5zLmJ1ZikpOworICAgICAgc3RkaW5faW5maWxlLnVucmVhZF9jaGFyID0gZnJhbWUt
PnVucmVhZF9jaGFyOworICAgICAgc3RkaW5faW5maWxlLnJlYWRfZW9mID0gZnJhbWUtPnJlYWRf
ZW9mOworICAgICAgc3RkaW5faW5maWxlLmNoYXJfb2Zmc2V0ID0gZnJhbWUtPmNoYXJfb2Zmc2V0
OworICAgICAgc3RkaW5faW5maWxlLmJ5dGVfb2Zmc2V0ID0gZnJhbWUtPmJ5dGVfb2Zmc2V0Owor
ICAgIH0KKyAgaWYgKGZyYW1lLT5pbnR5cGUgPT0gTFJFQURfSU5QVVRfSU5ESVJFQ1QpCisgICAg
eworICAgICAgLyogc2F2ZSBhbnkgc3RhdGUgY2hhbmdlcyBkb3duKi8KKyAgICAgIHsKKwlscmVh
ZF9mcmFtZSAqc291cmNlID0gZnJhbWUtPmlucHV0LmZyYW1lLnNvdXJjZTsKKwkvKiBzb3VyY2Ut
PnVucmVhZF9jaGFyID0gZnJhbWUtPnVucmVhZF9jaGFyOyAqLworCS8qIHNvdXJjZS0+dW5yZWFk
X2J5dGVzID0gZnJhbWUtPnVucmVhZF9ieXRlczsgKi8KKwkvKiBzb3VyY2UtPnJlYWRfZW9mID0g
ZnJhbWUtPnJlYWRfZW9mOyAqLworCS8qIHNvdXJjZS0+Y2hhcl9vZmZzZXQgPSBmcmFtZS0+Y2hh
cl9vZmZzZXQ7ICovCisJLyogc291cmNlLT5ieXRlX29mZnNldCA9IGZyYW1lLT5ieXRlX29mZnNl
dDsgKi8KKwkvKiBzb3VyY2UtPnNhdmVkX3N0cmluZ3NbMF0gPSBmcmFtZS0+c2F2ZWRfc3RyaW5n
c1swXTsgKi8KKwkvKiBzb3VyY2UtPnNhdmVkX3N0cmluZ3NbMV0gPSBmcmFtZS0+c2F2ZWRfc3Ry
aW5nc1sxXTsgKi8KKwkvKiBzb3VyY2UtPm11bHRpYnl0ZSA9IGZyYW1lLT5tdWx0aWJ5dGU7ICov
CisJc291cmNlLT5zdGFydCA9IGZyYW1lLT5zdGFydDsKKwlzb3VyY2UtPmVuZCA9IGZyYW1lLT5l
bmQ7CisJLyogc291cmNlLT5mdWxsX25hbWUgPSBmcmFtZS0+ZnVsbF9uYW1lOyAqLworCS8qIHNv
dXJjZS0+bmFtZSA9IGZyYW1lLT5uYW1lOyAqLworCS8qIHNvdXJjZS0+c291cmNlbmFtZSA9IGZy
YW1lLT5zb3VyY2VuYW1lOyAqLworCS8qIHNvdXJjZS0+bXVsZV9jaGFyc2V0ID0gZnJhbWUtPm11
bGVfY2hhcnNldDsgKi8KKyAgICAgIH0KKyAgICB9CisgIGZyYW1lID0gKGxyZWFkX2ZyYW1lICop
IHA7CisgIC8qIGNoYW5nZSB0aGUgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gYXMgbmVlZGVkIGZv
ciBkaWZmZXJlbnQgaW5wdXQgdHlwZXMgKi8KKyAgaWYgKGZyYW1lKQorICAgIHsKKyAgICAgIHN3
aXRjaCAoZnJhbWUtPmludHlwZSkKKwl7CisJY2FzZSBMUkVBRF9JTlBVVF9GSUxFOgorCWNhc2Ug
TFJFQURfSU5QVVRfRklMRV9NVUxFOgorCSAgLyogSSdtIG5vdCBzdXJlIGFueXRoaW5nIGVsc2Ug
aGFzIGFjY2VzcyB0byB0aGVzZSBzdHJlYW0gb2JqZWN0cywKKwkgICAgIGV4Y2VwdCBtYXliZSB0
aHJvdWdoICJyZWFkZXItaW5wdXQtc3RyZWFtIiwKKwkgICAgIGJ1dCBqdXN0IGluIGNhc2UsIGVu
c3VyZSB3ZSBhcmUgYXQgdGhlIHNhbWUgb2Zmc2V0CisJICAgICBPdGhlcndpc2UsIGVuc3VyZSAi
c2Vla2FibGUiIGZsYWcgaXMgb2ZmICovCisJICBpZiAoZnJhbWUtPmlucHV0LmYuc2Vla2FibGUp
CisJICAgIHsKKwkgICAgICBmc2Vla28gKGZyYW1lLT5pbnB1dC5mLnN0cmVhbSwgKG9mZl90KSBm
cmFtZS0+Ynl0ZV9vZmZzZXQsIFNFRUtfU0VUKTsKKwkgICAgfQorCSAgYnJlYWs7CisJY2FzZSBM
UkVBRF9JTlBVVF9TVFJJTkc6CisJY2FzZSBMUkVBRF9JTlBVVF9QUk9DRURVUkU6CisJICAvKiBN
dWxpdGJ5dGUgY2Fubm90IGJlIGNoYW5nZWQgaGVyZSovCisJICBicmVhazsKKwljYXNlIExSRUFE
X0lOUFVUX0JVRkZFUjoKKwljYXNlIExSRUFEX0lOUFVUX01BUktFUjoKKwkgIC8qIE1pZ2h0IGhh
dmUgY2hhbmdlZCBtdWx0aWJ5dGUqLworCSAgcmVwb3J0X2xyZWFkX211bHRpYnl0ZSAoZnJhbWUp
OworCSAgaW5pdGlhbGl6ZV9yZWFkb25lY2hhciAoZnJhbWUpOworCSAgYnJlYWs7CisJY2FzZSBM
UkVBRF9JTlBVVF9CSU5BUlk6CisJY2FzZSBMUkVBRF9JTlBVVF9OVUxMOgorCSAgLyogbm90aGlu
ZyB0byBkbyAqLworCSAgYnJlYWs7CisJY2FzZSBMUkVBRF9JTlBVVF9JTkRJUkVDVDoKKwkgIC8q
IG5vdGhpbmcgdG8gZG8sIG1heWJlICovCisJICBicmVhazsKKwkgIFVOUkVDT0dOSVpFRF9MUkVB
RF9JTlBVVF9DQVNFUygicmVzdG9yZV9scmVhZF9mcmFtZSIpOworCX0KKyAgICB9CisgIGN1cnJl
bnRfZnJhbWUgPSBmcmFtZTsKK30KKwogdm9pZAogc3ltc19vZl9scmVhZCAodm9pZCkKIHsKQEAg
LTU4NTAsNiArNzcwMSw3IEBAIHN5bXNfb2ZfbHJlYWQgKHZvaWQpCiAgIGRlZnN1YnIgKCZTdW5p
bnRlcm4pOwogICBkZWZzdWJyICgmU2dldF9sb2FkX3N1ZmZpeGVzKTsKICAgZGVmc3ViciAoJlNs
b2FkKTsKKyAgZGVmc3ViciAoJlNldmFsX3N0cmVhbSk7CiAgIGRlZnN1YnIgKCZTZXZhbF9idWZm
ZXIpOwogICBkZWZzdWJyICgmU2V2YWxfcmVnaW9uKTsKICAgZGVmc3ViciAoJlNyZWFkX2NoYXIp
OwpAQCAtNTg2MiwyOSArNzcxNCwzMCBAQCBzeW1zX29mX2xyZWFkICh2b2lkKQogICBkZWZzdWJy
ICgmU29iYXJyYXlwKTsKICAgZGVmc3ViciAoJlNvYmFycmF5X2NsZWFyKTsKIAorCiAgIERFRlZB
Ul9MSVNQICgib2JhcnJheSIsIFZvYmFycmF5LAotCSAgICAgICBkb2M6IC8qIFN5bWJvbCB0YWJs
ZSBmb3IgdXNlIGJ5IGBpbnRlcm4nIGFuZCBgcmVhZCcuCisgICAgZG9jOiAvKiBTeW1ib2wgdGFi
bGUgZm9yIHVzZSBieSBgaW50ZXJuJyBhbmQgYHJlYWQnLgogSXQgaXMgYSB2ZWN0b3Igd2hvc2Ug
bGVuZ3RoIG91Z2h0IHRvIGJlIHByaW1lIGZvciBiZXN0IHJlc3VsdHMuCiBUaGUgdmVjdG9yJ3Mg
Y29udGVudHMgZG9uJ3QgbWFrZSBzZW5zZSBpZiBleGFtaW5lZCBmcm9tIExpc3AgcHJvZ3JhbXM7
CiB0byBmaW5kIGFsbCB0aGUgc3ltYm9scyBpbiBhbiBvYmFycmF5LCB1c2UgYG1hcGF0b21zJy4g
ICovKTsKIAogICBERUZWQVJfTElTUCAoInZhbHVlcyIsIFZ2YWx1ZXMsCi0JICAgICAgIGRvYzog
LyogTGlzdCBvZiB2YWx1ZXMgb2YgYWxsIGV4cHJlc3Npb25zIHdoaWNoIHdlcmUgcmVhZCwgZXZh
bHVhdGVkIGFuZCBwcmludGVkLgorICAgIGRvYzogLyogTGlzdCBvZiB2YWx1ZXMgb2YgYWxsIGV4
cHJlc3Npb25zIHdoaWNoIHdlcmUgcmVhZCwgZXZhbHVhdGVkIGFuZCBwcmludGVkLgogT3JkZXIg
aXMgcmV2ZXJzZSBjaHJvbm9sb2dpY2FsLgogVGhpcyB2YXJpYWJsZSBpcyBvYnNvbGV0ZSBhcyBv
ZiBFbWFjcyAyOC4xIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuICAqLyk7CiAgIFhCQVJFX1NZTUJP
TCAoaW50ZXJuICgidmFsdWVzIikpLT51LnMuZGVjbGFyZWRfc3BlY2lhbCA9IGZhbHNlOwogCiAg
IERFRlZBUl9MSVNQICgic3RhbmRhcmQtaW5wdXQiLCBWc3RhbmRhcmRfaW5wdXQsCi0JICAgICAg
IGRvYzogLyogU3RyZWFtIGZvciByZWFkIHRvIGdldCBpbnB1dCBmcm9tLgorICAgIGRvYzogLyog
U3RyZWFtIGZvciByZWFkIHRvIGdldCBpbnB1dCBmcm9tLgogU2VlIGRvY3VtZW50YXRpb24gb2Yg
YHJlYWQnIGZvciBwb3NzaWJsZSB2YWx1ZXMuICAqLyk7CiAgIFZzdGFuZGFyZF9pbnB1dCA9IFF0
OwogCiAgIERFRlZBUl9MSVNQICgicmVhZC1jaXJjbGUiLCBWcmVhZF9jaXJjbGUsCi0JICAgICAg
IGRvYzogLyogTm9uLW5pbCBtZWFucyByZWFkIHJlY3Vyc2l2ZSBzdHJ1Y3R1cmVzIHVzaW5nICNO
PSBhbmQgI04jIHN5bnRheC4gICovKTsKKyAgICBkb2M6IC8qIE5vbi1uaWwgbWVhbnMgcmVhZCBy
ZWN1cnNpdmUgc3RydWN0dXJlcyB1c2luZyAjTj0gYW5kICNOIyBzeW50YXguICAqLyk7CiAgIFZy
ZWFkX2NpcmNsZSA9IFF0OwogCiAgIERFRlZBUl9MSVNQICgibG9hZC1wYXRoIiwgVmxvYWRfcGF0
aCwKLQkgICAgICAgZG9jOiAvKiBMaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgZmls
ZXMgdG8gbG9hZC4KKyAgICBkb2M6IC8qIExpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZv
ciBmaWxlcyB0byBsb2FkLgogRWFjaCBlbGVtZW50IGlzIGEgc3RyaW5nIChkaXJlY3RvcnkgZmls
ZSBuYW1lKSBvciBuaWwgKG1lYW5pbmcKIGBkZWZhdWx0LWRpcmVjdG9yeScpLgogVGhpcyBsaXN0
IGlzIGNvbnN1bHRlZCBieSB0aGUgYHJlcXVpcmUnIGZ1bmN0aW9uLgpAQCAtNTg5NCw3ICs3NzQ3
LDcgQEAgc3ltc19vZl9scmVhZCAodm9pZCkKIGFuZCB3aXRob3V0IHRyYWlsaW5nIHNsYXNoZXMu
ICAqLyk7CiAKICAgREVGVkFSX0xJU1AgKCJsb2FkLXN1ZmZpeGVzIiwgVmxvYWRfc3VmZml4ZXMs
Ci0JICAgICAgIGRvYzogLyogTGlzdCBvZiBzdWZmaXhlcyBmb3IgRW1hY3MgTGlzcCBmaWxlcyBh
bmQgZHluYW1pYyBtb2R1bGVzLgorICAgIGRvYzogLyogTGlzdCBvZiBzdWZmaXhlcyBmb3IgRW1h
Y3MgTGlzcCBmaWxlcyBhbmQgZHluYW1pYyBtb2R1bGVzLgogVGhpcyBsaXN0IGluY2x1ZGVzIHN1
ZmZpeGVzIGZvciBib3RoIGNvbXBpbGVkIGFuZCBzb3VyY2UgRW1hY3MgTGlzcCBmaWxlcy4KIFRo
aXMgbGlzdCBzaG91bGQgbm90IGluY2x1ZGUgdGhlIGVtcHR5IHN0cmluZy4KIGBsb2FkJyBhbmQg
cmVsYXRlZCBmdW5jdGlvbnMgdHJ5IHRvIGFwcGVuZCB0aGVzZSBzdWZmaXhlcywgaW4gb3JkZXIs
CkBAIC01OTA5LDcgKzc3NjIsNyBAQCBzeW1zX29mX2xyZWFkICh2b2lkKQogI2VuZGlmCiAjZW5k
aWYKICAgREVGVkFSX0xJU1AgKCJtb2R1bGUtZmlsZS1zdWZmaXgiLCBWbW9kdWxlX2ZpbGVfc3Vm
Zml4LAotCSAgICAgICBkb2M6IC8qIFN1ZmZpeCBvZiBsb2FkYWJsZSBtb2R1bGUgZmlsZSwgb3Ig
bmlsIGlmIG1vZHVsZXMgYXJlIG5vdCBzdXBwb3J0ZWQuICAqLyk7CisgICAgZG9jOiAvKiBTdWZm
aXggb2YgbG9hZGFibGUgbW9kdWxlIGZpbGUsIG9yIG5pbCBpZiBtb2R1bGVzIGFyZSBub3Qgc3Vw
cG9ydGVkLiAgKi8pOwogI2lmZGVmIEhBVkVfTU9EVUxFUwogICBWbW9kdWxlX2ZpbGVfc3VmZml4
ID0gYnVpbGRfc3RyaW5nIChNT0RVTEVTX1NVRkZJWCk7CiAjZWxzZQpAQCAtNTkxNyw3ICs3Nzcw
LDcgQEAgc3ltc19vZl9scmVhZCAodm9pZCkKICNlbmRpZgogCiAgIERFRlZBUl9MSVNQICgiZHlu
YW1pYy1saWJyYXJ5LXN1ZmZpeGVzIiwgVmR5bmFtaWNfbGlicmFyeV9zdWZmaXhlcywKLQkgICAg
ICAgZG9jOiAvKiBBIGxpc3Qgb2Ygc3VmZml4ZXMgZm9yIGxvYWRhYmxlIGR5bmFtaWMgbGlicmFy
aWVzLiAgKi8pOworICAgIGRvYzogLyogQSBsaXN0IG9mIHN1ZmZpeGVzIGZvciBsb2FkYWJsZSBk
eW5hbWljIGxpYnJhcmllcy4gICovKTsKIAogI2lmbmRlZiBNU0RPUwogICBWZHluYW1pY19saWJy
YXJ5X3N1ZmZpeGVzCkBAIC01OTMwLDcgKzc3ODMsNyBAQCBzeW1zX29mX2xyZWFkICh2b2lkKQog
I2VuZGlmCiAKICAgREVGVkFSX0xJU1AgKCJsb2FkLWZpbGUtcmVwLXN1ZmZpeGVzIiwgVmxvYWRf
ZmlsZV9yZXBfc3VmZml4ZXMsCi0JICAgICAgIGRvYzogLyogTGlzdCBvZiBzdWZmaXhlcyB0aGF0
IGluZGljYXRlIHJlcHJlc2VudGF0aW9ucyBvZiBcCisgICAgZG9jOiAvKiBMaXN0IG9mIHN1ZmZp
eGVzIHRoYXQgaW5kaWNhdGUgcmVwcmVzZW50YXRpb25zIG9mIFwKIHRoZSBzYW1lIGZpbGUuCiBU
aGlzIGxpc3Qgc2hvdWxkIG5vcm1hbGx5IHN0YXJ0IHdpdGggdGhlIGVtcHR5IHN0cmluZy4KIApA
QCAtNTk0NCwxNCArNzc5NywxMiBAQCBzeW1zX29mX2xyZWFkICh2b2lkKQogY3VzdG9taXplIGBq
a2EtY29tcHItbG9hZC1zdWZmaXhlcycgcmF0aGVyIHRoYW4gdGhlIHByZXNlbnQgdmFyaWFibGUu
ICAqLyk7CiAgIFZsb2FkX2ZpbGVfcmVwX3N1ZmZpeGVzID0gbGlzdDEgKGVtcHR5X3VuaWJ5dGVf
c3RyaW5nKTsKIAotICBERUZTWU0gKFFqa2FfY29tcHJfbG9hZF9zdWZmaXhlcywgImprYS1jb21w
ci1sb2FkLXN1ZmZpeGVzIik7Ci0KICAgREVGVkFSX0JPT0wgKCJsb2FkLWluLXByb2dyZXNzIiwg
bG9hZF9pbl9wcm9ncmVzcywKLQkgICAgICAgZG9jOiAvKiBOb24tbmlsIGlmIGluc2lkZSBvZiBg
bG9hZCcuICAqLyk7CisgICAgZG9jOiAvKiBOb24tbmlsIGlmIGluc2lkZSBvZiBgbG9hZCcuICAq
Lyk7CiAgIERFRlNZTSAoUWxvYWRfaW5fcHJvZ3Jlc3MsICJsb2FkLWluLXByb2dyZXNzIik7CiAK
ICAgREVGVkFSX0xJU1AgKCJhZnRlci1sb2FkLWFsaXN0IiwgVmFmdGVyX2xvYWRfYWxpc3QsCi0J
ICAgICAgIGRvYzogLyogQW4gYWxpc3Qgb2YgZnVuY3Rpb25zIHRvIGJlIGV2YWxsZWQgd2hlbiBw
YXJ0aWN1bGFyIGZpbGVzIGFyZSBsb2FkZWQuCisgICAgZG9jOiAvKiBBbiBhbGlzdCBvZiBmdW5j
dGlvbnMgdG8gYmUgZXZhbGxlZCB3aGVuIHBhcnRpY3VsYXIgZmlsZXMgYXJlIGxvYWRlZC4KIEVh
Y2ggZWxlbWVudCBsb29rcyBsaWtlIChSRUdFWFAtT1ItRkVBVFVSRSBGVU5DUy4uLikuCiAKIFJF
R0VYUC1PUi1GRUFUVVJFIGlzIGVpdGhlciBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBm
aWxlIG5hbWVzLCBvcgpAQCAtNTk2Niw3ICs3ODE3LDcgQEAgc3ltc19vZl9scmVhZCAodm9pZCkK
ICAgVmFmdGVyX2xvYWRfYWxpc3QgPSBRbmlsOwogCiAgIERFRlZBUl9MSVNQICgibG9hZC1oaXN0
b3J5IiwgVmxvYWRfaGlzdG9yeSwKLQkgICAgICAgZG9jOiAvKiBBbGlzdCBtYXBwaW5nIGxvYWRl
ZCBmaWxlIG5hbWVzIHRvIHN5bWJvbHMgYW5kIGZlYXR1cmVzLgorICAgIGRvYzogLyogQWxpc3Qg
bWFwcGluZyBsb2FkZWQgZmlsZSBuYW1lcyB0byBzeW1ib2xzIGFuZCBmZWF0dXJlcy4KIEVhY2gg
YWxpc3QgZWxlbWVudCBzaG91bGQgYmUgYSBsaXN0IChGSUxFLU5BTUUgRU5UUklFUy4uLiksIHdo
ZXJlCiBGSUxFLU5BTUUgaXMgdGhlIG5hbWUgb2YgYSBmaWxlIHRoYXQgaGFzIGJlZW4gbG9hZGVk
IGludG8gRW1hY3MuCiBUaGUgZmlsZSBuYW1lIGlzIGFic29sdXRlIGFuZCB0cnVlIChpLmUuIGl0
IGRvZXNuJ3QgY29udGFpbiBzeW1saW5rcykuCkBAIC01OTg2LDcgKzc4MzcsNyBAQCBzeW1zX29m
X2xyZWFkICh2b2lkKQogICBWbG9hZF9oaXN0b3J5ID0gUW5pbDsKIAogICBERUZWQVJfTElTUCAo
ImxvYWQtZmlsZS1uYW1lIiwgVmxvYWRfZmlsZV9uYW1lLAotCSAgICAgICBkb2M6IC8qIEZ1bGwg
bmFtZSBvZiBmaWxlIGJlaW5nIGxvYWRlZCBieSBgbG9hZCcuCisgICAgZG9jOiAvKiBGdWxsIG5h
bWUgb2YgZmlsZSBiZWluZyBsb2FkZWQgYnkgYGxvYWQnLgogCiBJbiBjYXNlIG9mIG5hdGl2ZSBj
b2RlIGJlaW5nIGxvYWRlZCB0aGlzIGlzIGluZGljYXRpbmcgdGhlCiBjb3JyZXNwb25kaW5nIGJ5
dGVjb2RlIGZpbGVuYW1lLiAgVXNlIGBsb2FkLXRydWUtZmlsZS1uYW1lJyB0byBvYnRhaW4KQEAg
LTU5OTQsMTEgKzc4NDUsMTEgQEAgc3ltc19vZl9scmVhZCAodm9pZCkKICAgVmxvYWRfZmlsZV9u
YW1lID0gUW5pbDsKIAogICBERUZWQVJfTElTUCAoImxvYWQtdHJ1ZS1maWxlLW5hbWUiLCBWbG9h
ZF90cnVlX2ZpbGVfbmFtZSwKLQkgICAgICAgZG9jOiAvKiBGdWxsIG5hbWUgb2YgZmlsZSBiZWlu
ZyBsb2FkZWQgYnkgYGxvYWQnLiAgKi8pOworICAgIGRvYzogLyogRnVsbCBuYW1lIG9mIGZpbGUg
YmVpbmcgbG9hZGVkIGJ5IGBsb2FkJy4gICovKTsKICAgVmxvYWRfdHJ1ZV9maWxlX25hbWUgPSBR
bmlsOwogCiAgIERFRlZBUl9MSVNQICgidXNlci1pbml0LWZpbGUiLCBWdXNlcl9pbml0X2ZpbGUs
Ci0JICAgICAgIGRvYzogLyogRmlsZSBuYW1lLCBpbmNsdWRpbmcgZGlyZWN0b3J5LCBvZiB1c2Vy
J3MgaW5pdGlhbGl6YXRpb24gZmlsZS4KKyAgZG9jOiAvKiBGaWxlIG5hbWUsIGluY2x1ZGluZyBk
aXJlY3RvcnksIG9mIHVzZXIncyBpbml0aWFsaXphdGlvbiBmaWxlLgogSWYgdGhlIGZpbGUgbG9h
ZGVkIGhhZCBleHRlbnNpb24gYC5lbGMnLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGZp
bGUKIGV4aXN0cywgdGhpcyB2YXJpYWJsZSBjb250YWlucyB0aGUgbmFtZSBvZiBzb3VyY2UgZmls
ZSwgc3VpdGFibGUgZm9yIHVzZQogYnkgZnVuY3Rpb25zIGxpa2UgYGN1c3RvbS1zYXZlLWFsbCcg
d2hpY2ggZWRpdCB0aGUgaW5pdCBmaWxlLgpAQCAtNjAwNywxMSArNzg1OCwxMiBAQCBzeW1zX29m
X2xyZWFkICh2b2lkKQogICBWdXNlcl9pbml0X2ZpbGUgPSBRbmlsOwogCiAgIERFRlZBUl9MSVNQ
ICgiY3VycmVudC1sb2FkLWxpc3QiLCBWY3VycmVudF9sb2FkX2xpc3QsCi0JICAgICAgIGRvYzog
LyogVXNlZCBmb3IgaW50ZXJuYWwgcHVycG9zZXMgYnkgYGxvYWQnLiAgKi8pOworICAgIGRvYzog
LyogVXNlZCBmb3IgaW50ZXJuYWwgcHVycG9zZXMgYnkgYGxvYWQnLiAgKi8pOwogICBWY3VycmVu
dF9sb2FkX2xpc3QgPSBRbmlsOwogCisgIERFRlNZTSAoUWxvYWRfcmVhZF9mdW5jdGlvbiwibG9h
ZC1yZWFkLWZ1bmN0aW9uIik7CiAgIERFRlZBUl9MSVNQICgibG9hZC1yZWFkLWZ1bmN0aW9uIiwg
VmxvYWRfcmVhZF9mdW5jdGlvbiwKLQkgICAgICAgZG9jOiAvKiBGdW5jdGlvbiB1c2VkIGZvciBy
ZWFkaW5nIGV4cHJlc3Npb25zLgorICAgIGRvYzogLyogRnVuY3Rpb24gdXNlZCBmb3IgcmVhZGlu
ZyBleHByZXNzaW9ucy4KIEl0IGlzIHVzZWQgYnkgYGxvYWQnIGFuZCBgZXZhbC1yZWdpb24nLgog
CiBDYWxsZWQgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCAodGhlIHN0cmVhbSBmcm9tIHdoaWNoIHRv
IHJlYWQpLgpAQCAtNjAyMCw3ICs3ODcyLDcgQEAgc3ltc19vZl9scmVhZCAodm9pZCkKICAgVmxv
YWRfcmVhZF9mdW5jdGlvbiA9IFFyZWFkOwogCiAgIERFRlZBUl9MSVNQICgibG9hZC1zb3VyY2Ut
ZmlsZS1mdW5jdGlvbiIsIFZsb2FkX3NvdXJjZV9maWxlX2Z1bmN0aW9uLAotCSAgICAgICBkb2M6
IC8qIEZ1bmN0aW9uIGNhbGxlZCBpbiBgbG9hZCcgdG8gbG9hZCBhbiBFbWFjcyBMaXNwIHNvdXJj
ZSBmaWxlLgorICAgIGRvYzogLyogRnVuY3Rpb24gY2FsbGVkIGluIGBsb2FkJyB0byBsb2FkIGFu
IEVtYWNzIExpc3Agc291cmNlIGZpbGUuCiBUaGUgdmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24g
Zm9yIGRvaW5nIGNvZGUgY29udmVyc2lvbiBiZWZvcmUKIHJlYWRpbmcgYSBzb3VyY2UgZmlsZS4g
IEl0IGNhbiBhbHNvIGJlIG5pbCwgaW4gd2hpY2ggY2FzZSBsb2FkaW5nIGlzCiBkb25lIHdpdGhv
dXQgYW55IGNvZGUgY29udmVyc2lvbi4KQEAgLTYwMzMsNDUgKzc4ODUsNDUgQEAgc3ltc19vZl9s
cmVhZCAodm9pZCkKICAgVmxvYWRfc291cmNlX2ZpbGVfZnVuY3Rpb24gPSBRbmlsOwogCiAgIERF
RlZBUl9CT09MICgibG9hZC1mb3JjZS1kb2Mtc3RyaW5ncyIsIGxvYWRfZm9yY2VfZG9jX3N0cmlu
Z3MsCi0JICAgICAgIGRvYzogLyogTm9uLW5pbCBtZWFucyBgbG9hZCcgc2hvdWxkIGZvcmNlLWxv
YWQgYWxsIGR5bmFtaWMgZG9jIHN0cmluZ3MuCisgICAgZG9jOiAvKiBOb24tbmlsIG1lYW5zIGBs
b2FkJyBzaG91bGQgZm9yY2UtbG9hZCBhbGwgZHluYW1pYyBkb2Mgc3RyaW5ncy4KIFRoaXMgaXMg
dXNlZnVsIHdoZW4gdGhlIGZpbGUgYmVpbmcgbG9hZGVkIGlzIGEgdGVtcG9yYXJ5IGNvcHkuICAq
Lyk7CiAgIGxvYWRfZm9yY2VfZG9jX3N0cmluZ3MgPSAwOwogCiAgIERFRlZBUl9CT09MICgibG9h
ZC1jb252ZXJ0LXRvLXVuaWJ5dGUiLCBsb2FkX2NvbnZlcnRfdG9fdW5pYnl0ZSwKLQkgICAgICAg
ZG9jOiAvKiBOb24tbmlsIG1lYW5zIGByZWFkJyBjb252ZXJ0cyBzdHJpbmdzIHRvIHVuaWJ5dGUg
d2hlbmV2ZXIgcG9zc2libGUuCisgICAgZG9jOiAvKiBOb24tbmlsIG1lYW5zIGByZWFkJyBjb252
ZXJ0cyBzdHJpbmdzIHRvIHVuaWJ5dGUgd2hlbmV2ZXIgcG9zc2libGUuCiBUaGlzIGlzIG5vcm1h
bGx5IGJvdW5kIGJ5IGBsb2FkJyBhbmQgYGV2YWwtYnVmZmVyJyB0byBjb250cm9sIGByZWFkJywK
IGFuZCBpcyBub3QgbWVhbnQgZm9yIHVzZXJzIHRvIGNoYW5nZS4gICovKTsKICAgbG9hZF9jb252
ZXJ0X3RvX3VuaWJ5dGUgPSAwOwogCiAgIERFRlZBUl9MSVNQICgic291cmNlLWRpcmVjdG9yeSIs
IFZzb3VyY2VfZGlyZWN0b3J5LAotCSAgICAgICBkb2M6IC8qIERpcmVjdG9yeSBpbiB3aGljaCBF
bWFjcyBzb3VyY2VzIHdlcmUgZm91bmQgd2hlbiBFbWFjcyB3YXMgYnVpbHQuCisgICAgZG9jOiAv
KiBEaXJlY3RvcnkgaW4gd2hpY2ggRW1hY3Mgc291cmNlcyB3ZXJlIGZvdW5kIHdoZW4gRW1hY3Mg
d2FzIGJ1aWx0LgogWW91IGNhbm5vdCBjb3VudCBvbiB0aGVtIHRvIHN0aWxsIGJlIHRoZXJlISAg
Ki8pOwogICBWc291cmNlX2RpcmVjdG9yeQogICAgID0gRmV4cGFuZF9maWxlX25hbWUgKGJ1aWxk
X3N0cmluZyAoIi4uLyIpLAogCQkJIEZjYXIgKGRlY29kZV9lbnZfcGF0aCAoMCwgUEFUSF9EVU1Q
TE9BRFNFQVJDSCwgMCkpKTsKIAogICBERUZWQVJfTElTUCAoInByZWxvYWRlZC1maWxlLWxpc3Qi
LCBWcHJlbG9hZGVkX2ZpbGVfbGlzdCwKLQkgICAgICAgZG9jOiAvKiBMaXN0IG9mIGZpbGVzIHRo
YXQgd2VyZSBwcmVsb2FkZWQgKHdoZW4gZHVtcGluZyBFbWFjcykuICAqLyk7CisgICAgZG9jOiAv
KiBMaXN0IG9mIGZpbGVzIHRoYXQgd2VyZSBwcmVsb2FkZWQgKHdoZW4gZHVtcGluZyBFbWFjcyku
ICAqLyk7CiAgIFZwcmVsb2FkZWRfZmlsZV9saXN0ID0gUW5pbDsKIAogICBERUZWQVJfTElTUCAo
ImJ5dGUtYm9vbGVhbi12YXJzIiwgVmJ5dGVfYm9vbGVhbl92YXJzLAotCSAgICAgICBkb2M6IC8q
IExpc3Qgb2YgYWxsIERFRlZBUl9CT09MIHZhcmlhYmxlcywgdXNlZCBieSB0aGUgYnl0ZSBjb2Rl
IG9wdGltaXplci4gICovKTsKKyAgICBkb2M6IC8qIExpc3Qgb2YgYWxsIERFRlZBUl9CT09MIHZh
cmlhYmxlcywgdXNlZCBieSB0aGUgYnl0ZSBjb2RlIG9wdGltaXplci4gICovKTsKICAgVmJ5dGVf
Ym9vbGVhbl92YXJzID0gUW5pbDsKIAogICBERUZWQVJfQk9PTCAoImxvYWQtZGFuZ2Vyb3VzLWxp
YnJhcmllcyIsIGxvYWRfZGFuZ2Vyb3VzX2xpYnJhcmllcywKLQkgICAgICAgZG9jOiAvKiBOb24t
bmlsIG1lYW5zIGxvYWQgZGFuZ2Vyb3VzIGNvbXBpbGVkIExpc3AgZmlsZXMuCisgICAgZG9jOiAv
KiBOb24tbmlsIG1lYW5zIGxvYWQgZGFuZ2Vyb3VzIGNvbXBpbGVkIExpc3AgZmlsZXMuCiBTb21l
IHZlcnNpb25zIG9mIFhFbWFjcyB1c2UgZGlmZmVyZW50IGJ5dGUgY29kZXMgdGhhbiBFbWFjcy4g
IFRoZXNlCiBpbmNvbXBhdGlibGUgYnl0ZSBjb2RlcyBjYW4gbWFrZSBFbWFjcyBjcmFzaCB3aGVu
IGl0IHRyaWVzIHRvIGV4ZWN1dGUKIHRoZW0uICAqLyk7CiAgIGxvYWRfZGFuZ2Vyb3VzX2xpYnJh
cmllcyA9IDA7CiAKICAgREVGVkFSX0JPT0wgKCJmb3JjZS1sb2FkLW1lc3NhZ2VzIiwgZm9yY2Vf
bG9hZF9tZXNzYWdlcywKLQkgICAgICAgZG9jOiAvKiBOb24tbmlsIG1lYW5zIGZvcmNlIHByaW50
aW5nIG1lc3NhZ2VzIHdoZW4gbG9hZGluZyBMaXNwIGZpbGVzLgorICAgIGRvYzogLyogTm9uLW5p
bCBtZWFucyBmb3JjZSBwcmludGluZyBtZXNzYWdlcyB3aGVuIGxvYWRpbmcgTGlzcCBmaWxlcy4K
IFRoaXMgb3ZlcnJpZGVzIHRoZSB2YWx1ZSBvZiB0aGUgTk9NRVNTQUdFIGFyZ3VtZW50IHRvIGBs
b2FkJy4gICovKTsKICAgZm9yY2VfbG9hZF9tZXNzYWdlcyA9IDA7CiAKICAgREVGVkFSX0xJU1Ag
KCJieXRlY29tcC12ZXJzaW9uLXJlZ2V4cCIsIFZieXRlY29tcF92ZXJzaW9uX3JlZ2V4cCwKLQkg
ICAgICAgZG9jOiAvKiBSZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgc2FmZSB0byBsb2FkIGNv
bXBpbGVkIExpc3AgZmlsZXMuCisgICAgZG9jOiAvKiBSZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hp
bmcgc2FmZSB0byBsb2FkIGNvbXBpbGVkIExpc3AgZmlsZXMuCiBXaGVuIEVtYWNzIGxvYWRzIGEg
Y29tcGlsZWQgTGlzcCBmaWxlLCBpdCByZWFkcyB0aGUgZmlyc3QgNTEyIGJ5dGVzCiBmcm9tIHRo
ZSBmaWxlLCBhbmQgbWF0Y2hlcyB0aGVtIGFnYWluc3QgdGhpcyByZWd1bGFyIGV4cHJlc3Npb24u
CiBXaGVuIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hlcywgdGhlIGZpbGUgaXMgY29uc2lk
ZXJlZCB0byBiZSBzYWZlCkBAIC02MDgxLDcgKzc5MzMsNyBAQCBzeW1zX29mX2xyZWFkICh2b2lk
KQogCiAgIERFRlNZTSAoUWxleGljYWxfYmluZGluZywgImxleGljYWwtYmluZGluZyIpOwogICBE
RUZWQVJfTElTUCAoImxleGljYWwtYmluZGluZyIsIFZsZXhpY2FsX2JpbmRpbmcsCi0JICAgICAg
IGRvYzogLyogV2hldGhlciB0byB1c2UgbGV4aWNhbCBiaW5kaW5nIHdoZW4gZXZhbHVhdGluZyBj
b2RlLgorICAgIGRvYzogLyogV2hldGhlciB0byB1c2UgbGV4aWNhbCBiaW5kaW5nIHdoZW4gZXZh
bHVhdGluZyBjb2RlLgogTm9uLW5pbCBtZWFucyB0aGF0IHRoZSBjb2RlIGluIHRoZSBjdXJyZW50
IGJ1ZmZlciBzaG91bGQgYmUgZXZhbHVhdGVkCiB3aXRoIGxleGljYWwgYmluZGluZy4KIFRoaXMg
dmFyaWFibGUgaXMgYXV0b21hdGljYWxseSBzZXQgZnJvbSB0aGUgZmlsZSB2YXJpYWJsZXMgb2Yg
YW4KQEAgLTYwOTEsMjMgKzc5NDMsMjMgQEAgc3ltc19vZl9scmVhZCAodm9pZCkKICAgRm1ha2Vf
dmFyaWFibGVfYnVmZmVyX2xvY2FsIChRbGV4aWNhbF9iaW5kaW5nKTsKIAogICBERUZWQVJfTElT
UCAoImV2YWwtYnVmZmVyLWxpc3QiLCBWZXZhbF9idWZmZXJfbGlzdCwKLQkgICAgICAgZG9jOiAv
KiBMaXN0IG9mIGJ1ZmZlcnMgYmVpbmcgcmVhZCBmcm9tIGJ5IGNhbGxzIHRvIGBldmFsLWJ1ZmZl
cicgYW5kIGBldmFsLXJlZ2lvbicuICAqLyk7CisgICAgZG9jOiAvKiBMaXN0IG9mIGJ1ZmZlcnMg
YmVpbmcgcmVhZCBmcm9tIGJ5IGNhbGxzIHRvIGBldmFsLWJ1ZmZlcicgYW5kIGBldmFsLXJlZ2lv
bicuICAqLyk7CiAgIFZldmFsX2J1ZmZlcl9saXN0ID0gUW5pbDsKIAogICBERUZWQVJfTElTUCAo
ImxyZWFkLS11bmVzY2FwZWQtY2hhcmFjdGVyLWxpdGVyYWxzIiwKLSAgICAgICAgICAgICAgIFZs
cmVhZF91bmVzY2FwZWRfY2hhcmFjdGVyX2xpdGVyYWxzLAotICAgICAgICAgICAgICAgZG9jOiAv
KiBMaXN0IG9mIGRlcHJlY2F0ZWQgdW5lc2NhcGVkIGNoYXJhY3RlciBsaXRlcmFscyBlbmNvdW50
ZXJlZCBieSBgcmVhZCcuCisJICAgICAgIFZscmVhZF91bmVzY2FwZWRfY2hhcmFjdGVyX2xpdGVy
YWxzLAorICAgZG9jOiAvKiBMaXN0IG9mIGRlcHJlY2F0ZWQgdW5lc2NhcGVkIGNoYXJhY3RlciBs
aXRlcmFscyBlbmNvdW50ZXJlZCBieSBgcmVhZCcuCiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuICAq
Lyk7CiAgIFZscmVhZF91bmVzY2FwZWRfY2hhcmFjdGVyX2xpdGVyYWxzID0gUW5pbDsKICAgREVG
U1lNIChRbHJlYWRfdW5lc2NhcGVkX2NoYXJhY3Rlcl9saXRlcmFscywKLSAgICAgICAgICAibHJl
YWQtLXVuZXNjYXBlZC1jaGFyYWN0ZXItbGl0ZXJhbHMiKTsKKwkgICJscmVhZC0tdW5lc2NhcGVk
LWNoYXJhY3Rlci1saXRlcmFscyIpOwogCiAgIC8qIERlZmluZWQgaW4gbGlzcC9lbWFjcy1saXNw
L2J5dGUtcnVuLmVsLiAgKi8KICAgREVGU1lNIChRYnl0ZV9ydW5fdW5lc2NhcGVkX2NoYXJhY3Rl
cl9saXRlcmFsc193YXJuaW5nLAotICAgICAgICAgICJieXRlLXJ1bi0tdW5lc2NhcGVkLWNoYXJh
Y3Rlci1saXRlcmFscy13YXJuaW5nIik7CisJICAiYnl0ZS1ydW4tLXVuZXNjYXBlZC1jaGFyYWN0
ZXItbGl0ZXJhbHMtd2FybmluZyIpOwogCiAgIERFRlZBUl9CT09MICgibG9hZC1wcmVmZXItbmV3
ZXIiLCBsb2FkX3ByZWZlcl9uZXdlciwKLSAgICAgICAgICAgICAgIGRvYzogLyogTm9uLW5pbCBt
ZWFucyBgbG9hZCcgcHJlZmVycyB0aGUgbmV3ZXN0IHZlcnNpb24gb2YgYSBmaWxlLgorICBkb2M6
IC8qIE5vbi1uaWwgbWVhbnMgYGxvYWQnIHByZWZlcnMgdGhlIG5ld2VzdCB2ZXJzaW9uIG9mIGEg
ZmlsZS4KIFRoaXMgYXBwbGllcyB3aGVuIGEgZmlsZW5hbWUgc3VmZml4IGlzIG5vdCBleHBsaWNp
dGx5IHNwZWNpZmllZCBhbmQKIGBsb2FkJyBpcyB0cnlpbmcgdmFyaW91cyBwb3NzaWJsZSBzdWZm
aXhlcyAoc2VlIGBsb2FkLXN1ZmZpeGVzJyBhbmQKIGBsb2FkLWZpbGUtcmVwLXN1ZmZpeGVzJyku
ICBOb3JtYWxseSwgaXQgc3RvcHMgYXQgdGhlIGZpcnN0IGZpbGUKQEAgLTYxMTksNyArNzk3MSw3
IEBAIHN5bXNfb2ZfbHJlYWQgKHZvaWQpCiAgIGxvYWRfcHJlZmVyX25ld2VyID0gMDsKIAogICBE
RUZWQVJfQk9PTCAoImxvYWQtbm8tbmF0aXZlIiwgbG9hZF9ub19uYXRpdmUsCi0gICAgICAgICAg
ICAgICBkb2M6IC8qIE5vbi1uaWwgbWVhbnMgbm90IHRvIGxvYWQgbmF0aXZlIGNvZGUgdW5sZXNz
IGV4cGxpY2l0bHkgcmVxdWVzdGVkLgorICBkb2M6IC8qIE5vbi1uaWwgbWVhbnMgbm90IHRvIGxv
YWQgbmF0aXZlIGNvZGUgdW5sZXNzIGV4cGxpY2l0bHkgcmVxdWVzdGVkLgogCiBUbyBsb2FkIGEg
YC5lbG4nIGZpbGUgd2hlbiB0aGlzIHZhcmlhYmxlIGlzIG5vbi1uaWwsIHVzZSBgKGxvYWQgRklM
RSknCiB3aGVyZSBGSUxFIGlzIHRoZSBmaWxlbmFtZSBvZiB0aGUgZWxuIGZpbGUsIGluY2x1ZGlu
ZyB0aGUgLmVsbiBleHRlbnNpb24uCkBAIC02MTI3LDMwICs3OTc5LDI4IEBAIHN5bXNfb2ZfbHJl
YWQgKHZvaWQpCiB0aHJvdWdoIGByZXF1aXJlJy4gICovKTsKICAgbG9hZF9ub19uYXRpdmUgPSBm
YWxzZTsKIAotICBERUZWQVJfTElTUCAoImxvYWQtcGF0aC1maWx0ZXItZnVuY3Rpb24iLAotCSAg
ICAgICBWbG9hZF9wYXRoX2ZpbHRlcl9mdW5jdGlvbiwKLQkgICAgICAgZG9jOiAvKiBJZiBub24t
bmlsLCBhIGZ1bmN0aW9uIHRvIGZpbHRlciBgbG9hZC1wYXRoJyBmb3IgYGxvYWQnLgotCi1JZiB0
aGlzIHZhcmlhYmxlIGlzIGEgZnVuY3Rpb24sIGl0IGlzIGNhbGxlZCB3aGVuIGBsb2FkJyBpcyBh
Ym91dCB0bwotc2VhcmNoIGZvciBhIGZpbGUgYWxvbmcgYGxvYWQtcGF0aCcuICBUaGlzIGZ1bmN0
aW9uIGlzIGNhbGxlZCB3aXRoIHRocmVlCi1hcmd1bWVudHM6IHRoZSBjdXJyZW50IHZhbHVlIG9m
IGBsb2FkLXBhdGgnIChhIGxpc3Qgb2YgZGlyZWN0b3JpZXMpLAotdGhlIEZJTEUgYXJndW1lbnQg
dG8gYGxvYWQnLCBhbmQgdGhlIGN1cnJlbnQgbGlzdCBvZiBsb2FkLXN1ZmZpeGVzLgotCi1JdCBz
aG91bGQgcmV0dXJuIGEgKGhvcGVmdWxseSBzaG9ydGVyKSBsaXN0IG9mIGRpcmVjdG9yaWVzLCB3
aGljaCBgbG9hZCcKLXdpbGwgdXNlIGluc3RlYWQgb2YgYGxvYWQtcGF0aCcgdG8gbG9vayBmb3Ig
dGhlIGZpbGUgdG8gbG9hZC4gICovKTsKLSAgVmxvYWRfcGF0aF9maWx0ZXJfZnVuY3Rpb24gPSBR
bmlsOwotCiAgIC8qIFZzb3VyY2VfZGlyZWN0b3J5IHdhcyBpbml0aWFsaXplZCBpbiBpbml0X2xy
ZWFkLiAgKi8KIAogICBERUZTWU0gKFFjdXJyZW50X2xvYWRfbGlzdCwgImN1cnJlbnQtbG9hZC1s
aXN0Iik7CiAgIERFRlNZTSAoUXN0YW5kYXJkX2lucHV0LCAic3RhbmRhcmQtaW5wdXQiKTsKICAg
REVGU1lNIChRcmVhZF9jaGFyLCAicmVhZC1jaGFyIik7CiAgIERFRlNZTSAoUWdldF9maWxlX2No
YXIsICJnZXQtZmlsZS1jaGFyIik7Ci0KKyAgREVGU1lNIChRcmVhZGVyX2lucHV0X3N0cmVhbSwg
InJlYWRlci1pbnB1dC1zdHJlYW0iKTsKKyAgZGVmc3ViciAoJlNyZWFkZXJfaW5wdXRfc3RyZWFt
KTsKICAgLyogVXNlZCBpbnN0ZWFkIG9mIFFnZXRfZmlsZV9jaGFyIHdoaWxlIGxvYWRpbmcgKi5l
bGMgZmlsZXMgY29tcGlsZWQKICAgICAgYnkgRW1hY3MgMjEgb3Igb2xkZXIuICAqLwogICBERUZT
WU0gKFFnZXRfZW1hY3NfbXVsZV9maWxlX2NoYXIsICJnZXQtZW1hY3MtbXVsZS1maWxlLWNoYXIi
KTsKIAorICAvKiBUaGlzIGlzIGFuIGludGVybmFsIHNpZ25hbCBmb3Igc2tpcHBpbmcgaGFuZGxl
cnMgd2hlbiBhbiBpbnRlcnJ1cHQKKyAgICAgcHJvZHVjZXMgYW4gdW5oYW5kbGVkIHNpZ25hbCov
CisgIERFRlNZTSAoUWVycm9yX2R1cmluZ19pbnRlcnJ1cHQsImVycm9yLWR1cmluZy1pbnRlcnJ1
cHQiKTsKKyAgLyogVGhpcyBpcyB1c2VkIGZvciBza2lwcGluZyBmcmFtZXMsIHNvIG5vIG90aGVy
IGhhbmRsZXJzIGFyZSBhbGxvd2VkIHRvIGludGVyY2VwdCovCisgIEZwdXQgKFFlcnJvcl9kdXJp
bmdfaW50ZXJydXB0LCBRZXJyb3JfY29uZGl0aW9ucywKKwlRbmlsKTsKKyAgRnB1dCAoUWVycm9y
X2R1cmluZ19pbnRlcnJ1cHQsIFFlcnJvcl9tZXNzYWdlLAorCWJ1aWxkX3N0cmluZyAoIlVuaGFu
ZGxlZCBlcnJvci1kdXJpbmctaW50ZXJydXB0OiBpbnRlcm5hbCBlcnJvciIpKTsKKworCiAgIERF
RlNZTSAoUWxvYWRfZm9yY2VfZG9jX3N0cmluZ3MsICJsb2FkLWZvcmNlLWRvYy1zdHJpbmdzIik7
CiAKICAgREVGU1lNIChRYmFja3F1b3RlLCAiYCIpOwpAQCAtNjE3NSwxMyArODAyNSw2IEBAIHN5
bXNfb2ZfbHJlYWQgKHZvaWQpCiAgIERFRlNZTSAoUWRpcl9vaywgImRpci1vayIpOwogICBERUZT
WU0gKFFkb19hZnRlcl9sb2FkX2V2YWx1YXRpb24sICJkby1hZnRlci1sb2FkLWV2YWx1YXRpb24i
KTsKIAotICBzdGF0aWNwcm8gKCZyZWFkX29iamVjdHNfbWFwKTsKLSAgcmVhZF9vYmplY3RzX21h
cCA9IFFuaWw7Ci0gIHN0YXRpY3BybyAoJnJlYWRfb2JqZWN0c19jb21wbGV0ZWQpOwotICByZWFk
X29iamVjdHNfY29tcGxldGVkID0gUW5pbDsKLQotICBWbG9hZHNfaW5fcHJvZ3Jlc3MgPSBRbmls
OwotICBzdGF0aWNwcm8gKCZWbG9hZHNfaW5fcHJvZ3Jlc3MpOwogCiAgIERFRlNZTSAoUWhhc2hf
dGFibGUsICJoYXNoLXRhYmxlIik7CiAgIERFRlNZTSAoUWRhdGEsICJkYXRhIik7CkBAIC02MTk4
LDcgKzgwNDEsNyBAQCBzeW1zX29mX2xyZWFkICh2b2lkKQogICBWaW50ZXJuYWxfX2dldF9kZWZh
dWx0X2xleGljYWxfYmluZGluZ19mdW5jdGlvbiA9IFFuaWw7CiAKICAgREVGVkFSX0xJU1AgKCJy
ZWFkLXN5bWJvbC1zaG9ydGhhbmRzIiwgVnJlYWRfc3ltYm9sX3Nob3J0aGFuZHMsCi0gICAgICAg
ICAgZG9jOiAvKiBBbGlzdCBvZiBrbm93biBzeW1ib2wtbmFtZSBzaG9ydGhhbmRzLgorCSAgICAg
ICBkb2M6IC8qIEFsaXN0IG9mIGtub3duIHN5bWJvbC1uYW1lIHNob3J0aGFuZHMuCiBUaGlzIHZh
cmlhYmxlJ3MgdmFsdWUgY2FuIG9ubHkgYmUgc2V0IHZpYSBmaWxlLWxvY2FsIHZhcmlhYmxlcy4K
IFNlZSBJbmZvIG5vZGUgYChlbGlzcClTaG9ydGhhbmRzJyBmb3IgbW9yZSBkZXRhaWxzLiAgKi8p
OwogICBWcmVhZF9zeW1ib2xfc2hvcnRoYW5kcyA9IFFuaWw7CkBAIC02MjA3LDExICs4MDUwLDEy
IEBAIHN5bXNfb2ZfbHJlYWQgKHZvaWQpCiAKICAgREVGU1lNIChRbWFjcm9leHBfX2R5bnZhcnMs
ICJtYWNyb2V4cC0tZHludmFycyIpOwogICBERUZWQVJfTElTUCAoIm1hY3JvZXhwLS1keW52YXJz
IiwgVm1hY3JvZXhwX19keW52YXJzLAotICAgICAgICBkb2M6ICAgLyogTGlzdCBvZiB2YXJpYWJs
ZXMgZGVjbGFyZWQgZHluYW1pYyBpbiB0aGUgY3VycmVudCBzY29wZS4KKwlkb2M6ICAgLyogTGlz
dCBvZiB2YXJpYWJsZXMgZGVjbGFyZWQgZHluYW1pYyBpbiB0aGUgY3VycmVudCBzY29wZS4KIE9u
bHkgdmFsaWQgZHVyaW5nIG1hY3JvLWV4cGFuc2lvbi4gIEludGVybmFsIHVzZSBvbmx5LiAqLyk7
CiAgIFZtYWNyb2V4cF9fZHludmFycyA9IFFuaWw7CiAKICAgREVGU1lNIChRaW50ZXJuYWxfbWFj
cm9leHBhbmRfZm9yX2xvYWQsCiAJICAiaW50ZXJuYWwtbWFjcm9leHBhbmQtZm9yLWxvYWQiKTsK
ICAgREVGU1lNIChRcmVhZF9taW5pYnVmZmVyLCAicmVhZC1taW5pYnVmZmVyIik7CisKIH0KLS0g
CjIuNDkuMAoK
--00000000000025f44f063881bfa1--




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#78898: Make read/readevalloop reentrant
Resent-From: Lynn Winebarger <owinebar@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Fri, 27 Jun 2025 06:46:02 +0000
Resent-Message-ID: <handler.78898.B78898.17510067473941 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 78898
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: 78898 <at> debbugs.gnu.org
Received: via spool by 78898-submit <at> debbugs.gnu.org id=B78898.17510067473941
          (code B ref 78898); Fri, 27 Jun 2025 06:46:02 +0000
Received: (at 78898) by debbugs.gnu.org; 27 Jun 2025 06:45:47 +0000
Received: from localhost ([127.0.0.1]:59596 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uV2qI-00011P-CZ
	for submit <at> debbugs.gnu.org; Fri, 27 Jun 2025 02:45:47 -0400
Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]:38415)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <owinebar@HIDDEN>)
 id 1uV2qD-0000zs-Fl
 for 78898 <at> debbugs.gnu.org; Fri, 27 Jun 2025 02:45:43 -0400
Received: by mail-wr1-x42d.google.com with SMTP id
 ffacd0b85a97d-3a577f164c8so247607f8f.2
 for <78898 <at> debbugs.gnu.org>; Thu, 26 Jun 2025 23:45:41 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1751006735; x=1751611535; darn=debbugs.gnu.org;
 h=to:subject:message-id:date:from:in-reply-to:references:mime-version
 :from:to:cc:subject:date:message-id:reply-to;
 bh=jHaqiFc2La3SBvbbzXiAUE8r6poSGyeFGAq8NQGEE84=;
 b=W6Aw8GSQ7+/Dq5Ad3U8W0C6y6buPojh5DiH3CgDBKkR5atPQk5bTjIpnX5BrywbZri
 6zHJVTaV1Q1UhLt9jiXBSOVxtlg9x8rXDvSDO2gWpodXy6p4GVlWEXfvRbJWM3EwTaQ5
 JbjzFiIUEKD4dJ3BOe7keM6lHAZvh8lzWfSeKfNSslK5uPqbZd8MwJjHdVx6ejOPhmuO
 6DYfMXO+GmFrPQgLMegmoxG4bnKqFG6OpfyTswHGuT8fwNAdwy7/xhviT1GkrBmPrbYw
 YcRqFRcm/6lqBgzWEsnhg843bZDwcPb6eQqIJCiSWqQXdpkP+zFzUc1BDG6cuoT5/kHS
 1hww==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1751006735; x=1751611535;
 h=to:subject:message-id:date:from:in-reply-to:references:mime-version
 :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=jHaqiFc2La3SBvbbzXiAUE8r6poSGyeFGAq8NQGEE84=;
 b=DqyLDCFnS/WWH2//NJeaT6ehtJSq34xryYNAT6jtLHCyVnP7ERsL5rFW7IprTgBBS+
 srtVCjUmaJPAa30hhYFDECBelXo4N+MMEYGHvrGn/nln8/+ba73zKcnFAYSXq3kkjKOE
 d0MRGU8/XQw1opZ9YcEDLwyIVEEL1Ksa73D6EKQCU5Jr4nMs92hTPRW+12N4409KOHkT
 9ttpTyZaPdwL/jWAJDHnRSyl2PJJ3a4E/c8AxLhicQqymnsw4zIYzZXD9TBU6uJa/dTf
 oHMBm76q3i8Ms48FonVB49a5GDG0cF5cn7FdjV9syokN6r5IN0ha1Y+m+QP/kIPzTnt8
 FTOQ==
X-Gm-Message-State: AOJu0YzD+N9eaKQ7KQ3xk7aiR0DsihZTVFoQXV7oBBswBvRlZ9gepQKg
 MdhOZ70XeSH8ascs4e+4wiVsZNoTjz68nzhrl1nCuI7Tp/sx6FXkEhBwo6QCk+a5cQ5Kh2CORsb
 YxyvxPXmkSmPD6x5r96S3dgOJ2bE0mLGYyZSi
X-Gm-Gg: ASbGnctDVUDkeK7trJFT+FgCGo53qmgrj553txY3ZnCw/5LqYJVzd9TJ1bzLLnchyT/
 Hqv2M3E7Ygk6CkhS/FzkyMTEhcaFtwg2qkKtCdwKPiGIOiyueO8jOPHQN/9X1rpSkNeEhnTgIz4
 +zEAw1FM/mJIhdypY8PxlzYTcMOGmdN/vedISPEdhlYLFj545FxiZOVrq7
X-Google-Smtp-Source: AGHT+IEIPbzws18wAVGUz4KgXvvZmVYZThdkKHDAjc9It/Uwv2KkFk6irVUU20Pqj3bUS0ykNw6QxtVw2ohuTntkhPg=
X-Received: by 2002:a05:600c:a107:b0:439:8c80:6aee with SMTP id
 5b1f17b1804b1-4538ee565cfmr5632395e9.4.1751006734543; Thu, 26 Jun 2025
 23:45:34 -0700 (PDT)
MIME-Version: 1.0
References: <CAM=F=bB2qY_xnrGHwbn1s3b_=f+vri0c252jGgTFpDtrN2pfgA@HIDDEN>
 <CAM=F=bD0Y_NWKq8Y1bfG7EkyfeQTUatny6bSjtufjPmZLfkS+A@HIDDEN>
In-Reply-To: <CAM=F=bD0Y_NWKq8Y1bfG7EkyfeQTUatny6bSjtufjPmZLfkS+A@HIDDEN>
From: Lynn Winebarger <owinebar@HIDDEN>
Date: Fri, 27 Jun 2025 02:45:22 -0400
X-Gm-Features: Ac12FXyorLiCAEyMp2DeqwkjKvWipIVqjLZtKoo1zKzSEmG0HSJLBKpm-psxXeY
Message-ID: <CAM=F=bDu1vd1WBJqaH77WwQWogL2Ms6Mgp=7hBkyE_3u+tzbpg@HIDDEN>
Content-Type: multipart/mixed; boundary="000000000000698a450638880647"
X-Spam-Score: 0.0 (/)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://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: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--000000000000698a450638880647
Content-Type: text/plain; charset="UTF-8"

I tried explicitly forcing emacs-internal as the coding-system for
load_source_file, but without any noticeable difference.
The button preceding the warning messages should be a stop sign emoji.
Using the built emacs to view emacs-lisp/warning.el shows the stop
sign emoji clearly, but it is apparently mangled in the generated
byte-code in warning.elc.
I also built a clean emacs from commit
2bdcf0250acecdb0719203ae711aedf5baad1783.  When I compared the source
elisp files (after building) I see differences in these files:
lisp/international/uni-bidi.el
lisp/international/uni-brackets.el
lisp/international/uni-category.el
lisp/international/uni-combining.el
lisp/international/uni-comment.el
lisp/international/uni-decomposition.el
lisp/international/uni-old-name.el
lisp/international/uni-name.el
lisp/leim/leim-list.el
lisp/leim/ja-dic/ja-dic.el
lisp/net/tramp-loaddefs.el
lisp/textmodes/reftex-loaddefs.el
lisp/loaddefs.el
lisp/finder-inf.el
lisp/cus-load.el

In the byte-compiled files, I see differences for:
lisp/emacs-lisp/eieio-opt.elc
lisp/erc/erc-nicks.elc
lisp/erc/erc.elc
lisp/eshell/em-cmpl.elc
lisp/gnus/gnus-group.elc
lisp/gnus/gnus-srvr.elc
lisp/gnus/gnus-topic.elc
lisp/gnus/gnus-sieve.elc
lisp/gnus/gnus-search.elc
lisp/gnus/message.elc
lisp/gnus/nnfeed.elc
lisp/gnus/nnml.elc
lisp/gnus/nnimap.elc
lisp/gnus/nnagent.elc
lisp/gnus/nnmaildir.elc
lisp/gnus/gnus-start.elc
lisp/gnus/gnus-sum.elc
lisp/gnus/nnmairix.elc
lisp/gnus/nnselect.elc
lisp/net/tramp-cache.elc
lisp/net/tramp-cmds.elc
lisp/net/tramp-gvfs.elc
lisp/net/tramp-sh.elc
lisp/obsolete/nnir.elc
lisp/org/org-agenda.elc
lisp/org/org-lint.elc
lisp/org/ox-ascii.elc
lisp/org/ox-odt.elc
lisp/org/org.elc
lisp/progmodes/eglot.elc
lisp/progmodes/cc-engine.elc
lisp/progmodes/cc-mode.elc
lisp/progmodes/js.elc
lisp/use-package/use-package-core.elc
lisp/loaddefs.elc

I'm not clear on why loaddefs.el should be different.  That, and
eieio-opt.elc being different is unexpected.

Lynn

--000000000000698a450638880647
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0002-Try-explicit-use-of-emacs-internal-coding-in-load_so.patch"
Content-Disposition: attachment; 
	filename="0002-Try-explicit-use-of-emacs-internal-coding-in-load_so.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_mceg6r360>
X-Attachment-Id: f_mceg6r360

RnJvbSBkNzAyOTUwOTcyYzE2YzM0ZmIxMmMyZjE4MWRhMjhhZTY5YjkzZTM3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBPbm5pZSBMeW5uIFdpbmViYXJnZXIgPG93aW5lYmFyQGdtYWls
LmNvbT4KRGF0ZTogRnJpLCAyNyBKdW4gMjAyNSAwMjozMjo0MSAtMDQwMApTdWJqZWN0OiBbUEFU
Q0ggMi8yXSBUcnkgZXhwbGljaXQgdXNlIG9mIGVtYWNzLWludGVybmFsIGNvZGluZyBpbgogbG9h
ZF9zb3VyY2VfZmlsZQoKLS0tCiBzcmMvY29kaW5nLmMgfCAzOSArKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysKIHNyYy9scmVhZC5jICB8IDIzICsrKysrKysrKysrKysrKysr
Ky0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDU3IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0p
CgpkaWZmIC0tZ2l0IGEvc3JjL2NvZGluZy5jIGIvc3JjL2NvZGluZy5jCmluZGV4IGY0Y2UxYzRi
NWJkLi40MmQzZTUxMTc1YSAxMDA2NDQKLS0tIGEvc3JjL2NvZGluZy5jCisrKyBiL3NyYy9jb2Rp
bmcuYwpAQCAtMTIwMDEsNiArMTIwMDEsNyBAQCBzeW1zX29mX2NvZGluZyAodm9pZCkKIFRoZXJl
IGFyZSB0aHJlZSBzdWNoIHRhYmxlczogYGZpbGUtY29kaW5nLXN5c3RlbS1hbGlzdCcsCiBgcHJv
Y2Vzcy1jb2Rpbmctc3lzdGVtLWFsaXN0JywgYW5kIGBuZXR3b3JrLWNvZGluZy1zeXN0ZW0tYWxp
c3QnLiAgKi8pOwogICBWY29kaW5nX3N5c3RlbV9mb3JfcmVhZCA9IFFuaWw7CisgIERFRlNZTSAo
UWNvZGluZ19zeXN0ZW1fZm9yX3JlYWQsICJjb2Rpbmctc3lzdGVtLWZvci1yZWFkIik7CiAKICAg
REVGVkFSX0xJU1AgKCJjb2Rpbmctc3lzdGVtLWZvci13cml0ZSIsIFZjb2Rpbmdfc3lzdGVtX2Zv
cl93cml0ZSwKIAkgICAgICAgZG9jOiAvKiBTcGVjaWZ5IHRoZSBjb2Rpbmcgc3lzdGVtIGZvciB3
cml0ZSBvcGVyYXRpb25zLgpAQCAtMTIzMDQsNiArMTIzMDUsMTMgQEAgc3lzdGVtIChlLmcuIGBp
c28tMjAyMi03Yml0JykuCiAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29kaW5nX2NhdGVnb3J5X21h
eDsgaSsrKQogICAgIEZzZXQgKEFSRUYgKFZjb2RpbmdfY2F0ZWdvcnlfdGFibGUsIGkpLCBRbm9f
Y29udmVyc2lvbik7CiAKKyAgLyogVGhlc2UgYXJlIHVzZWQgaW4gbG9jYWwgdmFyaWFibGVzICJj
b2Rpbmc6ICIgaW4gc29tZSBlbWFjcyBzb3VyY2UKKyAgICAgbGlzcCBmaWxlcy4KKyAgICAgV291
bGQgbGlrZSB0byBub3QgcmVxdWlyZSBsb2FkdXAganVzdCB0byBsb2FkICAob3IgYnl0ZS1jb21w
aWxlKQorICAgICBlbWFjcyBzb3VyY2UuCisgICAgIHV0Zi04L3V0Zi04LXVuaXgKKyAgICAgdXRm
LTgtZW1hY3MtdW5peC91dGYtOC1lbWFjcworICAqLwogICBwbGlzdFsxXSA9IGFyZ3NbY29kaW5n
X2FyZ19uYW1lXSA9IFFyYXdfdGV4dDsKICAgcGxpc3RbM10gPSBhcmdzW2NvZGluZ19hcmdfbW5l
bW9uaWNdID0gbWFrZV9maXhudW0gKCd0Jyk7CiAgIHBsaXN0WzVdID0gYXJnc1tjb2RpbmdfYXJn
X2NvZGluZ190eXBlXSA9IFFyYXdfdGV4dDsKQEAgLTEyMzI3LDYgKzEyMzM1LDM3IEBAICNkZWZp
bmUgUkFXX1RFWFRfREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgYXJnc1tjb2RpbmdfYXJnX3BsaXN0XSA9IENBTExNQU5ZIChGbGlzdCwg
cGxpc3QpOwogICBGZGVmaW5lX2NvZGluZ19zeXN0ZW1faW50ZXJuYWwgKGNvZGluZ19hcmdfbWF4
LCBhcmdzKTsKIAorICBtZW1jbGVhciAoYXJncywgc2l6ZW9mIGFyZ3MpOworICBwbGlzdFsxXSA9
IGFyZ3NbY29kaW5nX2FyZ19uYW1lXSA9IFF1dGZfODsKKyAgcGxpc3RbM10gPSBhcmdzW2NvZGlu
Z19hcmdfbW5lbW9uaWNdID0gbWFrZV9maXhudW0gKCdVJyk7CisgIHBsaXN0WzVdID0gYXJnc1tj
b2RpbmdfYXJnX2NvZGluZ190eXBlXSA9IFF1dGZfODsKKyAgcGxpc3RbN10gPSBhcmdzW2NvZGlu
Z19hcmdfYXNjaWlfY29tcGF0aWJsZV9wXSA9IFF0OworICBwbGlzdFs5XSA9IGFyZ3NbY29kaW5n
X2FyZ19jaGFyc2V0X2xpc3RdID0gbGlzdDEgKFF1bmljb2RlKTsKKyAgcGxpc3RbMTBdID0gaW50
ZXJuX2Nfc3RyaW5nICgiOm1pbWUtY2hhcnNldCIpOworICBwbGlzdFsxMV0gPSBRdXRmXzg7Cisg
IHBsaXN0WzEzXSA9IGJ1aWxkX3N0cmluZyAoIlVURi04IChubyBzaWduYXR1cmUgKEJPTSkpIik7
CisgIHBsaXN0WzE1XSA9IGFyZ3NbY29kaW5nX2FyZ19lb2xfdHlwZV0gPSBRbmlsOworICBhcmdz
W2NvZGluZ19hcmdfcGxpc3RdID0gQ0FMTE1BTlkgKEZsaXN0LCBwbGlzdCk7CisgIGFyZ3NbY29k
aW5nX2FyZ191dGY4X2JvbV0gPSBRbmlsOworICBGZGVmaW5lX2NvZGluZ19zeXN0ZW1faW50ZXJu
YWwgKGNvZGluZ19hcmdfdXRmOF9tYXgsIGFyZ3MpOworCisgIG1lbWNsZWFyIChhcmdzLCBzaXpl
b2YgYXJncyk7CisgIHBsaXN0WzFdID0gYXJnc1tjb2RpbmdfYXJnX25hbWVdID0gUXV0Zl84X2Vt
YWNzOworICBwbGlzdFszXSA9IGFyZ3NbY29kaW5nX2FyZ19tbmVtb25pY10gPSBtYWtlX2ZpeG51
bSAoJ1UnKTsKKyAgcGxpc3RbNV0gPSBhcmdzW2NvZGluZ19hcmdfY29kaW5nX3R5cGVdID0gUXV0
Zl84OworICBwbGlzdFs3XSA9IGFyZ3NbY29kaW5nX2FyZ19hc2NpaV9jb21wYXRpYmxlX3BdID0g
UXQ7CisgIHBsaXN0WzldID0gYXJnc1tjb2RpbmdfYXJnX2NoYXJzZXRfbGlzdF0gPSBsaXN0MSAo
UWVtYWNzKTsKKyAgcGxpc3RbMTFdID0gUW5pbDsKKyAgcGxpc3RbMTNdID0gYnVpbGRfc3RyaW5n
ICgiU3VwcG9ydCBmb3IgYWxsIEVtYWNzIGNoYXJhY3RlcnMgKGluY2x1ZGluZyBub24tVW5pY29k
ZSBjaGFyYWN0ZXJzKS4iKTsKKyAgcGxpc3RbMTVdID0gYXJnc1tjb2RpbmdfYXJnX2VvbF90eXBl
XSA9IFFuaWw7CisgIGFyZ3NbY29kaW5nX2FyZ19wbGlzdF0gPSBDQUxMTUFOWSAoRmxpc3QsIHBs
aXN0KTsKKyAgYXJnc1tjb2RpbmdfYXJnX3V0ZjhfYm9tXSA9IFFuaWw7CisgIEZkZWZpbmVfY29k
aW5nX3N5c3RlbV9pbnRlcm5hbCAoY29kaW5nX2FyZ191dGY4X21heCwgYXJncyk7CisKKyAgREVG
U1lNIChRZW1hY3NfaW50ZXJuYWwsICJlbWFjcy1pbnRlcm5hbCIpOworICBERUZTWU0gKFF1dGZf
OF9lbWFjc191bml4LCAidXRmLTgtZW1hY3MtdW5peCIpOworICBGZGVmaW5lX2NvZGluZ19zeXN0
ZW1fYWxpYXMgKFFlbWFjc19pbnRlcm5hbCwgUXV0Zl84X2VtYWNzX3VuaXgpOworCiAgIHBkdW1w
ZXJfZG9fbm93X2FuZF9hZnRlcl9sb2FkIChyZXNldF9jb2RpbmdfYWZ0ZXJfcGR1bXBlcl9sb2Fk
KTsKIAogICBERUZTWU0gKFFVbmtub3duX2Vycm9yLCAiVW5rbm93biBlcnJvciIpOwpkaWZmIC0t
Z2l0IGEvc3JjL2xyZWFkLmMgYi9zcmMvbHJlYWQuYwppbmRleCAwZmJlMTg3YjVhOC4uY2I4NTU5
ZjQ1NWMgMTAwNjQ0Ci0tLSBhL3NyYy9scmVhZC5jCisrKyBiL3NyYy9scmVhZC5jCkBAIC0xODE4
LDYgKzE4MTgsNyBAQCBjbG9zaW5nX3VucmVhZGNoYXIgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpm
cmFtZSkKIEFWT0lECiBpbnZhbGlkX3N5bnRheF9saXNwIChyZWdpc3RlciBscmVhZF9mcmFtZSAq
ZnJhbWUsIExpc3BfT2JqZWN0IHMpCiB7CisgcmV0cnk6CiAgIGlmIChIQVNfQlVGRkVSX1AgKGZy
YW1lLT5pbnR5cGUpKQogICAgIHsKICAgICAgIHB0cmRpZmZfdCBsaW5lLCBjb2x1bW47CkBAIC0x
ODM3LDggKzE4MzgsMTIgQEAgaW52YWxpZF9zeW50YXhfbGlzcCAocmVnaXN0ZXIgbHJlYWRfZnJh
bWUgKmZyYW1lLCBMaXNwX09iamVjdCBzKQogCSAgICAgICBsaXN0MyAocywgbWFrZV9maXhudW0g
KGxpbmUpLCBtYWtlX2ZpeG51bSAoY29sdW1uKSkpOwogICAgIH0KICAgZWxzZSBpZiAoZnJhbWUt
PmludHlwZSA9PSBMUkVBRF9JTlBVVF9JTkRJUkVDVAotICAgICAgJiYgZnJhbWUtPmlucHV0LmZy
YW1lLnNvdXJjZSkKLSAgICBpbnZhbGlkX3N5bnRheF9saXNwIChmcmFtZS0+aW5wdXQuZnJhbWUu
c291cmNlLHMpOworICAgICAgJiYgZnJhbWUtPmlucHV0LmZyYW1lLnNvdXJjZSAmJiBmcmFtZSAh
PSBmcmFtZS0+aW5wdXQuZnJhbWUuc291cmNlKQorICAgIHsKKyAgICAgIC8qIFNodXQgdXAgaW5m
aW5pdGUgcmVjdXJzaW9uIHdhcm5pbmcgKi8KKyAgICAgIGZyYW1lID0gZnJhbWUtPmlucHV0LmZy
YW1lLnNvdXJjZTsKKyAgICAgIGdvdG8gcmV0cnk7CisgICAgfQogICBlbHNlCiAgICAgeHNpZ25h
bDEgKFFpbnZhbGlkX3JlYWRfc3ludGF4LCBzKTsKIH0KQEAgLTI1MzQsNyArMjUzOSw2IEBAIGxv
YWRfc291cmNlX2ZpbGUgKExpc3BfT2JqZWN0IGZ1bGxuYW1lLCBMaXNwX09iamVjdCBmaWxlLAog
ICAgID0gRmdlbmVyYXRlX25ld19idWZmZXJfbmFtZSAoYnVpbGRfc3RyaW5nICgiICpsb2FkKiIp
LCBRbmlsKTsKICAgTGlzcF9PYmplY3QgYnVmZmVyID0gRmdldF9idWZmZXJfY3JlYXRlIChidWZm
ZXJfbmFtZSwgUW5pbCk7CiAgIHNwZWNwZGxfcmVmIGNvdW50ID0gU1BFQ1BETF9JTkRFWCAoKTsK
LSAgLyogdGhpcyBpcyBvbmx5IGNhbGxlZCBmb3Igc291cmNlIGZpbGVzICovCiAgIC8qIGxvYWQt
d2l0aC1jb2RlLWNvbnZlcnNpb24gYmluZHMgbG9hZC1pbi1wcm9ncmVzcyBpbiBhbiBvdXRlcgog
ICAgICBzY29wZSwgd2hlcmUgRmxvYWQgYmluZHMgaXQgd2l0aCBsb2FkLWZpbGUtbmFtZSwgZXRj
LCBiZWxvdyAqLwogICBzcGVjYmluZCAoUWxvYWRfaW5fcHJvZ3Jlc3MsIFF0KTsKQEAgLTI1NTMs
OCArMjU1NywxMSBAQCBsb2FkX3NvdXJjZV9maWxlIChMaXNwX09iamVjdCBmdWxsbmFtZSwgTGlz
cF9PYmplY3QgZmlsZSwKICAgICBzcGVjYmluZCAoUWxvYWRfZmlsZV9uYW1lLCBmaWxlKTsKICAg
ICBzcGVjYmluZCAoUWxvYWRfdHJ1ZV9maWxlX25hbWUsIGZ1bGxuYW1lKTsKICAgICBzcGVjYmlu
ZCAoUWluaGliaXRfZmlsZV9uYW1lX29wZXJhdGlvbiwgUW5pbCk7Ci0gICAgLyogSWYgYXV0by1j
b2Rpbmcgd2FzIGltcGxlbWVudGVkLCBsb2FkIHdvdWxkIGhhdmUgY2FsbGVkCi0gICAgICAgbG9h
ZC13aXRoLWNvZGUtY29udmVyc2lvbiBpbnN0ZWFkIG9mIHRoaXMsIHNvIGRvbid0IGJvdGhlciAq
LworICAgIC8qIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZm9yIHNvdXJjZSBmaWxlcyBp
biBhIGJhcmUgdGVtYWNzICovCisgICAgLyogU291cmNlIGZpbGVzIGluIHRoZSBlbWFjcyBkaXN0
cmlidXRpb24gYXJlIHJlcXVpcmVkIHRvIGJlCisgICAgICAgaW4gYSBjb2RpbmcgY29tcGF0aWJs
ZSB3aXRoIGVtYWNzLWludGVybmFsLCBzbyBhc3N1bWUgdGhhdCBzaW5jZQorICAgICAgIGF1dG8t
Y29kaW5nIGlzIG5vdCBhdmFpbGFibGUgaWYgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQu
ICovCisgICAgc3BlY2JpbmQgKFFjb2Rpbmdfc3lzdGVtX2Zvcl9yZWFkLCBRZW1hY3NfaW50ZXJu
YWwpOwogICAgIHJlY29yZF91bndpbmRfY3VycmVudF9idWZmZXIgKCk7CiAgICAgRnNldF9idWZm
ZXIgKGJ1ZmZlcik7CiAgICAgRnNldF9idWZmZXJfbXVsdGlieXRlIChRdCk7CkBAIC0yNTYzLDYg
KzI1NzAsMTIgQEAgbG9hZF9zb3VyY2VfZmlsZSAoTGlzcF9PYmplY3QgZnVsbG5hbWUsIExpc3Bf
T2JqZWN0IGZpbGUsCiAgICAgICBzcGVjYmluZCAoUWRlYWN0aXZhdGVfbWFyaywgUW5pbCk7CiAg
ICAgICB1bmJpbmRfdG8gKGNvdW50MiwKIAkJIEZpbnNlcnRfZmlsZV9jb250ZW50cyAoZnVsbG5h
bWUsIFFuaWwsIFFuaWwsIFFuaWwsIFFuaWwpKTsKKyAgICAgIExpc3BfT2JqZWN0IG11bHRpYnl0
ZQorCT0gQlZBUiAoY3VycmVudF9idWZmZXIsIGVuYWJsZV9tdWx0aWJ5dGVfY2hhcmFjdGVycyk7
CisgICAgICBwdHJkaWZmX3QgaWQgPSBDT0RJTkdfU1lTVEVNX0lEIChWbGFzdF9jb2Rpbmdfc3lz
dGVtX3VzZWQpOworICAgICAgTGlzcF9PYmplY3QgdXNlZCA9IENPRElOR19BVFRSX1RZUEUgKENP
RElOR19JRF9BVFRSUyAoaWQpKTsKKyAgICAgIGlmICghKE5JTFAgKG11bHRpYnl0ZSkpICYmIChF
USAodXNlZCwgUXJhd190ZXh0KSkpCisJRnNldF9idWZmZXJfbXVsdGlieXRlIChRbmlsKTsKICAg
ICB9CiAgICAgLyogZG9uJ3Qgd29ycnkgYWJvdXQgc2hvcnRoYW5kcyBpbiB0ZW1hY3Mgc2FucyBs
b2FkdXAqLwogICAgIC8qIENBVkVBVCBFTVBUT1I6IHJlcXVpcmUgZW1hY3MgbGlzcCBzb3VyY2Ug
ZmlsZXMgcmVhZCBieSB0ZW1hY3Mgc2FucwotLSAKMi40OS4wCgo=
--000000000000698a450638880647--





Last modified: Fri, 27 Jun 2025 07:00:03 UTC

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