Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mhQVY-0008SF-Sy for pgsql-hackers@arkaria.postgresql.org; Mon, 01 Nov 2021 06:09:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mhQVX-0007Un-Pt for pgsql-hackers@arkaria.postgresql.org; Mon, 01 Nov 2021 06:09:23 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mhQVX-0007Ue-4j for pgsql-hackers@lists.postgresql.org; Mon, 01 Nov 2021 06:09:23 +0000 Received: from out2-smtp.messagingengine.com ([66.111.4.26]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mhQVS-0008DL-Nb for pgsql-hackers@postgresql.org; Mon, 01 Nov 2021 06:09:22 +0000 Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id D52905C0110 for ; Mon, 1 Nov 2021 02:09:17 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute1.internal (MEProxy); Mon, 01 Nov 2021 02:09:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; bh=ElIxrm YyWT17TS+di08lR4gv3lHgVbPEKEUKvdGFLi0=; b=gxVJ/6+Kwzu3WBzSjgW0hE ubRq3/kHMlxvY7sjqdAF4HUwVvGD1+gLZUUvp3T/JiI5tbIbhR9AFoGISUqKp4Nx 6SdgMSOwKvlQ9SnKKlDEXGPsZfSGw7NugjiULif7xiECyc9hlA6ZeQZR5sGm1sD8 qZHcuLl7zSvh4D8w+2VWepaW7lcOxZlvTrEzAxn+z8ILdyzN0hYiQCk/TSMVC1Us wDQAsm783c2R0KUXGTm9JueB0vR/wllukjiLTQCpgbN0EYPtyixREtHOuvGhlaVs WiW1gfCkiP+idJJITthsljGafHgA4GS3UZkmN/RYF8A9rDNQvXI6KUXhkFhKfCIQ == X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvtddrvdehuddgkeelucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefuhfhfvffkffgfgggjtgesmhdtre ertdefjeenucfhrhhomheprfgvthgvrhcugfhishgvnhhtrhgruhhtuceophgvthgvrhdr vghishgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomheqnecuggftrfgrth htvghrnhepffdvvdefiedutdethfehjeefheffieejuddvvdelheejhfekkeejueehueei heejnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepph gvthgvrhdrvghishgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomh X-ME-Proxy: Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Mon, 1 Nov 2021 02:09:16 -0400 (EDT) Subject: Re: Non-decimal integer literals From: Peter Eisentraut References: <3260805.1631106874@sss.pgh.pa.us> <8f2cdc30-350a-9782-8d95-6865a4ccb857@postgresfriends.org> <31bba70a-f5a8-9276-37a6-fa6f2c4eee6c@enterprisedb.com> To: pgsql-hackers Message-ID: <0d895aa8-d1de-3637-9ad4-de0269918e77@enterprisedb.com> Date: Mon, 1 Nov 2021 07:09:15 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: <31bba70a-f5a8-9276-37a6-fa6f2c4eee6c@enterprisedb.com> Content-Type: multipart/mixed; boundary="------------DD3923D86C500424D617D1A2" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------DD3923D86C500424D617D1A2 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit On 28.09.21 17:30, Peter Eisentraut wrote: > On 09.09.21 16:08, Vik Fearing wrote: >>> Even without that point, this patch *is* going to break valid queries, >>> because every one of those cases is a valid >>> number-followed-by-identifier >>> today, >> >> Ah, true that.  So if this does go in, we may as well add the >> underscores at the same time. > > Yeah, looks like I'll need to look into the identifier lexing issues > previously discussed.  I'll attack that during the next commit fest. Here is an updated patch for this. It's the previous patch polished a bit more, and it contains changes so that numeric literals reject trailing identifier parts without whitespace in between, as discussed. Maybe I should split that into incremental patches, but for now I only have the one. I don't have a patch for the underscores in numeric literals yet. It's in progress, but not ready. --------------DD3923D86C500424D617D1A2 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="v4-0001-Non-decimal-integer-literals.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v4-0001-Non-decimal-integer-literals.patch" RnJvbSA2ZTA4MWM0NGMwNDIwMWVlOWRlZDlkYzZiNjg5ODI0Y2NhYmRmYzI4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogU3VuLCAzMSBPY3QgMjAyMSAxNTo0MjoxOCArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggdjRdIE5vbi1kZWNpbWFsIGludGVnZXIgbGl0ZXJhbHMKCkFkZCBzdXBwb3J0 IGZvciBoZXhhZGVjaW1hbCwgb2N0YWwsIGFuZCBiaW5hcnkgaW50ZWdlciBsaXRlcmFsczoK CiAgICAweDQyRgogICAgMG8yNzMKICAgIDBiMTAwMTAxCgpwZXIgU1FMOjIwMnggZHJhZnQu CgpUaGlzIGFkZHMgc3VwcG9ydCBpbiB0aGUgbGV4ZXIgYXMgd2VsbCBhcyBpbiB0aGUgaW50 ZWdlciB0eXBlIGlucHV0CmZ1bmN0aW9ucy4KCkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBv c3RncmVzcWwub3JnL21lc3NhZ2UtaWQvZmxhdC9iMjM5NTY0Yy1jYWQwLWIyM2UtYzU3ZS0x NjZkODgzY2I5N2RAZW50ZXJwcmlzZWRiLmNvbQotLS0KIGRvYy9zcmMvc2dtbC9zeW50YXgu c2dtbCAgICAgICAgICAgICAgICAgICB8ICAyNiArKysrKysKIHNyYy9iYWNrZW5kL2NhdGFs b2cvaW5mb3JtYXRpb25fc2NoZW1hLnNxbCB8ICAgNiArLQogc3JjL2JhY2tlbmQvY2F0YWxv Zy9zcWxfZmVhdHVyZXMudHh0ICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3BhcnNlci9z Y2FuLmwgICAgICAgICAgICAgICAgICB8IDEwMyArKysrKysrKysrKysrKysrLS0tLS0KIHNy Yy9iYWNrZW5kL3V0aWxzL2FkdC9pbnQ4LmMgICAgICAgICAgICAgICB8ICA1NCArKysrKysr KysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L251bXV0aWxzLmMgICAgICAgICAgIHwgIDk3 ICsrKysrKysrKysrKysrKysrKysKIHNyYy9mZV91dGlscy9wc3Fsc2Nhbi5sICAgICAgICAg ICAgICAgICAgICB8ICA4MSArKysrKysrKysrKystLS0tCiBzcmMvaW50ZXJmYWNlcy9lY3Bn L3ByZXByb2MvcGdjLmwgICAgICAgICAgfCAgOTUgKysrKysrKysrKystLS0tLS0tLQogc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbnQyLm91dCAgICAgICAgIHwgIDE5ICsrKysKIHNy Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW50NC5vdXQgICAgICAgICB8ICA3NSArKysrKysr KysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW50OC5vdXQgICAgICAgICB8 ICAxOSArKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9pbnQyLnNxbCAgICAgICAgICAgICAg fCAgIDcgKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ludDQuc3FsICAgICAgICAgICAgICB8 ICAyNiArKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ludDguc3FsICAgICAgICAgICAg ICB8ICAgNyArKwogMTQgZmlsZXMgY2hhbmdlZCwgNTMxIGluc2VydGlvbnMoKyksIDg1IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9zeW50YXguc2dtbCBiL2Rv Yy9zcmMvc2dtbC9zeW50YXguc2dtbAppbmRleCBkNjY1NjBiNTg3Li5hNGYwNDE5OWM2IDEw MDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvc3ludGF4LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L3N5bnRheC5zZ21sCkBAIC02OTQsNiArNjk0LDMyIEBAIDx0aXRsZT5OdW1lcmljIENvbnN0 YW50czwvdGl0bGU+CiA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgPC9wYXJhPgogCisgICAgPHBh cmE+CisgICAgIEFkZGl0aW9uYWxseSwgbm9uLWRlY2ltYWwgaW50ZWdlciBjb25zdGFudHMg Y2FuIGJlIHVzZWQgaW4gdGhlc2UgZm9ybXM6Cis8c3lub3BzaXM+CisweDxyZXBsYWNlYWJs ZT5oZXhkaWdpdHM8L3JlcGxhY2VhYmxlPgorMG88cmVwbGFjZWFibGU+b2N0ZGlnaXRzPC9y ZXBsYWNlYWJsZT4KKzBiPHJlcGxhY2VhYmxlPmJpbmRpZ2l0czwvcmVwbGFjZWFibGU+Cis8 L3N5bm9wc2lzPgorICAgICA8cmVwbGFjZWFibGU+aGV4ZGlnaXRzPC9yZXBsYWNlYWJsZT4g aXMgb25lIG9yIG1vcmUgaGV4YWRlY2ltYWwgZGlnaXRzCisgICAgICgwLTksIEEtRiksIDxy ZXBsYWNlYWJsZT5vY3RkaWdpdHM8L3JlcGxhY2VhYmxlPiBpcyBvbmUgb3IgbW9yZSBvY3Rh bAorICAgICBkaWdpdHMgKDAtNyksIDxyZXBsYWNlYWJsZT5iaW5kaWdpdHM8L3JlcGxhY2Vh YmxlPiBpcyBvbmUgb3IgbW9yZSBiaW5hcnkKKyAgICAgZGlnaXRzICgwIG9yIDEpLiAgSGV4 YWRlY2ltYWwgZGlnaXRzIGFuZCB0aGUgcmFkaXggcHJlZml4ZXMgY2FuIGJlIGluCisgICAg IHVwcGVyIG9yIGxvd2VyIGNhc2UuICBOb3RlIHRoYXQgb25seSBpbnRlZ2VycyBjYW4gaGF2 ZSBub24tZGVjaW1hbCBmb3JtcywKKyAgICAgbm90IG51bWJlcnMgd2l0aCBmcmFjdGlvbmFs IHBhcnRzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICBUaGVzZSBhcmUgc29t ZSBleGFtcGxlcyBvZiB0aGlzOgorPGxpdGVyYWxsYXlvdXQ+MGIxMDAxMDEKKzBCMTAwMTEw MDEKKzBvMjczCiswTzc1NQorMHg0MmYKKzBYRkZGRgorPC9saXRlcmFsbGF5b3V0PgorICAg IDwvcGFyYT4KKwogICAgIDxwYXJhPgogICAgICA8aW5kZXh0ZXJtPjxwcmltYXJ5PmludGVn ZXI8L3ByaW1hcnk+PC9pbmRleHRlcm0+CiAgICAgIDxpbmRleHRlcm0+PHByaW1hcnk+Ymln aW50PC9wcmltYXJ5PjwvaW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy9pbmZvcm1hdGlvbl9zY2hlbWEuc3FsIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmZv cm1hdGlvbl9zY2hlbWEuc3FsCmluZGV4IDExZDlkZDYwYzIuLmNlODhjNDgzYTIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5mb3JtYXRpb25fc2NoZW1hLnNxbAorKysg Yi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZm9ybWF0aW9uX3NjaGVtYS5zcWwKQEAgLTExOSw3 ICsxMTksNyBAQCBDUkVBVEUgRlVOQ1RJT04gX3BnX251bWVyaWNfcHJlY2lzaW9uKHR5cGlk IG9pZCwgdHlwbW9kIGludDQpIFJFVFVSTlMgaW50ZWdlcgogICAgICAgICAgV0hFTiAxNzAw IC8qbnVtZXJpYyovIFRIRU4KICAgICAgICAgICAgICAgQ0FTRSBXSEVOICQyID0gLTEKICAg ICAgICAgICAgICAgICAgICBUSEVOIG51bGwKLSAgICAgICAgICAgICAgICAgICBFTFNFICgo JDIgLSA0KSA+PiAxNikgJiA2NTUzNQorICAgICAgICAgICAgICAgICAgIEVMU0UgKCgkMiAt IDQpID4+IDE2KSAmIDB4RkZGRgogICAgICAgICAgICAgICAgICAgIEVORAogICAgICAgICAg V0hFTiA3MDAgLypmbG9hdDQqLyBUSEVOIDI0IC8qRkxUX01BTlRfRElHKi8KICAgICAgICAg IFdIRU4gNzAxIC8qZmxvYXQ4Ki8gVEhFTiA1MyAvKkRCTF9NQU5UX0RJRyovCkBAIC0xNDcs NyArMTQ3LDcgQEAgQ1JFQVRFIEZVTkNUSU9OIF9wZ19udW1lcmljX3NjYWxlKHR5cGlkIG9p ZCwgdHlwbW9kIGludDQpIFJFVFVSTlMgaW50ZWdlcgogICAgICAgIFdIRU4gJDEgSU4gKDE3 MDApIFRIRU4KICAgICAgICAgICAgIENBU0UgV0hFTiAkMiA9IC0xCiAgICAgICAgICAgICAg ICAgIFRIRU4gbnVsbAotICAgICAgICAgICAgICAgICBFTFNFICgkMiAtIDQpICYgNjU1MzUK KyAgICAgICAgICAgICAgICAgRUxTRSAoJDIgLSA0KSAmIDB4RkZGRgogICAgICAgICAgICAg ICAgICBFTkQKICAgICAgICBFTFNFIG51bGwKICAgRU5EOwpAQCAtMTYzLDcgKzE2Myw3IEBA IENSRUFURSBGVU5DVElPTiBfcGdfZGF0ZXRpbWVfcHJlY2lzaW9uKHR5cGlkIG9pZCwgdHlw bW9kIGludDQpIFJFVFVSTlMgaW50ZWdlcgogICAgICAgIFdIRU4gJDEgSU4gKDEwODMsIDEx MTQsIDExODQsIDEyNjYpIC8qIHRpbWUsIHRpbWVzdGFtcCwgc2FtZSArIHR6ICovCiAgICAg ICAgICAgIFRIRU4gQ0FTRSBXSEVOICQyIDwgMCBUSEVOIDYgRUxTRSAkMiBFTkQKICAgICAg ICBXSEVOICQxIElOICgxMTg2KSAvKiBpbnRlcnZhbCAqLwotICAgICAgICAgICBUSEVOIENB U0UgV0hFTiAkMiA8IDAgT1IgJDIgJiA2NTUzNSA9IDY1NTM1IFRIRU4gNiBFTFNFICQyICYg NjU1MzUgRU5ECisgICAgICAgICAgIFRIRU4gQ0FTRSBXSEVOICQyIDwgMCBPUiAkMiAmIDB4 RkZGRiA9IDB4RkZGRiBUSEVOIDYgRUxTRSAkMiAmIDB4RkZGRiBFTkQKICAgICAgICBFTFNF IG51bGwKICAgRU5EOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9m ZWF0dXJlcy50eHQgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQKaW5k ZXggOWY0MjQyMTZlMi4uZDYzNTk1MDNmMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy9zcWxfZmVhdHVyZXMudHh0CisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2Zl YXR1cmVzLnR4dApAQCAtNTI2LDYgKzUyNiw3IEBAIFQ2NTIJU1FMLWR5bmFtaWMgc3RhdGVt ZW50cyBpbiBTUUwgcm91dGluZXMJCQlOTwogVDY1MwlTUUwtc2NoZW1hIHN0YXRlbWVudHMg aW4gZXh0ZXJuYWwgcm91dGluZXMJCQlZRVMJCiBUNjU0CVNRTC1keW5hbWljIHN0YXRlbWVu dHMgaW4gZXh0ZXJuYWwgcm91dGluZXMJCQlOTwkKIFQ2NTUJQ3ljbGljYWxseSBkZXBlbmRl bnQgcm91dGluZXMJCQlZRVMJCitUNjYxCU5vbi1kZWNpbWFsIGludGVnZXIgbGl0ZXJhbHMJ CQlZRVMJU1FMOjIwMnggZHJhZnQKIFQ4MTEJQmFzaWMgU1FML0pTT04gY29uc3RydWN0b3Ig ZnVuY3Rpb25zCQkJTk8JCiBUODEyCVNRTC9KU09OOiBKU09OX09CSkVDVEFHRwkJCU5PCQog VDgxMwlTUUwvSlNPTjogSlNPTl9BUlJBWUFHRyB3aXRoIE9SREVSIEJZCQkJTk8JCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvc2Nhbi5sIGIvc3JjL2JhY2tlbmQvcGFyc2Vy L3NjYW4ubAppbmRleCA2ZTY4MjRmYWViLi5mZTVkZGJlMmFhIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9wYXJzZXIvc2Nhbi5sCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9zY2FuLmwK QEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgdm9pZCBhZGRsaXQoY2hhciAqeXRleHQsIGlu dCB5bGVuZywgY29yZV95eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIHZvaWQgYWRkbGl0 Y2hhcih1bnNpZ25lZCBjaGFyIHljaGFyLCBjb3JlX3l5c2Nhbl90IHl5c2Nhbm5lcik7CiBz dGF0aWMgY2hhciAqbGl0YnVmZHVwKGNvcmVfeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRp YyB1bnNpZ25lZCBjaGFyIHVuZXNjYXBlX3NpbmdsZV9jaGFyKHVuc2lnbmVkIGNoYXIgYywg Y29yZV95eXNjYW5fdCB5eXNjYW5uZXIpOwotc3RhdGljIGludAlwcm9jZXNzX2ludGVnZXJf bGl0ZXJhbChjb25zdCBjaGFyICp0b2tlbiwgWVlTVFlQRSAqbHZhbCk7CitzdGF0aWMgaW50 CXByb2Nlc3NfaW50ZWdlcl9saXRlcmFsKGNvbnN0IGNoYXIgKnRva2VuLCBZWVNUWVBFICps dmFsLCBpbnQgYmFzZSk7CiBzdGF0aWMgdm9pZCBhZGR1bmljb2RlKHBnX3djaGFyIGMsIHl5 c2Nhbl90IHl5c2Nhbm5lcik7CiAKICNkZWZpbmUgeXllcnJvcihtc2cpICBzY2FubmVyX3l5 ZXJyb3IobXNnLCB5eXNjYW5uZXIpCkBAIC0yNjIsNyArMjYyLDcgQEAgcXVvdGVjb250aW51 ZWZhaWwJe3doaXRlc3BhY2V9KiItIj8KIHhic3RhcnQJCQlbYkJde3F1b3RlfQogeGJpbnNp ZGUJCVteJ10qCiAKLS8qIEhleGFkZWNpbWFsIG51bWJlciAqLworLyogSGV4YWRlY2ltYWwg Ynl0ZSBzdHJpbmcgKi8KIHhoc3RhcnQJCQlbeFhde3F1b3RlfQogeGhpbnNpZGUJCVteJ10q CiAKQEAgLTM0MSw3ICszNDEsNyBAQCB4Y3N0YXJ0CQkJXC9cKntvcF9jaGFyc30qCiB4Y3N0 b3AJCQlcKitcLwogeGNpbnNpZGUJCVteKi9dKwogCi1kaWdpdAkJCVswLTldCisKIGlkZW50 X3N0YXJ0CQlbQS1aYS16XDIwMC1cMzc3X10KIGlkZW50X2NvbnQJCVtBLVphLXpcMjAwLVwz NzdfMC05XCRdCiAKQEAgLTM4MCwyNCArMzgwLDQ0IEBAIHNlbGYJCQlbLCgpXFtcXS47XDpc K1wtXCpcL1wlXF5cPFw+XD1dCiBvcF9jaGFycwkJW1x+XCFcQFwjXF5cJlx8XGBcP1wrXC1c KlwvXCVcPFw+XD1dCiBvcGVyYXRvcgkJe29wX2NoYXJzfSsKIAotLyogd2Ugbm8gbG9uZ2Vy IGFsbG93IHVuYXJ5IG1pbnVzIGluIG51bWJlcnMuCi0gKiBpbnN0ZWFkIHdlIHBhc3MgaXQg c2VwYXJhdGVseSB0byBwYXJzZXIuIHRoZXJlIGl0IGdldHMKLSAqIGNvZXJjZWQgdmlhIGRv TmVnYXRlKCkgLS0gTGVvbiBhdWcgMjAgMTk5OQorLyoKKyAqIE51bWJlcnMKKyAqCisgKiBV bmFyeSBtaW51cyBpcyBub3QgcGFydCBvZiBhIG51bWJlciBoZXJlLiAgSW5zdGVhZCB3ZSBw YXNzIGl0IHNlcGFyYXRlbHkgdG8KKyAqIHBhcnNlciwgYW5kIHRoZXJlIGl0IGdldHMgY29l cmNlZCB2aWEgZG9OZWdhdGUoKS4KICAqCi0gKiB7ZGVjaW1hbGZhaWx9IGlzIHVzZWQgYmVj YXVzZSB3ZSB3b3VsZCBsaWtlICIxLi4xMCIgdG8gbGV4IGFzIDEsIGRvdF9kb3QsIDEwLgor ICoge251bWVyaWNmYWlsfSBpcyB1c2VkIGJlY2F1c2Ugd2Ugd291bGQgbGlrZSAiMS4uMTAi IHRvIGxleCBhcyAxLCBkb3RfZG90LCAxMC4KICAqCiAgKiB7cmVhbGZhaWwxfSBhbmQge3Jl YWxmYWlsMn0gYXJlIGFkZGVkIHRvIHByZXZlbnQgdGhlIG5lZWQgZm9yIHNjYW5uZXIKICAq IGJhY2t1cCB3aGVuIHRoZSB7cmVhbH0gcnVsZSBmYWlscyB0byBtYXRjaCBjb21wbGV0ZWx5 LgogICovCitkZWNkaWdpdAkJWzAtOV0KK2hleGRpZ2l0CQlbMC05QS1GYS1mXQorb2N0ZGln aXQJCVswLTddCitiaW5kaWdpdAkJWzAtMV0KKworZGVjaW50ZWdlcgkJe2RlY2RpZ2l0fSsK K2hleGludGVnZXIJCTBbeFhde2hleGRpZ2l0fSsKK29jdGludGVnZXIJCTBbb09de29jdGRp Z2l0fSsKK2JpbmludGVnZXIJCTBbYkJde2JpbmRpZ2l0fSsKKworaGV4ZmFpbDAJCTBbeFhd CitvY3RmYWlsMAkJMFtvT10KK2JpbmZhaWwwCQkwW2JCXQogCi1pbnRlZ2VyCQkJe2RpZ2l0 fSsKLWRlY2ltYWwJCQkoKHtkaWdpdH0qXC57ZGlnaXR9Kyl8KHtkaWdpdH0rXC57ZGlnaXR9 KikpCi1kZWNpbWFsZmFpbAkJe2RpZ2l0fStcLlwuCi1yZWFsCQkJKHtpbnRlZ2VyfXx7ZGVj aW1hbH0pW0VlXVstK10/e2RpZ2l0fSsKLXJlYWxmYWlsMQkJKHtpbnRlZ2VyfXx7ZGVjaW1h bH0pW0VlXQotcmVhbGZhaWwyCQkoe2ludGVnZXJ9fHtkZWNpbWFsfSlbRWVdWy0rXQorZGVj ZmFpbCAgICAgICAgIHtkZWNpbnRlZ2VyfXtpZGVudF9zdGFydH0KK2hleGZhaWwJCQl7aGV4 aW50ZWdlcn17aWRlbnRfc3RhcnR9CitvY3RmYWlsCQkJe29jdGludGVnZXJ9e2lkZW50X3N0 YXJ0fQorYmluZmFpbAkJCXtiaW5pbnRlZ2VyfXtpZGVudF9zdGFydH0KIAotcGFyYW0JCQlc JHtpbnRlZ2VyfQorbnVtZXJpYwkJCSgoe2RlY2ludGVnZXJ9XC57ZGVjaW50ZWdlcn0/KXwo XC57ZGVjaW50ZWdlcn0pKQorbnVtZXJpY2ZhaWwJCXtkZWNkaWdpdH0rXC5cLgorCityZWFs CQkJKHtkZWNpbnRlZ2VyfXx7bnVtZXJpY30pW0VlXVstK10/e2RlY2RpZ2l0fSsKK3JlYWxm YWlsMQkJKHtkZWNpbnRlZ2VyfXx7bnVtZXJpY30pW0VlXQorcmVhbGZhaWwyCQkoe2RlY2lu dGVnZXJ9fHtudW1lcmljfSlbRWVdWy0rXQorCitwYXJhbQkJCVwke2RlY2ludGVnZXJ9CiAK IG90aGVyCQkJLgogCkBAIC05NzMsMjAgKzk5Myw1MyBAQCBvdGhlcgkJCS4KIAkJCQkJcmV0 dXJuIFBBUkFNOwogCQkJCX0KIAote2ludGVnZXJ9CQl7Cit7ZGVjaW50ZWdlcn0JeworCQkJ CQlTRVRfWVlMTE9DKCk7CisJCQkJCXJldHVybiBwcm9jZXNzX2ludGVnZXJfbGl0ZXJhbCh5 eXRleHQsIHl5bHZhbCwgMTApOworCQkJCX0KK3toZXhpbnRlZ2VyfQl7CisJCQkJCVNFVF9Z WUxMT0MoKTsKKwkJCQkJcmV0dXJuIHByb2Nlc3NfaW50ZWdlcl9saXRlcmFsKHl5dGV4dCAr IDIsIHl5bHZhbCwgMTYpOworCQkJCX0KK3tvY3RpbnRlZ2VyfQl7CisJCQkJCVNFVF9ZWUxM T0MoKTsKKwkJCQkJcmV0dXJuIHByb2Nlc3NfaW50ZWdlcl9saXRlcmFsKHl5dGV4dCArIDIs IHl5bHZhbCwgOCk7CisJCQkJfQore2JpbmludGVnZXJ9CXsKIAkJCQkJU0VUX1lZTExPQygp OwotCQkJCQlyZXR1cm4gcHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoeXl0ZXh0LCB5eWx2YWwp OworCQkJCQlyZXR1cm4gcHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoeXl0ZXh0ICsgMiwgeXls dmFsLCAyKTsKKwkJCQl9Cit7aGV4ZmFpbDB9CQl7CisJCQkJCXl5ZXJyb3IoImludmFsaWQg aGV4YWRlY2ltYWwgaW50ZWdlciIpOworCQkJCX0KK3tvY3RmYWlsMH0JCXsKKwkJCQkJeXll cnJvcigiaW52YWxpZCBvY3RhbCBpbnRlZ2VyIik7CisJCQkJfQore2JpbmZhaWwwfQkJewor CQkJCQl5eWVycm9yKCJpbnZhbGlkIGJpbmFyeSBpbnRlZ2VyIik7CisJCQkJfQore2RlY2Zh aWx9CQl7CisJCQkJCXl5ZXJyb3IoInRyYWlsaW5nIGp1bmsgYWZ0ZXIgZGVjaW1hbCBpbnRl Z2VyIik7CisJCQkJfQore2hleGZhaWx9CQl7CisJCQkJCXl5ZXJyb3IoInRyYWlsaW5nIGp1 bmsgYWZ0ZXIgaGV4YWRlY2ltYWwgaW50ZWdlciIpOworCQkJCX0KK3tvY3RmYWlsfQkJewor CQkJCQl5eWVycm9yKCJ0cmFpbGluZyBqdW5rIGFmdGVyIG9jdGFsIGludGVnZXIiKTsKKwkJ CQl9Cit7YmluZmFpbH0JCXsKKwkJCQkJeXllcnJvcigidHJhaWxpbmcganVuayBhZnRlciBi aW5hcnkgaW50ZWdlciIpOwogCQkJCX0KLXtkZWNpbWFsfQkJewore251bWVyaWN9CQl7CiAJ CQkJCVNFVF9ZWUxMT0MoKTsKIAkJCQkJeXlsdmFsLT5zdHIgPSBwc3RyZHVwKHl5dGV4dCk7 CiAJCQkJCXJldHVybiBGQ09OU1Q7CiAJCQkJfQote2RlY2ltYWxmYWlsfQl7Cit7bnVtZXJp Y2ZhaWx9CXsKIAkJCQkJLyogdGhyb3cgYmFjayB0aGUgLi4sIGFuZCB0cmVhdCBhcyBpbnRl Z2VyICovCiAJCQkJCXl5bGVzcyh5eWxlbmcgLSAyKTsKIAkJCQkJU0VUX1lZTExPQygpOwot CQkJCQlyZXR1cm4gcHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoeXl0ZXh0LCB5eWx2YWwpOwor CQkJCQlyZXR1cm4gcHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoeXl0ZXh0LCB5eWx2YWwsIDEw KTsKIAkJCQl9CiB7cmVhbH0JCQl7CiAJCQkJCVNFVF9ZWUxMT0MoKTsKQEAgLTk5NiwxNyAr MTA0OSwxNyBAQCBvdGhlcgkJCS4KIHtyZWFsZmFpbDF9CQl7CiAJCQkJCS8qCiAJCQkJCSAq IHRocm93IGJhY2sgdGhlIFtFZV0sIGFuZCBmaWd1cmUgb3V0IHdoZXRoZXIgd2hhdAotCQkJ CQkgKiByZW1haW5zIGlzIGFuIHtpbnRlZ2VyfSBvciB7ZGVjaW1hbH0uCisJCQkJCSAqIHJl bWFpbnMgaXMgYSB7ZGVjaW50ZWdlcn0gb3Ige251bWVyaWN9LgogCQkJCQkgKi8KIAkJCQkJ eXlsZXNzKHl5bGVuZyAtIDEpOwogCQkJCQlTRVRfWVlMTE9DKCk7Ci0JCQkJCXJldHVybiBw cm9jZXNzX2ludGVnZXJfbGl0ZXJhbCh5eXRleHQsIHl5bHZhbCk7CisJCQkJCXJldHVybiBw cm9jZXNzX2ludGVnZXJfbGl0ZXJhbCh5eXRleHQsIHl5bHZhbCwgMTApOwogCQkJCX0KIHty ZWFsZmFpbDJ9CQl7CiAJCQkJCS8qIHRocm93IGJhY2sgdGhlIFtFZV1bKy1dLCBhbmQgcHJv Y2VlZCBhcyBhYm92ZSAqLwogCQkJCQl5eWxlc3MoeXlsZW5nIC0gMik7CiAJCQkJCVNFVF9Z WUxMT0MoKTsKLQkJCQkJcmV0dXJuIHByb2Nlc3NfaW50ZWdlcl9saXRlcmFsKHl5dGV4dCwg eXlsdmFsKTsKKwkJCQkJcmV0dXJuIHByb2Nlc3NfaW50ZWdlcl9saXRlcmFsKHl5dGV4dCwg eXlsdmFsLCAxMCk7CiAJCQkJfQogCiAKQEAgLTEyOTYsMTcgKzEzNDksMTcgQEAgbGl0YnVm ZHVwKGNvcmVfeXlzY2FuX3QgeXlzY2FubmVyKQogfQogCiAvKgotICogUHJvY2VzcyB7aW50 ZWdlcn0uICBOb3RlIHRoaXMgd2lsbCBhbHNvIGRvIHRoZSByaWdodCB0aGluZyB3aXRoIHtk ZWNpbWFsfSwKKyAqIFByb2Nlc3MgeyppbnRlZ2VyfS4gIE5vdGUgdGhpcyB3aWxsIGFsc28g ZG8gdGhlIHJpZ2h0IHRoaW5nIHdpdGgge251bWVyaWN9LAogICogaWUgZGlnaXRzIGFuZCBh IGRlY2ltYWwgcG9pbnQuCiAgKi8KIHN0YXRpYyBpbnQKLXByb2Nlc3NfaW50ZWdlcl9saXRl cmFsKGNvbnN0IGNoYXIgKnRva2VuLCBZWVNUWVBFICpsdmFsKQorcHJvY2Vzc19pbnRlZ2Vy X2xpdGVyYWwoY29uc3QgY2hhciAqdG9rZW4sIFlZU1RZUEUgKmx2YWwsIGludCBiYXNlKQog ewogCWludAkJCXZhbDsKIAljaGFyCSAgICplbmRwdHI7CiAKIAllcnJubyA9IDA7Ci0JdmFs ID0gc3RydG9pbnQodG9rZW4sICZlbmRwdHIsIDEwKTsKKwl2YWwgPSBzdHJ0b2ludCh0b2tl biwgJmVuZHB0ciwgYmFzZSk7CiAJaWYgKCplbmRwdHIgIT0gJ1wwJyB8fCBlcnJubyA9PSBF UkFOR0UpCiAJewogCQkvKiBpbnRlZ2VyIHRvbyBsYXJnZSAob3IgY29udGFpbnMgZGVjaW1h bCBwdCksIHRyZWF0IGl0IGFzIGEgZmxvYXQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9pbnQ4LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvaW50OC5jCmluZGV4 IDIxNjgwODBkY2MuLmMzZWQ5NDRhNmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9pbnQ4LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2ludDguYwpAQCAtNDUs NiArNDUsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QKICAqIEZvcm1hdHRpbmcgYW5kIGNvbnZlcnNp b24gcm91dGluZXMuCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKK3N0YXRpYyBjb25zdCBpbnQ4IGhleGxvb2t1cFsx MjhdID0geworCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCTAsIDEsIDIs IDMsIDQsIDUsIDYsIDcsIDgsIDksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIDEw LCAxMSwgMTIsIDEzLCAxNCwgMTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsCisJLTEsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCit9OworCiAvKgogICog c2NhbmludDggLS0tIHRyeSB0byBwYXJzZSBhIHN0cmluZyBpbnRvIGFuIGludDguCiAgKgpA QCAtODQsNiArOTUsNDggQEAgc2NhbmludDgoY29uc3QgY2hhciAqc3RyLCBib29sIGVycm9y T0ssIGludDY0ICpyZXN1bHQpCiAJCWdvdG8gaW52YWxpZF9zeW50YXg7CiAKIAkvKiBwcm9j ZXNzIGRpZ2l0cyAqLworCWlmIChwdHJbMF0gPT0gJzAnICYmIChwdHJbMV0gPT0gJ3gnIHx8 IHB0clsxXSA9PSAnWCcpKQorCXsKKwkJcHRyICs9IDI7CisJCXdoaWxlICgqcHRyICYmIGlz eGRpZ2l0KCh1bnNpZ25lZCBjaGFyKSAqcHRyKSkKKwkJeworCQkJaW50OAkJZGlnaXQgPSBo ZXhsb29rdXBbKHVuc2lnbmVkIGNoYXIpICpwdHJdOworCisJCQlpZiAodW5saWtlbHkocGdf bXVsX3M2NF9vdmVyZmxvdyh0bXAsIDE2LCAmdG1wKSkgfHwKKwkJCQl1bmxpa2VseShwZ19z dWJfczY0X292ZXJmbG93KHRtcCwgZGlnaXQsICZ0bXApKSkKKwkJCQlnb3RvIG91dF9vZl9y YW5nZTsKKworCQkJcHRyKys7CisJCX0KKwl9CisJZWxzZSBpZiAocHRyWzBdID09ICcwJyAm JiAocHRyWzFdID09ICdvJyB8fCBwdHJbMV0gPT0gJ08nKSkKKwl7CisJCXB0ciArPSAyOwor CisJCXdoaWxlICgqcHRyICYmICgqcHRyID49ICcwJyAmJiAqcHRyIDw9ICc3JykpCisJCXsK KwkJCWludDgJCWRpZ2l0ID0gKCpwdHIrKyAtICcwJyk7CisKKwkJCWlmICh1bmxpa2VseShw Z19tdWxfczY0X292ZXJmbG93KHRtcCwgOCwgJnRtcCkpIHx8CisJCQkJdW5saWtlbHkocGdf c3ViX3M2NF9vdmVyZmxvdyh0bXAsIGRpZ2l0LCAmdG1wKSkpCisJCQkJZ290byBvdXRfb2Zf cmFuZ2U7CisJCX0KKwl9CisJZWxzZSBpZiAocHRyWzBdID09ICcwJyAmJiAocHRyWzFdID09 ICdiJyB8fCBwdHJbMV0gPT0gJ0InKSkKKwl7CisJCXB0ciArPSAyOworCisJCXdoaWxlICgq cHRyICYmICgqcHRyID49ICcwJyAmJiAqcHRyIDw9ICcxJykpCisJCXsKKwkJCWludDgJCWRp Z2l0ID0gKCpwdHIrKyAtICcwJyk7CisKKwkJCWlmICh1bmxpa2VseShwZ19tdWxfczY0X292 ZXJmbG93KHRtcCwgMiwgJnRtcCkpIHx8CisJCQkJdW5saWtlbHkocGdfc3ViX3M2NF9vdmVy Zmxvdyh0bXAsIGRpZ2l0LCAmdG1wKSkpCisJCQkJZ290byBvdXRfb2ZfcmFuZ2U7CisJCX0K Kwl9CisJZWxzZQorCXsKIAl3aGlsZSAoKnB0ciAmJiBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFy KSAqcHRyKSkKIAl7CiAJCWludDgJCWRpZ2l0ID0gKCpwdHIrKyAtICcwJyk7CkBAIC05Miw2 ICsxNDUsNyBAQCBzY2FuaW50OChjb25zdCBjaGFyICpzdHIsIGJvb2wgZXJyb3JPSywgaW50 NjQgKnJlc3VsdCkKIAkJCXVubGlrZWx5KHBnX3N1Yl9zNjRfb3ZlcmZsb3codG1wLCBkaWdp dCwgJnRtcCkpKQogCQkJZ290byBvdXRfb2ZfcmFuZ2U7CiAJfQorCX0KIAogCS8qIGFsbG93 IHRyYWlsaW5nIHdoaXRlc3BhY2UsIGJ1dCBub3Qgb3RoZXIgdHJhaWxpbmcgY2hhcnMgKi8K IAl3aGlsZSAoKnB0ciAhPSAnXDAnICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpICpwdHIp KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L251bXV0aWxzLmMgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvbnVtdXRpbHMuYwppbmRleCBiOTMwOTZmMjg4Li43YzY1MjAz NDZlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbnVtdXRpbHMuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvbnVtdXRpbHMuYwpAQCAtMTczLDYgKzE3MywxNyBA QCBwZ19hdG9pKGNvbnN0IGNoYXIgKnMsIGludCBzaXplLCBpbnQgYykKIAlyZXR1cm4gKGlu dDMyKSBsOwogfQogCitzdGF0aWMgY29uc3QgaW50OCBoZXhsb29rdXBbMTI4XSA9IHsKKwkt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwkwLCAxLCAyLCAzLCA0LCA1LCA2 LCA3LCA4LCA5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAxMCwgMTEsIDEyLCAx MywgMTQsIDE1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLAorCS0xLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorfTsKKwogLyoKICAqIENvbnZlcnQgaW5w dXQgc3RyaW5nIHRvIGEgc2lnbmVkIDE2IGJpdCBpbnRlZ2VyLgogICoKQEAgLTIwOCw2ICsy MTksNDggQEAgcGdfc3RydG9pbnQxNihjb25zdCBjaGFyICpzKQogCQlnb3RvIGludmFsaWRf c3ludGF4OwogCiAJLyogcHJvY2VzcyBkaWdpdHMgKi8KKwlpZiAocHRyWzBdID09ICcwJyAm JiAocHRyWzFdID09ICd4JyB8fCBwdHJbMV0gPT0gJ1gnKSkKKwl7CisJCXB0ciArPSAyOwor CQl3aGlsZSAoKnB0ciAmJiBpc3hkaWdpdCgodW5zaWduZWQgY2hhcikgKnB0cikpCisJCXsK KwkJCWludDgJCWRpZ2l0ID0gaGV4bG9va3VwWyh1bnNpZ25lZCBjaGFyKSAqcHRyXTsKKwor CQkJaWYgKHVubGlrZWx5KHBnX211bF9zMTZfb3ZlcmZsb3codG1wLCAxNiwgJnRtcCkpIHx8 CisJCQkJdW5saWtlbHkocGdfc3ViX3MxNl9vdmVyZmxvdyh0bXAsIGRpZ2l0LCAmdG1wKSkp CisJCQkJZ290byBvdXRfb2ZfcmFuZ2U7CisKKwkJCXB0cisrOworCQl9CisJfQorCWVsc2Ug aWYgKHB0clswXSA9PSAnMCcgJiYgKHB0clsxXSA9PSAnbycgfHwgcHRyWzFdID09ICdPJykp CisJeworCQlwdHIgKz0gMjsKKworCQl3aGlsZSAoKnB0ciAmJiAoKnB0ciA+PSAnMCcgJiYg KnB0ciA8PSAnNycpKQorCQl7CisJCQlpbnQ4CQlkaWdpdCA9ICgqcHRyKysgLSAnMCcpOwor CisJCQlpZiAodW5saWtlbHkocGdfbXVsX3MxNl9vdmVyZmxvdyh0bXAsIDgsICZ0bXApKSB8 fAorCQkJCXVubGlrZWx5KHBnX3N1Yl9zMTZfb3ZlcmZsb3codG1wLCBkaWdpdCwgJnRtcCkp KQorCQkJCWdvdG8gb3V0X29mX3JhbmdlOworCQl9CisJfQorCWVsc2UgaWYgKHB0clswXSA9 PSAnMCcgJiYgKHB0clsxXSA9PSAnYicgfHwgcHRyWzFdID09ICdCJykpCisJeworCQlwdHIg Kz0gMjsKKworCQl3aGlsZSAoKnB0ciAmJiAoKnB0ciA+PSAnMCcgJiYgKnB0ciA8PSAnMScp KQorCQl7CisJCQlpbnQ4CQlkaWdpdCA9ICgqcHRyKysgLSAnMCcpOworCisJCQlpZiAodW5s aWtlbHkocGdfbXVsX3MxNl9vdmVyZmxvdyh0bXAsIDIsICZ0bXApKSB8fAorCQkJCXVubGlr ZWx5KHBnX3N1Yl9zMTZfb3ZlcmZsb3codG1wLCBkaWdpdCwgJnRtcCkpKQorCQkJCWdvdG8g b3V0X29mX3JhbmdlOworCQl9CisJfQorCWVsc2UKKwl7CiAJd2hpbGUgKCpwdHIgJiYgaXNk aWdpdCgodW5zaWduZWQgY2hhcikgKnB0cikpCiAJewogCQlpbnQ4CQlkaWdpdCA9ICgqcHRy KysgLSAnMCcpOwpAQCAtMjE2LDYgKzI2OSw3IEBAIHBnX3N0cnRvaW50MTYoY29uc3QgY2hh ciAqcykKIAkJCXVubGlrZWx5KHBnX3N1Yl9zMTZfb3ZlcmZsb3codG1wLCBkaWdpdCwgJnRt cCkpKQogCQkJZ290byBvdXRfb2ZfcmFuZ2U7CiAJfQorCX0KIAogCS8qIGFsbG93IHRyYWls aW5nIHdoaXRlc3BhY2UsIGJ1dCBub3Qgb3RoZXIgdHJhaWxpbmcgY2hhcnMgKi8KIAl3aGls ZSAoKnB0ciAhPSAnXDAnICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpICpwdHIpKQpAQCAt Mjg0LDYgKzMzOCw0OCBAQCBwZ19zdHJ0b2ludDMyKGNvbnN0IGNoYXIgKnMpCiAJCWdvdG8g aW52YWxpZF9zeW50YXg7CiAKIAkvKiBwcm9jZXNzIGRpZ2l0cyAqLworCWlmIChwdHJbMF0g PT0gJzAnICYmIChwdHJbMV0gPT0gJ3gnIHx8IHB0clsxXSA9PSAnWCcpKQorCXsKKwkJcHRy ICs9IDI7CisJCXdoaWxlICgqcHRyICYmIGlzeGRpZ2l0KCh1bnNpZ25lZCBjaGFyKSAqcHRy KSkKKwkJeworCQkJaW50OAkJZGlnaXQgPSBoZXhsb29rdXBbKHVuc2lnbmVkIGNoYXIpICpw dHJdOworCisJCQlpZiAodW5saWtlbHkocGdfbXVsX3MzMl9vdmVyZmxvdyh0bXAsIDE2LCAm dG1wKSkgfHwKKwkJCQl1bmxpa2VseShwZ19zdWJfczMyX292ZXJmbG93KHRtcCwgZGlnaXQs ICZ0bXApKSkKKwkJCQlnb3RvIG91dF9vZl9yYW5nZTsKKworCQkJcHRyKys7CisJCX0KKwl9 CisJZWxzZSBpZiAocHRyWzBdID09ICcwJyAmJiAocHRyWzFdID09ICdvJyB8fCBwdHJbMV0g PT0gJ08nKSkKKwl7CisJCXB0ciArPSAyOworCisJCXdoaWxlICgqcHRyICYmICgqcHRyID49 ICcwJyAmJiAqcHRyIDw9ICc3JykpCisJCXsKKwkJCWludDgJCWRpZ2l0ID0gKCpwdHIrKyAt ICcwJyk7CisKKwkJCWlmICh1bmxpa2VseShwZ19tdWxfczMyX292ZXJmbG93KHRtcCwgOCwg JnRtcCkpIHx8CisJCQkJdW5saWtlbHkocGdfc3ViX3MzMl9vdmVyZmxvdyh0bXAsIGRpZ2l0 LCAmdG1wKSkpCisJCQkJZ290byBvdXRfb2ZfcmFuZ2U7CisJCX0KKwl9CisJZWxzZSBpZiAo cHRyWzBdID09ICcwJyAmJiAocHRyWzFdID09ICdiJyB8fCBwdHJbMV0gPT0gJ0InKSkKKwl7 CisJCXB0ciArPSAyOworCisJCXdoaWxlICgqcHRyICYmICgqcHRyID49ICcwJyAmJiAqcHRy IDw9ICcxJykpCisJCXsKKwkJCWludDgJCWRpZ2l0ID0gKCpwdHIrKyAtICcwJyk7CisKKwkJ CWlmICh1bmxpa2VseShwZ19tdWxfczMyX292ZXJmbG93KHRtcCwgMiwgJnRtcCkpIHx8CisJ CQkJdW5saWtlbHkocGdfc3ViX3MzMl9vdmVyZmxvdyh0bXAsIGRpZ2l0LCAmdG1wKSkpCisJ CQkJZ290byBvdXRfb2ZfcmFuZ2U7CisJCX0KKwl9CisJZWxzZQorCXsKIAl3aGlsZSAoKnB0 ciAmJiBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSAqcHRyKSkKIAl7CiAJCWludDgJCWRpZ2l0 ID0gKCpwdHIrKyAtICcwJyk7CkBAIC0yOTIsNiArMzg4LDcgQEAgcGdfc3RydG9pbnQzMihj b25zdCBjaGFyICpzKQogCQkJdW5saWtlbHkocGdfc3ViX3MzMl9vdmVyZmxvdyh0bXAsIGRp Z2l0LCAmdG1wKSkpCiAJCQlnb3RvIG91dF9vZl9yYW5nZTsKIAl9CisJfQogCiAJLyogYWxs b3cgdHJhaWxpbmcgd2hpdGVzcGFjZSwgYnV0IG5vdCBvdGhlciB0cmFpbGluZyBjaGFycyAq LwogCXdoaWxlICgqcHRyICE9ICdcMCcgJiYgaXNzcGFjZSgodW5zaWduZWQgY2hhcikgKnB0 cikpCmRpZmYgLS1naXQgYS9zcmMvZmVfdXRpbHMvcHNxbHNjYW4ubCBiL3NyYy9mZV91dGls cy9wc3Fsc2Nhbi5sCmluZGV4IDBmYWI0OGEzODIuLjQ0MzY1MDlkODggMTAwNjQ0Ci0tLSBh L3NyYy9mZV91dGlscy9wc3Fsc2Nhbi5sCisrKyBiL3NyYy9mZV91dGlscy9wc3Fsc2Nhbi5s CkBAIC0yMDAsNyArMjAwLDcgQEAgcXVvdGVjb250aW51ZWZhaWwJe3doaXRlc3BhY2V9KiIt Ij8KIHhic3RhcnQJCQlbYkJde3F1b3RlfQogeGJpbnNpZGUJCVteJ10qCiAKLS8qIEhleGFk ZWNpbWFsIG51bWJlciAqLworLyogSGV4YWRlY2ltYWwgYnl0ZSBzdHJpbmcgKi8KIHhoc3Rh cnQJCQlbeFhde3F1b3RlfQogeGhpbnNpZGUJCVteJ10qCiAKQEAgLTI3OSw3ICsyNzksNiBA QCB4Y3N0YXJ0CQkJXC9cKntvcF9jaGFyc30qCiB4Y3N0b3AJCQlcKitcLwogeGNpbnNpZGUJ CVteKi9dKwogCi1kaWdpdAkJCVswLTldCiBpZGVudF9zdGFydAkJW0EtWmEtelwyMDAtXDM3 N19dCiBpZGVudF9jb250CQlbQS1aYS16XDIwMC1cMzc3XzAtOVwkXQogCkBAIC0zMTgsMjQg KzMxNyw0NCBAQCBzZWxmCQkJWywoKVxbXF0uO1w6XCtcLVwqXC9cJVxeXDxcPlw9XQogb3Bf Y2hhcnMJCVtcflwhXEBcI1xeXCZcfFxgXD9cK1wtXCpcL1wlXDxcPlw9XQogb3BlcmF0b3IJ CXtvcF9jaGFyc30rCiAKLS8qIHdlIG5vIGxvbmdlciBhbGxvdyB1bmFyeSBtaW51cyBpbiBu dW1iZXJzLgotICogaW5zdGVhZCB3ZSBwYXNzIGl0IHNlcGFyYXRlbHkgdG8gcGFyc2VyLiB0 aGVyZSBpdCBnZXRzCi0gKiBjb2VyY2VkIHZpYSBkb05lZ2F0ZSgpIC0tIExlb24gYXVnIDIw IDE5OTkKKy8qCisgKiBOdW1iZXJzCisgKgorICogVW5hcnkgbWludXMgaXMgbm90IHBhcnQg b2YgYSBudW1iZXIgaGVyZS4gIEluc3RlYWQgd2UgcGFzcyBpdCBzZXBhcmF0ZWx5IHRvCisg KiBwYXJzZXIsIGFuZCB0aGVyZSBpdCBnZXRzIGNvZXJjZWQgdmlhIGRvTmVnYXRlKCkuCiAg KgotICoge2RlY2ltYWxmYWlsfSBpcyB1c2VkIGJlY2F1c2Ugd2Ugd291bGQgbGlrZSAiMS4u MTAiIHRvIGxleCBhcyAxLCBkb3RfZG90LCAxMC4KKyAqIHtudW1lcmljZmFpbH0gaXMgdXNl ZCBiZWNhdXNlIHdlIHdvdWxkIGxpa2UgIjEuLjEwIiB0byBsZXggYXMgMSwgZG90X2RvdCwg MTAuCiAgKgogICoge3JlYWxmYWlsMX0gYW5kIHtyZWFsZmFpbDJ9IGFyZSBhZGRlZCB0byBw cmV2ZW50IHRoZSBuZWVkIGZvciBzY2FubmVyCiAgKiBiYWNrdXAgd2hlbiB0aGUge3JlYWx9 IHJ1bGUgZmFpbHMgdG8gbWF0Y2ggY29tcGxldGVseS4KICAqLworZGVjZGlnaXQJCVswLTld CitoZXhkaWdpdAkJWzAtOUEtRmEtZl0KK29jdGRpZ2l0CQlbMC03XQorYmluZGlnaXQJCVsw LTFdCisKK2RlY2ludGVnZXIJCXtkZWNkaWdpdH0rCitoZXhpbnRlZ2VyCQkwW3hYXXtoZXhk aWdpdH0rCitvY3RpbnRlZ2VyCQkwW29PXXtvY3RkaWdpdH0rCitiaW5pbnRlZ2VyCQkwW2JC XXtiaW5kaWdpdH0rCisKK2hleGZhaWwwCQkwW3hYXQorb2N0ZmFpbDAJCTBbb09dCitiaW5m YWlsMAkJMFtiQl0KIAotaW50ZWdlcgkJCXtkaWdpdH0rCi1kZWNpbWFsCQkJKCh7ZGlnaXR9 Klwue2RpZ2l0fSspfCh7ZGlnaXR9K1wue2RpZ2l0fSopKQotZGVjaW1hbGZhaWwJCXtkaWdp dH0rXC5cLgotcmVhbAkJCSh7aW50ZWdlcn18e2RlY2ltYWx9KVtFZV1bLStdP3tkaWdpdH0r Ci1yZWFsZmFpbDEJCSh7aW50ZWdlcn18e2RlY2ltYWx9KVtFZV0KLXJlYWxmYWlsMgkJKHtp bnRlZ2VyfXx7ZGVjaW1hbH0pW0VlXVstK10KK2RlY2ZhaWwJCQl7ZGVjaW50ZWdlcn17aWRl bnRfc3RhcnR9CitoZXhmYWlsCQkJe2hleGludGVnZXJ9e2lkZW50X3N0YXJ0fQorb2N0ZmFp bAkJCXtvY3RpbnRlZ2VyfXtpZGVudF9zdGFydH0KK2JpbmZhaWwJCQl7YmluaW50ZWdlcn17 aWRlbnRfc3RhcnR9CiAKLXBhcmFtCQkJXCR7aW50ZWdlcn0KK251bWVyaWMJCQkoKHtkZWNp bnRlZ2VyfVwue2RlY2ludGVnZXJ9Pyl8KFwue2RlY2ludGVnZXJ9KSkKK251bWVyaWNmYWls CQl7ZGVjZGlnaXR9K1wuXC4KKworcmVhbAkJCSh7ZGVjaW50ZWdlcn18e251bWVyaWN9KVtF ZV1bLStdP3tkZWNkaWdpdH0rCityZWFsZmFpbDEJCSh7ZGVjaW50ZWdlcn18e251bWVyaWN9 KVtFZV0KK3JlYWxmYWlsMgkJKHtkZWNpbnRlZ2VyfXx7bnVtZXJpY30pW0VlXVstK10KKwor cGFyYW0JCQlcJHtkZWNpbnRlZ2VyfQogCiAvKiBwc3FsLXNwZWNpZmljOiBjaGFyYWN0ZXJz IGFsbG93ZWQgaW4gdmFyaWFibGUgbmFtZXMgKi8KIHZhcmlhYmxlX2NoYXIJW0EtWmEtelwy MDAtXDM3N18wLTldCkBAIC04MzksMTMgKzg1OCw0MyBAQCBvdGhlcgkJCS4KIAkJCQkJRUNI TzsKIAkJCQl9CiAKLXtpbnRlZ2VyfQkJewore2RlY2ludGVnZXJ9CXsKKwkJCQkJRUNITzsK KwkJCQl9Cit7aGV4aW50ZWdlcn0JeworCQkJCQlFQ0hPOworCQkJCX0KK3tvY3RpbnRlZ2Vy fQl7CisJCQkJCUVDSE87CisJCQkJfQore2JpbmludGVnZXJ9CXsKKwkJCQkJRUNITzsKKwkJ CQl9Cit7aGV4ZmFpbDB9CQl7CisJCQkJCUVDSE87CisJCQkJfQore29jdGZhaWwwfQkJewor CQkJCQlFQ0hPOworCQkJCX0KK3tiaW5mYWlsMH0JCXsKKwkJCQkJRUNITzsKKwkJCQl9Cit7 ZGVjZmFpbH0JCXsKKwkJCQkJRUNITzsKKwkJCQl9Cit7aGV4ZmFpbH0JCXsKKwkJCQkJRUNI TzsKKwkJCQl9Cit7b2N0ZmFpbH0JCXsKKwkJCQkJRUNITzsKKwkJCQl9Cit7YmluZmFpbH0J CXsKIAkJCQkJRUNITzsKIAkJCQl9Ci17ZGVjaW1hbH0JCXsKK3tudW1lcmljfQkJewogCQkJ CQlFQ0hPOwogCQkJCX0KLXtkZWNpbWFsZmFpbH0Jewore251bWVyaWNmYWlsfQl7CiAJCQkJ CS8qIHRocm93IGJhY2sgdGhlIC4uLCBhbmQgdHJlYXQgYXMgaW50ZWdlciAqLwogCQkJCQl5 eWxlc3MoeXlsZW5nIC0gMik7CiAJCQkJCUVDSE87CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJm YWNlcy9lY3BnL3ByZXByb2MvcGdjLmwgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3ByZXByb2Mv cGdjLmwKaW5kZXggN2EwMzU2NjM4ZC4uOGQ2ZTFjZDc2YSAxMDA2NDQKLS0tIGEvc3JjL2lu dGVyZmFjZXMvZWNwZy9wcmVwcm9jL3BnYy5sCisrKyBiL3NyYy9pbnRlcmZhY2VzL2VjcGcv cHJlcHJvYy9wZ2MubApAQCAtNTcsNyArNTcsNyBAQCBzdGF0aWMgYm9vbAkJaW5jbHVkZV9u ZXh0OwogI2RlZmluZSBzdGFydGxpdCgpCShsaXRlcmFsYnVmWzBdID0gJ1wwJywgbGl0ZXJh bGxlbiA9IDApCiBzdGF0aWMgdm9pZCBhZGRsaXQoY2hhciAqeXRleHQsIGludCB5bGVuZyk7 CiBzdGF0aWMgdm9pZCBhZGRsaXRjaGFyKHVuc2lnbmVkIGNoYXIpOwotc3RhdGljIGludAlw cm9jZXNzX2ludGVnZXJfbGl0ZXJhbChjb25zdCBjaGFyICp0b2tlbiwgWVlTVFlQRSAqbHZh bCk7CitzdGF0aWMgaW50CXByb2Nlc3NfaW50ZWdlcl9saXRlcmFsKGNvbnN0IGNoYXIgKnRv a2VuLCBZWVNUWVBFICpsdmFsLCBpbnQgYmFzZSk7CiBzdGF0aWMgdm9pZCBwYXJzZV9pbmNs dWRlKHZvaWQpOwogc3RhdGljIGJvb2wgZWNwZ19pc3NwYWNlKGNoYXIgY2gpOwogc3RhdGlj IGJvb2wgaXNkZWZpbmUodm9pZCk7CkBAIC0zMDUsNyArMzA1LDYgQEAgeGNzdGFydAkJCVwv XCp7b3BfY2hhcnN9KgogeGNzdG9wCQkJXCorXC8KIHhjaW5zaWRlCQlbXiovXSsKIAotZGln aXQJCQlbMC05XQogaWRlbnRfc3RhcnQJCVtBLVphLXpcMjAwLVwzNzdfXQogaWRlbnRfY29u dAkJW0EtWmEtelwyMDAtXDM3N18wLTlcJF0KIApAQCAtMzQ2LDI0ICszNDUsNDQgQEAgc2Vs ZgkJCVssKClcW1xdLjtcOlwrXC1cKlwvXCVcXlw8XD5cPV0KIG9wX2NoYXJzCQlbXH5cIVxA XCNcXlwmXHxcYFw/XCtcLVwqXC9cJVw8XD5cPV0KIG9wZXJhdG9yCQl7b3BfY2hhcnN9Kwog Ci0vKiB3ZSBubyBsb25nZXIgYWxsb3cgdW5hcnkgbWludXMgaW4gbnVtYmVycy4KLSAqIGlu c3RlYWQgd2UgcGFzcyBpdCBzZXBhcmF0ZWx5IHRvIHBhcnNlci4gdGhlcmUgaXQgZ2V0cwot ICogY29lcmNlZCB2aWEgZG9OZWdhdGUoKSAtLSBMZW9uIGF1ZyAyMCAxOTk5CisvKgorICog TnVtYmVycworICoKKyAqIFVuYXJ5IG1pbnVzIGlzIG5vdCBwYXJ0IG9mIGEgbnVtYmVyIGhl cmUuICBJbnN0ZWFkIHdlIHBhc3MgaXQgc2VwYXJhdGVseSB0bworICogcGFyc2VyLCBhbmQg dGhlcmUgaXQgZ2V0cyBjb2VyY2VkIHZpYSBkb05lZ2F0ZSgpLgogICoKLSAqIHtkZWNpbWFs ZmFpbH0gaXMgdXNlZCBiZWNhdXNlIHdlIHdvdWxkIGxpa2UgIjEuLjEwIiB0byBsZXggYXMg MSwgZG90X2RvdCwgMTAuCisgKiB7bnVtZXJpY2ZhaWx9IGlzIHVzZWQgYmVjYXVzZSB3ZSB3 b3VsZCBsaWtlICIxLi4xMCIgdG8gbGV4IGFzIDEsIGRvdF9kb3QsIDEwLgogICoKICAqIHty ZWFsZmFpbDF9IGFuZCB7cmVhbGZhaWwyfSBhcmUgYWRkZWQgdG8gcHJldmVudCB0aGUgbmVl ZCBmb3Igc2Nhbm5lcgogICogYmFja3VwIHdoZW4gdGhlIHtyZWFsfSBydWxlIGZhaWxzIHRv IG1hdGNoIGNvbXBsZXRlbHkuCiAgKi8KK2RlY2RpZ2l0CQlbMC05XQoraGV4ZGlnaXQJCVsw LTlBLUZhLWZdCitvY3RkaWdpdAkJWzAtN10KK2JpbmRpZ2l0CQlbMC0xXQorCitkZWNpbnRl Z2VyCQl7ZGVjZGlnaXR9KworaGV4aW50ZWdlcgkJMFt4WF17aGV4ZGlnaXR9Kworb2N0aW50 ZWdlcgkJMFtvT117b2N0ZGlnaXR9KworYmluaW50ZWdlcgkJMFtiQl17YmluZGlnaXR9Kwor CitoZXhmYWlsMAkJMFt4WF0KK29jdGZhaWwwCQkwW29PXQorYmluZmFpbDAJCTBbYkJdCisK K2RlY2ZhaWwJCQl7ZGVjaW50ZWdlcn17aWRlbnRfc3RhcnR9CitoZXhmYWlsCQkJe2hleGlu dGVnZXJ9e2lkZW50X3N0YXJ0fQorb2N0ZmFpbAkJCXtvY3RpbnRlZ2VyfXtpZGVudF9zdGFy dH0KK2JpbmZhaWwJCQl7YmluaW50ZWdlcn17aWRlbnRfc3RhcnR9CiAKLWludGVnZXIJCQl7 ZGlnaXR9KwotZGVjaW1hbAkJCSgoe2RpZ2l0fSpcLntkaWdpdH0rKXwoe2RpZ2l0fStcLntk aWdpdH0qKSkKLWRlY2ltYWxmYWlsCQl7ZGlnaXR9K1wuXC4KLXJlYWwJCQkoe2ludGVnZXJ9 fHtkZWNpbWFsfSlbRWVdWy0rXT97ZGlnaXR9KwotcmVhbGZhaWwxCQkoe2ludGVnZXJ9fHtk ZWNpbWFsfSlbRWVdCi1yZWFsZmFpbDIJCSh7aW50ZWdlcn18e2RlY2ltYWx9KVtFZV1bLStd CitudW1lcmljCQkJKCh7ZGVjaW50ZWdlcn1cLntkZWNpbnRlZ2VyfT8pfChcLntkZWNpbnRl Z2VyfSkpCitudW1lcmljZmFpbAkJe2RlY2RpZ2l0fStcLlwuCiAKLXBhcmFtCQkJXCR7aW50 ZWdlcn0KK3JlYWwJCQkoe2RlY2ludGVnZXJ9fHtudW1lcmljfSlbRWVdWy0rXT97ZGVjZGln aXR9KworcmVhbGZhaWwxCQkoe2RlY2ludGVnZXJ9fHtudW1lcmljfSlbRWVdCityZWFsZmFp bDIJCSh7ZGVjaW50ZWdlcn18e251bWVyaWN9KVtFZV1bLStdCisKK3BhcmFtCQkJXCR7ZGVj aW50ZWdlcn0KIAogLyogc3BlY2lhbCBjaGFyYWN0ZXJzIGZvciBvdGhlciBkYm1zICovCiAv KiB3ZSBoYXZlIHRvIHJlYWN0IGRpZmZlcmVudGx5IGluIGNvbXBhdCBtb2RlICovCkBAIC0z OTMsOSArNDEyLDYgQEAgaW5jbHVkZV9uZXh0CVtpSV1bbk5dW2NDXVtsTF1bdVVdW2REXVtl RV1fW25OXVtlRV1beFhdW3RUXQogaW1wb3J0CQkJW2lJXVttTV1bcFBdW29PXVtyUl1bdFRd CiB1bmRlZgkJCVt1VV1bbk5dW2REXVtlRV1bZkZdCiAKLS8qIEMgdmVyc2lvbiBvZiBoZXgg bnVtYmVyICovCi14Y2gJCQkJMFt4WF1bMC05QS1GYS1mXSoKLQogY2NvbW1lbnQJCSIvLyIu KlxuCiAKIGlmCQkJCVtpSV1bZkZdCkBAIC00MDgsNyArNDI0LDcgQEAgZW5kaWYJCQlbZUVd W25OXVtkRF1baUldW2ZGXQogc3RydWN0CQkJW3NTXVt0VF1bclJdW3VVXVtjQ11bdFRdCiAK IGV4ZWNfc3FsCQl7ZXhlY317c3BhY2V9KntzcWx9e3NwYWNlfSoKLWlwZGlnaXQJCQkoe2Rp Z2l0fXx7ZGlnaXR9e2RpZ2l0fXx7ZGlnaXR9e2RpZ2l0fXtkaWdpdH0pCitpcGRpZ2l0CQkJ KHtkZWNkaWdpdH18e2RlY2RpZ2l0fXtkZWNkaWdpdH18e2RlY2RpZ2l0fXtkZWNkaWdpdH17 ZGVjZGlnaXR9KQogaXAJCQkJe2lwZGlnaXR9XC57aXBkaWdpdH1cLntpcGRpZ2l0fVwue2lw ZGlnaXR9CiAKIC8qIHdlIG1pZ2h0IHdhbnQgdG8gcGFyc2UgYWxsIGNwcCBpbmNsdWRlIGZp bGVzICovCkBAIC05MjMsMTcgKzkzOSwyMCBAQCBjcHBsaW5lCQkJe3NwYWNlfSojKFteaV1b QS1aYS16XSp8e2lmfXx7aWZkZWZ9fHtpZm5kZWZ9fHtpbXBvcnR9KSgoXC9cKlteKi9dKlwq KwogfSAgLyogPFNRTD4gKi8KIAogPEMsU1FMPnsKLXtpbnRlZ2VyfQkJewotCQkJCQlyZXR1 cm4gcHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoeXl0ZXh0LCAmYmFzZV95eWx2YWwpOwore2Rl Y2ludGVnZXJ9CXsKKwkJCQkJcmV0dXJuIHByb2Nlc3NfaW50ZWdlcl9saXRlcmFsKHl5dGV4 dCwgJmJhc2VfeXlsdmFsLCAxMCk7CiAJCQkJfQote2RlY2ltYWx9CQl7Cit7aGV4aW50ZWdl cn0JeworCQkJCQlyZXR1cm4gcHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoeXl0ZXh0ICsgMiwg JmJhc2VfeXlsdmFsLCAxNik7CisJCQkJfQore251bWVyaWN9CQl7CiAJCQkJCWJhc2VfeXls dmFsLnN0ciA9IG1tX3N0cmR1cCh5eXRleHQpOwogCQkJCQlyZXR1cm4gRkNPTlNUOwogCQkJ CX0KLXtkZWNpbWFsZmFpbH0Jewore251bWVyaWNmYWlsfQl7CiAJCQkJCS8qIHRocm93IGJh Y2sgdGhlIC4uLCBhbmQgdHJlYXQgYXMgaW50ZWdlciAqLwogCQkJCQl5eWxlc3MoeXlsZW5n IC0gMik7Ci0JCQkJCXJldHVybiBwcm9jZXNzX2ludGVnZXJfbGl0ZXJhbCh5eXRleHQsICZi YXNlX3l5bHZhbCk7CisJCQkJCXJldHVybiBwcm9jZXNzX2ludGVnZXJfbGl0ZXJhbCh5eXRl eHQsICZiYXNlX3l5bHZhbCwgMTApOwogCQkJCX0KIHtyZWFsfQkJCXsKIAkJCQkJYmFzZV95 eWx2YWwuc3RyID0gbW1fc3RyZHVwKHl5dGV4dCk7CkBAIC05NDIsMTggKzk2MSwyNSBAQCBj cHBsaW5lCQkJe3NwYWNlfSojKFteaV1bQS1aYS16XSp8e2lmfXx7aWZkZWZ9fHtpZm5kZWZ9 fHtpbXBvcnR9KSgoXC9cKlteKi9dKlwqKwoge3JlYWxmYWlsMX0JCXsKIAkJCQkJLyoKIAkJ CQkJICogdGhyb3cgYmFjayB0aGUgW0VlXSwgYW5kIGZpZ3VyZSBvdXQgd2hldGhlciB3aGF0 Ci0JCQkJCSAqIHJlbWFpbnMgaXMgYW4ge2ludGVnZXJ9IG9yIHtkZWNpbWFsfS4KKwkJCQkJ ICogcmVtYWlucyBpcyBhbiB7ZGVjaW50ZWdlcn0gb3Ige251bWVyaWN9LgogCQkJCQkgKi8K IAkJCQkJeXlsZXNzKHl5bGVuZyAtIDEpOwotCQkJCQlyZXR1cm4gcHJvY2Vzc19pbnRlZ2Vy X2xpdGVyYWwoeXl0ZXh0LCAmYmFzZV95eWx2YWwpOworCQkJCQlyZXR1cm4gcHJvY2Vzc19p bnRlZ2VyX2xpdGVyYWwoeXl0ZXh0LCAmYmFzZV95eWx2YWwsIDEwKTsKIAkJCQl9CiB7cmVh bGZhaWwyfQkJewogCQkJCQkvKiB0aHJvdyBiYWNrIHRoZSBbRWVdWystXSwgYW5kIHByb2Nl ZWQgYXMgYWJvdmUgKi8KIAkJCQkJeXlsZXNzKHl5bGVuZyAtIDIpOwotCQkJCQlyZXR1cm4g cHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoeXl0ZXh0LCAmYmFzZV95eWx2YWwpOworCQkJCQly ZXR1cm4gcHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoeXl0ZXh0LCAmYmFzZV95eWx2YWwsIDEw KTsKIAkJCQl9CiB9IC8qIDxDLFNRTD4gKi8KIAorPFNRTD57b2N0aW50ZWdlcn0JeworCQkJ CQlyZXR1cm4gcHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoeXl0ZXh0ICsgMiwgJmJhc2VfeXls dmFsLCA4KTsKKwkJCQl9Cis8U1FMPntiaW5pbnRlZ2VyfQl7CisJCQkJCXJldHVybiBwcm9j ZXNzX2ludGVnZXJfbGl0ZXJhbCh5eXRleHQgKyAyLCAmYmFzZV95eWx2YWwsIDIpOworCQkJ CX0KKwogPFNRTD57CiA6e2lkZW50aWZpZXJ9KCgoIi0+InxcLil7aWRlbnRpZmllcn0pfChc W3thcnJheX1cXSkpKgl7CiAJCQkJCWJhc2VfeXlsdmFsLnN0ciA9IG1tX3N0cmR1cCh5eXRl eHQrMSk7CkBAIC0xMDA5LDE5ICsxMDM1LDYgQEAgY3BwbGluZQkJCXtzcGFjZX0qIyhbXmld W0EtWmEtel0qfHtpZn18e2lmZGVmfXx7aWZuZGVmfXx7aW1wb3J0fSkoKFwvXCpbXiovXSpc KisKIAkJCQkJCQlyZXR1cm4gU19BTllUSElORzsKIAkJCQkJIH0KIDxDPntjY29tbWVudH0J CXsgRUNITzsgfQotPEM+e3hjaH0JCQl7Ci0JCQkJCQljaGFyKiBlbmRwdHI7Ci0KLQkJCQkJ CWVycm5vID0gMDsKLQkJCQkJCWJhc2VfeXlsdmFsLml2YWwgPSBzdHJ0b3VsKChjaGFyICop eXl0ZXh0LCZlbmRwdHIsMTYpOwotCQkJCQkJaWYgKCplbmRwdHIgIT0gJ1wwJyB8fCBlcnJu byA9PSBFUkFOR0UpCi0JCQkJCQl7Ci0JCQkJCQkJZXJybm8gPSAwOwotCQkJCQkJCWJhc2Vf eXlsdmFsLnN0ciA9IG1tX3N0cmR1cCh5eXRleHQpOwotCQkJCQkJCXJldHVybiBTQ09OU1Q7 Ci0JCQkJCQl9Ci0JCQkJCQlyZXR1cm4gSUNPTlNUOwotCQkJCQl9CiA8Qz57Y3BwaW5jbHVk ZX0JCXsKIAkJCQkJCWlmIChzeXN0ZW1faW5jbHVkZXMpCiAJCQkJCQl7CkBAIC0xNTQ2LDE3 ICsxNTU5LDE3IEBAIGFkZGxpdGNoYXIodW5zaWduZWQgY2hhciB5Y2hhcikKIH0KIAogLyoK LSAqIFByb2Nlc3Mge2ludGVnZXJ9LiAgTm90ZSB0aGlzIHdpbGwgYWxzbyBkbyB0aGUgcmln aHQgdGhpbmcgd2l0aCB7ZGVjaW1hbH0sCisgKiBQcm9jZXNzIHsqaW50ZWdlcn0uICBOb3Rl IHRoaXMgd2lsbCBhbHNvIGRvIHRoZSByaWdodCB0aGluZyB3aXRoIHtudW1lcmljfSwKICAq IGllIGRpZ2l0cyBhbmQgYSBkZWNpbWFsIHBvaW50LgogICovCiBzdGF0aWMgaW50Ci1wcm9j ZXNzX2ludGVnZXJfbGl0ZXJhbChjb25zdCBjaGFyICp0b2tlbiwgWVlTVFlQRSAqbHZhbCkK K3Byb2Nlc3NfaW50ZWdlcl9saXRlcmFsKGNvbnN0IGNoYXIgKnRva2VuLCBZWVNUWVBFICps dmFsLCBpbnQgYmFzZSkKIHsKIAlpbnQJCQl2YWw7CiAJY2hhcgkgICAqZW5kcHRyOwogCiAJ ZXJybm8gPSAwOwotCXZhbCA9IHN0cnRvaW50KHRva2VuLCAmZW5kcHRyLCAxMCk7CisJdmFs ID0gc3RydG9pbnQodG9rZW4sICZlbmRwdHIsIGJhc2UpOwogCWlmICgqZW5kcHRyICE9ICdc MCcgfHwgZXJybm8gPT0gRVJBTkdFKQogCXsKIAkJLyogaW50ZWdlciB0b28gbGFyZ2UgKG9y IGNvbnRhaW5zIGRlY2ltYWwgcHQpLCB0cmVhdCBpdCBhcyBhIGZsb2F0ICovCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ludDIub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9pbnQyLm91dAppbmRleCA1NWVhNzIwMmNkLi4yMjBlMTQ5M2U4IDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ludDIub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW50Mi5vdXQKQEAgLTMwNiwzICszMDYsMjIgQEAg RlJPTSAoVkFMVUVTICgtMi41OjpudW1lcmljKSwKICAgMi41IHwgICAgICAgICAgMwogKDcg cm93cykKIAorLS0gbm9uLWRlY2ltYWwgbGl0ZXJhbHMKK1NFTEVDVCBpbnQyICcwYjEwMDEw MSc7CisgaW50MiAKKy0tLS0tLQorICAgMzcKKygxIHJvdykKKworU0VMRUNUIGludDIgJzBv MjczJzsKKyBpbnQyIAorLS0tLS0tCisgIDE4NworKDEgcm93KQorCitTRUxFQ1QgaW50MiAn MHg0MkYnOworIGludDIgCistLS0tLS0KKyAxMDcxCisoMSByb3cpCisKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW50NC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2ludDQub3V0CmluZGV4IDlkMjBiMzM4MGYuLjA2MGI1OTk3MDUgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW50NC5vdXQKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9pbnQ0Lm91dApAQCAtNDM3LDMgKzQzNyw3OCBAQCBTRUxF Q1QgbGNtKCgtMjE0NzQ4MzY0OCk6OmludDQsIDE6OmludDQpOyAtLSBvdmVyZmxvdwogRVJS T1I6ICBpbnRlZ2VyIG91dCBvZiByYW5nZQogU0VMRUNUIGxjbSgyMTQ3NDgzNjQ3OjppbnQ0 LCAyMTQ3NDgzNjQ2OjppbnQ0KTsgLS0gb3ZlcmZsb3cKIEVSUk9SOiAgaW50ZWdlciBvdXQg b2YgcmFuZ2UKKy0tIG5vbi1kZWNpbWFsIGxpdGVyYWxzCitTRUxFQ1QgaW50NCAnMGIxMDAx MDEnOworIGludDQgCistLS0tLS0KKyAgIDM3CisoMSByb3cpCisKK1NFTEVDVCBpbnQ0ICcw bzI3Myc7CisgaW50NCAKKy0tLS0tLQorICAxODcKKygxIHJvdykKKworU0VMRUNUIGludDQg JzB4NDJGJzsKKyBpbnQ0IAorLS0tLS0tCisgMTA3MQorKDEgcm93KQorCistLSBsZXhlciBs aXRlcmFscworU0VMRUNUIDBiMTAwMTAxOworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorICAg ICAgIDM3CisoMSByb3cpCisKK1NFTEVDVCAwbzI3MzsKKyA/Y29sdW1uPyAKKy0tLS0tLS0t LS0KKyAgICAgIDE4NworKDEgcm93KQorCitTRUxFQ1QgMHg0MkY7CisgP2NvbHVtbj8gCist LS0tLS0tLS0tCisgICAgIDEwNzEKKygxIHJvdykKKworLS0gZXJyb3IgY2FzZXMKK1NFTEVD VCAwYjsKK0VSUk9SOiAgaW52YWxpZCBiaW5hcnkgaW50ZWdlciBhdCBvciBuZWFyICJTRUxF Q1QgMGIiCitMSU5FIDE6IFNFTEVDVCAwYjsKKyAgICAgICAgXgorU0VMRUNUIDFiOworRVJS T1I6ICB0cmFpbGluZyBqdW5rIGFmdGVyIGRlY2ltYWwgaW50ZWdlciBhdCBvciBuZWFyICJT RUxFQ1QgMWIiCitMSU5FIDE6IFNFTEVDVCAxYjsKKyAgICAgICAgXgorU0VMRUNUIDBiMHg7 CitFUlJPUjogIHRyYWlsaW5nIGp1bmsgYWZ0ZXIgYmluYXJ5IGludGVnZXIgYXQgb3IgbmVh ciAiU0VMRUNUIDBiMHgiCitMSU5FIDE6IFNFTEVDVCAwYjB4OworICAgICAgICBeCitTRUxF Q1QgMG87CitFUlJPUjogIGludmFsaWQgb2N0YWwgaW50ZWdlciBhdCBvciBuZWFyICJTRUxF Q1QgMG8iCitMSU5FIDE6IFNFTEVDVCAwbzsKKyAgICAgICAgXgorU0VMRUNUIDFvOworRVJS T1I6ICB0cmFpbGluZyBqdW5rIGFmdGVyIGRlY2ltYWwgaW50ZWdlciBhdCBvciBuZWFyICJT RUxFQ1QgMW8iCitMSU5FIDE6IFNFTEVDVCAxbzsKKyAgICAgICAgXgorU0VMRUNUIDBvMHg7 CitFUlJPUjogIHRyYWlsaW5nIGp1bmsgYWZ0ZXIgb2N0YWwgaW50ZWdlciBhdCBvciBuZWFy ICJTRUxFQ1QgMG8weCIKK0xJTkUgMTogU0VMRUNUIDBvMHg7CisgICAgICAgIF4KK1NFTEVD VCAweDsKK0VSUk9SOiAgaW52YWxpZCBoZXhhZGVjaW1hbCBpbnRlZ2VyIGF0IG9yIG5lYXIg IlNFTEVDVCAweCIKK0xJTkUgMTogU0VMRUNUIDB4OworICAgICAgICBeCitTRUxFQ1QgMXg7 CitFUlJPUjogIHRyYWlsaW5nIGp1bmsgYWZ0ZXIgZGVjaW1hbCBpbnRlZ2VyIGF0IG9yIG5l YXIgIlNFTEVDVCAxeCIKK0xJTkUgMTogU0VMRUNUIDF4OworICAgICAgICBeCitTRUxFQ1Qg MHgweTsKK0VSUk9SOiAgdHJhaWxpbmcganVuayBhZnRlciBoZXhhZGVjaW1hbCBpbnRlZ2Vy IGF0IG9yIG5lYXIgIlNFTEVDVCAweDB5IgorTElORSAxOiBTRUxFQ1QgMHgweTsKKyAgICAg ICAgXgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbnQ4Lm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW50OC5vdXQKaW5kZXggMzY1NDBlYzQ1Ni4u ZWRkMTVhNDM1MyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbnQ4 Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ludDgub3V0CkBAIC05MzIs MyArOTMyLDIyIEBAIFNFTEVDVCBsY20oKC05MjIzMzcyMDM2ODU0Nzc1ODA4KTo6aW50OCwg MTo6aW50OCk7IC0tIG92ZXJmbG93CiBFUlJPUjogIGJpZ2ludCBvdXQgb2YgcmFuZ2UKIFNF TEVDVCBsY20oOTIyMzM3MjAzNjg1NDc3NTgwNzo6aW50OCwgOTIyMzM3MjAzNjg1NDc3NTgw Njo6aW50OCk7IC0tIG92ZXJmbG93CiBFUlJPUjogIGJpZ2ludCBvdXQgb2YgcmFuZ2UKKy0t IG5vbi1kZWNpbWFsIGxpdGVyYWxzCitTRUxFQ1QgaW50OCAnMGIxMDAxMDEnOworIGludDgg CistLS0tLS0KKyAgIDM3CisoMSByb3cpCisKK1NFTEVDVCBpbnQ4ICcwbzI3Myc7CisgaW50 OCAKKy0tLS0tLQorICAxODcKKygxIHJvdykKKworU0VMRUNUIGludDggJzB4NDJGJzsKKyBp bnQ4IAorLS0tLS0tCisgMTA3MQorKDEgcm93KQorCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9pbnQyLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ludDIuc3FsCmlu ZGV4IDYxM2IzNDQ3MDQuLjBkZWUyMmZlNmQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2ludDIuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ludDIuc3FsCkBA IC0xMTIsMyArMTEyLDEwIEBAIENSRUFURSBUQUJMRSBJTlQyX1RCTChmMSBpbnQyKTsKICAg ICAgICAgICAgICAoMC41OjpudW1lcmljKSwKICAgICAgICAgICAgICAoMS41OjpudW1lcmlj KSwKICAgICAgICAgICAgICAoMi41OjpudW1lcmljKSkgdCh4KTsKKworCistLSBub24tZGVj aW1hbCBsaXRlcmFscworCitTRUxFQ1QgaW50MiAnMGIxMDAxMDEnOworU0VMRUNUIGludDIg JzBvMjczJzsKK1NFTEVDVCBpbnQyICcweDQyRic7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9pbnQ0LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ludDQuc3FsCmlu ZGV4IDU1ZWMwN2ExNDcuLmQ5N2QwMTdmY2EgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2ludDQuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ludDQuc3FsCkBA IC0xNzYsMyArMTc2LDI5IEBAIENSRUFURSBUQUJMRSBJTlQ0X1RCTChmMSBpbnQ0KTsKIAog U0VMRUNUIGxjbSgoLTIxNDc0ODM2NDgpOjppbnQ0LCAxOjppbnQ0KTsgLS0gb3ZlcmZsb3cK IFNFTEVDVCBsY20oMjE0NzQ4MzY0Nzo6aW50NCwgMjE0NzQ4MzY0Njo6aW50NCk7IC0tIG92 ZXJmbG93CisKKworLS0gbm9uLWRlY2ltYWwgbGl0ZXJhbHMKKworU0VMRUNUIGludDQgJzBi MTAwMTAxJzsKK1NFTEVDVCBpbnQ0ICcwbzI3Myc7CitTRUxFQ1QgaW50NCAnMHg0MkYnOwor CistLSBsZXhlciBsaXRlcmFscworCitTRUxFQ1QgMGIxMDAxMDE7CitTRUxFQ1QgMG8yNzM7 CitTRUxFQ1QgMHg0MkY7CisKKy0tIGVycm9yIGNhc2VzCitTRUxFQ1QgMGI7CitTRUxFQ1Qg MWI7CitTRUxFQ1QgMGIweDsKKworU0VMRUNUIDBvOworU0VMRUNUIDFvOworU0VMRUNUIDBv MHg7CisKK1NFTEVDVCAweDsKK1NFTEVDVCAxeDsKK1NFTEVDVCAweDB5OwpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaW50OC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9pbnQ4LnNxbAppbmRleCAzMjk0MGI0ZGFhLi5iN2FkNjk2ZGQ4IDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9pbnQ4LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9pbnQ4LnNxbApAQCAtMjUwLDMgKzI1MCwxMCBAQCBDUkVBVEUgVEFCTEUgSU5UOF9UQkwo cTEgaW50OCwgcTIgaW50OCk7CiAKIFNFTEVDVCBsY20oKC05MjIzMzcyMDM2ODU0Nzc1ODA4 KTo6aW50OCwgMTo6aW50OCk7IC0tIG92ZXJmbG93CiBTRUxFQ1QgbGNtKDkyMjMzNzIwMzY4 NTQ3NzU4MDc6OmludDgsIDkyMjMzNzIwMzY4NTQ3NzU4MDY6OmludDgpOyAtLSBvdmVyZmxv dworCisKKy0tIG5vbi1kZWNpbWFsIGxpdGVyYWxzCisKK1NFTEVDVCBpbnQ4ICcwYjEwMDEw MSc7CitTRUxFQ1QgaW50OCAnMG8yNzMnOworU0VMRUNUIGludDggJzB4NDJGJzsKLS0gCjIu MzMuMQoK --------------DD3923D86C500424D617D1A2--