From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH] drm/i915: Embrace the race in busy-ioctl Date: Mon, 15 Aug 2016 16:06:23 +0300 Message-ID: <87lgzytc4w.fsf@gaia.fi.intel.com> References: <1471024321-1583-1-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id A708F6E4BB for ; Mon, 15 Aug 2016 13:07:28 +0000 (UTC) In-Reply-To: <1471024321-1583-1-git-send-email-chris@chris-wilson.co.uk> 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 Cc: Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gRGFuaWVs IFZldHRlciBwcm9wb3NlZCBhIG5ldyBjaGFsbGVuZ2UgdG8gdGhlIHNlcmlhbGlzYXRpb24gaW5z aWRlIHRoZQo+IGJ1c3ktaW9jdGwgdGhhdCBleHBvc2VkIGEgZmxhdyB0aGF0IGNvdWxkIHJlc3Vs dCBpbiB1cyByZXBvcnRpbmcgdGhlCj4gd3JvbmcgZW5naW5lIGFzIGJlaW5nIGJ1c3kuIElmIHRo ZSByZXF1ZXN0IGlzIHJlYWxsb2NhdGVkIGFzIHdlIHRlc3QKPiBpdHMgYnVzeW5lc3MgYW5kIHRo ZW4gcmVhc3NpZ25lZCB0byB0aGlzIG9iamVjdCBieSBhbm90aGVyIHRocmVhZCwgd2UKPiB3b3Vs ZCBub3Qgbm90aWNlIHRoYXQgdGhlIHRlc3QgaXRzZWxmIHdhcyBpbmNvcnJlY3QuCj4KPiBXZSBh cmUgZmFjZWQgd2l0aCBhIGNob2ljZSBvZiB1c2luZyBfX2k5MTVfZ2VtX2FjdGl2ZV9nZXRfcmVx dWVzdF9yY3UoKQo+IHRvIGZpcnN0IGFjcXVpcmUgYSByZWZlcmVuY2UgdG8gdGhlIHJlcXVlc3Qg cHJldmVudGluZyB0aGUgcmFjZSwgb3IgdG8KPiBhY2tub3dsZWRnZSB0aGUgcmFjZSBhbmQgYWNj ZXB0IHRoZSBsaW1pdGF0aW9ucyB1cG9uIHRoZSBhY2N1cmFjeSBvZiB0aGUKPiBidXN5IGZsYWdz LiBOb3RlIHRoYXQgd2UgZ3VhcmFudGVlIHRoYXQgd2UgbmV2ZXIgZmFsc2VseSByZXBvcnQgdGhl Cj4gb2JqZWN0IGFzIGlkbGUgKHByb3ZpZGluZyB1c2Vyc3BhY2UgaXRzZWxmIGRvZXNuJ3QgcmFj ZSksIGFuZCBzbyB0aGUKPiBtb3N0IGltcG9ydGFudCB1c2Ugb2YgdGhlIGJ1c3ktaW9jdGwgYW5k IGl0cyBndWFyYW50ZWVzIGFyZSBmdWxmaWxsZWQuCj4KPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBX aWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiBDYzogRGFuaWVsIFZldHRlciA8ZGFu aWVsLnZldHRlckBpbnRlbC5jb20+Cj4gQ2M6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRp bmVuQGxpbnV4LmludGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uYyB8IDg3ICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCj4gIGlu Y2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAgICAgfCAxNSArKysrKystCj4gIDIgZmlsZXMgY2hh bmdlZCwgNjAgaW5zZXJ0aW9ucygrKSwgNDIgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMKPiBpbmRleCA1NTY2OTE2ODcwZWIuLmM3NzkxNTM3ODc2OCAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW0uYwo+IEBAIC0zNzkxLDQ5ICszNzkxLDU0IEBAIHN0YXRpYyBfX2Fsd2F5 c19pbmxpbmUgdW5zaWduZWQgaW50Cj4gIF9fYnVzeV9zZXRfaWZfYWN0aXZlKGNvbnN0IHN0cnVj dCBpOTE1X2dlbV9hY3RpdmUgKmFjdGl2ZSwKPiAgCQkgICAgIHVuc2lnbmVkIGludCAoKmZsYWcp KHVuc2lnbmVkIGludCBpZCkpCj4gIHsKPiAtCS8qIEZvciBtb3JlIGRpc2N1c3Npb24gYWJvdXQg dGhlIGJhcnJpZXJzIGFuZCBsb2NraW5nIGNvbmNlcm5zLAo+IC0JICogc2VlIF9faTkxNV9nZW1f YWN0aXZlX2dldF9yY3UoKS4KPiAtCSAqLwo+IC0JZG8gewo+IC0JCXN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxdWVzdDsKPiAtCQl1bnNpZ25lZCBpbnQgaWQ7Cj4gLQo+IC0JCXJlcXVl c3QgPSByY3VfZGVyZWZlcmVuY2UoYWN0aXZlLT5yZXF1ZXN0KTsKPiAtCQlpZiAoIXJlcXVlc3Qg fHwgaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxdWVzdCkpCj4gLQkJCXJldHVybiAwOwo+ ICsJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0Owo+ICAKPiAtCQlpZCA9IHJl cXVlc3QtPmVuZ2luZS0+ZXhlY19pZDsKPiArCXJlcXVlc3QgPSByY3VfZGVyZWZlcmVuY2UoYWN0 aXZlLT5yZXF1ZXN0KTsKPiArCWlmICghcmVxdWVzdCB8fCBpOTE1X2dlbV9yZXF1ZXN0X2NvbXBs ZXRlZChyZXF1ZXN0KSkKPiArCQlyZXR1cm4gMDsKPiAgCj4gLQkJLyogQ2hlY2sgdGhhdCB0aGUg cG9pbnRlciB3YXNuJ3QgcmVhc3NpZ25lZCBhbmQgb3ZlcndyaXR0ZW4uCj4gLQkJICoKPiAtCQkg KiBJbiBfX2k5MTVfZ2VtX2FjdGl2ZV9nZXRfcmN1KCksIHdlIGVuZm9yY2Ugb3JkZXJpbmcgYmV0 d2Vlbgo+IC0JCSAqIHRoZSBmaXJzdCByY3UgcG9pbnRlciBkZXJlZmVyZW5jZSAoaW1wb3Npbmcg YQo+IC0JCSAqIHJlYWQtZGVwZW5kZW5jeSBvbmx5IG9uIGFjY2VzcyB0aHJvdWdoIHRoZSBwb2lu dGVyKSBhbmQKPiAtCQkgKiB0aGUgc2Vjb25kIGxvY2tsZXNzIGFjY2VzcyB0aHJvdWdoIHRoZSBt ZW1vcnkgYmFycmllcgo+IC0JCSAqIGZvbGxvd2luZyBhIHN1Y2Nlc3NmdWwgYXRvbWljX2luY19u b3RfemVybygpLiBIZXJlIHRoZXJlCj4gLQkJICogaXMgbm8gc3VjaCBiYXJyaWVyLCBhbmQgc28g d2UgbXVzdCBtYW51YWxseSBpbnNlcnQgYW4KPiAtCQkgKiBleHBsaWNpdCByZWFkIGJhcnJpZXIg dG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZwo+IC0JCSAqIGFjY2VzcyBvY2N1cnMgYWZ0ZXIg YWxsIHRoZSBsb2FkcyB0aHJvdWdoIHRoZSBmaXJzdAo+IC0JCSAqIHBvaW50ZXIuCj4gLQkJICoK PiAtCQkgKiBJdCBpcyB3b3J0aCBjb21wYXJpbmcgdGhpcyBzZXF1ZW5jZSB3aXRoCj4gLQkJICog cmF3X3dyaXRlX3NlcWNvdW50X2xhdGNoKCkgd2hpY2ggb3BlcmF0ZXMgdmVyeSBzaW1pbGFybHku Cj4gLQkJICogVGhlIGNoYWxsZW5nZSBoZXJlIGlzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBvdGhl ciBDUFUKPiAtCQkgKiB3cml0ZXMgdG8gdGhlIHJlYWxsb2NhdGVkIHJlcXVlc3QgdnMgdGhlIGxv Y2FsIENQVSBvcmRlcmluZy4KPiAtCQkgKiBCZWZvcmUgdGhlIG90aGVyIENQVSBjYW4gb3Zlcndy aXRlIHRoZSByZXF1ZXN0LCBpdCB3aWxsCj4gLQkJICogaGF2ZSB1cGRhdGVkIG91ciBhY3RpdmUt PnJlcXVlc3QgYW5kIGdvbmUgdGhyb3VnaCBhIHdtYi4KPiAtCQkgKiBEdXJpbmcgdGhlIHJlYWQg aGVyZSwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdmFsdWVzCj4gLQkJICogd2Ugc2Vl IGhhdmUgbm90IGJlZW4gb3ZlcndyaXR0ZW4gYXMgd2UgZG8gc28gLSBhbmQgd2UgZG8KPiAtCQkg KiB0aGF0IGJ5IHNlcmlhbGlzaW5nIHRoZSBzZWNvbmQgcG9pbnRlciBjaGVjayB3aXRoIHRoZSB3 cml0ZXMKPiAtCQkgKiBvbiBvdGhlciBvdGhlciBDUFVzLgo+IC0JCSAqCj4gLQkJICogVGhlIGNv cnJlc3BvbmRpbmcgd3JpdGUgYmFycmllciBpcyBwYXJ0IG9mCj4gLQkJICogcmN1X2Fzc2lnbl9w b2ludGVyKCkuCj4gLQkJICovCj4gLQkJc21wX3JtYigpOwo+IC0JCWlmIChyZXF1ZXN0ID09IHJj dV9hY2Nlc3NfcG9pbnRlcihhY3RpdmUtPnJlcXVlc3QpKQo+IC0JCQlyZXR1cm4gZmxhZyhpZCk7 Cj4gLQl9IHdoaWxlICgxKTsKPiArCS8qIFRoaXMgaXMgcmFjeS4gU2VlIF9faTkxNV9nZW1fYWN0 aXZlX2dldF9yY3UoKSBmb3IgYSBpbiBkZXRhaWwKPiArCSAqIGRpc2N1c3Npb24gb2YgaG93IHRv IGhhbmRsZSB0aGUgcmFjZSBjb3JyZWN0bHksIGJ1dCBmb3IgcmVwb3J0aW5nCj4gKwkgKiB0aGUg YnVzeSBzdGF0ZSB3ZSBlcnIgb24gdGhlIHNpZGUgb2YgcG90ZW50aWFsbHkgcmVwb3J0aW5nIHRo ZQo+ICsJICogd3JvbmcgZW5naW5lIGFzIGJlaW5nIGJ1c3kgKGJ1dCB3ZSBndWFyYW50ZWUgdGhh dCB0aGUgcmVzdWx0Cj4gKwkgKiBpcyBhdCBsZWFzdCBzZWxmLWNvbnNpc3RlbnQpLgo+ICsJICoK PiArCSAqIEFzIHdlIHVzZSBTTEFCX0RFU1RST1lfQllfUkNVLCB0aGUgcmVxdWVzdCBtYXkgYmUg cmVhbGxvY2F0ZWQKPiArCSAqIHdoaWxzdCB3ZSBhcmUgaW5zcGVjdGluZyBpdCwgZXZlbiB1bmRl ciB0aGUgUkNVIHJlYWQgbG9jayBhcyB3ZSBhcmUuCj4gKwkgKiBUaGlzIG1lYW5zIHRoYXQgdGhl cmUgaXMgYSBzbWFsbCB3aW5kb3cgZm9yIHRoZSBlbmdpbmUgYW5kL29yIHRoZQo+ICsJICogc2Vx bm8gdG8gaGF2ZSBiZWVuIG92ZXJ3cml0dGVuLiBUaGUgc2Vxbm8gd2lsbCBhbHdheXMgYmUgaW4g dGhlCj4gKwkgKiBmdXR1cmUgY29tcGFyZWQgdG8gdGhlIGludGVuZGVkLCBhbmQgc28gd2Uga25v dyB0aGF0IGlmIHRoYXQKPiArCSAqIHNlcW5vIGlzIGlkbGUgKG9uIHdoYXRldmVyIGVuZ2luZSkg b3VyIHJlcXVlc3QgaXMgaWRsZSBhbmQgdGhlCj4gKwkgKiByZXR1cm4gMCBhYm92ZSBpcyBjb3Jy ZWN0Lgo+ICsJICoKPiArCSAqIFRoZSBpc3N1ZSBpcyB0aGF0IGlmIHRoZSBlbmdpbmUgaXMgc3dp dGNoZWQsIGl0IGlzIGp1c3QgYXMgbGlrZWx5Cj4gKwkgKiB0byByZXBvcnQgdGhhdCBpdCBpcyBi dXN5IChidXQgc2luY2UgdGhlIHN3aXRjaCBoYXBwZW5lZCwgd2Uga25vdwo+ICsJICogdGhlIHJl cXVlc3Qgc2hvdWxkIGJlIGlkbGUpLiBTbyB0aGVyZSBpcyBhIHNtYWxsIGNoYW5jZSB0aGF0IGEg YnVzeQo+ICsJICogcmVzdWx0IGlzIGFjdHVhbGx5IHRoZSB3cm9uZyBlbmdpbmUuCj4gKwkgKgo+ ICsJICogU28gd2h5IGRvbid0IHdlIGNhcmU/Cj4gKwkgKgo+ICsJICogRm9yIHN0YXJ0ZXJzLCB0 aGUgYnVzeSBpb2N0bCBpcyBhIGhldXJpc3RpYyB0aGF0IGlzIGJ5IGRlZmluaXRpb24KPiArCSAq IHJhY3kuIEV2ZW4gd2l0aCBwZXJmZWN0IHNlcmlhbGlzYXRpb24gaW4gdGhlIGRyaXZlciwgdGhl IGhhcmR3YXJlCj4gKwkgKiBzdGF0ZSBpcyBjb25zdGFudGx5IGFkdmFuY2luZyAtIHRoZSBzdGF0 ZSB3ZSByZXBvcnQgdG8gdGhlIHVzZXIKPiArCSAqIGlzIHN0YWxlLgo+ICsJICoKPiArCSAqIFRo ZSBjcml0aWNhbCBpbmZvcm1hdGlvbiBmb3IgdGhlIGJ1c3ktaW9jdGwgaXMgd2hldGhlciB0aGUg b2JqZWN0Cj4gKwkgKiBpcyBpZGxlIGFzIHVzZXJzcGFjZSByZWxpZXMgb24gdGhhdCB0byBkZXRl Y3Qgd2hldGhlciBpdHMgbmV4dAo+ICsJICogYWNjZXNzIHdpbGwgc3RhbGwsIG9yIGlmIGl0IGhh cyBtaXNzZWQgc3VibWl0dGluZyBjb21tYW5kcyB0bwo+ICsJICogdGhlIGhhcmR3YXJlIGFsbG93 aW5nIHRoZSBHUFUgdG8gc3RhbGwuIFdlIG5ldmVyIGdlbmVyYXRlIGEKPiArCSAqIGZhbHNlLXBv c2l0aXZlIGZvciBpZGxlbmVzcywgdGh1cyBidXN5LWlvY3RsIGlzIHJlbGlhYmxlIGF0IHRoZQo+ ICsJICogbW9zdCBmdW5kYW1lbnRhbCBsZXZlbCwgYW5kIHdlIG1haW50YWluIHRoZSBndWFyYW50 ZWUgdGhhdCBhCj4gKwkgKiBidXN5IG9iamVjdCBsZWZ0IHRvIGl0c2VsZiB3aWxsIGV2ZW50dWFs bHkgYmVjb21lIGlkbGUgKGFuZCBzdGF5Cj4gKwkgKiBpZGxlISkuCj4gKwkgKgo+ICsJICogV2Ug YWxsb3cgb3Vyc2VsdmVzIHRoZSBsZWV3YXkgb2YgcG90ZW50aWFsbHkgbWlzcmVwb3J0aW5nIHRo ZSBidXN5Cj4gKwkgKiBzdGF0ZSBiZWNhdXNlIHRoYXQgaXMgYW4gb3B0aW1pc2F0aW9uIGhldXJp c3RpYyB0aGF0IGlzIGNvbnN0YW50bHkKPiArCSAqIGluIGZsdXguIEJlaW5nIHF1aWNrbHkgYWJs ZSB0byBkZXRlY3QgdGhlIGJ1c3kvaWRsZSBzdGF0ZSBpcyBtb3JlCj4gKwkgKiBtdWNoIGltcG9y dGFudCB0aGFuIGFjY3VyYXRlIGxvZ2dpbmcgb2Ygd2hpY2ggZW5naW5lcyBleGFjdGx5IHdlcmUK PiArCSAqIGJ1c3kuCj4gKwkgKi8KPiArCXJldHVybiBmbGFnKHJlcXVlc3QtPmVuZ2luZS0+ZXhl Y19pZCk7Cj4gIH0KPiAgCj4gIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50Cj4g ZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCBiL2luY2x1ZGUvdWFwaS9k cm0vaTkxNV9kcm0uaAo+IGluZGV4IDQ1MjYyOWRlN2E1Ny4uYmZkNmQ1OWQ1MDk5IDEwMDY0NAo+ IC0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAo+ICsrKyBiL2luY2x1ZGUvdWFwaS9k cm0vaTkxNV9kcm0uaAo+IEBAIC04NTUsNyArODU1LDE1IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1f YnVzeSB7Cj4gIAkgKiBoYXZpbmcgZmx1c2hlZCBhbnkgcGVuZGluZyBhY3Rpdml0eSksIGFuZCBh IG5vbi16ZXJvIHJldHVybiB0aGF0Cj4gIAkgKiB0aGUgb2JqZWN0IGlzIHN0aWxsIGluLWZsaWdo dCBvbiB0aGUgR1BVLiAoVGhlIEdQVSBoYXMgbm90IHlldAo+ICAJICogc2lnbmFsZWQgY29tcGxl dGlvbiBmb3IgYWxsIHBlbmRpbmcgcmVxdWVzdHMgdGhhdCByZWZlcmVuY2UgdGhlCj4gLQkgKiBv YmplY3QuKQo+ICsJICogb2JqZWN0LikgQW4gb2JqZWN0IGlzIGd1YXJhbnRlZWQgdG8gYmVjb21l IGlkbGUgZXZlbnR1YWxseSAoc28KPiArCSAqIGxvbmcgYXMgbmV3IEdQVSBjb21tYW5kcyBhcmUg ZXhlY3V0ZWQgdXBvbiBpdCkuIER1ZSB0byB0aGUKPiArCSAqIGFzeW5jaHJvbm91cyBuYXR1dHJl IG9mIHRoZSBoYXJkd2FyZSwgYW4gb2JqZWN0IHJlcG9ydGVkCgpzL25hdHV0cmUvbmF0dXJlLgoK PiArCSAqIGFzIGJ1c3kgbWF5IGJlY29tZSBpZGxlIGJlZm9yZSB0aGUgaW9jdGwgaXMgY29tcGxl dGVkLgo+ICsJICoKPiArCSAqIEZ1cnRoZXJtb3JlLCBpZiB0aGUgb2JqZWN0IGlzIGJ1c3ksIHdo aWNoIGVuZ2luZSBpcyBidXN5IGlzIG9ubHkKPiArCSAqIHByb3ZpZGVkIGFzIGEgZ3VpZGUuIFRo ZXJlIGFyZSByYWNlIGNvbmRpdGlvbnMgd2hpY2ggcHJldmVudCB0aGUKPiArCSAqIHJlcG9ydCBm cm9tIGJlaW5nIGFsd2F5cyBhY2N1cmF0ZS4gSG93ZXZlciwgdGhlIGNvbnZlcnNlIGlzIG5vdAo+ ICsJICogdHJ1ZSwgaWYgdGhlIG9iamVjdCBpcyBpZGxlIHRoZSByZXN1bHQgaXMgYWNjdXJhdGUu Cj4gIAkgKgoKSW4gaGVyZSBJIGFtIHRoaW5raW5nIGFjY3VyYXRlIGluIGJ1c3luZXNzIHdpc2Ug b3IgYWNjdXJhdGUgaW4gYnVzeW5lc3MKYW5kIGVuZ2luZSB3aXNlLiBQZXJoYXBzIGV4cGxpY2l0 bHkgc3RhdGUgd2hpY2ggdmFsdWVzIGNhbiBiZSB0cnVzdGVkIGluCndoaWNoIGNhc2Ugb2YgYnVz eW5lc3MuCgpPdmVyYWxsIHRoZSBjb21tZW50cyBhcmUgc3RlcmxpbmcgYXMgdGhpcyBpcyB2ZXJ5 IGhhcmQgdG8gdW5kZXN0YW5kCmFyZWEuIFRoYW5rcy4KCkpvb25hcyBhbHJlYWR5IHN0YW1wZWQg YnV0IHlvdSBjYW4gYWxzbyBhZGQKUmV2aWV3ZWQtYnk6IE1pa2EgS3VvcHBhbGEgPG1pa2Eua3Vv cHBhbGFAaW50ZWwuY29tPgoKCj4gIAkgKiBUaGUgcmV0dXJuZWQgZHdvcmQgaXMgc3BsaXQgaW50 byB0d28gZmllbGRzIHRvIGluZGljYXRlIGJvdGgKPiAgCSAqIHRoZSBlbmdpbmVzIG9uIHdoaWNo IHRoZSBvYmplY3QgaXMgYmVpbmcgcmVhZCwgYW5kIHRoZQo+IEBAIC04NzgsNiArODg2LDExIEBA IHN0cnVjdCBkcm1faTkxNV9nZW1fYnVzeSB7Cj4gIAkgKiBleGVjdXRpb24gZW5naW5lcywgZS5n LiBtdWx0aXBsZSBtZWRpYSBlbmdpbmVzLCB3aGljaCBhcmUKPiAgCSAqIG1hcHBlZCB0byB0aGUg c2FtZSBpZGVudGlmaWVyIGluIHRoZSBFWEVDQlVGRkVSMiBpb2N0bCBhbmQKPiAgCSAqIHNvIGFy ZSBub3Qgc2VwYXJhdGVseSByZXBvcnRlZCBmb3IgYnVzeW5lc3MuCj4gKwkgKgo+ICsJICogQ2F2 ZWF0IGVtcHRvcjoKPiArCSAqIE9ubHkgdGhlIGJvb2xlYW4gcmVzdWx0IG9mIHRoaXMgcXVlcnkg aXMgcmVsaWFibGU7IHRoYXQgaXMgd2hldGhlcgo+ICsJICogdGhlIG9iamVjdCBpcyBpZGxlIG9y IGJ1c3kuIFRoZSByZXBvcnQgb2Ygd2hpY2ggZW5naW5lcyBhcmUgYnVzeQo+ICsJICogc2hvdWxk IGJlIG9ubHkgdXNlZCBhcyBhIGhldXJpc3RpYy4KPiAgCSAqLwo+ICAJX191MzIgYnVzeTsKPiAg fTsKPiAtLSAKPiAyLjguMQo+Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeAo=