From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH 05/16] drm: rcar-du: lvds: D3/E3 support Date: Fri, 14 Sep 2018 00:14:01 +0300 Message-ID: <2103200.BD3voSUcdv@avalon> References: <20180904121027.24031-1-laurent.pinchart+renesas@ideasonboard.com> <20180904121027.24031-6-laurent.pinchart+renesas@ideasonboard.com> <20180911132323.GN20333@w540> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by gabe.freedesktop.org (Postfix) with ESMTPS id 604F66E22B for ; Thu, 13 Sep 2018 21:13:51 +0000 (UTC) In-Reply-To: <20180911132323.GN20333@w540> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: jacopo mondi Cc: linux-renesas-soc@vger.kernel.org, Laurent Pinchart , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org SGkgSmFjb3BvLAoKT24gVHVlc2RheSwgMTEgU2VwdGVtYmVyIDIwMTggMTY6MjM6MjMgRUVTVCBq YWNvcG8gbW9uZGkgd3JvdGU6Cj4gT24gVHVlLCBTZXAgMDQsIDIwMTggYXQgMDM6MTA6MTZQTSAr MDMwMCwgTGF1cmVudCBQaW5jaGFydCB3cm90ZToKPiA+IFRoZSBMVkRTIGVuY29kZXJzIGluIHRo ZSBEMyBhbmQgRTMgU29DcyBkaWZmZXIgc2lnbmlmaWNhbnRseSBmcm9tIHRob3NlCj4gPiBpbiB0 aGUgb3RoZXIgUi1DYXIgR2VuMyBmYW1pbHkgbWVtYmVyczoKPiA+IAo+ID4gLSBUaGUgTFZEUyBQ TEwgYXJjaGl0ZWN0dXJlIGlzIG1vcmUgY29tcGxleCBhbmQgcmVxdWlyZXMgY29tcHV0aW5nIFBM TAo+ID4gICBwYXJhbWV0ZXJzIG1hbnVhbGx5Lgo+ID4gCj4gPiAtIFRoZSBQTEwgdXNlcyBleHRl cm5hbCBjbG9ja3MgYXMgaW5wdXRzLCB3aGljaCBuZWVkIHRvIGJlIHJldHJpZXZlZAo+ID4gICBm cm9tIERULgo+ID4gCj4gPiAtIEluIGFkZGl0aW9uIHRvIHRoZSBkaWZmZXJlbnQgUExMIHNldHVw LCB0aGUgc3RhcnR1cCBzZXF1ZW5jZSBoYXMKPiA+ICAgY2hhbmdlZCAqYWdhaW4qIChzZWVtcyBz b21lb25lIGhhZCB0cm91YmxlIG1ha2luZyBoaXMvaGVyIG1pbmQpLgo+ID4gCj4gPiBTdXBwb3J0 aW5nIGFsbCB0aGlzIHJlcXVpcmVzIERUIGJpbmRpbmdzIGV4dGVuc2lvbnMgZm9yIGV4dGVybmFs IGNsb2NrcywKPiA+IGJyYW5kIG5ldyBQTEwgc2V0dXAgY29kZSwgYW5kIGEgZmV3IHF1aXJrcyB0 byBoYW5kbGUgdGhlIGRpZmZlcmVuY2VzIGluCj4gPiB0aGUgc3RhcnR1cCBzZXF1ZW5jZS4KPiA+ IAo+ID4gVGhlIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBhbGwgaGFyZHdhcmUgZmVh dHVyZXMgeWV0LCBuYW1lbHkKPiA+IAo+ID4gLSBVc2luZyB0aGUgTFZbMDFdIGNsb2NrcyBnZW5l cmF0ZWQgYnkgdGhlIENQRyBhcyBQTEwgaW5wdXQuCj4gPiAtIFByb3ZpZGluZyB0aGUgTFZEUyBQ TEwgY2xvY2sgdG8gdGhlIERVIGZvciB1c2Ugd2l0aCB0aGUgUkdCIG91dHB1dC4KPiA+IAo+ID4g VGhvc2UgZmVhdHVyZXMgY2FuIGJlIGFkZGVkIGxhdGVyIHdoZW4gdGhlIG5lZWQgd2lsbCBhcmlz ZS4KPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogTGF1cmVudCBQaW5jaGFydAo+ID4gPGxhdXJlbnQu cGluY2hhcnQrcmVuZXNhc0BpZGVhc29uYm9hcmQuY29tPgo+ID4gLS0tCj4gPiAKPiA+ICBkcml2 ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2x2ZHMuYyAgICAgIHwgMzY1ICsrKysrKysrKysrKysr KysrKysrKystLS0tCj4gPiAgZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9sdmRzX3JlZ3Mu aCB8ICA0MyArKystCj4gPiAgMiBmaWxlcyBjaGFuZ2VkLCAzNjEgaW5zZXJ0aW9ucygrKSwgNDcg ZGVsZXRpb25zKC0pCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmNhci1k dS9yY2FyX2x2ZHMuYwo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2x2ZHMuYyBp bmRleCBjZTBlYjY4YzM0MTYuLmFhYzRhY2JjZmJmYwo+ID4gMTAwNjQ0Cj4gPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2x2ZHMuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJt L3JjYXItZHUvcmNhcl9sdmRzLmMKCltzbmlwXQoKPiA+ICtzdHJ1Y3QgcGxsX2luZm8gewo+ID4g KwlzdHJ1Y3QgY2xrICpjbGs7Cj4gPiArCXVuc2lnbmVkIGxvbmcgZGlmZjsKPiA+ICsJdW5zaWdu ZWQgaW50IHBsbF9tOwo+ID4gKwl1bnNpZ25lZCBpbnQgcGxsX247Cj4gPiArCXVuc2lnbmVkIGlu dCBwbGxfZTsKPiA+ICsJdW5zaWduZWQgaW50IGRpdjsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRp YyB2b2lkIHJjYXJfbHZkc19kM19lM19wbGxfY2FsYyhzdHJ1Y3QgcmNhcl9sdmRzICpsdmRzLCBz dHJ1Y3QgY2xrCj4gPiAqY2xrLAo+ID4gKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBz dHJ1Y3QgcGxsX2luZm8gKnBsbCkKPiAKPiBEbyB5b3UgdGhpbmsgaXQgaXMgd29ydGggbWVudGlv bmluZyBkM19lMyBpbiB0aGUgZnVuY3Rpb24gbmFtZT8gSSBrbm93Cj4gaXQncyBub3QgYSBiaWcg ZGVhbCwgYnV0IGluIGZ1dHVyZSBnZW5lcmF0aW9uIHRoaXMgUExMIGNpcmN1aXQgbWF5IGJlCj4g cmUtdXNlZC4KCkhvdyB3b3VsZCB5b3UgbmFtZSBpdCA/IE90aGVyIExWRFMgZW5jb2RlciBpbnN0 YW5jZXMgaGF2ZSBhIGRpZmZlcmVudCBQTEwsIGFuZCAKdGhleSBhcmUgbm90IG5hbWVkIGluIHRo ZSBkYXRhc2hlZXQuIEkgcHJvcG9zZSByZW5hbWluZyBpdCBsYXRlciBpZiBuZWVkZWQuCgo+ID4g K3sKPiA+ICsJdW5zaWduZWQgbG9uZyBmaW47Cj4gPiArCXVuc2lnbmVkIGludCBtX21pbjsKPiA+ ICsJdW5zaWduZWQgaW50IG1fbWF4Owo+ID4gKwl1bnNpZ25lZCBpbnQgbTsKPiA+ICsKPiA+ICsJ aWYgKCFjbGspCj4gPiArCQlyZXR1cm47Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIFRoZSBMVkRT IFBMTCBpcyBtYWRlIG9mIGEgcHJlLWRpdmlkZXIgYW5kIGEgbXVsdGlwbGllciAoc3RyYW5nZXJs eQo+ID4gKwkgKiBlbm91Z2ggY2FsbGVkIE0gYW5kIE4gcmVzcGVjdGl2ZWx5KSwgZm9sbG93ZWQg YnkgYSBwb3N0LWRpdmlkZXIgRS4KPiA+ICsJICoKPiA+ICsJICogICAgICAgICAsLS0tLS0uICAg ICAgICAgLC0tLS0tLiAgICAgLC0tLS0tLiAgICAgICAgICwtLS0tLS4KPiA+ICsJICogRmluIC0t PiB8IDEvTSB8IC1GcGRmLT4gfCBQRkQgfCAtLT4gfCBWQ08gfCAtRnZjby0+IHwgMS9FIHwgLS0+ IEZvdXQKPiA+ICsJICogICAgICAgICBgLS0tLS0nICAgICAsLT4gfCAgICAgfCAgICAgYC0tLS0t JyAgIHwgICAgIGAtLS0tLScKPiA+ICsJICogICAgICAgICAgICAgICAgICAgICB8ICAgYC0tLS0t JyAgICAgICAgICAgICAgIHwKPiA+ICsJICogICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAg LC0tLS0tLiAgICAgICAgIHwKPiA+ICsJICogICAgICAgICAgICAgICAgICAgICBgLS0tLS0tLS0g fCAxL04gfCA8LS0tLS0tLScKPiA+ICsJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YC0tLS0tJwo+ID4gKwkgKgo+ID4gKwkgKiBUaGUgY2xvY2sgb3V0cHV0IGJ5IHRoZSBQTEwgaXMg dGhlbiBmdXJ0aGVyIGRpdmlkZWQgYnkgYSAKcHJvZ3JhbW1hYmxlCj4gPiArCSAqIGRpdmlkZXIg RElWIHRvIGFjaGlldmUgdGhlIGRlc2lyZWQgdGFyZ2V0IGZyZXF1ZW5jeS4gRmluYWxseSwgYW4K PiA+ICsJICogb3B0aW9uYWwgZml4ZWQgLzcgZGl2aWRlciBpcyB1c2VkIHRvIGNvbnZlcnQgdGhl IGJpdCBjbG9jayB0byBhIApwaXhlbAo+ID4gKwkgKiBjbG9jayAoYXMgTFZEUyB0cmFuc21pdHMg NyBiaXRzIHBlciBsYW5lIHBlciBjbG9jayBzYW1wbGUpLgo+ID4gKwkgKgo+ID4gKwkgKiAgICAg ICAgICAsLS0tLS0tLS4gICAgICwtLS0tLS4gICAgIHxcCj4gPiArCSAqIEZvdXQgLS0+IHwgMS9E SVYgfCAtLT4gfCAxLzcgfCAtLT4gfCB8Cj4gPiArCSAqICAgICAgICAgIGAtLS0tLS0tJyAgfCAg YC0tLS0tJyAgICAgfCB8IC0tPiBkb3QgY2xvY2sKPiA+ICsJICogICAgICAgICAgICAgICAgICAg ICBgLS0tLS0tLS0tLS0tPiB8IHwKPiA+ICsJICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8Lwo+ID4gKwkgKgo+ID4gKwkgKiBUaGUgLzcgZGl2aWRlciBpcyBvcHRpb25hbCB3 aGVuIHRoZSBMVkRTIFBMTCBpcyB1c2VkIHRvIGdlbmVyYXRlIGEKPiA+ICsJICogZG90IGNsb2Nr IGZvciB0aGUgRFUgUkdCIG91dHB1dCwgd2l0aG91dCB1c2luZyB0aGUgTFZEUyBlbmNvZGVyLiBX ZQo+ID4gKwkgKiBkb24ndCBzdXBwb3J0IHRoaXMgY29uZmlndXJhdGlvbiB5ZXQuCj4gPiArCSAq Cj4gPiArCSAqIFRoZSBQTEwgYWxsb3dlZCBpbnB1dCBmcmVxdWVuY3kgcmFuZ2UgaXMgMTIgTUh6 IHRvIDE5MiBNSHouCj4gPiArCSAqLwo+ID4gKwo+ID4gKwlmaW4gPSBjbGtfZ2V0X3JhdGUoY2xr KTsKPiA+ICsJaWYgKGZpbiA8IDEyMDAwMDAwIHx8IGZpbiA+IDE5MjAwMDAwMCkKPiA+ICsJCXJl dHVybjsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogVGhlIGNvbXBhcmlzb24gZnJlcXVlbmN5IHJh bmdlIGlzIDEyIE1IeiB0byAyNCBNSHosIHdoaWNoIGxpbWl0cyB0aGUKPiA+ICsJICogYWxsb3dl ZCB2YWx1ZXMgZm9yIHRoZSBwcmUtZGl2aWRlciBNIChub3JtYWwgcmFuZ2UgMS04KS4KPiA+ICsJ ICoKPiA+ICsJICogRnBmZCA9IEZpbiAvIE0KPiA+ICsJICovCj4gPiArCW1fbWluID0gbWF4X3Qo dW5zaWduZWQgaW50LCAxLCBESVZfUk9VTkRfVVAoZmluLCAyNDAwMDAwMCkpOwo+ID4gKwltX21h eCA9IG1pbl90KHVuc2lnbmVkIGludCwgOCwgZmluIC8gMTIwMDAwMDApOwo+ID4gKwo+ID4gKwlm b3IgKG0gPSBtX21pbjsgbSA8PSBtX21heDsgKyttKSB7Cj4gPiArCQl1bnNpZ25lZCBsb25nIGZw ZmQ7Cj4gPiArCQl1bnNpZ25lZCBpbnQgbl9taW47Cj4gPiArCQl1bnNpZ25lZCBpbnQgbl9tYXg7 Cj4gPiArCQl1bnNpZ25lZCBpbnQgbjsKPiA+ICsKPiA+ICsJCS8qCj4gPiArCQkgKiBUaGUgVkNP IG9wZXJhdGluZyByYW5nZSBpcyA5MDAgTWh6IHRvIDE4MDAgTUh6LCB3aGljaCBsaW1pdHMKPiA+ ICsJCSAqIHRoZSBhbGxvd2VkIHZhbHVlcyBmb3IgdGhlIG11bHRpcGxpZXIgTiAobm9ybWFsIHJh bmdlCj4gPiArCQkgKiA2MC0xMjApLgo+ID4gKwkJICoKPiA+ICsJCSAqIEZ2Y28gPSBGaW4gKiBO IC8gTQo+ID4gKwkJICovCj4gPiArCQlmcGZkID0gZmluIC8gbTsKPiA+ICsJCW5fbWluID0gbWF4 X3QodW5zaWduZWQgaW50LCA2MCwgRElWX1JPVU5EX1VQKDkwMDAwMDAwMCwgZnBmZCkpOwo+ID4g KwkJbl9tYXggPSBtaW5fdCh1bnNpZ25lZCBpbnQsIDEyMCwgMTgwMDAwMDAwMCAvIGZwZmQpOwo+ ID4gKwo+ID4gKwkJZm9yIChuID0gbl9taW47IG4gPCBuX21heDsgKytuKSB7Cj4gPiArCQkJdW5z aWduZWQgbG9uZyBmdmNvOwo+ID4gKwkJCXVuc2lnbmVkIGludCBlX21pbjsKPiA+ICsJCQl1bnNp Z25lZCBpbnQgZTsKPiA+ICsKPiA+ICsJCQkvKgo+ID4gKwkJCSAqIFRoZSBvdXRwdXQgZnJlcXVl bmN5IGlzIGxpbWl0ZWQgdG8gMTAzOS41IE1IeiwKPiA+ICsJCQkgKiBsaW1pdGluZyBhZ2FpbiB0 aGUgYWxsb3dlZCB2YWx1ZXMgZm9yIHRoZQo+ID4gKwkJCSAqIHBvc3QtZGl2aWRlciBFIChub3Jt YWwgdmFsdWUgMSwgMiBvciA0KS4KPiA+ICsJCQkgKgo+ID4gKwkJCSAqIEZvdXQgPSBGdmNvIC8g RQo+ID4gKwkJCSAqLwo+ID4gKwkJCWZ2Y28gPSBmcGZkICogbjsKPiA+ICsJCQllX21pbiA9IGZ2 Y28gPiAxMDM5NTAwMDAwID8gMSA6IDA7Cj4gPiArCj4gPiArCQkJZm9yIChlID0gZV9taW47IGUg PCAzOyArK2UpIHsKPiA+ICsJCQkJdW5zaWduZWQgbG9uZyBmb3V0Owo+ID4gKwkJCQl1bnNpZ25l ZCBsb25nIGRpZmY7Cj4gPiArCQkJCXVuc2lnbmVkIGludCBkaXY7Cj4gPiArCj4gPiArCQkJCS8q Cj4gPiArCQkJCSAqIEZpbmFsbHkgd2UgaGF2ZSBhIHByb2dyYW1hYmxlIGRpdmlkZXIgYWZ0ZXIK PiA+ICsJCQkJICogdGhlIFBMTCwgZm9sbG93ZWQgYnkgYSBhbiBvcHRpb25hbCBmaXhlZCAvNwo+ ID4gKwkJCQkgKiBkaXZpZGVyLgo+ID4gKwkJCQkgKi8KPiA+ICsJCQkJZm91dCA9IGZ2Y28gLyAo MSA8PCBlKSAvIDc7Cj4gPiArCQkJCWRpdiA9IERJVl9ST1VORF9DTE9TRVNUKGZvdXQsIHRhcmdl dCk7Cj4gPiArCQkJCWRpZmYgPSBhYnMoZm91dCAvIGRpdiAtIHRhcmdldCk7Cj4gPiArCj4gPiAr CQkJCWlmIChkaWZmIDwgcGxsLT5kaWZmKSB7Cj4gPiArCQkJCQlwbGwtPmNsayA9IGNsazsKPiA+ ICsJCQkJCXBsbC0+ZGlmZiA9IGRpZmY7Cj4gPiArCQkJCQlwbGwtPnBsbF9tID0gbTsKPiA+ICsJ CQkJCXBsbC0+cGxsX24gPSBuOwo+ID4gKwkJCQkJcGxsLT5wbGxfZSA9IGU7Cj4gPiArCQkJCQlw bGwtPmRpdiA9IGRpdjsKPiA+ICsKPiA+ICsJCQkJCWlmIChkaWZmID09IDApCj4gPiArCQkJCQkJ Z290byBkb25lOwo+ID4gKwkJCQl9Cj4gPiArCQkJfQo+ID4gKwkJfQo+ID4gKwl9Cj4gCj4gVmVy eSBuaWNlIDopCgpUaGFua3MgOi0pCgo+ID4gKwo+ID4gK2RvbmU6Cj4gPiArI2lmIGRlZmluZWQo Q09ORklHX0RFQlVHKSB8fCBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0RFQlVHKQo+ID4gKwl7Cj4g PiArCQl1bnNpZ25lZCBsb25nIG91dHB1dCA9IGZpbiAqIHBsbC0+cGxsX24gLyBwbGwtPnBsbF9t Cj4gPiArCQkJCSAgICAgLyAoMSA8PCBwbGwtPnBsbF9lKSAvIDcgLyBwbGwtPmRpdjsKPiA+ICsJ CWludCBlcnJvciA9IChsb25nKShvdXRwdXQgLSB0YXJnZXQpICogMTAwMDAgLyAobG9uZyl0YXJn ZXQ7Cj4gPiArCj4gPiArCQlkZXZfZGJnKGx2ZHMtPmRldiwKPiA+ICsJCQkiJXBDICVsdSBIeiAt PiBGb3V0ICVsdSBIeiAodGFyZ2V0ICVsdSBIeiwgZXJyb3IgJWQuJTAydSUlKSwgUExMCj4gPiBN L04vRS9ESVYgJXUvJXUvJXUvJXVcbiIsICsJCQljbGssIGZpbiwgb3V0cHV0LCB0YXJnZXQsIGVy cm9yIC8gMTAwLAo+ID4gKwkJCWVycm9yIDwgMCA/IC1lcnJvciAlIDEwMCA6IGVycm9yICUgMTAw LAo+ID4gKwkJCXBsbC0+cGxsX20sIHBsbC0+cGxsX24sIHBsbC0+cGxsX2UsIHBsbC0+ZGl2KTsK PiA+ICsJfQo+ID4gKyNlbmRpZgo+IAo+IEkga25vdyB5b3Uga25vdyBhYm91dCB0aGlzIGFscmVh ZHksIGJ1dAo+IAo+IC4uL2RyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfbHZkcy5jOjI5ODox OiBlcnJvcjogbGFiZWwgYXQgZW5kIG9mCj4gY29tcG91bmQgc3RhdGVtZW50Cj4gCj4gSSdtIHN0 aWxsIG5vdCBzdXJlIHdoYXQgYWN0dWFsbHkgZGlzdHVyYnMgZ2NjIGhlcmUKCk5laXRoZXIgZG8g SSwgYnV0IEkndmUgZml4ZWQgaXQgYW55d2F5LgoKPiA+ICB9Cj4gPiAKPiA+IC1zdGF0aWMgdTMy IHJjYXJfbHZkc19sdmRwbGxjcl9nZW4zKHVuc2lnbmVkIGludCBmcmVxKQo+ID4gK3N0YXRpYyB2 b2lkIHJjYXJfbHZkc19wbGxfc2V0dXBfZDNfZTMoc3RydWN0IHJjYXJfbHZkcyAqbHZkcywgdW5z aWduZWQKPiA+IGludCBmcmVxKT4gCj4gPiAgewo+ID4gCj4gPiAtCWlmIChmcmVxIDwgNDIwMDAp Cj4gPiAtCQlyZXR1cm4gTFZEUExMQ1JfUExMRElWQ05UXzQyTTsKPiA+IC0JZWxzZSBpZiAoZnJl cSA8IDg1MDAwKQo+ID4gLQkJcmV0dXJuIExWRFBMTENSX1BMTERJVkNOVF84NU07Cj4gPiAtCWVs c2UgaWYgKGZyZXEgPCAxMjgwMDApCj4gPiAtCQlyZXR1cm4gTFZEUExMQ1JfUExMRElWQ05UXzEy OE07Cj4gPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGx2ZHMtPmJyaWRnZS5lbmNvZGVyLT5j cnRjOwo+ID4gKwlzdHJ1Y3QgcGxsX2luZm8gcGxsID0geyAuZGlmZiA9ICh1bnNpZ25lZCBsb25n KS0xIH07Cj4gPiArCXUzMiBsdmRwbGxjcjsKPiA+ICsKPiA+ICsJaWYgKGx2ZHMtPmNsb2Nrcy5k b3RjbGtpblswXSB8fCBsdmRzLT5jbG9ja3MuZG90Y2xraW5bMV0pIHsKPiA+ICsJCXJjYXJfbHZk c19kM19lM19wbGxfY2FsYyhsdmRzLCBsdmRzLT5jbG9ja3MuZG90Y2xraW5bMF0sCj4gPiArCQkJ CQkgZnJlcSwgJnBsbCk7Cj4gPiArCQlyY2FyX2x2ZHNfZDNfZTNfcGxsX2NhbGMobHZkcywgbHZk cy0+Y2xvY2tzLmRvdGNsa2luWzFdLAo+ID4gKwkJCQkJIGZyZXEsICZwbGwpOwo+ID4gKwl9IGVs c2UgaWYgKGx2ZHMtPmNsb2Nrcy5leHRhbCkgewo+ID4gKwkJcmNhcl9sdmRzX2QzX2UzX3BsbF9j YWxjKGx2ZHMsIGx2ZHMtPmNsb2Nrcy5leHRhbCwKPiA+ICsJCQkJCSBmcmVxLCAmcGxsKTsKPiA+ ICsJfQo+IAo+IGhlcmUgaXQncyBlaXRoZXIgKChkb3RjbGtpblswXSBvciBkb3RjbG9ja1sxXSkg b3IgZXh0YWwpLiBBcmUgdGhleQo+IG11dHVhbGx5IGV4Y2x1c2l2ZT8gQ2FuJ3Qgd2UgdHJ5IGFs bCBvZiB0aGVtPyBUaGUgcHJvYmUgcm91dGluZQo+IGd1YXJhbnRlZXMgd2UgaGF2ZSBhdCBsZWFz dCBvZiBvZiB0aGVtLi4uCgpJIHRoaW5rIHlvdSdyZSByaWdodCwgSSBjYW4ndCByZW1lbWJlciB3 aHkgSSBkaWQgaXQgdGhpcyB3YXkuIEknbGwgdXBkYXRlIHRoZSAKY29kZSB0byB0cnkgdGhlIHRo cmVlIGNsb2Nrcy4KCj4gPiArCj4gPiArCWx2ZHBsbGNyID0gTFZEUExMQ1JfUExMT04gfCBMVkRQ TExDUl9DTEtPVVQKPiA+ICsJCSB8IExWRFBMTENSX1BMTE4ocGxsLnBsbF9uIC0gMSkgfCBMVkRQ TExDUl9QTExNKHBsbC5wbGxfbSAtIDEpOwo+ID4gKwo+ID4gKwlpZiAocGxsLmNsayA9PSBsdmRz LT5jbG9ja3MuZXh0YWwpCj4gPiArCQlsdmRwbGxjciB8PSBMVkRQTExDUl9DS1NFTF9FWFRBTDsK PiA+ICsJZWxzZQo+ID4gKwkJbHZkcGxsY3IgfD0gTFZEUExMQ1JfQ0tTRUxfRFVfRE9UQ0xLSU4o ZHJtX2NydGNfaW5kZXgoY3J0YykpOwo+IAo+IEhlcmUgeW91IHNlbGVjdCBkdV9jbGtpblswXSBv ciBkdV9jbGtpblsxXSBiYXNlZCBvbiB0aGUgRFUgaW5kZXggKGJ0dywKPiB0aGUgZHJtX2NydGNf aW5kZXgoKSBmdW5jdGlvbiBpcyBmdW5ueSwgaXQgc2ltcGx5ICJjcnRjLT5pbmRleCIgbm8KPiBj aGVja3MsIG5vIHZhbGlkYXRpb24sIHdoYXQncyB0aGUgYmVuZWZpdCBvZiB1c2luZyBpdD8pLgoK U2VlCgpjb21taXQgNDkwZDNkMWI5MTIwMWZkM2QzZDAxZDY0ZTExZGY0ZWFjMWQ5MmJkNApBdXRo b3I6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpEYXRlOiAgIEZyaSBN YXkgMjcgMjA6MDU6MDAgMjAxNiArMDEwMAoKICAgIGRybTogU3RvcmUgdGhlIHBsYW5lJ3MgaW5k ZXgKCj4gTG9va2luZyBhdCB0aGUgTFZEUyBQTEwgYmxvY2sgZGlhZ3JhbSBmb3IgRDMvRTMgKEZp Z3VyZSAzNy4zKSBJIHNlZQo+IHRoYXQgYm90aCBjbGtpblswXSBhbmQgY2xraW5bMV0gY291bGQg YmUgdXNlZCBpbmRlcGVuZGVudGx5IGZyb20gdGhlIGR1Cj4gaW5kZXguIFNob3VsZG4ndCB3ZSB1 c2UgdGhlIG9uZSBwZXJmb3JtaW5nIGJldHRlcj8gKG5vdyBob3cgdG8gbWFrZQo+IHN1cmUgaXQg Z2V0cyBub3Qgc2VsZWN0ZWQgdHdpY2UgaW4gY2FzZSBvZiBib3RoIERVMCBhbmQgRFUxIHVzaW5n IHRoZQo+IExWRFMgUExMIGl0J3MgYW5vdGhlciBwcm9ibGVtKQoKWW91J3JlIHJpZ2h0IGFnYWlu LCBJJ2xsIGZpeCB0aGF0LgoKPiA+ICsKPiA+ICsJaWYgKHBsbC5wbGxfZSA+IDApCj4gPiArCQls dmRwbGxjciB8PSBMVkRQTExDUl9TVFBfQ0xLT1VURSB8IExWRFBMTENSX09VVENMS1NFTAo+ID4g KwkJCSB8ICBMVkRQTExDUl9QTExFKHBsbC5wbGxfZSAtIDEpOwo+ID4gKwo+ID4gKwlyY2FyX2x2 ZHNfd3JpdGUobHZkcywgTFZEUExMQ1IsIGx2ZHBsbGNyKTsKPiA+ICsKPiA+ICsJaWYgKHBsbC5k aXYgPiAxKQo+ID4gKwkJcmNhcl9sdmRzX3dyaXRlKGx2ZHMsIExWRERJViwgTFZERElWX0RJVlNF TCB8Cj4gPiArCQkJCUxWRERJVl9ESVZSRVNFVCB8IExWRERJVl9ESVYocGxsLmRpdiAtIDEpKTsK PiA+ICAJZWxzZQo+ID4gLQkJcmV0dXJuIExWRFBMTENSX1BMTERJVkNOVF8xNDhNOwo+ID4gKwkJ cmNhcl9sdmRzX3dyaXRlKGx2ZHMsIExWRERJViwgMCk7Cj4gPiAgfQoKW3NuaXBdCgo+ID4gK3N0 YXRpYyBzdHJ1Y3QgY2xrICpyY2FyX2x2ZHNfZ2V0X2Nsb2NrKHN0cnVjdCByY2FyX2x2ZHMgKmx2 ZHMsIGNvbnN0IGNoYXIKPiA+ICpuYW1lLAo+ID4gKwkJCQkgICAgICAgYm9vbCBvcHRpb25hbCkK PiA+ICt7Cj4gPiArCXN0cnVjdCBjbGsgKmNsazsKPiA+ICsKPiA+ICsJY2xrID0gZGV2bV9jbGtf Z2V0KGx2ZHMtPmRldiwgbmFtZSk7Cj4gCj4gSSB3aXNoIHdlIGhhZCBjbGtfZ2V0X29wdGlvbmFs KCkgYXMgd2UgaGF2ZSBncGlvZF9nZXRfb3B0aW9uYWwoKS4KPiBUaGVyZSBhcmUgcHJvYmFibHkg Z29vZCByZWFzb25zIGlmIGl0J3Mgbm90IHRoZXJlIHRob3VnaC4uLgoKSSBkb24ndCBrbm93LCBn aXZlbiB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcHJldHR5IG11Y2ggYSBjbGtfZ2V0X29wdGlvbmFs KCksIGl0IAp3b3VsZCBzZWVtIHVzZWZ1bCB0byBtZS4gRmVlbCBmcmVlIHRvIHByb3Bvc2UgaXQg Oi0pCgo+ID4gKwlpZiAoIUlTX0VSUihjbGspKQo+ID4gKwkJcmV0dXJuIGNsazsKPiA+ICsKPiA+ ICsJaWYgKFBUUl9FUlIoY2xrKSA9PSAtRU5PRU5UICYmIG9wdGlvbmFsKQo+ID4gKwkJcmV0dXJu IE5VTEw7Cj4gPiArCj4gPiArCWlmIChQVFJfRVJSKGNsaykgIT0gLUVQUk9CRV9ERUZFUikKPiA+ ICsJCWRldl9lcnIobHZkcy0+ZGV2LCAiZmFpbGVkIHRvIGdldCAlcyBjbG9ja1xuIiwKPiA+ICsJ CQluYW1lID8gbmFtZSA6ICJtb2R1bGUiKTsKPiA+ICsKPiA+ICsJcmV0dXJuIGNsazsKPiA+ICt9 Cgpbc25pcF0KCi0tIApSZWdhcmRzLAoKTGF1cmVudCBQaW5jaGFydAoKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0 CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK