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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EABFEC433FE for ; Tue, 28 Sep 2021 15:39:27 +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 A8C42611EF for ; Tue, 28 Sep 2021 15:39:27 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org A8C42611EF Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=collabora.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:Cc:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=thVXbRa9z4mJde48rRJjNtVimVoT2IJ81JTeyAjjnYI=; b=YIQ+JPpOvJ9ZKtd2juCA/MKzPf 7blqRRsvmc1WDLk6gKfvEoLexFspGHIqUzWWkk/6ZtJmdAx6lExIyrWSgSuF7ZmkgCL/JOBjU/KHF o9ibbbQWXTlfDd+O4WVn1fSoO/Vqd/u3W8OH1UGaxrq5V3okb2J3MupfSF51c/YFDO6TGnZSZwIgZ t+3+78lZVh1ul/5+7sK9Wnw2i/p6tcV6Sf0oS96oXSq0QW7t5ijC8rA22x9tLrIQAuUvf8c/056Kp ZDadpIbSKPZQGMk0H20+1rq4s23Y2jAkAeiVL2b1uiArB+vhc/xhE0Ldp6VnomqugJmsR5x3z/yF5 AZqoytAQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mVFCV-007nZE-EQ; Tue, 28 Sep 2021 15:39:23 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mVFCE-007nVm-Rz; Tue, 28 Sep 2021 15:39:12 +0000 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: andrzej.p) with ESMTPSA id B862B1F42139 Subject: Re: [PATCH v6 09/10] media: hantro: Support VP9 on the G2 core To: Nicolas Dufresne , linux-media@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-staging@lists.linux.dev Cc: Benjamin Gaignard , Boris Brezillon , Ezequiel Garcia , Fabio Estevam , Greg Kroah-Hartman , Hans Verkuil , Heiko Stuebner , Jernej Skrabec , Mauro Carvalho Chehab , NXP Linux Team , Pengutronix Kernel Team , Philipp Zabel , Sascha Hauer , Shawn Guo , kernel@collabora.com References: <20210927151958.24426-1-andrzej.p@collabora.com> <20210927151958.24426-10-andrzej.p@collabora.com> From: Andrzej Pietrasiewicz Message-ID: <532bfb30-c464-137e-1635-b6a868d5d7e6@collabora.com> Date: Tue, 28 Sep 2021 17:39:02 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210928_083907_383330_36BB5EE1 X-CRM114-Status: GOOD ( 30.68 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org SGkgTmljb2xhcywKClcgZG5pdSAyNy4wOS4yMDIxIG/CoDIxOjE3LCBOaWNvbGFzIER1ZnJlc25l IHBpc3plOgo+IExlIGx1bmRpIDI3IHNlcHRlbWJyZSAyMDIxIMOgIDE3OjE5ICswMjAwLCBBbmRy emVqIFBpZXRyYXNpZXdpY3ogYSDDqWNyaXTCoDoKPj4gVmVyaVNpbGljb24gSGFudHJvIEcyIGNv cmUgc3VwcG9ydHMgVlA5IGNvZGVjLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBBbmRyemVqIFBpZXRy YXNpZXdpY3ogPGFuZHJ6ZWoucEBjb2xsYWJvcmEuY29tPgo+PiBSZXZpZXdlZC1ieTogQmVuamFt aW4gR2FpZ25hcmQgPGJlbmphbWluLmdhaWduYXJkQGNvbGxhYm9yYS5jb20+Cj4+IC0tLQo+PiAg IGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vS2NvbmZpZyAgICAgICAgICB8ICAgMSArCj4+ ICAgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9NYWtlZmlsZSAgICAgICAgIHwgICA2ICst Cj4+ICAgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm8uaCAgICAgICAgIHwgIDI2 ICsKPj4gICBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19kcnYuYyAgICAgfCAg MTggKy0KPj4gICBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19nMl9yZWdzLmgg fCAgOTcgKysKPj4gICAuLi4vc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX3ZwOV9kZWMu YyAgfCA5NzggKysrKysrKysrKysrKysrKysrCj4+ICAgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hh bnRyby9oYW50cm9faHcuaCAgICAgIHwgIDY3ICsrCj4+ICAgZHJpdmVycy9zdGFnaW5nL21lZGlh L2hhbnRyby9oYW50cm9fdjRsMi5jICAgIHwgICA2ICsKPj4gICBkcml2ZXJzL3N0YWdpbmcvbWVk aWEvaGFudHJvL2hhbnRyb192cDkuYyAgICAgfCAyNDAgKysrKysKPj4gICBkcml2ZXJzL3N0YWdp bmcvbWVkaWEvaGFudHJvL2hhbnRyb192cDkuaCAgICAgfCAxMDMgKysKPj4gICBkcml2ZXJzL3N0 YWdpbmcvbWVkaWEvaGFudHJvL2lteDhtX3ZwdV9ody5jICAgfCAgMjIgKy0KPj4gICAxMSBmaWxl cyBjaGFuZ2VkLCAxNTYwIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCj4+ICAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX3ZwOV9k ZWMuYwo+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJv L2hhbnRyb192cDkuYwo+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvbWVk aWEvaGFudHJvL2hhbnRyb192cDkuaAo+Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5n L21lZGlhL2hhbnRyby9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9LY29u ZmlnCj4+IGluZGV4IDIwYjFmNmQ3YjY5Yy4uMDBhNTdkODhjOTJlIDEwMDY0NAo+PiAtLS0gYS9k cml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL0tjb25maWcKPj4gKysrIGIvZHJpdmVycy9zdGFn aW5nL21lZGlhL2hhbnRyby9LY29uZmlnCj4+IEBAIC05LDYgKzksNyBAQCBjb25maWcgVklERU9f SEFOVFJPCj4+ICAgCXNlbGVjdCBWSURFT0JVRjJfVk1BTExPQwo+PiAgIAlzZWxlY3QgVjRMMl9N RU0yTUVNX0RFVgo+PiAgIAlzZWxlY3QgVjRMMl9IMjY0Cj4+ICsJc2VsZWN0IFY0TDJfVlA5Cj4+ ICAgCWhlbHAKPj4gICAJICBTdXBwb3J0IGZvciB0aGUgSGFudHJvIElQIGJhc2VkIFZpZGVvIFBy b2Nlc3NpbmcgVW5pdHMgcHJlc2VudCBvbgo+PiAgIAkgIFJvY2tjaGlwIGFuZCBOWFAgaS5NWDhN IFNvQ3MsIHdoaWNoIGFjY2VsZXJhdGUgdmlkZW8gYW5kIGltYWdlCj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL21l ZGlhL2hhbnRyby9NYWtlZmlsZQo+PiBpbmRleCBmZTZkODQ4NzFkMDcuLjI4YWYwYTFlZTRiZiAx MDA2NDQKPj4gLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9NYWtlZmlsZQo+PiAr KysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL01ha2VmaWxlCj4+IEBAIC0xMCw5ICsx MCwxMCBAQCBoYW50cm8tdnB1LXkgKz0gXAo+PiAgIAkJaGFudHJvX2cxLm8gXAo+PiAgIAkJaGFu dHJvX2cxX2gyNjRfZGVjLm8gXAo+PiAgIAkJaGFudHJvX2cxX21wZWcyX2RlYy5vIFwKPj4gLQkJ aGFudHJvX2cyX2hldmNfZGVjLm8gXAo+PiAgIAkJaGFudHJvX2cxX3ZwOF9kZWMubyBcCj4+ICAg CQloYW50cm9fZzIubyBcCj4+ICsJCWhhbnRyb19nMl9oZXZjX2RlYy5vIFwKPj4gKwkJaGFudHJv X2cyX3ZwOV9kZWMubyBcCj4+ICAgCQlyb2NrY2hpcF92cHUyX2h3X2pwZWdfZW5jLm8gXAo+PiAg IAkJcm9ja2NoaXBfdnB1Ml9od19oMjY0X2RlYy5vIFwKPj4gICAJCXJvY2tjaGlwX3ZwdTJfaHdf bXBlZzJfZGVjLm8gXAo+PiBAQCAtMjEsNyArMjIsOCBAQCBoYW50cm8tdnB1LXkgKz0gXAo+PiAg IAkJaGFudHJvX2gyNjQubyBcCj4+ICAgCQloYW50cm9faGV2Yy5vIFwKPj4gICAJCWhhbnRyb19t cGVnMi5vIFwKPj4gLQkJaGFudHJvX3ZwOC5vCj4+ICsJCWhhbnRyb192cDgubyBcCj4+ICsJCWhh bnRyb192cDkubwo+PiAgIAo+PiAgIGhhbnRyby12cHUtJChDT05GSUdfVklERU9fSEFOVFJPX0lN WDhNKSArPSBcCj4+ICAgCQlpbXg4bV92cHVfaHcubwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9z dGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm8uaCBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50 cm8vaGFudHJvLmgKPj4gaW5kZXggZDkxZWIyYjFjNTA5Li4xZThjMWE2ZTNlYjAgMTAwNjQ0Cj4+ IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvLmgKPj4gKysrIGIvZHJp dmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm8uaAo+PiBAQCAtMzYsNiArMzYsNyBAQCBz dHJ1Y3QgaGFudHJvX3Bvc3Rwcm9jX29wczsKPj4gICAjZGVmaW5lIEhBTlRST19WUDhfREVDT0RF UglCSVQoMTcpCj4+ICAgI2RlZmluZSBIQU5UUk9fSDI2NF9ERUNPREVSCUJJVCgxOCkKPj4gICAj ZGVmaW5lIEhBTlRST19IRVZDX0RFQ09ERVIJQklUKDE5KQo+PiArI2RlZmluZSBIQU5UUk9fVlA5 X0RFQ09ERVIJQklUKDIwKQo+PiAgICNkZWZpbmUgSEFOVFJPX0RFQ09ERVJTCQkweGZmZmYwMDAw Cj4+ICAgCj4+ICAgLyoqCj4+IEBAIC0xMTAsNiArMTExLDcgQEAgZW51bSBoYW50cm9fY29kZWNf bW9kZSB7Cj4+ICAgCUhBTlRST19NT0RFX01QRUcyX0RFQywKPj4gICAJSEFOVFJPX01PREVfVlA4 X0RFQywKPj4gICAJSEFOVFJPX01PREVfSEVWQ19ERUMsCj4+ICsJSEFOVFJPX01PREVfVlA5X0RF QywKPj4gICB9Owo+PiAgIAo+PiAgIC8qCj4+IEBAIC0yMjMsNiArMjI1LDcgQEAgc3RydWN0IGhh bnRyb19kZXYgewo+PiAgICAqIEBtcGVnMl9kZWM6CQlNUEVHLTItZGVjb2RpbmcgY29udGV4dC4K Pj4gICAgKiBAdnA4X2RlYzoJCVZQOC1kZWNvZGluZyBjb250ZXh0Lgo+PiAgICAqIEBoZXZjX2Rl YzoJCUhFVkMtZGVjb2RpbmcgY29udGV4dC4KPj4gKyAqIEB2cDlfZGVjOgkJVlA5LWRlY29kaW5n IGNvbnRleHQuCj4+ICAgICovCj4+ICAgc3RydWN0IGhhbnRyb19jdHggewo+PiAgIAlzdHJ1Y3Qg aGFudHJvX2RldiAqZGV2Owo+PiBAQCAtMjUwLDYgKzI1Myw3IEBAIHN0cnVjdCBoYW50cm9fY3R4 IHsKPj4gICAJCXN0cnVjdCBoYW50cm9fbXBlZzJfZGVjX2h3X2N0eCBtcGVnMl9kZWM7Cj4+ICAg CQlzdHJ1Y3QgaGFudHJvX3ZwOF9kZWNfaHdfY3R4IHZwOF9kZWM7Cj4+ICAgCQlzdHJ1Y3QgaGFu dHJvX2hldmNfZGVjX2h3X2N0eCBoZXZjX2RlYzsKPj4gKwkJc3RydWN0IGhhbnRyb192cDlfZGVj X2h3X2N0eCB2cDlfZGVjOwo+PiAgIAl9Owo+PiAgIH07Cj4+ICAgCj4+IEBAIC0yOTksNiArMzAz LDIyIEBAIHN0cnVjdCBoYW50cm9fcG9zdHByb2NfcmVncyB7Cj4+ICAgCXN0cnVjdCBoYW50cm9f cmVnIGRpc3BsYXlfd2lkdGg7Cj4+ICAgfTsKPj4gICAKPj4gK3N0cnVjdCBoYW50cm9fdnA5X2Rl Y29kZWRfYnVmZmVyX2luZm8gewo+PiArCS8qIEluZm8gbmVlZGVkIHdoZW4gdGhlIGRlY29kZWQg ZnJhbWUgc2VydmVzIGFzIGEgcmVmZXJlbmNlIGZyYW1lLiAqLwo+PiArCXVuc2lnbmVkIHNob3J0 IHdpZHRoOwo+PiArCXVuc2lnbmVkIHNob3J0IGhlaWdodDsKPj4gKwl1MzIgYml0X2RlcHRoIDog NDsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBoYW50cm9fZGVjb2RlZF9idWZmZXIgewo+PiArCS8q IE11c3QgYmUgdGhlIGZpcnN0IGZpZWxkIGluIHRoaXMgc3RydWN0LiAqLwo+PiArCXN0cnVjdCB2 NGwyX20ybV9idWZmZXIgYmFzZTsKPj4gKwo+PiArCXVuaW9uIHsKPj4gKwkJc3RydWN0IGhhbnRy b192cDlfZGVjb2RlZF9idWZmZXJfaW5mbyB2cDk7Cj4+ICsJfTsKPj4gK307Cj4+ICsKPj4gICAv KiBMb2dnaW5nIGhlbHBlcnMgKi8KPj4gICAKPj4gICAvKioKPj4gQEAgLTQzNiw2ICs0NTYsMTIg QEAgaGFudHJvX2dldF9kZWNfYnVmX2FkZHIoc3RydWN0IGhhbnRyb19jdHggKmN0eCwgc3RydWN0 IHZiMl9idWZmZXIgKnZiKQo+PiAgIAlyZXR1cm4gdmIyX2RtYV9jb250aWdfcGxhbmVfZG1hX2Fk ZHIodmIsIDApOwo+PiAgIH0KPj4gICAKPj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhhbnRyb19k ZWNvZGVkX2J1ZmZlciAqCj4+ICt2YjJfdG9faGFudHJvX2RlY29kZWRfYnVmKHN0cnVjdCB2YjJf YnVmZmVyICpidWYpCj4+ICt7Cj4+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihidWYsIHN0cnVjdCBo YW50cm9fZGVjb2RlZF9idWZmZXIsIGJhc2UudmIudmIyX2J1Zik7Cj4+ICt9Cj4+ICsKPj4gICB2 b2lkIGhhbnRyb19wb3N0cHJvY19kaXNhYmxlKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpOwo+PiAg IHZvaWQgaGFudHJvX3Bvc3Rwcm9jX2VuYWJsZShzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KTsKPj4g ICB2b2lkIGhhbnRyb19wb3N0cHJvY19mcmVlKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpOwo+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9fZHJ2LmMgYi9k cml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19kcnYuYwo+PiBpbmRleCA4YTJlZGQ2 N2YyYzYuLjgwMGM4ODc5YWVlMCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlh L2hhbnRyby9oYW50cm9fZHJ2LmMKPj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRy by9oYW50cm9fZHJ2LmMKPj4gQEAgLTIzMiw3ICsyMzIsNyBAQCBxdWV1ZV9pbml0KHZvaWQgKnBy aXYsIHN0cnVjdCB2YjJfcXVldWUgKnNyY192cSwgc3RydWN0IHZiMl9xdWV1ZSAqZHN0X3ZxKQo+ PiAgIAlkc3RfdnEtPmlvX21vZGVzID0gVkIyX01NQVAgfCBWQjJfRE1BQlVGOwo+PiAgIAlkc3Rf dnEtPmRydl9wcml2ID0gY3R4Owo+PiAgIAlkc3RfdnEtPm9wcyA9ICZoYW50cm9fcXVldWVfb3Bz Owo+PiAtCWRzdF92cS0+YnVmX3N0cnVjdF9zaXplID0gc2l6ZW9mKHN0cnVjdCB2NGwyX20ybV9i dWZmZXIpOwo+PiArCWRzdF92cS0+YnVmX3N0cnVjdF9zaXplID0gc2l6ZW9mKHN0cnVjdCBoYW50 cm9fZGVjb2RlZF9idWZmZXIpOwo+PiAgIAlkc3RfdnEtPnRpbWVzdGFtcF9mbGFncyA9IFY0TDJf QlVGX0ZMQUdfVElNRVNUQU1QX0NPUFk7Cj4+ICAgCWRzdF92cS0+bG9jayA9ICZjdHgtPmRldi0+ dnB1X211dGV4Owo+PiAgIAlkc3RfdnEtPmRldiA9IGN0eC0+ZGV2LT52NGwyX2Rldi5kZXY7Cj4+ IEBAIC0yNjYsNiArMjY2LDEyIEBAIHN0YXRpYyBpbnQgaGFudHJvX3RyeV9jdHJsKHN0cnVjdCB2 NGwyX2N0cmwgKmN0cmwpCj4+ICAgCQlpZiAoc3BzLT5mbGFncyAmIFY0TDJfSEVWQ19TUFNfRkxB R19TQ0FMSU5HX0xJU1RfRU5BQkxFRCkKPj4gICAJCQkvKiBObyBzY2FsaW5nIHN1cHBvcnQgKi8K Pj4gICAJCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9IGVsc2UgaWYgKGN0cmwtPmlkID09IFY0TDJf Q0lEX1NUQVRFTEVTU19WUDlfRlJBTUUpIHsKPj4gKwkJY29uc3Qgc3RydWN0IHY0bDJfY3RybF92 cDlfZnJhbWUgKmRlY19wYXJhbXMgPSBjdHJsLT5wX25ldy5wX3ZwOV9mcmFtZTsKPj4gKwo+PiAr CQkvKiBXZSBvbmx5IHN1cHBvcnQgcHJvZmlsZSAwICovCj4+ICsJCWlmIChkZWNfcGFyYW1zLT5w cm9maWxlICE9IDApCj4+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPj4gICAJfQo+PiAgIAlyZXR1cm4g MDsKPj4gICB9Cj4+IEBAIC00NTksNiArNDY1LDE2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGFu dHJvX2N0cmwgY29udHJvbHNbXSA9IHsKPj4gICAJCQkuc3RlcCA9IDEsCj4+ICAgCQkJLm9wcyA9 ICZoYW50cm9faGV2Y19jdHJsX29wcywKPj4gICAJCX0sCj4+ICsJfSwgewo+PiArCQkuY29kZWMg PSBIQU5UUk9fVlA5X0RFQ09ERVIsCj4+ICsJCS5jZmcgPSB7Cj4+ICsJCQkuaWQgPSBWNEwyX0NJ RF9TVEFURUxFU1NfVlA5X0ZSQU1FLAo+PiArCQl9LAo+PiArCX0sIHsKPj4gKwkJLmNvZGVjID0g SEFOVFJPX1ZQOV9ERUNPREVSLAo+PiArCQkuY2ZnID0gewo+PiArCQkJLmlkID0gVjRMMl9DSURf U1RBVEVMRVNTX1ZQOV9DT01QUkVTU0VEX0hEUiwKPj4gKwkJfSwKPj4gICAJfSwKPj4gICB9Owo+ PiAgIAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9f ZzJfcmVncy5oIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9fZzJfcmVncy5o Cj4+IGluZGV4IDBhYzBiYTM3NWU4MC4uMjFjYTIxNjQ4NjE0IDEwMDY0NAo+PiAtLS0gYS9kcml2 ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19nMl9yZWdzLmgKPj4gKysrIGIvZHJpdmVy cy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9fZzJfcmVncy5oCj4+IEBAIC0yOCw2ICsyOCw3 IEBACj4+ICAgI2RlZmluZSBHMl9SRUdfSU5URVJSVVBUX0RFQ19FCQlCSVQoMCkKPj4gICAKPj4g ICAjZGVmaW5lIEhFVkNfREVDX01PREUJCQkweGMKPj4gKyNkZWZpbmUgVlA5X0RFQ19NT0RFCQkJ MHhkCj4+ICAgCj4+ICAgI2RlZmluZSBCVVNfV0lEVEhfMzIJCQkwCj4+ICAgI2RlZmluZSBCVVNf V0lEVEhfNjQJCQkxCj4+IEBAIC00OSw2ICs1MCw3IEBACj4+ICAgI2RlZmluZSBnMl9waWNfaGVp Z2h0X2luX2NicwlHMl9ERUNfUkVHKDQsIDYsICAweDFmZmYpCj4+ICAgI2RlZmluZSBnMl9udW1f cmVmX2ZyYW1lcwlHMl9ERUNfUkVHKDQsIDAsICAweDFmKQo+PiAgIAo+PiArI2RlZmluZSBnMl9z dGFydF9iaXQJCUcyX0RFQ19SRUcoNSwgMjUsIDB4N2YpCj4+ICAgI2RlZmluZSBnMl9zY2FsaW5n X2xpc3RfZQlHMl9ERUNfUkVHKDUsIDI0LCAweDEpCj4+ICAgI2RlZmluZSBnMl9jYl9xcF9vZmZz ZXQJCUcyX0RFQ19SRUcoNSwgMTksIDB4MWYpCj4+ICAgI2RlZmluZSBnMl9jcl9xcF9vZmZzZXQJ CUcyX0RFQ19SRUcoNSwgMTQsIDB4MWYpCj4+IEBAIC04NCw2ICs4Niw3IEBACj4+ICAgI2RlZmlu ZSBnMl9iaXRfZGVwdGhfeV9taW51czgJRzJfREVDX1JFRyg4LCA2LCAgMHgzKQo+PiAgICNkZWZp bmUgZzJfYml0X2RlcHRoX2NfbWludXM4CUcyX0RFQ19SRUcoOCwgNCwgIDB4MykKPj4gICAjZGVm aW5lIGcyX291dHB1dF84X2JpdHMJRzJfREVDX1JFRyg4LCAzLCAgMHgxKQo+PiArI2RlZmluZSBn Ml9vdXRwdXRfZm9ybWF0CUcyX0RFQ19SRUcoOCwgMCwgIDB4NykKPj4gICAKPj4gICAjZGVmaW5l IGcyX3JlZmlkeDFfYWN0aXZlCUcyX0RFQ19SRUcoOSwgMTksIDB4MWYpCj4+ICAgI2RlZmluZSBn Ml9yZWZpZHgwX2FjdGl2ZQlHMl9ERUNfUkVHKDksIDE0LCAweDFmKQo+PiBAQCAtOTYsNiArOTks MTQgQEAKPj4gICAjZGVmaW5lIGcyX3RpbGVfZQkJRzJfREVDX1JFRygxMCwgMSwgIDB4MSkKPj4g ICAjZGVmaW5lIGcyX2VudHJvcHlfc3luY19lCUcyX0RFQ19SRUcoMTAsIDAsICAweDEpCj4+ICAg Cj4+ICsjZGVmaW5lIHZwOV90cmFuc2Zvcm1fbW9kZQlHMl9ERUNfUkVHKDExLCAyNywgMHg3KQo+ PiArI2RlZmluZSB2cDlfZmlsdF9zaGFycG5lc3MJRzJfREVDX1JFRygxMSwgMjEsIDB4NykKPj4g KyNkZWZpbmUgdnA5X21jb21wX2ZpbHRfdHlwZQlHMl9ERUNfUkVHKDExLCAgOCwgMHg3KQo+PiAr I2RlZmluZSB2cDlfaGlnaF9wcmVjX212X2UJRzJfREVDX1JFRygxMSwgIDcsIDB4MSkKPj4gKyNk ZWZpbmUgdnA5X2NvbXBfcHJlZF9tb2RlCUcyX0RFQ19SRUcoMTEsICA0LCAweDMpCj4+ICsjZGVm aW5lIHZwOV9ncmVmX3NpZ25fYmlhcwlHMl9ERUNfUkVHKDExLCAgMiwgMHgxKQo+PiArI2RlZmlu ZSB2cDlfYXJlZl9zaWduX2JpYXMJRzJfREVDX1JFRygxMSwgIDAsIDB4MSkKPj4gKwo+PiAgICNk ZWZpbmUgZzJfcmVmZXJfbHRlcm1fZQlHMl9ERUNfUkVHKDEyLCAxNiwgMHhmZmZmKQo+PiAgICNk ZWZpbmUgZzJfbWluX2NiX3NpemUJCUcyX0RFQ19SRUcoMTIsIDEzLCAweDcpCj4+ICAgI2RlZmlu ZSBnMl9tYXhfY2Jfc2l6ZQkJRzJfREVDX1JFRygxMiwgMTAsIDB4NykKPj4gQEAgLTE1NCw2ICsx NjUsNTAgQEAKPj4gICAjZGVmaW5lIGcyX3BhcnRpYWxfY3RiX3kJRzJfREVDX1JFRygyMCwgMzAs IDB4MSkKPj4gICAjZGVmaW5lIGcyX3BpY193aWR0aF80eDQJRzJfREVDX1JFRygyMCwgMTYsIDB4 ZmZmKQo+PiAgICNkZWZpbmUgZzJfcGljX2hlaWdodF80eDQJRzJfREVDX1JFRygyMCwgMCwgIDB4 ZmZmKQo+PiArCj4+ICsjZGVmaW5lIHZwOV9xcF9kZWx0YV95X2RjCUcyX0RFQ19SRUcoMTMsIDIz LCAweDNmKQo+PiArI2RlZmluZSB2cDlfcXBfZGVsdGFfY2hfZGMJRzJfREVDX1JFRygxMywgMTcs IDB4M2YpCj4+ICsjZGVmaW5lIHZwOV9xcF9kZWx0YV9jaF9hYwlHMl9ERUNfUkVHKDEzLCAxMSwg MHgzZikKPj4gKyNkZWZpbmUgdnA5X2xhc3Rfc2lnbl9iaWFzCUcyX0RFQ19SRUcoMTMsIDEwLCAw eDEpCj4+ICsjZGVmaW5lIHZwOV9sb3NzbGVzc19lCQlHMl9ERUNfUkVHKDEzLCAgOSwgMHgxKQo+ PiArI2RlZmluZSB2cDlfY29tcF9wcmVkX3Zhcl9yZWYxCUcyX0RFQ19SRUcoMTMsICA3LCAweDMp Cj4+ICsjZGVmaW5lIHZwOV9jb21wX3ByZWRfdmFyX3JlZjAJRzJfREVDX1JFRygxMywgIDUsIDB4 MykKPj4gKyNkZWZpbmUgdnA5X2NvbXBfcHJlZF9maXhlZF9yZWYJRzJfREVDX1JFRygxMywgIDMs IDB4MykKPj4gKyNkZWZpbmUgdnA5X3NlZ21lbnRfdGVtcF91cGRfZQlHMl9ERUNfUkVHKDEzLCAg MiwgMHgxKQo+PiArI2RlZmluZSB2cDlfc2VnbWVudF91cGRfZQlHMl9ERUNfUkVHKDEzLCAgMSwg MHgxKQo+PiArI2RlZmluZSB2cDlfc2VnbWVudF9lCQlHMl9ERUNfUkVHKDEzLCAgMCwgMHgxKQo+ PiArCj4+ICsjZGVmaW5lIHZwOV9maWx0X2xldmVsCQlHMl9ERUNfUkVHKDE0LCAxOCwgMHgzZikK Pj4gKyNkZWZpbmUgdnA5X3JlZnBpY19zZWcwCQlHMl9ERUNfUkVHKDE0LCAxNSwgMHg3KQo+PiAr I2RlZmluZSB2cDlfc2tpcF9zZWcwCQlHMl9ERUNfUkVHKDE0LCAxNCwgMHgxKQo+PiArI2RlZmlu ZSB2cDlfZmlsdF9sZXZlbF9zZWcwCUcyX0RFQ19SRUcoMTQsICA4LCAweDNmKQo+PiArI2RlZmlu ZSB2cDlfcXVhbnRfc2VnMAkJRzJfREVDX1JFRygxNCwgIDAsIDB4ZmYpCj4+ICsKPj4gKyNkZWZp bmUgdnA5X3JlZnBpY19zZWcxCQlHMl9ERUNfUkVHKDE1LCAxNSwgMHg3KQo+PiArI2RlZmluZSB2 cDlfc2tpcF9zZWcxCQlHMl9ERUNfUkVHKDE1LCAxNCwgMHgxKQo+PiArI2RlZmluZSB2cDlfZmls dF9sZXZlbF9zZWcxCUcyX0RFQ19SRUcoMTUsICA4LCAweDNmKQo+PiArI2RlZmluZSB2cDlfcXVh bnRfc2VnMQkJRzJfREVDX1JFRygxNSwgIDAsIDB4ZmYpCj4+ICsKPj4gKyNkZWZpbmUgdnA5X3Jl ZnBpY19zZWcyCQlHMl9ERUNfUkVHKDE2LCAxNSwgMHg3KQo+PiArI2RlZmluZSB2cDlfc2tpcF9z ZWcyCQlHMl9ERUNfUkVHKDE2LCAxNCwgMHgxKQo+PiArI2RlZmluZSB2cDlfZmlsdF9sZXZlbF9z ZWcyCUcyX0RFQ19SRUcoMTYsICA4LCAweDNmKQo+PiArI2RlZmluZSB2cDlfcXVhbnRfc2VnMgkJ RzJfREVDX1JFRygxNiwgIDAsIDB4ZmYpCj4+ICsKPj4gKyNkZWZpbmUgdnA5X3JlZnBpY19zZWcz CQlHMl9ERUNfUkVHKDE3LCAxNSwgMHg3KQo+PiArI2RlZmluZSB2cDlfc2tpcF9zZWczCQlHMl9E RUNfUkVHKDE3LCAxNCwgMHgxKQo+PiArI2RlZmluZSB2cDlfZmlsdF9sZXZlbF9zZWczCUcyX0RF Q19SRUcoMTcsICA4LCAweDNmKQo+PiArI2RlZmluZSB2cDlfcXVhbnRfc2VnMwkJRzJfREVDX1JF RygxNywgIDAsIDB4ZmYpCj4+ICsKPj4gKyNkZWZpbmUgdnA5X3JlZnBpY19zZWc0CQlHMl9ERUNf UkVHKDE4LCAxNSwgMHg3KQo+PiArI2RlZmluZSB2cDlfc2tpcF9zZWc0CQlHMl9ERUNfUkVHKDE4 LCAxNCwgMHgxKQo+PiArI2RlZmluZSB2cDlfZmlsdF9sZXZlbF9zZWc0CUcyX0RFQ19SRUcoMTgs ICA4LCAweDNmKQo+PiArI2RlZmluZSB2cDlfcXVhbnRfc2VnNAkJRzJfREVDX1JFRygxOCwgIDAs IDB4ZmYpCj4+ICsKPj4gKyNkZWZpbmUgdnA5X3JlZnBpY19zZWc1CQlHMl9ERUNfUkVHKDE5LCAx NSwgMHg3KQo+PiArI2RlZmluZSB2cDlfc2tpcF9zZWc1CQlHMl9ERUNfUkVHKDE5LCAxNCwgMHgx KQo+PiArI2RlZmluZSB2cDlfZmlsdF9sZXZlbF9zZWc1CUcyX0RFQ19SRUcoMTksICA4LCAweDNm KQo+PiArI2RlZmluZSB2cDlfcXVhbnRfc2VnNQkJRzJfREVDX1JFRygxOSwgIDAsIDB4ZmYpCj4+ ICsKPj4gICAjZGVmaW5lIGhldmNfY3VyX3BvY18wMAkJRzJfREVDX1JFRyg0NiwgMjQsIDB4ZmYp Cj4+ICAgI2RlZmluZSBoZXZjX2N1cl9wb2NfMDEJCUcyX0RFQ19SRUcoNDYsIDE2LCAweGZmKQo+ PiAgICNkZWZpbmUgaGV2Y19jdXJfcG9jXzAyCQlHMl9ERUNfUkVHKDQ2LCA4LCAgMHhmZikKPj4g QEAgLTE3NCw2ICsyMjksNDQgQEAKPj4gICAjZGVmaW5lIGhldmNfY3VyX3BvY18xNAkJRzJfREVD X1JFRyg0OSwgOCwgIDB4ZmYpCj4+ICAgI2RlZmluZSBoZXZjX2N1cl9wb2NfMTUJCUcyX0RFQ19S RUcoNDksIDAsICAweGZmKQo+PiAgIAo+PiArI2RlZmluZSB2cDlfcmVmcGljX3NlZzYJCUcyX0RF Q19SRUcoMzEsIDE1LCAweDcpCj4+ICsjZGVmaW5lIHZwOV9za2lwX3NlZzYJCUcyX0RFQ19SRUco MzEsIDE0LCAweDEpCj4+ICsjZGVmaW5lIHZwOV9maWx0X2xldmVsX3NlZzYJRzJfREVDX1JFRygz MSwgIDgsIDB4M2YpCj4+ICsjZGVmaW5lIHZwOV9xdWFudF9zZWc2CQlHMl9ERUNfUkVHKDMxLCAg MCwgMHhmZikKPj4gKwo+PiArI2RlZmluZSB2cDlfcmVmcGljX3NlZzcJCUcyX0RFQ19SRUcoMzIs IDE1LCAweDcpCj4+ICsjZGVmaW5lIHZwOV9za2lwX3NlZzcJCUcyX0RFQ19SRUcoMzIsIDE0LCAw eDEpCj4+ICsjZGVmaW5lIHZwOV9maWx0X2xldmVsX3NlZzcJRzJfREVDX1JFRygzMiwgIDgsIDB4 M2YpCj4+ICsjZGVmaW5lIHZwOV9xdWFudF9zZWc3CQlHMl9ERUNfUkVHKDMyLCAgMCwgMHhmZikK Pj4gKwo+PiArI2RlZmluZSB2cDlfbHJlZl93aWR0aAkJRzJfREVDX1JFRygzMywgMTYsIDB4ZmZm ZikKPj4gKyNkZWZpbmUgdnA5X2xyZWZfaGVpZ2h0CQlHMl9ERUNfUkVHKDMzLCAgMCwgMHhmZmZm KQo+PiArCj4+ICsjZGVmaW5lIHZwOV9ncmVmX3dpZHRoCQlHMl9ERUNfUkVHKDM0LCAxNiwgMHhm ZmZmKQo+PiArI2RlZmluZSB2cDlfZ3JlZl9oZWlnaHQJCUcyX0RFQ19SRUcoMzQsICAwLCAweGZm ZmYpCj4+ICsKPj4gKyNkZWZpbmUgdnA5X2FyZWZfd2lkdGgJCUcyX0RFQ19SRUcoMzUsIDE2LCAw eGZmZmYpCj4+ICsjZGVmaW5lIHZwOV9hcmVmX2hlaWdodAkJRzJfREVDX1JFRygzNSwgIDAsIDB4 ZmZmZikKPj4gKwo+PiArI2RlZmluZSB2cDlfbHJlZl9ob3Jfc2NhbGUJRzJfREVDX1JFRygzNiwg MTYsIDB4ZmZmZikKPj4gKyNkZWZpbmUgdnA5X2xyZWZfdmVyX3NjYWxlCUcyX0RFQ19SRUcoMzYs ICAwLCAweGZmZmYpCj4+ICsKPj4gKyNkZWZpbmUgdnA5X2dyZWZfaG9yX3NjYWxlCUcyX0RFQ19S RUcoMzcsIDE2LCAweGZmZmYpCj4+ICsjZGVmaW5lIHZwOV9ncmVmX3Zlcl9zY2FsZQlHMl9ERUNf UkVHKDM3LCAgMCwgMHhmZmZmKQo+PiArCj4+ICsjZGVmaW5lIHZwOV9hcmVmX2hvcl9zY2FsZQlH Ml9ERUNfUkVHKDM4LCAxNiwgMHhmZmZmKQo+PiArI2RlZmluZSB2cDlfYXJlZl92ZXJfc2NhbGUJ RzJfREVDX1JFRygzOCwgIDAsIDB4ZmZmZikKPj4gKwo+PiArI2RlZmluZSB2cDlfZmlsdF9yZWZf YWRqXzAJRzJfREVDX1JFRyg0NiwgMjQsIDB4N2YpCj4+ICsjZGVmaW5lIHZwOV9maWx0X3JlZl9h ZGpfMQlHMl9ERUNfUkVHKDQ2LCAxNiwgMHg3ZikKPj4gKyNkZWZpbmUgdnA5X2ZpbHRfcmVmX2Fk al8yCUcyX0RFQ19SRUcoNDYsICA4LCAweDdmKQo+PiArI2RlZmluZSB2cDlfZmlsdF9yZWZfYWRq XzMJRzJfREVDX1JFRyg0NiwgIDAsIDB4N2YpCj4+ICsKPj4gKyNkZWZpbmUgdnA5X2ZpbHRfbWJf YWRqXzAJRzJfREVDX1JFRyg0NywgMjQsIDB4N2YpCj4+ICsjZGVmaW5lIHZwOV9maWx0X21iX2Fk al8xCUcyX0RFQ19SRUcoNDcsIDE2LCAweDdmKQo+PiArI2RlZmluZSB2cDlfZmlsdF9tYl9hZGpf MglHMl9ERUNfUkVHKDQ3LCAgOCwgMHg3ZikKPj4gKyNkZWZpbmUgdnA5X2ZpbHRfbWJfYWRqXzMJ RzJfREVDX1JFRyg0NywgIDAsIDB4N2YpCj4+ICsKPj4gICAjZGVmaW5lIGcyX2FwZl90aHJlc2hv bGQJRzJfREVDX1JFRyg1NSwgMCwgMHhmZmZmKQo+PiAgIAo+PiAgICNkZWZpbmUgZzJfY2xrX2dh dGVfZQkJRzJfREVDX1JFRyg1OCwgMTYsIDB4MSkKPj4gQEAgLTE4Niw2ICsyNzksOCBAQAo+PiAg IAo+PiAgICNkZWZpbmUgRzJfQUREUl9EU1QJCShHMl9TV1JFRyg2NSkpCj4+ICAgI2RlZmluZSBH Ml9SRUdfQUREUl9SRUYoaSkJKEcyX1NXUkVHKDY3KSAgKyAoKGkpICogMHg4KSkKPj4gKyNkZWZp bmUgVlA5X0FERFJfU0VHTUVOVF9XUklURQkoRzJfU1dSRUcoNzkpKQo+PiArI2RlZmluZSBWUDlf QUREUl9TRUdNRU5UX1JFQUQJKEcyX1NXUkVHKDgxKSkKPj4gICAjZGVmaW5lIEcyX0FERFJfRFNU X0NIUgkJKEcyX1NXUkVHKDk5KSkKPj4gICAjZGVmaW5lIEcyX1JFR19DSFJfUkVGKGkpCShHMl9T V1JFRygxMDEpICsgKChpKSAqIDB4OCkpCj4+ICAgI2RlZmluZSBHMl9BRERSX0RTVF9NVgkJKEcy X1NXUkVHKDEzMykpCj4+IEBAIC0xOTMsNiArMjg4LDggQEAKPj4gICAjZGVmaW5lIEcyX0FERFJf VElMRV9TSVpFCShHMl9TV1JFRygxNjcpKQo+IAo+IEkgdGhpbmsgdGhpcyBuYW1lIGNhbiBiZSBp bXByb3ZlZC4gV2UgZG9uJ3Qgc2F5ICJHMiBhZGRyZXNzIHRpbGUgc2l6ZSIsIGJ1dCAiRzIKPiB0 aWxlIHNpemUgYWRkcmVzcyIuIEFsc28sIHRoZXJlIGlzIG11bHRpcGxlIHRpbGUgc2l6ZXMsIHNv IEknZCBwcmVmZXIgaWYgd2Ugc2F5Cj4gIkcyIHRpbGUgc2l6ZXMgYWRkcmVzcyIuIE1heSBJIHN1 Z2dlc3QgdGhpcyBuYW1pbmcgdGhlbiA/Cj4gCj4gICAgI2RlZmluZSBHMl9USUxFX1NJWkVTX0FE RFJfTFNCIC4uLgo+IAo+IEFzIGEgcmVmZXJlbmNlLCBWU0kgbmFtZXMgdGhpcyBzd190aWxlX2Jh c2VfbHNiIC4gVGhhdCBkZW5vdGVzIHRoYXQgdGhlIG5hbWUKPiBhbHNvIGZhaWxzIHRvIGNhcHR1 cmUgdGhhdCB0aGlzIGlzIG9ubHkgdGhlIGxvd2VyIDMyYml0IG9mIHRoZSB0aWxlX3NpemVzCj4g YWRkcmVzcyBhbmQgdGhhdCBpZiBzb21lb25lIGhhdmUgYSBHMiBjb3JlIG9uIGEgbGFyZ2VyIGFt b3VudCBvZiBSQU0gaXQgd2lsbAo+IG5lZWQgdG8gZmlndXJlIHdoZXJlIGlzIHRoZSBzZWNvbmQg aGFsZiAoc3BvaWxlciwgaXQgbG9va3MgbGlrZSBpdCdzCj4gRzFfU1dSRUcoMTY2KSApLiBBbnl3 YXksIHRoYXQncyB3aHkgSSdtIHByb3Bvc2luZyBkcm9wcGluZyBMU0IgaW4gdGhlcmUuIE5vdAo+ IHN1cmUgYmV0d2VlbiBMU0JfQUREUiBvciBBRERSX0xTQi4KClRoZSBMU0IvTVNCIHBvaW50IGlz IGluZGVlZCB2YWxpZC4gSSB0aGluayBJIHdpbGwgY2hhbmdlIGhhbnRyb193cml0ZV9hZGRyKCkg dG8Kc29tZXRoaW5nIG9uIHRoZSBsaW5lcyBvZjoKCnN0YXRpYyBpbmxpbmUgdm9pZCBoYW50cm9f d3JpdGVfYWRkcihzdHJ1Y3QgaGFudHJvX2RldiAqdnB1LAoJCQkJICAgICB1bnNpZ25lZCBsb25n IG9mZnNldCwKCQkJCSAgICAgZG1hX2FkZHJfdCBhZGRyKQp7Cgl2ZHB1X3dyaXRlKHZwdSwgYWRk ciAmIDB4ZmZmZmZmZmYsIG9mZnNldCk7CiNpZmRlZiBDT05GSUdfQVJDSF9ETUFfQUREUl9UXzY0 QklUCgl2ZHB1X3dyaXRlKHZwdSwgKGFkZHIgPj4gMzIpICYgMHhmZmZmZmZmZiwgb2Zmc2V0ICsg NCk7CiNlbmRpZgp9CgpUaGVuIHRoZSAjZGVmaW5lcyB3aWxsIG5vdCBuZWVkIHRoZSBfTFNCL19N U0Igc3VmZml4ZXMgYXQgYWxsCihhbmQgd2lsbCByZW1haW4gYXMgdGhleSBhcmUpIGFuZCB0aGUg bW9kaWZpZWQgZnVuY3Rpb24gd2lsbApzdGlsbCBkbyB0aGUgcmlnaHQgdGhpbmcuCgpSZWdhcmRz LAoKQW5kcnplagoKPiAKPj4gICAjZGVmaW5lIEcyX0FERFJfU1RSCQkoRzJfU1dSRUcoMTY5KSkK Pj4gICAjZGVmaW5lIEhFVkNfU0NBTElOR19MSVNUCShHMl9TV1JFRygxNzEpKQo+PiArI2RlZmlu ZSBWUDlfQUREUl9DVFIJCShHMl9TV1JFRygxNzEpKQo+PiArI2RlZmluZSBWUDlfQUREUl9QUk9C UwkJKEcyX1NXUkVHKDE3MykpCj4+ICAgI2RlZmluZSBHMl9SQVNURVJfU0NBTgkJKEcyX1NXUkVH KDE3NSkpCj4+ICAgI2RlZmluZSBHMl9SQVNURVJfU0NBTl9DSFIJKEcyX1NXUkVHKDE3NykpCj4+ ICAgI2RlZmluZSBHMl9USUxFX0ZJTFRFUgkJKEcyX1NXUkVHKDE3OSkpCj4gCj4gVGhpcyBvbmUg aXMgYWxzbyBhbiBhZGRyZXNzLCBidXQgZG9lcyBub3Qgc2F5IHNvIGF0IGFsbC4gSXQncyBhbHNv IHRoZSBMU0IsIHRoZQo+IE1TQiBpcyBSRUcgMTc4LiBWU0kgZGVzY3JpYmVzIGl0IGFzICJCYXNl IGFkZHJlc3MgTFNCIHRvIHN0b3JlL3JlYWQgZmlsdGVyaW5nCj4gY29lZmZpZW50cyBvZiBjdXJy ZW50IHBpY3R1cmUgYXQgdGlsZSBib3JkZXIuIi4gSSB0aGluayBzb21lIGNsZWFudXAgd291bGQg YmUKPiBuaWNlIGhlcmUuIFRoZXJlIGlzIGxpa2VseSBhIGxvdCBvZiBvdGhlciB3ZWlyZGx5IG5h bWVkIHJlZ2lzdGVycyBoZXJlIGFuZCB0aGVzZQo+IG5hbWUgZG9uJ3Qgc2VlbSB0byBjb21lIGZy b20gcmVmZXJlbmNlIGNvZGUuCj4gCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVk aWEvaGFudHJvL2hhbnRyb19nMl92cDlfZGVjLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFu dHJvL2hhbnRyb19nMl92cDlfZGVjLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXgg MDAwMDAwMDAwMDAwLi5mMWIyMDc2NjZmYTcKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2 ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19nMl92cDlfZGVjLmMKPj4gQEAgLTAsMCAr MSw5NzggQEAKPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+ICsvKgo+ PiArICogSGFudHJvIFZQOSBjb2RlYyBkcml2ZXIKPj4gKyAqCj4+ICsgKiBDb3B5cmlnaHQgKEMp IDIwMjEgQ29sbGFib3JhIEx0ZC4KPj4gKyAqLwo+PiArI2luY2x1ZGUgIm1lZGlhL3ZpZGVvYnVm Mi1jb3JlLmgiCj4+ICsjaW5jbHVkZSAibWVkaWEvdmlkZW9idWYyLWRtYS1jb250aWcuaCIKPj4g KyNpbmNsdWRlICJtZWRpYS92aWRlb2J1ZjItdjRsMi5oIgo+PiArI2luY2x1ZGUgPGxpbnV4L2tl cm5lbC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KPj4gKyNpbmNsdWRlIDxtZWRp YS92NGwyLW1lbTJtZW0uaD4KPj4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLXZwOS5oPgo+PiArCj4+ ICsjaW5jbHVkZSAiaGFudHJvLmgiCj4+ICsjaW5jbHVkZSAiaGFudHJvX3ZwOS5oIgo+PiArI2lu Y2x1ZGUgImhhbnRyb19nMl9yZWdzLmgiCj4+ICsKPj4gKyNkZWZpbmUgRzJfQUxJR04gMTYKPj4g Kwo+PiArZW51bSBoYW50cm9fcmVmX2ZyYW1lcyB7Cj4+ICsJSU5UUkFfRlJBTUUgPSAwLAo+PiAr CUxBU1RfRlJBTUUgPSAxLAo+PiArCUdPTERFTl9GUkFNRSA9IDIsCj4+ICsJQUxUUkVGX0ZSQU1F ID0gMywKPj4gKwlNQVhfUkVGX0ZSQU1FUyA9IDQKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbnQg c3RhcnRfcHJlcGFyZV9ydW4oc3RydWN0IGhhbnRyb19jdHggKmN0eCwgY29uc3Qgc3RydWN0IHY0 bDJfY3RybF92cDlfZnJhbWUgKipkZWNfcGFyYW1zKQo+PiArewo+PiArCWNvbnN0IHN0cnVjdCB2 NGwyX2N0cmxfdnA5X2NvbXByZXNzZWRfaGRyICpwcm9iX3VwZGF0ZXM7Cj4+ICsJc3RydWN0IGhh bnRyb192cDlfZGVjX2h3X2N0eCAqdnA5X2N0eCA9ICZjdHgtPnZwOV9kZWM7Cj4+ICsJc3RydWN0 IHY0bDJfY3RybCAqY3RybDsKPj4gKwl1bnNpZ25lZCBpbnQgZmN0eF9pZHg7Cj4+ICsKPj4gKwkv KiB2NGwyLXNwZWNpZmljIHN0dWZmICovCj4+ICsJaGFudHJvX3N0YXJ0X3ByZXBhcmVfcnVuKGN0 eCk7Cj4+ICsKPj4gKwljdHJsID0gdjRsMl9jdHJsX2ZpbmQoJmN0eC0+Y3RybF9oYW5kbGVyLCBW NEwyX0NJRF9TVEFURUxFU1NfVlA5X0ZSQU1FKTsKPj4gKwlpZiAoV0FSTl9PTighY3RybCkpCj4+ ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCSpkZWNfcGFyYW1zID0gY3RybC0+cF9jdXIucDsKPj4g Kwo+PiArCWN0cmwgPSB2NGwyX2N0cmxfZmluZCgmY3R4LT5jdHJsX2hhbmRsZXIsIFY0TDJfQ0lE X1NUQVRFTEVTU19WUDlfQ09NUFJFU1NFRF9IRFIpOwo+PiArCWlmIChXQVJOX09OKCFjdHJsKSkK Pj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJcHJvYl91cGRhdGVzID0gY3RybC0+cF9jdXIucDsK Pj4gKwl2cDlfY3R4LT5jdXIudHhfbW9kZSA9IHByb2JfdXBkYXRlcy0+dHhfbW9kZTsKPj4gKwo+ PiArCS8qCj4+ICsJICogdnA5IHN0dWZmCj4+ICsJICoKPj4gKwkgKiBieSB0aGlzIHBvaW50IHRo ZSB1c2Vyc3BhY2UgaGFzIGRvbmUgYWxsIHBhcnRzIG9mIDYuMiB1bmNvbXByZXNzZWRfaGVhZGVy KCkKPj4gKwkgKiBleGNlcHQgdGhpcyBmcmFnbWVudDoKPj4gKwkgKiBpZiAoIEZyYW1lSXNJbnRy YSB8fCBlcnJvcl9yZXNpbGllbnRfbW9kZSApIHsKPj4gKwkgKglzZXR1cF9wYXN0X2luZGVwZW5k ZW5jZSAoICkKPj4gKwkgKglpZiAoIGZyYW1lX3R5cGUgPT0gS0VZX0ZSQU1FIHx8IGVycm9yX3Jl c2lsaWVudF9tb2RlID09IDEgfHwKPj4gKwkgKgkgICAgIHJlc2V0X2ZyYW1lX2NvbnRleHQgPT0g MyApIHsKPj4gKwkgKgkJZm9yICggaSA9IDA7IGkgPCA0OyBpICsrICkgewo+PiArCSAqCQkJc2F2 ZV9wcm9icyggaSApCj4+ICsJICoJCX0KPj4gKwkgKgl9IGVsc2UgaWYgKCByZXNldF9mcmFtZV9j b250ZXh0ID09IDIgKSB7Cj4+ICsJICoJCXNhdmVfcHJvYnMoIGZyYW1lX2NvbnRleHRfaWR4ICkK Pj4gKwkgKgl9Cj4+ICsJICoJZnJhbWVfY29udGV4dF9pZHggPSAwCj4+ICsJICogfQo+PiArCSAq Lwo+PiArCWZjdHhfaWR4ID0gdjRsMl92cDlfcmVzZXRfZnJhbWVfY3R4KCpkZWNfcGFyYW1zLCB2 cDlfY3R4LT5mcmFtZV9jb250ZXh0KTsKPj4gKwl2cDlfY3R4LT5jdXIuZnJhbWVfY29udGV4dF9p ZHggPSBmY3R4X2lkeDsKPj4gKwo+PiArCS8qIDYuMSBmcmFtZShzeik6IGxvYWRfcHJvYnMoKSBh bmQgbG9hZF9wcm9iczIoKSAqLwo+PiArCXZwOV9jdHgtPnByb2JhYmlsaXR5X3RhYmxlcyA9IHZw OV9jdHgtPmZyYW1lX2NvbnRleHRbZmN0eF9pZHhdOwo+PiArCj4+ICsJLyoKPj4gKwkgKiBUaGUg dXNlcnNwYWNlIGhhcyBhbHNvIHBlcmZvcm1lZCA2LjMgY29tcHJlc3NlZF9oZWFkZXIoKSwgYnV0 IGhhbmRsaW5nIHRoZQo+PiArCSAqIHByb2JzIGluIGEgc3BlY2lhbCB3YXkuIEFsbCBwcm9icyB3 aGljaCBuZWVkIHVwZGF0aW5nLCBleGNlcHQgTVYtcmVsYXRlZCwKPj4gKwkgKiBoYXZlIGJlZW4g cmVhZCBmcm9tIHRoZSBiaXRzdHJlYW0gYW5kIHRyYW5zbGF0ZWQgdGhyb3VnaCBpbnZfbWFwX3Rh YmxlW10sCj4+ICsJICogYnV0IG5vIDYuMy42IGludl9yZWNlbnRlcl9ub25uZWcodiwgbSkgaGFz IGJlZW4gcGVyZm9ybWVkLiBUaGUgdmFsdWVzIHBhc3NlZAo+PiArCSAqIGJ5IHVzZXJzcGFjZSBh cmUgZWl0aGVyIHRyYW5zbGF0ZWQgdmFsdWVzICh0aGVyZSBhcmUgbm8gMCB2YWx1ZXMgaW4KPj4g KwkgKiBpbnZfbWFwX3RhYmxlW10pLCBvciB6ZXJvIHRvIGluZGljYXRlIG5vIHVwZGF0ZS4gQWxs IE1WLXJlbGF0ZWQgcHJvYnMgd2hpY2ggbmVlZAo+PiArCSAqIHVwZGF0aW5nIGhhdmUgYmVlbiBy ZWFkIGZyb20gdGhlIGJpdHN0cmVhbSBhbmQgKG12X3Byb2IgPDwgMSkgfCAxIGhhcyBiZWVuCj4+ ICsJICogcGVyZm9ybWVkLiBUaGUgdmFsdWVzIHBhc3NlZCBieSB1c2Vyc3BhY2UgYXJlIGVpdGhl ciBuZXcgdmFsdWVzCj4+ICsJICogdG8gcmVwbGFjZSBvbGQgb25lcyAodGhlIGFib3ZlIG1lbnRp b25lZCBzaGlmdCBhbmQgYml0d2lzZSBvciBuZXZlciByZXN1bHQgaW4KPj4gKwkgKiBhIHplcm8p IG9yIHplcm8gdG8gaW5kaWNhdGUgbm8gdXBkYXRlLgo+PiArCSAqIGZ3X3VwZGF0ZV9wcm9icygp IHBlcmZvcm1zIGFjdHVhbCBwcm9icyB1cGRhdGVzIG9yIGxlYXZlcyBwcm9icyBhcy1pcwo+PiAr CSAqIGZvciB2YWx1ZXMgZm9yIHdoaWNoIGEgemVybyB3YXMgcGFzc2VkIGZyb20gdXNlcnNwYWNl Lgo+PiArCSAqLwo+PiArCXY0bDJfdnA5X2Z3X3VwZGF0ZV9wcm9icygmdnA5X2N0eC0+cHJvYmFi aWxpdHlfdGFibGVzLCBwcm9iX3VwZGF0ZXMsICpkZWNfcGFyYW1zKTsKPj4gKwo+PiArCXJldHVy biAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgc2l6ZV90IGNocm9tYV9vZmZzZXQoY29uc3Qgc3Ry dWN0IGhhbnRyb19jdHggKmN0eCwKPj4gKwkJCSAgICBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX3Zw OV9mcmFtZSAqZGVjX3BhcmFtcykKPj4gK3sKPj4gKwlpbnQgYnl0ZXNfcGVyX3BpeGVsID0gZGVj X3BhcmFtcy0+Yml0X2RlcHRoID09IDggPyAxIDogMjsKPj4gKwo+PiArCXJldHVybiBjdHgtPnNy Y19mbXQud2lkdGggKiBjdHgtPnNyY19mbXQuaGVpZ2h0ICogYnl0ZXNfcGVyX3BpeGVsOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgc2l6ZV90IG12X29mZnNldChjb25zdCBzdHJ1Y3QgaGFudHJvX2N0 eCAqY3R4LAo+PiArCQkJY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDlfZnJhbWUgKmRlY19wYXJh bXMpCj4+ICt7Cj4+ICsJc2l6ZV90IGNyX29mZnNldCA9IGNocm9tYV9vZmZzZXQoY3R4LCBkZWNf cGFyYW1zKTsKPj4gKwo+PiArCXJldHVybiBBTElHTigoY3Jfb2Zmc2V0ICogMykgLyAyLCBHMl9B TElHTik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgaGFudHJvX2RlY29kZWRfYnVmZmVy ICoKPj4gK2dldF9yZWZfYnVmKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIHN0cnVjdCB2YjJfdjRs Ml9idWZmZXIgKmRzdCwgdTY0IHRpbWVzdGFtcCkKPj4gK3sKPj4gKwlzdHJ1Y3QgdjRsMl9tMm1f Y3R4ICptMm1fY3R4ID0gY3R4LT5maC5tMm1fY3R4Owo+PiArCXN0cnVjdCB2YjJfcXVldWUgKmNh cF9xID0gJm0ybV9jdHgtPmNhcF9xX2N0eC5xOwo+PiArCWludCBidWZfaWR4Owo+PiArCj4+ICsJ LyoKPj4gKwkgKiBJZiBhIHJlZiBpcyB1bnVzZWQgb3IgaW52YWxpZCwgYWRkcmVzcyBvZiBjdXJy ZW50IGRlc3RpbmF0aW9uCj4+ICsJICogYnVmZmVyIGlzIHJldHVybmVkLgo+PiArCSAqLwo+PiAr CWJ1Zl9pZHggPSB2YjJfZmluZF90aW1lc3RhbXAoY2FwX3EsIHRpbWVzdGFtcCwgMCk7Cj4+ICsJ aWYgKGJ1Zl9pZHggPCAwKQo+PiArCQlyZXR1cm4gdmIyX3RvX2hhbnRyb19kZWNvZGVkX2J1Zigm ZHN0LT52YjJfYnVmKTsKPj4gKwo+PiArCXJldHVybiB2YjJfdG9faGFudHJvX2RlY29kZWRfYnVm KHZiMl9nZXRfYnVmZmVyKGNhcF9xLCBidWZfaWR4KSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2 b2lkIHVwZGF0ZV9kZWNfYnVmX2luZm8oc3RydWN0IGhhbnRyb19kZWNvZGVkX2J1ZmZlciAqYnVm LAo+PiArCQkJCWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zKQo+ PiArewo+PiArCWJ1Zi0+dnA5LndpZHRoID0gZGVjX3BhcmFtcy0+ZnJhbWVfd2lkdGhfbWludXNf MSArIDE7Cj4+ICsJYnVmLT52cDkuaGVpZ2h0ID0gZGVjX3BhcmFtcy0+ZnJhbWVfaGVpZ2h0X21p bnVzXzEgKyAxOwo+PiArCWJ1Zi0+dnA5LmJpdF9kZXB0aCA9IGRlY19wYXJhbXMtPmJpdF9kZXB0 aDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgdXBkYXRlX2N0eF9jdXJfaW5mbyhzdHJ1Y3Qg aGFudHJvX3ZwOV9kZWNfaHdfY3R4ICp2cDlfY3R4LAo+PiArCQkJCXN0cnVjdCBoYW50cm9fZGVj b2RlZF9idWZmZXIgKmJ1ZiwKPj4gKwkJCQljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9mcmFt ZSAqZGVjX3BhcmFtcykKPj4gK3sKPj4gKwl2cDlfY3R4LT5jdXIudmFsaWQgPSB0cnVlOwo+PiAr CXZwOV9jdHgtPmN1ci5yZWZlcmVuY2VfbW9kZSA9IGRlY19wYXJhbXMtPnJlZmVyZW5jZV9tb2Rl Owo+PiArCXZwOV9jdHgtPmN1ci5pbnRlcnBvbGF0aW9uX2ZpbHRlciA9IGRlY19wYXJhbXMtPmlu dGVycG9sYXRpb25fZmlsdGVyOwo+PiArCXZwOV9jdHgtPmN1ci5mbGFncyA9IGRlY19wYXJhbXMt PmZsYWdzOwo+PiArCXZwOV9jdHgtPmN1ci50aW1lc3RhbXAgPSBidWYtPmJhc2UudmIudmIyX2J1 Zi50aW1lc3RhbXA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGNvbmZpZ19vdXRwdXQoc3Ry dWN0IGhhbnRyb19jdHggKmN0eCwKPj4gKwkJCSAgc3RydWN0IGhhbnRyb19kZWNvZGVkX2J1ZmZl ciAqZHN0LAo+PiArCQkJICBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9mcmFtZSAqZGVjX3Bh cmFtcykKPj4gK3sKPj4gKwlkbWFfYWRkcl90IGx1bWFfYWRkciwgY2hyb21hX2FkZHIsIG12X2Fk ZHI7Cj4+ICsKPj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfb3V0X2RpcywgMCk7 Cj4+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX291dHB1dF9mb3JtYXQsIDApOwo+ PiArCj4+ICsJbHVtYV9hZGRyID0gdmIyX2RtYV9jb250aWdfcGxhbmVfZG1hX2FkZHIoJmRzdC0+ YmFzZS52Yi52YjJfYnVmLCAwKTsKPj4gKwloYW50cm9fd3JpdGVfYWRkcihjdHgtPmRldiwgRzJf QUREUl9EU1QsIGx1bWFfYWRkcik7Cj4+ICsKPj4gKwljaHJvbWFfYWRkciA9IGx1bWFfYWRkciAr IGNocm9tYV9vZmZzZXQoY3R4LCBkZWNfcGFyYW1zKTsKPj4gKwloYW50cm9fd3JpdGVfYWRkcihj dHgtPmRldiwgRzJfQUREUl9EU1RfQ0hSLCBjaHJvbWFfYWRkcik7Cj4+ICsKPj4gKwltdl9hZGRy ID0gbHVtYV9hZGRyICsgbXZfb2Zmc2V0KGN0eCwgZGVjX3BhcmFtcyk7Cj4+ICsJaGFudHJvX3dy aXRlX2FkZHIoY3R4LT5kZXYsIEcyX0FERFJfRFNUX01WLCBtdl9hZGRyKTsKPj4gK30KPj4gKwo+ PiArc3RydWN0IGhhbnRyb192cDlfcmVmX3JlZyB7Cj4+ICsJY29uc3Qgc3RydWN0IGhhbnRyb19y ZWcgd2lkdGg7Cj4+ICsJY29uc3Qgc3RydWN0IGhhbnRyb19yZWcgaGVpZ2h0Owo+PiArCWNvbnN0 IHN0cnVjdCBoYW50cm9fcmVnIGhvcl9zY2FsZTsKPj4gKwljb25zdCBzdHJ1Y3QgaGFudHJvX3Jl ZyB2ZXJfc2NhbGU7Cj4+ICsJdTMyIHlfYmFzZTsKPj4gKwl1MzIgY19iYXNlOwo+PiArfTsKPj4g Kwo+PiArc3RhdGljIHZvaWQgY29uZmlnX3JlZihzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+PiAr CQkgICAgICAgc3RydWN0IGhhbnRyb19kZWNvZGVkX2J1ZmZlciAqZHN0LAo+PiArCQkgICAgICAg Y29uc3Qgc3RydWN0IGhhbnRyb192cDlfcmVmX3JlZyAqcmVmX3JlZywKPj4gKwkJICAgICAgIGNv bnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zLAo+PiArCQkgICAgICAg dTY0IHJlZl90cykKPj4gK3sKPj4gKwlzdHJ1Y3QgaGFudHJvX2RlY29kZWRfYnVmZmVyICpidWY7 Cj4+ICsJZG1hX2FkZHJfdCBsdW1hX2FkZHIsIGNocm9tYV9hZGRyOwo+PiArCXUzMiByZWZ3LCBy ZWZoOwo+PiArCj4+ICsJYnVmID0gZ2V0X3JlZl9idWYoY3R4LCAmZHN0LT5iYXNlLnZiLCByZWZf dHMpOwo+PiArCXJlZncgPSBidWYtPnZwOS53aWR0aDsKPj4gKwlyZWZoID0gYnVmLT52cDkuaGVp Z2h0Owo+PiArCj4+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnJlZl9yZWctPndpZHRo LCByZWZ3KTsKPj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmcmVmX3JlZy0+aGVpZ2h0 LCByZWZoKTsKPj4gKwo+PiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZyZWZfcmVnLT5o b3Jfc2NhbGUsIChyZWZ3IDw8IDE0KSAvIGRzdC0+dnA5LndpZHRoKTsKPj4gKwloYW50cm9fcmVn X3dyaXRlKGN0eC0+ZGV2LCAmcmVmX3JlZy0+dmVyX3NjYWxlLCAocmVmaCA8PCAxNCkgLyBkc3Qt PnZwOS5oZWlnaHQpOwo+PiArCj4+ICsJbHVtYV9hZGRyID0gdmIyX2RtYV9jb250aWdfcGxhbmVf ZG1hX2FkZHIoJmJ1Zi0+YmFzZS52Yi52YjJfYnVmLCAwKTsKPj4gKwloYW50cm9fd3JpdGVfYWRk cihjdHgtPmRldiwgcmVmX3JlZy0+eV9iYXNlLCBsdW1hX2FkZHIpOwo+PiArCj4+ICsJY2hyb21h X2FkZHIgPSBsdW1hX2FkZHIgKyBjaHJvbWFfb2Zmc2V0KGN0eCwgZGVjX3BhcmFtcyk7Cj4+ICsJ aGFudHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYsIHJlZl9yZWctPmNfYmFzZSwgY2hyb21hX2FkZHIp Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBjb25maWdfcmVmX3JlZ2lzdGVycyhzdHJ1Y3Qg aGFudHJvX2N0eCAqY3R4LAo+PiArCQkJCSBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9mcmFt ZSAqZGVjX3BhcmFtcywKPj4gKwkJCQkgc3RydWN0IGhhbnRyb19kZWNvZGVkX2J1ZmZlciAqZHN0 LAo+PiArCQkJCSBzdHJ1Y3QgaGFudHJvX2RlY29kZWRfYnVmZmVyICptdl9yZWYpCj4+ICt7Cj4+ ICsJc3RhdGljIGNvbnN0IHN0cnVjdCBoYW50cm9fdnA5X3JlZl9yZWcgcmVmX3JlZ3NbXSA9IHsK Pj4gKwkJewo+PiArCQkJLyogTGFzdCAqLwo+PiArCQkJLndpZHRoID0gdnA5X2xyZWZfd2lkdGgs Cj4+ICsJCQkuaGVpZ2h0ID0gdnA5X2xyZWZfaGVpZ2h0LAo+PiArCQkJLmhvcl9zY2FsZSA9IHZw OV9scmVmX2hvcl9zY2FsZSwKPj4gKwkJCS52ZXJfc2NhbGUgPSB2cDlfbHJlZl92ZXJfc2NhbGUs Cj4+ICsJCQkueV9iYXNlID0gRzJfUkVHX0FERFJfUkVGKDApLAo+PiArCQkJLmNfYmFzZSA9IEcy X1JFR19DSFJfUkVGKDApLAo+PiArCQl9LCB7Cj4+ICsJCQkvKiBHb2xkZW4gKi8KPj4gKwkJCS53 aWR0aCA9IHZwOV9ncmVmX3dpZHRoLAo+PiArCQkJLmhlaWdodCA9IHZwOV9ncmVmX2hlaWdodCwK Pj4gKwkJCS5ob3Jfc2NhbGUgPSB2cDlfZ3JlZl9ob3Jfc2NhbGUsCj4+ICsJCQkudmVyX3NjYWxl ID0gdnA5X2dyZWZfdmVyX3NjYWxlLAo+PiArCQkJLnlfYmFzZSA9IEcyX1JFR19BRERSX1JFRig0 KSwKPj4gKwkJCS5jX2Jhc2UgPSBHMl9SRUdfQ0hSX1JFRig0KSwKPj4gKwkJfSwgewo+PiArCQkJ LyogQWx0cmVmICovCj4+ICsJCQkud2lkdGggPSB2cDlfYXJlZl93aWR0aCwKPj4gKwkJCS5oZWln aHQgPSB2cDlfYXJlZl9oZWlnaHQsCj4+ICsJCQkuaG9yX3NjYWxlID0gdnA5X2FyZWZfaG9yX3Nj YWxlLAo+PiArCQkJLnZlcl9zY2FsZSA9IHZwOV9hcmVmX3Zlcl9zY2FsZSwKPj4gKwkJCS55X2Jh c2UgPSBHMl9SRUdfQUREUl9SRUYoNSksCj4+ICsJCQkuY19iYXNlID0gRzJfUkVHX0NIUl9SRUYo NSksCj4+ICsJCX0sCj4+ICsJfTsKPj4gKwlkbWFfYWRkcl90IG12X2FkZHI7Cj4+ICsKPj4gKwlj b25maWdfcmVmKGN0eCwgZHN0LCAmcmVmX3JlZ3NbMF0sIGRlY19wYXJhbXMsIGRlY19wYXJhbXMt Pmxhc3RfZnJhbWVfdHMpOwo+PiArCWNvbmZpZ19yZWYoY3R4LCBkc3QsICZyZWZfcmVnc1sxXSwg ZGVjX3BhcmFtcywgZGVjX3BhcmFtcy0+Z29sZGVuX2ZyYW1lX3RzKTsKPj4gKwljb25maWdfcmVm KGN0eCwgZHN0LCAmcmVmX3JlZ3NbMl0sIGRlY19wYXJhbXMsIGRlY19wYXJhbXMtPmFsdF9mcmFt ZV90cyk7Cj4+ICsKPj4gKwltdl9hZGRyID0gdmIyX2RtYV9jb250aWdfcGxhbmVfZG1hX2FkZHIo Jm12X3JlZi0+YmFzZS52Yi52YjJfYnVmLCAwKSArCj4+ICsJCSAgbXZfb2Zmc2V0KGN0eCwgZGVj X3BhcmFtcyk7Cj4+ICsJaGFudHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYsIEcyX1JFR19ETVZfUkVG KDApLCBtdl9hZGRyKTsKPj4gKwo+PiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlf bGFzdF9zaWduX2JpYXMsCj4+ICsJCQkgZGVjX3BhcmFtcy0+cmVmX2ZyYW1lX3NpZ25fYmlhcyAm IFY0TDJfVlA5X1NJR05fQklBU19MQVNUID8gMSA6IDApOwo+PiArCj4+ICsJaGFudHJvX3JlZ193 cml0ZShjdHgtPmRldiwgJnZwOV9ncmVmX3NpZ25fYmlhcywKPj4gKwkJCSBkZWNfcGFyYW1zLT5y ZWZfZnJhbWVfc2lnbl9iaWFzICYgVjRMMl9WUDlfU0lHTl9CSUFTX0dPTERFTiA/IDEgOiAwKTsK Pj4gKwo+PiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfYXJlZl9zaWduX2JpYXMs Cj4+ICsJCQkgZGVjX3BhcmFtcy0+cmVmX2ZyYW1lX3NpZ25fYmlhcyAmIFY0TDJfVlA5X1NJR05f QklBU19BTFQgPyAxIDogMCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHJlY29tcHV0ZV90 aWxlX2luZm8odW5zaWduZWQgc2hvcnQgKnRpbGVfaW5mbywgdW5zaWduZWQgaW50IHRpbGVzLCB1 bnNpZ25lZCBpbnQgc2JzKQo+PiArewo+PiArCWludCBpOwo+PiArCXVuc2lnbmVkIGludCBhY2N1 bXVsYXRlZCA9IDA7Cj4+ICsJdW5zaWduZWQgaW50IG5leHRfYWNjdW11bGF0ZWQ7Cj4+ICsKPj4g Kwlmb3IgKGkgPSAxOyBpIDw9IHRpbGVzOyArK2kpIHsKPj4gKwkJbmV4dF9hY2N1bXVsYXRlZCA9 IGkgKiBzYnMgLyB0aWxlczsKPj4gKwkJKnRpbGVfaW5mbysrID0gbmV4dF9hY2N1bXVsYXRlZCAt IGFjY3VtdWxhdGVkOwo+PiArCQlhY2N1bXVsYXRlZCA9IG5leHRfYWNjdW11bGF0ZWQ7Cj4+ICsJ fQo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZAo+PiArcmVjb21wdXRlX3RpbGVfcmNfaW5mbyhz dHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+PiArCQkgICAgICAgdW5zaWduZWQgaW50IHRpbGVfciwg dW5zaWduZWQgaW50IHRpbGVfYywKPj4gKwkJICAgICAgIHVuc2lnbmVkIGludCBzYnNfciwgdW5z aWduZWQgaW50IHNic19jKQo+PiArewo+PiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHgg KnZwOV9jdHggPSAmY3R4LT52cDlfZGVjOwo+PiArCj4+ICsJcmVjb21wdXRlX3RpbGVfaW5mbyh2 cDlfY3R4LT50aWxlX3JfaW5mbywgdGlsZV9yLCBzYnNfcik7Cj4+ICsJcmVjb21wdXRlX3RpbGVf aW5mbyh2cDlfY3R4LT50aWxlX2NfaW5mbywgdGlsZV9jLCBzYnNfYyk7Cj4+ICsKPj4gKwl2cDlf Y3R4LT5sYXN0X3RpbGVfciA9IHRpbGVfcjsKPj4gKwl2cDlfY3R4LT5sYXN0X3RpbGVfYyA9IHRp bGVfYzsKPj4gKwl2cDlfY3R4LT5sYXN0X3Nic19yID0gc2JzX3I7Cj4+ICsJdnA5X2N0eC0+bGFz dF9zYnNfYyA9IHNic19jOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGlu dCBmaXJzdF90aWxlX3Jvdyh1bnNpZ25lZCBpbnQgdGlsZV9yLCB1bnNpZ25lZCBpbnQgc2JzX3Ip Cj4+ICt7Cj4+ICsJaWYgKHRpbGVfciA9PSBzYnNfciArIDEpCj4+ICsJCXJldHVybiAxOwo+PiAr Cj4+ICsJaWYgKHRpbGVfciA9PSBzYnNfciArIDIpCj4+ICsJCXJldHVybiAyOwo+PiArCj4+ICsJ cmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkCj4+ICtmaWxsX3RpbGVfaW5mbyhz dHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+PiArCSAgICAgICB1bnNpZ25lZCBpbnQgdGlsZV9yLCB1 bnNpZ25lZCBpbnQgdGlsZV9jLAo+PiArCSAgICAgICB1bnNpZ25lZCBpbnQgc2JzX3IsIHVuc2ln bmVkIGludCBzYnNfYywKPj4gKwkgICAgICAgdW5zaWduZWQgc2hvcnQgKnRpbGVfbWVtKQo+PiAr ewo+PiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggKnZwOV9jdHggPSAmY3R4LT52cDlf ZGVjOwo+PiArCXVuc2lnbmVkIGludCBpLCBqOwo+PiArCWJvb2wgZmlyc3QgPSB0cnVlOwo+PiAr Cj4+ICsJZm9yIChpID0gZmlyc3RfdGlsZV9yb3codGlsZV9yLCBzYnNfcik7IGkgPCB0aWxlX3I7 ICsraSkgewo+PiArCQl1bnNpZ25lZCBzaG9ydCByX2luZm8gPSB2cDlfY3R4LT50aWxlX3JfaW5m b1tpXTsKPj4gKwo+PiArCQlpZiAoZmlyc3QpIHsKPj4gKwkJCWlmIChpID4gMCkKPj4gKwkJCQly X2luZm8gKz0gdnA5X2N0eC0+dGlsZV9yX2luZm9bMF07Cj4+ICsJCQlpZiAoaSA9PSAyKQo+PiAr CQkJCXJfaW5mbyArPSB2cDlfY3R4LT50aWxlX3JfaW5mb1sxXTsKPj4gKwkJCWZpcnN0ID0gZmFs c2U7Cj4+ICsJCX0KPj4gKwkJZm9yIChqID0gMDsgaiA8IHRpbGVfYzsgKytqKSB7Cj4+ICsJCQkq dGlsZV9tZW0rKyA9IHZwOV9jdHgtPnRpbGVfY19pbmZvW2pdOwo+PiArCQkJKnRpbGVfbWVtKysg PSByX2luZm87Cj4+ICsJCX0KPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkCj4+ICtj b25maWdfdGlsZXMoc3RydWN0IGhhbnRyb19jdHggKmN0eCwKPj4gKwkgICAgIGNvbnN0IHN0cnVj dCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zLAo+PiArCSAgICAgc3RydWN0IGhhbnRy b19kZWNvZGVkX2J1ZmZlciAqZHN0KQo+PiArewo+PiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19o d19jdHggKnZwOV9jdHggPSAmY3R4LT52cDlfZGVjOwo+PiArCXN0cnVjdCBoYW50cm9fYXV4X2J1 ZiAqbWlzYyA9ICZ2cDlfY3R4LT5taXNjOwo+PiArCXN0cnVjdCBoYW50cm9fYXV4X2J1ZiAqdGls ZV9lZGdlID0gJnZwOV9jdHgtPnRpbGVfZWRnZTsKPj4gKwlkbWFfYWRkcl90IGFkZHI7Cj4+ICsJ dW5zaWduZWQgc2hvcnQgKnRpbGVfbWVtOwo+PiArCj4+ICsJYWRkciA9IG1pc2MtPmRtYSArIHZw OV9jdHgtPnRpbGVfaW5mb19vZmZzZXQ7Cj4+ICsJaGFudHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYs IEcyX0FERFJfVElMRV9TSVpFLCBhZGRyKTsKPj4gKwo+PiArCXRpbGVfbWVtID0gbWlzYy0+Y3B1 ICsgdnA5X2N0eC0+dGlsZV9pbmZvX29mZnNldDsKPj4gKwlpZiAoZGVjX3BhcmFtcy0+dGlsZV9j b2xzX2xvZzIgfHwgZGVjX3BhcmFtcy0+dGlsZV9yb3dzX2xvZzIpIHsKPj4gKwkJdW5zaWduZWQg aW50IHRpbGVfciA9ICgxIDw8IGRlY19wYXJhbXMtPnRpbGVfcm93c19sb2cyKTsKPj4gKwkJdW5z aWduZWQgaW50IHRpbGVfYyA9ICgxIDw8IGRlY19wYXJhbXMtPnRpbGVfY29sc19sb2cyKTsKPj4g KwkJdW5zaWduZWQgaW50IHNic19yID0gaGFudHJvX3ZwOV9udW1fc2JzKGRzdC0+dnA5LmhlaWdo dCk7Cj4+ICsJCXVuc2lnbmVkIGludCBzYnNfYyA9IGhhbnRyb192cDlfbnVtX3Nicyhkc3QtPnZw OS53aWR0aCk7Cj4+ICsKPj4gKwkJaWYgKHRpbGVfciAhPSB2cDlfY3R4LT5sYXN0X3RpbGVfciB8 fCB0aWxlX2MgIT0gdnA5X2N0eC0+bGFzdF90aWxlX2MgfHwKPj4gKwkJICAgIHNic19yICE9IHZw OV9jdHgtPmxhc3Rfc2JzX3IgfHwgc2JzX2MgIT0gdnA5X2N0eC0+bGFzdF9zYnNfYykKPj4gKwkJ CXJlY29tcHV0ZV90aWxlX3JjX2luZm8oY3R4LCB0aWxlX3IsIHRpbGVfYywgc2JzX3IsIHNic19j KTsKPj4gKwo+PiArCQlmaWxsX3RpbGVfaW5mbyhjdHgsIHRpbGVfciwgdGlsZV9jLCBzYnNfciwg c2JzX2MsIHRpbGVfbWVtKTsKPj4gKwo+PiArCQloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAm ZzJfdGlsZV9lLCAxKTsKPj4gKwkJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX251bV90 aWxlX2NvbHMsIHRpbGVfYyk7Cj4+ICsJCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9u dW1fdGlsZV9yb3dzLCB0aWxlX3IpOwo+PiArCj4+ICsJCWFkZHIgPSB0aWxlX2VkZ2UtPmRtYTsK Pj4gKwkJaGFudHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYsIEcyX1RJTEVfRklMVEVSLCBhZGRyKTsK Pj4gKwo+PiArCQlhZGRyID0gdGlsZV9lZGdlLT5kbWEgKyB2cDlfY3R4LT5ic2RfY3RybF9vZmZz ZXQ7Cj4+ICsJCWhhbnRyb193cml0ZV9hZGRyKGN0eC0+ZGV2LCBHMl9USUxFX0JTRCwgYWRkcik7 Cj4+ICsJfSBlbHNlIHsKPj4gKwkJdGlsZV9tZW1bMF0gPSBoYW50cm9fdnA5X251bV9zYnMoZHN0 LT52cDkud2lkdGgpOwo+PiArCQl0aWxlX21lbVsxXSA9IGhhbnRyb192cDlfbnVtX3Nicyhkc3Qt PnZwOS5oZWlnaHQpOwo+PiArCj4+ICsJCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl90 aWxlX2UsIDApOwo+PiArCQloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfbnVtX3RpbGVf Y29scywgMSk7Cj4+ICsJCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9udW1fdGlsZV9y b3dzLCAxKTsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkCj4+ICt1cGRhdGVfZmVh dF9hbmRfZmxhZyhzdHJ1Y3QgaGFudHJvX3ZwOV9kZWNfaHdfY3R4ICp2cDlfY3R4LAo+PiArCQkg ICAgIGNvbnN0IHN0cnVjdCB2NGwyX3ZwOV9zZWdtZW50YXRpb24gKnNlZywKPj4gKwkJICAgICB1 bnNpZ25lZCBpbnQgZmVhdHVyZSwKPj4gKwkJICAgICB1bnNpZ25lZCBpbnQgc2VnaWQpCj4+ICt7 Cj4+ICsJdTggbWFzayA9IFY0TDJfVlA5X1NFR01FTlRfRkVBVFVSRV9FTkFCTEVEKGZlYXR1cmUp Owo+PiArCj4+ICsJdnA5X2N0eC0+ZmVhdHVyZV9kYXRhW3NlZ2lkXVtmZWF0dXJlXSA9IHNlZy0+ ZmVhdHVyZV9kYXRhW3NlZ2lkXVtmZWF0dXJlXTsKPj4gKwl2cDlfY3R4LT5mZWF0dXJlX2VuYWJs ZWRbc2VnaWRdICY9IH5tYXNrOwo+PiArCXZwOV9jdHgtPmZlYXR1cmVfZW5hYmxlZFtzZWdpZF0g fD0gKHNlZy0+ZmVhdHVyZV9lbmFibGVkW3NlZ2lkXSAmIG1hc2spOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW5saW5lIHMxNiBjbGlwMyhzMTYgeCwgczE2IHksIHMxNiB6KQo+PiArewo+PiArCXJl dHVybiAoeiA8IHgpID8geCA6ICh6ID4geSkgPyB5IDogejsKPj4gK30KPj4gKwo+PiArc3RhdGlj IHMxNiBmZWF0X3ZhbF9jbGlwMyhzMTYgZmVhdF92YWwsIHMxNiBmZWF0dXJlX2RhdGEsIGJvb2wg YWJzb2x1dGUsIHU4IGNsaXApCj4+ICt7Cj4+ICsJaWYgKGFic29sdXRlKQo+PiArCQlyZXR1cm4g ZmVhdHVyZV9kYXRhOwo+PiArCj4+ICsJcmV0dXJuIGNsaXAzKDAsIDI1NSwgZmVhdF92YWwgKyBm ZWF0dXJlX2RhdGEpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBjb25maWdfc2VnbWVudChz dHJ1Y3QgaGFudHJvX2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9mcmFtZSAq ZGVjX3BhcmFtcykKPj4gK3sKPj4gKwlzdHJ1Y3QgaGFudHJvX3ZwOV9kZWNfaHdfY3R4ICp2cDlf Y3R4ID0gJmN0eC0+dnA5X2RlYzsKPj4gKwljb25zdCBzdHJ1Y3QgdjRsMl92cDlfc2VnbWVudGF0 aW9uICpzZWc7Cj4+ICsJczE2IGZlYXRfdmFsOwo+PiArCXVuc2lnbmVkIGNoYXIgZmVhdF9pZDsK Pj4gKwl1bnNpZ25lZCBpbnQgc2VnaWQ7Cj4+ICsJYm9vbCBzZWdtZW50X2VuYWJsZWQsIGFic29s dXRlLCB1cGRhdGVfZGF0YTsKPj4gKwo+PiArCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGFudHJvX3Jl ZyBzZWdfcmVnc1s4XVtWNEwyX1ZQOV9TRUdfTFZMX01BWF0gPSB7Cj4+ICsJCXsgdnA5X3F1YW50 X3NlZzAsIHZwOV9maWx0X2xldmVsX3NlZzAsIHZwOV9yZWZwaWNfc2VnMCwgdnA5X3NraXBfc2Vn MCB9LAo+PiArCQl7IHZwOV9xdWFudF9zZWcxLCB2cDlfZmlsdF9sZXZlbF9zZWcxLCB2cDlfcmVm cGljX3NlZzEsIHZwOV9za2lwX3NlZzEgfSwKPj4gKwkJeyB2cDlfcXVhbnRfc2VnMiwgdnA5X2Zp bHRfbGV2ZWxfc2VnMiwgdnA5X3JlZnBpY19zZWcyLCB2cDlfc2tpcF9zZWcyIH0sCj4+ICsJCXsg dnA5X3F1YW50X3NlZzMsIHZwOV9maWx0X2xldmVsX3NlZzMsIHZwOV9yZWZwaWNfc2VnMywgdnA5 X3NraXBfc2VnMyB9LAo+PiArCQl7IHZwOV9xdWFudF9zZWc0LCB2cDlfZmlsdF9sZXZlbF9zZWc0 LCB2cDlfcmVmcGljX3NlZzQsIHZwOV9za2lwX3NlZzQgfSwKPj4gKwkJeyB2cDlfcXVhbnRfc2Vn NSwgdnA5X2ZpbHRfbGV2ZWxfc2VnNSwgdnA5X3JlZnBpY19zZWc1LCB2cDlfc2tpcF9zZWc1IH0s Cj4+ICsJCXsgdnA5X3F1YW50X3NlZzYsIHZwOV9maWx0X2xldmVsX3NlZzYsIHZwOV9yZWZwaWNf c2VnNiwgdnA5X3NraXBfc2VnNiB9LAo+PiArCQl7IHZwOV9xdWFudF9zZWc3LCB2cDlfZmlsdF9s ZXZlbF9zZWc3LCB2cDlfcmVmcGljX3NlZzcsIHZwOV9za2lwX3NlZzcgfSwKPj4gKwl9Owo+PiAr Cj4+ICsJc2VnbWVudF9lbmFibGVkID0gISEoZGVjX3BhcmFtcy0+c2VnLmZsYWdzICYgVjRMMl9W UDlfU0VHTUVOVEFUSU9OX0ZMQUdfRU5BQkxFRCk7Cj4+ICsJaGFudHJvX3JlZ193cml0ZShjdHgt PmRldiwgJnZwOV9zZWdtZW50X2UsIHNlZ21lbnRfZW5hYmxlZCk7Cj4+ICsJaGFudHJvX3JlZ193 cml0ZShjdHgtPmRldiwgJnZwOV9zZWdtZW50X3VwZF9lLAo+PiArCQkJICEhKGRlY19wYXJhbXMt PnNlZy5mbGFncyAmIFY0TDJfVlA5X1NFR01FTlRBVElPTl9GTEFHX1VQREFURV9NQVApKTsKPj4g KwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmdnA5X3NlZ21lbnRfdGVtcF91cGRfZSwKPj4g KwkJCSAhIShkZWNfcGFyYW1zLT5zZWcuZmxhZ3MgJiBWNEwyX1ZQOV9TRUdNRU5UQVRJT05fRkxB R19URU1QT1JBTF9VUERBVEUpKTsKPj4gKwo+PiArCXNlZyA9ICZkZWNfcGFyYW1zLT5zZWc7Cj4+ ICsJYWJzb2x1dGUgPSAhIShzZWctPmZsYWdzICYgVjRMMl9WUDlfU0VHTUVOVEFUSU9OX0ZMQUdf QUJTX09SX0RFTFRBX1VQREFURSk7Cj4+ICsJdXBkYXRlX2RhdGEgPSAhIShzZWctPmZsYWdzICYg VjRMMl9WUDlfU0VHTUVOVEFUSU9OX0ZMQUdfVVBEQVRFX0RBVEEpOwo+PiArCj4+ICsJZm9yIChz ZWdpZCA9IDA7IHNlZ2lkIDwgODsgKytzZWdpZCkgewo+PiArCQkvKiBRdWFudGl6ZXIgc2VnbWVu dCBmZWF0dXJlICovCj4+ICsJCWZlYXRfaWQgPSBWNEwyX1ZQOV9TRUdfTFZMX0FMVF9ROwo+PiAr CQlmZWF0X3ZhbCA9IGRlY19wYXJhbXMtPnF1YW50LmJhc2VfcV9pZHg7Cj4+ICsJCWlmIChzZWdt ZW50X2VuYWJsZWQpIHsKPj4gKwkJCWlmICh1cGRhdGVfZGF0YSkKPj4gKwkJCQl1cGRhdGVfZmVh dF9hbmRfZmxhZyh2cDlfY3R4LCBzZWcsIGZlYXRfaWQsIHNlZ2lkKTsKPj4gKwkJCWlmICh2NGwy X3ZwOV9zZWdfZmVhdF9lbmFibGVkKHZwOV9jdHgtPmZlYXR1cmVfZW5hYmxlZCwgZmVhdF9pZCwg c2VnaWQpKQo+PiArCQkJCWZlYXRfdmFsID0gZmVhdF92YWxfY2xpcDMoZmVhdF92YWwsCj4+ICsJ CQkJCQkJICB2cDlfY3R4LT5mZWF0dXJlX2RhdGFbc2VnaWRdW2ZlYXRfaWRdLAo+PiArCQkJCQkJ CSAgYWJzb2x1dGUsIDI1NSk7Cj4+ICsJCX0KPj4gKwkJaGFudHJvX3JlZ193cml0ZShjdHgtPmRl diwgJnNlZ19yZWdzW3NlZ2lkXVtmZWF0X2lkXSwgZmVhdF92YWwpOwo+PiArCj4+ICsJCS8qIExv b3AgZmlsdGVyIHNlZ21lbnQgZmVhdHVyZSAqLwo+PiArCQlmZWF0X2lkID0gVjRMMl9WUDlfU0VH X0xWTF9BTFRfTDsKPj4gKwkJZmVhdF92YWwgPSBkZWNfcGFyYW1zLT5sZi5sZXZlbDsKPj4gKwkJ aWYgKHNlZ21lbnRfZW5hYmxlZCkgewo+PiArCQkJaWYgKHVwZGF0ZV9kYXRhKQo+PiArCQkJCXVw ZGF0ZV9mZWF0X2FuZF9mbGFnKHZwOV9jdHgsIHNlZywgZmVhdF9pZCwgc2VnaWQpOwo+PiArCQkJ aWYgKHY0bDJfdnA5X3NlZ19mZWF0X2VuYWJsZWQodnA5X2N0eC0+ZmVhdHVyZV9lbmFibGVkLCBm ZWF0X2lkLCBzZWdpZCkpCj4+ICsJCQkJZmVhdF92YWwgPSBmZWF0X3ZhbF9jbGlwMyhmZWF0X3Zh bCwKPj4gKwkJCQkJCQkgIHZwOV9jdHgtPmZlYXR1cmVfZGF0YVtzZWdpZF1bZmVhdF9pZF0sCj4+ ICsJCQkJCQkJICBhYnNvbHV0ZSwgNjMpOwo+PiArCQl9Cj4+ICsJCWhhbnRyb19yZWdfd3JpdGUo Y3R4LT5kZXYsICZzZWdfcmVnc1tzZWdpZF1bZmVhdF9pZF0sIGZlYXRfdmFsKTsKPj4gKwo+PiAr CQkvKiBSZWZlcmVuY2UgZnJhbWUgc2VnbWVudCBmZWF0dXJlICovCj4+ICsJCWZlYXRfaWQgPSBW NEwyX1ZQOV9TRUdfTFZMX1JFRl9GUkFNRTsKPj4gKwkJZmVhdF92YWwgPSAwOwo+PiArCQlpZiAo c2VnbWVudF9lbmFibGVkKSB7Cj4+ICsJCQlpZiAodXBkYXRlX2RhdGEpCj4+ICsJCQkJdXBkYXRl X2ZlYXRfYW5kX2ZsYWcodnA5X2N0eCwgc2VnLCBmZWF0X2lkLCBzZWdpZCk7Cj4+ICsJCQlpZiAo IShkZWNfcGFyYW1zLT5mbGFncyAmIFY0TDJfVlA5X0ZSQU1FX0ZMQUdfS0VZX0ZSQU1FKSAmJgo+ PiArCQkJICAgIHY0bDJfdnA5X3NlZ19mZWF0X2VuYWJsZWQodnA5X2N0eC0+ZmVhdHVyZV9lbmFi bGVkLCBmZWF0X2lkLCBzZWdpZCkpCj4+ICsJCQkJZmVhdF92YWwgPSB2cDlfY3R4LT5mZWF0dXJl X2RhdGFbc2VnaWRdW2ZlYXRfaWRdICsgMTsKPj4gKwkJfQo+PiArCQloYW50cm9fcmVnX3dyaXRl KGN0eC0+ZGV2LCAmc2VnX3JlZ3Nbc2VnaWRdW2ZlYXRfaWRdLCBmZWF0X3ZhbCk7Cj4+ICsKPj4g KwkJLyogU2tpcCBzZWdtZW50IGZlYXR1cmUgKi8KPj4gKwkJZmVhdF9pZCA9IFY0TDJfVlA5X1NF R19MVkxfU0tJUDsKPj4gKwkJZmVhdF92YWwgPSAwOwo+PiArCQlpZiAoc2VnbWVudF9lbmFibGVk KSB7Cj4+ICsJCQlpZiAodXBkYXRlX2RhdGEpCj4+ICsJCQkJdXBkYXRlX2ZlYXRfYW5kX2ZsYWco dnA5X2N0eCwgc2VnLCBmZWF0X2lkLCBzZWdpZCk7Cj4+ICsJCQlmZWF0X3ZhbCA9IHY0bDJfdnA5 X3NlZ19mZWF0X2VuYWJsZWQodnA5X2N0eC0+ZmVhdHVyZV9lbmFibGVkLAo+PiArCQkJCQkJCSAg ICAgZmVhdF9pZCwgc2VnaWQpID8gMSA6IDA7Cj4+ICsJCX0KPj4gKwkJaGFudHJvX3JlZ193cml0 ZShjdHgtPmRldiwgJnNlZ19yZWdzW3NlZ2lkXVtmZWF0X2lkXSwgZmVhdF92YWwpOwo+PiArCX0K Pj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgY29uZmlnX2xvb3BfZmlsdGVyKHN0cnVjdCBoYW50 cm9fY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1z KQo+PiArewo+PiArCWJvb2wgZCA9IGRlY19wYXJhbXMtPmxmLmZsYWdzICYgVjRMMl9WUDlfTE9P UF9GSUxURVJfRkxBR19ERUxUQV9FTkFCTEVEOwo+PiArCj4+ICsJaGFudHJvX3JlZ193cml0ZShj dHgtPmRldiwgJnZwOV9maWx0X2xldmVsLCBkZWNfcGFyYW1zLT5sZi5sZXZlbCk7Cj4+ICsJaGFu dHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX291dF9maWx0ZXJpbmdfZGlzLCBkZWNfcGFyYW1z LT5sZi5sZXZlbCA9PSAwKTsKPj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmdnA5X2Zp bHRfc2hhcnBuZXNzLCBkZWNfcGFyYW1zLT5sZi5zaGFycG5lc3MpOwo+PiArCj4+ICsJaGFudHJv X3JlZ193cml0ZShjdHgtPmRldiwgJnZwOV9maWx0X3JlZl9hZGpfMCwgZCA/IGRlY19wYXJhbXMt PmxmLnJlZl9kZWx0YXNbMF0gOiAwKTsKPj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAm dnA5X2ZpbHRfcmVmX2Fkal8xLCBkID8gZGVjX3BhcmFtcy0+bGYucmVmX2RlbHRhc1sxXSA6IDAp Owo+PiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfZmlsdF9yZWZfYWRqXzIsIGQg PyBkZWNfcGFyYW1zLT5sZi5yZWZfZGVsdGFzWzJdIDogMCk7Cj4+ICsJaGFudHJvX3JlZ193cml0 ZShjdHgtPmRldiwgJnZwOV9maWx0X3JlZl9hZGpfMywgZCA/IGRlY19wYXJhbXMtPmxmLnJlZl9k ZWx0YXNbM10gOiAwKTsKPj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmdnA5X2ZpbHRf bWJfYWRqXzAsIGQgPyBkZWNfcGFyYW1zLT5sZi5tb2RlX2RlbHRhc1swXSA6IDApOwo+PiArCWhh bnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfZmlsdF9tYl9hZGpfMSwgZCA/IGRlY19wYXJh bXMtPmxmLm1vZGVfZGVsdGFzWzFdIDogMCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGNv bmZpZ19waWN0dXJlX2RpbWVuc2lvbnMoc3RydWN0IGhhbnRyb19jdHggKmN0eCwgc3RydWN0IGhh bnRyb19kZWNvZGVkX2J1ZmZlciAqZHN0KQo+PiArewo+PiArCXUzMiBwaWNfd180eDQsIHBpY19o XzR4NDsKPj4gKwo+PiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9waWNfd2lkdGhf aW5fY2JzLCAoZHN0LT52cDkud2lkdGggKyA3KSAvIDgpOwo+PiArCWhhbnRyb19yZWdfd3JpdGUo Y3R4LT5kZXYsICZnMl9waWNfaGVpZ2h0X2luX2NicywgKGRzdC0+dnA5LmhlaWdodCArIDcpIC8g OCk7Cj4+ICsJcGljX3dfNHg0ID0gcm91bmR1cChkc3QtPnZwOS53aWR0aCwgOCkgPj4gMjsKPj4g KwlwaWNfaF80eDQgPSByb3VuZHVwKGRzdC0+dnA5LmhlaWdodCwgOCkgPj4gMjsKPj4gKwloYW50 cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfcGljX3dpZHRoXzR4NCwgcGljX3dfNHg0KTsKPj4g KwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfcGljX2hlaWdodF80eDQsIHBpY19oXzR4 NCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkCj4+ICtjb25maWdfYml0X2RlcHRoKHN0cnVj dCBoYW50cm9fY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNf cGFyYW1zKQo+PiArewo+PiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9iaXRfZGVw dGhfeV9taW51czgsIGRlY19wYXJhbXMtPmJpdF9kZXB0aCAtIDgpOwo+PiArCWhhbnRyb19yZWdf d3JpdGUoY3R4LT5kZXYsICZnMl9iaXRfZGVwdGhfY19taW51czgsIGRlY19wYXJhbXMtPmJpdF9k ZXB0aCAtIDgpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIGJvb2wgaXNfbG9zc2xlc3Mo Y29uc3Qgc3RydWN0IHY0bDJfdnA5X3F1YW50aXphdGlvbiAqcXVhbnQpCj4+ICt7Cj4+ICsJcmV0 dXJuIHF1YW50LT5iYXNlX3FfaWR4ID09IDAgJiYgcXVhbnQtPmRlbHRhX3FfdXZfYWMgPT0gMCAm Jgo+PiArCSAgICAgICBxdWFudC0+ZGVsdGFfcV91dl9kYyA9PSAwICYmIHF1YW50LT5kZWx0YV9x X3lfZGMgPT0gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQKPj4gK2NvbmZpZ19xdWFudChz dHJ1Y3QgaGFudHJvX2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9mcmFtZSAq ZGVjX3BhcmFtcykKPj4gK3sKPj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmdnA5X3Fw X2RlbHRhX3lfZGMsIGRlY19wYXJhbXMtPnF1YW50LmRlbHRhX3FfeV9kYyk7Cj4+ICsJaGFudHJv X3JlZ193cml0ZShjdHgtPmRldiwgJnZwOV9xcF9kZWx0YV9jaF9kYywgZGVjX3BhcmFtcy0+cXVh bnQuZGVsdGFfcV91dl9kYyk7Cj4+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnZwOV9x cF9kZWx0YV9jaF9hYywgZGVjX3BhcmFtcy0+cXVhbnQuZGVsdGFfcV91dl9hYyk7Cj4+ICsJaGFu dHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnZwOV9sb3NzbGVzc19lLCBpc19sb3NzbGVzcygmZGVj X3BhcmFtcy0+cXVhbnQpKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHUzMgo+PiAraGFudHJvX2lu dGVycF9maWx0ZXJfZnJvbV92NGwyKHVuc2lnbmVkIGludCBpbnRlcnBvbGF0aW9uX2ZpbHRlcikK Pj4gK3sKPj4gKwlzd2l0Y2ggKGludGVycG9sYXRpb25fZmlsdGVyKSB7Cj4+ICsJY2FzZSBWNEwy X1ZQOV9JTlRFUlBfRklMVEVSX0VJR0hUVEFQOgo+PiArCQlyZXR1cm4gMHgxOwo+PiArCWNhc2Ug VjRMMl9WUDlfSU5URVJQX0ZJTFRFUl9FSUdIVFRBUF9TTU9PVEg6Cj4+ICsJCXJldHVybiAwOwo+ PiArCWNhc2UgVjRMMl9WUDlfSU5URVJQX0ZJTFRFUl9FSUdIVFRBUF9TSEFSUDoKPj4gKwkJcmV0 dXJuIDB4MjsKPj4gKwljYXNlIFY0TDJfVlA5X0lOVEVSUF9GSUxURVJfQklMSU5FQVI6Cj4+ICsJ CXJldHVybiAweDM7Cj4+ICsJY2FzZSBWNEwyX1ZQOV9JTlRFUlBfRklMVEVSX1NXSVRDSEFCTEU6 Cj4+ICsJCXJldHVybiAweDQ7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyB2b2lkCj4+ICtjb25maWdfb3RoZXJzKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgs IGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zLAo+PiArCSAgICAg IGJvb2wgaW50cmFfb25seSwgYm9vbCByZXNvbHV0aW9uX2NoYW5nZSkKPj4gK3sKPj4gKwlzdHJ1 Y3QgaGFudHJvX3ZwOV9kZWNfaHdfY3R4ICp2cDlfY3R4ID0gJmN0eC0+dnA5X2RlYzsKPj4gKwo+ PiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9pZHJfcGljX2UsIGludHJhX29ubHkp Owo+PiArCj4+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnZwOV90cmFuc2Zvcm1fbW9k ZSwgdnA5X2N0eC0+Y3VyLnR4X21vZGUpOwo+PiArCj4+ICsJaGFudHJvX3JlZ193cml0ZShjdHgt PmRldiwgJnZwOV9tY29tcF9maWx0X3R5cGUsIGludHJhX29ubHkgPwo+PiArCQkwIDogaGFudHJv X2ludGVycF9maWx0ZXJfZnJvbV92NGwyKGRlY19wYXJhbXMtPmludGVycG9sYXRpb25fZmlsdGVy KSk7Cj4+ICsKPj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmdnA5X2hpZ2hfcHJlY19t dl9lLAo+PiArCQkJICEhKGRlY19wYXJhbXMtPmZsYWdzICYgVjRMMl9WUDlfRlJBTUVfRkxBR19B TExPV19ISUdIX1BSRUNfTVYpKTsKPj4gKwo+PiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYs ICZ2cDlfY29tcF9wcmVkX21vZGUsIGRlY19wYXJhbXMtPnJlZmVyZW5jZV9tb2RlKTsKPj4gKwo+ PiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl90ZW1wb3JfbXZwX2UsCj4+ICsJCQkg IShkZWNfcGFyYW1zLT5mbGFncyAmIFY0TDJfVlA5X0ZSQU1FX0ZMQUdfRVJST1JfUkVTSUxJRU5U KSAmJgo+PiArCQkJICEoZGVjX3BhcmFtcy0+ZmxhZ3MgJiBWNEwyX1ZQOV9GUkFNRV9GTEFHX0tF WV9GUkFNRSkgJiYKPj4gKwkJCSAhKHZwOV9jdHgtPmxhc3QuZmxhZ3MgJiBWNEwyX1ZQOV9GUkFN RV9GTEFHX0tFWV9GUkFNRSkgJiYKPj4gKwkJCSAhKGRlY19wYXJhbXMtPmZsYWdzICYgVjRMMl9W UDlfRlJBTUVfRkxBR19JTlRSQV9PTkxZKSAmJgo+PiArCQkJICFyZXNvbHV0aW9uX2NoYW5nZSAm Jgo+PiArCQkJIHZwOV9jdHgtPmxhc3QuZmxhZ3MgJiBWNEwyX1ZQOV9GUkFNRV9GTEFHX1NIT1df RlJBTUUKPj4gKwkpOwo+PiArCj4+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX3dy aXRlX212c19lLAo+PiArCQkJICEoZGVjX3BhcmFtcy0+ZmxhZ3MgJiBWNEwyX1ZQOV9GUkFNRV9G TEFHX0tFWV9GUkFNRSkpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZAo+PiArY29uZmlnX2Nv bXBvdW5kX3JlZmVyZW5jZShzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+PiArCQkJICBjb25zdCBz dHJ1Y3QgdjRsMl9jdHJsX3ZwOV9mcmFtZSAqZGVjX3BhcmFtcykKPj4gK3sKPj4gKwl1MzIgY29t cF9maXhlZF9yZWYsIGNvbXBfdmFyX3JlZlsyXTsKPj4gKwlib29sIGxhc3RfcmVmX2ZyYW1lX3Np Z25fYmlhczsKPj4gKwlib29sIGdvbGRlbl9yZWZfZnJhbWVfc2lnbl9iaWFzOwo+PiArCWJvb2wg YWx0X3JlZl9mcmFtZV9zaWduX2JpYXM7Cj4+ICsJYm9vbCBjb21wX3JlZl9hbGxvd2VkID0gMDsK Pj4gKwo+PiArCWNvbXBfZml4ZWRfcmVmID0gMDsKPj4gKwljb21wX3Zhcl9yZWZbMF0gPSAwOwo+ PiArCWNvbXBfdmFyX3JlZlsxXSA9IDA7Cj4+ICsKPj4gKwlsYXN0X3JlZl9mcmFtZV9zaWduX2Jp YXMgPSBkZWNfcGFyYW1zLT5yZWZfZnJhbWVfc2lnbl9iaWFzICYgVjRMMl9WUDlfU0lHTl9CSUFT X0xBU1Q7Cj4+ICsJZ29sZGVuX3JlZl9mcmFtZV9zaWduX2JpYXMgPSBkZWNfcGFyYW1zLT5yZWZf ZnJhbWVfc2lnbl9iaWFzICYgVjRMMl9WUDlfU0lHTl9CSUFTX0dPTERFTjsKPj4gKwlhbHRfcmVm X2ZyYW1lX3NpZ25fYmlhcyA9IGRlY19wYXJhbXMtPnJlZl9mcmFtZV9zaWduX2JpYXMgJiBWNEwy X1ZQOV9TSUdOX0JJQVNfQUxUOwo+PiArCj4+ICsJLyogNi4zLjEyIEZyYW1lIHJlZmVyZW5jZSBt b2RlIHN5bnRheCAqLwo+PiArCWNvbXBfcmVmX2FsbG93ZWQgfD0gZ29sZGVuX3JlZl9mcmFtZV9z aWduX2JpYXMgIT0gbGFzdF9yZWZfZnJhbWVfc2lnbl9iaWFzOwo+PiArCWNvbXBfcmVmX2FsbG93 ZWQgfD0gYWx0X3JlZl9mcmFtZV9zaWduX2JpYXMgIT0gbGFzdF9yZWZfZnJhbWVfc2lnbl9iaWFz Owo+PiArCj4+ICsJaWYgKGNvbXBfcmVmX2FsbG93ZWQpIHsKPj4gKwkJaWYgKGxhc3RfcmVmX2Zy YW1lX3NpZ25fYmlhcyA9PQo+PiArCQkgICAgZ29sZGVuX3JlZl9mcmFtZV9zaWduX2JpYXMpIHsK Pj4gKwkJCWNvbXBfZml4ZWRfcmVmID0gQUxUUkVGX0ZSQU1FOwo+PiArCQkJY29tcF92YXJfcmVm WzBdID0gTEFTVF9GUkFNRTsKPj4gKwkJCWNvbXBfdmFyX3JlZlsxXSA9IEdPTERFTl9GUkFNRTsK Pj4gKwkJfSBlbHNlIGlmIChsYXN0X3JlZl9mcmFtZV9zaWduX2JpYXMgPT0KPj4gKwkJCSAgIGFs dF9yZWZfZnJhbWVfc2lnbl9iaWFzKSB7Cj4+ICsJCQljb21wX2ZpeGVkX3JlZiA9IEdPTERFTl9G UkFNRTsKPj4gKwkJCWNvbXBfdmFyX3JlZlswXSA9IExBU1RfRlJBTUU7Cj4+ICsJCQljb21wX3Zh cl9yZWZbMV0gPSBBTFRSRUZfRlJBTUU7Cj4+ICsJCX0gZWxzZSB7Cj4+ICsJCQljb21wX2ZpeGVk X3JlZiA9IExBU1RfRlJBTUU7Cj4+ICsJCQljb21wX3Zhcl9yZWZbMF0gPSBHT0xERU5fRlJBTUU7 Cj4+ICsJCQljb21wX3Zhcl9yZWZbMV0gPSBBTFRSRUZfRlJBTUU7Cj4+ICsJCX0KPj4gKwl9Cj4+ ICsKPj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmdnA5X2NvbXBfcHJlZF9maXhlZF9y ZWYsIGNvbXBfZml4ZWRfcmVmKTsKPj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmdnA5 X2NvbXBfcHJlZF92YXJfcmVmMCwgY29tcF92YXJfcmVmWzBdKTsKPj4gKwloYW50cm9fcmVnX3dy aXRlKGN0eC0+ZGV2LCAmdnA5X2NvbXBfcHJlZF92YXJfcmVmMSwgY29tcF92YXJfcmVmWzFdKTsK Pj4gK30KPj4gKwo+PiArI2RlZmluZSBJTk5FUl9MT09QIFwKPj4gK2RvIHsJCQkJCQkJCQlcCj4+ ICsJZm9yIChtID0gMDsgbSA8IEFSUkFZX1NJWkUoYWRhcHRpdmUtPmNvZWZbMF1bMF1bMF1bMF0p OyArK20pIHsJXAo+PiArCQltZW1jcHkoYWRhcHRpdmUtPmNvZWZbaV1bal1ba11bbF1bbV0sCQkJ XAo+PiArCQkgICAgICAgcHJvYnMtPmNvZWZbaV1bal1ba11bbF1bbV0sCQkJXAo+PiArCQkgICAg ICAgc2l6ZW9mKHByb2JzLT5jb2VmW2ldW2pdW2tdW2xdW21dKSk7CQlcCj4+ICsJCQkJCQkJCQlc Cj4+ICsJCWFkYXB0aXZlLT5jb2VmW2ldW2pdW2tdW2xdW21dWzNdID0gMDsJCQlcCj4+ICsJfQkJ CQkJCQkJXAo+PiArfSB3aGlsZSAoMCkKPj4gKwo+PiArc3RhdGljIHZvaWQgY29uZmlnX3Byb2Jz KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1l ICpkZWNfcGFyYW1zKQo+PiArewo+PiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggKnZw OV9jdHggPSAmY3R4LT52cDlfZGVjOwo+PiArCXN0cnVjdCBoYW50cm9fYXV4X2J1ZiAqbWlzYyA9 ICZ2cDlfY3R4LT5taXNjOwo+PiArCXN0cnVjdCBoYW50cm9fZzJfYWxsX3Byb2JzICphbGxfcHJv YnMgPSBtaXNjLT5jcHU7Cj4+ICsJc3RydWN0IGhhbnRyb19nMl9wcm9icyAqYWRhcHRpdmU7Cj4+ ICsJc3RydWN0IGhhbnRyb19nMl9tdl9wcm9icyAqbXY7Cj4+ICsJY29uc3Qgc3RydWN0IHY0bDJf dnA5X3NlZ21lbnRhdGlvbiAqc2VnID0gJmRlY19wYXJhbXMtPnNlZzsKPj4gKwljb25zdCBzdHJ1 Y3QgdjRsMl92cDlfZnJhbWVfY29udGV4dCAqcHJvYnMgPSAmdnA5X2N0eC0+cHJvYmFiaWxpdHlf dGFibGVzOwo+PiArCWludCBpLCBqLCBrLCBsLCBtOwo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUoYWxsX3Byb2JzLT5rZl95X21vZGVfcHJvYik7ICsraSkKPj4gKwkJZm9yIChq ID0gMDsgaiA8IEFSUkFZX1NJWkUoYWxsX3Byb2JzLT5rZl95X21vZGVfcHJvYlswXSk7ICsraikg ewo+PiArCQkJbWVtY3B5KGFsbF9wcm9icy0+a2ZfeV9tb2RlX3Byb2JbaV1bal0sCj4+ICsJCQkg ICAgICAgdjRsMl92cDlfa2ZfeV9tb2RlX3Byb2JbaV1bal0sCj4+ICsJCQkgICAgICAgQVJSQVlf U0laRShhbGxfcHJvYnMtPmtmX3lfbW9kZV9wcm9iW2ldW2pdKSk7Cj4+ICsKPj4gKwkJCWFsbF9w cm9icy0+a2ZfeV9tb2RlX3Byb2JfdGFpbFtpXVtqXVswXSA9Cj4+ICsJCQkJdjRsMl92cDlfa2Zf eV9tb2RlX3Byb2JbaV1bal1bOF07Cj4+ICsJCX0KPj4gKwo+PiArCW1lbWNweShhbGxfcHJvYnMt Pm1iX3NlZ21lbnRfdHJlZV9wcm9icywgc2VnLT50cmVlX3Byb2JzLAo+PiArCSAgICAgICBzaXpl b2YoYWxsX3Byb2JzLT5tYl9zZWdtZW50X3RyZWVfcHJvYnMpKTsKPj4gKwo+PiArCW1lbWNweShh bGxfcHJvYnMtPnNlZ21lbnRfcHJlZF9wcm9icywgc2VnLT5wcmVkX3Byb2JzLAo+PiArCSAgICAg ICBzaXplb2YoYWxsX3Byb2JzLT5zZWdtZW50X3ByZWRfcHJvYnMpKTsKPj4gKwo+PiArCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFsbF9wcm9icy0+a2ZfdXZfbW9kZV9wcm9iKTsgKytpKSB7 Cj4+ICsJCW1lbWNweShhbGxfcHJvYnMtPmtmX3V2X21vZGVfcHJvYltpXSwgdjRsMl92cDlfa2Zf dXZfbW9kZV9wcm9iW2ldLAo+PiArCQkgICAgICAgQVJSQVlfU0laRShhbGxfcHJvYnMtPmtmX3V2 X21vZGVfcHJvYltpXSkpOwo+PiArCj4+ICsJCWFsbF9wcm9icy0+a2ZfdXZfbW9kZV9wcm9iX3Rh aWxbaV1bMF0gPSB2NGwyX3ZwOV9rZl91dl9tb2RlX3Byb2JbaV1bOF07Cj4+ICsJfQo+PiArCj4+ ICsJYWRhcHRpdmUgPSAmYWxsX3Byb2JzLT5wcm9iczsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGFkYXB0aXZlLT5pbnRlcl9tb2RlKTsgKytpKSB7Cj4+ICsJCW1lbWNweShh ZGFwdGl2ZS0+aW50ZXJfbW9kZVtpXSwgcHJvYnMtPmludGVyX21vZGVbaV0sCj4+ICsJCSAgICAg ICBzaXplb2YocHJvYnMtPmludGVyX21vZGUpKTsKPj4gKwo+PiArCQlhZGFwdGl2ZS0+aW50ZXJf bW9kZVtpXVszXSA9IDA7Cj4+ICsJfQo+PiArCj4+ICsJbWVtY3B5KGFkYXB0aXZlLT5pc19pbnRl ciwgcHJvYnMtPmlzX2ludGVyLCBzaXplb2YoYWRhcHRpdmUtPmlzX2ludGVyKSk7Cj4+ICsKPj4g Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhZGFwdGl2ZS0+dXZfbW9kZSk7ICsraSkgewo+ PiArCQltZW1jcHkoYWRhcHRpdmUtPnV2X21vZGVbaV0sIHByb2JzLT51dl9tb2RlW2ldLAo+PiAr CQkgICAgICAgc2l6ZW9mKGFkYXB0aXZlLT51dl9tb2RlW2ldKSk7Cj4+ICsJCWFkYXB0aXZlLT51 dl9tb2RlX3RhaWxbaV1bMF0gPSBwcm9icy0+dXZfbW9kZVtpXVs4XTsKPj4gKwl9Cj4+ICsKPj4g KwltZW1jcHkoYWRhcHRpdmUtPnR4OCwgcHJvYnMtPnR4OCwgc2l6ZW9mKGFkYXB0aXZlLT50eDgp KTsKPj4gKwltZW1jcHkoYWRhcHRpdmUtPnR4MTYsIHByb2JzLT50eDE2LCBzaXplb2YoYWRhcHRp dmUtPnR4MTYpKTsKPj4gKwltZW1jcHkoYWRhcHRpdmUtPnR4MzIsIHByb2JzLT50eDMyLCBzaXpl b2YoYWRhcHRpdmUtPnR4MzIpKTsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF KGFkYXB0aXZlLT55X21vZGUpOyArK2kpIHsKPj4gKwkJbWVtY3B5KGFkYXB0aXZlLT55X21vZGVb aV0sIHByb2JzLT55X21vZGVbaV0sCj4+ICsJCSAgICAgICBBUlJBWV9TSVpFKGFkYXB0aXZlLT55 X21vZGVbaV0pKTsKPj4gKwo+PiArCQlhZGFwdGl2ZS0+eV9tb2RlX3RhaWxbaV1bMF0gPSBwcm9i cy0+eV9tb2RlW2ldWzhdOwo+PiArCX0KPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGFkYXB0aXZlLT5wYXJ0aXRpb25bMF0pOyArK2kpIHsKPj4gKwkJbWVtY3B5KGFkYXB0aXZl LT5wYXJ0aXRpb25bMF1baV0sIHY0bDJfdnA5X2tmX3BhcnRpdGlvbl9wcm9ic1tpXSwKPj4gKwkJ ICAgICAgIHNpemVvZih2NGwyX3ZwOV9rZl9wYXJ0aXRpb25fcHJvYnNbaV0pKTsKPj4gKwo+PiAr CQlhZGFwdGl2ZS0+cGFydGl0aW9uWzBdW2ldWzNdID0gMDsKPj4gKwl9Cj4+ICsKPj4gKwlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShhZGFwdGl2ZS0+cGFydGl0aW9uWzFdKTsgKytpKSB7Cj4+ ICsJCW1lbWNweShhZGFwdGl2ZS0+cGFydGl0aW9uWzFdW2ldLCBwcm9icy0+cGFydGl0aW9uW2ld LAo+PiArCQkgICAgICAgc2l6ZW9mKHByb2JzLT5wYXJ0aXRpb25baV0pKTsKPj4gKwo+PiArCQlh ZGFwdGl2ZS0+cGFydGl0aW9uWzFdW2ldWzNdID0gMDsKPj4gKwl9Cj4+ICsKPj4gKwltZW1jcHko YWRhcHRpdmUtPmludGVycF9maWx0ZXIsIHByb2JzLT5pbnRlcnBfZmlsdGVyLAo+PiArCSAgICAg ICBzaXplb2YoYWRhcHRpdmUtPmludGVycF9maWx0ZXIpKTsKPj4gKwo+PiArCW1lbWNweShhZGFw dGl2ZS0+Y29tcF9tb2RlLCBwcm9icy0+Y29tcF9tb2RlLCBzaXplb2YoYWRhcHRpdmUtPmNvbXBf bW9kZSkpOwo+PiArCj4+ICsJbWVtY3B5KGFkYXB0aXZlLT5za2lwLCBwcm9icy0+c2tpcCwgc2l6 ZW9mKGFkYXB0aXZlLT5za2lwKSk7Cj4+ICsKPj4gKwltdiA9ICZhZGFwdGl2ZS0+bXY7Cj4+ICsK Pj4gKwltZW1jcHkobXYtPmpvaW50LCBwcm9icy0+bXYuam9pbnQsIHNpemVvZihtdi0+am9pbnQp KTsKPj4gKwltZW1jcHkobXYtPnNpZ24sIHByb2JzLT5tdi5zaWduLCBzaXplb2YobXYtPnNpZ24p KTsKPj4gKwltZW1jcHkobXYtPmNsYXNzMF9iaXQsIHByb2JzLT5tdi5jbGFzczBfYml0LCBzaXpl b2YobXYtPmNsYXNzMF9iaXQpKTsKPj4gKwltZW1jcHkobXYtPmZyLCBwcm9icy0+bXYuZnIsIHNp emVvZihtdi0+ZnIpKTsKPj4gKwltZW1jcHkobXYtPmNsYXNzMF9ocCwgcHJvYnMtPm12LmNsYXNz MF9ocCwgc2l6ZW9mKG12LT5jbGFzczBfaHApKTsKPj4gKwltZW1jcHkobXYtPmhwLCBwcm9icy0+ bXYuaHAsIHNpemVvZihtdi0+aHApKTsKPj4gKwltZW1jcHkobXYtPmNsYXNzZXMsIHByb2JzLT5t di5jbGFzc2VzLCBzaXplb2YobXYtPmNsYXNzZXMpKTsKPj4gKwltZW1jcHkobXYtPmNsYXNzMF9m ciwgcHJvYnMtPm12LmNsYXNzMF9mciwgc2l6ZW9mKG12LT5jbGFzczBfZnIpKTsKPj4gKwltZW1j cHkobXYtPmJpdHMsIHByb2JzLT5tdi5iaXRzLCBzaXplb2YobXYtPmJpdHMpKTsKPj4gKwo+PiAr CW1lbWNweShhZGFwdGl2ZS0+c2luZ2xlX3JlZiwgcHJvYnMtPnNpbmdsZV9yZWYsIHNpemVvZihh ZGFwdGl2ZS0+c2luZ2xlX3JlZikpOwo+PiArCj4+ICsJbWVtY3B5KGFkYXB0aXZlLT5jb21wX3Jl ZiwgcHJvYnMtPmNvbXBfcmVmLCBzaXplb2YoYWRhcHRpdmUtPmNvbXBfcmVmKSk7Cj4+ICsKPj4g Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhZGFwdGl2ZS0+Y29lZik7ICsraSkKPj4gKwkJ Zm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoYWRhcHRpdmUtPmNvZWZbMF0pOyArK2opCj4+ICsJ CQlmb3IgKGsgPSAwOyBrIDwgQVJSQVlfU0laRShhZGFwdGl2ZS0+Y29lZlswXVswXSk7ICsraykK Pj4gKwkJCQlmb3IgKGwgPSAwOyBsIDwgQVJSQVlfU0laRShhZGFwdGl2ZS0+Y29lZlswXVswXVsw XSk7ICsrbCkKPj4gKwkJCQkJSU5ORVJfTE9PUDsKPj4gKwo+PiArCWhhbnRyb193cml0ZV9hZGRy KGN0eC0+ZGV2LCBWUDlfQUREUl9QUk9CUywgbWlzYy0+ZG1hKTsKPj4gK30KPj4gKwo+PiArc3Rh dGljIHZvaWQgY29uZmlnX2NvdW50cyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+PiArewo+PiAr CXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggKnZwOV9kZWMgPSAmY3R4LT52cDlfZGVjOwo+ PiArCXN0cnVjdCBoYW50cm9fYXV4X2J1ZiAqbWlzYyA9ICZ2cDlfZGVjLT5taXNjOwo+PiArCWRt YV9hZGRyX3QgYWRkciA9IG1pc2MtPmRtYSArIHZwOV9kZWMtPmN0eF9jb3VudGVyc19vZmZzZXQ7 Cj4+ICsKPj4gKwloYW50cm9fd3JpdGVfYWRkcihjdHgtPmRldiwgVlA5X0FERFJfQ1RSLCBhZGRy KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgY29uZmlnX3NlZ19tYXAoc3RydWN0IGhhbnRy b19jdHggKmN0eCwKPj4gKwkJCSAgIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpk ZWNfcGFyYW1zLAo+PiArCQkJICAgYm9vbCBpbnRyYV9vbmx5LCBib29sIHVwZGF0ZV9tYXApCj4+ ICt7Cj4+ICsJc3RydWN0IGhhbnRyb192cDlfZGVjX2h3X2N0eCAqdnA5X2N0eCA9ICZjdHgtPnZw OV9kZWM7Cj4+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmICpzZWdtZW50X21hcCA9ICZ2cDlfY3R4 LT5zZWdtZW50X21hcDsKPj4gKwlkbWFfYWRkcl90IGFkZHI7Cj4+ICsKPj4gKwlpZiAoaW50cmFf b25seSB8fAo+PiArCSAgICAoZGVjX3BhcmFtcy0+ZmxhZ3MgJiBWNEwyX1ZQOV9GUkFNRV9GTEFH X0VSUk9SX1JFU0lMSUVOVCkpIHsKPj4gKwkJbWVtc2V0KHNlZ21lbnRfbWFwLT5jcHUsIDAsIHNl Z21lbnRfbWFwLT5zaXplKTsKPj4gKwkJbWVtc2V0KHZwOV9jdHgtPmZlYXR1cmVfZGF0YSwgMCwg c2l6ZW9mKHZwOV9jdHgtPmZlYXR1cmVfZGF0YSkpOwo+PiArCQltZW1zZXQodnA5X2N0eC0+ZmVh dHVyZV9lbmFibGVkLCAwLCBzaXplb2YodnA5X2N0eC0+ZmVhdHVyZV9lbmFibGVkKSk7Cj4+ICsJ fQo+PiArCj4+ICsJYWRkciA9IHNlZ21lbnRfbWFwLT5kbWEgKyB2cDlfY3R4LT5hY3RpdmVfc2Vn bWVudCAqIHZwOV9jdHgtPnNlZ21lbnRfbWFwX3NpemU7Cj4+ICsJaGFudHJvX3dyaXRlX2FkZHIo Y3R4LT5kZXYsIFZQOV9BRERSX1NFR01FTlRfUkVBRCwgYWRkcik7Cj4+ICsKPj4gKwlhZGRyID0g c2VnbWVudF9tYXAtPmRtYSArICgxIC0gdnA5X2N0eC0+YWN0aXZlX3NlZ21lbnQpICogdnA5X2N0 eC0+c2VnbWVudF9tYXBfc2l6ZTsKPj4gKwloYW50cm9fd3JpdGVfYWRkcihjdHgtPmRldiwgVlA5 X0FERFJfU0VHTUVOVF9XUklURSwgYWRkcik7Cj4+ICsKPj4gKwlpZiAodXBkYXRlX21hcCkKPj4g KwkJdnA5X2N0eC0+YWN0aXZlX3NlZ21lbnQgPSAxIC0gdnA5X2N0eC0+YWN0aXZlX3NlZ21lbnQ7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkCj4+ICtjb25maWdfc291cmNlKHN0cnVjdCBoYW50 cm9fY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1z LAo+PiArCSAgICAgIHN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZiMl9zcmMpCj4+ICt7Cj4+ICsJ ZG1hX2FkZHJfdCBzdHJlYW1fYmFzZSwgdG1wX2FkZHI7Cj4+ICsJdW5zaWduZWQgaW50IGhlYWRy ZXNfc2l6ZTsKPj4gKwl1MzIgc3JjX2xlbiwgc3RhcnRfYml0LCBzcmNfYnVmX2xlbjsKPj4gKwo+ PiArCWhlYWRyZXNfc2l6ZSA9IGRlY19wYXJhbXMtPnVuY29tcHJlc3NlZF9oZWFkZXJfc2l6ZQo+ PiArCQkgICAgICsgZGVjX3BhcmFtcy0+Y29tcHJlc3NlZF9oZWFkZXJfc2l6ZTsKPj4gKwo+PiAr CXN0cmVhbV9iYXNlID0gdmIyX2RtYV9jb250aWdfcGxhbmVfZG1hX2FkZHIoJnZiMl9zcmMtPnZi Ml9idWYsIDApOwo+PiArCWhhbnRyb193cml0ZV9hZGRyKGN0eC0+ZGV2LCBHMl9BRERSX1NUUiwg c3RyZWFtX2Jhc2UpOwo+PiArCj4+ICsJdG1wX2FkZHIgPSBzdHJlYW1fYmFzZSArIGhlYWRyZXNf c2l6ZTsKPj4gKwlzdGFydF9iaXQgPSAodG1wX2FkZHIgJiAweGYpICogODsKPj4gKwloYW50cm9f cmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfc3RhcnRfYml0LCBzdGFydF9iaXQpOwo+PiArCj4+ICsJ c3JjX2xlbiA9IHZiMl9nZXRfcGxhbmVfcGF5bG9hZCgmdmIyX3NyYy0+dmIyX2J1ZiwgMCk7Cj4+ ICsJc3JjX2xlbiArPSBzdGFydF9iaXQgLyA4IC0gaGVhZHJlc19zaXplOwo+PiArCWhhbnRyb19y ZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9zdHJlYW1fbGVuLCBzcmNfbGVuKTsKPj4gKwo+PiArCXRt cF9hZGRyICY9IH4weGY7Cj4+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX3N0cm1f c3RhcnRfb2Zmc2V0LCB0bXBfYWRkciAtIHN0cmVhbV9iYXNlKTsKPj4gKwlzcmNfYnVmX2xlbiA9 IHZiMl9wbGFuZV9zaXplKCZ2YjJfc3JjLT52YjJfYnVmLCAwKTsKPj4gKwloYW50cm9fcmVnX3dy aXRlKGN0eC0+ZGV2LCAmZzJfc3RybV9idWZmZXJfbGVuLCBzcmNfYnVmX2xlbik7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyB2b2lkCj4+ICtjb25maWdfcmVnaXN0ZXJzKHN0cnVjdCBoYW50cm9fY3R4 ICpjdHgsIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zLAo+PiAr CQkgc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqdmIyX3NyYywgc3RydWN0IHZiMl92NGwyX2J1ZmZl ciAqdmIyX2RzdCkKPj4gK3sKPj4gKwlzdHJ1Y3QgaGFudHJvX2RlY29kZWRfYnVmZmVyICpkc3Qs ICpsYXN0LCAqbXZfcmVmOwo+PiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggKnZwOV9j dHggPSAmY3R4LT52cDlfZGVjOwo+PiArCWNvbnN0IHN0cnVjdCB2NGwyX3ZwOV9zZWdtZW50YXRp b24gKnNlZzsKPj4gKwlib29sIGludHJhX29ubHksIHJlc29sdXRpb25fY2hhbmdlOwo+PiArCj4+ ICsJLyogdnA5IHN0dWZmICovCj4+ICsJZHN0ID0gdmIyX3RvX2hhbnRyb19kZWNvZGVkX2J1Zigm dmIyX2RzdC0+dmIyX2J1Zik7Cj4+ICsKPj4gKwlpZiAodnA5X2N0eC0+bGFzdC52YWxpZCkKPj4g KwkJbGFzdCA9IGdldF9yZWZfYnVmKGN0eCwgJmRzdC0+YmFzZS52YiwgdnA5X2N0eC0+bGFzdC50 aW1lc3RhbXApOwo+PiArCWVsc2UKPj4gKwkJbGFzdCA9IGRzdDsKPj4gKwo+PiArCXVwZGF0ZV9k ZWNfYnVmX2luZm8oZHN0LCBkZWNfcGFyYW1zKTsKPj4gKwl1cGRhdGVfY3R4X2N1cl9pbmZvKHZw OV9jdHgsIGRzdCwgZGVjX3BhcmFtcyk7Cj4+ICsJc2VnID0gJmRlY19wYXJhbXMtPnNlZzsKPj4g Kwo+PiArCWludHJhX29ubHkgPSAhIShkZWNfcGFyYW1zLT5mbGFncyAmCj4+ICsJCQkoVjRMMl9W UDlfRlJBTUVfRkxBR19LRVlfRlJBTUUgfAo+PiArCQkJVjRMMl9WUDlfRlJBTUVfRkxBR19JTlRS QV9PTkxZKSk7Cj4+ICsKPj4gKwlpZiAoIWludHJhX29ubHkgJiYKPj4gKwkgICAgIShkZWNfcGFy YW1zLT5mbGFncyAmIFY0TDJfVlA5X0ZSQU1FX0ZMQUdfRVJST1JfUkVTSUxJRU5UKSAmJgo+PiAr CSAgICB2cDlfY3R4LT5sYXN0LnZhbGlkKQo+PiArCQltdl9yZWYgPSBsYXN0Owo+PiArCWVsc2UK Pj4gKwkJbXZfcmVmID0gZHN0Owo+PiArCj4+ICsJcmVzb2x1dGlvbl9jaGFuZ2UgPSBkc3QtPnZw OS53aWR0aCAhPSBsYXN0LT52cDkud2lkdGggfHwKPj4gKwkJCSAgICBkc3QtPnZwOS5oZWlnaHQg IT0gbGFzdC0+dnA5LmhlaWdodDsKPj4gKwo+PiArCS8qIGNvbmZpZ3VyZSBiYXNpYyByZWdpc3Rl cnMgKi8KPj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfbW9kZSwgVlA5X0RFQ19N T0RFKTsKPj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfc3RybV9zd2FwLCAweGYp Owo+PiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9kaXJtdl9zd2FwLCAweGYpOwo+ PiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9jb21wcmVzc19zd2FwLCAweGYpOwo+ PiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9idXN3aWR0aCwgQlVTX1dJRFRIXzEy OCk7Cj4+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX21heF9idXJzdCwgMTYpOwo+ PiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9hcGZfdGhyZXNob2xkLCA4KTsKPj4g KwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfcmVmX2NvbXByZXNzX2J5cGFzcywgMSk7 Cj4+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX2Nsa19nYXRlX2UsIDEpOwo+PiAr CWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9tYXhfY2Jfc2l6ZSwgNik7Cj4+ICsJaGFu dHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX21pbl9jYl9zaXplLCAzKTsKPj4gKwo+PiArCWNv bmZpZ19vdXRwdXQoY3R4LCBkc3QsIGRlY19wYXJhbXMpOwo+PiArCj4+ICsJaWYgKCFpbnRyYV9v bmx5KQo+PiArCQljb25maWdfcmVmX3JlZ2lzdGVycyhjdHgsIGRlY19wYXJhbXMsIGRzdCwgbXZf cmVmKTsKPj4gKwo+PiArCWNvbmZpZ190aWxlcyhjdHgsIGRlY19wYXJhbXMsIGRzdCk7Cj4+ICsJ Y29uZmlnX3NlZ21lbnQoY3R4LCBkZWNfcGFyYW1zKTsKPj4gKwljb25maWdfbG9vcF9maWx0ZXIo Y3R4LCBkZWNfcGFyYW1zKTsKPj4gKwljb25maWdfcGljdHVyZV9kaW1lbnNpb25zKGN0eCwgZHN0 KTsKPj4gKwljb25maWdfYml0X2RlcHRoKGN0eCwgZGVjX3BhcmFtcyk7Cj4+ICsJY29uZmlnX3F1 YW50KGN0eCwgZGVjX3BhcmFtcyk7Cj4+ICsJY29uZmlnX290aGVycyhjdHgsIGRlY19wYXJhbXMs IGludHJhX29ubHksIHJlc29sdXRpb25fY2hhbmdlKTsKPj4gKwljb25maWdfY29tcG91bmRfcmVm ZXJlbmNlKGN0eCwgZGVjX3BhcmFtcyk7Cj4+ICsJY29uZmlnX3Byb2JzKGN0eCwgZGVjX3BhcmFt cyk7Cj4+ICsJY29uZmlnX2NvdW50cyhjdHgpOwo+PiArCWNvbmZpZ19zZWdfbWFwKGN0eCwgZGVj X3BhcmFtcywgaW50cmFfb25seSwKPj4gKwkJICAgICAgIHNlZy0+ZmxhZ3MgJiBWNEwyX1ZQOV9T RUdNRU5UQVRJT05fRkxBR19VUERBVEVfTUFQKTsKPj4gKwljb25maWdfc291cmNlKGN0eCwgZGVj X3BhcmFtcywgdmIyX3NyYyk7Cj4+ICt9Cj4+ICsKPj4gK2ludCBoYW50cm9fZzJfdnA5X2RlY19y dW4oc3RydWN0IGhhbnRyb19jdHggKmN0eCkKPj4gK3sKPj4gKwljb25zdCBzdHJ1Y3QgdjRsMl9j dHJsX3ZwOV9mcmFtZSAqZGVjb2RlX3BhcmFtczsKPj4gKwlzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVy ICpzcmM7Cj4+ICsJc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqZHN0Owo+PiArCWludCByZXQ7Cj4+ ICsKPj4gKwloYW50cm9fZzJfY2hlY2tfaWRsZShjdHgtPmRldik7Cj4+ICsKPj4gKwlyZXQgPSBz dGFydF9wcmVwYXJlX3J1bihjdHgsICZkZWNvZGVfcGFyYW1zKTsKPj4gKwlpZiAocmV0KSB7Cj4+ ICsJCWhhbnRyb19lbmRfcHJlcGFyZV9ydW4oY3R4KTsKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwl9 Cj4+ICsKPj4gKwlzcmMgPSBoYW50cm9fZ2V0X3NyY19idWYoY3R4KTsKPj4gKwlkc3QgPSBoYW50 cm9fZ2V0X2RzdF9idWYoY3R4KTsKPj4gKwo+PiArCWNvbmZpZ19yZWdpc3RlcnMoY3R4LCBkZWNv ZGVfcGFyYW1zLCBzcmMsIGRzdCk7Cj4+ICsKPj4gKwloYW50cm9fZW5kX3ByZXBhcmVfcnVuKGN0 eCk7Cj4+ICsKPj4gKwl2ZHB1X3dyaXRlKGN0eC0+ZGV2LCBHMl9SRUdfSU5URVJSVVBUX0RFQ19F LCBHMl9SRUdfSU5URVJSVVBUKTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICsj ZGVmaW5lIGNvcHlfdHhfYW5kX3NraXAocDEsIHAyKQkJCQlcCj4+ICtkbyB7CQkJCQkJCQlcCj4+ ICsJbWVtY3B5KChwMSktPnR4OCwgKHAyKS0+dHg4LCBzaXplb2YoKHAxKS0+dHg4KSk7CVwKPj4g KwltZW1jcHkoKHAxKS0+dHgxNiwgKHAyKS0+dHgxNiwgc2l6ZW9mKChwMSktPnR4MTYpKTsJXAo+ PiArCW1lbWNweSgocDEpLT50eDMyLCAocDIpLT50eDMyLCBzaXplb2YoKHAxKS0+dHgzMikpOwlc Cj4+ICsJbWVtY3B5KChwMSktPnNraXAsIChwMiktPnNraXAsIHNpemVvZigocDEpLT5za2lwKSk7 CVwKPj4gK30gd2hpbGUgKDApCj4+ICsKPj4gK3ZvaWQgaGFudHJvX2cyX3ZwOV9kZWNfZG9uZShz dHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+PiArewo+PiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19o d19jdHggKnZwOV9jdHggPSAmY3R4LT52cDlfZGVjOwo+PiArCXVuc2lnbmVkIGludCBmY3R4X2lk eDsKPj4gKwo+PiArCWlmICghKHZwOV9jdHgtPmN1ci5mbGFncyAmIFY0TDJfVlA5X0ZSQU1FX0ZM QUdfUkVGUkVTSF9GUkFNRV9DVFgpKQo+PiArCQlnb3RvIG91dF91cGRhdGVfbGFzdDsKPj4gKwo+ PiArCWZjdHhfaWR4ID0gdnA5X2N0eC0+Y3VyLmZyYW1lX2NvbnRleHRfaWR4Owo+PiArCj4+ICsJ aWYgKCEodnA5X2N0eC0+Y3VyLmZsYWdzICYgVjRMMl9WUDlfRlJBTUVfRkxBR19QQVJBTExFTF9E RUNfTU9ERSkpIHsKPj4gKwkJLyogZXJyb3JfcmVzaWxpZW50X21vZGUgPT0gMCAmJiBmcmFtZV9w YXJhbGxlbF9kZWNvZGluZ19tb2RlID09IDAgKi8KPj4gKwkJc3RydWN0IHY0bDJfdnA5X2ZyYW1l X2NvbnRleHQgKnByb2JzID0gJnZwOV9jdHgtPnByb2JhYmlsaXR5X3RhYmxlczsKPj4gKwkJYm9v bCBmcmFtZV9pc19pbnRyYSA9IHZwOV9jdHgtPmN1ci5mbGFncyAmCj4+ICsJCSAgICAoVjRMMl9W UDlfRlJBTUVfRkxBR19LRVlfRlJBTUUgfCBWNEwyX1ZQOV9GUkFNRV9GTEFHX0lOVFJBX09OTFkp Owo+PiArCQlzdHJ1Y3QgdHhfYW5kX3NraXAgewo+PiArCQkJdTggdHg4WzJdWzFdOwo+PiArCQkJ dTggdHgxNlsyXVsyXTsKPj4gKwkJCXU4IHR4MzJbMl1bM107Cj4+ICsJCQl1OCBza2lwWzNdOwo+ PiArCQl9IF90eF9za2lwLCAqdHhfc2tpcCA9ICZfdHhfc2tpcDsKPj4gKwkJc3RydWN0IHY0bDJf dnA5X2ZyYW1lX3N5bWJvbF9jb3VudHMgKmNvdW50czsKPj4gKwkJc3RydWN0IHN5bWJvbF9jb3Vu dHMgKmhhbnRyb19jbnRzOwo+PiArCQl1MzIgdHgxNnBbMl1bNF07Cj4+ICsJCWludCBpOwo+PiAr Cj4+ICsJCS8qIGJ1ZmZlciB0aGUgZm9yd2FyZC11cGRhdGVkIFRYIGFuZCBza2lwIHByb2JzICov Cj4+ICsJCWlmIChmcmFtZV9pc19pbnRyYSkKPj4gKwkJCWNvcHlfdHhfYW5kX3NraXAodHhfc2tp cCwgcHJvYnMpOwo+PiArCj4+ICsJCS8qIDYuMS4yIHJlZnJlc2hfcHJvYnMoKTogbG9hZF9wcm9i cygpIGFuZCBsb2FkX3Byb2JzMigpICovCj4+ICsJCSpwcm9icyA9IHZwOV9jdHgtPmZyYW1lX2Nv bnRleHRbZmN0eF9pZHhdOwo+PiArCj4+ICsJCS8qIGlmIEZyYW1lSXNJbnRyYSB0aGVuIHVuZG8g dGhlIGVmZmVjdCBvZiBsb2FkX3Byb2JzMigpICovCj4+ICsJCWlmIChmcmFtZV9pc19pbnRyYSkK Pj4gKwkJCWNvcHlfdHhfYW5kX3NraXAocHJvYnMsIHR4X3NraXApOwo+PiArCj4+ICsJCWNvdW50 cyA9ICZ2cDlfY3R4LT5jbnRzOwo+PiArCQloYW50cm9fY250cyA9IHZwOV9jdHgtPm1pc2MuY3B1 ICsgdnA5X2N0eC0+Y3R4X2NvdW50ZXJzX29mZnNldDsKPj4gKwkJZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUodHgxNnApOyArK2kpIHsKPj4gKwkJCW1lbWNweSh0eDE2cFtpXSwKPj4gKwkJCSAg ICAgICBoYW50cm9fY250cy0+dHgxNngxNl9jb3VudFtpXSwKPj4gKwkJCSAgICAgICBzaXplb2Yo aGFudHJvX2NudHMtPnR4MTZ4MTZfY291bnRbMF0pKTsKPj4gKwkJCXR4MTZwW2ldWzNdID0gMDsK Pj4gKwkJfQo+PiArCQljb3VudHMtPnR4MTZwID0gJnR4MTZwOwo+PiArCj4+ICsJCXY0bDJfdnA5 X2FkYXB0X2NvZWZfcHJvYnMocHJvYnMsIGNvdW50cywKPj4gKwkJCQkJICAhdnA5X2N0eC0+bGFz dC52YWxpZCB8fAo+PiArCQkJCQkgIHZwOV9jdHgtPmxhc3QuZmxhZ3MgJiBWNEwyX1ZQOV9GUkFN RV9GTEFHX0tFWV9GUkFNRSwKPj4gKwkJCQkJICBmcmFtZV9pc19pbnRyYSk7Cj4+ICsKPj4gKwkJ aWYgKCFmcmFtZV9pc19pbnRyYSkgewo+PiArCQkJLyogbG9hZF9wcm9iczIoKSBhbHJlYWR5IGRv bmUgKi8KPj4gKwkJCXUzMiBtdl9tb2RlWzddWzRdOwo+PiArCj4+ICsJCQlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShtdl9tb2RlKTsgKytpKSB7Cj4+ICsJCQkJbXZfbW9kZVtpXVswXSA9IGhh bnRyb19jbnRzLT5pbnRlcl9tb2RlX2NvdW50c1tpXVsxXVswXTsKPj4gKwkJCQltdl9tb2RlW2ld WzFdID0gaGFudHJvX2NudHMtPmludGVyX21vZGVfY291bnRzW2ldWzJdWzBdOwo+PiArCQkJCW12 X21vZGVbaV1bMl0gPSBoYW50cm9fY250cy0+aW50ZXJfbW9kZV9jb3VudHNbaV1bMF1bMF07Cj4+ ICsJCQkJbXZfbW9kZVtpXVszXSA9IGhhbnRyb19jbnRzLT5pbnRlcl9tb2RlX2NvdW50c1tpXVsy XVsxXTsKPj4gKwkJCX0KPj4gKwkJCWNvdW50cy0+bXZfbW9kZSA9ICZtdl9tb2RlOwo+PiArCQkJ djRsMl92cDlfYWRhcHRfbm9uY29lZl9wcm9icygmdnA5X2N0eC0+cHJvYmFiaWxpdHlfdGFibGVz LCBjb3VudHMsCj4+ICsJCQkJCQkgICAgIHZwOV9jdHgtPmN1ci5yZWZlcmVuY2VfbW9kZSwKPj4g KwkJCQkJCSAgICAgdnA5X2N0eC0+Y3VyLmludGVycG9sYXRpb25fZmlsdGVyLAo+PiArCQkJCQkJ ICAgICB2cDlfY3R4LT5jdXIudHhfbW9kZSwgdnA5X2N0eC0+Y3VyLmZsYWdzKTsKPj4gKwkJfQo+ PiArCX0KPj4gKwo+PiArCXZwOV9jdHgtPmZyYW1lX2NvbnRleHRbZmN0eF9pZHhdID0gdnA5X2N0 eC0+cHJvYmFiaWxpdHlfdGFibGVzOwo+PiArCj4+ICtvdXRfdXBkYXRlX2xhc3Q6Cj4+ICsJdnA5 X2N0eC0+bGFzdCA9IHZwOV9jdHgtPmN1cjsKPj4gK30KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv c3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2h3LmggYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEv aGFudHJvL2hhbnRyb19ody5oCj4+IGluZGV4IDQyYjNmMzk2MWY3NS4uMjk2MWQzOTlmZDYwIDEw MDY0NAo+PiAtLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19ody5oCj4+ ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2h3LmgKPj4gQEAgLTEy LDYgKzEyLDcgQEAKPj4gICAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cj4+ICAgI2luY2x1 ZGUgPGxpbnV4L3Y0bDItY29udHJvbHMuaD4KPj4gICAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJs cy5oPgo+PiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItdnA5Lmg+Cj4+ICAgI2luY2x1ZGUgPG1lZGlh L3ZpZGVvYnVmMi1jb3JlLmg+Cj4+ICAgCj4+ICAgI2RlZmluZSBERUNfODE5MF9BTElHTl9NQVNL CTB4MDdVCj4+IEBAIC0xNjEsNiArMTYyLDUwIEBAIHN0cnVjdCBoYW50cm9fdnA4X2RlY19od19j dHggewo+PiAgIAlzdHJ1Y3QgaGFudHJvX2F1eF9idWYgcHJvYl90Ymw7Cj4+ICAgfTsKPj4gICAK Pj4gK3N0cnVjdCBoYW50cm9fdnA5X2ZyYW1lX2luZm8gewo+PiArCXUzMiB2YWxpZCA6IDE7Cj4+ ICsJdTMyIGZyYW1lX2NvbnRleHRfaWR4IDogMjsKPj4gKwl1MzIgcmVmZXJlbmNlX21vZGUgOiAy Owo+PiArCXUzMiB0eF9tb2RlIDogMzsKPj4gKwl1MzIgaW50ZXJwb2xhdGlvbl9maWx0ZXIgOiAz Owo+PiArCXUzMiBmbGFnczsKPj4gKwl1NjQgdGltZXN0YW1wOwo+PiArfTsKPj4gKwo+PiArI2Rl ZmluZSBNQVhfU0JfQ09MUwk2NAo+PiArI2RlZmluZSBNQVhfU0JfUk9XUwkzNAo+PiArCj4+ICsv KioKPj4gKyAqIHN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHgKPj4gKyAqCj4+ICsgKi8KPj4g K3N0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggewo+PiArCXN0cnVjdCBoYW50cm9fYXV4X2J1 ZiB0aWxlX2VkZ2U7Cj4+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmIHNlZ21lbnRfbWFwOwo+PiAr CXN0cnVjdCBoYW50cm9fYXV4X2J1ZiBtaXNjOwo+PiArCXN0cnVjdCB2NGwyX3ZwOV9mcmFtZV9z eW1ib2xfY291bnRzIGNudHM7Cj4+ICsJc3RydWN0IHY0bDJfdnA5X2ZyYW1lX2NvbnRleHQgcHJv YmFiaWxpdHlfdGFibGVzOwo+PiArCXN0cnVjdCB2NGwyX3ZwOV9mcmFtZV9jb250ZXh0IGZyYW1l X2NvbnRleHRbNF07Cj4+ICsJc3RydWN0IGhhbnRyb192cDlfZnJhbWVfaW5mbyBjdXI7Cj4+ICsJ c3RydWN0IGhhbnRyb192cDlfZnJhbWVfaW5mbyBsYXN0Owo+PiArCj4+ICsJdW5zaWduZWQgaW50 IGJzZF9jdHJsX29mZnNldDsKPj4gKwl1bnNpZ25lZCBpbnQgc2VnbWVudF9tYXBfc2l6ZTsKPj4g Kwl1bnNpZ25lZCBpbnQgY3R4X2NvdW50ZXJzX29mZnNldDsKPj4gKwl1bnNpZ25lZCBpbnQgdGls ZV9pbmZvX29mZnNldDsKPj4gKwo+PiArCXVuc2lnbmVkIHNob3J0IHRpbGVfcl9pbmZvW01BWF9T Ql9ST1dTXTsKPj4gKwl1bnNpZ25lZCBzaG9ydCB0aWxlX2NfaW5mb1tNQVhfU0JfQ09MU107Cj4+ ICsJdW5zaWduZWQgaW50IGxhc3RfdGlsZV9yOwo+PiArCXVuc2lnbmVkIGludCBsYXN0X3RpbGVf YzsKPj4gKwl1bnNpZ25lZCBpbnQgbGFzdF9zYnNfcjsKPj4gKwl1bnNpZ25lZCBpbnQgbGFzdF9z YnNfYzsKPj4gKwo+PiArCXVuc2lnbmVkIGludCBhY3RpdmVfc2VnbWVudDsKPj4gKwl1OCBmZWF0 dXJlX2VuYWJsZWRbOF07Cj4+ICsJczE2IGZlYXR1cmVfZGF0YVs4XVs0XTsKPj4gK307Cj4+ICsK Pj4gICAvKioKPj4gICAgKiBzdHJ1Y3QgaGFudHJvX3Bvc3Rwcm9jX2N0eAo+PiAgICAqCj4+IEBA IC0yNjcsNiArMzEyLDI0IEBAIHZvaWQgaGFudHJvX2hldmNfcmVmX3JlbW92ZV91bnVzZWQoc3Ry dWN0IGhhbnRyb19jdHggKmN0eCk7Cj4+ICAgc2l6ZV90IGhhbnRyb19oZXZjX2Nocm9tYV9vZmZz ZXQoY29uc3Qgc3RydWN0IHY0bDJfY3RybF9oZXZjX3NwcyAqc3BzKTsKPj4gICBzaXplX3QgaGFu dHJvX2hldmNfbW90aW9uX3ZlY3RvcnNfb2Zmc2V0KGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2 Y19zcHMgKnNwcyk7Cj4+ICAgCj4+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGhhbnRy b192cDlfbnVtX3Nicyh1bnNpZ25lZCBzaG9ydCBkaW1lbnNpb24pCj4+ICt7Cj4+ICsJcmV0dXJu IChkaW1lbnNpb24gKyA2MykgLyA2NDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSBzaXpl X3QKPj4gK2hhbnRyb192cDlfbXZfc2l6ZSh1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGlu dCBoZWlnaHQpCj4+ICt7Cj4+ICsJaW50IG51bV9jdGJzOwo+PiArCj4+ICsJLyoKPj4gKwkgKiBU aGVyZSBjYW4gYmUgdXAgdG8gKENUQnMgeCA2NCkgbnVtYmVyIG9mIGJsb2NrcywKPj4gKwkgKiBh bmQgdGhlIG1vdGlvbiB2ZWN0b3IgZm9yIGVhY2ggYmxvY2sgbmVlZHMgMTYgYnl0ZXMuCj4+ICsJ ICovCj4+ICsJbnVtX2N0YnMgPSBoYW50cm9fdnA5X251bV9zYnMod2lkdGgpICogaGFudHJvX3Zw OV9udW1fc2JzKGhlaWdodCk7Cj4+ICsJcmV0dXJuIChudW1fY3RicyAqIDY0KSAqIDE2Owo+PiAr fQo+PiArCj4+ICAgc3RhdGljIGlubGluZSBzaXplX3QKPj4gICBoYW50cm9faDI2NF9tdl9zaXpl KHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCkKPj4gICB7Cj4+IEBAIC0z MDgsNiArMzcxLDEwIEBAIHZvaWQgaGFudHJvX3ZwOF9kZWNfZXhpdChzdHJ1Y3QgaGFudHJvX2N0 eCAqY3R4KTsKPj4gICB2b2lkIGhhbnRyb192cDhfcHJvYl91cGRhdGUoc3RydWN0IGhhbnRyb19j dHggKmN0eCwKPj4gICAJCQkgICAgY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDhfZnJhbWUgKmhk cik7Cj4+ICAgCj4+ICtpbnQgaGFudHJvX2cyX3ZwOV9kZWNfcnVuKHN0cnVjdCBoYW50cm9fY3R4 ICpjdHgpOwo+PiArdm9pZCBoYW50cm9fZzJfdnA5X2RlY19kb25lKHN0cnVjdCBoYW50cm9fY3R4 ICpjdHgpOwo+PiAraW50IGhhbnRyb192cDlfZGVjX2luaXQoc3RydWN0IGhhbnRyb19jdHggKmN0 eCk7Cj4+ICt2b2lkIGhhbnRyb192cDlfZGVjX2V4aXQoc3RydWN0IGhhbnRyb19jdHggKmN0eCk7 Cj4+ICAgdm9pZCBoYW50cm9fZzJfY2hlY2tfaWRsZShzdHJ1Y3QgaGFudHJvX2RldiAqdnB1KTsK Pj4gICAKPj4gICAjZW5kaWYgLyogSEFOVFJPX0hXX0hfICovCj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb192NGwyLmMgYi9kcml2ZXJzL3N0YWdpbmcv bWVkaWEvaGFudHJvL2hhbnRyb192NGwyLmMKPj4gaW5kZXggZDFmMDYwYzU1ZmVkLi5lNGIwNjQ1 YmE2ZmMgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJv X3Y0bDIuYwo+PiArKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb192NGwy LmMKPj4gQEAgLTI5OSw2ICsyOTksMTEgQEAgc3RhdGljIGludCBoYW50cm9fdHJ5X2ZtdChjb25z dCBzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+PiAgIAkJCXBpeF9tcC0+cGxhbmVfZm10WzBdLnNp emVpbWFnZSArPQo+PiAgIAkJCQloYW50cm9faDI2NF9tdl9zaXplKHBpeF9tcC0+d2lkdGgsCj4+ ICAgCQkJCQkJICAgIHBpeF9tcC0+aGVpZ2h0KTsKPj4gKwkJZWxzZSBpZiAoY3R4LT52cHVfc3Jj X2ZtdC0+Zm91cmNjID09IFY0TDJfUElYX0ZNVF9WUDlfRlJBTUUgJiYKPj4gKwkJCSAhaGFudHJv X25lZWRzX3Bvc3Rwcm9jKGN0eCwgZm10KSkKPj4gKwkJCXBpeF9tcC0+cGxhbmVfZm10WzBdLnNp emVpbWFnZSArPQo+PiArCQkJCWhhbnRyb192cDlfbXZfc2l6ZShwaXhfbXAtPndpZHRoLAo+PiAr CQkJCQkJICAgcGl4X21wLT5oZWlnaHQpOwo+PiAgIAl9IGVsc2UgaWYgKCFwaXhfbXAtPnBsYW5l X2ZtdFswXS5zaXplaW1hZ2UpIHsKPj4gICAJCS8qCj4+ICAgCQkgKiBGb3IgY29kZWQgZm9ybWF0 cyB0aGUgYXBwbGljYXRpb24gY2FuIHNwZWNpZnkKPj4gQEAgLTQwNyw2ICs0MTIsNyBAQCBoYW50 cm9fdXBkYXRlX3JlcXVpcmVzX3JlcXVlc3Qoc3RydWN0IGhhbnRyb19jdHggKmN0eCwgdTMyIGZv dXJjYykKPj4gICAJY2FzZSBWNEwyX1BJWF9GTVRfVlA4X0ZSQU1FOgo+PiAgIAljYXNlIFY0TDJf UElYX0ZNVF9IMjY0X1NMSUNFOgo+PiAgIAljYXNlIFY0TDJfUElYX0ZNVF9IRVZDX1NMSUNFOgo+ PiArCWNhc2UgVjRMMl9QSVhfRk1UX1ZQOV9GUkFNRToKPj4gICAJCWN0eC0+ZmgubTJtX2N0eC0+ b3V0X3FfY3R4LnEucmVxdWlyZXNfcmVxdWVzdHMgPSB0cnVlOwo+PiAgIAkJYnJlYWs7Cj4+ICAg CWRlZmF1bHQ6Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hh bnRyb192cDkuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX3ZwOS5jCj4+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uNTY2Y2QzNzZjMDk3 Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9o YW50cm9fdnA5LmMKPj4gQEAgLTAsMCArMSwyNDAgQEAKPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wCj4+ICsvKgo+PiArICogSGFudHJvIFZQOSBjb2RlYyBkcml2ZXIKPj4g KyAqCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQ29sbGFib3JhIEx0ZC4KPj4gKyAqLwo+PiAr Cj4+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPj4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLW1l bTJtZW0uaD4KPj4gKwo+PiArI2luY2x1ZGUgImhhbnRyby5oIgo+PiArI2luY2x1ZGUgImhhbnRy b19ody5oIgo+PiArI2luY2x1ZGUgImhhbnRyb192cDkuaCIKPj4gKwo+PiArI2RlZmluZSBQT1cy KHgpICgxIDw8ICh4KSkKPj4gKwo+PiArI2RlZmluZSBNQVhfTE9HMl9USUxFX0NPTFVNTlMgNgo+ PiArI2RlZmluZSBNQVhfTlVNX1RJTEVfQ09MUyBQT1cyKE1BWF9MT0cyX1RJTEVfQ09MVU1OUykK Pj4gKyNkZWZpbmUgTUFYX1RJTEVfQ09MUyAyMAo+PiArI2RlZmluZSBNQVhfVElMRV9ST1dTIDIy Cj4+ICsKPj4gK3N0YXRpYyBzaXplX3QgaGFudHJvX3ZwOV90aWxlX2ZpbHRlcl9zaXplKHVuc2ln bmVkIGludCBoZWlnaHQpCj4+ICt7Cj4+ICsJdTMyIGgsIGhlaWdodDMyLCBzaXplOwo+PiArCj4+ ICsJaCA9IHJvdW5kdXAoaGVpZ2h0LCA4KTsKPj4gKwo+PiArCWhlaWdodDMyID0gcm91bmR1cCho LCA2NCk7Cj4+ICsJc2l6ZSA9IDI0ICogaGVpZ2h0MzIgKiAoTUFYX05VTV9USUxFX0NPTFMgLSAx KTsgLyogbHVtYTogOCwgY2hyb21hOiA4ICsgOCAqLwo+PiArCj4+ICsJcmV0dXJuIHNpemU7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBzaXplX3QgaGFudHJvX3ZwOV9ic2RfY29udHJvbF9zaXplKHVu c2lnbmVkIGludCBoZWlnaHQpCj4+ICt7Cj4+ICsJdTMyIGgsIGhlaWdodDMyOwo+PiArCj4+ICsJ aCA9IHJvdW5kdXAoaGVpZ2h0LCA4KTsKPj4gKwloZWlnaHQzMiA9IHJvdW5kdXAoaCwgNjQpOwo+ PiArCj4+ICsJcmV0dXJuIDE2ICogKGhlaWdodDMyIC8gNCkgKiAoTUFYX05VTV9USUxFX0NPTFMg LSAxKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHNpemVfdCBoYW50cm9fdnA5X3NlZ21lbnRfbWFw X3NpemUodW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0KQo+PiArewo+PiAr CXUzMiB3LCBoOwo+PiArCWludCBudW1fY3RiczsKPj4gKwo+PiArCXcgPSByb3VuZHVwKHdpZHRo LCA4KTsKPj4gKwloID0gcm91bmR1cChoZWlnaHQsIDgpOwo+PiArCW51bV9jdGJzID0gKCh3ICsg NjMpIC8gNjQpICogKChoICsgNjMpIC8gNjQpOwo+PiArCj4+ICsJcmV0dXJuIG51bV9jdGJzICog MzI7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGhhbnRyb192cDlfcHJvYl90 YWJfc2l6ZSh2b2lkKQo+PiArewo+PiArCXJldHVybiByb3VuZHVwKHNpemVvZihzdHJ1Y3QgaGFu dHJvX2cyX2FsbF9wcm9icyksIDE2KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSBzaXpl X3QgaGFudHJvX3ZwOV9jb3VudF90YWJfc2l6ZSh2b2lkKQo+PiArewo+PiArCXJldHVybiByb3Vu ZHVwKHNpemVvZihzdHJ1Y3Qgc3ltYm9sX2NvdW50cyksIDE2KTsKPj4gK30KPj4gKwo+PiArc3Rh dGljIGlubGluZSBzaXplX3QgaGFudHJvX3ZwOV90aWxlX2luZm9fc2l6ZSh2b2lkKQo+PiArewo+ PiArCXJldHVybiByb3VuZHVwKChNQVhfVElMRV9DT0xTICogTUFYX1RJTEVfUk9XUyAqIDQgKiBz aXplb2YodTE2KSArIDE1ICsgMTYpICYgfjB4ZiwgMTYpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg dm9pZCAqZ2V0X2NvZWZmc19hcnIoc3RydWN0IHN5bWJvbF9jb3VudHMgKmNudHMsIGludCBpLCBp bnQgaiwgaW50IGssIGludCBsLCBpbnQgbSkKPj4gK3sKPj4gKwlpZiAoaSA9PSAwKQo+PiArCQly ZXR1cm4gJmNudHMtPmNvdW50X2NvZWZmc1tqXVtrXVtsXVttXTsKPj4gKwo+PiArCWlmIChpID09 IDEpCj4+ICsJCXJldHVybiAmY250cy0+Y291bnRfY29lZmZzOHg4W2pdW2tdW2xdW21dOwo+PiAr Cj4+ICsJaWYgKGkgPT0gMikKPj4gKwkJcmV0dXJuICZjbnRzLT5jb3VudF9jb2VmZnMxNngxNltq XVtrXVtsXVttXTsKPj4gKwo+PiArCWlmIChpID09IDMpCj4+ICsJCXJldHVybiAmY250cy0+Y291 bnRfY29lZmZzMzJ4MzJbal1ba11bbF1bbV07Cj4+ICsKPj4gKwlyZXR1cm4gTlVMTDsKPj4gK30K Pj4gKwo+PiArc3RhdGljIHZvaWQgKmdldF9lb2JzMShzdHJ1Y3Qgc3ltYm9sX2NvdW50cyAqY250 cywgaW50IGksIGludCBqLCBpbnQgaywgaW50IGwsIGludCBtKQo+PiArewo+PiArCWlmIChpID09 IDApCj4+ICsJCXJldHVybiAmY250cy0+Y291bnRfY29lZmZzW2pdW2tdW2xdW21dWzNdOwo+PiAr Cj4+ICsJaWYgKGkgPT0gMSkKPj4gKwkJcmV0dXJuICZjbnRzLT5jb3VudF9jb2VmZnM4eDhbal1b a11bbF1bbV1bM107Cj4+ICsKPj4gKwlpZiAoaSA9PSAyKQo+PiArCQlyZXR1cm4gJmNudHMtPmNv dW50X2NvZWZmczE2eDE2W2pdW2tdW2xdW21dWzNdOwo+PiArCj4+ICsJaWYgKGkgPT0gMykKPj4g KwkJcmV0dXJuICZjbnRzLT5jb3VudF9jb2VmZnMzMngzMltqXVtrXVtsXVttXVszXTsKPj4gKwo+ PiArCXJldHVybiBOVUxMOwo+PiArfQo+PiArCj4+ICsjZGVmaW5lIElOTkVSX0xPT1AgXAo+PiAr CWRvIHsJCQkJCQkJCQkJXAo+PiArCQlmb3IgKG0gPSAwOyBtIDwgQVJSQVlfU0laRSh2cDlfY3R4 LT5jbnRzLmNvZWZmW2ldWzBdWzBdWzBdKTsgKyttKSB7CVwKPj4gKwkJCXZwOV9jdHgtPmNudHMu Y29lZmZbaV1bal1ba11bbF1bbV0gPQkJCQlcCj4+ICsJCQkJZ2V0X2NvZWZmc19hcnIoY250cywg aSwgaiwgaywgbCwgbSk7CQkJXAo+PiArCQkJdnA5X2N0eC0+Y250cy5lb2JbaV1bal1ba11bbF1b bV1bMF0gPQkJCQlcCj4+ICsJCQkJJmNudHMtPmNvdW50X2VvYnNbaV1bal1ba11bbF1bbV07CQkJ XAo+PiArCQkJdnA5X2N0eC0+Y250cy5lb2JbaV1bal1ba11bbF1bbV1bMV0gPQkJCQlcCj4+ICsJ CQkJZ2V0X2VvYnMxKGNudHMsIGksIGosIGssIGwsIG0pOwkJCQlcCj4+ICsJCX0JCQkJCQkJCQlc Cj4+ICsJfSB3aGlsZSAoMCkKPj4gKwo+PiArc3RhdGljIHZvaWQgaW5pdF92NGwyX3ZwOV9jb3Vu dF90Ymwoc3RydWN0IGhhbnRyb19jdHggKmN0eCkKPj4gK3sKPj4gKwlzdHJ1Y3QgaGFudHJvX3Zw OV9kZWNfaHdfY3R4ICp2cDlfY3R4ID0gJmN0eC0+dnA5X2RlYzsKPj4gKwlzdHJ1Y3Qgc3ltYm9s X2NvdW50cyAqY250cyA9IHZwOV9jdHgtPm1pc2MuY3B1ICsgdnA5X2N0eC0+Y3R4X2NvdW50ZXJz X29mZnNldDsKPj4gKwlpbnQgaSwgaiwgaywgbCwgbTsKPj4gKwo+PiArCXZwOV9jdHgtPmNudHMu cGFydGl0aW9uID0gJmNudHMtPnBhcnRpdGlvbl9jb3VudHM7Cj4+ICsJdnA5X2N0eC0+Y250cy5z a2lwID0gJmNudHMtPm1ic2tpcF9jb3VudDsKPj4gKwl2cDlfY3R4LT5jbnRzLmludHJhX2ludGVy ID0gJmNudHMtPmludHJhX2ludGVyX2NvdW50Owo+PiArCXZwOV9jdHgtPmNudHMudHgzMnAgPSAm Y250cy0+dHgzMngzMl9jb3VudDsKPj4gKwkvKgo+PiArCSAqIGcyIGhhcmR3YXJlIHVzZXMgdHgx NngxNl9jb3VudFsyXVszXSwgd2hpbGUgdGhlIGFwaQo+PiArCSAqIGV4cGVjdHMgdHgxNnBbMl1b NF0sIHNvIHRoaXMgbXVzdCBiZSBleHBsaWNpdGx5IGNvcGllZAo+PiArCSAqIGludG8gdnA5X2N0 eC0+Y250cy50eDE2cCB3aGVuIHBhc3NpbmcgdGhlIGRhdGEgdG8gdGhlCj4+ICsJICogdnA5IGxp YnJhcnkgZnVuY3Rpb24KPj4gKwkgKi8KPj4gKwl2cDlfY3R4LT5jbnRzLnR4OHAgPSAmY250cy0+ dHg4eDhfY291bnQ7Cj4+ICsKPj4gKwl2cDlfY3R4LT5jbnRzLnlfbW9kZSA9ICZjbnRzLT5zYl95 bW9kZV9jb3VudHM7Cj4+ICsJdnA5X2N0eC0+Y250cy51dl9tb2RlID0gJmNudHMtPnV2X21vZGVf Y291bnRzOwo+PiArCXZwOV9jdHgtPmNudHMuY29tcCA9ICZjbnRzLT5jb21wX2ludGVyX2NvdW50 Owo+PiArCXZwOV9jdHgtPmNudHMuY29tcF9yZWYgPSAmY250cy0+Y29tcF9yZWZfY291bnQ7Cj4+ ICsJdnA5X2N0eC0+Y250cy5zaW5nbGVfcmVmID0gJmNudHMtPnNpbmdsZV9yZWZfY291bnQ7Cj4+ ICsJdnA5X2N0eC0+Y250cy5maWx0ZXIgPSAmY250cy0+c3dpdGNoYWJsZV9pbnRlcnBfY291bnRz Owo+PiArCXZwOV9jdHgtPmNudHMubXZfam9pbnQgPSAmY250cy0+bXZfY291bnRzLmpvaW50czsK Pj4gKwl2cDlfY3R4LT5jbnRzLnNpZ24gPSAmY250cy0+bXZfY291bnRzLnNpZ247Cj4+ICsJdnA5 X2N0eC0+Y250cy5jbGFzc2VzID0gJmNudHMtPm12X2NvdW50cy5jbGFzc2VzOwo+PiArCXZwOV9j dHgtPmNudHMuY2xhc3MwID0gJmNudHMtPm12X2NvdW50cy5jbGFzczA7Cj4+ICsJdnA5X2N0eC0+ Y250cy5iaXRzID0gJmNudHMtPm12X2NvdW50cy5iaXRzOwo+PiArCXZwOV9jdHgtPmNudHMuY2xh c3MwX2ZwID0gJmNudHMtPm12X2NvdW50cy5jbGFzczBfZnA7Cj4+ICsJdnA5X2N0eC0+Y250cy5m cCA9ICZjbnRzLT5tdl9jb3VudHMuZnA7Cj4+ICsJdnA5X2N0eC0+Y250cy5jbGFzczBfaHAgPSAm Y250cy0+bXZfY291bnRzLmNsYXNzMF9ocDsKPj4gKwl2cDlfY3R4LT5jbnRzLmhwID0gJmNudHMt Pm12X2NvdW50cy5ocDsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZwOV9j dHgtPmNudHMuY29lZmYpOyArK2kpCj4+ICsJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHZw OV9jdHgtPmNudHMuY29lZmZbaV0pOyArK2opCj4+ICsJCQlmb3IgKGsgPSAwOyBrIDwgQVJSQVlf U0laRSh2cDlfY3R4LT5jbnRzLmNvZWZmW2ldWzBdKTsgKytrKQo+PiArCQkJCWZvciAobCA9IDA7 IGwgPCBBUlJBWV9TSVpFKHZwOV9jdHgtPmNudHMuY29lZmZbaV1bMF1bMF0pOyArK2wpCj4+ICsJ CQkJCUlOTkVSX0xPT1A7Cj4+ICt9Cj4+ICsKPj4gK2ludCBoYW50cm9fdnA5X2RlY19pbml0KHN0 cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4+ICt7Cj4+ICsJc3RydWN0IGhhbnRyb19kZXYgKnZwdSA9 IGN0eC0+ZGV2Owo+PiArCWNvbnN0IHN0cnVjdCBoYW50cm9fdmFyaWFudCAqdmFyaWFudCA9IHZw dS0+dmFyaWFudDsKPj4gKwlzdHJ1Y3QgaGFudHJvX3ZwOV9kZWNfaHdfY3R4ICp2cDlfZGVjID0g JmN0eC0+dnA5X2RlYzsKPj4gKwlzdHJ1Y3QgaGFudHJvX2F1eF9idWYgKnRpbGVfZWRnZSA9ICZ2 cDlfZGVjLT50aWxlX2VkZ2U7Cj4+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmICpzZWdtZW50X21h cCA9ICZ2cDlfZGVjLT5zZWdtZW50X21hcDsKPj4gKwlzdHJ1Y3QgaGFudHJvX2F1eF9idWYgKm1p c2MgPSAmdnA5X2RlYy0+bWlzYzsKPj4gKwl1MzIgaSwgbWF4X3dpZHRoLCBtYXhfaGVpZ2h0LCBz aXplOwo+PiArCj4+ICsJaWYgKHZhcmlhbnQtPm51bV9kZWNfZm10cyA8IDEpCj4+ICsJCXJldHVy biAtRUlOVkFMOwo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IHZhcmlhbnQtPm51bV9kZWNfZm10 czsgKytpKQo+PiArCQlpZiAodmFyaWFudC0+ZGVjX2ZtdHNbaV0uZm91cmNjID09IFY0TDJfUElY X0ZNVF9WUDlfRlJBTUUpCj4+ICsJCQlicmVhazsKPj4gKwo+PiArCWlmIChpID09IHZhcmlhbnQt Pm51bV9kZWNfZm10cykKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKwltYXhfd2lkdGgg PSB2cHUtPnZhcmlhbnQtPmRlY19mbXRzW2ldLmZybXNpemUubWF4X3dpZHRoOwo+PiArCW1heF9o ZWlnaHQgPSB2cHUtPnZhcmlhbnQtPmRlY19mbXRzW2ldLmZybXNpemUubWF4X2hlaWdodDsKPj4g Kwo+PiArCXNpemUgPSBoYW50cm9fdnA5X3RpbGVfZmlsdGVyX3NpemUobWF4X2hlaWdodCk7Cj4+ ICsJdnA5X2RlYy0+YnNkX2N0cmxfb2Zmc2V0ID0gc2l6ZTsKPj4gKwlzaXplICs9IGhhbnRyb192 cDlfYnNkX2NvbnRyb2xfc2l6ZShtYXhfaGVpZ2h0KTsKPj4gKwo+PiArCXRpbGVfZWRnZS0+Y3B1 ID0gZG1hX2FsbG9jX2NvaGVyZW50KHZwdS0+ZGV2LCBzaXplLCAmdGlsZV9lZGdlLT5kbWEsIEdG UF9LRVJORUwpOwo+PiArCWlmICghdGlsZV9lZGdlLT5jcHUpCj4+ICsJCXJldHVybiAtRU5PTUVN Owo+PiArCj4+ICsJdGlsZV9lZGdlLT5zaXplID0gc2l6ZTsKPj4gKwltZW1zZXQodGlsZV9lZGdl LT5jcHUsIDAsIHNpemUpOwo+PiArCj4+ICsJc2l6ZSA9IGhhbnRyb192cDlfc2VnbWVudF9tYXBf c2l6ZShtYXhfd2lkdGgsIG1heF9oZWlnaHQpOwo+PiArCXZwOV9kZWMtPnNlZ21lbnRfbWFwX3Np emUgPSBzaXplOwo+PiArCXNpemUgKj0gMjsgLyogd2UgbmVlZCB0d28gYXJlYXMgb2YgdGhpcyBz aXplLCB1c2VkIGFsdGVybmF0ZWx5ICovCj4+ICsKPj4gKwlzZWdtZW50X21hcC0+Y3B1ID0gZG1h X2FsbG9jX2NvaGVyZW50KHZwdS0+ZGV2LCBzaXplLCAmc2VnbWVudF9tYXAtPmRtYSwgR0ZQX0tF Uk5FTCk7Cj4+ICsJaWYgKCFzZWdtZW50X21hcC0+Y3B1KQo+PiArCQlnb3RvIGVycl9zZWdtZW50 X21hcDsKPj4gKwo+PiArCXNlZ21lbnRfbWFwLT5zaXplID0gc2l6ZTsKPj4gKwltZW1zZXQoc2Vn bWVudF9tYXAtPmNwdSwgMCwgc2l6ZSk7Cj4+ICsKPj4gKwlzaXplID0gaGFudHJvX3ZwOV9wcm9i X3RhYl9zaXplKCk7Cj4+ICsJdnA5X2RlYy0+Y3R4X2NvdW50ZXJzX29mZnNldCA9IHNpemU7Cj4+ ICsJc2l6ZSArPSBoYW50cm9fdnA5X2NvdW50X3RhYl9zaXplKCk7Cj4+ICsJdnA5X2RlYy0+dGls ZV9pbmZvX29mZnNldCA9IHNpemU7Cj4+ICsJc2l6ZSArPSBoYW50cm9fdnA5X3RpbGVfaW5mb19z aXplKCk7Cj4+ICsKPj4gKwltaXNjLT5jcHUgPSBkbWFfYWxsb2NfY29oZXJlbnQodnB1LT5kZXYs IHNpemUsICZtaXNjLT5kbWEsIEdGUF9LRVJORUwpOwo+PiArCWlmICghbWlzYy0+Y3B1KQo+PiAr CQlnb3RvIGVycl9taXNjOwo+PiArCj4+ICsJbWlzYy0+c2l6ZSA9IHNpemU7Cj4+ICsJbWVtc2V0 KG1pc2MtPmNwdSwgMCwgc2l6ZSk7Cj4+ICsKPj4gKwlpbml0X3Y0bDJfdnA5X2NvdW50X3RibChj dHgpOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICsKPj4gK2Vycl9taXNjOgo+PiArCWRtYV9mcmVl X2NvaGVyZW50KHZwdS0+ZGV2LCBzZWdtZW50X21hcC0+c2l6ZSwgc2VnbWVudF9tYXAtPmNwdSwg c2VnbWVudF9tYXAtPmRtYSk7Cj4+ICsKPj4gK2Vycl9zZWdtZW50X21hcDoKPj4gKwlkbWFfZnJl ZV9jb2hlcmVudCh2cHUtPmRldiwgdGlsZV9lZGdlLT5zaXplLCB0aWxlX2VkZ2UtPmNwdSwgdGls ZV9lZGdlLT5kbWEpOwo+PiArCj4+ICsJcmV0dXJuIC1FTk9NRU07Cj4+ICt9Cj4+ICsKPj4gK3Zv aWQgaGFudHJvX3ZwOV9kZWNfZXhpdChzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+PiArewo+PiAr CXN0cnVjdCBoYW50cm9fZGV2ICp2cHUgPSBjdHgtPmRldjsKPj4gKwlzdHJ1Y3QgaGFudHJvX3Zw OV9kZWNfaHdfY3R4ICp2cDlfZGVjID0gJmN0eC0+dnA5X2RlYzsKPj4gKwlzdHJ1Y3QgaGFudHJv X2F1eF9idWYgKnRpbGVfZWRnZSA9ICZ2cDlfZGVjLT50aWxlX2VkZ2U7Cj4+ICsJc3RydWN0IGhh bnRyb19hdXhfYnVmICpzZWdtZW50X21hcCA9ICZ2cDlfZGVjLT5zZWdtZW50X21hcDsKPj4gKwlz dHJ1Y3QgaGFudHJvX2F1eF9idWYgKm1pc2MgPSAmdnA5X2RlYy0+bWlzYzsKPj4gKwo+PiArCWRt YV9mcmVlX2NvaGVyZW50KHZwdS0+ZGV2LCBtaXNjLT5zaXplLCBtaXNjLT5jcHUsIG1pc2MtPmRt YSk7Cj4+ICsJZG1hX2ZyZWVfY29oZXJlbnQodnB1LT5kZXYsIHNlZ21lbnRfbWFwLT5zaXplLCBz ZWdtZW50X21hcC0+Y3B1LCBzZWdtZW50X21hcC0+ZG1hKTsKPj4gKwlkbWFfZnJlZV9jb2hlcmVu dCh2cHUtPmRldiwgdGlsZV9lZGdlLT5zaXplLCB0aWxlX2VkZ2UtPmNwdSwgdGlsZV9lZGdlLT5k bWEpOwo+PiArfQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9o YW50cm9fdnA5LmggYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb192cDkuaAo+ PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmM3ZjRiZDNmZjhk ZAo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8v aGFudHJvX3ZwOS5oCj4+IEBAIC0wLDAgKzEsMTAzIEBACj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMCAqLwo+PiArLyoKPj4gKyAqIEhhbnRybyBWUDkgY29kZWMgZHJpdmVy Cj4+ICsgKgo+PiArICogQ29weXJpZ2h0IChDKSAyMDIxIENvbGxhYm9yYSBMdGQuCj4+ICsgKi8K Pj4gKwo+PiArc3RydWN0IGhhbnRyb19nMl9tdl9wcm9icyB7Cj4+ICsJdTggam9pbnRbM107Cj4+ ICsJdTggc2lnblsyXTsKPj4gKwl1OCBjbGFzczBfYml0WzJdWzFdOwo+PiArCXU4IGZyWzJdWzNd Owo+PiArCXU4IGNsYXNzMF9ocFsyXTsKPj4gKwl1OCBocFsyXTsKPj4gKwl1OCBjbGFzc2VzWzJd WzEwXTsKPj4gKwl1OCBjbGFzczBfZnJbMl1bMl1bM107Cj4+ICsJdTggYml0c1syXVsxMF07Cj4+ ICt9Owo+PiArCj4+ICtzdHJ1Y3QgaGFudHJvX2cyX3Byb2JzIHsKPj4gKwl1OCBpbnRlcl9tb2Rl WzddWzRdOwo+PiArCXU4IGlzX2ludGVyWzRdOwo+PiArCXU4IHV2X21vZGVbMTBdWzhdOwo+PiAr CXU4IHR4OFsyXVsxXTsKPj4gKwl1OCB0eDE2WzJdWzJdOwo+PiArCXU4IHR4MzJbMl1bM107Cj4+ ICsJdTggeV9tb2RlX3RhaWxbNF1bMV07Cj4+ICsJdTggeV9tb2RlWzRdWzhdOwo+PiArCXU4IHBh cnRpdGlvblsyXVsxNl1bNF07IC8qIFtrZXlmcmFtZV1bXVtdLCBbaW50ZXJdW11bXSAqLwo+PiAr CXU4IHV2X21vZGVfdGFpbFsxMF1bMV07Cj4+ICsJdTggaW50ZXJwX2ZpbHRlcls0XVsyXTsKPj4g Kwl1OCBjb21wX21vZGVbNV07Cj4+ICsJdTggc2tpcFszXTsKPj4gKwo+PiArCXU4IHBhZDFbMV07 Cj4+ICsKPj4gKwlzdHJ1Y3QgaGFudHJvX2cyX212X3Byb2JzIG12Owo+PiArCj4+ICsJdTggc2lu Z2xlX3JlZls1XVsyXTsKPj4gKwl1OCBjb21wX3JlZls1XTsKPj4gKwo+PiArCXU4IHBhZDJbMTdd Owo+PiArCj4+ICsJdTggY29lZls0XVsyXVsyXVs2XVs2XVs0XTsKPj4gK307Cj4+ICsKPj4gK3N0 cnVjdCBoYW50cm9fZzJfYWxsX3Byb2JzIHsKPj4gKwl1OCBrZl95X21vZGVfcHJvYlsxMF1bMTBd WzhdOwo+PiArCj4+ICsJdTgga2ZfeV9tb2RlX3Byb2JfdGFpbFsxMF1bMTBdWzFdOwo+PiArCXU4 IHJlZl9wcmVkX3Byb2JzWzNdOwo+PiArCXU4IG1iX3NlZ21lbnRfdHJlZV9wcm9ic1s3XTsKPj4g Kwl1OCBzZWdtZW50X3ByZWRfcHJvYnNbM107Cj4+ICsJdTggcmVmX3Njb3Jlc1s0XTsKPj4gKwl1 OCBwcm9iX2NvbXBwcmVkWzJdOwo+PiArCj4+ICsJdTggcGFkMVs5XTsKPj4gKwo+PiArCXU4IGtm X3V2X21vZGVfcHJvYlsxMF1bOF07Cj4+ICsJdTgga2ZfdXZfbW9kZV9wcm9iX3RhaWxbMTBdWzFd Owo+PiArCj4+ICsJdTggcGFkMls2XTsKPj4gKwo+PiArCXN0cnVjdCBoYW50cm9fZzJfcHJvYnMg cHJvYnM7Cj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgbXZfY291bnRzIHsKPj4gKwl1MzIgam9pbnRz WzRdOwo+PiArCXUzMiBzaWduWzJdWzJdOwo+PiArCXUzMiBjbGFzc2VzWzJdWzExXTsKPj4gKwl1 MzIgY2xhc3MwWzJdWzJdOwo+PiArCXUzMiBiaXRzWzJdWzEwXVsyXTsKPj4gKwl1MzIgY2xhc3Mw X2ZwWzJdWzJdWzRdOwo+PiArCXUzMiBmcFsyXVs0XTsKPj4gKwl1MzIgY2xhc3MwX2hwWzJdWzJd Owo+PiArCXUzMiBocFsyXVsyXTsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBzeW1ib2xfY291bnRz IHsKPj4gKwl1MzIgaW50ZXJfbW9kZV9jb3VudHNbN11bM11bMl07Cj4+ICsJdTMyIHNiX3ltb2Rl X2NvdW50c1s0XVsxMF07Cj4+ICsJdTMyIHV2X21vZGVfY291bnRzWzEwXVsxMF07Cj4+ICsJdTMy IHBhcnRpdGlvbl9jb3VudHNbMTZdWzRdOwo+PiArCXUzMiBzd2l0Y2hhYmxlX2ludGVycF9jb3Vu dHNbNF1bM107Cj4+ICsJdTMyIGludHJhX2ludGVyX2NvdW50WzRdWzJdOwo+PiArCXUzMiBjb21w X2ludGVyX2NvdW50WzVdWzJdOwo+PiArCXUzMiBzaW5nbGVfcmVmX2NvdW50WzVdWzJdWzJdOwo+ PiArCXUzMiBjb21wX3JlZl9jb3VudFs1XVsyXTsKPj4gKwl1MzIgdHgzMngzMl9jb3VudFsyXVs0 XTsKPj4gKwl1MzIgdHgxNngxNl9jb3VudFsyXVszXTsKPj4gKwl1MzIgdHg4eDhfY291bnRbMl1b Ml07Cj4+ICsJdTMyIG1ic2tpcF9jb3VudFszXVsyXTsKPj4gKwo+PiArCXN0cnVjdCBtdl9jb3Vu dHMgbXZfY291bnRzOwo+PiArCj4+ICsJdTMyIGNvdW50X2NvZWZmc1syXVsyXVs2XVs2XVs0XTsK Pj4gKwl1MzIgY291bnRfY29lZmZzOHg4WzJdWzJdWzZdWzZdWzRdOwo+PiArCXUzMiBjb3VudF9j b2VmZnMxNngxNlsyXVsyXVs2XVs2XVs0XTsKPj4gKwl1MzIgY291bnRfY29lZmZzMzJ4MzJbMl1b Ml1bNl1bNl1bNF07Cj4+ICsKPj4gKwl1MzIgY291bnRfZW9ic1s0XVsyXVsyXVs2XVs2XTsKPj4g K307Cj4+ICsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaW14 OG1fdnB1X2h3LmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2lteDhtX3ZwdV9ody5j Cj4+IGluZGV4IGE0MGIxNjFlNTk1Ni4uNDU1YTEwN2ZmYjAyIDEwMDY0NAo+PiAtLS0gYS9kcml2 ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2lteDhtX3ZwdV9ody5jCj4+ICsrKyBiL2RyaXZlcnMv c3RhZ2luZy9tZWRpYS9oYW50cm8vaW14OG1fdnB1X2h3LmMKPj4gQEAgLTE1MCw2ICsxNTAsMTkg QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBoYW50cm9fZm10IGlteDhtX3ZwdV9nMl9kZWNfZm10c1td ID0gewo+PiAgIAkJCS5zdGVwX2hlaWdodCA9IE1CX0RJTSwKPj4gICAJCX0sCj4+ICAgCX0sCj4+ ICsJewo+PiArCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1ZQOV9GUkFNRSwKPj4gKwkJLmNvZGVj X21vZGUgPSBIQU5UUk9fTU9ERV9WUDlfREVDLAo+PiArCQkubWF4X2RlcHRoID0gMiwKPj4gKwkJ LmZybXNpemUgPSB7Cj4+ICsJCQkubWluX3dpZHRoID0gNDgsCj4+ICsJCQkubWF4X3dpZHRoID0g Mzg0MCwKPj4gKwkJCS5zdGVwX3dpZHRoID0gTUJfRElNLAo+PiArCQkJLm1pbl9oZWlnaHQgPSA0 OCwKPj4gKwkJCS5tYXhfaGVpZ2h0ID0gMjE2MCwKPj4gKwkJCS5zdGVwX2hlaWdodCA9IE1CX0RJ TSwKPj4gKwkJfSwKPj4gKwl9LAo+PiAgIH07Cj4+ICAgCj4+ICAgc3RhdGljIGlycXJldHVybl90 IGlteDhtX3ZwdV9nMV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQo+PiBAQCAtMjQxLDYgKzI1 NCwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGhhbnRyb19jb2RlY19vcHMgaW14OG1xX3ZwdV9n Ml9jb2RlY19vcHNbXSA9IHsKPj4gICAJCS5pbml0ID0gaGFudHJvX2hldmNfZGVjX2luaXQsCj4+ ICAgCQkuZXhpdCA9IGhhbnRyb19oZXZjX2RlY19leGl0LAo+PiAgIAl9LAo+PiArCVtIQU5UUk9f TU9ERV9WUDlfREVDXSA9IHsKPj4gKwkJLnJ1biA9IGhhbnRyb19nMl92cDlfZGVjX3J1biwKPj4g KwkJLmRvbmUgPSBoYW50cm9fZzJfdnA5X2RlY19kb25lLAo+PiArCQkucmVzZXQgPSBpbXg4bV92 cHVfZzJfcmVzZXQsCj4+ICsJCS5pbml0ID0gaGFudHJvX3ZwOV9kZWNfaW5pdCwKPj4gKwkJLmV4 aXQgPSBoYW50cm9fdnA5X2RlY19leGl0LAo+PiArCX0sCj4+ICAgfTsKPj4gICAKPj4gICAvKgo+ PiBAQCAtMjgxLDcgKzMwMSw3IEBAIGNvbnN0IHN0cnVjdCBoYW50cm9fdmFyaWFudCBpbXg4bXFf dnB1X2cyX3ZhcmlhbnQgPSB7Cj4+ICAgCS5kZWNfb2Zmc2V0ID0gMHgwLAo+PiAgIAkuZGVjX2Zt dHMgPSBpbXg4bV92cHVfZzJfZGVjX2ZtdHMsCj4+ICAgCS5udW1fZGVjX2ZtdHMgPSBBUlJBWV9T SVpFKGlteDhtX3ZwdV9nMl9kZWNfZm10cyksCj4+IC0JLmNvZGVjID0gSEFOVFJPX0hFVkNfREVD T0RFUiwKPj4gKwkuY29kZWMgPSBIQU5UUk9fSEVWQ19ERUNPREVSIHwgSEFOVFJPX1ZQOV9ERUNP REVSLAo+PiAgIAkuY29kZWNfb3BzID0gaW14OG1xX3ZwdV9nMl9jb2RlY19vcHMsCj4+ICAgCS5p bml0ID0gaW14OG1xX3ZwdV9od19pbml0LAo+PiAgIAkucnVudGltZV9yZXN1bWUgPSBpbXg4bXFf cnVudGltZV9yZXN1bWUsCj4gCj4gCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KTGludXgtcm9ja2NoaXAgbWFpbGluZyBsaXN0CkxpbnV4LXJvY2tjaGlw QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9saW51eC1yb2NrY2hpcAo=