From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [[RFC]DPU PATCH 1/4] drm/bridge: add support for sn65dsi86 bridge driver Date: Wed, 18 Apr 2018 10:11:44 -0400 Message-ID: <20180418141144.GW73214@art_vandelay> References: <1524054002-17869-1-git-send-email-spanda@codeaurora.org> <1524054002-17869-2-git-send-email-spanda@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1524054002-17869-2-git-send-email-spanda@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Sandeep Panda Cc: devicetree@vger.kernel.org, ryadav@codeaurora.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, abhinavk@codeaurora.org, hoegsberg@chromium.org, freedreno@lists.freedesktop.org, chandanu@codeaurora.org List-Id: devicetree@vger.kernel.org T24gV2VkLCBBcHIgMTgsIDIwMTggYXQgMDU6NDk6NTlQTSArMDUzMCwgU2FuZGVlcCBQYW5kYSB3 cm90ZToKPiBBZGQgc3VwcG9ydCBmb3IgVEkncyBzbjY1ZHNpODYgZHNpMmVkcCBicmlkZ2UgY2hp cC4KPiBUaGUgY2hpcCBjb252ZXJ0cyBEU0kgdHJhbnNtaXR0ZWQgc2lnbmFsIHRvIGVEUCBzaWdu YWwsCj4gd2hpY2ggaXMgZmVkIHRvIHRoZSBjb25uZWN0ZWQgZURQIHBhbmVsLgo+IAo+IFRoaXMg Y2hpcCBjYW4gYmUgY29udHJvbGxlZCB2aWEgZWl0aGVyIGkyYyBpbnRlcmZhY2Ugb3IKPiBkc2kg aW50ZXJmYWNlLiBDdXJyZW50bHkgaW4gZHJpdmVyIGFsbCB0aGUgY29udHJvbCByZWdpc3RlcnMK PiBhcmUgYmVpbmcgYWNjZXNzZWQgdGhyb3VnaCBpMmMgaW50ZXJmYWNlIG9ubHkuCj4gQWxzbyBh cyBvZiBub3cgSFBEIHN1cHBvcnQgaGFzIG5vdCBiZWVuIGFkZGVkIHRvIGJyaWRnZQo+IGNoaXAg ZHJpdmVyLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFNhbmRlZXAgUGFuZGEgPHNwYW5kYUBjb2RlYXVy b3JhLm9yZz4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYyB8 IDc0MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDEgZmlsZSBjaGFuZ2Vk LCA3NDIgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2JyaWRnZS90aS1zbjY1ZHNpODYuYwo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL3RpLXNuNjVkc2k4Ni5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNp ODYuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uYzc5OGYyZgo+IC0t LSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5j Cj4gQEAgLTAsMCArMSw3NDIgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICsjaW5jbHVkZSA8bGludXgv a2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L2luaXQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgv cGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ICsjaW5jbHVk ZSA8bGludXgvaTJjLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9vZl9ncGlvLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgo+ICsjaW5jbHVk ZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWlj X2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ICsjaW5jbHVk ZSA8ZHJtL2RybV9taXBpX2RzaS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgoKSSBo YXZlIGEgaGFyZCB0aW1lIGJlbGlldmluZyB0aGF0IHlvdSBuZWVkIGFsbCBvZiB0aGVzZSBpbmNs dWRlcy4gT2ZmIHRoZSB0b3Agb2YKbXkgaGVhZCwgeW91IGNvdWxkIHByb2JhYmx5IHJlbW92ZSB0 eXBlcywga2VybmVsLCBpbml0LCBwbGF0Zm9ybV9kZXZpY2UsIGRlbGF5LApkcm1QLCBkcm1fYXRv bWljLCBkcm1fY3J0Y19oZWxwZXIuIFlvdSBjb3VsZCBwcm9iYWJseSB0cmltIGl0IGV2ZW4gZnVy dGhlciB3aXRoCnRoZSBoZWxwIG9mIHlvdXIgY29tcGlsZXIuIFRoZXNlIHNob3VsZCBhbHNvIGJl IGluIGFscGhhYmV0aWNhbCBvcmRlci4KCj4gKwo+ICsjZGVmaW5lIFNOX0JSSURHRV9SRVZJU0lP Tl9JRCAweDIKPiArCj4gKy8qIExpbmsgVHJhaW5pbmcgc3BlY2lmaWMgcmVnaXN0ZXJzICovCj4g KyNkZWZpbmUgU05fREVWSUNFX1JFVl9SRUcJCQkweDA4Cj4gKyNkZWZpbmUgU05fUkVGQ0xLX0ZS RVFfUkVHCQkJMHgwQQo+ICsjZGVmaW5lIFNOX0RTSV9MQU5FU19SRUcJCQkweDEwCj4gKyNkZWZp bmUgU05fRFNJQV9DTEtfRlJFUV9SRUcJCQkweDEyCj4gKyNkZWZpbmUgU05fRU5IX0ZSQU1FX1JF RwkJCTB4NUEKPiArI2RlZmluZSBTTl9TU0NfQ09ORklHX1JFRwkJCTB4OTMKPiArI2RlZmluZSBT Tl9EQVRBUkFURV9DT05GSUdfUkVHCQkJMHg5NAo+ICsjZGVmaW5lIFNOX1BMTF9FTkFCTEVfUkVH CQkJMHgwRAo+ICsjZGVmaW5lIFNOX1NDUkFNQkxFX0NPTkZJR19SRUcJCQkweDk1Cj4gKyNkZWZp bmUgU05fQVVYX1dEQVRBMF9SRUcJCQkweDY0Cj4gKyNkZWZpbmUgU05fQVVYX0FERFJfMTlfMTZf UkVHCQkJMHg3NAo+ICsjZGVmaW5lIFNOX0FVWF9BRERSXzE1XzhfUkVHCQkJMHg3NQo+ICsjZGVm aW5lIFNOX0FVWF9BRERSXzdfMF9SRUcJCQkweDc2Cj4gKyNkZWZpbmUgU05fQVVYX0xFTkdUSF9S RUcJCQkweDc3Cj4gKyNkZWZpbmUgU05fQVVYX0NNRF9SRUcJCQkJMHg3OAo+ICsjZGVmaW5lIFNO X01MX1RYX01PREVfUkVHCQkJMHg5Ngo+ICsjZGVmaW5lIFNOX1BBR0VfU0VMRUNUX1JFRwkJCTB4 RkYKPiArI2RlZmluZSBTTl9BVVhfUkRBVEEwX1JFRwkJCTB4NzkKPiArLyogdmlkZW8gY29uZmln IHNwZWNpZmljIHJlZ2lzdGVycyAqLwo+ICsjZGVmaW5lIFNOX0NIQV9BQ1RJVkVfTElORV9MRU5H VEhfTE9XX1JFRwkweDIwCj4gKyNkZWZpbmUgU05fQ0hBX0FDVElWRV9MSU5FX0xFTkdUSF9ISUdI X1JFRwkweDIxCj4gKyNkZWZpbmUgU05fQ0hBX1ZFUlRJQ0FMX0RJU1BMQVlfU0laRV9MT1dfUkVH CTB4MjQKPiArI2RlZmluZSBTTl9DSEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0hJR0hfUkVHCTB4 MjUKPiArI2RlZmluZSBTTl9DSEFfSFNZTkNfUFVMU0VfV0lEVEhfTE9XX1JFRwkweDJDCj4gKyNk ZWZpbmUgU05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0hJR0hfUkVHCTB4MkQKPiArI2RlZmluZSBT Tl9DSEFfVlNZTkNfUFVMU0VfV0lEVEhfTE9XX1JFRwkweDMwCj4gKyNkZWZpbmUgU05fQ0hBX1ZT WU5DX1BVTFNFX1dJRFRIX0hJR0hfUkVHCTB4MzEKPiArI2RlZmluZSBTTl9DSEFfSE9SSVpPTlRB TF9CQUNLX1BPUkNIX1JFRwkweDM0Cj4gKyNkZWZpbmUgU05fQ0hBX1ZFUlRJQ0FMX0JBQ0tfUE9S Q0hfUkVHCQkweDM2Cj4gKyNkZWZpbmUgU05fQ0hBX0hPUklaT05UQUxfRlJPTlRfUE9SQ0hfUkVH CTB4MzgKPiArI2RlZmluZSBTTl9DSEFfVkVSVElDQUxfRlJPTlRfUE9SQ0hfUkVHCQkweDNBCj4g KyNkZWZpbmUgU05fREFUQV9GT1JNQVRfUkVHCQkJMHg1Qgo+ICsjZGVmaW5lIFNOX0NPTE9SX0JB Ul9DT05GSUdfUkVHCQkJMHgzQwo+ICsKPiArI2RlZmluZSBEUFBMTF9DTEtfU1JDX1JFRkNMSwkw Cj4gKyNkZWZpbmUgRFBQTExfQ0xLX1NSQ19EU0lDTEsJMQo+ICsjZGVmaW5lIE1JTl9EU0lfQ0xL X0ZSRVFfTUhaCTQwCj4gKwo+ICtlbnVtIHRpX3NuX2JyaWRnZV9yZWZfY2xrcyB7Cj4gKwlTTl9S RUZfQ0xLXzEyX01IWiA9IDAsCj4gKwlTTl9SRUZfQ0xLXzE5XzJfTUhaLAo+ICsJU05fUkVGX0NM S18yNl9NSFosCj4gKwlTTl9SRUZfQ0xLXzI3X01IWiwKPiArCVNOX1JFRl9DTEtfMzhfNF9NSFos Cj4gKwlTTl9SRUZfQ0xLX01BWCwKPiArfTsKPiArCj4gK3N0cnVjdCB0aV9zbl9icmlkZ2Ugewo+ ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsJc3RydWN0IGRybV9icmlkZ2UgYnJpZGdlOwo+ICsJ c3RydWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9yOwo+ICsJc3RydWN0IGRldmljZV9ub2RlICpo b3N0X25vZGU7Cj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2k7Cj4gKwkvKiBoYW5kbGUg dG8gdGhlIGNvbm5lY3RlZCBlRFAgcGFuZWwgKi8KPiArCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVs Owo+ICsJaW50IGlycTsKPiArCXN0cnVjdCBncGlvX2Rlc2MgKmlycV9ncGlvOwo+ICsJLyogbGlz dCBvZiBncGlvcyBuZWVkZWQgdG8gZW5hYmxlIHRoZSBicmlkZ2UgZnVuY3Rpb25hbGl0eSAqLwo+ ICsJc3RydWN0IGdwaW9fZGVzY3MgKmVuYWJsZV9ncGlvczsKCldoeSBhcmUgdGhlIGVuYWJsZSBn cGlvcyBhIGxpc3Q/Cgo+ICsJdW5zaWduZWQgaW50IG51bV9zdXBwbGllczsKPiArCXN0cnVjdCBy ZWd1bGF0b3JfYnVsa19kYXRhICpzdXBwbGllczsKPiArCXN0cnVjdCBpMmNfY2xpZW50ICppMmNf Y2xpZW50Owo+ICsJc3RydWN0IGkyY19hZGFwdGVyICpkZGM7Cj4gKwlib29sIHBvd2VyX29uOwo+ ICsJdTMyIG51bV9tb2RlczsKPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIGN1cnJfbW9kZTsK PiArfTsKPiArCj4gK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3dyaXRlKHN0cnVjdCB0aV9zbl9i cmlkZ2UgKnBkYXRhLCB1OCByZWcsIHU4IHZhbCkKPiArewo+ICsJc3RydWN0IGkyY19jbGllbnQg KmNsaWVudCA9IHBkYXRhLT5pMmNfY2xpZW50Owo+ICsJdTggYnVmWzJdID0ge3JlZywgdmFsfTsK PiArCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKPiArCQkuYWRkciA9IGNsaWVudC0+YWRkciwKPiAr CQkuZmxhZ3MgPSAwLAo+ICsJCS5sZW4gPSAyLAo+ICsJCS5idWYgPSBidWYsCj4gKwl9Owo+ICsK PiArCWlmIChpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCAmbXNnLCAxKSA8IDEpIHsKPiAr CQlEUk1fRVJST1IoImkyYyB3cml0ZSBmYWlsZWRcbiIpOwo+ICsJCXJldHVybiAtRUlPOwo+ICsJ fQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9y ZWFkKHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhLAo+ICsJCQkJCXU4IHJlZywgY2hhciAqYnVm LCB1MzIgc2l6ZSkKPiArewo+ICsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHBkYXRhLT5p MmNfY2xpZW50Owo+ICsJc3RydWN0IGkyY19tc2cgbXNnWzJdID0gewo+ICsJCXsKPiArCQkJLmFk ZHIgPSBjbGllbnQtPmFkZHIsCj4gKwkJCS5mbGFncyA9IDAsCj4gKwkJCS5sZW4gPSAxLAo+ICsJ CQkuYnVmID0gJnJlZywKPiArCQl9LAo+ICsJCXsKPiArCQkJLmFkZHIgPSBjbGllbnQtPmFkZHIs Cj4gKwkJCS5mbGFncyA9IEkyQ19NX1JELAo+ICsJCQkubGVuID0gc2l6ZSwKPiArCQkJLmJ1ZiA9 IGJ1ZiwKPiArCQl9Cj4gKwl9Owo+ICsKPiArCWlmIChpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFw dGVyLCBtc2csIDIpICE9IDIpIHsKPiArCQlEUk1fRVJST1IoImkyYyByZWFkIGZhaWxlZFxuIik7 Cj4gKwkJcmV0dXJuIC1FSU87Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9ncGlvX2NvbmZpZ3VyZShzdHJ1Y3QgdGlfc25fYnJpZGdl ICpwZGF0YSwgYm9vbCBvbikKPiArewo+ICsJaW50IHZhbHVlLCBpID0gMCwgbnVtID0gMDsKPiAr CWludCAqdmFsdWVfYXJyYXkgPSBOVUxMOwo+ICsKPiArCWlmICghcGRhdGEpCj4gKwkJcmV0dXJu Owo+ICsKPiArCXZhbHVlID0gb24gPyAxIDogMDsKPiArCW51bSA9IHBkYXRhLT5lbmFibGVfZ3Bp b3MtPm5kZXNjczsKPiArCXZhbHVlX2FycmF5ID0ga21hbGxvYyhudW0gKiBzaXplb2YoaW50KSwg R0ZQX0tFUk5FTCk7Cj4gKwlpZiAodmFsdWVfYXJyYXkpIHsKPiArCQlmb3IgKGkgPSAwOyBpIDwg bnVtOyBpKyspCj4gKwkJCXZhbHVlX2FycmF5W2ldID0gdmFsdWU7Cj4gKwkJZ3Bpb2Rfc2V0X2Fy cmF5X3ZhbHVlKG51bSwgcGRhdGEtPmVuYWJsZV9ncGlvcy0+ZGVzYywKPiArCQkJCSAgICAgIHZh bHVlX2FycmF5KTsKPiArCQlrZnJlZSh2YWx1ZV9hcnJheSk7Cj4gKwl9Cj4gKwo+ICsJaWYgKHBk YXRhLT5pcnFfZ3BpbykKPiArCQlncGlvZF9zZXRfdmFsdWUocGRhdGEtPmlycV9ncGlvLCB2YWx1 ZSk7Cj4gKwo+ICsJRFJNX0RFQlVHKCJjb25maWcgdG86ICVkXG4iLCB2YWx1ZSk7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9wb3dlcl9jdHJsKHN0cnVjdCB0aV9zbl9icmlk Z2UgKnBkYXRhLCBib29sIGVuYWJsZSkKPiArewo+ICsJc3RhdGljIGludCByZWZfY291bnQ7Cj4g Kwo+ICsJaWYgKCFwZGF0YSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKGVuYWJsZSkKPiArCQly ZWZfY291bnQrKzsKPiArCWVsc2UKPiArCQlyZWZfY291bnQtLTsKPiArCj4gKwlpZiAoZW5hYmxl ICYmIChyZWZfY291bnQgPT0gMSkpIHsKPiArCQl0aV9zbl9icmlkZ2VfZ3Bpb19jb25maWd1cmUo cGRhdGEsIHRydWUpOwo+ICsKPiArCQlpZiAocmVndWxhdG9yX2J1bGtfZW5hYmxlKHBkYXRhLT5u dW1fc3VwcGxpZXMsCj4gKwkJCQkJCXBkYXRhLT5zdXBwbGllcykpIHsKPiArCQkJRFJNX0VSUk9S KCJicmlkZ2UgcmVndWxhdG9yIGVuYWJsZSBmYWlsZWRcbiIpOwo+ICsJCQlyZXR1cm47Cj4gKwkJ fQo+ICsJCXBkYXRhLT5wb3dlcl9vbiA9IHRydWU7Cj4gKwl9IGVsc2UgaWYgKCFlbmFibGUgJiYg IXJlZl9jb3VudCkgewo+ICsJCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUocGRhdGEtPm51bV9zdXBw bGllcywgcGRhdGEtPnN1cHBsaWVzKTsKPiArCj4gKwkJdGlfc25fYnJpZGdlX2dwaW9fY29uZmln dXJlKHBkYXRhLCBmYWxzZSk7Cj4gKwkJcGRhdGEtPnBvd2VyX29uID0gZmFsc2U7Cj4gKwl9IGVs c2Ugewo+ICsJCURSTV9ERUJVRygidGlfc25fYnJpZGdlIHBvd2VyIGN0cmw6ICVkIHJlZmNvdW50 OiAlZFxuIiwKPiArCQkJCQkJCWVuYWJsZSwgcmVmX2NvdW50KTsKPiArCX0KPiArfQo+ICsKPiAr LyogQ29ubmVjdG9yIGZ1bmNzICovCj4gK3N0YXRpYyBzdHJ1Y3QgdGlfc25fYnJpZGdlICoKPiAr Y29ubmVjdG9yX3RvX3RpX3NuX2JyaWRnZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y KQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGNvbm5lY3Rvciwgc3RydWN0IHRpX3NuX2Jy aWRnZSwgY29ubmVjdG9yKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB0aV9zbl9icmlkZ2VfY29u bmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICt7Cj4g KwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGNvbm5lY3Rvcl90b190aV9zbl9icmlkZ2Uo Y29ubmVjdG9yKTsKPiArCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsID0gcGRhdGEtPnBhbmVsOwo+ ICsJc3RydWN0IGVkaWQgKmVkaWQ7Cj4gKwo+ICsJaWYgKHBhbmVsKSB7Cj4gKwkJRFJNX0RFQlVH KCJnZXQgbW9kZSBmcm9tIGNvbm5lY3RlZCBkcm1fcGFuZWxcbiIpOwo+ICsJCXBkYXRhLT5udW1f bW9kZXMgPSBkcm1fcGFuZWxfZ2V0X21vZGVzKHBhbmVsKTsKPiArCX0gZWxzZSB7Cj4gKwkJLyog Z2V0IGZyb20gRURJRCAqLwo+ICsJCWlmICghcGRhdGEtPmRkYykKPiArCQkJcmV0dXJuIDA7Cj4g KwkJdGlfc25fYnJpZGdlX3Bvd2VyX2N0cmwocGRhdGEsIHRydWUpOwo+ICsJCWVkaWQgPSBkcm1f Z2V0X2VkaWQoY29ubmVjdG9yLCBwZGF0YS0+ZGRjKTsKPiArCQlpZiAoZWRpZCkgewo+ICsJCQlk cm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLAo+ICsJCQkJ CQkJCWVkaWQpOwo+ICsJCQlwZGF0YS0+bnVtX21vZGVzID0gZHJtX2FkZF9lZGlkX21vZGVzKGNv bm5lY3RvciwgZWRpZCk7Cj4gKwkJCWRybV9lZGlkX3RvX2VsZChjb25uZWN0b3IsIGVkaWQpOwo+ ICsJCQlrZnJlZShlZGlkKTsKPiArCQl9IGVsc2Ugewo+ICsJCQlEUk1fREVCVUcoImZhaWxlZCB0 byBnZXQgZWRpZFxuIik7Cj4gKwkJfQo+ICsJCXRpX3NuX2JyaWRnZV9wb3dlcl9jdHJsKHBkYXRh LCBmYWxzZSk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHBkYXRhLT5udW1fbW9kZXM7Cj4gK30KPiAr Cj4gK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cwo+ICt0aV9zbl9icmlkZ2VfY29ubmVjdG9y X21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiArCQkJICAgICBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPiArewo+ICsJLyogbWF4aW11bSBzdXBwb3J0 ZWQgcmVzb2x1dGlvbiBpcyA0SyBhdCA2MCBmcHMgKi8KPiArCWlmIChtb2RlLT5jbG9jayA+IDU5 NDAwMCkKPiArCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOwo+ICsKPiArCXJldHVybiBNT0RFX09L Owo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIHRp X3NuX2JyaWRnZV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gewo+ICsJLmdldF9tb2RlcyA9IHRp X3NuX2JyaWRnZV9jb25uZWN0b3JfZ2V0X21vZGVzLAo+ICsJLm1vZGVfdmFsaWQgPSB0aV9zbl9i cmlkZ2VfY29ubmVjdG9yX21vZGVfdmFsaWQsCj4gK307Cj4gKwo+ICtzdGF0aWMgZW51bSBkcm1f Y29ubmVjdG9yX3N0YXR1cwo+ICt0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQo+ICt7Cj4gKwlzdHJ1Y3QgdGlf c25fYnJpZGdlICpwZGF0YSA9IGNvbm5lY3Rvcl90b190aV9zbl9icmlkZ2UoY29ubmVjdG9yKTsK PiArCj4gKwkvKioKPiArCSAqIFRPRE86IEN1cnJlbnRseSBpZiBkcm1fcGFuZWwgaXMgcHJlc2Vu dCwgdGhlbiBhbHdheXMKPiArCSAqIHJldHVybiB0aGUgc3RhdHVzIGFzIGNvbm5lY3RlZC4gTmVl ZCB0byBhZGQgc3VwcG9ydCB0byBkZXRlY3QKPiArCSAqIGRldmljZSBzdGF0ZSBmb3Igbm8gcGFu ZWwoaG90IHBsdWdnYWJsZSkgc2NlbmFyaW9zLgo+ICsJICovCj4gKwlpZiAocGRhdGEtPnBhbmVs KQo+ICsJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKPiArCWVsc2UKPiArCQly ZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cj4gK30KPiArCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2Z1 bmNzID0gewo+ICsJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0 b3JfbW9kZXMsCj4gKwkuZGV0ZWN0ID0gdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9kZXRlY3QsCj4g KwkuZGVzdHJveSA9IGRybV9jb25uZWN0b3JfY2xlYW51cCwKPiArCS5yZXNldCA9IGRybV9hdG9t aWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKPiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0g ZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKPiArCS5hdG9taWNf ZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRl LAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCB0aV9zbl9icmlkZ2UgKmJyaWRnZV90b190aV9z bl9icmlkZ2Uoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiArewo+ICsJcmV0dXJuIGNvbnRh aW5lcl9vZihicmlkZ2UsIHN0cnVjdCB0aV9zbl9icmlkZ2UsIGJyaWRnZSk7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3JlYWRfZGV2aWNlX3JldihzdHJ1Y3QgdGlfc25fYnJp ZGdlICpwZGF0YSkKPiArewo+ICsJdTggcmV2ID0gMDsKPiArCWludCByZXQgPSAwOwo+ICsKPiAr CXJldCA9IHRpX3NuX2JyaWRnZV9yZWFkKHBkYXRhLCBTTl9ERVZJQ0VfUkVWX1JFRywgJnJldiwg MSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXhpdDsKPiArCj4gKwlpZiAocmV2ID09IFNOX0JS SURHRV9SRVZJU0lPTl9JRCkgewo+ICsJCURSTV9ERUJVRygidGlfc25fYnJpZGdlIHJldmlzaW9u IGlkOiAweCV4XG4iLCByZXYpOwo+ICsJfSBlbHNlIHsKPiArCQlEUk1fRVJST1IoInRpX3NuX2Jy aWRnZSByZXZpc2lvbiBpZCBtaXNtYXRjaFxuIik7Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCX0K PiArCj4gK2V4aXQ6Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hh ciAqIGNvbnN0IHRpX3NuX2JyaWRnZV9zdXBwbHlfbmFtZXNbXSA9IHsKPiArCSJ2Y2NpbyIsCj4g KwkidmNjYSIsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9wYXJzZV9yZWd1 bGF0b3JzKHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQg aTsKPiArCWludCByZXQ7Cj4gKwo+ICsJcGRhdGEtPm51bV9zdXBwbGllcyA9IEFSUkFZX1NJWkUo dGlfc25fYnJpZGdlX3N1cHBseV9uYW1lcyk7Cj4gKwo+ICsJcGRhdGEtPnN1cHBsaWVzID0gZGV2 bV9rY2FsbG9jKHBkYXRhLT5kZXYsIHBkYXRhLT5udW1fc3VwcGxpZXMsCj4gKwkJCQkgICAgIHNp emVvZigqcGRhdGEtPnN1cHBsaWVzKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXBkYXRhLT5zdXBw bGllcykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEt Pm51bV9zdXBwbGllczsgaSsrKQo+ICsJCXBkYXRhLT5zdXBwbGllc1tpXS5zdXBwbHkgPSB0aV9z bl9icmlkZ2Vfc3VwcGx5X25hbWVzW2ldOwo+ICsKPiArCXJldCA9IGRldm1fcmVndWxhdG9yX2J1 bGtfZ2V0KHBkYXRhLT5kZXYsCj4gKwkJCXBkYXRhLT5udW1fc3VwcGxpZXMsIHBkYXRhLT5zdXBw bGllcyk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGlfc25f YnJpZGdlX2F0dGFjaF9wYW5lbChzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKPiArewo+ICsJ c3RydWN0IGRldmljZV9ub2RlICpwYW5lbF9ub2RlLCAqcG9ydCwgKmVuZHBvaW50Owo+ICsJc3Ry dWN0IGRybV9wYW5lbCAqcGFuZWwgPSBOVUxMOwo+ICsKPiArCXBvcnQgPSBvZl9ncmFwaF9nZXRf cG9ydF9ieV9pZChwZGF0YS0+ZGV2LT5vZl9ub2RlLCAxKTsKPiArCWlmIChwb3J0KSB7Cj4gKwkJ ZW5kcG9pbnQgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShwb3J0LCAiZW5kcG9pbnQiKTsKPiArCQlv Zl9ub2RlX3B1dChwb3J0KTsKPiArCQlpZiAoIWVuZHBvaW50KSB7Cj4gKwkJCWRldl9lcnIocGRh dGEtPmRldiwgIm5vIG91dHB1dCBlbmRwb2ludCBmb3VuZFxuIik7Cj4gKwkJCWdvdG8gZXJyb3I7 Cj4gKwkJfQo+ICsKPiArCQlwYW5lbF9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3Bh cmVudChlbmRwb2ludCk7Cj4gKwkJb2Zfbm9kZV9wdXQoZW5kcG9pbnQpOwo+ICsJCWlmICghcGFu ZWxfbm9kZSkgewo+ICsJCQlkZXZfZXJyKHBkYXRhLT5kZXYsICJubyBvdXRwdXQgbm9kZSBmb3Vu ZFxuIik7Cj4gKwkJCWdvdG8gZXJyb3I7Cj4gKwkJfQo+ICsKPiArCQlwYW5lbCA9IG9mX2RybV9m aW5kX3BhbmVsKHBhbmVsX25vZGUpOwo+ICsJCW9mX25vZGVfcHV0KHBhbmVsX25vZGUpOwo+ICsJ CWlmICghcGFuZWwpIHsKPiArCQkJZGV2X2VycihwZGF0YS0+ZGV2LCAibm8gcGFuZWwgbm9kZSBm b3VuZFxuIik7Cj4gKwkJCWdvdG8gZXJyb3I7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXBkYXRhLT5w YW5lbCA9IHBhbmVsOwo+ICsJZHJtX3BhbmVsX2F0dGFjaChwYW5lbCwgJnBkYXRhLT5jb25uZWN0 b3IpOwo+ICsKPiArCXJldHVybjsKPiArCj4gK2Vycm9yOgo+ICsJcGRhdGEtPnBhbmVsID0gTlVM TDsKPiArfQo+ICsKPiArc3RhdGljIGludCB0aV9zbl9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UpCj4gK3sKPiArCXN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0Owo+ICsJ c3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOwo+ICsJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRh dGEgPSBicmlkZ2VfdG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7Cj4gKwlpbnQgcmV0Owo+ICsJY29u c3Qgc3RydWN0IG1pcGlfZHNpX2RldmljZV9pbmZvIGluZm8gPSB7IC50eXBlID0gInRpX3NuX2Jy aWRnZSIsCj4gKwkJCQkJCSAgIC5jaGFubmVsID0gMCwKPiArCQkJCQkJICAgLm5vZGUgPSBOVUxM LAo+ICsJCQkJCQkgfTsKPiArCj4gKwlpZiAoIWJyaWRnZS0+ZW5jb2Rlcikgewo+ICsJCURSTV9F UlJPUigiUGFyZW50IGVuY29kZXIgb2JqZWN0IG5vdCBmb3VuZCIpOwo+ICsJCXJldHVybiAtRU5P REVWOwo+ICsJfQo+ICsKPiArCS8qIEhQRCBub3Qgc3VwcG9ydGVkICovCj4gKwlwZGF0YS0+Y29u bmVjdG9yLnBvbGxlZCA9IDA7Cj4gKwo+ICsJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGJyaWRn ZS0+ZGV2LCAmcGRhdGEtPmNvbm5lY3RvciwKPiArCQkJCSAmdGlfc25fYnJpZGdlX2Nvbm5lY3Rv cl9mdW5jcywKPiArCQkJCSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKTsKPiArCWlmIChyZXQpIHsK PiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXplIGNvbm5lY3RvciB3aXRoIGRybVxu Iik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9h ZGQoJnBkYXRhLT5jb25uZWN0b3IsCj4gKwkJCQkgJnRpX3NuX2JyaWRnZV9jb25uZWN0b3JfaGVs cGVyX2Z1bmNzKTsKPiArCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmcGRhdGEt PmNvbm5lY3RvciwgYnJpZGdlLT5lbmNvZGVyKTsKPiArCj4gKwlob3N0ID0gb2ZfZmluZF9taXBp X2RzaV9ob3N0X2J5X25vZGUocGRhdGEtPmhvc3Rfbm9kZSk7Cj4gKwlpZiAoIWhvc3QpIHsKPiAr CQlEUk1fRVJST1IoImZhaWxlZCB0byBmaW5kIGRzaSBob3N0XG4iKTsKPiArCQlyZXR1cm4gLUVO T0RFVjsKPiArCX0KPiArCj4gKwlkc2kgPSBtaXBpX2RzaV9kZXZpY2VfcmVnaXN0ZXJfZnVsbCho b3N0LCAmaW5mbyk7Cj4gKwlpZiAoSVNfRVJSKGRzaSkpIHsKPiArCQlEUk1fRVJST1IoImZhaWxl ZCB0byBjcmVhdGUgZHNpIGRldmljZVxuIik7Cj4gKwkJcmV0ID0gUFRSX0VSUihkc2kpOwo+ICsJ CWdvdG8gZXJyX2RzaV9kZXZpY2U7Cj4gKwl9Cj4gKwo+ICsJLyogVE9ETzogc2V0dGluZyB0byA0 IGxhbmVzIGFsd2F5cyBmb3Igbm93ICovCj4gKwlkc2ktPmxhbmVzID0gNDsKPiArCWRzaS0+Zm9y bWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKPiArCWRzaS0+bW9kZV9mbGFncyA9IE1JUElfRFNJ X01PREVfVklERU8gfCBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UgfAo+ICsJCQkgIE1J UElfRFNJX01PREVfRU9UX1BBQ0tFVCB8IE1JUElfRFNJX01PREVfVklERU9fSFNFOwo+ICsKPiAr CXJldCA9IG1pcGlfZHNpX2F0dGFjaChkc2kpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlEUk1f RVJST1IoImZhaWxlZCB0byBhdHRhY2ggZHNpIHRvIGhvc3RcbiIpOwo+ICsJCWdvdG8gZXJyX2Rz aV9hdHRhY2g7Cj4gKwl9Cj4gKwo+ICsJcGRhdGEtPmRzaSA9IGRzaTsKPiArCj4gKwlEUk1fREVC VUcoImJyaWRnZSBhdHRhY2hlZFxuIik7Cj4gKwkvKiBhdHRhY2ggcGFuZWwgdG8gYnJpZGdlICov Cj4gKwl0aV9zbl9icmlkZ2VfYXR0YWNoX3BhbmVsKHBkYXRhKTsKPiArCj4gKwlyZXR1cm4gMDsK PiArCj4gK2Vycl9kc2lfYXR0YWNoOgo+ICsJbWlwaV9kc2lfZGV2aWNlX3VucmVnaXN0ZXIoZHNp KTsKPiArZXJyX2RzaV9kZXZpY2U6Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCB0aV9zbl9icmlkZ2VfbW9kZV9zZXQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiAr CQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiArCQkJCSAgICBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqYWRqX21vZGUpCj4gK3sKPiArCXN0cnVjdCB0aV9zbl9icmlkZ2Ug KnBkYXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOwo+ICsKPiArCURSTV9ERUJV RygibW9kZV9zZXQ6IGhkaXNwbGF5PSVkLCB2ZGlzcGxheT0lZCwgdnJlZnJlc2g9JWQsIGNsb2Nr PSVkXG4iLAo+ICsJCWFkal9tb2RlLT5oZGlzcGxheSwgYWRqX21vZGUtPnZkaXNwbGF5LAo+ICsJ CWFkal9tb2RlLT52cmVmcmVzaCwgYWRqX21vZGUtPmNsb2NrKTsKPiArCj4gKwlkcm1fbW9kZV9j b3B5KCZwZGF0YS0+Y3Vycl9tb2RlLCBhZGpfbW9kZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHRpX3NuX2JyaWRnZV9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gK3sKPiAr CXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShicmlk Z2UpOwo+ICsJc3RydWN0IGRybV9wYW5lbCAqcGFuZWwgPSBwZGF0YS0+cGFuZWw7Cj4gKwo+ICsJ aWYgKHBhbmVsKSB7Cj4gKwkJZHJtX3BhbmVsX2Rpc2FibGUocGFuZWwpOwo+ICsJCWRybV9wYW5l bF91bnByZXBhcmUocGFuZWwpOwo+ICsJfQo+ICsKPiArCXRpX3NuX2JyaWRnZV9wb3dlcl9jdHJs KHBkYXRhLCBmYWxzZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9lbmFi bGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiArewo+ICsJc3RydWN0IHRpX3NuX2JyaWRn ZSAqcGRhdGEgPSBicmlkZ2VfdG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7Cj4gKwlzdHJ1Y3QgZHJt X3BhbmVsICpwYW5lbCA9IHBkYXRhLT5wYW5lbDsKPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlID0gJnBkYXRhLT5jdXJyX21vZGU7Cj4gKwl1MzIgYml0X3JhdGVfbWh6LCBjbGtfZnJl cV9taHo7Cj4gKwl1OCB2YWwgPSAwOwo+ICsKPiArCWlmICghcGRhdGEtPm51bV9tb2RlcykKPiAr CQlyZXR1cm47Cj4gKwo+ICsJdGlfc25fYnJpZGdlX3Bvd2VyX2N0cmwocGRhdGEsIHRydWUpOwo+ ICsKPiArCWlmIChwYW5lbCkKPiArCQlkcm1fcGFuZWxfcHJlcGFyZShwYW5lbCk7Cj4gKwo+ICsJ LyogQ0xLX1NSQyBjb25maWcgKi8KPiArCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwgU05fUkVG Q0xLX0ZSRVFfUkVHLAo+ICsJCQkoRFBQTExfQ0xLX1NSQ19SRUZDTEsgfCAoU05fUkVGX0NMS18x OV8yX01IWiA8PCAweDEpKSk7Cj4gKwo+ICsJLyogRFNJX0EgbGFuZSBjb25maWcgKi8KPiArCXRp X3NuX2JyaWRnZV9yZWFkKHBkYXRhLCBTTl9EU0lfTEFORVNfUkVHLCAmdmFsLCAweDEpOwo+ICsJ dmFsIHw9ICgoMHg0IC0gcGRhdGEtPmRzaS0+bGFuZXMpICYgMHgwMykgPDwgMHgzOwo+ICsJdGlf c25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9EU0lfTEFORVNfUkVHLCB2YWwpOwo+ICsKPiArCS8q IERQIGxhbmUgY29uZmlnICovCj4gKwl0aV9zbl9icmlkZ2VfcmVhZChwZGF0YSwgU05fU1NDX0NP TkZJR19SRUcsICZ2YWwsIDB4MSk7Cj4gKwl2YWwgfD0gKChwZGF0YS0+ZHNpLT5sYW5lcyAtIDB4 MSkgJiAweDAzKSA8PCAweDQ7Cj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX1NTQ19D T05GSUdfUkVHLCB2YWwpOwo+ICsKPiArCS8qIHNldCBkc2kgY2xrIGZyZXF1ZW5jeSB2YWx1ZSAq Lwo+ICsJYml0X3JhdGVfbWh6ID0gKG1vZGUtPmNsb2NrIC8gMTAwMCkgKgo+ICsJCQltaXBpX2Rz aV9waXhlbF9mb3JtYXRfdG9fYnBwKHBkYXRhLT5kc2ktPmZvcm1hdCk7Cj4gKwljbGtfZnJlcV9t aHogPSBiaXRfcmF0ZV9taHogLyAocGRhdGEtPmRzaS0+bGFuZXMgKiAyKTsKPiArCS8qIGZvciBl YWNoIGluY3JlbWVudCBpbiB2YWwsIGZyZXF1ZW5jeSBpbmNyZWFzZXMgYnkgNU1IeiAqLwo+ICsJ dmFsID0gKE1JTl9EU0lfQ0xLX0ZSRVFfTUhaIC8gMHg1KSArCj4gKwkJKCgoY2xrX2ZyZXFfbWh6 IC0gTUlOX0RTSV9DTEtfRlJFUV9NSFopIC8gMHg1KSAmIDB4RkYpOwo+ICsJdGlfc25fYnJpZGdl X3dyaXRlKHBkYXRhLCBTTl9EU0lBX0NMS19GUkVRX1JFRywgdmFsKTsKPiArCj4gKwl0aV9zbl9i cmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0RBVEFSQVRFX0NPTkZJR19SRUcsIDB4ODApOyAvKiBzZXQg SEJSICovCj4gKwo+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9QTExfRU5BQkxFX1JF RywgMHgxKTsgLyogRW5hYmxlIFBMTCAqLwo+ICsJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDAwMSk7 Cj4gKwo+ICsJLyogRFBDRCBSZWdpc3RlciAweDAwMTBBIGluIFNpbmsgKi8KPiArCXRpX3NuX2Jy aWRnZV93cml0ZShwZGF0YSwgU05fQVVYX1dEQVRBMF9SRUcsIDB4MDEpOwo+ICsJdGlfc25fYnJp ZGdlX3dyaXRlKHBkYXRhLCBTTl9BVVhfQUREUl8xOV8xNl9SRUcsIDB4MDApOwo+ICsJdGlfc25f YnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9BVVhfQUREUl8xNV84X1JFRywgMHgwMSk7Cj4gKwl0aV9z bl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0FVWF9BRERSXzdfMF9SRUcsIDB4MEEpOwo+ICsJdGlf c25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9BVVhfTEVOR1RIX1JFRywgMHgwMSk7Cj4gKwl0aV9z bl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0FVWF9DTURfUkVHLCAweDgxKTsKPiArCXVzbGVlcF9y YW5nZSgxMDAwMCwgMTAwMDEpOwo+ICsKPiArCS8qIFNlbWkgYXV0byBsaW5rIHRyYWluaW5nIG1v ZGUgKi8KPiArCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwgU05fTUxfVFhfTU9ERV9SRUcsIDB4 MEEpOwo+ICsJdXNsZWVwX3JhbmdlKDIwMDAwLCAyMDAwMSk7Cj4gKwo+ICsJLyogY29uZmlnIHZp ZGVvIHBhcmFtZXRlcnMgKi8KPiArCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwgU05fQ0hBX0FD VElWRV9MSU5FX0xFTkdUSF9MT1dfUkVHLAo+ICsJCQltb2RlLT5oZGlzcGxheSAmIDB4RkYpOwo+ ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9DSEFfQUNUSVZFX0xJTkVfTEVOR1RIX0hJ R0hfUkVHLAo+ICsJCQkobW9kZS0+aGRpc3BsYXkgPj4gMHg4KSAmIDB4RkYpOwo+ICsJdGlfc25f YnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9DSEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0xPV19SRUcs Cj4gKwkJCW1vZGUtPnZkaXNwbGF5ICYgMHhGRik7Cj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRh dGEsIFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfSElHSF9SRUcsCj4gKwkJCShtb2RlLT5o ZGlzcGxheSA+PiAweDgpICYgMHhGRik7Cj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNO X0NIQV9IU1lOQ19QVUxTRV9XSURUSF9MT1dfUkVHLAo+ICsJCQkobW9kZS0+aHRvdGFsIC0gbW9k ZS0+aHN5bmNfZW5kKSAmIDB4RkYpOwo+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9D SEFfSFNZTkNfUFVMU0VfV0lEVEhfSElHSF9SRUcsCj4gKwkJCSgobW9kZS0+aHRvdGFsIC0gbW9k ZS0+aHN5bmNfZW5kKSA+PiAweDgpICYgMHhGRik7Cj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRh dGEsIFNOX0NIQV9WU1lOQ19QVUxTRV9XSURUSF9MT1dfUkVHLAo+ICsJCQkobW9kZS0+dnRvdGFs IC0gbW9kZS0+dnN5bmNfZW5kKSAmIDB4RkYpOwo+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRh LCBTTl9DSEFfVlNZTkNfUFVMU0VfV0lEVEhfSElHSF9SRUcsCj4gKwkJCSgobW9kZS0+dnRvdGFs IC0gbW9kZS0+dnN5bmNfZW5kKSA+PiAweDgpICYgMHhGRik7Cj4gKwl0aV9zbl9icmlkZ2Vfd3Jp dGUocGRhdGEsIFNOX0NIQV9IT1JJWk9OVEFMX0JBQ0tfUE9SQ0hfUkVHLAo+ICsJCQkobW9kZS0+ aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheSkgJiAweEZGKTsKPiArCXRpX3NuX2JyaWRnZV93 cml0ZShwZGF0YSwgU05fQ0hBX1ZFUlRJQ0FMX0JBQ0tfUE9SQ0hfUkVHLAo+ICsJCQkobW9kZS0+ dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheSkgJiAweEZGKTsKPiArCXRpX3NuX2JyaWRnZV93 cml0ZShwZGF0YSwgU05fQ0hBX0hPUklaT05UQUxfRlJPTlRfUE9SQ0hfUkVHLAo+ICsJCQkobW9k ZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQpICYgMHhGRik7Cj4gKwl0aV9zbl9icmlk Z2Vfd3JpdGUocGRhdGEsIFNOX0NIQV9WRVJUSUNBTF9GUk9OVF9QT1JDSF9SRUcsCj4gKwkJCSht b2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydCkgJiAweEZGKTsKPiArCWlmIChwZGF0 YS0+ZHNpLT5mb3JtYXQgPT0gTUlQSV9EU0lfRk1UX1JHQjg4OCkKPiArCQl0aV9zbl9icmlkZ2Vf d3JpdGUocGRhdGEsIFNOX0RBVEFfRk9STUFUX1JFRywgMHgwMCk7Cj4gKwllbHNlCj4gKwkJdGlf c25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9EQVRBX0ZPUk1BVF9SRUcsIDB4MDEpOwo+ICsJdXNs ZWVwX3JhbmdlKDEwMDAwLCAxMDAwMSk7Cj4gKwo+ICsJLyogZW5hYmxlIHZpZGVvIHN0cmVhbSAq Lwo+ICsJdGlfc25fYnJpZGdlX3JlYWQocGRhdGEsIFNOX0VOSF9GUkFNRV9SRUcsICZ2YWwsIDB4 MSk7Cj4gKwl2YWwgfD0gQklUKDMpOwo+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9F TkhfRlJBTUVfUkVHLCB2YWwpOwo+ICsKPiArCWlmIChwYW5lbCkKPiArCQlkcm1fcGFuZWxfZW5h YmxlKHBhbmVsKTsKCkFzIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgcmV2aWV3LCB5b3Ugc2hv dWxkIGNvbmZpZ3VyZSB0aGUgbW9kZSBpbiBtb2RlX3NldCwKbm90IGVuYWJsZS4gVGhpcyBlbGlt aW5hdGVzIHRoZSBuZWVkIGZvciBjdXJyX21vZGUuCgo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9icmlkZ2VfZnVuY3MgdGlfc25fYnJpZGdlX2Z1bmNzID0gewo+ICsJLmF0dGFj aCA9IHRpX3NuX2JyaWRnZV9hdHRhY2gsCj4gKwkuZW5hYmxlID0gdGlfc25fYnJpZGdlX2VuYWJs ZSwKPiArCS5kaXNhYmxlID0gdGlfc25fYnJpZGdlX2Rpc2FibGUsCj4gKwkubW9kZV9zZXQgPSB0 aV9zbl9icmlkZ2VfbW9kZV9zZXQsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRn ZV9wYXJzZV9ncGlvcyhzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKPiArewo+ICsJaW50IHJl dCA9IDA7Cj4gKwo+ICsJaWYgKCFwZGF0YSB8fCAhcGRhdGEtPmRldikKPiArCQlyZXR1cm4gLUVJ TlZBTDsKPiArCj4gKwlwZGF0YS0+ZW5hYmxlX2dwaW9zID0gZGV2bV9ncGlvZF9nZXRfYXJyYXko cGRhdGEtPmRldiwKPiArCQkJCQkJImVuYWJsZSIsIEdQSU9EX09VVF9MT1cpOwo+ICsJaWYgKElT X0VSUihwZGF0YS0+ZW5hYmxlX2dwaW9zKSkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdl dCBlbmFibGUgZ3BpbyBmcm9tIERUXG4iKTsKPiArCQlyZXQgPSBQVFJfRVJSKHBkYXRhLT5lbmFi bGVfZ3Bpb3MpOwo+ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCj4gKwlwZGF0YS0+aXJxX2dwaW8g PSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwZGF0YS0+ZGV2LCAiaXJxIiwKPiArCQkJCQkJICBH UElPRF9PVVRfTE9XKTsKPiArCWlmIChJU19FUlIocGRhdGEtPmlycV9ncGlvKSkKPiArCQlEUk1f RVJST1IoImZhaWxlZCB0byBnZXQgaXJxIGdwaW8gZnJvbSBEVFxuIik7Cj4gKwo+ICtleGl0Ogo+ ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcGFyc2Vf ZHNpX2hvc3Qoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCj4gK3sKPiArCXN0cnVjdCBkZXZp Y2Vfbm9kZSAqbnAgPSBwZGF0YS0+ZGV2LT5vZl9ub2RlOwo+ICsJc3RydWN0IGRldmljZV9ub2Rl ICplbmRfbm9kZTsKPiArCj4gKwllbmRfbm9kZSA9IG9mX2dyYXBoX2dldF9lbmRwb2ludF9ieV9y ZWdzKG5wLCAwLCAwKTsKPiArCWlmICghZW5kX25vZGUpIHsKPiArCQlEUk1fRVJST1IoInJlbW90 ZSBlbmRwb2ludCBub3QgZm91bmRcbiIpOwo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsJfQo+ICsK PiArCXBkYXRhLT5ob3N0X25vZGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVu ZF9ub2RlKTsKPiArCW9mX25vZGVfcHV0KGVuZF9ub2RlKTsKPiArCWlmICghcGRhdGEtPmhvc3Rf bm9kZSkgewo+ICsJCURSTV9FUlJPUigicmVtb3RlIG5vZGUgbm90IGZvdW5kXG4iKTsKPiArCQly ZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCW9mX25vZGVfcHV0KHBkYXRhLT5ob3N0X25vZGUpOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9wcm9i ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAo+ICsJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNl X2lkICppZCkKPiArewo+ICsJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGE7Cj4gKwlzdHJ1Y3Qg ZGV2aWNlX25vZGUgKmRkY19ub2RlOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJaWYgKCFjbGll bnQgfHwgIWNsaWVudC0+ZGV2Lm9mX25vZGUpIHsKPiArCQlEUk1fRVJST1IoImludmFsaWQgaW5w dXRcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWlmICghaTJjX2NoZWNr X2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7Cj4gKwkJRFJN X0VSUk9SKCJkZXZpY2UgZG9lc24ndCBzdXBwb3J0IEkyQ1xuIik7Cj4gKwkJcmV0dXJuIC1FTk9E RVY7Cj4gKwl9Cj4gKwo+ICsJcGRhdGEgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LAo+ICsJ CXNpemVvZihzdHJ1Y3QgdGlfc25fYnJpZGdlKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXBkYXRh KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCXBkYXRhLT5wb3dlcl9vbiA9IGZhbHNlOwo+ ICsJcGRhdGEtPmRldiA9ICZjbGllbnQtPmRldjsKPiArCXBkYXRhLT5pMmNfY2xpZW50ID0gY2xp ZW50Owo+ICsJRFJNX0RFQlVHKCJJMkMgYWRkcmVzcyBpcyAleFxuIiwgY2xpZW50LT5hZGRyKTsK PiArCj4gKwlyZXQgPSB0aV9zbl9icmlkZ2VfcGFyc2VfZHNpX2hvc3QocGRhdGEpOwo+ICsJaWYg KHJldCkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBhcnNlIGRldmljZSB0cmVlXG4iKTsK PiArCQlnb3RvIGVycl9kdF9wYXJzZTsKPiArCX0KPiArCj4gKwlyZXQgPSB0aV9zbl9icmlkZ2Vf cGFyc2VfZ3Bpb3MocGRhdGEpOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVk IHRvIHBhcnNlIGdwaW9zIGZyb20gRFRcbiIpOwo+ICsJCWdvdG8gZXJyX2R0X3BhcnNlOwo+ICsJ fQo+ICsKPiArCXJldCA9IHRpX3NuX2JyaWRnZV9wYXJzZV9yZWd1bGF0b3JzKHBkYXRhKTsKPiAr CWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBwYXJzZSByZWd1bGF0b3JzXG4i KTsKPiArCQlnb3RvIGVycl9kdF9wYXJzZTsKPiArCX0KPiArCj4gKwlkZGNfbm9kZSA9IG9mX3Bh cnNlX3BoYW5kbGUocGRhdGEtPmRldi0+b2Zfbm9kZSwgImRkYy1pMmMtYnVzIiwgMCk7Cj4gKwlp ZiAoZGRjX25vZGUpIHsKPiArCQlwZGF0YS0+ZGRjID0gb2ZfZmluZF9pMmNfYWRhcHRlcl9ieV9u b2RlKGRkY19ub2RlKTsKPiArCQlvZl9ub2RlX3B1dChkZGNfbm9kZSk7Cj4gKwkJaWYgKCFwZGF0 YS0+ZGRjKSB7Cj4gKwkJCWRldl9kYmcocGRhdGEtPmRldiwgImZhaWxlZCB0byByZWFkIGRkYyBu b2RlXG4iKTsKPiArCQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7Cj4gKwkJfQo+ICsJfSBlbHNlIHsK PiArCQlkZXZfZGJnKHBkYXRhLT5kZXYsICJubyBkZGMgcHJvcGVydHkgZm91bmRcbiIpOwo+ICsJ fQo+ICsKPiArCXRpX3NuX2JyaWRnZV9wb3dlcl9jdHJsKHBkYXRhLCB0cnVlKTsKPiArCXJldCA9 IHRpX3NuX2JyaWRnZV9yZWFkX2RldmljZV9yZXYocGRhdGEpOwo+ICsJaWYgKHJldCkgewo+ICsJ CURSTV9FUlJPUigiZmFpbGVkIHRvIHJlYWQgY2hpcCByZXZcbiIpOwo+ICsJCWdvdG8gZXJyX2Nv bmZpZzsKPiArCX0gZWxzZSB7Cj4gKwkJRFJNX0RFQlVHKCJicmlkZ2UgY2hpcCBlbmFibGVkIHN1 Y2Nlc3NmdWxseVxuIik7Cj4gKwl9Cj4gKwl0aV9zbl9icmlkZ2VfcG93ZXJfY3RybChwZGF0YSwg ZmFsc2UpOwo+ICsKPiArCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHBkYXRhKTsKPiArCWRl dl9zZXRfZHJ2ZGF0YSgmY2xpZW50LT5kZXYsIHBkYXRhKTsKPiArCj4gKwlwZGF0YS0+YnJpZGdl LmZ1bmNzID0gJnRpX3NuX2JyaWRnZV9mdW5jczsKPiArCXBkYXRhLT5icmlkZ2Uub2Zfbm9kZSA9 IGNsaWVudC0+ZGV2Lm9mX25vZGU7Cj4gKwo+ICsJZHJtX2JyaWRnZV9hZGQoJnBkYXRhLT5icmlk Z2UpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gKwo+ICtlcnJfY29uZmlnOgo+ICsJdGlfc25fYnJp ZGdlX3Bvd2VyX2N0cmwocGRhdGEsIGZhbHNlKTsKPiArZXJyX2R0X3BhcnNlOgo+ICsJZGV2bV9r ZnJlZSgmY2xpZW50LT5kZXYsIHBkYXRhKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgdGlfc25fYnJpZGdlX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQo+ ICt7Cj4gKwlpbnQgcmV0ID0gLUVJTlZBTDsKPiArCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRh ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Cj4gKwo+ICsJaWYgKCFwZGF0YSkKPiArCQln b3RvIGVuZDsKPiArCj4gKwltaXBpX2RzaV9kZXRhY2gocGRhdGEtPmRzaSk7Cj4gKwltaXBpX2Rz aV9kZXZpY2VfdW5yZWdpc3RlcihwZGF0YS0+ZHNpKTsKPiArCj4gKwlkcm1fYnJpZGdlX3JlbW92 ZSgmcGRhdGEtPmJyaWRnZSk7Cj4gKwo+ICsJZGlzYWJsZV9pcnEocGRhdGEtPmlycSk7Cj4gKwlm cmVlX2lycShwZGF0YS0+aXJxLCBwZGF0YSk7CgpUaGlzIGlzIHVuaW5pdGlhbGl6ZWQuCgo+ICsK PiArCXRpX3NuX2JyaWRnZV9ncGlvX2NvbmZpZ3VyZShwZGF0YSwgZmFsc2UpOwo+ICsJaTJjX3B1 dF9hZGFwdGVyKHBkYXRhLT5kZGMpOwo+ICsKPiArCWRldm1fa2ZyZWUoJmNsaWVudC0+ZGV2LCBw ZGF0YSk7Cj4gKwo+ICtlbmQ6Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgc3Ry dWN0IGkyY19kZXZpY2VfaWQgdGlfc25fYnJpZGdlX2lkW10gPSB7Cj4gKwl7ICJ0aSxzbjY1ZHNp ODYiLCAwfSwKPiArCXt9Cj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0aV9zbl9i cmlkZ2VfaWQpOwo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdGlfc25f YnJpZGdlX21hdGNoX3RhYmxlW10gPSB7Cj4gKwl7LmNvbXBhdGlibGUgPSAidGksc242NWRzaTg2 In0sCj4gKwl7fQo+ICt9Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0aV9zbl9icmlkZ2Vf bWF0Y2hfdGFibGUpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRpX3NuX2JyaWRn ZV9kcml2ZXIgPSB7Cj4gKwkuZHJpdmVyID0gewo+ICsJCS5uYW1lID0gInRpX3NuNjVkc2k4NiIs Cj4gKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCj4gKwkJLm9mX21hdGNoX3RhYmxlID0gdGlfc25f YnJpZGdlX21hdGNoX3RhYmxlLAo+ICsJfSwKPiArCS5wcm9iZSA9IHRpX3NuX2JyaWRnZV9wcm9i ZSwKPiArCS5yZW1vdmUgPSB0aV9zbl9icmlkZ2VfcmVtb3ZlLAo+ICsJLmlkX3RhYmxlID0gdGlf c25fYnJpZGdlX2lkLAo+ICt9Owo+ICsKPiArbW9kdWxlX2kyY19kcml2ZXIodGlfc25fYnJpZGdl X2RyaXZlcik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigic242NWRzaTg2IERTSSB0byBlRFAgYnJp ZGdlIGRyaXZlciIpOwo+IC0tIAo+IFRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5j LiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCj4gYSBMaW51eCBGb3VuZGF0 aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAo+IAoKLS0gClNlYW4gUGF1bCwgU29mdHdhcmUgRW5n aW5lZXIsIEdvb2dsZSAvIENocm9taXVtIE9TCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbAo=