From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ankitprasad Sharma Subject: Re: [PATCH 5/6] drm/i915: Support for pread/pwrite from/to non shmem backed objects Date: Thu, 10 Dec 2015 16:30:39 +0530 Message-ID: <1449745239.12247.81.camel@ankitprasad-desktop> References: <1449665182-10054-1-git-send-email-ankitprasad.r.sharma@intel.com> <1449665182-10054-6-git-send-email-ankitprasad.r.sharma@intel.com> <56685395.8040806@linux.intel.com> <1449744895.12247.75.camel@ankitprasad-desktop> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 8A97C6E973 for ; Thu, 10 Dec 2015 03:19:46 -0800 (PST) In-Reply-To: <1449744895.12247.75.camel@ankitprasad-desktop> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Tvrtko Ursulin , Chris Wilson Cc: intel-gfx@lists.freedesktop.org, akash.goel@intel.com, shashidhar.hiremath@intel.com List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCAyMDE1LTEyLTEwIGF0IDE2OjI0ICswNTMwLCBBbmtpdHByYXNhZCBTaGFybWEgd3Jv dGU6Ck1pc3NlZCBDaHJpcyBpbiBsYXN0IG1haWwsIGFkZGluZyBoaW0KT24gV2VkLCAyMDE1LTEy LTA5IGF0IDE2OjE1ICswMDAwLCBUdnJ0a28gVXJzdWxpbiB3cm90ZToKPiBIaSwKPiAKPiBPbiAw OS8xMi8xNSAxMjo0NiwgYW5raXRwcmFzYWQuci5zaGFybWFAaW50ZWwuY29tIHdyb3RlOgo+ID4g RnJvbTogQW5raXRwcmFzYWQgU2hhcm1hIDxhbmtpdHByYXNhZC5yLnNoYXJtYUBpbnRlbC5jb20+ Cj4gPgo+ID4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGV4dGVuZGluZyB0aGUgcHJlYWQv cHdyaXRlIGZ1bmN0aW9uYWxpdHkKPiA+IGZvciBvYmplY3RzIG5vdCBiYWNrZWQgYnkgc2htZW0u IFRoZSBhY2Nlc3Mgd2lsbCBiZSBtYWRlIHRocm91Z2gKPiA+IGd0dCBpbnRlcmZhY2UuIFRoaXMg d2lsbCBjb3ZlciBvYmplY3RzIGJhY2tlZCBieSBzdG9sZW4gbWVtb3J5IGFzIHdlbGwKPiA+IGFz IG90aGVyIG5vbi1zaG1lbSBiYWNrZWQgb2JqZWN0cy4KPiA+Cj4gPiB2MjogRHJvcCBsb2NrcyBh cm91bmQgc2xvd191c2VyX2FjY2VzcywgcHJlZmF1bHQgdGhlIHBhZ2VzIGJlZm9yZQo+ID4gYWNj ZXNzIChDaHJpcykKPiA+Cj4gPiB2MzogUmViYXNlZCB0byB0aGUgbGF0ZXN0IGRybS1pbnRlbC1u aWdodGx5IChBbmtpdCkKPiA+Cj4gPiB2NDogTW92ZWQgcGFnZSBiYXNlICYgb2Zmc2V0IGNhbGN1 bGF0aW9ucyBvdXRzaWRlIHRoZSBjb3B5IGxvb3AsCj4gPiBjb3JyZWN0ZWQgZGF0YSB0eXBlcyBm b3Igc2l6ZSBhbmQgb2Zmc2V0IHZhcmlhYmxlcywgY29ycmVjdGVkIGlmLWVsc2UKPiA+IGJyYWNl cyBmb3JtYXQgKFR2cnRrby9rZXJuZWxkb2NzKQo+ID4KPiA+IHY1OiBFbmFibGVkIHByZWFkL3B3 cml0ZSBmb3IgYWxsIG5vbi1zaG1lbSBiYWNrZWQgb2JqZWN0cyBpbmNsdWRpbmcKPiA+IHdpdGhv dXQgdGlsaW5nIHJlc3RyaWN0aW9ucyAoQW5raXQpCj4gPgo+ID4gdjY6IFVzaW5nIHB3cml0ZV9m YXN0IGZvciBub24tc2htZW0gYmFja2VkIG9iamVjdHMgYXMgd2VsbCAoQ2hyaXMpCj4gPgo+ID4g djc6IFVwZGF0ZWQgY29tbWl0IG1lc3NhZ2UsIFJlbmFtZWQgaTkxNV9nZW1fZ3R0X3JlYWQgdG8g aTkxNV9nZW1fZ3R0X2NvcHksCj4gPiBhZGRlZCBwd3JpdGUgc2xvdyBwYXRoIGZvciBub24tc2ht ZW0gYmFja2VkIG9iamVjdHMgKENocmlzL1R2cnRrbykKPiA+Cj4gPiB2ODogVXBkYXRlZCB2NyBj b21taXQgbWVzc2FnZSwgbXV0ZXggdW5sb2NrIGFyb3VuZCBwd3JpdGUgc2xvdyBwYXRoIGZvcgo+ ID4gbm9uLXNobWVtIGJhY2tlZCBvYmplY3RzIChUdnJ0a28pCj4gPgo+ID4gVGVzdGNhc2U6IGln dC9nZW1fc3RvbGVuCj4gPgo+ID4gU2lnbmVkLW9mZi1ieTogQW5raXRwcmFzYWQgU2hhcm1hIDxh bmtpdHByYXNhZC5yLnNoYXJtYUBpbnRlbC5jb20+Cj4gPiAtLS0KPiA+ICAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYyB8IDE1MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KystLS0tLS0tCj4gPiAgIDEgZmlsZSBjaGFuZ2VkLCAxMjcgaW5zZXJ0aW9ucygrKSwgMjQgZGVs ZXRpb25zKC0pPiA+Cgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gPiBpbmRleCBlZDk3ZGU2 Li42OGVkNjdhIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0u Ywo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ID4gQEAgLTYxNCw2 ICs2MTQsOTkgQEAgc2htZW1fcHJlYWRfc2xvdyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHNobWVt X3BhZ2Vfb2Zmc2V0LCBpbnQgcGFnZV9sZW5ndGgsCj4gPiAgIAlyZXR1cm4gcmV0ID8gLSBFRkFV TFQgOiAwOwo+ID4gICB9Cj4gPgo+ID4gK3N0YXRpYyBpbmxpbmUgdWludDY0X3QKPiA+ICtzbG93 X3VzZXJfYWNjZXNzKHN0cnVjdCBpb19tYXBwaW5nICptYXBwaW5nLAo+ID4gKwkJIHVpbnQ2NF90 IHBhZ2VfYmFzZSwgaW50IHBhZ2Vfb2Zmc2V0LAo+ID4gKwkJIGNoYXIgX191c2VyICp1c2VyX2Rh dGEsCj4gPiArCQkgaW50IGxlbmd0aCwgYm9vbCBwd3JpdGUpCj4gPiArewo+ID4gKwl2b2lkIF9f aW9tZW0gKnZhZGRyX2luYXRvbWljOwo+ID4gKwl2b2lkICp2YWRkcjsKPiA+ICsJdWludDY0X3Qg dW53cml0dGVuOwo+ID4gKwo+ID4gKwl2YWRkcl9pbmF0b21pYyA9IGlvX21hcHBpbmdfbWFwX3dj KG1hcHBpbmcsIHBhZ2VfYmFzZSk7Cj4gPiArCS8qIFdlIGNhbiB1c2UgdGhlIGNwdSBtZW0gY29w eSBmdW5jdGlvbiBiZWNhdXNlIHRoaXMgaXMgWDg2LiAqLwo+ID4gKwl2YWRkciA9ICh2b2lkIF9f Zm9yY2UgKil2YWRkcl9pbmF0b21pYyArIHBhZ2Vfb2Zmc2V0Owo+ID4gKwlpZiAocHdyaXRlKQo+ ID4gKwkJdW53cml0dGVuID0gX19jb3B5X2Zyb21fdXNlcih2YWRkciwgdXNlcl9kYXRhLCBsZW5n dGgpOwo+ID4gKwllbHNlCj4gPiArCQl1bndyaXR0ZW4gPSBfX2NvcHlfdG9fdXNlcih1c2VyX2Rh dGEsIHZhZGRyLCBsZW5ndGgpOwo+ID4gKwo+ID4gKwlpb19tYXBwaW5nX3VubWFwKHZhZGRyX2lu YXRvbWljKTsKPiA+ICsJcmV0dXJuIHVud3JpdHRlbjsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IGludAo+ID4gK2k5MTVfZ2VtX2d0dF9jb3B5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiAr CQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCB1aW50NjRfdCBzaXplLAo+ID4g KwkJICAgdWludDY0X3QgZGF0YV9vZmZzZXQsIHVpbnQ2NF90IGRhdGFfcHRyKQo+ID4gK3sKPiA+ ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK PiA+ICsJY2hhciBfX3VzZXIgKnVzZXJfZGF0YTsKPiA+ICsJdWludDY0X3QgcmVtYWluOwo+ID4g Kwl1aW50NjRfdCBvZmZzZXQsIHBhZ2VfYmFzZTsKPiA+ICsJaW50IHBhZ2Vfb2Zmc2V0LCBwYWdl X2xlbmd0aCwgcmV0ID0gMDsKPiA+ICsKPiA+ICsJcmV0ID0gaTkxNV9nZW1fb2JqX2dndHRfcGlu KG9iaiwgMCwgUElOX01BUFBBQkxFKTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCWdvdG8gb3V0Owo+ ID4gKwo+ID4gKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9kb21haW4ob2JqLCBm YWxzZSk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlnb3RvIG91dF91bnBpbjsKPiA+ICsKPiA+ICsJ cmV0ID0gaTkxNV9nZW1fb2JqZWN0X3B1dF9mZW5jZShvYmopOwo+ID4gKwlpZiAocmV0KQo+ID4g KwkJZ290byBvdXRfdW5waW47Cj4gPiArCj4gPiArCXVzZXJfZGF0YSA9IHRvX3VzZXJfcHRyKGRh dGFfcHRyKTsKPiA+ICsJcmVtYWluID0gc2l6ZTsKPiA+ICsJb2Zmc2V0ID0gaTkxNV9nZW1fb2Jq X2dndHRfb2Zmc2V0KG9iaikgKyBkYXRhX29mZnNldDsKPiA+ICsKPiA+ICsJbXV0ZXhfdW5sb2Nr KCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gPiArCWlmIChsaWtlbHkoIWk5MTUucHJlZmF1bHRfZGlz YWJsZSkpCj4gPiArCQlyZXQgPSBmYXVsdF9pbl9tdWx0aXBhZ2VzX3dyaXRlYWJsZSh1c2VyX2Rh dGEsIHJlbWFpbik7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0 IHdpdGhpbiBwYWdlCj4gPiArCSAqIHBhZ2VfYmFzZSA9IHBhZ2Ugb2Zmc2V0IHdpdGhpbiBhcGVy dHVyZQo+ID4gKwkgKi8KPiA+ICsJcGFnZV9vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShvZmZzZXQp Owo+ID4gKwlwYWdlX2Jhc2UgPSBvZmZzZXQgJiBQQUdFX01BU0s7Cj4gPiArCj4gPiArCXdoaWxl IChyZW1haW4gPiAwKSB7Cj4gPiArCQkvKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9y IHRoaXMgcGFnZSAqLwo+ID4gKwkJcGFnZV9sZW5ndGggPSByZW1haW47Cj4gPiArCQlpZiAoKHBh Z2Vfb2Zmc2V0ICsgcmVtYWluKSA+IFBBR0VfU0laRSkKPiA+ICsJCQlwYWdlX2xlbmd0aCA9IFBB R0VfU0laRSAtIHBhZ2Vfb2Zmc2V0Owo+ID4gKwo+ID4gKwkJLyogVGhpcyBpcyBhIHNsb3cgcmVh ZC93cml0ZSBhcyBpdCB0cmllcyB0byByZWFkIGZyb20KPiA+ICsJCSAqIGFuZCB3cml0ZSB0byB1 c2VyIG1lbW9yeSB3aGljaCBtYXkgcmVzdWx0IGludG8gcGFnZQo+ID4gKwkJICogZmF1bHRzCj4g PiArCQkgKi8KPiA+ICsJCXJldCA9IHNsb3dfdXNlcl9hY2Nlc3MoZGV2X3ByaXYtPmd0dC5tYXBw YWJsZSwgcGFnZV9iYXNlLAo+ID4gKwkJCQkgICAgICAgcGFnZV9vZmZzZXQsIHVzZXJfZGF0YSwK PiA+ICsJCQkJICAgICAgIHBhZ2VfbGVuZ3RoLCBmYWxzZSk7Cj4gPiArCj4gPiArCQlpZiAocmV0 KSB7Cj4gPiArCQkJcmV0ID0gLUVGQVVMVDsKPiA+ICsJCQlicmVhazsKPiA+ICsJCX0KPiA+ICsK PiA+ICsJCXJlbWFpbiAtPSBwYWdlX2xlbmd0aDsKPiA+ICsJCXVzZXJfZGF0YSArPSBwYWdlX2xl bmd0aDsKPiA+ICsJCXBhZ2VfYmFzZSArPSBwYWdlX2xlbmd0aDsKPiA+ICsJCXBhZ2Vfb2Zmc2V0 ID0gMDsKPiA+ICsJfQo+ID4gKwo+ID4gKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7 Cj4gPiArCj4gPiArb3V0X3VucGluOgo+ID4gKwlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihv YmopOwo+ID4gK291dDoKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiAgIHN0YXRp YyBpbnQKPiA+ICAgaTkxNV9nZW1fc2htZW1fcHJlYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK PiA+ICAgCQkgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gPiBAQCAtNzM3 LDE3ICs4MzAsMTQgQEAgaTkxNV9nZW1fcHJlYWRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwKPiA+ICAgCQlnb3RvIG91dDsKPiA+ICAgCX0KPiA+Cj4gPiAtCS8qIHBy aW1lIG9iamVjdHMgaGF2ZSBubyBiYWNraW5nIGZpbHAgdG8gR0VNIHByZWFkL3B3cml0ZQo+ID4g LQkgKiBwYWdlcyBmcm9tLgo+ID4gLQkgKi8KPiA+IC0JaWYgKCFvYmotPmJhc2UuZmlscCkgewo+ ID4gLQkJcmV0ID0gLUVJTlZBTDsKPiA+IC0JCWdvdG8gb3V0Owo+ID4gLQl9Cj4gPiAtCj4gPiAg IAl0cmFjZV9pOTE1X2dlbV9vYmplY3RfcHJlYWQob2JqLCBhcmdzLT5vZmZzZXQsIGFyZ3MtPnNp emUpOwo+ID4KPiA+IC0JcmV0ID0gaTkxNV9nZW1fc2htZW1fcHJlYWQoZGV2LCBvYmosIGFyZ3Ms IGZpbGUpOwo+ID4gKwkvKiBwcmVhZCBmb3Igbm9uIHNobWVtIGJhY2tlZCBvYmplY3RzICovCj4g PiArCWlmICghb2JqLT5iYXNlLmZpbHAgJiYgb2JqLT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElO R19OT05FKQo+ID4gKwkJcmV0ID0gaTkxNV9nZW1fZ3R0X2NvcHkoZGV2LCBvYmosIGFyZ3MtPnNp emUsCj4gPiArCQkJCQlhcmdzLT5vZmZzZXQsIGFyZ3MtPmRhdGFfcHRyKTsKPiA+ICsJZWxzZQo+ ID4gKwkJcmV0ID0gaTkxNV9nZW1fc2htZW1fcHJlYWQoZGV2LCBvYmosIGFyZ3MsIGZpbGUpOwo+ IAo+IEhtLCBpdCB3aWxsIGVuZCB1cCBjYWxsaW5nIGk5MTVfZ2VtX3NobWVtX3ByZWFkIGZvciBu b24tc2htZW0gYmFja2VkIAo+IG9iamVjdHMgaWYgdGlsaW5nIGlzIHNldC4gU291bmRzIHdyb25n IHRvIG1lIHVubGVzcyBJIGFtIG1pc3Npbmcgc29tZXRoaW5nPwo+IApUaGFua3MgZm9yIHBvaW50 aW5nIGl0IG91dCwgbmVlZCB0byBhZGQgYSBjaGVjayB0aGVyZS4KPiA+Cj4gPiAgIG91dDoKPiA+ ICAgCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwo+ID4gQEAgLTc4OSwx MCArODc5LDEyIEBAIGk5MTVfZ2VtX2d0dF9wd3JpdGVfZmFzdChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSwKPiA+ICAgCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlICphcmdzLAo+ ID4gICAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlKQo+ID4gICB7Cj4gPiArCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2Owo+ID4gICAJc3RydWN0IGRybV9tbV9ub2RlIG5v ZGU7Cj4gPiAgIAl1aW50NjRfdCByZW1haW4sIG9mZnNldDsKPiA+ICAgCWNoYXIgX191c2VyICp1 c2VyX2RhdGE7Cj4gPiAgIAlpbnQgcmV0Owo+ID4gKwlib29sIGZhdWx0ZWQgPSBmYWxzZTsKPiA+ Cj4gPiAgIAlyZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9waW4ob2JqLCAwLCBQSU5fTUFQUEFCTEUg fCBQSU5fTk9OQkxPQ0spOwo+ID4gICAJaWYgKHJldCkgewo+ID4gQEAgLTg1MSwxMSArOTQzLDI5 IEBAIGk5MTVfZ2VtX2d0dF9wd3JpdGVfZmFzdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSwKPiA+ICAgCQkvKiBJZiB3ZSBnZXQgYSBmYXVsdCB3aGlsZSBjb3B5aW5nIGRhdGEsIHRoZW4g KHByZXN1bWFibHkpIG91cgo+ID4gICAJCSAqIHNvdXJjZSBwYWdlIGlzbid0IGF2YWlsYWJsZS4g IFJldHVybiB0aGUgZXJyb3IgYW5kIHdlJ2xsCj4gPiAgIAkJICogcmV0cnkgaW4gdGhlIHNsb3cg cGF0aC4KPiA+ICsJCSAqIElmIHRoZSBvYmplY3QgaXMgbm9uLXNobWVtIGJhY2tlZCwgd2UgcmV0 cnkgYWdhaW4gd2l0aCB0aGUKPiA+ICsJCSAqIHBhdGggdGhhdCBoYW5kbGVzIHBhZ2UgZmF1bHQu Cj4gPiAgIAkJICovCj4gPiAtCQlpZiAoZmFzdF91c2VyX3dyaXRlKGk5MTUtPmd0dC5tYXBwYWJs ZSwgcGFnZV9iYXNlLAo+ID4gLQkJCQkgICAgcGFnZV9vZmZzZXQsIHVzZXJfZGF0YSwgcGFnZV9s ZW5ndGgpKSB7Cj4gPiAtCQkJcmV0ID0gLUVGQVVMVDsKPiA+IC0JCQlnb3RvIG91dF9mbHVzaDsK PiA+ICsJCWlmIChmYXVsdGVkIHx8IGZhc3RfdXNlcl93cml0ZShpOTE1LT5ndHQubWFwcGFibGUs Cj4gPiArCQkJCQkJcGFnZV9iYXNlLCBwYWdlX29mZnNldCwKPiA+ICsJCQkJCQl1c2VyX2RhdGEs IHBhZ2VfbGVuZ3RoKSkgewo+ID4gKwkJCWlmICghb2JqLT5iYXNlLmZpbHApIHsKPiA+ICsJCQkJ ZmF1bHRlZCA9IHRydWU7Cj4gPiArCQkJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgp Owo+ID4gKwkJCQlpZiAoc2xvd191c2VyX2FjY2VzcyhpOTE1LT5ndHQubWFwcGFibGUsCj4gPiAr CQkJCQkJICAgICBwYWdlX2Jhc2UsCj4gPiArCQkJCQkJICAgICBwYWdlX29mZnNldCwgdXNlcl9k YXRhLAo+ID4gKwkJCQkJCSAgICAgcGFnZV9sZW5ndGgsIHRydWUpKSB7Cj4gPiArCQkJCQlyZXQg PSAtRUZBVUxUOwo+ID4gKwkJCQkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ID4g KwkJCQkJZ290byBvdXRfZmx1c2g7Cj4gPiArCQkJCX0KPiA+ICsKPiA+ICsJCQkJbXV0ZXhfbG9j aygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ID4gKwkJCX0gZWxzZSB7Cj4gPiArCQkJCXJldCA9IC1F RkFVTFQ7Cj4gPiArCQkJCWdvdG8gb3V0X2ZsdXNoOwo+ID4gKwkJCX0KPiA+ICAgCQl9Cj4gCj4g U29tZSBxdWVzdGlvbnM6Cj4gCj4gMS4gV2hhdCBpcyB0aGUgYWR2YW50YWdlIG9mIGRvaW5nIHRo ZSBzbG93IGFjY2VzcyBmb3Igbm9uLXNobWVtIGJhY2tlZCAKPiBvYmplY3RzIGluc2lkZSBhIHNp bmdsZSBsb29wLCBhcyBvcHBvc2VkIHRvIGV4dHJhY3RpbmcgaXQgaW4gYSBzZXBhcmF0ZSAKPiBm dW5jdGlvbj8KPiAKPiBGb3IgZXhhbXBsZSBpOTE1X2dlbV9ndHRfcHdyaXRlX3Nsb3cgPyBUaGVu IGl0IGNvdWxkIGhhdmUgYmVlbiBjYWxsZWQgCj4gZnJvbSBpOTE1X2dlbV9wd3JpdGVfaW9jdGwg ZGVwZW5kaW5nIG9uIHRoZSBtYXN0ZXIgaWYgc3RhdGVtZW50IHRoZXJlLCA+IGZhbGxiYWNrIGV0 Yy4KPiAKPiBJIHRoaW5rIGl0IHdvdWxkIGJlIGNsZWFyZXIgdW5sZXNzIHRoZXJlIGlzIGEgc3Bl Y2lhbCByZWFzb24gaXQgbWFrZXMgCj4gc2Vuc2UgdG8gZ28gd2l0aCB0aGUgZmFzdCBwYXRoIGZp cnN0IGFuZCB0aGVuIHN3aXRjaCB0byBzbG93IHBhdGggYXQgdGhlIAo+IHBvaW50IGZpcnN0IGZh dWx0IGlzIGhpdC4KSSBhbSByZWFkeSBmb3IgYW55IG9mIHRoZSBhcHByb2FjaCwgYnV0IENocmlz IHN1Z2dlc3RlZCB0byBleHRlbmQKcHdyaXRlX2Zhc3QgYXMgaXQgaXMgYWxyZWFkeSBiZWluZyB1 c2VkIGZvciBmYXN0ZXIgcHdyaXRlcy4KCkNocmlzLApXb3VsZCBpdCBiZSBiZXR0ZXIgdG8gZG8g YSBwd3JpdGUgdG8gbm9uLXNobWVtIGJhY2tlZCBvYmplY3RzIHZpYSBhCnNlcGFyYXRlIGZ1bmN0 aW9uPwoKIAo+IDIuIEkgaGF2ZSBub3RpY2VkIHRoZSBzaG1lbSBwd3JpdGUgc2xvd3BhdGggbWFr ZXMgZXhwbGljaXQgbWVudGlvbiBvZiAKPiBwb3RlbnRpYWwgY2hhbmdlcyB0byB0aGUgb2JqZWN0 IGRvbWFpbiB3aGlsZSB0aGUgbG9jayB3YXMgZHJvcHBlZCBhbmQgCj4gdGFrZXMgY2FyZSBvZiBm bHVzaGluZyB0aGUgY2FjaGUgaW4gdGhhdCBjYXNlLgo+IAo+IElzIHRoaXMgc29tZXRoaW5nIHRo aXMgcGF0aCBzaG91bGQgZG8gYXMgd2VsbCwgb3IgaWYgbm90IHdoeSBub3Q/CkkgZG8gbm90IHRo aW5rIHRoYXQgdGhpcyBwYXRoIG5lZWRzIHRvIHRha2UgY2FyZSBvZiBmbHVzaGluZyB0aGUgY2Fj aGUsCmFzIGZvciBzdG9sZW4gYmFja2VkIG9iamVjdHMgYXJlIG5vdCBhY2Nlc3NpYmxlIHRvIENQ VSBoZW5jZSBubwpwb3NzaWJpbGl0eSBvZiBpdCBiZWluZyBpbiB0aGUgQ1BVIGNhY2hlIGF0bGVh c3QgZm9yIHRoZSBzdG9sZW4tYmFja2VkCm9iamVjdHMuIApGb3Igb3RoZXIgbm9uLXNobWVtIGJh Y2tlZCBvYmplY3RzIChkbWFidWYsIHVzcnB0ciwgcGh5cyksIG1heSBuZWVkIHNvbWUKaW5wdXRz IGZyb20gQ2hyaXMgb24gaG93IHRvIGhhbmRsZSBpdC4KClRoYW5rcywgQW5raXQKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==