From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D511AC4332F for ; Fri, 24 Sep 2021 09:29:00 +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 96FD160FC1 for ; Fri, 24 Sep 2021 09:29:00 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 96FD160FC1 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=uBIV9L5rM/3+Rz9L4pPllN5wrtJ6U3m5ORbZF0fI7hA=; b=IotDFcJEZ71vHRzGtvlNQ4sOGI D6FLr/Y3/bGrZusT63a9Zm01OjK3CaOKYJw3jxMj+Bpz2NhmDvwlyorOLwTkRzB7NOp9nrj+JZ6qD 9PpEPejVPscnH78stDB8UcZ1nAhyV1JPUr4OJRAVnz+EGJDiDycrV2GrsNWeeWZIQVgaefYd6cxP7 EILOJSMVCy31N0R/hL9QIRt+/dz8yF/fypwz8pTkIgYjcD2awPIcAbt9gnavBgcFRiEqSes3JqwRX osQRZfR7c1N6k1G25XLAn1BtY+atVnGc6v6xDyIoR0QD+3APcfLy6LcgwF2PJnfZy5yeBXqu8fNnU LYxPYXbQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mThTP-00DqOv-MG; Fri, 24 Sep 2021 09:26:27 +0000 Received: from bhuna.collabora.co.uk ([46.235.227.227]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mThTH-00DqN3-Pl; Fri, 24 Sep 2021 09:26:24 +0000 Received: from [IPv6:2a01:e0a:4cb:a870:c58e:ea8f:b5a4:d24f] (unknown [IPv6:2a01:e0a:4cb:a870:c58e:ea8f:b5a4:d24f]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: benjamin.gaignard) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 2939A1F449E3; Fri, 24 Sep 2021 10:26:16 +0100 (BST) Subject: Re: [PATCH v5 09/10] media: hantro: Support VP9 on the G2 core To: Andrzej Pietrasiewicz , 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: Boris Brezillon , Ezequiel Garcia , Fabio Estevam , Greg Kroah-Hartman , Hans Verkuil , Heiko Stuebner , Jernej Skrabec , Mauro Carvalho Chehab , Nicolas Dufresne , NXP Linux Team , Pengutronix Kernel Team , Philipp Zabel , Sascha Hauer , Shawn Guo , kernel@collabora.com References: <20210922101146.13762-1-andrzej.p@collabora.com> <20210922101146.13762-10-andrzej.p@collabora.com> From: Benjamin Gaignard Message-ID: <80cd3d79-e8b9-e5b0-44e3-bda193472d8c@collabora.com> Date: Fri, 24 Sep 2021 11:26:13 +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: <20210922101146.13762-10-andrzej.p@collabora.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210924_022620_311783_899FE160 X-CRM114-Status: GOOD ( 31.13 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CkxlIDIyLzA5LzIwMjEgw6AgMTI6MTEsIEFuZHJ6ZWogUGlldHJhc2lld2ljeiBhIMOpY3JpdMKg Ogo+IFZlcmlTaWxpY29uIEhhbnRybyBHMiBjb3JlIHN1cHBvcnRzIFZQOSBjb2RlYy4KPgo+IFNp Z25lZC1vZmYtYnk6IEFuZHJ6ZWogUGlldHJhc2lld2ljeiA8YW5kcnplai5wQGNvbGxhYm9yYS5j b20+CgpSZXZpZXdlZC1ieTogQmVuamFtaW4gR2FpZ25hcmQgPGJlbmphbWluLmdhaWduYXJkQGNv bGxhYm9yYS5jb20+Cgo+IC0tLQo+ICAgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9LY29u ZmlnICAgICAgICAgIHwgICAxICsKPiAgIGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vTWFr ZWZpbGUgICAgICAgICB8ICAgNiArLQo+ICAgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9o YW50cm8uaCAgICAgICAgIHwgIDI2ICsKPiAgIGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8v aGFudHJvX2Rydi5jICAgICB8ICAxOCArLQo+ICAgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRy by9oYW50cm9fZzJfcmVncy5oIHwgIDk3ICsrCj4gICAuLi4vc3RhZ2luZy9tZWRpYS9oYW50cm8v aGFudHJvX2cyX3ZwOV9kZWMuYyAgfCA5NzggKysrKysrKysrKysrKysrKysrCj4gICBkcml2ZXJz L3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19ody5oICAgICAgfCAgNjcgKysKPiAgIGRyaXZl cnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX3Y0bDIuYyAgICB8ICAgNiArCj4gICBkcml2 ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb192cDkuYyAgICAgfCAyNDAgKysrKysKPiAg IGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX3ZwOS5oICAgICB8IDEwMyArKwo+ ICAgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9pbXg4bV92cHVfaHcuYyAgIHwgIDIyICst Cj4gICAxMSBmaWxlcyBjaGFuZ2VkLCAxNTYwIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0p Cj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50 cm9fZzJfdnA5X2RlYy5jCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL21l ZGlhL2hhbnRyby9oYW50cm9fdnA5LmMKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0 YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb192cDkuaAo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv c3RhZ2luZy9tZWRpYS9oYW50cm8vS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50 cm8vS2NvbmZpZwo+IGluZGV4IDIwYjFmNmQ3YjY5Yy4uMDBhNTdkODhjOTJlIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMv c3RhZ2luZy9tZWRpYS9oYW50cm8vS2NvbmZpZwo+IEBAIC05LDYgKzksNyBAQCBjb25maWcgVklE RU9fSEFOVFJPCj4gICAJc2VsZWN0IFZJREVPQlVGMl9WTUFMTE9DCj4gICAJc2VsZWN0IFY0TDJf TUVNMk1FTV9ERVYKPiAgIAlzZWxlY3QgVjRMMl9IMjY0Cj4gKwlzZWxlY3QgVjRMMl9WUDkKPiAg IAloZWxwCj4gICAJICBTdXBwb3J0IGZvciB0aGUgSGFudHJvIElQIGJhc2VkIFZpZGVvIFByb2Nl c3NpbmcgVW5pdHMgcHJlc2VudCBvbgo+ICAgCSAgUm9ja2NoaXAgYW5kIE5YUCBpLk1YOE0gU29D cywgd2hpY2ggYWNjZWxlcmF0ZSB2aWRlbyBhbmQgaW1hZ2UKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9zdGFnaW5nL21lZGlhL2hhbnRyby9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9o YW50cm8vTWFrZWZpbGUKPiBpbmRleCBmZTZkODQ4NzFkMDcuLjI4YWYwYTFlZTRiZiAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL01ha2VmaWxlCj4gKysrIGIvZHJp dmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9NYWtlZmlsZQo+IEBAIC0xMCw5ICsxMCwxMCBAQCBo YW50cm8tdnB1LXkgKz0gXAo+ICAgCQloYW50cm9fZzEubyBcCj4gICAJCWhhbnRyb19nMV9oMjY0 X2RlYy5vIFwKPiAgIAkJaGFudHJvX2cxX21wZWcyX2RlYy5vIFwKPiAtCQloYW50cm9fZzJfaGV2 Y19kZWMubyBcCj4gICAJCWhhbnRyb19nMV92cDhfZGVjLm8gXAo+ICAgCQloYW50cm9fZzIubyBc Cj4gKwkJaGFudHJvX2cyX2hldmNfZGVjLm8gXAo+ICsJCWhhbnRyb19nMl92cDlfZGVjLm8gXAo+ ICAgCQlyb2NrY2hpcF92cHUyX2h3X2pwZWdfZW5jLm8gXAo+ICAgCQlyb2NrY2hpcF92cHUyX2h3 X2gyNjRfZGVjLm8gXAo+ICAgCQlyb2NrY2hpcF92cHUyX2h3X21wZWcyX2RlYy5vIFwKPiBAQCAt MjEsNyArMjIsOCBAQCBoYW50cm8tdnB1LXkgKz0gXAo+ICAgCQloYW50cm9faDI2NC5vIFwKPiAg IAkJaGFudHJvX2hldmMubyBcCj4gICAJCWhhbnRyb19tcGVnMi5vIFwKPiAtCQloYW50cm9fdnA4 Lm8KPiArCQloYW50cm9fdnA4Lm8gXAo+ICsJCWhhbnRyb192cDkubwo+ICAgCj4gICBoYW50cm8t dnB1LSQoQ09ORklHX1ZJREVPX0hBTlRST19JTVg4TSkgKz0gXAo+ICAgCQlpbXg4bV92cHVfaHcu bwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyby5oIGIv ZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm8uaAo+IGluZGV4IGQ5MWViMmIxYzUw OS4uMWU4YzFhNmUzZWIwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50 cm8vaGFudHJvLmgKPiArKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyby5o Cj4gQEAgLTM2LDYgKzM2LDcgQEAgc3RydWN0IGhhbnRyb19wb3N0cHJvY19vcHM7Cj4gICAjZGVm aW5lIEhBTlRST19WUDhfREVDT0RFUglCSVQoMTcpCj4gICAjZGVmaW5lIEhBTlRST19IMjY0X0RF Q09ERVIJQklUKDE4KQo+ICAgI2RlZmluZSBIQU5UUk9fSEVWQ19ERUNPREVSCUJJVCgxOSkKPiAr I2RlZmluZSBIQU5UUk9fVlA5X0RFQ09ERVIJQklUKDIwKQo+ICAgI2RlZmluZSBIQU5UUk9fREVD T0RFUlMJCTB4ZmZmZjAwMDAKPiAgIAo+ICAgLyoqCj4gQEAgLTExMCw2ICsxMTEsNyBAQCBlbnVt IGhhbnRyb19jb2RlY19tb2RlIHsKPiAgIAlIQU5UUk9fTU9ERV9NUEVHMl9ERUMsCj4gICAJSEFO VFJPX01PREVfVlA4X0RFQywKPiAgIAlIQU5UUk9fTU9ERV9IRVZDX0RFQywKPiArCUhBTlRST19N T0RFX1ZQOV9ERUMsCj4gICB9Owo+ICAgCj4gICAvKgo+IEBAIC0yMjMsNiArMjI1LDcgQEAgc3Ry dWN0IGhhbnRyb19kZXYgewo+ICAgICogQG1wZWcyX2RlYzoJCU1QRUctMi1kZWNvZGluZyBjb250 ZXh0Lgo+ICAgICogQHZwOF9kZWM6CQlWUDgtZGVjb2RpbmcgY29udGV4dC4KPiAgICAqIEBoZXZj X2RlYzoJCUhFVkMtZGVjb2RpbmcgY29udGV4dC4KPiArICogQHZwOV9kZWM6CQlWUDktZGVjb2Rp bmcgY29udGV4dC4KPiAgICAqLwo+ICAgc3RydWN0IGhhbnRyb19jdHggewo+ICAgCXN0cnVjdCBo YW50cm9fZGV2ICpkZXY7Cj4gQEAgLTI1MCw2ICsyNTMsNyBAQCBzdHJ1Y3QgaGFudHJvX2N0eCB7 Cj4gICAJCXN0cnVjdCBoYW50cm9fbXBlZzJfZGVjX2h3X2N0eCBtcGVnMl9kZWM7Cj4gICAJCXN0 cnVjdCBoYW50cm9fdnA4X2RlY19od19jdHggdnA4X2RlYzsKPiAgIAkJc3RydWN0IGhhbnRyb19o ZXZjX2RlY19od19jdHggaGV2Y19kZWM7Cj4gKwkJc3RydWN0IGhhbnRyb192cDlfZGVjX2h3X2N0 eCB2cDlfZGVjOwo+ICAgCX07Cj4gICB9Owo+ICAgCj4gQEAgLTI5OSw2ICszMDMsMjIgQEAgc3Ry dWN0IGhhbnRyb19wb3N0cHJvY19yZWdzIHsKPiAgIAlzdHJ1Y3QgaGFudHJvX3JlZyBkaXNwbGF5 X3dpZHRoOwo+ICAgfTsKPiAgIAo+ICtzdHJ1Y3QgaGFudHJvX3ZwOV9kZWNvZGVkX2J1ZmZlcl9p bmZvIHsKPiArCS8qIEluZm8gbmVlZGVkIHdoZW4gdGhlIGRlY29kZWQgZnJhbWUgc2VydmVzIGFz IGEgcmVmZXJlbmNlIGZyYW1lLiAqLwo+ICsJdW5zaWduZWQgc2hvcnQgd2lkdGg7Cj4gKwl1bnNp Z25lZCBzaG9ydCBoZWlnaHQ7Cj4gKwl1MzIgYml0X2RlcHRoIDogNDsKPiArfTsKPiArCj4gK3N0 cnVjdCBoYW50cm9fZGVjb2RlZF9idWZmZXIgewo+ICsJLyogTXVzdCBiZSB0aGUgZmlyc3QgZmll bGQgaW4gdGhpcyBzdHJ1Y3QuICovCj4gKwlzdHJ1Y3QgdjRsMl9tMm1fYnVmZmVyIGJhc2U7Cj4g Kwo+ICsJdW5pb24gewo+ICsJCXN0cnVjdCBoYW50cm9fdnA5X2RlY29kZWRfYnVmZmVyX2luZm8g dnA5Owo+ICsJfTsKPiArfTsKPiArCj4gICAvKiBMb2dnaW5nIGhlbHBlcnMgKi8KPiAgIAo+ICAg LyoqCj4gQEAgLTQzNiw2ICs0NTYsMTIgQEAgaGFudHJvX2dldF9kZWNfYnVmX2FkZHIoc3RydWN0 IGhhbnRyb19jdHggKmN0eCwgc3RydWN0IHZiMl9idWZmZXIgKnZiKQo+ICAgCXJldHVybiB2YjJf ZG1hX2NvbnRpZ19wbGFuZV9kbWFfYWRkcih2YiwgMCk7Cj4gICB9Cj4gICAKPiArc3RhdGljIGlu bGluZSBzdHJ1Y3QgaGFudHJvX2RlY29kZWRfYnVmZmVyICoKPiArdmIyX3RvX2hhbnRyb19kZWNv ZGVkX2J1ZihzdHJ1Y3QgdmIyX2J1ZmZlciAqYnVmKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVy X29mKGJ1Ziwgc3RydWN0IGhhbnRyb19kZWNvZGVkX2J1ZmZlciwgYmFzZS52Yi52YjJfYnVmKTsK PiArfQo+ICsKPiAgIHZvaWQgaGFudHJvX3Bvc3Rwcm9jX2Rpc2FibGUoc3RydWN0IGhhbnRyb19j dHggKmN0eCk7Cj4gICB2b2lkIGhhbnRyb19wb3N0cHJvY19lbmFibGUoc3RydWN0IGhhbnRyb19j dHggKmN0eCk7Cj4gICB2b2lkIGhhbnRyb19wb3N0cHJvY19mcmVlKHN0cnVjdCBoYW50cm9fY3R4 ICpjdHgpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRy b19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2Rydi5jCj4gaW5k ZXggOGEyZWRkNjdmMmM2Li44MDBjODg3OWFlZTAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9zdGFn aW5nL21lZGlhL2hhbnRyby9oYW50cm9fZHJ2LmMKPiArKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVk aWEvaGFudHJvL2hhbnRyb19kcnYuYwo+IEBAIC0yMzIsNyArMjMyLDcgQEAgcXVldWVfaW5pdCh2 b2lkICpwcml2LCBzdHJ1Y3QgdmIyX3F1ZXVlICpzcmNfdnEsIHN0cnVjdCB2YjJfcXVldWUgKmRz dF92cSkKPiAgIAlkc3RfdnEtPmlvX21vZGVzID0gVkIyX01NQVAgfCBWQjJfRE1BQlVGOwo+ICAg CWRzdF92cS0+ZHJ2X3ByaXYgPSBjdHg7Cj4gICAJZHN0X3ZxLT5vcHMgPSAmaGFudHJvX3F1ZXVl X29wczsKPiAtCWRzdF92cS0+YnVmX3N0cnVjdF9zaXplID0gc2l6ZW9mKHN0cnVjdCB2NGwyX20y bV9idWZmZXIpOwo+ICsJZHN0X3ZxLT5idWZfc3RydWN0X3NpemUgPSBzaXplb2Yoc3RydWN0IGhh bnRyb19kZWNvZGVkX2J1ZmZlcik7Cj4gICAJZHN0X3ZxLT50aW1lc3RhbXBfZmxhZ3MgPSBWNEwy X0JVRl9GTEFHX1RJTUVTVEFNUF9DT1BZOwo+ICAgCWRzdF92cS0+bG9jayA9ICZjdHgtPmRldi0+ dnB1X211dGV4Owo+ICAgCWRzdF92cS0+ZGV2ID0gY3R4LT5kZXYtPnY0bDJfZGV2LmRldjsKPiBA QCAtMjY2LDYgKzI2NiwxMiBAQCBzdGF0aWMgaW50IGhhbnRyb190cnlfY3RybChzdHJ1Y3QgdjRs Ml9jdHJsICpjdHJsKQo+ICAgCQlpZiAoc3BzLT5mbGFncyAmIFY0TDJfSEVWQ19TUFNfRkxBR19T Q0FMSU5HX0xJU1RfRU5BQkxFRCkKPiAgIAkJCS8qIE5vIHNjYWxpbmcgc3VwcG9ydCAqLwo+ICAg CQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9IGVsc2UgaWYgKGN0cmwtPmlkID09IFY0TDJfQ0lEX1NU QVRFTEVTU19WUDlfRlJBTUUpIHsKPiArCQljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9mcmFt ZSAqZGVjX3BhcmFtcyA9IGN0cmwtPnBfbmV3LnBfdnA5X2ZyYW1lOwo+ICsKPiArCQkvKiBXZSBv bmx5IHN1cHBvcnQgcHJvZmlsZSAwICovCj4gKwkJaWYgKGRlY19wYXJhbXMtPnByb2ZpbGUgIT0g MCkKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gICAJfQo+ICAgCXJldHVybiAwOwo+ICAgfQo+IEBA IC00NTksNiArNDY1LDE2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGFudHJvX2N0cmwgY29udHJv bHNbXSA9IHsKPiAgIAkJCS5zdGVwID0gMSwKPiAgIAkJCS5vcHMgPSAmaGFudHJvX2hldmNfY3Ry bF9vcHMsCj4gICAJCX0sCj4gKwl9LCB7Cj4gKwkJLmNvZGVjID0gSEFOVFJPX1ZQOV9ERUNPREVS LAo+ICsJCS5jZmcgPSB7Cj4gKwkJCS5pZCA9IFY0TDJfQ0lEX1NUQVRFTEVTU19WUDlfRlJBTUUs Cj4gKwkJfSwKPiArCX0sIHsKPiArCQkuY29kZWMgPSBIQU5UUk9fVlA5X0RFQ09ERVIsCj4gKwkJ LmNmZyA9IHsKPiArCQkJLmlkID0gVjRMMl9DSURfU1RBVEVMRVNTX1ZQOV9DT01QUkVTU0VEX0hE UiwKPiArCQl9LAo+ICAgCX0sCj4gICB9Owo+ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3Rh Z2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX3JlZ3MuaCBiL2RyaXZlcnMvc3RhZ2luZy9tZWRp YS9oYW50cm8vaGFudHJvX2cyX3JlZ3MuaAo+IGluZGV4IDBhYzBiYTM3NWU4MC4uMjFjYTIxNjQ4 NjE0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cy X3JlZ3MuaAo+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX3Jl Z3MuaAo+IEBAIC0yOCw2ICsyOCw3IEBACj4gICAjZGVmaW5lIEcyX1JFR19JTlRFUlJVUFRfREVD X0UJCUJJVCgwKQo+ICAgCj4gICAjZGVmaW5lIEhFVkNfREVDX01PREUJCQkweGMKPiArI2RlZmlu ZSBWUDlfREVDX01PREUJCQkweGQKPiAgIAo+ICAgI2RlZmluZSBCVVNfV0lEVEhfMzIJCQkwCj4g ICAjZGVmaW5lIEJVU19XSURUSF82NAkJCTEKPiBAQCAtNDksNiArNTAsNyBAQAo+ICAgI2RlZmlu ZSBnMl9waWNfaGVpZ2h0X2luX2NicwlHMl9ERUNfUkVHKDQsIDYsICAweDFmZmYpCj4gICAjZGVm aW5lIGcyX251bV9yZWZfZnJhbWVzCUcyX0RFQ19SRUcoNCwgMCwgIDB4MWYpCj4gICAKPiArI2Rl ZmluZSBnMl9zdGFydF9iaXQJCUcyX0RFQ19SRUcoNSwgMjUsIDB4N2YpCj4gICAjZGVmaW5lIGcy X3NjYWxpbmdfbGlzdF9lCUcyX0RFQ19SRUcoNSwgMjQsIDB4MSkKPiAgICNkZWZpbmUgZzJfY2Jf cXBfb2Zmc2V0CQlHMl9ERUNfUkVHKDUsIDE5LCAweDFmKQo+ICAgI2RlZmluZSBnMl9jcl9xcF9v ZmZzZXQJCUcyX0RFQ19SRUcoNSwgMTQsIDB4MWYpCj4gQEAgLTg0LDYgKzg2LDcgQEAKPiAgICNk ZWZpbmUgZzJfYml0X2RlcHRoX3lfbWludXM4CUcyX0RFQ19SRUcoOCwgNiwgIDB4MykKPiAgICNk ZWZpbmUgZzJfYml0X2RlcHRoX2NfbWludXM4CUcyX0RFQ19SRUcoOCwgNCwgIDB4MykKPiAgICNk ZWZpbmUgZzJfb3V0cHV0XzhfYml0cwlHMl9ERUNfUkVHKDgsIDMsICAweDEpCj4gKyNkZWZpbmUg ZzJfb3V0cHV0X2Zvcm1hdAlHMl9ERUNfUkVHKDgsIDAsICAweDcpCj4gICAKPiAgICNkZWZpbmUg ZzJfcmVmaWR4MV9hY3RpdmUJRzJfREVDX1JFRyg5LCAxOSwgMHgxZikKPiAgICNkZWZpbmUgZzJf cmVmaWR4MF9hY3RpdmUJRzJfREVDX1JFRyg5LCAxNCwgMHgxZikKPiBAQCAtOTYsNiArOTksMTQg QEAKPiAgICNkZWZpbmUgZzJfdGlsZV9lCQlHMl9ERUNfUkVHKDEwLCAxLCAgMHgxKQo+ICAgI2Rl ZmluZSBnMl9lbnRyb3B5X3N5bmNfZQlHMl9ERUNfUkVHKDEwLCAwLCAgMHgxKQo+ICAgCj4gKyNk ZWZpbmUgdnA5X3RyYW5zZm9ybV9tb2RlCUcyX0RFQ19SRUcoMTEsIDI3LCAweDcpCj4gKyNkZWZp bmUgdnA5X2ZpbHRfc2hhcnBuZXNzCUcyX0RFQ19SRUcoMTEsIDIxLCAweDcpCj4gKyNkZWZpbmUg dnA5X21jb21wX2ZpbHRfdHlwZQlHMl9ERUNfUkVHKDExLCAgOCwgMHg3KQo+ICsjZGVmaW5lIHZw OV9oaWdoX3ByZWNfbXZfZQlHMl9ERUNfUkVHKDExLCAgNywgMHgxKQo+ICsjZGVmaW5lIHZwOV9j b21wX3ByZWRfbW9kZQlHMl9ERUNfUkVHKDExLCAgNCwgMHgzKQo+ICsjZGVmaW5lIHZwOV9ncmVm X3NpZ25fYmlhcwlHMl9ERUNfUkVHKDExLCAgMiwgMHgxKQo+ICsjZGVmaW5lIHZwOV9hcmVmX3Np Z25fYmlhcwlHMl9ERUNfUkVHKDExLCAgMCwgMHgxKQo+ICsKPiAgICNkZWZpbmUgZzJfcmVmZXJf bHRlcm1fZQlHMl9ERUNfUkVHKDEyLCAxNiwgMHhmZmZmKQo+ICAgI2RlZmluZSBnMl9taW5fY2Jf c2l6ZQkJRzJfREVDX1JFRygxMiwgMTMsIDB4NykKPiAgICNkZWZpbmUgZzJfbWF4X2NiX3NpemUJ CUcyX0RFQ19SRUcoMTIsIDEwLCAweDcpCj4gQEAgLTE1NCw2ICsxNjUsNTAgQEAKPiAgICNkZWZp bmUgZzJfcGFydGlhbF9jdGJfeQlHMl9ERUNfUkVHKDIwLCAzMCwgMHgxKQo+ICAgI2RlZmluZSBn Ml9waWNfd2lkdGhfNHg0CUcyX0RFQ19SRUcoMjAsIDE2LCAweGZmZikKPiAgICNkZWZpbmUgZzJf cGljX2hlaWdodF80eDQJRzJfREVDX1JFRygyMCwgMCwgIDB4ZmZmKQo+ICsKPiArI2RlZmluZSB2 cDlfcXBfZGVsdGFfeV9kYwlHMl9ERUNfUkVHKDEzLCAyMywgMHgzZikKPiArI2RlZmluZSB2cDlf cXBfZGVsdGFfY2hfZGMJRzJfREVDX1JFRygxMywgMTcsIDB4M2YpCj4gKyNkZWZpbmUgdnA5X3Fw X2RlbHRhX2NoX2FjCUcyX0RFQ19SRUcoMTMsIDExLCAweDNmKQo+ICsjZGVmaW5lIHZwOV9sYXN0 X3NpZ25fYmlhcwlHMl9ERUNfUkVHKDEzLCAxMCwgMHgxKQo+ICsjZGVmaW5lIHZwOV9sb3NzbGVz c19lCQlHMl9ERUNfUkVHKDEzLCAgOSwgMHgxKQo+ICsjZGVmaW5lIHZwOV9jb21wX3ByZWRfdmFy X3JlZjEJRzJfREVDX1JFRygxMywgIDcsIDB4MykKPiArI2RlZmluZSB2cDlfY29tcF9wcmVkX3Zh cl9yZWYwCUcyX0RFQ19SRUcoMTMsICA1LCAweDMpCj4gKyNkZWZpbmUgdnA5X2NvbXBfcHJlZF9m aXhlZF9yZWYJRzJfREVDX1JFRygxMywgIDMsIDB4MykKPiArI2RlZmluZSB2cDlfc2VnbWVudF90 ZW1wX3VwZF9lCUcyX0RFQ19SRUcoMTMsICAyLCAweDEpCj4gKyNkZWZpbmUgdnA5X3NlZ21lbnRf dXBkX2UJRzJfREVDX1JFRygxMywgIDEsIDB4MSkKPiArI2RlZmluZSB2cDlfc2VnbWVudF9lCQlH Ml9ERUNfUkVHKDEzLCAgMCwgMHgxKQo+ICsKPiArI2RlZmluZSB2cDlfZmlsdF9sZXZlbAkJRzJf REVDX1JFRygxNCwgMTgsIDB4M2YpCj4gKyNkZWZpbmUgdnA5X3JlZnBpY19zZWcwCQlHMl9ERUNf UkVHKDE0LCAxNSwgMHg3KQo+ICsjZGVmaW5lIHZwOV9za2lwX3NlZzAJCUcyX0RFQ19SRUcoMTQs IDE0LCAweDEpCj4gKyNkZWZpbmUgdnA5X2ZpbHRfbGV2ZWxfc2VnMAlHMl9ERUNfUkVHKDE0LCAg OCwgMHgzZikKPiArI2RlZmluZSB2cDlfcXVhbnRfc2VnMAkJRzJfREVDX1JFRygxNCwgIDAsIDB4 ZmYpCj4gKwo+ICsjZGVmaW5lIHZwOV9yZWZwaWNfc2VnMQkJRzJfREVDX1JFRygxNSwgMTUsIDB4 NykKPiArI2RlZmluZSB2cDlfc2tpcF9zZWcxCQlHMl9ERUNfUkVHKDE1LCAxNCwgMHgxKQo+ICsj ZGVmaW5lIHZwOV9maWx0X2xldmVsX3NlZzEJRzJfREVDX1JFRygxNSwgIDgsIDB4M2YpCj4gKyNk ZWZpbmUgdnA5X3F1YW50X3NlZzEJCUcyX0RFQ19SRUcoMTUsICAwLCAweGZmKQo+ICsKPiArI2Rl ZmluZSB2cDlfcmVmcGljX3NlZzIJCUcyX0RFQ19SRUcoMTYsIDE1LCAweDcpCj4gKyNkZWZpbmUg dnA5X3NraXBfc2VnMgkJRzJfREVDX1JFRygxNiwgMTQsIDB4MSkKPiArI2RlZmluZSB2cDlfZmls dF9sZXZlbF9zZWcyCUcyX0RFQ19SRUcoMTYsICA4LCAweDNmKQo+ICsjZGVmaW5lIHZwOV9xdWFu dF9zZWcyCQlHMl9ERUNfUkVHKDE2LCAgMCwgMHhmZikKPiArCj4gKyNkZWZpbmUgdnA5X3JlZnBp Y19zZWczCQlHMl9ERUNfUkVHKDE3LCAxNSwgMHg3KQo+ICsjZGVmaW5lIHZwOV9za2lwX3NlZzMJ CUcyX0RFQ19SRUcoMTcsIDE0LCAweDEpCj4gKyNkZWZpbmUgdnA5X2ZpbHRfbGV2ZWxfc2VnMwlH Ml9ERUNfUkVHKDE3LCAgOCwgMHgzZikKPiArI2RlZmluZSB2cDlfcXVhbnRfc2VnMwkJRzJfREVD X1JFRygxNywgIDAsIDB4ZmYpCj4gKwo+ICsjZGVmaW5lIHZwOV9yZWZwaWNfc2VnNAkJRzJfREVD X1JFRygxOCwgMTUsIDB4NykKPiArI2RlZmluZSB2cDlfc2tpcF9zZWc0CQlHMl9ERUNfUkVHKDE4 LCAxNCwgMHgxKQo+ICsjZGVmaW5lIHZwOV9maWx0X2xldmVsX3NlZzQJRzJfREVDX1JFRygxOCwg IDgsIDB4M2YpCj4gKyNkZWZpbmUgdnA5X3F1YW50X3NlZzQJCUcyX0RFQ19SRUcoMTgsICAwLCAw eGZmKQo+ICsKPiArI2RlZmluZSB2cDlfcmVmcGljX3NlZzUJCUcyX0RFQ19SRUcoMTksIDE1LCAw eDcpCj4gKyNkZWZpbmUgdnA5X3NraXBfc2VnNQkJRzJfREVDX1JFRygxOSwgMTQsIDB4MSkKPiAr I2RlZmluZSB2cDlfZmlsdF9sZXZlbF9zZWc1CUcyX0RFQ19SRUcoMTksICA4LCAweDNmKQo+ICsj ZGVmaW5lIHZwOV9xdWFudF9zZWc1CQlHMl9ERUNfUkVHKDE5LCAgMCwgMHhmZikKPiArCj4gICAj ZGVmaW5lIGhldmNfY3VyX3BvY18wMAkJRzJfREVDX1JFRyg0NiwgMjQsIDB4ZmYpCj4gICAjZGVm aW5lIGhldmNfY3VyX3BvY18wMQkJRzJfREVDX1JFRyg0NiwgMTYsIDB4ZmYpCj4gICAjZGVmaW5l IGhldmNfY3VyX3BvY18wMgkJRzJfREVDX1JFRyg0NiwgOCwgIDB4ZmYpCj4gQEAgLTE3NCw2ICsy MjksNDQgQEAKPiAgICNkZWZpbmUgaGV2Y19jdXJfcG9jXzE0CQlHMl9ERUNfUkVHKDQ5LCA4LCAg MHhmZikKPiAgICNkZWZpbmUgaGV2Y19jdXJfcG9jXzE1CQlHMl9ERUNfUkVHKDQ5LCAwLCAgMHhm ZikKPiAgIAo+ICsjZGVmaW5lIHZwOV9yZWZwaWNfc2VnNgkJRzJfREVDX1JFRygzMSwgMTUsIDB4 NykKPiArI2RlZmluZSB2cDlfc2tpcF9zZWc2CQlHMl9ERUNfUkVHKDMxLCAxNCwgMHgxKQo+ICsj ZGVmaW5lIHZwOV9maWx0X2xldmVsX3NlZzYJRzJfREVDX1JFRygzMSwgIDgsIDB4M2YpCj4gKyNk ZWZpbmUgdnA5X3F1YW50X3NlZzYJCUcyX0RFQ19SRUcoMzEsICAwLCAweGZmKQo+ICsKPiArI2Rl ZmluZSB2cDlfcmVmcGljX3NlZzcJCUcyX0RFQ19SRUcoMzIsIDE1LCAweDcpCj4gKyNkZWZpbmUg dnA5X3NraXBfc2VnNwkJRzJfREVDX1JFRygzMiwgMTQsIDB4MSkKPiArI2RlZmluZSB2cDlfZmls dF9sZXZlbF9zZWc3CUcyX0RFQ19SRUcoMzIsICA4LCAweDNmKQo+ICsjZGVmaW5lIHZwOV9xdWFu dF9zZWc3CQlHMl9ERUNfUkVHKDMyLCAgMCwgMHhmZikKPiArCj4gKyNkZWZpbmUgdnA5X2xyZWZf d2lkdGgJCUcyX0RFQ19SRUcoMzMsIDE2LCAweGZmZmYpCj4gKyNkZWZpbmUgdnA5X2xyZWZfaGVp Z2h0CQlHMl9ERUNfUkVHKDMzLCAgMCwgMHhmZmZmKQo+ICsKPiArI2RlZmluZSB2cDlfZ3JlZl93 aWR0aAkJRzJfREVDX1JFRygzNCwgMTYsIDB4ZmZmZikKPiArI2RlZmluZSB2cDlfZ3JlZl9oZWln aHQJCUcyX0RFQ19SRUcoMzQsICAwLCAweGZmZmYpCj4gKwo+ICsjZGVmaW5lIHZwOV9hcmVmX3dp ZHRoCQlHMl9ERUNfUkVHKDM1LCAxNiwgMHhmZmZmKQo+ICsjZGVmaW5lIHZwOV9hcmVmX2hlaWdo dAkJRzJfREVDX1JFRygzNSwgIDAsIDB4ZmZmZikKPiArCj4gKyNkZWZpbmUgdnA5X2xyZWZfaG9y X3NjYWxlCUcyX0RFQ19SRUcoMzYsIDE2LCAweGZmZmYpCj4gKyNkZWZpbmUgdnA5X2xyZWZfdmVy X3NjYWxlCUcyX0RFQ19SRUcoMzYsICAwLCAweGZmZmYpCj4gKwo+ICsjZGVmaW5lIHZwOV9ncmVm X2hvcl9zY2FsZQlHMl9ERUNfUkVHKDM3LCAxNiwgMHhmZmZmKQo+ICsjZGVmaW5lIHZwOV9ncmVm X3Zlcl9zY2FsZQlHMl9ERUNfUkVHKDM3LCAgMCwgMHhmZmZmKQo+ICsKPiArI2RlZmluZSB2cDlf YXJlZl9ob3Jfc2NhbGUJRzJfREVDX1JFRygzOCwgMTYsIDB4ZmZmZikKPiArI2RlZmluZSB2cDlf YXJlZl92ZXJfc2NhbGUJRzJfREVDX1JFRygzOCwgIDAsIDB4ZmZmZikKPiArCj4gKyNkZWZpbmUg dnA5X2ZpbHRfcmVmX2Fkal8wCUcyX0RFQ19SRUcoNDYsIDI0LCAweDdmKQo+ICsjZGVmaW5lIHZw OV9maWx0X3JlZl9hZGpfMQlHMl9ERUNfUkVHKDQ2LCAxNiwgMHg3ZikKPiArI2RlZmluZSB2cDlf ZmlsdF9yZWZfYWRqXzIJRzJfREVDX1JFRyg0NiwgIDgsIDB4N2YpCj4gKyNkZWZpbmUgdnA5X2Zp bHRfcmVmX2Fkal8zCUcyX0RFQ19SRUcoNDYsICAwLCAweDdmKQo+ICsKPiArI2RlZmluZSB2cDlf ZmlsdF9tYl9hZGpfMAlHMl9ERUNfUkVHKDQ3LCAyNCwgMHg3ZikKPiArI2RlZmluZSB2cDlfZmls dF9tYl9hZGpfMQlHMl9ERUNfUkVHKDQ3LCAxNiwgMHg3ZikKPiArI2RlZmluZSB2cDlfZmlsdF9t Yl9hZGpfMglHMl9ERUNfUkVHKDQ3LCAgOCwgMHg3ZikKPiArI2RlZmluZSB2cDlfZmlsdF9tYl9h ZGpfMwlHMl9ERUNfUkVHKDQ3LCAgMCwgMHg3ZikKPiArCj4gICAjZGVmaW5lIGcyX2FwZl90aHJl c2hvbGQJRzJfREVDX1JFRyg1NSwgMCwgMHhmZmZmKQo+ICAgCj4gICAjZGVmaW5lIGcyX2Nsa19n YXRlX2UJCUcyX0RFQ19SRUcoNTgsIDE2LCAweDEpCj4gQEAgLTE4Niw2ICsyNzksOCBAQAo+ICAg Cj4gICAjZGVmaW5lIEcyX0FERFJfRFNUCQkoRzJfU1dSRUcoNjUpKQo+ICAgI2RlZmluZSBHMl9S RUdfQUREUl9SRUYoaSkJKEcyX1NXUkVHKDY3KSAgKyAoKGkpICogMHg4KSkKPiArI2RlZmluZSBW UDlfQUREUl9TRUdNRU5UX1dSSVRFCShHMl9TV1JFRyg3OSkpCj4gKyNkZWZpbmUgVlA5X0FERFJf U0VHTUVOVF9SRUFECShHMl9TV1JFRyg4MSkpCj4gICAjZGVmaW5lIEcyX0FERFJfRFNUX0NIUgkJ KEcyX1NXUkVHKDk5KSkKPiAgICNkZWZpbmUgRzJfUkVHX0NIUl9SRUYoaSkJKEcyX1NXUkVHKDEw MSkgKyAoKGkpICogMHg4KSkKPiAgICNkZWZpbmUgRzJfQUREUl9EU1RfTVYJCShHMl9TV1JFRygx MzMpKQo+IEBAIC0xOTMsNiArMjg4LDggQEAKPiAgICNkZWZpbmUgRzJfQUREUl9USUxFX1NJWkUJ KEcyX1NXUkVHKDE2NykpCj4gICAjZGVmaW5lIEcyX0FERFJfU1RSCQkoRzJfU1dSRUcoMTY5KSkK PiAgICNkZWZpbmUgSEVWQ19TQ0FMSU5HX0xJU1QJKEcyX1NXUkVHKDE3MSkpCj4gKyNkZWZpbmUg VlA5X0FERFJfQ1RSCQkoRzJfU1dSRUcoMTcxKSkKPiArI2RlZmluZSBWUDlfQUREUl9QUk9CUwkJ KEcyX1NXUkVHKDE3MykpCj4gICAjZGVmaW5lIEcyX1JBU1RFUl9TQ0FOCQkoRzJfU1dSRUcoMTc1 KSkKPiAgICNkZWZpbmUgRzJfUkFTVEVSX1NDQU5fQ0hSCShHMl9TV1JFRygxNzcpKQo+ICAgI2Rl ZmluZSBHMl9USUxFX0ZJTFRFUgkJKEcyX1NXUkVHKDE3OSkpCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX3ZwOV9kZWMuYyBiL2RyaXZlcnMvc3Rh Z2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX3ZwOV9kZWMuYwo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5mMWIyMDc2NjZmYTcKPiAtLS0gL2Rldi9udWxsCj4g KysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9fZzJfdnA5X2RlYy5jCj4g QEAgLTAsMCArMSw5NzggQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK PiArLyoKPiArICogSGFudHJvIFZQOSBjb2RlYyBkcml2ZXIKPiArICoKPiArICogQ29weXJpZ2h0 IChDKSAyMDIxIENvbGxhYm9yYSBMdGQuCj4gKyAqLwo+ICsjaW5jbHVkZSAibWVkaWEvdmlkZW9i dWYyLWNvcmUuaCIKPiArI2luY2x1ZGUgIm1lZGlhL3ZpZGVvYnVmMi1kbWEtY29udGlnLmgiCj4g KyNpbmNsdWRlICJtZWRpYS92aWRlb2J1ZjItdjRsMi5oIgo+ICsjaW5jbHVkZSA8bGludXgva2Vy bmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Cj4gKyNpbmNsdWRlIDxtZWRpYS92 NGwyLW1lbTJtZW0uaD4KPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItdnA5Lmg+Cj4gKwo+ICsjaW5j bHVkZSAiaGFudHJvLmgiCj4gKyNpbmNsdWRlICJoYW50cm9fdnA5LmgiCj4gKyNpbmNsdWRlICJo YW50cm9fZzJfcmVncy5oIgo+ICsKPiArI2RlZmluZSBHMl9BTElHTiAxNgo+ICsKPiArZW51bSBo YW50cm9fcmVmX2ZyYW1lcyB7Cj4gKwlJTlRSQV9GUkFNRSA9IDAsCj4gKwlMQVNUX0ZSQU1FID0g MSwKPiArCUdPTERFTl9GUkFNRSA9IDIsCj4gKwlBTFRSRUZfRlJBTUUgPSAzLAo+ICsJTUFYX1JF Rl9GUkFNRVMgPSA0Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHN0YXJ0X3ByZXBhcmVfcnVuKHN0 cnVjdCBoYW50cm9fY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICoq ZGVjX3BhcmFtcykKPiArewo+ICsJY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDlfY29tcHJlc3Nl ZF9oZHIgKnByb2JfdXBkYXRlczsKPiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggKnZw OV9jdHggPSAmY3R4LT52cDlfZGVjOwo+ICsJc3RydWN0IHY0bDJfY3RybCAqY3RybDsKPiArCXVu c2lnbmVkIGludCBmY3R4X2lkeDsKPiArCj4gKwkvKiB2NGwyLXNwZWNpZmljIHN0dWZmICovCj4g KwloYW50cm9fc3RhcnRfcHJlcGFyZV9ydW4oY3R4KTsKPiArCj4gKwljdHJsID0gdjRsMl9jdHJs X2ZpbmQoJmN0eC0+Y3RybF9oYW5kbGVyLCBWNEwyX0NJRF9TVEFURUxFU1NfVlA5X0ZSQU1FKTsK PiArCWlmIChXQVJOX09OKCFjdHJsKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCSpkZWNfcGFy YW1zID0gY3RybC0+cF9jdXIucDsKPiArCj4gKwljdHJsID0gdjRsMl9jdHJsX2ZpbmQoJmN0eC0+ Y3RybF9oYW5kbGVyLCBWNEwyX0NJRF9TVEFURUxFU1NfVlA5X0NPTVBSRVNTRURfSERSKTsKPiAr CWlmIChXQVJOX09OKCFjdHJsKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCXByb2JfdXBkYXRl cyA9IGN0cmwtPnBfY3VyLnA7Cj4gKwl2cDlfY3R4LT5jdXIudHhfbW9kZSA9IHByb2JfdXBkYXRl cy0+dHhfbW9kZTsKPiArCj4gKwkvKgo+ICsJICogdnA5IHN0dWZmCj4gKwkgKgo+ICsJICogYnkg dGhpcyBwb2ludCB0aGUgdXNlcnNwYWNlIGhhcyBkb25lIGFsbCBwYXJ0cyBvZiA2LjIgdW5jb21w cmVzc2VkX2hlYWRlcigpCj4gKwkgKiBleGNlcHQgdGhpcyBmcmFnbWVudDoKPiArCSAqIGlmICgg RnJhbWVJc0ludHJhIHx8IGVycm9yX3Jlc2lsaWVudF9tb2RlICkgewo+ICsJICoJc2V0dXBfcGFz dF9pbmRlcGVuZGVuY2UgKCApCj4gKwkgKglpZiAoIGZyYW1lX3R5cGUgPT0gS0VZX0ZSQU1FIHx8 IGVycm9yX3Jlc2lsaWVudF9tb2RlID09IDEgfHwKPiArCSAqCSAgICAgcmVzZXRfZnJhbWVfY29u dGV4dCA9PSAzICkgewo+ICsJICoJCWZvciAoIGkgPSAwOyBpIDwgNDsgaSArKyApIHsKPiArCSAq CQkJc2F2ZV9wcm9icyggaSApCj4gKwkgKgkJfQo+ICsJICoJfSBlbHNlIGlmICggcmVzZXRfZnJh bWVfY29udGV4dCA9PSAyICkgewo+ICsJICoJCXNhdmVfcHJvYnMoIGZyYW1lX2NvbnRleHRfaWR4 ICkKPiArCSAqCX0KPiArCSAqCWZyYW1lX2NvbnRleHRfaWR4ID0gMAo+ICsJICogfQo+ICsJICov Cj4gKwlmY3R4X2lkeCA9IHY0bDJfdnA5X3Jlc2V0X2ZyYW1lX2N0eCgqZGVjX3BhcmFtcywgdnA5 X2N0eC0+ZnJhbWVfY29udGV4dCk7Cj4gKwl2cDlfY3R4LT5jdXIuZnJhbWVfY29udGV4dF9pZHgg PSBmY3R4X2lkeDsKPiArCj4gKwkvKiA2LjEgZnJhbWUoc3opOiBsb2FkX3Byb2JzKCkgYW5kIGxv YWRfcHJvYnMyKCkgKi8KPiArCXZwOV9jdHgtPnByb2JhYmlsaXR5X3RhYmxlcyA9IHZwOV9jdHgt PmZyYW1lX2NvbnRleHRbZmN0eF9pZHhdOwo+ICsKPiArCS8qCj4gKwkgKiBUaGUgdXNlcnNwYWNl IGhhcyBhbHNvIHBlcmZvcm1lZCA2LjMgY29tcHJlc3NlZF9oZWFkZXIoKSwgYnV0IGhhbmRsaW5n IHRoZQo+ICsJICogcHJvYnMgaW4gYSBzcGVjaWFsIHdheS4gQWxsIHByb2JzIHdoaWNoIG5lZWQg dXBkYXRpbmcsIGV4Y2VwdCBNVi1yZWxhdGVkLAo+ICsJICogaGF2ZSBiZWVuIHJlYWQgZnJvbSB0 aGUgYml0c3RyZWFtIGFuZCB0cmFuc2xhdGVkIHRocm91Z2ggaW52X21hcF90YWJsZVtdLAo+ICsJ ICogYnV0IG5vIDYuMy42IGludl9yZWNlbnRlcl9ub25uZWcodiwgbSkgaGFzIGJlZW4gcGVyZm9y bWVkLiBUaGUgdmFsdWVzIHBhc3NlZAo+ICsJICogYnkgdXNlcnNwYWNlIGFyZSBlaXRoZXIgdHJh bnNsYXRlZCB2YWx1ZXMgKHRoZXJlIGFyZSBubyAwIHZhbHVlcyBpbgo+ICsJICogaW52X21hcF90 YWJsZVtdKSwgb3IgemVybyB0byBpbmRpY2F0ZSBubyB1cGRhdGUuIEFsbCBNVi1yZWxhdGVkIHBy b2JzIHdoaWNoIG5lZWQKPiArCSAqIHVwZGF0aW5nIGhhdmUgYmVlbiByZWFkIGZyb20gdGhlIGJp dHN0cmVhbSBhbmQgKG12X3Byb2IgPDwgMSkgfCAxIGhhcyBiZWVuCj4gKwkgKiBwZXJmb3JtZWQu IFRoZSB2YWx1ZXMgcGFzc2VkIGJ5IHVzZXJzcGFjZSBhcmUgZWl0aGVyIG5ldyB2YWx1ZXMKPiAr CSAqIHRvIHJlcGxhY2Ugb2xkIG9uZXMgKHRoZSBhYm92ZSBtZW50aW9uZWQgc2hpZnQgYW5kIGJp dHdpc2Ugb3IgbmV2ZXIgcmVzdWx0IGluCj4gKwkgKiBhIHplcm8pIG9yIHplcm8gdG8gaW5kaWNh dGUgbm8gdXBkYXRlLgo+ICsJICogZndfdXBkYXRlX3Byb2JzKCkgcGVyZm9ybXMgYWN0dWFsIHBy b2JzIHVwZGF0ZXMgb3IgbGVhdmVzIHByb2JzIGFzLWlzCj4gKwkgKiBmb3IgdmFsdWVzIGZvciB3 aGljaCBhIHplcm8gd2FzIHBhc3NlZCBmcm9tIHVzZXJzcGFjZS4KPiArCSAqLwo+ICsJdjRsMl92 cDlfZndfdXBkYXRlX3Byb2JzKCZ2cDlfY3R4LT5wcm9iYWJpbGl0eV90YWJsZXMsIHByb2JfdXBk YXRlcywgKmRlY19wYXJhbXMpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg c2l6ZV90IGNocm9tYV9vZmZzZXQoY29uc3Qgc3RydWN0IGhhbnRyb19jdHggKmN0eCwKPiArCQkJ ICAgIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zKQo+ICt7Cj4g KwlpbnQgYnl0ZXNfcGVyX3BpeGVsID0gZGVjX3BhcmFtcy0+Yml0X2RlcHRoID09IDggPyAxIDog MjsKPiArCj4gKwlyZXR1cm4gY3R4LT5zcmNfZm10LndpZHRoICogY3R4LT5zcmNfZm10LmhlaWdo dCAqIGJ5dGVzX3Blcl9waXhlbDsKPiArfQo+ICsKPiArc3RhdGljIHNpemVfdCBtdl9vZmZzZXQo Y29uc3Qgc3RydWN0IGhhbnRyb19jdHggKmN0eCwKPiArCQkJY29uc3Qgc3RydWN0IHY0bDJfY3Ry bF92cDlfZnJhbWUgKmRlY19wYXJhbXMpCj4gK3sKPiArCXNpemVfdCBjcl9vZmZzZXQgPSBjaHJv bWFfb2Zmc2V0KGN0eCwgZGVjX3BhcmFtcyk7Cj4gKwo+ICsJcmV0dXJuIEFMSUdOKChjcl9vZmZz ZXQgKiAzKSAvIDIsIEcyX0FMSUdOKTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBoYW50cm9f ZGVjb2RlZF9idWZmZXIgKgo+ICtnZXRfcmVmX2J1ZihzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LCBz dHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICpkc3QsIHU2NCB0aW1lc3RhbXApCj4gK3sKPiArCXN0cnVj dCB2NGwyX20ybV9jdHggKm0ybV9jdHggPSBjdHgtPmZoLm0ybV9jdHg7Cj4gKwlzdHJ1Y3QgdmIy X3F1ZXVlICpjYXBfcSA9ICZtMm1fY3R4LT5jYXBfcV9jdHgucTsKPiArCWludCBidWZfaWR4Owo+ ICsKPiArCS8qCj4gKwkgKiBJZiBhIHJlZiBpcyB1bnVzZWQgb3IgaW52YWxpZCwgYWRkcmVzcyBv ZiBjdXJyZW50IGRlc3RpbmF0aW9uCj4gKwkgKiBidWZmZXIgaXMgcmV0dXJuZWQuCj4gKwkgKi8K PiArCWJ1Zl9pZHggPSB2YjJfZmluZF90aW1lc3RhbXAoY2FwX3EsIHRpbWVzdGFtcCwgMCk7Cj4g KwlpZiAoYnVmX2lkeCA8IDApCj4gKwkJcmV0dXJuIHZiMl90b19oYW50cm9fZGVjb2RlZF9idWYo JmRzdC0+dmIyX2J1Zik7Cj4gKwo+ICsJcmV0dXJuIHZiMl90b19oYW50cm9fZGVjb2RlZF9idWYo dmIyX2dldF9idWZmZXIoY2FwX3EsIGJ1Zl9pZHgpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg dXBkYXRlX2RlY19idWZfaW5mbyhzdHJ1Y3QgaGFudHJvX2RlY29kZWRfYnVmZmVyICpidWYsCj4g KwkJCQljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9mcmFtZSAqZGVjX3BhcmFtcykKPiArewo+ ICsJYnVmLT52cDkud2lkdGggPSBkZWNfcGFyYW1zLT5mcmFtZV93aWR0aF9taW51c18xICsgMTsK PiArCWJ1Zi0+dnA5LmhlaWdodCA9IGRlY19wYXJhbXMtPmZyYW1lX2hlaWdodF9taW51c18xICsg MTsKPiArCWJ1Zi0+dnA5LmJpdF9kZXB0aCA9IGRlY19wYXJhbXMtPmJpdF9kZXB0aDsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgdXBkYXRlX2N0eF9jdXJfaW5mbyhzdHJ1Y3QgaGFudHJvX3ZwOV9k ZWNfaHdfY3R4ICp2cDlfY3R4LAo+ICsJCQkJc3RydWN0IGhhbnRyb19kZWNvZGVkX2J1ZmZlciAq YnVmLAo+ICsJCQkJY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDlfZnJhbWUgKmRlY19wYXJhbXMp Cj4gK3sKPiArCXZwOV9jdHgtPmN1ci52YWxpZCA9IHRydWU7Cj4gKwl2cDlfY3R4LT5jdXIucmVm ZXJlbmNlX21vZGUgPSBkZWNfcGFyYW1zLT5yZWZlcmVuY2VfbW9kZTsKPiArCXZwOV9jdHgtPmN1 ci5pbnRlcnBvbGF0aW9uX2ZpbHRlciA9IGRlY19wYXJhbXMtPmludGVycG9sYXRpb25fZmlsdGVy Owo+ICsJdnA5X2N0eC0+Y3VyLmZsYWdzID0gZGVjX3BhcmFtcy0+ZmxhZ3M7Cj4gKwl2cDlfY3R4 LT5jdXIudGltZXN0YW1wID0gYnVmLT5iYXNlLnZiLnZiMl9idWYudGltZXN0YW1wOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBjb25maWdfb3V0cHV0KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsCj4g KwkJCSAgc3RydWN0IGhhbnRyb19kZWNvZGVkX2J1ZmZlciAqZHN0LAo+ICsJCQkgIGNvbnN0IHN0 cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zKQo+ICt7Cj4gKwlkbWFfYWRkcl90 IGx1bWFfYWRkciwgY2hyb21hX2FkZHIsIG12X2FkZHI7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0 ZShjdHgtPmRldiwgJmcyX291dF9kaXMsIDApOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRl diwgJmcyX291dHB1dF9mb3JtYXQsIDApOwo+ICsKPiArCWx1bWFfYWRkciA9IHZiMl9kbWFfY29u dGlnX3BsYW5lX2RtYV9hZGRyKCZkc3QtPmJhc2UudmIudmIyX2J1ZiwgMCk7Cj4gKwloYW50cm9f d3JpdGVfYWRkcihjdHgtPmRldiwgRzJfQUREUl9EU1QsIGx1bWFfYWRkcik7Cj4gKwo+ICsJY2hy b21hX2FkZHIgPSBsdW1hX2FkZHIgKyBjaHJvbWFfb2Zmc2V0KGN0eCwgZGVjX3BhcmFtcyk7Cj4g KwloYW50cm9fd3JpdGVfYWRkcihjdHgtPmRldiwgRzJfQUREUl9EU1RfQ0hSLCBjaHJvbWFfYWRk cik7Cj4gKwo+ICsJbXZfYWRkciA9IGx1bWFfYWRkciArIG12X29mZnNldChjdHgsIGRlY19wYXJh bXMpOwo+ICsJaGFudHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYsIEcyX0FERFJfRFNUX01WLCBtdl9h ZGRyKTsKPiArfQo+ICsKPiArc3RydWN0IGhhbnRyb192cDlfcmVmX3JlZyB7Cj4gKwljb25zdCBz dHJ1Y3QgaGFudHJvX3JlZyB3aWR0aDsKPiArCWNvbnN0IHN0cnVjdCBoYW50cm9fcmVnIGhlaWdo dDsKPiArCWNvbnN0IHN0cnVjdCBoYW50cm9fcmVnIGhvcl9zY2FsZTsKPiArCWNvbnN0IHN0cnVj dCBoYW50cm9fcmVnIHZlcl9zY2FsZTsKPiArCXUzMiB5X2Jhc2U7Cj4gKwl1MzIgY19iYXNlOwo+ ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgY29uZmlnX3JlZihzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4 LAo+ICsJCSAgICAgICBzdHJ1Y3QgaGFudHJvX2RlY29kZWRfYnVmZmVyICpkc3QsCj4gKwkJICAg ICAgIGNvbnN0IHN0cnVjdCBoYW50cm9fdnA5X3JlZl9yZWcgKnJlZl9yZWcsCj4gKwkJICAgICAg IGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zLAo+ICsJCSAgICAg ICB1NjQgcmVmX3RzKQo+ICt7Cj4gKwlzdHJ1Y3QgaGFudHJvX2RlY29kZWRfYnVmZmVyICpidWY7 Cj4gKwlkbWFfYWRkcl90IGx1bWFfYWRkciwgY2hyb21hX2FkZHI7Cj4gKwl1MzIgcmVmdywgcmVm aDsKPiArCj4gKwlidWYgPSBnZXRfcmVmX2J1ZihjdHgsICZkc3QtPmJhc2UudmIsIHJlZl90cyk7 Cj4gKwlyZWZ3ID0gYnVmLT52cDkud2lkdGg7Cj4gKwlyZWZoID0gYnVmLT52cDkuaGVpZ2h0Owo+ ICsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZyZWZfcmVnLT53aWR0aCwgcmVmdyk7 Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmcmVmX3JlZy0+aGVpZ2h0LCByZWZoKTsK PiArCj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmcmVmX3JlZy0+aG9yX3NjYWxlLCAo cmVmdyA8PCAxNCkgLyBkc3QtPnZwOS53aWR0aCk7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ ZGV2LCAmcmVmX3JlZy0+dmVyX3NjYWxlLCAocmVmaCA8PCAxNCkgLyBkc3QtPnZwOS5oZWlnaHQp Owo+ICsKPiArCWx1bWFfYWRkciA9IHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRyKCZidWYt PmJhc2UudmIudmIyX2J1ZiwgMCk7Cj4gKwloYW50cm9fd3JpdGVfYWRkcihjdHgtPmRldiwgcmVm X3JlZy0+eV9iYXNlLCBsdW1hX2FkZHIpOwo+ICsKPiArCWNocm9tYV9hZGRyID0gbHVtYV9hZGRy ICsgY2hyb21hX29mZnNldChjdHgsIGRlY19wYXJhbXMpOwo+ICsJaGFudHJvX3dyaXRlX2FkZHIo Y3R4LT5kZXYsIHJlZl9yZWctPmNfYmFzZSwgY2hyb21hX2FkZHIpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBjb25maWdfcmVmX3JlZ2lzdGVycyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+ICsJ CQkJIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zLAo+ICsJCQkJ IHN0cnVjdCBoYW50cm9fZGVjb2RlZF9idWZmZXIgKmRzdCwKPiArCQkJCSBzdHJ1Y3QgaGFudHJv X2RlY29kZWRfYnVmZmVyICptdl9yZWYpCj4gK3sKPiArCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGFu dHJvX3ZwOV9yZWZfcmVnIHJlZl9yZWdzW10gPSB7Cj4gKwkJewo+ICsJCQkvKiBMYXN0ICovCj4g KwkJCS53aWR0aCA9IHZwOV9scmVmX3dpZHRoLAo+ICsJCQkuaGVpZ2h0ID0gdnA5X2xyZWZfaGVp Z2h0LAo+ICsJCQkuaG9yX3NjYWxlID0gdnA5X2xyZWZfaG9yX3NjYWxlLAo+ICsJCQkudmVyX3Nj YWxlID0gdnA5X2xyZWZfdmVyX3NjYWxlLAo+ICsJCQkueV9iYXNlID0gRzJfUkVHX0FERFJfUkVG KDApLAo+ICsJCQkuY19iYXNlID0gRzJfUkVHX0NIUl9SRUYoMCksCj4gKwkJfSwgewo+ICsJCQkv KiBHb2xkZW4gKi8KPiArCQkJLndpZHRoID0gdnA5X2dyZWZfd2lkdGgsCj4gKwkJCS5oZWlnaHQg PSB2cDlfZ3JlZl9oZWlnaHQsCj4gKwkJCS5ob3Jfc2NhbGUgPSB2cDlfZ3JlZl9ob3Jfc2NhbGUs Cj4gKwkJCS52ZXJfc2NhbGUgPSB2cDlfZ3JlZl92ZXJfc2NhbGUsCj4gKwkJCS55X2Jhc2UgPSBH Ml9SRUdfQUREUl9SRUYoNCksCj4gKwkJCS5jX2Jhc2UgPSBHMl9SRUdfQ0hSX1JFRig0KSwKPiAr CQl9LCB7Cj4gKwkJCS8qIEFsdHJlZiAqLwo+ICsJCQkud2lkdGggPSB2cDlfYXJlZl93aWR0aCwK PiArCQkJLmhlaWdodCA9IHZwOV9hcmVmX2hlaWdodCwKPiArCQkJLmhvcl9zY2FsZSA9IHZwOV9h cmVmX2hvcl9zY2FsZSwKPiArCQkJLnZlcl9zY2FsZSA9IHZwOV9hcmVmX3Zlcl9zY2FsZSwKPiAr CQkJLnlfYmFzZSA9IEcyX1JFR19BRERSX1JFRig1KSwKPiArCQkJLmNfYmFzZSA9IEcyX1JFR19D SFJfUkVGKDUpLAo+ICsJCX0sCj4gKwl9Owo+ICsJZG1hX2FkZHJfdCBtdl9hZGRyOwo+ICsKPiAr CWNvbmZpZ19yZWYoY3R4LCBkc3QsICZyZWZfcmVnc1swXSwgZGVjX3BhcmFtcywgZGVjX3BhcmFt cy0+bGFzdF9mcmFtZV90cyk7Cj4gKwljb25maWdfcmVmKGN0eCwgZHN0LCAmcmVmX3JlZ3NbMV0s IGRlY19wYXJhbXMsIGRlY19wYXJhbXMtPmdvbGRlbl9mcmFtZV90cyk7Cj4gKwljb25maWdfcmVm KGN0eCwgZHN0LCAmcmVmX3JlZ3NbMl0sIGRlY19wYXJhbXMsIGRlY19wYXJhbXMtPmFsdF9mcmFt ZV90cyk7Cj4gKwo+ICsJbXZfYWRkciA9IHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRyKCZt dl9yZWYtPmJhc2UudmIudmIyX2J1ZiwgMCkgKwo+ICsJCSAgbXZfb2Zmc2V0KGN0eCwgZGVjX3Bh cmFtcyk7Cj4gKwloYW50cm9fd3JpdGVfYWRkcihjdHgtPmRldiwgRzJfUkVHX0RNVl9SRUYoMCks IG12X2FkZHIpOwo+ICsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfbGFzdF9z aWduX2JpYXMsCj4gKwkJCSBkZWNfcGFyYW1zLT5yZWZfZnJhbWVfc2lnbl9iaWFzICYgVjRMMl9W UDlfU0lHTl9CSUFTX0xBU1QgPyAxIDogMCk7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgt PmRldiwgJnZwOV9ncmVmX3NpZ25fYmlhcywKPiArCQkJIGRlY19wYXJhbXMtPnJlZl9mcmFtZV9z aWduX2JpYXMgJiBWNEwyX1ZQOV9TSUdOX0JJQVNfR09MREVOID8gMSA6IDApOwo+ICsKPiArCWhh bnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfYXJlZl9zaWduX2JpYXMsCj4gKwkJCSBkZWNf cGFyYW1zLT5yZWZfZnJhbWVfc2lnbl9iaWFzICYgVjRMMl9WUDlfU0lHTl9CSUFTX0FMVCA/IDEg OiAwKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcmVjb21wdXRlX3RpbGVfaW5mbyh1bnNpZ25l ZCBzaG9ydCAqdGlsZV9pbmZvLCB1bnNpZ25lZCBpbnQgdGlsZXMsIHVuc2lnbmVkIGludCBzYnMp Cj4gK3sKPiArCWludCBpOwo+ICsJdW5zaWduZWQgaW50IGFjY3VtdWxhdGVkID0gMDsKPiArCXVu c2lnbmVkIGludCBuZXh0X2FjY3VtdWxhdGVkOwo+ICsKPiArCWZvciAoaSA9IDE7IGkgPD0gdGls ZXM7ICsraSkgewo+ICsJCW5leHRfYWNjdW11bGF0ZWQgPSBpICogc2JzIC8gdGlsZXM7Cj4gKwkJ KnRpbGVfaW5mbysrID0gbmV4dF9hY2N1bXVsYXRlZCAtIGFjY3VtdWxhdGVkOwo+ICsJCWFjY3Vt dWxhdGVkID0gbmV4dF9hY2N1bXVsYXRlZDsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQK PiArcmVjb21wdXRlX3RpbGVfcmNfaW5mbyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+ICsJCSAg ICAgICB1bnNpZ25lZCBpbnQgdGlsZV9yLCB1bnNpZ25lZCBpbnQgdGlsZV9jLAo+ICsJCSAgICAg ICB1bnNpZ25lZCBpbnQgc2JzX3IsIHVuc2lnbmVkIGludCBzYnNfYykKPiArewo+ICsJc3RydWN0 IGhhbnRyb192cDlfZGVjX2h3X2N0eCAqdnA5X2N0eCA9ICZjdHgtPnZwOV9kZWM7Cj4gKwo+ICsJ cmVjb21wdXRlX3RpbGVfaW5mbyh2cDlfY3R4LT50aWxlX3JfaW5mbywgdGlsZV9yLCBzYnNfcik7 Cj4gKwlyZWNvbXB1dGVfdGlsZV9pbmZvKHZwOV9jdHgtPnRpbGVfY19pbmZvLCB0aWxlX2MsIHNi c19jKTsKPiArCj4gKwl2cDlfY3R4LT5sYXN0X3RpbGVfciA9IHRpbGVfcjsKPiArCXZwOV9jdHgt Pmxhc3RfdGlsZV9jID0gdGlsZV9jOwo+ICsJdnA5X2N0eC0+bGFzdF9zYnNfciA9IHNic19yOwo+ ICsJdnA5X2N0eC0+bGFzdF9zYnNfYyA9IHNic19jOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5l IHVuc2lnbmVkIGludCBmaXJzdF90aWxlX3Jvdyh1bnNpZ25lZCBpbnQgdGlsZV9yLCB1bnNpZ25l ZCBpbnQgc2JzX3IpCj4gK3sKPiArCWlmICh0aWxlX3IgPT0gc2JzX3IgKyAxKQo+ICsJCXJldHVy biAxOwo+ICsKPiArCWlmICh0aWxlX3IgPT0gc2JzX3IgKyAyKQo+ICsJCXJldHVybiAyOwo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtmaWxsX3RpbGVfaW5mbyhz dHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+ICsJICAgICAgIHVuc2lnbmVkIGludCB0aWxlX3IsIHVu c2lnbmVkIGludCB0aWxlX2MsCj4gKwkgICAgICAgdW5zaWduZWQgaW50IHNic19yLCB1bnNpZ25l ZCBpbnQgc2JzX2MsCj4gKwkgICAgICAgdW5zaWduZWQgc2hvcnQgKnRpbGVfbWVtKQo+ICt7Cj4g KwlzdHJ1Y3QgaGFudHJvX3ZwOV9kZWNfaHdfY3R4ICp2cDlfY3R4ID0gJmN0eC0+dnA5X2RlYzsK PiArCXVuc2lnbmVkIGludCBpLCBqOwo+ICsJYm9vbCBmaXJzdCA9IHRydWU7Cj4gKwo+ICsJZm9y IChpID0gZmlyc3RfdGlsZV9yb3codGlsZV9yLCBzYnNfcik7IGkgPCB0aWxlX3I7ICsraSkgewo+ ICsJCXVuc2lnbmVkIHNob3J0IHJfaW5mbyA9IHZwOV9jdHgtPnRpbGVfcl9pbmZvW2ldOwo+ICsK PiArCQlpZiAoZmlyc3QpIHsKPiArCQkJaWYgKGkgPiAwKQo+ICsJCQkJcl9pbmZvICs9IHZwOV9j dHgtPnRpbGVfcl9pbmZvWzBdOwo+ICsJCQlpZiAoaSA9PSAyKQo+ICsJCQkJcl9pbmZvICs9IHZw OV9jdHgtPnRpbGVfcl9pbmZvWzFdOwo+ICsJCQlmaXJzdCA9IGZhbHNlOwo+ICsJCX0KPiArCQlm b3IgKGogPSAwOyBqIDwgdGlsZV9jOyArK2opIHsKPiArCQkJKnRpbGVfbWVtKysgPSB2cDlfY3R4 LT50aWxlX2NfaW5mb1tqXTsKPiArCQkJKnRpbGVfbWVtKysgPSByX2luZm87Cj4gKwkJfQo+ICsJ fQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtjb25maWdfdGlsZXMoc3RydWN0IGhhbnRyb19j dHggKmN0eCwKPiArCSAgICAgY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDlfZnJhbWUgKmRlY19w YXJhbXMsCj4gKwkgICAgIHN0cnVjdCBoYW50cm9fZGVjb2RlZF9idWZmZXIgKmRzdCkKPiArewo+ ICsJc3RydWN0IGhhbnRyb192cDlfZGVjX2h3X2N0eCAqdnA5X2N0eCA9ICZjdHgtPnZwOV9kZWM7 Cj4gKwlzdHJ1Y3QgaGFudHJvX2F1eF9idWYgKm1pc2MgPSAmdnA5X2N0eC0+bWlzYzsKPiArCXN0 cnVjdCBoYW50cm9fYXV4X2J1ZiAqdGlsZV9lZGdlID0gJnZwOV9jdHgtPnRpbGVfZWRnZTsKPiAr CWRtYV9hZGRyX3QgYWRkcjsKPiArCXVuc2lnbmVkIHNob3J0ICp0aWxlX21lbTsKPiArCj4gKwlh ZGRyID0gbWlzYy0+ZG1hICsgdnA5X2N0eC0+dGlsZV9pbmZvX29mZnNldDsKPiArCWhhbnRyb193 cml0ZV9hZGRyKGN0eC0+ZGV2LCBHMl9BRERSX1RJTEVfU0laRSwgYWRkcik7Cj4gKwo+ICsJdGls ZV9tZW0gPSBtaXNjLT5jcHUgKyB2cDlfY3R4LT50aWxlX2luZm9fb2Zmc2V0Owo+ICsJaWYgKGRl Y19wYXJhbXMtPnRpbGVfY29sc19sb2cyIHx8IGRlY19wYXJhbXMtPnRpbGVfcm93c19sb2cyKSB7 Cj4gKwkJdW5zaWduZWQgaW50IHRpbGVfciA9ICgxIDw8IGRlY19wYXJhbXMtPnRpbGVfcm93c19s b2cyKTsKPiArCQl1bnNpZ25lZCBpbnQgdGlsZV9jID0gKDEgPDwgZGVjX3BhcmFtcy0+dGlsZV9j b2xzX2xvZzIpOwo+ICsJCXVuc2lnbmVkIGludCBzYnNfciA9IGhhbnRyb192cDlfbnVtX3Nicyhk c3QtPnZwOS5oZWlnaHQpOwo+ICsJCXVuc2lnbmVkIGludCBzYnNfYyA9IGhhbnRyb192cDlfbnVt X3Nicyhkc3QtPnZwOS53aWR0aCk7Cj4gKwo+ICsJCWlmICh0aWxlX3IgIT0gdnA5X2N0eC0+bGFz dF90aWxlX3IgfHwgdGlsZV9jICE9IHZwOV9jdHgtPmxhc3RfdGlsZV9jIHx8Cj4gKwkJICAgIHNi c19yICE9IHZwOV9jdHgtPmxhc3Rfc2JzX3IgfHwgc2JzX2MgIT0gdnA5X2N0eC0+bGFzdF9zYnNf YykKPiArCQkJcmVjb21wdXRlX3RpbGVfcmNfaW5mbyhjdHgsIHRpbGVfciwgdGlsZV9jLCBzYnNf ciwgc2JzX2MpOwo+ICsKPiArCQlmaWxsX3RpbGVfaW5mbyhjdHgsIHRpbGVfciwgdGlsZV9jLCBz YnNfciwgc2JzX2MsIHRpbGVfbWVtKTsKPiArCj4gKwkJaGFudHJvX3JlZ193cml0ZShjdHgtPmRl diwgJmcyX3RpbGVfZSwgMSk7Cj4gKwkJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX251 bV90aWxlX2NvbHMsIHRpbGVfYyk7Cj4gKwkJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcy X251bV90aWxlX3Jvd3MsIHRpbGVfcik7Cj4gKwo+ICsJCWFkZHIgPSB0aWxlX2VkZ2UtPmRtYTsK PiArCQloYW50cm9fd3JpdGVfYWRkcihjdHgtPmRldiwgRzJfVElMRV9GSUxURVIsIGFkZHIpOwo+ ICsKPiArCQlhZGRyID0gdGlsZV9lZGdlLT5kbWEgKyB2cDlfY3R4LT5ic2RfY3RybF9vZmZzZXQ7 Cj4gKwkJaGFudHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYsIEcyX1RJTEVfQlNELCBhZGRyKTsKPiAr CX0gZWxzZSB7Cj4gKwkJdGlsZV9tZW1bMF0gPSBoYW50cm9fdnA5X251bV9zYnMoZHN0LT52cDku d2lkdGgpOwo+ICsJCXRpbGVfbWVtWzFdID0gaGFudHJvX3ZwOV9udW1fc2JzKGRzdC0+dnA5Lmhl aWdodCk7Cj4gKwo+ICsJCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl90aWxlX2UsIDAp Owo+ICsJCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9udW1fdGlsZV9jb2xzLCAxKTsK PiArCQloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfbnVtX3RpbGVfcm93cywgMSk7Cj4g Kwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3VwZGF0ZV9mZWF0X2FuZF9mbGFnKHN0cnVj dCBoYW50cm9fdnA5X2RlY19od19jdHggKnZwOV9jdHgsCj4gKwkJICAgICBjb25zdCBzdHJ1Y3Qg djRsMl92cDlfc2VnbWVudGF0aW9uICpzZWcsCj4gKwkJICAgICB1bnNpZ25lZCBpbnQgZmVhdHVy ZSwKPiArCQkgICAgIHVuc2lnbmVkIGludCBzZWdpZCkKPiArewo+ICsJdTggbWFzayA9IFY0TDJf VlA5X1NFR01FTlRfRkVBVFVSRV9FTkFCTEVEKGZlYXR1cmUpOwo+ICsKPiArCXZwOV9jdHgtPmZl YXR1cmVfZGF0YVtzZWdpZF1bZmVhdHVyZV0gPSBzZWctPmZlYXR1cmVfZGF0YVtzZWdpZF1bZmVh dHVyZV07Cj4gKwl2cDlfY3R4LT5mZWF0dXJlX2VuYWJsZWRbc2VnaWRdICY9IH5tYXNrOwo+ICsJ dnA5X2N0eC0+ZmVhdHVyZV9lbmFibGVkW3NlZ2lkXSB8PSAoc2VnLT5mZWF0dXJlX2VuYWJsZWRb c2VnaWRdICYgbWFzayk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgczE2IGNsaXAzKHMxNiB4 LCBzMTYgeSwgczE2IHopCj4gK3sKPiArCXJldHVybiAoeiA8IHgpID8geCA6ICh6ID4geSkgPyB5 IDogejsKPiArfQo+ICsKPiArc3RhdGljIHMxNiBmZWF0X3ZhbF9jbGlwMyhzMTYgZmVhdF92YWws IHMxNiBmZWF0dXJlX2RhdGEsIGJvb2wgYWJzb2x1dGUsIHU4IGNsaXApCj4gK3sKPiArCWlmIChh YnNvbHV0ZSkKPiArCQlyZXR1cm4gZmVhdHVyZV9kYXRhOwo+ICsKPiArCXJldHVybiBjbGlwMygw LCAyNTUsIGZlYXRfdmFsICsgZmVhdHVyZV9kYXRhKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg Y29uZmlnX3NlZ21lbnQoc3RydWN0IGhhbnRyb19jdHggKmN0eCwgY29uc3Qgc3RydWN0IHY0bDJf Y3RybF92cDlfZnJhbWUgKmRlY19wYXJhbXMpCj4gK3sKPiArCXN0cnVjdCBoYW50cm9fdnA5X2Rl Y19od19jdHggKnZwOV9jdHggPSAmY3R4LT52cDlfZGVjOwo+ICsJY29uc3Qgc3RydWN0IHY0bDJf dnA5X3NlZ21lbnRhdGlvbiAqc2VnOwo+ICsJczE2IGZlYXRfdmFsOwo+ICsJdW5zaWduZWQgY2hh ciBmZWF0X2lkOwo+ICsJdW5zaWduZWQgaW50IHNlZ2lkOwo+ICsJYm9vbCBzZWdtZW50X2VuYWJs ZWQsIGFic29sdXRlLCB1cGRhdGVfZGF0YTsKPiArCj4gKwlzdGF0aWMgY29uc3Qgc3RydWN0IGhh bnRyb19yZWcgc2VnX3JlZ3NbOF1bVjRMMl9WUDlfU0VHX0xWTF9NQVhdID0gewo+ICsJCXsgdnA5 X3F1YW50X3NlZzAsIHZwOV9maWx0X2xldmVsX3NlZzAsIHZwOV9yZWZwaWNfc2VnMCwgdnA5X3Nr aXBfc2VnMCB9LAo+ICsJCXsgdnA5X3F1YW50X3NlZzEsIHZwOV9maWx0X2xldmVsX3NlZzEsIHZw OV9yZWZwaWNfc2VnMSwgdnA5X3NraXBfc2VnMSB9LAo+ICsJCXsgdnA5X3F1YW50X3NlZzIsIHZw OV9maWx0X2xldmVsX3NlZzIsIHZwOV9yZWZwaWNfc2VnMiwgdnA5X3NraXBfc2VnMiB9LAo+ICsJ CXsgdnA5X3F1YW50X3NlZzMsIHZwOV9maWx0X2xldmVsX3NlZzMsIHZwOV9yZWZwaWNfc2VnMywg dnA5X3NraXBfc2VnMyB9LAo+ICsJCXsgdnA5X3F1YW50X3NlZzQsIHZwOV9maWx0X2xldmVsX3Nl ZzQsIHZwOV9yZWZwaWNfc2VnNCwgdnA5X3NraXBfc2VnNCB9LAo+ICsJCXsgdnA5X3F1YW50X3Nl ZzUsIHZwOV9maWx0X2xldmVsX3NlZzUsIHZwOV9yZWZwaWNfc2VnNSwgdnA5X3NraXBfc2VnNSB9 LAo+ICsJCXsgdnA5X3F1YW50X3NlZzYsIHZwOV9maWx0X2xldmVsX3NlZzYsIHZwOV9yZWZwaWNf c2VnNiwgdnA5X3NraXBfc2VnNiB9LAo+ICsJCXsgdnA5X3F1YW50X3NlZzcsIHZwOV9maWx0X2xl dmVsX3NlZzcsIHZwOV9yZWZwaWNfc2VnNywgdnA5X3NraXBfc2VnNyB9LAo+ICsJfTsKPiArCj4g KwlzZWdtZW50X2VuYWJsZWQgPSAhIShkZWNfcGFyYW1zLT5zZWcuZmxhZ3MgJiBWNEwyX1ZQOV9T RUdNRU5UQVRJT05fRkxBR19FTkFCTEVEKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYs ICZ2cDlfc2VnbWVudF9lLCBzZWdtZW50X2VuYWJsZWQpOwo+ICsJaGFudHJvX3JlZ193cml0ZShj dHgtPmRldiwgJnZwOV9zZWdtZW50X3VwZF9lLAo+ICsJCQkgISEoZGVjX3BhcmFtcy0+c2VnLmZs YWdzICYgVjRMMl9WUDlfU0VHTUVOVEFUSU9OX0ZMQUdfVVBEQVRFX01BUCkpOwo+ICsJaGFudHJv X3JlZ193cml0ZShjdHgtPmRldiwgJnZwOV9zZWdtZW50X3RlbXBfdXBkX2UsCj4gKwkJCSAhIShk ZWNfcGFyYW1zLT5zZWcuZmxhZ3MgJiBWNEwyX1ZQOV9TRUdNRU5UQVRJT05fRkxBR19URU1QT1JB TF9VUERBVEUpKTsKPiArCj4gKwlzZWcgPSAmZGVjX3BhcmFtcy0+c2VnOwo+ICsJYWJzb2x1dGUg PSAhIShzZWctPmZsYWdzICYgVjRMMl9WUDlfU0VHTUVOVEFUSU9OX0ZMQUdfQUJTX09SX0RFTFRB X1VQREFURSk7Cj4gKwl1cGRhdGVfZGF0YSA9ICEhKHNlZy0+ZmxhZ3MgJiBWNEwyX1ZQOV9TRUdN RU5UQVRJT05fRkxBR19VUERBVEVfREFUQSk7Cj4gKwo+ICsJZm9yIChzZWdpZCA9IDA7IHNlZ2lk IDwgODsgKytzZWdpZCkgewo+ICsJCS8qIFF1YW50aXplciBzZWdtZW50IGZlYXR1cmUgKi8KPiAr CQlmZWF0X2lkID0gVjRMMl9WUDlfU0VHX0xWTF9BTFRfUTsKPiArCQlmZWF0X3ZhbCA9IGRlY19w YXJhbXMtPnF1YW50LmJhc2VfcV9pZHg7Cj4gKwkJaWYgKHNlZ21lbnRfZW5hYmxlZCkgewo+ICsJ CQlpZiAodXBkYXRlX2RhdGEpCj4gKwkJCQl1cGRhdGVfZmVhdF9hbmRfZmxhZyh2cDlfY3R4LCBz ZWcsIGZlYXRfaWQsIHNlZ2lkKTsKPiArCQkJaWYgKHY0bDJfdnA5X3NlZ19mZWF0X2VuYWJsZWQo dnA5X2N0eC0+ZmVhdHVyZV9lbmFibGVkLCBmZWF0X2lkLCBzZWdpZCkpCj4gKwkJCQlmZWF0X3Zh bCA9IGZlYXRfdmFsX2NsaXAzKGZlYXRfdmFsLAo+ICsJCQkJCQkJICB2cDlfY3R4LT5mZWF0dXJl X2RhdGFbc2VnaWRdW2ZlYXRfaWRdLAo+ICsJCQkJCQkJICBhYnNvbHV0ZSwgMjU1KTsKPiArCQl9 Cj4gKwkJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnNlZ19yZWdzW3NlZ2lkXVtmZWF0X2lk XSwgZmVhdF92YWwpOwo+ICsKPiArCQkvKiBMb29wIGZpbHRlciBzZWdtZW50IGZlYXR1cmUgKi8K PiArCQlmZWF0X2lkID0gVjRMMl9WUDlfU0VHX0xWTF9BTFRfTDsKPiArCQlmZWF0X3ZhbCA9IGRl Y19wYXJhbXMtPmxmLmxldmVsOwo+ICsJCWlmIChzZWdtZW50X2VuYWJsZWQpIHsKPiArCQkJaWYg KHVwZGF0ZV9kYXRhKQo+ICsJCQkJdXBkYXRlX2ZlYXRfYW5kX2ZsYWcodnA5X2N0eCwgc2VnLCBm ZWF0X2lkLCBzZWdpZCk7Cj4gKwkJCWlmICh2NGwyX3ZwOV9zZWdfZmVhdF9lbmFibGVkKHZwOV9j dHgtPmZlYXR1cmVfZW5hYmxlZCwgZmVhdF9pZCwgc2VnaWQpKQo+ICsJCQkJZmVhdF92YWwgPSBm ZWF0X3ZhbF9jbGlwMyhmZWF0X3ZhbCwKPiArCQkJCQkJCSAgdnA5X2N0eC0+ZmVhdHVyZV9kYXRh W3NlZ2lkXVtmZWF0X2lkXSwKPiArCQkJCQkJCSAgYWJzb2x1dGUsIDYzKTsKPiArCQl9Cj4gKwkJ aGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnNlZ19yZWdzW3NlZ2lkXVtmZWF0X2lkXSwgZmVh dF92YWwpOwo+ICsKPiArCQkvKiBSZWZlcmVuY2UgZnJhbWUgc2VnbWVudCBmZWF0dXJlICovCj4g KwkJZmVhdF9pZCA9IFY0TDJfVlA5X1NFR19MVkxfUkVGX0ZSQU1FOwo+ICsJCWZlYXRfdmFsID0g MDsKPiArCQlpZiAoc2VnbWVudF9lbmFibGVkKSB7Cj4gKwkJCWlmICh1cGRhdGVfZGF0YSkKPiAr CQkJCXVwZGF0ZV9mZWF0X2FuZF9mbGFnKHZwOV9jdHgsIHNlZywgZmVhdF9pZCwgc2VnaWQpOwo+ ICsJCQlpZiAoIShkZWNfcGFyYW1zLT5mbGFncyAmIFY0TDJfVlA5X0ZSQU1FX0ZMQUdfS0VZX0ZS QU1FKSAmJgo+ICsJCQkgICAgdjRsMl92cDlfc2VnX2ZlYXRfZW5hYmxlZCh2cDlfY3R4LT5mZWF0 dXJlX2VuYWJsZWQsIGZlYXRfaWQsIHNlZ2lkKSkKPiArCQkJCWZlYXRfdmFsID0gdnA5X2N0eC0+ ZmVhdHVyZV9kYXRhW3NlZ2lkXVtmZWF0X2lkXSArIDE7Cj4gKwkJfQo+ICsJCWhhbnRyb19yZWdf d3JpdGUoY3R4LT5kZXYsICZzZWdfcmVnc1tzZWdpZF1bZmVhdF9pZF0sIGZlYXRfdmFsKTsKPiAr Cj4gKwkJLyogU2tpcCBzZWdtZW50IGZlYXR1cmUgKi8KPiArCQlmZWF0X2lkID0gVjRMMl9WUDlf U0VHX0xWTF9TS0lQOwo+ICsJCWZlYXRfdmFsID0gMDsKPiArCQlpZiAoc2VnbWVudF9lbmFibGVk KSB7Cj4gKwkJCWlmICh1cGRhdGVfZGF0YSkKPiArCQkJCXVwZGF0ZV9mZWF0X2FuZF9mbGFnKHZw OV9jdHgsIHNlZywgZmVhdF9pZCwgc2VnaWQpOwo+ICsJCQlmZWF0X3ZhbCA9IHY0bDJfdnA5X3Nl Z19mZWF0X2VuYWJsZWQodnA5X2N0eC0+ZmVhdHVyZV9lbmFibGVkLAo+ICsJCQkJCQkJICAgICBm ZWF0X2lkLCBzZWdpZCkgPyAxIDogMDsKPiArCQl9Cj4gKwkJaGFudHJvX3JlZ193cml0ZShjdHgt PmRldiwgJnNlZ19yZWdzW3NlZ2lkXVtmZWF0X2lkXSwgZmVhdF92YWwpOwo+ICsJfQo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBjb25maWdfbG9vcF9maWx0ZXIoc3RydWN0IGhhbnRyb19jdHggKmN0 eCwgY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDlfZnJhbWUgKmRlY19wYXJhbXMpCj4gK3sKPiAr CWJvb2wgZCA9IGRlY19wYXJhbXMtPmxmLmZsYWdzICYgVjRMMl9WUDlfTE9PUF9GSUxURVJfRkxB R19ERUxUQV9FTkFCTEVEOwo+ICsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlf ZmlsdF9sZXZlbCwgZGVjX3BhcmFtcy0+bGYubGV2ZWwpOwo+ICsJaGFudHJvX3JlZ193cml0ZShj dHgtPmRldiwgJmcyX291dF9maWx0ZXJpbmdfZGlzLCBkZWNfcGFyYW1zLT5sZi5sZXZlbCA9PSAw KTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfZmlsdF9zaGFycG5lc3MsIGRl Y19wYXJhbXMtPmxmLnNoYXJwbmVzcyk7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRl diwgJnZwOV9maWx0X3JlZl9hZGpfMCwgZCA/IGRlY19wYXJhbXMtPmxmLnJlZl9kZWx0YXNbMF0g OiAwKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfZmlsdF9yZWZfYWRqXzEs IGQgPyBkZWNfcGFyYW1zLT5sZi5yZWZfZGVsdGFzWzFdIDogMCk7Cj4gKwloYW50cm9fcmVnX3dy aXRlKGN0eC0+ZGV2LCAmdnA5X2ZpbHRfcmVmX2Fkal8yLCBkID8gZGVjX3BhcmFtcy0+bGYucmVm X2RlbHRhc1syXSA6IDApOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnZwOV9maWx0 X3JlZl9hZGpfMywgZCA/IGRlY19wYXJhbXMtPmxmLnJlZl9kZWx0YXNbM10gOiAwKTsKPiArCWhh bnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfZmlsdF9tYl9hZGpfMCwgZCA/IGRlY19wYXJh bXMtPmxmLm1vZGVfZGVsdGFzWzBdIDogMCk7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2 LCAmdnA5X2ZpbHRfbWJfYWRqXzEsIGQgPyBkZWNfcGFyYW1zLT5sZi5tb2RlX2RlbHRhc1sxXSA6 IDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb25maWdfcGljdHVyZV9kaW1lbnNpb25zKHN0 cnVjdCBoYW50cm9fY3R4ICpjdHgsIHN0cnVjdCBoYW50cm9fZGVjb2RlZF9idWZmZXIgKmRzdCkK PiArewo+ICsJdTMyIHBpY193XzR4NCwgcGljX2hfNHg0Owo+ICsKPiArCWhhbnRyb19yZWdfd3Jp dGUoY3R4LT5kZXYsICZnMl9waWNfd2lkdGhfaW5fY2JzLCAoZHN0LT52cDkud2lkdGggKyA3KSAv IDgpOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX3BpY19oZWlnaHRfaW5fY2Jz LCAoZHN0LT52cDkuaGVpZ2h0ICsgNykgLyA4KTsKPiArCXBpY193XzR4NCA9IHJvdW5kdXAoZHN0 LT52cDkud2lkdGgsIDgpID4+IDI7Cj4gKwlwaWNfaF80eDQgPSByb3VuZHVwKGRzdC0+dnA5Lmhl aWdodCwgOCkgPj4gMjsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9waWNfd2lk dGhfNHg0LCBwaWNfd180eDQpOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX3Bp Y19oZWlnaHRfNHg0LCBwaWNfaF80eDQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtjb25m aWdfYml0X2RlcHRoKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCB2NGwyX2N0 cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zKQo+ICt7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ ZGV2LCAmZzJfYml0X2RlcHRoX3lfbWludXM4LCBkZWNfcGFyYW1zLT5iaXRfZGVwdGggLSA4KTsK PiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9iaXRfZGVwdGhfY19taW51czgsIGRl Y19wYXJhbXMtPmJpdF9kZXB0aCAtIDgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGJvb2wg aXNfbG9zc2xlc3MoY29uc3Qgc3RydWN0IHY0bDJfdnA5X3F1YW50aXphdGlvbiAqcXVhbnQpCj4g K3sKPiArCXJldHVybiBxdWFudC0+YmFzZV9xX2lkeCA9PSAwICYmIHF1YW50LT5kZWx0YV9xX3V2 X2FjID09IDAgJiYKPiArCSAgICAgICBxdWFudC0+ZGVsdGFfcV91dl9kYyA9PSAwICYmIHF1YW50 LT5kZWx0YV9xX3lfZGMgPT0gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArY29uZmlnX3F1 YW50KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2Zy YW1lICpkZWNfcGFyYW1zKQo+ICt7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmdnA5 X3FwX2RlbHRhX3lfZGMsIGRlY19wYXJhbXMtPnF1YW50LmRlbHRhX3FfeV9kYyk7Cj4gKwloYW50 cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmdnA5X3FwX2RlbHRhX2NoX2RjLCBkZWNfcGFyYW1zLT5x dWFudC5kZWx0YV9xX3V2X2RjKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlf cXBfZGVsdGFfY2hfYWMsIGRlY19wYXJhbXMtPnF1YW50LmRlbHRhX3FfdXZfYWMpOwo+ICsJaGFu dHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnZwOV9sb3NzbGVzc19lLCBpc19sb3NzbGVzcygmZGVj X3BhcmFtcy0+cXVhbnQpKTsKPiArfQo+ICsKPiArc3RhdGljIHUzMgo+ICtoYW50cm9faW50ZXJw X2ZpbHRlcl9mcm9tX3Y0bDIodW5zaWduZWQgaW50IGludGVycG9sYXRpb25fZmlsdGVyKQo+ICt7 Cj4gKwlzd2l0Y2ggKGludGVycG9sYXRpb25fZmlsdGVyKSB7Cj4gKwljYXNlIFY0TDJfVlA5X0lO VEVSUF9GSUxURVJfRUlHSFRUQVA6Cj4gKwkJcmV0dXJuIDB4MTsKPiArCWNhc2UgVjRMMl9WUDlf SU5URVJQX0ZJTFRFUl9FSUdIVFRBUF9TTU9PVEg6Cj4gKwkJcmV0dXJuIDA7Cj4gKwljYXNlIFY0 TDJfVlA5X0lOVEVSUF9GSUxURVJfRUlHSFRUQVBfU0hBUlA6Cj4gKwkJcmV0dXJuIDB4MjsKPiAr CWNhc2UgVjRMMl9WUDlfSU5URVJQX0ZJTFRFUl9CSUxJTkVBUjoKPiArCQlyZXR1cm4gMHgzOwo+ ICsJY2FzZSBWNEwyX1ZQOV9JTlRFUlBfRklMVEVSX1NXSVRDSEFCTEU6Cj4gKwkJcmV0dXJuIDB4 NDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArY29u ZmlnX290aGVycyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJs X3ZwOV9mcmFtZSAqZGVjX3BhcmFtcywKPiArCSAgICAgIGJvb2wgaW50cmFfb25seSwgYm9vbCBy ZXNvbHV0aW9uX2NoYW5nZSkKPiArewo+ICsJc3RydWN0IGhhbnRyb192cDlfZGVjX2h3X2N0eCAq dnA5X2N0eCA9ICZjdHgtPnZwOV9kZWM7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRl diwgJmcyX2lkcl9waWNfZSwgaW50cmFfb25seSk7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShj dHgtPmRldiwgJnZwOV90cmFuc2Zvcm1fbW9kZSwgdnA5X2N0eC0+Y3VyLnR4X21vZGUpOwo+ICsK PiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfbWNvbXBfZmlsdF90eXBlLCBpbnRy YV9vbmx5ID8KPiArCQkwIDogaGFudHJvX2ludGVycF9maWx0ZXJfZnJvbV92NGwyKGRlY19wYXJh bXMtPmludGVycG9sYXRpb25fZmlsdGVyKSk7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgt PmRldiwgJnZwOV9oaWdoX3ByZWNfbXZfZSwKPiArCQkJICEhKGRlY19wYXJhbXMtPmZsYWdzICYg VjRMMl9WUDlfRlJBTUVfRkxBR19BTExPV19ISUdIX1BSRUNfTVYpKTsKPiArCj4gKwloYW50cm9f cmVnX3dyaXRlKGN0eC0+ZGV2LCAmdnA5X2NvbXBfcHJlZF9tb2RlLCBkZWNfcGFyYW1zLT5yZWZl cmVuY2VfbW9kZSk7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX3RlbXBv cl9tdnBfZSwKPiArCQkJICEoZGVjX3BhcmFtcy0+ZmxhZ3MgJiBWNEwyX1ZQOV9GUkFNRV9GTEFH X0VSUk9SX1JFU0lMSUVOVCkgJiYKPiArCQkJICEoZGVjX3BhcmFtcy0+ZmxhZ3MgJiBWNEwyX1ZQ OV9GUkFNRV9GTEFHX0tFWV9GUkFNRSkgJiYKPiArCQkJICEodnA5X2N0eC0+bGFzdC5mbGFncyAm IFY0TDJfVlA5X0ZSQU1FX0ZMQUdfS0VZX0ZSQU1FKSAmJgo+ICsJCQkgIShkZWNfcGFyYW1zLT5m bGFncyAmIFY0TDJfVlA5X0ZSQU1FX0ZMQUdfSU5UUkFfT05MWSkgJiYKPiArCQkJICFyZXNvbHV0 aW9uX2NoYW5nZSAmJgo+ICsJCQkgdnA5X2N0eC0+bGFzdC5mbGFncyAmIFY0TDJfVlA5X0ZSQU1F X0ZMQUdfU0hPV19GUkFNRQo+ICsJKTsKPiArCj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2 LCAmZzJfd3JpdGVfbXZzX2UsCj4gKwkJCSAhKGRlY19wYXJhbXMtPmZsYWdzICYgVjRMMl9WUDlf RlJBTUVfRkxBR19LRVlfRlJBTUUpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArY29uZmln X2NvbXBvdW5kX3JlZmVyZW5jZShzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+ICsJCQkgIGNvbnN0 IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zKQo+ICt7Cj4gKwl1MzIgY29t cF9maXhlZF9yZWYsIGNvbXBfdmFyX3JlZlsyXTsKPiArCWJvb2wgbGFzdF9yZWZfZnJhbWVfc2ln bl9iaWFzOwo+ICsJYm9vbCBnb2xkZW5fcmVmX2ZyYW1lX3NpZ25fYmlhczsKPiArCWJvb2wgYWx0 X3JlZl9mcmFtZV9zaWduX2JpYXM7Cj4gKwlib29sIGNvbXBfcmVmX2FsbG93ZWQgPSAwOwo+ICsK PiArCWNvbXBfZml4ZWRfcmVmID0gMDsKPiArCWNvbXBfdmFyX3JlZlswXSA9IDA7Cj4gKwljb21w X3Zhcl9yZWZbMV0gPSAwOwo+ICsKPiArCWxhc3RfcmVmX2ZyYW1lX3NpZ25fYmlhcyA9IGRlY19w YXJhbXMtPnJlZl9mcmFtZV9zaWduX2JpYXMgJiBWNEwyX1ZQOV9TSUdOX0JJQVNfTEFTVDsKPiAr CWdvbGRlbl9yZWZfZnJhbWVfc2lnbl9iaWFzID0gZGVjX3BhcmFtcy0+cmVmX2ZyYW1lX3NpZ25f YmlhcyAmIFY0TDJfVlA5X1NJR05fQklBU19HT0xERU47Cj4gKwlhbHRfcmVmX2ZyYW1lX3NpZ25f YmlhcyA9IGRlY19wYXJhbXMtPnJlZl9mcmFtZV9zaWduX2JpYXMgJiBWNEwyX1ZQOV9TSUdOX0JJ QVNfQUxUOwo+ICsKPiArCS8qIDYuMy4xMiBGcmFtZSByZWZlcmVuY2UgbW9kZSBzeW50YXggKi8K PiArCWNvbXBfcmVmX2FsbG93ZWQgfD0gZ29sZGVuX3JlZl9mcmFtZV9zaWduX2JpYXMgIT0gbGFz dF9yZWZfZnJhbWVfc2lnbl9iaWFzOwo+ICsJY29tcF9yZWZfYWxsb3dlZCB8PSBhbHRfcmVmX2Zy YW1lX3NpZ25fYmlhcyAhPSBsYXN0X3JlZl9mcmFtZV9zaWduX2JpYXM7Cj4gKwo+ICsJaWYgKGNv bXBfcmVmX2FsbG93ZWQpIHsKPiArCQlpZiAobGFzdF9yZWZfZnJhbWVfc2lnbl9iaWFzID09Cj4g KwkJICAgIGdvbGRlbl9yZWZfZnJhbWVfc2lnbl9iaWFzKSB7Cj4gKwkJCWNvbXBfZml4ZWRfcmVm ID0gQUxUUkVGX0ZSQU1FOwo+ICsJCQljb21wX3Zhcl9yZWZbMF0gPSBMQVNUX0ZSQU1FOwo+ICsJ CQljb21wX3Zhcl9yZWZbMV0gPSBHT0xERU5fRlJBTUU7Cj4gKwkJfSBlbHNlIGlmIChsYXN0X3Jl Zl9mcmFtZV9zaWduX2JpYXMgPT0KPiArCQkJICAgYWx0X3JlZl9mcmFtZV9zaWduX2JpYXMpIHsK PiArCQkJY29tcF9maXhlZF9yZWYgPSBHT0xERU5fRlJBTUU7Cj4gKwkJCWNvbXBfdmFyX3JlZlsw XSA9IExBU1RfRlJBTUU7Cj4gKwkJCWNvbXBfdmFyX3JlZlsxXSA9IEFMVFJFRl9GUkFNRTsKPiAr CQl9IGVsc2Ugewo+ICsJCQljb21wX2ZpeGVkX3JlZiA9IExBU1RfRlJBTUU7Cj4gKwkJCWNvbXBf dmFyX3JlZlswXSA9IEdPTERFTl9GUkFNRTsKPiArCQkJY29tcF92YXJfcmVmWzFdID0gQUxUUkVG X0ZSQU1FOwo+ICsJCX0KPiArCX0KPiArCj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAm dnA5X2NvbXBfcHJlZF9maXhlZF9yZWYsIGNvbXBfZml4ZWRfcmVmKTsKPiArCWhhbnRyb19yZWdf d3JpdGUoY3R4LT5kZXYsICZ2cDlfY29tcF9wcmVkX3Zhcl9yZWYwLCBjb21wX3Zhcl9yZWZbMF0p Owo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnZwOV9jb21wX3ByZWRfdmFyX3JlZjEs IGNvbXBfdmFyX3JlZlsxXSk7Cj4gK30KPiArCj4gKyNkZWZpbmUgSU5ORVJfTE9PUCBcCj4gK2Rv IHsJCQkJCQkJCQlcCj4gKwlmb3IgKG0gPSAwOyBtIDwgQVJSQVlfU0laRShhZGFwdGl2ZS0+Y29l ZlswXVswXVswXVswXSk7ICsrbSkgewlcCj4gKwkJbWVtY3B5KGFkYXB0aXZlLT5jb2VmW2ldW2pd W2tdW2xdW21dLAkJCVwKPiArCQkgICAgICAgcHJvYnMtPmNvZWZbaV1bal1ba11bbF1bbV0sCQkJ XAo+ICsJCSAgICAgICBzaXplb2YocHJvYnMtPmNvZWZbaV1bal1ba11bbF1bbV0pKTsJCVwKPiAr CQkJCQkJCQkJXAo+ICsJCWFkYXB0aXZlLT5jb2VmW2ldW2pdW2tdW2xdW21dWzNdID0gMDsJCQlc Cj4gKwl9CQkJCQkJCQlcCj4gK30gd2hpbGUgKDApCj4gKwo+ICtzdGF0aWMgdm9pZCBjb25maWdf cHJvYnMoc3RydWN0IGhhbnRyb19jdHggKmN0eCwgY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDlf ZnJhbWUgKmRlY19wYXJhbXMpCj4gK3sKPiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHgg KnZwOV9jdHggPSAmY3R4LT52cDlfZGVjOwo+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmICptaXNj ID0gJnZwOV9jdHgtPm1pc2M7Cj4gKwlzdHJ1Y3QgaGFudHJvX2cyX2FsbF9wcm9icyAqYWxsX3By b2JzID0gbWlzYy0+Y3B1Owo+ICsJc3RydWN0IGhhbnRyb19nMl9wcm9icyAqYWRhcHRpdmU7Cj4g KwlzdHJ1Y3QgaGFudHJvX2cyX212X3Byb2JzICptdjsKPiArCWNvbnN0IHN0cnVjdCB2NGwyX3Zw OV9zZWdtZW50YXRpb24gKnNlZyA9ICZkZWNfcGFyYW1zLT5zZWc7Cj4gKwljb25zdCBzdHJ1Y3Qg djRsMl92cDlfZnJhbWVfY29udGV4dCAqcHJvYnMgPSAmdnA5X2N0eC0+cHJvYmFiaWxpdHlfdGFi bGVzOwo+ICsJaW50IGksIGosIGssIGwsIG07Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoYWxsX3Byb2JzLT5rZl95X21vZGVfcHJvYik7ICsraSkKPiArCQlmb3IgKGogPSAwOyBq IDwgQVJSQVlfU0laRShhbGxfcHJvYnMtPmtmX3lfbW9kZV9wcm9iWzBdKTsgKytqKSB7Cj4gKwkJ CW1lbWNweShhbGxfcHJvYnMtPmtmX3lfbW9kZV9wcm9iW2ldW2pdLAo+ICsJCQkgICAgICAgdjRs Ml92cDlfa2ZfeV9tb2RlX3Byb2JbaV1bal0sCj4gKwkJCSAgICAgICBBUlJBWV9TSVpFKGFsbF9w cm9icy0+a2ZfeV9tb2RlX3Byb2JbaV1bal0pKTsKPiArCj4gKwkJCWFsbF9wcm9icy0+a2ZfeV9t b2RlX3Byb2JfdGFpbFtpXVtqXVswXSA9Cj4gKwkJCQl2NGwyX3ZwOV9rZl95X21vZGVfcHJvYltp XVtqXVs4XTsKPiArCQl9Cj4gKwo+ICsJbWVtY3B5KGFsbF9wcm9icy0+bWJfc2VnbWVudF90cmVl X3Byb2JzLCBzZWctPnRyZWVfcHJvYnMsCj4gKwkgICAgICAgc2l6ZW9mKGFsbF9wcm9icy0+bWJf c2VnbWVudF90cmVlX3Byb2JzKSk7Cj4gKwo+ICsJbWVtY3B5KGFsbF9wcm9icy0+c2VnbWVudF9w cmVkX3Byb2JzLCBzZWctPnByZWRfcHJvYnMsCj4gKwkgICAgICAgc2l6ZW9mKGFsbF9wcm9icy0+ c2VnbWVudF9wcmVkX3Byb2JzKSk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo YWxsX3Byb2JzLT5rZl91dl9tb2RlX3Byb2IpOyArK2kpIHsKPiArCQltZW1jcHkoYWxsX3Byb2Jz LT5rZl91dl9tb2RlX3Byb2JbaV0sIHY0bDJfdnA5X2tmX3V2X21vZGVfcHJvYltpXSwKPiArCQkg ICAgICAgQVJSQVlfU0laRShhbGxfcHJvYnMtPmtmX3V2X21vZGVfcHJvYltpXSkpOwo+ICsKPiAr CQlhbGxfcHJvYnMtPmtmX3V2X21vZGVfcHJvYl90YWlsW2ldWzBdID0gdjRsMl92cDlfa2ZfdXZf bW9kZV9wcm9iW2ldWzhdOwo+ICsJfQo+ICsKPiArCWFkYXB0aXZlID0gJmFsbF9wcm9icy0+cHJv YnM7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWRhcHRpdmUtPmludGVyX21v ZGUpOyArK2kpIHsKPiArCQltZW1jcHkoYWRhcHRpdmUtPmludGVyX21vZGVbaV0sIHByb2JzLT5p bnRlcl9tb2RlW2ldLAo+ICsJCSAgICAgICBzaXplb2YocHJvYnMtPmludGVyX21vZGUpKTsKPiAr Cj4gKwkJYWRhcHRpdmUtPmludGVyX21vZGVbaV1bM10gPSAwOwo+ICsJfQo+ICsKPiArCW1lbWNw eShhZGFwdGl2ZS0+aXNfaW50ZXIsIHByb2JzLT5pc19pbnRlciwgc2l6ZW9mKGFkYXB0aXZlLT5p c19pbnRlcikpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkYXB0aXZlLT51 dl9tb2RlKTsgKytpKSB7Cj4gKwkJbWVtY3B5KGFkYXB0aXZlLT51dl9tb2RlW2ldLCBwcm9icy0+ dXZfbW9kZVtpXSwKPiArCQkgICAgICAgc2l6ZW9mKGFkYXB0aXZlLT51dl9tb2RlW2ldKSk7Cj4g KwkJYWRhcHRpdmUtPnV2X21vZGVfdGFpbFtpXVswXSA9IHByb2JzLT51dl9tb2RlW2ldWzhdOwo+ ICsJfQo+ICsKPiArCW1lbWNweShhZGFwdGl2ZS0+dHg4LCBwcm9icy0+dHg4LCBzaXplb2YoYWRh cHRpdmUtPnR4OCkpOwo+ICsJbWVtY3B5KGFkYXB0aXZlLT50eDE2LCBwcm9icy0+dHgxNiwgc2l6 ZW9mKGFkYXB0aXZlLT50eDE2KSk7Cj4gKwltZW1jcHkoYWRhcHRpdmUtPnR4MzIsIHByb2JzLT50 eDMyLCBzaXplb2YoYWRhcHRpdmUtPnR4MzIpKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShhZGFwdGl2ZS0+eV9tb2RlKTsgKytpKSB7Cj4gKwkJbWVtY3B5KGFkYXB0aXZlLT55 X21vZGVbaV0sIHByb2JzLT55X21vZGVbaV0sCj4gKwkJICAgICAgIEFSUkFZX1NJWkUoYWRhcHRp dmUtPnlfbW9kZVtpXSkpOwo+ICsKPiArCQlhZGFwdGl2ZS0+eV9tb2RlX3RhaWxbaV1bMF0gPSBw cm9icy0+eV9tb2RlW2ldWzhdOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGFkYXB0aXZlLT5wYXJ0aXRpb25bMF0pOyArK2kpIHsKPiArCQltZW1jcHkoYWRhcHRpdmUt PnBhcnRpdGlvblswXVtpXSwgdjRsMl92cDlfa2ZfcGFydGl0aW9uX3Byb2JzW2ldLAo+ICsJCSAg ICAgICBzaXplb2YodjRsMl92cDlfa2ZfcGFydGl0aW9uX3Byb2JzW2ldKSk7Cj4gKwo+ICsJCWFk YXB0aXZlLT5wYXJ0aXRpb25bMF1baV1bM10gPSAwOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKGFkYXB0aXZlLT5wYXJ0aXRpb25bMV0pOyArK2kpIHsKPiArCQltZW1j cHkoYWRhcHRpdmUtPnBhcnRpdGlvblsxXVtpXSwgcHJvYnMtPnBhcnRpdGlvbltpXSwKPiArCQkg ICAgICAgc2l6ZW9mKHByb2JzLT5wYXJ0aXRpb25baV0pKTsKPiArCj4gKwkJYWRhcHRpdmUtPnBh cnRpdGlvblsxXVtpXVszXSA9IDA7Cj4gKwl9Cj4gKwo+ICsJbWVtY3B5KGFkYXB0aXZlLT5pbnRl cnBfZmlsdGVyLCBwcm9icy0+aW50ZXJwX2ZpbHRlciwKPiArCSAgICAgICBzaXplb2YoYWRhcHRp dmUtPmludGVycF9maWx0ZXIpKTsKPiArCj4gKwltZW1jcHkoYWRhcHRpdmUtPmNvbXBfbW9kZSwg cHJvYnMtPmNvbXBfbW9kZSwgc2l6ZW9mKGFkYXB0aXZlLT5jb21wX21vZGUpKTsKPiArCj4gKwlt ZW1jcHkoYWRhcHRpdmUtPnNraXAsIHByb2JzLT5za2lwLCBzaXplb2YoYWRhcHRpdmUtPnNraXAp KTsKPiArCj4gKwltdiA9ICZhZGFwdGl2ZS0+bXY7Cj4gKwo+ICsJbWVtY3B5KG12LT5qb2ludCwg cHJvYnMtPm12LmpvaW50LCBzaXplb2YobXYtPmpvaW50KSk7Cj4gKwltZW1jcHkobXYtPnNpZ24s IHByb2JzLT5tdi5zaWduLCBzaXplb2YobXYtPnNpZ24pKTsKPiArCW1lbWNweShtdi0+Y2xhc3Mw X2JpdCwgcHJvYnMtPm12LmNsYXNzMF9iaXQsIHNpemVvZihtdi0+Y2xhc3MwX2JpdCkpOwo+ICsJ bWVtY3B5KG12LT5mciwgcHJvYnMtPm12LmZyLCBzaXplb2YobXYtPmZyKSk7Cj4gKwltZW1jcHko bXYtPmNsYXNzMF9ocCwgcHJvYnMtPm12LmNsYXNzMF9ocCwgc2l6ZW9mKG12LT5jbGFzczBfaHAp KTsKPiArCW1lbWNweShtdi0+aHAsIHByb2JzLT5tdi5ocCwgc2l6ZW9mKG12LT5ocCkpOwo+ICsJ bWVtY3B5KG12LT5jbGFzc2VzLCBwcm9icy0+bXYuY2xhc3Nlcywgc2l6ZW9mKG12LT5jbGFzc2Vz KSk7Cj4gKwltZW1jcHkobXYtPmNsYXNzMF9mciwgcHJvYnMtPm12LmNsYXNzMF9mciwgc2l6ZW9m KG12LT5jbGFzczBfZnIpKTsKPiArCW1lbWNweShtdi0+Yml0cywgcHJvYnMtPm12LmJpdHMsIHNp emVvZihtdi0+Yml0cykpOwo+ICsKPiArCW1lbWNweShhZGFwdGl2ZS0+c2luZ2xlX3JlZiwgcHJv YnMtPnNpbmdsZV9yZWYsIHNpemVvZihhZGFwdGl2ZS0+c2luZ2xlX3JlZikpOwo+ICsKPiArCW1l bWNweShhZGFwdGl2ZS0+Y29tcF9yZWYsIHByb2JzLT5jb21wX3JlZiwgc2l6ZW9mKGFkYXB0aXZl LT5jb21wX3JlZikpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkYXB0aXZl LT5jb2VmKTsgKytpKQo+ICsJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGFkYXB0aXZlLT5j b2VmWzBdKTsgKytqKQo+ICsJCQlmb3IgKGsgPSAwOyBrIDwgQVJSQVlfU0laRShhZGFwdGl2ZS0+ Y29lZlswXVswXSk7ICsraykKPiArCQkJCWZvciAobCA9IDA7IGwgPCBBUlJBWV9TSVpFKGFkYXB0 aXZlLT5jb2VmWzBdWzBdWzBdKTsgKytsKQo+ICsJCQkJCUlOTkVSX0xPT1A7Cj4gKwo+ICsJaGFu dHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYsIFZQOV9BRERSX1BST0JTLCBtaXNjLT5kbWEpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb25maWdfY291bnRzKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgp Cj4gK3sKPiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggKnZwOV9kZWMgPSAmY3R4LT52 cDlfZGVjOwo+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmICptaXNjID0gJnZwOV9kZWMtPm1pc2M7 Cj4gKwlkbWFfYWRkcl90IGFkZHIgPSBtaXNjLT5kbWEgKyB2cDlfZGVjLT5jdHhfY291bnRlcnNf b2Zmc2V0Owo+ICsKPiArCWhhbnRyb193cml0ZV9hZGRyKGN0eC0+ZGV2LCBWUDlfQUREUl9DVFIs IGFkZHIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb25maWdfc2VnX21hcChzdHJ1Y3QgaGFu dHJvX2N0eCAqY3R4LAo+ICsJCQkgICBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9mcmFtZSAq ZGVjX3BhcmFtcywKPiArCQkJICAgYm9vbCBpbnRyYV9vbmx5LCBib29sIHVwZGF0ZV9tYXApCj4g K3sKPiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggKnZwOV9jdHggPSAmY3R4LT52cDlf ZGVjOwo+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmICpzZWdtZW50X21hcCA9ICZ2cDlfY3R4LT5z ZWdtZW50X21hcDsKPiArCWRtYV9hZGRyX3QgYWRkcjsKPiArCj4gKwlpZiAoaW50cmFfb25seSB8 fAo+ICsJICAgIChkZWNfcGFyYW1zLT5mbGFncyAmIFY0TDJfVlA5X0ZSQU1FX0ZMQUdfRVJST1Jf UkVTSUxJRU5UKSkgewo+ICsJCW1lbXNldChzZWdtZW50X21hcC0+Y3B1LCAwLCBzZWdtZW50X21h cC0+c2l6ZSk7Cj4gKwkJbWVtc2V0KHZwOV9jdHgtPmZlYXR1cmVfZGF0YSwgMCwgc2l6ZW9mKHZw OV9jdHgtPmZlYXR1cmVfZGF0YSkpOwo+ICsJCW1lbXNldCh2cDlfY3R4LT5mZWF0dXJlX2VuYWJs ZWQsIDAsIHNpemVvZih2cDlfY3R4LT5mZWF0dXJlX2VuYWJsZWQpKTsKPiArCX0KPiArCj4gKwlh ZGRyID0gc2VnbWVudF9tYXAtPmRtYSArIHZwOV9jdHgtPmFjdGl2ZV9zZWdtZW50ICogdnA5X2N0 eC0+c2VnbWVudF9tYXBfc2l6ZTsKPiArCWhhbnRyb193cml0ZV9hZGRyKGN0eC0+ZGV2LCBWUDlf QUREUl9TRUdNRU5UX1JFQUQsIGFkZHIpOwo+ICsKPiArCWFkZHIgPSBzZWdtZW50X21hcC0+ZG1h ICsgKDEgLSB2cDlfY3R4LT5hY3RpdmVfc2VnbWVudCkgKiB2cDlfY3R4LT5zZWdtZW50X21hcF9z aXplOwo+ICsJaGFudHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYsIFZQOV9BRERSX1NFR01FTlRfV1JJ VEUsIGFkZHIpOwo+ICsKPiArCWlmICh1cGRhdGVfbWFwKQo+ICsJCXZwOV9jdHgtPmFjdGl2ZV9z ZWdtZW50ID0gMSAtIHZwOV9jdHgtPmFjdGl2ZV9zZWdtZW50Owo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZAo+ICtjb25maWdfc291cmNlKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIGNvbnN0IHN0cnVj dCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zLAo+ICsJICAgICAgc3RydWN0IHZiMl92 NGwyX2J1ZmZlciAqdmIyX3NyYykKPiArewo+ICsJZG1hX2FkZHJfdCBzdHJlYW1fYmFzZSwgdG1w X2FkZHI7Cj4gKwl1bnNpZ25lZCBpbnQgaGVhZHJlc19zaXplOwo+ICsJdTMyIHNyY19sZW4sIHN0 YXJ0X2JpdCwgc3JjX2J1Zl9sZW47Cj4gKwo+ICsJaGVhZHJlc19zaXplID0gZGVjX3BhcmFtcy0+ dW5jb21wcmVzc2VkX2hlYWRlcl9zaXplCj4gKwkJICAgICArIGRlY19wYXJhbXMtPmNvbXByZXNz ZWRfaGVhZGVyX3NpemU7Cj4gKwo+ICsJc3RyZWFtX2Jhc2UgPSB2YjJfZG1hX2NvbnRpZ19wbGFu ZV9kbWFfYWRkcigmdmIyX3NyYy0+dmIyX2J1ZiwgMCk7Cj4gKwloYW50cm9fd3JpdGVfYWRkcihj dHgtPmRldiwgRzJfQUREUl9TVFIsIHN0cmVhbV9iYXNlKTsKPiArCj4gKwl0bXBfYWRkciA9IHN0 cmVhbV9iYXNlICsgaGVhZHJlc19zaXplOwo+ICsJc3RhcnRfYml0ID0gKHRtcF9hZGRyICYgMHhm KSAqIDg7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfc3RhcnRfYml0LCBzdGFy dF9iaXQpOwo+ICsKPiArCXNyY19sZW4gPSB2YjJfZ2V0X3BsYW5lX3BheWxvYWQoJnZiMl9zcmMt PnZiMl9idWYsIDApOwo+ICsJc3JjX2xlbiArPSBzdGFydF9iaXQgLyA4IC0gaGVhZHJlc19zaXpl Owo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX3N0cmVhbV9sZW4sIHNyY19sZW4p Owo+ICsKPiArCXRtcF9hZGRyICY9IH4weGY7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2 LCAmZzJfc3RybV9zdGFydF9vZmZzZXQsIHRtcF9hZGRyIC0gc3RyZWFtX2Jhc2UpOwo+ICsJc3Jj X2J1Zl9sZW4gPSB2YjJfcGxhbmVfc2l6ZSgmdmIyX3NyYy0+dmIyX2J1ZiwgMCk7Cj4gKwloYW50 cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfc3RybV9idWZmZXJfbGVuLCBzcmNfYnVmX2xlbik7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK2NvbmZpZ19yZWdpc3RlcnMoc3RydWN0IGhhbnRy b19jdHggKmN0eCwgY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDlfZnJhbWUgKmRlY19wYXJhbXMs Cj4gKwkJIHN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZiMl9zcmMsIHN0cnVjdCB2YjJfdjRsMl9i dWZmZXIgKnZiMl9kc3QpCj4gK3sKPiArCXN0cnVjdCBoYW50cm9fZGVjb2RlZF9idWZmZXIgKmRz dCwgKmxhc3QsICptdl9yZWY7Cj4gKwlzdHJ1Y3QgaGFudHJvX3ZwOV9kZWNfaHdfY3R4ICp2cDlf Y3R4ID0gJmN0eC0+dnA5X2RlYzsKPiArCWNvbnN0IHN0cnVjdCB2NGwyX3ZwOV9zZWdtZW50YXRp b24gKnNlZzsKPiArCWJvb2wgaW50cmFfb25seSwgcmVzb2x1dGlvbl9jaGFuZ2U7Cj4gKwo+ICsJ LyogdnA5IHN0dWZmICovCj4gKwlkc3QgPSB2YjJfdG9faGFudHJvX2RlY29kZWRfYnVmKCZ2YjJf ZHN0LT52YjJfYnVmKTsKPiArCj4gKwlpZiAodnA5X2N0eC0+bGFzdC52YWxpZCkKPiArCQlsYXN0 ID0gZ2V0X3JlZl9idWYoY3R4LCAmZHN0LT5iYXNlLnZiLCB2cDlfY3R4LT5sYXN0LnRpbWVzdGFt cCk7Cj4gKwllbHNlCj4gKwkJbGFzdCA9IGRzdDsKPiArCj4gKwl1cGRhdGVfZGVjX2J1Zl9pbmZv KGRzdCwgZGVjX3BhcmFtcyk7Cj4gKwl1cGRhdGVfY3R4X2N1cl9pbmZvKHZwOV9jdHgsIGRzdCwg ZGVjX3BhcmFtcyk7Cj4gKwlzZWcgPSAmZGVjX3BhcmFtcy0+c2VnOwo+ICsKPiArCWludHJhX29u bHkgPSAhIShkZWNfcGFyYW1zLT5mbGFncyAmCj4gKwkJCShWNEwyX1ZQOV9GUkFNRV9GTEFHX0tF WV9GUkFNRSB8Cj4gKwkJCVY0TDJfVlA5X0ZSQU1FX0ZMQUdfSU5UUkFfT05MWSkpOwo+ICsKPiAr CWlmICghaW50cmFfb25seSAmJgo+ICsJICAgICEoZGVjX3BhcmFtcy0+ZmxhZ3MgJiBWNEwyX1ZQ OV9GUkFNRV9GTEFHX0VSUk9SX1JFU0lMSUVOVCkgJiYKPiArCSAgICB2cDlfY3R4LT5sYXN0LnZh bGlkKQo+ICsJCW12X3JlZiA9IGxhc3Q7Cj4gKwllbHNlCj4gKwkJbXZfcmVmID0gZHN0Owo+ICsK PiArCXJlc29sdXRpb25fY2hhbmdlID0gZHN0LT52cDkud2lkdGggIT0gbGFzdC0+dnA5LndpZHRo IHx8Cj4gKwkJCSAgICBkc3QtPnZwOS5oZWlnaHQgIT0gbGFzdC0+dnA5LmhlaWdodDsKPiArCj4g KwkvKiBjb25maWd1cmUgYmFzaWMgcmVnaXN0ZXJzICovCj4gKwloYW50cm9fcmVnX3dyaXRlKGN0 eC0+ZGV2LCAmZzJfbW9kZSwgVlA5X0RFQ19NT0RFKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4 LT5kZXYsICZnMl9zdHJtX3N3YXAsIDB4Zik7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2 LCAmZzJfZGlybXZfc3dhcCwgMHhmKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZn Ml9jb21wcmVzc19zd2FwLCAweGYpOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcy X2J1c3dpZHRoLCBCVVNfV0lEVEhfMTI4KTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYs ICZnMl9tYXhfYnVyc3QsIDE2KTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9h cGZfdGhyZXNob2xkLCA4KTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9yZWZf Y29tcHJlc3NfYnlwYXNzLCAxKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9j bGtfZ2F0ZV9lLCAxKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9tYXhfY2Jf c2l6ZSwgNik7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfbWluX2NiX3NpemUs IDMpOwo+ICsKPiArCWNvbmZpZ19vdXRwdXQoY3R4LCBkc3QsIGRlY19wYXJhbXMpOwo+ICsKPiAr CWlmICghaW50cmFfb25seSkKPiArCQljb25maWdfcmVmX3JlZ2lzdGVycyhjdHgsIGRlY19wYXJh bXMsIGRzdCwgbXZfcmVmKTsKPiArCj4gKwljb25maWdfdGlsZXMoY3R4LCBkZWNfcGFyYW1zLCBk c3QpOwo+ICsJY29uZmlnX3NlZ21lbnQoY3R4LCBkZWNfcGFyYW1zKTsKPiArCWNvbmZpZ19sb29w X2ZpbHRlcihjdHgsIGRlY19wYXJhbXMpOwo+ICsJY29uZmlnX3BpY3R1cmVfZGltZW5zaW9ucyhj dHgsIGRzdCk7Cj4gKwljb25maWdfYml0X2RlcHRoKGN0eCwgZGVjX3BhcmFtcyk7Cj4gKwljb25m aWdfcXVhbnQoY3R4LCBkZWNfcGFyYW1zKTsKPiArCWNvbmZpZ19vdGhlcnMoY3R4LCBkZWNfcGFy YW1zLCBpbnRyYV9vbmx5LCByZXNvbHV0aW9uX2NoYW5nZSk7Cj4gKwljb25maWdfY29tcG91bmRf cmVmZXJlbmNlKGN0eCwgZGVjX3BhcmFtcyk7Cj4gKwljb25maWdfcHJvYnMoY3R4LCBkZWNfcGFy YW1zKTsKPiArCWNvbmZpZ19jb3VudHMoY3R4KTsKPiArCWNvbmZpZ19zZWdfbWFwKGN0eCwgZGVj X3BhcmFtcywgaW50cmFfb25seSwKPiArCQkgICAgICAgc2VnLT5mbGFncyAmIFY0TDJfVlA5X1NF R01FTlRBVElPTl9GTEFHX1VQREFURV9NQVApOwo+ICsJY29uZmlnX3NvdXJjZShjdHgsIGRlY19w YXJhbXMsIHZiMl9zcmMpOwo+ICt9Cj4gKwo+ICtpbnQgaGFudHJvX2cyX3ZwOV9kZWNfcnVuKHN0 cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5 X2ZyYW1lICpkZWNvZGVfcGFyYW1zOwo+ICsJc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqc3JjOwo+ ICsJc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqZHN0Owo+ICsJaW50IHJldDsKPiArCj4gKwloYW50 cm9fZzJfY2hlY2tfaWRsZShjdHgtPmRldik7Cj4gKwo+ICsJcmV0ID0gc3RhcnRfcHJlcGFyZV9y dW4oY3R4LCAmZGVjb2RlX3BhcmFtcyk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJaGFudHJvX2VuZF9w cmVwYXJlX3J1bihjdHgpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJc3JjID0gaGFu dHJvX2dldF9zcmNfYnVmKGN0eCk7Cj4gKwlkc3QgPSBoYW50cm9fZ2V0X2RzdF9idWYoY3R4KTsK PiArCj4gKwljb25maWdfcmVnaXN0ZXJzKGN0eCwgZGVjb2RlX3BhcmFtcywgc3JjLCBkc3QpOwo+ ICsKPiArCWhhbnRyb19lbmRfcHJlcGFyZV9ydW4oY3R4KTsKPiArCj4gKwl2ZHB1X3dyaXRlKGN0 eC0+ZGV2LCBHMl9SRUdfSU5URVJSVVBUX0RFQ19FLCBHMl9SRUdfSU5URVJSVVBUKTsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArI2RlZmluZSBjb3B5X3R4X2FuZF9za2lwKHAxLCBwMikJ CQkJXAo+ICtkbyB7CQkJCQkJCQlcCj4gKwltZW1jcHkoKHAxKS0+dHg4LCAocDIpLT50eDgsIHNp emVvZigocDEpLT50eDgpKTsJXAo+ICsJbWVtY3B5KChwMSktPnR4MTYsIChwMiktPnR4MTYsIHNp emVvZigocDEpLT50eDE2KSk7CVwKPiArCW1lbWNweSgocDEpLT50eDMyLCAocDIpLT50eDMyLCBz aXplb2YoKHAxKS0+dHgzMikpOwlcCj4gKwltZW1jcHkoKHAxKS0+c2tpcCwgKHAyKS0+c2tpcCwg c2l6ZW9mKChwMSktPnNraXApKTsJXAo+ICt9IHdoaWxlICgwKQo+ICsKPiArdm9pZCBoYW50cm9f ZzJfdnA5X2RlY19kb25lKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gK3sKPiArCXN0cnVjdCBo YW50cm9fdnA5X2RlY19od19jdHggKnZwOV9jdHggPSAmY3R4LT52cDlfZGVjOwo+ICsJdW5zaWdu ZWQgaW50IGZjdHhfaWR4Owo+ICsKPiArCWlmICghKHZwOV9jdHgtPmN1ci5mbGFncyAmIFY0TDJf VlA5X0ZSQU1FX0ZMQUdfUkVGUkVTSF9GUkFNRV9DVFgpKQo+ICsJCWdvdG8gb3V0X3VwZGF0ZV9s YXN0Owo+ICsKPiArCWZjdHhfaWR4ID0gdnA5X2N0eC0+Y3VyLmZyYW1lX2NvbnRleHRfaWR4Owo+ ICsKPiArCWlmICghKHZwOV9jdHgtPmN1ci5mbGFncyAmIFY0TDJfVlA5X0ZSQU1FX0ZMQUdfUEFS QUxMRUxfREVDX01PREUpKSB7Cj4gKwkJLyogZXJyb3JfcmVzaWxpZW50X21vZGUgPT0gMCAmJiBm cmFtZV9wYXJhbGxlbF9kZWNvZGluZ19tb2RlID09IDAgKi8KPiArCQlzdHJ1Y3QgdjRsMl92cDlf ZnJhbWVfY29udGV4dCAqcHJvYnMgPSAmdnA5X2N0eC0+cHJvYmFiaWxpdHlfdGFibGVzOwo+ICsJ CWJvb2wgZnJhbWVfaXNfaW50cmEgPSB2cDlfY3R4LT5jdXIuZmxhZ3MgJgo+ICsJCSAgICAoVjRM Ml9WUDlfRlJBTUVfRkxBR19LRVlfRlJBTUUgfCBWNEwyX1ZQOV9GUkFNRV9GTEFHX0lOVFJBX09O TFkpOwo+ICsJCXN0cnVjdCB0eF9hbmRfc2tpcCB7Cj4gKwkJCXU4IHR4OFsyXVsxXTsKPiArCQkJ dTggdHgxNlsyXVsyXTsKPiArCQkJdTggdHgzMlsyXVszXTsKPiArCQkJdTggc2tpcFszXTsKPiAr CQl9IF90eF9za2lwLCAqdHhfc2tpcCA9ICZfdHhfc2tpcDsKPiArCQlzdHJ1Y3QgdjRsMl92cDlf ZnJhbWVfc3ltYm9sX2NvdW50cyAqY291bnRzOwo+ICsJCXN0cnVjdCBzeW1ib2xfY291bnRzICpo YW50cm9fY250czsKPiArCQl1MzIgdHgxNnBbMl1bNF07Cj4gKwkJaW50IGk7Cj4gKwo+ICsJCS8q IGJ1ZmZlciB0aGUgZm9yd2FyZC11cGRhdGVkIFRYIGFuZCBza2lwIHByb2JzICovCj4gKwkJaWYg KGZyYW1lX2lzX2ludHJhKQo+ICsJCQljb3B5X3R4X2FuZF9za2lwKHR4X3NraXAsIHByb2JzKTsK PiArCj4gKwkJLyogNi4xLjIgcmVmcmVzaF9wcm9icygpOiBsb2FkX3Byb2JzKCkgYW5kIGxvYWRf cHJvYnMyKCkgKi8KPiArCQkqcHJvYnMgPSB2cDlfY3R4LT5mcmFtZV9jb250ZXh0W2ZjdHhfaWR4 XTsKPiArCj4gKwkJLyogaWYgRnJhbWVJc0ludHJhIHRoZW4gdW5kbyB0aGUgZWZmZWN0IG9mIGxv YWRfcHJvYnMyKCkgKi8KPiArCQlpZiAoZnJhbWVfaXNfaW50cmEpCj4gKwkJCWNvcHlfdHhfYW5k X3NraXAocHJvYnMsIHR4X3NraXApOwo+ICsKPiArCQljb3VudHMgPSAmdnA5X2N0eC0+Y250czsK PiArCQloYW50cm9fY250cyA9IHZwOV9jdHgtPm1pc2MuY3B1ICsgdnA5X2N0eC0+Y3R4X2NvdW50 ZXJzX29mZnNldDsKPiArCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0eDE2cCk7ICsraSkg ewo+ICsJCQltZW1jcHkodHgxNnBbaV0sCj4gKwkJCSAgICAgICBoYW50cm9fY250cy0+dHgxNngx Nl9jb3VudFtpXSwKPiArCQkJICAgICAgIHNpemVvZihoYW50cm9fY250cy0+dHgxNngxNl9jb3Vu dFswXSkpOwo+ICsJCQl0eDE2cFtpXVszXSA9IDA7Cj4gKwkJfQo+ICsJCWNvdW50cy0+dHgxNnAg PSAmdHgxNnA7Cj4gKwo+ICsJCXY0bDJfdnA5X2FkYXB0X2NvZWZfcHJvYnMocHJvYnMsIGNvdW50 cywKPiArCQkJCQkgICF2cDlfY3R4LT5sYXN0LnZhbGlkIHx8Cj4gKwkJCQkJICB2cDlfY3R4LT5s YXN0LmZsYWdzICYgVjRMMl9WUDlfRlJBTUVfRkxBR19LRVlfRlJBTUUsCj4gKwkJCQkJICBmcmFt ZV9pc19pbnRyYSk7Cj4gKwo+ICsJCWlmICghZnJhbWVfaXNfaW50cmEpIHsKPiArCQkJLyogbG9h ZF9wcm9iczIoKSBhbHJlYWR5IGRvbmUgKi8KPiArCQkJdTMyIG12X21vZGVbN11bNF07Cj4gKwo+ ICsJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdl9tb2RlKTsgKytpKSB7Cj4gKwkJCQlt dl9tb2RlW2ldWzBdID0gaGFudHJvX2NudHMtPmludGVyX21vZGVfY291bnRzW2ldWzFdWzBdOwo+ ICsJCQkJbXZfbW9kZVtpXVsxXSA9IGhhbnRyb19jbnRzLT5pbnRlcl9tb2RlX2NvdW50c1tpXVsy XVswXTsKPiArCQkJCW12X21vZGVbaV1bMl0gPSBoYW50cm9fY250cy0+aW50ZXJfbW9kZV9jb3Vu dHNbaV1bMF1bMF07Cj4gKwkJCQltdl9tb2RlW2ldWzNdID0gaGFudHJvX2NudHMtPmludGVyX21v ZGVfY291bnRzW2ldWzJdWzFdOwo+ICsJCQl9Cj4gKwkJCWNvdW50cy0+bXZfbW9kZSA9ICZtdl9t b2RlOwo+ICsJCQl2NGwyX3ZwOV9hZGFwdF9ub25jb2VmX3Byb2JzKCZ2cDlfY3R4LT5wcm9iYWJp bGl0eV90YWJsZXMsIGNvdW50cywKPiArCQkJCQkJICAgICB2cDlfY3R4LT5jdXIucmVmZXJlbmNl X21vZGUsCj4gKwkJCQkJCSAgICAgdnA5X2N0eC0+Y3VyLmludGVycG9sYXRpb25fZmlsdGVyLAo+ ICsJCQkJCQkgICAgIHZwOV9jdHgtPmN1ci50eF9tb2RlLCB2cDlfY3R4LT5jdXIuZmxhZ3MpOwo+ ICsJCX0KPiArCX0KPiArCj4gKwl2cDlfY3R4LT5mcmFtZV9jb250ZXh0W2ZjdHhfaWR4XSA9IHZw OV9jdHgtPnByb2JhYmlsaXR5X3RhYmxlczsKPiArCj4gK291dF91cGRhdGVfbGFzdDoKPiArCXZw OV9jdHgtPmxhc3QgPSB2cDlfY3R4LT5jdXI7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9z dGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9faHcuaCBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9o YW50cm8vaGFudHJvX2h3LmgKPiBpbmRleCA0MmIzZjM5NjFmNzUuLjI5NjFkMzk5ZmQ2MCAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19ody5oCj4gKysr IGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9faHcuaAo+IEBAIC0xMiw2ICsx Miw3IEBACj4gICAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cj4gICAjaW5jbHVkZSA8bGlu dXgvdjRsMi1jb250cm9scy5oPgo+ICAgI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KPiAr I2luY2x1ZGUgPG1lZGlhL3Y0bDItdnA5Lmg+Cj4gICAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYy LWNvcmUuaD4KPiAgIAo+ICAgI2RlZmluZSBERUNfODE5MF9BTElHTl9NQVNLCTB4MDdVCj4gQEAg LTE2MSw2ICsxNjIsNTAgQEAgc3RydWN0IGhhbnRyb192cDhfZGVjX2h3X2N0eCB7Cj4gICAJc3Ry dWN0IGhhbnRyb19hdXhfYnVmIHByb2JfdGJsOwo+ICAgfTsKPiAgIAo+ICtzdHJ1Y3QgaGFudHJv X3ZwOV9mcmFtZV9pbmZvIHsKPiArCXUzMiB2YWxpZCA6IDE7Cj4gKwl1MzIgZnJhbWVfY29udGV4 dF9pZHggOiAyOwo+ICsJdTMyIHJlZmVyZW5jZV9tb2RlIDogMjsKPiArCXUzMiB0eF9tb2RlIDog MzsKPiArCXUzMiBpbnRlcnBvbGF0aW9uX2ZpbHRlciA6IDM7Cj4gKwl1MzIgZmxhZ3M7Cj4gKwl1 NjQgdGltZXN0YW1wOwo+ICt9Owo+ICsKPiArI2RlZmluZSBNQVhfU0JfQ09MUwk2NAo+ICsjZGVm aW5lIE1BWF9TQl9ST1dTCTM0Cj4gKwo+ICsvKioKPiArICogc3RydWN0IGhhbnRyb192cDlfZGVj X2h3X2N0eAo+ICsgKgo+ICsgKi8KPiArc3RydWN0IGhhbnRyb192cDlfZGVjX2h3X2N0eCB7Cj4g KwlzdHJ1Y3QgaGFudHJvX2F1eF9idWYgdGlsZV9lZGdlOwo+ICsJc3RydWN0IGhhbnRyb19hdXhf YnVmIHNlZ21lbnRfbWFwOwo+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmIG1pc2M7Cj4gKwlzdHJ1 Y3QgdjRsMl92cDlfZnJhbWVfc3ltYm9sX2NvdW50cyBjbnRzOwo+ICsJc3RydWN0IHY0bDJfdnA5 X2ZyYW1lX2NvbnRleHQgcHJvYmFiaWxpdHlfdGFibGVzOwo+ICsJc3RydWN0IHY0bDJfdnA5X2Zy YW1lX2NvbnRleHQgZnJhbWVfY29udGV4dFs0XTsKPiArCXN0cnVjdCBoYW50cm9fdnA5X2ZyYW1l X2luZm8gY3VyOwo+ICsJc3RydWN0IGhhbnRyb192cDlfZnJhbWVfaW5mbyBsYXN0Owo+ICsKPiAr CXVuc2lnbmVkIGludCBic2RfY3RybF9vZmZzZXQ7Cj4gKwl1bnNpZ25lZCBpbnQgc2VnbWVudF9t YXBfc2l6ZTsKPiArCXVuc2lnbmVkIGludCBjdHhfY291bnRlcnNfb2Zmc2V0Owo+ICsJdW5zaWdu ZWQgaW50IHRpbGVfaW5mb19vZmZzZXQ7Cj4gKwo+ICsJdW5zaWduZWQgc2hvcnQgdGlsZV9yX2lu Zm9bTUFYX1NCX1JPV1NdOwo+ICsJdW5zaWduZWQgc2hvcnQgdGlsZV9jX2luZm9bTUFYX1NCX0NP TFNdOwo+ICsJdW5zaWduZWQgaW50IGxhc3RfdGlsZV9yOwo+ICsJdW5zaWduZWQgaW50IGxhc3Rf dGlsZV9jOwo+ICsJdW5zaWduZWQgaW50IGxhc3Rfc2JzX3I7Cj4gKwl1bnNpZ25lZCBpbnQgbGFz dF9zYnNfYzsKPiArCj4gKwl1bnNpZ25lZCBpbnQgYWN0aXZlX3NlZ21lbnQ7Cj4gKwl1OCBmZWF0 dXJlX2VuYWJsZWRbOF07Cj4gKwlzMTYgZmVhdHVyZV9kYXRhWzhdWzRdOwo+ICt9Owo+ICsKPiAg IC8qKgo+ICAgICogc3RydWN0IGhhbnRyb19wb3N0cHJvY19jdHgKPiAgICAqCj4gQEAgLTI2Nyw2 ICszMTIsMjQgQEAgdm9pZCBoYW50cm9faGV2Y19yZWZfcmVtb3ZlX3VudXNlZChzdHJ1Y3QgaGFu dHJvX2N0eCAqY3R4KTsKPiAgIHNpemVfdCBoYW50cm9faGV2Y19jaHJvbWFfb2Zmc2V0KGNvbnN0 IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19zcHMgKnNwcyk7Cj4gICBzaXplX3QgaGFudHJvX2hldmNf bW90aW9uX3ZlY3RvcnNfb2Zmc2V0KGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19zcHMgKnNw cyk7Cj4gICAKPiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBoYW50cm9fdnA5X251bV9z YnModW5zaWduZWQgc2hvcnQgZGltZW5zaW9uKQo+ICt7Cj4gKwlyZXR1cm4gKGRpbWVuc2lvbiAr IDYzKSAvIDY0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHNpemVfdAo+ICtoYW50cm9fdnA5 X212X3NpemUodW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0KQo+ICt7Cj4g KwlpbnQgbnVtX2N0YnM7Cj4gKwo+ICsJLyoKPiArCSAqIFRoZXJlIGNhbiBiZSB1cCB0byAoQ1RC cyB4IDY0KSBudW1iZXIgb2YgYmxvY2tzLAo+ICsJICogYW5kIHRoZSBtb3Rpb24gdmVjdG9yIGZv ciBlYWNoIGJsb2NrIG5lZWRzIDE2IGJ5dGVzLgo+ICsJICovCj4gKwludW1fY3RicyA9IGhhbnRy b192cDlfbnVtX3Nicyh3aWR0aCkgKiBoYW50cm9fdnA5X251bV9zYnMoaGVpZ2h0KTsKPiArCXJl dHVybiAobnVtX2N0YnMgKiA2NCkgKiAxNjsKPiArfQo+ICsKPiAgIHN0YXRpYyBpbmxpbmUgc2l6 ZV90Cj4gICBoYW50cm9faDI2NF9tdl9zaXplKHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQg aW50IGhlaWdodCkKPiAgIHsKPiBAQCAtMzA4LDYgKzM3MSwxMCBAQCB2b2lkIGhhbnRyb192cDhf ZGVjX2V4aXQoc3RydWN0IGhhbnRyb19jdHggKmN0eCk7Cj4gICB2b2lkIGhhbnRyb192cDhfcHJv Yl91cGRhdGUoc3RydWN0IGhhbnRyb19jdHggKmN0eCwKPiAgIAkJCSAgICBjb25zdCBzdHJ1Y3Qg djRsMl9jdHJsX3ZwOF9mcmFtZSAqaGRyKTsKPiAgIAo+ICtpbnQgaGFudHJvX2cyX3ZwOV9kZWNf cnVuKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpOwo+ICt2b2lkIGhhbnRyb19nMl92cDlfZGVjX2Rv bmUoc3RydWN0IGhhbnRyb19jdHggKmN0eCk7Cj4gK2ludCBoYW50cm9fdnA5X2RlY19pbml0KHN0 cnVjdCBoYW50cm9fY3R4ICpjdHgpOwo+ICt2b2lkIGhhbnRyb192cDlfZGVjX2V4aXQoc3RydWN0 IGhhbnRyb19jdHggKmN0eCk7Cj4gICB2b2lkIGhhbnRyb19nMl9jaGVja19pZGxlKHN0cnVjdCBo YW50cm9fZGV2ICp2cHUpOwo+ICAgCj4gICAjZW5kaWYgLyogSEFOVFJPX0hXX0hfICovCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX3Y0bDIuYyBiL2Ry aXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX3Y0bDIuYwo+IGluZGV4IGQxZjA2MGM1 NWZlZC4uZTRiMDY0NWJhNmZjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9o YW50cm8vaGFudHJvX3Y0bDIuYwo+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8v aGFudHJvX3Y0bDIuYwo+IEBAIC0yOTksNiArMjk5LDExIEBAIHN0YXRpYyBpbnQgaGFudHJvX3Ry eV9mbXQoY29uc3Qgc3RydWN0IGhhbnRyb19jdHggKmN0eCwKPiAgIAkJCXBpeF9tcC0+cGxhbmVf Zm10WzBdLnNpemVpbWFnZSArPQo+ICAgCQkJCWhhbnRyb19oMjY0X212X3NpemUocGl4X21wLT53 aWR0aCwKPiAgIAkJCQkJCSAgICBwaXhfbXAtPmhlaWdodCk7Cj4gKwkJZWxzZSBpZiAoY3R4LT52 cHVfc3JjX2ZtdC0+Zm91cmNjID09IFY0TDJfUElYX0ZNVF9WUDlfRlJBTUUgJiYKPiArCQkJICFo YW50cm9fbmVlZHNfcG9zdHByb2MoY3R4LCBmbXQpKQo+ICsJCQlwaXhfbXAtPnBsYW5lX2ZtdFsw XS5zaXplaW1hZ2UgKz0KPiArCQkJCWhhbnRyb192cDlfbXZfc2l6ZShwaXhfbXAtPndpZHRoLAo+ ICsJCQkJCQkgICBwaXhfbXAtPmhlaWdodCk7Cj4gICAJfSBlbHNlIGlmICghcGl4X21wLT5wbGFu ZV9mbXRbMF0uc2l6ZWltYWdlKSB7Cj4gICAJCS8qCj4gICAJCSAqIEZvciBjb2RlZCBmb3JtYXRz IHRoZSBhcHBsaWNhdGlvbiBjYW4gc3BlY2lmeQo+IEBAIC00MDcsNiArNDEyLDcgQEAgaGFudHJv X3VwZGF0ZV9yZXF1aXJlc19yZXF1ZXN0KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIHUzMiBmb3Vy Y2MpCj4gICAJY2FzZSBWNEwyX1BJWF9GTVRfVlA4X0ZSQU1FOgo+ICAgCWNhc2UgVjRMMl9QSVhf Rk1UX0gyNjRfU0xJQ0U6Cj4gICAJY2FzZSBWNEwyX1BJWF9GTVRfSEVWQ19TTElDRToKPiArCWNh c2UgVjRMMl9QSVhfRk1UX1ZQOV9GUkFNRToKPiAgIAkJY3R4LT5maC5tMm1fY3R4LT5vdXRfcV9j dHgucS5yZXF1aXJlc19yZXF1ZXN0cyA9IHRydWU7Cj4gICAJCWJyZWFrOwo+ICAgCWRlZmF1bHQ6 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX3ZwOS5j IGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9fdnA5LmMKPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNTY2Y2QzNzZjMDk3Cj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX3ZwOS5jCj4g QEAgLTAsMCArMSwyNDAgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK PiArLyoKPiArICogSGFudHJvIFZQOSBjb2RlYyBkcml2ZXIKPiArICoKPiArICogQ29weXJpZ2h0 IChDKSAyMDIxIENvbGxhYm9yYSBMdGQuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+Cj4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLW1lbTJtZW0uaD4KPiArCj4gKyNpbmNsdWRl ICJoYW50cm8uaCIKPiArI2luY2x1ZGUgImhhbnRyb19ody5oIgo+ICsjaW5jbHVkZSAiaGFudHJv X3ZwOS5oIgo+ICsKPiArI2RlZmluZSBQT1cyKHgpICgxIDw8ICh4KSkKPiArCj4gKyNkZWZpbmUg TUFYX0xPRzJfVElMRV9DT0xVTU5TIDYKPiArI2RlZmluZSBNQVhfTlVNX1RJTEVfQ09MUyBQT1cy KE1BWF9MT0cyX1RJTEVfQ09MVU1OUykKPiArI2RlZmluZSBNQVhfVElMRV9DT0xTIDIwCj4gKyNk ZWZpbmUgTUFYX1RJTEVfUk9XUyAyMgo+ICsKPiArc3RhdGljIHNpemVfdCBoYW50cm9fdnA5X3Rp bGVfZmlsdGVyX3NpemUodW5zaWduZWQgaW50IGhlaWdodCkKPiArewo+ICsJdTMyIGgsIGhlaWdo dDMyLCBzaXplOwo+ICsKPiArCWggPSByb3VuZHVwKGhlaWdodCwgOCk7Cj4gKwo+ICsJaGVpZ2h0 MzIgPSByb3VuZHVwKGgsIDY0KTsKPiArCXNpemUgPSAyNCAqIGhlaWdodDMyICogKE1BWF9OVU1f VElMRV9DT0xTIC0gMSk7IC8qIGx1bWE6IDgsIGNocm9tYTogOCArIDggKi8KPiArCj4gKwlyZXR1 cm4gc2l6ZTsKPiArfQo+ICsKPiArc3RhdGljIHNpemVfdCBoYW50cm9fdnA5X2JzZF9jb250cm9s X3NpemUodW5zaWduZWQgaW50IGhlaWdodCkKPiArewo+ICsJdTMyIGgsIGhlaWdodDMyOwo+ICsK PiArCWggPSByb3VuZHVwKGhlaWdodCwgOCk7Cj4gKwloZWlnaHQzMiA9IHJvdW5kdXAoaCwgNjQp Owo+ICsKPiArCXJldHVybiAxNiAqIChoZWlnaHQzMiAvIDQpICogKE1BWF9OVU1fVElMRV9DT0xT IC0gMSk7Cj4gK30KPiArCj4gK3N0YXRpYyBzaXplX3QgaGFudHJvX3ZwOV9zZWdtZW50X21hcF9z aXplKHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCkKPiArewo+ICsJdTMy IHcsIGg7Cj4gKwlpbnQgbnVtX2N0YnM7Cj4gKwo+ICsJdyA9IHJvdW5kdXAod2lkdGgsIDgpOwo+ ICsJaCA9IHJvdW5kdXAoaGVpZ2h0LCA4KTsKPiArCW51bV9jdGJzID0gKCh3ICsgNjMpIC8gNjQp ICogKChoICsgNjMpIC8gNjQpOwo+ICsKPiArCXJldHVybiBudW1fY3RicyAqIDMyOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW5saW5lIHNpemVfdCBoYW50cm9fdnA5X3Byb2JfdGFiX3NpemUodm9pZCkK PiArewo+ICsJcmV0dXJuIHJvdW5kdXAoc2l6ZW9mKHN0cnVjdCBoYW50cm9fZzJfYWxsX3Byb2Jz KSwgMTYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHNpemVfdCBoYW50cm9fdnA5X2NvdW50 X3RhYl9zaXplKHZvaWQpCj4gK3sKPiArCXJldHVybiByb3VuZHVwKHNpemVvZihzdHJ1Y3Qgc3lt Ym9sX2NvdW50cyksIDE2KTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBzaXplX3QgaGFudHJv X3ZwOV90aWxlX2luZm9fc2l6ZSh2b2lkKQo+ICt7Cj4gKwlyZXR1cm4gcm91bmR1cCgoTUFYX1RJ TEVfQ09MUyAqIE1BWF9USUxFX1JPV1MgKiA0ICogc2l6ZW9mKHUxNikgKyAxNSArIDE2KSAmIH4w eGYsIDE2KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgKmdldF9jb2VmZnNfYXJyKHN0cnVjdCBz eW1ib2xfY291bnRzICpjbnRzLCBpbnQgaSwgaW50IGosIGludCBrLCBpbnQgbCwgaW50IG0pCj4g K3sKPiArCWlmIChpID09IDApCj4gKwkJcmV0dXJuICZjbnRzLT5jb3VudF9jb2VmZnNbal1ba11b bF1bbV07Cj4gKwo+ICsJaWYgKGkgPT0gMSkKPiArCQlyZXR1cm4gJmNudHMtPmNvdW50X2NvZWZm czh4OFtqXVtrXVtsXVttXTsKPiArCj4gKwlpZiAoaSA9PSAyKQo+ICsJCXJldHVybiAmY250cy0+ Y291bnRfY29lZmZzMTZ4MTZbal1ba11bbF1bbV07Cj4gKwo+ICsJaWYgKGkgPT0gMykKPiArCQly ZXR1cm4gJmNudHMtPmNvdW50X2NvZWZmczMyeDMyW2pdW2tdW2xdW21dOwo+ICsKPiArCXJldHVy biBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCAqZ2V0X2VvYnMxKHN0cnVjdCBzeW1ib2xf Y291bnRzICpjbnRzLCBpbnQgaSwgaW50IGosIGludCBrLCBpbnQgbCwgaW50IG0pCj4gK3sKPiAr CWlmIChpID09IDApCj4gKwkJcmV0dXJuICZjbnRzLT5jb3VudF9jb2VmZnNbal1ba11bbF1bbV1b M107Cj4gKwo+ICsJaWYgKGkgPT0gMSkKPiArCQlyZXR1cm4gJmNudHMtPmNvdW50X2NvZWZmczh4 OFtqXVtrXVtsXVttXVszXTsKPiArCj4gKwlpZiAoaSA9PSAyKQo+ICsJCXJldHVybiAmY250cy0+ Y291bnRfY29lZmZzMTZ4MTZbal1ba11bbF1bbV1bM107Cj4gKwo+ICsJaWYgKGkgPT0gMykKPiAr CQlyZXR1cm4gJmNudHMtPmNvdW50X2NvZWZmczMyeDMyW2pdW2tdW2xdW21dWzNdOwo+ICsKPiAr CXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIElOTkVSX0xPT1AgXAo+ICsJZG8gewkJ CQkJCQkJCQlcCj4gKwkJZm9yIChtID0gMDsgbSA8IEFSUkFZX1NJWkUodnA5X2N0eC0+Y250cy5j b2VmZltpXVswXVswXVswXSk7ICsrbSkgewlcCj4gKwkJCXZwOV9jdHgtPmNudHMuY29lZmZbaV1b al1ba11bbF1bbV0gPQkJCQlcCj4gKwkJCQlnZXRfY29lZmZzX2FycihjbnRzLCBpLCBqLCBrLCBs LCBtKTsJCQlcCj4gKwkJCXZwOV9jdHgtPmNudHMuZW9iW2ldW2pdW2tdW2xdW21dWzBdID0JCQkJ XAo+ICsJCQkJJmNudHMtPmNvdW50X2VvYnNbaV1bal1ba11bbF1bbV07CQkJXAo+ICsJCQl2cDlf Y3R4LT5jbnRzLmVvYltpXVtqXVtrXVtsXVttXVsxXSA9CQkJCVwKPiArCQkJCWdldF9lb2JzMShj bnRzLCBpLCBqLCBrLCBsLCBtKTsJCQkJXAo+ICsJCX0JCQkJCQkJCQlcCj4gKwl9IHdoaWxlICgw KQo+ICsKPiArc3RhdGljIHZvaWQgaW5pdF92NGwyX3ZwOV9jb3VudF90Ymwoc3RydWN0IGhhbnRy b19jdHggKmN0eCkKPiArewo+ICsJc3RydWN0IGhhbnRyb192cDlfZGVjX2h3X2N0eCAqdnA5X2N0 eCA9ICZjdHgtPnZwOV9kZWM7Cj4gKwlzdHJ1Y3Qgc3ltYm9sX2NvdW50cyAqY250cyA9IHZwOV9j dHgtPm1pc2MuY3B1ICsgdnA5X2N0eC0+Y3R4X2NvdW50ZXJzX29mZnNldDsKPiArCWludCBpLCBq LCBrLCBsLCBtOwo+ICsKPiArCXZwOV9jdHgtPmNudHMucGFydGl0aW9uID0gJmNudHMtPnBhcnRp dGlvbl9jb3VudHM7Cj4gKwl2cDlfY3R4LT5jbnRzLnNraXAgPSAmY250cy0+bWJza2lwX2NvdW50 Owo+ICsJdnA5X2N0eC0+Y250cy5pbnRyYV9pbnRlciA9ICZjbnRzLT5pbnRyYV9pbnRlcl9jb3Vu dDsKPiArCXZwOV9jdHgtPmNudHMudHgzMnAgPSAmY250cy0+dHgzMngzMl9jb3VudDsKPiArCS8q Cj4gKwkgKiBnMiBoYXJkd2FyZSB1c2VzIHR4MTZ4MTZfY291bnRbMl1bM10sIHdoaWxlIHRoZSBh cGkKPiArCSAqIGV4cGVjdHMgdHgxNnBbMl1bNF0sIHNvIHRoaXMgbXVzdCBiZSBleHBsaWNpdGx5 IGNvcGllZAo+ICsJICogaW50byB2cDlfY3R4LT5jbnRzLnR4MTZwIHdoZW4gcGFzc2luZyB0aGUg ZGF0YSB0byB0aGUKPiArCSAqIHZwOSBsaWJyYXJ5IGZ1bmN0aW9uCj4gKwkgKi8KPiArCXZwOV9j dHgtPmNudHMudHg4cCA9ICZjbnRzLT50eDh4OF9jb3VudDsKPiArCj4gKwl2cDlfY3R4LT5jbnRz LnlfbW9kZSA9ICZjbnRzLT5zYl95bW9kZV9jb3VudHM7Cj4gKwl2cDlfY3R4LT5jbnRzLnV2X21v ZGUgPSAmY250cy0+dXZfbW9kZV9jb3VudHM7Cj4gKwl2cDlfY3R4LT5jbnRzLmNvbXAgPSAmY250 cy0+Y29tcF9pbnRlcl9jb3VudDsKPiArCXZwOV9jdHgtPmNudHMuY29tcF9yZWYgPSAmY250cy0+ Y29tcF9yZWZfY291bnQ7Cj4gKwl2cDlfY3R4LT5jbnRzLnNpbmdsZV9yZWYgPSAmY250cy0+c2lu Z2xlX3JlZl9jb3VudDsKPiArCXZwOV9jdHgtPmNudHMuZmlsdGVyID0gJmNudHMtPnN3aXRjaGFi bGVfaW50ZXJwX2NvdW50czsKPiArCXZwOV9jdHgtPmNudHMubXZfam9pbnQgPSAmY250cy0+bXZf Y291bnRzLmpvaW50czsKPiArCXZwOV9jdHgtPmNudHMuc2lnbiA9ICZjbnRzLT5tdl9jb3VudHMu c2lnbjsKPiArCXZwOV9jdHgtPmNudHMuY2xhc3NlcyA9ICZjbnRzLT5tdl9jb3VudHMuY2xhc3Nl czsKPiArCXZwOV9jdHgtPmNudHMuY2xhc3MwID0gJmNudHMtPm12X2NvdW50cy5jbGFzczA7Cj4g Kwl2cDlfY3R4LT5jbnRzLmJpdHMgPSAmY250cy0+bXZfY291bnRzLmJpdHM7Cj4gKwl2cDlfY3R4 LT5jbnRzLmNsYXNzMF9mcCA9ICZjbnRzLT5tdl9jb3VudHMuY2xhc3MwX2ZwOwo+ICsJdnA5X2N0 eC0+Y250cy5mcCA9ICZjbnRzLT5tdl9jb3VudHMuZnA7Cj4gKwl2cDlfY3R4LT5jbnRzLmNsYXNz MF9ocCA9ICZjbnRzLT5tdl9jb3VudHMuY2xhc3MwX2hwOwo+ICsJdnA5X2N0eC0+Y250cy5ocCA9 ICZjbnRzLT5tdl9jb3VudHMuaHA7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo dnA5X2N0eC0+Y250cy5jb2VmZik7ICsraSkKPiArCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0la RSh2cDlfY3R4LT5jbnRzLmNvZWZmW2ldKTsgKytqKQo+ICsJCQlmb3IgKGsgPSAwOyBrIDwgQVJS QVlfU0laRSh2cDlfY3R4LT5jbnRzLmNvZWZmW2ldWzBdKTsgKytrKQo+ICsJCQkJZm9yIChsID0g MDsgbCA8IEFSUkFZX1NJWkUodnA5X2N0eC0+Y250cy5jb2VmZltpXVswXVswXSk7ICsrbCkKPiAr CQkJCQlJTk5FUl9MT09QOwo+ICt9Cj4gKwo+ICtpbnQgaGFudHJvX3ZwOV9kZWNfaW5pdChzdHJ1 Y3QgaGFudHJvX2N0eCAqY3R4KQo+ICt7Cj4gKwlzdHJ1Y3QgaGFudHJvX2RldiAqdnB1ID0gY3R4 LT5kZXY7Cj4gKwljb25zdCBzdHJ1Y3QgaGFudHJvX3ZhcmlhbnQgKnZhcmlhbnQgPSB2cHUtPnZh cmlhbnQ7Cj4gKwlzdHJ1Y3QgaGFudHJvX3ZwOV9kZWNfaHdfY3R4ICp2cDlfZGVjID0gJmN0eC0+ dnA5X2RlYzsKPiArCXN0cnVjdCBoYW50cm9fYXV4X2J1ZiAqdGlsZV9lZGdlID0gJnZwOV9kZWMt PnRpbGVfZWRnZTsKPiArCXN0cnVjdCBoYW50cm9fYXV4X2J1ZiAqc2VnbWVudF9tYXAgPSAmdnA5 X2RlYy0+c2VnbWVudF9tYXA7Cj4gKwlzdHJ1Y3QgaGFudHJvX2F1eF9idWYgKm1pc2MgPSAmdnA5 X2RlYy0+bWlzYzsKPiArCXUzMiBpLCBtYXhfd2lkdGgsIG1heF9oZWlnaHQsIHNpemU7Cj4gKwo+ ICsJaWYgKHZhcmlhbnQtPm51bV9kZWNfZm10cyA8IDEpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g Kwo+ICsJZm9yIChpID0gMDsgaSA8IHZhcmlhbnQtPm51bV9kZWNfZm10czsgKytpKQo+ICsJCWlm ICh2YXJpYW50LT5kZWNfZm10c1tpXS5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX1ZQOV9GUkFNRSkK PiArCQkJYnJlYWs7Cj4gKwo+ICsJaWYgKGkgPT0gdmFyaWFudC0+bnVtX2RlY19mbXRzKQo+ICsJ CXJldHVybiAtRUlOVkFMOwo+ICsKPiArCW1heF93aWR0aCA9IHZwdS0+dmFyaWFudC0+ZGVjX2Zt dHNbaV0uZnJtc2l6ZS5tYXhfd2lkdGg7Cj4gKwltYXhfaGVpZ2h0ID0gdnB1LT52YXJpYW50LT5k ZWNfZm10c1tpXS5mcm1zaXplLm1heF9oZWlnaHQ7Cj4gKwo+ICsJc2l6ZSA9IGhhbnRyb192cDlf dGlsZV9maWx0ZXJfc2l6ZShtYXhfaGVpZ2h0KTsKPiArCXZwOV9kZWMtPmJzZF9jdHJsX29mZnNl dCA9IHNpemU7Cj4gKwlzaXplICs9IGhhbnRyb192cDlfYnNkX2NvbnRyb2xfc2l6ZShtYXhfaGVp Z2h0KTsKPiArCj4gKwl0aWxlX2VkZ2UtPmNwdSA9IGRtYV9hbGxvY19jb2hlcmVudCh2cHUtPmRl diwgc2l6ZSwgJnRpbGVfZWRnZS0+ZG1hLCBHRlBfS0VSTkVMKTsKPiArCWlmICghdGlsZV9lZGdl LT5jcHUpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJdGlsZV9lZGdlLT5zaXplID0gc2l6 ZTsKPiArCW1lbXNldCh0aWxlX2VkZ2UtPmNwdSwgMCwgc2l6ZSk7Cj4gKwo+ICsJc2l6ZSA9IGhh bnRyb192cDlfc2VnbWVudF9tYXBfc2l6ZShtYXhfd2lkdGgsIG1heF9oZWlnaHQpOwo+ICsJdnA5 X2RlYy0+c2VnbWVudF9tYXBfc2l6ZSA9IHNpemU7Cj4gKwlzaXplICo9IDI7IC8qIHdlIG5lZWQg dHdvIGFyZWFzIG9mIHRoaXMgc2l6ZSwgdXNlZCBhbHRlcm5hdGVseSAqLwo+ICsKPiArCXNlZ21l bnRfbWFwLT5jcHUgPSBkbWFfYWxsb2NfY29oZXJlbnQodnB1LT5kZXYsIHNpemUsICZzZWdtZW50 X21hcC0+ZG1hLCBHRlBfS0VSTkVMKTsKPiArCWlmICghc2VnbWVudF9tYXAtPmNwdSkKPiArCQln b3RvIGVycl9zZWdtZW50X21hcDsKPiArCj4gKwlzZWdtZW50X21hcC0+c2l6ZSA9IHNpemU7Cj4g KwltZW1zZXQoc2VnbWVudF9tYXAtPmNwdSwgMCwgc2l6ZSk7Cj4gKwo+ICsJc2l6ZSA9IGhhbnRy b192cDlfcHJvYl90YWJfc2l6ZSgpOwo+ICsJdnA5X2RlYy0+Y3R4X2NvdW50ZXJzX29mZnNldCA9 IHNpemU7Cj4gKwlzaXplICs9IGhhbnRyb192cDlfY291bnRfdGFiX3NpemUoKTsKPiArCXZwOV9k ZWMtPnRpbGVfaW5mb19vZmZzZXQgPSBzaXplOwo+ICsJc2l6ZSArPSBoYW50cm9fdnA5X3RpbGVf aW5mb19zaXplKCk7Cj4gKwo+ICsJbWlzYy0+Y3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50KHZwdS0+ ZGV2LCBzaXplLCAmbWlzYy0+ZG1hLCBHRlBfS0VSTkVMKTsKPiArCWlmICghbWlzYy0+Y3B1KQo+ ICsJCWdvdG8gZXJyX21pc2M7Cj4gKwo+ICsJbWlzYy0+c2l6ZSA9IHNpemU7Cj4gKwltZW1zZXQo bWlzYy0+Y3B1LCAwLCBzaXplKTsKPiArCj4gKwlpbml0X3Y0bDJfdnA5X2NvdW50X3RibChjdHgp Owo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyX21pc2M6Cj4gKwlkbWFfZnJlZV9jb2hlcmVu dCh2cHUtPmRldiwgc2VnbWVudF9tYXAtPnNpemUsIHNlZ21lbnRfbWFwLT5jcHUsIHNlZ21lbnRf bWFwLT5kbWEpOwo+ICsKPiArZXJyX3NlZ21lbnRfbWFwOgo+ICsJZG1hX2ZyZWVfY29oZXJlbnQo dnB1LT5kZXYsIHRpbGVfZWRnZS0+c2l6ZSwgdGlsZV9lZGdlLT5jcHUsIHRpbGVfZWRnZS0+ZG1h KTsKPiArCj4gKwlyZXR1cm4gLUVOT01FTTsKPiArfQo+ICsKPiArdm9pZCBoYW50cm9fdnA5X2Rl Y19leGl0KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gK3sKPiArCXN0cnVjdCBoYW50cm9fZGV2 ICp2cHUgPSBjdHgtPmRldjsKPiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggKnZwOV9k ZWMgPSAmY3R4LT52cDlfZGVjOwo+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmICp0aWxlX2VkZ2Ug PSAmdnA5X2RlYy0+dGlsZV9lZGdlOwo+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmICpzZWdtZW50 X21hcCA9ICZ2cDlfZGVjLT5zZWdtZW50X21hcDsKPiArCXN0cnVjdCBoYW50cm9fYXV4X2J1ZiAq bWlzYyA9ICZ2cDlfZGVjLT5taXNjOwo+ICsKPiArCWRtYV9mcmVlX2NvaGVyZW50KHZwdS0+ZGV2 LCBtaXNjLT5zaXplLCBtaXNjLT5jcHUsIG1pc2MtPmRtYSk7Cj4gKwlkbWFfZnJlZV9jb2hlcmVu dCh2cHUtPmRldiwgc2VnbWVudF9tYXAtPnNpemUsIHNlZ21lbnRfbWFwLT5jcHUsIHNlZ21lbnRf bWFwLT5kbWEpOwo+ICsJZG1hX2ZyZWVfY29oZXJlbnQodnB1LT5kZXYsIHRpbGVfZWRnZS0+c2l6 ZSwgdGlsZV9lZGdlLT5jcHUsIHRpbGVfZWRnZS0+ZG1hKTsKPiArfQo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb192cDkuaCBiL2RyaXZlcnMvc3RhZ2lu Zy9tZWRpYS9oYW50cm8vaGFudHJvX3ZwOS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMDAwMDAuLmM3ZjRiZDNmZjhkZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2 ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb192cDkuaAo+IEBAIC0wLDAgKzEsMTAzIEBA Cj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCj4gKy8qCj4gKyAqIEhh bnRybyBWUDkgY29kZWMgZHJpdmVyCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAyMSBDb2xs YWJvcmEgTHRkLgo+ICsgKi8KPiArCj4gK3N0cnVjdCBoYW50cm9fZzJfbXZfcHJvYnMgewo+ICsJ dTggam9pbnRbM107Cj4gKwl1OCBzaWduWzJdOwo+ICsJdTggY2xhc3MwX2JpdFsyXVsxXTsKPiAr CXU4IGZyWzJdWzNdOwo+ICsJdTggY2xhc3MwX2hwWzJdOwo+ICsJdTggaHBbMl07Cj4gKwl1OCBj bGFzc2VzWzJdWzEwXTsKPiArCXU4IGNsYXNzMF9mclsyXVsyXVszXTsKPiArCXU4IGJpdHNbMl1b MTBdOwo+ICt9Owo+ICsKPiArc3RydWN0IGhhbnRyb19nMl9wcm9icyB7Cj4gKwl1OCBpbnRlcl9t b2RlWzddWzRdOwo+ICsJdTggaXNfaW50ZXJbNF07Cj4gKwl1OCB1dl9tb2RlWzEwXVs4XTsKPiAr CXU4IHR4OFsyXVsxXTsKPiArCXU4IHR4MTZbMl1bMl07Cj4gKwl1OCB0eDMyWzJdWzNdOwo+ICsJ dTggeV9tb2RlX3RhaWxbNF1bMV07Cj4gKwl1OCB5X21vZGVbNF1bOF07Cj4gKwl1OCBwYXJ0aXRp b25bMl1bMTZdWzRdOyAvKiBba2V5ZnJhbWVdW11bXSwgW2ludGVyXVtdW10gKi8KPiArCXU4IHV2 X21vZGVfdGFpbFsxMF1bMV07Cj4gKwl1OCBpbnRlcnBfZmlsdGVyWzRdWzJdOwo+ICsJdTggY29t cF9tb2RlWzVdOwo+ICsJdTggc2tpcFszXTsKPiArCj4gKwl1OCBwYWQxWzFdOwo+ICsKPiArCXN0 cnVjdCBoYW50cm9fZzJfbXZfcHJvYnMgbXY7Cj4gKwo+ICsJdTggc2luZ2xlX3JlZls1XVsyXTsK PiArCXU4IGNvbXBfcmVmWzVdOwo+ICsKPiArCXU4IHBhZDJbMTddOwo+ICsKPiArCXU4IGNvZWZb NF1bMl1bMl1bNl1bNl1bNF07Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgaGFudHJvX2cyX2FsbF9wcm9i cyB7Cj4gKwl1OCBrZl95X21vZGVfcHJvYlsxMF1bMTBdWzhdOwo+ICsKPiArCXU4IGtmX3lfbW9k ZV9wcm9iX3RhaWxbMTBdWzEwXVsxXTsKPiArCXU4IHJlZl9wcmVkX3Byb2JzWzNdOwo+ICsJdTgg bWJfc2VnbWVudF90cmVlX3Byb2JzWzddOwo+ICsJdTggc2VnbWVudF9wcmVkX3Byb2JzWzNdOwo+ ICsJdTggcmVmX3Njb3Jlc1s0XTsKPiArCXU4IHByb2JfY29tcHByZWRbMl07Cj4gKwo+ICsJdTgg cGFkMVs5XTsKPiArCj4gKwl1OCBrZl91dl9tb2RlX3Byb2JbMTBdWzhdOwo+ICsJdTgga2ZfdXZf bW9kZV9wcm9iX3RhaWxbMTBdWzFdOwo+ICsKPiArCXU4IHBhZDJbNl07Cj4gKwo+ICsJc3RydWN0 IGhhbnRyb19nMl9wcm9icyBwcm9iczsKPiArfTsKPiArCj4gK3N0cnVjdCBtdl9jb3VudHMgewo+ ICsJdTMyIGpvaW50c1s0XTsKPiArCXUzMiBzaWduWzJdWzJdOwo+ICsJdTMyIGNsYXNzZXNbMl1b MTFdOwo+ICsJdTMyIGNsYXNzMFsyXVsyXTsKPiArCXUzMiBiaXRzWzJdWzEwXVsyXTsKPiArCXUz MiBjbGFzczBfZnBbMl1bMl1bNF07Cj4gKwl1MzIgZnBbMl1bNF07Cj4gKwl1MzIgY2xhc3MwX2hw WzJdWzJdOwo+ICsJdTMyIGhwWzJdWzJdOwo+ICt9Owo+ICsKPiArc3RydWN0IHN5bWJvbF9jb3Vu dHMgewo+ICsJdTMyIGludGVyX21vZGVfY291bnRzWzddWzNdWzJdOwo+ICsJdTMyIHNiX3ltb2Rl X2NvdW50c1s0XVsxMF07Cj4gKwl1MzIgdXZfbW9kZV9jb3VudHNbMTBdWzEwXTsKPiArCXUzMiBw YXJ0aXRpb25fY291bnRzWzE2XVs0XTsKPiArCXUzMiBzd2l0Y2hhYmxlX2ludGVycF9jb3VudHNb NF1bM107Cj4gKwl1MzIgaW50cmFfaW50ZXJfY291bnRbNF1bMl07Cj4gKwl1MzIgY29tcF9pbnRl cl9jb3VudFs1XVsyXTsKPiArCXUzMiBzaW5nbGVfcmVmX2NvdW50WzVdWzJdWzJdOwo+ICsJdTMy IGNvbXBfcmVmX2NvdW50WzVdWzJdOwo+ICsJdTMyIHR4MzJ4MzJfY291bnRbMl1bNF07Cj4gKwl1 MzIgdHgxNngxNl9jb3VudFsyXVszXTsKPiArCXUzMiB0eDh4OF9jb3VudFsyXVsyXTsKPiArCXUz MiBtYnNraXBfY291bnRbM11bMl07Cj4gKwo+ICsJc3RydWN0IG12X2NvdW50cyBtdl9jb3VudHM7 Cj4gKwo+ICsJdTMyIGNvdW50X2NvZWZmc1syXVsyXVs2XVs2XVs0XTsKPiArCXUzMiBjb3VudF9j b2VmZnM4eDhbMl1bMl1bNl1bNl1bNF07Cj4gKwl1MzIgY291bnRfY29lZmZzMTZ4MTZbMl1bMl1b Nl1bNl1bNF07Cj4gKwl1MzIgY291bnRfY29lZmZzMzJ4MzJbMl1bMl1bNl1bNl1bNF07Cj4gKwo+ ICsJdTMyIGNvdW50X2VvYnNbNF1bMl1bMl1bNl1bNl07Cj4gK307Cj4gKwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2lteDhtX3ZwdV9ody5jIGIvZHJpdmVycy9z dGFnaW5nL21lZGlhL2hhbnRyby9pbXg4bV92cHVfaHcuYwo+IGluZGV4IGE0MGIxNjFlNTk1Ni4u NDU1YTEwN2ZmYjAyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8v aW14OG1fdnB1X2h3LmMKPiArKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2lteDht X3ZwdV9ody5jCj4gQEAgLTE1MCw2ICsxNTAsMTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBoYW50 cm9fZm10IGlteDhtX3ZwdV9nMl9kZWNfZm10c1tdID0gewo+ICAgCQkJLnN0ZXBfaGVpZ2h0ID0g TUJfRElNLAo+ICAgCQl9LAo+ICAgCX0sCj4gKwl7Cj4gKwkJLmZvdXJjYyA9IFY0TDJfUElYX0ZN VF9WUDlfRlJBTUUsCj4gKwkJLmNvZGVjX21vZGUgPSBIQU5UUk9fTU9ERV9WUDlfREVDLAo+ICsJ CS5tYXhfZGVwdGggPSAyLAo+ICsJCS5mcm1zaXplID0gewo+ICsJCQkubWluX3dpZHRoID0gNDgs Cj4gKwkJCS5tYXhfd2lkdGggPSAzODQwLAo+ICsJCQkuc3RlcF93aWR0aCA9IE1CX0RJTSwKPiAr CQkJLm1pbl9oZWlnaHQgPSA0OCwKPiArCQkJLm1heF9oZWlnaHQgPSAyMTYwLAo+ICsJCQkuc3Rl cF9oZWlnaHQgPSBNQl9ESU0sCj4gKwkJfSwKPiArCX0sCj4gICB9Owo+ICAgCj4gICBzdGF0aWMg aXJxcmV0dXJuX3QgaW14OG1fdnB1X2cxX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCj4gQEAg LTI0MSw2ICsyNTQsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBoYW50cm9fY29kZWNfb3BzIGlt eDhtcV92cHVfZzJfY29kZWNfb3BzW10gPSB7Cj4gICAJCS5pbml0ID0gaGFudHJvX2hldmNfZGVj X2luaXQsCj4gICAJCS5leGl0ID0gaGFudHJvX2hldmNfZGVjX2V4aXQsCj4gICAJfSwKPiArCVtI QU5UUk9fTU9ERV9WUDlfREVDXSA9IHsKPiArCQkucnVuID0gaGFudHJvX2cyX3ZwOV9kZWNfcnVu LAo+ICsJCS5kb25lID0gaGFudHJvX2cyX3ZwOV9kZWNfZG9uZSwKPiArCQkucmVzZXQgPSBpbXg4 bV92cHVfZzJfcmVzZXQsCj4gKwkJLmluaXQgPSBoYW50cm9fdnA5X2RlY19pbml0LAo+ICsJCS5l eGl0ID0gaGFudHJvX3ZwOV9kZWNfZXhpdCwKPiArCX0sCj4gICB9Owo+ICAgCj4gICAvKgo+IEBA IC0yODEsNyArMzAxLDcgQEAgY29uc3Qgc3RydWN0IGhhbnRyb192YXJpYW50IGlteDhtcV92cHVf ZzJfdmFyaWFudCA9IHsKPiAgIAkuZGVjX29mZnNldCA9IDB4MCwKPiAgIAkuZGVjX2ZtdHMgPSBp bXg4bV92cHVfZzJfZGVjX2ZtdHMsCj4gICAJLm51bV9kZWNfZm10cyA9IEFSUkFZX1NJWkUoaW14 OG1fdnB1X2cyX2RlY19mbXRzKSwKPiAtCS5jb2RlYyA9IEhBTlRST19IRVZDX0RFQ09ERVIsCj4g KwkuY29kZWMgPSBIQU5UUk9fSEVWQ19ERUNPREVSIHwgSEFOVFJPX1ZQOV9ERUNPREVSLAo+ICAg CS5jb2RlY19vcHMgPSBpbXg4bXFfdnB1X2cyX2NvZGVjX29wcywKPiAgIAkuaW5pdCA9IGlteDht cV92cHVfaHdfaW5pdCwKPiAgIAkucnVudGltZV9yZXN1bWUgPSBpbXg4bXFfcnVudGltZV9yZXN1 bWUsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51 eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVh ZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1h cm0ta2VybmVsCg==