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--
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
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--
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--
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.