From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CB437CD5BD2 for ; Tue, 26 May 2026 10:32:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=SetjSg9Ol/DlzhRZ4ZXJkHCxrHRfe6ulesZk7uTI0Jg=; b=sahIWsJlRlegpo TMgHUKhR4I18q5utyWYM7ZqxKqZe1tkUbvcWOCZ+q1iGsJKt23vYCBvQCT1tMan5hE3rPMlUn/dxc ar59yCpbiVXGNeMUmCbhI5r4GxCPPjIFSunVUBRzBszNV/WBUqXV8EIODNilKARLEjHZ5d/f+iavL PNFokmU7bvpQ/J/lxiPHK4kyFo/w4+humJtIPlH5jLxXIuNwXJsMGoNhw3YodpE2NwyBSHhLEZ62p gcbpb7VRSpqLz70o22GNBKLEp85KcyXho5iU8TPwvOwU7NBJtqNY1BTcNxEHVQeKAoI28BxfC6aLP zx4fNVhA9KUkY+2iyfrQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wRp5U-00000001erF-0qlp; Tue, 26 May 2026 10:32:40 +0000 Received: from sea.source.kernel.org ([172.234.252.31]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wRp5Q-00000001eqI-1vua for linux-mtd@lists.infradead.org; Tue, 26 May 2026 10:32:39 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id D0DBA43E08; Tue, 26 May 2026 10:32:35 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id BB8651F000E9; Tue, 26 May 2026 10:32:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779791555; bh=tBahg5oyQgUZGy9VQKID7RcRHgfVURKuReK8ETaAE9w=; h=From:To:Cc:Subject:Date; b=cZM/cMOVIytpao8hYqkokTPqei2lid5Lwfst7iQdruiRVRnZSuhYf+iSp/V90Nub/ jlnG3D5+uKwskHsilmDrLMeakEgIu4LbunA0i1AsfGyho+hzTQogzAGT80QFv2umBs YYUhSSjU7urOK4CAFb5uYl38qt2gBVciHyQkFhFuF8eRGHgxCsaA1CXRaE6qUgbjAh QEMS5R0fPPF0YaEuYEq7tQhFmrZXb3peFIoV4Y4FZ2qDwXHMQRRNSKpJQx69i27WNL JtufMp6eAox0cQAYh4twlZaiEyT7op2EWm3xeuM58scvgroynGEy7CRX2oB6nO5sPg 20dZVlBuYQfeA== From: Arnd Bergmann To: Miquel Raynal , Richard Weinberger , Vignesh Raghavendra Cc: Arnd Bergmann , Randy Dunlap , Andy Shevchenko , linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org Subject: [PATCH 1/3] =?UTF-8?q?mtd:=20maps:=20remove=20AMD=20=C3=89lan=20s?= =?UTF-8?q?pecific=20drivers?= Date: Tue, 26 May 2026 12:32:04 +0200 Message-Id: <20260526103227.3152003-1-arnd@kernel.org> X-Mailer: git-send-email 2.39.5 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260526_033236_581585_EF600AC7 X-CRM114-Status: GOOD ( 32.83 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org RnJvbTogQXJuZCBCZXJnbWFubiA8YXJuZEBhcm5kYi5kZT4KClRoZXJlIGFyZSBmb3VyIE1URCBt YXBzIGRyaXZlcnMgdGhhdCBhcmUgdXNlZCB3aXRoIEFNRCDDiWxhbiBTb0NzLgpTaW5jZSA0ODYt Y2xhc3MgQ1BVIHN1cHBvcnQgd2FzIHJlbW92ZWQgaW4gY29tbWl0IDhiNzkzYTkyZDg2MiAoIng4 Ni9jcHU6ClJlbW92ZSBNNDg2L000ODZTWC9FTEFOIHN1cHBvcnQiKSwgaXQgaXMgbm8gbG9uZ2Vy IHBvc3NpYmxlIHRvIGFjdHVhbGx5CnVzZSB0aGVzZSwgc28ganVzdCByZW1vdmUgdGhlIGRyaXZl cnMgZW50aXJlbHkuCgpTaWduZWQtb2ZmLWJ5OiBBcm5kIEJlcmdtYW5uIDxhcm5kQGFybmRiLmRl PgotLS0KIGRyaXZlcnMvbXRkL21hcHMvS2NvbmZpZyAgICAgICAgfCAgNDAgLS0tCiBkcml2ZXJz L210ZC9tYXBzL01ha2VmaWxlICAgICAgIHwgICA0IC0KIGRyaXZlcnMvbXRkL21hcHMvbmV0c2M1 MjAuYyAgICAgfCAxMjcgLS0tLS0tLS0tCiBkcml2ZXJzL210ZC9tYXBzL25ldHRlbC5jICAgICAg IHwgNDYyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL210ZC9tYXBz L3NjNTIwY2RwLmMgICAgIHwgMjk0IC0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL210ZC9t YXBzL3RzNTUwMF9mbGFzaC5jIHwgMTA4IC0tLS0tLS0tCiA2IGZpbGVzIGNoYW5nZWQsIDEwMzUg ZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tdGQvbWFwcy9uZXRzYzUy MC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tdGQvbWFwcy9uZXR0ZWwuYwogZGVsZXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbXRkL21hcHMvc2M1MjBjZHAuYwogZGVsZXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvbXRkL21hcHMvdHM1NTAwX2ZsYXNoLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJz L210ZC9tYXBzL0tjb25maWcgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKaW5kZXggOTlkNWZm OWExZmJlLi43ODRkYmExNGU5MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZp ZworKysgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKQEAgLTEyNSw0MCArMTI1LDYgQEAgY29u ZmlnIE1URF9TVU5fVUZMQVNICiAJICBTdW4gTWljcm9zeXN0ZW1zIGJvYXJkc2V0cy4gIFRoaXMg ZHJpdmVyIHdpbGwgcmVxdWlyZSBDRkkgc3VwcG9ydAogCSAgaW4gdGhlIGtlcm5lbCwgc28gaWYg eW91IGRpZCBub3QgZW5hYmxlIENGSSBwcmV2aW91c2x5LCBkbyB0aGF0IG5vdy4KIAotY29uZmln IE1URF9TQzUyMENEUAotCXRyaXN0YXRlICJDRkkgRmxhc2ggZGV2aWNlIG1hcHBlZCBvbiBBTUQg U0M1MjAgQ0RQIgotCWRlcGVuZHMgb24gKE1FTEFOIHx8IENPTVBJTEVfVEVTVCkgJiYgTVREX0NG SQotCWhlbHAKLQkgIFRoZSBTQzUyMCBDRFAgYm9hcmQgaGFzIHR3byBiYW5rcyBvZiBDRkktY29t cGxpYW50IGNoaXBzIGFuZCBvbmUKLQkgIER1YWwtaW4tbGluZSBKRURFQyBjaGlwLiBUaGlzICdt YXBwaW5nJyBkcml2ZXIgc3VwcG9ydHMgdGhhdAotCSAgYXJyYW5nZW1lbnQsIGltcGxlbWVudGlu ZyB0aHJlZSBNVEQgZGV2aWNlcy4KLQotY29uZmlnIE1URF9ORVRTQzUyMAotCXRyaXN0YXRlICJD RkkgRmxhc2ggZGV2aWNlIG1hcHBlZCBvbiBBTUQgTmV0U2M1MjAiCi0JZGVwZW5kcyBvbiAoTUVM QU4gfHwgQ09NUElMRV9URVNUKSAmJiBNVERfQ0ZJCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIGFj Y2VzcyByb3V0aW5lcyBmb3IgdGhlIGZsYXNoIGNoaXBzIG9uIHRoZSBBTUQgTmV0U2M1MjAKLQkg IGRlbW9uc3RyYXRpb24gYm9hcmQuIElmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBib2FyZHMgYW5k IHdvdWxkIGxpa2UKLQkgIHRvIHVzZSB0aGUgZmxhc2ggY2hpcHMgb24gaXQsIHNheSAnWScuCi0K LWNvbmZpZyBNVERfVFM1NTAwCi0JdHJpc3RhdGUgIkpFREVDIEZsYXNoIGRldmljZSBtYXBwZWQg b24gVGVjaG5vbG9naWMgU3lzdGVtcyBUUy01NTAwIgotCWRlcGVuZHMgb24gVFM1NTAwIHx8IENP TVBJTEVfVEVTVAotCXNlbGVjdCBNVERfSkVERUNQUk9CRQotCXNlbGVjdCBNVERfQ0ZJX0FNRFNU RAotCWhlbHAKLQkgIFRoaXMgcHJvdmlkZXMgYSBkcml2ZXIgZm9yIHRoZSBvbi1ib2FyZCBmbGFz aCBvZiB0aGUgVGVjaG5vbG9naWMKLQkgIFN5c3RlbSdzIFRTLTU1MDAgYm9hcmQuIFRoZSAyTUIg Zmxhc2ggaXMgc3BsaXQgaW50byAzIHBhcnRpdGlvbnMKLQkgIHdoaWNoIGFyZSBhY2Nlc3NlZCBh cyBzZXBhcmF0ZSBNVEQgZGV2aWNlcy4KLQotCSAgbXRkMCBhbmQgbXRkMiBhcmUgdGhlIHR3byBC SU9TIGRyaXZlcywgd2hpY2ggdXNlIHRoZSByZXNpZGVudAotCSAgZmxhc2ggZGlzayAoUkZEKSBm bGFzaCB0cmFuc2xhdGlvbiBsYXllci4KLQotCSAgbXRkMSBhbGxvd3MgeW91IHRvIHJlcHJvZ3Jh bSB5b3VyIEJJT1MuIEJFIFZFUlkgQ0FSRUZVTC4KLQotCSAgTm90ZSB0aGF0IGp1bXBlciAzICgi V3JpdGUgRW5hYmxlIERyaXZlIEEiKSBtdXN0IGJlIHNldAotCSAgb3RoZXJ3aXNlIGRldGVjdGlv biB3b24ndCBzdWNjZWVkLgotCiBjb25maWcgTVREX1NCQ19HWFgKIAl0cmlzdGF0ZSAiQ0ZJIEZs YXNoIGRldmljZSBtYXBwZWQgb24gQXJjb20gU0JDLUdYeCBib2FyZHMiCiAJZGVwZW5kcyBvbiBY ODYgJiYgTVREX0NGSV9JTlRFTEVYVCAmJiBNVERfQ09NUExFWF9NQVBQSU5HUwpAQCAtMjM4LDEy ICsyMDQsNiBAQCBjb25maWcgTVREX1RTVU5BTUkKIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUg Zmxhc2ggY2hpcCBvbiBUc3VuYW1pIFRJRyBidXMuCiAKLWNvbmZpZyBNVERfTkVUdGVsCi0JdHJp c3RhdGUgIkNGSSBmbGFzaCBkZXZpY2Ugb24gU25hcEdlYXIvU2VjdXJlRWRnZSIKLQlkZXBlbmRz IG9uIFg4NiAmJiBNVERfSkVERUNQUk9CRQotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIGZsYXNoIGNo aXBzIG9uIE5FVHRlbC9TZWN1cmVFZGdlL1NuYXBHZWFyIGJvYXJkcy4KLQogY29uZmlnIE1URF9M QU5USVEKIAl0cmlzdGF0ZSAiTGFudGlxIFNvQyBOT1Igc3VwcG9ydCIKIAlkZXBlbmRzIG9uIExB TlRJUQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZSBiL2RyaXZlcnMvbXRk L21hcHMvTWFrZWZpbGUKaW5kZXggNTFhZjFkMmViZDUyLi4xNTdmOTExZjg2ZDggMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtl ZmlsZQpAQCAtMjYsMTYgKzI2LDEyIEBAIG9iai0kKENPTkZJR19NVERfUElTTU8pCQkrPSBwaXNt by5vCiBvYmotJChDT05GSUdfTVREX1BDTUNJQSkJKz0gcGNtY2lhbXRkLm8KIG9iai0kKENPTkZJ R19NVERfU0ExMTAwKQkrPSBzYTExMDAtZmxhc2gubwogb2JqLSQoQ09ORklHX01URF9TQkNfR1hY KQkrPSBzYmNfZ3h4Lm8KLW9iai0kKENPTkZJR19NVERfU0M1MjBDRFApCSs9IHNjNTIwY2RwLm8K LW9iai0kKENPTkZJR19NVERfTkVUU0M1MjApCSs9IG5ldHNjNTIwLm8KLW9iai0kKENPTkZJR19N VERfVFM1NTAwKQkrPSB0czU1MDBfZmxhc2gubwogb2JqLSQoQ09ORklHX01URF9TVU5fVUZMQVNI KQkrPSBzdW5fdWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfU0N4MjAwX0RPQ0ZMQVNIKSs9IHNj eDIwMF9kb2NmbGFzaC5vCiBvYmotJChDT05GSUdfTVREX1NPTFVUSU9ORU5HSU5FKSs9IHNvbHV0 aW9uZW5naW5lLm8KIG9iai0kKENPTkZJR19NVERfUENJKQkJKz0gcGNpLm8KIG9iai0kKENPTkZJ R19NVERfSU1QQTcpCQkrPSBpbXBhNy5vCiBvYmotJChDT05GSUdfTVREX1VDTElOVVgpCSs9IHVj bGludXgubwotb2JqLSQoQ09ORklHX01URF9ORVR0ZWwpCSs9IG5ldHRlbC5vCiBvYmotJChDT05G SUdfTVREX1NDQjJfRkxBU0gpCSs9IHNjYjJfZmxhc2gubwogb2JqLSQoQ09ORklHX01URF9QTEFU UkFNKQkrPSBwbGF0LXJhbS5vCiBvYmotJChDT05GSUdfTVREX1ZNVSkJCSs9IHZtdS1mbGFzaC5v CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL25ldHNjNTIwLmMgYi9kcml2ZXJzL210ZC9t YXBzL25ldHNjNTIwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiYjY1MTYyNGYw NS4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvbXRkL21hcHMvbmV0c2M1MjAuYworKysgL2Rl di9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMC1vci1sYXRlcgotLyogbmV0c2M1MjAuYyAtLSBNVEQgbWFwIGRyaXZlciBmb3IgQU1EIE5l dFNjNTIwIERlbW9uc3RyYXRpb24gQm9hcmQKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgTWFy ayBMYW5nc2RvcmYgKG1hcmsubGFuZ3Nkb3JmQGFtZC5jb20pCi0gKgliYXNlZCBvbiBzYzUyMGNk cC5jIGJ5IFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMgR21iSAotICoKLSAqIFRoZSBOZXRTYzUy MCBpcyBhIGRlbW9uc3RyYXRpb24gYm9hcmQgZm9yIHRoZSBFbGFuIFNjNTIwIHByb2Nlc3NvciBh dmFpbGFibGUKLSAqIGZyb20gQU1ELiAgSXQgaGFzIGEgc2luZ2xlIGJhY2sgb2YgMTYgbWVncyBv ZiAzMi1iaXQgRmxhc2ggUk9NIGFuZCBhbm90aGVyCi0gKiAxNiBtZWdzIG9mIFNEUkFNLgotICov Ci0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgot I2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNs dWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGlu dXgvbXRkL21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0KLQotLyoK LSoqIFRoZSBzaW5nbGUsIDE2IG1lZ2FieXRlIGZsYXNoIGJhbmsgaXMgZGl2aWRlZCBpbnRvIGZv dXIgdmlydHVhbAotKiogcGFydGl0aW9ucy4gIFRoZSBmaXJzdCBwYXJ0aXRpb24gaXMgNzY4IEtp QiBhbmQgaXMgaW50ZW5kZWQgdG8KLSoqIHN0b3JlIHRoZSBrZXJuZWwgaW1hZ2UgbG9hZGVkIGJ5 IHRoZSBib290c3RyYXAgbG9hZGVyLiAgVGhlIHNlY29uZAotKiogcGFydGl0aW9uIGlzIDI1NiBL aUIgYW5kIGhvbGRzIHRoZSBCSU9TIGltYWdlLiAgVGhlIHRoaXJkCi0qKiBwYXJ0aXRpb24gaXMg MTQuNSBNaUIgYW5kIGlzIGludGVuZGVkIGZvciB0aGUgZmxhc2ggZmlsZSBzeXN0ZW0KLSoqIGlt YWdlLiAgVGhlIGxhc3QgcGFydGl0aW9uIGlzIDUxMiBLaUIgYW5kIGNvbnRhaW5zIGFub3RoZXIg Y29weQotKiogb2YgdGhlIEJJT1MgaW1hZ2UgYW5kIHRoZSByZXNldCB2ZWN0b3IuCi0qKgotKiog T25seSB0aGUgdGhpcmQgcGFydGl0aW9uIHNob3VsZCBiZSBtb3VudGVkLiAgVGhlIGZpcnN0IHBh cnRpdGlvbgotKiogc2hvdWxkIG5vdCBiZSBtb3VudGVkLCBidXQgaXQgY2FuIGVyYXNlZCBhbmQg d3JpdHRlbiB0byB1c2luZyB0aGUKLSoqIE1URCBjaGFyYWN0ZXIgcm91dGluZXMuICBUaGUgc2Vj b25kIGFuZCBmb3VydGggcGFydGl0aW9ucyBzaG91bGQKLSoqIG5vdCBiZSB0b3VjaGVkIC0gaXQg aXMgcG9zc2libGUgdG8gY29ycnVwdCB0aGUgQklPUyBpbWFnZSBieQotKiogbW91bnRpbmcgdGhl c2UgcGFydGl0aW9ucywgYW5kIHBvdGVudGlhbGx5IHRoZSBib2FyZCB3aWxsIG5vdCBiZQotKiog cmVjb3ZlcmFibGUgYWZ0ZXJ3YXJkcy4KLSovCi0KLS8qIHBhcnRpdGlvbl9pbmZvIGdpdmVzIGRl dGFpbHMgb24gdGhlIGxvZ2ljYWwgcGFydGl0aW9ucyB0aGF0IHRoZSBzcGxpdCB0aGUKLSAqIHNp bmdsZSBmbGFzaCBkZXZpY2UgaW50by4gSWYgdGhlIHNpemUgaWYgemVybyB3ZSB1c2UgdXAgdG8g dGhlIGVuZCBvZiB0aGUKLSAqIGRldmljZS4gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX3Bh cnRpdGlvbiBwYXJ0aXRpb25faW5mb1tdID0gewotICAgIHsKLQkgICAgLm5hbWUgPSAiTmV0U2M1 MjAgYm9vdCBrZXJuZWwiLAotCSAgICAub2Zmc2V0ID0gMCwKLQkgICAgLnNpemUgPSAweGMwMDAw Ci0gICAgfSwKLSAgICB7Ci0JICAgIC5uYW1lID0gIk5ldFNjNTIwIExvdyBCSU9TIiwKLQkgICAg Lm9mZnNldCA9IDB4YzAwMDAsCi0JICAgIC5zaXplID0gMHg0MDAwMAotICAgIH0sCi0gICAgewot CSAgICAubmFtZSA9ICJOZXRTYzUyMCBmaWxlIHN5c3RlbSIsCi0JICAgIC5vZmZzZXQgPSAweDEw MDAwMCwKLQkgICAgLnNpemUgPSAweGU4MDAwMAotICAgIH0sCi0gICAgewotCSAgICAubmFtZSA9 ICJOZXRTYzUyMCBIaWdoIEJJT1MiLAotCSAgICAub2Zmc2V0ID0gMHhmODAwMDAsCi0JICAgIC5z aXplID0gMHg4MDAwMAotICAgIH0sCi19OwotI2RlZmluZSBOVU1fUEFSVElUSU9OUyBBUlJBWV9T SVpFKHBhcnRpdGlvbl9pbmZvKQotCi0jZGVmaW5lIFdJTkRPV19TSVpFCTB4MDAxMDAwMDAKLSNk ZWZpbmUgV0lORE9XX0FERFIJMHgwMDIwMDAwMAotCi1zdGF0aWMgc3RydWN0IG1hcF9pbmZvIG5l dHNjNTIwX21hcCA9IHsKLQkubmFtZSA9ICJuZXRzYzUyMCBGbGFzaCBCYW5rIiwKLQkuc2l6ZSA9 IFdJTkRPV19TSVpFLAotCS5iYW5rd2lkdGggPSA0LAotCS5waHlzID0gV0lORE9XX0FERFIsCi19 OwotCi0jZGVmaW5lIE5VTV9GTEFTSF9CQU5LUwlBUlJBWV9TSVpFKG5ldHNjNTIwX21hcCkKLQot c3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqbXltdGQ7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRf bmV0c2M1MjAodm9pZCkKLXsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIk5ldFNjNTIwIGZsYXNoIGRl dmljZTogMHglTHggYXQgMHglTHhcbiIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKW5ldHNjNTIw X21hcC5zaXplLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyluZXRzYzUyMF9tYXAucGh5cyk7Ci0J bmV0c2M1MjBfbWFwLnZpcnQgPSBpb3JlbWFwKG5ldHNjNTIwX21hcC5waHlzLCBuZXRzYzUyMF9t YXAuc2l6ZSk7Ci0KLQlpZiAoIW5ldHNjNTIwX21hcC52aXJ0KSB7Ci0JCXByaW50aygiRmFpbGVk IHRvIGlvcmVtYXBcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlzaW1wbGVfbWFwX2luaXQo Jm5ldHNjNTIwX21hcCk7Ci0KLQlteW10ZCA9IGRvX21hcF9wcm9iZSgiY2ZpX3Byb2JlIiwgJm5l dHNjNTIwX21hcCk7Ci0JaWYoIW15bXRkKQotCQlteW10ZCA9IGRvX21hcF9wcm9iZSgibWFwX3Jh bSIsICZuZXRzYzUyMF9tYXApOwotCWlmKCFteW10ZCkKLQkJbXltdGQgPSBkb19tYXBfcHJvYmUo Im1hcF9yb20iLCAmbmV0c2M1MjBfbWFwKTsKLQotCWlmICghbXltdGQpIHsKLQkJaW91bm1hcChu ZXRzYzUyMF9tYXAudmlydCk7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCi0JbXltdGQtPm93bmVy ID0gVEhJU19NT0RVTEU7Ci0JbXRkX2RldmljZV9yZWdpc3RlcihteW10ZCwgcGFydGl0aW9uX2lu Zm8sIE5VTV9QQVJUSVRJT05TKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0 IGNsZWFudXBfbmV0c2M1MjAodm9pZCkKLXsKLQlpZiAobXltdGQpIHsKLQkJbXRkX2RldmljZV91 bnJlZ2lzdGVyKG15bXRkKTsKLQkJbWFwX2Rlc3Ryb3kobXltdGQpOwotCX0KLQlpZiAobmV0c2M1 MjBfbWFwLnZpcnQpIHsKLQkJaW91bm1hcChuZXRzYzUyMF9tYXAudmlydCk7Ci0JCW5ldHNjNTIw X21hcC52aXJ0ID0gTlVMTDsKLQl9Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfbmV0c2M1MjApOwot bW9kdWxlX2V4aXQoY2xlYW51cF9uZXRzYzUyMCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsK LU1PRFVMRV9BVVRIT1IoIk1hcmsgTGFuZ3Nkb3JmIDxtYXJrLmxhbmdzZG9yZkBhbWQuY29tPiIp OwotTU9EVUxFX0RFU0NSSVBUSU9OKCJNVEQgbWFwIGRyaXZlciBmb3IgQU1EIE5ldFNjNTIwIERl bW9uc3RyYXRpb24gQm9hcmQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvbmV0dGVs LmMgYi9kcml2ZXJzL210ZC9tYXBzL25ldHRlbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA3ZDM0OTg3NGZmZWIuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL25l dHRlbC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDYyICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICog ICAgICBuZXR0ZWwuYyAtLSBtYXBwaW5ncyBmb3IgTkVUdGVsL1NlY3VyZUVkZ2UvU25hcEdlYXIg KHg4NikgYm9hcmRzLgotICoKLSAqICAgICAgKEMpIENvcHlyaWdodCAyMDAwLTIwMDEsIEdyZWcg VW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCi0gKiAgICAgIChDKSBDb3B5cmlnaHQgMjAwMS0y MDAyLCBTbmFwR2VhciAod3d3LnNuYXBnZWFyLmNvbSkKLSAqLwotCi0vKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQu aD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgot I2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0j aW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvY2Zp Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0j aW5jbHVkZSA8bGludXgva2Rldl90Lmg+Ci0jaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KLSNp bmNsdWRlIDxhc20vaW8uaD4KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgSU5U RUxfQlVTV0lEVEgJCTEKLSNkZWZpbmUgQU1EX1dJTkRPV19NQVhTSVpFCTB4MDAyMDAwMDAKLSNk ZWZpbmUgQU1EX0JVU1dJRFRICSAJMQotCi0vKgotICoJUEFSIG1hc2tzIGFuZCBzaGlmdHMsIGFz c3VtaW5nIDY0SyBwYWdlcy4KLSAqLwotI2RlZmluZSBTQzUyMF9QQVJfQUREUl9NQVNLCTB4MDAw MDNmZmYKLSNkZWZpbmUgU0M1MjBfUEFSX0FERFJfU0hJRlQJMTYKLSNkZWZpbmUgU0M1MjBfUEFS X1RPX0FERFIocGFyKSBcCi0JKCgocGFyKSZTQzUyMF9QQVJfQUREUl9NQVNLKSA8PCBTQzUyMF9Q QVJfQUREUl9TSElGVCkKLQotI2RlZmluZSBTQzUyMF9QQVJfU0laRV9NQVNLCTB4MDFmZmMwMDAK LSNkZWZpbmUgU0M1MjBfUEFSX1NJWkVfU0hJRlQJMgotI2RlZmluZSBTQzUyMF9QQVJfVE9fU0la RShwYXIpIFwKLQkoKCgocGFyKSZTQzUyMF9QQVJfU0laRV9NQVNLKSA8PCBTQzUyMF9QQVJfU0la RV9TSElGVCkgKyAoNjQqMTAyNCkpCi0KLSNkZWZpbmUgU0M1MjBfUEFSKGNzLCBhZGRyLCBzaXpl KSBcCi0JKChjcykgfCBcCi0JKCgoKHNpemUpLSg2NCoxMDI0KSkgPj4gU0M1MjBfUEFSX1NJWkVf U0hJRlQpICYgU0M1MjBfUEFSX1NJWkVfTUFTSykgfCBcCi0JKCgoYWRkcikgPj4gU0M1MjBfUEFS X0FERFJfU0hJRlQpICYgU0M1MjBfUEFSX0FERFJfTUFTSykpCi0KLSNkZWZpbmUgU0M1MjBfUEFS X0JPT1RDUwkweDhhMDAwMDAwCi0jZGVmaW5lCVNDNTIwX1BBUl9ST01DUzEJMHhhYTAwMDAwMAot I2RlZmluZSBTQzUyMF9QQVJfUk9NQ1MyCTB4Y2EwMDAwMDAJLyogQ2FjaGUgZGlzYWJsZWQsIDY0 SyBwYWdlICovCi0KLXN0YXRpYyB2b2lkICpuZXR0ZWxfbW1jcnAgPSBOVUxMOwotCi0jaWZkZWYg Q09ORklHX01URF9DRklfSU5URUxFWFQKLXN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmludGVsX210 ZDsKLSNlbmRpZgotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqYW1kX210ZDsKLQotLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgQ09ORklHX01U RF9DRklfSU5URUxFWFQKLXN0YXRpYyBzdHJ1Y3QgbWFwX2luZm8gbmV0dGVsX2ludGVsX21hcCA9 IHsKLQkubmFtZSA9ICJTbmFwR2VhciBJbnRlbCIsCi0JLnNpemUgPSAwLAotCS5iYW5rd2lkdGgg PSBJTlRFTF9CVVNXSURUSCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBuZXR0 ZWxfaW50ZWxfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUgPSAiU25hcEdlYXIga2VybmVs IiwKLQkJLm9mZnNldCA9IDAsCi0JCS5zaXplID0gMHgwMDBlMDAwMAotCX0sCi0JewotCQkubmFt ZSA9ICJTbmFwR2VhciBmaWxlc3lzdGVtIiwKLQkJLm9mZnNldCA9IDB4MDAxMDAwMDAsCi0JfSwK LQl7Ci0JCS5uYW1lID0gIlNuYXBHZWFyIGNvbmZpZyIsCi0JCS5vZmZzZXQgPSAweDAwMGUwMDAw LAotCQkuc2l6ZSA9IDB4MDAwMjAwMDAKLQl9LAotCXsKLQkJLm5hbWUgPSAiU25hcEdlYXIgSW50 ZWwiLAotCQkub2Zmc2V0ID0gMAotCX0sCi0JewotCQkubmFtZSA9ICJTbmFwR2VhciBCSU9TIENv bmZpZyIsCi0JCS5vZmZzZXQgPSAweDAwN2UwMDAwLAotCQkuc2l6ZSA9IDB4MDAwMjAwMDAKLQl9 LAotCXsKLQkJLm5hbWUgPSAiU25hcEdlYXIgQklPUyIsCi0JCS5vZmZzZXQgPSAweDAwN2UwMDAw LAotCQkuc2l6ZSA9IDB4MDAwMjAwMDAKLQl9LAotfTsKLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0 IG1hcF9pbmZvIG5ldHRlbF9hbWRfbWFwID0gewotCS5uYW1lID0gIlNuYXBHZWFyIEFNRCIsCi0J LnNpemUgPSBBTURfV0lORE9XX01BWFNJWkUsCi0JLmJhbmt3aWR0aCA9IEFNRF9CVVNXSURUSCwK LX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBuZXR0ZWxfYW1kX3BhcnRp dGlvbnNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gIlNuYXBHZWFyIEJJT1MgY29uZmlnIiwKLQkJLm9m ZnNldCA9IDB4MDAwZTAwMDAsCi0JCS5zaXplID0gMHgwMDAxMDAwMAotCX0sCi0JewotCQkubmFt ZSA9ICJTbmFwR2VhciBCSU9TIiwKLQkJLm9mZnNldCA9IDB4MDAwZjAwMDAsCi0JCS5zaXplID0g MHgwMDAxMDAwMAotCX0sCi0JewotCQkubmFtZSA9ICJTbmFwR2VhciBBTUQiLAotCQkub2Zmc2V0 ID0gMAotCX0sCi0JewotCQkubmFtZSA9ICJTbmFwR2VhciBoaWdoIEJJT1MiLAotCQkub2Zmc2V0 ID0gMHgwMDFmMDAwMCwKLQkJLnNpemUgPSAweDAwMDEwMDAwCi0JfQotfTsKLQotI2RlZmluZSBO VU1fQU1EX1BBUlRJVElPTlMgQVJSQVlfU0laRShuZXR0ZWxfYW1kX3BhcnRpdGlvbnMpCi0KLS8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgQ09ORklHX01URF9DRklfSU5URUxFWFQKLQot LyoKLSAqCVNldCB0aGUgSW50ZWwgZmxhc2ggYmFjayB0byByZWFkIG1vZGUgc2luY2Ugc29tZSBv bGQgYm9vdAotICoJbG9hZGVycyBkb24ndC4KLSAqLwotc3RhdGljIGludCBuZXR0ZWxfcmVib290 X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLCB2 b2lkICp2KQotewotCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbmV0dGVsX2ludGVsX21hcC5m bGRydl9wcml2OwotCXVuc2lnbmVkIGxvbmcgYjsKLQotCS8qIE1ha2Ugc3VyZSBhbGwgRkxBU0gg Y2hpcHMgYXJlIHB1dCBiYWNrIGludG8gcmVhZCBtb2RlICovCi0JZm9yIChiID0gMDsgKGIgPCBu ZXR0ZWxfaW50ZWxfcGFydGl0aW9uc1szXS5zaXplKTsgYiArPSAweDEwMDAwMCkgewotCQljZmlf c2VuZF9nZW5fY21kKDB4ZmYsIDB4NTUsIGIsICZuZXR0ZWxfaW50ZWxfbWFwLCBjZmksCi0JCQlj ZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQl9Ci0JcmV0dXJuKE5PVElGWV9PSyk7Ci19Ci0KLXN0 YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmV0dGVsX25vdGlmaWVyX2Jsb2NrID0gewotCW5l dHRlbF9yZWJvb3Rfbm90aWZpZXIsIE5VTEwsIDAKLX07Ci0KLSNlbmRpZgotCi0vKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KLQotc3RhdGljIGludCBfX2luaXQgbmV0dGVsX2luaXQodm9pZCkKLXsKLQl2 b2xhdGlsZSB1bnNpZ25lZCBsb25nICphbWRwYXI7Ci0JdW5zaWduZWQgbG9uZyBhbWRhZGRyLCBt YXhzaXplOwotCWludCBudW1fYW1kX3BhcnRpdGlvbnM9MDsKLSNpZmRlZiBDT05GSUdfTVREX0NG SV9JTlRFTEVYVAotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmludGVsMHBhciwgKmludGVsMXBh cjsKLQl1bnNpZ25lZCBsb25nIG9yaWdfYm9vdGNzcGFyLCBvcmlnX3JvbWNzMXBhcjsKLQl1bnNp Z25lZCBsb25nIGludGVsMGFkZHIsIGludGVsMHNpemU7Ci0JdW5zaWduZWQgbG9uZyBpbnRlbDFh ZGRyLCBpbnRlbDFzaXplOwotCWludCBpbnRlbGJvb3QsIGludGVsMGNzLCBpbnRlbDFjczsKLQlp bnQgbnVtX2ludGVsX3BhcnRpdGlvbnM7Ci0jZW5kaWYKLQlpbnQgcmMgPSAwOwotCi0JbmV0dGVs X21tY3JwID0gKHZvaWQgKikgaW9yZW1hcCgweGZmZmVmMDAwLCA0MDk2KTsKLQlpZiAobmV0dGVs X21tY3JwID09IE5VTEwpIHsKLQkJcHJpbnRrKCJTTkFQR0VBUjogZmFpbGVkIHRvIGRpc2FibGUg TU1DUiBjYWNoZT8/XG4iKTsKLQkJcmV0dXJuKC1FSU8pOwotCX0KLQotCS8qIFNldCBDUFUgY2xv Y2sgdG8gYmUgMzMuMDAwTUh6ICovCi0JKigodW5zaWduZWQgY2hhciAqKSAobmV0dGVsX21tY3Jw ICsgMHhjNjQpKSA9IDB4MDE7Ci0KLQlhbWRwYXIgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAq KSAobmV0dGVsX21tY3JwICsgMHhjNCk7Ci0KLSNpZmRlZiBDT05GSUdfTVREX0NGSV9JTlRFTEVY VAotCWludGVsYm9vdCA9IDA7Ci0JaW50ZWwwY3MgPSBTQzUyMF9QQVJfUk9NQ1MxOwotCWludGVs MHBhciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChuZXR0ZWxfbW1jcnAgKyAweGMwKTsK LQlpbnRlbDFjcyA9IFNDNTIwX1BBUl9ST01DUzI7Ci0JaW50ZWwxcGFyID0gKHZvbGF0aWxlIHVu c2lnbmVkIGxvbmcgKikgKG5ldHRlbF9tbWNycCArIDB4YmMpOwotCi0JLyoKLQkgKglTYXZlIHRo ZSBDUyBzZXR0aW5ncyB0aGVuIGVuc3VyZSBST01DUzEgYW5kIFJPTUNTMiBhcmUgb2ZmLAotCSAq CW90aGVyd2lzZSB0aGV5IG1pZ2h0IGNsYXNoIHdpdGggd2hlcmUgd2UgdHJ5IHRvIG1hcCBCT09U Q1MuCi0JICovCi0Jb3JpZ19ib290Y3NwYXIgPSAqYW1kcGFyOwotCW9yaWdfcm9tY3MxcGFyID0g KmludGVsMHBhcjsKLQkqaW50ZWwwcGFyID0gMDsKLQkqaW50ZWwxcGFyID0gMDsKLSNlbmRpZgot Ci0JLyoKLQkgKglUaGUgZmlyc3QgdGhpbmcgdG8gZG8gaXMgZGV0ZXJtaW5lIGlmIHdlIGhhdmUg YSBzZXBhcmF0ZQotCSAqCWJvb3QgRkxBU0ggZGV2aWNlLiBUeXBpY2FsbHkgdGhpcyBpcyBhIHNt YWxsICgxIHRvIDJNQikKLQkgKglBTUQgRkxBU0ggcGFydC4gSXQgc2VlbXMgdGhhdCBkZXZpY2Ug c2l6ZSBpcyBhYm91dCB0aGUKLQkgKglvbmx5IHdheSB0byB0ZWxsIGlmIHRoaXMgaXMgdGhlIGNh c2UuLi4KLQkgKi8KLQlhbWRhZGRyID0gMHgyMDAwMDAwMDsKLQltYXhzaXplID0gQU1EX1dJTkRP V19NQVhTSVpFOwotCi0JKmFtZHBhciA9IFNDNTIwX1BBUihTQzUyMF9QQVJfQk9PVENTLCBhbWRh ZGRyLCBtYXhzaXplKTsKLQlfX2FzbV9fICgid2JpbnZkIik7Ci0KLQluZXR0ZWxfYW1kX21hcC5w aHlzID0gYW1kYWRkcjsKLQluZXR0ZWxfYW1kX21hcC52aXJ0ID0gaW9yZW1hcChhbWRhZGRyLCBt YXhzaXplKTsKLQlpZiAoIW5ldHRlbF9hbWRfbWFwLnZpcnQpIHsKLQkJcHJpbnRrKCJTTkFQR0VB UjogZmFpbGVkIHRvIGlvcmVtYXAoKSBCT09UQ1NcbiIpOwotCQlpb3VubWFwKG5ldHRlbF9tbWNy cCk7Ci0JCXJldHVybigtRUlPKTsKLQl9Ci0Jc2ltcGxlX21hcF9pbml0KCZuZXR0ZWxfYW1kX21h cCk7Ci0KLQlpZiAoKGFtZF9tdGQgPSBkb19tYXBfcHJvYmUoImplZGVjX3Byb2JlIiwgJm5ldHRl bF9hbWRfbWFwKSkpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJTTkFQR0VBUjogQU1EIGZsYXNo IGRldmljZSBzaXplID0gJWRLXG4iLAotCQkJKGludCkoYW1kX210ZC0+c2l6ZT4+MTApKTsKLQot CQlhbWRfbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwotCi0JCS8qIFRoZSBoaWdoIEJJT1MgcGFy dGl0aW9uIGlzIG9ubHkgcHJlc2VudCBmb3IgMk1CIHVuaXRzICovCi0JCW51bV9hbWRfcGFydGl0 aW9ucyA9IE5VTV9BTURfUEFSVElUSU9OUzsKLQkJaWYgKGFtZF9tdGQtPnNpemUgPCBBTURfV0lO RE9XX01BWFNJWkUpCi0JCQludW1fYW1kX3BhcnRpdGlvbnMtLTsKLQkJLyogRG9uJ3QgYWRkIHRo ZSBwYXJ0aXRpb24gdW50aWwgYWZ0ZXIgdGhlIHByaW1hcnkgSU5URUwncyAqLwotCi0jaWZkZWYg Q09ORklHX01URF9DRklfSU5URUxFWFQKLQkJLyoKLQkJICoJTWFwIHRoZSBJbnRlbCBmbGFzaCBp bnRvIG1lbW9yeSBhZnRlciB0aGUgQU1ECi0JCSAqCUl0IGhhcyB0byBzdGFydCBvbiBhIG11bHRp cGxlIG9mIG1heHNpemUuCi0JCSAqLwotCQltYXhzaXplID0gU0M1MjBfUEFSX1RPX1NJWkUob3Jp Z19yb21jczFwYXIpOwotCQlpZiAobWF4c2l6ZSA8ICgzMiAqIDEwMjQgKiAxMDI0KSkKLQkJCW1h eHNpemUgPSAoMzIgKiAxMDI0ICogMTAyNCk7Ci0JCWludGVsMGFkZHIgPSBhbWRhZGRyICsgbWF4 c2l6ZTsKLSNlbmRpZgotCX0gZWxzZSB7Ci0jaWZkZWYgQ09ORklHX01URF9DRklfSU5URUxFWFQK LQkJLyogSU5URUwgYm9vdCBGTEFTSCAqLwotCQlpbnRlbGJvb3QrKzsKLQotCQlpZiAoIW9yaWdf cm9tY3MxcGFyKSB7Ci0JCQlpbnRlbDBjcyA9IFNDNTIwX1BBUl9CT09UQ1M7Ci0JCQlpbnRlbDBw YXIgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKQotCQkJCShuZXR0ZWxfbW1jcnAgKyAweGM0 KTsKLQkJCWludGVsMWNzID0gU0M1MjBfUEFSX1JPTUNTMTsKLQkJCWludGVsMXBhciA9ICh2b2xh dGlsZSB1bnNpZ25lZCBsb25nICopCi0JCQkJKG5ldHRlbF9tbWNycCArIDB4YzApOwotCi0JCQlp bnRlbDBhZGRyID0gU0M1MjBfUEFSX1RPX0FERFIob3JpZ19ib290Y3NwYXIpOwotCQkJbWF4c2l6 ZSA9IFNDNTIwX1BBUl9UT19TSVpFKG9yaWdfYm9vdGNzcGFyKTsKLQkJfSBlbHNlIHsKLQkJCS8q IEtlcm5lbCBiYXNlIGlzIG9uIFJPTUNTMSwgbm90IEJPT1RDUyAqLwotCQkJaW50ZWwwY3MgPSBT QzUyMF9QQVJfUk9NQ1MxOwotCQkJaW50ZWwwcGFyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcg KikKLQkJCQkobmV0dGVsX21tY3JwICsgMHhjMCk7Ci0JCQlpbnRlbDFjcyA9IFNDNTIwX1BBUl9C T09UQ1M7Ci0JCQlpbnRlbDFwYXIgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKQotCQkJCShu ZXR0ZWxfbW1jcnAgKyAweGM0KTsKLQotCQkJaW50ZWwwYWRkciA9IFNDNTIwX1BBUl9UT19BRERS KG9yaWdfcm9tY3MxcGFyKTsKLQkJCW1heHNpemUgPSBTQzUyMF9QQVJfVE9fU0laRShvcmlnX3Jv bWNzMXBhcik7Ci0JCX0KLQotCQkvKiBEZXN0cm95IHVzZWxlc3MgQU1EIE1URCBtYXBwaW5nICov Ci0JCWFtZF9tdGQgPSBOVUxMOwotCQlpb3VubWFwKG5ldHRlbF9hbWRfbWFwLnZpcnQpOwotCQlu ZXR0ZWxfYW1kX21hcC52aXJ0ID0gTlVMTDsKLSNlbHNlCi0JCS8qIE9ubHkgQU1EIGZsYXNoIHN1 cHBvcnRlZCAqLwotCQlyYyA9IC1FTlhJTzsKLQkJZ290byBvdXRfdW5tYXAyOwotI2VuZGlmCi0J fQotCi0jaWZkZWYgQ09ORklHX01URF9DRklfSU5URUxFWFQKLQkvKgotCSAqCVdlIGhhdmUgZGV0 ZXJtaW5lZCB0aGUgSU5URUwgRkxBU0ggY29uZmlndXJhdGlvbiwgc28gbGV0cwotCSAqCWdvIGFo ZWFkIGFuZCBwcm9iZSBmb3IgdGhlbSBub3cuCi0JICovCi0KLQkvKiBTZXQgUEFSIHRvIHRoZSBt YXhpbXVtIHNpemUgKi8KLQlpZiAobWF4c2l6ZSA8ICgzMiAqIDEwMjQgKiAxMDI0KSkKLQkJbWF4 c2l6ZSA9ICgzMiAqIDEwMjQgKiAxMDI0KTsKLQkqaW50ZWwwcGFyID0gU0M1MjBfUEFSKGludGVs MGNzLCBpbnRlbDBhZGRyLCBtYXhzaXplKTsKLQotCS8qIFR1cm4gb3RoZXIgUEFSIG9mZiBzbyB0 aGUgZmlyc3QgcHJvYmUgZG9lc24ndCBmaW5kIGl0ICovCi0JKmludGVsMXBhciA9IDA7Ci0KLQkv KiBQcm9iZSBmb3IgdGhlIHNpemUgb2YgdGhlIGZpcnN0IEludGVsIGZsYXNoICovCi0JbmV0dGVs X2ludGVsX21hcC5zaXplID0gbWF4c2l6ZTsKLQluZXR0ZWxfaW50ZWxfbWFwLnBoeXMgPSBpbnRl bDBhZGRyOwotCW5ldHRlbF9pbnRlbF9tYXAudmlydCA9IGlvcmVtYXAoaW50ZWwwYWRkciwgbWF4 c2l6ZSk7Ci0JaWYgKCFuZXR0ZWxfaW50ZWxfbWFwLnZpcnQpIHsKLQkJcHJpbnRrKCJTTkFQR0VB UjogZmFpbGVkIHRvIGlvcmVtYXAoKSBST01DUzFcbiIpOwotCQlyYyA9IC1FSU87Ci0JCWdvdG8g b3V0X3VubWFwMjsKLQl9Ci0Jc2ltcGxlX21hcF9pbml0KCZuZXR0ZWxfaW50ZWxfbWFwKTsKLQot CWludGVsX210ZCA9IGRvX21hcF9wcm9iZSgiY2ZpX3Byb2JlIiwgJm5ldHRlbF9pbnRlbF9tYXAp OwotCWlmICghaW50ZWxfbXRkKSB7Ci0JCXJjID0gLUVOWElPOwotCQlnb3RvIG91dF91bm1hcDE7 Ci0JfQotCi0JLyogU2V0IFBBUiB0byB0aGUgZGV0ZWN0ZWQgc2l6ZSAqLwotCWludGVsMHNpemUg PSBpbnRlbF9tdGQtPnNpemU7Ci0JKmludGVsMHBhciA9IFNDNTIwX1BBUihpbnRlbDBjcywgaW50 ZWwwYWRkciwgaW50ZWwwc2l6ZSk7Ci0KLQkvKgotCSAqCU1hcCBzZWNvbmQgSW50ZWwgRkxBU0gg cmlnaHQgYWZ0ZXIgZmlyc3QuIFNldCBpdHMgc2l6ZSB0byB0aGUKLQkgKglzYW1lIG1heHNpemUg dXNlZCBmb3IgdGhlIGZpcnN0IEludGVsIEZMQVNILgotCSAqLwotCWludGVsMWFkZHIgPSBpbnRl bDBhZGRyICsgaW50ZWwwc2l6ZTsKLQkqaW50ZWwxcGFyID0gU0M1MjBfUEFSKGludGVsMWNzLCBp bnRlbDFhZGRyLCBtYXhzaXplKTsKLQlfX2FzbV9fICgid2JpbnZkIik7Ci0KLQltYXhzaXplICs9 IGludGVsMHNpemU7Ci0KLQkvKiBEZWxldGUgdGhlIG9sZCBtYXAgYW5kIHByb2JlIGFnYWluIHRv IGRvIGJvdGggY2hpcHMgKi8KLQltYXBfZGVzdHJveShpbnRlbF9tdGQpOwotCWludGVsX210ZCA9 IE5VTEw7Ci0JaW91bm1hcChuZXR0ZWxfaW50ZWxfbWFwLnZpcnQpOwotCi0JbmV0dGVsX2ludGVs X21hcC5zaXplID0gbWF4c2l6ZTsKLQluZXR0ZWxfaW50ZWxfbWFwLnZpcnQgPSBpb3JlbWFwKGlu dGVsMGFkZHIsIG1heHNpemUpOwotCWlmICghbmV0dGVsX2ludGVsX21hcC52aXJ0KSB7Ci0JCXBy aW50aygiU05BUEdFQVI6IGZhaWxlZCB0byBpb3JlbWFwKCkgUk9NQ1MxLzJcbiIpOwotCQlyYyA9 IC1FSU87Ci0JCWdvdG8gb3V0X3VubWFwMjsKLQl9Ci0KLQlpbnRlbF9tdGQgPSBkb19tYXBfcHJv YmUoImNmaV9wcm9iZSIsICZuZXR0ZWxfaW50ZWxfbWFwKTsKLQlpZiAoISBpbnRlbF9tdGQpIHsK LQkJcmMgPSAtRU5YSU87Ci0JCWdvdG8gb3V0X3VubWFwMTsKLQl9Ci0KLQlpbnRlbDFzaXplID0g aW50ZWxfbXRkLT5zaXplIC0gaW50ZWwwc2l6ZTsKLQlpZiAoaW50ZWwxc2l6ZSA+IDApIHsKLQkJ KmludGVsMXBhciA9IFNDNTIwX1BBUihpbnRlbDFjcywgaW50ZWwxYWRkciwgaW50ZWwxc2l6ZSk7 Ci0JCV9fYXNtX18gKCJ3YmludmQiKTsKLQl9IGVsc2UgewotCQkqaW50ZWwxcGFyID0gMDsKLQl9 Ci0KLQlwcmludGsoS0VSTl9OT1RJQ0UgIlNOQVBHRUFSOiBJbnRlbCBmbGFzaCBkZXZpY2Ugc2l6 ZSA9ICVsbGRLaUJcbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKGludGVsX210ZC0+ c2l6ZSA+PiAxMCkpOwotCi0JaW50ZWxfbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwotCi0JbnVt X2ludGVsX3BhcnRpdGlvbnMgPSBBUlJBWV9TSVpFKG5ldHRlbF9pbnRlbF9wYXJ0aXRpb25zKTsK LQotCWlmIChpbnRlbGJvb3QpIHsKLQkJLyoKLQkJICoJQWRqdXN0IG9mZnNldCBhbmQgc2l6ZSBv ZiBsYXN0IGJvb3QgcGFydGl0aW9uLgotCQkgKglNdXN0IGFsbG93IGZvciBCSU9TIHJlZ2lvbiBh dCBlbmQgb2YgRkxBU0guCi0JCSAqLwotCQluZXR0ZWxfaW50ZWxfcGFydGl0aW9uc1sxXS5zaXpl ID0gKGludGVsMHNpemUgKyBpbnRlbDFzaXplKSAtCi0JCQkoMTAyNCoxMDI0ICsgaW50ZWxfbXRk LT5lcmFzZXNpemUpOwotCQluZXR0ZWxfaW50ZWxfcGFydGl0aW9uc1szXS5zaXplID0gaW50ZWww c2l6ZSArIGludGVsMXNpemU7Ci0JCW5ldHRlbF9pbnRlbF9wYXJ0aXRpb25zWzRdLm9mZnNldCA9 Ci0JCQkoaW50ZWwwc2l6ZSArIGludGVsMXNpemUpIC0gaW50ZWxfbXRkLT5lcmFzZXNpemU7Ci0J CW5ldHRlbF9pbnRlbF9wYXJ0aXRpb25zWzRdLnNpemUgPSBpbnRlbF9tdGQtPmVyYXNlc2l6ZTsK LQkJbmV0dGVsX2ludGVsX3BhcnRpdGlvbnNbNV0ub2Zmc2V0ID0KLQkJCW5ldHRlbF9pbnRlbF9w YXJ0aXRpb25zWzRdLm9mZnNldDsKLQkJbmV0dGVsX2ludGVsX3BhcnRpdGlvbnNbNV0uc2l6ZSA9 Ci0JCQluZXR0ZWxfaW50ZWxfcGFydGl0aW9uc1s0XS5zaXplOwotCX0gZWxzZSB7Ci0JCS8qIE5v IEJJT1MgcmVnaW9ucyB3aGVuIEFNRCBib290ICovCi0JCW51bV9pbnRlbF9wYXJ0aXRpb25zIC09 IDI7Ci0JfQotCXJjID0gbXRkX2RldmljZV9yZWdpc3RlcihpbnRlbF9tdGQsIG5ldHRlbF9pbnRl bF9wYXJ0aXRpb25zLAotCQkJCSBudW1faW50ZWxfcGFydGl0aW9ucyk7Ci0JaWYgKHJjKQotCQln b3RvIG91dF9tYXBfZGVzdHJveTsKLSNlbmRpZgotCi0JaWYgKGFtZF9tdGQpIHsKLQkJcmMgPSBt dGRfZGV2aWNlX3JlZ2lzdGVyKGFtZF9tdGQsIG5ldHRlbF9hbWRfcGFydGl0aW9ucywKLQkJCQkJ IG51bV9hbWRfcGFydGl0aW9ucyk7Ci0JCWlmIChyYykKLQkJCWdvdG8gb3V0X210ZF91bnJlZzsK LQl9Ci0KLSNpZmRlZiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVAotCXJlZ2lzdGVyX3JlYm9vdF9u b3RpZmllcigmbmV0dGVsX25vdGlmaWVyX2Jsb2NrKTsKLSNlbmRpZgotCi0JcmV0dXJuIHJjOwot Ci1vdXRfbXRkX3VucmVnOgotI2lmZGVmIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUCi0JbXRkX2Rl dmljZV91bnJlZ2lzdGVyKGludGVsX210ZCk7Ci1vdXRfbWFwX2Rlc3Ryb3k6Ci0JbWFwX2Rlc3Ry b3koaW50ZWxfbXRkKTsKLW91dF91bm1hcDE6Ci0JaW91bm1hcChuZXR0ZWxfaW50ZWxfbWFwLnZp cnQpOwotI2VuZGlmCi0KLW91dF91bm1hcDI6Ci0JaW91bm1hcChuZXR0ZWxfbW1jcnApOwotCWlv dW5tYXAobmV0dGVsX2FtZF9tYXAudmlydCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgbmV0dGVsX2NsZWFudXAodm9pZCkK LXsKLSNpZmRlZiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVAotCXVucmVnaXN0ZXJfcmVib290X25v dGlmaWVyKCZuZXR0ZWxfbm90aWZpZXJfYmxvY2spOwotI2VuZGlmCi0JaWYgKGFtZF9tdGQpIHsK LQkJbXRkX2RldmljZV91bnJlZ2lzdGVyKGFtZF9tdGQpOwotCQltYXBfZGVzdHJveShhbWRfbXRk KTsKLQl9Ci0JaWYgKG5ldHRlbF9tbWNycCkgewotCQlpb3VubWFwKG5ldHRlbF9tbWNycCk7Ci0J CW5ldHRlbF9tbWNycCA9IE5VTEw7Ci0JfQotCWlmIChuZXR0ZWxfYW1kX21hcC52aXJ0KSB7Ci0J CWlvdW5tYXAobmV0dGVsX2FtZF9tYXAudmlydCk7Ci0JCW5ldHRlbF9hbWRfbWFwLnZpcnQgPSBO VUxMOwotCX0KLSNpZmRlZiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVAotCWlmIChpbnRlbF9tdGQp IHsKLQkJbXRkX2RldmljZV91bnJlZ2lzdGVyKGludGVsX210ZCk7Ci0JCW1hcF9kZXN0cm95KGlu dGVsX210ZCk7Ci0JfQotCWlmIChuZXR0ZWxfaW50ZWxfbWFwLnZpcnQpIHsKLQkJaW91bm1hcChu ZXR0ZWxfaW50ZWxfbWFwLnZpcnQpOwotCQluZXR0ZWxfaW50ZWxfbWFwLnZpcnQgPSBOVUxMOwot CX0KLSNlbmRpZgotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotbW9kdWxlX2luaXQobmV0 dGVsX2luaXQpOwotbW9kdWxlX2V4aXQobmV0dGVsX2NsZWFudXApOwotCi1NT0RVTEVfTElDRU5T RSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJHcmVnIFVuZ2VyZXIgPGdlcmdAc25hcGdlYXIuY29t PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJTbmFwR2Vhci9TZWN1cmVFZGdlIEZMQVNIIHN1cHBv cnQiKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9t YXBzL3NjNTIwY2RwLmMgYi9kcml2ZXJzL210ZC9tYXBzL3NjNTIwY2RwLmMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDhlZjdhZWM2MzRjNy4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZl cnMvbXRkL21hcHMvc2M1MjBjZHAuYworKysgL2Rldi9udWxsCkBAIC0xLDI5NCArMCwwIEBACi0v LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgotLyogc2M1MjBjZHAu YyAtLSBNVEQgbWFwIGRyaXZlciBmb3IgQU1EIFNDNTIwIEN1c3RvbWVyIERldmVsb3BtZW50IFBs YXRmb3JtCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlv bnMgR21iSAotICoKLSAqIFRoZSBTQzUyMENEUCBpcyBhbiBldmFsdWF0aW9uIGJvYXJkIGZvciB0 aGUgRWxhbiBTQzUyMCBwcm9jZXNzb3IgYXZhaWxhYmxlCi0gKiBmcm9tIEFNRC4gSXQgaGFzIHR3 byBiYW5rcyBvZiAzMi1iaXQgRmxhc2ggUk9NLCBlYWNoIDggTWVnYWJ5dGVzIGluIHNpemUsCi0g KiBhbmQgdXAgdG8gNTEyIEtpQiBvZiA4LWJpdCBESUwgRmxhc2ggUk9NLgotICogRm9yIGRldGFp bHMgc2VlIGh0dHBzOi8vd3d3LmFtZC5jb20vcHJvZHVjdHMvZXBkL2Rlc2lnaW5nL2V2YWxib2Fy ZHMvMTguZWxhbnNjNTIwLzUyMF9jZHBfYnJpZWYvaW5kZXguaHRtbAotICovCi0KLSNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vaW8u aD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL21hcC5o PgotI2luY2x1ZGUgPGxpbnV4L210ZC9jb25jYXQuaD4KLQotLyoKLSoqIFRoZSBFbWJlZGRlZCBT eXN0ZW1zIEJJT1MgZGVjb2RlcyB0aGUgZmlyc3QgRkxBU0ggc3RhcnRpbmcgYXQKLSoqIDB4ODQw MDAwMC4gVGhpcyBpcyBhICp0ZXJyaWJsZSogcGxhY2UgZm9yIGl0IGJlY2F1c2UgYWNjZXNzaW5n Ci0qKiB0aGUgZmxhc2ggYXQgdGhpcyBsb2NhdGlvbiBjYXVzZXMgdGhlIEEyMiBhZGRyZXNzIGxp bmUgdG8gYmUgaGlnaAotKiogKHRoYXQncyB3aGF0IDB4ODQwMDAwMCBiaW5hcnkncyBvdWdodCB0 byBiZSkuIEJ1dCB0aGlzIGlzIHRoZSBoaWdoZXN0Ci0qKiBvcmRlciBhZGRyZXNzIGxpbmUgb24g dGhlIHJhdyBmbGFzaCBkZXZpY2VzIHRoZW1zZWx2ZXMhIQotKiogVGhpcyBjYXVzZXMgdGhlIHRv cCBIQUxGIG9mIHRoZSBmbGFzaCB0byBiZSBhY2Nlc3NlZCBmaXJzdC4gQmV5b25kCi0qKiB0aGUg cGh5c2ljYWwgbGltaXRzIG9mIHRoZSBmbGFzaCwgdGhlIGZsYXNoIGNoaXAgYWxpYXNlcyBvdmVy ICh0bwotKiogMHg4ODAwMDAgd2hpY2ggY2F1c2VzIHRoZSBib3R0b20gaGFsZiB0byBiZSBhY2Nl c3NlZC4gVGhpcyBzcGxpdHMgdGhlCi0qKiBmbGFzaCBpbnRvIHR3byBhbmQgaW52ZXJ0cyBpdCEg SWYgeW91IHRoZW4gdHJ5IHRvIGFjY2VzcyB0aGlzIGZyb20gYW5vdGhlcgotKiogcHJvZ3JhbSB0 aGF0IGRvZXMgTk9UIGRvIHRoaXMgaW5zYW5pdHksIHRoZW4geW91ICp3aWxsKiBhY2Nlc3MgdGhl Ci0qKiBmaXJzdCBoYWxmIG9mIHRoZSBmbGFzaCwgYnV0IG5vdCBmaW5kIHdoYXQgeW91IGV4cGVj dCB0aGVyZS4gVGhhdAotKiogc3R1ZmYgaXMgaW4gdGhlICpzZWNvbmQqIGhhbGYhIFNpbWlsYXJs eSwgdGhlIGFkZHJlc3MgdXNlZCBieSB0aGUKLSoqIEJJT1MgZm9yIHRoZSBzZWNvbmQgRkxBU0gg YmFuayBpcyBhbHNvIHF1aXRlIGEgYmFkIGNob2ljZS4KLSoqIElmIFJFUFJPR1JBTV9QQVIgaXMg ZGVmaW5lZCBiZWxvdyAodGhlIGRlZmF1bHQpLCB0aGVuIHRoaXMgZHJpdmVyIHdpbGwKLSoqIGNo b29zZSBtb3JlIHVzZWZ1bCBhZGRyZXNzZXMgZm9yIHRoZSBGTEFTSCBiYW5rcyBieSByZXByb2dy YW1taW5nIHRoZQotKiogcmVzcG9uc2libGUgUEFSeHggcmVnaXN0ZXJzIGluIHRoZSBTQzUyMCdz IE1NQ1IgcmVnaW9uLiBUaGlzIHdpbGwKLSoqIGNhdXNlIHRoZSBzZXR0aW5ncyB0byBiZSBpbmNv bXBhdGlibGUgd2l0aCB0aGUgQklPUydzIHNldHRpbmdzLCB3aGljaAotKiogc2hvdWxkbid0IGJl IGEgcHJvYmxlbSBzaW5jZSB5b3UgYXJlIHJ1bm5pbmcgTGludXgsIChpLmUuIHRoZSBCSU9TIGlz Ci0qKiBub3QgbXVjaCB1c2UgYW55d2F5KS4gSG93ZXZlciwgaWYgeW91IG5lZWQgdG8gYmUgY29t cGF0aWJsZSB3aXRoCi0qKiB0aGUgQklPUyBmb3Igc29tZSByZWFzb24sIGp1c3QgdW5kZWZpbmUg UkVQUk9HUkFNX1BBUi4KLSovCi0jZGVmaW5lIFJFUFJPR1JBTV9QQVIKLQotCi0KLSNpZmRlZiBS RVBST0dSQU1fUEFSCi0KLS8qIFRoZXNlIGFyZSB0aGUgYWRkcmVzc2VzIHdlIHdhbnQuLiAqLwot I2RlZmluZSBXSU5ET1dfQUREUl8wCTB4MDg4MDAwMDAKLSNkZWZpbmUgV0lORE9XX0FERFJfMQkw eDA5MDAwMDAwCi0jZGVmaW5lIFdJTkRPV19BRERSXzIJMHgwOTgwMDAwMAotCi0vKiAuLiBhbmQg dGhlc2UgYXJlIHRoZSBhZGRyZXNzZXMgdGhlIEJJT1MgZ2l2ZXMgdXMgKi8KLSNkZWZpbmUgV0lO RE9XX0FERFJfMF9CSU9TCTB4MDg0MDAwMDAKLSNkZWZpbmUgV0lORE9XX0FERFJfMV9CSU9TCTB4 MDhjMDAwMDAKLSNkZWZpbmUgV0lORE9XX0FERFJfMl9CSU9TCTB4MDk0MDAwMDAKLQotI2Vsc2UK LQotI2RlZmluZSBXSU5ET1dfQUREUl8wCTB4MDg0MDAwMDAKLSNkZWZpbmUgV0lORE9XX0FERFJf MQkweDA4QzAwMDAwCi0jZGVmaW5lIFdJTkRPV19BRERSXzIJMHgwOTQwMDAwMAotCi0jZW5kaWYK LQotI2RlZmluZSBXSU5ET1dfU0laRV8wCTB4MDA4MDAwMDAKLSNkZWZpbmUgV0lORE9XX1NJWkVf MQkweDAwODAwMDAwCi0jZGVmaW5lIFdJTkRPV19TSVpFXzIJMHgwMDA4MDAwMAotCi0KLXN0YXRp YyBzdHJ1Y3QgbWFwX2luZm8gc2M1MjBjZHBfbWFwW10gPSB7Ci0JewotCQkubmFtZSA9ICJTQzUy MENEUCBGbGFzaCBCYW5rICMwIiwKLQkJLnNpemUgPSBXSU5ET1dfU0laRV8wLAotCQkuYmFua3dp ZHRoID0gNCwKLQkJLnBoeXMgPSBXSU5ET1dfQUREUl8wCi0JfSwKLQl7Ci0JCS5uYW1lID0gIlND NTIwQ0RQIEZsYXNoIEJhbmsgIzEiLAotCQkuc2l6ZSA9IFdJTkRPV19TSVpFXzEsCi0JCS5iYW5r d2lkdGggPSA0LAotCQkucGh5cyA9IFdJTkRPV19BRERSXzEKLQl9LAotCXsKLQkJLm5hbWUgPSAi U0M1MjBDRFAgRElMIEZsYXNoIiwKLQkJLnNpemUgPSBXSU5ET1dfU0laRV8yLAotCQkuYmFua3dp ZHRoID0gMSwKLQkJLnBoeXMgPSBXSU5ET1dfQUREUl8yCi0JfSwKLX07Ci0KLSNkZWZpbmUgTlVN X0ZMQVNIX0JBTktTCUFSUkFZX1NJWkUoc2M1MjBjZHBfbWFwKQotCi1zdGF0aWMgc3RydWN0IG10 ZF9pbmZvICpteW10ZFtOVU1fRkxBU0hfQkFOS1NdOwotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAq bWVyZ2VkX210ZDsKLQotI2lmZGVmIFJFUFJPR1JBTV9QQVIKLQotLyoKLSoqIFRoZSBTQzUyMCBN TUNSIChtZW1vcnkgbWFwcGVkIGNvbnRyb2wgcmVnaXN0ZXIpIHJlZ2lvbiByZXNpZGVzCi0qKiBh dCAweEZGRkVGMDAwLiBUaGUgMTYgUHJvZ3JhbW1hYmxlIEFkZHJlc3MgUmVnaW9uIChQQVIpIHJl Z2lzdGVycwotKiogYXJlIGF0IG9mZnNldCAweDg4IGluIHRoZSBNTUNSOgotKi8KLSNkZWZpbmUg U0M1MjBfTU1DUl9CQVNFCQkweEZGRkVGMDAwCi0jZGVmaW5lIFNDNTIwX01NQ1JfRVhURU5UCTB4 MTAwMAotI2RlZmluZSBTQzUyMF9QQVIoeCkJCSgoMHg4OC9zaXplb2YodW5zaWduZWQgbG9uZykp ICsgKHgpKQotI2RlZmluZSBOVU1fU0M1MjBfUEFSCQkxNgkvKiB0b3RhbCBudW1iZXIgb2YgUEFS IHJlZ2lzdGVycyAqLwotCi0vKgotKiogVGhlIGhpZ2hlc3QgdGhyZWUgYml0cyBpbiBhIFBBUiBy ZWdpc3RlciBkZXRlcm1pbmUgd2hhdCB0YXJnZXQKLSoqIGRldmljZSBpcyBjb250cm9sbGVkIGJ5 IHRoaXMgUEFSLiBIZXJlLCBvbmx5IFJPTUNTPyBhbmQgQk9PVENTCi0qKiBkZXZpY2VzIGFyZSBv ZiBpbnRlcmVzdC4KLSovCi0jZGVmaW5lIFNDNTIwX1BBUl9CT09UQ1MJKDB4NDw8MjkpCi0jZGVm aW5lIFNDNTIwX1BBUl9ST01DUzAJKDB4NTw8MjkpCi0jZGVmaW5lIFNDNTIwX1BBUl9ST01DUzEJ KDB4Njw8MjkpCi0jZGVmaW5lIFNDNTIwX1BBUl9UUkdERVYJKDB4Nzw8MjkpCi0KLS8qCi0qKiBC aXRzIDI4IHRocnUgMjYgZGV0ZXJtaW5lIHNvbWUgYXR0cmlidXRlcyBmb3IgdGhlCi0qKiByZWdp b24gY29udHJvbGxlZCBieSB0aGUgUEFSLiAoV2Ugb25seSB1c2Ugbm9uLWNhY2hlYWJsZSkKLSov Ci0jZGVmaW5lIFNDNTIwX1BBUl9XUlBST1QJKDE8PDI2KQkvKiB3cml0ZSBwcm90ZWN0ZWQgICAg ICAgKi8KLSNkZWZpbmUgU0M1MjBfUEFSX05PQ0FDSEUJKDE8PDI3KQkvKiBub24tY2FjaGVhYmxl ICAgICAgICAgKi8KLSNkZWZpbmUgU0M1MjBfUEFSX05PRVhFQwkoMTw8MjgpCS8qIGNvZGUgZXhl Y3V0aW9uIGRlbmllZCAqLwotCi0KLS8qCi0qKiBCaXQgMjUgZGV0ZXJtaW5lcyB0aGUgZ3JhbnVs YXJpdHk6IDRLIG9yIDY0SwotKi8KLSNkZWZpbmUgU0M1MjBfUEFSX1BHX1NJWjQJKDA8PDI1KQot I2RlZmluZSBTQzUyMF9QQVJfUEdfU0laNjQJKDE8PDI1KQotCi0vKgotKiogQnVpbGQgYSB2YWx1 ZSB0byBiZSB3cml0dGVuIGludG8gYSBQQVIgcmVnaXN0ZXIuCi0qKiBXZSBvbmx5IG5lZWQgUk9N IGVudHJpZXMsIDY0SyBwYWdlIHNpemU6Ci0qLwotI2RlZmluZSBTQzUyMF9QQVJfRU5UUlkodHJn ZGV2LCBhZGRyZXNzLCBzaXplKSBcCi0JKCh0cmdkZXYpIHwgU0M1MjBfUEFSX05PQ0FDSEUgfCBT QzUyMF9QQVJfUEdfU0laNjQgfCBcCi0JKGFkZHJlc3MpID4+IDE2IHwgKCgoc2l6ZSkgPj4gMTYp IC0gMSkgPDwgMTQpCi0KLXN0cnVjdCBzYzUyMF9wYXJfdGFibGUKLXsKLQl1bnNpZ25lZCBsb25n IHRyZ2RldjsKLQl1bnNpZ25lZCBsb25nIG5ld19wYXI7Ci0JdW5zaWduZWQgbG9uZyBkZWZhdWx0 X2FkZHJlc3M7Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNjNTIwX3Bhcl90YWJsZSBwYXJf dGFibGVbTlVNX0ZMQVNIX0JBTktTXSA9Ci17Ci0JewkvKiBGbGFzaCBCYW5rICMwOiBzZWxlY3Rl ZCBieSBST01DUzAgKi8KLQkJU0M1MjBfUEFSX1JPTUNTMCwKLQkJU0M1MjBfUEFSX0VOVFJZKFND NTIwX1BBUl9ST01DUzAsIFdJTkRPV19BRERSXzAsIFdJTkRPV19TSVpFXzApLAotCQlXSU5ET1df QUREUl8wX0JJT1MKLQl9LAotCXsJLyogRmxhc2ggQmFuayAjMTogc2VsZWN0ZWQgYnkgUk9NQ1Mx ICovCi0JCVNDNTIwX1BBUl9ST01DUzEsCi0JCVNDNTIwX1BBUl9FTlRSWShTQzUyMF9QQVJfUk9N Q1MxLCBXSU5ET1dfQUREUl8xLCBXSU5ET1dfU0laRV8xKSwKLQkJV0lORE9XX0FERFJfMV9CSU9T Ci0JfSwKLQl7CS8qIERJTCAoQklPUykgRmxhc2g6IHNlbGVjdGVkIGJ5IEJPT1RDUyAqLwotCQlT QzUyMF9QQVJfQk9PVENTLAotCQlTQzUyMF9QQVJfRU5UUlkoU0M1MjBfUEFSX0JPT1RDUywgV0lO RE9XX0FERFJfMiwgV0lORE9XX1NJWkVfMiksCi0JCVdJTkRPV19BRERSXzJfQklPUwotCX0KLX07 Ci0KLQotc3RhdGljIHZvaWQgc2M1MjBjZHBfc2V0dXBfcGFyKHZvaWQpCi17Ci0JdW5zaWduZWQg bG9uZyBfX2lvbWVtICptbWNyOwotCXVuc2lnbmVkIGxvbmcgbW1jcl92YWw7Ci0JaW50IGksIGo7 Ci0KLQkvKiBtYXAgaW4gU0M1MjAncyBNTUNSIGFyZWEgKi8KLQltbWNyID0gaW9yZW1hcChTQzUy MF9NTUNSX0JBU0UsIFNDNTIwX01NQ1JfRVhURU5UKTsKLQlpZighbW1jcikgeyAvKiBpb3JlbWFw IGZhaWxlZDogc2tpcCB0aGUgUEFSIHJlcHJvZ3JhbW1pbmcgKi8KLQkJLyogZm9yY2UgcGh5c2lj YWwgYWRkcmVzcyBmaWVsZHMgdG8gQklPUyBkZWZhdWx0czogKi8KLQkJZm9yKGkgPSAwOyBpIDwg TlVNX0ZMQVNIX0JBTktTOyBpKyspCi0JCQlzYzUyMGNkcF9tYXBbaV0ucGh5cyA9IHBhcl90YWJs ZVtpXS5kZWZhdWx0X2FkZHJlc3M7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSoqIEZpbmQgdGhl IFBBUnh4IHJlZ2lzdGVycyB0aGF0IGFyZSByZXNwb25zaWJsZSBmb3IgYWN0aXZhdGluZwotCSoq IFJPTUNTMCwgUk9NQ1MxIGFuZCBCT09UQ1MuIFJlcHJvZ3JhbSBlYWNoIG9mIHRoZXNlIHdpdGgg YQotCSoqIG5ldyB2YWx1ZSBmcm9tIHRoZSB0YWJsZS4KLQkqLwotCWZvcihpID0gMDsgaSA8IE5V TV9GTEFTSF9CQU5LUzsgaSsrKSB7CQkvKiBmb3IgZWFjaCBwYXJfdGFibGUgZW50cnkgICovCi0J CWZvcihqID0gMDsgaiA8IE5VTV9TQzUyMF9QQVI7IGorKykgewkvKiBmb3IgZWFjaCBQQVIgcmVn aXN0ZXIgICAgICovCi0JCQltbWNyX3ZhbCA9IHJlYWRsKCZtbWNyW1NDNTIwX1BBUihqKV0pOwot CQkJLyogaWYgdGFyZ2V0IGRldmljZSBmaWVsZCBtYXRjaGVzLCByZXByb2dyYW0gdGhlIFBBUiAq LwotCQkJaWYoKG1tY3JfdmFsICYgU0M1MjBfUEFSX1RSR0RFVikgPT0gcGFyX3RhYmxlW2ldLnRy Z2RldikKLQkJCXsKLQkJCQl3cml0ZWwocGFyX3RhYmxlW2ldLm5ld19wYXIsICZtbWNyW1NDNTIw X1BBUihqKV0pOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmKGogPT0gTlVNX1NDNTIwX1BB UikKLQkJewkvKiBubyBtYXRjaGluZyBQQVIgZm91bmQ6IHRyeSBkZWZhdWx0IEJJT1MgYWRkcmVz cyAqLwotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJDb3VsZCBub3QgZmluZCBQQVIgcmVzcG9uc2li bGUgZm9yICVzXG4iLAotCQkJCXNjNTIwY2RwX21hcFtpXS5uYW1lKTsKLQkJCXByaW50ayhLRVJO X05PVElDRSAiVHJ5aW5nIGRlZmF1bHQgYWRkcmVzcyAweCVseFxuIiwKLQkJCQlwYXJfdGFibGVb aV0uZGVmYXVsdF9hZGRyZXNzKTsKLQkJCXNjNTIwY2RwX21hcFtpXS5waHlzID0gcGFyX3RhYmxl W2ldLmRlZmF1bHRfYWRkcmVzczsKLQkJfQotCX0KLQlpb3VubWFwKG1tY3IpOwotfQotI2VuZGlm Ci0KLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9zYzUyMGNkcCh2b2lkKQotewotCWludCBpLCBq LCBkZXZpY2VzX2ZvdW5kID0gMDsKLQotI2lmZGVmIFJFUFJPR1JBTV9QQVIKLQkvKiByZXByb2dy YW0gUEFSIHJlZ2lzdGVycyBzbyBmbGFzaCBhcHBlYXJzIGF0IHRoZSBkZXNpcmVkIGFkZHJlc3Nl cyAqLwotCXNjNTIwY2RwX3NldHVwX3BhcigpOwotI2VuZGlmCi0KLQlmb3IgKGkgPSAwOyBpIDwg TlVNX0ZMQVNIX0JBTktTOyBpKyspIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJTQzUyMCBDRFAg Zmxhc2ggZGV2aWNlOiAweCVMeCBhdCAweCVMeFxuIiwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcp c2M1MjBjZHBfbWFwW2ldLnNpemUsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXNjNTIwY2RwX21h cFtpXS5waHlzKTsKLQotCQlzYzUyMGNkcF9tYXBbaV0udmlydCA9IGlvcmVtYXAoc2M1MjBjZHBf bWFwW2ldLnBoeXMsIHNjNTIwY2RwX21hcFtpXS5zaXplKTsKLQotCQlpZiAoIXNjNTIwY2RwX21h cFtpXS52aXJ0KSB7Ci0JCQlwcmludGsoIkZhaWxlZCB0byBpb3JlbWFwXG4iKTsKLQkJCWZvciAo aiA9IDA7IGogPCBpOyBqKyspIHsKLQkJCQlpZiAobXltdGRbal0pIHsKLQkJCQkJbWFwX2Rlc3Ry b3kobXltdGRbal0pOwotCQkJCQlpb3VubWFwKHNjNTIwY2RwX21hcFtqXS52aXJ0KTsKLQkJCQl9 Ci0JCQl9Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCi0JCXNpbXBsZV9tYXBfaW5pdCgmc2M1MjBj ZHBfbWFwW2ldKTsKLQotCQlteW10ZFtpXSA9IGRvX21hcF9wcm9iZSgiY2ZpX3Byb2JlIiwgJnNj NTIwY2RwX21hcFtpXSk7Ci0JCWlmKCFteW10ZFtpXSkKLQkJCW15bXRkW2ldID0gZG9fbWFwX3By b2JlKCJqZWRlY19wcm9iZSIsICZzYzUyMGNkcF9tYXBbaV0pOwotCQlpZighbXltdGRbaV0pCi0J CQlteW10ZFtpXSA9IGRvX21hcF9wcm9iZSgibWFwX3JvbSIsICZzYzUyMGNkcF9tYXBbaV0pOwot Ci0JCWlmIChteW10ZFtpXSkgewotCQkJbXltdGRbaV0tPm93bmVyID0gVEhJU19NT0RVTEU7Ci0J CQkrK2RldmljZXNfZm91bmQ7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlpb3VubWFwKHNjNTIwY2RwX21h cFtpXS52aXJ0KTsKLQkJfQotCX0KLQlpZihkZXZpY2VzX2ZvdW5kID49IDIpIHsKLQkJLyogQ29t YmluZSB0aGUgdHdvIGZsYXNoIGJhbmtzIGludG8gYSBzaW5nbGUgTVREIGRldmljZSAmIHJlZ2lz dGVyIGl0OiAqLwotCQltZXJnZWRfbXRkID0gbXRkX2NvbmNhdF9jcmVhdGUobXltdGQsIDIsICJT QzUyMENEUCBGbGFzaCBCYW5rcyAjMCBhbmQgIzEiKTsKLQkJaWYobWVyZ2VkX210ZCkKLQkJCW10 ZF9kZXZpY2VfcmVnaXN0ZXIobWVyZ2VkX210ZCwgTlVMTCwgMCk7Ci0JfQotCWlmKGRldmljZXNf Zm91bmQgPT0gMykgLyogcmVnaXN0ZXIgdGhlIHRoaXJkIChESUwtRmxhc2gpIGRldmljZSAqLwot CQltdGRfZGV2aWNlX3JlZ2lzdGVyKG15bXRkWzJdLCBOVUxMLCAwKTsKLQlyZXR1cm4oZGV2aWNl c19mb3VuZCA/IDAgOiAtRU5YSU8pOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9z YzUyMGNkcCh2b2lkKQotewotCWludCBpOwotCi0JaWYgKG1lcmdlZF9tdGQpIHsKLQkJbXRkX2Rl dmljZV91bnJlZ2lzdGVyKG1lcmdlZF9tdGQpOwotCQltdGRfY29uY2F0X2Rlc3Ryb3kobWVyZ2Vk X210ZCk7Ci0JfQotCWlmIChteW10ZFsyXSkKLQkJbXRkX2RldmljZV91bnJlZ2lzdGVyKG15bXRk WzJdKTsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fRkxBU0hfQkFOS1M7IGkrKykgewotCQlpZiAo bXltdGRbaV0pCi0JCQltYXBfZGVzdHJveShteW10ZFtpXSk7Ci0JCWlmIChzYzUyMGNkcF9tYXBb aV0udmlydCkgewotCQkJaW91bm1hcChzYzUyMGNkcF9tYXBbaV0udmlydCk7Ci0JCQlzYzUyMGNk cF9tYXBbaV0udmlydCA9IE5VTEw7Ci0JCX0KLQl9Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfc2M1 MjBjZHApOwotbW9kdWxlX2V4aXQoY2xlYW51cF9zYzUyMGNkcCk7Ci0KLU1PRFVMRV9MSUNFTlNF KCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIlN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMgR21iSCIp OwotTU9EVUxFX0RFU0NSSVBUSU9OKCJNVEQgbWFwIGRyaXZlciBmb3IgQU1EIFNDNTIwIEN1c3Rv bWVyIERldmVsb3BtZW50IFBsYXRmb3JtIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBz L3RzNTUwMF9mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy90czU1MDBfZmxhc2guYwpkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBkNmU4NjVmNTU1Li4wMDAwMDAwMDAwMDAKLS0tIGEv ZHJpdmVycy9tdGQvbWFwcy90czU1MDBfZmxhc2guYworKysgL2Rldi9udWxsCkBAIC0xLDEwOCAr MCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgotLyoK LSAqIHRzNTUwMF9mbGFzaC5jIC0tIE1URCBtYXAgZHJpdmVyIGZvciBUZWNobm9sb2d5IFN5c3Rl bXMgVFMtNTUwMCBib2FyZAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBTZWFuIFlvdW5nIDxz ZWFuQG1lc3Mub3JnPgotICoKLSAqIE5vdGU6Ci0gKiAtIEluIG9yZGVyIGZvciBkZXRlY3Rpb24g dG8gd29yaywganVtcGVyIDMgbXVzdCBiZSBzZXQuCi0gKiAtIERyaXZlIEEgYW5kIEIgdXNlIHRo ZSByZXNpZGVudCBmbGFzaCBkaXNrIChSRkQpIGZsYXNoIHRyYW5zbGF0aW9uIGxheWVyLgotICog LSBJZiB5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgb3duIGpmZnMgZmlsZSBzeXN0ZW0gYW5kIHRoZSBi aW9zIG92ZXJ3cml0ZXMKLSAqICAgaXQgZHVyaW5nIGJvb3QsIHRyeSBkaXNhYmxpbmcgRHJpdmUg QTogYW5kIEI6IGluIHRoZSBib290IG9yZGVyLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0 Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+ Ci0jaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4K LSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVz Lmg+Ci0KLQotI2RlZmluZSBXSU5ET1dfQUREUgkweDA5NDAwMDAwCi0jZGVmaW5lIFdJTkRPV19T SVpFCTB4MDAyMDAwMDAKLQotc3RhdGljIHN0cnVjdCBtYXBfaW5mbyB0czU1MDBfbWFwID0gewot CS5uYW1lID0gIlRTLTU1MDAgRmxhc2giLAotCS5zaXplID0gV0lORE9XX1NJWkUsCi0JLmJhbmt3 aWR0aCA9IDEsCi0JLnBoeXMgPSBXSU5ET1dfQUREUgotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVj dCBtdGRfcGFydGl0aW9uIHRzNTUwMF9wYXJ0aXRpb25zW10gPSB7Ci0JewotCQkubmFtZSA9ICJE cml2ZSBBIiwKLQkJLm9mZnNldCA9IDAsCi0JCS5zaXplID0gMHgwZTAwMDAKLQl9LAotCXsKLQkJ Lm5hbWUgPSAiQklPUyIsCi0JCS5vZmZzZXQgPSAweDBlMDAwMCwKLQkJLnNpemUgPSAweDAyMDAw MCwKLQl9LAotCXsKLQkJLm5hbWUgPSAiRHJpdmUgQiIsCi0JCS5vZmZzZXQgPSAweDEwMDAwMCwK LQkJLnNpemUgPSAweDEwMDAwMAotCX0KLX07Ci0KLSNkZWZpbmUgTlVNX1BBUlRJVElPTlMgQVJS QVlfU0laRSh0czU1MDBfcGFydGl0aW9ucykKLQotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqbXlt dGQ7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfdHM1NTAwX21hcCh2b2lkKQotewotCWludCBy YyA9IDA7Ci0KLQl0czU1MDBfbWFwLnZpcnQgPSBpb3JlbWFwKHRzNTUwMF9tYXAucGh5cywgdHM1 NTAwX21hcC5zaXplKTsKLQotCWlmICghdHM1NTAwX21hcC52aXJ0KSB7Ci0JCXByaW50ayhLRVJO X0VSUiAiRmFpbGVkIHRvIGlvcmVtYXBcbiIpOwotCQlyYyA9IC1FSU87Ci0JCWdvdG8gZXJyMjsK LQl9Ci0KLQlzaW1wbGVfbWFwX2luaXQoJnRzNTUwMF9tYXApOwotCi0JbXltdGQgPSBkb19tYXBf cHJvYmUoImplZGVjX3Byb2JlIiwgJnRzNTUwMF9tYXApOwotCWlmICghbXltdGQpCi0JCW15bXRk ID0gZG9fbWFwX3Byb2JlKCJtYXBfcm9tIiwgJnRzNTUwMF9tYXApOwotCi0JaWYgKCFteW10ZCkg ewotCQlyYyA9IC1FTlhJTzsKLQkJZ290byBlcnIxOwotCX0KLQotCW15bXRkLT5vd25lciA9IFRI SVNfTU9EVUxFOwotCW10ZF9kZXZpY2VfcmVnaXN0ZXIobXltdGQsIHRzNTUwMF9wYXJ0aXRpb25z LCBOVU1fUEFSVElUSU9OUyk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyMToKLQlpb3VubWFwKHRzNTUw MF9tYXAudmlydCk7Ci1lcnIyOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0 IGNsZWFudXBfdHM1NTAwX21hcCh2b2lkKQotewotCWlmIChteW10ZCkgewotCQltdGRfZGV2aWNl X3VucmVnaXN0ZXIobXltdGQpOwotCQltYXBfZGVzdHJveShteW10ZCk7Ci0JfQotCi0JaWYgKHRz NTUwMF9tYXAudmlydCkgewotCQlpb3VubWFwKHRzNTUwMF9tYXAudmlydCk7Ci0JCXRzNTUwMF9t YXAudmlydCA9IE5VTEw7Ci0JfQotfQotCi1tb2R1bGVfaW5pdChpbml0X3RzNTUwMF9tYXApOwot bW9kdWxlX2V4aXQoY2xlYW51cF90czU1MDBfbWFwKTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIp OwotTU9EVUxFX0FVVEhPUigiU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4iKTsKLU1PRFVMRV9E RVNDUklQVElPTigiTVREIG1hcCBkcml2ZXIgZm9yIFRlY2hub2xvZ3kgU3lzdGVtcyBUUy01NTAw IGJvYXJkIik7Ci0KLS0gCjIuMzkuNQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpMaW51eCBNVEQgZGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QK aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tdGQvCg==