From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1ABE4C6FA8B for ; Mon, 19 Sep 2022 12:59:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=iYUkm7cfsy2Ok3oBpPVvckSZyAGoooDH9oAl71NEShg=; b=k259ElXdmuYcl+ OPRyqJNNTMcgPeHS2wDMmePBetS9WYDUZOq094inZ//nBgIHqngt8lqvkH4fNbMIHm2/PkxkN21wP VkNk64gpWLXifG/4YZIoHADvC/FNnZZQJ4p6LGBWYeeIVyIw8goDZzkCfBdwZnTYc3sN6Qo1vE17i 2HuXa7i+D4F4kKJw5QCJbBVC0/jnl/Q9NETjgA+OJW5MWTzTPxOAI+8Hi9p9PJ1XjAfGpHPDZa0SF GSKTU7Va+bHHMIV0apWmw6PM3xSFq0/wGuFLvOJZ7Aa4S48QSmg5QBld0P+kg9ex3t3naoQqkZHlc Fbt1ODf7tdtHuVMEczWQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oaGN3-00BmDe-5x; Mon, 19 Sep 2022 12:59:33 +0000 Received: from out30-56.freemail.mail.aliyun.com ([115.124.30.56]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oaACE-008ePC-3o for kexec@lists.infradead.org; Mon, 19 Sep 2022 06:24:04 +0000 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R101e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018045168;MF=xianting.tian@linux.alibaba.com;NM=1;PH=DS;RN=6;SR=0;TI=SMTPD_---0VQ75VyV_1663568629; Received: from 30.225.66.25(mailfrom:xianting.tian@linux.alibaba.com fp:SMTPD_---0VQ75VyV_1663568629) by smtp.aliyun-inc.com; Mon, 19 Sep 2022 14:23:50 +0800 Message-ID: Date: Mon, 19 Sep 2022 14:23:49 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.12.0 Subject: Re: [PATCH] RISC-V: Add support for riscv kexec/kdump on kexec-tools To: horms@kernel.org, kexec@lists.infradead.org, mick@ics.forth.gr, yixun.lan@gmail.com Cc: huanyi.xj@alibaba-inc.com, guoren@kernel.org References: <20220914075224.2710923-1-xianting.tian@linux.alibaba.com> From: Xianting Tian In-Reply-To: <20220914075224.2710923-1-xianting.tian@linux.alibaba.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220918_232358_756622_59A885D0 X-CRM114-Status: GOOD ( 41.63 ) X-Mailman-Approved-At: Mon, 19 Sep 2022 05:59:31 -0700 X-BeenThere: kexec@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "kexec" Errors-To: kexec-bounces+kexec=archiver.kernel.org@lists.infradead.org U29ycnkgZm9yIHRoZSBkaXN0dXJiLCBDb3VsZCBJIGdldCB0aGUgY29tbWVudHMgZm9yIHRoaXMg cGF0Y2g/Cgp0aGFua3MKCuWcqCAyMDIyLzkvMTQg5LiL5Y2IMzo1MiwgWGlhbnRpbmcgVGlhbiDl hpnpgZM6Cj4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGxvYWRpbmcgdGhlIEVMRiBrZXJu ZWwgaW1hZ2UuIEl0IHBhcnNlcwo+IHRoZSBjdXJyZW50L3Byb3ZpZGVkIGRldmljZSB0cmVlIHRv IGRldGVybWluZSB0aGUgc3lzdGVtJ3MgbWVtb3J5Cj4gbGF5b3V0LCBhbmQgL3Byb2MvaW9tZW0g Zm9yIHRoZSB2YXJpb3VzIGtlcm5lbCBzZWdtZW50cy4KPgo+IFRoaXMgcGF0Y2ggd2FzIGZpcnN0 bHkgZGV2ZWxvcGVkIGJ5IE5pY2sgS29zc2lmaWRpcywgYW5kIHR3byBmaXhlcyAoCj4gICAgIDE6 IGZhaWwgdG8gZmluZCBmcmVlIG1lbW9yeSBhcmVhIGZvciBkdGIgbG9hZCB3aGVuIHVzaW5nIGlu aXRyZCBpbWFnZSwKPiAgICAgICAgbGlzdHMuaW5mcmFkZWFkLm9yZy9waXBlcm1haWwvbGludXgt cmlzY3YvMjAyMi1BdWd1c3QvMDE4Mzk4Lmh0bWw7Cj4gICAgIDI6IGZpeCBtZW1vcnkgcmFuZ2Ug c2l6ZSBjYWxjdWxhdGlvbiwKPiAgICAgICAgIGtleGVjL2FyY2gvcmlzY3YvY3Jhc2hkdW1wLXJp c2N2LmM6bGluZSA4NQo+ICkgYXJlIGNvbnRyaWJ1dGVkIGJ5IFlpeHVuIExhbiwgWGlhbnRpbmcg VGlhbi4KPgo+IFRlc3RlZCBvbiBRZW11J3MgcnY2NCB2aXJ0IG1hY2hpbmUgYW5kIFNvQyBvZiBU LUhlYWQgUklTQy1WIFh1YW50aWUgOTEwIENQVS4KPgo+IFRlc3RlZC1ieTogWWl4dW4gTGFuIDx5 aXh1bi5sYW5AZ21haWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IFhpYW50aW5nIFRpYW4gPHhpYW50 aW5nLnRpYW5AbGludXguYWxpYmFiYS5jb20+Cj4gU2lnbmVkLW9mZi1ieTogWWl4dW4gTGFuIDx5 aXh1bi5sYW5AZ21haWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IE5pY2sgS29zc2lmaWRpcyA8bWlj a0BpY3MuZm9ydGguZ3I+Cj4gLS0tCj4gICBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgIDMgKwo+ICAgaW5jbHVkZS9lbGYuaCAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAzICstCj4gICBrZXhlYy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgIDEgKwo+ICAga2V4ZWMvYXJjaC9yaXNjdi9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgIDM1 ICsrCj4gICBrZXhlYy9hcmNoL3Jpc2N2L2NyYXNoZHVtcC1yaXNjdi5jICAgICAgfCAxNDAgKysr KysrKysKPiAgIGtleGVjL2FyY2gvcmlzY3YvaW5jbHVkZS9hcmNoL29wdGlvbnMuaCB8ICA0MyAr KysKPiAgIGtleGVjL2FyY2gvcmlzY3Yva2V4ZWMtZWxmLXJpc2N2LmMgICAgICB8IDI1NSArKysr KysrKysrKysrKwo+ICAga2V4ZWMvYXJjaC9yaXNjdi9rZXhlYy1yaXNjdi5jICAgICAgICAgIHwg MzY1ICsrKysrKysrKysrKysrKysrKysKPiAgIGtleGVjL2FyY2gvcmlzY3Yva2V4ZWMtcmlzY3Yu aCAgICAgICAgICB8ICAzMiArKwo+ICAga2V4ZWMvZHQtb3BzLmMgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgNDQyICsrKysrKysrKysrKysrKysrKysrKysrLQo+ICAga2V4ZWMvZHQtb3BzLmgg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3ICsKPiAgIGtleGVjL2tleGVjLXN5c2NhbGwu aCAgICAgICAgICAgICAgICAgICB8ICAgNCArCj4gICBwdXJnYXRvcnkvTWFrZWZpbGUgICAgICAg ICAgICAgICAgICAgICAgfCAgIDEgKwo+ICAgcHVyZ2F0b3J5L2FyY2gvcmlzY3YvTWFrZWZpbGUg ICAgICAgICAgIHwgICA3ICsKPiAgIDE0IGZpbGVzIGNoYW5nZWQsIDEzMzYgaW5zZXJ0aW9ucygr KSwgMiBkZWxldGlvbnMoLSkKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBrZXhlYy9hcmNoL3Jpc2N2 L01ha2VmaWxlCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQga2V4ZWMvYXJjaC9yaXNjdi9jcmFzaGR1 bXAtcmlzY3YuYwo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGtleGVjL2FyY2gvcmlzY3YvaW5jbHVk ZS9hcmNoL29wdGlvbnMuaAo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGtleGVjL2FyY2gvcmlzY3Yv a2V4ZWMtZWxmLXJpc2N2LmMKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBrZXhlYy9hcmNoL3Jpc2N2 L2tleGVjLXJpc2N2LmMKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBrZXhlYy9hcmNoL3Jpc2N2L2tl eGVjLXJpc2N2LmgKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBwdXJnYXRvcnkvYXJjaC9yaXNjdi9N YWtlZmlsZQo+Cj4gZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwo+IGlu ZGV4IDBkODI1ZWYuLjdjYzU1YjAgMTAwNjQ0Cj4gLS0tIGEvY29uZmlndXJlLmFjCj4gKysrIGIv Y29uZmlndXJlLmFjCj4gQEAgLTU4LDYgKzU4LDkgQEAgY2FzZSAkdGFyZ2V0X2NwdSBpbgo+ICAg CWhwcGEqKQo+ICAgCQlBUkNIPSJocHBhIgo+ICAgCQk7Owo+ICsJcmlzY3YzMnxyaXNjdjY0ICkK PiArCQlBUkNIPSJyaXNjdiIKPiArCQk7Owo+ICAgCSogKQo+ICAgCQlBQ19NU0dfRVJST1IoW3Vu c3VwcG9ydGVkIGFyY2hpdGVjdHVyZSAkdGFyZ2V0X2NwdV0pCj4gICAJCTs7Cj4gZGlmZiAtLWdp dCBhL2luY2x1ZGUvZWxmLmggYi9pbmNsdWRlL2VsZi5oCj4gaW5kZXggYjc2NzdhMi4uMTIzZjE2 NyAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2VsZi5oCj4gKysrIGIvaW5jbHVkZS9lbGYuaAo+IEBA IC0yNTksNyArMjU5LDggQEAgdHlwZWRlZiBzdHJ1Y3QKPiAgICNkZWZpbmUgRU1fQVJDX0E1CTkz CQkvKiBBUkMgQ29yZXMgVGFuZ2VudC1BNSAqLwo+ICAgI2RlZmluZSBFTV9YVEVOU0EJOTQJCS8q IFRlbnNpbGljYSBYdGVuc2EgQXJjaGl0ZWN0dXJlICovCj4gICAjZGVmaW5lIEVNX0FBUkNINjQJ MTgzCQkvKiBBUk0gQUFSQ0g2NCAqLwo+IC0jZGVmaW5lIEVNX05VTQkJMTg0Cj4gKyNkZWZpbmUg RU1fUklTQ1YJMjQzCQkvKiBSSVNDLVYgKi8KPiArI2RlZmluZSBFTV9OVU0JCTI0NAo+ICAgCj4g ICAvKiBJZiBpdCBpcyBuZWNlc3NhcnkgdG8gYXNzaWduIG5ldyB1bm9mZmljaWFsIEVNXyogdmFs dWVzLCBwbGVhc2UKPiAgICAgIHBpY2sgbGFyZ2UgcmFuZG9tIG51bWJlcnMgKDB4ODUyMywgMHhh N2YyLCBldGMuKSB0byBtaW5pbWl6ZSB0aGUKPiBkaWZmIC0tZ2l0IGEva2V4ZWMvTWFrZWZpbGUg Yi9rZXhlYy9NYWtlZmlsZQo+IGluZGV4IGU2OWUzMDkuLmNhMTc4MzEgMTAwNjQ0Cj4gLS0tIGEv a2V4ZWMvTWFrZWZpbGUKPiArKysgYi9rZXhlYy9NYWtlZmlsZQo+IEBAIC04OCw2ICs4OCw3IEBA IGluY2x1ZGUgJChzcmNkaXIpL2tleGVjL2FyY2gvbWlwcy9NYWtlZmlsZQo+ICAgaW5jbHVkZSAk KHNyY2Rpcikva2V4ZWMvYXJjaC9jcmlzL01ha2VmaWxlCj4gICBpbmNsdWRlICQoc3JjZGlyKS9r ZXhlYy9hcmNoL3BwYy9NYWtlZmlsZQo+ICAgaW5jbHVkZSAkKHNyY2Rpcikva2V4ZWMvYXJjaC9w cGM2NC9NYWtlZmlsZQo+ICtpbmNsdWRlICQoc3JjZGlyKS9rZXhlYy9hcmNoL3Jpc2N2L01ha2Vm aWxlCj4gICBpbmNsdWRlICQoc3JjZGlyKS9rZXhlYy9hcmNoL3MzOTAvTWFrZWZpbGUKPiAgIGlu Y2x1ZGUgJChzcmNkaXIpL2tleGVjL2FyY2gvc2gvTWFrZWZpbGUKPiAgIGluY2x1ZGUgJChzcmNk aXIpL2tleGVjL2FyY2gveDg2XzY0L01ha2VmaWxlCj4gZGlmZiAtLWdpdCBhL2tleGVjL2FyY2gv cmlzY3YvTWFrZWZpbGUgYi9rZXhlYy9hcmNoL3Jpc2N2L01ha2VmaWxlCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5mMjZjYzkwCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L2tleGVjL2FyY2gvcmlzY3YvTWFrZWZpbGUKPiBAQCAtMCwwICsxLDM1IEBACj4gKyMKPiArIyBr ZXhlYyByaXNjdgo+ICsjCj4gK3Jpc2N2X0tFWEVDX1NSQ1MgPSAga2V4ZWMvYXJjaC9yaXNjdi9r ZXhlYy1yaXNjdi5jCj4gK3Jpc2N2X0tFWEVDX1NSQ1MgKz0ga2V4ZWMvYXJjaC9yaXNjdi9rZXhl Yy1lbGYtcmlzY3YuYwo+ICtyaXNjdl9LRVhFQ19TUkNTICs9IGtleGVjL2FyY2gvcmlzY3YvY3Jh c2hkdW1wLXJpc2N2LmMKPiArCj4gK3Jpc2N2X01FTV9SRUdJT05TID0ga2V4ZWMvbWVtX3JlZ2lv bnMuYwo+ICsKPiArcmlzY3ZfRFRfT1BTICs9IGtleGVjL2R0LW9wcy5jCj4gKwo+ICtyaXNjdl9B UkNIX1JFVVNFX0lOSVRSRCA9Cj4gKwo+ICtyaXNjdl9DUFBGTEFHUyArPSAtSSAkKHNyY2Rpcikv a2V4ZWMvCj4gKwo+ICtkaXN0ICs9IGtleGVjL2FyY2gvcmlzY3YvTWFrZWZpbGUgJChyaXNjdl9L RVhFQ19TUkNTKQkJCVwKPiArCWtleGVjL2FyY2gvcmlzY3Yva2V4ZWMtcmlzY3YuaAkJCQkJXAo+ ICsJa2V4ZWMvYXJjaC9yaXNjdi9pbmNsdWRlL2FyY2gvb3B0aW9ucy5oCj4gKwo+ICtpZmRlZiBI QVZFX0xJQkZEVAo+ICsKPiArTElCUyArPSAtbGZkdAo+ICsKPiArZWxzZQo+ICsKPiAraW5jbHVk ZSAkKHNyY2Rpcikva2V4ZWMvbGliZmR0L01ha2VmaWxlLmxpYmZkdAo+ICsKPiArbGliZmR0X1NS Q1MgKz0gJChMSUJGRFRfU1JDUzolPWtleGVjL2xpYmZkdC8lKQo+ICsKPiArcmlzY3ZfQ1BQRkxB R1MgKz0gLUkkKHNyY2Rpcikva2V4ZWMvbGliZmR0Cj4gKwo+ICtyaXNjdl9LRVhFQ19TUkNTICs9 ICQobGliZmR0X1NSQ1MpCj4gKwo+ICtlbmRpZgo+ICsKPiBkaWZmIC0tZ2l0IGEva2V4ZWMvYXJj aC9yaXNjdi9jcmFzaGR1bXAtcmlzY3YuYyBiL2tleGVjL2FyY2gvcmlzY3YvY3Jhc2hkdW1wLXJp c2N2LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjNlZDRmZTMKPiAt LS0gL2Rldi9udWxsCj4gKysrIGIva2V4ZWMvYXJjaC9yaXNjdi9jcmFzaGR1bXAtcmlzY3YuYwo+ IEBAIC0wLDAgKzEsMTQwIEBACj4gKyNpbmNsdWRlIDxlcnJuby5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvZWxmLmg+Cj4gKyNpbmNsdWRlIDx1bmlzdGQuaD4KPiArCj4gKyNpbmNsdWRlICJrZXhlYy5o Igo+ICsjaW5jbHVkZSAiY3Jhc2hkdW1wLmgiCj4gKyNpbmNsdWRlICJrZXhlYy1lbGYuaCIKPiAr I2luY2x1ZGUgIm1lbV9yZWdpb25zLmgiCj4gKwo+ICtzdGF0aWMgc3RydWN0IGNyYXNoX2VsZl9p bmZvIGVsZl9pbmZvID0gewo+ICsjaWYgX19yaXNjdl94bGVuID09IDY0Cj4gKwkuY2xhc3MJCT0g RUxGQ0xBU1M2NCwKPiArI2Vsc2UKPiArCS5jbGFzcwkJPSBFTEZDTEFTUzMyLAo+ICsjZW5kaWYK PiArCS5kYXRhCQk9IEVMRkRBVEEyTFNCLAo+ICsJLm1hY2hpbmUJPSBFTV9SSVNDViwKPiArfTsK PiArCj4gK3N0YXRpYyBzdHJ1Y3QgbWVtb3J5X3JhbmdlcyBjcmFzaF9tZW1fcmFuZ2VzID0gezB9 Owo+ICtzdHJ1Y3QgbWVtb3J5X3JhbmdlIGVsZmNvcmVoZHJfbWVtID0gezB9Owo+ICsKPiArc3Rh dGljIHVuc2lnbmVkIGxvbmcgbG9uZyBnZXRfcGFnZV9vZmZzZXQoc3RydWN0IGtleGVjX2luZm8g KmluZm8pCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWRkcl9vZmYgPSAwOwo+ICsJdW5z aWduZWQgbG9uZyBsb25nIHBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKPiArCXVu c2lnbmVkIGxvbmcgbG9uZyBpbml0X3N0YXJ0ID0gZ2V0X2tlcm5lbF9zeW0oIl9zaW5pdHRleHQi KTsKPiArCj4gKwkvKgo+ICsJICogQmVnaW5pbmcgb2YgaW5pdCBzZWN0aW9uIGlzIGFsaWduZWQg dG8gcGFnZSBzaXplCj4gKwkgKi8KPiArCXZhZGRyX29mZiA9IGluaXRfc3RhcnQgLSBwYWdlX3Np emU7Cj4gKwo+ICsJcmV0dXJuIHZhZGRyX29mZjsKPiArfQo+ICsKPiAraW50IGxvYWRfZWxmY29y ZWhkcihzdHJ1Y3Qga2V4ZWNfaW5mbyAqaW5mbykKPiArewo+ICsJc3RydWN0IG1lbW9yeV9yYW5n ZSBjcmFzaGtlcm5fcmFuZ2UgPSB7MH07Cj4gKwlzdHJ1Y3QgbWVtb3J5X3JhbmdlICpyYW5nZXMg PSBOVUxMOwo+ICsJdW5zaWduZWQgbG9uZyBzdGFydCA9IDA7Cj4gKwl1bnNpZ25lZCBsb25nIGVu ZCA9IDA7Cj4gKwl1bnNpZ25lZCBsb25nIGJ1Zl9zaXplID0gMDsKPiArCXVuc2lnbmVkIGxvbmcg ZWxmY29yZWhkcl9hZGRyID0gMDsKPiArCXZvaWQqIGJ1ZiA9IE5VTEw7Cj4gKwlpbnQgaSA9IDA7 Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlyZXQgPSBwYXJzZV9pb21lbV9zaW5nbGUoIktlcm5l bCBjb2RlXG4iLCAmc3RhcnQsIE5VTEwpOwo+ICsJaWYgKHJldCkgewo+ICsJCWZwcmludGYoc3Rk ZXJyLCAiQ2Fubm90IGRldGVybWluZSBrZXJuZWwgcGh5c2ljYWwgYmFzZSBhZGRyXG4iKTsKPiAr CQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCWVsZl9pbmZvLmtlcm5fcGFkZHJfc3RhcnQgPSBz dGFydDsKPiArCj4gKwlyZXQgPSBwYXJzZV9pb21lbV9zaW5nbGUoIktlcm5lbCBic3NcbiIsIE5V TEwsICZlbmQpOwo+ICsJaWYgKHJldCkgewo+ICsJCWZwcmludGYoc3RkZXJyLCAiQ2Fubm90IGRl dGVybWluZSBrZXJuZWwgcGh5c2ljYWwgYnNzIGFkZHJcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFM Owo+ICsJfQo+ICsJZWxmX2luZm8ua2Vybl9wYWRkcl9zdGFydCA9IHN0YXJ0Owo+ICsJZWxmX2lu Zm8ua2Vybl9zaXplID0gZW5kIC0gc3RhcnQ7Cj4gKwo+ICsJZWxmX2luZm8ua2Vybl92YWRkcl9z dGFydCA9IGdldF9rZXJuZWxfc3ltKCJfdGV4dCIpOwo+ICsJaWYgKCFlbGZfaW5mby5rZXJuX3Zh ZGRyX3N0YXJ0KSB7Cj4gKwkJZWxmX2luZm8ua2Vybl92YWRkcl9zdGFydCA9IFVJTlQ2NF9NQVg7 Cj4gKwl9Cj4gKwo+ICsJZWxmX2luZm8ucGFnZV9vZmZzZXQgPSBnZXRfcGFnZV9vZmZzZXQoaW5m byk7Cj4gKwlkYmdwcmludGYoInBhZ2Vfb2Zmc2V0OiAgICUwMTZsbHhcbiIsIGVsZl9pbmZvLnBh Z2Vfb2Zmc2V0KTsKPiArCj4gKwlyZXQgPSBwYXJzZV9pb21lbV9zaW5nbGUoIkNyYXNoIGtlcm5l bFxuIiwgJnN0YXJ0LCAmZW5kKTsKPiArCWlmIChyZXQpIHsKPiArCQlmcHJpbnRmKHN0ZGVyciwg IkNhbm5vdCBkZXRlcm1pbmUga2VybmVsIHBoeXNpY2FsIGJzcyBhZGRyXG4iKTsKPiArCQlyZXR1 cm4gLUVJTlZBTDsKPiArCX0KPiArCWNyYXNoa2Vybl9yYW5nZS5zdGFydCA9IHN0YXJ0Owo+ICsJ Y3Jhc2hrZXJuX3JhbmdlLmVuZCA9IGVuZDsKPiArCWNyYXNoa2Vybl9yYW5nZS50eXBlID0gUkFO R0VfUkVTRVJWRUQ7Cj4gKwo+ICsJcmFuZ2VzID0gaW5mby0+bWVtb3J5X3JhbmdlOwo+ICsJZm9y IChpID0gMDsgaSA8IGluZm8tPm1lbW9yeV9yYW5nZXM7IGkrKykgewo+ICsJCXJldCA9IG1lbV9y ZWdpb25zX2FsbG9jX2FuZF9hZGQoJmNyYXNoX21lbV9yYW5nZXMsCj4gKwkJCQkJCXJhbmdlc1tp XS5zdGFydCwKPiArCQkJCQkJcmFuZ2VzW2ldLmVuZCAtIHJhbmdlc1tpXS5zdGFydCArIDEsCj4g KwkJCQkJCXJhbmdlc1tpXS50eXBlKTsKPiArCQlpZiAocmV0ICkgewo+ICsJCQlmcHJpbnRmKHN0 ZGVyciwgIkNvdWxkIG5vdCBjcmVhdGUgY3Jhc2hfbWVtX3Jhbmdlc1xuIik7Cj4gKwkJCXJldHVy biByZXQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldCA9IG1lbV9yZWdpb25zX2FsbG9jX2FuZF9l eGNsdWRlKCZjcmFzaF9tZW1fcmFuZ2VzLAo+ICsJCQkJCSAgICAmY3Jhc2hrZXJuX3JhbmdlKTsK PiArCWlmIChyZXQpIHsKPiArCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBleGNsdWRlIGNy YXNoa2Vybl9yYW5nZVxuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKyNpZiBfX3Jp c2N2X3hsZW4gPT0gNjQKPiArCWNyYXNoX2NyZWF0ZV9lbGY2NF9oZWFkZXJzKGluZm8sICZlbGZf aW5mbywgY3Jhc2hfbWVtX3Jhbmdlcy5yYW5nZXMsCj4gKwkJCQkgICBjcmFzaF9tZW1fcmFuZ2Vz LnNpemUsICZidWYsICZidWZfc2l6ZSwKPiArCQkJCSAgIEVMRl9DT1JFX0hFQURFUl9BTElHTik7 Cj4gKwo+ICsjZWxzZQo+ICsJY3Jhc2hfY3JlYXRlX2VsZjMyX2hlYWRlcnMoaW5mbywgJmVsZl9p bmZvLCBjcmFzaF9tZW1fcmFuZ2VzLnJhbmdlcywKPiArCQkJCSAgIGNyYXNoX21lbV9yYW5nZXMu c2l6ZSwgJmJ1ZiwgJmJ1Zl9zaXplLAo+ICsJCQkJICAgRUxGX0NPUkVfSEVBREVSX0FMSUdOKTsK PiArI2VuZGlmCj4gKwo+ICsKPiArCWVsZmNvcmVoZHJfYWRkciA9IGFkZF9idWZmZXJfcGh5c192 aXJ0KGluZm8sIGJ1ZiwgYnVmX3NpemUsCj4gKwkJCQkJICAgICAgIGJ1Zl9zaXplLCAwLAo+ICsJ CQkJCSAgICAgICBjcmFzaGtlcm5fcmFuZ2Uuc3RhcnQsCj4gKwkJCQkJICAgICAgIGNyYXNoa2Vy bl9yYW5nZS5lbmQsCj4gKwkJCQkJICAgICAgIC0xLCAwKTsKPiArCj4gKwllbGZjb3JlaGRyX21l bS5zdGFydCA9IGVsZmNvcmVoZHJfYWRkcjsKPiArCWVsZmNvcmVoZHJfbWVtLmVuZCA9IGVsZmNv cmVoZHJfYWRkciArIGJ1Zl9zaXplIC0gMTsKPiArCj4gKwlkYmdwcmludGYoIiVzOiBlbGZjb3Jl aGRyIDB4JWxseC0weCVsbHhcbiIsIF9fZnVuY19fLAo+ICsJCSAgZWxmY29yZWhkcl9tZW0uc3Rh cnQsIGVsZmNvcmVoZHJfbWVtLmVuZCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2lu dCBpc19jcmFzaGtlcm5lbF9tZW1fcmVzZXJ2ZWQodm9pZCkKPiArewo+ICsJdWludDY0X3Qgc3Rh cnQgPSAwOwo+ICsJdWludDY0X3QgZW5kID0gMDsKPiArCj4gKwlyZXR1cm4gcGFyc2VfaW9tZW1f c2luZ2xlKCJDcmFzaCBrZXJuZWxcbiIsICZzdGFydCwgJmVuZCkgPT0gMCA/Cj4gKwkgICAgICAg KHN0YXJ0ICE9IGVuZCkgOiAwOwo+ICt9Cj4gKwo+ICtpbnQgZ2V0X2NyYXNoX2tlcm5lbF9sb2Fk X3JhbmdlKHVpbnQ2NF90ICpzdGFydCwgdWludDY0X3QgKmVuZCkKPiArewo+ICsJcmV0dXJuIHBh cnNlX2lvbWVtX3NpbmdsZSgiQ3Jhc2gga2VybmVsXG4iLCBzdGFydCwgZW5kKTsKPiArfQo+ICsK PiBkaWZmIC0tZ2l0IGEva2V4ZWMvYXJjaC9yaXNjdi9pbmNsdWRlL2FyY2gvb3B0aW9ucy5oIGIv a2V4ZWMvYXJjaC9yaXNjdi9pbmNsdWRlL2FyY2gvb3B0aW9ucy5oCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwLi43YzI0MTg0Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2tl eGVjL2FyY2gvcmlzY3YvaW5jbHVkZS9hcmNoL29wdGlvbnMuaAo+IEBAIC0wLDAgKzEsNDMgQEAK PiArI2lmbmRlZiBLRVhFQ19BUkNIX1JJU0NWX09QVElPTlNfSAo+ICsjZGVmaW5lIEtFWEVDX0FS Q0hfUklTQ1ZfT1BUSU9OU19ICj4gKwo+ICsjZGVmaW5lIE9QVF9BUFBFTkQJCSgoT1BUX01BWCkr MCkKPiArI2RlZmluZSBPUFRfRFRCCQkJKChPUFRfTUFYKSsxKQo+ICsjZGVmaW5lIE9QVF9JTklU UkQJCSgoT1BUX01BWCkrMikKPiArI2RlZmluZSBPUFRfQ01ETElORQkJKChPUFRfTUFYKSszKQo+ ICsjZGVmaW5lIE9QVF9SRVVTRV9DTURMSU5FCSgoT1BUX01BWCkrNCkKPiArI2RlZmluZSBPUFRf QVJDSF9NQVgJCSgoT1BUX01BWCkrNSkKPiArCj4gKy8qIE9wdGlvbnMgcmVsZXZhbnQgdG8gdGhl IGFyY2hpdGVjdHVyZSAoZXhjbHVkaW5nIGxvYWRlci1zcGVjaWZpYyBvbmVzKSwKPiArICogaW4g dGhpcyBjYXNlIG5vbmU6Cj4gKyAqLwo+ICsjZGVmaW5lIEtFWEVDX0FSQ0hfT1BUSU9OUyBcCj4g KwlLRVhFQ19PUFRJT05TIFwKPiArCXsgImFwcGVuZCIsCQkxLCAwLCBPUFRfQVBQRU5EfSwgXAo+ ICsJeyAiZHRiIiwJCTEsIDAsIE9QVF9EVEIgfSwgXAo+ICsJeyAiaW5pdHJkIiwJCTEsIDAsIE9Q VF9JTklUUkQgfSwgXAo+ICsJeyAiY29tbWFuZC1saW5lIiwJMSwgMCwgT1BUX0NNRExJTkV9LCBc Cj4gKwl7ICJyZXVzZS1jbWRsaW5lIiwJMCwgTlVMTCwgT1BUX1JFVVNFX0NNRExJTkUgfSwgXAo+ ICsKPiArCj4gKyNkZWZpbmUgS0VYRUNfQVJDSF9PUFRfU1RSIEtFWEVDX09QVF9TVFIgIiIKPiAr Cj4gKy8qIFRoZSBmb2xsb3dpbmcgdHdvICNkZWZpbmVzIGxpc3QgQUxMIG9mIHRoZSBvcHRpb25z IGFkZGVkIGJ5IGFsbCBvZiB0aGUKPiArICogYXJjaGl0ZWN0dXJlJ3MgbG9hZGVycy4KPiArICog bwltYWluKCkgdXNlcyB0aGlzIGNvbXBsZXRlIGxpc3QgdG8gc2NhbiBmb3IgaXRzIG9wdGlvbnMs IGlnbm9yaW5nCj4gKyAqCWFyY2gtc3BlY2lmaWMvbG9hZGVyLXNwZWNpZmljIG9uZXMuCj4gKyAq IG8JVGhlbiwgYXJjaF9wcm9jZXNzX29wdGlvbnMoKSB1c2VzIHRoaXMgY29tcGxldGUgbGlzdCB0 byBzY2FuIGZvciBpdHMKPiArICoJb3B0aW9ucywgaWdub3JpbmcgZ2VuZXJhbC9sb2FkZXItc3Bl Y2lmaWMgb25lcy4KPiArICogbwlUaGVuLCB0aGUgZmlsZV90eXBlW25dLmxvYWQgcmUtc2NhbnMg Zm9yIG9wdGlvbnMsIHVzaW5nCj4gKyAqCUtFWEVDX0FSQ0hfT1BUSU9OUyBwbHVzIGl0cyBsb2Fk ZXItc3BlY2lmaWMgb3B0aW9ucyBzdWJzZXQuCj4gKyAqCUFueSB1bnJlY29nbmlzZWQgb3B0aW9u cyBjYXVzZSBhbiBlcnJvciBoZXJlLgo+ICsgKgo+ICsgKiBUaGlzIGlzIGRvbmUgc28gdGhhdCBt YWluKCkncy9hcmNoX3Byb2Nlc3Nfb3B0aW9ucygpJ3MgZ2V0b3B0X2xvbmcoKSBjYWxscwo+ICsg KiBkb24ndCBjaG9vc2UgYSBrZXJuZWwgZmlsZW5hbWUgZnJvbSByYW5kb20gYXJndW1lbnRzIHRv IG9wdGlvbnMgdGhleSBkb24ndAo+ICsgKiByZWNvZ25pc2UgLS0gYXMgdGhleSBub3cgcmVjb2du aXNlIChpZiBub3QgYWN0IHVwb24pIGFsbCBwb3NzaWJsZSBvcHRpb25zLgo+ICsgKi8KPiArI2Rl ZmluZSBLRVhFQ19BTExfT1BUSU9OUyBLRVhFQ19BUkNIX09QVElPTlMKPiArCj4gKyNkZWZpbmUg S0VYRUNfQUxMX09QVF9TVFIgS0VYRUNfQVJDSF9PUFRfU1RSCj4gKwo+ICsjZW5kaWYgLyogS0VY RUNfQVJDSF9SSVNDVl9PUFRJT05TX0ggKi8KPiBkaWZmIC0tZ2l0IGEva2V4ZWMvYXJjaC9yaXNj di9rZXhlYy1lbGYtcmlzY3YuYyBiL2tleGVjL2FyY2gvcmlzY3Yva2V4ZWMtZWxmLXJpc2N2LmMK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmYzYzAxMWMKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIva2V4ZWMvYXJjaC9yaXNjdi9rZXhlYy1lbGYtcmlzY3YuYwo+IEBAIC0w LDAgKzEsMjU1IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCj4g Ky8qCj4gKyAqIENvcHlyaWdodCAoQykgMjAxOSBGT1JUSC1JQ1MvQ0FSVgo+ICsgKiAgICAgICAg ICAgICAgTmljayBLb3NzaWZpZGlzIDxtaWNrQGljcy5mb3J0aC5ncj4KPiArICovCj4gKwo+ICsj aW5jbHVkZSAia2V4ZWMuaCIKPiArI2luY2x1ZGUgImR0LW9wcy5oIgkJLyogRm9yIGR0Yl9zZXQv Y2xlYXJfaW5pdHJkKCkgKi8KPiArI2luY2x1ZGUgPGVsZi5oPgkJLyogRm9yIEVMRiBoZWFkZXIg aGFuZGxpbmcgKi8KPiArI2luY2x1ZGUgPGVycm5vLmg+CQkvKiBGb3IgRUZCSUcvRUlOVkFMICov Cj4gKyNpbmNsdWRlIDx1bmlzdGQuaD4JCS8qIEZvciBnZXRwYWdlc2l6ZSgpICovCj4gKyNpbmNs dWRlICJrZXhlYy1zeXNjYWxsLmgiCS8qIEZvciBLRVhFQ19PTl9DUkFTSCAqLwo+ICsjaW5jbHVk ZSAia2V4ZWMtcmlzY3YuaCIKPiArCj4gKwo+ICsvKioqKioqKioqXAo+ICsqIEhFTFBFUlMgKgo+ ICtcKioqKioqKioqLwo+ICsKPiArLyoKPiArICogR28gdGhyb3VnaCB0aGUgYXZhaWxhYmxlIHBo eXNpY2FsIG1lbW9yeSByZWdpb25zIGFuZAo+ICsgKiBmaW5kIG9uZSB0aGF0IGNhbiBob2xkIGFu IGltYWdlIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZS4KPiArICogTm90ZTogVGhpcyBpcyBjYWxsZWQg YWZ0ZXIgZ2V0X21lbW9yeV9yYW5nZXMgc28KPiArICogaW5mby0+bWVtb3J5X3JhbmdlW10gc2hv dWxkIGJlIHBvcHVsYXRlZC4gQWxzbyBub3RlIHRoYXQKPiArICogbWVtb3J5IHJhbmdlcyBhcmUg c29ydGVkLCBzbyB3ZSdsbCByZXR1cm4gdGhlIGZpcnN0IHJlZ2lvbgo+ICsgKiB0aGF0J3MgYmln IGVub3VnaCBmb3IgaG9sZGluZyB0aGUgaW1hZ2UuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGVsZl9y aXNjdl9maW5kX3BiYXNlKHN0cnVjdCBrZXhlY19pbmZvICppbmZvLCBvZmZfdCAqYWRkciwKPiAr CQkJCW9mZl90IHNpemUpCj4gK3sKPiArCWludCBpID0gMDsKPiArCW9mZl90IHN0YXJ0ID0gMDsK PiArCW9mZl90IGVuZCA9IDA7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwkvKgo+ICsJICogSWYg dGhpcyBpbWFnZSBpcyBmb3IgYSBjcmFzaCBrZXJuZWwsIHVzZSB0aGUgcmVnaW9uCj4gKwkgKiB0 aGUgcHJpbWFyeSBrZXJuZWwgaGFzIGFscmVhZHkgcmVzZXJ2ZWQgZm9yIHVzLgo+ICsJICovCj4g KwlpZiAoaW5mby0+a2V4ZWNfZmxhZ3MgJiBLRVhFQ19PTl9DUkFTSCkgewo+ICsJCXJldCA9IGdl dF9jcmFzaF9rZXJuZWxfbG9hZF9yYW5nZSgodWludDY0X3QgKikgJnN0YXJ0LAo+ICsJCQkJCQkg ICh1aW50NjRfdCAqKSAmZW5kKTsKPiArCQlpZiAoIXJldCkgewo+ICsJCQkvKgo+ICsJCQkgKiBL ZXJuZWwgc2hvdWxkIGJlIGFsaWduZWQgdG8gdGhlIG5lYXJlc3QKPiArCQkJICogaHVnZXBhZ2Ug KDJNQiBmb3IgUlY2NCwgNE1CIGZvciBSVjMyKS4KPiArCQkJICovCj4gKyNpZiBfX3Jpc2N2X3hs ZW4gPT0gNjQKPiArCQkJc3RhcnQgPSBfQUxJR05fVVAoc3RhcnQsIDB4MjAwMDAwKTsKPiArI2Vs c2UKPiArCQkJc3RhcnQgPSBfQUxJR05fVVAoc3RhcnQsIDB4NDAwMDAwKTsKPiArI2VuZGlmCj4g KwkJCWlmIChlbmQgPiBzdGFydCAmJiAoKGVuZCAtIHN0YXJ0KSA+PSBzaXplKSkgewo+ICsJCQkJ KmFkZHIgPSBzdGFydDsKPiArCQkJCXJldHVybiAwOwo+ICsJCQl9Cj4gKwo+ICsJCQlyZXR1cm4g LUVGQklHOwo+ICsJCX0gZWxzZQo+ICsJCQlyZXR1cm4gRU5PQ1JBU0hLRVJORUw7Cj4gKwl9Cj4g Kwo+ICsJZm9yIChpID0gMDsgaSA8IGluZm8tPm1lbW9yeV9yYW5nZXM7IGkrKykgewo+ICsJCWlm IChpbmZvLT5tZW1vcnlfcmFuZ2VbaV0udHlwZSAhPSBSQU5HRV9SQU0pCj4gKwkJCWNvbnRpbnVl Owo+ICsKPiArCQlzdGFydCA9IGluZm8tPm1lbW9yeV9yYW5nZVtpXS5zdGFydDsKPiArCQllbmQg PSBpbmZvLT5tZW1vcnlfcmFuZ2VbaV0uZW5kOwo+ICsKPiArI2lmIF9fcmlzY3ZfeGxlbiA9PSA2 NAo+ICsJCXN0YXJ0ID0gX0FMSUdOX1VQKHN0YXJ0LCAweDIwMDAwMCk7Cj4gKyNlbHNlCj4gKwkJ c3RhcnQgPSBfQUxJR05fVVAoc3RhcnQsIDB4NDAwMDAwKTsKPiArI2VuZGlmCj4gKwo+ICsJCWlm IChlbmQgPiBzdGFydCAmJiAoKGVuZCAtIHN0YXJ0KSA+PSBzaXplKSkgewo+ICsJCQkqYWRkciA9 IHN0YXJ0Owo+ICsJCQlyZXR1cm4gMDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIC1FRkJJ RzsKPiArfQo+ICsKPiArLyoqKioqKioqKioqKioqXAo+ICsqIEVOVFJZIFBPSU5UUyAqCj4gK1wq KioqKioqKioqKioqKi8KPiArCj4gK2ludCBlbGZfcmlzY3ZfcHJvYmUoY29uc3QgY2hhciAqYnVm LCBvZmZfdCBsZW4pCj4gK3sKPiArCXN0cnVjdCBtZW1fZWhkciBlaGRyID0gezB9Owo+ICsJaW50 IHJldCA9IDA7Cj4gKwo+ICsJcmV0ID0gYnVpbGRfZWxmX2V4ZWNfaW5mbyhidWYsIGxlbiwgJmVo ZHIsIDApOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJZ290byBjbGVhbnVwOwo+ICsKPiArCWlmIChl aGRyLmVfbWFjaGluZSAhPSBFTV9SSVNDVikgewo+ICsJCWZwcmludGYoc3RkZXJyLCAiTm90IGZv ciB0aGlzIGFyY2hpdGVjdHVyZS5cbiIpOwo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJZ290byBj bGVhbnVwOwo+ICsJfQo+ICsKPiArCXJldCA9IDA7Cj4gKwo+ICsgY2xlYW51cDoKPiArCWZyZWVf ZWxmX2luZm8oJmVoZHIpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArdm9pZCBlbGZfcmlz Y3ZfdXNhZ2Uodm9pZCkKPiArewo+ICt9Cj4gKwo+ICtpbnQgZWxmX3Jpc2N2X2xvYWQoaW50IGFy Z2MsIGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpidWYsIG9mZl90IGxlbiwKPiArCQkgICBzdHJ1 Y3Qga2V4ZWNfaW5mbyAqaW5mbykKPiArewo+ICsJc3RydWN0IG1lbV9laGRyIGVoZHIgPSB7MH07 Cj4gKwlzdHJ1Y3QgbWVtX3BoZHIgKnBoZHIgPSBOVUxMOwo+ICsJb2ZmX3QgbmV3X2Jhc2VfYWRk ciA9IDA7Cj4gKwlvZmZfdCBrZXJuZWxfc2l6ZSA9IDA7Cj4gKwlvZmZfdCBwYWdlX3NpemUgPSBn ZXRwYWdlc2l6ZSgpOwo+ICsJb2ZmX3QgbWF4X2FkZHIgPSAwOwo+ICsJb2ZmX3Qgb2xkX2Jhc2Vf YWRkciA9IDA7Cj4gKwlvZmZfdCBvbGRfc3RhcnRfYWRkciA9IDA7Cj4gKwlpbnQgaSA9IDA7Cj4g KwlpbnQgcmV0ID0gMDsKPiArCj4gKwlpZiAoaW5mby0+ZmlsZV9tb2RlKSB7Cj4gKwkJZnByaW50 ZihzdGRlcnIsICJrZXhlY19maWxlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyAiCj4gKwkJCQkiYXJj aGl0ZWN0dXJlXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwkvKiBQYXJz ZSB0aGUgRUxGIGZpbGUgKi8KPiArCXJldCA9IGJ1aWxkX2VsZl9leGVjX2luZm8oYnVmLCBsZW4s ICZlaGRyLCAwKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZnByaW50ZihzdGRlcnIsICJFTEYg ZXhlYyBwYXJzZSBmYWlsZWRcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiAr CW1heF9hZGRyID0gZWxmX21heF9hZGRyKCZlaGRyKTsKPiArCW9sZF9iYXNlX2FkZHIgPSBtYXhf YWRkcjsKPiArCW9sZF9zdGFydF9hZGRyID0gbWF4X2FkZHI7Cj4gKwo+ICsJLyoKPiArCSAqIEdl dCB0aGUgbWVtb3J5IGZvb3RwcmludCwgYmFzZSBwaHlzaWNhbAo+ICsJICogYW5kIHN0YXJ0IGFk ZHJlc3Mgb2YgdGhlIEVMRiBpbWFnZQo+ICsJICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgZWhkci5l X3BobnVtOyBpKyspIHsKPiArCQlwaGRyID0gJmVoZHIuZV9waGRyW2ldOwo+ICsJCWlmIChwaGRy LT5wX3R5cGUgIT0gUFRfTE9BRCkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCS8qCj4gKwkJICog Tm90ZTogQWNjb3JkaW5nIHRvIEVMRiBzcGVjIHRoZSBsb2FkYWJsZSByZWdpb25zCj4gKwkJICog YXJlIHNvcnRlZCBvbiBwX3ZhZGRyLCBub3QgcF9wYWRkci4KPiArCQkgKi8KPiArCQlpZiAob2xk X2Jhc2VfYWRkciA+IHBoZHItPnBfcGFkZHIpCj4gKwkJCW9sZF9iYXNlX2FkZHIgPSBwaGRyLT5w X3BhZGRyOwo+ICsKPiArCQlpZiAocGhkci0+cF92YWRkciA9PSBlaGRyLmVfZW50cnkgfHwKPiAr CQkgICAgcGhkci0+cF9wYWRkciA9PSBlaGRyLmVfZW50cnkpCj4gKwkJCW9sZF9zdGFydF9hZGRy ID0gcGhkci0+cF9wYWRkcjsKPiArCj4gKwkJa2VybmVsX3NpemUgKz0gX0FMSUdOX1VQKHBoZHIt PnBfbWVtc3osIHBhZ2Vfc2l6ZSk7Cj4gKwl9Cj4gKwo+ICsJaWYgKG9sZF9iYXNlX2FkZHIgPT0g bWF4X2FkZHIgfHwga2VybmVsX3NpemUgPT0gMCkgewo+ICsJCWZwcmludGYoc3RkZXJyLCAiTm8g bG9hZGFibGUgc2VnbWVudHMgcHJlc2VudCBvbiB0aGUgIgo+ICsJCQkJInByb3ZpZGVkIEVMRiBp bWFnZVxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaWYgKG9sZF9zdGFy dF9hZGRyID09IG1heF9hZGRyKSB7Cj4gKwkJZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgZmlu ZCB0aGUgZW50cnkgcG9pbnQgYWRkcmVzcyBvZiAiCj4gKwkJCQkicHJvdmlkZWQgRUxGIGltYWdl XG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlkYmdwcmludGYoIkdvdCBF TEYgd2l0aCB0b3RhbCBtZW1zeiAlbHVLQlxuIgo+ICsJCSAgIkJhc2UgcGFkZHI6IDB4JWxYLCBz dGFydF9hZGRyOiAweCVsWFxuIiwKPiArCQkgIGtlcm5lbF9zaXplIC8gMTAyNCwgb2xkX2Jhc2Vf YWRkciwgb2xkX3N0YXJ0X2FkZHIpOwo+ICsKPiArCS8qIEdldCBhIGNvbnRpbnVvdXMgcGh5c2lj YWwgcmVnaW9uIHRoYXQgY2FuIGhvbGQgdGhlIGtlcm5lbCAqLwo+ICsJcmV0ID0gZWxmX3Jpc2N2 X2ZpbmRfcGJhc2UoaW5mbywgJm5ld19iYXNlX2FkZHIsIGtlcm5lbF9zaXplKTsKPiArCWlmIChy ZXQgPCAwKSB7Cj4gKwkJZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgZmluZCBhIG1lbW9yeSBy ZWdpb24gZm9yIHRoZSAiCj4gKwkJCQkicHJvdmlkZWQgRUxGIGltYWdlXG4iKTsKPiArCQlyZXR1 cm4gcmV0Owo+ICsJfQo+ICsKPiArCWRiZ3ByaW50ZigiTmV3IGJhc2UgcGFkZHIgZm9yIHRoZSBF TEY6IDB4JWxYXG4iLCBuZXdfYmFzZV9hZGRyKTsKPiArCj4gKwkvKiBSZS1zZXQgdGhlIGJhc2Ug cGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgRUxGICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgZWhkci5l X3BobnVtOyBpKyspIHsKPiArCQlwaGRyID0gJmVoZHIuZV9waGRyW2ldOwo+ICsJCWlmIChwaGRy LT5wX3R5cGUgIT0gUFRfTE9BRCkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCXBoZHItPnBfcGFk ZHIgLT0gb2xkX2Jhc2VfYWRkcjsKPiArCQlwaGRyLT5wX3BhZGRyICs9IG5ld19iYXNlX2FkZHI7 Cj4gKwl9Cj4gKwo+ICsJLyogUmUtc2V0IHRoZSBlbnRyeSBwb2ludCBhZGRyZXNzICovCj4gKwll aGRyLmVfZW50cnkgPSAob2xkX3N0YXJ0X2FkZHIgLSBvbGRfYmFzZV9hZGRyKSArIG5ld19iYXNl X2FkZHI7Cj4gKwlpbmZvLT5lbnRyeSA9ICh2b2lkICopIGVoZHIuZV9lbnRyeTsKPiArCWRiZ3By aW50ZigiTmV3IGVudHJ5IHBvaW50IGZvciB0aGUgRUxGOiAweCVsbFhcbiIsIGVoZHIuZV9lbnRy eSk7Cj4gKwo+ICsKPiArCS8qIExvYWQgdGhlIEVMRiBleGVjdXRhYmxlICovCj4gKwlyZXQgPSBl bGZfZXhlY19sb2FkKCZlaGRyLCBpbmZvKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZnByaW50 ZihzdGRlcnIsICJFTEYgZXhlYyBsb2FkIGZhaWxlZFxuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiAr CX0KPiArCj4gKwlyZXQgPSBsb2FkX2V4dHJhX3NlZ21lbnRzKGluZm8sIG5ld19iYXNlX2FkZHIs Cj4gKwkJCQkgIGtlcm5lbF9zaXplLCBtYXhfYWRkcik7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4g Kwo+ICsKPiArLyoqKioqKipcCj4gKyogU1RVQlMgKgo+ICtcKioqKioqKi8KPiArCj4gK2ludCBt YWNoaW5lX3ZlcmlmeV9lbGZfcmVsKHN0cnVjdCBtZW1fZWhkciAqZWhkcikKPiArewo+ICsJaWYg KGVoZHItPmVpX2RhdGEgIT0gRUxGREFUQTJMU0IpCj4gKwkJcmV0dXJuIDA7Cj4gKyNpZiBfX3Jp c2N2X3hsZW4gPT0gNjQKPiArCWlmIChlaGRyLT5laV9jbGFzcyAhPSBFTEZDTEFTUzY0KQo+ICsj ZWxzZQo+ICsJaWYgKGVoZHItPmVpX2NsYXNzICE9IEVMRkNMQVNTMzIpCj4gKyNlbmRpZgo+ICsJ CXJldHVybiAwOwo+ICsJaWYgKGVoZHItPmVfbWFjaGluZSAhPSBFTV9SSVNDVikKPiArCQlyZXR1 cm4gMDsKPiArCXJldHVybiAxOwo+ICt9Cj4gKwo+ICt2b2lkIG1hY2hpbmVfYXBwbHlfZWxmX3Jl bChzdHJ1Y3QgbWVtX2VoZHIgKlVOVVNFRChlaGRyKSwKPiArCQkJICAgc3RydWN0IG1lbV9zeW0g KlVOVVNFRChzeW0pLAo+ICsJCQkgICB1bnNpZ25lZCBsb25nIHJfdHlwZSwKPiArCQkJICAgdm9p ZCAqVU5VU0VEKGxvY2F0aW9uKSwKPiArCQkJICAgdW5zaWduZWQgbG9uZyBVTlVTRUQoYWRkcmVz cyksCj4gKwkJCSAgIHVuc2lnbmVkIGxvbmcgVU5VU0VEKHZhbHVlKSkKPiArewo+ICsJc3dpdGNo IChyX3R5cGUpIHsKPiArCWRlZmF1bHQ6Cj4gKwkJZGllKCJVbmtub3duIHJlbGEgcmVsb2NhdGlv bjogJWx1XG4iLCByX3R5cGUpOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICt9Cj4gZGlmZiAtLWdpdCBh L2tleGVjL2FyY2gvcmlzY3Yva2V4ZWMtcmlzY3YuYyBiL2tleGVjL2FyY2gvcmlzY3Yva2V4ZWMt cmlzY3YuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZmU1ZGQyZAo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9rZXhlYy9hcmNoL3Jpc2N2L2tleGVjLXJpc2N2LmMKPiBA QCAtMCwwICsxLDM2NSBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAq Lwo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgRk9SVEgtSUNTL0NBUlYKPiArICogICAg ICAgICAgICAgIE5pY2sgS29zc2lmaWRpcyA8bWlja0BpY3MuZm9ydGguZ3I+Cj4gKyAqLwo+ICsK PiArI2luY2x1ZGUgImtleGVjLXN5c2NhbGwuaCIJLyogRm9yIEtFWEVDX0FSQ0hfUklTQ1YgKi8K PiArI2luY2x1ZGUgImtleGVjLmgiCQkvKiBGb3IgT1BUX01BWCBhbmQgY29uY2F0X2NtZGxpbmUo KSAqLwo+ICsjaW5jbHVkZSAibWVtX3JlZ2lvbnMuaCIJLyogRm9yIG1lbV9yZWdpb25zX3NvcnQo KSAqLwo+ICsjaW5jbHVkZSAiZHQtb3BzLmgiCQkvKiBGb3IgZHRiX3NldF9ib290YXJncygpICov Cj4gKyNpbmNsdWRlIDxhcmNoL29wdGlvbnMuaD4JLyogRm9yIEtFWEVDX0FSQ0hfT1BUSU9OUyAq Lwo+ICsjaW5jbHVkZSA8Z2V0b3B0Lmg+CQkvKiBGb3Igc3RydWN0IG9wdGlvbiAqLwo+ICsjaW5j bHVkZSA8c3lzL3N0YXQuaD4JCS8qIEZvciBzdGF0KCkgYW5kIHN0cnVjdCBzdGF0ICovCj4gKyNp bmNsdWRlIDxzdGRsaWIuaD4JCS8qIEZvciBmcmVlKCkgKi8KPiArI2luY2x1ZGUgPGVycm5vLmg+ CQkvKiBGb3IgRUlOVkFMICovCj4gKyNpbmNsdWRlIDxsaWJmZHQuaD4JCS8qIEZvciBEZXZpY2VU cmVlIGhhbmRsaW5nICovCj4gKyNpbmNsdWRlICJrZXhlYy1yaXNjdi5oIgo+ICsKPiArY29uc3Qg c3RydWN0IGFyY2hfbWFwX2VudHJ5IGFyY2hlc1tdID0gewo+ICsJeyAicmlzY3YzMiIsIEtFWEVD X0FSQ0hfUklTQ1YgfSwKPiArCXsgInJpc2N2NjQiLCBLRVhFQ19BUkNIX1JJU0NWIH0sCj4gKwl7 IE5VTEwsIDAgfSwKPiArfTsKPiArCj4gKwo+ICtzdHJ1Y3QgZmlsZV90eXBlIGZpbGVfdHlwZVtd ID0gewo+ICsJeyJlbGYtcmlzY3YiLCBlbGZfcmlzY3ZfcHJvYmUsIGVsZl9yaXNjdl9sb2FkLCBl bGZfcmlzY3ZfdXNhZ2V9LAo+ICt9Owo+ICtpbnQgZmlsZV90eXBlcyA9IHNpemVvZihmaWxlX3R5 cGUpIC8gc2l6ZW9mKGZpbGVfdHlwZVswXSk7Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciByaXNj dl9vcHRzX3VzYWdlW10gPQo+ICsiCS0tYXBwZW5kPVNUUklORwkJQXBwZW5kIFNUUklORyB0byB0 aGUga2VybmVsIGNvbW1hbmQgbGluZS5cbiIKPiArIgktLWR0Yj1GSUxFCQlVc2UgRklMRSBhcyB0 aGUgZGV2aWNlIHRyZWUgYmxvYi5cbiIKPiArIgktLWluaXRyZD1GSUxFCQlVc2UgRklMRSBhcyB0 aGUga2VybmVsIGluaXRpYWwgcmFtZGlzay5cbiIKPiArIgktLWNtZGxpbmU9U1RSSU5HCVVzZSBT VFJJTkcgYXMgdGhlIGtlcm5lbCdzIGNvbW1hbmQgbGluZS5cbiIKPiArIgktLXJldXNlLWNtZGxp bmUJCVVzZSBrZXJuZWwgY29tbWFuZCBsaW5lIGZyb20gcnVubmluZyBzeXN0ZW0uXG4iOwo+ICsK PiArc3RhdGljIHN0cnVjdCByaXNjdl9vcHRzIGFyY2hfb3B0aW9ucyA9IHswfTsKPiArc3RhdGlj IHN0cnVjdCBmZHRfaW1hZ2UgcHJvdmlkZWRfZmR0ID0gezB9Owo+ICtzdGF0aWMgc3RydWN0IG1l bW9yeV9yYW5nZXMgc3lzbWVtX3JhbmdlcyA9IHswfTsKPiArCj4gKy8qKioqKioqKioqKioqKioq XAo+ICsqIENPTU1PTiBIRUxQRVJTICoKPiArXCoqKioqKioqKioqKioqKiovCj4gKwo+ICtpbnQg bG9hZF9leHRyYV9zZWdtZW50cyhzdHJ1Y3Qga2V4ZWNfaW5mbyAqaW5mbywgdWludDY0X3Qga2Vy bmVsX2Jhc2UsCj4gKwkJCXVpbnQ2NF90IGtlcm5lbF9zaXplLCB1aW50NjRfdCBtYXhfYWRkcikK PiArewo+ICsJc3RydWN0IGZkdF9pbWFnZSAqZmR0ID0gYXJjaF9vcHRpb25zLmZkdDsKPiArCWNo YXIgKmluaXRyZF9idWYgPSBOVUxMOwo+ICsJb2ZmX3QgaW5pdHJkX3NpemUgPSAwOwo+ICsJdWlu dDY0X3QgaW5pdHJkX2Jhc2UgPSAwOwo+ICsJdWludDY0X3Qgc3RhcnQgPSAwOwo+ICsJdWludDY0 X3QgZW5kID0gMDsKPiArCXVpbnQ2NF90IG1pbl91c2FibGUgPSBrZXJuZWxfYmFzZSArIGtlcm5l bF9zaXplOwo+ICsJdWludDY0X3QgbWF4X3VzYWJsZSA9IG1heF9hZGRyOwo+ICsJaW50IHJldCA9 IDA7Cj4gKwo+ICsJLyogUHJlcGFyZSB0aGUgZGV2aWNlIHRyZWUgKi8KPiArCWlmIChpbmZvLT5r ZXhlY19mbGFncyAmIEtFWEVDX09OX0NSQVNIKSB7Cj4gKwkJcmV0ID0gbG9hZF9lbGZjb3JlaGRy KGluZm8pOwo+ICsJCWlmIChyZXQpIHsKPiArCQkJZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBj cmVhdGUgZWxmY29yZWhkclxuIik7Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ICsKPiArCQly ZXQgPSBkdGJfYWRkX3JhbmdlX3Byb3BlcnR5KCZmZHQtPmJ1ZiwgJmZkdC0+c2l6ZSwKPiArCQkJ CQkgICAgIGVsZmNvcmVoZHJfbWVtLnN0YXJ0LCBlbGZjb3JlaGRyX21lbS5lbmQsCj4gKwkJCQkJ ICAgICAiY2hvc2VuIiwgImxpbnV4LGVsZmNvcmVoZHIiKTsKPiArCQlpZiAocmV0KSB7Cj4gKwkJ CWZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgYWRkIGVsZmNvcmVoZHIgdG8gZmR0XG4iKTsKPiAr CQkJcmV0dXJuIHJldDsKPiArCQl9Cj4gKwo+ICsJCXJldCA9IGdldF9jcmFzaF9rZXJuZWxfbG9h ZF9yYW5nZSgmc3RhcnQsICZlbmQpOwo+ICsJCWlmIChyZXQpIHsKPiArCQkJZnByaW50ZihzdGRl cnIsICJDb3VsZG4ndCBnZXQgY3Jhc2hrZW5lbCByZWdpb25cbiIpOwo+ICsJCQlyZXR1cm4gcmV0 Owo+ICsJCX0KPiArCj4gKwkJcmV0ID0gZHRiX2FkZF9yYW5nZV9wcm9wZXJ0eSgmZmR0LT5idWYs ICZmZHQtPnNpemUsIHN0YXJ0LCBlbmQsCj4gKwkJCQkJICAgICAibWVtb3J5IiwgImxpbnV4LHVz YWJsZS1tZW1vcnkiKTsKPiArCQlpZiAocmV0KSB7Cj4gKwkJCWZwcmludGYoc3RkZXJyLCAiQ291 bGRuJ3QgYWRkIHVzYWJsZS1tZW1vcnkgdG8gZmR0XG4iKTsKPiArCQkJcmV0dXJuIHJldDsKPiAr CQl9Cj4gKwo+ICsJCW1heF91c2FibGUgPSBlbmQ7Cj4gKwl9IGVsc2Ugewo+ICsJCS8qCj4gKwkJ ICogTWFrZSBzdXJlIHdlIHJlbW92ZSBlbGZjb3JlaGRyIGFuZCB1c2FibGUtbWVtb3J5Cj4gKwkJ ICogd2hlbiBzd2l0Y2hpbmcgZnJvbSBjcmFzaCBrZXJuZWwgdG8gYSBub3JtYWwgb25lLgo+ICsJ CSAqLwo+ICsJCWR0Yl9kZWxldGVfcHJvcGVydHkoZmR0LT5idWYsICJjaG9zZW4iLCAibGludXgs ZWxmY29yZWhkciIpOwo+ICsJCWR0Yl9kZWxldGVfcHJvcGVydHkoZmR0LT5idWYsICJtZW1vcnki LCAibGludXgsdXNhYmxlLW1lbW9yeSIpOwo+ICsJfQo+ICsKPiArCS8qIERvIHdlIG5lZWQgdG8g aW5jbHVkZSBhbiBpbml0cmQgaW1hZ2UgPyAqLwo+ICsJaWYgKCFhcmNoX29wdGlvbnMuaW5pdHJk X3BhdGggJiYgIWFyY2hfb3B0aW9ucy5pbml0cmRfZW5kKQo+ICsJCWR0Yl9jbGVhcl9pbml0cmQo JmZkdC0+YnVmLCAmZmR0LT5zaXplKTsKPiArCWVsc2UgaWYgKGFyY2hfb3B0aW9ucy5pbml0cmRf cGF0aCkgewo+ICsJCWlmIChhcmNoX29wdGlvbnMuaW5pdHJkX2VuZCkKPiArCQkJZnByaW50Zihz dGRlcnIsICJXYXJuaW5nOiBBbiBpbml0cmQgaW1hZ2Ugd2FzIHByb3ZpZGVkIgo+ICsJCQkJCSIs IHdpbGwgaWdub3JlIHJldXNlaW5pdHJkXG4iKTsKPiArCj4gKwkJaW5pdHJkX2J1ZiA9IHNsdXJw X2ZpbGUoYXJjaF9vcHRpb25zLmluaXRyZF9wYXRoLAo+ICsJCQkJCSZpbml0cmRfc2l6ZSk7Cj4g KwkJaWYgKCFpbml0cmRfYnVmKSB7Cj4gKwkJCWZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgcmVh ZCBwcm92aWRlZCBpbml0cmRcbiIpOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwo+ ICsJCWluaXRyZF9iYXNlID0gYWRkX2J1ZmZlcl9waHlzX3ZpcnQoaW5mbywgaW5pdHJkX2J1ZiwK PiArCQkJCQkJICAgaW5pdHJkX3NpemUsCj4gKwkJCQkJCSAgIGluaXRyZF9zaXplLCAwLAo+ICsJ CQkJCQkgICBtaW5fdXNhYmxlLAo+ICsJCQkJCQkgICBtYXhfdXNhYmxlLCAtMSwgMCk7Cj4gKwo+ ICsJCWR0Yl9zZXRfaW5pdHJkKCZmZHQtPmJ1ZiwgJmZkdC0+c2l6ZSwgaW5pdHJkX2Jhc2UsCj4g KwkJCSAgICAgICBpbml0cmRfYmFzZSArIGluaXRyZF9zaXplKTsKPiArCj4gKwkJZGJncHJpbnRm KCJCYXNlIGFkZHIgZm9yIGluaXRyZCBpbWFnZTogMHglbFhcbiIsIGluaXRyZF9iYXNlKTsKPiAr CQltaW5fdXNhYmxlID0gaW5pdHJkX2Jhc2U7Cj4gKwkJbWF4X3VzYWJsZSA9IGluaXRyZF9iYXNl Owo+ICsJfQo+ICsKPiArCS8qIEFkZCBkZXZpY2UgdHJlZSAqLwo+ICsJYWRkX2J1ZmZlcl9waHlz X3ZpcnQoaW5mbywgZmR0LT5idWYsIGZkdC0+c2l6ZSwgZmR0LT5zaXplLCAwLAo+ICsJCQkgICAg IG1pbl91c2FibGUsIG1heF91c2FibGUsIC0xLCAwKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArCj4gKy8qKioqKioqKioqKioqKlwKPiArKiBFTlRSWSBQT0lOVFMgKgo+ICtcKioqKioq KioqKioqKiovCj4gKwo+ICt2b2lkIGFyY2hfdXNhZ2Uodm9pZCkKPiArewo+ICsJcHJpbnRmKHJp c2N2X29wdHNfdXNhZ2UpOwo+ICt9Cj4gKwo+ICtpbnQgYXJjaF9wcm9jZXNzX29wdGlvbnMoaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQo+ICt7Cj4gKwlzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBv cHRpb25zW10gPSB7Cj4gKwkJS0VYRUNfQVJDSF9PUFRJT05TCj4gKwkJeyAwIH0sCj4gKwl9Owo+ ICsJc3RhdGljIGNvbnN0IGNoYXIgc2hvcnRfb3B0aW9uc1tdID0gS0VYRUNfQVJDSF9PUFRfU1RS Owo+ICsJc3RydWN0IHN0YXQgc3QgPSB7MH07Cj4gKwljaGFyICphcHBlbmQgPSBOVUxMOwo+ICsJ Y2hhciAqY21kbGluZSA9IE5VTEw7Cj4gKwl2b2lkICp0bXAgPSBOVUxMOwo+ICsJb2ZmX3QgdG1w X3NpemUgPSAwOwo+ICsJaW50IG9wdCA9IDA7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwl3aGls ZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIHNob3J0X29wdGlvbnMsCj4gKwkJCQkg IG9wdGlvbnMsIDApKSAhPSAtMSkgewo+ICsJCXN3aXRjaCAob3B0KSB7Cj4gKwkJY2FzZSBPUFRf QVBQRU5EOgo+ICsJCQlhcHBlbmQgPSBvcHRhcmc7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgT1BU X0NNRExJTkU6Cj4gKwkJCWlmIChjbWRsaW5lKQo+ICsJCQkJZnByaW50ZihzdGRlcnIsCj4gKwkJ CQkJIldhcm5pbmc6IEtlcm5lbCdzIGNtZGxpbmUgIgo+ICsJCQkJCSJzZXQgdHdpY2UgIVxuIik7 Cj4gKwkJCWNtZGxpbmUgPSBvcHRhcmc7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgT1BUX1JFVVNF X0NNRExJTkU6Cj4gKwkJCWlmIChjbWRsaW5lKQo+ICsJCQkJZnByaW50ZihzdGRlcnIsCj4gKwkJ CQkJIldhcm5pbmc6IEtlcm5lbCdzIGNtZGxpbmUgIgo+ICsJCQkJCSJzZXQgdHdpY2UgIVxuIik7 Cj4gKwkJCWNtZGxpbmUgPSBnZXRfY29tbWFuZF9saW5lKCk7Cj4gKwkJCWJyZWFrOwo+ICsJCWNh c2UgT1BUX0RUQjoKPiArCQkJcmV0ID0gc3RhdChvcHRhcmcsICZzdCk7Cj4gKwkJCWlmIChyZXQp IHsKPiArCQkJCWZwcmludGYoc3RkZXJyLAo+ICsJCQkJCSJDb3VsZCBub3QgZmluZCB0aGUgcHJv dmlkZWQgZHRiICFcbiIpOwo+ICsJCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJCX0KPiArCQkJYXJj aF9vcHRpb25zLmZkdF9wYXRoID0gb3B0YXJnOwo+ICsJCQlicmVhazsKPiArCQljYXNlIE9QVF9J TklUUkQ6Cj4gKwkJCXJldCA9IHN0YXQob3B0YXJnLCAmc3QpOwo+ICsJCQlpZiAocmV0KSB7Cj4g KwkJCQlmcHJpbnRmKHN0ZGVyciwKPiArCQkJCQkiQ291bGQgbm90IGZpbmQgdGhlIHByb3ZpZGVk ICIKPiArCQkJCQkiaW5pdHJkIGltYWdlICFcbiIpOwo+ICsJCQkJcmV0dXJuIC1FSU5WQUw7Cj4g KwkJCX0KPiArCQkJYXJjaF9vcHRpb25zLmluaXRyZF9wYXRoID0gb3B0YXJnOwo+ICsJCQlicmVh azsKPiArCQlkZWZhdWx0Ogo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJLyogSGFu ZGxlIEtlcm5lbCdzIGNvbW1hbmQgbGluZSAqLwo+ICsJaWYgKGFwcGVuZCAmJiAhY21kbGluZSkK PiArCQlmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IE5vIGNtZGxpbmUgcHJvdmlkZWQsICIKPiAr CQkJCSJ1c2luZyBhcHBlbmQgc3RyaW5nIGFzIGNtZGxpbmVcbiIpOwo+ICsJaWYgKCFhcHBlbmQg JiYgIWNtZGxpbmUpCj4gKwkJZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiBObyBjbWRsaW5lIG9y IGFwcGVuZCBzdHJpbmcgIgo+ICsJCQkJInByb3ZpZGVkXG4iKTsKPiArCj4gKwlpZiAoYXBwZW5k IHx8IGNtZGxpbmUpCj4gKwkJLyoKPiArCQkgKiBOb3RlIHRoYXQgdGhpcyBhbHNvIGhhbmRsZXMg dGhlIGNhc2Ugd2hlcmUgImNtZGxpbmUiCj4gKwkJICogb3IgImFwcGVuZCIgaXMgTlVMTC4KPiAr CQkgKi8KPiArCQlhcmNoX29wdGlvbnMuY21kbGluZSA9IGNvbmNhdF9jbWRsaW5lKGNtZGxpbmUs IGFwcGVuZCk7Cj4gKwo+ICsJLyogSGFuZGxlIEZEVCBpbWFnZSAqLwo+ICsJaWYgKCFhcmNoX29w dGlvbnMuZmR0X3BhdGgpIHsKPiArCQlyZXQgPSBzdGF0KCIvc3lzL2Zpcm13YXJlL2ZkdCIsICZz dCk7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlmcHJpbnRmKHN0ZGVyciwgIk5vIGR0YiBwcm92aWRl ZCBhbmQgIgo+ICsJCQkJCSIvc3lzL2Zpcm13YXJlL2ZkdCBpcyBub3QgcHJlc2VudFxuIik7Cj4g KwkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCQlmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6 IE5vIGR0YiBwcm92aWRlZCwgIgo+ICsJCQkJInVzaW5nIC9zeXMvZmlybXdhcmUvZmR0XG4iKTsK PiArCQlhcmNoX29wdGlvbnMuZmR0X3BhdGggPSAiL3N5cy9maXJtd2FyZS9mZHQiOwo+ICsJfQo+ ICsKPiArCXRtcCA9IHNsdXJwX2ZpbGUoYXJjaF9vcHRpb25zLmZkdF9wYXRoLCAmdG1wX3NpemUp Owo+ICsJaWYgKCF0bXApIHsKPiArCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHJlYWQgcHJv dmlkZWQgZmR0XG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlyZXQgPSBm ZHRfY2hlY2tfaGVhZGVyKHRtcCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZnByaW50ZihzdGRlcnIs ICJHb3QgYW4gaXZhbGlkIGZkdCBpbWFnZSAhXG4iKTsKPiArCQlmcmVlKHRtcCk7Cj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwlwcm92aWRlZF9mZHQuYnVmID0gdG1wOwo+ICsJcHJvdmlk ZWRfZmR0LnNpemUgPSB0bXBfc2l6ZTsKPiArCj4gKwlpZiAoYXJjaF9vcHRpb25zLmNtZGxpbmUp IHsKPiArCQlyZXQgPSBkdGJfc2V0X2Jvb3RhcmdzKCZwcm92aWRlZF9mZHQuYnVmLCAmcHJvdmlk ZWRfZmR0LnNpemUsCj4gKwkJCQkgICAgICAgYXJjaF9vcHRpb25zLmNtZGxpbmUpOwo+ICsJCWlm IChyZXQgPCAwKSB7Cj4gKwkJCWZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IHNldCBib290YXJn cyBvbiAiCj4gKwkJCQkJInRoZSBmZHQgaW1hZ2VcbiIpOwo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJ CX0KPiArCX0KPiArCj4gKwlhcmNoX29wdGlvbnMuZmR0ID0gJnByb3ZpZGVkX2ZkdDsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArLyoKPiArICogVGhpcyBvbmUgaXMgY2FsbGVkIGFmdGVy IGFyY2hfcHJvY2Vzc19vcHRpb25zIHNvIHdlIGFscmVhZHkKPiArICogaGF2ZSBhbiBmZHQgaW1h Z2UgaW4gcGxhY2UuCj4gKyAqLwo+ICt2b2lkIGFyY2hfcmV1c2VfaW5pdHJkKHZvaWQpCj4gK3sK PiArCWNvbnN0IHVpbnQzMl90ICpwcm9wMzIgPSBOVUxMOwo+ICsJdWludDMyX3QgYWRkcl9jZWxs cyA9IDA7Cj4gKwljb25zdCB2b2lkICpwcm9wID0gMDsKPiArCWludCBwcm9wX3NpemUgPSAwOwo+ ICsJdWludDY0X3QgaW5pdHJkX3N0YXJ0ID0gMDsKPiArCXVpbnQ2NF90IGluaXRyZF9lbmQgPSAw Owo+ICsJaW50IGNob3Nlbl9vZmZzZXQgPSAwOwo+ICsJc3RydWN0IGZkdF9pbWFnZSAqZmR0ID0g JnByb3ZpZGVkX2ZkdDsKPiArCj4gKwljaG9zZW5fb2Zmc2V0ID0gZmR0X3N1Ym5vZGVfb2Zmc2V0 KGZkdC0+YnVmLCAwLCAiY2hvc2VuIik7Cj4gKwlpZiAoY2hvc2VuX29mZnNldCA8IDApIHsKPiAr CQlmcHJpbnRmKHN0ZGVyciwgIk5vIC9jaG9zZW4gbm9kZSBmb3VuZCBvbiBmZHQgaW1hZ2UgIgo+ ICsJCQkJInVuYWJsZSB0byByZXVzZSBpbml0cmRcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiAr Cj4gKwlwcm9wMzIgPSBmZHRfZ2V0cHJvcChmZHQtPmJ1ZiwgMCwgIiNhZGRyZXNzLWNlbGxzIiwg TlVMTCk7Cj4gKwlpZiAoIXByb3AzMikgewo+ICsJCWZwcmludGYoc3RkZXJyLCAiTm8gI2FkZHJl c3MtY2VsbHMgcHJvcGVydHkgb24gcm9vdCBub2RlXG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4g KwlhZGRyX2NlbGxzID0gYmUzMl90b19jcHUoKnByb3AzMik7Cj4gKwo+ICsJcHJvcCA9IGZkdF9n ZXRwcm9wKGZkdC0+YnVmLCBjaG9zZW5fb2Zmc2V0LAo+ICsJCQkgICAibGludXgsaW5pdHJkLXN0 YXJ0IiwgJnByb3Bfc2l6ZSk7Cj4gKwlpZiAoIXByb3ApIHsKPiArCQlmcHJpbnRmKHN0ZGVyciwg IkNvdWxkIG5vdCBnZXQgbGludXgsaW5pdHJkLXN0YXJ0XG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9 Cj4gKwlkdGJfZXh0cmFjdF9pbnRfcHJvcGVydHkoJmluaXRyZF9zdGFydCwgcHJvcCwgYWRkcl9j ZWxscyk7Cj4gKwo+ICsJcHJvcCA9IGZkdF9nZXRwcm9wKGZkdC0+YnVmLCBjaG9zZW5fb2Zmc2V0 LAo+ICsJCQkgICAibGludXgsaW5pdHJkLWVuZCIsICZwcm9wX3NpemUpOwo+ICsJaWYgKCFwcm9w KSB7Cj4gKwkJZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgZ2V0IGxpbnV4LGluaXRyZC1lbmRc biIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCWR0Yl9leHRyYWN0X2ludF9wcm9wZXJ0eSgmaW5p dHJkX2VuZCwgcHJvcCwgYWRkcl9jZWxscyk7Cj4gKwo+ICsJYXJjaF9vcHRpb25zLmluaXRyZF9z dGFydCA9IGluaXRyZF9zdGFydDsKPiArCWFyY2hfb3B0aW9ucy5pbml0cmRfZW5kID0gaW5pdHJk X2VuZDsKPiArCWRiZ3ByaW50ZigiaW5pdHJkX3N0YXJ0OiAweCVsWCwgaW5pdHJkX2VuZDogMHgl bFhcbiIsCj4gKwkJICBpbml0cmRfc3RhcnQsIGluaXRyZF9lbmQpOwo+ICsKPiArfQo+ICsKPiAr aW50IGdldF9tZW1vcnlfcmFuZ2VzKHN0cnVjdCBtZW1vcnlfcmFuZ2UgKipyYW5nZSwgaW50ICpu dW1fcmFuZ2VzLAo+ICsJCSAgICAgIHVuc2lnbmVkIGxvbmcga2V4ZWNfZmxhZ3MpCj4gK3sKPiAr CWNvbnN0IHN0cnVjdCBmZHRfaW1hZ2UgKmZkdCA9ICZwcm92aWRlZF9mZHQ7Cj4gKwlzdHJ1Y3Qg bWVtb3J5X3JhbmdlcyAqZXh0cmFfcmFuZ2VzID0gTlVMTDsKPiArCWludCBpID0gMDsKPiArCWlu dCByZXQgPSAwOwo+ICsKPiArCWlmIChhcmNoX29wdGlvbnMuaW5pdHJkX3N0YXJ0ICYmIGFyY2hf b3B0aW9ucy5pbml0cmRfZW5kKSB7Cj4gKwkJaW50IGluaXRyZF9zaXplID0gYXJjaF9vcHRpb25z LmluaXRyZF9lbmQgLSBhcmNoX29wdGlvbnMuaW5pdHJkX3N0YXJ0Owo+ICsJCWRiZ3ByaW50Zigi TWFya2luZyBjdXJyZW50IGludGlyZCBpbWFnZSBhcyByZXNlcnZlZFxuIik7Cj4gKwkJcmV0ID0g bWVtX3JlZ2lvbnNfYWxsb2NfYW5kX2FkZChleHRyYV9yYW5nZXMsCj4gKwkJCQkJCWFyY2hfb3B0 aW9ucy5pbml0cmRfc3RhcnQsCj4gKwkJCQkJCWluaXRyZF9zaXplLAo+ICsJCQkJCQlSQU5HRV9S RVNFUlZFRCk7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwly ZXQgPSBkdGJfZ2V0X21lbW9yeV9yYW5nZXMoZmR0LT5idWYsICZzeXNtZW1fcmFuZ2VzLCBleHRy YV9yYW5nZXMpOwo+ICsJaWYgKHJldCkgewo+ICsJCWZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90 IGdldCBtZW1vcnkgcmFuZ2VzIGZyb20gZGV2aWNlIHRyZWUgKCVpKSAhXG4iLCByZXQpOwo+ICsJ CXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJKnJhbmdlID0gc3lzbWVtX3Jhbmdlcy5yYW5nZXM7 Cj4gKwkqbnVtX3JhbmdlcyA9IHN5c21lbV9yYW5nZXMuc2l6ZTsKPiArCj4gKwlkYmdwcmludGYo Ik1lbW9yeSByZWdpb25zOlxuIik7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgc3lzbWVtX3Jhbmdlcy5z aXplOyBpKyspIHsKPiArCQlkYmdwcmludGYoIlx0MHglbGx4IC0gMHglbGx4IDogJXMgKCVpKVxu IiwKPiArCQkJICBzeXNtZW1fcmFuZ2VzLnJhbmdlc1tpXS5zdGFydCwKPiArCQkJICBzeXNtZW1f cmFuZ2VzLnJhbmdlc1tpXS5lbmQsCj4gKwkJCSAgc3lzbWVtX3Jhbmdlcy5yYW5nZXNbaV0udHlw ZSA9PSBSQU5HRV9SRVNFUlZFRCA/Cj4gKwkJCSAgIlJBTkdFX1JFU0VSVkVEIiA6ICJSQU5HRV9S QU0iLAo+ICsJCQkgIHN5c21lbV9yYW5nZXMucmFuZ2VzW2ldLnR5cGUpOwo+ICsJfQo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioqKioqKlwKPiArKiBTVFVCUyAqCj4gK1wqKioqKioq Lwo+ICsKPiAraW50IGFyY2hfY29tcGF0X3RyYW1wb2xpbmUoc3RydWN0IGtleGVjX2luZm8gKlVO VVNFRChpbmZvKSkKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3ZvaWQgYXJjaF91cGRh dGVfcHVyZ2F0b3J5KHN0cnVjdCBrZXhlY19pbmZvICpVTlVTRUQoaW5mbykpCj4gK3sKPiArfQo+ IGRpZmYgLS1naXQgYS9rZXhlYy9hcmNoL3Jpc2N2L2tleGVjLXJpc2N2LmggYi9rZXhlYy9hcmNo L3Jpc2N2L2tleGVjLXJpc2N2LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAuLmM0MzIzYTYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIva2V4ZWMvYXJjaC9yaXNjdi9rZXhl Yy1yaXNjdi5oCj4gQEAgLTAsMCArMSwzMiBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCAqLwo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgRk9SVEgtSUNTL0NB UlYKPiArICogICAgICAgICAgICAgIE5pY2sgS29zc2lmaWRpcyA8bWlja0BpY3MuZm9ydGguZ3I+ Cj4gKyAqLwo+ICsKPiArc3RydWN0IGZkdF9pbWFnZSB7Cj4gKwljaGFyCSpidWY7Cj4gKwlvZmZf dAlzaXplOwo+ICt9Owo+ICsKPiArc3RydWN0IHJpc2N2X29wdHMgewo+ICsJY2hhciAqY21kbGlu ZTsKPiArCWNoYXIgKmZkdF9wYXRoOwo+ICsJY2hhciAqaW5pdHJkX3BhdGg7Cj4gKwl1aW50NjRf dCBpbml0cmRfc3RhcnQ7Cj4gKwl1aW50NjRfdCBpbml0cmRfZW5kOwo+ICsJc3RydWN0IGZkdF9p bWFnZSAqZmR0Owo+ICt9Owo+ICsKPiArLyogY3Jhc2hkdW1wLXJpc2N2LmMgKi8KPiArZXh0ZXJu IHN0cnVjdCBtZW1vcnlfcmFuZ2UgZWxmY29yZWhkcl9tZW07Cj4gK2ludCBsb2FkX2VsZmNvcmVo ZHIoc3RydWN0IGtleGVjX2luZm8gKmluZm8pOwo+ICsKPiArLyoga2V4ZWMtcmlzY3YuYyAqLwo+ ICtpbnQgbG9hZF9leHRyYV9zZWdtZW50cyhzdHJ1Y3Qga2V4ZWNfaW5mbyAqaW5mbywgdWludDY0 X3Qga2VybmVsX2Jhc2UsCj4gKwkJCXVpbnQ2NF90IGtlcm5lbF9zaXplLCB1aW50NjRfdCBtYXhf YWRkcik7Cj4gKwo+ICtpbnQgZWxmX3Jpc2N2X3Byb2JlKGNvbnN0IGNoYXIgKmJ1Ziwgb2ZmX3Qg bGVuKTsKPiArdm9pZCBlbGZfcmlzY3ZfdXNhZ2Uodm9pZCk7Cj4gK2ludCBlbGZfcmlzY3ZfbG9h ZChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKmJ1Ziwgb2ZmX3QgbGVuLAo+ICsJ CSAgIHN0cnVjdCBrZXhlY19pbmZvICppbmZvKTsKPiBkaWZmIC0tZ2l0IGEva2V4ZWMvZHQtb3Bz LmMgYi9rZXhlYy9kdC1vcHMuYwo+IGluZGV4IDBhOTZiNzUuLjNlMjg1YWIgMTAwNjQ0Cj4gLS0t IGEva2V4ZWMvZHQtb3BzLmMKPiArKysgYi9rZXhlYy9kdC1vcHMuYwo+IEBAIC00LDkgKzQsMTEg QEAKPiAgICNpbmNsdWRlIDxsaWJmZHQuaD4KPiAgICNpbmNsdWRlIDxzdGRpby5oPgo+ICAgI2lu Y2x1ZGUgPHN0ZGxpYi5oPgo+ICsjaW5jbHVkZSA8c3RkYm9vbC5oPgo+ICAgCj4gICAjaW5jbHVk ZSAia2V4ZWMuaCIKPiAgICNpbmNsdWRlICJkdC1vcHMuaCIKPiArI2luY2x1ZGUgIm1lbV9yZWdp b25zLmgiCj4gICAKPiAgIHN0YXRpYyBjb25zdCBjaGFyIG5fY2hvc2VuW10gPSAiY2hvc2VuIjsK PiAgIAo+IEBAIC05NSw3ICs5Nyw3IEBAIGludCBkdGJfc2V0X3Byb3BlcnR5KGNoYXIgKipkdGIs IG9mZl90ICpkdGJfc2l6ZSwgY29uc3QgY2hhciAqbm9kZSwKPiAgIAo+ICAgCXN0cmNweShuZXdf bm9kZSwgIi8iKTsKPiAgIAlzdHJjYXQobmV3X25vZGUsIG5vZGUpOwo+IC0JCj4gKwo+ICAgCW5v ZGVvZmZzZXQgPSBmZHRfcGF0aF9vZmZzZXQobmV3X2R0YiwgbmV3X25vZGUpOwo+ICAgCj4gICAJ aWYgKG5vZGVvZmZzZXQgPT0gLUZEVF9FUlJfTk9URk9VTkQpIHsKPiBAQCAtMTc0LDMgKzE3Niw0 NDEgQEAgaW50IGR0Yl9kZWxldGVfcHJvcGVydHkoY2hhciAqZHRiLCBjb25zdCBjaGFyICpub2Rl LCBjb25zdCBjaGFyICpwcm9wKQo+ICAgCWZyZWUobmV3X25vZGUpOwo+ICAgCXJldHVybiByZXN1 bHQ7Cj4gICB9Cj4gKwo+ICtzdGF0aWMgaW50IGR0Yl9nZXRfbnVtX2NlbGxzKGNoYXIgKmR0Yiwg aW50IG5vZGVvZmZzZXQsIHVpbnQzMl90ICphZGRyX2NlbGxzLAo+ICsJCQkgICAgIHVpbnQzMl90 ICpzaXplX2NlbGxzLCBib29sIHJlY3Vyc2l2ZSkKPiArewo+ICsJY29uc3QgdWludDMyX3QgKnBy b3AzMiA9IE5VTEw7Cj4gKwlpbnQgY3Vycl9vZmZzZXQgPSBub2Rlb2Zmc2V0Owo+ICsJaW50IHBy b3BfbGVuID0gMDsKPiArCSphZGRyX2NlbGxzID0gMDsKPiArCSpzaXplX2NlbGxzID0gMDsKPiAr Cj4gKwlkbyB7Cj4gKwkJcHJvcDMyID0gZmR0X2dldHByb3AoZHRiLCBjdXJyX29mZnNldCwgIiNh ZGRyZXNzLWNlbGxzIiwgJnByb3BfbGVuKTsKPiArCQljdXJyX29mZnNldCA9IGZkdF9wYXJlbnRf b2Zmc2V0KGR0YiwgY3Vycl9vZmZzZXQpOwo+ICsJfSB3aGlsZSAoIXByb3AzMiAmJiBwcm9wX2xl biA9PSAtRkRUX0VSUl9OT1RGT1VORCAmJiByZWN1cnNpdmUpOwo+ICsKPiArCWlmICghcHJvcDMy KSB7Cj4gKwkJZGJncHJpbnRmKCJDb3VsZCBub3QgZ2V0ICNhZGRyZXNzLWNlbGxzIHByb3BlcnR5 IGZvciAlcyAoJXMpXG4iLAo+ICsJCQkgIGZkdF9nZXRfbmFtZShkdGIsIG5vZGVvZmZzZXQsIE5V TEwpLCBmZHRfc3RyZXJyb3Iobm9kZW9mZnNldCkpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJ fQo+ICsJKmFkZHJfY2VsbHMgPSBmZHQzMl90b19jcHUoKnByb3AzMik7Cj4gKwo+ICsJY3Vycl9v ZmZzZXQgPSBub2Rlb2Zmc2V0Owo+ICsJZG8gewo+ICsJCXByb3AzMiA9IGZkdF9nZXRwcm9wKGR0 YiwgY3Vycl9vZmZzZXQsICIjc2l6ZS1jZWxscyIsICZwcm9wX2xlbik7Cj4gKwkJY3Vycl9vZmZz ZXQgPSBmZHRfcGFyZW50X29mZnNldChkdGIsIGN1cnJfb2Zmc2V0KTsKPiArCX0gd2hpbGUgKCFw cm9wMzIgJiYgcHJvcF9sZW4gPT0gLUZEVF9FUlJfTk9URk9VTkQgJiYgcmVjdXJzaXZlKTsKPiAr Cj4gKwlpZiAoIXByb3AzMikgewo+ICsJCWRiZ3ByaW50ZigiQ291bGQgbm90IGdldCAjc2l6ZS1j ZWxscyBwcm9wZXJ0eSBmb3IgJXMgKCVzKVxuIiwKPiArCQkJICBmZHRfZ2V0X25hbWUoZHRiLCBu b2Rlb2Zmc2V0LCBOVUxMKSwgZmR0X3N0cmVycm9yKG5vZGVvZmZzZXQpKTsKPiArCQlyZXR1cm4g LUVJTlZBTDsKPiArCX0KPiArCSpzaXplX2NlbGxzID0gZmR0MzJfdG9fY3B1KCpwcm9wMzIpOwo+ ICsKPiArCWRiZ3ByaW50ZigiJXM6ICNhZGRyZXNzLWNlbGxzOiVkICNzaXplLWNlbGxzOiVkXG4i LAo+ICsJCSBmZHRfZ2V0X25hbWUoZHRiLCBub2Rlb2Zmc2V0LCBOVUxMKSwgKmFkZHJfY2VsbHMs ICpzaXplX2NlbGxzKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArdm9pZCBkdGJfZXh0 cmFjdF9pbnRfcHJvcGVydHkodWludDY0X3QgKnZhbCwgY29uc3Qgdm9pZCAqYnVmLCB1aW50MzJf dCBjZWxscykKPiArewo+ICsJY29uc3QgdWludDMyX3QgKnByb3AzMiA9IE5VTEw7Cj4gKwljb25z dCB1aW50NjRfdCAqcHJvcDY0ID0gTlVMTDsKPiArCj4gKwlpZiAoY2VsbHMgPT0gMSkgewo+ICsJ CXByb3AzMiA9IChjb25zdCB1aW50MzJfdCAqKSBidWY7Cj4gKwkJKnZhbCA9ICh1aW50NjRfdCkg YmUzMl90b19jcHUoKnByb3AzMik7Cj4gKwl9IGVsc2Ugewo+ICsJCS8qIFNraXAgYW55IGxlYWRp bmcgY2VsbHMgKi8KPiArCQlwcm9wNjQgPSAoY29uc3QgdWludDY0X3QgKikgKHVpbnQzMl90ICop YnVmICsgY2VsbHMgLSAyOwo+ICsJCSp2YWwgPSAodWludDY0X3QpIGJlNjRfdG9fY3B1KCpwcm9w NjQpOwo+ICsJfQo+ICt9Cj4gKwo+ICt2b2lkIGR0Yl9maWxsX2ludF9wcm9wZXJ0eSh2b2lkICpi dWYsIHVpbnQ2NF90IHZhbCwgdWludDMyX3QgY2VsbHMpCj4gK3sKPiArCXVpbnQzMl90IHByb3Az MiA9IDA7Cj4gKwl1aW50NjRfdCBwcm9wNjQgPSAwOwo+ICsKPiArCWlmIChjZWxscyA9PSAxKSB7 Cj4gKwkJcHJvcDMyID0gY3B1X3RvX2ZkdDMyKCh1aW50MzJfdCkgdmFsKTsKPiArCQltZW1jcHko YnVmLCAmcHJvcDMyLCBzaXplb2YodWludDMyX3QpKTsKPiArCX0gZWxzZSB7Cj4gKwkJcHJvcDY0 ID0gY3B1X3RvX2ZkdDY0KHZhbCk7Cj4gKwkJLyogU2tpcCBhbnkgbGVhZGluZyBjZWxscyAqLwo+ ICsJCW1lbWNweSgodWludDY0X3QgKikodWludDMyX3QgKilidWYgKyBjZWxscyAtIDIsCj4gKwkJ ICAgICAgICZwcm9wNjQsIHNpemVvZih1aW50NjRfdCkpOwo+ICsJfQo+ICt9Cj4gKwo+ICtpbnQg ZHRiX2FkZF9yYW5nZV9wcm9wZXJ0eShjaGFyICoqZHRiLCBvZmZfdCAqZHRiX3NpemUsIHVpbnQ2 NF90IHN0YXJ0LCB1aW50NjRfdCBlbmQsCj4gKwkJCSAgIGNvbnN0IGNoYXIgKnBhcmVudCwgY29u c3QgY2hhciAqbmFtZSkKPiArewo+ICsJdWludDMyX3QgYWRkcl9jZWxscyA9IDA7Cj4gKwl1aW50 MzJfdCBzaXplX2NlbGxzID0gMDsKPiArCWNoYXIgKm5vZGVwYXRoID0gTlVMTDsKPiArCXZvaWQg KnByb3AgPSBOVUxMOwo+ICsJaW50IG5vZGVvZmZzZXQgPSAwOwo+ICsJaW50IHByb3Bfc2l6ZSA9 IDA7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlub2RlcGF0aCA9IG1hbGxvYyhzdHJsZW4oIi8i KSArIHN0cmxlbihwYXJlbnQpICsgMSk7Cj4gKwlpZiAoIW5vZGVwYXRoKSB7Cj4gKwkJZGJncHJp bnRmKCIlczogbWFsbG9jIGZhaWxlZFxuIiwgX19mdW5jX18pOwo+ICsJCXJldHVybiAtRU5PTUVN Owo+ICsJfQo+ICsKPiArCXN0cmNweShub2RlcGF0aCwgIi8iKTsKPiArCXN0cmNhdChub2RlcGF0 aCwgcGFyZW50KTsKPiArCj4gKwlub2Rlb2Zmc2V0ID0gZmR0X3BhdGhfb2Zmc2V0KCpkdGIsIG5v ZGVwYXRoKTsKPiArCWlmIChub2Rlb2Zmc2V0IDwgMCkgewo+ICsJCWRiZ3ByaW50ZigiJXM6IGZk dF9wYXRoX29mZnNldCglcykgZmFpbGVkOiAlc1xuIiwgX19mdW5jX18sCj4gKwkJCSAgbm9kZXBh dGgsIGZkdF9zdHJlcnJvcihub2Rlb2Zmc2V0KSk7Cj4gKwkJZnJlZShub2RlcGF0aCk7Cj4gKwkJ cmV0dXJuIG5vZGVvZmZzZXQ7Cj4gKwl9Cj4gKwlmcmVlKG5vZGVwYXRoKTsKPiArCj4gKwlyZXQg PSBkdGJfZ2V0X251bV9jZWxscygqZHRiLCBub2Rlb2Zmc2V0LCAmYWRkcl9jZWxscywgJnNpemVf Y2VsbHMsIHRydWUpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwkv KiBDYW4gdGhlIHJhbmdlIGZpdCB3aXRoIHRoZSBnaXZlbiBhZGRyZXNzL3NpemUgY2VsbHMgPyAq Lwo+ICsJaWYgKChhZGRyX2NlbGxzID09IDEpICYmIChzdGFydCA+PSAoMVVMTCA8PCAzMikpKQo+ ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWlmICgoc2l6ZV9jZWxscyA9PSAxKSAmJiAoKGVu ZCAtIHN0YXJ0ICsgMSkgPj0gKDFVTEwgPDwgMzIpKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiAr Cj4gKwlwcm9wX3NpemUgPSBzaXplb2YodWludDMyX3QpICogKGFkZHJfY2VsbHMgKyBzaXplX2Nl bGxzKTsKPiArCXByb3AgPSBtYWxsb2MocHJvcF9zaXplKTsKPiArCj4gKwlkdGJfZmlsbF9pbnRf cHJvcGVydHkocHJvcCwgc3RhcnQsIGFkZHJfY2VsbHMpOwo+ICsJZHRiX2ZpbGxfaW50X3Byb3Bl cnR5KCh2b2lkICopKCh1aW50MzJfdCAqKXByb3AgKyBhZGRyX2NlbGxzKSwKPiArCQkJICAgICAg ZW5kIC0gc3RhcnQgKyAxLCBzaXplX2NlbGxzKTsKPiArCj4gKwkvKiBBZGQgYnkgbm9kZSBwYXRo IG5hbWUgKi8KPiArCXJldHVybiBkdGJfc2V0X3Byb3BlcnR5KGR0YiwgZHRiX3NpemUsIHBhcmVu dCwgbmFtZSwgcHJvcCwgcHJvcF9zaXplKTsKPiArfQo+ICsKPiArLyoqKioqKioqKioqKioqKioq KioqKioqKlwKPiArKiBNRU1PUlkgUkFOR0VTIEhBTkRMSU5HICoKPiArXCoqKioqKioqKioqKioq KioqKioqKioqKi8KPiArCj4gK3N0YXRpYyBpbnQgZHRiX2FkZF9tZW1vcnlfcmFuZ2Uoc3RydWN0 IG1lbW9yeV9yYW5nZXMgKm1lbV9yYW5nZXMsIHVpbnQ2NF90IHN0YXJ0LAo+ICsJCQkJdWludDY0 X3QgZW5kLCB1bnNpZ25lZCB0eXBlKQo+ICt7Cj4gKwlzdHJ1Y3QgbWVtb3J5X3JhbmdlIHRoaXNf cmVnaW9uID0gezB9Owo+ICsJc3RydWN0IG1lbW9yeV9yYW5nZSAqcmFuZ2VzID0gbWVtX3Jhbmdl cy0+cmFuZ2VzOwo+ICsJaW50IGkgPSAwOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJaWYgKHN0 YXJ0ID09IGVuZCkgewo+ICsJCWRiZ3ByaW50ZigiSWdub3JpbmcgZW1wdHkgcmVnaW9uXG4iKTsK PiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwkvKiBDaGVjayBpZiB3ZSBhcmUgYWRk aW5nIGFuIGV4aXN0aW5nIHJlZ2lvbiAqLwo+ICsJZm9yIChpID0gMDsgaSA8IG1lbV9yYW5nZXMt PnNpemU7IGkrKykgewo+ICsJCWlmIChzdGFydCA9PSByYW5nZXNbaV0uc3RhcnQgJiYgZW5kID09 IHJhbmdlc1tpXS5lbmQpIHsKPiArCQkJZGJncHJpbnRmKCJEdXBsaWNhdGU6IDB4JWx4IC0gMHgl bHhcbiIsIHN0YXJ0LCBlbmQpOwo+ICsKPiArCQkJaWYgKHR5cGUgPT0gcmFuZ2VzW2ldLnR5cGUp Cj4gKwkJCQlyZXR1cm4gMDsKPiArCQkJZWxzZSBpZiAodHlwZSA9PSBSQU5HRV9SRVNFUlZFRCkg ewo+ICsJCQkJcmFuZ2VzW2ldLnR5cGUgPSBSQU5HRV9SRVNFUlZFRDsKPiArCQkJCXJldHVybiAw Owo+ICsJCQl9Cj4gKwo+ICsJCQlkYmdwcmludGYoIkNvbmZsaWN0aW5nIHR5cGVzIGZvciByZWdp b246IDB4JWx4IC0gMHglbHhcbiIsCj4gKwkJCQkgIHN0YXJ0LCBlbmQpOwo+ICsJCQlyZXR1cm4g LUVJTlZBTDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIFJlc2VydmVkIHJlZ2lvbnMg bWF5IGJlIHBhcnQgb2YgYW4gZXhpc3RpbmcgL21lbW9yeQo+ICsJICogcmVnaW9uIGFuZCBzaG91 bGRuJ3Qgb3ZlcmxhcCBhY2NvcmRpbmcgdG8gc3BlYywgc28KPiArCSAqIHNpbmNlIHdlIGFkZCAv bWVtb3J5IHJlZ2lvbnMgZmlyc3QsIHdlIGNhbiBleGNsdWRlCj4gKwkgKiByZXNlcnZlZCByZWdp b25zIGhlcmUgZnJvbSB0aGUgZXhpc3RpbmcgL21lbW9yeSByZWdpb25zCj4gKwkgKiBpbmNsdWRl ZCBpbiByYW5nZXNbXSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRoZSBzYW1lCj4gKwkgKiByZWdp b24gdHdpY2UuCj4gKwkgKi8KPiArCWlmICh0eXBlID09IFJBTkdFX1JFU0VSVkVEKSB7Cj4gKwkJ dGhpc19yZWdpb24uc3RhcnQgPSBzdGFydDsKPiArCQl0aGlzX3JlZ2lvbi5lbmQgPSBlbmQgLSAx Owo+ICsJCXRoaXNfcmVnaW9uLnR5cGUgPSB0eXBlOwo+ICsJCXJldCA9IG1lbV9yZWdpb25zX2V4 Y2x1ZGUobWVtX3JhbmdlcywgJnRoaXNfcmVnaW9uKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1 cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IG1lbV9yZWdpb25zX2FsbG9jX2FuZF9hZGQobWVt X3Jhbmdlcywgc3RhcnQsCj4gKwkJCQkJZW5kIC0gc3RhcnQsIHR5cGUpOwo+ICsKPiArCXJldHVy biByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHRiX2FkZF9tZW1vcnlfcmVnaW9uKGNoYXIg KmR0YiwgaW50IG5vZGVvZmZzZXQsCj4gKwkJCQkgc3RydWN0IG1lbW9yeV9yYW5nZXMgKm1lbV9y YW5nZXMsIGludCB0eXBlKQo+ICt7Cj4gKwl1aW50MzJfdCByb290X2FkZHJfY2VsbHMgPSAwOwo+ ICsJdWludDMyX3Qgcm9vdF9zaXplX2NlbGxzID0gMDsKPiArCXVpbnQ2NF90IGFkZHIgPSAwOwo+ ICsJdWludDY0X3Qgc2l6ZSA9IDA7Cj4gKwljb25zdCBjaGFyICpyZWcgPSBOVUxMOwo+ICsJaW50 IHByb3Bfc2l6ZSA9IDA7Cj4gKwlpbnQgb2Zmc2V0ID0gMDsKPiArCWludCBlbnRyeV9zaXplID0g MDsKPiArCWludCBudW1fZW50cmllcyA9IDA7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwkvKgo+ ICsJICogR2V0IGFkZHJlc3MtY2VsbHMgYW5kIHNpemUtY2VsbHMgcHJvcGVydGllcyAoYWNjb3Jk aW5nIHRvCj4gKwkgKiBiaW5kaW5nIHNwZWMgdGhlc2UgYXJlIHRoZSBzYW1lIGFzIGluIHRoZSBy b290IG5vZGUpCj4gKwkgKi8KPiArCXJldCA9IGR0Yl9nZXRfbnVtX2NlbGxzKGR0YiwgMCwgJnJv b3RfYWRkcl9jZWxscywgJnJvb3Rfc2l6ZV9jZWxscywgZmFsc2UpOwo+ICsJaWYgKHJldCA8IDAp IHsKPiArCQlkYmdwcmludGYoIk5vIGFkZHJlc3Mvc2l6ZSBjZWxscyBvbiByb290IG5vZGUgIVxu Iik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwkvKgo+ICsJICogUGFyc2UgdGhlIHJl ZyBhcnJheSwgYWNvcmRpbmcgdG8gZGV2aWNlIHRyZWUgc3BlYyBpdCBpbmNsdWRlcwo+ICsJICog YW4gYXJiaXRhcnkgbnVtYmVyIG9mIDxhZGRyZXNzPjxzaXplPiBwYWlycwo+ICsJICovCj4gKwll bnRyeV9zaXplID0gKHJvb3RfYWRkcl9jZWxscyArIHJvb3Rfc2l6ZV9jZWxscykgKiBzaXplb2Yo dWludDMyX3QpOwo+ICsJcmVnID0gZmR0X2dldHByb3AoZHRiLCBub2Rlb2Zmc2V0LCAicmVnIiwg JnByb3Bfc2l6ZSk7Cj4gKwlpZiAoIXJlZykgewo+ICsJCWRiZ3ByaW50ZigiV2FybmluZzogTWFs Zm9ybWVkIG1lbW9yeSByZWdpb24gd2l0aCBubyByZWcgcHJvcGVydHkgKCVzKSAhXG4iLAo+ICsJ CQkgIGZkdF9nZXRfbmFtZShkdGIsIG5vZGVvZmZzZXQsIE5VTEwpKTsKPiArCQlyZXR1cm4gLUVJ TlZBTDsKPiArCX0KPiArCj4gKwludW1fZW50cmllcyA9IHByb3Bfc2l6ZSAvIGVudHJ5X3NpemU7 Cj4gKwlkYmdwcmludGYoIkdvdCByZWdpb24gd2l0aCAlaSBlbnRyaWVzOiAlc1xuIiwgbnVtX2Vu dHJpZXMsCj4gKwkJICBmZHRfZ2V0X25hbWUoZHRiLCBub2Rlb2Zmc2V0LCBOVUxMKSk7Cj4gKwo+ ICsJZm9yIChudW1fZW50cmllcy0tOyBudW1fZW50cmllcyA+PSAwOyBudW1fZW50cmllcy0tKSB7 Cj4gKwkJb2Zmc2V0ID0gbnVtX2VudHJpZXMgKiBlbnRyeV9zaXplOwo+ICsKPiArCQlkdGJfZXh0 cmFjdF9pbnRfcHJvcGVydHkoJmFkZHIsIHJlZyArIG9mZnNldCwKPiArCQkJCQkgcm9vdF9hZGRy X2NlbGxzKTsKPiArCQlvZmZzZXQgKz0gcm9vdF9hZGRyX2NlbGxzICogc2l6ZW9mKHVpbnQzMl90 KTsKPiArCj4gKwkJZHRiX2V4dHJhY3RfaW50X3Byb3BlcnR5KCZzaXplLCByZWcgKyBvZmZzZXQs Cj4gKwkJCQkJIHJvb3Rfc2l6ZV9jZWxscyk7Cj4gKwo+ICsJCXJldCA9IGR0Yl9hZGRfbWVtb3J5 X3JhbmdlKG1lbV9yYW5nZXMsIGFkZHIsCj4gKwkJCQkJICAgYWRkciArIHNpemUsIHR5cGUpOwo+ ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgZHRiX3BhcnNlX21lbW9yeV9yZXNlcnZhdGlvbnNfdGFibGUo Y2hhciAqZHRiLCBzdHJ1Y3QgbWVtb3J5X3JhbmdlcyAqbWVtX3JhbmdlcykKPiArewo+ICsJaW50 IHRvdGFsX21lbXJzcnYgPSAwOwo+ICsJdWludDY0X3QgYWRkciA9IDA7Cj4gKwl1aW50NjRfdCBz aXplID0gMDsKPiArCWludCByZXQgPSAwOwo+ICsJaW50IGkgPSAwOwo+ICsKPiArCXRvdGFsX21l bXJzcnYgPSBmZHRfbnVtX21lbV9yc3YoZHRiKTsKPiArCWZvciAoaSA9IDA7IGkgPCB0b3RhbF9t ZW1yc3J2OyBpKyspIHsKPiArCQlyZXQgPSBmZHRfZ2V0X21lbV9yc3YoZHRiLCBpLCAmYWRkciwg JnNpemUpOwo+ICsJCWlmIChyZXQpCj4gKwkJCWNvbnRpbnVlOwo+ICsJCXJldCA9IGR0Yl9hZGRf bWVtb3J5X3JhbmdlKG1lbV9yYW5nZXMsIGFkZHIsIGFkZHIgKyBzaXplIC0gMSwKPiArCQkJCQkg ICBSQU5HRV9SRVNFUlZFRCk7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiArCX0K PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkdGJfZ2V0X3Jlc2VydmVk X21lbW9yeV9ub2RlKGNoYXIgKmR0YikKPiArewo+ICsJdWludDMyX3Qgcm9vdF9hZGRyX2NlbGxz ID0gMDsKPiArCXVpbnQzMl90IHJvb3Rfc2l6ZV9jZWxscyA9IDA7Cj4gKwl1aW50MzJfdCBhZGRy X2NlbGxzID0gMDsKPiArCXVpbnQzMl90IHNpemVfY2VsbHMgPSAwOwo+ICsJaW50IHByb3Bfc2l6 ZSA9IDA7Cj4gKwlpbnQgbm9kZW9mZnNldCA9IDA7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwkv KiBHZXQgYWRkcmVzcyAvIHNpemUgY2VsbHMgZnJvbSByb290IG5vZGUgKi8KPiArCXJldCA9IGR0 Yl9nZXRfbnVtX2NlbGxzKGR0YiwgMCwgJnJvb3RfYWRkcl9jZWxscywgJnJvb3Rfc2l6ZV9jZWxs cywgZmFsc2UpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlkYmdwcmludGYoIk5vIGFkZHJlc3Mv c2l6ZSBjZWxscyBvbiByb290IG5vZGUgIVxuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiAr Cj4gKwkvKiBUaGlzIGNhbGxzIGZkdF9uZXh0X25vZGUgaW50ZXJuYWx5ICovCj4gKwlub2Rlb2Zm c2V0ID0gZmR0X3N1Ym5vZGVfb2Zmc2V0KGR0YiwgMCwgInJlc2VydmVkLW1lbW9yeSIpOwo+ICsJ aWYgKG5vZGVvZmZzZXQgPT0gLUZEVF9FUlJfTk9URk9VTkQpIHsKPiArCQlyZXR1cm4gbm9kZW9m ZnNldDsKPiArCX0gZWxzZSBpZiAobm9kZW9mZnNldCA8IDApIHsKPiArCQlkYmdwcmludGYoIkVy cm9yIHdoaWxlIGxvb2tpbmcgZm9yIHJlc2VydmVkLW1lbW9yeTogJXNcbiIsCj4gKwkJCWZkdF9z dHJlcnJvcihub2Rlb2Zmc2V0KSk7Cj4gKwkJcmV0dXJuIG5vZGVvZmZzZXQ7Cj4gKwl9Cj4gKwo+ ICsJLyogTG9vayBmb3IgdGhlIHJhbmdlcyBwcm9wZXJ0eSAqLwo+ICsJZmR0X2dldHByb3AoZHRi LCBub2Rlb2Zmc2V0LCAicmFuZ2VzIiwgJnByb3Bfc2l6ZSk7Cj4gKwlpZiAocHJvcF9zaXplIDwg MCkgewo+ICsJCWZwcmludGYoc3RkZXJyLCAiTWFsZm9ybWVkIHJlc2VydmVkLW1lbW9yeSBub2Rl IChubyByYW5nZXMgcHJvcGVydHkpICFcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ ICsKPiArCS8qIFZlcmlmeSBhZGRyZXNzLWNlbGxzIC8gc2l6ZS1jZWxscyAqLwo+ICsJcmV0ID0g ZHRiX2dldF9udW1fY2VsbHMoZHRiLCBub2Rlb2Zmc2V0LCAmYWRkcl9jZWxscywgJnNpemVfY2Vs bHMsIGZhbHNlKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGJncHJpbnRmKCJObyBhZGRyZXNz L3NpemUgY2VsbHMgcHJvcGVydHkgb24gcmVzZXJ2ZWQtbWVtb3J5IG5vZGVcbiIpOwo+ICsJCXJl dHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKGFkZHJfY2VsbHMgIT0gcm9vdF9hZGRyX2NlbGxz KSB7Cj4gKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkICNhZGRyZXNzLWNlbGxzIHByb3BlcnR5 IG9uIHJlc2VydmVkLW1lbW9yeSBub2RlXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0K PiArCj4gKwlpZiAoc2l6ZV9jZWxscyAhPSByb290X3NpemVfY2VsbHMpIHsKPiArCQlmcHJpbnRm KHN0ZGVyciwgIkludmFsaWQgI3NpemUtY2VsbHMgcHJvcGVydHkgb24gcmVzZXJ2ZWQtbWVtb3J5 IG5vZGVcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCX0KPiArCj4gKwlyZXR1cm4g bm9kZW9mZnNldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkdGJfcGFyc2VfcmVzZXJ2ZWRfbWVt b3J5X25vZGUoY2hhciAqZHRiLCBzdHJ1Y3QgbWVtb3J5X3JhbmdlcyAqbWVtX3JhbmdlcykKPiAr ewo+ICsJaW50IG5vZGVvZmZzZXQgPSAwOwo+ICsJaW50IG5vZGVfZGVwdGggPSAwOwo+ICsJaW50 IHBhcmVudF9kZXB0aCA9IDA7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlub2Rlb2Zmc2V0ID0g ZHRiX2dldF9yZXNlcnZlZF9tZW1vcnlfbm9kZShkdGIpOwo+ICsJaWYgKG5vZGVvZmZzZXQgPT0g LUZEVF9FUlJfTk9URk9VTkQpCj4gKwkJcmV0dXJuIDA7Cj4gKwllbHNlIGlmIChub2Rlb2Zmc2V0 IDwgMCkKPiArCQlyZXR1cm4gbm9kZW9mZnNldDsKPiArCj4gKwkvKiBHb3QgdGhlIHBhcmVudCBu b2RlLCBjaGVjayBmb3Igc3ViLW5vZGVzICovCj4gKwo+ICsJLyogZmR0X25leHRfbm9kZSgpIGlu Y3JlYXNlcyBvciBkZWNyZWFzZXMgZGVwdGggKi8KPiArCW5vZGVfZGVwdGggPSBwYXJlbnRfZGVw dGg7Cj4gKwlub2Rlb2Zmc2V0ID0gZmR0X25leHRfbm9kZShkdGIsIG5vZGVvZmZzZXQsICZub2Rl X2RlcHRoKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGJncHJpbnRmKCJVbmFibGUgdG8gZ2V0 IG5leHQgbm9kZTogJXNcbiIsCj4gKwkJCSAgZmR0X3N0cmVycm9yKHJldCkpOwo+ICsJCXJldHVy biAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXdoaWxlIChub2RlX2RlcHRoICE9IHBhcmVudF9kZXB0 aCkgewo+ICsKPiArCQlyZXQgPSBkdGJfYWRkX21lbW9yeV9yZWdpb24oZHRiLCBub2Rlb2Zmc2V0 LAo+ICsJCQkJCSAgICBtZW1fcmFuZ2VzLCBSQU5HRV9SRVNFUlZFRCk7Cj4gKwkJaWYgKHJldCkK PiArCQkJcmV0dXJuIHJldDsKPiArCj4gKwkJbm9kZW9mZnNldCA9IGZkdF9uZXh0X25vZGUoZHRi LCBub2Rlb2Zmc2V0LCAmbm9kZV9kZXB0aCk7Cj4gKwkJaWYgKHJldCA8IDApIHsKPiArCQkJZGJn cHJpbnRmKCJVbmFibGUgdG8gZ2V0IG5leHQgbm9kZTogJXNcbiIsCj4gKwkJCQkgIGZkdF9zdHJl cnJvcihyZXQpKTsKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR0Yl9wYXJzZV9tZW1vcnlfbm9kZXMoY2hh ciAqZHRiLCBzdHJ1Y3QgbWVtb3J5X3JhbmdlcyAqbWVtX3JhbmdlcykKPiArewo+ICsJaW50IG5v ZGVvZmZzZXQgPSAwOwo+ICsJaW50IG51bV9yZWdpb25zID0gMDsKPiArCWNvbnN0IGNoYXIqIGRl dl90eXBlID0gMDsKPiArCWludCBwcm9wX3NpemUgPSAwOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ ICsJZm9yICg7IDsgbnVtX3JlZ2lvbnMrKykgewo+ICsJCW5vZGVvZmZzZXQgPSBmZHRfc3Vibm9k ZV9vZmZzZXQoZHRiLCBub2Rlb2Zmc2V0LAo+ICsJCQkJCQkgIm1lbW9yeSIpOwo+ICsJCWlmIChu b2Rlb2Zmc2V0IDwgMCkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCWRiZ3ByaW50ZigiR290IG1lbW9y eSBub2RlIGF0IGRlcHRoOiAlaVxuIiwgZmR0X25vZGVfZGVwdGgoZHRiLCBub2Rlb2Zmc2V0KSk7 Cj4gKwo+ICsJCS8qIExvb2sgZm9yIHRoZSBkZXZpY2VfdHlwZSAgcHJvcGVydHkgKi8KPiArCQlk ZXZfdHlwZSA9IGZkdF9nZXRwcm9wKGR0Yiwgbm9kZW9mZnNldCwgImRldmljZV90eXBlIiwgJnBy b3Bfc2l6ZSk7Cj4gKwkJaWYgKHByb3Bfc2l6ZSA8IDApIHsKPiArCQkJZnByaW50ZihzdGRlcnIs ICJNYWxmb3JtZWQgL21lbW9yeSBub2RlIChubyBkZXZpY2UtdHlwZSBwcm9wZXJ0eSkgIVxuIik7 Cj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCj4gKwkJaWYgKHN0cm5jbXAoZGV2X3R5 cGUsICJtZW1vcnkiLCBwcm9wX3NpemUpKSB7Cj4gKwkJCWRiZ3ByaW50ZigiR290IHVua25vd24g ZGV2X3R5cGUgcHJvcGVydHk6ICVzXG4iLCBkZXZfdHlwZSk7Cj4gKwkJCWNvbnRpbnVlOwo+ICsJ CX0KPiArCj4gKwkJcmV0ID0gZHRiX2FkZF9tZW1vcnlfcmVnaW9uKGR0Yiwgbm9kZW9mZnNldCwg bWVtX3JhbmdlcywgUkFOR0VfUkFNKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ ICsJfQo+ICsKPiArCWlmICghbnVtX3JlZ2lvbnMpIHsKPiArCQlkYmdwcmludGYoIk1hbGZvcm1l ZCBkdGIsIG5vIC9tZW1vcnkgbm9kZXMgcHJlc2VudCAhXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZB TDsKPiArCX0KPiArCj4gKwlkYmdwcmludGYoIkdvdCAlaSAvbWVtb3J5IG5vZGVzXG4iLCBudW1f cmVnaW9ucyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBkdGJfZ2V0X21lbW9y eV9yYW5nZXMoY2hhciAqZHRiLCBzdHJ1Y3QgbWVtb3J5X3JhbmdlcyAqbWVtX3Jhbmdlcywgc3Ry dWN0IG1lbW9yeV9yYW5nZXMgKmV4dHJhX3JhbmdlcykKPiArewo+ICsJaW50IGkgPSAwOwo+ICsJ aW50IHJldCA9IDA7Cj4gKwo+ICsJLyogRmlsbCBtZW1fcmFuZ2VzW10gYnkgcGFyc2luZyB0aGUg ZGV2aWNlIHRyZWUgKi8KPiArCXJldCA9IGR0Yl9wYXJzZV9tZW1vcnlfbm9kZXMoZHRiLCBtZW1f cmFuZ2VzKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXQgPSBkdGJf cGFyc2VfbWVtb3J5X3Jlc2VydmF0aW9uc190YWJsZShkdGIsIG1lbV9yYW5nZXMpOwo+ICsJaWYg KHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldCA9IGR0Yl9wYXJzZV9yZXNlcnZlZF9t ZW1vcnlfbm9kZShkdGIsIG1lbV9yYW5nZXMpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0 Owo+ICsKPiArCS8qIEFwcGVuZCBhbnkgZXh0cmEgcmFuZ2VzIHByb3ZpZGVkIGJ5IHRoZSBjYWxs ZXIgKGUuZy4gaW5pdHJkKSAqLwo+ICsJZm9yIChpID0gMDsgZXh0cmFfcmFuZ2VzICE9IE5VTEwg JiYgaSA8IGV4dHJhX3Jhbmdlcy0+c2l6ZTsgaSsrKSB7Cj4gKwkJZGJncHJpbnRmKCJBZGRpbmcg ZXh0cmEgcmFuZ2U6IDB4JWxseCAtIDB4JWxseCAoJXMpXG4iLAo+ICsJCQkgIGV4dHJhX3Jhbmdl cy0+cmFuZ2VzW2ldLnN0YXJ0LAo+ICsJCQkgIGV4dHJhX3Jhbmdlcy0+cmFuZ2VzW2ldLmVuZCwK PiArCQkJICBleHRyYV9yYW5nZXMtPnJhbmdlc1tpXS50eXBlID09IFJBTkdFX1JFU0VSVkVEID8K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAiUkFOR0VfUkVTRVJWRUQiIDogIlJBTkdFX1JB TSIpOwo+ICsKPiArCQlyZXQgPSBkdGJfYWRkX21lbW9yeV9yYW5nZShtZW1fcmFuZ2VzLCBleHRy YV9yYW5nZXMtPnJhbmdlc1tpXS5zdGFydCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBleHRyYV9yYW5nZXMtPnJhbmdlc1tpXS5lbmQsIGV4dHJhX3Jhbmdlcy0+cmFuZ2VzW2ld LnR5cGUpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJbWVt X3JlZ2lvbnNfc29ydChtZW1fcmFuZ2VzKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+IGRpZmYg LS1naXQgYS9rZXhlYy9kdC1vcHMuaCBiL2tleGVjL2R0LW9wcy5oCj4gaW5kZXggMDM2NTljZS4u MzAxNDIwNSAxMDA2NDQKPiAtLS0gYS9rZXhlYy9kdC1vcHMuaAo+ICsrKyBiL2tleGVjL2R0LW9w cy5oCj4gQEAgLTExLDQgKzExLDExIEBAIGludCBkdGJfc2V0X3Byb3BlcnR5KGNoYXIgKipkdGIs IG9mZl90ICpkdGJfc2l6ZSwgY29uc3QgY2hhciAqbm9kZSwKPiAgIAo+ICAgaW50IGR0Yl9kZWxl dGVfcHJvcGVydHkoY2hhciAqZHRiLCBjb25zdCBjaGFyICpub2RlLCBjb25zdCBjaGFyICpwcm9w KTsKPiAgIAo+ICt2b2lkIGR0Yl9leHRyYWN0X2ludF9wcm9wZXJ0eSh1aW50NjRfdCAqdmFsLCBj b25zdCB2b2lkICpidWYsIHVpbnQzMl90IGNlbGxzKTsKPiArdm9pZCBkdGJfZmlsbF9pbnRfcHJv cGVydHkodm9pZCAqYnVmLCB1aW50NjRfdCB2YWwsIHVpbnQzMl90IGNlbGxzKTsKPiAraW50IGR0 Yl9hZGRfcmFuZ2VfcHJvcGVydHkoY2hhciAqKmR0Yiwgb2ZmX3QgKmR0Yl9zaXplLCB1aW50NjRf dCBzdGFydCwgdWludDY0X3QgZW5kLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICpub2RlLCBjb25zdCBjaGFyKiBwYXJlbnQpOwo+ICtpbnQgZHRiX2dldF9tZW1vcnlf cmFuZ2VzKGNoYXIgKmR0Yiwgc3RydWN0IG1lbW9yeV9yYW5nZXMgKm1lbV9yYW5nZXMsCj4gKwkJ CSAgc3RydWN0IG1lbW9yeV9yYW5nZXMgKmV4dHJhX3Jhbmdlcyk7Cj4gKwo+ICAgI2VuZGlmCj4g ZGlmZiAtLWdpdCBhL2tleGVjL2tleGVjLXN5c2NhbGwuaCBiL2tleGVjL2tleGVjLXN5c2NhbGwu aAo+IGluZGV4IGJlYTI5ZDQuLjJlOTllMmIgMTAwNjQ0Cj4gLS0tIGEva2V4ZWMva2V4ZWMtc3lz Y2FsbC5oCj4gKysrIGIva2V4ZWMva2V4ZWMtc3lzY2FsbC5oCj4gQEAgLTEzNCw2ICsxMzQsNyBA QCBzdGF0aWMgaW5saW5lIGxvbmcga2V4ZWNfZmlsZV9sb2FkKGludCBrZXJuZWxfZmQsIGludCBp bml0cmRfZmQsCj4gICAjZGVmaW5lIEtFWEVDX0FSQ0hfTUlQU19MRSAoMTAgPDwgMTYpCj4gICAj ZGVmaW5lIEtFWEVDX0FSQ0hfTUlQUyAgICAoIDggPDwgMTYpCj4gICAjZGVmaW5lIEtFWEVDX0FS Q0hfQ1JJUyAgICAoNzYgPDwgMTYpCj4gKyNkZWZpbmUgS0VYRUNfQVJDSF9SSVNDViAgICgyNDMg PDwgMTYpCj4gICAKPiAgICNkZWZpbmUgS0VYRUNfTUFYX1NFR01FTlRTIDE2Cj4gICAKPiBAQCAt MTc3LDUgKzE3OCw4IEBAIHN0YXRpYyBpbmxpbmUgbG9uZyBrZXhlY19maWxlX2xvYWQoaW50IGtl cm5lbF9mZCwgaW50IGluaXRyZF9mZCwKPiAgICNpZiBkZWZpbmVkKF9fYXJtNjRfXykKPiAgICNk ZWZpbmUgS0VYRUNfQVJDSF9OQVRJVkUJS0VYRUNfQVJDSF9BUk02NAo+ICAgI2VuZGlmCj4gKyNp ZiBkZWZpbmVkKF9fcmlzY3ZfXykgfHwgZGVmaW5lZChfX3Jpc2N2KQo+ICsjZGVmaW5lIEtFWEVD X0FSQ0hfTkFUSVZFCUtFWEVDX0FSQ0hfUklTQ1YKPiArI2VuZGlmCj4gICAKPiAgICNlbmRpZiAv KiBLRVhFQ19TWVNDQUxMX0ggKi8KPiBkaWZmIC0tZ2l0IGEvcHVyZ2F0b3J5L01ha2VmaWxlIGIv cHVyZ2F0b3J5L01ha2VmaWxlCj4gaW5kZXggMTVhZGIxMi4uMTE2OTRlNSAxMDA2NDQKPiAtLS0g YS9wdXJnYXRvcnkvTWFrZWZpbGUKPiArKysgYi9wdXJnYXRvcnkvTWFrZWZpbGUKPiBAQCAtMjUs NiArMjUsNyBAQCBpbmNsdWRlICQoc3JjZGlyKS9wdXJnYXRvcnkvYXJjaC9pYTY0L01ha2VmaWxl Cj4gICBpbmNsdWRlICQoc3JjZGlyKS9wdXJnYXRvcnkvYXJjaC9taXBzL01ha2VmaWxlCj4gICBp bmNsdWRlICQoc3JjZGlyKS9wdXJnYXRvcnkvYXJjaC9wcGMvTWFrZWZpbGUKPiAgIGluY2x1ZGUg JChzcmNkaXIpL3B1cmdhdG9yeS9hcmNoL3BwYzY0L01ha2VmaWxlCj4gK2luY2x1ZGUgJChzcmNk aXIpL3B1cmdhdG9yeS9hcmNoL3Jpc2N2L01ha2VmaWxlCj4gICBpbmNsdWRlICQoc3JjZGlyKS9w dXJnYXRvcnkvYXJjaC9zMzkwL01ha2VmaWxlCj4gICBpbmNsdWRlICQoc3JjZGlyKS9wdXJnYXRv cnkvYXJjaC9zaC9NYWtlZmlsZQo+ICAgaW5jbHVkZSAkKHNyY2RpcikvcHVyZ2F0b3J5L2FyY2gv eDg2XzY0L01ha2VmaWxlCj4gZGlmZiAtLWdpdCBhL3B1cmdhdG9yeS9hcmNoL3Jpc2N2L01ha2Vm aWxlIGIvcHVyZ2F0b3J5L2FyY2gvcmlzY3YvTWFrZWZpbGUKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAuLjhiZGVkNzEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvcHVyZ2F0 b3J5L2FyY2gvcmlzY3YvTWFrZWZpbGUKPiBAQCAtMCwwICsxLDcgQEAKPiArIwo+ICsjIFB1cmdh dG9yeSByaXNjdgo+ICsjCj4gKwo+ICtyaXNjdl9QVVJHQVRPUllfU1JDUyA9Cj4gKwo+ICtkaXN0 ICs9IHB1cmdhdG9yeS9hcmNoL3NoL01ha2VmaWxlICQocmlzY3ZfUFVSR0FUT1JZX1NSQ1MpCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwprZXhlYyBtYWls aW5nIGxpc3QKa2V4ZWNAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFk Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2tleGVjCg==