From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH v2 2/4] drm/i915: Verify the engine workarounds stick on application Date: Tue, 16 Apr 2019 10:43:43 +0100 Message-ID: <9e058033-37b7-e576-9962-c910febe8957@linux.intel.com> References: <20190416081024.20536-1-chris@chris-wilson.co.uk> <20190416081024.20536-2-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9CDCA891F2 for ; Tue, 16 Apr 2019 09:43:45 +0000 (UTC) In-Reply-To: <20190416081024.20536-2-chris@chris-wilson.co.uk> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDE2LzA0LzIwMTkgMDk6MTAsIENocmlzIFdpbHNvbiB3cm90ZToKPiBSZWFkIHRoZSBlbmdp bmUgd29ya2Fyb3VuZHMgYmFjayB1c2luZyB0aGUgR1BVIGFmdGVyIGxvYWRpbmcgdGhlIGluaXRp YWwKPiBjb250ZXh0IHN0YXRlIHRvIHZlcmlmeSB0aGF0IHdlIGFyZSBzZXR0aW5nIHRoZW0gY29y cmVjdGx5LCBhbmQgYmFpbCBpZgo+IGl0IGZhaWxzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IENocmlz IFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IENjOiBUdnJ0a28gVXJzdWxpbiA8 dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+IC0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYyAgICAgICAgICAgICAgIHwgICA2ICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3dvcmthcm91bmRzLmMgICAgICB8IDEyMCArKysrKysrKysrKysrKysrKysKPiAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3dvcmthcm91bmRzLmggICAgICB8ICAgMiArCj4gICAu Li4vZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX3dvcmthcm91bmRzLmMgICAgfCAgNTMgKy0tLS0t LS0KPiAgIDQgZmlsZXMgY2hhbmdlZCwgMTM0IGluc2VydGlvbnMoKyksIDQ3IGRlbGV0aW9ucygt KQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IDBhODE4YTYwYWQzMS4uOTVhZTY5 NzUzZTkxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gQEAgLTQ3MTcsNiArNDcxNywx MiBAQCBzdGF0aWMgaW50IF9faW50ZWxfZW5naW5lc19yZWNvcmRfZGVmYXVsdHMoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gICAJCWk5MTVfcmVxdWVzdF9hZGQocnEpOwo+ICAgCQlp ZiAoZXJyKQo+ICAgCQkJZ290byBlcnJfYWN0aXZlOwo+ICsKPiArCQlpZiAoSVNfRU5BQkxFRChD T05GSUdfRFJNX0k5MTVfREVCVUdfR0VNKSAmJgo+ICsJCSAgICBpbnRlbF9lbmdpbmVfdmVyaWZ5 X3dvcmthcm91bmRzKGVuZ2luZSwgImxvYWQiKSkgewo+ICsJCQllcnIgPSAtRUlPOwo+ICsJCQln b3RvIGVycl9hY3RpdmU7CgpUaGUgdHdvIHN1Ym1pc3Npb24gdXNlIGRpZmZlcmVudCBjb250ZXh0 cyB0aW1lbGluZXMgc28gc3RyaWN0bHkgc3BlYWtpbmcgCnNob3VsZCBiZSBzb21laG93IGV4cGxp Y2l0bHkgc2VyaWFsaXplZC4KCj4gKwkJfQo+ICAgCX0KPiAgIAo+ICAgCS8qIEZsdXNoIHRoZSBk ZWZhdWx0IGNvbnRleHQgaW1hZ2UgdG8gbWVtb3J5LCBhbmQgZW5hYmxlIHBvd2Vyc2F2aW5nLiAq Lwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuYwo+IGluZGV4IDFjNTRi NTAzMDgwNy4uZGI5OWYyZTY3NmJiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3dvcmthcm91bmRzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93 b3JrYXJvdW5kcy5jCj4gQEAgLTEyNTksNiArMTI1OSwxMjYgQEAgdm9pZCBpbnRlbF9lbmdpbmVf YXBwbHlfd29ya2Fyb3VuZHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgCXdh X2xpc3RfYXBwbHkoZW5naW5lLT51bmNvcmUsICZlbmdpbmUtPndhX2xpc3QpOwo+ICAgfQo+ICAg Cj4gK3N0YXRpYyBzdHJ1Y3QgaTkxNV92bWEgKgo+ICtjcmVhdGVfc2NyYXRjaChzdHJ1Y3QgaTkx NV9hZGRyZXNzX3NwYWNlICp2bSwgaW50IGNvdW50KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqOwo+ICsJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gKwl1bnNpZ25lZCBp bnQgc2l6ZTsKPiArCWludCBlcnI7Cj4gKwo+ICsJc2l6ZSA9IHJvdW5kX3VwKGNvdW50ICogNCwg UEFHRV9TSVpFKTsKCnNpemVvZih1MzIpIGlmIHlvdSB3YW50LgoKPiArCW9iaiA9IGk5MTVfZ2Vt X29iamVjdF9jcmVhdGVfaW50ZXJuYWwodm0tPmk5MTUsIHNpemUpOwo+ICsJaWYgKElTX0VSUihv YmopKQo+ICsJCXJldHVybiBFUlJfQ0FTVChvYmopOwo+ICsKPiArCWk5MTVfZ2VtX29iamVjdF9z ZXRfY2FjaGVfY29oZXJlbmN5KG9iaiwgSTkxNV9DQUNIRV9MTEMpOwo+ICsKPiArCXZtYSA9IGk5 MTVfdm1hX2luc3RhbmNlKG9iaiwgdm0sIE5VTEwpOwo+ICsJaWYgKElTX0VSUih2bWEpKSB7Cj4g KwkJZXJyID0gUFRSX0VSUih2bWEpOwo+ICsJCWdvdG8gZXJyX29iajsKPiArCX0KPiArCj4gKwll cnIgPSBpOTE1X3ZtYV9waW4odm1hLCAwLCAwLAo+ICsJCQkgICBpOTE1X3ZtYV9pc19nZ3R0KHZt YSkgPyBQSU5fR0xPQkFMIDogUElOX1VTRVIpOwo+ICsJaWYgKGVycikKPiArCQlnb3RvIGVycl9v Ymo7Cj4gKwo+ICsJcmV0dXJuIHZtYTsKPiArCj4gK2Vycl9vYmo6Cj4gKwlpOTE1X2dlbV9vYmpl Y3RfcHV0KG9iaik7Cj4gKwlyZXR1cm4gRVJSX1BUUihlcnIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50Cj4gK3dhX2xpc3Rfc3JtKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAo+ICsJICAgIGNvbnN0 IHN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCwKPiArCSAgICBzdHJ1Y3QgaTkxNV92bWEgKnZtYSkK PiArewo+ICsJY29uc3Qgc3RydWN0IGk5MTVfd2EgKndhOwo+ICsJdTMyIHNybSwgKmNzOwo+ICsJ aW50IGk7CgpBIGxpdHRsZSBiaXQgb2YgaW5jb25zaXN0ZW5jeSBiZXR3ZWVuIHR5cGUgb2YgaSBo ZXJlIGFuZCBpbiAKZW5naW5lX3dhX2xpc3RfdmVyaWZ5LiBVcCB0byB5b3UuCgo+ICsKPiArCXNy bSA9IE1JX1NUT1JFX1JFR0lTVEVSX01FTSB8IE1JX1NSTV9MUk1fR0xPQkFMX0dUVDsKPiArCWlm IChJTlRFTF9HRU4ocnEtPmk5MTUpID49IDgpCj4gKwkJc3JtKys7Cj4gKwo+ICsJY3MgPSBpbnRl bF9yaW5nX2JlZ2luKHJxLCA0ICogd2FsLT5jb3VudCk7Cj4gKwlpZiAoSVNfRVJSKGNzKSkKPiAr CQlyZXR1cm4gUFRSX0VSUihjcyk7Cj4gKwo+ICsJZm9yIChpID0gMCwgd2EgPSB3YWwtPmxpc3Q7 IGkgPCB3YWwtPmNvdW50OyBpKyssIHdhKyspIHsKPiArCQkqY3MrKyA9IHNybTsKPiArCQkqY3Mr KyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KHdhLT5yZWcpOwo+ICsJCSpjcysrID0gaTkxNV9nZ3R0 X29mZnNldCh2bWEpICsgc2l6ZW9mKHUzMikgKiBpOwo+ICsJCSpjcysrID0gMDsKPiArCX0KPiAr CWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGVuZ2luZV93YV9saXN0X3ZlcmlmeShzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsCj4gKwkJCQkgY29uc3Qgc3RydWN0IGk5MTVfd2FfbGlzdCAqIGNvbnN0IHdhbCwK PiArCQkJCSBjb25zdCBjaGFyICpmcm9tKQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgaTkxNV93YSAq d2E7Cj4gKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKPiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1h Owo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwl1MzIgKnJlc3VsdHM7Cj4gKwlpbnQgZXJyOwo+ICsK PiArCWlmICghd2FsLT5jb3VudCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwl2bWEgPSBjcmVhdGVf c2NyYXRjaCgmZW5naW5lLT5pOTE1LT5nZ3R0LnZtLCB3YWwtPmNvdW50KTsKPiArCWlmIChJU19F UlIodm1hKSkKPiArCQlyZXR1cm4gUFRSX0VSUih2bWEpOwo+ICsKPiArCXJxID0gaTkxNV9yZXF1 ZXN0X2FsbG9jKGVuZ2luZSwgZW5naW5lLT5rZXJuZWxfY29udGV4dC0+Z2VtX2NvbnRleHQpOwo+ ICsJaWYgKElTX0VSUihycSkpIHsKPiArCQllcnIgPSBQVFJfRVJSKHJxKTsKPiArCQlnb3RvIGVy cl92bWE7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gd2FfbGlzdF9zcm0ocnEsIHdhbCwgdm1hKTsKPiAr CWlmIChlcnIpCj4gKwkJZ290byBlcnJfdm1hOwo+ICsKPiArCWk5MTVfcmVxdWVzdF9hZGQocnEp Owo+ICsJaWYgKGk5MTVfcmVxdWVzdF93YWl0KHJxLCBJOTE1X1dBSVRfTE9DS0VELCBIWiAvIDUp IDwgMCkgewoKV291bGRuJ3Q6CgplcnIgPSBpOTE1X3JlcXVlc3Rfd2FpdCguLi4KaWYgKGVyciA8 IDAgfHwgIWk5MTVfcmVxdWVzdF9jb21wbGV0ZWQoKSkKCmJlIG1vcmUgY29ycmVjdD8KCj4gKwkJ ZXJyID0gLUVUSU1FOwo+ICsJCWdvdG8gZXJyX3ZtYTsKPiArCX0KPiArCj4gKwlyZXN1bHRzID0g aTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAodm1hLT5vYmosIEk5MTVfTUFQX1dCKTsKPiArCWlmIChJ U19FUlIocmVzdWx0cykpIHsKPiArCQllcnIgPSBQVFJfRVJSKHJlc3VsdHMpOwo+ICsJCWdvdG8g ZXJyX3ZtYTsKPiArCX0KPiArCj4gKwllcnIgPSAwOwo+ICsJZm9yIChpID0gMCwgd2EgPSB3YWwt Pmxpc3Q7IGkgPCB3YWwtPmNvdW50OyBpKyssIHdhKyspCj4gKwkJaWYgKCF3YV92ZXJpZnkod2Es IHJlc3VsdHNbaV0sIHdhbC0+bmFtZSwgZnJvbSkpCj4gKwkJCWVyciA9IC1FTlhJTzsKPiArCj4g KwlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKHZtYS0+b2JqKTsKPiArCj4gK2Vycl92bWE6Cj4g KwlpOTE1X3ZtYV91bnBpbih2bWEpOwo+ICsJaTkxNV92bWFfcHV0KHZtYSk7Cj4gKwlyZXR1cm4g ZXJyOwo+ICt9Cj4gKwo+ICtpbnQgaW50ZWxfZW5naW5lX3ZlcmlmeV93b3JrYXJvdW5kcyhzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJCQkgICAgY29uc3QgY2hhciAqZnJvbSkK PiArewo+ICsJcmV0dXJuIGVuZ2luZV93YV9saXN0X3ZlcmlmeShlbmdpbmUsICZlbmdpbmUtPndh X2xpc3QsIGZyb20pOwo+ICt9Cj4gKwo+ICAgI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1 X1NFTEZURVNUKQo+ICAgI2luY2x1ZGUgInNlbGZ0ZXN0cy9pbnRlbF93b3JrYXJvdW5kcy5jIgo+ ICAgI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3dvcmth cm91bmRzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5oCj4gaW5k ZXggMzRlZWU1ZWM1MTFlLi5mZGY3ZWJiOTBmMjggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3dvcmthcm91bmRzLmgKPiBAQCAtMzAsNSArMzAsNyBAQCB2b2lkIGludGVsX2VuZ2lu ZV9hcHBseV93aGl0ZWxpc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiAgIAo+ ICAgdm9pZCBpbnRlbF9lbmdpbmVfaW5pdF93b3JrYXJvdW5kcyhzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpOwo+ICAgdm9pZCBpbnRlbF9lbmdpbmVfYXBwbHlfd29ya2Fyb3VuZHMoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiAraW50IGludGVsX2VuZ2luZV92ZXJpZnlf d29ya2Fyb3VuZHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQkJICAgIGNv bnN0IGNoYXIgKmZyb20pOwo+ICAgCj4gICAjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX3dvcmthcm91bmRzLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfd29ya2Fyb3VuZHMuYwo+IGluZGV4IDU2N2I2ZjhkYWU4 Ni4uYTM2Mzc0OGE3YTRmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9pbnRlbF93b3JrYXJvdW5kcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2ludGVsX3dvcmthcm91bmRzLmMKPiBAQCAtMzQwLDQ5ICszNDAsNiBAQCBzdGF0aWMg aW50IGNoZWNrX3doaXRlbGlzdF9hY3Jvc3NfcmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lLAo+ICAgCXJldHVybiBlcnI7Cj4gICB9Cj4gICAKPiAtc3RhdGljIHN0cnVjdCBpOTE1 X3ZtYSAqY3JlYXRlX3NjcmF0Y2goc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkKPiAtewo+ IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiAtCXN0cnVjdCBpOTE1X3ZtYSAq dm1hOwo+IC0Jdm9pZCAqcHRyOwo+IC0JaW50IGVycjsKPiAtCj4gLQlvYmogPSBpOTE1X2dlbV9v YmplY3RfY3JlYXRlX2ludGVybmFsKGN0eC0+aTkxNSwgUEFHRV9TSVpFKTsKPiAtCWlmIChJU19F UlIob2JqKSkKPiAtCQlyZXR1cm4gRVJSX0NBU1Qob2JqKTsKPiAtCj4gLQlpOTE1X2dlbV9vYmpl Y3Rfc2V0X2NhY2hlX2NvaGVyZW5jeShvYmosIEk5MTVfQ0FDSEVfTExDKTsKPiAtCj4gLQlwdHIg PSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChvYmosIEk5MTVfTUFQX1dCKTsKPiAtCWlmIChJU19F UlIocHRyKSkgewo+IC0JCWVyciA9IFBUUl9FUlIocHRyKTsKPiAtCQlnb3RvIGVycl9vYmo7Cj4g LQl9Cj4gLQltZW1zZXQocHRyLCAweGM1LCBQQUdFX1NJWkUpOwo+IC0JaTkxNV9nZW1fb2JqZWN0 X2ZsdXNoX21hcChvYmopOwo+IC0JaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcChvYmopOwo+IC0K PiAtCXZtYSA9IGk5MTVfdm1hX2luc3RhbmNlKG9iaiwgJmN0eC0+cHBndHQtPnZtLCBOVUxMKTsK PiAtCWlmIChJU19FUlIodm1hKSkgewo+IC0JCWVyciA9IFBUUl9FUlIodm1hKTsKPiAtCQlnb3Rv IGVycl9vYmo7Cj4gLQl9Cj4gLQo+IC0JZXJyID0gaTkxNV92bWFfcGluKHZtYSwgMCwgMCwgUElO X1VTRVIpOwo+IC0JaWYgKGVycikKPiAtCQlnb3RvIGVycl9vYmo7Cj4gLQo+IC0JZXJyID0gaTkx NV9nZW1fb2JqZWN0X3NldF90b19jcHVfZG9tYWluKG9iaiwgZmFsc2UpOwo+IC0JaWYgKGVycikK PiAtCQlnb3RvIGVycl9vYmo7Cj4gLQo+IC0JcmV0dXJuIHZtYTsKPiAtCj4gLWVycl9vYmo6Cj4g LQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gLQlyZXR1cm4gRVJSX1BUUihlcnIpOwo+IC19 Cj4gLQo+ICAgc3RhdGljIHN0cnVjdCBpOTE1X3ZtYSAqY3JlYXRlX2JhdGNoKHN0cnVjdCBpOTE1 X2dlbV9jb250ZXh0ICpjdHgpCj4gICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iajsKPiBAQCAtNDc1LDcgKzQzMiw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfZGlydHlfd2hpdGVs aXN0KHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gICAJaW50IGVyciA9IDAsIGksIHY7 Cj4gICAJdTMyICpjcywgKnJlc3VsdHM7Cj4gICAKPiAtCXNjcmF0Y2ggPSBjcmVhdGVfc2NyYXRj aChjdHgpOwo+ICsJc2NyYXRjaCA9IGNyZWF0ZV9zY3JhdGNoKCZjdHgtPnBwZ3R0LT52bSwgMiAq IEFSUkFZX1NJWkUodmFsdWVzKSArIDEpOwo+ICAgCWlmIChJU19FUlIoc2NyYXRjaCkpCj4gICAJ CXJldHVybiBQVFJfRVJSKHNjcmF0Y2gpOwo+ICAgCj4gQEAgLTc1Miw5ICs3MDksMTEgQEAgc3Rh dGljIGJvb2wgdmVyaWZ5X2d0X2VuZ2luZV93YShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSwKPiAgIAo+ICAgCW9rICY9IHdhX2xpc3RfdmVyaWZ5KCZpOTE1LT51bmNvcmUsICZsaXN0cy0+ Z3Rfd2FfbGlzdCwgc3RyKTsKPiAgIAo+IC0JZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkxNSwg aWQpCj4gLQkJb2sgJj0gd2FfbGlzdF92ZXJpZnkoZW5naW5lLT51bmNvcmUsCj4gLQkJCQkgICAg ICZsaXN0cy0+ZW5naW5lW2lkXS53YV9saXN0LCBzdHIpOwo+ICsJZm9yX2VhY2hfZW5naW5lKGVu Z2luZSwgaTkxNSwgaWQpIHsKPiArCQlvayAmPSBlbmdpbmVfd2FfbGlzdF92ZXJpZnkoZW5naW5l LAo+ICsJCQkJCSAgICAmbGlzdHMtPmVuZ2luZVtpZF0ud2FfbGlzdCwKPiArCQkJCQkgICAgc3Ry KSA9PSAwOwo+ICsJfQo+ICAgCj4gICAJcmV0dXJuIG9rOwo+ICAgfQo+IAoKCk9rYXkgc28gTU1J TyB2ZXJpZmljYXRpb24gaGFwcGVucyBpbW1lZGlhdGVseSBhZnRlciBhcHBsaWNhdGlvbiBhbmQg d2l0aCAKU1JNIGZyb20gc2VsZnRlc3RzLgoKV2hhdCBhYm91dCB0aGUgY29udGV4dCB3b3JrYXJv dW5kcz8gV2l0aCB0aGUgU1JNIGluZnJhc3RydWN0dXJlIHRob3NlIApjb3VsZCBiZSB2ZXJpZmll ZCBlYXNpbHkgYXMgd2VsbCBJIHRoaW5rLgoKUmVnYXJkcywKClR2cnRrbwpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=