From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id 1D377385840B for ; Thu, 13 Jan 2022 11:13:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 1D377385840B Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com IronPort-SDR: Zb72bqMsxwPgPhhZbZhIhALkihT9t8OxXs9iklUB+5LKz/IYPRVhuk6f20idH6tWwth2mx4836 yHOH78Rtk488MnRe+mj3pLX919asSM4S4HuRcO5AO5rpI7oN3ImXRU2JNkMB5+XxJGpPZV/Wso Wyv/e4/G8RdDZj0JFPXc90hBDUlLqX/YbU0Nv9vUw0rFSFm5i8dRg9Asy/PP8pm7CoHhjT3+v5 IcknCCElpvML8RUWdeSA7VFA4hed1vfu1veBQnS12KKPgp+9+DVXpoQr7L3k7p9hGwZ0kdSd4Q aEOuLupsqAAfCPgaRxWLG5Cw X-IronPort-AV: E=Sophos;i="5.88,284,1635235200"; d="scan'208";a="70717508" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa2.mentor.iphmx.com with ESMTP; 13 Jan 2022 03:13:57 -0800 IronPort-SDR: s82yTk3S7u9AAzEoJahAg+hKd7kPfR/Yyxuz0Dy9ZVShpkXOuIQJ9lhnRMlczxf5ooPQ6F7avk m/6nbK/nUlmOn9n8eifSwhrQ3uyfA3VIvmZShNCq/j3a4dkyEuLmfno9uA5T9zO6iHmIKqqBlz NS9wix4UDELMghPuxcVRUChK57apF8HJQffu06fB0NrvSelVc/5lnxGgVmrlHbHHc1MpOi9gXe 7Px5xNAWmm7XkW5FeLLWUuZw6ptZy3a9olNq1VJkSSMGO1xnGe0tpw0dKEOEmfOlxNcaL4Yfxd JVU= Content-Type: multipart/mixed; boundary="------------1bCh4oZVdhfpQFC0vJbuLmVK" Message-ID: <93ae0df7-6cb9-40de-81e6-768029ca49fc@codesourcery.com> Date: Thu, 13 Jan 2022 11:13:51 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: Re: [PATCH] libgomp, OpenMP, nvptx: Low-latency memory allocator Content-Language: en-GB From: Andrew Stubbs To: Tom de Vries , "gcc-patches@gcc.gnu.org" CC: Jakub Jelinek , Tobias Burnus References: <25ad524d-f0d6-1970-b8e9-9b11b6cde68b@codesourcery.com> <42c70624-2b10-340c-8945-601203768d48@suse.de> <664653d3-cf64-b800-6ffb-c27e50dc15bf@suse.de> <5e75a64c-a8d3-2d2a-162a-a3ea79358b48@suse.de> <3e39c39d-2753-f08c-5fb7-85051cafab85@suse.de> <985755ee-f7bd-7d47-1ea0-1ca980117f6d@codesourcery.com> In-Reply-To: <985755ee-f7bd-7d47-1ea0-1ca980117f6d@codesourcery.com> X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-10.mgc.mentorg.com (139.181.222.10) To svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_SHORT, NICE_REPLY_A, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Jan 2022 11:14:04 -0000 --------------1bCh4oZVdhfpQFC0vJbuLmVK Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit Updated patch: this version fixes some missed cases of malloc in the realloc implementation. It also reworks the unused variable workarounds so that the work better with my reworked pinned memory patches I've not posted yet. Andrew --------------1bCh4oZVdhfpQFC0vJbuLmVK Content-Type: text/plain; charset="UTF-8"; name="220113-low-latency-allocator.patch" Content-Disposition: attachment; filename="220113-low-latency-allocator.patch" Content-Transfer-Encoding: base64 bGliZ29tcCwgbnZwdHg6IGxvdy1sYXRlbmN5IG1lbW9yeSBhbGxvY2F0b3IKClRoaXMgcGF0 Y2ggYWRkcyBzdXBwb3J0IGZvciBhbGxvY2F0aW5nIGxvdy1sYXRlbmN5ICIuc2hhcmVkIiBt ZW1vcnkgb24KTlZQVFggR1BVIGRldmljZSwgdmlhIHRoZSBvbXBfbG93X2xhdF9tZW1fc3Bh Y2UgYW5kIG9tcF9hbGxvYy4gIFRoZSBtZW1vcnkKY2FuIGJlIGFsbG9jYXRlZCwgcmVhbGxv Y2F0ZWQsIGFuZCBmcmVlZCB1c2luZyBhIGJhc2ljIGJ1dCBmYXN0IGFsZ29yaXRobSwKaXMg dGhyZWFkIHNhZmUgYW5kIHRoZSBzaXplIG9mIHRoZSBsb3ctbGF0ZW5jeSBoZWFwIGNhbiBi ZSBjb25maWd1cmVkIHVzaW5nCnRoZSBHT01QX05WUFRYX0xPV0xBVF9QT09MIGVudmlyb25t ZW50IHZhcmlhYmxlLgoKVGhlIHVzZSBvZiB0aGUgUFRYIGR5bmFtaWNfc21lbV9zaXplIGZl YXR1cmUgbWVhbnMgdGhhdCB0aGUgbWluaW11bSB2ZXJzaW9uCnJlcXVpcmVtZW50IGlzIG5v dyBidW1wZWQgdG8gNC4xIChzdGlsbCBvbGQgYXQgdGhpcyBwb2ludCkuCgpsaWJnb21wL0No YW5nZUxvZzoKCgkqIGFsbG9jYXRvci5jIChNRU1TUEFDRV9BTExPQyk6IE5ldyBtYWNyby4K CShNRU1TUEFDRV9DQUxMT0MpOiBOZXcgbWFjcm8uCgkoTUVNU1BBQ0VfUkVBTExPQyk6IE5l dyBtYWNyby4KCShNRU1TUEFDRV9GUkVFKTogTmV3IG1hY3JvLgoJKGR5bmFtaWNfc21lbV9z aXplKTogTmV3IGNvbnN0YW50cy4KCShvbXBfYWxsb2MpOiBVc2UgTUVNU1BBQ0VfQUxMT0Mu CglJbXBsZW1lbnQgZmFsbC1iYWNrcyBmb3IgcHJlZGVmaW5lZCBhbGxvY2F0b3JzLgoJKG9t cF9mcmVlKTogVXNlIE1FTVNQQUNFX0ZSRUUuCgkob21wX2NhbGxvYyk6IFVzZSBNRU1TUEFD RV9DQUxMT0MuCglJbXBsZW1lbnQgZmFsbC1iYWNrcyBmb3IgcHJlZGVmaW5lZCBhbGxvY2F0 b3JzLgoJKG9tcF9yZWFsbG9jKTogVXNlIE1FTVNQQUNFX1JFQUxMT0MgYW5kIE1FTVNQQUNF X0FMTE9DLi4KCUltcGxlbWVudCBmYWxsLWJhY2tzIGZvciBwcmVkZWZpbmVkIGFsbG9jYXRv cnMuCgkqIGNvbmZpZy9udnB0eC90ZWFtLmMgKF9fbnZwdHhfbG93bGF0X2hlYXBfcm9vdCk6 IE5ldyB2YXJpYWJsZS4KCShfX252cHR4X2xvd2xhdF9wb29sKTogTmV3IGFzbSB2YXJhaWJs ZS4KCShnb21wX252cHR4X21haW4pOiBJbml0aWFsaXplIHRoZSBsb3ctbGF0ZW5jeSBoZWFw LgoJKiBwbHVnaW4vcGx1Z2luLW52cHR4LmMgKGxvd2xhdF9wb29sX3NpemUpOiBOZXcgdmFy aWFibGUuCgkoR09NUF9PRkZMT0FEX2luaXRfZGV2aWNlKTogUmVhZCB0aGUgR09NUF9OVlBU WF9MT1dMQVRfUE9PTCBlbnZ2YXIuCgkoR09NUF9PRkZMT0FEX3J1bik6IEFwcGx5IGxvd2xh dF9wb29sX3NpemUuCgkqIGNvbmZpZy9udnB0eC9hbGxvY2F0b3IuYzogTmV3IGZpbGUuCgkq IHRlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy0xLmM6IE5ldyB0ZXN0LgoJKiB0ZXN0 c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRvcnMtMi5jOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRl L2xpYmdvbXAuYy9hbGxvY2F0b3JzLTMuYzogTmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS9saWJn b21wLmMvYWxsb2NhdG9ycy00LmM6IE5ldyB0ZXN0LgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5j L2FsbG9jYXRvcnMtNS5jOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxv Y2F0b3JzLTYuYzogTmV3IHRlc3QuCgpkaWZmIC0tZ2l0IGEvbGliZ29tcC9hbGxvY2F0b3Iu YyBiL2xpYmdvbXAvYWxsb2NhdG9yLmMKaW5kZXggMDdhNTY0NWY0Y2MuLjFjYzc0ODZmYzRj IDEwMDY0NAotLS0gYS9saWJnb21wL2FsbG9jYXRvci5jCisrKyBiL2xpYmdvbXAvYWxsb2Nh dG9yLmMKQEAgLTM0LDYgKzM0LDM0IEBACiAKICNkZWZpbmUgb21wX21heF9wcmVkZWZpbmVk X2FsbG9jIG9tcF90aHJlYWRfbWVtX2FsbG9jCiAKKy8qIFRoZXNlIG1hY3JvcyBtYXkgYmUg b3ZlcnJpZGRlbiBpbiBjb25maWcvPHRhcmdldD4vYWxsb2NhdG9yLmMuICAqLworI2lmbmRl ZiBNRU1TUEFDRV9BTExPQworI2RlZmluZSBNRU1TUEFDRV9BTExPQyhNRU1TUEFDRSwgU0la RSkgbWFsbG9jIChTSVpFKQorI2VuZGlmCisjaWZuZGVmIE1FTVNQQUNFX0NBTExPQworI2Rl ZmluZSBNRU1TUEFDRV9DQUxMT0MoTUVNU1BBQ0UsIFNJWkUpIGNhbGxvYyAoMSwgU0laRSkK KyNlbmRpZgorI2lmbmRlZiBNRU1TUEFDRV9SRUFMTE9DCisjZGVmaW5lIE1FTVNQQUNFX1JF QUxMT0MoTUVNU1BBQ0UsIEFERFIsIE9MRFNJWkUsIFNJWkUpIHJlYWxsb2MgKEFERFIsIFNJ WkUpCisjZW5kaWYKKyNpZm5kZWYgTUVNU1BBQ0VfRlJFRQorI2RlZmluZSBNRU1TUEFDRV9G UkVFKE1FTVNQQUNFLCBBRERSLCBTSVpFKSBmcmVlIChBRERSKQorI2VuZGlmCisKKy8qIE1h cCB0aGUgcHJlZGVmaW5lZCBhbGxvY2F0b3JzIHRvIHRoZSBjb3JyZWN0IG1lbW9yeSBzcGFj ZS4KKyAgIFRoZSBpbmRleCB0byB0aGlzIHRhYmxlIGlzIHRoZSBvbXBfYWxsb2NhdG9yX2hh bmRsZV90IGVudW0gdmFsdWUuICAqLworc3RhdGljIGNvbnN0IG9tcF9tZW1zcGFjZV9oYW5k bGVfdCBwcmVkZWZpbmVkX2FsbG9jX21hcHBpbmdbXSA9IHsKKyAgb21wX2RlZmF1bHRfbWVt X3NwYWNlLCAgIC8qIG9tcF9udWxsX2FsbG9jYXRvci4gKi8KKyAgb21wX2RlZmF1bHRfbWVt X3NwYWNlLCAgIC8qIG9tcF9kZWZhdWx0X21lbV9hbGxvYy4gKi8KKyAgb21wX2xhcmdlX2Nh cF9tZW1fc3BhY2UsIC8qIG9tcF9sYXJnZV9jYXBfbWVtX2FsbG9jLiAqLworICBvbXBfZGVm YXVsdF9tZW1fc3BhY2UsICAgLyogb21wX2NvbnN0X21lbV9hbGxvYy4gKi8KKyAgb21wX2hp Z2hfYndfbWVtX3NwYWNlLCAgIC8qIG9tcF9oaWdoX2J3X21lbV9hbGxvYy4gKi8KKyAgb21w X2xvd19sYXRfbWVtX3NwYWNlLCAgIC8qIG9tcF9sb3dfbGF0X21lbV9hbGxvYy4gKi8KKyAg b21wX2xvd19sYXRfbWVtX3NwYWNlLCAgIC8qIG9tcF9jZ3JvdXBfbWVtX2FsbG9jLiAqLwor ICBvbXBfbG93X2xhdF9tZW1fc3BhY2UsICAgLyogb21wX3B0ZWFtX21lbV9hbGxvYy4gKi8K KyAgb21wX2xvd19sYXRfbWVtX3NwYWNlLCAgIC8qIG9tcF90aHJlYWRfbWVtX2FsbG9jLiAq LworfTsKKwogc3RydWN0IG9tcF9hbGxvY2F0b3JfZGF0YQogewogICBvbXBfbWVtc3BhY2Vf aGFuZGxlX3QgbWVtc3BhY2U7CkBAIC0yODEsNyArMzA5LDcgQEAgcmV0cnk6CiAgICAgICBh bGxvY2F0b3JfZGF0YS0+dXNlZF9wb29sX3NpemUgPSB1c2VkX3Bvb2xfc2l6ZTsKICAgICAg IGdvbXBfbXV0ZXhfdW5sb2NrICgmYWxsb2NhdG9yX2RhdGEtPmxvY2spOwogI2VuZGlmCi0g ICAgICBwdHIgPSBtYWxsb2MgKG5ld19zaXplKTsKKyAgICAgIHB0ciA9IE1FTVNQQUNFX0FM TE9DIChhbGxvY2F0b3JfZGF0YS0+bWVtc3BhY2UsIG5ld19zaXplKTsKICAgICAgIGlmIChw dHIgPT0gTlVMTCkKIAl7CiAjaWZkZWYgSEFWRV9TWU5DX0JVSUxUSU5TCkBAIC0yOTcsNyAr MzI1LDExIEBAIHJldHJ5OgogICAgIH0KICAgZWxzZQogICAgIHsKLSAgICAgIHB0ciA9IG1h bGxvYyAobmV3X3NpemUpOworICAgICAgb21wX21lbXNwYWNlX2hhbmRsZV90IG1lbXNwYWNl IF9fYXR0cmlidXRlX18oKHVudXNlZCkpCisJPSAoYWxsb2NhdG9yX2RhdGEKKwkgICA/IGFs bG9jYXRvcl9kYXRhLT5tZW1zcGFjZQorCSAgIDogcHJlZGVmaW5lZF9hbGxvY19tYXBwaW5n W2FsbG9jYXRvcl0pOworICAgICAgcHRyID0gTUVNU1BBQ0VfQUxMT0MgKG1lbXNwYWNlLCBu ZXdfc2l6ZSk7CiAgICAgICBpZiAocHRyID09IE5VTEwpCiAJZ290byBmYWlsOwogICAgIH0K QEAgLTMxNSwzMiArMzQ3LDM1IEBAIHJldHJ5OgogICByZXR1cm4gcmV0OwogCiBmYWlsOgot ICBpZiAoYWxsb2NhdG9yX2RhdGEpCisgIGludCBmYWxsYmFjayA9IChhbGxvY2F0b3JfZGF0 YQorCQkgID8gYWxsb2NhdG9yX2RhdGEtPmZhbGxiYWNrCisJCSAgOiBhbGxvY2F0b3IgPT0g b21wX2RlZmF1bHRfbWVtX2FsbG9jCisJCSAgPyBvbXBfYXR2X251bGxfZmIKKwkJICA6IG9t cF9hdHZfZGVmYXVsdF9tZW1fZmIpOworICBzd2l0Y2ggKGZhbGxiYWNrKQogICAgIHsKLSAg ICAgIHN3aXRjaCAoYWxsb2NhdG9yX2RhdGEtPmZhbGxiYWNrKQorICAgIGNhc2Ugb21wX2F0 dl9kZWZhdWx0X21lbV9mYjoKKyAgICAgIGlmICgobmV3X2FsaWdubWVudCA+IHNpemVvZiAo dm9pZCAqKSAmJiBuZXdfYWxpZ25tZW50ID4gYWxpZ25tZW50KQorCSAgfHwgKGFsbG9jYXRv cl9kYXRhCisJICAgICAgJiYgYWxsb2NhdG9yX2RhdGEtPnBvb2xfc2l6ZSA8IH4odWludHB0 cl90KSAwKQorCSAgfHwgIWFsbG9jYXRvcl9kYXRhKQogCXsKLQljYXNlIG9tcF9hdHZfZGVm YXVsdF9tZW1fZmI6Ci0JICBpZiAoKG5ld19hbGlnbm1lbnQgPiBzaXplb2YgKHZvaWQgKikg JiYgbmV3X2FsaWdubWVudCA+IGFsaWdubWVudCkKLQkgICAgICB8fCAoYWxsb2NhdG9yX2Rh dGEKLQkJICAmJiBhbGxvY2F0b3JfZGF0YS0+cG9vbF9zaXplIDwgfih1aW50cHRyX3QpIDAp KQotCSAgICB7Ci0JICAgICAgYWxsb2NhdG9yID0gb21wX2RlZmF1bHRfbWVtX2FsbG9jOwot CSAgICAgIGdvdG8gcmV0cnk7Ci0JICAgIH0KLQkgIC8qIE90aGVyd2lzZSwgd2UndmUgYWxy ZWFkeSBwZXJmb3JtZWQgZGVmYXVsdCBtZW0gYWxsb2NhdGlvbgotCSAgICAgYW5kIGlmIHRo YXQgZmFpbGVkLCBpdCB3b24ndCBzdWNjZWVkIGFnYWluICh1bmxlc3MgaXQgd2FzCi0JICAg ICBpbnRlcm1pdHRlbnQuICBSZXR1cm4gTlVMTCB0aGVuLCBhcyB0aGF0IGlzIHRoZSBmYWxs YmFjay4gICovCi0JICBicmVhazsKLQljYXNlIG9tcF9hdHZfbnVsbF9mYjoKLQkgIGJyZWFr OwotCWRlZmF1bHQ6Ci0JY2FzZSBvbXBfYXR2X2Fib3J0X2ZiOgotCSAgZ29tcF9mYXRhbCAo Ik91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyAlbHUgYnl0ZXMiLAotCQkgICAgICAodW5zaWdu ZWQgbG9uZykgc2l6ZSk7Ci0JY2FzZSBvbXBfYXR2X2FsbG9jYXRvcl9mYjoKLQkgIGFsbG9j YXRvciA9IGFsbG9jYXRvcl9kYXRhLT5mYl9kYXRhOworCSAgYWxsb2NhdG9yID0gb21wX2Rl ZmF1bHRfbWVtX2FsbG9jOwogCSAgZ290byByZXRyeTsKIAl9CisgICAgICAvKiBPdGhlcndp c2UsIHdlJ3ZlIGFscmVhZHkgcGVyZm9ybWVkIGRlZmF1bHQgbWVtIGFsbG9jYXRpb24KKwkg YW5kIGlmIHRoYXQgZmFpbGVkLCBpdCB3b24ndCBzdWNjZWVkIGFnYWluICh1bmxlc3MgaXQg d2FzCisJIGludGVybWl0dGVudC4gIFJldHVybiBOVUxMIHRoZW4sIGFzIHRoYXQgaXMgdGhl IGZhbGxiYWNrLiAgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2Ugb21wX2F0dl9udWxsX2Zi OgorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICBjYXNlIG9tcF9hdHZfYWJvcnRf ZmI6CisgICAgICBnb21wX2ZhdGFsICgiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nICVsdSBi eXRlcyIsCisJCSAgKHVuc2lnbmVkIGxvbmcpIHNpemUpOworICAgIGNhc2Ugb21wX2F0dl9h bGxvY2F0b3JfZmI6CisgICAgICBhbGxvY2F0b3IgPSBhbGxvY2F0b3JfZGF0YS0+ZmJfZGF0 YTsKKyAgICAgIGdvdG8gcmV0cnk7CiAgICAgfQogICByZXR1cm4gTlVMTDsKIH0KQEAgLTM3 Myw2ICs0MDgsOCBAQCB2b2lkCiBvbXBfZnJlZSAodm9pZCAqcHRyLCBvbXBfYWxsb2NhdG9y X2hhbmRsZV90IGFsbG9jYXRvcikKIHsKICAgc3RydWN0IG9tcF9tZW1faGVhZGVyICpkYXRh OworICBvbXBfbWVtc3BhY2VfaGFuZGxlX3QgbWVtc3BhY2UgX19hdHRyaWJ1dGVfXygodW51 c2VkKSkKKyAgICA9IG9tcF9kZWZhdWx0X21lbV9zcGFjZTsKIAogICBpZiAocHRyID09IE5V TEwpCiAgICAgcmV0dXJuOwpAQCAtMzkzLDggKzQzMCwxMyBAQCBvbXBfZnJlZSAodm9pZCAq cHRyLCBvbXBfYWxsb2NhdG9yX2hhbmRsZV90IGFsbG9jYXRvcikKIAkgIGdvbXBfbXV0ZXhf dW5sb2NrICgmYWxsb2NhdG9yX2RhdGEtPmxvY2spOwogI2VuZGlmCiAJfQorCisgICAgICBt ZW1zcGFjZSA9IGFsbG9jYXRvcl9kYXRhLT5tZW1zcGFjZTsKICAgICB9Ci0gIGZyZWUgKGRh dGEtPnB0cik7CisgIGVsc2UKKyAgICBtZW1zcGFjZSA9IHByZWRlZmluZWRfYWxsb2NfbWFw cGluZ1tkYXRhLT5hbGxvY2F0b3JdOworCisgIE1FTVNQQUNFX0ZSRUUgKG1lbXNwYWNlLCBk YXRhLT5wdHIsIGRhdGEtPnNpemUpOwogfQogCiBpYWxpYXMgKG9tcF9mcmVlKQpAQCAtNDgy LDcgKzUyNCw3IEBAIHJldHJ5OgogICAgICAgYWxsb2NhdG9yX2RhdGEtPnVzZWRfcG9vbF9z aXplID0gdXNlZF9wb29sX3NpemU7CiAgICAgICBnb21wX211dGV4X3VubG9jayAoJmFsbG9j YXRvcl9kYXRhLT5sb2NrKTsKICNlbmRpZgotICAgICAgcHRyID0gY2FsbG9jICgxLCBuZXdf c2l6ZSk7CisgICAgICBwdHIgPSBNRU1TUEFDRV9DQUxMT0MgKGFsbG9jYXRvcl9kYXRhLT5t ZW1zcGFjZSwgbmV3X3NpemUpOwogICAgICAgaWYgKHB0ciA9PSBOVUxMKQogCXsKICNpZmRl ZiBIQVZFX1NZTkNfQlVJTFRJTlMKQEAgLTQ5OCw3ICs1NDAsMTEgQEAgcmV0cnk6CiAgICAg fQogICBlbHNlCiAgICAgewotICAgICAgcHRyID0gY2FsbG9jICgxLCBuZXdfc2l6ZSk7Cisg ICAgICBvbXBfbWVtc3BhY2VfaGFuZGxlX3QgbWVtc3BhY2UgX19hdHRyaWJ1dGVfXygodW51 c2VkKSkKKwk9IChhbGxvY2F0b3JfZGF0YQorCSAgID8gYWxsb2NhdG9yX2RhdGEtPm1lbXNw YWNlCisJICAgOiBwcmVkZWZpbmVkX2FsbG9jX21hcHBpbmdbYWxsb2NhdG9yXSk7CisgICAg ICBwdHIgPSBNRU1TUEFDRV9DQUxMT0MgKG1lbXNwYWNlLCBuZXdfc2l6ZSk7CiAgICAgICBp ZiAocHRyID09IE5VTEwpCiAJZ290byBmYWlsOwogICAgIH0KQEAgLTUxNiwzMiArNTYyLDM1 IEBAIHJldHJ5OgogICByZXR1cm4gcmV0OwogCiBmYWlsOgotICBpZiAoYWxsb2NhdG9yX2Rh dGEpCisgIGludCBmYWxsYmFjayA9IChhbGxvY2F0b3JfZGF0YQorCQkgID8gYWxsb2NhdG9y X2RhdGEtPmZhbGxiYWNrCisJCSAgOiBhbGxvY2F0b3IgPT0gb21wX2RlZmF1bHRfbWVtX2Fs bG9jCisJCSAgPyBvbXBfYXR2X251bGxfZmIKKwkJICA6IG9tcF9hdHZfZGVmYXVsdF9tZW1f ZmIpOworICBzd2l0Y2ggKGZhbGxiYWNrKQogICAgIHsKLSAgICAgIHN3aXRjaCAoYWxsb2Nh dG9yX2RhdGEtPmZhbGxiYWNrKQorICAgIGNhc2Ugb21wX2F0dl9kZWZhdWx0X21lbV9mYjoK KyAgICAgIGlmICgobmV3X2FsaWdubWVudCA+IHNpemVvZiAodm9pZCAqKSAmJiBuZXdfYWxp Z25tZW50ID4gYWxpZ25tZW50KQorCSAgfHwgKGFsbG9jYXRvcl9kYXRhCisJICAgICAgJiYg YWxsb2NhdG9yX2RhdGEtPnBvb2xfc2l6ZSA8IH4odWludHB0cl90KSAwKQorCSAgfHwgIWFs bG9jYXRvcl9kYXRhKQogCXsKLQljYXNlIG9tcF9hdHZfZGVmYXVsdF9tZW1fZmI6Ci0JICBp ZiAoKG5ld19hbGlnbm1lbnQgPiBzaXplb2YgKHZvaWQgKikgJiYgbmV3X2FsaWdubWVudCA+ IGFsaWdubWVudCkKLQkgICAgICB8fCAoYWxsb2NhdG9yX2RhdGEKLQkJICAmJiBhbGxvY2F0 b3JfZGF0YS0+cG9vbF9zaXplIDwgfih1aW50cHRyX3QpIDApKQotCSAgICB7Ci0JICAgICAg YWxsb2NhdG9yID0gb21wX2RlZmF1bHRfbWVtX2FsbG9jOwotCSAgICAgIGdvdG8gcmV0cnk7 Ci0JICAgIH0KLQkgIC8qIE90aGVyd2lzZSwgd2UndmUgYWxyZWFkeSBwZXJmb3JtZWQgZGVm YXVsdCBtZW0gYWxsb2NhdGlvbgotCSAgICAgYW5kIGlmIHRoYXQgZmFpbGVkLCBpdCB3b24n dCBzdWNjZWVkIGFnYWluICh1bmxlc3MgaXQgd2FzCi0JICAgICBpbnRlcm1pdHRlbnQuICBS ZXR1cm4gTlVMTCB0aGVuLCBhcyB0aGF0IGlzIHRoZSBmYWxsYmFjay4gICovCi0JICBicmVh azsKLQljYXNlIG9tcF9hdHZfbnVsbF9mYjoKLQkgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JY2Fz ZSBvbXBfYXR2X2Fib3J0X2ZiOgotCSAgZ29tcF9mYXRhbCAoIk91dCBvZiBtZW1vcnkgYWxs b2NhdGluZyAlbHUgYnl0ZXMiLAotCQkgICAgICAodW5zaWduZWQgbG9uZykgKHNpemUgKiBu bWVtYikpOwotCWNhc2Ugb21wX2F0dl9hbGxvY2F0b3JfZmI6Ci0JICBhbGxvY2F0b3IgPSBh bGxvY2F0b3JfZGF0YS0+ZmJfZGF0YTsKKwkgIGFsbG9jYXRvciA9IG9tcF9kZWZhdWx0X21l bV9hbGxvYzsKIAkgIGdvdG8gcmV0cnk7CiAJfQorICAgICAgLyogT3RoZXJ3aXNlLCB3ZSd2 ZSBhbHJlYWR5IHBlcmZvcm1lZCBkZWZhdWx0IG1lbSBhbGxvY2F0aW9uCisJIGFuZCBpZiB0 aGF0IGZhaWxlZCwgaXQgd29uJ3Qgc3VjY2VlZCBhZ2FpbiAodW5sZXNzIGl0IHdhcworCSBp bnRlcm1pdHRlbnQuICBSZXR1cm4gTlVMTCB0aGVuLCBhcyB0aGF0IGlzIHRoZSBmYWxsYmFj ay4gICovCisgICAgICBicmVhazsKKyAgICBjYXNlIG9tcF9hdHZfbnVsbF9mYjoKKyAgICAg IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgY2FzZSBvbXBfYXR2X2Fib3J0X2ZiOgorICAg ICAgZ29tcF9mYXRhbCAoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyAlbHUgYnl0ZXMiLAor CQkgICh1bnNpZ25lZCBsb25nKSAoc2l6ZSAqIG5tZW1iKSk7CisgICAgY2FzZSBvbXBfYXR2 X2FsbG9jYXRvcl9mYjoKKyAgICAgIGFsbG9jYXRvciA9IGFsbG9jYXRvcl9kYXRhLT5mYl9k YXRhOworICAgICAgZ290byByZXRyeTsKICAgICB9CiAgIHJldHVybiBOVUxMOwogfQpAQCAt NjYwLDkgKzcwOSwxMCBAQCByZXRyeToKICAgICAgIGdvbXBfbXV0ZXhfdW5sb2NrICgmYWxs b2NhdG9yX2RhdGEtPmxvY2spOwogI2VuZGlmCiAgICAgICBpZiAocHJldl9zaXplKQotCW5l d19wdHIgPSByZWFsbG9jIChkYXRhLT5wdHIsIG5ld19zaXplKTsKKwluZXdfcHRyID0gTUVN U1BBQ0VfUkVBTExPQyAoYWxsb2NhdG9yX2RhdGEtPm1lbXNwYWNlLCBkYXRhLT5wdHIsCisJ CQkJICAgIGRhdGEtPnNpemUsIG5ld19zaXplKTsKICAgICAgIGVsc2UKLQluZXdfcHRyID0g bWFsbG9jIChuZXdfc2l6ZSk7CisJbmV3X3B0ciA9IE1FTVNQQUNFX0FMTE9DIChhbGxvY2F0 b3JfZGF0YS0+bWVtc3BhY2UsIG5ld19zaXplKTsKICAgICAgIGlmIChuZXdfcHRyID09IE5V TEwpCiAJewogI2lmZGVmIEhBVkVfU1lOQ19CVUlMVElOUwpAQCAtNjkwLDcgKzc0MCwxMSBA QCByZXRyeToKIAkgICAmJiAoZnJlZV9hbGxvY2F0b3JfZGF0YSA9PSBOVUxMCiAJICAgICAg IHx8IGZyZWVfYWxsb2NhdG9yX2RhdGEtPnBvb2xfc2l6ZSA9PSB+KHVpbnRwdHJfdCkgMCkp CiAgICAgewotICAgICAgbmV3X3B0ciA9IHJlYWxsb2MgKGRhdGEtPnB0ciwgbmV3X3NpemUp OworICAgICAgb21wX21lbXNwYWNlX2hhbmRsZV90IG1lbXNwYWNlIF9fYXR0cmlidXRlX18o KHVudXNlZCkpCisJPSAoYWxsb2NhdG9yX2RhdGEKKwkgICA/IGFsbG9jYXRvcl9kYXRhLT5t ZW1zcGFjZQorCSAgIDogcHJlZGVmaW5lZF9hbGxvY19tYXBwaW5nW2FsbG9jYXRvcl0pOwor ICAgICAgbmV3X3B0ciA9IE1FTVNQQUNFX1JFQUxMT0MgKG1lbXNwYWNlLCBkYXRhLT5wdHIs IGRhdGEtPnNpemUsIG5ld19zaXplKTsKICAgICAgIGlmIChuZXdfcHRyID09IE5VTEwpCiAJ Z290byBmYWlsOwogICAgICAgcmV0ID0gKGNoYXIgKikgbmV3X3B0ciArIHNpemVvZiAoc3Ry dWN0IG9tcF9tZW1faGVhZGVyKTsKQEAgLTcwMSw3ICs3NTUsMTEgQEAgcmV0cnk6CiAgICAg fQogICBlbHNlCiAgICAgewotICAgICAgbmV3X3B0ciA9IG1hbGxvYyAobmV3X3NpemUpOwor ICAgICAgb21wX21lbXNwYWNlX2hhbmRsZV90IG1lbXNwYWNlIF9fYXR0cmlidXRlX18oKHVu dXNlZCkpCisJPSAoYWxsb2NhdG9yX2RhdGEKKwkgICA/IGFsbG9jYXRvcl9kYXRhLT5tZW1z cGFjZQorCSAgIDogcHJlZGVmaW5lZF9hbGxvY19tYXBwaW5nW2FsbG9jYXRvcl0pOworICAg ICAgbmV3X3B0ciA9IE1FTVNQQUNFX0FMTE9DIChtZW1zcGFjZSwgbmV3X3NpemUpOwogICAg ICAgaWYgKG5ld19wdHIgPT0gTlVMTCkKIAlnb3RvIGZhaWw7CiAgICAgfQpAQCAtNzM1LDMy ICs3OTMsMzUgQEAgcmV0cnk6CiAgIHJldHVybiByZXQ7CiAKIGZhaWw6Ci0gIGlmIChhbGxv Y2F0b3JfZGF0YSkKKyAgaW50IGZhbGxiYWNrID0gKGFsbG9jYXRvcl9kYXRhCisJCSAgPyBh bGxvY2F0b3JfZGF0YS0+ZmFsbGJhY2sKKwkJICA6IGFsbG9jYXRvciA9PSBvbXBfZGVmYXVs dF9tZW1fYWxsb2MKKwkJICA/IG9tcF9hdHZfbnVsbF9mYgorCQkgIDogb21wX2F0dl9kZWZh dWx0X21lbV9mYik7CisgIHN3aXRjaCAoZmFsbGJhY2spCiAgICAgewotICAgICAgc3dpdGNo IChhbGxvY2F0b3JfZGF0YS0+ZmFsbGJhY2spCisgICAgY2FzZSBvbXBfYXR2X2RlZmF1bHRf bWVtX2ZiOgorICAgICAgaWYgKG5ld19hbGlnbm1lbnQgPiBzaXplb2YgKHZvaWQgKikKKwkg IHx8IChhbGxvY2F0b3JfZGF0YQorCSAgICAgICYmIGFsbG9jYXRvcl9kYXRhLT5wb29sX3Np emUgPCB+KHVpbnRwdHJfdCkgMCkKKwkgIHx8ICFhbGxvY2F0b3JfZGF0YSkKIAl7Ci0JY2Fz ZSBvbXBfYXR2X2RlZmF1bHRfbWVtX2ZiOgotCSAgaWYgKG5ld19hbGlnbm1lbnQgPiBzaXpl b2YgKHZvaWQgKikKLQkgICAgICB8fCAoYWxsb2NhdG9yX2RhdGEKLQkJICAmJiBhbGxvY2F0 b3JfZGF0YS0+cG9vbF9zaXplIDwgfih1aW50cHRyX3QpIDApKQotCSAgICB7Ci0JICAgICAg YWxsb2NhdG9yID0gb21wX2RlZmF1bHRfbWVtX2FsbG9jOwotCSAgICAgIGdvdG8gcmV0cnk7 Ci0JICAgIH0KLQkgIC8qIE90aGVyd2lzZSwgd2UndmUgYWxyZWFkeSBwZXJmb3JtZWQgZGVm YXVsdCBtZW0gYWxsb2NhdGlvbgotCSAgICAgYW5kIGlmIHRoYXQgZmFpbGVkLCBpdCB3b24n dCBzdWNjZWVkIGFnYWluICh1bmxlc3MgaXQgd2FzCi0JICAgICBpbnRlcm1pdHRlbnQuICBS ZXR1cm4gTlVMTCB0aGVuLCBhcyB0aGF0IGlzIHRoZSBmYWxsYmFjay4gICovCi0JICBicmVh azsKLQljYXNlIG9tcF9hdHZfbnVsbF9mYjoKLQkgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JY2Fz ZSBvbXBfYXR2X2Fib3J0X2ZiOgotCSAgZ29tcF9mYXRhbCAoIk91dCBvZiBtZW1vcnkgYWxs b2NhdGluZyAlbHUgYnl0ZXMiLAotCQkgICAgICAodW5zaWduZWQgbG9uZykgc2l6ZSk7Ci0J Y2FzZSBvbXBfYXR2X2FsbG9jYXRvcl9mYjoKLQkgIGFsbG9jYXRvciA9IGFsbG9jYXRvcl9k YXRhLT5mYl9kYXRhOworCSAgYWxsb2NhdG9yID0gb21wX2RlZmF1bHRfbWVtX2FsbG9jOwog CSAgZ290byByZXRyeTsKIAl9CisgICAgICAvKiBPdGhlcndpc2UsIHdlJ3ZlIGFscmVhZHkg cGVyZm9ybWVkIGRlZmF1bHQgbWVtIGFsbG9jYXRpb24KKwkgYW5kIGlmIHRoYXQgZmFpbGVk LCBpdCB3b24ndCBzdWNjZWVkIGFnYWluICh1bmxlc3MgaXQgd2FzCisJIGludGVybWl0dGVu dC4gIFJldHVybiBOVUxMIHRoZW4sIGFzIHRoYXQgaXMgdGhlIGZhbGxiYWNrLiAgKi8KKyAg ICAgIGJyZWFrOworICAgIGNhc2Ugb21wX2F0dl9udWxsX2ZiOgorICAgICAgYnJlYWs7Cisg ICAgZGVmYXVsdDoKKyAgICBjYXNlIG9tcF9hdHZfYWJvcnRfZmI6CisgICAgICBnb21wX2Zh dGFsICgiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nICVsdSBieXRlcyIsCisJCSAgKHVuc2ln bmVkIGxvbmcpIHNpemUpOworICAgIGNhc2Ugb21wX2F0dl9hbGxvY2F0b3JfZmI6CisgICAg ICBhbGxvY2F0b3IgPSBhbGxvY2F0b3JfZGF0YS0+ZmJfZGF0YTsKKyAgICAgIGdvdG8gcmV0 cnk7CiAgICAgfQogICByZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2xpYmdvbXAvY29u ZmlnL252cHR4L2FsbG9jYXRvci5jIGIvbGliZ29tcC9jb25maWcvbnZwdHgvYWxsb2NhdG9y LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjZiYzJlYTQ4MDQz Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC9jb25maWcvbnZwdHgvYWxsb2NhdG9yLmMK QEAgLTAsMCArMSwzNzAgQEAKKy8qIENvcHlyaWdodCAoQykgMjAyMSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBP ZmZsb2FkaW5nIGFuZCBNdWx0aSBQcm9jZXNzaW5nIExpYnJhcnkKKyAgIChsaWJnb21wKS4K KworICAgTGliZ29tcCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQor ICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIExpYmdvbXAgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCisgICBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTCisgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICAgbW9yZSBkZXRhaWxzLgor CisgICBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVk IGFkZGl0aW9uYWwKKyAgIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRp bWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKyAgIDMuMSwgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAor ICAgYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbTsKKyAgIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJ TkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorICAgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogVGhlIGxvdy1sYXRlbmN5IGFsbG9jYXRv cnMgdXNlIHNwYWNlIHJlc2VydmVkIGluIC5zaGFyZWQgbWVtb3J5IHdoZW4gdGhlCisgICBr ZXJuZWwgaXMgbGF1bmNoZWQuICBUaGUgaGVhcCBpcyBpbml0aWFsaXplZCBpbiBnb21wX252 cHR4X21haW4gYW5kIGFsbAorICAgYWxsb2NhdGlvbnMgYXJlIGZvcmdvdHRlbiB3aGVuIHRo ZSBrZXJuZWwgZXhpdHMuICBBbGxvY2F0aW9ucyB0byBvdGhlcgorICAgbWVtb3J5IHNwYWNl cyBhbGwgdXNlIHRoZSBzeXN0ZW0gbWFsbG9jIHN5c2NhbGwuCisKKyAgIFRoZSByb290IGhl YXAgZGVzY3JpcHRvciBpcyBzdG9yZWQgZWxzZXdoZXJlIGluIHNoYXJlZCBtZW1vcnksIGFu ZCBlYWNoCisgICBmcmVlIGNodW5rIGNvbnRhaW5zIGEgc2ltaWxhciBkZXNjcmlwdG9yIGZv ciB0aGUgbmV4dCBmcmVlIGNodW5rIGluIHRoZQorICAgY2hhaW4uCisKKyAgIFRoZSBkZXNj cmlwdG9yIGlzIHR3byAxNi1iaXQgdmFsdWVzOiBvZmZzZXQgYW5kIHNpemUsIHdoaWNoIGRl c2NyaWJlIHRoZQorICAgbG9jYXRpb24gb2YgYSBjaHVuayBvZiBtZW1vcnkgYXZhaWxhYmxl IGZvciBhbGxvY2F0aW9uLiBUaGUgb2Zmc2V0IGlzCisgICByZWxhdGl2ZSB0byB0aGUgYmFz ZSBvZiB0aGUgaGVhcC4gIFRoZSBzcGVjaWFsIHZhbHVlIDB4ZmZmZiwgMHhmZmZmCisgICBp bmRpY2F0ZXMgdGhhdCB0aGUgaGVhcCBpcyBsb2NrZWQuICBUaGUgZGVzY3JpcHRvciBpcyBl bmNvZGVkIGludG8gYQorICAgc2luZ2xlIDMyLWJpdCBpbnRlZ2VyIHNvIHRoYXQgaXQgbWF5 IGJlIGVhc2lseSBhY2Nlc3NlZCBhdG9taWNhbGx5LgorCisgICBNZW1vcnkgaXMgYWxsb2Nh dGVkIHRvIHRoZSBmaXJzdCBmcmVlIGNodW5rIHRoYXQgZml0cy4gIFRoZSBmcmVlIGNoYWlu CisgICBpcyBhbHdheXMgc3RvcmVkIGluIG9yZGVyIG9mIHRoZSBvZmZzZXQgdG8gYXNzaXN0 IGNvYWxlc2NpbmcgYWRqYWNlbnQKKyAgIGNodW5rcy4gICovCisKKyNpbmNsdWRlICJsaWJn b21wLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qIFRoZXJlIHNob3VsZCBiZSBzb21l IC5zaGFyZWQgc3BhY2UgcmVzZXJ2ZWQgZm9yIHVzLiAgVGhlcmUncyBubyB3YXkgdG8KKyAg IGV4cHJlc3MgdGhpcyBtYWdpYyBleHRlcm4gc2l6ZWxlc3MgYXJyYXkgaW4gQyBzbyB1c2Ug YXNtLiAgKi8KK2FzbSAoIi5leHRlcm4gLnNoYXJlZCAudTggX19udnB0eF9sb3dsYXRfcG9v bFtdO1xuIik7CisKK2V4dGVybiB1aW50MzJfdCBfX252cHR4X2xvd2xhdF9oZWFwX3Jvb3Qg X19hdHRyaWJ1dGVfXygoc2hhcmVkLG5vY29tbW9uKSk7CisKK3R5cGVkZWYgdW5pb24gewor ICB1aW50MzJfdCByYXc7CisgIHN0cnVjdCB7CisgICAgdWludDE2X3Qgb2Zmc2V0OworICAg IHVpbnQxNl90IHNpemU7CisgIH0gZGVzYzsKK30gaGVhcGRlc2M7CisKK3N0YXRpYyB2b2lk ICoKK252cHR4X21lbXNwYWNlX2FsbG9jIChvbXBfbWVtc3BhY2VfaGFuZGxlX3QgbWVtc3Bh Y2UsIHNpemVfdCBzaXplKQoreworICBpZiAobWVtc3BhY2UgPT0gb21wX2xvd19sYXRfbWVt X3NwYWNlKQorICAgIHsKKyAgICAgIGNoYXIgKnNoYXJlZF9wb29sOworICAgICAgYXNtICgi Y3Z0YS5zaGFyZWQudTY0XHQlMCwgX19udnB0eF9sb3dsYXRfcG9vbDsiIDogIj1yIihzaGFy ZWRfcG9vbCkpOworCisgICAgICAvKiBNZW1vcnkgaXMgYWxsb2NhdGVkIGluIDgtYnl0ZSBn cmFudWxhcml0eS4gICovCisgICAgICBzaXplID0gKHNpemUgKyA3KSAmIH43OworCisgICAg ICAvKiBBY3F1aXJlIGEgbG9jayBvbiB0aGUgbG93LWxhdGVuY3kgaGVhcC4gICovCisgICAg ICBoZWFwZGVzYyByb290OworICAgICAgZG8KKwl7CisJICByb290LnJhdyA9IF9fYXRvbWlj X2V4Y2hhbmdlX24gKCZfX252cHR4X2xvd2xhdF9oZWFwX3Jvb3QsCisJCQkJCSAgMHhmZmZm ZmZmZiwgTUVNTU9ERUxfQUNRVUlSRSk7CisJICBpZiAocm9vdC5yYXcgIT0gMHhmZmZmZmZm ZikKKwkgICAgYnJlYWs7CisJICAvKiBTcGluLiAgKi8KKwl9CisgICAgICB3aGlsZSAoMSk7 CisKKyAgICAgIC8qIFdhbGsgdGhlIGZyZWUgY2hhaW4uICAqLworICAgICAgaGVhcGRlc2Mg Y2h1bmsgPSB7cm9vdC5yYXd9OworICAgICAgdWludDMyX3QgKnByZXZfY2h1bmtwdHIgPSBO VUxMOworICAgICAgdWludDMyX3QgKmNodW5rcHRyID0gKHVpbnQzMl90Kikoc2hhcmVkX3Bv b2wgKyBjaHVuay5kZXNjLm9mZnNldCk7CisgICAgICBoZWFwZGVzYyBvbndhcmRfY2hhaW4g PSB7Y2h1bmtwdHJbMF19OworICAgICAgd2hpbGUgKGNodW5rLmRlc2Muc2l6ZSAhPSAwICYm ICh1aW50MzJfdClzaXplID4gY2h1bmsuZGVzYy5zaXplKQorCXsKKwkgIGNodW5rLnJhdyA9 IG9ud2FyZF9jaGFpbi5yYXc7CisJICBwcmV2X2NodW5rcHRyID0gY2h1bmtwdHI7CisJICBj aHVua3B0ciA9ICh1aW50MzJfdCopKHNoYXJlZF9wb29sICsgY2h1bmsuZGVzYy5vZmZzZXQp OworCSAgb253YXJkX2NoYWluLnJhdyA9IGNodW5rcHRyWzBdOworCX0KKworICAgICAgdm9p ZCAqcmVzdWx0ID0gTlVMTDsKKyAgICAgIGlmIChjaHVuay5kZXNjLnNpemUgIT0gMCkKKwl7 CisJICAvKiBBbGxvY2F0aW9uIHN1Y2Nlc3NmdWwuICAqLworCSAgcmVzdWx0ID0gY2h1bmtw dHI7CisKKwkgIC8qIFVwZGF0ZSB0aGUgZnJlZSBjaGFpbi4gICovCisJICBoZWFwZGVzYyBz dGlsbGZyZWUgPSB7Y2h1bmsucmF3fTsKKwkgIHN0aWxsZnJlZS5kZXNjLm9mZnNldCArPSBz aXplOworCSAgc3RpbGxmcmVlLmRlc2Muc2l6ZSAtPSBzaXplOworCSAgdWludDMyX3QgKnN0 aWxsZnJlZXB0ciA9ICh1aW50MzJfdCopKHNoYXJlZF9wb29sCisJCQkJCSAgICAgICArIHN0 aWxsZnJlZS5kZXNjLm9mZnNldCk7CisKKwkgIGlmIChzdGlsbGZyZWUuZGVzYy5zaXplID09 IDApCisJICAgIC8qIFRoZSB3aG9sZSBjaHVuayB3YXMgdXNlZC4gICovCisJICAgIHN0aWxs ZnJlZS5yYXcgPSBvbndhcmRfY2hhaW4ucmF3OworCSAgZWxzZQorCSAgICAvKiBUaGUgY2h1 bmsgd2FzIHNwbGl0LCBzbyByZXN0b3JlIHRoZSBvbndhcmQgY2hhaW4uICAqLworCSAgICBz dGlsbGZyZWVwdHJbMF0gPSBvbndhcmRfY2hhaW4ucmF3OworCisJICAvKiBUaGUgcHJldmlv dXMgZnJlZSBzbG90IG9yIHJvb3Qgbm93IHBvaW50cyB0byBzdGlsbGZyZWUuICAqLworCSAg aWYgKHByZXZfY2h1bmtwdHIpCisJICAgIHByZXZfY2h1bmtwdHJbMF0gPSBzdGlsbGZyZWUu cmF3OworCSAgZWxzZQorCSAgICByb290LnJhdyA9IHN0aWxsZnJlZS5yYXc7CisJfQorCisg ICAgICAvKiBVcGRhdGUgdGhlIGZyZWUgY2hhaW4gcm9vdCBhbmQgcmVsZWFzZSB0aGUgbG9j ay4gICovCisgICAgICBfX2F0b21pY19zdG9yZV9uICgmX19udnB0eF9sb3dsYXRfaGVhcF9y b290LCByb290LnJhdywgTUVNTU9ERUxfUkVMRUFTRSk7CisgICAgICByZXR1cm4gcmVzdWx0 OworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiBtYWxsb2MgKHNpemUpOworfQorCitzdGF0 aWMgdm9pZCAqCitudnB0eF9tZW1zcGFjZV9jYWxsb2MgKG9tcF9tZW1zcGFjZV9oYW5kbGVf dCBtZW1zcGFjZSwgc2l6ZV90IHNpemUpCit7CisgIGlmIChtZW1zcGFjZSA9PSBvbXBfbG93 X2xhdF9tZW1fc3BhY2UpCisgICAgeworICAgICAgLyogTWVtb3J5IGlzIGFsbG9jYXRlZCBp biA4LWJ5dGUgZ3JhbnVsYXJpdHkuICAqLworICAgICAgc2l6ZSA9IChzaXplICsgNykgJiB+ NzsKKworICAgICAgdWludDY0X3QgKnJlc3VsdCA9IG52cHR4X21lbXNwYWNlX2FsbG9jICht ZW1zcGFjZSwgc2l6ZSk7CisgICAgICBpZiAocmVzdWx0KQorCS8qIElubGluZSBtZW1zZXQg aW4gd2hpY2ggd2Uga25vdyBzaXplIGlzIGEgbXVsdGlwbGUgb2YgOC4gICovCisJZm9yICh1 bnNpZ25lZCBpID0gMDsgaSA8ICh1bnNpZ25lZClzaXplLzg7IGkrKykKKwkgIHJlc3VsdFtp XSA9IDA7CisKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICBlbHNlCisgICAgcmV0 dXJuIGNhbGxvYyAoMSwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitudnB0eF9tZW1zcGFj ZV9mcmVlIChvbXBfbWVtc3BhY2VfaGFuZGxlX3QgbWVtc3BhY2UsIHZvaWQgKmFkZHIsIHNp emVfdCBzaXplKQoreworICBpZiAobWVtc3BhY2UgPT0gb21wX2xvd19sYXRfbWVtX3NwYWNl KQorICAgIHsKKyAgICAgIGNoYXIgKnNoYXJlZF9wb29sOworICAgICAgYXNtICgiY3Z0YS5z aGFyZWQudTY0XHQlMCwgX19udnB0eF9sb3dsYXRfcG9vbDsiIDogIj1yIihzaGFyZWRfcG9v bCkpOworCisgICAgICAvKiBNZW1vcnkgaXMgYWxsb2NhdGVkIGluIDgtYnl0ZSBncmFudWxh cml0eS4gICovCisgICAgICBzaXplID0gKHNpemUgKyA3KSAmIH43OworCisgICAgICAvKiBB Y3F1aXJlIGEgbG9jayBvbiB0aGUgbG93LWxhdGVuY3kgaGVhcC4gICovCisgICAgICBoZWFw ZGVzYyByb290OworICAgICAgZG8KKwl7CisJICByb290LnJhdyA9IF9fYXRvbWljX2V4Y2hh bmdlX24gKCZfX252cHR4X2xvd2xhdF9oZWFwX3Jvb3QsCisJCQkJCSAgMHhmZmZmZmZmZiwg TUVNTU9ERUxfQUNRVUlSRSk7CisJICBpZiAocm9vdC5yYXcgIT0gMHhmZmZmZmZmZikKKwkg ICAgYnJlYWs7CisJICAvKiBTcGluLiAgKi8KKwl9CisgICAgICB3aGlsZSAoMSk7CisKKyAg ICAgIC8qIFdhbGsgdGhlIGZyZWUgY2hhaW4gdG8gZmluZCB3aGVyZSB0byBpbnNlcnQgYSBu ZXcgZW50cnkuICAqLworICAgICAgaGVhcGRlc2MgY2h1bmsgPSB7cm9vdC5yYXd9LCBwcmV2 X2NodW5rOworICAgICAgdWludDMyX3QgKnByZXZfY2h1bmtwdHIgPSBOVUxMLCAqcHJldnBy ZXZfY2h1bmtwdHIgPSBOVUxMOworICAgICAgdWludDMyX3QgKmNodW5rcHRyID0gKHVpbnQz Ml90Kikoc2hhcmVkX3Bvb2wgKyBjaHVuay5kZXNjLm9mZnNldCk7CisgICAgICBoZWFwZGVz YyBvbndhcmRfY2hhaW4gPSB7Y2h1bmtwdHJbMF19OworICAgICAgd2hpbGUgKGNodW5rLmRl c2Muc2l6ZSAhPSAwICYmIGFkZHIgPiAodm9pZCopY2h1bmtwdHIpCisJeworCSAgcHJldl9j aHVuay5yYXcgPSBjaHVuay5yYXc7CisJICBjaHVuay5yYXcgPSBvbndhcmRfY2hhaW4ucmF3 OworCSAgcHJldnByZXZfY2h1bmtwdHIgPSBwcmV2X2NodW5rcHRyOworCSAgcHJldl9jaHVu a3B0ciA9IGNodW5rcHRyOworCSAgY2h1bmtwdHIgPSAodWludDMyX3QqKShzaGFyZWRfcG9v bCArIGNodW5rLmRlc2Mub2Zmc2V0KTsKKwkgIG9ud2FyZF9jaGFpbi5yYXcgPSBjaHVua3B0 clswXTsKKwl9CisKKyAgICAgIC8qIENyZWF0ZSB0aGUgbmV3IGNodW5rIGRlc2NyaXB0b3Iu ICAqLworICAgICAgaGVhcGRlc2MgbmV3ZnJlZWNodW5rOworICAgICAgbmV3ZnJlZWNodW5r LmRlc2Mub2Zmc2V0ID0gKHVpbnQxNl90KSgodWludHB0cl90KWFkZHIKKwkJCQkJICAgIC0g KHVpbnRwdHJfdClzaGFyZWRfcG9vbCk7CisgICAgICBuZXdmcmVlY2h1bmsuZGVzYy5zaXpl ID0gKHVpbnQxNl90KXNpemU7CisKKyAgICAgIC8qIENvYWxlc2NlIGFkamFjZW50IGZyZWUg Y2h1bmtzLiAgKi8KKyAgICAgIGlmIChuZXdmcmVlY2h1bmsuZGVzYy5vZmZzZXQgKyBzaXpl ID09IGNodW5rLmRlc2Mub2Zmc2V0KQorCXsKKwkgIC8qIEZyZWUgY2h1bmsgZm9sbG93cy4g ICovCisJICBuZXdmcmVlY2h1bmsuZGVzYy5zaXplICs9IGNodW5rLmRlc2Muc2l6ZTsKKwkg IGNodW5rLnJhdyA9IG9ud2FyZF9jaGFpbi5yYXc7CisJfQorICAgICAgaWYgKHByZXZfY2h1 bmtwdHIpCisJeworCSAgaWYgKHByZXZfY2h1bmsuZGVzYy5vZmZzZXQgKyBwcmV2X2NodW5r LmRlc2Muc2l6ZQorCSAgICAgID09IG5ld2ZyZWVjaHVuay5kZXNjLm9mZnNldCkKKwkgICAg eworCSAgICAgIC8qIEZyZWUgY2h1bmsgcHJlY2VkZXMuICAqLworCSAgICAgIG5ld2ZyZWVj aHVuay5kZXNjLm9mZnNldCA9IHByZXZfY2h1bmsuZGVzYy5vZmZzZXQ7CisJICAgICAgbmV3 ZnJlZWNodW5rLmRlc2Muc2l6ZSArPSBwcmV2X2NodW5rLmRlc2Muc2l6ZTsKKwkgICAgICBh ZGRyID0gc2hhcmVkX3Bvb2wgKyBwcmV2X2NodW5rLmRlc2Mub2Zmc2V0OworCSAgICAgIHBy ZXZfY2h1bmtwdHIgPSBwcmV2cHJldl9jaHVua3B0cjsKKwkgICAgfQorCX0KKworICAgICAg LyogVXBkYXRlIHRoZSBmcmVlIGNoYWluIGluIHRoZSBuZXcgYW5kIHByZXZpb3VzIGNodW5r cy4gICovCisgICAgICAoKHVpbnQzMl90KilhZGRyKVswXSA9IGNodW5rLnJhdzsKKyAgICAg IGlmIChwcmV2X2NodW5rcHRyKQorCXByZXZfY2h1bmtwdHJbMF0gPSBuZXdmcmVlY2h1bmsu cmF3OworICAgICAgZWxzZQorCXJvb3QucmF3ID0gbmV3ZnJlZWNodW5rLnJhdzsKKworICAg ICAgLyogVXBkYXRlIHRoZSBmcmVlIGNoYWluIHJvb3QgYW5kIHJlbGVhc2UgdGhlIGxvY2su ICAqLworICAgICAgX19hdG9taWNfc3RvcmVfbiAoJl9fbnZwdHhfbG93bGF0X2hlYXBfcm9v dCwgcm9vdC5yYXcsIE1FTU1PREVMX1JFTEVBU0UpOworICAgIH0KKyAgZWxzZQorICAgIGZy ZWUgKGFkZHIpOworfQorCitzdGF0aWMgdm9pZCAqCitudnB0eF9tZW1zcGFjZV9yZWFsbG9j IChvbXBfbWVtc3BhY2VfaGFuZGxlX3QgbWVtc3BhY2UsIHZvaWQgKmFkZHIsCisJCQlzaXpl X3Qgb2xkc2l6ZSwgc2l6ZV90IHNpemUpCit7CisgIGlmIChtZW1zcGFjZSA9PSBvbXBfbG93 X2xhdF9tZW1fc3BhY2UpCisgICAgeworICAgICAgY2hhciAqc2hhcmVkX3Bvb2w7CisgICAg ICBhc20gKCJjdnRhLnNoYXJlZC51NjRcdCUwLCBfX252cHR4X2xvd2xhdF9wb29sOyIgOiAi PXIiKHNoYXJlZF9wb29sKSk7CisKKyAgICAgIC8qIE1lbW9yeSBpcyBhbGxvY2F0ZWQgaW4g OC1ieXRlIGdyYW51bGFyaXR5LiAgKi8KKyAgICAgIG9sZHNpemUgPSAob2xkc2l6ZSArIDcp ICYgfjc7CisgICAgICBzaXplID0gKHNpemUgKyA3KSAmIH43OworCisgICAgICBpZiAob2xk c2l6ZSA9PSBzaXplKQorCXJldHVybiBhZGRyOworCisgICAgICAvKiBBY3F1aXJlIGEgbG9j ayBvbiB0aGUgbG93LWxhdGVuY3kgaGVhcC4gICovCisgICAgICBoZWFwZGVzYyByb290Owor ICAgICAgZG8KKwl7CisJICByb290LnJhdyA9IF9fYXRvbWljX2V4Y2hhbmdlX24gKCZfX252 cHR4X2xvd2xhdF9oZWFwX3Jvb3QsCisJCQkJCSAgMHhmZmZmZmZmZiwgTUVNTU9ERUxfQUNR VUlSRSk7CisJICBpZiAocm9vdC5yYXcgIT0gMHhmZmZmZmZmZikKKwkgICAgYnJlYWs7CisJ ICAvKiBTcGluLiAgKi8KKwl9CisgICAgICB3aGlsZSAoMSk7CisKKyAgICAgIC8qIFdhbGsg dGhlIGZyZWUgY2hhaW4uICAqLworICAgICAgaGVhcGRlc2MgY2h1bmsgPSB7cm9vdC5yYXd9 OworICAgICAgdWludDMyX3QgKnByZXZfY2h1bmtwdHIgPSBOVUxMOworICAgICAgdWludDMy X3QgKmNodW5rcHRyID0gKHVpbnQzMl90Kikoc2hhcmVkX3Bvb2wgKyBjaHVuay5kZXNjLm9m ZnNldCk7CisgICAgICBoZWFwZGVzYyBvbndhcmRfY2hhaW4gPSB7Y2h1bmtwdHJbMF19Owor ICAgICAgd2hpbGUgKGNodW5rLmRlc2Muc2l6ZSAhPSAwICYmICh2b2lkKiljaHVua3B0ciA8 IGFkZHIpCisJeworCSAgY2h1bmsucmF3ID0gb253YXJkX2NoYWluLnJhdzsKKwkgIHByZXZf Y2h1bmtwdHIgPSBjaHVua3B0cjsKKwkgIGNodW5rcHRyID0gKHVpbnQzMl90Kikoc2hhcmVk X3Bvb2wgKyBjaHVuay5kZXNjLm9mZnNldCk7CisJICBvbndhcmRfY2hhaW4ucmF3ID0gY2h1 bmtwdHJbMF07CisJfQorCisgICAgICB2b2lkICpyZXN1bHQgPSBOVUxMOworICAgICAgaWYg KHNpemUgPCBvbGRzaXplKQorCXsKKwkgIC8qIFRoZSBuZXcgYWxsb2NhdGlvbiBpcyBzbWFs bGVyIHRoYW4gdGhlIG9sZDsgd2UgY2FuIGFsd2F5cworCSAgICAgc2hyaW5rIGFuIGFsbG9j YXRpb24gaW4gcGxhY2UuICAqLworCSAgcmVzdWx0ID0gYWRkcjsKKworCSAgdWludDMyX3Qg Km5vd2ZyZWVwdHIgPSAodWludDMyX3QqKShhZGRyICsgc2l6ZSk7CisKKwkgIC8qIFVwZGF0 ZSB0aGUgZnJlZSBjaGFpbi4gICovCisJICBoZWFwZGVzYyBub3dmcmVlOworCSAgbm93ZnJl ZS5kZXNjLm9mZnNldCA9IChjaGFyKilub3dmcmVlcHRyIC0gc2hhcmVkX3Bvb2w7CisJICBu b3dmcmVlLmRlc2Muc2l6ZSA9IG9sZHNpemUgLSBzaXplOworCisJICBpZiAobm93ZnJlZS5k ZXNjLm9mZnNldCArIHNpemUgPT0gY2h1bmsuZGVzYy5vZmZzZXQpCisJICAgIHsKKwkgICAg ICAvKiBDb2FsZXNjZSBmb2xsb3dpbmcgZnJlZSBjaHVuay4gICovCisJICAgICAgbm93ZnJl ZS5kZXNjLnNpemUgKz0gY2h1bmsuZGVzYy5zaXplOworCSAgICAgIG5vd2ZyZWVwdHJbMF0g PSBvbndhcmRfY2hhaW4ucmF3OworCSAgICB9CisJICBlbHNlCisJICAgIG5vd2ZyZWVwdHJb MF0gPSBjaHVuay5yYXc7CisKKwkgIC8qIFRoZSBwcmV2aW91cyBmcmVlIHNsb3Qgb3Igcm9v dCBub3cgcG9pbnRzIHRvIG5vd2ZyZWUuICAqLworCSAgaWYgKHByZXZfY2h1bmtwdHIpCisJ ICAgIHByZXZfY2h1bmtwdHJbMF0gPSBub3dmcmVlLnJhdzsKKwkgIGVsc2UKKwkgICAgcm9v dC5yYXcgPSBub3dmcmVlLnJhdzsKKwl9CisgICAgICBlbHNlIGlmIChjaHVuay5kZXNjLnNp emUgIT0gMAorCSAgICAgICAmJiAoY2hhciAqKWFkZHIgKyBvbGRzaXplID09IChjaGFyICop Y2h1bmtwdHIKKwkgICAgICAgJiYgY2h1bmsuZGVzYy5zaXplID49IHNpemUtb2xkc2l6ZSkK Kwl7CisJICAvKiBUaGUgbmV3IGFsbG9jYXRpb24gaXMgbGFyZ2VyIHRoYW4gdGhlIG9sZCwg YW5kIHdlIGZvdW5kIGEKKwkgICAgIGxhcmdlIGVub3VnaCBmcmVlIGJsb2NrIHJpZ2h0IGFm dGVyIHRoZSBleGlzdGluZyBibG9jaywKKwkgICAgIHNvIHdlIGV4dGVuZCBpbnRvIHRoYXQg c3BhY2UuICAqLworCSAgcmVzdWx0ID0gYWRkcjsKKworCSAgdWludDE2X3QgZGVsdGEgPSBz aXplLW9sZHNpemU7CisKKwkgIC8qIFVwZGF0ZSB0aGUgZnJlZSBjaGFpbi4gICovCisJICBo ZWFwZGVzYyBzdGlsbGZyZWUgPSB7Y2h1bmsucmF3fTsKKwkgIHN0aWxsZnJlZS5kZXNjLm9m ZnNldCArPSBkZWx0YTsKKwkgIHN0aWxsZnJlZS5kZXNjLnNpemUgLT0gZGVsdGE7CisJICB1 aW50MzJfdCAqc3RpbGxmcmVlcHRyID0gKHVpbnQzMl90Kikoc2hhcmVkX3Bvb2wKKwkJCQkJ ICAgICAgICsgc3RpbGxmcmVlLmRlc2Mub2Zmc2V0KTsKKworCSAgaWYgKHN0aWxsZnJlZS5k ZXNjLnNpemUgPT0gMCkKKwkgICAgLyogVGhlIHdob2xlIGNodW5rIHdhcyB1c2VkLiAgKi8K KwkgICAgc3RpbGxmcmVlLnJhdyA9IG9ud2FyZF9jaGFpbi5yYXc7CisJICBlbHNlCisJICAg IC8qIFRoZSBjaHVuayB3YXMgc3BsaXQsIHNvIHJlc3RvcmUgdGhlIG9ud2FyZCBjaGFpbi4g ICovCisJICAgIHN0aWxsZnJlZXB0clswXSA9IG9ud2FyZF9jaGFpbi5yYXc7CisKKwkgIC8q IFRoZSBwcmV2aW91cyBmcmVlIHNsb3Qgb3Igcm9vdCBub3cgcG9pbnRzIHRvIHN0aWxsZnJl ZS4gICovCisJICBpZiAocHJldl9jaHVua3B0cikKKwkgICAgcHJldl9jaHVua3B0clswXSA9 IHN0aWxsZnJlZS5yYXc7CisJICBlbHNlCisJICAgIHJvb3QucmF3ID0gc3RpbGxmcmVlLnJh dzsKKwl9CisgICAgICAvKiBFbHNlIHJlYWxsb2MgaW4tcGxhY2UgaGFzIGZhaWxlZCBhbmQg cmVzdWx0IHJlbWFpbnMgTlVMTC4gICovCisKKyAgICAgIC8qIFVwZGF0ZSB0aGUgZnJlZSBj aGFpbiByb290IGFuZCByZWxlYXNlIHRoZSBsb2NrLiAgKi8KKyAgICAgIF9fYXRvbWljX3N0 b3JlX24gKCZfX252cHR4X2xvd2xhdF9oZWFwX3Jvb3QsIHJvb3QucmF3LCBNRU1NT0RFTF9S RUxFQVNFKTsKKworICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorCXsKKwkgIC8qIFRoZSBh bGxvY2F0aW9uIGNvdWxkIG5vdCBiZSBleHRlbmRlZCBpbiBwbGFjZSwgc28gd2Ugc2ltcGx5 CisJICAgICBhbGxvY2F0ZSBmcmVzaCBtZW1vcnkgYW5kIG1vdmUgdGhlIGRhdGEuICBJZiB3 ZSBjYW4ndCBhbGxvY2F0ZQorCSAgICAgZnJvbSBsb3ctbGF0ZW5jeSBtZW1vcnkgdGhlbiB3 ZSBsZWF2ZSB0aGUgb3JpZ2luYWwgYWxsb2FjdGlvbgorCSAgICAgaW50YWN0IGFuZCByZXR1 cm4gTlVMTC4KKwkgICAgIFdlIGNvdWxkIGRvIGEgZmFsbC1iYWNrIHRvIG1haW4gbWVtb3J5 LCBidXQgd2UgZG9uJ3Qga25vdyB3aGF0CisJICAgICB0aGUgZmFsbC1iYWNrIHRyYWl0IHNh aWQgdG8gZG8uICAqLworCSAgcmVzdWx0ID0gbnZwdHhfbWVtc3BhY2VfYWxsb2MgKG1lbXNw YWNlLCBzaXplKTsKKwkgIGlmIChyZXN1bHQgIT0gTlVMTCkKKwkgICAgeworCSAgICAgIC8q IElubGluZSBtZW1jcHkgaW4gd2hpY2ggd2Uga25vdyBvbGRzaXplIGlzIGEgbXVsdGlwbGUg b2YgOC4gICovCisJICAgICAgdWludDY0X3QgKmZyb20gPSBhZGRyLCAqdG8gPSByZXN1bHQ7 CisJICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8ICh1bnNpZ25lZClvbGRzaXplLzg7 IGkrKykKKwkJdG9baV0gPSBmcm9tW2ldOworCisJICAgICAgbnZwdHhfbWVtc3BhY2VfZnJl ZSAobWVtc3BhY2UsIGFkZHIsIG9sZHNpemUpOworCSAgICB9CisJfQorICAgICAgcmV0dXJu IHJlc3VsdDsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gcmVhbGxvYyAoYWRkciwgc2l6 ZSk7Cit9CisKKyNkZWZpbmUgTUVNU1BBQ0VfQUxMT0MoTUVNU1BBQ0UsIFNJWkUpIFwKKyAg bnZwdHhfbWVtc3BhY2VfYWxsb2MgKE1FTVNQQUNFLCBTSVpFKQorI2RlZmluZSBNRU1TUEFD RV9DQUxMT0MoTUVNU1BBQ0UsIFNJWkUpIFwKKyAgbnZwdHhfbWVtc3BhY2VfY2FsbG9jIChN RU1TUEFDRSwgU0laRSkKKyNkZWZpbmUgTUVNU1BBQ0VfUkVBTExPQyhNRU1TUEFDRSwgQURE UiwgT0xEU0laRSwgU0laRSkgXAorICBudnB0eF9tZW1zcGFjZV9yZWFsbG9jIChNRU1TUEFD RSwgQUREUiwgT0xEU0laRSwgU0laRSkKKyNkZWZpbmUgTUVNU1BBQ0VfRlJFRShNRU1TUEFD RSwgQUREUiwgU0laRSkgXAorICBudnB0eF9tZW1zcGFjZV9mcmVlIChNRU1TUEFDRSwgQURE UiwgU0laRSkKKworI2luY2x1ZGUgIi4uLy4uL2FsbG9jYXRvci5jIgpkaWZmIC0tZ2l0IGEv bGliZ29tcC9jb25maWcvbnZwdHgvdGVhbS5jIGIvbGliZ29tcC9jb25maWcvbnZwdHgvdGVh bS5jCmluZGV4IDY5MjM0MTZmYjRlLi5mNDNkNjNkZjU3ZCAxMDA2NDQKLS0tIGEvbGliZ29t cC9jb25maWcvbnZwdHgvdGVhbS5jCisrKyBiL2xpYmdvbXAvY29uZmlnL252cHR4L3RlYW0u YwpAQCAtMzMsOSArMzMsMTMgQEAKIAogc3RydWN0IGdvbXBfdGhyZWFkICpudnB0eF90aHJz IF9fYXR0cmlidXRlX18oKHNoYXJlZCxub2NvbW1vbikpOwogaW50IF9fZ29tcF90ZWFtX251 bSBfX2F0dHJpYnV0ZV9fKChzaGFyZWQsbm9jb21tb24pKTsKK3VpbnQzMl90IF9fbnZwdHhf bG93bGF0X2hlYXBfcm9vdCBfX2F0dHJpYnV0ZV9fKChzaGFyZWQsbm9jb21tb24pKTsKIAog c3RhdGljIHZvaWQgZ29tcF90aHJlYWRfc3RhcnQgKHN0cnVjdCBnb21wX3RocmVhZF9wb29s ICopOwogCisvKiBUaGVyZSBzaG91bGQgYmUgc29tZSAuc2hhcmVkIHNwYWNlIHJlc2VydmVk IGZvciB1cy4gIFRoZXJlJ3Mgbm8gd2F5IHRvCisgICBleHByZXNzIHRoaXMgbWFnaWMgZXh0 ZXJuIHNpemVsZXNzIGFycmF5IGluIEMgc28gdXNlIGFzbS4gICovCithc20gKCIuZXh0ZXJu IC5zaGFyZWQgLnU4IF9fbnZwdHhfbG93bGF0X3Bvb2xbXTtcbiIpOwogCiAvKiBUaGlzIGV4 dGVybmFsbHkgdmlzaWJsZSBmdW5jdGlvbiBoYW5kbGVzIHRhcmdldCByZWdpb24gZW50cnku ICBJdAogICAgc2V0cyB1cCBhIHBlci10ZWFtIHRocmVhZCBwb29sIGFuZCB0cmFuc2ZlcnMg Y29udHJvbCBieSBjYWxsaW5nIEZOIChGTl9EQVRBKQpAQCAtNjMsNiArNjcsMjcgQEAgZ29t cF9udnB0eF9tYWluICh2b2lkICgqZm4pICh2b2lkICopLCB2b2lkICpmbl9kYXRhKQogICAg ICAgbnZwdHhfdGhycyA9IGFsbG9jYSAobnRpZHMgKiBzaXplb2YgKCpudnB0eF90aHJzKSk7 CiAgICAgICBtZW1zZXQgKG52cHR4X3RocnMsIDAsIG50aWRzICogc2l6ZW9mICgqbnZwdHhf dGhycykpOwogCisgICAgICAvKiBGaW5kIHRoZSBsb3ctbGF0ZW5jeSBoZWFwIGRldGFpbHMg Li4uLiAgKi8KKyAgICAgIHVpbnQzMl90ICpzaGFyZWRfcG9vbDsKKyAgICAgIHVpbnQzMl90 IHNoYXJlZF9wb29sX3NpemU7CisgICAgICBhc20gKCJjdnRhLnNoYXJlZC51NjRcdCUwLCBf X252cHR4X2xvd2xhdF9wb29sOyIgOiAiPXIiKHNoYXJlZF9wb29sKSk7CisgICAgICBhc20g KCJtb3YudTMyXHQlMCwgJSVkeW5hbWljX3NtZW1fc2l6ZTtcbiIKKwkgICA6ICI9ciIoc2hh cmVkX3Bvb2xfc2l6ZSkpOworCisgICAgICAvKiAuLi4gYW5kIGluaXRpYWxpemUgaXQgd2l0 aCBhbiBlbXB0eSBmcmVlLWNoYWluLiAgKi8KKyAgICAgIHVuaW9uIHsKKwl1aW50MzJfdCBy YXc7CisJc3RydWN0IHsKKwkgIHVpbnQxNl90IG9mZnNldDsKKwkgIHVpbnQxNl90IHNpemU7 CisJfSBkZXNjOworICAgICAgfSByb290OworICAgICAgcm9vdC5kZXNjLm9mZnNldCA9IDA7 CQkgLyogVGhlIGZpcnN0IGJ5dGUgaXMgZnJlZS4gICovCisgICAgICByb290LmRlc2Muc2l6 ZSA9IHNoYXJlZF9wb29sX3NpemU7IC8qIFRoZSB3aG9sZSBzcGFjZSBpcyBmcmVlLiAgKi8K KyAgICAgIHNoYXJlZF9wb29sWzBdID0gMDsJCSAvKiBUZXJtaW5hdGUgZnJlZSBjaGFpbi4g ICovCisgICAgICBfX2F0b21pY19zdG9yZV9uICgmX19udnB0eF9sb3dsYXRfaGVhcF9yb290 LCByb290LnJhdywgTUVNTU9ERUxfUkVMRUFTRSk7CisKKyAgICAgIC8qIEluaXRpYWxpemUg dGhlIHRocmVhZCBwb29sLiAgKi8KICAgICAgIHN0cnVjdCBnb21wX3RocmVhZF9wb29sICpw b29sID0gYWxsb2NhIChzaXplb2YgKCpwb29sKSk7CiAgICAgICBwb29sLT50aHJlYWRzID0g YWxsb2NhIChudGlkcyAqIHNpemVvZiAoKnBvb2wtPnRocmVhZHMpKTsKICAgICAgIGZvciAo dGlkID0gMDsgdGlkIDwgbnRpZHM7IHRpZCsrKQpkaWZmIC0tZ2l0IGEvbGliZ29tcC9wbHVn aW4vcGx1Z2luLW52cHR4LmMgYi9saWJnb21wL3BsdWdpbi9wbHVnaW4tbnZwdHguYwppbmRl eCBiNGYwYTg0ZDc3YS4uMWI5YTVlOTVjMDcgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvcGx1Z2lu L3BsdWdpbi1udnB0eC5jCisrKyBiL2xpYmdvbXAvcGx1Z2luL3BsdWdpbi1udnB0eC5jCkBA IC0zMzAsNiArMzMwLDExIEBAIHN0cnVjdCBwdHhfZGV2aWNlCiAKIHN0YXRpYyBzdHJ1Y3Qg cHR4X2RldmljZSAqKnB0eF9kZXZpY2VzOwogCisvKiBPcGVuTVAga2VybmVscyByZXNlcnZl IGEgc21hbGwgYW1vdW50IG9mICIuc2hhcmVkIiBzcGFjZSBmb3IgdXNlIGJ5CisgICBvbXBf YWxsb2MuICBUaGUgc2l6ZSBpcyBjb25maWd1cmVkIHVzaW5nIEdPTVBfTlZQVFhfTE9XTEFU X1BPT0wsIGJ1dCB0aGUKKyAgIGRlZmF1bHQgaXMgc2V0IGhlcmUuICAqLworc3RhdGljIHVu c2lnbmVkIGxvd2xhdF9wb29sX3NpemUgPSA4KjEwMjQ7CisKIHN0YXRpYyBpbmxpbmUgc3Ry dWN0IG52cHR4X3RocmVhZCAqCiBudnB0eF90aHJlYWQgKHZvaWQpCiB7CkBAIC0xMTk2LDYg KzEyMDEsMjIgQEAgR09NUF9PRkZMT0FEX2luaXRfZGV2aWNlIChpbnQgbikKICAgICAgIGlu c3RhbnRpYXRlZF9kZXZpY2VzKys7CiAgICAgfQogCisgIGNvbnN0IGNoYXIgKnZhcl9uYW1l ID0gIkdPTVBfTlZQVFhfTE9XTEFUX1BPT0wiOworICBjb25zdCBjaGFyICplbnZfdmFyID0g c2VjdXJlX2dldGVudiAodmFyX25hbWUpOworICBub3RpZnlfdmFyICh2YXJfbmFtZSwgZW52 X3Zhcik7CisKKyAgaWYgKGVudl92YXIgIT0gTlVMTCkKKyAgICB7CisgICAgICBjaGFyICpl bmRwdHI7CisgICAgICB1bnNpZ25lZCBsb25nIHZhbCA9IHN0cnRvdWwgKGVudl92YXIsICZl bmRwdHIsIDEwKTsKKyAgICAgIGlmIChlbmRwdHIgPT0gTlVMTCB8fCAqZW5kcHRyICE9ICdc MCcKKwkgIHx8IGVycm5vID09IEVSQU5HRSB8fCBlcnJubyA9PSBFSU5WQUwKKwkgIHx8IHZh bCA+IFVJTlRfTUFYKQorCUdPTVBfUExVR0lOX2Vycm9yICgiRXJyb3IgcGFyc2luZyAlcyIs IHZhcl9uYW1lKTsKKyAgICAgIGVsc2UKKwlsb3dsYXRfcG9vbF9zaXplID0gdmFsOworICAg IH0KKwogICBwdGhyZWFkX211dGV4X3VubG9jayAoJnB0eF9kZXZfbG9jayk7CiAKICAgcmV0 dXJuIGRldiAhPSBOVUxMOwpAQCAtMjAyMSw3ICsyMDQyLDcgQEAgR09NUF9PRkZMT0FEX3J1 biAoaW50IG9yZCwgdm9pZCAqdGd0X2ZuLCB2b2lkICp0Z3RfdmFycywgdm9pZCAqKmFyZ3Mp CiAJCSAgICAgIiBbKHRlYW1zOiAldSksIDEsIDFdIFsobGFuZXM6IDMyKSwgKHRocmVhZHM6 ICV1KSwgMV1cbiIsCiAJCSAgICAgX19GVU5DVElPTl9fLCBmbl9uYW1lLCB0ZWFtcywgdGhy ZWFkcyk7CiAgIHIgPSBDVURBX0NBTExfTk9DSEVDSyAoY3VMYXVuY2hLZXJuZWwsIGZ1bmN0 aW9uLCB0ZWFtcywgMSwgMSwKLQkJCSAzMiwgdGhyZWFkcywgMSwgMCwgTlVMTCwgTlVMTCwg Y29uZmlnKTsKKwkJCSAzMiwgdGhyZWFkcywgMSwgbG93bGF0X3Bvb2xfc2l6ZSwgTlVMTCwg TlVMTCwgY29uZmlnKTsKICAgaWYgKHIgIT0gQ1VEQV9TVUNDRVNTKQogICAgIEdPTVBfUExV R0lOX2ZhdGFsICgiY3VMYXVuY2hLZXJuZWwgZXJyb3I6ICVzIiwgY3VkYV9lcnJvciAocikp OwogCmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9y cy0xLmMgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy0xLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA0OTY4ZTRjODNkCi0tLSAv ZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRvcnMt MS5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qIHsgZGctZG8gcnVuIH0gKi8KKworLyogVGVzdCB0 aGF0IG9tcF9hbGxvYyByZXR1cm5zIHVzYWJsZSBtZW1vcnkuICAqLworCisjaW5jbHVkZSA8 b21wLmg+CisKKyNwcmFnbWEgb21wIHJlcXVpcmVzIGR5bmFtaWNfYWxsb2NhdG9ycworCit2 b2lkCit0ZXN0IChpbnQgbiwgb21wX2FsbG9jYXRvcl9oYW5kbGVfdCBhbGxvY2F0b3IpCit7 CisgICNwcmFnbWEgb21wIHRhcmdldCBtYXAodG86bikgbWFwKHRvOmFsbG9jYXRvcikKKyAg eworICAgIGludCAqYTsKKyAgICBhID0gKGludCAqKSBvbXBfYWxsb2MobipzaXplb2YoaW50 KSwgYWxsb2NhdG9yKTsKKworICAgICNwcmFnbWEgb21wIHBhcmFsbGVsCisgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICBhW2ldID0gaTsKKworICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgaWYgKGFbaV0gIT0gaSkKKwl7CisJICBfX2J1 aWx0aW5fcHJpbnRmICgiZGF0YSBtaXNtYXRjaCBhdCAlaVxuIiwgaSk7CisJICBfX2J1aWx0 aW5fYWJvcnQgKCk7CisJfQorCisgICAgb21wX2ZyZWUoYSwgYWxsb2NhdG9yKTsKKyAgfQor fQorCitpbnQKK21haW4gKCkKK3sKKyAgLy8gU21hbGxlciB0aGFuIGxvdy1sYXRlbmN5IG1l bW9yeSBsaW1pdAorICB0ZXN0ICgxMCwgb21wX2RlZmF1bHRfbWVtX2FsbG9jKTsKKyAgdGVz dCAoMTAsIG9tcF9sYXJnZV9jYXBfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAsIG9tcF9jb25z dF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMCwgb21wX2hpZ2hfYndfbWVtX2FsbG9jKTsKKyAg dGVzdCAoMTAsIG9tcF9sb3dfbGF0X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBfY2dy b3VwX21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBfcHRlYW1fbWVtX2FsbG9jKTsKKyAg dGVzdCAoMTAsIG9tcF90aHJlYWRfbWVtX2FsbG9jKTsKKworICAvLyBMYXJnZXIgdGhhbiBs b3ctbGF0ZW5jeSBtZW1vcnkgbGltaXQKKyAgdGVzdCAoMTAwMDAwLCBvbXBfZGVmYXVsdF9t ZW1fYWxsb2MpOworICB0ZXN0ICgxMDAwMDAsIG9tcF9sYXJnZV9jYXBfbWVtX2FsbG9jKTsK KyAgdGVzdCAoMTAwMDAwLCBvbXBfY29uc3RfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAwMDAw LCBvbXBfaGlnaF9id19tZW1fYWxsb2MpOworICB0ZXN0ICgxMDAwMDAsIG9tcF9sb3dfbGF0 X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwMDAwMCwgb21wX2Nncm91cF9tZW1fYWxsb2MpOwor ICB0ZXN0ICgxMDAwMDAsIG9tcF9wdGVhbV9tZW1fYWxsb2MpOworICB0ZXN0ICgxMDAwMDAs IG9tcF90aHJlYWRfbWVtX2FsbG9jKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBh L2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTIuYyBiL2xpYmdvbXAv dGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uYTk4ZjFiNGMwNWUKLS0tIC9kZXYvbnVsbAorKysgYi9s aWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy0yLmMKQEAgLTAsMCArMSw2 NCBAQAorLyogeyBkZy1kbyBydW4gfSAqLworCisvKiBUZXN0IGNvbmN1cnJlbnQgYW5kIHJl cGVhdGVkIGFsbG9jYXRpb25zLiAgKi8KKworI2luY2x1ZGUgPG9tcC5oPgorCisjcHJhZ21h IG9tcCByZXF1aXJlcyBkeW5hbWljX2FsbG9jYXRvcnMKKwordm9pZAordGVzdCAoaW50IG4s IG9tcF9hbGxvY2F0b3JfaGFuZGxlX3QgYWxsb2NhdG9yKQoreworICAjcHJhZ21hIG9tcCB0 YXJnZXQgbWFwKHRvOm4pIG1hcCh0bzphbGxvY2F0b3IpCisgIHsKKyAgICBpbnQgKiphOwor ICAgIGEgPSAoaW50ICoqKSBvbXBfYWxsb2MobipzaXplb2YoaW50KiksIGFsbG9jYXRvcik7 CisKKyAgICAjcHJhZ21hIG9tcCBwYXJhbGxlbCBmb3IKKyAgICBmb3IgKGludCBpID0gMDsg aSA8IG47IGkrKykKKyAgICAgIHsKKwkvKlVzZSAxMHggdG8gZW5zdXJlIHdlIGRvIGFjdGl2 YXRlIGxvdy1sYXRlbmN5IGZhbGwtYmFjay4gICovCisJYVtpXSA9IG9tcF9hbGxvYyhzaXpl b2YoaW50KSoxMCwgYWxsb2NhdG9yKTsKKwlhW2ldWzBdID0gaTsKKyAgICAgIH0KKworICAg IGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgaWYgKGFbaV1bMF0gIT0gaSkK Kwl7CisJICBfX2J1aWx0aW5fcHJpbnRmICgiZGF0YSBtaXNtYXRjaCBhdCAlaVxuIiwgaSk7 CisJICBfX2J1aWx0aW5fYWJvcnQgKCk7CisJfQorCisgICAgI3ByYWdtYSBvbXAgcGFyYWxs ZWwgZm9yCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICBvbXBfZnJl ZShhW2ldLCBhbGxvY2F0b3IpOworCisgICAgb21wX2ZyZWUgKGEsIGFsbG9jYXRvcik7Cisg IH0KK30KKworaW50CittYWluICgpCit7CisgIC8vIFNtYWxsZXIgdGhhbiBsb3ctbGF0ZW5j eSBtZW1vcnkgbGltaXQKKyAgdGVzdCAoMTAsIG9tcF9kZWZhdWx0X21lbV9hbGxvYyk7Cisg IHRlc3QgKDEwLCBvbXBfbGFyZ2VfY2FwX21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBf Y29uc3RfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAsIG9tcF9oaWdoX2J3X21lbV9hbGxvYyk7 CisgIHRlc3QgKDEwLCBvbXBfbG93X2xhdF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMCwgb21w X2Nncm91cF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMCwgb21wX3B0ZWFtX21lbV9hbGxvYyk7 CisgIHRlc3QgKDEwLCBvbXBfdGhyZWFkX21lbV9hbGxvYyk7CisKKyAgLy8gTGFyZ2VyIHRo YW4gbG93LWxhdGVuY3kgbWVtb3J5IGxpbWl0IChvbiBhZ2dyZWdhdGUpCisgIHRlc3QgKDEw MDAsIG9tcF9kZWZhdWx0X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwMDAsIG9tcF9sYXJnZV9j YXBfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAwMCwgb21wX2NvbnN0X21lbV9hbGxvYyk7Cisg IHRlc3QgKDEwMDAsIG9tcF9oaWdoX2J3X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwMDAsIG9t cF9sb3dfbGF0X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwMDAsIG9tcF9jZ3JvdXBfbWVtX2Fs bG9jKTsKKyAgdGVzdCAoMTAwMCwgb21wX3B0ZWFtX21lbV9hbGxvYyk7CisgIHRlc3QgKDEw MDAsIG9tcF90aHJlYWRfbWVtX2FsbG9jKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdp dCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTMuYyBiL2xpYmdv bXAvdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTMuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDU1MTRjMmEwODgKLS0tIC9kZXYvbnVsbAorKysg Yi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy0zLmMKQEAgLTAsMCAr MSw0MiBAQAorLyogeyBkZy1kbyBydW4gfSAqLworCisvKiBTdHJlc3MtdGVzdCBvbXBfYWxs b2Mvb21wX21hbGxvYyB1bmRlciBjb25jdXJyZW5jeS4gICovCisKKyNpbmNsdWRlIDxvbXAu aD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjcHJhZ21h IG9tcCByZXF1aXJlcyBkeW5hbWljX2FsbG9jYXRvcnMKKworI2RlZmluZSBOIDEwMDAKKwor dm9pZAordGVzdCAob21wX2FsbG9jYXRvcl9oYW5kbGVfdCBhbGxvY2F0b3IpCit7CisgICNw cmFnbWEgb21wIHRhcmdldCBtYXAodG86YWxsb2NhdG9yKQorICB7CisgICAgI3ByYWdtYSBv bXAgcGFyYWxsZWwgZm9yCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspCisgICAg ICBmb3IgKGludCBqID0gMDsgaiA8IE47IGorKykKKwl7CisJICBpbnQgKnAgPSBvbXBfYWxs b2Moc2l6ZW9mKGludCksIGFsbG9jYXRvcik7CisJICBvbXBfZnJlZShwLCBhbGxvY2F0b3Ip OworCX0KKyAgfQorfQorCitpbnQKK21haW4gKCkKK3sKKyAgLy8gU21hbGxlciB0aGFuIGxv dy1sYXRlbmN5IG1lbW9yeSBsaW1pdAorICB0ZXN0IChvbXBfZGVmYXVsdF9tZW1fYWxsb2Mp OworICB0ZXN0IChvbXBfbGFyZ2VfY2FwX21lbV9hbGxvYyk7CisgIHRlc3QgKG9tcF9jb25z dF9tZW1fYWxsb2MpOworICB0ZXN0IChvbXBfaGlnaF9id19tZW1fYWxsb2MpOworICB0ZXN0 IChvbXBfbG93X2xhdF9tZW1fYWxsb2MpOworICB0ZXN0IChvbXBfY2dyb3VwX21lbV9hbGxv Yyk7CisgIHRlc3QgKG9tcF9wdGVhbV9tZW1fYWxsb2MpOworICB0ZXN0IChvbXBfdGhyZWFk X21lbV9hbGxvYyk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJnb21wL3Rl c3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy00LmMgYi9saWJnb21wL3Rlc3RzdWl0ZS9s aWJnb21wLmMvYWxsb2NhdG9ycy00LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjlmYTZhYTE2MjRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0 c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRvcnMtNC5jCkBAIC0wLDAgKzEsMTk2IEBACisvKiB7 IGRnLWRvIHJ1biB9ICovCisKKy8qIFRlc3QgdGhhdCBsb3ctbGF0ZW5jeSBmcmVlIGNoYWlu cyBhcmUgc291bmQuICAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8b21w Lmg+CisKKyNwcmFnbWEgb21wIHJlcXVpcmVzIGR5bmFtaWNfYWxsb2NhdG9ycworCit2b2lk CitjaGVjayAoaW50IGNvbmQsIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgaWYgKCFjb25kKQor ICAgIHsKKyAgICAgIF9fYnVpbHRpbl9wcmludGYgKCIlc1xuIiwgbXNnKTsKKyAgICAgIF9f YnVpbHRpbl9hYm9ydCAoKTsKKyAgICB9Cit9CisKK2ludAorbWFpbiAoKQoreworICAjcHJh Z21hIG9tcCB0YXJnZXQKKyAgeworICAgIC8qIEVuc3VyZSB0aGF0IHRoZSBtZW1vcnkgd2Ug Z2V0ICppcyogbG93LWxhdGVuY3kgd2l0aCBhIG51bGwtZmFsbGJhY2suICAqLworICAgIG9t cF9hbGxvY3RyYWl0X3QgdHJhaXRzWzFdCisgICAgICA9IHsgeyBvbXBfYXRrX2ZhbGxiYWNr LCBvbXBfYXR2X251bGxfZmIgfSB9OworICAgIG9tcF9hbGxvY2F0b3JfaGFuZGxlX3QgbG93 bGF0ID0gb21wX2luaXRfYWxsb2NhdG9yIChvbXBfbG93X2xhdF9tZW1fc3BhY2UsCisJCQkJ CQkJMSwgdHJhaXRzKTsKKworICAgIGludCBzaXplID0gNDsKKworICAgIGNoYXIgKmEgPSBv bXBfYWxsb2Moc2l6ZSwgbG93bGF0KTsKKyAgICBjaGFyICpiID0gb21wX2FsbG9jKHNpemUs IGxvd2xhdCk7CisgICAgY2hhciAqYyA9IG9tcF9hbGxvYyhzaXplLCBsb3dsYXQpOworICAg IGNoYXIgKmQgPSBvbXBfYWxsb2Moc2l6ZSwgbG93bGF0KTsKKworICAgIC8qIFRoZXJlIGFy ZSBoZWFkZXJzIGFuZCBwYWRkaW5nIHRvIGFjY291bnQgZm9yLiAgKi8KKyAgICBpbnQgc2l6 ZTIgPSBzaXplICsgKGItYSk7CisgICAgaW50IHNpemUzID0gc2l6ZSArIChjLWEpOworICAg IGludCBzaXplNCA9IHNpemUgKyAoZC1hKSArIDEwMDsgLyogUmFuZG9tIGxhcmdlciBhbW91 bnQuICAqLworCisgICAgY2hlY2sgKGEgIT0gTlVMTCAmJiBiICE9IE5VTEwgJiYgYyAhPSBO VUxMICYmIGQgIT0gTlVMTCwKKwkgICAib21wX2FsbG9jIHJldHVybmVkIE5VTExcbiIpOwor CisgICAgb21wX2ZyZWUoYSwgbG93bGF0KTsKKyAgICBjaGFyICpwID0gb21wX2FsbG9jIChz aXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGEsICJhbGxvY2F0ZSBkaWQgbm90IHJl dXNlIGZpcnN0IGNodW5rIik7CisKKyAgICBvbXBfZnJlZShiLCBsb3dsYXQpOworICAgIHAg PSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgImFsbG9j YXRlIGRpZCBub3QgcmV1c2Ugc2Vjb25kIGNodW5rIik7CisKKyAgICBvbXBfZnJlZShjLCBs b3dsYXQpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sg KHAgPT0gYywgImFsbG9jYXRlIGRpZCBub3QgcmV1c2UgdGhpcmQgY2h1bmsiKTsKKworICAg IG9tcF9mcmVlKGEsIGxvd2xhdCk7CisgICAgb21wX2ZyZWUoYiwgbG93bGF0KTsKKyAgICBw ID0gb21wX2FsbG9jIChzaXplMiwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBhLCAiYWxs b2NhdGUgZGlkIG5vdCBjb2FsZXNjZSBmaXJzdCB0d28gY2h1bmtzIik7CisKKyAgICBvbXBf ZnJlZShwLCBsb3dsYXQpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7Cisg ICAgY2hlY2sgKHAgPT0gYSwgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgZmlyc3QgY2h1bmsg KDEpIik7CisgICAgcCA9IG9tcF9hbGxvYyAoc2l6ZSwgbG93bGF0KTsKKyAgICBjaGVjayAo cCA9PSBiLCAiYWxsb2NhdGUgZGlkIG5vdCBzcGxpdCBmaXJzdCBjaHVuayAoMikiKTsKKwor ICAgIG9tcF9mcmVlKGIsIGxvd2xhdCk7CisgICAgb21wX2ZyZWUoYywgbG93bGF0KTsKKyAg ICBwID0gb21wX2FsbG9jIChzaXplMiwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBiLCAi YWxsb2NhdGUgZGlkIG5vdCBjb2FsZXNjZSBtaWRkbGUgdHdvIGNodW5rcyIpOworCisgICAg b21wX2ZyZWUocCwgbG93bGF0KTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplLCBsb3dsYXQp OworICAgIGNoZWNrIChwID09IGIsICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0IHNlY29uZCBj aHVuayAoMSkiKTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplLCBsb3dsYXQpOworICAgIGNo ZWNrIChwID09IGMsICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0IHNlY29uZCBjaHVuayAoMiki KTsKKworICAgIG9tcF9mcmVlKGIsIGxvd2xhdCk7CisgICAgb21wX2ZyZWUoYSwgbG93bGF0 KTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplMiwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9 PSBhLCAiYWxsb2NhdGUgZGlkIG5vdCBjb2FsZXNjZSBmaXJzdCB0d28gY2h1bmtzLCByZXZl cnNlIGZyZWUiKTsKKworICAgIG9tcF9mcmVlKHAsIGxvd2xhdCk7CisgICAgcCA9IG9tcF9h bGxvYyAoc2l6ZSwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBhLCAiYWxsb2NhdGUgZGlk IG5vdCBzcGxpdCBmaXJzdCBjaHVuayAoMSksIHJldmVyc2UgZnJlZSIpOworICAgIHAgPSBv bXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgImFsbG9jYXRl IGRpZCBub3Qgc3BsaXQgZmlyc3QgY2h1bmsgKDIpLCByZXZlcnNlIGZyZWUiKTsKKworICAg IG9tcF9mcmVlKGMsIGxvd2xhdCk7CisgICAgb21wX2ZyZWUoYiwgbG93bGF0KTsKKyAgICBw ID0gb21wX2FsbG9jIChzaXplMiwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBiLCAiYWxs b2NhdGUgZGlkIG5vdCBjb2FsZXNjZSBzZWNvbmQgdHdvIGNodW5rcywgcmV2ZXJzZSBmcmVl Iik7CisKKyAgICBvbXBfZnJlZShwLCBsb3dsYXQpOworICAgIHAgPSBvbXBfYWxsb2MgKHNp emUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgImFsbG9jYXRlIGRpZCBub3Qgc3Bs aXQgc2Vjb25kIGNodW5rICgxKSwgcmV2ZXJzZSBmcmVlIik7CisgICAgcCA9IG9tcF9hbGxv YyAoc2l6ZSwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBjLCAiYWxsb2NhdGUgZGlkIG5v dCBzcGxpdCBzZWNvbmQgY2h1bmsgKDIpLCByZXZlcnNlIGZyZWUiKTsKKworICAgIG9tcF9m cmVlKGEsIGxvd2xhdCk7CisgICAgb21wX2ZyZWUoYiwgbG93bGF0KTsKKyAgICBvbXBfZnJl ZShjLCBsb3dsYXQpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUzLCBsb3dsYXQpOworICAg IGNoZWNrIChwID09IGEsICJhbGxvY2F0ZSBkaWQgbm90IGNvYWxlc2NlIGZpcnN0IHRocmVl IGNodW5rcyIpOworCisgICAgb21wX2ZyZWUocCwgbG93bGF0KTsKKyAgICBwID0gb21wX2Fs bG9jIChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGEsICJhbGxvY2F0ZSBkaWQg bm90IHNwbGl0IGZpcnN0IGNodW5rICgxKSIpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUs IGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQg Zmlyc3QgY2h1bmsgKDIpIik7CisgICAgcCA9IG9tcF9hbGxvYyAoc2l6ZSwgbG93bGF0KTsK KyAgICBjaGVjayAocCA9PSBjLCAiYWxsb2NhdGUgZGlkIG5vdCBzcGxpdCBmaXJzdCBjaHVu ayAoMykiKTsKKworICAgIG9tcF9mcmVlKGIsIGxvd2xhdCk7CisgICAgb21wX2ZyZWUoYywg bG93bGF0KTsKKyAgICBvbXBfZnJlZShkLCBsb3dsYXQpOworICAgIHAgPSBvbXBfYWxsb2Mg KHNpemUzLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGIsICJhbGxvY2F0ZSBkaWQgbm90 IGNvYWxlc2NlIGxhc3QgdGhyZWUgY2h1bmtzIik7CisKKyAgICBvbXBfZnJlZShwLCBsb3ds YXQpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAg PT0gYiwgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgc2Vjb25kIGNodW5rICgxKSIpOworICAg IHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYywgImFs bG9jYXRlIGRpZCBub3Qgc3BsaXQgc2Vjb25kIGNodW5rICgyKSIpOworICAgIHAgPSBvbXBf YWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gZCwgImFsbG9jYXRlIGRp ZCBub3Qgc3BsaXQgc2Vjb25kIGNodW5rICgzKSIpOworCisgICAgb21wX2ZyZWUoYywgbG93 bGF0KTsKKyAgICBvbXBfZnJlZShiLCBsb3dsYXQpOworICAgIG9tcF9mcmVlKGEsIGxvd2xh dCk7CisgICAgcCA9IG9tcF9hbGxvYyAoc2l6ZTMsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAg PT0gYSwgImFsbG9jYXRlIGRpZCBub3QgY29hbGVzY2UgZmlyc3QgdGhyZWUgY2h1bmtzLCBy ZXZlcnNlIGZyZWUiKTsKKworICAgIG9tcF9mcmVlKHAsIGxvd2xhdCk7CisgICAgcCA9IG9t cF9hbGxvYyAoc2l6ZSwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBhLCAiYWxsb2NhdGUg ZGlkIG5vdCBzcGxpdCBmaXJzdCBjaHVuayAoMSksIHJldmVyc2UgZnJlZSIpOworICAgIHAg PSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgImFsbG9j YXRlIGRpZCBub3Qgc3BsaXQgZmlyc3QgY2h1bmsgKDIpLCByZXZlcnNlIGZyZWUiKTsKKyAg ICBwID0gb21wX2FsbG9jIChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGMsICJh bGxvY2F0ZSBkaWQgbm90IHNwbGl0IGZpcnN0IGNodW5rICgzKSwgcmV2ZXJzZSBmcmVlIik7 CisKKyAgICBvbXBfZnJlZShkLCBsb3dsYXQpOworICAgIG9tcF9mcmVlKGMsIGxvd2xhdCk7 CisgICAgb21wX2ZyZWUoYiwgbG93bGF0KTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplMywg bG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBiLCAiYWxsb2NhdGUgZGlkIG5vdCBjb2FsZXNj ZSBzZWNvbmQgdGhyZWUgY2h1bmtzLCByZXZlcnNlIGZyZWUiKTsKKworICAgIG9tcF9mcmVl KHAsIGxvd2xhdCk7CisgICAgcCA9IG9tcF9hbGxvYyAoc2l6ZSwgbG93bGF0KTsKKyAgICBj aGVjayAocCA9PSBiLCAiYWxsb2NhdGUgZGlkIG5vdCBzcGxpdCBzZWNvbmQgY2h1bmsgKDEp LCByZXZlcnNlIGZyZWUiKTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplLCBsb3dsYXQpOwor ICAgIGNoZWNrIChwID09IGMsICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0IHNlY29uZCBjaHVu ayAoMiksIHJldmVyc2UgZnJlZSIpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xh dCk7CisgICAgY2hlY2sgKHAgPT0gZCwgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgc2Vjb25k IGNodW5rICgzKSwgcmV2ZXJzZSBmcmVlIik7CisKKyAgICBvbXBfZnJlZShjLCBsb3dsYXQp OworICAgIG9tcF9mcmVlKGEsIGxvd2xhdCk7CisgICAgb21wX2ZyZWUoYiwgbG93bGF0KTsK KyAgICBwID0gb21wX2FsbG9jIChzaXplMywgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBh LCAiYWxsb2NhdGUgZGlkIG5vdCBjb2FsZXNjZSBmaXJzdCB0aHJlZSBjaHVua3MsIG1peGVk IGZyZWUiKTsKKworICAgIG9tcF9mcmVlKHAsIGxvd2xhdCk7CisgICAgcCA9IG9tcF9hbGxv YyAoc2l6ZSwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBhLCAiYWxsb2NhdGUgZGlkIG5v dCBzcGxpdCBmaXJzdCBjaHVuayAoMSksIG1peGVkIGZyZWUiKTsKKyAgICBwID0gb21wX2Fs bG9jIChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGIsICJhbGxvY2F0ZSBkaWQg bm90IHNwbGl0IGZpcnN0IGNodW5rICgyKSwgbWl4ZWQgZnJlZSIpOworICAgIHAgPSBvbXBf YWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYywgImFsbG9jYXRlIGRp ZCBub3Qgc3BsaXQgZmlyc3QgY2h1bmsgKDMpLCBtaXhlZCBmcmVlIik7CisKKyAgICBvbXBf ZnJlZShkLCBsb3dsYXQpOworICAgIG9tcF9mcmVlKGIsIGxvd2xhdCk7CisgICAgb21wX2Zy ZWUoYywgbG93bGF0KTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplMywgbG93bGF0KTsKKyAg ICBjaGVjayAocCA9PSBiLCAiYWxsb2NhdGUgZGlkIG5vdCBjb2FsZXNjZSBzZWNvbmQgdGhy ZWUgY2h1bmtzLCBtaXhlZCBmcmVlIik7CisKKyAgICBvbXBfZnJlZShwLCBsb3dsYXQpOwor ICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwg ImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgc2Vjb25kIGNodW5rICgxKSwgbWl4ZWQgZnJlZSIp OworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0g YywgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgc2Vjb25kIGNodW5rICgyKSwgbWl4ZWQgZnJl ZSIpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAg PT0gZCwgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgc2Vjb25kIGNodW5rICgzKSwgbWl4ZWQg ZnJlZSIpOworCisgICAgb21wX2ZyZWUoYSwgbG93bGF0KTsKKyAgICBvbXBfZnJlZShiLCBs b3dsYXQpOworICAgIG9tcF9mcmVlKGMsIGxvd2xhdCk7CisgICAgb21wX2ZyZWUoZCwgbG93 bGF0KTsKKyAgICBwID0gb21wX2FsbG9jKHNpemU0LCBsb3dsYXQpOworICAgIGNoZWNrIChw ID09IGEsICJhbGxvY2F0ZSBkaWQgbm90IGNvYWxlc2NlIGFsbCBtZW1vcnkiKTsKKyAgfQor CityZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29t cC5jL2FsbG9jYXRvcnMtNS5jIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9j YXRvcnMtNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45Njk0 MDEwY2YxZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAu Yy9hbGxvY2F0b3JzLTUuYwpAQCAtMCwwICsxLDYzIEBACisvKiB7IGRnLWRvIHJ1biB9ICov CisKKy8qIFRlc3QgY2FsbG9jIHdpdGggb21wX2FsbG9jLiAgKi8KKworI2luY2x1ZGUgPG9t cC5oPgorCisjcHJhZ21hIG9tcCByZXF1aXJlcyBkeW5hbWljX2FsbG9jYXRvcnMKKwordm9p ZAordGVzdCAoaW50IG4sIG9tcF9hbGxvY2F0b3JfaGFuZGxlX3QgYWxsb2NhdG9yKQorewor ICAjcHJhZ21hIG9tcCB0YXJnZXQgbWFwKHRvOm4pIG1hcCh0bzphbGxvY2F0b3IpCisgIHsK KyAgICBpbnQgKmE7CisgICAgYSA9IChpbnQgKikgb21wX2NhbGxvYyhuLCBzaXplb2YoaW50 KSwgYWxsb2NhdG9yKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAg ICAgaWYgKGFbaV0gIT0gMCkKKwl7CisJICBfX2J1aWx0aW5fcHJpbnRmICgibWVtb3J5IG5v dCB6ZXJvZWQgYXQgJWlcbiIsIGkpOworCSAgX19idWlsdGluX2Fib3J0ICgpOworCX0KKwor ICAgICNwcmFnbWEgb21wIHBhcmFsbGVsCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBp KyspCisgICAgICBhW2ldID0gaTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsr KQorICAgICAgaWYgKGFbaV0gIT0gaSkKKwl7CisJICBfX2J1aWx0aW5fcHJpbnRmICgiZGF0 YSBtaXNtYXRjaCBhdCAlaVxuIiwgaSk7CisJICBfX2J1aWx0aW5fYWJvcnQgKCk7CisJfQor CisgICAgb21wX2ZyZWUoYSwgYWxsb2NhdG9yKTsKKyAgfQorfQorCitpbnQKK21haW4gKCkK K3sKKyAgLy8gU21hbGxlciB0aGFuIGxvdy1sYXRlbmN5IG1lbW9yeSBsaW1pdAorICB0ZXN0 ICgxMCwgb21wX2RlZmF1bHRfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAsIG9tcF9sYXJnZV9j YXBfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAsIG9tcF9jb25zdF9tZW1fYWxsb2MpOworICB0 ZXN0ICgxMCwgb21wX2hpZ2hfYndfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAsIG9tcF9sb3df bGF0X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBfY2dyb3VwX21lbV9hbGxvYyk7Cisg IHRlc3QgKDEwLCBvbXBfcHRlYW1fbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAsIG9tcF90aHJl YWRfbWVtX2FsbG9jKTsKKworICAvLyBMYXJnZXIgdGhhbiBsb3ctbGF0ZW5jeSBtZW1vcnkg bGltaXQKKyAgdGVzdCAoMTAwMDAwLCBvbXBfZGVmYXVsdF9tZW1fYWxsb2MpOworICB0ZXN0 ICgxMDAwMDAsIG9tcF9sYXJnZV9jYXBfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAwMDAwLCBv bXBfY29uc3RfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAwMDAwLCBvbXBfaGlnaF9id19tZW1f YWxsb2MpOworICB0ZXN0ICgxMDAwMDAsIG9tcF9sb3dfbGF0X21lbV9hbGxvYyk7CisgIHRl c3QgKDEwMDAwMCwgb21wX2Nncm91cF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMDAwMDAsIG9t cF9wdGVhbV9tZW1fYWxsb2MpOworICB0ZXN0ICgxMDAwMDAsIG9tcF90aHJlYWRfbWVtX2Fs bG9jKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRl L2xpYmdvbXAuYy9hbGxvY2F0b3JzLTYuYyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAu Yy9hbGxvY2F0b3JzLTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uOTBiZjczMDk1ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9s aWJnb21wLmMvYWxsb2NhdG9ycy02LmMKQEAgLTAsMCArMSwxMTcgQEAKKy8qIHsgZGctZG8g cnVuIH0gKi8KKworLyogVGVzdCB0aGF0IGxvdy1sYXRlbmN5IHJlYWxsb2MgYW5kIGZyZWUg Y2hhaW5zIGFyZSBzb3VuZC4gICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRl IDxvbXAuaD4KKworI3ByYWdtYSBvbXAgcmVxdWlyZXMgZHluYW1pY19hbGxvY2F0b3JzCisK K3ZvaWQKK2NoZWNrIChpbnQgY29uZCwgY29uc3QgY2hhciAqbXNnKQoreworICBpZiAoIWNv bmQpCisgICAgeworICAgICAgX19idWlsdGluX3ByaW50ZiAoIiVzXG4iLCBtc2cpOworICAg ICAgX19idWlsdGluX2Fib3J0ICgpOworICAgIH0KK30KKworaW50CittYWluICgpCit7Cisg ICNwcmFnbWEgb21wIHRhcmdldAorICB7CisgICAgLyogRW5zdXJlIHRoYXQgdGhlIG1lbW9y eSB3ZSBnZXQgKmlzKiBsb3ctbGF0ZW5jeSB3aXRoIGEgbnVsbC1mYWxsYmFjay4gICovCisg ICAgb21wX2FsbG9jdHJhaXRfdCB0cmFpdHNbMV0KKyAgICAgID0geyB7IG9tcF9hdGtfZmFs bGJhY2ssIG9tcF9hdHZfbnVsbF9mYiB9IH07CisgICAgb21wX2FsbG9jYXRvcl9oYW5kbGVf dCBsb3dsYXQgPSBvbXBfaW5pdF9hbGxvY2F0b3IgKG9tcF9sb3dfbGF0X21lbV9zcGFjZSwK KwkJCQkJCQkxLCB0cmFpdHMpOworCisgICAgaW50IHNpemUgPSAxNjsKKworICAgIGNoYXIg KmEgPSAoY2hhciAqKW9tcF9hbGxvYyhzaXplLCBsb3dsYXQpOworICAgIGNoYXIgKmIgPSAo Y2hhciAqKW9tcF9hbGxvYyhzaXplLCBsb3dsYXQpOworICAgIGNoYXIgKmMgPSAoY2hhciAq KW9tcF9hbGxvYyhzaXplLCBsb3dsYXQpOworICAgIGNoYXIgKmQgPSAoY2hhciAqKW9tcF9h bGxvYyhzaXplLCBsb3dsYXQpOworCisgICAgLyogVGhlcmUgYXJlIGhlYWRlcnMgYW5kIHBh ZGRpbmcgdG8gYWNjb3VudCBmb3IuICAqLworICAgIGludCBzaXplMiA9IHNpemUgKyAoYi1h KTsKKyAgICBpbnQgc2l6ZTMgPSBzaXplICsgKGMtYSk7CisgICAgaW50IHNpemU0ID0gc2l6 ZSArIChkLWEpICsgMTAwOyAvKiBSYW5kb20gbGFyZ2VyIGFtb3VudC4gICovCisKKyAgICBj aGVjayAoYSAhPSBOVUxMICYmIGIgIT0gTlVMTCAmJiBjICE9IE5VTEwgJiYgZCAhPSBOVUxM LAorCSAgICJvbXBfYWxsb2MgcmV0dXJuZWQgTlVMTFxuIik7CisKKyAgICBjaGFyICpwID0g b21wX3JlYWxsb2MgKGIsIHNpemUsIGxvd2xhdCwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9 PSBiLCAicmVhbGxvYyBkaWQgbm90IHJldXNlIHNhbWUgc2l6ZSBjaHVuaywgbm8gc3BhY2Ug YWZ0ZXIiKTsKKworICAgIHAgPSBvbXBfcmVhbGxvYyAoYiwgc2l6ZS04LCBsb3dsYXQsIGxv d2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgInJlYWxsb2MgZGlkIG5vdCByZXVzZSBzbWFs bGVyIGNodW5rLCBubyBzcGFjZSBhZnRlciIpOworCisgICAgcCA9IG9tcF9yZWFsbG9jIChi LCBzaXplLCBsb3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgInJlYWxsb2Mg ZGlkIG5vdCByZXVzZSBvcmlnaW5hbCBzaXplIGNodW5rLCBubyBzcGFjZSBhZnRlciIpOwor CisgICAgLyogTWFrZSBzcGFjZSBhZnRlciBiLiAgKi8KKyAgICBvbXBfZnJlZShjLCBsb3ds YXQpOworCisgICAgcCA9IG9tcF9yZWFsbG9jIChiLCBzaXplLCBsb3dsYXQsIGxvd2xhdCk7 CisgICAgY2hlY2sgKHAgPT0gYiwgInJlYWxsb2MgZGlkIG5vdCByZXVzZSBzYW1lIHNpemUg Y2h1bmsiKTsKKworICAgIHAgPSBvbXBfcmVhbGxvYyAoYiwgc2l6ZS04LCBsb3dsYXQsIGxv d2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgInJlYWxsb2MgZGlkIG5vdCByZXVzZSBzbWFs bGVyIGNodW5rIik7CisKKyAgICBwID0gb21wX3JlYWxsb2MgKGIsIHNpemUsIGxvd2xhdCwg bG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBiLCAicmVhbGxvYyBkaWQgbm90IHJldXNlIG9y aWdpbmFsIHNpemUgY2h1bmsiKTsKKworICAgIHAgPSBvbXBfcmVhbGxvYyAoYiwgc2l6ZSs4 LCBsb3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgInJlYWxsb2MgZGlkIG5v dCBleHRlbmQgaW4gcGxhY2UgYnkgYSBsaXR0bGUiKTsKKworICAgIHAgPSBvbXBfcmVhbGxv YyAoYiwgc2l6ZTIsIGxvd2xhdCwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBiLCAicmVh bGxvYyBkaWQgbm90IGV4dGVuZCBpbnRvIHdob2xlIG5leHQgY2h1bmsiKTsKKworICAgIHAg PSBvbXBfcmVhbGxvYyAoYiwgc2l6ZTMsIGxvd2xhdCwgbG93bGF0KTsKKyAgICBjaGVjayAo cCAhPSBiLCAicmVhbGxvYyBkaWQgbm90IG1vdmUgYiBlbHNld2hlcmUiKTsKKyAgICBvbXBf ZnJlZSAocCwgbG93bGF0KTsKKworCisgICAgcCA9IG9tcF9yZWFsbG9jIChhLCBzaXplLCBs b3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYSwgInJlYWxsb2MgZGlkIG5vdCBy ZXVzZSBzYW1lIHNpemUgY2h1bmssIGZpcnN0IHBvc2l0aW9uIik7CisKKyAgICBwID0gb21w X3JlYWxsb2MgKGEsIHNpemUtOCwgbG93bGF0LCBsb3dsYXQpOworICAgIGNoZWNrIChwID09 IGEsICJyZWFsbG9jIGRpZCBub3QgcmV1c2Ugc21hbGxlciBjaHVuaywgZmlyc3QgcG9zaXRp b24iKTsKKworICAgIHAgPSBvbXBfcmVhbGxvYyAoYSwgc2l6ZSwgbG93bGF0LCBsb3dsYXQp OworICAgIGNoZWNrIChwID09IGEsICJyZWFsbG9jIGRpZCBub3QgcmV1c2Ugb3JpZ2luYWwg c2l6ZSBjaHVuaywgZmlyc3QgcG9zaXRpb24iKTsKKworICAgIHAgPSBvbXBfcmVhbGxvYyAo YSwgc2l6ZSs4LCBsb3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYSwgInJlYWxs b2MgZGlkIG5vdCBleHRlbmQgaW4gcGxhY2UgYnkgYSBsaXR0bGUsIGZpcnN0IHBvc2l0aW9u Iik7CisKKyAgICBwID0gb21wX3JlYWxsb2MgKGEsIHNpemUzLCBsb3dsYXQsIGxvd2xhdCk7 CisgICAgY2hlY2sgKHAgPT0gYSwgInJlYWxsb2MgZGlkIG5vdCBleHRlbmQgaW50byB3aG9s ZSBuZXh0IGNodW5rLCBmaXJzdCBwb3NpdGlvbiIpOworCisgICAgcCA9IG9tcF9yZWFsbG9j IChhLCBzaXplNCwgbG93bGF0LCBsb3dsYXQpOworICAgIGNoZWNrIChwICE9IGEsICJyZWFs bG9jIGRpZCBub3QgbW92ZSBhIGVsc2V3aGVyZSwgZmlyc3QgcG9zaXRpb24iKTsKKyAgICBv bXBfZnJlZSAocCwgbG93bGF0KTsKKworCisgICAgcCA9IG9tcF9yZWFsbG9jIChkLCBzaXpl LCBsb3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gZCwgInJlYWxsb2MgZGlkIG5v dCByZXVzZSBzYW1lIHNpemUgY2h1bmssIGxhc3QgcG9zaXRpb24iKTsKKworICAgIHAgPSBv bXBfcmVhbGxvYyAoZCwgc2l6ZS04LCBsb3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAg PT0gZCwgInJlYWxsb2MgZGlkIG5vdCByZXVzZSBzbWFsbGVyIGNodW5rLCBsYXN0IHBvc2l0 aW9uIik7CisKKyAgICBwID0gb21wX3JlYWxsb2MgKGQsIHNpemUsIGxvd2xhdCwgbG93bGF0 KTsKKyAgICBjaGVjayAocCA9PSBkLCAicmVhbGxvYyBkaWQgbm90IHJldXNlIG9yaWdpbmFs IHNpemUgY2h1bmssIGxhc3QgcG9zaXRpb24iKTsKKworICAgIHAgPSBvbXBfcmVhbGxvYyAo ZCwgc2l6ZSs4LCBsb3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gZCwgInJlYWxs b2MgZGlkIG5vdCBleHRlbmQgaW4gcGxhY2UgYnkgZCBsaXR0bGUsIGxhc3QgcG9zaXRpb24i KTsKKworICAgIC8qIExhcmdlciB0aGFuIGxvdyBsYXRlbmN5IG1lbW9yeS4gICovCisgICAg cCA9IG9tcF9yZWFsbG9jKGQsIDEwMDAwMDAwMCwgbG93bGF0LCBsb3dsYXQpOworICAgIGNo ZWNrIChwID09IE5VTEwsICJyZWFsbG9jIGRpZCBub3QgZmFpbCBvbiBPT00iKTsKKyAgfQor CityZXR1cm4gMDsKK30KKwo= --------------1bCh4oZVdhfpQFC0vJbuLmVK--