From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: Re: [PATCH v5 7/7] drm/i915: Expose RPCS (SSEU) configuration to userspace Date: Mon, 21 May 2018 17:14:44 +0100 Message-ID: <823d7840-512c-ad2a-3ca1-e9dc468f7531@intel.com> References: <20180514155600.16521-1-lionel.g.landwerlin@intel.com> <20180514155600.16521-8-lionel.g.landwerlin@intel.com> <7292244d-bb21-c8c1-2992-bbbae84d3df0@intel.com> <710416b9-2ce8-2201-cb5c-104c8534f0b0@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id E91376E101 for ; Mon, 21 May 2018 16:14:47 +0000 (UTC) In-Reply-To: <710416b9-2ce8-2201-cb5c-104c8534f0b0@linux.intel.com> 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 T24gMjEvMDUvMTggMTc6MDAsIFR2cnRrbyBVcnN1bGluIHdyb3RlOgo+Cj4gT24gMjEvMDUvMjAx OCAxNDoyMiwgTGlvbmVsIExhbmR3ZXJsaW4gd3JvdGU6Cj4+IE9uIDE1LzA1LzE4IDEwOjA1LCBU dnJ0a28gVXJzdWxpbiB3cm90ZToKPj4+Cj4+PiBPbiAxNC8wNS8yMDE4IDE2OjU2LCBMaW9uZWwg TGFuZHdlcmxpbiB3cm90ZToKPj4+PiBGcm9tOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdp bHNvbi5jby51az4KPj4+Pgo+Pj4+IFdlIHdhbnQgdG8gYWxsb3cgdXNlcnNwYWNlIHRvIHJlY29u ZmlndXJlIHRoZSBzdWJzbGljZSAKPj4+PiBjb25maWd1cmF0aW9uIGZvcgo+Pj4+IGl0cyBvd24g dXNlIGNhc2UuIFRvIGRvIHNvLCB3ZSBleHBvc2UgYSBjb250ZXh0IHBhcmFtZXRlciB0byBhbGxv dwo+Pj4+IGFkanVzdG1lbnQgb2YgdGhlIFJQQ1MgcmVnaXN0ZXIgc3RvcmVkIHdpdGhpbiB0aGUg Y29udGV4dCBpbWFnZSAoYW5kCj4+Pj4gY3VycmVudGx5IG5vdCBhY2Nlc3NpYmxlIHZpYSBMUkkp LiBJZiB0aGUgY29udGV4dCBpcyBhZGp1c3RlZCBiZWZvcmUKPj4+PiBmaXJzdCB1c2UsIHRoZSBh ZGp1c3RtZW50IGlzIGZvciAiZnJlZSI7IG90aGVyd2lzZSBpZiB0aGUgY29udGV4dCBpcwo+Pj4+ IGFjdGl2ZSB3ZSBmbHVzaCB0aGUgY29udGV4dCBvZmYgdGhlIEdQVSAoc3RhbGxpbmcgYWxsIHVz ZXJzKSBhbmQgCj4+Pj4gZm9yY2luZwo+Pj4+IHRoZSBHUFUgdG8gc2F2ZSB0aGUgY29udGV4dCB0 byBtZW1vcnkgd2hlcmUgd2UgY2FuIG1vZGlmeSBpdCBhbmQgc28KPj4+PiBlbnN1cmUgdGhhdCB0 aGUgcmVnaXN0ZXIgaXMgcmVsb2FkZWQgb24gbmV4dCBleGVjdXRpb24uCj4+Pj4KPj4+PiBUaGUg b3ZlcmhlYWQgb2YgbWFuYWdpbmcgYWRkaXRpb25hbCBFVSBzdWJzbGljZXMgY2FuIGJlIHNpZ25p ZmljYW50LAo+Pj4+IGVzcGVjaWFsbHkgaW4gbXVsdGktY29udGV4dCB3b3JrbG9hZHMuIE5vbi1H UEdQVSBjb250ZXh0cyBzaG91bGQKPj4+PiBwcmVmZXJhYmx5IGRpc2FibGUgdGhlIHN1YnNsaWNl cyBpdCBpcyBub3QgdXNpbmcsIGFuZCBvdGhlcnMgc2hvdWxkCj4+Pj4gZmluZS10dW5lIHRoZSBu dW1iZXIgdG8gbWF0Y2ggdGhlaXIgd29ya2xvYWQuCj4+Pj4KPj4+PiBXZSBleHBvc2UgY29tcGxl dGUgY29udHJvbCBvdmVyIHRoZSBSUENTIHJlZ2lzdGVyLCBhbGxvd2luZwo+Pj4+IGNvbmZpZ3Vy YXRpb24gb2Ygc2xpY2Uvc3Vic2xpY2UsIHZpYSBtYXNrcyBwYWNrZWQgaW50byBhIHU2NCBmb3IK Pj4+PiBzaW1wbGljaXR5LiBGb3IgZXhhbXBsZSwKPj4+Pgo+Pj4+IMKgwqDCoMKgc3RydWN0IGRy bV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZzsKPj4+PiDCoMKgwqDCoHN0cnVjdCBkcm1faTkx NV9nZW1fY29udGV4dF9wYXJhbV9zc2V1IHNzZXUgPSB7IC5jbGFzcyA9IDAsCj4+Pj4gLmluc3Rh bmNlID0gMCwgfTsKPj4+Pgo+Pj4+IMKgwqDCoMKgbWVtc2V0KCZhcmcsIDAsIHNpemVvZihhcmcp KTsKPj4+PiDCoMKgwqDCoGFyZy5jdHhfaWQgPSBjdHg7Cj4+Pj4gwqDCoMKgwqBhcmcucGFyYW0g PSBJOTE1X0NPTlRFWFRfUEFSQU1fU1NFVTsKPj4+PiDCoMKgwqDCoGFyZy52YWx1ZSA9ICh1aW50 cHRyX3QpICZzc2V1Owo+Pj4+IMKgwqDCoMKgaWYgKGRybUlvY3RsKGZkLCBEUk1fSU9DVExfSTkx NV9HRU1fQ09OVEVYVF9HRVRQQVJBTSwgJmFyZykgPT0gCj4+Pj4gMCkgewo+Pj4+IMKgwqDCoMKg wqDCoMKgIHNzZXUucGFja2VkLnN1YnNsaWNlX21hc2sgPSAwOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDC oMKgwqAgZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9DT05URVhUX1NFVFBBUkFNLCAm YXJnKTsKPj4+PiDCoMKgwqDCoH0KPj4+Pgo+Pj4+IGNvdWxkIGJlIHVzZWQgdG8gZGlzYWJsZSBh bGwgc3Vic2xpY2VzIHdoZXJlIHN1cHBvcnRlZC4KPj4+Pgo+Pj4+IHYyOiBGaXggb2Zmc2V0IG9m IENUWF9SX1BXUl9DTEtfU1RBVEUgaW4gCj4+Pj4gaW50ZWxfbHJfY29udGV4dF9zZXRfc3NldSgp IChMaW9uZWwpCj4+Pj4KPj4+PiB2MzogQWRkIGFiaWxpdHkgdG8gcHJvZ3JhbSB0aGlzIHBlciBl bmdpbmUgKENocmlzKQo+Pj4+Cj4+Pj4gdjQ6IE1vdmUgbW9zdCBnZXRfc3NldSgpIGludG8gaTkx NV9nZW1fY29udGV4dC5jIChMaW9uZWwpCj4+Pj4KPj4+PiB2NTogVmFsaWRhdGUgc3NldSBjb25m aWd1cmF0aW9uIGFnYWluc3QgdGhlIGRldmljZSdzIGNhcGFiaWxpdGllcyAKPj4+PiAoTGlvbmVs KQo+Pj4+Cj4+Pj4gdjY6IENoYW5nZSBjb250ZXh0IHBvd2VyZ2F0aW5nIHNldHRpbmdzIHRocm91 Z2ggTUlfU0RNIG9uIGtlcm5lbCAKPj4+PiBjb250ZXh0IChDaHJpcykKPgo+IFtzbmlwXQo+Cj4+ Pgo+Pj4+ICsgaW50ZWxfc3NldV9mcm9tX2RldmljZV9zc2V1KCZJTlRFTF9JTkZPKGRldl9wcml2 KS0+c3NldSkgOgo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBzc2V1Owo+Pj4+ICsKPj4+PiArwqDCoMKg IHJldCA9IGVuZ2luZS0+ZW1pdF9ycGNzX2NvbmZpZyhycSwgY3R4LCBhY3R1YWxfc3NldSk7Cj4+ Pj4gK8KgwqDCoCBpZiAocmV0KSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIF9faTkxNV9yZXF1ZXN0 X2FkZChycSwgdHJ1ZSk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4gK8Kg wqDCoCB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgLyogUXVldWUgdGhpcyBzd2l0Y2ggYWZ0ZXIgYWxs IG90aGVyIGFjdGl2aXR5ICovCj4+Pj4gK8KgwqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5KHRpbWVs aW5lLCAmZGV2X3ByaXYtPmd0LnRpbWVsaW5lcywgbGluaykgewo+Cj4gVGhpcyBjYW4gaXRlcmF0 ZSBvdmVyIGd0LmFjdGl2ZV9yaW5ncyBmb3IgYSBzaG9ydGVyIHdhbGsuIFNlZSBjdXJyZW50IAo+ IHN0YXRlIG9mIGVuZ2luZV9oYXNfaWRsZV9rZXJuZWxfY29udGV4dC4KClRoYW5rcy4KCj4KPj4+ PiArwqDCoMKgwqDCoMKgwqAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcHJldjsKPj4+PiArCj4+Pj4g K8KgwqDCoMKgwqDCoMKgIHByZXYgPSBsYXN0X3JlcXVlc3Rfb25fZW5naW5lKHRpbWVsaW5lLCBl bmdpbmUpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocHJldikKPj4+PiArIGk5MTVfc3dfZmVu Y2VfYXdhaXRfc3dfZmVuY2VfZ2ZwKCZycS0+c3VibWl0LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmcHJldi0+c3VibWl0LAo+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBJOTE1X0ZFTkNFX0dGUCk7Cj4+Pj4gK8KgwqDCoCB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAg X19pOTE1X3JlcXVlc3RfYWRkKHJxLCB0cnVlKTsKPj4+Cj4+PiBUaGlzIGlzIGFjdHVhbGx5IHRo ZSBiaXQgSSByZWFkaW5nIHRoZSBwYXRjaCBmb3IuIFNvIHRoaXMgSSB0aGluayBpcyAKPj4+IG11 Y2ggYmV0dGVyL3NhZmVyIHRoYW4gcHJldmlvdXMgaWRsaW5nLiBIb3dldmVyIG9uZSBjb25jZXJu LCBhbmQgCj4+PiBtYXliZSBub3QgYSBjb25jZXJuIGJ1dCBqdXN0IHNvbWV0aGluZyB3aGljaCBu ZWVkcyB0byBiZSBleHBsYWluZWQgCj4+PiBpbiB0aGUgdUFQSSwgaXMgd2hhdCBpdCBtZWFucyB3 aXRoIHJlZ2FyZHMgdG8gdGhlIHBvaW50IGZyb20gd2hpY2ggCj4+PiB0aGUgbmV3IGNvbmZpZ3Vy YXRpb24gYmVjb21lcyBsaXZlLgo+Pgo+PiBUbyBtZSBpdCdzIHNlZW1zIHRoYXQgYWxsIGNvbnRl eHQgaW9jdGwgZWZmZWN0cyBhcmUgb3JkZXJlZC4KPj4gU28gSSB3b3VsZCBleHBlY3QgYW55IGV4 ZWNidWYgYWZ0ZXIgdGhpcyBpb2N0bCB3b3VsZCBoYXZlIHRoZSByaWdodCAKPj4gY29uZmlndXJh dGlvbi4KPj4gQW55dGhpbmcgYmVmb3JlIHdvdWxkIGhhdmUgdGhlIHByZXZpb3VzIGNvbmZpZ3Vy YXRpb24uCj4+Cj4+IElmIHRoYXQncyB5b3VyIHVuZGVyc3RhbmluZCB0b28sIEkgY2FuIGFkZCB0 aGF0IGluIHRoZSBkb2N1bWVudGF0aW9uLgo+Cj4gSSBndWVzcyBJIGFtIG1pc3Npbmcgd2hhdCBw cmV2ZW50cyB0aGUgY29udGV4dCB3aGljaCBpc3N1ZWQgdGhlIFNTRVUgCj4gcmUtY29uZmlndXJh aXRvbiB0byBydW4gYmVmb3JlIHRoZSByZS1jb25maWd1cmF0aW9uIHJlcXVlc3QgZXhlY3V0ZXMu IAo+IFRoZXkgYXJlIG9uIHNlcGFyYXRlIHRpbWVsaW5lcyBhbmQgc3Vic2VxdWVudCBleGVjYnVm IG9uIHRoZSBpc3N1aW5nIAo+IGNvbnRleHQgd29uJ3QgZGVwZW5kIG9uIGl0Lgo+Cj4+Pgo+Pj4g Q291bGQgcHJlZW1wdGlvbiBmb3IgaW5zdGFuY2UgbWFrZSBpdCBub3QgZGVmaW5lZCBlbm91Z2g/ IENvdWxkIHdlLCAKPj4+IG9yIHNob3VsZCB3ZSwgYWxzbyBsaW5rIHRoaXMgcmVxdWVzdCBzb21l aG93IG9udG8gdGhlIGlzc3VpbmcgCj4+PiBjb250ZXh0IHRpbWVsaW5lIHNvIGl0IG11c3QgYmUg Zmlyc3QgdGhlcmU/IEhtLCBzaG91bGQgd2UgdXNlIHRoZSAKPj4+IHVzZXIgY29udGV4dCBpbnN0 ZWFkIG9mIHRoZSBrZXJuZWwgb25lLCBhbmQgc2V0IHRoZSBoaWdoZXN0IAo+Pj4gcHJpb3JpdHk/ IEJ1dCB3b3VsZCBoYXZlIHRvIGF2b2lkIHRyaWdnZXJpbmcgcHJlZW1wdGlvbi4KPj4KPj4gTXkg dW5kZXJzdGFuZGluZyBpcyB0aGF0IGEgY29udGV4dCBjYW4ndCBNSV9MUkkgaXRzZWxmIGJlZm9y ZSBHZW4xMS4KPj4gSSBoYXZlbid0IHRlc3RlZCB0aGF0IG9uIEdlbjExIHRob3VnaC4KPj4KPj4g SSdtIGFmcmFpZCB0aGF0IGxlYXZlcyB1cyB3aXRoIG9ubHkgYSBtYXggcHJpb3JpdHkgcmVxdWVz dCB0aWVkIHRvIAo+PiBhbGwgdGhlIHByZXZpb3VzIHJlcXVlc3RzLgo+PiBPciBzb21laG93IGtl ZXAgYSBwb2ludGVyIHRvIHRoZSBsYXN0IHJlcXVlc3QgdG8gY2hhbmdlIHRoZSBjb250ZXh0IAo+ PiBwb3dlcmdhdGluZyBjb25maWd1cmF0aW9uIGFuZCBhZGQgYSBkZXBlbmRlbmN5IG9uIGFsbCBu ZXcgcmVxdWVzdCAKPj4gdW50aWwgaXQncyByZXRpcmVkPwo+Cj4gSSBsb3N0IHRoZSB0cmFpbiBv ZiBkZXBlbmRlbmNpZXMgaGVyZS4gOikgW3NuaXBdCgpTb3JyeSwgSSB3YXMgZ2V0dGluZyBjb25m dXNlZCBieSByZWFkaW5nIENocmlzJyByZXBseSBhdCB0aGUgc2FtZSB0aW1lLgoKVGhlcmUgaXMg YSBwcm9ibGVtIHdpdGggcHJlZW1wdGlvbiBhbmQgc2luY2UgdGhlIGRvY3VtZW50YXRpb24gdGVs bHMgdXMgCnRoYXQgd2UgY2FuJ3QgTUlfTFJJIG9uIHRoZSBjb250ZXh0IGl0c2VsZiAobGlrZSBD aHJpcyBzdWdnZXN0ZWQgYW5kIAp3aGF0IHdvdWxkIGJlIHJlYWxseSBzaW1wbGVyKSwgd2UgaGF2 ZSB0byBnbyB3aXRoIGFuIE1JX1NETSB3aGljaCB0aGlzIApwYXRjaCBjdXJyZW50bHkgbGFja3Mg c3luY2hyb25pemF0aW9uIGZvci4KCj4KPj4+Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBw YXJhbV9zc2V1LnNsaWNlX21hc2sgPSBjZS0+c3NldS5zbGljZV9tYXNrOwo+Pj4+ICvCoMKgwqDC oMKgwqDCoCBwYXJhbV9zc2V1LnN1YnNsaWNlX21hc2sgPSBjZS0+c3NldS5zdWJzbGljZV9tYXNr Owo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBwYXJhbV9zc2V1Lm1pbl9ldXNfcGVyX3N1YnNsaWNlID0g Cj4+Pj4gY2UtPnNzZXUubWluX2V1c19wZXJfc3Vic2xpY2U7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKg IHBhcmFtX3NzZXUubWF4X2V1c19wZXJfc3Vic2xpY2UgPSAKPj4+PiBjZS0+c3NldS5tYXhfZXVz X3Blcl9zdWJzbGljZTsKPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChjb3B5X3RvX3Vz ZXIodTY0X3RvX3VzZXJfcHRyKGFyZ3MtPnZhbHVlKSwgJnBhcmFtX3NzZXUsCj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVvZihwYXJhbV9zc2V1KSkpCj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVGQVVMVDsKPj4+PiArwqDCoMKgwqDCoMKgwqAg YnJlYWs7Cj4+Pj4gK8KgwqDCoCB9Cj4+Pj4gwqDCoMKgwqDCoCBkZWZhdWx0Ogo+Pj4+IMKgwqDC oMKgwqDCoMKgwqDCoCByZXQgPSAtRUlOVkFMOwo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBicmVh azsKPj4+PiBAQCAtODQ1LDcgKzk4MCw0MSBAQCBpbnQgaTkxNV9nZW1fY29udGV4dF9zZXRwYXJh bV9pb2N0bChzdHJ1Y3QgCj4+Pj4gZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+Pj4+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3R4LT5zY2hlZC5wcmlvcml0eSA9IHBy aW9yaXR5Owo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg IGJyZWFrOwo+Pj4+ICvCoMKgwqAgY2FzZSBJOTE1X0NPTlRFWFRfUEFSQU1fU1NFVToKPj4+PiAr wqDCoMKgwqDCoMKgwqAgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSB1c2VyX3Nz ZXU7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuaW9uIGludGVsX3NzZXUgY3R4 X3NzZXU7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChhcmdzLT5zaXpl KSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAtRUlOVkFMOwo+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgfQo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAo Y29weV9mcm9tX3VzZXIoJnVzZXJfc3NldSwgCj4+Pj4gdTY0X3RvX3VzZXJfcHRyKGFyZ3MtPnZh bHVlKSwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c2l6ZW9mKHVzZXJfc3NldSkpKSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXQgPSAtRUZBVUxUOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJl YWs7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4+ICsKPj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBlbmdpbmUgPSBpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIoZGV2X3ByaXYs Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdXNlcl9zc2V1LmNsYXNzLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVzZXJfc3NldS5pbnN0YW5jZSk7Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFlbmdpbmUpIHsKPj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IC1FSU5WQUw7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+ Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IAo+Pj4+IGludGVsX3NzZXVf ZnJvbV91c2VyX3NzZXUoJklOVEVMX0lORk8oZGV2X3ByaXYpLT5zc2V1LAo+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnVzZXJfc3Nl dSwgJmN0eF9zc2V1KTsKPj4+Cj4+PiBTaG91bGQgc2V0dGVyIGhhdmUgYSBoZWxwZXIgYXMgd2Vs bD8KPj4KPj4gSSdtIG5vdCBzdXJlIHdoYXQgeW91J3JlIGFza2luZyBoZXJlIDooCj4+IFNldHRl ciBmb3Igd2hhdD8KPgo+IHNldF9wYXJhbSB2cyBnZXRfcGFyYW0uIEkgb25seSBub3RpY2VkIHlv dSBoYXZlIGhlbHBlciB0byBjb252ZXIgCj4gc3RydWN0IHNzZXUgZnJvbSB1c2VyIHRvIGtlcm5l bCB2ZXJzaW9uIGZvciBvbmUgZGlyZWN0aW9uIG9ubHkuIEl0IAo+IGNvdWxkIGJlIGl0IGRvZXNu J3QgbWFrZSBzZW5zZSB0byBoYXZlIHRoZSBvdGhlciwgaGF2ZW4ndCBsb29rZWQgdGhhdCAKPiBk ZWVwbHkuCgpBaCB5ZWFoLCBmb3IgdGhlIGdldHRlci4KCkl0J3MganVzdCB0aGF0IHRoZSBzZXR0 ZXIgZG9lcyBzb21lIGVycm9yIGNoZWNraW5nIHRoYXQgdGhlIGdldHRlciAKZG9lc24ndCBuZWVk IHRvLgpJdCBtYWtlcyB0aGUgc3dpdGNoKCkgeyAuLi4gfSBhIGJpdCBsZXNzIHZlcmJvc2UuCgo+ Cj4gUmVnYXJkcywKPgo+IFR2cnRrbwo+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK