From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sandeep Panda Subject: [[RFC]DPU PATCH] drm/bridge: add sn65dsi86 bridge driver support Date: Mon, 9 Apr 2018 16:16:12 +0530 Message-ID: <1523270772-3881-2-git-send-email-spanda@codeaurora.org> References: <1523270772-3881-1-git-send-email-spanda@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1523270772-3881-1-git-send-email-spanda-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, Sandeep Panda , abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org List-Id: devicetree@vger.kernel.org QWRkIHN1cHBvcnQgZm9yIFRJJ3Mgc242NWRzaTg2IGRzaTJlZHAgYnJpZGdlIGNoaXAuClRoZSBj aGlwIGNvbnZlcnRzIERTSSB0cmFuc21pdHRlZCBzaWduYWwgdG8gZURQIHNpZ25hbCwKd2hpY2gg aXMgZmVkIHRvIHRoZSBjb25uZWN0ZWQgZURQIHBhbmVsLgoKU2lnbmVkLW9mZi1ieTogU2FuZGVl cCBQYW5kYSA8c3BhbmRhQGNvZGVhdXJvcmEub3JnPgotLS0KIC4uLi9iaW5kaW5ncy9kaXNwbGF5 L2JyaWRnZS90aSxzbjY1ZHNpODYudHh0ICAgICAgIHwgICA1MyArCiBkcml2ZXJzL2dwdS9kcm0v YnJpZGdlL3RpLXNuNjVkc2k4Ni5jICAgICAgICAgICAgICB8IDExNDYgKysrKysrKysrKysrKysr KysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMTE5OSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx MDA2NDQgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvYnJpZGdlL3Rp LHNuNjVkc2k4Ni50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdl L3RpLXNuNjVkc2k4Ni5jCgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2Jp bmRpbmdzL2Rpc3BsYXkvYnJpZGdlL3RpLHNuNjVkc2k4Ni50eHQgYi9Eb2N1bWVudGF0aW9uL2Rl dmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS9icmlkZ2UvdGksc242NWRzaTg2LnR4dApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Nzk0NzcwCi0tLSAvZGV2L251bGwKKysrIGIv RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvYnJpZGdlL3RpLHNuNjVk c2k4Ni50eHQKQEAgLTAsMCArMSw1MyBAQAorU042NURTSTg2IERTSXRvZURQIGJyaWRnZSBjaGlw CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyB0aGUgYmluZGluZyBm b3IgVGV4YXMgSW5zdHJ1bWVudHMgU042NURTSTg2IGJyaWRnZS4KKworUmVxdWlyZWQgcHJvcGVy dGllczoKKworLSBjb21wYXRpYmxlOiBNdXN0IGJlICJ0aSxzbjY1ZHNpODYiCistIHJlZzoJCQkJ CU1haW4gSTJDIHNsYXZlIElEIChmb3IgSTJDIGhvc3QgZHJpdmVyKQorLSBzbixpcnEtZ3BpbzoJ CQkJTWFpbiBJUlEgZ3BpbyBtYXBwaW5nCistIHNuLGVuYWJsZS1ncGlvCQkJTWFpbiByZXNldCBn cGlvIG1hcHBpbmcKKworUmVxdWlyZWQgbm9kZXM6CisKK1RoaXMgZGV2aWNlIGhhcyB0d28gdmlk ZW8gcG9ydHMuIFRoZWlyIGNvbm5lY3Rpb25zIGFyZSBtb2RlbGxlZCB1c2luZyB0aGUgT0YKK2dy YXBoIGJpbmRpbmdzIHNwZWNpZmllZCBpbiBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGlu Z3MvZ3JhcGgudHh0LgorCistIFZpZGVvIHBvcnQgMCBmb3IgRFNJIGlucHV0CistIFZpZGVvIHBv cnQgMSBmb3IgZURQIG91dHB1dAorCitFeGFtcGxlCistLS0tLS0tCisKK3ZnYS1icmlkZ2Ugewor CWNvbXBhdGlibGUgPSAidGksc242NWRzaTg2IjsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkj c2l6ZS1jZWxscyA9IDwwPjsKKwlyZWcgPSA8MHgzOT47CisKKwlzbixpcnEtZ3BpbyA9IDwmbXNt Z3BpbyAzMiAwPjsKKwlzbixlbmFibGUtZ3BpbyA9IDwmbXNtZ3BpbyAzMyAwPjsKKworCXBvcnRz IHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCXBv cnRAMCB7CisJCQlyZWcgPSA8MD47CisKKwkJCXZnYV9icmlkZ2VfaW46IGVuZHBvaW50IHsKKwkJ CQlyZW1vdGUtZW5kcG9pbnQgPSA8JmRzaV9vdXQ+OworCQkJfTsKKwkJfTsKKworCQlwb3J0QDEg eworCQkJcmVnID0gPDE+OworCisJCQl2Z2FfYnJpZGdlX291dDogZW5kcG9pbnQgeworCQkJCXJl bW90ZS1lbmRwb2ludCA9IDwmZWRwX2luPjsKKwkJCX07CisJCX07CisJfTsKK30KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTg2LmMgYi9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmZmMjI2YjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3Rp LXNuNjVkc2k4Ni5jCkBAIC0wLDAgKzEsMTE0NiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAKKy8qIENvcHlyaWdodCAoYykgMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAor ICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2RlZmluZSBwcl9m bXQoZm10KSAiJXM6ICIgZm10LCBfX2Z1bmNfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4K KyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNp bmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNp bmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8 bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUg PGxpbnV4L29mX2dyYXBoLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8 bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5o PgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX21p cGlfZHNpLmg+CisKK3N0cnVjdCBzbjY1ZHNpODZfcmVnX2NmZyB7CisJdTggcmVnOworCXU4IHZh bDsKKwlpbnQgc2xlZXBfaW5fbXM7Cit9OworCitzdHJ1Y3Qgc242NWRzaTg2X3ZpZGVvX2NmZyB7 CisJdTMyIGhfYWN0aXZlOworCXUzMiBoX2Zyb250X3BvcmNoOworCXUzMiBoX3B1bHNlX3dpZHRo OworCXUzMiBoX2JhY2tfcG9yY2g7CisJYm9vbCBoX3BvbGFyaXR5OworCXUzMiB2X2FjdGl2ZTsK Kwl1MzIgdl9mcm9udF9wb3JjaDsKKwl1MzIgdl9wdWxzZV93aWR0aDsKKwl1MzIgdl9iYWNrX3Bv cmNoOworCWJvb2wgdl9wb2xhcml0eTsKKwl1MzIgcGNsa19raHo7CisJdTMyIG51bV9vZl9sYW5l czsKK307CisKK3N0cnVjdCBzbjY1ZHNpODZfZ3Bpb3MgeworCXUzMiBpcnFfZ3BpbzsKKwl1MzIg ZW5hYmxlX2dwaW87CisJdTMyIGkyY19zZGE7CisJdTMyIGkyY19zY2w7CisJdTMyIHBhbmVsX2Jp YXNfZW47CisJdTMyIHBhbmVsX2JrbHRfZW47CisJdTMyIHBhbmVsX2JrbHRfY3RybDsKK307CisK K3N0cnVjdCBzbjY1ZHNpODZfcmVnX2NmZyByZWdfY2ZnX3Byb3RvXzBbXSA9IHsKKwl7MHgwQSwg MHgwMiwgMHgwfSwJLyogUkVGQ0xLIDE5LjJNSHogKi8KKwl7MHgxMCwgMHgyNiwgMHgxNH0sCS8q IERTSSBsYW5lcyAqLworCXsweDEyLCAweDdCLCAweDB9LAkvKiBEU0lBIENMSyBGUkVRIDMwOS4w M01IeiAqLworCXsweDVBLCAweDA1LCAweDB9LAkvKiBlbmhhbmNlZCBmcmFtaW5nIGFuZCBBU1NS ICovCisJezB4OTMsIDB4MzAsIDB4MH0sCS8qIDQgRFAgbGFuZXMgbm8gU1NDICovCisJezB4OTQs IDB4ODAsIDB4MH0sCS8qIEhCUiAqLworCXsweDBELCAweDAxLCAweDB9LAkvKiBQTEwgRU5BQkxF ICovCisJezB4OTUsIDB4MDAsIDB4MH0sCS8qIFBPU1QtQ3Vyc29yMiAwZEIgKi8KKwl7MHg2NCwg MHgwMSwgMHgwfSwJLyogV3JpdGVEUENEIFJlZ2lzdGVyIDB4MDAxMEEgaW4gU2luayAqLworCXsw eDc0LCAweDAwLCAweDB9LAorCXsweDc1LCAweDAxLCAweDB9LAorCXsweDc2LCAweDBBLCAweDB9 LAorCXsweDc3LCAweDAxLCAweDB9LAorCXsweDc4LCAweDgxLCAweDE0fSwKKwl7MHg5NiwgMHgw QSwgMHgxNH0sCS8qIFNlbWktQXV0byBUUkFJTiAqLworCXsweEZGLCAweDE0LCAweDB9LAorCXsw eDIwLCAweDcwLCAweDB9LAkvKiBDSEFfQUNUSVZFX0xJTkVfTEVOR1RIICovCisJezB4MjEsIDB4 MDgsIDB4MH0sCisJezB4MjQsIDB4QTAsIDB4MH0sCS8qIENIQV9WRVJUSUNBTF9ESVNQTEFZX1NJ WkUgKi8KKwl7MHgyNSwgMHgwNSwgMHgwfSwKKwl7MHgyQywgMHgyMCwgMHgwfSwJLyogQ0hBX0hT WU5DX1BVTFNFX1dJRFRIICovCisJezB4MkQsIDB4ODAsIDB4MH0sCisJezB4MzAsIDB4MEEsIDB4 MH0sCS8qIENIQV9WU1lOQ19QVUxTRV9XSURUSCAqLworCXsweDMxLCAweDgwLCAweDB9LAorCXsw eDM0LCAweDUwLCAweDB9LAkvKiBDSEFfSE9SSVpPTlRBTF9CQUNLX1BPUkNIICovCisJezB4MzYs IDB4MUIsIDB4MH0sCS8qIENIQV9WRVJUSUNBTF9CQUNLX1BPUkNIICovCisJezB4MzgsIDB4MzAs IDB4MH0sCS8qIENIQV9IT1JJWk9OVEFMX0ZST05UX1BPUkNIICovCisJezB4M0EsIDB4MDMsIDB4 MH0sCS8qIENIQV9WRVJUSUNBTF9GUk9OVF9QT1JDSCAqLworCXsweDVCLCAweDAwLCAweDB9LAkv KiBEUC0gMjRicHAgKi8KKwl7MHgzQywgMHgwMCwgMHgxNH0sCS8qIENPTE9SIEJBUiBkaXNhYmxl ZCAqLworCXsweDVBLCAweDBELCAweDB9LAkvKiBFaG5jIGZyYW1pbmcsIEFTU1IsIFZzdHJlYW0g ZW5hYmxlICovCit9OworCitzdHJ1Y3Qgc242NWRzaTg2IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7 CisJc3RydWN0IGRybV9icmlkZ2UgYnJpZGdlOworCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5l Y3RvcjsKKworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqaG9zdF9ub2RlOworCXN0cnVjdCBtaXBpX2Rz aV9kZXZpY2UgKmRzaTsKKworCXU4IGkyY19hZGRyOworCWludCBpcnE7CisKKwlzdHJ1Y3Qgc242 NWRzaTg2X2dwaW9zIGdwaW9zOworCisJdW5zaWduZWQgaW50IG51bV9zdXBwbGllczsKKwlzdHJ1 Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSAqc3VwcGxpZXM7CisKKwlzdHJ1Y3QgaTJjX2NsaWVudCAq aTJjX2NsaWVudDsKKworCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgY29ubmVjdG9yX3N0YXR1 czsKKwlib29sIHBvd2VyX29uOworCisJYm9vbCBpc19wbHVnZ2FibGU7CisJdTMyIG51bV9vZl9t b2RlczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG1vZGVfbGlzdDsKKwlzdHJ1Y3QgZWRpZCAqZWRpZDsK KworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIGN1cnJfbW9kZTsKKwlzdHJ1Y3Qgc242NWRzaTg2 X3ZpZGVvX2NmZyB2aWRlb19jZmc7Cit9OworCitzdGF0aWMgaW50IHNuNjVkc2k4Nl93cml0ZShz dHJ1Y3Qgc242NWRzaTg2ICpwZGF0YSwgdTggcmVnLCB1OCB2YWwpCit7CisJc3RydWN0IGkyY19j bGllbnQgKmNsaWVudCA9IHBkYXRhLT5pMmNfY2xpZW50OworCXU4IGJ1ZlsyXSA9IHtyZWcsIHZh bH07CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IGNsaWVudC0+YWRkciwKKwkJ LmZsYWdzID0gMCwKKwkJLmxlbiA9IDIsCisJCS5idWYgPSBidWYsCisJfTsKKworCWlmIChpMmNf dHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCAmbXNnLCAxKSA8IDEpIHsKKwkJcHJfZXJyKCJpMmMg d3JpdGUgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgc242NWRzaTg2X3JlYWQoc3RydWN0IHNuNjVkc2k4NiAqcGRhdGEsIHU4IHJl ZywgY2hhciAqYnVmLCB1MzIgc2l6ZSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0g cGRhdGEtPmkyY19jbGllbnQ7CisJc3RydWN0IGkyY19tc2cgbXNnWzJdID0geworCQl7CisJCQku YWRkciA9IGNsaWVudC0+YWRkciwKKwkJCS5mbGFncyA9IDAsCisJCQkubGVuID0gMSwKKwkJCS5i dWYgPSAmcmVnLAorCQl9LAorCQl7CisJCQkuYWRkciA9IGNsaWVudC0+YWRkciwKKwkJCS5mbGFn cyA9IEkyQ19NX1JELAorCQkJLmxlbiA9IHNpemUsCisJCQkuYnVmID0gYnVmLAorCQl9CisJfTsK KworCWlmIChpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2csIDIpICE9IDIpIHsKKwkJ cHJfZXJyKCJpMmMgcmVhZCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBzbjY1ZHNpODZfd3JpdGVfYXJyYXkoc3RydWN0IHNuNjVk c2k4NiAqcGRhdGEsCisJc3RydWN0IHNuNjVkc2k4Nl9yZWdfY2ZnICpjZmcsIGludCBzaXplKQor eworCWludCByZXQgPSAwOworCWludCBpOworCisJc2l6ZSA9IHNpemUgLyBzaXplb2Yoc3RydWN0 IHNuNjVkc2k4Nl9yZWdfY2ZnKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCXJl dCA9IHNuNjVkc2k4Nl93cml0ZShwZGF0YSwgY2ZnW2ldLnJlZywgY2ZnW2ldLnZhbCk7CisKKwkJ aWYgKHJldCAhPSAwKSB7CisJCQlwcl9lcnIoInJlZyB3cml0ZXMgZmFpbGVkLiBMYXN0IHdyaXRl ICUwMlggdG8gJTAyWFxuIiwKKwkJCQljZmdbaV0udmFsLCBjZmdbaV0ucmVnKTsKKwkJCWdvdG8g d19yZWdzX2ZhaWw7CisJCX0KKworCQlpZiAoY2ZnW2ldLnNsZWVwX2luX21zKQorCQkJbXNsZWVw KGNmZ1tpXS5zbGVlcF9pbl9tcyk7CisJfQorCit3X3JlZ3NfZmFpbDoKKwlpZiAocmV0ICE9IDAp CisJCXByX2VycigiZXhpdGluZyB3aXRoIHJldCA9ICVkIGFmdGVyICVkIHdyaXRlc1xuIiwgcmV0 LCBpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc242NWRzaTg2X2dwaW9fY29u ZmlndXJlKHN0cnVjdCBzbjY1ZHNpODYgKnBkYXRhLCBib29sIG9uKQoreworCWludCByZXQgPSAw OworCisJaWYgKG9uKSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+Z3Bpb3MuZW5hYmxl X2dwaW8sCisJCQkic242NWRzaTg2LWVuYWJsZS1ncGlvIik7CisJCWlmIChyZXQpIHsKKwkJCXBy X2Vycigic242NWRzaTg2IGVuYWJsZSBncGlvIHJlcXVlc3QgZmFpbGVkXG4iKTsKKwkJCWdvdG8g ZXJyb3I7CisJCX0KKworCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQocGRhdGEtPmdwaW9z LmVuYWJsZV9ncGlvLCAxKTsKKwkJaWYgKHJldCkgeworCQkJcHJfZXJyKCJzbjY1ZHNpODYgZW5h YmxlIGdwaW8gZGlyZWN0aW9uIGZhaWxlZFxuIik7CisJCQlnb3RvIGVuYWJsZV9lcnJvcjsKKwkJ fQorCisJCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlvcy5pMmNfc2RhKSkgeworCQkJcmV0 ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5ncGlvcy5pMmNfc2RhLAorCQkJCQkic242NWRzaTg2LWky Yy1zZGEiKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlwcl9lcnIoInNuNjVkc2k4NiBpMmMgc2RhIHJl cXVlc3QgZmFpbGVkXG4iKTsKKwkJCQlnb3RvIGVuYWJsZV9lcnJvcjsKKwkJCX0KKworCQkJcmV0 ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5ncGlvcy5pMmNfc2RhLCAxKTsKKwkJCWlm IChyZXQpIHsKKwkJCQlwcl9lcnIoInNuNjVkc2k4NiBpMmMgc2RhIGRpcmVjdGlvbiBmYWlsZWRc biIpOworCQkJCWdvdG8gaTJjX3NkYV9lcnJvcjsKKwkJCX0KKwkJfQorCisJCWlmIChncGlvX2lz X3ZhbGlkKHBkYXRhLT5ncGlvcy5pMmNfc2NsKSkgeworCQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBk YXRhLT5ncGlvcy5pMmNfc2NsLAorCQkJCQkic242NWRzaTg2LWkyYy1zY2wiKTsKKwkJCWlmIChy ZXQpIHsKKwkJCQlwcl9lcnIoInNuNjVkc2k4NiBpMmMgc2NsIHJlcXVlc3QgZmFpbGVkXG4iKTsK KwkJCQlnb3RvIGkyY19zZGFfZXJyb3I7CisJCQl9CisKKwkJCXJldCA9IGdwaW9fZGlyZWN0aW9u X291dHB1dChwZGF0YS0+Z3Bpb3MuaTJjX3NjbCwgMSk7CisJCQlpZiAocmV0KSB7CisJCQkJcHJf ZXJyKCJzbjY1ZHNpODYgaTJjIHNjbCBkaXJlY3Rpb24gZmFpbGVkXG4iKTsKKwkJCQlnb3RvIGky Y19zY2xfZXJyb3I7CisJCQl9CisJCX0KKworCQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bp b3MuaXJxX2dwaW8pKSB7CisJCQlyZXQgPSBncGlvX3JlcXVlc3QocGRhdGEtPmdwaW9zLmlycV9n cGlvLAorCQkJCSJzbjY1ZHNpODYtaXJxLWdwaW8iKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlwcl9l cnIoInNuNjVkc2k4NiBpcnEgZ3BpbyByZXF1ZXN0IGZhaWxlZFxuIik7CisJCQkJZ290byBpMmNf c2NsX2Vycm9yOworCQkJfQorCisJCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChwZGF0YS0+ Z3Bpb3MuaXJxX2dwaW8pOworCQkJaWYgKHJldCkgeworCQkJCXByX2Vycigic242NWRzaTg2IGly cSBncGlvIGRpcmVjdGlvbiBmYWlsZWRcbiIpOworCQkJCWdvdG8gaXJxX2Vycm9yOworCQkJfQor CQl9CisKKwkJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPmdwaW9zLnBhbmVsX2JpYXNfZW4pKSB7 CisJCQlyZXQgPSBncGlvX3JlcXVlc3QocGRhdGEtPmdwaW9zLnBhbmVsX2JpYXNfZW4sCisJCQkJ InNuNjVkc2k4Ni1wYW5lbC1iaWFzLWdwaW8iKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlwcl9lcnIo InNuNjVkc2k4NiBiaWFzIGVuIHJlcXVlc3QgZmFpbGVkXG4iKTsKKwkJCQlnb3RvIGlycV9lcnJv cjsKKwkJCX0KKworCQkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KAorCQkJCQlwZGF0YS0+ Z3Bpb3MucGFuZWxfYmlhc19lbiwgMSk7CisJCQlpZiAocmV0KSB7CisJCQkJcHJfZXJyKCJzbjY1 ZHNpODYgYmlhcyBlbiBkaXJlY3Rpb24gZmFpbGVkXG4iKTsKKwkJCQlnb3RvIHBhbmVsX2JpYXNf ZXJyb3I7CisJCQl9CisJCX0KKworCQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb3MucGFu ZWxfYmtsdF9lbikpIHsKKwkJCXJldCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+Z3Bpb3MucGFuZWxf YmtsdF9lbiwKKwkJCQkic242NWRzaTg2LXBhbmVsLWJrbHQtZW4iKTsKKwkJCWlmIChyZXQpIHsK KwkJCQlwcl9lcnIoInNuNjVkc2k4NiBia2x0IGVuIHJlcXVlc3QgZmFpbGVkXG4iKTsKKwkJCQln b3RvIHBhbmVsX2JpYXNfZXJyb3I7CisJCQl9CisKKwkJCXJldCA9IGdwaW9fZGlyZWN0aW9uX291 dHB1dCgKKwkJCQkJcGRhdGEtPmdwaW9zLnBhbmVsX2JrbHRfZW4sIDEpOworCQkJaWYgKHJldCkg eworCQkJCXByX2Vycigic242NWRzaTg2IGJrbHQgZW4gZGlyZWN0aW9uIGZhaWxlZFxuIik7CisJ CQkJZ290byBwYW5lbF9ia2x0X2VuX2Vycm9yOworCQkJfQorCQl9CisKKwkJaWYgKGdwaW9faXNf dmFsaWQocGRhdGEtPmdwaW9zLnBhbmVsX2JrbHRfY3RybCkpIHsKKwkJCXJldCA9IGdwaW9fcmVx dWVzdChwZGF0YS0+Z3Bpb3MucGFuZWxfYmtsdF9jdHJsLAorCQkJCSJzbjY1ZHNpODYtcGFuZWwt YmtsdC1jdHJsIik7CisJCQlpZiAocmV0KSB7CisJCQkJcHJfZXJyKCJzbjY1ZHNpODYgYmtsdCBj dHJsIHJlcXVlc3QgZmFpbGVkXG4iKTsKKwkJCQlnb3RvIHBhbmVsX2JrbHRfZW5fZXJyb3I7CisJ CQl9CisKKwkJCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dCgKKwkJCQkJcGRhdGEtPmdwaW9z LnBhbmVsX2JrbHRfY3RybCwgMSk7CisJCQlpZiAocmV0KSB7CisJCQkJcHJfZXJyKCJzbjY1ZHNp ODYgYmtsdCBjdGwgZGlyZWN0aW9uIGZhaWxlZFxuIik7CisJCQkJZ290byBwYW5lbF9ia2x0X2N0 cmxfZXJyb3I7CisJCQl9CisJCX0KKworCX0gZWxzZSB7CisJCWlmIChncGlvX2lzX3ZhbGlkKHBk YXRhLT5ncGlvcy5wYW5lbF9ia2x0X2N0cmwpKQorCQkJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvcy5w YW5lbF9ia2x0X2N0cmwpOworCQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb3MucGFuZWxf YmtsdF9lbikpCisJCQlncGlvX2ZyZWUocGRhdGEtPmdwaW9zLnBhbmVsX2JrbHRfZW4pOworCQlp ZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb3MucGFuZWxfYmlhc19lbikpCisJCQlncGlvX2Zy ZWUocGRhdGEtPmdwaW9zLnBhbmVsX2JpYXNfZW4pOworCQlpZiAoZ3Bpb19pc192YWxpZChwZGF0 YS0+Z3Bpb3MuaXJxX2dwaW8pKQorCQkJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvcy5pcnFfZ3Bpbyk7 CisJCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlvcy5pMmNfc2NsKSkKKwkJCWdwaW9fZnJl ZShwZGF0YS0+Z3Bpb3MuaTJjX3NjbCk7CisJCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlv cy5pMmNfc2RhKSkKKwkJCWdwaW9fZnJlZShwZGF0YS0+Z3Bpb3MuaTJjX3NkYSk7CisJCWdwaW9f ZnJlZShwZGF0YS0+Z3Bpb3MuZW5hYmxlX2dwaW8pOworCX0KKworCXJldHVybiByZXQ7CisKK3Bh bmVsX2JrbHRfY3RybF9lcnJvcjoKKwlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb3MucGFu ZWxfYmtsdF9jdHJsKSkKKwkJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvcy5wYW5lbF9ia2x0X2N0cmwp OworcGFuZWxfYmtsdF9lbl9lcnJvcjoKKwlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb3Mu cGFuZWxfYmtsdF9lbikpCisJCWdwaW9fZnJlZShwZGF0YS0+Z3Bpb3MucGFuZWxfYmtsdF9lbik7 CitwYW5lbF9iaWFzX2Vycm9yOgorCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlvcy5wYW5l bF9iaWFzX2VuKSkKKwkJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvcy5wYW5lbF9iaWFzX2VuKTsKK2ly cV9lcnJvcjoKKwlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb3MuaXJxX2dwaW8pKQorCQln cGlvX2ZyZWUocGRhdGEtPmdwaW9zLmlycV9ncGlvKTsKK2kyY19zY2xfZXJyb3I6CisJaWYgKGdw aW9faXNfdmFsaWQocGRhdGEtPmdwaW9zLmkyY19zY2wpKQorCQlncGlvX2ZyZWUocGRhdGEtPmdw aW9zLmkyY19zY2wpOworaTJjX3NkYV9lcnJvcjoKKwlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+ Z3Bpb3MuaTJjX3NkYSkpCisJCWdwaW9fZnJlZShwZGF0YS0+Z3Bpb3MuaTJjX3NkYSk7CitlbmFi bGVfZXJyb3I6CisJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvcy5lbmFibGVfZ3Bpbyk7CitlcnJvcjoK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzbjY1ZHNpODZfcG93ZXJfY3RybChzdHJ1 Y3Qgc242NWRzaTg2ICpwZGF0YSwgYm9vbCBlbmFibGUpCit7CisJaWYgKCFwZGF0YSkKKwkJcmV0 dXJuOworCisJaWYgKCFwZGF0YS0+cG93ZXJfb24gJiYgZW5hYmxlKSB7CisJCWlmIChzbjY1ZHNp ODZfZ3Bpb19jb25maWd1cmUocGRhdGEsIHRydWUpKSB7CisJCQlwcl9lcnIoImJyaWRnZSBncGlv IGVuYWJsZSBmYWlsZWRcbiIpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKHJlZ3VsYXRvcl9i dWxrX2VuYWJsZShwZGF0YS0+bnVtX3N1cHBsaWVzLAorCQkJCQkJcGRhdGEtPnN1cHBsaWVzKSkg eworCQkJcHJfZXJyKCJicmlkZ2UgcmVndWxhdG9yIGVuYWJsZSBmYWlsZWRcbiIpOworCQkJcmV0 dXJuOworCQl9CisJCXBkYXRhLT5wb3dlcl9vbiA9IHRydWU7CisJfSBlbHNlIGlmIChwZGF0YS0+ cG93ZXJfb24gJiYgIWVuYWJsZSkgeworCQlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKHBkYXRhLT5u dW1fc3VwcGxpZXMsIHBkYXRhLT5zdXBwbGllcyk7CisKKwkJc242NWRzaTg2X2dwaW9fY29uZmln dXJlKHBkYXRhLCBmYWxzZSk7CisJCXBkYXRhLT5wb3dlcl9vbiA9IGZhbHNlOworCX0gZWxzZSB7 CisJCXByX2RlYnVnKCJ1bm5lY2Vzc2FyeSBjYWxsIHRvIHBvd2VyIGNvbnRyb2xcbiIpOworCX0K K30KKworLyogQ29ubmVjdG9yIGZ1bmNzICovCitzdGF0aWMgc3RydWN0IHNuNjVkc2k4NiAqY29u bmVjdG9yX3RvX3NuNjVkc2k4NihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQorewor CXJldHVybiBjb250YWluZXJfb2YoY29ubmVjdG9yLCBzdHJ1Y3Qgc242NWRzaTg2LCBjb25uZWN0 b3IpOworfQorCitzdGF0aWMgaW50IHNuNjVkc2k4Nl9zZW5kX2F1eF9jbWQoc3RydWN0IHNuNjVk c2k4NiAqcGRhdGEsCisJCQkJICB1OCBjbWQsIHU4IGFkZHIsIHU4IGxlbmd0aCwgaW50IHdfZGF0 YSkKK3sKKwl1OCByZWFkID0gMDsKKwlpbnQgcmV0cnlfY250ID0gMTA7CisKKwlzbjY1ZHNpODZf d3JpdGUocGRhdGEsIDB4NzgsIChjbWQgPDwgNCkpOwkvKiBBVVhfQ01EICovCisJc242NWRzaTg2 X3dyaXRlKHBkYXRhLCAweDc2LCBhZGRyKTsJCS8qIEFVWF9BRERSICovCisJc242NWRzaTg2X3dy aXRlKHBkYXRhLCAweDc3LCBsZW5ndGgpOwkJLyogQVVYX0xFTkdUSCAqLworCWlmICh3X2RhdGEg Pj0gMCkKKwkJc242NWRzaTg2X3dyaXRlKHBkYXRhLCAweDY0LCAodTgpd19kYXRhKTsJLyogQVVY X1dEQVRBMCAqLworCisJLyogc2V0IFNFTkQgYml0ICovCisJc242NWRzaTg2X3JlYWQocGRhdGEs IDB4NzgsICZyZWFkLCAxKTsKKwlyZWFkIHw9IEJJVCgwKTsKKwlzbjY1ZHNpODZfd3JpdGUocGRh dGEsIDB4NzgsIHJlYWQpOworCisJLyogcG9sbCBmb3IgYnJpZGdlIHRvIGFjayBTRU5EIGJpdCAq LworCXdoaWxlIChyZXRyeV9jbnQpIHsKKwkJc242NWRzaTg2X3JlYWQocGRhdGEsIDB4NzgsICZy ZWFkLCAweDEpOworCQlpZiAoIShyZWFkICYgQklUKDApKSkKKwkJCWJyZWFrOworCQlyZXRyeV9j bnQtLTsKKwkJdWRlbGF5KDEwMDApOworCX0KKworCWlmICghcmV0cnlfY250KSB7CisJCXByX2Vy cigiYXV4X2NtZCB0cmFuc2ZlciBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc242NWRzaTg2X3JlYWRfZWRpZChzdHJ1Y3Qgc242 NWRzaTg2ICpwZGF0YSwgdTggKmJ1ZikKK3sKKwlpbnQgaSA9IDA7CisJdTggYWRkciA9IDB4Nzk7 CS8qIEFVWF9SREFUQTAgKi8KKwl1OCAqZGF0YSA9IGJ1ZjsKKworCWlmICghZGF0YSkKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwlpZiAoc242NWRzaTg2X3NlbmRfYXV4X2NtZChwZGF0YSwgMHg0LCAw eDUwLCAweDAsIC0xKSB8fAorCQlzbjY1ZHNpODZfc2VuZF9hdXhfY21kKHBkYXRhLCAweDQsIDB4 NTAsIDB4MDEsIDB4MCkgfHwKKwkJc242NWRzaTg2X3NlbmRfYXV4X2NtZChwZGF0YSwgMHg1LCAw eDUwLCAweDAsIC0xKSB8fAorCQlzbjY1ZHNpODZfc2VuZF9hdXhfY21kKHBkYXRhLCAweDUsIDB4 NTAsIDB4MTAsIC0xKSkKKwkJZ290byBlcnJvcjsKKworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsr KSB7CisJCWlmIChzbjY1ZHNpODZfcmVhZChwZGF0YSwgYWRkciwgZGF0YSwgMHgxKSkKKwkJCWdv dG8gZXJyb3I7CisJCWFkZHIrKzsKKwkJZGF0YSsrOworCX0KKworCXJldHVybiAwOworZXJyb3I6 CisJcHJfZXJyKCJlZGlkIHJlYWQgb3ZlciBpMmMgZmFpbGVkXG4iKTsKKwlyZXR1cm4gLUVJTlZB TDsKK30KKworc3RhdGljIGludCBzbjY1ZHNpODZfcmVhZF9lZGlkX2Jsb2NrKHN0cnVjdCBzbjY1 ZHNpODYgKnBkYXRhLAorCQkJICAgICAgIHU4ICpidWYsIHVuc2lnbmVkIGludCBibG9jaykKK3sK KwlpZiAoYmxvY2sgPT0gMCkgeworCQlpZiAoc242NWRzaTg2X3JlYWRfZWRpZChwZGF0YSwgYnVm KSkKKwkJCWdvdG8gZXJyb3I7CisJfSBlbHNlIGlmIChibG9jayA9PSAxKSB7CisJCS8qIG1vdmUg c2VnbWVudCBwb2ludGVyICovCisJCWlmIChzbjY1ZHNpODZfc2VuZF9hdXhfY21kKHBkYXRhLCAw eDQsIDB4MzAsIDB4MCwgLTEpIHx8CisJCQlzbjY1ZHNpODZfc2VuZF9hdXhfY21kKHBkYXRhLCAw eDQsIDB4MzAsIDB4MDEsIDB4MSkgfHwKKwkJCXNuNjVkc2k4Nl9zZW5kX2F1eF9jbWQocGRhdGEs IDB4MCwgMHgzMCwgMHgwMCwgLTEpKQorCQkJZ290byBlcnJvcjsKKwkJZWxzZQorCQkJaWYgKHNu NjVkc2k4Nl9yZWFkX2VkaWQocGRhdGEsIGJ1ZikpCisJCQkJZ290byBlcnJvcjsKKwl9IGVsc2Ug eworCQlwcl9kZWJ1ZygidW5zdXBwb3J0ZWQgZWRpZCBibG9ja1xuIik7CisJCWdvdG8gZXJyb3I7 CisJfQorCisJcmV0dXJuIDA7CitlcnJvcjoKKwlwcl9lcnIoImVkaWQgYmxvY2sgcmVhZCBmYWls ZWRcbiIpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHNuNjVkc2k4Nl9nZXRf ZWRpZF9ibG9jayh2b2lkICpkYXRhLCB1OCAqYnVmLCB1bnNpZ25lZCBpbnQgYmxvY2ssCisJCQkJ ICBzaXplX3QgbGVuKQoreworCXN0cnVjdCBzbjY1ZHNpODYgKnBkYXRhID0gZGF0YTsKKwlpbnQg cmV0ID0gMDsKKworCXByX2RlYnVnKCJnZXQgZWRpZCBibG9jazogYmxvY2s9JWQsIGxlbj0lZFxu IiwgYmxvY2ssIChpbnQpbGVuKTsKKworCWlmIChsZW4gPiAxMjggfHwgYmxvY2sgPiAxKQorCQly ZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IHNuNjVkc2k4Nl9yZWFkX2VkaWRfYmxvY2socGRhdGEs IGJ1ZiwgYmxvY2spOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJlZGlkIHJlYWQgZmFpbGVkIGZv ciBibG9jazogJWQgcmV0OiAlZFxuIiwgYmxvY2ssIHJldCk7CisJCXJldHVybiByZXQ7CisJfQor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc242NWRzaTg2X2Nvbm5lY3Rvcl9nZXRfbW9k ZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3Qgc242NWRzaTg2 ICpwZGF0YSA9IGNvbm5lY3Rvcl90b19zbjY1ZHNpODYoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZSwgKm07CisKKwlpZiAocGRhdGEtPmVkaWQpCisJCXJldHVybiBk cm1fYWRkX2VkaWRfbW9kZXMoY29ubmVjdG9yLCBwZGF0YS0+ZWRpZCk7CisKKwlzbjY1ZHNpODZf cG93ZXJfY3RybChwZGF0YSwgdHJ1ZSk7CisJaWYgKHBkYXRhLT5pc19wbHVnZ2FibGUpIHsKKwkJ cGRhdGEtPmVkaWQgPSBkcm1fZG9fZ2V0X2VkaWQoY29ubmVjdG9yLAorCQkJCXNuNjVkc2k4Nl9n ZXRfZWRpZF9ibG9jaywgcGRhdGEpOworCisJCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRp ZF9wcm9wZXJ0eShjb25uZWN0b3IsIHBkYXRhLT5lZGlkKTsKKwkJcGRhdGEtPm51bV9vZl9tb2Rl cyA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsCisJCQkJCQkJCXBkYXRhLT5lZGlkKTsK Kwl9CisKKwlpZiAoIXBkYXRhLT5pc19wbHVnZ2FibGUgfHwgIXBkYXRhLT5udW1fb2ZfbW9kZXMp IHsKKwkJLyoKKwkJICogaWYgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgSFBEIG9yIGR1ZSB0byBz b21lIHJlYXNvbgorCQkgKiBFRElEIHJlYWQgZmFpbGVkIHRoZW4gZmFsbCBiYWNrIHRvIG1vZGVf bGlzdCB3aGljaCBpcworCQkgKiBhbHJlYWR5IHBhcnNlZCBmcm9tIGR0LgorCQkgKi8KKwkJbGlz dF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmcGRhdGEtPm1vZGVfbGlzdCwgaGVhZCkgeworCQkJbSA9 IGRybV9tb2RlX2R1cGxpY2F0ZShjb25uZWN0b3ItPmRldiwgbW9kZSk7CisJCQlpZiAoIW0pIHsK KwkJCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgbW9kZSAlZHglZFxuIiwKKwkJCQkJbW9kZS0+aGRp c3BsYXksIG1vZGUtPnZkaXNwbGF5KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWRybV9tb2RlX3By b2JlZF9hZGQoY29ubmVjdG9yLCBtKTsKKwkJfQorCX0KKworCXNuNjVkc2k4Nl9wb3dlcl9jdHJs KHBkYXRhLCBmYWxzZSk7CisJcmV0dXJuIHBkYXRhLT5udW1fb2ZfbW9kZXM7Cit9CisKK3N0YXRp YyBlbnVtIGRybV9tb2RlX3N0YXR1cworc242NWRzaTg2X2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICptb2RlKQoreworCXN0cnVjdCBzbjY1ZHNpODYgKnBkYXRhID0gY29ubmVjdG9yX3Rv X3NuNjVkc2k4Nihjb25uZWN0b3IpOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptOworCisJ aWYgKHBkYXRhLT5lZGlkKQorCQlyZXR1cm4gTU9ERV9PSzsKKworCWlmICghcGRhdGEtPmlzX3Bs dWdnYWJsZSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sICZwZGF0YS0+bW9kZV9saXN0LCBo ZWFkKSB7CisJCQlpZiAobS0+aGRpc3BsYXkgPT0gbW9kZS0+aGRpc3BsYXkgJiYKKwkJCQltLT52 ZGlzcGxheSA9PSBtb2RlLT52ZGlzcGxheSkKKwkJCQlyZXR1cm4gTU9ERV9PSzsKKwkJfQorCX0K KworCXJldHVybiBNT0RFX0JBRDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2hl bHBlcl9mdW5jcyBzbjY1ZHNpODZfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21v ZGVzID0gc242NWRzaTg2X2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCisJLm1vZGVfdmFsaWQgPSBzbjY1 ZHNpODZfY29ubmVjdG9yX21vZGVfdmFsaWQsCit9OworCitzdGF0aWMgZW51bSBkcm1fY29ubmVj dG9yX3N0YXR1cworc242NWRzaTg2X2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKK3sKKwlzdHJ1Y3Qgc242NWRzaTg2ICpwZGF0YSA9 IGNvbm5lY3Rvcl90b19zbjY1ZHNpODYoY29ubmVjdG9yKTsKKworCXBkYXRhLT5jb25uZWN0b3Jf c3RhdHVzID0gcGRhdGEtPnBvd2VyX29uID8KKwkJY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQg OiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKworCXJldHVybiBwZGF0YS0+Y29ubmVj dG9yX3N0YXR1czsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNz IHNuNjVkc2k4Nl9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVy X3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRldGVjdCA9IHNuNjVkc2k4Nl9jb25u ZWN0b3JfZGV0ZWN0LAorCS5kZXN0cm95ID0gZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwLAorCS5yZXNl dCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0 ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJ LmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ry b3lfc3RhdGUsCit9OworCitzdGF0aWMgc3RydWN0IHNuNjVkc2k4NiAqYnJpZGdlX3RvX3NuNjVk c2k4NihzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXJldHVybiBjb250YWluZXJfb2Yo YnJpZGdlLCBzdHJ1Y3Qgc242NWRzaTg2LCBicmlkZ2UpOworfQorCitzdGF0aWMgaW50IHNuNjVk c2k4Nl9yZWFkX2RldmljZV9yZXYoc3RydWN0IHNuNjVkc2k4NiAqcGRhdGEpCit7CisJdTggcmV2 ID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IHNuNjVkc2k4Nl9yZWFkKHBkYXRhLCAweDA4 LCAmcmV2LCAxKTsKKworCWlmICghcmV0KSB7CisJCWlmIChyZXYgPT0gMHgyKSB7CisJCQlwcl9p bmZvKCJTTjY1RFNJODYgcmV2aXNpb24gaWQ6IDB4JXhcbiIsIHJldik7CisJCX0gZWxzZSB7CisJ CQlwcl93YXJuKCJTTjY1RFNJODYgcmV2aXNpb24gaWQgbWlzbWF0Y2hcbiIpOworCQkJcmV0ID0g LUVJTlZBTDsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5f dCBzbjY1ZHNpODZfaXJxX3RocmVhZF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sK KwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc242 NWRzaTg2X3N1cHBseV9uYW1lc1tdID0geworCSJ2Y2NpbyIsCisJInZjY2EiLAorfTsKKworc3Rh dGljIGludCBzbjY1ZHNpODZfaW5pdF9yZWd1bGF0b3JzKHN0cnVjdCBzbjY1ZHNpODYgKnBkYXRh KQoreworCWNvbnN0IGNoYXIgKiBjb25zdCAqc3VwcGx5X25hbWVzOworCXVuc2lnbmVkIGludCBp OworCWludCByZXQ7CisKKwlzdXBwbHlfbmFtZXMgPSBzbjY1ZHNpODZfc3VwcGx5X25hbWVzOwor CXBkYXRhLT5udW1fc3VwcGxpZXMgPSBBUlJBWV9TSVpFKHNuNjVkc2k4Nl9zdXBwbHlfbmFtZXMp OworCisJcGRhdGEtPnN1cHBsaWVzID0gZGV2bV9rY2FsbG9jKHBkYXRhLT5kZXYsIHBkYXRhLT5u dW1fc3VwcGxpZXMsCisJCQkJICAgICBzaXplb2YoKnBkYXRhLT5zdXBwbGllcyksIEdGUF9LRVJO RUwpOworCWlmICghcGRhdGEtPnN1cHBsaWVzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAo aSA9IDA7IGkgPCBwZGF0YS0+bnVtX3N1cHBsaWVzOyBpKyspCisJCXBkYXRhLT5zdXBwbGllc1tp XS5zdXBwbHkgPSBzdXBwbHlfbmFtZXNbaV07CisKKwlyZXQgPSBkZXZtX3JlZ3VsYXRvcl9idWxr X2dldChwZGF0YS0+ZGV2LAorCQkJcGRhdGEtPm51bV9zdXBwbGllcywgcGRhdGEtPnN1cHBsaWVz KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHJlZ3VsYXRvcl9idWxrX2Vu YWJsZShwZGF0YS0+bnVtX3N1cHBsaWVzLCBwZGF0YS0+c3VwcGxpZXMpOworfQorCitzdGF0aWMg aW50IHNuNjVkc2k4Nl9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7 CisJc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3Q7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAq ZHNpOworCXN0cnVjdCBzbjY1ZHNpODYgKnBkYXRhID0gYnJpZGdlX3RvX3NuNjVkc2k4Nihicmlk Z2UpOworCWludCByZXQ7CisJY29uc3Qgc3RydWN0IG1pcGlfZHNpX2RldmljZV9pbmZvIGluZm8g PSB7IC50eXBlID0gInNuNjVkc2k4NiIsCisJCQkJCQkgICAuY2hhbm5lbCA9IDAsCisJCQkJCQkg ICAubm9kZSA9IE5VTEwsCisJCQkJCQkgfTsKKworCWlmICghYnJpZGdlLT5lbmNvZGVyKSB7CisJ CURSTV9FUlJPUigiUGFyZW50IGVuY29kZXIgb2JqZWN0IG5vdCBmb3VuZCIpOworCQlyZXR1cm4g LUVOT0RFVjsKKwl9CisKKwkvKiBObyBIUEQgKi8KKwlwZGF0YS0+Y29ubmVjdG9yLnBvbGxlZCA9 IDA7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoYnJpZGdlLT5kZXYsICZwZGF0YS0+Y29u bmVjdG9yLAorCQkJCSAmc242NWRzaTg2X2Nvbm5lY3Rvcl9mdW5jcywKKwkJCQkgRFJNX01PREVf Q09OTkVDVE9SX2VEUCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0 aWFsaXplIGNvbm5lY3RvciB3aXRoIGRybVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZHJt X2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZwZGF0YS0+Y29ubmVjdG9yLAorCQkJCSAmc242NWRzaTg2 X2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5j b2RlcigmcGRhdGEtPmNvbm5lY3RvciwgYnJpZGdlLT5lbmNvZGVyKTsKKworCWhvc3QgPSBvZl9m aW5kX21pcGlfZHNpX2hvc3RfYnlfbm9kZShwZGF0YS0+aG9zdF9ub2RlKTsKKwlpZiAoIWhvc3Qp IHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gZmluZCBkc2kgaG9zdFxuIik7CisJCXJldHVybiAtRU5P REVWOworCX0KKworCWRzaSA9IG1pcGlfZHNpX2RldmljZV9yZWdpc3Rlcl9mdWxsKGhvc3QsICZp bmZvKTsKKwlpZiAoSVNfRVJSKGRzaSkpIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gY3JlYXRlIGRz aSBkZXZpY2VcbiIpOworCQlyZXQgPSBQVFJfRVJSKGRzaSk7CisJCWdvdG8gZXJyX2RzaV9kZXZp Y2U7CisJfQorCisJLyogc2V0dGluZyB0byA0IGxhbmVzIGFsd2F5cyBmb3Igbm93ICovCisJZHNp LT5sYW5lcyA9IDQ7CisJZHNpLT5mb3JtYXQgPSBNSVBJX0RTSV9GTVRfUkdCODg4OworCWRzaS0+ bW9kZV9mbGFncyA9IE1JUElfRFNJX01PREVfVklERU8gfCBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZ TkNfUFVMU0UgfAorCQkJICBNSVBJX0RTSV9NT0RFX0VPVF9QQUNLRVQgfCBNSVBJX0RTSV9NT0RF X1ZJREVPX0hTRTsKKworCXJldCA9IG1pcGlfZHNpX2F0dGFjaChkc2kpOworCWlmIChyZXQgPCAw KSB7CisJCXByX2VycigiZmFpbGVkIHRvIGF0dGFjaCBkc2kgdG8gaG9zdFxuIik7CisJCWdvdG8g ZXJyX2RzaV9hdHRhY2g7CisJfQorCisJcGRhdGEtPmRzaSA9IGRzaTsKKworCXByX2RlYnVnKCJi cmlkZ2UgYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDA7CisKK2Vycl9kc2lfYXR0YWNoOgorCW1p cGlfZHNpX2RldmljZV91bnJlZ2lzdGVyKGRzaSk7CitlcnJfZHNpX2RldmljZToKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgdm9pZCBzbjY1ZHNpODZfc2V0X3ZpZGVvX2NmZyhzdHJ1Y3Qgc242 NWRzaTg2ICpwZGF0YSwKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwlzdHJ1Y3Qg c242NWRzaTg2X3ZpZGVvX2NmZyAqdmlkZW9fY2ZnKQoreworCXZpZGVvX2NmZy0+aF9hY3RpdmUg PSBtb2RlLT5oZGlzcGxheTsKKwl2aWRlb19jZmctPnZfYWN0aXZlID0gbW9kZS0+dmRpc3BsYXk7 CisJdmlkZW9fY2ZnLT5oX2Zyb250X3BvcmNoID0gbW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5o ZGlzcGxheTsKKwl2aWRlb19jZmctPnZfZnJvbnRfcG9yY2ggPSBtb2RlLT52c3luY19zdGFydCAt IG1vZGUtPnZkaXNwbGF5OworCXZpZGVvX2NmZy0+aF9iYWNrX3BvcmNoID0gbW9kZS0+aHRvdGFs IC0gbW9kZS0+aHN5bmNfZW5kOworCXZpZGVvX2NmZy0+dl9iYWNrX3BvcmNoID0gbW9kZS0+dnRv dGFsIC0gbW9kZS0+dnN5bmNfZW5kOworCXZpZGVvX2NmZy0+aF9wdWxzZV93aWR0aCA9IG1vZGUt PmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0OworCXZpZGVvX2NmZy0+dl9wdWxzZV93aWR0 aCA9IG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0OworCXZpZGVvX2NmZy0+cGNs a19raHogPSBtb2RlLT5jbG9jazsKKworCXZpZGVvX2NmZy0+aF9wb2xhcml0eSA9ICEhKG1vZGUt PmZsYWdzICYgRFJNX01PREVfRkxBR19QSFNZTkMpOworCXZpZGVvX2NmZy0+dl9wb2xhcml0eSA9 ICEhKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QVlNZTkMpOworCisJLyogc2V0dGluZyB0 byA0IGxhbmVzIGFsd2F5cyBmb3Igbm93ICovCisJdmlkZW9fY2ZnLT5udW1fb2ZfbGFuZXMgPSA0 OworCisJcHJfZGVidWcoInZpZGVvPWhbJWQsJWQsJWQsJWRdIHZbJWQsJWQsJWQsJWRdIHBjbGs9 JWQgbGFuZT0lZFxuIiwKKwkJdmlkZW9fY2ZnLT5oX2FjdGl2ZSwgdmlkZW9fY2ZnLT5oX2Zyb250 X3BvcmNoLAorCQl2aWRlb19jZmctPmhfcHVsc2Vfd2lkdGgsIHZpZGVvX2NmZy0+aF9iYWNrX3Bv cmNoLAorCQl2aWRlb19jZmctPnZfYWN0aXZlLCB2aWRlb19jZmctPnZfZnJvbnRfcG9yY2gsCisJ CXZpZGVvX2NmZy0+dl9wdWxzZV93aWR0aCwgdmlkZW9fY2ZnLT52X2JhY2tfcG9yY2gsCisJCXZp ZGVvX2NmZy0+cGNsa19raHosIHZpZGVvX2NmZy0+bnVtX29mX2xhbmVzKTsKK30KKworc3RhdGlj IHZvaWQgc242NWRzaTg2X2JyaWRnZV9tb2RlX3NldChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl LAorCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKmFkal9tb2RlKQoreworCXN0cnVjdCBzbjY1ZHNpODYgKnBkYXRh ID0gYnJpZGdlX3RvX3NuNjVkc2k4NihicmlkZ2UpOworCXN0cnVjdCBzbjY1ZHNpODZfdmlkZW9f Y2ZnICp2aWRlb19jZmcgPSAmcGRhdGEtPnZpZGVvX2NmZzsKKwlpbnQgcmV0ID0gMDsKKworCXBy X2RlYnVnKCJicmlkZ2UgbW9kZV9zZXQ6IGhkaXNwbGF5PSVkLCB2ZGlzcGxheT0lZCwgdnJlZnJl c2g9JWQsIGNsb2NrPSVkXG4iLAorCQlhZGpfbW9kZS0+aGRpc3BsYXksIGFkal9tb2RlLT52ZGlz cGxheSwKKwkJYWRqX21vZGUtPnZyZWZyZXNoLCBhZGpfbW9kZS0+Y2xvY2spOworCisJZHJtX21v ZGVfY29weSgmcGRhdGEtPmN1cnJfbW9kZSwgYWRqX21vZGUpOworCisJbWVtc2V0KHZpZGVvX2Nm ZywgMCwgc2l6ZW9mKHN0cnVjdCBzbjY1ZHNpODZfdmlkZW9fY2ZnKSk7CisJc242NWRzaTg2X3Nl dF92aWRlb19jZmcocGRhdGEsIGFkal9tb2RlLCB2aWRlb19jZmcpOworCisJaWYgKHZpZGVvX2Nm Zy0+bnVtX29mX2xhbmVzICE9IHBkYXRhLT5kc2ktPmxhbmVzKSB7CisJCW1pcGlfZHNpX2RldGFj aChwZGF0YS0+ZHNpKTsKKwkJcGRhdGEtPmRzaS0+bGFuZXMgPSB2aWRlb19jZmctPm51bV9vZl9s YW5lczsKKwkJcmV0ID0gbWlwaV9kc2lfYXR0YWNoKHBkYXRhLT5kc2kpOworCQlpZiAocmV0KQor CQkJcHJfZXJyKCJmYWlsZWQgdG8gY2hhbmdlIGhvc3QgbGFuZXNcbiIpOworCX0KK30KKworc3Rh dGljIHZvaWQgc242NWRzaTg2X2JyaWRnZV9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UpCit7CisJc3RydWN0IHNuNjVkc2k4NiAqcGRhdGEgPSBicmlkZ2VfdG9fc242NWRzaTg2KGJy aWRnZSk7CisKKwlzbjY1ZHNpODZfcG93ZXJfY3RybChwZGF0YSwgZmFsc2UpOworCisJcGRhdGEt PmNvbm5lY3Rvcl9zdGF0dXMgPSAgY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cit9CisK K3N0YXRpYyB2b2lkIHNuNjVkc2k4Nl9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpi cmlkZ2UpCit7CisJc3RydWN0IHNuNjVkc2k4NiAqcGRhdGEgPSBicmlkZ2VfdG9fc242NWRzaTg2 KGJyaWRnZSk7CisKKwlzbjY1ZHNpODZfcG93ZXJfY3RybChwZGF0YSwgdHJ1ZSk7CisKKwlzbjY1 ZHNpODZfd3JpdGVfYXJyYXkocGRhdGEsIHJlZ19jZmdfcHJvdG9fMCwgc2l6ZW9mKHJlZ19jZmdf cHJvdG9fMCkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3Mgc242 NWRzaTg2X2JyaWRnZV9mdW5jcyA9IHsKKwkuYXR0YWNoID0gc242NWRzaTg2X2JyaWRnZV9hdHRh Y2gsCisJLmVuYWJsZSA9IHNuNjVkc2k4Nl9icmlkZ2VfZW5hYmxlLAorCS5kaXNhYmxlID0gc242 NWRzaTg2X2JyaWRnZV9kaXNhYmxlLAorCS5tb2RlX3NldCA9IHNuNjVkc2k4Nl9icmlkZ2VfbW9k ZV9zZXQsCit9OworCitzdGF0aWMgaW50IHNuNjVkc2k4Nl9wYXJzZV9kdF9tb2RlcyhzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm5wLAorCQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAorCQkJCQl1MzIg Km51bV9vZl9tb2RlcykKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlOworCXUzMiBtb2RlX2NvdW50ID0gMDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUg PSBOVUxMOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdF9ub2RlID0gTlVMTDsKKwl1MzIgaF9m cm9udF9wb3JjaCwgaF9wdWxzZV93aWR0aCwgaF9iYWNrX3BvcmNoOworCXUzMiB2X2Zyb250X3Bv cmNoLCB2X3B1bHNlX3dpZHRoLCB2X2JhY2tfcG9yY2g7CisJYm9vbCBoX2FjdGl2ZV9oaWdoLCB2 X2FjdGl2ZV9oaWdoOworCXUzMiBmbGFncyA9IDA7CisKKwlyb290X25vZGUgPSBvZl9nZXRfY2hp bGRfYnlfbmFtZShucCwgInNuLGN1c3RvbS1tb2RlcyIpOworCWlmICghcm9vdF9ub2RlKSB7CisJ CXJvb3Rfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobnAsICJzbixjdXN0b20tbW9kZXMiLCAwKTsK KwkJaWYgKCFyb290X25vZGUpIHsKKwkJCXByX2luZm8oIk5vIG1vZGVzIHByZXNlbnQgZm9yIHNu LGN1c3RvbS1tb2RlcyIpOworCQkJZ290byBlbmQ7CisJCX0KKwl9CisKKwlmb3JfZWFjaF9jaGls ZF9vZl9ub2RlKHJvb3Rfbm9kZSwgbm9kZSkgeworCQlyYyA9IDA7CisJCW1vZGUgPSBremFsbG9j KHNpemVvZigqbW9kZSksIEdGUF9LRVJORUwpOworCQlpZiAoIW1vZGUpIHsKKwkJCXJjID0gIC1F Tk9NRU07CisJCQlnb3RvIGVuZDsKKwkJfQorCisJCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUs ICJzbixtb2RlLWgtYWN0aXZlIiwKKwkJCQkJCSZtb2RlLT5oZGlzcGxheSk7CisKKwkJb2ZfcHJv cGVydHlfcmVhZF91MzIobm9kZSwgInNuLG1vZGUtaC1mcm9udC1wb3JjaCIsCisJCQkJCQkmaF9m cm9udF9wb3JjaCk7CisJCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJzbixtb2RlLWgtcHVs c2Utd2lkdGgiLAorCQkJCQkJJmhfcHVsc2Vfd2lkdGgpOworCisJCW9mX3Byb3BlcnR5X3JlYWRf dTMyKG5vZGUsICJzbixtb2RlLWgtYmFjay1wb3JjaCIsCisJCQkJCQkmaF9iYWNrX3BvcmNoKTsK KworCQloX2FjdGl2ZV9oaWdoID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5vZGUsCisJCQkJCQki c24sbW9kZS1oLWFjdGl2ZS1oaWdoIik7CisKKwkJb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwg InNuLG1vZGUtdi1hY3RpdmUiLAorCQkJCQkJJm1vZGUtPnZkaXNwbGF5KTsKKwkJb2ZfcHJvcGVy dHlfcmVhZF91MzIobm9kZSwgInNuLG1vZGUtdi1mcm9udC1wb3JjaCIsCisJCQkJCQkmdl9mcm9u dF9wb3JjaCk7CisKKwkJb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInNuLG1vZGUtdi1wdWxz ZS13aWR0aCIsCisJCQkJCQkmdl9wdWxzZV93aWR0aCk7CisJCW9mX3Byb3BlcnR5X3JlYWRfdTMy KG5vZGUsICJzbixtb2RlLXYtYmFjay1wb3JjaCIsCisJCQkJCQkmdl9iYWNrX3BvcmNoKTsKKwkJ dl9hY3RpdmVfaGlnaCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChub2RlLAorCQkJCQkJInNuLG1v ZGUtdi1hY3RpdmUtaGlnaCIpOworCisJCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJzbixt b2RlLXJlZnJlc2gtcmF0ZSIsCisJCQkJCQkmbW9kZS0+dnJlZnJlc2gpOworCisJCW9mX3Byb3Bl cnR5X3JlYWRfdTMyKG5vZGUsICJzbixtb2RlLWNsb2NrLWluLWtoeiIsCisJCQkJCQkmbW9kZS0+ Y2xvY2spOworCisJCW1vZGUtPmhzeW5jX3N0YXJ0ID0gbW9kZS0+aGRpc3BsYXkgKyBoX2Zyb250 X3BvcmNoOworCQltb2RlLT5oc3luY19lbmQgPSBtb2RlLT5oc3luY19zdGFydCArIGhfcHVsc2Vf d2lkdGg7CisJCW1vZGUtPmh0b3RhbCA9IG1vZGUtPmhzeW5jX2VuZCArIGhfYmFja19wb3JjaDsK KwkJbW9kZS0+dnN5bmNfc3RhcnQgPSBtb2RlLT52ZGlzcGxheSArIHZfZnJvbnRfcG9yY2g7CisJ CW1vZGUtPnZzeW5jX2VuZCA9IG1vZGUtPnZzeW5jX3N0YXJ0ICsgdl9wdWxzZV93aWR0aDsKKwkJ bW9kZS0+dnRvdGFsID0gbW9kZS0+dnN5bmNfZW5kICsgdl9iYWNrX3BvcmNoOworCisJCWlmICgh bW9kZS0+aHRvdGFsIHx8ICFtb2RlLT52dG90YWwpIHsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdv dG8gZmFpbDsKKwkJfQorCisJCWlmIChoX2FjdGl2ZV9oaWdoKQorCQkJZmxhZ3MgfD0gRFJNX01P REVfRkxBR19QSFNZTkM7CisJCWVsc2UKKwkJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfTkhTWU5D OworCQlpZiAodl9hY3RpdmVfaGlnaCkKKwkJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfUFZTWU5D OworCQllbHNlCisJCQlmbGFncyB8PSBEUk1fTU9ERV9GTEFHX05WU1lOQzsKKwkJbW9kZS0+Zmxh Z3MgPSBmbGFnczsKKworCQlpZiAoIXJjKSB7CisJCQltb2RlX2NvdW50Kys7CisJCQlsaXN0X2Fk ZF90YWlsKCZtb2RlLT5oZWFkLCBoZWFkKTsKKwkJfQorCisJCWRybV9tb2RlX3NldF9uYW1lKG1v ZGUpOworCisJCXByX2RlYnVnKCJtb2RlWyVzXSBoWyVkLCVkLCVkLCVkXSB2WyVkLCVkLCVkLCVk XSAlZCAleCAlZGtIWlxuIiwKKwkJCW1vZGUtPm5hbWUsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT5o c3luY19zdGFydCwKKwkJCW1vZGUtPmhzeW5jX2VuZCwgbW9kZS0+aHRvdGFsLCBtb2RlLT52ZGlz cGxheSwKKwkJCW1vZGUtPnZzeW5jX3N0YXJ0LCBtb2RlLT52c3luY19lbmQsIG1vZGUtPnZ0b3Rh bCwKKwkJCW1vZGUtPnZyZWZyZXNoLCBtb2RlLT5mbGFncywgbW9kZS0+Y2xvY2spOworZmFpbDoK KwkJaWYgKHJjKSB7CisJCQlrZnJlZShtb2RlKTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJ aWYgKG51bV9vZl9tb2RlcykKKwkJKm51bV9vZl9tb2RlcyA9IG1vZGVfY291bnQ7CisKK2VuZDoK KwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgc242NWRzaTg2X3BhcnNlX2dwaW9zKHN0cnVj dCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJCXN0cnVjdCBzbjY1ZHNpODYgKnBkYXRhKQoreworCWlu dCByZXQgPSAwOworCisJcGRhdGEtPmdwaW9zLmlycV9ncGlvID0KKwkJb2ZfZ2V0X25hbWVkX2dw aW8obnAsICJzbixpcnEtZ3BpbyIsIDApOworCWlmICghZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bp b3MuaXJxX2dwaW8pKSB7CisJCXByX2VycigiaXJxIGdwaW8gbm90IHNwZWNpZmllZFxuIik7CisJ CXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwZGF0YS0+Z3Bpb3MuZW5hYmxl X2dwaW8gPQorCQlvZl9nZXRfbmFtZWRfZ3BpbyhucCwgInNuLGVuYWJsZS1ncGlvIiwgMCk7CisJ aWYgKCFncGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlvcy5lbmFibGVfZ3BpbykpIHsKKwkJcHJfZXJy KCJlbmFibGUgZ3BpbyBub3Qgc3BlY2lmaWVkXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290 byBleGl0OworCX0KKworCXBkYXRhLT5ncGlvcy5pMmNfc2RhID0KKwkJb2ZfZ2V0X25hbWVkX2dw aW8obnAsICJzbixpMmMtc2RhIiwgMCk7CisJaWYgKCFncGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlv cy5pMmNfc2RhKSkgeworCQlwcl9lcnIoImkyYyBzZGEgZ3BpbyBub3Qgc3BlY2lmaWVkXG4iKTsK KwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCXBkYXRhLT5ncGlvcy5pMmNf c2NsID0KKwkJb2ZfZ2V0X25hbWVkX2dwaW8obnAsICJzbixpMmMtc2NsIiwgMCk7CisJaWYgKCFn cGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlvcy5pMmNfc2NsKSkgeworCQlwcl9lcnIoImkyYyBzY2wg Z3BpbyBub3Qgc3BlY2lmaWVkXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBleGl0Owor CX0KKworCXBkYXRhLT5ncGlvcy5wYW5lbF9iaWFzX2VuID0KKwkJb2ZfZ2V0X25hbWVkX2dwaW8o bnAsICJzbixwYW5lbC1iaWFzLWVuIiwgMCk7CisJaWYgKCFncGlvX2lzX3ZhbGlkKHBkYXRhLT5n cGlvcy5wYW5lbF9iaWFzX2VuKSkgeworCQlwcl9lcnIoInBhbmVsIGJpYXMgZ3BpbyBub3Qgc3Bl Y2lmaWVkXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCXBkYXRh LT5ncGlvcy5wYW5lbF9ia2x0X2VuID0KKwkJb2ZfZ2V0X25hbWVkX2dwaW8obnAsICJzbixwYW5l bC1ia2x0LWVuIiwgMCk7CisJaWYgKCFncGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlvcy5wYW5lbF9i a2x0X2VuKSkgeworCQlwcl9lcnIoInBhbmVsIGJrbHQgZW4gZ3BpbyBub3Qgc3BlY2lmaWVkXG4i KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCXBkYXRhLT5ncGlvcy5w YW5lbF9ia2x0X2N0cmwgPQorCQlvZl9nZXRfbmFtZWRfZ3BpbyhucCwgInNuLHBhbmVsLWJrbHQt Y3RybCIsIDApOworCWlmICghZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb3MucGFuZWxfYmtsdF9j dHJsKSkgeworCQlwcl9lcnIoInBhbmVsIGJrbHQgY3RybCBncGlvIG5vdCBzcGVjaWZpZWRcbiIp OworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCitleGl0OgorCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBpbnQgc242NWRzaTg2X3BhcnNlX2R0KHN0cnVjdCBkZXZpY2UgKmRl diwgc3RydWN0IHNuNjVkc2k4NiAqcGRhdGEpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9 IGRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVuZF9ub2RlOworCWludCByZXQg PSAwOworCisJZW5kX25vZGUgPSBvZl9ncmFwaF9nZXRfZW5kcG9pbnRfYnlfcmVncyhucCwgMCwg MCk7CisJaWYgKCFlbmRfbm9kZSkgeworCQlwcl9lcnIoInJlbW90ZSBlbmRwb2ludCBub3QgZm91 bmRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwZGF0YS0+aG9zdF9ub2RlID0gb2Zf Z3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlbmRfbm9kZSk7CisJb2Zfbm9kZV9wdXQoZW5k X25vZGUpOworCWlmICghcGRhdGEtPmhvc3Rfbm9kZSkgeworCQlwcl9lcnIoInJlbW90ZSBub2Rl IG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlvZl9ub2RlX3B1dChwZGF0 YS0+aG9zdF9ub2RlKTsKKworCXJldCA9IHNuNjVkc2k4Nl9wYXJzZV9ncGlvcyhucCwgcGRhdGEp OworCisJcGRhdGEtPmlzX3BsdWdnYWJsZSA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgInNu LGlzLXBsdWdnYWJsZSIpOworCXByX2RlYnVnKCJpc19wbHVnZ2FibGUgPSAlZFxuIiwgcGRhdGEt PmlzX3BsdWdnYWJsZSk7CisJaWYgKCFwZGF0YS0+aXNfcGx1Z2dhYmxlKSB7CisJCUlOSVRfTElT VF9IRUFEKCZwZGF0YS0+bW9kZV9saXN0KTsKKwkJc242NWRzaTg2X3BhcnNlX2R0X21vZGVzKG5w LAorCQkJJnBkYXRhLT5tb2RlX2xpc3QsICZwZGF0YS0+bnVtX29mX21vZGVzKTsKKwl9CisKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNuNjVkc2k4Nl9wcm9iZShzdHJ1Y3QgaTJjX2Ns aWVudCAqY2xpZW50LAorCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3Ry dWN0IHNuNjVkc2k4NiAqcGRhdGE7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm1vZGUsICpuOworCisJaWYgKCFjbGllbnQgfHwgIWNsaWVudC0+ZGV2Lm9mX25vZGUp IHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5D X0kyQykpIHsKKwkJcHJfZXJyKCJkZXZpY2UgZG9lc24ndCBzdXBwb3J0IEkyQ1xuIik7CisJCXJl dHVybiAtRU5PREVWOworCX0KKworCXBkYXRhID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwK KwkJc2l6ZW9mKHN0cnVjdCBzbjY1ZHNpODYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBkYXRhKQor CQlyZXR1cm4gLUVOT01FTTsKKworCXBkYXRhLT5wb3dlcl9vbiA9IGZhbHNlOworCXBkYXRhLT5p c19wbHVnZ2FibGUgPSBmYWxzZTsKKwlwZGF0YS0+Y29ubmVjdG9yX3N0YXR1cyA9IGNvbm5lY3Rv cl9zdGF0dXNfZGlzY29ubmVjdGVkOworCXBkYXRhLT5kZXYgPSAmY2xpZW50LT5kZXY7CisJcGRh dGEtPmkyY19jbGllbnQgPSBjbGllbnQ7CisJcHJfZGVidWcoIkkyQyBhZGRyZXNzIGlzICV4XG4i LCBjbGllbnQtPmFkZHIpOworCisJcmV0ID0gc242NWRzaTg2X3BhcnNlX2R0KCZjbGllbnQtPmRl diwgcGRhdGEpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2UgZGV2aWNl IHRyZWVcbiIpOworCQlnb3RvIGVycl9kdF9wYXJzZTsKKwl9CisKKwlyZXQgPSBzbjY1ZHNpODZf Z3Bpb19jb25maWd1cmUocGRhdGEsIHRydWUpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJmYWls ZWQgdG8gY29uZmlndXJlIEdQSU9zXG4iKTsKKwkJZ290byBlcnJfZ3Bpb19jb25maWc7CisJfQor CisJcmV0ID0gc242NWRzaTg2X2luaXRfcmVndWxhdG9ycyhwZGF0YSk7CisJaWYgKHJldCkgewor CQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUgcmVndWxhdG9yc1xuIik7CisJCWdvdG8gZXJyX2dw aW9fY29uZmlnOworCX0KKworCXJldCA9IHNuNjVkc2k4Nl9yZWFkX2RldmljZV9yZXYocGRhdGEp OworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gcmVhZCBjaGlwIHJldlxuIik7CisJ CWdvdG8gZXJyX2dwaW9fY29uZmlnOworCX0gZWxzZSB7CisJCXByX2RlYnVnKCJicmlkZ2UgY2hp cCBlbmFibGVkIHN1Y2Nlc3NmdWxseVxuIik7CisJCXBkYXRhLT5wb3dlcl9vbiA9IHRydWU7CisJ fQorCisJcGRhdGEtPmlycSA9IGdwaW9fdG9faXJxKHBkYXRhLT5ncGlvcy5pcnFfZ3Bpbyk7CisJ cmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocGRhdGEtPmlycSwgTlVMTCwKKwkJCXNuNjVkc2k4 Nl9pcnFfdGhyZWFkX2hhbmRsZXIsCisJCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfT05F U0hPVCwKKwkJCSJzbjY1ZHNpODYiLCBwZGF0YSk7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xp ZW50LCBwZGF0YSk7CisJZGV2X3NldF9kcnZkYXRhKCZjbGllbnQtPmRldiwgcGRhdGEpOworCisJ LyoKKwkgKiBwb3dlciBkb3duIHRoZSBicmlkZ2UgY2hpcCB1bnRpbAorCSAqIGRybSBicmlkZ2Ug ZW5hYmxlIG9yIGRybSBnZXQgbW9kZXMgQVBJcworCSAqIGFyZSBpbnZva2VkLgorCSAqLworCXNu NjVkc2k4Nl9wb3dlcl9jdHJsKHBkYXRhLCBmYWxzZSk7CisKKwlwZGF0YS0+YnJpZGdlLmZ1bmNz ID0gJnNuNjVkc2k4Nl9icmlkZ2VfZnVuY3M7CisJcGRhdGEtPmJyaWRnZS5vZl9ub2RlID0gY2xp ZW50LT5kZXYub2Zfbm9kZTsKKworCWRybV9icmlkZ2VfYWRkKCZwZGF0YS0+YnJpZGdlKTsKKwor CXJldHVybiByZXQ7CisKK2Vycl9ncGlvX2NvbmZpZzoKKwlzbjY1ZHNpODZfZ3Bpb19jb25maWd1 cmUocGRhdGEsIGZhbHNlKTsKK2Vycl9kdF9wYXJzZToKKwlpZiAoIXBkYXRhLT5pc19wbHVnZ2Fi bGUpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIG4sICZwZGF0YS0+bW9kZV9s aXN0LCBoZWFkKSB7CisJCQlsaXN0X2RlbCgmbW9kZS0+aGVhZCk7CisJCQlrZnJlZShtb2RlKTsK KwkJfQorCQlwZGF0YS0+bnVtX29mX21vZGVzID0gMDsKKwl9CisJZGV2bV9rZnJlZSgmY2xpZW50 LT5kZXYsIHBkYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNuNjVkc2k4Nl9y ZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsK KwlzdHJ1Y3Qgc242NWRzaTg2ICpwZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwor CXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLCAqbjsKKworCWlmICghcGRhdGEpCisJCWdv dG8gZW5kOworCisJbWlwaV9kc2lfZGV0YWNoKHBkYXRhLT5kc2kpOworCW1pcGlfZHNpX2Rldmlj ZV91bnJlZ2lzdGVyKHBkYXRhLT5kc2kpOworCisJZHJtX2JyaWRnZV9yZW1vdmUoJnBkYXRhLT5i cmlkZ2UpOworCisJZGlzYWJsZV9pcnEocGRhdGEtPmlycSk7CisJZnJlZV9pcnEocGRhdGEtPmly cSwgcGRhdGEpOworCisJcmV0ID0gc242NWRzaTg2X2dwaW9fY29uZmlndXJlKHBkYXRhLCBmYWxz ZSk7CisKKwlpZiAoIXBkYXRhLT5pc19wbHVnZ2FibGUpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRy eV9zYWZlKG1vZGUsIG4sICZwZGF0YS0+bW9kZV9saXN0LCBoZWFkKSB7CisJCQlsaXN0X2RlbCgm bW9kZS0+aGVhZCk7CisJCQlrZnJlZShtb2RlKTsKKwkJfQorCX0KKworCWRldm1fa2ZyZWUoJmNs aWVudC0+ZGV2LCBwZGF0YSk7CisKK2VuZDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3Ry dWN0IGkyY19kZXZpY2VfaWQgc242NWRzaTg2X2lkW10gPSB7CisJeyAidGksc242NWRzaTg2Iiwg MH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc242NWRzaTg2X2lkKTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc242NWRzaTg2X21hdGNoX3RhYmxlW10g PSB7CisJey5jb21wYXRpYmxlID0gInRpLHNuNjVkc2k4NiJ9LAorCXt9Cit9OworTU9EVUxFX0RF VklDRV9UQUJMRShvZiwgc242NWRzaTg2X21hdGNoX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBp MmNfZHJpdmVyIHNuNjVkc2k4Nl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAi c242NWRzaTg2IiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9 IHNuNjVkc2k4Nl9tYXRjaF90YWJsZSwKKwl9LAorCS5wcm9iZSA9IHNuNjVkc2k4Nl9wcm9iZSwK KwkucmVtb3ZlID0gc242NWRzaTg2X3JlbW92ZSwKKwkuaWRfdGFibGUgPSBzbjY1ZHNpODZfaWQs Cit9OworCittb2R1bGVfaTJjX2RyaXZlcihzbjY1ZHNpODZfZHJpdmVyKTsKK01PRFVMRV9ERVND UklQVElPTigiU042NURTSTg2IERTSSB0byBlRFAgYnJpZGdlIGRyaXZlciIpOwotLSAKVGhlIFF1 YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1 cm9yYSBGb3J1bSwKYSBMaW51eCBGb3VuZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1h aWxpbmcgbGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5vCg==