From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH v9 4/6] drm/i915: Interrupt driven fences Date: Tue, 14 Jun 2016 12:35:30 +0100 Message-ID: <575FEC02.9020306@linux.intel.com> References: <1464800848-36672-1-git-send-email-John.C.Harrison@Intel.com> <1464800848-36672-5-git-send-email-John.C.Harrison@Intel.com> <575033DF.9010800@linux.intel.com> <8acfa8c8-018c-d05b-ac8b-d92f0a91b2aa@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id F1A9A6E728 for ; Tue, 14 Jun 2016 11:35:31 +0000 (UTC) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: John Harrison , Maarten Lankhorst , Intel-GFX@Lists.FreeDesktop.Org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDEzLzA2LzE2IDE2OjUxLCBKb2huIEhhcnJpc29uIHdyb3RlOgoKW3NuaXBdCgo+Pj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCj4+Pj4gYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCj4+Pj4gaW5kZXggMDdlZGFlZC4uZjhmNjBiYiAxMDA2 NDQKPj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCj4+Pj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwo+Pj4+IEBAIC0xMDE5LDkgKzEwMTksMTMg QEAgc3RhdGljIGludCBpOTE1X3dvcmtxdWV1ZXNfaW5pdChzdHJ1Y3QKPj4+PiBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPj4+PiAgICAgICAgaWYgKGRldl9wcml2LT53cSA9PSBOVUxMKQo+ Pj4+ICAgICAgICAgICAgZ290byBvdXRfZXJyOwo+Pj4+Cj4+Pj4gKyAgICBkZXZfcHJpdi0+cmVx X3dxID0gYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoImk5MTUtcnEiLCAwKTsKPj4+PiArICAgIGlm IChkZXZfcHJpdi0+cmVxX3dxID09IE5VTEwpCj4+Pj4gKyAgICAgICAgZ290byBvdXRfZnJlZV93 cTsKPj4+PiArCj4+PiBTaW5nbGUgKHBlci1kZXZpY2UpIG9yZGVyZWQgd29ya3F1ZXVlIHdpbGwg c2VyaWFsaXplIGludGVycnVwdAo+Pj4gcHJvY2Vzc2luZyBhY3Jvc3MgYWxsIGVuZ2luZXMgdG8g b25lIHRocmVhZC4gVG9nZXRoZXIgd2l0aCB0aGUgZmFjdAo+Pj4gcmVxdWVzdCB3b3JrZXIgZG9l cyBub3Qgc2VlbSB0byBuZWVkIHRoZSBzbGVlcGluZyBjb250ZXh0LCBJIGFtCj4+PiB0aGlua2lu ZyB0aGF0IGEgdGFza2xldCBwZXIgZW5naW5lIHdvdWxkIGJlIG11Y2ggYmV0dGVyIChzZWUKPj4+ IGVuZ2luZS0+aXJxX3Rhc2tsZXQgZm9yIGFuIGV4YW1wbGUpLgo+IE90aGVyIGNvbnZlcnNhdGlv bnMgaGF2ZSBzdGF0ZWQgdGhhdCB0YXNrbGV0cyBhcmUgbm90IHRoZSBiZXN0IG9wdGlvbi4gSQo+ IGRpZCB0aGluayBhYm91dCBoYXZpbmcgYSB3b3JrIHF1ZXVlIHBlciBlbmdpbmUgYnV0IHRoYXQg c2VlbWVkCj4gZXhjZXNzaXZlLiBQbHVzIGFueSBzdWJzZXF1ZW50IHdvcmsgdHJpZ2dlcmVkIGJ5 IHRoZSBmZW5jZSBjb21wbGV0aW9uCj4gd2lsbCBhbG1vc3QgY2VydGFpbmx5IHJlcXVpcmUgZ3Jh YmJpbmcgdGhlIGRyaXZlciBtdXRleCBsb2NrIChiZWNhdXNlCj4gZXZlcnl0aGluZyByZXF1aXJl cyB0aGUgbXV0ZXggbG9jaykgc28gc2VyaWFsaXNhdGlvbiBvZiBlbmdpbmVzIGRvZXNuJ3QKPiBz b3VuZCBsaWtlIG11Y2ggb2YgYW4gaXNzdWUuCgpJbiB0aGlzIHBhdGNoIEFGQUlDUyBpOTE1X2dl bV9yZXF1ZXN0X3dvcmtlciBjYWxscyAKaTkxNV9nZW1fcmVxdWVzdF9ub3RpZnkgb24gdGhlIGVu Z2luZSB3aGljaCBvbmx5IGhvbGRzIHRoZSAKZW5naW5lLT5mZW5jZV9sb2NrLiBTbyBpZiB5b3Ug aGFkIGEgcGVyIGVuZ2luZSB3cSBhbGwgZW5naW5lcyBjb3VsZCBkbyAKdGhhdCBwcm9jZXNzaW5n IGluIHBhcmFsbGVsLgoKSXQgaXMgb25seSBhIG1hdHRlciBvZiB3aGVuIGZlbmNlX3NpZ25hbF9s b2NrZWQgd2FrZXMgdXAgdGhlIHdhaXRlcnMgCnRoYXQgdGhleSBtaWdodCBnbyBhbmQgaGFtbWVy IG9uIHN0cnVjdF9tdXRleCwgYnV0IGZvciBhbnkgd29yayB0aGV5IAp3YW50IHRvIGRvIGJldHdl ZW4gd2FraW5nIHVwIGFuZCBzdWJtaXR0aW5nIG5ldyB3b3JrLCBzZXJpYWxpemluZyB2aWEgYSAK c2luZ2xlIHdxIHdpbGwgYmUgYmFkIGZvciBsYXRlbmN5LgoKPj4+Cj4+Pj4gKyAgICAgICAgcmV0 ID0gX19pOTE1X3NwaW5fcmVxdWVzdChyZXEsIHN0YXRlKTsKPj4+PiArICAgICAgICBpZiAocmV0 ID09IDApCj4+Pj4gKyAgICAgICAgICAgIGdvdG8gb3V0Owo+Pj4+ICAgICAgICB9Cj4+Pj4KPj4+ PiArICAgIC8qCj4+Pj4gKyAgICAgKiBFbmFibGUgaW50ZXJydXB0IGNvbXBsZXRpb24gb2YgdGhl IHJlcXVlc3QuCj4+Pj4gKyAgICAgKi8KPj4+PiArICAgIGZlbmNlX2VuYWJsZV9zd19zaWduYWxp bmcoJnJlcS0+ZmVuY2UpOwo+Pj4+ICsKPj4+PiAgICAgICAgZm9yICg7Oykgewo+Pj4+ICAgICAg ICAgICAgc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Cj4+Pj4KPj4+PiBAQCAtMTMwNiw2ICsxMzA2 LDIxIEBAIGludCBfX2k5MTVfd2FpdF9yZXF1ZXN0KHN0cnVjdAo+Pj4+IGRybV9pOTE1X2dlbV9y ZXF1ZXN0ICpyZXEsCj4+Pj4gICAgICAgICAgICAgICAgYnJlYWs7Cj4+Pj4gICAgICAgICAgICB9 Cj4+Pj4KPj4+PiArICAgICAgICBpZiAocmVxLT5zZXFubykgewo+Pj4+ICsgICAgICAgICAgICAv Kgo+Pj4+ICsgICAgICAgICAgICAgKiBUaGVyZSBpcyBxdWl0ZSBhIGxvdCBvZiBsYXRlbmN5IGlu IHRoZSB1c2VyIGludGVycnVwdAo+Pj4+ICsgICAgICAgICAgICAgKiBwYXRoLiBTbyBkbyBhbiBl eHBsaWNpdCBzZXFubyBjaGVjayBhbmQgcG90ZW50aWFsbHkKPj4+PiArICAgICAgICAgICAgICog cmVtb3ZlIGFsbCB0aGF0IGRlbGF5Lgo+Pj4+ICsgICAgICAgICAgICAgKi8KPj4+PiArICAgICAg ICAgICAgaWYgKHJlcS0+ZW5naW5lLT5pcnFfc2Vxbm9fYmFycmllcikKPj4+PiArICAgICAgICAg ICAgICAgIHJlcS0+ZW5naW5lLT5pcnFfc2Vxbm9fYmFycmllcihyZXEtPmVuZ2luZSk7Cj4+Pj4g KyAgICAgICAgICAgIHNlcW5vID0gZW5naW5lLT5nZXRfc2Vxbm8oZW5naW5lKTsKPj4+PiArICAg ICAgICAgICAgaWYgKGk5MTVfc2Vxbm9fcGFzc2VkKHNlcW5vLCByZXEtPnNlcW5vKSkgewo+Pj4+ ICsgICAgICAgICAgICAgICAgcmV0ID0gMDsKPj4+PiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ Pj4+ICsgICAgICAgICAgICB9Cj4+Pj4gKyAgICAgICAgfQo+Pj4+ICsKPj4+PiAgICAgICAgICAg IGlmIChzaWduYWxfcGVuZGluZ19zdGF0ZShzdGF0ZSwgY3VycmVudCkpIHsKPj4+PiAgICAgICAg ICAgICAgICByZXQgPSAtRVJFU1RBUlRTWVM7Cj4+Pj4gICAgICAgICAgICAgICAgYnJlYWs7Cj4+ Pj4gQEAgLTEzMzIsMTQgKzEzNDcsMzIgQEAgaW50IF9faTkxNV93YWl0X3JlcXVlc3Qoc3RydWN0 Cj4+Pj4gZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKPj4+PiAgICAgICAgICAgICAgICBkZXN0 cm95X3RpbWVyX29uX3N0YWNrKCZ0aW1lcik7Cj4+Pj4gICAgICAgICAgICB9Cj4+Pj4gICAgICAg IH0KPj4+PiAtICAgIGlmICghaXJxX3Rlc3RfaW5fcHJvZ3Jlc3MpCj4+Pj4gLSAgICAgICAgZW5n aW5lLT5pcnFfcHV0KGVuZ2luZSk7Cj4+Pj4KPj4+PiAgICAgICAgZmluaXNoX3dhaXQoJmVuZ2lu ZS0+aXJxX3F1ZXVlLCAmd2FpdCk7Cj4+PiBIbSBJIGRvbid0IHVuZGVyc3RhbmQgd2h5IG91ciBj dXN0b20gd2FpdGluZyByZW1haW5zPyBTaG91bGRuJ3QKPj4+IGZlbmNlX3dhaXQganVzdCBiZSBj YWxsZWQgYWZ0ZXIgdGhlIG9wdGltaXN0aWMgc3BpbiwgbW9yZSBvciBsZXNzPwo+IFRoYXQgd291 bGQgc29sdmUgdGhlICd0aHVuZGVyaW5nIHByb2JsZW0nIGlmIHdlIGNvdWxkLiBJbiB0aGVvcnks IHRoZQo+IGVudGlyZSB3YWl0IGZ1bmN0aW9uIHNob3VsZCBqdXN0IGJlIGEgY2FsbCB0byAnZmVu Y2Vfd2FpdCgmcmVxLT5mZW5jZSknLgo+IFVuZm9ydHVuYXRlbHksIHRoZSB3YWl0IGZ1bmN0aW9u IGdvZXMgdG8gc2xlZXAgaG9sZGluZyB0aGUgbXV0ZXggbG9jawo+IGFuZCByZXF1aXJlcyBoYXZp bmcgYSBiYWlsIG91dCBvcHRpb24gb24gdGhlIHdhaXQgd2hpY2ggaXMgbm90IGN1cnJlbnRseQo+ IHBhcnQgb2YgdGhlIGZlbmNlIEFQSS4gSSBoYXZlIGEgd29yay1pbi1wcm9ncmVzcyBwYXRjaCB0 aGF0IGFsbW9zdAo+IHNvbHZlcyB0aGUgaXNzdWVzIGJ1dCBpdCBpc24ndCBxdWl0ZSB0aGVyZSB5 ZXQgKGFuZCBJIGhhdmVuJ3QgaGFkIG11Y2gKPiBjaGFuY2UgdG8gd29yayBvbiBpdCBmb3IgYSB3 aGlsZSkuCgpbQnR3IGRvZXMgaXQgYWxzbyBtZWFuIGk5MTUgY2FuIG5vdCBoYW5kbGUgdGhlIGlu Y29taW5nIDNyZCBwYXJ0eSBmZW5jZXM/XQoKU28gdGhlIHVzZXJzcGFjZSB3YWl0ZXJzIGNhbiBl aXRoZXIgd2FpdCBvbiBhIGRtYS1idWYgb3IgaTkxNSB3cSwgCmRlcGVuZGluZyBvbiB3aGF0IGlv Y3RsIHRoZXkgaGF2ZSBjYWxsZWQuIFRoZW4gb24gaW50ZXJydXB0IGk5MTUgd2FpdGVycyAKYXJl IHdva2VuIGRpcmVjdGx5LCB3aGlsZSB0aGUgZmVuY2UgYXBpIG9uZXMgZ28gdmlhIGEgd29ya2Vy LgoKaTkxNSB3YWl0ZXJzIGFsc28gZG8gYSBzZWNvbmQgd2FrZSB1cCB0aGUgZmVuY2UgQVBJIHdh aXRlcnMgYnkuLi4KCj4+Pgo+Pj4+ICAgIG91dDoKPj4+PiAgICAgICAgdHJhY2VfaTkxNV9nZW1f cmVxdWVzdF93YWl0X2VuZChyZXEpOwo+Pj4+Cj4+Pj4gKyAgICBpZiAoKHJldCA9PSAwKSAmJiAo cmVxLT5zZXFubykpIHsKPj4+PiArICAgICAgICBpZiAocmVxLT5lbmdpbmUtPmlycV9zZXFub19i YXJyaWVyKQo+Pj4+ICsgICAgICAgICAgICByZXEtPmVuZ2luZS0+aXJxX3NlcW5vX2JhcnJpZXIo cmVxLT5lbmdpbmUpOwo+Pj4+ICsgICAgICAgIHNlcW5vID0gZW5naW5lLT5nZXRfc2Vxbm8oZW5n aW5lKTsKPj4+PiArICAgICAgICBpZiAoaTkxNV9zZXFub19wYXNzZWQoc2Vxbm8sIHJlcS0+c2Vx bm8pICYmCj4+Pj4gKyAgICAgICAgICAgICFpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEp KSB7Cj4+Pj4gKyAgICAgICAgICAgIC8qCj4+Pj4gKyAgICAgICAgICAgICAqIE1ha2Ugc3VyZSB0 aGUgcmVxdWVzdCBpcyBtYXJrZWQgYXMgY29tcGxldGVkIGJlZm9yZQo+Pj4+ICsgICAgICAgICAg ICAgKiByZXR1cm5pbmcuIE5COiBOZWVkIHRvIGFjcXVpcmUgdGhlIHNwaW5sb2NrIGFyb3VuZAo+ Pj4+ICsgICAgICAgICAgICAgKiB0aGUgd2hvbGUgY2FsbCB0byBhdm9pZCBhIHJhY2UgY29uZGl0 aW9uIHdpdGggdGhlCj4+Pj4gKyAgICAgICAgICAgICAqIGludGVycnVwdCBoYW5kbGVyIGlzIHJ1 bm5pbmcgY29uY3VycmVudGx5IGFuZCBjb3VsZAo+Pj4+ICsgICAgICAgICAgICAgKiBjYXVzZSB0 aGlzIGludm9jYXRpb24gdG8gZWFybHkgZXhpdCBldmVuIHRob3VnaCB0aGUKPj4+PiArICAgICAg ICAgICAgICogcmVxdWVzdCBoYXMgbm90IGFjdHVhbGx5IGJlZW4gZnVsbHkgcHJvY2Vzc2VkIHll dC4KPj4+PiArICAgICAgICAgICAgICovCj4+Pj4gKyAgICAgICAgICAgIHNwaW5fbG9ja19pcnEo JnJlcS0+ZW5naW5lLT5mZW5jZV9sb2NrKTsKPj4+PiArICAgICAgICAgICAgaTkxNV9nZW1fcmVx dWVzdF9ub3RpZnkocmVxLT5lbmdpbmUsIHRydWUpOwoKLi4uIHRoaXMgY2FsbCBoZXJlLgoKSWYg dGhlcmUgYXJlIGJvdGggY2xhc3NlcyBvZiB3YWl0ZXJzIG9uZSBvZiB0aG9zZSBjYWxscyB3aWxs IGJlIGEgd2FzdGUgCm9mIGN5Y2xlcyAoc3BpbiBsb2NrLCBpcnEgdG9nZ2xlLCBsaXN0IGl0ZXIs IGNvaGVyZW50IHNlcW5vIHJlYWQpIGNvcnJlY3Q/Cgo+Pj4+ICsgICAgICAgICAgICBzcGluX3Vu bG9ja19pcnEoJnJlcS0+ZW5naW5lLT5mZW5jZV9sb2NrKTsKPj4+PiArICAgICAgICB9Cj4+Pj4g KyAgICB9Cj4+Pj4gKwo+Pj4+ICAgICAgICBpZiAodGltZW91dCkgewo+Pj4+ICAgICAgICAgICAg czY0IHRyZXMgPSAqdGltZW91dCAtIChrdGltZV9nZXRfcmF3X25zKCkgLSBiZWZvcmUpOwo+Pj4+ Cj4+Pj4gQEAgLTE0MDUsNiArMTQzOCwxMSBAQCBzdGF0aWMgdm9pZCBpOTE1X2dlbV9yZXF1ZXN0 X3JldGlyZShzdHJ1Y3QKPj4+PiBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdCkKPj4+PiAg ICB7Cj4+Pj4gICAgICAgIHRyYWNlX2k5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlKHJlcXVlc3QpOwo+ Pj4+Cj4+Pj4gKyAgICBpZiAocmVxdWVzdC0+aXJxX2VuYWJsZWQpIHsKPj4+PiArICAgICAgICBy ZXF1ZXN0LT5lbmdpbmUtPmlycV9wdXQocmVxdWVzdC0+ZW5naW5lKTsKPj4+PiArICAgICAgICBy ZXF1ZXN0LT5pcnFfZW5hYmxlZCA9IGZhbHNlOwo+Pj4gV2hhdCBwcm90ZWN0cyByZXF1ZXN0LT5p cnFfZW5hYmxlZD8gSGVyZSB2ZXJzdXMgZW5hYmxlX3NpZ25hbGxpbmcKPj4+IGJpdD8gSXQgY2Fu IGJlIGNhbGxlZCBmcm9tIHRoZSBleHRlcm5hbCBmZW5jZSB1c2VycyB3aGljaCB3b3VsZCB0YWtl Cj4+PiB0aGUgZmVuY2VfbG9jaywgYnV0IGhlcmUgaXQgZG9lcyBub3QuCj4gVGhlIGZsYWcgY2Fu IG9ubHkgYmUgc2V0IHdoZW4gZW5hYmxpbmcgaW50ZXJydXB0IGRyaXZlbiBjb21wbGV0aW9uCj4g KHdoaWNoIGNhbiBvbmx5IGhhcHBlbiBvbmNlIGFuZCBvbmx5IGlmIHRoZSBmZW5jZSBpcyBub3Qg YWxyZWFkeQo+IHNpZ25hbGxlZCkuIFRoZSBmbGFnIGNhbiBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0 aGUgZmVuY2UgaXMgc2lnbmFsbGVkIG9yCj4gd2hlbiB0aGUgcmVxdWVzdCBpcyByZXRpcmVkLiBB bmQgcmV0aXJlIHdpdGhvdXQgc2lnbmFsIGNhbiBvbmx5IGhhcHBlbgo+IGlmIHRoZSByZXF1ZXN0 IGlzIGJlaW5nIGNhbmNlbGxlZCBpbiBzb21lIHdheSAoZS5nLiBHUFUgcmVzZXQpIGFuZCB0aHVz Cj4gd2lsbCBub3QgZXZlciBiZSBzaWduYWxsZWQuIFNvIGlmIHdlIGdldCBoZXJlIHRoZW4gbm9u ZSBvZiB0aGUgb3RoZXIKPiBwYXRocyBhcmUgcG9zc2libGUgYW55bW9yZS4KCkNvdWxkbid0IHJl dGlyZSB3aXRob3V0IHNpZ25hbCBoYXBwZW4gdmlhIGV4ZWNidWYgcGF0aHMgY2FsbGluZyAKaTkx NV9nZW1fcmV0aXJlX3JlcXVlc3RzX3Jpbmc/Cgo+Pj4+ICsgICAgICAgIGk5MTVfZ2VtX3JlcXVl c3RfZW5hYmxlX2ludGVycnVwdChyZXEsIHRydWUpOwo+Pj4+ICsKPj4+PiArICAgIHJldHVybiB0 cnVlOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICsvKioKPj4+PiArICogaTkxNV9nZW1fcmVxdWVzdF93 b3JrZXIgLSByZXF1ZXN0IHdvcmsgaGFuZGxlciBjYWxsYmFjay4KPj4+PiArICogQHdvcms6IFdv cmsgc3RydWN0dXJlCj4+Pj4gKyAqIENhbGxlZCBpbiByZXNwb25zZSB0byBhIHNlcW5vIGludGVy cnVwdCB0byBwcm9jZXNzIHRoZSBjb21wbGV0ZWQKPj4+PiByZXF1ZXN0cy4KPj4+PiArICovCj4+ Pj4gK3ZvaWQgaTkxNV9nZW1fcmVxdWVzdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3Jr KQo+Pj4+ICt7Cj4+Pj4gKyAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4+Pj4g Kwo+Pj4+ICsgICAgZW5naW5lID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MsIHJlcXVlc3Rfd29yayk7Cj4+Pj4gKyAgICBpOTE1X2dlbV9yZXF1ZXN0X25vdGlmeShl bmdpbmUsIGZhbHNlKTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArdm9pZCBpOTE1X2dlbV9yZXF1ZXN0 X25vdGlmeShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIGJvb2wKPj4+PiBmZW5jZV9s b2NrZWQpCj4+Pj4gK3sKPj4+PiArICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVx LCAqcmVxX25leHQ7Cj4+Pj4gKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+Pj4+ICAgICAgICB1 MzIgc2Vxbm87Cj4+Pj4KPj4+PiAtICAgIHNlcW5vID0gcmVxLT5lbmdpbmUtPmdldF9zZXFubyhy ZXEtPmVuZ2luZSk7Cj4+Pj4gKyAgICBpZiAobGlzdF9lbXB0eSgmZW5naW5lLT5mZW5jZV9zaWdu YWxfbGlzdCkpCj4+PiBPa2F5IHRoaXMgd2l0aG91dCB0aGUgbG9jayBzdGlsbCBtYWtlcyBtZSBu ZXJ2b3VzLiBJJ2QgcmF0aGVyIG5vdAo+Pj4gaGF2aW5nIHRvIHRoaW5rIGFib3V0IHdoeSBpdCBp cyBzYWZlIGFuZCBjYW4ndCBtaXNzIGEgd2FrZXVwLgo+IEkgZG9uJ3Qgc2VlIGhvdyBsaXN0X2Vt cHR5KCkgY2FuIHJldHVybiBhIGZhbHNlIG5lZ2F0aXZlLiBFdmVuIGlmIHRoZQo+IGltcGxlbWVu dGF0aW9uIHdhcyBzdWNoIHRoYXQgaXQgY291bGQgc2VlIGEgcGFydGlhbGx5IHVwZGF0ZWQgc3Rh dGUKPiBhY3Jvc3MgbXVsdGlwbGUgbWVtb3J5IGFjY2Vzc2VzLCB0aGF0IHdpbGwganVzdCBsZWFk IHRvIGl0IHRoaW5raW5nCj4gbm90LWVtcHR5IHdoaWNoIGlzIGZpbmUuIEFueSB1cGRhdGUgd2hp Y2ggdGFrZXMgaXQgZnJvbSBlbXB0eSB0bwo+IG5vdC1lbXB0eSBpcyBndWFyYW50ZWVkIHRvIG9j Y3VyIGJlZm9yZSB0aGUgYWN0IG9mIGVuYWJsaW5nIGludGVycnVwdHMKPiBhbmQgdGh1cyBiZWZv cmUgbm90aWZ5KCkgY2FuIGJlIGNhbGxlZC4gU28gd2hpbGUgaXQgY291bGQgcG90ZW50aWFsbHkg ZG8KPiB0aGUgZnVsbCBwcm9jZXNzaW5nIHdoZW4gYW4gZWFybHkgZXhpdCB3YXMgZmluZSwgaXQg Y2FuIG5ldmVyIGVhcmx5IGV4aXQKPiB3aGVuIGl0IG5lZWRzIHRvIGRvIHNvbWV0aGluZy4KClNv bWV0aGluZyBsaWtlIHRoYXQgc291bmRzIGxpa2UgYSBnb29kIGNvbW1lbnQgdG8gcHV0IGFib3Zl IHRoZW4hIDopCgpSZWdhcmRzLAoKVHZydGtvCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK