From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [v10 PATCH 5/5] drm/rockchip: cdn-dp: add cdn DP support for rk3399 Date: Tue, 9 Aug 2016 16:32:37 -0700 Message-ID: <1470785557-21974-6-git-send-email-zyw@rock-chips.com> References: <1470785557-21974-1-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-1-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, Chris Zhong , 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 Q2hhbmdlcyBpbiB2MTA6Ci0gY29udHJvbCB0aGUgZ3JmX2NsayBpbiBEUAoKQ2hhbmdlcyBpbiB2 OToKLSBkbyBub3QgbmVlZCByZXNldCB0aGUgcGh5IGJlZm9yZSBwb3dlcl9vbgotIGFkZCBhIG9y aWVudGF0aW9uIGluZm9ybWF0aW9uIGZvciBzZXRfY2FwYWJpbGl0eQotIHJldHJ5IHRvIHJlYWQg ZHBjZCBpbiAxMCBzZWNvbmRzCgpDaGFuZ2VzIGluIHY4OgotIG9wdGltaXphdGlvbiB0aGUgZXJy IGxvZwoKQ2hhbmdlcyBpbiB2NzoKLSBzdXBwb3J0IGZpcm13YXJlIHN0YW5kYnkgd2hlbiBubyBk cHR4IGNvbm5lY3Rpb24KLSBvcHRpbWl6YXRpb24gdGhlIGNhbGN1bGF0aW9uIG9mIHR1IHNpemUg YW5kIHZhbGlkIHN5bWJvbAoKQ2hhbmdlcyBpbiB2NjoKLSBhZGQgYSBwb3J0IHN0cnVjdAotIHNl bGVjdCBTTkRfU09DX0hETUlfQ09ERUMKLSBmb3JjZSByZXNldCB0aGUgcGh5IHdoZW4gaHBkIGRl dGVjdGVkCgpDaGFuZ2VzIGluIHY1OgotIGFscGhhYmV0aWNhbCBvcmRlcgotIGRvIG5vdCB1c2Ug bG9uZywgdXNlIHUzMiBvciB1NjQKLSByZXR1cm4gTU9ERV9DTE9DS19ISUdIIHdoZW4gcmVxdWVz dGVkID4gYWN0dWFsCi0gT3B0aW1pemVkIENvZGluZyBTdHlsZQotIGFkZCBhIGZvcm11bGEgdG8g Z2V0IGJldHRlciB0dSBzaXplIGFuZCBzeW1ib2wgdmFsdWUuCi0gbW9kaWZ5IGFjY29yZGluZyB0 byBTZWFuIFBhdWwncyBjb21tZW50cwotIGZpeGVkIHRoZSBmd193YWl0IGFsd2F5cyAwCgpDaGFu Z2VzIGluIHY0OgotIHVzZSBwaHkgZnJhbWV3b3JrIHRvIGNvbnRyb2wgRFAgcGh5Ci0gc3VwcG9y dCAyIHBoeXMKCkNoYW5nZXMgaW4gdjM6Ci0gdXNlIEVYVENPTl9ESVNQX0RQIGFuZCBFWFRDT05f RElTUF9EUF9BTFQgY2FibGUgdG8gZ2V0IGRwIHBvcnQgc3RhdGUuCi0gcmVzZXQgc3BkaWYgYmVm b3JlIGNvbmZpZyBpdAotIG1vZGlmeSB0aGUgZmlybXdhcmUgY2xrIHRvIDEwME1oegotIHJldHJ5 IGxvYWQgZmlybXdhcmUgaWYgZncgZmlsZSBpcyByZXF1ZXN0ZWQgdG9vIGVhcmx5CgpDaGFuZ2Vz IGluIHYyOgotIEFscGhhYmV0aWMgb3JkZXIKLSByZW1vdmUgZXhjZXNzIGVycm9yIG1lc3NhZ2UK LSB1c2UgZGVmaW5lIGNsa19yYXRlCi0gY2hlY2sgYWxsIHJldHVybiB2YWx1ZQotIHJlbW92ZSBk ZXZfc2V0X25hbWUoZHAtPmRldiwgImNkbi1kcCIpOwotIHVzZSBzY2hlZHVsZV9kZWxheWVkX3dv cmsKLSByZW1vdmUgbmV2ZXItY2FsbGVkIGZ1bmN0aW9ucwotIHJlbW92ZSBzb21lIHVubmVjZXNz YXJ5ICgpCgpDaGFuZ2VzIGluIHYxOgotIHVzZSBleHRjb24gQVBJCi0gdXNlIGhkbWktY29kZWMg Zm9yIHRoZSBEUCBBc29jCi0gZG8gbm90IGluaXRpYWxpemUgdGhlICJyZXQiCi0gcHJpbnRrIGEg ZXJyIGxvZyB3aGVuIGRybV9vZl9lbmNvZGVyX2FjdGl2ZV9lbmRwb2ludF9pZAotIG1vZGlmeSB0 aGUgZGNsayBwaW5fcG9sIHRvIGEgc2luZ2xlIGxpbmUKCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvS2NvbmZpZyAgICAgICAgICAgIHwgIDEwICsKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9N YWtlZmlsZSAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1k cC1jb3JlLmMgICAgICB8IDkxMCArKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9n cHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmggICAgICB8IDEwNCArKysKIGRyaXZlcnMvZ3B1 L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmMgICAgICAgfCA5NTkgKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1yZWcuaCAgICAgICB8 IDQ4MiArKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2Ry bV92b3AuYyB8ICAxMyArLQogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92 b3AuaCB8ICAgOSArCiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfdm9wX3JlZy5j IHwgICAyICsKIDkgZmlsZXMgY2hhbmdlZCwgMjQ4NyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9u cygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAt Y29yZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1k cC1jb3JlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2Ru LWRwLXJlZy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nk bi1kcC1yZWcuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmln IGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcKaW5kZXggZDMwYmRjMy4uMjBhYWFm ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcKKysrIGIvZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcKQEAgLTI1LDYgKzI1LDE2IEBAIGNvbmZpZyBS T0NLQ0hJUF9BTkFMT0dJWF9EUAogCSAgZm9yIHRoZSBBbmFsb2dpeCBDb3JlIERQIGRyaXZlci4g SWYgeW91IHdhbnQgdG8gZW5hYmxlIERQCiAJICBvbiBSSzMyODggYmFzZWQgU29DLCB5b3Ugc2hv dWxkIHNlbGV0IHRoaXMgb3B0aW9uLgogCitjb25maWcgUk9DS0NISVBfQ0ROX0RQCisgICAgICAg IHRyaXN0YXRlICJSb2NrY2hpcCBjZG4gRFAiCisgICAgICAgIGRlcGVuZHMgb24gRFJNX1JPQ0tD SElQCisJc2VsZWN0IFNORF9TT0NfSERNSV9DT0RFQyBpZiBTTkRfU09DCisgICAgICAgIGhlbHAK KwkgIFRoaXMgc2VsZWN0cyBzdXBwb3J0IGZvciBSb2NrY2hpcCBTb0Mgc3BlY2lmaWMgZXh0ZW5z aW9ucworCSAgZm9yIHRoZSBjZG4gRFAgZHJpdmVyLiBJZiB5b3Ugd2FudCB0byBlbmFibGUgRHAg b24KKwkgIFJLMzM5OSBiYXNlZCBTb0MsIHlvdSBzaG91bGQgc2VsZWN0IHRoaXMKKwkgIG9wdGlv bi4KKwogY29uZmlnIFJPQ0tDSElQX0RXX0hETUkKICAgICAgICAgdHJpc3RhdGUgIlJvY2tjaGlw IHNwZWNpZmljIGV4dGVuc2lvbnMgZm9yIFN5bm9wc3lzIERXIEhETUkiCiAgICAgICAgIGRlcGVu ZHMgb24gRFJNX1JPQ0tDSElQCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv TWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKaW5kZXggMDVkMDcx My4uYWJkZWNkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxl CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZQpAQCAtNyw2ICs3LDcgQEAg cm9ja2NoaXBkcm0teSA6PSByb2NrY2hpcF9kcm1fZHJ2Lm8gcm9ja2NoaXBfZHJtX2ZiLm8gXAog cm9ja2NoaXBkcm0tJChDT05GSUdfRFJNX0ZCREVWX0VNVUxBVElPTikgKz0gcm9ja2NoaXBfZHJt X2ZiZGV2Lm8KIAogb2JqLSQoQ09ORklHX1JPQ0tDSElQX0FOQUxPR0lYX0RQKSArPSBhbmFsb2dp eF9kcC1yb2NrY2hpcC5vCitvYmotJChDT05GSUdfUk9DS0NISVBfQ0ROX0RQKSArPSBjZG4tZHAt Y29yZS5vIGNkbi1kcC1yZWcubwogb2JqLSQoQ09ORklHX1JPQ0tDSElQX0RXX0hETUkpICs9IGR3 X2hkbWktcm9ja2NoaXAubwogb2JqLSQoQ09ORklHX1JPQ0tDSElQX0RXX01JUElfRFNJKSArPSBk dy1taXBpLWRzaS5vCiBvYmotJChDT05GSUdfUk9DS0NISVBfSU5OT19IRE1JKSArPSBpbm5vX2hk bWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmMg Yi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5hZDU5YmQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmMKQEAgLTAsMCArMSw5MTAgQEAKKy8qCisgKiBD b3B5cmlnaHQgKEMpIEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJvbmljcyBDby5MdGQKKyAqIEF1dGhv cjogQ2hyaXMgWmhvbmcgPHp5d0Byb2NrLWNoaXBzLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJl IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisg KiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmll ZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNp bmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgor I2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2RwX2hl bHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgorI2luY2x1ZGUgPGRybS9kcm1fb2Yu aD4KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5o PgorI2luY2x1ZGUgPGxpbnV4L2V4dGNvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+ CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKwor I2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+ CisKKyNpbmNsdWRlIDxzb3VuZC9oZG1pLWNvZGVjLmg+CisKKyNpbmNsdWRlICJjZG4tZHAtY29y ZS5oIgorI2luY2x1ZGUgImNkbi1kcC1yZWcuaCIKKyNpbmNsdWRlICJyb2NrY2hpcF9kcm1fdm9w LmgiCisKKyNkZWZpbmUgY29ubmVjdG9yX3RvX2RwKGMpIFwKKwkJY29udGFpbmVyX29mKGMsIHN0 cnVjdCBjZG5fZHBfZGV2aWNlLCBjb25uZWN0b3IpCisKKyNkZWZpbmUgZW5jb2Rlcl90b19kcChj KSBcCisJCWNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgY2RuX2RwX2RldmljZSwgZW5jb2RlcikKKwor LyogZHAgZ3JmIHJlZ2lzdGVyIG9mZnNldCAqLworI2RlZmluZSBHUkZfU09DX0NPTjkJCTB4NjIy NAorI2RlZmluZSBEUF9TRUxfVk9QX0xJVAkJQklUKDEyKQorI2RlZmluZSBHUkZfU09DX0NPTjI2 CQkweDYyNjgKKyNkZWZpbmUgVVBIWV9TRUxfQklUCQkzCisjZGVmaW5lIFVQSFlfU0VMX01BU0sJ CUJJVCgxOSkKKyNkZWZpbmUgRFBUWF9IUERfU0VMCQkoMyA8PCAxMikKKyNkZWZpbmUgRFBUWF9I UERfREVMCQkoMiA8PCAxMikKKyNkZWZpbmUgRFBUWF9IUERfU0VMX01BU0sJKDMgPDwgMjgpCisK KyNkZWZpbmUgTUFYX0ZXX1dBSVRfU0VDUwk2NAorI2RlZmluZSBDRE5fRFBfRklSTVdBUkUJCSJy b2NrY2hpcC9kcHR4LmJpbiIKKworc3RydWN0IGNkbl9kcF9kYXRhIHsKKwl1OCBtYXhfcGh5Owor fTsKKworc3RydWN0IGNkbl9kcF9kYXRhIHJrMzM5OV9jZG5fZHAgPSB7CisJLm1heF9waHkgPSAy LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgY2RuX2RwX2R0X2lkc1td ID0geworCXsgLmNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMzk5LWNkbi1kcCIsCisJCS5kYXRh ID0gKHZvaWQgKikmcmszMzk5X2Nkbl9kcCB9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCBjZG5fZHBfZHRfaWRzKTsKKworc3RhdGljIGludCBjZG5fZHBfZ3JmX3dyaXRlKHN0 cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25l ZCBpbnQgdmFsKQoreworCWludCByZXQ7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHAt PmdyZl9jbGspOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiRmFpbGVkIHRvIHBy ZXBhcmVfZW5hYmxlIGdyZiBjbG9ja1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0g cmVnbWFwX3dyaXRlKGRwLT5ncmYsIHJlZywgdmFsKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIo ZHAtPmRldiwgIkNvdWxkIG5vdCB3cml0ZSB0byBHUkY6ICVkXG4iLCByZXQpOworCQlyZXR1cm4g cmV0OworCX0KKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkcC0+Z3JmX2Nsayk7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBjZG5fZHBfY2xrX2VuYWJsZShzdHJ1Y3QgY2RuX2RwX2Rl dmljZSAqZHApCit7CisJaW50IHJldDsKKwl1MzIgcmF0ZTsKKworCXJldCA9IGNsa19wcmVwYXJl X2VuYWJsZShkcC0+cGNsayk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAi Y2Fubm90IGVuYWJsZSBkcCBwY2xrICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9wY2xrOworCX0K KworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkcC0+Y29yZV9jbGspOworCWlmIChyZXQgPCAw KSB7CisJCWRldl9lcnIoZHAtPmRldiwgImNhbm5vdCBlbmFibGUgY29yZV9jbGsgJWRcbiIsIHJl dCk7CisJCWdvdG8gZXJyX2NvcmVfY2xrOworCX0KKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoZHAt PmNvcmVfY2xrKTsKKwlpZiAocmF0ZSA8IDApIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiZ2V0IGNs ayByYXRlIGZhaWxlZDogJWRcbiIsIHJhdGUpOworCQlnb3RvIGVycl9zZXRfcmF0ZTsKKwl9CisK KwljZG5fZHBfc2V0X2Z3X2NsayhkcCwgcmF0ZSk7CisKKwlyZXR1cm4gMDsKKworZXJyX3NldF9y YXRlOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShkcC0+Y29yZV9jbGspOworZXJyX2NvcmVfY2xr OgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShkcC0+cGNsayk7CitlcnJfcGNsazoKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cworY2RuX2RwX2Nvbm5l Y3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkK K3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBjb25uZWN0b3JfdG9fZHAoY29ubmVjdG9y KTsKKworCXJldHVybiBkcC0+aHBkX3N0YXR1czsKK30KKworc3RhdGljIHZvaWQgY2RuX2RwX2Nv bm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJZHJt X2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVw KGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBjZG5f ZHBfYXRvbWljX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9hdG9taWNfaGVscGVy X2Nvbm5lY3Rvcl9kcG1zLAorCS5kZXRlY3QgPSBjZG5fZHBfY29ubmVjdG9yX2RldGVjdCwKKwku ZGVzdHJveSA9IGNkbl9kcF9jb25uZWN0b3JfZGVzdHJveSwKKwkuZmlsbF9tb2RlcyA9IGRybV9o ZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkucmVzZXQgPSBkcm1fYXRvbWlj X2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1f YXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJv eV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAorfTsK Kworc3RhdGljIGludCBjZG5fZHBfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGNvbm5lY3Rv cl90b19kcChjb25uZWN0b3IpOworCXN0cnVjdCBlZGlkICplZGlkOworCWludCByZXQgPSAwOwor CisJZWRpZCA9IGRybV9kb19nZXRfZWRpZChjb25uZWN0b3IsIGNkbl9kcF9nZXRfZWRpZF9ibG9j aywgZHApOworCWlmIChlZGlkKSB7CisJCWRldl9kYmcoZHAtPmRldiwgImdvdCBlZGlkOiB3aWR0 aFslZF0geCBoZWlnaHRbJWRdXG4iLAorCQkJZWRpZC0+d2lkdGhfY20sIGVkaWQtPmhlaWdodF9j bSk7CisKKwkJZHAtPnNpbmtfaGFzX2F1ZGlvID0gZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKGVk aWQpOworCQlyZXQgPSBkcm1fYWRkX2VkaWRfbW9kZXMoY29ubmVjdG9yLCBlZGlkKTsKKwkJaWYg KHJldCkgeworCQkJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5l Y3RvciwKKwkJCQkJCQkJZWRpZCk7CisJCQlkcm1fZWRpZF90b19lbGQoY29ubmVjdG9yLCBlZGlk KTsKKwkJfQorCQlrZnJlZShlZGlkKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg c3RydWN0IGRybV9lbmNvZGVyICoKKwljZG5fZHBfY29ubmVjdG9yX2Jlc3RfZW5jb2RlcihzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpk cCA9IGNvbm5lY3Rvcl90b19kcChjb25uZWN0b3IpOworCisJcmV0dXJuICZkcC0+ZW5jb2RlcjsK K30KKworc3RhdGljIGludCBjZG5fZHBfY29ubmVjdG9yX21vZGVfdmFsaWQoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gY29ubmVjdG9yX3RvX2RwKGNv bm5lY3Rvcik7CisJc3RydWN0IGRybV9kaXNwbGF5X2luZm8gKmRpc3BsYXlfaW5mbyA9ICZkcC0+ Y29ubmVjdG9yLmRpc3BsYXlfaW5mbzsKKwl1MzIgcmVxdWVzdGVkID0gbW9kZS0+Y2xvY2sgKiBk aXNwbGF5X2luZm8tPmJwYyAqIDMgLyAxMDAwOworCXUzMiBhY3R1YWwsIHJhdGUsIHNpbmtfbWF4 LCBzb3VyY2VfbWF4ID0gMDsKKwl1OCBsYW5lcywgaTsKKworCS8qIGZpbmQgdGhlIHJ1bm5pbmcg cG9ydCAqLworCWZvciAoaSA9IDA7IGkgPCBkcC0+cG9ydHM7IGkrKykgeworCQlpZiAoZHAtPnBv cnRbaV0tPnBoeV9zdGF0dXMpIHsKKwkJCXNvdXJjZV9tYXggPSBkcC0+cG9ydFtpXS0+Y2FwX2xh bmVzOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzaW5rX21heCA9IGRybV9kcF9tYXhfbGFuZV9j b3VudChkcC0+ZHBjZCk7CisJbGFuZXMgPSBtaW4oc291cmNlX21heCwgc2lua19tYXgpOworCisJ c291cmNlX21heCA9IGRybV9kcF9id19jb2RlX3RvX2xpbmtfcmF0ZShDRE5fRFBfTUFYX0xJTktf UkFURSk7CisJc2lua19tYXggPSBkcm1fZHBfbWF4X2xpbmtfcmF0ZShkcC0+ZHBjZCk7CisJcmF0 ZSA9IG1pbihzb3VyY2VfbWF4LCBzaW5rX21heCk7CisKKwlhY3R1YWwgPSByYXRlICogbGFuZXMg LyAxMDA7CisKKwkvKiBlZmZpY2llbmN5IGlzIGFib3V0IDAuOCAqLworCWFjdHVhbCA9IGFjdHVh bCAqIDggLyAxMDsKKworCWlmIChyZXF1ZXN0ZWQgPiBhY3R1YWwpIHsKKwkJZGV2X2RiZyhkcC0+ ZGV2LCAicmVxdWVzdGVkPSVkLCBhY3R1YWw9JWQsIGNsb2NrPSVkXG4iLAorCQkJcmVxdWVzdGVk LCBhY3R1YWwsIG1vZGUtPmNsb2NrKTsKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKKwl9CisK KwlyZXR1cm4gTU9ERV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBl cl9mdW5jcyBjZG5fZHBfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVzID0g Y2RuX2RwX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCisJLmJlc3RfZW5jb2RlciA9IGNkbl9kcF9jb25u ZWN0b3JfYmVzdF9lbmNvZGVyLAorCS5tb2RlX3ZhbGlkID0gY2RuX2RwX2Nvbm5lY3Rvcl9tb2Rl X3ZhbGlkLAorfTsKKworc3RhdGljIHZvaWQgY2RuX2RwX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gZW5jb2Rlcl90b19k cChlbmNvZGVyKTsKKwlpbnQgcmV0OworCisJcmV0ID0gY2RuX2RwX3RyYWluaW5nX3N0YXJ0KGRw KTsKKwlpZiAocmV0KQorCQlyZXR1cm47CisKKwlyZXQgPSBjZG5fZHBfZ2V0X3RyYWluaW5nX3N0 YXR1cyhkcCk7CisJaWYgKHJldCkKKwkJcmV0dXJuOworCisJZGV2X2luZm8oZHAtPmRldiwgInJh dGU6MHgleCwgbGFuZXM6JWRcbiIsCisJCSBkcC0+bGluay5yYXRlLCBkcC0+bGluay5udW1fbGFu ZXMpOworCisJaWYgKGNkbl9kcF9zZXRfdmlkZW9fc3RhdHVzKGRwLCBDT05UUk9MX1ZJREVPX0lE TEUpKQorCQlyZXR1cm47CisKKwlpZiAoY2RuX2RwX2NvbmZpZ192aWRlbyhkcCkpCisJCXJldHVy bjsKKworCWlmIChjZG5fZHBfc2V0X3ZpZGVvX3N0YXR1cyhkcCwgQ09OVFJPTF9WSURFT19WQUxJ RCkpCisJCXJldHVybjsKKworCWRwLT5kcG1zX21vZGUgPSBEUk1fTU9ERV9EUE1TX09OOworfQor CitzdGF0aWMgdm9pZCBjZG5fZHBfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIsCisJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAg ICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWQpCit7CisJc3RydWN0IGNkbl9kcF9k ZXZpY2UgKmRwID0gZW5jb2Rlcl90b19kcChlbmNvZGVyKTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlf aW5mbyAqZGlzcGxheV9pbmZvID0gJmRwLT5jb25uZWN0b3IuZGlzcGxheV9pbmZvOworCXN0cnVj dCByb2NrY2hpcF9jcnRjX3N0YXRlICpzdGF0ZTsKKwlzdHJ1Y3QgdmlkZW9faW5mbyAqdmlkZW8g PSAmZHAtPnZpZGVvX2luZm87CisJaW50IHJldCwgdmFsOworCisJc3dpdGNoIChkaXNwbGF5X2lu Zm8tPmJwYykgeworCWNhc2UgMTY6CisJY2FzZSAxMjoKKwljYXNlIDEwOgorCQl2aWRlby0+Y29s b3JfZGVwdGggPSAxMDsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQl2aWRlby0+Y29sb3JfZGVwdGgg PSA2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2aWRlby0+Y29sb3JfZGVwdGggPSA4OworCQli cmVhazsKKwl9CisKKwl2aWRlby0+Y29sb3JfZm10ID0gUFhMX1JHQjsKKworCXZpZGVvLT52X3N5 bmNfcG9sYXJpdHkgPSAhIShtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKTsKKwl2 aWRlby0+aF9zeW5jX3BvbGFyaXR5ID0gISEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05I U1lOQyk7CisKKwlyZXQgPSBkcm1fb2ZfZW5jb2Rlcl9hY3RpdmVfZW5kcG9pbnRfaWQoZHAtPmRl di0+b2Zfbm9kZSwgZW5jb2Rlcik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkcC0+ZGV2 LCAiQ291bGQgbm90IGdldCB2b3AgaWQsICVkIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCWRl dl9kYmcoZHAtPmRldiwgInZvcCAlcyBvdXRwdXQgdG8gY2RuLWRwXG4iLCAocmV0KSA/ICJMSVQi IDogIkJJRyIpOworCXN0YXRlID0gdG9fcm9ja2NoaXBfY3J0Y19zdGF0ZShlbmNvZGVyLT5jcnRj LT5zdGF0ZSk7CisJaWYgKHJldCkgeworCQl2YWwgPSBEUF9TRUxfVk9QX0xJVCB8IChEUF9TRUxf Vk9QX0xJVCA8PCAxNik7CisJCXN0YXRlLT5vdXRwdXRfbW9kZSA9IFJPQ0tDSElQX09VVF9NT0RF X1A4ODg7CisJfSBlbHNlIHsKKwkJdmFsID0gRFBfU0VMX1ZPUF9MSVQgPDwgMTY7CisJCXN0YXRl LT5vdXRwdXRfbW9kZSA9IFJPQ0tDSElQX09VVF9NT0RFX0FBQUE7CisJfQorCisJcmV0ID0gY2Ru X2RwX2dyZl93cml0ZShkcCwgR1JGX1NPQ19DT045LCB2YWwpOworCWlmIChyZXQpCisJCXJldHVy bjsKKworCW1lbWNweSgmZHAtPm1vZGUsIGFkanVzdGVkLCBzaXplb2YoKm1vZGUpKTsKK30KKwor c3RhdGljIHZvaWQgY2RuX2RwX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5j b2RlcikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBlbmNvZGVyX3RvX2RwKGVuY29k ZXIpOworCisJaWYgKGRwLT5kcG1zX21vZGUgIT0gRFJNX01PREVfRFBNU19PTikKKwkJY2RuX2Rw X2NvbW1pdChlbmNvZGVyKTsKK30KKworc3RhdGljIHZvaWQgY2RuX2RwX2VuY29kZXJfZGlzYWJs ZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2Ug KmRwID0gZW5jb2Rlcl90b19kcChlbmNvZGVyKTsKKworCWRwLT5kcG1zX21vZGUgPSBEUk1fTU9E RV9EUE1TX09GRjsKK30KKworc3RhdGljIGludAorY2RuX2RwX2VuY29kZXJfYXRvbWljX2NoZWNr KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCSAgICBzdHJ1Y3QgZHJtX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUsCisJCQkgICAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5f c3RhdGUpCit7CisJc3RydWN0IHJvY2tjaGlwX2NydGNfc3RhdGUgKnMgPSB0b19yb2NrY2hpcF9j cnRjX3N0YXRlKGNydGNfc3RhdGUpOworCisJcy0+b3V0cHV0X21vZGUgPSBST0NLQ0hJUF9PVVRf TU9ERV9BQUFBOworCXMtPm91dHB1dF90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQ b3J0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVy X2Z1bmNzIGNkbl9kcF9lbmNvZGVyX2hlbHBlcl9mdW5jcyA9IHsKKwkubW9kZV9zZXQgPSBjZG5f ZHBfZW5jb2Rlcl9tb2RlX3NldCwKKwkuZW5hYmxlID0gY2RuX2RwX2VuY29kZXJfZW5hYmxlLAor CS5kaXNhYmxlID0gY2RuX2RwX2VuY29kZXJfZGlzYWJsZSwKKwkuYXRvbWljX2NoZWNrID0gY2Ru X2RwX2VuY29kZXJfYXRvbWljX2NoZWNrLAorfTsKKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2Rl cl9mdW5jcyBjZG5fZHBfZW5jb2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGRybV9lbmNvZGVy X2NsZWFudXAsCit9OworCitzdGF0aWMgaW50IGNkbl9kcF9maXJtd2FyZV9pbml0KHN0cnVjdCBj ZG5fZHBfZGV2aWNlICpkcCkKK3sKKwlpbnQgcmV0OworCWNvbnN0IHUzMiAqaXJhbV9kYXRhLCAq ZHJhbV9kYXRhOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBkcC0+Znc7CisJY29uc3Qg c3RydWN0IGNkbl9maXJtd2FyZV9oZWFkZXIgKmhkcjsKKworCWhkciA9IChzdHJ1Y3QgY2RuX2Zp cm13YXJlX2hlYWRlciAqKWZ3LT5kYXRhOworCWlmIChmdy0+c2l6ZSAhPSBsZTMyX3RvX2NwdSho ZHItPnNpemVfYnl0ZXMpKSB7CisJCWRldl9lcnIoZHAtPmRldiwgImZpcm13YXJlIGlzIGludmFs aWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpcmFtX2RhdGEgPSAoY29uc3QgdTMy ICopKGZ3LT5kYXRhICsgaGRyLT5oZWFkZXJfc2l6ZSk7CisJZHJhbV9kYXRhID0gKGNvbnN0IHUz MiAqKShmdy0+ZGF0YSArIGhkci0+aGVhZGVyX3NpemUgKyBoZHItPmlyYW1fc2l6ZSk7CisKKwly ZXQgPSBjZG5fZHBfbG9hZF9maXJtd2FyZShkcCwgaXJhbV9kYXRhLCBoZHItPmlyYW1fc2l6ZSwK KwkJCQkgICBkcmFtX2RhdGEsIGhkci0+ZHJhbV9zaXplKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJcmV0ID0gY2RuX2RwX3NldF9maXJtd2FyZV9hY3RpdmUoZHAsIHRydWUpOworCWlm IChyZXQpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiYWN0aXZlIHVjcHUgZmFpbGVkOiAlZFxuIiwg cmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gY2RuX2RwX2V2ZW50X2NvbmZpZyhk cCk7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2luaXQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRwLT5kZXY7CisJc3RydWN0IGRldmljZV9ub2Rl ICpucCA9IGRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9f cGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IHJldDsK KworCWRwLT5ncmYgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAicm9ja2No aXAsZ3JmIik7CisJaWYgKElTX0VSUihkcC0+Z3JmKSkgeworCQlkZXZfZXJyKGRldiwgImNkbi1k cCBuZWVkcyByb2NrY2hpcCxncmYgcHJvcGVydHlcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcC0+ Z3JmKTsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJD RV9NRU0sIDApOworCWRwLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsK KwlpZiAoSVNfRVJSKGRwLT5yZWdzKSkgeworCQlkZXZfZXJyKGRldiwgImlvcmVtYXAgcmVnIGZh aWxlZFxuIik7CisJCXJldHVybiBQVFJfRVJSKGRwLT5yZWdzKTsKKwl9CisKKwlkcC0+Y29yZV9j bGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiY29yZS1jbGsiKTsKKwlpZiAoSVNfRVJSKGRwLT5jb3Jl X2NsaykpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IGNvcmVfY2xrX2RwXG4iKTsKKwkJ cmV0dXJuIFBUUl9FUlIoZHAtPmNvcmVfY2xrKTsKKwl9CisKKwlkcC0+cGNsayA9IGRldm1fY2xr X2dldChkZXYsICJwY2xrIik7CisJaWYgKElTX0VSUihkcC0+cGNsaykpIHsKKwkJZGV2X2Vycihk ZXYsICJjYW5ub3QgZ2V0IHBjbGtcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcC0+cGNsayk7CisJ fQorCisJZHAtPnNwZGlmX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJzcGRpZiIpOworCWlmIChJ U19FUlIoZHAtPnNwZGlmX2NsaykpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IHNwZGlm X2Nsa1xuIik7CisJCXJldHVybiBQVFJfRVJSKGRwLT5zcGRpZl9jbGspOworCX0KKworCWRwLT5n cmZfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImdyZiIpOworCWlmIChJU19FUlIoZHAtPmdyZl9j bGspKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCBncmYgY2xrXG4iKTsKKwkJcmV0dXJu IFBUUl9FUlIoZHAtPmdyZl9jbGspOworCX0KKworCWRwLT5zcGRpZl9yc3QgPSBkZXZtX3Jlc2V0 X2NvbnRyb2xfZ2V0KGRldiwgInNwZGlmIik7CisJaWYgKElTX0VSUihkcC0+c3BkaWZfcnN0KSkg eworCQlkZXZfZXJyKGRldiwgIm5vIHNwZGlmIHJlc2V0IGNvbnRyb2wgZm91bmRcbiIpOworCQly ZXR1cm4gUFRSX0VSUihkcC0+c3BkaWZfcnN0KTsKKwl9CisKKwlkcC0+ZHBtc19tb2RlID0gRFJN X01PREVfRFBNU19PRkY7CisKKwlyZXQgPSBjZG5fZHBfY2xrX2VuYWJsZShkcCk7CisJaWYgKHJl dCA8IDApCisJCXJldHVybiByZXQ7CisKKwljZG5fZHBfY2xvY2tfcmVzZXQoZHApOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2F1ZGlvX2h3X3BhcmFtcyhzdHJ1Y3QgZGV2 aWNlICpkZXYsICB2b2lkICpkYXRhLAorCQkJCSAgc3RydWN0IGhkbWlfY29kZWNfZGFpZm10ICpk YWlmbXQsCisJCQkJICBzdHJ1Y3QgaGRtaV9jb2RlY19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1 Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYXVk aW9faW5mbyBhdWRpbyA9IHsKKwkJLnNhbXBsZV93aWR0aCA9IHBhcmFtcy0+c2FtcGxlX3dpZHRo LAorCQkuc2FtcGxlX3JhdGUgPSBwYXJhbXMtPnNhbXBsZV9yYXRlLAorCQkuY2hhbm5lbHMgPSBw YXJhbXMtPmNoYW5uZWxzLAorCX07CisJaW50IHJldDsKKworCWlmICghZHAtPmVuY29kZXIuY3J0 YykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzd2l0Y2ggKGRhaWZtdC0+Zm10KSB7CisJY2FzZSBI RE1JX0kyUzoKKwkJYXVkaW8uZm9ybWF0ID0gQUZNVF9JMlM7CisJCWJyZWFrOworCWNhc2UgSERN SV9TUERJRjoKKwkJYXVkaW8uZm9ybWF0ID0gQUZNVF9TUERJRjsKKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJZGV2X2VycihkZXYsICIlczogSW52YWxpZCBmb3JtYXQgJWRcbiIsIF9fZnVuY19fLCBk YWlmbXQtPmZtdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGNkbl9kcF9hdWRp b19jb25maWcoZHAsICZhdWRpbyk7CisJaWYgKCFyZXQpCisJCWRwLT5hdWRpb19pbmZvID0gYXVk aW87CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjZG5fZHBfYXVkaW9fc2h1dGRv d24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjZG5fZHBfZGV2 aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CisKKwlpZiAoIWRwLT5l bmNvZGVyLmNydGMpCisJCXJldHVybjsKKworCXJldCA9IGNkbl9kcF9hdWRpb19zdG9wKGRwLCAm ZHAtPmF1ZGlvX2luZm8pOworCWlmICghcmV0KQorCQlkcC0+YXVkaW9faW5mby5mb3JtYXQgPSBB Rk1UX1VOVVNFRDsKK30KKworc3RhdGljIGludCBjZG5fZHBfYXVkaW9fZGlnaXRhbF9tdXRlKHN0 cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQkgICAgIGJvb2wgZW5hYmxlKQorewor CXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYg KCFkcC0+ZW5jb2Rlci5jcnRjKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBjZG5fZHBf YXVkaW9fbXV0ZShkcCwgZW5hYmxlKTsKK30KKworc3RhdGljIGludCBjZG5fZHBfYXVkaW9fZ2V0 X2VsZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkJdTggKmJ1Ziwgc2l6ZV90 IGxlbikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsKKwlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZHAtPmVuY29kZXIuZGV2LT5t b2RlX2NvbmZpZzsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCWludCByZXQg PSAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmY29uZmlnLT5tdXRleCk7CisJbGlzdF9mb3JfZWFj aF9lbnRyeShjb25uZWN0b3IsICZjb25maWctPmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCWlm ICgmZHAtPmVuY29kZXIgPT0gY29ubmVjdG9yLT5lbmNvZGVyKSB7CisJCQltZW1jcHkoYnVmLCBj b25uZWN0b3ItPmVsZCwKKwkJCSAgICAgICBtaW4oc2l6ZW9mKGNvbm5lY3Rvci0+ZWxkKSwgbGVu KSk7CisJCQlyZXQgPSAwOworCQl9CisJfQorCW11dGV4X3VubG9jaygmY29uZmlnLT5tdXRleCk7 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhkbWlfY29kZWNfb3Bz IGF1ZGlvX2NvZGVjX29wcyA9IHsKKwkuaHdfcGFyYW1zID0gY2RuX2RwX2F1ZGlvX2h3X3BhcmFt cywKKwkuYXVkaW9fc2h1dGRvd24gPSBjZG5fZHBfYXVkaW9fc2h1dGRvd24sCisJLmRpZ2l0YWxf bXV0ZSA9IGNkbl9kcF9hdWRpb19kaWdpdGFsX211dGUsCisJLmdldF9lbGQgPSBjZG5fZHBfYXVk aW9fZ2V0X2VsZCwKK307CisKK3N0YXRpYyBpbnQgY2RuX2RwX2F1ZGlvX2NvZGVjX2luaXQoc3Ry dWN0IGNkbl9kcF9kZXZpY2UgKmRwLAorCQkJCSAgIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlz dHJ1Y3QgaGRtaV9jb2RlY19wZGF0YSBjb2RlY19kYXRhID0geworCQkuaTJzID0gMSwKKwkJLnNw ZGlmID0gMSwKKwkJLm9wcyA9ICZhdWRpb19jb2RlY19vcHMsCisJCS5tYXhfaTJzX2NoYW5uZWxz ID0gOCwKKwl9OworCisJZHAtPmF1ZGlvX3BkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJf ZGF0YSgKKwkJCSBkZXYsIEhETUlfQ09ERUNfRFJWX05BTUUsIFBMQVRGT1JNX0RFVklEX0FVVE8s CisJCQkgJmNvZGVjX2RhdGEsIHNpemVvZihjb2RlY19kYXRhKSk7CisKKwlyZXR1cm4gUFRSX0VS Ul9PUl9aRVJPKGRwLT5hdWRpb19wZGV2KTsKK30KKworc3RhdGljIGludCBjZG5fZHBfZ2V0X2Nh cF9sYW5lcyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsCisJCQkJc3RydWN0IGV4dGNvbl9kZXYg KmVkZXYpCit7CisJYm9vbCBkZnAsIGRwdHg7CisJdTggbGFuZXM7CisKKwlkZnAgPSBleHRjb25f Z2V0X3N0YXRlKGVkZXYsIEVYVENPTl9VU0JfSE9TVCk7CisJZHB0eCA9IGV4dGNvbl9nZXRfc3Rh dGUoZWRldiwgRVhUQ09OX0RJU1BfRFApOworCisJaWYgKGRmcCAmJiBkcHR4KQorCQlsYW5lcyA9 IDI7CisJZWxzZSBpZiAoZHB0eCkKKwkJbGFuZXMgPSA0OworCWVsc2UKKwkJbGFuZXMgPSAwOwor CisJcmV0dXJuIGxhbmVzOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9wZF9ldmVudChzdHJ1Y3Qg bm90aWZpZXJfYmxvY2sgKm5iLAorCQkJICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHJp dikKK3sKKwlzdHJ1Y3QgY2RuX2RwX3BvcnQgKnBvcnQ7CisKKwlwb3J0ID0gY29udGFpbmVyX29m KG5iLCBzdHJ1Y3QgY2RuX2RwX3BvcnQsIGV2ZW50X25iKTsKKworCXNjaGVkdWxlX2RlbGF5ZWRf d29yaygmcG9ydC0+ZXZlbnRfd3EsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IGNkbl9kcF9wZF9ldmVudF93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0 IGNkbl9kcF9wb3J0ICpwb3J0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjZG5fZHBfcG9y dCwKKwkJCQkJCWV2ZW50X3dxLndvcmspOworCXVuaW9uIGV4dGNvbl9wcm9wZXJ0eV92YWx1ZSBw cm9wZXJ0eTsKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBwb3J0LT5kcDsKKwl1OCBuZXdf Y2FwX2xhbmVzLCBpOworCWludCByZXQ7CisKKwluZXdfY2FwX2xhbmVzID0gY2RuX2RwX2dldF9j YXBfbGFuZXMoZHAsIHBvcnQtPmV4dGNvbik7CisKKwlpZiAobmV3X2NhcF9sYW5lcyA9PSBwb3J0 LT5jYXBfbGFuZXMpIHsKKwkJZGV2X2RiZyhkcC0+ZGV2LCAibGFuZXMgY291bnQgZG9lcyBub3Qg Y2hhbmdlOiAlZFxuIiwKKwkJCW5ld19jYXBfbGFuZXMpOworCQlyZXR1cm47CisJfQorCisJaWYg KCFuZXdfY2FwX2xhbmVzKSB7CisJCXJldCA9IHBoeV9wb3dlcl9vZmYocG9ydC0+cGh5KTsKKwkJ aWYgKHJldCkgeworCQkJZGV2X2VycihkcC0+ZGV2LCAicGh5IHBvd2VyIG9mZiBmYWlsZWQ6ICVk IiwgcmV0KTsKKwkJCXJldHVybjsKKwkJfQorCQlwb3J0LT5waHlfc3RhdHVzID0gZmFsc2U7CisJ CXBvcnQtPmNhcF9sYW5lcyA9IG5ld19jYXBfbGFuZXM7CisJCWZvciAoaSA9IDA7IGkgPCBkcC0+ cG9ydHM7IGkrKykgeworCQkJaWYgKGRwLT5wb3J0W2ldLT5waHlfc3RhdHVzKQorCQkJCXJldHVy bjsKKwkJfQorCisJCXJldCA9IGNkbl9kcF9ncmZfd3JpdGUoZHAsIEdSRl9TT0NfQ09OMjYsCisJ CQkJICAgICAgIERQVFhfSFBEX1NFTF9NQVNLIHwgRFBUWF9IUERfREVMKTsKKwkJaWYgKHJldCkK KwkJCXJldHVybjsKKworCQlkcC0+aHBkX3N0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29u bmVjdGVkOworCQlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoZHAtPmRybV9kZXYpOworCQljZG5f ZHBfc2V0X2Zpcm13YXJlX2FjdGl2ZShkcCwgZmFsc2UpOworCQlyZXR1cm47CisJfQorCisJLyog aWYgb3RoZXIgcGh5IGlzIHJ1bm5pbmcsIGRvIG5vdCB0b3VjaCB0aGUgaHBkX3N0YXR1cywgYW5k IHJldHVybiAqLworCWZvciAoaSA9IDA7IGkgPCBkcC0+cG9ydHM7IGkrKykgeworCQlpZiAoZHAt PnBvcnRbaV0tPnBoeV9zdGF0dXMpIHsKKwkJCWRldl93YXJuKGRwLT5kZXYsICJidXN5LCBwaHlb JWRdIGlzIHJ1bm5pbmciLAorCQkJCSBkcC0+cG9ydFtpXS0+aWQpOworCQkJcmV0dXJuOworCQl9 CisJfQorCisJaWYgKCFkcC0+ZndfbG9hZGVkKSB7CisJCXJldCA9IHJlcXVlc3RfZmlybXdhcmUo JmRwLT5mdywgQ0ROX0RQX0ZJUk1XQVJFLCBkcC0+ZGV2KTsKKwkJaWYgKHJldCA9PSAtRU5PRU5U ICYmIGRwLT5md193YWl0IDw9IE1BWF9GV19XQUlUX1NFQ1MpIHsKKwkJCXVuc2lnbmVkIGxvbmcg dGltZSA9IG1zZWNzX3RvX2ppZmZpZXMoZHAtPmZ3X3dhaXQgKiBIWik7CisKKwkJCS8qCisJCQkg KiBJZiBjYW4gbm90IGZpbmQgdGhlIGZpbGUsIHJldHJ5IHRvIGxvYWQgdGhlIGZpcm13YXJlCisJ CQkgKiBpbiBzZXZlcmFsIHNlY29uZHMsIGlmIHN0aWxsIGZhaWxlZCBhZnRlciAxIG1pbnV0ZSwK KwkJCSAqIGdpdmUgdXAuCisJCQkgKi8KKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcG9ydC0+ ZXZlbnRfd3EsIHRpbWUpOworCQkJZHAtPmZ3X3dhaXQgKj0gMjsKKwkJCXJldHVybjsKKwkJfSBl bHNlIGlmIChyZXQpIHsKKwkJCWRldl9lcnIoZHAtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IGZp cm13YXJlOiAlZFxuIiwKKwkJCQlyZXQpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIHsKKwkJ Y2RuX2RwX3NldF9maXJtd2FyZV9hY3RpdmUoZHAsIHRydWUpOworCX0KKworCXJldCA9IGNkbl9k cF9ncmZfd3JpdGUoZHAsIEdSRl9TT0NfQ09OMjYsCisJCQkgICAgICAgKHBvcnQtPmlkIDw8IFVQ SFlfU0VMX0JJVCkgfCBVUEhZX1NFTF9NQVNLKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9waHk7 CisKKwlyZXQgPSBwaHlfcG93ZXJfb24ocG9ydC0+cGh5KTsKKwlpZiAocmV0KSB7CisJCWRldl9l cnIoZHAtPmRldiwgInBoeSBwb3dlciBvbiBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIGVy cl9waHk7CisJfQorCisJcG9ydC0+cGh5X3N0YXR1cyA9IHRydWU7CisKKwlpZiAoIWRwLT5md19s b2FkZWQpIHsKKwkJcmV0ID0gY2RuX2RwX2Zpcm13YXJlX2luaXQoZHApOworCQlpZiAocmV0KSB7 CisJCQlkZXZfZXJyKGRwLT5kZXYsICJmaXJtd2FyZSBpbml0IGZhaWxlZDogJWQiLCByZXQpOwor CQkJZ290byBlcnJfZmlybXdhcmU7CisJCX0KKwkJcmVsZWFzZV9maXJtd2FyZShkcC0+ZncpOwor CQlkcC0+ZndfbG9hZGVkID0gMTsKKwl9CisKKwlyZXQgPSBjZG5fZHBfZ3JmX3dyaXRlKGRwLCBH UkZfU09DX0NPTjI2LAorCQkJICAgICAgIERQVFhfSFBEX1NFTF9NQVNLIHwgRFBUWF9IUERfU0VM KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9maXJtd2FyZTsKKworCXJldCA9IGNkbl9kcF9nZXRf aHBkX3N0YXR1cyhkcCk7CisJaWYgKHJldCA8PSAwKSB7CisJCWlmICghcmV0KQorCQkJZGV2X2Vy cihkcC0+ZGV2LCAiaHBkIGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJZ290byBlcnJfZmlybXdhcmU7 CisJfQorCisJcmV0ID0gZXh0Y29uX2dldF9wcm9wZXJ0eShwb3J0LT5leHRjb24sIEVYVENPTl9E SVNQX0RQLAorCQkJCSAgRVhUQ09OX1BST1BfVVNCX1RZUEVDX1BPTEFSSVRZLCAmcHJvcGVydHkp OworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiZ2V0IHByb3BlcnR5IGZhaWxlZFxu Iik7CisJCWdvdG8gZXJyX2Zpcm13YXJlOworCX0KKworCXJldCA9IGNkbl9kcF9zZXRfaG9zdF9j YXAoZHAsIG5ld19jYXBfbGFuZXMsIHByb3BlcnR5LmludHZhbCk7CisJaWYgKHJldCkgeworCQlk ZXZfZXJyKGRwLT5kZXYsICJzZXQgaG9zdCBjYXBhYmlsaXRpZXMgZmFpbGVkOiAlZFxuIiwgcmV0 KTsKKwkJZ290byBlcnJfZmlybXdhcmU7CisJfQorCisJLyoKKwkgKiBOYXRpdmUgcmVhZCB3aXRo IHJldHJ5IGZvciBsaW5rIHN0YXR1cyBhbmQgcmVjZWl2ZXIgY2FwYWJpbGl0eSByZWFkcworCSAq IGZvciBjYXNlcyB3aGVyZSB0aGUgc2luayBtYXkgc3RpbGwgbm90IGJlIHJlYWR5LgorCSAqCisJ ICogU2lua3MgYXJlICpzdXBwb3NlZCogdG8gY29tZSB1cCB3aXRoaW4gMW1zIGZyb20gYW4gb2Zm IHN0YXRlLCBidXQKKwkgKiBzb21lIERPQ0tzIG5lZWQgYWJvdXQgNSBzZWNvbmRzIHRvIHBvd2Vy IHVwLCBzbyByZWFkIHRoZSBkcGNkIGV2ZXJ5CisJICogMTAwbXMsIGlmIGNhbiBub3QgZ2V0IGEg Z29vZCBkcGNkIGluIDEwIHNlY29uZHMsIGdpdmUgdXAuCisJICovCisJZm9yIChpID0gMDsgaSA8 IDEwMDsgaSsrKSB7CisJCXJldCA9IGNkbl9kcF9kcGNkX3JlYWQoZHAsIDB4MDAwLCBkcC0+ZHBj ZCwKKwkJCQkgICAgICAgRFBfUkVDRUlWRVJfQ0FQX1NJWkUpOworCQlpZiAoIXJldCkgeworCQkJ ZGV2X2RiZyhkcC0+ZGV2LCAiZ2V0IGRwY2Qgc3VjY2VzcyFcbiIpOworCQkJcG9ydC0+Y2FwX2xh bmVzID0gbmV3X2NhcF9sYW5lczsKKwkJCWRwLT5ocGRfc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1 c19jb25uZWN0ZWQ7CisJCQlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoZHAtPmRybV9kZXYpOwor CQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKCFleHRjb25fZ2V0X3N0YXRlKHBvcnQtPmV4dGNvbiwg RVhUQ09OX0RJU1BfRFApKSB7CisJCQlicmVhazsKKwkJfQorCQltc2xlZXAoMTAwKTsKKwl9CisK KwlkZXZfZXJyKGRwLT5kZXYsICJnZXQgZHBjZCBmYWlsZWQhXG4iKTsKKworZXJyX2Zpcm13YXJl OgorCXJldCA9IHBoeV9wb3dlcl9vZmYocG9ydC0+cGh5KTsKKwlpZiAocmV0KQorCQlkZXZfZXJy KGRwLT5kZXYsICJwaHkgcG93ZXIgb2ZmIGZhaWxlZDogJWQiLCByZXQpOworCWVsc2UKKwkJcG9y dC0+cGh5X3N0YXR1cyA9IGZhbHNlOworCitlcnJfcGh5OgorCWlmIChkcC0+ZndfbG9hZGVkKQor CQljZG5fZHBfc2V0X2Zpcm13YXJlX2FjdGl2ZShkcCwgZmFsc2UpOworCWVsc2UKKwkJcmVsZWFz ZV9maXJtd2FyZShkcC0+ZncpOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9iaW5kKHN0cnVjdCBk ZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKQoreworCXN0cnVj dCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXN0 cnVjdCBjZG5fZHBfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRh dGE7CisJaW50IHJldCwgaTsKKworCXJldCA9IGNkbl9kcF9pbml0KGRwKTsKKwlpZiAocmV0IDwg MCkKKwkJcmV0dXJuIHJldDsKKworCWRwLT5kcm1fZGV2ID0gZHJtX2RldjsKKwlkcC0+aHBkX3N0 YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCWRwLT5md193YWl0ID0gMTsK KworCWVuY29kZXIgPSAmZHAtPmVuY29kZXI7CisKKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9 IGRybV9vZl9maW5kX3Bvc3NpYmxlX2NydGNzKGRybV9kZXYsCisJCQkJCQkJICAgICBkZXYtPm9m X25vZGUpOworCURSTV9ERUJVR19LTVMoInBvc3NpYmxlX2NydGNzID0gMHgleFxuIiwgZW5jb2Rl ci0+cG9zc2libGVfY3J0Y3MpOworCisJcmV0ID0gZHJtX2VuY29kZXJfaW5pdChkcm1fZGV2LCBl bmNvZGVyLCAmY2RuX2RwX2VuY29kZXJfZnVuY3MsCisJCQkgICAgICAgRFJNX01PREVfRU5DT0RF Ul9UTURTLCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRp YWxpemUgZW5jb2RlciB3aXRoIGRybVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZHJtX2Vu Y29kZXJfaGVscGVyX2FkZChlbmNvZGVyLCAmY2RuX2RwX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsK KworCWNvbm5lY3RvciA9ICZkcC0+Y29ubmVjdG9yOworCWNvbm5lY3Rvci0+cG9sbGVkID0gRFJN X0NPTk5FQ1RPUl9QT0xMX0hQRDsKKwljb25uZWN0b3ItPmRwbXMgPSBEUk1fTU9ERV9EUE1TX09G RjsKKworCXJldCA9IGRybV9jb25uZWN0b3JfaW5pdChkcm1fZGV2LCBjb25uZWN0b3IsCisJCQkJ ICZjZG5fZHBfYXRvbWljX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCQkgRFJNX01PREVfQ09OTkVDVE9S X0Rpc3BsYXlQb3J0KTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRp YWxpemUgY29ubmVjdG9yIHdpdGggZHJtXG4iKTsKKwkJZ290byBlcnJfZnJlZV9lbmNvZGVyOwor CX0KKworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsICZjZG5fZHBfY29ubmVj dG9yX2hlbHBlcl9mdW5jcyk7CisKKwlyZXQgPSBkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2Vu Y29kZXIoY29ubmVjdG9yLCBlbmNvZGVyKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFp bGVkIHRvIGF0dGFjaCBjb25uZWN0b3IgYW5kIGVuY29kZXJcbiIpOworCQlnb3RvIGVycl9mcmVl X2Nvbm5lY3RvcjsKKwl9CisKKwljZG5fZHBfYXVkaW9fY29kZWNfaW5pdChkcCwgZGV2KTsKKwor CWZvciAoaSA9IDA7IGkgPCBkcC0+cG9ydHM7IGkrKykgeworCQlwb3J0ID0gZHAtPnBvcnRbaV07 CisKKwkJcG9ydC0+ZXZlbnRfbmIubm90aWZpZXJfY2FsbCA9IGNkbl9kcF9wZF9ldmVudDsKKwkJ SU5JVF9ERUxBWUVEX1dPUksoJnBvcnQtPmV2ZW50X3dxLCBjZG5fZHBfcGRfZXZlbnRfd3EpOwor CQlyZXQgPSBleHRjb25fcmVnaXN0ZXJfbm90aWZpZXIocG9ydC0+ZXh0Y29uLCBFWFRDT05fRElT UF9EUCwKKwkJCQkJICAgICAgICZwb3J0LT5ldmVudF9uYik7CisJCWlmIChyZXQpIHsKKwkJCWRl dl9lcnIoZGV2LCAicmVnaXN0ZXIgRVhUQ09OX0RJU1BfRFAgbm90aWZpZXIgZXJyXG4iKTsKKwkJ CXJldHVybiByZXQ7CisJCX0KKworCQlpZiAoZXh0Y29uX2dldF9zdGF0ZShwb3J0LT5leHRjb24s IEVYVENPTl9ESVNQX0RQKSkKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcG9ydC0+ZXZlbnRf d3EsIDApOworCX0KKworCXJldHVybiAwOworCitlcnJfZnJlZV9jb25uZWN0b3I6CisJZHJtX2Nv bm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7CitlcnJfZnJlZV9lbmNvZGVyOgorCWRybV9lbmNv ZGVyX2NsZWFudXAoZW5jb2Rlcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgY2Ru X2RwX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9p ZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBkZXZfZ2V0X2RydmRhdGEo ZGV2KTsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSAmZHAtPmVuY29kZXI7CisJc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9ICZkcC0+Y29ubmVjdG9yOworCXN0cnVjdCBj ZG5fZHBfcG9ydCAqcG9ydDsKKwlpbnQgaTsKKworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVy KGRwLT5hdWRpb19wZGV2KTsKKwljZG5fZHBfZW5jb2Rlcl9kaXNhYmxlKGVuY29kZXIpOworCWVu Y29kZXItPmZ1bmNzLT5kZXN0cm95KGVuY29kZXIpOworCWNvbm5lY3Rvci0+ZnVuY3MtPmRlc3Ry b3koY29ubmVjdG9yKTsKKworCWZvciAoaSA9IDA7IGkgPCBkcC0+cG9ydHM7IGkrKykgeworCQlw b3J0ID0gZHAtPnBvcnRbaV07CisJCWV4dGNvbl91bnJlZ2lzdGVyX25vdGlmaWVyKHBvcnQtPmV4 dGNvbiwgRVhUQ09OX0RJU1BfRFAsCisJCQkJCSAgICZwb3J0LT5ldmVudF9uYik7CisJfQorfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgY2RuX2RwX2NvbXBvbmVudF9vcHMg PSB7CisJLmJpbmQgPSBjZG5fZHBfYmluZCwKKwkudW5iaW5kID0gY2RuX2RwX3VuYmluZCwKK307 CisKK3N0YXRpYyBpbnQgY2RuX2RwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwljb25zdCBzdHJ1Y3Qgb2Zf ZGV2aWNlX2lkICptYXRjaDsKKwlzdHJ1Y3QgY2RuX2RwX2RhdGEgKmRwX2RhdGE7CisJc3RydWN0 IGNkbl9kcF9wb3J0ICpwb3J0OworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcDsKKwlzdHJ1Y3Qg ZXh0Y29uX2RldiAqZXh0Y29uOworCXN0cnVjdCBwaHkgKnBoeTsKKwlpbnQgaTsKKworCWRwID0g ZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkcCksIEdGUF9LRVJORUwpOworCWlmICghZHApCisJ CXJldHVybiAtRU5PTUVNOworCWRwLT5kZXYgPSBkZXY7CisKKwltYXRjaCA9IG9mX21hdGNoX25v ZGUoY2RuX2RwX2R0X2lkcywgcGRldi0+ZGV2Lm9mX25vZGUpOworCWRwX2RhdGEgPSAoc3RydWN0 IGNkbl9kcF9kYXRhICopbWF0Y2gtPmRhdGE7CisKKwlmb3IgKGkgPSAwOyBpIDwgZHBfZGF0YS0+ bWF4X3BoeTsgaSsrKSB7CisJCWV4dGNvbiA9IGV4dGNvbl9nZXRfZWRldl9ieV9waGFuZGxlKGRl diwgaSk7CisJCXBoeSA9IGRldm1fb2ZfcGh5X2dldF9ieV9pbmRleChkZXYsIGRldi0+b2Zfbm9k ZSwgaSk7CisKKwkJaWYgKFBUUl9FUlIoZXh0Y29uKSA9PSAtRVBST0JFX0RFRkVSIHx8CisJCSAg ICBQVFJfRVJSKHBoeSkgPT0gLUVQUk9CRV9ERUZFUikKKwkJCXJldHVybiAtRVBST0JFX0RFRkVS OworCisJCWlmIChJU19FUlIoZXh0Y29uKSB8fCBJU19FUlIocGh5KSkKKwkJCWNvbnRpbnVlOwor CisJCXBvcnQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBvcnQpLCBHRlBfS0VSTkVMKTsK KwkJaWYgKCFkcCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXBvcnQtPmV4dGNvbiA9IGV4dGNv bjsKKwkJcG9ydC0+cGh5ID0gcGh5OworCQlwb3J0LT5kcCA9IGRwOworCQlwb3J0LT5pZCA9IGk7 CisJCWRwLT5wb3J0W2RwLT5wb3J0cysrXSA9IHBvcnQ7CisJfQorCisJaWYgKCFkcC0+cG9ydHMp IHsKKwkJZGV2X2VycihkZXYsICJtaXNzaW5nIGV4dGNvbiBvciBwaHlcbiIpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBkcCk7CisKKwlyZXR1cm4gY29t cG9uZW50X2FkZChkZXYsICZjZG5fZHBfY29tcG9uZW50X29wcyk7Cit9CisKK3N0YXRpYyBpbnQg Y2RuX2RwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbXBvbmVu dF9kZWwoJnBkZXYtPmRldiwgJmNkbl9kcF9jb21wb25lbnRfb3BzKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjZG5fZHBfZHJpdmVyID0geworCS5w cm9iZSA9IGNkbl9kcF9wcm9iZSwKKwkucmVtb3ZlID0gY2RuX2RwX3JlbW92ZSwKKwkuZHJpdmVy ID0geworCQkgICAubmFtZSA9ICJjZG4tZHAiLAorCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwK KwkJICAgLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKGNkbl9kcF9kdF9pZHMpLAorCX0s Cit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGNkbl9kcF9kcml2ZXIpOworCitNT0RVTEVf QVVUSE9SKCJDaHJpcyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPiIpOworTU9EVUxFX0RFU0NS SVBUSU9OKCJjZG4gRFAgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuaCBiL2RyaXZlcnMv Z3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjBjZjIzZGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvY2RuLWRwLWNvcmUuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAo QykgMjAxNiBDaHJpcyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPgorICogQ29weXJpZ2h0IChD KSAyMDE2IFJPQ0tDSElQLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQ0RO X0RQX0NPUkVfSAorI2RlZmluZSBfQ0ROX0RQX0NPUkVfSAorCisjaW5jbHVkZSA8ZHJtL2RybVAu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9k cF9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVkZSAicm9ja2No aXBfZHJtX2Rydi5oIgorCisjZGVmaW5lIE1BWF9QSFkJCTIKKworZW51bSBhdWRpb19mb3JtYXQg eworCUFGTVRfSTJTID0gMCwKKwlBRk1UX1NQRElGID0gMSwKKwlBRk1UX1VOVVNFRCwKK307CisK K3N0cnVjdCBhdWRpb19pbmZvIHsKKwllbnVtIGF1ZGlvX2Zvcm1hdCBmb3JtYXQ7CisJaW50IHNh bXBsZV9yYXRlOworCWludCBjaGFubmVsczsKKwlpbnQgc2FtcGxlX3dpZHRoOworfTsKKworZW51 bSB2aWNfcHhsX2VuY29kaW5nX2Zvcm1hdCB7CisJUFhMX1JHQiA9IDB4MSwKKwlZQ0JDUl80XzRf NCA9IDB4MiwKKwlZQ0JDUl80XzJfMiA9IDB4NCwKKwlZQ0JDUl80XzJfMCA9IDB4OCwKKwlZX09O TFkgPSAweDEwLAorfTsKKworc3RydWN0IHZpZGVvX2luZm8geworCWJvb2wgaF9zeW5jX3BvbGFy aXR5OworCWJvb2wgdl9zeW5jX3BvbGFyaXR5OworCWJvb2wgaW50ZXJsYWNlZDsKKwlpbnQgY29s b3JfZGVwdGg7CisJZW51bSB2aWNfcHhsX2VuY29kaW5nX2Zvcm1hdCBjb2xvcl9mbXQ7Cit9Owor CitzdHJ1Y3QgY2RuX2Zpcm13YXJlX2hlYWRlciB7CisJdTMyIHNpemVfYnl0ZXM7IC8qIHNpemUg b2YgdGhlIGVudGlyZSBoZWFkZXIraW1hZ2UocykgaW4gYnl0ZXMgKi8KKwl1MzIgaGVhZGVyX3Np emU7IC8qIHNpemUgb2YganVzdCB0aGUgaGVhZGVyIGluIGJ5dGVzICovCisJdTMyIGlyYW1fc2l6 ZTsgLyogc2l6ZSBvZiBpcmFtICovCisJdTMyIGRyYW1fc2l6ZTsgLyogc2l6ZSBvZiBkcmFtICov Cit9OworCitzdHJ1Y3QgY2RuX2RwX3BvcnQgeworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcDsK KwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZXZlbnRfbmI7CisJc3RydWN0IGRlbGF5ZWRfd29yayBl dmVudF93cTsKKwlzdHJ1Y3QgZXh0Y29uX2RldiAqZXh0Y29uOworCXN0cnVjdCBwaHkgKnBoeTsK Kwl1OCBjYXBfbGFuZXM7CisJYm9vbCBwaHlfc3RhdHVzOworCXU4IGlkOworfTsKKworc3RydWN0 IGNkbl9kcF9kZXZpY2UgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtX2RldjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uZWN0b3I7CisJc3RydWN0IGRy bV9lbmNvZGVyIGVuY29kZXI7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbW9kZTsKKwlzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICphdWRpb19wZGV2OworCisJY29uc3Qgc3RydWN0IGZpcm13YXJl ICpmdzsJLyogY2RuIGRwIGZpcm13YXJlICovCisJdW5zaWduZWQgaW50IGZ3X3ZlcnNpb247CS8q IGNkbiBmdyB2ZXJzaW9uICovCisJdTMyIGZ3X3dhaXQ7CisJYm9vbCBmd19sb2FkZWQ7CisJYm9v bCBmd19hY3RpdmVkOworCXZvaWQgX19pb21lbSAqcmVnczsKKwlzdHJ1Y3QgcmVnbWFwICpncmY7 CisJc3RydWN0IGNsayAqY29yZV9jbGs7CisJc3RydWN0IGNsayAqcGNsazsKKwlzdHJ1Y3QgY2xr ICpzcGRpZl9jbGs7CisJc3RydWN0IGNsayAqZ3JmX2NsazsKKwlzdHJ1Y3QgcmVzZXRfY29udHJv bCAqc3BkaWZfcnN0OworCXN0cnVjdCBhdWRpb19pbmZvIGF1ZGlvX2luZm87CisJc3RydWN0IHZp ZGVvX2luZm8gdmlkZW9faW5mbzsKKwlzdHJ1Y3QgZHJtX2RwX2xpbmsgbGluazsKKwlzdHJ1Y3Qg Y2RuX2RwX3BvcnQgKnBvcnRbTUFYX1BIWV07CisJdTggcG9ydHM7CisKKwl1OCBkcGNkW0RQX1JF Q0VJVkVSX0NBUF9TSVpFXTsKKwllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIGhwZF9zdGF0dXM7 CisJaW50IGRwbXNfbW9kZTsKKwlib29sIHNpbmtfaGFzX2F1ZGlvOworfTsKKyNlbmRpZiAgLyog X0NETl9EUF9DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9j ZG4tZHAtcmVnLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYTcwMmQKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5jCkBAIC0wLDAgKzEsOTU5IEBA CisvKgorICogQ29weXJpZ2h0IChDKSBGdXpob3UgUm9ja2NoaXAgRWxlY3Ryb25pY3MgQ28uTHRk CisgKiBBdXRob3I6IENocmlzIFpob25nIDx6eXdAcm9jay1jaGlwcy5jb20+CisgKgorICogVGhp cyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBh bmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+ CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1 ZGUgPGxpbnV4L2lvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+CisKKyNpbmNsdWRl ICJjZG4tZHAtY29yZS5oIgorI2luY2x1ZGUgImNkbi1kcC1yZWcuaCIKKworI2RlZmluZSBDRE5f RFBfU1BESUZfQ0xLCQkyMDAwMDAwMDAKKyNkZWZpbmUgRldfQUxJVkVfVElNRU9VVF9VUwkJMTAw MDAwMAorI2RlZmluZSBNQUlMQk9YX1JFVFJZX1VTCQkxMDAwCisjZGVmaW5lIE1BSUxCT1hfVElN RU9VVF9VUwkJNTAwMDAwMAorI2RlZmluZSBMSU5LX1RSQUlOSU5HX1JFVFJZX01TCQkyMAorI2Rl ZmluZSBMSU5LX1RSQUlOSU5HX1RJTUVPVVRfTVMJNTAwCisKK3ZvaWQgY2RuX2RwX3NldF9md19j bGsoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1MzIgY2xrKQoreworCXdyaXRlbChjbGsgLyAx MDAwMDAwLCBkcC0+cmVncyArIFNXX0NMS19IKTsKK30KKwordm9pZCBjZG5fZHBfY2xvY2tfcmVz ZXQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSBEUFRY X0ZSTVJfREFUQV9DTEtfUlNUTl9FTiB8CisJICAgICAgRFBUWF9GUk1SX0RBVEFfQ0xLX0VOIHwK KwkgICAgICBEUFRYX1BIWV9EQVRBX1JTVE5fRU4gfAorCSAgICAgIERQVFhfUEhZX0RBVEFfQ0xL X0VOIHwKKwkgICAgICBEUFRYX1BIWV9DSEFSX1JTVE5fRU4gfAorCSAgICAgIERQVFhfUEhZX0NI QVJfQ0xLX0VOIHwKKwkgICAgICBTT1VSQ0VfQVVYX1NZU19DTEtfUlNUTl9FTiB8CisJICAgICAg U09VUkNFX0FVWF9TWVNfQ0xLX0VOIHwKKwkgICAgICBEUFRYX1NZU19DTEtfUlNUTl9FTiB8CisJ ICAgICAgRFBUWF9TWVNfQ0xLX0VOIHwKKwkgICAgICBDRkdfRFBUWF9WSUZfQ0xLX1JTVE5fRU4g fAorCSAgICAgIENGR19EUFRYX1ZJRl9DTEtfRU47CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBT T1VSQ0VfRFBUWF9DQVIpOworCisJdmFsID0gU09VUkNFX1BIWV9SU1ROX0VOIHwgU09VUkNFX1BI WV9DTEtfRU47CisJd3JpdGVsKHZhbCwgZHAtPnJlZ3MgKyBTT1VSQ0VfUEhZX0NBUik7CisKKwl2 YWwgPSBTT1VSQ0VfUEtUX1NZU19SU1ROX0VOIHwKKwkgICAgICBTT1VSQ0VfUEtUX1NZU19DTEtf RU4gfAorCSAgICAgIFNPVVJDRV9QS1RfREFUQV9SU1ROX0VOIHwKKwkgICAgICBTT1VSQ0VfUEtU X0RBVEFfQ0xLX0VOOworCXdyaXRlbCh2YWwsIGRwLT5yZWdzICsgU09VUkNFX1BLVF9DQVIpOwor CisJdmFsID0gU1BESUZfQ0RSX0NMS19SU1ROX0VOIHwKKwkgICAgICBTUERJRl9DRFJfQ0xLX0VO IHwKKwkgICAgICBTT1VSQ0VfQUlGX1NZU19SU1ROX0VOIHwKKwkgICAgICBTT1VSQ0VfQUlGX1NZ U19DTEtfRU4gfAorCSAgICAgIFNPVVJDRV9BSUZfQ0xLX1JTVE5fRU4gfAorCSAgICAgIFNPVVJD RV9BSUZfQ0xLX0VOOworCXdyaXRlbCh2YWwsIGRwLT5yZWdzICsgU09VUkNFX0FJRl9DQVIpOwor CisJdmFsID0gU09VUkNFX0NJUEhFUl9TWVNURU1fQ0xLX1JTVE5fRU4gfAorCSAgICAgIFNPVVJD RV9DSVBIRVJfU1lTX0NMS19FTiB8CisJICAgICAgU09VUkNFX0NJUEhFUl9DSEFSX0NMS19SU1RO X0VOIHwKKwkgICAgICBTT1VSQ0VfQ0lQSEVSX0NIQVJfQ0xLX0VOOworCXdyaXRlbCh2YWwsIGRw LT5yZWdzICsgU09VUkNFX0NJUEhFUl9DQVIpOworCisJdmFsID0gU09VUkNFX0NSWVBUT19TWVNf Q0xLX1JTVE5fRU4gfAorCSAgICAgIFNPVVJDRV9DUllQVE9fU1lTX0NMS19FTjsKKwl3cml0ZWwo dmFsLCBkcC0+cmVncyArIFNPVVJDRV9DUllQVE9fQ0FSKTsKKworCXZhbCA9IH4oTUFJTEJPWF9J TlRfTUFTS19CSVQgfCBQSUZfSU5UX01BU0tfQklUKSAmIEFMTF9JTlRfTUFTSzsKKwl3cml0ZWwo dmFsLCBkcC0+cmVncyArIEFQQl9JTlRfTUFTSyk7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX21h aWxib3hfcmVhZChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIGJvb2wgZm9yY2UpCit7CisJaW50 IHZhbCwgcmV0OworCisJaWYgKCFkcC0+ZndfYWN0aXZlZCAmJiAhZm9yY2UpCisJCXJldHVybiAt RVBFUk07CisKKwlyZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsIGRwLT5yZWdzICsgTUFJ TEJPWF9FTVBUWV9BRERSLAorCQkJCSB2YWwsICF2YWwsIE1BSUxCT1hfUkVUUllfVVMsCisJCQkJ IE1BSUxCT1hfVElNRU9VVF9VUyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwly ZXR1cm4gcmVhZGwoZHAtPnJlZ3MgKyBNQUlMQk9YMF9SRF9EQVRBKSAmIDB4ZmY7Cit9CisKK3N0 YXRpYyBpbnQgY2RwX2RwX21haWxib3hfd3JpdGUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1 OCB2YWwsIGJvb2wgZm9yY2UpCit7CisJaW50IHJldCwgZnVsbDsKKworCWlmICghZHAtPmZ3X2Fj dGl2ZWQgJiYgIWZvcmNlKQorCQlyZXR1cm4gLUVQRVJNOworCisJcmV0ID0gcmVhZHhfcG9sbF90 aW1lb3V0KHJlYWRsLCBkcC0+cmVncyArIE1BSUxCT1hfRlVMTF9BRERSLAorCQkJCSBmdWxsLCAh ZnVsbCwgTUFJTEJPWF9SRVRSWV9VUywKKwkJCQkgTUFJTEJPWF9USU1FT1VUX1VTKTsKKwlpZiAo cmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXdyaXRlbCh2YWwsIGRwLT5yZWdzICsgTUFJTEJP WDBfV1JfREFUQSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZG5fZHBfbWFpbGJv eF92YWxpZGF0ZV9yZWNlaXZlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwKKwkJCQkJICAgdTgg bW9kdWxlX2lkLCB1OCBvcGNvZGUsCisJCQkJCSAgIHU4IHJlcV9zaXplKQoreworCXUzMiBtYm94 X3NpemUsIGk7CisJdTggaGVhZGVyWzRdOworCWludCByZXQ7CisKKwkvKiByZWFkIHRoZSBoZWFk ZXIgb2YgdGhlIG1lc3NhZ2UgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXJldCA9 IGNkbl9kcF9tYWlsYm94X3JlYWQoZHAsIDApOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiBy ZXQ7CisKKwkJaGVhZGVyW2ldID0gcmV0OworCX0KKworCW1ib3hfc2l6ZSA9IChoZWFkZXJbMl0g PDwgOCkgfCBoZWFkZXJbM107CisKKwlpZiAob3Bjb2RlICE9IGhlYWRlclswXSB8fCBtb2R1bGVf aWQgIT0gaGVhZGVyWzFdIHx8CisJICAgIHJlcV9zaXplICE9IG1ib3hfc2l6ZSkgeworCQkvKgor CQkgKiBJZiB0aGUgbWVzc2FnZSBpbiBtYWlsYm94IGlzIG5vdCB3aGF0IHdlIHdhbnQsIHdlIG5l ZWQgdG8KKwkJICogY2xlYXIgdGhlIG1haWxib3ggYnkgcmVhZC4KKwkJICovCisJCWZvciAoaSA9 IDA7IGkgPCBtYm94X3NpemU7IGkrKykKKwkJCWlmIChjZG5fZHBfbWFpbGJveF9yZWFkKGRwLCAw KSA8IDApCisJCQkJYnJlYWs7CisKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX21haWxib3hfcmVhZF9yZWNlaXZlKHN0cnVjdCBjZG5f ZHBfZGV2aWNlICpkcCwKKwkJCQkgICAgICAgdTggKmJ1ZmYsIHU4IGJ1ZmZfc2l6ZSkKK3sKKwl1 MzIgaTsKKwlpbnQgcmV0OworCisJZm9yIChpID0gMDsgaSA8IGJ1ZmZfc2l6ZTsgaSsrKSB7CisJ CXJldCA9IGNkbl9kcF9tYWlsYm94X3JlYWQoZHAsIDApOworCQlpZiAocmV0IDwgMCkKKwkJCXJl dHVybiByZXQ7CisKKwkJYnVmZltpXSA9IHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBjZG5fZHBfbWFpbGJveF9zZW5kKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTgg bW9kdWxlX2lkLAorCQkJICAgICAgIHU4IG9wY29kZSwgdTE2IHNpemUsIHU4ICptZXNzYWdlKQor eworCXU4IGhlYWRlcls0XTsKKwlpbnQgcmV0LCBpOworCisJaGVhZGVyWzBdID0gb3Bjb2RlOwor CWhlYWRlclsxXSA9IG1vZHVsZV9pZDsKKwloZWFkZXJbMl0gPSAoc2l6ZSA+PiA4KSAmIDB4ZmY7 CisJaGVhZGVyWzNdID0gc2l6ZSAmIDB4ZmY7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7 CisJCXJldCA9IGNkcF9kcF9tYWlsYm94X3dyaXRlKGRwLCBoZWFkZXJbaV0sIDApOworCQlpZiAo cmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7 CisJCXJldCA9IGNkcF9kcF9tYWlsYm94X3dyaXRlKGRwLCBtZXNzYWdlW2ldLCAwKTsKKwkJaWYg KHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg Y2RuX2RwX3JlZ193cml0ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHUxNiBhZGRyLCB1MzIg dmFsKQoreworCXU4IG1zZ1s2XTsKKworCW1zZ1swXSA9IChhZGRyID4+IDgpICYgMHhmZjsKKwlt c2dbMV0gPSBhZGRyICYgMHhmZjsKKwltc2dbMl0gPSAodmFsID4+IDI0KSAmIDB4ZmY7CisJbXNn WzNdID0gKHZhbCA+PiAxNikgJiAweGZmOworCW1zZ1s0XSA9ICh2YWwgPj4gOCkgJiAweGZmOwor CW1zZ1s1XSA9IHZhbCAmIDB4ZmY7CisJcmV0dXJuIGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1C X01PRFVMRV9JRF9EUF9UWCwgRFBUWF9XUklURV9SRUdJU1RFUiwKKwkJCQkgICBzaXplb2YobXNn KSwgbXNnKTsKK30KKworc3RhdGljIGludCBjZG5fZHBfcmVnX3dyaXRlX2JpdChzdHJ1Y3QgY2Ru X2RwX2RldmljZSAqZHAsIHUxNiBhZGRyLAorCQkJCXU4IHN0YXJ0X2JpdCwgdTggYml0c19ubywg dTMyIHZhbCkKK3sKKwl1OCBmaWVsZFs4XTsKKworCWZpZWxkWzBdID0gKGFkZHIgPj4gOCkgJiAw eGZmOworCWZpZWxkWzFdID0gYWRkciAmIDB4ZmY7CisJZmllbGRbMl0gPSBzdGFydF9iaXQ7CisJ ZmllbGRbM10gPSBiaXRzX25vOworCWZpZWxkWzRdID0gKHZhbCA+PiAyNCkgJiAweGZmOworCWZp ZWxkWzVdID0gKHZhbCA+PiAxNikgJiAweGZmOworCWZpZWxkWzZdID0gKHZhbCA+PiA4KSAmIDB4 ZmY7CisJZmllbGRbN10gPSB2YWwgJiAweGZmOworCisJcmV0dXJuIGNkbl9kcF9tYWlsYm94X3Nl bmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwgRFBUWF9XUklURV9GSUVMRCwKKwkJCQkgICBzaXpl b2YoZmllbGQpLCBmaWVsZCk7Cit9CisKK2ludCBjZG5fZHBfZHBjZF9yZWFkKHN0cnVjdCBjZG5f ZHBfZGV2aWNlICpkcCwgdTMyIGFkZHIsIHU4ICpkYXRhLCB1MTYgbGVuKQoreworCXU4IG1zZ1s1 XSwgcmVnWzVdOworCWludCByZXQ7CisKKwltc2dbMF0gPSAobGVuID4+IDgpICYgMHhmZjsKKwlt c2dbMV0gPSBsZW4gJiAweGZmOworCW1zZ1syXSA9IChhZGRyID4+IDE2KSAmIDB4ZmY7CisJbXNn WzNdID0gKGFkZHIgPj4gOCkgJiAweGZmOworCW1zZ1s0XSA9IGFkZHIgJiAweGZmOworCXJldCA9 IGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwgRFBUWF9SRUFEX0RQ Q0QsCisJCQkJICBzaXplb2YobXNnKSwgbXNnKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9kcGNk X3JlYWQ7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF92YWxpZGF0ZV9yZWNlaXZlKGRwLCBNQl9N T0RVTEVfSURfRFBfVFgsCisJCQkJCSAgICAgIERQVFhfUkVBRF9EUENELAorCQkJCQkgICAgICBz aXplb2YocmVnKSArIGxlbik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZHBjZF9yZWFkOworCisJ cmV0ID0gY2RuX2RwX21haWxib3hfcmVhZF9yZWNlaXZlKGRwLCByZWcsIHNpemVvZihyZWcpKTsK KwlpZiAocmV0KQorCQlnb3RvIGVycl9kcGNkX3JlYWQ7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJv eF9yZWFkX3JlY2VpdmUoZHAsIGRhdGEsIGxlbik7CisKK2Vycl9kcGNkX3JlYWQ6CisJcmV0dXJu IHJldDsKK30KKworaW50IGNkbl9kcF9kcGNkX3dyaXRlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpk cCwgdTMyIGFkZHIsIHU4IHZhbHVlKQoreworCXU4IG1zZ1s2XSwgcmVnWzVdOworCWludCByZXQ7 CisKKwltc2dbMF0gPSAwOworCW1zZ1sxXSA9IDE7CisJbXNnWzJdID0gKGFkZHIgPj4gMTYpICYg MHhmZjsKKwltc2dbM10gPSAoYWRkciA+PiA4KSAmIDB4ZmY7CisJbXNnWzRdID0gYWRkciAmIDB4 ZmY7CisJbXNnWzVdID0gdmFsdWU7CisJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJf TU9EVUxFX0lEX0RQX1RYLCBEUFRYX1dSSVRFX0RQQ0QsCisJCQkJICBzaXplb2YobXNnKSwgbXNn KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9kcGNkX3dyaXRlOworCisJcmV0ID0gY2RuX2RwX21h aWxib3hfdmFsaWRhdGVfcmVjZWl2ZShkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLAorCQkJCQkgICAg ICBEUFRYX1dSSVRFX0RQQ0QsIHNpemVvZihyZWcpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9k cGNkX3dyaXRlOworCisJcmV0ID0gY2RuX2RwX21haWxib3hfcmVhZF9yZWNlaXZlKGRwLCByZWcs IHNpemVvZihyZWcpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9kcGNkX3dyaXRlOworCisJaWYg KGFkZHIgIT0gKHJlZ1syXSA8PCAxNiB8IHJlZ1szXSA8PCA4IHwgcmVnWzRdKSkKKwkJcmV0ID0g LUVJTlZBTDsKKworZXJyX2RwY2Rfd3JpdGU6CisJaWYgKHJldCkKKwkJZGV2X2VycihkcC0+ZGV2 LCAiZHBjZCB3cml0ZSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK2lu dCBjZG5fZHBfbG9hZF9maXJtd2FyZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIGNvbnN0IHUz MiAqaV9tZW0sCisJCQkgdTMyIGlfc2l6ZSwgY29uc3QgdTMyICpkX21lbSwgdTMyIGRfc2l6ZSkK K3sKKwl1MzIgcmVnOworCWludCBpLCByZXQ7CisKKwkvKiByZXNldCB1Y3B1IGJlZm9yZSBsb2Fk IGZpcm13YXJlKi8KKwl3cml0ZWwoQVBCX0lSQU1fUEFUSCB8IEFQQl9EUkFNX1BBVEggfCBBUEJf WFRfUkVTRVQsCisJICAgICAgIGRwLT5yZWdzICsgQVBCX0NUUkwpOworCisJZm9yIChpID0gMDsg aSA8IGlfc2l6ZTsgaSArPSA0KQorCQl3cml0ZWwoKmlfbWVtKyssIGRwLT5yZWdzICsgQUREUl9J TUVNICsgaSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZF9zaXplOyBpICs9IDQpCisJCXdyaXRlbCgq ZF9tZW0rKywgZHAtPnJlZ3MgKyBBRERSX0RNRU0gKyBpKTsKKworCS8qIHVuLXJlc2V0IHVjcHUg Ki8KKwl3cml0ZWwoMCwgZHAtPnJlZ3MgKyBBUEJfQ1RSTCk7CisKKwkvKiBjaGVjayB0aGUga2Vl cCBhbGl2ZSByZWdpc3RlciB0byBtYWtlIHN1cmUgZncgd29ya2luZyAqLworCXJldCA9IHJlYWR4 X3BvbGxfdGltZW91dChyZWFkbCwgZHAtPnJlZ3MgKyBLRUVQX0FMSVZFLAorCQkJCSByZWcsIHJl ZywgMjAwMCwgRldfQUxJVkVfVElNRU9VVF9VUyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vy cihkcC0+ZGV2LCAiZmFpbGVkIHRvIGxvYWRlZCB0aGUgRlcgcmVnID0gJXhcbiIsIHJlZyk7CisJ CXJldHVybiAtRUlOVkFMOworCX0KKworCXJlZyA9IHJlYWRsKGRwLT5yZWdzICsgVkVSX0wpICYg MHhmZjsKKwlkcC0+ZndfdmVyc2lvbiA9IHJlZzsKKwlyZWcgPSByZWFkbChkcC0+cmVncyArIFZF Ul9IKSAmIDB4ZmY7CisJZHAtPmZ3X3ZlcnNpb24gfD0gcmVnIDw8IDg7CisJcmVnID0gcmVhZGwo ZHAtPnJlZ3MgKyBWRVJfTElCX0xfQUREUikgJiAweGZmOworCWRwLT5md192ZXJzaW9uIHw9IHJl ZyA8PCAxNjsKKwlyZWcgPSByZWFkbChkcC0+cmVncyArIFZFUl9MSUJfSF9BRERSKSAmIDB4ZmY7 CisJZHAtPmZ3X3ZlcnNpb24gfD0gcmVnIDw8IDI0OworCisJZGV2X2RiZyhkcC0+ZGV2LCAiZmly bXdhcmUgdmVyc2lvbjogJXhcbiIsIGRwLT5md192ZXJzaW9uKTsKKworCXJldHVybiAwOworfQor CitpbnQgY2RuX2RwX3NldF9maXJtd2FyZV9hY3RpdmUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw LCBib29sIGVuYWJsZSkKK3sKKwl1OCBtc2dbNV07CisJaW50IHJldCwgaTsKKworCW1zZ1swXSA9 IEdFTkVSQUxfTUFJTl9DT05UUk9MOworCW1zZ1sxXSA9IE1CX01PRFVMRV9JRF9HRU5FUkFMOwor CW1zZ1syXSA9IDA7CisJbXNnWzNdID0gMTsKKwltc2dbNF0gPSBlbmFibGUgPyBGV19BQ1RJVkUg OiBGV19TVEFOREJZOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihtc2cpOyBpKyspIHsKKwkJ cmV0ID0gY2RwX2RwX21haWxib3hfd3JpdGUoZHAsIG1zZ1tpXSwgMSk7CisJCWlmIChyZXQpCisJ CQlnb3RvIGVycl9zZXRfZmlybXdhcmVfYWN0aXZlOworCX0KKworCS8qIHJlYWQgdGhlIGZpcm13 YXJlIHN0YXRlICovCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihtc2cpOyBpKyspICB7CisJCXJl dCA9IGNkbl9kcF9tYWlsYm94X3JlYWQoZHAsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8g ZXJyX3NldF9maXJtd2FyZV9hY3RpdmU7CisKKwkJbXNnW2ldID0gcmV0OworCX0KKworCWRwLT5m d19hY3RpdmVkID0gKG1zZ1s0XSA9PSBGV19BQ1RJVkUpOworCXJldCA9IDA7CisKK2Vycl9zZXRf ZmlybXdhcmVfYWN0aXZlOgorCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKGRwLT5kZXYsICJzZXQg ZmlybXdhcmUgYWN0aXZlIGZhaWxlZFxuIik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNkbl9k cF9zZXRfaG9zdF9jYXAoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1OCBsYW5lcywgYm9vbCBm bGlwKQoreworCXU4IG1zZ1s4XTsKKwlpbnQgcmV0OworCisJbXNnWzBdID0gQ0ROX0RQX01BWF9M SU5LX1JBVEU7CisJbXNnWzFdID0gbGFuZXM7CisJbXNnWzJdID0gVk9MVEFHRV9MRVZFTF8yOwor CW1zZ1szXSA9IFBSRV9FTVBIQVNJU19MRVZFTF8zOworCW1zZ1s0XSA9IFBUUzEgfCBQVFMyIHwg UFRTMyB8IFBUUzQ7CisJbXNnWzVdID0gRkFTVF9MVF9OT1RfU1VQUE9SVDsKKwltc2dbNl0gPSBm bGlwID8gTEFORV9NQVBQSU5HX0ZMSVBQRUQgOiBMQU5FX01BUFBJTkdfTk9STUFMOworCW1zZ1s3 XSA9IEVOSEFOQ0VEOworCisJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxF X0lEX0RQX1RYLAorCQkJCSAgRFBUWF9TRVRfSE9TVF9DQVBBQklMSVRJRVMsCisJCQkJICBzaXpl b2YobXNnKSwgbXNnKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9zZXRfaG9zdF9jYXA7CisKKwly ZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9BVVhfU1dBUF9JTlZFUlNJT05fQ09OVFJPTCwK KwkJCSAgICAgICBBVVhfSE9TVF9JTlZFUlQpOworCitlcnJfc2V0X2hvc3RfY2FwOgorCWlmIChy ZXQpCisJCWRldl9lcnIoZHAtPmRldiwgInNldCBob3N0IGNhcCBmYWlsZWQ6ICVkXG4iLCByZXQp OworCXJldHVybiByZXQ7Cit9CisKK2ludCBjZG5fZHBfZXZlbnRfY29uZmlnKHN0cnVjdCBjZG5f ZHBfZGV2aWNlICpkcCkKK3sKKwl1OCBtc2dbNV07CisJaW50IHJldDsKKworCW1lbXNldChtc2cs IDAsIHNpemVvZihtc2cpKTsKKworCW1zZ1swXSA9IERQVFhfRVZFTlRfRU5BQkxFX0hQRCB8IERQ VFhfRVZFTlRfRU5BQkxFX1RSQUlOSU5HOworCisJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChk cCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX0VOQUJMRV9FVkVOVCwKKwkJCQkgIHNpemVvZiht c2cpLCBtc2cpOworCWlmIChyZXQpCisJCWRldl9lcnIoZHAtPmRldiwgInNldCBldmVudCBjb25m aWcgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3UzMiBjZG5fZHBf Z2V0X2V2ZW50KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwlyZXR1cm4gcmVhZGwoZHAt PnJlZ3MgKyBTV19FVkVOVFMwKTsKK30KKworaW50IGNkbl9kcF9nZXRfaHBkX3N0YXR1cyhzdHJ1 Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJdTggc3RhdHVzOworCWludCByZXQ7CisKKwlyZXQg PSBjZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsIERQVFhfSFBEX1NU QVRFLAorCQkJCSAgMCwgTlVMTCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZ2V0X2hwZDsKKwor CXJldCA9IGNkbl9kcF9tYWlsYm94X3ZhbGlkYXRlX3JlY2VpdmUoZHAsIE1CX01PRFVMRV9JRF9E UF9UWCwKKwkJCQkJICAgICAgRFBUWF9IUERfU1RBVEUsIHNpemVvZihzdGF0dXMpKTsKKwlpZiAo cmV0KQorCQlnb3RvIGVycl9nZXRfaHBkOworCisJcmV0ID0gY2RuX2RwX21haWxib3hfcmVhZF9y ZWNlaXZlKGRwLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CisJaWYgKHJldCkKKwkJZ290byBl cnJfZ2V0X2hwZDsKKworCXJldHVybiBzdGF0dXM7CisKK2Vycl9nZXRfaHBkOgorCWRldl9lcnIo ZHAtPmRldiwgImdldCBocGQgc3RhdHVzIGZhaWxlZDogJWRcbiIsIHJldCk7CisJcmV0dXJuIHJl dDsKK30KKworaW50IGNkbl9kcF9nZXRfZWRpZF9ibG9jayh2b2lkICpkYXRhLCB1OCAqZWRpZCwK KwkJCSAgdW5zaWduZWQgaW50IGJsb2NrLCBzaXplX3QgbGVuZ3RoKQoreworCXN0cnVjdCBjZG5f ZHBfZGV2aWNlICpkcCA9IGRhdGE7CisJdTggbXNnWzJdLCByZWdbMl07CisJaW50IHJldDsKKwor CW1zZ1swXSA9IGJsb2NrIC8gMjsKKwltc2dbMV0gPSBibG9jayAlIDI7CisKKwlyZXQgPSBjZG5f ZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsIERQVFhfR0VUX0VESUQsCisJ CQkJICBzaXplb2YobXNnKSwgbXNnKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9nZXRfZWRpZDsK KworCXJldCA9IGNkbl9kcF9tYWlsYm94X3ZhbGlkYXRlX3JlY2VpdmUoZHAsIE1CX01PRFVMRV9J RF9EUF9UWCwKKwkJCQkJICAgICAgRFBUWF9HRVRfRURJRCwKKwkJCQkJICAgICAgc2l6ZW9mKHJl ZykgKyBsZW5ndGgpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2dldF9lZGlkOworCisJcmV0ID0g Y2RuX2RwX21haWxib3hfcmVhZF9yZWNlaXZlKGRwLCByZWcsIHNpemVvZihyZWcpKTsKKwlpZiAo cmV0KQorCQlnb3RvIGVycl9nZXRfZWRpZDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3JlYWRf cmVjZWl2ZShkcCwgZWRpZCwgbGVuZ3RoKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9nZXRfZWRp ZDsKKworCWlmIChyZWdbMF0gIT0gbGVuZ3RoIHx8IHJlZ1sxXSAhPSBibG9jayAvIDIpCisJCXJl dCA9IC1FSU5WQUw7CisKK2Vycl9nZXRfZWRpZDoKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRwLT5k ZXYsICJnZXQgYmxvY2tbJWRdIGVkaWQgZmFpbGVkOiAlZFxuIiwgYmxvY2ssIHJldCk7CisJcmV0 dXJuIHJldDsKK30KKworaW50IGNkbl9kcF90cmFpbmluZ19zdGFydChzdHJ1Y3QgY2RuX2RwX2Rl dmljZSAqZHApCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXU4IG1zZywgZXZlbnRbMl07 CisJaW50IHJldDsKKworCW1zZyA9IExJTktfVFJBSU5JTkdfUlVOOworCisJLyogc3RhcnQgdHJh aW5pbmcgKi8KKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBf VFgsIERQVFhfVFJBSU5JTkdfQ09OVFJPTCwKKwkJCQkgIHNpemVvZihtc2cpLCAmbXNnKTsKKwlp ZiAocmV0KQorCQlnb3RvIGVycl90cmFpbmluZ19zdGFydDsKKworCXRpbWVvdXQgPSBqaWZmaWVz ICsgbXNlY3NfdG9famlmZmllcyhMSU5LX1RSQUlOSU5HX1RJTUVPVVRfTVMpOworCXdoaWxlICh0 aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgeworCQltc2xlZXAoTElOS19UUkFJTklOR19S RVRSWV9NUyk7CisJCXJldCA9IGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9E UF9UWCwKKwkJCQkJICBEUFRYX1JFQURfRVZFTlQsIDAsIE5VTEwpOworCQlpZiAocmV0KQorCQkJ Z290byBlcnJfdHJhaW5pbmdfc3RhcnQ7CisKKwkJcmV0ID0gY2RuX2RwX21haWxib3hfdmFsaWRh dGVfcmVjZWl2ZShkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLAorCQkJCQkJICAgICAgRFBUWF9SRUFE X0VWRU5ULAorCQkJCQkJICAgICAgc2l6ZW9mKGV2ZW50KSk7CisJCWlmIChyZXQpCisJCQlnb3Rv IGVycl90cmFpbmluZ19zdGFydDsKKworCQlyZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFkX3JlY2Vp dmUoZHAsIGV2ZW50LCBzaXplb2YoZXZlbnQpKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX3Ry YWluaW5nX3N0YXJ0OworCisJCWlmIChldmVudFsxXSAmIEVRX1BIQVNFX0ZJTklTSEVEKQorCQkJ cmV0dXJuIDA7CisJfQorCisJcmV0ID0gLUVUSU1FRE9VVDsKKworZXJyX3RyYWluaW5nX3N0YXJ0 OgorCWRldl9lcnIoZHAtPmRldiwgInRyYWluaW5nIGZhaWxlZDogJWRcbiIsIHJldCk7CisJcmV0 dXJuIHJldDsKK30KKworaW50IGNkbl9kcF9nZXRfdHJhaW5pbmdfc3RhdHVzKHN0cnVjdCBjZG5f ZHBfZGV2aWNlICpkcCkKK3sKKwl1OCBzdGF0dXNbMTBdOworCWludCByZXQ7CisKKwlyZXQgPSBj ZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsIERQVFhfUkVBRF9MSU5L X1NUQVQsCisJCQkJICAwLCBOVUxMKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9nZXRfdHJhaW5p bmdfc3RhdHVzOworCisJcmV0ID0gY2RuX2RwX21haWxib3hfdmFsaWRhdGVfcmVjZWl2ZShkcCwg TUJfTU9EVUxFX0lEX0RQX1RYLAorCQkJCQkgICAgICBEUFRYX1JFQURfTElOS19TVEFULAorCQkJ CQkgICAgICBzaXplb2Yoc3RhdHVzKSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZ2V0X3RyYWlu aW5nX3N0YXR1czsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3JlYWRfcmVjZWl2ZShkcCwgc3Rh dHVzLCBzaXplb2Yoc3RhdHVzKSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZ2V0X3RyYWluaW5n X3N0YXR1czsKKworCWRwLT5saW5rLnJhdGUgPSBzdGF0dXNbMF07CisJZHAtPmxpbmsubnVtX2xh bmVzID0gc3RhdHVzWzFdOworCitlcnJfZ2V0X3RyYWluaW5nX3N0YXR1czoKKwlpZiAocmV0KQor CQlkZXZfZXJyKGRwLT5kZXYsICJnZXQgdHJhaW5pbmcgc3RhdHVzIGZhaWxlZDogJWRcbiIsIHJl dCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNkbl9kcF9zZXRfdmlkZW9fc3RhdHVzKHN0cnVj dCBjZG5fZHBfZGV2aWNlICpkcCwgaW50IGFjdGl2ZSkKK3sKKwl1OCBtc2c7CisJaW50IHJldDsK KworCW1zZyA9ICEhYWN0aXZlOworCisJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJf TU9EVUxFX0lEX0RQX1RYLCBEUFRYX1NFVF9WSURFTywKKwkJCQkgIHNpemVvZihtc2cpLCAmbXNn KTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRwLT5kZXYsICJzZXQgdmlkZW8gc3RhdHVzIGZhaWxl ZDogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNkbl9kcF9n ZXRfbXNhX21pc2Moc3RydWN0IHZpZGVvX2luZm8gKnZpZGVvLAorCQkJICAgICAgIHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXUzMiBtc2FfbWlzYzsKKwl1OCB2YWxbMl07CisK Kwlzd2l0Y2ggKHZpZGVvLT5jb2xvcl9mbXQpIHsKKwljYXNlIFBYTF9SR0I6CisJY2FzZSBZX09O TFk6CisJCXZhbFswXSA9IDA7CisJCWJyZWFrOworCS8qIHNldCBZVVYgZGVmYXVsdCBjb2xvciBz cGFjZSBjb252ZXJzaW9uIHRvIEJUNjAxICovCisJY2FzZSBZQ0JDUl80XzRfNDoKKwkJdmFsWzBd ID0gNiArIEJUXzYwMSAqIDg7CisJCWJyZWFrOworCWNhc2UgWUNCQ1JfNF8yXzI6CisJCXZhbFsw XSA9IDUgKyBCVF82MDEgKiA4OworCQlicmVhazsKKwljYXNlIFlDQkNSXzRfMl8wOgorCQl2YWxb MF0gPSA1OworCQlicmVhazsKKwl9OworCisJc3dpdGNoICh2aWRlby0+Y29sb3JfZGVwdGgpIHsK KwljYXNlIDY6CisJCXZhbFsxXSA9IDA7CisJCWJyZWFrOworCWNhc2UgODoKKwkJdmFsWzFdID0g MTsKKwkJYnJlYWs7CisJY2FzZSAxMDoKKwkJdmFsWzFdID0gMjsKKwkJYnJlYWs7CisJY2FzZSAx MjoKKwkJdmFsWzFdID0gMzsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJdmFsWzFdID0gNDsKKwkJ YnJlYWs7CisJfTsKKworCW1zYV9taXNjID0gMiAqIHZhbFswXSArIDMyICogdmFsWzFdICsKKwkJ ICAgKCh2aWRlby0+Y29sb3JfZm10ID09IFlfT05MWSkgPyAoMSA8PCAxNCkgOiAwKTsKKworCXJl dHVybiBtc2FfbWlzYzsKK30KKworaW50IGNkbl9kcF9jb25maWdfdmlkZW8oc3RydWN0IGNkbl9k cF9kZXZpY2UgKmRwKQoreworCXN0cnVjdCB2aWRlb19pbmZvICp2aWRlbyA9ICZkcC0+dmlkZW9f aW5mbzsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZkcC0+bW9kZTsKKwl1NjQg c3ltYm9sLCB0bXA7CisJdTMyIHZhbCwgbGlua19yYXRlOworCXU4IGJpdF9wZXJfcGl4LCB0dV9z aXplX3JlZyA9IFRVX1NJWkU7CisJaW50IHJldDsKKworCWJpdF9wZXJfcGl4ID0gKHZpZGVvLT5j b2xvcl9mbXQgPT0gWUNCQ1JfNF8yXzIpID8KKwkJICAgICAgKHZpZGVvLT5jb2xvcl9kZXB0aCAq IDIpIDogKHZpZGVvLT5jb2xvcl9kZXB0aCAqIDMpOworCisJbGlua19yYXRlID0gZHJtX2RwX2J3 X2NvZGVfdG9fbGlua19yYXRlKGRwLT5saW5rLnJhdGUpIC8gMTAwMDsKKworCXZhbCA9IFZJRl9C WVBBU1NfSU5URVJMQUNFOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIEJORF9IU1lOQzJW U1lOQywgdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jb25maWdfdmlkZW87CisKKwlyZXQg PSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBIU1lOQzJWU1lOQ19QT0xfQ1RSTCwgMCk7CisJaWYgKHJl dCkKKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOworCisJLyoKKwkgKiBnZXQgYSBiZXN0IHR1X3Np emUgYW5kIHZhbGlkIHN5bWJvbDoKKwkgKiAxLiBjaG9zZSBMY2xrIGZyZXEoMTYyTWh6LCAyNzBN aHosIDU0ME1oeiksIHNldCBUVSB0byAzMgorCSAqIDIuIGNhbGN1bGF0ZSBWUyh2YWxpZCBzeW1i b2wpID0gVFUgKiBQY2xrICogQnBwIC8gKExjbGsgKiBMYW5lcykKKwkgKiAzLiBpZiBWUyA+ICou ODUgb3IgVlMgPCAqLjEgb3IgVlMgPCAyIG9yIFRVIDwgVlMgKyA0LCB0aGVuIHNldAorCSAqICAg IFRVICs9IDIgYW5kIHJlcGVhdCAybmQgc3RlcC4KKwkgKi8KKwlkbyB7CisJCXR1X3NpemVfcmVn ICs9IDI7CisJCXRtcCA9IHR1X3NpemVfcmVnICogbW9kZS0+Y2xvY2sgKiBiaXRfcGVyX3BpeDsK KwkJdG1wIC89IGRwLT5saW5rLm51bV9sYW5lcyAqIGxpbmtfcmF0ZSAqIDg7CisJCXN5bWJvbCA9 IHRtcCAvIDEwMDA7CisJfSB3aGlsZSAoKHN5bWJvbCA8PSAxKSB8fCAodHVfc2l6ZV9yZWcgLSBz eW1ib2wgPCA0KSB8fAorCQkgKHRtcCAlIDEwMDAgPiA4NTApIHx8ICh0bXAgJSAxMDAwIDwgMTAw KSk7CisKKwl2YWwgPSBzeW1ib2wgKyAodHVfc2l6ZV9yZWcgPDwgOCk7CisJcmV0ID0gY2RuX2Rw X3JlZ193cml0ZShkcCwgRFBfRlJBTUVSX1RVLCB2YWwpOworCWlmIChyZXQpCisJCWdvdG8gZXJy X2NvbmZpZ192aWRlbzsKKworCS8qIHNldCB0aGUgRklGTyBCdWZmZXIgc2l6ZSAqLworCXZhbCA9 ICgobW9kZS0+Y2xvY2sgKiAoc3ltYm9sICsgMSkgLyAxMDAwKSArIGxpbmtfcmF0ZSk7CisJdmFs IC89IChkcC0+bGluay5udW1fbGFuZXMgKiBsaW5rX3JhdGUpOworCXZhbCA9IDggKiAoc3ltYm9s ICsgMSkgLyBiaXRfcGVyX3BpeCAtIHZhbDsKKwl2YWwgKz0gMjsKKwlyZXQgPSBjZG5fZHBfcmVn X3dyaXRlKGRwLCBEUF9WQ19UQUJMRSgxNSksIHZhbCk7CisKKwlzd2l0Y2ggKHZpZGVvLT5jb2xv cl9kZXB0aCkgeworCWNhc2UgNjoKKwkJdmFsID0gQkNTXzY7CisJCWJyZWFrOworCWNhc2UgODoK KwkJdmFsID0gQkNTXzg7CisJCWJyZWFrOworCWNhc2UgMTA6CisJCXZhbCA9IEJDU18xMDsKKwkJ YnJlYWs7CisJY2FzZSAxMjoKKwkJdmFsID0gQkNTXzEyOworCQlicmVhazsKKwljYXNlIDE2Ogor CQl2YWwgPSBCQ1NfMTY7CisJCWJyZWFrOworCX07CisKKwl2YWwgKz0gdmlkZW8tPmNvbG9yX2Zt dCA8PCA4OworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIERQX0ZSQU1FUl9QWExfUkVQUiwg dmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jb25maWdfdmlkZW87CisKKwl2YWwgPSB2aWRl by0+aF9zeW5jX3BvbGFyaXR5ID8gRFBfRlJBTUVSX1NQX0hTUCA6IDA7CisJdmFsIHw9IHZpZGVv LT52X3N5bmNfcG9sYXJpdHkgPyBEUF9GUkFNRVJfU1BfVlNQIDogMDsKKwlyZXQgPSBjZG5fZHBf cmVnX3dyaXRlKGRwLCBEUF9GUkFNRVJfU1AsIHZhbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJf Y29uZmlnX3ZpZGVvOworCisJdmFsID0gKG1vZGUtPmhzeW5jX3N0YXJ0IC0gbW9kZS0+aGRpc3Bs YXkpIDw8IDE2OworCXZhbCB8PSBtb2RlLT5odG90YWwgLSBtb2RlLT5oc3luY19lbmQ7CisJcmV0 ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgRFBfRlJPTlRfQkFDS19QT1JDSCwgdmFsKTsKKwlpZiAo cmV0KQorCQlnb3RvIGVycl9jb25maWdfdmlkZW87CisKKwl2YWwgPSBtb2RlLT5oZGlzcGxheSAq IGJpdF9wZXJfcGl4IC8gODsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9CWVRFX0NP VU5ULCB2YWwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKworCXZhbCA9 IG1vZGUtPmh0b3RhbCB8ICgobW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfc3RhcnQpIDw8IDE2 KTsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBNU0FfSE9SSVpPTlRBTF8wLCB2YWwpOwor CWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKworCXZhbCA9IG1vZGUtPmhzeW5j X2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0OworCXZhbCB8PSAobW9kZS0+aGRpc3BsYXkgPDwgMTYp IHwgKHZpZGVvLT5oX3N5bmNfcG9sYXJpdHkgPDwgMTUpOworCXJldCA9IGNkbl9kcF9yZWdfd3Jp dGUoZHAsIE1TQV9IT1JJWk9OVEFMXzEsIHZhbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY29u ZmlnX3ZpZGVvOworCisJdmFsID0gbW9kZS0+dnRvdGFsOworCXZhbCB8PSAoKG1vZGUtPnZ0b3Rh bCAtIG1vZGUtPnZzeW5jX3N0YXJ0KSA8PCAxNik7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShk cCwgTVNBX1ZFUlRJQ0FMXzAsIHZhbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY29uZmlnX3Zp ZGVvOworCisJdmFsID0gbW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQ7CisJdmFs IHw9IG1vZGUtPnZkaXNwbGF5IDw8IDE2IHwgKHZpZGVvLT52X3N5bmNfcG9sYXJpdHkgPDwgMTUp OworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIE1TQV9WRVJUSUNBTF8xLCB2YWwpOworCWlm IChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKworCXZhbCA9IGNkbl9kcF9nZXRfbXNh X21pc2ModmlkZW8sIG1vZGUpOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIE1TQV9NSVND LCB2YWwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKKworCXJldCA9IGNk bl9kcF9yZWdfd3JpdGUoZHAsIFNUUkVBTV9DT05GSUcsIDEpOworCWlmIChyZXQpCisJCWdvdG8g ZXJyX2NvbmZpZ192aWRlbzsKKworCXZhbCA9IG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5j X3N0YXJ0OworCXZhbCB8PSAobW9kZS0+aGRpc3BsYXkgPDwgMTYpOworCXJldCA9IGNkbl9kcF9y ZWdfd3JpdGUoZHAsIERQX0hPUklaT05UQUwsIHZhbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJf Y29uZmlnX3ZpZGVvOworCisJdmFsID0gbW9kZS0+dnRvdGFsOworCXZhbCAtPSAobW9kZS0+dnRv dGFsIC0gbW9kZS0+dmRpc3BsYXkpOworCXZhbCB8PSAobW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5 bmNfc3RhcnQpIDw8IDE2OworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIERQX1ZFUlRJQ0FM XzAsIHZhbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOworCisJdmFsID0g bW9kZS0+dnRvdGFsOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIERQX1ZFUlRJQ0FMXzEs IHZhbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOworCisJdmFsID0gIDA7 CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZV9iaXQoZHAsIERQX1ZCX0lELCAyLCAxLCB2YWwpOwor CitlcnJfY29uZmlnX3ZpZGVvOgorCWlmIChyZXQpCisJCWRldl9lcnIoZHAtPmRldiwgImNvbmZp ZyB2aWRlbyBmYWlsZWQ6ICVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBjZG5f ZHBfYXVkaW9fc3RvcChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHN0cnVjdCBhdWRpb19pbmZv ICphdWRpbykKK3sKKwl1MzIgdmFsOworCWludCByZXQ7CisKKwlyZXQgPSBjZG5fZHBfcmVnX3dy aXRlKGRwLCBBVURJT19QQUNLX0NPTlRST0wsIDApOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihk cC0+ZGV2LCAiYXVkaW8gc3RvcCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0Owor CX0KKworCXZhbCA9IFNQRElGX0FWR19TRUwgfCBTUERJRl9KSVRURVJfQllQQVNTOworCXZhbCB8 PSBTUERJRl9GSUZPX01JRF9SQU5HRSgweGUwKTsKKwl2YWwgfD0gU1BESUZfSklUVEVSX1RIUlNI KDB4ZTApOworCXZhbCB8PSBTUERJRl9KSVRURVJfQVZHX1dJTig3KTsKKwl3cml0ZWwodmFsLCBk cC0+cmVncyArIFNQRElGX0NUUkxfQUREUik7CisKKwkvKiBjbGVhcm4gdGhlIGF1ZGlvIGNvbmZp ZyBhbmQgcmVzZXQgKi8KKwl3cml0ZWwoMCwgZHAtPnJlZ3MgKyBBVURJT19TUkNfQ05UTCk7CisJ d3JpdGVsKDAsIGRwLT5yZWdzICsgQVVESU9fU1JDX0NORkcpOworCXdyaXRlbChBVURJT19TV19S U1QsIGRwLT5yZWdzICsgQVVESU9fU1JDX0NOVEwpOworCXdyaXRlbCgwLCBkcC0+cmVncyArIEFV RElPX1NSQ19DTlRMKTsKKworCS8qIHJlc2V0IHNtcGwycGNrdCBjb21wb25lbnQgICovCisJd3Jp dGVsKDAsIGRwLT5yZWdzICsgU01QTDJQS1RfQ05UTCk7CisJd3JpdGVsKEFVRElPX1NXX1JTVCwg ZHAtPnJlZ3MgKyBTTVBMMlBLVF9DTlRMKTsKKwl3cml0ZWwoMCwgZHAtPnJlZ3MgKyBTTVBMMlBL VF9DTlRMKTsKKworCS8qIHJlc2V0IEZJRk8gKi8KKwl3cml0ZWwoQVVESU9fU1dfUlNULCBkcC0+ cmVncyArIEZJRk9fQ05UTCk7CisJd3JpdGVsKDAsIGRwLT5yZWdzICsgRklGT19DTlRMKTsKKwor CWlmIChhdWRpby0+Zm9ybWF0ID09IEFGTVRfU1BESUYpCisJCWNsa19kaXNhYmxlX3VucHJlcGFy ZShkcC0+c3BkaWZfY2xrKTsKKworCXJldHVybiAwOworfQorCitpbnQgY2RuX2RwX2F1ZGlvX211 dGUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBib29sIGVuYWJsZSkKK3sKKwlpbnQgcmV0Owor CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZV9iaXQoZHAsIERQX1ZCX0lELCA0LCAxLCBlbmFibGUp OworCWlmIChyZXQpCisJCWRldl9lcnIoZHAtPmRldiwgImF1ZGlvIG11dGUgZmFpbGVkOiAlZFxu IiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNkbl9kcF9hdWRpb19j b25maWdfaTJzKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwKKwkJCQkgICAgc3RydWN0IGF1ZGlv X2luZm8gKmF1ZGlvKQoreworCWludCBzdWJfcGNrdF9udW0gPSAxLCBpMnNfcG9ydF9lbl92YWwg PSAweGYsIGk7CisJdTMyIHZhbDsKKworCWlmIChhdWRpby0+Y2hhbm5lbHMgPT0gMikgeworCQlp ZiAoZHAtPmxpbmsubnVtX2xhbmVzID09IDEpCisJCQlzdWJfcGNrdF9udW0gPSAyOworCQllbHNl CisJCQlzdWJfcGNrdF9udW0gPSA0OworCisJCWkyc19wb3J0X2VuX3ZhbCA9IDE7CisJfSBlbHNl IGlmIChhdWRpby0+Y2hhbm5lbHMgPT0gNCkgeworCQlpMnNfcG9ydF9lbl92YWwgPSAzOworCX0K KworCXdyaXRlbCgweDAsIGRwLT5yZWdzICsgU1BESUZfQ1RSTF9BRERSKTsKKworCXdyaXRlbChT WU5DX1dSX1RPX0NIX1pFUk8sIGRwLT5yZWdzICsgRklGT19DTlRMKTsKKworCXZhbCA9IE1BWF9O VU1fQ0goYXVkaW8tPmNoYW5uZWxzKTsKKwl2YWwgfD0gTlVNX09GX0kyU19QT1JUUyhhdWRpby0+ Y2hhbm5lbHMpOworCXZhbCB8PSBBVURJT19UWVBFX0xQQ007CisJdmFsIHw9IENGR19TVUJfUENL VF9OVU0oc3ViX3Bja3RfbnVtKTsKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIFNNUEwyUEtUX0NO RkcpOworCisJaWYgKGF1ZGlvLT5zYW1wbGVfd2lkdGggPT0gMTYpCisJCXZhbCA9IDA7CisJZWxz ZSBpZiAoYXVkaW8tPnNhbXBsZV93aWR0aCA9PSAyNCkKKwkJdmFsID0gMSA8PCA5OworCWVsc2UK KwkJdmFsID0gMiA8PCA5OworCisJdmFsIHw9IEFVRElPX0NIX05VTShhdWRpby0+Y2hhbm5lbHMp OworCXZhbCB8PSBJMlNfREVDX1BPUlRfRU4oaTJzX3BvcnRfZW5fdmFsKTsKKwl2YWwgfD0gVFJB TlNfU01QTF9XSURUSF8zMjsKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIEFVRElPX1NSQ19DTkZH KTsKKworCWZvciAoaSA9IDA7IGkgPCAoYXVkaW8tPmNoYW5uZWxzICsgMSkgLyAyOyBpKyspIHsK KwkJaWYgKGF1ZGlvLT5zYW1wbGVfd2lkdGggPT0gMTYpCisJCQl2YWwgPSAoMHgwOCA8PCA4KSB8 ICgweDA4IDw8IDIwKTsKKwkJZWxzZSBpZiAoYXVkaW8tPnNhbXBsZV93aWR0aCA9PSAyNCkKKwkJ CXZhbCA9ICgweDBiIDw8IDgpIHwgKDB4MGIgPDwgMjApOworCisJCXZhbCB8PSAoKDIgKiBpKSA8 PCA0KSB8ICgoMiAqIGkgKyAxKSA8PCAxNik7CisJCXdyaXRlbCh2YWwsIGRwLT5yZWdzICsgU1RU U19CSVRfQ0goaSkpOworCX0KKworCXN3aXRjaCAoYXVkaW8tPnNhbXBsZV9yYXRlKSB7CisJY2Fz ZSAzMjAwMDoKKwkJdmFsID0gU0FNUExJTkdfRlJFUSgzKSB8CisJCSAgICAgIE9SSUdJTkFMX1NB TVBfRlJFUSgweGMpOworCQlicmVhazsKKwljYXNlIDQ0MTAwOgorCQl2YWwgPSBTQU1QTElOR19G UkVRKDApIHwKKwkJICAgICAgT1JJR0lOQUxfU0FNUF9GUkVRKDB4Zik7CisJCWJyZWFrOworCWNh c2UgNDgwMDA6CisJCXZhbCA9IFNBTVBMSU5HX0ZSRVEoMikgfAorCQkgICAgICBPUklHSU5BTF9T QU1QX0ZSRVEoMHhkKTsKKwkJYnJlYWs7CisJY2FzZSA4ODIwMDoKKwkJdmFsID0gU0FNUExJTkdf RlJFUSg4KSB8CisJCSAgICAgIE9SSUdJTkFMX1NBTVBfRlJFUSgweDcpOworCQlicmVhazsKKwlj YXNlIDk2MDAwOgorCQl2YWwgPSBTQU1QTElOR19GUkVRKDB4YSkgfAorCQkgICAgICBPUklHSU5B TF9TQU1QX0ZSRVEoNSk7CisJCWJyZWFrOworCWNhc2UgMTc2NDAwOgorCQl2YWwgPSBTQU1QTElO R19GUkVRKDB4YykgfAorCQkgICAgICBPUklHSU5BTF9TQU1QX0ZSRVEoMyk7CisJCWJyZWFrOwor CWNhc2UgMTkyMDAwOgorCQl2YWwgPSBTQU1QTElOR19GUkVRKDB4ZSkgfAorCQkgICAgICBPUklH SU5BTF9TQU1QX0ZSRVEoMSk7CisJCWJyZWFrOworCX0KKwl2YWwgfD0gNDsKKwl3cml0ZWwodmFs LCBkcC0+cmVncyArIENPTV9DSF9TVFRTX0JJVFMpOworCisJd3JpdGVsKFNNUEwyUEtUX0VOLCBk cC0+cmVncyArIFNNUEwyUEtUX0NOVEwpOworCXdyaXRlbChJMlNfREVDX1NUQVJULCBkcC0+cmVn cyArIEFVRElPX1NSQ19DTlRMKTsKK30KKworc3RhdGljIHZvaWQgY2RuX2RwX2F1ZGlvX2NvbmZp Z19zcGRpZihzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJdTMyIHZhbDsKKworCXZhbCA9 IFNQRElGX0FWR19TRUwgfCBTUERJRl9KSVRURVJfQllQQVNTOworCXZhbCB8PSBTUERJRl9GSUZP X01JRF9SQU5HRSgweGUwKTsKKwl2YWwgfD0gU1BESUZfSklUVEVSX1RIUlNIKDB4ZTApOworCXZh bCB8PSBTUERJRl9KSVRURVJfQVZHX1dJTig3KTsKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIFNQ RElGX0NUUkxfQUREUik7CisKKwl3cml0ZWwoU1lOQ19XUl9UT19DSF9aRVJPLCBkcC0+cmVncyAr IEZJRk9fQ05UTCk7CisKKwl2YWwgPSBNQVhfTlVNX0NIKDIpIHwgQVVESU9fVFlQRV9MUENNIHwg Q0ZHX1NVQl9QQ0tUX05VTSg0KTsKKwl3cml0ZWwodmFsLCBkcC0+cmVncyArIFNNUEwyUEtUX0NO RkcpOworCXdyaXRlbChTTVBMMlBLVF9FTiwgZHAtPnJlZ3MgKyBTTVBMMlBLVF9DTlRMKTsKKwor CXZhbCA9IFNQRElGX0VOQUJMRSB8IFNQRElGX0FWR19TRUwgfCBTUERJRl9KSVRURVJfQllQQVNT OworCXZhbCB8PSBTUERJRl9GSUZPX01JRF9SQU5HRSgweGUwKTsKKwl2YWwgfD0gU1BESUZfSklU VEVSX1RIUlNIKDB4ZTApOworCXZhbCB8PSBTUERJRl9KSVRURVJfQVZHX1dJTig3KTsKKwl3cml0 ZWwodmFsLCBkcC0+cmVncyArIFNQRElGX0NUUkxfQUREUik7CisKKwljbGtfcHJlcGFyZV9lbmFi bGUoZHAtPnNwZGlmX2Nsayk7CisJY2xrX3NldF9yYXRlKGRwLT5zcGRpZl9jbGssIENETl9EUF9T UERJRl9DTEspOworfQorCitpbnQgY2RuX2RwX2F1ZGlvX2NvbmZpZyhzdHJ1Y3QgY2RuX2RwX2Rl dmljZSAqZHAsIHN0cnVjdCBhdWRpb19pbmZvICphdWRpbykKK3sKKwlpbnQgcmV0OworCisJLyog cmVzZXQgdGhlIHNwZGlmIGNsayBiZWZvcmUgY29uZmlnICovCisJaWYgKGF1ZGlvLT5mb3JtYXQg PT0gQUZNVF9TUERJRikgeworCQlyZXNldF9jb250cm9sX2Fzc2VydChkcC0+c3BkaWZfcnN0KTsK KwkJcmVzZXRfY29udHJvbF9kZWFzc2VydChkcC0+c3BkaWZfcnN0KTsKKwl9CisKKwlyZXQgPSBj ZG5fZHBfcmVnX3dyaXRlKGRwLCBDTV9MQU5FX0NUUkwsIExBTkVfUkVGX0NZQyk7CisJaWYgKHJl dCkKKwkJZ290byBlcnJfYXVkaW9fY29uZmlnOworCisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShk cCwgQ01fQ1RSTCwgMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfYXVkaW9fY29uZmlnOworCisJ aWYgKGF1ZGlvLT5mb3JtYXQgPT0gQUZNVF9JMlMpCisJCWNkbl9kcF9hdWRpb19jb25maWdfaTJz KGRwLCBhdWRpbyk7CisJZWxzZQorCQljZG5fZHBfYXVkaW9fY29uZmlnX3NwZGlmKGRwKTsKKwor CXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIEFVRElPX1BBQ0tfQ09OVFJPTCwgQVVESU9fUEFD S19FTik7CisKK2Vycl9hdWRpb19jb25maWc6CisJaWYgKHJldCkKKwkJZGV2X2VycihkcC0+ZGV2 LCAiYXVkaW8gY29uZmlnIGZhaWxlZDogJWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmggYi9kcml2ZXJz L2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjZhYzM2NzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvY2RuLWRwLXJlZy5oCkBAIC0wLDAgKzEsNDgyIEBACisvKgorICogQ29weXJpZ2h0IChD KSBGdXpob3UgUm9ja2NoaXAgRWxlY3Ryb25pY3MgQ28uTHRkCisgKiBBdXRob3I6IENocmlzIFpo b25nIDx6eXdAcm9jay1jaGlwcy5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNl ZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2 ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBh bmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhv c2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9DRE5f RFBfUkVHX0gKKyNkZWZpbmUgX0NETl9EUF9SRUdfSAorCisjaW5jbHVkZSA8bGludXgvYml0b3Bz Lmg+CisKKyNkZWZpbmUgQUREUl9JTUVNCQkweDEwMDAwCisjZGVmaW5lIEFERFJfRE1FTQkJMHgy MDAwMAorCisvKiBBUEIgQ0ZHIGFkZHIgKi8KKyNkZWZpbmUgQVBCX0NUUkwJCQkwCisjZGVmaW5l IFhUX0lOVF9DVFJMCQkJMHgwNAorI2RlZmluZSBNQUlMQk9YX0ZVTExfQUREUgkJMHgwOAorI2Rl ZmluZSBNQUlMQk9YX0VNUFRZX0FERFIJCTB4MGMKKyNkZWZpbmUgTUFJTEJPWDBfV1JfREFUQQkJ MHgxMAorI2RlZmluZSBNQUlMQk9YMF9SRF9EQVRBCQkweDE0CisjZGVmaW5lIEtFRVBfQUxJVkUJ CQkweDE4CisjZGVmaW5lIFZFUl9MCQkJCTB4MWMKKyNkZWZpbmUgVkVSX0gJCQkJMHgyMAorI2Rl ZmluZSBWRVJfTElCX0xfQUREUgkJCTB4MjQKKyNkZWZpbmUgVkVSX0xJQl9IX0FERFIJCQkweDI4 CisjZGVmaW5lIFNXX0RFQlVHX0wJCQkweDJjCisjZGVmaW5lIFNXX0RFQlVHX0gJCQkweDMwCisj ZGVmaW5lIE1BSUxCT1hfSU5UX01BU0sJCTB4MzQKKyNkZWZpbmUgTUFJTEJPWF9JTlRfU1RBVFVT CQkweDM4CisjZGVmaW5lIFNXX0NMS19MCQkJMHgzYworI2RlZmluZSBTV19DTEtfSAkJCTB4NDAK KyNkZWZpbmUgU1dfRVZFTlRTMAkJCTB4NDQKKyNkZWZpbmUgU1dfRVZFTlRTMQkJCTB4NDgKKyNk ZWZpbmUgU1dfRVZFTlRTMgkJCTB4NGMKKyNkZWZpbmUgU1dfRVZFTlRTMwkJCTB4NTAKKyNkZWZp bmUgWFRfT0NEX0NUUkwJCQkweDYwCisjZGVmaW5lIEFQQl9JTlRfTUFTSwkJCTB4NmMKKyNkZWZp bmUgQVBCX1NUQVRVU19NQVNLCQkJMHg3MAorCisvKiBhdWRpbyBkZWNvZGVyIGFkZHIgKi8KKyNk ZWZpbmUgQVVESU9fU1JDX0NOVEwJCQkweDMwMDAwCisjZGVmaW5lIEFVRElPX1NSQ19DTkZHCQkJ MHgzMDAwNAorI2RlZmluZSBDT01fQ0hfU1RUU19CSVRTCQkweDMwMDA4CisjZGVmaW5lIFNUVFNf QklUX0NIKHgpCQkJKDB4MzAwMGMgKyAoKHgpIDw8IDIpKQorI2RlZmluZSBTUERJRl9DVFJMX0FE RFIJCQkweDMwMDRjCisjZGVmaW5lIFNQRElGX0NIMV9DU18zMTAwX0FERFIJCTB4MzAwNTAKKyNk ZWZpbmUgU1BESUZfQ0gxX0NTXzYzMzJfQUREUgkJMHgzMDA1NAorI2RlZmluZSBTUERJRl9DSDFf Q1NfOTU2NF9BRERSCQkweDMwMDU4CisjZGVmaW5lIFNQRElGX0NIMV9DU18xMjc5Nl9BRERSCQkw eDMwMDVjCisjZGVmaW5lIFNQRElGX0NIMV9DU18xNTkxMjhfQUREUgkweDMwMDYwCisjZGVmaW5l IFNQRElGX0NIMV9DU18xOTExNjBfQUREUgkweDMwMDY0CisjZGVmaW5lIFNQRElGX0NIMl9DU18z MTAwX0FERFIJCTB4MzAwNjgKKyNkZWZpbmUgU1BESUZfQ0gyX0NTXzYzMzJfQUREUgkJMHgzMDA2 YworI2RlZmluZSBTUERJRl9DSDJfQ1NfOTU2NF9BRERSCQkweDMwMDcwCisjZGVmaW5lIFNQRElG X0NIMl9DU18xMjc5Nl9BRERSCQkweDMwMDc0CisjZGVmaW5lIFNQRElGX0NIMl9DU18xNTkxMjhf QUREUgkweDMwMDc4CisjZGVmaW5lIFNQRElGX0NIMl9DU18xOTExNjBfQUREUgkweDMwMDdjCisj ZGVmaW5lIFNNUEwyUEtUX0NOVEwJCQkweDMwMDgwCisjZGVmaW5lIFNNUEwyUEtUX0NORkcJCQkw eDMwMDg0CisjZGVmaW5lIEZJRk9fQ05UTAkJCTB4MzAwODgKKyNkZWZpbmUgRklGT19TVFRTCQkJ MHgzMDA4YworCisvKiBzb3VyY2UgcGlmIGFkZHIgKi8KKyNkZWZpbmUgU09VUkNFX1BJRl9XUl9B RERSCQkweDMwODAwCisjZGVmaW5lIFNPVVJDRV9QSUZfV1JfUkVRCQkweDMwODA0CisjZGVmaW5l IFNPVVJDRV9QSUZfUkRfQUREUgkJMHgzMDgwOAorI2RlZmluZSBTT1VSQ0VfUElGX1JEX1JFUQkJ MHgzMDgwYworI2RlZmluZSBTT1VSQ0VfUElGX0RBVEFfV1IJCTB4MzA4MTAKKyNkZWZpbmUgU09V UkNFX1BJRl9EQVRBX1JECQkweDMwODE0CisjZGVmaW5lIFNPVVJDRV9QSUZfRklGTzFfRkxVU0gJ CTB4MzA4MTgKKyNkZWZpbmUgU09VUkNFX1BJRl9GSUZPMl9GTFVTSAkJMHgzMDgxYworI2RlZmlu ZSBTT1VSQ0VfUElGX1NUQVRVUwkJMHgzMDgyMAorI2RlZmluZSBTT1VSQ0VfUElGX0lOVEVSUlVQ VF9TT1VSQ0UJMHgzMDgyNAorI2RlZmluZSBTT1VSQ0VfUElGX0lOVEVSUlVQVF9NQVNLCTB4MzA4 MjgKKyNkZWZpbmUgU09VUkNFX1BJRl9QS1RfQUxMT0NfUkVHCTB4MzA4MmMKKyNkZWZpbmUgU09V UkNFX1BJRl9QS1RfQUxMT0NfV1JfRU4JMHgzMDgzMAorI2RlZmluZSBTT1VSQ0VfUElGX1NXX1JF U0VUCQkweDMwODM0CisKKy8qIGJlbGxvdyByZWdpc3RlcnMgbmVlZCBhY2Nlc3MgYnkgbWFpbGJv eCAqLworLyogc291cmNlIGNhciBhZGRyICovCisjZGVmaW5lIFNPVVJDRV9IRFRYX0NBUgkJCTB4 MDkwMAorI2RlZmluZSBTT1VSQ0VfRFBUWF9DQVIJCQkweDA5MDQKKyNkZWZpbmUgU09VUkNFX1BI WV9DQVIJCQkweDA5MDgKKyNkZWZpbmUgU09VUkNFX0NFQ19DQVIJCQkweDA5MGMKKyNkZWZpbmUg U09VUkNFX0NCVVNfQ0FSCQkJMHgwOTEwCisjZGVmaW5lIFNPVVJDRV9QS1RfQ0FSCQkJMHgwOTE4 CisjZGVmaW5lIFNPVVJDRV9BSUZfQ0FSCQkJMHgwOTFjCisjZGVmaW5lIFNPVVJDRV9DSVBIRVJf Q0FSCQkweDA5MjAKKyNkZWZpbmUgU09VUkNFX0NSWVBUT19DQVIJCTB4MDkyNAorCisvKiBjbG9j ayBtZXRlcnMgYWRkciAqLworI2RlZmluZSBDTV9DVFJMCQkJCTB4MGEwMAorI2RlZmluZSBDTV9J MlNfQ1RSTAkJCTB4MGEwNAorI2RlZmluZSBDTV9TUERJRl9DVFJMCQkJMHgwYTA4CisjZGVmaW5l IENNX1ZJRF9DVFJMCQkJMHgwYTBjCisjZGVmaW5lIENNX0xBTkVfQ1RSTAkJCTB4MGExMAorI2Rl ZmluZSBJMlNfTk1fU1RBQkxFCQkJMHgwYTE0CisjZGVmaW5lIEkyU19OQ1RTX1NUQUJMRQkJCTB4 MGExOAorI2RlZmluZSBTUERJRl9OTV9TVEFCTEUJCQkweDBhMWMKKyNkZWZpbmUgU1BESUZfTkNU U19TVEFCTEUJCTB4MGEyMAorI2RlZmluZSBOTVZJRF9NRUFTX1NUQUJMRQkJMHgwYTI0CisjZGVm aW5lIEkyU19NRUFTCQkJMHgwYTQwCisjZGVmaW5lIFNQRElGX01FQVMJCQkweDBhODAKKyNkZWZp bmUgTk1WSURfTUVBUwkJCTB4MGFjMAorCisvKiBzb3VyY2UgdmlmIGFkZHIgKi8KKyNkZWZpbmUg Qk5EX0hTWU5DMlZTWU5DCQkJMHgwYjAwCisjZGVmaW5lIEhTWU5DMlZTWU5DX0YxX0wxCQkweDBi MDQKKyNkZWZpbmUgSFNZTkMyVlNZTkNfRjJfTDEJCTB4MGIwOAorI2RlZmluZSBIU1lOQzJWU1lO Q19TVEFUVVMJCTB4MGIwYworI2RlZmluZSBIU1lOQzJWU1lOQ19QT0xfQ1RSTAkJMHgwYjEwCisK Ky8qIGRwdHggcGh5IGFkZHIgKi8KKyNkZWZpbmUgRFBfVFhfUEhZX0NPTkZJR19SRUcJCTB4MjAw MAorI2RlZmluZSBEUF9UWF9QSFlfU1RBVFVTX1JFRwkJMHgyMDA0CisjZGVmaW5lIERQX1RYX1BI WV9TV19SRVNFVAkJMHgyMDA4CisjZGVmaW5lIERQX1RYX1BIWV9TQ1JBTUJMRVJfU0VFRAkweDIw MGMKKyNkZWZpbmUgRFBfVFhfUEhZX1RSQUlOSU5HXzAxXzA0CTB4MjAxMAorI2RlZmluZSBEUF9U WF9QSFlfVFJBSU5JTkdfMDVfMDgJMHgyMDE0CisjZGVmaW5lIERQX1RYX1BIWV9UUkFJTklOR18w OV8xMAkweDIwMTgKKyNkZWZpbmUgVEVTVF9DT1IJCQkweDIzZmMKKworLyogZHB0eCBocGQgYWRk ciAqLworI2RlZmluZSBIUERfSVJRX0RFVF9NSU5fVElNRVIJCTB4MjEwMAorI2RlZmluZSBIUERf SVJRX0RFVF9NQVhfVElNRVIJCTB4MjEwNAorI2RlZmluZSBIUERfVU5QTEdFRF9ERVRfTUlOX1RJ TUVSCTB4MjEwOAorI2RlZmluZSBIUERfU1RBQkxFX1RJTUVSCQkweDIxMGMKKyNkZWZpbmUgSFBE X0ZJTFRFUl9USU1FUgkJMHgyMTEwCisjZGVmaW5lIEhQRF9FVkVOVF9NQVNLCQkJMHgyMTFjCisj ZGVmaW5lIEhQRF9FVkVOVF9ERVQJCQkweDIxMjAKKworLyogZHB5eCBmcmFtZXIgYWRkciAqLwor I2RlZmluZSBEUF9GUkFNRVJfR0xPQkFMX0NPTkZJRwkJMHgyMjAwCisjZGVmaW5lIERQX1NXX1JF U0VUCQkJMHgyMjA0CisjZGVmaW5lIERQX0ZSQU1FUl9UVQkJCTB4MjIwOAorI2RlZmluZSBEUF9G UkFNRVJfUFhMX1JFUFIJCTB4MjIwYworI2RlZmluZSBEUF9GUkFNRVJfU1AJCQkweDIyMTAKKyNk ZWZpbmUgQVVESU9fUEFDS19DT05UUk9MCQkweDIyMTQKKyNkZWZpbmUgRFBfVkNfVEFCTEUoeCkJ CQkoMHgyMjE4ICsgKCh4KSA8PCAyKSkKKyNkZWZpbmUgRFBfVkJfSUQJCQkweDIyNTgKKyNkZWZp bmUgRFBfTVRQSF9MVlBfQ09OVFJPTAkJMHgyMjVjCisjZGVmaW5lIERQX01UUEhfU1lNQk9MX1ZB TFVFUwkJMHgyMjYwCisjZGVmaW5lIERQX01UUEhfRUNGX0NPTlRST0wJCTB4MjI2NAorI2RlZmlu ZSBEUF9NVFBIX0FDVF9DT05UUk9MCQkweDIyNjgKKyNkZWZpbmUgRFBfTVRQSF9TVEFUVVMJCQkw eDIyNmMKKyNkZWZpbmUgRFBfSU5URVJSVVBUX1NPVVJDRQkJMHgyMjcwCisjZGVmaW5lIERQX0lO VEVSUlVQVF9NQVNLCQkweDIyNzQKKyNkZWZpbmUgRFBfRlJPTlRfQkFDS19QT1JDSAkJMHgyMjc4 CisjZGVmaW5lIERQX0JZVEVfQ09VTlQJCQkweDIyN2MKKworLyogZHB0eCBzdHJlYW0gYWRkciAq LworI2RlZmluZSBNU0FfSE9SSVpPTlRBTF8wCQkweDIyODAKKyNkZWZpbmUgTVNBX0hPUklaT05U QUxfMQkJMHgyMjg0CisjZGVmaW5lIE1TQV9WRVJUSUNBTF8wCQkJMHgyMjg4CisjZGVmaW5lIE1T QV9WRVJUSUNBTF8xCQkJMHgyMjhjCisjZGVmaW5lIE1TQV9NSVNDCQkJMHgyMjkwCisjZGVmaW5l IFNUUkVBTV9DT05GSUcJCQkweDIyOTQKKyNkZWZpbmUgQVVESU9fUEFDS19TVEFUVVMJCTB4MjI5 OAorI2RlZmluZSBWSUZfU1RBVFVTCQkJMHgyMjljCisjZGVmaW5lIFBDS19TVFVGRl9TVEFUVVNf MAkJMHgyMmEwCisjZGVmaW5lIFBDS19TVFVGRl9TVEFUVVNfMQkJMHgyMmE0CisjZGVmaW5lIElO Rk9fUEFDS19TVEFUVVMJCTB4MjJhOAorI2RlZmluZSBSQVRFX0dPVkVSTk9SX1NUQVRVUwkJMHgy MmFjCisjZGVmaW5lIERQX0hPUklaT05UQUwJCQkweDIyYjAKKyNkZWZpbmUgRFBfVkVSVElDQUxf MAkJCTB4MjJiNAorI2RlZmluZSBEUF9WRVJUSUNBTF8xCQkJMHgyMmI4CisjZGVmaW5lIERQX0JM T0NLX1NEUAkJCTB4MjJiYworCisvKiBkcHR4IGdsYmwgYWRkciAqLworI2RlZmluZSBEUFRYX0xB TkVfRU4JCQkweDIzMDAKKyNkZWZpbmUgRFBUWF9FTkhOQ0QJCQkweDIzMDQKKyNkZWZpbmUgRFBU WF9JTlRfTUFTSwkJCTB4MjMwOAorI2RlZmluZSBEUFRYX0lOVF9TVEFUVVMJCQkweDIzMGMKKwor LyogZHAgYXV4IGFkZHIgKi8KKyNkZWZpbmUgRFBfQVVYX0hPU1RfQ09OVFJPTAkJMHgyODAwCisj ZGVmaW5lIERQX0FVWF9JTlRFUlJVUFRfU09VUkNFCQkweDI4MDQKKyNkZWZpbmUgRFBfQVVYX0lO VEVSUlVQVF9NQVNLCQkweDI4MDgKKyNkZWZpbmUgRFBfQVVYX1NXQVBfSU5WRVJTSU9OX0NPTlRS T0wJMHgyODBjCisjZGVmaW5lIERQX0FVWF9TRU5EX05BQ0tfVFJBTlNBQ1RJT04JMHgyODEwCisj ZGVmaW5lIERQX0FVWF9DTEVBUl9SWAkJCTB4MjgxNAorI2RlZmluZSBEUF9BVVhfQ0xFQVJfVFgJ CQkweDI4MTgKKyNkZWZpbmUgRFBfQVVYX1RJTUVSX1NUT1AJCTB4MjgxYworI2RlZmluZSBEUF9B VVhfVElNRVJfQ0xFQVIJCTB4MjgyMAorI2RlZmluZSBEUF9BVVhfUkVTRVRfU1cJCQkweDI4MjQK KyNkZWZpbmUgRFBfQVVYX0RJVklERV8yTQkJMHgyODI4CisjZGVmaW5lIERQX0FVWF9UWF9QUkVB Q0hBUkdFX0xFTkdUSAkweDI4MmMKKyNkZWZpbmUgRFBfQVVYX0ZSRVFVRU5DWV8xTV9NQVgJCTB4 MjgzMAorI2RlZmluZSBEUF9BVVhfRlJFUVVFTkNZXzFNX01JTgkJMHgyODM0CisjZGVmaW5lIERQ X0FVWF9SWF9QUkVfTUlOCQkweDI4MzgKKyNkZWZpbmUgRFBfQVVYX1JYX1BSRV9NQVgJCTB4Mjgz YworI2RlZmluZSBEUF9BVVhfVElNRVJfUFJFU0VUCQkweDI4NDAKKyNkZWZpbmUgRFBfQVVYX05B Q0tfRk9STUFUCQkweDI4NDQKKyNkZWZpbmUgRFBfQVVYX1RYX0RBVEEJCQkweDI4NDgKKyNkZWZp bmUgRFBfQVVYX1JYX0RBVEEJCQkweDI4NGMKKyNkZWZpbmUgRFBfQVVYX1RYX1NUQVRVUwkJMHgy ODUwCisjZGVmaW5lIERQX0FVWF9SWF9TVEFUVVMJCTB4Mjg1NAorI2RlZmluZSBEUF9BVVhfUlhf Q1lDTEVfQ09VTlRFUgkJMHgyODU4CisjZGVmaW5lIERQX0FVWF9NQUlOX1NUQVRFUwkJMHgyODVj CisjZGVmaW5lIERQX0FVWF9NQUlOX1RJTUVSCQkweDI4NjAKKyNkZWZpbmUgRFBfQVVYX0FGRV9P VVQJCQkweDI4NjQKKworLyogY3J5cHRvIGFkZHIgKi8KKyNkZWZpbmUgQ1JZUFRPX0hEQ1BfUkVW SVNJT04JCTB4NTgwMAorI2RlZmluZSBIRENQX0NSWVBUT19DT05GSUcJCTB4NTgwNAorI2RlZmlu ZSBDUllQVE9fSU5URVJSVVBUX1NPVVJDRQkJMHg1ODA4CisjZGVmaW5lIENSWVBUT19JTlRFUlJV UFRfTUFTSwkJMHg1ODBjCisjZGVmaW5lIENSWVBUTzIyX0NPTkZJRwkJCTB4NTgxOAorI2RlZmlu ZSBDUllQVE8yMl9TVEFUVVMJCQkweDU4MWMKKyNkZWZpbmUgU0hBXzI1Nl9EQVRBX0lOCQkJMHg1 ODNjCisjZGVmaW5lIFNIQV8yNTZfREFUQV9PVVRfKHgpCQkoMHg1ODUwICsgKCh4KSA8PCAyKSkK KyNkZWZpbmUgQUVTXzMyX0tFWV8oeCkJCQkoMHg1ODcwICsgKCh4KSA8PCAyKSkKKyNkZWZpbmUg QUVTXzMyX0RBVEFfSU4JCQkweDU4ODAKKyNkZWZpbmUgQUVTXzMyX0RBVEFfT1VUXyh4KQkJKDB4 NTg4NCArICgoeCkgPDwgMikpCisjZGVmaW5lIENSWVBUTzE0X0NPTkZJRwkJCTB4NThhMAorI2Rl ZmluZSBDUllQVE8xNF9TVEFUVVMJCQkweDU4YTQKKyNkZWZpbmUgQ1JZUFRPMTRfUFJOTV9PVVQJ CTB4NThhOAorI2RlZmluZSBDUllQVE8xNF9LTV8wCQkJMHg1OGFjCisjZGVmaW5lIENSWVBUTzE0 X0tNXzEJCQkweDU4YjAKKyNkZWZpbmUgQ1JZUFRPMTRfQU5fMAkJCTB4NThiNAorI2RlZmluZSBD UllQVE8xNF9BTl8xCQkJMHg1OGI4CisjZGVmaW5lIENSWVBUTzE0X1lPVVJfS1NWXzAJCTB4NThi YworI2RlZmluZSBDUllQVE8xNF9ZT1VSX0tTVl8xCQkweDU4YzAKKyNkZWZpbmUgQ1JZUFRPMTRf TUlfMAkJCTB4NThjNAorI2RlZmluZSBDUllQVE8xNF9NSV8xCQkJMHg1OGM4CisjZGVmaW5lIENS WVBUTzE0X1RJXzAJCQkweDU4Y2MKKyNkZWZpbmUgQ1JZUFRPMTRfS0lfMAkJCTB4NThkMAorI2Rl ZmluZSBDUllQVE8xNF9LSV8xCQkJMHg1OGQ0CisjZGVmaW5lIENSWVBUTzE0X0JMT0NLU19OVU0J CTB4NThkOAorI2RlZmluZSBDUllQVE8xNF9LRVlfTUVNX0RBVEFfMAkJMHg1OGRjCisjZGVmaW5l IENSWVBUTzE0X0tFWV9NRU1fREFUQV8xCQkweDU4ZTAKKyNkZWZpbmUgQ1JZUFRPMTRfU0hBMV9N U0dfREFUQQkJMHg1OGU0CisjZGVmaW5lIENSWVBUTzE0X1NIQTFfVl9WQUxVRV8oeCkJKDB4NThl OCArICgoeCkgPDwgMikpCisjZGVmaW5lIFRSTkdfQ1RSTAkJCTB4NThmYworI2RlZmluZSBUUk5H X0RBVEFfUkRZCQkJMHg1OTAwCisjZGVmaW5lIFRSTkdfREFUQQkJCTB4NTkwNAorCisvKiBjaXBo ZXIgYWRkciAqLworI2RlZmluZSBIRENQX1JFVklTSU9OCQkJMHg2MDAwMAorI2RlZmluZSBJTlRF UlJVUFRfU09VUkNFCQkweDYwMDA0CisjZGVmaW5lIElOVEVSUlVQVF9NQVNLCQkJMHg2MDAwOAor I2RlZmluZSBIRENQX0NJUEhFUl9DT05GSUcJCTB4NjAwMGMKKyNkZWZpbmUgQUVTXzEyOF9LRVlf MAkJCTB4NjAwMTAKKyNkZWZpbmUgQUVTXzEyOF9LRVlfMQkJCTB4NjAwMTQKKyNkZWZpbmUgQUVT XzEyOF9LRVlfMgkJCTB4NjAwMTgKKyNkZWZpbmUgQUVTXzEyOF9LRVlfMwkJCTB4NjAwMWMKKyNk ZWZpbmUgQUVTXzEyOF9SQU5ET01fMAkJMHg2MDAyMAorI2RlZmluZSBBRVNfMTI4X1JBTkRPTV8x CQkweDYwMDI0CisjZGVmaW5lIENJUEhFUjE0X0tNXzAJCQkweDYwMDI4CisjZGVmaW5lIENJUEhF UjE0X0tNXzEJCQkweDYwMDJjCisjZGVmaW5lIENJUEhFUjE0X1NUQVRVUwkJCTB4NjAwMzAKKyNk ZWZpbmUgQ0lQSEVSMTRfUklfUEpfU1RBVFVTCQkweDYwMDM0CisjZGVmaW5lIENJUEhFUl9NT0RF CQkJMHg2MDAzOAorI2RlZmluZSBDSVBIRVIxNF9BTl8wCQkJMHg2MDAzYworI2RlZmluZSBDSVBI RVIxNF9BTl8xCQkJMHg2MDA0MAorI2RlZmluZSBDSVBIRVIyMl9BVVRICQkJMHg2MDA0NAorI2Rl ZmluZSBDSVBIRVIxNF9SMF9EUF9TVEFUVVMJCTB4NjAwNDgKKyNkZWZpbmUgQ0lQSEVSMTRfQk9P VFNUUkFQCQkweDYwMDRjCisKKyNkZWZpbmUgRFBUWF9GUk1SX0RBVEFfQ0xLX1JTVE5fRU4JQklU KDExKQorI2RlZmluZSBEUFRYX0ZSTVJfREFUQV9DTEtfRU4JCUJJVCgxMCkKKyNkZWZpbmUgRFBU WF9QSFlfREFUQV9SU1ROX0VOCQlCSVQoOSkKKyNkZWZpbmUgRFBUWF9QSFlfREFUQV9DTEtfRU4J CUJJVCg4KQorI2RlZmluZSBEUFRYX1BIWV9DSEFSX1JTVE5fRU4JCUJJVCg3KQorI2RlZmluZSBE UFRYX1BIWV9DSEFSX0NMS19FTgkJQklUKDYpCisjZGVmaW5lIFNPVVJDRV9BVVhfU1lTX0NMS19S U1ROX0VOCUJJVCg1KQorI2RlZmluZSBTT1VSQ0VfQVVYX1NZU19DTEtfRU4JCUJJVCg0KQorI2Rl ZmluZSBEUFRYX1NZU19DTEtfUlNUTl9FTgkJQklUKDMpCisjZGVmaW5lIERQVFhfU1lTX0NMS19F TgkJCUJJVCgyKQorI2RlZmluZSBDRkdfRFBUWF9WSUZfQ0xLX1JTVE5fRU4JQklUKDEpCisjZGVm aW5lIENGR19EUFRYX1ZJRl9DTEtfRU4JCUJJVCgwKQorCisjZGVmaW5lIFNPVVJDRV9QSFlfUlNU Tl9FTgkJQklUKDEpCisjZGVmaW5lIFNPVVJDRV9QSFlfQ0xLX0VOCQlCSVQoMCkKKworI2RlZmlu ZSBTT1VSQ0VfUEtUX1NZU19SU1ROX0VOCQlCSVQoMykKKyNkZWZpbmUgU09VUkNFX1BLVF9TWVNf Q0xLX0VOCQlCSVQoMikKKyNkZWZpbmUgU09VUkNFX1BLVF9EQVRBX1JTVE5fRU4JCUJJVCgxKQor I2RlZmluZSBTT1VSQ0VfUEtUX0RBVEFfQ0xLX0VOCQlCSVQoMCkKKworI2RlZmluZSBTUERJRl9D RFJfQ0xLX1JTVE5fRU4JCUJJVCg1KQorI2RlZmluZSBTUERJRl9DRFJfQ0xLX0VOCQlCSVQoNCkK KyNkZWZpbmUgU09VUkNFX0FJRl9TWVNfUlNUTl9FTgkJQklUKDMpCisjZGVmaW5lIFNPVVJDRV9B SUZfU1lTX0NMS19FTgkJQklUKDIpCisjZGVmaW5lIFNPVVJDRV9BSUZfQ0xLX1JTVE5fRU4JCUJJ VCgxKQorI2RlZmluZSBTT1VSQ0VfQUlGX0NMS19FTgkJQklUKDApCisKKyNkZWZpbmUgU09VUkNF X0NJUEhFUl9TWVNURU1fQ0xLX1JTVE5fRU4JQklUKDMpCisjZGVmaW5lIFNPVVJDRV9DSVBIRVJf U1lTX0NMS19FTgkJQklUKDIpCisjZGVmaW5lIFNPVVJDRV9DSVBIRVJfQ0hBUl9DTEtfUlNUTl9F TgkJQklUKDEpCisjZGVmaW5lIFNPVVJDRV9DSVBIRVJfQ0hBUl9DTEtfRU4JCUJJVCgwKQorCisj ZGVmaW5lIFNPVVJDRV9DUllQVE9fU1lTX0NMS19SU1ROX0VOCUJJVCgxKQorI2RlZmluZSBTT1VS Q0VfQ1JZUFRPX1NZU19DTEtfRU4JQklUKDApCisKKyNkZWZpbmUgQVBCX0lSQU1fUEFUSAkJCUJJ VCgyKQorI2RlZmluZSBBUEJfRFJBTV9QQVRICQkJQklUKDEpCisjZGVmaW5lIEFQQl9YVF9SRVNF VAkJCUJJVCgwKQorCisjZGVmaW5lIE1BSUxCT1hfSU5UX01BU0tfQklUCQlCSVQoMSkKKyNkZWZp bmUgUElGX0lOVF9NQVNLX0JJVAkJQklUKDApCisjZGVmaW5lIEFMTF9JTlRfTUFTSwkJCTMKKwor LyogbWFpbGJveCAqLworI2RlZmluZSBNQl9PUENPREVfSUQJCQkwCisjZGVmaW5lIE1CX01PRFVM RV9JRAkJCTEKKyNkZWZpbmUgTUJfU0laRV9NU0JfSUQJCQkyCisjZGVmaW5lIE1CX1NJWkVfTFNC X0lECQkJMworI2RlZmluZSBNQl9EQVRBX0lECQkJNAorCisjZGVmaW5lIE1CX01PRFVMRV9JRF9E UF9UWAkJMHgwMQorI2RlZmluZSBNQl9NT0RVTEVfSURfSERDUF9UWAkJMHgwNworI2RlZmluZSBN Ql9NT0RVTEVfSURfSERDUF9SWAkJMHgwOAorI2RlZmluZSBNQl9NT0RVTEVfSURfSERDUF9HRU5F UkFMCTB4MDkKKyNkZWZpbmUgTUJfTU9EVUxFX0lEX0dFTkVSQUwJCTB4MGEKKworLyogZ2VuZXJh bCBvcGNvZGUgKi8KKyNkZWZpbmUgR0VORVJBTF9NQUlOX0NPTlRST0wgICAgICAgICAgICAweDAx CisjZGVmaW5lIEdFTkVSQUxfVEVTVF9FQ0hPICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBH RU5FUkFMX0JVU19TRVRUSU5HUyAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgR0VORVJBTF9URVNU X0FDQ0VTUyAgICAgICAgICAgICAweDA0CisKKyNkZWZpbmUgRFBUWF9TRVRfUE9XRVJfTU5HCQkJ MHgwMAorI2RlZmluZSBEUFRYX1NFVF9IT1NUX0NBUEFCSUxJVElFUwkJMHgwMQorI2RlZmluZSBE UFRYX0dFVF9FRElECQkJCTB4MDIKKyNkZWZpbmUgRFBUWF9SRUFEX0RQQ0QJCQkJMHgwMworI2Rl ZmluZSBEUFRYX1dSSVRFX0RQQ0QJCQkJMHgwNAorI2RlZmluZSBEUFRYX0VOQUJMRV9FVkVOVAkJ CTB4MDUKKyNkZWZpbmUgRFBUWF9XUklURV9SRUdJU1RFUgkJCTB4MDYKKyNkZWZpbmUgRFBUWF9S RUFEX1JFR0lTVEVSCQkJMHgwNworI2RlZmluZSBEUFRYX1dSSVRFX0ZJRUxECQkJMHgwOAorI2Rl ZmluZSBEUFRYX1RSQUlOSU5HX0NPTlRST0wJCQkweDA5CisjZGVmaW5lIERQVFhfUkVBRF9FVkVO VAkJCQkweDBhCisjZGVmaW5lIERQVFhfUkVBRF9MSU5LX1NUQVQJCQkweDBiCisjZGVmaW5lIERQ VFhfU0VUX1ZJREVPCQkJCTB4MGMKKyNkZWZpbmUgRFBUWF9TRVRfQVVESU8JCQkJMHgwZAorI2Rl ZmluZSBEUFRYX0dFVF9MQVNUX0FVWF9TVEFVUwkJCTB4MGUKKyNkZWZpbmUgRFBUWF9TRVRfTElO S19CUkVBS19QT0lOVAkJMHgwZgorI2RlZmluZSBEUFRYX0ZPUkNFX0xBTkVTCQkJMHgxMAorI2Rl ZmluZSBEUFRYX0hQRF9TVEFURQkJCQkweDExCisKKyNkZWZpbmUgRldfU1RBTkRCWQkJCQkwCisj ZGVmaW5lIEZXX0FDVElWRQkJCQkxCisKKyNkZWZpbmUgRFBUWF9FVkVOVF9FTkFCTEVfSFBECQkJ QklUKDApCisjZGVmaW5lIERQVFhfRVZFTlRfRU5BQkxFX1RSQUlOSU5HCQlCSVQoMSkKKworI2Rl ZmluZSBMSU5LX1RSQUlOSU5HX05PVF9BQ1RJVkUJCTAKKyNkZWZpbmUgTElOS19UUkFJTklOR19S VU4JCQkxCisjZGVmaW5lIExJTktfVFJBSU5JTkdfUkVTVEFSVAkJCTIKKworI2RlZmluZSBDT05U Uk9MX1ZJREVPX0lETEUJCQkwCisjZGVmaW5lIENPTlRST0xfVklERU9fVkFMSUQJCQkxCisKKyNk ZWZpbmUgVklGX0JZUEFTU19JTlRFUkxBQ0UJCQlCSVQoMTMpCisjZGVmaW5lIElOVEVSTEFDRV9G TVRfREVUCQkJQklUKDEyKQorI2RlZmluZSBJTlRFUkxBQ0VfRFRDVF9XSU4JCQkweDIwCisKKyNk ZWZpbmUgRFBfRlJBTUVSX1NQX0lOVEVSTEFDRV9FTgkJQklUKDIpCisjZGVmaW5lIERQX0ZSQU1F Ul9TUF9IU1AJCQlCSVQoMSkKKyNkZWZpbmUgRFBfRlJBTUVSX1NQX1ZTUAkJCUJJVCgwKQorCisv KiBjYXBhYmlsaXR5ICovCisjZGVmaW5lIEFVWF9IT1NUX0lOVkVSVAkJCQkzCisjZGVmaW5lCUZB U1RfTFRfU1VQUE9SVAkJCQkxCisjZGVmaW5lIEZBU1RfTFRfTk9UX1NVUFBPUlQJCQkwCisjZGVm aW5lIExBTkVfTUFQUElOR19OT1JNQUwJCQkweDFiCisjZGVmaW5lIExBTkVfTUFQUElOR19GTElQ UEVECQkJMHhlNAorI2RlZmluZSBFTkhBTkNFRAkJCQkxCisKKyNkZWZpbmUJRlVMTF9MVF9TVEFS VEVECQkJCUJJVCgwKQorI2RlZmluZSBGQVNFX0xUX1NUQVJURUQJCQkJQklUKDEpCisjZGVmaW5l IENMS19SRUNPVkVSWV9GSU5JU0hFRAkJCUJJVCgyKQorI2RlZmluZSBFUV9QSEFTRV9GSU5JU0hF RAkJCUJJVCgzKQorI2RlZmluZSBGQVNFX0xUX1NUQVJUX0ZJTklTSEVECQkJQklUKDQpCisjZGVm aW5lIENMS19SRUNPVkVSWV9GQUlMRUQJCQlCSVQoNSkKKyNkZWZpbmUgRVFfUEhBU0VfRkFJTEVE CQkJCUJJVCg2KQorI2RlZmluZSBGQVNFX0xUX0ZBSUxFRAkJCQlCSVQoNykKKworI2RlZmluZSBE UFRYX0hQRF9FVkVOVAkJCQlCSVQoMCkKKyNkZWZpbmUgRFBUWF9UUkFJTklOR19FVkVOVAkJCUJJ VCgxKQorI2RlZmluZSBIRENQX1RYX1NUQVRVU19FVkVOVAkJCUJJVCg0KQorI2RlZmluZSBIRENQ Ml9UWF9JU19LTV9TVE9SRURfRVZFTlQJCUJJVCg1KQorI2RlZmluZSBIRENQMl9UWF9TVE9SRV9L TV9FVkVOVAkJCUJJVCg2KQorI2RlZmluZSBIRENQX1RYX0lTX1JFQ0VJVkVSX0lEX1ZBTElEX0VW RU5UCUJJVCg3KQorCisjZGVmaW5lIFRVX1NJWkUJCQkJCTMwCisjZGVmaW5lIENETl9EUF9NQVhf TElOS19SQVRFCQkJRFBfTElOS19CV181XzQKKworLyogYXVkaW8gKi8KKyNkZWZpbmUgQVVESU9f UEFDS19FTgkJCQlCSVQoOCkKKyNkZWZpbmUgU0FNUExJTkdfRlJFUSh4KQkJCSgoKHgpICYgMHhm KSA8PCAxNikKKyNkZWZpbmUgT1JJR0lOQUxfU0FNUF9GUkVRKHgpCQkJKCgoeCkgJiAweGYpIDw8 IDI0KQorI2RlZmluZSBTWU5DX1dSX1RPX0NIX1pFUk8JCQlCSVQoMSkKKyNkZWZpbmUgSTJTX0RF Q19TVEFSVAkJCQlCSVQoMSkKKyNkZWZpbmUgQVVESU9fU1dfUlNUCQkJCUJJVCgwKQorI2RlZmlu ZSBTTVBMMlBLVF9FTgkJCQlCSVQoMSkKKyNkZWZpbmUgTUFYX05VTV9DSCh4KQkJCQkoKCh4KSAm IDB4MWYpIC0gMSkKKyNkZWZpbmUgTlVNX09GX0kyU19QT1JUUyh4KQkJCSgoKCh4KSAvIDIgLSAx KSAmIDB4MykgPDwgNSkKKyNkZWZpbmUgQVVESU9fVFlQRV9MUENNCQkJCSgyIDw8IDcpCisjZGVm aW5lIENGR19TVUJfUENLVF9OVU0oeCkJCQkoKCgoeCkgLSAxKSAmIDB4NykgPDwgMTEpCisjZGVm aW5lIEFVRElPX0NIX05VTSh4KQkJCQkoKCgoeCkgLSAxKSAmIDB4MWYpIDw8IDIpCisjZGVmaW5l IFRSQU5TX1NNUExfV0lEVEhfMTYJCQkwCisjZGVmaW5lIFRSQU5TX1NNUExfV0lEVEhfMjQJCQlC SVQoMTEpCisjZGVmaW5lIFRSQU5TX1NNUExfV0lEVEhfMzIJCQkoMiA8PCAxMSkKKyNkZWZpbmUg STJTX0RFQ19QT1JUX0VOKHgpCQkJKCgoeCkgJiAweGYpIDw8IDE3KQorI2RlZmluZSBTUERJRl9F TkFCTEUJCQkJQklUKDIxKQorI2RlZmluZSBTUERJRl9BVkdfU0VMCQkJCUJJVCgyMCkKKyNkZWZp bmUgU1BESUZfSklUVEVSX0JZUEFTUwkJCUJJVCgxOSkKKyNkZWZpbmUgU1BESUZfRklGT19NSURf UkFOR0UoeCkJCQkoKCh4KSAmIDB4ZmYpIDw8IDExKQorI2RlZmluZSBTUERJRl9KSVRURVJfVEhS U0goeCkJCQkoKCh4KSAmIDB4ZmYpIDw8IDMpCisjZGVmaW5lIFNQRElGX0pJVFRFUl9BVkdfV0lO KHgpCQkJKCh4KSAmIDB4NykKKworLyogUmVmZXJuY2UgY3ljbGVzIHdoZW4gdXNpbmcgbGFuZSBj bG9jayBhcyByZWZlcm5jZSAqLworI2RlZmluZSBMQU5FX1JFRl9DWUMJCQkJMHg4MDAwCisKK2Vu dW0gdm9sdGFnZV9zd2luZ19sZXZlbCB7CisJVk9MVEFHRV9MRVZFTF8wLAorCVZPTFRBR0VfTEVW RUxfMSwKKwlWT0xUQUdFX0xFVkVMXzIsCisJVk9MVEFHRV9MRVZFTF8zLAorfTsKKworZW51bSBw cmVfZW1waGFzaXNfbGV2ZWwgeworCVBSRV9FTVBIQVNJU19MRVZFTF8wLAorCVBSRV9FTVBIQVNJ U19MRVZFTF8xLAorCVBSRV9FTVBIQVNJU19MRVZFTF8yLAorCVBSRV9FTVBIQVNJU19MRVZFTF8z LAorfTsKKworZW51bSBwYXR0ZXJuX3NldCB7CisJUFRTMQkJPSBCSVQoMCksCisJUFRTMgkJPSBC SVQoMSksCisJUFRTMwkJPSBCSVQoMiksCisJUFRTNAkJPSBCSVQoMyksCisJRFBfTk9ORQkJPSBC SVQoNCkKK307CisKK2VudW0gdmljX2NvbG9yX2RlcHRoIHsKKwlCQ1NfNiA9IDB4MSwKKwlCQ1Nf OCA9IDB4MiwKKwlCQ1NfMTAgPSAweDQsCisJQkNTXzEyID0gMHg4LAorCUJDU18xNiA9IDB4MTAs Cit9OworCitlbnVtIHZpY19idF90eXBlIHsKKwlCVF82MDEgPSAweDAsCisJQlRfNzA5ID0gMHgx LAorfTsKKwordm9pZCBjZG5fZHBfY2xvY2tfcmVzZXQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw KTsKKwordm9pZCBjZG5fZHBfc2V0X2Z3X2NsayhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHUz MiBjbGspOworaW50IGNkbl9kcF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpk cCwgY29uc3QgdTMyICppX21lbSwKKwkJCSB1MzIgaV9zaXplLCBjb25zdCB1MzIgKmRfbWVtLCB1 MzIgZF9zaXplKTsKK2ludCBjZG5fZHBfc2V0X2Zpcm13YXJlX2FjdGl2ZShzdHJ1Y3QgY2RuX2Rw X2RldmljZSAqZHAsIGJvb2wgZW5hYmxlKTsKK2ludCBjZG5fZHBfc2V0X2hvc3RfY2FwKHN0cnVj dCBjZG5fZHBfZGV2aWNlICpkcCwgdTggbGFuZXMsIGJvb2wgZmxpcCk7CitpbnQgY2RuX2RwX2V2 ZW50X2NvbmZpZyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApOwordTMyIGNkbl9kcF9nZXRfZXZl bnQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKTsKK2ludCBjZG5fZHBfZ2V0X2hwZF9zdGF0dXMo c3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKTsKK2ludCBjZG5fZHBfZHBjZF93cml0ZShzdHJ1Y3Qg Y2RuX2RwX2RldmljZSAqZHAsIHUzMiBhZGRyLCB1OCB2YWx1ZSk7CitpbnQgY2RuX2RwX2RwY2Rf cmVhZChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIHUzMiBhZGRyLCB1OCAqZGF0YSwgdTE2IGxl bik7CitpbnQgY2RuX2RwX2dldF9lZGlkX2Jsb2NrKHZvaWQgKmRwLCB1OCAqZWRpZCwKKwkJCSAg dW5zaWduZWQgaW50IGJsb2NrLCBzaXplX3QgbGVuZ3RoKTsKK2ludCBjZG5fZHBfdHJhaW5pbmdf c3RhcnQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKTsKK2ludCBjZG5fZHBfZ2V0X3RyYWluaW5n X3N0YXR1cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApOworaW50IGNkbl9kcF9zZXRfdmlkZW9f c3RhdHVzKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgaW50IGFjdGl2ZSk7CitpbnQgY2RuX2Rw X2NvbmZpZ192aWRlbyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApOworaW50IGNkbl9kcF9hdWRp b19zdG9wKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgc3RydWN0IGF1ZGlvX2luZm8gKmF1ZGlv KTsKK2ludCBjZG5fZHBfYXVkaW9fbXV0ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIGJvb2wg ZW5hYmxlKTsKK2ludCBjZG5fZHBfYXVkaW9fY29uZmlnKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpk cCwgc3RydWN0IGF1ZGlvX2luZm8gKmF1ZGlvKTsKKyNlbmRpZiAvKiBfQ0ROX0RQX1JFR19IICov CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5j IGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYwppbmRleCBlZGQ3 ZWMyLi5kNzIzZDhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2No aXBfZHJtX3ZvcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1f dm9wLmMKQEAgLTk2OSw5ICs5NjksMTEgQEAgc3RhdGljIHZvaWQgdm9wX2NydGNfZW5hYmxlKHN0 cnVjdCBkcm1fY3J0YyAqY3J0YykKIAkJdm9wX2RzcF9ob2xkX3ZhbGlkX2lycV9kaXNhYmxlKHZv cCk7CiAJfQogCi0JcGluX3BvbCA9IDB4ODsKLQlwaW5fcG9sIHw9IChhZGp1c3RlZF9tb2RlLT5m bGFncyAmIERSTV9NT0RFX0ZMQUdfTkhTWU5DKSA/IDAgOiAxOwotCXBpbl9wb2wgfD0gKGFkanVz dGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZTkMpID8gMCA6ICgxIDw8IDEpOwor CXBpbl9wb2wgPSBCSVQoRENMS19JTlZFUlQpOworCXBpbl9wb2wgfD0gKGFkanVzdGVkX21vZGUt PmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpID8KKwkJICAgMCA6IEJJVChIU1lOQ19QT1NJ VElWRSk7CisJcGluX3BvbCB8PSAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFH X05WU1lOQykgPworCQkgICAwIDogQklUKFZTWU5DX1BPU0lUSVZFKTsKIAlWT1BfQ1RSTF9TRVQo dm9wLCBwaW5fcG9sLCBwaW5fcG9sKTsKIAogCXN3aXRjaCAocy0+b3V0cHV0X3R5cGUpIHsKQEAg LTk5MSw2ICs5OTMsMTEgQEAgc3RhdGljIHZvaWQgdm9wX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YykKIAkJVk9QX0NUUkxfU0VUKHZvcCwgbWlwaV9waW5fcG9sLCBwaW5fcG9sKTsK IAkJVk9QX0NUUkxfU0VUKHZvcCwgbWlwaV9lbiwgMSk7CiAJCWJyZWFrOworCWNhc2UgRFJNX01P REVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0OgorCQlwaW5fcG9sICY9IH5CSVQoRENMS19JTlZFUlQp OworCQlWT1BfQ1RSTF9TRVQodm9wLCBkcF9waW5fcG9sLCBwaW5fcG9sKTsKKwkJVk9QX0NUUkxf U0VUKHZvcCwgZHBfZW4sIDEpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fRVJST1IoInVu c3VwcG9ydCBjb25uZWN0b3JfdHlwZVslZF1cbiIsIHMtPm91dHB1dF90eXBlKTsKIAl9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5oIGIvZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuaAppbmRleCBmZjRmNTJlLi40 ODIwYThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJt X3ZvcC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmgK QEAgLTQ1LDYgKzQ1LDcgQEAgc3RydWN0IHZvcF9jdHJsIHsKIAlzdHJ1Y3Qgdm9wX3JlZyBlZHBf ZW47CiAJc3RydWN0IHZvcF9yZWcgaGRtaV9lbjsKIAlzdHJ1Y3Qgdm9wX3JlZyBtaXBpX2VuOwor CXN0cnVjdCB2b3BfcmVnIGRwX2VuOwogCXN0cnVjdCB2b3BfcmVnIG91dF9tb2RlOwogCXN0cnVj dCB2b3BfcmVnIGRpdGhlcl9kb3duOwogCXN0cnVjdCB2b3BfcmVnIGRpdGhlcl91cDsKQEAgLTUz LDYgKzU0LDcgQEAgc3RydWN0IHZvcF9jdHJsIHsKIAlzdHJ1Y3Qgdm9wX3JlZyBoZG1pX3Bpbl9w b2w7CiAJc3RydWN0IHZvcF9yZWcgZWRwX3Bpbl9wb2w7CiAJc3RydWN0IHZvcF9yZWcgbWlwaV9w aW5fcG9sOworCXN0cnVjdCB2b3BfcmVnIGRwX3Bpbl9wb2w7CiAKIAlzdHJ1Y3Qgdm9wX3JlZyBo dG90YWxfcHc7CiAJc3RydWN0IHZvcF9yZWcgaGFjdF9zdF9lbmQ7CkBAIC0yNDIsNiArMjQ0LDEz IEBAIGVudW0gc2NhbGVfZG93bl9tb2RlIHsKIAlTQ0FMRV9ET1dOX0FWRyA9IDB4MQogfTsKIAor ZW51bSB2b3BfcG9sIHsKKwlIU1lOQ19QT1NJVElWRSA9IDAsCisJVlNZTkNfUE9TSVRJVkUgPSAx LAorCURFTl9ORUdBVElWRSAgID0gMiwKKwlEQ0xLX0lOVkVSVCAgICA9IDMKK307CisKICNkZWZp bmUgRlJBQ18xNl8xNihtdWx0LCBkaXYpICAgICgoKG11bHQpIDw8IDE2KSAvIChkaXYpKQogI2Rl ZmluZSBTQ0xfRlRfREVGQVVMVF9GSVhQT0lOVF9TSElGVAkxMgogI2RlZmluZSBTQ0xfTUFYX1ZT S0lQTElORVMJCTQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hp cF92b3BfcmVnLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfdm9wX3JlZy5j CmluZGV4IDViMWFlMWYuLmRjZjE3MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2Nr Y2hpcC9yb2NrY2hpcF92b3BfcmVnLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3Jv Y2tjaGlwX3ZvcF9yZWcuYwpAQCAtMjgxLDYgKzI4MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg dm9wX2RhdGEgcmszMjg4X3ZvcCA9IHsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm9wX2N0cmwgcmsz Mzk5X2N0cmxfZGF0YSA9IHsKIAkuc3RhbmRieSA9IFZPUF9SRUcoUkszMzk5X1NZU19DVFJMLCAw eDEsIDIyKSwKIAkuZ2F0ZV9lbiA9IFZPUF9SRUcoUkszMzk5X1NZU19DVFJMLCAweDEsIDIzKSwK KwkuZHBfZW4gPSBWT1BfUkVHKFJLMzM5OV9TWVNfQ1RSTCwgMHgxLCAxMSksCiAJLnJnYl9lbiA9 IFZPUF9SRUcoUkszMzk5X1NZU19DVFJMLCAweDEsIDEyKSwKIAkuaGRtaV9lbiA9IFZPUF9SRUco UkszMzk5X1NZU19DVFJMLCAweDEsIDEzKSwKIAkuZWRwX2VuID0gVk9QX1JFRyhSSzMzOTlfU1lT X0NUUkwsIDB4MSwgMTQpLApAQCAtMjkwLDYgKzI5MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg dm9wX2N0cmwgcmszMzk5X2N0cmxfZGF0YSA9IHsKIAkuZGF0YV9ibGFuayA9IFZPUF9SRUcoUksz Mzk5X0RTUF9DVFJMMCwgMHgxLCAxOSksCiAJLm91dF9tb2RlID0gVk9QX1JFRyhSSzMzOTlfRFNQ X0NUUkwwLCAweGYsIDApLAogCS5yZ2JfcGluX3BvbCA9IFZPUF9SRUcoUkszMzk5X0RTUF9DVFJM MSwgMHhmLCAxNiksCisJLmRwX3Bpbl9wb2wgPSBWT1BfUkVHKFJLMzM5OV9EU1BfQ1RSTDEsIDB4 ZiwgMTYpLAogCS5oZG1pX3Bpbl9wb2wgPSBWT1BfUkVHKFJLMzM5OV9EU1BfQ1RSTDEsIDB4Ziwg MjApLAogCS5lZHBfcGluX3BvbCA9IFZPUF9SRUcoUkszMzk5X0RTUF9DVFJMMSwgMHhmLCAyNCks CiAJLm1pcGlfcGluX3BvbCA9IFZPUF9SRUcoUkszMzk5X0RTUF9DVFJMMSwgMHhmLCAyOCksCi0t IAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K ZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==