From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: Re: [PATCH 2/3] drm/i915/execlists: Suppress preempting self Date: Wed, 23 Jan 2019 17:09:05 +0000 Message-ID: <154826334558.693.5667570906328835071@skylake-alporthouse-com> References: <20190123123602.21816-1-chris@chris-wilson.co.uk> <20190123123602.21816-2-chris@chris-wilson.co.uk> <569302b7-c8f2-3590-9554-c855572a3984@linux.intel.com> <154825332589.693.14111030345407577908@skylake-alporthouse-com> <8f1a8036-b031-a819-2a7d-0b3e003c249a@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id F121A6E509 for ; Wed, 23 Jan 2019 17:09:10 +0000 (UTC) In-Reply-To: <8f1a8036-b031-a819-2a7d-0b3e003c249a@linux.intel.com> 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 UXVvdGluZyBUdnJ0a28gVXJzdWxpbiAoMjAxOS0wMS0yMyAxNjo0MDo0NCkKPiAKPiBPbiAyMy8w MS8yMDE5IDE0OjIyLCBDaHJpcyBXaWxzb24gd3JvdGU6Cj4gPiBRdW90aW5nIFR2cnRrbyBVcnN1 bGluICgyMDE5LTAxLTIzIDE0OjA4OjU2KQo+ID4+Cj4gPj4gT24gMjMvMDEvMjAxOSAxMjozNiwg Q2hyaXMgV2lsc29uIHdyb3RlOgo+ID4+PiBJbiBvcmRlciB0byBhdm9pZCBwcmVlbXB0aW5nIG91 cnNlbHZlcywgd2UgY3VycmVudGx5IHJlZnVzZSB0byBzY2hlZHVsZQo+ID4+PiB0aGUgdGFza2xl dCBpZiB3ZSByZXNjaGVkdWxlIGFuIGluZmxpZ2h0IGNvbnRleHQuIEhvd2V2ZXIsIHRoaXMgZ2xv c3Nlcwo+ID4+PiBvdmVyIGEgZmV3IGlzc3VlcyBzdWNoIGFzIHdoYXQgaGFwcGVucyBhZnRlciBh IENTIGNvbXBsZXRpb24gZXZlbnQgYW5kCj4gPj4+IHdlIHRoZW4gcHJlZW1wdCB0aGUgbmV3bHkg ZXhlY3V0aW5nIGNvbnRleHQgd2l0aCBpdHNlbGYsIG9yIGlmIHNvbWV0aGluZwo+ID4+PiBlbHNl IGNhdXNlcyBhIHRhc2tsZXRfc2NoZWR1bGUgdHJpZ2dlcmluZyB0aGUgc2FtZSBldmFsdWF0aW9u IHRvCj4gPj4+IHByZWVtcHQgdGhlIGFjdGl2ZSBjb250ZXh0IHdpdGggaXRzZWxmLgo+ID4+Pgo+ ID4+PiBUbyBhdm9pZCB0aGUgZXh0cmEgY29tcGxpY2F0aW9ucywgYWZ0ZXIgZGVjaWRpbmcgdGhh dCB3ZSBoYXZlCj4gPj4+IHBvdGVudGlhbGx5IHF1ZXVlZCBhIHJlcXVlc3Qgd2l0aCBoaWdoZXIg cHJpb3JpdHkgdGhhbiB0aGUgY3VycmVudGx5Cj4gPj4+IGV4ZWN1dGluZyByZXF1ZXN0LCBpbnNw ZWN0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSB0byBzZWUgaWYgaXQgaXMgaW5kZWVkCj4gPj4+IGhp Z2hlciBwcmlvcml0eSBmcm9tIGFub3RoZXIgY29udGV4dC4KPiA+Pj4KPiA+Pj4gUmVmZXJlbmNl czogYTJiZjkyZThjYzE2ICgiZHJtL2k5MTUvZXhlY2xpc3RzOiBBdm9pZCBraWNraW5nIHByaW9y aXR5IG9uIHRoZSBjdXJyZW50IGNvbnRleHQiKQo+ID4+PiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBX aWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiA+Pj4gQ2M6IFR2cnRrbyBVcnN1bGlu IDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4gPj4+IC0tLQo+ID4+PiAgICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jIHwgMjAgKysrKysrLS0KPiA+Pj4gICAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgICAgICB8IDY3ICsrKysrKysrKysrKysrKysrKysr KysrKy0tLQo+ID4+PiAgICAyIGZpbGVzIGNoYW5nZWQsIDc2IGluc2VydGlvbnMoKyksIDExIGRl bGV0aW9ucygtKQo+ID4+Pgo+ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9zY2hlZHVsZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMK PiA+Pj4gaW5kZXggMzQwZmFlYTZjMDhhLi5mYjVkOTUzNDMwZTUgMTAwNjQ0Cj4gPj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMKPiA+Pj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYwo+ID4+PiBAQCAtMjM5LDYgKzIzOSwxOCBA QCBzY2hlZF9sb2NrX2VuZ2luZShzdHJ1Y3QgaTkxNV9zY2hlZF9ub2RlICpub2RlLCBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpsb2NrZWQpCj4gPj4+ICAgICAgICByZXR1cm4gZW5naW5lOwo+ID4+ PiAgICB9Cj4gPj4+ICAgIAo+ID4+PiArc3RhdGljIGJvb2wgaW5mbGlnaHQoY29uc3Qgc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnEsCj4gPj4+ICsgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gPj4+ICt7Cj4gPj4+ICsgICAgIGNvbnN0IHN0cnVj dCBpOTE1X3JlcXVlc3QgKmFjdGl2ZTsKPiA+Pj4gKwo+ID4+PiArICAgICBpZiAoIXJxLT5nbG9i YWxfc2Vxbm8pCj4gPj4+ICsgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ID4+PiArCj4gPj4+ ICsgICAgIGFjdGl2ZSA9IHBvcnRfcmVxdWVzdChlbmdpbmUtPmV4ZWNsaXN0cy5wb3J0KTsKPiA+ Pj4gKyAgICAgcmV0dXJuIGFjdGl2ZS0+aHdfY29udGV4dCA9PSBycS0+aHdfY29udGV4dDsKPiA+ Pj4gK30KPiA+Pj4gKwo+ID4+PiAgICBzdGF0aWMgdm9pZCBfX2k5MTVfc2NoZWR1bGUoc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnEsCj4gPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHN0cnVjdCBpOTE1X3NjaGVkX2F0dHIgKmF0dHIpCj4gPj4+ICAgIHsKPiA+Pj4gQEAgLTMyOCw2 ICszNDAsNyBAQCBzdGF0aWMgdm9pZCBfX2k5MTVfc2NoZWR1bGUoc3RydWN0IGk5MTVfcmVxdWVz dCAqcnEsCj4gPj4+ICAgICAgICAgICAgICAgIElOSVRfTElTVF9IRUFEKCZkZXAtPmRmc19saW5r KTsKPiA+Pj4gICAgCj4gPj4+ICAgICAgICAgICAgICAgIGVuZ2luZSA9IHNjaGVkX2xvY2tfZW5n aW5lKG5vZGUsIGVuZ2luZSk7Cj4gPj4+ICsgICAgICAgICAgICAgbG9ja2RlcF9hc3NlcnRfaGVs ZCgmZW5naW5lLT50aW1lbGluZS5sb2NrKTsKPiA+Pj4gICAgCj4gPj4+ICAgICAgICAgICAgICAg IC8qIFJlY2hlY2sgYWZ0ZXIgYWNxdWlyaW5nIHRoZSBlbmdpbmUtPnRpbWVsaW5lLmxvY2sgKi8K PiA+Pj4gICAgICAgICAgICAgICAgaWYgKHByaW8gPD0gbm9kZS0+YXR0ci5wcmlvcml0eSB8fCBu b2RlX3NpZ25hbGVkKG5vZGUpKQo+ID4+PiBAQCAtMzU2LDE3ICszNjksMTYgQEAgc3RhdGljIHZv aWQgX19pOTE1X3NjaGVkdWxlKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAo+ID4+PiAgICAgICAg ICAgICAgICBpZiAocHJpbyA8PSBlbmdpbmUtPmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eSkKPiA+ Pj4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiA+Pj4gICAgCj4gPj4+ICsgICAg ICAgICAgICAgZW5naW5lLT5leGVjbGlzdHMucXVldWVfcHJpb3JpdHkgPSBwcmlvOwo+ID4+PiAr Cj4gPj4+ICAgICAgICAgICAgICAgIC8qCj4gPj4+ICAgICAgICAgICAgICAgICAqIElmIHdlIGFy ZSBhbHJlYWR5IHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGNvbnRleHQsIGRvbid0Cj4gPj4+ICAg ICAgICAgICAgICAgICAqIGJvdGhlciBldmFsdWF0aW5nIGlmIHdlIHNob3VsZCBwcmVlbXB0IG91 cnNlbHZlcy4KPiA+Pj4gICAgICAgICAgICAgICAgICovCj4gPj4+IC0gICAgICAgICAgICAgaWYg KG5vZGVfdG9fcmVxdWVzdChub2RlKS0+Z2xvYmFsX3NlcW5vICYmCj4gPj4+IC0gICAgICAgICAg ICAgICAgIGk5MTVfc2Vxbm9fcGFzc2VkKHBvcnRfcmVxdWVzdChlbmdpbmUtPmV4ZWNsaXN0cy5w b3J0KS0+Z2xvYmFsX3NlcW5vLAo+ID4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBub2RlX3RvX3JlcXVlc3Qobm9kZSktPmdsb2JhbF9zZXFubykpCj4gPj4+ICsgICAgICAg ICAgICAgaWYgKGluZmxpZ2h0KG5vZGVfdG9fcmVxdWVzdChub2RlKSwgZW5naW5lKSkKPiA+Pj4g ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiA+Pj4gICAgCj4gPj4+ICAgICAgICAg ICAgICAgIC8qIERlZmVyICh0YXNrbGV0KSBzdWJtaXNzaW9uIHVudGlsIGFmdGVyIGFsbCBvZiBv dXIgdXBkYXRlcy4gKi8KPiA+Pj4gLSAgICAgICAgICAgICBlbmdpbmUtPmV4ZWNsaXN0cy5xdWV1 ZV9wcmlvcml0eSA9IHByaW87Cj4gPj4+ICAgICAgICAgICAgICAgIHRhc2tsZXRfaGlfc2NoZWR1 bGUoJmVuZ2luZS0+ZXhlY2xpc3RzLnRhc2tsZXQpOwo+ID4+PiAgICAgICAgfQo+ID4+PiAgICAK PiA+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiA+Pj4gaW5kZXggOGFhOGE0ODYyNTQzLi5k OWQ3NDRmNmFiMmMgMTAwNjQ0Cj4gPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2xyYy5jCj4gPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gPj4+ IEBAIC0xODIsMTIgKzE4Miw2NCBAQCBzdGF0aWMgaW5saW5lIGludCBycV9wcmlvKGNvbnN0IHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ID4+PiAgICB9Cj4gPj4+ICAgIAo+ID4+PiAgICBzdGF0 aWMgaW5saW5lIGJvb2wgbmVlZF9wcmVlbXB0KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSwKPiA+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0 IGk5MTVfcmVxdWVzdCAqbGFzdCwKPiA+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IHByaW8pCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxLAo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgcV9wcmlvKQo+ID4+PiAgICB7Cj4gPj4+IC0gICAgIHJldHVybiAoaW50ZWxfZW5naW5lX2hh c19wcmVlbXB0aW9uKGVuZ2luZSkgJiYKPiA+Pj4gLSAgICAgICAgICAgICBfX2V4ZWNsaXN0c19u ZWVkX3ByZWVtcHQocHJpbywgcnFfcHJpbyhsYXN0KSkgJiYKPiA+Pj4gLSAgICAgICAgICAgICAh aTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChsYXN0KSk7Cj4gPj4+ICsgICAgIGNvbnN0IHN0cnVjdCBp bnRlbF9jb250ZXh0ICpjdHggPSBycS0+aHdfY29udGV4dDsKPiA+Pj4gKyAgICAgY29uc3QgaW50 IGxhc3RfcHJpbyA9IHJxX3ByaW8ocnEpOwo+ID4+PiArICAgICBzdHJ1Y3QgcmJfbm9kZSAqcmI7 Cj4gPj4+ICsgICAgIGludCBpZHg7Cj4gPj4+ICsKPiA+Pj4gKyAgICAgaWYgKCFpbnRlbF9lbmdp bmVfaGFzX3ByZWVtcHRpb24oZW5naW5lKSkKPiA+Pj4gKyAgICAgICAgICAgICByZXR1cm4gZmFs c2U7Cj4gPj4+ICsKPiA+Pj4gKyAgICAgaWYgKGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKQo+ ID4+PiArICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiA+Pj4gKwo+ID4+PiArICAgICBpZiAo IV9fZXhlY2xpc3RzX25lZWRfcHJlZW1wdChxX3ByaW8sIGxhc3RfcHJpbykpCj4gPj4+ICsgICAg ICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ID4+PiArCj4gPj4+ICsgICAgIC8qCj4gPj4+ICsgICAg ICAqIFRoZSBxdWV1ZV9wcmlvcml0eSBpcyBhIG1lcmUgaGludCB0aGF0IHdlIG1heSBuZWVkIHRv IHByZWVtcHQuCj4gPj4+ICsgICAgICAqIElmIHRoYXQgaGludCBpcyBzdGFsZSBvciB3ZSBtYXkg YmUgdHJ5aW5nIHRvIHByZWVtcHQgb3Vyc2VsdmVzLAo+ID4+PiArICAgICAgKiBpZ25vcmUgdGhl IHJlcXVlc3QuCj4gPj4+ICsgICAgICAqLwo+ID4+PiArCj4gPj4+ICsgICAgIGxpc3RfZm9yX2Vh Y2hfZW50cnlfY29udGludWUocnEsICZlbmdpbmUtPnRpbWVsaW5lLnJlcXVlc3RzLCBsaW5rKSB7 Cj4gPj4+ICsgICAgICAgICAgICAgR0VNX0JVR19PTihycS0+aHdfY29udGV4dCA9PSBjdHgpOwo+ ID4+Cj4gPj4gV2h5IHdvdWxkIHRoZXJlIGJlIG5vIG1vcmUgcmVxdWVzdHMgYmVsb25naW5nIHRv IHRoZSBzYW1lIGNvbnRleHQgb24gdGhlCj4gPj4gZW5naW5lIHRpbWVsaW5lIGFmdGVyIHRoZSBm aXJzdCBvbmU/IERpZCB5b3UgbWVhbiAiaWYgKHJxLT5od19jb250ZXh0ID09Cj4gPj4gY3R4KSBj b250aW51ZTsiID8KPiA+IAo+ID4gV2UgZW50ZXIgdGhlIGZ1bmN0aW9uIHdpdGggcnEgPT0gZXhl Y2xpc3QtPnBvcnQsIGkuZS4gdGhlIGxhc3QgcmVxdWVzdAo+ID4gc3VibWl0dGVkIHRvIEVMU1Bb MF0uIEluIHRoaXMgbG9vcCwgd2UgaXRlcmF0ZSBmcm9tIHRoZSBzdGFydCBvZiBFTFNQWzFdCj4g PiBhbmQgYWxsIHRoZSByZXF1ZXN0IGhlcmUgYmVsb25nIHRvIHRoYXQgY29udGV4dC4gSXQgaXMg aWxsZWdhbCBmb3IKPiA+IEVMU1BbMF0ubHJjYSA9PSBFTFNQWzFdLmxyY2EsIGkuZS4gdGhlIGNv bnRleHQgbXVzdCBiZSBkaWZmZXJlbnQuCj4gCj4gWWVzLCB5b3UgYXJlIHJpZ2h0IHlldCBhZ2Fp bi4gSSBtaXNzZWQgdGhlIGZhY3QgaXQgaXMgZ3VhcmFudGVlZCB0aGlzIGlzIAo+IGNhbGxlZCB3 aXRoIHBvcnQwLiBJIHdvbmRlciBpZiBmdW5jdGlvbiBzaWduYXR1cmUgc2hvdWxkIGNoYW5nZSB0 byBtYWtlIAo+IHRoaXMgb2J2aW91cyBzbyBzb21lb25lIGRvZXNuJ3QgZ2V0IHRoZSBpZGVhIHRv IGNhbGwgaXQgd2l0aCBhbnkgb2xkIAo+IHJlcXVlc3QuCgpJIGRpZCBtaXNzIHNvbWV0aGluZyBv YnZpb3VzIHRob3VnaC4gRHVlIHRvIFBJLCB0aGUgZmlyc3QgcmVxdWVzdCBvbgpFTFNQWzFdIGlz IGFsc28gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgKHdlIG1ha2Ugc3VyZSB0byBwcm9tb3RlIGFsbApp bmZsaWdodCByZXF1ZXN0cyBhbG9uZyB0aGUgc2FtZSBjb250ZXh0KS4KCj4gPj4+ICsgICAgICAg ICAgICAgaWYgKHJxX3ByaW8ocnEpID4gbGFzdF9wcmlvKQo+ID4+PiArICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIHRydWU7Cj4gPj4+ICsgICAgIH0KPiA+Pj4gKwo+ID4+PiArICAgICByYiA9 IHJiX2ZpcnN0X2NhY2hlZCgmZW5naW5lLT5leGVjbGlzdHMucXVldWUpOwo+ID4+PiArICAgICBp ZiAoIXJiKQo+ID4+PiArICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiA+Pj4gKwo+ID4+PiAr ICAgICBwcmlvbGlzdF9mb3JfZWFjaF9yZXF1ZXN0KHJxLCB0b19wcmlvbGlzdChyYiksIGlkeCkK PiA+Pj4gKyAgICAgICAgICAgICByZXR1cm4gcnEtPmh3X2NvbnRleHQgIT0gY3R4ICYmIHJxX3By aW8ocnEpID4gbGFzdF9wcmlvOwo+ID4+Cj4gPj4gVGhpcyBpc24ndCBlcXVpdmFsZW50IHRvIHRv cCBvZiB0aGUgcXVldWUgcHJpb3JpdHkKPiA+PiAoZW5naW5lLT5leGVjbGlzdHMucXVldWVfcHJp b3JpdHkpPyBBcGFydCBmcm9tIHRoZSBkaWZmZXJlbnQgY3R4IGNoZWNrLgo+ID4+IFNvIEkgZ3Vl c3MgaXQgaXMgZWFzaWVyIHRoYW4gc3RvcmluZyBuZXcgZW5naW5lLT5leGVjbGlzdHMucXVldWVf dG9wX2N0eAo+ID4+IGFuZCB3b25kZXJpbmcgYWJvdXQgdGhlIHZhbGlkaXR5IG9mIHRoYXQgcG9p bnRlci4KPiA+IAo+ID4gVGhlIHByb2JsZW0gYmVpbmcgdGhhdCBxdWV1ZV9wcmlvcml0eSBtYXkg bm90IGFsd2F5cyBtYXRjaCB0aGUgdG9wIG9mCj4gPiB0aGUgZXhlY2xpc3RzLT5xdWV1ZS4gUmln aHQsIHRoZSBmaXJzdCBhdHRlbXB0IEkgdHJpZWQgd2FzIHRvIHN0b3JlIHRoZQo+ID4gcXVldWVf Y29udGV4dCBtYXRjaGluZyB0aGUgcXVldWVfcHJpb3JpdHksIGJ1dCBkdWUgdG8gdGhlIHN1cHBy ZXNzaW9uIG9mCj4gPiBpbmZsaWdodCBwcmVlbXB0aW9ucywgaXQgZG9lc24ndCBtYXRjaCBmb3Ig bG9uZywgYW5kIGlzIG5vdCBhcyBhY2N1cmF0ZQo+ID4gYXMgb25lIHdvdWxkIGxpa2UgYWNyb3Nz IENTIGV2ZW50cy4KPiA+IAo+ID4gcHJpb2xpc3RfZm9yX2VhY2hfcmVxdWVzdCgpIGlzbid0IHRv byBob3JyaWJsZSBmb3IgZmluZGluZyB0aGUgZmlyc3QKPiA+IHBvaW50ZXIuIEkgbm90ZWQgdGhh dCB3ZSB0ZWFjaCBpdCB0byBkbzogZm9yKGlkeCA9IF9fZmZzKHAtPnVzZWQpOyAuLi4pCj4gPiB0 aG91Z2guIElmIHdlIGRpZG4ndCBjYXJlIGFib3V0IGNoZWNraW5nIGh3X2NvbnRleHQsIHdlIGNh biBjb21wdXRlIHRoZQo+ID4gcHJpbyBmcm9tIChwLT5wcmlvcml0eSsxKTw8U0hJRlQgLSBmZnMo cC0+dXNlZCkuCj4gCj4gQW5kIHRoaXMgY2hlY2sgaXMgZGVmaW5pdGVseSBuZWVkZWQgdG8gYXZv aWQgc29tZSBpc3N1ZT8gSSdsbCBuZWVkIHRvIAo+IGhhdmUgYW5vdGhlciB0cnkgb2YgdW5kZXJz dGFuZGluZyB0aGUgY29tbWl0IGFuZCBjb2RlIHBhdGhzIGZ1bGx5IAo+IHRvbW9ycm93LiBJIG1l YW4sIG9ubHkgYmVjYXVzZSBpdCB3b3VsZCBiZSBnb29kIHRvIGhhdmUgc29tZXRoaW5nIG1vcmUg Cj4gZWxlZ2FudCB0aGF0IGZ1bGwgYmxvd24gdHJlZSBsb29rdXAuCgpIbW0uIE5vLCB0aGUgaHdf Y29udGV4dCBjaGVjayBzaG91bGQgYmUgcmVkdW5kYW50LiBJZiBpdCB3ZXJlIHRoZSBzYW1lCmNv bnRleHQgYXMgRUxTUFswXSwgd2Ugd291bGQgaGF2ZSBhcHBsaWVkIFBJIHRvIGxhc3RfcHJpbyBh bHJlYWR5LCBzbwpycV9wcmlvKHJxKSBjYW4gbmV2ZXIgYmUgZ3JlYXRlci4gQWxsIHdlIG5lZWQg dG8gcmVhbGlzZSBpcyB0aGF0IHdlCmNhbm5vdCB0cnVzdCBxdWV1ZV9wcmlvcml0eSBhbG9uZS4K LUNocmlzCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCklu dGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=