From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= Subject: Re: [PATCH v5 4/5] drm: Add library for shmem backed GEM objects Date: Mon, 22 Oct 2018 16:15:48 +0200 Message-ID: References: <20181017130454.44292-1-noralf@tronnes.org> <20181017130454.44292-5-noralf@tronnes.org> <20181017154621.GP31561@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181017154621.GP31561@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: intel-gfx@lists.freedesktop.org, sam@ravnborg.org, david@lechnology.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org CkRlbiAxNy4xMC4yMDE4IDE3LjQ2LCBza3JldiBEYW5pZWwgVmV0dGVyOgo+IE9uIFdlZCwgT2N0 IDE3LCAyMDE4IGF0IDAzOjA0OjUzUE0gKzAyMDAsIE5vcmFsZiBUcsO4bm5lcyB3cm90ZToKPj4g VGhpcyBhZGRzIGEgbGlicmFyeSBmb3Igc2htZW0gYmFja2VkIEdFTSBvYmplY3RzLgo+Pgo+PiB2 NToKPj4gLSBEcm9wIGRybV9nZW1fc2htZW1fcHJpbWVfbW1hcCgpIChEYW5pZWwgVmV0dGVyKQo+ PiAtIGRybV9nZW1fc2htZW1fbW1hcCgpOiBTdWJ0cmFjdCBkcm1fdm1hX25vZGVfc3RhcnQoKSB0 byBnZXQgdGhlIHJlYWwKPj4gICAgdm1hLT52bV9wZ29mZgo+PiAtIGRybV9nZW1fc2htZW1fZmF1 bHQoKTogVXNlIHZtZi0+cGdvZmYgbm93IHRoYXQgdm1hLT52bV9wZ29mZiBpcyBjb3JyZWN0Cj4+ Cj4+IHY0Ogo+PiAtIERyb3AgY2FjaGUgbW9kZXMgKFRob21hcyBIZWxsc3Ryb20pCj4+IC0gQWRk IGEgR0VNIGF0dGFjaGVkIHZ0YWJsZQo+Pgo+PiB2MzoKPj4gLSBHcmFtbWFyIChTYW0gUmF2bmJv cmcpCj4+IC0gcy9kcm1fZ2VtX3NobWVtX3B1dF9wYWdlc191bmxvY2tlZC9kcm1fZ2VtX3NobWVt X3B1dF9wYWdlc19sb2NrZWQvCj4+ICAgIChTYW0gUmF2bmJvcmcpCj4+IC0gQWRkIGRlYnVnIG91 dHB1dCBpbiBlcnJvciBwYXRoIChTYW0gUmF2bmJvcmcpCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IE5v cmFsZiBUcsO4bm5lcyA8bm9yYWxmQHRyb25uZXMub3JnPgo+PiAtLS0KPj4gICBEb2N1bWVudGF0 aW9uL2dwdS9kcm0ta21zLWhlbHBlcnMucnN0ICB8ICAxMiArCj4+ICAgZHJpdmVycy9ncHUvZHJt L0tjb25maWcgICAgICAgICAgICAgICAgfCAgIDYgKwo+PiAgIGRyaXZlcnMvZ3B1L2RybS9NYWtl ZmlsZSAgICAgICAgICAgICAgIHwgICAxICsKPj4gICBkcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9z aG1lbV9oZWxwZXIuYyB8IDU1MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4g ICBpbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oICAgICB8IDE1MyArKysrKysrKysK Pj4gICA1IGZpbGVzIGNoYW5nZWQsIDcyMyBpbnNlcnRpb25zKCspCj4+ICAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jCj4+ICAgY3JlYXRl IG1vZGUgMTAwNjQ0IGluY2x1ZGUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmgKPj4KCjxzbmlw PgoKPj4gK3N0YXRpYyB2bV9mYXVsdF90IGRybV9nZW1fc2htZW1fZmF1bHQoc3RydWN0IHZtX2Zh dWx0ICp2bWYpCj4+ICt7Cj4+ICsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtPnZt YTsKPj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRh Owo+PiArCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0gPSB0b19kcm1fZ2VtX3No bWVtX29iaihvYmopOwo+PiArCWxvZmZfdCBudW1fcGFnZXMgPSBvYmotPnNpemUgPj4gUEFHRV9T SElGVDsKPj4gKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKPj4gKwo+PiArCWlmICh2bWYtPnBnb2ZmID4g bnVtX3BhZ2VzIHx8IFdBUk5fT05fT05DRSghc2htZW0tPnBhZ2VzKSkKPj4gKwkJcmV0dXJuIFZN X0ZBVUxUX1NJR0JVUzsKPj4gKwo+PiArCXBhZ2UgPSBzaG1lbS0+cGFnZXNbdm1mLT5wZ29mZl07 Cj4+ICsKPj4gKwlyZXR1cm4gdm1mX2luc2VydF9wYWdlKHZtYSwgdm1mLT5hZGRyZXNzLCBwYWdl KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHJtX2dlbV9zaG1lbV92bV9jbG9zZShzdHJ1 Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwo+PiArCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29i amVjdCAqc2htZW0gPSB0b19kcm1fZ2VtX3NobWVtX29iaihvYmopOwo+PiArCj4+ICsJZHJtX2dl bV9zaG1lbV9wdXRfcGFnZXMoc2htZW0pOwo+IEltYmFsYW5jZSBnZXQvcHV0X3BhZ2VzIGhlcmUs IGlmIHNvbWVvbmUgZm9ya3MgKHdoaWNoIGlzIHdoYXQgY2FsbHMKPiB2bV9vcHMtPm9wZW4gb24g YW4gZXhpc3Rpbmcgdm1hKS4KPgo+PiArCWRybV9nZW1fdm1fY2xvc2Uodm1hKTsKPj4gK30KPj4g Kwo+PiArY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRybV9nZW1fc2htZW1fdm1f b3BzID0gewo+PiArCS5mYXVsdCA9IGRybV9nZW1fc2htZW1fZmF1bHQsCj4+ICsJLm9wZW4gPSBk cm1fZ2VtX3ZtX29wZW4sCj4+ICsJLmNsb3NlID0gZHJtX2dlbV9zaG1lbV92bV9jbG9zZSwKPj4g K307Cj4+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2VtX3NobWVtX3ZtX29wcyk7Cj4+ICsKPj4g Ky8qKgo+PiArICogZHJtX2dlbV9zaG1lbV9tbWFwIC0gTWVtb3J5LW1hcCBhIHNobWVtIEdFTSBv YmplY3QKPj4gKyAqIEBmaWxwOiBGaWxlIG9iamVjdAo+PiArICogQHZtYTogVk1BIGZvciB0aGUg YXJlYSB0byBiZSBtYXBwZWQKPj4gKyAqCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMg YW4gYXVnbWVudGVkIHZlcnNpb24gb2YgdGhlIEdFTSBEUk0gZmlsZSBtbWFwCj4+ICsgKiBvcGVy YXRpb24gZm9yIHNobWVtIG9iamVjdHMuIERyaXZlcnMgd2hpY2ggZW1wbG95IHRoZSBzaG1lbSBo ZWxwZXJzIHNob3VsZAo+PiArICogdXNlIHRoaXMgZnVuY3Rpb24gYXMgdGhlaXIgJmZpbGVfb3Bl cmF0aW9ucy5tbWFwIGhhbmRsZXIgaW4gdGhlIERSTSBkZXZpY2UgZmlsZSdzCj4+ICsgKiBmaWxl X29wZXJhdGlvbnMgc3RydWN0dXJlLgo+PiArICoKPj4gKyAqIEluc3RlYWQgb2YgZGlyZWN0bHkg cmVmZXJlbmNpbmcgdGhpcyBmdW5jdGlvbiwgZHJpdmVycyBzaG91bGQgdXNlIHRoZQo+PiArICog REVGSU5FX0RSTV9HRU1fU0hNRU1fRk9QUygpIG1hY3JvLgo+PiArICoKPj4gKyAqIFJldHVybnM6 Cj4+ICsgKiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUu Cj4+ICsgKi8KPiBCZXR3ZWVuIGNtYSBoZWxwZXJzLCBnZW0gc2htZW0gaGVscGVycyBhbmQgdGhl IGRybV9nZW1fbW1hcCB3ZSBub3cgaGF2ZQo+IHF1aXRlIGEgYml0IGEgY29uZnVzaW9uIG9mIG1t YXAgZnVuY3Rpb25zLiBJIHRoaW5rIGl0J2QgYmUgZ29vZCB0byB1cGRhdGUKPiB0aGUga2VybmVs ZG9jIGZvciBkcm1fZ2VtX21tYXAoKSB0byBwb2ludCBhdCB0aGVzZSBoZXJlIChib3RoIHRoZSBz aG1lbQo+IGFuZCBjbWEgdmVyc2lvbiksIHNvIHRoYXQgcGVvcGxlIHByZWZlciB0byB1c2UgdGhl c2UgaGVscGVycyBoZXJlLiBEaXJlY3QKPiBjYWxsIHRvIGRybV9nZW1fbW1hcCB3b3VsZCBvbmx5 IGJlIG5lZWRlZCBpZiB5b3Ugd2FudCB0byB1c2UgeW91ciBvd24KPiB2bV9vcHMuCj4KPj4gK2lu dCBkcm1fZ2VtX3NobWVtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqdm1hKQo+PiArewo+PiArCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW07 Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCXJldCA9IGRybV9nZW1fbW1hcChmaWxwLCB2bWEpOwo+ PiArCWlmIChyZXQpCj4+ICsJCXJldHVybiByZXQ7Cj4+ICsKPj4gKwlzaG1lbSA9IHRvX2RybV9n ZW1fc2htZW1fb2JqKHZtYS0+dm1fcHJpdmF0ZV9kYXRhKTsKPj4gKwo+PiArCXJldCA9IGRybV9n ZW1fc2htZW1fZ2V0X3BhZ2VzKHNobWVtKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCWRybV9nZW1f dm1fY2xvc2Uodm1hKTsKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBWTV9Q Rk5NQVAgd2FzIHNldCBieSBkcm1fZ2VtX21tYXAoKSAqLwo+PiArCXZtYS0+dm1fZmxhZ3MgJj0g flZNX1BGTk1BUDsKPj4gKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX01JWEVETUFQOwo+PiArCXZtYS0+ dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtPnZtX2ZsYWdzKTsKPj4gKwo+PiAr CWZwdXQodm1hLT52bV9maWxlKTsKPj4gKwl2bWEtPnZtX2ZpbGUgPSBnZXRfZmlsZShzaG1lbS0+ YmFzZS5maWxwKTsKPj4gKwkvKiBSZW1vdmUgdGhlIGZha2Ugb2Zmc2V0ICovCj4+ICsJdm1hLT52 bV9wZ29mZiAtPSBkcm1fdm1hX25vZGVfc3RhcnQoJnNobWVtLT5iYXNlLnZtYV9ub2RlKTsKPj4g Kwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1l bV9tbWFwKTsKPiBMb29raW5nIHRocm91Z2ggeW91ciBtbWFwIGNvZGUgdGhlcmUncyAyIGJpdHM6 Cj4gLSBzaG1lbSBpc24ndCBjb2hlcmVudCwKCllvdSBzYXZlZCBtZSBpbiB0aGUgbGFzdCBtaW51 dGUgd2l0aCB0aGF0IGNvbW1lbnQgRGFuaWVsLgoKSSBqdXN0IHJlbWVtYmVyZWQgdGhhdCBvbiB0 aGUgUmFzcGJlcnJ5IFBpIEkgbmVlZCB0byBzd2FwIHRoZSBieXRlcyAKKFJHQjU2NSwKU1BJIGJp ZyBlbmRpYW4pIGJlZm9yZSB0cmFuc2ZlciBiZWNhdXNlIGl0cyBTUEkgY2FuJ3QgZG8gMTYtYml0 IHRyYW5zZmVycy4KU28gSSByZW1vdmVkIHRoZSBzd2FwcGluZyBhbmQgc2VudCB0aGUgc2htZW0g YnVmZmVyIHN0cmFpZ2h0IHRocm91Z2ggdG8gU1BJLgpUaGlzIHJlc3VsdGVkIGluIGZiY29uIGxv b2tpbmcgZXJyYXRpYyBhbmQgImRpc3RvcnRlZCIsIHNvIGl0IGRpZG4ndCB3b3JrCndpdGggdGhl IGdlbmVyaWMgZmJkZXYgZW11bGF0aW9uIHNoYWRvdyBidWZmZXIgYmVpbmcgY29waWVkIGJ5IHRo ZSBjcHUgdG8KdGhlIHNobWVtIGJ1ZmZlciB3aGljaCBpcyBETUEnZWQgb3V0IG92ZXIgU1BJLiBF dmVuIHRob3VnaCB0aGUgU1BJIGNvcmUgaXMKdXNpbmcgdGhlIHN0cmVhbWluZyBETUEgQVBJLgoo YXBwYXJlbnRseSBJJ3ZlIHdvcmtlZCBzbyBtdWNoIG9uIERSTSBoZWxwZXIgcmVmYWN0b3Jpbmcg dGhhdCBJJ3ZlCmZvcmdvdHRlbiBob3cgdGhlIHRpbnlkcm0gZHJpdmVycyB3b3JrLi4uKQoKU28g aXQgbG9va3MgbGlrZSBJIGNhbid0IHVzZSBzaG1lbSBmb3IgdGhlIGN1cnJlbnQgdGlueWRybSBk cml2ZXJzLCB3aGljaAphbGwgdXNlIFNQSS4gVW5sZXNzIHRoZXJlJ3MgYSBzb2x1dGlvbiB0byBt eSBwcm9ibGVtLCBJIGd1ZXNzIEknbGwgSSBoYXZlCnRvIHBvc3Rwb25lIHRoaXMgc2htZW0gd29y ayB1bnRpbCBJIGNhbiB1c2UgaXQgaW4gYSBkcml2ZXIgdGhhdCBJJ20gCnBsYW5uaW5nCnRvIGRv IGZ1cnRoZXIgZG93biB0aGUgcm9hZC4gSXQgd2lsbCBjb21wcmVzcyB0aGUgZnJhbWVidWZmZXIg YmVmb3JlCnRyYW5zZmVyIG92ZXIgVVNCIHNvIG5vIERNQSBvbiB0aGUgc2htZW0gYnVmZmVyLgoK RG8geW91IHdhbnQgbWUgdG8gYXBwbHkgdGhlIGZpcnN0IDMgcGF0Y2hlcyBhbnl3YXksIGV2ZW4g dGhvdWdoIHRoZSBzaG1lbQpzdHVmZiBoYXMgdG8gd2FpdD8KCj4gaWYgeW91IHRyeSB0byBhY3R1 YWxseSBidWZmZXIgc2hhcmUgdGhpcyB3aXRoCj4gICAgcHJpbWUgSSBleHBlY3QgaXQnbGwgZmFp bCBiYWRseS4gV2UnZCBuZWVkIGJlZ2luL2VuZF9jcHVfYWNjZXNzCj4gICAgY2FsbGJhY2tzIGlu IGRtYV9idWZfb3BzIHRvIG1ha2UgdGhpcyB3b3JrLiBTbyBub3QgZW50aXJlbHkgc3VyZSBob3cK PiAgICBtdWNoIHZhbHVlIHRoZXJlIGlzIGluIGltcGxlbWVudGluZyB0aGUgcHJpbWUgbW1hcCBz dHVmZiAoYnV0IGRvZXNuJ3QKPiAgICBodXJ0IHRvIGhhdmUgaXQpLgoKVGhlIGdlbmVyaWMgZmJk ZXYgZW11bGF0aW9uIHVzZXMgUFJJTUUgbW1hcC4KCj4KPiAtIHNobWVtIGFscmVhZHkgaGFzIGFu IG1tYXAgaW1wbGVtdGF0aW9uLCB5b3UgY2FuIGp1c3QgdXNlIHRoYXQuIE5lZWRzIGEKPiAgICBz aW1pbGFyIG1tYXAgZm9yd2FyZGluZyB0cmljayBhcyB5b3UndmUgZG9uZSBmb3IgcHJpbWUgbW1h cCwgYnV0IGluc3RlYWQKPiAgICB5b3UgZm9yd2FyZCB0byBvYmotPmJhc2UuZmlscC4gVGhhdCBh bGxvd3MgeW91IHRvIGN1dCBhd2F5IGFsbCB0aGUKPiAgICB2bV9vcHMgYW5kIGV2ZXJ5dGhpbmcu IEkgZ3Vlc3Mgd2UgY291bGQgY2xlYW4gdGhpcyB1cCBpbiBhIGZvbGxvdy11cCwKPiAgICBzaW5j ZSBpdCBkb2Vzbid0IGhhdmUgYW4gZWZmZWN0IG9uIHRoZSBpbnRlcmZhY2VzIGV4cG9zZWQgdG8g ZHJpdmVycy4gQXQKPiAgICBsZWFzdCBub3QgYSBiaWcgb25lLCBkcm1fZ2VtX3NobWVtX3ZtX29w cyB3b3VsZCBkaXNhcHBlYXIuCgpUaGlzIGFwcHJvYWNoIHVzaW5nIHRoZSBzaG1lbSBtbWFwIHNl ZW1lZCB0byB3b3JrLCBub3Qgc3VyZSBpZiB0aGUgdm1fZmxhZ3MKbmVlZHMgdG8gYmUgdG91Y2hl ZCB0aG91Z2guCihJJ20gcHV0dGluZyBpdCB1cCBoZXJlIGZvciB0aGUgcmVjb3JkLCBpbmNyZWFz ZXMgdGhlIGNoYW5jZSBvZiBtZSBmaW5kaW5nCml0IHdoZW4gSSBwaWNrIHVwIHRoZSBzaG1lbSBo ZWxwZXIgZnVydGhlciBkb3duIHRoZSByb2FkKQoKaW50IGRybV9nZW1fc2htZW1fbW1hcChzdHJ1 Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCnsKIMKgwqDCoCBzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKIMKgwqDCoCBpbnQgcmV0OwoKIMKgwqDCoCByZXQgPSBk cm1fZ2VtX21tYXAoZmlscCwgdm1hKTsKIMKgwqDCoCBpZiAocmV0KQogwqDCoMKgIMKgwqDCoCBy ZXR1cm4gcmV0OwoKIMKgwqDCoCBvYmogPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKCiDCoMKgwqAg LyogUmVtb3ZlIHRoZSBmYWtlIG9mZnNldCAqLwogwqDCoMKgIHZtYS0+dm1fcGdvZmYgLT0gZHJt X3ZtYV9ub2RlX3N0YXJ0KCZvYmotPnZtYV9ub2RlKTsKCiDCoMKgwqAgLyogVk1fUEZOTUFQIHdh cyBzZXQgYnkgZHJtX2dlbV9tbWFwKCkgKi8KIMKgwqDCoCB2bWEtPnZtX2ZsYWdzICY9IH5WTV9Q Rk5NQVA7CiDCoMKgwqAgdm1hLT52bV9mbGFncyB8PSBWTV9NSVhFRE1BUDsKIMKgwqDCoCB2bWEt PnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtPnZt X2ZsYWdzKSk7CgogwqDCoMKgIGZwdXQodm1hLT52bV9maWxlKTsKIMKgwqDCoCB2bWEtPnZtX2Zp bGUgPSBnZXRfZmlsZShvYmotPmZpbHApOwoKIMKgwqDCoCBkcm1fZ2VtX29iamVjdF9wdXRfdW5s b2NrZWQob2JqKTsKCiDCoMKgwqAgcmV0dXJuIGNhbGxfbW1hcCh2bWEtPnZtX2ZpbGUsIHZtYSk7 Cn0KCgpOb3JhbGYuCgoKPj4gKwo+PiArLyoqCj4+ICsgKiBkcm1fZ2VtX3NobWVtX3ByaW50X2lu Zm8oKSAtIFByaW50ICZkcm1fZ2VtX3NobWVtX29iamVjdCBpbmZvIGZvciBkZWJ1Z2ZzCj4+ICsg KiBAcDogRFJNIHByaW50ZXIKPj4gKyAqIEBpbmRlbnQ6IFRhYiBpbmRlbnRhdGlvbiBsZXZlbAo+ PiArICogQG9iajogR0VNIG9iamVjdAo+IFdvdWxkIGJlIGdvb2QgdG8gcmVmZXJlbmNlIHRoZSBo b29rIHRoaXMgaXMgbWVhbnQgZm9yOgo+ICZkcm1fZ2VtX29iamVjdF9mdW5jcy5wcmludF9pbmZv LCBzYW1lIGZvciBhbGwgdGhlIG90aGVycy4gRm9yIHRob3NlCj4gZHJpdmVycyB0aGF0IHdhbnQg dG8gcGljayZjaG9vc2UuCj4KPiBDaGVlcnMsIERhbmllbAo+Cj4+ICsgKi8KPj4gK3ZvaWQgZHJt X2dlbV9zaG1lbV9wcmludF9pbmZvKHN0cnVjdCBkcm1fcHJpbnRlciAqcCwgdW5zaWduZWQgaW50 IGluZGVudCwKPj4gKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+ PiArewo+PiArCWNvbnN0IHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0gPSB0b19k cm1fZ2VtX3NobWVtX29iaihvYmopOwo+PiArCj4+ICsJZHJtX3ByaW50Zl9pbmRlbnQocCwgaW5k ZW50LCAicGFnZXNfdXNlX2NvdW50PSV1XG4iLCBzaG1lbS0+cGFnZXNfdXNlX2NvdW50KTsKPj4g Kwlkcm1fcHJpbnRmX2luZGVudChwLCBpbmRlbnQsICJ2bWFwX3VzZV9jb3VudD0ldVxuIiwgc2ht ZW0tPnZtYXBfdXNlX2NvdW50KTsKPj4gKwlkcm1fcHJpbnRmX2luZGVudChwLCBpbmRlbnQsICJ2 YWRkcj0lcFxuIiwgc2htZW0tPnZhZGRyKTsKPj4gK30KPj4gK0VYUE9SVF9TWU1CT0woZHJtX2dl bV9zaG1lbV9wcmludF9pbmZvKTsKPj4gKwo+PiArLyoqCj4+ICsgKiBkcm1fZ2VtX3NobWVtX2dl dF9zZ190YWJsZSAtIFByb3ZpZGUgYSBzY2F0dGVyL2dhdGhlciB0YWJsZSBvZiBwaW5uZWQKPj4g KyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZXMgZm9yIGEgc2htZW0gR0VNIG9i amVjdAo+PiArICogQG9iajogR0VNIG9iamVjdAo+PiArICoKPj4gKyAqIFRoaXMgZnVuY3Rpb24g ZXhwb3J0cyBhIHNjYXR0ZXIvZ2F0aGVyIHRhYmxlIHN1aXRhYmxlIGZvciBQUklNRSB1c2FnZSBi eQo+PiArICogY2FsbGluZyB0aGUgc3RhbmRhcmQgRE1BIG1hcHBpbmcgQVBJLgo+PiArICoKPj4g KyAqIFJldHVybnM6Cj4+ICsgKiBBIHBvaW50ZXIgdG8gdGhlIHNjYXR0ZXIvZ2F0aGVyIHRhYmxl IG9mIHBpbm5lZCBwYWdlcyBvciBOVUxMIG9uIGZhaWx1cmUuCj4+ICsgKi8KPj4gK3N0cnVjdCBz Z190YWJsZSAqZHJtX2dlbV9zaG1lbV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopCj4+ICt7Cj4+ICsJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRv X2RybV9nZW1fc2htZW1fb2JqKG9iaik7Cj4+ICsKPj4gKwlyZXR1cm4gZHJtX3ByaW1lX3BhZ2Vz X3RvX3NnKHNobWVtLT5wYWdlcywgb2JqLT5zaXplID4+IFBBR0VfU0hJRlQpOwo+PiArfQo+PiAr RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9nZXRfc2dfdGFibGUpOwo+PiArCj4+ICsv KioKPj4gKyAqIGRybV9nZW1fc2htZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlIC0gUHJvZHVjZSBh IHNobWVtIEdFTSBvYmplY3QgZnJvbQo+PiArICogICAgICAgICAgICAgICAgIGFub3RoZXIgZHJp dmVyJ3Mgc2NhdHRlci9nYXRoZXIgdGFibGUgb2YgcGlubmVkIHBhZ2VzCj4+ICsgKiBAZGV2OiBE ZXZpY2UgdG8gaW1wb3J0IGludG8KPj4gKyAqIEBhdHRhY2g6IERNQS1CVUYgYXR0YWNobWVudAo+ PiArICogQHNndDogU2NhdHRlci9nYXRoZXIgdGFibGUgb2YgcGlubmVkIHBhZ2VzCj4+ICsgKgo+ PiArICogVGhpcyBmdW5jdGlvbiBpbXBvcnRzIGEgc2NhdHRlci9nYXRoZXIgdGFibGUgZXhwb3J0 ZWQgdmlhIERNQS1CVUYgYnkKPj4gKyAqIGFub3RoZXIgZHJpdmVyLiBEcml2ZXJzIHRoYXQgdXNl IHRoZSBzaG1lbSBoZWxwZXJzIHNob3VsZCBzZXQgdGhpcyBhcyB0aGVpcgo+PiArICogJmRybV9k cml2ZXIuZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSBjYWxsYmFjay4KPj4gKyAqCj4+ICsgKiBS ZXR1cm5zOgo+PiArICogQSBwb2ludGVyIHRvIGEgbmV3bHkgY3JlYXRlZCBHRU0gb2JqZWN0IG9y IGFuIEVSUl9QVFItZW5jb2RlZCBuZWdhdGl2ZQo+PiArICogZXJyb3IgY29kZSBvbiBmYWlsdXJl Lgo+PiArICovCj4+ICtzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKgo+PiArZHJtX2dlbV9zaG1lbV9w cmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPj4gKwkJCQkgICAg c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAo+PiArCQkJCSAgICBzdHJ1Y3Qgc2df dGFibGUgKnNndCkKPj4gK3sKPj4gKwlzaXplX3Qgc2l6ZSA9IFBBR0VfQUxJR04oYXR0YWNoLT5k bWFidWYtPnNpemUpOwo+PiArCXNpemVfdCBucGFnZXMgPSBzaXplID4+IFBBR0VfU0hJRlQ7Cj4+ ICsJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbTsKPj4gKwlpbnQgcmV0Owo+PiAr Cj4+ICsJc2htZW0gPSBkcm1fZ2VtX3NobWVtX2NyZWF0ZShkZXYsIHNpemUpOwo+PiArCWlmIChJ U19FUlIoc2htZW0pKQo+PiArCQlyZXR1cm4gRVJSX0NBU1Qoc2htZW0pOwo+PiArCj4+ICsJc2ht ZW0tPnBhZ2VzID0ga3ZtYWxsb2NfYXJyYXkobnBhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiks IEdGUF9LRVJORUwpOwo+PiArCWlmICghc2htZW0tPnBhZ2VzKSB7Cj4+ICsJCXJldCA9IC1FTk9N RU07Cj4+ICsJCWdvdG8gZXJyX2ZyZWVfZ2VtOwo+PiArCX0KPj4gKwo+PiArCXJldCA9IGRybV9w cmltZV9zZ190b19wYWdlX2FkZHJfYXJyYXlzKHNndCwgc2htZW0tPnBhZ2VzLCBOVUxMLCBucGFn ZXMpOwo+PiArCWlmIChyZXQgPCAwKQo+PiArCQlnb3RvIGVycl9mcmVlX2FycmF5Owo+PiArCj4+ ICsJc2htZW0tPnNndCA9IHNndDsKPj4gKwlzaG1lbS0+cGFnZXNfdXNlX2NvdW50ID0gMTsgLyog UGVybWFuZW50bHkgcGlubmVkIGZyb20gb3VyIHBvaW50IG9mIHZpZXcgKi8KPj4gKwo+PiArCURS TV9ERUJVR19QUklNRSgic2l6ZSA9ICV6dVxuIiwgc2l6ZSk7Cj4+ICsKPj4gKwlyZXR1cm4gJnNo bWVtLT5iYXNlOwo+PiArCj4+ICtlcnJfZnJlZV9hcnJheToKPj4gKwlrdmZyZWUoc2htZW0tPnBh Z2VzKTsKPj4gK2Vycl9mcmVlX2dlbToKPj4gKwlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQo JnNobWVtLT5iYXNlKTsKPj4gKwo+PiArCXJldHVybiBFUlJfUFRSKHJldCk7Cj4+ICt9Cj4+ICtF WFBPUlRfU1lNQk9MX0dQTChkcm1fZ2VtX3NobWVtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSk7Cj4+ IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oIGIvaW5jbHVk ZS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBp bmRleCAwMDAwMDAwMDAwMDAuLjI2YjA1ZTA2NDA3ZAo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBi L2luY2x1ZGUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmgKPj4gQEAgLTAsMCArMSwxNTMgQEAK Pj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCj4+ICsKPj4gKyNpZm5k ZWYgX19EUk1fR0VNX1NITUVNX0hFTFBFUl9IX18KPj4gKyNkZWZpbmUgX19EUk1fR0VNX1NITUVN X0hFTFBFUl9IX18KPj4gKwo+PiArI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Cj4+ICsjaW5jbHVkZSA8 bGludXgvbW0uaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+PiArCj4+ICsjaW5jbHVk ZSA8ZHJtL2RybV9maWxlLmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KPj4gKyNpbmNs dWRlIDxkcm0vZHJtX2lvY3RsLmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcmltZS5oPgo+PiAr Cj4+ICtzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50Owo+PiArc3RydWN0IGRybV9tb2RlX2NyZWF0 ZV9kdW1iOwo+PiArc3RydWN0IGRybV9wcmludGVyOwo+PiArc3RydWN0IHNnX3RhYmxlOwo+PiAr Cj4+ICsvKioKPj4gKyAqIHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAtIEdFTSBvYmplY3Qg YmFja2VkIGJ5IHNobWVtCj4+ICsgKi8KPj4gK3N0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCB7 Cj4+ICsJLyoqCj4+ICsJICogQGJhc2U6IEJhc2UgR0VNIG9iamVjdAo+PiArCSAqLwo+PiArCXN0 cnVjdCBkcm1fZ2VtX29iamVjdCBiYXNlOwo+PiArCj4+ICsJLyoqCj4+ICsJICogQHBhZ2VzX2xv Y2s6IFByb3RlY3RzIHRoZSBwYWdlIHRhYmxlIGFuZCB1c2UgY291bnQKPj4gKwkgKi8KPj4gKwlz dHJ1Y3QgbXV0ZXggcGFnZXNfbG9jazsKPj4gKwo+PiArCS8qKgo+PiArCSAqIEBwYWdlczogUGFn ZSB0YWJsZQo+PiArCSAqLwo+PiArCXN0cnVjdCBwYWdlICoqcGFnZXM7Cj4+ICsKPj4gKwkvKioK Pj4gKwkgKiBAcGFnZXNfdXNlX2NvdW50Ogo+PiArCSAqCj4+ICsJICogUmVmZXJlbmNlIGNvdW50 IG9uIHRoZSBwYWdlcyB0YWJsZS4KPj4gKwkgKiBUaGUgcGFnZXMgYXJlIHB1dCB3aGVuIHRoZSBj b3VudCByZWFjaGVzIHplcm8uCj4+ICsJICovCj4+ICsJdW5zaWduZWQgaW50IHBhZ2VzX3VzZV9j b3VudDsKPj4gKwo+PiArCS8qKgo+PiArCSAqIEBwYWdlc19tYXJrX2RpcnR5X29uX3B1dDoKPj4g KwkgKgo+PiArCSAqIE1hcmsgcGFnZXMgYXMgZGlydHkgd2hlbiB0aGV5IGFyZSBwdXQuCj4+ICsJ ICovCj4+ICsJdW5zaWduZWQgaW50IHBhZ2VzX21hcmtfZGlydHlfb25fcHV0ICAgIDogMTsKPj4g Kwo+PiArCS8qKgo+PiArCSAqIEBwYWdlc19tYXJrX2FjY2Vzc2VkX29uX3B1dDoKPj4gKwkgKgo+ PiArCSAqIE1hcmsgcGFnZXMgYXMgYWNjZXNzZWQgd2hlbiB0aGV5IGFyZSBwdXQuCj4+ICsJICov Cj4+ICsJdW5zaWduZWQgaW50IHBhZ2VzX21hcmtfYWNjZXNzZWRfb25fcHV0IDogMTsKPj4gKwo+ PiArCS8qKgo+PiArCSAqIEBzZ3Q6IFNjYXR0ZXIvZ2F0aGVyIHRhYmxlIGZvciBpbXBvcnRlZCBQ UklNRSBidWZmZXJzCj4+ICsJICovCj4+ICsJc3RydWN0IHNnX3RhYmxlICpzZ3Q7Cj4+ICsKPj4g KwkvKioKPj4gKwkgKiBAdm1hcF9sb2NrOiBQcm90ZWN0cyB0aGUgdm1hcCBhZGRyZXNzIGFuZCB1 c2UgY291bnQKPj4gKwkgKi8KPj4gKwlzdHJ1Y3QgbXV0ZXggdm1hcF9sb2NrOwo+PiArCj4+ICsJ LyoqCj4+ICsJICogQHZhZGRyOiBLZXJuZWwgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBiYWNraW5n IG1lbW9yeQo+PiArCSAqLwo+PiArCXZvaWQgKnZhZGRyOwo+PiArCj4+ICsJLyoqCj4+ICsJICog QHZtYXBfdXNlX2NvdW50Ogo+PiArCSAqCj4+ICsJICogUmVmZXJlbmNlIGNvdW50IG9uIHRoZSB2 aXJ0dWFsIGFkZHJlc3MuCj4+ICsJICogVGhlIGFkZHJlc3MgYXJlIHVuLW1hcHBlZCB3aGVuIHRo ZSBjb3VudCByZWFjaGVzIHplcm8uCj4+ICsJICovCj4+ICsJdW5zaWduZWQgaW50IHZtYXBfdXNl X2NvdW50Owo+PiArfTsKPj4gKwo+PiArI2RlZmluZSB0b19kcm1fZ2VtX3NobWVtX29iaihvYmop IFwKPj4gKwljb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QsIGJh c2UpCj4+ICsKPj4gKy8qKgo+PiArICogREVGSU5FX0RSTV9HRU1fU0hNRU1fRk9QUygpIC0gTWFj cm8gdG8gZ2VuZXJhdGUgZmlsZSBvcGVyYXRpb25zIGZvciBzaG1lbSBkcml2ZXJzCj4+ICsgKiBA bmFtZTogbmFtZSBmb3IgdGhlIGdlbmVyYXRlZCBzdHJ1Y3R1cmUKPj4gKyAqCj4+ICsgKiBUaGlz IG1hY3JvIGF1dG9nZW5lcmF0ZXMgYSBzdWl0YWJsZSAmc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBm b3Igc2htZW0gYmFzZWQKPj4gKyAqIGRyaXZlcnMsIHdoaWNoIGNhbiBiZSBhc3NpZ25lZCB0byAm ZHJtX2RyaXZlci5mb3BzLiBOb3RlIHRoYXQgdGhpcyBzdHJ1Y3R1cmUKPj4gKyAqIGNhbm5vdCBi ZSBzaGFyZWQgYmV0d2VlbiBkcml2ZXJzLCBiZWNhdXNlIGl0IGNvbnRhaW5zIGEgcmVmZXJlbmNl IHRvIHRoZQo+PiArICogY3VycmVudCBtb2R1bGUgdXNpbmcgVEhJU19NT0RVTEUuCj4+ICsgKgo+ PiArICogTm90ZSB0aGF0IHRoZSBkZWNsYXJhdGlvbiBpcyBhbHJlYWR5IG1hcmtlZCBhcyBzdGF0 aWMgLSBpZiB5b3UgbmVlZCBhCj4+ICsgKiBub24tc3RhdGljIHZlcnNpb24gb2YgdGhpcyB5b3Un cmUgcHJvYmFibHkgZG9pbmcgaXQgd3JvbmcgYW5kIHdpbGwgYnJlYWsgdGhlCj4+ICsgKiBUSElT X01PRFVMRSByZWZlcmVuY2UgYnkgYWNjaWRlbnQuCj4+ICsgKi8KPj4gKyNkZWZpbmUgREVGSU5F X0RSTV9HRU1fU0hNRU1fRk9QUyhuYW1lKSBcCj4+ICsJc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxl X29wZXJhdGlvbnMgbmFtZSA9IHtcCj4+ICsJCS5vd25lcgkJPSBUSElTX01PRFVMRSxcCj4+ICsJ CS5vcGVuCQk9IGRybV9vcGVuLFwKPj4gKwkJLnJlbGVhc2UJPSBkcm1fcmVsZWFzZSxcCj4+ICsJ CS51bmxvY2tlZF9pb2N0bAk9IGRybV9pb2N0bCxcCj4+ICsJCS5jb21wYXRfaW9jdGwJPSBkcm1f Y29tcGF0X2lvY3RsLFwKPj4gKwkJLnBvbGwJCT0gZHJtX3BvbGwsXAo+PiArCQkucmVhZAkJPSBk cm1fcmVhZCxcCj4+ICsJCS5sbHNlZWsJCT0gbm9vcF9sbHNlZWssXAo+PiArCQkubW1hcAkJPSBk cm1fZ2VtX3NobWVtX21tYXAsIFwKPj4gKwl9Cj4+ICsKPj4gK3N0cnVjdCBkcm1fZ2VtX3NobWVt X29iamVjdCAqZHJtX2dlbV9zaG1lbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6 ZV90IHNpemUpOwo+PiArdm9pZCBkcm1fZ2VtX3NobWVtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1f Z2VtX29iamVjdCAqb2JqKTsKPj4gKwo+PiAraW50IGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzKHN0 cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pOwo+PiArdm9pZCBkcm1fZ2VtX3NobWVt X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKTsKPj4gK2ludCBk cm1fZ2VtX3NobWVtX3BpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4+ICt2b2lkIGRy bV9nZW1fc2htZW1fdW5waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+PiArdm9pZCAq ZHJtX2dlbV9zaG1lbV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPj4gK3ZvaWQg ZHJtX2dlbV9zaG1lbV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHZvaWQgKnZh ZGRyKTsKPj4gKwo+PiAraW50IGRybV9nZW1fc2htZW1fZHVtYl9jcmVhdGUoc3RydWN0IGRybV9m aWxlICpmaWxlLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+PiArCQkJICAgICAgc3RydWN0IGRy bV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKTsKPj4gKwo+PiAraW50IGRybV9nZW1fc2htZW1fbW1h cChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+PiArCj4+ ICtleHRlcm4gY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRybV9nZW1fc2htZW1f dm1fb3BzOwo+PiArCj4+ICt2b2lkIGRybV9nZW1fc2htZW1fcHJpbnRfaW5mbyhzdHJ1Y3QgZHJt X3ByaW50ZXIgKnAsIHVuc2lnbmVkIGludCBpbmRlbnQsCj4+ICsJCQkgICAgICBjb25zdCBzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4+ICsKPj4gK3N0cnVjdCBzZ190YWJsZSAqZHJtX2dl bV9zaG1lbV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+PiArc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICoKPj4gK2RybV9nZW1fc2htZW1fcHJpbWVfaW1wb3J0X3NnX3Rh YmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+ICsJCQkJICAgIHN0cnVjdCBkbWFfYnVmX2F0 dGFjaG1lbnQgKmF0dGFjaCwKPj4gKwkJCQkgICAgc3RydWN0IHNnX3RhYmxlICpzZ3QpOwo+PiAr Cj4+ICsvKioKPj4gKyAqIERSTV9HRU1fU0hNRU1fRFJJVkVSX09QUyAtIERlZmF1bHQgc2htZW0g R0VNIG9wZXJhdGlvbnMKPj4gKyAqCj4+ICsgKiBUaGlzIG1hY3JvIHByb3ZpZGVzIGEgc2hvcnRj dXQgZm9yIHNldHRpbmcgdGhlIHNobWVtIEdFTSBvcGVyYXRpb25zIGluCj4+ICsgKiB0aGUgJmRy bV9kcml2ZXIgc3RydWN0dXJlLgo+PiArICovCj4+ICsjZGVmaW5lIERSTV9HRU1fU0hNRU1fRFJJ VkVSX09QUyBcCj4+ICsJLnByaW1lX2hhbmRsZV90b19mZAk9IGRybV9nZW1fcHJpbWVfaGFuZGxl X3RvX2ZkLCBcCj4+ICsJLnByaW1lX2ZkX3RvX2hhbmRsZQk9IGRybV9nZW1fcHJpbWVfZmRfdG9f aGFuZGxlLCBcCj4+ICsJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBkcm1fZ2VtX3NobWVt X3ByaW1lX2ltcG9ydF9zZ190YWJsZSwgXAo+PiArCS5nZW1fcHJpbWVfbW1hcAkJPSBkcm1fZ2Vt X3ByaW1lX21tYXAsIFwKPj4gKwkuZHVtYl9jcmVhdGUJCT0gZHJtX2dlbV9zaG1lbV9kdW1iX2Ny ZWF0ZQo+PiArCj4+ICsjZW5kaWYgLyogX19EUk1fR0VNX1NITUVNX0hFTFBFUl9IX18gKi8KPj4g LS0gCj4+IDIuMTUuMQo+Pgo+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwo+PiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4+IGRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKPj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lu dGVsLWdmeAo=