From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abhinav Kumar Subject: [PATCH v4 1/2] drm/panel: Add support for Truly NT35597 panel Date: Fri, 25 May 2018 17:27:51 -0700 Message-ID: <1527294472-4451-1-git-send-email-abhinavk@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: 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: thierry.reding@gmail.com, linux-arm-msm@vger.kernel.org, Abhinav Kumar , hoegsberg@google.com, chandanu@codeaurora.org List-Id: linux-arm-msm@vger.kernel.org QWRkIHN1cHBvcnQgZm9yIFRydWx5IE5UMzU1OTcgcGFuZWwgdXNlZAppbiBNU00gcmVmZXJlbmNl IHBsYXRmb3Jtcy4KClRoaXMgcGFuZWwgc3VwcG9ydHMgYm90aCBzaW5nbGUgRFNJIGFuZCBkdWFs IERTSQptb2Rlcy4KCkhvd2V2ZXIsIHRoaXMgcGF0Y2ggc2VyaWVzIGFkZHMgc3VwcG9ydCBvbmx5 IGZvcgpkdWFsIERTSSBtb2RlLgoKQ2hhbmdlcyBpbiB2NDoKLSBGaXggdGhlIGxpY2Vuc2UgaWRl bnRpZmllcgotIEZpeCBmb3JtYXR0aW5nIGlzc3VlcyBmb3IgdGhlIHJlZ3VsYXRvciBsb2Fkcwot IEZpeCBlcnJvciBtZXNzYWdlcyBhbmQgcmV0dXJuIGNvZGUKClNpZ25lZC1vZmYtYnk6IEFyY2hp dCBUYW5lamEgPGFyY2hpdHRAY29kZWF1cm9yYS5vcmc+ClNpZ25lZC1vZmYtYnk6IEFiaGluYXYg S3VtYXIgPGFiaGluYXZrQGNvZGVhdXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9wYW5l bC9LY29uZmlnICAgICAgICAgICAgICAgfCAgIDggKwogZHJpdmVycy9ncHUvZHJtL3BhbmVsL01h a2VmaWxlICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwt dHJ1bHktbnQzNTU5Ny5jIHwgNTc2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmls ZXMgY2hhbmdlZCwgNTg1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vcGFuZWwvcGFuZWwtdHJ1bHktbnQzNTU5Ny5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3BhbmVsL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwpp bmRleCAyNTY4MmZmLi4yZmNkOWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwv S2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwpAQCAtMTc3LDQgKzE3 NywxMiBAQCBjb25maWcgRFJNX1BBTkVMX1NJVFJPTklYX1NUNzc4OVYKIAkgIFNheSBZIGhlcmUg aWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBTaXRyb25peAogCSAgU1Q3Nzg5 ViBjb250cm9sbGVyIGZvciAyNDB4MzIwIExDRCBwYW5lbHMKIAorY29uZmlnIERSTV9QQU5FTF9U UlVMWV9OVDM1NTk3X1dRWEdBCisJdHJpc3RhdGUgIlRydWx5IFdRWEdBIgorCWRlcGVuZHMgb24g T0YKKwlkZXBlbmRzIG9uIERSTV9NSVBJX0RTSQorCXNlbGVjdCBWSURFT01PREVfSEVMUEVSUwor CWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIFRy dWx5IE5UMzU1OTcgV1FYR0EgRHVhbCBEU0kKKwkgIFZpZGVvIE1vZGUgcGFuZWwKIGVuZG1lbnUK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1 L2RybS9wYW5lbC9NYWtlZmlsZQppbmRleCBmMjZlZmMxLi4wNTZlYTkzIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVs L01ha2VmaWxlCkBAIC0xOCwzICsxOCw0IEBAIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0VJS09f NDNXVkYxRykgKz0gcGFuZWwtc2Vpa28tNDN3dmYxZy5vCiBvYmotJChDT05GSUdfRFJNX1BBTkVM X1NIQVJQX0xRMTAxUjFTWDAxKSArPSBwYW5lbC1zaGFycC1scTEwMXIxc3gwMS5vCiBvYmotJChD T05GSUdfRFJNX1BBTkVMX1NIQVJQX0xTMDQzVDFMRTAxKSArPSBwYW5lbC1zaGFycC1sczA0M3Qx bGUwMS5vCiBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NJVFJPTklYX1NUNzc4OVYpICs9IHBhbmVs LXNpdHJvbml4LXN0Nzc4OXYubworb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9UUlVMWV9OVDM1NTk3 X1dRWEdBKSArPSBwYW5lbC10cnVseS1udDM1NTk3Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9wYW5lbC9wYW5lbC10cnVseS1udDM1NTk3LmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwv cGFuZWwtdHJ1bHktbnQzNTU5Ny5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmE1N2NiZjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwt dHJ1bHktbnQzNTU5Ny5jCkBAIC0wLDAgKzEsNTc2IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOCwgVGhlIExpbnV4IEZvdW5k YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2dwaW8v Y29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4 L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvY29uc3VtZXIu aD4KKworI2luY2x1ZGUgPHZpZGVvL21pcGlfZGlzcGxheS5oPgorI2luY2x1ZGUgPHZpZGVvL29m X3ZpZGVvbW9kZS5oPgorI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgorCisjaW5jbHVkZSA8 ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9taXBpX2RzaS5oPgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJlZ3VsYXRvcl9uYW1l c1tdID0geworCSJ2ZGRhIiwKKwkidmRpc3BwIiwKKwkidmRpc3BuIgorfTsKKworc3RhdGljIHVu c2lnbmVkIGxvbmcgY29uc3QgcmVndWxhdG9yX2VuYWJsZV9sb2Fkc1tdID0geworCTYyMDAwLAor CTEwMDAwMCwKKwkxMDAwMDAsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb25zdCByZWd1 bGF0b3JfZGlzYWJsZV9sb2Fkc1tdID0geworCTgwLAorCTEwMCwKKwkxMDAsCit9OworCitzdHJ1 Y3QgdHJ1bHlfd3F4Z2EgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX3BhbmVs IHBhbmVsOworCisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbQVJSQVlfU0la RShyZWd1bGF0b3JfbmFtZXMpXTsKKworCXN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dwaW87CisJ c3RydWN0IGdwaW9fZGVzYyAqbW9kZV9ncGlvOworCisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2Ug KmJhY2tsaWdodDsKKwlzdHJ1Y3QgdmlkZW9tb2RlIHZtOworCisJc3RydWN0IG1pcGlfZHNpX2Rl dmljZSAqZHNpWzJdOworCisJYm9vbCBwcmVwYXJlZDsKKwlib29sIGVuYWJsZWQ7Cit9OworCitz dGF0aWMgaW5saW5lIHN0cnVjdCB0cnVseV93cXhnYSAqcGFuZWxfdG9fdHJ1bHlfd3F4Z2Eoc3Ry dWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwYW5lbCwgc3Ry dWN0IHRydWx5X3dxeGdhLCBwYW5lbCk7Cit9CisKK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcG93 ZXJfb24oc3RydWN0IHRydWx5X3dxeGdhICpjdHgpCit7CisJaW50IHJldCwgaTsKKworCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpOyBpKyspIHsKKwkJcmV0ID0gcmVn dWxhdG9yX3NldF9sb2FkKGN0eC0+c3VwcGxpZXNbaV0uY29uc3VtZXIsCisJCQkJCXJlZ3VsYXRv cl9lbmFibGVfbG9hZHNbaV0pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwly ZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKSwgY3R4 LT5zdXBwbGllcyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwltc2xlZXAoMjAp OworCWdwaW9kX3NldF92YWx1ZShjdHgtPnJlc2V0X2dwaW8sIDEpOworCW1zbGVlcCgyMCk7CisJ Z3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3BpbywgMCk7CisJbXNsZWVwKDIwKTsKKwlncGlv ZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAxKTsKKwltc2xlZXAoNTApOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcG93ZXJfb2ZmKHN0cnVjdCB0cnVseV93 cXhnYSAqY3R4KQoreworCWludCByZXQsIGk7CisKKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNl dF9ncGlvLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMp OyBpKyspIHsKKwkJcmV0ID0gcmVndWxhdG9yX3NldF9sb2FkKGN0eC0+c3VwcGxpZXNbaV0uY29u c3VtZXIsCisJCQkJcmVndWxhdG9yX2Rpc2FibGVfbG9hZHNbaV0pOworCQlpZiAocmV0KQorCQkJ cmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9T SVpFKGN0eC0+c3VwcGxpZXMpLCBjdHgtPnN1cHBsaWVzKTsKK30KKworc3RhdGljIGludCB0cnVs eV93cXhnYV9kaXNhYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCB0cnVs eV93cXhnYSAqY3R4ID0gcGFuZWxfdG9fdHJ1bHlfd3F4Z2EocGFuZWwpOworCisJaWYgKCFjdHgt PmVuYWJsZWQpCisJCXJldHVybiAwOworCisJaWYgKGN0eC0+YmFja2xpZ2h0KSB7CisJCWN0eC0+ YmFja2xpZ2h0LT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1BPV0VSRE9XTjsKKwkJYmFja2xpZ2h0 X3VwZGF0ZV9zdGF0dXMoY3R4LT5iYWNrbGlnaHQpOworCX0KKworCWN0eC0+ZW5hYmxlZCA9IGZh bHNlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRydWx5X3dxeGdhX3VucHJlcGFyZShz dHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCA9IHBh bmVsX3RvX3RydWx5X3dxeGdhKHBhbmVsKTsKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICoqZHNp cyA9IGN0eC0+ZHNpOworCWludCByZXQgPSAwLCBpOworCisJaWYgKCFjdHgtPnByZXBhcmVkKQor CQlyZXR1cm4gMDsKKworCWRzaXNbMF0tPm1vZGVfZmxhZ3MgPSAwOworCWRzaXNbMV0tPm1vZGVf ZmxhZ3MgPSAwOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJaWYgKG1pcGlfZHNpX2Rj c19zZXRfZGlzcGxheV9vZmYoZHNpc1tpXSkgPCAwKQorCQkJcmV0ID0gLUVDT01NOworCisJbXNs ZWVwKDEyMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlpZiAobWlwaV9kc2lfZGNz X2VudGVyX3NsZWVwX21vZGUoZHNpc1tpXSkgPCAwKQorCQkJcmV0ID0gLUVDT01NOworCisJdHJ1 bHlfd3F4Z2FfcG93ZXJfb2ZmKGN0eCk7CisKKwljdHgtPnByZXBhcmVkID0gZmFsc2U7CisJcmV0 dXJuIHJldDsKK30KKworI2RlZmluZSBNQVhfTEVOCTUKK3N0cnVjdCB7CisJdTggY29tbWFuZHNb TUFYX0xFTl07CisJaW50IHNpemU7Cit9IHBhbmVsX2NtZHNbXSA9IHsgLyogQ01EMl9QMCAqLwor CQkgICB7IHsgMHhmZiwgMHgyMCB9LCAyIH0sCisJCSAgIHsgeyAweGZiLCAweDAxIH0sIDIgfSwK KwkJICAgeyB7IDB4MDAsIDB4MDEgfSwgMiB9LAorCQkgICB7IHsgMHgwMSwgMHg1NSB9LCAyIH0s CisJCSAgIHsgeyAweDAyLCAweDQ1IH0sIDIgfSwKKwkJICAgeyB7IDB4MDUsIDB4NDAgfSwgMiB9 LAorCQkgICB7IHsgMHgwNiwgMHgxOSB9LCAyIH0sCisJCSAgIHsgeyAweDA3LCAweDFlIH0sIDIg fSwKKwkJICAgeyB7IDB4MGIsIDB4NzMgfSwgMiB9LAorCQkgICB7IHsgMHgwYywgMHg3MyB9LCAy IH0sCisJCSAgIHsgeyAweDBlLCAweGIwIH0sIDIgfSwKKwkJICAgeyB7IDB4MGYsIDB4YWUgfSwg MiB9LAorCQkgICB7IHsgMHgxMSwgMHhiOCB9LCAyIH0sCisJCSAgIHsgeyAweDEzLCAweDAwIH0s IDIgfSwKKwkJICAgeyB7IDB4NTgsIDB4ODAgfSwgMiB9LAorCQkgICB7IHsgMHg1OSwgMHgwMSB9 LCAyIH0sCisJCSAgIHsgeyAweDVhLCAweDAwIH0sIDIgfSwKKwkJICAgeyB7IDB4NWIsIDB4MDEg fSwgMiB9LAorCQkgICB7IHsgMHg1YywgMHg4MCB9LCAyIH0sCisJCSAgIHsgeyAweDVkLCAweDgx IH0sIDIgfSwKKwkJICAgeyB7IDB4NWUsIDB4MDAgfSwgMiB9LAorCQkgICB7IHsgMHg1ZiwgMHgw MSB9LCAyIH0sCisJCSAgIHsgeyAweDcyLCAweDExIH0sIDIgfSwKKwkJICAgeyB7IDB4NjgsIDB4 MDMgfSwgMiB9LAorCQkgICAvKiBDTUQyX1A0ICovCisJCSAgIHsgeyAweEZGLCAweDI0IH0sIDIg fSwKKwkJICAgeyB7IDB4RkIsIDB4MDEgfSwgMiB9LAorCQkgICB7IHsgMHgwMCwgMHgxQyB9LCAy IH0sCisJCSAgIHsgeyAweDAxLCAweDBCIH0sIDIgfSwKKwkJICAgeyB7IDB4MDIsIDB4MEMgfSwg MiB9LAorCQkgICB7IHsgMHgwMywgMHgwMSB9LCAyIH0sCisJCSAgIHsgeyAweDA0LCAweDBGIH0s IDIgfSwKKwkJICAgeyB7IDB4MDUsIDB4MTAgfSwgMiB9LAorCQkgICB7IHsgMHgwNiwgMHgxMCB9 LCAyIH0sCisJCSAgIHsgeyAweDA3LCAweDEwIH0sIDIgfSwKKwkJICAgeyB7IDB4MDgsIDB4ODkg fSwgMiB9LAorCQkgICB7IHsgMHgwOSwgMHg4QSB9LCAyIH0sCisJCSAgIHsgeyAweDBBLCAweDEz IH0sIDIgfSwKKwkJICAgeyB7IDB4MEIsIDB4MTMgfSwgMiB9LAorCQkgICB7IHsgMHgwQywgMHgx NSB9LCAyIH0sCisJCSAgIHsgeyAweDBELCAweDE1IH0sIDIgfSwKKwkJICAgeyB7IDB4MEUsIDB4 MTcgfSwgMiB9LAorCQkgICB7IHsgMHgwRiwgMHgxNyB9LCAyIH0sCisJCSAgIHsgeyAweDEwLCAw eDFDIH0sIDIgfSwKKwkJICAgeyB7IDB4MTEsIDB4MEIgfSwgMiB9LAorCQkgICB7IHsgMHgxMiwg MHgwQyB9LCAyIH0sCisJCSAgIHsgeyAweDEzLCAweDAxIH0sIDIgfSwKKwkJICAgeyB7IDB4MTQs IDB4MEYgfSwgMiB9LAorCQkgICB7IHsgMHgxNSwgMHgxMCB9LCAyIH0sCisJCSAgIHsgeyAweDE2 LCAweDEwIH0sIDIgfSwKKwkJICAgeyB7IDB4MTcsIDB4MTAgfSwgMiB9LAorCQkgICB7IHsgMHgx OCwgMHg4OSB9LCAyIH0sCisJCSAgIHsgeyAweDE5LCAweDhBIH0sIDIgfSwKKwkJICAgeyB7IDB4 MUEsIDB4MTMgfSwgMiB9LAorCQkgICB7IHsgMHgxQiwgMHgxMyB9LCAyIH0sCisJCSAgIHsgeyAw eDFDLCAweDE1IH0sIDIgfSwKKwkJICAgeyB7IDB4MUQsIDB4MTUgfSwgMiB9LAorCQkgICB7IHsg MHgxRSwgMHgxNyB9LCAyIH0sCisJCSAgIHsgeyAweDFGLCAweDE3IH0sIDIgfSwKKwkJICAgLyog U1RWICovCisJCSAgIHsgeyAweDIwLCAweDQwIH0sIDIgfSwKKwkJICAgeyB7IDB4MjEsIDB4MDEg fSwgMiB9LAorCQkgICB7IHsgMHgyMiwgMHgwMCB9LCAyIH0sCisJCSAgIHsgeyAweDIzLCAweDQw IH0sIDIgfSwKKwkJICAgeyB7IDB4MjQsIDB4NDAgfSwgMiB9LAorCQkgICB7IHsgMHgyNSwgMHg2 RCB9LCAyIH0sCisJCSAgIHsgeyAweDI2LCAweDQwIH0sIDIgfSwKKwkJICAgeyB7IDB4MjcsIDB4 NDAgfSwgMiB9LAorCQkgICAvKiBWZW5kICovCisJCSAgIHsgeyAweEUwLCAweDAwIH0sIDIgfSwK KwkJICAgeyB7IDB4REMsIDB4MjEgfSwgMiB9LAorCQkgICB7IHsgMHhERCwgMHgyMiB9LCAyIH0s CisJCSAgIHsgeyAweERFLCAweDA3IH0sIDIgfSwKKwkJICAgeyB7IDB4REYsIDB4MDcgfSwgMiB9 LAorCQkgICB7IHsgMHhFMywgMHg2RCB9LCAyIH0sCisJCSAgIHsgeyAweEUxLCAweDA3IH0sIDIg fSwKKwkJICAgeyB7IDB4RTIsIDB4MDcgfSwgMiB9LAorCQkgICAvKiBVRCAqLworCQkgICB7IHsg MHgyOSwgMHhEOCB9LCAyIH0sCisJCSAgIHsgeyAweDJBLCAweDJBIH0sIDIgfSwKKwkJICAgLyog Q0xLICovCisJCSAgIHsgeyAweDRCLCAweDAzIH0sIDIgfSwKKwkJICAgeyB7IDB4NEMsIDB4MTEg fSwgMiB9LAorCQkgICB7IHsgMHg0RCwgMHgxMCB9LCAyIH0sCisJCSAgIHsgeyAweDRFLCAweDAx IH0sIDIgfSwKKwkJICAgeyB7IDB4NEYsIDB4MDEgfSwgMiB9LAorCQkgICB7IHsgMHg1MCwgMHgx MCB9LCAyIH0sCisJCSAgIHsgeyAweDUxLCAweDAwIH0sIDIgfSwKKwkJICAgeyB7IDB4NTIsIDB4 ODAgfSwgMiB9LAorCQkgICB7IHsgMHg1MywgMHgwMCB9LCAyIH0sCisJCSAgIHsgeyAweDU2LCAw eDAwIH0sIDIgfSwKKwkJICAgeyB7IDB4NTQsIDB4MDcgfSwgMiB9LAorCQkgICB7IHsgMHg1OCwg MHgwNyB9LCAyIH0sCisJCSAgIHsgeyAweDU1LCAweDI1IH0sIDIgfSwKKwkJICAgLyogUmVzZXQg WERPTkIgKi8KKwkJICAgeyB7IDB4NUIsIDB4NDMgfSwgMiB9LAorCQkgICB7IHsgMHg1QywgMHgw MCB9LCAyIH0sCisJCSAgIHsgeyAweDVGLCAweDczIH0sIDIgfSwKKwkJICAgeyB7IDB4NjAsIDB4 NzMgfSwgMiB9LAorCQkgICB7IHsgMHg2MywgMHgyMiB9LCAyIH0sCisJCSAgIHsgeyAweDY0LCAw eDAwIH0sIDIgfSwKKwkJICAgeyB7IDB4NjcsIDB4MDggfSwgMiB9LAorCQkgICB7IHsgMHg2OCwg MHgwNCB9LCAyIH0sCisJCSAgIC8qIFJlc29sdXRpb246MTQ0MHgyNTYwICovCisJCSAgIHsgeyAw eDcyLCAweDAyIH0sIDIgfSwKKwkJICAgLyogbXV4ICovCisJCSAgIHsgeyAweDdBLCAweDgwIH0s IDIgfSwKKwkJICAgeyB7IDB4N0IsIDB4OTEgfSwgMiB9LAorCQkgICB7IHsgMHg3QywgMHhEOCB9 LCAyIH0sCisJCSAgIHsgeyAweDdELCAweDYwIH0sIDIgfSwKKwkJICAgeyB7IDB4N0YsIDB4MTUg fSwgMiB9LAorCQkgICB7IHsgMHg3NSwgMHgxNSB9LCAyIH0sCisJCSAgIC8qIEFCT0ZGICovCisJ CSAgIHsgeyAweEIzLCAweEMwIH0sIDIgfSwKKwkJICAgeyB7IDB4QjQsIDB4MDAgfSwgMiB9LAor CQkgICB7IHsgMHhCNSwgMHgwMCB9LCAyIH0sCisJCSAgIC8qIFNvdXJjZSBFUSAqLworCQkgICB7 IHsgMHg3OCwgMHgwMCB9LCAyIH0sCisJCSAgIHsgeyAweDc5LCAweDAwIH0sIDIgfSwKKwkJICAg eyB7IDB4ODAsIDB4MDAgfSwgMiB9LAorCQkgICB7IHsgMHg4MywgMHgwMCB9LCAyIH0sCisJCSAg IC8qIEZQIEJQICovCisJCSAgIHsgeyAweDkzLCAweDBBIH0sIDIgfSwKKwkJICAgeyB7IDB4OTQs IDB4MEEgfSwgMiB9LAorCQkgICAvKiBJbnZlcnNpb24gVHlwZSAqLworCQkgICB7IHsgMHg4QSwg MHgwMCB9LCAyIH0sCisJCSAgIHsgeyAweDlCLCAweEZGIH0sIDIgfSwKKwkJICAgLyogSU1HU1dB UCA9MSBAUG9ydFN3YXA9MSAqLworCQkgICB7IHsgMHg5RCwgMHhCMCB9LCAyIH0sCisJCSAgIHsg eyAweDlGLCAweDYzIH0sIDIgfSwKKwkJICAgeyB7IDB4OTgsIDB4MTAgfSwgMiB9LAorCQkgICAv KiBGUk0gKi8KKwkJICAgeyB7IDB4RUMsIDB4MDAgfSwgMiB9LAorCQkgICAvKiBDTUQxICovCisJ CSAgIHsgeyAweEZGLCAweDEwIH0sIDIgfSwKKwkJICAgIC8qIFZCUCtWU0E9LFZGUCA9IDEwSCAq LworCQkgICB7IHsgMHgzQiwgMHgwMywgMHgwQSwgMHgwQSwgfSwgNCB9LAorCQkgICAvKiBGVEUg b24gKi8KKwkJICAgeyB7IDB4MzUsIDB4MDAgfSwgMiB9LAorCQkgICAvKiBFTl9CSyA9MShhdXRv IGJsYWNrKSAqLworCQkgICB7IHsgMHhFNSwgMHgwMSB9LCAyIH0sCisJCSAgIC8qIENNRCBtb2Rl KDEwKSBWRE8gbW9kZSgwMykgKi8KKwkJICAgeyB7IDB4QkIsIDB4MDMgfSwgMiB9LAorCQkgICAv KiBOb24gUmVsb2FkIE1UUCAqLworCQkgICB7IHsgMHhGQiwgMHgwMSB9LCAyIH0sCit9OworCitz dGF0aWMgaW50IHRydWx5X3dxeGdhX3ByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7 CisJc3RydWN0IHRydWx5X3dxeGdhICpjdHggPSBwYW5lbF90b190cnVseV93cXhnYShwYW5lbCk7 CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqKmRzaXMgPSBjdHgtPmRzaTsKKwlpbnQgcmV0LCBp LCBqOworCisJaWYgKGN0eC0+cHJlcGFyZWQpCisJCXJldHVybiAwOworCisJcmV0ID0gdHJ1bHlf d3F4Z2FfcG93ZXJfb24oY3R4KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWRz aXNbMF0tPm1vZGVfZmxhZ3MgfD0gTUlQSV9EU0lfTU9ERV9MUE07CisJZHNpc1sxXS0+bW9kZV9m bGFncyB8PSBNSVBJX0RTSV9NT0RFX0xQTTsKKworCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpF KHBhbmVsX2NtZHMpOyBqKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJcmV0 ID0gbWlwaV9kc2lfZGNzX3dyaXRlX2J1ZmZlcihkc2lzW2ldLAorCQkJCQlwYW5lbF9jbWRzW2pd LmNvbW1hbmRzLAorCQkJCQlwYW5lbF9jbWRzW2pdLnNpemUpOworCQkJaWYgKHJldCA8IDApIHsK KwkJCQlkZXZfZXJyKGN0eC0+ZGV2LAorCQkJCQkiZmFpbGVkIHRvIHR4IGNtZCBbJWRdLCBlcnI6 ICVkXG4iLAorCQkJCQlqLCByZXQpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKwl9CisK Kwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWlmIChtaXBpX2RzaV9kY3NfZXhpdF9zbGVl cF9tb2RlKGRzaXNbaV0pIDwgMCkgeworCQkJZGV2X2VycihjdHgtPmRldiwgImZhaWxlZCB0byBl eGl0IHNsZWVwIG1vZGVcbiIpOworCQkJcmV0dXJuIC1FQ09NTTsKKwkJfQorCX0KKworCW1zbGVl cCg3OCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlpZiAobWlwaV9kc2lfZGNzX3Nl dF9kaXNwbGF5X29uKGRzaXNbaV0pIDwgMCkgeworCQkJZGV2X2VycihjdHgtPmRldiwgImZhaWxl ZCB0byBzZW5kIGRpc3BsYXkgb25cbiIpOworCQkJcmV0dXJuIC1FQ09NTTsKKwkJfQorCW1zbGVl cCg3OCk7CisKKwljdHgtPnByZXBhcmVkID0gdHJ1ZTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHRydWx5X3dxeGdhX2VuYWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlz dHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCA9IHBhbmVsX3RvX3RydWx5X3dxeGdhKHBhbmVsKTsKKwor CWlmIChjdHgtPmVuYWJsZWQpCisJCXJldHVybiAwOworCisJaWYgKGN0eC0+YmFja2xpZ2h0KSB7 CisJCWN0eC0+YmFja2xpZ2h0LT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7CisJCWJh Y2tsaWdodF91cGRhdGVfc3RhdHVzKGN0eC0+YmFja2xpZ2h0KTsKKwl9CisJY3R4LT5lbmFibGVk ID0gdHJ1ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRydWx5X3dxeGdhX2dldF9t b2RlcyhzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yID0gcGFuZWwtPmNvbm5lY3RvcjsKKwlzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCA9 IHBhbmVsX3RvX3RydWx5X3dxeGdhKHBhbmVsKTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZTsKKworCW1vZGUgPSBkcm1fbW9kZV9jcmVhdGUoY29ubmVjdG9yLT5kZXYpOworCWlmICgh bW9kZSkgeworCQlkZXZfZXJyKGN0eC0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkaXNw bGF5IG1vZGVcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlkcm1fZGlzcGxheV9tb2RlX2Zyb21f dmlkZW9tb2RlKCZjdHgtPnZtLCBtb2RlKTsKKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby53aWR0 aF9tbSA9IDc0OworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9tbSA9IDEzMTsKKwlt b2RlLT50eXBlID0gRFJNX01PREVfVFlQRV9EUklWRVIgfCBEUk1fTU9ERV9UWVBFX1BSRUZFUlJF RDsKKwlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7CisKKwlyZXR1cm4gMTsK K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGFuZWxfZnVuY3MgdHJ1bHlfd3F4Z2FfZHJt X2Z1bmNzID0geworCS5kaXNhYmxlID0gdHJ1bHlfd3F4Z2FfZGlzYWJsZSwKKwkudW5wcmVwYXJl ID0gdHJ1bHlfd3F4Z2FfdW5wcmVwYXJlLAorCS5wcmVwYXJlID0gdHJ1bHlfd3F4Z2FfcHJlcGFy ZSwKKwkuZW5hYmxlID0gdHJ1bHlfd3F4Z2FfZW5hYmxlLAorCS5nZXRfbW9kZXMgPSB0cnVseV93 cXhnYV9nZXRfbW9kZXMsCit9OworCitzdGF0aWMgaW50IHRydWx5X3dxeGdhX3BhbmVsX2FkZChz dHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjdHgtPmRl djsKKwlpbnQgcmV0LCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4LT5zdXBw bGllcyk7IGkrKykKKwkJY3R4LT5zdXBwbGllc1tpXS5zdXBwbHkgPSByZWd1bGF0b3JfbmFtZXNb aV07CisKKwlyZXQgPSBkZXZtX3JlZ3VsYXRvcl9idWxrX2dldChkZXYsIEFSUkFZX1NJWkUoY3R4 LT5zdXBwbGllcyksCisJCQkJICAgICAgY3R4LT5zdXBwbGllcyk7CisJaWYgKHJldCA8IDApCisJ CXJldHVybiByZXQ7CisKKwljdHgtPnJlc2V0X2dwaW8gPSBkZXZtX2dwaW9kX2dldChkZXYsICJy ZXNldCIsIEdQSU9EX09VVF9ISUdIKTsKKwlpZiAoSVNfRVJSKGN0eC0+cmVzZXRfZ3BpbykpIHsK KwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IHJlc2V0IGdwaW8gJWxkXG4iLAorCQkJUFRSX0VS UihjdHgtPnJlc2V0X2dwaW8pKTsKKwkJcmV0dXJuIFBUUl9FUlIoY3R4LT5yZXNldF9ncGlvKTsK Kwl9CisKKwljdHgtPm1vZGVfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgIm1vZGUiLCBHUElP RF9PVVRfTE9XKTsKKwlpZiAoSVNfRVJSKGN0eC0+bW9kZV9ncGlvKSkgeworCQlkZXZfZXJyKGRl diwgImNhbm5vdCBnZXQgbW9kZSBncGlvICVsZFxuIiwKKwkJCVBUUl9FUlIoY3R4LT5tb2RlX2dw aW8pKTsKKwkJcmV0dXJuIFBUUl9FUlIoY3R4LT5tb2RlX2dwaW8pOworCX0KKworCS8qIGR1YWwg cG9ydCAqLworCWdwaW9kX3NldF92YWx1ZShjdHgtPm1vZGVfZ3BpbywgMCk7CisKKwlyZXQgPSBv Zl9nZXRfdmlkZW9tb2RlKGRldi0+b2Zfbm9kZSwgJmN0eC0+dm0sIDApOworCWlmIChyZXQgPCAw KQorCQlyZXR1cm4gcmV0OworCisJZHJtX3BhbmVsX2luaXQoJmN0eC0+cGFuZWwpOworCWN0eC0+ cGFuZWwuZGV2ID0gZGV2OworCWN0eC0+cGFuZWwuZnVuY3MgPSAmdHJ1bHlfd3F4Z2FfZHJtX2Z1 bmNzOworCWRybV9wYW5lbF9hZGQoJmN0eC0+cGFuZWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyB2b2lkIHRydWx5X3dxeGdhX3BhbmVsX2RlbChzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCkK K3sKKwlpZiAoY3R4LT5wYW5lbC5kZXYpCisJCWRybV9wYW5lbF9yZW1vdmUoJmN0eC0+cGFuZWwp OworfQorCitzdGF0aWMgaW50IHRydWx5X3dxeGdhX3Byb2JlKHN0cnVjdCBtaXBpX2RzaV9kZXZp Y2UgKmRzaSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZHNpLT5kZXY7CisJc3RydWN0IHRy dWx5X3dxeGdhICpjdHg7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqc2Vjb25kYXJ5OworCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqZHNpMTsKKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqZHNpMV9ob3N0 OworCWludCByZXQgPSAwOworCWNvbnN0IHN0cnVjdCBtaXBpX2RzaV9kZXZpY2VfaW5mbyBpbmZv ID0gey50eXBlID0gInRydWx5bnQzNTU5NyIsCisJCS5jaGFubmVsID0gMCwKKwkJLm5vZGUgPSBO VUxMLAorCX07CisKKwljdHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmN0eCksIEdGUF9L RVJORUwpOworCisJaWYgKCFjdHgpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogVGhpcyBkZXZp Y2UgcmVwcmVzZW50cyBpdHNlbGYgYXMgb25lIHdpdGgKKwkgKiB0d28gaW5wdXQgcG9ydHMgd2hp Y2ggYXJlIGZlZCBieSB0aGUgb3V0cHV0CisJICogcG9ydHMgb2YgdGhlIHR3byBEU0kgY29udHJv bGxlcnMgLiBUaGUgRFNJMAorCSAqIGlzIHRoZSBtYXN0ZXIgY29udHJvbGxlciBhbmQgaGFzIG1v c3Qgb2YgdGhlCisJICogcGFuZWwgcmVsYXRlZCBpbmZvIGluIGl0cyBjaGlsZCBub2RlLgorCSAq LworCisJZHNpMSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfbm9kZShkc2ktPmRldi5vZl9ub2RlLCAx LCAtMSk7CisJaWYgKCFkc2kxKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCByZW1v dGUgbm9kZSBmb3Igc2Vjb25kYXJ5IERTSVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8g ZXJyX2dldF9yZW1vdGU7CisJfQorCisJZHNpMV9ob3N0ID0gb2ZfZmluZF9taXBpX2RzaV9ob3N0 X2J5X25vZGUoZHNpMSk7CisJaWYgKCFkc2kxX2hvc3QpIHsKKwkJZGV2X2VycihkZXYsICJmYWls ZWQgdG8gZmluZCBkc2kgaG9zdFxuIik7CisJCXJldCA9IC1FUFJPQkVfREVGRVI7CisJCWdvdG8g ZXJyX2hvc3Q7CisJfQorCisJb2Zfbm9kZV9wdXQoZHNpMSk7CisKKwkvKiByZWdpc3RlciB0aGUg c2Vjb25kIERTSSBkZXZpY2UgKi8KKwlzZWNvbmRhcnkgPSBtaXBpX2RzaV9kZXZpY2VfcmVnaXN0 ZXJfZnVsbChkc2kxX2hvc3QsICZpbmZvKTsKKworCWlmIChJU19FUlIoc2Vjb25kYXJ5KSkgewor CQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgZHNpIGRldmljZVxuIik7CisJCXJldCA9 IFBUUl9FUlIoZHNpKTsKKwkJZ290byBlcnJfZHNpX2RldmljZTsKKwl9CisKKwltaXBpX2RzaV9z ZXRfZHJ2ZGF0YShkc2ksIGN0eCk7CisKKwljdHgtPmRldiA9IGRldjsKKwljdHgtPmRzaVswXSA9 IGRzaTsKKwljdHgtPmRzaVsxXSA9IHNlY29uZGFyeTsKKworCXJldCA9IHRydWx5X3dxeGdhX3Bh bmVsX2FkZChjdHgpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWRk IHBhbmVsXG4iKTsKKwkJZ290byBlcnJfcGFuZWxfYWRkOworCX0KKworCS8qIGNvbmZpZ3VyZSBt YXN0ZXIgRFNJIGRldmljZSAqLworCWRzaS0+bGFuZXMgPSA0OworCWRzaS0+Zm9ybWF0ID0gTUlQ SV9EU0lfRk1UX1JHQjg4ODsKKwlkc2ktPm1vZGVfZmxhZ3MgPSBNSVBJX0RTSV9NT0RFX1ZJREVP IHwgTUlQSV9EU0lfQ0xPQ0tfTk9OX0NPTlRJTlVPVVMgfAorCQkJCQkJTUlQSV9EU0lfTU9ERV9M UE07CisKKwlyZXQgPSBtaXBpX2RzaV9hdHRhY2goZHNpKTsKKwlpZiAocmV0IDwgMCkgeworCQlk ZXZfZXJyKGRldiwgIm1hc3RlciBkc2kgYXR0YWNoIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2Rz aV9hdHRhY2g7CisJfQorCisJLyogY29uZmlndXJlIHNlY29uZGFyeSBEU0kgZGV2aWNlICovCisJ c2Vjb25kYXJ5LT5sYW5lcyA9IDQ7CisJc2Vjb25kYXJ5LT5mb3JtYXQgPSBNSVBJX0RTSV9GTVRf UkdCODg4OworCXNlY29uZGFyeS0+bW9kZV9mbGFncyA9IE1JUElfRFNJX01PREVfVklERU8gfAor CQlNSVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9VUyB8CisJCU1JUElfRFNJX01PREVfTFBNOwor CisJcmV0ID0gbWlwaV9kc2lfYXR0YWNoKHNlY29uZGFyeSk7CisJaWYgKHJldCA8IDApIHsKKwkJ ZGV2X2VycihkZXYsICJtaXBpX2RzaV9hdHRhY2ggb24gc2Vjb25kYXJ5IGZhaWxlZFxuIik7CisJ CWdvdG8gZXJyX2RzaV9hdHRhY2hfc2VjOworCX0KKworCXJldHVybiAwOworCitlcnJfZHNpX2F0 dGFjaF9zZWM6CisJbWlwaV9kc2lfZGV0YWNoKGN0eC0+ZHNpWzBdKTsKK2Vycl9kc2lfYXR0YWNo OgorCXRydWx5X3dxeGdhX3BhbmVsX2RlbChjdHgpOworZXJyX3BhbmVsX2FkZDoKKwltaXBpX2Rz aV9kZXZpY2VfdW5yZWdpc3RlcihzZWNvbmRhcnkpOworZXJyX2RzaV9kZXZpY2U6CitlcnJfaG9z dDoKKwlvZl9ub2RlX3B1dChkc2kxKTsKK2Vycl9nZXRfcmVtb3RlOgorCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcmVtb3ZlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2Ug KmRzaSkKK3sKKwlzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCA9IG1pcGlfZHNpX2dldF9kcnZkYXRh KGRzaSk7CisKKwlpZiAoY3R4LT5kc2lbMF0pCisJCW1pcGlfZHNpX2RldGFjaChjdHgtPmRzaVsw XSk7CisJaWYgKGN0eC0+ZHNpWzFdKSB7CisJCW1pcGlfZHNpX2RldGFjaChjdHgtPmRzaVsxXSk7 CisJCW1pcGlfZHNpX2RldmljZV91bnJlZ2lzdGVyKGN0eC0+ZHNpWzFdKTsKKwl9CisJdHJ1bHlf d3F4Z2FfcGFuZWxfZGVsKGN0eCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBvZl9kZXZpY2VfaWQgdHJ1bHlfd3F4Z2Ffb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRp YmxlID0gInRydWx5LG50MzU1OTciLCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUo b2YsIHRydWx5X3dxeGdhX29mX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBtaXBpX2RzaV9kcml2 ZXIgdHJ1bHlfd3F4Z2FfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInBhbmVs X3RydWx5X250MzU1OTciLAorCQkub2ZfbWF0Y2hfdGFibGUgPSB0cnVseV93cXhnYV9vZl9tYXRj aCwKKwl9LAorCS5wcm9iZSA9IHRydWx5X3dxeGdhX3Byb2JlLAorCS5yZW1vdmUgPSB0cnVseV93 cXhnYV9yZW1vdmUsCit9OworbW9kdWxlX21pcGlfZHNpX2RyaXZlcih0cnVseV93cXhnYV9kcml2 ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlRydWx5IE5UMzU1OTcgRFNJIFBhbmVsIERyaXZl ciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotLSAKVGhlIFF1YWxjb21tIElubm92YXRp b24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwKYSBM aW51eCBGb3VuZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmkt ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==