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 X-Spam-Level: X-Spam-Status: No, score=-13.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 214B4C433FF for ; Mon, 12 Aug 2019 19:40:33 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id DABA720663 for ; Mon, 12 Aug 2019 19:40:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="fpgAGcRA"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="mntN6Vq5" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DABA720663 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=ti.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date: Message-ID:From:References:To:Subject:Reply-To:Content-ID:Content-Description :Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=BaGeFA5E+sOAILuLbsSe3WCum25T7FJMTfnEKT+4WqA=; b=fpgAGcRAp2QKkw KhPvL05EfjUf9aNMdo208jEeCDphGFPmtCzwQv/tmQzoOPDI3FYQxmBruOt1i28MvhnJn55+2cpn7 HY4Yu7iwuQHcciKSSi+C24mH+hXpM+03gC78zF6I4Z6dg2GCn3f2IZJM6clkPOrFs2j8/ar62S+0r /rm8ONxDiWL2HVhpGwLSvOtI8hAmjHcWXau9kT1tRzCY61IsWdop6fKns3rvAIa9+MGnMP1SLkYfk N7vHS5bjyVIQlWA/mfk0GCL53kPQzuKFTA1ZEN9RZS851mWO3d6CYo4lOWYqKLkVpojNYt3r7kpvu hiD4IDKiZLw5z1rQvkNw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hxGB3-0007CP-5p; Mon, 12 Aug 2019 19:40:21 +0000 Received: from fllv0016.ext.ti.com ([198.47.19.142]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hxGAx-0007C1-4a for linux-arm-kernel@lists.infradead.org; Mon, 12 Aug 2019 19:40:18 +0000 Received: from lelv0265.itg.ti.com ([10.180.67.224]) by fllv0016.ext.ti.com (8.15.2/8.15.2) with ESMTP id x7CJd8uw036016; Mon, 12 Aug 2019 14:39:08 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1565638748; bh=hW5gyXdEDHwFq8bysKEn4CaPKJenJqqe4/6uRC22h3k=; h=Subject:To:CC:References:From:Date:In-Reply-To; b=mntN6Vq5aqOn7rqPthwcqRtSUtfNzB2gYJuo94hFclSxv9lO5qD9JoyOa44CH+bYh XR2fFVcxAQl6E9B5psw5lz5G+eou/Rg8spiJfu/7LjDd92+nNmoTnYkBkBafS3gx1/ 8JylAUVg5mdaV9C1y2rVxAc8xLIaniQXaIJf/Vmw= Received: from DLEE114.ent.ti.com (dlee114.ent.ti.com [157.170.170.25]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x7CJd8Jr032520 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 12 Aug 2019 14:39:08 -0500 Received: from DLEE108.ent.ti.com (157.170.170.38) by DLEE114.ent.ti.com (157.170.170.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Mon, 12 Aug 2019 14:39:08 -0500 Received: from lelv0327.itg.ti.com (10.180.67.183) by DLEE108.ent.ti.com (157.170.170.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5 via Frontend Transport; Mon, 12 Aug 2019 14:39:08 -0500 Received: from [128.247.58.153] (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0327.itg.ti.com (8.15.2/8.15.2) with ESMTP id x7CJd77Q107602; Mon, 12 Aug 2019 14:39:07 -0500 Subject: Re: [PATCH v2 4/6] irqchip/irq-pruss-intc: Add helper functions to configure internal mapping To: David Lechner , Marc Zyngier , Thomas Gleixner , Jason Cooper References: <20190731224149.11153-1-s-anna@ti.com> <20190731224149.11153-5-s-anna@ti.com> <1a63eb50-7c5c-eb3d-3cbe-bd1cc59ce3fe@kernel.org> <89abc27f-5d02-a8ce-df0e-b185c2a647cd@ti.com> <1ac233f6-f3a3-6cec-9ad2-49e985fdfaca@lechnology.com> <6c17875e-496d-1277-278f-239d3a9d8ca2@ti.com> <124b03b8-f8e7-682b-8767-13a739329da2@lechnology.com> From: Suman Anna Message-ID: Date: Mon, 12 Aug 2019 14:39:07 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: <124b03b8-f8e7-682b-8767-13a739329da2@lechnology.com> Content-Language: en-US X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190812_124015_337445_8CBC5D4A X-CRM114-Status: GOOD ( 48.47 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, Grygorii Strashko , Tony Lindgren , Sekhar Nori , linux-kernel@vger.kernel.org, "Andrew F. Davis" , Lokesh Vutla , Rob Herring , Murali Karicheri , linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Roger Quadros Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgRGF2aWQsCgpPbiA4LzgvMTkgMTI6MDkgUE0sIERhdmlkIExlY2huZXIgd3JvdGU6Cj4gT24g OC8yLzE5IDQ6MjYgUE0sIFN1bWFuIEFubmEgd3JvdGU6Cj4+IFBvaW50IGlzIGRpZmZlcmVudCBh cHBsaWNhdGlvbnMgbWlnaHQgdXNlIG1hcHBpbmcgZGlmZmVyZW50bHkgYXMgcGVyCj4+IHRoZWly IGZpcm13YXJlIGFuZCBkcml2ZXIvYXBwbGljYXRpb24gZGVzaWduIGFuZCB0aGVpciBzcGxpdCBh Y3Jvc3Mgb25lCj4+IG9yIG1vcmUgUFJVcyAoZGVzaWduIGJ5IGNvbnRyYWN0KS4gQW5kIHdlIG5l ZWQgdG8gc2V0IHRoaXMgdXAgYXQgcnVudGltZQo+PiB3aGVuIHRoZSBhcHBsaWNhdGlvbiBkcml2 ZXIgaXMgZ2V0dGluZyBydW4uIFdlIHdpbGwgaGF2ZSBlaXRoZXIgdGhlIFNvZnQKPj4gVUFSVCBv ciB0aGUgRXRoZXJuZXQgcnVubmluZyBhdCBhIHRpbWUgZGVwZW5kaW5nIG9uIHRoZSBlbmQgZ29h bCBkZXNpcmVkCj4+Cj4+PiBJIGhhdmUgYW4gaWRlYSB0aGF0IHdlIGNhbiB1c2UgbXVsdGlwbGUg c3RydWN0IGlycV9kb21haW5zIHRvIG1ha2UKPj4+IHRoaXMgd29yayBpbiB0aGUgZXhpc3Rpbmcg SVJRIGZyYW1ld29yaywgYnV0IGl0IHdvdWxkIGJlIGhlbHBmdWwgdG8KPj4+IGtub3cgbW9yZSBh Ym91dCB0aGUgYmlnZ2VyIHBpY3R1cmUgZmlyc3QuCj4+Cj4+IFllYWgsIHdvdWxkIGJlIGdyZWF0 IGlmIHRoZXJlIGlzIGEgd2F5IHRoaXMgY2FuIGJlIHNvbHZlZCB3aXRob3V0IGhhdmluZwo+PiB0 byBpbnRyb2R1Y2UgYWRkaXRpb25hbCBBUEkuCj4+Cj4gCj4gCj4gSGVyZSBpcyB3aGF0IEkgY2Ft ZSB1cCB3aXRoIHRvIHVzZSBleGlzdGluZyBJUlEgQVBJcyB0byBpbXBsZW1lbnQgZXZlbnQKPiBt YXBwaW5nLgo+IEJhc2ljYWxseSBpdCBpcyB0aGUgc2FtZSBhcyBteSBwcmV2aW91cyBzdWdnZXN0 aW9uIFsxXSwgd2l0aCB0aGUKPiBhZGRpdGlvbiBvZgo+IG11bHRpcGxlIElSUSBkb21haW5zLgoK Rmlyc3Qgb2YgYWxsLCBtYW55IHRoYW5rcyBmb3IgbG9va2luZyBpbnRvIHRoZSBwcm9ibGVtIGFu ZCBwcm92aWRpbmcKcGF0Y2hlcyBmb3IgdGhlIGFsdGVybmF0ZSBzb2x1dGlvbnMuIElmIHdlIHdl cmUgdG8gbm90IHVzZSBhbnkgZXhwb3J0ZWQKZnVuY3Rpb25zLCB0aGlzIGFwcHJvYWNoIGRvZXMg c2VlbSB0byBiZSBhIHZpYWJsZSBzb2x1dGlvbi4gSSBhbSBnb2luZwp0byBwbGF5IGFyb3VuZCB3 aXRoIGJvdGggWzFdIGFuZCB0aGlzIHBhdGNoIHdpdGggYWxsIG91ciBleGlzdGluZwp1c2VjYXNl cyBhbmQgc2VlIGlmIEkgcnVuIGludG8gYW55IGlzc3Vlcy4KClNvLCB3LnIudCB0aGlzIHBhdGNo IGNvbXBhcmVkIHRvIFsxXSwgaXMgdGhlIG11bHRpcGxlIElSUSBkb21haW4gc29sdmluZwphbnl0 aGluZyBzcGVjaWZpY2FsbHk/IE91ciBtYWluIGlzc3VlIGlzIHRoZSByZS1wdXJwb3Npbmcgb2Yg YSBldmVudAooYW5kIGl0cyBtYXBwaW5nIGRlcGVuZGluZyBvbiB0aGUgYXBwbGljYXRpb24pLCBh bmQgdGhlIHNhbWUgaXNzdWUgd2lsbApyZW1haW4gd2hldGhlciB3ZSBoYXZlIG11bHRpcGxlIGRv bWFpbnMgb3Igbm90LiBBbHNvLCBub3cgd2Ugd291bGQKZXhwZWN0IGFuIGV2ZW50IHRvIG1pZ3Jh dGUgYmV0d2VlbiBkaWZmZXJlbnQgZG9tYWlucyBiYXNlZCBvbiBpdHMgdXNhZ2UuCgo+IAo+IFRo ZSBpZGVhIGlzIHRoYXQgZWFjaCBleHRlcm5hbCBpbnRlcnJ1cHQgY29udHJvbGxlciAob3IgRE1B IGNvbnRyb2xsZXIsCj4gZXRjLikKPiB0aGF0IGlzIGNvbm5lY3RlZCB0byB0aGUgUFJVU1MgaW50 ZXJydXB0IGNvbnRyb2xsZXIgaXMgY29uc2lkZXJlZCBhbgo+IGludGVycnVwdAo+IGRvbWFpbi4g T25lIG9mIHRoZSBvYmplY3Rpb25zIHRvIG15IHByZXZpb3VzIHBhdGNoIHdhcyB0aGF0IHdlIGNv dWxkCj4gb25seSBoYXZlCj4gb25lIElSUSBkZXNjcmlwdG9yIHBlciBldmVudC4gTm93IHdlIGNh biBoYXZlIG9uZSBkZXNjcmlwdG9yIHBlciBldmVudCBwZXIKPiBkb21haW4uCj4gCj4gSSBhbSBz dGlsbCBwcm9wb3NpbmcgdGhhdCB3ZSB1c2UgdGhlIGludGVycnVwdC1jZWxscyBhbmQgaWRlbnRp Y2FsIHZlbmRvcgo+IHJlc291cmNlIGRhdGEgc3RydWN0dXJlcyBpbiB0aGUgUFJVIGZpcm13YXJl IGJlIHVzZWQgdG8gcHJvdmlkZSB0aGUgbWFwcGluZwo+IGluZm9ybWF0aW9uLiAoQXMgYSBzaWRl IG5vdGUsIEkgc3RpbGwgdGhpbmsgaXQgaXMgaW1wb3J0YW50IHRvIGluY2x1ZGUKPiBFVlRTRUwK PiBvbiBBTTE4eHggaW4gb3JkZXIgdG8gZnVsbHkgZGVzY3JpYmUgdGhlIGV2ZW50LikKClcuci50 IEVWVFNFTCwgaXQgaXMgYSBnbG9iYWwgdmFsdWUgYW5kIGFwcGxpZXMgdG8gYSByYW5nZSBvZiBl dmVudHMuIEkKaGF2ZSBhbm90aGVyIGVxdWl2YWxlbnQgcmVnaXN0ZXIvZnVuY3Rpb25hbGl0eSBv biBtb3N0IG9mIHRoZSBvdGhlciBTb0NzCmFzIHdlbGwgKGEgcmVnaXN0ZXIgaW4gUFJVU1NfQ0ZH IHNwYWNlKSB0aGF0IG11eGVzIHN0YW5kYXJkIGV2ZW50cyB2cwpNSUlfUlQgZXZlbnRzLiBBZ2Fp biwgdGhhdCBpcyBsaW1pdGVkIHRvIG9ubHkgYSBzdWJzZXQgb2YgYWxsIHRoZSBzeXN0ZW0KZXZl bnRzLiBTbywgc2hvdWxkIHRoaXMgY29udGludWUgdG8gYmUgYSBwZXIgZXZlbnQgc3BlY2lmaWVy LCBpdCB3aWxsIGJlCnlldCBhbm90aGVyIG1hcHBpbmcgY29uZmlndXJhdGlvbiBkYXRhIGl0ZW0g KG15IGlkZWEgd2FzIHRvIG1hbmFnZSB0aGlzCm9uY2UgcGVyIGFwcGxpY2F0aW9uIHdpdGhpbiB0 aGUgUFJVIHJlbW90ZXByb2MgZHJpdmVyIGFsb25nIHdpdGggdGhlCmZ3c3BlYyBtYXBwaW5nKS4K CnJlZ2FyZHMKU3VtYW4KCj4gCj4gVGhlIGJpbmRpbmdzIHdpbGwgaGF2ZSBOID0gNCBjZWxscyAo b3IgTiA9IDUgd2hlbiBFVlRTRUwgaXMgcmVxdWlyZWQgdG8KPiBmdWxseQo+IGRlc2NyaWJlIHRo ZSBldmVudCk6Cj4gCj4gwqDCoMKgwqBDZWxsIDA6IFRoZSBQUlVTUyBldmVudCBudW1iZXIsIGUu Zy4gMCB0byA2NCBmb3IgbW9zdCBQUlVTU3MKPiDCoMKgwqDCoENlbGwgMTogVGhlIEVWVFNFTCB2 YWx1ZSAob21pdHRlZCB3aGVuIE4gPT0gNCksIGUuZy4gMCwgMSBvcgo+IMKgwqDCoMKgwqDCoMKg IFRJX1BSVVNTX0lOVENfRVZUU0VMX0FOWSBpZiB0aGUgZXZlbnQgaXMgdGhlIHNhbWUgZm9yIGFs bCBFVlRTRUwKPiDCoMKgwqDCoMKgwqDCoCB2YWx1ZXMuIE9uIEFNMTh4eCwgZXh0ZXJuYWwgZXZl bnRzIHdpbGwgYWxsIHJlcXVpcmUgMCBvciAxIHdoaWxlCj4gwqDCoMKgwqDCoMKgwqAgc3lzdGVt IGV2ZW50cyB3aWxsIGFsd2F5cyBiZSBUSV9QUlVTU19JTlRDX0VWVFNFTF9BTlkuCj4gwqDCoMKg wqBDZWxsIE4tMzogVGhlIGNoYW5uZWwgdGhhdCB0aGUgZXZlbnQgZ2V0cyBtYXBwZWQgdG8sIGUu Zy4gMCB0byA5Cj4gwqDCoMKgwqBDZWxsIE4tMjogVGhlIGhvc3QgdGhhdCB0aGUgY2hhbm5lbCBn ZXRzIG1hcHBlZCB0bywgZS5nLiAwIHRvIDkKPiDCoMKgwqDCoENlbGwgTi0xOiBUaGUgaW50ZXJy dXB0IGRvbWFpbiwgZS5nLiBUSV9QUlVTU19JTlRDX0RPTUFJTl9QUlUgb3IKPiDCoMKgwqDCoMKg wqDCoCBUSV9QUlVTU19JTlRDX0RPTUFJTl9NQ1UKPiAKPiBUaGUgVElfUFJVU1NfSU5UQ19ET01B SU5fKiB2YWx1ZXMgYXJlIGp1c3QgYXJiaXRyYXJ5IG51bWJlcnMgYXNzaWduZWQgdG8KPiB0aGUK PiBwb3NzaWJsZSBkb21haW5zLiBGb3IgZXhhbXBsZSwgb24gQU0xOHh4IGFuZCBBTTMzeHgsIHRo ZXJlIGFyZSBqdXN0IHR3bwo+IGRvbWFpbnMsCj4gdGhlIFBSVSBkb21haW4gZm9yIGhvc3QgMCBh bmQgaG9zdCAxIGFuZCB0aGUgTUNVIGRvbWFpbiBmb3IgaG9zdCAyIHRocnUgOS4KPiBMb29raW5n IGF0IHRoZSBBTTY1eHggbWFudWFsLCBpdCBsb29rcyBsaWtlIGl0IHdvdWxkIGhhdmUgNCBkb21h aW5zLCB0aGUKPiBQUlUKPiBkb21haW4sIHRoZSBSVFUgUFJVIGRvbWFpbiwgdGhlIE1DVSBkb21h aW4gYW5kIGEgdGFzayBtYW5hZ2VyIGRvbWFpbi4KPiAoQW5kIEkKPiBzdXBwb3NlIHRoYXQgZG9t YWlucyBjb3VsZCBldmVuIGJlIG1vcmUgZ3JhbnVsYXIgaWYgbmVlZGVkLCBlLmcuIHdlCj4gY291 bGQgZHJvcAo+IHRoZSBhcmJpdHJhcnkgZG9tYWluIG51bWJlciBhbmQgdHJlYXQgZWFjaCBob3N0 IGludGVycnVwdC9ldmVudCBhcyBhbgo+IGludGVycnVwdAo+IGRvbWFpbiwgdGhlbiB0aGVyZSB3 b3VsZCBiZSBhbiBJUlEgZGVzY3JpcHRvciBwZXIgUFJVIElOVEMgZXZlbnQgcGVyIGhvc3QuKQo+ IAo+IFRoZSBBTTE4eHggZXhhbXBsZSBJIGhhdmUgYmVlbiB1c2luZyB3aWxsIGxvb2sgbGlrZSB0 aGlzIGluIHRoZSBkZXZpY2UKPiB0cmVlOgo+IAo+IMKgwqDCoMKgaW50ZXJydXB0cyA9IDw2MyBU SV9QUlVTU19JTlRDX0VWVFNFTF9BTlkgMCAwCj4gVElfUFJVU1NfSU5UQ19ET01BSU5fUFJVPiwK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPDYyIFRJX1BSVVNTX0lOVENfRVZUU0VMX0FOWSAy IDIgVElfUFJVU1NfSU5UQ19ET01BSU5fTUNVPjsKPiAKPiBUbyBrZWVwIHBhcnNpbmcgc2ltcGxl LCB0aGUgUFJVIGZpcm13YXJlIGNhbiBpbmNsdWRlIHZlbmRvciByZXNvdXJjZXMKPiB0aGF0IGhh dmUKPiBlc3NlbnRpYWxseSB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlIGRldmljZSB0cmVlIGJpbmRp bmdzLiBGb3IgZXhhbXBsZToKPiAKPiBlbnVtIHsKPiDCoMKgwqDCoC8qIElSUSBkZXNjcmlwdG9y IHdpdGhvdXQgRVZUU0VMICovCj4gwqDCoMKgwqBUSV9QUlVfVkVORE9SX1JFU09VUkNFX0lSUSA9 IFJTQ19WRU5ET1JfU1RBUlQsCj4gwqDCoMKgwqAvKiBJUlEgZGVzY3JpcHRvciB3aXRoIEVWVFNF TCAqLwo+IMKgwqDCoMKgVElfUFJVX1ZFTkRPUl9SRVNPVVJDRV9JUlEyLAo+IH07Cj4gCj4gc3Ry dWN0IHRpX3BydV92ZW5kb3JfcmVzb3VyY2VfaXJxIHsKPiDCoMKgwqDCoF9fbGUzMiBldmVudDsK PiDCoMKgwqDCoF9fbGUzMiBjaGFubmVsOwo+IMKgwqDCoMKgX19sZTMyIGhvc3Q7Cj4gwqDCoMKg wqBfX2xlMzIgZG9tYWluOwo+IH07Cj4gCj4gc3RydWN0IHRpX3BydV92ZW5kb3JfcmVzb3VyY2Vf aXJxMiB7Cj4gwqDCoMKgwqBfX2xlMzIgZXZlbnQ7Cj4gwqDCoMKgwqBfX2xlMzIgZXZ0X3NlbDsK PiDCoMKgwqDCoF9fbGUzMiBjaGFubmVsOwo+IMKgwqDCoMKgX19sZTMyIGhvc3Q7Cj4gwqDCoMKg wqBfX2xlMzIgZG9tYWluOwo+IH07Cj4gCj4gVGhlbiB3ZSBjYW4gcHJvdmlkZSBhIHZlbmRvciBy ZXNvdXJjZSBob29rIGluIHRoZSByZW1vdGVwcm9jIGRyaXZlciB0bwo+IGhhbmRsZQo+IHRoZXNl IHJlc291cmNlczoKPiAKPiBzdGF0aWMgaW50IHRpX3BydV9ycHJvY19oYW5kbGVfcnNjKHN0cnVj dCBycHJvYyAqcnByb2MsIHUzMiByc2NfdHlwZSwKPiB2b2lkICpyc2MsCj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBvZmZzZXQsIGludCBhdmFpbCkKPiB7Cj4gwqDC oMKgwqBzdHJ1Y3QgdGlfcHJ1X2RhdGEgKnBydSA9IHJwcm9jLT5wcml2Owo+IMKgwqDCoMKgc3Ry dWN0IGlycV9md3NwZWMgZndzcGVjOwo+IMKgwqDCoMKgdW5zaWduZWQgaW50IHZpcnE7Cj4gCj4g wqDCoMKgwqBzd2l0Y2ggKHJzY190eXBlKSB7Cj4gwqDCoMKgwqBjYXNlIFRJX1BSVV9WRU5ET1Jf UkVTT1VSQ0VfSVJROgo+IMKgwqDCoMKgewo+IMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB0aV9wcnVf dmVuZG9yX3Jlc291cmNlX2lycSAqcnNjX2lycSA9IHJzYzsKPiAKPiDCoMKgwqDCoMKgwqDCoCBm d3NwZWMuZndub2RlID0gcHJ1LT5pbnRjX2Z3bm9kZTsKPiDCoMKgwqDCoMKgwqDCoCBmd3NwZWMu cGFyYW1bMF0gPSBsZTMyX3RvX2NwdShyc2NfaXJxLT5ldmVudCk7Cj4gwqDCoMKgwqDCoMKgwqAg ZndzcGVjLnBhcmFtWzFdID0gbGUzMl90b19jcHUocnNjX2lycS0+Y2hhbm5lbCk7Cj4gwqDCoMKg wqDCoMKgwqAgZndzcGVjLnBhcmFtWzJdID0gbGUzMl90b19jcHUocnNjX2lycS0+aG9zdCk7Cj4g wqDCoMKgwqDCoMKgwqAgZndzcGVjLnBhcmFtWzNdID0gbGUzMl90b19jcHUocnNjX2lycS0+ZG9t YWluKTsKPiDCoMKgwqDCoMKgwqDCoCBmd3NwZWMucGFyYW1fY291bnQgPSA0Owo+IMKgwqDCoMKg fQo+IMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+IMKgwqDCoMKgY2FzZSBUSV9QUlVfVkVORE9SX1JF U09VUkNFX0lSUTI6Cj4gwqDCoMKgwqB7Cj4gwqDCoMKgwqDCoMKgwqAgc3RydWN0IHRpX3BydV92 ZW5kb3JfcmVzb3VyY2VfaXJxMiAqcnNjX2lycTIgPSByc2M7Cj4gCj4gwqDCoMKgwqDCoMKgwqAg ZndzcGVjLmZ3bm9kZSA9IHBydS0+aW50Y19md25vZGU7Cj4gwqDCoMKgwqDCoMKgwqAgZndzcGVj LnBhcmFtWzBdID0gbGUzMl90b19jcHUocnNjX2lycTItPmV2ZW50KTsKPiDCoMKgwqDCoMKgwqDC oCBmd3NwZWMucGFyYW1bMV0gPSBsZTMyX3RvX2NwdShyc2NfaXJxMi0+ZXZ0X3NlbCk7Cj4gwqDC oMKgwqDCoMKgwqAgZndzcGVjLnBhcmFtWzJdID0gbGUzMl90b19jcHUocnNjX2lycTItPmNoYW5u ZWwpOwo+IMKgwqDCoMKgwqDCoMKgIGZ3c3BlYy5wYXJhbVszXSA9IGxlMzJfdG9fY3B1KHJzY19p cnEyLT5ob3N0KTsKPiDCoMKgwqDCoMKgwqDCoCBmd3NwZWMucGFyYW1bNF0gPSBsZTMyX3RvX2Nw dShyc2NfaXJxMi0+ZG9tYWluKTsKPiDCoMKgwqDCoMKgwqDCoCBmd3NwZWMucGFyYW1fY291bnQg PSA1Owo+IMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+IMKgwqDCoMKgfQo+IMKgwqDCoMKgZGVmYXVs dDoKPiDCoMKgwqDCoMKgwqDCoCByZXR1cm4gUlNDX0lHTk9SRUQ7Cj4gwqDCoMKgwqB9Cj4gCj4g wqDCoMKgwqB2aXJxID0gaXJxX2NyZWF0ZV9md3NwZWNfbWFwcGluZygmZndzcGVjKTsKPiDCoMKg wqDCoGlmICghdmlycSkKPiDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPiAKPiDCoMKg wqDCoC8qIFRPRE86IHNhdmUgdmlycSAoYW5kIG90aGVyIG1ldGFkYXRhKSBmb3IgbGF0ZXIgdXNl ICovCj4gCj4gwqDCoMKgwqByZXR1cm4gUlNDX0hBTkRMRUQ7Cj4gfQo+IAo+IHN0YXRpYyBjb25z dCBzdHJ1Y3QgcnByb2Nfb3BzIHRpX3BydV9ycHJvY19vcHMgPSB7Cj4gwqDCoMKgwqAuc3RhcnQg PSB0aV9wcnVfcnByb2Nfc3RhcnQsCj4gwqDCoMKgwqAuc3RvcCA9IHRpX3BydV9ycHJvY19zdG9w LAo+IMKgwqDCoMKgLmtpY2sgPSB0aV9wcnVfcnByb2Nfa2ljaywKPiDCoMKgwqDCoC5kYV90b192 YSA9IHRpX3BydV9ycHJvY19kYV90b192YSwKPiDCoMKgwqDCoC5oYW5kbGVfcnNjID0gdGlfcHJ1 X3Jwcm9jX2hhbmRsZV9yc2MsCj4gfTsKPiAKPiBUaGUgaGFuZGxlX3JzYyBjYWxsYmFjayBpcyBj YWxsZWQgZm9yIGVhY2ggcmVzb3VyY2Ugd2hlbiB0aGUgUFJVIGlzIGJvb3RlZC4KPiBUaGUgZnVu Y3Rpb24gaXJxX2NyZWF0ZV9md3NwZWNfbWFwcGluZygpIGNhdXNlcyB0aGUgSVJRIHRvIGJlIG1h cHBlZCBpbgo+IGhhcmR3YXJlLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kIGZyb20gdGhlIHByZXZp b3VzIGRpc2N1c3Npb25zLCB0aGlzIGlzCj4gZXhhY3RseQo+IHdoZW4gd2Ugd2FudCB0aGlzIHRv IGhhcHBlbi4KPiAKPiBUaGlzIHBhdGNoIGFwcGxpZXMgb24gdG9wIG9mICJpcnFjaGlwL2lycS1w cnVzcy1pbnRjOiBBZGQgYSBQUlVTUwo+IGlycWNoaXAgZHJpdmVyCj4gZm9yIFBSVVNTIGludGVy cnVwdHMiLCAiaXJxY2hpcC9pcnEtcHJ1c3MtaW50YzogQWRkIHN1cHBvcnQgZm9yIHNoYXJlZCBh bmQKPiBpbnZhbGlkIGludGVycnVwdHMiIGFuZCAiaXJxY2hpcC9pcnEtcHJ1c3MtaW50YzogSW1w bGVtZW50IGlycV97Z2V0LHNldH0KPiBfaXJxY2hpcF9zdGF0ZSBvcHMiIGZyb20gW1BBVENIIHYy IDAvNl0gIkFkZCBUSSBQUlVTUyBMb2NhbCBJbnRlcnJ1cHQKPiBDb250cm9sbGVyCj4gSVJRQ2hp cCBkcml2ZXIiIFsyXS4KPiAKPiBBIHdvcmtpbmcgY29weSBhbG9uZyB3aXRoIHNvbWUgcmVtb3Rl cHJvYyBhbmQgcnBtc2cgaGFja3MgY2FuIGJlIGZvdW5kCj4gb24gbXkKPiBHaXRIdWIgWzNdLgo+ IAo+IFsxXToKPiBodHRwczovL2xvcmUua2VybmVsLm9yZy9sa21sL2ZiMmJkYjdiLTRkNGQtNTA4 Zi03MjJhLTU1NDg4ODI4MDE0NUBsZWNobm9sb2d5LmNvbS8KPiAKPiBbMl06IGh0dHBzOi8vbG9y ZS5rZXJuZWwub3JnL2xrbWwvMjAxOTA3MzEyMjQxNDkuMTExNTMtMS1zLWFubmFAdGkuY29tLwo+ IFszXTogaHR0cHM6Ly9naXRodWIuY29tL2RsZWNoL2xpbnV4L2NvbW1pdHMvcHJ1c3MtMjAxOS0w OC0wOAo+IAo+IFNpZ25lZC1vZmYtYnk6IFN1bWFuIEFubmEgPHMtYW5uYUB0aS5jb20+Cj4gU2ln bmVkLW9mZi1ieTogQW5kcmV3IEYuIERhdmlzIDxhZmRAdGkuY29tPgo+IFNpZ25lZC1vZmYtYnk6 IFJvZ2VyIFF1YWRyb3MgPHJvZ2VycUB0aS5jb20+Cj4gU2lnbmVkLW9mZi1ieTogRGF2aWQgTGVj aG5lciA8ZGF2aWRAbGVjaG5vbG9neS5jb20+Cj4gLS0tCj4gwqBkcml2ZXJzL2lycWNoaXAvaXJx LXBydXNzLWludGMuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgMzg3ICsrKysrKysrKysr KysrKysrLQo+IMKgLi4uL2ludGVycnVwdC1jb250cm9sbGVyL3RpLXBydXNzLmjCoMKgwqDCoMKg wqDCoMKgwqDCoCB8wqAgMjcgKysKPiDCoDIgZmlsZXMgY2hhbmdlZCwgMzk2IGluc2VydGlvbnMo KyksIDE4IGRlbGV0aW9ucygtKQo+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvZHQtYmlu ZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvdGktcHJ1c3MuaAo+IAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2lycWNoaXAvaXJxLXBydXNzLWludGMuYwo+IGIvZHJpdmVycy9pcnFjaGlwL2lycS1w cnVzcy1pbnRjLmMKPiBpbmRleCBjMWZkNmMwOWYyZjIuLmRhNDM0OWRmMDhjMyAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2lycWNoaXAvaXJxLXBydXNzLWludGMuYwo+ICsrKyBiL2RyaXZlcnMvaXJx Y2hpcC9pcnEtcHJ1c3MtaW50Yy5jCj4gQEAgLTUsNiArNSw4IEBACj4gwqAgKiBDb3B5cmlnaHQg KEMpIDIwMTYtMjAxOSBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLQo+IGh0dHA6Ly93 d3cudGkuY29tLwo+IMKgICrCoMKgwqAgQW5kcmV3IEYuIERhdmlzIDxhZmRAdGkuY29tPgo+IMKg ICrCoMKgwqAgU3VtYW4gQW5uYSA8cy1hbm5hQHRpLmNvbT4KPiArICoKPiArICogQ29weXJpZ2h0 IChDKSAyMDE5IERhdmlkIExlY2huZXIgPGRhdmlkQGxlY2hub2xvZ3kuY29tPgo+IMKgICovCj4g wqAKPiDCoCNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPiBAQCAtMTQsNiArMTYsMTQgQEAK PiDCoCNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiDCoCNpbmNsdWRlIDxsaW51eC9vZl9kZXZp Y2UuaD4KPiDCoCNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiArI2luY2x1ZGUg PGxpbnV4L3BtX3J1bnRpbWUuaD4KPiArCj4gKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1 cHQtY29udHJvbGxlci90aS1wcnVzcy5oPgo+ICsKPiArLyogVGhlIG51bWJlciBvZiBwb3NzaWJs ZSBpbnRlcnJ1cHQgZG9tYWlucywgc2VlIFRJX1BSVVNTX0lOVENfRE9NQUlOXyogaW4KPiArICog ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvdGktcHJ1c3MuaAo+ICsgKi8KPiArI2Rl ZmluZSBOVU1fVElfUFJVU1NfSU5UQ19ET01BSU4gNQo+IMKgCj4gwqAvKgo+IMKgICogTnVtYmVy IG9mIGhvc3QgaW50ZXJydXB0cyByZWFjaGluZyB0aGUgbWFpbiBNUFUgc3ViLXN5c3RlbS4gTm90 ZQo+IHRoYXQgdGhpcwo+IEBAIC0yNSw2ICszNSwxMiBAQAo+IMKgLyogbWluaW11bSBzdGFydGlu ZyBob3N0IGludGVycnVwdCBudW1iZXIgZm9yIE1QVSAqLwo+IMKgI2RlZmluZSBNSU5fUFJVX0hP U1RfSU5UwqDCoMKgIDIKPiDCoAo+ICsvKiBtYXhpbXVtIG51bWJlciBvZiBob3N0IGludGVycnVw dHMgKi8KPiArI2RlZmluZSBNQVhfUFJVX0hPU1RfSU5UwqDCoMKgIDEwCj4gKwo+ICsvKiBtYXhp bXVtIG51bWJlciBvZiBpbnRlcnJ1cHQgY2hhbm5lbHMgKi8KPiArI2RlZmluZSBNQVhfUFJVX0NI QU5ORUxTwqDCoMKgIDEwCj4gKwo+IMKgLyogbWF4aW11bSBudW1iZXIgb2Ygc3lzdGVtIGV2ZW50 cyAqLwo+IMKgI2RlZmluZSBNQVhfUFJVX1NZU19FVkVOVFPCoMKgwqAgNjQKPiDCoAo+IEBAIC01 NywyNyArNzMsODMgQEAKPiDCoCNkZWZpbmUgUFJVX0lOVENfSElOTFIoeCnCoMKgwqAgKDB4MTEw MCArICh4KSAqIDQpCj4gwqAjZGVmaW5lIFBSVV9JTlRDX0hJRVLCoMKgwqDCoMKgwqDCoCAweDE1 MDAKPiDCoAo+ICsvKiBDTVIgcmVnaXN0ZXIgYml0LWZpZWxkIG1hY3JvcyAqLwo+ICsjZGVmaW5l IENNUl9FVlRfTUFQX01BU0vCoMKgwqAgMHhmCj4gKyNkZWZpbmUgQ01SX0VWVF9NQVBfQklUU8Kg wqDCoCA4Cj4gKyNkZWZpbmUgQ01SX0VWVF9QRVJfUkVHwqDCoMKgwqDCoMKgwqAgNAo+ICsKPiAr LyogSE1SIHJlZ2lzdGVyIGJpdC1maWVsZCBtYWNyb3MgKi8KPiArI2RlZmluZSBITVJfQ0hfTUFQ X01BU0vCoMKgwqDCoMKgwqDCoCAweGYKPiArI2RlZmluZSBITVJfQ0hfTUFQX0JJVFPCoMKgwqDC oMKgwqDCoCA4Cj4gKyNkZWZpbmUgSE1SX0NIX1BFUl9SRUfCoMKgwqDCoMKgwqDCoCA0Cj4gKwo+ IMKgLyogSElQSVIgcmVnaXN0ZXIgYml0LWZpZWxkcyAqLwo+IMKgI2RlZmluZSBJTlRDX0hJUElS X05PTkVfSElOVMKgwqDCoCAweDgwMDAwMDAwCj4gwqAKPiArLyoqCj4gKyAqIHN0cnVjdCBwcnVz c19pbnRjX2h3aXJxX2RhdGEgLSBhZGRpdGlvbmFsIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCBh Cj4gUFJVCj4gKyAqIHN5c3RlbSBldmVudAo+ICsgKiBAZXZ0c2VsOiBUaGUgZXZlbnQgc2VsZWN0 IGluZGV4IChBTTE4eHggb25seSkKPiArICogQGNoYW5uZWw6IFRoZSBQUlUgSU5UQyBjaGFubmVs IHRoYXQgdGhlIHN5c3RlbSBldmVudCBzaG91bGQgYmUKPiBtYXBwZWQgdG8KPiArICogQGhvc3Q6 IFRoZSBQUlUgSU5UQyBob3N0IHRoYXQgdGhlIGNoYW5uZWwgc2hvdWxkIGJlIG1hcHBlZCB0bwo+ ICsgKi8KPiArc3RydWN0IHBydXNzX2ludGNfaHdpcnFfZGF0YSB7Cj4gK8KgwqDCoCB1OCBldnRz ZWw7Cj4gK8KgwqDCoCB1OCBjaGFubmVsOwo+ICvCoMKgwqAgdTggaG9zdDsKPiArfTsKPiArCj4g Ky8qKgo+ICsgKiBzdHJ1Y3QgcHJ1c3NfaW50Y19tYXBfcmVjb3JkIC0ga2VlcHMgdHJhY2sgb2Yg YWN0dWFsIG1hcHBpbmcgc3RhdGUKPiArICogQHZhbHVlOiBUaGUgY3VycmVudGx5IG1hcHBlZCB2 YWx1ZSAoZXZ0c2VsLCBjaGFubmVsIG9yIGhvc3QpCj4gKyAqIEByZWZfY291bnQ6IEtlZXBzIHRy YWNrIG9mIG51bWJlciBvZiBjdXJyZW50IHVzZXJzIG9mIHRoaXMgcmVzb3VyY2UKPiArICovCj4g K3N0cnVjdCBwcnVzc19pbnRjX21hcF9yZWNvcmQgewo+ICvCoMKgwqAgdTggdmFsdWU7Cj4gK8Kg wqDCoCB1OCByZWZfY291bnQ7Cj4gK307Cj4gKwo+ICsvKioKPiArICogc3RydWN0IHBydXNzX2lu dGNfZG9tYWluIC0gaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8gYW4gZXh0ZXJuYWwgSVJRCj4gZG9t YWluCj4gKyAqIEBod2lycV9kYXRhOiBUYWJsZSBvZiBhZGRpdGlvbmFsIG1hcHBpbmcgZGF0YSBy ZWNlaXZlZCBmcm9tIGRldmljZSB0cmVlCj4gKyAqwqDCoMKgIG9yIFBSVSBmaXJtd2FyZQo+ICsg KiBAZG9tYWluOiBpcnEgZG9tYWluCj4gKyAqIEBpbnRjOiB0aGUgaW50ZXJydXB0IGNvbnRyb2xs ZXIKPiArICogQGlkOiBVbmlxdWUgZG9tYWluIGlkZW50aWZpZXIgKGZyb20gZGV2aWNlIHRyZWUg YmluZGluZ3MpCj4gKyAqLwo+ICtzdHJ1Y3QgcHJ1c3NfaW50Y19kb21haW4gewo+ICvCoMKgwqAg c3RydWN0IHBydXNzX2ludGNfaHdpcnFfZGF0YSBod2lycV9kYXRhW01BWF9QUlVfU1lTX0VWRU5U U107Cj4gK8KgwqDCoCBzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOwo+ICvCoMKgwqAgc3RydWN0 IHBydXNzX2ludGMgKmludGM7Cj4gK8KgwqDCoCB1MzIgaWQ7Cj4gK307Cj4gKwo+IMKgLyoqCj4g wqAgKiBzdHJ1Y3QgcHJ1c3NfaW50YyAtIFBSVVNTIGludGVycnVwdCBjb250cm9sbGVyIHN0cnVj dHVyZQo+ICsgKiBAZG9tYWluOiBFeHRlcm5hbCBpbnRlcnJ1cHQgZG9tYWlucwo+ICsgKiBAZXZ0 c2VsOiBUcmFja3MgdGhlIGN1cnJlbnQgc3RhdGUgb2YgQ0ZHQ0hJUDNbM10uUFJVU1NFVlRTRUwg KEFNMTh4eAo+IG9ubHkpCj4gKyAqIEBldmVudF9jaGFubmVsOiBUcmFja3MgdGhlIGN1cnJlbnQg c3RhdGUgb2Ygc3lzdGVtIGV2ZW50IHRvIGNoYW5uZWwKPiBtYXBwaW5ncwo+ICsgKiBAY2hhbm5l bF9ob3N0OiBUcmFja3MgdGhlIGN1cnJlbnQgc3RhdGUgb2YgY2hhbm5lbCB0byBob3N0IG1hcHBp bmdzCj4gwqAgKiBAaXJxczoga2VybmVsIGlycSBudW1iZXJzIGNvcnJlc3BvbmRpbmcgdG8gUFJV U1MgaG9zdCBpbnRlcnJ1cHRzCj4gwqAgKiBAYmFzZTogYmFzZSB2aXJ0dWFsIGFkZHJlc3Mgb2Yg SU5UQyByZWdpc3RlciBzcGFjZQo+IMKgICogQGlycWNoaXA6IGlycSBjaGlwIGZvciB0aGlzIGlu dGVycnVwdCBjb250cm9sbGVyCj4gLSAqIEBkb21haW46IGlycSBkb21haW4gZm9yIHRoaXMgaW50 ZXJydXB0IGNvbnRyb2xsZXIKPiDCoCAqIEBsb2NrOiBtdXRleCB0byBzZXJpYWxpemUgYWNjZXNz IHRvIElOVEMKPiDCoCAqIEBzaGFyZWRfaW50cjogYml0LW1hcCBkZW5vdGluZyBpZiB0aGUgTVBV IGhvc3QgaW50ZXJydXB0IGlzIHNoYXJlZAo+IMKgICogQGludmFsaWRfaW50cjogYml0LW1hcCBk ZW5vdGluZyBpZiBob3N0IGludGVycnVwdCBpcyBub3QgY29ubmVjdGVkCj4gdG8gTVBVCj4gKyAq IEBoYXNfZXZ0c2VsOiBpbmRpY2F0ZXMgdGhhdCB0aGUgY2hpcCBoYXMgYW4gZXZlbnQgc2VsZWN0 IG11eAo+IMKgICovCj4gwqBzdHJ1Y3QgcHJ1c3NfaW50YyB7Cj4gK8KgwqDCoCBzdHJ1Y3QgcHJ1 c3NfaW50Y19kb21haW4gZG9tYWluW05VTV9JU0FfSU5URVJSVVBUU107Cj4gK8KgwqDCoCBzdHJ1 Y3QgcHJ1c3NfaW50Y19tYXBfcmVjb3JkIGV2dHNlbDsKPiArwqDCoMKgIHN0cnVjdCBwcnVzc19p bnRjX21hcF9yZWNvcmQgZXZlbnRfY2hhbm5lbFtNQVhfUFJVX1NZU19FVkVOVFNdOwo+ICvCoMKg wqAgc3RydWN0IHBydXNzX2ludGNfbWFwX3JlY29yZCBjaGFubmVsX2hvc3RbTUFYX1BSVV9DSEFO TkVMU107Cj4gwqDCoMKgwqAgdW5zaWduZWQgaW50IGlycXNbTUFYX05VTV9IT1NUX0lSUVNdOwo+ IMKgwqDCoMKgIHZvaWQgX19pb21lbSAqYmFzZTsKPiDCoMKgwqDCoCBzdHJ1Y3QgaXJxX2NoaXAg KmlycWNoaXA7Cj4gLcKgwqDCoCBzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOwo+IMKgwqDCoMKg IHN0cnVjdCBtdXRleCBsb2NrOyAvKiBQUlVTUyBJTlRDIGxvY2sgKi8KPiDCoMKgwqDCoCB1MTYg c2hhcmVkX2ludHI7Cj4gwqDCoMKgwqAgdTE2IGludmFsaWRfaW50cjsKPiArwqDCoMKgIGJvb2wg aGFzX2V2dHNlbDsKPiDCoH07Cj4gwqAKPiDCoHN0YXRpYyBpbmxpbmUgdTMyIHBydXNzX2ludGNf cmVhZF9yZWcoc3RydWN0IHBydXNzX2ludGMgKmludGMsIHVuc2lnbmVkCj4gaW50IHJlZykKPiBA QCAtMTA1LDYgKzE3NywxNzIgQEAgc3RhdGljIGludCBwcnVzc19pbnRjX2NoZWNrX3dyaXRlKHN0 cnVjdAo+IHBydXNzX2ludGMgKmludGMsIHVuc2lnbmVkIGludCByZWcsCj4gwqDCoMKgwqAgcmV0 dXJuIDA7Cj4gwqB9Cj4gwqAKPiArLyoqCj4gKyAqIHBydXNzX2ludGNfbWFwKCkgLSBjb25maWd1 cmUgdGhlIFBSVVNTIElOVEMKPiArICogQGRvbWFpbjogcHJ1IGludGMgZG9tYWluIHBvaW50ZXIK PiArICogQGh3aXJxOiB0aGUgc3lzdGVtIGV2ZW50IG51bWJlcgo+ICsgKgo+ICsgKiBDb25maWd1 cmVzIHRoZSBQUlVTUyBJTlRDIHdpdGggdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24gZnJvbSB0 aGUgb25lCj4gKyAqIHBhcnNlZCBpbiB0aGUgeGxhdGUgZnVuY3Rpb24uIEFueSBleGlzdGluZyBl dmVudCB0byBjaGFubmVsIG1hcHBpbmdzIG9yCj4gKyAqIGNoYW5uZWwgdG8gaG9zdCBpbnRlcnJ1 cHQgbWFwcGluZ3MgYXJlIGNoZWNrZWQgdG8gbWFrZSBzdXJlIHRoZXJlCj4gYXJlIG5vCj4gKyAq IGNvbmZsaWN0aW5nIGNvbmZpZ3VyYXRpb24gYmV0d2VlbiBib3RoIHRoZSBQUlUgY29yZXMuCj4g KyAqCj4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvciBhIHN1aXRhYmxlIGVycm9yIGNvZGUg b3RoZXJ3aXNlCj4gKyAqLwo+ICtzdGF0aWMgaW50IHBydXNzX2ludGNfbWFwKHN0cnVjdCBwcnVz c19pbnRjX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZAo+IGxvbmcgaHdpcnEpCj4gK3sKPiArwqDC oMKgIHN0cnVjdCBwcnVzc19pbnRjICppbnRjID0gZG9tYWluLT5pbnRjOwo+ICvCoMKgwqAgc3Ry dWN0IGRldmljZSogZGV2ID0gaW50Yy0+aXJxY2hpcC0+cGFyZW50X2RldmljZTsKPiArwqDCoMKg IHUzMiB2YWw7Cj4gK8KgwqDCoCBpbnQgaWR4LCByZXQ7Cj4gK8KgwqDCoCB1OCBldnRzZWwsIGNo LCBob3N0Owo+ICsKPiArwqDCoMKgIGlmIChod2lycSA+PSBNQVhfUFJVX1NZU19FVkVOVFMpCj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+ICsKPiArwqDCoMKgIG11dGV4X2xvY2so JmludGMtPmxvY2spOwo+ICsKPiArwqDCoMKgIGV2dHNlbCA9IGRvbWFpbi0+aHdpcnFfZGF0YVto d2lycV0uZXZ0c2VsOwo+ICvCoMKgwqAgY2ggPSBkb21haW4tPmh3aXJxX2RhdGFbaHdpcnFdLmNo YW5uZWw7Cj4gK8KgwqDCoCBob3N0ID0gZG9tYWluLT5od2lycV9kYXRhW2h3aXJxXS5ob3N0Owo+ ICsKPiArwqDCoMKgIGlmIChpbnRjLT5oYXNfZXZ0c2VsICYmIGludGMtPmV2dHNlbC5yZWZfY291 bnQgPiAwICYmCj4gK8KgwqDCoMKgwqDCoMKgIGludGMtPmV2dHNlbC52YWx1ZSAhPSBldnRzZWwp IHsKPiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJldmVudCAlbHUgKHJlcS4gZXZ0c2Vs ICVkKSBhbHJlYWR5IGFzc2lnbmVkIHRvCj4gZXZ0c2VsICVkXG4iLAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGh3aXJxLCBldnRzZWwsIGludGMtPmV2dHNlbC52YWx1ZSk7Cj4gK8KgwqDCoMKg wqDCoMKgIHJldCA9IC1FQlVTWTsKPiArwqDCoMKgwqDCoMKgwqAgZ290byB1bmxvY2s7Cj4gK8Kg wqDCoCB9Cj4gKwo+ICvCoMKgwqAgLyogY2hlY2sgaWYgc3lzZXZlbnQgYWxyZWFkeSBhc3NpZ25l ZCAqLwo+ICvCoMKgwqAgaWYgKGludGMtPmV2ZW50X2NoYW5uZWxbaHdpcnFdLnJlZl9jb3VudCA+ IDAgJiYKPiArwqDCoMKgwqDCoMKgwqAgaW50Yy0+ZXZlbnRfY2hhbm5lbFtod2lycV0udmFsdWUg IT0gY2gpIHsKPiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJldmVudCAlbHUgKHJlcS4g Y2hhbm5lbCAlZCkgYWxyZWFkeSBhc3NpZ25lZCB0bwo+IGNoYW5uZWwgJWRcbiIsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaHdpcnEsIGNoLCBpbnRjLT5ldmVudF9jaGFubmVsW2h3aXJxXS52 YWx1ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IC1FQlVTWTsKPiArwqDCoMKgwqDCoMKgwqAg Z290byB1bmxvY2s7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgLyogY2hlY2sgaWYgY2hhbm5l bCBhbHJlYWR5IGFzc2lnbmVkICovCj4gK8KgwqDCoCBpZiAoaW50Yy0+Y2hhbm5lbF9ob3N0W2No XS5yZWZfY291bnQgPiAwICYmCj4gK8KgwqDCoMKgwqDCoMKgIGludGMtPmNoYW5uZWxfaG9zdFtj aF0udmFsdWUgIT0gaG9zdCkgewo+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgImNoYW5u ZWwgJWQgKHJlcS4gaG9zdCAlZCkgYWxyZWFkeSBhc3NpZ25lZCB0bwo+IGhvc3QgJWRcbiIsCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2gsIGhvc3QsIGludGMtPmNoYW5uZWxfaG9zdFtjaF0u dmFsdWUpOwo+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSAtRUJVU1k7Cj4gK8KgwqDCoMKgwqDCoMKg IGdvdG8gdW5sb2NrOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIGlmICgrK2ludGMtPmV2dHNl bC5yZWZfY291bnQgPT0gMSkgewo+ICvCoMKgwqDCoMKgwqDCoCBpbnRjLT5ldnRzZWwudmFsdWUg PSBldnRzZWw7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCAvKiBUT0RPOiBuZWVkIHRvIGltcGxlbWVu dCBDRkdDSElQM1szXS5QUlVTU0VWVFNFTCAqLwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIGlm ICgrK2ludGMtPmV2ZW50X2NoYW5uZWxbaHdpcnFdLnJlZl9jb3VudCA9PSAxKSB7Cj4gK8KgwqDC oMKgwqDCoMKgIGludGMtPmV2ZW50X2NoYW5uZWxbaHdpcnFdLnZhbHVlID0gY2g7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoCAvKgo+ICvCoMKgwqDCoMKgwqDCoMKgICogY29uZmlndXJlIGNoYW5uZWwg bWFwIHJlZ2lzdGVycyAtIGVhY2ggcmVnaXN0ZXIgaG9sZHMgbWFwCj4gK8KgwqDCoMKgwqDCoMKg wqAgKiBpbmZvIGZvciA0IGV2ZW50cywgd2l0aCBlYWNoIGV2ZW50IG9jY3VweWluZyB0aGUgbG93 ZXIgbmliYmxlCj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBpbiBhIHJlZ2lzdGVyIGJ5dGUgYWRkcmVz cyBpbiBsaXR0bGUtZW5kaWFuIGZhc2hpb24KPiArwqDCoMKgwqDCoMKgwqDCoCAqLwo+ICvCoMKg wqDCoMKgwqDCoCBpZHggPSBod2lycSAvIENNUl9FVlRfUEVSX1JFRzsKPiArCj4gK8KgwqDCoMKg wqDCoMKgIHZhbCA9IHBydXNzX2ludGNfcmVhZF9yZWcoaW50YywgUFJVX0lOVENfQ01SKGlkeCkp Owo+ICvCoMKgwqDCoMKgwqDCoCB2YWwgJj0gfihDTVJfRVZUX01BUF9NQVNLIDw8Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoKGh3aXJxICUgQ01SX0VWVF9QRVJfUkVHKSAqIENN Ul9FVlRfTUFQX0JJVFMpKTsKPiArwqDCoMKgwqDCoMKgwqAgdmFsIHw9IGNoIDw8ICgoaHdpcnEg JSBDTVJfRVZUX1BFUl9SRUcpICogQ01SX0VWVF9NQVBfQklUUyk7Cj4gK8KgwqDCoMKgwqDCoMKg IHBydXNzX2ludGNfd3JpdGVfcmVnKGludGMsIFBSVV9JTlRDX0NNUihpZHgpLCB2YWwpOwo+ICsK PiArwqDCoMKgwqDCoMKgwqAgZGV2X2RiZyhkZXYsICJTWVNFViVsdSAtPiBDSCVkIChDTVIlZCAw eCUwOHgpXG4iLCBod2lycSwgY2gsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWR4LCBwcnVz c19pbnRjX3JlYWRfcmVnKGludGMsIFBSVV9JTlRDX0NNUihpZHgpKSk7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoCAvKiBjbGVhciBhbmQgZW5hYmxlIHN5c3RlbSBldmVudCAqLwo+ICvCoMKgwqDCoMKg wqDCoCBwcnVzc19pbnRjX3dyaXRlX3JlZyhpbnRjLCBQUlVfSU5UQ19TSUNSLCBod2lycSk7Cj4g K8KgwqDCoMKgwqDCoMKgIHBydXNzX2ludGNfd3JpdGVfcmVnKGludGMsIFBSVV9JTlRDX0VJU1Is IGh3aXJxKTsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBpZiAoKytpbnRjLT5jaGFubmVsX2hv c3RbY2hdLnJlZl9jb3VudCA9PSAxKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGludGMtPmNoYW5uZWxf aG9zdFtjaF0udmFsdWUgPSBob3N0Owo+ICsKPiArwqDCoMKgwqDCoMKgwqAgLyoKPiArwqDCoMKg wqDCoMKgwqDCoCAqIHNldCBob3N0IG1hcCByZWdpc3RlcnMgLSBlYWNoIHJlZ2lzdGVyIGhvbGRz IG1hcCBpbmZvIGZvcgo+ICvCoMKgwqDCoMKgwqDCoMKgICogNCBjaGFubmVscywgd2l0aCBlYWNo IGNoYW5uZWwgb2NjdXB5aW5nIHRoZSBsb3dlciBuaWJibGUgaW4KPiArwqDCoMKgwqDCoMKgwqDC oCAqIGEgcmVnaXN0ZXIgYnl0ZSBhZGRyZXNzIGluIGxpdHRsZS1lbmRpYW4gZmFzaGlvbgo+ICvC oMKgwqDCoMKgwqDCoMKgICovCj4gK8KgwqDCoMKgwqDCoMKgIGlkeCA9IGNoIC8gSE1SX0NIX1BF Ul9SRUc7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCB2YWwgPSBwcnVzc19pbnRjX3JlYWRfcmVnKGlu dGMsIFBSVV9JTlRDX0hNUihpZHgpKTsKPiArwqDCoMKgwqDCoMKgwqAgdmFsICY9IH4oSE1SX0NI X01BUF9NQVNLIDw8Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoKGNoICUgSE1S X0NIX1BFUl9SRUcpICogSE1SX0NIX01BUF9CSVRTKSk7Cj4gK8KgwqDCoMKgwqDCoMKgIHZhbCB8 PSBob3N0IDw8ICgoY2ggJSBITVJfQ0hfUEVSX1JFRykgKiBITVJfQ0hfTUFQX0JJVFMpOwo+ICvC oMKgwqDCoMKgwqDCoCBwcnVzc19pbnRjX3dyaXRlX3JlZyhpbnRjLCBQUlVfSU5UQ19ITVIoaWR4 KSwgdmFsKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgIGRldl9kYmcoZGV2LCAiQ0glZCAtPiBIT1NU JWQgKEhNUiVkIDB4JTA4eClcbiIsIGNoLCBob3N0LCBpZHgsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcHJ1c3NfaW50Y19yZWFkX3JlZyhpbnRjLCBQUlVfSU5UQ19ITVIoaWR4KSkpOwo+ICsK PiArwqDCoMKgwqDCoMKgwqAgLyogZW5hYmxlIGhvc3QgaW50ZXJydXB0cyAqLwo+ICvCoMKgwqDC oMKgwqDCoCBwcnVzc19pbnRjX3dyaXRlX3JlZyhpbnRjLCBQUlVfSU5UQ19ISUVJU1IsIGhvc3Qp Owo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIGRldl9pbmZvKGRldiwgIm1hcHBlZCBzeXN0ZW1f ZXZlbnQgPSAlbHUgY2hhbm5lbCA9ICVkIGhvc3QgPSAlZAo+IGRvbWFpbiA9ICV1XG4iLAo+ICvC oMKgwqDCoMKgwqDCoMKgIGh3aXJxLCBjaCwgaG9zdCwgZG9tYWluLT5pZCk7Cj4gKwo+ICvCoMKg wqAgLyogZ2xvYmFsIGludGVycnVwdCBlbmFibGUgKi8KPiArwqDCoMKgIHBydXNzX2ludGNfd3Jp dGVfcmVnKGludGMsIFBSVV9JTlRDX0dFUiwgMSk7Cj4gKwo+ICvCoMKgwqAgbXV0ZXhfdW5sb2Nr KCZpbnRjLT5sb2NrKTsKPiArwqDCoMKgIHJldHVybiAwOwo+ICsKPiArdW5sb2NrOgo+ICvCoMKg wqAgbXV0ZXhfdW5sb2NrKCZpbnRjLT5sb2NrKTsKPiArwqDCoMKgIHJldHVybiByZXQ7Cj4gK30K PiArCj4gKy8qKgo+ICsgKiBwcnVzc19pbnRjX3VubWFwKCkgLSB1bmNvbmZpZ3VyZSB0aGUgUFJV U1MgSU5UQwo+ICsgKiBAZG9tYWluOiBwcnUgaW50YyBkb21haW4gcG9pbnRlcgo+ICsgKiBAaHdp cnE6IHRoZSBzeXN0ZW0gZXZlbnQgbnVtYmVyCj4gKyAqCj4gKyAqIFVuZG8gd2hhdGV2ZXIgd2Fz IGRvbmUgaW4gcHJ1c3NfaW50Y19tYXAoKSBmb3IgYSBQUlUgY29yZS4KPiArICogTWFwcGluZ3Mg YXJlIHJlZmVyZW5jZSBjb3VudGVkLCBzbyByZXNvdXJjZXMgYXJlIG9ubHkgZGlzYWJsZWQgd2hl bgo+IHRoZXJlCj4gKyAqIGFyZSBubyBsb25nZXIgYW55IHVzZXJzLgo+ICsgKi8KPiArc3RhdGlj IHZvaWQgcHJ1c3NfaW50Y191bm1hcChzdHJ1Y3QgcHJ1c3NfaW50Y19kb21haW4gKmRvbWFpbiwg dW5zaWduZWQKPiBsb25nIGh3aXJxKQo+ICt7Cj4gK8KgwqDCoCBzdHJ1Y3QgcHJ1c3NfaW50YyAq aW50YyA9IGRvbWFpbi0+aW50YzsKPiArwqDCoMKgIHN0cnVjdCBkZXZpY2UqIGRldiA9IGludGMt PmlycWNoaXAtPnBhcmVudF9kZXZpY2U7Cj4gK8KgwqDCoCB1OCBjaCwgaG9zdDsKPiArCj4gK8Kg wqDCoCBpZiAoaHdpcnEgPj0gTUFYX1BSVV9TWVNfRVZFTlRTKQo+ICvCoMKgwqDCoMKgwqDCoCBy ZXR1cm47Cj4gKwo+ICvCoMKgwqAgbXV0ZXhfbG9jaygmaW50Yy0+bG9jayk7Cj4gKwo+ICvCoMKg wqAgY2ggPSBpbnRjLT5ldmVudF9jaGFubmVsW2h3aXJxXS52YWx1ZTsKPiArwqDCoMKgIGhvc3Qg PSBpbnRjLT5jaGFubmVsX2hvc3RbY2hdLnZhbHVlOwo+ICsKPiArwqDCoMKgIGlmICgtLWludGMt PmNoYW5uZWxfaG9zdFtjaF0ucmVmX2NvdW50ID09IDApIHsKPiArwqDCoMKgwqDCoMKgwqAgLyog ZGlzYWJsZSBob3N0IGludGVycnVwdHMgKi8KPiArwqDCoMKgwqDCoMKgwqAgcHJ1c3NfaW50Y193 cml0ZV9yZWcoaW50YywgUFJVX0lOVENfSElESVNSLCBob3N0KTsKPiArwqDCoMKgIH0KPiArCj4g K8KgwqDCoCBpZiAoLS1pbnRjLT5ldmVudF9jaGFubmVsW2h3aXJxXS5yZWZfY291bnQgPT0gMCkg ewo+ICvCoMKgwqDCoMKgwqDCoCAvKiBkaXNhYmxlIHN5c3RlbSBldmVudHMgKi8KPiArwqDCoMKg wqDCoMKgwqAgcHJ1c3NfaW50Y193cml0ZV9yZWcoaW50YywgUFJVX0lOVENfRUlDUiwgaHdpcnEp Owo+ICvCoMKgwqDCoMKgwqDCoCAvKiBjbGVhciBhbnkgcGVuZGluZyBzdGF0dXMgKi8KPiArwqDC oMKgwqDCoMKgwqAgcHJ1c3NfaW50Y193cml0ZV9yZWcoaW50YywgUFJVX0lOVENfU0lDUiwgaHdp cnEpOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIGlmIChpbnRjLT5oYXNfZXZ0c2VsKQo+ICvC oMKgwqDCoMKgwqDCoCBpbnRjLT5ldnRzZWwucmVmX2NvdW50LS07Cj4gKwo+ICvCoMKgwqAgZGV2 X2luZm8oZGV2LCAidW5tYXBwZWQgc3lzdGVtX2V2ZW50ID0gJWx1IGNoYW5uZWwgPSAlZCBob3N0 ID0gJWRcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqAgaHdpcnEsIGNoLCBob3N0KTsKPiArCj4gK8Kg wqDCoCBtdXRleF91bmxvY2soJmludGMtPmxvY2spOwo+ICt9Cj4gKwo+IMKgc3RhdGljIHZvaWQg cHJ1c3NfaW50Y19pbml0KHN0cnVjdCBwcnVzc19pbnRjICppbnRjKQo+IMKgewo+IMKgwqDCoMKg IGludCBpOwo+IEBAIC0xOTgsMTAgKzQzNiw4MyBAQCBzdGF0aWMgaW50IHBydXNzX2ludGNfaXJx X3NldF9pcnFjaGlwX3N0YXRlKHN0cnVjdAo+IGlycV9kYXRhICpkYXRhLAo+IMKgwqDCoMKgIHJl dHVybiBwcnVzc19pbnRjX2NoZWNrX3dyaXRlKGludGMsIFBSVV9JTlRDX1NJQ1IsIGRhdGEtPmh3 aXJxKTsKPiDCoH0KPiDCoAo+ICtzdGF0aWMgaW50IHBydXNzX2ludGNfaXJxX2RvbWFpbl9zZWxl Y3Qoc3RydWN0IGlycV9kb21haW4gKmQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCBpcnFfZndzcGVjICpmd3NwZWMsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0gaXJxX2RvbWFpbl9idXNfdG9rZW4gYnVzX3Rva2Vu KQo+ICt7Cj4gK8KgwqDCoCBzdHJ1Y3QgcHJ1c3NfaW50Y19kb21haW4gKmRvbWFpbiA9IGQtPmhv c3RfZGF0YTsKPiArwqDCoMKgIGludCBudW1fY2VsbHMgPSBkb21haW4tPmludGMtPmhhc19ldnRz ZWwgPyA1IDogNDsKPiArwqDCoMKgIHUzMiBkb21haW5faWQ7Cj4gKwo+ICvCoMKgwqAgaWYgKCFm d3NwZWMgfHwgZndzcGVjLT5md25vZGUgIT0gZG9tYWluLT5kb21haW4tPmZ3bm9kZSkKPiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4gKwo+ICvCoMKgwqAgaWYgKGJ1c190b2tlbiAhPSBET01B SU5fQlVTX0FOWSAmJiBidXNfdG9rZW4gIT0KPiBkb21haW4tPmRvbWFpbi0+YnVzX3Rva2VuKQo+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPiArCj4gK8KgwqDCoCBpZiAoV0FSTl9PTl9PTkNF KGZ3c3BlYy0+cGFyYW1fY291bnQgIT0gbnVtX2NlbGxzKSkKPiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIDA7Cj4gKwo+ICvCoMKgwqAgZG9tYWluX2lkID0gZndzcGVjLT5wYXJhbVtmd3NwZWMtPnBh cmFtX2NvdW50IC0gMV07Cj4gK8KgwqDCoCBpZiAoZG9tYWluX2lkICE9IGRvbWFpbi0+aWQpCj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+ICsKPiArwqDCoMKgIHJldHVybiAxOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50Cj4gK3BydXNzX2ludGNfaXJxX2RvbWFpbl94bGF0ZShzdHJ1Y3QgaXJx X2RvbWFpbiAqZCwgc3RydWN0IGRldmljZV9ub2RlCj4gKm5vZGUsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjb25zdCB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXpl LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyAqb3V0X2h3 aXJxLCB1bnNpZ25lZCBpbnQgKm91dF90eXBlKQo+ICt7Cj4gK8KgwqDCoCBzdHJ1Y3QgcHJ1c3Nf aW50Y19kb21haW4gKmRvbWFpbiA9IGQtPmhvc3RfZGF0YTsKPiArwqDCoMKgIHN0cnVjdCBwcnVz c19pbnRjICppbnRjID0gZG9tYWluLT5pbnRjOwo+ICvCoMKgwqAgaW50IG51bV9jZWxscyA9IGlu dGMtPmhhc19ldnRzZWwgPyA1IDogNDsKPiArwqDCoMKgIHUzMiBzeXNfZXZlbnQsIGNoYW5uZWws IGhvc3QsIGRvbWFpbl9pZDsKPiArwqDCoMKgIHUzMiBldnRzZWwgPSAwOwo+ICsKPiArwqDCoMKg IGlmIChXQVJOX09OX09OQ0UoaW50c2l6ZSAhPSBudW1fY2VsbHMpKQo+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gLUVJTlZBTDsKPiArCj4gK8KgwqDCoCBzeXNfZXZlbnQgPSBpbnRzcGVjWzBdOwo+ ICvCoMKgwqAgaWYgKHN5c19ldmVudCA+PSBNQVhfUFJVX1NZU19FVkVOVFMpCj4gK8KgwqDCoMKg wqDCoMKgIHJldHVybiAtRUlOVkFMOwo+ICsKPiArwqDCoMKgIGlmIChpbnRjLT5oYXNfZXZ0c2Vs KQo+ICvCoMKgwqDCoMKgwqDCoCBldnRzZWwgPSBpbnRzcGVjWzFdOwo+ICsKPiArwqDCoMKgIGNo YW5uZWwgPSBpbnRzcGVjW2ludHNpemUgLSAzXTsKPiArwqDCoMKgIGlmIChjaGFubmVsID49IE1B WF9QUlVfQ0hBTk5FTFMpCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+ICsKPiAr wqDCoMKgIGhvc3QgPSBpbnRzcGVjW2ludHNpemUgLSAyXTsKPiArwqDCoMKgIGlmIChob3N0ID49 IE1BWF9QUlVfSE9TVF9JTlQpCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+ICsK PiArwqDCoMKgIGRvbWFpbl9pZCA9IGludHNwZWNbaW50c2l6ZSAtIDFdOwo+ICvCoMKgwqAgaWYg KGRvbWFpbl9pZCAhPSBkb21haW4tPmlkKQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZB TDsKPiArCj4gK8KgwqDCoCBkb21haW4tPmh3aXJxX2RhdGFbc3lzX2V2ZW50XS5ldnRzZWwgPSBl dnRzZWw7Cj4gK8KgwqDCoCBkb21haW4tPmh3aXJxX2RhdGFbc3lzX2V2ZW50XS5jaGFubmVsID0g Y2hhbm5lbDsKPiArwqDCoMKgIGRvbWFpbi0+aHdpcnFfZGF0YVtzeXNfZXZlbnRdLmhvc3QgPSBo b3N0Owo+ICsKPiArwqDCoMKgICpvdXRfaHdpcnEgPSBzeXNfZXZlbnQ7Cj4gK8KgwqDCoCAqb3V0 X3R5cGUgPSBJUlFfVFlQRV9OT05FOwo+ICsKPiArwqDCoMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ IMKgc3RhdGljIGludCBwcnVzc19pbnRjX2lycV9kb21haW5fbWFwKHN0cnVjdCBpcnFfZG9tYWlu ICpkLCB1bnNpZ25lZCBpbnQKPiB2aXJxLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpcnFfaHdfbnVtYmVyX3QgaHcpCj4gwqB7Cj4gLcKgwqDCoCBzdHJ1Y3Qg cHJ1c3NfaW50YyAqaW50YyA9IGQtPmhvc3RfZGF0YTsKPiArwqDCoMKgIHN0cnVjdCBwcnVzc19p bnRjX2RvbWFpbiAqZG9tYWluID0gZC0+aG9zdF9kYXRhOwo+ICvCoMKgwqAgc3RydWN0IHBydXNz X2ludGMgKmludGMgPSBkb21haW4tPmludGM7Cj4gK8KgwqDCoCBpbnQgZXJyOwo+ICsKPiArwqDC oMKgIGVyciA9IHBydXNzX2ludGNfbWFwKGRvbWFpbiwgaHcpOwo+ICvCoMKgwqAgaWYgKGVyciA8 IDApCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBlcnI7Cj4gwqAKPiDCoMKgwqDCoCBpcnFfc2V0 X2NoaXBfZGF0YSh2aXJxLCBpbnRjKTsKPiDCoMKgwqDCoCBpcnFfc2V0X2NoaXBfYW5kX2hhbmRs ZXIodmlycSwgaW50Yy0+aXJxY2hpcCwgaGFuZGxlX2xldmVsX2lycSk7Cj4gQEAgLTIxMSwxMiAr NTIyLDE3IEBAIHN0YXRpYyBpbnQgcHJ1c3NfaW50Y19pcnFfZG9tYWluX21hcChzdHJ1Y3QKPiBp cnFfZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgdmlycSwKPiDCoAo+IMKgc3RhdGljIHZvaWQgcHJ1 c3NfaW50Y19pcnFfZG9tYWluX3VubWFwKHN0cnVjdCBpcnFfZG9tYWluICpkLCB1bnNpZ25lZAo+ IGludCB2aXJxKQo+IMKgewo+ICvCoMKgwqAgc3RydWN0IHBydXNzX2ludGNfZG9tYWluICpkb21h aW4gPSBkLT5ob3N0X2RhdGE7Cj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nIGh3aXJxID0gaXJxZF90 b19od2lycShpcnFfZ2V0X2lycV9kYXRhKHZpcnEpKTsKPiArCj4gwqDCoMKgwqAgaXJxX3NldF9j aGlwX2FuZF9oYW5kbGVyKHZpcnEsIE5VTEwsIE5VTEwpOwo+IMKgwqDCoMKgIGlycV9zZXRfY2hp cF9kYXRhKHZpcnEsIE5VTEwpOwo+ICvCoMKgwqAgcHJ1c3NfaW50Y191bm1hcChkb21haW4sIGh3 aXJxKTsKPiDCoH0KPiDCoAo+IMKgc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBw cnVzc19pbnRjX2lycV9kb21haW5fb3BzID0gewo+IC3CoMKgwqAgLnhsYXRlwqDCoMKgID0gaXJx X2RvbWFpbl94bGF0ZV9vbmVjZWxsLAo+ICvCoMKgwqAgLnNlbGVjdMKgwqDCoCA9IHBydXNzX2lu dGNfaXJxX2RvbWFpbl9zZWxlY3QsCj4gK8KgwqDCoCAueGxhdGXCoMKgwqAgPSBwcnVzc19pbnRj X2lycV9kb21haW5feGxhdGUsCj4gwqDCoMKgwqAgLm1hcMKgwqDCoCA9IHBydXNzX2ludGNfaXJx X2RvbWFpbl9tYXAsCj4gwqDCoMKgwqAgLnVubWFwwqDCoMKgID0gcHJ1c3NfaW50Y19pcnFfZG9t YWluX3VubWFwLAo+IMKgfTsKPiBAQCAtMjQ1LDcgKzU2MSw4IEBAIHN0YXRpYyB2b2lkIHBydXNz X2ludGNfaXJxX2hhbmRsZXIoc3RydWN0IGlycV9kZXNjCj4gKmRlc2MpCj4gwqDCoMKgwqAgaGlw aXIgPSBwcnVzc19pbnRjX3JlYWRfcmVnKGludGMsIFBSVV9JTlRDX0hJUElSKGkpKTsKPiDCoMKg wqDCoCB3aGlsZSAoIShoaXBpciAmIElOVENfSElQSVJfTk9ORV9ISU5UKSkgewo+IMKgwqDCoMKg wqDCoMKgwqAgaHdpcnEgPSBoaXBpciAmIEdFTk1BU0soOSwgMCk7Cj4gLcKgwqDCoMKgwqDCoMKg IHZpcnEgPSBpcnFfbGluZWFyX3Jldm1hcChpbnRjLT5kb21haW4sIGh3aXJxKTsKPiArwqDCoMKg wqDCoMKgwqAgdmlycSA9IGlycV9saW5lYXJfcmV2bWFwKAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGludGMtPmRvbWFpbltUSV9QUlVTU19JTlRDX0RPTUFJTl9NQ1VdLmRvbWFpbiwgaHdpcnEp Owo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoCAvKgo+IMKgwqDCoMKgwqDCoMKgwqDCoCAqIE5PVEU6 IG1hbnVhbGx5IEFDSyBhbnkgc3lzdGVtIGV2ZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEKPiBAQCAt MjcyLDcgKzU4OSw4IEBAIHN0YXRpYyBpbnQgcHJ1c3NfaW50Y19wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlCj4gKnBkZXYpCj4gwqDCoMKgwqAgc3RydWN0IHBydXNzX2ludGMgKmludGM7Cj4g wqDCoMKgwqAgc3RydWN0IHJlc291cmNlICpyZXM7Cj4gwqDCoMKgwqAgc3RydWN0IGlycV9jaGlw ICppcnFjaGlwOwo+IC3CoMKgwqAgaW50IGksIGlycSwgY291bnQ7Cj4gK8KgwqDCoCBpbnQgaSwg ZXJyLCBpcnEsIGNvdW50Owo+ICvCoMKgwqAgdTMyIG51bV9jZWxsczsKPiDCoMKgwqDCoCB1OCB0 ZW1wX2ludHJbTUFYX05VTV9IT1NUX0lSUVNdID0geyAwIH07Cj4gwqAKPiDCoMKgwqDCoCBpbnRj ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCppbnRjKSwgR0ZQX0tFUk5FTCk7Cj4gQEAgLTMy MywxMyArNjQxLDIyIEBAIHN0YXRpYyBpbnQgcHJ1c3NfaW50Y19wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlCj4gKnBkZXYpCj4gwqDCoMKgwqDCoMKgwqDCoCB9Cj4gwqDCoMKgwqAgfQo+IMKg Cj4gK8KgwqDCoCBlcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICIjaW50 ZXJydXB0LWNlbGxzIiwKPiAmbnVtX2NlbGxzKTsKPiArwqDCoMKgIGlmICghZXJyICYmIG51bV9j ZWxscyA9PSA1KQo+ICvCoMKgwqDCoMKgwqDCoCBpbnRjLT5oYXNfZXZ0c2VsID0gdHJ1ZTsKPiAr Cj4gwqDCoMKgwqAgbXV0ZXhfaW5pdCgmaW50Yy0+bG9jayk7Cj4gwqAKPiArwqDCoMKgIHBtX3J1 bnRpbWVfZW5hYmxlKGRldik7Cj4gK8KgwqDCoCBwbV9ydW50aW1lX2dldF9zeW5jKGRldik7Cj4g Kwo+IMKgwqDCoMKgIHBydXNzX2ludGNfaW5pdChpbnRjKTsKPiDCoAo+IMKgwqDCoMKgIGlycWNo aXAgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmlycWNoaXApLCBHRlBfS0VSTkVMKTsKPiAt wqDCoMKgIGlmICghaXJxY2hpcCkKPiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4g K8KgwqDCoCBpZiAoIWlycWNoaXApIHsKPiArwqDCoMKgwqDCoMKgwqAgZXJyID0gLUVOT01FTTsK PiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsX2FsbG9jOwo+ICvCoMKgwqAgfQo+IMKgCj4gwqDC oMKgwqAgaXJxY2hpcC0+aXJxX2FjayA9IHBydXNzX2ludGNfaXJxX2FjazsKPiDCoMKgwqDCoCBp cnFjaGlwLT5pcnFfbWFzayA9IHBydXNzX2ludGNfaXJxX21hc2s7Cj4gQEAgLTMzOCwxNCArNjY1 LDI0IEBAIHN0YXRpYyBpbnQgcHJ1c3NfaW50Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl Cj4gKnBkZXYpCj4gwqDCoMKgwqAgaXJxY2hpcC0+aXJxX3JlbGVhc2VfcmVzb3VyY2VzID0gcHJ1 c3NfaW50Y19pcnFfcmVscmVzOwo+IMKgwqDCoMKgIGlycWNoaXAtPmlycV9nZXRfaXJxY2hpcF9z dGF0ZSA9IHBydXNzX2ludGNfaXJxX2dldF9pcnFjaGlwX3N0YXRlOwo+IMKgwqDCoMKgIGlycWNo aXAtPmlycV9zZXRfaXJxY2hpcF9zdGF0ZSA9IHBydXNzX2ludGNfaXJxX3NldF9pcnFjaGlwX3N0 YXRlOwo+ICvCoMKgwqAgaXJxY2hpcC0+cGFyZW50X2RldmljZSA9IGRldjsKPiDCoMKgwqDCoCBp cnFjaGlwLT5uYW1lID0gZGV2X25hbWUoZGV2KTsKPiDCoMKgwqDCoCBpbnRjLT5pcnFjaGlwID0g aXJxY2hpcDsKPiDCoAo+IC3CoMKgwqAgLyogYWx3YXlzIDY0IGV2ZW50cyAqLwo+IC3CoMKgwqAg aW50Yy0+ZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKGRldi0+b2Zfbm9kZSwgTUFYX1BS VV9TWVNfRVZFTlRTLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgJnBydXNzX2ludGNfaXJxX2RvbWFpbl9vcHMsIGludGMpOwo+IC3CoMKgwqAgaWYg KCFpbnRjLT5kb21haW4pCj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+ICvCoMKg wqAgZm9yIChpID0gMDsgaSA8IE5VTV9USV9QUlVTU19JTlRDX0RPTUFJTjsgaSsrKSB7Cj4gK8Kg wqDCoMKgwqDCoMKgIGludGMtPmRvbWFpbltpXS5pbnRjID0gaW50YzsKPiArwqDCoMKgwqDCoMKg wqAgaW50Yy0+ZG9tYWluW2ldLmlkID0gaTsKPiArwqDCoMKgwqDCoMKgwqAgLyogYWx3YXlzIDY0 IGV2ZW50cyAqLwo+ICvCoMKgwqDCoMKgwqDCoCBpbnRjLT5kb21haW5baV0uZG9tYWluID0gaXJx X2RvbWFpbl9hZGRfbGluZWFyKGRldi0+b2Zfbm9kZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIE1BWF9QUlVfU1lTX0VWRU5UUywgJnBydXNzX2ludGNfaXJxX2RvbWFpbl9vcHMs Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmaW50Yy0+ZG9tYWluW2ldKTsKPiAr wqDCoMKgwqDCoMKgwqAgaWYgKCFpbnRjLT5kb21haW5baV0uZG9tYWluKSB7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgd2hpbGUgKC0taSA+PSAwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaXJxX2RvbWFpbl9yZW1vdmUoaW50Yy0+ZG9tYWluW2ldLmRvbWFpbik7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gLUVOT01FTTsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBnb3RvIGZhaWxfYWxsb2M7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgIH0KPiDC oAo+IMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX0hPU1RfSVJRUzsgaSsrKSB7Cj4g wqDCoMKgwqDCoMKgwqDCoCBpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCBpcnFf bmFtZXNbaV0pOwo+IEBAIC0zNTYsNiArNjkzLDcgQEAgc3RhdGljIGludCBwcnVzc19pbnRjX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UKPiAqcGRldikKPiDCoAo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgInBsYXRmb3JtX2dldF9pcnFfYnluYW1lIGZhaWxlZCBm b3IgJXMgOiAlZFxuIiwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpcnFfbmFt ZXNbaV0sIGlycSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gaXJxOwo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWxfaXJxOwo+IMKgwqDCoMKgwqDCoMKgwqAgfQo+ IMKgCj4gQEAgLTM3MiwxMyArNzEwLDIwIEBAIHN0YXRpYyBpbnQgcHJ1c3NfaW50Y19wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCj4gKnBkZXYpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGlycV9zZXRfY2hhaW5lZF9oYW5kbGVyX2FuZF9kYXRhKGludGMtPmlycXNbaV0sIE5VTEwsCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBOVUxMKTsKPiDCoMKgwqDCoCB9Cj4gLcKgwqDCoCBpcnFfZG9tYWluX3JlbW92ZShpbnRjLT5k b21haW4pOwo+IC3CoMKgwqAgcmV0dXJuIGlycTsKPiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBO VU1fVElfUFJVU1NfSU5UQ19ET01BSU47IGkrKykKPiArwqDCoMKgwqDCoMKgwqAgaXJxX2RvbWFp bl9yZW1vdmUoaW50Yy0+ZG9tYWluW2ldLmRvbWFpbik7Cj4gKwo+ICtmYWlsX2FsbG9jOgo+ICvC oMKgwqAgcG1fcnVudGltZV9wdXQoZGV2KTsKPiArwqDCoMKgIHBtX3J1bnRpbWVfZGlzYWJsZShk ZXYpOwo+ICsKPiArwqDCoMKgIHJldHVybiBlcnI7Cj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyBpbnQg cHJ1c3NfaW50Y19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiDCoHsKPiDC oMKgwqDCoCBzdHJ1Y3QgcHJ1c3NfaW50YyAqaW50YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBk ZXYpOwo+ICvCoMKgwqAgc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiDCoMKgwqDC oCB1bnNpZ25lZCBpbnQgaHdpcnE7Cj4gwqDCoMKgwqAgaW50IGk7Cj4gwqAKPiBAQCAtMzg4LDkg KzczMywxNSBAQCBzdGF0aWMgaW50IHBydXNzX2ludGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UKPiAqcGRldikKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIE5VTEwpOwo+IMKgwqDCoMKgIH0KPiDCoAo+IC3CoMKgwqAgZm9y IChod2lycSA9IDA7IGh3aXJxIDwgTUFYX1BSVV9TWVNfRVZFTlRTOyBod2lycSsrKQo+IC3CoMKg wqDCoMKgwqDCoCBpcnFfZGlzcG9zZV9tYXBwaW5nKGlycV9maW5kX21hcHBpbmcoaW50Yy0+ZG9t YWluLCBod2lycSkpOwo+IC3CoMKgwqAgaXJxX2RvbWFpbl9yZW1vdmUoaW50Yy0+ZG9tYWluKTsK PiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBOVU1fVElfUFJVU1NfSU5UQ19ET01BSU47IGkrKykg ewo+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGh3aXJxID0gMDsgaHdpcnEgPCBNQVhfUFJVX1NZU19F VkVOVFM7IGh3aXJxKyspCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaXJxX2Rpc3Bvc2VfbWFw cGluZyhpcnFfZmluZF9tYXBwaW5nKAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGludGMtPmRvbWFpbltpXS5kb21haW4sIGh3aXJxKSk7Cj4gK8KgwqDC oMKgwqDCoMKgIGlycV9kb21haW5fcmVtb3ZlKGludGMtPmRvbWFpbltpXS5kb21haW4pOwo+ICvC oMKgwqAgfQo+ICsKPiArwqDCoMKgIHBtX3J1bnRpbWVfcHV0KGRldik7Cj4gK8KgwqDCoCBwbV9y dW50aW1lX2Rpc2FibGUoZGV2KTsKPiDCoAo+IMKgwqDCoMKgIHJldHVybiAwOwo+IMKgfQo+IGRp ZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL3RpLXBy dXNzLmgKPiBiL2luY2x1ZGUvZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvdGktcHJ1 c3MuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4zMjZhNjhj MzFiY2UKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9pbnRlcnJ1 cHQtY29udHJvbGxlci90aS1wcnVzcy5oCj4gQEAgLTAsMCArMSwyNyBAQAo+ICsvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQgKi8KPiArLyoKPiArICogVGhpcyBoZWFk ZXIgcHJvdmlkZXMgY29uc3RhbnRzIGZvciB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgUHJvZ3JhbW1h YmxlCj4gKyAqIFJlYWx0aW1lIFVuaXQgU3Vic3lzdGVtIChQUlVTUykgaW50ZXJydXB0IGNvbnRy b2xsZXIuCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfRFRfQklORElOR1NfSU5URVJSVVBUX0NPTlRS T0xMRVJfVElfUFJVU1NfSAo+ICsjZGVmaW5lIF9EVF9CSU5ESU5HU19JTlRFUlJVUFRfQ09OVFJP TExFUl9USV9QUlVTU19ICj4gKwo+ICsvKiBpbnRlcnJ1cHQgc3BlY2lmaWVyIGZvciBvcHRpb25h bCBjZWxsIDEgKi8KPiArCj4gKyNkZWZpbmUgVElfUFJVU1NfSU5UQ19FVlRTRUxfQU5ZwqDCoMKg IDB4ZmZmZmZmZmYKPiArCj4gKy8qIGludGVycnVwdCBzcGVjaWZpZXIgZm9yIGNlbGwgI2ludGVy cnVwdC1jZWxscyAtIDEgKi8KPiArCj4gKy8qIGhvc3QgaW50ZXJydXB0IGlzIGNvbm5lY3RlZCB0 byBQUlUgY29yZXMsIGUuZy4gaG9zdCBldmVudHMgMCBhbmQgMSAqLwo+ICsjZGVmaW5lIFRJX1BS VVNTX0lOVENfRE9NQUlOX1BSVcKgwqDCoCAwCj4gKy8qIGhvc3QgaW50ZXJydXB0IGlzIGNvbm5l Y3RlZCB0byBNQ1UncyBpbnRlcnJ1cHQgY29udHJvbGxlcsKgICovCj4gKyNkZWZpbmUgVElfUFJV U1NfSU5UQ19ET01BSU5fTUNVwqDCoMKgIDEKPiArLyogaG9zdCBpbnRlcnJ1cHQgaXMgY29ubmVj dGVkIHRvIERTUCdzIGludGVycnVwdCBjb250cm9sbGVywqAgKi8KPiArI2RlZmluZSBUSV9QUlVT U19JTlRDX0RPTUFJTl9EU1DCoMKgwqAgMgo+ICsvKiBob3N0IGludGVycnVwdCBpcyBjb25uZWN0 ZWQgdG8gdGhlIGF1eGlsbGFyeSBQUlUgY29yZXPCoCAqLwo+ICsjZGVmaW5lIFRJX1BSVVNTX0lO VENfRE9NQUlOX1JUVV9QUlXCoMKgwqAgMwo+ICsvKiBob3N0IGludGVycnVwdCBpcyBjb25uZWN0 ZWQgdG8gdGhlIHRhc2sgbWFuYWdlcnPCoCAqLwo+ICsjZGVmaW5lIFRJX1BSVVNTX0lOVENfRE9N QUlOX1RBU0vCoMKgwqAgNAo+ICsKPiArI2VuZGlmIC8qIF9EVF9CSU5ESU5HU19JTlRFUlJVUFRf Q09OVFJPTExFUl9USV9QUlVTU19IICovCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJt LWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=