From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <513465CF.4030807@hilscher.com> Date: Mon, 04 Mar 2013 10:13:51 +0100 From: Jerome Poncin MIME-Version: 1.0 References: <512C806F.2020209@hilscher.com> <512C9E78.1060208@siemens.com> <512CC5C6.8050204@hilscher.com> <512CC6A3.1010005@siemens.com> <512F120A.5060109@hilscher.com> <512F4005.60000@siemens.com> <512F48AA.8020601@hilscher.com> <5130B39C.70300@hilscher.com> In-Reply-To: <5130B39C.70300@hilscher.com> Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Subject: Re: [Xenomai] Hilscher driver for cifX boards List-Id: Discussions about the Xenomai project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: xenomai@xenomai.org SGVsbG8sCgpJIGRpZCB0d28gcGF0Y2ggb25lIGZvciB2ZXJzaW9uIGhlYWQsIGFuZCBmb3IgMi42 IHZlcnNpb24gaW4gYXR0YWNoZWQgCmZpbGVzLiAgVGhlIHJlc3VsdCBpcyBpZGVudGljYWwuCgpU aGVyZWZvcmUsIEkgbGV0IHlvdQoKInBlcmZvcm0gYSBjb2RlIHJldmlldyBhbmQgbWVyZ2UKdGhl IGNvZGUgaWYgaXQgaXMgZmluZS4iCgpGb3IgaW5mb3JtYXRpb24sIEkgY2hlY2tlZCBhIGNvbXBs ZXRlIGtlcm5lbCBjb21waWxhdGlvbiB3aXRoIGNpZlggZHJpdmVyLCBhbmQgaXQncyBydW5uaW5n IGdvb2Qgb24geGVub21haSB2ZXJzaW9uIDIuNi4yLjEuCgpUaGFuayB5b3UgdmVyeSBtdWNoIGZv ciB5b3VyIGhlbHAuCgoKSGlsc2NoZXIgRnJhbmNlCjEyLCBydWUgZHUgMzXDqG1lIFLDqWdpbWVu dCBkJ0F2aWF0aW9uCk1pbmlwYXJjIGR1IENow6puZQo2OTUwMCBCUk9OCkZyYW5jZQpUw6lsLiA6 ICszMyAoMCkgNCA3MiAzNyA5OCA0MApGYXggIDogKzMzICgwKSA0IDc4IDI2IDgzIDI3Cmh0dHA6 Ly93d3cuaGlsc2NoZXIuZnIKSElMU0NIRVIgRlJBTkNFIAlKw6lyw7RtZSBQb25jaW4KanBvbmNp bkBoaWxzY2hlci5jb20KSW5nw6luaWV1ciBEw6l2ZWxvcHBlbWVudCBMb2dpY2llbApUw6lsLiA6 ICszMyAoMCkgNCA3MiAzNyA5OCA0NAoKCi0tLS0tLS0tLS0tLS0tIG5leHQgcGFydCAtLS0tLS0t LS0tLS0tLQpkaWZmIC0tZ2l0IGEva3NyYy9kcml2ZXJzL2NpZngvQ29uZmlnLmluIGIva3NyYy9k cml2ZXJzL2NpZngvQ29uZmlnLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmI0ZTZiZTEKLS0tIC9kZXYvbnVsbAorKysgYi9rc3JjL2RyaXZlcnMvY2lmeC9Db25maWcuaW4K QEAgLTAsMCArMSwxMCBAQAorIworIyBYZW5vbWFpIGNvbmZpZ3VyYXRpb24gZm9yIExpbnV4IHYy LjQKKyMKKworbWFpbm1lbnVfb3B0aW9uIG5leHRfY29tbWVudAorY29tbWVudCAnUmVhbC10aW1l IEhpbHNjaGVyIGNpZlggZHJpdmVyJworCitkZXBfdHJpc3RhdGUgJ0hpbHNjaGVyIGNpZlgnIENP TkZJR19YRU5PX0RSSVZFUlNfQ0lGWCAkQ09ORklHX1hFTk9fU0tJTl9SVERNCisKK2VuZG1lbnUK ZGlmZiAtLWdpdCBhL2tzcmMvZHJpdmVycy9jaWZ4L0NvbmZpZy5pbn4gYi9rc3JjL2RyaXZlcnMv Y2lmeC9Db25maWcuaW5+Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYmIw YmIKLS0tIC9kZXYvbnVsbAorKysgYi9rc3JjL2RyaXZlcnMvY2lmeC9Db25maWcuaW5+CkBAIC0w LDAgKzEsMTAgQEAKKyMKKyMgWGVub21haSBjb25maWd1cmF0aW9uIGZvciBMaW51eCB2Mi40Cisj CisKK21haW5tZW51X29wdGlvbiBuZXh0X2NvbW1lbnQKK2NvbW1lbnQgJ1JlYWwtdGltZSBIaWxz Y2hlciBjaWZYIGRyaXZlcicKKworZGVwX3RyaXN0YXRlICdIaWxzY2hlciBjaWZYIGRyaXZlcicg Q09ORklHX1hFTk9fRFJJVkVSU19DSUZYICRDT05GSUdfWEVOT19TS0lOX1JURE0KKworZW5kbWVu dQpkaWZmIC0tZ2l0IGEva3NyYy9kcml2ZXJzL2NpZngvS2NvbmZpZyBiL2tzcmMvZHJpdmVycy9j aWZ4L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE1YTQ1ZQot LS0gL2Rldi9udWxsCisrKyBiL2tzcmMvZHJpdmVycy9jaWZ4L0tjb25maWcKQEAgLTAsMCArMSwx MSBAQAorbWVudSAiSGlsc2NoZXIgY2lmWCBkcml2ZXIiCisKK2NvbmZpZyBYRU5PX0RSSVZFUlNf Q0lGWAorCWRlcGVuZHMgb24gWEVOT19TS0lOX1JURE0KKwl0cmlzdGF0ZSAiSGlsc2NoZXIgY2lm WCIKKwloZWxwCisKKwlUaGlzIGRyaXZlciBwcm92aWRlcyBIaWxzY2hlciBjaWZYIAorCW92ZXIg UlRETS4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEva3NyYy9kcml2ZXJzL2NpZngvS2NvbmZpZ34g Yi9rc3JjL2RyaXZlcnMvY2lmeC9LY29uZmlnfgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi45MTRkNmU2Ci0tLSAvZGV2L251bGwKKysrIGIva3NyYy9kcml2ZXJzL2NpZngvS2Nv bmZpZ34KQEAgLTAsMCArMSwxMSBAQAorbWVudSAiUmVhbC10aW1lIElQQyBkcml2ZXJzIgorCitj b25maWcgWEVOT19EUklWRVJTX0NJRlgKKwlkZXBlbmRzIG9uIFhFTk9fU0tJTl9SVERNCisJdHJp c3RhdGUgIkhpbHNjaGVyIGNpZlgiCisJaGVscAorCisJVGhpcyBkcml2ZXIgcHJvdmlkZXMgSGls c2NoZXIgY2lmWCAKKwlvdmVyIFJURE0uCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2tzcmMvZHJp dmVycy9jaWZ4L01ha2VmaWxlIGIva3NyYy9kcml2ZXJzL2NpZngvTWFrZWZpbGUKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNjYmMwMAotLS0gL2Rldi9udWxsCisrKyBiL2tz cmMvZHJpdmVycy9jaWZ4L01ha2VmaWxlCkBAIC0wLDAgKzEsMzcgQEAKK2lmbmVxICgkKFZFUlNJ T04pLiQoUEFUQ0hMRVZFTCksMi40KQorCisjIE1ha2VmaWxlIGZyYWcgZm9yIExpbnV4IHYyLjYg YW5kIHYzLngKKworRVhUUkFfQ0ZMQUdTICs9IC1EX19JTl9YRU5PTUFJX18gLUlpbmNsdWRlL3hl bm9tYWkgLUlkcml2ZXJzL3hlbm9tYWkvY2lmeAorCitvYmotJChDT05GSUdfWEVOT19EUklWRVJT X0NJRlgpICs9IHhlbm9fY2lmeF9wY2kubworCit4ZW5vX2NpZnhfcGNpLXkgOj0gY2lmeF9wY2ku bworCit4ZW5vX2NpZnhfcGNpLSQoQ09ORklHX1hFTk9fRFJJVkVSU19SVElQQ19DSUZYKSArPSBj aWZ4X3BjaS5vCisKK2Vsc2UKKworIyBNYWtlZmlsZSBmcmFnIGZvciBMaW51eCB2Mi40CisKK09f VEFSR0VUIDo9IGJ1aWx0LWluLm8KKworb2JqLSQoQ09ORklHX1hFTk9fRFJJVkVSU19DSUZYKSAr PSB4ZW5vX2NpZnhfcGNpLm8KKworeGVub19jaWZ4X3BjaS1vYmpzIDo9IGNpZnhfcGNpLm8KKwor b3B0X29ianMteSA6PQorb3B0X29ianMtJChDT05GSUdfWEVOT19EUklWRVJTX1JUSVBDX0NJRlgp ICs9IGNpZnhfcGNpLm8KKworeGVub19jaWZ4X3BjaS1vYmpzICs9ICQob3B0X29ianMteSkKKwor ZXhwb3J0LW9ianMgOj0gJCh4ZW5vX2NpZnhfcGNpLW9ianMpCisKK0VYVFJBX0NGTEFHUyArPSAt RF9fSU5fWEVOT01BSV9fIC1JJChUT1BESVIpL2luY2x1ZGUveGVub21haSAtSSQoVE9QRElSKS9p bmNsdWRlL3hlbm9tYWkvY29tcGF0IC1JLgorCitpbmNsdWRlICQoVE9QRElSKS9SdWxlcy5tYWtl CisKK3hlbm9fY2lmeF9wY2kubzogJCh4ZW5vX2NpZnhfcGNpLW9ianMpCisJJChMRCkgLXIgLW8g JEAgJCh4ZW5vX2NpZnhfcGNpLW9ianMpCisKK2VuZGlmCmRpZmYgLS1naXQgYS9rc3JjL2RyaXZl cnMvY2lmeC9NYWtlZmlsZX4gYi9rc3JjL2RyaXZlcnMvY2lmeC9NYWtlZmlsZX4KbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M5MGYxYQotLS0gL2Rldi9udWxsCisrKyBiL2tz cmMvZHJpdmVycy9jaWZ4L01ha2VmaWxlfgpAQCAtMCwwICsxLDQxIEBACitpZm5lcSAoJChWRVJT SU9OKS4kKFBBVENITEVWRUwpLDIuNCkKKworIyBNYWtlZmlsZSBmcmFnIGZvciBMaW51eCB2Mi42 IGFuZCB2My54CisKK0VYVFJBX0NGTEFHUyArPSAtRF9fSU5fWEVOT01BSV9fIC1JaW5jbHVkZS94 ZW5vbWFpIC1JZHJpdmVycy94ZW5vbWFpL2NpZngKKworb2JqLSQoQ09ORklHX1hFTk9fRFJJVkVS U19DSUZYKSArPSB4ZW5vX3J0aXBjLm8KKworeGVub19ydGlwYy15IDo9IHJ0aXBjLm8KKworeGVu b19ydGlwYy0kKENPTkZJR19YRU5PX0RSSVZFUlNfUlRJUENfWEREUCkgKz0geGRkcC5vCit4ZW5v X3J0aXBjLSQoQ09ORklHX1hFTk9fRFJJVkVSU19SVElQQ19JRERQKSArPSBpZGRwLm8KK3hlbm9f cnRpcGMtJChDT05GSUdfWEVOT19EUklWRVJTX1JUSVBDX0JVRlApICs9IGJ1ZnAubworCitlbHNl CisKKyMgTWFrZWZpbGUgZnJhZyBmb3IgTGludXggdjIuNAorCitPX1RBUkdFVCA6PSBidWlsdC1p bi5vCisKK29iai0kKENPTkZJR19YRU5PX0RSSVZFUlNfUlRJUEMpICs9IHhlbm9fcnRpcGMubwor Cit4ZW5vX3J0aXBjLW9ianMgOj0gcnRpcGMubworCitvcHRfb2Jqcy15IDo9CitvcHRfb2Jqcy0k KENPTkZJR19YRU5PX0RSSVZFUlNfUlRJUENfWEREUCkgKz0geGRkcC5vCitvcHRfb2Jqcy0kKENP TkZJR19YRU5PX0RSSVZFUlNfUlRJUENfSUREUCkgKz0gaWRkcC5vCitvcHRfb2Jqcy0kKENPTkZJ R19YRU5PX0RSSVZFUlNfUlRJUENfQlVGUCkgKz0gYnVmcC5vCisKK3hlbm9fcnRpcGMtb2JqcyAr PSAkKG9wdF9vYmpzLXkpCisKK2V4cG9ydC1vYmpzIDo9ICQoeGVub19ydGlwYy1vYmpzKQorCitF WFRSQV9DRkxBR1MgKz0gLURfX0lOX1hFTk9NQUlfXyAtSSQoVE9QRElSKS9pbmNsdWRlL3hlbm9t YWkgLUkkKFRPUERJUikvaW5jbHVkZS94ZW5vbWFpL2NvbXBhdCAtSS4KKworaW5jbHVkZSAkKFRP UERJUikvUnVsZXMubWFrZQorCit4ZW5vX3J0aXBjLm86ICQoeGVub19ydGlwYy1vYmpzKQorCSQo TEQpIC1yIC1vICRAICQoeGVub19ydGlwYy1vYmpzKQorCitlbmRpZgpkaWZmIC0tZ2l0IGEva3Ny Yy9kcml2ZXJzL2NpZngvY2lmeF9wY2kuYyBiL2tzcmMvZHJpdmVycy9jaWZ4L2NpZnhfcGNpLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc3MzY3ZAotLS0gL2Rldi9udWxs CisrKyBiL2tzcmMvZHJpdmVycy9jaWZ4L2NpZnhfcGNpLmMKQEAgLTAsMCArMSwxMTg5IEBACisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCisgKiAgIENvcHlyaWdodCAoQykgMjAxMyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIEhpbHNjaGVyIEZy YW5jZSAoSlApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqCisgKiAgIGh0dHA6Ly93d3cuaGlsc2NoZXIuZnIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5ICAqCisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAg IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAq CisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mICAgICAgICAqCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiAgIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAg ICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiAgIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAg ICAgICAgICAgICAqCisgKiAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIDU5IFRlbXBsZSBQbGFjZSAt IFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEluY2x1 ZGVzICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2lu Y2x1ZGUgPGxpbnV4L21tYW4uaD4KKworI2luY2x1ZGUgPHJ0ZG0vcnRkbV9kcml2ZXIuaD4KKwor LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVf REVTQ1JJUFRJT04oIlJURE0gYm9hcmQgZHJpdmVyIGZvciBDaWZYIGNhcmRzIik7CitNT0RVTEVf QVVUSE9SKCJIaWxzY2hlciBGcmFuY2UgKEpQKSA8d3d3LmhpbHNjaGVyLmZyPiIpOworCisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisvKiEKKyAqICAgXGFkZHRvZ3JvdXAgY2lmeF9wY2lfQ29yZQor ICogICBAeworICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qICNkZWZpbmUgKi8KKwor I2lmbmRlZiBUUlVFCisjZGVmaW5lIFRSVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQor I2VuZGlmCQkJCS8qIFRSVUUgKi8KKworI2lmbmRlZiBGQUxTRQorI2RlZmluZSBGQUxTRSAgICAg ICAgICAgICAgICAgICAgICAgICAgIDAKKyNlbmRpZgkJCQkvKiBUUlVFICovCisKKyNpZm5kZWYg UENJX1ZFTkRPUl9JRF9ISUxTQ0hFUgorI2RlZmluZSBQQ0lfVkVORE9SX0lEX0hJTFNDSEVSICAg ICAgICAgIDB4MTVDRgorI2VuZGlmCQkJCS8qIFBDSV9WRU5ET1JfSURfSElMU0NIRVIgKi8KKwor I2lmbmRlZiBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFgKKyNkZWZpbmUgUENJX0RFVklDRV9J RF9ISUxTQ0hFUl9ORVRYICAgICAweDAwMDAKKyNlbmRpZgkJCQkvKiBQQ0lfREVWSUNFX0lEX0hJ TFNDSEVSX05FVFggKi8KKworI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFBMQwor I2RlZmluZSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFBMQyAgIDB4MDAxMAorI2VuZGlmCQkJ CS8qIFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExDICovCisKKyNpZm5kZWYgUENJX0RFVklD RV9JRF9ISUxTQ0hFUl9ORVRKQUNLCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVU SkFDSyAgMHgwMDIwCisjZW5kaWYJCQkJLyogUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRKQUNL ICovCisKKyNpZm5kZWYgUENJX1NVQkRFVklDRV9JRF9OWFNCX1BDQQorI2RlZmluZSBQQ0lfU1VC REVWSUNFX0lEX05YU0JfUENBICAgICAgIDB4MzIzNQorI2VuZGlmCQkJCS8qIFBDSV9TVUJERVZJ Q0VfSURfTlhTQl9QQ0EgKi8KKworI2lmbmRlZiBQQ0lfU1VCREVWSUNFX0lEX05YUENBCisjZGVm aW5lIFBDSV9TVUJERVZJQ0VfSURfTlhQQ0EgICAgICAgICAgMHgzMzM1CisjZW5kaWYJCQkJLyog UENJX1NVQkRFVklDRV9JRF9OWFBDQSAqLworCisjaWZuZGVmIFBDSV9TVUJERVZJQ0VfSURfTkVU UExDX1JBTQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX05FVFBMQ19SQU0gICAgIDB4MDAwMAor I2VuZGlmCQkJCS8qIFBDSV9TVUJERVZJQ0VfSURfTkVUUExDX1JBTSAqLworCisjaWZuZGVmIFBD SV9TVUJERVZJQ0VfSURfTkVUUExDX0ZMQVNICisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfTkVU UExDX0ZMQVNIICAgMHgwMDAxCisjZW5kaWYJCQkJLyogUENJX1NVQkRFVklDRV9JRF9ORVRQTENf RkxBU0ggKi8KKworI2lmbmRlZiBQQ0lfU1VCREVWSUNFX0lEX05FVEpBQ0tfUkFNCisjZGVmaW5l IFBDSV9TVUJERVZJQ0VfSURfTkVUSkFDS19SQU0gICAgMHgwMDAwCisjZW5kaWYJCQkJLyogUENJ X1NVQkRFVklDRV9JRF9ORVRKQUNLX1JBTSAqLworCisjaWZuZGVmIFBDSV9TVUJERVZJQ0VfSURf TkVUSkFDS19GTEFTSAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX05FVEpBQ0tfRkxBU0ggIDB4 MDAwMQorI2VuZGlmCQkJCS8qIFBDSV9TVUJERVZJQ0VfSURfTkVUSkFDS19GTEFTSCAqLworCisj ZGVmaW5lIERQTV9IT1NUX0lOVF9FTjAgICAgICAgICAgICAgICAgMHhmZmYwCisjZGVmaW5lIERQ TV9IT1NUX0lOVF9TVEFUMCAgICAgICAgICAgICAgMHhmZmUwCisjZGVmaW5lIFBMWF9HUElPX09G RlNFVCAgICAgICAgICAgICAgICAgMHgxNQorI2RlZmluZSBQTFhfVElNSU5HX09GRlNFVCAgICAg ICAgICAgICAgIDB4MGEKKworI2RlZmluZSBEUE1fSE9TVF9JTlRfTUFTSyAgICAgICAgICAgICAg IDB4ZTYwMGZmZmYKKyNkZWZpbmUgRFBNX0hPU1RfSU5UX0dMT0JBTF9FTiAgICAgICAgICAweDgw MDAwMDAwCisjZGVmaW5lIFBMWF9HUElPX0RBVEEwX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAw NAorI2RlZmluZSBQTFhfR1BJT19EQVRBMV9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMjAKKwor I2RlZmluZSBOWF9QQ0FfUENJXzhfQklUX0RQTV9NT0RFICAgICAgIDB4NTQzMUY5NjIKKyNkZWZp bmUgTlhfUENBX1BDSV8xNl9CSVRfRFBNX01PREUgICAgICAweDQwNzNGOEUyCisjZGVmaW5lIE5Y X1BDQV9QQ0lfMzJfQklUX0RQTV9NT0RFICAgICAgMHg0MDgyNDEyMgorCisvKiBOdW1iZXIgb2Yg YmFyICovCisvKiBwb2ludHMgdG8gdGhlIERQTSAtPiBuZXRYLCBuZXRQTEMsIG5ldEpBQ0sgKi8K KyNkZWZpbmUgRFBNX0JBUiAgICAgICAgICAgICAgICAgICAgICAgICAwCisvKiBwb2ludHMgdG8g dGhlIG9wdGlvbmFsIGV4dGVuZGVkIG1lbW9yeSAgICAgKi8KKyNkZWZpbmUgRVhUX01FTV9CQVIg ICAgICAgICAgICAgICAgICAgICAxCisvKiBwb2ludHMgdG8gdGhlIERQTSAtPiBuZXRYUExYICAg ICAgICAgICAgICAgKi8KKyNkZWZpbmUgUExYX0RQTV9CQVIgICAgICAgICAgICAgICAgICAgICAy CisvKiB0aW1pbmcgY29uZmlnIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZp bmUgUFhBX1BMWF9CQVIgICAgICAgICAgICAgICAgICAgICAwCisKKy8qIEluZGV4IG9mIGlvX2lu Zm8gc3RydWN0dXJlJ3MgbWVtb3J5IGFycmF5ICovCisvKiBmaXJzdCBtYXBwaW5nIGRlc2NyaWJl cyBEUE0gICAgICAgICAgICAgICovCisjZGVmaW5lIERQTV9JTkRFWCAgICAgICAgICAgICAgICAg ICAgICAgMAorLyogc2Vjb25kIG1hcHBpbmcgZGVzY3JpYmVzIGV4dGVuZGVkIG1lbW9yeSAqLwor I2RlZmluZSBFWFRfTUVNX0lOREVYICAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBNQVhf TUFQUyAgICAgICAgICAgICAgICAgICAgICAgIDIKKworI2RlZmluZSBNRU1fUEhZUyAgICAgICAg ICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBEUklWRVJfTkFNRSAgICAgICAgICAgICAgICAg ICAgICJydGRtX2NpZngiCisjZGVmaW5lIFBFUklQSEVSQUxfTkFNRSAgICAgICAgICAgICAgICAg ImNpZngiCisjZGVmaW5lIFBST1ZJREVSX05BTUUgICAgICAgICAgICAgICAgICAgIkhpbHNjaGVy IgorCisvKiBuYW1lIG9mIGEgTlhTQi1QQ0Egb3IgTlhQQ0EtUENJIGNhcmQgKi8KKyNkZWZpbmUg Q0lGWF9SVERNX1BMWF9DQVJEX05BTUUgICAgICAgICAibmV0eF9wbHgiCisvKiBuYW1lIG9mIGEg Y2lmWCBQQ0kgY2FyZCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0lGWF9SVERNX0NBUkRfTkFN RSAgICAgICAgICAgICAibmV0eCIKKy8qIG5hbWUgb2YgYSBuZXRQTEMgUENJIGNhcmQgICAgICAg ICAgICAqLworI2RlZmluZSBDSUZYX1JURE1fTkVUUExDX0NBUkRfTkFNRSAgICAgICJuZXRwbGMi CisvKiBuYW1lIG9mIGEgbmV0SkFDSyBQQ0kgY2FyZCAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0lG WF9SVERNX05FVEpBQ0tfQ0FSRF9OQU1FICAgICAibmV0amFjayIKKworLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworCisvKiBzdHJ1Y3R1cmUgKi8KKworc3RydWN0IHB4YV9kZXZfaW5mbyB7CisJdWlu dDMyX3QgX19pb21lbSAqcGx4OworCXVpbnQ4X3QgZHBtX21vZGU7CisJdWludDMyX3QgcGx4X3Rp bWluZzsKK307CisKK3N0cnVjdCBpb19tZW0geworCXVpbnQzMl90IGFkZHI7CisJdWludDMyX3Qg c2l6ZTsKKwlpbnQzMl90IG1lbXR5cGU7CisJdm9pZCBfX2lvbWVtICppbnRlcm5hbF9hZGRyOwor fTsKKworc3RydWN0IGlvX2luZm8geworCXN0cnVjdCBpb19tZW0gbWVtW01BWF9NQVBTXTsKKwlp bnQzMl90IGlycTsKKwl1aW50OF90IGlycV9lbmFibGU7CisJdWludDhfdCBpcnFfcmVnaXN0ZXJl ZDsKKwlydGRtX2lycV90IGlycV9oYW5kbGU7CisJdm9pZCAqcHJpdjsKK307CisKK3N0cnVjdCBp b19tYXBfbWVtIHsKKwl1aW50MzJfdCBwaHlzX2FkZHI7CisJdm9pZCAqKnZpcnRfYWRkcjsKKwl1 aW50MzJfdCBsZW5ndGg7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFByb3Rv dHlwZXMgKi8KKworI2lmZGVmIElSUV9TVVBQT1JUCitzdGF0aWMgaW50IGNpZnhfaGFuZGxlcihy dGRtX2lycV90ICppcnEpOworI2VuZGlmIC8qIElSUV9TVVBQT1JUICovCitzdGF0aWMgaW50IGNp ZnhfcHhhX3NldF9wbHhfdGltaW5nKHN0cnVjdCBydGRtX2RldmljZSAqaW5mbyk7CitzdGF0aWMg aW50IGNpZnhfcHhhX2dldF9wbHhfdGltaW5nKHN0cnVjdCBydGRtX2RldmljZSAqaW5mbyk7Citz dGF0aWMgaW50IGNpZnhfcHhhX2dldF9kcG1fbW9kZShzdHJ1Y3QgcnRkbV9kZXZpY2UgKmluZm8p OworCitzdGF0aWMgaW50IGNpZnhfcGNpX29wZW4oc3RydWN0IHJ0ZG1fZGV2X2NvbnRleHQgKmNv bnRleHQsCisJCQkgcnRkbV91c2VyX2luZm9fdCAqdXNlcl9pbmZvLCBpbnQgb2ZsYWdzKTsKK3N0 YXRpYyBpbnQgY2lmeF9wY2lfY2xvc2Uoc3RydWN0IHJ0ZG1fZGV2X2NvbnRleHQgKmNvbnRleHQs CisJCQkgIHJ0ZG1fdXNlcl9pbmZvX3QgKnVzZXJfaW5mbyk7CitzdGF0aWMgc3NpemVfdCBjaWZ4 X3BjaV9yZWFkKHN0cnVjdCBydGRtX2Rldl9jb250ZXh0ICpjb250ZXh0LAorCQkJICAgICBydGRt X3VzZXJfaW5mb190ICp1c2VyX2luZm8sIHZvaWQgKmJ1ZiwKKwkJCSAgICAgc2l6ZV90IG5ieXRl KTsKK3N0YXRpYyBzc2l6ZV90IGNpZnhfcGNpX3dyaXRlKHN0cnVjdCBydGRtX2Rldl9jb250ZXh0 ICpjb250ZXh0LAorCQkJICAgICAgcnRkbV91c2VyX2luZm9fdCAqdXNlcl9pbmZvLCBjb25zdCB2 b2lkICpidWYsCisJCQkgICAgICBzaXplX3QgbmJ5dGUpOworCitzdGF0aWMgaW50IGNpZnhfcGNp X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpp ZCk7CitzdGF0aWMgdm9pZCBjaWZ4X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldik7CisK Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KKworLyogTG9jYWwgdmFyaWFibGVzICovCisKKy8qKiBO dW1iZXIgb3IgY2lmeCBmb3VuZCBhbmQgb3BlbiAqLworc3RhdGljIGludDMyX3QgY2lmeF9udW07 CisKKy8qKiBSVERNIERldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBjb25z dCBzdHJ1Y3QgcnRkbV9kZXZpY2UgX19pbml0ZGF0YSBjaWZ4X2RldmljZV90bXBsID0geworCS5z dHJ1Y3RfdmVyc2lvbiA9IFJURE1fREVWSUNFX1NUUlVDVF9WRVIsCisKKwkuZGV2aWNlX2ZsYWdz ID0gUlRETV9OQU1FRF9ERVZJQ0UsCisJLmNvbnRleHRfc2l6ZSA9IDAsCisJLmRldmljZV9uYW1l ID0gIiIsCisKKwkub3Blbl9ucnQgPSBjaWZ4X3BjaV9vcGVuLAorCisJLm9wcyA9IHsKKwkJLmNs b3NlX25ydCA9IGNpZnhfcGNpX2Nsb3NlLAorCisJCS5yZWFkX25ydCA9IGNpZnhfcGNpX3JlYWQs CisJCS53cml0ZV9ucnQgPSBjaWZ4X3BjaV93cml0ZSwKKworCQkuaW9jdGxfcnQgPSBOVUxMLAor CQkuaW9jdGxfbnJ0ID0gTlVMTCwKKworCQkucmVhZF9ydCA9IE5VTEwsCisJCS53cml0ZV9ydCA9 IE5VTEwsCisJCX0sCisKKwkuZGV2aWNlX2NsYXNzID0gUlRETV9DTEFTU19FWFBFUklNRU5UQUws CisJLmRldmljZV9zdWJfY2xhc3MgPSBSVERNX1NVQkNMQVNTX0dFTkVSSUMsCisJLnByb2ZpbGVf dmVyc2lvbiA9IDEsCisJLmRyaXZlcl9uYW1lID0gRFJJVkVSX05BTUUsCisJLmRyaXZlcl92ZXJz aW9uID0gUlRETV9EUklWRVJfVkVSKDEsIDAsIDApLAorCS5wcm92aWRlcl9uYW1lID0gUFJPVklE RVJfTkFNRSwKK307CisKKy8qKiBEZXZpY2UgdGFibGUgKi8KK3N0YXRpYyBERUZJTkVfUENJX0RF VklDRV9UQUJMRShjaWZ4X3BjaV90YmwpID0geworCXsKKwkJLnZlbmRvciA9IFBDSV9WRU5ET1Jf SURfSElMU0NIRVIsCisJCS5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFgsCisJ CS5zdWJ2ZW5kb3IgPSAwLAorCQkuc3ViZGV2aWNlID0gMCwKKwl9LAorCXsKKwkJLnZlbmRvciA9 IFBDSV9WRU5ET1JfSURfUExYLAorCQkuZGV2aWNlID0gUENJX0RFVklDRV9JRF9QTFhfOTAzMCwK KwkJLnN1YnZlbmRvciA9IFBDSV9WRU5ET1JfSURfUExYLAorCQkuc3ViZGV2aWNlID0gUENJX1NV QkRFVklDRV9JRF9OWFNCX1BDQSwKKwl9LAorCXsKKwkJLnZlbmRvciA9IFBDSV9WRU5ET1JfSURf UExYLAorCQkuZGV2aWNlID0gUENJX0RFVklDRV9JRF9QTFhfOTAzMCwKKwkJLnN1YnZlbmRvciA9 IFBDSV9WRU5ET1JfSURfUExYLAorCQkuc3ViZGV2aWNlID0gUENJX1NVQkRFVklDRV9JRF9OWFBD QSwKKwl9LAorCXsKKwkJLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSElMU0NIRVIsCisJCS5kZXZp Y2UgPSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFBMQywKKwkJLnN1YnZlbmRvciA9IFBDSV9W RU5ET1JfSURfSElMU0NIRVIsCisJCS5zdWJkZXZpY2UgPSBQQ0lfU1VCREVWSUNFX0lEX05FVFBM Q19SQU0sCisJfSwKKwl7CisJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0hJTFNDSEVSLAorCQku ZGV2aWNlID0gUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRQTEMsCisJCS5zdWJ2ZW5kb3IgPSBQ Q0lfVkVORE9SX0lEX0hJTFNDSEVSLAorCQkuc3ViZGV2aWNlID0gUENJX1NVQkRFVklDRV9JRF9O RVRQTENfRkxBU0gsCisJfSwKKwl7CisJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0hJTFNDSEVS LAorCQkuZGV2aWNlID0gUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRKQUNLLAorCQkuc3VidmVu ZG9yID0gUENJX1ZFTkRPUl9JRF9ISUxTQ0hFUiwKKwkJLnN1YmRldmljZSA9IFBDSV9TVUJERVZJ Q0VfSURfTkVUSkFDS19SQU0sCisJfSwKKwl7CisJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0hJ TFNDSEVSLAorCQkuZGV2aWNlID0gUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRKQUNLLAorCQku c3VidmVuZG9yID0gUENJX1ZFTkRPUl9JRF9ISUxTQ0hFUiwKKwkJLnN1YmRldmljZSA9IFBDSV9T VUJERVZJQ0VfSURfTkVUSkFDS19GTEFTSCwKKwl9LAorCXsgMCx9Cit9OworCisvKiogUlRETSBj aWZYIERyaXZlciAqLworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGNpZnhfcGNpX2RyaXZlciA9 IHsKKwkubmFtZSA9ICJjaWZ4IiwKKwkuaWRfdGFibGUgPSBjaWZ4X3BjaV90YmwsCisJLnByb2Jl ID0gY2lmeF9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IGNpZnhfcGNpX3JlbW92ZSwKK307CisKKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIElSUV9TVVBQT1JUCisKKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKy8qIQorICogICBcYnJpZWYgIGNpZnhfaGFuZGxlcgorICoKKyAqICAgXHBh cmFtICBbaW5dCWlycSAgICAgICBSZXNvdXJjZSB0YXNrIHBvaW50ZXIKKyAqCisgKiAgIFxyZXR1 cm4gUlRETV9JUlFfTk9ORSBvciBSVERNX0lSUV9IQU5ETEVECisgKgorICogICBcbm90ZSAgIGNp ZnggaW50ZXJydXB0IGhhbmRsZXIKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGlj IGlubGluZSBpbnQgY2lmeF9oYW5kbGVyKHJ0ZG1faXJxX3QgKmlycSkKK3sKKwlzdHJ1Y3QgcnRk bV9kZXZpY2UgKmluZm8gPQorCSAgICAoc3RydWN0IHJ0ZG1fZGV2aWNlICopcnRkbV9pcnFfZ2V0 X2FyZyhpcnEsIHZvaWQpOworCXN0cnVjdCBpb19pbmZvX3QgKmRldmljZV9kYXRhID0gKHN0cnVj dCBpb19pbmZvX3QgKilpbmZvLT5kZXZpY2VfZGF0YTsKKworCS8qIFRlc3QgaWYgcmVxdWVzdCBp cyBmb3IgdGhpcyBkcml2ZXIgKi8KKwlpZiAoKGRldmljZV9kYXRhLT5wcml2ICE9IE5VTEwpCisJ ICAgIHx8IChkZXZpY2VfZGF0YS0+aXJxX3JlZ2lzdGVyZWQgPT0gRkFMU0UpCisJICAgIHx8IChk ZXZpY2VfZGF0YS0+aXJxX2VuYWJsZSA9PSBGQUxTRSkpIHsKKwkJLyogVGhpcyBpcyBhIFBMWCBk ZXZpY2UgYW5kIGNhbm5vdCBwcm9kdWNlIGFuIElSUSwKKwkJICAgSVJRIG5vdCByZWdpc3RyZWQg b3Igbm90IGVuYWJsZSAoY2Fubm90IHByb2R1Y2UgYW4gSVJRKSAqLworCQlyZXR1cm4gUlRETV9J UlFfTk9ORTsKKwl9IGVsc2UgeworCQl2b2lkIF9faW9tZW0gKmludF9lbmFibGVfcmVnID0KKwkJ ICAgIGRldmljZV9kYXRhLT5tZW1bRFBNX0lOREVYXS5pbnRlcm5hbF9hZGRyICsKKwkJICAgIERQ TV9IT1NUX0lOVF9FTjA7CisJCXZvaWQgX19pb21lbSAqaW50X3N0YXR1c19yZWcgPQorCQkgICAg ZGV2aWNlX2RhdGEtPm1lbVtEUE1fSU5ERVhdLmludGVybmFsX2FkZHIgKworCQkgICAgRFBNX0hP U1RfSU5UX1NUQVQwOworCisJCS8qIElzIG9uZSBvZiBvdXIgaW50ZXJydXB0cyBlbmFibGVkIGFu ZCBhY3RpdmUgPyAqLworCQlpZiAoIShpb3JlYWQzMihpbnRfZW5hYmxlX3JlZykgJiBpb3JlYWQz MihpbnRfc3RhdHVzX3JlZykKKwkJICAgICAgJiBEUE1fSE9TVF9JTlRfTUFTSykpCisJCQlyZXR1 cm4gUlRETV9JUlFfTk9ORTsKKworCQkvKiBEaXNhYmxlIGludGVycnVwdCAqLworCQlpb3dyaXRl MzIoaW9yZWFkMzIoaW50X2VuYWJsZV9yZWcpCisJCQkgICYgfkRQTV9IT1NUX0lOVF9HTE9CQUxf RU4sIGludF9lbmFibGVfcmVnKTsKKworCQlyZXR1cm4gUlRETV9JUlFfSEFORExFRDsKKwl9Cit9 CisKKyNlbmRpZiAvKiBJUlFfU1VQUE9SVCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv KiEKKyAqICAgXGJyaWVmICBjaWZ4X3B4YV9zZXRfcGx4X3RpbWluZworICoKKyAqICAgXHBhcmFt CVtpbl0JaW5mbwljaWZ4IHJ0ZG0gZGV2aWNlIGluZm9ybWF0aW9uCisgKgorICogICBccmV0dXJu IDAgKE9LKSBvciBFcnJvcgorICoKKyAqICAgXG5vdGUgICBTZXQgcGx4IHRpbWluZworICovCisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGNpZnhfcHhhX3NldF9wbHhfdGltaW5n KHN0cnVjdCBydGRtX2RldmljZSAqaW5mbykKK3sKKwlzdHJ1Y3QgcHhhX2Rldl9pbmZvICpweGFf aW5mbyA9CisJICAgIChzdHJ1Y3QgcHhhX2Rldl9pbmZvICopKChzdHJ1Y3QgaW9faW5mbyAqKWlu Zm8tPmRldmljZV9kYXRhKS0+cHJpdjsKKwl1aW50MzJfdCBfX2lvbWVtICpwbHhfdGltaW5nOwor CisJaWYgKCFweGFfaW5mbykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwbHhfdGltaW5nID0gcHhh X2luZm8tPnBseCArIFBMWF9USU1JTkdfT0ZGU0VUOworCSpwbHhfdGltaW5nID0gcHhhX2luZm8t PnBseF90aW1pbmc7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor LyohCisgKiAgIFxicmllZiAgY2lmeF9weGFfZ2V0X3BseF90aW1pbmcKKyAqCisgKiAgIFxwYXJh bQlbaW5dCWluZm8JY2lmeCBydGRtIGRldmljZSBpbmZvcm1hdGlvbgorICoKKyAqICAgXHJldHVy biAwIChPSykgb3IgRXJyb3IKKyAqCisgKiAgIFxub3RlICAgR2V0IHBseCB0aW1pbmcKKyAqLwor LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBjaWZ4X3B4YV9nZXRfcGx4X3RpbWlu ZyhzdHJ1Y3QgcnRkbV9kZXZpY2UgKmluZm8pCit7CisJc3RydWN0IHB4YV9kZXZfaW5mbyAqcHhh X2luZm8gPQorCSAgICAoc3RydWN0IHB4YV9kZXZfaW5mbyAqKSgoc3RydWN0IGlvX2luZm8gKilp bmZvLT5kZXZpY2VfZGF0YSktPnByaXY7CisKKwlpZiAoIXB4YV9pbmZvKQorCQlyZXR1cm4gLUVO T0RFVjsKKworCXN3aXRjaCAocHhhX2luZm8tPmRwbV9tb2RlKSB7CisJY2FzZSA4OgorCQlweGFf aW5mby0+cGx4X3RpbWluZyA9IE5YX1BDQV9QQ0lfOF9CSVRfRFBNX01PREU7CisJCWJyZWFrOwor CWNhc2UgMTY6CisJCXB4YV9pbmZvLT5wbHhfdGltaW5nID0gTlhfUENBX1BDSV8xNl9CSVRfRFBN X01PREU7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCXB4YV9pbmZvLT5wbHhfdGltaW5nID0gTlhf UENBX1BDSV8zMl9CSVRfRFBNX01PREU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAt RUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv KiEKKyAqICAgXGJyaWVmICBjaWZ4X3B4YV9nZXRfZHBtX21vZGUKKyAqCisgKgkgXHBhcmFtCVtp bl0JaW5mbwljaWZ4IHJ0ZG0gZGV2aWNlIGluZm9ybWF0aW9uCisgKgorICogICBccmV0dXJuIDAg KE9LKSBvciBFcnJvcgorICoKKyAqICAgXG5vdGUgICBHZXQgZHBtIG1vZGUKKyAqLworLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworc3RhdGljIGludCBjaWZ4X3B4YV9nZXRfZHBtX21vZGUoc3RydWN0 IHJ0ZG1fZGV2aWNlICppbmZvKQoreworCXN0cnVjdCBweGFfZGV2X2luZm8gKnB4YV9pbmZvID0K KwkgICAgKHN0cnVjdCBweGFfZGV2X2luZm8gKikoKHN0cnVjdCBpb19pbmZvICopaW5mby0+ZGV2 aWNlX2RhdGEpLT5wcml2OworCXVpbnQzMl90IF9faW9tZW0gKnBseF9ncGlvOworCisJaWYgKCFw eGFfaW5mbykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwbHhfZ3BpbyA9IHB4YV9pbmZvLT5wbHgg KyBQTFhfR1BJT19PRkZTRVQ7CisKKwlpZiAoKCpwbHhfZ3BpbyAmIFBMWF9HUElPX0RBVEEwX01B U0spCisJICAgICYmIH4oKnBseF9ncGlvICYgUExYX0dQSU9fREFUQTFfTUFTSykpCisJCXB4YV9p bmZvLT5kcG1fbW9kZSA9IDg7CisJZWxzZSBpZiAofigqcGx4X2dwaW8gJiBQTFhfR1BJT19EQVRB MF9NQVNLKQorCQkgJiYgKCpwbHhfZ3BpbyAmIFBMWF9HUElPX0RBVEExX01BU0spKQorCQlweGFf aW5mby0+ZHBtX21vZGUgPSAzMjsKKwllbHNlIGlmICh+KCpwbHhfZ3BpbyAmIFBMWF9HUElPX0RB VEEwX01BU0spCisJCSAmJiB+KCpwbHhfZ3BpbyAmIFBMWF9HUElPX0RBVEExX01BU0spKQorCQlw eGFfaW5mby0+ZHBtX21vZGUgPSAxNjsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0 dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogICBcYnJpZWYgIGNp ZnhfcGNpX29wZW4KKyAqCisgKiAgIFxwYXJhbQlbaW5dCWNvbnRleHQJCWNvbnRleHQKKyAqICAg XHBhcmFtCVtpbl0JdXNlcl9pbmZvCXVzZXIgaW5mb3JtYXRpb24KKyAqCSBccGFyYW0JW2luXQlv ZmxhZ3MJCWZsYWdzIChmbGFnIElSUSB1c2VkKQorICoKKyAqICAgXHJldHVybiAwIChPSykgb3Ig RXJyb3IKKyAqCisgKiAgIFxub3RlICAgT3BlbiBSVERNIGNpZnggcGNpIGRyaXZlcgorICovCisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGNpZnhfcGNpX29wZW4oc3RydWN0IHJ0 ZG1fZGV2X2NvbnRleHQgKmNvbnRleHQsCisJCQkgcnRkbV91c2VyX2luZm9fdCAqdXNlcl9pbmZv LCBpbnQgb2ZsYWdzKQoreworI2lmZGVmIElSUV9TVVBQT1JUCisJc3RydWN0IHJ0ZG1fZGV2aWNl ICppbmZvID0gKHN0cnVjdCBydGRtX2RldmljZSAqKWNvbnRleHQtPmRldmljZTsKKwlpbnQzMl90 IHJldDsKKworCS8qIFRlc3QgaWYgKG9mbGFncykgSVJRIGFyZSB1c2UgKi8KKwlpZiAob2ZsYWdz ID09IFRSVUUpIHsKKwkJaWYgKCgoc3RydWN0IGlvX2luZm9fdCAqKWluZm8tPmRldmljZV9kYXRh KS0+aXJxX3JlZ2lzdGVyZWQKKwkJICAgID09IEZBTFNFKSB7CisJCQkvKiBSZWdpc3RlciBJUlEg Ki8KKwkJCXJldCA9CisJCQkgICAgcnRkbV9pcnFfcmVxdWVzdCgmCisJCQkJCSAgICAgKCgoc3Ry dWN0IGlvX2luZm9fdCAqKWluZm8tPgorCQkJCQkgICAgICAgZGV2aWNlX2RhdGEpLT5pcnFfaGFu ZGxlKSwKKwkJCQkJICAgICAoKHN0cnVjdCBpb19pbmZvX3QgKilpbmZvLT4KKwkJCQkJICAgICAg ZGV2aWNlX2RhdGEpLT5pcnEsIGNpZnhfaGFuZGxlciwKKwkJCQkJICAgICBSVERNX0lSUVRZUEVf U0hBUkVELAorCQkJCQkgICAgIGluZm8tPmRldmljZV9uYW1lLCAodm9pZCAqKWluZm8pOworCisJ CQlpZiAocmV0ICE9IDApIHsKKyNpZmRlZiBERUJVRworCQkJCXN3aXRjaCAocmV0KSB7CisJCQkJ Y2FzZSAtRUlOVkFMOgorCQkJCQlydGRtX3ByaW50aygKKyJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9y OiBydGRtX2lycV9yZXF1ZXN0OiBhbiBpbnZhbGlkIHBhcmFtZXRlciB3YXMgcGFzc2VkXG4iKTsK KwkJCQkJYnJlYWs7CisJCQkJY2FzZSAtRUJVU1k6CisJCQkJCXJ0ZG1fcHJpbnRrKAorImNpZngg cnRkbSBkcml2ZXIgZXJyb3I6IHJ0ZG1faXJxX3JlcXVlc3Q6IHRoZSBzcGVjaWZpZWQgSVJRIGxp bmUgaXMgYWxyZWFkeSBpbiB1c2VcbiIpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJ CQlydGRtX3ByaW50aygKKyJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yOiBydGRtX2lycV9yZXF1ZXN0 IGVycm9yXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorI2VuZGlmIC8qIERFQlVHICovCisKKwkJ CQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0gZWxzZQorCQkJCSgoaW9faW5mb190ICopIGluZm8tPgor CQkJCSBkZXZpY2VfZGF0YSktPmlycV9yZWdpc3RlcmVkID0gVFJVRTsKKwkJfQorCX0KKyNlbmRp ZiAvKiBJUlFfU1VQUE9SVCAqLworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KKy8qIQorICoJXGJyaWVmICBjaWZ4X3BjaV9jbG9zZQorICoKKyAqCVxwYXJhbQlbaW5d CWNvbnRleHQJCWNvbnRleHQKKyAqCVxwYXJhbQlbaW5dCXVzZXJfaW5mbwl1c2VyIGluZm9ybWF0 aW9uCisgKgorICoJXHJldHVybiAwIChPSykgb3IgRXJyb3IKKyAqCisgKglcbm90ZQlDbG9zZSBS VERNIGNpZnggcGNpIGRyaXZlcgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMg aW50IGNpZnhfcGNpX2Nsb3NlKHN0cnVjdCBydGRtX2Rldl9jb250ZXh0ICpjb250ZXh0LAorCQkJ ICBydGRtX3VzZXJfaW5mb190ICp1c2VyX2luZm8pCit7CisjaWZkZWYgSVJRX1NVUFBPUlQKKwlz dHJ1Y3QgcnRkbV9kZXZpY2UgKmluZm8gPSAoc3RydWN0IHJ0ZG1fZGV2aWNlICopY29udGV4dC0+ ZGV2aWNlOworCisJaWYgKCgoc3RydWN0IGlvX2luZm9fdCAqKWluZm8tPmRldmljZV9kYXRhKS0+ aXJxX3JlZ2lzdGVyZWQgPT0gVFJVRSkgeworCQlpZiAoKChzdHJ1Y3QgaW9faW5mb190ICopaW5m by0+ZGV2aWNlX2RhdGEpLT4KKwkJCQkJCQlpcnFfZW5hYmxlID09IFRSVUUpIHsKKwkJCS8qIERp c2FibGUgSVJRICovCisJCQlpZiAocnRkbV9pcnFfZGlzYWJsZQorCQkJICAgICgmCisJCQkgICAg ICgoKHN0cnVjdCBpb19pbmZvX3QgKilpbmZvLT5kZXZpY2VfZGF0YSktPgorCQkJICAgICAgaXJx X2hhbmRsZSkpICE9IDApIHsKKyNpZmRlZiBERUJVRworCQkJCXJ0ZG1fcHJpbnRrKAorCQkJImNp ZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBydGRtX2lycV9kaXNhYmxlIGVycm9yXG4iKTsKKyNlbmRp ZiAvKiBERUJVRyAqLworCisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCX0KKworCQkvKiBV bnJlZ2lzdGVyIElSUSAqLworCQlpZiAocnRkbV9pcnFfZnJlZQorCQkgICAgKCYoKChzdHJ1Y3Qg aW9faW5mb190ICopaW5mby0+ZGV2aWNlX2RhdGEpLT5pcnFfaGFuZGxlKSkgIT0KKwkJICAgIDAp IHsKKyNpZmRlZiBERUJVRworCQkJcnRkbV9wcmludGsKKwkJCSAgICAoImNpZnggcnRkbSBkcml2 ZXIgZXJyb3IgOiBydGRtX2lycV9mcmVlIGVycm9yXG4iKTsKKyNlbmRpZiAvKiBERUJVRyAqLwor CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KKyNlbmRpZiAvKiBJUlFfU1VQUE9SVCAqLwor CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogIFxicmll ZiAgY2lmeF9wY2lfcmVhZAorICoKKyAqCVxwYXJhbQlbaW5dCWNvbnRleHQJCWNvbnRleHQKKyAq CVxwYXJhbQlbaW5dCXVzZXJfaW5mbwl1c2VyIGluZm9ybWF0aW9uCisgKglccGFyYW0JW2luXQli dWYJdXNlcglidWZmZXIKKyAqCVxwYXJhbQlbaW5dCW5ieXRlCQludW1iZXIgb2YgYnl0ZSB0byBy ZWFkCisgKgorICogIFxyZXR1cm4gc2l6ZSByZWFkCisgKgorICogIFxub3RlICAgUmVhZAorICov CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3NpemVfdCBjaWZ4X3BjaV9yZWFkKHN0 cnVjdCBydGRtX2Rldl9jb250ZXh0ICpjb250ZXh0LAorCQkJICAgICBydGRtX3VzZXJfaW5mb190 ICp1c2VyX2luZm8sIHZvaWQgKmJ1ZiwKKwkJCSAgICAgc2l6ZV90IG5ieXRlKQoreworCXN0cnVj dCBydGRtX2RldmljZSAqaW5mbyA9IChzdHJ1Y3QgcnRkbV9kZXZpY2UgKiljb250ZXh0LT5kZXZp Y2U7CisKKwlpZiAobmJ5dGUgPiBzaXplb2Yoc3RydWN0IGlvX2luZm8pKSB7CisjaWZkZWYgREVC VUcKKwkJcnRkbV9wcmludGsKKwkJICAgICgiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IGRhdGEg dXNlciBzaXplIHRvbyBiaWdcbiIpOworI2VuZGlmIC8qIERFQlVHICovCisKKwkJcmV0dXJuIDA7 CisJfQorCisJLyogQ29weSBkYXRhIGluZm9ybWF0aW9uIGZvciB1c2VybGFuZCAqLworCWlmIChy dGRtX3NhZmVfY29weV90b191c2VyKHVzZXJfaW5mbywgYnVmLAorCQkJCSAgICgoc3RydWN0IGlv X2luZm8gKilpbmZvLT5kZXZpY2VfZGF0YSksCisJCQkJICAgbmJ5dGUpKSB7CisjaWZkZWYgREVC VUcKKwkJcnRkbV9wcmludGsKKwkJICAgICgiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IGNhbid0 IGNvcHkgZGF0YSBmcm9tIGRyaXZlclxuIik7CisjZW5kaWYgLyogREVCVUcgKi8KKwl9CisKKwly ZXR1cm4gbmJ5dGU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICoJXGJyaWVm ICBjaWZ4X3BjaV93cml0ZQorICoKKyAqICBccGFyYW0JW2luXQljb250ZXh0CQljb250ZXh0Cisg KglccGFyYW0JW2luXQl1c2VyX2luZm8JdXNlciBpbmZvcm1hdGlvbgorICoJXHBhcmFtCVtpbl0J YnVmCXVzZXIJYnVmZmVyCisgKglccGFyYW0JW2luXQluYnl0ZQkJbnVtYmVyIG9mIGJ5dGUgdG8g cmVhZAorICoKKyAqICAgXHJldHVybiBzaXplIHJlYWQKKyAqCisgKiAgIFxub3RlICAgUmVhZAor ICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3NpemVfdCBjaWZ4X3BjaV93cml0 ZShzdHJ1Y3QgcnRkbV9kZXZfY29udGV4dCAqY29udGV4dCwKKwkJCSAgICAgIHJ0ZG1fdXNlcl9p bmZvX3QgKnVzZXJfaW5mbywgY29uc3Qgdm9pZCAqYnVmLAorCQkJICAgICAgc2l6ZV90IG5ieXRl KQoreworI2lmZGVmIElSUV9TVVBQT1JUCisJc3RydWN0IHJ0ZG1fZGV2aWNlICppbmZvID0gKHN0 cnVjdCBydGRtX2RldmljZSAqKWNvbnRleHQtPmRldmljZTsKKwl1aW50OF90IGlycV9lbmFibGU7 CisjZW5kaWYgLyogSVJRX1NVUFBPUlQgKi8KKwlzdHJ1Y3QgaW9fbWFwX21lbSBtYXBfbWVtOwor CWludCByZXQ7CisKKwlpZiAobmJ5dGUgPiBzaXplb2Yoc3RydWN0IGlvX21hcF9tZW0pKSB7Cisj aWZkZWYgREVCVUcKKwkJcnRkbV9wcmludGsKKwkJICAgICgiY2lmeCBydGRtIGRyaXZlciBlcnJv ciA6IGRhdGEgdXNlciBzaXplIHRvbyBiaWdcbiIpOworI2VuZGlmIC8qIERFQlVHICovCisKKwkJ cmV0dXJuIDA7CisJfQorI2lmZGVmIElSUV9TVVBQT1JUCisJaWYgKG5ieXRlID09IHNpemVvZih1 aW50OF90KSkgeworCQkvKiBDb3B5IGRhdGEgZm9yIEtlcm5lbCAqLworCQlpZiAocnRkbV9zYWZl X2NvcHlfZnJvbV91c2VyCisJCSAgICAodXNlcl9pbmZvLCAmaXJxX2VuYWJsZSwgYnVmLCBuYnl0 ZSkpIHsKKwkJCW5ieXRlID0gMDsKKworI2lmZGVmIERFQlVHCisJCQlydGRtX3ByaW50aygKKwkJ ImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBjYW4ndCBjb3B5IGRhdGEgZnJvbSBkcml2ZXJcbiIp OworI2VuZGlmIC8qIERFQlVHICovCisJCX0gZWxzZSB7CisJCQlpZiAoKCgoKHN0cnVjdCBpb19p bmZvICopaW5mby0+ZGV2aWNlX2RhdGEpLT4KKwkJCSAgICAgaXJxX2VuYWJsZSkgIT0gaXJxX2Vu YWJsZSkKKwkJCSYmICgoKHN0cnVjdCBpb19pbmZvICopaW5mby0+ZGV2aWNlX2RhdGEpLT4KKwkJ CQkgICAgaXJxX3JlZ2lzdGVyZWQgPT0gVFJVRSkpIHsKKwkJCQkJaWYgKGlycV9lbmFibGUgPT0g VFJVRSkgeworCQkJCQkJLyogRW5hYmxlIElSUSAqLworCQkJCQkJcnRkbV9pcnFfZW5hYmxlCisJ CQkJCQkgICAgKCYKKwkJCQkJCSAgICAgKCgoc3RydWN0IGlvX2luZm8gKilpbmZvLT4KKwkJCQkJ CSAgICAgICBkZXZpY2VfZGF0YSktPgorCQkJCQkJICAgICAgaXJxX2hhbmRsZSk7CisJCQkJCX0g ZWxzZSB7CisJCQkJCQkvKiBEaXNhYmxlIElSUSAqLworCQkJCQkJcnRkbV9pcnFfZGlzYWJsZQor CQkJCQkJICAgICgmCisJCQkJCQkgICAgICgoKHN0cnVjdCBpb19pbmZvICopaW5mby0+CisJCQkJ CQkgICAgICAgZGV2aWNlX2RhdGEpLT4KKwkJCQkJCSAgICAgIGlycV9oYW5kbGUpOworCQkJCQl9 CisKKwkJCQkJKChzdHJ1Y3QgaW9faW5mbyAqKWluZm8tPmRldmljZV9kYXRhKS0+CisJCQkJCSAg ICBpcnFfZW5hYmxlID0gaXJxX2VuYWJsZTsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UgaWYg KG5ieXRlID09IHNpemVvZihzdHJ1Y3QgaW9fbWFwX21lbSkpIHsKKyNlbHNlIC8qIElSUV9TVVBQ T1JUICovCisJaWYgKG5ieXRlID09IHNpemVvZihzdHJ1Y3QgaW9fbWFwX21lbSkpIHsKKyNlbmRp ZiAvKiBJUlFfU1VQUE9SVCAqLworCQkvKiBDb3B5IGRhdGEgaW5mb3JtYXRpb24gZm9yIEtlcm5l bCAqLworCQlpZiAocnRkbV9zYWZlX2NvcHlfZnJvbV91c2VyKHVzZXJfaW5mbywgJm1hcF9tZW0s IGJ1ZiwgbmJ5dGUpKSB7CisJCQluYnl0ZSA9IDA7CisKKyNpZmRlZiBERUJVRworCQkJcnRkbV9w cmludGsoCisJCSJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogY2FuJ3QgY29weSBkYXRhIGZyb20g ZHJpdmVyXG4iKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCQl9IGVsc2UgeworCQkJaWYgKCptYXBf bWVtLnZpcnRfYWRkciA9PSBOVUxMKSB7CisJCQkJLyogTWFwIHBoeXNpY2FsIG9uIHZpcnR1YWwg bWVtb3J5ICovCisJCQkJcmV0ID0gcnRkbV9pb21hcF90b191c2VyKHVzZXJfaW5mbywKKwkJCQkJ CQkgKHBoeXNfYWRkcl90KSBtYXBfbWVtLgorCQkJCQkJCSBwaHlzX2FkZHIsCisJCQkJCQkJIChz aXplX3QpIG1hcF9tZW0uCisJCQkJCQkJIGxlbmd0aCwKKwkJCQkJCQkgKFBST1RfUkVBRCB8CisJ CQkJCQkJICBQUk9UX1dSSVRFKSwKKwkJCQkJCQkgbWFwX21lbS52aXJ0X2FkZHIsCisJCQkJCQkJ IE5VTEwsIE5VTEwpOworCisJCQkJaWYgKHJldCAhPSAwKSB7CisJCQkJCW5ieXRlID0gMDsKKwor I2lmZGVmIERFQlVHCisJCQkJCXN3aXRjaCAocmV0KSB7CisJCQkJCWNhc2UgLUVJTlZBTDoKKwkJ CQkJCXJ0ZG1fcHJpbnRrKAorImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBhbiBpbnZhbGlkIHN0 YXJ0IGFkZHJlc3MsIHNpemUsIG9yIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2FzIHBhc3NlZFxuIik7 CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAtRU5PTUVNOgorCQkJCQkJcnRkbV9wcmludGsoCisi Y2lmeCBydGRtIGRyaXZlciBlcnJvciA6IHRoZXJlIGlzIGluc3VmZmljaWVudCBmcmVlIG1lbW9y eSBvciB0aGUgbGltaXQgb2YgbWVtb3J5IG1hcHBpbmcgZm9yIHRoZSB1c2VyIHByb2Nlc3Mgd2Fz IHJlYWNoZWRcbiIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgLUVBR0FJTjoKKwkJCQkJCXJ0 ZG1fcHJpbnRrKAorImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiB0b28gbXVjaCBtZW1vcnkgaGFz IGJlZW4gYWxyZWFkeSBsb2NrZWQgYnkgdGhlIHVzZXIgcHJvY2Vzc1xuIik7CisJCQkJCQlicmVh azsKKwkJCQkJY2FzZSAtRVBFUk06CisJCQkJCQlydGRtX3ByaW50aygKKwkiY2lmeCBydGRtIGRy aXZlciBlcnJvciA6IGFuIGlsbGVnYWwgaW52b2NhdGlvbiBlbnZpcm9ubWVudCBpcyBkZXRlY3Rl ZFxuIik7CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCXJ0ZG1fcHJpbnRrKAor CQkJImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBydGRtX3NhZmVfY29weV9mcm9tX3VzZXIgZXJy b3JcbiIpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKyNlbmRpZiAvKiBERUJVRyAqLworCQkJCX0K KwkJCX0gZWxzZSB7CisJCQkJLyogVW5hcCB2aXJ0dWFsIG1lbW9yeSAqLworCQkJCXJldCA9IHJ0 ZG1fbXVubWFwKHVzZXJfaW5mbywgKm1hcF9tZW0udmlydF9hZGRyLAorCQkJCQkJICAoc2l6ZV90 KSBtYXBfbWVtLmxlbmd0aCk7CisKKwkJCQlpZiAocmV0ICE9IDApIHsKKwkJCQkJbmJ5dGUgPSAw OworCisjaWZkZWYgREVCVUcKKwkJCQkJc3dpdGNoIChyZXQpIHsKKwkJCQkJY2FzZSAtRUlOVkFM OgorCQkJCQkJcnRkbV9wcmludGsoCisJCSJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogYW4gaW52 YWxpZCBhZGRyZXNzIG9yIHNpemUgd2FzIHBhc3NlZFxuIik7CisJCQkJCQlicmVhazsKKwkJCQkJ Y2FzZSAtRVBFUk06CisJCQkJCQlydGRtX3ByaW50aygKKwkiY2lmeCBydGRtIGRyaXZlciBlcnJv ciA6IGFuIGlsbGVnYWwgaW52b2NhdGlvbiBlbnZpcm9ubWVudCBpcyBkZXRlY3RlZFxuIik7CisJ CQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCXJ0ZG1fcHJpbnRrKAorCQkJImNpZngg cnRkbSBkcml2ZXIgZXJyb3IgOiBydGRtX3NhZmVfY29weV9mcm9tX3VzZXIgZXJyb3JcbiIpOwor CQkJCQkJYnJlYWs7CisJCQkJCX0KKyNlbmRpZiAvKiBERUJVRyAqLworCQkJCX0KKwkJCX0KKwkJ fQorCX0gZWxzZSB7CisJCS8qIEVycm9yIG5vdGhpbmcgdG8gZG8gKi8KKwkJbmJ5dGUgPSAwOwor CX0KKworCXJldHVybiBuYnl0ZTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisg KiAgIFxicmllZiAgY2lmeF9wY2lfcHJvYmUKKyAqCisgKiAgIFxwYXJhbSAgW2luXSAgIGRldgor ICogICBccGFyYW0gIFtpbl0gICBpZAorICoKKyAqICAgXHJldHVybiAwIChPSykgb3IgRXJyb3IK KyAqCisgKiAgIFxub3RlICBPcGVuIHRoZSBkZXZpY2UuCisgKgkJCVRoaXMgZnVuY3Rpb24gaXMg Y2FsbGVkIHdoZW4gdGhlIGRldmljZSBzaGFsbCBiZSBvcGVuZWQuCisgKi8KKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KK3N0YXRpYyBpbnQgY2lmeF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRl diwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBydGRtX2Rldmlj ZSAqaW5mbyA9IE5VTEw7CisJc3RydWN0IGlvX2luZm9fdCAqZGV2aWNlX2RhdGEgPSBOVUxMOwor CWludDMyX3QgYmFyOworCWludDMyX3QgcmV0OworCisJLyogQWxsb2NhdGUgZGV2aWNlIGRyaXZl ciBzdHJ1Y3R1cmUgKi8KKwlpbmZvID0gcnRkbV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBydGRtX2Rl dmljZSkpOworCisJaWYgKGluZm8gPT0gTlVMTCkgeworI2lmZGVmIERFQlVHCisJCXJ0ZG1fcHJp bnRrKCJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogcnRkbV9tYWxsb2MgZXJyb3JcbiIpOworI2Vu ZGlmIC8qIERFQlVHICovCisKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0ID0gcGNpX2Vu YWJsZV9kZXZpY2UoZGV2KTsKKwlpZiAocmV0ICE9IDApIHsKKyNpZmRlZiBERUJVRworCQlydGRt X3ByaW50aygKKwkJImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBwY2lfZW5hYmxlX2RldmljZSBl cnJvciA6ICVpXG4iLAorCQlyZXQpOworI2VuZGlmIC8qIERFQlVHICovCisKKwkJZ290byBvdXRf ZnJlZTsKKwl9CisKKwlyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb25zKGRldiwgRFJJVkVSX05BTUUp OworCWlmIChyZXQgIT0gMCkgeworI2lmZGVmIERFQlVHCisJCXJ0ZG1fcHJpbnRrKAorCQkiY2lm eCBydGRtIGRyaXZlciBlcnJvciA6IHBjaV9yZXF1ZXN0X3JlZ2lvbnMgZXJyb3IgOiAlaVxuIiwK KwkJcmV0KTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisJCWdvdG8gb3V0X2Rpc2FibGU7CisJfQor CisJLyogSW5pdGlhbGl6ZSBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcyAqLworCW1lbWNw eShpbmZvLCAmY2lmeF9kZXZpY2VfdG1wbCwgc2l6ZW9mKHN0cnVjdCBydGRtX2RldmljZSkpOwor CisJaW5mby0+ZGV2aWNlX2lkID0gaWQtPmRldmljZTsKKwlzbnByaW50ZigoY2hhciAqKWluZm8t PmRldmljZV9uYW1lLCBSVERNX01BWF9ERVZOQU1FX0xFTiwgImNpZnglaSIsCisJCSBjaWZ4X251 bSk7CisJaW5mby0+cHJvY19uYW1lID0gaW5mby0+ZGV2aWNlX25hbWU7CisKKwlzd2l0Y2ggKGlk LT5kZXZpY2UpIHsKKwljYXNlIFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUWDoKKwkJYmFyID0g RFBNX0JBUjsKKwkJaW5mby0+cGVyaXBoZXJhbF9uYW1lID0gQ0lGWF9SVERNX0NBUkRfTkFNRTsK KwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFBMQzoKKwkJYmFyID0g RFBNX0JBUjsKKwkJaW5mby0+cGVyaXBoZXJhbF9uYW1lID0gQ0lGWF9SVERNX05FVFBMQ19DQVJE X05BTUU7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRKQUNLOgor CQliYXIgPSBEUE1fQkFSOworCQlpbmZvLT5wZXJpcGhlcmFsX25hbWUgPSBDSUZYX1JURE1fTkVU SkFDS19DQVJEX05BTUU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJhciA9IFBMWF9EUE1fQkFS OworCQlpbmZvLT5wZXJpcGhlcmFsX25hbWUgPSBDSUZYX1JURE1fUExYX0NBUkRfTkFNRTsKKwkJ YnJlYWs7CisJfQorCisJaW5mby0+ZGV2aWNlX2RhdGEgPSBOVUxMOworCisJLyogQWxsb2NhdGUg c3BlY2lmaWMgZGF0YSBzdHJjdXR1cmUgZm9yIGRldmljZSAqLworCWRldmljZV9kYXRhID0gcnRk bV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBpb19pbmZvKSk7CisKKwlpZiAoZGV2aWNlX2RhdGEgPT0g TlVMTCkgeworI2lmZGVmIERFQlVHCisJCXJ0ZG1fcHJpbnRrKCJjaWZ4IHJ0ZG0gZHJpdmVyIGVy cm9yIDogcnRkbV9tYWxsb2MgZXJyb3JcbiIpOworI2VuZGlmIC8qIERFQlVHICovCisKKwkJZ290 byBvdXRfcmVsZWFzZTsKKwl9CisKKwltZW1zZXQoZGV2aWNlX2RhdGEsIDAsIHNpemVvZihzdHJ1 Y3QgaW9faW5mbykpOworCisJLyogQkFSIDAgb3IgMiBwb2ludHMgdG8gdGhlIGNhcmQncyBkdWFs IHBvcnQgbWVtb3J5ICovCisJKChzdHJ1Y3QgaW9faW5mbyAqKWRldmljZV9kYXRhKS0+bWVtW0RQ TV9JTkRFWF0uYWRkciA9CisJICAgIHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIGJhcik7CisKKwlp ZiAoKChzdHJ1Y3QgaW9faW5mbyAqKWRldmljZV9kYXRhKS0+bWVtW0RQTV9JTkRFWF0uYWRkciA9 PSAwKSB7CisjaWZkZWYgREVCVUcKKwkJcnRkbV9wcmludGsKKwkJICAgICgiY2lmeCBydGRtIGRy aXZlciBlcnJvciA6IHBjaV9yZXNvdXJjZV9zdGFydCBlcnJvclxuIik7CisjZW5kaWYgLyogREVC VUcgKi8KKworCQlnb3RvIG91dF9yZWxlYXNlOworCX0KKworCSgoc3RydWN0IGlvX2luZm8gKilk ZXZpY2VfZGF0YSktPm1lbVtEUE1fSU5ERVhdLmludGVybmFsX2FkZHIgPQorCSAgICBpb3JlbWFw X25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgYmFyKSwKKwkJCSAgICBwY2lfcmVzb3Vy Y2VfbGVuKGRldiwgYmFyKSk7CisKKwlpZiAoKChzdHJ1Y3QgaW9faW5mbyAqKWRldmljZV9kYXRh KS0+bWVtW0RQTV9JTkRFWF0uaW50ZXJuYWxfYWRkcgorCQkJCQkJCQkJPT0gMCkgeworI2lmZGVm IERFQlVHCisJCXJ0ZG1fcHJpbnRrKCJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogaW9yZW1hcF9u b2NhY2hlIGVycm9yXG4iKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisJCWdvdG8gb3V0X3JlbGVh c2U7CisJfQorCisJZGV2X2luZm8oJmRldi0+ZGV2LCAiRFBNIGF0ICUwOGxYXG4iLAorCQkgKGxv bmcgdW5zaWduZWQgaW50KSgoc3RydWN0IGlvX2luZm8gKilkZXZpY2VfZGF0YSktPgorCQkgbWVt W0RQTV9JTkRFWF0uYWRkcik7CisJKChzdHJ1Y3QgaW9faW5mbyAqKWRldmljZV9kYXRhKS0+bWVt W0RQTV9JTkRFWF0uc2l6ZSA9CisJICAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LCBiYXIpOworCSgo c3RydWN0IGlvX2luZm8gKilkZXZpY2VfZGF0YSktPm1lbVtEUE1fSU5ERVhdLm1lbXR5cGUgPSBN RU1fUEhZUzsKKworCS8qIG1hcCBleHRlbmRlZCBtZW0gKEJBUiAxIHBvaW50cyB0byB0aGUgZXh0 ZW5kZWQgbWVtb3J5KSAqLworCSgoc3RydWN0IGlvX2luZm8gKilkZXZpY2VfZGF0YSktPm1lbVtF WFRfTUVNX0lOREVYXS5hZGRyID0KKwkgICAgcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgRVhUX01F TV9CQVIpOworCisJLyogZXh0ZW5kZWQgbWVtb3J5IGlzIG9wdGlvbmFsLCBzbyBkb24ndCBjYXJl IGlmIGl0IGlzIG5vdCBwcmVzZW50ICovCisJaWYgKCgoc3RydWN0IGlvX2luZm8gKilkZXZpY2Vf ZGF0YSktPm1lbVtFWFRfTUVNX0lOREVYXS5hZGRyICE9IDApIHsKKwkJKChzdHJ1Y3QgaW9faW5m byAqKWRldmljZV9kYXRhKS0+bWVtW0VYVF9NRU1fSU5ERVhdLgorCQkgICAgaW50ZXJuYWxfYWRk ciA9CisJCSAgICBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgRVhUX01F TV9CQVIpLAorCQkJCSAgICBwY2lfcmVzb3VyY2VfbGVuKGRldiwgRVhUX01FTV9CQVIpKTsKKwor CQlpZiAoKChzdHJ1Y3QgaW9faW5mbyAqKWRldmljZV9kYXRhKS0+bWVtW0VYVF9NRU1fSU5ERVhd LgorCQkgICAgaW50ZXJuYWxfYWRkciA9PSAwKSB7CisjaWZkZWYgREVCVUcKKwkJCXJ0ZG1fcHJp bnRrKAorCQkJImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBpb3JlbWFwX25vY2FjaGUgZXJyb3Jc biIpOworI2VuZGlmIC8qIERFQlVHICovCisKKwkJCWdvdG8gb3V0X3VubWFwOworCQl9CisKKwkJ ZGV2X2luZm8oJmRldi0+ZGV2LCAiZXh0ZW5kZWQgbWVtb3J5IGF0ICUwOGxYXG4iLAorCQkJIChs b25nIHVuc2lnbmVkIGludCkoKHN0cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT4KKwkJCSBt ZW1bRVhUX01FTV9JTkRFWF0uYWRkcik7CisJCSgoc3RydWN0IGlvX2luZm8gKilkZXZpY2VfZGF0 YSktPm1lbVtFWFRfTUVNX0lOREVYXS5zaXplID0KKwkJICAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2 LCBFWFRfTUVNX0JBUik7CisJCSgoc3RydWN0IGlvX2luZm8gKilkZXZpY2VfZGF0YSktPm1lbVtF WFRfTUVNX0lOREVYXS5tZW10eXBlID0KKwkJICAgIE1FTV9QSFlTOworCX0KKworCWlmICgoaWQt PmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFgpCisJICAgIHx8IChpZC0+ZGV2 aWNlID09IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExDKQorCSAgICB8fCAoaWQtPmRldmlj ZSA9PSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVEpBQ0spKSB7CisJCS8qIG1ha2Ugc3VyZSBh bGwgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgKi8KKwkJaW93cml0ZTMyKDAsCisJCQkgICgoc3Ry dWN0IGlvX2luZm8gKilkZXZpY2VfZGF0YSktPm1lbVtEUE1fSU5ERVhdLgorCQkJICBpbnRlcm5h bF9hZGRyICsgRFBNX0hPU1RfSU5UX0VOMCk7CisJCSgoc3RydWN0IGlvX2luZm8gKilkZXZpY2Vf ZGF0YSktPnByaXYgPSBOVUxMOworCX0gZWxzZSBpZiAoaWQtPnN1YmRldmljZSA9PSBQQ0lfU1VC REVWSUNFX0lEX05YUENBKSB7CisJCS8qIG1hcCBQTFggcmVnaXN0ZXJzICovCisJCXN0cnVjdCBw eGFfZGV2X2luZm8gKnB4YV9pbmZvID0KKwkJICAgIChzdHJ1Y3QgcHhhX2Rldl9pbmZvICopCisJ CSAgICBydGRtX21hbGxvYyhzaXplb2Yoc3RydWN0IHB4YV9kZXZfaW5mbykpOworCisJCWlmIChw eGFfaW5mbyA9PSBOVUxMKSB7CisjaWZkZWYgREVCVUcKKwkJCXJ0ZG1fcHJpbnRrCisJCQkgICAg KCJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogcnRkbV9tYWxsb2MgZXJyb3JcbiIpOworI2VuZGlm IC8qIERFQlVHICovCisKKwkJCWdvdG8gb3V0X3VubWFwOworCQl9CisKKwkJKChzdHJ1Y3QgaW9f aW5mbyAqKWRldmljZV9kYXRhKS0+cHJpdiA9IHB4YV9pbmZvOworCisJCS8qIHNldCBQWEEgUExY IFRpbWluZ3MgKi8KKwkJcHhhX2luZm8tPnBseCA9CisJCSAgICBpb3JlbWFwX25vY2FjaGUocGNp X3Jlc291cmNlX3N0YXJ0KGRldiwgUFhBX1BMWF9CQVIpLAorCQkJCSAgICBwY2lfcmVzb3VyY2Vf bGVuKGRldiwgUFhBX1BMWF9CQVIpKTsKKworCQlpZiAoIXB4YV9pbmZvLT5wbHgpCisJCQlnb3Rv IG91dF91bm1hcDsKKwkJaWYgKGNpZnhfcHhhX2dldF9kcG1fbW9kZShpbmZvKSkKKwkJCWdvdG8g b3V0X3VubWFwX3BseDsKKwkJaWYgKGNpZnhfcHhhX2dldF9wbHhfdGltaW5nKGluZm8pKQorCQkJ Z290byBvdXRfdW5tYXBfcGx4OworCQlpZiAoY2lmeF9weGFfc2V0X3BseF90aW1pbmcoaW5mbykp CisJCQlnb3RvIG91dF91bm1hcF9wbHg7CisJfSBlbHNlIHsKKwkJc3RydWN0IHB4YV9kZXZfaW5m byAqcHhhX2luZm8gPQorCQkgICAgKHN0cnVjdCBweGFfZGV2X2luZm8gKikKKwkJICAgIHJ0ZG1f bWFsbG9jKHNpemVvZihzdHJ1Y3QgcHhhX2Rldl9pbmZvKSk7CisKKwkJaWYgKHB4YV9pbmZvID09 IE5VTEwpIHsKKyNpZmRlZiBERUJVRworCQkJcnRkbV9wcmludGsKKwkJCSAgICAoImNpZnggcnRk bSBkcml2ZXIgZXJyb3IgOiBydGRtX21hbGxvYyBlcnJvclxuIik7CisjZW5kaWYgLyogREVCVUcg Ki8KKworCQkJZ290byBvdXRfZnJlZV9weGE7CisJCX0KKworCQkoKHN0cnVjdCBweGFfZGV2X2lu Zm8gKilweGFfaW5mbyktPnBseCA9IE5VTEw7CisJCSgoc3RydWN0IHB4YV9kZXZfaW5mbyAqKXB4 YV9pbmZvKS0+cGx4X3RpbWluZyA9IDA7CisJCSgoc3RydWN0IHB4YV9kZXZfaW5mbyAqKXB4YV9p bmZvKS0+ZHBtX21vZGUgPSAwOworCQkoKHN0cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT5w cml2ID0gcHhhX2luZm87CisJfQorCisJLyogSW5pdGlhbGl6ZSBpcnEgZGF0YSAqLworCSgoc3Ry dWN0IGlvX2luZm8gKilkZXZpY2VfZGF0YSktPmlycSA9IGRldi0+aXJxOworCSgoc3RydWN0IGlv X2luZm8gKilkZXZpY2VfZGF0YSktPmlycV9lbmFibGUgPSBGQUxTRTsKKwkoKHN0cnVjdCBpb19p bmZvICopZGV2aWNlX2RhdGEpLT5pcnFfcmVnaXN0ZXJlZCA9IEZBTFNFOworCisJaW5mby0+ZGV2 aWNlX2RhdGEgPSBkZXZpY2VfZGF0YTsKKworCS8qIFJlZ2lzdGVyIFJURE0gZGV2aWNlIGRyaXZl ciAqLworCXJldCA9IHJ0ZG1fZGV2X3JlZ2lzdGVyKGluZm8pOworCWlmIChyZXQgIT0gMCkgewor I2lmZGVmIERFQlVHCisJCXN3aXRjaCAocmV0KSB7CisJCWNhc2UgLUVJTlZBTDoKKwkJCXJ0ZG1f cHJpbnRrKAorImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBydGRtX2Rldl9yZWdpc3RlciBlcnJv ciA6IHRoZSBkZXZpY2Ugc3RydWN0dXJlIGNvbnRhaW5zIGludmFsaWQgZW50cmllcy4gQ2hlY2sg a2VybmVsIGxvZyBpbiB0aGlzIGNhc2VcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgLUVOT01FTToK KwkJCXJ0ZG1fcHJpbnRrKAorImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBydGRtX2Rldl9yZWdp c3RlciBlcnJvciA6IHRoZSBjb250ZXh0IGZvciBhbiBleGNsdXNpdmUgZGV2aWNlIGNhbm5vdCBi ZSBhbGxvY2F0ZWRcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgLUVFWElTVDoKKwkJCXJ0ZG1fcHJp bnRrKAorImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBydGRtX2Rldl9yZWdpc3RlciBlcnJvciA6 IHRoZSBzcGVjaWZpZWQgZGV2aWNlIG5hbWUgb2YgcHJvdG9jb2wgSUQgaXMgYWxyZWFkeSBpbiB1 c2VcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgLUVBR0FJTjoKKwkJCXJ0ZG1fcHJpbnRrKAorImNp ZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBydGRtX2Rldl9yZWdpc3RlciBlcnJvciA6IHNvbWUgL3By b2MgZW50cnkgY2Fubm90IGJlIGNyZWF0ZWRcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJ CQlydGRtX3ByaW50aygKKyJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogcnRkbV9kZXZfcmVnaXN0 ZXIgZXJyb3JcbiIpOworCQkJYnJlYWs7CisJCX0KKyNlbmRpZiAvKiBERUJVRyAqLworCisJCWlm IChpZC0+c3ViZGV2aWNlICE9IFBDSV9TVUJERVZJQ0VfSURfTlhQQ0EpCisJCQlnb3RvIG91dF91 bm1hcDsKKwkJZWxzZQorCQkJZ290byBvdXRfdW5tYXBfcGx4OworCX0KKworCXBjaV9zZXRfZHJ2 ZGF0YShkZXYsIGluZm8pOworCisJaWYgKGlkLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ISUxT Q0hFUl9ORVRYKQorCQlkZXZfaW5mbygmZGV2LT5kZXYsICJyZWdpc3RlcmVkIENpZlggY2FyZFxu Iik7CisJZWxzZSBpZiAoaWQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFBM QykKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAicmVnaXN0ZXJlZCBuZXRQTEMgY2FyZFxuIik7CisJ ZWxzZSBpZiAoaWQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVEpBQ0spCisJ CWRldl9pbmZvKCZkZXYtPmRldiwgInJlZ2lzdGVyZWQgbmV0SkFDSyBjYXJkXG4iKTsKKwllbHNl IGlmIChpZC0+c3ViZGV2aWNlID09IFBDSV9TVUJERVZJQ0VfSURfTlhTQl9QQ0EpCisJCWRldl9p bmZvKCZkZXYtPmRldiwgInJlZ2lzdGVyZWQgTlhTQi1QQ0EgYWRhcHRlciBjYXJkXG4iKTsKKwll bHNlIHsKKwkJc3RydWN0IHB4YV9kZXZfaW5mbyAqcHhhX2luZm8gPQorCQkgICAgKHN0cnVjdCBw eGFfZGV2X2luZm8gKikoKHN0cnVjdCBpb19pbmZvICopaW5mby0+CisJCQkJCSAgICBkZXZpY2Vf ZGF0YSktPnByaXY7CisJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCSAicmVnaXN0ZXJlZCBOWFBD QS1QQ0kgYWRhcHRlciBjYXJkIGluICVkIGJpdCBtb2RlXG4iLAorCQkJICgoc3RydWN0IHB4YV9k ZXZfaW5mbyAqKXB4YV9pbmZvKS0+ZHBtX21vZGUpOworCX0KKworCWNpZnhfbnVtKys7CisKKwly ZXR1cm4gMDsKKworIG91dF91bm1hcF9wbHg6CisJaW91bm1hcCgoKHN0cnVjdCBweGFfZGV2X2lu Zm8gKikoKChzdHJ1Y3QgaW9faW5mbyAqKWluZm8tPmRldmljZV9kYXRhKS0+CisJCQkJCSBwcml2 KSktPnBseCk7CisKKyBvdXRfZnJlZV9weGE6CisJcnRkbV9mcmVlKCgoc3RydWN0IGlvX2luZm8g KilpbmZvLT5kZXZpY2VfZGF0YSktPnByaXYpOworCisgb3V0X3VubWFwOgorCWlvdW5tYXAoKChz dHJ1Y3QgaW9faW5mbyAqKWluZm8tPmRldmljZV9kYXRhKS0+bWVtW0RQTV9JTkRFWF0uCisJCWlu dGVybmFsX2FkZHIpOworCWlmICgoKHN0cnVjdCBpb19pbmZvICopaW5mby0+ZGV2aWNlX2RhdGEp LT5tZW1bRVhUX01FTV9JTkRFWF0uCisJICAgIGludGVybmFsX2FkZHIgIT0gMCkKKwkJaW91bm1h cCgoKHN0cnVjdCBpb19pbmZvICopaW5mby0+ZGV2aWNlX2RhdGEpLT4KKwkJCW1lbVtFWFRfTUVN X0lOREVYXS5pbnRlcm5hbF9hZGRyKTsKKworIG91dF9yZWxlYXNlOgorCXBjaV9yZWxlYXNlX3Jl Z2lvbnMoZGV2KTsKKworIG91dF9kaXNhYmxlOgorCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwor Cisgb3V0X2ZyZWU6CisJaWYgKGluZm8tPmRldmljZV9kYXRhICE9IE5VTEwpCisJCXJ0ZG1fZnJl ZShpbmZvLT5kZXZpY2VfZGF0YSk7CisKKwlydGRtX2ZyZWUoaW5mbyk7CisKKwlyZXR1cm4gLUVO T0RFVjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKiAgIFxicmllZiAgY2lm eF9wY2lfcmVtb3ZlCisgKgorICogICBccGFyYW0gW2luXSBkZXYKKyAqCisgKiAgIFxyZXR1cm4g Tm9uZQorICoKKyAqICAgXG5vdGUgICBDbG9zZSB0aGUgZGV2aWNlLgorICogICBUaGlzIGZ1bmN0 aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBkZXZpY2Ugc2hhbGwgYmUgY2xvc2VkLgorICovCisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBjaWZ4X3BjaV9yZW1vdmUoc3RydWN0IHBj aV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcnRkbV9kZXZpY2UgKmluZm8gPSBwY2lfZ2V0X2RydmRh dGEoZGV2KTsKKwlzdHJ1Y3QgaW9faW5mbyAqZGV2aWNlX2RhdGEgPSAoc3RydWN0IGlvX2luZm8g KilpbmZvLT5kZXZpY2VfZGF0YTsKKwlzdHJ1Y3QgcHhhX2Rldl9pbmZvICpweGFfaW5mbyA9CisJ ICAgIChzdHJ1Y3QgcHhhX2Rldl9pbmZvICopZGV2aWNlX2RhdGEtPnByaXY7CisJaW50MzJfdCBy ZXQ7CisKKwlpZiAoaW5mby0+ZGV2aWNlX2RhdGEgPT0gTlVMTCkgeworI2lmZGVmIERFQlVHCisJ CXJ0ZG1fcHJpbnRrCisJCSAgICAoImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBkZXZpY2VfZGF0 YSBOVUxMIHBvaW50ZXJcbiIpOworI2VuZGlmIC8qIERFQlVHICovCisJCXJldHVybjsKKwl9CisK KwlpZiAocHhhX2luZm8gIT0gTlVMTCkgeworCQkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICov CisJCWlvd3JpdGUzMigwLAorCQkJICAoKHN0cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT5t ZW1bRFBNX0lOREVYXS4KKwkJCSAgaW50ZXJuYWxfYWRkciArIERQTV9IT1NUX0lOVF9FTjApOwor CisJCWlmIChweGFfaW5mby0+cGx4ICE9IE5VTEwpCisJCQlpb3VubWFwKCh2b2lkICopcHhhX2lu Zm8tPnBseCk7CisKKwkJcnRkbV9mcmVlKCh2b2lkICopcHhhX2luZm8pOworCX0KKworCS8qIFVu cmVnaXN0ZXIgUlRETSBkZXZpY2UgZHJpdmVyICovCisJcmV0ID0gcnRkbV9kZXZfdW5yZWdpc3Rl cihpbmZvLCAxMDAwKTsKKwlpZiAocmV0ICE9IDApIHsKKyNpZmRlZiBERUJVRworCQlzd2l0Y2gg KHJldCkgeworCQljYXNlIC1FTk9ERVY6CisJCQlydGRtX3ByaW50aygKKyJjaWZ4IHJ0ZG0gZHJp dmVyIGVycm9yIDogcnRkbV9kZXZfdW5yZWdpc3RlciBlcnJvciA6IHRoZSBkZXZpY2Ugd2FzIG5v dCByZWdpc3RlcmVkXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIC1FQUdBSU46CisJCQlydGRtX3By aW50aygKKyJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogcnRkbV9kZXZfdW5yZWdpc3RlciBlcnJv ciA6IHRoZSBkZXZpY2UgaXMgYnVzeSB3aXRoIG9wZW4gaW5zdGFuY2VzIGFuZCAwIGhhcyBiZWVu IHBhc3NlZCBmb3IgcG9sbF9kZWxheVxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJ0 ZG1fcHJpbnRrKAorImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBydGRtX2Rldl91bnJlZ2lzdGVy IGVycm9yXG4iKTsKKwkJCWJyZWFrOworCQl9CisjZW5kaWYgLyogREVCVUcgKi8KKworCQlyZXR1 cm47CisJfQorCisJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOworCXBjaV9kaXNhYmxlX2Rldmlj ZShkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCisJaW91bm1hcCgoKHN0cnVj dCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT5tZW1bRFBNX0lOREVYXS5pbnRlcm5hbF9hZGRyKTsK KwlpZiAoKChzdHJ1Y3QgaW9faW5mbyAqKWRldmljZV9kYXRhKS0+bWVtW0VYVF9NRU1fSU5ERVhd LmludGVybmFsX2FkZHIgIT0KKwkgICAgMCkKKwkJaW91bm1hcCgoKHN0cnVjdCBpb19pbmZvICop ZGV2aWNlX2RhdGEpLT5tZW1bRVhUX01FTV9JTkRFWF0uCisJCQlpbnRlcm5hbF9hZGRyKTsKKwor CS8qIFJlbGVhc2Ugc3RydWN0dXJlIG1lbW9yeSBhbGxvY2F0aW9uICovCisJcnRkbV9mcmVlKGlu Zm8tPmRldmljZV9kYXRhKTsKKwlydGRtX2ZyZWUoaW5mbyk7CisKKwlpZiAoY2lmeF9udW0gPiAw KQorCQljaWZ4X251bS0tOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqICAg XGJyaWVmICBjaWZ4X3BjaV9pbml0CisgKgorICogICBccmV0dXJuIE5vbmUKKyAqCisgKiAgIFxu b3RlICAgSXQgc2ltcGx5IHJlZ2lzdGVycyB0aGUgUlRETSBkZXZpY2UuCisgKiAgIFRoaXMgZnVu Y3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIG1vZHVsZSBpcyBsb2FkZWQuCisgKi8KKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgX19pbml0IGNpZnhfcGNpX2luaXQodm9pZCkKK3sK KwljaWZ4X251bSA9IDA7CisKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmY2lmeF9wY2lf ZHJpdmVyKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKiAgIFxicmllZiAg Y2lmeF9wY2lfZXhpdAorICoKKyAqICAgXHJldHVybiBOb25lCisgKgorICogICBcbm90ZSAgSXQg dW5yZWdpc3RlciB0aGUgUlRETSBkZXZpY2UuCisgKiAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk IHdoZW4gdGhlIG1vZHVsZSBpcyB1bmxvYWRlZC4KKyAqLworLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Lworc3RhdGljIHZvaWQgX19leGl0IGNpZnhfcGNpX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdp c3Rlcl9kcml2ZXIoJmNpZnhfcGNpX2RyaXZlcik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKy8qISBcfSAgICAgY2lmeF9wY2lfQ29yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworbW9k dWxlX2luaXQoY2lmeF9wY2lfaW5pdCk7Cittb2R1bGVfZXhpdChjaWZ4X3BjaV9leGl0KTsKKwor LyogRW5kIG9mIGZpbGUgOiBjaWZ4X3BjaS5jICovCmRpZmYgLS1naXQgYS9rc3JjL2RyaXZlcnMv Y2lmeC9jaWZ4X3BjaS5jfiBiL2tzcmMvZHJpdmVycy9jaWZ4L2NpZnhfcGNpLmN+Cm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiM2ZmZWEKLS0tIC9kZXYvbnVsbAorKysgYi9r c3JjL2RyaXZlcnMvY2lmeC9jaWZ4X3BjaS5jfgpAQCAtMCwwICsxLDExOTAgQEAKKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKKyAqICAgQ29weXJpZ2h0IChDKSAyMDEzICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgSGlsc2NoZXIgRnJhbmNlIChK UCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAq ICAgaHR0cDovL3d3dy5oaWxzY2hlci5mciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkg ICoKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqICAgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YgICAgICAgICoKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqICAgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoK KyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqICAgYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAg ICAgICoKKyAqICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUg MzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogSW5jbHVkZXMgKi8K KworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgor I2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRl IDxsaW51eC9tbWFuLmg+CisKKyNpbmNsdWRlIDxydGRtL3J0ZG1fZHJpdmVyLmg+CisKKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NS SVBUSU9OKCJSVERNIGJvYXJkIGRyaXZlciBmb3IgQ2lmWCBjYXJkcyIpOworTU9EVUxFX0FVVEhP UigiSGlsc2NoZXIgRnJhbmNlIChKUCkgPHd3dy5oaWxzY2hlci5mcj4iKTsKKworLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworLyohCisgKiAgIFxhZGR0b2dyb3VwIGNpZnhfcGNpX0NvcmUKKyAqICAg QHsKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAjZGVmaW5lICovCisKKyNpZm5k ZWYgVFJVRQorI2RlZmluZSBUUlVFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNlbmRp ZgkJCQkvKiBUUlVFICovCisKKyNpZm5kZWYgRkFMU0UKKyNkZWZpbmUgRkFMU0UgICAgICAgICAg ICAgICAgICAgICAgICAgICAwCisjZW5kaWYJCQkJLyogVFJVRSAqLworCisjaWZuZGVmIFBDSV9W RU5ET1JfSURfSElMU0NIRVIKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ISUxTQ0hFUiAgICAgICAg ICAweDE1Q0YKKyNlbmRpZgkJCQkvKiBQQ0lfVkVORE9SX0lEX0hJTFNDSEVSICovCisKKyNpZm5k ZWYgUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRYCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSElM U0NIRVJfTkVUWCAgICAgMHgwMDAwCisjZW5kaWYJCQkJLyogUENJX0RFVklDRV9JRF9ISUxTQ0hF Ul9ORVRYICovCisKKyNpZm5kZWYgUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRQTEMKKyNkZWZp bmUgUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRQTEMgICAweDAwMTAKKyNlbmRpZgkJCQkvKiBQ Q0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFBMQyAqLworCisjaWZuZGVmIFBDSV9ERVZJQ0VfSURf SElMU0NIRVJfTkVUSkFDSworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVEpBQ0sg IDB4MDAyMAorI2VuZGlmCQkJCS8qIFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUSkFDSyAqLwor CisjaWZuZGVmIFBDSV9TVUJERVZJQ0VfSURfTlhTQl9QQ0EKKyNkZWZpbmUgUENJX1NVQkRFVklD RV9JRF9OWFNCX1BDQSAgICAgICAweDMyMzUKKyNlbmRpZgkJCQkvKiBQQ0lfU1VCREVWSUNFX0lE X05YU0JfUENBICovCisKKyNpZm5kZWYgUENJX1NVQkRFVklDRV9JRF9OWFBDQQorI2RlZmluZSBQ Q0lfU1VCREVWSUNFX0lEX05YUENBICAgICAgICAgIDB4MzMzNQorI2VuZGlmCQkJCS8qIFBDSV9T VUJERVZJQ0VfSURfTlhQQ0EgKi8KKworI2lmbmRlZiBQQ0lfU1VCREVWSUNFX0lEX05FVFBMQ19S QU0KKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9ORVRQTENfUkFNICAgICAweDAwMDAKKyNlbmRp ZgkJCQkvKiBQQ0lfU1VCREVWSUNFX0lEX05FVFBMQ19SQU0gKi8KKworI2lmbmRlZiBQQ0lfU1VC REVWSUNFX0lEX05FVFBMQ19GTEFTSAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX05FVFBMQ19G TEFTSCAgIDB4MDAwMQorI2VuZGlmCQkJCS8qIFBDSV9TVUJERVZJQ0VfSURfTkVUUExDX0ZMQVNI ICovCisKKyNpZm5kZWYgUENJX1NVQkRFVklDRV9JRF9ORVRKQUNLX1JBTQorI2RlZmluZSBQQ0lf U1VCREVWSUNFX0lEX05FVEpBQ0tfUkFNICAgIDB4MDAwMAorI2VuZGlmCQkJCS8qIFBDSV9TVUJE RVZJQ0VfSURfTkVUSkFDS19SQU0gKi8KKworI2lmbmRlZiBQQ0lfU1VCREVWSUNFX0lEX05FVEpB Q0tfRkxBU0gKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9ORVRKQUNLX0ZMQVNIICAweDAwMDEK KyNlbmRpZgkJCQkvKiBQQ0lfU1VCREVWSUNFX0lEX05FVEpBQ0tfRkxBU0ggKi8KKworI2RlZmlu ZSBEUE1fSE9TVF9JTlRfRU4wICAgICAgICAgICAgICAgIDB4ZmZmMAorI2RlZmluZSBEUE1fSE9T VF9JTlRfU1RBVDAgICAgICAgICAgICAgIDB4ZmZlMAorI2RlZmluZSBQTFhfR1BJT19PRkZTRVQg ICAgICAgICAgICAgICAgIDB4MTUKKyNkZWZpbmUgUExYX1RJTUlOR19PRkZTRVQgICAgICAgICAg ICAgICAweDBhCisKKyNkZWZpbmUgRFBNX0hPU1RfSU5UX01BU0sgICAgICAgICAgICAgICAweGU2 MDBmZmZmCisjZGVmaW5lIERQTV9IT1NUX0lOVF9HTE9CQUxfRU4gICAgICAgICAgMHg4MDAwMDAw MAorI2RlZmluZSBQTFhfR1BJT19EQVRBMF9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNk ZWZpbmUgUExYX0dQSU9fREFUQTFfTUFTSyAgICAgICAgICAgICAweDAwMDAwMDIwCisKKyNkZWZp bmUgTlhfUENBX1BDSV84X0JJVF9EUE1fTU9ERSAgICAgICAweDU0MzFGOTYyCisjZGVmaW5lIE5Y X1BDQV9QQ0lfMTZfQklUX0RQTV9NT0RFICAgICAgMHg0MDczRjhFMgorI2RlZmluZSBOWF9QQ0Ff UENJXzMyX0JJVF9EUE1fTU9ERSAgICAgIDB4NDA4MjQxMjIKKworLyogTnVtYmVyIG9mIGJhciAq LworLyogcG9pbnRzIHRvIHRoZSBEUE0gLT4gbmV0WCwgbmV0UExDLCBuZXRKQUNLICovCisjZGVm aW5lIERQTV9CQVIgICAgICAgICAgICAgICAgICAgICAgICAgMAorLyogcG9pbnRzIHRvIHRoZSBv cHRpb25hbCBleHRlbmRlZCBtZW1vcnkgICAgICovCisjZGVmaW5lIEVYVF9NRU1fQkFSICAgICAg ICAgICAgICAgICAgICAgMQorLyogcG9pbnRzIHRvIHRoZSBEUE0gLT4gbmV0WFBMWCAgICAgICAg ICAgICAgICovCisjZGVmaW5lIFBMWF9EUE1fQkFSICAgICAgICAgICAgICAgICAgICAgMgorLyog dGltaW5nIGNvbmZpZyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBY QV9QTFhfQkFSICAgICAgICAgICAgICAgICAgICAgMAorCisvKiBJbmRleCBvZiBpb19pbmZvIHN0 cnVjdHVyZSdzIG1lbW9yeSBhcnJheSAqLworLyogZmlyc3QgbWFwcGluZyBkZXNjcmliZXMgRFBN ICAgICAgICAgICAgICAqLworI2RlZmluZSBEUE1fSU5ERVggICAgICAgICAgICAgICAgICAgICAg IDAKKy8qIHNlY29uZCBtYXBwaW5nIGRlc2NyaWJlcyBleHRlbmRlZCBtZW1vcnkgKi8KKyNkZWZp bmUgRVhUX01FTV9JTkRFWCAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgTUFYX01BUFMg ICAgICAgICAgICAgICAgICAgICAgICAyCisKKyNkZWZpbmUgTUVNX1BIWVMgICAgICAgICAgICAg ICAgICAgICAgICAxCisKKyNkZWZpbmUgRFJJVkVSX05BTUUgICAgICAgICAgICAgICAgICAgICAi cnRkbV9jaWZ4IgorI2RlZmluZSBQRVJJUEhFUkFMX05BTUUgICAgICAgICAgICAgICAgICJjaWZ4 IgorI2RlZmluZSBQUk9WSURFUl9OQU1FICAgICAgICAgICAgICAgICAgICJIaWxzY2hlciIKKwor LyogbmFtZSBvZiBhIE5YU0ItUENBIG9yIE5YUENBLVBDSSBjYXJkICovCisjZGVmaW5lIENJRlhf UlRETV9QTFhfQ0FSRF9OQU1FICAgICAgICAgIm5ldHhfcGx4IgorLyogbmFtZSBvZiBhIGNpZlgg UENJIGNhcmQgICAgICAgICAgICAgICovCisjZGVmaW5lIENJRlhfUlRETV9DQVJEX05BTUUgICAg ICAgICAgICAgIm5ldHgiCisvKiBuYW1lIG9mIGEgbmV0UExDIFBDSSBjYXJkICAgICAgICAgICAg Ki8KKyNkZWZpbmUgQ0lGWF9SVERNX05FVFBMQ19DQVJEX05BTUUgICAgICAibmV0cGxjIgorLyog bmFtZSBvZiBhIG5ldEpBQ0sgUENJIGNhcmQgICAgICAgICAgICovCisjZGVmaW5lIENJRlhfUlRE TV9ORVRKQUNLX0NBUkRfTkFNRSAgICAgIm5ldGphY2siCisKKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKworLyogc3RydWN0dXJlICovCisKK3N0cnVjdCBweGFfZGV2X2luZm8geworCXVpbnQzMl90 IF9faW9tZW0gKnBseDsKKwl1aW50OF90IGRwbV9tb2RlOworCXVpbnQzMl90IHBseF90aW1pbmc7 Cit9OworCitzdHJ1Y3QgaW9fbWVtIHsKKwl1aW50MzJfdCBhZGRyOworCXVpbnQzMl90IHNpemU7 CisJaW50MzJfdCBtZW10eXBlOworCXZvaWQgX19pb21lbSAqaW50ZXJuYWxfYWRkcjsKK307CisK K3N0cnVjdCBpb19pbmZvIHsKKwlzdHJ1Y3QgaW9fbWVtIG1lbVtNQVhfTUFQU107CisJaW50MzJf dCBpcnE7CisJdWludDhfdCBpcnFfZW5hYmxlOworCXVpbnQ4X3QgaXJxX3JlZ2lzdGVyZWQ7CisJ cnRkbV9pcnFfdCBpcnFfaGFuZGxlOworCXZvaWQgKnByaXY7Cit9OworCitzdHJ1Y3QgaW9fbWFw X21lbSB7CisJdWludDMyX3QgcGh5c19hZGRyOworCXZvaWQgKip2aXJ0X2FkZHI7CisJdWludDMy X3QgbGVuZ3RoOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQcm90b3R5cGVz ICovCisKKyNpZmRlZiBJUlFfU1VQUE9SVAorc3RhdGljIGludCBjaWZ4X2hhbmRsZXIocnRkbV9p cnFfdCAqaXJxKTsKKyNlbmRpZiAvKiBJUlFfU1VQUE9SVCAqLworc3RhdGljIGludCBjaWZ4X3B4 YV9zZXRfcGx4X3RpbWluZyhzdHJ1Y3QgcnRkbV9kZXZpY2UgKmluZm8pOworc3RhdGljIGludCBj aWZ4X3B4YV9nZXRfcGx4X3RpbWluZyhzdHJ1Y3QgcnRkbV9kZXZpY2UgKmluZm8pOworc3RhdGlj IGludCBjaWZ4X3B4YV9nZXRfZHBtX21vZGUoc3RydWN0IHJ0ZG1fZGV2aWNlICppbmZvKTsKKwor c3RhdGljIGludCBjaWZ4X3BjaV9vcGVuKHN0cnVjdCBydGRtX2Rldl9jb250ZXh0ICpjb250ZXh0 LAorCQkJIHJ0ZG1fdXNlcl9pbmZvX3QgKnVzZXJfaW5mbywgaW50IG9mbGFncyk7CitzdGF0aWMg aW50IGNpZnhfcGNpX2Nsb3NlKHN0cnVjdCBydGRtX2Rldl9jb250ZXh0ICpjb250ZXh0LAorCQkJ ICBydGRtX3VzZXJfaW5mb190ICp1c2VyX2luZm8pOworc3RhdGljIHNzaXplX3QgY2lmeF9wY2lf cmVhZChzdHJ1Y3QgcnRkbV9kZXZfY29udGV4dCAqY29udGV4dCwKKwkJCSAgICAgcnRkbV91c2Vy X2luZm9fdCAqdXNlcl9pbmZvLCB2b2lkICpidWYsCisJCQkgICAgIHNpemVfdCBuYnl0ZSk7Citz dGF0aWMgc3NpemVfdCBjaWZ4X3BjaV93cml0ZShzdHJ1Y3QgcnRkbV9kZXZfY29udGV4dCAqY29u dGV4dCwKKwkJCSAgICAgIHJ0ZG1fdXNlcl9pbmZvX3QgKnVzZXJfaW5mbywgY29uc3Qgdm9pZCAq YnVmLAorCQkJICAgICAgc2l6ZV90IG5ieXRlKTsKKworc3RhdGljIGludCBjaWZ4X3BjaV9wcm9i ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpOwor c3RhdGljIHZvaWQgY2lmeF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworCisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisKKy8qIExvY2FsIHZhcmlhYmxlcyAqLworCisvKiogTnVtYmVy IG9yIGNpZnggZm91bmQgYW5kIG9wZW4gKi8KK3N0YXRpYyBpbnQzMl90IGNpZnhfbnVtOworCisv KiogUlRETSBEZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCitzdGF0aWMgY29uc3Qgc3Ry dWN0IHJ0ZG1fZGV2aWNlIF9faW5pdGRhdGEgY2lmeF9kZXZpY2VfdG1wbCA9IHsKKwkuc3RydWN0 X3ZlcnNpb24gPSBSVERNX0RFVklDRV9TVFJVQ1RfVkVSLAorCisJLmRldmljZV9mbGFncyA9IFJU RE1fTkFNRURfREVWSUNFLAorCS5jb250ZXh0X3NpemUgPSAwLAorCS5kZXZpY2VfbmFtZSA9ICIi LAorCisJLm9wZW5fbnJ0ID0gY2lmeF9wY2lfb3BlbiwKKworCS5vcHMgPSB7CisJCS5jbG9zZV9u cnQgPSBjaWZ4X3BjaV9jbG9zZSwKKworCQkucmVhZF9ucnQgPSBjaWZ4X3BjaV9yZWFkLAorCQku d3JpdGVfbnJ0ID0gY2lmeF9wY2lfd3JpdGUsCisKKwkJLmlvY3RsX3J0ID0gTlVMTCwKKwkJLmlv Y3RsX25ydCA9IE5VTEwsCisKKwkJLnJlYWRfcnQgPSBOVUxMLAorCQkud3JpdGVfcnQgPSBOVUxM LAorCQl9LAorCisJLmRldmljZV9jbGFzcyA9IFJURE1fQ0xBU1NfRVhQRVJJTUVOVEFMLAorCS5k ZXZpY2Vfc3ViX2NsYXNzID0gUlRETV9TVUJDTEFTU19HRU5FUklDLAorCS5wcm9maWxlX3ZlcnNp b24gPSAxLAorCS5kcml2ZXJfbmFtZSA9IERSSVZFUl9OQU1FLAorCS5kcml2ZXJfdmVyc2lvbiA9 IFJURE1fRFJJVkVSX1ZFUigxLCAwLCAwKSwKKwkucHJvdmlkZXJfbmFtZSA9IFBST1ZJREVSX05B TUUsCit9OworCisvKiogRGV2aWNlIHRhYmxlICovCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0Vf VEFCTEUoY2lmeF9wY2lfdGJsKSA9IHsKKwl7CisJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0hJ TFNDSEVSLAorCQkuZGV2aWNlID0gUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRYLAorCQkuc3Vi dmVuZG9yID0gMCwKKwkJLnN1YmRldmljZSA9IDAsCisJfSwKKwl7CisJCS52ZW5kb3IgPSBQQ0lf VkVORE9SX0lEX1BMWCwKKwkJLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfUExYXzkwMzAsCisJCS5z dWJ2ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1BMWCwKKwkJLnN1YmRldmljZSA9IFBDSV9TVUJERVZJ Q0VfSURfTlhTQl9QQ0EsCisJfSwKKwl7CisJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1BMWCwK KwkJLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfUExYXzkwMzAsCisJCS5zdWJ2ZW5kb3IgPSBQQ0lf VkVORE9SX0lEX1BMWCwKKwkJLnN1YmRldmljZSA9IFBDSV9TVUJERVZJQ0VfSURfTlhQQ0EsCisJ fSwKKwl7CisJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0hJTFNDSEVSLAorCQkuZGV2aWNlID0g UENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRQTEMsCisJCS5zdWJ2ZW5kb3IgPSBQQ0lfVkVORE9S X0lEX0hJTFNDSEVSLAorCQkuc3ViZGV2aWNlID0gUENJX1NVQkRFVklDRV9JRF9ORVRQTENfUkFN LAorCX0sCisJeworCQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9ISUxTQ0hFUiwKKwkJLmRldmlj ZSA9IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExDLAorCQkuc3VidmVuZG9yID0gUENJX1ZF TkRPUl9JRF9ISUxTQ0hFUiwKKwkJLnN1YmRldmljZSA9IFBDSV9TVUJERVZJQ0VfSURfTkVUUExD X0ZMQVNILAorCX0sCisJeworCQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9ISUxTQ0hFUiwKKwkJ LmRldmljZSA9IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUSkFDSywKKwkJLnN1YnZlbmRvciA9 IFBDSV9WRU5ET1JfSURfSElMU0NIRVIsCisJCS5zdWJkZXZpY2UgPSBQQ0lfU1VCREVWSUNFX0lE X05FVEpBQ0tfUkFNLAorCX0sCisJeworCQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9ISUxTQ0hF UiwKKwkJLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUSkFDSywKKwkJLnN1YnZl bmRvciA9IFBDSV9WRU5ET1JfSURfSElMU0NIRVIsCisJCS5zdWJkZXZpY2UgPSBQQ0lfU1VCREVW SUNFX0lEX05FVEpBQ0tfRkxBU0gsCisJfSwKKwl7IDAsfQorfTsKKworLyoqIFJURE0gY2lmWCBE cml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBjaWZ4X3BjaV9kcml2ZXIgPSB7CisJ Lm5hbWUgPSAiY2lmeCIsCisJLmlkX3RhYmxlID0gY2lmeF9wY2lfdGJsLAorCS5wcm9iZSA9IGNp ZnhfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBjaWZ4X3BjaV9yZW1vdmUsCit9OworCisvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisKKyNpZmRlZiBJUlFfU1VQUE9SVAorCisvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCisvKiEKKyAqICAgXGJyaWVmICBjaWZ4X2hhbmRsZXIKKyAqCisgKiAgIFxwYXJhbSAg W2luXQlpcnEgICAgICAgUmVzb3VyY2UgdGFzayBwb2ludGVyCisgKgorICogICBccmV0dXJuIFJU RE1fSVJRX05PTkUgb3IgUlRETV9JUlFfSEFORExFRAorICoKKyAqICAgXG5vdGUgICBjaWZ4IGlu dGVycnVwdCBoYW5kbGVyCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxp bmUgaW50IGNpZnhfaGFuZGxlcihydGRtX2lycV90ICppcnEpCit7CisJc3RydWN0IHJ0ZG1fZGV2 aWNlICppbmZvID0KKwkgICAgKHN0cnVjdCBydGRtX2RldmljZSAqKXJ0ZG1faXJxX2dldF9hcmco aXJxLCB2b2lkKTsKKwlzdHJ1Y3QgaW9faW5mb190ICpkZXZpY2VfZGF0YSA9IChzdHJ1Y3QgaW9f aW5mb190ICopaW5mby0+ZGV2aWNlX2RhdGE7CisKKwkvKiBUZXN0IGlmIHJlcXVlc3QgaXMgZm9y IHRoaXMgZHJpdmVyICovCisJaWYgKChkZXZpY2VfZGF0YS0+cHJpdiAhPSBOVUxMKQorCSAgICB8 fCAoZGV2aWNlX2RhdGEtPmlycV9yZWdpc3RlcmVkID09IEZBTFNFKQorCSAgICB8fCAoZGV2aWNl X2RhdGEtPmlycV9lbmFibGUgPT0gRkFMU0UpKSB7CisJCS8qIFRoaXMgaXMgYSBQTFggZGV2aWNl IGFuZCBjYW5ub3QgcHJvZHVjZSBhbiBJUlEsCisJCSAgIElSUSBub3QgcmVnaXN0cmVkIG9yIG5v dCBlbmFibGUgKGNhbm5vdCBwcm9kdWNlIGFuIElSUSkgKi8KKwkJcmV0dXJuIFJURE1fSVJRX05P TkU7CisJfSBlbHNlIHsKKwkJdm9pZCBfX2lvbWVtICppbnRfZW5hYmxlX3JlZyA9CisJCSAgICBk ZXZpY2VfZGF0YS0+bWVtW0RQTV9JTkRFWF0uaW50ZXJuYWxfYWRkciArCisJCSAgICBEUE1fSE9T VF9JTlRfRU4wOworCQl2b2lkIF9faW9tZW0gKmludF9zdGF0dXNfcmVnID0KKwkJICAgIGRldmlj ZV9kYXRhLT5tZW1bRFBNX0lOREVYXS5pbnRlcm5hbF9hZGRyICsKKwkJICAgIERQTV9IT1NUX0lO VF9TVEFUMDsKKworCQkvKiBJcyBvbmUgb2Ygb3VyIGludGVycnVwdHMgZW5hYmxlZCBhbmQgYWN0 aXZlID8gKi8KKwkJaWYgKCEoaW9yZWFkMzIoaW50X2VuYWJsZV9yZWcpICYgaW9yZWFkMzIoaW50 X3N0YXR1c19yZWcpCisJCSAgICAgICYgRFBNX0hPU1RfSU5UX01BU0spKQorCQkJcmV0dXJuIFJU RE1fSVJRX05PTkU7CisKKwkJLyogRGlzYWJsZSBpbnRlcnJ1cHQgKi8KKwkJaW93cml0ZTMyKGlv cmVhZDMyKGludF9lbmFibGVfcmVnKQorCQkJICAmIH5EUE1fSE9TVF9JTlRfR0xPQkFMX0VOLCBp bnRfZW5hYmxlX3JlZyk7CisKKwkJcmV0dXJuIFJURE1fSVJRX0hBTkRMRUQ7CisJfQorfQorCisj ZW5kaWYgLyogSVJRX1NVUFBPUlQgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisg KiAgIFxicmllZiAgY2lmeF9weGFfc2V0X3BseF90aW1pbmcKKyAqCisgKiAgIFxwYXJhbQlbaW5d CWluZm8JY2lmeCBydGRtIGRldmljZSBpbmZvcm1hdGlvbgorICoKKyAqICAgXHJldHVybiAwIChP Sykgb3IgRXJyb3IKKyAqCisgKiAgIFxub3RlICAgU2V0IHBseCB0aW1pbmcKKyAqLworLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworc3RhdGljIGludCBjaWZ4X3B4YV9zZXRfcGx4X3RpbWluZyhzdHJ1 Y3QgcnRkbV9kZXZpY2UgKmluZm8pCit7CisJc3RydWN0IHB4YV9kZXZfaW5mbyAqcHhhX2luZm8g PQorCSAgICAoc3RydWN0IHB4YV9kZXZfaW5mbyAqKSgoc3RydWN0IGlvX2luZm8gKilpbmZvLT5k ZXZpY2VfZGF0YSktPnByaXY7CisJdWludDMyX3QgX19pb21lbSAqcGx4X3RpbWluZzsKKworCWlm ICghcHhhX2luZm8pCisJCXJldHVybiAtRU5PREVWOworCisJcGx4X3RpbWluZyA9IHB4YV9pbmZv LT5wbHggKyBQTFhfVElNSU5HX09GRlNFVDsKKwkqcGx4X3RpbWluZyA9IHB4YV9pbmZvLT5wbHhf dGltaW5nOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQor ICogICBcYnJpZWYgIGNpZnhfcHhhX2dldF9wbHhfdGltaW5nCisgKgorICogICBccGFyYW0JW2lu XQlpbmZvCWNpZnggcnRkbSBkZXZpY2UgaW5mb3JtYXRpb24KKyAqCisgKiAgIFxyZXR1cm4gMCAo T0spIG9yIEVycm9yCisgKgorICogICBcbm90ZSAgIEdldCBwbHggdGltaW5nCisgKi8KKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgY2lmeF9weGFfZ2V0X3BseF90aW1pbmcoc3Ry dWN0IHJ0ZG1fZGV2aWNlICppbmZvKQoreworCXN0cnVjdCBweGFfZGV2X2luZm8gKnB4YV9pbmZv ID0KKwkgICAgKHN0cnVjdCBweGFfZGV2X2luZm8gKikoKHN0cnVjdCBpb19pbmZvICopaW5mby0+ ZGV2aWNlX2RhdGEpLT5wcml2OworCisJaWYgKCFweGFfaW5mbykKKwkJcmV0dXJuIC1FTk9ERVY7 CisKKwlzd2l0Y2ggKHB4YV9pbmZvLT5kcG1fbW9kZSkgeworCWNhc2UgODoKKwkJcHhhX2luZm8t PnBseF90aW1pbmcgPSBOWF9QQ0FfUENJXzhfQklUX0RQTV9NT0RFOworCQlicmVhazsKKwljYXNl IDE2OgorCQlweGFfaW5mby0+cGx4X3RpbWluZyA9IE5YX1BDQV9QQ0lfMTZfQklUX0RQTV9NT0RF OworCQlicmVhazsKKwljYXNlIDMyOgorCQlweGFfaW5mby0+cGx4X3RpbWluZyA9IE5YX1BDQV9Q Q0lfMzJfQklUX0RQTV9NT0RFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisg KiAgIFxicmllZiAgY2lmeF9weGFfZ2V0X2RwbV9tb2RlCisgKgorICoJIFxwYXJhbQlbaW5dCWlu Zm8JY2lmeCBydGRtIGRldmljZSBpbmZvcm1hdGlvbgorICoKKyAqICAgXHJldHVybiAwIChPSykg b3IgRXJyb3IKKyAqCisgKiAgIFxub3RlICAgR2V0IGRwbSBtb2RlCisgKi8KKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KK3N0YXRpYyBpbnQgY2lmeF9weGFfZ2V0X2RwbV9tb2RlKHN0cnVjdCBydGRt X2RldmljZSAqaW5mbykKK3sKKwlzdHJ1Y3QgcHhhX2Rldl9pbmZvICpweGFfaW5mbyA9CisJICAg IChzdHJ1Y3QgcHhhX2Rldl9pbmZvICopKChzdHJ1Y3QgaW9faW5mbyAqKWluZm8tPmRldmljZV9k YXRhKS0+cHJpdjsKKwl1aW50MzJfdCBfX2lvbWVtICpwbHhfZ3BpbzsKKworCWlmICghcHhhX2lu Zm8pCisJCXJldHVybiAtRU5PREVWOworCisJcGx4X2dwaW8gPSBweGFfaW5mby0+cGx4ICsgUExY X0dQSU9fT0ZGU0VUOworCisJaWYgKCgqcGx4X2dwaW8gJiBQTFhfR1BJT19EQVRBMF9NQVNLKQor CSAgICAmJiB+KCpwbHhfZ3BpbyAmIFBMWF9HUElPX0RBVEExX01BU0spKQorCQlweGFfaW5mby0+ ZHBtX21vZGUgPSA4OworCWVsc2UgaWYgKH4oKnBseF9ncGlvICYgUExYX0dQSU9fREFUQTBfTUFT SykKKwkJICYmICgqcGx4X2dwaW8gJiBQTFhfR1BJT19EQVRBMV9NQVNLKSkKKwkJcHhhX2luZm8t PmRwbV9tb2RlID0gMzI7CisJZWxzZSBpZiAofigqcGx4X2dwaW8gJiBQTFhfR1BJT19EQVRBMF9N QVNLKQorCQkgJiYgfigqcGx4X2dwaW8gJiBQTFhfR1BJT19EQVRBMV9NQVNLKSkKKwkJcHhhX2lu Zm8tPmRwbV9tb2RlID0gMTY7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAw OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqICAgXGJyaWVmICBjaWZ4X3Bj aV9vcGVuCisgKgorICogICBccGFyYW0JW2luXQljb250ZXh0CQljb250ZXh0CisgKiAgIFxwYXJh bQlbaW5dCXVzZXJfaW5mbwl1c2VyIGluZm9ybWF0aW9uCisgKgkgXHBhcmFtCVtpbl0Jb2ZsYWdz CQlmbGFncyAoZmxhZyBJUlEgdXNlZCkKKyAqCisgKiAgIFxyZXR1cm4gMCAoT0spIG9yIEVycm9y CisgKgorICogICBcbm90ZSAgIE9wZW4gUlRETSBjaWZ4IHBjaSBkcml2ZXIKKyAqLworLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworc3RhdGljIGludCBjaWZ4X3BjaV9vcGVuKHN0cnVjdCBydGRtX2Rl dl9jb250ZXh0ICpjb250ZXh0LAorCQkJIHJ0ZG1fdXNlcl9pbmZvX3QgKnVzZXJfaW5mbywgaW50 IG9mbGFncykKK3sKKyNpZmRlZiBJUlFfU1VQUE9SVAorCXN0cnVjdCBydGRtX2RldmljZSAqaW5m byA9IChzdHJ1Y3QgcnRkbV9kZXZpY2UgKiljb250ZXh0LT5kZXZpY2U7CisJaW50MzJfdCByZXQ7 CisKKwkvKiBUZXN0IGlmIChvZmxhZ3MpIElSUSBhcmUgdXNlICovCisJaWYgKG9mbGFncyA9PSBU UlVFKSB7CisJCWlmICgoKHN0cnVjdCBpb19pbmZvX3QgKilpbmZvLT5kZXZpY2VfZGF0YSktPmly cV9yZWdpc3RlcmVkCisJCSAgICA9PSBGQUxTRSkgeworCQkJLyogUmVnaXN0ZXIgSVJRICovCisJ CQlyZXQgPQorCQkJICAgIHJ0ZG1faXJxX3JlcXVlc3QoJgorCQkJCQkgICAgICgoKHN0cnVjdCBp b19pbmZvX3QgKilpbmZvLT4KKwkJCQkJICAgICAgIGRldmljZV9kYXRhKS0+aXJxX2hhbmRsZSks CisJCQkJCSAgICAgKChzdHJ1Y3QgaW9faW5mb190ICopaW5mby0+CisJCQkJCSAgICAgIGRldmlj ZV9kYXRhKS0+aXJxLCBjaWZ4X2hhbmRsZXIsCisJCQkJCSAgICAgUlRETV9JUlFUWVBFX1NIQVJF RCwKKwkJCQkJICAgICBpbmZvLT5kZXZpY2VfbmFtZSwgKHZvaWQgKilpbmZvKTsKKworCQkJaWYg KHJldCAhPSAwKSB7CisjaWZkZWYgREVCVUcKKwkJCQlzd2l0Y2ggKHJldCkgeworCQkJCWNhc2Ug LUVJTlZBTDoKKwkJCQkJcnRkbV9wcmludGsoCisiY2lmeCBydGRtIGRyaXZlciBlcnJvcjogcnRk bV9pcnFfcmVxdWVzdDogYW4gaW52YWxpZCBwYXJhbWV0ZXIgd2FzIHBhc3NlZFxuIik7CisJCQkJ CWJyZWFrOworCQkJCWNhc2UgLUVCVVNZOgorCQkJCQlydGRtX3ByaW50aygKKyJjaWZ4IHJ0ZG0g ZHJpdmVyIGVycm9yOiBydGRtX2lycV9yZXF1ZXN0OiB0aGUgc3BlY2lmaWVkIElSUSBsaW5lIGlz IGFscmVhZHkgaW4gdXNlXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJcnRk bV9wcmludGsoCisiY2lmeCBydGRtIGRyaXZlciBlcnJvcjogcnRkbV9pcnFfcmVxdWVzdCBlcnJv clxuIik7CisJCQkJCWJyZWFrOworCQkJCX0KKyNlbmRpZiAvKiBERUJVRyAqLworCisJCQkJcmV0 dXJuIC1FTk9ERVY7CisJCQl9IGVsc2UKKwkJCQkoKGlvX2luZm9fdCAqKSBpbmZvLT4KKwkJCQkg ZGV2aWNlX2RhdGEpLT5pcnFfcmVnaXN0ZXJlZCA9IFRSVUU7CisJCX0KKwl9CisjZW5kaWYgLyog SVJRX1NVUFBPUlQgKi8KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisvKiEKKyAqCVxicmllZiAgY2lmeF9wY2lfY2xvc2UKKyAqCisgKglccGFyYW0JW2luXQljb250 ZXh0CQljb250ZXh0CisgKglccGFyYW0JW2luXQl1c2VyX2luZm8JdXNlciBpbmZvcm1hdGlvbgor ICoKKyAqCVxyZXR1cm4gMCAoT0spIG9yIEVycm9yCisgKgorICoJXG5vdGUJQ2xvc2UgUlRETSBj aWZ4IHBjaSBkcml2ZXIKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBj aWZ4X3BjaV9jbG9zZShzdHJ1Y3QgcnRkbV9kZXZfY29udGV4dCAqY29udGV4dCwKKwkJCSAgcnRk bV91c2VyX2luZm9fdCAqdXNlcl9pbmZvKQoreworI2lmZGVmIElSUV9TVVBQT1JUCisJc3RydWN0 IHJ0ZG1fZGV2aWNlICppbmZvID0gKHN0cnVjdCBydGRtX2RldmljZSAqKWNvbnRleHQtPmRldmlj ZTsKKworCWlmICgoKHN0cnVjdCBpb19pbmZvX3QgKilpbmZvLT5kZXZpY2VfZGF0YSktPmlycV9y ZWdpc3RlcmVkID09IFRSVUUpIHsKKwkJaWYgKCgoc3RydWN0IGlvX2luZm9fdCAqKWluZm8tPmRl dmljZV9kYXRhKS0+CisJCQkJCQkJaXJxX2VuYWJsZSA9PSBUUlVFKSB7CisJCQkvKiBEaXNhYmxl IElSUSAqLworCQkJaWYgKHJ0ZG1faXJxX2Rpc2FibGUKKwkJCSAgICAoJgorCQkJICAgICAoKChz dHJ1Y3QgaW9faW5mb190ICopaW5mby0+ZGV2aWNlX2RhdGEpLT4KKwkJCSAgICAgIGlycV9oYW5k bGUpKSAhPSAwKSB7CisjaWZkZWYgREVCVUcKKwkJCQlydGRtX3ByaW50aygKKwkJCSJjaWZ4IHJ0 ZG0gZHJpdmVyIGVycm9yIDogcnRkbV9pcnFfZGlzYWJsZSBlcnJvclxuIik7CisjZW5kaWYgLyog REVCVUcgKi8KKworCQkJCXJldHVybiAtRU5PREVWOworCQkJfQorCQl9CisKKwkJLyogVW5yZWdp c3RlciBJUlEgKi8KKwkJaWYgKHJ0ZG1faXJxX2ZyZWUKKwkJICAgICgmKCgoc3RydWN0IGlvX2lu Zm9fdCAqKWluZm8tPmRldmljZV9kYXRhKS0+aXJxX2hhbmRsZSkpICE9CisJCSAgICAwKSB7Cisj aWZkZWYgREVCVUcKKwkJCXJ0ZG1fcHJpbnRrCisJCQkgICAgKCJjaWZ4IHJ0ZG0gZHJpdmVyIGVy cm9yIDogcnRkbV9pcnFfZnJlZSBlcnJvclxuIik7CisjZW5kaWYgLyogREVCVUcgKi8KKworCQkJ cmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisjZW5kaWYgLyogSVJRX1NVUFBPUlQgKi8KKworCXJl dHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqICBcYnJpZWYgIGNp ZnhfcGNpX3JlYWQKKyAqCisgKglccGFyYW0JW2luXQljb250ZXh0CQljb250ZXh0CisgKglccGFy YW0JW2luXQl1c2VyX2luZm8JdXNlciBpbmZvcm1hdGlvbgorICoJXHBhcmFtCVtpbl0JYnVmCXVz ZXIJYnVmZmVyCisgKglccGFyYW0JW2luXQluYnl0ZQkJbnVtYmVyIG9mIGJ5dGUgdG8gcmVhZAor ICoKKyAqICBccmV0dXJuIHNpemUgcmVhZAorICoKKyAqICBcbm90ZSAgIFJlYWQKKyAqLworLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworc3RhdGljIHNzaXplX3QgY2lmeF9wY2lfcmVhZChzdHJ1Y3Qg cnRkbV9kZXZfY29udGV4dCAqY29udGV4dCwKKwkJCSAgICAgcnRkbV91c2VyX2luZm9fdCAqdXNl cl9pbmZvLCB2b2lkICpidWYsCisJCQkgICAgIHNpemVfdCBuYnl0ZSkKK3sKKwlzdHJ1Y3QgcnRk bV9kZXZpY2UgKmluZm8gPSAoc3RydWN0IHJ0ZG1fZGV2aWNlICopY29udGV4dC0+ZGV2aWNlOwor CisJaWYgKG5ieXRlID4gc2l6ZW9mKHN0cnVjdCBpb19pbmZvKSkgeworI2lmZGVmIERFQlVHCisJ CXJ0ZG1fcHJpbnRrCisJCSAgICAoImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBkYXRhIHVzZXIg c2l6ZSB0b28gYmlnXG4iKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisJCXJldHVybiAwOworCX0K KworCS8qIENvcHkgZGF0YSBpbmZvcm1hdGlvbiBmb3IgdXNlcmxhbmQgKi8KKwlpZiAocnRkbV9z YWZlX2NvcHlfdG9fdXNlcih1c2VyX2luZm8sIGJ1ZiwKKwkJCQkgICAoKHN0cnVjdCBpb19pbmZv ICopaW5mby0+ZGV2aWNlX2RhdGEpLAorCQkJCSAgIG5ieXRlKSkgeworI2lmZGVmIERFQlVHCisJ CXJ0ZG1fcHJpbnRrCisJCSAgICAoImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBjYW4ndCBjb3B5 IGRhdGEgZnJvbSBkcml2ZXJcbiIpOworI2VuZGlmIC8qIERFQlVHICovCisJfQorCisJcmV0dXJu IG5ieXRlOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqCVxicmllZiAgY2lm eF9wY2lfd3JpdGUKKyAqCisgKiAgXHBhcmFtCVtpbl0JY29udGV4dAkJY29udGV4dAorICoJXHBh cmFtCVtpbl0JdXNlcl9pbmZvCXVzZXIgaW5mb3JtYXRpb24KKyAqCVxwYXJhbQlbaW5dCWJ1Zgl1 c2VyCWJ1ZmZlcgorICoJXHBhcmFtCVtpbl0JbmJ5dGUJCW51bWJlciBvZiBieXRlIHRvIHJlYWQK KyAqCisgKiAgIFxyZXR1cm4gc2l6ZSByZWFkCisgKgorICogICBcbm90ZSAgIFJlYWQKKyAqLwor LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHNzaXplX3QgY2lmeF9wY2lfd3JpdGUoc3Ry dWN0IHJ0ZG1fZGV2X2NvbnRleHQgKmNvbnRleHQsCisJCQkgICAgICBydGRtX3VzZXJfaW5mb190 ICp1c2VyX2luZm8sIGNvbnN0IHZvaWQgKmJ1ZiwKKwkJCSAgICAgIHNpemVfdCBuYnl0ZSkKK3sK KyNpZmRlZiBJUlFfU1VQUE9SVAorCXN0cnVjdCBydGRtX2RldmljZSAqaW5mbyA9IChzdHJ1Y3Qg cnRkbV9kZXZpY2UgKiljb250ZXh0LT5kZXZpY2U7CisJdWludDhfdCBpcnFfZW5hYmxlOworI2Vu ZGlmIC8qIElSUV9TVVBQT1JUICovCisJc3RydWN0IGlvX21hcF9tZW0gbWFwX21lbTsKKwlpbnQg cmV0OworCisJaWYgKG5ieXRlID4gc2l6ZW9mKHN0cnVjdCBpb19tYXBfbWVtKSkgeworI2lmZGVm IERFQlVHCisJCXJ0ZG1fcHJpbnRrCisJCSAgICAoImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBk YXRhIHVzZXIgc2l6ZSB0b28gYmlnXG4iKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisJCXJldHVy biAwOworCX0KKyNpZmRlZiBJUlFfU1VQUE9SVAorCWlmIChuYnl0ZSA9PSBzaXplb2YodWludDhf dCkpIHsKKwkJLyogQ29weSBkYXRhIGZvciBLZXJuZWwgKi8KKwkJaWYgKHJ0ZG1fc2FmZV9jb3B5 X2Zyb21fdXNlcgorCQkgICAgKHVzZXJfaW5mbywgJmlycV9lbmFibGUsIGJ1ZiwgbmJ5dGUpKSB7 CisJCQluYnl0ZSA9IDA7CisKKyNpZmRlZiBERUJVRworCQkJcnRkbV9wcmludGsoCisJCSJjaWZ4 IHJ0ZG0gZHJpdmVyIGVycm9yIDogY2FuJ3QgY29weSBkYXRhIGZyb20gZHJpdmVyXG4iKTsKKyNl bmRpZiAvKiBERUJVRyAqLworCQl9IGVsc2UgeworCQkJaWYgKCgoKChzdHJ1Y3QgaW9faW5mbyAq KWluZm8tPmRldmljZV9kYXRhKS0+CisJCQkgICAgIGlycV9lbmFibGUpICE9IGlycV9lbmFibGUp CisJCQkmJiAoKChzdHJ1Y3QgaW9faW5mbyAqKWluZm8tPmRldmljZV9kYXRhKS0+CisJCQkJICAg IGlycV9yZWdpc3RlcmVkID09IFRSVUUpKSB7CisJCQkJCWlmIChpcnFfZW5hYmxlID09IFRSVUUp IHsKKwkJCQkJCS8qIEVuYWJsZSBJUlEgKi8KKwkJCQkJCXJ0ZG1faXJxX2VuYWJsZQorCQkJCQkJ ICAgICgmCisJCQkJCQkgICAgICgoKHN0cnVjdCBpb19pbmZvICopaW5mby0+CisJCQkJCQkgICAg ICAgZGV2aWNlX2RhdGEpLT4KKwkJCQkJCSAgICAgIGlycV9oYW5kbGUpOworCQkJCQl9IGVsc2Ug eworCQkJCQkJLyogRGlzYWJsZSBJUlEgKi8KKwkJCQkJCXJ0ZG1faXJxX2Rpc2FibGUKKwkJCQkJ CSAgICAoJgorCQkJCQkJICAgICAoKChzdHJ1Y3QgaW9faW5mbyAqKWluZm8tPgorCQkJCQkJICAg ICAgIGRldmljZV9kYXRhKS0+CisJCQkJCQkgICAgICBpcnFfaGFuZGxlKTsKKwkJCQkJfQorCisJ CQkJCSgoc3RydWN0IGlvX2luZm8gKilpbmZvLT5kZXZpY2VfZGF0YSktPgorCQkJCQkgICAgaXJx X2VuYWJsZSA9IGlycV9lbmFibGU7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIGlmIChuYnl0 ZSA9PSBzaXplb2Yoc3RydWN0IGlvX21hcF9tZW0pKSB7CisjZWxzZSAvKiBJUlFfU1VQUE9SVCAq LworCWlmIChuYnl0ZSA9PSBzaXplb2Yoc3RydWN0IGlvX21hcF9tZW0pKSB7CisjZW5kaWYgLyog SVJRX1NVUFBPUlQgKi8KKwkJLyogQ29weSBkYXRhIGluZm9ybWF0aW9uIGZvciBLZXJuZWwgKi8K KwkJaWYgKHJ0ZG1fc2FmZV9jb3B5X2Zyb21fdXNlcih1c2VyX2luZm8sICZtYXBfbWVtLCBidWYs IG5ieXRlKSkgeworCQkJbmJ5dGUgPSAwOworCisjaWZkZWYgREVCVUcKKwkJCXJ0ZG1fcHJpbnRr KAorCQkiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IGNhbid0IGNvcHkgZGF0YSBmcm9tIGRyaXZl clxuIik7CisjZW5kaWYgLyogREVCVUcgKi8KKwkJfSBlbHNlIHsKKwkJCWlmICgqbWFwX21lbS52 aXJ0X2FkZHIgPT0gTlVMTCkgeworCQkJCS8qIE1hcCBwaHlzaWNhbCBvbiB2aXJ0dWFsIG1lbW9y eSAqLworCQkJCXJldCA9IHJ0ZG1faW9tYXBfdG9fdXNlcih1c2VyX2luZm8sCisJCQkJCQkJIChw aHlzX2FkZHJfdCkgbWFwX21lbS4KKwkJCQkJCQkgcGh5c19hZGRyLAorCQkJCQkJCSAoc2l6ZV90 KSBtYXBfbWVtLgorCQkJCQkJCSBsZW5ndGgsCisJCQkJCQkJIChQUk9UX1JFQUQgfAorCQkJCQkJ CSAgUFJPVF9XUklURSksCisJCQkJCQkJIG1hcF9tZW0udmlydF9hZGRyLAorCQkJCQkJCSBOVUxM LCBOVUxMKTsKKworCQkJCWlmIChyZXQgIT0gMCkgeworCQkJCQluYnl0ZSA9IDA7CisKKyNpZmRl ZiBERUJVRworCQkJCQlzd2l0Y2ggKHJldCkgeworCQkJCQljYXNlIC1FSU5WQUw6CisJCQkJCQly dGRtX3ByaW50aygKKyJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogYW4gaW52YWxpZCBzdGFydCBh ZGRyZXNzLCBzaXplLCBvciBkZXN0aW5hdGlvbiBhZGRyZXNzIHdhcyBwYXNzZWRcbiIpOworCQkJ CQkJYnJlYWs7CisJCQkJCWNhc2UgLUVOT01FTToKKwkJCQkJCXJ0ZG1fcHJpbnRrKAorImNpZngg cnRkbSBkcml2ZXIgZXJyb3IgOiB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgZnJlZSBtZW1vcnkgb3Ig dGhlIGxpbWl0IG9mIG1lbW9yeSBtYXBwaW5nIGZvciB0aGUgdXNlciBwcm9jZXNzIHdhcyByZWFj aGVkXG4iKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIC1FQUdBSU46CisJCQkJCQlydGRtX3By aW50aygKKyJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogdG9vIG11Y2ggbWVtb3J5IGhhcyBiZWVu IGFscmVhZHkgbG9ja2VkIGJ5IHRoZSB1c2VyIHByb2Nlc3NcbiIpOworCQkJCQkJYnJlYWs7CisJ CQkJCWNhc2UgLUVQRVJNOgorCQkJCQkJcnRkbV9wcmludGsoCisJImNpZnggcnRkbSBkcml2ZXIg ZXJyb3IgOiBhbiBpbGxlZ2FsIGludm9jYXRpb24gZW52aXJvbm1lbnQgaXMgZGV0ZWN0ZWRcbiIp OworCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQlydGRtX3ByaW50aygKKwkJCSJj aWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogcnRkbV9zYWZlX2NvcHlfZnJvbV91c2VyIGVycm9yXG4i KTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisjZW5kaWYgLyogREVCVUcgKi8KKwkJCQl9CisJCQl9 IGVsc2UgeworCQkJCS8qIFVuYXAgdmlydHVhbCBtZW1vcnkgKi8KKwkJCQlyZXQgPSBydGRtX211 bm1hcCh1c2VyX2luZm8sICptYXBfbWVtLnZpcnRfYWRkciwKKwkJCQkJCSAgKHNpemVfdCkgbWFw X21lbS5sZW5ndGgpOworCisJCQkJaWYgKHJldCAhPSAwKSB7CisJCQkJCW5ieXRlID0gMDsKKwor I2lmZGVmIERFQlVHCisJCQkJCXN3aXRjaCAocmV0KSB7CisJCQkJCWNhc2UgLUVJTlZBTDoKKwkJ CQkJCXJ0ZG1fcHJpbnRrKAorCQkiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IGFuIGludmFsaWQg YWRkcmVzcyBvciBzaXplIHdhcyBwYXNzZWRcbiIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2Ug LUVQRVJNOgorCQkJCQkJcnRkbV9wcmludGsoCisJImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBh biBpbGxlZ2FsIGludm9jYXRpb24gZW52aXJvbm1lbnQgaXMgZGV0ZWN0ZWRcbiIpOworCQkJCQkJ YnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQlydGRtX3ByaW50aygKKwkJCSJjaWZ4IHJ0ZG0g ZHJpdmVyIGVycm9yIDogcnRkbV9zYWZlX2NvcHlfZnJvbV91c2VyIGVycm9yXG4iKTsKKwkJCQkJ CWJyZWFrOworCQkJCQl9CisjZW5kaWYgLyogREVCVUcgKi8KKwkJCQl9CisJCQl9CisJCX0KKwl9 IGVsc2UgeworCQkvKiBFcnJvciBub3RoaW5nIHRvIGRvICovCisJCW5ieXRlID0gMDsKKwl9CisK KwlyZXR1cm4gbmJ5dGU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogICBc YnJpZWYgIGNpZnhfcGNpX3Byb2JlCisgKgorICogICBccGFyYW0gIFtpbl0gICBkZXYKKyAqICAg XHBhcmFtICBbaW5dICAgaWQKKyAqCisgKiAgIFxyZXR1cm4gMCAoT0spIG9yIEVycm9yCisgKgor ICogICBcbm90ZSAgT3BlbiB0aGUgZGV2aWNlLgorICoJCQlUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl ZCB3aGVuIHRoZSBkZXZpY2Ugc2hhbGwgYmUgb3BlbmVkLgorICovCisvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCitzdGF0aWMgaW50IGNpZnhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNv bnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgcnRkbV9kZXZpY2UgKmlu Zm8gPSBOVUxMOworCXN0cnVjdCBpb19pbmZvX3QgKmRldmljZV9kYXRhID0gTlVMTDsKKwlpbnQz Ml90IGJhcjsKKwlpbnQzMl90IHJldDsKKworCS8qIEFsbG9jYXRlIGRldmljZSBkcml2ZXIgc3Ry dWN0dXJlICovCisJaW5mbyA9IHJ0ZG1fbWFsbG9jKHNpemVvZihzdHJ1Y3QgcnRkbV9kZXZpY2Up KTsKKworCWlmIChpbmZvID09IE5VTEwpIHsKKyNpZmRlZiBERUJVRworCQlydGRtX3ByaW50aygi Y2lmeCBydGRtIGRyaXZlciBlcnJvciA6IHJ0ZG1fbWFsbG9jIGVycm9yXG4iKTsKKyNlbmRpZiAv KiBERUJVRyAqLworCisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldCA9IHBjaV9lbmFibGVf ZGV2aWNlKGRldik7CisJaWYgKHJldCAhPSAwKSB7CisjaWZkZWYgREVCVUcKKwkJcnRkbV9wcmlu dGsoCisJCSJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogcGNpX2VuYWJsZV9kZXZpY2UgZXJyb3Ig OiAlaVxuIiwKKwkJcmV0KTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisJCWdvdG8gb3V0X2ZyZWU7 CisJfQorCisJcmV0ID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhkZXYsIERSSVZFUl9OQU1FKTsKKwlp ZiAocmV0ICE9IDApIHsKKyNpZmRlZiBERUJVRworCQlydGRtX3ByaW50aygKKwkJImNpZnggcnRk bSBkcml2ZXIgZXJyb3IgOiBwY2lfcmVxdWVzdF9yZWdpb25zIGVycm9yIDogJWlcbiIsCisJCXJl dCk7CisjZW5kaWYgLyogREVCVUcgKi8KKworCQlnb3RvIG91dF9kaXNhYmxlOworCX0KKworCS8q IEluaXRpYWxpemUgc3RydWN0dXJlIHdpdGggZGVmYXVsdCB2YWx1ZXMgKi8KKwltZW1jcHkoaW5m bywgJmNpZnhfZGV2aWNlX3RtcGwsIHNpemVvZihzdHJ1Y3QgcnRkbV9kZXZpY2UpKTsKKworCWlu Zm8tPmRldmljZV9pZCA9IGlkLT5kZXZpY2U7CisJc25wcmludGYoKGNoYXIgKilpbmZvLT5kZXZp Y2VfbmFtZSwgUlRETV9NQVhfREVWTkFNRV9MRU4sICJjaWZ4JWkiLAorCQkgY2lmeF9udW0pOwor CWluZm8tPnByb2NfbmFtZSA9IGluZm8tPmRldmljZV9uYW1lOworCisJc3dpdGNoIChpZC0+ZGV2 aWNlKSB7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFg6CisJCWJhciA9IERQTV9C QVI7CisJCWluZm8tPnBlcmlwaGVyYWxfbmFtZSA9IENJRlhfUlRETV9DQVJEX05BTUU7CisJCWJy ZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRQTEM6CisJCWJhciA9IERQTV9C QVI7CisJCWluZm8tPnBlcmlwaGVyYWxfbmFtZSA9IENJRlhfUlRETV9ORVRQTENfQ0FSRF9OQU1F OworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUSkFDSzoKKwkJYmFy ID0gRFBNX0JBUjsKKwkJaW5mby0+cGVyaXBoZXJhbF9uYW1lID0gQ0lGWF9SVERNX05FVEpBQ0tf Q0FSRF9OQU1FOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliYXIgPSBQTFhfRFBNX0JBUjsKKwkJ aW5mby0+cGVyaXBoZXJhbF9uYW1lID0gQ0lGWF9SVERNX1BMWF9DQVJEX05BTUU7CisJCWJyZWFr OworCX0KKworCWluZm8tPmRldmljZV9kYXRhID0gTlVMTDsKKworCS8qIEFsbG9jYXRlIHNwZWNp ZmljIGRhdGEgc3RyY3V0dXJlIGZvciBkZXZpY2UgKi8KKwlkZXZpY2VfZGF0YSA9IHJ0ZG1fbWFs bG9jKHNpemVvZihzdHJ1Y3QgaW9faW5mbykpOworCisJaWYgKGRldmljZV9kYXRhID09IE5VTEwp IHsKKyNpZmRlZiBERUJVRworCQlydGRtX3ByaW50aygiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6 IHJ0ZG1fbWFsbG9jIGVycm9yXG4iKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisJCWdvdG8gb3V0 X3JlbGVhc2U7CisJfQorCisJbWVtc2V0KGRldmljZV9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IGlv X2luZm8pKTsKKworCS8qIEJBUiAwIG9yIDIgcG9pbnRzIHRvIHRoZSBjYXJkJ3MgZHVhbCBwb3J0 IG1lbW9yeSAqLworCSgoc3RydWN0IGlvX2luZm8gKilkZXZpY2VfZGF0YSktPm1lbVtEUE1fSU5E RVhdLmFkZHIgPQorCSAgICBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCBiYXIpOworCisJaWYgKCgo c3RydWN0IGlvX2luZm8gKilkZXZpY2VfZGF0YSktPm1lbVtEUE1fSU5ERVhdLmFkZHIgPT0gMCkg eworI2lmZGVmIERFQlVHCisJCXJ0ZG1fcHJpbnRrCisJCSAgICAoImNpZnggcnRkbSBkcml2ZXIg ZXJyb3IgOiBwY2lfcmVzb3VyY2Vfc3RhcnQgZXJyb3JcbiIpOworI2VuZGlmIC8qIERFQlVHICov CisKKwkJZ290byBvdXRfcmVsZWFzZTsKKwl9CisKKwkoKHN0cnVjdCBpb19pbmZvICopZGV2aWNl X2RhdGEpLT5tZW1bRFBNX0lOREVYXS5pbnRlcm5hbF9hZGRyID0KKwkgICAgaW9yZW1hcF9ub2Nh Y2hlKHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIGJhciksCisJCQkgICAgcGNpX3Jlc291cmNlX2xl bihkZXYsIGJhcikpOworCisJaWYgKCgoc3RydWN0IGlvX2luZm8gKilkZXZpY2VfZGF0YSktPm1l bVtEUE1fSU5ERVhdLmludGVybmFsX2FkZHIKKwkJCQkJCQkJCT09IDApIHsKKyNpZmRlZiBERUJV RworCQlydGRtX3ByaW50aygiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IGlvcmVtYXBfbm9jYWNo ZSBlcnJvclxuIik7CisjZW5kaWYgLyogREVCVUcgKi8KKworCQlnb3RvIG91dF9yZWxlYXNlOwor CX0KKworCWRldl9pbmZvKCZkZXYtPmRldiwgIkRQTSBhdCAlMDhsWFxuIiwKKwkJIChsb25nIHVu c2lnbmVkIGludCkoKHN0cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT4KKwkJIG1lbVtEUE1f SU5ERVhdLmFkZHIpOworCSgoc3RydWN0IGlvX2luZm8gKilkZXZpY2VfZGF0YSktPm1lbVtEUE1f SU5ERVhdLnNpemUgPQorCSAgICBwY2lfcmVzb3VyY2VfbGVuKGRldiwgYmFyKTsKKwkoKHN0cnVj dCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT5tZW1bRFBNX0lOREVYXS5tZW10eXBlID0gTUVNX1BI WVM7CisKKwkvKiBtYXAgZXh0ZW5kZWQgbWVtIChCQVIgMSBwb2ludHMgdG8gdGhlIGV4dGVuZGVk IG1lbW9yeSkgKi8KKwkoKHN0cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT5tZW1bRVhUX01F TV9JTkRFWF0uYWRkciA9CisJICAgIHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIEVYVF9NRU1fQkFS KTsKKworCS8qIGV4dGVuZGVkIG1lbW9yeSBpcyBvcHRpb25hbCwgc28gZG9uJ3QgY2FyZSBpZiBp dCBpcyBub3QgcHJlc2VudCAqLworCWlmICgoKHN0cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEp LT5tZW1bRVhUX01FTV9JTkRFWF0uYWRkciAhPSAwKSB7CisJCSgoc3RydWN0IGlvX2luZm8gKilk ZXZpY2VfZGF0YSktPm1lbVtFWFRfTUVNX0lOREVYXS4KKwkJICAgIGludGVybmFsX2FkZHIgPQor CQkgICAgaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIEVYVF9NRU1fQkFS KSwKKwkJCQkgICAgcGNpX3Jlc291cmNlX2xlbihkZXYsIEVYVF9NRU1fQkFSKSk7CisKKwkJaWYg KCgoc3RydWN0IGlvX2luZm8gKilkZXZpY2VfZGF0YSktPm1lbVtFWFRfTUVNX0lOREVYXS4KKwkJ ICAgIGludGVybmFsX2FkZHIgPT0gMCkgeworI2lmZGVmIERFQlVHCisJCQlydGRtX3ByaW50aygK KwkJCSJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogaW9yZW1hcF9ub2NhY2hlIGVycm9yXG4iKTsK KyNlbmRpZiAvKiBERUJVRyAqLworCisJCQlnb3RvIG91dF91bm1hcDsKKwkJfQorCisJCWRldl9p bmZvKCZkZXYtPmRldiwgImV4dGVuZGVkIG1lbW9yeSBhdCAlMDhsWFxuIiwKKwkJCSAobG9uZyB1 bnNpZ25lZCBpbnQpKChzdHJ1Y3QgaW9faW5mbyAqKWRldmljZV9kYXRhKS0+CisJCQkgbWVtW0VY VF9NRU1fSU5ERVhdLmFkZHIpOworCQkoKHN0cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT5t ZW1bRVhUX01FTV9JTkRFWF0uc2l6ZSA9CisJCSAgICBwY2lfcmVzb3VyY2VfbGVuKGRldiwgRVhU X01FTV9CQVIpOworCQkoKHN0cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT5tZW1bRVhUX01F TV9JTkRFWF0ubWVtdHlwZSA9CisJCSAgICBNRU1fUEhZUzsKKwl9CisKKwlpZiAoKGlkLT5kZXZp Y2UgPT0gUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRYKQorCSAgICB8fCAoaWQtPmRldmljZSA9 PSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFBMQykKKwkgICAgfHwgKGlkLT5kZXZpY2UgPT0g UENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRKQUNLKSkgeworCQkvKiBtYWtlIHN1cmUgYWxsIGlu dGVycnVwdHMgYXJlIGRpc2FibGVkICovCisJCWlvd3JpdGUzMigwLAorCQkJICAoKHN0cnVjdCBp b19pbmZvICopZGV2aWNlX2RhdGEpLT5tZW1bRFBNX0lOREVYXS4KKwkJCSAgaW50ZXJuYWxfYWRk ciArIERQTV9IT1NUX0lOVF9FTjApOworCQkoKHN0cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEp LT5wcml2ID0gTlVMTDsKKwl9IGVsc2UgaWYgKGlkLT5zdWJkZXZpY2UgPT0gUENJX1NVQkRFVklD RV9JRF9OWFBDQSkgeworCQkvKiBtYXAgUExYIHJlZ2lzdGVycyAqLworCQlzdHJ1Y3QgcHhhX2Rl dl9pbmZvICpweGFfaW5mbyA9CisJCSAgICAoc3RydWN0IHB4YV9kZXZfaW5mbyAqKQorCQkgICAg cnRkbV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBweGFfZGV2X2luZm8pKTsKKworCQlpZiAocHhhX2lu Zm8gPT0gTlVMTCkgeworI2lmZGVmIERFQlVHCisJCQlydGRtX3ByaW50aworCQkJICAgICgiY2lm eCBydGRtIGRyaXZlciBlcnJvciA6IHJ0ZG1fbWFsbG9jIGVycm9yXG4iKTsKKyNlbmRpZiAvKiBE RUJVRyAqLworCisJCQlnb3RvIG91dF91bm1hcDsKKwkJfQorCisJCSgoc3RydWN0IGlvX2luZm8g KilkZXZpY2VfZGF0YSktPnByaXYgPSBweGFfaW5mbzsKKworCQkvKiBzZXQgUFhBIFBMWCBUaW1p bmdzICovCisJCXB4YV9pbmZvLT5wbHggPQorCQkgICAgaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNv dXJjZV9zdGFydChkZXYsIFBYQV9QTFhfQkFSKSwKKwkJCQkgICAgcGNpX3Jlc291cmNlX2xlbihk ZXYsIFBYQV9QTFhfQkFSKSk7CisKKwkJaWYgKCFweGFfaW5mby0+cGx4KQorCQkJZ290byBvdXRf dW5tYXA7CisJCWlmIChjaWZ4X3B4YV9nZXRfZHBtX21vZGUoaW5mbykpCisJCQlnb3RvIG91dF91 bm1hcF9wbHg7CisJCWlmIChjaWZ4X3B4YV9nZXRfcGx4X3RpbWluZyhpbmZvKSkKKwkJCWdvdG8g b3V0X3VubWFwX3BseDsKKwkJaWYgKGNpZnhfcHhhX3NldF9wbHhfdGltaW5nKGluZm8pKQorCQkJ Z290byBvdXRfdW5tYXBfcGx4OworCX0gZWxzZSB7CisJCXN0cnVjdCBweGFfZGV2X2luZm8gKnB4 YV9pbmZvID0KKwkJICAgIChzdHJ1Y3QgcHhhX2Rldl9pbmZvICopCisJCSAgICBydGRtX21hbGxv YyhzaXplb2Yoc3RydWN0IHB4YV9kZXZfaW5mbykpOworCisJCWlmIChweGFfaW5mbyA9PSBOVUxM KSB7CisjaWZkZWYgREVCVUcKKwkJCXJ0ZG1fcHJpbnRrCisJCQkgICAgKCJjaWZ4IHJ0ZG0gZHJp dmVyIGVycm9yIDogcnRkbV9tYWxsb2MgZXJyb3JcbiIpOworI2VuZGlmIC8qIERFQlVHICovCisK KwkJCWdvdG8gb3V0X2ZyZWVfcHhhOworCQl9CisKKwkJKChzdHJ1Y3QgcHhhX2Rldl9pbmZvICop cHhhX2luZm8pLT5wbHggPSBOVUxMOworCQkoKHN0cnVjdCBweGFfZGV2X2luZm8gKilweGFfaW5m byktPnBseF90aW1pbmcgPSAwOworCQkoKHN0cnVjdCBweGFfZGV2X2luZm8gKilweGFfaW5mbykt PmRwbV9tb2RlID0gMDsKKwkJKChzdHJ1Y3QgaW9faW5mbyAqKWRldmljZV9kYXRhKS0+cHJpdiA9 IHB4YV9pbmZvOworCX0KKworCS8qIEluaXRpYWxpemUgaXJxIGRhdGEgKi8KKwkoKHN0cnVjdCBp b19pbmZvICopZGV2aWNlX2RhdGEpLT5pcnEgPSBkZXYtPmlycTsKKwkoKHN0cnVjdCBpb19pbmZv ICopZGV2aWNlX2RhdGEpLT5pcnFfZW5hYmxlID0gRkFMU0U7CisJKChzdHJ1Y3QgaW9faW5mbyAq KWRldmljZV9kYXRhKS0+aXJxX3JlZ2lzdGVyZWQgPSBGQUxTRTsKKworCWluZm8tPmRldmljZV9k YXRhID0gZGV2aWNlX2RhdGE7CisKKwkvKiBSZWdpc3RlciBSVERNIGRldmljZSBkcml2ZXIgKi8K KwlyZXQgPSBydGRtX2Rldl9yZWdpc3RlcihpbmZvKTsKKwlpZiAocmV0ICE9IDApIHsKKyNpZmRl ZiBERUJVRworCQlzd2l0Y2ggKHJldCkgeworCQljYXNlIC1FSU5WQUw6CisJCQlydGRtX3ByaW50 aygKKyJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogcnRkbV9kZXZfcmVnaXN0ZXIgZXJyb3IgOiB0 aGUgZGV2aWNlIHN0cnVjdHVyZSBjb250YWlucyBpbnZhbGlkIGVudHJpZXMuIENoZWNrIGtlcm5l bCBsb2cgaW4gdGhpcyBjYXNlXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIC1FTk9NRU06CisJCQly dGRtX3ByaW50aygKKyJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogcnRkbV9kZXZfcmVnaXN0ZXIg ZXJyb3IgOiB0aGUgY29udGV4dCBmb3IgYW4gZXhjbHVzaXZlIGRldmljZSBjYW5ub3QgYmUgYWxs b2NhdGVkXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIC1FRVhJU1Q6CisJCQlydGRtX3ByaW50aygK KyJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogcnRkbV9kZXZfcmVnaXN0ZXIgZXJyb3IgOiB0aGUg c3BlY2lmaWVkIGRldmljZSBuYW1lIG9mIHByb3RvY29sIElEIGlzIGFscmVhZHkgaW4gdXNlXG4i KTsKKwkJCWJyZWFrOworCQljYXNlIC1FQUdBSU46CisJCQlydGRtX3ByaW50aygKKyJjaWZ4IHJ0 ZG0gZHJpdmVyIGVycm9yIDogcnRkbV9kZXZfcmVnaXN0ZXIgZXJyb3IgOiBzb21lIC9wcm9jIGVu dHJ5IGNhbm5vdCBiZSBjcmVhdGVkXG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcnRk bV9wcmludGsoCisiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IHJ0ZG1fZGV2X3JlZ2lzdGVyIGVy cm9yXG4iKTsKKwkJCWJyZWFrOworCQl9CisjZW5kaWYgLyogREVCVUcgKi8KKworCQlpZiAoaWQt PnN1YmRldmljZSAhPSBQQ0lfU1VCREVWSUNFX0lEX05YUENBKQorCQkJZ290byBvdXRfdW5tYXA7 CisJCWVsc2UKKwkJCWdvdG8gb3V0X3VubWFwX3BseDsKKwl9CisKKwlwY2lfc2V0X2RydmRhdGEo ZGV2LCBpbmZvKTsKKworCWlmIChpZC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJf TkVUWCkKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAicmVnaXN0ZXJlZCBDaWZYIGNhcmRcbiIpOwor CWVsc2UgaWYgKGlkLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRQTEMpCisJ CWRldl9pbmZvKCZkZXYtPmRldiwgInJlZ2lzdGVyZWQgbmV0UExDIGNhcmRcbiIpOworCWVsc2Ug aWYgKGlkLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRKQUNLKQorCQlkZXZf aW5mbygmZGV2LT5kZXYsICJyZWdpc3RlcmVkIG5ldEpBQ0sgY2FyZFxuIik7CisJZWxzZSBpZiAo aWQtPnN1YmRldmljZSA9PSBQQ0lfU1VCREVWSUNFX0lEX05YU0JfUENBKQorCQlkZXZfaW5mbygm ZGV2LT5kZXYsICJyZWdpc3RlcmVkIE5YU0ItUENBIGFkYXB0ZXIgY2FyZFxuIik7CisJZWxzZSB7 CisJCXN0cnVjdCBweGFfZGV2X2luZm8gKnB4YV9pbmZvID0KKwkJICAgIChzdHJ1Y3QgcHhhX2Rl dl9pbmZvICopKChzdHJ1Y3QgaW9faW5mbyAqKWluZm8tPgorCQkJCQkgICAgZGV2aWNlX2RhdGEp LT5wcml2OworCQlkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkgInJlZ2lzdGVyZWQgTlhQQ0EtUENJ IGFkYXB0ZXIgY2FyZCBpbiAlZCBiaXQgbW9kZVxuIiwKKwkJCSAoKHN0cnVjdCBweGFfZGV2X2lu Zm8gKilweGFfaW5mbyktPmRwbV9tb2RlKTsKKwl9CisKKwljaWZ4X251bSsrOworCisJcmV0dXJu IDA7CisKKyBvdXRfdW5tYXBfcGx4OgorCWlvdW5tYXAoKChzdHJ1Y3QgcHhhX2Rldl9pbmZvICop KCgoc3RydWN0IGlvX2luZm8gKilpbmZvLT5kZXZpY2VfZGF0YSktPgorCQkJCQkgcHJpdikpLT5w bHgpOworCisgb3V0X2ZyZWVfcHhhOgorCXJ0ZG1fZnJlZSgoKHN0cnVjdCBpb19pbmZvICopaW5m by0+ZGV2aWNlX2RhdGEpLT5wcml2KTsKKworIG91dF91bm1hcDoKKwlpb3VubWFwKCgoc3RydWN0 IGlvX2luZm8gKilpbmZvLT5kZXZpY2VfZGF0YSktPm1lbVtEUE1fSU5ERVhdLgorCQlpbnRlcm5h bF9hZGRyKTsKKwlpZiAoKChzdHJ1Y3QgaW9faW5mbyAqKWluZm8tPmRldmljZV9kYXRhKS0+bWVt W0VYVF9NRU1fSU5ERVhdLgorCSAgICBpbnRlcm5hbF9hZGRyICE9IDApCisJCWlvdW5tYXAoKChz dHJ1Y3QgaW9faW5mbyAqKWluZm8tPmRldmljZV9kYXRhKS0+CisJCQltZW1bRVhUX01FTV9JTkRF WF0uaW50ZXJuYWxfYWRkcik7CisKKyBvdXRfcmVsZWFzZToKKwlwY2lfcmVsZWFzZV9yZWdpb25z KGRldik7CisKKyBvdXRfZGlzYWJsZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKworIG91 dF9mcmVlOgorCWlmIChpbmZvLT5kZXZpY2VfZGF0YSAhPSBOVUxMKQorCQlydGRtX2ZyZWUoaW5m by0+ZGV2aWNlX2RhdGEpOworCisJcnRkbV9mcmVlKGluZm8pOworCisJcmV0dXJuIC1FTk9ERVY7 Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogICBcYnJpZWYgIGNpZnhfcGNp X3JlbW92ZQorICoKKyAqICAgXHBhcmFtIFtpbl0gZGV2CisgKgorICogICBccmV0dXJuIE5vbmUK KyAqCisgKiAgIFxub3RlICAgQ2xvc2UgdGhlIGRldmljZS4KKyAqICAgVGhpcyBmdW5jdGlvbiBp cyBjYWxsZWQgd2hlbiB0aGUgZGV2aWNlIHNoYWxsIGJlIGNsb3NlZC4KKyAqLworLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworc3RhdGljIHZvaWQgY2lmeF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2 ICpkZXYpCit7CisJc3RydWN0IHJ0ZG1fZGV2aWNlICppbmZvID0gcGNpX2dldF9kcnZkYXRhKGRl dik7CisJc3RydWN0IGlvX2luZm8gKmRldmljZV9kYXRhID0gKHN0cnVjdCBpb19pbmZvICopaW5m by0+ZGV2aWNlX2RhdGE7CisJc3RydWN0IHB4YV9kZXZfaW5mbyAqcHhhX2luZm8gPQorCSAgICAo c3RydWN0IHB4YV9kZXZfaW5mbyAqKWRldmljZV9kYXRhLT5wcml2OworCWludDMyX3QgcmV0Owor CisJaWYgKGluZm8tPmRldmljZV9kYXRhID09IE5VTEwpIHsKKyNpZmRlZiBERUJVRworCQlydGRt X3ByaW50aworCQkgICAgKCJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogZGV2aWNlX2RhdGEgTlVM TCBwb2ludGVyXG4iKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCQlyZXR1cm47CisJfQorCisJaWYg KHB4YV9pbmZvICE9IE5VTEwpIHsKKwkJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCQlp b3dyaXRlMzIoMCwKKwkJCSAgKChzdHJ1Y3QgaW9faW5mbyAqKWRldmljZV9kYXRhKS0+bWVtW0RQ TV9JTkRFWF0uCisJCQkgIGludGVybmFsX2FkZHIgKyBEUE1fSE9TVF9JTlRfRU4wKTsKKworCQlp ZiAocHhhX2luZm8tPnBseCAhPSBOVUxMKQorCQkJaW91bm1hcCgodm9pZCAqKXB4YV9pbmZvLT5w bHgpOworCisJCXJ0ZG1fZnJlZSgodm9pZCAqKXB4YV9pbmZvKTsKKwl9CisKKwkvKiBVbnJlZ2lz dGVyIFJURE0gZGV2aWNlIGRyaXZlciAqLworCXJldCA9IHJ0ZG1fZGV2X3VucmVnaXN0ZXIoaW5m bywgMTAwMCk7CisJaWYgKHJldCAhPSAwKSB7CisjaWZkZWYgREVCVUcKKwkJc3dpdGNoIChyZXQp IHsKKwkJY2FzZSAtRU5PREVWOgorCQkJcnRkbV9wcmludGsoCisiY2lmeCBydGRtIGRyaXZlciBl cnJvciA6IHJ0ZG1fZGV2X3VucmVnaXN0ZXIgZXJyb3IgOiB0aGUgZGV2aWNlIHdhcyBub3QgcmVn aXN0ZXJlZFxuIik7CisJCQlicmVhazsKKwkJY2FzZSAtRUFHQUlOOgorCQkJcnRkbV9wcmludGso CisiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IHJ0ZG1fZGV2X3VucmVnaXN0ZXIgZXJyb3IgOiB0 aGUgZGV2aWNlIGlzIGJ1c3kgd2l0aCBvcGVuIGluc3RhbmNlcyBhbmQgMCBoYXMgYmVlbiBwYXNz ZWQgZm9yIHBvbGxfZGVsYXlcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlydGRtX3By aW50aygKKyJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogcnRkbV9kZXZfdW5yZWdpc3RlciBlcnJv clxuIik7CisJCQlicmVhazsKKwkJfQorI2VuZGlmIC8qIERFQlVHICovCisKKwkJcmV0dXJuOwor CX0KKworCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2 KTsKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKworCWlvdW5tYXAoKChzdHJ1Y3QgaW9f aW5mbyAqKWRldmljZV9kYXRhKS0+bWVtW0RQTV9JTkRFWF0uaW50ZXJuYWxfYWRkcik7CisJaWYg KCgoc3RydWN0IGlvX2luZm8gKilkZXZpY2VfZGF0YSktPm1lbVtFWFRfTUVNX0lOREVYXS5pbnRl cm5hbF9hZGRyICE9CisJICAgIDApCisJCWlvdW5tYXAoKChzdHJ1Y3QgaW9faW5mbyAqKWRldmlj ZV9kYXRhKS0+bWVtW0VYVF9NRU1fSU5ERVhdLgorCQkJaW50ZXJuYWxfYWRkcik7CisKKwkvKiBS ZWxlYXNlIHN0cnVjdHVyZSBtZW1vcnkgYWxsb2NhdGlvbiAqLworCXJ0ZG1fZnJlZShpbmZvLT5k ZXZpY2VfZGF0YSk7CisJcnRkbV9mcmVlKGluZm8pOworCisJaWYgKGNpZnhfbnVtID4gMCkKKwkJ Y2lmeF9udW0tLTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKiAgIFxicmll ZiAgY2lmeF9wY2lfaW5pdAorICoKKyAqICAgXHJldHVybiBOb25lCisgKgorICogICBcbm90ZSAg IEl0IHNpbXBseSByZWdpc3RlcnMgdGhlIFJURE0gZGV2aWNlLgorICogICBUaGlzIGZ1bmN0aW9u IGlzIGNhbGxlZCB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkLgorICovCisvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCitzdGF0aWMgaW50IF9faW5pdCBjaWZ4X3BjaV9pbml0KHZvaWQpCit7CisJY2lm eF9udW0gPSAwOworCisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmNpZnhfcGNpX2RyaXZl cik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogICBcYnJpZWYgIGNpZnhf cGNpX2V4aXQKKyAqCisgKiAgIFxyZXR1cm4gTm9uZQorICoKKyAqICAgXG5vdGUgIEl0IHVucmVn aXN0ZXIgdGhlIFJURE0gZGV2aWNlLgorICogICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVu IHRoZSBtb2R1bGUgaXMgdW5sb2FkZWQuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0 YXRpYyB2b2lkIF9fZXhpdCBjaWZ4X3BjaV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJf ZHJpdmVyKCZjaWZ4X3BjaV9kcml2ZXIpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv KiEgXH0gICAgIGNpZnhfcGNpX0NvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK21vZHVsZV9p bml0KGNpZnhfcGNpX2luaXQpOworbW9kdWxlX2V4aXQoY2lmeF9wY2lfZXhpdCk7CisKKy8qIEVu ZCBvZiBmaWxlIDogY2lmeF9wY2kuYyAqLwotLS0tLS0tLS0tLS0tLSBuZXh0IHBhcnQgLS0tLS0t LS0tLS0tLS0KZGlmZiAtLWdpdCBhL2tzcmMvZHJpdmVycy9jaWZ4L0NvbmZpZy5pbiBiL2tzcmMv ZHJpdmVycy9jaWZ4L0NvbmZpZy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li5iNGU2YmUxCi0tLSAvZGV2L251bGwKKysrIGIva3NyYy9kcml2ZXJzL2NpZngvQ29uZmlnLmlu CkBAIC0wLDAgKzEsMTAgQEAKKyMKKyMgWGVub21haSBjb25maWd1cmF0aW9uIGZvciBMaW51eCB2 Mi40CisjCisKK21haW5tZW51X29wdGlvbiBuZXh0X2NvbW1lbnQKK2NvbW1lbnQgJ1JlYWwtdGlt ZSBIaWxzY2hlciBjaWZYIGRyaXZlcicKKworZGVwX3RyaXN0YXRlICdIaWxzY2hlciBjaWZYJyBD T05GSUdfWEVOT19EUklWRVJTX0NJRlggJENPTkZJR19YRU5PX1NLSU5fUlRETQorCitlbmRtZW51 CmRpZmYgLS1naXQgYS9rc3JjL2RyaXZlcnMvY2lmeC9Db25maWcuaW5+IGIva3NyYy9kcml2ZXJz L2NpZngvQ29uZmlnLmlufgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmJi MGJiCi0tLSAvZGV2L251bGwKKysrIGIva3NyYy9kcml2ZXJzL2NpZngvQ29uZmlnLmlufgpAQCAt MCwwICsxLDEwIEBACisjCisjIFhlbm9tYWkgY29uZmlndXJhdGlvbiBmb3IgTGludXggdjIuNAor IworCittYWlubWVudV9vcHRpb24gbmV4dF9jb21tZW50Citjb21tZW50ICdSZWFsLXRpbWUgSGls c2NoZXIgY2lmWCBkcml2ZXInCisKK2RlcF90cmlzdGF0ZSAnSGlsc2NoZXIgY2lmWCBkcml2ZXIn IENPTkZJR19YRU5PX0RSSVZFUlNfQ0lGWCAkQ09ORklHX1hFTk9fU0tJTl9SVERNCisKK2VuZG1l bnUKZGlmZiAtLWdpdCBhL2tzcmMvZHJpdmVycy9jaWZ4L0tjb25maWcgYi9rc3JjL2RyaXZlcnMv Y2lmeC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNWE0NWUK LS0tIC9kZXYvbnVsbAorKysgYi9rc3JjL2RyaXZlcnMvY2lmeC9LY29uZmlnCkBAIC0wLDAgKzEs MTEgQEAKK21lbnUgIkhpbHNjaGVyIGNpZlggZHJpdmVyIgorCitjb25maWcgWEVOT19EUklWRVJT X0NJRlgKKwlkZXBlbmRzIG9uIFhFTk9fU0tJTl9SVERNCisJdHJpc3RhdGUgIkhpbHNjaGVyIGNp ZlgiCisJaGVscAorCisJVGhpcyBkcml2ZXIgcHJvdmlkZXMgSGlsc2NoZXIgY2lmWCAKKwlvdmVy IFJURE0uCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2tzcmMvZHJpdmVycy9jaWZ4L0tjb25maWd+ IGIva3NyYy9kcml2ZXJzL2NpZngvS2NvbmZpZ34KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uOTE0ZDZlNgotLS0gL2Rldi9udWxsCisrKyBiL2tzcmMvZHJpdmVycy9jaWZ4L0tj b25maWd+CkBAIC0wLDAgKzEsMTEgQEAKK21lbnUgIlJlYWwtdGltZSBJUEMgZHJpdmVycyIKKwor Y29uZmlnIFhFTk9fRFJJVkVSU19DSUZYCisJZGVwZW5kcyBvbiBYRU5PX1NLSU5fUlRETQorCXRy aXN0YXRlICJIaWxzY2hlciBjaWZYIgorCWhlbHAKKworCVRoaXMgZHJpdmVyIHByb3ZpZGVzIEhp bHNjaGVyIGNpZlggCisJb3ZlciBSVERNLgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9rc3JjL2Ry aXZlcnMvY2lmeC9NYWtlZmlsZSBiL2tzcmMvZHJpdmVycy9jaWZ4L01ha2VmaWxlCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzY2JjMDAKLS0tIC9kZXYvbnVsbAorKysgYi9r c3JjL2RyaXZlcnMvY2lmeC9NYWtlZmlsZQpAQCAtMCwwICsxLDM3IEBACitpZm5lcSAoJChWRVJT SU9OKS4kKFBBVENITEVWRUwpLDIuNCkKKworIyBNYWtlZmlsZSBmcmFnIGZvciBMaW51eCB2Mi42 IGFuZCB2My54CisKK0VYVFJBX0NGTEFHUyArPSAtRF9fSU5fWEVOT01BSV9fIC1JaW5jbHVkZS94 ZW5vbWFpIC1JZHJpdmVycy94ZW5vbWFpL2NpZngKKworb2JqLSQoQ09ORklHX1hFTk9fRFJJVkVS U19DSUZYKSArPSB4ZW5vX2NpZnhfcGNpLm8KKworeGVub19jaWZ4X3BjaS15IDo9IGNpZnhfcGNp Lm8KKworeGVub19jaWZ4X3BjaS0kKENPTkZJR19YRU5PX0RSSVZFUlNfUlRJUENfQ0lGWCkgKz0g Y2lmeF9wY2kubworCitlbHNlCisKKyMgTWFrZWZpbGUgZnJhZyBmb3IgTGludXggdjIuNAorCitP X1RBUkdFVCA6PSBidWlsdC1pbi5vCisKK29iai0kKENPTkZJR19YRU5PX0RSSVZFUlNfQ0lGWCkg Kz0geGVub19jaWZ4X3BjaS5vCisKK3hlbm9fY2lmeF9wY2ktb2JqcyA6PSBjaWZ4X3BjaS5vCisK K29wdF9vYmpzLXkgOj0KK29wdF9vYmpzLSQoQ09ORklHX1hFTk9fRFJJVkVSU19SVElQQ19DSUZY KSArPSBjaWZ4X3BjaS5vCisKK3hlbm9fY2lmeF9wY2ktb2JqcyArPSAkKG9wdF9vYmpzLXkpCisK K2V4cG9ydC1vYmpzIDo9ICQoeGVub19jaWZ4X3BjaS1vYmpzKQorCitFWFRSQV9DRkxBR1MgKz0g LURfX0lOX1hFTk9NQUlfXyAtSSQoVE9QRElSKS9pbmNsdWRlL3hlbm9tYWkgLUkkKFRPUERJUikv aW5jbHVkZS94ZW5vbWFpL2NvbXBhdCAtSS4KKworaW5jbHVkZSAkKFRPUERJUikvUnVsZXMubWFr ZQorCit4ZW5vX2NpZnhfcGNpLm86ICQoeGVub19jaWZ4X3BjaS1vYmpzKQorCSQoTEQpIC1yIC1v ICRAICQoeGVub19jaWZ4X3BjaS1vYmpzKQorCitlbmRpZgpkaWZmIC0tZ2l0IGEva3NyYy9kcml2 ZXJzL2NpZngvTWFrZWZpbGV+IGIva3NyYy9kcml2ZXJzL2NpZngvTWFrZWZpbGV+Cm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOTBmMWEKLS0tIC9kZXYvbnVsbAorKysgYi9r c3JjL2RyaXZlcnMvY2lmeC9NYWtlZmlsZX4KQEAgLTAsMCArMSw0MSBAQAoraWZuZXEgKCQoVkVS U0lPTikuJChQQVRDSExFVkVMKSwyLjQpCisKKyMgTWFrZWZpbGUgZnJhZyBmb3IgTGludXggdjIu NiBhbmQgdjMueAorCitFWFRSQV9DRkxBR1MgKz0gLURfX0lOX1hFTk9NQUlfXyAtSWluY2x1ZGUv eGVub21haSAtSWRyaXZlcnMveGVub21haS9jaWZ4CisKK29iai0kKENPTkZJR19YRU5PX0RSSVZF UlNfQ0lGWCkgKz0geGVub19ydGlwYy5vCisKK3hlbm9fcnRpcGMteSA6PSBydGlwYy5vCisKK3hl bm9fcnRpcGMtJChDT05GSUdfWEVOT19EUklWRVJTX1JUSVBDX1hERFApICs9IHhkZHAubworeGVu b19ydGlwYy0kKENPTkZJR19YRU5PX0RSSVZFUlNfUlRJUENfSUREUCkgKz0gaWRkcC5vCit4ZW5v X3J0aXBjLSQoQ09ORklHX1hFTk9fRFJJVkVSU19SVElQQ19CVUZQKSArPSBidWZwLm8KKworZWxz ZQorCisjIE1ha2VmaWxlIGZyYWcgZm9yIExpbnV4IHYyLjQKKworT19UQVJHRVQgOj0gYnVpbHQt aW4ubworCitvYmotJChDT05GSUdfWEVOT19EUklWRVJTX1JUSVBDKSArPSB4ZW5vX3J0aXBjLm8K KworeGVub19ydGlwYy1vYmpzIDo9IHJ0aXBjLm8KKworb3B0X29ianMteSA6PQorb3B0X29ianMt JChDT05GSUdfWEVOT19EUklWRVJTX1JUSVBDX1hERFApICs9IHhkZHAubworb3B0X29ianMtJChD T05GSUdfWEVOT19EUklWRVJTX1JUSVBDX0lERFApICs9IGlkZHAubworb3B0X29ianMtJChDT05G SUdfWEVOT19EUklWRVJTX1JUSVBDX0JVRlApICs9IGJ1ZnAubworCit4ZW5vX3J0aXBjLW9ianMg Kz0gJChvcHRfb2Jqcy15KQorCitleHBvcnQtb2JqcyA6PSAkKHhlbm9fcnRpcGMtb2JqcykKKwor RVhUUkFfQ0ZMQUdTICs9IC1EX19JTl9YRU5PTUFJX18gLUkkKFRPUERJUikvaW5jbHVkZS94ZW5v bWFpIC1JJChUT1BESVIpL2luY2x1ZGUveGVub21haS9jb21wYXQgLUkuCisKK2luY2x1ZGUgJChU T1BESVIpL1J1bGVzLm1ha2UKKworeGVub19ydGlwYy5vOiAkKHhlbm9fcnRpcGMtb2JqcykKKwkk KExEKSAtciAtbyAkQCAkKHhlbm9fcnRpcGMtb2JqcykKKworZW5kaWYKZGlmZiAtLWdpdCBhL2tz cmMvZHJpdmVycy9jaWZ4L2NpZnhfcGNpLmMgYi9rc3JjL2RyaXZlcnMvY2lmeC9jaWZ4X3BjaS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NzM2N2QKLS0tIC9kZXYvbnVs bAorKysgYi9rc3JjL2RyaXZlcnMvY2lmeC9jaWZ4X3BjaS5jCkBAIC0wLDAgKzEsMTE4OSBAQAor LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgorICogICBDb3B5cmlnaHQgKEMpIDIwMTMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICBIaWxzY2hlciBG cmFuY2UgKEpQKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKgorICogICBodHRwOi8vd3d3LmhpbHNjaGVyLmZyICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeSAgKgorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICog ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAg KgorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogICBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAg ICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogICBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAg ICAgICAgICAgICAgKgorICogICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICA1OSBUZW1wbGUgUGxhY2Ug LSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgor ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBJbmNs dWRlcyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNp bmNsdWRlIDxsaW51eC9tbWFuLmg+CisKKyNpbmNsdWRlIDxydGRtL3J0ZG1fZHJpdmVyLmg+CisK Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxF X0RFU0NSSVBUSU9OKCJSVERNIGJvYXJkIGRyaXZlciBmb3IgQ2lmWCBjYXJkcyIpOworTU9EVUxF X0FVVEhPUigiSGlsc2NoZXIgRnJhbmNlIChKUCkgPHd3dy5oaWxzY2hlci5mcj4iKTsKKworLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworLyohCisgKiAgIFxhZGR0b2dyb3VwIGNpZnhfcGNpX0NvcmUK KyAqICAgQHsKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAjZGVmaW5lICovCisK KyNpZm5kZWYgVFJVRQorI2RlZmluZSBUUlVFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEK KyNlbmRpZgkJCQkvKiBUUlVFICovCisKKyNpZm5kZWYgRkFMU0UKKyNkZWZpbmUgRkFMU0UgICAg ICAgICAgICAgICAgICAgICAgICAgICAwCisjZW5kaWYJCQkJLyogVFJVRSAqLworCisjaWZuZGVm IFBDSV9WRU5ET1JfSURfSElMU0NIRVIKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ISUxTQ0hFUiAg ICAgICAgICAweDE1Q0YKKyNlbmRpZgkJCQkvKiBQQ0lfVkVORE9SX0lEX0hJTFNDSEVSICovCisK KyNpZm5kZWYgUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRYCisjZGVmaW5lIFBDSV9ERVZJQ0Vf SURfSElMU0NIRVJfTkVUWCAgICAgMHgwMDAwCisjZW5kaWYJCQkJLyogUENJX0RFVklDRV9JRF9I SUxTQ0hFUl9ORVRYICovCisKKyNpZm5kZWYgUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRQTEMK KyNkZWZpbmUgUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRQTEMgICAweDAwMTAKKyNlbmRpZgkJ CQkvKiBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFBMQyAqLworCisjaWZuZGVmIFBDSV9ERVZJ Q0VfSURfSElMU0NIRVJfTkVUSkFDSworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05F VEpBQ0sgIDB4MDAyMAorI2VuZGlmCQkJCS8qIFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUSkFD SyAqLworCisjaWZuZGVmIFBDSV9TVUJERVZJQ0VfSURfTlhTQl9QQ0EKKyNkZWZpbmUgUENJX1NV QkRFVklDRV9JRF9OWFNCX1BDQSAgICAgICAweDMyMzUKKyNlbmRpZgkJCQkvKiBQQ0lfU1VCREVW SUNFX0lEX05YU0JfUENBICovCisKKyNpZm5kZWYgUENJX1NVQkRFVklDRV9JRF9OWFBDQQorI2Rl ZmluZSBQQ0lfU1VCREVWSUNFX0lEX05YUENBICAgICAgICAgIDB4MzMzNQorI2VuZGlmCQkJCS8q IFBDSV9TVUJERVZJQ0VfSURfTlhQQ0EgKi8KKworI2lmbmRlZiBQQ0lfU1VCREVWSUNFX0lEX05F VFBMQ19SQU0KKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9ORVRQTENfUkFNICAgICAweDAwMDAK KyNlbmRpZgkJCQkvKiBQQ0lfU1VCREVWSUNFX0lEX05FVFBMQ19SQU0gKi8KKworI2lmbmRlZiBQ Q0lfU1VCREVWSUNFX0lEX05FVFBMQ19GTEFTSAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX05F VFBMQ19GTEFTSCAgIDB4MDAwMQorI2VuZGlmCQkJCS8qIFBDSV9TVUJERVZJQ0VfSURfTkVUUExD X0ZMQVNIICovCisKKyNpZm5kZWYgUENJX1NVQkRFVklDRV9JRF9ORVRKQUNLX1JBTQorI2RlZmlu ZSBQQ0lfU1VCREVWSUNFX0lEX05FVEpBQ0tfUkFNICAgIDB4MDAwMAorI2VuZGlmCQkJCS8qIFBD SV9TVUJERVZJQ0VfSURfTkVUSkFDS19SQU0gKi8KKworI2lmbmRlZiBQQ0lfU1VCREVWSUNFX0lE X05FVEpBQ0tfRkxBU0gKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9ORVRKQUNLX0ZMQVNIICAw eDAwMDEKKyNlbmRpZgkJCQkvKiBQQ0lfU1VCREVWSUNFX0lEX05FVEpBQ0tfRkxBU0ggKi8KKwor I2RlZmluZSBEUE1fSE9TVF9JTlRfRU4wICAgICAgICAgICAgICAgIDB4ZmZmMAorI2RlZmluZSBE UE1fSE9TVF9JTlRfU1RBVDAgICAgICAgICAgICAgIDB4ZmZlMAorI2RlZmluZSBQTFhfR1BJT19P RkZTRVQgICAgICAgICAgICAgICAgIDB4MTUKKyNkZWZpbmUgUExYX1RJTUlOR19PRkZTRVQgICAg ICAgICAgICAgICAweDBhCisKKyNkZWZpbmUgRFBNX0hPU1RfSU5UX01BU0sgICAgICAgICAgICAg ICAweGU2MDBmZmZmCisjZGVmaW5lIERQTV9IT1NUX0lOVF9HTE9CQUxfRU4gICAgICAgICAgMHg4 MDAwMDAwMAorI2RlZmluZSBQTFhfR1BJT19EQVRBMF9NQVNLICAgICAgICAgICAgIDB4MDAwMDAw MDQKKyNkZWZpbmUgUExYX0dQSU9fREFUQTFfTUFTSyAgICAgICAgICAgICAweDAwMDAwMDIwCisK KyNkZWZpbmUgTlhfUENBX1BDSV84X0JJVF9EUE1fTU9ERSAgICAgICAweDU0MzFGOTYyCisjZGVm aW5lIE5YX1BDQV9QQ0lfMTZfQklUX0RQTV9NT0RFICAgICAgMHg0MDczRjhFMgorI2RlZmluZSBO WF9QQ0FfUENJXzMyX0JJVF9EUE1fTU9ERSAgICAgIDB4NDA4MjQxMjIKKworLyogTnVtYmVyIG9m IGJhciAqLworLyogcG9pbnRzIHRvIHRoZSBEUE0gLT4gbmV0WCwgbmV0UExDLCBuZXRKQUNLICov CisjZGVmaW5lIERQTV9CQVIgICAgICAgICAgICAgICAgICAgICAgICAgMAorLyogcG9pbnRzIHRv IHRoZSBvcHRpb25hbCBleHRlbmRlZCBtZW1vcnkgICAgICovCisjZGVmaW5lIEVYVF9NRU1fQkFS ICAgICAgICAgICAgICAgICAgICAgMQorLyogcG9pbnRzIHRvIHRoZSBEUE0gLT4gbmV0WFBMWCAg ICAgICAgICAgICAgICovCisjZGVmaW5lIFBMWF9EUE1fQkFSICAgICAgICAgICAgICAgICAgICAg MgorLyogdGltaW5nIGNvbmZpZyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCisjZGVm aW5lIFBYQV9QTFhfQkFSICAgICAgICAgICAgICAgICAgICAgMAorCisvKiBJbmRleCBvZiBpb19p bmZvIHN0cnVjdHVyZSdzIG1lbW9yeSBhcnJheSAqLworLyogZmlyc3QgbWFwcGluZyBkZXNjcmli ZXMgRFBNICAgICAgICAgICAgICAqLworI2RlZmluZSBEUE1fSU5ERVggICAgICAgICAgICAgICAg ICAgICAgIDAKKy8qIHNlY29uZCBtYXBwaW5nIGRlc2NyaWJlcyBleHRlbmRlZCBtZW1vcnkgKi8K KyNkZWZpbmUgRVhUX01FTV9JTkRFWCAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgTUFY X01BUFMgICAgICAgICAgICAgICAgICAgICAgICAyCisKKyNkZWZpbmUgTUVNX1BIWVMgICAgICAg ICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgRFJJVkVSX05BTUUgICAgICAgICAgICAgICAg ICAgICAicnRkbV9jaWZ4IgorI2RlZmluZSBQRVJJUEhFUkFMX05BTUUgICAgICAgICAgICAgICAg ICJjaWZ4IgorI2RlZmluZSBQUk9WSURFUl9OQU1FICAgICAgICAgICAgICAgICAgICJIaWxzY2hl ciIKKworLyogbmFtZSBvZiBhIE5YU0ItUENBIG9yIE5YUENBLVBDSSBjYXJkICovCisjZGVmaW5l IENJRlhfUlRETV9QTFhfQ0FSRF9OQU1FICAgICAgICAgIm5ldHhfcGx4IgorLyogbmFtZSBvZiBh IGNpZlggUENJIGNhcmQgICAgICAgICAgICAgICovCisjZGVmaW5lIENJRlhfUlRETV9DQVJEX05B TUUgICAgICAgICAgICAgIm5ldHgiCisvKiBuYW1lIG9mIGEgbmV0UExDIFBDSSBjYXJkICAgICAg ICAgICAgKi8KKyNkZWZpbmUgQ0lGWF9SVERNX05FVFBMQ19DQVJEX05BTUUgICAgICAibmV0cGxj IgorLyogbmFtZSBvZiBhIG5ldEpBQ0sgUENJIGNhcmQgICAgICAgICAgICovCisjZGVmaW5lIENJ RlhfUlRETV9ORVRKQUNLX0NBUkRfTkFNRSAgICAgIm5ldGphY2siCisKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKworLyogc3RydWN0dXJlICovCisKK3N0cnVjdCBweGFfZGV2X2luZm8geworCXVp bnQzMl90IF9faW9tZW0gKnBseDsKKwl1aW50OF90IGRwbV9tb2RlOworCXVpbnQzMl90IHBseF90 aW1pbmc7Cit9OworCitzdHJ1Y3QgaW9fbWVtIHsKKwl1aW50MzJfdCBhZGRyOworCXVpbnQzMl90 IHNpemU7CisJaW50MzJfdCBtZW10eXBlOworCXZvaWQgX19pb21lbSAqaW50ZXJuYWxfYWRkcjsK K307CisKK3N0cnVjdCBpb19pbmZvIHsKKwlzdHJ1Y3QgaW9fbWVtIG1lbVtNQVhfTUFQU107CisJ aW50MzJfdCBpcnE7CisJdWludDhfdCBpcnFfZW5hYmxlOworCXVpbnQ4X3QgaXJxX3JlZ2lzdGVy ZWQ7CisJcnRkbV9pcnFfdCBpcnFfaGFuZGxlOworCXZvaWQgKnByaXY7Cit9OworCitzdHJ1Y3Qg aW9fbWFwX21lbSB7CisJdWludDMyX3QgcGh5c19hZGRyOworCXZvaWQgKip2aXJ0X2FkZHI7CisJ dWludDMyX3QgbGVuZ3RoOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQcm90 b3R5cGVzICovCisKKyNpZmRlZiBJUlFfU1VQUE9SVAorc3RhdGljIGludCBjaWZ4X2hhbmRsZXIo cnRkbV9pcnFfdCAqaXJxKTsKKyNlbmRpZiAvKiBJUlFfU1VQUE9SVCAqLworc3RhdGljIGludCBj aWZ4X3B4YV9zZXRfcGx4X3RpbWluZyhzdHJ1Y3QgcnRkbV9kZXZpY2UgKmluZm8pOworc3RhdGlj IGludCBjaWZ4X3B4YV9nZXRfcGx4X3RpbWluZyhzdHJ1Y3QgcnRkbV9kZXZpY2UgKmluZm8pOwor c3RhdGljIGludCBjaWZ4X3B4YV9nZXRfZHBtX21vZGUoc3RydWN0IHJ0ZG1fZGV2aWNlICppbmZv KTsKKworc3RhdGljIGludCBjaWZ4X3BjaV9vcGVuKHN0cnVjdCBydGRtX2Rldl9jb250ZXh0ICpj b250ZXh0LAorCQkJIHJ0ZG1fdXNlcl9pbmZvX3QgKnVzZXJfaW5mbywgaW50IG9mbGFncyk7Citz dGF0aWMgaW50IGNpZnhfcGNpX2Nsb3NlKHN0cnVjdCBydGRtX2Rldl9jb250ZXh0ICpjb250ZXh0 LAorCQkJICBydGRtX3VzZXJfaW5mb190ICp1c2VyX2luZm8pOworc3RhdGljIHNzaXplX3QgY2lm eF9wY2lfcmVhZChzdHJ1Y3QgcnRkbV9kZXZfY29udGV4dCAqY29udGV4dCwKKwkJCSAgICAgcnRk bV91c2VyX2luZm9fdCAqdXNlcl9pbmZvLCB2b2lkICpidWYsCisJCQkgICAgIHNpemVfdCBuYnl0 ZSk7CitzdGF0aWMgc3NpemVfdCBjaWZ4X3BjaV93cml0ZShzdHJ1Y3QgcnRkbV9kZXZfY29udGV4 dCAqY29udGV4dCwKKwkJCSAgICAgIHJ0ZG1fdXNlcl9pbmZvX3QgKnVzZXJfaW5mbywgY29uc3Qg dm9pZCAqYnVmLAorCQkJICAgICAgc2l6ZV90IG5ieXRlKTsKKworc3RhdGljIGludCBjaWZ4X3Bj aV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAq aWQpOworc3RhdGljIHZvaWQgY2lmeF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwor CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIExvY2FsIHZhcmlhYmxlcyAqLworCisvKiog TnVtYmVyIG9yIGNpZnggZm91bmQgYW5kIG9wZW4gKi8KK3N0YXRpYyBpbnQzMl90IGNpZnhfbnVt OworCisvKiogUlRETSBEZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0dXJlICovCitzdGF0aWMgY29u c3Qgc3RydWN0IHJ0ZG1fZGV2aWNlIF9faW5pdGRhdGEgY2lmeF9kZXZpY2VfdG1wbCA9IHsKKwku c3RydWN0X3ZlcnNpb24gPSBSVERNX0RFVklDRV9TVFJVQ1RfVkVSLAorCisJLmRldmljZV9mbGFn cyA9IFJURE1fTkFNRURfREVWSUNFLAorCS5jb250ZXh0X3NpemUgPSAwLAorCS5kZXZpY2VfbmFt ZSA9ICIiLAorCisJLm9wZW5fbnJ0ID0gY2lmeF9wY2lfb3BlbiwKKworCS5vcHMgPSB7CisJCS5j bG9zZV9ucnQgPSBjaWZ4X3BjaV9jbG9zZSwKKworCQkucmVhZF9ucnQgPSBjaWZ4X3BjaV9yZWFk LAorCQkud3JpdGVfbnJ0ID0gY2lmeF9wY2lfd3JpdGUsCisKKwkJLmlvY3RsX3J0ID0gTlVMTCwK KwkJLmlvY3RsX25ydCA9IE5VTEwsCisKKwkJLnJlYWRfcnQgPSBOVUxMLAorCQkud3JpdGVfcnQg PSBOVUxMLAorCQl9LAorCisJLmRldmljZV9jbGFzcyA9IFJURE1fQ0xBU1NfRVhQRVJJTUVOVEFM LAorCS5kZXZpY2Vfc3ViX2NsYXNzID0gUlRETV9TVUJDTEFTU19HRU5FUklDLAorCS5wcm9maWxl X3ZlcnNpb24gPSAxLAorCS5kcml2ZXJfbmFtZSA9IERSSVZFUl9OQU1FLAorCS5kcml2ZXJfdmVy c2lvbiA9IFJURE1fRFJJVkVSX1ZFUigxLCAwLCAwKSwKKwkucHJvdmlkZXJfbmFtZSA9IFBST1ZJ REVSX05BTUUsCit9OworCisvKiogRGV2aWNlIHRhYmxlICovCitzdGF0aWMgREVGSU5FX1BDSV9E RVZJQ0VfVEFCTEUoY2lmeF9wY2lfdGJsKSA9IHsKKwl7CisJCS52ZW5kb3IgPSBQQ0lfVkVORE9S X0lEX0hJTFNDSEVSLAorCQkuZGV2aWNlID0gUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRYLAor CQkuc3VidmVuZG9yID0gMCwKKwkJLnN1YmRldmljZSA9IDAsCisJfSwKKwl7CisJCS52ZW5kb3Ig PSBQQ0lfVkVORE9SX0lEX1BMWCwKKwkJLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfUExYXzkwMzAs CisJCS5zdWJ2ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1BMWCwKKwkJLnN1YmRldmljZSA9IFBDSV9T VUJERVZJQ0VfSURfTlhTQl9QQ0EsCisJfSwKKwl7CisJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lE X1BMWCwKKwkJLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfUExYXzkwMzAsCisJCS5zdWJ2ZW5kb3Ig PSBQQ0lfVkVORE9SX0lEX1BMWCwKKwkJLnN1YmRldmljZSA9IFBDSV9TVUJERVZJQ0VfSURfTlhQ Q0EsCisJfSwKKwl7CisJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0hJTFNDSEVSLAorCQkuZGV2 aWNlID0gUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRQTEMsCisJCS5zdWJ2ZW5kb3IgPSBQQ0lf VkVORE9SX0lEX0hJTFNDSEVSLAorCQkuc3ViZGV2aWNlID0gUENJX1NVQkRFVklDRV9JRF9ORVRQ TENfUkFNLAorCX0sCisJeworCQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9ISUxTQ0hFUiwKKwkJ LmRldmljZSA9IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExDLAorCQkuc3VidmVuZG9yID0g UENJX1ZFTkRPUl9JRF9ISUxTQ0hFUiwKKwkJLnN1YmRldmljZSA9IFBDSV9TVUJERVZJQ0VfSURf TkVUUExDX0ZMQVNILAorCX0sCisJeworCQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9ISUxTQ0hF UiwKKwkJLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUSkFDSywKKwkJLnN1YnZl bmRvciA9IFBDSV9WRU5ET1JfSURfSElMU0NIRVIsCisJCS5zdWJkZXZpY2UgPSBQQ0lfU1VCREVW SUNFX0lEX05FVEpBQ0tfUkFNLAorCX0sCisJeworCQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9I SUxTQ0hFUiwKKwkJLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUSkFDSywKKwkJ LnN1YnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSElMU0NIRVIsCisJCS5zdWJkZXZpY2UgPSBQQ0lf U1VCREVWSUNFX0lEX05FVEpBQ0tfRkxBU0gsCisJfSwKKwl7IDAsfQorfTsKKworLyoqIFJURE0g Y2lmWCBEcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBjaWZ4X3BjaV9kcml2ZXIg PSB7CisJLm5hbWUgPSAiY2lmeCIsCisJLmlkX3RhYmxlID0gY2lmeF9wY2lfdGJsLAorCS5wcm9i ZSA9IGNpZnhfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBjaWZ4X3BjaV9yZW1vdmUsCit9OworCisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBJUlFfU1VQUE9SVAorCisvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCisvKiEKKyAqICAgXGJyaWVmICBjaWZ4X2hhbmRsZXIKKyAqCisgKiAgIFxw YXJhbSAgW2luXQlpcnEgICAgICAgUmVzb3VyY2UgdGFzayBwb2ludGVyCisgKgorICogICBccmV0 dXJuIFJURE1fSVJRX05PTkUgb3IgUlRETV9JUlFfSEFORExFRAorICoKKyAqICAgXG5vdGUgICBj aWZ4IGludGVycnVwdCBoYW5kbGVyCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRp YyBpbmxpbmUgaW50IGNpZnhfaGFuZGxlcihydGRtX2lycV90ICppcnEpCit7CisJc3RydWN0IHJ0 ZG1fZGV2aWNlICppbmZvID0KKwkgICAgKHN0cnVjdCBydGRtX2RldmljZSAqKXJ0ZG1faXJxX2dl dF9hcmcoaXJxLCB2b2lkKTsKKwlzdHJ1Y3QgaW9faW5mb190ICpkZXZpY2VfZGF0YSA9IChzdHJ1 Y3QgaW9faW5mb190ICopaW5mby0+ZGV2aWNlX2RhdGE7CisKKwkvKiBUZXN0IGlmIHJlcXVlc3Qg aXMgZm9yIHRoaXMgZHJpdmVyICovCisJaWYgKChkZXZpY2VfZGF0YS0+cHJpdiAhPSBOVUxMKQor CSAgICB8fCAoZGV2aWNlX2RhdGEtPmlycV9yZWdpc3RlcmVkID09IEZBTFNFKQorCSAgICB8fCAo ZGV2aWNlX2RhdGEtPmlycV9lbmFibGUgPT0gRkFMU0UpKSB7CisJCS8qIFRoaXMgaXMgYSBQTFgg ZGV2aWNlIGFuZCBjYW5ub3QgcHJvZHVjZSBhbiBJUlEsCisJCSAgIElSUSBub3QgcmVnaXN0cmVk IG9yIG5vdCBlbmFibGUgKGNhbm5vdCBwcm9kdWNlIGFuIElSUSkgKi8KKwkJcmV0dXJuIFJURE1f SVJRX05PTkU7CisJfSBlbHNlIHsKKwkJdm9pZCBfX2lvbWVtICppbnRfZW5hYmxlX3JlZyA9CisJ CSAgICBkZXZpY2VfZGF0YS0+bWVtW0RQTV9JTkRFWF0uaW50ZXJuYWxfYWRkciArCisJCSAgICBE UE1fSE9TVF9JTlRfRU4wOworCQl2b2lkIF9faW9tZW0gKmludF9zdGF0dXNfcmVnID0KKwkJICAg IGRldmljZV9kYXRhLT5tZW1bRFBNX0lOREVYXS5pbnRlcm5hbF9hZGRyICsKKwkJICAgIERQTV9I T1NUX0lOVF9TVEFUMDsKKworCQkvKiBJcyBvbmUgb2Ygb3VyIGludGVycnVwdHMgZW5hYmxlZCBh bmQgYWN0aXZlID8gKi8KKwkJaWYgKCEoaW9yZWFkMzIoaW50X2VuYWJsZV9yZWcpICYgaW9yZWFk MzIoaW50X3N0YXR1c19yZWcpCisJCSAgICAgICYgRFBNX0hPU1RfSU5UX01BU0spKQorCQkJcmV0 dXJuIFJURE1fSVJRX05PTkU7CisKKwkJLyogRGlzYWJsZSBpbnRlcnJ1cHQgKi8KKwkJaW93cml0 ZTMyKGlvcmVhZDMyKGludF9lbmFibGVfcmVnKQorCQkJICAmIH5EUE1fSE9TVF9JTlRfR0xPQkFM X0VOLCBpbnRfZW5hYmxlX3JlZyk7CisKKwkJcmV0dXJuIFJURE1fSVJRX0hBTkRMRUQ7CisJfQor fQorCisjZW5kaWYgLyogSVJRX1NVUFBPUlQgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor LyohCisgKiAgIFxicmllZiAgY2lmeF9weGFfc2V0X3BseF90aW1pbmcKKyAqCisgKiAgIFxwYXJh bQlbaW5dCWluZm8JY2lmeCBydGRtIGRldmljZSBpbmZvcm1hdGlvbgorICoKKyAqICAgXHJldHVy biAwIChPSykgb3IgRXJyb3IKKyAqCisgKiAgIFxub3RlICAgU2V0IHBseCB0aW1pbmcKKyAqLwor LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBjaWZ4X3B4YV9zZXRfcGx4X3RpbWlu ZyhzdHJ1Y3QgcnRkbV9kZXZpY2UgKmluZm8pCit7CisJc3RydWN0IHB4YV9kZXZfaW5mbyAqcHhh X2luZm8gPQorCSAgICAoc3RydWN0IHB4YV9kZXZfaW5mbyAqKSgoc3RydWN0IGlvX2luZm8gKilp bmZvLT5kZXZpY2VfZGF0YSktPnByaXY7CisJdWludDMyX3QgX19pb21lbSAqcGx4X3RpbWluZzsK KworCWlmICghcHhhX2luZm8pCisJCXJldHVybiAtRU5PREVWOworCisJcGx4X3RpbWluZyA9IHB4 YV9pbmZvLT5wbHggKyBQTFhfVElNSU5HX09GRlNFVDsKKwkqcGx4X3RpbWluZyA9IHB4YV9pbmZv LT5wbHhfdGltaW5nOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K Ky8qIQorICogICBcYnJpZWYgIGNpZnhfcHhhX2dldF9wbHhfdGltaW5nCisgKgorICogICBccGFy YW0JW2luXQlpbmZvCWNpZnggcnRkbSBkZXZpY2UgaW5mb3JtYXRpb24KKyAqCisgKiAgIFxyZXR1 cm4gMCAoT0spIG9yIEVycm9yCisgKgorICogICBcbm90ZSAgIEdldCBwbHggdGltaW5nCisgKi8K Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgY2lmeF9weGFfZ2V0X3BseF90aW1p bmcoc3RydWN0IHJ0ZG1fZGV2aWNlICppbmZvKQoreworCXN0cnVjdCBweGFfZGV2X2luZm8gKnB4 YV9pbmZvID0KKwkgICAgKHN0cnVjdCBweGFfZGV2X2luZm8gKikoKHN0cnVjdCBpb19pbmZvICop aW5mby0+ZGV2aWNlX2RhdGEpLT5wcml2OworCisJaWYgKCFweGFfaW5mbykKKwkJcmV0dXJuIC1F Tk9ERVY7CisKKwlzd2l0Y2ggKHB4YV9pbmZvLT5kcG1fbW9kZSkgeworCWNhc2UgODoKKwkJcHhh X2luZm8tPnBseF90aW1pbmcgPSBOWF9QQ0FfUENJXzhfQklUX0RQTV9NT0RFOworCQlicmVhazsK KwljYXNlIDE2OgorCQlweGFfaW5mby0+cGx4X3RpbWluZyA9IE5YX1BDQV9QQ0lfMTZfQklUX0RQ TV9NT0RFOworCQlicmVhazsKKwljYXNlIDMyOgorCQlweGFfaW5mby0+cGx4X3RpbWluZyA9IE5Y X1BDQV9QQ0lfMzJfQklUX0RQTV9NT0RFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor LyohCisgKiAgIFxicmllZiAgY2lmeF9weGFfZ2V0X2RwbV9tb2RlCisgKgorICoJIFxwYXJhbQlb aW5dCWluZm8JY2lmeCBydGRtIGRldmljZSBpbmZvcm1hdGlvbgorICoKKyAqICAgXHJldHVybiAw IChPSykgb3IgRXJyb3IKKyAqCisgKiAgIFxub3RlICAgR2V0IGRwbSBtb2RlCisgKi8KKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgY2lmeF9weGFfZ2V0X2RwbV9tb2RlKHN0cnVj dCBydGRtX2RldmljZSAqaW5mbykKK3sKKwlzdHJ1Y3QgcHhhX2Rldl9pbmZvICpweGFfaW5mbyA9 CisJICAgIChzdHJ1Y3QgcHhhX2Rldl9pbmZvICopKChzdHJ1Y3QgaW9faW5mbyAqKWluZm8tPmRl dmljZV9kYXRhKS0+cHJpdjsKKwl1aW50MzJfdCBfX2lvbWVtICpwbHhfZ3BpbzsKKworCWlmICgh cHhhX2luZm8pCisJCXJldHVybiAtRU5PREVWOworCisJcGx4X2dwaW8gPSBweGFfaW5mby0+cGx4 ICsgUExYX0dQSU9fT0ZGU0VUOworCisJaWYgKCgqcGx4X2dwaW8gJiBQTFhfR1BJT19EQVRBMF9N QVNLKQorCSAgICAmJiB+KCpwbHhfZ3BpbyAmIFBMWF9HUElPX0RBVEExX01BU0spKQorCQlweGFf aW5mby0+ZHBtX21vZGUgPSA4OworCWVsc2UgaWYgKH4oKnBseF9ncGlvICYgUExYX0dQSU9fREFU QTBfTUFTSykKKwkJICYmICgqcGx4X2dwaW8gJiBQTFhfR1BJT19EQVRBMV9NQVNLKSkKKwkJcHhh X2luZm8tPmRwbV9tb2RlID0gMzI7CisJZWxzZSBpZiAofigqcGx4X2dwaW8gJiBQTFhfR1BJT19E QVRBMF9NQVNLKQorCQkgJiYgfigqcGx4X2dwaW8gJiBQTFhfR1BJT19EQVRBMV9NQVNLKSkKKwkJ cHhhX2luZm8tPmRwbV9tb2RlID0gMTY7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJl dHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqICAgXGJyaWVmICBj aWZ4X3BjaV9vcGVuCisgKgorICogICBccGFyYW0JW2luXQljb250ZXh0CQljb250ZXh0CisgKiAg IFxwYXJhbQlbaW5dCXVzZXJfaW5mbwl1c2VyIGluZm9ybWF0aW9uCisgKgkgXHBhcmFtCVtpbl0J b2ZsYWdzCQlmbGFncyAoZmxhZyBJUlEgdXNlZCkKKyAqCisgKiAgIFxyZXR1cm4gMCAoT0spIG9y IEVycm9yCisgKgorICogICBcbm90ZSAgIE9wZW4gUlRETSBjaWZ4IHBjaSBkcml2ZXIKKyAqLwor LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBjaWZ4X3BjaV9vcGVuKHN0cnVjdCBy dGRtX2Rldl9jb250ZXh0ICpjb250ZXh0LAorCQkJIHJ0ZG1fdXNlcl9pbmZvX3QgKnVzZXJfaW5m bywgaW50IG9mbGFncykKK3sKKyNpZmRlZiBJUlFfU1VQUE9SVAorCXN0cnVjdCBydGRtX2Rldmlj ZSAqaW5mbyA9IChzdHJ1Y3QgcnRkbV9kZXZpY2UgKiljb250ZXh0LT5kZXZpY2U7CisJaW50MzJf dCByZXQ7CisKKwkvKiBUZXN0IGlmIChvZmxhZ3MpIElSUSBhcmUgdXNlICovCisJaWYgKG9mbGFn cyA9PSBUUlVFKSB7CisJCWlmICgoKHN0cnVjdCBpb19pbmZvX3QgKilpbmZvLT5kZXZpY2VfZGF0 YSktPmlycV9yZWdpc3RlcmVkCisJCSAgICA9PSBGQUxTRSkgeworCQkJLyogUmVnaXN0ZXIgSVJR ICovCisJCQlyZXQgPQorCQkJICAgIHJ0ZG1faXJxX3JlcXVlc3QoJgorCQkJCQkgICAgICgoKHN0 cnVjdCBpb19pbmZvX3QgKilpbmZvLT4KKwkJCQkJICAgICAgIGRldmljZV9kYXRhKS0+aXJxX2hh bmRsZSksCisJCQkJCSAgICAgKChzdHJ1Y3QgaW9faW5mb190ICopaW5mby0+CisJCQkJCSAgICAg IGRldmljZV9kYXRhKS0+aXJxLCBjaWZ4X2hhbmRsZXIsCisJCQkJCSAgICAgUlRETV9JUlFUWVBF X1NIQVJFRCwKKwkJCQkJICAgICBpbmZvLT5kZXZpY2VfbmFtZSwgKHZvaWQgKilpbmZvKTsKKwor CQkJaWYgKHJldCAhPSAwKSB7CisjaWZkZWYgREVCVUcKKwkJCQlzd2l0Y2ggKHJldCkgeworCQkJ CWNhc2UgLUVJTlZBTDoKKwkJCQkJcnRkbV9wcmludGsoCisiY2lmeCBydGRtIGRyaXZlciBlcnJv cjogcnRkbV9pcnFfcmVxdWVzdDogYW4gaW52YWxpZCBwYXJhbWV0ZXIgd2FzIHBhc3NlZFxuIik7 CisJCQkJCWJyZWFrOworCQkJCWNhc2UgLUVCVVNZOgorCQkJCQlydGRtX3ByaW50aygKKyJjaWZ4 IHJ0ZG0gZHJpdmVyIGVycm9yOiBydGRtX2lycV9yZXF1ZXN0OiB0aGUgc3BlY2lmaWVkIElSUSBs aW5lIGlzIGFscmVhZHkgaW4gdXNlXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJ CQkJcnRkbV9wcmludGsoCisiY2lmeCBydGRtIGRyaXZlciBlcnJvcjogcnRkbV9pcnFfcmVxdWVz dCBlcnJvclxuIik7CisJCQkJCWJyZWFrOworCQkJCX0KKyNlbmRpZiAvKiBERUJVRyAqLworCisJ CQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9IGVsc2UKKwkJCQkoKGlvX2luZm9fdCAqKSBpbmZvLT4K KwkJCQkgZGV2aWNlX2RhdGEpLT5pcnFfcmVnaXN0ZXJlZCA9IFRSVUU7CisJCX0KKwl9CisjZW5k aWYgLyogSVJRX1NVUFBPUlQgKi8KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCisvKiEKKyAqCVxicmllZiAgY2lmeF9wY2lfY2xvc2UKKyAqCisgKglccGFyYW0JW2lu XQljb250ZXh0CQljb250ZXh0CisgKglccGFyYW0JW2luXQl1c2VyX2luZm8JdXNlciBpbmZvcm1h dGlvbgorICoKKyAqCVxyZXR1cm4gMCAoT0spIG9yIEVycm9yCisgKgorICoJXG5vdGUJQ2xvc2Ug UlRETSBjaWZ4IHBjaSBkcml2ZXIKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGlj IGludCBjaWZ4X3BjaV9jbG9zZShzdHJ1Y3QgcnRkbV9kZXZfY29udGV4dCAqY29udGV4dCwKKwkJ CSAgcnRkbV91c2VyX2luZm9fdCAqdXNlcl9pbmZvKQoreworI2lmZGVmIElSUV9TVVBQT1JUCisJ c3RydWN0IHJ0ZG1fZGV2aWNlICppbmZvID0gKHN0cnVjdCBydGRtX2RldmljZSAqKWNvbnRleHQt PmRldmljZTsKKworCWlmICgoKHN0cnVjdCBpb19pbmZvX3QgKilpbmZvLT5kZXZpY2VfZGF0YSkt PmlycV9yZWdpc3RlcmVkID09IFRSVUUpIHsKKwkJaWYgKCgoc3RydWN0IGlvX2luZm9fdCAqKWlu Zm8tPmRldmljZV9kYXRhKS0+CisJCQkJCQkJaXJxX2VuYWJsZSA9PSBUUlVFKSB7CisJCQkvKiBE aXNhYmxlIElSUSAqLworCQkJaWYgKHJ0ZG1faXJxX2Rpc2FibGUKKwkJCSAgICAoJgorCQkJICAg ICAoKChzdHJ1Y3QgaW9faW5mb190ICopaW5mby0+ZGV2aWNlX2RhdGEpLT4KKwkJCSAgICAgIGly cV9oYW5kbGUpKSAhPSAwKSB7CisjaWZkZWYgREVCVUcKKwkJCQlydGRtX3ByaW50aygKKwkJCSJj aWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogcnRkbV9pcnFfZGlzYWJsZSBlcnJvclxuIik7CisjZW5k aWYgLyogREVCVUcgKi8KKworCQkJCXJldHVybiAtRU5PREVWOworCQkJfQorCQl9CisKKwkJLyog VW5yZWdpc3RlciBJUlEgKi8KKwkJaWYgKHJ0ZG1faXJxX2ZyZWUKKwkJICAgICgmKCgoc3RydWN0 IGlvX2luZm9fdCAqKWluZm8tPmRldmljZV9kYXRhKS0+aXJxX2hhbmRsZSkpICE9CisJCSAgICAw KSB7CisjaWZkZWYgREVCVUcKKwkJCXJ0ZG1fcHJpbnRrCisJCQkgICAgKCJjaWZ4IHJ0ZG0gZHJp dmVyIGVycm9yIDogcnRkbV9pcnFfZnJlZSBlcnJvclxuIik7CisjZW5kaWYgLyogREVCVUcgKi8K KworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisjZW5kaWYgLyogSVJRX1NVUFBPUlQgKi8K KworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqICBcYnJp ZWYgIGNpZnhfcGNpX3JlYWQKKyAqCisgKglccGFyYW0JW2luXQljb250ZXh0CQljb250ZXh0Cisg KglccGFyYW0JW2luXQl1c2VyX2luZm8JdXNlciBpbmZvcm1hdGlvbgorICoJXHBhcmFtCVtpbl0J YnVmCXVzZXIJYnVmZmVyCisgKglccGFyYW0JW2luXQluYnl0ZQkJbnVtYmVyIG9mIGJ5dGUgdG8g cmVhZAorICoKKyAqICBccmV0dXJuIHNpemUgcmVhZAorICoKKyAqICBcbm90ZSAgIFJlYWQKKyAq LworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHNzaXplX3QgY2lmeF9wY2lfcmVhZChz dHJ1Y3QgcnRkbV9kZXZfY29udGV4dCAqY29udGV4dCwKKwkJCSAgICAgcnRkbV91c2VyX2luZm9f dCAqdXNlcl9pbmZvLCB2b2lkICpidWYsCisJCQkgICAgIHNpemVfdCBuYnl0ZSkKK3sKKwlzdHJ1 Y3QgcnRkbV9kZXZpY2UgKmluZm8gPSAoc3RydWN0IHJ0ZG1fZGV2aWNlICopY29udGV4dC0+ZGV2 aWNlOworCisJaWYgKG5ieXRlID4gc2l6ZW9mKHN0cnVjdCBpb19pbmZvKSkgeworI2lmZGVmIERF QlVHCisJCXJ0ZG1fcHJpbnRrCisJCSAgICAoImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBkYXRh IHVzZXIgc2l6ZSB0b28gYmlnXG4iKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisJCXJldHVybiAw OworCX0KKworCS8qIENvcHkgZGF0YSBpbmZvcm1hdGlvbiBmb3IgdXNlcmxhbmQgKi8KKwlpZiAo cnRkbV9zYWZlX2NvcHlfdG9fdXNlcih1c2VyX2luZm8sIGJ1ZiwKKwkJCQkgICAoKHN0cnVjdCBp b19pbmZvICopaW5mby0+ZGV2aWNlX2RhdGEpLAorCQkJCSAgIG5ieXRlKSkgeworI2lmZGVmIERF QlVHCisJCXJ0ZG1fcHJpbnRrCisJCSAgICAoImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBjYW4n dCBjb3B5IGRhdGEgZnJvbSBkcml2ZXJcbiIpOworI2VuZGlmIC8qIERFQlVHICovCisJfQorCisJ cmV0dXJuIG5ieXRlOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqCVxicmll ZiAgY2lmeF9wY2lfd3JpdGUKKyAqCisgKiAgXHBhcmFtCVtpbl0JY29udGV4dAkJY29udGV4dAor ICoJXHBhcmFtCVtpbl0JdXNlcl9pbmZvCXVzZXIgaW5mb3JtYXRpb24KKyAqCVxwYXJhbQlbaW5d CWJ1Zgl1c2VyCWJ1ZmZlcgorICoJXHBhcmFtCVtpbl0JbmJ5dGUJCW51bWJlciBvZiBieXRlIHRv IHJlYWQKKyAqCisgKiAgIFxyZXR1cm4gc2l6ZSByZWFkCisgKgorICogICBcbm90ZSAgIFJlYWQK KyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHNzaXplX3QgY2lmeF9wY2lfd3Jp dGUoc3RydWN0IHJ0ZG1fZGV2X2NvbnRleHQgKmNvbnRleHQsCisJCQkgICAgICBydGRtX3VzZXJf aW5mb190ICp1c2VyX2luZm8sIGNvbnN0IHZvaWQgKmJ1ZiwKKwkJCSAgICAgIHNpemVfdCBuYnl0 ZSkKK3sKKyNpZmRlZiBJUlFfU1VQUE9SVAorCXN0cnVjdCBydGRtX2RldmljZSAqaW5mbyA9IChz dHJ1Y3QgcnRkbV9kZXZpY2UgKiljb250ZXh0LT5kZXZpY2U7CisJdWludDhfdCBpcnFfZW5hYmxl OworI2VuZGlmIC8qIElSUV9TVVBQT1JUICovCisJc3RydWN0IGlvX21hcF9tZW0gbWFwX21lbTsK KwlpbnQgcmV0OworCisJaWYgKG5ieXRlID4gc2l6ZW9mKHN0cnVjdCBpb19tYXBfbWVtKSkgewor I2lmZGVmIERFQlVHCisJCXJ0ZG1fcHJpbnRrCisJCSAgICAoImNpZnggcnRkbSBkcml2ZXIgZXJy b3IgOiBkYXRhIHVzZXIgc2l6ZSB0b28gYmlnXG4iKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisJ CXJldHVybiAwOworCX0KKyNpZmRlZiBJUlFfU1VQUE9SVAorCWlmIChuYnl0ZSA9PSBzaXplb2Yo dWludDhfdCkpIHsKKwkJLyogQ29weSBkYXRhIGZvciBLZXJuZWwgKi8KKwkJaWYgKHJ0ZG1fc2Fm ZV9jb3B5X2Zyb21fdXNlcgorCQkgICAgKHVzZXJfaW5mbywgJmlycV9lbmFibGUsIGJ1ZiwgbmJ5 dGUpKSB7CisJCQluYnl0ZSA9IDA7CisKKyNpZmRlZiBERUJVRworCQkJcnRkbV9wcmludGsoCisJ CSJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogY2FuJ3QgY29weSBkYXRhIGZyb20gZHJpdmVyXG4i KTsKKyNlbmRpZiAvKiBERUJVRyAqLworCQl9IGVsc2UgeworCQkJaWYgKCgoKChzdHJ1Y3QgaW9f aW5mbyAqKWluZm8tPmRldmljZV9kYXRhKS0+CisJCQkgICAgIGlycV9lbmFibGUpICE9IGlycV9l bmFibGUpCisJCQkmJiAoKChzdHJ1Y3QgaW9faW5mbyAqKWluZm8tPmRldmljZV9kYXRhKS0+CisJ CQkJICAgIGlycV9yZWdpc3RlcmVkID09IFRSVUUpKSB7CisJCQkJCWlmIChpcnFfZW5hYmxlID09 IFRSVUUpIHsKKwkJCQkJCS8qIEVuYWJsZSBJUlEgKi8KKwkJCQkJCXJ0ZG1faXJxX2VuYWJsZQor CQkJCQkJICAgICgmCisJCQkJCQkgICAgICgoKHN0cnVjdCBpb19pbmZvICopaW5mby0+CisJCQkJ CQkgICAgICAgZGV2aWNlX2RhdGEpLT4KKwkJCQkJCSAgICAgIGlycV9oYW5kbGUpOworCQkJCQl9 IGVsc2UgeworCQkJCQkJLyogRGlzYWJsZSBJUlEgKi8KKwkJCQkJCXJ0ZG1faXJxX2Rpc2FibGUK KwkJCQkJCSAgICAoJgorCQkJCQkJICAgICAoKChzdHJ1Y3QgaW9faW5mbyAqKWluZm8tPgorCQkJ CQkJICAgICAgIGRldmljZV9kYXRhKS0+CisJCQkJCQkgICAgICBpcnFfaGFuZGxlKTsKKwkJCQkJ fQorCisJCQkJCSgoc3RydWN0IGlvX2luZm8gKilpbmZvLT5kZXZpY2VfZGF0YSktPgorCQkJCQkg ICAgaXJxX2VuYWJsZSA9IGlycV9lbmFibGU7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIGlm IChuYnl0ZSA9PSBzaXplb2Yoc3RydWN0IGlvX21hcF9tZW0pKSB7CisjZWxzZSAvKiBJUlFfU1VQ UE9SVCAqLworCWlmIChuYnl0ZSA9PSBzaXplb2Yoc3RydWN0IGlvX21hcF9tZW0pKSB7CisjZW5k aWYgLyogSVJRX1NVUFBPUlQgKi8KKwkJLyogQ29weSBkYXRhIGluZm9ybWF0aW9uIGZvciBLZXJu ZWwgKi8KKwkJaWYgKHJ0ZG1fc2FmZV9jb3B5X2Zyb21fdXNlcih1c2VyX2luZm8sICZtYXBfbWVt LCBidWYsIG5ieXRlKSkgeworCQkJbmJ5dGUgPSAwOworCisjaWZkZWYgREVCVUcKKwkJCXJ0ZG1f cHJpbnRrKAorCQkiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IGNhbid0IGNvcHkgZGF0YSBmcm9t IGRyaXZlclxuIik7CisjZW5kaWYgLyogREVCVUcgKi8KKwkJfSBlbHNlIHsKKwkJCWlmICgqbWFw X21lbS52aXJ0X2FkZHIgPT0gTlVMTCkgeworCQkJCS8qIE1hcCBwaHlzaWNhbCBvbiB2aXJ0dWFs IG1lbW9yeSAqLworCQkJCXJldCA9IHJ0ZG1faW9tYXBfdG9fdXNlcih1c2VyX2luZm8sCisJCQkJ CQkJIChwaHlzX2FkZHJfdCkgbWFwX21lbS4KKwkJCQkJCQkgcGh5c19hZGRyLAorCQkJCQkJCSAo c2l6ZV90KSBtYXBfbWVtLgorCQkJCQkJCSBsZW5ndGgsCisJCQkJCQkJIChQUk9UX1JFQUQgfAor CQkJCQkJCSAgUFJPVF9XUklURSksCisJCQkJCQkJIG1hcF9tZW0udmlydF9hZGRyLAorCQkJCQkJ CSBOVUxMLCBOVUxMKTsKKworCQkJCWlmIChyZXQgIT0gMCkgeworCQkJCQluYnl0ZSA9IDA7CisK KyNpZmRlZiBERUJVRworCQkJCQlzd2l0Y2ggKHJldCkgeworCQkJCQljYXNlIC1FSU5WQUw6CisJ CQkJCQlydGRtX3ByaW50aygKKyJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogYW4gaW52YWxpZCBz dGFydCBhZGRyZXNzLCBzaXplLCBvciBkZXN0aW5hdGlvbiBhZGRyZXNzIHdhcyBwYXNzZWRcbiIp OworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgLUVOT01FTToKKwkJCQkJCXJ0ZG1fcHJpbnRrKAor ImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgZnJlZSBtZW1v cnkgb3IgdGhlIGxpbWl0IG9mIG1lbW9yeSBtYXBwaW5nIGZvciB0aGUgdXNlciBwcm9jZXNzIHdh cyByZWFjaGVkXG4iKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIC1FQUdBSU46CisJCQkJCQly dGRtX3ByaW50aygKKyJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogdG9vIG11Y2ggbWVtb3J5IGhh cyBiZWVuIGFscmVhZHkgbG9ja2VkIGJ5IHRoZSB1c2VyIHByb2Nlc3NcbiIpOworCQkJCQkJYnJl YWs7CisJCQkJCWNhc2UgLUVQRVJNOgorCQkJCQkJcnRkbV9wcmludGsoCisJImNpZnggcnRkbSBk cml2ZXIgZXJyb3IgOiBhbiBpbGxlZ2FsIGludm9jYXRpb24gZW52aXJvbm1lbnQgaXMgZGV0ZWN0 ZWRcbiIpOworCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQlydGRtX3ByaW50aygK KwkJCSJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogcnRkbV9zYWZlX2NvcHlfZnJvbV91c2VyIGVy cm9yXG4iKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisjZW5kaWYgLyogREVCVUcgKi8KKwkJCQl9 CisJCQl9IGVsc2UgeworCQkJCS8qIFVuYXAgdmlydHVhbCBtZW1vcnkgKi8KKwkJCQlyZXQgPSBy dGRtX211bm1hcCh1c2VyX2luZm8sICptYXBfbWVtLnZpcnRfYWRkciwKKwkJCQkJCSAgKHNpemVf dCkgbWFwX21lbS5sZW5ndGgpOworCisJCQkJaWYgKHJldCAhPSAwKSB7CisJCQkJCW5ieXRlID0g MDsKKworI2lmZGVmIERFQlVHCisJCQkJCXN3aXRjaCAocmV0KSB7CisJCQkJCWNhc2UgLUVJTlZB TDoKKwkJCQkJCXJ0ZG1fcHJpbnRrKAorCQkiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IGFuIGlu dmFsaWQgYWRkcmVzcyBvciBzaXplIHdhcyBwYXNzZWRcbiIpOworCQkJCQkJYnJlYWs7CisJCQkJ CWNhc2UgLUVQRVJNOgorCQkJCQkJcnRkbV9wcmludGsoCisJImNpZnggcnRkbSBkcml2ZXIgZXJy b3IgOiBhbiBpbGxlZ2FsIGludm9jYXRpb24gZW52aXJvbm1lbnQgaXMgZGV0ZWN0ZWRcbiIpOwor CQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQlydGRtX3ByaW50aygKKwkJCSJjaWZ4 IHJ0ZG0gZHJpdmVyIGVycm9yIDogcnRkbV9zYWZlX2NvcHlfZnJvbV91c2VyIGVycm9yXG4iKTsK KwkJCQkJCWJyZWFrOworCQkJCQl9CisjZW5kaWYgLyogREVCVUcgKi8KKwkJCQl9CisJCQl9CisJ CX0KKwl9IGVsc2UgeworCQkvKiBFcnJvciBub3RoaW5nIHRvIGRvICovCisJCW5ieXRlID0gMDsK Kwl9CisKKwlyZXR1cm4gbmJ5dGU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQor ICogICBcYnJpZWYgIGNpZnhfcGNpX3Byb2JlCisgKgorICogICBccGFyYW0gIFtpbl0gICBkZXYK KyAqICAgXHBhcmFtICBbaW5dICAgaWQKKyAqCisgKiAgIFxyZXR1cm4gMCAoT0spIG9yIEVycm9y CisgKgorICogICBcbm90ZSAgT3BlbiB0aGUgZGV2aWNlLgorICoJCQlUaGlzIGZ1bmN0aW9uIGlz IGNhbGxlZCB3aGVuIHRoZSBkZXZpY2Ugc2hhbGwgYmUgb3BlbmVkLgorICovCisvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCitzdGF0aWMgaW50IGNpZnhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpk ZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgcnRkbV9kZXZp Y2UgKmluZm8gPSBOVUxMOworCXN0cnVjdCBpb19pbmZvX3QgKmRldmljZV9kYXRhID0gTlVMTDsK KwlpbnQzMl90IGJhcjsKKwlpbnQzMl90IHJldDsKKworCS8qIEFsbG9jYXRlIGRldmljZSBkcml2 ZXIgc3RydWN0dXJlICovCisJaW5mbyA9IHJ0ZG1fbWFsbG9jKHNpemVvZihzdHJ1Y3QgcnRkbV9k ZXZpY2UpKTsKKworCWlmIChpbmZvID09IE5VTEwpIHsKKyNpZmRlZiBERUJVRworCQlydGRtX3By aW50aygiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IHJ0ZG1fbWFsbG9jIGVycm9yXG4iKTsKKyNl bmRpZiAvKiBERUJVRyAqLworCisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldCA9IHBjaV9l bmFibGVfZGV2aWNlKGRldik7CisJaWYgKHJldCAhPSAwKSB7CisjaWZkZWYgREVCVUcKKwkJcnRk bV9wcmludGsoCisJCSJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogcGNpX2VuYWJsZV9kZXZpY2Ug ZXJyb3IgOiAlaVxuIiwKKwkJcmV0KTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisJCWdvdG8gb3V0 X2ZyZWU7CisJfQorCisJcmV0ID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhkZXYsIERSSVZFUl9OQU1F KTsKKwlpZiAocmV0ICE9IDApIHsKKyNpZmRlZiBERUJVRworCQlydGRtX3ByaW50aygKKwkJImNp ZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBwY2lfcmVxdWVzdF9yZWdpb25zIGVycm9yIDogJWlcbiIs CisJCXJldCk7CisjZW5kaWYgLyogREVCVUcgKi8KKworCQlnb3RvIG91dF9kaXNhYmxlOworCX0K KworCS8qIEluaXRpYWxpemUgc3RydWN0dXJlIHdpdGggZGVmYXVsdCB2YWx1ZXMgKi8KKwltZW1j cHkoaW5mbywgJmNpZnhfZGV2aWNlX3RtcGwsIHNpemVvZihzdHJ1Y3QgcnRkbV9kZXZpY2UpKTsK KworCWluZm8tPmRldmljZV9pZCA9IGlkLT5kZXZpY2U7CisJc25wcmludGYoKGNoYXIgKilpbmZv LT5kZXZpY2VfbmFtZSwgUlRETV9NQVhfREVWTkFNRV9MRU4sICJjaWZ4JWkiLAorCQkgY2lmeF9u dW0pOworCWluZm8tPnByb2NfbmFtZSA9IGluZm8tPmRldmljZV9uYW1lOworCisJc3dpdGNoIChp ZC0+ZGV2aWNlKSB7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFg6CisJCWJhciA9 IERQTV9CQVI7CisJCWluZm8tPnBlcmlwaGVyYWxfbmFtZSA9IENJRlhfUlRETV9DQVJEX05BTUU7 CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRQTEM6CisJCWJhciA9 IERQTV9CQVI7CisJCWluZm8tPnBlcmlwaGVyYWxfbmFtZSA9IENJRlhfUlRETV9ORVRQTENfQ0FS RF9OQU1FOworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUSkFDSzoK KwkJYmFyID0gRFBNX0JBUjsKKwkJaW5mby0+cGVyaXBoZXJhbF9uYW1lID0gQ0lGWF9SVERNX05F VEpBQ0tfQ0FSRF9OQU1FOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliYXIgPSBQTFhfRFBNX0JB UjsKKwkJaW5mby0+cGVyaXBoZXJhbF9uYW1lID0gQ0lGWF9SVERNX1BMWF9DQVJEX05BTUU7CisJ CWJyZWFrOworCX0KKworCWluZm8tPmRldmljZV9kYXRhID0gTlVMTDsKKworCS8qIEFsbG9jYXRl IHNwZWNpZmljIGRhdGEgc3RyY3V0dXJlIGZvciBkZXZpY2UgKi8KKwlkZXZpY2VfZGF0YSA9IHJ0 ZG1fbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW9faW5mbykpOworCisJaWYgKGRldmljZV9kYXRhID09 IE5VTEwpIHsKKyNpZmRlZiBERUJVRworCQlydGRtX3ByaW50aygiY2lmeCBydGRtIGRyaXZlciBl cnJvciA6IHJ0ZG1fbWFsbG9jIGVycm9yXG4iKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisJCWdv dG8gb3V0X3JlbGVhc2U7CisJfQorCisJbWVtc2V0KGRldmljZV9kYXRhLCAwLCBzaXplb2Yoc3Ry dWN0IGlvX2luZm8pKTsKKworCS8qIEJBUiAwIG9yIDIgcG9pbnRzIHRvIHRoZSBjYXJkJ3MgZHVh bCBwb3J0IG1lbW9yeSAqLworCSgoc3RydWN0IGlvX2luZm8gKilkZXZpY2VfZGF0YSktPm1lbVtE UE1fSU5ERVhdLmFkZHIgPQorCSAgICBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCBiYXIpOworCisJ aWYgKCgoc3RydWN0IGlvX2luZm8gKilkZXZpY2VfZGF0YSktPm1lbVtEUE1fSU5ERVhdLmFkZHIg PT0gMCkgeworI2lmZGVmIERFQlVHCisJCXJ0ZG1fcHJpbnRrCisJCSAgICAoImNpZnggcnRkbSBk cml2ZXIgZXJyb3IgOiBwY2lfcmVzb3VyY2Vfc3RhcnQgZXJyb3JcbiIpOworI2VuZGlmIC8qIERF QlVHICovCisKKwkJZ290byBvdXRfcmVsZWFzZTsKKwl9CisKKwkoKHN0cnVjdCBpb19pbmZvICop ZGV2aWNlX2RhdGEpLT5tZW1bRFBNX0lOREVYXS5pbnRlcm5hbF9hZGRyID0KKwkgICAgaW9yZW1h cF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIGJhciksCisJCQkgICAgcGNpX3Jlc291 cmNlX2xlbihkZXYsIGJhcikpOworCisJaWYgKCgoc3RydWN0IGlvX2luZm8gKilkZXZpY2VfZGF0 YSktPm1lbVtEUE1fSU5ERVhdLmludGVybmFsX2FkZHIKKwkJCQkJCQkJCT09IDApIHsKKyNpZmRl ZiBERUJVRworCQlydGRtX3ByaW50aygiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IGlvcmVtYXBf bm9jYWNoZSBlcnJvclxuIik7CisjZW5kaWYgLyogREVCVUcgKi8KKworCQlnb3RvIG91dF9yZWxl YXNlOworCX0KKworCWRldl9pbmZvKCZkZXYtPmRldiwgIkRQTSBhdCAlMDhsWFxuIiwKKwkJIChs b25nIHVuc2lnbmVkIGludCkoKHN0cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT4KKwkJIG1l bVtEUE1fSU5ERVhdLmFkZHIpOworCSgoc3RydWN0IGlvX2luZm8gKilkZXZpY2VfZGF0YSktPm1l bVtEUE1fSU5ERVhdLnNpemUgPQorCSAgICBwY2lfcmVzb3VyY2VfbGVuKGRldiwgYmFyKTsKKwko KHN0cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT5tZW1bRFBNX0lOREVYXS5tZW10eXBlID0g TUVNX1BIWVM7CisKKwkvKiBtYXAgZXh0ZW5kZWQgbWVtIChCQVIgMSBwb2ludHMgdG8gdGhlIGV4 dGVuZGVkIG1lbW9yeSkgKi8KKwkoKHN0cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT5tZW1b RVhUX01FTV9JTkRFWF0uYWRkciA9CisJICAgIHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIEVYVF9N RU1fQkFSKTsKKworCS8qIGV4dGVuZGVkIG1lbW9yeSBpcyBvcHRpb25hbCwgc28gZG9uJ3QgY2Fy ZSBpZiBpdCBpcyBub3QgcHJlc2VudCAqLworCWlmICgoKHN0cnVjdCBpb19pbmZvICopZGV2aWNl X2RhdGEpLT5tZW1bRVhUX01FTV9JTkRFWF0uYWRkciAhPSAwKSB7CisJCSgoc3RydWN0IGlvX2lu Zm8gKilkZXZpY2VfZGF0YSktPm1lbVtFWFRfTUVNX0lOREVYXS4KKwkJICAgIGludGVybmFsX2Fk ZHIgPQorCQkgICAgaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIEVYVF9N RU1fQkFSKSwKKwkJCQkgICAgcGNpX3Jlc291cmNlX2xlbihkZXYsIEVYVF9NRU1fQkFSKSk7CisK KwkJaWYgKCgoc3RydWN0IGlvX2luZm8gKilkZXZpY2VfZGF0YSktPm1lbVtFWFRfTUVNX0lOREVY XS4KKwkJICAgIGludGVybmFsX2FkZHIgPT0gMCkgeworI2lmZGVmIERFQlVHCisJCQlydGRtX3By aW50aygKKwkJCSJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogaW9yZW1hcF9ub2NhY2hlIGVycm9y XG4iKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisJCQlnb3RvIG91dF91bm1hcDsKKwkJfQorCisJ CWRldl9pbmZvKCZkZXYtPmRldiwgImV4dGVuZGVkIG1lbW9yeSBhdCAlMDhsWFxuIiwKKwkJCSAo bG9uZyB1bnNpZ25lZCBpbnQpKChzdHJ1Y3QgaW9faW5mbyAqKWRldmljZV9kYXRhKS0+CisJCQkg bWVtW0VYVF9NRU1fSU5ERVhdLmFkZHIpOworCQkoKHN0cnVjdCBpb19pbmZvICopZGV2aWNlX2Rh dGEpLT5tZW1bRVhUX01FTV9JTkRFWF0uc2l6ZSA9CisJCSAgICBwY2lfcmVzb3VyY2VfbGVuKGRl diwgRVhUX01FTV9CQVIpOworCQkoKHN0cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT5tZW1b RVhUX01FTV9JTkRFWF0ubWVtdHlwZSA9CisJCSAgICBNRU1fUEhZUzsKKwl9CisKKwlpZiAoKGlk LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRYKQorCSAgICB8fCAoaWQtPmRl dmljZSA9PSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFBMQykKKwkgICAgfHwgKGlkLT5kZXZp Y2UgPT0gUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRKQUNLKSkgeworCQkvKiBtYWtlIHN1cmUg YWxsIGludGVycnVwdHMgYXJlIGRpc2FibGVkICovCisJCWlvd3JpdGUzMigwLAorCQkJICAoKHN0 cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT5tZW1bRFBNX0lOREVYXS4KKwkJCSAgaW50ZXJu YWxfYWRkciArIERQTV9IT1NUX0lOVF9FTjApOworCQkoKHN0cnVjdCBpb19pbmZvICopZGV2aWNl X2RhdGEpLT5wcml2ID0gTlVMTDsKKwl9IGVsc2UgaWYgKGlkLT5zdWJkZXZpY2UgPT0gUENJX1NV QkRFVklDRV9JRF9OWFBDQSkgeworCQkvKiBtYXAgUExYIHJlZ2lzdGVycyAqLworCQlzdHJ1Y3Qg cHhhX2Rldl9pbmZvICpweGFfaW5mbyA9CisJCSAgICAoc3RydWN0IHB4YV9kZXZfaW5mbyAqKQor CQkgICAgcnRkbV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBweGFfZGV2X2luZm8pKTsKKworCQlpZiAo cHhhX2luZm8gPT0gTlVMTCkgeworI2lmZGVmIERFQlVHCisJCQlydGRtX3ByaW50aworCQkJICAg ICgiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IHJ0ZG1fbWFsbG9jIGVycm9yXG4iKTsKKyNlbmRp ZiAvKiBERUJVRyAqLworCisJCQlnb3RvIG91dF91bm1hcDsKKwkJfQorCisJCSgoc3RydWN0IGlv X2luZm8gKilkZXZpY2VfZGF0YSktPnByaXYgPSBweGFfaW5mbzsKKworCQkvKiBzZXQgUFhBIFBM WCBUaW1pbmdzICovCisJCXB4YV9pbmZvLT5wbHggPQorCQkgICAgaW9yZW1hcF9ub2NhY2hlKHBj aV9yZXNvdXJjZV9zdGFydChkZXYsIFBYQV9QTFhfQkFSKSwKKwkJCQkgICAgcGNpX3Jlc291cmNl X2xlbihkZXYsIFBYQV9QTFhfQkFSKSk7CisKKwkJaWYgKCFweGFfaW5mby0+cGx4KQorCQkJZ290 byBvdXRfdW5tYXA7CisJCWlmIChjaWZ4X3B4YV9nZXRfZHBtX21vZGUoaW5mbykpCisJCQlnb3Rv IG91dF91bm1hcF9wbHg7CisJCWlmIChjaWZ4X3B4YV9nZXRfcGx4X3RpbWluZyhpbmZvKSkKKwkJ CWdvdG8gb3V0X3VubWFwX3BseDsKKwkJaWYgKGNpZnhfcHhhX3NldF9wbHhfdGltaW5nKGluZm8p KQorCQkJZ290byBvdXRfdW5tYXBfcGx4OworCX0gZWxzZSB7CisJCXN0cnVjdCBweGFfZGV2X2lu Zm8gKnB4YV9pbmZvID0KKwkJICAgIChzdHJ1Y3QgcHhhX2Rldl9pbmZvICopCisJCSAgICBydGRt X21hbGxvYyhzaXplb2Yoc3RydWN0IHB4YV9kZXZfaW5mbykpOworCisJCWlmIChweGFfaW5mbyA9 PSBOVUxMKSB7CisjaWZkZWYgREVCVUcKKwkJCXJ0ZG1fcHJpbnRrCisJCQkgICAgKCJjaWZ4IHJ0 ZG0gZHJpdmVyIGVycm9yIDogcnRkbV9tYWxsb2MgZXJyb3JcbiIpOworI2VuZGlmIC8qIERFQlVH ICovCisKKwkJCWdvdG8gb3V0X2ZyZWVfcHhhOworCQl9CisKKwkJKChzdHJ1Y3QgcHhhX2Rldl9p bmZvICopcHhhX2luZm8pLT5wbHggPSBOVUxMOworCQkoKHN0cnVjdCBweGFfZGV2X2luZm8gKilw eGFfaW5mbyktPnBseF90aW1pbmcgPSAwOworCQkoKHN0cnVjdCBweGFfZGV2X2luZm8gKilweGFf aW5mbyktPmRwbV9tb2RlID0gMDsKKwkJKChzdHJ1Y3QgaW9faW5mbyAqKWRldmljZV9kYXRhKS0+ cHJpdiA9IHB4YV9pbmZvOworCX0KKworCS8qIEluaXRpYWxpemUgaXJxIGRhdGEgKi8KKwkoKHN0 cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT5pcnEgPSBkZXYtPmlycTsKKwkoKHN0cnVjdCBp b19pbmZvICopZGV2aWNlX2RhdGEpLT5pcnFfZW5hYmxlID0gRkFMU0U7CisJKChzdHJ1Y3QgaW9f aW5mbyAqKWRldmljZV9kYXRhKS0+aXJxX3JlZ2lzdGVyZWQgPSBGQUxTRTsKKworCWluZm8tPmRl dmljZV9kYXRhID0gZGV2aWNlX2RhdGE7CisKKwkvKiBSZWdpc3RlciBSVERNIGRldmljZSBkcml2 ZXIgKi8KKwlyZXQgPSBydGRtX2Rldl9yZWdpc3RlcihpbmZvKTsKKwlpZiAocmV0ICE9IDApIHsK KyNpZmRlZiBERUJVRworCQlzd2l0Y2ggKHJldCkgeworCQljYXNlIC1FSU5WQUw6CisJCQlydGRt X3ByaW50aygKKyJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogcnRkbV9kZXZfcmVnaXN0ZXIgZXJy b3IgOiB0aGUgZGV2aWNlIHN0cnVjdHVyZSBjb250YWlucyBpbnZhbGlkIGVudHJpZXMuIENoZWNr IGtlcm5lbCBsb2cgaW4gdGhpcyBjYXNlXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIC1FTk9NRU06 CisJCQlydGRtX3ByaW50aygKKyJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogcnRkbV9kZXZfcmVn aXN0ZXIgZXJyb3IgOiB0aGUgY29udGV4dCBmb3IgYW4gZXhjbHVzaXZlIGRldmljZSBjYW5ub3Qg YmUgYWxsb2NhdGVkXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIC1FRVhJU1Q6CisJCQlydGRtX3By aW50aygKKyJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogcnRkbV9kZXZfcmVnaXN0ZXIgZXJyb3Ig OiB0aGUgc3BlY2lmaWVkIGRldmljZSBuYW1lIG9mIHByb3RvY29sIElEIGlzIGFscmVhZHkgaW4g dXNlXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIC1FQUdBSU46CisJCQlydGRtX3ByaW50aygKKyJj aWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogcnRkbV9kZXZfcmVnaXN0ZXIgZXJyb3IgOiBzb21lIC9w cm9jIGVudHJ5IGNhbm5vdCBiZSBjcmVhdGVkXG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0Ogor CQkJcnRkbV9wcmludGsoCisiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IHJ0ZG1fZGV2X3JlZ2lz dGVyIGVycm9yXG4iKTsKKwkJCWJyZWFrOworCQl9CisjZW5kaWYgLyogREVCVUcgKi8KKworCQlp ZiAoaWQtPnN1YmRldmljZSAhPSBQQ0lfU1VCREVWSUNFX0lEX05YUENBKQorCQkJZ290byBvdXRf dW5tYXA7CisJCWVsc2UKKwkJCWdvdG8gb3V0X3VubWFwX3BseDsKKwl9CisKKwlwY2lfc2V0X2Ry dmRhdGEoZGV2LCBpbmZvKTsKKworCWlmIChpZC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSElM U0NIRVJfTkVUWCkKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAicmVnaXN0ZXJlZCBDaWZYIGNhcmRc biIpOworCWVsc2UgaWYgKGlkLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRQ TEMpCisJCWRldl9pbmZvKCZkZXYtPmRldiwgInJlZ2lzdGVyZWQgbmV0UExDIGNhcmRcbiIpOwor CWVsc2UgaWYgKGlkLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRKQUNLKQor CQlkZXZfaW5mbygmZGV2LT5kZXYsICJyZWdpc3RlcmVkIG5ldEpBQ0sgY2FyZFxuIik7CisJZWxz ZSBpZiAoaWQtPnN1YmRldmljZSA9PSBQQ0lfU1VCREVWSUNFX0lEX05YU0JfUENBKQorCQlkZXZf aW5mbygmZGV2LT5kZXYsICJyZWdpc3RlcmVkIE5YU0ItUENBIGFkYXB0ZXIgY2FyZFxuIik7CisJ ZWxzZSB7CisJCXN0cnVjdCBweGFfZGV2X2luZm8gKnB4YV9pbmZvID0KKwkJICAgIChzdHJ1Y3Qg cHhhX2Rldl9pbmZvICopKChzdHJ1Y3QgaW9faW5mbyAqKWluZm8tPgorCQkJCQkgICAgZGV2aWNl X2RhdGEpLT5wcml2OworCQlkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkgInJlZ2lzdGVyZWQgTlhQ Q0EtUENJIGFkYXB0ZXIgY2FyZCBpbiAlZCBiaXQgbW9kZVxuIiwKKwkJCSAoKHN0cnVjdCBweGFf ZGV2X2luZm8gKilweGFfaW5mbyktPmRwbV9tb2RlKTsKKwl9CisKKwljaWZ4X251bSsrOworCisJ cmV0dXJuIDA7CisKKyBvdXRfdW5tYXBfcGx4OgorCWlvdW5tYXAoKChzdHJ1Y3QgcHhhX2Rldl9p bmZvICopKCgoc3RydWN0IGlvX2luZm8gKilpbmZvLT5kZXZpY2VfZGF0YSktPgorCQkJCQkgcHJp dikpLT5wbHgpOworCisgb3V0X2ZyZWVfcHhhOgorCXJ0ZG1fZnJlZSgoKHN0cnVjdCBpb19pbmZv ICopaW5mby0+ZGV2aWNlX2RhdGEpLT5wcml2KTsKKworIG91dF91bm1hcDoKKwlpb3VubWFwKCgo c3RydWN0IGlvX2luZm8gKilpbmZvLT5kZXZpY2VfZGF0YSktPm1lbVtEUE1fSU5ERVhdLgorCQlp bnRlcm5hbF9hZGRyKTsKKwlpZiAoKChzdHJ1Y3QgaW9faW5mbyAqKWluZm8tPmRldmljZV9kYXRh KS0+bWVtW0VYVF9NRU1fSU5ERVhdLgorCSAgICBpbnRlcm5hbF9hZGRyICE9IDApCisJCWlvdW5t YXAoKChzdHJ1Y3QgaW9faW5mbyAqKWluZm8tPmRldmljZV9kYXRhKS0+CisJCQltZW1bRVhUX01F TV9JTkRFWF0uaW50ZXJuYWxfYWRkcik7CisKKyBvdXRfcmVsZWFzZToKKwlwY2lfcmVsZWFzZV9y ZWdpb25zKGRldik7CisKKyBvdXRfZGlzYWJsZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsK KworIG91dF9mcmVlOgorCWlmIChpbmZvLT5kZXZpY2VfZGF0YSAhPSBOVUxMKQorCQlydGRtX2Zy ZWUoaW5mby0+ZGV2aWNlX2RhdGEpOworCisJcnRkbV9mcmVlKGluZm8pOworCisJcmV0dXJuIC1F Tk9ERVY7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogICBcYnJpZWYgIGNp ZnhfcGNpX3JlbW92ZQorICoKKyAqICAgXHBhcmFtIFtpbl0gZGV2CisgKgorICogICBccmV0dXJu IE5vbmUKKyAqCisgKiAgIFxub3RlICAgQ2xvc2UgdGhlIGRldmljZS4KKyAqICAgVGhpcyBmdW5j dGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgZGV2aWNlIHNoYWxsIGJlIGNsb3NlZC4KKyAqLworLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgY2lmeF9wY2lfcmVtb3ZlKHN0cnVjdCBw Y2lfZGV2ICpkZXYpCit7CisJc3RydWN0IHJ0ZG1fZGV2aWNlICppbmZvID0gcGNpX2dldF9kcnZk YXRhKGRldik7CisJc3RydWN0IGlvX2luZm8gKmRldmljZV9kYXRhID0gKHN0cnVjdCBpb19pbmZv ICopaW5mby0+ZGV2aWNlX2RhdGE7CisJc3RydWN0IHB4YV9kZXZfaW5mbyAqcHhhX2luZm8gPQor CSAgICAoc3RydWN0IHB4YV9kZXZfaW5mbyAqKWRldmljZV9kYXRhLT5wcml2OworCWludDMyX3Qg cmV0OworCisJaWYgKGluZm8tPmRldmljZV9kYXRhID09IE5VTEwpIHsKKyNpZmRlZiBERUJVRwor CQlydGRtX3ByaW50aworCQkgICAgKCJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogZGV2aWNlX2Rh dGEgTlVMTCBwb2ludGVyXG4iKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCQlyZXR1cm47CisJfQor CisJaWYgKHB4YV9pbmZvICE9IE5VTEwpIHsKKwkJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAq LworCQlpb3dyaXRlMzIoMCwKKwkJCSAgKChzdHJ1Y3QgaW9faW5mbyAqKWRldmljZV9kYXRhKS0+ bWVtW0RQTV9JTkRFWF0uCisJCQkgIGludGVybmFsX2FkZHIgKyBEUE1fSE9TVF9JTlRfRU4wKTsK KworCQlpZiAocHhhX2luZm8tPnBseCAhPSBOVUxMKQorCQkJaW91bm1hcCgodm9pZCAqKXB4YV9p bmZvLT5wbHgpOworCisJCXJ0ZG1fZnJlZSgodm9pZCAqKXB4YV9pbmZvKTsKKwl9CisKKwkvKiBV bnJlZ2lzdGVyIFJURE0gZGV2aWNlIGRyaXZlciAqLworCXJldCA9IHJ0ZG1fZGV2X3VucmVnaXN0 ZXIoaW5mbywgMTAwMCk7CisJaWYgKHJldCAhPSAwKSB7CisjaWZkZWYgREVCVUcKKwkJc3dpdGNo IChyZXQpIHsKKwkJY2FzZSAtRU5PREVWOgorCQkJcnRkbV9wcmludGsoCisiY2lmeCBydGRtIGRy aXZlciBlcnJvciA6IHJ0ZG1fZGV2X3VucmVnaXN0ZXIgZXJyb3IgOiB0aGUgZGV2aWNlIHdhcyBu b3QgcmVnaXN0ZXJlZFxuIik7CisJCQlicmVhazsKKwkJY2FzZSAtRUFHQUlOOgorCQkJcnRkbV9w cmludGsoCisiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IHJ0ZG1fZGV2X3VucmVnaXN0ZXIgZXJy b3IgOiB0aGUgZGV2aWNlIGlzIGJ1c3kgd2l0aCBvcGVuIGluc3RhbmNlcyBhbmQgMCBoYXMgYmVl biBwYXNzZWQgZm9yIHBvbGxfZGVsYXlcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQly dGRtX3ByaW50aygKKyJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogcnRkbV9kZXZfdW5yZWdpc3Rl ciBlcnJvclxuIik7CisJCQlicmVhazsKKwkJfQorI2VuZGlmIC8qIERFQlVHICovCisKKwkJcmV0 dXJuOworCX0KKworCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZp Y2UoZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKworCWlvdW5tYXAoKChzdHJ1 Y3QgaW9faW5mbyAqKWRldmljZV9kYXRhKS0+bWVtW0RQTV9JTkRFWF0uaW50ZXJuYWxfYWRkcik7 CisJaWYgKCgoc3RydWN0IGlvX2luZm8gKilkZXZpY2VfZGF0YSktPm1lbVtFWFRfTUVNX0lOREVY XS5pbnRlcm5hbF9hZGRyICE9CisJICAgIDApCisJCWlvdW5tYXAoKChzdHJ1Y3QgaW9faW5mbyAq KWRldmljZV9kYXRhKS0+bWVtW0VYVF9NRU1fSU5ERVhdLgorCQkJaW50ZXJuYWxfYWRkcik7CisK KwkvKiBSZWxlYXNlIHN0cnVjdHVyZSBtZW1vcnkgYWxsb2NhdGlvbiAqLworCXJ0ZG1fZnJlZShp bmZvLT5kZXZpY2VfZGF0YSk7CisJcnRkbV9mcmVlKGluZm8pOworCisJaWYgKGNpZnhfbnVtID4g MCkKKwkJY2lmeF9udW0tLTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKiAg IFxicmllZiAgY2lmeF9wY2lfaW5pdAorICoKKyAqICAgXHJldHVybiBOb25lCisgKgorICogICBc bm90ZSAgIEl0IHNpbXBseSByZWdpc3RlcnMgdGhlIFJURE0gZGV2aWNlLgorICogICBUaGlzIGZ1 bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkLgorICovCisvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCitzdGF0aWMgaW50IF9faW5pdCBjaWZ4X3BjaV9pbml0KHZvaWQpCit7 CisJY2lmeF9udW0gPSAwOworCisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmNpZnhfcGNp X2RyaXZlcik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogICBcYnJpZWYg IGNpZnhfcGNpX2V4aXQKKyAqCisgKiAgIFxyZXR1cm4gTm9uZQorICoKKyAqICAgXG5vdGUgIEl0 IHVucmVnaXN0ZXIgdGhlIFJURE0gZGV2aWNlLgorICogICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl ZCB3aGVuIHRoZSBtb2R1bGUgaXMgdW5sb2FkZWQuCisgKi8KKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KK3N0YXRpYyB2b2lkIF9fZXhpdCBjaWZ4X3BjaV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVn aXN0ZXJfZHJpdmVyKCZjaWZ4X3BjaV9kcml2ZXIpOworfQorCisvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisvKiEgXH0gICAgIGNpZnhfcGNpX0NvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK21v ZHVsZV9pbml0KGNpZnhfcGNpX2luaXQpOworbW9kdWxlX2V4aXQoY2lmeF9wY2lfZXhpdCk7CisK Ky8qIEVuZCBvZiBmaWxlIDogY2lmeF9wY2kuYyAqLwpkaWZmIC0tZ2l0IGEva3NyYy9kcml2ZXJz L2NpZngvY2lmeF9wY2kuY34gYi9rc3JjL2RyaXZlcnMvY2lmeC9jaWZ4X3BjaS5jfgpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjNmZmVhCi0tLSAvZGV2L251bGwKKysrIGIv a3NyYy9kcml2ZXJzL2NpZngvY2lmeF9wY2kuY34KQEAgLTAsMCArMSwxMTkwIEBACisvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisgKiAgIENvcHlyaWdodCAoQykgMjAxMyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIEhpbHNjaGVyIEZyYW5jZSAo SlApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisg KiAgIGh0dHA6Ly93d3cuaGlsc2NoZXIuZnIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 ICAqCisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAgIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiAg IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mICAgICAgICAqCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiAgIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAq CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiAgIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAg ICAgICAqCisgKiAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRl IDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEluY2x1ZGVzICov CisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K KyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVk ZSA8bGludXgvbW1hbi5oPgorCisjaW5jbHVkZSA8cnRkbS9ydGRtX2RyaXZlci5oPgorCisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVND UklQVElPTigiUlRETSBib2FyZCBkcml2ZXIgZm9yIENpZlggY2FyZHMiKTsKK01PRFVMRV9BVVRI T1IoIkhpbHNjaGVyIEZyYW5jZSAoSlApIDx3d3cuaGlsc2NoZXIuZnI+Iik7CisKKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKy8qIQorICogICBcYWRkdG9ncm91cCBjaWZ4X3BjaV9Db3JlCisgKiAg IEB7CisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogI2RlZmluZSAqLworCisjaWZu ZGVmIFRSVUUKKyNkZWZpbmUgVFJVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZW5k aWYJCQkJLyogVFJVRSAqLworCisjaWZuZGVmIEZBTFNFCisjZGVmaW5lIEZBTFNFICAgICAgICAg ICAgICAgICAgICAgICAgICAgMAorI2VuZGlmCQkJCS8qIFRSVUUgKi8KKworI2lmbmRlZiBQQ0lf VkVORE9SX0lEX0hJTFNDSEVSCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSElMU0NIRVIgICAgICAg ICAgMHgxNUNGCisjZW5kaWYJCQkJLyogUENJX1ZFTkRPUl9JRF9ISUxTQ0hFUiAqLworCisjaWZu ZGVmIFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUWAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hJ TFNDSEVSX05FVFggICAgIDB4MDAwMAorI2VuZGlmCQkJCS8qIFBDSV9ERVZJQ0VfSURfSElMU0NI RVJfTkVUWCAqLworCisjaWZuZGVmIFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExDCisjZGVm aW5lIFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExDICAgMHgwMDEwCisjZW5kaWYJCQkJLyog UENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRQTEMgKi8KKworI2lmbmRlZiBQQ0lfREVWSUNFX0lE X0hJTFNDSEVSX05FVEpBQ0sKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRKQUNL ICAweDAwMjAKKyNlbmRpZgkJCQkvKiBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVEpBQ0sgKi8K KworI2lmbmRlZiBQQ0lfU1VCREVWSUNFX0lEX05YU0JfUENBCisjZGVmaW5lIFBDSV9TVUJERVZJ Q0VfSURfTlhTQl9QQ0EgICAgICAgMHgzMjM1CisjZW5kaWYJCQkJLyogUENJX1NVQkRFVklDRV9J RF9OWFNCX1BDQSAqLworCisjaWZuZGVmIFBDSV9TVUJERVZJQ0VfSURfTlhQQ0EKKyNkZWZpbmUg UENJX1NVQkRFVklDRV9JRF9OWFBDQSAgICAgICAgICAweDMzMzUKKyNlbmRpZgkJCQkvKiBQQ0lf U1VCREVWSUNFX0lEX05YUENBICovCisKKyNpZm5kZWYgUENJX1NVQkRFVklDRV9JRF9ORVRQTENf UkFNCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfTkVUUExDX1JBTSAgICAgMHgwMDAwCisjZW5k aWYJCQkJLyogUENJX1NVQkRFVklDRV9JRF9ORVRQTENfUkFNICovCisKKyNpZm5kZWYgUENJX1NV QkRFVklDRV9JRF9ORVRQTENfRkxBU0gKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9ORVRQTENf RkxBU0ggICAweDAwMDEKKyNlbmRpZgkJCQkvKiBQQ0lfU1VCREVWSUNFX0lEX05FVFBMQ19GTEFT SCAqLworCisjaWZuZGVmIFBDSV9TVUJERVZJQ0VfSURfTkVUSkFDS19SQU0KKyNkZWZpbmUgUENJ X1NVQkRFVklDRV9JRF9ORVRKQUNLX1JBTSAgICAweDAwMDAKKyNlbmRpZgkJCQkvKiBQQ0lfU1VC REVWSUNFX0lEX05FVEpBQ0tfUkFNICovCisKKyNpZm5kZWYgUENJX1NVQkRFVklDRV9JRF9ORVRK QUNLX0ZMQVNICisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfTkVUSkFDS19GTEFTSCAgMHgwMDAx CisjZW5kaWYJCQkJLyogUENJX1NVQkRFVklDRV9JRF9ORVRKQUNLX0ZMQVNIICovCisKKyNkZWZp bmUgRFBNX0hPU1RfSU5UX0VOMCAgICAgICAgICAgICAgICAweGZmZjAKKyNkZWZpbmUgRFBNX0hP U1RfSU5UX1NUQVQwICAgICAgICAgICAgICAweGZmZTAKKyNkZWZpbmUgUExYX0dQSU9fT0ZGU0VU ICAgICAgICAgICAgICAgICAweDE1CisjZGVmaW5lIFBMWF9USU1JTkdfT0ZGU0VUICAgICAgICAg ICAgICAgMHgwYQorCisjZGVmaW5lIERQTV9IT1NUX0lOVF9NQVNLICAgICAgICAgICAgICAgMHhl NjAwZmZmZgorI2RlZmluZSBEUE1fSE9TVF9JTlRfR0xPQkFMX0VOICAgICAgICAgIDB4ODAwMDAw MDAKKyNkZWZpbmUgUExYX0dQSU9fREFUQTBfTUFTSyAgICAgICAgICAgICAweDAwMDAwMDA0Cisj ZGVmaW5lIFBMWF9HUElPX0RBVEExX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisjZGVm aW5lIE5YX1BDQV9QQ0lfOF9CSVRfRFBNX01PREUgICAgICAgMHg1NDMxRjk2MgorI2RlZmluZSBO WF9QQ0FfUENJXzE2X0JJVF9EUE1fTU9ERSAgICAgIDB4NDA3M0Y4RTIKKyNkZWZpbmUgTlhfUENB X1BDSV8zMl9CSVRfRFBNX01PREUgICAgICAweDQwODI0MTIyCisKKy8qIE51bWJlciBvZiBiYXIg Ki8KKy8qIHBvaW50cyB0byB0aGUgRFBNIC0+IG5ldFgsIG5ldFBMQywgbmV0SkFDSyAqLworI2Rl ZmluZSBEUE1fQkFSICAgICAgICAgICAgICAgICAgICAgICAgIDAKKy8qIHBvaW50cyB0byB0aGUg b3B0aW9uYWwgZXh0ZW5kZWQgbWVtb3J5ICAgICAqLworI2RlZmluZSBFWFRfTUVNX0JBUiAgICAg ICAgICAgICAgICAgICAgIDEKKy8qIHBvaW50cyB0byB0aGUgRFBNIC0+IG5ldFhQTFggICAgICAg ICAgICAgICAqLworI2RlZmluZSBQTFhfRFBNX0JBUiAgICAgICAgICAgICAgICAgICAgIDIKKy8q IHRpbWluZyBjb25maWcgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQ WEFfUExYX0JBUiAgICAgICAgICAgICAgICAgICAgIDAKKworLyogSW5kZXggb2YgaW9faW5mbyBz dHJ1Y3R1cmUncyBtZW1vcnkgYXJyYXkgKi8KKy8qIGZpcnN0IG1hcHBpbmcgZGVzY3JpYmVzIERQ TSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFBNX0lOREVYICAgICAgICAgICAgICAgICAgICAg ICAwCisvKiBzZWNvbmQgbWFwcGluZyBkZXNjcmliZXMgZXh0ZW5kZWQgbWVtb3J5ICovCisjZGVm aW5lIEVYVF9NRU1fSU5ERVggICAgICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIE1BWF9NQVBT ICAgICAgICAgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIE1FTV9QSFlTICAgICAgICAgICAg ICAgICAgICAgICAgMQorCisjZGVmaW5lIERSSVZFUl9OQU1FICAgICAgICAgICAgICAgICAgICAg InJ0ZG1fY2lmeCIKKyNkZWZpbmUgUEVSSVBIRVJBTF9OQU1FICAgICAgICAgICAgICAgICAiY2lm eCIKKyNkZWZpbmUgUFJPVklERVJfTkFNRSAgICAgICAgICAgICAgICAgICAiSGlsc2NoZXIiCisK Ky8qIG5hbWUgb2YgYSBOWFNCLVBDQSBvciBOWFBDQS1QQ0kgY2FyZCAqLworI2RlZmluZSBDSUZY X1JURE1fUExYX0NBUkRfTkFNRSAgICAgICAgICJuZXR4X3BseCIKKy8qIG5hbWUgb2YgYSBjaWZY IFBDSSBjYXJkICAgICAgICAgICAgICAqLworI2RlZmluZSBDSUZYX1JURE1fQ0FSRF9OQU1FICAg ICAgICAgICAgICJuZXR4IgorLyogbmFtZSBvZiBhIG5ldFBMQyBQQ0kgY2FyZCAgICAgICAgICAg ICovCisjZGVmaW5lIENJRlhfUlRETV9ORVRQTENfQ0FSRF9OQU1FICAgICAgIm5ldHBsYyIKKy8q IG5hbWUgb2YgYSBuZXRKQUNLIFBDSSBjYXJkICAgICAgICAgICAqLworI2RlZmluZSBDSUZYX1JU RE1fTkVUSkFDS19DQVJEX05BTUUgICAgICJuZXRqYWNrIgorCisvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisKKy8qIHN0cnVjdHVyZSAqLworCitzdHJ1Y3QgcHhhX2Rldl9pbmZvIHsKKwl1aW50MzJf dCBfX2lvbWVtICpwbHg7CisJdWludDhfdCBkcG1fbW9kZTsKKwl1aW50MzJfdCBwbHhfdGltaW5n OworfTsKKworc3RydWN0IGlvX21lbSB7CisJdWludDMyX3QgYWRkcjsKKwl1aW50MzJfdCBzaXpl OworCWludDMyX3QgbWVtdHlwZTsKKwl2b2lkIF9faW9tZW0gKmludGVybmFsX2FkZHI7Cit9Owor CitzdHJ1Y3QgaW9faW5mbyB7CisJc3RydWN0IGlvX21lbSBtZW1bTUFYX01BUFNdOworCWludDMy X3QgaXJxOworCXVpbnQ4X3QgaXJxX2VuYWJsZTsKKwl1aW50OF90IGlycV9yZWdpc3RlcmVkOwor CXJ0ZG1faXJxX3QgaXJxX2hhbmRsZTsKKwl2b2lkICpwcml2OworfTsKKworc3RydWN0IGlvX21h cF9tZW0geworCXVpbnQzMl90IHBoeXNfYWRkcjsKKwl2b2lkICoqdmlydF9hZGRyOworCXVpbnQz Ml90IGxlbmd0aDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUHJvdG90eXBl cyAqLworCisjaWZkZWYgSVJRX1NVUFBPUlQKK3N0YXRpYyBpbnQgY2lmeF9oYW5kbGVyKHJ0ZG1f aXJxX3QgKmlycSk7CisjZW5kaWYgLyogSVJRX1NVUFBPUlQgKi8KK3N0YXRpYyBpbnQgY2lmeF9w eGFfc2V0X3BseF90aW1pbmcoc3RydWN0IHJ0ZG1fZGV2aWNlICppbmZvKTsKK3N0YXRpYyBpbnQg Y2lmeF9weGFfZ2V0X3BseF90aW1pbmcoc3RydWN0IHJ0ZG1fZGV2aWNlICppbmZvKTsKK3N0YXRp YyBpbnQgY2lmeF9weGFfZ2V0X2RwbV9tb2RlKHN0cnVjdCBydGRtX2RldmljZSAqaW5mbyk7CisK K3N0YXRpYyBpbnQgY2lmeF9wY2lfb3BlbihzdHJ1Y3QgcnRkbV9kZXZfY29udGV4dCAqY29udGV4 dCwKKwkJCSBydGRtX3VzZXJfaW5mb190ICp1c2VyX2luZm8sIGludCBvZmxhZ3MpOworc3RhdGlj IGludCBjaWZ4X3BjaV9jbG9zZShzdHJ1Y3QgcnRkbV9kZXZfY29udGV4dCAqY29udGV4dCwKKwkJ CSAgcnRkbV91c2VyX2luZm9fdCAqdXNlcl9pbmZvKTsKK3N0YXRpYyBzc2l6ZV90IGNpZnhfcGNp X3JlYWQoc3RydWN0IHJ0ZG1fZGV2X2NvbnRleHQgKmNvbnRleHQsCisJCQkgICAgIHJ0ZG1fdXNl cl9pbmZvX3QgKnVzZXJfaW5mbywgdm9pZCAqYnVmLAorCQkJICAgICBzaXplX3QgbmJ5dGUpOwor c3RhdGljIHNzaXplX3QgY2lmeF9wY2lfd3JpdGUoc3RydWN0IHJ0ZG1fZGV2X2NvbnRleHQgKmNv bnRleHQsCisJCQkgICAgICBydGRtX3VzZXJfaW5mb190ICp1c2VyX2luZm8sIGNvbnN0IHZvaWQg KmJ1ZiwKKwkJCSAgICAgIHNpemVfdCBuYnl0ZSk7CisKK3N0YXRpYyBpbnQgY2lmeF9wY2lfcHJv YmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKTsK K3N0YXRpYyB2b2lkIGNpZnhfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKworLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworCisvKiBMb2NhbCB2YXJpYWJsZXMgKi8KKworLyoqIE51bWJl ciBvciBjaWZ4IGZvdW5kIGFuZCBvcGVuICovCitzdGF0aWMgaW50MzJfdCBjaWZ4X251bTsKKwor LyoqIFJURE0gRGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLworc3RhdGljIGNvbnN0IHN0 cnVjdCBydGRtX2RldmljZSBfX2luaXRkYXRhIGNpZnhfZGV2aWNlX3RtcGwgPSB7CisJLnN0cnVj dF92ZXJzaW9uID0gUlRETV9ERVZJQ0VfU1RSVUNUX1ZFUiwKKworCS5kZXZpY2VfZmxhZ3MgPSBS VERNX05BTUVEX0RFVklDRSwKKwkuY29udGV4dF9zaXplID0gMCwKKwkuZGV2aWNlX25hbWUgPSAi IiwKKworCS5vcGVuX25ydCA9IGNpZnhfcGNpX29wZW4sCisKKwkub3BzID0geworCQkuY2xvc2Vf bnJ0ID0gY2lmeF9wY2lfY2xvc2UsCisKKwkJLnJlYWRfbnJ0ID0gY2lmeF9wY2lfcmVhZCwKKwkJ LndyaXRlX25ydCA9IGNpZnhfcGNpX3dyaXRlLAorCisJCS5pb2N0bF9ydCA9IE5VTEwsCisJCS5p b2N0bF9ucnQgPSBOVUxMLAorCisJCS5yZWFkX3J0ID0gTlVMTCwKKwkJLndyaXRlX3J0ID0gTlVM TCwKKwkJfSwKKworCS5kZXZpY2VfY2xhc3MgPSBSVERNX0NMQVNTX0VYUEVSSU1FTlRBTCwKKwku ZGV2aWNlX3N1Yl9jbGFzcyA9IFJURE1fU1VCQ0xBU1NfR0VORVJJQywKKwkucHJvZmlsZV92ZXJz aW9uID0gMSwKKwkuZHJpdmVyX25hbWUgPSBEUklWRVJfTkFNRSwKKwkuZHJpdmVyX3ZlcnNpb24g PSBSVERNX0RSSVZFUl9WRVIoMSwgMCwgMCksCisJLnByb3ZpZGVyX25hbWUgPSBQUk9WSURFUl9O QU1FLAorfTsKKworLyoqIERldmljZSB0YWJsZSAqLworc3RhdGljIERFRklORV9QQ0lfREVWSUNF X1RBQkxFKGNpZnhfcGNpX3RibCkgPSB7CisJeworCQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9I SUxTQ0hFUiwKKwkJLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUWCwKKwkJLnN1 YnZlbmRvciA9IDAsCisJCS5zdWJkZXZpY2UgPSAwLAorCX0sCisJeworCQkudmVuZG9yID0gUENJ X1ZFTkRPUl9JRF9QTFgsCisJCS5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX1BMWF85MDMwLAorCQku c3VidmVuZG9yID0gUENJX1ZFTkRPUl9JRF9QTFgsCisJCS5zdWJkZXZpY2UgPSBQQ0lfU1VCREVW SUNFX0lEX05YU0JfUENBLAorCX0sCisJeworCQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9QTFgs CisJCS5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX1BMWF85MDMwLAorCQkuc3VidmVuZG9yID0gUENJ X1ZFTkRPUl9JRF9QTFgsCisJCS5zdWJkZXZpY2UgPSBQQ0lfU1VCREVWSUNFX0lEX05YUENBLAor CX0sCisJeworCQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9ISUxTQ0hFUiwKKwkJLmRldmljZSA9 IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExDLAorCQkuc3VidmVuZG9yID0gUENJX1ZFTkRP Ul9JRF9ISUxTQ0hFUiwKKwkJLnN1YmRldmljZSA9IFBDSV9TVUJERVZJQ0VfSURfTkVUUExDX1JB TSwKKwl9LAorCXsKKwkJLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSElMU0NIRVIsCisJCS5kZXZp Y2UgPSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFBMQywKKwkJLnN1YnZlbmRvciA9IFBDSV9W RU5ET1JfSURfSElMU0NIRVIsCisJCS5zdWJkZXZpY2UgPSBQQ0lfU1VCREVWSUNFX0lEX05FVFBM Q19GTEFTSCwKKwl9LAorCXsKKwkJLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSElMU0NIRVIsCisJ CS5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVEpBQ0ssCisJCS5zdWJ2ZW5kb3Ig PSBQQ0lfVkVORE9SX0lEX0hJTFNDSEVSLAorCQkuc3ViZGV2aWNlID0gUENJX1NVQkRFVklDRV9J RF9ORVRKQUNLX1JBTSwKKwl9LAorCXsKKwkJLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSElMU0NI RVIsCisJCS5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVEpBQ0ssCisJCS5zdWJ2 ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0hJTFNDSEVSLAorCQkuc3ViZGV2aWNlID0gUENJX1NVQkRF VklDRV9JRF9ORVRKQUNLX0ZMQVNILAorCX0sCisJeyAwLH0KK307CisKKy8qKiBSVERNIGNpZlgg RHJpdmVyICovCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY2lmeF9wY2lfZHJpdmVyID0gewor CS5uYW1lID0gImNpZngiLAorCS5pZF90YWJsZSA9IGNpZnhfcGNpX3RibCwKKwkucHJvYmUgPSBj aWZ4X3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gY2lmeF9wY2lfcmVtb3ZlLAorfTsKKworLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworCisjaWZkZWYgSVJRX1NVUFBPUlQKKworLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworLyohCisgKiAgIFxicmllZiAgY2lmeF9oYW5kbGVyCisgKgorICogICBccGFyYW0g IFtpbl0JaXJxICAgICAgIFJlc291cmNlIHRhc2sgcG9pbnRlcgorICoKKyAqICAgXHJldHVybiBS VERNX0lSUV9OT05FIG9yIFJURE1fSVJRX0hBTkRMRUQKKyAqCisgKiAgIFxub3RlICAgY2lmeCBp bnRlcnJ1cHQgaGFuZGxlcgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5s aW5lIGludCBjaWZ4X2hhbmRsZXIocnRkbV9pcnFfdCAqaXJxKQoreworCXN0cnVjdCBydGRtX2Rl dmljZSAqaW5mbyA9CisJICAgIChzdHJ1Y3QgcnRkbV9kZXZpY2UgKilydGRtX2lycV9nZXRfYXJn KGlycSwgdm9pZCk7CisJc3RydWN0IGlvX2luZm9fdCAqZGV2aWNlX2RhdGEgPSAoc3RydWN0IGlv X2luZm9fdCAqKWluZm8tPmRldmljZV9kYXRhOworCisJLyogVGVzdCBpZiByZXF1ZXN0IGlzIGZv ciB0aGlzIGRyaXZlciAqLworCWlmICgoZGV2aWNlX2RhdGEtPnByaXYgIT0gTlVMTCkKKwkgICAg fHwgKGRldmljZV9kYXRhLT5pcnFfcmVnaXN0ZXJlZCA9PSBGQUxTRSkKKwkgICAgfHwgKGRldmlj ZV9kYXRhLT5pcnFfZW5hYmxlID09IEZBTFNFKSkgeworCQkvKiBUaGlzIGlzIGEgUExYIGRldmlj ZSBhbmQgY2Fubm90IHByb2R1Y2UgYW4gSVJRLAorCQkgICBJUlEgbm90IHJlZ2lzdHJlZCBvciBu b3QgZW5hYmxlIChjYW5ub3QgcHJvZHVjZSBhbiBJUlEpICovCisJCXJldHVybiBSVERNX0lSUV9O T05FOworCX0gZWxzZSB7CisJCXZvaWQgX19pb21lbSAqaW50X2VuYWJsZV9yZWcgPQorCQkgICAg ZGV2aWNlX2RhdGEtPm1lbVtEUE1fSU5ERVhdLmludGVybmFsX2FkZHIgKworCQkgICAgRFBNX0hP U1RfSU5UX0VOMDsKKwkJdm9pZCBfX2lvbWVtICppbnRfc3RhdHVzX3JlZyA9CisJCSAgICBkZXZp Y2VfZGF0YS0+bWVtW0RQTV9JTkRFWF0uaW50ZXJuYWxfYWRkciArCisJCSAgICBEUE1fSE9TVF9J TlRfU1RBVDA7CisKKwkJLyogSXMgb25lIG9mIG91ciBpbnRlcnJ1cHRzIGVuYWJsZWQgYW5kIGFj dGl2ZSA/ICovCisJCWlmICghKGlvcmVhZDMyKGludF9lbmFibGVfcmVnKSAmIGlvcmVhZDMyKGlu dF9zdGF0dXNfcmVnKQorCQkgICAgICAmIERQTV9IT1NUX0lOVF9NQVNLKSkKKwkJCXJldHVybiBS VERNX0lSUV9OT05FOworCisJCS8qIERpc2FibGUgaW50ZXJydXB0ICovCisJCWlvd3JpdGUzMihp b3JlYWQzMihpbnRfZW5hYmxlX3JlZykKKwkJCSAgJiB+RFBNX0hPU1RfSU5UX0dMT0JBTF9FTiwg aW50X2VuYWJsZV9yZWcpOworCisJCXJldHVybiBSVERNX0lSUV9IQU5ETEVEOworCX0KK30KKwor I2VuZGlmIC8qIElSUV9TVVBQT1JUICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQor ICogICBcYnJpZWYgIGNpZnhfcHhhX3NldF9wbHhfdGltaW5nCisgKgorICogICBccGFyYW0JW2lu XQlpbmZvCWNpZnggcnRkbSBkZXZpY2UgaW5mb3JtYXRpb24KKyAqCisgKiAgIFxyZXR1cm4gMCAo T0spIG9yIEVycm9yCisgKgorICogICBcbm90ZSAgIFNldCBwbHggdGltaW5nCisgKi8KKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgY2lmeF9weGFfc2V0X3BseF90aW1pbmcoc3Ry dWN0IHJ0ZG1fZGV2aWNlICppbmZvKQoreworCXN0cnVjdCBweGFfZGV2X2luZm8gKnB4YV9pbmZv ID0KKwkgICAgKHN0cnVjdCBweGFfZGV2X2luZm8gKikoKHN0cnVjdCBpb19pbmZvICopaW5mby0+ ZGV2aWNlX2RhdGEpLT5wcml2OworCXVpbnQzMl90IF9faW9tZW0gKnBseF90aW1pbmc7CisKKwlp ZiAoIXB4YV9pbmZvKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBseF90aW1pbmcgPSBweGFfaW5m by0+cGx4ICsgUExYX1RJTUlOR19PRkZTRVQ7CisJKnBseF90aW1pbmcgPSBweGFfaW5mby0+cGx4 X3RpbWluZzsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEK KyAqICAgXGJyaWVmICBjaWZ4X3B4YV9nZXRfcGx4X3RpbWluZworICoKKyAqICAgXHBhcmFtCVtp bl0JaW5mbwljaWZ4IHJ0ZG0gZGV2aWNlIGluZm9ybWF0aW9uCisgKgorICogICBccmV0dXJuIDAg KE9LKSBvciBFcnJvcgorICoKKyAqICAgXG5vdGUgICBHZXQgcGx4IHRpbWluZworICovCisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGNpZnhfcHhhX2dldF9wbHhfdGltaW5nKHN0 cnVjdCBydGRtX2RldmljZSAqaW5mbykKK3sKKwlzdHJ1Y3QgcHhhX2Rldl9pbmZvICpweGFfaW5m byA9CisJICAgIChzdHJ1Y3QgcHhhX2Rldl9pbmZvICopKChzdHJ1Y3QgaW9faW5mbyAqKWluZm8t PmRldmljZV9kYXRhKS0+cHJpdjsKKworCWlmICghcHhhX2luZm8pCisJCXJldHVybiAtRU5PREVW OworCisJc3dpdGNoIChweGFfaW5mby0+ZHBtX21vZGUpIHsKKwljYXNlIDg6CisJCXB4YV9pbmZv LT5wbHhfdGltaW5nID0gTlhfUENBX1BDSV84X0JJVF9EUE1fTU9ERTsKKwkJYnJlYWs7CisJY2Fz ZSAxNjoKKwkJcHhhX2luZm8tPnBseF90aW1pbmcgPSBOWF9QQ0FfUENJXzE2X0JJVF9EUE1fTU9E RTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJcHhhX2luZm8tPnBseF90aW1pbmcgPSBOWF9QQ0Ff UENJXzMyX0JJVF9EUE1fTU9ERTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQor ICogICBcYnJpZWYgIGNpZnhfcHhhX2dldF9kcG1fbW9kZQorICoKKyAqCSBccGFyYW0JW2luXQlp bmZvCWNpZnggcnRkbSBkZXZpY2UgaW5mb3JtYXRpb24KKyAqCisgKiAgIFxyZXR1cm4gMCAoT0sp IG9yIEVycm9yCisgKgorICogICBcbm90ZSAgIEdldCBkcG0gbW9kZQorICovCisvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCitzdGF0aWMgaW50IGNpZnhfcHhhX2dldF9kcG1fbW9kZShzdHJ1Y3QgcnRk bV9kZXZpY2UgKmluZm8pCit7CisJc3RydWN0IHB4YV9kZXZfaW5mbyAqcHhhX2luZm8gPQorCSAg ICAoc3RydWN0IHB4YV9kZXZfaW5mbyAqKSgoc3RydWN0IGlvX2luZm8gKilpbmZvLT5kZXZpY2Vf ZGF0YSktPnByaXY7CisJdWludDMyX3QgX19pb21lbSAqcGx4X2dwaW87CisKKwlpZiAoIXB4YV9p bmZvKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBseF9ncGlvID0gcHhhX2luZm8tPnBseCArIFBM WF9HUElPX09GRlNFVDsKKworCWlmICgoKnBseF9ncGlvICYgUExYX0dQSU9fREFUQTBfTUFTSykK KwkgICAgJiYgfigqcGx4X2dwaW8gJiBQTFhfR1BJT19EQVRBMV9NQVNLKSkKKwkJcHhhX2luZm8t PmRwbV9tb2RlID0gODsKKwllbHNlIGlmICh+KCpwbHhfZ3BpbyAmIFBMWF9HUElPX0RBVEEwX01B U0spCisJCSAmJiAoKnBseF9ncGlvICYgUExYX0dQSU9fREFUQTFfTUFTSykpCisJCXB4YV9pbmZv LT5kcG1fbW9kZSA9IDMyOworCWVsc2UgaWYgKH4oKnBseF9ncGlvICYgUExYX0dQSU9fREFUQTBf TUFTSykKKwkJICYmIH4oKnBseF9ncGlvICYgUExYX0dQSU9fREFUQTFfTUFTSykpCisJCXB4YV9p bmZvLT5kcG1fbW9kZSA9IDE2OworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4g MDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKiAgIFxicmllZiAgY2lmeF9w Y2lfb3BlbgorICoKKyAqICAgXHBhcmFtCVtpbl0JY29udGV4dAkJY29udGV4dAorICogICBccGFy YW0JW2luXQl1c2VyX2luZm8JdXNlciBpbmZvcm1hdGlvbgorICoJIFxwYXJhbQlbaW5dCW9mbGFn cwkJZmxhZ3MgKGZsYWcgSVJRIHVzZWQpCisgKgorICogICBccmV0dXJuIDAgKE9LKSBvciBFcnJv cgorICoKKyAqICAgXG5vdGUgICBPcGVuIFJURE0gY2lmeCBwY2kgZHJpdmVyCisgKi8KKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgY2lmeF9wY2lfb3BlbihzdHJ1Y3QgcnRkbV9k ZXZfY29udGV4dCAqY29udGV4dCwKKwkJCSBydGRtX3VzZXJfaW5mb190ICp1c2VyX2luZm8sIGlu dCBvZmxhZ3MpCit7CisjaWZkZWYgSVJRX1NVUFBPUlQKKwlzdHJ1Y3QgcnRkbV9kZXZpY2UgKmlu Zm8gPSAoc3RydWN0IHJ0ZG1fZGV2aWNlICopY29udGV4dC0+ZGV2aWNlOworCWludDMyX3QgcmV0 OworCisJLyogVGVzdCBpZiAob2ZsYWdzKSBJUlEgYXJlIHVzZSAqLworCWlmIChvZmxhZ3MgPT0g VFJVRSkgeworCQlpZiAoKChzdHJ1Y3QgaW9faW5mb190ICopaW5mby0+ZGV2aWNlX2RhdGEpLT5p cnFfcmVnaXN0ZXJlZAorCQkgICAgPT0gRkFMU0UpIHsKKwkJCS8qIFJlZ2lzdGVyIElSUSAqLwor CQkJcmV0ID0KKwkJCSAgICBydGRtX2lycV9yZXF1ZXN0KCYKKwkJCQkJICAgICAoKChzdHJ1Y3Qg aW9faW5mb190ICopaW5mby0+CisJCQkJCSAgICAgICBkZXZpY2VfZGF0YSktPmlycV9oYW5kbGUp LAorCQkJCQkgICAgICgoc3RydWN0IGlvX2luZm9fdCAqKWluZm8tPgorCQkJCQkgICAgICBkZXZp Y2VfZGF0YSktPmlycSwgY2lmeF9oYW5kbGVyLAorCQkJCQkgICAgIFJURE1fSVJRVFlQRV9TSEFS RUQsCisJCQkJCSAgICAgaW5mby0+ZGV2aWNlX25hbWUsICh2b2lkICopaW5mbyk7CisKKwkJCWlm IChyZXQgIT0gMCkgeworI2lmZGVmIERFQlVHCisJCQkJc3dpdGNoIChyZXQpIHsKKwkJCQljYXNl IC1FSU5WQUw6CisJCQkJCXJ0ZG1fcHJpbnRrKAorImNpZnggcnRkbSBkcml2ZXIgZXJyb3I6IHJ0 ZG1faXJxX3JlcXVlc3Q6IGFuIGludmFsaWQgcGFyYW1ldGVyIHdhcyBwYXNzZWRcbiIpOworCQkJ CQlicmVhazsKKwkJCQljYXNlIC1FQlVTWToKKwkJCQkJcnRkbV9wcmludGsoCisiY2lmeCBydGRt IGRyaXZlciBlcnJvcjogcnRkbV9pcnFfcmVxdWVzdDogdGhlIHNwZWNpZmllZCBJUlEgbGluZSBp cyBhbHJlYWR5IGluIHVzZVxuIik7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCXJ0 ZG1fcHJpbnRrKAorImNpZnggcnRkbSBkcml2ZXIgZXJyb3I6IHJ0ZG1faXJxX3JlcXVlc3QgZXJy b3JcbiIpOworCQkJCQlicmVhazsKKwkJCQl9CisjZW5kaWYgLyogREVCVUcgKi8KKworCQkJCXJl dHVybiAtRU5PREVWOworCQkJfSBlbHNlCisJCQkJKChpb19pbmZvX3QgKikgaW5mby0+CisJCQkJ IGRldmljZV9kYXRhKS0+aXJxX3JlZ2lzdGVyZWQgPSBUUlVFOworCQl9CisJfQorI2VuZGlmIC8q IElSUV9TVVBQT1JUICovCisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LworLyohCisgKglcYnJpZWYgIGNpZnhfcGNpX2Nsb3NlCisgKgorICoJXHBhcmFtCVtpbl0JY29u dGV4dAkJY29udGV4dAorICoJXHBhcmFtCVtpbl0JdXNlcl9pbmZvCXVzZXIgaW5mb3JtYXRpb24K KyAqCisgKglccmV0dXJuIDAgKE9LKSBvciBFcnJvcgorICoKKyAqCVxub3RlCUNsb3NlIFJURE0g Y2lmeCBwY2kgZHJpdmVyCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQg Y2lmeF9wY2lfY2xvc2Uoc3RydWN0IHJ0ZG1fZGV2X2NvbnRleHQgKmNvbnRleHQsCisJCQkgIHJ0 ZG1fdXNlcl9pbmZvX3QgKnVzZXJfaW5mbykKK3sKKyNpZmRlZiBJUlFfU1VQUE9SVAorCXN0cnVj dCBydGRtX2RldmljZSAqaW5mbyA9IChzdHJ1Y3QgcnRkbV9kZXZpY2UgKiljb250ZXh0LT5kZXZp Y2U7CisKKwlpZiAoKChzdHJ1Y3QgaW9faW5mb190ICopaW5mby0+ZGV2aWNlX2RhdGEpLT5pcnFf cmVnaXN0ZXJlZCA9PSBUUlVFKSB7CisJCWlmICgoKHN0cnVjdCBpb19pbmZvX3QgKilpbmZvLT5k ZXZpY2VfZGF0YSktPgorCQkJCQkJCWlycV9lbmFibGUgPT0gVFJVRSkgeworCQkJLyogRGlzYWJs ZSBJUlEgKi8KKwkJCWlmIChydGRtX2lycV9kaXNhYmxlCisJCQkgICAgKCYKKwkJCSAgICAgKCgo c3RydWN0IGlvX2luZm9fdCAqKWluZm8tPmRldmljZV9kYXRhKS0+CisJCQkgICAgICBpcnFfaGFu ZGxlKSkgIT0gMCkgeworI2lmZGVmIERFQlVHCisJCQkJcnRkbV9wcmludGsoCisJCQkiY2lmeCBy dGRtIGRyaXZlciBlcnJvciA6IHJ0ZG1faXJxX2Rpc2FibGUgZXJyb3JcbiIpOworI2VuZGlmIC8q IERFQlVHICovCisKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KKwkJfQorCisJCS8qIFVucmVn aXN0ZXIgSVJRICovCisJCWlmIChydGRtX2lycV9mcmVlCisJCSAgICAoJigoKHN0cnVjdCBpb19p bmZvX3QgKilpbmZvLT5kZXZpY2VfZGF0YSktPmlycV9oYW5kbGUpKSAhPQorCQkgICAgMCkgewor I2lmZGVmIERFQlVHCisJCQlydGRtX3ByaW50aworCQkJICAgICgiY2lmeCBydGRtIGRyaXZlciBl cnJvciA6IHJ0ZG1faXJxX2ZyZWUgZXJyb3JcbiIpOworI2VuZGlmIC8qIERFQlVHICovCisKKwkJ CXJldHVybiAtRU5PREVWOworCQl9CisJfQorI2VuZGlmIC8qIElSUV9TVVBQT1JUICovCisKKwly ZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKiAgXGJyaWVmICBj aWZ4X3BjaV9yZWFkCisgKgorICoJXHBhcmFtCVtpbl0JY29udGV4dAkJY29udGV4dAorICoJXHBh cmFtCVtpbl0JdXNlcl9pbmZvCXVzZXIgaW5mb3JtYXRpb24KKyAqCVxwYXJhbQlbaW5dCWJ1Zgl1 c2VyCWJ1ZmZlcgorICoJXHBhcmFtCVtpbl0JbmJ5dGUJCW51bWJlciBvZiBieXRlIHRvIHJlYWQK KyAqCisgKiAgXHJldHVybiBzaXplIHJlYWQKKyAqCisgKiAgXG5vdGUgICBSZWFkCisgKi8KKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzc2l6ZV90IGNpZnhfcGNpX3JlYWQoc3RydWN0 IHJ0ZG1fZGV2X2NvbnRleHQgKmNvbnRleHQsCisJCQkgICAgIHJ0ZG1fdXNlcl9pbmZvX3QgKnVz ZXJfaW5mbywgdm9pZCAqYnVmLAorCQkJICAgICBzaXplX3QgbmJ5dGUpCit7CisJc3RydWN0IHJ0 ZG1fZGV2aWNlICppbmZvID0gKHN0cnVjdCBydGRtX2RldmljZSAqKWNvbnRleHQtPmRldmljZTsK KworCWlmIChuYnl0ZSA+IHNpemVvZihzdHJ1Y3QgaW9faW5mbykpIHsKKyNpZmRlZiBERUJVRwor CQlydGRtX3ByaW50aworCQkgICAgKCJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogZGF0YSB1c2Vy IHNpemUgdG9vIGJpZ1xuIik7CisjZW5kaWYgLyogREVCVUcgKi8KKworCQlyZXR1cm4gMDsKKwl9 CisKKwkvKiBDb3B5IGRhdGEgaW5mb3JtYXRpb24gZm9yIHVzZXJsYW5kICovCisJaWYgKHJ0ZG1f c2FmZV9jb3B5X3RvX3VzZXIodXNlcl9pbmZvLCBidWYsCisJCQkJICAgKChzdHJ1Y3QgaW9faW5m byAqKWluZm8tPmRldmljZV9kYXRhKSwKKwkJCQkgICBuYnl0ZSkpIHsKKyNpZmRlZiBERUJVRwor CQlydGRtX3ByaW50aworCQkgICAgKCJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDogY2FuJ3QgY29w eSBkYXRhIGZyb20gZHJpdmVyXG4iKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCX0KKworCXJldHVy biBuYnl0ZTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKglcYnJpZWYgIGNp ZnhfcGNpX3dyaXRlCisgKgorICogIFxwYXJhbQlbaW5dCWNvbnRleHQJCWNvbnRleHQKKyAqCVxw YXJhbQlbaW5dCXVzZXJfaW5mbwl1c2VyIGluZm9ybWF0aW9uCisgKglccGFyYW0JW2luXQlidWYJ dXNlcglidWZmZXIKKyAqCVxwYXJhbQlbaW5dCW5ieXRlCQludW1iZXIgb2YgYnl0ZSB0byByZWFk CisgKgorICogICBccmV0dXJuIHNpemUgcmVhZAorICoKKyAqICAgXG5vdGUgICBSZWFkCisgKi8K Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzc2l6ZV90IGNpZnhfcGNpX3dyaXRlKHN0 cnVjdCBydGRtX2Rldl9jb250ZXh0ICpjb250ZXh0LAorCQkJICAgICAgcnRkbV91c2VyX2luZm9f dCAqdXNlcl9pbmZvLCBjb25zdCB2b2lkICpidWYsCisJCQkgICAgICBzaXplX3QgbmJ5dGUpCit7 CisjaWZkZWYgSVJRX1NVUFBPUlQKKwlzdHJ1Y3QgcnRkbV9kZXZpY2UgKmluZm8gPSAoc3RydWN0 IHJ0ZG1fZGV2aWNlICopY29udGV4dC0+ZGV2aWNlOworCXVpbnQ4X3QgaXJxX2VuYWJsZTsKKyNl bmRpZiAvKiBJUlFfU1VQUE9SVCAqLworCXN0cnVjdCBpb19tYXBfbWVtIG1hcF9tZW07CisJaW50 IHJldDsKKworCWlmIChuYnl0ZSA+IHNpemVvZihzdHJ1Y3QgaW9fbWFwX21lbSkpIHsKKyNpZmRl ZiBERUJVRworCQlydGRtX3ByaW50aworCQkgICAgKCJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDog ZGF0YSB1c2VyIHNpemUgdG9vIGJpZ1xuIik7CisjZW5kaWYgLyogREVCVUcgKi8KKworCQlyZXR1 cm4gMDsKKwl9CisjaWZkZWYgSVJRX1NVUFBPUlQKKwlpZiAobmJ5dGUgPT0gc2l6ZW9mKHVpbnQ4 X3QpKSB7CisJCS8qIENvcHkgZGF0YSBmb3IgS2VybmVsICovCisJCWlmIChydGRtX3NhZmVfY29w eV9mcm9tX3VzZXIKKwkJICAgICh1c2VyX2luZm8sICZpcnFfZW5hYmxlLCBidWYsIG5ieXRlKSkg eworCQkJbmJ5dGUgPSAwOworCisjaWZkZWYgREVCVUcKKwkJCXJ0ZG1fcHJpbnRrKAorCQkiY2lm eCBydGRtIGRyaXZlciBlcnJvciA6IGNhbid0IGNvcHkgZGF0YSBmcm9tIGRyaXZlclxuIik7Cisj ZW5kaWYgLyogREVCVUcgKi8KKwkJfSBlbHNlIHsKKwkJCWlmICgoKCgoc3RydWN0IGlvX2luZm8g KilpbmZvLT5kZXZpY2VfZGF0YSktPgorCQkJICAgICBpcnFfZW5hYmxlKSAhPSBpcnFfZW5hYmxl KQorCQkJJiYgKCgoc3RydWN0IGlvX2luZm8gKilpbmZvLT5kZXZpY2VfZGF0YSktPgorCQkJCSAg ICBpcnFfcmVnaXN0ZXJlZCA9PSBUUlVFKSkgeworCQkJCQlpZiAoaXJxX2VuYWJsZSA9PSBUUlVF KSB7CisJCQkJCQkvKiBFbmFibGUgSVJRICovCisJCQkJCQlydGRtX2lycV9lbmFibGUKKwkJCQkJ CSAgICAoJgorCQkJCQkJICAgICAoKChzdHJ1Y3QgaW9faW5mbyAqKWluZm8tPgorCQkJCQkJICAg ICAgIGRldmljZV9kYXRhKS0+CisJCQkJCQkgICAgICBpcnFfaGFuZGxlKTsKKwkJCQkJfSBlbHNl IHsKKwkJCQkJCS8qIERpc2FibGUgSVJRICovCisJCQkJCQlydGRtX2lycV9kaXNhYmxlCisJCQkJ CQkgICAgKCYKKwkJCQkJCSAgICAgKCgoc3RydWN0IGlvX2luZm8gKilpbmZvLT4KKwkJCQkJCSAg ICAgICBkZXZpY2VfZGF0YSktPgorCQkJCQkJICAgICAgaXJxX2hhbmRsZSk7CisJCQkJCX0KKwor CQkJCQkoKHN0cnVjdCBpb19pbmZvICopaW5mby0+ZGV2aWNlX2RhdGEpLT4KKwkJCQkJICAgIGly cV9lbmFibGUgPSBpcnFfZW5hYmxlOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAobmJ5 dGUgPT0gc2l6ZW9mKHN0cnVjdCBpb19tYXBfbWVtKSkgeworI2Vsc2UgLyogSVJRX1NVUFBPUlQg Ki8KKwlpZiAobmJ5dGUgPT0gc2l6ZW9mKHN0cnVjdCBpb19tYXBfbWVtKSkgeworI2VuZGlmIC8q IElSUV9TVVBQT1JUICovCisJCS8qIENvcHkgZGF0YSBpbmZvcm1hdGlvbiBmb3IgS2VybmVsICov CisJCWlmIChydGRtX3NhZmVfY29weV9mcm9tX3VzZXIodXNlcl9pbmZvLCAmbWFwX21lbSwgYnVm LCBuYnl0ZSkpIHsKKwkJCW5ieXRlID0gMDsKKworI2lmZGVmIERFQlVHCisJCQlydGRtX3ByaW50 aygKKwkJImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBjYW4ndCBjb3B5IGRhdGEgZnJvbSBkcml2 ZXJcbiIpOworI2VuZGlmIC8qIERFQlVHICovCisJCX0gZWxzZSB7CisJCQlpZiAoKm1hcF9tZW0u dmlydF9hZGRyID09IE5VTEwpIHsKKwkJCQkvKiBNYXAgcGh5c2ljYWwgb24gdmlydHVhbCBtZW1v cnkgKi8KKwkJCQlyZXQgPSBydGRtX2lvbWFwX3RvX3VzZXIodXNlcl9pbmZvLAorCQkJCQkJCSAo cGh5c19hZGRyX3QpIG1hcF9tZW0uCisJCQkJCQkJIHBoeXNfYWRkciwKKwkJCQkJCQkgKHNpemVf dCkgbWFwX21lbS4KKwkJCQkJCQkgbGVuZ3RoLAorCQkJCQkJCSAoUFJPVF9SRUFEIHwKKwkJCQkJ CQkgIFBST1RfV1JJVEUpLAorCQkJCQkJCSBtYXBfbWVtLnZpcnRfYWRkciwKKwkJCQkJCQkgTlVM TCwgTlVMTCk7CisKKwkJCQlpZiAocmV0ICE9IDApIHsKKwkJCQkJbmJ5dGUgPSAwOworCisjaWZk ZWYgREVCVUcKKwkJCQkJc3dpdGNoIChyZXQpIHsKKwkJCQkJY2FzZSAtRUlOVkFMOgorCQkJCQkJ cnRkbV9wcmludGsoCisiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IGFuIGludmFsaWQgc3RhcnQg YWRkcmVzcywgc2l6ZSwgb3IgZGVzdGluYXRpb24gYWRkcmVzcyB3YXMgcGFzc2VkXG4iKTsKKwkJ CQkJCWJyZWFrOworCQkJCQljYXNlIC1FTk9NRU06CisJCQkJCQlydGRtX3ByaW50aygKKyJjaWZ4 IHJ0ZG0gZHJpdmVyIGVycm9yIDogdGhlcmUgaXMgaW5zdWZmaWNpZW50IGZyZWUgbWVtb3J5IG9y IHRoZSBsaW1pdCBvZiBtZW1vcnkgbWFwcGluZyBmb3IgdGhlIHVzZXIgcHJvY2VzcyB3YXMgcmVh Y2hlZFxuIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAtRUFHQUlOOgorCQkJCQkJcnRkbV9w cmludGsoCisiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IHRvbyBtdWNoIG1lbW9yeSBoYXMgYmVl biBhbHJlYWR5IGxvY2tlZCBieSB0aGUgdXNlciBwcm9jZXNzXG4iKTsKKwkJCQkJCWJyZWFrOwor CQkJCQljYXNlIC1FUEVSTToKKwkJCQkJCXJ0ZG1fcHJpbnRrKAorCSJjaWZ4IHJ0ZG0gZHJpdmVy IGVycm9yIDogYW4gaWxsZWdhbCBpbnZvY2F0aW9uIGVudmlyb25tZW50IGlzIGRldGVjdGVkXG4i KTsKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJcnRkbV9wcmludGsoCisJCQki Y2lmeCBydGRtIGRyaXZlciBlcnJvciA6IHJ0ZG1fc2FmZV9jb3B5X2Zyb21fdXNlciBlcnJvclxu Iik7CisJCQkJCQlicmVhazsKKwkJCQkJfQorI2VuZGlmIC8qIERFQlVHICovCisJCQkJfQorCQkJ fSBlbHNlIHsKKwkJCQkvKiBVbmFwIHZpcnR1YWwgbWVtb3J5ICovCisJCQkJcmV0ID0gcnRkbV9t dW5tYXAodXNlcl9pbmZvLCAqbWFwX21lbS52aXJ0X2FkZHIsCisJCQkJCQkgIChzaXplX3QpIG1h cF9tZW0ubGVuZ3RoKTsKKworCQkJCWlmIChyZXQgIT0gMCkgeworCQkJCQluYnl0ZSA9IDA7CisK KyNpZmRlZiBERUJVRworCQkJCQlzd2l0Y2ggKHJldCkgeworCQkJCQljYXNlIC1FSU5WQUw6CisJ CQkJCQlydGRtX3ByaW50aygKKwkJImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBhbiBpbnZhbGlk IGFkZHJlc3Mgb3Igc2l6ZSB3YXMgcGFzc2VkXG4iKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNl IC1FUEVSTToKKwkJCQkJCXJ0ZG1fcHJpbnRrKAorCSJjaWZ4IHJ0ZG0gZHJpdmVyIGVycm9yIDog YW4gaWxsZWdhbCBpbnZvY2F0aW9uIGVudmlyb25tZW50IGlzIGRldGVjdGVkXG4iKTsKKwkJCQkJ CWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJcnRkbV9wcmludGsoCisJCQkiY2lmeCBydGRt IGRyaXZlciBlcnJvciA6IHJ0ZG1fc2FmZV9jb3B5X2Zyb21fdXNlciBlcnJvclxuIik7CisJCQkJ CQlicmVhazsKKwkJCQkJfQorI2VuZGlmIC8qIERFQlVHICovCisJCQkJfQorCQkJfQorCQl9CisJ fSBlbHNlIHsKKwkJLyogRXJyb3Igbm90aGluZyB0byBkbyAqLworCQluYnl0ZSA9IDA7CisJfQor CisJcmV0dXJuIG5ieXRlOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqICAg XGJyaWVmICBjaWZ4X3BjaV9wcm9iZQorICoKKyAqICAgXHBhcmFtICBbaW5dICAgZGV2CisgKiAg IFxwYXJhbSAgW2luXSAgIGlkCisgKgorICogICBccmV0dXJuIDAgKE9LKSBvciBFcnJvcgorICoK KyAqICAgXG5vdGUgIE9wZW4gdGhlIGRldmljZS4KKyAqCQkJVGhpcyBmdW5jdGlvbiBpcyBjYWxs ZWQgd2hlbiB0aGUgZGV2aWNlIHNoYWxsIGJlIG9wZW5lZC4KKyAqLworLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworc3RhdGljIGludCBjaWZ4X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBj b25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHJ0ZG1fZGV2aWNlICpp bmZvID0gTlVMTDsKKwlzdHJ1Y3QgaW9faW5mb190ICpkZXZpY2VfZGF0YSA9IE5VTEw7CisJaW50 MzJfdCBiYXI7CisJaW50MzJfdCByZXQ7CisKKwkvKiBBbGxvY2F0ZSBkZXZpY2UgZHJpdmVyIHN0 cnVjdHVyZSAqLworCWluZm8gPSBydGRtX21hbGxvYyhzaXplb2Yoc3RydWN0IHJ0ZG1fZGV2aWNl KSk7CisKKwlpZiAoaW5mbyA9PSBOVUxMKSB7CisjaWZkZWYgREVCVUcKKwkJcnRkbV9wcmludGso ImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBydGRtX21hbGxvYyBlcnJvclxuIik7CisjZW5kaWYg LyogREVCVUcgKi8KKworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSBwY2lfZW5hYmxl X2RldmljZShkZXYpOworCWlmIChyZXQgIT0gMCkgeworI2lmZGVmIERFQlVHCisJCXJ0ZG1fcHJp bnRrKAorCQkiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IHBjaV9lbmFibGVfZGV2aWNlIGVycm9y IDogJWlcbiIsCisJCXJldCk7CisjZW5kaWYgLyogREVCVUcgKi8KKworCQlnb3RvIG91dF9mcmVl OworCX0KKworCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCBEUklWRVJfTkFNRSk7CisJ aWYgKHJldCAhPSAwKSB7CisjaWZkZWYgREVCVUcKKwkJcnRkbV9wcmludGsoCisJCSJjaWZ4IHJ0 ZG0gZHJpdmVyIGVycm9yIDogcGNpX3JlcXVlc3RfcmVnaW9ucyBlcnJvciA6ICVpXG4iLAorCQly ZXQpOworI2VuZGlmIC8qIERFQlVHICovCisKKwkJZ290byBvdXRfZGlzYWJsZTsKKwl9CisKKwkv KiBJbml0aWFsaXplIHN0cnVjdHVyZSB3aXRoIGRlZmF1bHQgdmFsdWVzICovCisJbWVtY3B5KGlu Zm8sICZjaWZ4X2RldmljZV90bXBsLCBzaXplb2Yoc3RydWN0IHJ0ZG1fZGV2aWNlKSk7CisKKwlp bmZvLT5kZXZpY2VfaWQgPSBpZC0+ZGV2aWNlOworCXNucHJpbnRmKChjaGFyICopaW5mby0+ZGV2 aWNlX25hbWUsIFJURE1fTUFYX0RFVk5BTUVfTEVOLCAiY2lmeCVpIiwKKwkJIGNpZnhfbnVtKTsK KwlpbmZvLT5wcm9jX25hbWUgPSBpbmZvLT5kZXZpY2VfbmFtZTsKKworCXN3aXRjaCAoaWQtPmRl dmljZSkgeworCWNhc2UgUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRYOgorCQliYXIgPSBEUE1f QkFSOworCQlpbmZvLT5wZXJpcGhlcmFsX25hbWUgPSBDSUZYX1JURE1fQ0FSRF9OQU1FOworCQli cmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExDOgorCQliYXIgPSBEUE1f QkFSOworCQlpbmZvLT5wZXJpcGhlcmFsX25hbWUgPSBDSUZYX1JURE1fTkVUUExDX0NBUkRfTkFN RTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVEpBQ0s6CisJCWJh ciA9IERQTV9CQVI7CisJCWluZm8tPnBlcmlwaGVyYWxfbmFtZSA9IENJRlhfUlRETV9ORVRKQUNL X0NBUkRfTkFNRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYmFyID0gUExYX0RQTV9CQVI7CisJ CWluZm8tPnBlcmlwaGVyYWxfbmFtZSA9IENJRlhfUlRETV9QTFhfQ0FSRF9OQU1FOworCQlicmVh azsKKwl9CisKKwlpbmZvLT5kZXZpY2VfZGF0YSA9IE5VTEw7CisKKwkvKiBBbGxvY2F0ZSBzcGVj aWZpYyBkYXRhIHN0cmN1dHVyZSBmb3IgZGV2aWNlICovCisJZGV2aWNlX2RhdGEgPSBydGRtX21h bGxvYyhzaXplb2Yoc3RydWN0IGlvX2luZm8pKTsKKworCWlmIChkZXZpY2VfZGF0YSA9PSBOVUxM KSB7CisjaWZkZWYgREVCVUcKKwkJcnRkbV9wcmludGsoImNpZnggcnRkbSBkcml2ZXIgZXJyb3Ig OiBydGRtX21hbGxvYyBlcnJvclxuIik7CisjZW5kaWYgLyogREVCVUcgKi8KKworCQlnb3RvIG91 dF9yZWxlYXNlOworCX0KKworCW1lbXNldChkZXZpY2VfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBp b19pbmZvKSk7CisKKwkvKiBCQVIgMCBvciAyIHBvaW50cyB0byB0aGUgY2FyZCdzIGR1YWwgcG9y dCBtZW1vcnkgKi8KKwkoKHN0cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT5tZW1bRFBNX0lO REVYXS5hZGRyID0KKwkgICAgcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgYmFyKTsKKworCWlmICgo KHN0cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT5tZW1bRFBNX0lOREVYXS5hZGRyID09IDAp IHsKKyNpZmRlZiBERUJVRworCQlydGRtX3ByaW50aworCQkgICAgKCJjaWZ4IHJ0ZG0gZHJpdmVy IGVycm9yIDogcGNpX3Jlc291cmNlX3N0YXJ0IGVycm9yXG4iKTsKKyNlbmRpZiAvKiBERUJVRyAq LworCisJCWdvdG8gb3V0X3JlbGVhc2U7CisJfQorCisJKChzdHJ1Y3QgaW9faW5mbyAqKWRldmlj ZV9kYXRhKS0+bWVtW0RQTV9JTkRFWF0uaW50ZXJuYWxfYWRkciA9CisJICAgIGlvcmVtYXBfbm9j YWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCBiYXIpLAorCQkJICAgIHBjaV9yZXNvdXJjZV9s ZW4oZGV2LCBiYXIpKTsKKworCWlmICgoKHN0cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT5t ZW1bRFBNX0lOREVYXS5pbnRlcm5hbF9hZGRyCisJCQkJCQkJCQk9PSAwKSB7CisjaWZkZWYgREVC VUcKKwkJcnRkbV9wcmludGsoImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBpb3JlbWFwX25vY2Fj aGUgZXJyb3JcbiIpOworI2VuZGlmIC8qIERFQlVHICovCisKKwkJZ290byBvdXRfcmVsZWFzZTsK Kwl9CisKKwlkZXZfaW5mbygmZGV2LT5kZXYsICJEUE0gYXQgJTA4bFhcbiIsCisJCSAobG9uZyB1 bnNpZ25lZCBpbnQpKChzdHJ1Y3QgaW9faW5mbyAqKWRldmljZV9kYXRhKS0+CisJCSBtZW1bRFBN X0lOREVYXS5hZGRyKTsKKwkoKHN0cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT5tZW1bRFBN X0lOREVYXS5zaXplID0KKwkgICAgcGNpX3Jlc291cmNlX2xlbihkZXYsIGJhcik7CisJKChzdHJ1 Y3QgaW9faW5mbyAqKWRldmljZV9kYXRhKS0+bWVtW0RQTV9JTkRFWF0ubWVtdHlwZSA9IE1FTV9Q SFlTOworCisJLyogbWFwIGV4dGVuZGVkIG1lbSAoQkFSIDEgcG9pbnRzIHRvIHRoZSBleHRlbmRl ZCBtZW1vcnkpICovCisJKChzdHJ1Y3QgaW9faW5mbyAqKWRldmljZV9kYXRhKS0+bWVtW0VYVF9N RU1fSU5ERVhdLmFkZHIgPQorCSAgICBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCBFWFRfTUVNX0JB Uik7CisKKwkvKiBleHRlbmRlZCBtZW1vcnkgaXMgb3B0aW9uYWwsIHNvIGRvbid0IGNhcmUgaWYg aXQgaXMgbm90IHByZXNlbnQgKi8KKwlpZiAoKChzdHJ1Y3QgaW9faW5mbyAqKWRldmljZV9kYXRh KS0+bWVtW0VYVF9NRU1fSU5ERVhdLmFkZHIgIT0gMCkgeworCQkoKHN0cnVjdCBpb19pbmZvICop ZGV2aWNlX2RhdGEpLT5tZW1bRVhUX01FTV9JTkRFWF0uCisJCSAgICBpbnRlcm5hbF9hZGRyID0K KwkJICAgIGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCBFWFRfTUVNX0JB UiksCisJCQkJICAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LCBFWFRfTUVNX0JBUikpOworCisJCWlm ICgoKHN0cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT5tZW1bRVhUX01FTV9JTkRFWF0uCisJ CSAgICBpbnRlcm5hbF9hZGRyID09IDApIHsKKyNpZmRlZiBERUJVRworCQkJcnRkbV9wcmludGso CisJCQkiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IGlvcmVtYXBfbm9jYWNoZSBlcnJvclxuIik7 CisjZW5kaWYgLyogREVCVUcgKi8KKworCQkJZ290byBvdXRfdW5tYXA7CisJCX0KKworCQlkZXZf aW5mbygmZGV2LT5kZXYsICJleHRlbmRlZCBtZW1vcnkgYXQgJTA4bFhcbiIsCisJCQkgKGxvbmcg dW5zaWduZWQgaW50KSgoc3RydWN0IGlvX2luZm8gKilkZXZpY2VfZGF0YSktPgorCQkJIG1lbVtF WFRfTUVNX0lOREVYXS5hZGRyKTsKKwkJKChzdHJ1Y3QgaW9faW5mbyAqKWRldmljZV9kYXRhKS0+ bWVtW0VYVF9NRU1fSU5ERVhdLnNpemUgPQorCQkgICAgcGNpX3Jlc291cmNlX2xlbihkZXYsIEVY VF9NRU1fQkFSKTsKKwkJKChzdHJ1Y3QgaW9faW5mbyAqKWRldmljZV9kYXRhKS0+bWVtW0VYVF9N RU1fSU5ERVhdLm1lbXR5cGUgPQorCQkgICAgTUVNX1BIWVM7CisJfQorCisJaWYgKChpZC0+ZGV2 aWNlID09IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUWCkKKwkgICAgfHwgKGlkLT5kZXZpY2Ug PT0gUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRQTEMpCisJICAgIHx8IChpZC0+ZGV2aWNlID09 IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUSkFDSykpIHsKKwkJLyogbWFrZSBzdXJlIGFsbCBp bnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCAqLworCQlpb3dyaXRlMzIoMCwKKwkJCSAgKChzdHJ1Y3Qg aW9faW5mbyAqKWRldmljZV9kYXRhKS0+bWVtW0RQTV9JTkRFWF0uCisJCQkgIGludGVybmFsX2Fk ZHIgKyBEUE1fSE9TVF9JTlRfRU4wKTsKKwkJKChzdHJ1Y3QgaW9faW5mbyAqKWRldmljZV9kYXRh KS0+cHJpdiA9IE5VTEw7CisJfSBlbHNlIGlmIChpZC0+c3ViZGV2aWNlID09IFBDSV9TVUJERVZJ Q0VfSURfTlhQQ0EpIHsKKwkJLyogbWFwIFBMWCByZWdpc3RlcnMgKi8KKwkJc3RydWN0IHB4YV9k ZXZfaW5mbyAqcHhhX2luZm8gPQorCQkgICAgKHN0cnVjdCBweGFfZGV2X2luZm8gKikKKwkJICAg IHJ0ZG1fbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHhhX2Rldl9pbmZvKSk7CisKKwkJaWYgKHB4YV9p bmZvID09IE5VTEwpIHsKKyNpZmRlZiBERUJVRworCQkJcnRkbV9wcmludGsKKwkJCSAgICAoImNp ZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBydGRtX21hbGxvYyBlcnJvclxuIik7CisjZW5kaWYgLyog REVCVUcgKi8KKworCQkJZ290byBvdXRfdW5tYXA7CisJCX0KKworCQkoKHN0cnVjdCBpb19pbmZv ICopZGV2aWNlX2RhdGEpLT5wcml2ID0gcHhhX2luZm87CisKKwkJLyogc2V0IFBYQSBQTFggVGlt aW5ncyAqLworCQlweGFfaW5mby0+cGx4ID0KKwkJICAgIGlvcmVtYXBfbm9jYWNoZShwY2lfcmVz b3VyY2Vfc3RhcnQoZGV2LCBQWEFfUExYX0JBUiksCisJCQkJICAgIHBjaV9yZXNvdXJjZV9sZW4o ZGV2LCBQWEFfUExYX0JBUikpOworCisJCWlmICghcHhhX2luZm8tPnBseCkKKwkJCWdvdG8gb3V0 X3VubWFwOworCQlpZiAoY2lmeF9weGFfZ2V0X2RwbV9tb2RlKGluZm8pKQorCQkJZ290byBvdXRf dW5tYXBfcGx4OworCQlpZiAoY2lmeF9weGFfZ2V0X3BseF90aW1pbmcoaW5mbykpCisJCQlnb3Rv IG91dF91bm1hcF9wbHg7CisJCWlmIChjaWZ4X3B4YV9zZXRfcGx4X3RpbWluZyhpbmZvKSkKKwkJ CWdvdG8gb3V0X3VubWFwX3BseDsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgcHhhX2Rldl9pbmZvICpw eGFfaW5mbyA9CisJCSAgICAoc3RydWN0IHB4YV9kZXZfaW5mbyAqKQorCQkgICAgcnRkbV9tYWxs b2Moc2l6ZW9mKHN0cnVjdCBweGFfZGV2X2luZm8pKTsKKworCQlpZiAocHhhX2luZm8gPT0gTlVM TCkgeworI2lmZGVmIERFQlVHCisJCQlydGRtX3ByaW50aworCQkJICAgICgiY2lmeCBydGRtIGRy aXZlciBlcnJvciA6IHJ0ZG1fbWFsbG9jIGVycm9yXG4iKTsKKyNlbmRpZiAvKiBERUJVRyAqLwor CisJCQlnb3RvIG91dF9mcmVlX3B4YTsKKwkJfQorCisJCSgoc3RydWN0IHB4YV9kZXZfaW5mbyAq KXB4YV9pbmZvKS0+cGx4ID0gTlVMTDsKKwkJKChzdHJ1Y3QgcHhhX2Rldl9pbmZvICopcHhhX2lu Zm8pLT5wbHhfdGltaW5nID0gMDsKKwkJKChzdHJ1Y3QgcHhhX2Rldl9pbmZvICopcHhhX2luZm8p LT5kcG1fbW9kZSA9IDA7CisJCSgoc3RydWN0IGlvX2luZm8gKilkZXZpY2VfZGF0YSktPnByaXYg PSBweGFfaW5mbzsKKwl9CisKKwkvKiBJbml0aWFsaXplIGlycSBkYXRhICovCisJKChzdHJ1Y3Qg aW9faW5mbyAqKWRldmljZV9kYXRhKS0+aXJxID0gZGV2LT5pcnE7CisJKChzdHJ1Y3QgaW9faW5m byAqKWRldmljZV9kYXRhKS0+aXJxX2VuYWJsZSA9IEZBTFNFOworCSgoc3RydWN0IGlvX2luZm8g KilkZXZpY2VfZGF0YSktPmlycV9yZWdpc3RlcmVkID0gRkFMU0U7CisKKwlpbmZvLT5kZXZpY2Vf ZGF0YSA9IGRldmljZV9kYXRhOworCisJLyogUmVnaXN0ZXIgUlRETSBkZXZpY2UgZHJpdmVyICov CisJcmV0ID0gcnRkbV9kZXZfcmVnaXN0ZXIoaW5mbyk7CisJaWYgKHJldCAhPSAwKSB7CisjaWZk ZWYgREVCVUcKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAtRUlOVkFMOgorCQkJcnRkbV9wcmlu dGsoCisiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IHJ0ZG1fZGV2X3JlZ2lzdGVyIGVycm9yIDog dGhlIGRldmljZSBzdHJ1Y3R1cmUgY29udGFpbnMgaW52YWxpZCBlbnRyaWVzLiBDaGVjayBrZXJu ZWwgbG9nIGluIHRoaXMgY2FzZVxuIik7CisJCQlicmVhazsKKwkJY2FzZSAtRU5PTUVNOgorCQkJ cnRkbV9wcmludGsoCisiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IHJ0ZG1fZGV2X3JlZ2lzdGVy IGVycm9yIDogdGhlIGNvbnRleHQgZm9yIGFuIGV4Y2x1c2l2ZSBkZXZpY2UgY2Fubm90IGJlIGFs bG9jYXRlZFxuIik7CisJCQlicmVhazsKKwkJY2FzZSAtRUVYSVNUOgorCQkJcnRkbV9wcmludGso CisiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IHJ0ZG1fZGV2X3JlZ2lzdGVyIGVycm9yIDogdGhl IHNwZWNpZmllZCBkZXZpY2UgbmFtZSBvZiBwcm90b2NvbCBJRCBpcyBhbHJlYWR5IGluIHVzZVxu Iik7CisJCQlicmVhazsKKwkJY2FzZSAtRUFHQUlOOgorCQkJcnRkbV9wcmludGsoCisiY2lmeCBy dGRtIGRyaXZlciBlcnJvciA6IHJ0ZG1fZGV2X3JlZ2lzdGVyIGVycm9yIDogc29tZSAvcHJvYyBl bnRyeSBjYW5ub3QgYmUgY3JlYXRlZFxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJ0 ZG1fcHJpbnRrKAorImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBydGRtX2Rldl9yZWdpc3RlciBl cnJvclxuIik7CisJCQlicmVhazsKKwkJfQorI2VuZGlmIC8qIERFQlVHICovCisKKwkJaWYgKGlk LT5zdWJkZXZpY2UgIT0gUENJX1NVQkRFVklDRV9JRF9OWFBDQSkKKwkJCWdvdG8gb3V0X3VubWFw OworCQllbHNlCisJCQlnb3RvIG91dF91bm1hcF9wbHg7CisJfQorCisJcGNpX3NldF9kcnZkYXRh KGRldiwgaW5mbyk7CisKKwlpZiAoaWQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVS X05FVFgpCisJCWRldl9pbmZvKCZkZXYtPmRldiwgInJlZ2lzdGVyZWQgQ2lmWCBjYXJkXG4iKTsK KwllbHNlIGlmIChpZC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExDKQor CQlkZXZfaW5mbygmZGV2LT5kZXYsICJyZWdpc3RlcmVkIG5ldFBMQyBjYXJkXG4iKTsKKwllbHNl IGlmIChpZC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUSkFDSykKKwkJZGV2 X2luZm8oJmRldi0+ZGV2LCAicmVnaXN0ZXJlZCBuZXRKQUNLIGNhcmRcbiIpOworCWVsc2UgaWYg KGlkLT5zdWJkZXZpY2UgPT0gUENJX1NVQkRFVklDRV9JRF9OWFNCX1BDQSkKKwkJZGV2X2luZm8o JmRldi0+ZGV2LCAicmVnaXN0ZXJlZCBOWFNCLVBDQSBhZGFwdGVyIGNhcmRcbiIpOworCWVsc2Ug eworCQlzdHJ1Y3QgcHhhX2Rldl9pbmZvICpweGFfaW5mbyA9CisJCSAgICAoc3RydWN0IHB4YV9k ZXZfaW5mbyAqKSgoc3RydWN0IGlvX2luZm8gKilpbmZvLT4KKwkJCQkJICAgIGRldmljZV9kYXRh KS0+cHJpdjsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJICJyZWdpc3RlcmVkIE5YUENBLVBD SSBhZGFwdGVyIGNhcmQgaW4gJWQgYml0IG1vZGVcbiIsCisJCQkgKChzdHJ1Y3QgcHhhX2Rldl9p bmZvICopcHhhX2luZm8pLT5kcG1fbW9kZSk7CisJfQorCisJY2lmeF9udW0rKzsKKworCXJldHVy biAwOworCisgb3V0X3VubWFwX3BseDoKKwlpb3VubWFwKCgoc3RydWN0IHB4YV9kZXZfaW5mbyAq KSgoKHN0cnVjdCBpb19pbmZvICopaW5mby0+ZGV2aWNlX2RhdGEpLT4KKwkJCQkJIHByaXYpKS0+ cGx4KTsKKworIG91dF9mcmVlX3B4YToKKwlydGRtX2ZyZWUoKChzdHJ1Y3QgaW9faW5mbyAqKWlu Zm8tPmRldmljZV9kYXRhKS0+cHJpdik7CisKKyBvdXRfdW5tYXA6CisJaW91bm1hcCgoKHN0cnVj dCBpb19pbmZvICopaW5mby0+ZGV2aWNlX2RhdGEpLT5tZW1bRFBNX0lOREVYXS4KKwkJaW50ZXJu YWxfYWRkcik7CisJaWYgKCgoc3RydWN0IGlvX2luZm8gKilpbmZvLT5kZXZpY2VfZGF0YSktPm1l bVtFWFRfTUVNX0lOREVYXS4KKwkgICAgaW50ZXJuYWxfYWRkciAhPSAwKQorCQlpb3VubWFwKCgo c3RydWN0IGlvX2luZm8gKilpbmZvLT5kZXZpY2VfZGF0YSktPgorCQkJbWVtW0VYVF9NRU1fSU5E RVhdLmludGVybmFsX2FkZHIpOworCisgb3V0X3JlbGVhc2U6CisJcGNpX3JlbGVhc2VfcmVnaW9u cyhkZXYpOworCisgb3V0X2Rpc2FibGU6CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CisKKyBv dXRfZnJlZToKKwlpZiAoaW5mby0+ZGV2aWNlX2RhdGEgIT0gTlVMTCkKKwkJcnRkbV9mcmVlKGlu Zm8tPmRldmljZV9kYXRhKTsKKworCXJ0ZG1fZnJlZShpbmZvKTsKKworCXJldHVybiAtRU5PREVW OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqICAgXGJyaWVmICBjaWZ4X3Bj aV9yZW1vdmUKKyAqCisgKiAgIFxwYXJhbSBbaW5dIGRldgorICoKKyAqICAgXHJldHVybiBOb25l CisgKgorICogICBcbm90ZSAgIENsb3NlIHRoZSBkZXZpY2UuCisgKiAgIFRoaXMgZnVuY3Rpb24g aXMgY2FsbGVkIHdoZW4gdGhlIGRldmljZSBzaGFsbCBiZSBjbG9zZWQuCisgKi8KKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGNpZnhfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2Rl diAqZGV2KQoreworCXN0cnVjdCBydGRtX2RldmljZSAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShk ZXYpOworCXN0cnVjdCBpb19pbmZvICpkZXZpY2VfZGF0YSA9IChzdHJ1Y3QgaW9faW5mbyAqKWlu Zm8tPmRldmljZV9kYXRhOworCXN0cnVjdCBweGFfZGV2X2luZm8gKnB4YV9pbmZvID0KKwkgICAg KHN0cnVjdCBweGFfZGV2X2luZm8gKilkZXZpY2VfZGF0YS0+cHJpdjsKKwlpbnQzMl90IHJldDsK KworCWlmIChpbmZvLT5kZXZpY2VfZGF0YSA9PSBOVUxMKSB7CisjaWZkZWYgREVCVUcKKwkJcnRk bV9wcmludGsKKwkJICAgICgiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IGRldmljZV9kYXRhIE5V TEwgcG9pbnRlclxuIik7CisjZW5kaWYgLyogREVCVUcgKi8KKwkJcmV0dXJuOworCX0KKworCWlm IChweGFfaW5mbyAhPSBOVUxMKSB7CisJCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwkJ aW93cml0ZTMyKDAsCisJCQkgICgoc3RydWN0IGlvX2luZm8gKilkZXZpY2VfZGF0YSktPm1lbVtE UE1fSU5ERVhdLgorCQkJICBpbnRlcm5hbF9hZGRyICsgRFBNX0hPU1RfSU5UX0VOMCk7CisKKwkJ aWYgKHB4YV9pbmZvLT5wbHggIT0gTlVMTCkKKwkJCWlvdW5tYXAoKHZvaWQgKilweGFfaW5mby0+ cGx4KTsKKworCQlydGRtX2ZyZWUoKHZvaWQgKilweGFfaW5mbyk7CisJfQorCisJLyogVW5yZWdp c3RlciBSVERNIGRldmljZSBkcml2ZXIgKi8KKwlyZXQgPSBydGRtX2Rldl91bnJlZ2lzdGVyKGlu Zm8sIDEwMDApOworCWlmIChyZXQgIT0gMCkgeworI2lmZGVmIERFQlVHCisJCXN3aXRjaCAocmV0 KSB7CisJCWNhc2UgLUVOT0RFVjoKKwkJCXJ0ZG1fcHJpbnRrKAorImNpZnggcnRkbSBkcml2ZXIg ZXJyb3IgOiBydGRtX2Rldl91bnJlZ2lzdGVyIGVycm9yIDogdGhlIGRldmljZSB3YXMgbm90IHJl Z2lzdGVyZWRcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgLUVBR0FJTjoKKwkJCXJ0ZG1fcHJpbnRr KAorImNpZnggcnRkbSBkcml2ZXIgZXJyb3IgOiBydGRtX2Rldl91bnJlZ2lzdGVyIGVycm9yIDog dGhlIGRldmljZSBpcyBidXN5IHdpdGggb3BlbiBpbnN0YW5jZXMgYW5kIDAgaGFzIGJlZW4gcGFz c2VkIGZvciBwb2xsX2RlbGF5XG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcnRkbV9w cmludGsoCisiY2lmeCBydGRtIGRyaXZlciBlcnJvciA6IHJ0ZG1fZGV2X3VucmVnaXN0ZXIgZXJy b3JcbiIpOworCQkJYnJlYWs7CisJCX0KKyNlbmRpZiAvKiBERUJVRyAqLworCisJCXJldHVybjsK Kwl9CisKKwlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRl dik7CisJcGNpX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisKKwlpb3VubWFwKCgoc3RydWN0IGlv X2luZm8gKilkZXZpY2VfZGF0YSktPm1lbVtEUE1fSU5ERVhdLmludGVybmFsX2FkZHIpOworCWlm ICgoKHN0cnVjdCBpb19pbmZvICopZGV2aWNlX2RhdGEpLT5tZW1bRVhUX01FTV9JTkRFWF0uaW50 ZXJuYWxfYWRkciAhPQorCSAgICAwKQorCQlpb3VubWFwKCgoc3RydWN0IGlvX2luZm8gKilkZXZp Y2VfZGF0YSktPm1lbVtFWFRfTUVNX0lOREVYXS4KKwkJCWludGVybmFsX2FkZHIpOworCisJLyog UmVsZWFzZSBzdHJ1Y3R1cmUgbWVtb3J5IGFsbG9jYXRpb24gKi8KKwlydGRtX2ZyZWUoaW5mby0+ ZGV2aWNlX2RhdGEpOworCXJ0ZG1fZnJlZShpbmZvKTsKKworCWlmIChjaWZ4X251bSA+IDApCisJ CWNpZnhfbnVtLS07Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogICBcYnJp ZWYgIGNpZnhfcGNpX2luaXQKKyAqCisgKiAgIFxyZXR1cm4gTm9uZQorICoKKyAqICAgXG5vdGUg ICBJdCBzaW1wbHkgcmVnaXN0ZXJzIHRoZSBSVERNIGRldmljZS4KKyAqICAgVGhpcyBmdW5jdGlv biBpcyBjYWxsZWQgd2hlbiB0aGUgbW9kdWxlIGlzIGxvYWRlZC4KKyAqLworLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworc3RhdGljIGludCBfX2luaXQgY2lmeF9wY2lfaW5pdCh2b2lkKQoreworCWNp ZnhfbnVtID0gMDsKKworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZjaWZ4X3BjaV9kcml2 ZXIpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqICAgXGJyaWVmICBjaWZ4 X3BjaV9leGl0CisgKgorICogICBccmV0dXJuIE5vbmUKKyAqCisgKiAgIFxub3RlICBJdCB1bnJl Z2lzdGVyIHRoZSBSVERNIGRldmljZS4KKyAqICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hl biB0aGUgbW9kdWxlIGlzIHVubG9hZGVkLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitz dGF0aWMgdm9pZCBfX2V4aXQgY2lmeF9wY2lfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVy X2RyaXZlcigmY2lmeF9wY2lfZHJpdmVyKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor LyohIFx9ICAgICBjaWZ4X3BjaV9Db3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCittb2R1bGVf aW5pdChjaWZ4X3BjaV9pbml0KTsKK21vZHVsZV9leGl0KGNpZnhfcGNpX2V4aXQpOworCisvKiBF bmQgb2YgZmlsZSA6IGNpZnhfcGNpLmMgKi8K