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 B95C0C77B61 for ; Mon, 17 Apr 2023 01:17:40 +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-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:References:Cc:To:Subject: From: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=9WI5H2qJbEcq1d3naoXfz6MqqjO7GlSvHKcG2Fbuosw=; b=x893vExIfZWyHg ROp3EEodq/QIwX705OkZnF10ALvhI6jKmQmqb/A/N+CxiubzSwQLnlwT+xpvklgB9wyKj/PK6TcjM j1wiEQSHzmlZQeNBeLtjYjvybwpkA+cLBtLSdRi97iCl3c7g+gTqN86ifp/o2D8SiKztDcnquIEyV qXcfj2B9bEJaAPPAu9/aJ+C0xVZj8pnEH0M/E1tN4NfIvYc//Z6qIhzv1Of1wsZkGB3jm9sVpTM9G mcJCRtGufn0ENc+dGn/eyz/i+nGAHD4gc0xlo4y8/Wj2kRHY8i2tDN0Ns/B0PepdmT8H8jntVPxqw 4Y4KIhmVwqEIuZZ8VGQw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1poDTl-00EcSz-37; Mon, 17 Apr 2023 01:16:25 +0000 Received: from out30-132.freemail.mail.aliyun.com ([115.124.30.132]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1poDTf-00EcR1-2J for linux-arm-kernel@lists.infradead.org; Mon, 17 Apr 2023 01:16:24 +0000 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R611e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046051;MF=xueshuai@linux.alibaba.com;NM=1;PH=DS;RN=12;SR=0;TI=SMTPD_---0VgBUyno_1681694170; Received: from 30.97.56.45(mailfrom:xueshuai@linux.alibaba.com fp:SMTPD_---0VgBUyno_1681694170) by smtp.aliyun-inc.com; Mon, 17 Apr 2023 09:16:11 +0800 Message-ID: Date: Mon, 17 Apr 2023 09:16:09 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.9.0 From: Shuai Xue Subject: Re: [PATCH v2 2/3] drivers/perf: add DesignWare PCIe PMU driver To: Baolin Wang , helgaas@kernel.org, yangyicong@huawei.com, will@kernel.org, Jonathan.Cameron@huawei.com Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, rdunlap@infradead.org, robin.murphy@arm.com, mark.rutland@arm.com, zhuo.song@linux.alibaba.com References: <20220917121036.14864-1-xueshuai@linux.alibaba.com> <20230410031702.68355-3-xueshuai@linux.alibaba.com> <713d8162-dd3c-483c-b984-7707ef8aaa36@linux.alibaba.com> Content-Language: en-US In-Reply-To: <713d8162-dd3c-483c-b984-7707ef8aaa36@linux.alibaba.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230416_181620_092349_104DB8D6 X-CRM114-Status: GOOD ( 26.44 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiAyMDIzLzQvMTEgQU0xMToxNywgQmFvbGluIFdhbmcgd3JvdGU6Cj4gCj4gCj4gT24gNC8x MC8yMDIzIDExOjE3IEFNLCBTaHVhaSBYdWUgd3JvdGU6Cj4+IFRoaXMgY29tbWl0IGFkZHMgdGhl IFBDSWUgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0IChQTVUpIGRyaXZlciBzdXBwb3J0Cj4+ IGZvciBULUhlYWQgWWl0aWFuIFNvQyBjaGlwLiBZaXRpYW4gaXMgYmFzZWQgb24gdGhlIFN5bm9w c3lzIFBDSSBFeHByZXNzCj4+IENvcmUgY29udHJvbGxlciBJUCB3aGljaCBwcm92aWRlcyBzdGF0 aXN0aWNzIGZlYXR1cmUuIFRoZSBQTVUgaXMgbm90IGEgUENJZQo+PiBSb290IENvbXBsZXggaW50 ZWdyYXRlZCBFbmQgUG9pbnQoUkNpRVApIGRldmljZSBidXQgb25seSByZWdpc3RlciBjb3VudGVy cwo+PiBwcm92aWRlZCBieSBlYWNoIFBDSWUgUm9vdCBQb3J0Lgo+Pgo+PiBUbyBmYWNpbGl0YXRl IGNvbGxlY3Rpb24gb2Ygc3RhdGlzdGljcyB0aGUgY29udHJvbGxlciBwcm92aWRlcyB0aGUKPj4g Zm9sbG93aW5nIHR3byBmZWF0dXJlcyBmb3IgZWFjaCBSb290IFBvcnQ6Cj4+Cj4+IC0gVGltZSBC YXNlZCBBbmFseXNpcyAoUlgvVFggZGF0YSB0aHJvdWdocHV0IGFuZCB0aW1lIHNwZW50IGluIGVh Y2gKPj4gwqDCoCBsb3ctcG93ZXIgTFRTU00gc3RhdGUpCj4+IC0gRXZlbnQgY291bnRlcnMgKEVy cm9yIGFuZCBOb24tRXJyb3IgZm9yIGxhbmVzKQo+Pgo+PiBOb3RlLCBvbmx5IG9uZSBjb3VudGVy IGZvciBlYWNoIHR5cGUgYW5kIGRvZXMgbm90IG92ZXJmbG93IGludGVycnVwdC4KPj4KPj4gVGhp cyBkcml2ZXIgYWRkcyBQTVUgZGV2aWNlcyBmb3IgZWFjaCBQQ0llIFJvb3QgUG9ydC4gQW5kIHRo ZSBQTVUgZGV2aWNlIGlzCj4+IG5hbWVkIGJhc2VkIHRoZSBCREYgb2YgUm9vdCBQb3J0LiBGb3Ig ZXhhbXBsZSwKPj4KPj4gwqDCoMKgwqAgMzA6MDMuMCBQQ0kgYnJpZGdlOiBEZXZpY2UgMWRlZDo4 MDAwIChyZXYgMDEpCj4+Cj4+IHRoZSBQTVUgZGV2aWNlIG5hbWUgZm9yIHRoaXMgUm9vdCBQb3J0 IGlzIGR3Y19yb290cG9ydF8zMDE4Lgo+Pgo+PiBFeGFtcGxlIHVzYWdlIG9mIGNvdW50aW5nIFBD SWUgUlggVExQIGRhdGEgcGF5bG9hZCAoVW5pdHMgb2YgMTYgYnl0ZXMpOjoKPj4KPj4gwqDCoMKg wqAgJCMgcGVyZiBzdGF0IC1hIC1lIGR3Y19yb290cG9ydF8zMDE4L1J4X1BDSWVfVExQX0RhdGFf UGF5bG9hZC8KPj4KPj4gYXZlcmFnZSBSWCBiYW5kd2lkdGggY2FuIGJlIGNhbGN1bGF0ZWQgbGlr ZSB0aGlzOgo+Pgo+PiDCoMKgwqDCoCBQQ0llIFRYIEJhbmR3aWR0aCA9IFBDSUVfVFhfREFUQSAq IDE2QiAvIE1lYXN1cmVfVGltZV9XaW5kb3cKPj4KPj4gU2lnbmVkLW9mZi1ieTogU2h1YWkgWHVl IDx4dWVzaHVhaUBsaW51eC5hbGliYWJhLmNvbT4KPj4gLS0tCj4+IMKgIGRyaXZlcnMvcGVyZi9L Y29uZmlnwqDCoMKgwqDCoMKgwqAgfMKgwqAgNyArCj4+IMKgIGRyaXZlcnMvcGVyZi9NYWtlZmls ZcKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPj4gwqAgZHJpdmVycy9wZXJmL2R3Y19wY2llX3BtdS5j IHwgODc3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+PiDCoCAzIGZpbGVz IGNoYW5nZWQsIDg4NSBpbnNlcnRpb25zKCspCj4+IMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL3BlcmYvZHdjX3BjaWVfcG11LmMKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVyZi9L Y29uZmlnIGIvZHJpdmVycy9wZXJmL0tjb25maWcKPj4gaW5kZXggNjZjMjU5MDAwYTQ0Li41N2Jj ZTM4ODBjYmEgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvcGVyZi9LY29uZmlnCj4+ICsrKyBiL2Ry aXZlcnMvcGVyZi9LY29uZmlnCj4+IEBAIC0xOTksNiArMTk5LDEzIEBAIGNvbmZpZyBNQVJWRUxM X0NOMTBLX0REUl9QTVUKPj4gwqDCoMKgwqDCoMKgwqAgRW5hYmxlIHBlcmYgc3VwcG9ydCBmb3Ig TWFydmVsbCBERFIgUGVyZm9ybWFuY2UgbW9uaXRvcmluZwo+PiDCoMKgwqDCoMKgwqDCoCBldmVu dCBvbiBDTjEwSyBwbGF0Zm9ybS4KPj4gwqAgK2NvbmZpZyBEV0NfUENJRV9QTVUKPj4gK8KgwqDC oCB0cmlzdGF0ZSAiRW5hYmxlIFN5bm9wc3lzIERlc2lnbldhcmUgUENJZSBQTVUgU3VwcG9ydCIK Pj4gK8KgwqDCoCBkZXBlbmRzIG9uIEFSTTY0IHx8IChDT01QSUxFX1RFU1QgJiYgNjRCSVQpCj4+ ICvCoMKgwqAgaGVscAo+PiArwqDCoMKgwqDCoCBFbmFibGUgcGVyZiBzdXBwb3J0IGZvciBTeW5v cHN5cyBEZXNpZ25XYXJlIFBDSWUgUE1VIFBlcmZvcm1hbmNlCj4+ICvCoMKgwqDCoMKgIG1vbml0 b3JpbmcgZXZlbnQgb24gWWl0aWFuIDcxMCBwbGF0Zm9ybS4KPj4gKwo+PiDCoCBzb3VyY2UgImRy aXZlcnMvcGVyZi9hcm1fY3NwbXUvS2NvbmZpZyIKPj4gwqAgwqAgc291cmNlICJkcml2ZXJzL3Bl cmYvYW1sb2dpYy9LY29uZmlnIgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wZXJmL01ha2VmaWxl IGIvZHJpdmVycy9wZXJmL01ha2VmaWxlCj4+IGluZGV4IDEzZTQ1ZGE2MTEwMC4uM2YyMzNlOTY1 MjRlIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3BlcmYvTWFrZWZpbGUKPj4gKysrIGIvZHJpdmVy cy9wZXJmL01ha2VmaWxlCj4+IEBAIC0yMSw1ICsyMSw2IEBAIG9iai0kKENPTkZJR19NQVJWRUxM X0NOMTBLX1RBRF9QTVUpICs9IG1hcnZlbGxfY24xMGtfdGFkX3BtdS5vCj4+IMKgIG9iai0kKENP TkZJR19NQVJWRUxMX0NOMTBLX0REUl9QTVUpICs9IG1hcnZlbGxfY24xMGtfZGRyX3BtdS5vCj4+ IMKgIG9iai0kKENPTkZJR19BUFBMRV9NMV9DUFVfUE1VKSArPSBhcHBsZV9tMV9jcHVfcG11Lm8K Pj4gwqAgb2JqLSQoQ09ORklHX0FMSUJBQkFfVU5DT1JFX0RSV19QTVUpICs9IGFsaWJhYmFfdW5j b3JlX2Ryd19wbXUubwo+PiArb2JqLSQoQ09ORklHX0RXQ19QQ0lFX1BNVSkgKz0gZHdjX3BjaWVf cG11Lm8KPj4gwqAgb2JqLSQoQ09ORklHX0FSTV9DT1JFU0lHSFRfUE1VX0FSQ0hfU1lTVEVNX1BN VSkgKz0gYXJtX2NzcG11Lwo+PiDCoCBvYmotJChDT05GSUdfTUVTT05fRERSX1BNVSkgKz0gYW1s b2dpYy8KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVyZi9kd2NfcGNpZV9wbXUuYyBiL2RyaXZl cnMvcGVyZi9kd2NfcGNpZV9wbXUuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAw MDAwMDAwMDAwMDAuLmM4YzA5ZjEyMGQ0ZQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZl cnMvcGVyZi9kd2NfcGNpZV9wbXUuYwo+PiBAQCAtMCwwICsxLDg3NyBAQAo+PiArLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPj4gKy8qCj4+ICsgKiBTeW5vcHN5cyBEZXNpZ25X YXJlIFBDSWUgUE1VIGRyaXZlcgo+PiArICoKPj4gKyAqIENvcHlyaWdodCAoQykgMjAyMSwgMjAy MiBBbGliYWJhIEluYy4KPj4gKyAqLwo+PiArCj4+ICsjaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4+ ICsjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMu aD4KPj4gKyNpbmNsdWRlIDxsaW51eC9jcHVob3RwbHVnLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgv Y3B1bWFzay5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+PiArI2luY2x1ZGUgPGxp bnV4L2Vycm5vLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4+ICsjaW5jbHVkZSA8 bGludXgvbGlzdC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KPj4gKyNpbmNs dWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4K Pj4gKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ Cj4+ICsjZGVmaW5lIFBDSV9WRU5ET1JfSURfQUxJQkFCQSAweDFkZWQKPj4gKwo+PiArI2RlZmlu ZSBBVFRSSV9OQU1FX01BWF9TSVpFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAzMgo+PiArI2RlZmlu ZSBEV0NfUENJRV9WU0VDX1JBU19ERVNfSUTCoMKgwqDCoMKgwqDCoCAweDAyCj4+ICsKPj4gKyNk ZWZpbmUgRFdDX1BDSUVfRVZFTlRfQ05UX0NUTMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHg4Cj4+ ICsjZGVmaW5lIERXQ19QQ0lFX0NOVF9FVkVOVF9TRUzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdF Tk1BU0soMjcsIDE2KQo+PiArI2RlZmluZSBEV0NfUENJRV9DTlRfTEFORV9TRUzCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIEdFTk1BU0soMTEsIDgpCj4+ICsjZGVmaW5lIERXQ19QQ0lFX0NOVF9TVEFU VVPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCg3KQo+PiArI2RlZmluZSBEV0NfUENJRV9DTlRf RU5BQkxFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU5NQVNLKDQsIDIpCj4+ICsjZGVmaW5lIERX Q19QQ0lFX1BFUl9FVkVOVF9PRkbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZJRUxEX1BSRVAoRFdD X1BDSUVfQ05UX0VOQUJMRSwgMHgxKQo+PiArI2RlZmluZSBEV0NfUENJRV9QRVJfRVZFTlRfT07C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZJRUxEX1BSRVAoRFdDX1BDSUVfQ05UX0VOQUJMRSwgMHgz KQo+PiArI2RlZmluZSBEV0NfUENJRV9FVkVOVF9DTEVBUsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg R0VOTUFTSygxLCAwKQo+PiArI2RlZmluZSBEV0NfUENJRV9FVkVOVF9QRVJfQ0xFQVLCoMKgwqDC oMKgwqDCoCAweDEKPj4gKwo+PiArI2RlZmluZSBEV0NfUENJRV9FVkVOVF9DTlRfREFUQcKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgMHhDCj4+ICsKPj4gKyNkZWZpbmUgRFdDX1BDSUVfVElNRV9CQVNF RF9BTkFMX0NUTMKgwqDCoMKgwqDCoMKgIDB4MTAKPj4gKyNkZWZpbmUgRFdDX1BDSUVfVElNRV9C QVNFRF9SRVBPUlRfU0VMwqDCoMKgwqDCoMKgwqAgR0VOTUFTSygzMSwgMjQpCj4+ICsjZGVmaW5l IERXQ19QQ0lFX1RJTUVfQkFTRURfRFVSQVRJT05fU0VMwqDCoMKgIEdFTk1BU0soMTUsIDgpCj4+ ICsjZGVmaW5lIERXQ19QQ0lFX0RVUkFUSU9OX01BTlVBTF9DVEzCoMKgwqDCoMKgwqDCoCAweDAK Pj4gKyNkZWZpbmUgRFdDX1BDSUVfRFVSQVRJT05fMU1TwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAw eDEKPj4gKyNkZWZpbmUgRFdDX1BDSUVfRFVSQVRJT05fMTBNU8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgMHgyCj4+ICsjZGVmaW5lIERXQ19QQ0lFX0RVUkFUSU9OXzEwME1TwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAweDMKPj4gKyNkZWZpbmUgRFdDX1BDSUVfRFVSQVRJT05fMVPCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIDB4NAo+PiArI2RlZmluZSBEV0NfUENJRV9EVVJBVElPTl8yU8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgMHg1Cj4+ICsjZGVmaW5lIERXQ19QQ0lFX0RVUkFUSU9OXzRTwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAweDYKPj4gKyNkZWZpbmUgRFdDX1BDSUVfRFVSQVRJT05fNFVTwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAweGZmCj4+ICsjZGVmaW5lIERXQ19QQ0lFX1RJTUVfQkFTRURfQ05U X0VOQUJMRcKgwqDCoMKgwqDCoMKgIDB4MQo+PiArCj4+ICsjZGVmaW5lIERXQ19QQ0lFX1RJTUVf QkFTRURfQU5BTF9EQVRBX1JFR19MT1fCoMKgwqAgMHgxNAo+PiArI2RlZmluZSBEV0NfUENJRV9U SU1FX0JBU0VEX0FOQUxfREFUQV9SRUdfSElHSMKgwqDCoCAweDE4Cj4+ICsKPj4gKy8qIEV2ZW50 IGF0dHJpYnV0ZXMgKi8KPj4gKyNkZWZpbmUgRFdDX1BDSUVfQ09ORklHX0VWRU5USUTCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIEdFTk1BU0soMTUsIDApCj4+ICsjZGVmaW5lIERXQ19QQ0lFX0NPTkZJ R19UWVBFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU5NQVNLKDE5LCAxNikKPj4gKyNkZWZpbmUg RFdDX1BDSUVfQ09ORklHX0xBTkXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTk1BU0soMjcsIDIw KQo+PiArCj4+ICsjZGVmaW5lIERXQ19QQ0lFX0VWRU5UX0lEKGV2ZW50KcKgwqDCoCBGSUVMRF9H RVQoRFdDX1BDSUVfQ09ORklHX0VWRU5USUQsIChldmVudCktPmF0dHIuY29uZmlnKQo+PiArI2Rl ZmluZSBEV0NfUENJRV9FVkVOVF9UWVBFKGV2ZW50KcKgwqDCoCBGSUVMRF9HRVQoRFdDX1BDSUVf Q09ORklHX1RZUEUsIChldmVudCktPmF0dHIuY29uZmlnKQo+PiArI2RlZmluZSBEV0NfUENJRV9F VkVOVF9MQU5FKGV2ZW50KcKgwqDCoCBGSUVMRF9HRVQoRFdDX1BDSUVfQ09ORklHX0xBTkUsIChl dmVudCktPmF0dHIuY29uZmlnKQo+PiArCj4+ICsjZGVmaW5lIERXQ19QQ0lFX1BNVV9IQVNfUkVH SVNURVLCoMKgwqDCoMKgwqDCoCAxCj4+ICsKPj4gK2VudW0gZHdjX3BjaWVfZXZlbnRfdHlwZSB7 Cj4+ICvCoMKgwqAgRFdDX1BDSUVfVFlQRV9JTlZBTElELAo+PiArwqDCoMKgIERXQ19QQ0lFX1RJ TUVfQkFTRV9FVkVOVCwKPj4gK8KgwqDCoCBEV0NfUENJRV9MQU5FX0VWRU5ULAo+PiArfTsKPj4g Kwo+PiArc3RydWN0IGR3Y19ldmVudF9jb3VudGVycyB7Cj4+ICvCoMKgwqAgY29uc3QgY2hhciBu YW1lWzMyXTsKPj4gK8KgwqDCoCB1MzIgZXZlbnRfaWQ7Cj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3Qg ZHdjX3BjaWVfcG11IHsKPj4gK8KgwqDCoCBzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlOwo+PiArwqDC oMKgIHVuc2lnbmVkIGludCBvbl9jcHU7Cj4+ICvCoMKgwqAgc3RydWN0IHBtdSBwbXU7Cj4+ICvC oMKgwqAgc3RydWN0IGRldmljZSAqZGV2Owo+PiArfTsKPj4gKwo+PiArc3RydWN0IGR3Y19wY2ll X3JwX2luZm8gewo+PiArwqDCoMKgIHUzMiBiZGY7Cj4+ICvCoMKgwqAgdTMyIHJhc19kZXM7Cj4+ ICvCoMKgwqAgdTMyIG51bV9sYW5lczsKPj4gKwo+PiArwqDCoMKgIHN0cnVjdCBsaXN0X2hlYWQg cnBfbm9kZTsKPj4gK8KgwqDCoCBzdHJ1Y3QgcGNpX2RldiAqcGRldjsKPj4gK8KgwqDCoCBzdHJ1 Y3QgZHdjX3BjaWVfcG11IHBjaWVfcG11Owo+PiArwqDCoMKgIHU4IHBtdV9pc19yZWdpc3RlcjsK Pj4gK8KgwqDCoCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7Cj4+ICsKPj4gK8KgwqDCoCBzdHJ1 Y3QgZHdjX3BjaWVfZXZlbnRfYXR0ciAqbGFuZV9ldmVudF9hdHRyczsKPj4gK8KgwqDCoCBzdHJ1 Y3QgYXR0cmlidXRlICoqcGNpZV9wbXVfZXZlbnRfYXR0cnM7Cj4+ICvCoMKgwqAgc3RydWN0IGF0 dHJpYnV0ZV9ncm91cCBwY2llX3BtdV9ldmVudF9hdHRyc19ncm91cDsKPj4gK8KgwqDCoCBjb25z dCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpwY2llX3BtdV9hdHRyX2dyb3Vwc1s0XTsKPj4gK307 Cj4+ICsKPj4gK3N0cnVjdCBkd2NfcGNpZV9wbXVfcHJpdiB7Cj4+ICvCoMKgwqAgc3RydWN0IGRl dmljZSAqZGV2Owo+PiArwqDCoMKgIHUzMiBwY2llX2N0cmxfbnVtOwo+PiArwqDCoMKgIHN0cnVj dCBsaXN0X2hlYWQgcnBfaW5mb3M7Cj4+ICt9Owo+PiArCj4+ICsjZGVmaW5lIHRvX2R3Y19wY2ll X3BtdShwKSAoY29udGFpbmVyX29mKHAsIHN0cnVjdCBkd2NfcGNpZV9wbXUsIHBtdSkpCj4+ICsK Pj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkd2NfcGNpZV9wbXVfZGV2Owo+PiAr c3RhdGljIGNoYXIgKmV2ZW50X2F0dHJfbmFtZSA9ICJldmVudHMiOwo+IAo+IFNpbmNlIG9ubHkg b25lIHBsYWNlIHVzZXMgdGhlICdldmVudF9hdHRyX25hbWUnIHZhcmlhYmxlLCBqdXN0IHVzaW5n IHRoZSAiZXZlbnRzIiBzdHJpbmcgaW4gdGhlIGNvZGUgc2VlbXMgbW9yZSByZWFkYWJsZS4KPiAK Ck9rLCB3aWxsIGZpeCBpbiBuZXh0IHZlcnNpb24uCgo+PiArCj4+ICtzdGF0aWMgc3NpemVfdCBj cHVtYXNrX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2hhciAqYnVmKQo+PiArewo+ PiArwqDCoMKgIHN0cnVjdCBkd2NfcGNpZV9wbXUgKnBjaWVfcG11ID0gdG9fZHdjX3BjaWVfcG11 KGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiBjcHVtYXBfcHJp bnRfdG9fcGFnZWJ1Zih0cnVlLCBidWYsIGNwdW1hc2tfb2YocGNpZV9wbXUtPm9uX2NwdSkpOwo+ PiArfQo+PiArc3RhdGljIERFVklDRV9BVFRSX1JPKGNwdW1hc2spOwo+PiArCj4+ICsjZGVmaW5l IERFVklDRV9BVFRSX1JPKF9uYW1lKSBcCj4+ICvCoMKgwqAgc3RydWN0IGRldmljZV9hdHRyaWJ1 dGUgZGV2X2F0dHJfIyNfbmFtZSA9IF9fQVRUUl9STyhfbmFtZSkKPiAKPiBUaGVyZSBpcyBhbHJl YWR5IGEgZ2VuZXJhbCBERVZJQ0VfQVRUUl9STyBtYWNybyBpbiBsaW51eC9kZXZpY2UuaCwgcGxl YXNlIGRvIG5vdCBhZGQgZHVwbGljYXRlIGFuZCBjb25mdXNpbmcgbWFjcm8gZGVmaW5pdGlvbi4K PiAKPj4gKyNkZWZpbmUgX19BVFRSX1JPKF9uYW1lKSB7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4gCj4gVGhpcyBhbHNvIHNlZW1zIGEgbW9yZSBnZW5l cmFsIG1hY3JvIGRlZmluaXRpb24sIGNhbiB5b3UgcmVuYW1lIGl0IGFzIHNvbWV0aGluZyBsaWtl ICdEV0NfUE1VX0FUVFJfUk8nIG9yIG90aGVyIGJldHRlciBuYW1lPwo+IAo+PiArwqDCoMKgIC5h dHRywqDCoMKgID0geyAubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwgLm1vZGUgPSAwNDQ0IH0s wqDCoMKgwqDCoMKgwqAgXAo+PiArwqDCoMKgIC5zaG93wqDCoMKgID0gX25hbWUjI19zaG93LMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+PiArfQo+PiAr I2RlZmluZSBfX0FUVFIoX25hbWUsIF9tb2RlLCBfc2hvdywgX3N0b3JlKSB7wqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIFwKPiAKPiBkaXR0by4KCkkgd2FzIGdvaW5nIHRvIGNvcHkgdGhl IG1hY3JvIGRlZmluaXRpb25zIGZyb20gbGludXgvZGV2aWNlLmggYW5kIHNlZSBtb3JlIGRldGFp bHMsCnNvcnJ5IGZvciBmb3JnZXR0aW5nIHRvIGRlbGV0ZSBpdC4KCj4gCj4+ICvCoMKgwqAgLmF0 dHIgPSB7Lm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSkswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIFwKPj4gK8KgwqDCoMKgwqDCoMKgwqAgLm1vZGUgPSBWRVJJRllfT0NUQUxfUEVSTUlT U0lPTlMoX21vZGUpIH0swqDCoMKgwqDCoMKgwqAgXAo+PiArwqDCoMKgIC5zaG93wqDCoMKgID0g X3Nob3cswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4+ ICvCoMKgwqAgLnN0b3JlwqDCoMKgID0gX3N0b3JlLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGF0dHJp YnV0ZSAqZHdjX3BjaWVfcG11X2NwdW1hc2tfYXR0cnNbXSA9IHsKPj4gK8KgwqDCoCAmZGV2X2F0 dHJfY3B1bWFzay5hdHRyLAo+PiArwqDCoMKgIE5VTEwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBz dHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBjaWVfcG11X2NwdW1hc2tfYXR0cnNfZ3JvdXAgPSB7ID4g K8KgwqDCoCAuYXR0cnMgPSBkd2NfcGNpZV9wbXVfY3B1bWFza19hdHRycywKPj4gK307Cj4+ICsK Pj4gK3N0cnVjdCBkd2NfcGNpZV9mb3JtYXRfYXR0ciB7Cj4+ICvCoMKgwqAgc3RydWN0IGRldmlj ZV9hdHRyaWJ1dGUgYXR0cjsKPj4gK8KgwqDCoCB1NjQgZmllbGQ7Cj4+ICvCoMKgwqAgaW50IGNv bmZpZzsKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBzc2l6ZV90IGR3Y19wY2llX3BtdV9mb3JtYXRf c2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNoYXIgKmJ1ZikKPj4gK3sKPj4gK8KgwqDCoCBz dHJ1Y3QgZHdjX3BjaWVfZm9ybWF0X2F0dHIgKmZtdCA9IGNvbnRhaW5lcl9vZihhdHRyLCB0eXBl b2YoKmZtdCksIGF0dHIpOwo+PiArwqDCoMKgIGludCBsbyA9IF9fZmZzKGZtdC0+ZmllbGQpLCBo aSA9IF9fZmxzKGZtdC0+ZmllbGQpOwo+PiArCj4+ICvCoMKgwqAgaWYgKGxvID09IGhpKQo+PiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiY29uZmlnOiVk XG4iLCBsbyk7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIWZtdC0+Y29uZmlnKQo+PiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiY29uZmlnOiVkLSVkXG4iLCBs bywgaGkpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAi Y29uZmlnJWQ6JWQtJWRcbiIsIGZtdC0+Y29uZmlnLCBsbywKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaGkpOwo+PiArfQo+PiArCj4+ICsjZGVmaW5lIF9kd2NfcGNpZV9mb3JtYXRfYXR0cihf bmFtZSwgX2NmZywgX2ZsZCnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+PiArwqDC oMKgICgmKChzdHJ1Y3QgZHdjX3BjaWVfZm9ybWF0X2F0dHJbXSkge3vCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgXAo+PiArwqDCoMKgwqDCoMKgwqAgLmF0dHIgPSBfX0FUVFIoX25hbWUs IDA0NDQsIGR3Y19wY2llX3BtdV9mb3JtYXRfc2hvdywgTlVMTCkswqDCoMKgIFwKPj4gK8KgwqDC oMKgwqDCoMKgIC5jb25maWcgPSBfY2ZnLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgXAo+PiArwqDCoMKgwqDCoMKgwqAgLmZpZWxkID0gX2ZsZCzCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPj4gK8KgwqDCoCB9fSlb MF0uYXR0ci5hdHRyKQo+PiArCj4+ICsjZGVmaW5lIGR3Y19wY2llX2Zvcm1hdF9hdHRyKF9uYW1l LCBfZmxkKcKgwqDCoCBfZHdjX3BjaWVfZm9ybWF0X2F0dHIoX25hbWUsIDAsIF9mbGQpCj4+ICsK Pj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkd2NfcGNpZV9mb3JtYXRfYXR0cnNbXSA9IHsK Pj4gK8KgwqDCoCBkd2NfcGNpZV9mb3JtYXRfYXR0cih0eXBlLCBEV0NfUENJRV9DT05GSUdfVFlQ RSksCj4+ICvCoMKgwqAgZHdjX3BjaWVfZm9ybWF0X2F0dHIoZXZlbnRpZCwgRFdDX1BDSUVfQ09O RklHX0VWRU5USUQpLAo+PiArwqDCoMKgIGR3Y19wY2llX2Zvcm1hdF9hdHRyKGxhbmUsIERXQ19Q Q0lFX0NPTkZJR19MQU5FKSwKPj4gK8KgwqDCoCBOVUxMLAo+PiArfTsKPj4gKwo+PiArc3RhdGlj IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcGNpZV9wbXVfZm9ybWF0X2F0dHJzX2dyb3VwID0geyA+ ICvCoMKgwqAgLm5hbWUgPSAiZm9ybWF0IiwKPj4gK8KgwqDCoCAuYXR0cnMgPSBkd2NfcGNpZV9m b3JtYXRfYXR0cnMsCj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgZHdjX3BjaWVfZXZlbnRfYXR0ciB7 Cj4+ICvCoMKgwqAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYXR0cjsKPj4gK8KgwqDCoCBlbnVt IGR3Y19wY2llX2V2ZW50X3R5cGUgdHlwZTsKPj4gK8KgwqDCoCB1MTYgZXZlbnRpZDsKPj4gK8Kg wqDCoCB1OCBsYW5lOwo+PiArfTsKPj4gKwo+PiArc3NpemVfdCBkd2NfcGNpZV9ldmVudF9zaG93 KHN0cnVjdCBkZXZpY2UgKmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz dHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqcGFnZSkKPj4gK3sKPj4gK8KgwqDC oCBzdHJ1Y3QgZHdjX3BjaWVfZXZlbnRfYXR0ciAqZWF0dHI7Cj4+ICsKPj4gK8KgwqDCoCBlYXR0 ciA9IGNvbnRhaW5lcl9vZihhdHRyLCB0eXBlb2YoKmVhdHRyKSwgYXR0cik7Cj4+ICsKPj4gK8Kg wqDCoCBpZiAoZWF0dHItPnR5cGUgPT0gRFdDX1BDSUVfTEFORV9FVkVOVCkKPj4gK8KgwqDCoMKg wqDCoMKgIHJldHVybiBzcHJpbnRmKHBhZ2UsICJldmVudGlkPTB4JWx4LCB0eXBlPTB4JWx4LCBs YW5lPTB4JWx4XG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh1 bnNpZ25lZCBsb25nKWVhdHRyLT5ldmVudGlkLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICh1bnNpZ25lZCBsb25nKWVhdHRyLT50eXBlLAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh1bnNpZ25lZCBsb25nKWVhdHRyLT5sYW5lKTsKPj4g K8KgwqDCoCBlbHNlCj4gCj4gJ2Vsc2UnIGlzIHJlZHVuZGFudC4KCldpbGwgcmVtb3ZlIGl0IGlu IG5leHQgdmVyc2lvbi4KCgo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHNwcmludGYocGFnZSwg ImV2ZW50aWQ9MHglbHgsIHR5cGU9MHglbHgiLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICh1bnNpZ25lZCBsb25nKWVhdHRyLT5ldmVudGlkLAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh1bnNpZ25lZCBsb25nKWVhdHRyLT50eXBlKTsK Pj4gK30KPj4gKwo+PiArI2RlZmluZSBEV0NfUENJRV9FVkVOVF9BVFRSKF9uYW1lLCBfdHlwZSwg X2V2ZW50aWQsIF9sYW5lKcKgwqDCoMKgwqDCoMKgIFwKPj4gK8KgwqDCoCAoJigoc3RydWN0IGR3 Y19wY2llX2V2ZW50X2F0dHJbXSkge3vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+ PiArwqDCoMKgwqDCoMKgwqAgLmF0dHIgPSBfX0FUVFIoX25hbWUsIDA0NDQsIGR3Y19wY2llX2V2 ZW50X3Nob3csIE5VTEwpLMKgwqDCoCBcCj4+ICvCoMKgwqDCoMKgwqDCoCAudHlwZSA9IF90eXBl LMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+PiArwqDC oMKgwqDCoMKgwqAgLmV2ZW50aWQgPSBfZXZlbnRpZCzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBcCj4+ICvCoMKgwqDCoMKgwqDCoCAubGFuZSA9IF9sYW5lLMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPj4gK8KgwqDCoCB9fSlbMF0uYXR0ci5h dHRyKQo+PiArCj4+ICsjZGVmaW5lIERXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihfbmFtZSwg X2V2ZW50aWQpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4+ICvCoMKgwqAgRFdDX1BDSUVfRVZF TlRfQVRUUihfbmFtZSwgRFdDX1BDSUVfVElNRV9CQVNFX0VWRU5ULCBfZXZlbnRpZCwgMCkKPj4g Kwo+PiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmR3Y19wY2llX3BtdV90aW1lX2V2ZW50X2F0 dHJzW10gPSB7Cj4+ICvCoMKgwqAgLyogR3JvdXAgIzAgKi8KPj4gK8KgwqDCoCBEV0NfUENJRV9Q TVVfQkFTRV9USU1FX0FUVFIob25lX2N5Y2xlLCAweDAwKSwKPj4gK8KgwqDCoCBEV0NfUENJRV9Q TVVfQkFTRV9USU1FX0FUVFIoVFhfTDBTLCAweDAxKSwKPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVf QkFTRV9USU1FX0FUVFIoUlhfTDBTLCAweDAyKSwKPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVfQkFT RV9USU1FX0FUVFIoTDAsIDB4MDMpLAo+PiArwqDCoMKgIERXQ19QQ0lFX1BNVV9CQVNFX1RJTUVf QVRUUihMMSwgMHgwNCksCj4+ICvCoMKgwqAgRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKEwx XzEsIDB4MDUpLAo+PiArwqDCoMKgIERXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihMMV8yLCAw eDA2KSwKPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoQ0ZHX1JDVlJZLCAw eDA3KSwKPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoVFhfUlhfTDBTLCAw eDA4KSwKPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoTDFfQVVYLCAweDA5 KSwKPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoT05FX2N5Y2xlLCAweDEw KSwKPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoVFhfTDBTXywgMHgxMSks Cj4+ICvCoMKgwqAgRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKFJYX0wwU18sIDB4MTIpLAo+ PiArwqDCoMKgIERXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihMMF8sIDB4MTMpLAo+PiArwqDC oMKgIERXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihMMV8sIDB4MTcpLAo+PiArwqDCoMKgIERX Q19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihDRkdfUkNWUllfLCAweDE3KSwKPj4gK8KgwqDCoCBE V0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoVFhfUlhfTDBTXywgMHgxOCksCj4+ICvCoMKgwqAg LyogR3JvdXAgIzEgKi8KPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoVHhf UENJZV9UTFBfRGF0YV9QYXlsb2FkLCAweDIwKSwKPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVfQkFT RV9USU1FX0FUVFIoUnhfUENJZV9UTFBfRGF0YV9QYXlsb2FkLCAweDIxKSwKPj4gK8KgwqDCoCBE V0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoVHhfQ0NJWF9UTFBfRGF0YV9QYXlsb2FkLCAweDIy KSwKPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoUnhfQ0NJWF9UTFBfRGF0 YV9QYXlsb2FkLCAweDIzKSwKPj4gK8KgwqDCoCBOVUxMCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMg aW5saW5lIHVtb2RlX3QgcGNpZV9wbXVfZXZlbnRfYXR0cl9pc192aXNpYmxlKHN0cnVjdCBrb2Jq ZWN0ICprb2JqLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCB1bnVzZSkKPj4g K3sKPj4gK8KgwqDCoCByZXR1cm4gYXR0ci0+bW9kZTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlu bGluZSBib29sIHBjaV9kZXZfaXNfcm9vdHBvcnQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4+ICt7 Cj4+ICvCoMKgwqAgcmV0dXJuIChwY2lfaXNfcGNpZShwZGV2KSAmJgo+PiArwqDCoMKgwqDCoMKg wqAgcGNpX3BjaWVfdHlwZShwZGV2KSA9PSBQQ0lfRVhQX1RZUEVfUk9PVF9QT1JUKTsKPj4gK30K Pj4gKwo+PiArc3RhdGljIGludCBkd2NfcGNpZV9yYXNfZGVzX2Rpc2NvdmVyKHN0cnVjdCBkd2Nf cGNpZV9wbXVfcHJpdiAqcHJpdikKPj4gK3sKPj4gK8KgwqDCoCBpbnQgaW5kZXggPSAwOwo+PiAr wqDCoMKgIHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKPj4gK8KgwqDCoCBzdHJ1Y3QgZHdj X3BjaWVfcnBfaW5mbyAqcnBfaW5mbzsKPj4gKwo+PiArwqDCoMKgIElOSVRfTElTVF9IRUFEKCZw cml2LT5ycF9pbmZvcyk7Cj4+ICsKPj4gK8KgwqDCoCAvKiBNYXRjaCB0aGUgcm9vdHBvcnQgd2l0 aCBWU0VDX1JBU19ERVNfSUQgKi8KPj4gK8KgwqDCoCBmb3JfZWFjaF9wY2lfZGV2KHBkZXYpIHsK Pj4gK8KgwqDCoMKgwqDCoMKgIHUxNiB2c2VjOwo+PiArwqDCoMKgwqDCoMKgwqAgdTMyIHZhbDsK Pj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFwY2lfZGV2X2lzX3Jvb3Rwb3J0KHBkZXYpKQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gKwo+PiArwqDCoMKgwqDCoMKg wqAgcnBfaW5mbyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnJwX2luZm8pLCBH RlBfS0VSTkVMKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICghcnBfaW5mbykKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHJw X2luZm8tPmJkZiA9IFBDSV9ERVZJRChwZGV2LT5idXMtPm51bWJlciwgcGRldi0+ZGV2Zm4pOwo+ PiArwqDCoMKgwqDCoMKgwqAgcnBfaW5mby0+cGRldiA9IHBkZXY7Cj4+ICsKPj4gK8KgwqDCoMKg wqDCoMKgIHZzZWMgPSBwY2lfZmluZF92c2VjX2NhcGFiaWxpdHkocGRldiwgUENJX1ZFTkRPUl9J RF9BTElCQUJBLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBEV0NfUENJRV9WU0VDX1JBU19ERVNfSUQpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCF2 c2VjKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gKwo+PiArwqDCoMKg wqDCoMKgwqAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHZzZWMgKyBQQ0lfVk5EUl9IRUFE RVIsICZ2YWwpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKFBDSV9WTkRSX0hFQURFUl9SRVYodmFs KSAhPSAweDA0IHx8Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFBDSV9WTkRSX0hFQURFUl9M RU4odmFsKSAhPSAweDEwMCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBwY2lfZGJnKHBkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICJEZXRlY3RlZCBQQ0llIFZlbmRvci1TcGVjaWZpYyBFeHRlbmRlZCBDYXBhYmlsaXR5IFJBUyBE RVNcbiIpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBycF9pbmZvLT5yYXNfZGVzID0gdnNlYzsK Pj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgcGNpZV9jYXBhYmlsaXR5X3JlYWRfZHdvcmQocGRldiwg UENJX0VYUF9MTktDQVAsICZ2YWwpOwo+IAo+IFRoZSBsaW5rY2FwIHZhbHVlIGlzIG5vdCB1c2Vk LCB0aGVuIHdoeSBuZWVkIHJlYWQgaXQ/CgpZZXMsIGl0IGlzIHJlZHVuZGFudC4gV2lsbCByZW1v dmUgaXQgaW4gbmV4dCB2ZXJzaW9uLgoKPiAKPj4gK8KgwqDCoMKgwqDCoMKgIHJwX2luZm8tPm51 bV9sYW5lcyA9IHBjaWVfZ2V0X3dpZHRoX2NhcChwZGV2KTsKPj4gKwo+PiArwqDCoMKgwqDCoMKg wqAgbGlzdF9hZGQoJnJwX2luZm8tPnJwX25vZGUsICZwcml2LT5ycF9pbmZvcyk7Cj4+ICvCoMKg wqDCoMKgwqDCoCBpbmRleCsrOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGlmICghaW5k ZXgpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT0RFVjsKPj4gKwo+PiArwqDCoMKgIHBy aXYtPnBjaWVfY3RybF9udW0gPSBpbmRleDsKPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkd2NfcGNpZV9wbXVfc2V0X2V2ZW50X2lkKHN0cnVjdCBw Y2lfZGV2ICpwZGV2LCB1MTYgcmFzX2RlcywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgaW50IGV2ZW50X2lkKQo+PiArewo+PiArwqDCoMKgIHUzMiB2YWw7Cj4+ ICsKPj4gK8KgwqDCoCBwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcmFzX2RlcyArIERXQ19Q Q0lFX0VWRU5UX0NOVF9DVEwsICZ2YWwpOwo+PiArCj4+ICvCoMKgwqAgdmFsICY9IH5EV0NfUENJ RV9DTlRfRU5BQkxFOwo+PiArwqDCoMKgIHZhbCB8PSBGSUVMRF9QUkVQKERXQ19QQ0lFX0NOVF9F VkVOVF9TRUwsIGV2ZW50X2lkKTsKPj4gKwo+PiArwqDCoMKgIHBjaV93cml0ZV9jb25maWdfZHdv cmQocGRldiwgcmFzX2RlcyArIERXQ19QQ0lFX0VWRU5UX0NOVF9DVEwsIHZhbCk7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyB2b2lkIGR3Y19wY2llX3BtdV93cml0ZV9ldmVudF9sYW5lKHN0cnVjdCBw Y2lfZGV2ICpwZGV2LCB1MTYgcmFzX2RlcywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgaW50IGxhbmUsIGludCBldmVudF9pZCkKPj4gK3sKPj4gK8KgwqDCoCB1 MzIgdmFsOwo+PiArCj4+ICvCoMKgwqAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHJhc19k ZXMgKyBEV0NfUENJRV9FVkVOVF9DTlRfQ1RMLCAmdmFsKTsKPj4gKwo+PiArwqDCoMKgIHZhbCAm PSB+RFdDX1BDSUVfQ05UX0xBTkVfU0VMOwo+PiArwqDCoMKgIHZhbCB8PSBGSUVMRF9QUkVQKERX Q19QQ0lFX0NOVF9FVkVOVF9TRUwsIGxhbmUpOwo+PiArCj4+ICvCoMKgwqAgcGNpX3dyaXRlX2Nv bmZpZ19kd29yZChwZGV2LCByYXNfZGVzICsgRFdDX1BDSUVfRVZFTlRfQ05UX0NUTCwgdmFsKTsK Pj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHdjX3BjaWVfcG11X2V2ZW50X2VuYWJsZShzdHJ1 Y3QgcGNpX2RldiAqcGRldiwgdTE2IHJhc19kZXMsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBlbmFibGUpCj4+ICt7Cj4+ICvCoMKgwqAgdTMyIHZhbDsK Pj4gKwo+PiArwqDCoMKgIHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCByYXNfZGVzICsgRFdD X1BDSUVfRVZFTlRfQ05UX0NUTCwgJnZhbCk7Cj4+ICsKPj4gK8KgwqDCoCB2YWwgJj0gfkRXQ19Q Q0lFX0NOVF9FTkFCTEU7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoZW5hYmxlKQo+PiArwqDCoMKgwqDC oMKgwqAgdmFsIHw9IERXQ19QQ0lFX1BFUl9FVkVOVF9PTjsKPj4gK8KgwqDCoCBlbHNlCj4+ICvC oMKgwqDCoMKgwqDCoCB2YWwgfD0gRFdDX1BDSUVfUEVSX0VWRU5UX09GRjsKPj4gKwo+PiArwqDC oMKgIHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgcmFzX2RlcyArIERXQ19QQ0lFX0VWRU5U X0NOVF9DVEwsIHZhbCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGR3Y19wY2llX3BtdV9i YXNlX3RpbWVfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgcmFzX2RlcywKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGVuYWJsZSkKPj4gK3sK Pj4gK8KgwqDCoCB1MzIgdmFsOwo+PiArCj4+ICvCoMKgwqAgcGNpX3JlYWRfY29uZmlnX2R3b3Jk KHBkZXYsIHJhc19kZXMgKyBEV0NfUENJRV9USU1FX0JBU0VEX0FOQUxfQ1RMLCAmdmFsKTsKPj4g Kwo+PiArwqDCoMKgIGlmIChlbmFibGUpCj4+ICvCoMKgwqDCoMKgwqDCoCB2YWwgfD0gRFdDX1BD SUVfVElNRV9CQVNFRF9DTlRfRU5BQkxFOwo+PiArwqDCoMKgIGVsc2UKPj4gK8KgwqDCoMKgwqDC oMKgIHZhbCAmPSB+RFdDX1BDSUVfVElNRV9CQVNFRF9DTlRfRU5BQkxFOwo+PiArCj4+ICvCoMKg wqAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCByYXNfZGVzICsgRFdDX1BDSUVfVElNRV9C QVNFRF9BTkFMX0NUTCwgdmFsKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHdjX3BjaWVf cG11X3JlYWRfZXZlbnRfY291bnRlcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IHJhc19kZXMs Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NCAq Y291bnRlcikKPj4gK3sKPj4gK8KgwqDCoCB1MzIgdmFsOwo+PiArCj4+ICvCoMKgwqAgcGNpX3Jl YWRfY29uZmlnX2R3b3JkKHBkZXYsIHJhc19kZXMgKyBEV0NfUENJRV9FVkVOVF9DTlRfREFUQSwg JnZhbCk7Cj4+ICvCoMKgwqAgKmNvdW50ZXIgPSB2YWw7Cj4+ICt9Cj4+ICsKPj4gKy8qIFRoZSBy ZXN1bHRzIGFyZSBjbGVhcmVkIHdoZW4gbmV4dCBtZWFzdXJlbWVudCBzdGFydHMuICovCj4+ICtz dGF0aWMgdm9pZCBkd2NfcGNpZV9wbXVfcmVhZF9iYXNlX3RpbWVfY291bnRlcihzdHJ1Y3QgcGNp X2RldiAqcGRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgdTE2IHJhc19kZXMsIHU2NCAqY291bnRlcikKPj4gK3sKPj4gK8KgwqDCoCB1MzIgdmFs Owo+PiArCj4+ICvCoMKgwqAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKAo+PiArwqDCoMKgwqDCoMKg wqAgcGRldiwgcmFzX2RlcyArIERXQ19QQ0lFX1RJTUVfQkFTRURfQU5BTF9EQVRBX1JFR19ISUdI LAo+PiArwqDCoMKgwqDCoMKgwqAgJnZhbCk7Cj4+ICvCoMKgwqAgKmNvdW50ZXIgPSB2YWw7Cj4+ ICvCoMKgwqAgKmNvdW50ZXIgPDw9IDMyOwo+PiArCj4+ICvCoMKgwqAgcGNpX3JlYWRfY29uZmln X2R3b3JkKAo+PiArwqDCoMKgwqDCoMKgwqAgcGRldiwgcmFzX2RlcyArIERXQ19QQ0lFX1RJTUVf QkFTRURfQU5BTF9EQVRBX1JFR19MT1csCj4+ICvCoMKgwqDCoMKgwqDCoCAmdmFsKTsKPj4gKwo+ PiArwqDCoMKgICpjb3VudGVyICs9IHZhbDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHdj X3BjaWVfcG11X2NsZWFyX2V2ZW50X2NvdW50ZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUxNiBy YXNfZGVzKQo+PiArewo+PiArwqDCoMKgIHUzMiB2YWw7Cj4+ICsKPj4gK8KgwqDCoCBwY2lfcmVh ZF9jb25maWdfZHdvcmQocGRldiwgcmFzX2RlcyArIERXQ19QQ0lFX0VWRU5UX0NOVF9DVEwsICZ2 YWwpOwo+PiArCj4+ICvCoMKgwqAgdmFsIHw9IEZJRUxEX1BSRVAoRFdDX1BDSUVfRVZFTlRfQ0xF QVIsIERXQ19QQ0lFX0VWRU5UX1BFUl9DTEVBUik7Cj4+ICsKPj4gK8KgwqDCoCBwY2lfd3JpdGVf Y29uZmlnX2R3b3JkKHBkZXYsIHJhc19kZXMgKyBEV0NfUENJRV9FVkVOVF9DTlRfQ1RMLCB2YWwp Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkd2NfcGNpZV9wbXVfYmFzZV90aW1lX2FkZF9w cmVwYXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MTYgcmFzX2RlcywgdTMyIGV2ZW50X2lkKQo+ PiArewo+PiArwqDCoMKgIHUzMiB2YWw7Cj4+ICsKPj4gK8KgwqDCoCBwY2lfcmVhZF9jb25maWdf ZHdvcmQocGRldiwgcmFzX2RlcyArIERXQ19QQ0lFX1RJTUVfQkFTRURfQU5BTF9DVEwsCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZ2YWwpOwo+PiArCj4+ICvCoMKgwqAg dmFsICY9IH5EV0NfUENJRV9USU1FX0JBU0VEX1JFUE9SVF9TRUw7Cj4+ICvCoMKgwqAgdmFsIHw9 IEZJRUxEX1BSRVAoRFdDX1BDSUVfVElNRV9CQVNFRF9SRVBPUlRfU0VMLCBldmVudF9pZCk7Cj4+ ICvCoMKgwqAgdmFsICY9IH5EV0NfUENJRV9USU1FX0JBU0VEX0RVUkFUSU9OX1NFTDsKPj4gKwo+ PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIFRJTUVfQkFTRURfQU5BTF9EQVRBX1JFRyBpcyBh IDY0IGJpdCByZWdpc3Rlciwgd2UgY2FuIHNhZmVseQo+PiArwqDCoMKgwqAgKiB1c2UgaXQgd2l0 aCBhbnkgbWFudWFsbHkgY29udHJvbGxlZCBkdXJhdGlvbi4KPj4gK8KgwqDCoMKgICovCj4+ICvC oMKgwqAgdmFsICY9IH4oRFdDX1BDSUVfVElNRV9CQVNFRF9EVVJBVElPTl9TRUwpOwo+IAo+IFJl bW92ZSByZWR1bmRhbnQgJygpJy4KCldpbGwgcmVtb3ZlIGl0LgoKPiAKPj4gK8KgwqDCoCB2YWwg fD0gRFdDX1BDSUVfRFVSQVRJT05fTUFOVUFMX0NUTDsKPj4gKwo+PiArwqDCoMKgIHBjaV93cml0 ZV9jb25maWdfZHdvcmQocGRldiwgcmFzX2RlcyArIERXQ19QQ0lFX1RJTUVfQkFTRURfQU5BTF9D VEwsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmFsKTsKPj4gK30K Pj4gKwo+PiArc3RhdGljIHN0cnVjdCBkd2NfcGNpZV9ycF9pbmZvICpwbXVfdG9fcGNpZV9pbmZv KHN0cnVjdCBwbXUgKnBtdSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgZHdjX3BjaWVfcnBfaW5m byAqcnBfaW5mbzsKPj4gK8KgwqDCoCBzdHJ1Y3QgZHdjX3BjaWVfcG11ICpwY2llX3BtdSA9IHRv X2R3Y19wY2llX3BtdShwbXUpOwo+PiArCj4+ICvCoMKgwqAgcnBfaW5mbyA9IGNvbnRhaW5lcl9v ZihwY2llX3BtdSwgc3RydWN0IGR3Y19wY2llX3JwX2luZm8sIHBjaWVfcG11KTsKPj4gKwo+PiAr wqDCoMKgIHJldHVybiBycF9pbmZvOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkd2NfcGNp ZV9wbXVfZXZlbnRfdXBkYXRlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPj4gK3sKPj4gK8Kg wqDCoCB1NjQgY291bnRlcjsKPj4gK8KgwqDCoCBzdHJ1Y3QgZHdjX3BjaWVfcG11ICpwY2llX3Bt dSA9IHRvX2R3Y19wY2llX3BtdShldmVudC0+cG11KTsKPj4gK8KgwqDCoCBzdHJ1Y3QgZHdjX3Bj aWVfcnBfaW5mbyAqcnBfaW5mbyA9IHBtdV90b19wY2llX2luZm8oZXZlbnQtPnBtdSk7Cj4+ICvC oMKgwqAgc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBycF9pbmZvLT5wZGV2Owo+PiArwqDCoMKgIHUx NiByYXNfZGVzID0gcnBfaW5mby0+cmFzX2RlczsKPj4gK8KgwqDCoCBzdHJ1Y3QgaHdfcGVyZl9l dmVudCAqaHdjID0gJmV2ZW50LT5odzsKPj4gK8KgwqDCoCBlbnVtIGR3Y19wY2llX2V2ZW50X3R5 cGUgdHlwZSA9IERXQ19QQ0lFX0VWRU5UX1RZUEUoZXZlbnQpOwo+PiArwqDCoMKgIHU2NCBkZWx0 YSwgcHJldiwgbm93Owo+PiArCj4+ICvCoMKgwqAgZG8gewo+PiArwqDCoMKgwqDCoMKgwqAgcHJl diA9IGxvY2FsNjRfcmVhZCgmaHdjLT5wcmV2X2NvdW50KTsKPj4gKwo+PiArwqDCoMKgwqDCoMKg wqAgaWYgKHR5cGUgPT0gRFdDX1BDSUVfTEFORV9FVkVOVCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZHdjX3BjaWVfcG11X3JlYWRfZXZlbnRfY291bnRlcihwZGV2LCByYXNfZGVzLCAmY291 bnRlcik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBlbHNlIGlmICh0eXBlID09IERXQ19QQ0lFX1RJTUVf QkFTRV9FVkVOVCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHdjX3BjaWVfcG11X3JlYWRf YmFzZV90aW1lX2NvdW50ZXIocGRldiwgcmFzX2RlcywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZjb3VudGVyKTsKPj4g K8KgwqDCoMKgwqDCoMKgIGVsc2UKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2Vycihw Y2llX3BtdS0+ZGV2LCAiaW52YWxpZCBldmVudCB0eXBlOiAweCV4XG4iLCB0eXBlKTsKPj4gKwo+ PiArwqDCoMKgwqDCoMKgwqAgbm93ID0gY291bnRlcjsKPj4gK8KgwqDCoCB9IHdoaWxlIChsb2Nh bDY0X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJldiwgbm93KSAhPSBwcmV2KTsKPj4gKwo+ PiArwqDCoMKgIGRlbHRhID0gbm93IC0gcHJldjsKPiAKPiBUaGlzIGNhbiBiZSBvdmVyZmxvdz8g YmV0dGVyIHRvIGFkZCBhIG1hc2sgdG8gYXZvaWQgcG9zc2libGUgb3ZlcmZsb3cuCgpJIHRoaW5r IGl0IGNhbiBub3QuIFRoaXMgUm9vdCBDb21wbGV4IHN1cHBvcnRzIHVwIHRvIFBDSWUgR2VuNSAo MzIgR1QvcykKYW5kIG9uZSByb290IHBvcnQgc3VwcG9ydCB1cCB0byB4MTYgbGFuZXMsIHdpdGgg cGVlayBiYW5kd2lkdGggNjQgR0Ivcy4KT24gWWl0aWFuIDcxMCwgb25lIHJvb3QgcG9ydCBpcyB4 NCBsYW5lIHdpdGggcGVhayBiYW5kd2lkdGggMTYgR0Ivcy4KVGhlIGNvdW50ZXIgaXMgNjQgYml0 IHdpZHRoIHdpdGggMTYgYnl0ZXMgdW5pdC4KCgkyXjY0KjE2Lyg2NCoxMF45KS82MC82MC8yNC8z NjUgPSAxNDYgeWVhcnMKCkZvciB4MTYgcm9vdCBwb3J0LCBpdCB3aWxsIG5vdCBvdmVyZmxvdyB3 aXRoaW4gMTQ2IHllYXNyIGFuZCBmb3IgeWl0aWFuIDcxMCwKaXQgd2lsbCBuZXZlciBvdmVyZmxv dyBpbiBteSBsaWZlIHRvby4KCj4gCj4+ICsKPj4gK8KgwqDCoCBsb2NhbDY0X2FkZChkZWx0YSwg JmV2ZW50LT5jb3VudCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHdjX3BjaWVfcG11X2V2 ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+PiArewo+PiArwqDCoMKgIHN0cnVj dCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3Owo+PiArwqDCoMKgIHN0cnVjdCBkd2Nf cGNpZV9wbXUgKnBjaWVfcG11ID0gdG9fZHdjX3BjaWVfcG11KGV2ZW50LT5wbXUpOwo+PiArwqDC oMKgIHN0cnVjdCBwZXJmX2V2ZW50ICpzaWJsaW5nOwo+PiArCj4+ICvCoMKgwqAgaWYgKGV2ZW50 LT5hdHRyLnR5cGUgIT0gZXZlbnQtPnBtdS0+dHlwZSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biAtRU5PRU5UOwo+PiArCj4+ICvCoMKgwqAgaWYgKGh3Yy0+c2FtcGxlX3BlcmlvZCkgewo+PiAr wqDCoMKgwqDCoMKgwqAgZGV2X2RiZyhwY2llX3BtdS0+ZGV2LCAiU2FtcGxpbmcgbm90IHN1cHBv cnRlZFxuIik7Cj4gCj4gc2hvdWxkIHVzZSBkZXZfZXJyKCkgaWYgdHJlYXRpbmcgaXQgYXMgYW4g ZXJyb3IuCj4gCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVPUE5PVFNVUFA7Cj4+ICvCoMKg wqAgfQo+PiArCj4+ICvCoMKgwqAgaWYgKGV2ZW50LT5jcHUgPCAwKSB7Cj4+ICvCoMKgwqDCoMKg wqDCoCBkZXZfZGJnKHBjaWVfcG11LT5kZXYsICJQZXItdGFzayBtb2RlIG5vdCBzdXBwb3J0ZWRc biIpOwo+IAo+IGRpdHRvLgoKSSB3aWxsIHVzZSBkZXZfZXJyKCkgaW5zdGVhZC4KCj4gCj4+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gLUVPUE5PVFNVUFA7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvC oMKgwqAgZXZlbnQtPmNwdSA9IHBjaWVfcG11LT5vbl9jcHU7Cj4+ICsKPj4gK8KgwqDCoCBpZiAo ZXZlbnQtPmdyb3VwX2xlYWRlciAhPSBldmVudCAmJgo+PiArwqDCoMKgwqDCoMKgwqAgIWlzX3Nv ZnR3YXJlX2V2ZW50KGV2ZW50LT5ncm91cF9sZWFkZXIpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIC1FSU5WQUw7Cj4+ICsKPj4gK8KgwqDCoCBmb3JfZWFjaF9zaWJsaW5nX2V2ZW50KHNpYmxp bmcsIGV2ZW50LT5ncm91cF9sZWFkZXIpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChzaWJsaW5n ICE9IGV2ZW50ICYmICFpc19zb2Z0d2FyZV9ldmVudChzaWJsaW5nKSkKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAg aHdjLT5pZHggPSAtMTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgdm9pZCBkd2NfcGNpZV9wbXVfc2V0X3BlcmlvZChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAq aHdjKQo+PiArewo+PiArwqDCoMKgIGxvY2FsNjRfc2V0KCZod2MtPnByZXZfY291bnQsIDApOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkd2NfcGNpZV9wbXVfZXZlbnRfc3RhcnQoc3RydWN0 IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGh3 X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Cj4+ICvCoMKgwqAgc3RydWN0IGR3Y19wY2ll X3BtdSAqcGNpZV9wbXUgPSB0b19kd2NfcGNpZV9wbXUoZXZlbnQtPnBtdSk7Cj4+ICvCoMKgwqAg c3RydWN0IGR3Y19wY2llX3JwX2luZm8gKnJwX2luZm8gPSBwbXVfdG9fcGNpZV9pbmZvKGV2ZW50 LT5wbXUpOwo+PiArwqDCoMKgIHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcnBfaW5mby0+cGRldjsK Pj4gK8KgwqDCoCB1MTYgcmFzX2RlcyA9IHJwX2luZm8tPnJhc19kZXM7Cj4+ICvCoMKgwqAgZW51 bSBkd2NfcGNpZV9ldmVudF90eXBlIHR5cGUgPSBEV0NfUENJRV9FVkVOVF9UWVBFKGV2ZW50KTsK Pj4gKwo+PiArwqDCoMKgIGh3Yy0+c3RhdGUgPSAwOwo+PiArwqDCoMKgIGR3Y19wY2llX3BtdV9z ZXRfcGVyaW9kKGh3Yyk7Cj4+ICsKPj4gK8KgwqDCoCBpZiAodHlwZSA9PSBEV0NfUENJRV9MQU5F X0VWRU5UKQo+PiArwqDCoMKgwqDCoMKgwqAgZHdjX3BjaWVfcG11X2V2ZW50X2VuYWJsZShwZGV2 LCByYXNfZGVzLCAxKTsKPj4gK8KgwqDCoCBlbHNlIGlmICh0eXBlID09IERXQ19QQ0lFX1RJTUVf QkFTRV9FVkVOVCkKPj4gK8KgwqDCoMKgwqDCoMKgIGR3Y19wY2llX3BtdV9iYXNlX3RpbWVfZW5h YmxlKHBkZXYsIHJhc19kZXMsIDEpOwo+PiArwqDCoMKgIGVsc2UKPj4gK8KgwqDCoMKgwqDCoMKg IGRldl9lcnIocGNpZV9wbXUtPmRldiwgImludmFsaWQgZXZlbnQgdHlwZTogMHgleFxuIiwgdHlw ZSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGR3Y19wY2llX3BtdV9ldmVudF9zdG9wKHN0 cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQo+PiArewo+PiArwqDCoMKgIHN0cnVj dCBkd2NfcGNpZV9wbXUgKnBjaWVfcG11ID0gdG9fZHdjX3BjaWVfcG11KGV2ZW50LT5wbXUpOwo+ PiArwqDCoMKgIHN0cnVjdCBkd2NfcGNpZV9ycF9pbmZvICpycF9pbmZvID0gcG11X3RvX3BjaWVf aW5mbyhldmVudC0+cG11KTsKPj4gK8KgwqDCoCBzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHJwX2lu Zm8tPnBkZXY7Cj4+ICvCoMKgwqAgdTE2IHJhc19kZXMgPSBycF9pbmZvLT5yYXNfZGVzOwo+PiAr Cj4+ICvCoMKgwqAgZW51bSBkd2NfcGNpZV9ldmVudF90eXBlIHR5cGUgPSBEV0NfUENJRV9FVkVO VF9UWVBFKGV2ZW50KTsKPj4gKwo+PiArwqDCoMKgIGlmIChldmVudC0+aHcuc3RhdGUgJiBQRVJG X0hFU19TVE9QUEVEKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArCj4+ICvCoMKgwqAg aWYgKHR5cGUgPT0gRFdDX1BDSUVfTEFORV9FVkVOVCkKPj4gK8KgwqDCoMKgwqDCoMKgIGR3Y19w Y2llX3BtdV9ldmVudF9lbmFibGUocGRldiwgcmFzX2RlcywgMCk7Cj4+ICvCoMKgwqAgZWxzZSBp ZiAodHlwZSA9PSBEV0NfUENJRV9USU1FX0JBU0VfRVZFTlQpCj4+ICvCoMKgwqDCoMKgwqDCoCBk d2NfcGNpZV9wbXVfYmFzZV90aW1lX2VuYWJsZShwZGV2LCByYXNfZGVzLCAwKTsKPj4gK8KgwqDC oCBlbHNlCj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKHBjaWVfcG11LT5kZXYsICJpbnZhbGlk IGV2ZW50IHR5cGU6IDB4JXhcbiIsIHR5cGUpOwo+PiArCj4+ICvCoMKgwqAgZHdjX3BjaWVfcG11 X2V2ZW50X3VwZGF0ZShldmVudCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHdjX3BjaWVf cG11X2V2ZW50X2FkZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKPj4gK3sK Pj4gK8KgwqDCoCBzdHJ1Y3QgZHdjX3BjaWVfcG11ICpwY2llX3BtdSA9IHRvX2R3Y19wY2llX3Bt dShldmVudC0+cG11KTsKPj4gK8KgwqDCoCBzdHJ1Y3QgZHdjX3BjaWVfcnBfaW5mbyAqcnBfaW5m byA9IHBtdV90b19wY2llX2luZm8oZXZlbnQtPnBtdSk7Cj4+ICvCoMKgwqAgc3RydWN0IHBjaV9k ZXYgKnBkZXYgPSBycF9pbmZvLT5wZGV2Owo+PiArwqDCoMKgIHUxNiByYXNfZGVzID0gcnBfaW5m by0+cmFzX2RlczsKPj4gK8KgwqDCoCBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50 LT5odzsKPj4gK8KgwqDCoCBlbnVtIGR3Y19wY2llX2V2ZW50X3R5cGUgdHlwZSA9IERXQ19QQ0lF X0VWRU5UX1RZUEUoZXZlbnQpOwo+PiArwqDCoMKgIGludCBldmVudF9pZCA9IERXQ19QQ0lFX0VW RU5UX0lEKGV2ZW50KTsKPj4gK8KgwqDCoCBpbnQgbGFuZSA9IERXQ19QQ0lFX0VWRU5UX0xBTkUo ZXZlbnQpOwo+PiArCj4+ICvCoMKgwqAgLyogT25seSBvbmUgY291bnRlciBhbmQgaXQgaXMgaW4g dXNlICovCj4+ICvCoMKgwqAgaWYgKHJwX2luZm8tPmV2ZW50KQo+PiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIC1FTk9TUEM7Cj4+ICsKPj4gK8KgwqDCoCBycF9pbmZvLT5ldmVudCA9IGV2ZW50Owo+ PiArCj4+ICvCoMKgwqAgaHdjLT5zdGF0ZSA9IFBFUkZfSEVTX1NUT1BQRUQgfCBQRVJGX0hFU19V UFRPREFURTsKPj4gKwo+PiArwqDCoMKgIGlmICh0eXBlID09IERXQ19QQ0lFX0xBTkVfRVZFTlQp IHsKPj4gK8KgwqDCoMKgwqDCoMKgIGR3Y19wY2llX3BtdV9ldmVudF9lbmFibGUocGRldiwgcmFz X2RlcywgMCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkd2NfcGNpZV9wbXVfd3JpdGVfZXZlbnRfbGFu ZShwZGV2LCByYXNfZGVzLCBsYW5lLCBldmVudF9pZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkd2Nf cGNpZV9wbXVfc2V0X2V2ZW50X2lkKHBkZXYsIHJhc19kZXMsIGV2ZW50X2lkKTsKPj4gK8KgwqDC oMKgwqDCoMKgIGR3Y19wY2llX3BtdV9jbGVhcl9ldmVudF9jb3VudGVyKHBkZXYsIHJhc19kZXMp Owo+PiArwqDCoMKgIH0gZWxzZSBpZiAodHlwZSA9PSBEV0NfUENJRV9USU1FX0JBU0VfRVZFTlQp IHsKPj4gK8KgwqDCoMKgwqDCoMKgIGR3Y19wY2llX3BtdV9iYXNlX3RpbWVfZW5hYmxlKHBkZXYs IHJhc19kZXMsIDApOwo+PiArwqDCoMKgwqDCoMKgwqAgZHdjX3BjaWVfcG11X2Jhc2VfdGltZV9h ZGRfcHJlcGFyZShwZGV2LCByYXNfZGVzLCBldmVudF9pZCk7Cj4+ICvCoMKgwqAgfSBlbHNlIHsK Pj4gK8KgwqDCoMKgwqDCoMKgIGRldl9lcnIocGNpZV9wbXUtPmRldiwgImludmFsaWQgZXZlbnQg dHlwZTogMHgleFxuIiwgdHlwZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsK Pj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBpZiAoZmxhZ3MgJiBQRVJGX0VGX1NUQVJUKQo+ PiArwqDCoMKgwqDCoMKgwqAgZHdjX3BjaWVfcG11X2V2ZW50X3N0YXJ0KGV2ZW50LCBQRVJGX0VG X1JFTE9BRCk7Cj4+ICsKPj4gK8KgwqDCoCBwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVu dCk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQg ZHdjX3BjaWVfcG11X2V2ZW50X2RlbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFn cykKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgZHdjX3BjaWVfcnBfaW5mbyAqcnBfaW5mbyA9IHBt dV90b19wY2llX2luZm8oZXZlbnQtPnBtdSk7Cj4+ICsKPj4gK8KgwqDCoCBkd2NfcGNpZV9wbXVf ZXZlbnRfc3RvcChldmVudCwgZmxhZ3MgfCBQRVJGX0VGX1VQREFURSk7Cj4+ICvCoMKgwqAgcGVy Zl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOwo+PiArwqDCoMKgIHJwX2luZm8tPmV2ZW50 ID0gTlVMTDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHdjX3BjaWVfcG11X2V2ZW50X3Jl YWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+PiArewo+PiArwqDCoMKgIGR3Y19wY2llX3Bt dV9ldmVudF91cGRhdGUoZXZlbnQpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGR3Y19l dmVudF9jb3VudGVycyBldmVudF9hcnJheVtdID0gewo+PiArwqDCoMKgIHsidHhfYWNrX2RsbHAi LCAweDYwMH0sCj4+ICvCoMKgwqAgeyJ0eF91cGRhdGVfZmNfZGxscCIsIDB4NjAxfSwKPj4gK8Kg wqDCoCB7InJ4X2Fja19kbGxwIiwgMHg2MDJ9LAo+PiArwqDCoMKgIHsicnhfdXBkYXRlX2ZjX2Rs bHAiLCAweDYwM30sCj4+ICvCoMKgwqAgeyJyeF9udWxpZmllZF90bHAiLCAweDYwNH0sCj4+ICvC oMKgwqAgeyJ0eF9udWxpZmllZF90bHAiLCAweDYwNX0sCj4+ICvCoMKgwqAgeyJyeF9kdXBsaWNh dGVfdGxwIiwgMHg2MDZ9LAo+PiArwqDCoMKgIHsidHhfbWVtb3J5X3dyaXRlIiwgMHg3MDB9LAo+ PiArwqDCoMKgIHsidHhfbWVtb3J5X3JlYWQiLCAweDcwMX0sCj4+ICvCoMKgwqAgeyJ0eF9jb25m aWd1cmF0aW9uX3dyaXRlIiwgMHg3MDJ9LAo+PiArwqDCoMKgIHsidHhfY29uZmlndXJhdGlvbl9y ZWFkIiwgMHg3MDN9LAo+PiArwqDCoMKgIHsidHhfaW9fd3JpdGUiLCAweDcwNH0sCj4+ICvCoMKg wqAgeyJ0eF9pb19yZWFkIiwgMHg3MDV9LAo+PiArwqDCoMKgIHsidHhfY29tcGxldGlvbl93aXRo b3V0X2RhdGEiLCAweDcwNn0sCj4+ICvCoMKgwqAgeyJ0eF9jb21wbGV0aW9uX3dpdGhfZGF0YSIs IDB4NzA3fSwKPj4gK8KgwqDCoCB7InR4X21lc3NhZ2VfdGxwIiwgMHg3MDh9LAo+PiArwqDCoMKg IHsidHhfYXRvbWljIiwgMHg3MDl9LAo+PiArwqDCoMKgIHsidHhfdGxwX3dpdGhfcHJlZml4Iiwg MHg3MEF9LAo+PiArwqDCoMKgIHsicnhfbWVtb3J5X3dyaXRlIiwgMHg3MEJ9LAo+PiArwqDCoMKg IHsicnhfbWVtb3J5X3JlYWQiLCAweDcwQ30sCj4+ICvCoMKgwqAgeyJyeF9pb193cml0ZSIsIDB4 NzBGfSwKPj4gK8KgwqDCoCB7InJ4X2lvX3JlYWQiLCAweDcxMH0sCj4+ICvCoMKgwqAgeyJyeF9j b21wbGV0aW9uX3dpdGhvdXRfZGF0YSIsIDB4NzExfSwKPj4gK8KgwqDCoCB7InJ4X2NvbXBsZXRp b25fd2l0aF9kYXRhIiwgMHg3MTJ9LAo+PiArwqDCoMKgIHsicnhfbWVzc2FnZV90bHAiLCAweDcx M30sCj4+ICvCoMKgwqAgeyJyeF9hdG9taWMiLCAweDcxNH0sCj4+ICvCoMKgwqAgeyJyeF90bHBf d2l0aF9wcmVmaXgiLCAweDcxNX0sCj4+ICvCoMKgwqAgeyJ0eF9jY2l4X3RscCIsIDB4NzE2fSwK Pj4gK8KgwqDCoCB7InJ4X2NjaXhfdGxwIiwgMHg3MTd9LAo+PiArfTsKPj4gKwo+PiArc3RhdGlj IGludCBkd2NfcGNpZV9wbXVfYXR0cl9pbml0KHN0cnVjdCBkd2NfcGNpZV9wbXVfcHJpdiAqcHJp diwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGR3Y19wY2ll X3JwX2luZm8gKnJwX2luZm8pCj4+ICt7Cj4+ICvCoMKgwqAgaW50IGksIGo7Cj4+ICvCoMKgwqAg Y2hhciBsYW5lWzhdOwo+PiArwqDCoMKgIGNvbnN0IGNoYXIgdG1wWzY0XTsKPj4gK8KgwqDCoCBp bnQgZXZlbnRzX3Blcl9sYW5lOwo+PiArwqDCoMKgIGludCBudW1fbGFuZV9ldmVudHM7Cj4+ICvC oMKgwqAgaW50IHRpbWVfYmFzZV9jb3VudDsKPj4gK8KgwqDCoCBpbnQgbnVtX2F0dHJzLCBhdHRy X2lkeDsKPj4gK8KgwqDCoCBzdHJ1Y3QgZHdjX3BjaWVfZXZlbnRfYXR0ciAqbGFuZV9hdHRyczsK Pj4gK8KgwqDCoCBzdHJ1Y3QgYXR0cmlidXRlICoqcG11X2F0dHJzOwo+PiArCj4+ICvCoMKgwqAg bWVtc2V0KCh2b2lkICopdG1wLCAwLCBzaXplb2YodG1wKSk7Cj4+ICvCoMKgwqAgbWVtc2V0KCh2 b2lkICopbGFuZSwgMCwgc2l6ZW9mKGxhbmUpKTsKPj4gK8KgwqDCoCB0aW1lX2Jhc2VfY291bnQg PSBBUlJBWV9TSVpFKGR3Y19wY2llX3BtdV90aW1lX2V2ZW50X2F0dHJzKTsKPj4gK8KgwqDCoCBl dmVudHNfcGVyX2xhbmUgPSBBUlJBWV9TSVpFKGV2ZW50X2FycmF5KTsKPj4gK8KgwqDCoCBudW1f bGFuZV9ldmVudHMgPSBycF9pbmZvLT5udW1fbGFuZXMgKiBldmVudHNfcGVyX2xhbmU7Cj4+ICvC oMKgwqAgbnVtX2F0dHJzID0gdGltZV9iYXNlX2NvdW50ICsgbnVtX2xhbmVfZXZlbnRzOwo+PiAr Cj4+ICvCoMKgwqAgcnBfaW5mby0+bGFuZV9ldmVudF9hdHRycyA9Cj4+ICvCoMKgwqDCoMKgwqDC oCBkZXZtX2tjYWxsb2MocHJpdi0+ZGV2LCBudW1fbGFuZV9ldmVudHMsCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKHN0cnVjdCBkd2NfcGNpZV9ldmVudF9hdHRyKSwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRlBfS0VSTkVMKTsKPj4gK8KgwqDC oCBpZiAoIXJwX2luZm8tPmxhbmVfZXZlbnRfYXR0cnMpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVOT01FTTsKPj4gK8KgwqDCoCBsYW5lX2F0dHJzID0gcnBfaW5mby0+bGFuZV9ldmVudF9h dHRyczsKPj4gK8KgwqDCoCBycF9pbmZvLT5wY2llX3BtdV9ldmVudF9hdHRycyA9Cj4+ICvCoMKg wqDCoMKgwqDCoCBkZXZtX2tjYWxsb2MocHJpdi0+ZGV2LCBudW1fYXR0cnMsIHNpemVvZihzdHJ1 Y3QgYXR0cmlidXRlICopLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdGUF9LRVJORUwp Owo+PiArwqDCoMKgIGlmICghcnBfaW5mby0+cGNpZV9wbXVfZXZlbnRfYXR0cnMpCj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4gK8KgwqDCoCBwbXVfYXR0cnMgPSBycF9pbmZv LT5wY2llX3BtdV9ldmVudF9hdHRyczsKPj4gKwo+PiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBu dW1fbGFuZV9ldmVudHM7IGkrKykgewo+PiArwqDCoMKgwqDCoMKgwqAgbGFuZV9hdHRyc1tpXS5h dHRyLmF0dHIubmFtZSA9Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldm1fa3phbGxvYyhw cml2LT5kZXYsIHNpemVvZihjaGFyKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKiBBVFRSSV9OQU1FX01BWF9TSVpFLCBHRlBfS0VSTkVMKTsKPj4gK8KgwqDCoMKgwqDCoMKg IGlmICghbGFuZV9hdHRyc1tpXS5hdHRyLmF0dHIubmFtZSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgYXR0cl9p ZHggPSAwOwo+PiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBycF9pbmZvLT5udW1fbGFuZXM7IGkr Kykgewo+PiArwqDCoMKgwqDCoMKgwqAgc3ByaW50ZihsYW5lLCAiX2xhbmUlZCIsIGkpOwo+PiAr Cj4+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGogPSAwOyBqIDwgZXZlbnRzX3Blcl9sYW5lOyBqKysp IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IHBvcyA9IGkgKiBldmVudHNfcGVyX2xh bmUgKyBqOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cmNhdCgoY2hhciAqKXRt cCwgZXZlbnRfYXJyYXlbal0ubmFtZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cmNh dCgoY2hhciAqKXRtcCwgbGFuZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1lbWNweSgo dm9pZCAqKWxhbmVfYXR0cnNbcG9zXS5hdHRyLmF0dHIubmFtZSwKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAodm9pZCAqKXRtcCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2YodG1wKSk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgbGFuZV9hdHRyc1twb3NdLmF0dHIuYXR0ci5tb2RlID0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBWRVJJRllfT0NUQUxfUEVSTUlTU0lPTlMoMDQ0NCk7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxhbmVfYXR0cnNbcG9zXS5hdHRyLnNob3cgPSBkd2NfcGNp ZV9ldmVudF9zaG93Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsYW5lX2F0dHJzW3Bvc10u YXR0ci5zdG9yZSA9IE5VTEw7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxhbmVfYXR0cnNb cG9zXS50eXBlID0gRFdDX1BDSUVfTEFORV9FVkVOVDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgbGFuZV9hdHRyc1twb3NdLmV2ZW50aWQgPSBldmVudF9hcnJheVtqXS5ldmVudF9pZDsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGFuZV9hdHRyc1twb3NdLmxhbmUgPSBpOwo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBwbXVfYXR0cnNbYXR0cl9pZHgrK10gPSAmbGFuZV9hdHRyc1tw b3NdLmF0dHIuYXR0cjsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtZW1zZXQoKHZv aWQgKil0bXAsIDAsIHNpemVvZih0bXApKTsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDC oCB9Cj4+ICsKPj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkd2NfcGNpZV9w bXVfdGltZV9ldmVudF9hdHRycyk7IGkrKykKPj4gK8KgwqDCoMKgwqDCoMKgIHBtdV9hdHRyc1th dHRyX2lkeCsrXSA9IGR3Y19wY2llX3BtdV90aW1lX2V2ZW50X2F0dHJzW2ldOwo+PiArCj4+ICvC oMKgwqAgcnBfaW5mby0+cGNpZV9wbXVfZXZlbnRfYXR0cnNbYXR0cl9pZHgrK10gPSBOVUxMOwo+ PiArCj4+ICvCoMKgwqAgcnBfaW5mby0+cGNpZV9wbXVfZXZlbnRfYXR0cnNfZ3JvdXAubmFtZSA9 IGV2ZW50X2F0dHJfbmFtZTsKPj4gK8KgwqDCoCBycF9pbmZvLT5wY2llX3BtdV9ldmVudF9hdHRy c19ncm91cC5pc192aXNpYmxlID0KPj4gK8KgwqDCoMKgwqDCoMKgIHBjaWVfcG11X2V2ZW50X2F0 dHJfaXNfdmlzaWJsZTsKPj4gK8KgwqDCoCBycF9pbmZvLT5wY2llX3BtdV9ldmVudF9hdHRyc19n cm91cC5hdHRycyA9Cj4+ICvCoMKgwqDCoMKgwqDCoCBycF9pbmZvLT5wY2llX3BtdV9ldmVudF9h dHRyczsKPj4gKwo+PiArwqDCoMKgIHJwX2luZm8tPnBjaWVfcG11X2F0dHJfZ3JvdXBzWzBdID0K Pj4gK8KgwqDCoMKgwqDCoMKgICZycF9pbmZvLT5wY2llX3BtdV9ldmVudF9hdHRyc19ncm91cDsK Pj4gK8KgwqDCoCBycF9pbmZvLT5wY2llX3BtdV9hdHRyX2dyb3Vwc1sxXSA9ICZwY2llX3BtdV9m b3JtYXRfYXR0cnNfZ3JvdXA7Cj4+ICvCoMKgwqAgcnBfaW5mby0+cGNpZV9wbXVfYXR0cl9ncm91 cHNbMl0gPSAmcGNpZV9wbXVfY3B1bWFza19hdHRyc19ncm91cDsKPj4gK8KgwqDCoCBycF9pbmZv LT5wY2llX3BtdV9hdHRyX2dyb3Vwc1szXSA9IE5VTEw7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4g MDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBfX2R3Y19wY2llX3BtdV9wcm9iZShzdHJ1Y3Qg ZHdjX3BjaWVfcG11X3ByaXYgKnByaXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RydWN0IGR3Y19wY2llX3JwX2luZm8gKnJwX2luZm8pCj4+ICt7Cj4+ICvCoMKgwqAgc3Ry dWN0IGR3Y19wY2llX3BtdSAqcGNpZV9wbXU7Cj4+ICvCoMKgwqAgc3RydWN0IGRldmljZSAqZGV2 Owo+PiArwqDCoMKgIGNoYXIgKm5hbWU7Cj4+ICvCoMKgwqAgaW50IHJldDsKPj4gKwo+PiArwqDC oMKgIHBjaWVfcG11ID0gJnJwX2luZm8tPnBjaWVfcG11Owo+PiArwqDCoMKgIGRldiA9ICZycF9p bmZvLT5wZGV2LT5kZXY7Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBkd2NfcGNpZV9wbXVfYXR0cl9p bml0KHByaXYsIHJwX2luZm8pOwo+PiArwqDCoMKgIGlmIChyZXQpIHsKPj4gK8KgwqDCoMKgwqDC oMKgIHBjaV9lcnIocnBfaW5mby0+cGRldiwgIlBNVSBhdHRyIGluaXQgZmFpbCByZXQ9JWRcbiIs IHJldCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArwqDCoMKgIH0KPj4gKwo+ PiArwqDCoMKgIHBjaWVfcG11LT5kZXYgPSBkZXY7Cj4+ICvCoMKgwqAgcGNpZV9wbXUtPnBtdSA9 IChzdHJ1Y3QgcG11KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCAubW9kdWxlwqDCoMKgwqDCoMKgwqAg PSBUSElTX01PRFVMRSwKPj4gK8KgwqDCoMKgwqDCoMKgIC50YXNrX2N0eF9ucsKgwqDCoCA9IHBl cmZfaW52YWxpZF9jb250ZXh0LAo+PiArwqDCoMKgwqDCoMKgwqAgLnBtdV9lbmFibGXCoMKgwqAg PSBOVUxMLAo+PiArwqDCoMKgwqDCoMKgwqAgLnBtdV9kaXNhYmxlwqDCoMKgID0gTlVMTCwKPj4g K8KgwqDCoMKgwqDCoMKgIC5ldmVudF9pbml0wqDCoMKgID0gZHdjX3BjaWVfcG11X2V2ZW50X2lu aXQsCj4+ICvCoMKgwqDCoMKgwqDCoCAuYWRkwqDCoMKgwqDCoMKgwqAgPSBkd2NfcGNpZV9wbXVf ZXZlbnRfYWRkLAo+PiArwqDCoMKgwqDCoMKgwqAgLmRlbMKgwqDCoMKgwqDCoMKgID0gZHdjX3Bj aWVfcG11X2V2ZW50X2RlbCwKPj4gK8KgwqDCoMKgwqDCoMKgIC5zdGFydMKgwqDCoMKgwqDCoMKg ID0gZHdjX3BjaWVfcG11X2V2ZW50X3N0YXJ0LAo+PiArwqDCoMKgwqDCoMKgwqAgLnN0b3DCoMKg wqDCoMKgwqDCoCA9IGR3Y19wY2llX3BtdV9ldmVudF9zdG9wLAo+PiArwqDCoMKgwqDCoMKgwqAg LnJlYWTCoMKgwqDCoMKgwqDCoCA9IGR3Y19wY2llX3BtdV9ldmVudF9yZWFkLAo+PiArwqDCoMKg wqDCoMKgwqAgLmF0dHJfZ3JvdXBzwqDCoMKgID0gcnBfaW5mby0+cGNpZV9wbXVfYXR0cl9ncm91 cHMsCj4+ICvCoMKgwqDCoMKgwqDCoCAuY2FwYWJpbGl0aWVzwqDCoMKgID0gUEVSRl9QTVVfQ0FQ X05PX0VYQ0xVREUsCj4+ICvCoMKgwqAgfTsKPj4gKwo+PiArwqDCoMKgIG5hbWUgPSBkZXZtX2th c3ByaW50Zihwcml2LT5kZXYsIEdGUF9LRVJORUwsICJkd2Nfcm9vdHBvcnRfJXgiLAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBycF9pbmZvLT5iZGYpOwo+PiArwqDCoMKg IGlmICghbmFtZSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+PiArCj4+ICvC oMKgwqAgLyoKPj4gK8KgwqDCoMKgICogUGljayBvbmUgQ1BVIHRvIGJlIHRoZSBwcmVmZXJyZWQg b25lIG9uIGxvY2FsIE5VTUEgbm9kZS4KPj4gK8KgwqDCoMKgICoKPj4gK8KgwqDCoMKgICogTm90 ZSwgdGhpcyBQTVUgZG9lcyBOT1Qgc3VwcG9ydCBpbnRlcnJ1cHQsIHNldCBvbl9jcHUgdG8gaW5k aWNhdGUgaXQKPj4gK8KgwqDCoMKgICogaXMgYSB1bmNvcmUgUE1VIGRldmljZS4KPj4gK8KgwqDC oMKgICovCj4+ICvCoMKgwqAgcGNpZV9wbXUtPm9uX2NwdSA9IGNwdW1hc2tfbG9jYWxfc3ByZWFk KDAsIGRldl90b19ub2RlKHBjaWVfcG11LT5kZXYpKTsKPj4gK8KgwqDCoCByZXQgPSBwZXJmX3Bt dV9yZWdpc3RlcigmcGNpZV9wbXUtPnBtdSwgbmFtZSwgLTEpOwo+PiArwqDCoMKgIGlmIChyZXQp IHsKPj4gK8KgwqDCoMKgwqDCoMKgIHBjaV9lcnIocnBfaW5mby0+cGRldiwgIkVycm9yICVkIHJl Z2lzdGVyaW5nIFBNVSBAJXhcbiIsIHJldCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJwX2luZm8tPmJkZik7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiAr wqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHJwX2luZm8tPnBtdV9pc19yZWdpc3RlciA9IERXQ19Q Q0lFX1BNVV9IQVNfUkVHSVNURVI7Cj4gCj4gU2VlbXMgYSBib29sZWFuIHR5cGUsIGFuZCBubyBu ZWVkIGRlZmluZSBhbm90aGVyIG1hY3JvLgoKWWVzLCB3aWxsIGNoYW5nZSB0byBib29sZWFuLgo+ IAo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHJldDsKPiAKPiByZXR1cm4gMDsKPiAKCldpbGwgZml4 IGl0LgoKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkd2NfcGNpZV9wbXVfcmVtb3ZlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGR3Y19wY2ll X3BtdV9wcml2ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4+ICvCoMKgwqAg c3RydWN0IGR3Y19wY2llX3BtdSAqcGNpZV9wbXU7Cj4+ICvCoMKgwqAgc3RydWN0IGR3Y19wY2ll X3JwX2luZm8gKnJwX2luZm87Cj4+ICsKPj4gK8KgwqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5KHJw X2luZm8sICZwcml2LT5ycF9pbmZvcywgcnBfbm9kZSkgewo+PiArwqDCoMKgwqDCoMKgwqAgaWYg KHJwX2luZm8tPnBtdV9pc19yZWdpc3Rlcikgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBw Y2llX3BtdSA9ICZycF9pbmZvLT5wY2llX3BtdTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cGVyZl9wbXVfdW5yZWdpc3RlcigmcGNpZV9wbXUtPnBtdSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9 Cj4+ICvCoMKgwqAgfQo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IGR3Y19wY2llX3BtdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+PiAr ewo+PiArwqDCoMKgIGludCByZXQ7Cj4+ICvCoMKgwqAgc3RydWN0IGR3Y19wY2llX3BtdV9wcml2 ICpwcml2Owo+PiArwqDCoMKgIHN0cnVjdCBkd2NfcGNpZV9ycF9pbmZvICpycF9pbmZvOwo+PiAr Cj4+ICvCoMKgwqAgcHJpdiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnByaXYp LCBHRlBfS0VSTkVMKTsKPj4gK8KgwqDCoCBpZiAoIXByaXYpCj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArwqDCoMKgIHByaXYtPmRldiA9ICZwZGV2LT5kZXY7Cj4+ ICvCoMKgwqAgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7Cj4+ICsKPj4gK8KgwqDC oCAvKiBJZiBSQVNfREVTIFBNVSBpcyBub3Qgc3VwcG9ydGVkIG9uIGN1cnJlbnQgcGxhdGZvcm0s IGtlZXAgc2lsZW50ICovCj4+ICvCoMKgwqAgcmV0ID0gZHdjX3BjaWVfcmFzX2Rlc19kaXNjb3Zl cihwcml2KTsKPj4gK8KgwqDCoCBpZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJl dDsKPj4gKwo+PiArwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnkocnBfaW5mbywgJnByaXYtPnJw X2luZm9zLCBycF9ub2RlKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcGNpX2RldiAqcnAg PSBycF9pbmZvLT5wZGV2Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBfX2R3Y19wY2ll X3BtdV9wcm9iZShwcml2LCBycF9pbmZvKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQpIHsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2VycigmcnAtPmRldiwgIlBDSWUgUE1VIHBy b2JlIGZhaWxcbiIpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIHBtdV91bnJlZ2lz dGVyOwo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHJl dHVybiAwOwo+PiArCj4+ICtwbXVfdW5yZWdpc3RlcjoKPj4gK8KgwqDCoCBkd2NfcGNpZV9wbXVf cmVtb3ZlKHBkZXYpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiAr c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHdjX3BjaWVfcG11X2RyaXZlciA9IHsKPj4g K8KgwqDCoCAucHJvYmUgPSBkd2NfcGNpZV9wbXVfcHJvYmUsCj4+ICvCoMKgwqAgLnJlbW92ZSA9 IGR3Y19wY2llX3BtdV9yZW1vdmUsCj4+ICvCoMKgwqAgLmRyaXZlciA9IHsubmFtZSA9ICJkd2Nf cGNpZV9wbXUiLH0sCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgaW50IF9faW5pdCBkd2NfcGNpZV9w bXVfaW5pdCh2b2lkKQo+PiArewo+PiArwqDCoMKgIGludCByZXQ7Cj4+ICsKPj4gK8KgwqDCoCBy ZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmR3Y19wY2llX3BtdV9kcml2ZXIpOwo+PiAr Cj4+ICvCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+ICsK Pj4gK8KgwqDCoCBkd2NfcGNpZV9wbXVfZGV2ID0KPj4gK8KgwqDCoMKgwqDCoMKgIHBsYXRmb3Jt X2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImR3Y19wY2llX3BtdSIsIC0xLCBOVUxMLCAwKTsKPiAK PiBZb3UgY2FuIHVzZSBQTEFURk9STV9ERVZJRF9OT05FIG1hY3JvIGluc3RlYWQgb2YgdGhlIG1h Z2ljIG51bWJlciAnLTEnLgo+IAoKR29vZCBjYXRjaCwgd2lsbCB1c2UgUExBVEZPUk1fREVWSURf Tk9ORS4KCj4+ICvCoMKgwqAgaWYgKElTX0VSUihkd2NfcGNpZV9wbXVfZGV2KSkgewo+PiArwqDC oMKgwqDCoMKgwqAgcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmR3Y19wY2llX3BtdV9kcml2 ZXIpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIoZHdjX3BjaWVfcG11X2Rldik7 Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyB2b2lkIF9fZXhpdCBkd2NfcGNpZV9wbXVfZXhpdCh2b2lkKQo+PiArewo+PiArwqDCoMKg IHBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGR3Y19wY2llX3BtdV9kZXYpOwo+PiArwqDCoMKg IHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkd2NfcGNpZV9wbXVfZHJpdmVyKTsKPj4gK30K Pj4gKwo+PiArbW9kdWxlX2luaXQoZHdjX3BjaWVfcG11X2luaXQpOwo+PiArbW9kdWxlX2V4aXQo ZHdjX3BjaWVfcG11X2V4aXQpOwo+PiArCj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlBNVSBkcml2 ZXIgZm9yIERlc2lnbldhcmUgQ29yZXMgUENJIEV4cHJlc3MgQ29udHJvbGxlciIpOwo+PiArTU9E VUxFX0FVVEhPUigieHVlc2h1YWlAbGludXguYWxpYmFiYS5jb20iKTsKPiAKPiBQbGVhc2UgY29y cmVjdCB0aGUgZm9ybWF0IGZvciBtb2R1bGUgYXV0aG9yOgo+IE1PRFVMRV9BVVRIT1IoIlh1ZSBT aHVhaSA8eHVlc2h1YWlAbGludXguYWxpYmFiYS5jb20+Iik7CgpXaWxsIGZpeCBpdC4KCj4gCj4+ ICtNT0RVTEVfQVVUSE9SKCJ5aW54dWFuX2N3QGxpbnV4LmFsaWJhYmEuY29tIik7Cj4+ICtNT0RV TEVfTElDRU5TRSgiR1BMIHYyIik7CgoKVGhhbmsgeW91IGZvciB5b3VyIGNvbW1lbnRzIDopCgpC ZXN0IFJlZ2FyZHMsClNodWFpCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVs QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==