From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v8 06/13] drm/mediatek: Add HDMI support Date: Mon, 4 Jan 2016 18:36:38 +0100 Message-ID: <1451929005-16372-7-git-send-email-p.zabel@pengutronix.de> References: <1451929005-16372-1-git-send-email-p.zabel@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1451929005-16372-1-git-send-email-p.zabel@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Mark Rutland , Michael Turquette , Jie Qiu , Cawa Cheng , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Stephen Boyd , Tomasz Figa , Kumar Gala List-Id: devicetree@vger.kernel.org RnJvbTogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CgpUaGlzIHBhdGNoIGFkZHMgZHJp dmVycyBmb3IgdGhlIEhETUkgYnJpZGdlIGNvbm5lY3RlZCB0byB0aGUgRFBJMApkaXNwbGF5IHN1 YnN5c3RlbSBmdW5jdGlvbiBibG9jaywgZm9yIHRoZSBIRE1JIEREQyBibG9jaywgYW5kIGZvcgp0 aGUgSERNSSBQSFkgdG8gc3VwcG9ydCBIRE1JIG91dHB1dC4KClNpZ25lZC1vZmYtYnk6IEppZSBR aXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgpTaWduZWQtb2ZmLWJ5OiBQaGlsaXBwIFphYmVsIDxw LnphYmVsQHBlbmd1dHJvbml4LmRlPgotLS0KQ2hhbmdlcyBzaW5jZSB2NzoKIC0gRmlsbCBFTEQg aW5mbwogLSBGaXggZXJyb3IgbWVzc2FnZXMKIC0gUmVwbGFjZSBocGRfZXZlbnRfZGF0YSB3aXRo IHRoZSBoZG1pIGVuY29kZXIgZGV2aWNlCiAtIFJlbmFtZSBNVDgxNzMgc3BlY2lmaWMgSERNSSBQ SFkgZHJpdmVyLCBNVDI3MDEgaGFzIGEgZGlmZmVyZW50IFBIWS4KIC0gUmVnaXN0ZXIgdGhlIFBM TCBpbiB0aGUgSERNSSBQSFkgbW9kdWxlIHdpdGggdGhlIGNvbW1vbiBjbG9jayBmcmFtZXdvcmsu CiAgIEl0cyBvdXRwdXQgaGRtaXR4X2RpZ19jdHMgaXMgcm91dGVkIGJhY2sgaW50byB0aGUgVE9Q IGNsb2NrIG1vZHVsZS4KIC0gRm9sZCBjb250ZW50cyBvZiBwdWJsaWMgbXRrX2hkbWlfYXVkaW8u aCBoZWFkZXIgaW50byBwcml2YXRlIG10a19oZG1pLmgKICAgaGVhZGVyLgotLS0KIGRyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9LY29uZmlnICAgICAgICAgICAgICAgfCAgIDcgKwogZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL01ha2VmaWxlICAgICAgICAgICAgICB8ICAgOSArCiBkcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5jICAgICAgICAgICAgIHwgMjQ1ICsrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5oICAgICAgICAgICAgIHwgIDI1ICsKIGRyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jICAgICAgICAgfCAgIDEgKwogZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1faGRtaV9kcnYuYyAgICB8IDYxMCArKysrKysrKysr KysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmMgICAgICAgICAg ICB8IDQ4MiArKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hk bWkuaCAgICAgICAgICAgIHwgMjMxICsrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2hkbWlfZGRjX2Rydi5jICAgIHwgMzYyICsrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19oZG1pX2h3LmMgICAgICAgICB8IDc1NyArKysrKysrKysrKysrKysrKysr KysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfaHcuaCAgICAgICAgIHwg IDc2ICsrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3JlZ3MuaCAgICAgICB8 IDIyMSArKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19tdDgxNzNfaGRtaV9w aHkuYyB8IDUwNiArKysrKysrKysrKysrKysrKwogMTMgZmlsZXMgY2hhbmdlZCwgMzUzMiBpbnNl cnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19jZWMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf Y2VjLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9oZG1pX2Rydi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19oZG1pLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2hkbWkuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfaGRtaV9kZGNfZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2hkbWlfaHcuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfaGRtaV9ody5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19oZG1pX3JlZ3MuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfbXQ4MTczX2hkbWlfcGh5LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29u ZmlnCmluZGV4IGI3ZTA0MDQuLjgyOWFiNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCkBA IC0xMywzICsxMywxMCBAQCBjb25maWcgRFJNX01FRElBVEVLCiAJICBUaGUgbW9kdWxlIHdpbGwg YmUgY2FsbGVkIG1lZGlhdGVrLWRybQogCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMga2VybmVsIG1v ZGUgc2V0dGluZyBhbmQKIAkgIGJ1ZmZlciBtYW5hZ2VtZW50IHRvIHVzZXJzcGFjZS4KKworY29u ZmlnIERSTV9NRURJQVRFS19IRE1JCisJdHJpc3RhdGUgIkRSTSBIRE1JIFN1cHBvcnQgZm9yIE1l ZGlhdGVrIFNvQ3MiCisJZGVwZW5kcyBvbiBEUk1fTUVESUFURUsKKwlzZWxlY3QgR0VORVJJQ19Q SFkKKwloZWxwCisJICBEUk0vS01TIEhETUkgZHJpdmVyIGZvciBNZWRpYXRlayBTb0NzCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvTWFrZWZpbGUKaW5kZXggMjE4MDcxYy4uMmE4MWVlYiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9NYWtlZmlsZQpAQCAtMTEsMyArMTEsMTIgQEAgbWVkaWF0ZWstZHJtLXkgOj0gbXRr X2Rpc3Bfb3ZsLm8gXAogCQkgIG10a19kcGkubwogCiBvYmotJChDT05GSUdfRFJNX01FRElBVEVL KSArPSBtZWRpYXRlay1kcm0ubworCittZWRpYXRlay1kcm0taGRtaS1vYmpzIDo9IG10a19jZWMu byBcCisJCQkgIG10a19kcm1faGRtaV9kcnYubyBcCisJCQkgIG10a19oZG1pLm8gXAorCQkJICBt dGtfaGRtaV9kZGNfZHJ2Lm8gXAorCQkJICBtdGtfaGRtaV9ody5vIFwKKwkJCSAgbXRrX210ODE3 M19oZG1pX3BoeS5vCisKK29iai0kKENPTkZJR19EUk1fTUVESUFURUtfSERNSSkgKz0gbWVkaWF0 ZWstZHJtLWhkbWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19j ZWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhMzY0NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmMKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1 QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxh eS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+ CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJtdGtfY2Vj LmgiCisKKyNkZWZpbmUgVFJfQ09ORklHCQkweDAwCisjZGVmaW5lIENMRUFSX0NFQ19JUlEJCQlC SVQoMTUpCisKKyNkZWZpbmUgQ0VDX0NLR0VOCQkweDA0CisjZGVmaW5lIENFQ18zMktfUEROCQkJ QklUKDE5KQorI2RlZmluZSBQRE4JCQkJQklUKDE2KQorCisjZGVmaW5lIFJYX0VWRU5UCQkweDU0 CisjZGVmaW5lIEhETUlfUE9SRAkJCUJJVCgyNSkKKyNkZWZpbmUgSERNSV9IVFBMRwkJCUJJVCgy NCkKKyNkZWZpbmUgSERNSV9QT1JEX0lOVF9FTgkJQklUKDkpCisjZGVmaW5lIEhETUlfSFRQTEdf SU5UX0VOCQlCSVQoOCkKKworI2RlZmluZSBSWF9HRU5fV0QJCTB4NTgKKyNkZWZpbmUgSERNSV9Q T1JEX0lOVF8zMktfU1RBVFVTCUJJVCgyNikKKyNkZWZpbmUgUlhfUklTQ19JTlRfMzJLX1NUQVRV UwkJQklUKDI1KQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktfU1RBVFVTCUJJVCgyNCkKKyNk ZWZpbmUgSERNSV9QT1JEX0lOVF8zMktfQ0xSCQlCSVQoMTgpCisjZGVmaW5lIFJYX0lOVF8zMktf Q0xSCQkJQklUKDE3KQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktfQ0xSCQlCSVQoMTYpCisj ZGVmaW5lIEhETUlfUE9SRF9JTlRfMzJLX1NUQV9NQVNLCUJJVCgxMCkKKyNkZWZpbmUgUlhfUklT Q19JTlRfMzJLX1NUQV9NQVNLCUJJVCg5KQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktfU1RB X01BU0sJQklUKDgpCisjZGVmaW5lIEhETUlfUE9SRF9JTlRfMzJLX0VOCQlCSVQoMikKKyNkZWZp bmUgUlhfSU5UXzMyS19FTgkJCUJJVCgxKQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktfRU4J CUJJVCgwKQorCisjZGVmaW5lIE5PUk1BTF9JTlRfQ1RSTAkJMHg1QworI2RlZmluZSBIRE1JX0hU UExHX0lOVF9TVEEJCUJJVCgwKQorI2RlZmluZSBIRE1JX1BPUkRfSU5UX1NUQQkJQklUKDEpCisj ZGVmaW5lIEhETUlfSFRQTEdfSU5UX0NMUgkJQklUKDE2KQorI2RlZmluZSBIRE1JX1BPUkRfSU5U X0NMUgkJQklUKDE3KQorI2RlZmluZSBIRE1JX0ZVTExfSU5UX0NMUgkJQklUKDIwKQorCitzdHJ1 Y3QgbXRrX2NlYyB7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBjbGsgKmNsazsKKwlp bnQgaXJxOworCWJvb2wgaHBkOworCXZvaWQgKCpocGRfZXZlbnQpKGJvb2wgaHBkLCBzdHJ1Y3Qg ZGV2aWNlICpkZXYpOworCXN0cnVjdCBkZXZpY2UgKmhkbWlfZGV2OworfTsKKworc3RhdGljIHZv aWQgbXRrX2NlY19tYXNrKHN0cnVjdCBtdGtfY2VjICpjZWMsIHVuc2lnbmVkIGludCBvZmZzZXQs CisJCQkgdW5zaWduZWQgaW50IHZhbCwgdW5zaWduZWQgaW50IG1hc2spCit7CisJdTMyIHRtcCA9 IHJlYWRsKGNlYy0+cmVncyArIG9mZnNldCkgJiB+bWFzazsKKworCXRtcCB8PSB2YWwgJiBtYXNr OworCXdyaXRlbCh2YWwsIGNlYy0+cmVncyArIG9mZnNldCk7Cit9CisKK3ZvaWQgbXRrX2NlY19z ZXRfaHBkX2V2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHZvaWQgKCpocGRfZXZlbnQp KGJvb2wgaHBkLCBzdHJ1Y3QgZGV2aWNlICpkZXYpLAorCQkJICAgc3RydWN0IGRldmljZSAqaGRt aV9kZXYpCit7CisJc3RydWN0IG10a19jZWMgKmNlYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwor CisJY2VjLT5oZG1pX2RldiA9IGhkbWlfZGV2OworCWNlYy0+aHBkX2V2ZW50ID0gaHBkX2V2ZW50 OworfQorCitib29sIG10a19jZWNfaHBkX2hpZ2goc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0 cnVjdCBtdGtfY2VjICpjZWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQg c3RhdHVzOworCisJc3RhdHVzID0gcmVhZGwoY2VjLT5yZWdzICsgUlhfRVZFTlQpOworCisJcmV0 dXJuIChzdGF0dXMgJiAoSERNSV9QT1JEIHwgSERNSV9IVFBMRykpID09IChIRE1JX1BPUkQgfCBI RE1JX0hUUExHKTsKK30KKworaW50IG10a19jZWNfaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKK3sK KwlzdHJ1Y3QgbXRrX2NlYyAqY2VjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4g Y2VjLT5pcnE7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jZWNfaHRwbGdfaXJxX2VuYWJsZShzdHJ1 Y3QgbXRrX2NlYyAqY2VjKQoreworCW10a19jZWNfbWFzayhjZWMsIENFQ19DS0dFTiwgMCwgUERO KTsKKwltdGtfY2VjX21hc2soY2VjLCBDRUNfQ0tHRU4sIENFQ18zMktfUEROLCBDRUNfMzJLX1BE Tik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCBIRE1JX1BPUkRfSU5UXzMyS19DTFIs CisJCSAgICAgSERNSV9QT1JEX0lOVF8zMktfQ0xSKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9H RU5fV0QsIFJYX0lOVF8zMktfQ0xSLCBSWF9JTlRfMzJLX0NMUik7CisJbXRrX2NlY19tYXNrKGNl YywgUlhfR0VOX1dELCBIRE1JX0hUUExHX0lOVF8zMktfQ0xSLAorCQkgICAgIEhETUlfSFRQTEdf SU5UXzMyS19DTFIpOworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgMCwgSERNSV9QT1JE X0lOVF8zMktfQ0xSKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIDAsIFJYX0lOVF8z MktfQ0xSKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIDAsIEhETUlfSFRQTEdfSU5U XzMyS19DTFIpOworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgMCwgSERNSV9QT1JEX0lO VF8zMktfRU4pOworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgMCwgUlhfSU5UXzMyS19F Tik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCAwLCBIRE1JX0hUUExHX0lOVF8zMktf RU4pOworCisJbXRrX2NlY19tYXNrKGNlYywgUlhfRVZFTlQsIEhETUlfUE9SRF9JTlRfRU4sIEhE TUlfUE9SRF9JTlRfRU4pOworCW10a19jZWNfbWFzayhjZWMsIFJYX0VWRU5ULCBIRE1JX0hUUExH X0lOVF9FTiwgSERNSV9IVFBMR19JTlRfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfY2VjX2h0 cGxnX2lycV9kaXNhYmxlKHN0cnVjdCBtdGtfY2VjICpjZWMpCit7CisJbXRrX2NlY19tYXNrKGNl YywgUlhfRVZFTlQsIDAsIEhETUlfUE9SRF9JTlRfRU4pOworCW10a19jZWNfbWFzayhjZWMsIFJY X0VWRU5ULCAwLCBIRE1JX0hUUExHX0lOVF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jZWNf Y2xlYXJfaHRwbGdfaXJxKHN0cnVjdCBtdGtfY2VjICpjZWMpCit7CisJbXRrX2NlY19tYXNrKGNl YywgVFJfQ09ORklHLCBDTEVBUl9DRUNfSVJRLCBDTEVBUl9DRUNfSVJRKTsKKwltdGtfY2VjX21h c2soY2VjLCBOT1JNQUxfSU5UX0NUUkwsIEhETUlfSFRQTEdfSU5UX0NMUiwKKwkJICAgICBIRE1J X0hUUExHX0lOVF9DTFIpOworCW10a19jZWNfbWFzayhjZWMsIE5PUk1BTF9JTlRfQ1RSTCwgSERN SV9QT1JEX0lOVF9DTFIsCisJCSAgICAgSERNSV9QT1JEX0lOVF9DTFIpOworCW10a19jZWNfbWFz ayhjZWMsIE5PUk1BTF9JTlRfQ1RSTCwgSERNSV9GVUxMX0lOVF9DTFIsCisJCSAgICAgSERNSV9G VUxMX0lOVF9DTFIpOworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgSERNSV9QT1JEX0lO VF8zMktfQ0xSLAorCQkgICAgIEhETUlfUE9SRF9JTlRfMzJLX0NMUik7CisJbXRrX2NlY19tYXNr KGNlYywgUlhfR0VOX1dELCBSWF9JTlRfMzJLX0NMUiwgUlhfSU5UXzMyS19DTFIpOworCW10a19j ZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgSERNSV9IVFBMR19JTlRfMzJLX0NMUiwKKwkJICAgICBI RE1JX0hUUExHX0lOVF8zMktfQ0xSKTsKKwl1ZGVsYXkoNSk7CisJbXRrX2NlY19tYXNrKGNlYywg Tk9STUFMX0lOVF9DVFJMLCAwLCBIRE1JX0hUUExHX0lOVF9DTFIpOworCW10a19jZWNfbWFzayhj ZWMsIE5PUk1BTF9JTlRfQ1RSTCwgMCwgSERNSV9QT1JEX0lOVF9DTFIpOworCW10a19jZWNfbWFz ayhjZWMsIFRSX0NPTkZJRywgMCwgQ0xFQVJfQ0VDX0lSUSk7CisJbXRrX2NlY19tYXNrKGNlYywg Tk9STUFMX0lOVF9DVFJMLCAwLCBIRE1JX0ZVTExfSU5UX0NMUik7CisJbXRrX2NlY19tYXNrKGNl YywgUlhfR0VOX1dELCAwLCBIRE1JX1BPUkRfSU5UXzMyS19DTFIpOworCW10a19jZWNfbWFzayhj ZWMsIFJYX0dFTl9XRCwgMCwgUlhfSU5UXzMyS19DTFIpOworCW10a19jZWNfbWFzayhjZWMsIFJY X0dFTl9XRCwgMCwgSERNSV9IVFBMR19JTlRfMzJLX0NMUik7Cit9CisKK3N0YXRpYyBpcnFyZXR1 cm5fdCBtdGtfY2VjX2h0cGxnX2lzcl90aHJlYWQoaW50IGlycSwgdm9pZCAqYXJnKQoreworCXN0 cnVjdCBkZXZpY2UgKmRldiA9IGFyZzsKKwlzdHJ1Y3QgbXRrX2NlYyAqY2VjID0gZGV2X2dldF9k cnZkYXRhKGRldik7CisJYm9vbCBocGQ7CisKKwltdGtfY2VjX2NsZWFyX2h0cGxnX2lycShjZWMp OworCWhwZCA9IG10a19jZWNfaHBkX2hpZ2goZGV2KTsKKworCWlmIChjZWMtPmhwZCAhPSBocGQp IHsKKwkJZGV2X2luZm8oZGV2LCAiaG90cGx1ZyBldmVudCEsY3VyIGhwZCA9ICVkLCBocGQgPSAl ZFxuIiwKKwkJCSBjZWMtPmhwZCwgaHBkKTsKKwkJY2VjLT5ocGQgPSBocGQ7CisJCWlmIChjZWMt PmhwZF9ldmVudCkKKwkJCWNlYy0+aHBkX2V2ZW50KGhwZCwgY2VjLT5oZG1pX2Rldik7CisJfQor CXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBtdGtfY2VjX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYt PmRldjsKKwlzdHJ1Y3QgbXRrX2NlYyAqY2VjOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWlu dCByZXQ7CisKKwljZWMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmNlYyksIEdGUF9LRVJO RUwpOworCWlmICghY2VjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZk YXRhKHBkZXYsIGNlYyk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9S RVNPVVJDRV9NRU0sIDApOworCWNlYy0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYs IHJlcyk7CisJaWYgKElTX0VSUihjZWMtPnJlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIoY2VjLT5y ZWdzKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBjZWM6ICVkXG4iLCByZXQp OworCQlyZXR1cm4gcmV0OworCX0KKworCWNlYy0+Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVM TCk7CisJaWYgKElTX0VSUihjZWMtPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihjZWMtPmNsayk7 CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBjZWMgY2xvY2s6ICVkXG4iLCByZXQpOwor CQlyZXR1cm4gcmV0OworCX0KKworCWNlYy0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAw KTsKKwlpZiAoY2VjLT5pcnEgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBj ZWMgaXJxOiAlZFxuIiwgY2VjLT5pcnEpOworCQlyZXR1cm4gY2VjLT5pcnE7CisJfQorCisJcmV0 ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIGNlYy0+aXJxLCBOVUxMLAorCQkJCQlt dGtfY2VjX2h0cGxnX2lzcl90aHJlYWQsCisJCQkJCUlSUUZfU0hBUkVEIHwgSVJRRl9UUklHR0VS X0xPVyB8CisJCQkJCUlSUUZfT05FU0hPVCwgImhkbWkgaHBkIiwgZGV2KTsKKwlpZiAocmV0KSB7 CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNlYyBpcnE6ICVkXG4iLCByZXQp OworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShjZWMtPmNs ayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgY2VjIGNs b2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltdGtfY2VjX2h0cGxnX2ly cV9lbmFibGUoY2VjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19jZWNfcmVt b3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19jZWMgKmNl YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbXRrX2NlY19odHBsZ19pcnFfZGlz YWJsZShjZWMpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShjZWMtPmNsayk7CisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19jZWNfb2ZfaWRzW10g PSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtY2VjIiwgfSwKKwl7fQorfTsK Kworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfY2VjX2RyaXZlciA9IHsKKwkucHJvYmUgPSBt dGtfY2VjX3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfY2VjX3JlbW92ZSwKKwkuZHJpdmVyID0gewor CQkubmFtZSA9ICJtZWRpYXRlay1jZWMiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfY2VjX29m X2lkcywKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf Y2VjLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNmU4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1 QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisgKi8KKyNpZm5kZWYgX01US19DRUNfSAorI2RlZmluZSBfTVRLX0NFQ19ICisKK3N0 cnVjdCBkZXZpY2U7CisKK3ZvaWQgbXRrX2NlY19zZXRfaHBkX2V2ZW50KHN0cnVjdCBkZXZpY2Ug KmRldiwKKwkJCSAgIHZvaWQgKCpob3RwbHVnX2V2ZW50KShib29sIGhwZCwgc3RydWN0IGRldmlj ZSAqZGV2KSwKKwkJCSAgIHN0cnVjdCBkZXZpY2UgKmhkbWlfZGV2KTsKK2Jvb2wgbXRrX2NlY19o cGRfaGlnaChzdHJ1Y3QgZGV2aWNlICpkZXYpOworaW50IG10a19jZWNfaXJxKHN0cnVjdCBkZXZp Y2UgKmRldik7CisKKyNlbmRpZiAvKiBfTVRLX0NFQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfZHJtX2Rydi5jCmluZGV4IDhiMzA4MmYuLmZkYjI3ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2Rydi5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgv b2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAKKyNpbmNsdWRl ICJtdGtfY2VjLmgiCiAjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCiAjaW5jbHVkZSAibXRrX2Ry bV9kZHAuaCIKICNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9oZG1pX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19kcm1faGRtaV9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi41YzFlYzk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1faGRtaV9kcnYuYwpAQCAtMCwwICsxLDYxMCBAQAorLyoKKyAqIENvcHlyaWdo dCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVk aWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqLworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNf aGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9j cnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgorI2luY2x1ZGUgPGxpbnV4 L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o PgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0 Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5o PgorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5o PgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgIm10a19jZWMu aCIKKyNpbmNsdWRlICJtdGtfaGRtaS5oIgorI2luY2x1ZGUgIm10a19oZG1pX2h3LmgiCisKK3N0 YXRpYyBjb25zdCBjaGFyICogY29uc3QgbXRrX2hkbWlfY2xrX25hbWVzW01US19IRE1JX0NMS19D T1VOVF0gPSB7CisJW01US19IRE1JX0NMS19IRE1JX1BJWEVMXSA9ICJwaXhlbCIsCisJW01US19I RE1JX0NMS19IRE1JX1BMTF0gPSAicGxsIiwKKwlbTVRLX0hETUlfQ0xLX0FVRF9CQ0xLXSA9ICJi Y2xrIiwKKwlbTVRLX0hETUlfQ0xLX0FVRF9TUERJRl0gPSAic3BkaWYiLAorfTsKKworc3RhdGlj IGNvbnN0IGVudW0gbXRrX2hkbWlfY2xrX2lkIG10a19oZG1pX2VuYWJsZV9jbG9ja3NbXSA9IHsK KwlNVEtfSERNSV9DTEtfQVVEX0JDTEssCisJTVRLX0hETUlfQ0xLX0FVRF9TUERJRiwKK307CisK K3N0YXRpYyBpbnQgbXRrX2hkbWlfZ2V0X2FsbF9jbGsoc3RydWN0IG10a19oZG1pICpoZG1pLAor CQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShtdGtfaGRtaV9jbGtfbmFtZXMpOyBpKyspIHsKKwkJaGRtaS0+Y2xrW2ld ID0gb2ZfY2xrX2dldF9ieV9uYW1lKG5wLAorCQkJCQkJICBtdGtfaGRtaV9jbGtfbmFtZXNbaV0p OworCQlpZiAoSVNfRVJSKGhkbWktPmNsa1tpXSkpCisJCQlyZXR1cm4gUFRSX0VSUihoZG1pLT5j bGtbaV0pOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9jbGtfZW5h YmxlX2F1ZGlvKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0g Y2xrX3ByZXBhcmVfZW5hYmxlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfQVVEX0JDTEtdKTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGhkbWkt PmNsa1tNVEtfSERNSV9DTEtfQVVEX1NQRElGXSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisK KwlyZXR1cm4gMDsKK2VycjoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+Y2xrW01US19I RE1JX0NMS19BVURfQkNMS10pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19o ZG1pX2Nsa19kaXNhYmxlX2F1ZGlvKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwljbGtfZGlz YWJsZV91bnByZXBhcmUoaGRtaS0+Y2xrW01US19IRE1JX0NMS19BVURfQkNMS10pOworCWNsa19k aXNhYmxlX3VucHJlcGFyZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0FVRF9TUERJRl0pOworfQor CitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBoZG1pX2Nvbm5fZGV0ZWN0KHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uLAorCQkJCQkJICBib29sIGZvcmNlKQoreworCXN0cnVjdCBt dGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsKKworCXJldHVybiBtdGtf aGRtaV9ocGRfaGlnaChoZG1pKSA/CisJICAgICAgIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVk IDogY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGhkbWlf Y29ubl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uKQoreworCXN0cnVjdCBtdGtf aGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsKKworCW10a19jZWNfc2V0X2hw ZF9ldmVudChoZG1pLT5jZWNfZGV2LCBOVUxMLCBOVUxMKTsKKworCWRybV9jb25uZWN0b3JfdW5y ZWdpc3Rlcihjb25uKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubik7Cit9CisKK3N0YXRp YyBpbnQgaGRtaV9jb25uX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubiwK KwkJCQkgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCB1aW50NjRfdCB2YWwpCit7CisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfY29ubl9nZXRfbW9kZXMoc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm4pCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9j dHhfZnJvbV9jb25uKGNvbm4pOworCXN0cnVjdCBlZGlkICplZGlkOworCWludCByZXQ7CisKKwlp ZiAoIWhkbWktPmRkY19hZHB0KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVkaWQgPSBkcm1fZ2V0 X2VkaWQoY29ubiwgaGRtaS0+ZGRjX2FkcHQpOworCWlmICghZWRpZCkKKwkJcmV0dXJuIC1FTk9E RVY7CisKKwloZG1pLT5kdmlfbW9kZSA9ICFkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihlZGlkKTsK KworCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uLCBlZGlkKTsK KworCXJldCA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uLCBlZGlkKTsKKwlkcm1fZWRpZF90b19l bGQoY29ubiwgZWRpZCk7CisJa2ZyZWUoZWRpZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IGludCBtdGtfaGRtaV9jb25uX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4s CisJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBtdGtf aGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsKKworCWRldl9pbmZvKGhkbWkt PmRldiwgInhyZXM9JWQsIHlyZXM9JWQsIHJlZnJlc2g9JWQsIGludGw9JWQgY2xvY2s9JWRcbiIs CisJCSBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksIG1vZGUtPnZyZWZyZXNoLAorCQkg ISEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSksIG1vZGUtPmNsb2NrICog MTAwMCk7CisKKwlpZiAoaGRtaS0+YnJpZGdlLm5leHQpIHsKKwkJc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgYWRqdXN0ZWRfbW9kZTsKKworCQlkcm1fbW9kZV9jb3B5KCZhZGp1c3RlZF9tb2RlLCBt b2RlKTsKKwkJaWYgKCFkcm1fYnJpZGdlX21vZGVfZml4dXAoaGRtaS0+YnJpZGdlLm5leHQsIG1v ZGUsCisJCQkJCSAgICZhZGp1c3RlZF9tb2RlKSkKKwkJCXJldHVybiBNT0RFX0JBRDsKKwl9CisK KwlpZiAobW9kZS0+Y2xvY2sgPj0gMjcwMDAgJiYKKwkgICAgbW9kZS0+Y2xvY2sgPD0gMjk3MDAw ICYmCisJICAgIG1vZGUtPmhkaXNwbGF5IDw9IDB4MWZmZiAmJgorCSAgICBtb2RlLT52ZGlzcGxh eSA8PSAweDFmZmYpCisJCXJldHVybiBNT0RFX09LOworCisJcmV0dXJuIE1PREVfQkFEOworfQor CitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyICptdGtfaGRtaV9jb25uX2Jlc3RfZW5jKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlf Y3R4X2Zyb21fY29ubihjb25uKTsKKworCXJldHVybiBoZG1pLT5icmlkZ2UuZW5jb2RlcjsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIG10a19oZG1pX2Nvbm5l Y3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kcG1z LAorCS5kZXRlY3QgPSBoZG1pX2Nvbm5fZGV0ZWN0LAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBl cl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXN0cm95ID0gaGRtaV9jb25uX2Rl c3Ryb3ksCisJLnNldF9wcm9wZXJ0eSA9IGhkbWlfY29ubl9zZXRfcHJvcGVydHksCisJLnJlc2V0 ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRl X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwku YXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJv eV9zdGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJf ZnVuY3MKKwkJbXRrX2hkbWlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVz ID0gbXRrX2hkbWlfY29ubl9nZXRfbW9kZXMsCisJLm1vZGVfdmFsaWQgPSBtdGtfaGRtaV9jb25u X21vZGVfdmFsaWQsCisJLmJlc3RfZW5jb2RlciA9IG10a19oZG1pX2Nvbm5fYmVzdF9lbmMsCit9 OworCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9ocGRfZXZlbnQoYm9vbCBocGQsIHN0cnVjdCBkZXZp Y2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsKKworCWlmIChoZG1pICYmIGhkbWktPmJyaWRnZS5lbmNvZGVyICYmIGhkbWktPmJyaWRnZS5l bmNvZGVyLT5kZXYpCisJCWRybV9oZWxwZXJfaHBkX2lycV9ldmVudChoZG1pLT5icmlkZ2UuZW5j b2Rlci0+ZGV2KTsKK30KKworLyoKKyAqIEJyaWRnZSBjYWxsYmFja3MKKyAqLworCitzdGF0aWMg aW50IG10a19oZG1pX2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sK KwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOwor CWludCByZXQ7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoYnJpZGdlLT5lbmNvZGVyLT5k ZXYsICZoZG1pLT5jb25uLAorCQkJCSAmbXRrX2hkbWlfY29ubmVjdG9yX2Z1bmNzLAorCQkJCSBE Uk1fTU9ERV9DT05ORUNUT1JfSERNSUEpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihoZG1pLT5k ZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb25uZWN0b3I6ICVkXG4iLCByZXQpOworCQlyZXR1 cm4gcmV0OworCX0KKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJmhkbWktPmNvbm4sICZtdGtf aGRtaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKworCWhkbWktPmNvbm4ucG9sbGVkID0gRFJN X0NPTk5FQ1RPUl9QT0xMX0hQRDsKKwloZG1pLT5jb25uLmludGVybGFjZV9hbGxvd2VkID0gdHJ1 ZTsKKwloZG1pLT5jb25uLmRvdWJsZXNjYW5fYWxsb3dlZCA9IGZhbHNlOworCisJcmV0ID0gZHJt X2Nvbm5lY3Rvcl9yZWdpc3RlcigmaGRtaS0+Y29ubik7CisJaWYgKHJldCkgeworCQlkZXZfZXJy KGhkbWktPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb25uZWN0b3I6ICVkXG4iLCByZXQpOwor CQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5j b2RlcigmaGRtaS0+Y29ubiwKKwkJCQkJCWJyaWRnZS0+ZW5jb2Rlcik7CisJaWYgKHJldCkgewor CQlkZXZfZXJyKGhkbWktPmRldiwKKwkJCSJGYWlsZWQgdG8gYXR0YWNoIGNvbm5lY3RvciB0byBl bmNvZGVyOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoYnJpZGdlLT5u ZXh0KSB7CisJCWJyaWRnZS0+bmV4dC0+ZW5jb2RlciA9IGJyaWRnZS0+ZW5jb2RlcjsKKwkJcmV0 ID0gZHJtX2JyaWRnZV9hdHRhY2goYnJpZGdlLT5lbmNvZGVyLT5kZXYsIGJyaWRnZS0+bmV4dCk7 CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoaGRtaS0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gYXR0 YWNoIGV4dGVybmFsIGJyaWRnZTogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJ fQorCisJbXRrX2NlY19zZXRfaHBkX2V2ZW50KGhkbWktPmNlY19kZXYsIG10a19oZG1pX2hwZF9l dmVudCwgaGRtaS0+ZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBtdGtfaGRt aV9icmlkZ2VfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJCWNvbnN0 IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICphZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBt dGtfaGRtaV9icmlkZ2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0 cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fYnJpZGdlKGJyaWRnZSk7CisKKwlw aHlfcG93ZXJfb2ZmKGhkbWktPnBoeSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPmNs a1tNVEtfSERNSV9DTEtfSERNSV9QSVhFTF0pOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1p LT5jbGtbTVRLX0hETUlfQ0xLX0hETUlfUExMXSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1p X2JyaWRnZV9wb3N0X2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1 Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOworCisJbXRr X2hkbWlfcG93ZXJfb2ZmKGhkbWkpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9icmlkZ2Vf bW9kZV9zZXQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCSAgICAgIHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlLAorCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFk anVzdGVkX21vZGUpCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9i cmlkZ2UoYnJpZGdlKTsKKworCWRldl9pbmZvKGhkbWktPmRldiwgImN1ciBpbmZvOiBuYW1lOiVz LCBoZGlzcGxheTolZFxuIiwKKwkJIGFkanVzdGVkX21vZGUtPm5hbWUsIGFkanVzdGVkX21vZGUt PmhkaXNwbGF5KTsKKwlkZXZfaW5mbyhoZG1pLT5kZXYsICJoc3luY19zdGFydDolZCxoc3luY19l bmQ6JWQsIGh0b3RhbDolZCIsCisJCSBhZGp1c3RlZF9tb2RlLT5oc3luY19zdGFydCwgYWRqdXN0 ZWRfbW9kZS0+aHN5bmNfZW5kLAorCQkgYWRqdXN0ZWRfbW9kZS0+aHRvdGFsKTsKKwlkZXZfaW5m byhoZG1pLT5kZXYsICJoc2tldzolZCwgdmRpc3BsYXk6JWRcbiIsCisJCSBhZGp1c3RlZF9tb2Rl LT5oc2tldywgYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkpOworCWRldl9pbmZvKGhkbWktPmRldiwg InZzeW5jX3N0YXJ0OiVkLCB2c3luY19lbmQ6JWQsIHZ0b3RhbDolZCIsCisJCSBhZGp1c3RlZF9t b2RlLT52c3luY19zdGFydCwgYWRqdXN0ZWRfbW9kZS0+dnN5bmNfZW5kLAorCQkgYWRqdXN0ZWRf bW9kZS0+dnRvdGFsKTsKKwlkZXZfaW5mbyhoZG1pLT5kZXYsICJ2c2NhbjolZCwgZmxhZzolZFxu IiwKKwkJIGFkanVzdGVkX21vZGUtPnZzY2FuLCBhZGp1c3RlZF9tb2RlLT5mbGFncyk7CisKKwlk cm1fbW9kZV9jb3B5KCZoZG1pLT5tb2RlLCBhZGp1c3RlZF9tb2RlKTsKK30KKworc3RhdGljIHZv aWQgbXRrX2hkbWlfYnJpZGdlX3ByZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkK K3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2Up OworCisJbXRrX2hkbWlfcG93ZXJfb24oaGRtaSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1p X2JyaWRnZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgbXRr X2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOworCisJbXRrX2hkbWlf b3V0cHV0X3NldF9kaXNwbGF5X21vZGUoaGRtaSwgJmhkbWktPm1vZGUpOworCWNsa19wcmVwYXJl X2VuYWJsZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0hETUlfUExMXSk7CisJY2xrX3ByZXBhcmVf ZW5hYmxlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfSERNSV9QSVhFTF0pOworCXBoeV9wb3dlcl9v bihoZG1pLT5waHkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3Mg bXRrX2hkbWlfYnJpZGdlX2Z1bmNzID0geworCS5hdHRhY2ggPSBtdGtfaGRtaV9icmlkZ2VfYXR0 YWNoLAorCS5tb2RlX2ZpeHVwID0gbXRrX2hkbWlfYnJpZGdlX21vZGVfZml4dXAsCisJLmRpc2Fi bGUgPSBtdGtfaGRtaV9icmlkZ2VfZGlzYWJsZSwKKwkucG9zdF9kaXNhYmxlID0gbXRrX2hkbWlf YnJpZGdlX3Bvc3RfZGlzYWJsZSwKKwkubW9kZV9zZXQgPSBtdGtfaGRtaV9icmlkZ2VfbW9kZV9z ZXQsCisJLnByZV9lbmFibGUgPSBtdGtfaGRtaV9icmlkZ2VfcHJlX2VuYWJsZSwKKwkuZW5hYmxl ID0gbXRrX2hkbWlfYnJpZGdlX2VuYWJsZSwKK307CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfZHRf cGFyc2VfcGRhdGEoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSAgIHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlz dHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqY2VjX25wLCAqcG9ydCwgKmVwLCAqcmVtb3RlLCAqaTJjX25wOworCXN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKmNlY19wZGV2OworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKwlzdHJ1Y3QgcmVz b3VyY2UgKm1lbTsKKwlpbnQgcmV0OworCisJaGRtaS0+Zmx0X25fNXZfZ3BpbyA9IG9mX2dldF9u YW1lZF9ncGlvKG5wLCAiZmx0X25fNXYtZ3Bpb3MiLCAwKTsKKwlpZiAoaGRtaS0+Zmx0X25fNXZf Z3BpbyA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGZsdF9uXzV2IGdwaW86 ICVkXG4iLAorCQkJaGRtaS0+Zmx0X25fNXZfZ3Bpbyk7CisJCXJldHVybiBoZG1pLT5mbHRfbl81 dl9ncGlvOworCX0KKworCXJldCA9IG10a19oZG1pX2dldF9hbGxfY2xrKGhkbWksIG5wKTsKKwlp ZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBjbG9ja3M6ICVkXG4iLCBy ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFRoZSBDRUMgbW9kdWxlIGhhbmRsZXMgSERN SSBob3RwbHVnIGRldGVjdGlvbiAqLworCWNlY19ucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2Rl KG5wLT5wYXJlbnQsIE5VTEwsCisJCQkJCSAibWVkaWF0ZWssbXQ4MTczLWNlYyIpOworCWlmICgh Y2VjX25wKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGZpbmQgQ0VDIG5vZGVcbiIpOwor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljZWNfcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25v ZGUoY2VjX25wKTsKKwlpZiAoIWNlY19wZGV2KSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiV2Fp dGluZyBmb3IgQ0VDIGRldmljZSAlc1xuIiwKKwkJCWNlY19ucC0+ZnVsbF9uYW1lKTsKKwkJcmV0 dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCWhkbWktPmNlY19kZXYgPSAmY2VjX3BkZXYtPmRldjsK KworCS8qCisJICogVGhlIG1lZGlhdGVrLHN5c2Nvbi1oZG1pIHByb3BlcnR5IGNvbnRhaW5zIGEg cGhhbmRsZSBsaW5rIHRvIHRoZQorCSAqIE1NU1lTX0NPTkZJRyBkZXZpY2UgYW5kIHRoZSByZWdp c3RlciBvZmZzZXQgb2YgdGhlIEhETUlfU1lTX0NGRworCSAqIHJlZ2lzdGVycyBpdCBjb250YWlu cy4KKwkgKi8KKwlyZWdtYXAgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAi bWVkaWF0ZWssc3lzY29uLWhkbWkiKTsKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRl eChucCwgIm1lZGlhdGVrLHN5c2Nvbi1oZG1pIiwgMSwKKwkJCQkJICZoZG1pLT5zeXNfb2Zmc2V0 KTsKKwlpZiAoSVNfRVJSKHJlZ21hcCkpCisJCXJldCA9IFBUUl9FUlIocmVnbWFwKTsKKwlpZiAo cmV0KSB7CisJCXJldCA9IFBUUl9FUlIocmVnbWFwKTsKKwkJZGV2X2VycihkZXYsCisJCQkiRmFp bGVkIHRvIGdldCBzeXN0ZW0gY29uZmlndXJhdGlvbiByZWdpc3RlcnM6ICVkXG4iLAorCQkJcmV0 KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaGRtaS0+c3lzX3JlZ21hcCA9IHJlZ21hcDsKKworCW1l bSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaGRt aS0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIG1lbSk7CisJaWYgKElTX0VSUiho ZG1pLT5yZWdzKSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpb3JlbWFwIGhkbWlfc2hl bGw6ICVsZFxuIiwKKwkJCVBUUl9FUlIoaGRtaS0+cmVncykpOworCQlyZXR1cm4gUFRSX0VSUiho ZG1pLT5yZWdzKTsKKwl9CisKKwlwb3J0ID0gb2ZfZ3JhcGhfZ2V0X3BvcnRfYnlfaWQobnAsIDEp OworCWlmICghcG9ydCkgeworCQlkZXZfZXJyKGRldiwgIk1pc3Npbmcgb3V0cHV0IHBvcnQgbm9k ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVwID0gb2ZfZ2V0X2NoaWxkX2J5X25h bWUocG9ydCwgImVuZHBvaW50Iik7CisJaWYgKCFlcCkgeworCQlkZXZfZXJyKGRldiwgIk1pc3Np bmcgZW5kcG9pbnQgbm9kZSBpbiBwb3J0ICVzXG4iLAorCQkJcG9ydC0+ZnVsbF9uYW1lKTsKKwkJ b2Zfbm9kZV9wdXQocG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlvZl9ub2RlX3B1dChw b3J0KTsKKworCXJlbW90ZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZXApOwor CWlmICghcmVtb3RlKSB7CisJCWRldl9lcnIoZGV2LCAiTWlzc2luZyBjb25uZWN0b3IvYnJpZGdl IG5vZGUgZm9yIGVuZHBvaW50ICVzXG4iLAorCQkJZXAtPmZ1bGxfbmFtZSk7CisJCW9mX25vZGVf cHV0KGVwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW9mX25vZGVfcHV0KGVwKTsKKworCWlm ICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocmVtb3RlLCAiaGRtaS1jb25uZWN0b3IiKSkgewor CQloZG1pLT5icmlkZ2UubmV4dCA9IG9mX2RybV9maW5kX2JyaWRnZShyZW1vdGUpOworCQlpZiAo IWhkbWktPmJyaWRnZS5uZXh0KSB7CisJCQlkZXZfZXJyKGRldiwgIldhaXRpbmcgZm9yIGV4dGVy bmFsIGJyaWRnZVxuIik7CisJCQlvZl9ub2RlX3B1dChyZW1vdGUpOworCQkJcmV0dXJuIC1FUFJP QkVfREVGRVI7CisJCX0KKwl9CisKKwlpMmNfbnAgPSBvZl9wYXJzZV9waGFuZGxlKHJlbW90ZSwg ImRkYy1pMmMtYnVzIiwgMCk7CisJaWYgKCFpMmNfbnApIHsKKwkJZGV2X2VycihkZXYsICJGYWls ZWQgdG8gZmluZCBkZGMtaTJjLWJ1cyBub2RlIGluICVzXG4iLAorCQkJcmVtb3RlLT5mdWxsX25h bWUpOworCQlvZl9ub2RlX3B1dChyZW1vdGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJb2Zf bm9kZV9wdXQocmVtb3RlKTsKKworCWhkbWktPmRkY19hZHB0ID0gb2ZfZmluZF9pMmNfYWRhcHRl cl9ieV9ub2RlKGkyY19ucCk7CisJaWYgKCFoZG1pLT5kZGNfYWRwdCkgeworCQlkZXZfZXJyKGRl diwgIkZhaWxlZCB0byBnZXQgZGRjIGkyYyBhZGFwdGVyIGJ5IG5vZGVcbiIpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IGhkbWlf Zmx0X25fNXZfaXJxX3RocmVhZChpbnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IG10a19o ZG1pICpoZG1pID0gYXJnOworCisJZGV2X2VycihoZG1pLT5kZXYsICJkZXRlY3RlZCA1diBwaW4g ZXJyb3Igc3RhdHVzXG4iKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQg bXRrX2RybV9oZG1pX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3Ry dWN0IG10a19oZG1pICpoZG1pOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJ aW50IHJldDsKKworCWhkbWkgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmhkbWkpLCBHRlBf S0VSTkVMKTsKKwlpZiAoIWhkbWkpCisJCXJldHVybiAtRU5PTUVNOworCisJaGRtaS0+ZGV2ID0g ZGV2OworCisJcmV0ID0gbXRrX2hkbWlfZHRfcGFyc2VfcGRhdGEoaGRtaSwgcGRldik7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCWhkbWktPmZsdF9uXzV2X2lycSA9IGdwaW9fdG9faXJx KGhkbWktPmZsdF9uXzV2X2dwaW8pOworCWlmIChoZG1pLT5mbHRfbl81dl9pcnEgPCAwKSB7CisJ CWRldl9lcnIoZGV2LCAiaGRtaS0+Zmx0X25fNXZfaXJxID0gJWRcbiIsCisJCQloZG1pLT5mbHRf bl81dl9pcnEpOworCQlyZXR1cm4gaGRtaS0+Zmx0X25fNXZfaXJxOworCX0KKworCXJldCA9IGRl dm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBoZG1pLT5mbHRfbl81dl9pcnEsCisJCQkJCU5V TEwsIGhkbWlfZmx0X25fNXZfaXJxX3RocmVhZCwKKwkJCQkJSVJRRl9UUklHR0VSX1JJU0lORyB8 CisJCQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9PTkVTSE9ULAorCQkJCQkiaGRtaSBm bHRfbl81diIsIGhkbWkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g cmVnaXN0ZXIgaGRtaSBmbHRfbl81diBpbnRlcnJ1cHRcbiIpOworCQlyZXR1cm4gcmV0OworCX0K KworCWhkbWktPnBoeSA9IGRldm1fcGh5X2dldChkZXYsICJoZG1pIik7CisJaWYgKElTX0VSUiho ZG1pLT5waHkpKSB7CisJCXJldCA9IFBUUl9FUlIoaGRtaS0+cGh5KTsKKwkJZGV2X2VycihkZXYs ICJGYWlsZWQgdG8gZ2V0IEhETUkgUEhZOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBoZG1pKTsKKworCXJldCA9IG10a19oZG1p X291dHB1dF9pbml0KGhkbWkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQg dG8gaW5pdGlhbGl6ZSBoZG1pIG91dHB1dFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJaGRt aS0+YnJpZGdlLmZ1bmNzID0gJm10a19oZG1pX2JyaWRnZV9mdW5jczsKKwloZG1pLT5icmlkZ2Uu b2Zfbm9kZSA9IHBkZXYtPmRldi5vZl9ub2RlOworCXJldCA9IGRybV9icmlkZ2VfYWRkKCZoZG1p LT5icmlkZ2UpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWRkIGJy aWRnZSwgcmV0ID0gJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gbXRr X2hkbWlfY2xrX2VuYWJsZV9hdWRpbyhoZG1pKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2 LCAiRmFpbGVkIHRvIGVuYWJsZSBhdWRpbyBjbG9ja3M6ICVkXG4iLCByZXQpOworCQlnb3RvIGVy cl9icmlkZ2VfcmVtb3ZlOworCX0KKworCWRldl9pbmZvKGRldiwgIm1lZGlhdGVrIGhkbWkgcHJv YmUgc3VjY2Vzc1xuIik7CisJcmV0dXJuIDA7CisKK2Vycl9icmlkZ2VfcmVtb3ZlOgorCWRybV9i cmlkZ2VfcmVtb3ZlKCZoZG1pLT5icmlkZ2UpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBp bnQgbXRrX2RybV9oZG1pX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor CXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJ ZHJtX2JyaWRnZV9yZW1vdmUoJmhkbWktPmJyaWRnZSk7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVn aXN0ZXIoaGRtaS0+YXVkaW9fcGRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVM TCk7CisJbXRrX2hkbWlfY2xrX2Rpc2FibGVfYXVkaW8oaGRtaSk7CisJcmV0dXJuIDA7Cit9CisK KyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc3VzcGVuZChzdHJ1 Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gZGV2X2dldF9kcnZk YXRhKGRldik7CisKKwltdGtfaGRtaV9wb3dlcl9vZmYoaGRtaSk7CisJbXRrX2hkbWlfY2xrX2Rp c2FibGVfYXVkaW8oaGRtaSk7CisJZGV2X2luZm8oZGV2LCAiaGRtaSBzdXNwZW5kIHN1Y2Nlc3Mh XG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9yZXN1bWUoc3RydWN0 IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOworCWludCByZXQgPSAwOworCisJcmV0ID0gbXRrX2hkbWlfY2xrX2VuYWJsZV9hdWRp byhoZG1pKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiaGRtaSByZXN1bWUgZmFpbGVk IVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJbXRrX2hkbWlfcG93ZXJfb24oaGRtaSk7CisJ bXRrX2hkbWlfb3V0cHV0X3NldF9kaXNwbGF5X21vZGUoaGRtaSwgJmhkbWktPm1vZGUpOworCWRl dl9pbmZvKGRldiwgImhkbWkgcmVzdW1lIHN1Y2Nlc3MhXG4iKTsKKwlyZXR1cm4gMDsKK30KKyNl bmRpZgorc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG10a19oZG1pX3BtX29wcywKKwkJCSBtdGtf aGRtaV9zdXNwZW5kLCBtdGtfaGRtaV9yZXN1bWUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9m X2RldmljZV9pZCBtdGtfZHJtX2hkbWlfb2ZfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJt ZWRpYXRlayxtdDgxNzMtaGRtaSIsIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZv cm1fZHJpdmVyIG10a19oZG1pX2RyaXZlciA9IHsKKwkucHJvYmUgPSBtdGtfZHJtX2hkbWlfcHJv YmUsCisJLnJlbW92ZSA9IG10a19kcm1faGRtaV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5h bWUgPSAibWVkaWF0ZWstZHJtLWhkbWkiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZHJtX2hk bWlfb2ZfaWRzLAorCQkucG0gPSAmbXRrX2hkbWlfcG1fb3BzLAorCX0sCit9OworCitzdGF0aWMg c3RydWN0IHBsYXRmb3JtX2RyaXZlciAqIGNvbnN0IG10a19oZG1pX2RyaXZlcnNbXSA9IHsKKwkm bXRrX2hkbWlfcGh5X2RyaXZlciwKKwkmbXRrX2hkbWlfZGRjX2RyaXZlciwKKwkmbXRrX2NlY19k cml2ZXIsCisJJm10a19oZG1pX2RyaXZlciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10a19o ZG1pdHhfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShtdGtfaGRtaV9kcml2ZXJzKTsgaSsrKSB7CisJCXJldCA9IHBsYXRmb3Jt X2RyaXZlcl9yZWdpc3RlcihtdGtfaGRtaV9kcml2ZXJzW2ldKTsKKwkJaWYgKHJldCA8IDApIHsK KwkJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyICVzIGRyaXZlcjogJWRcbiIsCisJCQkgICAg ICAgbXRrX2hkbWlfZHJpdmVyc1tpXS0+ZHJpdmVyLm5hbWUsIHJldCk7CisJCQlnb3RvIGVycjsK KwkJfQorCX0KKworCXJldHVybiAwOworCitlcnI6CisJd2hpbGUgKC0taSA+PSAwKQorCQlwbGF0 Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihtdGtfaGRtaV9kcml2ZXJzW2ldKTsKKworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdGtfaGRtaXR4X2V4aXQodm9pZCkKK3sKKwlp bnQgaTsKKworCWZvciAoaSA9IEFSUkFZX1NJWkUobXRrX2hkbWlfZHJpdmVycykgLSAxOyBpID49 IDA7IGktLSkKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIobXRrX2hkbWlfZHJpdmVyc1tp XSk7Cit9CisKK21vZHVsZV9pbml0KG10a19oZG1pdHhfaW5pdCk7Cittb2R1bGVfZXhpdChtdGtf aGRtaXR4X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVr LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWFUZWsgSERNSSBEcml2ZXIiKTsKK01P RFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQyYmVhYgotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5jCkBAIC0wLDAgKzEsNDgyIEBA CisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmll IFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy IGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+CisjaW5j bHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxs aW51eC9waHkvcGh5Lmg+CisjaW5jbHVkZSAibXRrX2NlYy5oIgorI2luY2x1ZGUgIm10a19oZG1p LmgiCisjaW5jbHVkZSAibXRrX2hkbWlfaHcuaCIKKworc3RhdGljIHU4IG10a19oZG1pX2F1ZF9n ZXRfY2hubF9jb3VudChlbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUpCit7 CisJc3dpdGNoIChjaGFubmVsX3R5cGUpIHsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8xXzA6 CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfMV8xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBF XzJfMDoKKwkJcmV0dXJuIDI7CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfMl8xOgorCWNhc2Ug SERNSV9BVURfQ0hBTl9UWVBFXzNfMDoKKwkJcmV0dXJuIDM7CisJY2FzZSBIRE1JX0FVRF9DSEFO X1RZUEVfM18xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzRfMDoKKwljYXNlIEhETUlfQVVE X0NIQU5fVFlQRV8zXzBfTFJTOgorCQlyZXR1cm4gNDsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQ RV80XzE6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNV8wOgorCWNhc2UgSERNSV9BVURfQ0hB Tl9UWVBFXzNfMV9MUlM6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8wX0NMUlM6CisJCXJl dHVybiA1OworCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzVfMToKKwljYXNlIEhETUlfQVVEX0NI QU5fVFlQRV82XzA6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8xX0NMUlM6CisJY2FzZSBI RE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NTOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMF9D SDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzBfT0g6CisJY2FzZSBIRE1JX0FVRF9DSEFO X1RZUEVfNl8wX0NIUjoKKwkJcmV0dXJuIDY7CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8x OgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DUzoKKwljYXNlIEhETUlfQVVEX0NIQU5f VFlQRV82XzFfQ0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX09IOgorCWNhc2UgSERN SV9BVURfQ0hBTl9UWVBFXzZfMV9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wOgor CWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MSF9SSDoKKwljYXNlIEhETUlfQVVEX0NIQU5f VFlQRV83XzBfTFNSX1JTUjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfTENfUkM6CisJ Y2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xXX1JXOgorCWNhc2UgSERNSV9BVURfQ0hBTl9U WVBFXzdfMF9MU0RfUlNEOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU1NfUlNTOgor CWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MSFNfUkhTOgorCWNhc2UgSERNSV9BVURfQ0hB Tl9UWVBFXzdfMF9DU19DSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ1NfT0g6CisJ Y2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NTX0NIUjoKKwljYXNlIEhETUlfQVVEX0NIQU5f VFlQRV83XzBfQ0hfT0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NIX0NIUjoKKwlj YXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfT0hfQ0hSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9U WVBFXzdfMF9MU1NfUlNTX0xTUl9SU1I6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfOF8wX0xI X1JIX0NTOgorCQlyZXR1cm4gNzsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzE6CisJY2Fz ZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xIX1JIOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBF XzdfMV9MU1JfUlNSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MQ19SQzoKKwljYXNl IEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFdfUlc6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVf N18xX0xTRF9SU0Q6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTU19SU1M6CisJY2Fz ZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xIU19SSFM6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZ UEVfN18xX0NTX0NIOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DU19PSDoKKwljYXNl IEhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfQ0hSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBF XzdfMV9DSF9PSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ0hfQ0hSOgorCWNhc2Ug SERNSV9BVURfQ0hBTl9UWVBFXzdfMV9PSF9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVf N18xX0xTU19SU1NfTFNSX1JTUjoKKwkJcmV0dXJuIDg7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDI7 CisJfQorfQorCitzdGF0aWMgaW50IG10a19oZG1pX3ZpZGVvX2NoYW5nZV92cGxsKHN0cnVjdCBt dGtfaGRtaSAqaGRtaSwgdTMyIGNsb2NrLAorCQkJCSAgICAgIGVudW0gaGRtaV9kaXNwbGF5X2Nv bG9yX2RlcHRoIGRlcHRoKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwlpbnQgcmV0OworCisJ LyogVGhlIERQSSBkcml2ZXIgYWxyZWFkeSBzaG91bGQgaGF2ZSBzZXQgVFZEUExMIHRvIHRoZSBj b3JyZWN0IHJhdGUgKi8KKwlyZXQgPSBjbGtfc2V0X3JhdGUoaGRtaS0+Y2xrW01US19IRE1JX0NM S19IRE1JX1BMTF0sIGNsb2NrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAi RmFpbGVkIHRvIHNldCBQTEwgdG8gJXUgSHo6ICVkXG4iLCBjbG9jaywKKwkJCXJldCk7CisJCXJl dHVybiByZXQ7CisJfQorCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShoZG1pLT5jbGtbTVRLX0hETUlf Q0xLX0hETUlfUExMXSk7CisKKwlpZiAoRElWX1JPVU5EX0NMT1NFU1QocmF0ZSwgMTAwMCkgIT0g RElWX1JPVU5EX0NMT1NFU1QoY2xvY2ssIDEwMDApKQorCQlkZXZfd2FybihoZG1pLT5kZXYsICJX YW50IFBMTCAldSBIeiwgZ290ICVsdSBIelxuIiwgY2xvY2ssCisJCQkgcmF0ZSk7CisJZWxzZQor CQlkZXZfZGJnKGhkbWktPmRldiwgIldhbnQgUExMICV1IEh6LCBnb3QgJWx1IEh6XG4iLCBjbG9j aywgcmF0ZSk7CisKKwltdGtfaGRtaV9od19jb25maWdfc3lzKGhkbWkpOworCW10a19oZG1pX2h3 X3NldF9kZWVwX2NvbG9yX21vZGUoaGRtaSwgZGVwdGgpOworCXJldHVybiAwOworfQorCitzdGF0 aWMgdm9pZCBtdGtfaGRtaV92aWRlb19zZXRfZGlzcGxheV9tb2RlKHN0cnVjdCBtdGtfaGRtaSAq aGRtaSwKKwkJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCW10a19o ZG1pX2h3X3Jlc2V0KGhkbWkpOworCW10a19oZG1pX2h3X2VuYWJsZV9ub3RpY2UoaGRtaSwgdHJ1 ZSk7CisJbXRrX2hkbWlfaHdfd3JpdGVfaW50X21hc2soaGRtaSwgMHhmZik7CisJbXRrX2hkbWlf aHdfZW5hYmxlX2R2aV9tb2RlKGhkbWksIGhkbWktPmR2aV9tb2RlKTsKKwltdGtfaGRtaV9od19u Y3RzX2F1dG9fd3JpdGVfZW5hYmxlKGhkbWksIHRydWUpOworCisJbXRrX2hkbWlfaHdfbXNpY19z ZXR0aW5nKGhkbWksIG1vZGUpOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2F1ZF9lbmFibGVf cGFja2V0KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJbXRrX2hkbWlf aHdfc2VuZF9hdWRfcGFja2V0KGhkbWksIGVuYWJsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgbXRrX2hkbWlfYXVkX29uX29mZl9od19uY3RzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwg Ym9vbCBvbikKK3sKKwltdGtfaGRtaV9od19uY3RzX2VuYWJsZShoZG1pLCBvbik7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfYXVkX3NldF9pbnB1dChzdHJ1Y3QgbXRrX2hk bWkgKmhkbWkpCit7CisJdTggY2hhbl9jb3VudDsKKworCW10a19oZG1pX2h3X2F1ZF9zZXRfY2hh bm5lbF9zd2FwKGhkbWksIEhETUlfQVVEX1NXQVBfTEZFX0NDKTsKKwltdGtfaGRtaV9od19hdWRf cmF3X2RhdGFfZW5hYmxlKGhkbWksIHRydWUpOworCisJaWYgKGhkbWktPmF1ZF9wYXJhbS5hdWRf aW5wdXRfdHlwZSA9PSBIRE1JX0FVRF9JTlBVVF9TUERJRiAmJgorCSAgICBoZG1pLT5hdWRfcGFy YW0uYXVkX2NvZGVjID09IEhETUlfQVVESU9fQ09ESU5HX1RZUEVfRFNUKSB7CisJCW10a19oZG1p X2h3X2F1ZF9zZXRfYml0X251bShoZG1pLAorCQkJCQkgICAgSERNSV9BVURJT19TQU1QTEVfU0la RV8yNCk7CisJfSBlbHNlIGlmIChoZG1pLT5hdWRfcGFyYW0uYXVkX2kyc19mbXQgPT0KKwkJCUhE TUlfSTJTX01PREVfTEpUXzI0QklUKSB7CisJCWhkbWktPmF1ZF9wYXJhbS5hdWRfaTJzX2ZtdCA9 IEhETUlfSTJTX01PREVfTEpUXzE2QklUOworCX0KKworCW10a19oZG1pX2h3X2F1ZF9zZXRfaTJz X2ZtdChoZG1pLAorCQkJCSAgICBoZG1pLT5hdWRfcGFyYW0uYXVkX2kyc19mbXQpOworCW10a19o ZG1pX2h3X2F1ZF9zZXRfYml0X251bShoZG1pLCBIRE1JX0FVRElPX1NBTVBMRV9TSVpFXzI0KTsK KworCW10a19oZG1pX2h3X2F1ZF9zZXRfaGlnaF9iaXRyYXRlKGhkbWksIGZhbHNlKTsKKwltdGtf aGRtaV9waHlfYXVkX2RzdF9ub3JtYWxfZG91YmxlX2VuYWJsZShoZG1pLCBmYWxzZSk7CisJbXRr X2hkbWlfaHdfYXVkX2RzdF9lbmFibGUoaGRtaSwgZmFsc2UpOworCisJaWYgKGhkbWktPmF1ZF9w YXJhbS5hdWRfaW5wdXRfdHlwZSA9PSBIRE1JX0FVRF9JTlBVVF9TUERJRikgeworCQltdGtfaGRt aV9od19hdWRfZHNkX2VuYWJsZShoZG1pLCBmYWxzZSk7CisJCWlmIChoZG1pLT5hdWRfcGFyYW0u YXVkX2NvZGVjID09CisJCQlIRE1JX0FVRElPX0NPRElOR19UWVBFX0RTVCkgeworCQkJbXRrX2hk bWlfcGh5X2F1ZF9kc3Rfbm9ybWFsX2RvdWJsZV9lbmFibGUoaGRtaSwKKwkJCQkJCQkJICB0cnVl KTsKKwkJCW10a19oZG1pX2h3X2F1ZF9kc3RfZW5hYmxlKGhkbWksIHRydWUpOworCQl9CisKKwkJ Y2hhbl9jb3VudCA9IG10a19oZG1pX2F1ZF9nZXRfY2hubF9jb3VudAorCQkJCQkJIChIRE1JX0FV RF9DSEFOX1RZUEVfMl8wKTsKKwkJbXRrX2hkbWlfaHdfYXVkX3NldF9pMnNfY2hhbl9udW0oaGRt aSwKKwkJCQkJCSBIRE1JX0FVRF9DSEFOX1RZUEVfMl8wLAorCQkJCQkJIGNoYW5fY291bnQpOwor CQltdGtfaGRtaV9od19hdWRfc2V0X2lucHV0X3R5cGUoaGRtaSwKKwkJCQkJICAgICAgIEhETUlf QVVEX0lOUFVUX1NQRElGKTsKKwl9IGVsc2UgeworCQltdGtfaGRtaV9od19hdWRfZHNkX2VuYWJs ZShoZG1pLCBmYWxzZSk7CisJCWNoYW5fY291bnQgPQorCQkJbXRrX2hkbWlfYXVkX2dldF9jaG5s X2NvdW50KAorCQkJaGRtaS0+YXVkX3BhcmFtLmF1ZF9pbnB1dF9jaGFuX3R5cGUpOworCQltdGtf aGRtaV9od19hdWRfc2V0X2kyc19jaGFuX251bSgKKwkJCWhkbWksCisJCQloZG1pLT5hdWRfcGFy YW0uYXVkX2lucHV0X2NoYW5fdHlwZSwKKwkJCWNoYW5fY291bnQpOworCQltdGtfaGRtaV9od19h dWRfc2V0X2lucHV0X3R5cGUoaGRtaSwKKwkJCQkJICAgICAgIEhETUlfQVVEX0lOUFVUX0kyUyk7 CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2F1ZF9zZXRfc3JjKHN0 cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZGlzcGxh eV9tb2RlKQoreworCW10a19oZG1pX2F1ZF9vbl9vZmZfaHdfbmN0cyhoZG1pLCBmYWxzZSk7CisK KwlpZiAoaGRtaS0+YXVkX3BhcmFtLmF1ZF9pbnB1dF90eXBlID09IEhETUlfQVVEX0lOUFVUX0ky UykgeworCQlzd2l0Y2ggKGhkbWktPmF1ZF9wYXJhbS5hdWRfaGRtaV9mcykgeworCQljYXNlIEhE TUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV8zMjAwMDoKKwkJY2FzZSBIRE1JX0FVRElPX1NBTVBM RV9GUkVRVUVOQ1lfNDQxMDA6CisJCWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzQ4 MDAwOgorCQljYXNlIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV84ODIwMDoKKwkJY2FzZSBI RE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfOTYwMDA6CisJCQltdGtfaGRtaV9od19hdWRfc3Jj X29mZihoZG1pKTsKKwkJCS8qIG10a19oZG1pX2h3X2F1ZF9zcmNfZW5hYmxlKGhkbWksIGZhbHNl KTsgKi8KKwkJCW10a19oZG1pX2h3X2F1ZF9zZXRfbWNsaygKKwkJCWhkbWksCisJCQloZG1pLT5h dWRfcGFyYW0uYXVkX21jbGspOworCQkJbXRrX2hkbWlfaHdfYXVkX2FjbGtfaW52X2VuYWJsZSho ZG1pLCBmYWxzZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfSBl bHNlIHsKKwkJc3dpdGNoIChoZG1pLT5hdWRfcGFyYW0uaWVjX2ZyYW1lX2ZzKSB7CisJCWNhc2Ug SERNSV9JRUNfMzJLOgorCQkJaGRtaS0+YXVkX3BhcmFtLmF1ZF9oZG1pX2ZzID0KKwkJCSAgICBI RE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfMzIwMDA7CisJCQltdGtfaGRtaV9od19hdWRfc3Jj X29mZihoZG1pKTsKKwkJCW10a19oZG1pX2h3X2F1ZF9zZXRfbWNsayhoZG1pLAorCQkJCQkJIEhE TUlfQVVEX01DTEtfMTI4RlMpOworCQkJbXRrX2hkbWlfaHdfYXVkX2FjbGtfaW52X2VuYWJsZSho ZG1pLCBmYWxzZSk7CisJCQlicmVhazsKKwkJY2FzZSBIRE1JX0lFQ180OEs6CisJCQloZG1pLT5h dWRfcGFyYW0uYXVkX2hkbWlfZnMgPQorCQkJICAgIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5D WV80ODAwMDsKKwkJCW10a19oZG1pX2h3X2F1ZF9zcmNfb2ZmKGhkbWkpOworCQkJbXRrX2hkbWlf aHdfYXVkX3NldF9tY2xrKGhkbWksCisJCQkJCQkgSERNSV9BVURfTUNMS18xMjhGUyk7CisJCQlt dGtfaGRtaV9od19hdWRfYWNsa19pbnZfZW5hYmxlKGhkbWksIGZhbHNlKTsKKwkJCWJyZWFrOwor CQljYXNlIEhETUlfSUVDXzQ0SzoKKwkJCWhkbWktPmF1ZF9wYXJhbS5hdWRfaGRtaV9mcyA9CisJ CQkgICAgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzQ0MTAwOworCQkJbXRrX2hkbWlfaHdf YXVkX3NyY19vZmYoaGRtaSk7CisJCQltdGtfaGRtaV9od19hdWRfc2V0X21jbGsoaGRtaSwKKwkJ CQkJCSBIRE1JX0FVRF9NQ0xLXzEyOEZTKTsKKwkJCW10a19oZG1pX2h3X2F1ZF9hY2xrX2ludl9l bmFibGUoaGRtaSwgZmFsc2UpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJ fQorCX0KKwltdGtfaGRtaV9od19hdWRfc2V0X25jdHMoaGRtaSwgaGRtaS0+ZGVwdGgsIGhkbWkt PmF1ZF9wYXJhbS5hdWRfaGRtaV9mcywKKwkJCQkgZGlzcGxheV9tb2RlLT5jbG9jayk7CisKKwlt dGtfaGRtaV9od19hdWRfc3JjX3JlZW5hYmxlKGhkbWkpOworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IG10a19oZG1pX2F1ZF9zZXRfY2hubF9zdGF0dXMoc3RydWN0IG10a19oZG1pICpoZG1p KQoreworCW10a19oZG1pX2h3X2F1ZF9zZXRfY2hhbm5lbF9zdGF0dXMoCisJCWhkbWksCisJICAg aGRtaS0+YXVkX3BhcmFtLmhkbWlfbF9jaGFubmVsX3N0YXRlLAorCSAgIGhkbWktPmF1ZF9wYXJh bS5oZG1pX3JfY2hhbm5lbF9zdGF0ZSwKKwkgICBoZG1pLT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMp OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2F1ZF9vdXRwdXRfY29uZmln KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqZGlzcGxheV9tb2RlKQoreworCW10a19oZG1pX2h3X2F1ZF9tdXRlKGhkbWksIHRydWUpOwor CW10a19oZG1pX2F1ZF9lbmFibGVfcGFja2V0KGhkbWksIGZhbHNlKTsKKworCW10a19oZG1pX2F1 ZF9zZXRfaW5wdXQoaGRtaSk7CisJbXRrX2hkbWlfYXVkX3NldF9zcmMoaGRtaSwgZGlzcGxheV9t b2RlKTsKKwltdGtfaGRtaV9hdWRfc2V0X2Nobmxfc3RhdHVzKGhkbWkpOworCisJdXNsZWVwX3Jh bmdlKDUwLCAxMDApOworCisJbXRrX2hkbWlfYXVkX29uX29mZl9od19uY3RzKGhkbWksIHRydWUp OworCW10a19oZG1pX2F1ZF9lbmFibGVfcGFja2V0KGhkbWksIHRydWUpOworCW10a19oZG1pX2h3 X2F1ZF9tdXRlKGhkbWksIGZhbHNlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtf aGRtaV9zZXR1cF9hdl9tdXRlX3BhY2tldChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRr X2hkbWlfaHdfc2VuZF9hdl9tdXRlKGhkbWkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IG10a19oZG1pX3NldHVwX2F2X3VubXV0ZV9wYWNrZXQoc3RydWN0IG10a19oZG1pICpoZG1pKQor eworCW10a19oZG1pX2h3X3NlbmRfYXZfdW5tdXRlKGhkbWkpOworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IG10a19oZG1pX3NldHVwX2F2aV9pbmZvZnJhbWUoc3RydWN0IG10a19oZG1pICpo ZG1pLAorCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgaGRt aV9hdmlfaW5mb2ZyYW1lIGZyYW1lOworCXU4IGJ1ZmZlclsxN107CisJc3NpemVfdCBlcnI7CisK KwllcnIgPSBkcm1faGRtaV9hdmlfaW5mb2ZyYW1lX2Zyb21fZGlzcGxheV9tb2RlKCZmcmFtZSwg bW9kZSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsCisJCQkiRmFpbGVk IHRvIGdldCBBVkkgaW5mb2ZyYW1lIGZyb20gbW9kZTogJXpkXG4iLCBlcnIpOworCQlyZXR1cm4g ZXJyOworCX0KKworCWVyciA9IGhkbWlfYXZpX2luZm9mcmFtZV9wYWNrKCZmcmFtZSwgYnVmZmVy LCBzaXplb2YoYnVmZmVyKSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihoZG1pLT5kZXYs ICJGYWlsZWQgdG8gcGFjayBBVkkgaW5mb2ZyYW1lOiAlemRcbiIsIGVycik7CisJCXJldHVybiBl cnI7CisJfQorCisJbXRrX2hkbWlfaHdfc2VuZF9pbmZvX2ZyYW1lKGhkbWksIGJ1ZmZlciwgc2l6 ZW9mKGJ1ZmZlcikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3NldHVw X3NwZF9pbmZvZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQljb25zdCBjaGFyICp2 ZW5kb3IsCisJCQkJCWNvbnN0IGNoYXIgKnByb2R1Y3QpCit7CisJc3RydWN0IGhkbWlfc3BkX2lu Zm9mcmFtZSBmcmFtZTsKKwl1OCBidWZmZXJbMjldOworCXNzaXplX3QgZXJyOworCisJZXJyID0g aGRtaV9zcGRfaW5mb2ZyYW1lX2luaXQoJmZyYW1lLCB2ZW5kb3IsIHByb2R1Y3QpOworCWlmIChl cnIgPCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgU1BE IGluZm9mcmFtZTogJXpkXG4iLAorCQkJICAgICBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwor CWVyciA9IGhkbWlfc3BkX2luZm9mcmFtZV9wYWNrKCZmcmFtZSwgYnVmZmVyLCBzaXplb2YoYnVm ZmVyKSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8g cGFjayBTRFAgaW5mb2ZyYW1lOiAlemRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJ bXRrX2hkbWlfaHdfc2VuZF9pbmZvX2ZyYW1lKGhkbWksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikp OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3NldHVwX2F1ZGlvX2luZm9m cmFtZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJc3RydWN0IGhkbWlfYXVkaW9faW5mb2Zy YW1lIGZyYW1lOworCXU4IGJ1ZmZlclsxNF07CisJc3NpemVfdCBlcnI7CisKKwllcnIgPSBoZG1p X2F1ZGlvX2luZm9mcmFtZV9pbml0KCZmcmFtZSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2Vy cihoZG1pLT5kZXYsICJGYWlsZWQgdG8gc2V0dXAgYXVkaW8gaW5mb2ZyYW1lOiAlemRcbiIsCisJ CQllcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWZyYW1lLmNvZGluZ190eXBlID0gSERNSV9B VURJT19DT0RJTkdfVFlQRV9TVFJFQU07CisJZnJhbWUuc2FtcGxlX2ZyZXF1ZW5jeSA9IEhETUlf QVVESU9fU0FNUExFX0ZSRVFVRU5DWV9TVFJFQU07CisJZnJhbWUuc2FtcGxlX3NpemUgPSBIRE1J X0FVRElPX1NBTVBMRV9TSVpFX1NUUkVBTTsKKwlmcmFtZS5jaGFubmVscyA9CisJICAgIG10a19o ZG1pX2F1ZF9nZXRfY2hubF9jb3VudCgKKwkgICAgaGRtaS0+YXVkX3BhcmFtLmF1ZF9pbnB1dF9j aGFuX3R5cGUpOworCisJZXJyID0gaGRtaV9hdWRpb19pbmZvZnJhbWVfcGFjaygmZnJhbWUsIGJ1 ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ ZGV2LCAiRmFpbGVkIHRvIHBhY2sgYXVkaW8gaW5mb2ZyYW1lOiAlemRcbiIsCisJCQllcnIpOwor CQlyZXR1cm4gZXJyOworCX0KKworCW10a19oZG1pX2h3X3NlbmRfaW5mb19mcmFtZShoZG1pLCBi dWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtf aGRtaV9zZXR1cF92ZW5kb3Jfc3BlY2lmaWNfaW5mb2ZyYW1lKHN0cnVjdCBtdGtfaGRtaSAqaGRt aSwKKwkJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBoZG1p X3ZlbmRvcl9pbmZvZnJhbWUgZnJhbWU7CisJdTggYnVmZmVyWzEwXTsKKwlzc2l6ZV90IGVycjsK KworCWVyciA9IGRybV9oZG1pX3ZlbmRvcl9pbmZvZnJhbWVfZnJvbV9kaXNwbGF5X21vZGUoJmZy YW1lLCBtb2RlKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LAorCQkJIkZhaWxl ZCB0byBnZXQgdmVuZG9yIGluZm9mcmFtZSBmcm9tIG1vZGU6ICV6ZFxuIiwgZXJyKTsKKwkJcmV0 dXJuIGVycjsKKwl9CisKKwllcnIgPSBoZG1pX3ZlbmRvcl9pbmZvZnJhbWVfcGFjaygmZnJhbWUs IGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihoZG1pLT5k ZXYsICJGYWlsZWQgdG8gcGFjayB2ZW5kb3IgaW5mb2ZyYW1lOiAlemRcbiIsCisJCQllcnIpOwor CQlyZXR1cm4gZXJyOworCX0KKworCW10a19oZG1pX2h3X3NlbmRfaW5mb19mcmFtZShoZG1pLCBi dWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlyZXR1cm4gMDsKK30KKworaW50IG10a19oZG1pX2hw ZF9oaWdoKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlyZXR1cm4gaGRtaS0+Y2VjX2RldiA/ IG10a19jZWNfaHBkX2hpZ2goaGRtaS0+Y2VjX2RldikgOiBmYWxzZTsKK30KKworaW50IG10a19o ZG1pX291dHB1dF9pbml0KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlzdHJ1Y3QgaGRtaV9h dWRpb19wYXJhbSAqYXVkX3BhcmFtID0gJmhkbWktPmF1ZF9wYXJhbTsKKworCWlmIChoZG1pLT5p bml0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhkbWktPmNzcCA9IEhETUlfQ09MT1JTUEFDRV9S R0I7CisJaGRtaS0+ZGVwdGggPSBIRE1JX0RFRVBfQ09MT1JfMjRCSVRTOworCWhkbWktPm91dHB1 dCA9IHRydWU7CisJYXVkX3BhcmFtLT5hdWRfY29kZWMgPSBIRE1JX0FVRElPX0NPRElOR19UWVBF X1BDTTsKKwlhdWRfcGFyYW0tPmF1ZF9oZG1pX2ZzID0gSERNSV9BVURJT19TQU1QTEVfRlJFUVVF TkNZXzQ4MDAwOworCWF1ZF9wYXJhbS0+YXVkX3NhbXBlX3NpemUgPSBIRE1JX0FVRElPX1NBTVBM RV9TSVpFXzE2OworCWF1ZF9wYXJhbS0+YXVkX2lucHV0X3R5cGUgPSBIRE1JX0FVRF9JTlBVVF9J MlM7CisJYXVkX3BhcmFtLT5hdWRfaTJzX2ZtdCA9IEhETUlfSTJTX01PREVfSTJTXzI0QklUOwor CWF1ZF9wYXJhbS0+YXVkX21jbGsgPSBIRE1JX0FVRF9NQ0xLXzEyOEZTOworCWF1ZF9wYXJhbS0+ aWVjX2ZyYW1lX2ZzID0gSERNSV9JRUNfNDhLOworCWF1ZF9wYXJhbS0+YXVkX2lucHV0X2NoYW5f dHlwZSA9IEhETUlfQVVEX0NIQU5fVFlQRV8yXzA7CisJYXVkX3BhcmFtLT5oZG1pX2xfY2hhbm5l bF9zdGF0ZVsyXSA9IDI7CisJYXVkX3BhcmFtLT5oZG1pX3JfY2hhbm5lbF9zdGF0ZVsyXSA9IDI7 CisJaGRtaS0+aW5pdCA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtdGtfaGRtaV9w b3dlcl9vbihzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRrX2hkbWlfaHdfbWFrZV9yZWdf d3JpdGFibGUoaGRtaSwgdHJ1ZSk7CisJbXRrX2hkbWlfaHdfMXA0X3ZlcnNpb25fZW5hYmxlKGhk bWksIHRydWUpOworfQorCit2b2lkIG10a19oZG1pX3Bvd2VyX29mZihzdHJ1Y3QgbXRrX2hkbWkg KmhkbWkpCit7CisJbXRrX2hkbWlfaHdfMXA0X3ZlcnNpb25fZW5hYmxlKGhkbWksIHRydWUpOwor CW10a19oZG1pX2h3X21ha2VfcmVnX3dyaXRhYmxlKGhkbWksIGZhbHNlKTsKK30KKworaW50IG10 a19oZG1pX291dHB1dF9zZXRfZGlzcGxheV9tb2RlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJ CQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCWludCByZXQ7CisKKwlp ZiAoIWhkbWktPmluaXQpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJkb2Vzbid0IGluaXQgaGRt aSBjb250cm9sIGNvbnRleHQhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXRrX2hk bWlfaHdfdmlkX2JsYWNrKGhkbWksIHRydWUpOworCW10a19oZG1pX2h3X2F1ZF9tdXRlKGhkbWks IHRydWUpOworCW10a19oZG1pX3NldHVwX2F2X211dGVfcGFja2V0KGhkbWkpOworCXBoeV9wb3dl cl9vZmYoaGRtaS0+cGh5KTsKKworCXJldCA9IG10a19oZG1pX3ZpZGVvX2NoYW5nZV92cGxsKGhk bWksCisJCQkJCSBtb2RlLT5jbG9jayAqIDEwMDAsCisJCQkJCSBoZG1pLT5kZXB0aCk7CisJaWYg KHJldCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byBzZXQgdnBsbDogJWRcbiIs IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCW10a19oZG1pX3ZpZGVvX3NldF9kaXNwbGF5X21v ZGUoaGRtaSwgbW9kZSk7CisKKwlwaHlfcG93ZXJfb24oaGRtaS0+cGh5KTsKKwltdGtfaGRtaV9h dWRfb3V0cHV0X2NvbmZpZyhoZG1pLCBtb2RlKTsKKworCW10a19oZG1pX3NldHVwX2F1ZGlvX2lu Zm9mcmFtZShoZG1pKTsKKwltdGtfaGRtaV9zZXR1cF9hdmlfaW5mb2ZyYW1lKGhkbWksIG1vZGUp OworCW10a19oZG1pX3NldHVwX3NwZF9pbmZvZnJhbWUoaGRtaSwgIm1lZGlhdGVrIiwgImNocm9t ZWJvb2siKTsKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHXzNEX01BU0spCisJCW10 a19oZG1pX3NldHVwX3ZlbmRvcl9zcGVjaWZpY19pbmZvZnJhbWUoaGRtaSwgbW9kZSk7CisKKwlt dGtfaGRtaV9od192aWRfYmxhY2soaGRtaSwgZmFsc2UpOworCW10a19oZG1pX2h3X2F1ZF9tdXRl KGhkbWksIGZhbHNlKTsKKwltdGtfaGRtaV9zZXR1cF9hdl91bm11dGVfcGFja2V0KGhkbWkpOwor CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2hkbWkuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNzJiY2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuaApAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAq IENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGpp ZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICog cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfTVRLX0hETUlfQ1RSTF9ICisjZGVmaW5lIF9NVEtf SERNSV9DVFJMX0gKKworI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4 L2hkbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o PgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBjbGs7CitzdHJ1Y3QgZGV2aWNl Oworc3RydWN0IGRldmljZV9ub2RlOworc3RydWN0IGkyY19hZGFwdGVyOworc3RydWN0IHBsYXRm b3JtX2RldmljZTsKK3N0cnVjdCBwaHk7CitzdHJ1Y3QgcmVnbWFwOworCitlbnVtIG10a19oZG1p X2Nsa19pZCB7CisJTVRLX0hETUlfQ0xLX0hETUlfUElYRUwsCisJTVRLX0hETUlfQ0xLX0hETUlf UExMLAorCU1US19IRE1JX0NMS19BVURfQkNMSywKKwlNVEtfSERNSV9DTEtfQVVEX1NQRElGLAor CU1US19IRE1JX0NMS19DT1VOVAorfTsKKworZW51bSBoZG1pX2Rpc3BsYXlfY29sb3JfZGVwdGgg eworCUhETUlfREVFUF9DT0xPUl8yNEJJVFMsCisJSERNSV9ERUVQX0NPTE9SXzMwQklUUywKKwlI RE1JX0RFRVBfQ09MT1JfMzZCSVRTLAorCUhETUlfREVFUF9DT0xPUl80OEJJVFMsCit9OworCitl bnVtIGhkbWlfYXVkX2lucHV0X3R5cGUgeworCUhETUlfQVVEX0lOUFVUX0kyUyA9IDAsCisJSERN SV9BVURfSU5QVVRfU1BESUYsCit9OworCitlbnVtIGhkbWlfYXVkX2kyc19mbXQgeworCUhETUlf STJTX01PREVfUkpUXzI0QklUID0gMCwKKwlIRE1JX0kyU19NT0RFX1JKVF8xNkJJVCwKKwlIRE1J X0kyU19NT0RFX0xKVF8yNEJJVCwKKwlIRE1JX0kyU19NT0RFX0xKVF8xNkJJVCwKKwlIRE1JX0ky U19NT0RFX0kyU18yNEJJVCwKKwlIRE1JX0kyU19NT0RFX0kyU18xNkJJVAorfTsKKworZW51bSBo ZG1pX2F1ZF9tY2xrIHsKKwlIRE1JX0FVRF9NQ0xLXzEyOEZTLAorCUhETUlfQVVEX01DTEtfMTky RlMsCisJSERNSV9BVURfTUNMS18yNTZGUywKKwlIRE1JX0FVRF9NQ0xLXzM4NEZTLAorCUhETUlf QVVEX01DTEtfNTEyRlMsCisJSERNSV9BVURfTUNMS183NjhGUywKKwlIRE1JX0FVRF9NQ0xLXzEx NTJGUywKK307CisKK2VudW0gaGRtaV9hdWRfaWVjX2ZyYW1lX3JhdGUgeworCUhETUlfSUVDXzMy SyA9IDAsCisJSERNSV9JRUNfOTZLLAorCUhETUlfSUVDXzE5MkssCisJSERNSV9JRUNfNzY4SywK KwlIRE1JX0lFQ180NEssCisJSERNSV9JRUNfODhLLAorCUhETUlfSUVDXzE3NkssCisJSERNSV9J RUNfNzA1SywKKwlIRE1JX0lFQ18xNkssCisJSERNSV9JRUNfMjJLLAorCUhETUlfSUVDXzI0SywK KwlIRE1JX0lFQ180OEssCit9OworCitlbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSB7CisJSERN SV9BVURfQ0hBTl9UWVBFXzFfMCA9IDAsCisJSERNSV9BVURfQ0hBTl9UWVBFXzFfMSwKKwlIRE1J X0FVRF9DSEFOX1RZUEVfMl8wLAorCUhETUlfQVVEX0NIQU5fVFlQRV8yXzEsCisJSERNSV9BVURf Q0hBTl9UWVBFXzNfMCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfM18xLAorCUhETUlfQVVEX0NIQU5f VFlQRV80XzAsCisJSERNSV9BVURfQ0hBTl9UWVBFXzRfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVf NV8wLAorCUhETUlfQVVEX0NIQU5fVFlQRV81XzEsCisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMCwK KwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8xLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzAsCisJSERN SV9BVURfQ0hBTl9UWVBFXzdfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfM18wX0xSUywKKwlIRE1J X0FVRF9DSEFOX1RZUEVfM18xX0xSUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNF8wX0NMUlMsCisJ SERNSV9BVURfQ0hBTl9UWVBFXzRfMV9DTFJTLAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzFfQ1Ms CisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX09I LAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzFfQ0hSLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFf TEhfUkgsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MU1JfUlNSLAorCUhETUlfQVVEX0NIQU5f VFlQRV83XzFfTENfUkMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MV19SVywKKwlIRE1JX0FV RF9DSEFOX1RZUEVfN18xX0xTRF9SU0QsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MU1NfUlNT LAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfTEhTX1JIUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVf N18xX0NTX0NILAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfT0gsCisJSERNSV9BVURfQ0hB Tl9UWVBFXzdfMV9DU19DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DSF9PSCwKKwlIRE1J X0FVRF9DSEFOX1RZUEVfN18xX0NIX0NIUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX09IX0NI UiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTU19SU1NfTFNSX1JTUiwKKwlIRE1JX0FVRF9D SEFOX1RZUEVfNl8wX0NTLAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzBfQ0gsCisJSERNSV9BVURf Q0hBTl9UWVBFXzZfMF9PSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NIUiwKKwlIRE1JX0FV RF9DSEFOX1RZUEVfN18wX0xIX1JILAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfTFNSX1JTUiwK KwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xDX1JDLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBf TFdfUlcsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU0RfUlNELAorCUhETUlfQVVEX0NIQU5f VFlQRV83XzBfTFNTX1JTUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xIU19SSFMsCisJSERN SV9BVURfQ0hBTl9UWVBFXzdfMF9DU19DSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NTX09I LAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ1NfQ0hSLAorCUhETUlfQVVEX0NIQU5fVFlQRV83 XzBfQ0hfT0gsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DSF9DSFIsCisJSERNSV9BVURfQ0hB Tl9UWVBFXzdfMF9PSF9DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU1NfUlNTX0xTUl9S U1IsCisJSERNSV9BVURfQ0hBTl9UWVBFXzhfMF9MSF9SSF9DUywKKwlIRE1JX0FVRF9DSEFOX1RZ UEVfVU5LTk9XTiA9IDB4RkYKK307CisKK2VudW0gaGRtaV9hdWRfY2hhbm5lbF9zd2FwX3R5cGUg eworCUhETUlfQVVEX1NXQVBfTFIsCisJSERNSV9BVURfU1dBUF9MRkVfQ0MsCisJSERNSV9BVURf U1dBUF9MU1JTLAorCUhETUlfQVVEX1NXQVBfUkxTX1JSUywKKwlIRE1JX0FVRF9TV0FQX0xSX1NU QVRVUywKK307CisKK3N0cnVjdCBoZG1pX2F1ZGlvX3BhcmFtIHsKKwllbnVtIGhkbWlfYXVkaW9f Y29kaW5nX3R5cGUgYXVkX2NvZGVjOworCWVudW0gaGRtaV9hdWRpb19zYW1wbGVfZnJlcXVlbmN5 IGF1ZF9oZG1pX2ZzOworCWVudW0gaGRtaV9hdWRpb19zYW1wbGVfc2l6ZSBhdWRfc2FtcGVfc2l6 ZTsKKwllbnVtIGhkbWlfYXVkX2lucHV0X3R5cGUgYXVkX2lucHV0X3R5cGU7CisJZW51bSBoZG1p X2F1ZF9pMnNfZm10IGF1ZF9pMnNfZm10OworCWVudW0gaGRtaV9hdWRfbWNsayBhdWRfbWNsazsK KwllbnVtIGhkbWlfYXVkX2llY19mcmFtZV9yYXRlIGllY19mcmFtZV9mczsKKwllbnVtIGhkbWlf YXVkX2NoYW5uZWxfdHlwZSBhdWRfaW5wdXRfY2hhbl90eXBlOworCXU4IGhkbWlfbF9jaGFubmVs X3N0YXRlWzZdOworCXU4IGhkbWlfcl9jaGFubmVsX3N0YXRlWzZdOworfTsKKworc3RydWN0IG10 a19oZG1pIHsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSBicmlkZ2U7CisJc3RydWN0IGRybV9jb25uZWN0 b3IgY29ubjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHBoeSAqcGh5OworCXN0cnVj dCBkZXZpY2UgKmNlY19kZXY7CisJc3RydWN0IGkyY19hZGFwdGVyICpkZGNfYWRwdDsKKwlzdHJ1 Y3QgY2xrICpjbGtbTVRLX0hETUlfQ0xLX0NPVU5UXTsKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJV R19GUykKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzOworI2VuZGlmCisJc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqYXVkaW9fcGRldjsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBtb2RlOworCWJv b2wgZHZpX21vZGU7CisJaW50IGZsdF9uXzV2X2dwaW87CisJaW50IGZsdF9uXzV2X2lycTsKKwl1 MzIgbWluX2Nsb2NrOworCXUzMiBtYXhfY2xvY2s7CisJdTMyIG1heF9oZGlzcGxheTsKKwl1MzIg bWF4X3ZkaXNwbGF5OworCXUzMiBpYmlhczsKKwl1MzIgaWJpYXNfdXA7CisJc3RydWN0IHJlZ21h cCAqc3lzX3JlZ21hcDsKKwl1bnNpZ25lZCBpbnQgc3lzX29mZnNldDsKKwl2b2lkIF9faW9tZW0g KnJlZ3M7CisJYm9vbCBpbml0OworCWVudW0gaGRtaV9kaXNwbGF5X2NvbG9yX2RlcHRoIGRlcHRo OworCWVudW0gaGRtaV9jb2xvcnNwYWNlIGNzcDsKKwlib29sIGF1ZGlvX2VuYWJsZTsKKwlib29s IG91dHB1dDsKKwlzdHJ1Y3QgaGRtaV9hdWRpb19wYXJhbSBhdWRfcGFyYW07Cit9OworCitzdGF0 aWMgaW5saW5lIHN0cnVjdCBtdGtfaGRtaSAqaGRtaV9jdHhfZnJvbV9icmlkZ2Uoc3RydWN0IGRy bV9icmlkZ2UgKmIpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3QgbXRrX2hkbWks IGJyaWRnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19oZG1pICpoZG1pX2N0eF9m cm9tX2Nvbm4oc3RydWN0IGRybV9jb25uZWN0b3IgKmMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9v ZihjLCBzdHJ1Y3QgbXRrX2hkbWksIGNvbm4pOworfQorCitpbnQgbXRrX2hkbWlfb3V0cHV0X2lu aXQoc3RydWN0IG10a19oZG1pICpoZG1pKTsKK2ludCBtdGtfaGRtaV9ocGRfaGlnaChzdHJ1Y3Qg bXRrX2hkbWkgKmhkbWkpOworaW50IG10a19oZG1pX291dHB1dF9zZXRfZGlzcGxheV9tb2RlKHN0 cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlKTsKK3ZvaWQgbXRrX2hkbWlfcG93ZXJfb24oc3RydWN0IG10a19oZG1pICpoZG1pKTsKK3Zv aWQgbXRrX2hkbWlfcG93ZXJfb2ZmKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7CisjaWYgZGVmaW5l ZChDT05GSUdfREVCVUdfRlMpCitpbnQgbXRrX2RybV9oZG1pX2RlYnVnZnNfaW5pdChzdHJ1Y3Qg bXRrX2hkbWkgKmhkbWkpOwordm9pZCBtdGtfZHJtX2hkbWlfZGVidWdmc19leGl0KHN0cnVjdCBt dGtfaGRtaSAqaGRtaSk7CisjZWxzZQoraW50IG10a19kcm1faGRtaV9kZWJ1Z2ZzX2luaXQoc3Ry dWN0IG10a19oZG1pICpoZG1pKQoreworCXJldHVybiAwOworfQorCit2b2lkIG10a19kcm1faGRt aV9kZWJ1Z2ZzX2V4aXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworfQorI2VuZGlmIC8qIENP TkZJR19ERUJVR19GUyAqLworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfY2Vj X2RyaXZlcjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX2RkY19kcml2 ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfaGRtaV9waHlfZHJpdmVyOwor I2VuZGlmIC8qIF9NVEtfSERNSV9DVFJMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfaGRtaV9kZGNfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2hkbWlfZGRjX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIy ZTU0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hk bWlfZGRjX2Rydi5jCkBAIC0wLDAgKzEsMzYyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0 IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+ CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisj aW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5j bHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxp bnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9l cnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51 eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4K KyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+ CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2RlZmluZSBTSUYxX0NMT0sJCSgy ODgpCisjZGVmaW5lIEREQ19ERENNQ1RMMAkJKDB4MCkKKyNkZWZpbmUgRERDTV9PRFJBSU4JCQlC SVQoMzEpCisjZGVmaW5lIEREQ01fQ0xLX0RJVl9PRkZTRVQJCSgxNikKKyNkZWZpbmUgRERDTV9D TEtfRElWX01BU0sJCSgweGZmZiA8PCAxNikKKyNkZWZpbmUgRERDTV9DU19TVEFUVVMJCQlCSVQo NCkKKyNkZWZpbmUgRERDTV9TQ0xfU1RBVEUJCQlCSVQoMykKKyNkZWZpbmUgRERDTV9TREFfU1RB VEUJCQlCSVQoMikKKyNkZWZpbmUgRERDTV9TTTBFTgkJCUJJVCgxKQorI2RlZmluZSBERENNX1ND TF9TVFJFQ0gJCQlCSVQoMCkKKyNkZWZpbmUgRERDX0REQ01DVEwxCQkoMHg0KQorI2RlZmluZSBE RENNX0FDS19PRkZTRVQJCQkoMTYpCisjZGVmaW5lIEREQ01fQUNLX01BU0sJCQkoMHhmZiA8PCAx NikKKyNkZWZpbmUgRERDTV9QR0xFTl9PRkZTRVQJCSg4KQorI2RlZmluZSBERENNX1BHTEVOX01B U0sJCQkoMHg3IDw8IDgpCisjZGVmaW5lIEREQ01fU0lGX01PREVfT0ZGU0VUCQkoNCkKKyNkZWZp bmUgRERDTV9TSUZfTU9ERV9NQVNLCQkoMHg3IDw8IDQpCisjZGVmaW5lIEREQ01fU1RBUlQJCQko MHgxKQorI2RlZmluZSBERENNX1dSSVRFX0RBVEEJCQkoMHgyKQorI2RlZmluZSBERENNX1NUT1AJ CQkoMHgzKQorI2RlZmluZSBERENNX1JFQURfREFUQV9OT19BQ0sJCSgweDQpCisjZGVmaW5lIERE Q01fUkVBRF9EQVRBX0FDSwkJKDB4NSkKKyNkZWZpbmUgRERDTV9UUkkJCQlCSVQoMCkKKyNkZWZp bmUgRERDX0REQ01EMAkJKDB4OCkKKyNkZWZpbmUgRERDTV9EQVRBMwkJCSgweGZmIDw8IDI0KQor I2RlZmluZSBERENNX0RBVEEyCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIEREQ01fREFUQTEJCQko MHhmZiA8PCA4KQorI2RlZmluZSBERENNX0RBVEEwCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgRERD X0REQ01EMQkJKDB4YykKKyNkZWZpbmUgRERDTV9EQVRBNwkJCSgweGZmIDw8IDI0KQorI2RlZmlu ZSBERENNX0RBVEE2CQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIEREQ01fREFUQTUJCQkoMHhmZiA8 PCA4KQorI2RlZmluZSBERENNX0RBVEE0CQkJKDB4ZmYgPDwgMCkKKworc3RydWN0IG10a19oZG1p X2kyYyB7CisJc3RydWN0IGkyY19hZGFwdGVyIGFkYXA7CisJc3RydWN0IGNsayAqY2xrOworCXZv aWQgX19pb21lbSAqcmVnczsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaWZfc2V0X2JpdChz dHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkgICAgICAg dW5zaWduZWQgaW50IHZhbCkKK3sKKwl3cml0ZWwocmVhZGwoaTJjLT5yZWdzICsgb2Zmc2V0KSB8 IHZhbCwgaTJjLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNpZl9j bHJfYml0KHN0cnVjdCBtdGtfaGRtaV9pMmMgKmkyYywgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJ CSAgICAgICB1bnNpZ25lZCBpbnQgdmFsKQoreworCXdyaXRlbChyZWFkbChpMmMtPnJlZ3MgKyBv ZmZzZXQpICYgfnZhbCwgaTJjLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBi b29sIHNpZl9iaXRfaXNfc2V0KHN0cnVjdCBtdGtfaGRtaV9pMmMgKmkyYywgdW5zaWduZWQgaW50 IG9mZnNldCwKKwkJCQkgIHVuc2lnbmVkIGludCB2YWwpCit7CisJcmV0dXJuIChyZWFkbChpMmMt PnJlZ3MgKyBvZmZzZXQpICYgdmFsKSA9PSB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBz aWZfd3JpdGVfbWFzayhzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsIHVuc2lnbmVkIGludCBvZmZz ZXQsCisJCQkJICB1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0LAorCQkJCSAg dW5zaWduZWQgaW50IHZhbCkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJdG1wID0gcmVhZGwo aTJjLT5yZWdzICsgb2Zmc2V0KTsKKwl0bXAgJj0gfm1hc2s7CisJdG1wIHw9ICh2YWwgPDwgc2hp ZnQpICYgbWFzazsKKwl3cml0ZWwodG1wLCBpMmMtPnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0 aWMgaW5saW5lIHVuc2lnbmVkIGludCBzaWZfcmVhZF9tYXNrKHN0cnVjdCBtdGtfaGRtaV9pMmMg KmkyYywKKwkJCQkJIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBtYXNrLAorCQkJ CQkgdW5zaWduZWQgaW50IHNoaWZ0KQoreworCXJldHVybiAocmVhZGwoaTJjLT5yZWdzICsgb2Zm c2V0KSAmIG1hc2spID4+IHNoaWZ0OworfQorCitzdGF0aWMgdm9pZCBkZGNtX3RyaWdnZXJfbW9k ZShzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsIGludCBtb2RlKQoreworCWludCB0aW1lb3V0ID0g MjAgKiAxMDAwOworCisJc2lmX3dyaXRlX21hc2soaTJjLCBERENfRERDTUNUTDEsIEREQ01fU0lG X01PREVfTUFTSywKKwkJICAgICAgIEREQ01fU0lGX01PREVfT0ZGU0VULCBtb2RlKTsKKwlzaWZf c2V0X2JpdChpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9UUkkpOworCXdoaWxlIChzaWZfYml0X2lz X3NldChpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9UUkkpKSB7CisJCXRpbWVvdXQgLT0gMjsKKwkJ dWRlbGF5KDIpOworCQlpZiAodGltZW91dCA8PSAwKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0 aWMgaW50IG10a19oZG1pX2kyY19yZWFkX21zZyhzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsIHN0 cnVjdCBpMmNfbXNnICptc2cpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTJjLT5hZGFwLmRl di5wYXJlbnQ7CisJdTMyIHJlbWFpbl9jb3VudCwgYWNrX2NvdW50LCBhY2tfZmluYWwsIHJlYWRf Y291bnQsIHRlbXBfY291bnQ7CisJdTMyIGluZGV4ID0gMDsKKwl1MzIgYWNrOworCWludCBpOwor CisJZGRjbV90cmlnZ2VyX21vZGUoaTJjLCBERENNX1NUQVJUKTsKKwlzaWZfd3JpdGVfbWFzayhp MmMsIEREQ19ERENNRDAsIDB4ZmYsIDAsIChtc2ctPmFkZHIgPDwgMSkgfCAweDAxKTsKKwlzaWZf d3JpdGVfbWFzayhpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9QR0xFTl9NQVNLLCBERENNX1BHTEVO X09GRlNFVCwKKwkJICAgICAgIDB4MDApOworCWRkY21fdHJpZ2dlcl9tb2RlKGkyYywgRERDTV9X UklURV9EQVRBKTsKKwlhY2sgPSBzaWZfcmVhZF9tYXNrKGkyYywgRERDX0REQ01DVEwxLCBERENN X0FDS19NQVNLLCBERENNX0FDS19PRkZTRVQpOworCWRldl9kYmcoZGV2LCAiYWNrID0gMHgleFxu IiwgYWNrKTsKKwlpZiAoYWNrICE9IDB4MDEpIHsKKwkJZGV2X2VycihkZXYsICJpMmMgYWNrIGVy ciFcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXJlbWFpbl9jb3VudCA9IG1zZy0+bGVu OworCWFja19jb3VudCA9IChtc2ctPmxlbiAtIDEpIC8gODsKKwlhY2tfZmluYWwgPSAwOworCisJ d2hpbGUgKHJlbWFpbl9jb3VudCA+IDApIHsKKwkJaWYgKGFja19jb3VudCA+IDApIHsKKwkJCXJl YWRfY291bnQgPSA4OworCQkJYWNrX2ZpbmFsID0gMDsKKwkJCWFja19jb3VudC0tOworCQl9IGVs c2UgeworCQkJcmVhZF9jb3VudCA9IHJlbWFpbl9jb3VudDsKKwkJCWFja19maW5hbCA9IDE7CisJ CX0KKworCQlzaWZfd3JpdGVfbWFzayhpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9QR0xFTl9NQVNL LAorCQkJICAgICAgIEREQ01fUEdMRU5fT0ZGU0VULCByZWFkX2NvdW50IC0gMSk7CisJCWRkY21f dHJpZ2dlcl9tb2RlKGkyYywgKGFja19maW5hbCA9PSAxKSA/CisJCQkJICBERENNX1JFQURfREFU QV9OT19BQ0sgOgorCQkJCSAgRERDTV9SRUFEX0RBVEFfQUNLKTsKKworCQlhY2sgPSBzaWZfcmVh ZF9tYXNrKGkyYywgRERDX0REQ01DVEwxLCBERENNX0FDS19NQVNLLAorCQkJCSAgICBERENNX0FD S19PRkZTRVQpOworCQl0ZW1wX2NvdW50ID0gMDsKKwkJd2hpbGUgKCgoYWNrICYgKDEgPDwgdGVt cF9jb3VudCkpICE9IDApICYmICh0ZW1wX2NvdW50IDwgOCkpCisJCQl0ZW1wX2NvdW50Kys7CisJ CWlmICgoKGFja19maW5hbCA9PSAxKSAmJiAodGVtcF9jb3VudCAhPSAocmVhZF9jb3VudCAtIDEp KSkgfHwKKwkJICAgICgoYWNrX2ZpbmFsID09IDApICYmICh0ZW1wX2NvdW50ICE9IHJlYWRfY291 bnQpKSkgeworCQkJZGV2X2VycihkZXYsICJBZGRyZXNzIE5BQ0shIEFDSygweCV4KVxuIiwgYWNr KTsKKwkJCWJyZWFrOworCQl9CisKKwkJZm9yIChpID0gcmVhZF9jb3VudDsgaSA+PSAxOyBpLS0p IHsKKwkJCWludCBzaGlmdDsKKwkJCWludCBvZmZzZXQ7CisKKwkJCWlmIChpID4gNCkgeworCQkJ CW9mZnNldCA9IEREQ19ERENNRDE7CisJCQkJc2hpZnQgPSAoaSAtIDUpICogODsKKwkJCX0gZWxz ZSB7CisJCQkJb2Zmc2V0ID0gRERDX0REQ01EMDsKKwkJCQlzaGlmdCA9IChpIC0gMSkgKiA4Owor CQkJfQorCisJCQltc2ctPmJ1ZltpbmRleCArIGkgLSAxXSA9IHNpZl9yZWFkX21hc2soaTJjLCBv ZmZzZXQsCisJCQkJCQkJCTB4ZmYgPDwgc2hpZnQsCisJCQkJCQkJCXNoaWZ0KTsKKwkJfQorCisJ CXJlbWFpbl9jb3VudCAtPSByZWFkX2NvdW50OworCQlpbmRleCArPSByZWFkX2NvdW50OworCX0K KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2kyY193cml0ZV9tc2coc3Ry dWN0IG10a19oZG1pX2kyYyAqaTJjLCBzdHJ1Y3QgaTJjX21zZyAqbXNnKQoreworCXN0cnVjdCBk ZXZpY2UgKmRldiA9IGkyYy0+YWRhcC5kZXYucGFyZW50OworCXUzMiBhY2s7CisKKwlkZGNtX3Ry aWdnZXJfbW9kZShpMmMsIEREQ01fU1RBUlQpOworCXNpZl93cml0ZV9tYXNrKGkyYywgRERDX0RE Q01EMCwgRERDTV9EQVRBMCwgMCwgbXNnLT5hZGRyIDw8IDEpOworCXNpZl93cml0ZV9tYXNrKGky YywgRERDX0REQ01EMCwgRERDTV9EQVRBMSwgOCwgbXNnLT5idWZbMF0pOworCXNpZl93cml0ZV9t YXNrKGkyYywgRERDX0REQ01DVEwxLCBERENNX1BHTEVOX01BU0ssIEREQ01fUEdMRU5fT0ZGU0VU LAorCQkgICAgICAgMHgxKTsKKwlkZGNtX3RyaWdnZXJfbW9kZShpMmMsIEREQ01fV1JJVEVfREFU QSk7CisKKwlhY2sgPSBzaWZfcmVhZF9tYXNrKGkyYywgRERDX0REQ01DVEwxLCBERENNX0FDS19N QVNLLCBERENNX0FDS19PRkZTRVQpOworCWRldl9kYmcoZGV2LCAiYWNrID0gJWRcbiIsIGFjayk7 CisKKwlpZiAoYWNrICE9IDB4MDMpIHsKKwkJZGV2X2VycihkZXYsICJpMmMgYWNrIGVyciFcbiIp OworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtf aGRtaV9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgIHN0cnVj dCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQoreworCXN0cnVjdCBtdGtfaGRtaV9pMmMgKmkyYyA9 IGFkYXB0ZXItPmFsZ29fZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5kZXYu cGFyZW50OworCWludCByZXQ7CisJaW50IGk7CisKKwlpZiAoIWkyYykgeworCQlkZXZfZXJyKGRl diwgImludmFsaWQgYXJndW1lbnRzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc2lm X3NldF9iaXQoaTJjLCBERENfRERDTUNUTDAsIEREQ01fU0NMX1NUUkVDSCk7CisJc2lmX3NldF9i aXQoaTJjLCBERENfRERDTUNUTDAsIEREQ01fU00wRU4pOworCXNpZl9jbHJfYml0KGkyYywgRERD X0REQ01DVEwwLCBERENNX09EUkFJTik7CisKKwlpZiAoc2lmX2JpdF9pc19zZXQoaTJjLCBERENf RERDTUNUTDEsIEREQ01fVFJJKSkgeworCQlkZXZfZXJyKGRldiwgImRkYyBsaW5lIGlzIGJ1c3kh XG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzaWZfd3JpdGVfbWFzayhpMmMsIEREQ19E RENNQ1RMMCwgRERDTV9DTEtfRElWX01BU0ssCisJCSAgICAgICBERENNX0NMS19ESVZfT0ZGU0VU LCBTSUYxX0NMT0spOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCXN0cnVjdCBp MmNfbXNnICptc2cgPSAmbXNnc1tpXTsKKworCQlkZXZfZGJnKGRldiwgImkyYyBtc2csIGFkcjow eCV4LCBmbGFnczolZCwgbGVuIDoweCV4XG4iLAorCQkJbXNnLT5hZGRyLCBtc2ctPmZsYWdzLCBt c2ctPmxlbik7CisKKwkJaWYgKG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCkKKwkJCXJldCA9IG10a19o ZG1pX2kyY19yZWFkX21zZyhpMmMsIG1zZyk7CisJCWVsc2UKKwkJCXJldCA9IG10a19oZG1pX2ky Y193cml0ZV9tc2coaTJjLCBtc2cpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8geGZlcl9lbmQ7 CisJfQorCisJZGRjbV90cmlnZ2VyX21vZGUoaTJjLCBERENNX1NUT1ApOworCisJcmV0dXJuIGk7 CisKK3hmZXJfZW5kOgorCWRkY21fdHJpZ2dlcl9tb2RlKGkyYywgRERDTV9TVE9QKTsKKwlkZXZf ZXJyKGRldiwgImRkYyBmYWlsZWQhXG4iKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdTMy IG10a19oZG1pX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1 cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBpMmNfYWxnb3JpdGhtIG10a19oZG1pX2kyY19hbGdvcml0aG0gPSB7CisJLm1hc3Rl cl94ZmVyID0gbXRrX2hkbWlfaTJjX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSBtdGtfaGRtaV9p MmNfZnVuYywKK307CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfaTJjX3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsK KwlzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmM7CisJc3RydWN0IHJlc291cmNlICptZW07CisJaW50 IHJldDsKKworCWkyYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZihzdHJ1Y3QgbXRrX2hkbWlf aTJjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpMmMpCisJCXJldHVybiAtRU5PTUVNOworCisJaTJj LT5jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZGRjLWkyYyIpOworCWlmIChJU19FUlIoaTJjLT5j bGspKSB7CisJCWRldl9lcnIoZGV2LCAiZ2V0IGRkY19jbGsgZmFpbGVkIDogJXAgLFxuIiwgaTJj LT5jbGspOworCQlyZXR1cm4gUFRSX0VSUihpMmMtPmNsayk7CisJfQorCisJbWVtID0gcGxhdGZv cm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpMmMtPnJlZ3MgPSBk ZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgbWVtKTsKKwlpZiAoSVNfRVJSKGkyYy0+ cmVncykpIHsKKwkJZGV2X2VycihkZXYsICJnZXQgbWVtb3J5IHNvdXJjZSBmYWlsIVxuIik7CisJ CXJldHVybiBQVFJfRVJSKGkyYy0+cmVncyk7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5h YmxlKGkyYy0+Y2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZW5hYmxlIGRkYyBj bGsgZmFpbGVkIVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJc3RybGNweShpMmMtPmFkYXAu bmFtZSwgIm1lZGlhdGVrLWhkbWktaTJjIiwgc2l6ZW9mKGkyYy0+YWRhcC5uYW1lKSk7CisJaTJj LT5hZGFwLm93bmVyID0gVEhJU19NT0RVTEU7CisJaTJjLT5hZGFwLmFsZ28gPSAmbXRrX2hkbWlf aTJjX2FsZ29yaXRobTsKKwlpMmMtPmFkYXAucmV0cmllcyA9IDM7CisJaTJjLT5hZGFwLmRldi5v Zl9ub2RlID0gZGV2LT5vZl9ub2RlOworCWkyYy0+YWRhcC5hbGdvX2RhdGEgPSBpMmM7CisJaTJj LT5hZGFwLmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCisJcmV0ID0gaTJjX2FkZF9hZGFwdGVy KCZpMmMtPmFkYXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRv IGFkZCBidXMgdG8gaTJjIGNvcmVcbiIpOworCQlnb3RvIGVycl9jbGtfZGlzYWJsZTsKKwl9CisK KwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpMmMpOworCisJZGV2X2RiZyhkZXYsICJpMmMt PmFkYXA6ICVwXG4iLCAmaTJjLT5hZGFwKTsKKwlkZXZfZGJnKGRldiwgImkyYy0+Y2xrOiAlcFxu IiwgaTJjLT5jbGspOworCWRldl9kYmcoZGV2LCAicGh5c2ljYWwgYWRyOiAweCVsbHgsIGVuZDog MHglbGx4XG4iLCBtZW0tPnN0YXJ0LAorCQltZW0tPmVuZCk7CisKKwlyZXR1cm4gMDsKKworZXJy X2Nsa19kaXNhYmxlOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShpMmMtPmNsayk7CisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9pMmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19oZG1pX2kyYyAqaTJjID0gcGxhdGZvcm1f Z2V0X2RydmRhdGEocGRldik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaTJjLT5jbGspOwor CWkyY19kZWxfYWRhcHRlcigmaTJjLT5hZGFwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfaGRtaV9pMmNfbWF0Y2hbXSA9IHsKKwl7IC5j b21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1oZG1pLWRkYyIsIH0sCisJe30sCit9OworCitz dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX2RkY19kcml2ZXIgPSB7CisJLnByb2JlID0g bXRrX2hkbWlfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfaGRtaV9pMmNfcmVtb3ZlLAorCS5k cml2ZXIgPSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLWhkbWktZGRjIiwKKwkJLm9mX21hdGNoX3Rh YmxlID0gbXRrX2hkbWlfaTJjX21hdGNoLAorCX0sCit9OworCitNT0RVTEVfQVVUSE9SKCJKaWUg UWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWFU ZWsgSERNSSBpMmMgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfaHcuYyBiL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfaGRtaV9ody5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjc2NTIyNjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2hkbWlfaHcuYwpAQCAtMCwwICsxLDc1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg MjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsu Y29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq LworI2luY2x1ZGUgIm10a19oZG1pX2h3LmgiCisjaW5jbHVkZSAibXRrX2hkbWlfcmVncy5oIgor I2luY2x1ZGUgIm10a19oZG1pLmgiCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRl IDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2hkbWkuaD4KKyNpbmNsdWRlIDxsaW51 eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorCitzdGF0aWMgdTMyIG10a19oZG1p X3JlYWQoc3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIgb2Zmc2V0KQoreworCXJldHVybiByZWFk bChoZG1pLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfd3JpdGUo c3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIgb2Zmc2V0LCB1MzIgdmFsKQoreworCXdyaXRlbCh2 YWwsIGhkbWktPnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9tYXNr KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgdTMyIG9mZnNldCwgdTMyIHZhbCwgdTMyIG1hc2spCit7 CisJdTMyIHRtcCA9IG10a19oZG1pX3JlYWQoaGRtaSwgb2Zmc2V0KSAmIH5tYXNrOworCisJdG1w IHw9ICh2YWwgJiBtYXNrKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBvZmZzZXQsIHRtcCk7Cit9 CisKK3N0YXRpYyBjb25zdCB1OCBQUkVESVZbM11bNF0gPSB7CisJezB4MCwgMHgwLCAweDAsIDB4 MH0sCS8qIDI3TWh6ICovCisJezB4MSwgMHgxLCAweDEsIDB4MX0sCS8qIDc0TWh6ICovCisJezB4 MSwgMHgxLCAweDEsIDB4MX0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTggVFhE SVZbM11bNF0gPSB7CisJezB4MywgMHgzLCAweDMsIDB4Mn0sCS8qIDI3TWh6ICovCisJezB4Miwg MHgxLCAweDEsIDB4MX0sCS8qIDc0TWh6ICovCisJezB4MSwgMHgwLCAweDAsIDB4MH0JLyogMTQ4 TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTggRkJLU0VMWzNdWzRdID0geworCXsweDEsIDB4 MSwgMHgxLCAweDF9LAkvKiAyN01oeiAqLworCXsweDEsIDB4MCwgMHgxLCAweDF9LAkvKiA3NE1o eiAqLworCXsweDEsIDB4MCwgMHgxLCAweDF9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIGNv bnN0IHU4IEZCS0RJVlszXVs0XSA9IHsKKwl7MTksIDI0LCAyOSwgMTl9LAkvKiAyN01oeiAqLwor CXsxOSwgMjQsIDE0LCAxOX0sCS8qIDc0TWh6ICovCisJezE5LCAyNCwgMTQsIDE5fQkvKiAxNDhN aHogKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBESVZFTlszXVs0XSA9IHsKKwl7MHgyLCAweDEs IDB4MSwgMHgyfSwJLyogMjdNaHogKi8KKwl7MHgyLCAweDIsIDB4MiwgMHgyfSwJLyogNzRNaHog Ki8KKwl7MHgyLCAweDIsIDB4MiwgMHgyfQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25z dCB1OCBIVFBMTEJQWzNdWzRdID0geworCXsweGMsIDB4YywgMHg4LCAweGN9LAkvKiAyN01oeiAq LworCXsweGMsIDB4ZiwgMHhmLCAweGN9LAkvKiA3NE1oeiAqLworCXsweGMsIDB4ZiwgMHhmLCAw eGN9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IEhUUExMQkNbM11bNF0gPSB7 CisJezB4MiwgMHgzLCAweDMsIDB4Mn0sCS8qIDI3TWh6ICovCisJezB4MiwgMHgzLCAweDMsIDB4 Mn0sCS8qIDc0TWh6ICovCisJezB4MiwgMHgzLCAweDMsIDB4Mn0JLyogMTQ4TWh6ICovCit9Owor CitzdGF0aWMgY29uc3QgdTggSFRQTExCUlszXVs0XSA9IHsKKwl7MHgxLCAweDEsIDB4MCwgMHgx fSwJLyogMjdNaHogKi8KKwl7MHgxLCAweDIsIDB4MiwgMHgxfSwJLyogNzRNaHogKi8KKwl7MHgx LCAweDIsIDB4MiwgMHgxfQkvKiAxNDhNaHogKi8KK307CisKKyNkZWZpbmUgTkNUU19CWVRFUyAg ICAgICAgICAweDA3CitzdGF0aWMgY29uc3QgdTggSERNSV9OQ1RTWzddWzldW05DVFNfQllURVNd ID0geworCXt7MHgwMCwgMHgwMCwgMHg2OSwgMHg3OCwgMHgwMCwgMHgxMCwgMHgwMH0sCisJIHsw eDAwLCAweDAwLCAweGQyLCAweGYwLCAweDAwLCAweDEwLCAweDAwfSwKKwkgezB4MDAsIDB4MDMs IDB4MzcsIDB4ZjksIDB4MDAsIDB4MmQsIDB4ODB9LAorCSB7MHgwMCwgMHgwMSwgMHgyMiwgMHgw YSwgMHgwMCwgMHgxMCwgMHgwMH0sCisJIHsweDAwLCAweDA2LCAweDZmLCAweGYzLCAweDAwLCAw eDJkLCAweDgwfSwKKwkgezB4MDAsIDB4MDIsIDB4NDQsIDB4MTQsIDB4MDAsIDB4MTAsIDB4MDB9 LAorCSB7MHgwMCwgMHgwMSwgMHhBNSwgMHhlMCwgMHgwMCwgMHgxMCwgMHgwMH0sCisJIHsweDAw LCAweDA2LCAweDZGLCAweEYzLCAweDAwLCAweDE2LCAweEMwfSwKKwkgezB4MDAsIDB4MDMsIDB4 NjYsIDB4MUUsIDB4MDAsIDB4MEMsIDB4MDB9CisJIH0sCisJe3sweDAwLCAweDAwLCAweDc1LCAw eDMwLCAweDAwLCAweDE4LCAweDgwfSwKKwkgezB4MDAsIDB4MDAsIDB4ZWEsIDB4NjAsIDB4MDAs IDB4MTgsIDB4ODB9LAorCSB7MHgwMCwgMHgwMywgMHg5MywgMHg4NywgMHgwMCwgMHg0NSwgMHhh Y30sCisJIHsweDAwLCAweDAxLCAweDQyLCAweDQ0LCAweDAwLCAweDE4LCAweDgwfSwKKwkgezB4 MDAsIDB4MDMsIDB4OTMsIDB4ODcsIDB4MDAsIDB4MjIsIDB4ZDZ9LAorCSB7MHgwMCwgMHgwMiwg MHg4NCwgMHg4OCwgMHgwMCwgMHgxOCwgMHg4MH0sCisJIHsweDAwLCAweDAxLCAweGQ0LCAweGMw LCAweDAwLCAweDE4LCAweDgwfSwKKwkgezB4MDAsIDB4MDMsIDB4OTMsIDB4ODcsIDB4MDAsIDB4 MTEsIDB4NkJ9LAorCSB7MHgwMCwgMHgwMywgMHhDNiwgMHhDQywgMHgwMCwgMHgxMiwgMHg2MH0K KwkgfSwKKwl7ezB4MDAsIDB4MDAsIDB4NjksIDB4NzgsIDB4MDAsIDB4MTgsIDB4MDB9LAorCSB7 MHgwMCwgMHgwMCwgMHhkMiwgMHhmMCwgMHgwMCwgMHgxOCwgMHgwMH0sCisJIHsweDAwLCAweDAy LCAweDI1LCAweDUxLCAweDAwLCAweDJkLCAweDgwfSwKKwkgezB4MDAsIDB4MDEsIDB4MjIsIDB4 MGEsIDB4MDAsIDB4MTgsIDB4MDB9LAorCSB7MHgwMCwgMHgwMiwgMHgyNSwgMHg1MSwgMHgwMCwg MHgxNiwgMHhjMH0sCisJIHsweDAwLCAweDAyLCAweDQ0LCAweDE0LCAweDAwLCAweDE4LCAweDAw fSwKKwkgezB4MDAsIDB4MDEsIDB4QTUsIDB4ZTAsIDB4MDAsIDB4MTgsIDB4MDB9LAorCSB7MHgw MCwgMHgwNCwgMHg0QSwgMHhBMiwgMHgwMCwgMHgxNiwgMHhDMH0sCisJIHsweDAwLCAweDAzLCAw eEM2LCAweENDLCAweDAwLCAweDE0LCAweDAwfQorCSB9LAorCXt7MHgwMCwgMHgwMCwgMHg3NSwg MHgzMCwgMHgwMCwgMHgzMSwgMHgwMH0sCisJIHsweDAwLCAweDAwLCAweGVhLCAweDYwLCAweDAw LCAweDMxLCAweDAwfSwKKwkgezB4MDAsIDB4MDMsIDB4OTMsIDB4ODcsIDB4MDAsIDB4OGIsIDB4 NTh9LAorCSB7MHgwMCwgMHgwMSwgMHg0MiwgMHg0NCwgMHgwMCwgMHgzMSwgMHgwMH0sCisJIHsw eDAwLCAweDAzLCAweDkzLCAweDg3LCAweDAwLCAweDQ1LCAweGFjfSwKKwkgezB4MDAsIDB4MDIs IDB4ODQsIDB4ODgsIDB4MDAsIDB4MzEsIDB4MDB9LAorCSB7MHgwMCwgMHgwMSwgMHhkNCwgMHhj MCwgMHgwMCwgMHgzMSwgMHgwMH0sCisJIHsweDAwLCAweDAzLCAweDkzLCAweDg3LCAweDAwLCAw eDIyLCAweEQ2fSwKKwkgezB4MDAsIDB4MDMsIDB4QzYsIDB4Q0MsIDB4MDAsIDB4MjQsIDB4QzB9 CisJIH0sCisJe3sweDAwLCAweDAwLCAweDY5LCAweDc4LCAweDAwLCAweDMwLCAweDAwfSwKKwkg ezB4MDAsIDB4MDAsIDB4ZDIsIDB4ZjAsIDB4MDAsIDB4MzAsIDB4MDB9LAorCSB7MHgwMCwgMHgw MiwgMHgyNSwgMHg1MSwgMHgwMCwgMHg1YiwgMHgwMH0sCisJIHsweDAwLCAweDAxLCAweDIyLCAw eDBhLCAweDAwLCAweDMwLCAweDAwfSwKKwkgezB4MDAsIDB4MDIsIDB4MjUsIDB4NTEsIDB4MDAs IDB4MmQsIDB4ODB9LAorCSB7MHgwMCwgMHgwMiwgMHg0NCwgMHgxNCwgMHgwMCwgMHgzMCwgMHgw MH0sCisJIHsweDAwLCAweDAxLCAweEE1LCAweGUwLCAweDAwLCAweDMwLCAweDAwfSwKKwkgezB4 MDAsIDB4MDQsIDB4NEEsIDB4QTIsIDB4MDAsIDB4MkQsIDB4ODB9LAorCSB7MHgwMCwgMHgwMywg MHhDNiwgMHhDQywgMHgwMCwgMHgyOCwgMHg4MH0KKwkgfSwKKwl7ezB4MDAsIDB4MDAsIDB4NzUs IDB4MzAsIDB4MDAsIDB4NjIsIDB4MDB9LAorCSB7MHgwMCwgMHgwMCwgMHhlYSwgMHg2MCwgMHgw MCwgMHg2MiwgMHgwMH0sCisJIHsweDAwLCAweDAzLCAweDkzLCAweDg3LCAweDAxLCAweDE2LCAw eGIwfSwKKwkgezB4MDAsIDB4MDEsIDB4NDIsIDB4NDQsIDB4MDAsIDB4NjIsIDB4MDB9LAorCSB7 MHgwMCwgMHgwMywgMHg5MywgMHg4NywgMHgwMCwgMHg4YiwgMHg1OH0sCisJIHsweDAwLCAweDAy LCAweDg0LCAweDg4LCAweDAwLCAweDYyLCAweDAwfSwKKwkgezB4MDAsIDB4MDEsIDB4ZDQsIDB4 YzAsIDB4MDAsIDB4NjIsIDB4MDB9LAorCSB7MHgwMCwgMHgwMywgMHg5MywgMHg4NywgMHgwMCwg MHg0NSwgMHhBQ30sCisJIHsweDAwLCAweDAzLCAweEM2LCAweENDLCAweDAwLCAweDQ5LCAweDgw fQorCSB9LAorCXt7MHgwMCwgMHgwMCwgMHg2OSwgMHg3OCwgMHgwMCwgMHg2MCwgMHgwMH0sCisJ IHsweDAwLCAweDAwLCAweGQyLCAweGYwLCAweDAwLCAweDYwLCAweDAwfSwKKwkgezB4MDAsIDB4 MDIsIDB4MjUsIDB4NTEsIDB4MDAsIDB4YjYsIDB4MDB9LAorCSB7MHgwMCwgMHgwMSwgMHgyMiwg MHgwYSwgMHgwMCwgMHg2MCwgMHgwMH0sCisJIHsweDAwLCAweDAyLCAweDI1LCAweDUxLCAweDAw LCAweDViLCAweDAwfSwKKwkgezB4MDAsIDB4MDIsIDB4NDQsIDB4MTQsIDB4MDAsIDB4NjAsIDB4 MDB9LAorCSB7MHgwMCwgMHgwMSwgMHhBNSwgMHhlMCwgMHgwMCwgMHg2MCwgMHgwMH0sCisJIHsw eDAwLCAweDA0LCAweDRBLCAweEEyLCAweDAwLCAweDVCLCAweDAwfSwKKwkgezB4MDAsIDB4MDMs IDB4QzYsIDB4Q0MsIDB4MDAsIDB4NTAsIDB4MDB9CisJIH0KK307CisKK3ZvaWQgbXRrX2hkbWlf aHdfdmlkX2JsYWNrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCSAgIGJvb2wgYmxhY2spCit7 CisJbXRrX2hkbWlfbWFzayhoZG1pLCBWSURFT19DRkdfNCwgYmxhY2sgPyBHRU5fUkdCIDogTk9S TUFMX1BBVEgsCisJCSAgICAgIFZJREVPX1NPVVJDRV9TRUwpOworfQorCit2b2lkIG10a19oZG1p X2h3X21ha2VfcmVnX3dyaXRhYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUp Cit7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZz ZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJCSAgIEhETUlfUENMS19GUkVFX1JVTiwgZW5hYmxlID8g SERNSV9QQ0xLX0ZSRUVfUlVOIDogMCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19y ZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcxQywKKwkJCSAgIEhETUlfT04g fCBBTkxHX09OLCBlbmFibGUgPyAoSERNSV9PTiB8IEFOTEdfT04pIDogMCk7Cit9CisKK3ZvaWQg bXRrX2hkbWlfaHdfMXA0X3ZlcnNpb25fZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9v bCBlbmFibGUpCit7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWkt PnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJCSAgIEhETUkyUDBfRU4sIGVuYWJsZSA/ IDAgOiBIRE1JMlAwX0VOKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfbXV0ZShzdHJ1Y3Qg bXRrX2hkbWkgKmhkbWksIGJvb2wgbXV0ZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9B VURJT19DRkcsIG11dGUgPyBBVURJT19aRVJPIDogMCwgQVVESU9fWkVSTyk7Cit9CisKK3ZvaWQg bXRrX2hkbWlfaHdfcmVzZXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXJlZ21hcF91cGRh dGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZH MUMsCisJCQkgICBIRE1JX1JTVCwgSERNSV9SU1QpOworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1p LT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMUMsCisJCQkgICBI RE1JX1JTVCwgMCk7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ0ZHMywgMCwgQ0ZHM19DT05U Uk9MX1BBQ0tFVF9ERUxBWSk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAs IGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcxQywKKwkJCSAgIEFOTEdfT04sIEFOTEdf T04pOworfQorCit2b2lkIG10a19oZG1pX2h3X2VuYWJsZV9ub3RpY2Uoc3RydWN0IG10a19oZG1p ICpoZG1pLCBib29sIGVuYWJsZV9ub3RpY2UpCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxf Q0ZHMiwgZW5hYmxlX25vdGljZSA/IENGRzJfTk9USUNFX0VOIDogMCwKKwkJICAgICAgQ0ZHMl9O T1RJQ0VfRU4pOworfQorCit2b2lkIG10a19oZG1pX2h3X3dyaXRlX2ludF9tYXNrKHN0cnVjdCBt dGtfaGRtaSAqaGRtaSwgdTMyIGludF9tYXNrKQoreworCW10a19oZG1pX3dyaXRlKGhkbWksIEdS TF9JTlRfTUFTSywgaW50X21hc2spOworfQorCit2b2lkIG10a19oZG1pX2h3X2VuYWJsZV9kdmlf bW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQoreworCW10a19oZG1pX21h c2soaGRtaSwgR1JMX0NGRzEsIGVuYWJsZSA/IENGRzFfRFZJIDogMCwgQ0ZHMV9EVkkpOworfQor Cit2b2lkIG10a19oZG1pX2h3X3NlbmRfaW5mb19mcmFtZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWks IHU4ICpidWZmZXIsIHU4IGxlbikKK3sKKwl1MzIgY3RybF9yZWcgPSBHUkxfQ1RSTDsKKwlpbnQg aTsKKwl1OCAqZnJhbWVfZGF0YTsKKwl1OCBmcmFtZV90eXBlOworCXU4IGZyYW1lX3ZlcjsKKwl1 OCBmcmFtZV9sZW47CisJdTggY2hlY2tzdW07CisJaW50IGN0cmxfZnJhbWVfZW4gPSAwOworCisJ ZnJhbWVfdHlwZSA9ICpidWZmZXI7CisJYnVmZmVyICs9IDE7CisJZnJhbWVfdmVyID0gKmJ1ZmZl cjsKKwlidWZmZXIgKz0gMTsKKwlmcmFtZV9sZW4gPSAqYnVmZmVyOworCWJ1ZmZlciArPSAxOwor CWNoZWNrc3VtID0gKmJ1ZmZlcjsKKwlidWZmZXIgKz0gMTsKKwlmcmFtZV9kYXRhID0gYnVmZmVy OworCisJZGV2X2luZm8oaGRtaS0+ZGV2LAorCQkgImZyYW1lX3R5cGU6MHgleCxmcmFtZV92ZXI6 MHgleCxmcmFtZV9sZW46MHgleCxjaGVja3N1bToweCV4XG4iLAorCQkgZnJhbWVfdHlwZSwgZnJh bWVfdmVyLCBmcmFtZV9sZW4sIGNoZWNrc3VtKTsKKworCXN3aXRjaCAoZnJhbWVfdHlwZSkgewor CWNhc2UgSERNSV9JTkZPRlJBTUVfVFlQRV9BVkk6CisJCWN0cmxfZnJhbWVfZW4gPSBDVFJMX0FW SV9FTjsKKwkJY3RybF9yZWcgPSBHUkxfQ1RSTDsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0lORk9G UkFNRV9UWVBFX1NQRDoKKwkJY3RybF9mcmFtZV9lbiA9IENUUkxfU1BEX0VOOworCQljdHJsX3Jl ZyA9IEdSTF9DVFJMOworCQlicmVhazsKKwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfQVVESU86 CisJCWN0cmxfZnJhbWVfZW4gPSBDVFJMX0FVRElPX0VOOworCQljdHJsX3JlZyA9IEdSTF9DVFJM OworCQlicmVhazsKKwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfVkVORE9SOgorCQljdHJsX2Zy YW1lX2VuID0gVlNfRU47CisJCWN0cmxfcmVnID0gR1JMX0FDUF9JU1JDX0NUUkw7CisJCWJyZWFr OworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwltdGtfaGRtaV9tYXNrKGhkbWksIGN0cmxfcmVn LCAwLCBjdHJsX2ZyYW1lX2VuKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSU5GT0ZSTV9U WVBFLCBmcmFtZV90eXBlKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSU5GT0ZSTV9WRVIs IGZyYW1lX3Zlcik7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0lORk9GUk1fTE5HLCBmcmFt ZV9sZW4pOworCisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0lGTV9QT1JULCBjaGVja3N1bSk7 CisJZm9yIChpID0gMDsgaSA8IGZyYW1lX2xlbjsgaSsrKQorCQltdGtfaGRtaV93cml0ZShoZG1p LCBHUkxfSUZNX1BPUlQsIGZyYW1lX2RhdGFbaV0pOworCisJbXRrX2hkbWlfbWFzayhoZG1pLCBj dHJsX3JlZywgY3RybF9mcmFtZV9lbiwgY3RybF9mcmFtZV9lbik7Cit9CisKK3ZvaWQgbXRrX2hk bWlfaHdfc2VuZF9hdWRfcGFja2V0KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUp Cit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfU0hJRlRfUjIsIGVuYWJsZSA/IDAgOiBBVURJ T19QQUNLRVRfT0ZGLAorCQkgICAgICBBVURJT19QQUNLRVRfT0ZGKTsKK30KKwordm9pZCBtdGtf aGRtaV9od19jb25maWdfc3lzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlyZWdtYXBfdXBk YXRlX2JpdHMoaGRtaS0+c3lzX3JlZ21hcCwgaGRtaS0+c3lzX29mZnNldCArIEhETUlfU1lTX0NG RzIwLAorCQkJICAgSERNSV9PVVRfRklGT19FTiB8IE1ITF9NT0RFX09OLCAwKTsKKwltZGVsYXko Mik7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZz ZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJCSAgIEhETUlfT1VUX0ZJRk9fRU4gfCBNSExfTU9ERV9P TiwgSERNSV9PVVRfRklGT19FTik7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfc2V0X2RlZXBfY29s b3JfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJICAgICBlbnVtIGhkbWlfZGlzcGxh eV9jb2xvcl9kZXB0aCBkZXB0aCkKK3sKKwl1MzIgdmFsID0gMDsKKworCXN3aXRjaCAoZGVwdGgp IHsKKwljYXNlIEhETUlfREVFUF9DT0xPUl8yNEJJVFM6CisJCXZhbCA9IENPTE9SXzhCSVRfTU9E RTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0RFRVBfQ09MT1JfMzBCSVRTOgorCQl2YWwgPSBDT0xP Ul8xMEJJVF9NT0RFIHwgREVFUF9DT0xPUl9FTjsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0RFRVBf Q09MT1JfMzZCSVRTOgorCQl2YWwgPSBDT0xPUl8xMkJJVF9NT0RFIHwgREVFUF9DT0xPUl9FTjsK KwkJYnJlYWs7CisJY2FzZSBIRE1JX0RFRVBfQ09MT1JfNDhCSVRTOgorCQl2YWwgPSBDT0xPUl8x NkJJVF9NT0RFIHwgREVFUF9DT0xPUl9FTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdmFsID0g Q09MT1JfOEJJVF9NT0RFOworCQlicmVhazsKKwl9CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMoaGRt aS0+c3lzX3JlZ21hcCwgaGRtaS0+c3lzX29mZnNldCArIEhETUlfU1lTX0NGRzIwLAorCQkJICAg REVFUF9DT0xPUl9NT0RFX01BU0sgfCBERUVQX0NPTE9SX0VOLCB2YWwpOworfQorCit2b2lkIG10 a19oZG1pX2h3X3NlbmRfYXZfbXV0ZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRrX2hk bWlfbWFzayhoZG1pLCBHUkxfQ0ZHNCwgMCwgQ1RSTF9BVk1VVEUpOworCW1kZWxheSgyKTsKKwlt dGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DRkc0LCBDVFJMX0FWTVVURSwgQ1RSTF9BVk1VVEUpOwor fQorCit2b2lkIG10a19oZG1pX2h3X3NlbmRfYXZfdW5tdXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRt aSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DRkc0LCBDRkc0X0FWX1VOTVVURV9FTiwK KwkJICAgICAgQ0ZHNF9BVl9VTk1VVEVfRU4gfCBDRkc0X0FWX1VOTVVURV9TRVQpOworCW1kZWxh eSgyKTsKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DRkc0LCBDRkc0X0FWX1VOTVVURV9TRVQs CisJCSAgICAgIENGRzRfQVZfVU5NVVRFX0VOIHwgQ0ZHNF9BVl9VTk1VVEVfU0VUKTsKK30KKwor dm9pZCBtdGtfaGRtaV9od19uY3RzX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wg b24pCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ1RTX0NUUkwsIG9uID8gMCA6IENUU19D VFJMX1NPRlQsCisJCSAgICAgIENUU19DVFJMX1NPRlQpOworfQorCit2b2lkIG10a19oZG1pX2h3 X25jdHNfYXV0b193cml0ZV9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJs ZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DVFNfQ1RSTCwgZW5hYmxlID8gTkNUU19X UklfQU5ZVElNRSA6IDAsCisJCSAgICAgIE5DVFNfV1JJX0FOWVRJTUUpOworfQorCit2b2lkIG10 a19oZG1pX2h3X21zaWNfc2V0dGluZyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkgICAgICBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdS TF9DRkc0LCAwLCBDRkdfTUhMX01PREUpOworCisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVf RkxBR19JTlRFUkxBQ0UgJiYKKwkgICAgbW9kZS0+Y2xvY2sgPT0gNzQyNTAgJiYKKwkgICAgbW9k ZS0+dmRpc3BsYXkgPT0gMTA4MCkKKwkJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ0ZHMiwgMCwg TUhMX0RFX1NFTCk7CisJZWxzZQorCQltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DRkcyLCBNSExf REVfU0VMLCBNSExfREVfU0VMKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2NoYW5u ZWxfc3dhcChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJICAgICAgZW51bSBoZG1pX2F1ZF9j aGFubmVsX3N3YXBfdHlwZSBzd2FwKQoreworCXU4IHN3YXBfYml0OworCisJc3dpdGNoIChzd2Fw KSB7CisJY2FzZSBIRE1JX0FVRF9TV0FQX0xSOgorCQlzd2FwX2JpdCA9IExSX1NXQVA7CisJCWJy ZWFrOworCWNhc2UgSERNSV9BVURfU1dBUF9MRkVfQ0M6CisJCXN3YXBfYml0ID0gTEZFX0NDX1NX QVA7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfU1dBUF9MU1JTOgorCQlzd2FwX2JpdCA9IExT UlNfU1dBUDsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRF9TV0FQX1JMU19SUlM6CisJCXN3YXBf Yml0ID0gUkxTX1JSU19TV0FQOworCQlicmVhazsKKwljYXNlIEhETUlfQVVEX1NXQVBfTFJfU1RB VFVTOgorCQlzd2FwX2JpdCA9IExSX1NUQVRVU19TV0FQOworCQlicmVhazsKKwlkZWZhdWx0Ogor CQlzd2FwX2JpdCA9IExGRV9DQ19TV0FQOworCQlicmVhazsKKwl9CisJbXRrX2hkbWlfbWFzayho ZG1pLCBHUkxfQ0hfU1dBUCwgc3dhcF9iaXQsIDB4ZmYpOworfQorCit2b2lkIG10a19oZG1pX2h3 X2F1ZF9yYXdfZGF0YV9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSkK K3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9NSVhfQ1RSTCwgZW5hYmxlID8gTUlYX0NUUkxf RkxBVCA6IDAsCisJCSAgICAgIE1JWF9DVFJMX0ZMQVQpOworfQorCit2b2lkIG10a19oZG1pX2h3 X2F1ZF9zZXRfYml0X251bShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJIGVudW0gaGRtaV9h dWRpb19zYW1wbGVfc2l6ZSBiaXRfbnVtKQoreworCXUzMiB2YWwgPSAwOworCisJaWYgKGJpdF9u dW0gPT0gSERNSV9BVURJT19TQU1QTEVfU0laRV8xNikKKwkJdmFsID0gQU9VVF8xNkJJVDsKKwll bHNlIGlmIChiaXRfbnVtID09IEhETUlfQVVESU9fU0FNUExFX1NJWkVfMjApCisJCXZhbCA9IEFP VVRfMjBCSVQ7CisJZWxzZSBpZiAoYml0X251bSA9PSBIRE1JX0FVRElPX1NBTVBMRV9TSVpFXzI0 KQorCQl2YWwgPSBBT1VUXzI0QklUOworCisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQU9VVF9C TlVNX1NFTCwgdmFsLCAweDAzKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2kyc19m bXQoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSBlbnVtIGhkbWlfYXVkX2kyc19mbXQgaTJz X2ZtdCkKK3sKKwl1MzIgdmFsID0gMDsKKworCXZhbCA9IG10a19oZG1pX3JlYWQoaGRtaSwgR1JM X0NGRzApOworCXZhbCAmPSB+MHgzMzsKKworCXN3aXRjaCAoaTJzX2ZtdCkgeworCWNhc2UgSERN SV9JMlNfTU9ERV9SSlRfMjRCSVQ6CisJCXZhbCB8PSAoQ0ZHMF9JMlNfTU9ERV9SVEogfCBDRkcw X0kyU19NT0RFXzI0QklUKTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0kyU19NT0RFX1JKVF8xNkJJ VDoKKwkJdmFsIHw9IChDRkcwX0kyU19NT0RFX1JUSiB8IENGRzBfSTJTX01PREVfMTZCSVQpOwor CQlicmVhazsKKwljYXNlIEhETUlfSTJTX01PREVfTEpUXzI0QklUOgorCQl2YWwgfD0gKENGRzBf STJTX01PREVfTFRKIHwgQ0ZHMF9JMlNfTU9ERV8yNEJJVCk7CisJCWJyZWFrOworCWNhc2UgSERN SV9JMlNfTU9ERV9MSlRfMTZCSVQ6CisJCXZhbCB8PSAoQ0ZHMF9JMlNfTU9ERV9MVEogfCBDRkcw X0kyU19NT0RFXzE2QklUKTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0kyU19NT0RFX0kyU18yNEJJ VDoKKwkJdmFsIHw9IChDRkcwX0kyU19NT0RFX0kyUyB8IENGRzBfSTJTX01PREVfMjRCSVQpOwor CQlicmVhazsKKwljYXNlIEhETUlfSTJTX01PREVfSTJTXzE2QklUOgorCQl2YWwgfD0gKENGRzBf STJTX01PREVfSTJTIHwgQ0ZHMF9JMlNfTU9ERV8xNkJJVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6 CisJCWJyZWFrOworCX0KKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfQ0ZHMCwgdmFsKTsKK30K Kwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2hpZ2hfYml0cmF0ZShzdHJ1Y3QgbXRrX2hkbWkg KmhkbWksIGJvb2wgZW5hYmxlKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0FPVVRfQk5V TV9TRUwsCisJCSAgICAgIGVuYWJsZSA/IEhJR0hfQklUX1JBVEVfUEFDS0VUX0FMSUdOIDogMCwK KwkJICAgICAgSElHSF9CSVRfUkFURV9QQUNLRVRfQUxJR04pOworCW10a19oZG1pX21hc2soaGRt aSwgR1JMX0FVRElPX0NGRywgZW5hYmxlID8gSElHSF9CSVRfUkFURSA6IDAsCisJCSAgICAgIEhJ R0hfQklUX1JBVEUpOworfQorCit2b2lkIG10a19oZG1pX3BoeV9hdWRfZHN0X25vcm1hbF9kb3Vi bGVfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJICAgICAgIGJvb2wgZW5hYmxl KQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0FVRElPX0NGRywgZW5hYmxlID8gRFNUX05P Uk1BTF9ET1VCTEUgOiAwLAorCQkgICAgICBEU1RfTk9STUFMX0RPVUJMRSk7Cit9CisKK3ZvaWQg bXRrX2hkbWlfaHdfYXVkX2RzdF9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVu YWJsZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9BVURJT19DRkcsIGVuYWJsZSA/IFNB Q0RfRFNUIDogMCwgU0FDRF9EU1QpOworfQorCit2b2lkIG10a19oZG1pX2h3X2F1ZF9kc2RfZW5h YmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJbXRrX2hkbWlfbWFz ayhoZG1pLCBHUkxfQVVESU9fQ0ZHLCBlbmFibGUgPyBTQUNEX1NFTCA6IDAsIFNBQ0RfU0VMKTsK K30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2kyc19jaGFuX251bShzdHJ1Y3QgbXRrX2hk bWkgKmhkbWksCisJCQkJICAgICAgZW51bSBoZG1pX2F1ZF9jaGFubmVsX3R5cGUgY2hhbm5lbF90 eXBlLAorCQkJCSAgICAgIHU4IGNoYW5uZWxfY291bnQpCit7CisJdTggdmFsXzEsIHZhbF8yLCB2 YWxfMywgdmFsXzQ7CisKKwlpZiAoY2hhbm5lbF9jb3VudCA9PSAyKSB7CisJCXZhbF8xID0gMHgw NDsKKwkJdmFsXzIgPSAweDUwOworCX0gZWxzZSBpZiAoY2hhbm5lbF9jb3VudCA9PSAzIHx8IGNo YW5uZWxfY291bnQgPT0gNCkgeworCQlpZiAoY2hhbm5lbF9jb3VudCA9PSA0ICYmCisJCSAgICAo Y2hhbm5lbF90eXBlID09IEhETUlfQVVEX0NIQU5fVFlQRV8zXzBfTFJTIHx8CisJCSAgICBjaGFu bmVsX3R5cGUgPT0gSERNSV9BVURfQ0hBTl9UWVBFXzRfMCkpIHsKKwkJCXZhbF8xID0gMHgxNDsK KwkJfSBlbHNlIHsKKwkJCXZhbF8xID0gMHgwYzsKKwkJfQorCQl2YWxfMiA9IDB4NTA7CisJfSBl bHNlIGlmIChjaGFubmVsX2NvdW50ID09IDYgfHwgY2hhbm5lbF9jb3VudCA9PSA1KSB7CisJCWlm IChjaGFubmVsX2NvdW50ID09IDYgJiYKKwkJICAgIGNoYW5uZWxfdHlwZSAhPSBIRE1JX0FVRF9D SEFOX1RZUEVfNV8xICYmCisJCSAgICBjaGFubmVsX3R5cGUgIT0gSERNSV9BVURfQ0hBTl9UWVBF XzRfMV9DTFJTKSB7CisJCQl2YWxfMSA9IDB4M2M7CisJCQl2YWxfMiA9IDB4NTA7CisJCX0gZWxz ZSB7CisJCQl2YWxfMSA9IDB4MWM7CisJCQl2YWxfMiA9IDB4NTA7CisJCX0KKwl9IGVsc2UgaWYg KGNoYW5uZWxfY291bnQgPT0gOCB8fCBjaGFubmVsX2NvdW50ID09IDcpIHsKKwkJdmFsXzEgPSAw eDNjOworCQl2YWxfMiA9IDB4NTA7CisJfSBlbHNlIHsKKwkJdmFsXzEgPSAweDA0OworCQl2YWxf MiA9IDB4NTA7CisJfQorCisJdmFsXzMgPSAweGM2OworCXZhbF80ID0gMHhmYTsKKworCW10a19o ZG1pX3dyaXRlKGhkbWksIEdSTF9DSF9TVzAsIHZhbF8yKTsKKwltdGtfaGRtaV93cml0ZShoZG1p LCBHUkxfQ0hfU1cxLCB2YWxfMyk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0NIX1NXMiwg dmFsXzQpOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JMlNfVVYsIHZhbF8xKTsKK30KKwor dm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2lucHV0X3R5cGUoc3RydWN0IG10a19oZG1pICpoZG1p LAorCQkJCSAgICBlbnVtIGhkbWlfYXVkX2lucHV0X3R5cGUgaW5wdXRfdHlwZSkKK3sKKwl1MzIg dmFsID0gMDsKKworCXZhbCA9IG10a19oZG1pX3JlYWQoaGRtaSwgR1JMX0NGRzEpOworCWlmIChp bnB1dF90eXBlID09IEhETUlfQVVEX0lOUFVUX0kyUyAmJgorCSAgICAodmFsICYgQ0ZHMV9TUERJ RikgPT0gQ0ZHMV9TUERJRikgeworCQl2YWwgJj0gfkNGRzFfU1BESUY7CisJfSBlbHNlIGlmIChp bnB1dF90eXBlID09IEhETUlfQVVEX0lOUFVUX1NQRElGICYmCisJCSh2YWwgJiBDRkcxX1NQRElG KSA9PSAwKSB7CisJCXZhbCB8PSBDRkcxX1NQRElGOworCX0KKwltdGtfaGRtaV93cml0ZShoZG1p LCBHUkxfQ0ZHMSwgdmFsKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2NoYW5uZWxf c3RhdHVzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJdTggKmxfY2hhbl9zdGF0dXMsIHU4 ICpyX2NoYW5fc3RhdHVzLAorCQkJCQllbnVtIGhkbWlfYXVkaW9fc2FtcGxlX2ZyZXF1ZW5jeQor CQkJCQlhdWRfaGRtaV9mcykKK3sKKwl1OCBsX3N0YXR1c1s1XTsKKwl1OCByX3N0YXR1c1s1XTsK Kwl1OCB2YWwgPSAwOworCisJbF9zdGF0dXNbMF0gPSBsX2NoYW5fc3RhdHVzWzBdOworCWxfc3Rh dHVzWzFdID0gbF9jaGFuX3N0YXR1c1sxXTsKKwlsX3N0YXR1c1syXSA9IGxfY2hhbl9zdGF0dXNb Ml07CisJcl9zdGF0dXNbMF0gPSByX2NoYW5fc3RhdHVzWzBdOworCXJfc3RhdHVzWzFdID0gcl9j aGFuX3N0YXR1c1sxXTsKKwlyX3N0YXR1c1syXSA9IHJfY2hhbl9zdGF0dXNbMl07CisKKwlsX3N0 YXR1c1swXSAmPSB+MHgwMjsKKwlyX3N0YXR1c1swXSAmPSB+MHgwMjsKKworCXZhbCA9IGxfY2hh bl9zdGF0dXNbM10gJiAweGYwOworCXN3aXRjaCAoYXVkX2hkbWlfZnMpIHsKKwljYXNlIEhETUlf QVVESU9fU0FNUExFX0ZSRVFVRU5DWV8zMjAwMDoKKwkJdmFsIHw9IDB4MDM7CisJCWJyZWFrOwor CWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzQ0MTAwOgorCQlicmVhazsKKwljYXNl IEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV84ODIwMDoKKwkJdmFsIHw9IDB4MDg7CisJCWJy ZWFrOworCWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzk2MDAwOgorCQl2YWwgfD0g MHgwYTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfNDgwMDA6 CisJCXZhbCB8PSAweDAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWwgfD0gMHgwMjsKKwkJ YnJlYWs7CisJfQorCWxfc3RhdHVzWzNdID0gdmFsOworCXJfc3RhdHVzWzNdID0gdmFsOworCisJ dmFsID0gbF9jaGFuX3N0YXR1c1s0XTsKKwl2YWwgfD0gKCh+KGxfc3RhdHVzWzNdICYgMHgwZikp IDw8IDQpOworCWxfc3RhdHVzWzRdID0gdmFsOworCXJfc3RhdHVzWzRdID0gdmFsOworCisJdmFs ID0gbF9zdGF0dXNbMF07CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0kyU19DX1NUQTAsIHZh bCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0xfU1RBVFVTXzAsIHZhbCk7CisKKwl2YWwg PSByX3N0YXR1c1swXTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfUl9TVEFUVVNfMCwgdmFs KTsKKworCXZhbCA9IGxfc3RhdHVzWzFdOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JMlNf Q19TVEExLCB2YWwpOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9MX1NUQVRVU18xLCB2YWwp OworCisJdmFsID0gcl9zdGF0dXNbMV07CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX1JfU1RB VFVTXzEsIHZhbCk7CisKKwl2YWwgPSBsX3N0YXR1c1syXTsKKwltdGtfaGRtaV93cml0ZShoZG1p LCBHUkxfSTJTX0NfU1RBMiwgdmFsKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTF9TVEFU VVNfMiwgdmFsKTsKKworCXZhbCA9IHJfc3RhdHVzWzJdOworCW10a19oZG1pX3dyaXRlKGhkbWks IEdSTF9SX1NUQVRVU18yLCB2YWwpOworCisJdmFsID0gbF9zdGF0dXNbM107CisJbXRrX2hkbWlf d3JpdGUoaGRtaSwgR1JMX0kyU19DX1NUQTMsIHZhbCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwg R1JMX0xfU1RBVFVTXzMsIHZhbCk7CisKKwl2YWwgPSByX3N0YXR1c1szXTsKKwltdGtfaGRtaV93 cml0ZShoZG1pLCBHUkxfUl9TVEFUVVNfMywgdmFsKTsKKworCXZhbCA9IGxfc3RhdHVzWzRdOwor CW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JMlNfQ19TVEE0LCB2YWwpOworCW10a19oZG1pX3dy aXRlKGhkbWksIEdSTF9MX1NUQVRVU180LCB2YWwpOworCisJdmFsID0gcl9zdGF0dXNbNF07CisJ bXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX1JfU1RBVFVTXzQsIHZhbCk7CisKKwlmb3IgKHZhbCA9 IDA7IHZhbCA8IDE5OyB2YWwrKykgeworCQltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTF9TVEFU VVNfNSArIHZhbCAqIDQsIDApOworCQltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfUl9TVEFUVVNf NSArIHZhbCAqIDQsIDApOworCX0KK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc3JjX3JlZW5h YmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gbXRrX2hk bWlfcmVhZChoZG1pLCBHUkxfTUlYX0NUUkwpOworCWlmICh2YWwgJiBNSVhfQ1RSTF9TUkNfRU4p IHsKKwkJdmFsICY9IH5NSVhfQ1RSTF9TUkNfRU47CisJCW10a19oZG1pX3dyaXRlKGhkbWksIEdS TF9NSVhfQ1RSTCwgdmFsKTsKKwkJdXNsZWVwX3JhbmdlKDI1NSwgNTEyKTsKKwkJdmFsIHw9IE1J WF9DVFJMX1NSQ19FTjsKKwkJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX01JWF9DVFJMLCB2YWwp OworCX0KK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc3JjX29mZihzdHJ1Y3QgbXRrX2hkbWkg KmhkbWkpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IG10a19oZG1pX3JlYWQoaGRtaSwgR1JMX01J WF9DVFJMKTsKKwl2YWwgJj0gfk1JWF9DVFJMX1NSQ19FTjsKKwltdGtfaGRtaV93cml0ZShoZG1p LCBHUkxfTUlYX0NUUkwsIHZhbCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX1NISUZUX0wx LCAweDAwKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X21jbGsoc3RydWN0IG10a19o ZG1pICpoZG1pLCBlbnVtIGhkbWlfYXVkX21jbGsgbWNsaykKK3sKKwl1MzIgdmFsOworCisJdmFs ID0gbXRrX2hkbWlfcmVhZChoZG1pLCBHUkxfQ0ZHNSk7CisJdmFsICY9IENGRzVfQ0RfUkFUSU9f TUFTSzsKKworCXN3aXRjaCAobWNsaykgeworCWNhc2UgSERNSV9BVURfTUNMS18xMjhGUzoKKwkJ dmFsIHw9IENGRzVfRlMxMjg7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNMS18yNTZGUzoK KwkJdmFsIHw9IENGRzVfRlMyNTY7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNMS18zODRG UzoKKwkJdmFsIHw9IENGRzVfRlMzODQ7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNMS181 MTJGUzoKKwkJdmFsIHw9IENGRzVfRlM1MTI7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNM S183NjhGUzoKKwkJdmFsIHw9IENGRzVfRlM3Njg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZh bCB8PSBDRkc1X0ZTMjU2OworCQlicmVhazsKKwl9CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JM X0NGRzUsIHZhbCk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX2FjbGtfaW52X2VuYWJsZShz dHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQoreworCXUzMiB2YWw7CisKKwl2YWwg PSBtdGtfaGRtaV9yZWFkKGhkbWksIEdSTF9DRkcyKTsKKwlpZiAoZW5hYmxlKQorCQl2YWwgfD0g MHg4MDsKKwllbHNlCisJCXZhbCAmPSB+MHg4MDsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxf Q0ZHMiwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgZG9faGRtaV9od19hdWRfc2V0X25jdHMoc3Ry dWN0IG10a19oZG1pICpoZG1pLAorCQkJCSAgICBlbnVtIGhkbWlfZGlzcGxheV9jb2xvcl9kZXB0 aCBkZXB0aCwKKwkJCQkgICAgZW51bSBoZG1pX2F1ZGlvX3NhbXBsZV9mcmVxdWVuY3kgZnJlcSwK KwkJCQkgICAgaW50IHBpeCkKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbFtOQ1RTX0JZVEVTXTsKKwl1 bnNpZ25lZCBpbnQgdGVtcDsKKwlpbnQgaSA9IDA7CisKKwltdGtfaGRtaV93cml0ZShoZG1pLCBH UkxfTkNUUywgMCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX05DVFMsIDApOworCW10a19o ZG1pX3dyaXRlKGhkbWksIEdSTF9OQ1RTLCAwKTsKKwltZW1zZXQodmFsLCAwLCBzaXplb2YodmFs KSk7CisKKwlpZiAoZGVwdGggPT0gSERNSV9ERUVQX0NPTE9SXzI0QklUUykgeworCQlmb3IgKGkg PSAwOyBpIDwgTkNUU19CWVRFUzsgaSsrKSB7CisJCQlpZiAoKGZyZXEgPCA4KSAmJiAocGl4IDwg OSkpCisJCQkJdmFsW2ldID0gSERNSV9OQ1RTW2ZyZXEgLSAxXVtwaXhdW2ldOworCQl9CisJCXRl bXAgPSAodmFsWzBdIDw8IDI0KSB8ICh2YWxbMV0gPDwgMTYpIHwKKwkJCSh2YWxbMl0gPDwgOCkg fCAodmFsWzNdKTsJLyogQ1RTICovCisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IE5DVFNf QllURVM7IGkrKykgeworCQkJaWYgKChmcmVxIDwgNykgJiYgKHBpeCA8IDkpKQorCQkJCXZhbFtp XSA9IEhETUlfTkNUU1tmcmVxIC0gMV1bcGl4XVtpXTsKKwkJfQorCisJCXRlbXAgPQorCQkgICAg KHZhbFswXSA8PCAyNCkgfCAodmFsWzFdIDw8IDE2KSB8ICh2YWxbMl0gPDwgOCkgfCAodmFsWzNd KTsKKworCQlpZiAoZGVwdGggPT0gSERNSV9ERUVQX0NPTE9SXzMwQklUUykKKwkJCXRlbXAgPSAo dGVtcCA+PiAyKSAqIDU7CisJCWVsc2UgaWYgKGRlcHRoID09IEhETUlfREVFUF9DT0xPUl8zNkJJ VFMpCisJCQl0ZW1wID0gKHRlbXAgPj4gMSkgKiAzOworCQllbHNlIGlmIChkZXB0aCA9PSBIRE1J X0RFRVBfQ09MT1JfNDhCSVRTKQorCQkJdGVtcCA9ICh0ZW1wIDw8IDEpOworCisJCXZhbFswXSA9 ICh0ZW1wID4+IDI0KSAmIDB4ZmY7CisJCXZhbFsxXSA9ICh0ZW1wID4+IDE2KSAmIDB4ZmY7CisJ CXZhbFsyXSA9ICh0ZW1wID4+IDgpICYgMHhmZjsKKwkJdmFsWzNdID0gKHRlbXApICYgMHhmZjsK Kwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTkNUU19CWVRFUzsgaSsrKQorCQltdGtfaGRtaV93cml0 ZShoZG1pLCBHUkxfTkNUUywgdmFsW2ldKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0 X25jdHMoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJICAgICAgZW51bSBoZG1pX2Rpc3BsYXlf Y29sb3JfZGVwdGggZGVwdGgsCisJCQkgICAgICBlbnVtIGhkbWlfYXVkaW9fc2FtcGxlX2ZyZXF1 ZW5jeSBmcmVxLCBpbnQgY2xvY2spCit7CisJaW50IHBpeCA9IDA7CisKKwlzd2l0Y2ggKGNsb2Nr KSB7CisJY2FzZSAyNzAwMDoKKwkJcGl4ID0gMDsKKwkJYnJlYWs7CisJY2FzZSA3NDE3NToKKwkJ cGl4ID0gMjsKKwkJYnJlYWs7CisJY2FzZSA3NDI1MDoKKwkJcGl4ID0gMzsKKwkJYnJlYWs7CisJ Y2FzZSAxNDgzNTA6CisJCXBpeCA9IDQ7CisJCWJyZWFrOworCWNhc2UgMTQ4NTAwOgorCQlwaXgg PSA1OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwaXggPSAwOworCQlicmVhazsKKwl9CisKKwlt dGtfaGRtaV9tYXNrKGhkbWksIERVTU1ZXzMwNCwgQVVESU9fSTJTX05DVFNfU0VMXzY0LAorCQkg ICAgICBBVURJT19JMlNfTkNUU19TRUwpOworCWRvX2hkbWlfaHdfYXVkX3NldF9uY3RzKGhkbWks IGRlcHRoLCBmcmVxLCBwaXgpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19oZG1pX2h3LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfaHcu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2VkODBhCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2h3LmgKQEAgLTAsMCAr MSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRo b3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfTVRLX0hETUlfSFdfSAor I2RlZmluZSBfTVRLX0hETUlfSFdfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNs dWRlIDxsaW51eC9oZG1pLmg+CisjaW5jbHVkZSAibXRrX2hkbWkuaCIKKwordm9pZCBtdGtfaGRt aV9od192aWRfYmxhY2soc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGJsYWNrKTsKK3ZvaWQg bXRrX2hkbWlfaHdfYXVkX211dGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIG11dGUpOwor dm9pZCBtdGtfaGRtaV9od19zZW5kX2luZm9fZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1pLCB1 OCAqYnVmZmVyLCB1OCBsZW4pOwordm9pZCBtdGtfaGRtaV9od19zZW5kX2F1ZF9wYWNrZXQoc3Ry dWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSk7CitpbnQgbXRrX2hkbWlfaHdfc2V0X2Ns b2NrKHN0cnVjdCBtdGtfaGRtaSAqaGN0eCwgdTMyIGNsb2NrKTsKK3ZvaWQgbXRrX2hkbWlfaHdf Y29uZmlnX3N5cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOwordm9pZCBtdGtfaGRtaV9od19zZXRf ZGVlcF9jb2xvcl9tb2RlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgIGVudW0gaGRt aV9kaXNwbGF5X2NvbG9yX2RlcHRoIGRlcHRoKTsKK3ZvaWQgbXRrX2hkbWlfaHdfc2VuZF9hdl9t dXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1pX2h3X3NlbmRfYXZfdW5t dXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1pX2h3X25jdHNfZW5hYmxl KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBvbik7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9z ZXRfY2hhbm5lbF9zd2FwKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgICBlbnVtIGhk bWlfYXVkX2NoYW5uZWxfc3dhcF90eXBlIHN3YXApOwordm9pZCBtdGtfaGRtaV9od19hdWRfcmF3 X2RhdGFfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBt dGtfaGRtaV9od19hdWRfc2V0X2JpdF9udW0oc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSBl bnVtIGhkbWlfYXVkaW9fc2FtcGxlX3NpemUgYml0X251bSk7Cit2b2lkIG10a19oZG1pX2h3X2F1 ZF9zZXRfaGlnaF9iaXRyYXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwor dm9pZCBtdGtfaGRtaV9waHlfYXVkX2RzdF9ub3JtYWxfZG91YmxlX2VuYWJsZShzdHJ1Y3QgbXRr X2hkbWkgKmhkbWksCisJCQkJCSAgICAgICBib29sIGVuYWJsZSk7Cit2b2lkIG10a19oZG1pX2h3 X2F1ZF9kc3RfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9p ZCBtdGtfaGRtaV9od19hdWRfZHNkX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wg ZW5hYmxlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9pMnNfZm10KHN0cnVjdCBtdGtfaGRt aSAqaGRtaSwKKwkJCQkgZW51bSBoZG1pX2F1ZF9pMnNfZm10IGkyc19mbXQpOwordm9pZCBtdGtf aGRtaV9od19hdWRfc2V0X2kyc19jaGFuX251bShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJ ICAgICAgZW51bSBoZG1pX2F1ZF9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJCSAgICAg IHU4IGNoYW5uZWxfY291bnQpOwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2lucHV0X3R5cGUo c3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSAgICBlbnVtIGhkbWlfYXVkX2lucHV0X3R5cGUg aW5wdXRfdHlwZSk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfY2hhbm5lbF9zdGF0dXMoc3Ry dWN0IG10a19oZG1pICpoZG1pLAorCQkJCQl1OCAqbF9jaGFuX3N0YXR1cywgdTggKnJfY2hhbl9z dGF1cywKKwkJCQkJZW51bSBoZG1pX2F1ZGlvX3NhbXBsZV9mcmVxdWVuY3kKKwkJCQkJYXVkX2hk bWlfZnMpOwordm9pZCBtdGtfaGRtaV9od19hdWRfc3JjX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkg KmhkbWksIGJvb2wgZW5hYmxlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9tY2xrKHN0cnVj dCBtdGtfaGRtaSAqaGRtaSwgZW51bSBoZG1pX2F1ZF9tY2xrIG1jbGspOwordm9pZCBtdGtfaGRt aV9od19hdWRfc3JjX29mZihzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOwordm9pZCBtdGtfaGRtaV9o d19hdWRfc3JjX3JlZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1p X2h3X2F1ZF9hY2xrX2ludl9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJs ZSk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfbmN0cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWks CisJCQkgICAgICBlbnVtIGhkbWlfZGlzcGxheV9jb2xvcl9kZXB0aCBkZXB0aCwKKwkJCSAgICAg IGVudW0gaGRtaV9hdWRpb19zYW1wbGVfZnJlcXVlbmN5IGZyZXEsCisJCQkgICAgICBpbnQgY2xv Y2spOworYm9vbCBtdGtfaGRtaV9od19pc19ocGRfaGlnaChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkp Owordm9pZCBtdGtfaGRtaV9od19tYWtlX3JlZ193cml0YWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhk bWksIGJvb2wgZW5hYmxlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfcmVzZXQoc3RydWN0IG10a19oZG1p ICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdfZW5hYmxlX25vdGljZShzdHJ1Y3QgbXRrX2hkbWkg KmhkbWksIGJvb2wgZW5hYmxlX25vdGljZSk7Cit2b2lkIG10a19oZG1pX2h3X3dyaXRlX2ludF9t YXNrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgdTMyIGludF9tYXNrKTsKK3ZvaWQgbXRrX2hkbWlf aHdfZW5hYmxlX2R2aV9tb2RlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwor dm9pZCBtdGtfaGRtaV9od19uY3RzX2F1dG9fd3JpdGVfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAq aGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtfaGRtaV9od19tc2ljX3NldHRpbmcoc3RydWN0 IG10a19oZG1pICpoZG1pLAorCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUp Owordm9pZCBtdGtfaGRtaV9od18xcDRfdmVyc2lvbl9lbmFibGUoc3RydWN0IG10a19oZG1pICpo ZG1pLCBib29sIGVuYWJsZSk7Cit2b2lkIG10a19oZG1pX2h3X2h0cGxnX2lycV9lbmFibGUoc3Ry dWN0IG10a19oZG1pICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdfaHRwbGdfaXJxX2Rpc2FibGUo c3RydWN0IG10a19oZG1pICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdfY2xlYXJfaHRwbGdfaXJx KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7CisKKyNlbmRpZiAvKiBfTVRLX0hETUlfSFdfSCAqLwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3JlZ3MuaCBiL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uZGU3ZWUyMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzLmgKQEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiBD b3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUu cWl1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX01US19IRE1JX1JFR1NfSAorI2RlZmluZSBfTVRLX0hE TUlfUkVHU19ICisKKyNkZWZpbmUgR1JMX0lOVF9NQVNLCQkweDE4CisjZGVmaW5lIEdSTF9JRk1f UE9SVAkJMHgxODgKKyNkZWZpbmUgR1JMX0NIX1NXQVAJCTB4MTk4CisjZGVmaW5lIExSX1NXQVAJ CQkJQklUKDApCisjZGVmaW5lIExGRV9DQ19TV0FQCQkJQklUKDEpCisjZGVmaW5lIExTUlNfU1dB UAkJCUJJVCgyKQorI2RlZmluZSBSTFNfUlJTX1NXQVAJCQlCSVQoMykKKyNkZWZpbmUgTFJfU1RB VFVTX1NXQVAJCQlCSVQoNCkKKyNkZWZpbmUgR1JMX0kyU19DX1NUQTAJCTB4MTQwCisjZGVmaW5l IEdSTF9JMlNfQ19TVEExCQkweDE0NAorI2RlZmluZSBHUkxfSTJTX0NfU1RBMgkJMHgxNDgKKyNk ZWZpbmUgR1JMX0kyU19DX1NUQTMJCTB4MTRDCisjZGVmaW5lIEdSTF9JMlNfQ19TVEE0CQkweDE1 MAorI2RlZmluZSBHUkxfSTJTX1VWCQkweDE1NAorI2RlZmluZSBHUkxfQUNQX0lTUkNfQ1RSTAkw eDE1OAorI2RlZmluZSBWU19FTgkJCQlCSVQoMCkKKyNkZWZpbmUgQUNQX0VOCQkJCUJJVCgxKQor I2RlZmluZSBJU1JDMV9FTgkJCUJJVCgyKQorI2RlZmluZSBJU1JDMl9FTgkJCUJJVCgzKQorI2Rl ZmluZSBHQU1VVF9FTgkJCUJJVCg0KQorI2RlZmluZSBHUkxfQ1RTX0NUUkwJCTB4MTYwCisjZGVm aW5lIENUU19DVFJMX1NPRlQJCQlCSVQoMCkKKyNkZWZpbmUgR1JMX0lOVAkJCTB4MTQKKyNkZWZp bmUgSU5UX01ESQkJCQlCSVQoMCkKKyNkZWZpbmUgSU5UX0hEQ1AJCQlCSVQoMSkKKyNkZWZpbmUg SU5UX0ZJRk9fTwkJCUJJVCgyKQorI2RlZmluZSBJTlRfRklGT19VCQkJQklUKDMpCisjZGVmaW5l IElOVF9JRk1fRVJSCQkJQklUKDQpCisjZGVmaW5lIElOVF9JTkZfRE9ORQkJCUJJVCg1KQorI2Rl ZmluZSBJTlRfTkNUU19ET05FCQkJQklUKDYpCisjZGVmaW5lIElOVF9DVFJMX1BLVF9ET05FCQlC SVQoNykKKyNkZWZpbmUgR1JMX0lOVF9NQVNLCQkweDE4CisjZGVmaW5lIEdSTF9DVFJMCQkweDFD CisjZGVmaW5lIENUUkxfR0VOX0VOCQkJQklUKDIpCisjZGVmaW5lIENUUkxfU1BEX0VOCQkJQklU KDMpCisjZGVmaW5lIENUUkxfTVBFR19FTgkJCUJJVCg0KQorI2RlZmluZSBDVFJMX0FVRElPX0VO CQkJQklUKDUpCisjZGVmaW5lIENUUkxfQVZJX0VOCQkJQklUKDYpCisjZGVmaW5lIENUUkxfQVZN VVRFCQkJQklUKDcpCisjZGVmaW5lCUdSTF9TVEFUVVMJCTB4MjAKKyNkZWZpbmUgU1RBVFVTX0hU UExHCQkJQklUKDApCisjZGVmaW5lIFNUQVRVU19QT1JECQkJQklUKDEpCisjZGVmaW5lIEdSTF9E SVZOCQkweDE3MAorI2RlZmluZSBOQ1RTX1dSSV9BTllUSU1FCQlCSVQoNikKKyNkZWZpbmUgR1JM X0FVRElPX0NGRwkJMHgxN0MKKyNkZWZpbmUgQVVESU9fWkVSTwkJCUJJVCgwKQorI2RlZmluZSBI SUdIX0JJVF9SQVRFCQkJQklUKDEpCisjZGVmaW5lIFNBQ0RfRFNUCQkJQklUKDIpCisjZGVmaW5l IERTVF9OT1JNQUxfRE9VQkxFCQlCSVQoMykKKyNkZWZpbmUgRFNEX0lOVgkJCQlCSVQoNCkKKyNk ZWZpbmUgTFJfSU5WCQkJCUJJVCg1KQorI2RlZmluZSBMUl9NSVgJCQkJQklUKDYpCisjZGVmaW5l IFNBQ0RfU0VMCQkJQklUKDcpCisjZGVmaW5lIEdSTF9OQ1RTCQkweDE4NAorI2RlZmluZSBHUkxf Q0hfU1cwCQkweDE4QworI2RlZmluZSBHUkxfQ0hfU1cxCQkweDE5MAorI2RlZmluZSBHUkxfQ0hf U1cyCQkweDE5NAorI2RlZmluZSBHUkxfSU5GT0ZSTV9WRVIJCTB4MTlDCisjZGVmaW5lIEdSTF9J TkZPRlJNX1RZUEUJMHgxQTAKKyNkZWZpbmUgR1JMX0lORk9GUk1fTE5HCQkweDFBNAorI2RlZmlu ZSBHUkxfTUlYX0NUUkwJCTB4MUI0CisjZGVmaW5lIE1JWF9DVFJMX1NSQ19FTgkJCUJJVCgwKQor I2RlZmluZSBCWVBBU1NfVk9MVU1FCQkJQklUKDEpCisjZGVmaW5lIE1JWF9DVFJMX0ZMQVQJCQlC SVQoNykKKyNkZWZpbmUgR1JMX0FPVVRfQk5VTV9TRUwJMHgxQzQKKyNkZWZpbmUgQU9VVF8yNEJJ VAkJCTB4MDAKKyNkZWZpbmUgQU9VVF8yMEJJVAkJCTB4MDIKKyNkZWZpbmUgQU9VVF8xNkJJVAkJ CTB4MDMKKyNkZWZpbmUgSElHSF9CSVRfUkFURV9QQUNLRVRfQUxJR04JKDB4MyA8PCA2KQorI2Rl ZmluZSBHUkxfU0hJRlRfTDEJCTB4MUMwCisjZGVmaW5lIEdSTF9TSElGVF9SMgkJMHgxQjAKKyNk ZWZpbmUgQVVESU9fUEFDS0VUX09GRgkJQklUKDYpCisjZGVmaW5lIEdSTF9DRkcwCQkweDI0Cisj ZGVmaW5lIENGRzBfSTJTX01PREVfUlRKCQkweDEKKyNkZWZpbmUgQ0ZHMF9JMlNfTU9ERV9MVEoJ CTB4MAorI2RlZmluZSBDRkcwX0kyU19NT0RFX0kyUwkJMHgyCisjZGVmaW5lIENGRzBfSTJTX01P REVfMjRCSVQJCTB4MDAKKyNkZWZpbmUgQ0ZHMF9JMlNfTU9ERV8xNkJJVAkJMHgxMAorI2RlZmlu ZSBHUkxfQ0ZHMQkJMHgyOAorI2RlZmluZSBDRkcxX0VER19TRUwJCQlCSVQoMCkKKyNkZWZpbmUg Q0ZHMV9TUERJRgkJCUJJVCgxKQorI2RlZmluZSBDRkcxX0RWSQkJCUJJVCgyKQorI2RlZmluZSBD RkcxX0hEQ1BfREVCVUcJCQlCSVQoMykKKyNkZWZpbmUgR1JMX0NGRzIJCTB4MmMKKyNkZWZpbmUg Q0ZHMl9OT1RJQ0VfRU4JCQlCSVQoNikKKyNkZWZpbmUgTUhMX0RFX1NFTAkJCUJJVCgzKQorI2Rl ZmluZSBHUkxfQ0ZHMwkJMHgzMAorI2RlZmluZSBDRkczX0FFU19LRVlfSU5ERVhfTUFTSwkJMHgz ZgorI2RlZmluZSBDRkczX0NPTlRST0xfUEFDS0VUX0RFTEFZCUJJVCg2KQorI2RlZmluZSBDRkcz X0tTVl9MT0FEX1NUQVJUCQlCSVQoNykKKyNkZWZpbmUgR1JMX0NGRzQJCTB4MzQKKyNkZWZpbmUg Q0ZHNF9BRVNfS0VZX0xPQUQJCUJJVCg0KQorI2RlZmluZSBDRkc0X0FWX1VOTVVURV9FTgkJQklU KDUpCisjZGVmaW5lIENGRzRfQVZfVU5NVVRFX1NFVAkJQklUKDYpCisjZGVmaW5lIENGR19NSExf TU9ERQkJCUJJVCg3KQorI2RlZmluZSBHUkxfQ0ZHNQkJMHgzOAorI2RlZmluZSBDRkc1X0NEX1JB VElPX01BU0sJMHg4RgorI2RlZmluZSBDRkc1X0ZTMTI4CQkJKDB4MSA8PCA0KQorI2RlZmluZSBD Rkc1X0ZTMjU2CQkJKDB4MiA8PCA0KQorI2RlZmluZSBDRkc1X0ZTMzg0CQkJKDB4MyA8PCA0KQor I2RlZmluZSBDRkc1X0ZTNTEyCQkJKDB4NCA8PCA0KQorI2RlZmluZSBDRkc1X0ZTNzY4CQkJKDB4 NiA8PCA0KQorI2RlZmluZSBEVU1NWV8zMDQJCTB4MzA0CisjZGVmaW5lIENITU9fU0VMCQkJKDB4 Mzw8MikKKyNkZWZpbmUgQ0hNMV9TRUwJCQkoMHgzPDw0KQorI2RlZmluZSBDSE0yX1NFTAkJCSgw eDM8PDYpCisjZGVmaW5lIEFVRElPX0kyU19OQ1RTX1NFTAkJQklUKDEpCisjZGVmaW5lIEFVRElP X0kyU19OQ1RTX1NFTF82NAkJKDE8PDEpCisjZGVmaW5lIEFVRElPX0kyU19OQ1RTX1NFTF8xMjgJ CSgwPDwxKQorI2RlZmluZSBORVdfR0NQX0NUUkwJCQlCSVQoMCkKKyNkZWZpbmUgTkVXX0dDUF9D VFJMX01FUkdFCQlCSVQoMCkKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzAJCTB4MjAwCisjZGVmaW5l IEdSTF9MX1NUQVRVU18xCQkweDIwNAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMgkJMHgyMDgKKyNk ZWZpbmUgR1JMX0xfU1RBVFVTXzMJCTB4MjBjCisjZGVmaW5lIEdSTF9MX1NUQVRVU180CQkweDIx MAorI2RlZmluZSBHUkxfTF9TVEFUVVNfNQkJMHgyMTQKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzYJ CTB4MjE4CisjZGVmaW5lIEdSTF9MX1NUQVRVU183CQkweDIxYworI2RlZmluZSBHUkxfTF9TVEFU VVNfOAkJMHgyMjAKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzkJCTB4MjI0CisjZGVmaW5lIEdSTF9M X1NUQVRVU18xMAkJMHgyMjgKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzExCQkweDIyYworI2RlZmlu ZSBHUkxfTF9TVEFUVVNfMTIJCTB4MjMwCisjZGVmaW5lIEdSTF9MX1NUQVRVU18xMwkJMHgyMzQK KyNkZWZpbmUgR1JMX0xfU1RBVFVTXzE0CQkweDIzOAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMTUJ CTB4MjNjCisjZGVmaW5lIEdSTF9MX1NUQVRVU18xNgkJMHgyNDAKKyNkZWZpbmUgR1JMX0xfU1RB VFVTXzE3CQkweDI0NAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMTgJCTB4MjQ4CisjZGVmaW5lIEdS TF9MX1NUQVRVU18xOQkJMHgyNGMKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzIwCQkweDI1MAorI2Rl ZmluZSBHUkxfTF9TVEFUVVNfMjEJCTB4MjU0CisjZGVmaW5lIEdSTF9MX1NUQVRVU18yMgkJMHgy NTgKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzIzCQkweDI1YworI2RlZmluZSBHUkxfUl9TVEFUVVNf MAkJMHgyNjAKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzEJCTB4MjY0CisjZGVmaW5lIEdSTF9SX1NU QVRVU18yCQkweDI2OAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMwkJMHgyNmMKKyNkZWZpbmUgR1JM X1JfU1RBVFVTXzQJCTB4MjcwCisjZGVmaW5lIEdSTF9SX1NUQVRVU181CQkweDI3NAorI2RlZmlu ZSBHUkxfUl9TVEFUVVNfNgkJMHgyNzgKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzcJCTB4MjdjCisj ZGVmaW5lIEdSTF9SX1NUQVRVU184CQkweDI4MAorI2RlZmluZSBHUkxfUl9TVEFUVVNfOQkJMHgy ODQKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzEwCQkweDI4OAorI2RlZmluZSBHUkxfUl9TVEFUVVNf MTEJCTB4MjhjCisjZGVmaW5lIEdSTF9SX1NUQVRVU18xMgkJMHgyOTAKKyNkZWZpbmUgR1JMX1Jf U1RBVFVTXzEzCQkweDI5NAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMTQJCTB4Mjk4CisjZGVmaW5l IEdSTF9SX1NUQVRVU18xNQkJMHgyOWMKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzE2CQkweDJhMAor I2RlZmluZSBHUkxfUl9TVEFUVVNfMTcJCTB4MmE0CisjZGVmaW5lIEdSTF9SX1NUQVRVU18xOAkJ MHgyYTgKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzE5CQkweDJhYworI2RlZmluZSBHUkxfUl9TVEFU VVNfMjAJCTB4MmIwCisjZGVmaW5lIEdSTF9SX1NUQVRVU18yMQkJMHgyYjQKKyNkZWZpbmUgR1JM X1JfU1RBVFVTXzIyCQkweDJiOAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMjMJCTB4MmJjCisjZGVm aW5lIEdSTF9BQklTVF9DVFJMMAkJMHgyRDQKKyNkZWZpbmUgR1JMX0FCSVNUX0NUUkwxCQkweDJE OAorI2RlZmluZSBBQklTVF9FTgkJCUJJVCg3KQorI2RlZmluZSBBQklTVF9EQVRBX0ZNVAkJCSgw eDcgPDwgMCkKKyNkZWZpbmUgVklERU9fQ0ZHXzAJCTB4MzgwCisjZGVmaW5lIFZJREVPX0NGR18x CQkweDM4NAorI2RlZmluZSBWSURFT19DRkdfMgkJMHgzODgKKyNkZWZpbmUgVklERU9fQ0ZHXzMJ CTB4MzhjCisjZGVmaW5lIFZJREVPX0NGR180CQkweDM5MAorI2RlZmluZSBWSURFT19TT1VSQ0Vf U0VMCQlCSVQoNykKKyNkZWZpbmUgTk9STUFMX1BBVEgJCQkoMSA8PCA3KQorI2RlZmluZSBHRU5f UkdCCQkJCSgwIDw8IDcpCisKKyNkZWZpbmUgSERNSV9TWVNfQ0ZHMUMJCTB4MDAwCisjZGVmaW5l IEhETUlfT04JCQkJQklUKDApCisjZGVmaW5lIEhETUlfUlNUCQkJQklUKDEpCisjZGVmaW5lIEFO TEdfT04JCQkJQklUKDIpCisjZGVmaW5lIENGRzEwX0RWSQkJCUJJVCgzKQorI2RlZmluZSBIRE1J X1RTVAkJCUJJVCgzKQorI2RlZmluZSBTWVNfS0VZTUFTSzEJCQkoMHhmZiA8PCA4KQorI2RlZmlu ZSBTWVNfS0VZTUFTSzIJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgQVVEX09VVFNZTkNfRU4JCQlC SVQoMjQpCisjZGVmaW5lIEFVRF9PVVRTWU5DX1BSRV9FTgkJQklUKDI1KQorI2RlZmluZSBJMkNN X09OCQkJCUJJVCgyNikKKyNkZWZpbmUgRTJQUk9NX1RZUEVfOEJJVAkJQklUKDI3KQorI2RlZmlu ZSBNQ01fRTJQUk9NX09OCQkJQklUKDI4KQorI2RlZmluZSBFWFRfRTJQUk9NX09OCQkJQklUKDI5 KQorI2RlZmluZSBIVFBMR19QSU5fU0VMX09GRgkJQklUKDMwKQorI2RlZmluZSBBRVNfRUZVU0Vf RU5BQkxFCQlCSVQoMzEpCisjZGVmaW5lIEhETUlfU1lTX0NGRzIwCQkweDAwNAorI2RlZmluZSBE RUVQX0NPTE9SX01PREVfTUFTSwkJKDMgPDwgMSkKKyNkZWZpbmUgQ09MT1JfOEJJVF9NT0RFCQkJ KDAgPDwgMSkKKyNkZWZpbmUgQ09MT1JfMTBCSVRfTU9ERQkJKDEgPDwgMSkKKyNkZWZpbmUgQ09M T1JfMTJCSVRfTU9ERQkJKDIgPDwgMSkKKyNkZWZpbmUgQ09MT1JfMTZCSVRfTU9ERQkJKDMgPDwg MSkKKyNkZWZpbmUgREVFUF9DT0xPUl9FTgkJCUJJVCgwKQorI2RlZmluZSBIRE1JX0FVRElPX1RF U1RfU0VMCQlCSVQoOCkKKyNkZWZpbmUgSERNSTJQMF9FTgkJCUJJVCgxMSkKKyNkZWZpbmUgSERN SV9PVVRfRklGT19FTgkJQklUKDE2KQorI2RlZmluZSBIRE1JX09VVF9GSUZPX0NMS19JTlYJCUJJ VCgxNykKKyNkZWZpbmUgTUhMX01PREVfT04JCQlCSVQoMjgpCisjZGVmaW5lIE1ITF9QUF9NT0RF CQkJQklUKDI5KQorI2RlZmluZSBNSExfU1lOQ19BVVRPX0VOCQlCSVQoMzApCisjZGVmaW5lIEhE TUlfUENMS19GUkVFX1JVTgkJQklUKDMxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfbXQ4MTczX2hkbWlfcGh5LmMgYi9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX210ODE3M19oZG1pX3BoeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjhkYmNhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX210ODE3M19oZG1pX3BoeS5jCkBAIC0wLDAgKzEsNTA2IEBACisvKgorICogQ29w eXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFp dUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9j bGstcHJvdmlkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4 L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0 Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIEhETUlf Q09OMAkJMHgwMAorI2RlZmluZSBSR19IRE1JVFhfUExMX0VOCQlCSVQoMzEpCisjZGVmaW5lIFJH X0hETUlUWF9QTExfRkJLRElWCQkoMHg3ZiA8PCAyNCkKKyNkZWZpbmUgUExMX0ZCS0RJVl9TSElG VAkJMjQKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9GQktTRUwJCSgweDMgPDwgMjIpCisjZGVmaW5l IFBMTF9GQktTRUxfU0hJRlQJCTIyCisjZGVmaW5lIFJHX0hETUlUWF9QTExfUFJFRElWCQkoMHgz IDw8IDIwKQorI2RlZmluZSBQUkVESVZfU0hJRlQJCQkyMAorI2RlZmluZSBSR19IRE1JVFhfUExM X1BPU0RJVgkJKDB4MyA8PCAxOCkKKyNkZWZpbmUgUE9TRElWX1NISUZUCQkJMTgKKyNkZWZpbmUg UkdfSERNSVRYX1BMTF9SU1RfRExZCQkoMHgzIDw8IDE2KQorI2RlZmluZSBSR19IRE1JVFhfUExM X0lSCQkoMHhmIDw8IDEyKQorI2RlZmluZSBQTExfSVJfU0hJRlQJCQkxMgorI2RlZmluZSBSR19I RE1JVFhfUExMX0lDCQkoMHhmIDw8IDgpCisjZGVmaW5lIFBMTF9JQ19TSElGVAkJCTgKKyNkZWZp bmUgUkdfSERNSVRYX1BMTF9CUAkJKDB4ZiA8PCA0KQorI2RlZmluZSBQTExfQlBfU0hJRlQJCQk0 CisjZGVmaW5lIFJHX0hETUlUWF9QTExfQlIJCSgweDMgPDwgMikKKyNkZWZpbmUgUExMX0JSX1NI SUZUCQkJMgorI2RlZmluZSBSR19IRE1JVFhfUExMX0JDCQkoMHgzIDw8IDApCisjZGVmaW5lIFBM TF9CQ19TSElGVAkJCTAKKyNkZWZpbmUgSERNSV9DT04xCQkweDA0CisjZGVmaW5lIFJHX0hETUlU WF9QTExfRElWRU4JCSgweDcgPDwgMjkpCisjZGVmaW5lIFBMTF9ESVZFTl9TSElGVAkJCTI5Cisj ZGVmaW5lIFJHX0hETUlUWF9QTExfQVVUT0tfRU4JCUJJVCgyOCkKKyNkZWZpbmUgUkdfSERNSVRY X1BMTF9BVVRPS19LRgkJKDB4MyA8PCAyNikKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9BVVRPS19L UwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9BVVRPS19MT0FECUJJVCgyMykK KyNkZWZpbmUgUkdfSERNSVRYX1BMTF9CQU5ECQkoMHgzZiA8PCAxNikKKyNkZWZpbmUgUkdfSERN SVRYX1BMTF9SRUZfU0VMCQlCSVQoMTUpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfQklBU19FTgkJ QklUKDE0KQorI2RlZmluZSBSR19IRE1JVFhfUExMX0JJQVNfTFBGX0VOCUJJVCgxMykKKyNkZWZp bmUgUkdfSERNSVRYX1BMTF9UWERJVl9FTgkJQklUKDEyKQorI2RlZmluZSBSR19IRE1JVFhfUExM X1RYRElWCQkoMHgzIDw8IDEwKQorI2RlZmluZSBQTExfVFhESVZfU0hJRlQJCQkxMAorI2RlZmlu ZSBSR19IRE1JVFhfUExMX0xWUk9EX0VOCQlCSVQoOSkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9N T05WQ19FTgkJQklUKDgpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfTU9OQ0tfRU4JCUJJVCg3KQor I2RlZmluZSBSR19IRE1JVFhfUExMX01PTlJFRl9FTgkJQklUKDYpCisjZGVmaW5lIFJHX0hETUlU WF9QTExfVFNUX0VOCQlCSVQoNSkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9UU1RfQ0tfRU4JCUJJ VCg0KQorI2RlZmluZSBSR19IRE1JVFhfUExMX1RTVF9TRUwJCSgweGYgPDwgMCkKKyNkZWZpbmUg SERNSV9DT04yCQkweDA4CisjZGVmaW5lIFJHU19IRE1JVFhfUExMX0FVVE9LX0JBTkQJKDB4N2Yg PDwgOCkKKyNkZWZpbmUgUkdTX0hETUlUWF9QTExfQVVUT0tfRkFJTAlCSVQoMSkKKyNkZWZpbmUg UkdfSERNSVRYX0VOX1RYX0NLTERPCQlCSVQoMCkKKyNkZWZpbmUgSERNSV9DT04zCQkweDBjCisj ZGVmaW5lIFJHX0hETUlUWF9TRVJfRU4JCSgweGYgPDwgMjgpCisjZGVmaW5lIFJHX0hETUlUWF9Q UkRfRU4JCSgweGYgPDwgMjQpCisjZGVmaW5lIFJHX0hETUlUWF9QUkRfSU1QX0VOCQkoMHhmIDw8 IDIwKQorI2RlZmluZSBSR19IRE1JVFhfRFJWX0VOCQkoMHhmIDw8IDE2KQorI2RlZmluZSBSR19I RE1JVFhfRFJWX0lNUF9FTgkJKDB4ZiA8PCAxMikKKyNkZWZpbmUgRFJWX0lNUF9FTl9TSElGVAkJ MTIKKyNkZWZpbmUgUkdfSERNSVRYX01ITENLX0ZPUkNFCQlCSVQoMTApCisjZGVmaW5lIFJHX0hE TUlUWF9NSExDS19QUElYX0VOCQlCSVQoOSkKKyNkZWZpbmUgUkdfSERNSVRYX01ITENLX0VOCQlC SVQoOCkKKyNkZWZpbmUgUkdfSERNSVRYX1NFUl9ESU5fU0VMCQkoMHhmIDw8IDQpCisjZGVmaW5l IFJHX0hETUlUWF9TRVJfNVQxX0JJU1RfRU4JQklUKDMpCisjZGVmaW5lIFJHX0hETUlUWF9TRVJf QklTVF9UT0cJCUJJVCgyKQorI2RlZmluZSBSR19IRE1JVFhfU0VSX0RJTl9UT0cJCUJJVCgxKQor I2RlZmluZSBSR19IRE1JVFhfU0VSX0NMS0RJR19JTlYJQklUKDApCisjZGVmaW5lIEhETUlfQ09O NAkJMHgxMAorI2RlZmluZSBSR19IRE1JVFhfUFJEX0lCSUFTX0NMSwkJKDB4ZiA8PCAyNCkKKyNk ZWZpbmUgUkdfSERNSVRYX1BSRF9JQklBU19EMgkJKDB4ZiA8PCAxNikKKyNkZWZpbmUgUkdfSERN SVRYX1BSRF9JQklBU19EMQkJKDB4ZiA8PCA4KQorI2RlZmluZSBSR19IRE1JVFhfUFJEX0lCSUFT X0QwCQkoMHhmIDw8IDApCisjZGVmaW5lIFBSRF9JQklBU19DTEtfU0hJRlQJCTI0CisjZGVmaW5l IFBSRF9JQklBU19EMl9TSElGVAkJMTYKKyNkZWZpbmUgUFJEX0lCSUFTX0QxX1NISUZUCQk4Cisj ZGVmaW5lIFBSRF9JQklBU19EMF9TSElGVAkJMAorI2RlZmluZSBIRE1JX0NPTjUJCTB4MTQKKyNk ZWZpbmUgUkdfSERNSVRYX0RSVl9JQklBU19DTEsJCSgweDNmIDw8IDI0KQorI2RlZmluZSBSR19I RE1JVFhfRFJWX0lCSUFTX0QyCQkoMHgzZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9J QklBU19EMQkJKDB4M2YgPDwgOCkKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9JQklBU19EMAkJKDB4 M2YgPDwgMCkKKyNkZWZpbmUgRFJWX0lCSUFTX0NMS19TSElGVAkJMjQKKyNkZWZpbmUgRFJWX0lC SUFTX0QyX1NISUZUCQkxNgorI2RlZmluZSBEUlZfSUJJQVNfRDFfU0hJRlQJCTgKKyNkZWZpbmUg RFJWX0lCSUFTX0QwX1NISUZUCQkwCisjZGVmaW5lIEhETUlfQ09ONgkJMHgxOAorI2RlZmluZSBS R19IRE1JVFhfRFJWX0lNUF9DTEsJCSgweDNmIDw8IDI0KQorI2RlZmluZSBSR19IRE1JVFhfRFJW X0lNUF9EMgkJKDB4M2YgPDwgMTYpCisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSU1QX0QxCQkoMHgz ZiA8PCA4KQorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lNUF9EMAkJKDB4M2YgPDwgMCkKKyNkZWZp bmUgRFJWX0lNUF9DTEtfU0hJRlQJCTI0CisjZGVmaW5lIERSVl9JTVBfRDJfU0hJRlQJCTE2Cisj ZGVmaW5lIERSVl9JTVBfRDFfU0hJRlQJCTgKKyNkZWZpbmUgRFJWX0lNUF9EMF9TSElGVAkJMAor I2RlZmluZSBIRE1JX0NPTjcJCTB4MWMKKyNkZWZpbmUgUkdfSERNSVRYX01ITENLX0RSVl9JQklB UwkoMHgxZiA8PCAyNykKKyNkZWZpbmUgUkdfSERNSVRYX1NFUl9ESU4JCSgweDNmZiA8PCAxNikK KyNkZWZpbmUgUkdfSERNSVRYX0NITERDX1RTVAkJKDB4ZiA8PCAxMikKKyNkZWZpbmUgUkdfSERN SVRYX0NITENLX1RTVAkJKDB4ZiA8PCA4KQorI2RlZmluZSBSR19IRE1JVFhfUkVTRVJWRQkJKDB4 ZmYgPDwgMCkKKyNkZWZpbmUgSERNSV9DT044CQkweDIwCisjZGVmaW5lIFJHU19IRE1JVFhfMlQx X0xFVgkJKDB4ZiA8PCAxNikKKyNkZWZpbmUgUkdTX0hETUlUWF8yVDFfRURHCQkoMHhmIDw8IDEy KQorI2RlZmluZSBSR1NfSERNSVRYXzVUMV9MRVYJCSgweGYgPDwgOCkKKyNkZWZpbmUgUkdTX0hE TUlUWF81VDFfRURHCQkoMHhmIDw8IDQpCisjZGVmaW5lIFJHU19IRE1JVFhfUExVR19UU1QJCUJJ VCgwKQorCitzdHJ1Y3QgbXRrX2hkbWlfcGh5IHsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3Ry dWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBjbGsgKnBsbDsKKwlzdHJ1Y3QgY2xrX2h3IHBsbF9o dzsKKwl1bnNpZ25lZCBsb25nIHBsbF9yYXRlOworCXU4IGRydl9pbXBfY2xrOworCXU4IGRydl9p bXBfZDI7CisJdTggZHJ2X2ltcF9kMTsKKwl1OCBkcnZfaW1wX2QwOworCXUzMiBpYmlhczsKKwl1 MzIgaWJpYXNfdXA7Cit9OworCitzdGF0aWMgY29uc3QgdTggUFJFRElWWzNdWzRdID0geworCXsw eDAsIDB4MCwgMHgwLCAweDB9LAkvKiAyN01oeiAqLworCXsweDEsIDB4MSwgMHgxLCAweDF9LAkv KiA3NE1oeiAqLworCXsweDEsIDB4MSwgMHgxLCAweDF9CS8qIDE0OE1oeiAqLworfTsKKworc3Rh dGljIGNvbnN0IHU4IFRYRElWWzNdWzRdID0geworCXsweDMsIDB4MywgMHgzLCAweDJ9LAkvKiAy N01oeiAqLworCXsweDIsIDB4MSwgMHgxLCAweDF9LAkvKiA3NE1oeiAqLworCXsweDEsIDB4MCwg MHgwLCAweDB9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IEZCS1NFTFszXVs0 XSA9IHsKKwl7MHgxLCAweDEsIDB4MSwgMHgxfSwJLyogMjdNaHogKi8KKwl7MHgxLCAweDAsIDB4 MSwgMHgxfSwJLyogNzRNaHogKi8KKwl7MHgxLCAweDAsIDB4MSwgMHgxfQkvKiAxNDhNaHogKi8K K307CisKK3N0YXRpYyBjb25zdCB1OCBGQktESVZbM11bNF0gPSB7CisJezE5LCAyNCwgMjksIDE5 fSwJLyogMjdNaHogKi8KKwl7MTksIDI0LCAxNCwgMTl9LAkvKiA3NE1oeiAqLworCXsxOSwgMjQs IDE0LCAxOX0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTggRElWRU5bM11bNF0g PSB7CisJezB4MiwgMHgxLCAweDEsIDB4Mn0sCS8qIDI3TWh6ICovCisJezB4MiwgMHgyLCAweDIs IDB4Mn0sCS8qIDc0TWh6ICovCisJezB4MiwgMHgyLCAweDIsIDB4Mn0JLyogMTQ4TWh6ICovCit9 OworCitzdGF0aWMgY29uc3QgdTggSFRQTExCUFszXVs0XSA9IHsKKwl7MHhjLCAweGMsIDB4OCwg MHhjfSwJLyogMjdNaHogKi8KKwl7MHhjLCAweGYsIDB4ZiwgMHhjfSwJLyogNzRNaHogKi8KKwl7 MHhjLCAweGYsIDB4ZiwgMHhjfQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBI VFBMTEJDWzNdWzRdID0geworCXsweDIsIDB4MywgMHgzLCAweDJ9LAkvKiAyN01oeiAqLworCXsw eDIsIDB4MywgMHgzLCAweDJ9LAkvKiA3NE1oeiAqLworCXsweDIsIDB4MywgMHgzLCAweDJ9CS8q IDE0OE1oeiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IEhUUExMQlJbM11bNF0gPSB7CisJezB4 MSwgMHgxLCAweDAsIDB4MX0sCS8qIDI3TWh6ICovCisJezB4MSwgMHgyLCAweDIsIDB4MX0sCS8q IDc0TWh6ICovCisJezB4MSwgMHgyLCAweDIsIDB4MX0JLyogMTQ4TWh6ICovCit9OworCitzdGF0 aWMgdm9pZCBtdGtfaGRtaV9waHlfbWFzayhzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSwg dTMyIG9mZnNldCwKKwkJCSAgICAgIHUzMiB2YWwsIHUzMiBtYXNrKQoreworCXUzMiB0bXAgPSBy ZWFkbChoZG1pX3BoeS0+cmVncyAgKyBvZmZzZXQpICYgfm1hc2s7CisKKwl0bXAgfD0gKHZhbCAm IG1hc2spOworCXdyaXRlbCh0bXAsIGhkbWlfcGh5LT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3Rh dGljIGlubGluZSBzdHJ1Y3QgbXRrX2hkbWlfcGh5ICp0b19tdGtfaGRtaV9waHkoc3RydWN0IGNs a19odyAqaHcpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihodywgc3RydWN0IG10a19oZG1pX3Bo eSwgcGxsX2h3KTsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9wbGxfcHJlcGFyZShzdHJ1Y3Qg Y2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHRvX210a19o ZG1pX3BoeShodyk7CisKKwlkZXZfZGJnKGhkbWlfcGh5LT5kZXYsICJwcmVwYXJlXG4iKTsKKwor CW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjEsIFJHX0hETUlUWF9QTExfQVVU T0tfRU4sCisJCQkgIFJHX0hETUlUWF9QTExfQVVUT0tfRU4pOworCW10a19oZG1pX3BoeV9tYXNr KGhkbWlfcGh5LCBIRE1JX0NPTjAsIFJHX0hETUlUWF9QTExfUE9TRElWLAorCQkJICBSR19IRE1J VFhfUExMX1BPU0RJVik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMywg MCwgUkdfSERNSVRYX01ITENLX0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERN SV9DT04xLCBSR19IRE1JVFhfUExMX0JJQVNfRU4sCisJCQkgIFJHX0hETUlUWF9QTExfQklBU19F Tik7CisJdXNsZWVwX3JhbmdlKDEwMCwgMTUwKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3Bo eSwgSERNSV9DT04wLCBSR19IRE1JVFhfUExMX0VOLAorCQkJICBSR19IRE1JVFhfUExMX0VOKTsK Kwl1c2xlZXBfcmFuZ2UoMTAwLCAxNTApOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBI RE1JX0NPTjEsIFJHX0hETUlUWF9QTExfQklBU19MUEZfRU4sCisJCQkgIFJHX0hETUlUWF9QTExf QklBU19MUEZfRU4pOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjEsIFJH X0hETUlUWF9QTExfVFhESVZfRU4sCisJCQkgIFJHX0hETUlUWF9QTExfVFhESVZfRU4pOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX3BsbF91bnByZXBhcmUoc3RydWN0 IGNsa19odyAqaHcpCit7CisJc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSB0b19tdGtf aGRtaV9waHkoaHcpOworCisJZGV2X2RiZyhoZG1pX3BoeS0+ZGV2LCAicHJlcGFyZVxuIik7CisK KwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04xLCAwLCBSR19IRE1JVFhfUExM X1RYRElWX0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04xLCAwLCBS R19IRE1JVFhfUExMX0JJQVNfTFBGX0VOKTsKKwl1c2xlZXBfcmFuZ2UoMTAwLCAxNTApOworCW10 a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsIDAsIFJHX0hETUlUWF9QTExfRU4p OworCXVzbGVlcF9yYW5nZSgxMDAsIDE1MCk7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHks IEhETUlfQ09OMSwgMCwgUkdfSERNSVRYX1BMTF9CSUFTX0VOKTsKKwltdGtfaGRtaV9waHlfbWFz ayhoZG1pX3BoeSwgSERNSV9DT04wLCAwLCBSR19IRE1JVFhfUExMX1BPU0RJVik7CisJbXRrX2hk bWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMSwgMCwgUkdfSERNSVRYX1BMTF9BVVRPS19F Tik7CisJdXNsZWVwX3JhbmdlKDEwMCwgMTUwKTsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9w bGxfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkg dW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1p X3BoeSA9IHRvX210a19oZG1pX3BoeShodyk7CisJdW5zaWduZWQgaW50IHByZV9kaXY7CisJdW5z aWduZWQgaW50IGRpdjsKKworCWRldl9kYmcoaGRtaV9waHktPmRldiwgInNldCByYXRlIDogJWx1 LCBwYXJlbnQ6ICVsdVxuIiwgcmF0ZSwKKwkJcGFyZW50X3JhdGUpOworCisJaWYgKHJhdGUgPD0g MjcwMDAwMDApIHsKKwkJcHJlX2RpdiA9IDA7CisJCWRpdiA9IDM7CisJfSBlbHNlIGlmIChyYXRl IDw9IDc0MjUwMDAwKSB7CisJCXByZV9kaXYgPSAxOworCQlkaXYgPSAyOworCX0gZWxzZSB7CisJ CXByZV9kaXYgPSAxOworCQlkaXYgPSAxOworCX0KKworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlf cGh5LCBIRE1JX0NPTjAsCisJCQkgIChwcmVfZGl2IDw8IFBSRURJVl9TSElGVCksCisJCQkgIFJH X0hETUlUWF9QTExfUFJFRElWKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9D T04wLCBSR19IRE1JVFhfUExMX1BPU0RJViwKKwkJCSAgUkdfSERNSVRYX1BMTF9QT1NESVYpOwor CW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsCisJCQkgICgweDEgPDwgUExM X0lDX1NISUZUKSB8ICgweDEgPDwgUExMX0lSX1NISUZUKSwKKwkJCSAgUkdfSERNSVRYX1BMTF9J QyB8IFJHX0hETUlUWF9QTExfSVIpOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1J X0NPTjEsCisJCQkgIChkaXYgPDwgUExMX1RYRElWX1NISUZUKSwKKwkJCSAgUkdfSERNSVRYX1BM TF9UWERJVik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMCwKKwkJCSAg KDB4MSA8PCBQTExfRkJLU0VMX1NISUZUKSB8ICgxOSA8PCBQTExfRkJLRElWX1NISUZUKSwKKwkJ CSAgUkdfSERNSVRYX1BMTF9GQktTRUwgfCBSR19IRE1JVFhfUExMX0ZCS0RJVik7CisJbXRrX2hk bWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMSwKKwkJCSAgKDB4MiA8PCBQTExfRElWRU5f U0hJRlQpLAorCQkJICBSR19IRE1JVFhfUExMX0RJVkVOKTsKKwltdGtfaGRtaV9waHlfbWFzayho ZG1pX3BoeSwgSERNSV9DT04wLAorCQkJICAoMHhjIDw8IFBMTF9CUF9TSElGVCkgfCAoMHgyIDw8 IFBMTF9CQ19TSElGVCkgfAorCQkJICAoMHgxIDw8IFBMTF9CUl9TSElGVCksCisJCQkgIFJHX0hE TUlUWF9QTExfQlAgfCBSR19IRE1JVFhfUExMX0JDIHwKKwkJCSAgUkdfSERNSVRYX1BMTF9CUik7 CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMywgMCwgUkdfSERNSVRYX1BS RF9JTVBfRU4pOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjQsCisJCQkg ICgweDMgPDwgUFJEX0lCSUFTX0NMS19TSElGVCkgfAorCQkJICAoMHgzIDw8IFBSRF9JQklBU19E Ml9TSElGVCkgfAorCQkJICAoMHgzIDw8IFBSRF9JQklBU19EMV9TSElGVCkgfAorCQkJICAoMHgz IDw8IFBSRF9JQklBU19EMF9TSElGVCksCisJCQkgIFJHX0hETUlUWF9QUkRfSUJJQVNfQ0xLIHwK KwkJCSAgUkdfSERNSVRYX1BSRF9JQklBU19EMiB8CisJCQkgIFJHX0hETUlUWF9QUkRfSUJJQVNf RDEgfAorCQkJICBSR19IRE1JVFhfUFJEX0lCSUFTX0QwKTsKKwltdGtfaGRtaV9waHlfbWFzayho ZG1pX3BoeSwgSERNSV9DT04zLAorCQkJICAoMHgwIDw8IERSVl9JTVBfRU5fU0hJRlQpLAorCQkJ ICBSR19IRE1JVFhfRFJWX0lNUF9FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhE TUlfQ09ONiwKKwkJCSAgKGhkbWlfcGh5LT5kcnZfaW1wX2NsayA8PCBEUlZfSU1QX0NMS19TSElG VCkgfAorCQkJICAoaGRtaV9waHktPmRydl9pbXBfZDIgPDwgRFJWX0lNUF9EMl9TSElGVCkgfAor CQkJICAoaGRtaV9waHktPmRydl9pbXBfZDEgPDwgRFJWX0lNUF9EMV9TSElGVCkgfAorCQkJICAo aGRtaV9waHktPmRydl9pbXBfZDAgPDwgRFJWX0lNUF9EMF9TSElGVCksCisJCQkgIFJHX0hETUlU WF9EUlZfSU1QX0NMSyB8IFJHX0hETUlUWF9EUlZfSU1QX0QyIHwKKwkJCSAgUkdfSERNSVRYX0RS Vl9JTVBfRDEgfCBSR19IRE1JVFhfRFJWX0lNUF9EMCk7CisJbXRrX2hkbWlfcGh5X21hc2soaGRt aV9waHksIEhETUlfQ09ONSwKKwkJCSAgKGhkbWlfcGh5LT5pYmlhcyA8PCBEUlZfSUJJQVNfQ0xL X1NISUZUKSB8CisJCQkgIChoZG1pX3BoeS0+aWJpYXMgPDwgRFJWX0lCSUFTX0QyX1NISUZUKSB8 CisJCQkgIChoZG1pX3BoeS0+aWJpYXMgPDwgRFJWX0lCSUFTX0QxX1NISUZUKSB8CisJCQkgICho ZG1pX3BoeS0+aWJpYXMgPDwgRFJWX0lCSUFTX0QwX1NISUZUKSwKKwkJCSAgUkdfSERNSVRYX0RS Vl9JQklBU19DTEsgfCBSR19IRE1JVFhfRFJWX0lCSUFTX0QyIHwKKwkJCSAgUkdfSERNSVRYX0RS Vl9JQklBU19EMSB8IFJHX0hETUlUWF9EUlZfSUJJQVNfRDApOworCXJldHVybiAwOworfQorCitz dGF0aWMgbG9uZyBtdGtfaGRtaV9wbGxfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5z aWduZWQgbG9uZyByYXRlLAorCQl1bnNpZ25lZCBsb25nICpwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1 Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHRvX210a19oZG1pX3BoeShodyk7CisKKwloZG1p X3BoeS0+cGxsX3JhdGUgPSByYXRlOworCWlmIChyYXRlIDw9IDc0MjUwMDAwKQorCQkqcGFyZW50 X3JhdGUgPSByYXRlOworCWVsc2UKKwkJKnBhcmVudF9yYXRlID0gcmF0ZSAvIDI7CisKKwlyZXR1 cm4gcmF0ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXRrX2hkbWlfcGxsX3JlY2FsY19y YXRlKHN0cnVjdCBjbGtfaHcgKmh3LAorCQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQorewor CXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gdG9fbXRrX2hkbWlfcGh5KGh3KTsKKwor CXJldHVybiBoZG1pX3BoeS0+cGxsX3JhdGU7Cit9CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBj bGtfb3BzIG10a19oZG1pX3BsbF9vcHMgPSB7CisJLnByZXBhcmUgPSBtdGtfaGRtaV9wbGxfcHJl cGFyZSwKKwkudW5wcmVwYXJlID0gbXRrX2hkbWlfcGxsX3VucHJlcGFyZSwKKwkuc2V0X3JhdGUg PSBtdGtfaGRtaV9wbGxfc2V0X3JhdGUsCisJLnJvdW5kX3JhdGUgPSBtdGtfaGRtaV9wbGxfcm91 bmRfcmF0ZSwKKwkucmVjYWxjX3JhdGUgPSBtdGtfaGRtaV9wbGxfcmVjYWxjX3JhdGUsCit9Owor CitzdGF0aWMgdm9pZCBtdGtfaGRtaV9waHlfZW5hYmxlX3RtZHMoc3RydWN0IG10a19oZG1pX3Bo eSAqaGRtaV9waHkpCit7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMywg UkdfSERNSVRYX1NFUl9FTiwKKwkJCSAgUkdfSERNSVRYX1NFUl9FTik7CisJbXRrX2hkbWlfcGh5 X21hc2soaGRtaV9waHksIEhETUlfQ09OMywgUkdfSERNSVRYX1BSRF9FTiwKKwkJCSAgUkdfSERN SVRYX1BSRF9FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMywgUkdf SERNSVRYX0RSVl9FTiwKKwkJCSAgUkdfSERNSVRYX0RSVl9FTik7CisJdXNsZWVwX3JhbmdlKDEw MCwgMTUwKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfcGh5X2Rpc2FibGVfdG1kcyhzdHJ1 Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSkKK3sKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3Bo eSwgSERNSV9DT04zLCAwLCBSR19IRE1JVFhfRFJWX0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayho ZG1pX3BoeSwgSERNSV9DT04zLCAwLCBSR19IRE1JVFhfUFJEX0VOKTsKKwltdGtfaGRtaV9waHlf bWFzayhoZG1pX3BoeSwgSERNSV9DT04zLCAwLCBSR19IRE1JVFhfU0VSX0VOKTsKK30KKworc3Rh dGljIGludCBtdGtfaGRtaV9waHlfcG93ZXJfb24oc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVj dCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CisJaW50IHJl dDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShoZG1pX3BoeS0+cGxsKTsKKwlpZiAocmV0 IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW10a19oZG1pX3BoeV9lbmFibGVfdG1kcyhoZG1pX3Bo eSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9waHlfcG93ZXJfb2Zm KHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHBo eV9nZXRfZHJ2ZGF0YShwaHkpOworCisJbXRrX2hkbWlfcGh5X2Rpc2FibGVfdG1kcyhoZG1pX3Bo eSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWlfcGh5LT5wbGwpOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGh5X29wcyBtdGtfaGRtaV9waHlfb3BzID0geworCS5wb3dl cl9vbiA9IG10a19oZG1pX3BoeV9wb3dlcl9vbiwKKwkucG93ZXJfb2ZmID0gbXRrX2hkbWlfcGh5 X3Bvd2VyX29mZiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgbXRr X2hkbWlfcGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0 IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3Bo eTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlzdHJ1Y3QgY2xrICpyZWZfY2xrOworCWNvbnN0 IGNoYXIgKnJlZl9jbGtfbmFtZTsKKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBjbGtfaW5pdCA9IHsK KwkJLm9wcyA9ICZtdGtfaGRtaV9wbGxfb3BzLAorCQkubnVtX3BhcmVudHMgPSAxLAorCQkucGFy ZW50X25hbWVzID0gKGNvbnN0IGNoYXIgKiBjb25zdCAqKSZyZWZfY2xrX25hbWUsCisJCS5mbGFn cyA9IENMS19TRVRfUkFURV9QQVJFTlQgfCBDTEtfU0VUX1JBVEVfR0FURSwKKwl9OworCXN0cnVj dCBwaHkgKnBoeTsKKwlzdHJ1Y3QgcGh5X3Byb3ZpZGVyICpwaHlfcHJvdmlkZXI7CisJaW50IHJl dDsKKworCWhkbWlfcGh5ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpoZG1pX3BoeSksIEdG UF9LRVJORUwpOworCWlmICghaGRtaV9waHkpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtID0g cGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwloZG1pX3Bo eS0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIG1lbSk7CisJaWYgKElTX0VSUiho ZG1pX3BoeS0+cmVncykpIHsKKwkJcmV0ID0gUFRSX0VSUihoZG1pX3BoeS0+cmVncyk7CisJCWRl dl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBtZW1vcnkgcmVzb3VyY2U6ICVkXG4iLCByZXQpOwor CQlyZXR1cm4gcmV0OworCX0KKworCXJlZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGxsX3Jl ZiIpOworCWlmIChJU19FUlIocmVmX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihyZWZfY2xrKTsK KwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBQTEwgcmVmZXJlbmNlIGNsb2Nr OiAlZFxuIiwKKwkJCXJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXJlZl9jbGtfbmFtZSA9IF9f Y2xrX2dldF9uYW1lKHJlZl9jbGspOworCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmco ZGV2LT5vZl9ub2RlLCAiY2xvY2stb3V0cHV0LW5hbWVzIiwKKwkJCQkgICAgICAmY2xrX2luaXQu bmFtZSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCBj bG9jay1vdXRwdXQtbmFtZXM6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWhk bWlfcGh5LT5wbGxfaHcuaW5pdCA9ICZjbGtfaW5pdDsKKwloZG1pX3BoeS0+cGxsID0gZGV2bV9j bGtfcmVnaXN0ZXIoZGV2LCAmaGRtaV9waHktPnBsbF9odyk7CisJaWYgKElTX0VSUihoZG1pX3Bo eS0+cGxsKSkgeworCQlyZXQgPSBQVFJfRVJSKGhkbWlfcGh5LT5wbGwpOworCQlkZXZfZXJyKGRl diwgIkZhaWxlZCB0byByZWdpc3RlciBQTEw6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0Owor CX0KKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgIm1lZGlhdGVr LGliaWFzIiwKKwkJCQkgICAmaGRtaV9waHktPmliaWFzKTsKKwlpZiAocmV0IDwgMCkgeworCQlk ZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IGliaWFzOiAlZFxuIiwgcmV0KTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25v ZGUsICJtZWRpYXRlayxpYmlhc191cCIsCisJCQkJICAgJmhkbWlfcGh5LT5pYmlhc191cCk7CisJ aWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBpYmlh cyB1cDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZGV2X2luZm8oZGV2LCAi VXNpbmcgZGVmYXVsdCBUWCBEUlYgaW1wZWRhbmNlOiA0LjJrLzM2XG4iKTsKKwloZG1pX3BoeS0+ ZHJ2X2ltcF9jbGsgPSAweDMwOworCWhkbWlfcGh5LT5kcnZfaW1wX2QyID0gMHgzMDsKKwloZG1p X3BoeS0+ZHJ2X2ltcF9kMSA9IDB4MzA7CisJaGRtaV9waHktPmRydl9pbXBfZDAgPSAweDMwOwor CisJcGh5ID0gZGV2bV9waHlfY3JlYXRlKGRldiwgTlVMTCwgJm10a19oZG1pX3BoeV9vcHMpOwor CWlmIChJU19FUlIocGh5KSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgSERN SSBQSFlcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwaHkpOworCX0KKwlwaHlfc2V0X2RydmRhdGEo cGh5LCBoZG1pX3BoeSk7CisKKwlwaHlfcHJvdmlkZXIgPSBkZXZtX29mX3BoeV9wcm92aWRlcl9y ZWdpc3RlcihkZXYsIG9mX3BoeV9zaW1wbGVfeGxhdGUpOworCWlmIChJU19FUlIocGh5X3Byb3Zp ZGVyKSkKKwkJcmV0dXJuIFBUUl9FUlIocGh5X3Byb3ZpZGVyKTsKKworCWhkbWlfcGh5LT5kZXYg PSBkZXY7CisJcmV0dXJuIG9mX2Nsa19hZGRfcHJvdmlkZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtf c3JjX3NpbXBsZV9nZXQsCisJCQkJICAgaGRtaV9waHktPnBsbCk7Cit9CisKK3N0YXRpYyBpbnQg bXRrX2hkbWlfcGh5X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJl dHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfaGRtaV9w aHlfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1oZG1pLXBo eSIsIH0sCisJe30sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX3BoeV9k cml2ZXIgPSB7CisJLnByb2JlID0gbXRrX2hkbWlfcGh5X3Byb2JlLAorCS5yZW1vdmUgPSBtdGtf aGRtaV9waHlfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLWhkbWkt cGh5IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2hkbWlfcGh5X21hdGNoLAorCX0sCit9Owor CitNT0RVTEVfQVVUSE9SKCJKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4iKTsKK01PRFVM RV9ERVNDUklQVElPTigiTWVkaWFUZWsgTVQ4MTczIEhETUkgUEhZIERyaXZlciIpOworTU9EVUxF X0xJQ0VOU0UoIkdQTCB2MiIpOwotLSAKMi42LjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVsCg==