From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [RFC v4 1/2] drm/i915: Engine discovery uAPI Date: Wed, 28 Jun 2017 14:19:15 +0100 Message-ID: References: <20170518145747.29062-1-tvrtko.ursulin@linux.intel.com> <20170626154741.31221-1-tvrtko.ursulin@linux.intel.com> <149864922323.23475.15493432555209454451@mail.alporthouse.com> <91f1d018-bafe-d371-d337-15bceed09b12@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 D01F16E567 for ; Wed, 28 Jun 2017 13:19:18 +0000 (UTC) In-Reply-To: <91f1d018-bafe-d371-d337-15bceed09b12@linux.intel.com> Content-Language: en-GB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , Tvrtko Ursulin , Intel-gfx@lists.freedesktop.org Cc: Daniel Vetter , Ben Widawsky List-Id: intel-gfx@lists.freedesktop.org Ck9uIDI4LzA2LzIwMTcgMTQ6MTUsIFR2cnRrbyBVcnN1bGluIHdyb3RlOgo+IE9uIDI4LzA2LzIw MTcgMTI6MjcsIENocmlzIFdpbHNvbiB3cm90ZToKPj4gUXVvdGluZyBUdnJ0a28gVXJzdWxpbiAo MjAxNy0wNi0yNiAxNjo0Nzo0MSkKPj4+IEZyb206IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJz dWxpbkBpbnRlbC5jb20+Cj4+Pgo+Pj4gRW5naW5lIGRpc2NvdmVyeSB1QVBJIGFsbG93cyB1c2Vy c3BhY2UgdG8gcHJvYmUgZm9yIGVuZ2luZQo+Pj4gY29uZmlndXJhdGlvbiBhbmQgZmVhdHVyZXMg d2l0aG91dCBuZWVkaW5nIHRvIG1haW50YWluIHRoZQo+Pj4gaW50ZXJuYWwgUENJIGlkIGJhc2Vk IGRhdGFiYXNlLgo+Pj4KPj4+IFRoaXMgZW5hYmxlcyByZW1vdmFsIG9mIGNvZGUgZHVwbGljYXRp b25zIGFjcm9zcyB1c2Vyc3BhY2UKPj4+IGNvbXBvbmVudHMuCj4+Pgo+Pj4gUHJvYmluZyBpcyBk b25lIHZpYSB0aGUgbmV3IERSTV9JT0NUTF9JOTE1X0dFTV9FTkdJTkVfSU5GTyBpb2N0bAo+Pj4g d2hpY2ggcmV0dXJucyB0aGUgbnVtYmVyIGFuZCBpbmZvcm1hdGlvbiBvbiB0aGUgc3BlY2lmaWVk IGVuZ2luZQo+Pj4gY2xhc3MuCj4+Pgo+Pj4gQ3VycmVudGx5IG9ubHkgZ2VuZXJhbCBlbmdpbmUg Y29uZmlndXJhdGlvbiBhbmQgSEVWQyBmZWF0dXJlIG9mCj4+PiB0aGUgVkNTIGVuZ2luZSBjYW4g YmUgcHJvYmVkIGJ1dCB0aGUgdUFQSSBpcyBkZXNpZ25lZCB0byBiZQo+Pj4gZ2VuZXJpYyBhbmQg ZXh0ZW5zaWJsZS4KPj4+Cj4+PiBDb2RlIGlzIGJhc2VkIGFsbW9zdCBleGFjdGx5IG9uIHRoZSBl YXJsaWVyIHByb3Bvc2FsIG9uIHRoZQo+Pj4gdG9waWMgYnkgSm9uIEJsb29tZmllbGQuIEVuZ2lu ZSBjbGFzcyBhbmQgaW5zdGFuY2UgcmVmYWN0b3JpbmcKPj4+IG1hZGUgcmVjZW50bHkgYnkgRGFu aWVsZSBDZXJhb2xvIFNwdXJpbyBlbmFibGVkIHRoaXMgdG8gYmUKPj4+IGltcGxlbWVudGVkIGlu IGFuIGVsZWdhbnQgZmFzaGlvbi4KPj4+Cj4+PiBUbyBwcm9iZSBjb25maWd1cmF0aW9uIHVzZXJz cGFjZSBzZXRzIHRoZSBlbmdpbmUgY2xhc3MgaXQgd2FudHMKPj4+IHRvIHF1ZXJ5IChzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX2VuZ2luZV9pbmZvKSBhbmQgcHJvdmlkZXMgYW4gYXJyYXkKPj4+IG9mIGRy bV9pOTE1X2VuZ2luZV9pbmZvIHN0cnVjdHMgd2hpY2ggd2lsbCBiZSBmaWxsZWQgaW4gYnkgdGhl Cj4+PiBkcml2ZXIuIFVzZXJzcGFjZSBhbHNvIGhhcyB0byB0ZWxsIGk5MTUgaG93IG1hbnkgZWxl bWVudHMgYXJlIGluCj4+PiB0aGUgYXJyYXksIGFuZCB0aGUgZHJpdmVyIHdpbGwgcmVwb3J0IGJh Y2sgdGhlIHRvdGFsIG51bWJlciBvZgo+Pj4gZW5naW5lIGluc3RhbmNlcyBpbiBhbnkgY2FzZS4K Pj4+Cj4+PiB2MjoKPj4+ICAgKiBBZGQgYSB2ZXJzaW9uIGZpZWxkIGFuZCBjb25zb2xpZGF0ZSB0 byBvbmUgZW5naW5lIGNvdW50Lgo+Pj4gICAgIChDaHJpcyBXaWxzb24pCj4+PiAgICogUmVuYW1l IHVBUEkgZmxhZ3MgZm9yIFZDUyBlbmdpbmVzIHRvIERSTV9JOTE1X0VOR0lORV9DTEFTU19WSURF Ty4KPj4+ICAgICAoR29uZyBaaGlwZW5nKQo+Pj4KPj4+IHYzOgo+Pj4gICAqIERyb3AgdGhlIERS TV8gcHJlZml4IGZyb20gdUFQSSBlbnVtcy4gKENocmlzIFdpbHNvbikKPj4+ICAgKiBPbmx5IHJl c2VydmUgOC1iaXRzIGZvciB0aGUgZW5naW5lIGluZm8gZm9yIHRpbWUgYmVpbmcuCj4+Pgo+Pj4g djQ6Cj4+PiAgICogTWFkZSB1c2VyX2NsYXNzX21hcCBzdGF0aWMuCj4+Pgo+Pj4gU2lnbmVkLW9m Zi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPj4+IENjOiBC ZW4gV2lkYXdza3kgPGJlbkBid2lkYXdzay5uZXQ+Cj4+PiBDYzogQ2hyaXMgV2lsc29uIDxjaHJp c0BjaHJpcy13aWxzb24uY28udWs+Cj4+PiBDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRl ckBpbnRlbC5jb20+Cj4+PiBDYzogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGlu dXguaW50ZWwuY29tPgo+Pj4gQ2M6IEpvbiBCbG9vbWZpZWxkIDxqb24uYmxvb21maWVsZEBpbnRl bC5jb20+Cj4+PiBDYzogIlJvZ296aGtpbiwgRG1pdHJ5IFYiIDxkbWl0cnkudi5yb2dvemhraW5A aW50ZWwuY29tPgo+Pj4gQ2M6IE9zY2FyIE1hdGVvIDxvc2Nhci5tYXRlb0BpbnRlbC5jb20+Cj4+ PiBDYzogIkdvbmcsIFpoaXBlbmciIDx6aGlwZW5nLmdvbmdAaW50ZWwuY29tPgo+Pj4gLS0tCj4+ PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICAgIHwgIDEgKwo+Pj4gICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICB8ICAzICsrCj4+PiAgIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jIHwgNjQgCj4+PiArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCj4+PiAgIGluY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAg ICAgICAgICAgIHwgNDEgKysrKysrKysrKysrKysrKysrKysrKwo+Pj4gICA0IGZpbGVzIGNoYW5n ZWQsIDEwOSBpbnNlcnRpb25zKCspCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmMgCj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMK Pj4+IGluZGV4IGU5ZDhlOWVlNTFiMi4uNDRkZDJmMzc5MzdmIDEwMDY0NAo+Pj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuYwo+Pj4gQEAgLTI3MjQsNiArMjcyNCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2lvY3RsX2Rlc2MgCj4+PiBpOTE1X2lvY3Rsc1tdID0gewo+Pj4gICAgICAgICAgRFJN X0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fQ09OVEVYVF9HRVRQQVJBTSwgCj4+PiBpOTE1X2dlbV9j b250ZXh0X2dldHBhcmFtX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKPj4+ICAgICAgICAgIERS TV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX0NPTlRFWFRfU0VUUEFSQU0sIAo+Pj4gaTkxNV9nZW1f Y29udGV4dF9zZXRwYXJhbV9pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCj4+PiAgICAgICAgICBE Uk1fSU9DVExfREVGX0RSVihJOTE1X1BFUkZfT1BFTiwgaTkxNV9wZXJmX29wZW5faW9jdGwsIAo+ Pj4gRFJNX1JFTkRFUl9BTExPVyksCj4+PiArICAgICAgIERSTV9JT0NUTF9ERUZfRFJWKEk5MTVf R0VNX0VOR0lORV9JTkZPLCAKPj4+IGk5MTVfZ2VtX2VuZ2luZV9pbmZvX2lvY3RsLCBEUk1fUkVO REVSX0FMTE9XKSwKPj4+ICAgfTsKPj4+ICAgc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZl ciA9IHsKPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIAo+ Pj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+PiBpbmRleCA0MjdkMTBjN2Vj YTUuLjQ5NjU2NWUxNzUzZiAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmgKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4+IEBA IC0zNTk4LDYgKzM1OTgsOSBAQCB2b2lkIGk5MTVfb2FfaW5pdF9yZWdfc3RhdGUoc3RydWN0IAo+ Pj4gaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4+PiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQzMl90ICpyZWdfc3RhdGUpOwo+Pj4gK2ludCBpOTE1X2dlbV9lbmdpbmVf aW5mb19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7Cj4+PiArCj4+ PiAgIC8qIGk5MTVfZ2VtX2V2aWN0LmMgKi8KPj4+ICAgaW50IF9fbXVzdF9jaGVjayBpOTE1X2dl bV9ldmljdF9zb21ldGhpbmcoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAKPj4+ICp2bSwKPj4+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1NjQgbWluX3NpemUs IHU2NCBhbGlnbm1lbnQsCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZW5naW5lX2NzLmMgCj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9j cy5jCj4+PiBpbmRleCAzYjQ2YzFmN2I4OGIuLmE5ODY2OWY2YWQ4NSAxMDA2NDQKPj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCj4+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYwo+Pj4gQEAgLTI1LDYgKzI1LDcgQEAKPj4+ ICAgI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4+PiAgICNpbmNsdWRlICJpbnRlbF9yaW5nYnVmZmVy LmgiCj4+PiAgICNpbmNsdWRlICJpbnRlbF9scmMuaCIKPj4+ICsjaW5jbHVkZSA8dWFwaS9kcm0v aTkxNV9kcm0uaD4KPj4+ICAgLyogSGFzd2VsbCBkb2VzIGhhdmUgdGhlIENYVF9TSVpFIHJlZ2lz dGVyIGhvd2V2ZXIgaXQgZG9lcyBub3QgCj4+PiBhcHBlYXIgdG8gYmUKPj4+ICAgICogdmFsaWQu IE5vdywgZG9jcyBleHBsYWluIGluIGR3b3JkcyB3aGF0IGlzIGluIHRoZSBjb250ZXh0IAo+Pj4g b2JqZWN0LiBUaGUgZnVsbAo+Pj4gQEAgLTEzMzIsNiArMTMzMyw2OSBAQCB2b2lkIGludGVsX2Vu Z2luZXNfbWFya19pZGxlKHN0cnVjdCAKPj4+IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4+PiAg ICAgICAgICB9Cj4+PiAgIH0KPj4+ICtzdGF0aWMgdTggdXNlcl9jbGFzc19tYXBbSTkxNV9FTkdJ TkVfQ0xBU1NfTUFYXSA9IHsKPj4+ICsgICAgICAgW0k5MTVfRU5HSU5FX0NMQVNTX09USEVSXSA9 IE9USEVSX0NMQVNTLAo+Pj4gKyAgICAgICBbSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSXSA9IFJF TkRFUl9DTEFTUywKPj4+ICsgICAgICAgW0k5MTVfRU5HSU5FX0NMQVNTX0NPUFldID0gQ09QWV9F TkdJTkVfQ0xBU1MsCj4+PiArICAgICAgIFtJOTE1X0VOR0lORV9DTEFTU19WSURFT10gPSBWSURF T19ERUNPREVfQ0xBU1MsCj4+PiArICAgICAgIFtJOTE1X0VOR0lORV9DTEFTU19WSURFT19FTkhB TkNFXSA9IFZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTLAo+Pj4gK307Cj4+PiArCj4+PiAraW50IGk5 MTVfZ2VtX2VuZ2luZV9pbmZvX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRh dGEsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9maWxlICpm aWxlKQo+Pj4gK3sKPj4+ICsgICAgICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0 b19pOTE1KGRldik7Cj4+PiArICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZW5naW5lX2luZm8g KmFyZ3MgPSBkYXRhOwo+Pj4gKyAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZW5naW5lX2luZm8gX191 c2VyICp1c2VyX2luZm8gPQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHU2NF90b191c2VyX3B0cihhcmdzLT5pbmZvX3B0cik7Cj4+PiArICAgICAgIHVuc2lnbmVk IGludCBpbmZvX3NpemUgPSBhcmdzLT5udW1fZW5naW5lczsKPj4+ICsgICAgICAgc3RydWN0IGRy bV9pOTE1X2VuZ2luZV9pbmZvIGluZm87Cj4+PiArICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZTsKPj4+ICsgICAgICAgZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4+PiArICAg ICAgIHU4IGNsYXNzOwo+Pj4gKwo+Pj4gKyAgICAgICBpZiAoYXJncy0+cnN2ZCkKPj4+ICsgICAg ICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4+ICsKPj4+ICsgICAgICAgc3dpdGNoIChhcmdz LT5lbmdpbmVfY2xhc3MpIHsKPj4+ICsgICAgICAgY2FzZSBJOTE1X0VOR0lORV9DTEFTU19PVEhF UjoKPj4+ICsgICAgICAgY2FzZSBJOTE1X0VOR0lORV9DTEFTU19SRU5ERVI6Cj4+PiArICAgICAg IGNhc2UgSTkxNV9FTkdJTkVfQ0xBU1NfQ09QWToKPj4+ICsgICAgICAgY2FzZSBJOTE1X0VOR0lO RV9DTEFTU19WSURFTzoKPj4+ICsgICAgICAgY2FzZSBJOTE1X0VOR0lORV9DTEFTU19WSURFT19F TkhBTkNFOgo+Pj4gKyAgICAgICAgICAgICAgIGNsYXNzID0gdXNlcl9jbGFzc19tYXBbYXJncy0+ ZW5naW5lX2NsYXNzXTsKPj4+ICsgICAgICAgICAgICAgICBicmVhazsKPj4+ICsgICAgICAgY2Fz ZSBJOTE1X0VOR0lORV9DTEFTU19NQVg6Cj4+PiArICAgICAgIGRlZmF1bHQ6Cj4+PiArICAgICAg ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+PiArICAgICAgIH07Cj4+PiArCj4+PiArICAgICAg IGFyZ3MtPm51bV9lbmdpbmVzID0gMDsKPj4+ICsKPj4+ICsgICAgICAgaWYgKGFyZ3MtPnZlcnNp b24gIT0gMSkgewo+Pj4gKyAgICAgICAgICAgICAgIGFyZ3MtPnZlcnNpb24gPSAxOwo+Pj4gKyAg ICAgICAgICAgICAgIHJldHVybiAwOwo+Pgo+PiBNeSBndXQgZmVlbGluZyBzYXlzIHdlIHdhbnQg dG8gcmVwb3J0IGJvdGggdGhlIHZlcnNpb24gYW5kIGNvdW50IGluIHRoZQo+PiBmaXJzdCBwYXNz LiBPdGhlcndpc2Ugd2UgaGF2ZSB0byBkbyBhIHZlcnNpb24gY2hlY2ssIGZvbGxvd2VkIGJ5IGEg Y291bnQKPj4gcXVlcnksIGZvbGxvd2VkIGJ5IHRoZSBhY3R1YWwgcmV0cmlldmFsLiBJZiB3ZSBj YW4gY29tYmluZSB0aGUgdmVyc2lvbiArCj4+IGNvdW50IGNoZWNrIGludG8gb25lIHBhc3MsIGl0 IG1heSBiZSBhIGxpdHRsZSBsZXNzIGhhc3NsZT8KPiAKPiBDb3VsZCBkbywgSSBkb24ndCBzZWUg YW55IGRvd25zaWRlcyB0byBpdCBhdCB0aGUgbW9tZW50Lgo+IAo+IEJ1dCB0aGUgb25seSBiZW5l Zml0IHNlZW1zIGl0IHdvdWxkIGJlIGluIGNhc2VzIHdoZXJlIHVzZXJzcGFjZSB3b3VsZCAKPiB3 YW50IHRvIGFsbG9jYXRlIHRoZSBpbmZvIGFycmF5IHRvIHRoZSBleGFjdCBzaXplLCByYXRoZXIg dGhhbiBqdXN0IAo+IHVzaW5nIGEgbGFyZ2UgZW5vdWdoIG51bWJlci4KClNvcnJ5LCB0aGF0IHdh cyBvbmUgb3V0ZGF0ZWQgcGFyYWdyYXBoLiBGcm9tIHRoZSBvbmUgYmVsb3cgaXQgZm9sbG93cyAK dGhhdCB0aGUgb25seSBiZW5lZml0IGlzIG9mZmVyaW5nIGEgbGl0dGxlIGJpdCBtb3JlIGluZm8g b24gYSB2ZXJzaW9uIAptaXNtYXRjaC4gQnV0IHNpbmNlIHdlIGNhbiBkbyB0aGUgd2hvbGUgcXVl cnkgd2l0aCBvbmUgaW9jdGwgYXMgYmVsb3csIEkgCmRvbid0IHNlZSB0aGF0IGl0IHdvdWxkIGJl IHVzZWZ1bC4gQnV0IGNvdWxkIGltcGxlbWVudCBpdCBqdXN0IGFzIHdlbGwgCnNpbmNlIGFzIEkg c2FpZCBJIGRvbid0IHNlZSBhIGRvd25zaWRlIHRvIGl0LgoKUmVnYXJkcywKClR2cnRrbwoKPiBJ biBib3RoIGNhc2VzIHVzZXJzcGFjZSBoYXMgdG8gY2hlY2sgYm90aCByZXR1cm4gY29kZSBmcm9t IHRoZSBpb2N0bCBhbmQgCj4gdGhhdCB0aGUgdmVyc2lvbiBudW1iZXIgbWF0Y2hlcyB0aGUgcmVx dWVzdGVkIG9uZS4gQW5kIGluIGJvdGggY2FzZXMgdGhlIAo+IHdob2xlIG9wZXJhdGlvbiBjYW4g YmUgZG9uZSB3aXRoIGp1c3Qgb25lIGlvY3RsLiBPciBpZiB5b3Ugd2FudCB0byAKPiBhbGxvY2F0 ZSB0aGUgZXhhY3Qgc2l6ZSBpbmZvIGFycmF5IGluIGJvdGggY2FzZXMgeW91IG5lZWQgdHdvIGlv Y3Rscy4KPiAKPiBpbmZvLnZlcnNpb24gPSAxOwo+IGluZm8uY2xhc3MgPSA8c29tZSBjbGFzcz47 Cj4gaW5mby5udW1fZW5naW5lcyA9IDxhIGxhcmdlIG51bWJlciBzaG91bGQgYmUgZW5vdWdoIGZv ciBldmVyeW9uZT47Cj4gcmV0ID0gaW9jdGwoJmluZm8pOwo+IGlmIChyZXQgfHwgaW5mby52ZXJz aW9uICE9IDEpCj4gICAgICBnb3RvIHRyeV9hX2xvd2VyX3ZlcnNpb247Cj4gZm9yX2VhY2hfZW5n aW5lKGluZm8pIHsKPiAgICAgIC4uLgo+IH0KPiAKPiBSZWdhcmRzLAo+IAo+IFR2cnRrbwpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK