From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from conssluserg-06.nifty.com (conssluserg-06.nifty.com [210.131.2.91]) by sourceware.org (Postfix) with ESMTPS id 887A83858D35 for ; Mon, 3 Aug 2020 02:11:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 887A83858D35 Received: from Express5800-S70 (v038192.dynamic.ppp.asahi-net.or.jp [124.155.38.192]) (authenticated) by conssluserg-06.nifty.com with ESMTP id 0732AsJx014903 for ; Mon, 3 Aug 2020 11:10:55 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-06.nifty.com 0732AsJx014903 X-Nifty-SrcIP: [124.155.38.192] Date: Mon, 3 Aug 2020 11:11:03 +0900 From: Takashi Yano To: cygwin-developers@cygwin.com Subject: Re: New implementation of pseudo console support (experimental) Message-Id: <20200803111103.27ef6554df7f40d1142bceee@nifty.ne.jp> In-Reply-To: <20200724202219.16ad238f515da19db21d3a6c@nifty.ne.jp> References: <20200514183420.c246647a6d9e396d42c6b47e@nifty.ne.jp> <20200516092956.74369d694d611b1dcd095607@nifty.ne.jp> <20200516164735.2a2ef183788b151e9185ef41@nifty.ne.jp> <20200519224018.746f6324badd8a5762df42b1@nifty.ne.jp> <20200525195332.cf60ab2f38d167a76513740e@nifty.ne.jp> <20200526100955.30b1a2baea517e0565f30db6@nifty.ne.jp> <20200529004024.0c2ac3c68b588bda987e0837@nifty.ne.jp> <20200701204751.27609a8f5701010468521a87@nifty.ne.jp> <20200717111912.GG3784@calimero.vinschen.de> <20200718143024.45920213c7aa81912939d944@nifty.ne.jp> <20200720080613.GE16360@calimero.vinschen.de> <20200722031751.e02bf24a7519b43d80e5db71@nifty.ne.jp> <20200722174541.c8113635236fd217cb9ebb77@nifty.ne.jp> <20200723093328.709654ea6a539cb9b3251ab2@nifty.ne.jp> <20200724143842.020cea9ffa2f6e7ffe760f67@nifty.ne.jp> <20200724202219.16ad238f515da19db21d3a6c@nifty.ne.jp> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Mon__3_Aug_2020_11_11_03_+0900_L_AG6oQg3zN9MTTN" X-Spam-Status: No, score=-3.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, NICE_REPLY_A, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=no autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: cygwin-developers@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin core component developers mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 03 Aug 2020 02:11:20 -0000 This is a multi-part message in MIME format. --Multipart=_Mon__3_Aug_2020_11_11_03_+0900_L_AG6oQg3zN9MTTN Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Fri, 24 Jul 2020 20:22:19 +0900 Takashi Yano via Cygwin-developers wrote: > On Fri, 24 Jul 2020 14:38:42 +0900 > Takashi Yano via Cygwin-developers wrote: > > On Thu, 23 Jul 2020 09:33:28 +0900 > > Takashi Yano via Cygwin-developers wrote: > > > On Wed, 22 Jul 2020 17:45:41 +0900 > > > Takashi Yano via Cygwin-developers wrote: > > > > On Wed, 22 Jul 2020 03:17:51 +0900 > > > > Takashi Yano via Cygwin-developers wrote: > > > > > Hi Corinna, > > > > > > > > > > On Mon, 20 Jul 2020 10:06:13 +0200 > > > > > Corinna Vinschen wrote: > > > > > > On Jul 18 14:30, Takashi Yano via Cygwin-developers wrote: > > > > > > > Hi Corinna, > > > > > > > > > > > > > > On Fri, 17 Jul 2020 13:19:12 +0200 > > > > > > > Corinna Vinschen wrote: > > > > > > > > Hi Takashi, > > > > > > > > > > > > > > > > On Jul 1 20:47, Takashi Yano via Cygwin-developers wrote: > > > > > > > > > [...] > > > > > > > > > Revise the patch to fit the current git head. > > > > > > > > > > > > > > > > are you satisfied with the code? If you want to merge it, > > > > > > > > I'd bump Cygwin to 3.2. > > > > > > > > > > > > > > Since this new implementation has both advantages and disadvantages, > > > > > > > there might be some options. > > > > > > > > > > > > > > 1) Default to new implementation and leave the current one as an > > > > > > > alternative. Switch them using the environment CYGWIN. > > > > > > > 2) Default to current implementation and add the new one as an > > > > > > > alternative. Switch them using the environment CYGWIN. > > > > > > > 3) Adopt only new implementation and throw the current one away. > > > > > > > > > > > > > > What do you think? > > > > > > > > > > > > Do you really want to maintain twice as much code doing the same stuff > > > > > > and constantly having to ask users which version of the code they are > > > > > > running? The maintenance cost outweighs the advantages, IMHO. > > > > > > Personally I'd go for option 3. > > > > > > > > > > Personally, I feel a tinge of sadness to discard the current code, > > > > > however, your opinion sounds reasonable. > > > > > > > > > > I will submit a new patch in which all the codes specific to the > > > > > current implementation are removed. > > > > > > > > Attached is the patch in git format-patch format. > > > > All the codes specific to the current implementation are removed. > > > > > > > > Despite the utmost care, the changes are relatively large, so some > > > > degradation may exist. > > > > > > > > I will appreciate if you could test. > > > > > > There were still unused code. Please try attached patch instead. > > > > Changes: > > * Do not activate pseudo console if it is already activated for > > another process on same pty. > > Changes: > * Fix a bug in the latest change. Changes: * Fix a handle leak caused when spawn is called with mode != _P_OVERLAY. -- Takashi Yano --Multipart=_Mon__3_Aug_2020_11_11_03_+0900_L_AG6oQg3zN9MTTN Content-Type: application/octet-stream; name="0001-Cygwin-pty-Implement-new-pseudo-console-support.patch" Content-Disposition: attachment; filename="0001-Cygwin-pty-Implement-new-pseudo-console-support.patch" Content-Transfer-Encoding: base64 RnJvbSA4N2IyOWM1ZmRiZjhmOGI3NTI1Njc1NWE2MTllZmIwOTc1Yzc1YjUzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q cD4KRGF0ZTogTW9uLCAzIEF1ZyAyMDIwIDExOjAyOjE1ICswOTAwClN1YmplY3Q6IFtQQVRDSF0g Q3lnd2luOiBwdHk6IEltcGxlbWVudCBuZXcgcHNldWRvIGNvbnNvbGUgc3VwcG9ydC4KCi0gSW4g dGhpcyBpbXBsZW1lbnRhdGlvbiwgcHNldWRvIGNvbnNvbGUgaXMgY3JlYXRlZCBmb3IgZWFjaCBu YXRpdmUKICBjb25zb2xlIGFwcC4gQWR2YW50YWdlcyBhbmQgZGlzYWR2YW50YWdlcyBvZiB0aGlz IGltcGxlbWVudGF0aW9uCiAgb3ZlciB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gYXJlIGFz IGZvbGxvd3MuCgogIEFkdmFudGFnZXM6CiAgMSkgTm8gcGVyZm9ybWFuY2UgZGVncmFkYXRpb24g aW4gcHR5IG91dHB1dCBmb3IgY3lnd2luIHByb2Nlc3MuCiAgICAgIGh0dHBzOi8vY3lnd2luLmNv bS9waXBlcm1haWwvY3lnd2luLzIwMjAtRmVicnVhcnkvMjQzODU4Lmh0bWwKICAyKSBGcmVlIGZy b20gdGhlIHByb2JsZW0gY2F1c2VkIGJ5IGRpZmZlcmVuY2Ugb2YgYmVoYXZpb3VyIG9mIGNvbnRy b2wKICAgICBzZXF1ZW5jZXMgYmV0d2VlbiByZWFsIHRlcm1pbmFsIGFuZCBwc2V1ZG8gY29uc29s ZS4KICAgICAgaHR0cHM6Ly9jeWd3aW4uY29tL3BpcGVybWFpbC9jeWd3aW4vMjAxOS1EZWNlbWJl ci8yNDMyODEuaHRtbAogICAgICBodHRwczovL2N5Z3dpbi5jb20vcGlwZXJtYWlsL2N5Z3dpbi8y MDIwLUZlYnJ1YXJ5LzI0Mzg1NS5odG1sCiAgMykgRnJlZSBmcm9tIHRoZSBwcm9ibGVtIGluIGNn ZGIgYW5kIGVtYWNzIGd1ZC4KICAgICAgaHR0cHM6Ly9jeWd3aW4uY29tL3BpcGVybWFpbC9jeWd3 aW4vMjAyMC1KYW51YXJ5LzI0MzYwMS5odG1sCiAgICAgIGh0dHBzOi8vY3lnd2luLmNvbS9waXBl cm1haWwvY3lnd2luLzIwMjAtTWFyY2gvMjQ0MTQ2Lmh0bWwKICA0KSBSZWRyYXdpbmcgc2NyZWVu IG9uIGV4ZWN1dGluZyBuYXRpdmUgY29uc29sZSBhcHBzIGlzIG5vdCBuZWNlc3NhcnkuCiAgNSkg Y3lnd2luLWNvbnNvbGUtaGVscGVyIGlzIG5vdCBuZWNlc3NhcnkgZm9yIHRoZSBwc2V1ZG8gY29u c29sZQogICAgIHN1cHBvcnQuCiAgNikgVGhlIGNvZGVzIGZvciBwc2V1ZG8gY29uc29sZSBzdXBw b3J0IGFyZSBtdWNoIHNpbXBsZXIgdGhhbiB0aGF0CiAgICAgb2YgdGhlIHByZXZpb3VzIG9uZS4K CiAgRGlzYWR2YW50YWdlczoKICAxKSBUaGUgY3lnd2luIHByb2dyYW0gd2hpY2ggY2FsbHMgY29u c29sZSBBUEkgZGlyZWN0bHkgZG9lcyBub3Qgd29yay4KICAyKSBUaGUgYXBwcyB3aGljaCB1c2Ug Y29uc29sZSBBUEkgY2Fubm90IGJlIGRlYnVnZ2VkIHdpdGggZ2RiLiBUaGlzCiAgICAgaXMgYmVj YXVzZSBwc2V1ZG8gY29uc29sZSBpcyBub3QgYWN0aXZhdGVkIHNpbmNlIGdkYiB1c2VzCiAgICAg Q3JlYXRlUHJvY2VzcygpIHJhdGhlciB0aGFuIGV4ZWMoKS4gRXZlbiB3aXRoIHRoaXMgbGltaXRh dGlvbiwKICAgICBhdHRhY2hpbmcgZ2RiIHRvIG5hdGl2ZSBhcHBzLCBpbiB3aGljaCBwc2V1ZG8g Y29uc29sZSBpcyBhbHJlYWR5CiAgICAgYWN0aXZhdGVkLCB3b3Jrcy4KICAzKSBUeXBlYWhlYWQg a2V5IGlucHV0cyBhcmUgZGlzY2FyZGVkIHdoaWxlIG5hdGl2ZSBjb25zb2xlIGFwcCBpcwogICAg IGV4ZWN1dGVkLiBTaW1pcmFsbHksIHR5cGVhaGVhZCBrZXkgaW5wdXRzIHdoaWxlIGN5Z3dpbiBh cHAgaXMKICAgICBleGVjdXRlZCBhcmUgbm90IGluaGVyaXRlZCB0byBuYXRpdmUgY29uc29sZSBh cHAuCiAgNCkgQ29kZSBwYWdlIGNhbm5vdCBiZSBjaGFuZ2VkIGJ5IGNoY3AuY29tLiBBY2N0dWFs bHksIGNoY3Agd29ya3MKICAgICBpdHNlbGYgYW5kIGNoYW5nZXMgY29kZSBwYWdlIG9mIGl0cyBv d24gcHNldWRvIGNvbnNvbGUuICBIb3dldmVyLAogICAgIHNpbmNlIHBzZXVkbyBjb25zb2xlIGlz IHJlY3JlYXRlZCBmb3IgYW5vdGhlciBwcm9jZXNzLCBpdCBjYW5ub3QKICAgICBpbmhlcml0IHRo ZSBjb2RlIHBhZ2UuCiAgNSkgc3lzdGVtX3ByaW50ZigpIGRvZXMgbm90IHdvcmsgYWZ0ZXIgc3Rk ZXJyIGlzIGNsb3NlZC4gKFNhbWUgd2l0aAogICAgIGN5Z3dpbiAzLjAuNykKICA2KSBTdGFydHVw IHRpbWUgb2YgbmF0aXZlIGNvbnNvbGUgYXBwcyBpcyBhYm91dCAzIHRpbWVzIHNsb3dlciB0aGFu CiAgICAgcHJldmlvdXMgaW1wbGVtZW5hdGlvbi4KICA3KSBQc2V1ZG8gY29uc29sZSBjYW5ub3Qg YmUgYWN0aXZhdGVkIGlmIGl0IGlzIGFscmVhZHkgYWN0aXZhdGVkIGZvcgogICAgIGFub3RoZXIg cHJvY2VzcyBvbiBzYW1lIHB0eS4KLS0tCiB3aW5zdXAvY3lnd2luL2R0YWJsZS5jYyAgICAgICAg ICAgfCAgIDMyIC0KIHdpbnN1cC9jeWd3aW4vZmhhbmRsZXIuaCAgICAgICAgICB8ICAgNTMgKy0K IHdpbnN1cC9jeWd3aW4vZmhhbmRsZXJfY29uc29sZS5jYyB8ICAgNDMgLQogd2luc3VwL2N5Z3dp bi9maGFuZGxlcl90dHkuY2MgICAgIHwgMTc3MCArKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogd2luc3VwL2N5Z3dpbi9mb3JrLmNjICAgICAgICAgICAgIHwgICAzMCAtCiB3aW5zdXAvY3ln d2luL3NlbGVjdC5jYyAgICAgICAgICAgfCAgICA1ICstCiB3aW5zdXAvY3lnd2luL3NtYWxscHJp bnQuY2MgICAgICAgfCAgICAyIC0KIHdpbnN1cC9jeWd3aW4vc3Bhd24uY2MgICAgICAgICAgICB8 ICAgOTAgKy0KIHdpbnN1cC9jeWd3aW4vc3RyYWNlLmNjICAgICAgICAgICB8ICAgIDIgLQogd2lu c3VwL2N5Z3dpbi90dHkuY2MgICAgICAgICAgICAgIHwgICAyMCArLQogd2luc3VwL2N5Z3dpbi90 dHkuaCAgICAgICAgICAgICAgIHwgICAxMyArLQogd2luc3VwL2N5Z3dpbi93aW5zdXAuaCAgICAg ICAgICAgIHwgICAgMyAtCiAxMiBmaWxlcyBjaGFuZ2VkLCAzNDUgaW5zZXJ0aW9ucygrKSwgMTcx OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL2R0YWJsZS5jYyBiL3dp bnN1cC9jeWd3aW4vZHRhYmxlLmNjCmluZGV4IGU5ZTAwNWIwOC4uNmE5MWUzM2JjIDEwMDY0NAot LS0gYS93aW5zdXAvY3lnd2luL2R0YWJsZS5jYworKysgYi93aW5zdXAvY3lnd2luL2R0YWJsZS5j YwpAQCAtMTQ3LDM4ICsxNDcsNiBAQCBkdGFibGU6OmdldF9kZWJ1Z2dlcl9pbmZvICgpCiB2b2lk CiBkdGFibGU6OnN0ZGlvX2luaXQgKCkKIHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpICsr KQotICAgIHsKLSAgICAgIGNvbnN0IGludCBjaGtfb3JkZXJbXSA9IHsxLCAwLCAyfTsKLSAgICAg IGludCBmZCA9IGNoa19vcmRlcltpXTsKLSAgICAgIGZoYW5kbGVyX2Jhc2UgKmZoID0gY3lnaGVh cC0+ZmR0YWJbZmRdOwotICAgICAgaWYgKGZoICYmIGZoLT5nZXRfbWFqb3IgKCkgPT0gREVWX1BU WVNfTUFKT1IpCi0JewotCSAgZmhhbmRsZXJfcHR5X3NsYXZlICpwdHlzID0gKGZoYW5kbGVyX3B0 eV9zbGF2ZSAqKSBmaDsKLQkgIGlmIChwdHlzLT5nZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0JICAg IHsKLQkgICAgICBib29sIGF0dGFjaGVkID0gISFmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29s ZV9wcm9jZXNzX2lkCi0JCShwdHlzLT5nZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCksIHRydWUpOwot CSAgICAgIGlmIChhdHRhY2hlZCkKLQkJYnJlYWs7Ci0JICAgICAgZWxzZQotCQl7Ci0JCSAgLyog Tm90IGF0dGFjaGVkIHRvIHBzZXVkbyBjb25zb2xlIGluIGZvcmsoKSBvciBzcGF3bigpCi0JCSAg ICAgYnkgc29tZSByZWFzb24uIFRoaXMgaGFwcGVucyBpZiB0aGUgZXhlY3V0YWJsZSBpcwotCQkg ICAgIGEgd2luZG93cyBHVUkgYmluYXJ5LCBzdWNoIGFzIG1pbnR0eS4gKi8KLQkJICBGcmVlQ29u c29sZSAoKTsKLQkJICBpZiAoQXR0YWNoQ29uc29sZSAocHR5cy0+Z2V0X2hlbHBlcl9wcm9jZXNz X2lkICgpKSkKLQkJICAgIHsKLQkJICAgICAgcHR5cy0+Zml4dXBfYWZ0ZXJfYXR0YWNoIChmYWxz ZSwgZmQpOwotCQkgICAgICBicmVhazsKLQkJICAgIH0KLQkJfQotCSAgICB9Ci0JfQotICAgICAg ZWxzZSBpZiAoZmggJiYgZmgtPmdldF9tYWpvciAoKSA9PSBERVZfQ09OU19NQUpPUikKLQlicmVh azsKLSAgICB9Ci0KICAgaWYgKG15c2VsZi0+Y3lnc3RhcnRlZCB8fCBJU1NUQVRFIChteXNlbGYs IFBJRF9DWUdQQVJFTlQpKQogICAgIHsKICAgICAgIHR0eV9taW4gKnQgPSBjeWd3aW5fc2hhcmVk LT50dHkuZ2V0X2N0dHlwICgpOwpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9maGFuZGxlci5o IGIvd2luc3VwL2N5Z3dpbi9maGFuZGxlci5oCmluZGV4IDYwYmQyN2UwMC4uZWJhY2EzYmI4IDEw MDY0NAotLS0gYS93aW5zdXAvY3lnd2luL2ZoYW5kbGVyLmgKKysrIGIvd2luc3VwL2N5Z3dpbi9m aGFuZGxlci5oCkBAIC0zMjYsMTYgKzMyNiwxNiBAQCBjbGFzcyBmaGFuZGxlcl9iYXNlCiAgIHZp cnR1YWwgc2l6ZV90ICZyYWl4cHV0ICgpIHsgcmV0dXJuIHJhLnJhaXhwdXQ7IH07CiAgIHZpcnR1 YWwgc2l6ZV90ICZyYWJ1ZmxlbiAoKSB7IHJldHVybiByYS5yYWJ1ZmxlbjsgfTsKIAotICB2aXJ0 dWFsIGJvb2wgZ2V0X3JlYWRhaGVhZF92YWxpZCAoKSB7IHJldHVybiByYWl4Z2V0ICgpIDwgcmFs ZW4gKCk7IH0KKyAgYm9vbCBnZXRfcmVhZGFoZWFkX3ZhbGlkICgpIHsgcmV0dXJuIHJhaXhnZXQg KCkgPCByYWxlbiAoKTsgfQogICBpbnQgcHV0c19yZWFkYWhlYWQgKGNvbnN0IGNoYXIgKnMsIHNp emVfdCBsZW4gPSAoc2l6ZV90KSAtMSk7Ci0gIHZpcnR1YWwgaW50IHB1dF9yZWFkYWhlYWQgKGNo YXIgdmFsdWUpOworICBpbnQgcHV0X3JlYWRhaGVhZCAoY2hhciB2YWx1ZSk7CiAKICAgaW50IGdl dF9yZWFkYWhlYWQgKCk7CiAgIGludCBwZWVrX3JlYWRhaGVhZCAoaW50IHF1ZXJ5cHV0ID0gMCk7 CiAKICAgdm9pZCBzZXRfcmVhZGFoZWFkX3ZhbGlkIChpbnQgdmFsLCBpbnQgY2ggPSAtMSk7CiAK LSAgdmlydHVhbCBpbnQgZ2V0X3JlYWRhaGVhZF9pbnRvX2J1ZmZlciAoY2hhciAqYnVmLCBzaXpl X3QgYnVmbGVuKTsKKyAgaW50IGdldF9yZWFkYWhlYWRfaW50b19idWZmZXIgKGNoYXIgKmJ1Ziwg c2l6ZV90IGJ1Zmxlbik7CiAKICAgYm9vbCBoYXNfYWNscyAoKSBjb25zdCB7IHJldHVybiBwYy5o YXNfYWNscyAoKTsgfQogCkBAIC0xOTA5LDcgKzE5MDksNyBAQCBjbGFzcyBmaGFuZGxlcl90ZXJt aW9zOiBwdWJsaWMgZmhhbmRsZXJfYmFzZQogICBpbnQgaW9jdGwgKGludCwgdm9pZCAqKTsKICAg dHR5X21pbiAqX3RjOwogICB0dHkgKmdldF90dHlwICgpIHtyZXR1cm4gKHR0eSAqKSB0YyAoKTt9 Ci0gIHZpcnR1YWwgaW50IGVhdF9yZWFkYWhlYWQgKGludCBuKTsKKyAgaW50IGVhdF9yZWFkYWhl YWQgKGludCBuKTsKIAogIHB1YmxpYzoKICAgdHR5X21pbiomIHRjICgpIHtyZXR1cm4gX3RjO30K QEAgLTIxODgsNyArMjE4OCw2IEBAIHByaXZhdGU6CiAgIHN0YXRpYyBib29sIG5lZWRfaW52aXNp YmxlICgpOwogICBzdGF0aWMgdm9pZCBmcmVlX2NvbnNvbGUgKCk7CiAgIHN0YXRpYyBjb25zdCBj aGFyICpnZXRfbm9uYXNjaWlfa2V5IChJTlBVVF9SRUNPUkQmIGlucHV0X3JlYywgY2hhciAqKTsK LSAgc3RhdGljIERXT1JEIGdldF9jb25zb2xlX3Byb2Nlc3NfaWQgKERXT1JEIHBpZCwgYm9vbCBt YXRjaCk7CiAKICAgZmhhbmRsZXJfY29uc29sZSAodm9pZCAqKSB7fQogCkBAIC0yMjY4LDE5ICsy MjY3LDcgQEAgY2xhc3MgZmhhbmRsZXJfcHR5X2NvbW1vbjogcHVibGljIGZoYW5kbGVyX3Rlcm1p b3MKICAgICByZXR1cm4gZmg7CiAgIH0KIAotICBib29sIGF0dGFjaF9wY29uX2luX2ZvcmsgKHZv aWQpCi0gIHsKLSAgICByZXR1cm4gZ2V0X3R0eXAgKCktPmF0dGFjaF9wY29uX2luX2Zvcms7Ci0g IH0KLSAgRFdPUkQgZ2V0X2hlbHBlcl9wcm9jZXNzX2lkICh2b2lkKQotICB7Ci0gICAgcmV0dXJu IGdldF90dHlwICgpLT5oZWxwZXJfcHJvY2Vzc19pZDsKLSAgfQotICBIUENPTiBnZXRfcHNldWRv X2NvbnNvbGUgKHZvaWQpCi0gIHsKLSAgICByZXR1cm4gZ2V0X3R0eXAgKCktPmhfcHNldWRvX2Nv bnNvbGU7Ci0gIH0KLSAgYm9vbCB0b19iZV9yZWFkX2Zyb21fcGNvbiAodm9pZCk7CisgIHZvaWQg cmVzaXplX3BzZXVkb19jb25zb2xlIChzdHJ1Y3Qgd2luc2l6ZSAqKTsKIAogIHByb3RlY3RlZDoK ICAgQk9PTCBwcm9jZXNzX29wb3N0X291dHB1dCAoSEFORExFIGgsCkBAIC0yMjkxLDIzICsyMjc4 LDE1IEBAIGNsYXNzIGZoYW5kbGVyX3B0eV9zbGF2ZTogcHVibGljIGZoYW5kbGVyX3B0eV9jb21t b24KIHsKICAgSEFORExFIGludXNlOwkJCS8vIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhIHR0eSBp cyBpbiB1c2UKICAgSEFORExFIG91dHB1dF9oYW5kbGVfY3lnLCBpb19oYW5kbGVfY3lnOwotICBE V09SRCBwaWRfcmVzdG9yZTsKLSAgaW50IGZkOwogCiAgIC8qIEhlbHBlciBmdW5jdGlvbnMgZm9y IGZjaG1vZCBhbmQgZmNob3duLiAqLwogICBib29sIGZjaF9vcGVuX2hhbmRsZXMgKGJvb2wgY2hv d24pOwogICBpbnQgZmNoX3NldF9zZCAoc2VjdXJpdHlfZGVzY3JpcHRvciAmc2QsIGJvb2wgY2hv d24pOwogICB2b2lkIGZjaF9jbG9zZV9oYW5kbGVzICgpOwogCi0gIGJvb2wgdHJ5X3JlYXR0YWNo X3Bjb24gKCk7Ci0gIHZvaWQgcmVzdG9yZV9yZWF0dGFjaF9wY29uICgpOwotICBpbmxpbmUgdm9p ZCBmcmVlX2F0dGFjaGVkX2NvbnNvbGUgKCk7Ci0KICBwdWJsaWM6CiAgIC8qIENvbnN0cnVjdG9y ICovCiAgIGZoYW5kbGVyX3B0eV9zbGF2ZSAoaW50KTsKLSAgLyogRGVzdHJ1Y3RvciAqLwotICB+ ZmhhbmRsZXJfcHR5X3NsYXZlICgpOwogCiAgIHZvaWQgc2V0X291dHB1dF9oYW5kbGVfY3lnIChI QU5ETEUgaCkgeyBvdXRwdXRfaGFuZGxlX2N5ZyA9IGg7IH0KICAgSEFORExFJiBnZXRfb3V0cHV0 X2hhbmRsZV9jeWcgKCkgeyByZXR1cm4gb3V0cHV0X2hhbmRsZV9jeWc7IH0KQEAgLTIzMTksOSAr MjI5OCw2IEBAIGNsYXNzIGZoYW5kbGVyX3B0eV9zbGF2ZTogcHVibGljIGZoYW5kbGVyX3B0eV9j b21tb24KICAgc3NpemVfdCBfX3N0ZGNhbGwgd3JpdGUgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90 IGxlbik7CiAgIHZvaWQgX19yZWczIHJlYWQgKHZvaWQgKnB0ciwgc2l6ZV90JiBsZW4pOwogICBp bnQgaW5pdCAoSEFORExFLCBEV09SRCwgbW9kZV90KTsKLSAgaW50IGVhdF9yZWFkYWhlYWQgKGlu dCBuKTsKLSAgaW50IGdldF9yZWFkYWhlYWRfaW50b19idWZmZXIgKGNoYXIgKmJ1Ziwgc2l6ZV90 IGJ1Zmxlbik7Ci0gIGJvb2wgZ2V0X3JlYWRhaGVhZF92YWxpZCAodm9pZCk7CiAKICAgaW50IHRj c2V0YXR0ciAoaW50IGEsIGNvbnN0IHN0cnVjdCB0ZXJtaW9zICp0KTsKICAgaW50IHRjZ2V0YXR0 ciAoc3RydWN0IHRlcm1pb3MgKnQpOwpAQCAtMjM1OCwyMCArMjMzNCwxMiBAQCBjbGFzcyBmaGFu ZGxlcl9wdHlfc2xhdmU6IHB1YmxpYyBmaGFuZGxlcl9wdHlfY29tbW9uCiAgICAgY29weXRvIChm aCk7CiAgICAgcmV0dXJuIGZoOwogICB9Ci0gIHZvaWQgc2V0X3N3aXRjaF90b19wY29uIChpbnQg ZmQpOworICBib29sIHNldHVwX3BzZXVkb2NvbnNvbGUgKFNUQVJUVVBJTkZPRVhXICpzaSwgYm9v bCBub3Bjb24pOworICB2b2lkIGNsb3NlX3BzZXVkb2NvbnNvbGUgKHZvaWQpOworICB2b2lkIHNl dF9zd2l0Y2hfdG9fcGNvbiAodm9pZCk7CiAgIHZvaWQgcmVzZXRfc3dpdGNoX3RvX3Bjb24gKHZv aWQpOwotICB2b2lkIHB1c2hfdG9fcGNvbl9zY3JlZW5idWZmZXIgKGNvbnN0IGNoYXIgKnB0ciwg c2l6ZV90IGxlbiwgYm9vbCBpc19lY2hvKTsKICAgdm9pZCBtYXNrX3N3aXRjaF90b19wY29uX2lu IChib29sIG1hc2spOwotICB2b2lkIGZpeHVwX2FmdGVyX2F0dGFjaCAoYm9vbCBuYXRpdmVfbWF5 YmUsIGludCBmZCk7Ci0gIGJvb2wgaXNfbGluZV9pbnB1dCAodm9pZCkKLSAgewotICAgIHJldHVy biBnZXRfdHR5cCAoKS0+dGkuY19sZmxhZyAmIElDQU5PTjsKLSAgfQogICB2b2lkIHNldHVwX2xv Y2FsZSAodm9pZCk7Ci0gIHZvaWQgc2V0X2ZyZWVjb25zb2xlX29uX2Nsb3NlIChib29sIHZhbCk7 Ci0gIHZvaWQgdHJpZ2dlcl9yZWRyYXdfc2NyZWVuICh2b2lkKTsKLSAgdm9pZCBwdWxsX3Bjb25f aW5wdXQgKHZvaWQpOwotICB2b2lkIHVwZGF0ZV9wY29uX2lucHV0X3N0YXRlIChib29sIG5lZWRf bG9jayk7CiB9OwogCiAjZGVmaW5lIF9fcHRzbmFtZShidWYsIHVuaXQpIF9fc21hbGxfc3ByaW50 ZiAoKGJ1ZiksICIvZGV2L3B0eSVkIiwgKHVuaXQpKQpAQCAtMjM5Niw3ICsyMzY0LDYgQEAgcHVi bGljOgogICBpbnQgcHJvY2Vzc19zbGF2ZV9vdXRwdXQgKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwg aW50IHBrdG1vZGVfb24pOwogICB2b2lkIGRvZWNobyAoY29uc3Qgdm9pZCAqc3RyLCBEV09SRCBs ZW4pOwogICBpbnQgYWNjZXB0X2lucHV0ICgpOwotICBpbnQgcHV0X3JlYWRhaGVhZCAoY2hhciB2 YWx1ZSk7CiAgIGludCBvcGVuIChpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlID0gMCk7CiAgIHZvaWQg b3Blbl9zZXR1cCAoaW50IGZsYWdzKTsKICAgc3NpemVfdCBfX3N0ZGNhbGwgd3JpdGUgKGNvbnN0 IHZvaWQgKnB0ciwgc2l6ZV90IGxlbik7CkBAIC0yNDM1LDkgKzI0MDIsNyBAQCBwdWJsaWM6CiAg ICAgY29weXRvIChmaCk7CiAgICAgcmV0dXJuIGZoOwogICB9Ci0KLSAgYm9vbCBzZXR1cF9wc2V1 ZG9jb25zb2xlICh2b2lkKTsKLSAgdm9pZCB0cmFuc2Zlcl9pbnB1dF90b19wY29uICh2b2lkKTsK KyAgYm9vbCB0b19iZV9yZWFkX2Zyb21fcGNvbiAodm9pZCk7CiB9OwogCiBjbGFzcyBmaGFuZGxl cl9kZXZfbnVsbDogcHVibGljIGZoYW5kbGVyX2Jhc2UKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3 aW4vZmhhbmRsZXJfY29uc29sZS5jYyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfY29uc29sZS5j YwppbmRleCA1Mjc0MWNlOGIuLjAyYTU5OTZhMSAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9m aGFuZGxlcl9jb25zb2xlLmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfY29uc29sZS5j YwpAQCAtMTIwNiwxOCArMTIwNiw2IEBAIGZoYW5kbGVyX2NvbnNvbGU6OmNsb3NlICgpCiAgIGlm IChjb25fcmEucmFidWYpCiAgICAgZnJlZSAoY29uX3JhLnJhYnVmKTsKIAotICAvKiBJZiBhbHJl YWR5IGF0dGFjaGVkIHRvIHBzZXVkbyBjb25zb2xlLCBkb24ndCBjYWxsIGZyZWVfY29uc29sZSAo KSAqLwotICBjeWdoZWFwX2ZkZW51bSBjZmQgKGZhbHNlKTsKLSAgd2hpbGUgKGNmZC5uZXh0ICgp ID49IDApCi0gICAgaWYgKGNmZC0+Z2V0X21ham9yICgpID09IERFVl9QVFlNX01BSk9SIHx8Ci0J Y2ZkLT5nZXRfbWFqb3IgKCkgPT0gREVWX1BUWVNfTUFKT1IpCi0gICAgICB7Ci0JZmhhbmRsZXJf cHR5X2NvbW1vbiAqdCA9Ci0JICAoZmhhbmRsZXJfcHR5X2NvbW1vbiAqKSAoZmhhbmRsZXJfYmFz ZSAqKSBjZmQ7Ci0JaWYgKGdldF9jb25zb2xlX3Byb2Nlc3NfaWQgKHQtPmdldF9oZWxwZXJfcHJv Y2Vzc19pZCAoKSwgdHJ1ZSkpCi0JICByZXR1cm4gMDsKLSAgICAgIH0KLQogICBpZiAoIWhhdmVf ZXhlY2VkKQogICAgIGZyZWVfY29uc29sZSAoKTsKICAgcmV0dXJuIDA7CkBAIC0zNjExLDM3ICsz NTk5LDYgQEAgZmhhbmRsZXJfY29uc29sZTo6bmVlZF9pbnZpc2libGUgKCkKICAgcmV0dXJuIGI7 CiB9CiAKLURXT1JECi1maGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkIChE V09SRCBwaWQsIGJvb2wgbWF0Y2gpCi17Ci0gIERXT1JEIHRtcDsKLSAgRFdPUkQgbnVtLCBudW1f cmVxOwotICBudW0gPSAxOwotICBudW1fcmVxID0gR2V0Q29uc29sZVByb2Nlc3NMaXN0ICgmdG1w LCBudW0pOwotICBEV09SRCAqbGlzdDsKLSAgd2hpbGUgKHRydWUpCi0gICAgewotICAgICAgbGlz dCA9IChEV09SRCAqKQotCUhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIG51bV9yZXEg KiBzaXplb2YgKERXT1JEKSk7Ci0gICAgICBudW0gPSBudW1fcmVxOwotICAgICAgbnVtX3JlcSA9 IEdldENvbnNvbGVQcm9jZXNzTGlzdCAobGlzdCwgbnVtKTsKLSAgICAgIGlmIChudW1fcmVxID4g bnVtKQotCUhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgbGlzdCk7Ci0gICAgICBlbHNl Ci0JYnJlYWs7Ci0gICAgfQotICBudW0gPSBudW1fcmVxOwotCi0gIHRtcCA9IDA7Ci0gIGZvciAo RFdPUkQgaT0wOyBpPG51bTsgaSsrKQotICAgIGlmICgobWF0Y2ggJiYgbGlzdFtpXSA9PSBwaWQp IHx8ICghbWF0Y2ggJiYgbGlzdFtpXSAhPSBwaWQpKQotICAgICAgLyogTGFzdCBvbmUgaXMgdGhl IG9sZGVzdC4gKi8KLSAgICAgIC8qIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvdGVybWlu YWwvaXNzdWVzLzk1ICovCi0gICAgICB0bXAgPSBsaXN0W2ldOwotICBIZWFwRnJlZSAoR2V0UHJv Y2Vzc0hlYXAgKCksIDAsIGxpc3QpOwotICByZXR1cm4gdG1wOwotfQotCiBEV09SRAogZmhhbmRs ZXJfY29uc29sZTo6X19hY3F1aXJlX2lucHV0X211dGV4IChjb25zdCBjaGFyICpmbiwgaW50IGxu LCBEV09SRCBtcykKIHsKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfdHR5LmNj IGIvd2luc3VwL2N5Z3dpbi9maGFuZGxlcl90dHkuY2MKaW5kZXggNmEwMDRmM2E1Li4zNzY4MmRj M2UgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfdHR5LmNjCisrKyBiL3dpbnN1 cC9jeWd3aW4vZmhhbmRsZXJfdHR5LmNjCkBAIC0yNSw3ICsyNSw2IEBAIGRldGFpbHMuICovCiAj aW5jbHVkZSAiY2hpbGRfaW5mby5oIgogI2luY2x1ZGUgPGFzbS9zb2NrZXQuaD4KICNpbmNsdWRl ICJjeWd3YWl0LmgiCi0jaW5jbHVkZSAidGxzX3BidWYuaCIKICNpbmNsdWRlICJyZWdpc3RyeS5o IgogCiAjaWZuZGVmIFBST0NfVEhSRUFEX0FUVFJJQlVURV9QU0VVRE9DT05TT0xFCkBAIC0zMyw3 ICszMiw2IEBAIGRldGFpbHMuICovCiAjZW5kaWYgLyogUFJPQ19USFJFQURfQVRUUklCVVRFX1BT RVVET0NPTlNPTEUgKi8KIAogZXh0ZXJuICJDIiBpbnQgc3NjYW5mIChjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKiwgLi4uKTsKLWV4dGVybiAiQyIgaW50IHR0eW5hbWVfciAoaW50LCBjaGFyKiwg c2l6ZV90KTsKIAogZXh0ZXJuICJDIiB7CiAgIEhSRVNVTFQgV0lOQVBJIENyZWF0ZVBzZXVkb0Nv bnNvbGUgKENPT1JELCBIQU5ETEUsIEhBTkRMRSwgRFdPUkQsIEhQQ09OICopOwpAQCAtNjAsMjAg KzU4LDEwIEBAIHN0cnVjdCBwaXBlX3JlcGx5IHsKICAgRFdPUkQgZXJyb3I7CiB9OwogCi1zdGF0 aWMgaW50IHBjb25fYXR0YWNoZWRfdG8gPSAtMTsKIHN0YXRpYyBib29sIGlzSHlicmlkOwotc3Rh dGljIGJvb2wgZG9fbm90X3Jlc2V0X3N3aXRjaF90b19wY29uOwotc3RhdGljIGJvb2wgZnJlZWNv bnNvbGVfb25fY2xvc2UgPSB0cnVlOwotc3RhdGljIHR0eSAqbGFzdF90dHlwID0gTlVMTDsKLQot dm9pZAotY2xlYXJfcGNvbl9hdHRhY2hlZF90byAodm9pZCkKLXsKLSAgcGNvbl9hdHRhY2hlZF90 byA9IC0xOwotfQogCiBzdGF0aWMgdm9pZAotc2V0X3N3aXRjaF90b19wY29uICh2b2lkKQorc2V0 X3N3aXRjaF90b19wY29uIChIQU5ETEUgaCkKIHsKICAgY3lnaGVhcF9mZGVudW0gY2ZkIChmYWxz ZSk7CiAgIGludCBmZDsKQEAgLTgyLDI4MCArNzAsMTcgQEAgc2V0X3N3aXRjaF90b19wY29uICh2 b2lkKQogICAgICAgewogCWZoYW5kbGVyX2Jhc2UgKmZoID0gY2ZkOwogCWZoYW5kbGVyX3B0eV9z bGF2ZSAqcHR5cyA9IChmaGFuZGxlcl9wdHlfc2xhdmUgKikgZmg7Ci0JaWYgKHB0eXMtPmdldF9w c2V1ZG9fY29uc29sZSAoKSkKLQkgIHsKLQkgICAgcHR5cy0+c2V0X3N3aXRjaF90b19wY29uIChm ZCk7Ci0JICAgIHB0eXMtPnRyaWdnZXJfcmVkcmF3X3NjcmVlbiAoKTsKLQkgICAgRFdPUkQgbW9k ZSA9Ci0JICAgICAgRU5BQkxFX1BST0NFU1NFRF9JTlBVVCB8IEVOQUJMRV9MSU5FX0lOUFVUIHwg RU5BQkxFX0VDSE9fSU5QVVQ7Ci0JICAgIFNldENvbnNvbGVNb2RlIChwdHlzLT5nZXRfaGFuZGxl ICgpLCBtb2RlKTsKLQkgIH0KKwlpZiAoaCA9PSBwdHlzLT5nZXRfaGFuZGxlICgpKQorCSAgcHR5 cy0+c2V0X3N3aXRjaF90b19wY29uICgpOwogCXJldHVybjsKICAgICAgIH0KLSAgLyogTm8gcHR5 IHNsYXZlIG9wZW5lZCAqLwotICBpZiAobGFzdF90dHlwKSAvKiBNYWtlIHN5c3RlbV9wcmludGYo KSB3b3JrIGFmdGVyIGNsb3NpbmcgcHR5IHNsYXZlICovCi0gICAgbGFzdF90dHlwLT5zZXRfc3dp dGNoX3RvX3Bjb25fb3V0ICh0cnVlKTsKLX0KLQotc3RhdGljIHZvaWQKLWZvcmNlX2F0dGFjaF90 b19wY29uIChIQU5ETEUgaCkKLXsKLSAgYm9vbCBhdHRhY2hfZG9uZSA9IGZhbHNlOwotICBmb3Ig KGludCBuID0gMDsgbiA8IDI7IG4gKyspCi0gICAgewotICAgICAgLyogRmlyc3QgdGltZSwgYXR0 YWNoIHRvIHRoZSBwdHkgd2hvc2UgaGFuZGxlIHZhbHVlIGlzIG1hdGNoLgotCSBTZWNvbmQgdGlt ZSwgdHJ5IHRvIGF0dGFjaCB0byBhbnkgcHR5LiAqLwotICAgICAgY3lnaGVhcF9mZGVudW0gY2Zk IChmYWxzZSk7Ci0gICAgICB3aGlsZSAoY2ZkLm5leHQgKCkgPj0gMCkKLQlpZiAoY2ZkLT5nZXRf bWFqb3IgKCkgPT0gREVWX1BUWVNfTUFKT1IpCi0JICB7Ci0JICAgIGZoYW5kbGVyX2Jhc2UgKmZo ID0gY2ZkOwotCSAgICBmaGFuZGxlcl9wdHlfc2xhdmUgKnB0eXMgPSAoZmhhbmRsZXJfcHR5X3Ns YXZlICopIGZoOwotCSAgICBpZiAoIXB0eXMtPmdldF9wc2V1ZG9fY29uc29sZSAoKSkKLQkgICAg ICBjb250aW51ZTsKLQkgICAgaWYgKG4gIT0gMAotCQl8fCBoID09IHB0eXMtPmdldF9oYW5kbGUg KCkKLQkJfHwgaCA9PSBwdHlzLT5nZXRfb3V0cHV0X2hhbmRsZSAoKSkKLQkgICAgICB7Ci0JCWlm IChmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkCi0JCQkJICAocHR5cy0+ Z2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpLCB0cnVlKSkKLQkJICBhdHRhY2hfZG9uZSA9IHRydWU7 Ci0JCWVsc2UKLQkJICB7Ci0JCSAgICBGcmVlQ29uc29sZSAoKTsKLQkJICAgIGlmIChBdHRhY2hD b25zb2xlIChwdHlzLT5nZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCkpKQotCQkgICAgICB7Ci0JCQlw Y29uX2F0dGFjaGVkX3RvID0gcHR5cy0+Z2V0X21pbm9yICgpOwotCQkJYXR0YWNoX2RvbmUgPSB0 cnVlOwotCQkgICAgICB9Ci0JCSAgICBlbHNlCi0JCSAgICAgIHBjb25fYXR0YWNoZWRfdG8gPSAt MTsKLQkJICB9Ci0JCWJyZWFrOwotCSAgICAgIH0KLQkgIH0KLQllbHNlIGlmIChjZmQtPmdldF9t YWpvciAoKSA9PSBERVZfQ09OU19NQUpPUikKLQkgIHsKLQkgICAgZmhhbmRsZXJfYmFzZSAqZmgg PSBjZmQ7Ci0JICAgIGZoYW5kbGVyX2NvbnNvbGUgKmNvbnMgPSAoZmhhbmRsZXJfY29uc29sZSAq KSBmaDsKLQkgICAgaWYgKG4gIT0gMAotCQl8fCBoID09IGNvbnMtPmdldF9oYW5kbGUgKCkKLQkJ fHwgaCA9PSBjb25zLT5nZXRfb3V0cHV0X2hhbmRsZSAoKSkKLQkgICAgICB7Ci0JCS8qIElmIHRo ZSBwcm9jZXNzIGlzIHJ1bm5pbmcgb24gYSBjb25zb2xlLAotCQkgICB0aGUgcGFyZW50IHByb2Nl c3Mgc2hvdWxkIGJlIGF0dGFjaGVkCi0JCSAgIHRvIHRoZSBzYW1lIGNvbnNvbGUuICovCi0JCURX T1JEIGF0dGFjaF93cGlkOwotCQlpZiAobXlzZWxmLT5wcGlkID09IDEpCi0JCSAgYXR0YWNoX3dw aWQgPSBBVFRBQ0hfUEFSRU5UX1BST0NFU1M7Ci0JCWVsc2UKLQkJICB7Ci0JCSAgICBwaW5mbyBw IChteXNlbGYtPnBwaWQpOwotCQkgICAgYXR0YWNoX3dwaWQgPSBwLT5kd1Byb2Nlc3NJZDsKLQkJ ICB9Ci0JCUZyZWVDb25zb2xlICgpOwotCQlpZiAoQXR0YWNoQ29uc29sZSAoYXR0YWNoX3dwaWQp KQotCQkgIHsKLQkJICAgIHBjb25fYXR0YWNoZWRfdG8gPSAtMTsKLQkJICAgIGF0dGFjaF9kb25l ID0gdHJ1ZTsKLQkJICB9Ci0JCWVsc2UKLQkJICBwY29uX2F0dGFjaGVkX3RvID0gLTE7Ci0JCWJy ZWFrOwotCSAgICAgIH0KLQkgIH0KLSAgICAgIGlmIChhdHRhY2hfZG9uZSkKLQlicmVhazsKLSAg ICB9Ci19Ci0KLXZvaWQKLXNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKEhBTkRMRSBo KQotewotICBpZiAoR2V0RmlsZVR5cGUgKGgpID09IEZJTEVfVFlQRV9DSEFSKQotICAgIHsKLSAg ICAgIGZvcmNlX2F0dGFjaF90b19wY29uIChoKTsKLSAgICAgIERXT1JEIGR1bW15OwotICAgICAg aWYgKCFpc0h5YnJpZCAmJiAoR2V0Q29uc29sZU1vZGUgKGgsICZkdW1teSkKLQkJCXx8IEdldExh c3RFcnJvciAoKSAhPSBFUlJPUl9JTlZBTElEX0hBTkRMRSkpCi0JewotCSAgaXNIeWJyaWQgPSB0 cnVlOwotCSAgc2V0X3N3aXRjaF90b19wY29uICgpOwotCX0KLSAgICB9Ci19Ci0KLWlubGluZSB2 b2lkCi1maGFuZGxlcl9wdHlfc2xhdmU6OmZyZWVfYXR0YWNoZWRfY29uc29sZSAoKQotewotICBi b29sIGF0dGFjaGVkID0gZ2V0X3R0eXAgKCkgPwotICAgIGZoYW5kbGVyX2NvbnNvbGU6OmdldF9j b25zb2xlX3Byb2Nlc3NfaWQgKGdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSwgdHJ1ZSkKLSAgICA6 IChnZXRfbWlub3IgKCkgPT0gcGNvbl9hdHRhY2hlZF90byk7Ci0gIGlmIChmcmVlY29uc29sZV9v bl9jbG9zZSAmJiBhdHRhY2hlZCkKLSAgICB7Ci0gICAgICBGcmVlQ29uc29sZSAoKTsKLSAgICAg IHBjb25fYXR0YWNoZWRfdG8gPSAtMTsKLSAgICB9CiB9CiAKICNkZWZpbmUgREVGX0hPT0sobmFt ZSkgc3RhdGljIF9fdHlwZW9mX18gKG5hbWUpICpuYW1lIyNfT3JpZwotREVGX0hPT0sgKFdyaXRl RmlsZSk7Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xlQSk7Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xl Vyk7Ci1ERUZfSE9PSyAoUmVhZEZpbGUpOwotREVGX0hPT0sgKFJlYWRDb25zb2xlQSk7Ci1ERUZf SE9PSyAoUmVhZENvbnNvbGVXKTsKLURFRl9IT09LIChXcml0ZUNvbnNvbGVPdXRwdXRBKTsKLURF Rl9IT09LIChXcml0ZUNvbnNvbGVPdXRwdXRXKTsKLURFRl9IT09LIChXcml0ZUNvbnNvbGVPdXRw dXRDaGFyYWN0ZXJBKTsKLURFRl9IT09LIChXcml0ZUNvbnNvbGVPdXRwdXRDaGFyYWN0ZXJXKTsK LURFRl9IT09LIChXcml0ZUNvbnNvbGVPdXRwdXRBdHRyaWJ1dGUpOwotREVGX0hPT0sgKFNldENv bnNvbGVDdXJzb3JQb3NpdGlvbik7Ci1ERUZfSE9PSyAoU2V0Q29uc29sZVRleHRBdHRyaWJ1dGUp OwotREVGX0hPT0sgKFdyaXRlQ29uc29sZUlucHV0QSk7Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xl SW5wdXRXKTsKLURFRl9IT09LIChSZWFkQ29uc29sZUlucHV0QSk7Ci1ERUZfSE9PSyAoUmVhZENv bnNvbGVJbnB1dFcpOwotREVGX0hPT0sgKFBlZWtDb25zb2xlSW5wdXRBKTsKLURFRl9IT09LIChQ ZWVrQ29uc29sZUlucHV0Vyk7CiAvKiBDcmVhdGVQcm9jZXNzKCkgaXMgaG9va2VkIGZvciBHREIg ZXRjLiAqLwogREVGX0hPT0sgKENyZWF0ZVByb2Nlc3NBKTsKIERFRl9IT09LIChDcmVhdGVQcm9j ZXNzVyk7CiAKLXN0YXRpYyBCT09MIFdJTkFQSQotV3JpdGVGaWxlX0hvb2tlZAotICAgICAoSEFO RExFIGgsIExQQ1ZPSUQgcCwgRFdPUkQgbCwgTFBEV09SRCBuLCBMUE9WRVJMQVBQRUQgbykKLXsK LSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0ZUZp bGVfT3JpZyAoaCwgcCwgbCwgbiwgbyk7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVdyaXRlQ29u c29sZUFfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgTFBDVk9JRCBwLCBEV09SRCBsLCBMUERXT1JE IG4sIExQVk9JRCBvKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsK LSAgcmV0dXJuIFdyaXRlQ29uc29sZUFfT3JpZyAoaCwgcCwgbCwgbiwgbyk7Ci19Ci1zdGF0aWMg Qk9PTCBXSU5BUEkKLVdyaXRlQ29uc29sZVdfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgTFBDVk9J RCBwLCBEV09SRCBsLCBMUERXT1JEIG4sIExQVk9JRCBvKQotewotICBzZXRfaXNoeWJyaWRfYW5k X3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFdyaXRlQ29uc29sZVdfT3JpZyAoaCwgcCwg bCwgbiwgbyk7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVJlYWRGaWxlX0hvb2tlZAotICAgICAo SEFORExFIGgsIExQVk9JRCBwLCBEV09SRCBsLCBMUERXT1JEIG4sIExQT1ZFUkxBUFBFRCBvKQot ewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFJlYWRG aWxlX09yaWcgKGgsIHAsIGwsIG4sIG8pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1SZWFkQ29u c29sZUFfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgTFBWT0lEIHAsIERXT1JEIGwsIExQRFdPUkQg biwgTFBWT0lEIG8pCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwot ICByZXR1cm4gUmVhZENvbnNvbGVBX09yaWcgKGgsIHAsIGwsIG4sIG8pOwotfQotc3RhdGljIEJP T0wgV0lOQVBJCi1SZWFkQ29uc29sZVdfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgTFBWT0lEIHAs IERXT1JEIGwsIExQRFdPUkQgbiwgTFBWT0lEIG8pCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dp dGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gUmVhZENvbnNvbGVXX09yaWcgKGgsIHAsIGwsIG4s IG8pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1Xcml0ZUNvbnNvbGVPdXRwdXRBX0hvb2tlZAot ICAgICAoSEFORExFIGgsIENPTlNUIENIQVJfSU5GTyAqcCwgQ09PUkQgcywgQ09PUkQgYywgUFNN QUxMX1JFQ1QgcikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0g IHJldHVybiBXcml0ZUNvbnNvbGVPdXRwdXRBX09yaWcgKGgsIHAsIHMsIGMsIHIpOwotfQotc3Rh dGljIEJPT0wgV0lOQVBJCi1Xcml0ZUNvbnNvbGVPdXRwdXRXX0hvb2tlZAotICAgICAoSEFORExF IGgsIENPTlNUIENIQVJfSU5GTyAqcCwgQ09PUkQgcywgQ09PUkQgYywgUFNNQUxMX1JFQ1QgcikK LXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0 ZUNvbnNvbGVPdXRwdXRXX09yaWcgKGgsIHAsIHMsIGMsIHIpOwotfQotc3RhdGljIEJPT0wgV0lO QVBJCi1Xcml0ZUNvbnNvbGVPdXRwdXRDaGFyYWN0ZXJBX0hvb2tlZAotICAgICAoSEFORExFIGgs IExQQ1NUUiBwLCBEV09SRCBsLCBDT09SRCBjLCBMUERXT1JEIG4pCi17Ci0gIHNldF9pc2h5YnJp ZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gV3JpdGVDb25zb2xlT3V0cHV0Q2hh cmFjdGVyQV9PcmlnIChoLCBwLCBsLCBjLCBuKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotV3Jp dGVDb25zb2xlT3V0cHV0Q2hhcmFjdGVyV19Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBMUENXU1RS IHAsIERXT1JEIGwsIENPT1JEIGMsIExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9z d2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0ZUNvbnNvbGVPdXRwdXRDaGFyYWN0ZXJX X09yaWcgKGgsIHAsIGwsIGMsIG4pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1Xcml0ZUNvbnNv bGVPdXRwdXRBdHRyaWJ1dGVfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgQ09OU1QgV09SRCAqYSwg RFdPUkQgbCwgQ09PUkQgYywgTFBEV09SRCBuKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRj aF90b19wY29uIChoKTsKLSAgcmV0dXJuIFdyaXRlQ29uc29sZU91dHB1dEF0dHJpYnV0ZV9Pcmln IChoLCBhLCBsLCBjLCBuKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotU2V0Q29uc29sZUN1cnNv clBvc2l0aW9uX0hvb2tlZAotICAgICAoSEFORExFIGgsIENPT1JEIGMpCi17Ci0gIHNldF9pc2h5 YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gU2V0Q29uc29sZUN1cnNvclBv c2l0aW9uX09yaWcgKGgsIGMpOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1TZXRDb25zb2xlVGV4 dEF0dHJpYnV0ZV9Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBXT1JEIGEpCi17Ci0gIHNldF9pc2h5 YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gU2V0Q29uc29sZVRleHRBdHRy aWJ1dGVfT3JpZyAoaCwgYSk7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVdyaXRlQ29uc29sZUlu cHV0QV9Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBDT05TVCBJTlBVVF9SRUNPUkQgKnIsIERXT1JE IGwsIExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7 Ci0gIHJldHVybiBXcml0ZUNvbnNvbGVJbnB1dEFfT3JpZyAoaCwgciwgbCwgbik7Ci19Ci1zdGF0 aWMgQk9PTCBXSU5BUEkKLVdyaXRlQ29uc29sZUlucHV0V19Ib29rZWQKLSAgICAgKEhBTkRMRSBo LCBDT05TVCBJTlBVVF9SRUNPUkQgKnIsIERXT1JEIGwsIExQRFdPUkQgbikKLXsKLSAgc2V0X2lz aHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0ZUNvbnNvbGVJbnB1 dFdfT3JpZyAoaCwgciwgbCwgbik7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVJlYWRDb25zb2xl SW5wdXRBX0hvb2tlZAotICAgICAoSEFORExFIGgsIFBJTlBVVF9SRUNPUkQgciwgRFdPUkQgbCwg TFBEV09SRCBuKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAg cmV0dXJuIFJlYWRDb25zb2xlSW5wdXRBX09yaWcgKGgsIHIsIGwsIG4pOwotfQotc3RhdGljIEJP T0wgV0lOQVBJCi1SZWFkQ29uc29sZUlucHV0V19Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBQSU5Q VVRfUkVDT1JEIHIsIERXT1JEIGwsIExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9z d2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBSZWFkQ29uc29sZUlucHV0V19PcmlnIChoLCBy LCBsLCBuKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotUGVla0NvbnNvbGVJbnB1dEFfSG9va2Vk Ci0gICAgIChIQU5ETEUgaCwgUElOUFVUX1JFQ09SRCByLCBEV09SRCBsLCBMUERXT1JEIG4pCi17 Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gUGVla0Nv bnNvbGVJbnB1dEFfT3JpZyAoaCwgciwgbCwgbik7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVBl ZWtDb25zb2xlSW5wdXRXX0hvb2tlZAotICAgICAoSEFORExFIGgsIFBJTlBVVF9SRUNPUkQgciwg RFdPUkQgbCwgTFBEV09SRCBuKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29u IChoKTsKLSAgcmV0dXJuIFBlZWtDb25zb2xlSW5wdXRXX09yaWcgKGgsIHIsIGwsIG4pOwotfQot LyogQ3JlYXRlUHJvY2VzcygpIGlzIGhvb2tlZCBmb3IgR0RCIGV0Yy4gKi8KIHN0YXRpYyBCT09M IFdJTkFQSQogQ3JlYXRlUHJvY2Vzc0FfSG9va2VkCiAgICAgIChMUENTVFIgbiwgTFBTVFIgYywg TFBTRUNVUklUWV9BVFRSSUJVVEVTIHBhLCBMUFNFQ1VSSVRZX0FUVFJJQlVURVMgdGEsCkBAIC0z NjMsMTEgKzg4LDE0IEBAIENyZWF0ZVByb2Nlc3NBX0hvb2tlZAogICAgICAgTFBTVEFSVFVQSU5G T0Egc2ksIExQUFJPQ0VTU19JTkZPUk1BVElPTiBwaSkKIHsKICAgSEFORExFIGg7Ci0gIGlmIChz aS0+ZHdGbGFncyAmIFNUQVJURl9VU0VTVERIQU5ETEVTKQotICAgIGggPSBzaS0+aFN0ZE91dHB1 dDsKLSAgZWxzZQotICAgIGggPSBHZXRTdGRIYW5kbGUgKFNURF9PVVRQVVRfSEFORExFKTsKLSAg c2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7CisgIGlmICghaXNIeWJyaWQpCisg ICAgeworICAgICAgaWYgKHNpLT5kd0ZsYWdzICYgU1RBUlRGX1VTRVNUREhBTkRMRVMpCisJaCA9 IHNpLT5oU3RkSW5wdXQ7CisgICAgICBlbHNlCisJaCA9IEdldFN0ZEhhbmRsZSAoU1REX0lOUFVU X0hBTkRMRSk7CisgICAgICBzZXRfc3dpdGNoX3RvX3Bjb24gKGgpOworICAgIH0KICAgcmV0dXJu IENyZWF0ZVByb2Nlc3NBX09yaWcgKG4sIGMsIHBhLCB0YSwgaW5oLCBmLCBlLCBkLCBzaSwgcGkp OwogfQogc3RhdGljIEJPT0wgV0lOQVBJCkBAIC0zNzcsMTEgKzEwNSwxNCBAQCBDcmVhdGVQcm9j ZXNzV19Ib29rZWQKICAgICAgIExQU1RBUlRVUElORk9XIHNpLCBMUFBST0NFU1NfSU5GT1JNQVRJ T04gcGkpCiB7CiAgIEhBTkRMRSBoOwotICBpZiAoc2ktPmR3RmxhZ3MgJiBTVEFSVEZfVVNFU1RE SEFORExFUykKLSAgICBoID0gc2ktPmhTdGRPdXRwdXQ7Ci0gIGVsc2UKLSAgICBoID0gR2V0U3Rk SGFuZGxlIChTVERfT1VUUFVUX0hBTkRMRSk7Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3Rv X3Bjb24gKGgpOworICBpZiAoIWlzSHlicmlkKQorICAgIHsKKyAgICAgIGlmIChzaS0+ZHdGbGFn cyAmIFNUQVJURl9VU0VTVERIQU5ETEVTKQorCWggPSBzaS0+aFN0ZElucHV0OworICAgICAgZWxz ZQorCWggPSBHZXRTdGRIYW5kbGUgKFNURF9JTlBVVF9IQU5ETEUpOworICAgICAgc2V0X3N3aXRj aF90b19wY29uIChoKTsKKyAgICB9CiAgIHJldHVybiBDcmVhdGVQcm9jZXNzV19PcmlnIChuLCBj LCBwYSwgdGEsIGluaCwgZiwgZSwgZCwgc2ksIHBpKTsKIH0KIApAQCAtNDY0LDEwICsxOTUsNiBA QCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpmbHVzaF90b19zbGF2ZSAoKQogewogICBpZiAoZ2V0X3Jl YWRhaGVhZF92YWxpZCAoKSAmJiAhKGdldF90dHlwICgpLT50aS5jX2xmbGFnICYgSUNBTk9OKSkK ICAgICBhY2NlcHRfaW5wdXQgKCk7Ci0gIFdhaXRGb3JTaW5nbGVPYmplY3QgKGlucHV0X211dGV4 LCBJTkZJTklURSk7Ci0gIGlmICghZ2V0X3R0eXAgKCktPnBjb25faW5fZW1wdHkgJiYgIShnZXRf dHR5cCAoKS0+dGkuY19sZmxhZyAmIElDQU5PTikpCi0gICAgU2V0RXZlbnQgKGlucHV0X2F2YWls YWJsZV9ldmVudCk7Ci0gIFJlbGVhc2VNdXRleCAoaW5wdXRfbXV0ZXgpOwogfQogCiBEV09SRApA QCAtNTMyLDE0ICsyNTksNiBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpkb2VjaG8gKGNvbnN0IHZv aWQgKnN0ciwgRFdPUkQgbGVuKQogICByZWxlYXNlX291dHB1dF9tdXRleCAoKTsKIH0KIAotaW50 Ci1maGFuZGxlcl9wdHlfbWFzdGVyOjpwdXRfcmVhZGFoZWFkIChjaGFyIHZhbHVlKQotewotICBp ZiAodG9fYmVfcmVhZF9mcm9tX3Bjb24gKCkpCi0gICAgcmV0dXJuIDE7Ci0gIHJldHVybiBmaGFu ZGxlcl9iYXNlOjpwdXRfcmVhZGFoZWFkICh2YWx1ZSk7Ci19Ci0KIGludAogZmhhbmRsZXJfcHR5 X21hc3Rlcjo6YWNjZXB0X2lucHV0ICgpCiB7CkBAIC01NTEsOSArMjcwLDExIEBAIGZoYW5kbGVy X3B0eV9tYXN0ZXI6OmFjY2VwdF9pbnB1dCAoKQogICBjaGFyICpwID0gcmFidWYgKCkgKyByYWl4 Z2V0ICgpOwogICBieXRlc19sZWZ0ID0gZWF0X3JlYWRhaGVhZCAoLTEpOwogCisgIEhBTkRMRSB3 cml0ZV90byA9IGdldF9vdXRwdXRfaGFuZGxlICgpOwogICBpZiAodG9fYmVfcmVhZF9mcm9tX3Bj b24gKCkpCi0gICAgOyAvKiBEbyBub3RoaW5nICovCi0gIGVsc2UgaWYgKCFieXRlc19sZWZ0KQor ICAgIHdyaXRlX3RvID0gdG9fc2xhdmU7CisKKyAgaWYgKCFieXRlc19sZWZ0KQogICAgIHsKICAg ICAgIHRlcm1pb3NfcHJpbnRmICgic2VuZGluZyBFT0YgdG8gc2xhdmUiKTsKICAgICAgIGdldF90 dHlwICgpLT5yZWFkX3JldHZhbCA9IDA7CkBAIC01NjQsMTAgKzI4NSwxMCBAQCBmaGFuZGxlcl9w dHlfbWFzdGVyOjphY2NlcHRfaW5wdXQgKCkKICAgICAgIERXT1JEIHdyaXR0ZW4gPSAwOwogCiAg ICAgICBwYXJhbm9pZF9wcmludGYgKCJhYm91dCB0byB3cml0ZSAldSBjaGFycyB0byBzbGF2ZSIs IGJ5dGVzX2xlZnQpOwotICAgICAgcmMgPSBXcml0ZUZpbGUgKGdldF9vdXRwdXRfaGFuZGxlICgp LCBwLCBieXRlc19sZWZ0LCAmd3JpdHRlbiwgTlVMTCk7CisgICAgICByYyA9IFdyaXRlRmlsZSAo d3JpdGVfdG8sIHAsIGJ5dGVzX2xlZnQsICZ3cml0dGVuLCBOVUxMKTsKICAgICAgIGlmICghcmMp CiAJewotCSAgZGVidWdfcHJpbnRmICgiZXJyb3Igd3JpdGluZyB0byBwaXBlICVwICVFIiwgZ2V0 X291dHB1dF9oYW5kbGUgKCkpOworCSAgZGVidWdfcHJpbnRmICgiZXJyb3Igd3JpdGluZyB0byBw aXBlICVwICVFIiwgd3JpdGVfdG8pOwogCSAgZ2V0X3R0eXAgKCktPnJlYWRfcmV0dmFsID0gLTE7 CiAJICByZXQgPSAtMTsKIAl9CkBAIC03MjUsNTIgKzQ0NiwxMiBAQCBvdXQ6CiAKIGZoYW5kbGVy X3B0eV9zbGF2ZTo6ZmhhbmRsZXJfcHR5X3NsYXZlIChpbnQgdW5pdCkKICAgOiBmaGFuZGxlcl9w dHlfY29tbW9uICgpLCBpbnVzZSAoTlVMTCksIG91dHB1dF9oYW5kbGVfY3lnIChOVUxMKSwKLSAg aW9faGFuZGxlX2N5ZyAoTlVMTCksIHBpZF9yZXN0b3JlICgwKSwgZmQgKC0xKQorICBpb19oYW5k bGVfY3lnIChOVUxMKQogewogICBpZiAodW5pdCA+PSAwKQogICAgIGRldiAoKS5wYXJzZSAoREVW X1BUWVNfTUFKT1IsIHVuaXQpOwogfQogCi1maGFuZGxlcl9wdHlfc2xhdmU6On5maGFuZGxlcl9w dHlfc2xhdmUgKCkKLXsKLSAgaWYgKCFnZXRfdHR5cCAoKSkKLSAgICB7Ci0gICAgICAvKiBXaHkg Y29tZXMgaGVyZT8gV2hvIGNsZWFycyBfdGM/ICovCi0gICAgICBmcmVlX2F0dGFjaGVkX2NvbnNv bGUgKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICBpZiAoZ2V0X3BzZXVkb19jb25zb2xlICgp KQotICAgIHsKLSAgICAgIGludCB1c2VkID0gMDsKLSAgICAgIGludCBhdHRhY2hlZCA9IDA7Ci0g ICAgICBjeWdoZWFwX2ZkZW51bSBjZmQgKGZhbHNlKTsKLSAgICAgIHdoaWxlIChjZmQubmV4dCAo KSA+PSAwKQotCXsKLQkgIGlmIChjZmQtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpPUiB8 fAotCSAgICAgIGNmZC0+Z2V0X21ham9yICgpID09IERFVl9DT05TX01BSk9SKQotCSAgICB1c2Vk ICsrOwotCSAgaWYgKGNmZC0+Z2V0X21ham9yICgpID09IERFVl9QVFlTX01BSk9SICYmCi0JICAg ICAgY2ZkLT5nZXRfbWlub3IgKCkgPT0gcGNvbl9hdHRhY2hlZF90bykKLQkgICAgYXR0YWNoZWQg Kys7Ci0JfQotCi0gICAgICAvKiBDYWxsIEZyZWVDb25zb2xlKCkgaWYgbm8gdHR5IGlzIG9wZW5l ZCBhbmQgdGhlIHByb2Nlc3MKLQkgaXMgYXR0YWNoZWQgdG8gY29uc29sZSBjb3JyZXNwb25kaW5n IHRvIHR0eS4gVGhpcyBpcwotCSBuZWVkZWQgdG8gbWFrZSBHTlUgc2NyZWVuIGFuZCB0bXV4IHdv cmsgaW4gV2luZG93cyAxMAotCSAxOTAzLiAqLwotICAgICAgaWYgKGF0dGFjaGVkID09IDApCi0J ewotCSAgcGNvbl9hdHRhY2hlZF90byA9IC0xOwotCSAgbGFzdF90dHlwID0gZ2V0X3R0eXAgKCk7 Ci0JfQotICAgICAgaWYgKHVzZWQgPT0gMCkKLQl7Ci0JICBpbml0X2NvbnNvbGVfaGFuZGxlciAo ZmFsc2UpOwotCSAgZnJlZV9hdHRhY2hlZF9jb25zb2xlICgpOwotCX0KLSAgICB9Ci19Ci0KIGlu dAogZmhhbmRsZXJfcHR5X3NsYXZlOjpvcGVuIChpbnQgZmxhZ3MsIG1vZGVfdCkKIHsKQEAgLTgz Myw4ICs1MTQsOCBAQCBmaGFuZGxlcl9wdHlfc2xhdmU6Om9wZW4gKGludCBmbGFncywgbW9kZV90 KQogICAgIHJlbGVhc2Vfb3V0cHV0X211dGV4ICgpOwogICB9CiAKLSAgaWYgKCFnZXRfdHR5cCAo KS0+ZnJvbV9tYXN0ZXIgKCkgfHwgIWdldF90dHlwICgpLT5mcm9tX21hc3Rlcl9jeWcgKCkgfHwK LSAgICAgICFnZXRfdHR5cCAoKS0+dG9fbWFzdGVyICgpIHx8ICFnZXRfdHR5cCAoKS0+dG9fbWFz dGVyX2N5ZyAoKSkKKyAgaWYgKCFnZXRfdHR5cCAoKS0+ZnJvbV9tYXN0ZXIgKCkgfHwgIWdldF90 dHlwICgpLT5mcm9tX21hc3Rlcl9jeWcgKCkKKyAgICAgIHx8ICFnZXRfdHR5cCAoKS0+dG9fbWFz dGVyICgpIHx8ICFnZXRfdHR5cCAoKS0+dG9fbWFzdGVyX2N5ZyAoKSkKICAgICB7CiAgICAgICBl cnJtc2cgPSAicHR5IGhhbmRsZXMgaGF2ZSBiZWVuIGNsb3NlZCI7CiAgICAgICBzZXRfZXJybm8g KEVBQ0NFUyk7CkBAIC05MjMsOCArNjA0LDggQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpvcGVuIChp bnQgZmxhZ3MsIG1vZGVfdCkKICAgICAgIGZyb21fbWFzdGVyX2N5Z19sb2NhbCA9IHJlcGwuZnJv bV9tYXN0ZXJfY3lnOwogICAgICAgdG9fbWFzdGVyX2xvY2FsID0gcmVwbC50b19tYXN0ZXI7CiAg ICAgICB0b19tYXN0ZXJfY3lnX2xvY2FsID0gcmVwbC50b19tYXN0ZXJfY3lnOwotICAgICAgaWYg KCFmcm9tX21hc3Rlcl9sb2NhbCB8fCAhZnJvbV9tYXN0ZXJfY3lnX2xvY2FsIHx8Ci0JICAhdG9f bWFzdGVyX2xvY2FsIHx8ICF0b19tYXN0ZXJfY3lnX2xvY2FsKQorICAgICAgaWYgKCFmcm9tX21h c3Rlcl9sb2NhbCB8fCAhZnJvbV9tYXN0ZXJfY3lnX2xvY2FsCisJICB8fCAhdG9fbWFzdGVyX2xv Y2FsIHx8ICF0b19tYXN0ZXJfY3lnX2xvY2FsKQogCXsKIAkgIFNldExhc3RFcnJvciAocmVwbC5l cnJvcik7CiAJICBlcnJtc2cgPSAiZXJyb3IgZHVwbGljYXRpbmcgcGlwZXMsICVFIjsKQEAgLTk1 MCwyNCArNjMxLDcgQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpvcGVuIChpbnQgZmxhZ3MsIG1vZGVf dCkKICAgc2V0X291dHB1dF9oYW5kbGUgKHRvX21hc3Rlcl9sb2NhbCk7CiAgIHNldF9vdXRwdXRf aGFuZGxlX2N5ZyAodG9fbWFzdGVyX2N5Z19sb2NhbCk7CiAKLSAgaWYgKCFnZXRfcHNldWRvX2Nv bnNvbGUgKCkpCi0gICAgewotICAgICAgZmhhbmRsZXJfY29uc29sZTo6bmVlZF9pbnZpc2libGUg KCk7Ci0gICAgICBwY29uX2F0dGFjaGVkX3RvID0gLTE7Ci0gICAgfQotICBlbHNlIGlmICghZmhh bmRsZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZAotCQkJICAgICAgIChHZXRDdXJy ZW50UHJvY2Vzc0lkICgpLCB0cnVlKSkKLSAgICB7Ci0gICAgICBmaGFuZGxlcl9jb25zb2xlOjpu ZWVkX2ludmlzaWJsZSAoKTsKLSAgICAgIHBjb25fYXR0YWNoZWRfdG8gPSAtMTsKLSAgICB9Ci0g IGVsc2UgaWYgKGZoYW5kbGVyX2NvbnNvbGU6OmdldF9jb25zb2xlX3Byb2Nlc3NfaWQKLQkJCSAg ICAgICAoZ2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpLCB0cnVlKSkKLSAgICAvKiBBdHRhY2hlZCB0 byBwY29uIG9mIHRoaXMgcHR5ICovCi0gICAgewotICAgICAgcGNvbl9hdHRhY2hlZF90byA9IGdl dF9taW5vciAoKTsKLSAgICAgIGluaXRfY29uc29sZV9oYW5kbGVyICh0cnVlKTsKLSAgICB9Cisg IGZoYW5kbGVyX2NvbnNvbGU6Om5lZWRfaW52aXNpYmxlICgpOwogCiAgIHNldF9vcGVuX3N0YXR1 cyAoKTsKICAgcmV0dXJuIDE7CkBAIC0xMDIxLDggKzY4NSw3IEBAIGZoYW5kbGVyX3B0eV9zbGF2 ZTo6Y2xvc2UgKCkKICAgaWYgKCFGb3JjZUNsb3NlSGFuZGxlIChnZXRfaGFuZGxlX2N5ZyAoKSkp CiAgICAgdGVybWlvc19wcmludGYgKCJDbG9zZUhhbmRsZSAoZ2V0X2hhbmRsZV9jeWcgKCk8JXA+ KSwgJUUiLAogCWdldF9oYW5kbGVfY3lnICgpKTsKLSAgaWYgKCFnZXRfcHNldWRvX2NvbnNvbGUg KCkgJiYKLSAgICAgICh1bnNpZ25lZCkgbXlzZWxmLT5jdHR5ID09IEZIREVWIChERVZfUFRZU19N QUpPUiwgZ2V0X21pbm9yICgpKSkKKyAgaWYgKCh1bnNpZ25lZCkgbXlzZWxmLT5jdHR5ID09IEZI REVWIChERVZfUFRZU19NQUpPUiwgZ2V0X21pbm9yICgpKSkKICAgICBmaGFuZGxlcl9jb25zb2xl OjpmcmVlX2NvbnNvbGUgKCk7CS8qIGFzc3VtZXMgdGhhdCB3ZSBhcmUgdGhlIGxhc3QgcHR5IGNs b3NlciAqLwogICBmaGFuZGxlcl9wdHlfY29tbW9uOjpjbG9zZSAoKTsKICAgaWYgKCFGb3JjZUNs b3NlSGFuZGxlIChvdXRwdXRfbXV0ZXgpKQpAQCAtMTA3MCw0MjMgKzczMywzMSBAQCBmaGFuZGxl cl9wdHlfc2xhdmU6OmluaXQgKEhBTkRMRSBoLCBEV09SRCBhLCBtb2RlX3QpCiAgIHJldHVybiBy ZXQ7CiB9CiAKLWJvb2wKLWZoYW5kbGVyX3B0eV9zbGF2ZTo6dHJ5X3JlYXR0YWNoX3Bjb24gKHZv aWQpCi17Ci0gIHBpZF9yZXN0b3JlID0gMDsKLQotICAvKiBEbyBub3QgZGV0YWNoIGZyb20gdGhl IGNvbnNvbGUgYmVjYXVzZSByZS1hdHRhY2hpbmcgd2lsbAotICAgICBmYWlsIGlmIGhlbHBlciBw cm9jZXNzIGlzIHJ1bm5pbmcgYXMgc2VydmljZSBhY2NvdW50LiAqLwotICBpZiAoZ2V0X3R0eXAo KS0+YXR0YWNoX3Bjb25faW5fZm9yaykKLSAgICByZXR1cm4gZmFsc2U7Ci0gIGlmIChwY29uX2F0 dGFjaGVkX3RvID49IDAgJiYKLSAgICAgIGN5Z3dpbl9zaGFyZWQtPnR0eVtwY29uX2F0dGFjaGVk X3RvXS0+YXR0YWNoX3Bjb25faW5fZm9yaykKLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgcGlkX3Jl c3RvcmUgPQotICAgIGZoYW5kbGVyX2NvbnNvbGU6OmdldF9jb25zb2xlX3Byb2Nlc3NfaWQgKEdl dEN1cnJlbnRQcm9jZXNzSWQgKCksCi0JCQkJCSAgICAgIGZhbHNlKTsKLSAgLyogSWYgcGlkX3Jl c3RvcmUgaXMgbm90IHNldCwgZ2l2ZSB1cC4gKi8KLSAgaWYgKCFwaWRfcmVzdG9yZSkKLSAgICBy ZXR1cm4gZmFsc2U7Ci0KLSAgRnJlZUNvbnNvbGUgKCk7Ci0gIGlmICghQXR0YWNoQ29uc29sZSAo Z2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpKSkKLSAgICB7Ci0gICAgICBzeXN0ZW1fcHJpbnRmICgi cHR5JWQ6IEF0dGFjaENvbnNvbGUoaGVscGVyPSVkKSBmYWlsZWQuIDB4JTA4bHgiLAotCQkgICAg IGdldF9taW5vciAoKSwgZ2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpLCBHZXRMYXN0RXJyb3IgKCkp OwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQK LWZoYW5kbGVyX3B0eV9zbGF2ZTo6cmVzdG9yZV9yZWF0dGFjaF9wY29uICh2b2lkKQorZmhhbmRs ZXJfcHR5X3NsYXZlOjpzZXRfc3dpdGNoX3RvX3Bjb24gKHZvaWQpCiB7Ci0gIGlmIChwaWRfcmVz dG9yZSkKKyAgaWYgKCFnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4pCiAgICAgewotICAg ICAgRnJlZUNvbnNvbGUgKCk7Ci0gICAgICBpZiAoIUF0dGFjaENvbnNvbGUgKHBpZF9yZXN0b3Jl KSkKLQl7Ci0JICBzeXN0ZW1fcHJpbnRmICgicHR5JWQ6IEF0dGFjaENvbnNvbGUocmVzdG9yZT0l ZCkgZmFpbGVkLiAweCUwOGx4IiwKLQkJCSBnZXRfbWlub3IgKCksIHBpZF9yZXN0b3JlLCBHZXRM YXN0RXJyb3IgKCkpOwotCSAgcGNvbl9hdHRhY2hlZF90byA9IC0xOwotCX0KLSAgICB9Ci0gIHBp ZF9yZXN0b3JlID0gMDsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiByZXF1ZXN0cyB0cmFuc2Zlcmlu ZyB0aGUgaW5wdXQgZGF0YSBmcm9tIHRoZSBpbnB1dAotICAgcGlwZSBmb3IgY3lnd2luIGFwcHMg dG8gdGhlIG90aGVyIGlucHV0IHBpcGUgZm9yIG5hdGl2ZSBhcHBzLiAqLwotdm9pZAotZmhhbmRs ZXJfcHR5X3NsYXZlOjpwdWxsX3Bjb25faW5wdXQgKHZvaWQpCi17Ci0gIGdldF90dHlwICgpLT5y ZXFfdHJhbnNmZXJfaW5wdXRfdG9fcGNvbiA9IHRydWU7Ci0gIHdoaWxlIChnZXRfdHR5cCAoKS0+ cmVxX3RyYW5zZmVyX2lucHV0X3RvX3Bjb24pCi0gICAgU2xlZXAgKDEpOwotfQotCi12b2lkCi1m aGFuZGxlcl9wdHlfc2xhdmU6OnVwZGF0ZV9wY29uX2lucHV0X3N0YXRlIChib29sIG5lZWRfbG9j aykKLXsKLSAgaWYgKG5lZWRfbG9jaykKLSAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0IChpbnB1dF9t dXRleCwgSU5GSU5JVEUpOwotICAvKiBGbHVzaCBpbnB1dCBidWZmZXIgaWYgaXQgaXMgcmVxdWVz dGVkIGJ5IG1hc3Rlci4KLSAgICAgVGhpcyBoYXBwZW5zIGlmIF5DIGlzIHByZXNzZWQgaW4gcHNl dWRvIGNvbnNvbGUgc2lkZS4gKi8KLSAgaWYgKGdldF90dHlwICgpLT5yZXFfZmx1c2hfcGNvbl9p bnB1dCkKLSAgICB7Ci0gICAgICBGbHVzaENvbnNvbGVJbnB1dEJ1ZmZlciAoZ2V0X2hhbmRsZSAo KSk7Ci0gICAgICBnZXRfdHR5cCAoKS0+cmVxX2ZsdXNoX3Bjb25faW5wdXQgPSBmYWxzZTsKLSAg ICB9Ci0gIC8qIFBlZWsgY29uc29sZSBpbnB1dCBidWZmZXIgYW5kIHVwZGF0ZSBzdGF0ZS4gKi8K LSAgSU5QVVRfUkVDT1JEIGlucFtJTlJFQ19TSVpFXTsKLSAgRFdPUkQgbjsKLSAgQk9PTCAoV0lO QVBJICpQZWVrRnVuYykKLSAgICAoSEFORExFLCBQSU5QVVRfUkVDT1JELCBEV09SRCwgTFBEV09S RCk7Ci0gIFBlZWtGdW5jID0KLSAgICBQZWVrQ29uc29sZUlucHV0QV9PcmlnID8gOiBQZWVrQ29u c29sZUlucHV0OwotICBQZWVrRnVuYyAoZ2V0X2hhbmRsZSAoKSwgaW5wLCBJTlJFQ19TSVpFLCAm bik7Ci0gIGJvb2wgc2F3X2FjY2VwdCA9IGZhbHNlOwotICBib29sIHBpcGVfZW1wdHkgPSB0cnVl OwotICB3aGlsZSAobi0tID4gMCkKLSAgICBpZiAoaW5wW25dLkV2ZW50VHlwZSA9PSBLRVlfRVZF TlQgJiYgaW5wW25dLkV2ZW50LktleUV2ZW50LmJLZXlEb3duICYmCi0JaW5wW25dLkV2ZW50Lktl eUV2ZW50LnVDaGFyLkFzY2lpQ2hhcikKLSAgICAgIHsKLQlwaXBlX2VtcHR5ID0gZmFsc2U7Ci0J Y2hhciBjID0gaW5wW25dLkV2ZW50LktleUV2ZW50LnVDaGFyLkFzY2lpQ2hhcjsKLQljb25zdCBj aGFyIHNpZ3NbXSA9IHsKLQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWSU5UUl0sCi0J ICAoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVlFVSVRdLAotCSAgKGNoYXIpIGdldF90dHlw ICgpLT50aS5jX2NjW1ZTVVNQXSwKLQl9OwotCWNvbnN0IGNoYXIgZW9sc1tdID0gewotCSAgKGNo YXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZFT0ZdLAotCSAgKGNoYXIpIGdldF90dHlwICgpLT50 aS5jX2NjW1ZFT0xdLAotCSAgKGNoYXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZFT0wyXSwKLQkg ICdcbicsCi0JICAnXHInCi0JfTsKLQlpZiAoaXNfbGluZV9pbnB1dCAoKSAmJiBjICYmIG1lbWNo ciAoZW9scywgYywgc2l6ZW9mIChlb2xzKSkpCi0JICBzYXdfYWNjZXB0ID0gdHJ1ZTsKLQlpZiAo KGdldF90dHlwICgpLT50aS5jX2xmbGFnICYgSVNJRykKLQkgICAgJiYgYyAmJiBtZW1jaHIgKHNp Z3MsIGMsIHNpemVvZiAoc2lncykpKQotCSAgc2F3X2FjY2VwdCA9IHRydWU7Ci0gICAgICB9Ci0g IGdldF90dHlwICgpLT5wY29uX2luX2VtcHR5ID0gcGlwZV9lbXB0eSAmJiAhKHJhbGVuICgpID4g cmFpeGdldCAoKSk7Ci0gIGlmICghZ2V0X3JlYWRhaGVhZF92YWxpZCAoKSAmJgotICAgICAgKHBp cGVfZW1wdHkgfHwgKGlzX2xpbmVfaW5wdXQgKCkgJiYgIXNhd19hY2NlcHQpKSAmJgotICAgICAg Z2V0X3R0eXAgKCktPnJlYWRfcmV0dmFsID09IDEgJiYgYnl0ZXNfYXZhaWxhYmxlIChuKSAmJiBu ID09IDApCi0gICAgUmVzZXRFdmVudCAoaW5wdXRfYXZhaWxhYmxlX2V2ZW50KTsKLSAgaWYgKG5l ZWRfbG9jaykKLSAgICBSZWxlYXNlTXV0ZXggKGlucHV0X211dGV4KTsKLX0KLQotaW50Ci1maGFu ZGxlcl9wdHlfc2xhdmU6OmVhdF9yZWFkYWhlYWQgKGludCBuKQotewotICBpbnQgb3JhbGVuID0g cmFsZW4gKCk7Ci0gIGlmIChuIDwgMCkKLSAgICBuID0gcmFsZW4gKCkgLSByYWl4Z2V0ICgpOwot ICBpZiAobiA+IDAgJiYgcmFsZW4gKCkgPiByYWl4Z2V0ICgpKQotICAgIHsKLSAgICAgIGNvbnN0 IGNoYXIgZW9sc1tdID0gewotCShjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9GXSwKLQko Y2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVkVPTF0sCi0JKGNoYXIpIGdldF90dHlwICgpLT50 aS5jX2NjW1ZFT0wyXSwKLQknXG4nCi0gICAgICB9OwotICAgICAgd2hpbGUgKG4gPiAwICYmIHJh bGVuICgpID4gcmFpeGdldCAoKSkKLQl7Ci0JICBpZiAoaXNfbGluZV9pbnB1dCAoKSAmJiByYWJ1 ZiAoKVtyYWxlbiAoKS0xXQotCSAgICAgICYmIG1lbWNociAoZW9scywgcmFidWYgKClbcmFsZW4g KCktMV0sIHNpemVvZiAoZW9scykpKQotCSAgICBicmVhazsKLQkgIC0tIG47Ci0JICAtLSByYWxl biAoKTsKLQl9Ci0KLSAgICAgIC8qIElmIElVVEY4IGlzIHNldCwgdGhlIHRlcm1pbmFsIGlzIGlu IFVURi04IG1vZGUuICBJZiBzbywgd2UgZXJhc2UKLQkgYSBjb21wbGV0ZSBVVEYtOCBtdWx0aWJ5 dGUgc2VxdWVuY2Ugb24gVkVSQVNFL1ZXRVJBU0UuICBPdGhlcndpc2UsCi0JIGlmIHdlIG9ubHkg ZXJhc2UgYSBzaW5nbGUgYnl0ZSwgaW52YWxpZCB1bmljb2RlIGNoYXJzIGFyZSBsZWZ0IGluCi0J IHRoZSBpbnB1dC4gKi8KLSAgICAgIGlmIChnZXRfdHR5cCAoKS0+dGkuY19pZmxhZyAmIElVVEY4 KQotCXdoaWxlIChyYWxlbiAoKSA+IHJhaXhnZXQgKCkgJiYKLQkgICAgICAgKCh1bnNpZ25lZCBj aGFyKSByYWJ1ZiAoKVtyYWxlbiAoKV0gJiAweGMwKSA9PSAweDgwKQotCSAgLS1yYWxlbiAoKTsK LSAgICB9Ci0gIG9yYWxlbiA9IG9yYWxlbiAtIHJhbGVuICgpOwotICBpZiAocmFpeGdldCAoKSA+ PSByYWxlbiAoKSkKLSAgICByYWl4Z2V0ICgpID0gcmFpeHB1dCAoKSA9IHJhbGVuICgpID0gMDsK LSAgZWxzZSBpZiAocmFpeHB1dCAoKSA+IHJhbGVuICgpKQotICAgIHJhaXhwdXQgKCkgPSByYWxl biAoKTsKLQotICByZXR1cm4gb3JhbGVuOwotfQotCi1pbnQKLWZoYW5kbGVyX3B0eV9zbGF2ZTo6 Z2V0X3JlYWRhaGVhZF9pbnRvX2J1ZmZlciAoY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQotewot ICBpbnQgY2g7Ci0gIGludCBjb3BpZWRfY2hhcnMgPSAwOwotCi0gIHdoaWxlIChidWZsZW4pCi0g ICAgaWYgKChjaCA9IGdldF9yZWFkYWhlYWQgKCkpIDwgMCkKLSAgICAgIGJyZWFrOwotICAgIGVs c2UKLSAgICAgIHsKLQljb25zdCBjaGFyIGVvbHNbXSA9IHsKLQkgIChjaGFyKSBnZXRfdHR5cCAo KS0+dGkuY19jY1tWRU9GXSwKLQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9MXSwK LQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9MMl0sCi0JICAnXG4nCi0JfTsKLQli dWZbY29waWVkX2NoYXJzKytdID0gKHVuc2lnbmVkIGNoYXIpKGNoICYgMHhmZik7Ci0JYnVmbGVu LS07Ci0JaWYgKGlzX2xpbmVfaW5wdXQgKCkgJiYgY2ggJiYgbWVtY2hyIChlb2xzLCBjaCAmIDB4 ZmYsIHNpemVvZiAoZW9scykpKQotCSAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgcmV0dXJuIGNvcGll ZF9jaGFyczsKLX0KLQotYm9vbAotZmhhbmRsZXJfcHR5X3NsYXZlOjpnZXRfcmVhZGFoZWFkX3Zh bGlkICh2b2lkKQotewotICBpZiAoaXNfbGluZV9pbnB1dCAoKSkKLSAgICB7Ci0gICAgICBjb25z dCBjaGFyIGVvbHNbXSA9IHsKLQkoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVkVPRl0sCi0J KGNoYXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZFT0xdLAotCShjaGFyKSBnZXRfdHR5cCAoKS0+ dGkuY19jY1tWRU9MMl0sCi0JJ1xuJwotICAgICAgfTsKLSAgICAgIGZvciAoc2l6ZV90IGk9cmFp eGdldCAoKTsgaTxyYWxlbiAoKTsgaSsrKQotCWlmIChyYWJ1ZiAoKVtpXSAmJiBtZW1jaHIgKGVv bHMsIHJhYnVmICgpW2ldLCBzaXplb2YgKGVvbHMpKSkKLQkgIHJldHVybiB0cnVlOwotICAgICAg cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgZWxzZQotICAgIHJldHVybiByYWxlbiAoKSA+IHJhaXhn ZXQgKCk7Ci19Ci0KLXZvaWQKLWZoYW5kbGVyX3B0eV9zbGF2ZTo6c2V0X3N3aXRjaF90b19wY29u IChpbnQgZmRfc2V0KQotewotICBpZiAoZmQgPCAwKQotICAgIGZkID0gZmRfc2V0OwotICBhY3F1 aXJlX291dHB1dF9tdXRleCAoSU5GSU5JVEUpOwotICBpZiAoZmQgPT0gMCAmJiAhZ2V0X3R0eXAg KCktPnN3aXRjaF90b19wY29uX2luKQotICAgIHsKLSAgICAgIHB1bGxfcGNvbl9pbnB1dCAoKTsK LSAgICAgIGlmIChnZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMCB8fAotCSAgIXBpbmZvIChnZXRf dHR5cCAoKS0+cGNvbl9waWQpKQorICAgICAgaXNIeWJyaWQgPSB0cnVlOworICAgICAgaWYgKGdl dF90dHlwICgpLT5wY29uX3BpZCA9PSAwIHx8ICFwaW5mbyAoZ2V0X3R0eXAgKCktPnBjb25fcGlk KSkKIAlnZXRfdHR5cCAoKS0+cGNvbl9waWQgPSBteXNlbGYtPnBpZDsKICAgICAgIGdldF90dHlw ICgpLT5zd2l0Y2hfdG9fcGNvbl9pbiA9IHRydWU7Ci0gICAgICBpZiAoaXNIeWJyaWQgJiYgIWdl dF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQpCi0JewotCSAgZ2V0X3R0eXAgKCktPndhaXRf cGNvbl9md2QgKCk7Ci0JICBnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25fb3V0ID0gdHJ1ZTsK LQl9CiAgICAgfQotICBlbHNlIGlmICgoZmQgPT0gMSB8fCBmZCA9PSAyKSAmJiAhZ2V0X3R0eXAg KCktPnN3aXRjaF90b19wY29uX291dCkKLSAgICB7Ci0gICAgICBnZXRfdHR5cCAoKS0+d2FpdF9w Y29uX2Z3ZCAoKTsKLSAgICAgIGlmIChnZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMCB8fAotCSAg IXBpbmZvIChnZXRfdHR5cCAoKS0+cGNvbl9waWQpKQotCWdldF90dHlwICgpLT5wY29uX3BpZCA9 IG15c2VsZi0+cGlkOwotICAgICAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCA9IHRy dWU7Ci0gICAgICBpZiAoaXNIeWJyaWQpCi0JZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX2lu ID0gdHJ1ZTsKLSAgICB9Ci0gIHJlbGVhc2Vfb3V0cHV0X211dGV4ICgpOwogfQogCiB2b2lkCiBm aGFuZGxlcl9wdHlfc2xhdmU6OnJlc2V0X3N3aXRjaF90b19wY29uICh2b2lkKQogewotICBpZiAo Z2V0X3R0eXAgKCktPnBjb25fcGlkICYmCi0gICAgICBnZXRfdHR5cCAoKS0+cGNvbl9waWQgIT0g bXlzZWxmLT5waWQgJiYKLSAgICAgICEhcGluZm8gKGdldF90dHlwICgpLT5wY29uX3BpZCkpCisg IGlmIChnZXRfdHR5cCAoKS0+cGNvbl9waWQgJiYgZ2V0X3R0eXAgKCktPnBjb25fcGlkICE9IG15 c2VsZi0+cGlkCisgICAgICAmJiAhIXBpbmZvIChnZXRfdHR5cCAoKS0+cGNvbl9waWQpKQogICAg IC8qIFRoZXJlIGlzIGEgcHJvY2VzcyB3aGljaCBpcyBncmFiYmluZyBwc2V1ZG8gY29uc29sZS4g Ki8KICAgICByZXR1cm47CiAgIGlmIChpc0h5YnJpZCkKICAgICByZXR1cm47Ci0gIGlmIChkb19u b3RfcmVzZXRfc3dpdGNoX3RvX3Bjb24pCi0gICAgcmV0dXJuOwotICBhY3F1aXJlX291dHB1dF9t dXRleCAoSU5GSU5JVEUpOwotICBpZiAoZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCkK LSAgICAvKiBXYWl0IGZvciBwdHlfbWFzdGVyX2Z3ZF90aHJlYWQoKSAqLwotICAgIGdldF90dHlw ICgpLT53YWl0X3Bjb25fZndkICgpOwogICBnZXRfdHR5cCAoKS0+cGNvbl9waWQgPSAwOwogICBn ZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gPSBmYWxzZTsKLSAgZ2V0X3R0eXAgKCktPnN3 aXRjaF90b19wY29uX291dCA9IGZhbHNlOwotICByZWxlYXNlX291dHB1dF9tdXRleCAoKTsKLSAg aW5pdF9jb25zb2xlX2hhbmRsZXIgKHRydWUpOwotfQotCi12b2lkCi1maGFuZGxlcl9wdHlfc2xh dmU6OnB1c2hfdG9fcGNvbl9zY3JlZW5idWZmZXIgKGNvbnN0IGNoYXIgKnB0ciwgc2l6ZV90IGxl biwKLQkJCQkJICAgICAgIGJvb2wgaXNfZWNobykKLXsKLSAgYm9vbCBhdHRhY2hlZCA9Ci0gICAg ISFmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkIChnZXRfaGVscGVyX3By b2Nlc3NfaWQgKCksIHRydWUpOwotICBpZiAoIWF0dGFjaGVkICYmIHBjb25fYXR0YWNoZWRfdG8g PT0gZ2V0X21pbm9yICgpKQotICAgIHsKLSAgICAgIGZvciAoRFdPUkQgdDAgPSBHZXRUaWNrQ291 bnQgKCk7IEdldFRpY2tDb3VudCAoKSAtIHQwIDwgMTAwOyApCi0JewotCSAgU2xlZXAgKDEpOwot CSAgYXR0YWNoZWQgPSBmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkCi0J CQkJICAgICAgKGdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSwgdHJ1ZSk7Ci0JICBpZiAoYXR0YWNo ZWQpCi0JICAgIGJyZWFrOwotCX0KLSAgICAgIGlmICghYXR0YWNoZWQpCi0JewotCSAgc3lzdGVt X3ByaW50ZiAoInB0eSVkOiBwY29uX2F0dGFjaF90byBtaXNtYXRjaD8/Pz8/PyIsIGdldF9taW5v ciAoKSk7Ci0JICByZXR1cm47Ci0JfQotICAgIH0KLQotICAvKiBJZiBub3QgYXR0YWNoZWQgdG8g dGhpcyBwc2V1ZG8gY29uc29sZSwgdHJ5IHRvIGF0dGFjaCB0ZW1wb3JhcmlseS4gKi8KLSAgcGlk X3Jlc3RvcmUgPSAwOwotICBpZiAocGNvbl9hdHRhY2hlZF90byAhPSBnZXRfbWlub3IgKCkpCi0g ICAgaWYgKCF0cnlfcmVhdHRhY2hfcGNvbiAoKSkKLSAgICAgIGdvdG8gZGV0YWNoOwotCi0gIGNo YXIgKmJ1ZjsKLSAgc2l6ZV90IG5sZW47Ci0gIERXT1JEIG9yaWdDUDsKLSAgb3JpZ0NQID0gR2V0 Q29uc29sZU91dHB1dENQICgpOwotICBTZXRDb25zb2xlT3V0cHV0Q1AgKGdldF90dHlwICgpLT50 ZXJtX2NvZGVfcGFnZSk7Ci0gIC8qIEp1c3QgY29weSAqLwotICBidWYgPSAoY2hhciAqKSBIZWFw QWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBsZW4pOwotICBtZW1jcHkgKGJ1ZiwgKGNoYXIg KilwdHIsIGxlbik7Ci0gIG5sZW4gPSBsZW47Ci0gIGNoYXIgKnAwLCAqcDE7Ci0gIHAwID0gcDEg PSBidWY7Ci0gIC8qIFJlbW92ZSBhbHRlcm5hdGUgc2NyZWVuIGJ1ZmZlciBkcmF3aW5nICovCi0g IHdoaWxlIChwMCAmJiBwMSkKLSAgICB7Ci0gICAgICBpZiAoIWdldF90dHlwICgpLT5zY3JlZW5f YWx0ZXJuYXRlZCkKLQl7Ci0JICAvKiBDaGVjayBzd2l0Y2hpbmcgdG8gYWx0ZXJuYXRlIHNjcmVl biBidWZmZXIgKi8KLQkgIHAwID0gKGNoYXIgKikgbWVtbWVtIChwMSwgbmxlbiAtIChwMS1idWYp LCAiXDAzM1s/MTA0OWgiLCA4KTsKLQkgIGlmIChwMCkKLQkgICAgewotCSAgICAgIC8vcDAgKz0g ODsKLQkgICAgICBnZXRfdHR5cCAoKS0+c2NyZWVuX2FsdGVybmF0ZWQgPSB0cnVlOwotCSAgICAg IGlmIChnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25fb3V0KQotCQlkb19ub3RfcmVzZXRfc3dp dGNoX3RvX3Bjb24gPSB0cnVlOwotCSAgICB9Ci0JfQotICAgICAgaWYgKGdldF90dHlwICgpLT5z Y3JlZW5fYWx0ZXJuYXRlZCkKLQl7Ci0JICAvKiBDaGVjayBzd2l0Y2hpbmcgdG8gbWFpbiBzY3Jl ZW4gYnVmZmVyICovCi0JICBwMSA9IChjaGFyICopIG1lbW1lbSAocDAsIG5sZW4gLSAocDAtYnVm KSwgIlwwMzNbPzEwNDlsIiwgOCk7Ci0JICBpZiAocDEpCi0JICAgIHsKLQkgICAgICBwMSArPSA4 OwotCSAgICAgIGdldF90dHlwICgpLT5zY3JlZW5fYWx0ZXJuYXRlZCA9IGZhbHNlOwotCSAgICAg IGRvX25vdF9yZXNldF9zd2l0Y2hfdG9fcGNvbiA9IGZhbHNlOwotCSAgICAgIG1lbW1vdmUgKHAw LCBwMSwgYnVmK25sZW4gLSBwMSk7Ci0JICAgICAgbmxlbiAtPSBwMSAtIHAwOwotCSAgICB9Ci0J ICBlbHNlCi0JICAgIG5sZW4gPSBwMCAtIGJ1ZjsKLQl9Ci0gICAgfQotICBpZiAoIW5sZW4pIC8q IE5vdGhpbmcgdG8gYmUgc3luY2hyb25pemVkICovCi0gICAgZ290byBjbGVhbnVwOwotICBpZiAo Z2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCAmJiAhaXNfZWNobykKLSAgICBnb3RvIGNs ZWFudXA7Ci0gIC8qIFJlbW92ZSBFU0Mgc2VxdWVuY2Ugd2hpY2ggcmV0dXJucyByZXN1bHRzIHRv IGNvbnNvbGUKLSAgICAgaW5wdXQgYnVmZmVyLiBXaXRob3V0IHRoaXMsIGN1cnNvciBwb3NpdGlv biByZXBvcnQKLSAgICAgaXMgcHV0IGludG8gdGhlIGlucHV0IGJ1ZmZlciBhcyBhIGdhcmJhZ2Uu ICovCi0gIC8qIFJlbW92ZSBFU0Mgc2VxdWVuY2UgdG8gcmVwb3J0IGN1cnNvciBwb3NpdGlvbi4g Ki8KLSAgd2hpbGUgKChwMCA9IChjaGFyICopIG1lbW1lbSAoYnVmLCBubGVuLCAiXDAzM1s2biIs IDQpKSkKLSAgICB7Ci0gICAgICBtZW1tb3ZlIChwMCwgcDArNCwgbmxlbiAtIChwMCs0IC0gYnVm KSk7Ci0gICAgICBubGVuIC09IDQ7Ci0gICAgfQotICAvKiBSZW1vdmUgRVNDIHNlcXVlbmNlIHRv IHJlcG9ydCB0ZXJtaW5hbCBpZGVudGl0eS4gKi8KLSAgd2hpbGUgKChwMCA9IChjaGFyICopIG1l bW1lbSAoYnVmLCBubGVuLCAiXDAzM1swYyIsIDQpKSkKLSAgICB7Ci0gICAgICBtZW1tb3ZlIChw MCwgcDArNCwgbmxlbiAtIChwMCs0IC0gYnVmKSk7Ci0gICAgICBubGVuIC09IDQ7Ci0gICAgfQot Ci0gIC8qIElmIHRoZSBFU0Mgc2VxdWVuY2UgRVNDWz8zaCBvciBFU0NbPzNsIHdoaWNoIGNsZWFy cyBjb25zb2xlIHNjcmVlbgotICAgICBidWZmZXIgaXMgcHVzaGVkLCBzZXQgbmVlZF9yZWRyYXdf c2NyZWVuIHRvIHRyaWdnZXIgcmVkcmF3IHNjcmVlbi4gKi8KLSAgcDAgPSBidWY7Ci0gIHdoaWxl ICgocDAgPSAoY2hhciAqKSBtZW1tZW0gKHAwLCBubGVuIC0gKHAwIC0gYnVmKSwgIlwwMzNbPyIs IDMpKSkKLSAgICB7Ci0gICAgICBwMCArPSAzOwotICAgICAgYm9vbCBleGlzdF9hcmdfMyA9IGZh bHNlOwotICAgICAgd2hpbGUgKHAwIDwgYnVmICsgbmxlbiAmJiAoaXNkaWdpdCAoKnAwKSB8fCAq cDAgPT0gJzsnKSkKLQl7Ci0JICBpbnQgYXJnID0gMDsKLQkgIHdoaWxlIChwMCA8IGJ1ZiArIG5s ZW4gJiYgaXNkaWdpdCAoKnAwKSkKLQkgICAgYXJnID0gYXJnICogMTAgKyAoKnAwICsrKSAtICcw JzsKLQkgIGlmIChhcmcgPT0gMykKLQkgICAgZXhpc3RfYXJnXzMgPSB0cnVlOwotCSAgaWYgKHAw IDwgYnVmICsgbmxlbiAmJiAqcDAgPT0gJzsnKQotCSAgICBwMCArKzsKLQl9Ci0gICAgICBpZiAo cDAgPCBidWYgKyBubGVuICYmIGV4aXN0X2FyZ18zICYmICgqcDAgPT0gJ2gnIHx8ICpwMCA9PSAn bCcpKQotCWdldF90dHlwICgpLT5uZWVkX3JlZHJhd19zY3JlZW4gPSB0cnVlOwotICAgICAgcDAg Kys7Ci0gICAgICBpZiAocDAgPj0gYnVmICsgbmxlbikKLQlicmVhazsKLSAgICB9Ci0KLSAgaW50 IHJldHJ5X2NvdW50OwotICByZXRyeV9jb3VudCA9IDA7Ci0gIERXT1JEIGR3TW9kZSwgZmxhZ3M7 Ci0gIGZsYWdzID0gRU5BQkxFX1ZJUlRVQUxfVEVSTUlOQUxfUFJPQ0VTU0lORzsKLSAgd2hpbGUg KCFHZXRDb25zb2xlTW9kZSAoZ2V0X291dHB1dF9oYW5kbGUgKCksICZkd01vZGUpKQotICAgIHsK LSAgICAgIHRlcm1pb3NfcHJpbnRmICgiR2V0Q29uc29sZU1vZGUgZmFpbGVkLCAlRSIpOwotICAg ICAgaW50IGVycm5vX3NhdmUgPSBlcnJubzsKLSAgICAgIC8qIFJlLW9wZW4gaGFuZGxlcyAqLwot ICAgICAgdGhpcy0+b3BlbiAoMCwgMCk7Ci0gICAgICAvKiBGaXggcHNldWRvIGNvbnNvbGUgd2lu ZG93IHNpemUgKi8KLSAgICAgIHRoaXMtPmlvY3RsIChUSU9DU1dJTlNaLCAmZ2V0X3R0eXAgKCkt PndpbnNpemUpOwotICAgICAgaWYgKGVycm5vICE9IGVycm5vX3NhdmUpCi0Jc2V0X2Vycm5vIChl cnJub19zYXZlKTsKLSAgICAgIGlmICgrK3JldHJ5X2NvdW50ID4gMykKLQlnb3RvIGNsZWFudXA7 Ci0gICAgfQotICBpZiAoIShnZXRfdHR5cCAoKS0+dGkuY19vZmxhZyAmIE9QT1NUKSB8fAotICAg ICAgIShnZXRfdHR5cCAoKS0+dGkuY19vZmxhZyAmIE9OTENSKSkKLSAgICBmbGFncyB8PSBESVNB QkxFX05FV0xJTkVfQVVUT19SRVRVUk47Ci0gIFNldENvbnNvbGVNb2RlIChnZXRfb3V0cHV0X2hh bmRsZSAoKSwgZHdNb2RlIHwgZmxhZ3MpOwotICBjaGFyICpwOwotICBwID0gYnVmOwotICBEV09S RCB3TGVuLCB3cml0dGVuOwotICB3cml0dGVuID0gMDsKLSAgQk9PTCAoV0lOQVBJICpXcml0ZUZ1 bmMpCi0gICAgKEhBTkRMRSwgTFBDVk9JRCwgRFdPUkQsIExQRFdPUkQsIExQT1ZFUkxBUFBFRCk7 Ci0gIFdyaXRlRnVuYyA9IFdyaXRlRmlsZV9PcmlnID8gV3JpdGVGaWxlX09yaWcgOiBXcml0ZUZp bGU7Ci0gIHdoaWxlICh3cml0dGVuIDwgIG5sZW4pCi0gICAgewotICAgICAgaWYgKCFXcml0ZUZ1 bmMgKGdldF9vdXRwdXRfaGFuZGxlICgpLCBwLCBubGVuIC0gd3JpdHRlbiwgJndMZW4sIE5VTEwp KQotCXsKLQkgIHRlcm1pb3NfcHJpbnRmICgiV3JpdGVGaWxlIGZhaWxlZCwgJUUiKTsKLQkgIGJy ZWFrOwotCX0KLSAgICAgIGVsc2UKLQl7Ci0JICB3cml0dGVuICs9IHdMZW47Ci0JICBwICs9IHdM ZW47Ci0JfQotICAgIH0KLSAgLyogRGV0YWNoIGZyb20gcHNldWRvIGNvbnNvbGUgYW5kIHJlc3Vt ZS4gKi8KLSAgZmxhZ3MgPSBFTkFCTEVfVklSVFVBTF9URVJNSU5BTF9QUk9DRVNTSU5HOwotICBT ZXRDb25zb2xlTW9kZSAoZ2V0X291dHB1dF9oYW5kbGUgKCksIGR3TW9kZSB8IGZsYWdzKTsKLWNs ZWFudXA6Ci0gIFNldENvbnNvbGVPdXRwdXRDUCAob3JpZ0NQKTsKLSAgSGVhcEZyZWUgKEdldFBy b2Nlc3NIZWFwICgpLCAwLCBidWYpOwotZGV0YWNoOgotICByZXN0b3JlX3JlYXR0YWNoX3Bjb24g KCk7CisgIGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlID0gTlVMTDsKKyAgZ2V0X3R0eXAg KCktPnBjb25fc3RhcnQgPSBmYWxzZTsKIH0KIAogc3NpemVfdCBfX3N0ZGNhbGwKQEAgLTE1MDUs NDQgKzc3Niw3IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6d3JpdGUgKGNvbnN0IHZvaWQgKnB0ciwg c2l6ZV90IGxlbikKICAgcmVzZXRfc3dpdGNoX3RvX3Bjb24gKCk7CiAKICAgYWNxdWlyZV9vdXRw dXRfbXV0ZXggKElORklOSVRFKTsKLSAgYm9vbCBvdXRwdXRfdG9fcGNvbiA9IGdldF90dHlwICgp LT5zd2l0Y2hfdG9fcGNvbl9vdXQ7Ci0gIHJlbGVhc2Vfb3V0cHV0X211dGV4ICgpOwotCi0gIFVJ TlQgdGFyZ2V0X2NvZGVfcGFnZSA9IG91dHB1dF90b19wY29uID8KLSAgICBHZXRDb25zb2xlT3V0 cHV0Q1AgKCkgOiBnZXRfdHR5cCAoKS0+dGVybV9jb2RlX3BhZ2U7Ci0gIHNzaXplX3QgbmxlbjsK LSAgY2hhciAqYnVmID0gY29udmVydF9tYl9zdHIgKHRhcmdldF9jb2RlX3BhZ2UsIChzaXplX3Qg KikgJm5sZW4sCi0JCSBnZXRfdHR5cCAoKS0+dGVybV9jb2RlX3BhZ2UsIChjb25zdCBjaGFyICop IHB0ciwgbGVuKTsKLQotICAvKiBJZiBub3QgYXR0YWNoZWQgdG8gdGhpcyBwc2V1ZG8gY29uc29s ZSwgdHJ5IHRvIGF0dGFjaCB0ZW1wb3JhcmlseS4gKi8KLSAgcGlkX3Jlc3RvcmUgPSAwOwotICBi b29sIGZhbGxiYWNrID0gZmFsc2U7Ci0gIGlmIChvdXRwdXRfdG9fcGNvbiAmJiBwY29uX2F0dGFj aGVkX3RvICE9IGdldF9taW5vciAoKSkKLSAgICBpZiAoIXRyeV9yZWF0dGFjaF9wY29uICgpKQot ICAgICAgZmFsbGJhY2sgPSB0cnVlOwotCi0gIGlmIChvdXRwdXRfdG9fcGNvbiAmJiAhZmFsbGJh Y2sgJiYKLSAgICAgIChtZW1tZW0gKGJ1ZiwgbmxlbiwgIlwwMzNbNm4iLCA0KSB8fCBtZW1tZW0g KGJ1ZiwgbmxlbiwgIlwwMzNbMGMiLCA0KSkpCi0gICAgewotICAgICAgZ2V0X3R0eXAgKCktPnBj b25faW5fZW1wdHkgPSBmYWxzZTsKLSAgICAgIGlmICghaXNfbGluZV9pbnB1dCAoKSkKLQlTZXRF dmVudCAoaW5wdXRfYXZhaWxhYmxlX2V2ZW50KTsKLSAgICB9Ci0KLSAgRFdPUkQgZHdNb2RlLCBm bGFnczsKLSAgZmxhZ3MgPSBFTkFCTEVfVklSVFVBTF9URVJNSU5BTF9QUk9DRVNTSU5HOwotICBp ZiAoIShnZXRfdHR5cCAoKS0+dGkuY19vZmxhZyAmIE9QT1NUKSB8fAotICAgICAgIShnZXRfdHR5 cCAoKS0+dGkuY19vZmxhZyAmIE9OTENSKSkKLSAgICBmbGFncyB8PSBESVNBQkxFX05FV0xJTkVf QVVUT19SRVRVUk47Ci0gIGlmIChvdXRwdXRfdG9fcGNvbiAmJiAhZmFsbGJhY2spCi0gICAgewot ICAgICAgR2V0Q29uc29sZU1vZGUgKGdldF9vdXRwdXRfaGFuZGxlICgpLCAmZHdNb2RlKTsKLSAg ICAgIFNldENvbnNvbGVNb2RlIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgZHdNb2RlIHwgZmxhZ3Mp OwotICAgIH0KLSAgSEFORExFIHRvID0gKG91dHB1dF90b19wY29uICYmICFmYWxsYmFjaykgPwot ICAgIGdldF9vdXRwdXRfaGFuZGxlICgpIDogZ2V0X291dHB1dF9oYW5kbGVfY3lnICgpOwotICBh Y3F1aXJlX291dHB1dF9tdXRleCAoSU5GSU5JVEUpOwotICBpZiAoIXByb2Nlc3Nfb3Bvc3Rfb3V0 cHV0ICh0bywgYnVmLCBubGVuLCBmYWxzZSkpCisgIGlmICghcHJvY2Vzc19vcG9zdF9vdXRwdXQg KGdldF9vdXRwdXRfaGFuZGxlX2N5ZyAoKSwgcHRyLCB0b3dyaXRlLCBmYWxzZSkpCiAgICAgewog ICAgICAgRFdPUkQgZXJyID0gR2V0TGFzdEVycm9yICgpOwogICAgICAgdGVybWlvc19wcmludGYg KCJXcml0ZUZpbGUgZmFpbGVkLCAlRSIpOwpAQCAtMTU1NywyMCArNzkxLDYgQEAgZmhhbmRsZXJf cHR5X3NsYXZlOjp3cml0ZSAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgbGVuKQogICAgICAgdG93 cml0ZSA9IC0xOwogICAgIH0KICAgcmVsZWFzZV9vdXRwdXRfbXV0ZXggKCk7Ci0gIG1iX3N0cl9m cmVlIChidWYpOwotICBmbGFncyA9IEVOQUJMRV9WSVJUVUFMX1RFUk1JTkFMX1BST0NFU1NJTkc7 Ci0gIGlmIChvdXRwdXRfdG9fcGNvbiAmJiAhZmFsbGJhY2spCi0gICAgU2V0Q29uc29sZU1vZGUg KGdldF9vdXRwdXRfaGFuZGxlICgpLCBkd01vZGUgfCBmbGFncyk7Ci0KLSAgcmVzdG9yZV9yZWF0 dGFjaF9wY29uICgpOwotCi0gIC8qIFB1c2ggc2xhdmUgb3V0cHV0IHRvIHBzZXVkbyBjb25zb2xl IHNjcmVlbiBidWZmZXIgKi8KLSAgaWYgKGdldF9wc2V1ZG9fY29uc29sZSAoKSkKLSAgICB7Ci0g ICAgICBhY3F1aXJlX291dHB1dF9tdXRleCAoSU5GSU5JVEUpOwotICAgICAgcHVzaF90b19wY29u X3NjcmVlbmJ1ZmZlciAoKGNoYXIgKilwdHIsIGxlbiwgZmFsc2UpOwotICAgICAgcmVsZWFzZV9v dXRwdXRfbXV0ZXggKCk7Ci0gICAgfQogCiAgIHJldHVybiB0b3dyaXRlOwogfQpAQCAtMTU4Miwx NiArODAyLDE1IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6bWFza19zd2l0Y2hfdG9fcGNvbl9pbiAo Ym9vbCBtYXNrKQogfQogCiBib29sCi1maGFuZGxlcl9wdHlfY29tbW9uOjp0b19iZV9yZWFkX2Zy b21fcGNvbiAodm9pZCkKK2ZoYW5kbGVyX3B0eV9tYXN0ZXI6OnRvX2JlX3JlYWRfZnJvbV9wY29u ICh2b2lkKQogewotICByZXR1cm4gIWdldF90dHlwICgpLT5wY29uX2luX2VtcHR5IHx8Ci0gICAg KGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9pbiAmJiAhZ2V0X3R0eXAgKCktPm1hc2tfc3dp dGNoX3RvX3Bjb25faW4pOworICByZXR1cm4gZ2V0X3R0eXAgKCktPnBjb25fc3RhcnQKKyAgICB8 fCAoZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX2luICYmICFnZXRfdHR5cCAoKS0+bWFza19z d2l0Y2hfdG9fcGNvbl9pbik7CiB9CiAKIHZvaWQgX19yZWczCiBmaGFuZGxlcl9wdHlfc2xhdmU6 OnJlYWQgKHZvaWQgKnB0ciwgc2l6ZV90JiBsZW4pCiB7Ci0gIGNoYXIgKnB0cjAgPSAoY2hhciAq KXB0cjsKICAgc3NpemVfdCB0b3RhbHJlYWQgPSAwOwogICBpbnQgdm1pbiA9IDA7CiAgIGludCB2 dGltZSA9IDA7CS8qIEluaXRpYWxpemVkIHRvIHByZXZlbnQgLVd1bmluaXRpYWxpemVkIHdhcm5p bmcgKi8KQEAgLTE2MTYsOCArODM1LDYgQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpyZWFkICh2b2lk ICpwdHIsIHNpemVfdCYgbGVuKQogICAgICAgbWFza19zd2l0Y2hfdG9fcGNvbl9pbiAodHJ1ZSk7 CiAgICAgICByZXNldF9zd2l0Y2hfdG9fcGNvbiAoKTsKICAgICB9Ci0gIGlmICh0b19iZV9yZWFk X2Zyb21fcGNvbiAoKSkKLSAgICB1cGRhdGVfcGNvbl9pbnB1dF9zdGF0ZSAodHJ1ZSk7CiAKICAg aWYgKGlzX25vbmJsb2NraW5nICgpIHx8ICFwdHIpIC8qIEluZGljYXRpbmcgdGNmbHVzaCgpLiAq LwogICAgIHRpbWVfdG9fd2FpdCA9IDA7CkBAIC0xNzAzLDk4ICs5MjAsMjEgQEAgZmhhbmRsZXJf cHR5X3NsYXZlOjpyZWFkICh2b2lkICpwdHIsIHNpemVfdCYgbGVuKQogCSAgICAgIGlmICghdG90 YWxyZWFkKQogCQl7CiAJCSAgc2V0X3NpZ19lcnJubyAoRUFHQUlOKTsKLQkJICB0b3RhbHJlYWQg PSAtMTsKLQkJfQotCSAgICAgIGdvdG8gb3V0OwotCSAgICB9Ci0JICBjb250aW51ZTsKLQlkZWZh dWx0OgotCSAgdGVybWlvc19wcmludGYgKCJ3YWl0IGZvciBpbnB1dCBtdXRleCBmYWlsZWQsICVF Iik7Ci0JICBpZiAoIXRvdGFscmVhZCkKLQkgICAgewotCSAgICAgIF9fc2V0ZXJybm8gKCk7Ci0J ICAgICAgdG90YWxyZWFkID0gLTE7Ci0JICAgIH0KLQkgIGdvdG8gb3V0OwotCX0KLSAgICAgIGlm IChwdHIgJiYgdG9fYmVfcmVhZF9mcm9tX3Bjb24gKCkpCi0JewotCSAgaWYgKGdldF9yZWFkYWhl YWRfdmFsaWQgKCkpCi0JICAgIHsKLQkgICAgICBSZWxlYXNlTXV0ZXggKGlucHV0X211dGV4KTsK LQkgICAgICB0b3RhbHJlYWQgPSBnZXRfcmVhZGFoZWFkX2ludG9fYnVmZmVyICgoY2hhciAqKSBw dHIsIGxlbik7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewotCSAgICAgIGlmICghdHJ5X3JlYXR0 YWNoX3Bjb24gKCkpCi0JCXsKLQkJICByZXN0b3JlX3JlYXR0YWNoX3Bjb24gKCk7Ci0JCSAgZ290 byBkb19yZWFkX2N5ZzsKLQkJfQotCi0JICAgICAgRFdPUkQgZHdNb2RlOwotCSAgICAgIEdldENv bnNvbGVNb2RlIChnZXRfaGFuZGxlICgpLCAmZHdNb2RlKTsKLQkgICAgICBEV09SRCBmbGFncyA9 IEVOQUJMRV9WSVJUVUFMX1RFUk1JTkFMX0lOUFVUOwotCSAgICAgIGlmIChkd01vZGUgIT0gZmxh Z3MpCi0JCVNldENvbnNvbGVNb2RlIChnZXRfaGFuZGxlICgpLCBmbGFncyk7Ci0JICAgICAgLyog UmVhZCBnZXRfaGFuZGxlKCkgaW5zdGFkIG9mIGdldF9oYW5kbGVfY3lnKCkgKi8KLQkgICAgICBC T09MIChXSU5BUEkgKlJlYWRGdW5jKQotCQkoSEFORExFLCBMUFZPSUQsIERXT1JELCBMUERXT1JE LCBMUFZPSUQpOwotCSAgICAgIFJlYWRGdW5jID0gUmVhZENvbnNvbGVBX09yaWcgPyBSZWFkQ29u c29sZUFfT3JpZyA6IFJlYWRDb25zb2xlQTsKLQkgICAgICBEV09SRCBybGVuOwotCSAgICAgIHJl YWRsZW4gPSBNSU4gKGxlbiwgc2l6ZW9mIChidWYpKTsKLQkgICAgICBpZiAoIVJlYWRGdW5jIChn ZXRfaGFuZGxlICgpLCBidWYsIHJlYWRsZW4sICZybGVuLCBOVUxMKSkKLQkJewotCQkgIHRlcm1p b3NfcHJpbnRmICgicmVhZCBmYWlsZWQsICVFIik7Ci0JCSAgU2V0Q29uc29sZU1vZGUgKGdldF9o YW5kbGUgKCksIGR3TW9kZSk7Ci0JCSAgcmVzdG9yZV9yZWF0dGFjaF9wY29uICgpOwotCQkgIFJl bGVhc2VNdXRleCAoaW5wdXRfbXV0ZXgpOwotCQkgIHNldF9lcnJubyAoRUlPKTsKLQkJICB0b3Rh bHJlYWQgPSAtMTsKLQkJICBnb3RvIG91dDsKLQkJfQotCSAgICAgIFNldENvbnNvbGVNb2RlIChn ZXRfaGFuZGxlICgpLCBkd01vZGUpOwotCSAgICAgIHJlc3RvcmVfcmVhdHRhY2hfcGNvbiAoKTsK LQkgICAgICBSZWxlYXNlTXV0ZXggKGlucHV0X211dGV4KTsKLQotCSAgICAgIHNzaXplX3Qgbmxl bjsKLQkgICAgICBjaGFyICpuYnVmID0gY29udmVydF9tYl9zdHIgKGdldF90dHlwICgpLT50ZXJt X2NvZGVfcGFnZSwKLQkJCSAgICAgKHNpemVfdCAqKSAmbmxlbiwgR2V0Q29uc29sZUNQICgpLCBi dWYsIHJsZW4pOwotCi0JICAgICAgc3NpemVfdCByZXQ7Ci0JICAgICAgbGluZV9lZGl0X3N0YXR1 cyByZXMgPQotCQlsaW5lX2VkaXQgKG5idWYsIG5sZW4sIGdldF90dHlwICgpLT50aSwgJnJldCk7 Ci0KLQkgICAgICBtYl9zdHJfZnJlZSAobmJ1Zik7Ci0KLQkgICAgICBpZiAocmVzID09IGxpbmVf ZWRpdF9pbnB1dF9kb25lIHx8IHJlcyA9PSBsaW5lX2VkaXRfb2spCi0JCXRvdGFscmVhZCA9IGdl dF9yZWFkYWhlYWRfaW50b19idWZmZXIgKChjaGFyICopIHB0ciwgbGVuKTsKLQkgICAgICBlbHNl IGlmIChyZXMgPiBsaW5lX2VkaXRfc2lnbmFsbGVkKQotCQl7Ci0JCSAgc2V0X3NpZ19lcnJubyAo RUlOVFIpOwotCQkgIHRvdGFscmVhZCA9IC0xOwotCQl9Ci0JICAgICAgZWxzZQotCQl7Ci0JCSAg dXBkYXRlX3Bjb25faW5wdXRfc3RhdGUgKHRydWUpOwotCQkgIGNvbnRpbnVlOworCQkgIHRvdGFs cmVhZCA9IC0xOwogCQl9CisJICAgICAgZ290byBvdXQ7CisJICAgIH0KKwkgIGNvbnRpbnVlOwor CWRlZmF1bHQ6CisJICB0ZXJtaW9zX3ByaW50ZiAoIndhaXQgZm9yIGlucHV0IG11dGV4IGZhaWxl ZCwgJUUiKTsKKwkgIGlmICghdG90YWxyZWFkKQorCSAgICB7CisJICAgICAgX19zZXRlcnJubyAo KTsKKwkgICAgICB0b3RhbHJlYWQgPSAtMTsKIAkgICAgfQotCi0JICB1cGRhdGVfcGNvbl9pbnB1 dF9zdGF0ZSAodHJ1ZSk7Ci0JICBtYXNrX3N3aXRjaF90b19wY29uX2luIChmYWxzZSk7CiAJICBn b3RvIG91dDsKIAl9Ci0gICAgICBpZiAoIXB0ciAmJiBsZW4gPT0gVUlOVF9NQVggJiYgIWdldF90 dHlwICgpLT5wY29uX2luX2VtcHR5KQotCXsKLQkgIEZsdXNoQ29uc29sZUlucHV0QnVmZmVyIChn ZXRfaGFuZGxlICgpKTsKLQkgIGdldF90dHlwICgpLT5wY29uX2luX2VtcHR5ID0gdHJ1ZTsKLQkg IERXT1JEIG47Ci0JICBpZiAoYnl0ZXNfYXZhaWxhYmxlIChuKSAmJiBuID09IDApCi0JICAgIFJl c2V0RXZlbnQgKGlucHV0X2F2YWlsYWJsZV9ldmVudCk7Ci0JfQogCi1kb19yZWFkX2N5ZzoKICAg ICAgIGlmICghYnl0ZXNfYXZhaWxhYmxlIChieXRlc19pbl9waXBlKSkKIAl7CiAJICBSZWxlYXNl TXV0ZXggKGlucHV0X211dGV4KTsKQEAgLTE5MTEsMTYgKzEwNTEsNiBAQCBkb19yZWFkX2N5ZzoK IG91dDoKICAgdGVybWlvc19wcmludGYgKCIlZCA9IHJlYWQoJXAsICVsdSkiLCB0b3RhbHJlYWQs IHB0ciwgbGVuKTsKICAgbGVuID0gKHNpemVfdCkgdG90YWxyZWFkOwotICAvKiBQdXNoIHNsYXZl IHJlYWQgYXMgZWNobyB0byBwc2V1ZG8gY29uc29sZSBzY3JlZW4gYnVmZmVyLiAqLwotICBpZiAo Z2V0X3BzZXVkb19jb25zb2xlICgpICYmIHB0cjAgJiYgdG90YWxyZWFkID4gMCAmJgotICAgICAg KGdldF90dHlwICgpLT50aS5jX2xmbGFnICYgRUNITykpCi0gICAgewotICAgICAgYWNxdWlyZV9v dXRwdXRfbXV0ZXggKElORklOSVRFKTsKLSAgICAgIHB1c2hfdG9fcGNvbl9zY3JlZW5idWZmZXIg KHB0cjAsIGxlbiwgdHJ1ZSk7Ci0gICAgICBpZiAoZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29u X291dCkKLQl0cmlnZ2VyX3JlZHJhd19zY3JlZW4gKCk7Ci0gICAgICByZWxlYXNlX291dHB1dF9t dXRleCAoKTsKLSAgICB9CiAgIG1hc2tfc3dpdGNoX3RvX3Bjb25faW4gKGZhbHNlKTsKIH0KIApA QCAtMjA2MSwzOCArMTE5MSwxMSBAQCBmaGFuZGxlcl9wdHlfc2xhdmU6OmlvY3RsICh1bnNpZ25l ZCBpbnQgY21kLCB2b2lkICphcmcpCiAgICAgICBnZXRfdHR5cCAoKS0+d2luc2l6ZSA9IGdldF90 dHlwICgpLT5hcmcud2luc2l6ZTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgVElPQ1NXSU5TWjoK LSAgICAgIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0JewotCSAgLyogSWYgbm90IGF0dGFj aGVkIHRvIHRoaXMgcHNldWRvIGNvbnNvbGUsCi0JICAgICB0cnkgdG8gYXR0YWNoIHRlbXBvcmFy aWx5LiAqLwotCSAgcGlkX3Jlc3RvcmUgPSAwOwotCSAgaWYgKHBjb25fYXR0YWNoZWRfdG8gIT0g Z2V0X21pbm9yICgpKQotCSAgICBpZiAoIXRyeV9yZWF0dGFjaF9wY29uICgpKQotCSAgICAgIGdv dG8gY2xlYW51cDsKLQotCSAgQ09PUkQgc2l6ZTsKLQkgIHNpemUuWCA9ICgoc3RydWN0IHdpbnNp emUgKikgYXJnKS0+d3NfY29sOwotCSAgc2l6ZS5ZID0gKChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcp LT53c19yb3c7Ci0JICBDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTyBjc2JpOwotCSAgaWYgKEdl dENvbnNvbGVTY3JlZW5CdWZmZXJJbmZvIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgJmNzYmkpKQot CSAgICBpZiAoc2l6ZS5YID09IGNzYmkuc3JXaW5kb3cuUmlnaHQgLSBjc2JpLnNyV2luZG93Lkxl ZnQgKyAxICYmCi0JCXNpemUuWSA9PSBjc2JpLnNyV2luZG93LkJvdHRvbSAtIGNzYmkuc3JXaW5k b3cuVG9wICsgMSkKLQkgICAgICBnb3RvIGNsZWFudXA7Ci0JICBpZiAoIVNldENvbnNvbGVTY3Jl ZW5CdWZmZXJTaXplIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgc2l6ZSkpCi0JICAgIGdvdG8gY2xl YW51cDsKLQkgIFNNQUxMX1JFQ1QgcmVjdDsKLQkgIHJlY3QuTGVmdCA9IDA7Ci0JICByZWN0LlRv cCA9IDA7Ci0JICByZWN0LlJpZ2h0ID0gc2l6ZS5YLTE7Ci0JICByZWN0LkJvdHRvbSA9IHNpemUu WS0xOwotCSAgU2V0Q29uc29sZVdpbmRvd0luZm8gKGdldF9vdXRwdXRfaGFuZGxlICgpLCBUUlVF LCAmcmVjdCk7Ci1jbGVhbnVwOgotCSAgcmVzdG9yZV9yZWF0dGFjaF9wY29uICgpOwotCX0KLQog ICAgICAgaWYgKGdldF90dHlwICgpLT53aW5zaXplLndzX3JvdyAhPSAoKHN0cnVjdCB3aW5zaXpl ICopIGFyZyktPndzX3JvdwogCSAgfHwgZ2V0X3R0eXAgKCktPndpbnNpemUud3NfY29sICE9ICgo c3RydWN0IHdpbnNpemUgKikgYXJnKS0+d3NfY29sKQogCXsKKwkgIGlmIChnZXRfdHR5cCAoKS0+ aF9wc2V1ZG9fY29uc29sZSAmJiBnZXRfdHR5cCAoKS0+cGNvbl9waWQpCisJICAgIHJlc2l6ZV9w c2V1ZG9fY29uc29sZSAoKHN0cnVjdCB3aW5zaXplICopIGFyZyk7CiAJICBnZXRfdHR5cCAoKS0+ YXJnLndpbnNpemUgPSAqKHN0cnVjdCB3aW5zaXplICopIGFyZzsKIAkgIGdldF90dHlwICgpLT53 aW5zaXplID0gKihzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmc7CiAJICBnZXRfdHR5cCAoKS0+a2lsbF9w Z3JwIChTSUdXSU5DSCk7CkBAIC0yMzc4LDYgKzE0ODEsMjcgQEAgZmhhbmRsZXJfcHR5X2NvbW1v bjo6Y2xvc2UgKCkKICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQKK2ZoYW5kbGVyX3B0eV9jb21tb246 OnJlc2l6ZV9wc2V1ZG9fY29uc29sZSAoc3RydWN0IHdpbnNpemUgKndzKQoreworICBDT09SRCBz aXplOworICBzaXplLlggPSB3cy0+d3NfY29sOworICBzaXplLlkgPSB3cy0+d3Nfcm93OworICBw aW5mbyBwIChnZXRfdHR5cCAoKS0+cGNvbl9waWQpOworICBpZiAocCkKKyAgICB7CisgICAgICBI UENPTl9JTlRFUk5BTCBocGNvbl9sb2NhbDsKKyAgICAgIEhBTkRMRSBwY29uX293bmVyID0KKwlP cGVuUHJvY2VzcyAoUFJPQ0VTU19EVVBfSEFORExFLCBGQUxTRSwgcC0+ZXhlY19kd1Byb2Nlc3NJ ZCk7CisgICAgICBEdXBsaWNhdGVIYW5kbGUgKHBjb25fb3duZXIsIGdldF90dHlwICgpLT5oX3Bj b25fd3JpdGVfcGlwZSwKKwkJICAgICAgIEdldEN1cnJlbnRQcm9jZXNzICgpLCAmaHBjb25fbG9j YWwuaFdyaXRlUGlwZSwKKwkJICAgICAgIDAsIFRSVUUsIERVUExJQ0FURV9TQU1FX0FDQ0VTUyk7 CisgICAgICBSZXNpemVQc2V1ZG9Db25zb2xlICgoSFBDT04pICZocGNvbl9sb2NhbCwgc2l6ZSk7 CisgICAgICBDbG9zZUhhbmRsZSAocGNvbl9vd25lcik7CisgICAgICBDbG9zZUhhbmRsZSAoaHBj b25fbG9jYWwuaFdyaXRlUGlwZSk7CisgICAgfQorfQorCiB2b2lkCiBmaGFuZGxlcl9wdHlfbWFz dGVyOjpjbGVhbnVwICgpCiB7CkBAIC0yMzkzLDcgKzE1MTcsNiBAQCBmaGFuZGxlcl9wdHlfbWFz dGVyOjpjbG9zZSAoKQogewogICBPQkpFQ1RfQkFTSUNfSU5GT1JNQVRJT04gb2JpOwogICBOVFNU QVRVUyBzdGF0dXM7Ci0gIHBpZF90IG1hc3Rlcl9waWRfdG1wID0gZ2V0X3R0eXAgKCktPm1hc3Rl cl9waWQ7CiAKICAgdGVybWlvc19wcmludGYgKCJjbG9zaW5nIGZyb21fbWFzdGVyKCVwKS9mcm9t X21hc3Rlcl9jeWcoJXApL3RvX21hc3RlciglcCkvdG9fbWFzdGVyX2N5ZyglcCkgc2luY2Ugd2Ug b3duIHRoZW0oJXUpIiwKIAkJICBmcm9tX21hc3RlciwgZnJvbV9tYXN0ZXJfY3lnLApAQCAtMjQz OCwzMCArMTU2MSw2IEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6OmNsb3NlICgpCiAgIGVsc2UgaWYg KG9iaS5IYW5kbGVDb3VudCA9PSAxKQogICAgIHsKICAgICAgIHRlcm1pb3NfcHJpbnRmICgiQ2xv c2luZyBsYXN0IG1hc3RlciBvZiBwdHklZCIsIGdldF9taW5vciAoKSk7Ci0gICAgICAvKiBDbG9z ZSBQc2V1ZG8gQ29uc29sZSAqLwotICAgICAgaWYgKGdldF9wc2V1ZG9fY29uc29sZSAoKSkKLQl7 Ci0JICAvKiBUZXJtaW5hdGUgaGVscGVyIHByb2Nlc3MgKi8KLQkgIFNldEV2ZW50IChnZXRfdHR5 cCAoKS0+aF9oZWxwZXJfZ29vZGJ5ZSk7Ci0JICBXYWl0Rm9yU2luZ2xlT2JqZWN0IChnZXRfdHR5 cCAoKS0+aF9oZWxwZXJfcHJvY2VzcywgSU5GSU5JVEUpOwotCSAgQ2xvc2VIYW5kbGUgKGdldF90 dHlwICgpLT5oX2hlbHBlcl9nb29kYnllKTsKLQkgIENsb3NlSGFuZGxlIChnZXRfdHR5cCAoKS0+ aF9oZWxwZXJfcHJvY2Vzcyk7Ci0JICAvKiBGSVhNRTogUHNldWRvIGNvbnNvbGUgY2FuIGJlIGFj Y2Vzc2VkIHZpYSBpdHMgaGFuZGxlCi0JICAgICBvbmx5IGluIHRoZSBwcm9jZXNzIHdoaWNoIGNy ZWF0ZWQgaXQuIFdoYXQgZWxzZSBjYW4gd2UgZG8/ICovCi0JICBpZiAobWFzdGVyX3BpZF90bXAg PT0gbXlzZWxmLT5waWQpCi0JICAgIHsKLQkgICAgICAvKiBDbG9zZVBzZXVkb0NvbnNvbGUoKSBz ZWVtcyB0byBoYXZlIGEgYnVnIHRoYXQgb25lCi0JCSBpbnRlcm5hbCBoYW5kbGUgcmVtYWlucyBv cGVuZWQuIFRoaXMgY2F1c2VzIGhhbmRsZSBsZWFrLgotCQkgVGhpcyBpcyBhIHdvcmthcm91bmQg Zm9yIHRoaXMgcHJvYmxlbS4gKi8KLQkgICAgICBIUENPTl9JTlRFUk5BTCAqaHAgPSAoSFBDT05f SU5URVJOQUwgKikgZ2V0X3BzZXVkb19jb25zb2xlICgpOwotCSAgICAgIEhBTkRMRSB0bXAgPSBo cC0+aENvbkhvc3RQcm9jZXNzOwotCSAgICAgIC8qIFJlbGVhc2UgcHNldWRvIGNvbnNvbGUgKi8K LQkgICAgICBDbG9zZVBzZXVkb0NvbnNvbGUgKGdldF9wc2V1ZG9fY29uc29sZSAoKSk7Ci0JICAg ICAgQ2xvc2VIYW5kbGUgKHRtcCk7Ci0JICAgIH0KLQkgIGdldF90dHlwICgpLT5zd2l0Y2hfdG9f cGNvbl9pbiA9IGZhbHNlOwotCSAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCA9IGZh bHNlOwotCX0KICAgICAgIGlmIChnZXRfdHR5cCAoKS0+Z2V0c2lkICgpID4gMCkKIAlraWxsIChn ZXRfdHR5cCAoKS0+Z2V0c2lkICgpLCBTSUdIVVApOwogICAgICAgU2V0RXZlbnQgKGlucHV0X2F2 YWlsYWJsZV9ldmVudCk7CkBAIC0yNDY5LDkgKzE1NjgsOCBAQCBmaGFuZGxlcl9wdHlfbWFzdGVy OjpjbG9zZSAoKQogCiAgIGlmICghRm9yY2VDbG9zZUhhbmRsZSAoZnJvbV9tYXN0ZXIpKQogICAg IHRlcm1pb3NfcHJpbnRmICgiZXJyb3IgY2xvc2luZyBmcm9tX21hc3RlciAlcCwgJUUiLCBmcm9t X21hc3Rlcik7Ci0gIGlmIChmcm9tX21hc3Rlcl9jeWcgIT0gZnJvbV9tYXN0ZXIpIC8qIEF2b2lk IGRvdWJsZSBjbG9zZS4gKi8KLSAgICBpZiAoIUZvcmNlQ2xvc2VIYW5kbGUgKGZyb21fbWFzdGVy X2N5ZykpCi0gICAgICB0ZXJtaW9zX3ByaW50ZiAoImVycm9yIGNsb3NpbmcgZnJvbV9tYXN0ZXJf Y3lnICVwLCAlRSIsIGZyb21fbWFzdGVyX2N5Zyk7CisgIGlmICghRm9yY2VDbG9zZUhhbmRsZSAo ZnJvbV9tYXN0ZXJfY3lnKSkKKyAgICB0ZXJtaW9zX3ByaW50ZiAoImVycm9yIGNsb3NpbmcgZnJv bV9tYXN0ZXJfY3lnICVwLCAlRSIsIGZyb21fbWFzdGVyX2N5Zyk7CiAgIGlmICghRm9yY2VDbG9z ZUhhbmRsZSAodG9fbWFzdGVyKSkKICAgICB0ZXJtaW9zX3ByaW50ZiAoImVycm9yIGNsb3Npbmcg dG9fbWFzdGVyICVwLCAlRSIsIHRvX21hc3Rlcik7CiAgIGZyb21fbWFzdGVyID0gdG9fbWFzdGVy ID0gTlVMTDsKQEAgLTI1MTMsNyArMTYxMSw3IEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6OndyaXRl IChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBsZW4pCiAKICAgLyogV3JpdGUgdGVybWluYWwgaW5w dXQgdG8gdG9fc2xhdmUgcGlwZSBpbnN0ZWFkIG9mIG91dHB1dF9oYW5kbGUKICAgICAgaWYgY3Vy cmVudCBhcHBsaWNhdGlvbiBpcyBuYXRpdmUgY29uc29sZSBhcHBsaWNhdGlvbi4gKi8KLSAgaWYg KHRvX2JlX3JlYWRfZnJvbV9wY29uICgpKQorICBpZiAodG9fYmVfcmVhZF9mcm9tX3Bjb24gKCkg JiYgZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUpCiAgICAgewogICAgICAgc2l6ZV90IG5s ZW47CiAgICAgICBjaGFyICpidWYgPSBjb252ZXJ0X21iX3N0cgpAQCAtMjUyMSw0MCArMTYxOSw1 MCBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjp3cml0ZSAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qg bGVuKQogCiAgICAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0IChpbnB1dF9tdXRleCwgSU5GSU5JVEUp OwogCi0gICAgICBpZiAobWVtY2hyIChidWYsICdcMDAzJywgbmxlbikpIC8qIF5DIGludHIga2V5 IGluIHBjb24gKi8KLQlnZXRfdHR5cCAoKS0+cmVxX2ZsdXNoX3Bjb25faW5wdXQgPSB0cnVlOwot CiAgICAgICBEV09SRCB3TGVuOwotICAgICAgV3JpdGVGaWxlICh0b19zbGF2ZSwgYnVmLCBubGVu LCAmd0xlbiwgTlVMTCk7Ci0gICAgICBnZXRfdHR5cCAoKS0+cGNvbl9pbl9lbXB0eSA9IGZhbHNl OwotCi0gICAgICBSZWxlYXNlTXV0ZXggKGlucHV0X211dGV4KTsKIAotICAgICAgLyogVXNlIGxp bmVfZWRpdCAoKSBpbiBvcmRlciB0byBzZXQgaW5wdXRfYXZhaWxhYmxlX2V2ZW50LiAqLwotICAg ICAgYm9vbCBpc19lY2hvID0gdGMgKCktPnRpLmNfbGZsYWcgJiBFQ0hPOwotICAgICAgaWYgKCFn ZXRfdHR5cCAoKS0+bWFza19zd2l0Y2hfdG9fcGNvbl9pbikKKyAgICAgIGlmIChnZXRfdHR5cCAo KS0+cGNvbl9zdGFydCkKIAl7Ci0JICB0YyAoKS0+dGkuY19sZmxhZyAmPSB+RUNITzsKLQkgIHRp LmNfbGZsYWcgJj0gfkVDSE87Ci0JfQotICAgICAgdGkuY19sZmxhZyAmPSB+SVNJRzsKLSAgICAg IGxpbmVfZWRpdCAoYnVmLCBubGVuLCB0aSwgJnJldCk7Ci0gICAgICBpZiAoaXNfZWNobykKLQl0 YyAoKS0+dGkuY19sZmxhZyB8PSBFQ0hPOwotICAgICAgZ2V0X3R0eXAgKCktPnJlYWRfcmV0dmFs ID0gMTsKLQotICAgICAgY29uc3QgY2hhciBzaWdzW10gPSB7Ci0JKGNoYXIpIHRpLmNfY2NbVklO VFJdLAotCShjaGFyKSB0aS5jX2NjW1ZRVUlUXSwKLQkoY2hhcikgdGkuY19jY1tWU1VTUF0sCi0g ICAgICB9OwotICAgICAgaWYgKHRjICgpLT50aS5jX2xmbGFnICYgSVNJRykKLQlmb3IgKHNpemVf dCBpPTA7IGk8c2l6ZW9mIChzaWdzKTsgaSsrKQotCSAgaWYgKHNpZ3NbaV0gJiYgbWVtY2hyIChi dWYsIHNpZ3NbaV0sIG5sZW4pKQorCSAgLyogUHNldWRvIGNvbmRvbGUgc3VwcG9ydCB1c2VzICJD U0k2biIgdG8gZ2V0IGN1cnNvciBwb3NpdGlvbi4KKwkgICAgIElmIHRoZSByZXBseSBmb3IgIkNT STZuIiBpcyBkaXZpZGVkIGludG8gbXVsdGlwbGUgd3JpdGVzLAorCSAgICAgcHNldWRvIGNvbnNv bGUgc29tZXRpbWVzIGRvZXMgbm90IHJlY29nbml6ZSBpdC4gIFRoZXJlZm9yZSwKKwkgICAgIHB1 dCB0aGVtIHRvZ2V0aGVyIGludG8gd3BidWYgYW5kIHdyaXRlIGFsbCBhdCBvbmNlLiAqLworCSAg c3RhdGljIGNvbnN0IGludCB3cGJ1Zl9sZW4gPSA2NDsKKwkgIHN0YXRpYyBjaGFyIHdwYnVmW3dw YnVmX2xlbl07CisJICBzdGF0aWMgaW50IGl4cHV0ID0gMDsKKworCSAgaWYgKGl4cHV0ID09IDAg JiYgYnVmWzBdICE9ICdcMDMzJykKKwkgICAgeyAvKiBmYWlsLXNhZmUgKi8KKwkgICAgICBXcml0 ZUZpbGUgKHRvX3NsYXZlLCAiXDAzM1sxOzFSIiwgNiwgJndMZW4sIE5VTEwpOyAvKiBkdW1teSAq LworCSAgICAgIGdldF90dHlwICgpLT5wY29uX3N0YXJ0ID0gZmFsc2U7CisJICAgIH0KKwkgIGVs c2UKIAkgICAgewotCSAgICAgIGVhdF9yZWFkYWhlYWQgKC0xKTsKLQkgICAgICBTZXRFdmVudCAo aW5wdXRfYXZhaWxhYmxlX2V2ZW50KTsKKwkgICAgICBpZiAoaXhwdXQgKyBubGVuIDwgd3BidWZf bGVuKQorCQlmb3IgKHNpemVfdCBpPTA7IGk8bmxlbjsgaSsrKQorCQkgIHdwYnVmW2l4cHV0Kytd ID0gYnVmW2ldOworCSAgICAgIGVsc2UKKwkJeworCQkgIFdyaXRlRmlsZSAodG9fc2xhdmUsIHdw YnVmLCBpeHB1dCwgJndMZW4sIE5VTEwpOworCQkgIGl4cHV0ID0gMDsKKwkJICBnZXRfdHR5cCAo KS0+cGNvbl9zdGFydCA9IGZhbHNlOworCQkgIFdyaXRlRmlsZSAodG9fc2xhdmUsIGJ1Ziwgbmxl biwgJndMZW4sIE5VTEwpOworCQl9CisJICAgICAgaWYgKGl4cHV0ICYmIG1lbWNociAod3BidWYs ICdSJywgaXhwdXQpKQorCQl7CisJCSAgV3JpdGVGaWxlICh0b19zbGF2ZSwgd3BidWYsIGl4cHV0 LCAmd0xlbiwgTlVMTCk7CisJCSAgaXhwdXQgPSAwOworCQkgIGdldF90dHlwICgpLT5wY29uX3N0 YXJ0ID0gZmFsc2U7CisJCX0KKwkgICAgICBSZWxlYXNlTXV0ZXggKGlucHV0X211dGV4KTsKKwkg ICAgICBtYl9zdHJfZnJlZSAoYnVmKTsKKwkgICAgICByZXR1cm4gbGVuOwogCSAgICB9CisJfQor CisgICAgICBXcml0ZUZpbGUgKHRvX3NsYXZlLCBidWYsIG5sZW4sICZ3TGVuLCBOVUxMKTsKKwor ICAgICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7CiAKICAgICAgIG1iX3N0cl9mcmVlIChi dWYpOwogICAgICAgcmV0dXJuIGxlbjsKQEAgLTI2MzAsMTUgKzE3MzgsOCBAQCBmaGFuZGxlcl9w dHlfbWFzdGVyOjppb2N0bCAodW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogICAgICAgaWYg KGdldF90dHlwICgpLT53aW5zaXplLndzX3JvdyAhPSAoKHN0cnVjdCB3aW5zaXplICopIGFyZykt PndzX3JvdwogCSAgfHwgZ2V0X3R0eXAgKCktPndpbnNpemUud3NfY29sICE9ICgoc3RydWN0IHdp bnNpemUgKikgYXJnKS0+d3NfY29sKQogCXsKLQkgIC8qIEZJWE1FOiBQc2V1ZG8gY29uc29sZSBj YW4gYmUgYWNjZXNzZWQgdmlhIGl0cyBoYW5kbGUKLQkgICAgIG9ubHkgaW4gdGhlIHByb2Nlc3Mg d2hpY2ggY3JlYXRlZCBpdC4gV2hhdCBlbHNlIGNhbiB3ZSBkbz8gKi8KLQkgIGlmIChnZXRfcHNl dWRvX2NvbnNvbGUgKCkgJiYgZ2V0X3R0eXAgKCktPm1hc3Rlcl9waWQgPT0gbXlzZWxmLT5waWQp Ci0JICAgIHsKLQkgICAgICBDT09SRCBzaXplOwotCSAgICAgIHNpemUuWCA9ICgoc3RydWN0IHdp bnNpemUgKikgYXJnKS0+d3NfY29sOwotCSAgICAgIHNpemUuWSA9ICgoc3RydWN0IHdpbnNpemUg KikgYXJnKS0+d3Nfcm93OwotCSAgICAgIFJlc2l6ZVBzZXVkb0NvbnNvbGUgKGdldF9wc2V1ZG9f Y29uc29sZSAoKSwgc2l6ZSk7Ci0JICAgIH0KKwkgIGlmIChnZXRfdHR5cCAoKS0+aF9wc2V1ZG9f Y29uc29sZSAmJiBnZXRfdHR5cCAoKS0+cGNvbl9waWQpCisJICAgIHJlc2l6ZV9wc2V1ZG9fY29u c29sZSAoKHN0cnVjdCB3aW5zaXplICopIGFyZyk7CiAJICBnZXRfdHR5cCAoKS0+d2luc2l6ZSA9 ICooc3RydWN0IHdpbnNpemUgKikgYXJnOwogCSAgZ2V0X3R0eXAgKCktPmtpbGxfcGdycCAoU0lH V0lOQ0gpOwogCX0KQEAgLTI3NjMsNyArMTg2NCw3IEBAIGdldF9sb2NhbGVfZnJvbV9lbnYgKGNo YXIgKmxvY2FsZSkKICAgc3RyY3B5IChsb2NhbGUsIGVudik7CiB9CiAKLXN0YXRpYyBMQ0lECitz dGF0aWMgdm9pZAogZ2V0X2xhbmdpbmZvIChjaGFyICpsb2NhbGVfb3V0LCBjaGFyICpjaGFyc2V0 X291dCkKIHsKICAgLyogR2V0IGxvY2FsZSBmcm9tIGVudmlyb25tZW50ICovCkBAIC0yNzc2LDEx ICsxODc3LDYgQEAgZ2V0X2xhbmdpbmZvIChjaGFyICpsb2NhbGVfb3V0LCBjaGFyICpjaGFyc2V0 X291dCkKICAgaWYgKCFsb2NhbGUpCiAgICAgbG9jYWxlID0gIkMiOwogCi0gIGNoYXIgdG1wX2xv Y2FsZVtFTkNPRElOR19MRU4gKyAxXTsKLSAgY2hhciAqcmV0ID0gX19zZXRfbG9jYWxlX2Zyb21f bG9jYWxlX2FsaWFzIChsb2NhbGUsIHRtcF9sb2NhbGUpOwotICBpZiAocmV0KQotICAgIGxvY2Fs ZSA9IHRtcF9sb2NhbGU7Ci0KICAgY29uc3QgY2hhciAqY2hhcnNldDsKICAgc3RydWN0IGxjX2N0 eXBlX1QgKmxjX2N0eXBlID0gKHN0cnVjdCBsY19jdHlwZV9UICopIGxvYy5sY19jYXRbTENfQ1RZ UEVdLnB0cjsKICAgaWYgKCFsY19jdHlwZSkKQEAgLTI4MzAsMjMgKzE5MjYsOSBAQCBnZXRfbGFu Z2luZm8gKGNoYXIgKmxvY2FsZV9vdXQsIGNoYXIgKmNoYXJzZXRfb3V0KQogICAgICAgY2hhcnNl dCA9ICJDUDkzMiI7CiAgICAgfQogCi0gIHdjaGFyX3QgbGNbRU5DT0RJTkdfTEVOICsgMV07Ci0g IHdjaGFyX3QgKnA7Ci0gIG1ic3Rvd2NzIChsYywgbG9jYWxlLCBFTkNPRElOR19MRU4pOwotICBw ID0gd2NzY2hyIChsYywgTCcuJyk7Ci0gIGlmIChwKQotICAgICpwID0gTCdcMCc7Ci0gIHAgPSB3 Y3NjaHIgKGxjLCBMJ18nKTsKLSAgaWYgKHApCi0gICAgKnAgPSBMJy0nOwotICBMQ0lEIGxjaWQg PSBMb2NhbGVOYW1lVG9MQ0lEIChsYywgMCk7Ci0gIGlmICghbGNpZCAmJiAhc3RyY21wIChjaGFy c2V0LCAiQVNDSUkiKSkKLSAgICByZXR1cm4gMDsKLQogICAvKiBTZXQgcmVzdWx0cyAqLwogICBz dHJjcHkgKGxvY2FsZV9vdXQsIG5ld19sb2NhbGUpOwogICBzdHJjcHkgKGNoYXJzZXRfb3V0LCBj aGFyc2V0KTsKLSAgcmV0dXJuIGxjaWQ7CiB9CiAKIHZvaWQKQEAgLTI4NTQsMjEgKzE5MzYsNyBA QCBmaGFuZGxlcl9wdHlfc2xhdmU6OnNldHVwX2xvY2FsZSAodm9pZCkKIHsKICAgY2hhciBsb2Nh bGVbRU5DT0RJTkdfTEVOICsgMV0gPSAiQyI7CiAgIGNoYXIgY2hhcnNldFtFTkNPRElOR19MRU4g KyAxXSA9ICJBU0NJSSI7Ci0gIExDSUQgbGNpZCA9IGdldF9sYW5naW5mbyAobG9jYWxlLCBjaGFy c2V0KTsKLQotICAvKiBTZXQgY29uc29sZSBjb2RlIHBhZ2UgZm9ybSBsb2NhbGUgKi8KLSAgaWYg KGdldF9wc2V1ZG9fY29uc29sZSAoKSkKLSAgICB7Ci0gICAgICBVSU5UIGNvZGVfcGFnZTsKLSAg ICAgIGlmIChsY2lkID09IDAgfHwgbGNpZCA9PSAoTENJRCkgLTEpCi0JY29kZV9wYWdlID0gMjAx Mjc7IC8qIEFTQ0lJICovCi0gICAgICBlbHNlIGlmICghR2V0TG9jYWxlSW5mbyAobGNpZCwKLQkJ CSAgICAgICBMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSB8IExPQ0FMRV9SRVRVUk5fTlVNQkVSLAot CQkJICAgICAgIChjaGFyICopICZjb2RlX3BhZ2UsIHNpemVvZiAoY29kZV9wYWdlKSkpCi0JY29k ZV9wYWdlID0gMjAxMjc7IC8qIEFTQ0lJICovCi0gICAgICBTZXRDb25zb2xlQ1AgKGNvZGVfcGFn ZSk7Ci0gICAgICBTZXRDb25zb2xlT3V0cHV0Q1AgKGNvZGVfcGFnZSk7Ci0gICAgfQorICBnZXRf bGFuZ2luZm8gKGxvY2FsZSwgY2hhcnNldCk7CiAKICAgLyogU2V0IHRlcm1pbmFsIGNvZGUgcGFn ZSBmcm9tIGxvY2FsZSAqLwogICAvKiBUaGlzIGNvZGUgaXMgYm9ycm93ZWQgZnJvbSBtaW50dHk6 IGNoYXJzZXQuYyAqLwpAQCAtMjg3OCw5ICsxOTQ2LDkgQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpz ZXR1cF9sb2NhbGUgKHZvaWQpCiAgICAgY2hhcnNldF91W2ldID0gdG91cHBlciAoY2hhcnNldFtp XSk7CiAgIHVuc2lnbmVkIGludCBpc287CiAgIFVJTlQgY3AgPSAyMDEyNzsgLyogRGVmYXVsdCBm b3IgZmFsbGJhY2sgKi8KLSAgaWYgKHNzY2FuZiAoY2hhcnNldF91LCAiSVNPLTg4NTktJXUiLCAm aXNvKSA9PSAxIHx8Ci0gICAgICBzc2NhbmYgKGNoYXJzZXRfdSwgIklTTzg4NTktJXUiLCAmaXNv KSA9PSAxIHx8Ci0gICAgICBzc2NhbmYgKGNoYXJzZXRfdSwgIklTTzg4NTkldSIsICZpc28pID09 IDEpCisgIGlmIChzc2NhbmYgKGNoYXJzZXRfdSwgIklTTy04ODU5LSV1IiwgJmlzbykgPT0gMQor ICAgICAgfHwgc3NjYW5mIChjaGFyc2V0X3UsICJJU084ODU5LSV1IiwgJmlzbykgPT0gMQorICAg ICAgfHwgc3NjYW5mIChjaGFyc2V0X3UsICJJU084ODU5JXUiLCAmaXNvKSA9PSAxKQogICAgIHsK ICAgICAgIGlmIChpc28gJiYgaXNvIDw9IDE2ICYmIGlzbyAhPTEyKQogCWdldF90dHlwICgpLT50 ZXJtX2NvZGVfcGFnZSA9IDI4NTkwICsgaXNvOwpAQCAtMjg5Niw5MCArMTk2NCw5IEBAIGZoYW5k bGVyX3B0eV9zbGF2ZTo6c2V0dXBfbG9jYWxlICh2b2lkKQogCX0KIH0KIAotdm9pZAotZmhhbmRs ZXJfcHR5X3NsYXZlOjpzZXRfZnJlZWNvbnNvbGVfb25fY2xvc2UgKGJvb2wgdmFsKQotewotICBm cmVlY29uc29sZV9vbl9jbG9zZSA9IHZhbDsKLX0KLQotdm9pZAotZmhhbmRsZXJfcHR5X3NsYXZl Ojp0cmlnZ2VyX3JlZHJhd19zY3JlZW4gKHZvaWQpCi17Ci0gIC8qIEZvcmNpYmx5IHJlZHJhdyBz Y3JlZW4gYmFzZWQgb24gY29uc29sZSBzY3JlZW4gYnVmZmVyLiAqLwotICAvKiBUaGUgZm9sbG93 aW5nIGNvZGUgdHJpZ2dlcnMgcmVkcmF3aW5nIHRoZSBzY3JlZW4uICovCi0gIENPTlNPTEVfU0NS RUVOX0JVRkZFUl9JTkZPIHNiaTsKLSAgR2V0Q29uc29sZVNjcmVlbkJ1ZmZlckluZm8gKGdldF9v dXRwdXRfaGFuZGxlICgpLCAmc2JpKTsKLSAgU01BTExfUkVDVCByZWN0ID0gezAsIDAsCi0gICAg KFNIT1JUKSAoc2JpLmR3U2l6ZS5YIC0xKSwgKFNIT1JUKSAoc2JpLmR3U2l6ZS5ZIC0gMSl9Owot ICBDT09SRCBkZXN0ID0gezAsIDB9OwotICBDSEFSX0lORk8gZmlsbCA9IHsnICcsIDB9OwotICBT Y3JvbGxDb25zb2xlU2NyZWVuQnVmZmVyIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgJnJlY3QsIE5V TEwsIGRlc3QsICZmaWxsKTsKLSAgZ2V0X3R0eXAgKCktPm5lZWRfcmVkcmF3X3NjcmVlbiA9IGZh bHNlOwotfQotCi12b2lkCi1maGFuZGxlcl9wdHlfc2xhdmU6OmZpeHVwX2FmdGVyX2F0dGFjaCAo Ym9vbCBuYXRpdmVfbWF5YmUsIGludCBmZF9zZXQpCi17Ci0gIGlmIChmZCA8IDApCi0gICAgZmQg PSBmZF9zZXQ7Ci0gIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0gICAgewotICAgICAgaWYg KGZoYW5kbGVyX2NvbnNvbGU6OmdldF9jb25zb2xlX3Byb2Nlc3NfaWQgKGdldF9oZWxwZXJfcHJv Y2Vzc19pZCAoKSwKLQkJCQkJCSAgICB0cnVlKSkKLQlpZiAocGNvbl9hdHRhY2hlZF90byAhPSBn ZXRfbWlub3IgKCkpCi0JICB7Ci0JICAgIHBjb25fYXR0YWNoZWRfdG8gPSBnZXRfbWlub3IgKCk7 Ci0JICAgIGluaXRfY29uc29sZV9oYW5kbGVyICh0cnVlKTsKLQkgIH0KLQotI2lmIDAgLyogVGhp cyBpcyBmb3IgZGVidWcgb25seS4gKi8KLSAgICAgIGlzSHlicmlkID0gdHJ1ZTsKLSAgICAgIGdl dF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9pbiA9IHRydWU7Ci0gICAgICBnZXRfdHR5cCAoKS0+ c3dpdGNoX3RvX3Bjb25fb3V0ID0gdHJ1ZTsKLSNlbmRpZgotCi0gICAgICBpZiAocGNvbl9hdHRh Y2hlZF90byA9PSBnZXRfbWlub3IgKCkgJiYgbmF0aXZlX21heWJlKQotCXsKLQkgIGlmIChmZCA9 PSAwKQotCSAgICB7Ci0JICAgICAgcHVsbF9wY29uX2lucHV0ICgpOwotCSAgICAgIERXT1JEIG1v ZGUgPQotCQlFTkFCTEVfUFJPQ0VTU0VEX0lOUFVUIHwgRU5BQkxFX0xJTkVfSU5QVVQgfCBFTkFC TEVfRUNIT19JTlBVVDsKLQkgICAgICBTZXRDb25zb2xlTW9kZSAoZ2V0X2hhbmRsZSAoKSwgbW9k ZSk7Ci0JICAgICAgaWYgKGdldF90dHlwICgpLT5wY29uX3BpZCA9PSAwIHx8Ci0JCSAgIXBpbmZv IChnZXRfdHR5cCAoKS0+cGNvbl9waWQpKQotCQlnZXRfdHR5cCAoKS0+cGNvbl9waWQgPSBteXNl bGYtPnBpZDsKLQkgICAgICBnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gPSB0cnVlOwot CSAgICB9Ci0JICBlbHNlIGlmIChmZCA9PSAxIHx8IGZkID09IDIpCi0JICAgIHsKLQkgICAgICBE V09SRCBtb2RlID0gRU5BQkxFX1BST0NFU1NFRF9PVVRQVVQgfCBFTkFCTEVfV1JBUF9BVF9FT0xf T1VUUFVUOwotCSAgICAgIFNldENvbnNvbGVNb2RlIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgbW9k ZSk7Ci0JICAgICAgYWNxdWlyZV9vdXRwdXRfbXV0ZXggKElORklOSVRFKTsKLQkgICAgICBpZiAo IWdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQpCi0JCWdldF90dHlwICgpLT53YWl0X3Bj b25fZndkICgpOwotCSAgICAgIGlmIChnZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMCB8fAotCQkg ICFwaW5mbyAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKSkKLQkJZ2V0X3R0eXAgKCktPnBjb25fcGlk ID0gbXlzZWxmLT5waWQ7Ci0JICAgICAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCA9 IHRydWU7Ci0JICAgICAgcmVsZWFzZV9vdXRwdXRfbXV0ZXggKCk7Ci0KLQkgICAgICBpZiAoZ2V0 X3R0eXAgKCktPm5lZWRfcmVkcmF3X3NjcmVlbikKLQkJdHJpZ2dlcl9yZWRyYXdfc2NyZWVuICgp OwotCSAgICB9Ci0JICBpbml0X2NvbnNvbGVfaGFuZGxlciAoZmFsc2UpOwotCX0KLSAgICAgIGVs c2UgaWYgKGZkID09IDAgJiYgbmF0aXZlX21heWJlKQotCS8qIFJlYWQgZnJvbSB1bmF0dGFjaGVk IHBzZXVkbyBjb25zb2xlIGNhdXNlIGZyZWV6ZSwKLQkgICB0aGVyZWZvcmUsIGZhbGxiYWNrIHRv IGxlZ2FjeSBwdHkuICovCi0Jc2V0X2hhbmRsZSAoZ2V0X2hhbmRsZV9jeWcgKCkpOwotICAgIH0K LX0KLQogdm9pZAogZmhhbmRsZXJfcHR5X3NsYXZlOjpmaXh1cF9hZnRlcl9mb3JrIChIQU5ETEUg cGFyZW50KQogewotICBmaXh1cF9hZnRlcl9hdHRhY2ggKGZhbHNlLCAtMSk7CiAgIC8vIGZvcmtf Zml4dXAgKHBhcmVudCwgaW51c2UsICJpbnVzZSIpOwogICAvLyBmaGFuZGxlcl9wdHlfY29tbW9u OjpmaXh1cF9hZnRlcl9mb3JrIChwYXJlbnQpOwogICByZXBvcnRfdHR5X2NvdW50cyAodGhpcywg ImluaGVyaXRlZCIsICIiKTsKQEAgLTI5OTIsNzEgKzE5NzksMjIgQEAgZmhhbmRsZXJfcHR5X3Ns YXZlOjpmaXh1cF9hZnRlcl9leGVjICgpCiAKICAgaWYgKCFjbG9zZV9vbl9leGVjICgpKQogICAg IGZpeHVwX2FmdGVyX2ZvcmsgKE5VTEwpOwkvKiBObyBwYXJlbnQgaGFuZGxlIHJlcXVpcmVkLiAq LwotICBlbHNlIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0gICAgewotICAgICAgaW50IHVz ZWQgPSAwOwotICAgICAgaW50IGF0dGFjaGVkID0gMDsKLSAgICAgIGN5Z2hlYXBfZmRlbnVtIGNm ZCAoZmFsc2UpOwotICAgICAgd2hpbGUgKGNmZC5uZXh0ICgpID49IDApCi0JewotCSAgaWYgKGNm ZC0+Z2V0X21ham9yICgpID09IERFVl9QVFlTX01BSk9SIHx8Ci0JICAgICAgY2ZkLT5nZXRfbWFq b3IgKCkgPT0gREVWX0NPTlNfTUFKT1IpCi0JICAgIHVzZWQgKys7Ci0JICBpZiAoY2ZkLT5nZXRf bWFqb3IgKCkgPT0gREVWX1BUWVNfTUFKT1IgJiYKLQkgICAgICBjZmQtPmdldF9taW5vciAoKSA9 PSBwY29uX2F0dGFjaGVkX3RvKQotCSAgICBhdHRhY2hlZCArKzsKLQl9Ci0KLSAgICAgIC8qIENh bGwgRnJlZUNvbnNvbGUoKSBpZiBubyB0dHkgaXMgb3BlbmVkIGFuZCB0aGUgcHJvY2VzcwotCSBp cyBhdHRhY2hlZCB0byBjb25zb2xlIGNvcnJlc3BvbmRpbmcgdG8gdHR5LiBUaGlzIGlzCi0JIG5l ZWRlZCB0byBtYWtlIEdOVSBzY3JlZW4gYW5kIHRtdXggd29yayBpbiBXaW5kb3dzIDEwCi0JIDE5 MDMuICovCi0gICAgICBpZiAoYXR0YWNoZWQgPT0gMSAmJiBnZXRfbWlub3IgKCkgPT0gcGNvbl9h dHRhY2hlZF90bykKLQlwY29uX2F0dGFjaGVkX3RvID0gLTE7Ci0gICAgICBpZiAodXNlZCA9PSAx IC8qIEFib3V0IHRvIGNsb3NlIHRoaXMgdHR5ICovKQotCXsKLQkgIGluaXRfY29uc29sZV9oYW5k bGVyIChmYWxzZSk7Ci0JICBmcmVlX2F0dGFjaGVkX2NvbnNvbGUgKCk7Ci0JfQotICAgIH0KIAog ICAvKiBTZXQgbG9jYWxlICovCiAgIGlmIChnZXRfdHR5cCAoKS0+dGVybV9jb2RlX3BhZ2UgPT0g MCkKICAgICBzZXR1cF9sb2NhbGUgKCk7CiAKICAgLyogSG9vayBDb25zb2xlIEFQSSAqLwotICBp ZiAoZ2V0X3BzZXVkb19jb25zb2xlICgpKQotICAgIHsKICNkZWZpbmUgRE9fSE9PSyhtb2R1bGUs IG5hbWUpIFwKLSAgICAgIGlmICghbmFtZSMjX09yaWcpIFwKLQl7IFwKLQkgIHZvaWQgKmFwaSA9 IGhvb2tfYXBpIChtb2R1bGUsICNuYW1lLCAodm9pZCAqKSBuYW1lIyNfSG9va2VkKTsgXAotCSAg bmFtZSMjX09yaWcgPSAoX190eXBlb2ZfXyAobmFtZSkgKikgYXBpOyBcCi0JICAvKmlmIChhcGkp IHN5c3RlbV9wcmludGYgKCNuYW1lICIgaG9va2VkLiIpOyovIFwKLQl9Ci0gICAgICBET19IT09L IChOVUxMLCBXcml0ZUZpbGUpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgV3JpdGVDb25zb2xlQSk7 Ci0gICAgICBET19IT09LIChOVUxMLCBXcml0ZUNvbnNvbGVXKTsKLSAgICAgIERPX0hPT0sgKE5V TEwsIFJlYWRGaWxlKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFJlYWRDb25zb2xlQSk7Ci0gICAg ICBET19IT09LIChOVUxMLCBSZWFkQ29uc29sZVcpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgV3Jp dGVDb25zb2xlT3V0cHV0QSk7Ci0gICAgICBET19IT09LIChOVUxMLCBXcml0ZUNvbnNvbGVPdXRw dXRXKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFdyaXRlQ29uc29sZU91dHB1dENoYXJhY3RlckEp OwotICAgICAgRE9fSE9PSyAoTlVMTCwgV3JpdGVDb25zb2xlT3V0cHV0Q2hhcmFjdGVyVyk7Ci0g ICAgICBET19IT09LIChOVUxMLCBXcml0ZUNvbnNvbGVPdXRwdXRBdHRyaWJ1dGUpOwotICAgICAg RE9fSE9PSyAoTlVMTCwgU2V0Q29uc29sZUN1cnNvclBvc2l0aW9uKTsKLSAgICAgIERPX0hPT0sg KE5VTEwsIFNldENvbnNvbGVUZXh0QXR0cmlidXRlKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFdy aXRlQ29uc29sZUlucHV0QSk7Ci0gICAgICBET19IT09LIChOVUxMLCBXcml0ZUNvbnNvbGVJbnB1 dFcpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgUmVhZENvbnNvbGVJbnB1dEEpOwotICAgICAgRE9f SE9PSyAoTlVMTCwgUmVhZENvbnNvbGVJbnB1dFcpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgUGVl a0NvbnNvbGVJbnB1dEEpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgUGVla0NvbnNvbGVJbnB1dFcp OwotICAgICAgLyogQ3JlYXRlUHJvY2VzcygpIGlzIGhvb2tlZCBmb3IgR0RCIGV0Yy4gKi8KLSAg ICAgIERPX0hPT0sgKE5VTEwsIENyZWF0ZVByb2Nlc3NBKTsKLSAgICAgIERPX0hPT0sgKE5VTEws IENyZWF0ZVByb2Nlc3NXKTsKKyAgaWYgKCFuYW1lIyNfT3JpZykgXAorICAgIHsgXAorICAgICAg dm9pZCAqYXBpID0gaG9va19hcGkgKG1vZHVsZSwgI25hbWUsICh2b2lkICopIG5hbWUjI19Ib29r ZWQpOyBcCisgICAgICBuYW1lIyNfT3JpZyA9IChfX3R5cGVvZl9fIChuYW1lKSAqKSBhcGk7IFwK KyAgICAgIC8qaWYgKGFwaSkgc3lzdGVtX3ByaW50ZiAoI25hbWUgIiBob29rZWQuIik7Ki8gXAog ICAgIH0KKyAgLyogQ3JlYXRlUHJvY2VzcygpIGlzIGhvb2tlZCBmb3IgR0RCIGV0Yy4gKi8KKyAg RE9fSE9PSyAoTlVMTCwgQ3JlYXRlUHJvY2Vzc0EpOworICBET19IT09LIChOVUxMLCBDcmVhdGVQ cm9jZXNzVyk7CiB9CiAKIC8qIFRoaXMgdGhyZWFkIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIG1hc3Rl ciBjb250cm9sIHBpcGUuICBJdCB3YWl0cyBmb3IgYQpAQCAtMzIwNCwyNyArMjE0Miw2IEBAIHJl cGx5OgogICByZXR1cm4gMDsKIH0KIAotdm9pZAotZmhhbmRsZXJfcHR5X21hc3Rlcjo6dHJhbnNm ZXJfaW5wdXRfdG9fcGNvbiAodm9pZCkKLXsKLSAgV2FpdEZvclNpbmdsZU9iamVjdCAoaW5wdXRf bXV0ZXgsIElORklOSVRFKTsKLSAgRFdPUkQgbjsKLSAgc2l6ZV90IHRyYW5zZmVyZWQgPSAwOwot ICB3aGlsZSAoOjpieXRlc19hdmFpbGFibGUgKG4sIGZyb21fbWFzdGVyX2N5ZykgJiYgbikKLSAg ICB7Ci0gICAgICBjaGFyIGJ1ZlsxMDI0XTsKLSAgICAgIFJlYWRGaWxlIChmcm9tX21hc3Rlcl9j eWcsIGJ1Ziwgc2l6ZW9mIChidWYpLCAmbiwgMCk7Ci0gICAgICBjaGFyICpwID0gYnVmOwotICAg ICAgd2hpbGUgKChwID0gKGNoYXIgKikgbWVtY2hyIChwLCAnXG4nLCBuIC0gKHAgLSBidWYpKSkp Ci0JKnAgPSAnXHInOwotICAgICAgaWYgKFdyaXRlRmlsZSAodG9fc2xhdmUsIGJ1ZiwgbiwgJm4s IDApKQotCXRyYW5zZmVyZWQgKz0gbjsKLSAgICB9Ci0gIGlmICh0cmFuc2ZlcmVkKQotICAgIGdl dF90dHlwICgpLT5wY29uX2luX2VtcHR5ID0gZmFsc2U7Ci0gIFJlbGVhc2VNdXRleCAoaW5wdXRf bXV0ZXgpOwotfQotCiBzdGF0aWMgRFdPUkQgV0lOQVBJCiBwdHlfbWFzdGVyX3RocmVhZCAoVk9J RCAqYXJnKQogewpAQCAtMzI0MCwyMyArMjE1Nyw3IEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6OnB0 eV9tYXN0ZXJfZndkX3RocmVhZCAoKQogICB0ZXJtaW9zX3ByaW50ZiAoIlN0YXJ0ZWQuIik7CiAg IGZvciAoOzspCiAgICAgewotICAgICAgaWYgKGdldF9wc2V1ZG9fY29uc29sZSAoKSkKLQl7Ci0J ICBnZXRfdHR5cCAoKS0+cGNvbl9sYXN0X3RpbWUgPSBHZXRUaWNrQ291bnQgKCk7Ci0JICB3aGls ZSAoOjpieXRlc19hdmFpbGFibGUgKHJsZW4sIGZyb21fc2xhdmUpICYmIHJsZW4gPT0gMCkKLQkg ICAgewotCSAgICAgIC8qIEZvcmNpYmx5IHRyYW5zZmVyIGlucHV0IGlmIGl0IGlzIHJlcXVlc3Rl ZCBieSBzbGF2ZS4KLQkJIFRoaXMgaGFwcGVucyB3aGVuIGlucHV0IGRhdGEgc2hvdWxkIGJlIHRy YW5zZmVyZWQKLQkJIGZyb20gdGhlIGlucHV0IHBpcGUgZm9yIGN5Z3dpbiBhcHBzIHRvIHRoZSBp bnB1dCBwaXBlCi0JCSBmb3IgbmF0aXZlIGFwcHMuICovCi0JICAgICAgaWYgKGdldF90dHlwICgp LT5yZXFfdHJhbnNmZXJfaW5wdXRfdG9fcGNvbikKLQkJewotCQkgIHRyYW5zZmVyX2lucHV0X3Rv X3Bjb24gKCk7Ci0JCSAgZ2V0X3R0eXAgKCktPnJlcV90cmFuc2Zlcl9pbnB1dF90b19wY29uID0g ZmFsc2U7Ci0JCX0KLQkgICAgICBTbGVlcCAoMSk7Ci0JICAgIH0KLQl9CisgICAgICBnZXRfdHR5 cCAoKS0+cGNvbl9sYXN0X3RpbWUgPSBHZXRUaWNrQ291bnQgKCk7CiAgICAgICBpZiAoIVJlYWRG aWxlIChmcm9tX3NsYXZlLCBvdXRidWYsIHNpemVvZiBvdXRidWYsICZybGVuLCBOVUxMKSkKIAl7 CiAJICB0ZXJtaW9zX3ByaW50ZiAoIlJlYWRGaWxlIGZvciBmb3J3YXJkaW5nIGZhaWxlZCwgJUUi KTsKQEAgLTMyNjQsMTQgKzIxNjUsOSBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpwdHlfbWFzdGVy X2Z3ZF90aHJlYWQgKCkKIAl9CiAgICAgICBzc2l6ZV90IHdsZW4gPSBybGVuOwogICAgICAgY2hh ciAqcHRyID0gb3V0YnVmOwotICAgICAgaWYgKGdldF9wc2V1ZG9fY29uc29sZSAoKSkKKyAgICAg IGlmIChnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSkKIAl7Ci0JICAvKiBBdm9pZCBkdXBs aWNhdGluZyBzbGF2ZSBvdXRwdXQgd2hpY2ggaXMgYWxyZWFkeSBzZW50IHRvCi0JICAgICB0b19t YXN0ZXJfY3lnICovCi0JICBpZiAoIWdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQpCi0J ICAgIGNvbnRpbnVlOwotCi0JICAvKiBBdm9pZCBzZXR0aW5nIHdpbmRvdyB0aXRsZSB0byAiY3ln d2luLWNvbnNvbGUtaGVscGVyLmV4ZSIgKi8KKwkgIC8qIFJlbW92ZSBDU0kgPiBQbSBtICovCiAJ ICBpbnQgc3RhdGUgPSAwOwogCSAgaW50IHN0YXJ0X2F0ID0gMDsKIAkgIGZvciAoRFdPUkQgaT0w OyBpPHJsZW47IGkrKykKQEAgLTMyODEsNDMgKzIxNzcsOCBAQCBmaGFuZGxlcl9wdHlfbWFzdGVy OjpwdHlfbWFzdGVyX2Z3ZF90aHJlYWQgKCkKIAkJc3RhdGUgPSAxOwogCQljb250aW51ZTsKIAkg ICAgICB9Ci0JICAgIGVsc2UgaWYgKChzdGF0ZSA9PSAxICYmIG91dGJ1ZltpXSA9PSAnXScpIHx8 Ci0JCSAgICAgKHN0YXRlID09IDIgJiYgb3V0YnVmW2ldID09ICcwJykgfHwKLQkJICAgICAoc3Rh dGUgPT0gMyAmJiBvdXRidWZbaV0gPT0gJzsnKSkKLQkgICAgICB7Ci0JCXN0YXRlICsrOwotCQlj b250aW51ZTsKLQkgICAgICB9Ci0JICAgIGVsc2UgaWYgKHN0YXRlID09IDQgJiYgb3V0YnVmW2ld ID09ICdcYScpCi0JICAgICAgewotCQljb25zdCBjaGFyICpoZWxwZXJfc3RyID0gIlxcYmluXFxj eWd3aW4tY29uc29sZS1oZWxwZXIuZXhlIjsKLQkJaWYgKG1lbW1lbSAoJm91dGJ1ZltzdGFydF9h dF0sIGkgKyAxIC0gc3RhcnRfYXQsCi0JCQkgICAgaGVscGVyX3N0ciwgc3RybGVuIChoZWxwZXJf c3RyKSkpCi0JCSAgewotCQkgICAgbWVtbW92ZSAoJm91dGJ1ZltzdGFydF9hdF0sICZvdXRidWZb aSsxXSwgcmxlbi1pLTEpOwotCQkgICAgcmxlbiA9IHdsZW4gPSBzdGFydF9hdCArIHJsZW4gLSBp IC0gMTsKLQkJICB9Ci0JCXN0YXRlID0gMDsKLQkJY29udGludWU7Ci0JICAgICAgfQotCSAgICBl bHNlIGlmIChvdXRidWZbaV0gPT0gJ1xhJykKLQkgICAgICB7Ci0JCXN0YXRlID0gMDsKLQkJY29u dGludWU7Ci0JICAgICAgfQotCi0JICAvKiBSZW1vdmUgQ1NJID4gUG0gbSAqLwotCSAgc3RhdGUg PSAwOwotCSAgc3RhcnRfYXQgPSAwOwotCSAgZm9yIChEV09SRCBpPTA7IGk8cmxlbjsgaSsrKQot CSAgICBpZiAob3V0YnVmW2ldID09ICdcMDMzJykKLQkgICAgICB7Ci0JCXN0YXJ0X2F0ID0gaTsK LQkJc3RhdGUgPSAxOwotCQljb250aW51ZTsKLQkgICAgICB9Ci0JICAgIGVsc2UgaWYgKChzdGF0 ZSA9PSAxICYmIG91dGJ1ZltpXSA9PSAnWycpIHx8Ci0JCSAgICAgKHN0YXRlID09IDIgJiYgb3V0 YnVmW2ldID09ICc+JykpCisJICAgIGVsc2UgaWYgKChzdGF0ZSA9PSAxICYmIG91dGJ1ZltpXSA9 PSAnWycpCisJCSAgICAgfHwgKHN0YXRlID09IDIgJiYgb3V0YnVmW2ldID09ICc+JykpCiAJICAg ICAgewogCQlzdGF0ZSArKzsKIAkJY29udGludWU7CkBAIC0zMzg2LDIwMSArMjI0Nyw2IEBAIHB0 eV9tYXN0ZXJfZndkX3RocmVhZCAoVk9JRCAqYXJnKQogICByZXR1cm4gKChmaGFuZGxlcl9wdHlf bWFzdGVyICopIGFyZyktPnB0eV9tYXN0ZXJfZndkX3RocmVhZCAoKTsKIH0KIAotLyogSWYgbWFz dGVyIHByb2Nlc3MgaXMgcnVubmluZyBhcyBzZXJ2aWNlLCBhdHRhY2hpbmcgdG8KLSAgIHBzZXVk byBjb25zb2xlIHNob3VsZCBiZSBkb25lIGluIGZvcmsuIElmIGF0dGFjaGluZwotICAgaXMgZG9u ZSBpbiBzcGF3biBmb3IgaW5ldGQgb3Igc3NoZCwgaXQgZmFpbHMgYmVjYXVzZQotICAgdGhlIGhl bHBlciBwcm9jZXNzIGlzIHJ1bm5pbmcgYXMgcHJpdmlsZWdlZCB1c2VyIHdoaWxlCi0gICBzbGF2 ZSBwcm9jZXNzIGlzIG5vdC4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRldGVybWluZQotICAg aWYgdGhlIHByb2Nlc3MgaXMgcnVubmluZyBhcyBhIHNydmljZSBvciBub3QuICovCi1pbmxpbmUg c3RhdGljIGJvb2wKLWlzX3J1bm5pbmdfYXNfc2VydmljZSAodm9pZCkKLXsKLSAgcmV0dXJuIGNo ZWNrX3Rva2VuX21lbWJlcnNoaXAgKHdlbGxfa25vd25fc2VydmljZV9zaWQpCi0gICAgfHwgY3ln aGVhcC0+dXNlci5zYXZlZF9zaWQgKCkgPT0gd2VsbF9rbm93bl9zeXN0ZW1fc2lkOwotfQotCi1i b29sCi1maGFuZGxlcl9wdHlfbWFzdGVyOjpzZXR1cF9wc2V1ZG9jb25zb2xlICgpCi17Ci0gIGlm IChkaXNhYmxlX3Bjb24pCi0gICAgcmV0dXJuIGZhbHNlOwotICAvKiBJZiB0aGUgbGVnYWN5IGNv bnNvbGUgbW9kZSBpcyBlbmFibGVkLCBwc2V1ZG8gY29uc29sZSBzZWVtcwotICAgICBub3QgdG8g d29yayBhcyBleHBlY3RlZC4gVG8gZGV0ZXJtaW5lIGNvbnNvbGUgbW9kZSwgcmVnaXN0cnkKLSAg ICAga2V5IEZvcmNlVjIgaW4gSEtFWV9DVVJSRU5UX1VTRVJcQ29uc29sZSBpcyBjaGVja2VkLiAq LwotICByZWdfa2V5IHJlZyAoSEtFWV9DVVJSRU5UX1VTRVIsIEtFWV9SRUFELCBMIkNvbnNvbGUi LCBOVUxMKTsKLSAgaWYgKHJlZy5lcnJvciAoKSkKLSAgICByZXR1cm4gZmFsc2U7Ci0gIGlmIChy ZWcuZ2V0X2R3b3JkIChMIkZvcmNlVjIiLCAxKSA9PSAwKQotICAgIHsKLSAgICAgIHRlcm1pb3Nf cHJpbnRmICgiUHNldWRvIGNvbnNvbGUgaXMgZGlzYWJsZWQgIgotCQkgICAgICAiYmVjYXVzZSB0 aGUgbGVnYWN5IGNvbnNvbGUgbW9kZSBpcyBlbmFibGVkLiIpOwotICAgICAgcmV0dXJuIGZhbHNl OwotICAgIH0KLQotICAvKiBQc2V1ZG8gY29uc29sZSBzdXBwcm90IGlzIHJlYWxpemVkIHVzaW5n IGEgdHJpY2t5IHRlY2huaWMuCi0gICAgIFBUWSBuZWVkIHRoZSBwc2V1ZG8gY29uc29sZSBoYW5k bGVzLCBob3dldmVyLCB0aGV5IGNhbm5vdAotICAgICBiZSByZXRyaWV2ZWQgYnkgbm9ybWFsIHBy b2NlZHVyZS4gVGhlcmVmb3JlLCBydW4gYSBoZWxwZXIKLSAgICAgcHJvY2VzcyBpbiBhIHBzZXVk byBjb25zb2xlIGFuZCBnZXQgdGhlbSBmcm9tIHRoZSBoZWxwZXIuCi0gICAgIFNsYXZlIHByb2Nl c3Mgd2lsbCBhdHRhY2ggdG8gdGhlIHBzZXVkbyBjb25zb2xlIGluIHRoZQotICAgICBoZWxwZXIg cHJvY2VzcyB1c2luZyBBdHRhY2hDb25zb2xlKCkuICovCi0gIENPT1JEIHNpemUgPSB7Ci0gICAg KFNIT1JUKSBnZXRfdHR5cCAoKS0+d2luc2l6ZS53c19jb2wsCi0gICAgKFNIT1JUKSBnZXRfdHR5 cCAoKS0+d2luc2l6ZS53c19yb3cKLSAgfTsKLSAgQ3JlYXRlUGlwZSAoJmZyb21fbWFzdGVyLCAm dG9fc2xhdmUsICZzZWNfbm9uZSwgMCk7Ci0gIFNldExhc3RFcnJvciAoRVJST1JfU1VDQ0VTUyk7 Ci0gIEhSRVNVTFQgcmVzID0gQ3JlYXRlUHNldWRvQ29uc29sZSAoc2l6ZSwgZnJvbV9tYXN0ZXIs IHRvX21hc3RlciwKLQkJCQkgICAgIDAsICZnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSk7 Ci0gIGlmIChyZXMgIT0gU19PSyB8fCBHZXRMYXN0RXJyb3IgKCkgPT0gRVJST1JfUFJPQ19OT1Rf Rk9VTkQpCi0gICAgewotICAgICAgaWYgKHJlcyAhPSBTX09LKQotCXN5c3RlbV9wcmludGYgKCJD cmVhdGVQc2V1ZG9Db25zb2xlKCkgZmFpbGVkLiAlMDh4XG4iLAotCQkgICAgICAgR2V0TGFzdEVy cm9yICgpKTsKLSAgICAgIGdvdG8gZmFsbGJhY2s7Ci0gICAgfQotCi0gIC8qIElmIG1hc3RlciBw cm9jZXNzIGlzIHJ1bm5pbmcgYXMgc2VydmljZSwgYXR0YWNoaW5nIHRvCi0gICAgIHBzZXVkbyBj b25zb2xlIHNob3VsZCBiZSBkb25lIGluIGZvcmsuIElmIGF0dGFjaGluZwotICAgICBpcyBkb25l IGluIHNwYXduIGZvciBpbmV0ZCBvciBzc2hkLCBpdCBmYWlscyBiZWNhdXNlCi0gICAgIHRoZSBo ZWxwZXIgcHJvY2VzcyBpcyBydW5uaW5nIGFzIHByaXZpbGVnZWQgdXNlciB3aGlsZQotICAgICBz bGF2ZSBwcm9jZXNzIGlzIG5vdC4gKi8KLSAgaWYgKGlzX3J1bm5pbmdfYXNfc2VydmljZSAoKSkK LSAgICBnZXRfdHR5cCAoKS0+YXR0YWNoX3Bjb25faW5fZm9yayA9IHRydWU7Ci0KLSAgU1RBUlRV UElORk9FWFcgc2lfaGVscGVyOwotICBIQU5ETEUgaGVsbG8sIGdvb2RieWU7Ci0gIEhBTkRMRSBo ciwgaHc7Ci0gIFBST0NFU1NfSU5GT1JNQVRJT04gcGlfaGVscGVyOwotICBIQU5ETEUgaHBDb25J biwgaHBDb25PdXQ7Ci0gIHsKLSAgICBTSVpFX1QgYnl0ZXNSZXF1aXJlZDsKLSAgICBJbml0aWFs aXplUHJvY1RocmVhZEF0dHJpYnV0ZUxpc3QgKE5VTEwsIDIsIDAsICZieXRlc1JlcXVpcmVkKTsK LSAgICBaZXJvTWVtb3J5ICgmc2lfaGVscGVyLCBzaXplb2YgKHNpX2hlbHBlcikpOwotICAgIHNp X2hlbHBlci5TdGFydHVwSW5mby5jYiA9IHNpemVvZiAoU1RBUlRVUElORk9FWFcpOwotICAgIHNp X2hlbHBlci5scEF0dHJpYnV0ZUxpc3QgPSAoUFBST0NfVEhSRUFEX0FUVFJJQlVURV9MSVNUKQot ICAgICAgSGVhcEFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgYnl0ZXNSZXF1aXJlZCk7Ci0g ICAgaWYgKHNpX2hlbHBlci5scEF0dHJpYnV0ZUxpc3QgPT0gTlVMTCkKLSAgICAgIGdvdG8gY2xl YW51cF9wc2V1ZG9fY29uc29sZTsKLSAgICBpZiAoIUluaXRpYWxpemVQcm9jVGhyZWFkQXR0cmli dXRlTGlzdCAoc2lfaGVscGVyLmxwQXR0cmlidXRlTGlzdCwKLQkJCQkJICAgIDIsIDAsICZieXRl c1JlcXVpcmVkKSkKLSAgICAgIGdvdG8gY2xlYW51cF9oZWFwOwotICAgIGlmICghVXBkYXRlUHJv Y1RocmVhZEF0dHJpYnV0ZSAoc2lfaGVscGVyLmxwQXR0cmlidXRlTGlzdCwKLQkJCQkgICAgMCwK LQkJCQkgICAgUFJPQ19USFJFQURfQVRUUklCVVRFX1BTRVVET0NPTlNPTEUsCi0JCQkJICAgIGdl dF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlLAotCQkJCSAgICBzaXplb2YgKGdldF90dHlwICgp LT5oX3BzZXVkb19jb25zb2xlKSwKLQkJCQkgICAgTlVMTCwgTlVMTCkpCi0gICAgICBnb3RvIGNs ZWFudXBfaGVhcDsKLSAgICAvKiBDcmVhdGUgZXZlbnRzIGZvciBzdGFydC9zdG9wIGhlbHBlciBw cm9jZXNzLiAqLwotICAgIGhlbGxvID0gQ3JlYXRlRXZlbnQgKCZzZWNfbm9uZSwgdHJ1ZSwgZmFs c2UsIE5VTEwpOwotICAgIGdvb2RieWUgPSBDcmVhdGVFdmVudCAoJnNlY19ub25lLCB0cnVlLCBm YWxzZSwgTlVMTCk7Ci0gICAgLyogQ3JlYXRlIGEgcGlwZSBmb3IgcmVjZWl2aW5nIHBzZXVkbyBj b25zb2xlIGhhbmRsZXMgKi8KLSAgICBDcmVhdGVQaXBlICgmaHIsICZodywgJnNlY19ub25lLCAw KTsKLSAgICAvKiBJbmhlcml0IG9ubHkgaGFuZGxlcyB3aGljaCBhcmUgbmVlZGVkIGJ5IGhlbHBl ci4gKi8KLSAgICBIQU5ETEUgaGFuZGxlc190b19pbmhlcml0W10gPSB7aGVsbG8sIGdvb2RieWUs IGh3fTsKLSAgICBpZiAoIVVwZGF0ZVByb2NUaHJlYWRBdHRyaWJ1dGUgKHNpX2hlbHBlci5scEF0 dHJpYnV0ZUxpc3QsCi0JCQkJICAgIDAsCi0JCQkJICAgIFBST0NfVEhSRUFEX0FUVFJJQlVURV9I QU5ETEVfTElTVCwKLQkJCQkgICAgaGFuZGxlc190b19pbmhlcml0LAotCQkJCSAgICBzaXplb2Yg KGhhbmRsZXNfdG9faW5oZXJpdCksCi0JCQkJICAgIE5VTEwsIE5VTEwpKQotICAgICAgZ290byBj bGVhbnVwX2V2ZW50X2FuZF9waXBlczsKLSAgICAvKiBDcmVhdGUgaGVscGVyIHByb2Nlc3MgKi8K LSAgICBXQ0hBUiBjbWRbTUFYX1BBVEhdOwotICAgIHBhdGhfY29udiBoZWxwZXIgKCIvYmluL2N5 Z3dpbi1jb25zb2xlLWhlbHBlci5leGUiKTsKLSAgICBzaXplX3QgbGVuID0gaGVscGVyLmdldF93 aWRlX3dpbjMyX3BhdGhfbGVuICgpOwotICAgIGhlbHBlci5nZXRfd2lkZV93aW4zMl9wYXRoIChj bWQpOwotICAgIF9fc21hbGxfc3dwcmludGYgKGNtZCArIGxlbiwgTCIgJXAgJXAgJXAiLCBoZWxs bywgZ29vZGJ5ZSwgaHcpOwotICAgIHNpX2hlbHBlci5TdGFydHVwSW5mby5kd0ZsYWdzID0gU1RB UlRGX1VTRVNUREhBTkRMRVM7Ci0gICAgc2lfaGVscGVyLlN0YXJ0dXBJbmZvLmhTdGRJbnB1dCA9 IE5VTEw7Ci0gICAgc2lfaGVscGVyLlN0YXJ0dXBJbmZvLmhTdGRPdXRwdXQgPSBOVUxMOwotICAg IHNpX2hlbHBlci5TdGFydHVwSW5mby5oU3RkRXJyb3IgPSBOVUxMOwotICAgIGlmICghQ3JlYXRl UHJvY2Vzc1cgKE5VTEwsIGNtZCwgJnNlY19ub25lLCAmc2VjX25vbmUsCi0JCQkgVFJVRSwgRVhU RU5ERURfU1RBUlRVUElORk9fUFJFU0VOVCwKLQkJCSBOVUxMLCBOVUxMLCAmc2lfaGVscGVyLlN0 YXJ0dXBJbmZvLCAmcGlfaGVscGVyKSkKLSAgICAgIGdvdG8gY2xlYW51cF9ldmVudF9hbmRfcGlw ZXM7Ci0gICAgZm9yICg7OykKLSAgICAgIHsKLSAgICAgICAgRFdPUkQgd2FpdF9yZXN1bHQgPSBX YWl0Rm9yU2luZ2xlT2JqZWN0IChoZWxsbywgNTAwKTsKLQlpZiAod2FpdF9yZXN1bHQgPT0gV0FJ VF9PQkpFQ1RfMCkKLQkgIGJyZWFrOwotCWlmICh3YWl0X3Jlc3VsdCAhPSBXQUlUX1RJTUVPVVQp Ci0JICBnb3RvIGNsZWFudXBfaGVscGVyX3Byb2Nlc3M7Ci0JRFdPUkQgZXhpdF9jb2RlOwotCWlm ICghR2V0RXhpdENvZGVQcm9jZXNzKHBpX2hlbHBlci5oUHJvY2VzcywgJmV4aXRfY29kZSkpCi0J ICBnb3RvIGNsZWFudXBfaGVscGVyX3Byb2Nlc3M7Ci0JaWYgKGV4aXRfY29kZSA9PSBTVElMTF9B Q1RJVkUpCi0JICBjb250aW51ZTsKLQlpZiAoZXhpdF9jb2RlICE9IDAgfHwKLQkgICAgV2FpdEZv clNpbmdsZU9iamVjdCAoaGVsbG8sIDUwMCkgIT0gV0FJVF9PQkpFQ1RfMCkKLQkgIGdvdG8gY2xl YW51cF9oZWxwZXJfcHJvY2VzczsKLQlicmVhazsKLSAgICAgIH0KLSAgICBDbG9zZUhhbmRsZSAo aGVsbG8pOwotICAgIENsb3NlSGFuZGxlIChwaV9oZWxwZXIuaFRocmVhZCk7Ci0gICAgLyogUmV0 cmlldmUgcHNldWRvIGNvbnNvbGUgaGFuZGxlcyAqLwotICAgIERXT1JEIHJMZW47Ci0gICAgY2hh ciBidWZbNjRdOwotICAgIGlmICghUmVhZEZpbGUgKGhyLCBidWYsIHNpemVvZiAoYnVmKSwgJnJM ZW4sIE5VTEwpKQotICAgICAgZ290byBjbGVhbnVwX2hlbHBlcl9wcm9jZXNzOwotICAgIGJ1Zlty TGVuXSA9ICdcMCc7Ci0gICAgc3NjYW5mIChidWYsICJTdGRIYW5kbGVzPSVwLCVwIiwgJmhwQ29u SW4sICZocENvbk91dCk7Ci0gICAgaWYgKCFEdXBsaWNhdGVIYW5kbGUgKHBpX2hlbHBlci5oUHJv Y2VzcywgaHBDb25JbiwKLQkJCSAgR2V0Q3VycmVudFByb2Nlc3MgKCksICZocENvbkluLCAwLAot CQkJICBUUlVFLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpKQotICAgICAgZ290byBjbGVhbnVwX2hl bHBlcl9wcm9jZXNzOwotICAgIGlmICghRHVwbGljYXRlSGFuZGxlIChwaV9oZWxwZXIuaFByb2Nl c3MsIGhwQ29uT3V0LAotCQkJICBHZXRDdXJyZW50UHJvY2VzcyAoKSwgJmhwQ29uT3V0LCAwLAot CQkJICBUUlVFLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpKQotICAgICAgZ290byBjbGVhbnVwX3Bj b25faW47Ci0gICAgQ2xvc2VIYW5kbGUgKGhyKTsKLSAgICBDbG9zZUhhbmRsZSAoaHcpOwotICAg IC8qIENsZWFuIHVwICovCi0gICAgRGVsZXRlUHJvY1RocmVhZEF0dHJpYnV0ZUxpc3QgKHNpX2hl bHBlci5scEF0dHJpYnV0ZUxpc3QpOwotICAgIEhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwg MCwgc2lfaGVscGVyLmxwQXR0cmlidXRlTGlzdCk7Ci0gIH0KLSAgLyogU2V0dGluZyBpbmZvcm1h dGlvbiBvZiBzdHVmZnMgcmVnYXJkaW5nIHBzZXVkbyBjb25zb2xlICovCi0gIGdldF90dHlwICgp LT5oX2hlbHBlcl9nb29kYnllID0gZ29vZGJ5ZTsKLSAgZ2V0X3R0eXAgKCktPmhfaGVscGVyX3By b2Nlc3MgPSBwaV9oZWxwZXIuaFByb2Nlc3M7Ci0gIGdldF90dHlwICgpLT5oZWxwZXJfcHJvY2Vz c19pZCA9IHBpX2hlbHBlci5kd1Byb2Nlc3NJZDsKLSAgQ2xvc2VIYW5kbGUgKGZyb21fbWFzdGVy KTsKLSAgQ2xvc2VIYW5kbGUgKHRvX21hc3Rlcik7Ci0gIGZyb21fbWFzdGVyID0gaHBDb25JbjsK LSAgdG9fbWFzdGVyID0gaHBDb25PdXQ7Ci0gIFJlc2l6ZVBzZXVkb0NvbnNvbGUgKGdldF90dHlw ICgpLT5oX3BzZXVkb19jb25zb2xlLCBzaXplKTsKLSAgcmV0dXJuIHRydWU7Ci0KLWNsZWFudXBf cGNvbl9pbjoKLSAgQ2xvc2VIYW5kbGUgKGhwQ29uSW4pOwotY2xlYW51cF9oZWxwZXJfcHJvY2Vz czoKLSAgU2V0RXZlbnQgKGdvb2RieWUpOwotICBXYWl0Rm9yU2luZ2xlT2JqZWN0IChwaV9oZWxw ZXIuaFByb2Nlc3MsIElORklOSVRFKTsKLSAgQ2xvc2VIYW5kbGUgKHBpX2hlbHBlci5oUHJvY2Vz cyk7Ci0gIGdvdG8gc2tpcF9jbG9zZV9oZWxsbzsKLWNsZWFudXBfZXZlbnRfYW5kX3BpcGVzOgot ICBDbG9zZUhhbmRsZSAoaGVsbG8pOwotc2tpcF9jbG9zZV9oZWxsbzoKLSAgQ2xvc2VIYW5kbGUg KGdvb2RieWUpOwotICBDbG9zZUhhbmRsZSAoaHIpOwotICBDbG9zZUhhbmRsZSAoaHcpOwotY2xl YW51cF9oZWFwOgotICBIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIHNpX2hlbHBlci5s cEF0dHJpYnV0ZUxpc3QpOwotY2xlYW51cF9wc2V1ZG9fY29uc29sZToKLSAgewotICAgIEhQQ09O X0lOVEVSTkFMICpocCA9IChIUENPTl9JTlRFUk5BTCAqKSBnZXRfdHR5cCAoKS0+aF9wc2V1ZG9f Y29uc29sZTsKLSAgICBIQU5ETEUgdG1wID0gaHAtPmhDb25Ib3N0UHJvY2VzczsKLSAgICBDbG9z ZVBzZXVkb0NvbnNvbGUgKGdldF9wc2V1ZG9fY29uc29sZSAoKSk7Ci0gICAgQ2xvc2VIYW5kbGUg KHRtcCk7Ci0gIH0KLWZhbGxiYWNrOgotICBDbG9zZUhhbmRsZSAoZnJvbV9tYXN0ZXIpOwotICBD bG9zZUhhbmRsZSAodG9fc2xhdmUpOwotICBmcm9tX21hc3RlciA9IGZyb21fbWFzdGVyX2N5ZzsK LSAgdG9fc2xhdmUgPSBOVUxMOwotICBnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSA9IE5V TEw7Ci0gIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbAogZmhhbmRsZXJfcHR5X21hc3Rlcjo6c2V0 dXAgKCkKIHsKQEAgLTM1OTMsMTEgKzIyNTksNiBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpzZXR1 cCAoKQogICBpZiAodW5pdCA8IDApCiAgICAgcmV0dXJuIGZhbHNlOwogCi0gIC8qIGZyb21fbWFz dGVyIHNob3VsZCBiZSB1c2VkIGZvciBwc2V1ZG8gY29uc29sZS4KLSAgICAgSnVzdCBjb3B5IGZy b21fbWFzdGVyX2N5ZyBoZXJlIGZvciB0aGUgY2FzZSB0aGF0Ci0gICAgIHBzZXVkbyBjb25zb2xl IGlzIG5vdCBhdmFpbGFibGUuICovCi0gIGZyb21fbWFzdGVyID0gZnJvbV9tYXN0ZXJfY3lnOwot CiAgIFByb3RlY3RIYW5kbGUxIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgdG9fcHR5KTsKIAogICB0 dHkmIHQgPSAqY3lnd2luX3NoYXJlZC0+dHR5W3VuaXRdOwpAQCAtMzY5NiwxNSArMjM1NywyMSBA QCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpzZXR1cCAoKQogICAgICAgZ290byBlcnI7CiAgICAgfQog Ci0gIHQud2luc2l6ZS53c19jb2wgPSA4MDsKLSAgdC53aW5zaXplLndzX3JvdyA9IDI1OwotCi0g IHNldHVwX3BzZXVkb2NvbnNvbGUgKCk7CisgIF9fc21hbGxfc3ByaW50ZiAocGlwZW5hbWUsICJw dHklZC10by1zbGF2ZSIsIHVuaXQpOworICByZXMgPSBmaGFuZGxlcl9waXBlOjpjcmVhdGUgKCZz ZWNfbm9uZSwgJmZyb21fbWFzdGVyLCAmdG9fc2xhdmUsCisJCQkgICAgICAgZmhhbmRsZXJfcHR5 X2NvbW1vbjo6cGlwZXNpemUsIHBpcGVuYW1lLCAwKTsKKyAgaWYgKHJlcykKKyAgICB7CisgICAg ICBlcnJzdHIgPSAiaW5wdXQgcGlwZSI7CisgICAgICBnb3RvIGVycjsKKyAgICB9CiAKICAgdC5z ZXRfZnJvbV9tYXN0ZXIgKGZyb21fbWFzdGVyKTsKICAgdC5zZXRfZnJvbV9tYXN0ZXJfY3lnIChm cm9tX21hc3Rlcl9jeWcpOwogICB0LnNldF90b19tYXN0ZXIgKHRvX21hc3Rlcik7CiAgIHQuc2V0 X3RvX21hc3Rlcl9jeWcgKHRvX21hc3Rlcl9jeWcpOworICB0LndpbnNpemUud3NfY29sID0gODA7 CisgIHQud2luc2l6ZS53c19yb3cgPSAyNTsKICAgdC5tYXN0ZXJfcGlkID0gbXlzZWxmLT5waWQ7 CiAKICAgZGV2ICgpLnBhcnNlIChERVZfUFRZTV9NQUpPUiwgdW5pdCk7CkBAIC0zNzE3LDYgKzIz ODQsNyBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpzZXR1cCAoKQogZXJyOgogICBfX3NldGVycm5v ICgpOwogICBjbG9zZV9tYXliZSAoZnJvbV9zbGF2ZSk7CisgIGNsb3NlX21heWJlICh0b19zbGF2 ZSk7CiAgIGNsb3NlX21heWJlIChnZXRfaGFuZGxlICgpKTsKICAgY2xvc2VfbWF5YmUgKGdldF9v dXRwdXRfaGFuZGxlICgpKTsKICAgY2xvc2VfbWF5YmUgKGlucHV0X2F2YWlsYWJsZV9ldmVudCk7 CkBAIC0zNzc2LDkgKzI0NDQsNiBAQCBmaGFuZGxlcl9wdHlfY29tbW9uOjpwcm9jZXNzX29wb3N0 X291dHB1dCAoSEFORExFIGgsIGNvbnN0IHZvaWQgKnB0ciwgc3NpemVfdCYgbAogewogICBzc2l6 ZV90IHRvd3JpdGUgPSBsZW47CiAgIEJPT0wgcmVzID0gVFJVRTsKLSAgQk9PTCAoV0lOQVBJICpX cml0ZUZ1bmMpCi0gICAgKEhBTkRMRSwgTFBDVk9JRCwgRFdPUkQsIExQRFdPUkQsIExQT1ZFUkxB UFBFRCk7Ci0gIFdyaXRlRnVuYyA9IFdyaXRlRmlsZV9PcmlnID8gV3JpdGVGaWxlX09yaWcgOiBX cml0ZUZpbGU7CiAgIHdoaWxlICh0b3dyaXRlKQogICAgIHsKICAgICAgIGlmICghaXNfZWNobykK QEAgLTM4MDEsNyArMjQ2Niw3IEBAIGZoYW5kbGVyX3B0eV9jb21tb246OnByb2Nlc3Nfb3Bvc3Rf b3V0cHV0IChIQU5ETEUgaCwgY29uc3Qgdm9pZCAqcHRyLCBzc2l6ZV90JiBsCiAgICAgICBpZiAo IShnZXRfdHR5cCAoKS0+dGkuY19vZmxhZyAmIE9QT1NUKSkJLy8gcmF3IG91dHB1dCBtb2RlCiAJ ewogCSAgRFdPUkQgbiA9IE1JTiAoT1VUX0JVRkZFUl9TSVpFLCB0b3dyaXRlKTsKLQkgIHJlcyA9 IFdyaXRlRnVuYyAoaCwgcHRyLCBuLCAmbiwgTlVMTCk7CisJICByZXMgPSBXcml0ZUZpbGUgKGgs IHB0ciwgbiwgJm4sIE5VTEwpOwogCSAgaWYgKCFyZXMpCiAJICAgIGJyZWFrOwogCSAgcHRyID0g KGNoYXIgKikgcHRyICsgbjsKQEAgLTM4NTEsNyArMjUxNiw3IEBAIGZoYW5kbGVyX3B0eV9jb21t b246OnByb2Nlc3Nfb3Bvc3Rfb3V0cHV0IChIQU5ETEUgaCwgY29uc3Qgdm9pZCAqcHRyLCBzc2l6 ZV90JiBsCiAJCSAgYnJlYWs7CiAJCX0KIAkgICAgfQotCSAgcmVzID0gV3JpdGVGdW5jIChoLCBv dXRidWYsIG4sICZuLCBOVUxMKTsKKwkgIHJlcyA9IFdyaXRlRmlsZSAoaCwgb3V0YnVmLCBuLCAm biwgTlVMTCk7CiAJICBpZiAoIXJlcykKIAkgICAgYnJlYWs7CiAJICBwdHIgPSAoY2hhciAqKSBw dHIgKyByYzsKQEAgLTM4NjEsMyArMjUyNiwxMzQgQEAgZmhhbmRsZXJfcHR5X2NvbW1vbjo6cHJv Y2Vzc19vcG9zdF9vdXRwdXQgKEhBTkRMRSBoLCBjb25zdCB2b2lkICpwdHIsIHNzaXplX3QmIGwK ICAgbGVuIC09IHRvd3JpdGU7CiAgIHJldHVybiByZXM7CiB9CisKK2Jvb2wKK2ZoYW5kbGVyX3B0 eV9zbGF2ZTo6c2V0dXBfcHNldWRvY29uc29sZSAoU1RBUlRVUElORk9FWFcgKnNpLCBib29sIG5v cGNvbikKK3sKKworICAvKiBTZXR0aW5nIHN3aXRjaF90b19wY29uX2luIGlzIG5lY2Vzc2FyeSBl dmVuIGlmCisgICAgIHBzZXVkbyBjb25zb2xlIHdpbGwgbm90IGJlIGFjdGl2YXRlZC4gKi8KKyAg ZmhhbmRsZXJfYmFzZSAqZmggPSA6OmN5Z2hlYXAtPmZkdGFiWzBdOworICBpZiAoZmggJiYgZmgt PmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpPUikKKyAgICB7CisgICAgICBmaGFuZGxlcl9w dHlfc2xhdmUgKnB0eXMgPSAoZmhhbmRsZXJfcHR5X3NsYXZlICopIGZoOworICAgICAgcHR5cy0+ Z2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX2luID0gdHJ1ZTsKKyAgICAgIGlmIChwdHlzLT5n ZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMAorCSAgfHwgIXBpbmZvIChwdHlzLT5nZXRfdHR5cCAo KS0+cGNvbl9waWQpKQorCXB0eXMtPmdldF90dHlwICgpLT5wY29uX3BpZCA9IG15c2VsZi0+cGlk OworICAgIH0KKworICBpZiAobm9wY29uKQorICAgIHJldHVybiBmYWxzZTsKKyAgaWYgKGdldF90 dHlwICgpLT5wY29uX3BpZCAmJiBnZXRfdHR5cCAoKS0+cGNvbl9waWQgIT0gbXlzZWxmLT5waWQK KyAgICAgICYmICEhcGluZm8gKGdldF90dHlwICgpLT5wY29uX3BpZCkpCisgICAgcmV0dXJuIGZh bHNlOworICBpZiAoZGlzYWJsZV9wY29uKQorICAgIHJldHVybiBmYWxzZTsKKyAgLyogSWYgdGhl IGxlZ2FjeSBjb25zb2xlIG1vZGUgaXMgZW5hYmxlZCwgcHNldWRvIGNvbnNvbGUgc2VlbXMKKyAg ICAgbm90IHRvIHdvcmsgYXMgZXhwZWN0ZWQuIFRvIGRldGVybWluZSBjb25zb2xlIG1vZGUsIHJl Z2lzdHJ5CisgICAgIGtleSBGb3JjZVYyIGluIEhLRVlfQ1VSUkVOVF9VU0VSXENvbnNvbGUgaXMg Y2hlY2tlZC4gKi8KKyAgcmVnX2tleSByZWcgKEhLRVlfQ1VSUkVOVF9VU0VSLCBLRVlfUkVBRCwg TCJDb25zb2xlIiwgTlVMTCk7CisgIGlmIChyZWcuZXJyb3IgKCkpCisgICAgcmV0dXJuIGZhbHNl OworICBpZiAocmVnLmdldF9kd29yZCAoTCJGb3JjZVYyIiwgMSkgPT0gMCkKKyAgICB7CisgICAg ICB0ZXJtaW9zX3ByaW50ZiAoIlBzZXVkbyBjb25zb2xlIGlzIGRpc2FibGVkICIKKwkJICAgICAg ImJlY2F1c2UgdGhlIGxlZ2FjeSBjb25zb2xlIG1vZGUgaXMgZW5hYmxlZC4iKTsKKyAgICAgIHJl dHVybiBmYWxzZTsKKyAgICB9CisKKyAgQ09PUkQgc2l6ZSA9IHsKKyAgICAoU0hPUlQpIGdldF90 dHlwICgpLT53aW5zaXplLndzX2NvbCwKKyAgICAoU0hPUlQpIGdldF90dHlwICgpLT53aW5zaXpl LndzX3JvdworICB9OworICBjb25zdCBEV09SRCBpbmhlcml0X2N1cnNvciA9IDE7CisgIFNldExh c3RFcnJvciAoRVJST1JfU1VDQ0VTUyk7CisgIEhSRVNVTFQgcmVzID0gQ3JlYXRlUHNldWRvQ29u c29sZSAoc2l6ZSwgZ2V0X2hhbmRsZSAoKSwgZ2V0X291dHB1dF9oYW5kbGUgKCksCisJCQkJICAg ICBpbmhlcml0X2N1cnNvciwKKwkJCQkgICAgICZnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29s ZSk7CisgIGlmIChyZXMgIT0gU19PSyB8fCBHZXRMYXN0RXJyb3IgKCkgPT0gRVJST1JfUFJPQ19O T1RfRk9VTkQpCisgICAgeworICAgICAgaWYgKHJlcyAhPSBTX09LKQorCXN5c3RlbV9wcmludGYg KCJDcmVhdGVQc2V1ZG9Db25zb2xlKCkgZmFpbGVkLiAlMDh4ICUwOHhcbiIsCisJCSAgICAgICBH ZXRMYXN0RXJyb3IgKCksIHJlcyk7CisgICAgICBnb3RvIGZhbGxiYWNrOworICAgIH0KKworICBT SVpFX1QgYnl0ZXNSZXF1aXJlZDsKKyAgSW5pdGlhbGl6ZVByb2NUaHJlYWRBdHRyaWJ1dGVMaXN0 IChOVUxMLCAxLCAwLCAmYnl0ZXNSZXF1aXJlZCk7CisgIFplcm9NZW1vcnkgKHNpLCBzaXplb2Yg KCpzaSkpOworICBzaS0+U3RhcnR1cEluZm8uY2IgPSBzaXplb2YgKFNUQVJUVVBJTkZPRVhXKTsK KyAgc2ktPmxwQXR0cmlidXRlTGlzdCA9IChQUFJPQ19USFJFQURfQVRUUklCVVRFX0xJU1QpCisg ICAgSGVhcEFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgYnl0ZXNSZXF1aXJlZCk7CisgIGlm IChzaS0+bHBBdHRyaWJ1dGVMaXN0ID09IE5VTEwpCisgICAgZ290byBjbGVhbnVwX3BzZXVkb19j b25zb2xlOworICBpZiAoIUluaXRpYWxpemVQcm9jVGhyZWFkQXR0cmlidXRlTGlzdCAoc2ktPmxw QXR0cmlidXRlTGlzdCwKKwkJCQkJICAxLCAwLCAmYnl0ZXNSZXF1aXJlZCkpCisgICAgZ290byBj bGVhbnVwX2hlYXA7CisgIGlmICghVXBkYXRlUHJvY1RocmVhZEF0dHJpYnV0ZSAoc2ktPmxwQXR0 cmlidXRlTGlzdCwKKwkJCQkgIDAsCisJCQkJICBQUk9DX1RIUkVBRF9BVFRSSUJVVEVfUFNFVURP Q09OU09MRSwKKwkJCQkgIGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlLAorCQkJCSAgc2l6 ZW9mIChnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSksCisJCQkJICBOVUxMLCBOVUxMKSkK KyAgICBnb3RvIGNsZWFudXBfaGVhcDsKKyAgc2ktPlN0YXJ0dXBJbmZvLmR3RmxhZ3MgPSBTVEFS VEZfVVNFU1RESEFORExFUzsKKyAgc2ktPlN0YXJ0dXBJbmZvLmhTdGRJbnB1dCA9IE5VTEw7Cisg IHNpLT5TdGFydHVwSW5mby5oU3RkT3V0cHV0ID0gTlVMTDsKKyAgc2ktPlN0YXJ0dXBJbmZvLmhT dGRFcnJvciA9IE5VTEw7CisKKyAgeworICAgIGZoYW5kbGVyX2Jhc2UgKmZoMCA9IDo6Y3lnaGVh cC0+ZmR0YWJbMF07CisgICAgaWYgKGZoMCAmJiBmaDAtPmdldF9kZXZpY2UgKCkgIT0gZ2V0X2Rl dmljZSAoKSkKKyAgICAgIHNpLT5TdGFydHVwSW5mby5oU3RkSW5wdXQgPSBmaDAtPmdldF9oYW5k bGUgKCk7CisgICAgZmhhbmRsZXJfYmFzZSAqZmgxID0gOjpjeWdoZWFwLT5mZHRhYlsxXTsKKyAg ICBpZiAoZmgxICYmIGZoMS0+Z2V0X2RldmljZSAoKSAhPSBnZXRfZGV2aWNlICgpKQorICAgICAg c2ktPlN0YXJ0dXBJbmZvLmhTdGRPdXRwdXQgPSBmaDEtPmdldF9vdXRwdXRfaGFuZGxlICgpOwor ICAgIGZoYW5kbGVyX2Jhc2UgKmZoMiA9IDo6Y3lnaGVhcC0+ZmR0YWJbMl07CisgICAgaWYgKGZo MiAmJiBmaDItPmdldF9kZXZpY2UgKCkgIT0gZ2V0X2RldmljZSAoKSkKKyAgICAgIHNpLT5TdGFy dHVwSW5mby5oU3RkRXJyb3IgPSBmaDItPmdldF9vdXRwdXRfaGFuZGxlICgpOworICB9CisKKyAg aWYgKGdldF90dHlwICgpLT5wY29uX3BpZCA9PSAwIHx8ICFwaW5mbyAoZ2V0X3R0eXAgKCktPnBj b25fcGlkKSkKKyAgICBnZXRfdHR5cCAoKS0+cGNvbl9waWQgPSBteXNlbGYtPnBpZDsKKworICBp ZiAoZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUgJiYgZ2V0X3R0eXAgKCktPnBjb25fcGlk ID09IG15c2VsZi0+cGlkKQorICAgIHsKKyAgICAgIEhQQ09OX0lOVEVSTkFMICpocCA9IChIUENP Tl9JTlRFUk5BTCAqKSBnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZTsKKyAgICAgIGdldF90 dHlwICgpLT5oX3Bjb25fd3JpdGVfcGlwZSA9IGhwLT5oV3JpdGVQaXBlOworICAgIH0KKyAgZ2V0 X3R0eXAgKCktPnBjb25fc3RhcnQgPSB0cnVlOworICByZXR1cm4gdHJ1ZTsKKworY2xlYW51cF9o ZWFwOgorICBIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIHNpLT5scEF0dHJpYnV0ZUxp c3QpOworY2xlYW51cF9wc2V1ZG9fY29uc29sZToKKyAgaWYgKGdldF90dHlwICgpLT5oX3BzZXVk b19jb25zb2xlKQorICAgIHsKKyAgICAgIEhQQ09OX0lOVEVSTkFMICpocCA9IChIUENPTl9JTlRF Uk5BTCAqKSBnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZTsKKyAgICAgIEhBTkRMRSB0bXAg PSBocC0+aENvbkhvc3RQcm9jZXNzOworICAgICAgQ2xvc2VQc2V1ZG9Db25zb2xlIChnZXRfdHR5 cCAoKS0+aF9wc2V1ZG9fY29uc29sZSk7CisgICAgICBDbG9zZUhhbmRsZSAodG1wKTsKKyAgICB9 CitmYWxsYmFjazoKKyAgZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUgPSBOVUxMOworICBy ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQKK2ZoYW5kbGVyX3B0eV9zbGF2ZTo6Y2xvc2VfcHNldWRv Y29uc29sZSAodm9pZCkKK3sKKyAgaWYgKGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlKQor ICAgIHsKKyAgICAgIGdldF90dHlwICgpLT53YWl0X3Bjb25fZndkICgpOworICAgICAgSFBDT05f SU5URVJOQUwgKmhwID0gKEhQQ09OX0lOVEVSTkFMICopIGdldF90dHlwICgpLT5oX3BzZXVkb19j b25zb2xlOworICAgICAgSEFORExFIHRtcCA9IGhwLT5oQ29uSG9zdFByb2Nlc3M7CisgICAgICBD bG9zZVBzZXVkb0NvbnNvbGUgKGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlKTsKKyAgICAg IENsb3NlSGFuZGxlICh0bXApOworICAgICAgZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUg PSBOVUxMOworICAgICAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX2luID0gZmFsc2U7Cisg ICAgICBnZXRfdHR5cCAoKS0+cGNvbl9waWQgPSAwOworICAgICAgZ2V0X3R0eXAgKCktPnBjb25f c3RhcnQgPSBmYWxzZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL2Zvcmsu Y2MgYi93aW5zdXAvY3lnd2luL2ZvcmsuY2MKaW5kZXggNjkxZDA4MTM3Li42Y2E0YjVmMjkgMTAw NjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vZm9yay5jYworKysgYi93aW5zdXAvY3lnd2luL2Zvcmsu Y2MKQEAgLTEzNCwzNiArMTM0LDYgQEAgY2hpbGRfaW5mbzo6cHJlZm9yayAoYm9vbCBkZXRhY2hl ZCkKIGludCBfX3N0ZGNhbGwKIGZyb2s6OmNoaWxkICh2b2xhdGlsZSBjaGFyICogdm9sYXRpbGUg aGVyZSkKIHsKLSAgY3lnaGVhcF9mZGVudW0gY2ZkIChmYWxzZSk7Ci0gIHdoaWxlIChjZmQubmV4 dCAoKSA+PSAwKQotICAgIGlmIChjZmQtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZTV9NQUpPUikK LSAgICAgIHsKLQlmaGFuZGxlcl9iYXNlICpmaCA9IGNmZDsKLQlmaGFuZGxlcl9wdHlfbWFzdGVy ICpwdHltID0gKGZoYW5kbGVyX3B0eV9tYXN0ZXIgKikgZmg7Ci0JaWYgKHB0eW0tPmdldF9wc2V1 ZG9fY29uc29sZSAoKSkKLQkgIHsKLQkgICAgZGVidWdfcHJpbnRmICgiZm91bmQgYSBQVFkgbWFz dGVyICVkOiBoZWxwZXJfUElEPSVkIiwKLQkJCSAgcHR5bS0+Z2V0X21pbm9yICgpLCBwdHltLT5n ZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCkpOwotCSAgICBpZiAoZmhhbmRsZXJfY29uc29sZTo6Z2V0 X2NvbnNvbGVfcHJvY2Vzc19pZCAoCi0JCQkJcHR5bS0+Z2V0X2hlbHBlcl9wcm9jZXNzX2lkICgp LCB0cnVlKSkKLQkgICAgICAvKiBBbHJlYWR5IGF0dGFjaGVkICovCi0JICAgICAgYnJlYWs7Ci0J ICAgIGVsc2UKLQkgICAgICB7Ci0JCWlmIChwdHltLT5hdHRhY2hfcGNvbl9pbl9mb3JrICgpKQot CQkgIHsKLQkJICAgIEZyZWVDb25zb2xlICgpOwotCQkgICAgaWYgKCFBdHRhY2hDb25zb2xlIChw dHltLT5nZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCkpKQotCQkgICAgICAvKiBFcnJvciAqLzsKLQkJ ICAgIGVsc2UKLQkJICAgICAgYnJlYWs7Ci0JCSAgfQotCSAgICAgIH0KLQkgIH0KLSAgICAgIH0K LSAgZXh0ZXJuIHZvaWQgY2xlYXJfcGNvbl9hdHRhY2hlZF90byAodm9pZCk7IC8qIGZoYW5kbGVy X3R0eS5jYyAqLwotICBjbGVhcl9wY29uX2F0dGFjaGVkX3RvICgpOwotCiAgIEhBTkRMRSYgaFBh cmVudCA9IGNoLnBhcmVudDsKIAogICBzeW5jX3dpdGhfcGFyZW50ICgiYWZ0ZXIgbG9uZ2ptcCIs IHRydWUpOwpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9zZWxlY3QuY2MgYi93aW5zdXAvY3ln d2luL3NlbGVjdC5jYwppbmRleCAzZjNmMzNmYjUuLjkzYWNkZDg5YSAxMDA2NDQKLS0tIGEvd2lu c3VwL2N5Z3dpbi9zZWxlY3QuY2MKKysrIGIvd2luc3VwL2N5Z3dpbi9zZWxlY3QuY2MKQEAgLTEy MTMsOCArMTIxMyw3IEBAIHZlcmlmeV90dHlfc2xhdmUgKHNlbGVjdF9yZWNvcmQgKm1lLCBmZF9z ZXQgKnJlYWRmZHMsIGZkX3NldCAqd3JpdGVmZHMsCiAJICAgZmRfc2V0ICpleGNlcHRmZHMpCiB7 CiAgIGZoYW5kbGVyX3B0eV9zbGF2ZSAqcHR5cyA9IChmaGFuZGxlcl9wdHlfc2xhdmUgKikgbWUt PmZoOwotICBpZiAobWUtPnJlYWRfc2VsZWN0ZWQgJiYgIXB0eXMtPnRvX2JlX3JlYWRfZnJvbV9w Y29uICgpICYmCi0gICAgICBJc0V2ZW50U2lnbmFsbGVkIChwdHlzLT5pbnB1dF9hdmFpbGFibGVf ZXZlbnQpKQorICBpZiAobWUtPnJlYWRfc2VsZWN0ZWQgJiYgSXNFdmVudFNpZ25hbGxlZCAocHR5 cy0+aW5wdXRfYXZhaWxhYmxlX2V2ZW50KSkKICAgICBtZS0+cmVhZF9yZWFkeSA9IHRydWU7CiAg IHJldHVybiBzZXRfYml0cyAobWUsIHJlYWRmZHMsIHdyaXRlZmRzLCBleGNlcHRmZHMpOwogfQpA QCAtMTIyNyw4ICsxMjI2LDYgQEAgcGVla19wdHlfc2xhdmUgKHNlbGVjdF9yZWNvcmQgKnMsIGJv b2wgZnJvbV9zZWxlY3QpCiAgIGZoYW5kbGVyX3B0eV9zbGF2ZSAqcHR5cyA9IChmaGFuZGxlcl9w dHlfc2xhdmUgKikgZmg7CiAKICAgcHR5cy0+cmVzZXRfc3dpdGNoX3RvX3Bjb24gKCk7Ci0gIGlm IChwdHlzLT50b19iZV9yZWFkX2Zyb21fcGNvbiAoKSkKLSAgICBwdHlzLT51cGRhdGVfcGNvbl9p bnB1dF9zdGF0ZSAodHJ1ZSk7CiAKICAgaWYgKHMtPnJlYWRfc2VsZWN0ZWQpCiAgICAgewpkaWZm IC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9zbWFsbHByaW50LmNjIGIvd2luc3VwL2N5Z3dpbi9zbWFs bHByaW50LmNjCmluZGV4IDI2ZDM0ZDllNC4uZjIwOGEwNTdhIDEwMDY0NAotLS0gYS93aW5zdXAv Y3lnd2luL3NtYWxscHJpbnQuY2MKKysrIGIvd2luc3VwL2N5Z3dpbi9zbWFsbHByaW50LmNjCkBA IC00MDUsNyArNDA1LDYgQEAgc21hbGxfcHJpbnRmIChjb25zdCBjaGFyICpmbXQsIC4uLikKICAg Y291bnQgPSBfX3NtYWxsX3ZzcHJpbnRmIChidWYsIGZtdCwgYXApOwogICB2YV9lbmQgKGFwKTsK IAotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChHZXRTdGRIYW5kbGUgKFNURF9F UlJPUl9IQU5ETEUpKTsKICAgV3JpdGVGaWxlIChHZXRTdGRIYW5kbGUgKFNURF9FUlJPUl9IQU5E TEUpLCBidWYsIGNvdW50LCAmZG9uZSwgTlVMTCk7CiAgIEZsdXNoRmlsZUJ1ZmZlcnMgKEdldFN0 ZEhhbmRsZSAoU1REX0VSUk9SX0hBTkRMRSkpOwogfQpAQCAtNDMyLDcgKzQzMSw2IEBAIGNvbnNv bGVfcHJpbnRmIChjb25zdCBjaGFyICpmbXQsIC4uLikKICAgY291bnQgPSBfX3NtYWxsX3ZzcHJp bnRmIChidWYsIGZtdCwgYXApOwogICB2YV9lbmQgKGFwKTsKIAotICBzZXRfaXNoeWJyaWRfYW5k X3N3aXRjaF90b19wY29uIChjb25zb2xlX2hhbmRsZSk7CiAgIFdyaXRlRmlsZSAoY29uc29sZV9o YW5kbGUsIGJ1ZiwgY291bnQsICZkb25lLCBOVUxMKTsKICAgRmx1c2hGaWxlQnVmZmVycyAoY29u c29sZV9oYW5kbGUpOwogfQpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9zcGF3bi5jYyBiL3dp bnN1cC9jeWd3aW4vc3Bhd24uY2MKaW5kZXggM2U4YzgzNjdhLi42MWEyM2E3MmEgMTAwNjQ0Ci0t LSBhL3dpbnN1cC9jeWd3aW4vc3Bhd24uY2MKKysrIGIvd2luc3VwL2N5Z3dpbi9zcGF3bi5jYwpA QCAtMTk0LDYgKzE5NCwyNCBAQCBoYW5kbGUgKGludCBmZCwgYm9vbCB3cml0aW5nKQogICByZXR1 cm4gaDsKIH0KIAorc3RhdGljIGJvb2wKK2lzX2NvbnNvbGVfYXBwIChXQ0hBUiAqZmlsZW5hbWUp Cit7CisgIEhBTkRMRSBoOworICBjb25zdCBpbnQgaWRfb2Zmc2V0ID0gOTI7CisgIGggPSBDcmVh dGVGaWxlVyAoZmlsZW5hbWUsIEdFTkVSSUNfUkVBRCwgRklMRV9TSEFSRV9SRUFELAorCQkgIE5V TEwsIE9QRU5fRVhJU1RJTkcsIDAsIE5VTEwpOworICBjaGFyIGJ1ZlsxMDI0XTsKKyAgRFdPUkQg bjsKKyAgUmVhZEZpbGUgKGgsIGJ1Ziwgc2l6ZW9mIChidWYpLCAmbiwgMCk7CisgIENsb3NlSGFu ZGxlIChoKTsKKyAgY2hhciAqcCA9IChjaGFyICopIG1lbW1lbSAoYnVmLCBuLCAiUEVcMFwwIiwg NCk7CisgIGlmIChwICYmIHAgKyBpZF9vZmZzZXQgPD0gYnVmICsgbikKKyAgICByZXR1cm4gcFtp ZF9vZmZzZXRdID09ICdcMDAzJzsgLyogMDI6IEdVSSwgMDM6IGNvbnNvbGUgKi8KKyAgZWxzZQor ICAgIHJldHVybiBmYWxzZTsKK30KKwogaW50CiBpc2NtZCAoY29uc3QgY2hhciAqYXJndjAsIGNv bnN0IGNoYXIgKndoYXQpCiB7CkBAIC0yNTksOCArMjc3LDYgQEAgY2hpbGRfaW5mb19zcGF3bjo6 d29ya2VyIChjb25zdCBjaGFyICpwcm9nX2FyZywgY29uc3QgY2hhciAqY29uc3QgKmFyZ3YsCiB7 CiAgIGJvb2wgcmM7CiAgIGludCByZXMgPSAtMTsKLSAgRFdPUkQgcGlkX3Jlc3RvcmUgPSAwOwot ICBib29sIGF0dGFjaF90b19jb25zb2xlID0gZmFsc2U7CiAgIHBpZF90IGN0dHlfcGdpZCA9IDA7 CiAKICAgLyogU2VhcmNoIGZvciBDVFRZIGFuZCByZXRyaWV2ZSBpdHMgUEdJRCAqLwpAQCAtNTgw LDkgKzU5Niw3IEBAIGNoaWxkX2luZm9fc3Bhd246OndvcmtlciAoY29uc3QgY2hhciAqcHJvZ19h cmcsIGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2LAogCQkJIFBST0NFU1NfUVVFUllfTElNSVRFRF9J TkZPUk1BVElPTikpCiAJc2EgPSAmc2VjX25vbmVfbmloOwogCi0gICAgICAvKiBBdHRhY2ggdG8g cHNldWRvIGNvbnNvbGUgaWYgcHR5IHNhbHZlIGlzIHVzZWQgKi8KLSAgICAgIHBpZF9yZXN0b3Jl ID0gZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZAotCShHZXRDdXJyZW50 UHJvY2Vzc0lkICgpLCBmYWxzZSk7CisgICAgICBmaGFuZGxlcl9wdHlfc2xhdmUgKnB0eXNfcHJp bWFyeSA9IE5VTEw7CiAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkgKyspCiAJewogCSAg Y29uc3QgaW50IGNoa19vcmRlcltdID0gezEsIDAsIDJ9OwpAQCAtNTkxLDI5ICs2MDUsMTEgQEAg Y2hpbGRfaW5mb19zcGF3bjo6d29ya2VyIChjb25zdCBjaGFyICpwcm9nX2FyZywgY29uc3QgY2hh ciAqY29uc3QgKmFyZ3YsCiAJICBpZiAoZmggJiYgZmgtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZ U19NQUpPUikKIAkgICAgewogCSAgICAgIGZoYW5kbGVyX3B0eV9zbGF2ZSAqcHR5cyA9IChmaGFu ZGxlcl9wdHlfc2xhdmUgKikgZmg7Ci0JICAgICAgaWYgKHB0eXMtPmdldF9wc2V1ZG9fY29uc29s ZSAoKSkKLQkJewotCQkgIERXT1JEIGhlbHBlcl9wcm9jZXNzX2lkID0gcHR5cy0+Z2V0X2hlbHBl cl9wcm9jZXNzX2lkICgpOwotCQkgIGRlYnVnX3ByaW50ZiAoImZvdW5kIGEgUFRZIHNsYXZlICVk OiBoZWxwZXJfUElEPSVkIiwKLQkJCQkgICAgZmgtPmdldF9taW5vciAoKSwgaGVscGVyX3Byb2Nl c3NfaWQpOwotCQkgIGlmIChmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lk Ci0JCQkJCSAgICAgIChoZWxwZXJfcHJvY2Vzc19pZCwgdHJ1ZSkpCi0JCSAgICAvKiBBbHJlYWR5 IGF0dGFjaGVkICovCi0JCSAgICBhdHRhY2hfdG9fY29uc29sZSA9IHRydWU7Ci0JCSAgZWxzZSBp ZiAoIWF0dGFjaF90b19jb25zb2xlKQotCQkgICAgewotCQkgICAgICBGcmVlQ29uc29sZSAoKTsK LQkJICAgICAgaWYgKEF0dGFjaENvbnNvbGUgKGhlbHBlcl9wcm9jZXNzX2lkKSkKLQkJCWF0dGFj aF90b19jb25zb2xlID0gdHJ1ZTsKLQkJICAgIH0KLQkJICBwdHlzLT5maXh1cF9hZnRlcl9hdHRh Y2ggKCFpc2N5Z3dpbiAoKSwgZmQpOwotCQkgIGlmIChtb2RlID09IF9QX09WRVJMQVkpCi0JCSAg ICBwdHlzLT5zZXRfZnJlZWNvbnNvbGVfb25fY2xvc2UgKGlzY3lnd2luICgpKTsKLQkJfQorCSAg ICAgIGlmIChwdHlzX3ByaW1hcnkgPT0gTlVMTCkKKwkJcHR5c19wcmltYXJ5ID0gcHR5czsKIAkg ICAgfQogCSAgZWxzZSBpZiAoZmggJiYgZmgtPmdldF9tYWpvciAoKSA9PSBERVZfQ09OU19NQUpP UikKIAkgICAgewotCSAgICAgIGF0dGFjaF90b19jb25zb2xlID0gdHJ1ZTsKIAkgICAgICBmaGFu ZGxlcl9jb25zb2xlICpjb25zID0gKGZoYW5kbGVyX2NvbnNvbGUgKikgZmg7CiAJICAgICAgaWYg KHdpbmNhcC5oYXNfY29uXzI0Yml0X2NvbG9ycyAoKSAmJiAhaXNjeWd3aW4gKCkpCiAJCWlmIChm ZCA9PSAxIHx8IGZkID09IDIpCkBAIC02MzIsNiArNjI4LDE5IEBAIGNoaWxkX2luZm9fc3Bhd246 OndvcmtlciAoY29uc3QgY2hhciAqcHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2LAog ICAgICAgaWYgKCFpc2N5Z3dpbiAoKSkKIAlpbml0X2NvbnNvbGVfaGFuZGxlciAobXlzZWxmLT5j dHR5ID4gMCk7CiAKKyAgICAgIGJvb2wgZW5hYmxlX3Bjb24gPSBmYWxzZTsKKyAgICAgIFNUQVJU VVBJTkZPRVhXIHNpX3Bjb247CisgICAgICBaZXJvTWVtb3J5ICgmc2lfcGNvbiwgc2l6ZW9mIChz aV9wY29uKSk7CisgICAgICBTVEFSVFVQSU5GT1cgKnNpX3RtcCA9ICZzaTsKKyAgICAgIGlmICgh aXNjeWd3aW4gKCkgJiYgcHR5c19wcmltYXJ5ICYmIGlzX2NvbnNvbGVfYXBwIChydW5wYXRoKSkK KwlpZiAocHR5c19wcmltYXJ5LT5zZXR1cF9wc2V1ZG9jb25zb2xlICgmc2lfcGNvbiwKKwkJCSAg ICAgbW9kZSAhPSBfUF9PVkVSTEFZICYmIG1vZGUgIT0gX1BfV0FJVCkpCisJICB7CisJICAgIGNf ZmxhZ3MgfD0gRVhURU5ERURfU1RBUlRVUElORk9fUFJFU0VOVDsKKwkgICAgc2lfdG1wID0gJnNp X3Bjb24uU3RhcnR1cEluZm87CisJICAgIGVuYWJsZV9wY29uID0gdHJ1ZTsKKwkgIH0KKwogICAg IGxvb3A6CiAgICAgICAvKiBXaGVuIHJ1aWQgIT0gZXVpZCB3ZSBjcmVhdGUgdGhlIG5ldyBwcm9j ZXNzIHVuZGVyIHRoZSBjdXJyZW50IG9yaWdpbmFsCiAJIGFjY291bnQgYW5kIGltcGVyc29uYXRl IGluIGNoaWxkLCB0aGlzIHdheSBtYWludGFpbmluZyB0aGUgZGlmZmVyZW50CkBAIC02NjAsNyAr NjY5LDcgQEAgY2hpbGRfaW5mb19zcGF3bjo6d29ya2VyIChjb25zdCBjaGFyICpwcm9nX2FyZywg Y29uc3QgY2hhciAqY29uc3QgKmFyZ3YsCiAJCQkgICAgICAgY19mbGFncywKIAkJCSAgICAgICBl bnZibG9jaywJLyogZW52aXJvbm1lbnQgKi8KIAkJCSAgICAgICBOVUxMLAotCQkJICAgICAgICZz aSwKKwkJCSAgICAgICBzaV90bXAsCiAJCQkgICAgICAgJnBpKTsKIAl9CiAgICAgICBlbHNlCkBA IC03MTQsNyArNzIzLDcgQEAgY2hpbGRfaW5mb19zcGF3bjo6d29ya2VyIChjb25zdCBjaGFyICpw cm9nX2FyZywgY29uc3QgY2hhciAqY29uc3QgKmFyZ3YsCiAJCQkgICAgICAgY19mbGFncywKIAkJ CSAgICAgICBlbnZibG9jaywJLyogZW52aXJvbm1lbnQgKi8KIAkJCSAgICAgICBOVUxMLAotCQkJ ICAgICAgICZzaSwKKwkJCSAgICAgICBzaV90bXAsCiAJCQkgICAgICAgJnBpKTsKIAkgIGlmICho d3N0KQogCSAgICB7CkBAIC03MjcsNiArNzM2LDExIEBAIGNoaWxkX2luZm9fc3Bhd246Ondvcmtl ciAoY29uc3QgY2hhciAqcHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2LAogCSAgICAg IENsb3NlRGVza3RvcCAoaGRzayk7CiAJICAgIH0KIAl9CisgICAgICBpZiAoZW5hYmxlX3Bjb24p CisJeworCSAgRGVsZXRlUHJvY1RocmVhZEF0dHJpYnV0ZUxpc3QgKHNpX3Bjb24ubHBBdHRyaWJ1 dGVMaXN0KTsKKwkgIEhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgc2lfcGNvbi5scEF0 dHJpYnV0ZUxpc3QpOworCX0KIAogICAgICAgaWYgKG1vZGUgIT0gX1BfT1ZFUkxBWSkKIAlTZXRI YW5kbGVJbmZvcm1hdGlvbiAobXlfd3JfcHJvY19waXBlLCBIQU5ETEVfRkxBR19JTkhFUklULApA QCAtODk3LDYgKzkxMSwxMSBAQCBjaGlsZF9pbmZvX3NwYXduOjp3b3JrZXIgKGNvbnN0IGNoYXIg KnByb2dfYXJnLCBjb25zdCBjaGFyICpjb25zdCAqYXJndiwKIAkJICAmJiBXYWl0Rm9yU2luZ2xl T2JqZWN0IChwaS5oUHJvY2VzcywgMCkgPT0gV0FJVF9USU1FT1VUKQogCQl3YWl0X2Zvcl9teXNl bGYgKCk7CiAJICAgIH0KKwkgIGlmIChlbmFibGVfcGNvbikKKwkgICAgeworCSAgICAgIFdhaXRG b3JTaW5nbGVPYmplY3QgKHBpLmhQcm9jZXNzLCBJTkZJTklURSk7CisJICAgICAgcHR5c19wcmlt YXJ5LT5jbG9zZV9wc2V1ZG9jb25zb2xlICgpOworCSAgICB9CiAJICBteXNlbGYuZXhpdCAoRVhJ VENPREVfTk9TRVQpOwogCSAgYnJlYWs7CiAJY2FzZSBfUF9XQUlUOgpAQCAtOTA0LDYgKzkyMyw4 IEBAIGNoaWxkX2luZm9fc3Bhd246OndvcmtlciAoY29uc3QgY2hhciAqcHJvZ19hcmcsIGNvbnN0 IGNoYXIgKmNvbnN0ICphcmd2LAogCSAgc3lzdGVtX2NhbGwuYXJtICgpOwogCSAgaWYgKHdhaXRw aWQgKGN5Z3BpZCwgJnJlcywgMCkgIT0gY3lncGlkKQogCSAgICByZXMgPSAtMTsKKwkgIGlmIChl bmFibGVfcGNvbikKKwkgICAgcHR5c19wcmltYXJ5LT5jbG9zZV9wc2V1ZG9jb25zb2xlICgpOwog CSAgYnJlYWs7CiAJY2FzZSBfUF9ERVRBQ0g6CiAJICByZXMgPSAwOwkvKiBMb3N0IGFsbCBtZW1v cnkgb2YgdGhpcyBjaGlsZC4gKi8KQEAgLTkzMCwyMSArOTUxLDYgQEAgY2hpbGRfaW5mb19zcGF3 bjo6d29ya2VyIChjb25zdCBjaGFyICpwcm9nX2FyZywgY29uc3QgY2hhciAqY29uc3QgKmFyZ3Ys CiAgIGlmIChlbnZibG9jaykKICAgICBmcmVlIChlbnZibG9jayk7CiAKLSAgaWYgKGF0dGFjaF90 b19jb25zb2xlICYmIHBpZF9yZXN0b3JlKQotICAgIHsKLSAgICAgIEZyZWVDb25zb2xlICgpOwot ICAgICAgQXR0YWNoQ29uc29sZSAocGlkX3Jlc3RvcmUpOwotICAgICAgY3lnaGVhcF9mZGVudW0g Y2ZkIChmYWxzZSk7Ci0gICAgICBpbnQgZmQ7Ci0gICAgICB3aGlsZSAoKGZkID0gY2ZkLm5leHQg KCkpID49IDApCi0JaWYgKGNmZC0+Z2V0X21ham9yICgpID09IERFVl9QVFlTX01BSk9SKQotCSAg ewotCSAgICBmaGFuZGxlcl9wdHlfc2xhdmUgKnB0eXMgPQotCSAgICAgIChmaGFuZGxlcl9wdHlf c2xhdmUgKikgKGZoYW5kbGVyX2Jhc2UgKikgY2ZkOwotCSAgICBwdHlzLT5maXh1cF9hZnRlcl9h dHRhY2ggKGZhbHNlLCBmZCk7Ci0JICB9Ci0gICAgfQotCiAgIHJldHVybiAoaW50KSByZXM7CiB9 CiAKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vc3RyYWNlLmNjIGIvd2luc3VwL2N5Z3dpbi9z dHJhY2UuY2MKaW5kZXggZjBhZWYzYTM2Li4zNWY4YTU5YWUgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9j eWd3aW4vc3RyYWNlLmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vc3RyYWNlLmNjCkBAIC0yNjQsNyAr MjY0LDYgQEAgc3RyYWNlOjp2cHJudGYgKHVuc2lnbmVkIGNhdGVnb3J5LCBjb25zdCBjaGFyICpm dW5jLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXAKICAgaWYgKGNhdGVnb3J5ICYgX1NUUkFD RV9TWVNURU0pCiAgICAgewogICAgICAgRFdPUkQgZG9uZTsKLSAgICAgIHNldF9pc2h5YnJpZF9h bmRfc3dpdGNoX3RvX3Bjb24gKEdldFN0ZEhhbmRsZSAoU1REX0VSUk9SX0hBTkRMRSkpOwogICAg ICAgV3JpdGVGaWxlIChHZXRTdGRIYW5kbGUgKFNURF9FUlJPUl9IQU5ETEUpLCBidWYsIGxlbiwg JmRvbmUsIDApOwogICAgICAgRmx1c2hGaWxlQnVmZmVycyAoR2V0U3RkSGFuZGxlIChTVERfRVJS T1JfSEFORExFKSk7CiAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCB0aGUgbWVzc2FnZSBzaG93cyB1 cCBvbiB0aGUgc2NyZWVuLCB0b28sIHNpbmNlIHRoaXMgaXMKQEAgLTI3Niw3ICsyNzUsNiBAQCBz dHJhY2U6OnZwcm50ZiAodW5zaWduZWQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmZ1bmMsIGNvbnN0 IGNoYXIgKmZtdCwgdmFfbGlzdCBhcAogCQkJCSAmc2VjX25vbmUsIE9QRU5fRVhJU1RJTkcsIDAs IDApOwogCSAgaWYgKGggIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCiAJICAgIHsKLQkgICAgICBz ZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKIAkgICAgICBXcml0ZUZpbGUgKGgs IGJ1ZiwgbGVuLCAmZG9uZSwgMCk7CiAJICAgICAgQ2xvc2VIYW5kbGUgKGgpOwogCSAgICB9CmRp ZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL3R0eS5jYyBiL3dpbnN1cC9jeWd3aW4vdHR5LmNjCmlu ZGV4IDRjYjY4Zjc3Ni4uZDYwZjI3NTQ1IDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL3R0eS5j YworKysgYi93aW5zdXAvY3lnd2luL3R0eS5jYwpAQCAtMjM0LDIwICsyMzQsMTQgQEAgdHR5Ojpp bml0ICgpCiAgIHdhc19vcGVuZWQgPSBmYWxzZTsKICAgbWFzdGVyX3BpZCA9IDA7CiAgIGlzX2Nv bnNvbGUgPSBmYWxzZTsKLSAgYXR0YWNoX3Bjb25faW5fZm9yayA9IGZhbHNlOwotICBoX3BzZXVk b19jb25zb2xlID0gTlVMTDsKICAgY29sdW1uID0gMDsKKyAgaF9wc2V1ZG9fY29uc29sZSA9IE5V TEw7CiAgIHN3aXRjaF90b19wY29uX2luID0gZmFsc2U7Ci0gIHN3aXRjaF90b19wY29uX291dCA9 IGZhbHNlOwotICBzY3JlZW5fYWx0ZXJuYXRlZCA9IGZhbHNlOwogICBtYXNrX3N3aXRjaF90b19w Y29uX2luID0gZmFsc2U7CiAgIHBjb25fcGlkID0gMDsKICAgdGVybV9jb2RlX3BhZ2UgPSAwOwot ICBuZWVkX3JlZHJhd19zY3JlZW4gPSB0cnVlOwogICBwY29uX2xhc3RfdGltZSA9IDA7Ci0gIHBj b25faW5fZW1wdHkgPSB0cnVlOwotICByZXFfdHJhbnNmZXJfaW5wdXRfdG9fcGNvbiA9IGZhbHNl OwotICByZXFfZmx1c2hfcGNvbl9pbnB1dCA9IGZhbHNlOworICBwY29uX3N0YXJ0ID0gZmFsc2U7 CiB9CiAKIEhBTkRMRQpAQCAtMjkzLDE2ICsyODcsNiBAQCB0dHlfbWluOjp0dHluYW1lICgpCiAg IHJldHVybiBkLm5hbWUgKCk7CiB9CiAKLXZvaWQKLXR0eTo6c2V0X3N3aXRjaF90b19wY29uX291 dCAoYm9vbCB2KQotewotICBpZiAoc3dpdGNoX3RvX3Bjb25fb3V0ICE9IHYpCi0gICAgewotICAg ICAgd2FpdF9wY29uX2Z3ZCAoKTsKLSAgICAgIHN3aXRjaF90b19wY29uX291dCA9IHY7Ci0gICAg fQotfQotCiB2b2lkCiB0dHk6OndhaXRfcGNvbl9md2QgKHZvaWQpCiB7CmRpZmYgLS1naXQgYS93 aW5zdXAvY3lnd2luL3R0eS5oIGIvd2luc3VwL2N5Z3dpbi90dHkuaAppbmRleCA5MjBlMzJiMTYu LmM0OTFkMzg5MSAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi90dHkuaAorKysgYi93aW5zdXAv Y3lnd2luL3R0eS5oCkBAIC05NCwyMSArOTQsMTMgQEAgcHJpdmF0ZToKICAgSEFORExFIF90b19t YXN0ZXI7CiAgIEhBTkRMRSBfdG9fbWFzdGVyX2N5ZzsKICAgSFBDT04gaF9wc2V1ZG9fY29uc29s ZTsKLSAgSEFORExFIGhfaGVscGVyX3Byb2Nlc3M7Ci0gIERXT1JEIGhlbHBlcl9wcm9jZXNzX2lk OwotICBIQU5ETEUgaF9oZWxwZXJfZ29vZGJ5ZTsKLSAgYm9vbCBhdHRhY2hfcGNvbl9pbl9mb3Jr OworICBib29sIHBjb25fc3RhcnQ7CiAgIGJvb2wgc3dpdGNoX3RvX3Bjb25faW47Ci0gIGJvb2wg c3dpdGNoX3RvX3Bjb25fb3V0OwotICBib29sIHNjcmVlbl9hbHRlcm5hdGVkOwogICBib29sIG1h c2tfc3dpdGNoX3RvX3Bjb25faW47CiAgIHBpZF90IHBjb25fcGlkOwogICBVSU5UIHRlcm1fY29k ZV9wYWdlOwotICBib29sIG5lZWRfcmVkcmF3X3NjcmVlbjsKICAgRFdPUkQgcGNvbl9sYXN0X3Rp bWU7Ci0gIGJvb2wgcGNvbl9pbl9lbXB0eTsKLSAgYm9vbCByZXFfdHJhbnNmZXJfaW5wdXRfdG9f cGNvbjsKLSAgYm9vbCByZXFfZmx1c2hfcGNvbl9pbnB1dDsKKyAgSEFORExFIGhfcGNvbl93cml0 ZV9waXBlOwogCiBwdWJsaWM6CiAgIEhBTkRMRSBmcm9tX21hc3RlciAoKSBjb25zdCB7IHJldHVy biBfZnJvbV9tYXN0ZXI7IH0KQEAgLTEzOCw3ICsxMzAsNiBAQCBwdWJsaWM6CiAgIHZvaWQgc2V0 X21hc3Rlcl9jdGxfY2xvc2VkICgpIHttYXN0ZXJfcGlkID0gLTE7fQogICBzdGF0aWMgdm9pZCBf X3N0ZGNhbGwgY3JlYXRlX21hc3RlciAoaW50KTsKICAgc3RhdGljIHZvaWQgX19zdGRjYWxsIGlu aXRfc2Vzc2lvbiAoKTsKLSAgdm9pZCBzZXRfc3dpdGNoX3RvX3Bjb25fb3V0IChib29sIHYpOwog ICB2b2lkIHdhaXRfcGNvbl9md2QgKHZvaWQpOwogICBmcmllbmQgY2xhc3MgZmhhbmRsZXJfcHR5 X2NvbW1vbjsKICAgZnJpZW5kIGNsYXNzIGZoYW5kbGVyX3B0eV9tYXN0ZXI7CmRpZmYgLS1naXQg YS93aW5zdXAvY3lnd2luL3dpbnN1cC5oIGIvd2luc3VwL2N5Z3dpbi93aW5zdXAuaAppbmRleCBm ZmY3ZDE4ZjMuLjQ1OGZiMmEyMyAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi93aW5zdXAuaAor KysgYi93aW5zdXAvY3lnd2luL3dpbnN1cC5oCkBAIC0yMjIsOSArMjIyLDYgQEAgdm9pZCBpbml0 X2NvbnNvbGVfaGFuZGxlciAoYm9vbCk7CiAKIGV4dGVybiBib29sIHdzb2NrX3N0YXJ0ZWQ7CiAK LS8qIFBUWSByZWxhdGVkICovCi12b2lkIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24g KEhBTkRMRSBoKTsKLQogLyogUHJpbnRmIHR5cGUgZnVuY3Rpb25zICovCiBleHRlcm4gIkMiIHZv aWQgdmFwaV9mYXRhbCAoY29uc3QgY2hhciAqLCB2YV9saXN0IGFwKSBfX2F0dHJpYnV0ZV9fICgo bm9yZXR1cm4pKTsKIGV4dGVybiAiQyIgdm9pZCBhcGlfZmF0YWwgKGNvbnN0IGNoYXIgKiwgLi4u KSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKLS0gCjIuMjcuMAoK --Multipart=_Mon__3_Aug_2020_11_11_03_+0900_L_AG6oQg3zN9MTTN--