From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Harrison Subject: Re: [PATCH] drm/i915: Implement read-only support in whitelist selftest Date: Tue, 2 Jul 2019 19:20:14 -0700 Message-ID: <33d2cc9f-da69-c3ea-534e-7b39c2406f92@Intel.com> References: <6d8350d9-7078-96d5-eba8-e8a894500492@linux.intel.com> <20190618195421.31027-1-John.C.Harrison@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5C71C89F24 for ; Wed, 3 Jul 2019 02:20:15 +0000 (UTC) In-Reply-To: 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: Tvrtko Ursulin , Intel-GFX@Lists.FreeDesktop.Org List-Id: intel-gfx@lists.freedesktop.org UGF0Y2hlcyBzZW50LgoKSSBoYXZlbid0IG1hZGUgYW55IGNoYW5nZXMgdG8gZG1lc2cgb3V0cHV0 IGFzIEknbSBub3Qgc3VyZSB3aGF0IHlvdSBtZWFuLgoKQWgsIGRvIHlvdSBtZWFuIHRoZSBkZWJ1 ZyBwcmludCBpbiB3YV9pbml0X2ZpbmlzaCgpPyBTdXJlLCBJIGNhbiBhZGQgdGhlIAplbmdpbmUg bmFtZSB0byB0aGF0LgoKSm9obi4KCgpPbiA2LzI1LzIwMTkgMDE6MzMsIFR2cnRrbyBVcnN1bGlu IHdyb3RlOgo+Cj4gUGluZy4KPgo+IFdlIGFncmVlZCB0byBmb2xsb3cgdXAgd2l0aCBhIHRlc3Qg QVNBUCBhZnRlciBtZXJnaW5nLgo+Cj4gSGVyZSdzIGFub3RoZXIgZmVhdHVyZSByZXF1ZXN0IGZv ciB5b3U6IEFkZCBlbmdpbmUtPm5hbWUgbG9nZ2luZyB0byAKPiB3YV9pbml0X3N0YXJ0IGluIGlu dGVsX2VuZ2luZV9pbml0X3doaXRlbGlzdC4gQmVjYXVzZSB3aXRoIHRoZSBjaGFuZ2UgCj4gdG8g YWRkIHdoaXRlbGlzdCBvbiBvdGhlciBlbmdpbmVzIHRoZXJlIGFyZSBub3cgbXVsdGlwbGUgaWRl bnRpY2FsIAo+IGxpbmVzIGluIGRtZXNnLgo+Cj4gVG8gc3VtIHVwIHRoYXQncyB0aHJlZSB0b2Rv IGl0ZW1zOgo+Cj4gMS4gUmVzZW5kIHRoZSBzZWxmdGVzdCBmb3IgQ0kuCj4gMi4gQWRkIEdFTV9C VUdfT04gZm9yIHJlZy0+ZmxhZ3MgY2hlY2tpbmcgaW52YWxpZCBmbGFnIHVzYWdlLgo+IDMuIElt cHJvdmUgZG1lc2cgc28gd2Uga25vdyB3aGljaCBlbmdpbmUgZ290IGhvdyBtYW55IHdoaXRlbGlz dCBlbnRyaWVzLgo+Cj4gVGhhbmtzLAo+Cj4gVHZydGtvCj4KPiBPbiAyMC8wNi8yMDE5IDE2OjQz LCBUdnJ0a28gVXJzdWxpbiB3cm90ZToKPj4KPj4gSGksCj4+Cj4+IFlvdSB3aWxsIG5lZWQgdG8g c2VuZCB0aGlzIG5vdCBhcyByZXBseSB0byB0aGlzIHRocmVhZCBzbyBpdCBpcyAKPj4gcGlja2Vk IHVwIGJ5IENJIGFuZCB0aGVuIGNhbiBiZSBtZXJnZWQuCj4+Cj4+IEJ1dCBwbGVhc2UgYWxzbyBh ZGQgYSBwYXRjaCB3aGljaCBhZGRzIHRoYXQgR0VNX0JVR19PTiByZWctPmZsYWdzIAo+PiBjaGVj ayB3ZSB0YWxrZWQgYWJvdXQuCj4+Cj4+IFJlZ2FyZHMsCj4+Cj4+IFR2cnRrbwo+Pgo+PiBPbiAx OC8wNi8yMDE5IDIwOjU0LCBKb2huLkMuSGFycmlzb25ASW50ZWwuY29tIHdyb3RlOgo+Pj4gRnJv bTogSm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29uQEludGVsLmNvbT4KPj4+Cj4+PiBOZXdl ciBoYXJkd2FyZSBzdXBwb3J0cyBleHRyYSBmZWF0dXJlIGluIHRoZSB3aGl0ZWxpc3QgcmVnaXN0 ZXJzLiBUaGlzCj4+PiBwYXRjaCB1cGRhdGVzIHRoZSBzZWxmdGVzdCB0byB0ZXN0IHRoYXQgZW50 cmllcyBtYXJrZWQgYXMgcmVhZCBvbmx5Cj4+PiBhcmUgYWN0dWFsbHkgcmVhZCBvbmx5Lgo+Pj4K Pj4+IEFsc28gdXBkYXRlZCB0aGUgcmVhZC93cml0ZSBhY2Nlc3MgZGVmaW5pdGlvbnMgdG8gbWFr ZSBpdCBjbGVhcmVyIHRoYXQKPj4+IHRoZXkgYXJlIGFuIGVudW0gZmllbGQgbm90IGEgc2V0IG9m IHNpbmdsZSBiaXQgZmxhZ3MuCj4+Pgo+Pj4gU2lnbmVkLW9mZi1ieTogSm9obiBIYXJyaXNvbiA8 Sm9obi5DLkhhcnJpc29uQEludGVsLmNvbT4KPj4+IENDOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtv LnVyc3VsaW5AaW50ZWwuY29tPgo+Pj4gLS0tCj4+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF93b3JrYXJvdW5kcy5jwqDCoCB8wqAgOCArLS0KPj4+IMKgIC4uLi9ncHUvZHJtL2k5 MTUvZ3Qvc2VsZnRlc3Rfd29ya2Fyb3VuZHMuY8KgwqDCoCB8IDUzIAo+Pj4gKysrKysrKysrKysr Ky0tLS0tLQo+Pj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgfMKgIDkgKystLQo+Pj4gwqAgMyBmaWxlcyBjaGFuZ2VkLCA0OCBp bnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfd29ya2Fyb3VuZHMuYyAKPj4+IGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfd29ya2Fyb3VuZHMuYwo+Pj4gaW5kZXggOTNjYWE3YjZkN2E5Li40 NDI5ZWUwOGIyMGUgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF93b3JrYXJvdW5kcy5jCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF93 b3JrYXJvdW5kcy5jCj4+PiBAQCAtMTAyOCw3ICsxMDI4LDcgQEAgd2hpdGVsaXN0X3JlZ19leHQo c3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsLCAKPj4+IGk5MTVfcmVnX3QgcmVnLCB1MzIgZmxhZ3Mp Cj4+PiDCoCBzdGF0aWMgdm9pZAo+Pj4gwqAgd2hpdGVsaXN0X3JlZyhzdHJ1Y3QgaTkxNV93YV9s aXN0ICp3YWwsIGk5MTVfcmVnX3QgcmVnKQo+Pj4gwqAgewo+Pj4gLcKgwqDCoCB3aGl0ZWxpc3Rf cmVnX2V4dCh3YWwsIHJlZywgUklOR19GT1JDRV9UT19OT05QUklWX1JXKTsKPj4+ICvCoMKgwqAg d2hpdGVsaXN0X3JlZ19leHQod2FsLCByZWcsIFJJTkdfRk9SQ0VfVE9fTk9OUFJJVl9BQ0NFU1Nf UlcpOwo+Pj4gwqAgfQo+Pj4gwqAgc3RhdGljIHZvaWQgZ2VuOV93aGl0ZWxpc3RfYnVpbGQoc3Ry dWN0IGk5MTVfd2FfbGlzdCAqdykKPj4+IEBAIC0xMTM0LDEzICsxMTM0LDEzIEBAIHByaW50ayhL RVJOX0lORk8gIiUtMzJzOiU0ZD4gQm9vISBbZW5naW5lID0gCj4+PiAlcywgaW5zdGFuY2UgPSAl ZCwgYmFzZSA9IDB4JVgsIHJlZwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIC8qIGh1Y1N0YXR1c1Jl Z09mZnNldCAqLwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHdoaXRlbGlzdF9yZWdfZXh0KHcsIF9N TUlPKDB4MjAwMCArIGVuZ2luZS0+bW1pb19iYXNlKSwKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIFJJTkdfRk9SQ0VfVE9fTk9OUFJJVl9SRCk7Cj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBSSU5HX0ZPUkNFX1RPX05PTlBSSVZfQUNDRVNTX1JE KTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBodWNVS2VybmVsSGRySW5mb1JlZ09mZnNldCAq Lwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHdoaXRlbGlzdF9yZWdfZXh0KHcsIF9NTUlPKDB4MjAx NCArIGVuZ2luZS0+bW1pb19iYXNlKSwKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIFJJTkdfRk9SQ0VfVE9fTk9OUFJJVl9SRCk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBSSU5HX0ZPUkNFX1RPX05PTlBSSVZfQUNDRVNTX1JEKTsKPj4+IMKg wqDCoMKgwqDCoMKgwqDCoCAvKiBodWNTdGF0dXMyUmVnT2Zmc2V0ICovCj4+PiDCoMKgwqDCoMKg wqDCoMKgwqAgd2hpdGVsaXN0X3JlZ19leHQodywgX01NSU8oMHgyM0IwICsgZW5naW5lLT5tbWlv X2Jhc2UpLAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUklOR19GT1JD RV9UT19OT05QUklWX1JEKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFJJTkdfRk9SQ0VfVE9fTk9OUFJJVl9BQ0NFU1NfUkQpOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg IGJyZWFrOwo+Pj4gwqDCoMKgwqDCoCBkZWZhdWx0Ogo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3dvcmthcm91bmRzLmMgCj4+PiBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3dvcmthcm91bmRzLmMKPj4+IGluZGV4IGViNmQzYWEyYzhj Yy4uYTBhODhlYzY2ODYxIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv c2VsZnRlc3Rfd29ya2Fyb3VuZHMuYwo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv c2VsZnRlc3Rfd29ya2Fyb3VuZHMuYwo+Pj4gQEAgLTM5OSw2ICszOTksMTAgQEAgc3RhdGljIGJv b2wgd29fcmVnaXN0ZXIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAKPj4+ICplbmdpbmUsIHUzMiBy ZWcpCj4+PiDCoMKgwqDCoMKgIGVudW0gaW50ZWxfcGxhdGZvcm0gcGxhdGZvcm0gPSAKPj4+IElO VEVMX0lORk8oZW5naW5lLT5pOTE1KS0+cGxhdGZvcm07Cj4+PiDCoMKgwqDCoMKgIGludCBpOwo+ Pj4gK8KgwqDCoCBpZiAoKHJlZyAmIFJJTkdfRk9SQ0VfVE9fTk9OUFJJVl9BQ0NFU1NfTUFTSykg PT0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgIFJJTkdfRk9SQ0VfVE9fTk9OUFJJVl9BQ0NFU1NfV1Ip Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHRydWU7Cj4+PiArCj4+PiDCoMKgwqDCoMKgIGZv ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdvX3JlZ2lzdGVycyk7IGkrKykgewo+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgIGlmICh3b19yZWdpc3RlcnNbaV0ucGxhdGZvcm0gPT0gcGxhdGZvcm0gJiYK Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHdvX3JlZ2lzdGVyc1tpXS5yZWcgPT0gcmVn KQo+Pj4gQEAgLTQxMCw3ICs0MTQsOCBAQCBzdGF0aWMgYm9vbCB3b19yZWdpc3RlcihzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzIAo+Pj4gKmVuZ2luZSwgdTMyIHJlZykKPj4+IMKgIHN0YXRpYyBib29s IHJvX3JlZ2lzdGVyKHUzMiByZWcpCj4+PiDCoCB7Cj4+PiAtwqDCoMKgIGlmIChyZWcgJiBSSU5H X0ZPUkNFX1RPX05PTlBSSVZfUkQpCj4+PiArwqDCoMKgIGlmICgocmVnICYgUklOR19GT1JDRV9U T19OT05QUklWX0FDQ0VTU19NQVNLKSA9PQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqAgUklOR19GT1JD RV9UT19OT05QUklWX0FDQ0VTU19SRCkKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gdHJ1 ZTsKPj4+IMKgwqDCoMKgwqAgcmV0dXJuIGZhbHNlOwo+Pj4gQEAgLTQ4MiwxMiArNDg3LDEyIEBA IHN0YXRpYyBpbnQgY2hlY2tfZGlydHlfd2hpdGVsaXN0KHN0cnVjdCAKPj4+IGk5MTVfZ2VtX2Nv bnRleHQgKmN0eCwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgc3JtLCBscm0sIHJzdmQ7Cj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGV4cGVjdDsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBp bnQgaWR4Owo+Pj4gK8KgwqDCoMKgwqDCoMKgIGJvb2wgcm9fcmVnOwo+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgIGlmICh3b19yZWdpc3RlcihlbmdpbmUsIHJlZykpCj4+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBjb250aW51ZTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAocm9fcmVnaXN0ZXIo cmVnKSkKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+Pj4gK8KgwqDCoMKg wqDCoMKgIHJvX3JlZyA9IHJvX3JlZ2lzdGVyKHJlZyk7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAg c3JtID0gTUlfU1RPUkVfUkVHSVNURVJfTUVNOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGxybSA9 IE1JX0xPQURfUkVHSVNURVJfTUVNOwo+Pj4gQEAgLTU4OCwyNCArNTkzLDM2IEBAIHN0YXRpYyBp bnQgY2hlY2tfZGlydHlfd2hpdGVsaXN0KHN0cnVjdCAKPj4+IGk5MTVfZ2VtX2NvbnRleHQgKmN0 eCwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgR0VNX0JV R19PTih2YWx1ZXNbQVJSQVlfU0laRSh2YWx1ZXMpIC0gMV0gIT0gMHhmZmZmZmZmZik7Cj4+PiAt wqDCoMKgwqDCoMKgwqAgcnN2ZCA9IHJlc3VsdHNbQVJSQVlfU0laRSh2YWx1ZXMpXTsgLyogZGV0 ZWN0IHdyaXRlIG1hc2tpbmcgKi8KPj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAoIXJzdmQpIHsKPj4+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByX2VycigiJXM6IFVuYWJsZSB0byB3cml0ZSB0byB3 aGl0ZWxpc3RlZCByZWdpc3RlciAleFxuIiwKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZW5naW5lLT5uYW1lLCByZWcpOwo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZXJyID0gLUVJTlZBTDsKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0X3Vu cGluOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyb19yZWcpIHsKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHJzdmQgPSAweEZGRkZGRkZGOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0gZWxzZSB7 Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByc3ZkID0gcmVzdWx0c1tBUlJBWV9TSVpFKHZh bHVlcyldOyAvKiBkZXRlY3Qgd3JpdGUgCj4+PiBtYXNraW5nICovCj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAoIXJzdmQpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcHJfZXJyKCIlczogVW5hYmxlIHRvIHdyaXRlIHRvIHdoaXRlbGlzdGVkIHJlZ2lzdGVyIAo+ Pj4gJXhcbiIsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZW5naW5lLT5uYW1lLCByZWcpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBlcnIgPSAtRUlOVkFMOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3Rv IG91dF91bnBpbjsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+IMKgwqDCoMKgwqDC oMKgwqDCoCB9Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZXhwZWN0ID0gcmVzdWx0c1swXTsKPj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBpZHggPSAxOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGZvciAo diA9IDA7IHYgPCBBUlJBWV9TSVpFKHZhbHVlcyk7IHYrKykgewo+Pj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZXhwZWN0ID0gcmVnX3dyaXRlKGV4cGVjdCwgdmFsdWVzW3ZdLCByc3ZkKTsKPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyb19yZWcpCj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGV4cGVjdCA9IHJlc3VsdHNbMF07Cj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBlbHNlCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGV4cGVjdCA9 IHJlZ193cml0ZShleHBlY3QsIHZhbHVlc1t2XSwgcnN2ZCk7Cj4+PiArCj4+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpZiAocmVzdWx0c1tpZHhdICE9IGV4cGVjdCkKPj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyKys7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpZHgrKzsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiDCoMKgwqDCoMKgwqDC oMKgwqAgZm9yICh2ID0gMDsgdiA8IEFSUkFZX1NJWkUodmFsdWVzKTsgdisrKSB7Cj4+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBleHBlY3QgPSByZWdfd3JpdGUoZXhwZWN0LCB+dmFsdWVzW3Zd LCByc3ZkKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyb19yZWcpCj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGV4cGVjdCA9IHJlc3VsdHNbMF07Cj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBlbHNlCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGV4cGVjdCA9IHJlZ193cml0ZShleHBlY3QsIH52YWx1ZXNbdl0sIHJzdmQpOwo+Pj4gKwo+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJlc3VsdHNbaWR4XSAhPSBleHBlY3Qp Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVycisrOwo+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaWR4Kys7Cj4+PiBAQCAtNjIyLDcgKzYzOSwxMCBAQCBzdGF0 aWMgaW50IGNoZWNrX2RpcnR5X3doaXRlbGlzdChzdHJ1Y3QgCj4+PiBpOTE1X2dlbV9jb250ZXh0 ICpjdHgsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgKHYgPSAwOyB2IDwgQVJS QVlfU0laRSh2YWx1ZXMpOyB2KyspIHsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgdTMyIHcgPSB2YWx1ZXNbdl07Cj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGV4cGVjdCA9IHJlZ193cml0ZShleHBlY3QsIHcsIHJzdmQpOwo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocm9fcmVnKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGV4cGVjdCA9IHJlc3VsdHNbMF07Cj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGVsc2UKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBleHBlY3QgPSByZWdfd3JpdGUoZXhwZWN0LCB3LCByc3ZkKTsKPj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJfaW5mbygiV3JvdGUgJTA4eCwgcmVhZCAl MDh4LCBleHBlY3QgJTA4eFxuIiwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB3LCByZXN1bHRzW2lkeF0sIGV4cGVjdCk7Cj4+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlkeCsrOwo+Pj4gQEAgLTYzMCw3ICs2NTAsMTAgQEAgc3RhdGlj IGludCBjaGVja19kaXJ0eV93aGl0ZWxpc3Qoc3RydWN0IAo+Pj4gaTkxNV9nZW1fY29udGV4dCAq Y3R4LAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yICh2ID0gMDsgdiA8IEFSUkFZ X1NJWkUodmFsdWVzKTsgdisrKSB7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHUzMiB3ID0gfnZhbHVlc1t2XTsKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZXhwZWN0ID0gcmVnX3dyaXRlKGV4cGVjdCwgdywgcnN2ZCk7Cj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyb19yZWcpCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZXhwZWN0ID0gcmVzdWx0c1swXTsKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZWxzZQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGV4cGVjdCA9IHJlZ193cml0ZShleHBlY3QsIHcsIHJzdmQpOwo+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcl9pbmZvKCJXcm90ZSAlMDh4LCByZWFkICUw OHgsIGV4cGVjdCAlMDh4XG4iLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHcsIHJlc3VsdHNbaWR4XSwgZXhwZWN0KTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaWR4Kys7Cj4+PiBAQCAtNzYyLDggKzc4NSw4IEBAIHN0YXRpYyBp bnQgcmVhZF93aGl0ZWxpc3RlZF9yZWdpc3RlcnMoc3RydWN0IAo+Pj4gaTkxNV9nZW1fY29udGV4 dCAqY3R4LAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHU2NCBvZmZzZXQgPSByZXN1bHRzLT5ub2Rl LnN0YXJ0ICsgc2l6ZW9mKHUzMikgKiBpOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiByZWcg PSAKPj4+IGk5MTVfbW1pb19yZWdfb2Zmc2V0KGVuZ2luZS0+d2hpdGVsaXN0Lmxpc3RbaV0ucmVn KTsKPj4+IC3CoMKgwqDCoMKgwqDCoCAvKiBDbGVhciBSRCBvbmx5IGFuZCBXUiBvbmx5IGZsYWdz ICovCj4+PiAtwqDCoMKgwqDCoMKgwqAgcmVnICY9IH4oUklOR19GT1JDRV9UT19OT05QUklWX1JE IHwgUklOR19GT1JDRV9UT19OT05QUklWX1dSKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBDbGVh ciBhY2Nlc3MgcGVybWlzc2lvbiBmaWVsZCAqLwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJlZyAmPSB+ UklOR19GT1JDRV9UT19OT05QUklWX0FDQ0VTU19NQVNLOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg ICpjcysrID0gc3JtOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgICpjcysrID0gcmVnOwo+Pj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggCj4+PiBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPj4+IGluZGV4IGNjMjk1YTRmNmU5Mi4uYmEyMmUzYjhm NzdlIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+Pj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+Pj4gQEAgLTI1MTMsMTMgKzI1 MTMsMTYgQEAgZW51bSBpOTE1X3Bvd2VyX3dlbGxfaWQgewo+Pj4gwqAgI2RlZmluZcKgwqAgUklO R19XQUlUX1NFTUFQSE9SRcKgwqDCoCAoMSA8PCAxMCkgLyogZ2VuNisgKi8KPj4+IMKgICNkZWZp bmUgUklOR19GT1JDRV9UT19OT05QUklWKGJhc2UsIGkpIF9NTUlPKCgoYmFzZSkgKyAweDREMCkg KyAKPj4+IChpKSAqIDQpCj4+PiAtI2RlZmluZcKgwqAgUklOR19GT1JDRV9UT19OT05QUklWX1JX wqDCoMKgwqDCoMKgwqAgKDAgPDwgMjgpIC8qIENGTCsgJiAKPj4+IEdlbjExKyAqLwo+Pj4gLSNk ZWZpbmXCoMKgIFJJTkdfRk9SQ0VfVE9fTk9OUFJJVl9SRMKgwqDCoMKgwqDCoMKgICgxIDw8IDI4 KQo+Pj4gLSNkZWZpbmXCoMKgIFJJTkdfRk9SQ0VfVE9fTk9OUFJJVl9XUsKgwqDCoMKgwqDCoMKg ICgyIDw8IDI4KQo+Pj4gKyNkZWZpbmXCoMKgIFJJTkdfRk9SQ0VfVE9fTk9OUFJJVl9BQ0NFU1Nf UlfCoMKgwqAgKDAgPDwgMjgpwqDCoMKgIC8qIENGTCsgJiAKPj4+IEdlbjExKyAqLwo+Pj4gKyNk ZWZpbmXCoMKgIFJJTkdfRk9SQ0VfVE9fTk9OUFJJVl9BQ0NFU1NfUkTCoMKgwqAgKDEgPDwgMjgp Cj4+PiArI2RlZmluZcKgwqAgUklOR19GT1JDRV9UT19OT05QUklWX0FDQ0VTU19XUsKgwqDCoCAo MiA8PCAyOCkKPj4+ICsjZGVmaW5lwqDCoCBSSU5HX0ZPUkNFX1RPX05PTlBSSVZfQUNDRVNTX0lO VkFMSUTCoMKgwqAgKDMgPDwgMjgpCj4+PiArI2RlZmluZcKgwqAgUklOR19GT1JDRV9UT19OT05Q UklWX0FDQ0VTU19NQVNLwqDCoMKgICgzIDw8IDI4KQo+Pj4gwqAgI2RlZmluZcKgwqAgUklOR19G T1JDRV9UT19OT05QUklWX1JBTkdFXzHCoMKgwqDCoMKgwqDCoCAoMCA8PCAwKcKgwqDCoMKgIC8q IAo+Pj4gQ0ZMKyAmIEdlbjExKyAqLwo+Pj4gwqAgI2RlZmluZcKgwqAgUklOR19GT1JDRV9UT19O T05QUklWX1JBTkdFXzTCoMKgwqDCoMKgwqDCoCAoMSA8PCAwKQo+Pj4gwqAgI2RlZmluZcKgwqAg UklOR19GT1JDRV9UT19OT05QUklWX1JBTkdFXzE2wqDCoMKgICgyIDw8IDApCj4+PiDCoCAjZGVm aW5lwqDCoCBSSU5HX0ZPUkNFX1RPX05PTlBSSVZfUkFOR0VfNjTCoMKgwqAgKDMgPDwgMCkKPj4+ ICsjZGVmaW5lwqDCoCBSSU5HX0ZPUkNFX1RPX05PTlBSSVZfUkFOR0VfTUFTS8KgwqDCoCAoMyA8 PCAwKQo+Pj4gwqAgI2RlZmluZcKgwqAgUklOR19NQVhfTk9OUFJJVl9TTE9UU8KgIDEyCj4+PiDC oCAjZGVmaW5lIEdFTjdfVExCX1JEX0FERFLCoMKgwqAgX01NSU8oMHg0NzAwKQo+Pj4KCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWls aW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==