From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [RFC] drm/atomic+msm: add helper to implement legacy dirtyfb Date: Wed, 4 Apr 2018 14:28:13 +0200 Message-ID: References: <20180403224225.26776-1-robdclark@gmail.com> <20180404100300.GE3881@phenom.ffwll.local> <20180404102108.GF3881@phenom.ffwll.local> <4976c166-32b2-75ef-ee78-7e7893dd4121@linux.intel.com> <4386c0a5-e8e4-34d7-a977-4136e1dec44f@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Daniel Vetter , Rob Clark Cc: David Airlie , linux-arm-msm , Linux Kernel Mailing List , dri-devel , Deepak Singh Rawat , freedreno , Lukasz Spintzyk List-Id: linux-arm-msm@vger.kernel.org T3AgMDQtMDQtMTggb20gMTQ6MjYgc2NocmVlZiBEYW5pZWwgVmV0dGVyOgo+IE9uIFdlZCwgQXBy IDQsIDIwMTggYXQgMjowNSBQTSwgUm9iIENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPiB3cm90 ZToKPj4gT24gV2VkLCBBcHIgNCwgMjAxOCBhdCA3OjQ5IEFNLCBNYWFydGVuIExhbmtob3JzdAo+ PiA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPiB3cm90ZToKPj4+IE9wIDA0LTA0 LTE4IG9tIDEzOjM3IHNjaHJlZWYgUm9iIENsYXJrOgo+Pj4+IE9uIFdlZCwgQXByIDQsIDIwMTgg YXQgNjozNiBBTSwgTWFhcnRlbiBMYW5raG9yc3QKPj4+PiA8bWFhcnRlbi5sYW5raG9yc3RAbGlu dXguaW50ZWwuY29tPiB3cm90ZToKPj4+Pj4gT3AgMDQtMDQtMTggb20gMTI6MjEgc2NocmVlZiBE YW5pZWwgVmV0dGVyOgo+Pj4+Pj4gT24gV2VkLCBBcHIgMDQsIDIwMTggYXQgMTI6MDM6MDBQTSAr MDIwMCwgRGFuaWVsIFZldHRlciB3cm90ZToKPj4+Pj4+PiBPbiBUdWUsIEFwciAwMywgMjAxOCBh dCAwNjo0MjoyM1BNIC0wNDAwLCBSb2IgQ2xhcmsgd3JvdGU6Cj4+Pj4+Pj4+IEFkZCBhbiBhdG9t aWMgaGVscGVyIHRvIGltcGxlbWVudCBkaXJ0eWZiIHN1cHBvcnQuICBUaGlzIGlzIG5lZWRlZCB0 bwo+Pj4+Pj4+PiBzdXBwb3J0IERTSSBjb21tYW5kLW1vZGUgcGFuZWxzIHdpdGggeDExIHVzZXJz cGFjZSAoaWUuIHdoZW4gd2UgY2FuJ3QKPj4+Pj4+Pj4gcmVseSBvbiBwYWdlZmxpcHMgdG8gdHJp Z2dlciBhIGZsdXNoIHRvIHRoZSBwYW5lbCkuCj4+Pj4+Pj4+Cj4+Pj4+Pj4+IFRvIHNpZ25hbCB0 byB0aGUgZHJpdmVyIHRoYXQgdGhlIGFzeW5jIGF0b21pYyB1cGRhdGUgbmVlZHMgdG8KPj4+Pj4+ Pj4gc3luY2hyb25pemUgd2l0aCBmZW5jZXMsIGV2ZW4gdGhvdWdoIHRoZSBmYiBkaWRuJ3QgY2hh bmdlLCB0aGUKPj4+Pj4+Pj4gZHJtX2F0b21pY19zdGF0ZTo6ZGlydHkgZmxhZyBpcyBhZGRlZC4K Pj4+Pj4+Pj4KPj4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogUm9iIENsYXJrIDxyb2JkY2xhcmtAZ21h aWwuY29tPgo+Pj4+Pj4+PiAtLS0KPj4+Pj4+Pj4gQmFja2dyb3VuZDogdGhlcmUgYXJlIGEgbnVt YmVyIG9mIGRpZmZlcmVudCBmb2xrcyB3b3JraW5nIG9uIGdldHRpbmcKPj4+Pj4+Pj4gdXBzdHJl YW0ga2VybmVsIHdvcmtpbmcgb24gdmFyaW91cyBkaWZmZXJlbnQgcGhvbmVzL3RhYmxldHMgd2l0 aCBxY29tCj4+Pj4+Pj4+IFNvQydzLi4gbWFueSBvZiB0aGVtIGhhdmUgY29tbWFuZCBtb2RlIHBh bmVscywgc28gd2Uga2luZCBvZiBuZWVkIGEKPj4+Pj4+Pj4gd2F5IHRvIHN1cHBvcnQgdGhlIGxl Z2FjeSBkaXJ0eWZiIGlvY3RsIGZvciB4MTEgc3VwcG9ydC4KPj4+Pj4+Pj4KPj4+Pj4+Pj4gSSBr bm93IHRoZXJlIGlzIHdvcmsgb24gYSBwcm9wcmVyIG5vbi1sZWdhY3kgYXRvbWljIHByb3BlcnR5 IGZvcgo+Pj4+Pj4+PiB1c2Vyc3BhY2UgdG8gY29tbXVuaWNhdGUgZGlydHktcmVjdChzKSB0byB0 aGUga2VybmVsLCBzbyB0aGlzIGNhbgo+Pj4+Pj4+PiBiZSBpbXByb3ZlZCBmcm9tIHRyaWdnZXJp bmcgYSBmdWxsLWZyYW1lIGZsdXNoIG9uY2UgdGhhdCBpcyBpbgo+Pj4+Pj4+PiBwbGFjZS4gIEJ1 dCB3ZSBraW5kYSBuZWVkYSBhIHN0b3AtZ2FwIHNvbHV0aW9uLgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBJ IGhhZCBjb25zaWRlcmVkIGFuIGluLWRyaXZlciBzb2x1dGlvbiBmb3IgdGhpcywgYnV0IHRoaW5n cyBnZXQgYQo+Pj4+Pj4+PiBiaXQgdHJpY2t5IGlmIHVzZXJzcGFjZSBhbmRzIHVwIGNvbWJpbmlu ZyBkaXJ0eWZiIGlvY3RscyB3aXRoIHBhZ2UtCj4+Pj4+Pj4+IGZsaXBzLCBiZWNhdXNlIHdlIG5l ZWQgdG8gc3luY2hyb25pemUgc2V0dGluZyB2YXJpb3VzIENUTC5GTFVTSCBiaXRzCj4+Pj4+Pj4+ IHdpdGggc2V0dGluZyB0aGUgQ1RMLlNUQVJUIGJpdC4gIChpZS4gcmVhbGx5IGFsbCB3ZSBuZWVk IHRvIGRvIGZvcgo+Pj4+Pj4+PiBjbWQgbW9kZSBwYW5lbHMgaXMgYmFuZyBDVEwuU1RBUlQsIGJ1 dCBpcyB0aGlzIGVuZHMgdXAgcmFjaW5nIHdpdGgKPj4+Pj4+Pj4gcGFnZWZsaXBzIHNldHRpbmcg RkxVU0ggYml0cywgdGhlbiBiYWQgdGhpbmdzLikgIFRoZSBlYXNpZXN0IHNvbG4KPj4+Pj4+Pj4g aXMgdG8gd3JhcCB0aGlzIHVwIGFzIGFuIGF0b21pYyBjb21taXQgYW5kIHJlbHkgb24gdGhlIHdv cmtlciB0bwo+Pj4+Pj4+PiBzZXJpYWxpemUgdGhpbmdzLiAgSGVuY2UgYWRkaW5nIGFuIGF0b21p YyBkaXJ0eWZiIGhlbHBlci4KPj4+Pj4+Pj4KPj4+Pj4+Pj4gSSBndWVzcyBhdCBsZWFzdCB0aGUg aGVscGVyLCB3aXRoIHNvbWUgc21hbGwgYWRkaXRpb24gdG8gdHJhbnNsYXRlCj4+Pj4+Pj4+IGFu ZCBwYXNzLXRocnUgdGhlIGRpcnR5IHJlY3QocykgaXMgdXNlZnVsIHRvIHRoZSBmaW5hbCBhdG9t aWMgZGlydHktCj4+Pj4+Pj4+IHJlY3QgcHJvcGVydHkgc29sdXRpb24uICBEZXBlbmRpbmcgb24g aG93IGZhciBvZmYgdGhhdCBpcywgYSBzdG9wLQo+Pj4+Pj4+PiBnYXAgc29sdXRpb24gY291bGQg YmUgdXNlZnVsLgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiAgZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNf aGVscGVyLmMgfCA2NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+Pj4+ Pj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9hdG9taWMuYyAgICB8ICA1ICsrLQo+Pj4+Pj4+ PiAgZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZmIuYyAgICAgICAgfCAgMSArCj4+Pj4+Pj4+ICBp bmNsdWRlL2RybS9kcm1fYXRvbWljX2hlbHBlci5oICAgICB8ICA0ICsrKwo+Pj4+Pj4+PiAgaW5j bHVkZS9kcm0vZHJtX3BsYW5lLmggICAgICAgICAgICAgfCAgOSArKysrKwo+Pj4+Pj4+PiAgNSBm aWxlcyBjaGFuZ2VkLCA4NCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4+Pj4+Pj4+Cj4+ Pj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYyBi L2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jCj4+Pj4+Pj4+IGluZGV4IGMzNTY1 NDU5MWMxMi4uYTU3OGRjNjgxYjI3IDEwMDY0NAo+Pj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vZHJtX2F0b21pY19oZWxwZXIuYwo+Pj4+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJt X2F0b21pY19oZWxwZXIuYwo+Pj4+Pj4+PiBAQCAtMzUwNCw2ICszNTA0LDcgQEAgdm9pZCBfX2Ry bV9hdG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKPj4+Pj4+Pj4gICAgIGlmIChzdGF0ZS0+ZmIpCj4+Pj4+Pj4+ICAgICAgICAgICAgIGRy bV9mcmFtZWJ1ZmZlcl9nZXQoc3RhdGUtPmZiKTsKPj4+Pj4+Pj4KPj4+Pj4+Pj4gKyAgIHN0YXRl LT5kaXJ0eSA9IGZhbHNlOwo+Pj4+Pj4+PiAgICAgc3RhdGUtPmZlbmNlID0gTlVMTDsKPj4+Pj4+ Pj4gICAgIHN0YXRlLT5jb21taXQgPSBOVUxMOwo+Pj4+Pj4+PiAgfQo+Pj4+Pj4+PiBAQCAtMzg0 Nyw2ICszODQ4LDcxIEBAIGludCBkcm1fYXRvbWljX2hlbHBlcl9sZWdhY3lfZ2FtbWFfc2V0KHN0 cnVjdCBkcm1fY3J0YyAqY3J0YywKPj4+Pj4+Pj4gIH0KPj4+Pj4+Pj4gIEVYUE9SVF9TWU1CT0wo ZHJtX2F0b21pY19oZWxwZXJfbGVnYWN5X2dhbW1hX3NldCk7Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+ICsv KioKPj4+Pj4+Pj4gKyAqIGRybV9hdG9taWNfaGVscGVyX2RpcnR5ZmIgLSBoZWxwZXIgZm9yIGRp cnR5ZmIKPj4+Pj4+Pj4gKyAqCj4+Pj4+Pj4+ICsgKiBBIGhlbHBlciB0byBpbXBsZW1lbnQgZHJt X2ZyYW1lYnVmZmVyX2Z1bmNzOjpkaXJ0eQo+Pj4+Pj4+PiArICovCj4+Pj4+Pj4+ICtpbnQgZHJt X2F0b21pY19oZWxwZXJfZGlydHlmYihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPj4+Pj4+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwg dW5zaWduZWQgZmxhZ3MsCj4+Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgY29sb3IsIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywKPj4+Pj4+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1fY2xpcHMpCj4+Pj4+Pj4+ICt7Cj4+Pj4+Pj4+ ICsgICBzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggY3R4Owo+Pj4+Pj4+PiArICAgc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOwo+Pj4+Pj4+PiArICAgc3RydWN0IGRybV9wbGFu ZSAqcGxhbmU7Cj4+Pj4+Pj4+ICsgICBpbnQgcmV0ID0gMDsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiAr ICAgLyoKPj4+Pj4+Pj4gKyAgICAqIFdoZW4gY2FsbGVkIGZyb20gaW9jdGwsIHdlIGFyZSBpbnRl cnJ1cHRhYmxlLCBidXQgbm90IHdoZW4KPj4+Pj4+Pj4gKyAgICAqIGNhbGxlZCBpbnRlcm5hbGx5 IChpZS4gZGVmaW8gd29ya2VyKQo+Pj4+Pj4+PiArICAgICovCj4+Pj4+Pj4+ICsgICBkcm1fbW9k ZXNldF9hY3F1aXJlX2luaXQoJmN0eCwKPj4+Pj4+Pj4gKyAgICAgICAgICAgZmlsZV9wcml2ID8g RFJNX01PREVTRVRfQUNRVUlSRV9JTlRFUlJVUFRJQkxFIDogMCk7Cj4+Pj4+Pj4+ICsKPj4+Pj4+ Pj4gKyAgIHN0YXRlID0gZHJtX2F0b21pY19zdGF0ZV9hbGxvYyhmYi0+ZGV2KTsKPj4+Pj4+Pj4g KyAgIGlmICghc3RhdGUpIHsKPj4+Pj4+Pj4gKyAgICAgICAgICAgcmV0ID0gLUVOT01FTTsKPj4+ Pj4+Pj4gKyAgICAgICAgICAgZ290byBvdXQ7Cj4+Pj4+Pj4+ICsgICB9Cj4+Pj4+Pj4+ICsgICBz dGF0ZS0+YWNxdWlyZV9jdHggPSAmY3R4Owo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICtyZXRyeToKPj4+ Pj4+Pj4gKyAgIGRybV9mb3JfZWFjaF9wbGFuZShwbGFuZSwgZmItPmRldikgewo+Pj4+Pj4+PiAr ICAgICAgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKPj4+Pj4+Pj4g Kwo+Pj4+Pj4+PiArICAgICAgICAgICBpZiAocGxhbmUtPnN0YXRlLT5mYiAhPSBmYikKPj4+Pj4+ Pj4gKyAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArICAg ICAgICAgICBwbGFuZV9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X3BsYW5lX3N0YXRlKHN0YXRlLCBw bGFuZSk7Cj4+Pj4+Pj4+ICsgICAgICAgICAgIGlmIChJU19FUlIocGxhbmVfc3RhdGUpKSB7Cj4+ Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgcmV0ID0gUFRSX0VSUihwbGFuZV9zdGF0ZSk7Cj4+ Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4+Pj4+Pj4+ICsgICAgICAgICAg IH0KPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArICAgICAgICAgICBwbGFuZV9zdGF0ZS0+ZGlydHkgPSB0 cnVlOwo+Pj4+Pj4+PiArICAgfQo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICsgICByZXQgPSBkcm1fYXRv bWljX25vbmJsb2NraW5nX2NvbW1pdChzdGF0ZSk7Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gK291dDoK Pj4+Pj4+Pj4gKyAgIGlmIChyZXQgPT0gLUVERUFETEspIHsKPj4+Pj4+Pj4gKyAgICAgICAgICAg ZHJtX2F0b21pY19zdGF0ZV9jbGVhcihzdGF0ZSk7Cj4+Pj4+Pj4+ICsgICAgICAgICAgIHJldCA9 IGRybV9tb2Rlc2V0X2JhY2tvZmYoJmN0eCk7Cj4+Pj4+Pj4+ICsgICAgICAgICAgIGlmICghcmV0 KQo+Pj4+Pj4+PiArICAgICAgICAgICAgICAgICAgIGdvdG8gcmV0cnk7Cj4+Pj4+Pj4+ICsgICB9 Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gKyAgIGRybV9hdG9taWNfc3RhdGVfcHV0KHN0YXRlKTsKPj4+ Pj4+Pj4gKwo+Pj4+Pj4+PiArICAgZHJtX21vZGVzZXRfZHJvcF9sb2NrcygmY3R4KTsKPj4+Pj4+ Pj4gKyAgIGRybV9tb2Rlc2V0X2FjcXVpcmVfZmluaSgmY3R4KTsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+ PiArICAgcmV0dXJuIHJldDsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArfQo+Pj4+Pj4+PiArRVhQT1JU X1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9kaXJ0eWZiKTsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiAg LyoqCj4+Pj4+Pj4+ICAgKiBfX2RybV9hdG9taWNfaGVscGVyX3ByaXZhdGVfZHVwbGljYXRlX3N0 YXRlIC0gY29weSBhdG9taWMgcHJpdmF0ZSBzdGF0ZQo+Pj4+Pj4+PiAgICogQG9iajogQ1JUQyBv YmplY3QKPj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2F0b21p Yy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fYXRvbWljLmMKPj4+Pj4+Pj4gaW5kZXggYmY1 ZjhjMzlmMzRkLi5iYjU1YTA0OGU5OGIgMTAwNjQ0Cj4+Pj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vbXNtX2F0b21pYy5jCj4+Pj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v bXNtX2F0b21pYy5jCj4+Pj4+Pj4+IEBAIC0yMDEsNyArMjAxLDEwIEBAIGludCBtc21fYXRvbWlj X2NvbW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+Pj4+Pj4+PiAgICAgICogRmlndXJlIG91 dCB3aGF0IGZlbmNlIHRvIHdhaXQgZm9yOgo+Pj4+Pj4+PiAgICAgICovCj4+Pj4+Pj4+ICAgICBm b3JfZWFjaF9vbGRuZXdfcGxhbmVfaW5fc3RhdGUoc3RhdGUsIHBsYW5lLCBvbGRfcGxhbmVfc3Rh dGUsIG5ld19wbGFuZV9zdGF0ZSwgaSkgewo+Pj4+Pj4+PiAtICAgICAgICAgICBpZiAoKG5ld19w bGFuZV9zdGF0ZS0+ZmIgIT0gb2xkX3BsYW5lX3N0YXRlLT5mYikgJiYgbmV3X3BsYW5lX3N0YXRl LT5mYikgewo+Pj4+Pj4+PiArICAgICAgICAgICBib29sIHN5bmNfZmIgPSBuZXdfcGxhbmVfc3Rh dGUtPmZiICYmCj4+Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgKChuZXdfcGxhbmVfc3RhdGUt PmZiICE9IG9sZF9wbGFuZV9zdGF0ZS0+ZmIpIHx8Cj4+Pj4+Pj4+ICsgICAgICAgICAgICAgICAg ICAgIG5ld19wbGFuZV9zdGF0ZS0+ZGlydHkpOwo+Pj4+Pj4+IFdoeSBkbyB5b3UgaGF2ZSB0aGlz IG9wdGltaXphdGlvbiBldmVuIGhlcmU/IEltbyBmbGlwcGluZyB0byB0aGUgc2FtZSBmYgo+Pj4+ Pj4+IHNob3VsZCByZXN1bHQgaW4gdGhlIGZiIGdldHRpbmcgZnVsbHkgdXBsb2FkZWQsIHdoZXRo ZXIgeW91J3JlIGRvaW5nIGEKPj4+Pj4+PiBsZWdhY3kgcGFnZV9mbGlwLCBhbmQgYXRvbWljIG9u ZSBvciBqdXN0IGEgcGxhbmUgdXBkYXRlLgo+Pj4+Pj4+Cj4+Pj4+Pj4gSWlyYyBzb21lIHVzZXJz cGFjZSBkb2VzIHVzZSB0aGF0IGFzIGVzc2VudGlhbGx5IGEgZnVsbC1wbGFuZSBmcm9udGJ1ZmZl cgo+Pj4+Pj4+IHJlbmRlcmluZyBmbHVzaCBhbHJlYWR5LiBJT1cgSSBkb24ndCB0aGluayB3ZSBu ZWVkIHlvdXIKPj4+Pj4+PiBwbGFuZV9zdGF0ZS0+ZGlydHksIGl0J3MgaW1wbGllZCB0byBhbHdh eXMgYmUgdHJ1ZSAtIHdoeSB3b3VsZCB1c2Vyc3BhY2UKPj4+Pj4+PiBkbyBhIGZsaXAgb3RoZXJ3 aXNlPwo+Pj4+Pj4+Cj4+Pj4+Pj4gVGhlIGhlbHBlciBpdHNlbGYgdG8gbWFwIGRpcnR5ZmIgdG8g YSBub25ibG9ja2luZyBhdG9taWMgY29tbWl0IGxvb2tzCj4+Pj4+Pj4gcmVhc29uYWJsZSwgYnV0 IG1pc3NlcyBhIGJ1bmNoIG9mIHRoZSB0cmlja2VyeSBkaXNjdXNzZWQgd2l0aCBOb3JhbGYgYW5k Cj4+Pj4+Pj4gb3RoZXJzIEkgdGhpbmsuCj4+Pj4+PiBPaywgSSd2ZSBkb25lIHNvbWUgaGlzdG9y eSBkaWdnaW5nOgo+Pj4+Pj4KPj4+Pj4+IC0gaTkxNSBhbmQgbm91dmVhdSB1bmNvbmRpdGlvbmFs bHkgd2FpdCBmb3IgZmVuY2VzLCBldmVuIGZvciBzYW1lLWZiCj4+Pj4+PiAgIGZsaXBzLgo+Pj4+ Pj4gLSBubyBpZGVhIHdoYXQgYW1kZ3B1IGFuZCB2bXdnZnggYXJlIGRvaW5nLCB0aGV5J3JlIG5v dCB1c2luZwo+Pj4+Pj4gICBwbGFuZV9zdGF0ZS0+ZmVuY2UgZm9yIGltcGxpY2l0IGZlbmNlcy4K Pj4+Pj4gSSB0aG91Z2h0IHBsYW5lX3N0YXRlLT5mZW5jZSB3YXMgdXNlZCBmb3IgZXhwbGljaXQg ZmVuY2VzLCBzbyBpdHMgdXNlIGJ5IGRyaXZlcnMKPj4+Pj4gd291bGQgaW50ZXJmZXJlIHdpdGgg aXQ/IEkgZG9uJ3QgdGhpbmsgZmVuY2luZyB3b3VsZCB3b3JrIG9uIG1zbSBvciB2YzQuLgo+Pj4+ IGZvciBpbXBsaWNpdCBmZW5jaW5nIHdlIGZpc2ggb3V0IHRoZSBpbXBsaWNpdCBmZW5jZSBhbmQg c3R1ZmYgaXQgaW4KPj4+PiBwbGFuZV9zdGF0ZS0+ZmVuY2UuLgo+Pj4gV2hhdCBoYXBwZW5zIHdo ZW4gdXNlcnNwYWNlIHBhc3NlcyBhIGZlbmNlIGZkIHRvIGluX2ZlbmNlX2ZkPwo+PiBtaXhpbmcg aW1wbGljaXQgc3luYyBhbmQgZXhwbGljaXQgc3luYyBpcyB1bmRlZmluZWQKPiBJdCdzIHZlcnkg d2VsbC1kZWZpbmVkLCBleHBsaWNpdCBzeW5jIHdpbnMuIFNlZSB0aGUga2VybmVsZG9jIGZvcgo+ IGRybV9hdG9taWNfc2V0X2ZlbmNlX2Zvcl9wbGFuZS4gU2luY2UgYSBwaWxlIG9mIGRyaXZlcnMg ZG9uJ3QgdXNlIHRoYXQKPiB0aGUgcmVhbGl0eSBtaWdodCBiZSB1bmRlZmluZWQgdGhvdWdoIDot KQpBaCByaWdodCwgbWlzc2VkIHRoYXQgcGFydC4KCn5NYWFydGVuCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJl ZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=