From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [RFC PATCH 1/5] drm/i915: Always wait for flip_done Date: Thu, 31 Aug 2017 17:18:06 +0200 Message-ID: References: <20170830121752.31291-1-maarten.lankhorst@linux.intel.com> <20170830121752.31291-2-maarten.lankhorst@linux.intel.com> <20170830124348.ksdfgdm73wttlcpu@phenom.ffwll.local> <20170830134025.z23tjrexfhvloj7z@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170830134025.z23tjrexfhvloj7z@phenom.ffwll.local> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T3AgMzAtMDgtMTcgb20gMTU6NDAgc2NocmVlZiBEYW5pZWwgVmV0dGVyOgo+IE9uIFdlZCwgQXVn IDMwLCAyMDE3IGF0IDAyOjU0OjI4UE0gKzAyMDAsIE1hYXJ0ZW4gTGFua2hvcnN0IHdyb3RlOgo+ PiBPcCAzMC0wOC0xNyBvbSAxNDo0MyBzY2hyZWVmIERhbmllbCBWZXR0ZXI6Cj4+PiBPbiBXZWQs IEF1ZyAzMCwgMjAxNyBhdCAwMjoxNzo0OFBNICswMjAwLCBNYWFydGVuIExhbmtob3JzdCB3cm90 ZToKPj4+PiBUaGUgbmV4dCBjb21taXQgcmVtb3ZlcyB0aGUgd2FpdCBmb3IgZmxpcF9kb25lIGlu IGluCj4+Pj4gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X2NsZWFudXBfZG9uZSwgYnV0IHdlIG5l ZWQgaXQgZm9yIHRoZSB0ZXN0cwo+Pj4+IHRvIHBhc3MuIEluc3RlYWQgb2YgdXNpbmcgY29tcGxp Y2F0ZWQgdmJsYW5rIHRyYWNraW5nIHdoaWNoIGVuZHMKPj4+PiB1cCBiZWluZyBpZ25vcmVkIGFu eXdheSwgY2FsbCB0aGUgY29ycmVjdCBhdG9taWMgaGVscGVyLiA6KQo+Pj4+Cj4+Pj4gUkZDIGJl Y2F1c2UgSSdtIG5vdCBjb21wbGV0ZWx5IHN1cmUgd2hhdCB3ZSB3YW50IHRvIGRvIHdpdGggdGhl IHZibGFuayB3YWl0aW5nLAo+Pj4+IEkgdGhpbmsgZm9yIG5vdyB0aGlzIHBhdGNoIGlzIHRoZSBy aWdodCB3YXkgdG8gZ28gdW50aWwgd2UgZGVjaWRlIGJlY2F1c2UgaXQKPj4+PiBwcmVzZXJ2ZXMg dGhlIHN0YXR1cyBxdW8gd2hlbiBkcm1fY3J0Y19jb21taXQgd2FzIGludHJvZHVjZWQuCj4+Pj4K Pj4+PiBTaWduZWQtb2ZmLWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RA bGludXguaW50ZWwuY29tPgo+Pj4+IC0tLQo+Pj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oICAgICAgfCAgMyArLQo+Pj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNw bGF5LmMgfCA4MyArKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPj4+PiAgMiBm aWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDc4IGRlbGV0aW9ucygtKQo+Pj4+Cj4+Pj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+Pj4gaW5kZXggY2JiYWZiZmIwYTU1Li5kZTE5NjIxODY0 YTkgMTAwNjQ0Cj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+Pj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4+PiBAQCAtNzA3LDggKzcw Nyw3IEBAIHN0cnVjdCBkcm1faTkxNV9kaXNwbGF5X2Z1bmNzIHsKPj4+PiAgCQkJICAgIHN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpvbGRfc3RhdGUpOwo+Pj4+ICAJdm9pZCAoKmNydGNfZGlzYWJs ZSkoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlLAo+Pj4+ICAJCQkgICAg IHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpvbGRfc3RhdGUpOwo+Pj4+IC0Jdm9pZCAoKnVwZGF0 ZV9jcnRjcykoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+Pj4+IC0JCQkgICAgIHVu c2lnbmVkIGludCAqY3J0Y192YmxhbmtfbWFzayk7Cj4+Pj4gKwl2b2lkICgqdXBkYXRlX2NydGNz KShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOwo+Pj4+ICAJdm9pZCAoKmF1ZGlvX2Nv ZGVjX2VuYWJsZSkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPj4+PiAgCQkJCSAg IHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+Pj4+ICAJCQkJICAgY29uc3Qgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpOwo+Pj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kaXNwbGF5LmMKPj4+PiBpbmRleCA1MmM3M2I0ZGFiYWEuLjNmM2NiOTZhYTExZSAxMDA2 NDQKPj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPj4+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPj4+PiBAQCAtMTIxMTQs NzMgKzEyMTE0LDEwIEBAIHUzMiBpbnRlbF9jcnRjX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3Qg aW50ZWxfY3J0YyAqY3J0YykKPj4+PiAgCXJldHVybiBkZXYtPmRyaXZlci0+Z2V0X3ZibGFua19j b3VudGVyKGRldiwgY3J0Yy0+cGlwZSk7Cj4+Pj4gIH0KPj4+PiAgCj4+Pj4gLXN0YXRpYyB2b2lk IGludGVsX2F0b21pY193YWl0X2Zvcl92YmxhbmtzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+ Pj4gLQkJCQkJICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+Pj4gLQkJCQkJ ICB1bnNpZ25lZCBjcnRjX21hc2spCj4+Pj4gLXsKPj4+PiAtCXVuc2lnbmVkIGxhc3RfdmJsYW5r X2NvdW50W0k5MTVfTUFYX1BJUEVTXTsKPj4+PiAtCWVudW0gcGlwZSBwaXBlOwo+Pj4+IC0JaW50 IHJldDsKPj4+PiAtCj4+Pj4gLQlpZiAoIWNydGNfbWFzaykKPj4+PiAtCQlyZXR1cm47Cj4+Pj4g LQo+Pj4+IC0JZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcGlwZSkgewo+Pj4+IC0JCXN0cnVjdCBp bnRlbF9jcnRjICpjcnRjID0gaW50ZWxfZ2V0X2NydGNfZm9yX3BpcGUoZGV2X3ByaXYsCj4+Pj4g LQkJCQkJCQkJICBwaXBlKTsKPj4+PiAtCj4+Pj4gLQkJaWYgKCEoKDEgPDwgcGlwZSkgJiBjcnRj X21hc2spKQo+Pj4+IC0JCQljb250aW51ZTsKPj4+PiAtCj4+Pj4gLQkJcmV0ID0gZHJtX2NydGNf dmJsYW5rX2dldCgmY3J0Yy0+YmFzZSk7Cj4+Pj4gLQkJaWYgKFdBUk5fT04ocmV0ICE9IDApKSB7 Cj4+Pj4gLQkJCWNydGNfbWFzayAmPSB+KDEgPDwgcGlwZSk7Cj4+Pj4gLQkJCWNvbnRpbnVlOwo+ Pj4+IC0JCX0KPj4+PiAtCj4+Pj4gLQkJbGFzdF92YmxhbmtfY291bnRbcGlwZV0gPSBkcm1fY3J0 Y192YmxhbmtfY291bnQoJmNydGMtPmJhc2UpOwo+Pj4+IC0JfQo+Pj4+IC0KPj4+PiAtCWZvcl9l YWNoX3BpcGUoZGV2X3ByaXYsIHBpcGUpIHsKPj4+PiAtCQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0 YyA9IGludGVsX2dldF9jcnRjX2Zvcl9waXBlKGRldl9wcml2LAo+Pj4+IC0JCQkJCQkJCSAgcGlw ZSk7Cj4+Pj4gLQkJbG9uZyBscmV0Owo+Pj4+IC0KPj4+PiAtCQlpZiAoISgoMSA8PCBwaXBlKSAm IGNydGNfbWFzaykpCj4+Pj4gLQkJCWNvbnRpbnVlOwo+Pj4+IC0KPj4+PiAtCQlscmV0ID0gd2Fp dF9ldmVudF90aW1lb3V0KGRldi0+dmJsYW5rW3BpcGVdLnF1ZXVlLAo+Pj4+IC0JCQkJbGFzdF92 YmxhbmtfY291bnRbcGlwZV0gIT0KPj4+PiAtCQkJCQlkcm1fY3J0Y192YmxhbmtfY291bnQoJmNy dGMtPmJhc2UpLAo+Pj4+IC0JCQkJbXNlY3NfdG9famlmZmllcyg1MCkpOwo+Pj4+IC0KPj4+PiAt CQlXQVJOKCFscmV0LCAicGlwZSAlYyB2Ymxhbmsgd2FpdCB0aW1lZCBvdXRcbiIsIHBpcGVfbmFt ZShwaXBlKSk7Cj4+Pj4gLQo+Pj4+IC0JCWRybV9jcnRjX3ZibGFua19wdXQoJmNydGMtPmJhc2Up Owo+Pj4+IC0JfQo+Pj4+IC19Cj4+Pj4gLQo+Pj4+IC1zdGF0aWMgYm9vbCBuZWVkc192Ymxhbmtf d2FpdChzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPj4+PiAtewo+Pj4+IC0J LyogZmIgdXBkYXRlZCwgbmVlZCB0byB1bnBpbiBvbGQgZmIgKi8KPj4+PiAtCWlmIChjcnRjX3N0 YXRlLT5mYl9jaGFuZ2VkKQo+Pj4+IC0JCXJldHVybiB0cnVlOwo+Pj4+IC0KPj4+PiAtCS8qIHdt IGNoYW5nZXMsIG5lZWQgdmJsYW5rIGJlZm9yZSBmaW5hbCB3bSdzICovCj4+Pj4gLQlpZiAoY3J0 Y19zdGF0ZS0+dXBkYXRlX3dtX3Bvc3QpCj4+Pj4gLQkJcmV0dXJuIHRydWU7Cj4+Pj4gLQo+Pj4+ IC0JaWYgKGNydGNfc3RhdGUtPndtLm5lZWRfcG9zdHZibF91cGRhdGUpCj4+Pj4gLQkJcmV0dXJu IHRydWU7Cj4+Pj4gLQo+Pj4+IC0JcmV0dXJuIGZhbHNlOwo+Pj4+IC19Cj4+Pj4gLQo+Pj4+ICBz dGF0aWMgdm9pZCBpbnRlbF91cGRhdGVfY3J0YyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4+Pj4g IAkJCSAgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPj4+PiAgCQkJICAgICAg c3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSwKPj4+PiAtCQkJICAgICAgc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSwKPj4+PiAtCQkJICAgICAgdW5zaWdu ZWQgaW50ICpjcnRjX3ZibGFua19tYXNrKQo+Pj4+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGNf c3RhdGUgKm5ld19jcnRjX3N0YXRlKQo+Pj4+ICB7Cj4+Pj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gY3J0Yy0+ZGV2Owo+Pj4+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShkZXYpOwo+Pj4+IEBAIC0xMjIwMywxMyArMTIxNDAsOSBAQCBzdGF0aWMgdm9p ZCBpbnRlbF91cGRhdGVfY3J0YyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4+Pj4gIAl9Cj4+Pj4g IAo+Pj4+ICAJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3BsYW5lc19vbl9jcnRjKG9sZF9jcnRj X3N0YXRlKTsKPj4+PiAtCj4+Pj4gLQlpZiAobmVlZHNfdmJsYW5rX3dhaXQocGlwZV9jb25maWcp KQo+Pj4+IC0JCSpjcnRjX3ZibGFua19tYXNrIHw9IGRybV9jcnRjX21hc2soY3J0Yyk7Cj4+Pj4g IH0KPj4+PiAgCj4+Pj4gLXN0YXRpYyB2b2lkIGludGVsX3VwZGF0ZV9jcnRjcyhzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUsCj4+Pj4gLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmNydGNf dmJsYW5rX21hc2spCj4+Pj4gK3N0YXRpYyB2b2lkIGludGVsX3VwZGF0ZV9jcnRjcyhzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4+Pj4gIHsKPj4+PiAgCXN0cnVjdCBkcm1fY3J0YyAq Y3J0YzsKPj4+PiAgCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUsICpuZXdf Y3J0Y19zdGF0ZTsKPj4+PiBAQCAtMTIyMjAsMTIgKzEyMTUzLDExIEBAIHN0YXRpYyB2b2lkIGlu dGVsX3VwZGF0ZV9jcnRjcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4+Pj4gIAkJ CWNvbnRpbnVlOwo+Pj4+ICAKPj4+PiAgCQlpbnRlbF91cGRhdGVfY3J0YyhjcnRjLCBzdGF0ZSwg b2xkX2NydGNfc3RhdGUsCj4+Pj4gLQkJCQkgIG5ld19jcnRjX3N0YXRlLCBjcnRjX3ZibGFua19t YXNrKTsKPj4+PiArCQkJCSAgbmV3X2NydGNfc3RhdGUpOwo+Pj4+ICAJfQo+Pj4+ICB9Cj4+Pj4g IAo+Pj4+IC1zdGF0aWMgdm9pZCBza2xfdXBkYXRlX2NydGNzKHN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICpzdGF0ZSwKPj4+PiAtCQkJICAgICB1bnNpZ25lZCBpbnQgKmNydGNfdmJsYW5rX21hc2sp Cj4+Pj4gK3N0YXRpYyB2b2lkIHNrbF91cGRhdGVfY3J0Y3Moc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKnN0YXRlKQo+Pj4+ICB7Cj4+Pj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KHN0YXRlLT5kZXYpOwo+Pj4+ICAJc3RydWN0IGludGVsX2F0b21pY19zdGF0 ZSAqaW50ZWxfc3RhdGUgPSB0b19pbnRlbF9hdG9taWNfc3RhdGUoc3RhdGUpOwo+Pj4+IEBAIC0x MjI4NCw3ICsxMjIxNiw3IEBAIHN0YXRpYyB2b2lkIHNrbF91cGRhdGVfY3J0Y3Moc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+Pj4+ICAJCQkJdmJsX3dhaXQgPSB0cnVlOwo+Pj4+ICAK Pj4+PiAgCQkJaW50ZWxfdXBkYXRlX2NydGMoY3J0Yywgc3RhdGUsIG9sZF9jcnRjX3N0YXRlLAo+ Pj4+IC0JCQkJCSAgbmV3X2NydGNfc3RhdGUsIGNydGNfdmJsYW5rX21hc2spOwo+Pj4+ICsJCQkJ CSAgbmV3X2NydGNfc3RhdGUpOwo+Pj4+ICAKPj4+PiAgCQkJaWYgKHZibF93YWl0KQo+Pj4+ICAJ CQkJaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldl9wcml2LCBwaXBlKTsKPj4+PiBAQCAtMTIzNDYs NyArMTIyNzgsNiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9hdG9taWNfY29tbWl0X3RhaWwoc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+Pj4+ICAJc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmludGVsX2NzdGF0ZTsKPj4+PiAgCWJvb2wgaHdfY2hlY2sgPSBpbnRlbF9zdGF0ZS0+bW9kZXNl dDsKPj4+PiAgCXU2NCBwdXRfZG9tYWluc1tJOTE1X01BWF9QSVBFU10gPSB7fTsKPj4+PiAtCXVu c2lnbmVkIGNydGNfdmJsYW5rX21hc2sgPSAwOwo+Pj4+ICAJaW50IGk7Cj4+Pj4gIAo+Pj4+ICAJ aW50ZWxfYXRvbWljX2NvbW1pdF9mZW5jZV93YWl0KGludGVsX3N0YXRlKTsKPj4+PiBAQCAtMTI0 MzgsNyArMTIzNjksNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9hdG9taWNfY29tbWl0X3RhaWwoc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+Pj4+ICAJcG1fcW9zX3VwZGF0ZV9yZXF1ZXN0 KCZkZXZfcHJpdi0+cG1fcW9zX2F0b21pYywgMCk7Cj4+Pj4gIAo+Pj4+ICAJLyogTm93IGVuYWJs ZSB0aGUgY2xvY2tzLCBwbGFuZSwgcGlwZSwgYW5kIGNvbm5lY3RvcnMgdGhhdCB3ZSBzZXQgdXAu ICovCj4+Pj4gLQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfY3J0Y3Moc3RhdGUsICZjcnRjX3Zi bGFua19tYXNrKTsKPj4+PiArCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV9jcnRjcyhzdGF0ZSk7 Cj4+Pj4gIAo+Pj4+ICAJLyogRklYTUU6IFdlIHNob3VsZCBjYWxsIGRybV9hdG9taWNfaGVscGVy X2NvbW1pdF9od19kb25lKCkgaGVyZQo+Pj4+ICAJICogYWxyZWFkeSwgYnV0IHN0aWxsIG5lZWQg dGhlIHN0YXRlIGZvciB0aGUgZGVsYXllZCBvcHRpbWl6YXRpb24uIFRvCj4+Pj4gQEAgLTEyNDUw LDcgKzEyMzgxLDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfYXRvbWljX2NvbW1pdF90YWlsKHN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPj4+PiAgCSAqICAgd2UgZG9uJ3QgbmVlZCBvdXQg c3BlY2lhbCBoYW5kbGluZyBhbnkgbW9yZS4KPj4+PiAgCSAqLwo+Pj4+ICAJaWYgKCFzdGF0ZS0+ bGVnYWN5X2N1cnNvcl91cGRhdGUpCj4+PiBJIHRoaW5rIHRoaXMgaWYgaXMgZGVhZCBjb2RlLCBz aW5jZSBlaXRoZXIgd2UgdXNlIHRoZSBmYXN0cGF0aCBpbgo+Pj4gaW50ZWxfbGVnYWN5X2N1cnNv cl91cGRhdGUsIHdoaWNoIG1lYW5zIG5vIGF0b21pYyBjb21taXQuIE9yIHdlIGRvbid0LCBhbmQK Pj4+IHRoZW4gd2UgY2xlYXIgdGhpcyBoYWNrIChvbiBtb3N0IHBsYXRmb3JtcyBhdCBsZWFzdCkg c2luY2UgaXQganVzdCB3cmVha3MKPj4+IGNvbXBsZXRlIGhhdm9jLgo+Pj4KPj4+IFdlIHNob3Vs ZCBwcm9iYWJseSBkbyB0aGlzIGxvZ2ljIGluIHRoZSBhc3luYyBoZWxwZXJzLCBpLmUuIGlmIGFz eW5jCj4+PiBoZWxwZXJzIHJlamVjdCBhIGN1cnNvciB1cGRhdGUsIGNsZWFyIHN0YXRlLT5sZWdh Y3lfY3Vyc29yX3VwZGF0ZS4KPj4+Cj4+PiBTaW5jZSBJIHRoaW5rIHdlIGRvbid0IG5lY2Vzc2Fy aWx5IG5lZWQgdGhpcyBwYXRjaCBpbiB0aGlzIHNlcmllcywgSSB0aGluawo+Pj4gaXQnZCBiZSBi ZXR0ZXIgaW4gYSBzZXBhcmF0ZSBzZXJpZXMgdG8gc3RyYWlnaHRlbiBvdXQgdGhlIGFzeW5jX3Vw ZGF0ZQo+Pj4gc3RvcnkuIFdoaWNoIHdvdWxkIHRoZW4gaW5jbHVkZSBtb3ZpbmcgaTkxNSBvdmVy IHRvIHRoZSBjb3JlIHN1cHBvcnQuCj4+IEVybSwgbm90IHN1cmUgd2hhdCB5b3UgbWVhbiBoZXJl LCBpc24ndCBzdGF0ZS0+bGVnYWN5X2N1cnNvcl91cGRhdGUgbW9zdGx5IGZhbHNlLCB3aGljaCBt ZWFucyBpbiBtb3N0IGNhc2VzIHdlJ2xsIHdhaXQ/Cj4gWXVwLiBBbmQgdGhlIGZldyBjYXNlcyB3 aGVyZSBpdCdzIHRydWUgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlCj4gZmFzdHBhdGgvYXN5bmMg cGxhbmUgdXBkYXRlIGxvZ2ljLiBXb3VsZCBhbGxvdyB1cyB0byBkaXRjaCBhIGZldwo+IGNvbmRp dGlvbnMgYWxsIG92ZXIgdGhlIGNvZGUuCj4gLURhbmllbAoKSSd2ZSBkb25lIHNvbWUgbW9yZSB0 ZXN0cywgYW5kIGl0IHNlZW1zIHRoaXMgcGF0Y2ggaXMgcmVxdWlyZWQuCgpXaXRob3V0IHRoaXMg d2UgbWF5IG5vdCBhbHdheXMgd2FpdCwgYW5kIHRoYXQgY291bGQgcmVzdWx0IGluIHNwdXJpb3Vz IGZhaWx1cmVzIG9mIHBhZ2UgZmxpcCB3aXRoIC1FQlVTWS4KSSdkIGxvdmUgdG8gaGlkZSB0aGlz IGZyb20gdXNlcnNwYWNlLCBidXQgSSBkb24ndCB0aGluayB0aGF0J3MgcG9zc2libGUgeWV0LiBJ dCdzIGJlc3QgdG8gYWx3YXlzIGNhbGwKZHJtX2F0b21pY19oZWxwZXJfd2FpdF9mb3JfZmxpcF9k b25lKCkgZm9yIG5vdy4gSXQncyBhIG5vb3AgZm9yIGxlZ2FjeV9jdXJzb3JfdXBkYXRlIGFueXdh eS4KY29tbWl0LT5mbGlwX2RvbmUgaXMgYWx3YXlzIHNldCBlYXJseS4KCn5NYWFydGVuCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFp bGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK