From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 04/25] drm/i915/userptr: Avoid struct_mutex recursion for mmu_invalidate_range_start Date: Tue, 6 Nov 2018 14:11:02 +0000 Message-ID: <4a81fdad-ee0f-4c9c-d883-03451915672e@linux.intel.com> References: <20181102161232.17742-1-chris@chris-wilson.co.uk> <20181102161232.17742-4-chris@chris-wilson.co.uk> <154150935579.6179.5408209196335082725@skylake-alporthouse-com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 257606E08C for ; Tue, 6 Nov 2018 14:11:04 +0000 (UTC) In-Reply-To: <154150935579.6179.5408209196335082725@skylake-alporthouse-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: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDA2LzExLzIwMTggMTM6MDIsIENocmlzIFdpbHNvbiB3cm90ZToKPiBRdW90aW5nIFR2cnRr byBVcnN1bGluICgyMDE4LTExLTA2IDEyOjQxOjUzKQo+Pgo+PiBPbiAwMi8xMS8yMDE4IDE2OjEy LCBDaHJpcyBXaWxzb24gd3JvdGU6Cj4+PiBTaW5jZSBjb21taXQgOTMwNjVhYzc1M2U0ICgibW0s IG9vbTogZGlzdGluZ3Vpc2ggYmxvY2thYmxlIG1vZGUgZm9yIG1tdQo+Pj4gbm90aWZpZXJzIikg d2UgaGF2ZSBiZWVuIGFibGUgdG8gcmVwb3J0IGZhaWx1cmUgZnJvbQo+Pj4gbW11X2ludmFsaWRh dGVfcmFuZ2Vfc3RhcnQgd2hpY2ggYWxsb3dzIHVzIHRvIHVzZSBhIHRyeWxvY2sgb24gdGhlCj4+ PiBzdHJ1Y3RfbXV0ZXggdG8gYXZvaWQgcG90ZW50aWFsIHJlY3Vyc2lvbiBhbmQgcmVwb3J0IC1F QlVTWSBpbnN0ZWFkLgo+Pj4gRnVydGhlcm1vcmUsIHRoaXMgYWxsb3dzIHVzIHRvIHB1bGwgdGhl IHdvcmsgaW50byB0aGUgbWFpbiBjYWxsYmFjayBhbmQKPj4+IGF2b2lkIHRoZSBzbGVpZ2h0LW9m LWhhbmQgaW4gdXNpbmcgYSB3b3JrcXVldWUgdG8gYXZvaWQgbG9ja2RlcC4KPj4+Cj4+PiBIb3dl dmVyLCBub3QgYWxsIHBhdGhzIHRvIG1tdV9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0IGFyZSBwcmVw YXJlZCB0bwo+Pj4gaGFuZGxlIGZhaWx1cmUsIHNvIGluc3RlYWQgb2YgcmVwb3J0aW5nIHRoZSBy ZWN1cnNpb24sIGRlYWwgd2l0aCBpdC4KPj4KPj4gUGxlYXNlIGFkZCBhIHBhcmFncmFwaCBvbiBo b3cgdGhlIHBhdGNoIGRlYWxzIHdpdGggaXQuCj4gCj4gU2FtZSBhcyBiZWZvcmUsIHdlIGNyeSBp bnRvIGRtZXNnIGFib3V0IGl0LgoKQSBmZXcgd29yZHMgYWJvdXQgYXN5bmMgY2FuY2VsIGhhbmRs aW5nIGluIHB1dF9wYWdlcyBhcyB0aGUgYXBwcm9hY2ggCnRha2VuIHdvdWxkIGJlIGVub3VnaC4K Cj4+PiBCdWd6aWxsYTogaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/ aWQ9MTA4Mzc1Cj4+PiBSZWZlcmVuY2VzOiA5MzA2NWFjNzUzZTQgKCJtbSwgb29tOiBkaXN0aW5n dWlzaCBibG9ja2FibGUgbW9kZSBmb3IgbW11IG5vdGlmaWVycyIpCj4+PiBTaWduZWQtb2ZmLWJ5 OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPj4+IC0tLQo+Pj4gICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgIHwgICA0ICstCj4+PiAgICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgfCAgMTggKy0KPj4+ICAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdC5oICB8ICAgNyArCj4+PiAgICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMgfCAyMTcgKysrKysrKysrKystLS0t LS0tLS0tLS0tCj4+PiAgICA0IGZpbGVzIGNoYW5nZWQsIDEyMCBpbnNlcnRpb25zKCspLCAxMjYg ZGVsZXRpb25zKC0pCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+PiBpbmRleCAyYTg4 YTdlYjg3MWIuLjEwNTZiMTJjM2JjOCAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK Pj4+IEBAIC0zMDczLDggKzMwNzMsOCBAQCBlbnVtIGk5MTVfbW1fc3ViY2xhc3MgeyAvKiBsb2Nr ZGVwIHN1YmNsYXNzIGZvciBvYmotPm1tLmxvY2sgKi8KPj4+ICAgICAgICBJOTE1X01NX1NIUklO S0VSCj4+PiAgICB9Owo+Pj4gICAgCj4+PiAtdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFn ZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPj4+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBlbnVtIGk5MTVfbW1fc3ViY2xhc3Mgc3ViY2xhc3MpOwo+Pj4gK2ludCBf X2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gaTkxNV9tbV9zdWJjbGFz cyBzdWJjbGFzcyk7Cj4+PiAgICB2b2lkIF9faTkxNV9nZW1fb2JqZWN0X2ludmFsaWRhdGUoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cj4+PiAgICAKPj4+ICAgIGVudW0gaTkxNV9t YXBfdHlwZSB7Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0u YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPj4+IGluZGV4IDkzZDA5MjgyNzEw ZC4uOWE4YWY5NDU0YTUzIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW0uYwo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+Pj4gQEAg LTI0MjksOCArMjQyOSw4IEBAIF9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0X3BhZ2VzKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4+PiAgICAgICAgc3RydWN0IHNnX3RhYmxlICpwYWdl czsKPj4+ICAgIAo+Pj4gICAgICAgIHBhZ2VzID0gZmV0Y2hfYW5kX3plcm8oJm9iai0+bW0ucGFn ZXMpOwo+Pj4gLSAgICAgaWYgKCFwYWdlcykKPj4+IC0gICAgICAgICAgICAgcmV0dXJuIE5VTEw7 Cj4+PiArICAgICBpZiAoSVNfRVJSX09SX05VTEwocGFnZXMpKQo+Pj4gKyAgICAgICAgICAgICBy ZXR1cm4gcGFnZXM7Cj4+PiAgICAKPj4+ICAgICAgICBzcGluX2xvY2soJmk5MTUtPm1tLm9ial9s b2NrKTsKPj4+ICAgICAgICBsaXN0X2RlbCgmb2JqLT5tbS5saW5rKTsKPj4+IEBAIC0yNDU0LDE3 ICsyNDU0LDE2IEBAIF9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopCj4+PiAgICAgICAgcmV0dXJuIHBhZ2VzOwo+Pj4gICAgfQo+Pj4g ICAgCj4+PiAtdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVt IGk5MTVfbW1fc3ViY2xhc3Mgc3ViY2xhc3MpCj4+PiAraW50IF9faTkxNV9nZW1fb2JqZWN0X3B1 dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZW51bSBpOTE1X21tX3N1YmNsYXNzIHN1YmNsYXNzKQo+Pj4gICAg ewo+Pj4gICAgICAgIHN0cnVjdCBzZ190YWJsZSAqcGFnZXM7Cj4+PiArICAgICBpbnQgcmV0ID0g LUVCVVNZOwo+Pj4gICAgCj4+PiAgICAgICAgaWYgKGk5MTVfZ2VtX29iamVjdF9oYXNfcGlubmVk X3BhZ2VzKG9iaikpCj4+PiAtICAgICAgICAgICAgIHJldHVybjsKPj4+ICsgICAgICAgICAgICAg cmV0dXJuIC1FQlVTWTsKPj4KPj4gQ291bGQgcmV0dXJuIHJldCBzaW5jZSB5b3UganVzdCBsb2Fk ZWQgaXQgd2l0aCAtRUJVU1kgYnV0IG5vdCBzdXJlIGlmIGl0Cj4+IG1ha2VzIGFueSBkaWZmZXJl bmNlLgo+Pgo+Pj4gICAgCj4+PiAgICAgICAgR0VNX0JVR19PTihvYmotPmJpbmRfY291bnQpOwo+ Pj4gLSAgICAgaWYgKCFpOTE1X2dlbV9vYmplY3RfaGFzX3BhZ2VzKG9iaikpCj4+PiAtICAgICAg ICAgICAgIHJldHVybjsKPj4+ICAgIAo+Pj4gICAgICAgIC8qIE1heSBiZSBjYWxsZWQgYnkgc2hy aW5rZXIgZnJvbSB3aXRoaW4gZ2V0X3BhZ2VzKCkgKG9uIGFub3RoZXIgYm8pICovCj4+PiAgICAg ICAgbXV0ZXhfbG9ja19uZXN0ZWQoJm9iai0+bW0ubG9jaywgc3ViY2xhc3MpOwo+Pj4gQEAgLTI0 NzcsMTEgKzI0NzYsMTYgQEAgdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPj4+ICAgICAgICAgKiBsaXN0cyBlYXJseS4KPj4+ ICAgICAgICAgKi8KPj4+ICAgICAgICBwYWdlcyA9IF9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0X3Bh Z2VzKG9iaik7Cj4+PiArICAgICBpZiAoIXBhZ2VzICYmICFpOTE1X2dlbV9vYmplY3RfbmVlZHNf YXN5bmNfY2FuY2VsKG9iaikpCj4+Cj4+IFdvdWxkIGFzeW5jX3B1dF9wYWdlcyBiZSBiZXR0ZXI/ Cj4gCj4gYXN5bmNfcHV0X3BhZ2VzIGNvbWVzIGxhdGVyLiBUaGVyZSdzIGEgbGFyZ2Ugb3Zlcmxh cCBoZXJlIHdpdGggdGhlIGFzeW5jCj4gZ2V0X3BhZ2VzIHdvcmsgd2hpY2ggaGFzIGEgbG90IG9m IHRoZSBzYW1lIGRpbGVtbWFzIHdpdGggaG93IHRvIGhhbmRsZQo+IHRvIGNhbmNlbGxhdGlvbiBv ZiB0aGF0IHdvcmsuIFRoaXMgaXMgYSBuYXN0eSBtaWRsYXllciBoYWNrLCBob3BlZnVsbHkKPiB0 ZW1wb3JhcnksIHRvIGF2b2lkIGhhdmluZyB0byBoYW5kbGUgTlVMTCBwYWdlcyBpbiBhbGwgdGhl IGNhbGxiYWNrcy4KCk9rLgoKPj4+ICsgICAgICAgICAgICAgcGFnZXMgPSBFUlJfUFRSKC1FSU5W QUwpOwo+Pj4gICAgICAgIGlmICghSVNfRVJSKHBhZ2VzKSkKPj4+ICAgICAgICAgICAgICAgIG9i ai0+b3BzLT5wdXRfcGFnZXMob2JqLCBwYWdlcyk7Cj4+PiAgICAKPj4+ICsgICAgIHJldCA9IDA7 Cj4+Cj4+IEZ1bm5pbHkgZW5vdWdoLCBubyBjYWxsZXJzIHNlZW0gdG8gYmUgYm90aGVyZWQgd2l0 aCB0aGUgcmV0dXJuIGNvZGUgZnJvbQo+PiB0aGlzIGZ1bmN0aW9uLgo+IAo+IFNpbmNlIHRoZXkg Zm9sbG93ZWQgdGhlIGNhbGwgd2l0aCBhIHdhcm4gaWYgaXQgZGlkbid0IGRvIHRoZSBqb2IuIE5v dyB3ZQo+IGhhdmUgYSBwYXRoIHdoZXJlIHdlIGNhbiBwdXNoIHRoYXQgd2FybiB0byB0aGUgY2Fs bGVyLgo+IAo+Pj4gICAgdW5sb2NrOgo+Pj4gICAgICAgIG11dGV4X3VubG9jaygmb2JqLT5tbS5s b2NrKTsKPj4+ICsKPj4+ICsgICAgIHJldHVybiByZXQ7Cj4+PiAgICB9Cj4+PiAgICAKPj4+ICAg IGJvb2wgaTkxNV9zZ190cmltKHN0cnVjdCBzZ190YWJsZSAqb3JpZ19zdCkKPj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdC5oCj4+PiBpbmRleCBhNmRkN2M0NmRlMGQuLjQ5Y2U3 OTcxNzNiNSAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29i amVjdC5oCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9vYmplY3QuaAo+ Pj4gQEAgLTU2LDYgKzU2LDcgQEAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzIHsKPj4+ ICAgICNkZWZpbmUgSTkxNV9HRU1fT0JKRUNUX0hBU19TVFJVQ1RfUEFHRSAgICAgQklUKDApCj4+ PiAgICAjZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9JU19TSFJJTktBQkxFICAgICAgIEJJVCgxKQo+ Pj4gICAgI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfSVNfUFJPWFkgICAgQklUKDIpCj4+PiArI2Rl ZmluZSBJOTE1X0dFTV9PQkpFQ1RfQVNZTkNfQ0FOQ0VMIEJJVCgzKQo+Pgo+PiBTb21ld2hlcmUg d2UgbmVlZCBhIGNvbW1lbnQgYmx1cmIgZXhwbGFpbmluZyB3aGF0IGFzeW5jX2NhbmNlbCBtZWFu cy4KPj4KPj4+ICAgIAo+Pj4gICAgICAgIC8qIEludGVyZmFjZSBiZXR3ZWVuIHRoZSBHRU0gb2Jq ZWN0IGFuZCBpdHMgYmFja2luZyBzdG9yYWdlLgo+Pj4gICAgICAgICAqIGdldF9wYWdlcygpIGlz IGNhbGxlZCBvbmNlIHByaW9yIHRvIHRoZSB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgc2V0Cj4+PiBA QCAtMzg2LDYgKzM4NywxMiBAQCBpOTE1X2dlbV9vYmplY3RfaXNfcHJveHkoY29uc3Qgc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPj4+ICAgICAgICByZXR1cm4gb2JqLT5vcHMtPmZs YWdzICYgSTkxNV9HRU1fT0JKRUNUX0lTX1BST1hZOwo+Pj4gICAgfQo+Pj4gICAgCj4+PiArc3Rh dGljIGlubGluZSBib29sCj4+PiAraTkxNV9nZW1fb2JqZWN0X25lZWRzX2FzeW5jX2NhbmNlbChj b25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+Pj4gK3sKPj4+ICsgICAgIHJl dHVybiBvYmotPm9wcy0+ZmxhZ3MgJiBJOTE1X0dFTV9PQkpFQ1RfQVNZTkNfQ0FOQ0VMOwo+Pj4g K30KPj4+ICsKPj4+ICAgIHN0YXRpYyBpbmxpbmUgYm9vbAo+Pj4gICAgaTkxNV9nZW1fb2JqZWN0 X2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+Pj4gICAg ewo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYwo+Pj4gaW5kZXggMmM5 YjI4NDAzNmQxLi5hYjVhZTQyNmUyN2IgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV91c2VycHRyLmMKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX3VzZXJwdHIuYwo+Pj4gQEAgLTUwLDc5ICs1MCw4NCBAQCBzdHJ1Y3QgaTkxNV9tbXVf bm90aWZpZXIgewo+Pj4gICAgICAgIHN0cnVjdCBobGlzdF9ub2RlIG5vZGU7Cj4+PiAgICAgICAg c3RydWN0IG1tdV9ub3RpZmllciBtbjsKPj4+ICAgICAgICBzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQg b2JqZWN0czsKPj4+IC0gICAgIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKPj4+ICsgICAg IHN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW07Cj4+PiAgICB9Owo+Pj4gICAgCj4+PiAgICBzdHJ1 Y3QgaTkxNV9tbXVfb2JqZWN0IHsKPj4+ICAgICAgICBzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIg Km1uOwo+Pj4gICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4+PiAgICAg ICAgc3RydWN0IGludGVydmFsX3RyZWVfbm9kZSBpdDsKPj4+IC0gICAgIHN0cnVjdCBsaXN0X2hl YWQgbGluazsKPj4+IC0gICAgIHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwo+Pj4gLSAgICAgYm9v bCBhdHRhY2hlZDsKPj4+ICAgIH07Cj4+PiAgICAKPj4+IC1zdGF0aWMgdm9pZCBjYW5jZWxfdXNl cnB0cihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4+PiAtewo+Pj4gLSAgICAgc3RydWN0IGk5 MTVfbW11X29iamVjdCAqbW8gPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCptbyksIHdvcmsp Owo+Pj4gLSAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IG1vLT5vYmo7Cj4+ PiAtICAgICBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmFjdGl2ZTsKPj4+IC0KPj4+IC0gICAgIC8qIENh bmNlbCBhbnkgYWN0aXZlIHdvcmtlciBhbmQgZm9yY2UgdXMgdG8gcmUtZXZhbHVhdGUgZ3VwICov Cj4+PiAtICAgICBtdXRleF9sb2NrKCZvYmotPm1tLmxvY2spOwo+Pj4gLSAgICAgYWN0aXZlID0g ZmV0Y2hfYW5kX3plcm8oJm9iai0+dXNlcnB0ci53b3JrKTsKPj4+IC0gICAgIG11dGV4X3VubG9j aygmb2JqLT5tbS5sb2NrKTsKPj4+IC0gICAgIGlmIChhY3RpdmUpCj4+PiAtICAgICAgICAgICAg IGdvdG8gb3V0Owo+Pj4gLQo+Pj4gLSAgICAgaTkxNV9nZW1fb2JqZWN0X3dhaXQob2JqLCBJOTE1 X1dBSVRfQUxMLCBNQVhfU0NIRURVTEVfVElNRU9VVCwgTlVMTCk7Cj4+PiAtCj4+PiAtICAgICBt dXRleF9sb2NrKCZvYmotPmJhc2UuZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+Pj4gLQo+Pj4gLSAgICAg LyogV2UgYXJlIGluc2lkZSBhIGt0aHJlYWQgY29udGV4dCBhbmQgY2FuJ3QgYmUgaW50ZXJydXB0 ZWQgKi8KPj4+IC0gICAgIGlmIChpOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaikgPT0gMCkKPj4+ IC0gICAgICAgICAgICAgX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKG9iaiwgSTkxNV9NTV9O T1JNQUwpOwo+Pj4gLSAgICAgV0FSTl9PTkNFKGk5MTVfZ2VtX29iamVjdF9oYXNfcGFnZXMob2Jq KSwKPj4+IC0gICAgICAgICAgICAgICAiRmFpbGVkIHRvIHJlbGVhc2UgcGFnZXM6IGJpbmRfY291 bnQ9JWQsIHBhZ2VzX3Bpbl9jb3VudD0lZCwgcGluX2dsb2JhbD0lZFxuIiwKPj4+IC0gICAgICAg ICAgICAgICBvYmotPmJpbmRfY291bnQsCj4+PiAtICAgICAgICAgICAgICAgYXRvbWljX3JlYWQo Jm9iai0+bW0ucGFnZXNfcGluX2NvdW50KSwKPj4+IC0gICAgICAgICAgICAgICBvYmotPnBpbl9n bG9iYWwpOwo+Pj4gLQo+Pj4gLSAgICAgbXV0ZXhfdW5sb2NrKCZvYmotPmJhc2UuZGV2LT5zdHJ1 Y3RfbXV0ZXgpOwo+Pj4gLQo+Pj4gLW91dDoKPj4+IC0gICAgIGk5MTVfZ2VtX29iamVjdF9wdXQo b2JqKTsKPj4+IC19Cj4+PiAtCj4+PiAgICBzdGF0aWMgdm9pZCBhZGRfb2JqZWN0KHN0cnVjdCBp OTE1X21tdV9vYmplY3QgKm1vKQo+Pj4gICAgewo+Pj4gLSAgICAgaWYgKG1vLT5hdHRhY2hlZCkK Pj4+ICsgICAgIGlmICghUkJfRU1QVFlfTk9ERSgmbW8tPml0LnJiKSkKPj4+ICAgICAgICAgICAg ICAgIHJldHVybjsKPj4+ICAgIAo+Pj4gICAgICAgIGludGVydmFsX3RyZWVfaW5zZXJ0KCZtby0+ aXQsICZtby0+bW4tPm9iamVjdHMpOwo+Pj4gLSAgICAgbW8tPmF0dGFjaGVkID0gdHJ1ZTsKPj4+ ICAgIH0KPj4+ICAgIAo+Pj4gICAgc3RhdGljIHZvaWQgZGVsX29iamVjdChzdHJ1Y3QgaTkxNV9t bXVfb2JqZWN0ICptbykKPj4+ICAgIHsKPj4+IC0gICAgIGlmICghbW8tPmF0dGFjaGVkKQo+Pj4g KyAgICAgaWYgKFJCX0VNUFRZX05PREUoJm1vLT5pdC5yYikpCj4+PiAgICAgICAgICAgICAgICBy ZXR1cm47Cj4+PiAgICAKPj4+ICAgICAgICBpbnRlcnZhbF90cmVlX3JlbW92ZSgmbW8tPml0LCAm bW8tPm1uLT5vYmplY3RzKTsKPj4+IC0gICAgIG1vLT5hdHRhY2hlZCA9IGZhbHNlOwo+Pj4gKyAg ICAgUkJfQ0xFQVJfTk9ERSgmbW8tPml0LnJiKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZv aWQKPj4+ICtfX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLCBib29sIHZhbHVlKQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCBpOTE1X21t dV9vYmplY3QgKm1vID0gb2JqLT51c2VycHRyLm1tdV9vYmplY3Q7Cj4+PiArCj4+PiArICAgICAv Kgo+Pj4gKyAgICAgICogRHVyaW5nIG1tX2ludmFsaWRhdGVfcmFuZ2Ugd2UgbmVlZCB0byBjYW5j ZWwgYW55IHVzZXJwdHIgdGhhdAo+Pj4gKyAgICAgICogb3ZlcmxhcHMgdGhlIHJhbmdlIGJlaW5n IGludmFsaWRhdGVkLiBEb2luZyBzbyByZXF1aXJlcyB0aGUKPj4+ICsgICAgICAqIHN0cnVjdF9t dXRleCwgYW5kIHRoYXQgcmlza3MgcmVjdXJzaW9uLiBJbiBvcmRlciB0byBjYXVzZQo+Pj4gKyAg ICAgICogcmVjdXJzaW9uLCB0aGUgdXNlciBtdXN0IGFsaWFzIHRoZSB1c2VycHRyIGFkZHJlc3Mg c3BhY2Ugd2l0aAo+Pj4gKyAgICAgICogYSBHVFQgbW1hcHBpbmcgKHBvc3NpYmxlIHdpdGggYSBN QVBfRklYRUQpIC0gdGhlbiB3aGVuIHdlIGhhdmUKPj4+ICsgICAgICAqIHRvIGludmFsaWRhdGUg dGhhdCBtbWFwaW5nLCBtbV9pbnZhbGlkYXRlX3JhbmdlIGlzIGNhbGxlZCB3aXRoCj4+PiArICAg ICAgKiB0aGUgdXNlcnB0ciBhZGRyZXNzICphbmQqIHRoZSBzdHJ1Y3RfbXV0ZXggaGVsZC4gIFRv IHByZXZlbnQgdGhhdAo+Pj4gKyAgICAgICogd2Ugc2V0IGEgZmxhZyB1bmRlciB0aGUgaTkxNV9t bXVfbm90aWZpZXIgc3BpbmxvY2sgdG8gaW5kaWNhdGUKPj4+ICsgICAgICAqIHdoZXRoZXIgdGhp cyBvYmplY3QgaXMgdmFsaWQuCj4+PiArICAgICAgKi8KPj4+ICsgICAgIGlmICghbW8pCj4+PiAr ICAgICAgICAgICAgIHJldHVybjsKPj4+ICsKPj4+ICsgICAgIHNwaW5fbG9jaygmbW8tPm1uLT5s b2NrKTsKPj4+ICsgICAgIGlmICh2YWx1ZSkKPj4+ICsgICAgICAgICAgICAgYWRkX29iamVjdCht byk7Cj4+PiArICAgICBlbHNlCj4+PiArICAgICAgICAgICAgIGRlbF9vYmplY3QobW8pOwo+Pj4g KyAgICAgc3Bpbl91bmxvY2soJm1vLT5tbi0+bG9jayk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRp YyBzdHJ1Y3QgbXV0ZXggKl9faTkxNV9tdXRleF9sb2NrX3JlY3Vyc2l2ZShzdHJ1Y3QgbXV0ZXgg Km0pCj4+PiArewo+Pj4gKyAgICAgc3dpdGNoIChtdXRleF90cnlsb2NrX3JlY3Vyc2l2ZShtKSkg ewo+Pj4gKyAgICAgZGVmYXVsdDoKPj4+ICsgICAgIGNhc2UgTVVURVhfVFJZTE9DS19GQUlMRUQ6 Cj4+PiArICAgICAgICAgICAgIG11dGV4X2xvY2sobSk7Cj4gCj4gSSBoYXZlbid0IHlldCBzZWVu IGEgcmVhc29uIHRvLCBidXQgdGhpcyBpcyBwcm9iYWJseSBiZXN0IHRvIGJlIG1hcmtlZAo+IHVw IGFzIGEgbmVzdGVkIGxvY2sganVzdCBsaWtlIHRoZSBzaHJpbmtlci4gU28gZmFyLCBJIGhhdmVu J3Qgc2VlbiBhCj4gY2FsbGVyIGZyb20gaW5zaWRlIGZzX3JlY2xhaW0sIGJ1dCB0aGUgdHJ5X3Rv X21pZ3JhdGUgKGRlYWRsb2NrKSBwYXRocyBhcmUKPiBzaW1pbGFyIGVub3VnaC4KCk9uIHN0cnVj dCBtdXRleD8gSG93IHdpbGwgdGhhdCB3b3JrPwoKPiAKPj4+ICsgICAgIGNhc2UgTVVURVhfVFJZ TE9DS19TVUNDRVNTOgo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gbTsKPj4+ICsKPj4+ICsgICAg IGNhc2UgTVVURVhfVFJZTE9DS19SRUNVUlNJVkU6Cj4+PiArICAgICAgICAgICAgIHJldHVybiBF UlJfUFRSKC1FRVhJU1QpOyA+ICsgICAgfQo+Pj4gICAgfQo+Pj4gICAgCj4+PiAgICBzdGF0aWMg aW50IGk5MTVfZ2VtX3VzZXJwdHJfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11 X25vdGlmaWVyICpfbW4sCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+Pj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0 LAo+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBsb25nIGVuZCwKPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYm9vbCBibG9ja2FibGUpCj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0s Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgbG9uZyBzdGFydCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGVuZCwKPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJsb2NrYWJsZSkKPj4+ ICAgIHsKPj4+ICAgICAgICBzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1uID0KPj4+ICAgICAg ICAgICAgICAgIGNvbnRhaW5lcl9vZihfbW4sIHN0cnVjdCBpOTE1X21tdV9ub3RpZmllciwgbW4p Owo+Pj4gLSAgICAgc3RydWN0IGk5MTVfbW11X29iamVjdCAqbW87Cj4+PiAgICAgICAgc3RydWN0 IGludGVydmFsX3RyZWVfbm9kZSAqaXQ7Cj4+PiAtICAgICBMSVNUX0hFQUQoY2FuY2VsbGVkKTsK Pj4+ICsgICAgIHN0cnVjdCBtdXRleCAqdW5sb2NrID0gTlVMTDsKPj4+ICsgICAgIGludCByZXQg PSAwOwo+Pj4gICAgCj4+PiAgICAgICAgaWYgKFJCX0VNUFRZX1JPT1QoJm1uLT5vYmplY3RzLnJi X3Jvb3QpKQo+Pj4gICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4+PiBAQCAtMTMzLDExICsxMzgs MTUgQEAgc3RhdGljIGludCBpOTE1X2dlbV91c2VycHRyX21uX2ludmFsaWRhdGVfcmFuZ2Vfc3Rh cnQoc3RydWN0IG1tdV9ub3RpZmllciAqX21uLAo+Pj4gICAgICAgIHNwaW5fbG9jaygmbW4tPmxv Y2spOwo+Pj4gICAgICAgIGl0ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX2ZpcnN0KCZtbi0+b2JqZWN0 cywgc3RhcnQsIGVuZCk7Cj4+PiAgICAgICAgd2hpbGUgKGl0KSB7Cj4+PiArICAgICAgICAgICAg IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4+PiArCj4+PiAgICAgICAgICAgICAg ICBpZiAoIWJsb2NrYWJsZSkgewo+Pj4gLSAgICAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2Nr KCZtbi0+bG9jayk7Cj4+PiAtICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FQUdBSU47Cj4+ PiArICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVBR0FJTjsKPj4+ICsgICAgICAgICAgICAg ICAgICAgICBicmVhazsKPj4+ICAgICAgICAgICAgICAgIH0KPj4+IC0gICAgICAgICAgICAgLyog VGhlIG1tdV9vYmplY3QgaXMgcmVsZWFzZWQgbGF0ZSB3aGVuIGRlc3Ryb3lpbmcgdGhlCj4+PiAr Cj4+PiArICAgICAgICAgICAgIC8qCj4+PiArICAgICAgICAgICAgICAqIFRoZSBtbXVfb2JqZWN0 IGlzIHJlbGVhc2VkIGxhdGUgd2hlbiBkZXN0cm95aW5nIHRoZQo+Pj4gICAgICAgICAgICAgICAg ICogR0VNIG9iamVjdCBzbyBpdCBpcyBlbnRpcmVseSBwb3NzaWJsZSB0byBnYWluIGEKPj4+ICAg ICAgICAgICAgICAgICAqIHJlZmVyZW5jZSBvbiBhbiBvYmplY3QgaW4gdGhlIHByb2Nlc3Mgb2Yg YmVpbmcgZnJlZWQKPj4+ICAgICAgICAgICAgICAgICAqIHNpbmNlIG91ciBzZXJpYWxpc2F0aW9u IGlzIHZpYSB0aGUgc3BpbmxvY2sgYW5kIG5vdAo+Pj4gQEAgLTE0NiwyMSArMTU1LDMzIEBAIHN0 YXRpYyBpbnQgaTkxNV9nZW1fdXNlcnB0cl9tbl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVj dCBtbXVfbm90aWZpZXIgKl9tbiwKPj4+ICAgICAgICAgICAgICAgICAqIHVzZS1hZnRlci1mcmVl IHdlIG9ubHkgYWNxdWlyZSBhIHJlZmVyZW5jZSBvbiB0aGUKPj4+ICAgICAgICAgICAgICAgICAq IG9iamVjdCBpZiBpdCBpcyBub3QgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZGVzdHJveWVkLgo+ Pj4gICAgICAgICAgICAgICAgICovCj4+PiAtICAgICAgICAgICAgIG1vID0gY29udGFpbmVyX29m KGl0LCBzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0LCBpdCk7Cj4+PiAtICAgICAgICAgICAgIGlmIChr cmVmX2dldF91bmxlc3NfemVybygmbW8tPm9iai0+YmFzZS5yZWZjb3VudCkpCj4+PiAtICAgICAg ICAgICAgICAgICAgICAgcXVldWVfd29yayhtbi0+d3EsICZtby0+d29yayk7Cj4+PiAtCj4+PiAt ICAgICAgICAgICAgIGxpc3RfYWRkKCZtby0+bGluaywgJmNhbmNlbGxlZCk7Cj4+PiAtICAgICAg ICAgICAgIGl0ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX25leHQoaXQsIHN0YXJ0LCBlbmQpOwo+Pj4g KyAgICAgICAgICAgICBvYmogPSBjb250YWluZXJfb2YoaXQsIHN0cnVjdCBpOTE1X21tdV9vYmpl Y3QsIGl0KS0+b2JqOwo+Pj4gKyAgICAgICAgICAgICBpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJv KCZvYmotPmJhc2UucmVmY291bnQpKSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgaXQgPSBp bnRlcnZhbF90cmVlX2l0ZXJfbmV4dChpdCwgc3RhcnQsIGVuZCk7Cj4+PiArICAgICAgICAgICAg ICAgICAgICAgY29udGludWU7Cj4+PiArICAgICAgICAgICAgIH0KPj4+ICsgICAgICAgICAgICAg c3Bpbl91bmxvY2soJm1uLT5sb2NrKTsgPiArCj4+PiArICAgICAgICAgICAgIGlmICghdW5sb2Nr KQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHVubG9jayA9IF9faTkxNV9tdXRleF9sb2NrX3Jl Y3Vyc2l2ZSgmbW4tPm1tLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4+ICsgICAgICAgICAg ICAgcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmopOwo+Pj4gKyAgICAgICAgICAgICBp ZiAocmV0ID09IDApCj4+PiArICAgICAgICAgICAgICAgICAgICAgcmV0ID0gX19pOTE1X2dlbV9v YmplY3RfcHV0X3BhZ2VzKG9iaiwgSTkxNV9NTV9TSFJJTktFUik7Cj4+Cj4+IFdoZW4gZ3VwX3dv cmtlciBoYXMgYmVlbiBzY2hlZHVsZWQgYnV0IG5vdCBleGVjdXRlZCwgd2UnbGwgaGF2ZSBvYmpl Y3QKPj4gaW4gdGhlIGludGVydmFsIHRyZWUgd2l0aCBwYWdlcyA9PSAtRUlOVkFMLiBfX2k5MTVf Z2VtX29iamVjdF9wdXRfcGFnZXMKPj4gd2lsbCB0aGVyZWZvcmUgc2tpcCB0aGUgY2FsbCB1c2Vy X3B0ci0+cHV0X3BhZ2VzIHdoaWNoIHdvdWxkIGNhbmNlbCB0aGUKPj4gd29ya2VyLiBTbyBjYW5j ZWxpbmcgdGhlIHdvcmtlciBzZWVtcyB3aWxsIGJlIG1pc3NlZCB1bmRlciB0aGVzZQo+PiBjaXJj dW1zdGFuY2VzLgo+Pgo+PiBJIHRoaW5rIGF0IGxlYXN0LCBpZiBJIGhhdmVuJ3QgbG9zdCBteXNl bGYgaW4gdGhlIGZsb3dzIGhlcmUuLgo+IAo+IFdlIGRvbid0IHNldCBvYmotPm1tLnBhZ2VzID0g LUVJTlZBTCBvbiBzY2hlZHVsaW5nLiBJdCByZW1haW5zIHVuc2V0Cj4gdW50aWwgYWZ0ZXIgdGhl IHdvcmtlciBjb21wbGV0ZXMgc28gdGhhdCB3ZSBkb24ndCByZXBvcnQgdGhlIHBhZ2VzCj4gYmVm b3JlaGFuZC4gQW55IGVycm9yIHNldCBpbiBtbS5wYWdlcyByZW1haW5zIHNldCBmb3IgZnVydGhl ciBjYWxsZXJzIG9mCj4gZ2V0X3BhZ2VzIHRvIHJlcG9ydDsgdW50aWwgd2UgY2xlYXIgdGhlIG9i amVjdCBpbiBhIHB1dF9wYWdlcy4KClRydWUsIG15IGJhZC4KCj4+IEkgYW0gYWxzbyB3b3JyaWVk IGFib3V0IHRoZSBsb2NrIGRyb3BwaW5nIGEgZmV3IGxpbmVzIGFib3ZlLiBJdCdzCj4+IGRlZmlu aXRlbHkgY29ycmVjdCB0byByZXN0YXJ0IGV2ZXJ5IHRpbWUsIGJ1dCBjYW4gd2UgZ2V0IGluIGEg c2l0dWF0aW9uCj4+IHdoZXJlIHdlIG5ldmVyIGV4aXQgdGhlIGxvb3A/Cj4gCj4gVGhhdCB3b3Vs ZCByZXF1aXJlIGEgdXNlciB3aXRoIHRoZSBtbWFwX3NlbSBmb3Igd3JpdGluZyBhcyB3ZSBob2xk IHRoZQo+IG1tYXBfc2VtIGZvciByZWFkaW5nLCBhZmFpY3QuCj4gCj4+IE1heWJlIG5vdCBldmVu IGJlY2F1c2UgbmV3IG9iamVjdHMgYXJlCj4+IGNvbWluZyBhbG9uZywgYnV0IGJlY2F1c2UgZm9y IHNvbWUgcmVhc29uIHdlIHdvdWxkbid0IGJlIGRlbGV0aW5nIGFsbAo+PiBvYmplY3RzLiBCZWNh dXNlIEFGQUlDVCB3ZSBjYW4gb25seSBleGl0IHRoZSBsb29wIHdoZW4gYWxsIGludGVydmFscwo+ PiBoYXZlIGJlZW4gZGVsZXRlZCBvciBhbiBlcnJvciBoYXBwZW5lZCBvbiBzb21lIG9iamVjdC4K PiAKPiBJZiB3ZSBjYW5ub3QgcmVtb3ZlIGFuIG9iamVjdCwgd2UgcmVwb3J0IGFuIGVycm9yLgo+ IAo+PiBNYXliZQo+PiBrcmVmX2dldF91bmxlc3NfemVybyBmYWlsaW5nPyBUaGF0IGNvdWxkIGJl IFJDVSBwZXJpb2QgKGxvbmcpIGFuZCB0aGlzCj4+IGxvb3Agd291bGQgZXNzZW50aWFsbHkgYnVz eSBsb29wIGZvciB0aGF0IHRpbWUuCj4gCj4gVGhlIDAtcmVmIG9iamVjdHMgYXJlIHNraXBwZWQ7 IHdoaWNoIGl0c2VsZiBpcyBkdWJpb3VzIGJ1dCBvbmUgY2FuIGhhbmQKPiB3YXZlIHRoYXQgdGhl IHNoYWRvdyBQVEUgd2lsbCBub3QgYmUgdXNlZCBhZnRlciB0aGlzIGNhbGwgdG8KPiBpbnZhbGlk YXRlX3JhbmdlLgoKVHJ1ZSwgcGF0Y2ggaXMgbm90IGRyb3BwaW5nIHRoZSBsb2NrIGluIHRoYXQg Y2FzZS4gU28gZXZlbnR1YWxseSBpZiBzdWNoIApraW5kIGlzIGFsbCB0aGF0IGlzIGxlZnQsIHdl IGV4aXQgdGhlIGxvb3AuCgpPa2F5IEkgYW0gaGFwcHkgd2l0aCB0aGlzIGFzcGVjdCBub3cuIEJ1 dCBvdmVyYWxsIEkgYW0gdW5zdXJlIGlmIHRoaXMgCmZpeGVzIHRoaW5ncyBmb3IgdXMuIFdlIHJl bW92ZWQgdGhlIGRlYWRsb2NrIGNoYWluIHZpYSB0aGUgd29ya3F1ZXVlLCAKYnV0IHdlIG5vdyBs b2NrIHRoZSBtdXRleCBkaXJlY3RseS4gU28gd2h5IGl0IHdpbGwgbm90IGJlIHRoZSBzYW1lIApw cm9ibGVtIGp1c3Qgd2l0aCBhIHNob3J0ZXIgbG9ja2RlcCBjaGFpbj8KClJlZ2FyZHMsCgpUdnJ0 a28KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==