From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH v5 6/6] drm/panel: Add support for the Raspberry Pi 7" Touchscreen. Date: Tue, 18 Jul 2017 14:05:10 -0700 Message-ID: <20170718210510.12229-6-eric@anholt.net> References: <20170718210510.12229-1-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from anholt.net (anholt.net [50.246.234.109]) by gabe.freedesktop.org (Postfix) with ESMTP id B99DB6E3C1 for ; Tue, 18 Jul 2017 21:05:21 +0000 (UTC) In-Reply-To: <20170718210510.12229-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 Cc: linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org VGhpcyBkcml2ZXIgY29tbXVuaWNhdGVzIHdpdGggdGhlIEF0bWVsIG1pY3JvY29udHJvbGxlciBm b3Igc2VxdWVuY2luZwp0aGUgcG93ZXJvbiBvZiB0aGUgVEMzNTg3NjIgRFNJLURQSSBicmlkZ2Ug YW5kIGNvbnRyb2xsaW5nIHRoZQpiYWNrbGlnaHQgUFdNLgoKdjI6IFNldCB0aGUgc2FtZSBkZWZh dWx0IG9yaWVudGF0aW9uIGFzIHRoZSBjbG9zZWQgc291cmNlIGZpcm13YXJlCiAgICB1c2VkLCB3 aGljaCBpcyB0aGUgYmVzdCBmb3Igdmlld2luZyBhbmdsZS4KdjM6IFJld3JpdGUgYXMgYW4gaTJj IGNsaWVudCBkcml2ZXIgYWZ0ZXIgYnJpZGdlIGRyaXZlciByZWplY3Rpb24uCnY0OiBGaW5pc2gg cHJvYmUgd2l0aG91dCB0aGUgRFNJIGhvc3QsIHVzaW5nIHRoZSBuZXcgZGVsYXllZAogICAgcmVn aXN0cmF0aW9uLCBhbmQgYXR0YWNoIHRvIHRoZSBob3N0IGR1cmluZyBtaXBpX2RzaV9kcml2ZXIg cHJvYmUuCgpTaWduZWQtb2ZmLWJ5OiBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgotLS0K IGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgIHwgICA4 ICsKIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwg ICAxICsKIC4uLi9ncHUvZHJtL3BhbmVsL3BhbmVsLXJhc3BiZXJyeXBpLXRvdWNoc2NyZWVuLmMg IHwgNTA1ICsrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA1MTQgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1y YXNwYmVycnlwaS10b3VjaHNjcmVlbi5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Bh bmVsL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwppbmRleCBkODRhMDMx ZmFlMjQuLmQ2ZjE5NjliOGEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tj b25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKQEAgLTczLDYgKzczLDE0 IEBAIGNvbmZpZyBEUk1fUEFORUxfUEFOQVNPTklDX1ZWWDEwRjAzNE4wMAogCSAgV1VYR0EgKDE5 MjB4MTIwMCkgTm92YXRlayBOVDEzOTctYmFzZWQgRFNJIHBhbmVsIGFzIGZvdW5kIGluIHNvbWUK IAkgIFhwZXJpYSBaMiB0YWJsZXRzCiAKK2NvbmZpZyBEUk1fUEFORUxfUkFTUEJFUlJZUElfVE9V Q0hTQ1JFRU4KKwl0cmlzdGF0ZSAiUmFzcGJlcnJ5IFBpIDctaW5jaCB0b3VjaHNjcmVlbiBwYW5l bCIKKwlkZXBlbmRzIG9uIERSTV9NSVBJX0RTSQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91 IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBSYXNwYmVycnkKKwkgIFBpIDciIFRvdWNo c2NyZWVuLiAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwKKwkgIGNob29zZSBN IGhlcmUuCisKIGNvbmZpZyBEUk1fUEFORUxfU0FNU1VOR19TNkUzSEEyCiAJdHJpc3RhdGUgIlNh bXN1bmcgUzZFM0hBMiBEU0kgdmlkZW8gbW9kZSBwYW5lbCIKIAlkZXBlbmRzIG9uIE9GCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0v cGFuZWwvTWFrZWZpbGUKaW5kZXggOWY2NjEwZDA4YjAwLi5iZDE3ZmFjMjFjN2IgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0v cGFuZWwvTWFrZWZpbGUKQEAgLTQsNiArNCw3IEBAIG9iai0kKENPTkZJR19EUk1fUEFORUxfSU5O T0xVWF9QMDc5WkNBKSArPSBwYW5lbC1pbm5vbHV4LXAwNzl6Y2Eubwogb2JqLSQoQ09ORklHX0RS TV9QQU5FTF9KRElfTFQwNzBNRTA1MDAwKSArPSBwYW5lbC1qZGktbHQwNzBtZTA1MDAwLm8KIG9i ai0kKENPTkZJR19EUk1fUEFORUxfTEdfTEc0NTczKSArPSBwYW5lbC1sZy1sZzQ1NzMubwogb2Jq LSQoQ09ORklHX0RSTV9QQU5FTF9QQU5BU09OSUNfVlZYMTBGMDM0TjAwKSArPSBwYW5lbC1wYW5h c29uaWMtdnZ4MTBmMDM0bjAwLm8KK29iai0kKENPTkZJR19EUk1fUEFORUxfUkFTUEJFUlJZUElf VE9VQ0hTQ1JFRU4pICs9IHBhbmVsLXJhc3BiZXJyeXBpLXRvdWNoc2NyZWVuLm8KIG9iai0kKENP TkZJR19EUk1fUEFORUxfU0FNU1VOR19MRDkwNDApICs9IHBhbmVsLXNhbXN1bmctbGQ5MDQwLm8K IG9iai0kKENPTkZJR19EUk1fUEFORUxfU0FNU1VOR19TNkUzSEEyKSArPSBwYW5lbC1zYW1zdW5n LXM2ZTNoYTIubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TQU1TVU5HX1M2RThBQTApICs9IHBh bmVsLXNhbXN1bmctczZlOGFhMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwv cGFuZWwtcmFzcGJlcnJ5cGktdG91Y2hzY3JlZW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9w YW5lbC1yYXNwYmVycnlwaS10b3VjaHNjcmVlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uYjIzMzMxMDUxZDc5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL3BhbmVsL3BhbmVsLXJhc3BiZXJyeXBpLXRvdWNoc2NyZWVuLmMKQEAgLTAsMCArMSw1 MDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNi0yMDE3IEJyb2FkY29tCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KKyAqCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgKGRlcml2ZWQgZnJvbSBw YW5lbC1zaW1wbGUuYykgYXJlOgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMywgTlZJRElBIENv cnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQor ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWIgbGlj ZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRo ZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRI RSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVB TElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKy8qKgorICogUmFzcGJlcnJ5IFBpIDciIHRv dWNoc2NyZWVuIHBhbmVsIGRyaXZlci4KKyAqCisgKiBUaGUgNyIgdG91Y2hzY3JlZW4gY29uc2lz dHMgb2YgYSBEUEkgTENEIHBhbmVsLCBhIFRvc2hpYmEKKyAqIFRDMzU4NzYyWEJHIERTSS1EUEkg YnJpZGdlLCBhbmQgYW4gSTJDLWNvbm5lY3RlZCBBdG1lbCBBVFRJTlk4OC1NVVIKKyAqIGNvbnRy b2xsaW5nIHBvd2VyIG1hbmFnZW1lbnQsIHRoZSBMQ0QgUFdNLCBhbmQgaW5pdGlhbCByZWdpc3Rl cgorICogc2V0dXAgb2YgdGhlIFRvaHNpYmEuCisgKgorICogVGhpcyBkcml2ZXIgY29udHJvbHMg dGhlIFRDMzU4NzYyIGFuZCBBVFRJTlk4OCwgcHJlc2VudGluZyBhIERTSQorICogZGV2aWNlIHdp dGggYSBkcm1fcGFuZWwuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVk ZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9n cGlvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4 L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+ CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGgu aD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgor I2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9taXBpX2RzaS5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KKworI2Rl ZmluZSBSUElfRFNJX0RSSVZFUl9OQU1FICJycGktdHMtZHNpIgorCisvKiBJMkMgcmVnaXN0ZXJz IG9mIHRoZSBBdG1lbCBtaWNyb2NvbnRyb2xsZXIuICovCitlbnVtIFJFR19BRERSIHsKKwlSRUdf SUQgPSAweDgwLAorCVJFR19QT1JUQSwgLyogQklUKDIpIGZvciBob3Jpem9udGFsIGZsaXAsIEJJ VCgzKSBmb3IgdmVydGljYWwgZmxpcCAqLworCVJFR19QT1JUQiwKKwlSRUdfUE9SVEMsCisJUkVH X1BPUlRELAorCVJFR19QT1dFUk9OLAorCVJFR19QV00sCisJUkVHX0REUkEsCisJUkVHX0REUkIs CisJUkVHX0REUkMsCisJUkVHX0REUkQsCisJUkVHX1RFU1QsCisJUkVHX1dSX0FERFJMLAorCVJF R19XUl9BRERSSCwKKwlSRUdfUkVBREgsCisJUkVHX1JFQURMLAorCVJFR19XUklURUgsCisJUkVH X1dSSVRFTCwKKwlSRUdfSUQyLAorfTsKKworLyogV2Ugb25seSB0dXJuIHRoZSBQV00gb24gb3Ig b2ZmLCB3aXRob3V0IHZhcnlpbmcgdmFsdWVzLiAqLworI2RlZmluZSBSUElfVE9VQ0hTQ1JFRU5f TUFYX0JSSUdIVE5FU1MgMQorCisvKiBEU0kgRC1QSFkgTGF5ZXIgUmVnaXN0ZXJzICovCisjZGVm aW5lIEQwV19EUEhZQ09OVFRYCQkweDAwMDQKKyNkZWZpbmUgQ0xXX0RQSFlDT05UUlgJCTB4MDAy MAorI2RlZmluZSBEMFdfRFBIWUNPTlRSWAkJMHgwMDI0CisjZGVmaW5lIEQxV19EUEhZQ09OVFJY CQkweDAwMjgKKyNkZWZpbmUgQ09NX0RQSFlDT05UUlgJCTB4MDAzOAorI2RlZmluZSBDTFdfQ05U UkwJCTB4MDA0MAorI2RlZmluZSBEMFdfQ05UUkwJCTB4MDA0NAorI2RlZmluZSBEMVdfQ05UUkwJ CTB4MDA0OAorI2RlZmluZSBERlRNT0RFX0NOVFJMCQkweDAwNTQKKworLyogRFNJIFBQSSBMYXll ciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUFBJX1NUQVJUUFBJCQkweDAxMDQKKyNkZWZpbmUgUFBJ X0JVU1lQUEkJCTB4MDEwOAorI2RlZmluZSBQUElfTElORUlOSVRDTlQJCTB4MDExMAorI2RlZmlu ZSBQUElfTFBUWFRJTUVDTlQJCTB4MDExNAorI2RlZmluZSBQUElfQ0xTX0FUTVIJCTB4MDE0MAor I2RlZmluZSBQUElfRDBTX0FUTVIJCTB4MDE0NAorI2RlZmluZSBQUElfRDFTX0FUTVIJCTB4MDE0 OAorI2RlZmluZSBQUElfRDBTX0NMUlNJUE9DT1VOVAkweDAxNjQKKyNkZWZpbmUgUFBJX0QxU19D TFJTSVBPQ09VTlQJMHgwMTY4CisjZGVmaW5lIENMU19QUkUJCQkweDAxODAKKyNkZWZpbmUgRDBT X1BSRQkJCTB4MDE4NAorI2RlZmluZSBEMVNfUFJFCQkJMHgwMTg4CisjZGVmaW5lIENMU19QUkVQ CQkweDAxQTAKKyNkZWZpbmUgRDBTX1BSRVAJCTB4MDFBNAorI2RlZmluZSBEMVNfUFJFUAkJMHgw MUE4CisjZGVmaW5lIENMU19aRVJPCQkweDAxQzAKKyNkZWZpbmUgRDBTX1pFUk8JCTB4MDFDNAor I2RlZmluZSBEMVNfWkVSTwkJMHgwMUM4CisjZGVmaW5lIFBQSV9DTFJGTEcJCTB4MDFFMAorI2Rl ZmluZSBQUElfQ0xSU0lQTwkJMHgwMUU0CisjZGVmaW5lIEhTVElNRU9VVAkJMHgwMUYwCisjZGVm aW5lIEhTVElNRU9VVEVOQUJMRQkJMHgwMUY0CisKKy8qIERTSSBQcm90b2NvbCBMYXllciBSZWdp c3RlcnMgKi8KKyNkZWZpbmUgRFNJX1NUQVJURFNJCQkweDAyMDQKKyNkZWZpbmUgRFNJX0JVU1lE U0kJCTB4MDIwOAorI2RlZmluZSBEU0lfTEFORUVOQUJMRQkJMHgwMjEwCisjIGRlZmluZSBEU0lf TEFORUVOQUJMRV9DTE9DSwkJQklUKDApCisjIGRlZmluZSBEU0lfTEFORUVOQUJMRV9EMAkJQklU KDEpCisjIGRlZmluZSBEU0lfTEFORUVOQUJMRV9EMQkJQklUKDIpCisKKyNkZWZpbmUgRFNJX0xB TkVTVEFUVVMwCQkweDAyMTQKKyNkZWZpbmUgRFNJX0xBTkVTVEFUVVMxCQkweDAyMTgKKyNkZWZp bmUgRFNJX0lOVFNUQVRVUwkJMHgwMjIwCisjZGVmaW5lIERTSV9JTlRNQVNLCQkweDAyMjQKKyNk ZWZpbmUgRFNJX0lOVENMUgkJMHgwMjI4CisjZGVmaW5lIERTSV9MUFRYVE8JCTB4MDIzMAorI2Rl ZmluZSBEU0lfTU9ERQkJMHgwMjYwCisjZGVmaW5lIERTSV9QQVlMT0FEMAkJMHgwMjY4CisjZGVm aW5lIERTSV9QQVlMT0FEMQkJMHgwMjZDCisjZGVmaW5lIERTSV9TSE9SVFBLVERBVAkJMHgwMjcw CisjZGVmaW5lIERTSV9TSE9SVFBLVFJFUQkJMHgwMjc0CisjZGVmaW5lIERTSV9CVEFTVEEJCTB4 MDI3OAorI2RlZmluZSBEU0lfQlRBQ0xSCQkweDAyN0MKKworLyogRFNJIEdlbmVyYWwgUmVnaXN0 ZXJzICovCisjZGVmaW5lIERTSUVSUkNOVAkJMHgwMzAwCisjZGVmaW5lIERTSVNJR01PRAkJMHgw MzA0CisKKy8qIERTSSBBcHBsaWNhdGlvbiBMYXllciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVBM Q1RSTAkJCTB4MDQwMAorI2RlZmluZSBBUExTVEFUCQkJMHgwNDA0CisjZGVmaW5lIEFQTEVSUgkJ CTB4MDQwOAorI2RlZmluZSBQV1JNT0QJCQkweDA0MEMKKyNkZWZpbmUgUkRQS1RMTgkJCTB4MDQx MAorI2RlZmluZSBQWExGTVQJCQkweDA0MTQKKyNkZWZpbmUgTUVNV1JDTUQJCTB4MDQxOAorCisv KiBMQ0RDL0RQSSBIb3N0IFJlZ2lzdGVycyAqLworI2RlZmluZSBMQ0RDVFJMCQkJMHgwNDIwCisj ZGVmaW5lIEhTUgkJCTB4MDQyNAorI2RlZmluZSBIRElTUFIJCQkweDA0MjgKKyNkZWZpbmUgVlNS CQkJMHgwNDJDCisjZGVmaW5lIFZESVNQUgkJCTB4MDQzMAorI2RlZmluZSBWRlVFTgkJCTB4MDQz NAorCisvKiBEQkktQiBIb3N0IFJlZ2lzdGVycyAqLworI2RlZmluZSBEQklCQ1RSTAkJMHgwNDQw CisKKy8qIFNQSSBNYXN0ZXIgUmVnaXN0ZXJzICovCisjZGVmaW5lIFNQSUNNUgkJCTB4MDQ1MAor I2RlZmluZSBTUElUQ1IJCQkweDA0NTQKKworLyogU3lzdGVtIENvbnRyb2xsZXIgUmVnaXN0ZXJz ICovCisjZGVmaW5lIFNZU1NUQVQJCQkweDA0NjAKKyNkZWZpbmUgU1lTQ1RSTAkJCTB4MDQ2NAor I2RlZmluZSBTWVNQTEwxCQkJMHgwNDY4CisjZGVmaW5lIFNZU1BMTDIJCQkweDA0NkMKKyNkZWZp bmUgU1lTUExMMwkJCTB4MDQ3MAorI2RlZmluZSBTWVNQTUNUUkwJCTB4MDQ3QworCisvKiBHUElP IFJlZ2lzdGVycyAqLworI2RlZmluZSBHUElPQwkJCTB4MDQ4MAorI2RlZmluZSBHUElPTwkJCTB4 MDQ4NAorI2RlZmluZSBHUElPSQkJCTB4MDQ4OAorCisvKiBJMkMgUmVnaXN0ZXJzICovCisjZGVm aW5lIEkyQ0NMS0NUUkwJCTB4MDQ5MAorCisvKiBDaGlwL1JldiBSZWdpc3RlcnMgKi8KKyNkZWZp bmUgSURSRUcJCQkweDA0QTAKKworLyogRGVidWcgUmVnaXN0ZXJzICovCisjZGVmaW5lIFdDTURR VUVVRQkJMHgwNTAwCisjZGVmaW5lIFJDTURRVUVVRQkJMHgwNTA0CisKK3N0cnVjdCBycGlfdG91 Y2hzY3JlZW4geworCXN0cnVjdCBkcm1fcGFuZWwgYmFzZTsKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2 aWNlICpkc2k7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYzsKK307CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBycGlfdG91Y2hzY3JlZW5fbW9kZXNbXSA9IHsKKwl7CisJ CS8qIE1vZGVsaW5lIGNvbWVzIGZyb20gdGhlIFJhc3BiZXJyeSBQaSBmaXJtd2FyZSwgd2l0aCBI RlA9MQorCQkgKiBwbHVnZ2VkIGluIGFuZCBjbG9jayByZS1jb21wdXRlZCBmcm9tIHRoYXQuCisJ CSAqLworCQkuY2xvY2sgPSAyNTk3OTQwMCAvIDEwMDAsCisJCS5oZGlzcGxheSA9IDgwMCwKKwkJ LmhzeW5jX3N0YXJ0ID0gODAwICsgMSwKKwkJLmhzeW5jX2VuZCA9IDgwMCArIDEgKyAyLAorCQku aHRvdGFsID0gODAwICsgMSArIDIgKyA0NiwKKwkJLnZkaXNwbGF5ID0gNDgwLAorCQkudnN5bmNf c3RhcnQgPSA0ODAgKyA3LAorCQkudnN5bmNfZW5kID0gNDgwICsgNyArIDIsCisJCS52dG90YWwg PSA0ODAgKyA3ICsgMiArIDIxLAorCQkudnJlZnJlc2ggPSA2MCwKKwl9LAorfTsKKworc3RhdGlj IHN0cnVjdCBycGlfdG91Y2hzY3JlZW4gKnBhbmVsX3RvX3RzKHN0cnVjdCBkcm1fcGFuZWwgKnBh bmVsKQoreworCXJldHVybiBjb250YWluZXJfb2YocGFuZWwsIHN0cnVjdCBycGlfdG91Y2hzY3Jl ZW4sIGJhc2UpOworfQorCitzdGF0aWMgdTggcnBpX3RvdWNoc2NyZWVuX2kyY19yZWFkKHN0cnVj dCBycGlfdG91Y2hzY3JlZW4gKnRzLCB1OCByZWcpCit7CisJcmV0dXJuIGkyY19zbWJ1c19yZWFk X2J5dGVfZGF0YSh0cy0+aTJjLCByZWcpOworfQorCitzdGF0aWMgdm9pZCBycGlfdG91Y2hzY3Jl ZW5faTJjX3dyaXRlKHN0cnVjdCBycGlfdG91Y2hzY3JlZW4gKnRzLAorCQkJCSAgICAgIHU4IHJl ZywgdTggdmFsKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9k YXRhKHRzLT5pMmMsIHJlZywgdmFsKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKCZ0cy0+ZHNpLT5k ZXYsICJJMkMgd3JpdGUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKK30KKworc3RhdGljIGludCBycGlf dG91Y2hzY3JlZW5fd3JpdGUoc3RydWN0IHJwaV90b3VjaHNjcmVlbiAqdHMsIHUxNiByZWcsIHUz MiB2YWwpCit7CisjaWYgMAorCS8qIFRoZSBmaXJtd2FyZSB1c2VzIExQIERTSSB0cmFuc2FjdGlv bnMgbGlrZSB0aGlzIHRvIGJyaW5nIHVwCisJICogdGhlIGhhcmR3YXJlLCB3aGljaCBzaG91bGQg YmUgZmFzdGVyIHRoYW4gdXNpbmcgSTJDIHRvIHRoZW4KKwkgKiBwYXNzIHRvIHRoZSBUb3NoaWJh LiAgSG93ZXZlciwgSSB3YXMgdW5hYmxlIHRvIGdldCBpdCB0bworCSAqIHdvcmsuCisJICovCisJ dTggbXNnW10gPSB7CisJCXJlZywKKwkJcmVnID4+IDgsCisJCXZhbCwKKwkJdmFsID4+IDgsCisJ CXZhbCA+PiAxNiwKKwkJdmFsID4+IDI0LAorCX07CisKKwltaXBpX2RzaV9kY3Nfd3JpdGVfYnVm ZmVyKHRzLT5kc2ksIG1zZywgc2l6ZW9mKG1zZykpOworI2Vsc2UKKwlycGlfdG91Y2hzY3JlZW5f aTJjX3dyaXRlKHRzLCBSRUdfV1JfQUREUkgsIHJlZyA+PiA4KTsKKwlycGlfdG91Y2hzY3JlZW5f aTJjX3dyaXRlKHRzLCBSRUdfV1JfQUREUkwsIHJlZyk7CisJcnBpX3RvdWNoc2NyZWVuX2kyY193 cml0ZSh0cywgUkVHX1dSSVRFSCwgdmFsID4+IDgpOworCXJwaV90b3VjaHNjcmVlbl9pMmNfd3Jp dGUodHMsIFJFR19XUklURUwsIHZhbCk7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHJwaV90b3VjaHNjcmVlbl9kaXNhYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQor eworCXN0cnVjdCBycGlfdG91Y2hzY3JlZW4gKnRzID0gcGFuZWxfdG9fdHMocGFuZWwpOworCisJ cnBpX3RvdWNoc2NyZWVuX2kyY193cml0ZSh0cywgUkVHX1BXTSwgMCk7CisKKwlycGlfdG91Y2hz Y3JlZW5faTJjX3dyaXRlKHRzLCBSRUdfUE9XRVJPTiwgMCk7CisJdWRlbGF5KDEpOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnBpX3RvdWNoc2NyZWVuX25vb3Aoc3RydWN0IGRybV9w YW5lbCAqcGFuZWwpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnBpX3RvdWNoc2Ny ZWVuX2VuYWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgcnBpX3RvdWNo c2NyZWVuICp0cyA9IHBhbmVsX3RvX3RzKHBhbmVsKTsKKwlpbnQgaTsKKworCXJwaV90b3VjaHNj cmVlbl9pMmNfd3JpdGUodHMsIFJFR19QT1dFUk9OLCAxKTsKKwkvKiBXYWl0IGZvciBuUFdSRFdO IHRvIGdvIGxvdyB0byBpbmRpY2F0ZSBwb3dlcm9uIGlzIGRvbmUuICovCisJZm9yIChpID0gMDsg aSA8IDEwMDsgaSsrKSB7CisJCWlmIChycGlfdG91Y2hzY3JlZW5faTJjX3JlYWQodHMsIFJFR19Q T1JUQikgJiAxKQorCQkJYnJlYWs7CisJfQorCisJcnBpX3RvdWNoc2NyZWVuX3dyaXRlKHRzLCBE U0lfTEFORUVOQUJMRSwKKwkJCSAgICAgIERTSV9MQU5FRU5BQkxFX0NMT0NLIHwKKwkJCSAgICAg IERTSV9MQU5FRU5BQkxFX0QwKTsKKwlycGlfdG91Y2hzY3JlZW5fd3JpdGUodHMsIFBQSV9EMFNf Q0xSU0lQT0NPVU5ULCAweDA1KTsKKwlycGlfdG91Y2hzY3JlZW5fd3JpdGUodHMsIFBQSV9EMVNf Q0xSU0lQT0NPVU5ULCAweDA1KTsKKwlycGlfdG91Y2hzY3JlZW5fd3JpdGUodHMsIFBQSV9EMFNf QVRNUiwgMHgwMCk7CisJcnBpX3RvdWNoc2NyZWVuX3dyaXRlKHRzLCBQUElfRDFTX0FUTVIsIDB4 MDApOworCXJwaV90b3VjaHNjcmVlbl93cml0ZSh0cywgUFBJX0xQVFhUSU1FQ05ULCAweDAzKTsK KworCXJwaV90b3VjaHNjcmVlbl93cml0ZSh0cywgU1BJQ01SLCAweDAwKTsKKwlycGlfdG91Y2hz Y3JlZW5fd3JpdGUodHMsIExDRENUUkwsIDB4MDAxMDAxNTApOworCXJwaV90b3VjaHNjcmVlbl93 cml0ZSh0cywgU1lTQ1RSTCwgMHgwNDBmKTsKKwltc2xlZXAoMTAwKTsKKworCXJwaV90b3VjaHNj cmVlbl93cml0ZSh0cywgUFBJX1NUQVJUUFBJLCAweDAxKTsKKwlycGlfdG91Y2hzY3JlZW5fd3Jp dGUodHMsIERTSV9TVEFSVERTSSwgMHgwMSk7CisJbXNsZWVwKDEwMCk7CisKKwkvKiBUdXJuIG9u IHRoZSBiYWNrbGlnaHQuICovCisJcnBpX3RvdWNoc2NyZWVuX2kyY193cml0ZSh0cywgUkVHX1BX TSwgMjU1KTsKKworCS8qIERlZmF1bHQgdG8gdGhlIHNhbWUgb3JpZW50YXRpb24gYXMgdGhlIGNs b3NlZCBzb3VyY2UKKwkgKiBmaXJtd2FyZSB1c2VkIGZvciB0aGUgcGFuZWwuICBSdW50aW1lIHJv dGF0aW9uCisJICogY29uZmlndXJhdGlvbiB3aWxsIGJlIHN1cHBvcnRlZCB1c2luZyBWQzQncyBw bGFuZQorCSAqIG9yaWVudGF0aW9uIGJpdHMuCisJICovCisJcnBpX3RvdWNoc2NyZWVuX2kyY193 cml0ZSh0cywgUkVHX1BPUlRBLCBCSVQoMikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgcnBpX3RvdWNoc2NyZWVuX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sK KwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gcGFuZWwtPmNvbm5lY3RvcjsKKwlz dHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcGFuZWwtPmRybTsKKwl1bnNpZ25lZCBpbnQgaSwgbnVt ID0gMDsKKwlzdGF0aWMgY29uc3QgdTMyIGJ1c19mb3JtYXQgPSBNRURJQV9CVVNfRk1UX1JHQjg4 OF8xWDI0OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnBpX3RvdWNoc2NyZWVuX21v ZGVzKTsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptID0gJnJwaV90 b3VjaHNjcmVlbl9tb2Rlc1tpXTsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisK KwkJbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkcm0sIG0pOworCQlpZiAoIW1vZGUpIHsKKwkJ CWRldl9lcnIoZHJtLT5kZXYsICJmYWlsZWQgdG8gYWRkIG1vZGUgJXV4JXVAJXVcbiIsCisJCQkJ bS0+aGRpc3BsYXksIG0tPnZkaXNwbGF5LCBtLT52cmVmcmVzaCk7CisJCQljb250aW51ZTsKKwkJ fQorCisJCW1vZGUtPnR5cGUgfD0gRFJNX01PREVfVFlQRV9EUklWRVI7CisKKwkJaWYgKGkgPT0g MCkKKwkJCW1vZGUtPnR5cGUgfD0gRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7CisKKwkJZHJtX21v ZGVfc2V0X25hbWUobW9kZSk7CisKKwkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1v ZGUpOworCQludW0rKzsKKwl9CisKKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5icGMgPSA4Owor CWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLndpZHRoX21tID0gMTU0OworCWNvbm5lY3Rvci0+ZGlz cGxheV9pbmZvLmhlaWdodF9tbSA9IDg2OworCWRybV9kaXNwbGF5X2luZm9fc2V0X2J1c19mb3Jt YXRzKCZjb25uZWN0b3ItPmRpc3BsYXlfaW5mbywKKwkJCQkJICZidXNfZm9ybWF0LCAxKTsKKwor CXJldHVybiBudW07Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BhbmVsX2Z1bmNzIHJw aV90b3VjaHNjcmVlbl9mdW5jcyA9IHsKKwkuZGlzYWJsZSA9IHJwaV90b3VjaHNjcmVlbl9kaXNh YmxlLAorCS51bnByZXBhcmUgPSBycGlfdG91Y2hzY3JlZW5fbm9vcCwKKwkucHJlcGFyZSA9IHJw aV90b3VjaHNjcmVlbl9ub29wLAorCS5lbmFibGUgPSBycGlfdG91Y2hzY3JlZW5fZW5hYmxlLAor CS5nZXRfbW9kZXMgPSBycGlfdG91Y2hzY3JlZW5fZ2V0X21vZGVzLAorfTsKKworc3RhdGljIGlu dCBycGlfdG91Y2hzY3JlZW5fcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgY29u c3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZp MmMtPmRldjsKKwlzdHJ1Y3QgcnBpX3RvdWNoc2NyZWVuICp0czsKKwlzdHJ1Y3QgZGV2aWNlX25v ZGUgKmVuZHBvaW50OworCWludCByZXQsIHZlcjsKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlX2lu Zm8gaW5mbyA9IHsKKwkJLnR5cGUgPSBSUElfRFNJX0RSSVZFUl9OQU1FLAorCQkuY2hhbm5lbCA9 IDAsCisJCS5ub2RlID0gTlVMTCwKKwl9OworCisJdHMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXpl b2YoKnRzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlp MmNfc2V0X2NsaWVudGRhdGEoaTJjLCB0cyk7CisKKwl0cy0+aTJjID0gaTJjOworCisJdmVyID0g cnBpX3RvdWNoc2NyZWVuX2kyY19yZWFkKHRzLCBSRUdfSUQpOworCWlmICh2ZXIgPCAwKSB7CisJ CWRldl9lcnIoZGV2LCAiQXRtZWwgSTJDIHJlYWQgZmFpbGVkOiAlZFxuIiwgdmVyKTsKKwkJcmV0 dXJuIC1FTk9ERVY7CisJfQorCisJc3dpdGNoICh2ZXIpIHsKKwljYXNlIDB4ZGU6IC8qIHZlciAx ICovCisJY2FzZSAweGMzOiAvKiB2ZXIgMiAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZf ZXJyKGRldiwgIlVua25vd24gQXRtZWwgZmlybXdhcmUgcmV2aXNpb246IDB4JTAyeFxuIiwgdmVy KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogVHVybiBvZmYgYXQgYm9vdCwgc28gd2Ug Y2FuIGNsZWFubHkgc2VxdWVuY2UgcG93ZXJpbmcgb24uICovCisJcnBpX3RvdWNoc2NyZWVuX2ky Y193cml0ZSh0cywgUkVHX1BPV0VST04sIDApOworCisJZW5kcG9pbnQgPSBvZl9ncmFwaF9nZXRf bmV4dF9lbmRwb2ludChkZXYtPm9mX25vZGUsIE5VTEwpOworCWluZm8ubm9kZSA9IG9mX2dyYXBo X2dldF9yZW1vdGVfcG9ydChlbmRwb2ludCk7CisJb2Zfbm9kZV9wdXQoZW5kcG9pbnQpOworCisJ dHMtPmRzaSA9IG1pcGlfZHNpX2RldmljZV9yZWdpc3Rlcl9mdWxsKE5VTEwsICZpbmZvKTsKKwlp ZiAoSVNfRVJSKHRzLT5kc2kpKSB7CisJCWRldl9lcnIoZGV2LCAiRFNJIGRldmljZSByZWdpc3Ry YXRpb24gZmFpbGVkOiAlbGRcbiIsCisJCQlQVFJfRVJSKHRzLT5kc2kpKTsKKwkJcmV0dXJuIFBU Ul9FUlIodHMtPmRzaSk7CisJfQorCisJdHMtPmRzaS0+bW9kZV9mbGFncyA9IChNSVBJX0RTSV9N T0RFX1ZJREVPIHwKKwkJCSAgICAgICBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UgfAor CQkJICAgICAgIE1JUElfRFNJX01PREVfTFBNKTsKKwl0cy0+ZHNpLT5mb3JtYXQgPSBNSVBJX0RT SV9GTVRfUkdCODg4OworCXRzLT5kc2ktPmxhbmVzID0gMTsKKworCXRzLT5iYXNlLmRldiA9IGRl djsKKwl0cy0+YmFzZS5mdW5jcyA9ICZycGlfdG91Y2hzY3JlZW5fZnVuY3M7CisKKwkvKiBUaGlz IGFwcGVhcnMgbGFzdCwgYXMgaXQncyB3aGF0IHdpbGwgdW5ibG9jayB0aGUgRFNJIGhvc3QKKwkg KiBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiBhbmQgc3RhcnQgdGhlIGF0dGFjaCBwcm9jZXNzLgor CSAqLworCXJldCA9IGRybV9wYW5lbF9hZGQoJnRzLT5iYXNlKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnBpX3RvdWNoc2NyZWVuX3Jl bW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKQoreworCXN0cnVjdCBycGlfdG91Y2hzY3JlZW4g KnRzID0gaTJjX2dldF9jbGllbnRkYXRhKGkyYyk7CisKKwltaXBpX2RzaV9kZXRhY2godHMtPmRz aSk7CisKKwlkcm1fcGFuZWxfcmVtb3ZlKCZ0cy0+YmFzZSk7CisKKwltaXBpX2RzaV9kZXZpY2Vf dW5yZWdpc3Rlcih0cy0+ZHNpKTsKKwlrZnJlZSh0cy0+ZHNpKTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IHJwaV90b3VjaHNjcmVlbl9kc2lfcHJvYmUoc3RydWN0IG1pcGlfZHNpX2Rl dmljZSAqZHNpKQoreworCWludCByZXQgPSBtaXBpX2RzaV9hdHRhY2goZHNpKTsKKworCWlmIChy ZXQpCisJCWRldl9lcnIoJmRzaS0+ZGV2LCAiZmFpbGVkIHRvIGF0dGFjaCBkc2kgdG8gaG9zdDog JWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG1pcGlfZHNp X2RyaXZlciBycGlfdG91Y2hzY3JlZW5fZHNpX2RyaXZlciA9IHsKKwkuZHJpdmVyLm5hbWUgPSBS UElfRFNJX0RSSVZFUl9OQU1FLAorCS5wcm9iZSA9IHJwaV90b3VjaHNjcmVlbl9kc2lfcHJvYmUs Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBycGlfdG91Y2hzY3JlZW5f b2ZfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJyYXNwYmVycnlwaSw3aW5jaC10b3VjaHNj cmVlbi1wYW5lbCIgfSwKKwl7IH0gLyogc2VudGluZWwgKi8KK307CitNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCBycGlfdG91Y2hzY3JlZW5fb2ZfaWRzKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJp dmVyIHJwaV90b3VjaHNjcmVlbl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAi cnBpX3RvdWNoc2NyZWVuIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gcnBpX3RvdWNoc2NyZWVuX29m X2lkcywKKwl9LAorCS5wcm9iZSA9IHJwaV90b3VjaHNjcmVlbl9wcm9iZSwKKwkucmVtb3ZlID0g cnBpX3RvdWNoc2NyZWVuX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHJwaV90b3Vj aHNjcmVlbl9pbml0KHZvaWQpCit7CisJbWlwaV9kc2lfZHJpdmVyX3JlZ2lzdGVyKCZycGlfdG91 Y2hzY3JlZW5fZHNpX2RyaXZlcik7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZycGlfdG91Y2hz Y3JlZW5fZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHJwaV90b3VjaHNjcmVlbl9pbml0KTsKKwor c3RhdGljIHZvaWQgX19leGl0IHJwaV90b3VjaHNjcmVlbl9leGl0KHZvaWQpCit7CisJaTJjX2Rl bF9kcml2ZXIoJnJwaV90b3VjaHNjcmVlbl9kcml2ZXIpOworCW1pcGlfZHNpX2RyaXZlcl91bnJl Z2lzdGVyKCZycGlfdG91Y2hzY3JlZW5fZHNpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChycGlf dG91Y2hzY3JlZW5fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkVyaWMgQW5ob2x0IDxlcmljQGFu aG9sdC5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJhc3BiZXJyeSBQaSA3LWluY2ggdG91 Y2hzY3JlZW4gZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0tIAoyLjExLjAK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=