From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: [PATCH v2 12/13] drm/msm/hdmi: HDMI 8996 PHY/PLL support Date: Mon, 15 Feb 2016 12:23:25 +0530 Message-ID: <1455519206-12939-13-git-send-email-architt@codeaurora.org> References: <1455519206-12939-1-git-send-email-architt@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtp.codeaurora.org (smtp.codeaurora.org [198.145.29.96]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6F3EF6E5E5 for ; Mon, 15 Feb 2016 06:54:46 +0000 (UTC) In-Reply-To: <1455519206-12939-1-git-send-email-architt@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: robdclark@gmail.com Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org QWRkIHN1cHBvcnQgZm9yIHRoZSBIRE1JIFBIWS9QTEwgZm91bmQgaW4gTVNNODk5Ni9BUFE4MDk2 LgoKVW5saWtlIHRoZSBwcmV2aW91cyBwaHlzIHN1cHBvcnRlZCBpbiB0aGUgZHJpdmVyLCB0aGlz IGRvZXNuJ3QgbmVlZAp0aGUgcG93ZXJ1cC9wb3dlcmRvd24gb3BzLiBUaGUgUExMIHByZXBhcmUv dW5wcmVwYXJlIGNsb2NrIG9wcwplbmFibGUvZGlzYWJsZSB0aGUgcGh5IGl0c2VsZi4KClNpZ25l ZC1vZmYtYnk6IEFyY2hpdCBUYW5lamEgPGFyY2hpdHRAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJp dmVycy9ncHUvZHJtL21zbS9oZG1pL01ha2VmaWxlICAgICAgICB8ICAgMiArLQogZHJpdmVycy9n cHUvZHJtL21zbS9oZG1pL2hkbWkuaCAgICAgICAgICB8ICAgOCArCiBkcml2ZXJzL2dwdS9kcm0v bXNtL2hkbWkvaGRtaV9waHkuYyAgICAgIHwgICA1ICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vaGRt aS9oZG1pX3BoeV84OTk2LmMgfCA3NjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog NCBmaWxlcyBjaGFuZ2VkLCA3ODAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vaGRtaS9oZG1pX3BoeV84OTk2LmMKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2hkbWkvTWFrZWZpbGUgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2hkbWkvTWFrZWZpbGUKaW5kZXggOWYyMDQwYy4uNzk5ZGJjYSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9oZG1pL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vaGRtaS9NYWtlZmlsZQpAQCAtMyw0ICszLDQgQEAgY2NmbGFncy15IDo9IC1JaW5jbHVk ZS9kcm0gLUlkcml2ZXJzL2dwdS9kcm0vbXNtCiBvYmoteSA6PSBoZG1pLm8gaGRtaV9waHkubyBo ZG1pX2F1ZGlvLm8gaGRtaV9icmlkZ2UubyBoZG1pX2Nvbm5lY3Rvci5vIFwKIAkgaGRtaV9oZGNw Lm8gaGRtaV9pMmMubyBoZG1pX3BoeV84OTYwLm8gaGRtaV9waHlfOHg2MC5vIGhkbWlfcGh5Xzh4 NzQubwogCi1vYmotJChDT05GSUdfQ09NTU9OX0NMSykgKz0gaGRtaV9wbGxfODk2MC5vCitvYmot JChDT05GSUdfQ09NTU9OX0NMSykgKz0gaGRtaV9wbGxfODk2MC5vIGhkbWlfcGh5Xzg5OTYubwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9oZG1pL2hkbWkuaCBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vaGRtaS9oZG1pLmgKaW5kZXggMTI3NDEzNS4uZGM3MDQ3MiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21zbS9oZG1pL2hkbWkuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2hkbWkvaGRtaS5oCkBAIC0xNDgsNiArMTQ4LDcgQEAgZW51bSBoZG1pX3BoeV90eXBlIHsKIAlN U01fSERNSV9QSFlfOHg2MCwKIAlNU01fSERNSV9QSFlfODk2MCwKIAlNU01fSERNSV9QSFlfOHg3 NCwKKwlNU01fSERNSV9QSFlfODk5NiwKIAlNU01fSERNSV9QSFlfTUFYLAogfTsKIApAQCAtMTY0 LDYgKzE2NSw3IEBAIHN0cnVjdCBoZG1pX3BoeV9jZmcgewogZXh0ZXJuIGNvbnN0IHN0cnVjdCBo ZG1pX3BoeV9jZmcgaGRtaV9waHlfOHg2MF9jZmc7CiBleHRlcm4gY29uc3Qgc3RydWN0IGhkbWlf cGh5X2NmZyBoZG1pX3BoeV84OTYwX2NmZzsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaGRtaV9waHlf Y2ZnIGhkbWlfcGh5Xzh4NzRfY2ZnOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBoZG1pX3BoeV9jZmcg aGRtaV9waHlfODk5Nl9jZmc7CiAKIHN0cnVjdCBoZG1pX3BoeSB7CiAJc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldjsKQEAgLTE5MywxMSArMTk1LDE3IEBAIHZvaWQgX19leGl0IGhkbWlfcGh5 X2RyaXZlcl91bnJlZ2lzdGVyKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX0NPTU1PTl9DTEsKIGlu dCBoZG1pX3BsbF84OTYwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CitpbnQg aGRtaV9wbGxfODk5Nl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogI2Vsc2UK IGludCBoZG1pX3BsbF84OTYwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiB7 CiAJcmV0dXJuIC1FTk9ERVY7CiB9CisKK2ludCBoZG1pX3BsbF84OTk2X2luaXQoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KICNlbmRpZgogCiAv KgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9oZG1pL2hkbWlfcGh5LmMgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2hkbWkvaGRtaV9waHkuYwppbmRleCA1NGM0YjM3Li5jZTk4MWMxIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2hkbWkvaGRtaV9waHkuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2hkbWkvaGRtaV9waHkuYwpAQCAtMTI3LDYgKzEyNyw5IEBAIHN0YXRp YyBpbnQgaGRtaV9waHlfcGxsX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAlj YXNlIE1TTV9IRE1JX1BIWV84OTYwOgogCQlyZXQgPSBoZG1pX3BsbF84OTYwX2luaXQocGRldik7 CiAJCWJyZWFrOworCWNhc2UgTVNNX0hETUlfUEhZXzg5OTY6CisJCXJldCA9IGhkbWlfcGxsXzg5 OTZfaW5pdChwZGV2KTsKKwkJYnJlYWs7CiAJLyoKIAkgKiB3ZSBkb24ndCBoYXZlIFBMTCBzdXBw b3J0IGZvciB0aGVzZSwgZG9uJ3QgcmVwb3J0IGFuIGVycm9yIGZvciBub3cKIAkgKi8KQEAgLTIw MCw2ICsyMDMsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBoZG1pX3BoeV9k dF9tYXRjaFtdID0gewogCSAgLmRhdGEgPSAmaGRtaV9waHlfODk2MF9jZmcgfSwKIAl7IC5jb21w YXRpYmxlID0gInFjb20saGRtaS1waHktOHg3NCIsCiAJICAuZGF0YSA9ICZoZG1pX3BoeV84eDc0 X2NmZyB9LAorCXsgLmNvbXBhdGlibGUgPSAicWNvbSxoZG1pLXBoeS04OTk2IiwKKwkgIC5kYXRh ID0gJmhkbWlfcGh5Xzg5OTZfY2ZnIH0sCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vaGRtaS9oZG1pX3BoeV84OTk2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2hk bWkvaGRtaV9waHlfODk5Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVk Mzg5NzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2hkbWkvaGRtaV9w aHlfODk5Ni5jCkBAIC0wLDAgKzEsNzY2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBU aGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICov CisKKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KKworI2luY2x1ZGUgImhkbWkuaCIK KworI2RlZmluZSBIRE1JX1ZDT19NQVhfRlJFUQkJCTEyMDAwMDAwMDAwVUwKKyNkZWZpbmUgSERN SV9WQ09fTUlOX0ZSRVEJCQk4MDAwMDAwMDAwVUwKKworI2RlZmluZSBIRE1JX1BDTEtfTUFYX0ZS RVEJCQk2MDAwMDAwMDAKKyNkZWZpbmUgSERNSV9QQ0xLX01JTl9GUkVRCQkJMjUwMDAwMDAKKwor I2RlZmluZSBIRE1JX0hJR0hfRlJFUV9CSVRfQ0xLX1RIUkVTSE9MRAkzNDAwMDAwMDAwVUwKKyNk ZWZpbmUgSERNSV9ESUdfRlJFUV9CSVRfQ0xLX1RIUkVTSE9MRAkJMTUwMDAwMDAwMFVMCisjZGVm aW5lIEhETUlfTUlEX0ZSRVFfQklUX0NMS19USFJFU0hPTEQJCTc1MDAwMDAwMFVMCisjZGVmaW5l IEhETUlfQ09SRUNMS19ESVYJCQk1CisjZGVmaW5lIEhETUlfREVGQVVMVF9SRUZfQ0xPQ0sJCQkx OTIwMDAwMAorI2RlZmluZSBIRE1JX1BMTF9DTVBfQ05UCQkJMTAyNAorCisjZGVmaW5lIEhETUlf UExMX1BPTExfTUFYX1JFQURTCQkJMTAwCisjZGVmaW5lIEhETUlfUExMX1BPTExfVElNRU9VVF9V UwkJMTUwCisKKyNkZWZpbmUgSERNSV9OVU1fVFhfQ0hBTk5FTAkJCTQKKworc3RydWN0IGhkbWlf cGxsXzg5OTYgeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IGNsa19o dyBjbGtfaHc7CisKKwkvKiBwbGwgbW1pbyBiYXNlICovCisJdm9pZCBfX2lvbWVtICptbWlvX3Fz ZXJkZXNfY29tOworCS8qIHR4IGNoYW5uZWwgYmFzZSAqLworCXZvaWQgX19pb21lbSAqbW1pb19x c2VyZGVzX3R4W0hETUlfTlVNX1RYX0NIQU5ORUxdOworfTsKKworI2RlZmluZSBod19jbGtfdG9f cGxsKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgaGRtaV9wbGxfODk5NiwgY2xrX2h3KQorCitz dHJ1Y3QgaGRtaV84OTk2X3BoeV9wbGxfcmVnX2NmZyB7CisJdTMyIHR4X2x4X2xhbmVfbW9kZVtI RE1JX05VTV9UWF9DSEFOTkVMXTsKKwl1MzIgdHhfbHhfdHhfYmFuZFtIRE1JX05VTV9UWF9DSEFO TkVMXTsKKwl1MzIgY29tX3N2c19tb2RlX2Nsa19zZWw7CisJdTMyIGNvbV9oc2Nsa19zZWw7CisJ dTMyIGNvbV9wbGxfY2N0cmxfbW9kZTA7CisJdTMyIGNvbV9wbGxfcmN0cmxfbW9kZTA7CisJdTMy IGNvbV9jcF9jdHJsX21vZGUwOworCXUzMiBjb21fZGVjX3N0YXJ0X21vZGUwOworCXUzMiBjb21f ZGl2X2ZyYWNfc3RhcnQxX21vZGUwOworCXUzMiBjb21fZGl2X2ZyYWNfc3RhcnQyX21vZGUwOwor CXUzMiBjb21fZGl2X2ZyYWNfc3RhcnQzX21vZGUwOworCXUzMiBjb21faW50ZWdsb29wX2dhaW4w X21vZGUwOworCXUzMiBjb21faW50ZWdsb29wX2dhaW4xX21vZGUwOworCXUzMiBjb21fbG9ja19j bXBfZW47CisJdTMyIGNvbV9sb2NrX2NtcDFfbW9kZTA7CisJdTMyIGNvbV9sb2NrX2NtcDJfbW9k ZTA7CisJdTMyIGNvbV9sb2NrX2NtcDNfbW9kZTA7CisJdTMyIGNvbV9jb3JlX2Nsa19lbjsKKwl1 MzIgY29tX2NvcmVjbGtfZGl2OworCXUzMiBjb21fdmNvX3R1bmVfY3RybDsKKworCXUzMiB0eF9s eF90eF9kcnZfbHZsW0hETUlfTlVNX1RYX0NIQU5ORUxdOworCXUzMiB0eF9seF90eF9lbXBfcG9z dDFfbHZsW0hETUlfTlVNX1RYX0NIQU5ORUxdOworCXUzMiB0eF9seF92bW9kZV9jdHJsMVtIRE1J X05VTV9UWF9DSEFOTkVMXTsKKwl1MzIgdHhfbHhfdm1vZGVfY3RybDJbSERNSV9OVU1fVFhfQ0hB Tk5FTF07CisJdTMyIHR4X2x4X3Jlc19jb2RlX2xhbmVfdHhbSERNSV9OVU1fVFhfQ0hBTk5FTF07 CisJdTMyIHR4X2x4X2hwX3BkX2VuYWJsZXNbSERNSV9OVU1fVFhfQ0hBTk5FTF07CisKKwl1MzIg cGh5X21vZGU7Cit9OworCitzdHJ1Y3QgaGRtaV84OTk2X3Bvc3RfZGl2aWRlciB7CisJdTY0IHZj b19mcmVxOworCWludCBoc2Nsa19kaXZzZWw7CisJaW50IHZjb19yYXRpbzsKKwlpbnQgdHhfYmFu ZF9zZWw7CisJaW50IGhhbGZfcmF0ZV9tb2RlOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qg aGRtaV9waHkgKnBsbF9nZXRfcGh5KHN0cnVjdCBoZG1pX3BsbF84OTk2ICpwbGwpCit7CisJcmV0 dXJuIHBsYXRmb3JtX2dldF9kcnZkYXRhKHBsbC0+cGRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZCBoZG1pX3BsbF93cml0ZShzdHJ1Y3QgaGRtaV9wbGxfODk5NiAqcGxsLCBpbnQgb2Zmc2V0 LAorCQkJCSAgdTMyIGRhdGEpCit7CisJbXNtX3dyaXRlbChkYXRhLCBwbGwtPm1taW9fcXNlcmRl c19jb20gKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBoZG1pX3BsbF9yZWFkKHN0 cnVjdCBoZG1pX3BsbF84OTk2ICpwbGwsIGludCBvZmZzZXQpCit7CisJcmV0dXJuIG1zbV9yZWFk bChwbGwtPm1taW9fcXNlcmRlc19jb20gKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQgaGRtaV90eF9jaGFuX3dyaXRlKHN0cnVjdCBoZG1pX3BsbF84OTk2ICpwbGwsIGludCBjaGFu bmVsLAorCQkJCSAgICAgIGludCBvZmZzZXQsIGludCBkYXRhKQoreworCSBtc21fd3JpdGVsKGRh dGEsIHBsbC0+bW1pb19xc2VyZGVzX3R4W2NoYW5uZWxdICsgb2Zmc2V0KTsKK30KKworc3RhdGlj IGlubGluZSB1MzIgcGxsX2dldF9jcGN0cmwodTY0IGZyYWNfc3RhcnQsIHVuc2lnbmVkIGxvbmcg cmVmX2NsaywKKwkJCQkgYm9vbCBnZW5fc3NjKQoreworCWlmICgoZnJhY19zdGFydCAhPSAwKSB8 fCBnZW5fc3NjKQorCQlyZXR1cm4gKDExMDAwMDAwIC8gKHJlZl9jbGsgLyAyMCkpOworCisJcmV0 dXJuIDB4MjM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHBsbF9nZXRfcmN0cmwodTY0IGZyYWNf c3RhcnQsIGJvb2wgZ2VuX3NzYykKK3sKKwlpZiAoKGZyYWNfc3RhcnQgIT0gMCkgfHwgZ2VuX3Nz YykKKwkJcmV0dXJuIDB4MTY7CisKKwlyZXR1cm4gMHgxMDsKK30KKworc3RhdGljIGlubGluZSB1 MzIgcGxsX2dldF9jY3RybCh1NjQgZnJhY19zdGFydCwgYm9vbCBnZW5fc3NjKQoreworCWlmICgo ZnJhY19zdGFydCAhPSAwKSB8fCBnZW5fc3NjKQorCQlyZXR1cm4gMHgyODsKKworCXJldHVybiAw eDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHBsbF9nZXRfaW50ZWdsb29wX2dhaW4odTY0IGZy YWNfc3RhcnQsIHU2NCBiY2xrLCB1MzIgcmVmX2NsaywKKwkJCQkJIGJvb2wgZ2VuX3NzYykKK3sK KwlpbnQgZGlnY2xrX2RpdnNlbCA9IGJjbGsgPj0gSERNSV9ESUdfRlJFUV9CSVRfQ0xLX1RIUkVT SE9MRCA/IDEgOiAyOworCXU2NCBiYXNlOworCisJaWYgKChmcmFjX3N0YXJ0ICE9IDApIHx8IGdl bl9zc2MpCisJCWJhc2UgPSAoNjQgKiByZWZfY2xrKSAvIEhETUlfREVGQVVMVF9SRUZfQ0xPQ0s7 CisJZWxzZQorCQliYXNlID0gKDEwMjIgKiByZWZfY2xrKSAvIDEwMDsKKworCWJhc2UgPDw9IGRp Z2Nsa19kaXZzZWw7CisKKwlyZXR1cm4gKGJhc2UgPD0gMjA0NiA/IGJhc2UgOiAyMDQ2KTsKK30K Kworc3RhdGljIGlubGluZSB1MzIgcGxsX2dldF9wbGxfY21wKHU2NCBmZGF0YSwgdW5zaWduZWQg bG9uZyByZWZfY2xrKQoreworCXU2NCBkaXZpZGVuZCA9IEhETUlfUExMX0NNUF9DTlQgKiBmZGF0 YTsKKwl1MzIgZGl2aXNvciA9IHJlZl9jbGsgKiAxMDsKKwl1MzIgcmVtOworCisJcmVtID0gZG9f ZGl2KGRpdmlkZW5kLCBkaXZpc29yKTsKKwlpZiAocmVtID4gKGRpdmlzb3IgPj4gMSkpCisJCWRp dmlkZW5kKys7CisKKwlyZXR1cm4gZGl2aWRlbmQgLSAxOworfQorCitzdGF0aWMgaW5saW5lIHU2 NCBwbGxfY21wX3RvX2ZkYXRhKHUzMiBwbGxfY21wLCB1bnNpZ25lZCBsb25nIHJlZl9jbGspCit7 CisJdTY0IGZkYXRhID0gKCh1NjQpcGxsX2NtcCkgKiByZWZfY2xrICogMTA7CisKKwlkb19kaXYo ZmRhdGEsIEhETUlfUExMX0NNUF9DTlQpOworCisJcmV0dXJuIGZkYXRhOworfQorCitzdGF0aWMg aW50IHBsbF9nZXRfcG9zdF9kaXYoc3RydWN0IGhkbWlfODk5Nl9wb3N0X2RpdmlkZXIgKnBkLCB1 NjQgYmNsaykKK3sKKwlpbnQgcmF0aW9bXSA9IHsgMiwgMywgNCwgNSwgNiwgOSwgMTAsIDEyLCAx NCwgMTUsIDIwLCAyMSwgMjUsIDI4LCAzNSB9OworCWludCBoc19kaXZzZWxbXSA9IHsgMCwgNCwg OCwgMTIsIDEsIDUsIDIsIDksIDMsIDEzLCAxMCwgNywgMTQsIDExLCAxNSB9OworCWludCB0eF9i YW5kX3NlbFtdID0geyAwLCAxLCAyLCAzIH07CisJdTY0IHZjb19mcmVxWzYwXTsKKwl1NjQgdmNv LCB2Y29fb3B0aW1hbDsKKwlpbnQgaGFsZl9yYXRlX21vZGUgPSAwOworCWludCB2Y29fb3B0aW1h bF9pbmRleCwgdmNvX2ZyZXFfaW5kZXg7CisJaW50IGksIGo7CisKK3JldHJ5OgorCXZjb19vcHRp bWFsID0gSERNSV9WQ09fTUFYX0ZSRVE7CisJdmNvX29wdGltYWxfaW5kZXggPSAtMTsKKwl2Y29f ZnJlcV9pbmRleCA9IDA7CisJZm9yIChpID0gMDsgaSA8IDE1OyBpKyspIHsKKwkJZm9yIChqID0g MDsgaiA8IDQ7IGorKykgeworCQkJdTMyIHJhdGlvX211bHQgPSByYXRpb1tpXSA8PCB0eF9iYW5k X3NlbFtqXTsKKworCQkJdmNvID0gYmNsayA+PiBoYWxmX3JhdGVfbW9kZTsKKwkJCXZjbyAqPSBy YXRpb19tdWx0OworCQkJdmNvX2ZyZXFbdmNvX2ZyZXFfaW5kZXgrK10gPSB2Y287CisJCX0KKwl9 CisKKwlmb3IgKGkgPSAwOyBpIDwgNjA7IGkrKykgeworCQl1NjQgdmNvX3RtcCA9IHZjb19mcmVx W2ldOworCisJCWlmICgodmNvX3RtcCA+PSBIRE1JX1ZDT19NSU5fRlJFUSkgJiYKKwkJICAgICh2 Y29fdG1wIDw9IHZjb19vcHRpbWFsKSkgeworCQkJdmNvX29wdGltYWwgPSB2Y29fdG1wOworCQkJ dmNvX29wdGltYWxfaW5kZXggPSBpOworCQl9CisJfQorCisJaWYgKHZjb19vcHRpbWFsX2luZGV4 ID09IC0xKSB7CisJCWlmICghaGFsZl9yYXRlX21vZGUpIHsKKwkJCWhhbGZfcmF0ZV9tb2RlID0g MTsKKwkJCWdvdG8gcmV0cnk7CisJCX0KKwl9IGVsc2UgeworCQlwZC0+dmNvX2ZyZXEgPSB2Y29f b3B0aW1hbDsKKwkJcGQtPnR4X2JhbmRfc2VsID0gdHhfYmFuZF9zZWxbdmNvX29wdGltYWxfaW5k ZXggJSA0XTsKKwkJcGQtPnZjb19yYXRpbyA9IHJhdGlvW3Zjb19vcHRpbWFsX2luZGV4IC8gNF07 CisJCXBkLT5oc2Nsa19kaXZzZWwgPSBoc19kaXZzZWxbdmNvX29wdGltYWxfaW5kZXggLyA0XTsK KworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBw bGxfY2FsY3VsYXRlKHVuc2lnbmVkIGxvbmcgcGl4X2NsaywgdW5zaWduZWQgbG9uZyByZWZfY2xr LAorCQkJIHN0cnVjdCBoZG1pXzg5OTZfcGh5X3BsbF9yZWdfY2ZnICpjZmcpCit7CisJc3RydWN0 IGhkbWlfODk5Nl9wb3N0X2RpdmlkZXIgcGQ7CisJdTY0IGJjbGs7CisJdTY0IHRtZHNfY2xrOwor CXU2NCBkZWNfc3RhcnQ7CisJdTY0IGZyYWNfc3RhcnQ7CisJdTY0IGZkYXRhOworCXUzMiBwbGxf ZGl2aXNvcjsKKwl1MzIgcmVtOworCXUzMiBjcGN0cmw7CisJdTMyIHJjdHJsOworCXUzMiBjY3Ry bDsKKwl1MzIgaW50ZWdsb29wX2dhaW47CisJdTMyIHBsbF9jbXA7CisJaW50IGksIHJldDsKKwor CS8qIGJpdCBjbGsgPSAxMCAqIHBpeF9jbGsgKi8KKwliY2xrID0gKCh1NjQpcGl4X2NsaykgKiAx MDsKKworCWlmIChiY2xrID4gSERNSV9ISUdIX0ZSRVFfQklUX0NMS19USFJFU0hPTEQpCisJCXRt ZHNfY2xrID0gcGl4X2NsayA+PiAyOworCWVsc2UKKwkJdG1kc19jbGsgPSBwaXhfY2xrOworCisJ cmV0ID0gcGxsX2dldF9wb3N0X2RpdigmcGQsIGJjbGspOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwlkZWNfc3RhcnQgPSBwZC52Y29fZnJlcTsKKwlwbGxfZGl2aXNvciA9IDQgKiByZWZf Y2xrOworCWRvX2RpdihkZWNfc3RhcnQsIHBsbF9kaXZpc29yKTsKKworCWZyYWNfc3RhcnQgPSBw ZC52Y29fZnJlcSAqICgxIDw8IDIwKTsKKworCXJlbSA9IGRvX2RpdihmcmFjX3N0YXJ0LCBwbGxf ZGl2aXNvcik7CisJZnJhY19zdGFydCAtPSBkZWNfc3RhcnQgKiAoMSA8PCAyMCk7CisJaWYgKHJl bSA+IChwbGxfZGl2aXNvciA+PiAxKSkKKwkJZnJhY19zdGFydCsrOworCisJY3BjdHJsID0gcGxs X2dldF9jcGN0cmwoZnJhY19zdGFydCwgcmVmX2NsaywgZmFsc2UpOworCXJjdHJsID0gcGxsX2dl dF9yY3RybChmcmFjX3N0YXJ0LCBmYWxzZSk7CisJY2N0cmwgPSBwbGxfZ2V0X2NjdHJsKGZyYWNf c3RhcnQsIGZhbHNlKTsKKwlpbnRlZ2xvb3BfZ2FpbiA9IHBsbF9nZXRfaW50ZWdsb29wX2dhaW4o ZnJhY19zdGFydCwgYmNsaywKKwkJCQkJCXJlZl9jbGssIGZhbHNlKTsKKworCWZkYXRhID0gcGQu dmNvX2ZyZXE7CisJZG9fZGl2KGZkYXRhLCBwZC52Y29fcmF0aW8pOworCisJcGxsX2NtcCA9IHBs bF9nZXRfcGxsX2NtcChmZGF0YSwgcmVmX2Nsayk7CisKKwlEQkcoIlZDTyBmcmVxOiAlbGx1Iiwg cGQudmNvX2ZyZXEpOworCURCRygiZmRhdGE6ICVsbHUiLCBmZGF0YSk7CisJREJHKCJwaXhfY2xr OiAlbHUiLCBwaXhfY2xrKTsKKwlEQkcoInRtZHMgY2xrOiAlbGx1IiwgdG1kc19jbGspOworCURC RygiSFNDTEtfU0VMOiAlZCIsIHBkLmhzY2xrX2RpdnNlbCk7CisJREJHKCJERUNfU1RBUlQ6ICVs bHUiLCBkZWNfc3RhcnQpOworCURCRygiRElWX0ZSQUNfU1RBUlQ6ICVsbHUiLCBmcmFjX3N0YXJ0 KTsKKwlEQkcoIlBMTF9DUENUUkw6ICV1IiwgY3BjdHJsKTsKKwlEQkcoIlBMTF9SQ1RSTDogJXUi LCByY3RybCk7CisJREJHKCJQTExfQ0NUUkw6ICV1IiwgY2N0cmwpOworCURCRygiSU5URUdMT09Q X0dBSU46ICV1IiwgaW50ZWdsb29wX2dhaW4pOworCURCRygiVFhfQkFORDogJWQiLCBwZC50eF9i YW5kX3NlbCk7CisJREJHKCJQTExfQ01QOiAldSIsIHBsbF9jbXApOworCisJLyogQ29udmVydCB0 aGVzZSB2YWx1ZXMgdG8gcmVnaXN0ZXIgc3BlY2lmaWMgdmFsdWVzICovCisJaWYgKGJjbGsgPiBI RE1JX0RJR19GUkVRX0JJVF9DTEtfVEhSRVNIT0xEKQorCQljZmctPmNvbV9zdnNfbW9kZV9jbGtf c2VsID0gMTsKKwllbHNlCisJCWNmZy0+Y29tX3N2c19tb2RlX2Nsa19zZWwgPSAyOworCisJY2Zn LT5jb21faHNjbGtfc2VsID0gKDB4MjAgfCBwZC5oc2Nsa19kaXZzZWwpOworCWNmZy0+Y29tX3Bs bF9jY3RybF9tb2RlMCA9IGNjdHJsOworCWNmZy0+Y29tX3BsbF9yY3RybF9tb2RlMCA9IHJjdHJs OworCWNmZy0+Y29tX2NwX2N0cmxfbW9kZTAgPSBjcGN0cmw7CisJY2ZnLT5jb21fZGVjX3N0YXJ0 X21vZGUwID0gZGVjX3N0YXJ0OworCWNmZy0+Y29tX2Rpdl9mcmFjX3N0YXJ0MV9tb2RlMCA9IChm cmFjX3N0YXJ0ICYgMHhmZik7CisJY2ZnLT5jb21fZGl2X2ZyYWNfc3RhcnQyX21vZGUwID0gKChm cmFjX3N0YXJ0ICYgMHhmZjAwKSA+PiA4KTsKKwljZmctPmNvbV9kaXZfZnJhY19zdGFydDNfbW9k ZTAgPSAoKGZyYWNfc3RhcnQgJiAweGYwMDAwKSA+PiAxNik7CisJY2ZnLT5jb21faW50ZWdsb29w X2dhaW4wX21vZGUwID0gKGludGVnbG9vcF9nYWluICYgMHhmZik7CisJY2ZnLT5jb21faW50ZWds b29wX2dhaW4xX21vZGUwID0gKChpbnRlZ2xvb3BfZ2FpbiAmIDB4ZjAwKSA+PiA4KTsKKwljZmct PmNvbV9sb2NrX2NtcDFfbW9kZTAgPSAocGxsX2NtcCAmIDB4ZmYpOworCWNmZy0+Y29tX2xvY2tf Y21wMl9tb2RlMCA9ICgocGxsX2NtcCAmIDB4ZmYwMCkgPj4gOCk7CisJY2ZnLT5jb21fbG9ja19j bXAzX21vZGUwID0gKChwbGxfY21wICYgMHgzMDAwMCkgPj4gMTYpOworCWNmZy0+Y29tX2xvY2tf Y21wX2VuID0gMHgwOworCWNmZy0+Y29tX2NvcmVfY2xrX2VuID0gMHgyYzsKKwljZmctPmNvbV9j b3JlY2xrX2RpdiA9IEhETUlfQ09SRUNMS19ESVY7CisJY2ZnLT5waHlfbW9kZSA9IChiY2xrID4g SERNSV9ISUdIX0ZSRVFfQklUX0NMS19USFJFU0hPTEQpID8gMHgxMCA6IDB4MDsKKwljZmctPmNv bV92Y29fdHVuZV9jdHJsID0gMHgwOworCisJY2ZnLT50eF9seF9sYW5lX21vZGVbMF0gPQorCQlj ZmctPnR4X2x4X2xhbmVfbW9kZVsyXSA9IDB4NDM7CisKKwljZmctPnR4X2x4X2hwX3BkX2VuYWJs ZXNbMF0gPQorCQljZmctPnR4X2x4X2hwX3BkX2VuYWJsZXNbMV0gPQorCQljZmctPnR4X2x4X2hw X3BkX2VuYWJsZXNbMl0gPSAweDBjOworCWNmZy0+dHhfbHhfaHBfcGRfZW5hYmxlc1szXSA9IDB4 MzsKKworCWZvciAoaSA9IDA7IGkgPCBIRE1JX05VTV9UWF9DSEFOTkVMOyBpKyspCisJCWNmZy0+ dHhfbHhfdHhfYmFuZFtpXSA9IHBkLnR4X2JhbmRfc2VsICsgNDsKKworCWlmIChiY2xrID4gSERN SV9ISUdIX0ZSRVFfQklUX0NMS19USFJFU0hPTEQpIHsKKwkJY2ZnLT50eF9seF90eF9kcnZfbHZs WzBdID0KKwkJCWNmZy0+dHhfbHhfdHhfZHJ2X2x2bFsxXSA9CisJCQljZmctPnR4X2x4X3R4X2Ry dl9sdmxbMl0gPSAweDI1OworCQljZmctPnR4X2x4X3R4X2Rydl9sdmxbM10gPSAweDIyOworCisJ CWNmZy0+dHhfbHhfdHhfZW1wX3Bvc3QxX2x2bFswXSA9CisJCQljZmctPnR4X2x4X3R4X2VtcF9w b3N0MV9sdmxbMV0gPQorCQkJY2ZnLT50eF9seF90eF9lbXBfcG9zdDFfbHZsWzJdID0gMHgyMzsK KwkJY2ZnLT50eF9seF90eF9lbXBfcG9zdDFfbHZsWzNdID0gMHgyNzsKKworCQljZmctPnR4X2x4 X3Ztb2RlX2N0cmwxWzBdID0KKwkJCWNmZy0+dHhfbHhfdm1vZGVfY3RybDFbMV0gPQorCQkJY2Zn LT50eF9seF92bW9kZV9jdHJsMVsyXSA9CisJCQljZmctPnR4X2x4X3Ztb2RlX2N0cmwxWzNdID0g MHgwMDsKKworCQljZmctPnR4X2x4X3Ztb2RlX2N0cmwyWzBdID0KKwkJCWNmZy0+dHhfbHhfdm1v ZGVfY3RybDJbMV0gPQorCQkJY2ZnLT50eF9seF92bW9kZV9jdHJsMlsyXSA9IDB4MEQ7CisKKwkJ Y2ZnLT50eF9seF92bW9kZV9jdHJsMlszXSA9IDB4MDA7CisJfSBlbHNlIGlmIChiY2xrID4gSERN SV9NSURfRlJFUV9CSVRfQ0xLX1RIUkVTSE9MRCkgeworCQlmb3IgKGkgPSAwOyBpIDwgSERNSV9O VU1fVFhfQ0hBTk5FTDsgaSsrKSB7CisJCQljZmctPnR4X2x4X3R4X2Rydl9sdmxbaV0gPSAweDI1 OworCQkJY2ZnLT50eF9seF90eF9lbXBfcG9zdDFfbHZsW2ldID0gMHgyMzsKKwkJCWNmZy0+dHhf bHhfdm1vZGVfY3RybDFbaV0gPSAweDAwOworCQl9CisKKwkJY2ZnLT50eF9seF92bW9kZV9jdHJs MlswXSA9CisJCQljZmctPnR4X2x4X3Ztb2RlX2N0cmwyWzFdID0KKwkJCWNmZy0+dHhfbHhfdm1v ZGVfY3RybDJbMl0gPSAweDBEOworCQljZmctPnR4X2x4X3Ztb2RlX2N0cmwyWzNdID0gMHgwMDsK Kwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgSERNSV9OVU1fVFhfQ0hBTk5FTDsgaSsrKSB7 CisJCQljZmctPnR4X2x4X3R4X2Rydl9sdmxbaV0gPSAweDIwOworCQkJY2ZnLT50eF9seF90eF9l bXBfcG9zdDFfbHZsW2ldID0gMHgyMDsKKwkJCWNmZy0+dHhfbHhfdm1vZGVfY3RybDFbaV0gPSAw eDAwOworCQkJY2ZnLT50eF9seF92bW9kZV9jdHJsMltpXSA9IDB4MEU7CisJCX0KKwl9CisKKwlE QkcoImNvbV9zdnNfbW9kZV9jbGtfc2VsID0gMHgleCIsIGNmZy0+Y29tX3N2c19tb2RlX2Nsa19z ZWwpOworCURCRygiY29tX2hzY2xrX3NlbCA9IDB4JXgiLCBjZmctPmNvbV9oc2Nsa19zZWwpOwor CURCRygiY29tX2xvY2tfY21wX2VuID0gMHgleCIsIGNmZy0+Y29tX2xvY2tfY21wX2VuKTsKKwlE QkcoImNvbV9wbGxfY2N0cmxfbW9kZTAgPSAweCV4IiwgY2ZnLT5jb21fcGxsX2NjdHJsX21vZGUw KTsKKwlEQkcoImNvbV9wbGxfcmN0cmxfbW9kZTAgPSAweCV4IiwgY2ZnLT5jb21fcGxsX3JjdHJs X21vZGUwKTsKKwlEQkcoImNvbV9jcF9jdHJsX21vZGUwID0gMHgleCIsIGNmZy0+Y29tX2NwX2N0 cmxfbW9kZTApOworCURCRygiY29tX2RlY19zdGFydF9tb2RlMCA9IDB4JXgiLCBjZmctPmNvbV9k ZWNfc3RhcnRfbW9kZTApOworCURCRygiY29tX2Rpdl9mcmFjX3N0YXJ0MV9tb2RlMCA9IDB4JXgi LCBjZmctPmNvbV9kaXZfZnJhY19zdGFydDFfbW9kZTApOworCURCRygiY29tX2Rpdl9mcmFjX3N0 YXJ0Ml9tb2RlMCA9IDB4JXgiLCBjZmctPmNvbV9kaXZfZnJhY19zdGFydDJfbW9kZTApOworCURC RygiY29tX2Rpdl9mcmFjX3N0YXJ0M19tb2RlMCA9IDB4JXgiLCBjZmctPmNvbV9kaXZfZnJhY19z dGFydDNfbW9kZTApOworCURCRygiY29tX2ludGVnbG9vcF9nYWluMF9tb2RlMCA9IDB4JXgiLCBj ZmctPmNvbV9pbnRlZ2xvb3BfZ2FpbjBfbW9kZTApOworCURCRygiY29tX2ludGVnbG9vcF9nYWlu MV9tb2RlMCA9IDB4JXgiLCBjZmctPmNvbV9pbnRlZ2xvb3BfZ2FpbjFfbW9kZTApOworCURCRygi Y29tX2xvY2tfY21wMV9tb2RlMCA9IDB4JXgiLCBjZmctPmNvbV9sb2NrX2NtcDFfbW9kZTApOwor CURCRygiY29tX2xvY2tfY21wMl9tb2RlMCA9IDB4JXgiLCBjZmctPmNvbV9sb2NrX2NtcDJfbW9k ZTApOworCURCRygiY29tX2xvY2tfY21wM19tb2RlMCA9IDB4JXgiLCBjZmctPmNvbV9sb2NrX2Nt cDNfbW9kZTApOworCURCRygiY29tX2NvcmVfY2xrX2VuID0gMHgleCIsIGNmZy0+Y29tX2NvcmVf Y2xrX2VuKTsKKwlEQkcoImNvbV9jb3JlY2xrX2RpdiA9IDB4JXgiLCBjZmctPmNvbV9jb3JlY2xr X2Rpdik7CisJREJHKCJwaHlfbW9kZSA9IDB4JXgiLCBjZmctPnBoeV9tb2RlKTsKKworCURCRygi dHhfbDBfbGFuZV9tb2RlID0gMHgleCIsIGNmZy0+dHhfbHhfbGFuZV9tb2RlWzBdKTsKKwlEQkco InR4X2wyX2xhbmVfbW9kZSA9IDB4JXgiLCBjZmctPnR4X2x4X2xhbmVfbW9kZVsyXSk7CisKKwlm b3IgKGkgPSAwOyBpIDwgSERNSV9OVU1fVFhfQ0hBTk5FTDsgaSsrKSB7CisJCURCRygidHhfbCVk X3R4X2JhbmQgPSAweCV4IiwgaSwgY2ZnLT50eF9seF90eF9iYW5kW2ldKTsKKwkJREJHKCJ0eF9s JWRfdHhfZHJ2X2x2bCA9IDB4JXgiLCBpLCBjZmctPnR4X2x4X3R4X2Rydl9sdmxbaV0pOworCQlE QkcoInR4X2wlZF90eF9lbXBfcG9zdDFfbHZsID0gMHgleCIsIGksCisJCSAgICBjZmctPnR4X2x4 X3R4X2VtcF9wb3N0MV9sdmxbaV0pOworCQlEQkcoInR4X2wlZF92bW9kZV9jdHJsMSA9IDB4JXgi LCBpLCBjZmctPnR4X2x4X3Ztb2RlX2N0cmwxW2ldKTsKKwkJREJHKCJ0eF9sJWRfdm1vZGVfY3Ry bDIgPSAweCV4IiwgaSwgY2ZnLT50eF9seF92bW9kZV9jdHJsMltpXSk7CisJfQorCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgaGRtaV84OTk2X3BsbF9zZXRfY2xrX3JhdGUoc3RydWN0IGNs a19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHBh cmVudF9yYXRlKQoreworCXN0cnVjdCBoZG1pX3BsbF84OTk2ICpwbGwgPSBod19jbGtfdG9fcGxs KGh3KTsKKwlzdHJ1Y3QgaGRtaV9waHkgKnBoeSA9IHBsbF9nZXRfcGh5KHBsbCk7CisJc3RydWN0 IGhkbWlfODk5Nl9waHlfcGxsX3JlZ19jZmcgY2ZnOworCWludCBpLCByZXQ7CisKKwltZW1zZXQo JmNmZywgMHgwMCwgc2l6ZW9mKGNmZykpOworCisJcmV0ID0gcGxsX2NhbGN1bGF0ZShyYXRlLCBw YXJlbnRfcmF0ZSwgJmNmZyk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIlBMTCBjYWxjdWxh dGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEluaXRpYWxseSBzaHV0 IGRvd24gUEhZICovCisJREJHKCJEaXNhYmxpbmcgUEhZIik7CisJaGRtaV9waHlfd3JpdGUocGh5 LCBSRUdfSERNSV84OTk2X1BIWV9QRF9DVEwsIDB4MCk7CisJdWRlbGF5KDUwMCk7CisKKwkvKiBQ b3dlciB1cCBzZXF1ZW5jZSAqLworCWhkbWlfcGxsX3dyaXRlKHBsbCwgUkVHX0hETUlfUEhZX1FT RVJERVNfQ09NX0JHX0NUUkwsIDB4MDQpOworCisJaGRtaV9waHlfd3JpdGUocGh5LCBSRUdfSERN SV84OTk2X1BIWV9QRF9DVEwsIDB4MSk7CisJaGRtaV9wbGxfd3JpdGUocGxsLCBSRUdfSERNSV9Q SFlfUVNFUkRFU19DT01fUkVTRVRTTV9DTlRSTCwgMHgyMCk7CisJaGRtaV9waHlfd3JpdGUocGh5 LCBSRUdfSERNSV84OTk2X1BIWV9UWDBfVFgxX0xBTkVfQ1RMLCAweDBGKTsKKwloZG1pX3BoeV93 cml0ZShwaHksIFJFR19IRE1JXzg5OTZfUEhZX1RYMl9UWDNfTEFORV9DVEwsIDB4MEYpOworCisJ Zm9yIChpID0gMDsgaSA8IEhETUlfTlVNX1RYX0NIQU5ORUw7IGkrKykgeworCQloZG1pX3R4X2No YW5fd3JpdGUocGxsLCBpLAorCQkJCSAgIFJFR19IRE1JX1BIWV9RU0VSREVTX1RYX0xYX0NMS0JV Rl9FTkFCTEUsCisJCQkJICAgMHgwMyk7CisJCWhkbWlfdHhfY2hhbl93cml0ZShwbGwsIGksCisJ CQkJICAgUkVHX0hETUlfUEhZX1FTRVJERVNfVFhfTFhfVFhfQkFORCwKKwkJCQkgICBjZmcudHhf bHhfdHhfYmFuZFtpXSk7CisJCWhkbWlfdHhfY2hhbl93cml0ZShwbGwsIGksCisJCQkJICAgUkVH X0hETUlfUEhZX1FTRVJERVNfVFhfTFhfUkVTRVRfVFNZTkNfRU4sCisJCQkJICAgMHgwMyk7CisJ fQorCisJaGRtaV90eF9jaGFuX3dyaXRlKHBsbCwgMCwgUkVHX0hETUlfUEhZX1FTRVJERVNfVFhf TFhfTEFORV9NT0RFLAorCQkJICAgY2ZnLnR4X2x4X2xhbmVfbW9kZVswXSk7CisJaGRtaV90eF9j aGFuX3dyaXRlKHBsbCwgMiwgUkVHX0hETUlfUEhZX1FTRVJERVNfVFhfTFhfTEFORV9NT0RFLAor CQkJICAgY2ZnLnR4X2x4X2xhbmVfbW9kZVsyXSk7CisKKwloZG1pX3BsbF93cml0ZShwbGwsIFJF R19IRE1JX1BIWV9RU0VSREVTX0NPTV9TWVNDTEtfQlVGX0VOQUJMRSwgMHgxRSk7CisJaGRtaV9w bGxfd3JpdGUocGxsLCBSRUdfSERNSV9QSFlfUVNFUkRFU19DT01fQklBU19FTl9DTEtCVUZMUl9F TiwgMHgwNyk7CisJaGRtaV9wbGxfd3JpdGUocGxsLCBSRUdfSERNSV9QSFlfUVNFUkRFU19DT01f U1lTQ0xLX0VOX1NFTCwgMHgzNyk7CisJaGRtaV9wbGxfd3JpdGUocGxsLCBSRUdfSERNSV9QSFlf UVNFUkRFU19DT01fU1lTX0NMS19DVFJMLCAweDAyKTsKKwloZG1pX3BsbF93cml0ZShwbGwsIFJF R19IRE1JX1BIWV9RU0VSREVTX0NPTV9DTEtfRU5BQkxFMSwgMHgwRSk7CisKKwkvKiBCeXBhc3Mg VkNPIGNhbGlicmF0aW9uICovCisJaGRtaV9wbGxfd3JpdGUocGxsLCBSRUdfSERNSV9QSFlfUVNF UkRFU19DT01fU1ZTX01PREVfQ0xLX1NFTCwKKwkJICAgICAgIGNmZy5jb21fc3ZzX21vZGVfY2xr X3NlbCk7CisKKwloZG1pX3BsbF93cml0ZShwbGwsIFJFR19IRE1JX1BIWV9RU0VSREVTX0NPTV9C R19UUklNLCAweDBGKTsKKwloZG1pX3BsbF93cml0ZShwbGwsIFJFR19IRE1JX1BIWV9RU0VSREVT X0NPTV9QTExfSVZDTywgMHgwRik7CisJaGRtaV9wbGxfd3JpdGUocGxsLCBSRUdfSERNSV9QSFlf UVNFUkRFU19DT01fVkNPX1RVTkVfQ1RSTCwKKwkJICAgICAgIGNmZy5jb21fdmNvX3R1bmVfY3Ry bCk7CisKKwloZG1pX3BsbF93cml0ZShwbGwsIFJFR19IRE1JX1BIWV9RU0VSREVTX0NPTV9CR19D VFJMLCAweDA2KTsKKworCWhkbWlfcGxsX3dyaXRlKHBsbCwgUkVHX0hETUlfUEhZX1FTRVJERVNf Q09NX0NMS19TRUxFQ1QsIDB4MzApOworCWhkbWlfcGxsX3dyaXRlKHBsbCwgUkVHX0hETUlfUEhZ X1FTRVJERVNfQ09NX0hTQ0xLX1NFTCwKKwkJICAgICAgIGNmZy5jb21faHNjbGtfc2VsKTsKKwlo ZG1pX3BsbF93cml0ZShwbGwsIFJFR19IRE1JX1BIWV9RU0VSREVTX0NPTV9MT0NLX0NNUF9FTiwK KwkJICAgICAgIGNmZy5jb21fbG9ja19jbXBfZW4pOworCisJaGRtaV9wbGxfd3JpdGUocGxsLCBS RUdfSERNSV9QSFlfUVNFUkRFU19DT01fUExMX0NDVFJMX01PREUwLAorCQkgICAgICAgY2ZnLmNv bV9wbGxfY2N0cmxfbW9kZTApOworCWhkbWlfcGxsX3dyaXRlKHBsbCwgUkVHX0hETUlfUEhZX1FT RVJERVNfQ09NX1BMTF9SQ1RSTF9NT0RFMCwKKwkJICAgICAgIGNmZy5jb21fcGxsX3JjdHJsX21v ZGUwKTsKKwloZG1pX3BsbF93cml0ZShwbGwsIFJFR19IRE1JX1BIWV9RU0VSREVTX0NPTV9DUF9D VFJMX01PREUwLAorCQkgICAgICAgY2ZnLmNvbV9jcF9jdHJsX21vZGUwKTsKKwloZG1pX3BsbF93 cml0ZShwbGwsIFJFR19IRE1JX1BIWV9RU0VSREVTX0NPTV9ERUNfU1RBUlRfTU9ERTAsCisJCSAg ICAgICBjZmcuY29tX2RlY19zdGFydF9tb2RlMCk7CisJaGRtaV9wbGxfd3JpdGUocGxsLCBSRUdf SERNSV9QSFlfUVNFUkRFU19DT01fRElWX0ZSQUNfU1RBUlQxX01PREUwLAorCQkgICAgICAgY2Zn LmNvbV9kaXZfZnJhY19zdGFydDFfbW9kZTApOworCWhkbWlfcGxsX3dyaXRlKHBsbCwgUkVHX0hE TUlfUEhZX1FTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUMl9NT0RFMCwKKwkJICAgICAgIGNmZy5j b21fZGl2X2ZyYWNfc3RhcnQyX21vZGUwKTsKKwloZG1pX3BsbF93cml0ZShwbGwsIFJFR19IRE1J X1BIWV9RU0VSREVTX0NPTV9ESVZfRlJBQ19TVEFSVDNfTU9ERTAsCisJCSAgICAgICBjZmcuY29t X2Rpdl9mcmFjX3N0YXJ0M19tb2RlMCk7CisKKwloZG1pX3BsbF93cml0ZShwbGwsIFJFR19IRE1J X1BIWV9RU0VSREVTX0NPTV9JTlRFR0xPT1BfR0FJTjBfTU9ERTAsCisJCSAgICAgICBjZmcuY29t X2ludGVnbG9vcF9nYWluMF9tb2RlMCk7CisJaGRtaV9wbGxfd3JpdGUocGxsLCBSRUdfSERNSV9Q SFlfUVNFUkRFU19DT01fSU5URUdMT09QX0dBSU4xX01PREUwLAorCQkgICAgICAgY2ZnLmNvbV9p bnRlZ2xvb3BfZ2FpbjFfbW9kZTApOworCisJaGRtaV9wbGxfd3JpdGUocGxsLCBSRUdfSERNSV9Q SFlfUVNFUkRFU19DT01fTE9DS19DTVAxX01PREUwLAorCQkgICAgICAgY2ZnLmNvbV9sb2NrX2Nt cDFfbW9kZTApOworCWhkbWlfcGxsX3dyaXRlKHBsbCwgUkVHX0hETUlfUEhZX1FTRVJERVNfQ09N X0xPQ0tfQ01QMl9NT0RFMCwKKwkJICAgICAgIGNmZy5jb21fbG9ja19jbXAyX21vZGUwKTsKKwlo ZG1pX3BsbF93cml0ZShwbGwsIFJFR19IRE1JX1BIWV9RU0VSREVTX0NPTV9MT0NLX0NNUDNfTU9E RTAsCisJCSAgICAgICBjZmcuY29tX2xvY2tfY21wM19tb2RlMCk7CisKKwloZG1pX3BsbF93cml0 ZShwbGwsIFJFR19IRE1JX1BIWV9RU0VSREVTX0NPTV9WQ09fVFVORV9NQVAsIDB4MDApOworCWhk bWlfcGxsX3dyaXRlKHBsbCwgUkVHX0hETUlfUEhZX1FTRVJERVNfQ09NX0NPUkVfQ0xLX0VOLAor CQkgICAgICAgY2ZnLmNvbV9jb3JlX2Nsa19lbik7CisJaGRtaV9wbGxfd3JpdGUocGxsLCBSRUdf SERNSV9QSFlfUVNFUkRFU19DT01fQ09SRUNMS19ESVYsCisJCSAgICAgICBjZmcuY29tX2NvcmVj bGtfZGl2KTsKKwloZG1pX3BsbF93cml0ZShwbGwsIFJFR19IRE1JX1BIWV9RU0VSREVTX0NPTV9D TU5fQ09ORklHLCAweDAyKTsKKworCWhkbWlfcGxsX3dyaXRlKHBsbCwgUkVHX0hETUlfUEhZX1FT RVJERVNfQ09NX1JFU0NPREVfRElWX05VTSwgMHgxNSk7CisKKwkvKiBUWCBsYW5lcyBzZXR1cCAo VFggMC8xLzIvMykgKi8KKwlmb3IgKGkgPSAwOyBpIDwgSERNSV9OVU1fVFhfQ0hBTk5FTDsgaSsr KSB7CisJCWhkbWlfdHhfY2hhbl93cml0ZShwbGwsIGksCisJCQkJICAgUkVHX0hETUlfUEhZX1FT RVJERVNfVFhfTFhfVFhfRFJWX0xWTCwKKwkJCQkgICBjZmcudHhfbHhfdHhfZHJ2X2x2bFtpXSk7 CisJCWhkbWlfdHhfY2hhbl93cml0ZShwbGwsIGksCisJCQkJICAgUkVHX0hETUlfUEhZX1FTRVJE RVNfVFhfTFhfVFhfRU1QX1BPU1QxX0xWTCwKKwkJCQkgICBjZmcudHhfbHhfdHhfZW1wX3Bvc3Qx X2x2bFtpXSk7CisJCWhkbWlfdHhfY2hhbl93cml0ZShwbGwsIGksCisJCQkJICAgUkVHX0hETUlf UEhZX1FTRVJERVNfVFhfTFhfVk1PREVfQ1RSTDEsCisJCQkJICAgY2ZnLnR4X2x4X3Ztb2RlX2N0 cmwxW2ldKTsKKwkJaGRtaV90eF9jaGFuX3dyaXRlKHBsbCwgaSwKKwkJCQkgICBSRUdfSERNSV9Q SFlfUVNFUkRFU19UWF9MWF9WTU9ERV9DVFJMMiwKKwkJCQkgICBjZmcudHhfbHhfdm1vZGVfY3Ry bDJbaV0pOworCQloZG1pX3R4X2NoYW5fd3JpdGUocGxsLCBpLAorCQkJCSAgIFJFR19IRE1JX1BI WV9RU0VSREVTX1RYX0xYX1RYX0RSVl9MVkxfT0ZGU0VULAorCQkJCSAgIDB4MDApOworCQloZG1p X3R4X2NoYW5fd3JpdGUocGxsLCBpLAorCQkJUkVHX0hETUlfUEhZX1FTRVJERVNfVFhfTFhfUkVT X0NPREVfTEFORV9PRkZTRVQsCisJCQkweDAwKTsKKwkJaGRtaV90eF9jaGFuX3dyaXRlKHBsbCwg aSwKKwkJCVJFR19IRE1JX1BIWV9RU0VSREVTX1RYX0xYX1RSQU5fRFJWUl9FTVBfRU4sCisJCQkw eDAzKTsKKwkJaGRtaV90eF9jaGFuX3dyaXRlKHBsbCwgaSwKKwkJCVJFR19IRE1JX1BIWV9RU0VS REVTX1RYX0xYX1BBUlJBVEVfUkVDX0RFVEVDVF9JRExFX0VOLAorCQkJMHg0MCk7CisJCWhkbWlf dHhfY2hhbl93cml0ZShwbGwsIGksCisJCQkJICAgUkVHX0hETUlfUEhZX1FTRVJERVNfVFhfTFhf SFBfUERfRU5BQkxFUywKKwkJCQkgICBjZmcudHhfbHhfaHBfcGRfZW5hYmxlc1tpXSk7CisJfQor CisJaGRtaV9waHlfd3JpdGUocGh5LCBSRUdfSERNSV84OTk2X1BIWV9NT0RFLCBjZmcucGh5X21v ZGUpOworCWhkbWlfcGh5X3dyaXRlKHBoeSwgUkVHX0hETUlfODk5Nl9QSFlfUERfQ1RMLCAweDFG KTsKKworCS8qCisJICogRW5zdXJlIHRoYXQgdmNvIGNvbmZpZ3VyYXRpb24gZ2V0cyBmbHVzaGVk IHRvIGhhcmR3YXJlIGJlZm9yZQorCSAqIGVuYWJsaW5nIHRoZSBQTEwKKwkgKi8KKwl3bWIoKTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhkbWlfODk5Nl9waHlfcmVhZHlfc3RhdHVz KHN0cnVjdCBoZG1pX3BoeSAqcGh5KQoreworCXUzMiBuYl90cmllcyA9IEhETUlfUExMX1BPTExf TUFYX1JFQURTOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IEhETUlfUExMX1BPTExfVElNRU9V VF9VUzsKKwl1MzIgc3RhdHVzOworCWludCBwaHlfcmVhZHkgPSAwOworCisJREJHKCJXYWl0aW5n IGZvciBQSFkgcmVhZHkiKTsKKworCXdoaWxlIChuYl90cmllcy0tKSB7CisJCXN0YXR1cyA9IGhk bWlfcGh5X3JlYWQocGh5LCBSRUdfSERNSV84OTk2X1BIWV9TVEFUVVMpOworCQlwaHlfcmVhZHkg PSBzdGF0dXMgJiBCSVQoMCk7CisKKwkJaWYgKHBoeV9yZWFkeSkKKwkJCWJyZWFrOworCisJCXVk ZWxheSh0aW1lb3V0KTsKKwl9CisKKwlEQkcoIlBIWSBpcyAlc3JlYWR5IiwgcGh5X3JlYWR5ID8g IiIgOiAiKm5vdCogIik7CisKKwlyZXR1cm4gcGh5X3JlYWR5OworfQorCitzdGF0aWMgaW50IGhk bWlfODk5Nl9wbGxfbG9ja19zdGF0dXMoc3RydWN0IGhkbWlfcGxsXzg5OTYgKnBsbCkKK3sKKwl1 MzIgc3RhdHVzOworCWludCBuYl90cmllcyA9IEhETUlfUExMX1BPTExfTUFYX1JFQURTOworCXVu c2lnbmVkIGxvbmcgdGltZW91dCA9IEhETUlfUExMX1BPTExfVElNRU9VVF9VUzsKKwlpbnQgcGxs X2xvY2tlZCA9IDA7CisKKwlEQkcoIldhaXRpbmcgZm9yIFBMTCBsb2NrIik7CisKKwl3aGlsZSAo bmJfdHJpZXMtLSkgeworCQlzdGF0dXMgPSBoZG1pX3BsbF9yZWFkKHBsbCwKKwkJCQkgICAgICAg UkVHX0hETUlfUEhZX1FTRVJERVNfQ09NX0NfUkVBRFlfU1RBVFVTKTsKKwkJcGxsX2xvY2tlZCA9 IHN0YXR1cyAmIEJJVCgwKTsKKworCQlpZiAocGxsX2xvY2tlZCkKKwkJCWJyZWFrOworCisJCXVk ZWxheSh0aW1lb3V0KTsKKwl9CisKKwlEQkcoIkhETUkgUExMIGlzICVzbG9ja2VkIiwgcGxsX2xv Y2tlZCA/ICIiIDogIipub3QqICIpOworCisJcmV0dXJuIHBsbF9sb2NrZWQ7Cit9CisKK3N0YXRp YyBpbnQgaGRtaV84OTk2X3BsbF9wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXN0cnVj dCBoZG1pX3BsbF84OTk2ICpwbGwgPSBod19jbGtfdG9fcGxsKGh3KTsKKwlzdHJ1Y3QgaGRtaV9w aHkgKnBoeSA9IHBsbF9nZXRfcGh5KHBsbCk7CisJaW50IGksIHJldCA9IDA7CisKKwloZG1pX3Bo eV93cml0ZShwaHksIFJFR19IRE1JXzg5OTZfUEhZX0NGRywgMHgxKTsKKwl1ZGVsYXkoMTAwKTsK KworCWhkbWlfcGh5X3dyaXRlKHBoeSwgUkVHX0hETUlfODk5Nl9QSFlfQ0ZHLCAweDE5KTsKKwl1 ZGVsYXkoMTAwKTsKKworCXJldCA9IGhkbWlfODk5Nl9wbGxfbG9ja19zdGF0dXMocGxsKTsKKwlp ZiAoIXJldCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBIRE1JX05VTV9UWF9D SEFOTkVMOyBpKyspCisJCWhkbWlfdHhfY2hhbl93cml0ZShwbGwsIGksCisJCQlSRUdfSERNSV9Q SFlfUVNFUkRFU19UWF9MWF9ISUdIWl9UUkFOU0NFSVZFUkVOX0JJQVNfRFJWUl9FTiwKKwkJCTB4 NkYpOworCisJLyogRGlzYWJsZSBTU0MgKi8KKwloZG1pX3BsbF93cml0ZShwbGwsIFJFR19IRE1J X1BIWV9RU0VSREVTX0NPTV9TU0NfUEVSMSwgMHgwKTsKKwloZG1pX3BsbF93cml0ZShwbGwsIFJF R19IRE1JX1BIWV9RU0VSREVTX0NPTV9TU0NfUEVSMiwgMHgwKTsKKwloZG1pX3BsbF93cml0ZShw bGwsIFJFR19IRE1JX1BIWV9RU0VSREVTX0NPTV9TU0NfU1RFUF9TSVpFMSwgMHgwKTsKKwloZG1p X3BsbF93cml0ZShwbGwsIFJFR19IRE1JX1BIWV9RU0VSREVTX0NPTV9TU0NfU1RFUF9TSVpFMiwg MHgwKTsKKwloZG1pX3BsbF93cml0ZShwbGwsIFJFR19IRE1JX1BIWV9RU0VSREVTX0NPTV9TU0Nf RU5fQ0VOVEVSLCAweDIpOworCisJcmV0ID0gaGRtaV84OTk2X3BoeV9yZWFkeV9zdGF0dXMocGh5 KTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFJlc3RhcnQgdGhlIHJldGltaW5n IGJ1ZmZlciAqLworCWhkbWlfcGh5X3dyaXRlKHBoeSwgUkVHX0hETUlfODk5Nl9QSFlfQ0ZHLCAw eDE4KTsKKwl1ZGVsYXkoMSk7CisJaGRtaV9waHlfd3JpdGUocGh5LCBSRUdfSERNSV84OTk2X1BI WV9DRkcsIDB4MTkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIGhkbWlfODk5Nl9w bGxfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcg cmF0ZSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgKnBhcmVudF9yYXRlKQoreworCWlmIChyYXRl IDwgSERNSV9QQ0xLX01JTl9GUkVRKQorCQlyZXR1cm4gSERNSV9QQ0xLX01JTl9GUkVROworCWVs c2UgaWYgKHJhdGUgPiBIRE1JX1BDTEtfTUFYX0ZSRVEpCisJCXJldHVybiBIRE1JX1BDTEtfTUFY X0ZSRVE7CisJZWxzZQorCQlyZXR1cm4gcmF0ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcg aGRtaV84OTk2X3BsbF9yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQkJICAgICAg IHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IGhkbWlfcGxsXzg5OTYgKnBs bCA9IGh3X2Nsa190b19wbGwoaHcpOworCXU2NCBmZGF0YTsKKwl1MzIgY21wMSwgY21wMiwgY21w MywgcGxsX2NtcDsKKworCWNtcDEgPSBoZG1pX3BsbF9yZWFkKHBsbCwgUkVHX0hETUlfUEhZX1FT RVJERVNfQ09NX0xPQ0tfQ01QMV9NT0RFMCk7CisJY21wMiA9IGhkbWlfcGxsX3JlYWQocGxsLCBS RUdfSERNSV9QSFlfUVNFUkRFU19DT01fTE9DS19DTVAyX01PREUwKTsKKwljbXAzID0gaGRtaV9w bGxfcmVhZChwbGwsIFJFR19IRE1JX1BIWV9RU0VSREVTX0NPTV9MT0NLX0NNUDNfTU9ERTApOwor CisJcGxsX2NtcCA9IGNtcDEgfCAoY21wMiA8PCA4KSB8IChjbXAzIDw8IDE2KTsKKworCWZkYXRh ID0gcGxsX2NtcF90b19mZGF0YShwbGxfY21wICsgMSwgcGFyZW50X3JhdGUpOworCisJZG9fZGl2 KGZkYXRhLCAxMCk7CisKKwlyZXR1cm4gZmRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGhkbWlfODk5 Nl9wbGxfdW5wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQoreworfQorCitzdGF0aWMgaW50IGhk bWlfODk5Nl9wbGxfaXNfZW5hYmxlZChzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgaGRt aV9wbGxfODk5NiAqcGxsID0gaHdfY2xrX3RvX3BsbChodyk7CisJdTMyIHN0YXR1czsKKwlpbnQg cGxsX2xvY2tlZDsKKworCXN0YXR1cyA9IGhkbWlfcGxsX3JlYWQocGxsLCBSRUdfSERNSV9QSFlf UVNFUkRFU19DT01fQ19SRUFEWV9TVEFUVVMpOworCXBsbF9sb2NrZWQgPSBzdGF0dXMgJiBCSVQo MCk7CisKKwlyZXR1cm4gcGxsX2xvY2tlZDsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIGhk bWlfODk5Nl9wbGxfb3BzID0geworCS5zZXRfcmF0ZSA9IGhkbWlfODk5Nl9wbGxfc2V0X2Nsa19y YXRlLAorCS5yb3VuZF9yYXRlID0gaGRtaV84OTk2X3BsbF9yb3VuZF9yYXRlLAorCS5yZWNhbGNf cmF0ZSA9IGhkbWlfODk5Nl9wbGxfcmVjYWxjX3JhdGUsCisJLnByZXBhcmUgPSBoZG1pXzg5OTZf cGxsX3ByZXBhcmUsCisJLnVucHJlcGFyZSA9IGhkbWlfODk5Nl9wbGxfdW5wcmVwYXJlLAorCS5p c19lbmFibGVkID0gaGRtaV84OTk2X3BsbF9pc19lbmFibGVkLAorfTsKKworc3RhdGljIGNvbnN0 IGNoYXIgKiBjb25zdCBoZG1pX3BsbF9wYXJlbnRzW10gPSB7CisJInhvIiwKK307CisKK3N0YXRp YyBzdHJ1Y3QgY2xrX2luaXRfZGF0YSBwbGxfaW5pdCA9IHsKKwkubmFtZSA9ICJoZG1pcGxsIiwK Kwkub3BzID0gJmhkbWlfODk5Nl9wbGxfb3BzLAorCS5wYXJlbnRfbmFtZXMgPSBoZG1pX3BsbF9w YXJlbnRzLAorCS5udW1fcGFyZW50cyA9IEFSUkFZX1NJWkUoaGRtaV9wbGxfcGFyZW50cyksCit9 OworCitpbnQgaGRtaV9wbGxfODk5Nl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgaGRtaV9wbGxf ODk5NiAqcGxsOworCXN0cnVjdCBjbGsgKmNsazsKKwlpbnQgaTsKKworCXBsbCA9IGRldm1fa3ph bGxvYyhkZXYsIHNpemVvZigqcGxsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbGwpCisJCXJldHVy biAtRU5PTUVNOworCisJcGxsLT5wZGV2ID0gcGRldjsKKworCXBsbC0+bW1pb19xc2VyZGVzX2Nv bSA9IG1zbV9pb3JlbWFwKHBkZXYsICJoZG1pX3BsbCIsICJIRE1JX1BMTCIpOworCWlmIChJU19F UlIocGxsLT5tbWlvX3FzZXJkZXNfY29tKSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBt YXAgcGxsIGJhc2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmb3IgKGkgPSAwOyBp IDwgSERNSV9OVU1fVFhfQ0hBTk5FTDsgaSsrKSB7CisJCWNoYXIgbmFtZVszMl0sIGxhYmVsWzMy XTsKKworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJoZG1pX3R4X2wlZCIsIGkpOwor CQlzbnByaW50ZihsYWJlbCwgc2l6ZW9mKGxhYmVsKSwgIkhETUlfVFhfTCVkIiwgaSk7CisKKwkJ cGxsLT5tbWlvX3FzZXJkZXNfdHhbaV0gPSBtc21faW9yZW1hcChwZGV2LCBuYW1lLCBsYWJlbCk7 CisJCWlmIChJU19FUlIocGxsLT5tbWlvX3FzZXJkZXNfdHhbaV0pKSB7CisJCQlkZXZfZXJyKGRl diwgImZhaWxlZCB0byBtYXAgcGxsIGJhc2VcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0K Kwl9CisJcGxsLT5jbGtfaHcuaW5pdCA9ICZwbGxfaW5pdDsKKworCWNsayA9IGRldm1fY2xrX3Jl Z2lzdGVyKGRldiwgJnBsbC0+Y2xrX2h3KTsKKwlpZiAoSVNfRVJSKGNsaykpIHsKKwkJZGV2X2Vy cihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgcGxsIGNsb2NrXG4iKTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaGRt aV9waHlfODk5Nl9yZWdfbmFtZXNbXSA9IHsKKwkidmRkaW8iLAorCSJ2Y2NhIiwKK307CisKK3N0 YXRpYyBjb25zdCBjaGFyICogY29uc3QgaGRtaV9waHlfODk5Nl9jbGtfbmFtZXNbXSA9IHsKKwki bW1hZ2ljX2lmYWNlX2NsayIsCisJImlmYWNlX2NsayIsCisJInJlZl9jbGsiLAorfTsKKworY29u c3Qgc3RydWN0IGhkbWlfcGh5X2NmZyBoZG1pX3BoeV84OTk2X2NmZyA9IHsKKwkudHlwZSA9IE1T TV9IRE1JX1BIWV84OTk2LAorCS5yZWdfbmFtZXMgPSBoZG1pX3BoeV84OTk2X3JlZ19uYW1lcywK KwkubnVtX3JlZ3MgPSBBUlJBWV9TSVpFKGhkbWlfcGh5Xzg5OTZfcmVnX25hbWVzKSwKKwkuY2xr X25hbWVzID0gaGRtaV9waHlfODk5Nl9jbGtfbmFtZXMsCisJLm51bV9jbGtzID0gQVJSQVlfU0la RShoZG1pX3BoeV84OTk2X2Nsa19uYW1lcyksCit9OwotLSAKVGhlIFF1YWxjb21tIElubm92YXRp b24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwKaG9z dGVkIGJ5IFRoZSBMaW51eCBGb3VuZGF0aW9uCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWwK