From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH 6/7] drm/panel: Add support for the Raspberry Pi 7" Touchscreen. Date: Thu, 15 Jun 2017 13:41:29 -0700 Message-ID: <20170615204130.19255-7-eric@anholt.net> References: <20170615204130.19255-1-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170615204130.19255-1-eric@anholt.net> 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, Archit Taneja , Andrzej Hajda , Laurent Pinchart , Thierry Reding , Rob Herring , Mark Rutland , devicetree@vger.kernel.org Cc: linux-kernel@vger.kernel.org List-Id: devicetree@vger.kernel.org VGhpcyBkcml2ZXIgY29tbXVuaWNhdGVzIHdpdGggdGhlIEF0bWVsIG1pY3JvY29udHJvbGxlciBm b3Igc2VxdWVuY2luZwp0aGUgcG93ZXJvbiBvZiB0aGUgVEMzNTg3NjIgRFNJLURQSSBicmlkZ2Ug YW5kIGNvbnRyb2xsaW5nIHRoZQpiYWNrbGlnaHQgUFdNLgoKdjI6IFNldCB0aGUgc2FtZSBkZWZh dWx0IG9yaWVudGF0aW9uIGFzIHRoZSBjbG9zZWQgc291cmNlIGZpcm13YXJlCiAgICB1c2VkLCB3 aGljaCBpcyB0aGUgYmVzdCBmb3Igdmlld2luZyBhbmdsZS4KdjM6IFJld3JpdGUgYXMgYW4gaTJj IGNsaWVudCBkcml2ZXIgYWZ0ZXIgYnJpZGdlIGRyaXZlciByZWplY3Rpb24uCgpTaWduZWQtb2Zm LWJ5OiBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgotLS0KIGRyaXZlcnMvZ3B1L2RybS9w YW5lbC9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgIHwgICA4ICsKIGRyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIC4uLi9ncHUvZHJt L3BhbmVsL3BhbmVsLXJhc3BiZXJyeXBpLXRvdWNoc2NyZWVuLmMgIHwgNTA3ICsrKysrKysrKysr KysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA1MTYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1yYXNwYmVycnlwaS10b3VjaHNj cmVlbi5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcgYi9kcml2 ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwppbmRleCAzZTI5YTk5MDMzMDMuLjQxMTFmNDk3OTQ1 ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3BhbmVsL0tjb25maWcKQEAgLTYyLDYgKzYyLDE0IEBAIGNvbmZpZyBEUk1fUEFO RUxfUEFOQVNPTklDX1ZWWDEwRjAzNE4wMAogCSAgV1VYR0EgKDE5MjB4MTIwMCkgTm92YXRlayBO VDEzOTctYmFzZWQgRFNJIHBhbmVsIGFzIGZvdW5kIGluIHNvbWUKIAkgIFhwZXJpYSBaMiB0YWJs ZXRzCiAKK2NvbmZpZyBEUk1fUEFORUxfUkFTUEJFUlJZUElfVE9VQ0hTQ1JFRU4KKwl0cmlzdGF0 ZSAiUmFzcGJlcnJ5IFBpIDctaW5jaCB0b3VjaHNjcmVlbiBwYW5lbCIKKwlkZXBlbmRzIG9uIERS TV9NSVBJX0RTSQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1 cHBvcnQgZm9yIHRoZSBSYXNwYmVycnkKKwkgIFBpIDciIFRvdWNoc2NyZWVuLiAgVG8gY29tcGls ZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwKKwkgIGNob29zZSBNIGhlcmUuCisKIGNvbmZpZyBE Uk1fUEFORUxfU0FNU1VOR19TNkUzSEEyCiAJdHJpc3RhdGUgIlNhbXN1bmcgUzZFM0hBMiBEU0kg dmlkZW8gbW9kZSBwYW5lbCIKIAlkZXBlbmRzIG9uIE9GCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vcGFuZWwvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKaW5k ZXggMjkyYjNjNzdhZWRlLi5mYmI4YTIzNzMwNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKQEAg LTMsNiArMyw3IEBAIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0lNUExFKSArPSBwYW5lbC1zaW1w bGUubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9KRElfTFQwNzBNRTA1MDAwKSArPSBwYW5lbC1q ZGktbHQwNzBtZTA1MDAwLm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxfTEdfTEc0NTczKSArPSBw YW5lbC1sZy1sZzQ1NzMubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9QQU5BU09OSUNfVlZYMTBG MDM0TjAwKSArPSBwYW5lbC1wYW5hc29uaWMtdnZ4MTBmMDM0bjAwLm8KK29iai0kKENPTkZJR19E Uk1fUEFORUxfUkFTUEJFUlJZUElfVE9VQ0hTQ1JFRU4pICs9IHBhbmVsLXJhc3BiZXJyeXBpLXRv dWNoc2NyZWVuLm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0FNU1VOR19MRDkwNDApICs9IHBh bmVsLXNhbXN1bmctbGQ5MDQwLm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0FNU1VOR19TNkUz SEEyKSArPSBwYW5lbC1zYW1zdW5nLXM2ZTNoYTIubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9T QU1TVU5HX1M2RThBQTApICs9IHBhbmVsLXNhbXN1bmctczZlOGFhMC5vCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtcmFzcGJlcnJ5cGktdG91Y2hzY3JlZW4uYyBiL2Ry aXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1yYXNwYmVycnlwaS10b3VjaHNjcmVlbi5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZGEzOTg3ODVlYWM3Ci0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXJhc3BiZXJyeXBpLXRvdWNo c2NyZWVuLmMKQEAgLTAsMCArMSw1MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNi0yMDE3 IEJyb2FkY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBQb3J0aW9ucyBvZiB0aGlz IGZpbGUgKGRlcml2ZWQgZnJvbSBwYW5lbC1zaW1wbGUuYykgYXJlOgorICoKKyAqIENvcHlyaWdo dCAoQykgMjAxMywgTlZJRElBIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq CisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u czoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1 ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0 d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4g Tk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJ QUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwor ICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKy8qKgor ICogUmFzcGJlcnJ5IFBpIDciIHRvdWNoc2NyZWVuIHBhbmVsIGRyaXZlci4KKyAqCisgKiBUaGUg NyIgdG91Y2hzY3JlZW4gY29uc2lzdHMgb2YgYSBEUEkgTENEIHBhbmVsLCBhIFRvc2hpYmEKKyAq IFRDMzU4NzYyWEJHIERTSS1EUEkgYnJpZGdlLCBhbmQgYW4gSTJDLWNvbm5lY3RlZCBBdG1lbCBB VFRJTlk4OC1NVVIKKyAqIGNvbnRyb2xsaW5nIHBvd2VyIG1hbmFnZW1lbnQsIHRoZSBMQ0QgUFdN LCBhbmQgaW5pdGlhbCByZWdpc3RlcgorICogc2V0dXAgb2YgdGhlIFRvaHNpYmEuCisgKgorICog VGhpcyBkcml2ZXIgY29udHJvbHMgdGhlIFRDMzU4NzYyIGFuZCBBVFRJTlk4OCwgcHJlc2VudGlu ZyBhIERTSQorICogZGV2aWNlIHdpdGggYSBkcm1fcGFuZWwuCisgKi8KKworI2luY2x1ZGUgPGxp bnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZmIu aD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1l ci5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgor I2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5j bHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorCisjaW5jbHVk ZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgorI2luY2x1ZGUgPGRy bS9kcm1fcGFuZWwuaD4KKworI2RlZmluZSBSUElfRFNJX0RSSVZFUl9OQU1FICJycGktdHMtZHNp IgorCisvKiBJMkMgcmVnaXN0ZXJzIG9mIHRoZSBBdG1lbCBtaWNyb2NvbnRyb2xsZXIuICovCitl bnVtIFJFR19BRERSIHsKKwlSRUdfSUQgPSAweDgwLAorCVJFR19QT1JUQSwgLyogQklUKDIpIGZv ciBob3Jpem9udGFsIGZsaXAsIEJJVCgzKSBmb3IgdmVydGljYWwgZmxpcCAqLworCVJFR19QT1JU QiwKKwlSRUdfUE9SVEMsCisJUkVHX1BPUlRELAorCVJFR19QT1dFUk9OLAorCVJFR19QV00sCisJ UkVHX0REUkEsCisJUkVHX0REUkIsCisJUkVHX0REUkMsCisJUkVHX0REUkQsCisJUkVHX1RFU1Qs CisJUkVHX1dSX0FERFJMLAorCVJFR19XUl9BRERSSCwKKwlSRUdfUkVBREgsCisJUkVHX1JFQURM LAorCVJFR19XUklURUgsCisJUkVHX1dSSVRFTCwKKwlSRUdfSUQyLAorfTsKKworLyogV2Ugb25s eSB0dXJuIHRoZSBQV00gb24gb3Igb2ZmLCB3aXRob3V0IHZhcnlpbmcgdmFsdWVzLiAqLworI2Rl ZmluZSBSUElfVE9VQ0hTQ1JFRU5fTUFYX0JSSUdIVE5FU1MgMQorCisvKiBEU0kgRC1QSFkgTGF5 ZXIgUmVnaXN0ZXJzICovCisjZGVmaW5lIEQwV19EUEhZQ09OVFRYCQkweDAwMDQKKyNkZWZpbmUg Q0xXX0RQSFlDT05UUlgJCTB4MDAyMAorI2RlZmluZSBEMFdfRFBIWUNPTlRSWAkJMHgwMDI0Cisj ZGVmaW5lIEQxV19EUEhZQ09OVFJYCQkweDAwMjgKKyNkZWZpbmUgQ09NX0RQSFlDT05UUlgJCTB4 MDAzOAorI2RlZmluZSBDTFdfQ05UUkwJCTB4MDA0MAorI2RlZmluZSBEMFdfQ05UUkwJCTB4MDA0 NAorI2RlZmluZSBEMVdfQ05UUkwJCTB4MDA0OAorI2RlZmluZSBERlRNT0RFX0NOVFJMCQkweDAw NTQKKworLyogRFNJIFBQSSBMYXllciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUFBJX1NUQVJUUFBJ CQkweDAxMDQKKyNkZWZpbmUgUFBJX0JVU1lQUEkJCTB4MDEwOAorI2RlZmluZSBQUElfTElORUlO SVRDTlQJCTB4MDExMAorI2RlZmluZSBQUElfTFBUWFRJTUVDTlQJCTB4MDExNAorI2RlZmluZSBQ UElfQ0xTX0FUTVIJCTB4MDE0MAorI2RlZmluZSBQUElfRDBTX0FUTVIJCTB4MDE0NAorI2RlZmlu ZSBQUElfRDFTX0FUTVIJCTB4MDE0OAorI2RlZmluZSBQUElfRDBTX0NMUlNJUE9DT1VOVAkweDAx NjQKKyNkZWZpbmUgUFBJX0QxU19DTFJTSVBPQ09VTlQJMHgwMTY4CisjZGVmaW5lIENMU19QUkUJ CQkweDAxODAKKyNkZWZpbmUgRDBTX1BSRQkJCTB4MDE4NAorI2RlZmluZSBEMVNfUFJFCQkJMHgw MTg4CisjZGVmaW5lIENMU19QUkVQCQkweDAxQTAKKyNkZWZpbmUgRDBTX1BSRVAJCTB4MDFBNAor I2RlZmluZSBEMVNfUFJFUAkJMHgwMUE4CisjZGVmaW5lIENMU19aRVJPCQkweDAxQzAKKyNkZWZp bmUgRDBTX1pFUk8JCTB4MDFDNAorI2RlZmluZSBEMVNfWkVSTwkJMHgwMUM4CisjZGVmaW5lIFBQ SV9DTFJGTEcJCTB4MDFFMAorI2RlZmluZSBQUElfQ0xSU0lQTwkJMHgwMUU0CisjZGVmaW5lIEhT VElNRU9VVAkJMHgwMUYwCisjZGVmaW5lIEhTVElNRU9VVEVOQUJMRQkJMHgwMUY0CisKKy8qIERT SSBQcm90b2NvbCBMYXllciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRFNJX1NUQVJURFNJCQkweDAy MDQKKyNkZWZpbmUgRFNJX0JVU1lEU0kJCTB4MDIwOAorI2RlZmluZSBEU0lfTEFORUVOQUJMRQkJ MHgwMjEwCisjIGRlZmluZSBEU0lfTEFORUVOQUJMRV9DTE9DSwkJQklUKDApCisjIGRlZmluZSBE U0lfTEFORUVOQUJMRV9EMAkJQklUKDEpCisjIGRlZmluZSBEU0lfTEFORUVOQUJMRV9EMQkJQklU KDIpCisKKyNkZWZpbmUgRFNJX0xBTkVTVEFUVVMwCQkweDAyMTQKKyNkZWZpbmUgRFNJX0xBTkVT VEFUVVMxCQkweDAyMTgKKyNkZWZpbmUgRFNJX0lOVFNUQVRVUwkJMHgwMjIwCisjZGVmaW5lIERT SV9JTlRNQVNLCQkweDAyMjQKKyNkZWZpbmUgRFNJX0lOVENMUgkJMHgwMjI4CisjZGVmaW5lIERT SV9MUFRYVE8JCTB4MDIzMAorI2RlZmluZSBEU0lfTU9ERQkJMHgwMjYwCisjZGVmaW5lIERTSV9Q QVlMT0FEMAkJMHgwMjY4CisjZGVmaW5lIERTSV9QQVlMT0FEMQkJMHgwMjZDCisjZGVmaW5lIERT SV9TSE9SVFBLVERBVAkJMHgwMjcwCisjZGVmaW5lIERTSV9TSE9SVFBLVFJFUQkJMHgwMjc0Cisj ZGVmaW5lIERTSV9CVEFTVEEJCTB4MDI3OAorI2RlZmluZSBEU0lfQlRBQ0xSCQkweDAyN0MKKwor LyogRFNJIEdlbmVyYWwgUmVnaXN0ZXJzICovCisjZGVmaW5lIERTSUVSUkNOVAkJMHgwMzAwCisj ZGVmaW5lIERTSVNJR01PRAkJMHgwMzA0CisKKy8qIERTSSBBcHBsaWNhdGlvbiBMYXllciBSZWdp c3RlcnMgKi8KKyNkZWZpbmUgQVBMQ1RSTAkJCTB4MDQwMAorI2RlZmluZSBBUExTVEFUCQkJMHgw NDA0CisjZGVmaW5lIEFQTEVSUgkJCTB4MDQwOAorI2RlZmluZSBQV1JNT0QJCQkweDA0MEMKKyNk ZWZpbmUgUkRQS1RMTgkJCTB4MDQxMAorI2RlZmluZSBQWExGTVQJCQkweDA0MTQKKyNkZWZpbmUg TUVNV1JDTUQJCTB4MDQxOAorCisvKiBMQ0RDL0RQSSBIb3N0IFJlZ2lzdGVycyAqLworI2RlZmlu ZSBMQ0RDVFJMCQkJMHgwNDIwCisjZGVmaW5lIEhTUgkJCTB4MDQyNAorI2RlZmluZSBIRElTUFIJ CQkweDA0MjgKKyNkZWZpbmUgVlNSCQkJMHgwNDJDCisjZGVmaW5lIFZESVNQUgkJCTB4MDQzMAor I2RlZmluZSBWRlVFTgkJCTB4MDQzNAorCisvKiBEQkktQiBIb3N0IFJlZ2lzdGVycyAqLworI2Rl ZmluZSBEQklCQ1RSTAkJMHgwNDQwCisKKy8qIFNQSSBNYXN0ZXIgUmVnaXN0ZXJzICovCisjZGVm aW5lIFNQSUNNUgkJCTB4MDQ1MAorI2RlZmluZSBTUElUQ1IJCQkweDA0NTQKKworLyogU3lzdGVt IENvbnRyb2xsZXIgUmVnaXN0ZXJzICovCisjZGVmaW5lIFNZU1NUQVQJCQkweDA0NjAKKyNkZWZp bmUgU1lTQ1RSTAkJCTB4MDQ2NAorI2RlZmluZSBTWVNQTEwxCQkJMHgwNDY4CisjZGVmaW5lIFNZ U1BMTDIJCQkweDA0NkMKKyNkZWZpbmUgU1lTUExMMwkJCTB4MDQ3MAorI2RlZmluZSBTWVNQTUNU UkwJCTB4MDQ3QworCisvKiBHUElPIFJlZ2lzdGVycyAqLworI2RlZmluZSBHUElPQwkJCTB4MDQ4 MAorI2RlZmluZSBHUElPTwkJCTB4MDQ4NAorI2RlZmluZSBHUElPSQkJCTB4MDQ4OAorCisvKiBJ MkMgUmVnaXN0ZXJzICovCisjZGVmaW5lIEkyQ0NMS0NUUkwJCTB4MDQ5MAorCisvKiBDaGlwL1Jl diBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgSURSRUcJCQkweDA0QTAKKworLyogRGVidWcgUmVnaXN0 ZXJzICovCisjZGVmaW5lIFdDTURRVUVVRQkJMHgwNTAwCisjZGVmaW5lIFJDTURRVUVVRQkJMHgw NTA0CisKK3N0cnVjdCBycGlfdG91Y2hzY3JlZW4geworCXN0cnVjdCBkcm1fcGFuZWwgYmFzZTsK KwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2k7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYzsK K307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBycGlfdG91Y2hzY3Jl ZW5fbW9kZXNbXSA9IHsKKwl7CisJCS8qIE1vZGVsaW5lIGNvbWVzIGZyb20gdGhlIFJhc3BiZXJy eSBQaSBmaXJtd2FyZSwgd2l0aCBIRlA9MQorCQkgKiBwbHVnZ2VkIGluIGFuZCBjbG9jayByZS1j b21wdXRlZCBmcm9tIHRoYXQuCisJCSAqLworCQkuY2xvY2sgPSAyNTk3OTQwMCAvIDEwMDAsCisJ CS5oZGlzcGxheSA9IDgwMCwKKwkJLmhzeW5jX3N0YXJ0ID0gODAwICsgMSwKKwkJLmhzeW5jX2Vu ZCA9IDgwMCArIDEgKyAyLAorCQkuaHRvdGFsID0gODAwICsgMSArIDIgKyA0NiwKKwkJLnZkaXNw bGF5ID0gNDgwLAorCQkudnN5bmNfc3RhcnQgPSA0ODAgKyA3LAorCQkudnN5bmNfZW5kID0gNDgw ICsgNyArIDIsCisJCS52dG90YWwgPSA0ODAgKyA3ICsgMiArIDIxLAorCQkudnJlZnJlc2ggPSA2 MCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBycGlfdG91Y2hzY3JlZW4gKnBhbmVsX3RvX3Rz KHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXJldHVybiBjb250YWluZXJfb2YocGFuZWws IHN0cnVjdCBycGlfdG91Y2hzY3JlZW4sIGJhc2UpOworfQorCitzdGF0aWMgdTggcnBpX3RvdWNo c2NyZWVuX2kyY19yZWFkKHN0cnVjdCBycGlfdG91Y2hzY3JlZW4gKnRzLCB1OCByZWcpCit7CisJ cmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YSh0cy0+aTJjLCByZWcpOworfQorCitzdGF0 aWMgdm9pZCBycGlfdG91Y2hzY3JlZW5faTJjX3dyaXRlKHN0cnVjdCBycGlfdG91Y2hzY3JlZW4g KnRzLAorCQkJCSAgICAgIHU4IHJlZywgdTggdmFsKQoreworCWludCByZXQ7CisKKwlyZXQgPSBp MmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHRzLT5pMmMsIHJlZywgdmFsKTsKKwlpZiAocmV0KQor CQlkZXZfZXJyKCZ0cy0+ZHNpLT5kZXYsICJJMkMgd3JpdGUgZmFpbGVkOiAlZFxuIiwgcmV0KTsK K30KKworc3RhdGljIGludCBycGlfdG91Y2hzY3JlZW5fd3JpdGUoc3RydWN0IHJwaV90b3VjaHNj cmVlbiAqdHMsIHUxNiByZWcsIHUzMiB2YWwpCit7CisjaWYgMAorCS8qIFRoZSBmaXJtd2FyZSB1 c2VzIExQIERTSSB0cmFuc2FjdGlvbnMgbGlrZSB0aGlzIHRvIGJyaW5nIHVwCisJICogdGhlIGhh cmR3YXJlLCB3aGljaCBzaG91bGQgYmUgZmFzdGVyIHRoYW4gdXNpbmcgSTJDIHRvIHRoZW4KKwkg KiBwYXNzIHRvIHRoZSBUb3NoaWJhLiAgSG93ZXZlciwgSSB3YXMgdW5hYmxlIHRvIGdldCBpdCB0 bworCSAqIHdvcmsuCisJICovCisJdTggbXNnW10gPSB7CisJCXJlZywKKwkJcmVnID4+IDgsCisJ CXZhbCwKKwkJdmFsID4+IDgsCisJCXZhbCA+PiAxNiwKKwkJdmFsID4+IDI0LAorCX07CisKKwlt aXBpX2RzaV9kY3Nfd3JpdGVfYnVmZmVyKHRzLT5kc2ksIG1zZywgc2l6ZW9mKG1zZykpOworI2Vs c2UKKwlycGlfdG91Y2hzY3JlZW5faTJjX3dyaXRlKHRzLCBSRUdfV1JfQUREUkgsIHJlZyA+PiA4 KTsKKwlycGlfdG91Y2hzY3JlZW5faTJjX3dyaXRlKHRzLCBSRUdfV1JfQUREUkwsIHJlZyk7CisJ cnBpX3RvdWNoc2NyZWVuX2kyY193cml0ZSh0cywgUkVHX1dSSVRFSCwgdmFsID4+IDgpOworCXJw aV90b3VjaHNjcmVlbl9pMmNfd3JpdGUodHMsIFJFR19XUklURUwsIHZhbCk7CisjZW5kaWYKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJwaV90b3VjaHNjcmVlbl9kaXNhYmxlKHN0cnVj dCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBycGlfdG91Y2hzY3JlZW4gKnRzID0gcGFu ZWxfdG9fdHMocGFuZWwpOworCisJcnBpX3RvdWNoc2NyZWVuX2kyY193cml0ZSh0cywgUkVHX1BX TSwgMCk7CisKKwlycGlfdG91Y2hzY3JlZW5faTJjX3dyaXRlKHRzLCBSRUdfUE9XRVJPTiwgMCk7 CisJdWRlbGF5KDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnBpX3RvdWNoc2Ny ZWVuX25vb3Aoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgcnBpX3RvdWNoc2NyZWVuX2VuYWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkK K3sKKwlzdHJ1Y3QgcnBpX3RvdWNoc2NyZWVuICp0cyA9IHBhbmVsX3RvX3RzKHBhbmVsKTsKKwlp bnQgaTsKKworCXJwaV90b3VjaHNjcmVlbl9pMmNfd3JpdGUodHMsIFJFR19QT1dFUk9OLCAxKTsK KwkvKiBXYWl0IGZvciBuUFdSRFdOIHRvIGdvIGxvdyB0byBpbmRpY2F0ZSBwb3dlcm9uIGlzIGRv bmUuICovCisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCWlmIChycGlfdG91Y2hzY3Jl ZW5faTJjX3JlYWQodHMsIFJFR19QT1JUQikgJiAxKQorCQkJYnJlYWs7CisJfQorCisJcnBpX3Rv dWNoc2NyZWVuX3dyaXRlKHRzLCBEU0lfTEFORUVOQUJMRSwKKwkJCSAgICAgIERTSV9MQU5FRU5B QkxFX0NMT0NLIHwKKwkJCSAgICAgIERTSV9MQU5FRU5BQkxFX0QwKTsKKwlycGlfdG91Y2hzY3Jl ZW5fd3JpdGUodHMsIFBQSV9EMFNfQ0xSU0lQT0NPVU5ULCAweDA1KTsKKwlycGlfdG91Y2hzY3Jl ZW5fd3JpdGUodHMsIFBQSV9EMVNfQ0xSU0lQT0NPVU5ULCAweDA1KTsKKwlycGlfdG91Y2hzY3Jl ZW5fd3JpdGUodHMsIFBQSV9EMFNfQVRNUiwgMHgwMCk7CisJcnBpX3RvdWNoc2NyZWVuX3dyaXRl KHRzLCBQUElfRDFTX0FUTVIsIDB4MDApOworCXJwaV90b3VjaHNjcmVlbl93cml0ZSh0cywgUFBJ X0xQVFhUSU1FQ05ULCAweDAzKTsKKworCXJwaV90b3VjaHNjcmVlbl93cml0ZSh0cywgU1BJQ01S LCAweDAwKTsKKwlycGlfdG91Y2hzY3JlZW5fd3JpdGUodHMsIExDRENUUkwsIDB4MDAxMDAxNTAp OworCXJwaV90b3VjaHNjcmVlbl93cml0ZSh0cywgU1lTQ1RSTCwgMHgwNDBmKTsKKwltc2xlZXAo MTAwKTsKKworCXJwaV90b3VjaHNjcmVlbl93cml0ZSh0cywgUFBJX1NUQVJUUFBJLCAweDAxKTsK KwlycGlfdG91Y2hzY3JlZW5fd3JpdGUodHMsIERTSV9TVEFSVERTSSwgMHgwMSk7CisJbXNsZWVw KDEwMCk7CisKKwkvKiBUdXJuIG9uIHRoZSBiYWNrbGlnaHQuICovCisJcnBpX3RvdWNoc2NyZWVu X2kyY193cml0ZSh0cywgUkVHX1BXTSwgMjU1KTsKKworCS8qIERlZmF1bHQgdG8gdGhlIHNhbWUg b3JpZW50YXRpb24gYXMgdGhlIGNsb3NlZCBzb3VyY2UKKwkgKiBmaXJtd2FyZSB1c2VkIGZvciB0 aGUgcGFuZWwuICBSdW50aW1lIHJvdGF0aW9uCisJICogY29uZmlndXJhdGlvbiB3aWxsIGJlIHN1 cHBvcnRlZCB1c2luZyBWQzQncyBwbGFuZQorCSAqIG9yaWVudGF0aW9uIGJpdHMuCisJICovCisJ cnBpX3RvdWNoc2NyZWVuX2kyY193cml0ZSh0cywgUkVHX1BPUlRBLCBCSVQoMikpOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnBpX3RvdWNoc2NyZWVuX2dldF9tb2RlcyhzdHJ1Y3Qg ZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0g cGFuZWwtPmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcGFuZWwtPmRybTsK Kwl1bnNpZ25lZCBpbnQgaSwgbnVtID0gMDsKKwlzdGF0aWMgY29uc3QgdTMyIGJ1c19mb3JtYXQg PSBNRURJQV9CVVNfRk1UX1JHQjg4OF8xWDI0OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUocnBpX3RvdWNoc2NyZWVuX21vZGVzKTsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICptID0gJnJwaV90b3VjaHNjcmVlbl9tb2Rlc1tpXTsKKwkJc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGU7CisKKwkJbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkcm0sIG0p OworCQlpZiAoIW1vZGUpIHsKKwkJCWRldl9lcnIoZHJtLT5kZXYsICJmYWlsZWQgdG8gYWRkIG1v ZGUgJXV4JXVAJXVcbiIsCisJCQkJbS0+aGRpc3BsYXksIG0tPnZkaXNwbGF5LCBtLT52cmVmcmVz aCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW1vZGUtPnR5cGUgfD0gRFJNX01PREVfVFlQRV9E UklWRVI7CisKKwkJaWYgKGkgPT0gMCkKKwkJCW1vZGUtPnR5cGUgfD0gRFJNX01PREVfVFlQRV9Q UkVGRVJSRUQ7CisKKwkJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7CisKKwkJZHJtX21vZGVfcHJv YmVkX2FkZChjb25uZWN0b3IsIG1vZGUpOworCQludW0rKzsKKwl9CisKKwljb25uZWN0b3ItPmRp c3BsYXlfaW5mby5icGMgPSA4OworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLndpZHRoX21tID0g MTU0OworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9tbSA9IDg2OworCWRybV9kaXNw bGF5X2luZm9fc2V0X2J1c19mb3JtYXRzKCZjb25uZWN0b3ItPmRpc3BsYXlfaW5mbywKKwkJCQkJ ICZidXNfZm9ybWF0LCAxKTsKKworCXJldHVybiBudW07Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX3BhbmVsX2Z1bmNzIHJwaV90b3VjaHNjcmVlbl9mdW5jcyA9IHsKKwkuZGlzYWJsZSA9 IHJwaV90b3VjaHNjcmVlbl9kaXNhYmxlLAorCS51bnByZXBhcmUgPSBycGlfdG91Y2hzY3JlZW5f bm9vcCwKKwkucHJlcGFyZSA9IHJwaV90b3VjaHNjcmVlbl9ub29wLAorCS5lbmFibGUgPSBycGlf dG91Y2hzY3JlZW5fZW5hYmxlLAorCS5nZXRfbW9kZXMgPSBycGlfdG91Y2hzY3JlZW5fZ2V0X21v ZGVzLAorfTsKKworc3RhdGljIGludCBycGlfdG91Y2hzY3JlZW5fcHJvYmUoc3RydWN0IGkyY19j bGllbnQgKmkyYywKKwkJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0 cnVjdCBkZXZpY2UgKmRldiA9ICZpMmMtPmRldjsKKwlzdHJ1Y3QgcnBpX3RvdWNoc2NyZWVuICp0 czsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRzaV9ob3N0X25vZGUsICplbmRwb2ludDsKKwlzdHJ1 Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdDsKKwlpbnQgcmV0LCB2ZXI7CisJc3RydWN0IG1pcGlfZHNp X2RldmljZV9pbmZvIGluZm8gPSB7CisJCS50eXBlID0gUlBJX0RTSV9EUklWRVJfTkFNRSwKKwkJ LmNoYW5uZWwgPSAwLAorCQkubm9kZSA9IE5VTEwsCisJfTsKKworCXRzID0gZGV2bV9remFsbG9j KGRldiwgc2l6ZW9mKCp0cyksIEdGUF9LRVJORUwpOworCWlmICghdHMpCisJCXJldHVybiAtRU5P TUVNOworCisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgdHMpOworCisJdHMtPmkyYyA9IGkyYzsK KworCXZlciA9IHJwaV90b3VjaHNjcmVlbl9pMmNfcmVhZCh0cywgUkVHX0lEKTsKKwlpZiAodmVy IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkF0bWVsIEkyQyByZWFkIGZhaWxlZDogJWRcbiIsIHZl cik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXN3aXRjaCAodmVyKSB7CisJY2FzZSAweGRl OiAvKiB2ZXIgMSAqLworCWNhc2UgMHhjMzogLyogdmVyIDIgKi8KKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJZGV2X2VycihkZXYsICJVbmtub3duIEF0bWVsIGZpcm13YXJlIHJldmlzaW9uOiAweCUw MnhcbiIsIHZlcik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFR1cm4gb2ZmIGF0IGJv b3QsIHNvIHdlIGNhbiBjbGVhbmx5IHNlcXVlbmNlIHBvd2VyaW5nIG9uLiAqLworCXJwaV90b3Vj aHNjcmVlbl9pMmNfd3JpdGUodHMsIFJFR19QT1dFUk9OLCAwKTsKKworCWVuZHBvaW50ID0gb2Zf Z3JhcGhfZ2V0X25leHRfZW5kcG9pbnQoZGV2LT5vZl9ub2RlLCBOVUxMKTsKKwlkc2lfaG9zdF9u b2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlbmRwb2ludCk7CisJb2Zfbm9k ZV9wdXQoZW5kcG9pbnQpOworCisJaG9zdCA9IG9mX2ZpbmRfbWlwaV9kc2lfaG9zdF9ieV9ub2Rl KGRzaV9ob3N0X25vZGUpOworCW9mX25vZGVfcHV0KGRzaV9ob3N0X25vZGUpOworCisJaWYgKCFo b3N0KSB7CisJCWRldl9kYmcoZGV2LCAiTUlQSSBEU0kgaG9zdCBub3QgcmVnaXN0ZXJlZCB5ZXRc biIpOworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9CisKKwl0cy0+ZHNpID0gbWlwaV9kc2lf ZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoaG9zdCwgJmluZm8pOworCWlmIChJU19FUlIodHMtPmRzaSkp IHsKKwkJZGV2X2VycihkZXYsICJEU0kgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVsZFxu IiwKKwkJCVBUUl9FUlIodHMtPmRzaSkpOworCQlyZXR1cm4gUFRSX0VSUih0cy0+ZHNpKTsKKwl9 CisKKwl0cy0+ZHNpLT5tb2RlX2ZsYWdzID0gKE1JUElfRFNJX01PREVfVklERU8gfAorCQkJICAg ICAgIE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSB8CisJCQkgICAgICAgTUlQSV9EU0lf TU9ERV9MUE0pOworCXRzLT5kc2ktPmZvcm1hdCA9IE1JUElfRFNJX0ZNVF9SR0I4ODg7CisJdHMt PmRzaS0+bGFuZXMgPSAxOworCisJdHMtPmJhc2UuZGV2ID0gJnRzLT5kc2ktPmRldjsKKwl0cy0+ YmFzZS5mdW5jcyA9ICZycGlfdG91Y2hzY3JlZW5fZnVuY3M7CisKKwlyZXQgPSBkcm1fcGFuZWxf YWRkKCZ0cy0+YmFzZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG1pcGlf ZHNpX2F0dGFjaCh0cy0+ZHNpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVk IHRvIGF0dGFjaCBkc2kgdG8gaG9zdFxuIik7CisJCWRybV9wYW5lbF9yZW1vdmUoJnRzLT5iYXNl KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBycGlf dG91Y2hzY3JlZW5fcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMpCit7CisJc3RydWN0IHJw aV90b3VjaHNjcmVlbiAqdHMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTsKKworCW1pcGlfZHNp X2RldGFjaCh0cy0+ZHNpKTsKKworCWRybV9wYW5lbF9yZW1vdmUoJnRzLT5iYXNlKTsKKworCW1p cGlfZHNpX2RldmljZV91bnJlZ2lzdGVyKHRzLT5kc2kpOworCWtmcmVlKHRzLT5kc2kpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWlwaV9kc2lfZHJpdmVyIHJwaV90b3VjaHNj cmVlbl9kc2lfZHJpdmVyID0geworCS5kcml2ZXIubmFtZSA9IFJQSV9EU0lfRFJJVkVSX05BTUUs Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBycGlfdG91Y2hzY3JlZW5f b2ZfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJyYXNwYmVycnlwaSw3aW5jaC10b3VjaHNj cmVlbi1wYW5lbCIgfSwKKwl7IH0gLyogc2VudGluZWwgKi8KK307CitNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCBycGlfdG91Y2hzY3JlZW5fb2ZfaWRzKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJp dmVyIHJwaV90b3VjaHNjcmVlbl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAi cnBpX3RvdWNoc2NyZWVuIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gcnBpX3RvdWNoc2NyZWVuX29m X2lkcywKKwl9LAorCS5wcm9iZSA9IHJwaV90b3VjaHNjcmVlbl9wcm9iZSwKKwkucmVtb3ZlID0g cnBpX3RvdWNoc2NyZWVuX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHJwaV90b3Vj aHNjcmVlbl9pbml0KHZvaWQpCit7CisJbWlwaV9kc2lfZHJpdmVyX3JlZ2lzdGVyKCZycGlfdG91 Y2hzY3JlZW5fZHNpX2RyaXZlcik7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZycGlfdG91Y2hz Y3JlZW5fZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHJwaV90b3VjaHNjcmVlbl9pbml0KTsKKwor c3RhdGljIHZvaWQgX19leGl0IHJwaV90b3VjaHNjcmVlbl9leGl0KHZvaWQpCit7CisJaTJjX2Rl bF9kcml2ZXIoJnJwaV90b3VjaHNjcmVlbl9kcml2ZXIpOworCW1pcGlfZHNpX2RyaXZlcl91bnJl Z2lzdGVyKCZycGlfdG91Y2hzY3JlZW5fZHNpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChycGlf dG91Y2hzY3JlZW5fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkVyaWMgQW5ob2x0IDxlcmljQGFu aG9sdC5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJhc3BiZXJyeSBQaSA3LWluY2ggdG91 Y2hzY3JlZW4gZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0tIAoyLjExLjAK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=