From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sam Ravnborg Subject: Re: [PATCH v3 01/19] drm: Add |struct drm_gem_vram_object| and helpers Date: Mon, 29 Apr 2019 21:58:55 +0200 Message-ID: <20190429195855.GA6610@ravnborg.org> References: <20190429144341.12615-1-tzimmermann@suse.de> <20190429144341.12615-2-tzimmermann@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from asavdk4.altibox.net (asavdk4.altibox.net [109.247.116.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id BE23889009 for ; Mon, 29 Apr 2019 19:59:01 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190429144341.12615-2-tzimmermann@suse.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Thomas Zimmermann Cc: airlied@linux.ie, puck.chen@hisilicon.com, dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org, z.liuxinliang@hisilicon.com, hdegoede@redhat.com, kong.kongxinwei@hisilicon.com, ray.huang@amd.com, kraxel@redhat.com, zourongrong@gmail.com, Jerry.Zhang@amd.com, christian.koenig@amd.com List-Id: dri-devel@lists.freedesktop.org SGkgVGhvbWFzLgoKU29tZSBtaW5vciB0aGluZ3MgYW5kIHNvbWUgYmlrZXNoZWRkaW5nIHRvby4K Ck9uZSBnZW5lcmFsXldiaWtlc2hlZGRpbmcgdGhpbmcgLSB1bmludDMyX3QgaXMgdXNlZCBpbiBt YW55IHBsYWNlcy4KQW5kIHRoZW4gczY0IGluIG9uZSBwbGFjZS4KU2VlbXMgbGlrZSB0d28gY29u Y2VwdHMgYXJlIG1peGVkLgpNYXliZSBiZSBjb25zaXN0ZW50IGFuZCB1c2UgdTMyLCBzMzIgZXZl cnl3aGVyZT8KCkkgZGlkIG5vdCByZWFkIHRoZSBjb2RlIGNhcmVmdWxseSBlbm91Z2ggdG8gdW5k ZXJzdGFuZCBpdC4KSSBjYW5ub3QgZ2l2ZSBhIHItYiBvciBhLWIgLSBhcyBJIGZlZWwgSSBuZWVk IHRvIHVuZGVyc3RhbmQgaXQgdG8gZG8Kc28uCgoJU2FtCgpPbiBNb24sIEFwciAyOSwgMjAxOSBh dCAwNDo0MzoyM1BNICswMjAwLCBUaG9tYXMgWmltbWVybWFubiB3cm90ZToKPiBUaGUgdHlwZSB8 c3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3R8IGltcGxlbWVudHMgYSBHRU0gb2JqZWN0IGZvciBz aW1wbGUKPiBmcmFtZWJ1ZmZlciBkZXZpY2VzIHdpdGggZGVkaWNhdGVkIHZpZGVvIG1lbW9yeS4g VGhlIEJPIGlzIGVpdGhlciBsb2NhdGVkCj4gaW4gVlJBTSBvciBzeXN0ZW0gbWVtb3J5Lgo+IAo+ IFRoZSBpbXBsZW1lbnRhdGlvbiBoYXMgYmVlbiBjcmVhdGVkIGZyb20gdGhlIHJlc3BlY3RpdmUg Y29kZSBpbiBhc3QsCj4gYm9jaHMgYW5kIG1nYWcyMDAuIFRoZXNlIGRyaXZlcnMgY29weSB0aGVp ciBpbXBsZW1lbnRhdGlvbiBmcm9tIGVhY2gKPiBvdGhlcjsgZXhjZXB0IGZvciB0aGUgbmFtZXMg b2Ygc2V2ZXJhbCBkYXRhIHR5cGVzLiBUaGUgaGVscGVycyBhcmUKPiBjdXJyZW50bHkgYnVpbGQg d2l0aCBUVE0sIGJ1dCB0aGlzIGlzIGNvbnNpZGVyZWQgYW4gaW1wbGVtZW50YXRpb24KPiBkZXRh aWwgYW5kIG1heSBjaGFuZ2UgaW4gZnV0dXJlIHVwZGF0ZXMuCj4gCj4gdjI6Cj4gCSogcmVuYW1l IHRvIHxzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdHwKPiAJKiBtb3ZlIGRybV9pc19nZW1fdHRt KCkgdG8gYSBsYXRlciBwYXRjaCBpbiB0aGUgc2VyaWVzCj4gCSogYWRkIGRybV9nZW1fdnJhbV9r bWFwX2F0KCkKPiAJKiByZXR1cm4gaXNfaW9tZW0gZnJvbSBrbWFwIGZ1bmN0aW9ucwo+IAkqIHJl ZGVmaW5lIFRUTSBwbGFjZW1lbnQgZmxhZ3MgZm9yIHB1YmxpYyBpbnRlcmZhY2UKPiAJKiBkb2N1 bWVudGF0aW9uIGZpeGVzCj4gCj4gU2lnbmVkLW9mZi1ieTogVGhvbWFzIFppbW1lcm1hbm4gPHR6 aW1tZXJtYW5uQHN1c2UuZGU+Cj4gLS0tCj4gIERvY3VtZW50YXRpb24vZ3B1L2RybS1tbS5yc3Qg ICAgICAgICAgICAgfCAgMTIgKwo+ICBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAgICAg ICAgICAgIHwgIDEzICsKPiAgZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAgICAgICAgICAg ICB8ICAgNCArCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3ZyYW1faGVscGVyLmMgICAgfCA0 MTAgKysrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL2RybV92cmFtX2hl bHBlcl9jb21tb24uYyB8ICAgNiArCj4gIGluY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIu aCAgICAgICAgfCAgOTIgKysrKysKPiAgNiBmaWxlcyBjaGFuZ2VkLCA1MzcgaW5zZXJ0aW9ucygr KQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fdnJhbV9oZWxw ZXIuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2RybV92cmFtX2hlbHBl cl9jb21tb24uYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0vZHJtX2dlbV92cmFt X2hlbHBlci5oCj4gCj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1tbS5yc3Qg Yi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tbW0ucnN0Cj4gaW5kZXggNTRhNjk2ZDk2MWE3Li5kNTMy N2VkNjA4ZDcgMTAwNjQ0Cj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLW1tLnJzdAo+ICsr KyBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1tbS5yc3QKPiBAQCAtMzgwLDYgKzM4MCwxOCBAQCBH RU0gQ01BIEhlbHBlciBGdW5jdGlvbnMgUmVmZXJlbmNlCj4gIC4uIGtlcm5lbC1kb2M6OiBkcml2 ZXJzL2dwdS9kcm0vZHJtX2dlbV9jbWFfaGVscGVyLmMKPiAgICAgOmV4cG9ydDoKPiAgCj4gK0dF TSBWUkFNIEhlbHBlciBGdW5jdGlvbnMgUmVmZXJlbmNlCj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KPiArCj4gKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJt X2dlbV92cmFtX2hlbHBlci5jCj4gKyAgIDpkb2M6IG92ZXJ2aWV3Cj4gKwo+ICsuLiBrZXJuZWwt ZG9jOjogaW5jbHVkZS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5oCj4gKyAgIDppbnRlcm5hbDoK PiArCj4gKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV92cmFtX2hlbHBl ci5jCj4gKyAgIDpleHBvcnQ6Cj4gKwo+ICBWTUEgT2Zmc2V0IE1hbmFnZXIKPiAgPT09PT09PT09 PT09PT09PT09Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2Ry aXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gaW5kZXggMjI2N2U4NGQ1Y2I0Li5jMGQ0OWE2YzA5ZDIg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vS2NvbmZpZwo+IEBAIC0xNjAsNiArMTYwLDEyIEBAIGNvbmZpZyBEUk1fVFRNCj4gIAkg IEdQVSBtZW1vcnkgdHlwZXMuIFdpbGwgYmUgZW5hYmxlZCBhdXRvbWF0aWNhbGx5IGlmIGEgZGV2 aWNlIGRyaXZlcgo+ICAJICB1c2VzIGl0Lgo+ICAKPiArY29uZmlnIERSTV9WUkFNX0hFTFBFUgo+ ICsJdHJpc3RhdGUKPiArCWRlcGVuZHMgb24gRFJNICYmIERSTV9UVE0KPiArCWhlbHAKPiArCSAg SGVscGVycyBmb3IgVlJBTSBtZW1vcnkgbWFuYWdlbWVudAo+ICsKPiAgY29uZmlnIERSTV9HRU1f Q01BX0hFTFBFUgo+ICAJYm9vbAo+ICAJZGVwZW5kcyBvbiBEUk0KPiBAQCAtMTc5LDYgKzE4NSwx MyBAQCBjb25maWcgRFJNX0dFTV9TSE1FTV9IRUxQRVIKPiAgCWhlbHAKPiAgCSAgQ2hvb3NlIHRo aXMgaWYgeW91IG5lZWQgdGhlIEdFTSBzaG1lbSBoZWxwZXIgZnVuY3Rpb25zCj4gIAo+ICtjb25m aWcgRFJNX0dFTV9WUkFNX0hFTFBFUgo+ICsJYm9vbAo+ICsJZGVwZW5kcyBvbiBEUk0KPiArCXNl bGVjdCBEUk1fVlJBTV9IRUxQRVIKPiArCWhlbHAKPiArCSAgQ2hvb3NlIHRoaXMgaWYgeW91IG5l ZWQgdGhlIEdFTSBWUkFNIGhlbHBlciBmdW5jdGlvbnMKPiArCkkgY2Fubm90IHJlbWVtYmVyIGhv dyBzZWxlY3Qgd2lsbCBkZWFsIHdpdGggc3ltYm9scyB3aG9zIGhhcwphICAiZGVwZW5kcyBvbiIu CkJ1dCBpZiBJIHJlY2FsbCBjb3JyZWN0IHRoZW4gdGhlICJkZXBlbmRzIG9uIiB3aWxsIGJlIGln bm9yZWQKb3IgaW4gYmVzdCBjYXNlIHRyaWdnZXIgYSB3YXJuaW5nLgpJbiBvdGhlciB3b3JkcyAt IHdoZW4gd2UgaGF2ZSBzeW1ib2xzIHdlIHNlbGVjdCB0aGV5IHNob3VsZCBub3QKaGF2ZSBhIGRl cGVuZHMgb24uCgpXaGF0IGNhbiBiZSBkb25lIGlzIHNvbWV0aGluZyBsaWtlOgoKc3ltYm9sIGZv bwoJYm9vbAoKc3ltYm9sIGJhcgoJZGVwZW5kcyBvbiBmb28KCgpzeW1ib2wgZm9vYmFyCglib29s ICJUaGlzIGlzIHdoYXQgeW91IG5lZWQgLSBzZWxlY3QgbWUiCglzZWxlY3QgZm9vCgpTbyB3aGVu IG9uZSBjaG9vc2VzICJmb29iYXIiIHRoZW4gd2Ugd2lsbCBzZWxlY3QgImZvbyIgYW5kIHRoaXMg d2lsbApzYXRpc2Z5IGJhci4KCkJ1dCBtYXliZSB0aGlzIHJhbWJsaW5nIGlzIGlycmVsZXZhbnQg LSBtYXliZSBjaGVjayB3aGF0IHdlIGRvIHdpdGgKb3RoZXIgc2VsZWN0YWJsZSBzeW1ib2xzIGlu IERSTS4KCgo+ICsvKioKPiArICogRE9DOiBvdmVydmlldwo+ICsgKgo+ICsgKiBUaGlzIGxpYnJh cnkgcHJvdmlkZXMgYSBHRU0gb2JqZWN0IHRoYXQgaXMgYmFja2VkIGJ5IFZSQU0uIEl0Cj4gKyAq IGNhbiBiZSB1c2VkIGZvciBzaW1wbGUgZnJhbWVidWZmZXIgZGV2aWNlcyB3aXRoIGRlZGljYXRl ZCBtZW1vcnkuCj4gKyAqLwpJdCBpcyBsaWtlbHkgb25seSBtZSwgYnV0Li4uCkkgY291bGQgdXNl IGEgc2hvcnQgZXhwbGFuYXRpb24gd2hhdCBpcyBHRU0gYW5kIG1heWJlIGFsc28gVlJBTS4KClZS QU0gYXMgdmlkZW8gUkFNLCBidXQgbWF5YmUgdGhlcmUgaXMgbW9yZSBjb25zdHJhaW50cz8KKFdo ZW4gSSBmaXJzdCBsb29rZWQgYXQgRFJNIEkgd29uZGVyZWQgd2hhdCB5b3UgdXNlZCBWaXJ0dWFs IFJBTSBmb3IuCkJ1dCB0aGF0cyBhIGxvbmcgdGltZSBhZ28gc28gaXQgY291bnRzIG9ubHkgYXMg YSBmdW5ueSBzdG9yeS4KCj4gKyAqIEJ1ZmZlci1vYmplY3RzIGhlbHBlcnMKPiArICovCj4gKwo+ ICtzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fY2xlYW51cChzdHJ1Y3QgZHJtX2dlbV92cmFtX29i amVjdCAqZ2JvKQo+ICt7Cj4gKwkvKiBXZSBnb3QgaGVyZSB2aWEgdHRtX2JvX3B1dCgpLCB3aGlj aCBtZWFucyB0aGF0IHRoZQo+ICsJICogVFRNIGJ1ZmZlciBvYmplY3QgaW4gJ2JvJyBoYXMgYWxy ZWFkeSBiZWVuIGNsZWFuZWQKPiArCSAqIHVwOyBvbmx5IHJlbGVhc2UgdGhlIEdFTSBvYmplY3Qu ICovCj4gKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKCZnYm8tPmdlbSk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGRybV9nZW1fdnJhbV9kZXN0cm95KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0 ICpnYm8pCj4gK3sKPiArCWRybV9nZW1fdnJhbV9jbGVhbnVwKGdibyk7Cj4gKwlrZnJlZShnYm8p Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0dG1fYnVmZmVyX29iamVjdF9kZXN0cm95KHN0cnVj dCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCj4gK3sKPiArCXN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2Jq ZWN0ICpnYm8gPSBkcm1fZ2VtX3ZyYW1fb2ZfYm8oYm8pOwo+ICsJZHJtX2dlbV92cmFtX2Rlc3Ry b3koZ2JvKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHJtX2dlbV92cmFtX3BsYWNlbWVudChz dHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvLCBpbnQgcGxfZmxhZykKPiArewo+ICsJdW5z aWduZWQgaW50IGk7Cj4gKwl1bnNpZ25lZCBpbnQgYyA9IDA7Cj4gKwo+ICsJZ2JvLT5wbGFjZW1l bnQucGxhY2VtZW50ID0gZ2JvLT5wbGFjZW1lbnRzOwo+ICsJZ2JvLT5wbGFjZW1lbnQuYnVzeV9w bGFjZW1lbnQgPSBnYm8tPnBsYWNlbWVudHM7Cj4gKwo+ICsJaWYgKHBsX2ZsYWcgJiBUVE1fUExf RkxBR19WUkFNKQo+ICsJCWdiby0+cGxhY2VtZW50c1tjKytdLmZsYWdzID0gVFRNX1BMX0ZMQUdf V0MgfAo+ICsJCQkJCSAgICAgVFRNX1BMX0ZMQUdfVU5DQUNIRUQgfAo+ICsJCQkJCSAgICAgVFRN X1BMX0ZMQUdfVlJBTTsKPiArCj4gKwlpZiAocGxfZmxhZyAmIFRUTV9QTF9GTEFHX1NZU1RFTSkK PiArCQlnYm8tPnBsYWNlbWVudHNbYysrXS5mbGFncyA9IFRUTV9QTF9NQVNLX0NBQ0hJTkcgfAo+ ICsJCQkJCSAgICAgVFRNX1BMX0ZMQUdfU1lTVEVNOwo+ICsKPiArCWlmICghYykKPiArCQlnYm8t PnBsYWNlbWVudHNbYysrXS5mbGFncyA9IFRUTV9QTF9NQVNLX0NBQ0hJTkcgfAo+ICsJCQkJCSAg ICAgVFRNX1BMX0ZMQUdfU1lTVEVNOwo+ICsKPiArCWdiby0+cGxhY2VtZW50Lm51bV9wbGFjZW1l bnQgPSBjOwo+ICsJZ2JvLT5wbGFjZW1lbnQubnVtX2J1c3lfcGxhY2VtZW50ID0gYzsKPiArCj4g Kwlmb3IgKGkgPSAwOyBpIDwgYzsgKytpKSB7Cj4gKwkJZ2JvLT5wbGFjZW1lbnRzW2ldLmZwZm4g PSAwOwo+ICsJCWdiby0+cGxhY2VtZW50c1tpXS5scGZuID0gMDsKPiArCX0KPiArfQo+ICsKPiAr c3RhdGljIGludCBkcm1fZ2VtX3ZyYW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJ CQkgICAgIHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LAo+ICsJCQkgICAgIHN0cnVjdCBkcm1f Z2VtX3ZyYW1fb2JqZWN0ICpnYm8sCj4gKwkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1aW50 MzJfdCBwZ19hbGlnbiwKPiArCQkJICAgICBib29sIGludGVycnVwdGlibGUpCj4gK3sKPiArCWlu dCByZXQ7Cj4gKwlzaXplX3QgYWNjX3NpemU7Cj4gKwo+ICsJcmV0ID0gZHJtX2dlbV9vYmplY3Rf aW5pdChkZXYsICZnYm8tPmdlbSwgc2l6ZSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7 Cj4gKwo+ICsJYWNjX3NpemUgPSB0dG1fYm9fZG1hX2FjY19zaXplKGJkZXYsIHNpemUsIHNpemVv ZigqZ2JvKSk7Cj4gKwo+ICsJZ2JvLT5iby5iZGV2ID0gYmRldjsKPiArCWRybV9nZW1fdnJhbV9w bGFjZW1lbnQoZ2JvLCBUVE1fUExfRkxBR19WUkFNIHwgVFRNX1BMX0ZMQUdfU1lTVEVNKTsKPiAr Cj4gKwlyZXQgPSB0dG1fYm9faW5pdChiZGV2LCAmZ2JvLT5ibywgc2l6ZSwgdHRtX2JvX3R5cGVf ZGV2aWNlLAo+ICsJCQkgICZnYm8tPnBsYWNlbWVudCwgcGdfYWxpZ24sIGludGVycnVwdGlibGUs IGFjY19zaXplLAo+ICsJCQkgIE5VTEwsIE5VTEwsIHR0bV9idWZmZXJfb2JqZWN0X2Rlc3Ryb3kp Owo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9kcm1fZ2VtX29iamVjdF9yZWxlYXNlOwo+ICsK PiArCXJldHVybiAwOwo+ICsKPiArZXJyX2RybV9nZW1fb2JqZWN0X3JlbGVhc2U6Cj4gKwlkcm1f Z2VtX29iamVjdF9yZWxlYXNlKCZnYm8tPmdlbSk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ ICsvKioKPiArICogZHJtX2dlbV92cmFtX2NyZWF0ZSgpIC0gQ3JlYXRlcyBhIFZSQU0tYmFja2Vk IEdFTSBvYmplY3QKPiArICogQGRldjoJCXRoZSBEUk0gZGV2aWNlCj4gKyAqIEBiZGV2OgkJdGhl IFRUTSBCTyBkZXZpY2UgYmFja2luZyB0aGUgb2JqZWN0Cj4gKyAqIEBzaXplOgkJdGhlIGJ1ZmZl ciBzaXplIGluIGJ5dGVzCj4gKyAqIEBwZ19hbGlnbjoJCXRoZSBidWZmZXIncyBhbGlnbm1lbnQg aW4gbXVsdGlwbGVzIG9mIHRoZSBwYWdlIHNpemUKPiArICogQGludGVycnVwdGlibGU6CXNsZWVw IGludGVycnVwdGlibGUgaWYgd2FpdGluZyBmb3IgbWVtb3J5Cj4gKyAqCj4gKyAqIFJldHVybnM6 Cj4gKyAqIEEgbmV3IGluc3RhbmNlIG9mICZzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCBvbiBz dWNjZXNzLCBvcgo+ICsgKiBhbiBFUlJfUFRSKCktZW5jb2RlZCBlcnJvciBjb2RlIG90aGVyd2lz ZS4KPiArICovCj4gK3N0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0KiBkcm1fZ2VtX3ZyYW1fY3Jl YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCQkJCXN0cnVjdCB0dG1fYm9fZGV2aWNl ICpiZGV2LAo+ICsJCQkJCQl1bnNpZ25lZCBsb25nIHNpemUsCj4gKwkJCQkJCXVpbnQzMl90IHBn X2FsaWduLAo+ICsJCQkJCQlib29sIGludGVycnVwdGlibGUpCj4gK3sKPiArCXN0cnVjdCBkcm1f Z2VtX3ZyYW1fb2JqZWN0ICpnYm87Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWdibyA9IGt6YWxsb2Mo c2l6ZW9mKCpnYm8pLCBHRlBfS0VSTkVMKTsKPiArCWlmICghZ2JvKQo+ICsJCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOwo+ICsKPiArCXJldCA9IGRybV9nZW1fdnJhbV9pbml0KGRldiwgYmRldiwg Z2JvLCBzaXplLCBwZ19hbGlnbiwgaW50ZXJydXB0aWJsZSk7Cj4gKwlpZiAocmV0IDwgMCkKPiAr CQlnb3RvIGVycl9rZnJlZTsKPiArCj4gKwlyZXR1cm4gZ2JvOwo+ICsKPiArZXJyX2tmcmVlOgo+ ICsJa2ZyZWUoZ2JvKTsKPiArCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gK30KPiArRVhQT1JUX1NZ TUJPTChkcm1fZ2VtX3ZyYW1fY3JlYXRlKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fZ2VtX3ZyYW1f cHV0KCkgLSBSZWxlYXNlcyBhIHJlZmVyZW5jZSB0byBhIFZSQU0tYmFja2VkIEdFTSBvYmplY3QK PiArICogQGdibzoJdGhlIEdFTSBWUkFNIG9iamVjdAo+ICsgKgo+ICsgKiBTZWUgdHRtX2JvX3B1 dCgpIGZvciBtb3JlIGluZm9ybWF0aW9uLgo+ICsgKi8KPiArdm9pZCBkcm1fZ2VtX3ZyYW1fcHV0 KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8pCj4gK3sKPiArCXR0bV9ib19wdXQoJmdi by0+Ym8pOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2dlbV92cmFtX3B1dCk7Cj4gKwo+ICsv KioKPiArICogZHJtX2dlbV92cmFtX3Jlc2VydmUoKSAtIFJlc2VydmVzIGEgVlJBTS1iYWNrZWQg R0VNIG9iamVjdAo+ICsgKiBAZ2JvOgl0aGUgR0VNIFZSQU0gb2JqZWN0Cj4gKyAqIEBub193YWl0 Oglkb24ndCB3YWl0IGZvciBidWZmZXIgb2JqZWN0IHRvIGJlY29tZSBhdmFpbGFibGUKPiArICoK PiArICogU2VlIHR0bV9ib19yZXNlcnZlKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCj4gKyAqCj4g KyAqIFJldHVybnM6Cj4gKyAqIDAgb24gc3VjY2Vzcywgb3IKPiArICogYSBuZWdhdGl2ZSBlcnJv ciBjb2RlIG90aGVyd2lzZQo+ICsgKi8KPiAraW50IGRybV9nZW1fdnJhbV9yZXNlcnZlKHN0cnVj dCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sIGJvb2wgbm9fd2FpdCkKPiArewo+ICsJcmV0dXJu IHR0bV9ib19yZXNlcnZlKCZnYm8tPmJvLCB0cnVlLCBub193YWl0LCBOVUxMKTsKPiArfQo+ICtF WFBPUlRfU1lNQk9MKGRybV9nZW1fdnJhbV9yZXNlcnZlKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1f Z2VtX3ZyYW1fdW5yZXNlcnZlKCkgLSBcCj4gKwlSZWxlYXNlIGEgcmVzZXJ2YXRpb24gYWNxdWly ZWQgYnkgZHJtX2dlbV92cmFtX3Jlc2VydmUoKQo+ICsgKiBAZ2JvOgl0aGUgR0VNIFZSQU0gb2Jq ZWN0Cj4gKyAqCj4gKyAqIFNlZSB0dG1fYm9fdW5yZXNlcnZlKCkgZm9yIG1vcmUgaW5mb3JtYXRp b24uCj4gKyAqLwo+ICt2b2lkIGRybV9nZW1fdnJhbV91bnJlc2VydmUoc3RydWN0IGRybV9nZW1f dnJhbV9vYmplY3QgKmdibykKPiArewo+ICsJdHRtX2JvX3VucmVzZXJ2ZSgmZ2JvLT5ibyk7Cj4g K30KPiArRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3ZyYW1fdW5yZXNlcnZlKTsKPiArCj4gKy8qKgo+ ICsgKiBkcm1fZ2VtX3ZyYW1fbW1hcF9vZmZzZXQoKSAtIFJldHVybnMgYSBHRU0gVlJBTSBvYmpl Y3QncyBtbWFwIG9mZnNldAo+ICsgKiBAZ2JvOgl0aGUgR0VNIFZSQU0gb2JqZWN0Cj4gKyAqCj4g KyAqIFNlZSBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4K PiArICoKPiArICogUmV0dXJuczoKPiArICogVGhlIGJ1ZmZlciBvYmplY3QncyBvZmZzZXQgZm9y IHVzZXJzcGFjZSBtYXBwaW5ncyBvbiBzdWNjZXNzLCBvcgo+ICsgKiAwIGlmIG5vIG9mZnNldCBp cyBhbGxvY2F0ZWQuCj4gKyAqLwo+ICt1NjQgZHJtX2dlbV92cmFtX21tYXBfb2Zmc2V0KHN0cnVj dCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8pCj4gK3sKPiArCXJldHVybiBkcm1fdm1hX25vZGVf b2Zmc2V0X2FkZHIoJmdiby0+Ym8udm1hX25vZGUpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJt X2dlbV92cmFtX21tYXBfb2Zmc2V0KTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fZ2VtX3ZyYW1fb2Zm c2V0KCkgLSBcCj4gKwlSZXR1cm5zIGEgR0VNIFZSQU0gb2JqZWN0J3Mgb2Zmc2V0IGluIHZpZGVv IG1lbW9yeQo+ICsgKiBAZ2JvOgl0aGUgR0VNIFZSQU0gb2JqZWN0Cj4gKyAqCj4gKyAqIFRoaXMg ZnVuY3Rpb24gcmV0dXJucyB0aGUgYnVmZmVyIG9iamVjdCdzIG9mZnNldCBpbiB0aGUgZGV2aWNl J3MgdmlkZW8KPiArICogbWVtb3J5LiBUaGUgYnVmZmVyIG9iamVjdCBoYXMgdG8gYmUgcGlubmVk IHRvICVUVE1fUExfVlJBTS4KPiArICoKPiArICogUmV0dXJuczoKPiArICogVGhlIGJ1ZmZlciBv YmplY3QncyBvZmZzZXQgaW4gdmlkZW8gbWVtb3J5IG9uIHN1Y2Nlc3MsIG9yCj4gKyAqIGEgbmVn YXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCj4gKyAqLwo+ICtzNjQgZHJtX2dlbV92cmFtX29m ZnNldChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKQo+ICt7Cj4gKwlpZiAoIWdiby0+ cGluX2NvdW50KQo+ICsJCXJldHVybiAoczY0KS1FTk9ERVY7Cj4gKwlyZXR1cm4gZ2JvLT5iby5v ZmZzZXQ7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3ZyYW1fb2Zmc2V0KTsKPiArCj4g Ky8qKgo+ICsgKiBkcm1fZ2VtX3ZyYW1fcGluKCkgLSBQaW5zIGEgR0VNIFZSQU0gb2JqZWN0IGlu IGEgcmVnaW9uLgo+ICsgKiBAZ2JvOgl0aGUgR0VNIFZSQU0gb2JqZWN0Cj4gKyAqIEBwbF9mbGFn OglhIGJpdG1hc2sgb2YgcG9zc2libGUgbWVtb3J5IHJlZ2lvbnMKPiArICoKPiArICogUGlubmlu ZyBhIGJ1ZmZlciBvYmplY3QgZW5zdXJlcyB0aGF0IGl0IGlzIG5vdCBldmljdGVkIGZyb20KPiAr ICogYSBtZW1vcnkgcmVnaW9uLiBBIHBpbm5lZCBidWZmZXIgb2JqZWN0IGhhcyB0byBiZSB1bnBp bm5lZCBiZWZvcmUKPiArICogaXQgY2FuIGJlIHBpbm5lZCB0byBhbm90aGVyIHJlZ2lvbi4KPiAr ICoKPiArICogUmV0dXJuczoKPiArICogMCBvbiBzdWNjZXNzLCBvcgo+ICsgKiBhIG5lZ2F0aXZl IGVycm9yIGNvZGUgb3RoZXJ3aXNlLgo+ICsgKi8KPiAraW50IGRybV9nZW1fdnJhbV9waW4oc3Ry dWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywgdTMyIHBsX2ZsYWcpCj4gK3sKPiArCWludCBp LCByZXQ7Cj4gKwlzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggY3R4ID0geyBmYWxzZSwgZmFsc2Ug fTsKPiArCj4gKwlpZiAoZ2JvLT5waW5fY291bnQpIHsKPiArCQkrK2diby0+cGluX2NvdW50Owo+ ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCWRybV9nZW1fdnJhbV9wbGFjZW1lbnQoZ2JvLCBw bF9mbGFnKTsKPiArCWZvciAoaSA9IDA7IGkgPCBnYm8tPnBsYWNlbWVudC5udW1fcGxhY2VtZW50 OyArK2kpCj4gKwkJZ2JvLT5wbGFjZW1lbnRzW2ldLmZsYWdzIHw9IFRUTV9QTF9GTEFHX05PX0VW SUNUOwo+ICsKPiArCXJldCA9IHR0bV9ib192YWxpZGF0ZSgmZ2JvLT5ibywgJmdiby0+cGxhY2Vt ZW50LCAmY3R4KTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJZ2Jv LT5waW5fY291bnQgPSAxOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0wo ZHJtX2dlbV92cmFtX3Bpbik7Cj4gKwo+ICsvKioKPiArICogZHJtX2dlbV92cmFtX3VucGluKCkg LSBVbnBpbnMgYSBHRU0gVlJBTSBvYmplY3QKPiArICogQGdibzoJdGhlIEdFTSBWUkFNIG9iamVj dAo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiAwIG9uIHN1Y2Nlc3MsIG9yCj4gKyAqIGEgbmVn YXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCj4gKyAqLwo+ICtpbnQgZHJtX2dlbV92cmFtX3Vu cGluKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8pCj4gK3sKPiArCWludCBpLCByZXQ7 Cj4gKwlzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggY3R4ID0geyBmYWxzZSwgZmFsc2UgfTsKPiAr Cj4gKwlpZiAoIWdiby0+cGluX2NvdW50KQo+ICsJCXJldHVybiAwOwo+ICsKPiArCS0tZ2JvLT5w aW5fY291bnQ7Cj4gKwlpZiAoZ2JvLT5waW5fY291bnQpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJ Zm9yIChpID0gMDsgaSA8IGdiby0+cGxhY2VtZW50Lm51bV9wbGFjZW1lbnQgOyArK2kpCj4gKwkJ Z2JvLT5wbGFjZW1lbnRzW2ldLmZsYWdzICY9IH5UVE1fUExfRkxBR19OT19FVklDVDsKPiArCj4g KwlyZXQgPSB0dG1fYm9fdmFsaWRhdGUoJmdiby0+Ym8sICZnYm8tPnBsYWNlbWVudCwgJmN0eCk7 Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldHVybiAwOwo+ICt9 Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2dlbV92cmFtX3VucGluKTsKPiArCj4gKy8qKgo+ICsgKiBk cm1fZ2VtX3ZyYW1fcHVzaF90b19zeXN0ZW0oKSAtIFwKPiArCVVucGlucyBhIEdFTSBWUkFNIG9i amVjdCBhbmQgbW92ZXMgaXQgdG8gc3lzdGVtIG1lbW9yeQo+ICsgKiBAZ2JvOgl0aGUgR0VNIFZS QU0gb2JqZWN0Cj4gKyAqCj4gKyAqIFRoaXMgb3BlcmF0aW9uIG9ubHkgd29ya3MgaWYgdGhlIGNh bGxlciBob2xkcyB0aGUgZmluYWwgcGluIG9uIHRoZQo+ICsgKiBidWZmZXIgb2JqZWN0Lgo+ICsg Kgo+ICsgKiBSZXR1cm5zOgo+ICsgKiAwIG9uIHN1Y2Nlc3MsIG9yCj4gKyAqIGEgbmVnYXRpdmUg ZXJyb3IgY29kZSBvdGhlcndpc2UuCj4gKyAqLwo+ICtpbnQgZHJtX2dlbV92cmFtX3B1c2hfdG9f c3lzdGVtKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8pCj4gK3sKPiArCWludCBpLCBy ZXQ7Cj4gKwlzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggY3R4ID0geyBmYWxzZSwgZmFsc2UgfTsK PiArCj4gKwlpZiAoIWdiby0+cGluX2NvdW50KQo+ICsJCXJldHVybiAwOwo+ICsKPiArCS0tZ2Jv LT5waW5fY291bnQ7Cj4gKwlpZiAoZ2JvLT5waW5fY291bnQpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ ICsJaWYgKGdiby0+a21hcC52aXJ0dWFsKQo+ICsJCXR0bV9ib19rdW5tYXAoJmdiby0+a21hcCk7 Cj4gKwo+ICsJZHJtX2dlbV92cmFtX3BsYWNlbWVudChnYm8sIFRUTV9QTF9GTEFHX1NZU1RFTSk7 Cj4gKwlmb3IgKGkgPSAwOyBpIDwgZ2JvLT5wbGFjZW1lbnQubnVtX3BsYWNlbWVudCA7ICsraSkK PiArCQlnYm8tPnBsYWNlbWVudHNbaV0uZmxhZ3MgfD0gVFRNX1BMX0ZMQUdfTk9fRVZJQ1Q7Cj4g Kwo+ICsJcmV0ID0gdHRtX2JvX3ZhbGlkYXRlKCZnYm8tPmJvLCAmZ2JvLT5wbGFjZW1lbnQsICZj dHgpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldHVybiAwOwo+ICt9 Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2dlbV92cmFtX3B1c2hfdG9fc3lzdGVtKTsKPiArCj4gKy8q Kgo+ICsgKiBkcm1fZ2VtX3ZyYW1fa21hcF9hdCgpIC0gTWFwcyBhIEdFTSBWUkFNIG9iamVjdCBp bnRvIGtlcm5lbCBhZGRyZXNzIHNwYWNlCj4gKyAqIEBnYm86CXRoZSBHRU0gVlJBTSBvYmplY3QK PiArICogQG1hcDoJZXN0YWJsaXNoIGEgbWFwcGluZyBpZiBuZWNlc3NhcnkKPiArICogQGlzX2lv bWVtOglyZXR1cm5zIHRydWUgaWYgdGhlIG1hcHBlZCBtZW1vcnkgaXMgSS9PIG1lbW9yeSwgb3Ig ZmFsc2UgXAo+ICsJb3RoZXJ3aXNlOyBjYW4gYmUgTlVMTAo+ICsgKiBAa21hcDoJdGhlIG1hcHBp bmcncyBrbWFwIG9iamVjdAo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIG1hcHMgdGhlIGJ1ZmZl ciBvYmplY3QgaW50byB0aGUga2VybmVsJ3MgYWRkcmVzcyBzcGFjZQo+ICsgKiBvciByZXR1cm5z IHRoZSBjdXJyZW50IG1hcHBpbmcuIElmIHRoZSBwYXJhbWV0ZXIgbWFwIGlzIGZhbHNlLCB0aGUK PiArICogZnVuY3Rpb24gb25seSBxdWVyaWVzIHRoZSBjdXJyZW50IG1hcHBpbmcsIGJ1dCBkb2Vz IG5vdCBlc3RhYmxpc2ggYQo+ICsgKiBuZXcgb25lLgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsg KiBUaGUgYnVmZmVycyB2aXJ0dWFsIGFkZHJlc3MgaWYgbWFwcGVkLCBvcgo+ICsgKiBOVUxMIGlm IG5vdCBtYXBwZWQsIG9yCj4gKyAqIGFuIEVSUl9QVFIoKS1lbmNvZGVkIGVycm9yIGNvZGUgb3Ro ZXJ3aXNlLgo+ICsgKi8KPiArdm9pZCogZHJtX2dlbV92cmFtX2ttYXBfYXQoc3RydWN0IGRybV9n ZW1fdnJhbV9vYmplY3QgKmdibywgYm9vbCBtYXAsCj4gKwkJCSAgIGJvb2wgKmlzX2lvbWVtLCBz dHJ1Y3QgdHRtX2JvX2ttYXBfb2JqICprbWFwKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlm IChrbWFwLT52aXJ0dWFsIHx8ICFtYXApCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJcmV0ID0gdHRt X2JvX2ttYXAoJmdiby0+Ym8sIDAsIGdiby0+Ym8ubnVtX3BhZ2VzLCBrbWFwKTsKPiArCWlmIChy ZXQpCj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCj4gK291dDoKPiArCWlmICghaXNfaW9t ZW0pIHsKPiArCQlyZXR1cm4ga21hcC0+dmlydHVhbDsKPiArCX0KPiArCWlmICgha21hcC0+dmly dHVhbCkgewo+ICsJCSppc19pb21lbSA9IGZhbHNlOwo+ICsJCXJldHVybiBOVUxMOwo+ICsJfQo+ ICsJcmV0dXJuIHR0bV9rbWFwX29ial92aXJ0dWFsKGttYXAsIGlzX2lvbWVtKTsKPiArfQo+ICtF WFBPUlRfU1lNQk9MKGRybV9nZW1fdnJhbV9rbWFwX2F0KTsKPiArCj4gKy8qKgo+ICsgKiBkcm1f Z2VtX3ZyYW1fa21hcCgpIC0gTWFwcyBhIEdFTSBWUkFNIG9iamVjdCBpbnRvIGtlcm5lbCBhZGRy ZXNzIHNwYWNlCj4gKyAqIEBnYm86CXRoZSBHRU0gVlJBTSBvYmplY3QKPiArICogQG1hcDoJZXN0 YWJsaXNoIGEgbWFwcGluZyBpZiBuZWNlc3NhcnkKPiArICogQGlzX2lvbWVtOglyZXR1cm5zIHRy dWUgaWYgdGhlIG1hcHBlZCBtZW1vcnkgaXMgSS9PIG1lbW9yeSwgb3IgZmFsc2UgXAo+ICsJb3Ro ZXJ3aXNlOyBjYW4gYmUgTlVMTAo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIG1hcHMgdGhlIGJ1 ZmZlciBvYmplY3QgaW50byB0aGUga2VybmVsJ3MgYWRkcmVzcyBzcGFjZQo+ICsgKiBvciByZXR1 cm5zIHRoZSBjdXJyZW50IG1hcHBpbmcuIElmIHRoZSBwYXJhbWV0ZXIgbWFwIGlzIGZhbHNlLCB0 aGUKPiArICogZnVuY3Rpb24gb25seSBxdWVyaWVzIHRoZSBjdXJyZW50IG1hcHBpbmcsIGJ1dCBk b2VzIG5vdCBlc3RhYmxpc2ggYQo+ICsgKiBuZXcgb25lLgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ ICsgKiBUaGUgYnVmZmVycyB2aXJ0dWFsIGFkZHJlc3MgaWYgbWFwcGVkLCBvcgo+ICsgKiBOVUxM IGlmIG5vdCBtYXBwZWQsIG9yCj4gKyAqIGFuIEVSUl9QVFIoKS1lbmNvZGVkIGVycm9yIGNvZGUg b3RoZXJ3aXNlLgo+ICsgKi8KPiArdm9pZCogZHJtX2dlbV92cmFtX2ttYXAoc3RydWN0IGRybV9n ZW1fdnJhbV9vYmplY3QgKmdibywgYm9vbCBtYXAsCj4gKwkJCWJvb2wgKmlzX2lvbWVtKQo+ICt7 Cj4gKwlyZXR1cm4gZHJtX2dlbV92cmFtX2ttYXBfYXQoZ2JvLCBtYXAsIGlzX2lvbWVtLCAmZ2Jv LT5rbWFwKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9nZW1fdnJhbV9rbWFwKTsKPiArCj4g Ky8qKgo+ICsgKiBkcm1fZ2VtX3ZyYW1fa3VubWFwX2F0KCkgLSBVbm1hcHMgYSBHRU0gVlJBTSBv YmplY3QKPiArICogQGdibzoJdGhlIEdFTSBWUkFNIG9iamVjdAo+ICsgKiBAa21hcDoJdGhlIG1h cHBpbmcncyBrbWFwIG9iamVjdAo+ICsgKi8KPiArdm9pZCBkcm1fZ2VtX3ZyYW1fa3VubWFwX2F0 KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sCj4gKwkJCSAgICBzdHJ1Y3QgdHRtX2Jv X2ttYXBfb2JqICprbWFwKQo+ICt7Cj4gKwlpZiAoIWttYXAtPnZpcnR1YWwpCj4gKwkJcmV0dXJu Owo+ICsKPiArCXR0bV9ib19rdW5tYXAoa21hcCk7Cj4gKwlrbWFwLT52aXJ0dWFsID0gTlVMTDsK PiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9nZW1fdnJhbV9rdW5tYXBfYXQpOwo+ICsKPiArLyoq Cj4gKyAqIGRybV9nZW1fdnJhbV9rdW5tYXAoKSAtIFVubWFwcyBhIEdFTSBWUkFNIG9iamVjdAo+ ICsgKiBAZ2JvOgl0aGUgR0VNIFZSQU0gb2JqZWN0Cj4gKyAqLwo+ICt2b2lkIGRybV9nZW1fdnJh bV9rdW5tYXAoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibykKPiArewo+ICsJZHJtX2dl bV92cmFtX2t1bm1hcF9hdChnYm8sICZnYm8tPmttYXApOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0wo ZHJtX2dlbV92cmFtX2t1bm1hcCk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f dnJhbV9oZWxwZXJfY29tbW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZyYW1faGVscGVyX2Nv bW1vbi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjc2YjY1 NjljOWFhZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZyYW1f aGVscGVyX2NvbW1vbi5jCj4gQEAgLTAsMCArMSw2IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+Cj4gKwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkRSTSBWUkFNIG1lbW9yeS1tYW5hZ2VtZW50 IGhlbHBlcnMiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+IGRpZmYgLS1naXQgYS9pbmNs dWRlL2RybS9kcm1fZ2VtX3ZyYW1faGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fZ2VtX3ZyYW1f aGVscGVyLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMTY3 NjE2ZjU1MmU1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW1fdnJh bV9oZWxwZXIuaAo+IEBAIC0wLDAgKzEsOTIgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KPiArCj4gKyNpZm5kZWYgRFJNX0dFTV9WUkFNX0hFTFBF Ul9ICj4gKyNkZWZpbmUgRFJNX0dFTV9WUkFNX0hFTFBFUl9ICj4gKwo+ICsjaW5jbHVkZSA8ZHJt L2RybV9nZW0uaD4KPiArI2luY2x1ZGUgPGRybS90dG0vdHRtX2JvX2FwaS5oPgo+ICsjaW5jbHVk ZSA8ZHJtL3R0bS90dG1fcGxhY2VtZW50Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4g LyogZm9yIGNvbnRhaW5lcl9vZigpICovCj4gKwo+ICtzdHJ1Y3QgZmlscDsKPiArCj4gKyNkZWZp bmUgRFJNX0dFTV9WUkFNX1BMX0ZMQUdfVlJBTQlUVE1fUExfRkxBR19WUkFNCj4gKyNkZWZpbmUg RFJNX0dFTV9WUkFNX1BMX0ZMQUdfU1lTVEVNCVRUTV9QTF9GTEFHX1NZU1RFTQo+ICsKPiArLyoK PiArICogQnVmZmVyLW9iamVjdCBoZWxwZXJzCj4gKyAqLwo+ICsKPiArLyoqCj4gKyAqIHN0cnVj dCBkcm1fZ2VtX3ZyYW1fb2JqZWN0IC0gR0VNIG9iamVjdCBiYWNrZWQgYnkgVlJBTQo+ICsgKiBA Z2VtOglHRU0gb2JqZWN0Cj4gKyAqIEBibzoJCVRUTSBidWZmZXIgb2JqZWN0Cj4gKyAqIEBrbWFw OglNYXBwaW5nIGluZm9ybWF0aW9uIGZvciBAYm8KPiArICogQHBsYWNlbWVudDoJVFRNIHBsYWNl bWVudCBpbmZvcm1hdGlvbi4gU3VwcG9ydGVkIHBsYWNlbWVudHMgYXJlIFwKPiArCSVUVE1fUExf VlJBTSBhbmQgJVRUTV9QTF9TWVNURU0KPiArICogQHBsYWNlbWVudHM6CVRUTSBwbGFjZW1lbnQg aW5mb3JtYXRpb24uCj4gKyAqIEBwaW5fY291bnQ6CVBpbiBjb3VudGVyCj4gKyAqCj4gKyAqIFRo ZSB0eXBlIHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0IHJlcHJlc2VudHMgYSBHRU0gb2JqZWN0 IHRoYXQgaXMKPiArICogYmFja2VkIGJ5IFZSQU0uIEl0IGNhbiBiZSB1c2VkIGZvciBzaW1wbGUg ZnJhbWJ1ZmZlciBkZXZpY2VzIHdpdGgKPiArICogZGVkaWNhdGVkIG1lbW9yeS4gVGhlIGJ1ZmZl ciBvYmplY3QgY2FuIGJlIGV2aWN0ZWQgdG8gc3lzdGVtIG1lbW9yeSBpZgo+ICsgKiB2aWRlbyBt ZW1vcnkgYmVjb21lcyBzY2FyY2UuCj4gKyAqLwo+ICtzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVj dCB7Cj4gKyAgICAgICAgc3RydWN0IGRybV9nZW1fb2JqZWN0IGdlbTsKPiArICAgICAgICBzdHJ1 Y3QgdHRtX2J1ZmZlcl9vYmplY3QgYm87Cj4gKyAgICAgICAgc3RydWN0IHR0bV9ib19rbWFwX29i aiBrbWFwOwo+ICsKPiArCS8qIFN1cHBvcnRlZCBwbGFjZW1lbnRzIGFyZSAlVFRNX1BMX1ZSQU0g YW5kICVUVE1fUExfU1lTVEVNICovCj4gKyAgICAgICAgc3RydWN0IHR0bV9wbGFjZW1lbnQgcGxh Y2VtZW50Owo+ICsgICAgICAgIHN0cnVjdCB0dG1fcGxhY2UgcGxhY2VtZW50c1szXTsKPiArCj4g KyAgICAgICAgaW50IHBpbl9jb3VudDsKPiArfTsKVXNlIHRhYnMgZm9yIGluZGVudCAtIG5vdCBz cGFjZXMuCkFzayBjaGVja3BhdGNoIGlmIGFueXRoaW5nIHNpbWlsYXIgbmVlZHMgdG8gYmUgYWRq dXN0ZWQuCgoKPiArCj4gKy8qKgo+ICsgKiBSZXR1cm5zIHRoZSBjb250YWluZXIgb2YgdHlwZSAm c3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QKPiArICogZm9yIGZpZWxkIGJvLgo+ICsgKiBAYm86 CQl0aGUgVlJBTSBidWZmZXIgb2JqZWN0Cj4gKyAqIFJldHVybnM6CVRoZSBjb250YWluaW5nIEdF TSBWUkFNIG9iamVjdAo+ICsgKi8KPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2dlbV92cmFt X29iamVjdCogZHJtX2dlbV92cmFtX29mX2JvKAo+ICsJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0 ICpibykKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihibywgc3RydWN0IGRybV9nZW1fdnJh bV9vYmplY3QsIGJvKTsKPiArfQpJbmRlbnQgZnVubnkuIFVTZSBzYW1lIGluZGVudCBhcyB1c2Vk IGluIG90aGVyIHBhcnRzIG9mIGZpbGUgZm9yCmZ1bmN0aW9uIGFyZ3VtZW50cy4KCj4gKwo+ICsv KioKPiArICogUmV0dXJucyB0aGUgY29udGFpbmVyIG9mIHR5cGUgJnN0cnVjdCBkcm1fZ2VtX3Zy YW1fb2JqZWN0Cj4gKyAqIGZvciBmaWVsZCBnZW0uCj4gKyAqIEBnZW06CXRoZSBHRU0gb2JqZWN0 Cj4gKyAqIFJldHVybnM6CVRoZSBjb250YWluaW5nIEdFTSBWUkFNIG9iamVjdAo+ICsgKi8KPiAr c3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCogZHJtX2dlbV92cmFtX29m X2dlbSgKPiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtKQo+ICt7Cj4gKwlyZXR1cm4gY29u dGFpbmVyX29mKGdlbSwgc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QsIGdlbSk7Cj4gK30KZGl0 dG8KCj4gKwo+ICtzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCogZHJtX2dlbV92cmFtX2NyZWF0 ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkJCQlzdHJ1Y3QgdHRtX2JvX2RldmljZSog YmRldiwKPiArCQkJCQkJdW5zaWduZWQgbG9uZyBzaXplLAo+ICsJCQkJCQl1aW50MzJfdCBwZ19h bGlnbiwKPiArCQkJCQkJYm9vbCBpbnRlcnJ1cHRpYmxlKTsKCkhlcmUgaXMgaXMgIm5vcm1hbCIK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==