From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Widawsky Subject: Re: [PATCH 1/6] drm/i915: Colocate all GT access routines in the same file Date: Sun, 14 Jul 2013 12:42:49 -0700 Message-ID: <20130714194249.GA24025@bwidawsk.net> References: <1373648907-28774-1-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from shiva.localdomain (unknown [209.20.75.48]) by gabe.freedesktop.org (Postfix) with ESMTP id 780E2E5BFB for ; Sun, 14 Jul 2013 12:39:35 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1373648907-28774-1-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: Chris Wilson Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBKdWwgMTIsIDIwMTMgYXQgMDY6MDg6MjJQTSArMDEwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IEN1cnJlbnRseSwgdGhlIHJlZ2lzdGVyIGFjY2VzcyBjb2RlIGlzIHNwbGl0IGJldHdl ZW4gaTkxNV9kcnYuYyBhbmQKPiBpbnRlbF9wbS5jLiBJdCBvbmx5IGJhcmVzIGEgc3VwZXJmaWNp YWwgcmVzZW1ibGFuY2UgdG8gdGhlIHJlc2V0IG9mIHRoZQo+IHBvd2VybWFuYWdlbWVudCBjb2Rl LCBzbyBtb3ZlIGl0IGFsbCBpbnRvIGl0cyBvd24gZmlsZS4gVGhpcyBpcyB0byBlYXNlCj4gZnVy dGhlciBwYXRjaGVzIHRvIGVuZm9yY2Ugc2VyaWFsaXNlZCByZWdpc3RlciBhY2Nlc3MuCj4gCj4g djI6IFNjYW4gZm9yIHJhbmRvbSBhYnVzZSBvZiBJOTE1X1dSSVRFX05PVFJBQ0UKPiB2MzogVGFr ZSB0aGUgb3Bwb3J0dW5pdHkgdG8gcmVuYW1lIHRoZSBHVCBmdW5jdGlvbnMgYXMgdW5jb3JlLiBV bmNvcmUgaXMKPiB0aGUgdGVybSB1c2VkIGJ5IHRoZSBoYXJkd2FyZSBkZXNpZ24gKGFuZCBic3Bl YykgZm9yIGFsbCBmdW5jdGlvbnMKPiBvdXRzaWRlIG9mIHRoZSBHUFUgKGFuZCBDUFUpIGNvcmVz IGluIHdoYXQgaXMgYWxzbyBrbm93biBhcyB0aGUgU3lzdGVtCj4gQWdlbnQuCj4gCj4gU2lnbmVk LW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CgpnaXQgYW0g Y29tcGxhaW5zIGFib3V0IGEgbWlzc2luZyBuZXdsaW5lIGF0IEVPRiwgYnV0IEkgZ3Vlc3MgRGFu aWVsIHdpbGwKZml4IGl0IG9uIG1lcmdlLgoKSnVzdCBiaWtlc2hlZHM6CkFzIGJlZm9yZSwgaW50 ZWxfdW5jb3JlXyhjbGVhcnxjaGVjaylfZXJyb3JzIHNlZW1zIHNpbGx5IHRvIG1lLiBBbHNvIGlm CnlvdSBleHRyYWN0ZWQgdGhvc2UgYXMgYSBzZXBhcmF0ZSBwYXRjaCB0byB0aGUgZ3QgZnVuY3Ms IHlvdSBjb3VsZCBoYXZlCmhhZCBqdXN0IGEgc2ltcGxlIGZpbGUgbW92ZSArIHJlbmFtZS4gQW5k IGFzIHlvdSBtYWRlIG1lIHJlYWxpemUsIEknbQpub3QgaG9ycmlibHkgdGhyaWxsZWQgd2l0aCB0 aGUgbmFtZSB1bmNvcmUsIEkgbGlrZWQgZ3QuIEZvciBtZSwgdGhlCmRpc3RpbmN0aW9uIGJldHdl ZW4gX3BtLCBhbmQgX3VuY29yZSBpc24ndCByZWFsbHkgbGFyZ2UgZW5vdWdoLCBpZS4gbWFueQp0 aGluZ3MgaW4gX3BtIGFyZSByZWFsbHkgdW5jb3JlIGFsc28gKGFueXRoaW5nIHRvdWNoaW5nIHRo ZSBwdW5pdC9ycHMsCmV0YykuIEFsc28sIHNpbmNlIGd0X2Z1bmNzIG5ldmVyIHJlYWxseSBleHBh bmRlZCwgbWF5YmUganVzdCBjYWxsIGl0CmZvcmNld2FrZV9mdW5jcyBhbmQgYmUgZG9uZSB3aXRo IHRoYXQgKHNpbmNlIHVuY29yZSBmb3JjZXdha2Ugc291bmRzCndlaXJkIHRvIG1lKS4KCkZpbmFs IGJpa2VzaGVkLCBJIHdvdWxkIGxpa2UgdG8gc2VlIHRoZSByZXNldCBjb2RlIGluIGEgc2VwYXJh dGUgZmlsZSBhcwp3ZWxsIChpbmNsdWRlZCBpbiB0aGlzIGNvdWxkIGJlIGFueSBHRU0gZnVuY3Rp b25zIHdlIGhhdmUgZm9yIHJlc2V0Cm9ubHksIGFuZCBkaXNwbGF5IGFzIHdlbGwpLgoKSSdsbCBi dW1wIG15IGFjayB1cCB0byByLWIgbm93IHNpbmNlIEkndmUgbG9va2VkIGF0IGl0IGEgZmV3IHRp bWVzLgpSZXZpZXdlZC1ieTogQmVuIFdpZGF3c2t5IDxiZW5AYndpZGF3c2submV0PgoKPiAtLS0K PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgIHwgICAxICsKPiAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgIHwgIDEyICstCj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZG1hLmMgICAgICB8ICAgOCArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5jICAgICAgfCAyNjggKy0tLS0tLS0tLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaCAgICAgIHwgIDMwICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfaXJxLmMgICAgICB8ICAgNiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNw bGF5LmMgfCAgIDMgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAgIHwg ICAxIC0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyAgICAgIHwgMjU4ICstLS0t LS0tLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMgIHwgNTY5 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDEwIGZpbGVzIGNoYW5nZWQs IDYwOSBpbnNlcnRpb25zKCspLCA1NDcgZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91bmNvcmUuYwo+IAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlCj4gaW5kZXggOWQxZGE3Yy4uYjg0NDlhOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4g QEAgLTM4LDYgKzM4LDcgQEAgaTkxNS15IDo9IGk5MTVfZHJ2Lm8gaTkxNV9kbWEubyBpOTE1X2ly cS5vIFwKPiAgCSAgaW50ZWxfc3ByaXRlLm8gXAo+ICAJICBpbnRlbF9vcHJlZ2lvbi5vIFwKPiAg CSAgaW50ZWxfc2lkZWJhbmQubyBcCj4gKwkgIGludGVsX3VuY29yZS5vIFwKPiAgCSAgZHZvX2No N3h4eC5vIFwKPiAgCSAgZHZvX2NoNzAxNy5vIFwKPiAgCSAgZHZvX2l2Y2gubyBcCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiBpbmRleCA4NjM3OTc5Li43MjMxMzIyIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiBAQCAtOTg3LDkgKzk4Nyw5IEBAIHN0YXRp YyBpbnQgZ2VuNl9kcnBjX2luZm8oc3RydWN0IHNlcV9maWxlICptKQo+ICAJaWYgKHJldCkKPiAg CQlyZXR1cm4gcmV0Owo+ICAKPiAtCXNwaW5fbG9ja19pcnEoJmRldl9wcml2LT5ndF9sb2NrKTsK PiAtCWZvcmNld2FrZV9jb3VudCA9IGRldl9wcml2LT5mb3JjZXdha2VfY291bnQ7Cj4gLQlzcGlu X3VubG9ja19pcnEoJmRldl9wcml2LT5ndF9sb2NrKTsKPiArCXNwaW5fbG9ja19pcnEoJmRldl9w cml2LT51bmNvcmUubG9jayk7Cj4gKwlmb3JjZXdha2VfY291bnQgPSBkZXZfcHJpdi0+dW5jb3Jl LmZvcmNld2FrZV9jb3VudDsKPiArCXNwaW5fdW5sb2NrX2lycSgmZGV2X3ByaXYtPnVuY29yZS5s b2NrKTsKPiAgCj4gIAlpZiAoZm9yY2V3YWtlX2NvdW50KSB7Cj4gIAkJc2VxX3B1dHMobSwgIlJD IGluZm9ybWF0aW9uIGluYWNjdXJhdGUgYmVjYXVzZSBzb21lYm9keSAiCj4gQEAgLTEzNzMsOSAr MTM3Myw5IEBAIHN0YXRpYyBpbnQgaTkxNV9nZW42X2ZvcmNld2FrZV9jb3VudF9pbmZvKHN0cnVj dCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gIAl1bnNpZ25lZCBmb3JjZXdha2VfY291bnQ7 Cj4gIAo+IC0Jc3Bpbl9sb2NrX2lycSgmZGV2X3ByaXYtPmd0X2xvY2spOwo+IC0JZm9yY2V3YWtl X2NvdW50ID0gZGV2X3ByaXYtPmZvcmNld2FrZV9jb3VudDsKPiAtCXNwaW5fdW5sb2NrX2lycSgm ZGV2X3ByaXYtPmd0X2xvY2spOwo+ICsJc3Bpbl9sb2NrX2lycSgmZGV2X3ByaXYtPnVuY29yZS5s b2NrKTsKPiArCWZvcmNld2FrZV9jb3VudCA9IGRldl9wcml2LT51bmNvcmUuZm9yY2V3YWtlX2Nv dW50Owo+ICsJc3Bpbl91bmxvY2tfaXJxKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2spOwo+ICAKPiAg CXNlcV9wcmludGYobSwgImZvcmNld2FrZSBjb3VudCA9ICV1XG4iLCBmb3JjZXdha2VfY291bnQp Owo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKPiBpbmRleCA2Y2U5MDMzLi5hMmFjNmU2IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCj4gQEAgLTE0NDUsMTAgKzE0NDUsNyBAQCBzdGF0 aWMgdm9pZCBpOTE1X2R1bXBfZGV2aWNlX2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQo+ICAgKi8KPiAgc3RhdGljIHZvaWQgaW50ZWxfZWFybHlfc2FuaXRpemVfcmVncyhz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0KPiAtCWlmIChIQVNfRlBHQV9EQkdfVU5D TEFJTUVEKGRldikpCj4gLQkJSTkxNV9XUklURV9OT1RSQUNFKEZQR0FfREJHLCBGUEdBX0RCR19S TV9OT0NMQUlNKTsKPiArCWludGVsX3VuY29yZV9lYXJseV9zYW5pdGl6ZShkZXYpOwo+ICB9Cj4g IAo+ICAvKioKPiBAQCAtMTU4MCw3ICsxNTc3LDggQEAgaW50IGk5MTVfZHJpdmVyX2xvYWQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKPiAgCWludGVsX2RldGVj dF9wY2goZGV2KTsKPiAgCj4gIAlpbnRlbF9pcnFfaW5pdChkZXYpOwo+IC0JaW50ZWxfZ3RfaW5p dChkZXYpOwo+ICsJaW50ZWxfdW5jb3JlX2luaXQoZGV2KTsKPiArCWludGVsX3BtX2luaXQoZGV2 KTsKPiAgCj4gIAkvKiBUcnkgdG8gbWFrZSBzdXJlIE1DSEJBUiBpcyBlbmFibGVkIGJlZm9yZSBw b2tpbmcgYXQgaXQgKi8KPiAgCWludGVsX3NldHVwX21jaGJhcihkZXYpOwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuYwo+IGluZGV4IGIwNzM2MmYuLjNjNDM4YTcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmMKPiBAQCAtNzE0LDcgKzcxNCw3IEBAIHN0YXRpYyBpbnQgaTkxNV9kcm1fdGhhdyhz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICB7Cj4gIAlpbnQgZXJyb3IgPSAwOwo+ICAKPiAtCWlu dGVsX2d0X3Jlc2V0KGRldik7Cj4gKwlpbnRlbF91bmNvcmVfcmVzZXQoZGV2KTsKPiAgCj4gIAlp ZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgewo+ICAJCW11 dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiBAQCAtNzQwLDcgKzc0MCw3IEBAIGludCBp OTE1X3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAKPiAgCXBjaV9zZXRfbWFzdGVy KGRldi0+cGRldik7Cj4gIAo+IC0JaW50ZWxfZ3RfcmVzZXQoZGV2KTsKPiArCWludGVsX3VuY29y ZV9yZXNldChkZXYpOwo+ICAKPiAgCS8qCj4gIAkgKiBQbGF0Zm9ybXMgd2l0aCBvcHJlZ2lvbiBz aG91bGQgaGF2ZSBzYW5lIEJJT1MsIG9sZGVyIG9uZXMgKGdlbjMgYW5kCj4gQEAgLTc2MSwxNDAg Kzc2MSw2IEBAIGludCBpOTE1X3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAJcmV0 dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgaTh4eF9kb19yZXNldChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOwo+IC0KPiAtCWlmIChJU19JODVYKGRldikpCj4gLQkJcmV0dXJuIC1F Tk9ERVY7Cj4gLQo+IC0JSTkxNV9XUklURShEX1NUQVRFLCBJOTE1X1JFQUQoRF9TVEFURSkgfCBE U1RBVEVfR0ZYX1JFU0VUX0k4MzApOwo+IC0JUE9TVElOR19SRUFEKERfU1RBVEUpOwo+IC0KPiAt CWlmIChJU19JODMwKGRldikgfHwgSVNfODQ1RyhkZXYpKSB7Cj4gLQkJSTkxNV9XUklURShERUJV R19SRVNFVF9JODMwLAo+IC0JCQkgICBERUJVR19SRVNFVF9ESVNQTEFZIHwKPiAtCQkJICAgREVC VUdfUkVTRVRfUkVOREVSIHwKPiAtCQkJICAgREVCVUdfUkVTRVRfRlVMTCk7Cj4gLQkJUE9TVElO R19SRUFEKERFQlVHX1JFU0VUX0k4MzApOwo+IC0JCW1zbGVlcCgxKTsKPiAtCj4gLQkJSTkxNV9X UklURShERUJVR19SRVNFVF9JODMwLCAwKTsKPiAtCQlQT1NUSU5HX1JFQUQoREVCVUdfUkVTRVRf STgzMCk7Cj4gLQl9Cj4gLQo+IC0JbXNsZWVwKDEpOwo+IC0KPiAtCUk5MTVfV1JJVEUoRF9TVEFU RSwgSTkxNV9SRUFEKERfU1RBVEUpICYgfkRTVEFURV9HRlhfUkVTRVRfSTgzMCk7Cj4gLQlQT1NU SU5HX1JFQUQoRF9TVEFURSk7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBp bnQgaTk2NV9yZXNldF9jb21wbGV0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+IC17Cj4gLQl1 OCBnZHJzdDsKPiAtCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldi0+cGRldiwgSTk2NV9HRFJTVCwg JmdkcnN0KTsKPiAtCXJldHVybiAoZ2Ryc3QgJiBHUkRPTV9SRVNFVF9FTkFCTEUpID09IDA7Cj4g LX0KPiAtCj4gLXN0YXRpYyBpbnQgaTk2NV9kb19yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQo+IC17Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCS8qCj4gLQkgKiBTZXQgdGhlIGRvbWFpbnMgd2Ug d2FudCB0byByZXNldCAoR1JET00vYml0cyAyIGFuZCAzKSBhcwo+IC0JICogd2VsbCBhcyB0aGUg cmVzZXQgYml0IChHUi9iaXQgMCkuICBTZXR0aW5nIHRoZSBHUiBiaXQKPiAtCSAqIHRyaWdnZXJz IHRoZSByZXNldDsgd2hlbiBkb25lLCB0aGUgaGFyZHdhcmUgd2lsbCBjbGVhciBpdC4KPiAtCSAq Lwo+IC0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldi0+cGRldiwgSTk2NV9HRFJTVCwKPiAtCQkJ ICAgICAgR1JET01fUkVOREVSIHwgR1JET01fUkVTRVRfRU5BQkxFKTsKPiAtCXJldCA9ICB3YWl0 X2ZvcihpOTY1X3Jlc2V0X2NvbXBsZXRlKGRldiksIDUwMCk7Cj4gLQlpZiAocmV0KQo+IC0JCXJl dHVybiByZXQ7Cj4gLQo+IC0JLyogV2UgY2FuJ3QgcmVzZXQgcmVuZGVyJm1lZGlhIHdpdGhvdXQg YWxzbyByZXNldHRpbmcgZGlzcGxheSAuLi4gKi8KPiAtCXBjaV93cml0ZV9jb25maWdfYnl0ZShk ZXYtPnBkZXYsIEk5NjVfR0RSU1QsCj4gLQkJCSAgICAgIEdSRE9NX01FRElBIHwgR1JET01fUkVT RVRfRU5BQkxFKTsKPiAtCj4gLQlyZXQgPSAgd2FpdF9mb3IoaTk2NV9yZXNldF9jb21wbGV0ZShk ZXYpLCA1MDApOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCXBjaV93cml0 ZV9jb25maWdfYnl0ZShkZXYtPnBkZXYsIEk5NjVfR0RSU1QsIDApOwo+IC0KPiAtCXJldHVybiAw Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGlyb25sYWtlX2RvX3Jlc2V0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7Cj4gLQl1MzIgZ2Ryc3Q7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCWdkcnN0 ID0gSTkxNV9SRUFEKE1DSEJBUl9NSVJST1JfQkFTRSArIElMS19HRFNSKTsKPiAtCWdkcnN0ICY9 IH5HUkRPTV9NQVNLOwo+IC0JSTkxNV9XUklURShNQ0hCQVJfTUlSUk9SX0JBU0UgKyBJTEtfR0RT UiwKPiAtCQkgICBnZHJzdCB8IEdSRE9NX1JFTkRFUiB8IEdSRE9NX1JFU0VUX0VOQUJMRSk7Cj4g LQlyZXQgPSB3YWl0X2ZvcihJOTE1X1JFQUQoTUNIQkFSX01JUlJPUl9CQVNFICsgSUxLX0dEU1Ip ICYgMHgxLCA1MDApOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCS8qIFdl IGNhbid0IHJlc2V0IHJlbmRlciZtZWRpYSB3aXRob3V0IGFsc28gcmVzZXR0aW5nIGRpc3BsYXkg Li4uICovCj4gLQlnZHJzdCA9IEk5MTVfUkVBRChNQ0hCQVJfTUlSUk9SX0JBU0UgKyBJTEtfR0RT Uik7Cj4gLQlnZHJzdCAmPSB+R1JET01fTUFTSzsKPiAtCUk5MTVfV1JJVEUoTUNIQkFSX01JUlJP Ul9CQVNFICsgSUxLX0dEU1IsCj4gLQkJICAgZ2Ryc3QgfCBHUkRPTV9NRURJQSB8IEdSRE9NX1JF U0VUX0VOQUJMRSk7Cj4gLQlyZXR1cm4gd2FpdF9mb3IoSTkxNV9SRUFEKE1DSEJBUl9NSVJST1Jf QkFTRSArIElMS19HRFNSKSAmIDB4MSwgNTAwKTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBnZW42 X2RvX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlpbnQJcmV0Owo+IC0J dW5zaWduZWQgbG9uZyBpcnFmbGFnczsKPiAtCj4gLQkvKiBIb2xkIGd0X2xvY2sgYWNyb3NzIHJl c2V0IHRvIHByZXZlbnQgYW55IHJlZ2lzdGVyIGFjY2Vzcwo+IC0JICogd2l0aCBmb3JjZXdha2Ug bm90IHNldCBjb3JyZWN0bHkKPiAtCSAqLwo+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2 LT5ndF9sb2NrLCBpcnFmbGFncyk7Cj4gLQo+IC0JLyogUmVzZXQgdGhlIGNoaXAgKi8KPiAtCj4g LQkvKiBHRU42X0dEUlNUIGlzIG5vdCBpbiB0aGUgZ3QgcG93ZXIgd2VsbCwgbm8gbmVlZCB0byBj aGVjawo+IC0JICogZm9yIGZpZm8gc3BhY2UgZm9yIHRoZSB3cml0ZSBvciBmb3JjZXdha2UgdGhl IGNoaXAgZm9yCj4gLQkgKiB0aGUgcmVhZAo+IC0JICovCj4gLQlJOTE1X1dSSVRFX05PVFJBQ0Uo R0VONl9HRFJTVCwgR0VONl9HUkRPTV9GVUxMKTsKPiAtCj4gLQkvKiBTcGluIHdhaXRpbmcgZm9y IHRoZSBkZXZpY2UgdG8gYWNrIHRoZSByZXNldCByZXF1ZXN0ICovCj4gLQlyZXQgPSB3YWl0X2Zv cigoSTkxNV9SRUFEX05PVFJBQ0UoR0VONl9HRFJTVCkgJiBHRU42X0dSRE9NX0ZVTEwpID09IDAs IDUwMCk7Cj4gLQo+IC0JLyogSWYgcmVzZXQgd2l0aCBhIHVzZXIgZm9yY2V3YWtlLCB0cnkgdG8g cmVzdG9yZSwgb3RoZXJ3aXNlIHR1cm4gaXQgb2ZmICovCj4gLQlpZiAoZGV2X3ByaXYtPmZvcmNl d2FrZV9jb3VudCkKPiAtCQlkZXZfcHJpdi0+Z3QuZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYpOwo+ IC0JZWxzZQo+IC0JCWRldl9wcml2LT5ndC5mb3JjZV93YWtlX3B1dChkZXZfcHJpdik7Cj4gLQo+ IC0JLyogUmVzdG9yZSBmaWZvIGNvdW50ICovCj4gLQlkZXZfcHJpdi0+Z3RfZmlmb19jb3VudCA9 IEk5MTVfUkVBRF9OT1RSQUNFKEdUX0ZJRk9fRlJFRV9FTlRSSUVTKTsKPiAtCj4gLQlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+Z3RfbG9jaywgaXJxZmxhZ3MpOwo+IC0JcmV0dXJu IHJldDsKPiAtfQo+IC0KPiAtaW50IGludGVsX2dwdV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQo+IC17Cj4gLQlzd2l0Y2ggKElOVEVMX0lORk8oZGV2KS0+Z2VuKSB7Cj4gLQljYXNlIDc6 Cj4gLQljYXNlIDY6IHJldHVybiBnZW42X2RvX3Jlc2V0KGRldik7Cj4gLQljYXNlIDU6IHJldHVy biBpcm9ubGFrZV9kb19yZXNldChkZXYpOwo+IC0JY2FzZSA0OiByZXR1cm4gaTk2NV9kb19yZXNl dChkZXYpOwo+IC0JY2FzZSAyOiByZXR1cm4gaTh4eF9kb19yZXNldChkZXYpOwo+IC0JZGVmYXVs dDogcmV0dXJuIC1FTk9ERVY7Cj4gLQl9Cj4gLX0KPiAtCj4gIC8qKgo+ICAgKiBpOTE1X3Jlc2V0 IC0gcmVzZXQgY2hpcCBhZnRlciBhIGhhbmcKPiAgICogQGRldjogZHJtIGRldmljZSB0byByZXNl dAo+IEBAIC0xMjI0LDEzMyArMTA5MCwzIEBAIG1vZHVsZV9leGl0KGk5MTVfZXhpdCk7Cj4gIE1P RFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7Cj4gIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJf REVTQyk7Cj4gIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7Cj4g LQo+IC0vKiBXZSBnaXZlIGZhc3QgcGF0aHMgZm9yIHRoZSByZWFsbHkgY29vbCByZWdpc3RlcnMg Ki8KPiAtI2RlZmluZSBORUVEU19GT1JDRV9XQUtFKGRldl9wcml2LCByZWcpIFwKPiAtCSgoSEFT X0ZPUkNFX1dBS0UoKGRldl9wcml2KS0+ZGV2KSkgJiYgXAo+IC0JICgocmVnKSA8IDB4NDAwMDAp ICYmICAgICAgICAgICAgXAo+IC0JICgocmVnKSAhPSBGT1JDRVdBS0UpKQo+IC1zdGF0aWMgdm9p ZAo+IC1pbGtfZHVtbXlfd3JpdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ IC17Cj4gLQkvKiBXYUlzc3VlRHVtbXlXcml0ZVRvV2FrZXVwRnJvbVJDNjppbGsgSXNzdWUgYSBk dW1teSB3cml0ZSB0byB3YWtlIHVwCj4gLQkgKiB0aGUgY2hpcCBmcm9tIHJjNiBiZWZvcmUgdG91 Y2hpbmcgaXQgZm9yIHJlYWwuIE1JX01PREUgaXMgbWFza2VkLAo+IC0JICogaGVuY2UgaGFybWxl c3MgdG8gd3JpdGUgMCBpbnRvLiAqLwo+IC0JSTkxNV9XUklURV9OT1RSQUNFKE1JX01PREUsIDAp Owo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZAo+IC1oc3dfdW5jbGFpbWVkX3JlZ19jbGVhcihzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiByZWcpCj4gLXsKPiAtCWlmIChIQVNf RlBHQV9EQkdfVU5DTEFJTUVEKGRldl9wcml2LT5kZXYpICYmCj4gLQkgICAgKEk5MTVfUkVBRF9O T1RSQUNFKEZQR0FfREJHKSAmIEZQR0FfREJHX1JNX05PQ0xBSU0pKSB7Cj4gLQkJRFJNX0VSUk9S KCJVbmtub3duIHVuY2xhaW1lZCByZWdpc3RlciBiZWZvcmUgd3JpdGluZyB0byAleFxuIiwKPiAt CQkJICByZWcpOwo+IC0JCUk5MTVfV1JJVEVfTk9UUkFDRShGUEdBX0RCRywgRlBHQV9EQkdfUk1f Tk9DTEFJTSk7Cj4gLQl9Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkCj4gLWhzd191bmNsYWltZWRf cmVnX2NoZWNrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHJlZykKPiAt ewo+IC0JaWYgKEhBU19GUEdBX0RCR19VTkNMQUlNRUQoZGV2X3ByaXYtPmRldikgJiYKPiAtCSAg ICAoSTkxNV9SRUFEX05PVFJBQ0UoRlBHQV9EQkcpICYgRlBHQV9EQkdfUk1fTk9DTEFJTSkpIHsK PiAtCQlEUk1fRVJST1IoIlVuY2xhaW1lZCB3cml0ZSB0byAleFxuIiwgcmVnKTsKPiAtCQlJOTE1 X1dSSVRFX05PVFJBQ0UoRlBHQV9EQkcsIEZQR0FfREJHX1JNX05PQ0xBSU0pOwo+IC0JfQo+IC19 Cj4gLQo+IC0jZGVmaW5lIF9faTkxNV9yZWFkKHgsIHkpIFwKPiAtdSMjeCBpOTE1X3JlYWQjI3go c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgcmVnKSB7IFwKPiAtCXUjI3gg dmFsID0gMDsgXAo+IC0JaWYgKElTX0dFTjUoZGV2X3ByaXYtPmRldikpIFwKPiAtCQlpbGtfZHVt bXlfd3JpdGUoZGV2X3ByaXYpOyBcCj4gLQlpZiAoTkVFRFNfRk9SQ0VfV0FLRSgoZGV2X3ByaXYp LCAocmVnKSkpIHsgXAo+IC0JCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7IFwKPiAtCQlzcGluX2xv Y2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmd0X2xvY2ssIGlycWZsYWdzKTsgXAo+IC0JCWlmIChkZXZf cHJpdi0+Zm9yY2V3YWtlX2NvdW50ID09IDApIFwKPiAtCQkJZGV2X3ByaXYtPmd0LmZvcmNlX3dh a2VfZ2V0KGRldl9wcml2KTsgXAo+IC0JCXZhbCA9IHJlYWQjI3koZGV2X3ByaXYtPnJlZ3MgKyBy ZWcpOyBcCj4gLQkJaWYgKGRldl9wcml2LT5mb3JjZXdha2VfY291bnQgPT0gMCkgXAo+IC0JCQlk ZXZfcHJpdi0+Z3QuZm9yY2Vfd2FrZV9wdXQoZGV2X3ByaXYpOyBcCj4gLQkJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmZGV2X3ByaXYtPmd0X2xvY2ssIGlycWZsYWdzKTsgXAo+IC0JfSBlbHNlIHsg XAo+IC0JCXZhbCA9IHJlYWQjI3koZGV2X3ByaXYtPnJlZ3MgKyByZWcpOyBcCj4gLQl9IFwKPiAt CXRyYWNlX2k5MTVfcmVnX3J3KGZhbHNlLCByZWcsIHZhbCwgc2l6ZW9mKHZhbCkpOyBcCj4gLQly ZXR1cm4gdmFsOyBcCj4gLX0KPiAtCj4gLV9faTkxNV9yZWFkKDgsIGIpCj4gLV9faTkxNV9yZWFk KDE2LCB3KQo+IC1fX2k5MTVfcmVhZCgzMiwgbCkKPiAtX19pOTE1X3JlYWQoNjQsIHEpCj4gLSN1 bmRlZiBfX2k5MTVfcmVhZAo+IC0KPiAtI2RlZmluZSBfX2k5MTVfd3JpdGUoeCwgeSkgXAo+IC12 b2lkIGk5MTVfd3JpdGUjI3goc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIg cmVnLCB1IyN4IHZhbCkgeyBcCj4gLQl1MzIgX19maWZvX3JldCA9IDA7IFwKPiAtCXRyYWNlX2k5 MTVfcmVnX3J3KHRydWUsIHJlZywgdmFsLCBzaXplb2YodmFsKSk7IFwKPiAtCWlmIChORUVEU19G T1JDRV9XQUtFKChkZXZfcHJpdiksIChyZWcpKSkgeyBcCj4gLQkJX19maWZvX3JldCA9IF9fZ2Vu Nl9ndF93YWl0X2Zvcl9maWZvKGRldl9wcml2KTsgXAo+IC0JfSBcCj4gLQlpZiAoSVNfR0VONShk ZXZfcHJpdi0+ZGV2KSkgXAo+IC0JCWlsa19kdW1teV93cml0ZShkZXZfcHJpdik7IFwKPiAtCWhz d191bmNsYWltZWRfcmVnX2NsZWFyKGRldl9wcml2LCByZWcpOyBcCj4gLQl3cml0ZSMjeSh2YWws IGRldl9wcml2LT5yZWdzICsgcmVnKTsgXAo+IC0JaWYgKHVubGlrZWx5KF9fZmlmb19yZXQpKSB7 IFwKPiAtCQlnZW42X2d0X2NoZWNrX2ZpZm9kYmcoZGV2X3ByaXYpOyBcCj4gLQl9IFwKPiAtCWhz d191bmNsYWltZWRfcmVnX2NoZWNrKGRldl9wcml2LCByZWcpOyBcCj4gLX0KPiAtX19pOTE1X3dy aXRlKDgsIGIpCj4gLV9faTkxNV93cml0ZSgxNiwgdykKPiAtX19pOTE1X3dyaXRlKDMyLCBsKQo+ IC1fX2k5MTVfd3JpdGUoNjQsIHEpCj4gLSN1bmRlZiBfX2k5MTVfd3JpdGUKPiAtCj4gLXN0YXRp YyBjb25zdCBzdHJ1Y3QgcmVnaXN0ZXJfd2hpdGVsaXN0IHsKPiAtCXVpbnQ2NF90IG9mZnNldDsK PiAtCXVpbnQzMl90IHNpemU7Cj4gLQl1aW50MzJfdCBnZW5fYml0bWFzazsgLyogc3VwcG9ydCBn ZW5zLCAweDEwIGZvciA0LCAweDMwIGZvciA0IGFuZCA1LCBldGMuICovCj4gLX0gd2hpdGVsaXN0 W10gPSB7Cj4gLQl7IFJJTkdfVElNRVNUQU1QKFJFTkRFUl9SSU5HX0JBU0UpLCA4LCAweEYwIH0s Cj4gLX07Cj4gLQo+IC1pbnQgaTkxNV9yZWdfcmVhZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAo+IC0JCQl2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gLXsKPiAtCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlz dHJ1Y3QgZHJtX2k5MTVfcmVnX3JlYWQgKnJlZyA9IGRhdGE7Cj4gLQlzdHJ1Y3QgcmVnaXN0ZXJf d2hpdGVsaXN0IGNvbnN0ICplbnRyeSA9IHdoaXRlbGlzdDsKPiAtCWludCBpOwo+IC0KPiAtCWZv ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdoaXRlbGlzdCk7IGkrKywgZW50cnkrKykgewo+IC0J CWlmIChlbnRyeS0+b2Zmc2V0ID09IHJlZy0+b2Zmc2V0ICYmCj4gLQkJICAgICgxIDw8IElOVEVM X0lORk8oZGV2KS0+Z2VuICYgZW50cnktPmdlbl9iaXRtYXNrKSkKPiAtCQkJYnJlYWs7Cj4gLQl9 Cj4gLQo+IC0JaWYgKGkgPT0gQVJSQVlfU0laRSh3aGl0ZWxpc3QpKQo+IC0JCXJldHVybiAtRUlO VkFMOwo+IC0KPiAtCXN3aXRjaCAoZW50cnktPnNpemUpIHsKPiAtCWNhc2UgODoKPiAtCQlyZWct PnZhbCA9IEk5MTVfUkVBRDY0KHJlZy0+b2Zmc2V0KTsKPiAtCQlicmVhazsKPiAtCWNhc2UgNDoK PiAtCQlyZWctPnZhbCA9IEk5MTVfUkVBRChyZWctPm9mZnNldCk7Cj4gLQkJYnJlYWs7Cj4gLQlj YXNlIDI6Cj4gLQkJcmVnLT52YWwgPSBJOTE1X1JFQUQxNihyZWctPm9mZnNldCk7Cj4gLQkJYnJl YWs7Cj4gLQljYXNlIDE6Cj4gLQkJcmVnLT52YWwgPSBJOTE1X1JFQUQ4KHJlZy0+b2Zmc2V0KTsK PiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4gLQkJV0FSTl9PTigxKTsKPiAtCQlyZXR1cm4gLUVJ TlZBTDsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aAo+IGluZGV4IGNlZjM1ZDMuLmYxNGVkZGYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK PiBAQCAtMzkxLDExICszOTEsMjAgQEAgc3RydWN0IGRybV9pOTE1X2Rpc3BsYXlfZnVuY3Mgewo+ ICAJLyogcGxsIGNsb2NrIGluY3JlYXNlL2RlY3JlYXNlICovCj4gIH07Cj4gIAo+IC1zdHJ1Y3Qg ZHJtX2k5MTVfZ3RfZnVuY3Mgewo+ICtzdHJ1Y3QgaW50ZWxfdW5jb3JlX2Z1bmNzIHsKPiAgCXZv aWQgKCpmb3JjZV93YWtlX2dldCkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsK PiAgCXZvaWQgKCpmb3JjZV93YWtlX3B1dCkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KTsKPiAgfTsKPiAgCj4gK3N0cnVjdCBpbnRlbF91bmNvcmUgewo+ICsJc3BpbmxvY2tfdCBs b2NrOyAvKiogbG9jayBpcyBhbHNvIHRha2VuIGluIGlycSBjb250ZXh0cy4gKi8KPiArCj4gKwlz dHJ1Y3QgaW50ZWxfdW5jb3JlX2Z1bmNzIGZ1bmNzOwo+ICsKPiArCXVuc2lnbmVkIGZpZm9fY291 bnQ7Cj4gKwl1bnNpZ25lZCBmb3JjZXdha2VfY291bnQ7Cj4gK307Cj4gKwo+ICAjZGVmaW5lIERF Vl9JTkZPX0ZPUl9FQUNIX0ZMQUcoZnVuYywgc2VwKSBcCj4gIAlmdW5jKGlzX21vYmlsZSkgc2Vw IFwKPiAgCWZ1bmMoaXNfaTg1eCkgc2VwIFwKPiBAQCAtMTAyNCwxNCArMTAzMyw3IEBAIHR5cGVk ZWYgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewo+ICAKPiAgCXZvaWQgX19pb21lbSAqcmVnczsK PiAgCj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ3RfZnVuY3MgZ3Q7Cj4gLQkvKiogZ3RfZmlmb19jb3Vu dCBhbmQgdGhlIHN1YnNlcXVlbnQgcmVnaXN0ZXIgd3JpdGUgYXJlIHN5bmNocm9uaXplZAo+IC0J ICogd2l0aCBkZXYtPnN0cnVjdF9tdXRleC4gKi8KPiAtCXVuc2lnbmVkIGd0X2ZpZm9fY291bnQ7 Cj4gLQkvKiogZm9yY2V3YWtlX2NvdW50IGlzIHByb3RlY3RlZCBieSBndF9sb2NrICovCj4gLQl1 bnNpZ25lZCBmb3JjZXdha2VfY291bnQ7Cj4gLQkvKiogZ3RfbG9jayBpcyBhbHNvIHRha2VuIGlu IGlycSBjb250ZXh0cy4gKi8KPiAtCXNwaW5sb2NrX3QgZ3RfbG9jazsKPiArCXN0cnVjdCBpbnRl bF91bmNvcmUgdW5jb3JlOwo+ICAKPiAgCXN0cnVjdCBpbnRlbF9nbWJ1cyBnbWJ1c1tHTUJVU19O VU1fUE9SVFNdOwo+ICAKPiBAQCAtMTYyNCw4ICsxNjI2LDEzIEBAIHZvaWQgaTkxNV9oYW5kbGVf ZXJyb3Ioc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCB3ZWRnZWQpOwo+ICAKPiAgZXh0ZXJu IHZvaWQgaW50ZWxfaXJxX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gIGV4dGVybiB2 b2lkIGludGVsX2hwZF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+IC1leHRlcm4gdm9p ZCBpbnRlbF9ndF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+IC1leHRlcm4gdm9pZCBp bnRlbF9ndF9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiArZXh0ZXJuIHZvaWQgaW50 ZWxfcG1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiArCj4gK2V4dGVybiB2b2lkIGlu dGVsX3VuY29yZV9lYXJseV9zYW5pdGl6ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiArZXh0 ZXJuIHZvaWQgaW50ZWxfdW5jb3JlX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gK2V4 dGVybiB2b2lkIGludGVsX3VuY29yZV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAr ZXh0ZXJuIHZvaWQgaW50ZWxfdW5jb3JlX2NsZWFyX2Vycm9ycyhzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KTsKPiArZXh0ZXJuIHZvaWQgaW50ZWxfdW5jb3JlX2NoZWNrX2Vycm9ycyhzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKPiAgCj4gIHZvaWQKPiAgaTkxNV9lbmFibGVfcGlwZXN0YXQoZHJtX2k5 MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IHBpcGUsIHUzMiBtYXNrKTsKPiBAQCAtMjA1OCw3 ICsyMDY1LDYgQEAgZXh0ZXJuIHZvaWQgaW50ZWxfZGlzcGxheV9wcmludF9lcnJvcl9zdGF0ZShz dHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGVfYnVmICplLAo+ICAgKi8KPiAgdm9pZCBnZW42X2d0 X2ZvcmNlX3dha2VfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIHZv aWQgZ2VuNl9ndF9mb3JjZV93YWtlX3B1dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpOwo+IC1pbnQgX19nZW42X2d0X3dhaXRfZm9yX2ZpZm8oc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KTsKPiAgCj4gIGludCBzYW5keWJyaWRnZV9wY29kZV9yZWFkKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTggbWJveCwgdTMyICp2YWwpOwo+ICBpbnQgc2Fu ZHlicmlkZ2VfcGNvZGVfd3JpdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1 OCBtYm94LCB1MzIgdmFsKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKPiBpbmRleCA2NGRiNjgw Zi4uNTlhZWM2NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwo+IEBAIC0xMjE0LDExICsx MjE0LDcgQEAgc3RhdGljIGlycXJldHVybl90IGl2eWJyaWRnZV9pcnFfaGFuZGxlcihpbnQgaXJx LCB2b2lkICphcmcpCj4gIAo+ICAJLyogV2UgZ2V0IGludGVycnVwdHMgb24gdW5jbGFpbWVkIHJl Z2lzdGVycywgc28gY2hlY2sgZm9yIHRoaXMgYmVmb3JlIHdlCj4gIAkgKiBkbyBhbnkgSTkxNV97 UkVBRCxXUklURX0uICovCj4gLQlpZiAoSVNfSEFTV0VMTChkZXYpICYmCj4gLQkgICAgKEk5MTVf UkVBRF9OT1RSQUNFKEZQR0FfREJHKSAmIEZQR0FfREJHX1JNX05PQ0xBSU0pKSB7Cj4gLQkJRFJN X0VSUk9SKCJVbmNsYWltZWQgcmVnaXN0ZXIgYmVmb3JlIGludGVycnVwdFxuIik7Cj4gLQkJSTkx NV9XUklURV9OT1RSQUNFKEZQR0FfREJHLCBGUEdBX0RCR19STV9OT0NMQUlNKTsKPiAtCX0KPiAr CWludGVsX3VuY29yZV9jaGVja19lcnJvcnMoZGV2KTsKPiAgCj4gIAkvKiBkaXNhYmxlIG1hc3Rl ciBpbnRlcnJ1cHQgYmVmb3JlIGNsZWFyaW5nIGlpciAgKi8KPiAgCWRlX2llciA9IEk5MTVfUkVB RChERUlFUik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3Bs YXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IGluZGV4IGM3OWFk ZGQuLjRhY2E3MmYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlz cGxheS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gQEAg LTEwMjUzLDggKzEwMjUzLDcgQEAgaW50ZWxfZGlzcGxheV9jYXB0dXJlX2Vycm9yX3N0YXRlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAkgKiB3ZWxsIHdhcyBvbiwgc28gaGVyZSB3ZSBoYXZl IHRvIGNsZWFyIHRoZSBGUEdBX0RCR19STV9OT0NMQUlNIGJpdCB0bwo+ICAJICogcHJldmVudCB0 aGUgbmV4dCBJOTE1X1dSSVRFIGZyb20gZGV0ZWN0aW5nIGl0IGFuZCBwcmludGluZyBhbiBlcnJv cgo+ICAJICogbWVzc2FnZS4gKi8KPiAtCWlmIChIQVNfUE9XRVJfV0VMTChkZXYpKQo+IC0JCUk5 MTVfV1JJVEVfTk9UUkFDRShGUEdBX0RCRywgRlBHQV9EQkdfUk1fTk9DTEFJTSk7Cj4gKwlpbnRl bF91bmNvcmVfY2xlYXJfZXJyb3JzKGRldik7Cj4gIAo+ICAJcmV0dXJuIGVycm9yOwo+ICB9Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiBpbmRleCA1ZGZjMWEwLi5mNzA1ZWYzIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiBAQCAtODA0LDcgKzgwNCw2IEBAIGV4dGVybiB2b2lk IGludGVsX2luaXRfcG93ZXJfd2VsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAgZXh0ZXJu IHZvaWQgaW50ZWxfc2V0X3Bvd2VyX3dlbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBl bmFibGUpOwo+ICBleHRlcm4gdm9pZCBpbnRlbF9lbmFibGVfZ3RfcG93ZXJzYXZlKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpOwo+ICBleHRlcm4gdm9pZCBpbnRlbF9kaXNhYmxlX2d0X3Bvd2Vyc2F2 ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAtZXh0ZXJuIHZvaWQgZ2VuNl9ndF9jaGVja19m aWZvZGJnKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIGV4dGVybiB2b2lk IGlyb25sYWtlX3RlYXJkb3duX3JjNihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAgCj4gIGV4 dGVybiBib29sIGludGVsX2RkaV9nZXRfaHdfc3RhdGUoc3RydWN0IGludGVsX2VuY29kZXIgKmVu Y29kZXIsCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gaW5kZXggZmI0YWZhYS4uZjZjMzYwOCAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+IEBAIC0zMiw4ICszMiw2IEBACj4gICNpbmNs dWRlIDxsaW51eC9tb2R1bGUuaD4KPiAgI2luY2x1ZGUgPGRybS9pOTE1X3Bvd2Vyd2VsbC5oPgo+ ICAKPiAtI2RlZmluZSBGT1JDRVdBS0VfQUNLX1RJTUVPVVRfTVMgMgo+IC0KPiAgLyogRkJDLCBv ciBGcmFtZSBCdWZmZXIgQ29tcHJlc3Npb24sIGlzIGEgdGVjaG5pcXVlIGVtcGxveWVkIHRvIGNv bXByZXNzIHRoZQo+ICAgKiBmcmFtZWJ1ZmZlciBjb250ZW50cyBpbi1tZW1vcnksIGFpbWluZyBh dCByZWR1Y2luZyB0aGUgcmVxdWlyZWQgYmFuZHdpZHRoCj4gICAqIGR1cmluZyBpbi1tZW1vcnkg dHJhbnNmZXJzIGFuZCwgdGhlcmVmb3JlLCByZWR1Y2UgdGhlIHBvd2VyIHBhY2tldC4KPiBAQCAt NTI4NCwyNTQgKzUyODIsNiBAQCB2b2lkIGludGVsX2luaXRfcG0oc3RydWN0IGRybV9kZXZpY2Ug KmRldikKPiAgCX0KPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgX19nZW42X2d0X3dhaXRfZm9yX3Ro cmVhZF9jMChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXUzMiBn dF90aHJlYWRfc3RhdHVzX21hc2s7Cj4gLQo+IC0JaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYtPmRl dikpCj4gLQkJZ3RfdGhyZWFkX3N0YXR1c19tYXNrID0gR0VONl9HVF9USFJFQURfU1RBVFVTX0NP UkVfTUFTS19IU1c7Cj4gLQllbHNlCj4gLQkJZ3RfdGhyZWFkX3N0YXR1c19tYXNrID0gR0VONl9H VF9USFJFQURfU1RBVFVTX0NPUkVfTUFTSzsKPiAtCj4gLQkvKiB3L2EgZm9yIGEgc3BvcmFkaWMg cmVhZCByZXR1cm5pbmcgMCBieSB3YWl0aW5nIGZvciB0aGUgR1QKPiAtCSAqIHRocmVhZCB0byB3 YWtlIHVwLgo+IC0JICovCj4gLQlpZiAod2FpdF9mb3JfYXRvbWljX3VzKChJOTE1X1JFQURfTk9U UkFDRShHRU42X0dUX1RIUkVBRF9TVEFUVVNfUkVHKSAmIGd0X3RocmVhZF9zdGF0dXNfbWFzaykg PT0gMCwgNTAwKSkKPiAtCQlEUk1fRVJST1IoIkdUIHRocmVhZCBzdGF0dXMgd2FpdCB0aW1lZCBv dXRcbiIpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9yZXNl dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCUk5MTVfV1JJVEVf Tk9UUkFDRShGT1JDRVdBS0UsIDApOwo+IC0JUE9TVElOR19SRUFEKEVDT0JVUyk7IC8qIHNvbWV0 aGluZyBmcm9tIHNhbWUgY2FjaGVsaW5lLCBidXQgIUZPUkNFV0FLRSAqLwo+IC19Cj4gLQo+IC1z dGF0aWMgdm9pZCBfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9nZXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQo+IC17Cj4gLQlpZiAod2FpdF9mb3JfYXRvbWljKChJOTE1X1JFQURfTk9U UkFDRShGT1JDRVdBS0VfQUNLKSAmIDEpID09IDAsCj4gLQkJCSAgICBGT1JDRVdBS0VfQUNLX1RJ TUVPVVRfTVMpKQo+IC0JCURSTV9FUlJPUigiVGltZWQgb3V0IHdhaXRpbmcgZm9yIGZvcmNld2Fr ZSBvbGQgYWNrIHRvIGNsZWFyLlxuIik7Cj4gLQo+IC0JSTkxNV9XUklURV9OT1RSQUNFKEZPUkNF V0FLRSwgMSk7Cj4gLQlQT1NUSU5HX1JFQUQoRUNPQlVTKTsgLyogc29tZXRoaW5nIGZyb20gc2Ft ZSBjYWNoZWxpbmUsIGJ1dCAhRk9SQ0VXQUtFICovCj4gLQo+IC0JaWYgKHdhaXRfZm9yX2F0b21p YygoSTkxNV9SRUFEX05PVFJBQ0UoRk9SQ0VXQUtFX0FDSykgJiAxKSwKPiAtCQkJICAgIEZPUkNF V0FLRV9BQ0tfVElNRU9VVF9NUykpCj4gLQkJRFJNX0VSUk9SKCJUaW1lZCBvdXQgd2FpdGluZyBm b3IgZm9yY2V3YWtlIHRvIGFjayByZXF1ZXN0LlxuIik7Cj4gLQo+IC0JLyogV2FSc0ZvcmNld2Fr ZVdhaXRUQzA6c25iICovCj4gLQlfX2dlbjZfZ3Rfd2FpdF9mb3JfdGhyZWFkX2MwKGRldl9wcml2 KTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgX19nZW42X2d0X2ZvcmNlX3dha2VfbXRfcmVzZXQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlJOTE1X1dSSVRFX05P VFJBQ0UoRk9SQ0VXQUtFX01ULCBfTUFTS0VEX0JJVF9ESVNBQkxFKDB4ZmZmZikpOwo+IC0JLyog c29tZXRoaW5nIGZyb20gc2FtZSBjYWNoZWxpbmUsIGJ1dCAhRk9SQ0VXQUtFX01UICovCj4gLQlQ T1NUSU5HX1JFQUQoRUNPQlVTKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgX19nZW42X2d0X2Zv cmNlX3dha2VfbXRfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+ IC0JdTMyIGZvcmNld2FrZV9hY2s7Cj4gLQo+IC0JaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYtPmRl dikpCj4gLQkJZm9yY2V3YWtlX2FjayA9IEZPUkNFV0FLRV9BQ0tfSFNXOwo+IC0JZWxzZQo+IC0J CWZvcmNld2FrZV9hY2sgPSBGT1JDRVdBS0VfTVRfQUNLOwo+IC0KPiAtCWlmICh3YWl0X2Zvcl9h dG9taWMoKEk5MTVfUkVBRF9OT1RSQUNFKGZvcmNld2FrZV9hY2spICYgRk9SQ0VXQUtFX0tFUk5F TCkgPT0gMCwKPiAtCQkJICAgIEZPUkNFV0FLRV9BQ0tfVElNRU9VVF9NUykpCj4gLQkJRFJNX0VS Uk9SKCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgZm9yY2V3YWtlIG9sZCBhY2sgdG8gY2xlYXIuXG4i KTsKPiAtCj4gLQlJOTE1X1dSSVRFX05PVFJBQ0UoRk9SQ0VXQUtFX01ULCBfTUFTS0VEX0JJVF9F TkFCTEUoRk9SQ0VXQUtFX0tFUk5FTCkpOwo+IC0JLyogc29tZXRoaW5nIGZyb20gc2FtZSBjYWNo ZWxpbmUsIGJ1dCAhRk9SQ0VXQUtFX01UICovCj4gLQlQT1NUSU5HX1JFQUQoRUNPQlVTKTsKPiAt Cj4gLQlpZiAod2FpdF9mb3JfYXRvbWljKChJOTE1X1JFQURfTk9UUkFDRShmb3JjZXdha2VfYWNr KSAmIEZPUkNFV0FLRV9LRVJORUwpLAo+IC0JCQkgICAgRk9SQ0VXQUtFX0FDS19USU1FT1VUX01T KSkKPiAtCQlEUk1fRVJST1IoIlRpbWVkIG91dCB3YWl0aW5nIGZvciBmb3JjZXdha2UgdG8gYWNr IHJlcXVlc3QuXG4iKTsKPiAtCj4gLQkvKiBXYVJzRm9yY2V3YWtlV2FpdFRDMDppdmIsaHN3ICov Cj4gLQlfX2dlbjZfZ3Rfd2FpdF9mb3JfdGhyZWFkX2MwKGRldl9wcml2KTsKPiAtfQo+IC0KPiAt LyoKPiAtICogR2VuZXJhbGx5IHRoaXMgaXMgY2FsbGVkIGltcGxpY2l0bHkgYnkgdGhlIHJlZ2lz dGVyIHJlYWQgZnVuY3Rpb24uIEhvd2V2ZXIsCj4gLSAqIGlmIHNvbWUgc2VxdWVuY2UgcmVxdWly ZXMgdGhlIEdUIHRvIG5vdCBwb3dlciBkb3duIHRoZW4gdGhpcyBmdW5jdGlvbiBzaG91bGQKPiAt ICogYmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlcXVlbmNlIGZvbGxvd2VkIGJ5 IGEgY2FsbCB0bwo+IC0gKiBnZW42X2d0X2ZvcmNlX3dha2VfcHV0KCkgYXQgdGhlIGVuZCBvZiB0 aGUgc2VxdWVuY2UuCj4gLSAqLwo+IC12b2lkIGdlbjZfZ3RfZm9yY2Vfd2FrZV9nZXQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQl1bnNpZ25lZCBsb25nIGlycWZs YWdzOwo+IC0KPiAtCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+Z3RfbG9jaywgaXJxZmxh Z3MpOwo+IC0JaWYgKGRldl9wcml2LT5mb3JjZXdha2VfY291bnQrKyA9PSAwKQo+IC0JCWRldl9w cml2LT5ndC5mb3JjZV93YWtlX2dldChkZXZfcHJpdik7Cj4gLQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZkZXZfcHJpdi0+Z3RfbG9jaywgaXJxZmxhZ3MpOwo+IC19Cj4gLQo+IC12b2lkIGdlbjZf Z3RfY2hlY2tfZmlmb2RiZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsK PiAtCXUzMiBndGZpZm9kYmc7Cj4gLQlndGZpZm9kYmcgPSBJOTE1X1JFQURfTk9UUkFDRShHVEZJ Rk9EQkcpOwo+IC0JaWYgKFdBUk4oZ3RmaWZvZGJnICYgR1RfRklGT19DUFVfRVJST1JfTUFTSywK PiAtCSAgICAgIk1NSU8gcmVhZCBvciB3cml0ZSBoYXMgYmVlbiBkcm9wcGVkICV4XG4iLCBndGZp Zm9kYmcpKQo+IC0JCUk5MTVfV1JJVEVfTk9UUkFDRShHVEZJRk9EQkcsIEdUX0ZJRk9fQ1BVX0VS Uk9SX01BU0spOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9w dXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlJOTE1X1dSSVRF X05PVFJBQ0UoRk9SQ0VXQUtFLCAwKTsKPiAtCS8qIHNvbWV0aGluZyBmcm9tIHNhbWUgY2FjaGVs aW5lLCBidXQgIUZPUkNFV0FLRSAqLwo+IC0JUE9TVElOR19SRUFEKEVDT0JVUyk7Cj4gLQlnZW42 X2d0X2NoZWNrX2ZpZm9kYmcoZGV2X3ByaXYpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBfX2dl bjZfZ3RfZm9yY2Vfd2FrZV9tdF9wdXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+IC17Cj4gLQlJOTE1X1dSSVRFX05PVFJBQ0UoRk9SQ0VXQUtFX01ULCBfTUFTS0VEX0JJVF9E SVNBQkxFKEZPUkNFV0FLRV9LRVJORUwpKTsKPiAtCS8qIHNvbWV0aGluZyBmcm9tIHNhbWUgY2Fj aGVsaW5lLCBidXQgIUZPUkNFV0FLRV9NVCAqLwo+IC0JUE9TVElOR19SRUFEKEVDT0JVUyk7Cj4g LQlnZW42X2d0X2NoZWNrX2ZpZm9kYmcoZGV2X3ByaXYpOwo+IC19Cj4gLQo+IC0vKgo+IC0gKiBz ZWUgZ2VuNl9ndF9mb3JjZV93YWtlX2dldCgpCj4gLSAqLwo+IC12b2lkIGdlbjZfZ3RfZm9yY2Vf d2FrZV9wdXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQl1bnNp Z25lZCBsb25nIGlycWZsYWdzOwo+IC0KPiAtCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+ Z3RfbG9jaywgaXJxZmxhZ3MpOwo+IC0JaWYgKC0tZGV2X3ByaXYtPmZvcmNld2FrZV9jb3VudCA9 PSAwKQo+IC0JCWRldl9wcml2LT5ndC5mb3JjZV93YWtlX3B1dChkZXZfcHJpdik7Cj4gLQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+Z3RfbG9jaywgaXJxZmxhZ3MpOwo+IC19Cj4g LQo+IC1pbnQgX19nZW42X2d0X3dhaXRfZm9yX2ZpZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQo+IC17Cj4gLQlpbnQgcmV0ID0gMDsKPiAtCj4gLQlpZiAoZGV2X3ByaXYtPmd0 X2ZpZm9fY291bnQgPCBHVF9GSUZPX05VTV9SRVNFUlZFRF9FTlRSSUVTKSB7Cj4gLQkJaW50IGxv b3AgPSA1MDA7Cj4gLQkJdTMyIGZpZm8gPSBJOTE1X1JFQURfTk9UUkFDRShHVF9GSUZPX0ZSRUVf RU5UUklFUyk7Cj4gLQkJd2hpbGUgKGZpZm8gPD0gR1RfRklGT19OVU1fUkVTRVJWRURfRU5UUklF UyAmJiBsb29wLS0pIHsKPiAtCQkJdWRlbGF5KDEwKTsKPiAtCQkJZmlmbyA9IEk5MTVfUkVBRF9O T1RSQUNFKEdUX0ZJRk9fRlJFRV9FTlRSSUVTKTsKPiAtCQl9Cj4gLQkJaWYgKFdBUk5fT04obG9v cCA8IDAgJiYgZmlmbyA8PSBHVF9GSUZPX05VTV9SRVNFUlZFRF9FTlRSSUVTKSkKPiAtCQkJKyty ZXQ7Cj4gLQkJZGV2X3ByaXYtPmd0X2ZpZm9fY291bnQgPSBmaWZvOwo+IC0JfQo+IC0JZGV2X3By aXYtPmd0X2ZpZm9fY291bnQtLTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC1zdGF0 aWMgdm9pZCB2bHZfZm9yY2Vfd2FrZV9yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gLXsKPiAtCUk5MTVfV1JJVEVfTk9UUkFDRShGT1JDRVdBS0VfVkxWLCBfTUFTS0VE X0JJVF9ESVNBQkxFKDB4ZmZmZikpOwo+IC0JLyogc29tZXRoaW5nIGZyb20gc2FtZSBjYWNoZWxp bmUsIGJ1dCAhRk9SQ0VXQUtFX1ZMViAqLwo+IC0JUE9TVElOR19SRUFEKEZPUkNFV0FLRV9BQ0tf VkxWKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgdmx2X2ZvcmNlX3dha2VfZ2V0KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JaWYgKHdhaXRfZm9yX2F0b21pYygo STkxNV9SRUFEX05PVFJBQ0UoRk9SQ0VXQUtFX0FDS19WTFYpICYgRk9SQ0VXQUtFX0tFUk5FTCkg PT0gMCwKPiAtCQkJICAgIEZPUkNFV0FLRV9BQ0tfVElNRU9VVF9NUykpCj4gLQkJRFJNX0VSUk9S KCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgZm9yY2V3YWtlIG9sZCBhY2sgdG8gY2xlYXIuXG4iKTsK PiAtCj4gLQlJOTE1X1dSSVRFX05PVFJBQ0UoRk9SQ0VXQUtFX1ZMViwgX01BU0tFRF9CSVRfRU5B QkxFKEZPUkNFV0FLRV9LRVJORUwpKTsKPiAtCUk5MTVfV1JJVEVfTk9UUkFDRShGT1JDRVdBS0Vf TUVESUFfVkxWLAo+IC0JCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoRk9SQ0VXQUtFX0tFUk5FTCkp Owo+IC0KPiAtCWlmICh3YWl0X2Zvcl9hdG9taWMoKEk5MTVfUkVBRF9OT1RSQUNFKEZPUkNFV0FL RV9BQ0tfVkxWKSAmIEZPUkNFV0FLRV9LRVJORUwpLAo+IC0JCQkgICAgRk9SQ0VXQUtFX0FDS19U SU1FT1VUX01TKSkKPiAtCQlEUk1fRVJST1IoIlRpbWVkIG91dCB3YWl0aW5nIGZvciBHVCB0byBh Y2sgZm9yY2V3YWtlIHJlcXVlc3QuXG4iKTsKPiAtCj4gLQlpZiAod2FpdF9mb3JfYXRvbWljKChJ OTE1X1JFQURfTk9UUkFDRShGT1JDRVdBS0VfQUNLX01FRElBX1ZMVikgJgo+IC0JCQkgICAgIEZP UkNFV0FLRV9LRVJORUwpLAo+IC0JCQkgICAgRk9SQ0VXQUtFX0FDS19USU1FT1VUX01TKSkKPiAt CQlEUk1fRVJST1IoIlRpbWVkIG91dCB3YWl0aW5nIGZvciBtZWRpYSB0byBhY2sgZm9yY2V3YWtl IHJlcXVlc3QuXG4iKTsKPiAtCj4gLQkvKiBXYVJzRm9yY2V3YWtlV2FpdFRDMDp2bHYgKi8KPiAt CV9fZ2VuNl9ndF93YWl0X2Zvcl90aHJlYWRfYzAoZGV2X3ByaXYpOwo+IC19Cj4gLQo+IC1zdGF0 aWMgdm9pZCB2bHZfZm9yY2Vfd2FrZV9wdXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQo+IC17Cj4gLQlJOTE1X1dSSVRFX05PVFJBQ0UoRk9SQ0VXQUtFX1ZMViwgX01BU0tFRF9C SVRfRElTQUJMRShGT1JDRVdBS0VfS0VSTkVMKSk7Cj4gLQlJOTE1X1dSSVRFX05PVFJBQ0UoRk9S Q0VXQUtFX01FRElBX1ZMViwKPiAtCQkJICAgX01BU0tFRF9CSVRfRElTQUJMRShGT1JDRVdBS0Vf S0VSTkVMKSk7Cj4gLQkvKiBUaGUgYmVsb3cgZG91YmxlcyBhcyBhIFBPU1RJTkdfUkVBRCAqLwo+ IC0JZ2VuNl9ndF9jaGVja19maWZvZGJnKGRldl9wcml2KTsKPiAtfQo+IC0KPiAtdm9pZCBpbnRl bF9ndF9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0KPiAtCWlmIChJU19W QUxMRVlWSUVXKGRldikpIHsKPiAtCQl2bHZfZm9yY2Vfd2FrZV9yZXNldChkZXZfcHJpdik7Cj4g LQl9IGVsc2UgaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDYpIHsKPiAtCQlfX2dlbjZfZ3Rf Zm9yY2Vfd2FrZV9yZXNldChkZXZfcHJpdik7Cj4gLQkJaWYgKElTX0lWWUJSSURHRShkZXYpIHx8 IElTX0hBU1dFTEwoZGV2KSkKPiAtCQkJX19nZW42X2d0X2ZvcmNlX3dha2VfbXRfcmVzZXQoZGV2 X3ByaXYpOwo+IC0JfQo+IC19Cj4gLQo+IC12b2lkIGludGVsX2d0X2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCj4gLQlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPmd0X2xv Y2spOwo+IC0KPiAtCWludGVsX2d0X3Jlc2V0KGRldik7Cj4gLQo+IC0JaWYgKElTX1ZBTExFWVZJ RVcoZGV2KSkgewo+IC0JCWRldl9wcml2LT5ndC5mb3JjZV93YWtlX2dldCA9IHZsdl9mb3JjZV93 YWtlX2dldDsKPiAtCQlkZXZfcHJpdi0+Z3QuZm9yY2Vfd2FrZV9wdXQgPSB2bHZfZm9yY2Vfd2Fr ZV9wdXQ7Cj4gLQl9IGVsc2UgaWYgKElTX0hBU1dFTEwoZGV2KSkgewo+IC0JCWRldl9wcml2LT5n dC5mb3JjZV93YWtlX2dldCA9IF9fZ2VuNl9ndF9mb3JjZV93YWtlX210X2dldDsKPiAtCQlkZXZf cHJpdi0+Z3QuZm9yY2Vfd2FrZV9wdXQgPSBfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9tdF9wdXQ7Cj4g LQl9IGVsc2UgaWYgKElTX0lWWUJSSURHRShkZXYpKSB7Cj4gLQkJdTMyIGVjb2J1czsKPiAtCj4g LQkJLyogSVZCIGNvbmZpZ3MgbWF5IHVzZSBtdWx0aS10aHJlYWRlZCBmb3JjZXdha2UgKi8KPiAt Cj4gLQkJLyogQSBzbWFsbCB0cmljayBoZXJlIC0gaWYgdGhlIGJpb3MgaGFzbid0IGNvbmZpZ3Vy ZWQKPiAtCQkgKiBNVCBmb3JjZXdha2UsIGFuZCBpZiB0aGUgZGV2aWNlIGlzIGluIFJDNiwgdGhl bgo+IC0JCSAqIGZvcmNlX3dha2VfbXRfZ2V0IHdpbGwgbm90IHdha2UgdGhlIGRldmljZSBhbmQg dGhlCj4gLQkJICogRUNPQlVTIHJlYWQgd2lsbCByZXR1cm4gemVyby4gV2hpY2ggd2lsbCBiZQo+ IC0JCSAqIChjb3JyZWN0bHkpIGludGVycHJldGVkIGJ5IHRoZSB0ZXN0IGJlbG93IGFzIE1UCj4g LQkJICogZm9yY2V3YWtlIGJlaW5nIGRpc2FibGVkLgo+IC0JCSAqLwo+IC0JCW11dGV4X2xvY2so JmRldi0+c3RydWN0X211dGV4KTsKPiAtCQlfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9tdF9nZXQoZGV2 X3ByaXYpOwo+IC0JCWVjb2J1cyA9IEk5MTVfUkVBRF9OT1RSQUNFKEVDT0JVUyk7Cj4gLQkJX19n ZW42X2d0X2ZvcmNlX3dha2VfbXRfcHV0KGRldl9wcml2KTsKPiAtCQltdXRleF91bmxvY2soJmRl di0+c3RydWN0X211dGV4KTsKPiAtCj4gLQkJaWYgKGVjb2J1cyAmIEZPUkNFV0FLRV9NVF9FTkFC TEUpIHsKPiAtCQkJZGV2X3ByaXYtPmd0LmZvcmNlX3dha2VfZ2V0ID0KPiAtCQkJCQkJX19nZW42 X2d0X2ZvcmNlX3dha2VfbXRfZ2V0Owo+IC0JCQlkZXZfcHJpdi0+Z3QuZm9yY2Vfd2FrZV9wdXQg PQo+IC0JCQkJCQlfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9tdF9wdXQ7Cj4gLQkJfSBlbHNlIHsKPiAt CQkJRFJNX0lORk8oIk5vIE1UIGZvcmNld2FrZSBhdmFpbGFibGUgb24gSXZ5YnJpZGdlLCB0aGlz IGNhbiByZXN1bHQgaW4gaXNzdWVzXG4iKTsKPiAtCQkJRFJNX0lORk8oIndoZW4gdXNpbmcgdmJs YW5rLXN5bmNlZCBwYXJ0aWFsIHNjcmVlbiB1cGRhdGVzLlxuIik7Cj4gLQkJCWRldl9wcml2LT5n dC5mb3JjZV93YWtlX2dldCA9IF9fZ2VuNl9ndF9mb3JjZV93YWtlX2dldDsKPiAtCQkJZGV2X3By aXYtPmd0LmZvcmNlX3dha2VfcHV0ID0gX19nZW42X2d0X2ZvcmNlX3dha2VfcHV0Owo+IC0JCX0K PiAtCX0gZWxzZSBpZiAoSVNfR0VONihkZXYpKSB7Cj4gLQkJZGV2X3ByaXYtPmd0LmZvcmNlX3dh a2VfZ2V0ID0gX19nZW42X2d0X2ZvcmNlX3dha2VfZ2V0Owo+IC0JCWRldl9wcml2LT5ndC5mb3Jj ZV93YWtlX3B1dCA9IF9fZ2VuNl9ndF9mb3JjZV93YWtlX3B1dDsKPiAtCX0KPiAtCUlOSVRfREVM QVlFRF9XT1JLKCZkZXZfcHJpdi0+cnBzLmRlbGF5ZWRfcmVzdW1lX3dvcmssCj4gLQkJCSAgaW50 ZWxfZ2VuNl9wb3dlcnNhdmVfd29yayk7Cj4gLX0KPiAtCj4gIGludCBzYW5keWJyaWRnZV9wY29k ZV9yZWFkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTggbWJveCwgdTMyICp2 YWwpCj4gIHsKPiAgCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2X3ByaXYtPnJwcy5od19s b2NrKSk7Cj4gQEAgLTU2MzQsMyArNTM4NCwxMSBAQCBpbnQgdmx2X2ZyZXFfb3Bjb2RlKGludCBk ZHJfZnJlcSwgaW50IHZhbCkKPiAgCXJldHVybiB2YWw7Cj4gIH0KPiAgCj4gK3ZvaWQgaW50ZWxf cG1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsKPiArCUlOSVRfREVMQVlF RF9XT1JLKCZkZXZfcHJpdi0+cnBzLmRlbGF5ZWRfcmVzdW1lX3dvcmssCj4gKwkJCSAgaW50ZWxf Z2VuNl9wb3dlcnNhdmVfd29yayk7Cj4gK30KPiArCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3VuY29yZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5j b3JlLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjhjMmY0NjAKPiAt LS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMK PiBAQCAtMCwwICsxLDU2OSBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxMyBJbnRlbCBD b3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4 dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM Cj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig T1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKi8KPiArCj4gKyNpbmNs dWRlICJpOTE1X2Rydi5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCj4gKwo+ICsjZGVmaW5l IEZPUkNFV0FLRV9BQ0tfVElNRU9VVF9NUyAyCj4gKwo+ICtzdGF0aWMgdm9pZCBfX2dlbjZfZ3Rf d2FpdF9mb3JfdGhyZWFkX2MwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAr ewo+ICsJdTMyIGd0X3RocmVhZF9zdGF0dXNfbWFzazsKPiArCj4gKwlpZiAoSVNfSEFTV0VMTChk ZXZfcHJpdi0+ZGV2KSkKPiArCQlndF90aHJlYWRfc3RhdHVzX21hc2sgPSBHRU42X0dUX1RIUkVB RF9TVEFUVVNfQ09SRV9NQVNLX0hTVzsKPiArCWVsc2UKPiArCQlndF90aHJlYWRfc3RhdHVzX21h c2sgPSBHRU42X0dUX1RIUkVBRF9TVEFUVVNfQ09SRV9NQVNLOwo+ICsKPiArCS8qIHcvYSBmb3Ig YSBzcG9yYWRpYyByZWFkIHJldHVybmluZyAwIGJ5IHdhaXRpbmcgZm9yIHRoZSBHVAo+ICsJICog dGhyZWFkIHRvIHdha2UgdXAuCj4gKwkgKi8KPiArCWlmICh3YWl0X2Zvcl9hdG9taWNfdXMoKEk5 MTVfUkVBRF9OT1RSQUNFKEdFTjZfR1RfVEhSRUFEX1NUQVRVU19SRUcpICYgZ3RfdGhyZWFkX3N0 YXR1c19tYXNrKSA9PSAwLCA1MDApKQo+ICsJCURSTV9FUlJPUigiR1QgdGhyZWFkIHN0YXR1cyB3 YWl0IHRpbWVkIG91dFxuIik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fZ2VuNl9ndF9mb3Jj ZV93YWtlX3Jlc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJ STkxNV9XUklURV9OT1RSQUNFKEZPUkNFV0FLRSwgMCk7Cj4gKwlQT1NUSU5HX1JFQUQoRUNPQlVT KTsgLyogc29tZXRoaW5nIGZyb20gc2FtZSBjYWNoZWxpbmUsIGJ1dCAhRk9SQ0VXQUtFICovCj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIF9fZ2VuNl9ndF9mb3JjZV93YWtlX2dldChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCWlmICh3YWl0X2Zvcl9hdG9taWMoKEk5 MTVfUkVBRF9OT1RSQUNFKEZPUkNFV0FLRV9BQ0spICYgMSkgPT0gMCwKPiArCQkJICAgIEZPUkNF V0FLRV9BQ0tfVElNRU9VVF9NUykpCj4gKwkJRFJNX0VSUk9SKCJUaW1lZCBvdXQgd2FpdGluZyBm b3IgZm9yY2V3YWtlIG9sZCBhY2sgdG8gY2xlYXIuXG4iKTsKPiArCj4gKwlJOTE1X1dSSVRFX05P VFJBQ0UoRk9SQ0VXQUtFLCAxKTsKPiArCVBPU1RJTkdfUkVBRChFQ09CVVMpOyAvKiBzb21ldGhp bmcgZnJvbSBzYW1lIGNhY2hlbGluZSwgYnV0ICFGT1JDRVdBS0UgKi8KPiArCj4gKwlpZiAod2Fp dF9mb3JfYXRvbWljKChJOTE1X1JFQURfTk9UUkFDRShGT1JDRVdBS0VfQUNLKSAmIDEpLAo+ICsJ CQkgICAgRk9SQ0VXQUtFX0FDS19USU1FT1VUX01TKSkKPiArCQlEUk1fRVJST1IoIlRpbWVkIG91 dCB3YWl0aW5nIGZvciBmb3JjZXdha2UgdG8gYWNrIHJlcXVlc3QuXG4iKTsKPiArCj4gKwkvKiBX YVJzRm9yY2V3YWtlV2FpdFRDMDpzbmIgKi8KPiArCV9fZ2VuNl9ndF93YWl0X2Zvcl90aHJlYWRf YzAoZGV2X3ByaXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2dlbjZfZ3RfZm9yY2Vfd2Fr ZV9tdF9yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCUk5 MTVfV1JJVEVfTk9UUkFDRShGT1JDRVdBS0VfTVQsIF9NQVNLRURfQklUX0RJU0FCTEUoMHhmZmZm KSk7Cj4gKwkvKiBzb21ldGhpbmcgZnJvbSBzYW1lIGNhY2hlbGluZSwgYnV0ICFGT1JDRVdBS0Vf TVQgKi8KPiArCVBPU1RJTkdfUkVBRChFQ09CVVMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBf X2dlbjZfZ3RfZm9yY2Vfd2FrZV9tdF9nZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQo+ICt7Cj4gKwl1MzIgZm9yY2V3YWtlX2FjazsKPiArCj4gKwlpZiAoSVNfSEFTV0VMTChk ZXZfcHJpdi0+ZGV2KSkKPiArCQlmb3JjZXdha2VfYWNrID0gRk9SQ0VXQUtFX0FDS19IU1c7Cj4g KwllbHNlCj4gKwkJZm9yY2V3YWtlX2FjayA9IEZPUkNFV0FLRV9NVF9BQ0s7Cj4gKwo+ICsJaWYg KHdhaXRfZm9yX2F0b21pYygoSTkxNV9SRUFEX05PVFJBQ0UoZm9yY2V3YWtlX2FjaykgJiBGT1JD RVdBS0VfS0VSTkVMKSA9PSAwLAo+ICsJCQkgICAgRk9SQ0VXQUtFX0FDS19USU1FT1VUX01TKSkK PiArCQlEUk1fRVJST1IoIlRpbWVkIG91dCB3YWl0aW5nIGZvciBmb3JjZXdha2Ugb2xkIGFjayB0 byBjbGVhci5cbiIpOwo+ICsKPiArCUk5MTVfV1JJVEVfTk9UUkFDRShGT1JDRVdBS0VfTVQsIF9N QVNLRURfQklUX0VOQUJMRShGT1JDRVdBS0VfS0VSTkVMKSk7Cj4gKwkvKiBzb21ldGhpbmcgZnJv bSBzYW1lIGNhY2hlbGluZSwgYnV0ICFGT1JDRVdBS0VfTVQgKi8KPiArCVBPU1RJTkdfUkVBRChF Q09CVVMpOwo+ICsKPiArCWlmICh3YWl0X2Zvcl9hdG9taWMoKEk5MTVfUkVBRF9OT1RSQUNFKGZv cmNld2FrZV9hY2spICYgRk9SQ0VXQUtFX0tFUk5FTCksCj4gKwkJCSAgICBGT1JDRVdBS0VfQUNL X1RJTUVPVVRfTVMpKQo+ICsJCURSTV9FUlJPUigiVGltZWQgb3V0IHdhaXRpbmcgZm9yIGZvcmNl d2FrZSB0byBhY2sgcmVxdWVzdC5cbiIpOwo+ICsKPiArCS8qIFdhUnNGb3JjZXdha2VXYWl0VEMw Oml2Yixoc3cgKi8KPiArCV9fZ2VuNl9ndF93YWl0X2Zvcl90aHJlYWRfYzAoZGV2X3ByaXYpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBnZW42X2d0X2NoZWNrX2ZpZm9kYmcoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwl1MzIgZ3RmaWZvZGJnOwo+ICsJZ3RmaWZv ZGJnID0gSTkxNV9SRUFEX05PVFJBQ0UoR1RGSUZPREJHKTsKPiArCWlmIChXQVJOKGd0Zmlmb2Ri ZyAmIEdUX0ZJRk9fQ1BVX0VSUk9SX01BU0ssCj4gKwkgICAgICJNTUlPIHJlYWQgb3Igd3JpdGUg aGFzIGJlZW4gZHJvcHBlZCAleFxuIiwgZ3RmaWZvZGJnKSkKPiArCQlJOTE1X1dSSVRFX05PVFJB Q0UoR1RGSUZPREJHLCBHVF9GSUZPX0NQVV9FUlJPUl9NQVNLKTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgX19nZW42X2d0X2ZvcmNlX3dha2VfcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPiArewo+ICsJSTkxNV9XUklURV9OT1RSQUNFKEZPUkNFV0FLRSwgMCk7Cj4gKwkv KiBzb21ldGhpbmcgZnJvbSBzYW1lIGNhY2hlbGluZSwgYnV0ICFGT1JDRVdBS0UgKi8KPiArCVBP U1RJTkdfUkVBRChFQ09CVVMpOwo+ICsJZ2VuNl9ndF9jaGVja19maWZvZGJnKGRldl9wcml2KTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgX19nZW42X2d0X2ZvcmNlX3dha2VfbXRfcHV0KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJSTkxNV9XUklURV9OT1RSQUNF KEZPUkNFV0FLRV9NVCwgX01BU0tFRF9CSVRfRElTQUJMRShGT1JDRVdBS0VfS0VSTkVMKSk7Cj4g KwkvKiBzb21ldGhpbmcgZnJvbSBzYW1lIGNhY2hlbGluZSwgYnV0ICFGT1JDRVdBS0VfTVQgKi8K PiArCVBPU1RJTkdfUkVBRChFQ09CVVMpOwo+ICsJZ2VuNl9ndF9jaGVja19maWZvZGJnKGRldl9w cml2KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBfX2dlbjZfZ3Rfd2FpdF9mb3JfZmlmbyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsK PiArCWlmIChkZXZfcHJpdi0+dW5jb3JlLmZpZm9fY291bnQgPCBHVF9GSUZPX05VTV9SRVNFUlZF RF9FTlRSSUVTKSB7Cj4gKwkJaW50IGxvb3AgPSA1MDA7Cj4gKwkJdTMyIGZpZm8gPSBJOTE1X1JF QURfTk9UUkFDRShHVF9GSUZPX0ZSRUVfRU5UUklFUyk7Cj4gKwkJd2hpbGUgKGZpZm8gPD0gR1Rf RklGT19OVU1fUkVTRVJWRURfRU5UUklFUyAmJiBsb29wLS0pIHsKPiArCQkJdWRlbGF5KDEwKTsK PiArCQkJZmlmbyA9IEk5MTVfUkVBRF9OT1RSQUNFKEdUX0ZJRk9fRlJFRV9FTlRSSUVTKTsKPiAr CQl9Cj4gKwkJaWYgKFdBUk5fT04obG9vcCA8IDAgJiYgZmlmbyA8PSBHVF9GSUZPX05VTV9SRVNF UlZFRF9FTlRSSUVTKSkKPiArCQkJKytyZXQ7Cj4gKwkJZGV2X3ByaXYtPnVuY29yZS5maWZvX2Nv dW50ID0gZmlmbzsKPiArCX0KPiArCWRldl9wcml2LT51bmNvcmUuZmlmb19jb3VudC0tOwo+ICsK PiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZsdl9mb3JjZV93YWtlX3Jl c2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJSTkxNV9XUklU RV9OT1RSQUNFKEZPUkNFV0FLRV9WTFYsIF9NQVNLRURfQklUX0RJU0FCTEUoMHhmZmZmKSk7Cj4g KwkvKiBzb21ldGhpbmcgZnJvbSBzYW1lIGNhY2hlbGluZSwgYnV0ICFGT1JDRVdBS0VfVkxWICov Cj4gKwlQT1NUSU5HX1JFQUQoRk9SQ0VXQUtFX0FDS19WTFYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCB2bHZfZm9yY2Vfd2FrZV9nZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+ICt7Cj4gKwlpZiAod2FpdF9mb3JfYXRvbWljKChJOTE1X1JFQURfTk9UUkFDRShGT1JDRVdB S0VfQUNLX1ZMVikgJiBGT1JDRVdBS0VfS0VSTkVMKSA9PSAwLAo+ICsJCQkgICAgRk9SQ0VXQUtF X0FDS19USU1FT1VUX01TKSkKPiArCQlEUk1fRVJST1IoIlRpbWVkIG91dCB3YWl0aW5nIGZvciBm b3JjZXdha2Ugb2xkIGFjayB0byBjbGVhci5cbiIpOwo+ICsKPiArCUk5MTVfV1JJVEVfTk9UUkFD RShGT1JDRVdBS0VfVkxWLCBfTUFTS0VEX0JJVF9FTkFCTEUoRk9SQ0VXQUtFX0tFUk5FTCkpOwo+ ICsJSTkxNV9XUklURV9OT1RSQUNFKEZPUkNFV0FLRV9NRURJQV9WTFYsCj4gKwkJCSAgIF9NQVNL RURfQklUX0VOQUJMRShGT1JDRVdBS0VfS0VSTkVMKSk7Cj4gKwo+ICsJaWYgKHdhaXRfZm9yX2F0 b21pYygoSTkxNV9SRUFEX05PVFJBQ0UoRk9SQ0VXQUtFX0FDS19WTFYpICYgRk9SQ0VXQUtFX0tF Uk5FTCksCj4gKwkJCSAgICBGT1JDRVdBS0VfQUNLX1RJTUVPVVRfTVMpKQo+ICsJCURSTV9FUlJP UigiVGltZWQgb3V0IHdhaXRpbmcgZm9yIEdUIHRvIGFjayBmb3JjZXdha2UgcmVxdWVzdC5cbiIp Owo+ICsKPiArCWlmICh3YWl0X2Zvcl9hdG9taWMoKEk5MTVfUkVBRF9OT1RSQUNFKEZPUkNFV0FL RV9BQ0tfTUVESUFfVkxWKSAmCj4gKwkJCSAgICAgRk9SQ0VXQUtFX0tFUk5FTCksCj4gKwkJCSAg ICBGT1JDRVdBS0VfQUNLX1RJTUVPVVRfTVMpKQo+ICsJCURSTV9FUlJPUigiVGltZWQgb3V0IHdh aXRpbmcgZm9yIG1lZGlhIHRvIGFjayBmb3JjZXdha2UgcmVxdWVzdC5cbiIpOwo+ICsKPiArCS8q IFdhUnNGb3JjZXdha2VXYWl0VEMwOnZsdiAqLwo+ICsJX19nZW42X2d0X3dhaXRfZm9yX3RocmVh ZF9jMChkZXZfcHJpdik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZsdl9mb3JjZV93YWtlX3B1 dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCUk5MTVfV1JJVEVf Tk9UUkFDRShGT1JDRVdBS0VfVkxWLCBfTUFTS0VEX0JJVF9ESVNBQkxFKEZPUkNFV0FLRV9LRVJO RUwpKTsKPiArCUk5MTVfV1JJVEVfTk9UUkFDRShGT1JDRVdBS0VfTUVESUFfVkxWLAo+ICsJCQkg ICBfTUFTS0VEX0JJVF9ESVNBQkxFKEZPUkNFV0FLRV9LRVJORUwpKTsKPiArCS8qIFRoZSBiZWxv dyBkb3VibGVzIGFzIGEgUE9TVElOR19SRUFEICovCj4gKwlnZW42X2d0X2NoZWNrX2ZpZm9kYmco ZGV2X3ByaXYpOwo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX3VuY29yZV9lYXJseV9zYW5pdGl6ZShz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsKPiArCWlmIChIQVNfRlBHQV9EQkdfVU5D TEFJTUVEKGRldikpCj4gKwkJSTkxNV9XUklURV9OT1RSQUNFKEZQR0FfREJHLCBGUEdBX0RCR19S TV9OT0NMQUlNKTsKPiArfQo+ICsKPiArdm9pZCBpbnRlbF91bmNvcmVfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkZXYtPmRldl9wcml2YXRlOwo+ICsKPiArCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+dW5j b3JlLmxvY2spOwo+ICsKPiArCWludGVsX3VuY29yZV9yZXNldChkZXYpOwo+ICsKPiArCWlmIChJ U19WQUxMRVlWSUVXKGRldikpIHsKPiArCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dh a2VfZ2V0ID0gdmx2X2ZvcmNlX3dha2VfZ2V0Owo+ICsJCWRldl9wcml2LT51bmNvcmUuZnVuY3Mu Zm9yY2Vfd2FrZV9wdXQgPSB2bHZfZm9yY2Vfd2FrZV9wdXQ7Cj4gKwl9IGVsc2UgaWYgKElTX0hB U1dFTEwoZGV2KSkgewo+ICsJCWRldl9wcml2LT51bmNvcmUuZnVuY3MuZm9yY2Vfd2FrZV9nZXQg PSBfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9tdF9nZXQ7Cj4gKwkJZGV2X3ByaXYtPnVuY29yZS5mdW5j cy5mb3JjZV93YWtlX3B1dCA9IF9fZ2VuNl9ndF9mb3JjZV93YWtlX210X3B1dDsKPiArCX0gZWxz ZSBpZiAoSVNfSVZZQlJJREdFKGRldikpIHsKPiArCQl1MzIgZWNvYnVzOwo+ICsKPiArCQkvKiBJ VkIgY29uZmlncyBtYXkgdXNlIG11bHRpLXRocmVhZGVkIGZvcmNld2FrZSAqLwo+ICsKPiArCQkv KiBBIHNtYWxsIHRyaWNrIGhlcmUgLSBpZiB0aGUgYmlvcyBoYXNuJ3QgY29uZmlndXJlZAo+ICsJ CSAqIE1UIGZvcmNld2FrZSwgYW5kIGlmIHRoZSBkZXZpY2UgaXMgaW4gUkM2LCB0aGVuCj4gKwkJ ICogZm9yY2Vfd2FrZV9tdF9nZXQgd2lsbCBub3Qgd2FrZSB0aGUgZGV2aWNlIGFuZCB0aGUKPiAr CQkgKiBFQ09CVVMgcmVhZCB3aWxsIHJldHVybiB6ZXJvLiBXaGljaCB3aWxsIGJlCj4gKwkJICog KGNvcnJlY3RseSkgaW50ZXJwcmV0ZWQgYnkgdGhlIHRlc3QgYmVsb3cgYXMgTVQKPiArCQkgKiBm b3JjZXdha2UgYmVpbmcgZGlzYWJsZWQuCj4gKwkJICovCj4gKwkJbXV0ZXhfbG9jaygmZGV2LT5z dHJ1Y3RfbXV0ZXgpOwo+ICsJCV9fZ2VuNl9ndF9mb3JjZV93YWtlX210X2dldChkZXZfcHJpdik7 Cj4gKwkJZWNvYnVzID0gSTkxNV9SRUFEX05PVFJBQ0UoRUNPQlVTKTsKPiArCQlfX2dlbjZfZ3Rf Zm9yY2Vfd2FrZV9tdF9wdXQoZGV2X3ByaXYpOwo+ICsJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1 Y3RfbXV0ZXgpOwo+ICsKPiArCQlpZiAoZWNvYnVzICYgRk9SQ0VXQUtFX01UX0VOQUJMRSkgewo+ ICsJCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfZ2V0ID0KPiArCQkJCV9fZ2Vu Nl9ndF9mb3JjZV93YWtlX210X2dldDsKPiArCQkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3Jj ZV93YWtlX3B1dCA9Cj4gKwkJCQlfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9tdF9wdXQ7Cj4gKwkJfSBl bHNlIHsKPiArCQkJRFJNX0lORk8oIk5vIE1UIGZvcmNld2FrZSBhdmFpbGFibGUgb24gSXZ5YnJp ZGdlLCB0aGlzIGNhbiByZXN1bHQgaW4gaXNzdWVzXG4iKTsKPiArCQkJRFJNX0lORk8oIndoZW4g dXNpbmcgdmJsYW5rLXN5bmNlZCBwYXJ0aWFsIHNjcmVlbiB1cGRhdGVzLlxuIik7Cj4gKwkJCWRl dl9wcml2LT51bmNvcmUuZnVuY3MuZm9yY2Vfd2FrZV9nZXQgPQo+ICsJCQkJX19nZW42X2d0X2Zv cmNlX3dha2VfZ2V0Owo+ICsJCQlkZXZfcHJpdi0+dW5jb3JlLmZ1bmNzLmZvcmNlX3dha2VfcHV0 ID0KPiArCQkJCV9fZ2VuNl9ndF9mb3JjZV93YWtlX3B1dDsKPiArCQl9Cj4gKwl9IGVsc2UgaWYg KElTX0dFTjYoZGV2KSkgewo+ICsJCWRldl9wcml2LT51bmNvcmUuZnVuY3MuZm9yY2Vfd2FrZV9n ZXQgPQo+ICsJCQlfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9nZXQ7Cj4gKwkJZGV2X3ByaXYtPnVuY29y ZS5mdW5jcy5mb3JjZV93YWtlX3B1dCA9Cj4gKwkJCV9fZ2VuNl9ndF9mb3JjZV93YWtlX3B1dDsK PiArCX0KPiArfQo+ICsKPiArdm9pZCBpbnRlbF91bmNvcmVfcmVzZXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2 LT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlpZiAoSVNfVkFMTEVZVklFVyhkZXYpKSB7Cj4gKwkJdmx2 X2ZvcmNlX3dha2VfcmVzZXQoZGV2X3ByaXYpOwo+ICsJfSBlbHNlIGlmIChJTlRFTF9JTkZPKGRl diktPmdlbiA+PSA2KSB7Cj4gKwkJX19nZW42X2d0X2ZvcmNlX3dha2VfcmVzZXQoZGV2X3ByaXYp Owo+ICsJCWlmIChJU19JVllCUklER0UoZGV2KSB8fCBJU19IQVNXRUxMKGRldikpCj4gKwkJCV9f Z2VuNl9ndF9mb3JjZV93YWtlX210X3Jlc2V0KGRldl9wcml2KTsKPiArCX0KPiArfQo+ICsKPiAr LyoKPiArICogR2VuZXJhbGx5IHRoaXMgaXMgY2FsbGVkIGltcGxpY2l0bHkgYnkgdGhlIHJlZ2lz dGVyIHJlYWQgZnVuY3Rpb24uIEhvd2V2ZXIsCj4gKyAqIGlmIHNvbWUgc2VxdWVuY2UgcmVxdWly ZXMgdGhlIEdUIHRvIG5vdCBwb3dlciBkb3duIHRoZW4gdGhpcyBmdW5jdGlvbiBzaG91bGQKPiAr ICogYmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlcXVlbmNlIGZvbGxvd2VkIGJ5 IGEgY2FsbCB0bwo+ICsgKiBnZW42X2d0X2ZvcmNlX3dha2VfcHV0KCkgYXQgdGhlIGVuZCBvZiB0 aGUgc2VxdWVuY2UuCj4gKyAqLwo+ICt2b2lkIGdlbjZfZ3RfZm9yY2Vfd2FrZV9nZXQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIGlycWZs YWdzOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGly cWZsYWdzKTsKPiArCWlmIChkZXZfcHJpdi0+dW5jb3JlLmZvcmNld2FrZV9jb3VudCsrID09IDAp Cj4gKwkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtlX2dldChkZXZfcHJpdik7Cj4g KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdz KTsKPiArfQo+ICsKPiArLyoKPiArICogc2VlIGdlbjZfZ3RfZm9yY2Vfd2FrZV9nZXQoKQo+ICsg Ki8KPiArdm9pZCBnZW42X2d0X2ZvcmNlX3dha2VfcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKPiArewo+ICsJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKPiArCj4gKwlzcGlu X2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gKwlpZiAo LS1kZXZfcHJpdi0+dW5jb3JlLmZvcmNld2FrZV9jb3VudCA9PSAwKQo+ICsJCWRldl9wcml2LT51 bmNvcmUuZnVuY3MuZm9yY2Vfd2FrZV9wdXQoZGV2X3ByaXYpOwo+ICsJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gK30KPiArCj4gKy8q IFdlIGdpdmUgZmFzdCBwYXRocyBmb3IgdGhlIHJlYWxseSBjb29sIHJlZ2lzdGVycyAqLwo+ICsj ZGVmaW5lIE5FRURTX0ZPUkNFX1dBS0UoZGV2X3ByaXYsIHJlZykgXAo+ICsJKChIQVNfRk9SQ0Vf V0FLRSgoZGV2X3ByaXYpLT5kZXYpKSAmJiBcCj4gKwkgKChyZWcpIDwgMHg0MDAwMCkgJiYgICAg ICAgICAgICBcCj4gKwkgKChyZWcpICE9IEZPUkNFV0FLRSkpCj4gKwo+ICtzdGF0aWMgdm9pZAo+ ICtpbGtfZHVtbXlfd3JpdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7 Cj4gKwkvKiBXYUlzc3VlRHVtbXlXcml0ZVRvV2FrZXVwRnJvbVJDNjppbGsgSXNzdWUgYSBkdW1t eSB3cml0ZSB0byB3YWtlIHVwCj4gKwkgKiB0aGUgY2hpcCBmcm9tIHJjNiBiZWZvcmUgdG91Y2hp bmcgaXQgZm9yIHJlYWwuIE1JX01PREUgaXMgbWFza2VkLAo+ICsJICogaGVuY2UgaGFybWxlc3Mg dG8gd3JpdGUgMCBpbnRvLiAqLwo+ICsJSTkxNV9XUklURV9OT1RSQUNFKE1JX01PREUsIDApOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtoc3dfdW5jbGFpbWVkX3JlZ19jbGVhcihzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiByZWcpCj4gK3sKPiArCWlmIChIQVNfRlBH QV9EQkdfVU5DTEFJTUVEKGRldl9wcml2LT5kZXYpICYmCj4gKwkgICAgKEk5MTVfUkVBRF9OT1RS QUNFKEZQR0FfREJHKSAmIEZQR0FfREJHX1JNX05PQ0xBSU0pKSB7Cj4gKwkJRFJNX0VSUk9SKCJV bmtub3duIHVuY2xhaW1lZCByZWdpc3RlciBiZWZvcmUgd3JpdGluZyB0byAleFxuIiwKPiArCQkJ ICByZWcpOwo+ICsJCUk5MTVfV1JJVEVfTk9UUkFDRShGUEdBX0RCRywgRlBHQV9EQkdfUk1fTk9D TEFJTSk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK2hzd191bmNsYWltZWRfcmVn X2NoZWNrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHJlZykKPiArewo+ ICsJaWYgKEhBU19GUEdBX0RCR19VTkNMQUlNRUQoZGV2X3ByaXYtPmRldikgJiYKPiArCSAgICAo STkxNV9SRUFEX05PVFJBQ0UoRlBHQV9EQkcpICYgRlBHQV9EQkdfUk1fTk9DTEFJTSkpIHsKPiAr CQlEUk1fRVJST1IoIlVuY2xhaW1lZCB3cml0ZSB0byAleFxuIiwgcmVnKTsKPiArCQlJOTE1X1dS SVRFX05PVFJBQ0UoRlBHQV9EQkcsIEZQR0FfREJHX1JNX05PQ0xBSU0pOwo+ICsJfQo+ICt9Cj4g Kwo+ICsjZGVmaW5lIF9faTkxNV9yZWFkKHgsIHkpIFwKPiArdSMjeCBpOTE1X3JlYWQjI3goc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgcmVnKSB7IFwKPiArCXUjI3ggdmFs ID0gMDsgXAo+ICsJaWYgKElTX0dFTjUoZGV2X3ByaXYtPmRldikpIFwKPiArCQlpbGtfZHVtbXlf d3JpdGUoZGV2X3ByaXYpOyBcCj4gKwlpZiAoTkVFRFNfRk9SQ0VfV0FLRSgoZGV2X3ByaXYpLCAo cmVnKSkpIHsgXAo+ICsJCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7IFwKPiArCQlzcGluX2xvY2tf aXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7IFwKPiArCQlpZiAoZGV2 X3ByaXYtPnVuY29yZS5mb3JjZXdha2VfY291bnQgPT0gMCkgXAo+ICsJCQlkZXZfcHJpdi0+dW5j b3JlLmZ1bmNzLmZvcmNlX3dha2VfZ2V0KGRldl9wcml2KTsgXAo+ICsJCXZhbCA9IHJlYWQjI3ko ZGV2X3ByaXYtPnJlZ3MgKyByZWcpOyBcCj4gKwkJaWYgKGRldl9wcml2LT51bmNvcmUuZm9yY2V3 YWtlX2NvdW50ID09IDApIFwKPiArCQkJZGV2X3ByaXYtPnVuY29yZS5mdW5jcy5mb3JjZV93YWtl X3B1dChkZXZfcHJpdik7IFwKPiArCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+ dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsgXAo+ICsJfSBlbHNlIHsgXAo+ICsJCXZhbCA9IHJlYWQj I3koZGV2X3ByaXYtPnJlZ3MgKyByZWcpOyBcCj4gKwl9IFwKPiArCXRyYWNlX2k5MTVfcmVnX3J3 KGZhbHNlLCByZWcsIHZhbCwgc2l6ZW9mKHZhbCkpOyBcCj4gKwlyZXR1cm4gdmFsOyBcCj4gK30K PiArCj4gK19faTkxNV9yZWFkKDgsIGIpCj4gK19faTkxNV9yZWFkKDE2LCB3KQo+ICtfX2k5MTVf cmVhZCgzMiwgbCkKPiArX19pOTE1X3JlYWQoNjQsIHEpCj4gKyN1bmRlZiBfX2k5MTVfcmVhZAo+ ICsKPiArI2RlZmluZSBfX2k5MTVfd3JpdGUoeCwgeSkgXAo+ICt2b2lkIGk5MTVfd3JpdGUjI3go c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgcmVnLCB1IyN4IHZhbCkgeyBc Cj4gKwl1MzIgX19maWZvX3JldCA9IDA7IFwKPiArCXRyYWNlX2k5MTVfcmVnX3J3KHRydWUsIHJl ZywgdmFsLCBzaXplb2YodmFsKSk7IFwKPiArCWlmIChORUVEU19GT1JDRV9XQUtFKChkZXZfcHJp diksIChyZWcpKSkgeyBcCj4gKwkJX19maWZvX3JldCA9IF9fZ2VuNl9ndF93YWl0X2Zvcl9maWZv KGRldl9wcml2KTsgXAo+ICsJfSBcCj4gKwlpZiAoSVNfR0VONShkZXZfcHJpdi0+ZGV2KSkgXAo+ ICsJCWlsa19kdW1teV93cml0ZShkZXZfcHJpdik7IFwKPiArCWhzd191bmNsYWltZWRfcmVnX2Ns ZWFyKGRldl9wcml2LCByZWcpOyBcCj4gKwl3cml0ZSMjeSh2YWwsIGRldl9wcml2LT5yZWdzICsg cmVnKTsgXAo+ICsJaWYgKHVubGlrZWx5KF9fZmlmb19yZXQpKSB7IFwKPiArCQlnZW42X2d0X2No ZWNrX2ZpZm9kYmcoZGV2X3ByaXYpOyBcCj4gKwl9IFwKPiArCWhzd191bmNsYWltZWRfcmVnX2No ZWNrKGRldl9wcml2LCByZWcpOyBcCj4gK30KPiArX19pOTE1X3dyaXRlKDgsIGIpCj4gK19faTkx NV93cml0ZSgxNiwgdykKPiArX19pOTE1X3dyaXRlKDMyLCBsKQo+ICtfX2k5MTVfd3JpdGUoNjQs IHEpCj4gKyN1bmRlZiBfX2k5MTVfd3JpdGUKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVn aXN0ZXJfd2hpdGVsaXN0IHsKPiArCXVpbnQ2NF90IG9mZnNldDsKPiArCXVpbnQzMl90IHNpemU7 Cj4gKwl1aW50MzJfdCBnZW5fYml0bWFzazsgLyogc3VwcG9ydCBnZW5zLCAweDEwIGZvciA0LCAw eDMwIGZvciA0IGFuZCA1LCBldGMuICovCj4gK30gd2hpdGVsaXN0W10gPSB7Cj4gKwl7IFJJTkdf VElNRVNUQU1QKFJFTkRFUl9SSU5HX0JBU0UpLCA4LCAweEYwIH0sCj4gK307Cj4gKwo+ICtpbnQg aTkxNV9yZWdfcmVhZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQl2b2lkICpk YXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcmVn X3JlYWQgKnJlZyA9IGRhdGE7Cj4gKwlzdHJ1Y3QgcmVnaXN0ZXJfd2hpdGVsaXN0IGNvbnN0ICpl bnRyeSA9IHdoaXRlbGlzdDsKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKHdoaXRlbGlzdCk7IGkrKywgZW50cnkrKykgewo+ICsJCWlmIChlbnRyeS0+b2Zmc2V0 ID09IHJlZy0+b2Zmc2V0ICYmCj4gKwkJICAgICgxIDw8IElOVEVMX0lORk8oZGV2KS0+Z2VuICYg ZW50cnktPmdlbl9iaXRtYXNrKSkKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJaWYgKGkgPT0g QVJSQVlfU0laRSh3aGl0ZWxpc3QpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCXN3aXRj aCAoZW50cnktPnNpemUpIHsKPiArCWNhc2UgODoKPiArCQlyZWctPnZhbCA9IEk5MTVfUkVBRDY0 KHJlZy0+b2Zmc2V0KTsKPiArCQlicmVhazsKPiArCWNhc2UgNDoKPiArCQlyZWctPnZhbCA9IEk5 MTVfUkVBRChyZWctPm9mZnNldCk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDI6Cj4gKwkJcmVnLT52 YWwgPSBJOTE1X1JFQUQxNihyZWctPm9mZnNldCk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDE6Cj4g KwkJcmVnLT52YWwgPSBJOTE1X1JFQUQ4KHJlZy0+b2Zmc2V0KTsKPiArCQlicmVhazsKPiArCWRl ZmF1bHQ6Cj4gKwkJV0FSTl9PTigxKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpOHh4X2RvX3Jlc2V0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJaWYgKElTX0k4NVgoZGV2KSkKPiArCQlyZXR1 cm4gLUVOT0RFVjsKPiArCj4gKwlJOTE1X1dSSVRFKERfU1RBVEUsIEk5MTVfUkVBRChEX1NUQVRF KSB8IERTVEFURV9HRlhfUkVTRVRfSTgzMCk7Cj4gKwlQT1NUSU5HX1JFQUQoRF9TVEFURSk7Cj4g Kwo+ICsJaWYgKElTX0k4MzAoZGV2KSB8fCBJU184NDVHKGRldikpIHsKPiArCQlJOTE1X1dSSVRF KERFQlVHX1JFU0VUX0k4MzAsCj4gKwkJCSAgIERFQlVHX1JFU0VUX0RJU1BMQVkgfAo+ICsJCQkg ICBERUJVR19SRVNFVF9SRU5ERVIgfAo+ICsJCQkgICBERUJVR19SRVNFVF9GVUxMKTsKPiArCQlQ T1NUSU5HX1JFQUQoREVCVUdfUkVTRVRfSTgzMCk7Cj4gKwkJbXNsZWVwKDEpOwo+ICsKPiArCQlJ OTE1X1dSSVRFKERFQlVHX1JFU0VUX0k4MzAsIDApOwo+ICsJCVBPU1RJTkdfUkVBRChERUJVR19S RVNFVF9JODMwKTsKPiArCX0KPiArCj4gKwltc2xlZXAoMSk7Cj4gKwo+ICsJSTkxNV9XUklURShE X1NUQVRFLCBJOTE1X1JFQUQoRF9TVEFURSkgJiB+RFNUQVRFX0dGWF9SRVNFVF9JODMwKTsKPiAr CVBPU1RJTkdfUkVBRChEX1NUQVRFKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGludCBpOTY1X3Jlc2V0X2NvbXBsZXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3sK PiArCXU4IGdkcnN0Owo+ICsJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LT5wZGV2LCBJOTY1X0dE UlNULCAmZ2Ryc3QpOwo+ICsJcmV0dXJuIChnZHJzdCAmIEdSRE9NX1JFU0VUX0VOQUJMRSkgPT0g MDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpOTY1X2RvX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJLyoKPiArCSAqIFNldCB0aGUgZG9tYWlu cyB3ZSB3YW50IHRvIHJlc2V0IChHUkRPTS9iaXRzIDIgYW5kIDMpIGFzCj4gKwkgKiB3ZWxsIGFz IHRoZSByZXNldCBiaXQgKEdSL2JpdCAwKS4gIFNldHRpbmcgdGhlIEdSIGJpdAo+ICsJICogdHJp Z2dlcnMgdGhlIHJlc2V0OyB3aGVuIGRvbmUsIHRoZSBoYXJkd2FyZSB3aWxsIGNsZWFyIGl0Lgo+ ICsJICovCj4gKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LT5wZGV2LCBJOTY1X0dEUlNULAo+ ICsJCQkgICAgICBHUkRPTV9SRU5ERVIgfCBHUkRPTV9SRVNFVF9FTkFCTEUpOwo+ICsJcmV0ID0g IHdhaXRfZm9yKGk5NjVfcmVzZXRfY29tcGxldGUoZGV2KSwgNTAwKTsKPiArCWlmIChyZXQpCj4g KwkJcmV0dXJuIHJldDsKPiArCj4gKwkvKiBXZSBjYW4ndCByZXNldCByZW5kZXImbWVkaWEgd2l0 aG91dCBhbHNvIHJlc2V0dGluZyBkaXNwbGF5IC4uLiAqLwo+ICsJcGNpX3dyaXRlX2NvbmZpZ19i eXRlKGRldi0+cGRldiwgSTk2NV9HRFJTVCwKPiArCQkJICAgICAgR1JET01fTUVESUEgfCBHUkRP TV9SRVNFVF9FTkFCTEUpOwo+ICsKPiArCXJldCA9ICB3YWl0X2ZvcihpOTY1X3Jlc2V0X2NvbXBs ZXRlKGRldiksIDUwMCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcGNp X3dyaXRlX2NvbmZpZ19ieXRlKGRldi0+cGRldiwgSTk2NV9HRFJTVCwgMCk7Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaXJvbmxha2VfZG9fcmVzZXQoc3RydWN0IGRy bV9kZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXUzMiBnZHJzdDsKPiArCWludCByZXQ7Cj4gKwo+ICsJ Z2Ryc3QgPSBJOTE1X1JFQUQoTUNIQkFSX01JUlJPUl9CQVNFICsgSUxLX0dEU1IpOwo+ICsJZ2Ry c3QgJj0gfkdSRE9NX01BU0s7Cj4gKwlJOTE1X1dSSVRFKE1DSEJBUl9NSVJST1JfQkFTRSArIElM S19HRFNSLAo+ICsJCSAgIGdkcnN0IHwgR1JET01fUkVOREVSIHwgR1JET01fUkVTRVRfRU5BQkxF KTsKPiArCXJldCA9IHdhaXRfZm9yKEk5MTVfUkVBRChNQ0hCQVJfTUlSUk9SX0JBU0UgKyBJTEtf R0RTUikgJiAweDEsIDUwMCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJ LyogV2UgY2FuJ3QgcmVzZXQgcmVuZGVyJm1lZGlhIHdpdGhvdXQgYWxzbyByZXNldHRpbmcgZGlz cGxheSAuLi4gKi8KPiArCWdkcnN0ID0gSTkxNV9SRUFEKE1DSEJBUl9NSVJST1JfQkFTRSArIElM S19HRFNSKTsKPiArCWdkcnN0ICY9IH5HUkRPTV9NQVNLOwo+ICsJSTkxNV9XUklURShNQ0hCQVJf TUlSUk9SX0JBU0UgKyBJTEtfR0RTUiwKPiArCQkgICBnZHJzdCB8IEdSRE9NX01FRElBIHwgR1JE T01fUkVTRVRfRU5BQkxFKTsKPiArCXJldHVybiB3YWl0X2ZvcihJOTE1X1JFQUQoTUNIQkFSX01J UlJPUl9CQVNFICsgSUxLX0dEU1IpICYgMHgxLCA1MDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGdlbjZfZG9fcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCWludAlyZXQ7 Cj4gKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwo+ICsKPiArCS8qIEhvbGQgdW5jb3JlLmxvY2sg YWNyb3NzIHJlc2V0IHRvIHByZXZlbnQgYW55IHJlZ2lzdGVyIGFjY2Vzcwo+ICsJICogd2l0aCBm b3JjZXdha2Ugbm90IHNldCBjb3JyZWN0bHkKPiArCSAqLwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUo JmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwo+ICsKPiArCS8qIFJlc2V0IHRoZSBj aGlwICovCj4gKwo+ICsJLyogR0VONl9HRFJTVCBpcyBub3QgaW4gdGhlIGd0IHBvd2VyIHdlbGws IG5vIG5lZWQgdG8gY2hlY2sKPiArCSAqIGZvciBmaWZvIHNwYWNlIGZvciB0aGUgd3JpdGUgb3Ig Zm9yY2V3YWtlIHRoZSBjaGlwIGZvcgo+ICsJICogdGhlIHJlYWQKPiArCSAqLwo+ICsJSTkxNV9X UklURV9OT1RSQUNFKEdFTjZfR0RSU1QsIEdFTjZfR1JET01fRlVMTCk7Cj4gKwo+ICsJLyogU3Bp biB3YWl0aW5nIGZvciB0aGUgZGV2aWNlIHRvIGFjayB0aGUgcmVzZXQgcmVxdWVzdCAqLwo+ICsJ cmV0ID0gd2FpdF9mb3IoKEk5MTVfUkVBRF9OT1RSQUNFKEdFTjZfR0RSU1QpICYgR0VONl9HUkRP TV9GVUxMKSA9PSAwLCA1MDApOwo+ICsKPiArCS8qIElmIHJlc2V0IHdpdGggYSB1c2VyIGZvcmNl d2FrZSwgdHJ5IHRvIHJlc3RvcmUsIG90aGVyd2lzZSB0dXJuIGl0IG9mZiAqLwo+ICsJaWYgKGRl dl9wcml2LT51bmNvcmUuZm9yY2V3YWtlX2NvdW50KQo+ICsJCWRldl9wcml2LT51bmNvcmUuZnVu Y3MuZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYpOwo+ICsJZWxzZQo+ICsJCWRldl9wcml2LT51bmNv cmUuZnVuY3MuZm9yY2Vfd2FrZV9wdXQoZGV2X3ByaXYpOwo+ICsKPiArCS8qIFJlc3RvcmUgZmlm byBjb3VudCAqLwo+ICsJZGV2X3ByaXYtPnVuY29yZS5maWZvX2NvdW50ID0gSTkxNV9SRUFEX05P VFJBQ0UoR1RfRklGT19GUkVFX0VOVFJJRVMpOwo+ICsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwo+ICsJcmV0dXJuIHJldDsKPiAr fQo+ICsKPiAraW50IGludGVsX2dwdV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICt7 Cj4gKwlzd2l0Y2ggKElOVEVMX0lORk8oZGV2KS0+Z2VuKSB7Cj4gKwljYXNlIDc6Cj4gKwljYXNl IDY6IHJldHVybiBnZW42X2RvX3Jlc2V0KGRldik7Cj4gKwljYXNlIDU6IHJldHVybiBpcm9ubGFr ZV9kb19yZXNldChkZXYpOwo+ICsJY2FzZSA0OiByZXR1cm4gaTk2NV9kb19yZXNldChkZXYpOwo+ ICsJY2FzZSAyOiByZXR1cm4gaTh4eF9kb19yZXNldChkZXYpOwo+ICsJZGVmYXVsdDogcmV0dXJu IC1FTk9ERVY7Cj4gKwl9Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfdW5jb3JlX2NsZWFyX2Vycm9y cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsKPiArCWlmIChIQVNfRlBHQV9EQkdf VU5DTEFJTUVEKGRldikpCj4gKwkJSTkxNV9XUklURV9OT1RSQUNFKEZQR0FfREJHLCBGUEdBX0RC R19STV9OT0NMQUlNKTsKPiArfQo+ICsKPiArdm9pZCBpbnRlbF91bmNvcmVfY2hlY2tfZXJyb3Jz KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJaWYgKEhBU19GUEdBX0RCR19V TkNMQUlNRUQoZGV2KSAmJgo+ICsJICAgIChJOTE1X1JFQURfTk9UUkFDRShGUEdBX0RCRykgJiBG UEdBX0RCR19STV9OT0NMQUlNKSkgewo+ICsJCURSTV9FUlJPUigiVW5jbGFpbWVkIHJlZ2lzdGVy IGJlZm9yZSBpbnRlcnJ1cHRcbiIpOwo+ICsJCUk5MTVfV1JJVEVfTk9UUkFDRShGUEdBX0RCRywg RlBHQV9EQkdfUk1fTk9DTEFJTSk7Cj4gKwl9Cj4gK30KPiAtLSAKPiAxLjguMy4yCj4gCj4gX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZngg bWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHA6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKCi0tIApCZW4g V2lkYXdza3ksIEludGVsIE9wZW4gU291cmNlIFRlY2hub2xvZ3kgQ2VudGVyCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxp c3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==