From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [v10.1 PATCH 5/5] drm/rockchip: cdn-dp: add cdn DP support for rk3399 Date: Wed, 10 Aug 2016 16:32:12 -0700 Message-ID: <1470871932-17419-1-git-send-email-zyw@rock-chips.com> References: <1470785557-21974-6-git-send-email-zyw@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1470785557-21974-6-git-send-email-zyw@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dianders@chromium.org, tfiga@chromium.org, heiko@sntech.de, yzq@rock-chips.com, groeck@chromium.org, myungjoo.ham@samsung.com, cw00.choi@samsung.com, wulf@rock-chips.com, marcheu@chromium.org Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, zyw@rock-chips.com, linux-arm-kernel@lists.infradead.org List-Id: linux-rockchip.vger.kernel.org QWRkIHN1cHBvcnQgZm9yIGNkbiBEUCBjb250cm9sbGVyIHdoaWNoIGlzIGVtYmVkZGVkIGluIHRo ZSByazMzOTkKU29Dcy4gVGhlIERQIGlzIGNvbXBsaWFudCB3aXRoIERpc3BsYXlQb3J0IFNwZWNp ZmljYXRpb24sClZlcnNpb24gMS4zLCBUaGlzIElQIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgcm9j a2NoaXAgdHlwZS1jIFBIWSBJUC4KVGhlcmUgaXMgYSB1Q1BVIGluIERQIGNvbnRyb2xsZXIsIGl0 IG5lZWQgYSBmaXJtd2FyZSB0byB3b3JrLApwbGVhc2UgcHV0IHRoZSBmaXJtd2FyZSBmaWxlIHRv IC9saWIvZmlybXdhcmUvcm9ja2NoaXAvZHB0eC5iaW4uIFRoZQp1Q1BVIGluIGNoYXJnZSBvZiBh dXggY29tbXVuaWNhdGlvbiBhbmQgbGluayB0cmFpbmluZywgdGhlIGhvc3QgdXNlCm1haWxib3gg dG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgdWNwdS4KVGhlIGRjbGsgcGluX3BvbCBvZiB2b3AgbXVz dCBub3QgYmUgaW52ZXJ0IGZvciBEUC4KClNpZ25lZC1vZmYtYnk6IENocmlzIFpob25nIDx6eXdA cm9jay1jaGlwcy5jb20+ClJldmlld2VkLWJ5OiBTZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9taXVt Lm9yZz4KQWNrZWQtYnk6IE1hcmsgWWFvIDxtYXJrLnlhb0Byb2NrLWNoaXBzLmNvbT4KCi0tLQoK Q2hhbmdlcyBpbiB2MTAuMToKLSBzdXBwb3J0IHJlYWQgc2luayBjb3VudCBmcm9tIERQQ0QKCkNo YW5nZXMgaW4gdjEwOgotIGNvbnRyb2wgdGhlIGdyZl9jbGsgaW4gRFAKCkNoYW5nZXMgaW4gdjk6 Ci0gZG8gbm90IG5lZWQgcmVzZXQgdGhlIHBoeSBiZWZvcmUgcG93ZXJfb24KLSBhZGQgYSBvcmll bnRhdGlvbiBpbmZvcm1hdGlvbiBmb3Igc2V0X2NhcGFiaWxpdHkKLSByZXRyeSB0byByZWFkIGRw Y2QgaW4gMTAgc2Vjb25kcwoKQ2hhbmdlcyBpbiB2ODoKLSBvcHRpbWl6YXRpb24gdGhlIGVyciBs b2cKCkNoYW5nZXMgaW4gdjc6Ci0gc3VwcG9ydCBmaXJtd2FyZSBzdGFuZGJ5IHdoZW4gbm8gZHB0 eCBjb25uZWN0aW9uCi0gb3B0aW1pemF0aW9uIHRoZSBjYWxjdWxhdGlvbiBvZiB0dSBzaXplIGFu ZCB2YWxpZCBzeW1ib2wKCkNoYW5nZXMgaW4gdjY6Ci0gYWRkIGEgcG9ydCBzdHJ1Y3QKLSBzZWxl Y3QgU05EX1NPQ19IRE1JX0NPREVDCi0gZm9yY2UgcmVzZXQgdGhlIHBoeSB3aGVuIGhwZCBkZXRl Y3RlZAoKQ2hhbmdlcyBpbiB2NToKLSBhbHBoYWJldGljYWwgb3JkZXIKLSBkbyBub3QgdXNlIGxv bmcsIHVzZSB1MzIgb3IgdTY0Ci0gcmV0dXJuIE1PREVfQ0xPQ0tfSElHSCB3aGVuIHJlcXVlc3Rl ZCA+IGFjdHVhbAotIE9wdGltaXplZCBDb2RpbmcgU3R5bGUKLSBhZGQgYSBmb3JtdWxhIHRvIGdl dCBiZXR0ZXIgdHUgc2l6ZSBhbmQgc3ltYm9sIHZhbHVlLgotIG1vZGlmeSBhY2NvcmRpbmcgdG8g U2VhbiBQYXVsJ3MgY29tbWVudHMKLSBmaXhlZCB0aGUgZndfd2FpdCBhbHdheXMgMAoKQ2hhbmdl cyBpbiB2NDoKLSB1c2UgcGh5IGZyYW1ld29yayB0byBjb250cm9sIERQIHBoeQotIHN1cHBvcnQg MiBwaHlzCgpDaGFuZ2VzIGluIHYzOgotIHVzZSBFWFRDT05fRElTUF9EUCBhbmQgRVhUQ09OX0RJ U1BfRFBfQUxUIGNhYmxlIHRvIGdldCBkcCBwb3J0IHN0YXRlLgotIHJlc2V0IHNwZGlmIGJlZm9y ZSBjb25maWcgaXQKLSBtb2RpZnkgdGhlIGZpcm13YXJlIGNsayB0byAxMDBNaHoKLSByZXRyeSBs b2FkIGZpcm13YXJlIGlmIGZ3IGZpbGUgaXMgcmVxdWVzdGVkIHRvbyBlYXJseQoKQ2hhbmdlcyBp biB2MjoKLSBBbHBoYWJldGljIG9yZGVyCi0gcmVtb3ZlIGV4Y2VzcyBlcnJvciBtZXNzYWdlCi0g dXNlIGRlZmluZSBjbGtfcmF0ZQotIGNoZWNrIGFsbCByZXR1cm4gdmFsdWUKLSByZW1vdmUgZGV2 X3NldF9uYW1lKGRwLT5kZXYsICJjZG4tZHAiKTsKLSB1c2Ugc2NoZWR1bGVfZGVsYXllZF93b3Jr Ci0gcmVtb3ZlIG5ldmVyLWNhbGxlZCBmdW5jdGlvbnMKLSByZW1vdmUgc29tZSB1bm5lY2Vzc2Fy eSAoKQoKQ2hhbmdlcyBpbiB2MToKLSB1c2UgZXh0Y29uIEFQSQotIHVzZSBoZG1pLWNvZGVjIGZv ciB0aGUgRFAgQXNvYwotIGRvIG5vdCBpbml0aWFsaXplIHRoZSAicmV0IgotIHByaW50ayBhIGVy ciBsb2cgd2hlbiBkcm1fb2ZfZW5jb2Rlcl9hY3RpdmVfZW5kcG9pbnRfaWQKLSBtb2RpZnkgdGhl IGRjbGsgcGluX3BvbCB0byBhIHNpbmdsZSBsaW5lCgogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L0tjb25maWcgICAgICAgICAgICB8ICAxMCArCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFr ZWZpbGUgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAt Y29yZS5jICAgICAgfCA5MzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuaCAgICAgIHwgMTA0ICsrKwogZHJpdmVycy9ncHUv ZHJtL3JvY2tjaGlwL2Nkbi1kcC1yZWcuYyAgICAgICB8IDk1OSArKysrKysrKysrKysrKysrKysr KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5oICAgICAgIHwg NDgyICsrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJt X3ZvcC5jIHwgIDEzICstCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3Zv cC5oIHwgICA5ICsKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF92b3BfcmVnLmMg fCAgIDIgKwogOSBmaWxlcyBjaGFuZ2VkLCAyNTE0IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1j b3JlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRw LWNvcmUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4t ZHAtcmVnLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2Ru LWRwLXJlZy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcg Yi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZwppbmRleCBkMzBiZGMzLi4yMGFhYWZl IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZworKysgYi9kcml2 ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZwpAQCAtMjUsNiArMjUsMTYgQEAgY29uZmlnIFJP Q0tDSElQX0FOQUxPR0lYX0RQCiAJICBmb3IgdGhlIEFuYWxvZ2l4IENvcmUgRFAgZHJpdmVyLiBJ ZiB5b3Ugd2FudCB0byBlbmFibGUgRFAKIAkgIG9uIFJLMzI4OCBiYXNlZCBTb0MsIHlvdSBzaG91 bGQgc2VsZXQgdGhpcyBvcHRpb24uCiAKK2NvbmZpZyBST0NLQ0hJUF9DRE5fRFAKKyAgICAgICAg dHJpc3RhdGUgIlJvY2tjaGlwIGNkbiBEUCIKKyAgICAgICAgZGVwZW5kcyBvbiBEUk1fUk9DS0NI SVAKKwlzZWxlY3QgU05EX1NPQ19IRE1JX0NPREVDIGlmIFNORF9TT0MKKyAgICAgICAgaGVscAor CSAgVGhpcyBzZWxlY3RzIHN1cHBvcnQgZm9yIFJvY2tjaGlwIFNvQyBzcGVjaWZpYyBleHRlbnNp b25zCisJICBmb3IgdGhlIGNkbiBEUCBkcml2ZXIuIElmIHlvdSB3YW50IHRvIGVuYWJsZSBEcCBv bgorCSAgUkszMzk5IGJhc2VkIFNvQywgeW91IHNob3VsZCBzZWxlY3QgdGhpcworCSAgb3B0aW9u LgorCiBjb25maWcgUk9DS0NISVBfRFdfSERNSQogICAgICAgICB0cmlzdGF0ZSAiUm9ja2NoaXAg c3BlY2lmaWMgZXh0ZW5zaW9ucyBmb3IgU3lub3BzeXMgRFcgSERNSSIKICAgICAgICAgZGVwZW5k cyBvbiBEUk1fUk9DS0NISVAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9N YWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZQppbmRleCAwNWQwNzEz Li5hYmRlY2Q1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUK KysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCkBAIC03LDYgKzcsNyBAQCBy b2NrY2hpcGRybS15IDo9IHJvY2tjaGlwX2RybV9kcnYubyByb2NrY2hpcF9kcm1fZmIubyBcCiBy b2NrY2hpcGRybS0kKENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKSArPSByb2NrY2hpcF9kcm1f ZmJkZXYubwogCiBvYmotJChDT05GSUdfUk9DS0NISVBfQU5BTE9HSVhfRFApICs9IGFuYWxvZ2l4 X2RwLXJvY2tjaGlwLm8KK29iai0kKENPTkZJR19ST0NLQ0hJUF9DRE5fRFApICs9IGNkbi1kcC1j b3JlLm8gY2RuLWRwLXJlZy5vCiBvYmotJChDT05GSUdfUk9DS0NISVBfRFdfSERNSSkgKz0gZHdf aGRtaS1yb2NrY2hpcC5vCiBvYmotJChDT05GSUdfUk9DS0NISVBfRFdfTUlQSV9EU0kpICs9IGR3 LW1pcGktZHNpLm8KIG9iai0kKENPTkZJR19ST0NLQ0hJUF9JTk5PX0hETUkpICs9IGlubm9faGRt aS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYyBi L2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmY5YTVhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYwpAQCAtMCwwICsxLDkzNyBAQAorLyoKKyAqIENv cHlyaWdodCAoQykgRnV6aG91IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENvLkx0ZAorICogQXV0aG9y OiBDaHJpcyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUg aXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAq IExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVk IHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lu Y2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVs cGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9vZi5o PgorCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+ CisjaW5jbHVkZSA8bGludXgvZXh0Y29uLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4K KyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgorCisj aW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4K KworI2luY2x1ZGUgPHNvdW5kL2hkbWktY29kZWMuaD4KKworI2luY2x1ZGUgImNkbi1kcC1jb3Jl LmgiCisjaW5jbHVkZSAiY2RuLWRwLXJlZy5oIgorI2luY2x1ZGUgInJvY2tjaGlwX2RybV92b3Au aCIKKworI2RlZmluZSBjb25uZWN0b3JfdG9fZHAoYykgXAorCQljb250YWluZXJfb2YoYywgc3Ry dWN0IGNkbl9kcF9kZXZpY2UsIGNvbm5lY3RvcikKKworI2RlZmluZSBlbmNvZGVyX3RvX2RwKGMp IFwKKwkJY29udGFpbmVyX29mKGMsIHN0cnVjdCBjZG5fZHBfZGV2aWNlLCBlbmNvZGVyKQorCisv KiBkcCBncmYgcmVnaXN0ZXIgb2Zmc2V0ICovCisjZGVmaW5lIEdSRl9TT0NfQ09OOQkJMHg2MjI0 CisjZGVmaW5lIERQX1NFTF9WT1BfTElUCQlCSVQoMTIpCisjZGVmaW5lIEdSRl9TT0NfQ09OMjYJ CTB4NjI2OAorI2RlZmluZSBVUEhZX1NFTF9CSVQJCTMKKyNkZWZpbmUgVVBIWV9TRUxfTUFTSwkJ QklUKDE5KQorI2RlZmluZSBEUFRYX0hQRF9TRUwJCSgzIDw8IDEyKQorI2RlZmluZSBEUFRYX0hQ RF9ERUwJCSgyIDw8IDEyKQorI2RlZmluZSBEUFRYX0hQRF9TRUxfTUFTSwkoMyA8PCAyOCkKKwor I2RlZmluZSBNQVhfRldfV0FJVF9TRUNTCTY0CisjZGVmaW5lIENETl9EUF9GSVJNV0FSRQkJInJv Y2tjaGlwL2RwdHguYmluIgorCitzdHJ1Y3QgY2RuX2RwX2RhdGEgeworCXU4IG1heF9waHk7Cit9 OworCitzdHJ1Y3QgY2RuX2RwX2RhdGEgcmszMzk5X2Nkbl9kcCA9IHsKKwkubWF4X3BoeSA9IDIs Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBjZG5fZHBfZHRfaWRzW10g PSB7CisJeyAuY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMzOTktY2RuLWRwIiwKKwkJLmRhdGEg PSAodm9pZCAqKSZyazMzOTlfY2RuX2RwIH0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFC TEUob2YsIGNkbl9kcF9kdF9pZHMpOworCitzdGF0aWMgaW50IGNkbl9kcF9ncmZfd3JpdGUoc3Ry dWN0IGNkbl9kcF9kZXZpY2UgKmRwLAorCQkJICAgIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVk IGludCB2YWwpCit7CisJaW50IHJldDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkcC0+ Z3JmX2Nsayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJGYWlsZWQgdG8gcHJl cGFyZV9lbmFibGUgZ3JmIGNsb2NrXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBy ZWdtYXBfd3JpdGUoZHAtPmdyZiwgcmVnLCB2YWwpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihk cC0+ZGV2LCAiQ291bGQgbm90IHdyaXRlIHRvIEdSRjogJWRcbiIsIHJldCk7CisJCXJldHVybiBy ZXQ7CisJfQorCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRwLT5ncmZfY2xrKTsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9jbGtfZW5hYmxlKHN0cnVjdCBjZG5fZHBfZGV2 aWNlICpkcCkKK3sKKwlpbnQgcmV0OworCXUzMiByYXRlOworCisJcmV0ID0gY2xrX3ByZXBhcmVf ZW5hYmxlKGRwLT5wY2xrKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJj YW5ub3QgZW5hYmxlIGRwIHBjbGsgJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3BjbGs7CisJfQor CisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRwLT5jb3JlX2Nsayk7CisJaWYgKHJldCA8IDAp IHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiY2Fubm90IGVuYWJsZSBjb3JlX2NsayAlZFxuIiwgcmV0 KTsKKwkJZ290byBlcnJfY29yZV9jbGs7CisJfQorCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShkcC0+ Y29yZV9jbGspOworCWlmIChyYXRlIDwgMCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJnZXQgY2xr IHJhdGUgZmFpbGVkOiAlZFxuIiwgcmF0ZSk7CisJCWdvdG8gZXJyX3NldF9yYXRlOworCX0KKwor CWNkbl9kcF9zZXRfZndfY2xrKGRwLCByYXRlKTsKKworCXJldHVybiAwOworCitlcnJfc2V0X3Jh dGU6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRwLT5jb3JlX2Nsayk7CitlcnJfY29yZV9jbGs6 CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRwLT5wY2xrKTsKK2Vycl9wY2xrOgorCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCitjZG5fZHBfY29ubmVj dG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQor eworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGNvbm5lY3Rvcl90b19kcChjb25uZWN0b3Ip OworCisJcmV0dXJuIGRwLT5ocGRfc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBjZG5fZHBfY29u bmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlkcm1f Y29ubmVjdG9yX3VucmVnaXN0ZXIoY29ubmVjdG9yKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAo Y29ubmVjdG9yKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGNkbl9k cF9hdG9taWNfY29ubmVjdG9yX2Z1bmNzID0geworCS5kcG1zID0gZHJtX2F0b21pY19oZWxwZXJf Y29ubmVjdG9yX2RwbXMsCisJLmRldGVjdCA9IGNkbl9kcF9jb25uZWN0b3JfZGV0ZWN0LAorCS5k ZXN0cm95ID0gY2RuX2RwX2Nvbm5lY3Rvcl9kZXN0cm95LAorCS5maWxsX21vZGVzID0gZHJtX2hl bHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5yZXNldCA9IGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9h dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95 X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9Owor CitzdGF0aWMgaW50IGNkbl9kcF9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gY29ubmVjdG9y X3RvX2RwKGNvbm5lY3Rvcik7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJaW50IHJldCA9IDA7CisK KwllZGlkID0gZHJtX2RvX2dldF9lZGlkKGNvbm5lY3RvciwgY2RuX2RwX2dldF9lZGlkX2Jsb2Nr LCBkcCk7CisJaWYgKGVkaWQpIHsKKwkJZGV2X2RiZyhkcC0+ZGV2LCAiZ290IGVkaWQ6IHdpZHRo WyVkXSB4IGhlaWdodFslZF1cbiIsCisJCQllZGlkLT53aWR0aF9jbSwgZWRpZC0+aGVpZ2h0X2Nt KTsKKworCQlkcC0+c2lua19oYXNfYXVkaW8gPSBkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8oZWRp ZCk7CisJCXJldCA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOworCQlpZiAo cmV0KSB7CisJCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVj dG9yLAorCQkJCQkJCQllZGlkKTsKKwkJCWRybV9lZGlkX3RvX2VsZChjb25uZWN0b3IsIGVkaWQp OworCQl9CisJCWtmcmVlKGVkaWQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgZHJtX2VuY29kZXIgKgorCWNkbl9kcF9jb25uZWN0b3JfYmVzdF9lbmNvZGVyKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw ID0gY29ubmVjdG9yX3RvX2RwKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gJmRwLT5lbmNvZGVyOwor fQorCitzdGF0aWMgaW50IGNkbl9kcF9jb25uZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSkKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBjb25uZWN0b3JfdG9fZHAoY29u bmVjdG9yKTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqZGlzcGxheV9pbmZvID0gJmRwLT5j b25uZWN0b3IuZGlzcGxheV9pbmZvOworCXUzMiByZXF1ZXN0ZWQgPSBtb2RlLT5jbG9jayAqIGRp c3BsYXlfaW5mby0+YnBjICogMyAvIDEwMDA7CisJdTMyIGFjdHVhbCwgcmF0ZSwgc2lua19tYXgs IHNvdXJjZV9tYXggPSAwOworCXU4IGxhbmVzLCBpOworCisJLyogZmluZCB0aGUgcnVubmluZyBw b3J0ICovCisJZm9yIChpID0gMDsgaSA8IGRwLT5wb3J0czsgaSsrKSB7CisJCWlmIChkcC0+cG9y dFtpXS0+cGh5X3N0YXR1cykgeworCQkJc291cmNlX21heCA9IGRwLT5wb3J0W2ldLT5jYXBfbGFu ZXM7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNpbmtfbWF4ID0gZHJtX2RwX21heF9sYW5lX2Nv dW50KGRwLT5kcGNkKTsKKwlsYW5lcyA9IG1pbihzb3VyY2VfbWF4LCBzaW5rX21heCk7CisKKwlz b3VyY2VfbWF4ID0gZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKENETl9EUF9NQVhfTElOS19S QVRFKTsKKwlzaW5rX21heCA9IGRybV9kcF9tYXhfbGlua19yYXRlKGRwLT5kcGNkKTsKKwlyYXRl ID0gbWluKHNvdXJjZV9tYXgsIHNpbmtfbWF4KTsKKworCWFjdHVhbCA9IHJhdGUgKiBsYW5lcyAv IDEwMDsKKworCS8qIGVmZmljaWVuY3kgaXMgYWJvdXQgMC44ICovCisJYWN0dWFsID0gYWN0dWFs ICogOCAvIDEwOworCisJaWYgKHJlcXVlc3RlZCA+IGFjdHVhbCkgeworCQlkZXZfZGJnKGRwLT5k ZXYsICJyZXF1ZXN0ZWQ9JWQsIGFjdHVhbD0lZCwgY2xvY2s9JWRcbiIsCisJCQlyZXF1ZXN0ZWQs IGFjdHVhbCwgbW9kZS0+Y2xvY2spOworCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOworCX0KKwor CXJldHVybiBNT0RFX09LOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVy X2Z1bmNzIGNkbl9kcF9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSBj ZG5fZHBfY29ubmVjdG9yX2dldF9tb2RlcywKKwkuYmVzdF9lbmNvZGVyID0gY2RuX2RwX2Nvbm5l Y3Rvcl9iZXN0X2VuY29kZXIsCisJLm1vZGVfdmFsaWQgPSBjZG5fZHBfY29ubmVjdG9yX21vZGVf dmFsaWQsCit9OworCitzdGF0aWMgdm9pZCBjZG5fZHBfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBlbmNvZGVyX3RvX2Rw KGVuY29kZXIpOworCWludCByZXQ7CisKKwlyZXQgPSBjZG5fZHBfdHJhaW5pbmdfc3RhcnQoZHAp OworCWlmIChyZXQpCisJCXJldHVybjsKKworCXJldCA9IGNkbl9kcF9nZXRfdHJhaW5pbmdfc3Rh dHVzKGRwKTsKKwlpZiAocmV0KQorCQlyZXR1cm47CisKKwlkZXZfaW5mbyhkcC0+ZGV2LCAicmF0 ZToweCV4LCBsYW5lczolZFxuIiwKKwkJIGRwLT5saW5rLnJhdGUsIGRwLT5saW5rLm51bV9sYW5l cyk7CisKKwlpZiAoY2RuX2RwX3NldF92aWRlb19zdGF0dXMoZHAsIENPTlRST0xfVklERU9fSURM RSkpCisJCXJldHVybjsKKworCWlmIChjZG5fZHBfY29uZmlnX3ZpZGVvKGRwKSkKKwkJcmV0dXJu OworCisJaWYgKGNkbl9kcF9zZXRfdmlkZW9fc3RhdHVzKGRwLCBDT05UUk9MX1ZJREVPX1ZBTElE KSkKKwkJcmV0dXJuOworCisJZHAtPmRwbXNfbW9kZSA9IERSTV9NT0RFX0RQTVNfT047Cit9CisK K3N0YXRpYyB2b2lkIGNkbl9kcF9lbmNvZGVyX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAq ZW5jb2RlciwKKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAg IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZCkKK3sKKwlzdHJ1Y3QgY2RuX2RwX2Rl dmljZSAqZHAgPSBlbmNvZGVyX3RvX2RwKGVuY29kZXIpOworCXN0cnVjdCBkcm1fZGlzcGxheV9p bmZvICpkaXNwbGF5X2luZm8gPSAmZHAtPmNvbm5lY3Rvci5kaXNwbGF5X2luZm87CisJc3RydWN0 IHJvY2tjaGlwX2NydGNfc3RhdGUgKnN0YXRlOworCXN0cnVjdCB2aWRlb19pbmZvICp2aWRlbyA9 ICZkcC0+dmlkZW9faW5mbzsKKwlpbnQgcmV0LCB2YWw7CisKKwlzd2l0Y2ggKGRpc3BsYXlfaW5m by0+YnBjKSB7CisJY2FzZSAxNjoKKwljYXNlIDEyOgorCWNhc2UgMTA6CisJCXZpZGVvLT5jb2xv cl9kZXB0aCA9IDEwOworCQlicmVhazsKKwljYXNlIDY6CisJCXZpZGVvLT5jb2xvcl9kZXB0aCA9 IDY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZpZGVvLT5jb2xvcl9kZXB0aCA9IDg7CisJCWJy ZWFrOworCX0KKworCXZpZGVvLT5jb2xvcl9mbXQgPSBQWExfUkdCOworCisJdmlkZW8tPnZfc3lu Y19wb2xhcml0eSA9ICEhKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZTkMpOworCXZp ZGVvLT5oX3N5bmNfcG9sYXJpdHkgPSAhIShtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTkhT WU5DKTsKKworCXJldCA9IGRybV9vZl9lbmNvZGVyX2FjdGl2ZV9lbmRwb2ludF9pZChkcC0+ZGV2 LT5vZl9ub2RlLCBlbmNvZGVyKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRwLT5kZXYs ICJDb3VsZCBub3QgZ2V0IHZvcCBpZCwgJWQiLCByZXQpOworCQlyZXR1cm47CisJfQorCisJZGV2 X2RiZyhkcC0+ZGV2LCAidm9wICVzIG91dHB1dCB0byBjZG4tZHBcbiIsIChyZXQpID8gIkxJVCIg OiAiQklHIik7CisJc3RhdGUgPSB0b19yb2NrY2hpcF9jcnRjX3N0YXRlKGVuY29kZXItPmNydGMt PnN0YXRlKTsKKwlpZiAocmV0KSB7CisJCXZhbCA9IERQX1NFTF9WT1BfTElUIHwgKERQX1NFTF9W T1BfTElUIDw8IDE2KTsKKwkJc3RhdGUtPm91dHB1dF9tb2RlID0gUk9DS0NISVBfT1VUX01PREVf UDg4ODsKKwl9IGVsc2UgeworCQl2YWwgPSBEUF9TRUxfVk9QX0xJVCA8PCAxNjsKKwkJc3RhdGUt Pm91dHB1dF9tb2RlID0gUk9DS0NISVBfT1VUX01PREVfQUFBQTsKKwl9CisKKwlyZXQgPSBjZG5f ZHBfZ3JmX3dyaXRlKGRwLCBHUkZfU09DX0NPTjksIHZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJu OworCisJbWVtY3B5KCZkcC0+bW9kZSwgYWRqdXN0ZWQsIHNpemVvZigqbW9kZSkpOworfQorCitz dGF0aWMgdm9pZCBjZG5fZHBfZW5jb2Rlcl9lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGVuY29kZXJfdG9fZHAoZW5jb2Rl cik7CisKKwlpZiAoZHAtPmRwbXNfbW9kZSAhPSBEUk1fTU9ERV9EUE1TX09OKQorCQljZG5fZHBf Y29tbWl0KGVuY29kZXIpOworfQorCitzdGF0aWMgdm9pZCBjZG5fZHBfZW5jb2Rlcl9kaXNhYmxl KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAq ZHAgPSBlbmNvZGVyX3RvX2RwKGVuY29kZXIpOworCisJZHAtPmRwbXNfbW9kZSA9IERSTV9NT0RF X0RQTVNfT0ZGOworfQorCitzdGF0aWMgaW50CitjZG5fZHBfZW5jb2Rlcl9hdG9taWNfY2hlY2so c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9z dGF0ZSkKK3sKKwlzdHJ1Y3Qgcm9ja2NoaXBfY3J0Y19zdGF0ZSAqcyA9IHRvX3JvY2tjaGlwX2Ny dGNfc3RhdGUoY3J0Y19zdGF0ZSk7CisKKwlzLT5vdXRwdXRfbW9kZSA9IFJPQ0tDSElQX09VVF9N T0RFX0FBQUE7CisJcy0+b3V0cHV0X3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBv cnQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJf ZnVuY3MgY2RuX2RwX2VuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5tb2RlX3NldCA9IGNkbl9k cF9lbmNvZGVyX21vZGVfc2V0LAorCS5lbmFibGUgPSBjZG5fZHBfZW5jb2Rlcl9lbmFibGUsCisJ LmRpc2FibGUgPSBjZG5fZHBfZW5jb2Rlcl9kaXNhYmxlLAorCS5hdG9taWNfY2hlY2sgPSBjZG5f ZHBfZW5jb2Rlcl9hdG9taWNfY2hlY2ssCit9OworCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVy X2Z1bmNzIGNkbl9kcF9lbmNvZGVyX2Z1bmNzID0geworCS5kZXN0cm95ID0gZHJtX2VuY29kZXJf Y2xlYW51cCwKK307CisKK3N0YXRpYyBpbnQgY2RuX2RwX2Zpcm13YXJlX2luaXQoc3RydWN0IGNk bl9kcF9kZXZpY2UgKmRwKQoreworCWludCByZXQ7CisJY29uc3QgdTMyICppcmFtX2RhdGEsICpk cmFtX2RhdGE7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IGRwLT5mdzsKKwljb25zdCBz dHJ1Y3QgY2RuX2Zpcm13YXJlX2hlYWRlciAqaGRyOworCisJaGRyID0gKHN0cnVjdCBjZG5fZmly bXdhcmVfaGVhZGVyICopZnctPmRhdGE7CisJaWYgKGZ3LT5zaXplICE9IGxlMzJfdG9fY3B1KGhk ci0+c2l6ZV9ieXRlcykpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiZmlybXdhcmUgaXMgaW52YWxp ZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlyYW1fZGF0YSA9IChjb25zdCB1MzIg KikoZnctPmRhdGEgKyBoZHItPmhlYWRlcl9zaXplKTsKKwlkcmFtX2RhdGEgPSAoY29uc3QgdTMy ICopKGZ3LT5kYXRhICsgaGRyLT5oZWFkZXJfc2l6ZSArIGhkci0+aXJhbV9zaXplKTsKKworCXJl dCA9IGNkbl9kcF9sb2FkX2Zpcm13YXJlKGRwLCBpcmFtX2RhdGEsIGhkci0+aXJhbV9zaXplLAor CQkJCSAgIGRyYW1fZGF0YSwgaGRyLT5kcmFtX3NpemUpOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwlyZXQgPSBjZG5fZHBfc2V0X2Zpcm13YXJlX2FjdGl2ZShkcCwgdHJ1ZSk7CisJaWYg KHJldCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJhY3RpdmUgdWNwdSBmYWlsZWQ6ICVkXG4iLCBy ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiBjZG5fZHBfZXZlbnRfY29uZmlnKGRw KTsKK30KKworc3RhdGljIGludCBjZG5fZHBfaW5pdChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAp Cit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHAtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUg Km5wID0gZGV2LT5vZl9ub2RlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19w bGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0Owor CisJZHAtPmdyZiA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUobnAsICJyb2NrY2hp cCxncmYiKTsKKwlpZiAoSVNfRVJSKGRwLT5ncmYpKSB7CisJCWRldl9lcnIoZGV2LCAiY2RuLWRw IG5lZWRzIHJvY2tjaGlwLGdyZiBwcm9wZXJ0eVxuIik7CisJCXJldHVybiBQVFJfRVJSKGRwLT5n cmYpOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNF X01FTSwgMCk7CisJZHAtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwor CWlmIChJU19FUlIoZHAtPnJlZ3MpKSB7CisJCWRldl9lcnIoZGV2LCAiaW9yZW1hcCByZWcgZmFp bGVkXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHAtPnJlZ3MpOworCX0KKworCWRwLT5jb3JlX2Ns ayA9IGRldm1fY2xrX2dldChkZXYsICJjb3JlLWNsayIpOworCWlmIChJU19FUlIoZHAtPmNvcmVf Y2xrKSkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgY29yZV9jbGtfZHBcbiIpOworCQly ZXR1cm4gUFRSX0VSUihkcC0+Y29yZV9jbGspOworCX0KKworCWRwLT5wY2xrID0gZGV2bV9jbGtf Z2V0KGRldiwgInBjbGsiKTsKKwlpZiAoSVNfRVJSKGRwLT5wY2xrKSkgeworCQlkZXZfZXJyKGRl diwgImNhbm5vdCBnZXQgcGNsa1xuIik7CisJCXJldHVybiBQVFJfRVJSKGRwLT5wY2xrKTsKKwl9 CisKKwlkcC0+c3BkaWZfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInNwZGlmIik7CisJaWYgKElT X0VSUihkcC0+c3BkaWZfY2xrKSkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgc3BkaWZf Y2xrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHAtPnNwZGlmX2Nsayk7CisJfQorCisJZHAtPmdy Zl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZ3JmIik7CisJaWYgKElTX0VSUihkcC0+Z3JmX2Ns aykpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IGdyZiBjbGtcbiIpOworCQlyZXR1cm4g UFRSX0VSUihkcC0+Z3JmX2Nsayk7CisJfQorCisJZHAtPnNwZGlmX3JzdCA9IGRldm1fcmVzZXRf Y29udHJvbF9nZXQoZGV2LCAic3BkaWYiKTsKKwlpZiAoSVNfRVJSKGRwLT5zcGRpZl9yc3QpKSB7 CisJCWRldl9lcnIoZGV2LCAibm8gc3BkaWYgcmVzZXQgY29udHJvbCBmb3VuZFxuIik7CisJCXJl dHVybiBQVFJfRVJSKGRwLT5zcGRpZl9yc3QpOworCX0KKworCWRwLT5kcG1zX21vZGUgPSBEUk1f TU9ERV9EUE1TX09GRjsKKworCXJldCA9IGNkbl9kcF9jbGtfZW5hYmxlKGRwKTsKKwlpZiAocmV0 IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWNkbl9kcF9jbG9ja19yZXNldChkcCk7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBjZG5fZHBfYXVkaW9faHdfcGFyYW1zKHN0cnVjdCBkZXZp Y2UgKmRldiwgIHZvaWQgKmRhdGEsCisJCQkJICBzdHJ1Y3QgaGRtaV9jb2RlY19kYWlmbXQgKmRh aWZtdCwKKwkJCQkgIHN0cnVjdCBoZG1pX2NvZGVjX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVj dCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBhdWRp b19pbmZvIGF1ZGlvID0geworCQkuc2FtcGxlX3dpZHRoID0gcGFyYW1zLT5zYW1wbGVfd2lkdGgs CisJCS5zYW1wbGVfcmF0ZSA9IHBhcmFtcy0+c2FtcGxlX3JhdGUsCisJCS5jaGFubmVscyA9IHBh cmFtcy0+Y2hhbm5lbHMsCisJfTsKKwlpbnQgcmV0OworCisJaWYgKCFkcC0+ZW5jb2Rlci5jcnRj KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXN3aXRjaCAoZGFpZm10LT5mbXQpIHsKKwljYXNlIEhE TUlfSTJTOgorCQlhdWRpby5mb3JtYXQgPSBBRk1UX0kyUzsKKwkJYnJlYWs7CisJY2FzZSBIRE1J X1NQRElGOgorCQlhdWRpby5mb3JtYXQgPSBBRk1UX1NQRElGOworCQlicmVhazsKKwlkZWZhdWx0 OgorCQlkZXZfZXJyKGRldiwgIiVzOiBJbnZhbGlkIGZvcm1hdCAlZFxuIiwgX19mdW5jX18sIGRh aWZtdC0+Zm10KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gY2RuX2RwX2F1ZGlv X2NvbmZpZyhkcCwgJmF1ZGlvKTsKKwlpZiAoIXJldCkKKwkJZHAtPmF1ZGlvX2luZm8gPSBhdWRp bzsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNkbl9kcF9hdWRpb19zaHV0ZG93 bihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNkbl9kcF9kZXZp Y2UgKmRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldDsKKworCWlmICghZHAtPmVu Y29kZXIuY3J0YykKKwkJcmV0dXJuOworCisJcmV0ID0gY2RuX2RwX2F1ZGlvX3N0b3AoZHAsICZk cC0+YXVkaW9faW5mbyk7CisJaWYgKCFyZXQpCisJCWRwLT5hdWRpb19pbmZvLmZvcm1hdCA9IEFG TVRfVU5VU0VEOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9hdWRpb19kaWdpdGFsX211dGUoc3Ry dWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJCSAgICAgYm9vbCBlbmFibGUpCit7CisJ c3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAo IWRwLT5lbmNvZGVyLmNydGMpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIGNkbl9kcF9h dWRpb19tdXRlKGRwLCBlbmFibGUpOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9hdWRpb19nZXRf ZWxkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQl1OCAqYnVmLCBzaXplX3Qg bGVuKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp OworCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9ICZkcC0+ZW5jb2Rlci5kZXYtPm1v ZGVfY29uZmlnOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJaW50IHJldCA9 IC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZjb25maWctPm11dGV4KTsKKwlsaXN0X2Zvcl9lYWNo X2VudHJ5KGNvbm5lY3RvciwgJmNvbmZpZy0+Y29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaWYg KCZkcC0+ZW5jb2RlciA9PSBjb25uZWN0b3ItPmVuY29kZXIpIHsKKwkJCW1lbWNweShidWYsIGNv bm5lY3Rvci0+ZWxkLAorCQkJICAgICAgIG1pbihzaXplb2YoY29ubmVjdG9yLT5lbGQpLCBsZW4p KTsKKwkJCXJldCA9IDA7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZjb25maWctPm11dGV4KTsK KworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRtaV9jb2RlY19vcHMg YXVkaW9fY29kZWNfb3BzID0geworCS5od19wYXJhbXMgPSBjZG5fZHBfYXVkaW9faHdfcGFyYW1z LAorCS5hdWRpb19zaHV0ZG93biA9IGNkbl9kcF9hdWRpb19zaHV0ZG93biwKKwkuZGlnaXRhbF9t dXRlID0gY2RuX2RwX2F1ZGlvX2RpZ2l0YWxfbXV0ZSwKKwkuZ2V0X2VsZCA9IGNkbl9kcF9hdWRp b19nZXRfZWxkLAorfTsKKworc3RhdGljIGludCBjZG5fZHBfYXVkaW9fY29kZWNfaW5pdChzdHJ1 Y3QgY2RuX2RwX2RldmljZSAqZHAsCisJCQkJICAgc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0 cnVjdCBoZG1pX2NvZGVjX3BkYXRhIGNvZGVjX2RhdGEgPSB7CisJCS5pMnMgPSAxLAorCQkuc3Bk aWYgPSAxLAorCQkub3BzID0gJmF1ZGlvX2NvZGVjX29wcywKKwkJLm1heF9pMnNfY2hhbm5lbHMg PSA4LAorCX07CisKKwlkcC0+YXVkaW9fcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9k YXRhKAorCQkJIGRldiwgSERNSV9DT0RFQ19EUlZfTkFNRSwgUExBVEZPUk1fREVWSURfQVVUTywK KwkJCSAmY29kZWNfZGF0YSwgc2l6ZW9mKGNvZGVjX2RhdGEpKTsKKworCXJldHVybiBQVFJfRVJS X09SX1pFUk8oZHAtPmF1ZGlvX3BkZXYpOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9nZXRfY2Fw X2xhbmVzKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwKKwkJCQlzdHJ1Y3QgZXh0Y29uX2RldiAq ZWRldikKK3sKKwlib29sIGRmcCwgZHB0eDsKKwl1OCBsYW5lczsKKworCWRmcCA9IGV4dGNvbl9n ZXRfc3RhdGUoZWRldiwgRVhUQ09OX1VTQl9IT1NUKTsKKwlkcHR4ID0gZXh0Y29uX2dldF9zdGF0 ZShlZGV2LCBFWFRDT05fRElTUF9EUCk7CisKKwlpZiAoZGZwICYmIGRwdHgpCisJCWxhbmVzID0g MjsKKwllbHNlIGlmIChkcHR4KQorCQlsYW5lcyA9IDQ7CisJZWxzZQorCQlsYW5lcyA9IDA7CisK KwlyZXR1cm4gbGFuZXM7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX3BkX2V2ZW50KHN0cnVjdCBu b3RpZmllcl9ibG9jayAqbmIsCisJCQkgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwcml2 KQoreworCXN0cnVjdCBjZG5fZHBfcG9ydCAqcG9ydDsKKworCXBvcnQgPSBjb250YWluZXJfb2Yo bmIsIHN0cnVjdCBjZG5fZHBfcG9ydCwgZXZlbnRfbmIpOworCisJc2NoZWR1bGVfZGVsYXllZF93 b3JrKCZwb3J0LT5ldmVudF93cSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQg Y2RuX2RwX3BkX2V2ZW50X3dxKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qg Y2RuX2RwX3BvcnQgKnBvcnQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNkbl9kcF9wb3J0 LAorCQkJCQkJZXZlbnRfd3Eud29yayk7CisJdW5pb24gZXh0Y29uX3Byb3BlcnR5X3ZhbHVlIHBy b3BlcnR5OworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IHBvcnQtPmRwOworCXU4IG5ld19j YXBfbGFuZXMsIHNpbmtfY291bnQsIGk7CisJaW50IHJldDsKKworCW5ld19jYXBfbGFuZXMgPSBj ZG5fZHBfZ2V0X2NhcF9sYW5lcyhkcCwgcG9ydC0+ZXh0Y29uKTsKKworCWlmIChuZXdfY2FwX2xh bmVzID09IHBvcnQtPmNhcF9sYW5lcykgeworCQlkZXZfZGJnKGRwLT5kZXYsICJsYW5lcyBjb3Vu dCBkb2VzIG5vdCBjaGFuZ2U6ICVkXG4iLAorCQkJbmV3X2NhcF9sYW5lcyk7CisKKwkJaWYgKCFu ZXdfY2FwX2xhbmVzKQorCQkJcmV0dXJuOworCisJCS8qCisJCSAqIFJlYWQgdGhlIHNpbmsgY291 bnQgZnJvbSBEUENELCBpZiBzaW5rIGNvdW50IGJlY29tZSAwLCB0aGlzCisJCSAqIHBoeSBjb3Vs ZCBiZSBwb3dlciBvZmYuCisJCSAqLworCQlyZXQgPSBjZG5fZHBfZHBjZF9yZWFkKGRwLCBEUF9T SU5LX0NPVU5ULAorCQkJCSAgICAgICAmc2lua19jb3VudCwgMSk7CisJCWlmIChyZXQgfHwgc2lu a19jb3VudCkKKwkJCXJldHVybjsKKworCQluZXdfY2FwX2xhbmVzID0gMDsKKwl9CisKKwlpZiAo IW5ld19jYXBfbGFuZXMpIHsKKwkJcmV0ID0gcGh5X3Bvd2VyX29mZihwb3J0LT5waHkpOworCQlp ZiAocmV0KSB7CisJCQlkZXZfZXJyKGRwLT5kZXYsICJwaHkgcG93ZXIgb2ZmIGZhaWxlZDogJWQi LCByZXQpOworCQkJcmV0dXJuOworCQl9CisJCXBvcnQtPnBoeV9zdGF0dXMgPSBmYWxzZTsKKwkJ cG9ydC0+Y2FwX2xhbmVzID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IGRwLT5wb3J0czsgaSsrKSB7 CisJCQlpZiAoZHAtPnBvcnRbaV0tPnBoeV9zdGF0dXMpCisJCQkJcmV0dXJuOworCQl9CisKKwkJ cmV0ID0gY2RuX2RwX2dyZl93cml0ZShkcCwgR1JGX1NPQ19DT04yNiwKKwkJCQkgICAgICAgRFBU WF9IUERfU0VMX01BU0sgfCBEUFRYX0hQRF9ERUwpOworCQlpZiAocmV0KQorCQkJcmV0dXJuOwor CisJCWRwLT5ocGRfc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisJCWRy bV9oZWxwZXJfaHBkX2lycV9ldmVudChkcC0+ZHJtX2Rldik7CisJCWNkbl9kcF9zZXRfZmlybXdh cmVfYWN0aXZlKGRwLCBmYWxzZSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBpZiBvdGhlciBwaHkg aXMgcnVubmluZywgZG8gbm90IHRvdWNoIHRoZSBocGRfc3RhdHVzLCBhbmQgcmV0dXJuICovCisJ Zm9yIChpID0gMDsgaSA8IGRwLT5wb3J0czsgaSsrKSB7CisJCWlmIChkcC0+cG9ydFtpXS0+cGh5 X3N0YXR1cykgeworCQkJZGV2X3dhcm4oZHAtPmRldiwgImJ1c3ksIHBoeVslZF0gaXMgcnVubmlu ZyIsCisJCQkJIGRwLT5wb3J0W2ldLT5pZCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAo IWRwLT5md19sb2FkZWQpIHsKKwkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZHAtPmZ3LCBDRE5f RFBfRklSTVdBUkUsIGRwLT5kZXYpOworCQlpZiAocmV0ID09IC1FTk9FTlQgJiYgZHAtPmZ3X3dh aXQgPD0gTUFYX0ZXX1dBSVRfU0VDUykgeworCQkJdW5zaWduZWQgbG9uZyB0aW1lID0gbXNlY3Nf dG9famlmZmllcyhkcC0+Zndfd2FpdCAqIEhaKTsKKworCQkJLyoKKwkJCSAqIElmIGNhbiBub3Qg ZmluZCB0aGUgZmlsZSwgcmV0cnkgdG8gbG9hZCB0aGUgZmlybXdhcmUKKwkJCSAqIGluIHNldmVy YWwgc2Vjb25kcywgaWYgc3RpbGwgZmFpbGVkIGFmdGVyIDEgbWludXRlLAorCQkJICogZ2l2ZSB1 cC4KKwkJCSAqLworCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwb3J0LT5ldmVudF93cSwgdGlt ZSk7CisJCQlkcC0+Zndfd2FpdCAqPSAyOworCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKHJldCkg eworCQkJZGV2X2VycihkcC0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgZmlybXdhcmU6ICVkXG4i LAorCQkJCXJldCk7CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgeworCQljZG5fZHBfc2V0X2Zp cm13YXJlX2FjdGl2ZShkcCwgdHJ1ZSk7CisJfQorCisJcmV0ID0gY2RuX2RwX2dyZl93cml0ZShk cCwgR1JGX1NPQ19DT04yNiwKKwkJCSAgICAgICAocG9ydC0+aWQgPDwgVVBIWV9TRUxfQklUKSB8 IFVQSFlfU0VMX01BU0spOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3BoeTsKKworCXJldCA9IHBo eV9wb3dlcl9vbihwb3J0LT5waHkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAi cGh5IHBvd2VyIG9uIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3BoeTsKKwl9CisK Kwlwb3J0LT5waHlfc3RhdHVzID0gdHJ1ZTsKKworCWlmICghZHAtPmZ3X2xvYWRlZCkgeworCQly ZXQgPSBjZG5fZHBfZmlybXdhcmVfaW5pdChkcCk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIo ZHAtPmRldiwgImZpcm13YXJlIGluaXQgZmFpbGVkOiAlZCIsIHJldCk7CisJCQlnb3RvIGVycl9m aXJtd2FyZTsKKwkJfQorCQlyZWxlYXNlX2Zpcm13YXJlKGRwLT5mdyk7CisJCWRwLT5md19sb2Fk ZWQgPSAxOworCX0KKworCXJldCA9IGNkbl9kcF9ncmZfd3JpdGUoZHAsIEdSRl9TT0NfQ09OMjYs CisJCQkgICAgICAgRFBUWF9IUERfU0VMX01BU0sgfCBEUFRYX0hQRF9TRUwpOworCWlmIChyZXQp CisJCWdvdG8gZXJyX2Zpcm13YXJlOworCisJcmV0ID0gY2RuX2RwX2dldF9ocGRfc3RhdHVzKGRw KTsKKwlpZiAocmV0IDw9IDApIHsKKwkJaWYgKCFyZXQpCisJCQlkZXZfZXJyKGRwLT5kZXYsICJo cGQgZG9lcyBub3QgZXhpc3RcbiIpOworCQlnb3RvIGVycl9maXJtd2FyZTsKKwl9CisKKwlyZXQg PSBleHRjb25fZ2V0X3Byb3BlcnR5KHBvcnQtPmV4dGNvbiwgRVhUQ09OX0RJU1BfRFAsCisJCQkJ ICBFWFRDT05fUFJPUF9VU0JfVFlQRUNfUE9MQVJJVFksICZwcm9wZXJ0eSk7CisJaWYgKHJldCkg eworCQlkZXZfZXJyKGRwLT5kZXYsICJnZXQgcHJvcGVydHkgZmFpbGVkXG4iKTsKKwkJZ290byBl cnJfZmlybXdhcmU7CisJfQorCisJcmV0ID0gY2RuX2RwX3NldF9ob3N0X2NhcChkcCwgbmV3X2Nh cF9sYW5lcywgcHJvcGVydHkuaW50dmFsKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZHAtPmRl diwgInNldCBob3N0IGNhcGFiaWxpdGllcyBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIGVy cl9maXJtd2FyZTsKKwl9CisKKwkvKgorCSAqIE5hdGl2ZSByZWFkIHdpdGggcmV0cnkgZm9yIGxp bmsgc3RhdHVzIGFuZCByZWNlaXZlciBjYXBhYmlsaXR5IHJlYWRzCisJICogZm9yIGNhc2VzIHdo ZXJlIHRoZSBzaW5rIG1heSBzdGlsbCBub3QgYmUgcmVhZHkuCisJICoKKwkgKiBTaW5rcyBhcmUg KnN1cHBvc2VkKiB0byBjb21lIHVwIHdpdGhpbiAxbXMgZnJvbSBhbiBvZmYgc3RhdGUsIGJ1dAor CSAqIHNvbWUgRE9DS3MgbmVlZCBhYm91dCA1IHNlY29uZHMgdG8gcG93ZXIgdXAsIHNvIHJlYWQg dGhlIGRwY2QgZXZlcnkKKwkgKiAxMDBtcywgaWYgY2FuIG5vdCBnZXQgYSBnb29kIGRwY2QgaW4g MTAgc2Vjb25kcywgZ2l2ZSB1cC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsK KwkJcmV0ID0gY2RuX2RwX2RwY2RfcmVhZChkcCwgMHgwMDAsIGRwLT5kcGNkLAorCQkJCSAgICAg ICBEUF9SRUNFSVZFUl9DQVBfU0laRSk7CisJCWlmICghcmV0KSB7CisJCQlkZXZfZGJnKGRwLT5k ZXYsICJnZXQgZHBjZCBzdWNjZXNzIVxuIik7CisKKwkJCS8qCisJCQkgKiBDaGVjayBzaW5rIGNv dW50IGhlcmUuIFRoZW4gZ290byBwb3dlciBvZmYgcGh5LAorCQkJICogaWYgc2luayBjb3VudCBp cyAwLgorCQkJICovCisJCQlyZXQgPSBjZG5fZHBfZHBjZF9yZWFkKGRwLCBEUF9TSU5LX0NPVU5U LAorCQkJCQkgICAgICAgJnNpbmtfY291bnQsIDEpOworCQkJaWYgKHJldCkKKwkJCQljb250aW51 ZTsKKworCQkJc2lua19jb3VudCA9IERQX0dFVF9TSU5LX0NPVU5UKHNpbmtfY291bnQpOworCQkJ aWYgKCFzaW5rX2NvdW50KQorCQkJCWdvdG8gZXJyX2Zpcm13YXJlOworCisJCQlwb3J0LT5jYXBf bGFuZXMgPSBuZXdfY2FwX2xhbmVzOworCQkJZHAtPmhwZF9zdGF0dXMgPSBjb25uZWN0b3Jfc3Rh dHVzX2Nvbm5lY3RlZDsKKwkJCWRybV9oZWxwZXJfaHBkX2lycV9ldmVudChkcC0+ZHJtX2Rldik7 CisJCQlyZXR1cm47CisJCX0gZWxzZSBpZiAoIWV4dGNvbl9nZXRfc3RhdGUocG9ydC0+ZXh0Y29u LCBFWFRDT05fRElTUF9EUCkpIHsKKwkJCWJyZWFrOworCQl9CisJCW1zbGVlcCgxMDApOworCX0K KworCWRldl9lcnIoZHAtPmRldiwgImdldCBkcGNkIGZhaWxlZCFcbiIpOworCitlcnJfZmlybXdh cmU6CisJcmV0ID0gcGh5X3Bvd2VyX29mZihwb3J0LT5waHkpOworCWlmIChyZXQpCisJCWRldl9l cnIoZHAtPmRldiwgInBoeSBwb3dlciBvZmYgZmFpbGVkOiAlZCIsIHJldCk7CisJZWxzZQorCQlw b3J0LT5waHlfc3RhdHVzID0gZmFsc2U7CisKK2Vycl9waHk6CisJaWYgKGRwLT5md19sb2FkZWQp CisJCWNkbl9kcF9zZXRfZmlybXdhcmVfYWN0aXZlKGRwLCBmYWxzZSk7CisJZWxzZQorCQlyZWxl YXNlX2Zpcm13YXJlKGRwLT5mdyk7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2JpbmQoc3RydWN0 IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCit7CisJc3Ry dWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJ c3RydWN0IGNkbl9kcF9wb3J0ICpwb3J0OworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0g ZGF0YTsKKwlpbnQgcmV0LCBpOworCisJcmV0ID0gY2RuX2RwX2luaXQoZHApOworCWlmIChyZXQg PCAwKQorCQlyZXR1cm4gcmV0OworCisJZHAtPmRybV9kZXYgPSBkcm1fZGV2OworCWRwLT5ocGRf c3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisJZHAtPmZ3X3dhaXQgPSAx OworCisJZW5jb2RlciA9ICZkcC0+ZW5jb2RlcjsKKworCWVuY29kZXItPnBvc3NpYmxlX2NydGNz ID0gZHJtX29mX2ZpbmRfcG9zc2libGVfY3J0Y3MoZHJtX2RldiwKKwkJCQkJCQkgICAgIGRldi0+ b2Zfbm9kZSk7CisJRFJNX0RFQlVHX0tNUygicG9zc2libGVfY3J0Y3MgPSAweCV4XG4iLCBlbmNv ZGVyLT5wb3NzaWJsZV9jcnRjcyk7CisKKwlyZXQgPSBkcm1fZW5jb2Rlcl9pbml0KGRybV9kZXYs IGVuY29kZXIsICZjZG5fZHBfZW5jb2Rlcl9mdW5jcywKKwkJCSAgICAgICBEUk1fTU9ERV9FTkNP REVSX1RNRFMsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5p dGlhbGl6ZSBlbmNvZGVyIHdpdGggZHJtXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkcm1f ZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZjZG5fZHBfZW5jb2Rlcl9oZWxwZXJfZnVuY3Mp OworCisJY29ubmVjdG9yID0gJmRwLT5jb25uZWN0b3I7CisJY29ubmVjdG9yLT5wb2xsZWQgPSBE Uk1fQ09OTkVDVE9SX1BPTExfSFBEOworCWNvbm5lY3Rvci0+ZHBtcyA9IERSTV9NT0RFX0RQTVNf T0ZGOworCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGRybV9kZXYsIGNvbm5lY3RvciwKKwkJ CQkgJmNkbl9kcF9hdG9taWNfY29ubmVjdG9yX2Z1bmNzLAorCQkJCSBEUk1fTU9ERV9DT05ORUNU T1JfRGlzcGxheVBvcnQpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5p dGlhbGl6ZSBjb25uZWN0b3Igd2l0aCBkcm1cbiIpOworCQlnb3RvIGVycl9mcmVlX2VuY29kZXI7 CisJfQorCisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJmNkbl9kcF9jb25u ZWN0b3JfaGVscGVyX2Z1bmNzKTsKKworCXJldCA9IGRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hf ZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJm YWlsZWQgdG8gYXR0YWNoIGNvbm5lY3RvciBhbmQgZW5jb2RlclxuIik7CisJCWdvdG8gZXJyX2Zy ZWVfY29ubmVjdG9yOworCX0KKworCWNkbl9kcF9hdWRpb19jb2RlY19pbml0KGRwLCBkZXYpOwor CisJZm9yIChpID0gMDsgaSA8IGRwLT5wb3J0czsgaSsrKSB7CisJCXBvcnQgPSBkcC0+cG9ydFtp XTsKKworCQlwb3J0LT5ldmVudF9uYi5ub3RpZmllcl9jYWxsID0gY2RuX2RwX3BkX2V2ZW50Owor CQlJTklUX0RFTEFZRURfV09SSygmcG9ydC0+ZXZlbnRfd3EsIGNkbl9kcF9wZF9ldmVudF93cSk7 CisJCXJldCA9IGV4dGNvbl9yZWdpc3Rlcl9ub3RpZmllcihwb3J0LT5leHRjb24sIEVYVENPTl9E SVNQX0RQLAorCQkJCQkgICAgICAgJnBvcnQtPmV2ZW50X25iKTsKKwkJaWYgKHJldCkgeworCQkJ ZGV2X2VycihkZXYsICJyZWdpc3RlciBFWFRDT05fRElTUF9EUCBub3RpZmllciBlcnJcbiIpOwor CQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWlmIChleHRjb25fZ2V0X3N0YXRlKHBvcnQtPmV4dGNv biwgRVhUQ09OX0RJU1BfRFApKQorCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwb3J0LT5ldmVu dF93cSwgMCk7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2Nvbm5lY3RvcjoKKwlkcm1f Y29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKK2Vycl9mcmVlX2VuY29kZXI6CisJZHJtX2Vu Y29kZXJfY2xlYW51cChlbmNvZGVyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBj ZG5fZHBfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2 b2lkICpkYXRhKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZkcC0+ZW5jb2RlcjsKKwlz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gJmRwLT5jb25uZWN0b3I7CisJc3RydWN0 IGNkbl9kcF9wb3J0ICpwb3J0OworCWludCBpOworCisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0 ZXIoZHAtPmF1ZGlvX3BkZXYpOworCWNkbl9kcF9lbmNvZGVyX2Rpc2FibGUoZW5jb2Rlcik7CisJ ZW5jb2Rlci0+ZnVuY3MtPmRlc3Ryb3koZW5jb2Rlcik7CisJY29ubmVjdG9yLT5mdW5jcy0+ZGVz dHJveShjb25uZWN0b3IpOworCisJZm9yIChpID0gMDsgaSA8IGRwLT5wb3J0czsgaSsrKSB7CisJ CXBvcnQgPSBkcC0+cG9ydFtpXTsKKwkJZXh0Y29uX3VucmVnaXN0ZXJfbm90aWZpZXIocG9ydC0+ ZXh0Y29uLCBFWFRDT05fRElTUF9EUCwKKwkJCQkJICAgJnBvcnQtPmV2ZW50X25iKTsKKwl9Cit9 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBjZG5fZHBfY29tcG9uZW50X29w cyA9IHsKKwkuYmluZCA9IGNkbl9kcF9iaW5kLAorCS51bmJpbmQgPSBjZG5fZHBfdW5iaW5kLAor fTsKKworc3RhdGljIGludCBjZG5fZHBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCWNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgKm1hdGNoOworCXN0cnVjdCBjZG5fZHBfZGF0YSAqZHBfZGF0YTsKKwlzdHJ1 Y3QgY2RuX2RwX3BvcnQgKnBvcnQ7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwOworCXN0cnVj dCBleHRjb25fZGV2ICpleHRjb247CisJc3RydWN0IHBoeSAqcGh5OworCWludCBpOworCisJZHAg PSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcCkK KwkJcmV0dXJuIC1FTk9NRU07CisJZHAtPmRldiA9IGRldjsKKworCW1hdGNoID0gb2ZfbWF0Y2hf bm9kZShjZG5fZHBfZHRfaWRzLCBwZGV2LT5kZXYub2Zfbm9kZSk7CisJZHBfZGF0YSA9IChzdHJ1 Y3QgY2RuX2RwX2RhdGEgKiltYXRjaC0+ZGF0YTsKKworCWZvciAoaSA9IDA7IGkgPCBkcF9kYXRh LT5tYXhfcGh5OyBpKyspIHsKKwkJZXh0Y29uID0gZXh0Y29uX2dldF9lZGV2X2J5X3BoYW5kbGUo ZGV2LCBpKTsKKwkJcGh5ID0gZGV2bV9vZl9waHlfZ2V0X2J5X2luZGV4KGRldiwgZGV2LT5vZl9u b2RlLCBpKTsKKworCQlpZiAoUFRSX0VSUihleHRjb24pID09IC1FUFJPQkVfREVGRVIgfHwKKwkJ ICAgIFBUUl9FUlIocGh5KSA9PSAtRVBST0JFX0RFRkVSKQorCQkJcmV0dXJuIC1FUFJPQkVfREVG RVI7CisKKwkJaWYgKElTX0VSUihleHRjb24pIHx8IElTX0VSUihwaHkpKQorCQkJY29udGludWU7 CisKKwkJcG9ydCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcG9ydCksIEdGUF9LRVJORUwp OworCQlpZiAoIWRwKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcG9ydC0+ZXh0Y29uID0gZXh0 Y29uOworCQlwb3J0LT5waHkgPSBwaHk7CisJCXBvcnQtPmRwID0gZHA7CisJCXBvcnQtPmlkID0g aTsKKwkJZHAtPnBvcnRbZHAtPnBvcnRzKytdID0gcG9ydDsKKwl9CisKKwlpZiAoIWRwLT5wb3J0 cykgeworCQlkZXZfZXJyKGRldiwgIm1pc3NpbmcgZXh0Y29uIG9yIHBoeVxuIik7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRwKTsKKworCXJldHVybiBj b21wb25lbnRfYWRkKGRldiwgJmNkbl9kcF9jb21wb25lbnRfb3BzKTsKK30KKworc3RhdGljIGlu dCBjZG5fZHBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9u ZW50X2RlbCgmcGRldi0+ZGV2LCAmY2RuX2RwX2NvbXBvbmVudF9vcHMpOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNkbl9kcF9kcml2ZXIgPSB7CisJ LnByb2JlID0gY2RuX2RwX3Byb2JlLAorCS5yZW1vdmUgPSBjZG5fZHBfcmVtb3ZlLAorCS5kcml2 ZXIgPSB7CisJCSAgIC5uYW1lID0gImNkbi1kcCIsCisJCSAgIC5vd25lciA9IFRISVNfTU9EVUxF LAorCQkgICAub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoY2RuX2RwX2R0X2lkcyksCisJ fSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoY2RuX2RwX2RyaXZlcik7CisKK01PRFVM RV9BVVRIT1IoIkNocmlzIFpob25nIDx6eXdAcm9jay1jaGlwcy5jb20+Iik7CitNT0RVTEVfREVT Q1JJUFRJT04oImNkbiBEUCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5oIGIvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uMGNmMjNkYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9jZG4tZHAtY29yZS5oCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0 IChDKSAyMDE2IENocmlzIFpob25nIDx6eXdAcm9jay1jaGlwcy5jb20+CisgKiBDb3B5cmlnaHQg KEMpIDIwMTYgUk9DS0NISVAsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2Yg dGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9D RE5fRFBfQ09SRV9ICisjZGVmaW5lIF9DRE5fRFBfQ09SRV9ICisKKyNpbmNsdWRlIDxkcm0vZHJt UC5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X2RwX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRlICJyb2Nr Y2hpcF9kcm1fZHJ2LmgiCisKKyNkZWZpbmUgTUFYX1BIWQkJMgorCitlbnVtIGF1ZGlvX2Zvcm1h dCB7CisJQUZNVF9JMlMgPSAwLAorCUFGTVRfU1BESUYgPSAxLAorCUFGTVRfVU5VU0VELAorfTsK Kworc3RydWN0IGF1ZGlvX2luZm8geworCWVudW0gYXVkaW9fZm9ybWF0IGZvcm1hdDsKKwlpbnQg c2FtcGxlX3JhdGU7CisJaW50IGNoYW5uZWxzOworCWludCBzYW1wbGVfd2lkdGg7Cit9OworCitl bnVtIHZpY19weGxfZW5jb2RpbmdfZm9ybWF0IHsKKwlQWExfUkdCID0gMHgxLAorCVlDQkNSXzRf NF80ID0gMHgyLAorCVlDQkNSXzRfMl8yID0gMHg0LAorCVlDQkNSXzRfMl8wID0gMHg4LAorCVlf T05MWSA9IDB4MTAsCit9OworCitzdHJ1Y3QgdmlkZW9faW5mbyB7CisJYm9vbCBoX3N5bmNfcG9s YXJpdHk7CisJYm9vbCB2X3N5bmNfcG9sYXJpdHk7CisJYm9vbCBpbnRlcmxhY2VkOworCWludCBj b2xvcl9kZXB0aDsKKwllbnVtIHZpY19weGxfZW5jb2RpbmdfZm9ybWF0IGNvbG9yX2ZtdDsKK307 CisKK3N0cnVjdCBjZG5fZmlybXdhcmVfaGVhZGVyIHsKKwl1MzIgc2l6ZV9ieXRlczsgLyogc2l6 ZSBvZiB0aGUgZW50aXJlIGhlYWRlcitpbWFnZShzKSBpbiBieXRlcyAqLworCXUzMiBoZWFkZXJf c2l6ZTsgLyogc2l6ZSBvZiBqdXN0IHRoZSBoZWFkZXIgaW4gYnl0ZXMgKi8KKwl1MzIgaXJhbV9z aXplOyAvKiBzaXplIG9mIGlyYW0gKi8KKwl1MzIgZHJhbV9zaXplOyAvKiBzaXplIG9mIGRyYW0g Ki8KK307CisKK3N0cnVjdCBjZG5fZHBfcG9ydCB7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw OworCXN0cnVjdCBub3RpZmllcl9ibG9jayBldmVudF9uYjsKKwlzdHJ1Y3QgZGVsYXllZF93b3Jr IGV2ZW50X3dxOworCXN0cnVjdCBleHRjb25fZGV2ICpleHRjb247CisJc3RydWN0IHBoeSAqcGh5 OworCXU4IGNhcF9sYW5lczsKKwlib29sIHBoeV9zdGF0dXM7CisJdTggaWQ7Cit9OworCitzdHJ1 Y3QgY2RuX2RwX2RldmljZSB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBkcm1fZGV2 aWNlICpkcm1fZGV2OworCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5lY3RvcjsKKwlzdHJ1Y3Qg ZHJtX2VuY29kZXIgZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBtb2RlOworCXN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF1ZGlvX3BkZXY7CisKKwljb25zdCBzdHJ1Y3QgZmlybXdh cmUgKmZ3OwkvKiBjZG4gZHAgZmlybXdhcmUgKi8KKwl1bnNpZ25lZCBpbnQgZndfdmVyc2lvbjsJ LyogY2RuIGZ3IHZlcnNpb24gKi8KKwl1MzIgZndfd2FpdDsKKwlib29sIGZ3X2xvYWRlZDsKKwli b29sIGZ3X2FjdGl2ZWQ7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCByZWdtYXAgKmdy ZjsKKwlzdHJ1Y3QgY2xrICpjb3JlX2NsazsKKwlzdHJ1Y3QgY2xrICpwY2xrOworCXN0cnVjdCBj bGsgKnNwZGlmX2NsazsKKwlzdHJ1Y3QgY2xrICpncmZfY2xrOworCXN0cnVjdCByZXNldF9jb250 cm9sICpzcGRpZl9yc3Q7CisJc3RydWN0IGF1ZGlvX2luZm8gYXVkaW9faW5mbzsKKwlzdHJ1Y3Qg dmlkZW9faW5mbyB2aWRlb19pbmZvOworCXN0cnVjdCBkcm1fZHBfbGluayBsaW5rOworCXN0cnVj dCBjZG5fZHBfcG9ydCAqcG9ydFtNQVhfUEhZXTsKKwl1OCBwb3J0czsKKworCXU4IGRwY2RbRFBf UkVDRUlWRVJfQ0FQX1NJWkVdOworCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgaHBkX3N0YXR1 czsKKwlpbnQgZHBtc19tb2RlOworCWJvb2wgc2lua19oYXNfYXVkaW87Cit9OworI2VuZGlmICAv KiBfQ0ROX0RQX0NPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L2Nkbi1kcC1yZWcuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhNzAyZAotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmMKQEAgLTAsMCArMSw5NTkg QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJvbmljcyBDby5M dGQKKyAqIEF1dGhvcjogQ2hyaXMgWmhvbmcgPHp5d0Byb2NrLWNoaXBzLmNvbT4KKyAqCisgKiBU aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQs IGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2Uu aD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5j bHVkZSA8bGludXgvaW9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKworI2luY2x1 ZGUgImNkbi1kcC1jb3JlLmgiCisjaW5jbHVkZSAiY2RuLWRwLXJlZy5oIgorCisjZGVmaW5lIENE Tl9EUF9TUERJRl9DTEsJCTIwMDAwMDAwMAorI2RlZmluZSBGV19BTElWRV9USU1FT1VUX1VTCQkx MDAwMDAwCisjZGVmaW5lIE1BSUxCT1hfUkVUUllfVVMJCTEwMDAKKyNkZWZpbmUgTUFJTEJPWF9U SU1FT1VUX1VTCQk1MDAwMDAwCisjZGVmaW5lIExJTktfVFJBSU5JTkdfUkVUUllfTVMJCTIwCisj ZGVmaW5lIExJTktfVFJBSU5JTkdfVElNRU9VVF9NUwk1MDAKKwordm9pZCBjZG5fZHBfc2V0X2Z3 X2NsayhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHUzMiBjbGspCit7CisJd3JpdGVsKGNsayAv IDEwMDAwMDAsIGRwLT5yZWdzICsgU1dfQ0xLX0gpOworfQorCit2b2lkIGNkbl9kcF9jbG9ja19y ZXNldChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJdTMyIHZhbDsKKworCXZhbCA9IERQ VFhfRlJNUl9EQVRBX0NMS19SU1ROX0VOIHwKKwkgICAgICBEUFRYX0ZSTVJfREFUQV9DTEtfRU4g fAorCSAgICAgIERQVFhfUEhZX0RBVEFfUlNUTl9FTiB8CisJICAgICAgRFBUWF9QSFlfREFUQV9D TEtfRU4gfAorCSAgICAgIERQVFhfUEhZX0NIQVJfUlNUTl9FTiB8CisJICAgICAgRFBUWF9QSFlf Q0hBUl9DTEtfRU4gfAorCSAgICAgIFNPVVJDRV9BVVhfU1lTX0NMS19SU1ROX0VOIHwKKwkgICAg ICBTT1VSQ0VfQVVYX1NZU19DTEtfRU4gfAorCSAgICAgIERQVFhfU1lTX0NMS19SU1ROX0VOIHwK KwkgICAgICBEUFRYX1NZU19DTEtfRU4gfAorCSAgICAgIENGR19EUFRYX1ZJRl9DTEtfUlNUTl9F TiB8CisJICAgICAgQ0ZHX0RQVFhfVklGX0NMS19FTjsKKwl3cml0ZWwodmFsLCBkcC0+cmVncyAr IFNPVVJDRV9EUFRYX0NBUik7CisKKwl2YWwgPSBTT1VSQ0VfUEhZX1JTVE5fRU4gfCBTT1VSQ0Vf UEhZX0NMS19FTjsKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIFNPVVJDRV9QSFlfQ0FSKTsKKwor CXZhbCA9IFNPVVJDRV9QS1RfU1lTX1JTVE5fRU4gfAorCSAgICAgIFNPVVJDRV9QS1RfU1lTX0NM S19FTiB8CisJICAgICAgU09VUkNFX1BLVF9EQVRBX1JTVE5fRU4gfAorCSAgICAgIFNPVVJDRV9Q S1RfREFUQV9DTEtfRU47CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTT1VSQ0VfUEtUX0NBUik7 CisKKwl2YWwgPSBTUERJRl9DRFJfQ0xLX1JTVE5fRU4gfAorCSAgICAgIFNQRElGX0NEUl9DTEtf RU4gfAorCSAgICAgIFNPVVJDRV9BSUZfU1lTX1JTVE5fRU4gfAorCSAgICAgIFNPVVJDRV9BSUZf U1lTX0NMS19FTiB8CisJICAgICAgU09VUkNFX0FJRl9DTEtfUlNUTl9FTiB8CisJICAgICAgU09V UkNFX0FJRl9DTEtfRU47CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTT1VSQ0VfQUlGX0NBUik7 CisKKwl2YWwgPSBTT1VSQ0VfQ0lQSEVSX1NZU1RFTV9DTEtfUlNUTl9FTiB8CisJICAgICAgU09V UkNFX0NJUEhFUl9TWVNfQ0xLX0VOIHwKKwkgICAgICBTT1VSQ0VfQ0lQSEVSX0NIQVJfQ0xLX1JT VE5fRU4gfAorCSAgICAgIFNPVVJDRV9DSVBIRVJfQ0hBUl9DTEtfRU47CisJd3JpdGVsKHZhbCwg ZHAtPnJlZ3MgKyBTT1VSQ0VfQ0lQSEVSX0NBUik7CisKKwl2YWwgPSBTT1VSQ0VfQ1JZUFRPX1NZ U19DTEtfUlNUTl9FTiB8CisJICAgICAgU09VUkNFX0NSWVBUT19TWVNfQ0xLX0VOOworCXdyaXRl bCh2YWwsIGRwLT5yZWdzICsgU09VUkNFX0NSWVBUT19DQVIpOworCisJdmFsID0gfihNQUlMQk9Y X0lOVF9NQVNLX0JJVCB8IFBJRl9JTlRfTUFTS19CSVQpICYgQUxMX0lOVF9NQVNLOworCXdyaXRl bCh2YWwsIGRwLT5yZWdzICsgQVBCX0lOVF9NQVNLKTsKK30KKworc3RhdGljIGludCBjZG5fZHBf bWFpbGJveF9yZWFkKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgYm9vbCBmb3JjZSkKK3sKKwlp bnQgdmFsLCByZXQ7CisKKwlpZiAoIWRwLT5md19hY3RpdmVkICYmICFmb3JjZSkKKwkJcmV0dXJu IC1FUEVSTTsKKworCXJldCA9IHJlYWR4X3BvbGxfdGltZW91dChyZWFkbCwgZHAtPnJlZ3MgKyBN QUlMQk9YX0VNUFRZX0FERFIsCisJCQkJIHZhbCwgIXZhbCwgTUFJTEJPWF9SRVRSWV9VUywKKwkJ CQkgTUFJTEJPWF9USU1FT1VUX1VTKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwor CXJldHVybiByZWFkbChkcC0+cmVncyArIE1BSUxCT1gwX1JEX0RBVEEpICYgMHhmZjsKK30KKwor c3RhdGljIGludCBjZHBfZHBfbWFpbGJveF93cml0ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAs IHU4IHZhbCwgYm9vbCBmb3JjZSkKK3sKKwlpbnQgcmV0LCBmdWxsOworCisJaWYgKCFkcC0+Zndf YWN0aXZlZCAmJiAhZm9yY2UpCisJCXJldHVybiAtRVBFUk07CisKKwlyZXQgPSByZWFkeF9wb2xs X3RpbWVvdXQocmVhZGwsIGRwLT5yZWdzICsgTUFJTEJPWF9GVUxMX0FERFIsCisJCQkJIGZ1bGws ICFmdWxsLCBNQUlMQk9YX1JFVFJZX1VTLAorCQkJCSBNQUlMQk9YX1RJTUVPVVRfVVMpOworCWlm IChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBNQUlM Qk9YMF9XUl9EQVRBKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9tYWls Ym94X3ZhbGlkYXRlX3JlY2VpdmUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLAorCQkJCQkgICB1 OCBtb2R1bGVfaWQsIHU4IG9wY29kZSwKKwkJCQkJICAgdTggcmVxX3NpemUpCit7CisJdTMyIG1i b3hfc2l6ZSwgaTsKKwl1OCBoZWFkZXJbNF07CisJaW50IHJldDsKKworCS8qIHJlYWQgdGhlIGhl YWRlciBvZiB0aGUgbWVzc2FnZSAqLworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJcmV0 ID0gY2RuX2RwX21haWxib3hfcmVhZChkcCwgMCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJu IHJldDsKKworCQloZWFkZXJbaV0gPSByZXQ7CisJfQorCisJbWJveF9zaXplID0gKGhlYWRlclsy XSA8PCA4KSB8IGhlYWRlclszXTsKKworCWlmIChvcGNvZGUgIT0gaGVhZGVyWzBdIHx8IG1vZHVs ZV9pZCAhPSBoZWFkZXJbMV0gfHwKKwkgICAgcmVxX3NpemUgIT0gbWJveF9zaXplKSB7CisJCS8q CisJCSAqIElmIHRoZSBtZXNzYWdlIGluIG1haWxib3ggaXMgbm90IHdoYXQgd2Ugd2FudCwgd2Ug bmVlZCB0bworCQkgKiBjbGVhciB0aGUgbWFpbGJveCBieSByZWFkLgorCQkgKi8KKwkJZm9yIChp ID0gMDsgaSA8IG1ib3hfc2l6ZTsgaSsrKQorCQkJaWYgKGNkbl9kcF9tYWlsYm94X3JlYWQoZHAs IDApIDwgMCkKKwkJCQlicmVhazsKKworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBjZG5fZHBfbWFpbGJveF9yZWFkX3JlY2VpdmUoc3RydWN0IGNk bl9kcF9kZXZpY2UgKmRwLAorCQkJCSAgICAgICB1OCAqYnVmZiwgdTggYnVmZl9zaXplKQorewor CXUzMiBpOworCWludCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmZl9zaXplOyBpKyspIHsK KwkJcmV0ID0gY2RuX2RwX21haWxib3hfcmVhZChkcCwgMCk7CisJCWlmIChyZXQgPCAwKQorCQkJ cmV0dXJuIHJldDsKKworCQlidWZmW2ldID0gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IGNkbl9kcF9tYWlsYm94X3NlbmQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1 OCBtb2R1bGVfaWQsCisJCQkgICAgICAgdTggb3Bjb2RlLCB1MTYgc2l6ZSwgdTggKm1lc3NhZ2Up Cit7CisJdTggaGVhZGVyWzRdOworCWludCByZXQsIGk7CisKKwloZWFkZXJbMF0gPSBvcGNvZGU7 CisJaGVhZGVyWzFdID0gbW9kdWxlX2lkOworCWhlYWRlclsyXSA9IChzaXplID4+IDgpICYgMHhm ZjsKKwloZWFkZXJbM10gPSBzaXplICYgMHhmZjsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKysp IHsKKwkJcmV0ID0gY2RwX2RwX21haWxib3hfd3JpdGUoZHAsIGhlYWRlcltpXSwgMCk7CisJCWlm IChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKysp IHsKKwkJcmV0ID0gY2RwX2RwX21haWxib3hfd3JpdGUoZHAsIG1lc3NhZ2VbaV0sIDApOworCQlp ZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBjZG5fZHBfcmVnX3dyaXRlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTE2IGFkZHIsIHUz MiB2YWwpCit7CisJdTggbXNnWzZdOworCisJbXNnWzBdID0gKGFkZHIgPj4gOCkgJiAweGZmOwor CW1zZ1sxXSA9IGFkZHIgJiAweGZmOworCW1zZ1syXSA9ICh2YWwgPj4gMjQpICYgMHhmZjsKKwlt c2dbM10gPSAodmFsID4+IDE2KSAmIDB4ZmY7CisJbXNnWzRdID0gKHZhbCA+PiA4KSAmIDB4ZmY7 CisJbXNnWzVdID0gdmFsICYgMHhmZjsKKwlyZXR1cm4gY2RuX2RwX21haWxib3hfc2VuZChkcCwg TUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX1dSSVRFX1JFR0lTVEVSLAorCQkJCSAgIHNpemVvZiht c2cpLCBtc2cpOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9yZWdfd3JpdGVfYml0KHN0cnVjdCBj ZG5fZHBfZGV2aWNlICpkcCwgdTE2IGFkZHIsCisJCQkJdTggc3RhcnRfYml0LCB1OCBiaXRzX25v LCB1MzIgdmFsKQoreworCXU4IGZpZWxkWzhdOworCisJZmllbGRbMF0gPSAoYWRkciA+PiA4KSAm IDB4ZmY7CisJZmllbGRbMV0gPSBhZGRyICYgMHhmZjsKKwlmaWVsZFsyXSA9IHN0YXJ0X2JpdDsK KwlmaWVsZFszXSA9IGJpdHNfbm87CisJZmllbGRbNF0gPSAodmFsID4+IDI0KSAmIDB4ZmY7CisJ ZmllbGRbNV0gPSAodmFsID4+IDE2KSAmIDB4ZmY7CisJZmllbGRbNl0gPSAodmFsID4+IDgpICYg MHhmZjsKKwlmaWVsZFs3XSA9IHZhbCAmIDB4ZmY7CisKKwlyZXR1cm4gY2RuX2RwX21haWxib3hf c2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX1dSSVRFX0ZJRUxELAorCQkJCSAgIHNp emVvZihmaWVsZCksIGZpZWxkKTsKK30KKworaW50IGNkbl9kcF9kcGNkX3JlYWQoc3RydWN0IGNk bl9kcF9kZXZpY2UgKmRwLCB1MzIgYWRkciwgdTggKmRhdGEsIHUxNiBsZW4pCit7CisJdTggbXNn WzVdLCByZWdbNV07CisJaW50IHJldDsKKworCW1zZ1swXSA9IChsZW4gPj4gOCkgJiAweGZmOwor CW1zZ1sxXSA9IGxlbiAmIDB4ZmY7CisJbXNnWzJdID0gKGFkZHIgPj4gMTYpICYgMHhmZjsKKwlt c2dbM10gPSAoYWRkciA+PiA4KSAmIDB4ZmY7CisJbXNnWzRdID0gYWRkciAmIDB4ZmY7CisJcmV0 ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX1JFQURf RFBDRCwKKwkJCQkgIHNpemVvZihtc2cpLCBtc2cpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2Rw Y2RfcmVhZDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3ZhbGlkYXRlX3JlY2VpdmUoZHAsIE1C X01PRFVMRV9JRF9EUF9UWCwKKwkJCQkJICAgICAgRFBUWF9SRUFEX0RQQ0QsCisJCQkJCSAgICAg IHNpemVvZihyZWcpICsgbGVuKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9kcGNkX3JlYWQ7CisK KwlyZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFkX3JlY2VpdmUoZHAsIHJlZywgc2l6ZW9mKHJlZykp OworCWlmIChyZXQpCisJCWdvdG8gZXJyX2RwY2RfcmVhZDsKKworCXJldCA9IGNkbl9kcF9tYWls Ym94X3JlYWRfcmVjZWl2ZShkcCwgZGF0YSwgbGVuKTsKKworZXJyX2RwY2RfcmVhZDoKKwlyZXR1 cm4gcmV0OworfQorCitpbnQgY2RuX2RwX2RwY2Rfd3JpdGUoc3RydWN0IGNkbl9kcF9kZXZpY2Ug KmRwLCB1MzIgYWRkciwgdTggdmFsdWUpCit7CisJdTggbXNnWzZdLCByZWdbNV07CisJaW50IHJl dDsKKworCW1zZ1swXSA9IDA7CisJbXNnWzFdID0gMTsKKwltc2dbMl0gPSAoYWRkciA+PiAxNikg JiAweGZmOworCW1zZ1szXSA9IChhZGRyID4+IDgpICYgMHhmZjsKKwltc2dbNF0gPSBhZGRyICYg MHhmZjsKKwltc2dbNV0gPSB2YWx1ZTsKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBN Ql9NT0RVTEVfSURfRFBfVFgsIERQVFhfV1JJVEVfRFBDRCwKKwkJCQkgIHNpemVvZihtc2cpLCBt c2cpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2RwY2Rfd3JpdGU7CisKKwlyZXQgPSBjZG5fZHBf bWFpbGJveF92YWxpZGF0ZV9yZWNlaXZlKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsCisJCQkJCSAg ICAgIERQVFhfV1JJVEVfRFBDRCwgc2l6ZW9mKHJlZykpOworCWlmIChyZXQpCisJCWdvdG8gZXJy X2RwY2Rfd3JpdGU7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFkX3JlY2VpdmUoZHAsIHJl Zywgc2l6ZW9mKHJlZykpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2RwY2Rfd3JpdGU7CisKKwlp ZiAoYWRkciAhPSAocmVnWzJdIDw8IDE2IHwgcmVnWzNdIDw8IDggfCByZWdbNF0pKQorCQlyZXQg PSAtRUlOVkFMOworCitlcnJfZHBjZF93cml0ZToKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRwLT5k ZXYsICJkcGNkIHdyaXRlIGZhaWxlZDogJWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKwor aW50IGNkbl9kcF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgY29uc3Qg dTMyICppX21lbSwKKwkJCSB1MzIgaV9zaXplLCBjb25zdCB1MzIgKmRfbWVtLCB1MzIgZF9zaXpl KQoreworCXUzMiByZWc7CisJaW50IGksIHJldDsKKworCS8qIHJlc2V0IHVjcHUgYmVmb3JlIGxv YWQgZmlybXdhcmUqLworCXdyaXRlbChBUEJfSVJBTV9QQVRIIHwgQVBCX0RSQU1fUEFUSCB8IEFQ Ql9YVF9SRVNFVCwKKwkgICAgICAgZHAtPnJlZ3MgKyBBUEJfQ1RSTCk7CisKKwlmb3IgKGkgPSAw OyBpIDwgaV9zaXplOyBpICs9IDQpCisJCXdyaXRlbCgqaV9tZW0rKywgZHAtPnJlZ3MgKyBBRERS X0lNRU0gKyBpKTsKKworCWZvciAoaSA9IDA7IGkgPCBkX3NpemU7IGkgKz0gNCkKKwkJd3JpdGVs KCpkX21lbSsrLCBkcC0+cmVncyArIEFERFJfRE1FTSArIGkpOworCisJLyogdW4tcmVzZXQgdWNw dSAqLworCXdyaXRlbCgwLCBkcC0+cmVncyArIEFQQl9DVFJMKTsKKworCS8qIGNoZWNrIHRoZSBr ZWVwIGFsaXZlIHJlZ2lzdGVyIHRvIG1ha2Ugc3VyZSBmdyB3b3JraW5nICovCisJcmV0ID0gcmVh ZHhfcG9sbF90aW1lb3V0KHJlYWRsLCBkcC0+cmVncyArIEtFRVBfQUxJVkUsCisJCQkJIHJlZywg cmVnLCAyMDAwLCBGV19BTElWRV9USU1FT1VUX1VTKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZf ZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gbG9hZGVkIHRoZSBGVyByZWcgPSAleFxuIiwgcmVnKTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVnID0gcmVhZGwoZHAtPnJlZ3MgKyBWRVJfTCkg JiAweGZmOworCWRwLT5md192ZXJzaW9uID0gcmVnOworCXJlZyA9IHJlYWRsKGRwLT5yZWdzICsg VkVSX0gpICYgMHhmZjsKKwlkcC0+ZndfdmVyc2lvbiB8PSByZWcgPDwgODsKKwlyZWcgPSByZWFk bChkcC0+cmVncyArIFZFUl9MSUJfTF9BRERSKSAmIDB4ZmY7CisJZHAtPmZ3X3ZlcnNpb24gfD0g cmVnIDw8IDE2OworCXJlZyA9IHJlYWRsKGRwLT5yZWdzICsgVkVSX0xJQl9IX0FERFIpICYgMHhm ZjsKKwlkcC0+ZndfdmVyc2lvbiB8PSByZWcgPDwgMjQ7CisKKwlkZXZfZGJnKGRwLT5kZXYsICJm aXJtd2FyZSB2ZXJzaW9uOiAleFxuIiwgZHAtPmZ3X3ZlcnNpb24pOworCisJcmV0dXJuIDA7Cit9 CisKK2ludCBjZG5fZHBfc2V0X2Zpcm13YXJlX2FjdGl2ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAq ZHAsIGJvb2wgZW5hYmxlKQoreworCXU4IG1zZ1s1XTsKKwlpbnQgcmV0LCBpOworCisJbXNnWzBd ID0gR0VORVJBTF9NQUlOX0NPTlRST0w7CisJbXNnWzFdID0gTUJfTU9EVUxFX0lEX0dFTkVSQUw7 CisJbXNnWzJdID0gMDsKKwltc2dbM10gPSAxOworCW1zZ1s0XSA9IGVuYWJsZSA/IEZXX0FDVElW RSA6IEZXX1NUQU5EQlk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKG1zZyk7IGkrKykgewor CQlyZXQgPSBjZHBfZHBfbWFpbGJveF93cml0ZShkcCwgbXNnW2ldLCAxKTsKKwkJaWYgKHJldCkK KwkJCWdvdG8gZXJyX3NldF9maXJtd2FyZV9hY3RpdmU7CisJfQorCisJLyogcmVhZCB0aGUgZmly bXdhcmUgc3RhdGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKG1zZyk7IGkrKykgIHsKKwkJ cmV0ID0gY2RuX2RwX21haWxib3hfcmVhZChkcCwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290 byBlcnJfc2V0X2Zpcm13YXJlX2FjdGl2ZTsKKworCQltc2dbaV0gPSByZXQ7CisJfQorCisJZHAt PmZ3X2FjdGl2ZWQgPSAobXNnWzRdID09IEZXX0FDVElWRSk7CisJcmV0ID0gMDsKKworZXJyX3Nl dF9maXJtd2FyZV9hY3RpdmU6CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoZHAtPmRldiwgInNl dCBmaXJtd2FyZSBhY3RpdmUgZmFpbGVkXG4iKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY2Ru X2RwX3NldF9ob3N0X2NhcChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHU4IGxhbmVzLCBib29s IGZsaXApCit7CisJdTggbXNnWzhdOworCWludCByZXQ7CisKKwltc2dbMF0gPSBDRE5fRFBfTUFY X0xJTktfUkFURTsKKwltc2dbMV0gPSBsYW5lczsKKwltc2dbMl0gPSBWT0xUQUdFX0xFVkVMXzI7 CisJbXNnWzNdID0gUFJFX0VNUEhBU0lTX0xFVkVMXzM7CisJbXNnWzRdID0gUFRTMSB8IFBUUzIg fCBQVFMzIHwgUFRTNDsKKwltc2dbNV0gPSBGQVNUX0xUX05PVF9TVVBQT1JUOworCW1zZ1s2XSA9 IGZsaXAgPyBMQU5FX01BUFBJTkdfRkxJUFBFRCA6IExBTkVfTUFQUElOR19OT1JNQUw7CisJbXNn WzddID0gRU5IQU5DRUQ7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RV TEVfSURfRFBfVFgsCisJCQkJICBEUFRYX1NFVF9IT1NUX0NBUEFCSUxJVElFUywKKwkJCQkgIHNp emVvZihtc2cpLCBtc2cpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3NldF9ob3N0X2NhcDsKKwor CXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIERQX0FVWF9TV0FQX0lOVkVSU0lPTl9DT05UUk9M LAorCQkJICAgICAgIEFVWF9IT1NUX0lOVkVSVCk7CisKK2Vycl9zZXRfaG9zdF9jYXA6CisJaWYg KHJldCkKKwkJZGV2X2VycihkcC0+ZGV2LCAic2V0IGhvc3QgY2FwIGZhaWxlZDogJWRcbiIsIHJl dCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNkbl9kcF9ldmVudF9jb25maWcoc3RydWN0IGNk bl9kcF9kZXZpY2UgKmRwKQoreworCXU4IG1zZ1s1XTsKKwlpbnQgcmV0OworCisJbWVtc2V0KG1z ZywgMCwgc2l6ZW9mKG1zZykpOworCisJbXNnWzBdID0gRFBUWF9FVkVOVF9FTkFCTEVfSFBEIHwg RFBUWF9FVkVOVF9FTkFCTEVfVFJBSU5JTkc7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9zZW5k KGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsIERQVFhfRU5BQkxFX0VWRU5ULAorCQkJCSAgc2l6ZW9m KG1zZyksIG1zZyk7CisJaWYgKHJldCkKKwkJZGV2X2VycihkcC0+ZGV2LCAic2V0IGV2ZW50IGNv bmZpZyBmYWlsZWQ6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKwordTMyIGNkbl9k cF9nZXRfZXZlbnQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXJldHVybiByZWFkbChk cC0+cmVncyArIFNXX0VWRU5UUzApOworfQorCitpbnQgY2RuX2RwX2dldF9ocGRfc3RhdHVzKHN0 cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwl1OCBzdGF0dXM7CisJaW50IHJldDsKKworCXJl dCA9IGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwgRFBUWF9IUERf U1RBVEUsCisJCQkJICAwLCBOVUxMKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9nZXRfaHBkOwor CisJcmV0ID0gY2RuX2RwX21haWxib3hfdmFsaWRhdGVfcmVjZWl2ZShkcCwgTUJfTU9EVUxFX0lE X0RQX1RYLAorCQkJCQkgICAgICBEUFRYX0hQRF9TVEFURSwgc2l6ZW9mKHN0YXR1cykpOworCWlm IChyZXQpCisJCWdvdG8gZXJyX2dldF9ocGQ7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFk X3JlY2VpdmUoZHAsICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKKwlpZiAocmV0KQorCQlnb3Rv IGVycl9nZXRfaHBkOworCisJcmV0dXJuIHN0YXR1czsKKworZXJyX2dldF9ocGQ6CisJZGV2X2Vy cihkcC0+ZGV2LCAiZ2V0IGhwZCBzdGF0dXMgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwlyZXR1cm4g cmV0OworfQorCitpbnQgY2RuX2RwX2dldF9lZGlkX2Jsb2NrKHZvaWQgKmRhdGEsIHU4ICplZGlk LAorCQkJICB1bnNpZ25lZCBpbnQgYmxvY2ssIHNpemVfdCBsZW5ndGgpCit7CisJc3RydWN0IGNk bl9kcF9kZXZpY2UgKmRwID0gZGF0YTsKKwl1OCBtc2dbMl0sIHJlZ1syXTsKKwlpbnQgcmV0Owor CisJbXNnWzBdID0gYmxvY2sgLyAyOworCW1zZ1sxXSA9IGJsb2NrICUgMjsKKworCXJldCA9IGNk bl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwgRFBUWF9HRVRfRURJRCwK KwkJCQkgIHNpemVvZihtc2cpLCBtc2cpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2dldF9lZGlk OworCisJcmV0ID0gY2RuX2RwX21haWxib3hfdmFsaWRhdGVfcmVjZWl2ZShkcCwgTUJfTU9EVUxF X0lEX0RQX1RYLAorCQkJCQkgICAgICBEUFRYX0dFVF9FRElELAorCQkJCQkgICAgICBzaXplb2Yo cmVnKSArIGxlbmd0aCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZ2V0X2VkaWQ7CisKKwlyZXQg PSBjZG5fZHBfbWFpbGJveF9yZWFkX3JlY2VpdmUoZHAsIHJlZywgc2l6ZW9mKHJlZykpOworCWlm IChyZXQpCisJCWdvdG8gZXJyX2dldF9lZGlkOworCisJcmV0ID0gY2RuX2RwX21haWxib3hfcmVh ZF9yZWNlaXZlKGRwLCBlZGlkLCBsZW5ndGgpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2dldF9l ZGlkOworCisJaWYgKHJlZ1swXSAhPSBsZW5ndGggfHwgcmVnWzFdICE9IGJsb2NrIC8gMikKKwkJ cmV0ID0gLUVJTlZBTDsKKworZXJyX2dldF9lZGlkOgorCWlmIChyZXQpCisJCWRldl9lcnIoZHAt PmRldiwgImdldCBibG9ja1slZF0gZWRpZCBmYWlsZWQ6ICVkXG4iLCBibG9jaywgcmV0KTsKKwly ZXR1cm4gcmV0OworfQorCitpbnQgY2RuX2RwX3RyYWluaW5nX3N0YXJ0KHN0cnVjdCBjZG5fZHBf ZGV2aWNlICpkcCkKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdTggbXNnLCBldmVudFsy XTsKKwlpbnQgcmV0OworCisJbXNnID0gTElOS19UUkFJTklOR19SVU47CisKKwkvKiBzdGFydCB0 cmFpbmluZyAqLworCXJldCA9IGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9E UF9UWCwgRFBUWF9UUkFJTklOR19DT05UUk9MLAorCQkJCSAgc2l6ZW9mKG1zZyksICZtc2cpOwor CWlmIChyZXQpCisJCWdvdG8gZXJyX3RyYWluaW5nX3N0YXJ0OworCisJdGltZW91dCA9IGppZmZp ZXMgKyBtc2Vjc190b19qaWZmaWVzKExJTktfVFJBSU5JTkdfVElNRU9VVF9NUyk7CisJd2hpbGUg KHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCW1zbGVlcChMSU5LX1RSQUlOSU5H X1JFVFJZX01TKTsKKwkJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lE X0RQX1RYLAorCQkJCQkgIERQVFhfUkVBRF9FVkVOVCwgMCwgTlVMTCk7CisJCWlmIChyZXQpCisJ CQlnb3RvIGVycl90cmFpbmluZ19zdGFydDsKKworCQlyZXQgPSBjZG5fZHBfbWFpbGJveF92YWxp ZGF0ZV9yZWNlaXZlKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsCisJCQkJCQkgICAgICBEUFRYX1JF QURfRVZFTlQsCisJCQkJCQkgICAgICBzaXplb2YoZXZlbnQpKTsKKwkJaWYgKHJldCkKKwkJCWdv dG8gZXJyX3RyYWluaW5nX3N0YXJ0OworCisJCXJldCA9IGNkbl9kcF9tYWlsYm94X3JlYWRfcmVj ZWl2ZShkcCwgZXZlbnQsIHNpemVvZihldmVudCkpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJf dHJhaW5pbmdfc3RhcnQ7CisKKwkJaWYgKGV2ZW50WzFdICYgRVFfUEhBU0VfRklOSVNIRUQpCisJ CQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSAtRVRJTUVET1VUOworCitlcnJfdHJhaW5pbmdfc3Rh cnQ6CisJZGV2X2VycihkcC0+ZGV2LCAidHJhaW5pbmcgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwly ZXR1cm4gcmV0OworfQorCitpbnQgY2RuX2RwX2dldF90cmFpbmluZ19zdGF0dXMoc3RydWN0IGNk bl9kcF9kZXZpY2UgKmRwKQoreworCXU4IHN0YXR1c1sxMF07CisJaW50IHJldDsKKworCXJldCA9 IGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwgRFBUWF9SRUFEX0xJ TktfU1RBVCwKKwkJCQkgIDAsIE5VTEwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2dldF90cmFp bmluZ19zdGF0dXM7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF92YWxpZGF0ZV9yZWNlaXZlKGRw LCBNQl9NT0RVTEVfSURfRFBfVFgsCisJCQkJCSAgICAgIERQVFhfUkVBRF9MSU5LX1NUQVQsCisJ CQkJCSAgICAgIHNpemVvZihzdGF0dXMpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9nZXRfdHJh aW5pbmdfc3RhdHVzOworCisJcmV0ID0gY2RuX2RwX21haWxib3hfcmVhZF9yZWNlaXZlKGRwLCBz dGF0dXMsIHNpemVvZihzdGF0dXMpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9nZXRfdHJhaW5p bmdfc3RhdHVzOworCisJZHAtPmxpbmsucmF0ZSA9IHN0YXR1c1swXTsKKwlkcC0+bGluay5udW1f bGFuZXMgPSBzdGF0dXNbMV07CisKK2Vycl9nZXRfdHJhaW5pbmdfc3RhdHVzOgorCWlmIChyZXQp CisJCWRldl9lcnIoZHAtPmRldiwgImdldCB0cmFpbmluZyBzdGF0dXMgZmFpbGVkOiAlZFxuIiwg cmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY2RuX2RwX3NldF92aWRlb19zdGF0dXMoc3Ry dWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBpbnQgYWN0aXZlKQoreworCXU4IG1zZzsKKwlpbnQgcmV0 OworCisJbXNnID0gISFhY3RpdmU7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBN Ql9NT0RVTEVfSURfRFBfVFgsIERQVFhfU0VUX1ZJREVPLAorCQkJCSAgc2l6ZW9mKG1zZyksICZt c2cpOworCWlmIChyZXQpCisJCWRldl9lcnIoZHAtPmRldiwgInNldCB2aWRlbyBzdGF0dXMgZmFp bGVkOiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2Rw X2dldF9tc2FfbWlzYyhzdHJ1Y3QgdmlkZW9faW5mbyAqdmlkZW8sCisJCQkgICAgICAgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJdTMyIG1zYV9taXNjOworCXU4IHZhbFsyXTsK KworCXN3aXRjaCAodmlkZW8tPmNvbG9yX2ZtdCkgeworCWNhc2UgUFhMX1JHQjoKKwljYXNlIFlf T05MWToKKwkJdmFsWzBdID0gMDsKKwkJYnJlYWs7CisJLyogc2V0IFlVViBkZWZhdWx0IGNvbG9y IHNwYWNlIGNvbnZlcnNpb24gdG8gQlQ2MDEgKi8KKwljYXNlIFlDQkNSXzRfNF80OgorCQl2YWxb MF0gPSA2ICsgQlRfNjAxICogODsKKwkJYnJlYWs7CisJY2FzZSBZQ0JDUl80XzJfMjoKKwkJdmFs WzBdID0gNSArIEJUXzYwMSAqIDg7CisJCWJyZWFrOworCWNhc2UgWUNCQ1JfNF8yXzA6CisJCXZh bFswXSA9IDU7CisJCWJyZWFrOworCX07CisKKwlzd2l0Y2ggKHZpZGVvLT5jb2xvcl9kZXB0aCkg eworCWNhc2UgNjoKKwkJdmFsWzFdID0gMDsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQl2YWxbMV0g PSAxOworCQlicmVhazsKKwljYXNlIDEwOgorCQl2YWxbMV0gPSAyOworCQlicmVhazsKKwljYXNl IDEyOgorCQl2YWxbMV0gPSAzOworCQlicmVhazsKKwljYXNlIDE2OgorCQl2YWxbMV0gPSA0Owor CQlicmVhazsKKwl9OworCisJbXNhX21pc2MgPSAyICogdmFsWzBdICsgMzIgKiB2YWxbMV0gKwor CQkgICAoKHZpZGVvLT5jb2xvcl9mbXQgPT0gWV9PTkxZKSA/ICgxIDw8IDE0KSA6IDApOworCisJ cmV0dXJuIG1zYV9taXNjOworfQorCitpbnQgY2RuX2RwX2NvbmZpZ192aWRlbyhzdHJ1Y3QgY2Ru X2RwX2RldmljZSAqZHApCit7CisJc3RydWN0IHZpZGVvX2luZm8gKnZpZGVvID0gJmRwLT52aWRl b19pbmZvOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJmRwLT5tb2RlOworCXU2 NCBzeW1ib2wsIHRtcDsKKwl1MzIgdmFsLCBsaW5rX3JhdGU7CisJdTggYml0X3Blcl9waXgsIHR1 X3NpemVfcmVnID0gVFVfU0laRTsKKwlpbnQgcmV0OworCisJYml0X3Blcl9waXggPSAodmlkZW8t PmNvbG9yX2ZtdCA9PSBZQ0JDUl80XzJfMikgPworCQkgICAgICAodmlkZW8tPmNvbG9yX2RlcHRo ICogMikgOiAodmlkZW8tPmNvbG9yX2RlcHRoICogMyk7CisKKwlsaW5rX3JhdGUgPSBkcm1fZHBf YndfY29kZV90b19saW5rX3JhdGUoZHAtPmxpbmsucmF0ZSkgLyAxMDAwOworCisJdmFsID0gVklG X0JZUEFTU19JTlRFUkxBQ0U7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgQk5EX0hTWU5D MlZTWU5DLCB2YWwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKworCXJl dCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIEhTWU5DMlZTWU5DX1BPTF9DVFJMLCAwKTsKKwlpZiAo cmV0KQorCQlnb3RvIGVycl9jb25maWdfdmlkZW87CisKKwkvKgorCSAqIGdldCBhIGJlc3QgdHVf c2l6ZSBhbmQgdmFsaWQgc3ltYm9sOgorCSAqIDEuIGNob3NlIExjbGsgZnJlcSgxNjJNaHosIDI3 ME1oeiwgNTQwTWh6KSwgc2V0IFRVIHRvIDMyCisJICogMi4gY2FsY3VsYXRlIFZTKHZhbGlkIHN5 bWJvbCkgPSBUVSAqIFBjbGsgKiBCcHAgLyAoTGNsayAqIExhbmVzKQorCSAqIDMuIGlmIFZTID4g Ki44NSBvciBWUyA8ICouMSBvciBWUyA8IDIgb3IgVFUgPCBWUyArIDQsIHRoZW4gc2V0CisJICog ICAgVFUgKz0gMiBhbmQgcmVwZWF0IDJuZCBzdGVwLgorCSAqLworCWRvIHsKKwkJdHVfc2l6ZV9y ZWcgKz0gMjsKKwkJdG1wID0gdHVfc2l6ZV9yZWcgKiBtb2RlLT5jbG9jayAqIGJpdF9wZXJfcGl4 OworCQl0bXAgLz0gZHAtPmxpbmsubnVtX2xhbmVzICogbGlua19yYXRlICogODsKKwkJc3ltYm9s ID0gdG1wIC8gMTAwMDsKKwl9IHdoaWxlICgoc3ltYm9sIDw9IDEpIHx8ICh0dV9zaXplX3JlZyAt IHN5bWJvbCA8IDQpIHx8CisJCSAodG1wICUgMTAwMCA+IDg1MCkgfHwgKHRtcCAlIDEwMDAgPCAx MDApKTsKKworCXZhbCA9IHN5bWJvbCArICh0dV9zaXplX3JlZyA8PCA4KTsKKwlyZXQgPSBjZG5f ZHBfcmVnX3dyaXRlKGRwLCBEUF9GUkFNRVJfVFUsIHZhbCk7CisJaWYgKHJldCkKKwkJZ290byBl cnJfY29uZmlnX3ZpZGVvOworCisJLyogc2V0IHRoZSBGSUZPIEJ1ZmZlciBzaXplICovCisJdmFs ID0gKChtb2RlLT5jbG9jayAqIChzeW1ib2wgKyAxKSAvIDEwMDApICsgbGlua19yYXRlKTsKKwl2 YWwgLz0gKGRwLT5saW5rLm51bV9sYW5lcyAqIGxpbmtfcmF0ZSk7CisJdmFsID0gOCAqIChzeW1i b2wgKyAxKSAvIGJpdF9wZXJfcGl4IC0gdmFsOworCXZhbCArPSAyOworCXJldCA9IGNkbl9kcF9y ZWdfd3JpdGUoZHAsIERQX1ZDX1RBQkxFKDE1KSwgdmFsKTsKKworCXN3aXRjaCAodmlkZW8tPmNv bG9yX2RlcHRoKSB7CisJY2FzZSA2OgorCQl2YWwgPSBCQ1NfNjsKKwkJYnJlYWs7CisJY2FzZSA4 OgorCQl2YWwgPSBCQ1NfODsKKwkJYnJlYWs7CisJY2FzZSAxMDoKKwkJdmFsID0gQkNTXzEwOwor CQlicmVhazsKKwljYXNlIDEyOgorCQl2YWwgPSBCQ1NfMTI7CisJCWJyZWFrOworCWNhc2UgMTY6 CisJCXZhbCA9IEJDU18xNjsKKwkJYnJlYWs7CisJfTsKKworCXZhbCArPSB2aWRlby0+Y29sb3Jf Zm10IDw8IDg7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgRFBfRlJBTUVSX1BYTF9SRVBS LCB2YWwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKworCXZhbCA9IHZp ZGVvLT5oX3N5bmNfcG9sYXJpdHkgPyBEUF9GUkFNRVJfU1BfSFNQIDogMDsKKwl2YWwgfD0gdmlk ZW8tPnZfc3luY19wb2xhcml0eSA/IERQX0ZSQU1FUl9TUF9WU1AgOiAwOworCXJldCA9IGNkbl9k cF9yZWdfd3JpdGUoZHAsIERQX0ZSQU1FUl9TUCwgdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVy cl9jb25maWdfdmlkZW87CisKKwl2YWwgPSAobW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlz cGxheSkgPDwgMTY7CisJdmFsIHw9IG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZDsKKwly ZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9GUk9OVF9CQUNLX1BPUkNILCB2YWwpOworCWlm IChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKworCXZhbCA9IG1vZGUtPmhkaXNwbGF5 ICogYml0X3Blcl9waXggLyA4OworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIERQX0JZVEVf Q09VTlQsIHZhbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOworCisJdmFs ID0gbW9kZS0+aHRvdGFsIHwgKChtb2RlLT5odG90YWwgLSBtb2RlLT5oc3luY19zdGFydCkgPDwg MTYpOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIE1TQV9IT1JJWk9OVEFMXzAsIHZhbCk7 CisJaWYgKHJldCkKKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOworCisJdmFsID0gbW9kZS0+aHN5 bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7CisJdmFsIHw9IChtb2RlLT5oZGlzcGxheSA8PCAx NikgfCAodmlkZW8tPmhfc3luY19wb2xhcml0eSA8PCAxNSk7CisJcmV0ID0gY2RuX2RwX3JlZ193 cml0ZShkcCwgTVNBX0hPUklaT05UQUxfMSwgdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9j b25maWdfdmlkZW87CisKKwl2YWwgPSBtb2RlLT52dG90YWw7CisJdmFsIHw9ICgobW9kZS0+dnRv dGFsIC0gbW9kZS0+dnN5bmNfc3RhcnQpIDw8IDE2KTsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRl KGRwLCBNU0FfVkVSVElDQUxfMCwgdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jb25maWdf dmlkZW87CisKKwl2YWwgPSBtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydDsKKwl2 YWwgfD0gbW9kZS0+dmRpc3BsYXkgPDwgMTYgfCAodmlkZW8tPnZfc3luY19wb2xhcml0eSA8PCAx NSk7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgTVNBX1ZFUlRJQ0FMXzEsIHZhbCk7CisJ aWYgKHJldCkKKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOworCisJdmFsID0gY2RuX2RwX2dldF9t c2FfbWlzYyh2aWRlbywgbW9kZSk7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgTVNBX01J U0MsIHZhbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOworCisJcmV0ID0g Y2RuX2RwX3JlZ193cml0ZShkcCwgU1RSRUFNX0NPTkZJRywgMSk7CisJaWYgKHJldCkKKwkJZ290 byBlcnJfY29uZmlnX3ZpZGVvOworCisJdmFsID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5 bmNfc3RhcnQ7CisJdmFsIHw9IChtb2RlLT5oZGlzcGxheSA8PCAxNik7CisJcmV0ID0gY2RuX2Rw X3JlZ193cml0ZShkcCwgRFBfSE9SSVpPTlRBTCwgdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVy cl9jb25maWdfdmlkZW87CisKKwl2YWwgPSBtb2RlLT52dG90YWw7CisJdmFsIC09IChtb2RlLT52 dG90YWwgLSBtb2RlLT52ZGlzcGxheSk7CisJdmFsIHw9IChtb2RlLT52dG90YWwgLSBtb2RlLT52 c3luY19zdGFydCkgPDwgMTY7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgRFBfVkVSVElD QUxfMCwgdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jb25maWdfdmlkZW87CisKKwl2YWwg PSBtb2RlLT52dG90YWw7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgRFBfVkVSVElDQUxf MSwgdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jb25maWdfdmlkZW87CisKKwl2YWwgPSAg MDsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlX2JpdChkcCwgRFBfVkJfSUQsIDIsIDEsIHZhbCk7 CisKK2Vycl9jb25maWdfdmlkZW86CisJaWYgKHJldCkKKwkJZGV2X2VycihkcC0+ZGV2LCAiY29u ZmlnIHZpZGVvIGZhaWxlZDogJWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNk bl9kcF9hdWRpb19zdG9wKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgc3RydWN0IGF1ZGlvX2lu Zm8gKmF1ZGlvKQoreworCXUzMiB2YWw7CisJaW50IHJldDsKKworCXJldCA9IGNkbl9kcF9yZWdf d3JpdGUoZHAsIEFVRElPX1BBQ0tfQ09OVFJPTCwgMCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJy KGRwLT5kZXYsICJhdWRpbyBzdG9wIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7 CisJfQorCisJdmFsID0gU1BESUZfQVZHX1NFTCB8IFNQRElGX0pJVFRFUl9CWVBBU1M7CisJdmFs IHw9IFNQRElGX0ZJRk9fTUlEX1JBTkdFKDB4ZTApOworCXZhbCB8PSBTUERJRl9KSVRURVJfVEhS U0goMHhlMCk7CisJdmFsIHw9IFNQRElGX0pJVFRFUl9BVkdfV0lOKDcpOworCXdyaXRlbCh2YWws IGRwLT5yZWdzICsgU1BESUZfQ1RSTF9BRERSKTsKKworCS8qIGNsZWFybiB0aGUgYXVkaW8gY29u ZmlnIGFuZCByZXNldCAqLworCXdyaXRlbCgwLCBkcC0+cmVncyArIEFVRElPX1NSQ19DTlRMKTsK Kwl3cml0ZWwoMCwgZHAtPnJlZ3MgKyBBVURJT19TUkNfQ05GRyk7CisJd3JpdGVsKEFVRElPX1NX X1JTVCwgZHAtPnJlZ3MgKyBBVURJT19TUkNfQ05UTCk7CisJd3JpdGVsKDAsIGRwLT5yZWdzICsg QVVESU9fU1JDX0NOVEwpOworCisJLyogcmVzZXQgc21wbDJwY2t0IGNvbXBvbmVudCAgKi8KKwl3 cml0ZWwoMCwgZHAtPnJlZ3MgKyBTTVBMMlBLVF9DTlRMKTsKKwl3cml0ZWwoQVVESU9fU1dfUlNU LCBkcC0+cmVncyArIFNNUEwyUEtUX0NOVEwpOworCXdyaXRlbCgwLCBkcC0+cmVncyArIFNNUEwy UEtUX0NOVEwpOworCisJLyogcmVzZXQgRklGTyAqLworCXdyaXRlbChBVURJT19TV19SU1QsIGRw LT5yZWdzICsgRklGT19DTlRMKTsKKwl3cml0ZWwoMCwgZHAtPnJlZ3MgKyBGSUZPX0NOVEwpOwor CisJaWYgKGF1ZGlvLT5mb3JtYXQgPT0gQUZNVF9TUERJRikKKwkJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGRwLT5zcGRpZl9jbGspOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjZG5fZHBfYXVkaW9f bXV0ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIGJvb2wgZW5hYmxlKQoreworCWludCByZXQ7 CisKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlX2JpdChkcCwgRFBfVkJfSUQsIDQsIDEsIGVuYWJs ZSk7CisJaWYgKHJldCkKKwkJZGV2X2VycihkcC0+ZGV2LCAiYXVkaW8gbXV0ZSBmYWlsZWQ6ICVk XG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgY2RuX2RwX2F1ZGlv X2NvbmZpZ19pMnMoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLAorCQkJCSAgICBzdHJ1Y3QgYXVk aW9faW5mbyAqYXVkaW8pCit7CisJaW50IHN1Yl9wY2t0X251bSA9IDEsIGkyc19wb3J0X2VuX3Zh bCA9IDB4ZiwgaTsKKwl1MzIgdmFsOworCisJaWYgKGF1ZGlvLT5jaGFubmVscyA9PSAyKSB7CisJ CWlmIChkcC0+bGluay5udW1fbGFuZXMgPT0gMSkKKwkJCXN1Yl9wY2t0X251bSA9IDI7CisJCWVs c2UKKwkJCXN1Yl9wY2t0X251bSA9IDQ7CisKKwkJaTJzX3BvcnRfZW5fdmFsID0gMTsKKwl9IGVs c2UgaWYgKGF1ZGlvLT5jaGFubmVscyA9PSA0KSB7CisJCWkyc19wb3J0X2VuX3ZhbCA9IDM7CisJ fQorCisJd3JpdGVsKDB4MCwgZHAtPnJlZ3MgKyBTUERJRl9DVFJMX0FERFIpOworCisJd3JpdGVs KFNZTkNfV1JfVE9fQ0hfWkVSTywgZHAtPnJlZ3MgKyBGSUZPX0NOVEwpOworCisJdmFsID0gTUFY X05VTV9DSChhdWRpby0+Y2hhbm5lbHMpOworCXZhbCB8PSBOVU1fT0ZfSTJTX1BPUlRTKGF1ZGlv LT5jaGFubmVscyk7CisJdmFsIHw9IEFVRElPX1RZUEVfTFBDTTsKKwl2YWwgfD0gQ0ZHX1NVQl9Q Q0tUX05VTShzdWJfcGNrdF9udW0pOworCXdyaXRlbCh2YWwsIGRwLT5yZWdzICsgU01QTDJQS1Rf Q05GRyk7CisKKwlpZiAoYXVkaW8tPnNhbXBsZV93aWR0aCA9PSAxNikKKwkJdmFsID0gMDsKKwll bHNlIGlmIChhdWRpby0+c2FtcGxlX3dpZHRoID09IDI0KQorCQl2YWwgPSAxIDw8IDk7CisJZWxz ZQorCQl2YWwgPSAyIDw8IDk7CisKKwl2YWwgfD0gQVVESU9fQ0hfTlVNKGF1ZGlvLT5jaGFubmVs cyk7CisJdmFsIHw9IEkyU19ERUNfUE9SVF9FTihpMnNfcG9ydF9lbl92YWwpOworCXZhbCB8PSBU UkFOU19TTVBMX1dJRFRIXzMyOworCXdyaXRlbCh2YWwsIGRwLT5yZWdzICsgQVVESU9fU1JDX0NO RkcpOworCisJZm9yIChpID0gMDsgaSA8IChhdWRpby0+Y2hhbm5lbHMgKyAxKSAvIDI7IGkrKykg eworCQlpZiAoYXVkaW8tPnNhbXBsZV93aWR0aCA9PSAxNikKKwkJCXZhbCA9ICgweDA4IDw8IDgp IHwgKDB4MDggPDwgMjApOworCQllbHNlIGlmIChhdWRpby0+c2FtcGxlX3dpZHRoID09IDI0KQor CQkJdmFsID0gKDB4MGIgPDwgOCkgfCAoMHgwYiA8PCAyMCk7CisKKwkJdmFsIHw9ICgoMiAqIGkp IDw8IDQpIHwgKCgyICogaSArIDEpIDw8IDE2KTsKKwkJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBT VFRTX0JJVF9DSChpKSk7CisJfQorCisJc3dpdGNoIChhdWRpby0+c2FtcGxlX3JhdGUpIHsKKwlj YXNlIDMyMDAwOgorCQl2YWwgPSBTQU1QTElOR19GUkVRKDMpIHwKKwkJICAgICAgT1JJR0lOQUxf U0FNUF9GUkVRKDB4Yyk7CisJCWJyZWFrOworCWNhc2UgNDQxMDA6CisJCXZhbCA9IFNBTVBMSU5H X0ZSRVEoMCkgfAorCQkgICAgICBPUklHSU5BTF9TQU1QX0ZSRVEoMHhmKTsKKwkJYnJlYWs7CisJ Y2FzZSA0ODAwMDoKKwkJdmFsID0gU0FNUExJTkdfRlJFUSgyKSB8CisJCSAgICAgIE9SSUdJTkFM X1NBTVBfRlJFUSgweGQpOworCQlicmVhazsKKwljYXNlIDg4MjAwOgorCQl2YWwgPSBTQU1QTElO R19GUkVRKDgpIHwKKwkJICAgICAgT1JJR0lOQUxfU0FNUF9GUkVRKDB4Nyk7CisJCWJyZWFrOwor CWNhc2UgOTYwMDA6CisJCXZhbCA9IFNBTVBMSU5HX0ZSRVEoMHhhKSB8CisJCSAgICAgIE9SSUdJ TkFMX1NBTVBfRlJFUSg1KTsKKwkJYnJlYWs7CisJY2FzZSAxNzY0MDA6CisJCXZhbCA9IFNBTVBM SU5HX0ZSRVEoMHhjKSB8CisJCSAgICAgIE9SSUdJTkFMX1NBTVBfRlJFUSgzKTsKKwkJYnJlYWs7 CisJY2FzZSAxOTIwMDA6CisJCXZhbCA9IFNBTVBMSU5HX0ZSRVEoMHhlKSB8CisJCSAgICAgIE9S SUdJTkFMX1NBTVBfRlJFUSgxKTsKKwkJYnJlYWs7CisJfQorCXZhbCB8PSA0OworCXdyaXRlbCh2 YWwsIGRwLT5yZWdzICsgQ09NX0NIX1NUVFNfQklUUyk7CisKKwl3cml0ZWwoU01QTDJQS1RfRU4s IGRwLT5yZWdzICsgU01QTDJQS1RfQ05UTCk7CisJd3JpdGVsKEkyU19ERUNfU1RBUlQsIGRwLT5y ZWdzICsgQVVESU9fU1JDX0NOVEwpOworfQorCitzdGF0aWMgdm9pZCBjZG5fZHBfYXVkaW9fY29u ZmlnX3NwZGlmKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwl1MzIgdmFsOworCisJdmFs ID0gU1BESUZfQVZHX1NFTCB8IFNQRElGX0pJVFRFUl9CWVBBU1M7CisJdmFsIHw9IFNQRElGX0ZJ Rk9fTUlEX1JBTkdFKDB4ZTApOworCXZhbCB8PSBTUERJRl9KSVRURVJfVEhSU0goMHhlMCk7CisJ dmFsIHw9IFNQRElGX0pJVFRFUl9BVkdfV0lOKDcpOworCXdyaXRlbCh2YWwsIGRwLT5yZWdzICsg U1BESUZfQ1RSTF9BRERSKTsKKworCXdyaXRlbChTWU5DX1dSX1RPX0NIX1pFUk8sIGRwLT5yZWdz ICsgRklGT19DTlRMKTsKKworCXZhbCA9IE1BWF9OVU1fQ0goMikgfCBBVURJT19UWVBFX0xQQ00g fCBDRkdfU1VCX1BDS1RfTlVNKDQpOworCXdyaXRlbCh2YWwsIGRwLT5yZWdzICsgU01QTDJQS1Rf Q05GRyk7CisJd3JpdGVsKFNNUEwyUEtUX0VOLCBkcC0+cmVncyArIFNNUEwyUEtUX0NOVEwpOwor CisJdmFsID0gU1BESUZfRU5BQkxFIHwgU1BESUZfQVZHX1NFTCB8IFNQRElGX0pJVFRFUl9CWVBB U1M7CisJdmFsIHw9IFNQRElGX0ZJRk9fTUlEX1JBTkdFKDB4ZTApOworCXZhbCB8PSBTUERJRl9K SVRURVJfVEhSU0goMHhlMCk7CisJdmFsIHw9IFNQRElGX0pJVFRFUl9BVkdfV0lOKDcpOworCXdy aXRlbCh2YWwsIGRwLT5yZWdzICsgU1BESUZfQ1RSTF9BRERSKTsKKworCWNsa19wcmVwYXJlX2Vu YWJsZShkcC0+c3BkaWZfY2xrKTsKKwljbGtfc2V0X3JhdGUoZHAtPnNwZGlmX2NsaywgQ0ROX0RQ X1NQRElGX0NMSyk7Cit9CisKK2ludCBjZG5fZHBfYXVkaW9fY29uZmlnKHN0cnVjdCBjZG5fZHBf ZGV2aWNlICpkcCwgc3RydWN0IGF1ZGlvX2luZm8gKmF1ZGlvKQoreworCWludCByZXQ7CisKKwkv KiByZXNldCB0aGUgc3BkaWYgY2xrIGJlZm9yZSBjb25maWcgKi8KKwlpZiAoYXVkaW8tPmZvcm1h dCA9PSBBRk1UX1NQRElGKSB7CisJCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KGRwLT5zcGRpZl9yc3Qp OworCQlyZXNldF9jb250cm9sX2RlYXNzZXJ0KGRwLT5zcGRpZl9yc3QpOworCX0KKworCXJldCA9 IGNkbl9kcF9yZWdfd3JpdGUoZHAsIENNX0xBTkVfQ1RSTCwgTEFORV9SRUZfQ1lDKTsKKwlpZiAo cmV0KQorCQlnb3RvIGVycl9hdWRpb19jb25maWc7CisKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRl KGRwLCBDTV9DVFJMLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9hdWRpb19jb25maWc7CisK KwlpZiAoYXVkaW8tPmZvcm1hdCA9PSBBRk1UX0kyUykKKwkJY2RuX2RwX2F1ZGlvX2NvbmZpZ19p MnMoZHAsIGF1ZGlvKTsKKwllbHNlCisJCWNkbl9kcF9hdWRpb19jb25maWdfc3BkaWYoZHApOwor CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgQVVESU9fUEFDS19DT05UUk9MLCBBVURJT19Q QUNLX0VOKTsKKworZXJyX2F1ZGlvX2NvbmZpZzoKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRwLT5k ZXYsICJhdWRpbyBjb25maWcgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1yZWcuaCBiL2RyaXZl cnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNmFjMzY3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9jZG4tZHAtcmVnLmgKQEAgLTAsMCArMSw0ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQg KEMpIEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJvbmljcyBDby5MdGQKKyAqIEF1dGhvcjogQ2hyaXMg WmhvbmcgPHp5d0Byb2NrLWNoaXBzLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vu c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl IHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0 aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0NE Tl9EUF9SRUdfSAorI2RlZmluZSBfQ0ROX0RQX1JFR19ICisKKyNpbmNsdWRlIDxsaW51eC9iaXRv cHMuaD4KKworI2RlZmluZSBBRERSX0lNRU0JCTB4MTAwMDAKKyNkZWZpbmUgQUREUl9ETUVNCQkw eDIwMDAwCisKKy8qIEFQQiBDRkcgYWRkciAqLworI2RlZmluZSBBUEJfQ1RSTAkJCTAKKyNkZWZp bmUgWFRfSU5UX0NUUkwJCQkweDA0CisjZGVmaW5lIE1BSUxCT1hfRlVMTF9BRERSCQkweDA4Cisj ZGVmaW5lIE1BSUxCT1hfRU1QVFlfQUREUgkJMHgwYworI2RlZmluZSBNQUlMQk9YMF9XUl9EQVRB CQkweDEwCisjZGVmaW5lIE1BSUxCT1gwX1JEX0RBVEEJCTB4MTQKKyNkZWZpbmUgS0VFUF9BTElW RQkJCTB4MTgKKyNkZWZpbmUgVkVSX0wJCQkJMHgxYworI2RlZmluZSBWRVJfSAkJCQkweDIwCisj ZGVmaW5lIFZFUl9MSUJfTF9BRERSCQkJMHgyNAorI2RlZmluZSBWRVJfTElCX0hfQUREUgkJCTB4 MjgKKyNkZWZpbmUgU1dfREVCVUdfTAkJCTB4MmMKKyNkZWZpbmUgU1dfREVCVUdfSAkJCTB4MzAK KyNkZWZpbmUgTUFJTEJPWF9JTlRfTUFTSwkJMHgzNAorI2RlZmluZSBNQUlMQk9YX0lOVF9TVEFU VVMJCTB4MzgKKyNkZWZpbmUgU1dfQ0xLX0wJCQkweDNjCisjZGVmaW5lIFNXX0NMS19ICQkJMHg0 MAorI2RlZmluZSBTV19FVkVOVFMwCQkJMHg0NAorI2RlZmluZSBTV19FVkVOVFMxCQkJMHg0OAor I2RlZmluZSBTV19FVkVOVFMyCQkJMHg0YworI2RlZmluZSBTV19FVkVOVFMzCQkJMHg1MAorI2Rl ZmluZSBYVF9PQ0RfQ1RSTAkJCTB4NjAKKyNkZWZpbmUgQVBCX0lOVF9NQVNLCQkJMHg2YworI2Rl ZmluZSBBUEJfU1RBVFVTX01BU0sJCQkweDcwCisKKy8qIGF1ZGlvIGRlY29kZXIgYWRkciAqLwor I2RlZmluZSBBVURJT19TUkNfQ05UTAkJCTB4MzAwMDAKKyNkZWZpbmUgQVVESU9fU1JDX0NORkcJ CQkweDMwMDA0CisjZGVmaW5lIENPTV9DSF9TVFRTX0JJVFMJCTB4MzAwMDgKKyNkZWZpbmUgU1RU U19CSVRfQ0goeCkJCQkoMHgzMDAwYyArICgoeCkgPDwgMikpCisjZGVmaW5lIFNQRElGX0NUUkxf QUREUgkJCTB4MzAwNGMKKyNkZWZpbmUgU1BESUZfQ0gxX0NTXzMxMDBfQUREUgkJMHgzMDA1MAor I2RlZmluZSBTUERJRl9DSDFfQ1NfNjMzMl9BRERSCQkweDMwMDU0CisjZGVmaW5lIFNQRElGX0NI MV9DU185NTY0X0FERFIJCTB4MzAwNTgKKyNkZWZpbmUgU1BESUZfQ0gxX0NTXzEyNzk2X0FERFIJ CTB4MzAwNWMKKyNkZWZpbmUgU1BESUZfQ0gxX0NTXzE1OTEyOF9BRERSCTB4MzAwNjAKKyNkZWZp bmUgU1BESUZfQ0gxX0NTXzE5MTE2MF9BRERSCTB4MzAwNjQKKyNkZWZpbmUgU1BESUZfQ0gyX0NT XzMxMDBfQUREUgkJMHgzMDA2OAorI2RlZmluZSBTUERJRl9DSDJfQ1NfNjMzMl9BRERSCQkweDMw MDZjCisjZGVmaW5lIFNQRElGX0NIMl9DU185NTY0X0FERFIJCTB4MzAwNzAKKyNkZWZpbmUgU1BE SUZfQ0gyX0NTXzEyNzk2X0FERFIJCTB4MzAwNzQKKyNkZWZpbmUgU1BESUZfQ0gyX0NTXzE1OTEy OF9BRERSCTB4MzAwNzgKKyNkZWZpbmUgU1BESUZfQ0gyX0NTXzE5MTE2MF9BRERSCTB4MzAwN2MK KyNkZWZpbmUgU01QTDJQS1RfQ05UTAkJCTB4MzAwODAKKyNkZWZpbmUgU01QTDJQS1RfQ05GRwkJ CTB4MzAwODQKKyNkZWZpbmUgRklGT19DTlRMCQkJMHgzMDA4OAorI2RlZmluZSBGSUZPX1NUVFMJ CQkweDMwMDhjCisKKy8qIHNvdXJjZSBwaWYgYWRkciAqLworI2RlZmluZSBTT1VSQ0VfUElGX1dS X0FERFIJCTB4MzA4MDAKKyNkZWZpbmUgU09VUkNFX1BJRl9XUl9SRVEJCTB4MzA4MDQKKyNkZWZp bmUgU09VUkNFX1BJRl9SRF9BRERSCQkweDMwODA4CisjZGVmaW5lIFNPVVJDRV9QSUZfUkRfUkVR CQkweDMwODBjCisjZGVmaW5lIFNPVVJDRV9QSUZfREFUQV9XUgkJMHgzMDgxMAorI2RlZmluZSBT T1VSQ0VfUElGX0RBVEFfUkQJCTB4MzA4MTQKKyNkZWZpbmUgU09VUkNFX1BJRl9GSUZPMV9GTFVT SAkJMHgzMDgxOAorI2RlZmluZSBTT1VSQ0VfUElGX0ZJRk8yX0ZMVVNICQkweDMwODFjCisjZGVm aW5lIFNPVVJDRV9QSUZfU1RBVFVTCQkweDMwODIwCisjZGVmaW5lIFNPVVJDRV9QSUZfSU5URVJS VVBUX1NPVVJDRQkweDMwODI0CisjZGVmaW5lIFNPVVJDRV9QSUZfSU5URVJSVVBUX01BU0sJMHgz MDgyOAorI2RlZmluZSBTT1VSQ0VfUElGX1BLVF9BTExPQ19SRUcJMHgzMDgyYworI2RlZmluZSBT T1VSQ0VfUElGX1BLVF9BTExPQ19XUl9FTgkweDMwODMwCisjZGVmaW5lIFNPVVJDRV9QSUZfU1df UkVTRVQJCTB4MzA4MzQKKworLyogYmVsbG93IHJlZ2lzdGVycyBuZWVkIGFjY2VzcyBieSBtYWls Ym94ICovCisvKiBzb3VyY2UgY2FyIGFkZHIgKi8KKyNkZWZpbmUgU09VUkNFX0hEVFhfQ0FSCQkJ MHgwOTAwCisjZGVmaW5lIFNPVVJDRV9EUFRYX0NBUgkJCTB4MDkwNAorI2RlZmluZSBTT1VSQ0Vf UEhZX0NBUgkJCTB4MDkwOAorI2RlZmluZSBTT1VSQ0VfQ0VDX0NBUgkJCTB4MDkwYworI2RlZmlu ZSBTT1VSQ0VfQ0JVU19DQVIJCQkweDA5MTAKKyNkZWZpbmUgU09VUkNFX1BLVF9DQVIJCQkweDA5 MTgKKyNkZWZpbmUgU09VUkNFX0FJRl9DQVIJCQkweDA5MWMKKyNkZWZpbmUgU09VUkNFX0NJUEhF Ul9DQVIJCTB4MDkyMAorI2RlZmluZSBTT1VSQ0VfQ1JZUFRPX0NBUgkJMHgwOTI0CisKKy8qIGNs b2NrIG1ldGVycyBhZGRyICovCisjZGVmaW5lIENNX0NUUkwJCQkJMHgwYTAwCisjZGVmaW5lIENN X0kyU19DVFJMCQkJMHgwYTA0CisjZGVmaW5lIENNX1NQRElGX0NUUkwJCQkweDBhMDgKKyNkZWZp bmUgQ01fVklEX0NUUkwJCQkweDBhMGMKKyNkZWZpbmUgQ01fTEFORV9DVFJMCQkJMHgwYTEwCisj ZGVmaW5lIEkyU19OTV9TVEFCTEUJCQkweDBhMTQKKyNkZWZpbmUgSTJTX05DVFNfU1RBQkxFCQkJ MHgwYTE4CisjZGVmaW5lIFNQRElGX05NX1NUQUJMRQkJCTB4MGExYworI2RlZmluZSBTUERJRl9O Q1RTX1NUQUJMRQkJMHgwYTIwCisjZGVmaW5lIE5NVklEX01FQVNfU1RBQkxFCQkweDBhMjQKKyNk ZWZpbmUgSTJTX01FQVMJCQkweDBhNDAKKyNkZWZpbmUgU1BESUZfTUVBUwkJCTB4MGE4MAorI2Rl ZmluZSBOTVZJRF9NRUFTCQkJMHgwYWMwCisKKy8qIHNvdXJjZSB2aWYgYWRkciAqLworI2RlZmlu ZSBCTkRfSFNZTkMyVlNZTkMJCQkweDBiMDAKKyNkZWZpbmUgSFNZTkMyVlNZTkNfRjFfTDEJCTB4 MGIwNAorI2RlZmluZSBIU1lOQzJWU1lOQ19GMl9MMQkJMHgwYjA4CisjZGVmaW5lIEhTWU5DMlZT WU5DX1NUQVRVUwkJMHgwYjBjCisjZGVmaW5lIEhTWU5DMlZTWU5DX1BPTF9DVFJMCQkweDBiMTAK KworLyogZHB0eCBwaHkgYWRkciAqLworI2RlZmluZSBEUF9UWF9QSFlfQ09ORklHX1JFRwkJMHgy MDAwCisjZGVmaW5lIERQX1RYX1BIWV9TVEFUVVNfUkVHCQkweDIwMDQKKyNkZWZpbmUgRFBfVFhf UEhZX1NXX1JFU0VUCQkweDIwMDgKKyNkZWZpbmUgRFBfVFhfUEhZX1NDUkFNQkxFUl9TRUVECTB4 MjAwYworI2RlZmluZSBEUF9UWF9QSFlfVFJBSU5JTkdfMDFfMDQJMHgyMDEwCisjZGVmaW5lIERQ X1RYX1BIWV9UUkFJTklOR18wNV8wOAkweDIwMTQKKyNkZWZpbmUgRFBfVFhfUEhZX1RSQUlOSU5H XzA5XzEwCTB4MjAxOAorI2RlZmluZSBURVNUX0NPUgkJCTB4MjNmYworCisvKiBkcHR4IGhwZCBh ZGRyICovCisjZGVmaW5lIEhQRF9JUlFfREVUX01JTl9USU1FUgkJMHgyMTAwCisjZGVmaW5lIEhQ RF9JUlFfREVUX01BWF9USU1FUgkJMHgyMTA0CisjZGVmaW5lIEhQRF9VTlBMR0VEX0RFVF9NSU5f VElNRVIJMHgyMTA4CisjZGVmaW5lIEhQRF9TVEFCTEVfVElNRVIJCTB4MjEwYworI2RlZmluZSBI UERfRklMVEVSX1RJTUVSCQkweDIxMTAKKyNkZWZpbmUgSFBEX0VWRU5UX01BU0sJCQkweDIxMWMK KyNkZWZpbmUgSFBEX0VWRU5UX0RFVAkJCTB4MjEyMAorCisvKiBkcHl4IGZyYW1lciBhZGRyICov CisjZGVmaW5lIERQX0ZSQU1FUl9HTE9CQUxfQ09ORklHCQkweDIyMDAKKyNkZWZpbmUgRFBfU1df UkVTRVQJCQkweDIyMDQKKyNkZWZpbmUgRFBfRlJBTUVSX1RVCQkJMHgyMjA4CisjZGVmaW5lIERQ X0ZSQU1FUl9QWExfUkVQUgkJMHgyMjBjCisjZGVmaW5lIERQX0ZSQU1FUl9TUAkJCTB4MjIxMAor I2RlZmluZSBBVURJT19QQUNLX0NPTlRST0wJCTB4MjIxNAorI2RlZmluZSBEUF9WQ19UQUJMRSh4 KQkJCSgweDIyMTggKyAoKHgpIDw8IDIpKQorI2RlZmluZSBEUF9WQl9JRAkJCTB4MjI1OAorI2Rl ZmluZSBEUF9NVFBIX0xWUF9DT05UUk9MCQkweDIyNWMKKyNkZWZpbmUgRFBfTVRQSF9TWU1CT0xf VkFMVUVTCQkweDIyNjAKKyNkZWZpbmUgRFBfTVRQSF9FQ0ZfQ09OVFJPTAkJMHgyMjY0CisjZGVm aW5lIERQX01UUEhfQUNUX0NPTlRST0wJCTB4MjI2OAorI2RlZmluZSBEUF9NVFBIX1NUQVRVUwkJ CTB4MjI2YworI2RlZmluZSBEUF9JTlRFUlJVUFRfU09VUkNFCQkweDIyNzAKKyNkZWZpbmUgRFBf SU5URVJSVVBUX01BU0sJCTB4MjI3NAorI2RlZmluZSBEUF9GUk9OVF9CQUNLX1BPUkNICQkweDIy NzgKKyNkZWZpbmUgRFBfQllURV9DT1VOVAkJCTB4MjI3YworCisvKiBkcHR4IHN0cmVhbSBhZGRy ICovCisjZGVmaW5lIE1TQV9IT1JJWk9OVEFMXzAJCTB4MjI4MAorI2RlZmluZSBNU0FfSE9SSVpP TlRBTF8xCQkweDIyODQKKyNkZWZpbmUgTVNBX1ZFUlRJQ0FMXzAJCQkweDIyODgKKyNkZWZpbmUg TVNBX1ZFUlRJQ0FMXzEJCQkweDIyOGMKKyNkZWZpbmUgTVNBX01JU0MJCQkweDIyOTAKKyNkZWZp bmUgU1RSRUFNX0NPTkZJRwkJCTB4MjI5NAorI2RlZmluZSBBVURJT19QQUNLX1NUQVRVUwkJMHgy Mjk4CisjZGVmaW5lIFZJRl9TVEFUVVMJCQkweDIyOWMKKyNkZWZpbmUgUENLX1NUVUZGX1NUQVRV U18wCQkweDIyYTAKKyNkZWZpbmUgUENLX1NUVUZGX1NUQVRVU18xCQkweDIyYTQKKyNkZWZpbmUg SU5GT19QQUNLX1NUQVRVUwkJMHgyMmE4CisjZGVmaW5lIFJBVEVfR09WRVJOT1JfU1RBVFVTCQkw eDIyYWMKKyNkZWZpbmUgRFBfSE9SSVpPTlRBTAkJCTB4MjJiMAorI2RlZmluZSBEUF9WRVJUSUNB TF8wCQkJMHgyMmI0CisjZGVmaW5lIERQX1ZFUlRJQ0FMXzEJCQkweDIyYjgKKyNkZWZpbmUgRFBf QkxPQ0tfU0RQCQkJMHgyMmJjCisKKy8qIGRwdHggZ2xibCBhZGRyICovCisjZGVmaW5lIERQVFhf TEFORV9FTgkJCTB4MjMwMAorI2RlZmluZSBEUFRYX0VOSE5DRAkJCTB4MjMwNAorI2RlZmluZSBE UFRYX0lOVF9NQVNLCQkJMHgyMzA4CisjZGVmaW5lIERQVFhfSU5UX1NUQVRVUwkJCTB4MjMwYwor CisvKiBkcCBhdXggYWRkciAqLworI2RlZmluZSBEUF9BVVhfSE9TVF9DT05UUk9MCQkweDI4MDAK KyNkZWZpbmUgRFBfQVVYX0lOVEVSUlVQVF9TT1VSQ0UJCTB4MjgwNAorI2RlZmluZSBEUF9BVVhf SU5URVJSVVBUX01BU0sJCTB4MjgwOAorI2RlZmluZSBEUF9BVVhfU1dBUF9JTlZFUlNJT05fQ09O VFJPTAkweDI4MGMKKyNkZWZpbmUgRFBfQVVYX1NFTkRfTkFDS19UUkFOU0FDVElPTgkweDI4MTAK KyNkZWZpbmUgRFBfQVVYX0NMRUFSX1JYCQkJMHgyODE0CisjZGVmaW5lIERQX0FVWF9DTEVBUl9U WAkJCTB4MjgxOAorI2RlZmluZSBEUF9BVVhfVElNRVJfU1RPUAkJMHgyODFjCisjZGVmaW5lIERQ X0FVWF9USU1FUl9DTEVBUgkJMHgyODIwCisjZGVmaW5lIERQX0FVWF9SRVNFVF9TVwkJCTB4Mjgy NAorI2RlZmluZSBEUF9BVVhfRElWSURFXzJNCQkweDI4MjgKKyNkZWZpbmUgRFBfQVVYX1RYX1BS RUFDSEFSR0VfTEVOR1RICTB4MjgyYworI2RlZmluZSBEUF9BVVhfRlJFUVVFTkNZXzFNX01BWAkJ MHgyODMwCisjZGVmaW5lIERQX0FVWF9GUkVRVUVOQ1lfMU1fTUlOCQkweDI4MzQKKyNkZWZpbmUg RFBfQVVYX1JYX1BSRV9NSU4JCTB4MjgzOAorI2RlZmluZSBEUF9BVVhfUlhfUFJFX01BWAkJMHgy ODNjCisjZGVmaW5lIERQX0FVWF9USU1FUl9QUkVTRVQJCTB4Mjg0MAorI2RlZmluZSBEUF9BVVhf TkFDS19GT1JNQVQJCTB4Mjg0NAorI2RlZmluZSBEUF9BVVhfVFhfREFUQQkJCTB4Mjg0OAorI2Rl ZmluZSBEUF9BVVhfUlhfREFUQQkJCTB4Mjg0YworI2RlZmluZSBEUF9BVVhfVFhfU1RBVFVTCQkw eDI4NTAKKyNkZWZpbmUgRFBfQVVYX1JYX1NUQVRVUwkJMHgyODU0CisjZGVmaW5lIERQX0FVWF9S WF9DWUNMRV9DT1VOVEVSCQkweDI4NTgKKyNkZWZpbmUgRFBfQVVYX01BSU5fU1RBVEVTCQkweDI4 NWMKKyNkZWZpbmUgRFBfQVVYX01BSU5fVElNRVIJCTB4Mjg2MAorI2RlZmluZSBEUF9BVVhfQUZF X09VVAkJCTB4Mjg2NAorCisvKiBjcnlwdG8gYWRkciAqLworI2RlZmluZSBDUllQVE9fSERDUF9S RVZJU0lPTgkJMHg1ODAwCisjZGVmaW5lIEhEQ1BfQ1JZUFRPX0NPTkZJRwkJMHg1ODA0CisjZGVm aW5lIENSWVBUT19JTlRFUlJVUFRfU09VUkNFCQkweDU4MDgKKyNkZWZpbmUgQ1JZUFRPX0lOVEVS UlVQVF9NQVNLCQkweDU4MGMKKyNkZWZpbmUgQ1JZUFRPMjJfQ09ORklHCQkJMHg1ODE4CisjZGVm aW5lIENSWVBUTzIyX1NUQVRVUwkJCTB4NTgxYworI2RlZmluZSBTSEFfMjU2X0RBVEFfSU4JCQkw eDU4M2MKKyNkZWZpbmUgU0hBXzI1Nl9EQVRBX09VVF8oeCkJCSgweDU4NTAgKyAoKHgpIDw8IDIp KQorI2RlZmluZSBBRVNfMzJfS0VZXyh4KQkJCSgweDU4NzAgKyAoKHgpIDw8IDIpKQorI2RlZmlu ZSBBRVNfMzJfREFUQV9JTgkJCTB4NTg4MAorI2RlZmluZSBBRVNfMzJfREFUQV9PVVRfKHgpCQko MHg1ODg0ICsgKCh4KSA8PCAyKSkKKyNkZWZpbmUgQ1JZUFRPMTRfQ09ORklHCQkJMHg1OGEwCisj ZGVmaW5lIENSWVBUTzE0X1NUQVRVUwkJCTB4NThhNAorI2RlZmluZSBDUllQVE8xNF9QUk5NX09V VAkJMHg1OGE4CisjZGVmaW5lIENSWVBUTzE0X0tNXzAJCQkweDU4YWMKKyNkZWZpbmUgQ1JZUFRP MTRfS01fMQkJCTB4NThiMAorI2RlZmluZSBDUllQVE8xNF9BTl8wCQkJMHg1OGI0CisjZGVmaW5l IENSWVBUTzE0X0FOXzEJCQkweDU4YjgKKyNkZWZpbmUgQ1JZUFRPMTRfWU9VUl9LU1ZfMAkJMHg1 OGJjCisjZGVmaW5lIENSWVBUTzE0X1lPVVJfS1NWXzEJCTB4NThjMAorI2RlZmluZSBDUllQVE8x NF9NSV8wCQkJMHg1OGM0CisjZGVmaW5lIENSWVBUTzE0X01JXzEJCQkweDU4YzgKKyNkZWZpbmUg Q1JZUFRPMTRfVElfMAkJCTB4NThjYworI2RlZmluZSBDUllQVE8xNF9LSV8wCQkJMHg1OGQwCisj ZGVmaW5lIENSWVBUTzE0X0tJXzEJCQkweDU4ZDQKKyNkZWZpbmUgQ1JZUFRPMTRfQkxPQ0tTX05V TQkJMHg1OGQ4CisjZGVmaW5lIENSWVBUTzE0X0tFWV9NRU1fREFUQV8wCQkweDU4ZGMKKyNkZWZp bmUgQ1JZUFRPMTRfS0VZX01FTV9EQVRBXzEJCTB4NThlMAorI2RlZmluZSBDUllQVE8xNF9TSEEx X01TR19EQVRBCQkweDU4ZTQKKyNkZWZpbmUgQ1JZUFRPMTRfU0hBMV9WX1ZBTFVFXyh4KQkoMHg1 OGU4ICsgKCh4KSA8PCAyKSkKKyNkZWZpbmUgVFJOR19DVFJMCQkJMHg1OGZjCisjZGVmaW5lIFRS TkdfREFUQV9SRFkJCQkweDU5MDAKKyNkZWZpbmUgVFJOR19EQVRBCQkJMHg1OTA0CisKKy8qIGNp cGhlciBhZGRyICovCisjZGVmaW5lIEhEQ1BfUkVWSVNJT04JCQkweDYwMDAwCisjZGVmaW5lIElO VEVSUlVQVF9TT1VSQ0UJCTB4NjAwMDQKKyNkZWZpbmUgSU5URVJSVVBUX01BU0sJCQkweDYwMDA4 CisjZGVmaW5lIEhEQ1BfQ0lQSEVSX0NPTkZJRwkJMHg2MDAwYworI2RlZmluZSBBRVNfMTI4X0tF WV8wCQkJMHg2MDAxMAorI2RlZmluZSBBRVNfMTI4X0tFWV8xCQkJMHg2MDAxNAorI2RlZmluZSBB RVNfMTI4X0tFWV8yCQkJMHg2MDAxOAorI2RlZmluZSBBRVNfMTI4X0tFWV8zCQkJMHg2MDAxYwor I2RlZmluZSBBRVNfMTI4X1JBTkRPTV8wCQkweDYwMDIwCisjZGVmaW5lIEFFU18xMjhfUkFORE9N XzEJCTB4NjAwMjQKKyNkZWZpbmUgQ0lQSEVSMTRfS01fMAkJCTB4NjAwMjgKKyNkZWZpbmUgQ0lQ SEVSMTRfS01fMQkJCTB4NjAwMmMKKyNkZWZpbmUgQ0lQSEVSMTRfU1RBVFVTCQkJMHg2MDAzMAor I2RlZmluZSBDSVBIRVIxNF9SSV9QSl9TVEFUVVMJCTB4NjAwMzQKKyNkZWZpbmUgQ0lQSEVSX01P REUJCQkweDYwMDM4CisjZGVmaW5lIENJUEhFUjE0X0FOXzAJCQkweDYwMDNjCisjZGVmaW5lIENJ UEhFUjE0X0FOXzEJCQkweDYwMDQwCisjZGVmaW5lIENJUEhFUjIyX0FVVEgJCQkweDYwMDQ0Cisj ZGVmaW5lIENJUEhFUjE0X1IwX0RQX1NUQVRVUwkJMHg2MDA0OAorI2RlZmluZSBDSVBIRVIxNF9C T09UU1RSQVAJCTB4NjAwNGMKKworI2RlZmluZSBEUFRYX0ZSTVJfREFUQV9DTEtfUlNUTl9FTglC SVQoMTEpCisjZGVmaW5lIERQVFhfRlJNUl9EQVRBX0NMS19FTgkJQklUKDEwKQorI2RlZmluZSBE UFRYX1BIWV9EQVRBX1JTVE5fRU4JCUJJVCg5KQorI2RlZmluZSBEUFRYX1BIWV9EQVRBX0NMS19F TgkJQklUKDgpCisjZGVmaW5lIERQVFhfUEhZX0NIQVJfUlNUTl9FTgkJQklUKDcpCisjZGVmaW5l IERQVFhfUEhZX0NIQVJfQ0xLX0VOCQlCSVQoNikKKyNkZWZpbmUgU09VUkNFX0FVWF9TWVNfQ0xL X1JTVE5fRU4JQklUKDUpCisjZGVmaW5lIFNPVVJDRV9BVVhfU1lTX0NMS19FTgkJQklUKDQpCisj ZGVmaW5lIERQVFhfU1lTX0NMS19SU1ROX0VOCQlCSVQoMykKKyNkZWZpbmUgRFBUWF9TWVNfQ0xL X0VOCQkJQklUKDIpCisjZGVmaW5lIENGR19EUFRYX1ZJRl9DTEtfUlNUTl9FTglCSVQoMSkKKyNk ZWZpbmUgQ0ZHX0RQVFhfVklGX0NMS19FTgkJQklUKDApCisKKyNkZWZpbmUgU09VUkNFX1BIWV9S U1ROX0VOCQlCSVQoMSkKKyNkZWZpbmUgU09VUkNFX1BIWV9DTEtfRU4JCUJJVCgwKQorCisjZGVm aW5lIFNPVVJDRV9QS1RfU1lTX1JTVE5fRU4JCUJJVCgzKQorI2RlZmluZSBTT1VSQ0VfUEtUX1NZ U19DTEtfRU4JCUJJVCgyKQorI2RlZmluZSBTT1VSQ0VfUEtUX0RBVEFfUlNUTl9FTgkJQklUKDEp CisjZGVmaW5lIFNPVVJDRV9QS1RfREFUQV9DTEtfRU4JCUJJVCgwKQorCisjZGVmaW5lIFNQRElG X0NEUl9DTEtfUlNUTl9FTgkJQklUKDUpCisjZGVmaW5lIFNQRElGX0NEUl9DTEtfRU4JCUJJVCg0 KQorI2RlZmluZSBTT1VSQ0VfQUlGX1NZU19SU1ROX0VOCQlCSVQoMykKKyNkZWZpbmUgU09VUkNF X0FJRl9TWVNfQ0xLX0VOCQlCSVQoMikKKyNkZWZpbmUgU09VUkNFX0FJRl9DTEtfUlNUTl9FTgkJ QklUKDEpCisjZGVmaW5lIFNPVVJDRV9BSUZfQ0xLX0VOCQlCSVQoMCkKKworI2RlZmluZSBTT1VS Q0VfQ0lQSEVSX1NZU1RFTV9DTEtfUlNUTl9FTglCSVQoMykKKyNkZWZpbmUgU09VUkNFX0NJUEhF Ul9TWVNfQ0xLX0VOCQlCSVQoMikKKyNkZWZpbmUgU09VUkNFX0NJUEhFUl9DSEFSX0NMS19SU1RO X0VOCQlCSVQoMSkKKyNkZWZpbmUgU09VUkNFX0NJUEhFUl9DSEFSX0NMS19FTgkJQklUKDApCisK KyNkZWZpbmUgU09VUkNFX0NSWVBUT19TWVNfQ0xLX1JTVE5fRU4JQklUKDEpCisjZGVmaW5lIFNP VVJDRV9DUllQVE9fU1lTX0NMS19FTglCSVQoMCkKKworI2RlZmluZSBBUEJfSVJBTV9QQVRICQkJ QklUKDIpCisjZGVmaW5lIEFQQl9EUkFNX1BBVEgJCQlCSVQoMSkKKyNkZWZpbmUgQVBCX1hUX1JF U0VUCQkJQklUKDApCisKKyNkZWZpbmUgTUFJTEJPWF9JTlRfTUFTS19CSVQJCUJJVCgxKQorI2Rl ZmluZSBQSUZfSU5UX01BU0tfQklUCQlCSVQoMCkKKyNkZWZpbmUgQUxMX0lOVF9NQVNLCQkJMwor CisvKiBtYWlsYm94ICovCisjZGVmaW5lIE1CX09QQ09ERV9JRAkJCTAKKyNkZWZpbmUgTUJfTU9E VUxFX0lECQkJMQorI2RlZmluZSBNQl9TSVpFX01TQl9JRAkJCTIKKyNkZWZpbmUgTUJfU0laRV9M U0JfSUQJCQkzCisjZGVmaW5lIE1CX0RBVEFfSUQJCQk0CisKKyNkZWZpbmUgTUJfTU9EVUxFX0lE X0RQX1RYCQkweDAxCisjZGVmaW5lIE1CX01PRFVMRV9JRF9IRENQX1RYCQkweDA3CisjZGVmaW5l IE1CX01PRFVMRV9JRF9IRENQX1JYCQkweDA4CisjZGVmaW5lIE1CX01PRFVMRV9JRF9IRENQX0dF TkVSQUwJMHgwOQorI2RlZmluZSBNQl9NT0RVTEVfSURfR0VORVJBTAkJMHgwYQorCisvKiBnZW5l cmFsIG9wY29kZSAqLworI2RlZmluZSBHRU5FUkFMX01BSU5fQ09OVFJPTCAgICAgICAgICAgIDB4 MDEKKyNkZWZpbmUgR0VORVJBTF9URVNUX0VDSE8gICAgICAgICAgICAgICAweDAyCisjZGVmaW5l IEdFTkVSQUxfQlVTX1NFVFRJTkdTICAgICAgICAgICAgMHgwMworI2RlZmluZSBHRU5FUkFMX1RF U1RfQUNDRVNTICAgICAgICAgICAgIDB4MDQKKworI2RlZmluZSBEUFRYX1NFVF9QT1dFUl9NTkcJ CQkweDAwCisjZGVmaW5lIERQVFhfU0VUX0hPU1RfQ0FQQUJJTElUSUVTCQkweDAxCisjZGVmaW5l IERQVFhfR0VUX0VESUQJCQkJMHgwMgorI2RlZmluZSBEUFRYX1JFQURfRFBDRAkJCQkweDAzCisj ZGVmaW5lIERQVFhfV1JJVEVfRFBDRAkJCQkweDA0CisjZGVmaW5lIERQVFhfRU5BQkxFX0VWRU5U CQkJMHgwNQorI2RlZmluZSBEUFRYX1dSSVRFX1JFR0lTVEVSCQkJMHgwNgorI2RlZmluZSBEUFRY X1JFQURfUkVHSVNURVIJCQkweDA3CisjZGVmaW5lIERQVFhfV1JJVEVfRklFTEQJCQkweDA4Cisj ZGVmaW5lIERQVFhfVFJBSU5JTkdfQ09OVFJPTAkJCTB4MDkKKyNkZWZpbmUgRFBUWF9SRUFEX0VW RU5UCQkJCTB4MGEKKyNkZWZpbmUgRFBUWF9SRUFEX0xJTktfU1RBVAkJCTB4MGIKKyNkZWZpbmUg RFBUWF9TRVRfVklERU8JCQkJMHgwYworI2RlZmluZSBEUFRYX1NFVF9BVURJTwkJCQkweDBkCisj ZGVmaW5lIERQVFhfR0VUX0xBU1RfQVVYX1NUQVVTCQkJMHgwZQorI2RlZmluZSBEUFRYX1NFVF9M SU5LX0JSRUFLX1BPSU5UCQkweDBmCisjZGVmaW5lIERQVFhfRk9SQ0VfTEFORVMJCQkweDEwCisj ZGVmaW5lIERQVFhfSFBEX1NUQVRFCQkJCTB4MTEKKworI2RlZmluZSBGV19TVEFOREJZCQkJCTAK KyNkZWZpbmUgRldfQUNUSVZFCQkJCTEKKworI2RlZmluZSBEUFRYX0VWRU5UX0VOQUJMRV9IUEQJ CQlCSVQoMCkKKyNkZWZpbmUgRFBUWF9FVkVOVF9FTkFCTEVfVFJBSU5JTkcJCUJJVCgxKQorCisj ZGVmaW5lIExJTktfVFJBSU5JTkdfTk9UX0FDVElWRQkJMAorI2RlZmluZSBMSU5LX1RSQUlOSU5H X1JVTgkJCTEKKyNkZWZpbmUgTElOS19UUkFJTklOR19SRVNUQVJUCQkJMgorCisjZGVmaW5lIENP TlRST0xfVklERU9fSURMRQkJCTAKKyNkZWZpbmUgQ09OVFJPTF9WSURFT19WQUxJRAkJCTEKKwor I2RlZmluZSBWSUZfQllQQVNTX0lOVEVSTEFDRQkJCUJJVCgxMykKKyNkZWZpbmUgSU5URVJMQUNF X0ZNVF9ERVQJCQlCSVQoMTIpCisjZGVmaW5lIElOVEVSTEFDRV9EVENUX1dJTgkJCTB4MjAKKwor I2RlZmluZSBEUF9GUkFNRVJfU1BfSU5URVJMQUNFX0VOCQlCSVQoMikKKyNkZWZpbmUgRFBfRlJB TUVSX1NQX0hTUAkJCUJJVCgxKQorI2RlZmluZSBEUF9GUkFNRVJfU1BfVlNQCQkJQklUKDApCisK Ky8qIGNhcGFiaWxpdHkgKi8KKyNkZWZpbmUgQVVYX0hPU1RfSU5WRVJUCQkJCTMKKyNkZWZpbmUJ RkFTVF9MVF9TVVBQT1JUCQkJCTEKKyNkZWZpbmUgRkFTVF9MVF9OT1RfU1VQUE9SVAkJCTAKKyNk ZWZpbmUgTEFORV9NQVBQSU5HX05PUk1BTAkJCTB4MWIKKyNkZWZpbmUgTEFORV9NQVBQSU5HX0ZM SVBQRUQJCQkweGU0CisjZGVmaW5lIEVOSEFOQ0VECQkJCTEKKworI2RlZmluZQlGVUxMX0xUX1NU QVJURUQJCQkJQklUKDApCisjZGVmaW5lIEZBU0VfTFRfU1RBUlRFRAkJCQlCSVQoMSkKKyNkZWZp bmUgQ0xLX1JFQ09WRVJZX0ZJTklTSEVECQkJQklUKDIpCisjZGVmaW5lIEVRX1BIQVNFX0ZJTklT SEVECQkJQklUKDMpCisjZGVmaW5lIEZBU0VfTFRfU1RBUlRfRklOSVNIRUQJCQlCSVQoNCkKKyNk ZWZpbmUgQ0xLX1JFQ09WRVJZX0ZBSUxFRAkJCUJJVCg1KQorI2RlZmluZSBFUV9QSEFTRV9GQUlM RUQJCQkJQklUKDYpCisjZGVmaW5lIEZBU0VfTFRfRkFJTEVECQkJCUJJVCg3KQorCisjZGVmaW5l IERQVFhfSFBEX0VWRU5UCQkJCUJJVCgwKQorI2RlZmluZSBEUFRYX1RSQUlOSU5HX0VWRU5UCQkJ QklUKDEpCisjZGVmaW5lIEhEQ1BfVFhfU1RBVFVTX0VWRU5UCQkJQklUKDQpCisjZGVmaW5lIEhE Q1AyX1RYX0lTX0tNX1NUT1JFRF9FVkVOVAkJQklUKDUpCisjZGVmaW5lIEhEQ1AyX1RYX1NUT1JF X0tNX0VWRU5UCQkJQklUKDYpCisjZGVmaW5lIEhEQ1BfVFhfSVNfUkVDRUlWRVJfSURfVkFMSURf RVZFTlQJQklUKDcpCisKKyNkZWZpbmUgVFVfU0laRQkJCQkJMzAKKyNkZWZpbmUgQ0ROX0RQX01B WF9MSU5LX1JBVEUJCQlEUF9MSU5LX0JXXzVfNAorCisvKiBhdWRpbyAqLworI2RlZmluZSBBVURJ T19QQUNLX0VOCQkJCUJJVCg4KQorI2RlZmluZSBTQU1QTElOR19GUkVRKHgpCQkJKCgoeCkgJiAw eGYpIDw8IDE2KQorI2RlZmluZSBPUklHSU5BTF9TQU1QX0ZSRVEoeCkJCQkoKCh4KSAmIDB4Zikg PDwgMjQpCisjZGVmaW5lIFNZTkNfV1JfVE9fQ0hfWkVSTwkJCUJJVCgxKQorI2RlZmluZSBJMlNf REVDX1NUQVJUCQkJCUJJVCgxKQorI2RlZmluZSBBVURJT19TV19SU1QJCQkJQklUKDApCisjZGVm aW5lIFNNUEwyUEtUX0VOCQkJCUJJVCgxKQorI2RlZmluZSBNQVhfTlVNX0NIKHgpCQkJCSgoKHgp ICYgMHgxZikgLSAxKQorI2RlZmluZSBOVU1fT0ZfSTJTX1BPUlRTKHgpCQkJKCgoKHgpIC8gMiAt IDEpICYgMHgzKSA8PCA1KQorI2RlZmluZSBBVURJT19UWVBFX0xQQ00JCQkJKDIgPDwgNykKKyNk ZWZpbmUgQ0ZHX1NVQl9QQ0tUX05VTSh4KQkJCSgoKCh4KSAtIDEpICYgMHg3KSA8PCAxMSkKKyNk ZWZpbmUgQVVESU9fQ0hfTlVNKHgpCQkJCSgoKCh4KSAtIDEpICYgMHgxZikgPDwgMikKKyNkZWZp bmUgVFJBTlNfU01QTF9XSURUSF8xNgkJCTAKKyNkZWZpbmUgVFJBTlNfU01QTF9XSURUSF8yNAkJ CUJJVCgxMSkKKyNkZWZpbmUgVFJBTlNfU01QTF9XSURUSF8zMgkJCSgyIDw8IDExKQorI2RlZmlu ZSBJMlNfREVDX1BPUlRfRU4oeCkJCQkoKCh4KSAmIDB4ZikgPDwgMTcpCisjZGVmaW5lIFNQRElG X0VOQUJMRQkJCQlCSVQoMjEpCisjZGVmaW5lIFNQRElGX0FWR19TRUwJCQkJQklUKDIwKQorI2Rl ZmluZSBTUERJRl9KSVRURVJfQllQQVNTCQkJQklUKDE5KQorI2RlZmluZSBTUERJRl9GSUZPX01J RF9SQU5HRSh4KQkJCSgoKHgpICYgMHhmZikgPDwgMTEpCisjZGVmaW5lIFNQRElGX0pJVFRFUl9U SFJTSCh4KQkJCSgoKHgpICYgMHhmZikgPDwgMykKKyNkZWZpbmUgU1BESUZfSklUVEVSX0FWR19X SU4oeCkJCQkoKHgpICYgMHg3KQorCisvKiBSZWZlcm5jZSBjeWNsZXMgd2hlbiB1c2luZyBsYW5l IGNsb2NrIGFzIHJlZmVybmNlICovCisjZGVmaW5lIExBTkVfUkVGX0NZQwkJCQkweDgwMDAKKwor ZW51bSB2b2x0YWdlX3N3aW5nX2xldmVsIHsKKwlWT0xUQUdFX0xFVkVMXzAsCisJVk9MVEFHRV9M RVZFTF8xLAorCVZPTFRBR0VfTEVWRUxfMiwKKwlWT0xUQUdFX0xFVkVMXzMsCit9OworCitlbnVt IHByZV9lbXBoYXNpc19sZXZlbCB7CisJUFJFX0VNUEhBU0lTX0xFVkVMXzAsCisJUFJFX0VNUEhB U0lTX0xFVkVMXzEsCisJUFJFX0VNUEhBU0lTX0xFVkVMXzIsCisJUFJFX0VNUEhBU0lTX0xFVkVM XzMsCit9OworCitlbnVtIHBhdHRlcm5fc2V0IHsKKwlQVFMxCQk9IEJJVCgwKSwKKwlQVFMyCQk9 IEJJVCgxKSwKKwlQVFMzCQk9IEJJVCgyKSwKKwlQVFM0CQk9IEJJVCgzKSwKKwlEUF9OT05FCQk9 IEJJVCg0KQorfTsKKworZW51bSB2aWNfY29sb3JfZGVwdGggeworCUJDU182ID0gMHgxLAorCUJD U184ID0gMHgyLAorCUJDU18xMCA9IDB4NCwKKwlCQ1NfMTIgPSAweDgsCisJQkNTXzE2ID0gMHgx MCwKK307CisKK2VudW0gdmljX2J0X3R5cGUgeworCUJUXzYwMSA9IDB4MCwKKwlCVF83MDkgPSAw eDEsCit9OworCit2b2lkIGNkbl9kcF9jbG9ja19yZXNldChzdHJ1Y3QgY2RuX2RwX2RldmljZSAq ZHApOworCit2b2lkIGNkbl9kcF9zZXRfZndfY2xrKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwg dTMyIGNsayk7CitpbnQgY2RuX2RwX2xvYWRfZmlybXdhcmUoc3RydWN0IGNkbl9kcF9kZXZpY2Ug KmRwLCBjb25zdCB1MzIgKmlfbWVtLAorCQkJIHUzMiBpX3NpemUsIGNvbnN0IHUzMiAqZF9tZW0s IHUzMiBkX3NpemUpOworaW50IGNkbl9kcF9zZXRfZmlybXdhcmVfYWN0aXZlKHN0cnVjdCBjZG5f ZHBfZGV2aWNlICpkcCwgYm9vbCBlbmFibGUpOworaW50IGNkbl9kcF9zZXRfaG9zdF9jYXAoc3Ry dWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1OCBsYW5lcywgYm9vbCBmbGlwKTsKK2ludCBjZG5fZHBf ZXZlbnRfY29uZmlnKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCk7Cit1MzIgY2RuX2RwX2dldF9l dmVudChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApOworaW50IGNkbl9kcF9nZXRfaHBkX3N0YXR1 cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApOworaW50IGNkbl9kcF9kcGNkX3dyaXRlKHN0cnVj dCBjZG5fZHBfZGV2aWNlICpkcCwgdTMyIGFkZHIsIHU4IHZhbHVlKTsKK2ludCBjZG5fZHBfZHBj ZF9yZWFkKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTMyIGFkZHIsIHU4ICpkYXRhLCB1MTYg bGVuKTsKK2ludCBjZG5fZHBfZ2V0X2VkaWRfYmxvY2sodm9pZCAqZHAsIHU4ICplZGlkLAorCQkJ ICB1bnNpZ25lZCBpbnQgYmxvY2ssIHNpemVfdCBsZW5ndGgpOworaW50IGNkbl9kcF90cmFpbmlu Z19zdGFydChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApOworaW50IGNkbl9kcF9nZXRfdHJhaW5p bmdfc3RhdHVzKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCk7CitpbnQgY2RuX2RwX3NldF92aWRl b19zdGF0dXMoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBpbnQgYWN0aXZlKTsKK2ludCBjZG5f ZHBfY29uZmlnX3ZpZGVvKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCk7CitpbnQgY2RuX2RwX2F1 ZGlvX3N0b3Aoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBzdHJ1Y3QgYXVkaW9faW5mbyAqYXVk aW8pOworaW50IGNkbl9kcF9hdWRpb19tdXRlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgYm9v bCBlbmFibGUpOworaW50IGNkbl9kcF9hdWRpb19jb25maWcoc3RydWN0IGNkbl9kcF9kZXZpY2Ug KmRwLCBzdHJ1Y3QgYXVkaW9faW5mbyAqYXVkaW8pOworI2VuZGlmIC8qIF9DRE5fRFBfUkVHX0gg Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9w LmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jCmluZGV4IGVk ZDdlYzIuLmQ3MjNkOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2Nr Y2hpcF9kcm1fdm9wLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2Ry bV92b3AuYwpAQCAtOTY5LDkgKzk2OSwxMSBAQCBzdGF0aWMgdm9pZCB2b3BfY3J0Y19lbmFibGUo c3RydWN0IGRybV9jcnRjICpjcnRjKQogCQl2b3BfZHNwX2hvbGRfdmFsaWRfaXJxX2Rpc2FibGUo dm9wKTsKIAl9CiAKLQlwaW5fcG9sID0gMHg4OwotCXBpbl9wb2wgfD0gKGFkanVzdGVkX21vZGUt PmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpID8gMCA6IDE7Ci0JcGluX3BvbCB8PSAoYWRq dXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05WU1lOQykgPyAwIDogKDEgPDwgMSk7 CisJcGluX3BvbCA9IEJJVChEQ0xLX0lOVkVSVCk7CisJcGluX3BvbCB8PSAoYWRqdXN0ZWRfbW9k ZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05IU1lOQykgPworCQkgICAwIDogQklUKEhTWU5DX1BP U0lUSVZFKTsKKwlwaW5fcG9sIHw9IChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZM QUdfTlZTWU5DKSA/CisJCSAgIDAgOiBCSVQoVlNZTkNfUE9TSVRJVkUpOwogCVZPUF9DVFJMX1NF VCh2b3AsIHBpbl9wb2wsIHBpbl9wb2wpOwogCiAJc3dpdGNoIChzLT5vdXRwdXRfdHlwZSkgewpA QCAtOTkxLDYgKzk5MywxMSBAQCBzdGF0aWMgdm9pZCB2b3BfY3J0Y19lbmFibGUoc3RydWN0IGRy bV9jcnRjICpjcnRjKQogCQlWT1BfQ1RSTF9TRVQodm9wLCBtaXBpX3Bpbl9wb2wsIHBpbl9wb2wp OwogCQlWT1BfQ1RSTF9TRVQodm9wLCBtaXBpX2VuLCAxKTsKIAkJYnJlYWs7CisJY2FzZSBEUk1f TU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQ6CisJCXBpbl9wb2wgJj0gfkJJVChEQ0xLX0lOVkVS VCk7CisJCVZPUF9DVFJMX1NFVCh2b3AsIGRwX3Bpbl9wb2wsIHBpbl9wb2wpOworCQlWT1BfQ1RS TF9TRVQodm9wLCBkcF9lbiwgMSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURSTV9FUlJPUigi dW5zdXBwb3J0IGNvbm5lY3Rvcl90eXBlWyVkXVxuIiwgcy0+b3V0cHV0X3R5cGUpOwogCX0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmggYi9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5oCmluZGV4IGZmNGY1MmUu LjQ4MjBhOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9k cm1fdm9wLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3Au aApAQCAtNDUsNiArNDUsNyBAQCBzdHJ1Y3Qgdm9wX2N0cmwgewogCXN0cnVjdCB2b3BfcmVnIGVk cF9lbjsKIAlzdHJ1Y3Qgdm9wX3JlZyBoZG1pX2VuOwogCXN0cnVjdCB2b3BfcmVnIG1pcGlfZW47 CisJc3RydWN0IHZvcF9yZWcgZHBfZW47CiAJc3RydWN0IHZvcF9yZWcgb3V0X21vZGU7CiAJc3Ry dWN0IHZvcF9yZWcgZGl0aGVyX2Rvd247CiAJc3RydWN0IHZvcF9yZWcgZGl0aGVyX3VwOwpAQCAt NTMsNiArNTQsNyBAQCBzdHJ1Y3Qgdm9wX2N0cmwgewogCXN0cnVjdCB2b3BfcmVnIGhkbWlfcGlu X3BvbDsKIAlzdHJ1Y3Qgdm9wX3JlZyBlZHBfcGluX3BvbDsKIAlzdHJ1Y3Qgdm9wX3JlZyBtaXBp X3Bpbl9wb2w7CisJc3RydWN0IHZvcF9yZWcgZHBfcGluX3BvbDsKIAogCXN0cnVjdCB2b3BfcmVn IGh0b3RhbF9wdzsKIAlzdHJ1Y3Qgdm9wX3JlZyBoYWN0X3N0X2VuZDsKQEAgLTI0Miw2ICsyNDQs MTMgQEAgZW51bSBzY2FsZV9kb3duX21vZGUgewogCVNDQUxFX0RPV05fQVZHID0gMHgxCiB9Owog CitlbnVtIHZvcF9wb2wgeworCUhTWU5DX1BPU0lUSVZFID0gMCwKKwlWU1lOQ19QT1NJVElWRSA9 IDEsCisJREVOX05FR0FUSVZFICAgPSAyLAorCURDTEtfSU5WRVJUICAgID0gMworfTsKKwogI2Rl ZmluZSBGUkFDXzE2XzE2KG11bHQsIGRpdikgICAgKCgobXVsdCkgPDwgMTYpIC8gKGRpdikpCiAj ZGVmaW5lIFNDTF9GVF9ERUZBVUxUX0ZJWFBPSU5UX1NISUZUCTEyCiAjZGVmaW5lIFNDTF9NQVhf VlNLSVBMSU5FUwkJNApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tj aGlwX3ZvcF9yZWcuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF92b3BfcmVn LmMKaW5kZXggNWIxYWUxZi4uZGNmMTcyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL3JvY2tjaGlwX3ZvcF9yZWcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv cm9ja2NoaXBfdm9wX3JlZy5jCkBAIC0yODEsNiArMjgxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVj dCB2b3BfZGF0YSByazMyODhfdm9wID0gewogc3RhdGljIGNvbnN0IHN0cnVjdCB2b3BfY3RybCBy azMzOTlfY3RybF9kYXRhID0gewogCS5zdGFuZGJ5ID0gVk9QX1JFRyhSSzMzOTlfU1lTX0NUUkws IDB4MSwgMjIpLAogCS5nYXRlX2VuID0gVk9QX1JFRyhSSzMzOTlfU1lTX0NUUkwsIDB4MSwgMjMp LAorCS5kcF9lbiA9IFZPUF9SRUcoUkszMzk5X1NZU19DVFJMLCAweDEsIDExKSwKIAkucmdiX2Vu ID0gVk9QX1JFRyhSSzMzOTlfU1lTX0NUUkwsIDB4MSwgMTIpLAogCS5oZG1pX2VuID0gVk9QX1JF RyhSSzMzOTlfU1lTX0NUUkwsIDB4MSwgMTMpLAogCS5lZHBfZW4gPSBWT1BfUkVHKFJLMzM5OV9T WVNfQ1RSTCwgMHgxLCAxNCksCkBAIC0yOTAsNiArMjkxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVj dCB2b3BfY3RybCByazMzOTlfY3RybF9kYXRhID0gewogCS5kYXRhX2JsYW5rID0gVk9QX1JFRyhS SzMzOTlfRFNQX0NUUkwwLCAweDEsIDE5KSwKIAkub3V0X21vZGUgPSBWT1BfUkVHKFJLMzM5OV9E U1BfQ1RSTDAsIDB4ZiwgMCksCiAJLnJnYl9waW5fcG9sID0gVk9QX1JFRyhSSzMzOTlfRFNQX0NU UkwxLCAweGYsIDE2KSwKKwkuZHBfcGluX3BvbCA9IFZPUF9SRUcoUkszMzk5X0RTUF9DVFJMMSwg MHhmLCAxNiksCiAJLmhkbWlfcGluX3BvbCA9IFZPUF9SRUcoUkszMzk5X0RTUF9DVFJMMSwgMHhm LCAyMCksCiAJLmVkcF9waW5fcG9sID0gVk9QX1JFRyhSSzMzOTlfRFNQX0NUUkwxLCAweGYsIDI0 KSwKIAkubWlwaV9waW5fcG9sID0gVk9QX1JFRyhSSzMzOTlfRFNQX0NUUkwxLCAweGYsIDI4KSwK LS0gCjEuOS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK