From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniele Ceraolo Spurio Subject: Re: [PATCH 5/6] drm/i915: dynamically allocate forcewake domains Date: Tue, 18 Jun 2019 16:06:39 -0700 Message-ID: <2f8d35a3-7c47-9a02-7bbb-5b4d72ccfbe1@intel.com> References: <20190617180935.505-1-daniele.ceraolospurio@intel.com> <20190617180935.505-6-daniele.ceraolospurio@intel.com> <550f7eb9-7021-4dd2-2f8f-90f95bcec715@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id B5DE06E26C for ; Tue, 18 Jun 2019 23:06:52 +0000 (UTC) In-Reply-To: <550f7eb9-7021-4dd2-2f8f-90f95bcec715@linux.intel.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: Tvrtko Ursulin , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org CgpPbiA2LzE4LzE5IDI6MjMgQU0sIFR2cnRrbyBVcnN1bGluIHdyb3RlOgo+IAo+IE9uIDE3LzA2 LzIwMTkgMTk6MDksIERhbmllbGUgQ2VyYW9sbyBTcHVyaW8gd3JvdGU6Cj4+IFdlJ2QgbGlrZSB0 byBpbnRyb2R1Y2UgYSBkaXNwbGF5IHVuY29yZSB3aXRoIG5vIGZvcmNld2FrZSBkb21haW5zLCBz bwo+PiBsZXQncyBhdm9pZCB3YXN0aW5nIG1lbW9yeSBhbmQgYmUgcmVhZHkgdG8gYWxsb2NhdGUg b25seSB3aGF0IHdlIG5lZWQuCj4+IEV2ZW4gd2l0aG91dCBtdWx0aXBsZSB1bmNvcmUsIHdlIHN0 aWxsIGRvbid0IG5lZWQgYWxsIHRoZSBkb21haW5zIG9uIGFsbAo+PiBnZW5zLgo+IAo+IExvb2tz IGdvb2QgaW4gcHJpbmNpcGxlLCBvbmx5IGEgZmV3IGNvbnZlcnNhdGlvbiBwb2ludHMgYmVsb3cu Cj4gCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IERhbmllbGUgQ2VyYW9sbyBTcHVyaW8gPGRhbmllbGUu Y2VyYW9sb3NwdXJpb0BpbnRlbC5jb20+Cj4+IC0tLQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF91bmNvcmUuYyB8IDE1NSArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCj4+IMKg IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VuY29yZS5oIHzCoCAxMyArLS0KPj4gwqAgMiBm aWxlcyBjaGFuZ2VkLCAxMDIgaW5zZXJ0aW9ucygrKSwgNjYgZGVsZXRpb25zKC0pCj4+Cj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91bmNvcmUuYyAKPj4gYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91bmNvcmUuYwo+PiBpbmRleCBjMGY1NTY3ZWUwOTYuLjdm MzExODI3YzNlZiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5j b3JlLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMKPj4gQEAg LTM0NCw3ICszNDQsNyBAQCBpbnRlbF91bmNvcmVfZndfcmVsZWFzZV90aW1lcihzdHJ1Y3QgaHJ0 aW1lciAqdGltZXIpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfdW5jb3JlX2Zv cmNld2FrZV9kb21haW4gKmRvbWFpbiA9Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250 YWluZXJfb2YodGltZXIsIHN0cnVjdCBpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2RvbWFpbiwgCj4+ IHRpbWVyKTsKPj4gLcKgwqDCoCBzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBmb3JjZXdh a2VfZG9tYWluX3RvX3VuY29yZShkb21haW4pOwo+PiArwqDCoMKgIHN0cnVjdCBpbnRlbF91bmNv cmUgKnVuY29yZSA9IGRvbWFpbi0+dW5jb3JlOwo+PiDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcg aXJxZmxhZ3M7Cj4+IMKgwqDCoMKgwqAgYXNzZXJ0X3JwbV9kZXZpY2Vfbm90X3N1c3BlbmRlZCh1 bmNvcmUtPnJwbSk7Cj4+IEBAIC0xMjkxLDIzICsxMjkxLDIzIEBAIGRvIHsgXAo+PiDCoMKgwqDC oMKgICh1bmNvcmUpLT5mdW5jcy5yZWFkX2Z3X2RvbWFpbnMgPSB4IyNfcmVnX3JlYWRfZndfZG9t YWluczsgXAo+PiDCoCB9IHdoaWxlICgwKQo+PiAtc3RhdGljIHZvaWQgZndfZG9tYWluX2luaXQo c3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlLAo+PiArc3RhdGljIGludCBmd19kb21haW5faW5p dChzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGVudW0gZm9yY2V3YWtlX2RvbWFpbl9pZCBkb21haW5faWQsCj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGk5MTVfcmVnX3QgcmVnX3NldCwKPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaTkxNV9yZWdfdCByZWdfYWNrKQo+PiDCoCB7Cj4+IMKg wqDCoMKgwqAgc3RydWN0IGludGVsX3VuY29yZV9mb3JjZXdha2VfZG9tYWluICpkOwo+PiAtwqDC oMKgIGlmIChXQVJOX09OKGRvbWFpbl9pZCA+PSBGV19ET01BSU5fSURfQ09VTlQpKQo+PiAtwqDC oMKgwqDCoMKgwqAgcmV0dXJuOwo+PiAtCj4+IC3CoMKgwqAgZCA9ICZ1bmNvcmUtPmZ3X2RvbWFp bltkb21haW5faWRdOwo+PiArwqDCoMKgIEdFTV9CVUdfT04oZG9tYWluX2lkID49IEZXX0RPTUFJ Tl9JRF9DT1VOVCk7Cj4+IC3CoMKgwqAgV0FSTl9PTihkLT53YWtlX2NvdW50KTsKPiAKPiBJIHdv bmRlciB3aGF0IHdhcyB0aGlzIGZvci4KPiAKPiBEbyB5b3Ugd2FudCB0byBhZGQgc29tZSBwcm90 ZWN0aW9uIGFnYWluc3QgZG91YmxlIGluaXQgb2YgdGhlIHNhbWUgZG9tYWluPwo+IAoKanVzdCBh IEdFTV9CVUdfT04gbWF5YmU/IEl0IHNob3VsZG4ndCByZWFsbHkgZXZlciBoYXBwZW4gdW5sZXNz IHdlJ3JlIAptb3Zpbmcgc29tZXRoaW5nIGFyb3VuZC4KCj4+ICvCoMKgwqAgZCA9IGt6YWxsb2Mo c2l6ZW9mKCpkKSwgR0ZQX0tFUk5FTCk7Cj4+ICvCoMKgwqAgaWYgKCFkKQo+PiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+IMKgwqDCoMKgwqAgV0FSTl9PTighaTkxNV9tbWlvX3Jl Z192YWxpZChyZWdfc2V0KSk7Cj4+IMKgwqDCoMKgwqAgV0FSTl9PTighaTkxNV9tbWlvX3JlZ192 YWxpZChyZWdfYWNrKSk7Cj4+ICvCoMKgwqAgZC0+dW5jb3JlID0gdW5jb3JlOwo+PiDCoMKgwqDC oMKgIGQtPndha2VfY291bnQgPSAwOwo+PiDCoMKgwqDCoMKgIGQtPnJlZ19zZXQgPSB1bmNvcmUt PnJlZ3MgKyBpOTE1X21taW9fcmVnX29mZnNldChyZWdfc2V0KTsKPj4gwqDCoMKgwqDCoCBkLT5y ZWdfYWNrID0gdW5jb3JlLT5yZWdzICsgaTkxNV9tbWlvX3JlZ19vZmZzZXQocmVnX2Fjayk7Cj4+ IEBAIC0xMzI0LDcgKzEzMjQsNiBAQCBzdGF0aWMgdm9pZCBmd19kb21haW5faW5pdChzdHJ1Y3Qg aW50ZWxfdW5jb3JlIAo+PiAqdW5jb3JlLAo+PiDCoMKgwqDCoMKgIEJVSUxEX0JVR19PTihGT1JD RVdBS0VfTUVESUFfVkVCT1gwICE9ICgxIDw8IAo+PiBGV19ET01BSU5fSURfTUVESUFfVkVCT1gw KSk7Cj4+IMKgwqDCoMKgwqAgQlVJTERfQlVHX09OKEZPUkNFV0FLRV9NRURJQV9WRUJPWDEgIT0g KDEgPDwgCj4+IEZXX0RPTUFJTl9JRF9NRURJQV9WRUJPWDEpKTsKPj4gLQo+PiDCoMKgwqDCoMKg IGQtPm1hc2sgPSBCSVQoZG9tYWluX2lkKTsKPj4gwqDCoMKgwqDCoCBocnRpbWVyX2luaXQoJmQt PnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwo+PiBAQCAtMTMzMyw2 ICsxMzMyLDEwIEBAIHN0YXRpYyB2b2lkIGZ3X2RvbWFpbl9pbml0KHN0cnVjdCBpbnRlbF91bmNv cmUgCj4+ICp1bmNvcmUsCj4+IMKgwqDCoMKgwqAgdW5jb3JlLT5md19kb21haW5zIHw9IEJJVChk b21haW5faWQpOwo+PiDCoMKgwqDCoMKgIGZ3X2RvbWFpbl9yZXNldChkKTsKPj4gKwo+PiArwqDC oMKgIHVuY29yZS0+ZndfZG9tYWluW2RvbWFpbl9pZF0gPSBkOwo+PiArCj4+ICvCoMKgwqAgcmV0 dXJuIDA7Cj4+IMKgIH0KPj4gwqAgc3RhdGljIHZvaWQgZndfZG9tYWluX2Zpbmkoc3RydWN0IGlu dGVsX3VuY29yZSAqdW5jb3JlLAo+PiBAQCAtMTM0MCw3NyArMTM0Myw5MiBAQCBzdGF0aWMgdm9p ZCBmd19kb21haW5fZmluaShzdHJ1Y3QgaW50ZWxfdW5jb3JlIAo+PiAqdW5jb3JlLAo+PiDCoCB7 Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGludGVsX3VuY29yZV9mb3JjZXdha2VfZG9tYWluICpkOwo+ PiAtwqDCoMKgIGlmIChXQVJOX09OKGRvbWFpbl9pZCA+PSBGV19ET01BSU5fSURfQ09VTlQpKQo+ PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArwqDCoMKgIEdFTV9CVUdfT04oZG9tYWluX2lk ID49IEZXX0RPTUFJTl9JRF9DT1VOVCk7Cj4+IC3CoMKgwqAgZCA9ICZ1bmNvcmUtPmZ3X2RvbWFp bltkb21haW5faWRdOwo+PiArwqDCoMKgIGQgPSBmZXRjaF9hbmRfemVybygmdW5jb3JlLT5md19k b21haW5bZG9tYWluX2lkXSk7Cj4gCj4gTWF5YmUgZWFybHkgaWYgIWQgaGVyZSBhbmQgZnVuY3Rp b24gZmxvdyBqdXN0IGNhcnJpZXMgb24/Cj4gCgp3aWxsIGRvLgoKPj4gK8KgwqDCoCB1bmNvcmUt PmZ3X2RvbWFpbnMgJj0gfkJJVChkb21haW5faWQpOwo+PiAtwqDCoMKgIFdBUk5fT04oZC0+d2Fr ZV9jb3VudCk7Cj4+IC3CoMKgwqAgV0FSTl9PTihocnRpbWVyX2NhbmNlbCgmZC0+dGltZXIpKTsK Pj4gLcKgwqDCoCBtZW1zZXQoZCwgMCwgc2l6ZW9mKCpkKSk7Cj4+ICvCoMKgwqAgaWYgKGQpIHsK Pj4gK8KgwqDCoMKgwqDCoMKgIFdBUk5fT04oZC0+d2FrZV9jb3VudCk7Cj4+ICvCoMKgwqDCoMKg wqDCoCBXQVJOX09OKGhydGltZXJfY2FuY2VsKCZkLT50aW1lcikpOwo+PiArwqDCoMKgwqDCoMKg wqAga2ZyZWUoZCk7Cj4+ICvCoMKgwqAgfQo+PiArfQo+PiAtwqDCoMKgIHVuY29yZS0+ZndfZG9t YWlucyAmPSB+QklUKGRvbWFpbl9pZCk7Cj4+ICtzdGF0aWMgdm9pZCBpbnRlbF91bmNvcmVfZndf ZG9tYWluc19maW5pKHN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSkKPj4gK3sKPj4gK8KgwqDC oCBzdHJ1Y3QgaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9kb21haW4gKmQ7Cj4+ICvCoMKgwqAgaW50 IHRtcDsKPj4gKwo+PiArwqDCoMKgIGZvcl9lYWNoX2Z3X2RvbWFpbihkLCB1bmNvcmUsIHRtcCkK Pj4gK8KgwqDCoMKgwqDCoMKgIGZ3X2RvbWFpbl9maW5pKHVuY29yZSwgZC0+aWQpOwo+PiDCoCB9 Cj4+IC1zdGF0aWMgdm9pZCBpbnRlbF91bmNvcmVfZndfZG9tYWluc19pbml0KHN0cnVjdCBpbnRl bF91bmNvcmUgKnVuY29yZSkKPj4gK3N0YXRpYyBpbnQgaW50ZWxfdW5jb3JlX2Z3X2RvbWFpbnNf aW5pdChzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHVuY29yZS0+aTkxNTsKPj4gK8KgwqDCoCBp bnQgcmV0Owo+PiDCoMKgwqDCoMKgIEdFTV9CVUdfT04oIWludGVsX3VuY29yZV9oYXNfZm9yY2V3 YWtlKHVuY29yZSkpOwo+PiArI2RlZmluZSBfX2Z3X2RvbWFpbl9pbml0KGlkX18sIHNldF9fLCBh Y2tfXykgXAo+PiArwqDCoMKgIHJldCA9IGZ3X2RvbWFpbl9pbml0KHVuY29yZSwgKGlkX18pLCAo c2V0X18pLCAoYWNrX18pKTsgXAo+PiArwqDCoMKgIGlmIChyZXQpIFwKPj4gK8KgwqDCoMKgwqDC oMKgIGdvdG8gb3V0X2NsZWFuOwo+IAo+IEhpZGRlbiBjb250cm9sIGZsb3cgaXMgc2xpZ2h0bHkg b2JqZWN0aW9uYWJsZSBidXQgSSBkb24ndCBvZmZlciBhbnkgbmljZSAKPiBhbHRlcm5hdGl2ZXMg c28gSSBndWVzcyB3aWxsIGhhdmUgdG8gcGFzcy4gT3IgbWF5YmUgYWNjdW11bGF0ZSB0aGUgZXJy b3IgCj4gKGVyciB8PSBmd19kb21haW5faW5pdCguLikpIGFzIHlvdSBnbyBhbmQgdGhlbiBjbGVh bnVwIGF0IHRoZSBlbmQgaWYgYW55IAo+IGZhaWxlZD8KCkknZCBwcmVmZXIgdG8gYXZvaWQgYWNj dW11bGF0aW5nIHRoZSBlcnJvciBzaW5jZSBpdCdkIGp1c3QgY2F1c2UgdXMgdG8gCmhhdmluZyB0 byB1bnJvbGwgbW9yZSBkb21haW5zIHdoZW4gd2UgY291bGQndmUgc3RvcHBlZCBlYXJseS4KCj4g Cj4gT24gdGhlIG90aGVyIGhhbmQgdGhlIGlkZWEgc2xpZ2h0bHkgY29uZmxpY3RzIHdpdGggbXkg b3RoZXIgc3VnZ2VzdGlvbiAKPiB0byByZW5hbWUgZXhpc3RpbmcgZndfZG9tYWluX2luaXQgdG8g X19md19kb21haW5faW5pdCBhbmQgY2FsbCB0aGUgbWFjcm8gCj4gZndfZG9tYWluX2luaXQgYW5k IGF2b2lkIGFsbCB0aGUgY2h1cm4gYmVsb3cuCj4gCgpJJ2xsIHBpY2sgdGhpcyBzdWdnZXN0aW9u IGFtb25nIHRoZSAyLCB1bmxlc3MgdGhlcmUgaXMgYW5vdGhlciAKc3VnZ2VzdGlvbiBvbiBob3cg dG8gYXZvaWQgdGhlIGhpZGRlbiBnb3RvLgoKPj4gKwo+PiDCoMKgwqDCoMKgIGlmIChJTlRFTF9H RU4oaTkxNSkgPj0gMTEpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGludCBpOwo+PiAtwqDCoMKg wqDCoMKgwqAgdW5jb3JlLT5mdW5jcy5mb3JjZV93YWtlX2dldCA9Cj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGZ3X2RvbWFpbnNfZ2V0X3dpdGhfZmFsbGJhY2s7Cj4+ICvCoMKgwqDCoMKgwqDC oCB1bmNvcmUtPmZ1bmNzLmZvcmNlX3dha2VfZ2V0ID0gZndfZG9tYWluc19nZXRfd2l0aF9mYWxs YmFjazsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHVuY29yZS0+ZnVuY3MuZm9yY2Vfd2FrZV9wdXQg PSBmd19kb21haW5zX3B1dDsKPj4gLcKgwqDCoMKgwqDCoMKgIGZ3X2RvbWFpbl9pbml0KHVuY29y ZSwgRldfRE9NQUlOX0lEX1JFTkRFUiwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBGT1JDRVdBS0VfUkVOREVSX0dFTjksCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgRk9SQ0VXQUtFX0FDS19SRU5ERVJfR0VOOSk7Cj4+IC3CoMKgwqDCoMKg wqDCoCBmd19kb21haW5faW5pdCh1bmNvcmUsIEZXX0RPTUFJTl9JRF9CTElUVEVSLAo+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZPUkNFV0FLRV9CTElUVEVSX0dFTjks Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRk9SQ0VXQUtFX0FDS19C TElUVEVSX0dFTjkpOwo+PiArwqDCoMKgwqDCoMKgwqAgX19md19kb21haW5faW5pdChGV19ET01B SU5fSURfUkVOREVSLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRk9SQ0VX QUtFX1JFTkRFUl9HRU45LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRk9S Q0VXQUtFX0FDS19SRU5ERVJfR0VOOSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBfX2Z3X2RvbWFpbl9p bml0KEZXX0RPTUFJTl9JRF9CTElUVEVSLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgRk9SQ0VXQUtFX0JMSVRURVJfR0VOOSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIEZPUkNFV0FLRV9BQ0tfQkxJVFRFUl9HRU45KTsKPj4gKwo+PiDCoMKgwqDCoMKg wqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IEk5MTVfTUFYX1ZDUzsgaSsrKSB7Cj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlmICghSEFTX0VOR0lORShpOTE1LCBfVkNTKGkpKSkKPj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZndfZG9tYWluX2luaXQodW5jb3JlLCBGV19ET01BSU5fSURfTUVESUFfVkRC T1gwICsgaSwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IEZPUkNFV0FLRV9NRURJQV9WREJPWF9HRU4xMShpKSwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZPUkNFV0FLRV9BQ0tfTUVESUFfVkRCT1hfR0VOMTEo aSkpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z3X2RvbWFpbl9pbml0KEZXX0RPTUFJ Tl9JRF9NRURJQV9WREJPWDAgKyBpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBGT1JDRVdBS0VfTUVESUFfVkRCT1hfR0VOMTEoaSksCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZPUkNFV0FLRV9BQ0tfTUVESUFfVkRCT1hf R0VOMTEoaSkpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAg Zm9yIChpID0gMDsgaSA8IEk5MTVfTUFYX1ZFQ1M7IGkrKykgewo+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAoIUhBU19FTkdJTkUoaTkxNSwgX1ZFQ1MoaSkpKQo+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBmd19kb21haW5faW5pdCh1bmNvcmUsIEZXX0RPTUFJTl9JRF9NRURJQV9WRUJPWDAgKyBp LAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRk9SQ0VX QUtFX01FRElBX1ZFQk9YX0dFTjExKGkpLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgRk9SQ0VXQUtFX0FDS19NRURJQV9WRUJPWF9HRU4xMShpKSk7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZndfZG9tYWluX2luaXQoRldfRE9NQUlOX0lEX01F RElBX1ZFQk9YMCArIGksCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIEZPUkNFV0FLRV9NRURJQV9WRUJPWF9HRU4xMShpKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRk9SQ0VXQUtFX0FDS19NRURJQV9WRUJPWF9HRU4xMShp KSk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqAgfSBlbHNlIGlmIChJU19H RU5fUkFOR0UoaTkxNSwgOSwgMTApKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCB1bmNvcmUtPmZ1bmNz LmZvcmNlX3dha2VfZ2V0ID0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZndfZG9tYWluc19n ZXRfd2l0aF9mYWxsYmFjazsKPj4gK8KgwqDCoMKgwqDCoMKgIHVuY29yZS0+ZnVuY3MuZm9yY2Vf d2FrZV9nZXQgPSBmd19kb21haW5zX2dldF93aXRoX2ZhbGxiYWNrOwo+PiDCoMKgwqDCoMKgwqDC oMKgwqAgdW5jb3JlLT5mdW5jcy5mb3JjZV93YWtlX3B1dCA9IGZ3X2RvbWFpbnNfcHV0Owo+PiAt wqDCoMKgwqDCoMKgwqAgZndfZG9tYWluX2luaXQodW5jb3JlLCBGV19ET01BSU5fSURfUkVOREVS LAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZPUkNFV0FLRV9SRU5E RVJfR0VOOSwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBGT1JDRVdB S0VfQUNLX1JFTkRFUl9HRU45KTsKPj4gLcKgwqDCoMKgwqDCoMKgIGZ3X2RvbWFpbl9pbml0KHVu Y29yZSwgRldfRE9NQUlOX0lEX0JMSVRURVIsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgRk9SQ0VXQUtFX0JMSVRURVJfR0VOOSwKPj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBGT1JDRVdBS0VfQUNLX0JMSVRURVJfR0VOOSk7Cj4+IC3CoMKg wqDCoMKgwqDCoCBmd19kb21haW5faW5pdCh1bmNvcmUsIEZXX0RPTUFJTl9JRF9NRURJQSwKPj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBGT1JDRVdBS0VfTUVESUFfR0VO OSwgRk9SQ0VXQUtFX0FDS19NRURJQV9HRU45KTsKPj4gK8KgwqDCoMKgwqDCoMKgIF9fZndfZG9t YWluX2luaXQoRldfRE9NQUlOX0lEX1JFTkRFUiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIEZPUkNFV0FLRV9SRU5ERVJfR0VOOSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIEZPUkNFV0FLRV9BQ0tfUkVOREVSX0dFTjkpOwo+PiArwqDCoMKgwqDCoMKg wqAgX19md19kb21haW5faW5pdChGV19ET01BSU5fSURfQkxJVFRFUiwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZPUkNFV0FLRV9CTElUVEVSX0dFTjksCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBGT1JDRVdBS0VfQUNLX0JMSVRURVJfR0VOOSk7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBfX2Z3X2RvbWFpbl9pbml0KEZXX0RPTUFJTl9JRF9NRURJQSwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZPUkNFV0FLRV9NRURJQV9HRU45LAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRk9SQ0VXQUtFX0FDS19NRURJQV9H RU45KTsKPj4gwqDCoMKgwqDCoCB9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkgfHwgSVNf Q0hFUlJZVklFVyhpOTE1KSkgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgdW5jb3JlLT5mdW5jcy5m b3JjZV93YWtlX2dldCA9IGZ3X2RvbWFpbnNfZ2V0Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgdW5j b3JlLT5mdW5jcy5mb3JjZV93YWtlX3B1dCA9IGZ3X2RvbWFpbnNfcHV0Owo+PiAtwqDCoMKgwqDC oMKgwqAgZndfZG9tYWluX2luaXQodW5jb3JlLCBGV19ET01BSU5fSURfUkVOREVSLAo+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZPUkNFV0FLRV9WTFYsIEZPUkNFV0FL RV9BQ0tfVkxWKTsKPj4gLcKgwqDCoMKgwqDCoMKgIGZ3X2RvbWFpbl9pbml0KHVuY29yZSwgRldf RE9NQUlOX0lEX01FRElBLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IEZPUkNFV0FLRV9NRURJQV9WTFYsIEZPUkNFV0FLRV9BQ0tfTUVESUFfVkxWKTsKPj4gK8KgwqDC oMKgwqDCoMKgIF9fZndfZG9tYWluX2luaXQoRldfRE9NQUlOX0lEX1JFTkRFUiwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZPUkNFV0FLRV9WTFYsIEZPUkNFV0FLRV9BQ0tf VkxWKTsKPj4gK8KgwqDCoMKgwqDCoMKgIF9fZndfZG9tYWluX2luaXQoRldfRE9NQUlOX0lEX01F RElBLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRk9SQ0VXQUtFX01FRElB X1ZMViwgRk9SQ0VXQUtFX0FDS19NRURJQV9WTFYpOwo+PiDCoMKgwqDCoMKgIH0gZWxzZSBpZiAo SVNfSEFTV0VMTChpOTE1KSB8fCBJU19CUk9BRFdFTEwoaTkxNSkpIHsKPj4gwqDCoMKgwqDCoMKg wqDCoMKgIHVuY29yZS0+ZnVuY3MuZm9yY2Vfd2FrZV9nZXQgPQo+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBmd19kb21haW5zX2dldF93aXRoX3RocmVhZF9zdGF0dXM7Cj4+IMKgwqDCoMKg wqDCoMKgwqDCoCB1bmNvcmUtPmZ1bmNzLmZvcmNlX3dha2VfcHV0ID0gZndfZG9tYWluc19wdXQ7 Cj4+IC3CoMKgwqDCoMKgwqDCoCBmd19kb21haW5faW5pdCh1bmNvcmUsIEZXX0RPTUFJTl9JRF9S RU5ERVIsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRk9SQ0VXQUtF X01ULCBGT1JDRVdBS0VfQUNLX0hTVyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBfX2Z3X2RvbWFpbl9p bml0KEZXX0RPTUFJTl9JRF9SRU5ERVIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBGT1JDRVdBS0VfTVQsIEZPUkNFV0FLRV9BQ0tfSFNXKTsKPj4gwqDCoMKgwqDCoCB9IGVs c2UgaWYgKElTX0lWWUJSSURHRShpOTE1KSkgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGVj b2J1czsKPj4gQEAgLTE0MzcsOCArMTQ1NSw4IEBAIHN0YXRpYyB2b2lkIGludGVsX3VuY29yZV9m d19kb21haW5zX2luaXQoc3RydWN0IAo+PiBpbnRlbF91bmNvcmUgKnVuY29yZSkKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIF9fcmF3X3VuY29yZV93cml0ZTMyKHVuY29yZSwgRk9SQ0VXQUtFLCAwKTsK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIF9fcmF3X3Bvc3RpbmdfcmVhZCh1bmNvcmUsIEVDT0JVUyk7 Cj4+IC3CoMKgwqDCoMKgwqDCoCBmd19kb21haW5faW5pdCh1bmNvcmUsIEZXX0RPTUFJTl9JRF9S RU5ERVIsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRk9SQ0VXQUtF X01ULCBGT1JDRVdBS0VfTVRfQUNLKTsKPj4gK8KgwqDCoMKgwqDCoMKgIF9fZndfZG9tYWluX2lu aXQoRldfRE9NQUlOX0lEX1JFTkRFUiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIEZPUkNFV0FLRV9NVCwgRk9SQ0VXQUtFX01UX0FDSyk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDC oCBzcGluX2xvY2tfaXJxKCZ1bmNvcmUtPmxvY2spOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZndf ZG9tYWluc19nZXRfd2l0aF90aHJlYWRfc3RhdHVzKHVuY29yZSwgRk9SQ0VXQUtFX1JFTkRFUik7 Cj4+IEBAIC0xNDQ5LDE5ICsxNDY3LDI3IEBAIHN0YXRpYyB2b2lkIAo+PiBpbnRlbF91bmNvcmVf ZndfZG9tYWluc19pbml0KHN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSkKPj4gwqDCoMKgwqDC oMKgwqDCoMKgIGlmICghKGVjb2J1cyAmIEZPUkNFV0FLRV9NVF9FTkFCTEUpKSB7Cj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIERSTV9JTkZPKCJObyBNVCBmb3JjZXdha2UgYXZhaWxhYmxl IG9uIEl2eWJyaWRnZSwgdGhpcyAKPj4gY2FuIHJlc3VsdCBpbiBpc3N1ZXNcbiIpOwo+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fSU5GTygid2hlbiB1c2luZyB2Ymxhbmstc3luY2Vk IHBhcnRpYWwgc2NyZWVuIAo+PiB1cGRhdGVzLlxuIik7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGZ3X2RvbWFpbl9pbml0KHVuY29yZSwgRldfRE9NQUlOX0lEX1JFTkRFUiwKPj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZPUkNFV0FLRSwgRk9SQ0VX QUtFX0FDSyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZndfZG9tYWluX2luaXQoRldf RE9NQUlOX0lEX1JFTkRFUiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgRk9SQ0VXQUtFLCBGT1JDRVdBS0VfQUNLKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0K Pj4gwqDCoMKgwqDCoCB9IGVsc2UgaWYgKElTX0dFTihpOTE1LCA2KSkgewo+PiDCoMKgwqDCoMKg wqDCoMKgwqAgdW5jb3JlLT5mdW5jcy5mb3JjZV93YWtlX2dldCA9Cj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGZ3X2RvbWFpbnNfZ2V0X3dpdGhfdGhyZWFkX3N0YXR1czsKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIHVuY29yZS0+ZnVuY3MuZm9yY2Vfd2FrZV9wdXQgPSBmd19kb21haW5zX3B1 dDsKPj4gLcKgwqDCoMKgwqDCoMKgIGZ3X2RvbWFpbl9pbml0KHVuY29yZSwgRldfRE9NQUlOX0lE X1JFTkRFUiwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBGT1JDRVdB S0UsIEZPUkNFV0FLRV9BQ0spOwo+PiArwqDCoMKgwqDCoMKgwqAgX19md19kb21haW5faW5pdChG V19ET01BSU5fSURfUkVOREVSLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Rk9SQ0VXQUtFLCBGT1JDRVdBS0VfQUNLKTsKPj4gwqDCoMKgwqDCoCB9Cj4+ICsjdW5kZWYgX19m d19kb21haW5faW5pdAo+PiArCj4+IMKgwqDCoMKgwqAgLyogQWxsIGZ1dHVyZSBwbGF0Zm9ybXMg YXJlIGV4cGVjdGVkIHRvIHJlcXVpcmUgY29tcGxleCBwb3dlciAKPj4gZ2F0aW5nICovCj4+IMKg wqDCoMKgwqAgV0FSTl9PTih1bmNvcmUtPmZ3X2RvbWFpbnMgPT0gMCk7Cj4+ICsKPj4gK8KgwqDC oCByZXR1cm4gMDsKPj4gKwo+PiArb3V0X2NsZWFuOgo+PiArwqDCoMKgIGludGVsX3VuY29yZV9m d19kb21haW5zX2ZpbmkodW5jb3JlKTsKPj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+PiDCoCB9Cj4+ IMKgICNkZWZpbmUgQVNTSUdOX0ZXX0RPTUFJTlNfVEFCTEUodW5jb3JlLCBkKSBcCj4+IEBAIC0x NTYyLDEzICsxNTg4LDE3IEBAIHN0YXRpYyB2b2lkIHVuY29yZV9yYXdfaW5pdChzdHJ1Y3QgCj4+ IGludGVsX3VuY29yZSAqdW5jb3JlKQo+PiDCoMKgwqDCoMKgIH0KPj4gwqAgfQo+PiAtc3RhdGlj IHZvaWQgdW5jb3JlX2ZvcmNld2FrZV9pbml0KHN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSkK Pj4gK3N0YXRpYyBpbnQgdW5jb3JlX2ZvcmNld2FrZV9pbml0KHN0cnVjdCBpbnRlbF91bmNvcmUg KnVuY29yZSkKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1ID0gdW5jb3JlLT5pOTE1Owo+PiArwqDCoMKgIGludCByZXQ7Cj4+IMKgwqDCoMKgwqAgR0VN X0JVR19PTighaW50ZWxfdW5jb3JlX2hhc19mb3JjZXdha2UodW5jb3JlKSk7Cj4+IC3CoMKgwqAg aW50ZWxfdW5jb3JlX2Z3X2RvbWFpbnNfaW5pdCh1bmNvcmUpOwo+PiArwqDCoMKgIHJldCA9IGlu dGVsX3VuY29yZV9md19kb21haW5zX2luaXQodW5jb3JlKTsKPj4gK8KgwqDCoCBpZiAocmV0KQo+ PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gKwo+PiDCoMKgwqDCoMKgIGZvcmNld2Fr ZV9lYXJseV9zYW5pdGl6ZSh1bmNvcmUsIDApOwo+PiDCoMKgwqDCoMKgIGlmIChJU19HRU5fUkFO R0UoaTkxNSwgNiwgNykpIHsKPj4gQEAgLTE2MDEsNiArMTYzMSw4IEBAIHN0YXRpYyB2b2lkIHVu Y29yZV9mb3JjZXdha2VfaW5pdChzdHJ1Y3QgCj4+IGludGVsX3VuY29yZSAqdW5jb3JlKQo+PiDC oMKgwqDCoMKgIHVuY29yZS0+cG1pY19idXNfYWNjZXNzX25iLm5vdGlmaWVyX2NhbGwgPSAKPj4g aTkxNV9wbWljX2J1c19hY2Nlc3Nfbm90aWZpZXI7Cj4+ICAgICAgIAo+PiBpb3NmX21iaV9yZWdp c3Rlcl9wbWljX2J1c19hY2Nlc3Nfbm90aWZpZXIoJnVuY29yZS0+cG1pY19idXNfYWNjZXNzX25i KTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiDCoCB9Cj4+IMKgIGludCBpbnRlbF91bmNv cmVfaW5pdF9tbWlvKHN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSkKPj4gQEAgLTE2MTksMTAg KzE2NTEsMTMgQEAgaW50IGludGVsX3VuY29yZV9pbml0X21taW8oc3RydWN0IGludGVsX3VuY29y ZSAKPj4gKnVuY29yZSkKPj4gwqDCoMKgwqDCoCB1bmNvcmUtPnVuY2xhaW1lZF9tbWlvX2NoZWNr ID0gMTsKPj4gLcKgwqDCoCBpZiAoIWludGVsX3VuY29yZV9oYXNfZm9yY2V3YWtlKHVuY29yZSkp Cj4+ICvCoMKgwqAgaWYgKCFpbnRlbF91bmNvcmVfaGFzX2ZvcmNld2FrZSh1bmNvcmUpKSB7Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCB1bmNvcmVfcmF3X2luaXQodW5jb3JlKTsKPj4gLcKgwqDCoCBl bHNlCj4+IC3CoMKgwqDCoMKgwqDCoCB1bmNvcmVfZm9yY2V3YWtlX2luaXQodW5jb3JlKTsKPj4g K8KgwqDCoCB9IGVsc2Ugewo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gdW5jb3JlX2ZvcmNld2Fr ZV9pbml0KHVuY29yZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBnb3RvIG91dF9tbWlvX2NsZWFudXA7Cj4+ICvCoMKgwqAgfQo+PiDCoMKg wqDCoMKgIC8qIG1ha2Ugc3VyZSBmdyBmdW5jcyBhcmUgc2V0IGlmIGFuZCBvbmx5IGlmIHdlIGhh dmUgZncqLwo+PiDCoMKgwqDCoMKgIEdFTV9CVUdfT04oaW50ZWxfdW5jb3JlX2hhc19mb3JjZXdh a2UodW5jb3JlKSAhPSAKPj4gISF1bmNvcmUtPmZ1bmNzLmZvcmNlX3dha2VfZ2V0KTsKPj4gQEAg LTE2NDQsNiArMTY3OSwxMSBAQCBpbnQgaW50ZWxfdW5jb3JlX2luaXRfbW1pbyhzdHJ1Y3QgaW50 ZWxfdW5jb3JlIAo+PiAqdW5jb3JlKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgRFJNX0RFQlVHKCJ1 bmNsYWltZWQgbW1pbyBkZXRlY3RlZCBvbiB1bmNvcmUgaW5pdCwgCj4+IGNsZWFyaW5nXG4iKTsK Pj4gwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4gKwo+PiArb3V0X21taW9fY2xlYW51cDoKPj4gK8Kg wqDCoCB1bmNvcmVfbW1pb19jbGVhbnVwKHVuY29yZSk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4g cmV0Owo+PiDCoCB9Cj4+IMKgIC8qCj4+IEBAIC0xNjg5LDYgKzE3MjksNyBAQCB2b2lkIGludGVs X3VuY29yZV9maW5pX21taW8oc3RydWN0IGludGVsX3VuY29yZSAKPj4gKnVuY29yZSkKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIGlvc2ZfbWJpX3VucmVnaXN0ZXJfcG1pY19idXNfYWNjZXNzX25vdGlm aWVyX3VubG9ja2VkKAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmdW5jb3JlLT5wbWlj X2J1c19hY2Nlc3NfbmIpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaW50ZWxfdW5jb3JlX2ZvcmNl d2FrZV9yZXNldCh1bmNvcmUpOwo+PiArwqDCoMKgwqDCoMKgwqAgaW50ZWxfdW5jb3JlX2Z3X2Rv bWFpbnNfZmluaSh1bmNvcmUpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaW9zZl9tYmlfcHVuaXRf cmVsZWFzZSgpOwo+PiDCoMKgwqDCoMKgIH0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3VuY29yZS5oIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Vu Y29yZS5oCj4+IGluZGV4IDg3OTI1MjczNWJiYS4uYmJmZjI4MWI4ODBkIDEwMDY0NAo+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91bmNvcmUuaAo+PiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF91bmNvcmUuaAo+PiBAQCAtMTI2LDYgKzEyNiw3IEBAIHN0cnVjdCBp bnRlbF91bmNvcmUgewo+PiDCoMKgwqDCoMKgIGVudW0gZm9yY2V3YWtlX2RvbWFpbnMgZndfZG9t YWluc19zYXZlZDsgLyogdXNlciBkb21haW5zIHNhdmVkIAo+PiBmb3IgUzMgKi8KPj4gwqDCoMKg wqDCoCBzdHJ1Y3QgaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9kb21haW4gewo+PiArwqDCoMKgwqDC oMKgwqAgc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAg ZW51bSBmb3JjZXdha2VfZG9tYWluX2lkIGlkOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZW51bSBm b3JjZXdha2VfZG9tYWlucyBtYXNrOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50 IHdha2VfY291bnQ7Cj4+IEBAIC0xMzMsNyArMTM0LDcgQEAgc3RydWN0IGludGVsX3VuY29yZSB7 Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaHJ0aW1lciB0aW1lcjsKPj4gwqDCoMKgwqDC oMKgwqDCoMKgIHUzMiBfX2lvbWVtICpyZWdfc2V0Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgdTMy IF9faW9tZW0gKnJlZ19hY2s7Cj4+IC3CoMKgwqAgfSBmd19kb21haW5bRldfRE9NQUlOX0lEX0NP VU5UXTsKPj4gK8KgwqDCoCB9ICpmd19kb21haW5bRldfRE9NQUlOX0lEX0NPVU5UXTsKPiAKPiBU aGUgYXJyYXkgaXRzZWxmIGNvdWxkIGFsc28gYmUgbWFkZSBkeW5hbWljLCBubz8gVG8gbXVjaCBo YXNzbGUgZm9yIHZlcnkgCj4gbGl0dGxlIGdhaW4/Cj4gCgpXaXRoIHRoZSBjdXJyZW50IGFwcHJv YWNoIHdlIGRvbid0IGtub3cgaG93IG1hbnkgZG9tYWlucyB3ZSBoYXZlIGluIAphZHZhbmNlLCBz byB3ZSdkIGhhdmUgdG8gZWl0aGVyIGFkZCBhIHRhYmxlIGZvciB0aGF0IG9yIHJlYWxsb2MgdGhl IAphcnJheSBhcyB3ZSBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mIGRvbWFpbnMuIEJvdGggb3B0aW9u cyBkb24ndCBzZWVtIAp3b3J0aCB0aGUgaGFzc2xlIElNTy4KClRoYW5rcywKRGFuaWVsZQoKPj4g wqDCoMKgwqDCoCBzdHJ1Y3Qgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IGNv dW50Owo+PiBAQCAtMTQ3LDE4ICsxNDgsMTIgQEAgc3RydWN0IGludGVsX3VuY29yZSB7Cj4+IMKg IC8qIEl0ZXJhdGUgb3ZlciBpbml0aWFsaXNlZCBmdyBkb21haW5zICovCj4+IMKgICNkZWZpbmUg Zm9yX2VhY2hfZndfZG9tYWluX21hc2tlZChkb21haW5fXywgbWFza19fLCB1bmNvcmVfXywgdG1w X18pIFwKPj4gLcKgwqDCoCBmb3IgKHRtcF9fID0gKG1hc2tfXyk7IFwKPj4gLcKgwqDCoMKgwqDC oMKgwqAgdG1wX18gPyAoZG9tYWluX18gPSAKPj4gJih1bmNvcmVfXyktPmZ3X2RvbWFpbltfX21h c2tfbmV4dF9iaXQodG1wX18pXSksIDEgOiAwOykKPj4gK8KgwqDCoCBmb3IgKHRtcF9fID0gKG1h c2tfXyk7IHRtcF9fIDspIFwKPj4gK8KgwqDCoMKgwqDCoMKgIGZvcl9lYWNoX2lmKGRvbWFpbl9f ID0gCj4+ICh1bmNvcmVfXyktPmZ3X2RvbWFpbltfX21hc2tfbmV4dF9iaXQodG1wX18pXSkKPj4g wqAgI2RlZmluZSBmb3JfZWFjaF9md19kb21haW4oZG9tYWluX18sIHVuY29yZV9fLCB0bXBfXykg XAo+PiDCoMKgwqDCoMKgIGZvcl9lYWNoX2Z3X2RvbWFpbl9tYXNrZWQoZG9tYWluX18sICh1bmNv cmVfXyktPmZ3X2RvbWFpbnMsIAo+PiB1bmNvcmVfXywgdG1wX18pCj4+IC1zdGF0aWMgaW5saW5l IHN0cnVjdCBpbnRlbF91bmNvcmUgKgo+PiAtZm9yY2V3YWtlX2RvbWFpbl90b191bmNvcmUoY29u c3Qgc3RydWN0IGludGVsX3VuY29yZV9mb3JjZXdha2VfZG9tYWluIAo+PiAqZCkKPj4gLXsKPj4g LcKgwqDCoCByZXR1cm4gY29udGFpbmVyX29mKGQsIHN0cnVjdCBpbnRlbF91bmNvcmUsIGZ3X2Rv bWFpbltkLT5pZF0pOwo+PiAtfQo+PiAtCj4+IMKgIHN0YXRpYyBpbmxpbmUgYm9vbAo+PiDCoCBp bnRlbF91bmNvcmVfaGFzX2ZvcmNld2FrZShjb25zdCBzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNv cmUpCj4+IMKgIHsKPj4KPiAKPiBSZWdhcmRzLAo+IAo+IFR2cnRrbwpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=