From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [passive aggressive RESEND 1/2] drm/i915: Mark CPU cache as dirty on every transition for CPU writes Date: Thu, 15 Jun 2017 15:28:10 +0100 Message-ID: References: <20170615123850.26843-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 084826E79C for ; Thu, 15 Jun 2017 14:28:13 +0000 (UTC) In-Reply-To: <20170615123850.26843-1-chris@chris-wilson.co.uk> Content-Language: en-GB 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: Dongwon Kim List-Id: intel-gfx@lists.freedesktop.org Ck9uIDE1LzA2LzIwMTcgMTM6MzgsIENocmlzIFdpbHNvbiB3cm90ZToKPiBDdXJyZW50bHksIHdl IG9ubHkgbWFyayB0aGUgQ1BVIGNhY2hlIGFzIGRpcnR5IGlmIHdlIHNraXAgYSBjbGZsdXNoLgo+ IFRoaXMgbGVhZHMgdG8gc29tZSBjb25mdXNpb24gd2hlcmUgd2UgaGF2ZSB0byBhc2sgaWYgdGhl IG9iamVjdCBpcyBpbgo+IHRoZSB3cml0ZSBkb21haW4gb3IgbWlzc2VkIGEgY2xmbHVzaC4gSWYg d2UgYWx3YXlzIG1hcmsgdGhlIGNhY2hlIGFzCj4gZGlydHksIHRoaXMgYmVjb21lcyBhIG11Y2gg c2ltcGx5IHF1ZXN0aW9uIHRvIGFuc3dlci4KPiAKPiBUaGUgZ29hbCByZW1haW5zIHRvIGRvIGFz IGZldyBjbGZsdXNoZXMgYXMgcmVxdWlyZWQgYW5kIHRvIGRvIHRoZW0gYXMKPiBsYXRlIGFzIHBv c3NpYmxlLCBpbiB0aGUgaG9wZSBvZiBkZWZlcnJpbmcgdGhlIHdvcmsgdG8gYSBrdGhyZWFkIGFu ZCBub3QKPiBibG9jayB0aGUgY2FsbGVyIChlLmcuIGV4ZWNidWYsIGZsaXBzKS4KPiAKPiB2Mjog QWx3YXlzIGNhbGwgY2xmbHVzaCBiZWZvcmUgR1BVIGV4ZWN1dGlvbiB3aGVuIHRoZSBjYWNoZV9k aXJ0eSBmbGFnCj4gaXMgc2V0LiBUaGlzIG1heSBjYXVzZSBzb21lIGV4dHJhIHdvcmsgb24gbGxj IHN5c3RlbXMgdGhhdCBtaWdyYXRlIGRpcnR5Cj4gYnVmZmVycyBiYWNrIGFuZCBmb3J0aCAtIGJ1 dCB3ZSBkbyB0cnkgdG8gbGltaXQgdGhhdCBieSBvbmx5IHNldHRpbgoKc2V0dGluKmcqCgpTdWJq ZWN0IHNvdW5kZWQgbGlrZSByZXZpZXdlciBpcyB3YW50ZWQgc28gSSB0aG91Z2h0IHRvIGdpdmUg aXQgYSB0cnkuCgo+IGNhY2hlX2RpcnR5IGF0IHRoZSBlbmQgb2YgdGhlIGdwdSBzZXF1ZW5jZS4K PiAKPiB2MzogQWx3YXlzIG1hcmsgdGhlIGNhY2hlIGFzIGRpcnR5IHVwb24gYSBsZXZlbCBjaGFu Z2UsIGFzIHdlIG5lZWQgdG8KPiBpbnZhbGlkYXRlIGFueSBzdGFsZSBjYWNoZWxpbmVzIGR1ZSB0 byBleHRlcm5hbCB3cml0ZXMuCj4gCj4gUmVwb3J0ZWQtYnk6IERvbmd3b24gS2ltIDxkb25nd29u LmtpbUBpbnRlbC5jb20+Cj4gRml4ZXM6IGE2YTdjYzRiN2RiNiAoImRybS9pOTE1OiBBbHdheXMg Zmx1c2ggdGhlIGRpcnR5IENQVSBjYWNoZSB3aGVuIHBpbm5pbmcgdGhlIHNjYW5vdXQiKQo+IFNp Z25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IENj OiBEb25nd29uIEtpbSA8ZG9uZ3dvbi5raW1AaW50ZWwuY29tPgo+IENjOiBNYXR0IFJvcGVyIDxt YXR0aGV3LmQucm9wZXJAaW50ZWwuY29tPgo+IFRlc3RlZC1ieTogRG9uZ3dvbiBLaW0gPGRvbmd3 b24ua2ltQGludGVsLmNvbT4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt LmMgICAgICAgICAgICAgICAgICB8IDc2ICsrKysrKysrKysrKysrLS0tLS0tLS0tLQo+ICAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY2xmbHVzaC5jICAgICAgICAgIHwgMTUgKysrLS0K PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyAgICAgICB8IDIx ICsrKy0tLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2ludGVybmFsLmMgICAg ICAgICB8ICAzICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMg ICAgICAgICAgfCAgNSArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2h1Z2Vf Z2VtX29iamVjdC5jIHwgIDMgKy0KPiAgIDYgZmlsZXMgY2hhbmdlZCwgNjcgaW5zZXJ0aW9ucygr KSwgNTYgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gaW5kZXggMzFj YmU3ODE3MWE5Li5iMTUwNGE4MjljNmEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBA QCAtNDksNyArNDksNyBAQCBzdGF0aWMgdm9pZCBpOTE1X2dlbV9mbHVzaF9mcmVlX29iamVjdHMo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwo+ICAgCj4gICBzdGF0aWMgYm9vbCBjcHVf d3JpdGVfbmVlZHNfY2xmbHVzaChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAg ewo+IC0JaWYgKG9iai0+YmFzZS53cml0ZV9kb21haW4gPT0gSTkxNV9HRU1fRE9NQUlOX0NQVSkK PiArCWlmIChvYmotPmNhY2hlX2RpcnR5KQo+ICAgCQlyZXR1cm4gZmFsc2UgPgo+ICAgCWlmICgh aTkxNV9nZW1fb2JqZWN0X2lzX2NvaGVyZW50KG9iaikpCj4gQEAgLTIzMyw2ICsyMzMsMTQgQEAg aTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlc19waHlzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmopCj4gICAJcmV0dXJuIHN0Owo+ICAgfQo+ICAgCj4gK3N0YXRpYyB2b2lkIF9fc3RhcnRf Y3B1X3dyaXRlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gK3sKPiArCW9iai0+ YmFzZS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fQ1BVOwo+ICsJb2JqLT5iYXNlLndy aXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7Cj4gKwlpZiAoY3B1X3dyaXRlX25lZWRz X2NsZmx1c2gob2JqKSkKPiArCQlvYmotPmNhY2hlX2RpcnR5ID0gdHJ1ZTsKCkkgZmluZCB0aGUg bG9naWMgaGVyZSBxdWl0ZSBoYXJkIHRvIHVuZGVyc3RhbmQgYmVjYXVzZSAKY3B1X3dyaXRlX25l ZWRzX2NsZmx1c2ggaXMgYWN0dWFsbHkgY29uc3VsdGluZyBvYmotPmNhY2hlX2RpcnR5IHNvIGl0 J3MgCmFsbCBhIGJpdCByZWN1cnNpdmUuCgpJZiB3ZSBzdGFydCBhIGNwdSB3cml0ZSBvbiBhbiBv YmplY3Qgd2hpY2ggaGFzIGJlZW4gY2xmbHVzaGVkLCBidXQgCm90aGVyd2lzZSBuZWVkcyBjbGZs dXNoaW5nIGxpa2UgcGluX2Rpc3BsYXkgLSB3aGF0IGlzIHRoZSBjb3JyZWN0IHRoaW5nIAp0byBk bz8gTm90IHNldCBvYmotPmNhY2hlX2RpcnR5IHRvIHRydWU/Cgo+ICt9Cj4gKwo+ICAgc3RhdGlj IHZvaWQKPiAgIF9faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2Vfc2htZW0oc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKPiAgIAkJCQlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzLAo+IEBAIC0y NDgsOCArMjU2LDcgQEAgX19pOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9zaG1lbShzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCSAgICAhaTkxNV9nZW1fb2JqZWN0X2lzX2NvaGVy ZW50KG9iaikpCj4gICAJCWRybV9jbGZsdXNoX3NnKHBhZ2VzKTsKPiAgIAo+IC0Jb2JqLT5iYXNl LnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7Cj4gLQlvYmotPmJhc2Uud3JpdGVf ZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX0NQVTsKPiArCV9fc3RhcnRfY3B1X3dyaXRlKG9iaik7 Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkCj4gQEAgLTY4NCw2ICs2OTEsMTIgQEAgaTkxNV9n ZW1fZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlLAo+ICAgCQkJICAgICAgIGFyZ3Mt PnNpemUsICZhcmdzLT5oYW5kbGUpOwo+ICAgfQo+ICAgCj4gK3N0YXRpYyBib29sIGdwdV93cml0 ZV9uZWVkc19jbGZsdXNoKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gK3sKPiAr CXJldHVybiAhKG9iai0+Y2FjaGVfbGV2ZWwgPT0gSTkxNV9DQUNIRV9OT05FIHx8Cj4gKwkJIG9i ai0+Y2FjaGVfbGV2ZWwgPT0gSTkxNV9DQUNIRV9XVCk7CgpIbSwgaXMgdGhpcyByZXZlcnNlZD8g T24gTExDIEkgd291bGQgYXNzdW1lIHdlIGRvbid0IG5lZWQgZXhwbGljaXQgCmNsZmx1c2gsIGJ1 dCBwZXJoYXBzIEkgYW0gbWlzdW5kZXJzdGFuZGluZyBzb21ldGhpbmcuCgo+ICt9Cj4gKwo+ICAg LyoqCj4gICAgKiBDcmVhdGVzIGEgbmV3IG1tIG9iamVjdCBhbmQgcmV0dXJucyBhIGhhbmRsZSB0 byBpdC4KPiAgICAqIEBkZXY6IGRybSBkZXZpY2UgcG9pbnRlcgo+IEBAIC03NTMsNiArNzY2LDEx IEBAIGZsdXNoX3dyaXRlX2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCB1 bnNpZ25lZCBpbnQgZmx1c2hfZG9tYWlucykKPiAgIAljYXNlIEk5MTVfR0VNX0RPTUFJTl9DUFU6 Cj4gICAJCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaiwgSTkxNV9DTEZMVVNIX1NZTkMpOwo+ ICAgCQlicmVhazsKPiArCj4gKwljYXNlIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI6Cj4gKwkJaWYg KGdwdV93cml0ZV9uZWVkc19jbGZsdXNoKG9iaikpCj4gKwkJCW9iai0+Y2FjaGVfZGlydHkgPSB0 cnVlOwo+ICsJCWJyZWFrOwo+ICAgCX0KPiAgIAo+ICAgCW9iai0+YmFzZS53cml0ZV9kb21haW4g PSAwOwo+IEBAIC04NTQsNyArODcyLDggQEAgaW50IGk5MTVfZ2VtX29ial9wcmVwYXJlX3NobWVt X3JlYWQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAkgKiBvcHRpbWl6ZXMg Zm9yIHRoZSBjYXNlIHdoZW4gdGhlIGdwdSB3aWxsIGRpcnR5IHRoZSBkYXRhCj4gICAJICogYW55 d2F5IGFnYWluIGJlZm9yZSB0aGUgbmV4dCBwcmVhZCBoYXBwZW5zLgo+ICAgCSAqLwo+IC0JaWYg KCEob2JqLT5iYXNlLnJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpKQo+ICsJaWYg KCFvYmotPmNhY2hlX2RpcnR5ICYmCj4gKwkgICAgIShvYmotPmJhc2UucmVhZF9kb21haW5zICYg STkxNV9HRU1fRE9NQUlOX0NQVSkpCj4gICAJCSpuZWVkc19jbGZsdXNoID0gQ0xGTFVTSF9CRUZP UkU7CgpPYnZpb3VzbHkgSSBkb24ndCB1bmRlcnN0YW5kIHNvbWV0aGluZyBjcml0aWNhbCBoZXJl IHNpbmNlIG9uY2UgbW9yZSBJIAp3YXMgZXhwZWN0aW5nIHRoZSByZXZlcnNlIGhlcmUgLSBpZiB0 aGUgY2FjaGUgaXMgbm90IGRpcnR5IG5vIG5lZWQgdG8gCmZsdXNoIGl0LgoKPiAgIAo+ICAgb3V0 Ogo+IEBAIC05MDYsMTQgKzkyNSwxNiBAQCBpbnQgaTkxNV9nZW1fb2JqX3ByZXBhcmVfc2htZW1f d3JpdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAkgKiBUaGlzIG9wdGlt aXplcyBmb3IgdGhlIGNhc2Ugd2hlbiB0aGUgZ3B1IHdpbGwgdXNlIHRoZSBkYXRhCj4gICAJICog cmlnaHQgYXdheSBhbmQgd2UgdGhlcmVmb3JlIGhhdmUgdG8gY2xmbHVzaCBhbnl3YXkuCj4gICAJ ICovCj4gLQlpZiAob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAhPSBJOTE1X0dFTV9ET01BSU5fQ1BV KQo+ICsJaWYgKCFvYmotPmNhY2hlX2RpcnR5KSB7Cj4gICAJCSpuZWVkc19jbGZsdXNoIHw9IENM RkxVU0hfQUZURVI7Cj4gICAKPiAtCS8qIFNhbWUgdHJpY2sgYXBwbGllcyB0byBpbnZhbGlkYXRl IHBhcnRpYWxseSB3cml0dGVuIGNhY2hlbGluZXMgcmVhZAo+IC0JICogYmVmb3JlIHdyaXRpbmcu Cj4gLQkgKi8KPiAtCWlmICghKG9iai0+YmFzZS5yZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01B SU5fQ1BVKSkKPiAtCQkqbmVlZHNfY2xmbHVzaCB8PSBDTEZMVVNIX0JFRk9SRTsKPiArCQkvKgo+ ICsJCSAqIFNhbWUgdHJpY2sgYXBwbGllcyB0byBpbnZhbGlkYXRlIHBhcnRpYWxseSB3cml0dGVu Cj4gKwkJICogY2FjaGVsaW5lcyByZWFkIGJlZm9yZSB3cml0aW5nLgo+ICsJCSAqLwo+ICsJCWlm ICghKG9iai0+YmFzZS5yZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKSkKPiArCQkJ Km5lZWRzX2NsZmx1c2ggfD0gQ0xGTFVTSF9CRUZPUkU7Cj4gKwl9Cj4gICAKPiAgIG91dDoKPiAg IAlpbnRlbF9mYl9vYmpfaW52YWxpZGF0ZShvYmosIE9SSUdJTl9DUFUpOwo+IEBAIC0zMzk1LDEw ICszNDE2LDEzIEBAIGludCBpOTE1X2dlbV93YWl0X2Zvcl9pZGxlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4gICAKPiAgIHN0YXRpYyB2b2lkIF9f aTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2Zvcl9kaXNwbGF5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmopCj4gICB7Cj4gLQlpZiAob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAhPSBJOTE1X0dF TV9ET01BSU5fQ1BVICYmICFvYmotPmNhY2hlX2RpcnR5KQo+IC0JCXJldHVybjsKPiAtCj4gLQlp OTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmosIEk5MTVfQ0xGTFVTSF9GT1JDRSk7Cj4gKwkvKgo+ ICsJICogV2UgbWFudWFsbHkgZmx1c2ggdGhlIENQVSBkb21haW4gc28gdGhhdCB3ZSBjYW4gb3Zl cnJpZGUgYW5kCj4gKwkgKiBmb3JjZSB0aGUgZmx1c2ggZm9yIHRoZSBkaXNwbGF5LCBhbmQgcGVy Zm9ybSBpdCBhc3luY3Job25vdXNseS4KClR5cG8gaW4gYXN5bmNocm9ub3VzbHkuCgo+ICsJICov Cj4gKwlmbHVzaF93cml0ZV9kb21haW4ob2JqLCB+STkxNV9HRU1fRE9NQUlOX0NQVSk7Cj4gKwlp ZiAob2JqLT5jYWNoZV9kaXJ0eSkKPiArCQlpOTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmosIEk5 MTVfQ0xGTFVTSF9GT1JDRSk7Cj4gICAJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IDA7Cj4gICB9 Cj4gICAKPiBAQCAtMzY1NywxMyArMzY4MSwxMCBAQCBpbnQgaTkxNV9nZW1fb2JqZWN0X3NldF9j YWNoZV9sZXZlbChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCQl9Cj4gICAJ fQo+ICAgCj4gLQlpZiAob2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9PSBJOTE1X0dFTV9ET01BSU5f Q1BVICYmCj4gLQkgICAgaTkxNV9nZW1fb2JqZWN0X2lzX2NvaGVyZW50KG9iaikpCj4gLQkJb2Jq LT5jYWNoZV9kaXJ0eSA9IHRydWU7Cj4gLQo+ICAgCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAm b2JqLT52bWFfbGlzdCwgb2JqX2xpbmspCj4gICAJCXZtYS0+bm9kZS5jb2xvciA9IGNhY2hlX2xl dmVsOwo+ICAgCW9iai0+Y2FjaGVfbGV2ZWwgPSBjYWNoZV9sZXZlbDsKPiArCW9iai0+Y2FjaGVf ZGlydHkgPSB0cnVlOyAvKiBBbHdheXMgaW52YWxpZGF0ZSBzdGFsZSBjYWNoZWxpbmVzICovCj4g ICAKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPiBAQCAtMzg4NSw5ICszOTA2LDYgQEAgaTkxNV9nZW1f b2JqZWN0X3NldF90b19jcHVfZG9tYWluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmos IGJvb2wgd3JpdGUpCj4gICAJaWYgKHJldCkKPiAgIAkJcmV0dXJuIHJldDsKPiAgIAo+IC0JaWYg KG9iai0+YmFzZS53cml0ZV9kb21haW4gPT0gSTkxNV9HRU1fRE9NQUlOX0NQVSkKPiAtCQlyZXR1 cm4gMDsKPiAtCj4gICAJZmx1c2hfd3JpdGVfZG9tYWluKG9iaiwgfkk5MTVfR0VNX0RPTUFJTl9D UFUpOwo+ICAgCj4gICAJLyogRmx1c2ggdGhlIENQVSBjYWNoZSBpZiBpdCdzIHN0aWxsIGludmFs aWQuICovCj4gQEAgLTM4OTksMTUgKzM5MTcsMTMgQEAgaTkxNV9nZW1fb2JqZWN0X3NldF90b19j cHVfZG9tYWluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIGJvb2wgd3JpdGUpCj4g ICAJLyogSXQgc2hvdWxkIG5vdyBiZSBvdXQgb2YgYW55IG90aGVyIHdyaXRlIGRvbWFpbnMsIGFu ZCB3ZSBjYW4gdXBkYXRlCj4gICAJICogdGhlIGRvbWFpbiB2YWx1ZXMgZm9yIG91ciBjaGFuZ2Vz Lgo+ICAgCSAqLwo+IC0JR0VNX0JVR19PTigob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAmIH5JOTE1 X0dFTV9ET01BSU5fQ1BVKSAhPSAwKTsKPiArCUdFTV9CVUdfT04ob2JqLT5iYXNlLndyaXRlX2Rv bWFpbiAmIH5JOTE1X0dFTV9ET01BSU5fQ1BVKTsKPiAgIAo+ICAgCS8qIElmIHdlJ3JlIHdyaXRp bmcgdGhyb3VnaCB0aGUgQ1BVLCB0aGVuIHRoZSBHUFUgcmVhZCBkb21haW5zIHdpbGwKPiAgIAkg KiBuZWVkIHRvIGJlIGludmFsaWRhdGVkIGF0IG5leHQgdXNlLgo+ICAgCSAqLwo+IC0JaWYgKHdy aXRlKSB7Cj4gLQkJb2JqLT5iYXNlLnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7 Cj4gLQkJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7Cj4gLQl9 Cj4gKwlpZiAod3JpdGUpCj4gKwkJX19zdGFydF9jcHVfd3JpdGUob2JqKTsKPiAgIAo+ICAgCXJl dHVybiAwOwo+ICAgfQo+IEBAIC00MzI4LDYgKzQzNDQsOCBAQCBpOTE1X2dlbV9vYmplY3RfY3Jl YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTY0IHNpemUpCj4gICAJfSBl bHNlCj4gICAJCW9iai0+Y2FjaGVfbGV2ZWwgPSBJOTE1X0NBQ0hFX05PTkU7Cj4gICAKPiArCW9i ai0+Y2FjaGVfZGlydHkgPSAhaTkxNV9nZW1fb2JqZWN0X2lzX2NvaGVyZW50KG9iaik7CgpDb3Vs ZCB0aGlzLCBoZXJlIGFuZCBlbHNld2hlcmUsIHRvZ2V0aGVyIHdpdGggc2V0dGluZyBvZiByZWFk IGFuZCB3cml0ZSAKY3B1IGRvbWFpbnMsIGJlIGNvbnNvbGlkYXRlZCB0byBpOTE1X2dlbV9vYmpl Y3RfaW5pdD8KCj4gKwo+ICAgCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9jcmVhdGUob2JqKTsKPiAg IAo+ICAgCXJldHVybiBvYmo7Cj4gQEAgLTQ5OTQsMTAgKzUwMTIsOCBAQCBpbnQgaTkxNV9nZW1f ZnJlZXplX2xhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAgCj4gICAJ bXV0ZXhfbG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCWZvciAocCA9IHBo YXNlczsgKnA7IHArKykgewo+IC0JCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCAqcCwgZ2xvYmFs X2xpbmspIHsKPiAtCQkJb2JqLT5iYXNlLnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9D UFU7Cj4gLQkJCW9iai0+YmFzZS53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fQ1BVOwo+ IC0JCX0KPiArCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgKnAsIGdsb2JhbF9saW5rKQo+ICsJ CQlfX3N0YXJ0X2NwdV93cml0ZShvYmopOwo+ICAgCX0KPiAgIAltdXRleF91bmxvY2soJmRldl9w cml2LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9jbGZsdXNoLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9jbGZsdXNoLmMKPiBpbmRleCBmZmFjN2ExZjBjYWYuLjE3YjIwN2U5NjNjMiAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jbGZsdXNoLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jbGZsdXNoLmMKPiBAQCAtNzEsOCArNzEsNiBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IGRtYV9mZW5jZV9vcHMgaTkxNV9jbGZsdXNoX29wcyA9IHsKPiAg IHN0YXRpYyB2b2lkIF9faTkxNV9kb19jbGZsdXNoKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmopCj4gICB7Cj4gICAJZHJtX2NsZmx1c2hfc2cob2JqLT5tbS5wYWdlcyk7Cj4gLQlvYmot PmNhY2hlX2RpcnR5ID0gZmFsc2U7Cj4gLQo+ICAgCWludGVsX2ZiX29ial9mbHVzaChvYmosIE9S SUdJTl9DUFUpOwo+ICAgfQo+ICAgCj4gQEAgLTgxLDkgKzc5LDYgQEAgc3RhdGljIHZvaWQgaTkx NV9jbGZsdXNoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICAgCXN0cnVjdCBjbGZs dXNoICpjbGZsdXNoID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqY2xmbHVzaCksIHdvcmsp Owo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBjbGZsdXNoLT5vYmo7Cj4g ICAKPiAtCWlmICghb2JqLT5jYWNoZV9kaXJ0eSkKPiAtCQlnb3RvIG91dDsKPiAtCj4gICAJaWYg KGk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKSkgewo+ICAgCQlEUk1fRVJST1IoIkZhaWxl ZCB0byBhY3F1aXJlIG9iai0+cGFnZXMgZm9yIGNsZmx1c2hpbmdcbiIpOwo+ICAgCQlnb3RvIG91 dDsKPiBAQCAtMTMxLDEwICsxMjYsMTAgQEAgdm9pZCBpOTE1X2dlbV9jbGZsdXNoX29iamVjdChz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCSAqIGFueXRoaW5nIG5vdCBiYWNr ZWQgYnkgcGh5c2ljYWwgbWVtb3J5IHdlIGNvbnNpZGVyIHRvIGJlIGFsd2F5cwo+ICAgCSAqIGNv aGVyZW50IGFuZCBub3QgbmVlZCBjbGZsdXNoaW5nLgo+ICAgCSAqLwo+IC0JaWYgKCFpOTE1X2dl bV9vYmplY3RfaGFzX3N0cnVjdF9wYWdlKG9iaikpCj4gKwlpZiAoIWk5MTVfZ2VtX29iamVjdF9o YXNfc3RydWN0X3BhZ2Uob2JqKSkgewo+ICsJCW9iai0+Y2FjaGVfZGlydHkgPSBmYWxzZTsKPiAg IAkJcmV0dXJuOwo+IC0KPiAtCW9iai0+Y2FjaGVfZGlydHkgPSB0cnVlOwo+ICsJfQo+ICAgCj4g ICAJLyogSWYgdGhlIEdQVSBpcyBzbm9vcGluZyB0aGUgY29udGVudHMgb2YgdGhlIENQVSBjYWNo ZSwKPiAgIAkgKiB3ZSBkbyBub3QgbmVlZCB0byBtYW51YWxseSBjbGVhciB0aGUgQ1BVIGNhY2hl IGxpbmVzLiAgSG93ZXZlciwKPiBAQCAtMTUzLDYgKzE0OCw4IEBAIHZvaWQgaTkxNV9nZW1fY2xm bHVzaF9vYmplY3Qoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAlpZiAoIShm bGFncyAmIEk5MTVfQ0xGTFVTSF9TWU5DKSkKPiAgIAkJY2xmbHVzaCA9IGttYWxsb2Moc2l6ZW9m KCpjbGZsdXNoKSwgR0ZQX0tFUk5FTCk7Cj4gICAJaWYgKGNsZmx1c2gpIHsKPiArCQlHRU1fQlVH X09OKCFvYmotPmNhY2hlX2RpcnR5KTsKPiArCj4gICAJCWRtYV9mZW5jZV9pbml0KCZjbGZsdXNo LT5kbWEsCj4gICAJCQkgICAgICAgJmk5MTVfY2xmbHVzaF9vcHMsCj4gICAJCQkgICAgICAgJmNs Zmx1c2hfbG9jaywKPiBAQCAtMTgwLDQgKzE3Nyw2IEBAIHZvaWQgaTkxNV9nZW1fY2xmbHVzaF9v YmplY3Qoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAl9IGVsc2Ugewo+ICAg CQlHRU1fQlVHX09OKG9iai0+YmFzZS53cml0ZV9kb21haW4gIT0gSTkxNV9HRU1fRE9NQUlOX0NQ VSk7Cj4gICAJfQo+ICsKPiArCW9iai0+Y2FjaGVfZGlydHkgPSBmYWxzZTsKPiAgIH0KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4gaW5kZXggOTY3MDUxNzFl Mzk3Li4yYTlhZWQ1NjQwZTIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fZXhlY2J1ZmZlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f ZXhlY2J1ZmZlci5jCj4gQEAgLTMwOSw3ICszMDksNyBAQCBzdGF0aWMgaW5saW5lIGludCB1c2Vf Y3B1X3JlbG9jKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICAJCXJldHVybiBE QkdfVVNFX0NQVV9SRUxPQyA+IDA7Cj4gICAKPiAgIAlyZXR1cm4gKEhBU19MTEModG9faTkxNShv YmotPmJhc2UuZGV2KSkgfHwKPiAtCQlvYmotPmJhc2Uud3JpdGVfZG9tYWluID09IEk5MTVfR0VN X0RPTUFJTl9DUFUgfHwKPiArCQlvYmotPmNhY2hlX2RpcnR5IHx8Cj4gICAJCW9iai0+Y2FjaGVf bGV2ZWwgIT0gSTkxNV9DQUNIRV9OT05FKTsKPiAgIH0KPiAgIAo+IEBAIC0xMTEwLDEwICsxMTEw LDggQEAgZWJfbW92ZV90b19ncHUoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCj4gICAJCWlm ICh2bWEtPmV4ZWNfZW50cnktPmZsYWdzICYgRVhFQ19PQkpFQ1RfQVNZTkMpCj4gICAJCQljb250 aW51ZTsKPiAgIAo+IC0JCWlmIChvYmotPmJhc2Uud3JpdGVfZG9tYWluICYgSTkxNV9HRU1fRE9N QUlOX0NQVSkgewo+ICsJCWlmIChvYmotPmNhY2hlX2RpcnR5KQo+ICAgCQkJaTkxNV9nZW1fY2xm bHVzaF9vYmplY3Qob2JqLCAwKTsKPiAtCQkJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IDA7Cj4g LQkJfQo+ICAgCj4gICAJCXJldCA9IGk5MTVfZ2VtX3JlcXVlc3RfYXdhaXRfb2JqZWN0Cj4gICAJ CQkoZWItPnJlcXVlc3QsIG9iaiwgb2JqLT5iYXNlLnBlbmRpbmdfd3JpdGVfZG9tYWluKTsKPiBA QCAtMTI0OCwxMiArMTI0Niw2IEBAIHN0YXRpYyBpbnQgZWJfc2VsZWN0X2NvbnRleHQoc3RydWN0 IGk5MTVfZXhlY2J1ZmZlciAqZWIpCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtc3RhdGlj IGJvb2wgZ3B1X3dyaXRlX25lZWRzX2NsZmx1c2goc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaikKPiAtewo+IC0JcmV0dXJuICEob2JqLT5jYWNoZV9sZXZlbCA9PSBJOTE1X0NBQ0hFX05P TkUgfHwKPiAtCQkgb2JqLT5jYWNoZV9sZXZlbCA9PSBJOTE1X0NBQ0hFX1dUKTsKPiAtfQo+IC0K PiAgIHZvaWQgaTkxNV92bWFfbW92ZV90b19hY3RpdmUoc3RydWN0IGk5MTVfdm1hICp2bWEsCj4g ICAJCQkgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAo+ICAgCQkJICAgICB1 bnNpZ25lZCBpbnQgZmxhZ3MpCj4gQEAgLTEyNzcsMTUgKzEyNjksMTYgQEAgdm9pZCBpOTE1X3Zt YV9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiAgIAlpOTE1X2dlbV9hY3Rp dmVfc2V0KCZ2bWEtPmxhc3RfcmVhZFtpZHhdLCByZXEpOwo+ICAgCWxpc3RfbW92ZV90YWlsKCZ2 bWEtPnZtX2xpbmssICZ2bWEtPnZtLT5hY3RpdmVfbGlzdCk7Cj4gICAKPiArCW9iai0+YmFzZS53 cml0ZV9kb21haW4gPSAwOwo+ICAgCWlmIChmbGFncyAmIEVYRUNfT0JKRUNUX1dSSVRFKSB7Cj4g KwkJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Cj4gKwo+ ICAgCQlpZiAoaW50ZWxfZmJfb2JqX2ludmFsaWRhdGUob2JqLCBPUklHSU5fQ1MpKQo+ICAgCQkJ aTkxNV9nZW1fYWN0aXZlX3NldCgmb2JqLT5mcm9udGJ1ZmZlcl93cml0ZSwgcmVxKTsKPiAgIAo+ IC0JCS8qIHVwZGF0ZSBmb3IgdGhlIGltcGxpY2l0IGZsdXNoIGFmdGVyIGEgYmF0Y2ggKi8KPiAt CQlvYmotPmJhc2Uud3JpdGVfZG9tYWluICY9IH5JOTE1X0dFTV9HUFVfRE9NQUlOUzsKPiAtCQlp ZiAoIW9iai0+Y2FjaGVfZGlydHkgJiYgZ3B1X3dyaXRlX25lZWRzX2NsZmx1c2gob2JqKSkKPiAt CQkJb2JqLT5jYWNoZV9kaXJ0eSA9IHRydWU7Cj4gKwkJb2JqLT5iYXNlLnJlYWRfZG9tYWlucyA9 IDA7Cj4gICAJfQo+ICsJb2JqLT5iYXNlLnJlYWRfZG9tYWlucyB8PSBJOTE1X0dFTV9HUFVfRE9N QUlOUzsKPiAgIAo+ICAgCWlmIChmbGFncyAmIEVYRUNfT0JKRUNUX05FRURTX0ZFTkNFKQo+ICAg CQlpOTE1X2dlbV9hY3RpdmVfc2V0KCZ2bWEtPmxhc3RfZmVuY2UsIHJlcSk7Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2ludGVybmFsLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9pbnRlcm5hbC5jCj4gaW5kZXggZmM5NTBhYmJlNDAwLi41OGU5 M2U4N2Q1NzMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1faW50 ZXJuYWwuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2ludGVybmFsLmMK PiBAQCAtMTg4LDkgKzE4OCwxMCBAQCBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2ludGVybmFsKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICAgCWRybV9nZW1fcHJpdmF0ZV9vYmplY3Rf aW5pdCgmaTkxNS0+ZHJtLCAmb2JqLT5iYXNlLCBzaXplKTsKPiAgIAlpOTE1X2dlbV9vYmplY3Rf aW5pdChvYmosICZpOTE1X2dlbV9vYmplY3RfaW50ZXJuYWxfb3BzKTsKPiAgIAo+IC0Jb2JqLT5i YXNlLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7Cj4gICAJb2JqLT5iYXNlLnJl YWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7Cj4gKwlvYmotPmJhc2Uud3JpdGVfZG9t YWluID0gSTkxNV9HRU1fRE9NQUlOX0NQVTsKPiAgIAlvYmotPmNhY2hlX2xldmVsID0gSEFTX0xM QyhpOTE1KSA/IEk5MTVfQ0FDSEVfTExDIDogSTkxNV9DQUNIRV9OT05FOwo+ICsJb2JqLT5jYWNo ZV9kaXJ0eSA9ICFpOTE1X2dlbV9vYmplY3RfaXNfY29oZXJlbnQob2JqKTsKPiAgIAo+ICAgCXJl dHVybiBvYmo7Cj4gICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX3VzZXJwdHIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYwo+ IGluZGV4IDFhMGNlMWRjNjhmNS4uMzQ0NjFlMTkyOGJjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX3VzZXJwdHIuYwo+IEBAIC04MDIsOSArODAyLDEwIEBAIGk5MTVfZ2VtX3Vz ZXJwdHJfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRy bV9maWxlICpmaWxlCj4gICAKPiAgIAlkcm1fZ2VtX3ByaXZhdGVfb2JqZWN0X2luaXQoZGV2LCAm b2JqLT5iYXNlLCBhcmdzLT51c2VyX3NpemUpOwo+ICAgCWk5MTVfZ2VtX29iamVjdF9pbml0KG9i aiwgJmk5MTVfZ2VtX3VzZXJwdHJfb3BzKTsKPiAtCW9iai0+Y2FjaGVfbGV2ZWwgPSBJOTE1X0NB Q0hFX0xMQzsKPiAtCW9iai0+YmFzZS53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fQ1BV Owo+ICAgCW9iai0+YmFzZS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fQ1BVOwo+ICsJ b2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7Cj4gKwlvYmotPmNh Y2hlX2xldmVsID0gSTkxNV9DQUNIRV9MTEM7Cj4gKwlvYmotPmNhY2hlX2RpcnR5ID0gIWk5MTVf Z2VtX29iamVjdF9pc19jb2hlcmVudChvYmopOwo+ICAgCj4gICAJb2JqLT51c2VycHRyLnB0ciA9 IGFyZ3MtPnVzZXJfcHRyOwo+ICAgCW9iai0+dXNlcnB0ci5yZWFkX29ubHkgPSAhIShhcmdzLT5m bGFncyAmIEk5MTVfVVNFUlBUUl9SRUFEX09OTFkpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9zZWxmdGVzdHMvaHVnZV9nZW1fb2JqZWN0LmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvaHVnZV9nZW1fb2JqZWN0LmMKPiBpbmRleCA0ZTY4MWZjMTNiZTQuLjBj YTg2N2E4NzdiNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv aHVnZV9nZW1fb2JqZWN0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv aHVnZV9nZW1fb2JqZWN0LmMKPiBAQCAtMTI2LDkgKzEyNiwxMCBAQCBodWdlX2dlbV9vYmplY3Qo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gICAJZHJtX2dlbV9wcml2YXRlX29iamVj dF9pbml0KCZpOTE1LT5kcm0sICZvYmotPmJhc2UsIGRtYV9zaXplKTsKPiAgIAlpOTE1X2dlbV9v YmplY3RfaW5pdChvYmosICZodWdlX29wcyk7Cj4gICAKPiAtCW9iai0+YmFzZS53cml0ZV9kb21h aW4gPSBJOTE1X0dFTV9ET01BSU5fQ1BVOwo+ICAgCW9iai0+YmFzZS5yZWFkX2RvbWFpbnMgPSBJ OTE1X0dFTV9ET01BSU5fQ1BVOwo+ICsJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VN X0RPTUFJTl9DUFU7Cj4gICAJb2JqLT5jYWNoZV9sZXZlbCA9IEhBU19MTEMoaTkxNSkgPyBJOTE1 X0NBQ0hFX0xMQyA6IEk5MTVfQ0FDSEVfTk9ORTsKPiArCW9iai0+Y2FjaGVfZGlydHkgPSAhaTkx NV9nZW1fb2JqZWN0X2lzX2NvaGVyZW50KG9iaik7Cj4gICAJb2JqLT5zY3JhdGNoID0gcGh5c19z aXplOwo+ICAgCj4gICAJcmV0dXJuIG9iajsKPiAKClJlZ2FyZHMsCgpUdnJ0a28KX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==