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 EF59DC531FA for ; Fri, 24 Jul 2026 07:28:10 +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:MIME-Version:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Message-Id:Date: References:In-Reply-To:Cc:To:Subject:From:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=jbb6xFfTVpa+/elnHjvvn1J4HOWhGIbgaqSIp507y94=; b=gbGaGw9eEbrP+a UFtBsHLHIi7N7h9TUoh79ZXDCoVYv131zomb+PrKCNz0tJjHpDqr3tXs/E0AMLMs4KBHRmN3mJ4Hn FtN1XtimmOwhIy0dotYUKOFS/qy5SgRSwJJLMEKTmYVBuDyicV+/rMgNhkqU/rvxYDCI1mdz9IfVX EmPeOOq09XW5bw+gUuONuKv/DV/bwWfc4Ml1kAcKY9HIGXEosCCspFK6pIvw5d5f8jE0jjctYMwP3 VvHmxxlbKAbiQn4lR+e6pdBadNB5dWhAdGCRjPxm1AejmuPlE05dE6YCKDbM7sUHs5rpwHsxgbQKo VkRav3RGUOmBNxAKElEw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wnAKC-0000000FheC-3nuP; Fri, 24 Jul 2026 07:28:04 +0000 Received: from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wnAKB-0000000Fhe5-3rRZ for linux-amlogic@lists.infradead.org; Fri, 24 Jul 2026 07:28:03 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 91D55401B8; Fri, 24 Jul 2026 07:28:03 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 057C41F000E9; Fri, 24 Jul 2026 07:28:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784878083; bh=PeSjIIhfQOu8wIrBPMmR+mNqrjWwGrGrXNkHIkBHa8E=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=ouUQZtRlyHoZZwmRdlrtcksIeVchquaeg5gwc/ixBoxzeLVdzjfyb/XNCIErDiWBv +9iPTM62qK0E7ubtS54Sn6UnhR0DVK3mPw9kdkj2Zk4KcKXxZzONDtgsdkdgCjjk/S 9jntAi/RIaHBrlummOyInL/tFLfPnCfqDBfC9z8uN/pTz2AHNc8bQfhbMTloS8tojh pJ+5p24FgbYHWA1x/+LHIPyMCZlKNtsHRCY205diOdRi8kcmUtLATuyZuLjIRQjovh kJPqUYI7QpT7E761B6NBGCbAnZLDi00xFk4lGml9Bynzk9+wuvN8V2Y8PGLNlGeOBe ZX1j71jjVi+FQ== From: sashiko-bot@kernel.org Subject: Re: [PATCH v6 4/6] decoder: Add V4L2 stateless H.264 decoder driver To: "Zhentao Guo" Cc: media-ci@linuxtv.org, conor+dt@kernel.org, robh@kernel.org, devicetree@vger.kernel.org, neil.armstrong@linaro.org, linux-amlogic@lists.infradead.org In-Reply-To: <20260724-b4-s4-vdec-upstream-v6-4-6072a7ee7428@amlogic.com> References: <20260724-b4-s4-vdec-upstream-v6-0-6072a7ee7428@amlogic.com> <20260724-b4-s4-vdec-upstream-v6-4-6072a7ee7428@amlogic.com> Date: Fri, 24 Jul 2026 07:28:02 +0000 Message-Id: <20260724072803.057C41F000E9@smtp.kernel.org> X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MzEgcG90ZW50aWFsIGlzc3VlKHMpIHRvIGNvbnNpZGVyOgotIFtDcml0aWNhbF0gQXN5bW1ldHJp Y2FsIHN0b3Avc3RhcnQgc3RyZWFtaW5nIHRyaWdnZXJzIGEgVXNlLUFmdGVyLUZyZWUgYW5kIE5V TEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiB0aGUgZGVjb2RlciBjb250ZXh0LgotIFtDcml0aWNh bF0gVW52YWxpZGF0ZWQgcmVmZXJlbmNlIGxpc3Qgc2l6ZXMgYW5kIFBQUyBwYXJhbWV0ZXJzIGxl YWQgdG8gbWFzc2l2ZSBoZWFwL2FycmF5IGJ1ZmZlciBvdmVyZmxvd3MuCi0gW0NyaXRpY2FsXSBH bG9iYWwgY29udGV4dCBwb2ludGVycyBhcmUgdW5jb25kaXRpb25hbGx5IG92ZXJ3cml0dGVuIG9u IG9wZW4oKSwgY29ycnVwdGluZyBzdGF0ZSBmb3IgY29uY3VycmVudCB1c2Vycy4KLSBbQ3JpdGlj YWxdIE11bHRpLXBsYW5hciBjYXB0dXJlIGZvcm1hdHMgKGUuZy4gTlYxMk0pIGFyZSBicm9rZW4g YmVjYXVzZSBgcGxhbmVfbnVtYCBpcyBoYXJkY29kZWQsIGNhdXNpbmcgc2V2ZXJlIERNQSBtZW1v cnkgY29ycnVwdGlvbi4KLSBbQ3JpdGljYWxdIFRoZSBkcml2ZXIgZG9lcyBub3QgdmFsaWRhdGUg dGhlIHZpZGVvIGRpbWVuc2lvbnMgc3BlY2lmaWVkIGluIHRoZSBTUFMgYWdhaW5zdCB0aGUgYWN0 dWFsIFY0TDIgZGVzdGluYXRpb24gYnVmZmVyIHNpemUsIGFsbG93aW5nIGFyYml0cmFyeSBETUEg b3V0LW9mLWJvdW5kcyB3cml0ZXMuCi0gW0NyaXRpY2FsXSBDb2xvY2F0aW9uIGJ1ZmZlciBwaHlz aWNhbCBhZGRyZXNzIGNhbGN1bGF0aW9ucyBzdWZmZXIgZnJvbSBpbnRlZ2VyIHRydW5jYXRpb25z IGFuZCBvdmVyZmxvd3MsIGJ5cGFzc2luZyBib3VuZHMgY2hlY2tzIGFuZCBjYXVzaW5nIGFyYml0 cmFyeSBETUEgbWVtb3J5IGNvcnJ1cHRpb24uCi0gW0hpZ2hdIEluY29ycmVjdCBlcnJvciBjaGVj a2luZyBmb3IgYG9mX3BhcnNlX3BoYW5kbGUoKWAgbGVhZHMgdG8gYSBOVUxMIHBvaW50ZXIgZGVy ZWZlcmVuY2UgYW5kIHdyb25nIGVycm9yIGNvZGUuCi0gW0hpZ2hdIGBTX0ZNVGAgb24gdGhlIE9V VFBVVCBxdWV1ZSBleHBsaWNpdGx5IGNsb2JiZXJzIHRoZSBDQVBUVVJFIHF1ZXVlJ3MgcGl4ZWwg Zm9ybWF0LgotIFtIaWdoXSBIYXJkd2FyZSByZXNvdXJjZXMgYW5kIFBNIGRvbWFpbnMgYXJlIHBl cm1hbmVudGx5IGxlYWtlZCBpbiBwcm9iZSBlcnJvciBwYXRocy4KLSBbSGlnaF0gVGhlIGBkb3Ng IGNsb2NrIGlzIHJlcXVlc3RlZCBidXQgbmV2ZXIgcHJlcGFyZWQgb3IgZW5hYmxlZC4KLSBbSGln aF0gYGNvcHlfcmVmX2xpc3RgIGluY29ycmVjdGx5IGR1cGxpY2F0ZXMgYHJlZl9saXN0MGAgaW50 byBgcmVmX2xpc3QxX3VucmVvcmRlcmVkYC4KLSBbSGlnaF0gTWV0YWRhdGEgY29weWluZyBhbmQg cmVxdWVzdCBjb21wbGV0aW9uIG9jY3VyIGFmdGVyIGJ1ZmZlcnMgYXJlIGhhbmRlZCBiYWNrIHRv IHVzZXJzcGFjZS4KLSBbSGlnaF0gU3luY2hyb25vdXMgYmxvY2tpbmcgaW4gYGRldmljZV9ydW5g IGFsbG93cyBkb3VibGUtZmluaXNoaW5nIG9mIFY0TDIgTTJNIGpvYnMgb24gdGltZW91dC4KLSBb SGlnaF0gTWlzc2luZyBib3VuZHMgY2hlY2sgb24gZmlybXdhcmUgc2l6ZSBjYXVzZXMgaW50ZWdl ciB1bmRlcmZsb3cgZHVyaW5nIGJ1ZmZlciBhbGxvY2F0aW9uLgotIFtIaWdoXSBgVFJZX0ZNVGAg aWdub3JlcyB1c2VyLXJlcXVlc3RlZCBwaXhlbCBmb3JtYXRzLCBkaXJlY3RseSByZXR1cm5pbmcg dGhlIGFjdGl2ZSBjb25maWd1cmF0aW9uLgotIFtIaWdoXSBCeXBhc3NpbmcgY2xvY2sgZW5hYmxp bmcgd2hlbiB0aGUgcG93ZXIgZG9tYWluIGlzIGFjdGl2ZSBicmVha3MgUE0gdXNhZ2UgY291bnRz IGFuZCBjbG9jayBiYWxhbmNpbmcuCi0gW0hpZ2hdIERldmljZSBsaWZldGltZSBtaXNtYXRjaCB3 aXRoIGBkZXZtX2t6YWxsb2NgIGNhdXNlcyBVc2UtQWZ0ZXItRnJlZSBvbiBkcml2ZXIgdW5iaW5k LgotIFtIaWdoXSBGYWlsZWQgYWxsb2NhdGlvbnMgb3ZlcndyaXRlIGVycm9yIHJlc3VsdHMsIGFu ZCBhbHdheXMtdHJ1ZSBgdThgIGNoZWNrcyBjYXVzZSB1bm93bmVkIGNhbnZhcyByZWxlYXNlLgot IFtIaWdoXSBIYXJkd2FyZSBzdHJlYW0gcGFyc2VyIGlzIHByb2dyYW1tZWQgdG8gcmVhZCAxMDI0 IGJ5dGVzIHBhc3QgdGhlIHVzZXItc3VwcGxpZWQgcGF5bG9hZCwgY2F1c2luZyBPT0IgRE1BIHJl YWRzLgotIFtIaWdoXSBJRFIgcGljdHVyZSBjaGVja3MgZXJyb25lb3VzbHkgdXNlIHN0cmljdCBl cXVhbGl0eSBhZ2FpbnN0IGEgYml0bWFzayBmaWVsZC4KLSBbSGlnaF0gU3B1cmlvdXMgaGFyZHdh cmUgaW50ZXJydXB0cyByZXN1bHQgaW4gYSBndWFyYW50ZWVkIGtlcm5lbCBjcmFzaCBieSBkZXJl ZmVyZW5jaW5nIGEgTlVMTCBgY3Vycl9jdHhgLgotIFtIaWdoXSBUaGUgRFBCIHByZXBhcmF0aW9u IGxvb3AgaW5jb3JyZWN0bHkgdGVybWluYXRlcyBlYXJseSBpZiBhIHNwYXJzZSBlbnRyeSBpcyBl bmNvdW50ZXJlZC4KLSBbSGlnaF0gRmFpbGluZyB0byByZXR1cm4gcXVldWVkIGJ1ZmZlcnMgd2hl biBgc3RhcnRfc3RyZWFtaW5nYCBmYWlscyBjYXVzZXMgdmlkZW9idWYyIHdhcm5pbmdzIGFuZCBs ZWFrcy4KLSBbSGlnaF0gTWlzc2luZyB2aWRlb191bnJlZ2lzdGVyX2RldmljZSgpIG9uIHByb2Jl IGVycm9yIHBhdGggbGVhdmVzIGEgZGFuZ2xpbmcgY2hhcmFjdGVyIGRldmljZS4KLSBbSGlnaF0g UHJlbWF0dXJlIGpvYiBmaW5pc2ggbm90aWZpY2F0aW9uIGNhdXNlcyBhIHJhY2UgYmV0d2VlbiBg YW1sX3N0b3BfdmRlY19od2AgYW5kIGBhbWxfc3RhcnRfdmRlY19od2AuCi0gW0hpZ2hdIE1pc3Np bmcgam9iIGZpbmlzaCBub3RpZmljYXRpb24gaW4gdGhlIElTUiBlcnJvciBwYXRoIHBlcm1hbmVu dGx5IGhhbmdzIHRoZSB2NGwyX20ybSBxdWV1ZS4KLSBbSGlnaF0gYEVSUl9QVFJgIHN0b3JlZCBp biBwb3dlciBkb21haW4gYXJyYXkgY2F1c2VzIGEga2VybmVsIHBhbmljIHdoZW4gZGVyZWZlcmVu Y2VkIGJ5IFBNIEFQSS4KLSBbSGlnaF0gYHJlYWRfcG9sbF90aW1lb3V0X2F0b21pY2AgdXNlZCB3 aXRoIGxhcmdlIHRpbWVvdXRzIHN0YWxscyB0aGUgQ1BVLgotIFtNZWRpdW1dIFNlbGVjdGluZyBN RVNPTl9TTSB3aXRob3V0IHNhdGlzZnlpbmcgaXRzIGRlcGVuZGVuY2llcyBjYXVzZXMgdW5tZXQg ZGVwZW5kZW5jeSB3YXJuaW5ncy4KLSBbTWVkaXVtXSBGYWlsdXJlIGR1cmluZyBwb3dlciBkb21h aW4gaW5pdGlhbGl6YXRpb24gbGVha3Mgc3VjY2Vzc2Z1bGx5IGF0dGFjaGVkIGRvbWFpbnMuCi0g W01lZGl1bV0gYGgyNjRfY3R4YCBpcyBsZWFrZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIGZhaWx1 cmUuCi0tCgotLS0gUGF0Y2ggWzRdOiBbUEFUQ0ggdjYgNC82XSBkZWNvZGVyOiBBZGQgVjRMMiBz dGF0ZWxlc3MgSC4yNjQgZGVjb2RlciBkcml2ZXIgLS0tCmNvbW1pdCBhZmM2NWZmMGMxODY3MWEx OWZiYTUzY2I3YTVkNWE2NzE0MjBjMmQ2CkF1dGhvcjogWmhlbnRhbyBHdW8gPHpoZW50YW8uZ3Vv QGFtbG9naWMuY29tPgoKZGVjb2RlcjogQWRkIFY0TDIgc3RhdGVsZXNzIEguMjY0IGRlY29kZXIg ZHJpdmVyCgpBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBWNEwyIHN0YXRlbGVzcyB2aWRlbyBkZWNv ZGVyIGRyaXZlciBvbiBBbWxvZ2ljIFM0CihTODA1WDIpIHBsYXRmb3JtLiBJbiBwaGFzZSAxLCBp dCBzdXBwb3J0cyA4Yml0IEguMjY0IGJpdHN0cmVhbXMgZGVjb2RpbmcuIApDdXJyZW50bHkgb25s eSBwcm9ncmVzc2l2ZSBzdHJlYW1zIGFyZSBzdXBwb3J0ZWQuCgo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvS2NvbmZpZwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMDAwMDAwMC4uZDM5Mjk2N2M3NzQzNgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9LY29uZmlnCj4gQEAgLTAsMCArMSwx OCBAQAo+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIE1JVCkK PiArCj4gK2NvbmZpZyBWSURFT19BTUxPR0lDX1ZERUMKPiArICAgIHRyaXN0YXRlICJBbWxvZ2lj IFZpZGVvIERlY29kZXIgRHJpdmVyIgo+ICsgICAgZGVwZW5kcyBvbiBBUkNIX01FU09OIHx8IENP TVBJTEVfVEVTVAo+ICsgICAgZGVwZW5kcyBvbiBWSURFT19ERVYKPiArICAgIGRlcGVuZHMgb24g VjRMX01FTTJNRU1fRFJJVkVSUwo+ICsgICAgZGVwZW5kcyBvbiBURUUKPiArICAgIHNlbGVjdCBW SURFT0JVRjJfRE1BX0NPTlRJRwo+ICsgICAgc2VsZWN0IFY0TDJfSDI2NAo+ICsgICAgc2VsZWN0 IFY0TDJfTUVNMk1FTV9ERVYKPiArICAgIHNlbGVjdCBNRVNPTl9DQU5WQVMKPiArICAgIHNlbGVj dCBNRVNPTl9TTQoKW1NldmVyaXR5OiBNZWRpdW1dCkRvZXMgc2VsZWN0aW5nIE1FU09OX1NNIGhl cmUgYnlwYXNzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkZXBlbmRlbmNpZXM/CklmIHRoaXMgZHJp dmVyIGlzIGJ1aWx0IHdpdGggQ09NUElMRV9URVNUIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBsYWNr IHRoZQpkZXBlbmRlbmNpZXMgZm9yIE1FU09OX1NNLCBpdCBjb3VsZCB0cmlnZ2VyIEtjb25maWcg dW5tZXQgZGVwZW5kZW5jeSB3YXJuaW5ncwphbmQgYnVpbGQgZmFpbHVyZXMuCgo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9hbWxfdmRlYy5jIGIvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvYW1sX3ZkZWMuYwo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwMC4uZDRkY2QwMTgwZDJkMAo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9hbWxfdmRl Yy5jCj4gQEAgLTAsMCArMSw3MzYgQEAKClsgLi4uIF0KCj4gK3N0YXRpYyB2b2lkIG0ybW9wc192 ZGVjX2RldmljZV9ydW4odm9pZCAqbTJtX3ByaXYpCj4gK3sKPiArCXN0cnVjdCBhbWxfdmRlY19j dHggKmN0eCA9IG0ybV9wcml2Owo+ICsJc3RydWN0IGFtbF92ZGVjX2RldiAqZGV2ID0gY3R4LT5k ZXY7Cj4gKwlzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICpzcmNfYnVmLCAqZHN0X2J1ZjsKPiArCXN0 cnVjdCBtZWRpYV9yZXF1ZXN0ICpzcmNfcmVxOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJc3Jj X2J1ZiA9IHY0bDJfbTJtX25leHRfc3JjX2J1ZihjdHgtPmZoLm0ybV9jdHgpOwo+ICsJZHN0X2J1 ZiA9IHY0bDJfbTJtX25leHRfZHN0X2J1ZihjdHgtPmZoLm0ybV9jdHgpOwoKWyAuLi4gXQoKPiAr CXJldCA9IGN0eC0+Y29kZWNfb3BzLT5ydW4oY3R4KTsKPiArCj4gKwl2NGwyX20ybV9idWZfY29w eV9tZXRhZGF0YShzcmNfYnVmLCBkc3RfYnVmKTsKPiArCWlmIChzcmNfcmVxKQo+ICsJCXY0bDJf Y3RybF9yZXF1ZXN0X2NvbXBsZXRlKHNyY19yZXEsICZjdHgtPmN0cmxfaGFuZGxlcik7CgpbU2V2 ZXJpdHk6IEhpZ2hdCkNvdWxkIHY0bDJfbTJtX2J1Zl9jb3B5X21ldGFkYXRhIGFuZCB2NGwyX2N0 cmxfcmVxdWVzdF9jb21wbGV0ZSBiZSBhY2Nlc3NpbmcKYnVmZmVycyBhZnRlciB0aGV5IGhhdmUg YmVlbiByZXR1cm5lZCB0byB1c2Vyc3BhY2U/CgpUaGUgc3luY2hyb25vdXMgd2FpdF9ldmVudCBp biB0aGUgcnVuIGNhbGxiYWNrIGNvbXBsZXRlcyB3aGVuIHRoZSBoYXJkd2FyZSBJU1IKY2FsbHMg djRsMl9tMm1fYnVmX2RvbmVfYW5kX2pvYl9maW5pc2guIEJ5IHRoZSB0aW1lIHJ1biByZXR1cm5z IGhlcmUsIHRoZQpidWZmZXJzIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIHJldHVybmVkIHRvIHVz ZXJzcGFjZSBhbmQgcG90ZW50aWFsbHkgdW5tYXBwZWQKb3IgZnJlZWQsIGxlYWRpbmcgdG8gYSB1 c2UtYWZ0ZXItZnJlZS4KClsgLi4uIF0KCj4gK3N0YXRpYyBpbnQgdmRlY190cnlfZm10X21wKHN0 cnVjdCBhbWxfdmRlY19jdHggKmN0eCwgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUsCj4gKwkJCSAg IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXRfbXBsYW5lICpwaXhfbXApCj4gK3sKPiArCXN0cnVjdCBh bWxfdmlkZW9fZm10ICpkZWNfZm10Owo+ICsJaW50IGksIGFsaWduOwo+ICsKPiArCWlmIChWNEwy X1RZUEVfSVNfT1VUUFVUKHR5cGUpKQo+ICsJCWRlY19mbXQgPSAmY3R4LT5kZWNfZm10W0FNTF9G TVRfU1JDXTsKPiArCWVsc2UKPiArCQlkZWNfZm10ID0gJmN0eC0+ZGVjX2ZtdFtBTUxfRk1UX0RT VF07Cj4gKwo+ICsJcGl4X21wLT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKPiArCj4gKwlpZiAo VjRMMl9UWVBFX0lTX09VVFBVVCh0eXBlKSkgewo+ICsJCXBpeF9tcC0+bnVtX3BsYW5lcyA9IGRl Y19mbXQtPm51bV9wbGFuZXM7Cj4gKwkJcGl4X21wLT5waXhlbGZvcm1hdCA9IGRlY19mbXQtPmZv dXJjYzsKCltTZXZlcml0eTogSGlnaF0KRG9lcyB0aGlzIHVuY29uZGl0aW9uYWxseSBvdmVyd3Jp dGUgdGhlIHVzZXItcmVxdWVzdGVkIHBpeGVsIGZvcm1hdCB3aXRoIHRoZQpjdXJyZW50IGFjdGl2 ZSBmb3JtYXQ/IFRoaXMgcHJldmVudHMgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBmcm9tIHF1ZXJ5 aW5nCnN1cHBvcnRlZCBmb3JtYXRzIHVzaW5nIFZJRElPQ19UUllfRk1UIHNpbmNlIHRoZWlyIHJl cXVlc3RlZCBmb3JtYXQgaXMKYWdncmVzc2l2ZWx5IG92ZXJyaWRkZW4uCgpbIC4uLiBdCgo+ICtz dGF0aWMgaW50IHZkZWNfc19mbXRfb3V0cHV0KHN0cnVjdCBhbWxfdmRlY19jdHggKmN0eCwgc3Ry dWN0IHY0bDJfZm9ybWF0ICpmKQo+ICt7Cj4gKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0X21wbGFu ZSAqcGl4X21wID0gJmYtPmZtdC5waXhfbXA7Cj4gKwljb25zdCBzdHJ1Y3QgYW1sX3ZpZGVvX2Zt dCAqb3V0X2ZtdDsKPiArCXN0cnVjdCB2YjJfcXVldWUgKnZxOwo+ICsJaW50IHJldDsKPiArCj4g Kwl2cSA9IHY0bDJfbTJtX2dldF92cShjdHgtPm0ybV9jdHgsIFY0TDJfQlVGX1RZUEVfVklERU9f T1VUUFVUX01QTEFORSk7Cj4gKwlpZiAodmIyX2lzX2J1c3kodnEpICYmCj4gKwkgICAgcGl4X21w LT5waXhlbGZvcm1hdCAhPSBjdHgtPnBpeF9mbXRbQU1MX0ZNVF9TUkNdLnBpeGVsZm9ybWF0KQo+ ICsJCXJldHVybiAtRUJVU1k7Cj4gKwo+ICsJb3V0X2ZtdCA9IGFtbF92ZGVjX2dldF92aWRlb19m bXQoY3R4LT5kZXYsIHBpeF9tcC0+cGl4ZWxmb3JtYXQpOwo+ICsJaWYgKG91dF9mbXQpCj4gKwkJ Y3R4LT5kZWNfZm10W0FNTF9GTVRfU1JDXSA9ICpvdXRfZm10Owo+ICsJZWxzZQo+ICsJCWRldl9k YmcoJmN0eC0+ZGV2LT5wbGF0X2Rldi0+ZGV2LAo+ICsJCQkiJXMgZm10ICVkIG5vdCBzdXBwb3J0 ZWQsIHVzZSBkZWZhdWx0XG4iLCBfX2Z1bmNfXywKPiArCQkJcGl4X21wLT5waXhlbGZvcm1hdCk7 Cj4gKwo+ICsJcmV0ID0gdmRlY190cnlfZm10X21wKGN0eCwgZi0+dHlwZSwgcGl4X21wKTsKPiAr CXNldF9waWNfaW5mbyhjdHgsIHBpeF9tcCwgZi0+dHlwZSk7Cj4gKwo+ICsJY3R4LT5waXhfZm10 W0FNTF9GTVRfU1JDXSA9ICpwaXhfbXA7Cj4gKwljdHgtPnBpeF9mbXRbQU1MX0ZNVF9EU1RdID0g KnBpeF9tcDsKCltTZXZlcml0eTogSGlnaF0KQ2FuIHRoaXMgU19GTVQgY2FsbCBvbiB0aGUgT1VU UFVUIHF1ZXVlIGNvcnJ1cHQgdGhlIENBUFRVUkUgcXVldWUncyBzdGF0ZT8KQnkgZGlyZWN0bHkg YXNzaWduaW5nIHRvIGN0eC0+cGl4X2ZtdFtBTUxfRk1UX0RTVF0sIGNvbmZpZ3VyaW5nIHRoZSBi aXRzdHJlYW0KZm9ybWF0IGNsb2JiZXJzIHRoZSByYXcgdW5jb21wcmVzc2VkIGZvcm1hdCBhbHJl YWR5IGNvbmZpZ3VyZWQgb24gdGhlIENBUFRVUkUKcXVldWUuCgpbIC4uLiBdCgo+ICtzdGF0aWMg aW50IHZiMm9wc192ZGVjX3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICpxLCB1bnNp Z25lZCBpbnQgY291bnQpCj4gK3sKPiArCXN0cnVjdCBhbWxfdmRlY19jdHggKmN0eCA9IHZiMl9n ZXRfZHJ2X3ByaXYocSk7Cj4gKwo+ICsJaWYgKFY0TDJfVFlQRV9JU19PVVRQVVQocS0+dHlwZSkp IHsKPiArCQljdHgtPmlzX291dHB1dF9zdHJlYW1vbiA9IDE7Cj4gKwkJaWYgKGFtbF92ZGVjX2lu aXRfZGVjX2luc3QoY3R4KSA8IDApCj4gKwkJCXJldHVybiAtRUlOVkFMOwoKW1NldmVyaXR5OiBI aWdoXQpTaG91bGQgdGhpcyBmYWlsdXJlIHBhdGggcmV0dXJuIHRoZSBxdWV1ZWQgYnVmZmVycyB0 byB0aGUgZnJhbWV3b3JrPwpXaGVuIHN0YXJ0X3N0cmVhbWluZyBmYWlscywgdGhlIHZpZGVvYnVm MiBmcmFtZXdvcmsgcmVxdWlyZXMgdGhlIGRyaXZlciB0bwpyZXR1cm4gYWxsIHF1ZXVlZCBidWZm ZXJzIChlLmcuIHVzaW5nIHZiMl9idWZmZXJfZG9uZSB3aXRoClZCMl9CVUZfU1RBVEVfUVVFVUVE KSwgb3RoZXJ3aXNlIHRoZSBxdWV1ZSBzdGFsbHMgYW5kIHZpZGVvYnVmMiB3YXJucy4KClsgLi4u IF0KCj4gK3N0YXRpYyB2b2lkIHZiMm9wc192ZGVjX3N0b3Bfc3RyZWFtaW5nKHN0cnVjdCB2YjJf cXVldWUgKnEpCj4gK3sKPiArCXN0cnVjdCBhbWxfdmRlY19jdHggKmN0eCA9IHZiMl9nZXRfZHJ2 X3ByaXYocSk7Cj4gKwlzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICpzcmNfYnVmID0gTlVMTCwgKmRz dF9idWYgPSBOVUxMOwo+ICsKPiArCWFtbF92ZGVjX3JlbGVhc2VfaW5zdGFuY2UoY3R4KTsKCltT ZXZlcml0eTogQ3JpdGljYWxdCklzIGl0IHNhZmUgdG8gcmVsZWFzZSB0aGUgY29kZWMgaW5zdGFu Y2UgaGVyZSB3aGVuIG9ubHkgb25lIG9mIHRoZSBxdWV1ZXMKaXMgc3RvcHBlZD8KCklmIHVzZXJz cGFjZSBzdG9wcyB0aGUgQ0FQVFVSRSBxdWV1ZSwgYW1sX3ZkZWNfcmVsZWFzZV9pbnN0YW5jZSBp cyBjYWxsZWQsCndoaWNoIGZyZWVzIHRoZSBjb2RlYyBjb250ZXh0IGFuZCBudWxsaWZpZXMgY29k ZWNfcHJpdi4gSWYgdGhlIE9VVFBVVCBxdWV1ZQppcyBzdGlsbCBzdHJlYW1pbmcsIHN1YnNlcXVl bnQgaGFyZHdhcmUgaW50ZXJydXB0cyBvciBWNEwyIGpvYnMgd2lsbApkZXJlZmVyZW5jZSB0aGUg ZnJlZWQgb3IgTlVMTCBjb2RlY19wcml2LCBjYXVzaW5nIGEga2VybmVsIHBhbmljLgoKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvYW1sX3ZkZWNfZHJ2 LmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9hbWxfdmRlY19kcnYuYwo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwMC4uZDYzY2JkNGY5ZTI2 ZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMv dmRlYy9hbWxfdmRlY19kcnYuYwo+IEBAIC0wLDAgKzEsMjM5IEBACgpbIC4uLiBdCgo+ICtzdGF0 aWMgaW50IGZvcHNfdmNvZGVjX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCj4gK3sKPiArCXN0cnVj dCBhbWxfdmRlY19kZXYgKmRlY19kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwo+ICsJc3RydWN0 IGFtbF92ZGVjX2N0eCAqY3R4ID0gTlVMTDsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCWN0eCA9 IGt6YWxsb2Nfb2JqKCpjdHgsIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFjdHgpCj4gKwkJcmV0dXJu IC1FTk9NRU07Cj4gKwo+ICsJbXV0ZXhfbG9jaygmZGVjX2Rldi0+ZGV2X211dGV4KTsKPiArCWRl Y19kZXYtPmRlY19jdHggPSBjdHg7CgpbU2V2ZXJpdHk6IENyaXRpY2FsXQpEb2VzIHRoaXMgdW5j b25kaXRpb25hbGx5IG92ZXJ3cml0ZSB0aGUgZ2xvYmFsIGRldmljZSBjb250ZXh0IHBvaW50ZXI/ CklmIG11bHRpcGxlIHByb2dyYW1zIG9wZW4gdGhlIHZpZGVvIGRldmljZSwgdGhlIGdsb2JhbCBw b2ludGVyIGlzIG92ZXJ3cml0dGVuLgpTaW5jZSB0aGUgdGhyZWFkZWQgSVNSIHVuY29uZGl0aW9u YWxseSB1c2VzIHRoZXNlIGdsb2JhbCBwb2ludGVycyB0byBsb29rCnVwIHRoZSBhY3RpdmUgY29u dGV4dCwgYW4gaW50ZXJydXB0IGdlbmVyYXRlZCBieSBvbmUgY2xpZW50IHdpbGwgYmUgcHJvY2Vz c2VkCnVzaW5nIGFub3RoZXIgY2xpZW50J3MgY29udGV4dCwgbGVhZGluZyB0byBzdGF0ZSBjb3Jy dXB0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZQpjcmFzaGVzLgoKWyAuLi4gXQoKPiArc3RhdGljIGlu dCBmb3BzX3Zjb2RlY19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQo+ICt7Cj4gKwlzdHJ1Y3Qg YW1sX3ZkZWNfZGV2ICpkZWNfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKPiArCXN0cnVjdCBh bWxfdmRlY19jdHggKmN0eCA9IGZoX3RvX2RlY19jdHgoZmlsZSk7Cj4gKwo+ICsJbXV0ZXhfbG9j aygmZGVjX2Rldi0+ZGV2X211dGV4KTsKCltTZXZlcml0eTogSGlnaF0KSXMgdGhlIGxpZmV0aW1l IG9mIGRlY19kZXYgcHJvcGVybHkgbWFuYWdlZCBoZXJlPwpJbiBhbWxfdmRlY19kcnZfcHJvYmUs IHRoZSBhbWxfdmRlY19kZXYgc3RydWN0IGlzIGFsbG9jYXRlZCB3aXRoCmRldm1fa3phbGxvYywg dHlpbmcgaXQgdG8gdGhlIHBsYXRmb3JtIGRldmljZS4gSWYgdGhlIGRyaXZlciBpcyB1bmJvdW5k CndoaWxlIHVzZXJzcGFjZSBzdGlsbCBob2xkcyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvciwgdGhl IG1lbW9yeSBpcyBmcmVlZC4KV2hlbiB1c2Vyc3BhY2UgbGF0ZXIgY2xvc2VzIHRoZSBmaWxlIGRl c2NyaXB0b3IsIGZvcHNfdmNvZGVjX3JlbGVhc2Ugd2lsbApkZXJlZmVyZW5jZSB0aGUgZnJlZWQg bWVtb3J5IHdoZW4gYXR0ZW1wdGluZyB0byB0YWtlIHRoZSBtdXRleC4KClsgLi4uIF0KCj4gK3N0 YXRpYyBpbnQgYW1sX3ZkZWNfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cj4gK3sKPiArCXN0cnVjdCBhbWxfdmRlY19kZXYgKmRldjsKPiArCXN0cnVjdCB2aWRlb19kZXZp Y2UgKnZmZF9kZWM7Cj4gKwlzdHJ1Y3QgYW1sX3ZkZWNfaHcgKmh3Owo+ICsJaW50IHJldCA9IDA7 Cj4gKwo+ICsJZGV2ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqZGV2KSwgR0ZQ X0tFUk5FTCk7CgpbU2V2ZXJpdHk6IEhpZ2hdCkNvdWxkIHR5aW5nIHRoaXMgc3RydWN0dXJlIHRv IHRoZSBwbGF0Zm9ybSBkZXZpY2UgdXNpbmcgZGV2bV9remFsbG9jCmxlYWQgdG8gdXNlLWFmdGVy LWZyZWUgYnVncyBhcyBkZXNjcmliZWQgaW4gdGhlIHJlbGVhc2UgZm9wIGFib3ZlPwoKWyAuLi4g XQoKPiArCWRldi0+cHZkZWNfZGF0YSA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YSgmcGRldi0+ ZGV2KTsKPiArCXJldCA9IGRldi0+cHZkZWNfZGF0YS0+cmVxX2h3X3Jlc291cmNlKGRldik7Cj4g KwlpZiAocmV0IDwgMCkKPiArCQlnb3RvIGVycl9od19pbml0Owo+ICsKPiArCWRldi0+bTJtX2Rl dl9kZWMgPSB2NGwyX20ybV9pbml0KCZhbWxfdmRlY19tMm1fb3BzKTsKPiArCWlmIChJU19FUlIo ZGV2LT5tMm1fZGV2X2RlYykpIHsKPiArCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgIkZhaWxl ZCB0byBpbml0IG1lbTJtZW0gZGVjIGRldmljZVxuIik7Cj4gKwkJcmV0ID0gUFRSX0VSUigoX19m b3JjZSB2b2lkICopZGV2LT5tMm1fZGV2X2RlYyk7Cj4gKwkJZ290byBlcnJfaHdfaW5pdDsKPiAr CX0KPiArCj4gKwlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmZkX2RlYywgVkZMX1RZUEVf VklERU8sIC0xKTsKPiArCWlmIChyZXQpIHsKPiArCQl2NGwyX2VycigmZGV2LT52NGwyX2Rldiwg IkZhaWxlZCB0byByZWdpc3RlciB2aWRlbyBkZXZpY2UiKTsKPiArCQlnb3RvIGVycl92aWRfZGV2 X3JlZ2lzdGVyOwo+ICsJfQoKWyAuLi4gXQoKPiArZXJyX21lZGlhX2Rldl9yZWdpc3RlcjoKPiAr CXY0bDJfbTJtX3VucmVnaXN0ZXJfbWVkaWFfY29udHJvbGxlcihkZXYtPm0ybV9kZXZfZGVjKTsK PiArZXJyb3JfbTJtX21jX3JlZ2lzdGVyOgo+ICsJbWVkaWFfZGV2aWNlX2NsZWFudXAoJmRldi0+ bWRldik7Cj4gK2Vycl92aWRfZGV2X3JlZ2lzdGVyOgo+ICsJdjRsMl9tMm1fcmVsZWFzZShkZXYt Pm0ybV9kZXZfZGVjKTsKPiArZXJyX2h3X2luaXQ6Cj4gKwlkZXYtPmRlY19odyA9IE5VTEw7Cgpb U2V2ZXJpdHk6IEhpZ2hdCkRvZXMgdGhpcyBlcnJvciBwYXRoIGxlYWsgdGhlIHJlcXVlc3RlZCBo YXJkd2FyZSByZXNvdXJjZXM/CklmIHByb2JlIGZhaWxzIGFmdGVyIHJlcV9od19yZXNvdXJjZSBj b21wbGV0ZXMgc3VjY2Vzc2Z1bGx5LCBqdW1waW5nIHRvCmVycl9od19pbml0IGNsZWFycyB0aGUg cG9pbnRlciB3aXRob3V0IGludm9raW5nIHRoZSBjb3JyZXNwb25kaW5nCmRlc3Ryb3lfaHdfcmVz b3VyY2UgY2FsbGJhY2ssIHBlcm1hbmVudGx5IGxlYWtpbmcgcG93ZXIgZG9tYWlucywgZGV2aWNl CmxpbmtzLCBjbG9ja3MsIGFuZCBJUlFzLgoKPiArZXJyX2RlY19tZW1faW5pdDoKPiArCXZpZGVv X2RldmljZV9yZWxlYXNlKHZmZF9kZWMpOwo+ICtlcnJfZGV2aWNlX2FsbG9jOgo+ICsJdjRsMl9k ZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cgpb U2V2ZXJpdHk6IEhpZ2hdCklzIGEgY2FsbCB0byB2aWRlb191bnJlZ2lzdGVyX2RldmljZSBtaXNz aW5nIG9uIHRoZSBlcnJvciBwYXRocyBhZnRlcgp2aWRlb19yZWdpc3Rlcl9kZXZpY2Ugc3VjY2Vl ZHM/CklmIHByb2JlIGZhaWxzIGxhdGUgKGxpa2UgZHVyaW5nIG1lZGlhX2RldmljZV9yZWdpc3Rl ciksIHRoZSBlcnJvciBjbGVhbnVwCmludm9rZXMgdmlkZW9fZGV2aWNlX3JlbGVhc2Ugd2hpY2gg aW1tZWRpYXRlbHkgZnJlZXMgdGhlIG1lbW9yeSwgYnV0CmxlYXZlcyB0aGUgYWN0aXZlIHZpZGVv IG5vZGUgcmVnaXN0ZXJlZC4gSWYgdXNlcnNwYWNlIG9wZW5zIGl0LCBpdCB3aWxsIGFjY2Vzcwp0 aGUgZGVhbGxvY2F0ZWQgc3RydWN0dXJlLgoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvYW1sX3ZkZWNfaHcuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZv cm0vYW1sb2dpYy92ZGVjL2FtbF92ZGVjX2h3LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAwMDAwMDAuLjI5YTE5NWViNjg3MjEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvYW1sX3ZkZWNfaHcuYwoKWyAuLi4g XQoKPiArdm9pZCBhbWxfc3RvcF92ZGVjX2h3KHN0cnVjdCBhbWxfdmRlY19odyAqaHcpCj4gK3sK PiArCXUzMiByZWdfdmFsID0gMDsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmVnbWFwX3dyaXRlKGh3 LT5tYXBbRE9TX0JVU10sIE1QU1IsIDApOwo+ICsJcmVnbWFwX3dyaXRlKGh3LT5tYXBbRE9TX0JV U10sIENQU1IsIDApOwo+ICsKPiArCXJldCA9IHJlYWRfcG9sbF90aW1lb3V0X2F0b21pYyhyZWFk X2Rvc19yZWcsIHJlZ192YWwsCj4gKwkJCQkgICAgICAgIShyZWdfdmFsICYgMHg4MDAwKSwKPiAr CQkJCSAgICAgICAxMCwgMTAwMDAwLCB0cnVlLAo+ICsJCQkJICAgICAgIGh3LCBJTUVNX0RNQV9D VFJMKTsKPiArCj4gKwlyZXQgPSByZWFkX3BvbGxfdGltZW91dF9hdG9taWMocmVhZF9kb3NfcmVn LCByZWdfdmFsLAo+ICsJCQkJICAgICAgICEocmVnX3ZhbCAmIDB4ODAwMCksCj4gKwkJCQkgICAg ICAgMTAsIDEwMDAwMCwgdHJ1ZSwKPiArCQkJCSAgICAgICBodywgTE1FTV9ETUFfQ1RSTCk7Cj4g Kwo+ICsJcmV0ID0gcmVhZF9wb2xsX3RpbWVvdXRfYXRvbWljKHJlYWRfZG9zX3JlZywgcmVnX3Zh bCwKPiArCQkJCSAgICAgICAhKHJlZ192YWwgJiAweGZmZiksCj4gKwkJCQkgICAgICAgMTAsIDgw MDAwMCwgdHJ1ZSwKPiArCQkJCSAgICAgICBodywgV1JSU1BfTE1FTSk7CgpbU2V2ZXJpdHk6IEhp Z2hdCkNvdWxkIHRoaXMgYXRvbWljIHBvbGwgdGltZW91dCBjYXVzZSBhIHNvZnQgbG9ja3VwPwpy ZWFkX3BvbGxfdGltZW91dF9hdG9taWMgdXNlcyB1ZGVsYXkgdG8gYnVzaWx5IHNwaW4gdGhlIHBy b2Nlc3NvciB3aXRob3V0CnlpZWxkaW5nLiBTcGlubmluZyBmb3IgdXAgdG8gODAwbXMgc2V2ZXJl bHkgdmlvbGF0ZXMga2VybmVsIGxhdGVuY3kgY29uc3RyYWludHMKYW5kIHdpbGwgdHJpZ2dlciBD UFUgc3RhbGxzIGFuZCBzb2Z0IGxvY2t1cCB3YXJuaW5ncy4KClsgLi4uIF0KCj4gK3N0YXRpYyBp bnQgcG1fdmRlY19wb3dlcl9kb21haW5faW5pdChzdHJ1Y3QgYW1sX3ZkZWNfaHcgKmh3KQo+ICt7 Cj4gKwlpbnQgaSwgZXJyOwo+ICsJY29uc3Qgc3RydWN0IHBvd2VyX21hbmFnZXJfcyAqcG0gPSBo dy0+cG07Cj4gKwlzdHJ1Y3QgcG1fcGRfcyAqcGQgPSBwbS0+cGRfZGF0YTsKPiArCj4gKwltdXRl eF9pbml0KCZody0+cG1fbXV0ZXgpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBWREVDX01BWDsg aSsrKSB7Cj4gKwkJcGRbaV0uZGV2ID0gZGV2X3BtX2RvbWFpbl9hdHRhY2hfYnlfbmFtZShody0+ ZGV2LCBwZFtpXS5uYW1lKTsKPiArCQlpZiAoSVNfRVJSX09SX05VTEwocGRbaV0uZGV2KSkgewo+ ICsJCQllcnIgPSBQVFJfRVJSKHBkW2ldLmRldik7Cj4gKwkJCWRldl9kYmcoaHctPmRldiwgIkdl dCAlcyBmYWlsZWQsIHBtLWRvbWFpbjogJWRcbiIsCj4gKwkJCQlwZFtpXS5uYW1lLCBlcnIpOwo+ ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ICsJCXBkW2ldLmxpbmsgPSBkZXZpY2VfbGlua19h ZGQoaHctPmRldiwgcGRbaV0uZGV2LAo+ICsJCQkJCSAgICAgRExfRkxBR19QTV9SVU5USU1FIHwK PiArCQkJCQkgICAgIERMX0ZMQUdfU1RBVEVMRVNTKTsKPiArCQlpZiAoSVNfRVJSX09SX05VTEwo cGRbaV0ubGluaykpIHsKPiArCQkJZGV2X2Vycihody0+ZGV2LCAiQWRkaW5nICVzIGRldmljZSBs aW5rIGZhaWxlZCFcbiIsIHBkW2ldLm5hbWUpOwo+ICsJCQlyZXR1cm4gLUVOT0RFVjsKPiArCQl9 CgpbU2V2ZXJpdHk6IEhpZ2hdCkNhbiBwZFtpXS5kZXYgZW5kIHVwIHN0b3JpbmcgYW4gRVJSX1BU UiBpZiBkZXZfcG1fZG9tYWluX2F0dGFjaF9ieV9uYW1lIGZhaWxzPwpJZiBhbiBFUlJfUFRSIGlz IHJldHVybmVkLCBJU19FUlJfT1JfTlVMTCBjYXRjaGVzIGl0LCBidXQgcGRbaV0uZGV2IHJldGFp bnMKdGhlIGVycm9yIHBvaW50ZXIuIExhdGVyLCBpbiBwbV92ZGVjX3Bvd2VyX2RvbWFpbl9wb3dl cl9vbiwgdGhlIGNvZGUgY2hlY2tzCmlmIChkZXYpLiBTaW5jZSBFUlJfUFRSIGlzIG5vbi1OVUxM LCB0aGUgY2hlY2sgcGFzc2VzLCBhbmQgdGhlIGVycm9yIHBvaW50ZXIKaXMgc2VudCBkaXJlY3Rs eSBpbnRvIHBtX3J1bnRpbWVfZ2V0X3N5bmMsIGNhdXNpbmcgYSBrZXJuZWwgcGFuaWMuCgpbU2V2 ZXJpdHk6IE1lZGl1bV0KRG9lcyB0aGlzIGVycm9yIHBhdGggbGVhayBwcmV2aW91c2x5IGF0dGFj aGVkIGRvbWFpbnM/CklmIGRldmljZV9saW5rX2FkZCBmYWlscyBvbiB0aGUgc2Vjb25kIGl0ZXJh dGlvbiwgcmV0dXJuaW5nIC1FTk9ERVYgZGlyZWN0bHkKYnlwYXNzZXMgY2xlYW51cCAoZGV2aWNl X2xpbmtfZGVsIC8gZGV2X3BtX2RvbWFpbl9kZXRhY2gpIGZvciB0aGUgc3VjY2Vzc2Z1bApmaXJz dCBpdGVyYXRpb24uCgpbIC4uLiBdCgo+ICtzdGF0aWMgdm9pZCBwbV92ZGVjX3Bvd2VyX2RvbWFp bl9wb3dlcl9vbihzdHJ1Y3QgYW1sX3ZkZWNfaHcgKmh3LCBpbnQgaWQpCj4gK3sKPiArCWNvbnN0 IHN0cnVjdCBwb3dlcl9tYW5hZ2VyX3MgKnBtID0gaHctPnBtOwo+ICsJc3RydWN0IGRldmljZSAq ZGV2ID0gcG0tPnBkX2RhdGFbaWRdLmRldjsKPiArCXN0cnVjdCBjbGtfYnVsa19kYXRhICpnYXRl X25vZGUgPSBOVUxMOwo+ICsKPiArCWlmIChpZCA9PSBWREVDKQo+ICsJCWdhdGVfbm9kZSA9IHZk ZWNfZ2V0X2Nsa19ieV9uYW1lKGh3LCAidmRlYyIpOwo+ICsJZWxzZSBpZiAoaWQgPT0gSFZERUMp Cj4gKwkJZ2F0ZV9ub2RlID0gdmRlY19nZXRfY2xrX2J5X25hbWUoaHcsICJoZXZjZiIpOwoKW1Nl dmVyaXR5OiBIaWdoXQpJcyB0aGUgZG9zIGNsb2NrIG1pc3NpbmcgZnJvbSBiZWluZyBlbmFibGVk IGhlcmU/ClRoZSBkb3MgY2xvY2sgaXMgZmV0Y2hlZCBpbiB2ZGVjX2Nsb2NrX2dhdGVfaW5pdCwg YnV0IHRoaXMgZnVuY3Rpb24gb25seQpjaGVja3MgZm9yIHZkZWMgYW5kIGhldmNmIHRvIGVuYWJs ZS4gSWYgdGhlIGRvcyBjbG9jayByZW1haW5zIGRpc2FibGVkLApzdWJzZXF1ZW50IGFjY2Vzc2Vz IHRvIHRoZSBET1NfQlVTIGNvdWxkIHN0YWxsIHRoZSBzeXN0ZW0gYnVzLgoKWyAuLi4gXQoKPiAr c3RhdGljIHZvaWQgdmRlY19wb3dlcm9uKHN0cnVjdCBhbWxfdmRlY19odyAqaHcsIGVudW0gdmRl Y190eXBlX2UgY29yZSkKPiArewo+ICsJaWYgKGNvcmUgPj0gVkRFQ19NQVgpCj4gKwkJcmV0dXJu Owo+ICsKPiArCW11dGV4X2xvY2soJmh3LT5wbV9tdXRleCk7Cj4gKwlpZiAoIWh3LT5wbS0+cGRf ZGF0YVtjb3JlXS5kZXYpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJaHctPnBtLT5wZF9kYXRhW2Nv cmVdLnJlZl9jb3VudCsrOwo+ICsJaWYgKGh3LT5wbS0+cGRfZGF0YVtjb3JlXS5yZWZfY291bnQg PiAxKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCWlmIChody0+cG0tPnBvd2VyX3N0YXRlKGh3LCBj b3JlKSkKPiArCQlnb3RvIG91dDsKPiArCj4gKwlody0+cG0tPnBvd2VyX29uKGh3LCBjb3JlKTsK PiArCj4gK291dDoKPiArCW11dGV4X3VubG9jaygmaHctPnBtX211dGV4KTsKPiArfQoKW1NldmVy aXR5OiBIaWdoXQpEb2VzIHNraXBwaW5nIHBvd2VyX29uIGhlcmUgYnJlYWsgdGhlIFBNIHVzYWdl IGNvdW50cyBhbmQgY2xvY2sgYmFsYW5jaW5nPwpJZiBody0+cG0tPnBvd2VyX3N0YXRlIGlzIHRy dWUsIHRoZSBkcml2ZXIganVtcHMgdG8gb3V0IHdpdGhvdXQgY2FsbGluZwpwb3dlcl9vbi4gSG93 ZXZlciwgcG93ZXJfb24gaXMgcmVzcG9uc2libGUgZm9yIGNsa19wcmVwYXJlX2VuYWJsZSBhbmQK cG1fcnVudGltZV9nZXRfc3luYy4gQnkgYnlwYXNzaW5nIGl0LCB0aGUgY2xvY2sgaXNuJ3QgcHJl cGFyZWQsIGJ1dAp2ZGVjX3Bvd2Vyb2ZmIHdpbGwgdW5jb25kaXRpb25hbGx5IGV4ZWN1dGUgcG93 ZXJfb2ZmLCBkaXNhYmxpbmcgdGhlCmNsb2NrIGFuZCB0cmlnZ2VyaW5nIGEgUE0gcHV0IHVuZGVy Zmxvdy4KClsgLi4uIF0KCj4gK2ludCBkZXZfcmVxdWVzdF9od19yZXNvdXJjZXModm9pZCAqcHJp dikKPiArewo+ICsJc3RydWN0IGFtbF92ZGVjX2RldiAqZGV2ID0gKHN0cnVjdCBhbWxfdmRlY19k ZXYgKilwcml2Owo+ICsJc3RydWN0IGFtbF92ZGVjX2h3ICpodzsKPiArCXN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXY7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnNtX25wOwo+ICsJdm9pZCBf X2lvbWVtICpyZWdfYmFzZVtNQVhfUkVHX0JVU107Cj4gKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwo+ ICsJaW50IGk7Cj4gKwlpbnQgcmV0ID0gLTE7Cj4gKwo+ICsJaWYgKCFkZXYgfHwgIWRldi0+ZGVj X2h3KQo+ICsJCXJldHVybiAtMTsKPiArCj4gKwlwZGV2ID0gZGV2LT5wbGF0X2RldjsKPiArCWh3 ID0gZGV2LT5kZWNfaHc7Cj4gKwlody0+ZGV2ID0gJnBkZXYtPmRldjsKClsgLi4uIF0KCj4gKwlz bV9ucCA9IG9mX3BhcnNlX3BoYW5kbGUocGRldi0+ZGV2Lm9mX25vZGUsICJzZWN1cmUtbW9uaXRv ciIsIDApOwo+ICsJaWYgKElTX0VSUihzbV9ucCkpCj4gKwkJcmV0dXJuIFBUUl9FUlIoaHctPmNh bnZhcyk7CgpbU2V2ZXJpdHk6IEhpZ2hdCkRvZXMgb2ZfcGFyc2VfcGhhbmRsZSByZXR1cm4gTlVM TCBvbiBmYWlsdXJlIHJhdGhlciB0aGFuIGFuIEVSUl9QVFI/CklmIHRoZSBzZWN1cmUtbW9uaXRv ciBwcm9wZXJ0eSBpcyBtaXNzaW5nLCBzbV9ucCBpcyBOVUxMLCBtZWFuaW5nIElTX0VSUgpldmFs dWF0ZXMgdG8gZmFsc2UuIFRoZSBkcml2ZXIgd2lsbCB0aGVuIHBhc3MgTlVMTCBpbnRvIG1lc29u X3NtX2dldCwgd2hpY2gKbGlrZWx5IGRlcmVmZXJlbmNlcyBpdCwgcmVzdWx0aW5nIGluIGEga2Vy bmVsIHBhbmljLgoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2lj L3ZkZWMvYW1sX3ZkZWNfdGVlX2Z3LmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMv dmRlYy9hbWxfdmRlY190ZWVfZncuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMDAwMDAwMC4uYWQ0MTU2MjQ5ZjU1OAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9hbWxfdmRlY190ZWVfZncuYwoKWyAuLi4gXQoK PiArc3RhdGljIGludCBnZXRfZmlybXdhcmUoY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqKmRhdGEs IHNpemVfdCAqc2l6ZSkKPiArewo+ICsJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IE5VTEw7 Cj4gKwlpbnQgcmV0Owo+ICsJdm9pZCAqYnVmOwo+ICsKPiArCXJldCA9IHJlcXVlc3RfZmlybXdh cmUoJmZ3LCBGSVJNV0FSRV9QQVRILCBOVUxMKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJl dDsKPiArCj4gKwkvKiBnZXQgcmlkIG9mIHRoZSBmaXJzdCAzMksgYnl0ZXMgcGxhaW50ZXh0ICov Cj4gKwlidWYgPSBremFsbG9jKChmdy0+c2l6ZSAtIFVDT0RFX0hFQURFUl9TSVpFKSwgR0ZQX0tF Uk5FTCk7CgpbU2V2ZXJpdHk6IEhpZ2hdClNob3VsZCB0aGVyZSBiZSBhIGJvdW5kcyBjaGVjayBv biBmdy0+c2l6ZSBiZWZvcmUgc3VidHJhY3Rpbmc/CklmIHRoZSBsb2FkZWQgZmlybXdhcmUgZmls ZSBpcyBzbWFsbGVyIHRoYW4gVUNPREVfSEVBREVSX1NJWkUgKDMyS0IpLCB0aGlzCnN1YnRyYWN0 aW9uIHVuZGVyZmxvd3MgdG8gYSBtYXNzaXZlIHZhbHVlLCBsZWFkaW5nIHRvIGEgaHVnZSBremFs bG9jIGZhaWx1cmUKb3Igb3V0LW9mLWJvdW5kcyBoZWFwIG9wZXJhdGlvbnMuCgo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9oMjY0LmMgYi9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9oMjY0LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAwMDAwMDAuLjc1ODRkNWViMjBlYzgKPiAtLS0gL2Rldi9udWxsCj4g KysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvaDI2NC5jCgpbIC4uLiBd Cgo+ICtzdGF0aWMgaW50IGgyNjRfcHJlcGFyZV9pbnB1dChzdHJ1Y3QgYW1sX3ZkZWNfY3R4ICpj dHgpCj4gK3sKClsgLi4uIF0KCj4gKwlyZWdtYXBfd3JpdGUoaHctPm1hcFtET1NfQlVTXSwgVkxE X01FTV9WSUZJRk9fUlAsCj4gKwkJICAgICByb3VuZF9kb3duKHNyY19kbWEsIFZERUNfRklGT19B TElHTikpOwo+ICsJZHVtbXkgPSBwYXlsb2FkX3NpemUgKyBWTERfUEFERElOR19TSVpFOwo+ICsJ cmVnbWFwX3dyaXRlKGh3LT5tYXBbRE9TX0JVU10sIFZMRF9NRU1fVklGSUZPX1dQLAo+ICsJCSAg ICAgcm91bmRfZG93bigoc3JjX2RtYSArIGR1bW15KSwgVkRFQ19GSUZPX0FMSUdOKSk7CgpbU2V2 ZXJpdHk6IEhpZ2hdCkRvZXMgdGhpcyBjYXVzZSB0aGUgaGFyZHdhcmUgdG8gcmVhZCBvdXQtb2Yt Ym91bmRzIG1lbW9yeT8KQWRkaW5nIFZMRF9QQURESU5HX1NJWkUgKDEwMjQgYnl0ZXMpIHRvIHRo ZSBwYXlsb2FkIHNpemUgaW1wbGljaXRseQp0ZWxscyB0aGUgaGFyZHdhcmUgc3RyZWFtIHBhcnNl ciB0byByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgdXNlci1wcm92aWRlZApWNEwyIGJ1ZmZlciBw YXlsb2FkLiBJZiB0aGUgcGF5bG9hZCBzaXplIGFsaWducyBjbG9zZWx5IHdpdGggdGhlIGVuZCBv Zgp0aGUgSU9NTVUvVk1BIG1hcHBpbmcsIHRoaXMgY2F1c2VzIE9PQiBETUEgcmVhZHMgYW5kIElP TU1VIGZhdWx0cy4KClsgLi4uIF0KCj4gK3N0YXRpYyB2b2lkIGNvbmZpZ19zcHNfcGFyYW1zKHN0 cnVjdCBhbWxfaDI2NF9jdHggKmgyNjRfY3R4LAo+ICsJCQkgICAgICB1bnNpZ25lZCBzaG9ydCAq c3BzX2Jhc2UsCj4gKwkJCSAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaDI2NF9zcHMgKnNw cykKPiArewo+ICsJc3RydWN0IGFtbF92ZGVjX2N0eCAqY3R4ID0gaDI2NF9jdHgtPnY0bDJfY3R4 Owo+ICsJc3RydWN0IGFtbF92ZGVjX2h3ICpodyA9IHZkZWNfZ2V0X2h3KGN0eC0+ZGV2KTsKPiAr CXUzMiBjZmdfdG1wID0gMDsKPiArCXUzMiBmcmFtZV9zaXplOwo+ICsJdTMyIG9mZnNldCA9IDA7 Cj4gKwl1bnNpZ25lZCBzaG9ydCBkYXRhX3RtcFsweDEwMF07Cj4gKwlpbnQgaSwgaWk7Cj4gKwo+ ICsJbWVtc2V0KHNwc19iYXNlLCAwLCAweDEwMCk7Cj4gKwo+ICsJaDI2NF9jdHgtPmZyYW1lX3dp ZHRoID0gKHNwcy0+cGljX3dpZHRoX2luX21ic19taW51czEgKyAxKSA8PCA0Owo+ICsJaDI2NF9j dHgtPmZyYW1lX2hlaWdodCA9IChzcHMtPnBpY19oZWlnaHRfaW5fbWFwX3VuaXRzX21pbnVzMSAr IDEpIDw8IDQ7CgpbU2V2ZXJpdHk6IENyaXRpY2FsXQpBcmUgdGhlIGRpbWVuc2lvbnMgcHJvdmlk ZWQgaW4gdGhlIHVudHJ1c3RlZCBTUFMgdmFsaWRhdGVkIGFnYWluc3QgdGhlCmFjdHVhbCBhbGxv Y2F0ZWQgVjRMMiBkZXN0aW5hdGlvbiBidWZmZXIgc2l6ZT8KClRoZSB1c2VyLXN1cHBsaWVkIFNQ UyBkaW1lbnNpb25zIGFyZSB0cmFuc2xhdGVkIHRvIGNhbnZhcyBkaW1lbnNpb25zIGhlcmUuCklm IHVzZXJzcGFjZSBwcm92aWRlcyBtYXNzaXZlIFNQUyBkaW1lbnNpb25zIGJ1dCBxdWV1ZXMgYSBz bWFsbCBkZXN0aW5hdGlvbgpidWZmZXIsIHRoZSBoYXJkd2FyZSBkZWNvZGVyIHdpbGwgd3JpdGUg b3V0IG9mIGJvdW5kcyBkdXJpbmcgZGVjb2RpbmcsCmNvcnJ1cHRpbmcgYWRqb2luaW5nIGtlcm5l bCBwaHlzaWNhbCBtZW1vcnkuCgpbIC4uLiBdCgo+ICtzdGF0aWMgdm9pZCBjb25maWdfZGVjb2Rl X2NhbnZhcyhzdHJ1Y3QgYW1sX3ZkZWNfaHcgKmh3LAo+ICsJCQkJIHN0cnVjdCBoMjY0X2RlY29k ZV9idWZfc3BlYyAqYnVmX3NwZWMsCj4gKwkJCQkgdTMyIG1iX3dpZHRoLCB1MzIgbWJfaGVpZ2h0 KQo+ICt7Cj4gKwlpbnQgY2FudmFzX2FsbG9jX3Jlc3VsdCA9IDA7Cj4gKwlpbnQgYmxrbW9kZSA9 IDB4MDsKPiArCj4gKwljYW52YXNfYWxsb2NfcmVzdWx0ID0gbWVzb25fY2FudmFzX2FsbG9jKGh3 LT5jYW52YXMsICZidWZfc3BlYy0+eV9jYW52YXNfaW5kZXgpOwo+ICsJY2FudmFzX2FsbG9jX3Jl c3VsdCA9IG1lc29uX2NhbnZhc19hbGxvYyhody0+Y2FudmFzLCAmYnVmX3NwZWMtPnVfY2FudmFz X2luZGV4KTsKCltTZXZlcml0eTogSGlnaF0KRG9lcyB0aGUgc2Vjb25kIGFzc2lnbm1lbnQgb3Zl cndyaXRlIHRoZSBhbGxvY2F0aW9uIHJlc3VsdCBvZiB0aGUgZmlyc3Q/CklmIHRoZSBhbGxvY2F0 aW9uIG9mIHRoZSB5IGNhbnZhcyBmYWlscyBidXQgdGhlIHUgY2FudmFzIHN1Y2NlZWRzLCB0aGUK ZmFpbHVyZSBpcyBtYXNrZWQsIGFuZCB0aGUgaGFyZHdhcmUgaXMgY29uZmlndXJlZCB3aXRoIGFu IHVuaW5pdGlhbGl6ZWQKeV9jYW52YXNfaW5kZXguCgpbIC4uLiBdCgo+ICtzdGF0aWMgdm9pZCBy ZW9yZGVyX3Nob3J0X3Rlcm0oc3RydWN0IHNsaWNlICpjdXJyX3NsaWNlLCBpbnQgY3VyX2xpc3Qs Cj4gKwkJCSAgICAgICBpbnQgcGljX251bV9seCwgaW50ICpyZWZfaWR4X2x4KQo+ICt7Cj4gKwlz dHJ1Y3QgYW1sX2gyNjRfY3R4ICpoMjY0X2N0eCA9Cj4gKwkgICAgY29udGFpbmVyX29mKGN1cnJf c2xpY2UsIHN0cnVjdCBhbWxfaDI2NF9jdHgsIG1zbGljZSk7Cj4gKwlzdHJ1Y3QgYW1sX3ZkZWNf Y3R4ICpjdHggPSBoMjY0X2N0eC0+djRsMl9jdHg7Cj4gKwlpbnQgY19pZHgsIG5faWR4Owo+ICsJ aW50IG51bV9yZWZfaWR4X2x4X2FjdGl2ZTsKPiArCXN0cnVjdCBoMjY0X2RlY29kZV9idWZfc3Bl YyAqcGljX2x4ID0gTlVMTDsKPiArCXN0cnVjdCBoMjY0X2RlY29kZV9idWZfc3BlYyAqcmVmX2xp c3RfcmVvcmRlcmVkOwoKWyAuLi4gXQoKPiArCWZvciAoY19pZHggPSBudW1fcmVmX2lkeF9seF9h Y3RpdmU7IGNfaWR4ID4gKnJlZl9pZHhfbHg7IGNfaWR4LS0pCj4gKwkJbWVtY3B5KCZyZWZfbGlz dF9yZW9yZGVyZWRbY19pZHhdLCAmcmVmX2xpc3RfcmVvcmRlcmVkW2NfaWR4IC0gMV0sCj4gKwkJ ICAgICAgIHNpemVvZihzdHJ1Y3QgaDI2NF9kZWNvZGVfYnVmX3NwZWMpKTsKCltTZXZlcml0eTog Q3JpdGljYWxdCklzIG51bV9yZWZfaWR4X2x4X2FjdGl2ZSBwcm9wZXJseSB2YWxpZGF0ZWQgYmVm b3JlIHRoaXMgYmFja3dhcmRzIG1lbWNweT8KbnVtX3JlZl9pZHhfbDBfYWN0aXZlX21pbnVzMSBp cyBwYXJzZWQgZnJvbSB0aGUgdW50cnVzdGVkIGJpdHN0cmVhbSBvcgp1c2VyLXN1cHBsaWVkIFBQ UywgYW5kIGNhbiBiZSB1cCB0byA2NTUzNS4gZ2V0X3JlZl9saXN0X3NpemUgcmV0dXJucyB0aGlz CnZhbHVlLCB3aGljaCBpcyB0aGVuIHVzZWQgYXMgYSBsb29wIGJvdW5kYXJ5IGZvciBtZW1jcHkg b3ZlciB0aGUKZml4ZWQgMTctZWxlbWVudCByZWZfbGlzdDAgYXJyYXksIGNhdXNpbmcgbWFzc2l2 ZSBoZWFwIGJ1ZmZlciBvdmVyZmxvd3MuCgpbIC4uLiBdCgo+ICtzdGF0aWMgdm9pZCBjb3B5X3Jl Zl9saXN0KHN0cnVjdCBhbWxfaDI2NF9jdHggKmgyNjRfY3R4LCBpbnQgY3Vycl9saXN0KQo+ICt7 Cj4gKwlpZiAoY3Vycl9saXN0ID09IDApCj4gKwkJbWVtY3B5KGgyNjRfY3R4LT5yZWZfbGlzdDBf dW5yZW9yZGVyZWQsIGgyNjRfY3R4LT5yZWZfbGlzdDAsCj4gKwkJICAgICAgIHNpemVvZihoMjY0 X2N0eC0+cmVmX2xpc3QwKSk7Cj4gKwllbHNlCj4gKwkJbWVtY3B5KGgyNjRfY3R4LT5yZWZfbGlz dDFfdW5yZW9yZGVyZWQsIGgyNjRfY3R4LT5yZWZfbGlzdDAsCj4gKwkJICAgICAgIHNpemVvZiho MjY0X2N0eC0+cmVmX2xpc3QxKSk7Cj4gK30KCltTZXZlcml0eTogSGlnaF0KRG9lcyB0aGlzIG1l bWNweSBjb3B5IGZyb20gdGhlIHdyb25nIHNvdXJjZSBsaXN0PwpJdCBjb3BpZXMgaDI2NF9jdHgt PnJlZl9saXN0MCBpbnRvIHJlZl9saXN0MV91bnJlb3JkZXJlZCBpbnN0ZWFkIG9mCmgyNjRfY3R4 LT5yZWZfbGlzdDEsIGJyZWFraW5nIEItZnJhbWUgcmVmZXJlbmNlIGxpc3QgcmVvcmRlcmluZy4K ClsgLi4uIF0KCj4gK3N0YXRpYyB2b2lkIGNsZWFyX3VudXNlZF9jb2xfYnVmKHN0cnVjdCBhbWxf aDI2NF9jdHggKmgyNjRfY3R4LAo+ICsJCQkJIHN0cnVjdCB2NGwyX2N0cmxfaDI2NF9kZWNvZGVf cGFyYW1zICpkZWNvZGUpCj4gK3sKPiArCWludCBpLCBjb2xfcG9jOwo+ICsKPiArCS8qIGZsdXNo IGFsbCBjb2wgYnVmZmVycyB3aGVuIElEUiAqLwo+ICsJaWYgKGRlY29kZS0+ZmxhZ3MgPT0gVjRM Ml9IMjY0X0RFQ09ERV9QQVJBTV9GTEFHX0lEUl9QSUMpIHsKCltTZXZlcml0eTogSGlnaF0KQ2Fu IHRoaXMgZXF1YWxpdHkgY2hlY2sgZmFpbCBiZWNhdXNlIGZsYWdzIGlzIGEgYml0bWFzaz8KSWYg ZGVjb2RlLT5mbGFncyBoYXMgYW5vdGhlciBiaXQgc2V0IChsaWtlIFY0TDJfSDI2NF9ERUNPREVf UEFSQU1fRkxBR19GSUVMRF9QSUMpCmFsb25nc2lkZSBWNEwyX0gyNjRfREVDT0RFX1BBUkFNX0ZM QUdfSURSX1BJQywgdGhlIHN0cmljdCBlcXVhbGl0eSBmYWlscy4gVGhpcwpwcmV2ZW50cyB0aGUg bmVjZXNzYXJ5IGZsdXNoaW5nIG9mIGNvbG9jYXRlZCBidWZmZXJzIG9uIElEUiBmcmFtZXMuCgpb IC4uLiBdCgo+ICtzdGF0aWMgdm9pZCBoMjY0X2NvbmZpZ19kZWNvZGVfc3BlYyhzdHJ1Y3QgYW1s X3ZkZWNfaHcgKmh3LCBzdHJ1Y3QgYW1sX3ZkZWNfY3R4ICpjdHgpCj4gK3sKPiArCXN0cnVjdCBh bWxfaDI2NF9jdHggKmgyNjRfY3R4ID0gKHN0cnVjdCBhbWxfaDI2NF9jdHggKilody0+Y3Vycl9j dHg7Cj4gKwlzdHJ1Y3QgdmRlY19oMjY0X3N0YXRlbGVzc19jdHJsX3JlZiAqY3RybHMgPSAmaDI2 NF9jdHgtPmN0cmxfcmVmOwo+ICsJc3RydWN0IHY0bDJfY3RybF9oMjY0X2RlY29kZV9wYXJhbXMg KmRlY29kZSA9Cj4gKwkgICAgKHN0cnVjdCB2NGwyX2N0cmxfaDI2NF9kZWNvZGVfcGFyYW1zICop Y3RybHMtPmRlY29kZTsKPiArCXN0cnVjdCBoMjY0X2RlY29kZV9idWZfc3BlYyAqYnVmX3NwZWNf bDAsICpidWZfc3BlY19sMTsKClsgLi4uIF0KCj4gKwkJYnVmX3NwZWNfbDAgPSBmaW5kX3NwZWNf YnlfZHBiX2luZGV4KGgyNjRfY3R4LCBpLCAwKTsKPiArCQlpZiAoYnVmX3NwZWNfbDApIHsKPiAr CQkJYnVmX3NwZWNfbDAtPmNhbnZhc19wb3MgPQo+ICsJCQkgICAgZ2V0X2NhbnZhc19wb3NfYnlf cG9jKGgyNjRfY3R4LAo+ICsJCQkJCQkgIGRwYi0+dG9wX2ZpZWxkX29yZGVyX2NudCk7CgpbIC4u LiBdCgo+ICsJCQlidWZfc3BlY19sMC0+eV9kbWFfYWRkciA9Cj4gKwkJCQl2YjJfZG1hX2NvbnRp Z19wbGFuZV9kbWFfYWRkcih2YiwgMCk7Cj4gKwkJCWlmIChjdHgtPnBpY19pbmZvLnBsYW5lX251 bSA+IDEpCj4gKwkJCQlidWZfc3BlY19sMC0+Y19kbWFfYWRkciA9Cj4gKwkJCQkgICAgdmIyX2Rt YV9jb250aWdfcGxhbmVfZG1hX2FkZHIodmIsIDEpOwo+ICsJCQllbHNlCj4gKwkJCQlidWZfc3Bl Y19sMC0+Y19kbWFfYWRkciA9Cj4gKwkJCQkgICAgYnVmX3NwZWNfbDAtPnlfZG1hX2FkZHIgKwo+ ICsJCQkJICAgIGN0eC0+cGljX2luZm8uZmJfc2l6ZVswXTsKCltTZXZlcml0eTogQ3JpdGljYWxd CklzIGN0eC0+cGljX2luZm8ucGxhbmVfbnVtIGFjY3VyYXRlIGhlcmUgZm9yIG11bHRpLXBsYW5h ciBjYXB0dXJlIGZvcm1hdHM/CkluIHZkZWNfdHJ5X2ZtdF9tcCBhbmQgc2V0X3BpY19pbmZvLCBw bGFuZV9udW0gaXMgaGFyZGNvZGVkIHRvIDEgd2hlbgpmb3JtYXR0aW5nIHRoZSBvdXRwdXQgcXVl dWUuIFdoZW4gdXNlcnNwYWNlIHNldHMgYSBtdWx0aS1wbGFuYXIgZm9ybWF0CihsaWtlIE5WMTJN KSBvbiB0aGUgY2FwdHVyZSBxdWV1ZSwgcGxhbmVfbnVtIHJlbWFpbnMgMS4gVGhlIGNvZGUgaGVy ZQpzdWJzZXF1ZW50bHkgY2FsY3VsYXRlcyB0aGUgVVYgYWRkcmVzcyBhcyB5X2RtYV9hZGRyICsg ZmJfc2l6ZVswXSwgcG9pbnRpbmcKY29tcGxldGVseSBvdXQgb2YgYm91bmRzIG9mIHRoZSBhY3R1 YWwgWSBwbGFuZSBhbGxvY2F0aW9uLCBjYXVzaW5nIHNldmVyZQpETUEgbWVtb3J5IGNvcnJ1cHRp b24uCgpbIC4uLiBdCgo+ICsJZm9yIChpID0gMDsgaSA8IFY0TDJfSDI2NF9OVU1fRFBCX0VOVFJJ RVM7IGkrKykgewo+ICsJCXN0cnVjdCB2NGwyX2gyNjRfZHBiX2VudHJ5ICpkcGIgPSAmZGVjb2Rl LT5kcGJbaV07Cj4gKwo+ICsJCWlmICghKGRwYi0+ZmxhZ3MgJiBWNEwyX0gyNjRfRFBCX0VOVFJZ X0ZMQUdfQUNUSVZFKSkKPiArCQkJYnJlYWs7CgpbU2V2ZXJpdHk6IEhpZ2hdClNob3VsZCB0aGlz IGJlIGEgY29udGludWUgaW5zdGVhZCBvZiBhIGJyZWFrPwpWNEwyIERQQiBhcnJheXMgY2FuIGJl IHNwYXJzZS4gSWYgYW4gZW1wdHkgc2xvdCBpcyBlbmNvdW50ZXJlZCBlYXJseSBpbiB0aGUKaXRl cmF0aW9uLCBicmVhayBleGl0cyB0aGUgbG9vcCBjb21wbGV0ZWx5LCBza2lwcGluZyBjb25maWd1 cmF0aW9uIGZvcgphbGwgc3Vic2VxdWVudCB2YWxpZCByZWZlcmVuY2UgZnJhbWVzIGluIHRoZSBh cnJheS4KClsgLi4uIF0KCj4gK3N0YXRpYyBpbnQgYWxsb2NfY29sb2NhdGVfY21hKHN0cnVjdCBh bWxfaDI2NF9jdHggKmgyNjRfY3R4LAo+ICsJCQkgICAgICBzdHJ1Y3QgYW1sX3ZkZWNfY3R4ICpj dHgpCj4gK3sKPiArCWludCBhbGxvY19zaXplID0gMDsKPiArCWludCBpOwo+ICsJc3RydWN0IGFt bF92ZGVjX2h3ICpodzsKPiArCj4gKwlpZiAoaDI2NF9jdHgtPmNvbGxhdGVkX2NtYV92YWRkcikK PiArCQlyZXR1cm4gMDsKPiArCj4gKwlodyA9IHZkZWNfZ2V0X2h3KGN0eC0+ZGV2KTsKPiArCWlm ICghaHcpCj4gKwkJcmV0dXJuIC0xOwo+ICsKPiArCS8qIDk2IDpjb2wgYnVmIHNpemUgZm9yIGVh Y2ggbWIgKi8KPiArCWgyNjRfY3R4LT5vbmVfY29sX2J1Zl9zaXplID0gaDI2NF9jdHgtPm1iX3Rv dGFsICogOTY7Cj4gKwlhbGxvY19zaXplID0gUEFHRV9BTElHTihoMjY0X2N0eC0+b25lX2NvbF9i dWZfc2l6ZSAqCj4gKwkJCShoMjY0X2N0eC0+bWF4X251bV9yZWZfZnJhbWVzICsgQ09MX0JVRkZF Ul9NQVJHSU4pKTsKPiArCWgyNjRfY3R4LT5jb2xsYXRlZF9jbWFfdmFkZHIgPSBkbWFfYWxsb2Nf Y29oZXJlbnQoaHctPmRldiwgYWxsb2Nfc2l6ZSwKPiArCQkJCQkJCSAgJmgyNjRfY3R4LT5jb2xs YXRlZF9jbWFfYWRkciwgR0ZQX0tFUk5FTCk7CgpbU2V2ZXJpdHk6IENyaXRpY2FsXQpDYW4gdGhp cyBhbGxvY2F0aW9uIHNpemUgd3JhcCBhcm91bmQ/CkJlY2F1c2UgdGhlIFNQUyBwYXJhbWV0ZXJz IHVzZWQgdG8gY29tcHV0ZSBvbmVfY29sX2J1Zl9zaXplIGFuZAptYXhfbnVtX3JlZl9mcmFtZXMg YXJlIHVudmFsaWRhdGVkLCB0aGUgbXVsdGlwbGljYXRpb24gY2FuIHdyYXAgYXJvdW5kIGluCjMy LWJpdCBzcGFjZSwgYWxsb2NhdGluZyBhIHRpbnkgQ01BIGJ1ZmZlci4KClsgLi4uIF0KCj4gK3N0 YXRpYyBpbnQgaDI2NF9jb25maWdfZGVjb2RlX2J1ZihzdHJ1Y3QgYW1sX3ZkZWNfaHcgKmh3LAo+ ICsJCQkJICBzdHJ1Y3QgYW1sX3ZkZWNfY3R4ICpjdHgpCj4gK3sKClsgLi4uIF0KCj4gKwlpZiAo aDI2NF9jdHgtPmN1cnJfc3BlYy5jb2xfYnVmX2luZGV4ID49IDAgJiYKPiArCSAgICBoMjY0X2N0 eC0+Y3Vycl9zcGVjLmNvbF9idWZfaW5kZXggPCBoMjY0X2N0eC0+Y29sb2NhdGVkX2J1Zl9udW0p IHsKPiArCQljb2xvY2F0ZV93cl9hZHIgPSBoMjY0X2N0eC0+Y29sbGF0ZWRfY21hX2FkZHIgKwo+ ICsJCSAgICAoKGgyNjRfY3R4LT5vbmVfY29sX2J1Zl9zaXplICoKPiArCQkgICAgICBoMjY0X2N0 eC0+Y3Vycl9zcGVjLmNvbF9idWZfaW5kZXgpID4+ICh1c2VfbW9kZV84eDhfZmxhZyA/IDIgOiAw KSk7CgpbU2V2ZXJpdHk6IENyaXRpY2FsXQpJcyBjb2xvY2F0ZV93cl9hZHIgaW5jb3JyZWN0bHkg dHlwZWQgYXMgMzItYml0ICh1bnNpZ25lZCBpbnQpPwpBc3NpZ25pbmcgdGhlIDY0LWJpdCBjb2xs YXRlZF9jbWFfYWRkciAoZG1hX2FkZHJfdCkgdG8gYSAzMi1iaXQgaW50ZWdlcgp0cnVuY2F0ZXMg dGhlIHVwcGVyIGJpdHMuIFRoZSBzdWJzZXF1ZW50IGJvdW5kcyBjaGVjawooY29sb2NhdGVfd3Jf YWRyICsgb25lX2NvbF9idWZfc2l6ZSA+IGNvbGxhdGVkX2NtYV9hZGRyX2VuZCkgd3JhcHMgYXJv dW5kIGluCjMyLWJpdCBzcGFjZSwgYWxsb3dpbmcgb3V0LW9mLWJvdW5kcyBETUEgcHJvZ3JhbW1p bmcuCgpbIC4uLiBdCgo+ICtzdGF0aWMgdm9pZCByZWxlYXNlX2NhbnZhc19pbmRleChzdHJ1Y3Qg YW1sX3ZkZWNfaHcgKmh3LAo+ICsJCQkJIHN0cnVjdCBoMjY0X2RlY29kZV9idWZfc3BlYyAqYnVm KQo+ICt7Cj4gKwlpZiAoYnVmLT55X2NhbnZhc19pbmRleCA+PSAwKSB7Cj4gKwkJZGV2X2RiZyho dy0+ZGV2LCAiZnJlZSB5X2NhbnZhcyAlZFxuIiwgYnVmLT55X2NhbnZhc19pbmRleCk7Cj4gKwkJ bWVzb25fY2FudmFzX2ZyZWUoaHctPmNhbnZhcywgYnVmLT55X2NhbnZhc19pbmRleCk7Cj4gKwkJ YnVmLT55X2NhbnZhc19pbmRleCA9IC0xOwo+ICsJfQoKW1NldmVyaXR5OiBIaWdoXQpEb2VzIHRo aXMgbmVnYXRpdmUgYm91bmRzIGNoZWNrIHdvcmsgb24gYSB1OCB2YXJpYWJsZT8KYnVmLT55X2Nh bnZhc19pbmRleCBpcyBkZWNsYXJlZCBhcyBhIHU4LiBUaGUgY2hlY2sgPj0gMCB3aWxsIGFsd2F5 cyBiZQp0cnVlLCBjYXVzaW5nIGl0IHRvIGJsaW5kbHkgaW52b2tlIG1lc29uX2NhbnZhc19mcmVl KGh3LT5jYW52YXMsIDI1NSkKd2hlbiBpdCBoYXNuJ3QgYmVlbiBhbGxvY2F0ZWQsIHdoaWNoIGNv cnJ1cHRzIG90aGVyIHN1YnN5c3RlbSBjYW52YXNlcy4KClsgLi4uIF0KCj4gK3N0YXRpYyBpcnFy ZXR1cm5fdCBoMjY0X3RocmVhZGVkX2lzcl9mdW5jKGludCBpcnEsIHZvaWQgKnByaXYpCj4gK3sK PiArCXUzMiBkZWNfc3RhdHVzOwo+ICsJc3RydWN0IGFtbF92ZGVjX2RldiAqZGV2ID0gKHN0cnVj dCBhbWxfdmRlY19kZXYgKilwcml2Owo+ICsJc3RydWN0IGFtbF9oMjY0X2N0eCAqaDI2NF9jdHgg PSAoc3RydWN0IGFtbF9oMjY0X2N0eCAqKWRldi0+ZGVjX2h3LT5jdXJyX2N0eDsKPiArCXN0cnVj dCBhbWxfdmRlY19jdHggKmN0eCA9IChzdHJ1Y3QgYW1sX3ZkZWNfY3R4ICopZGV2LT5kZWNfY3R4 Owo+ICsJc3RydWN0IGFtbF92ZGVjX2h3ICpodyA9IHZkZWNfZ2V0X2h3KGN0eC0+ZGV2KTsKPiAr CXVuc2lnbmVkIHNob3J0ICpwID0gKHVuc2lnbmVkIHNob3J0ICopaDI2NF9jdHgtPmxtZW1fYWRk cjsKCltTZXZlcml0eTogSGlnaF0KSXMgaXQgc2FmZSB0byBibGluZGx5IGRlcmVmZXJlbmNlIGgy NjRfY3R4IGhlcmU/CldoZW4gdGhlIHN0cmVhbSBpcyB0b3JuIGRvd24gaW4gYW1sX2gyNjRfZXhp dCwgY3Vycl9jdHggaXMgYXNzaWduZWQgTlVMTC4KSWYgYSBzcHVyaW91cyBvciBkZWxheWVkIGhh cmR3YXJlIGludGVycnVwdCBmaXJlcyBzaG9ydGx5IGFmdGVyLCB0aGlzIHdpbGwKdHJpZ2dlciBh IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBwYW5pYy4KClsgLi4uIF0KCj4gKwkJaWYgKGgyNjRf Y29uZmlnX2RlY29kZV9idWYoaHcsIGN0eCkgPCAwKSB7Cj4gKwkJCWgyNjRfcmVsZWFzZV9kZWNv ZGVfc3BlYyhodywgY3R4KTsKPiArCQkJY3R4LT5pbnRfY29uZCA9IDE7Cj4gKwkJCXdha2VfdXBf aW50ZXJydXB0aWJsZSgmY3R4LT5xdWV1ZSk7Cj4gKwkJCWdvdG8gaXJxX2hhbmRsZWQ7Cj4gKwkJ fQoKW1NldmVyaXR5OiBIaWdoXQpJcyB0aGUgdjRsMl9tMm1fYnVmX2RvbmVfYW5kX2pvYl9maW5p c2ggY2FsbCBtaXNzaW5nIGZyb20gdGhpcyBlcnJvciBwYXRoPwpUaGUgY29kZSB3YWtlcyB1cCB0 aGUgd2FpdGVyIHRocmVhZCwgYnV0IHNraXBzIHNpZ25hbGxpbmcgam9iIGNvbXBsZXRpb24gdG8K dGhlIE0yTSBmcmFtZXdvcmsuIFRoZSBmcmFtZXdvcmsgd2lsbCBuZXZlciByZWdpc3RlciB0aGUg am9iIGFzIGZpbmlzaGVkLApwZXJtYW5lbnRseSBoYW5naW5nIHRoZSBNMk0gcXVldWUgZm9yIGFu eSBzdWJzZXF1ZW50IGpvYnMuCgo+ICsJCWlmIChoMjY0X2N0eC0+bmV3X3BpY19mbGFnID09IDEp IHsKPiArCQkJcmVnbWFwX3dyaXRlKGh3LT5tYXBbRE9TX0JVU10sIERQQl9TVEFUVVNfUkVHLCBI MjY0X0FDVElPTl9ERUNPREVfTkVXUElDKTsKPiArCQkJZGV2X2RiZygmZGV2LT5wbGF0X2Rldi0+ ZGV2LCAiYWN0aW9uIGRlY29kZSBuZXcgcGljXG4iKTsKPiArCQkJaDI2NF9jdHgtPm5ld19waWNf ZmxhZyA9IDA7Cj4gKwkJfSBlbHNlIHsKPiArCQkJcmVnbWFwX3dyaXRlKGh3LT5tYXBbRE9TX0JV U10sIERQQl9TVEFUVVNfUkVHLCBIMjY0X0FDVElPTl9ERUNPREVfU0xJQ0UpOwo+ICsJCQlkZXZf ZGJnKCZkZXYtPnBsYXRfZGV2LT5kZXYsICJhY3Rpb24gZGVjb2RlIG5ldyBzbGljZVxuIik7Cj4g KwkJfQo+ICsJCWJyZWFrOwo+ICsJY2FzZSBIMjY0X1NMSUNFX0RBVEFfRE9ORToKPiArCQloMjY0 X3JlbGVhc2VfZGVjb2RlX3NwZWMoaHcsIGN0eCk7Cj4gKwkJaDI2NF9jdHgtPmRlY29kZV9waWNf Y291bnQrKzsKPiArCQljdHgtPmludF9jb25kID0gMTsKPiArCQl2NGwyX20ybV9idWZfZG9uZV9h bmRfam9iX2ZpbmlzaChkZXYtPm0ybV9kZXZfZGVjLCBjdHgtPm0ybV9jdHgsCj4gKwkJCQkJCSBW QjJfQlVGX1NUQVRFX0RPTkUpOwo+ICsJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY3R4LT5xdWV1 ZSk7Cj4gKwkJYnJlYWs7CgpbU2V2ZXJpdHk6IEhpZ2hdCkNvdWxkIG1hcmtpbmcgdGhlIGpvYiBm aW5pc2hlZCBoZXJlIGNhdXNlIGEgcmFjZSB3aXRoIGFtbF9zdG9wX3ZkZWNfaHc/CkNhbGxpbmcg djRsMl9tMm1fYnVmX2RvbmVfYW5kX2pvYl9maW5pc2ggc2lnbmFscyB0aGUgZnJhbWV3b3JrIHRv CmltbWVkaWF0ZWx5IGRlcXVldWUgYW5kIHN0YXJ0IHRoZSBuZXh0IGpvYi4gQ29uY3VycmVudGx5 LCB0aGUgYXdva2VuCnRocmVhZCBpbnNpZGUgYW1sX2gyNjRfZGVjX3J1biBwcm9jZWVkcyB0byBp c3N1ZSBhbiBhbWxfc3RvcF92ZGVjX2h3LApzaHV0dGluZyBkb3duIHRoZSBoYXJkd2FyZSB1bml0 IG91dCBmcm9tIHVuZGVyIHRoZSBuZXdseSBzY2hlZHVsZWQgam9iLgoKWyAuLi4gXQoKPiAraW50 IGFtbF9oMjY0X2luaXQodm9pZCAqcHJpdikKPiArewo+ICsJc3RydWN0IGFtbF92ZGVjX2N0eCAq Y3R4ID0gKHN0cnVjdCBhbWxfdmRlY19jdHggKilwcml2Owo+ICsJc3RydWN0IGFtbF92ZGVjX2h3 ICpkZWNfaHc7Cj4gKwlzdHJ1Y3QgYW1sX2gyNjRfY3R4ICpoMjY0X2N0eDsKPiArCWludCByZXQg PSAwOwo+ICsKPiArCWgyNjRfY3R4ID0ga3phbGxvY19vYmooKmgyNjRfY3R4LCBHRlBfS0VSTkVM KTsKPiArCWlmICghaDI2NF9jdHgpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJaDI2NF9j dHgtPnY0bDJfY3R4ID0gY3R4Owo+ICsJZGVjX2h3ID0gdmRlY19nZXRfaHcoY3R4LT5kZXYpOwo+ ICsJaWYgKCFkZWNfaHcpCj4gKwkJcmV0dXJuIC0xOwoKW1NldmVyaXR5OiBNZWRpdW1dCkRvZXMg dGhpcyBlcnJvciBwYXRoIGxlYWsgdGhlIGZyZXNobHkgYWxsb2NhdGVkIGgyNjRfY3R4IHN0cnVj dHVyZT8KSWYgdmRlY19nZXRfaHcgcmV0dXJucyBOVUxMLCB0aGUgZnVuY3Rpb24gcmV0dXJucyAt MSB3aXRob3V0IGNhbGxpbmcKa2ZyZWUgb24gaDI2NF9jdHguCgpbIC4uLiBdCgo+ICtpbnQgYW1s X2gyNjRfZGVjX3J1bih2b2lkICpwcml2KQo+ICt7Cj4gKwlzdHJ1Y3QgYW1sX3ZkZWNfY3R4ICpj dHggPSAoc3RydWN0IGFtbF92ZGVjX2N0eCAqKXByaXY7Cj4gKwlzdHJ1Y3QgYW1sX2gyNjRfY3R4 ICpoMjY0X2N0eCA9IChzdHJ1Y3QgYW1sX2gyNjRfY3R4ICopY3R4LT5jb2RlY19wcml2Owo+ICsJ c3RydWN0IGFtbF92ZGVjX2h3ICpkZWNfaHcgPSB2ZGVjX2dldF9odyhjdHgtPmRldik7Cj4gKwlp bnQgcmV0ID0gLTE7Cj4gKwlpbnQgaTsKClsgLi4uIF0KCj4gKwlhbWxfc3RhcnRfdmRlY19odyhk ZWNfaHcpOwo+ICsJaDI2NF9jdHgtPmluaXRfZmxhZyA9IDE7Cj4gKwo+ICsJcmVnbWFwX3dyaXRl KGRlY19ody0+bWFwW0RPU19CVVNdLCBEUEJfU1RBVFVTX1JFRywgSDI2NF9BQ1RJT05fU0VBUkNI X0hFQUQpOwo+ICsKPiArCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGN0 eC0+cXVldWUsIGN0eC0+aW50X2NvbmQsCj4gKwkJCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMo REVDT0RFUl9USU1FT1VUX01TKSk7CgpbU2V2ZXJpdHk6IEhpZ2hdCkRvZXMgc3luY2hyb25vdXNs eSBibG9ja2luZyBpbnNpZGUgZGV2aWNlX3J1biB2aW9sYXRlIHRoZSBNMk0gUmVxdWVzdCBBUEk/ CklmIHRoaXMgdGltZW91dCB0cmlnZ2VycywgZGV2aWNlX3J1biByZXR1cm5zIGFuZCBjYWxsZXJz IHR5cGljYWxseSBhc3N1bWUKdGhlIGpvYiBmYWlsZWQgYW5kIG1heSBmaW5pc2ggaXQuIEhvd2V2 ZXIsIHRoZSBkZWxheWVkIGhhcmR3YXJlIGludGVycnVwdApjb3VsZCBzdWJzZXF1ZW50bHkgZmly ZSBhbmQgY2FsbCB2NGwyX20ybV9idWZfZG9uZV9hbmRfam9iX2ZpbmlzaCBmb3IgdGhlCnNhbWUg am9iLCBkb3VibGUtZmluaXNoaW5nIHRoZSBjb250ZXh0IGFuZCBjb3JydXB0aW5nIE0yTSBmcmFt ZXdvcmsgc3RhdGUuCgotLSAKU2FzaGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9zYXNoaWtvLmRl di8jL3BhdGNoc2V0LzIwMjYwNzI0LWI0LXM0LXZkZWMtdXBzdHJlYW0tdjYtMC02MDcyYTdlZTc0 MjhAYW1sb2dpYy5jb20/cGFydD00CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpsaW51eC1hbWxvZ2ljIG1haWxpbmcgbGlzdApsaW51eC1hbWxvZ2ljQGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1hbWxvZ2ljCg==