From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH 3/8] drm/i915: Pull all the reset functionality together into i915_reset.c Date: Wed, 16 Jan 2019 17:06:37 +0200 Message-ID: <874la8y742.fsf@gaia.fi.intel.com> References: <20190114210408.4561-1-chris@chris-wilson.co.uk> <20190114210408.4561-4-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id E761E6F0ED for ; Wed, 16 Jan 2019 15:08:25 +0000 (UTC) In-Reply-To: <20190114210408.4561-4-chris@chris-wilson.co.uk> 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 List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gQ3VycmVu dGx5IHRoZSBjb2RlIHRvIHJlc2V0IHRoZSBHUFUgYW5kIG91ciBzdGF0ZSBpcyBzcHJlYWQgd2lk ZWx5Cj4gYWNyb3NzIGEgZmV3IGZpbGVzLiBQdWxsIHRoZSBsb2dpYyB0b2dldGhlciBpbnRvIGEg Y29tbW9uIGZpbGUuCj4KPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlz LXdpbHNvbi5jby51az4KCkR1bm5vIGhvdyBpdCBnb2VzIGJ1dCBndXQgZmVlbGluZyB0aGF0IHRo aXMgd291bGQgaGF2ZQpiZWVuIGJldHRlciBhdCB0aGUgZW5kIG9mIHNlcmllcyBhZnRlciB0aGUg ZHVzdCBoYXMgc2V0dGxlZC4KUmVnYXJkbGVzcywKCkFja2VkLWJ5OiBNaWthIEt1b3BwYWxhIDxt aWthLmt1b3BwYWxhQGxpbnV4LmludGVsLmNvbT4KCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgIDMgKy0KPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgICAgICAgICAgIHwgICAgMiArCj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmMgICAgICAgICAgICAgICB8ICAyMDYgKy0tCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAgICAgICB8ICAgMzMgKy0KPiAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgICAgICAgIHwgIDQ0NiArLS0tLS0KPiAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgICAgICAgICAgIHwgICAgMSArCj4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgICAgICAgICAgICAgICB8ICAyMzggLS0tCj4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jICAgICAgICAgICB8ICAgIDEgKwo+ ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jlc2V0LmMgICAgICAgICAgICAgfCAxMzg5ICsr KysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVzZXQuaCAgICAg ICAgICAgICB8ICAgNTYgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMg ICAgICAgICAgfCAgIDE1ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9j cy5jICAgICAgICB8ICAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaCAg ICAgICAgICAgICAgfCAgICAzICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGFuZ2No ZWNrLmMgICAgICAgIHwgICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjLmMg ICAgICAgICAgICAgICB8ICAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91bmNv cmUuYyAgICAgICAgICAgfCAgNTU2IC0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2ludGVsX2xyYy5jICAgIHwgICAgMiArCj4gIC4uLi9kcm0vaTkxNS9zZWxmdGVzdHMv aW50ZWxfd29ya2Fyb3VuZHMuYyAgICB8ICAgIDEgKwo+ICAxOCBmaWxlcyBjaGFuZ2VkLCAxNDgz IGluc2VydGlvbnMoKyksIDE0NzIgZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jlc2V0LmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVzZXQuaAo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBp bmRleCBjMzRiZWUxNjczMGQuLjYxMTExNWVkMDBkYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxl Cj4gQEAgLTQwLDkgKzQwLDEwIEBAIGk5MTUteSA6PSBpOTE1X2Rydi5vIFwKPiAgCSAgaTkxNV9t bS5vIFwKPiAgCSAgaTkxNV9wYXJhbXMubyBcCj4gIAkgIGk5MTVfcGNpLm8gXAo+ICsJICBpOTE1 X3Jlc2V0Lm8gXAo+ICAJICBpOTE1X3N1c3BlbmQubyBcCj4gLQkgIGk5MTVfc3luY21hcC5vIFwK PiAgCSAgaTkxNV9zd19mZW5jZS5vIFwKPiArCSAgaTkxNV9zeW5jbWFwLm8gXAo+ICAJICBpOTE1 X3N5c2ZzLm8gXAo+ICAJICBpbnRlbF9jc3IubyBcCj4gIAkgIGludGVsX2RldmljZV9pbmZvLm8g XAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gaW5kZXggZGE2ZDI1ODFjYjBlLi5h OTNhYmIyMjc0ZTYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1 Z2ZzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+IEBAIC0z Miw2ICszMiw4IEBACj4gICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKPiAgI2luY2x1ZGUgImludGVs X2d1Y19zdWJtaXNzaW9uLmgiCj4gIAo+ICsjaW5jbHVkZSAiaTkxNV9yZXNldC5oIgo+ICsKPiAg c3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqbm9kZV90b19pOTE1KHN0cnVj dCBkcm1faW5mb19ub2RlICpub2RlKQo+ICB7Cj4gIAlyZXR1cm4gdG9faTkxNShub2RlLT5taW5v ci0+ZGV2KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiBpbmRleCBkYWZiYmZhZGQxYWQuLmY0 NjJhNGQyOGFmNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+IEBAIC00OCw2ICs0OCw3 IEBACj4gICNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ICAjaW5jbHVkZSAiaTkxNV90cmFjZS5oIgo+ ICAjaW5jbHVkZSAiaTkxNV9wbXUuaCIKPiArI2luY2x1ZGUgImk5MTVfcmVzZXQuaCIKPiAgI2lu Y2x1ZGUgImk5MTVfcXVlcnkuaCIKPiAgI2luY2x1ZGUgImk5MTVfdmdwdS5oIgo+ICAjaW5jbHVk ZSAiaW50ZWxfZHJ2LmgiCj4gQEAgLTIyMDUsMjExICsyMjA2LDYgQEAgc3RhdGljIGludCBpOTE1 X3Jlc3VtZV9zd2l0Y2hlcm9vKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAlyZXR1cm4gaTkx NV9kcm1fcmVzdW1lKGRldik7Cj4gIH0KPiAgCj4gLS8qKgo+IC0gKiBpOTE1X3Jlc2V0IC0gcmVz ZXQgY2hpcCBhZnRlciBhIGhhbmcKPiAtICogQGk5MTU6ICNkcm1faTkxNV9wcml2YXRlIHRvIHJl c2V0Cj4gLSAqIEBzdGFsbGVkX21hc2s6IG1hc2sgb2YgdGhlIHN0YWxsZWQgZW5naW5lcyB3aXRo IHRoZSBndWlsdHkgcmVxdWVzdHMKPiAtICogQHJlYXNvbjogdXNlciBlcnJvciBtZXNzYWdlIGZv ciB3aHkgd2UgYXJlIHJlc2V0dGluZwo+IC0gKgo+IC0gKiBSZXNldCB0aGUgY2hpcC4gIFVzZWZ1 bCBpZiBhIGhhbmcgaXMgZGV0ZWN0ZWQuIE1hcmtzIHRoZSBkZXZpY2UgYXMgd2VkZ2VkCj4gLSAq IG9uIGZhaWx1cmUuCj4gLSAqCj4gLSAqIENhbGxlciBtdXN0IGhvbGQgdGhlIHN0cnVjdF9tdXRl eC4KPiAtICoKPiAtICogUHJvY2VkdXJlIGlzIGZhaXJseSBzaW1wbGU6Cj4gLSAqICAgLSByZXNl dCB0aGUgY2hpcCB1c2luZyB0aGUgcmVzZXQgcmVnCj4gLSAqICAgLSByZS1pbml0IGNvbnRleHQg c3RhdGUKPiAtICogICAtIHJlLWluaXQgaGFyZHdhcmUgc3RhdHVzIHBhZ2UKPiAtICogICAtIHJl LWluaXQgcmluZyBidWZmZXIKPiAtICogICAtIHJlLWluaXQgaW50ZXJydXB0IHN0YXRlCj4gLSAq ICAgLSByZS1pbml0IGRpc3BsYXkKPiAtICovCj4gLXZvaWQgaTkxNV9yZXNldChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAtCQl1bnNpZ25lZCBpbnQgc3RhbGxlZF9tYXNrLAo+IC0J CWNvbnN0IGNoYXIgKnJlYXNvbikKPiAtewo+IC0Jc3RydWN0IGk5MTVfZ3B1X2Vycm9yICplcnJv ciA9ICZpOTE1LT5ncHVfZXJyb3I7Cj4gLQlpbnQgcmV0Owo+IC0JaW50IGk7Cj4gLQo+IC0JR0VN X1RSQUNFKCJmbGFncz0lbHhcbiIsIGVycm9yLT5mbGFncyk7Cj4gLQo+IC0JbWlnaHRfc2xlZXAo KTsKPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0J YXNzZXJ0X3JwbV93YWtlbG9ja19oZWxkKGk5MTUpOwo+IC0JR0VNX0JVR19PTighdGVzdF9iaXQo STkxNV9SRVNFVF9CQUNLT0ZGLCAmZXJyb3ItPmZsYWdzKSk7Cj4gLQo+IC0JaWYgKCF0ZXN0X2Jp dChJOTE1X1JFU0VUX0hBTkRPRkYsICZlcnJvci0+ZmxhZ3MpKQo+IC0JCXJldHVybjsKPiAtCj4g LQkvKiBDbGVhciBhbnkgcHJldmlvdXMgZmFpbGVkIGF0dGVtcHRzIGF0IHJlY292ZXJ5LiBUaW1l IHRvIHRyeSBhZ2Fpbi4gKi8KPiAtCWlmICghaTkxNV9nZW1fdW5zZXRfd2VkZ2VkKGk5MTUpKQo+ IC0JCWdvdG8gd2FrZXVwOwo+IC0KPiAtCWlmIChyZWFzb24pCj4gLQkJZGV2X25vdGljZShpOTE1 LT5kcm0uZGV2LCAiUmVzZXR0aW5nIGNoaXAgZm9yICVzXG4iLCByZWFzb24pOwo+IC0JZXJyb3It PnJlc2V0X2NvdW50Kys7Cj4gLQo+IC0JcmV0ID0gaTkxNV9nZW1fcmVzZXRfcHJlcGFyZShpOTE1 KTsKPiAtCWlmIChyZXQpIHsKPiAtCQlkZXZfZXJyKGk5MTUtPmRybS5kZXYsICJHUFUgcmVjb3Zl cnkgZmFpbGVkXG4iKTsKPiAtCQlnb3RvIHRhaW50Owo+IC0JfQo+IC0KPiAtCWlmICghaW50ZWxf aGFzX2dwdV9yZXNldChpOTE1KSkgewo+IC0JCWlmIChpOTE1X21vZHBhcmFtcy5yZXNldCkKPiAt CQkJZGV2X2VycihpOTE1LT5kcm0uZGV2LCAiR1BVIHJlc2V0IG5vdCBzdXBwb3J0ZWRcbiIpOwo+ IC0JCWVsc2UKPiAtCQkJRFJNX0RFQlVHX0RSSVZFUigiR1BVIHJlc2V0IGRpc2FibGVkXG4iKTsK PiAtCQlnb3RvIGVycm9yOwo+IC0JfQo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsK PiAtCQlyZXQgPSBpbnRlbF9ncHVfcmVzZXQoaTkxNSwgQUxMX0VOR0lORVMpOwo+IC0JCWlmIChy ZXQgPT0gMCkKPiAtCQkJYnJlYWs7Cj4gLQo+IC0JCW1zbGVlcCgxMDApOwo+IC0JfQo+IC0JaWYg KHJldCkgewo+IC0JCWRldl9lcnIoaTkxNS0+ZHJtLmRldiwgIkZhaWxlZCB0byByZXNldCBjaGlw XG4iKTsKPiAtCQlnb3RvIHRhaW50Owo+IC0JfQo+IC0KPiAtCS8qIE9rLCBub3cgZ2V0IHRoaW5n cyBnb2luZyBhZ2Fpbi4uLiAqLwo+IC0KPiAtCS8qCj4gLQkgKiBFdmVyeXRoaW5nIGRlcGVuZHMg b24gaGF2aW5nIHRoZSBHVFQgcnVubmluZywgc28gd2UgbmVlZCB0byBzdGFydAo+IC0JICogdGhl cmUuCj4gLQkgKi8KPiAtCXJldCA9IGk5MTVfZ2d0dF9lbmFibGVfaHcoaTkxNSk7Cj4gLQlpZiAo cmV0KSB7Cj4gLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmUtZW5hYmxlIEdHVFQgZm9sbG93aW5n IHJlc2V0ICglZClcbiIsCj4gLQkJCSAgcmV0KTsKPiAtCQlnb3RvIGVycm9yOwo+IC0JfQo+IC0K PiAtCWk5MTVfZ2VtX3Jlc2V0KGk5MTUsIHN0YWxsZWRfbWFzayk7Cj4gLQlpbnRlbF9vdmVybGF5 X3Jlc2V0KGk5MTUpOwo+IC0KPiAtCS8qCj4gLQkgKiBOZXh0IHdlIG5lZWQgdG8gcmVzdG9yZSB0 aGUgY29udGV4dCwgYnV0IHdlIGRvbid0IHVzZSB0aG9zZQo+IC0JICogeWV0IGVpdGhlci4uLgo+ IC0JICoKPiAtCSAqIFJpbmcgYnVmZmVyIG5lZWRzIHRvIGJlIHJlLWluaXRpYWxpemVkIGluIHRo ZSBLTVMgY2FzZSwgb3IgaWYgWAo+IC0JICogd2FzIHJ1bm5pbmcgYXQgdGhlIHRpbWUgb2YgdGhl IHJlc2V0IChpLmUuIHdlIHdlcmVuJ3QgVlQKPiAtCSAqIHN3aXRjaGVkIGF3YXkpLgo+IC0JICov Cj4gLQlyZXQgPSBpOTE1X2dlbV9pbml0X2h3KGk5MTUpOwo+IC0JaWYgKHJldCkgewo+IC0JCURS TV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpc2UgSFcgZm9sbG93aW5nIHJlc2V0ICglZClcbiIs Cj4gLQkJCSAgcmV0KTsKPiAtCQlnb3RvIGVycm9yOwo+IC0JfQo+IC0KPiAtCWk5MTVfcXVldWVf aGFuZ2NoZWNrKGk5MTUpOwo+IC0KPiAtZmluaXNoOgo+IC0JaTkxNV9nZW1fcmVzZXRfZmluaXNo KGk5MTUpOwo+IC13YWtldXA6Cj4gLQljbGVhcl9iaXQoSTkxNV9SRVNFVF9IQU5ET0ZGLCAmZXJy b3ItPmZsYWdzKTsKPiAtCXdha2VfdXBfYml0KCZlcnJvci0+ZmxhZ3MsIEk5MTVfUkVTRVRfSEFO RE9GRik7Cj4gLQlyZXR1cm47Cj4gLQo+IC10YWludDoKPiAtCS8qCj4gLQkgKiBIaXN0b3J5IHRl bGxzIHVzIHRoYXQgaWYgd2UgY2Fubm90IHJlc2V0IHRoZSBHUFUgbm93LCB3ZQo+IC0JICogbmV2 ZXIgd2lsbC4gVGhpcyB0aGVuIGltcGFjdHMgZXZlcnl0aGluZyB0aGF0IGlzIHJ1bgo+IC0JICog c3Vic2VxdWVudGx5LiBPbiBmYWlsaW5nIHRoZSByZXNldCwgd2UgbWFyayB0aGUgZHJpdmVyCj4g LQkgKiBhcyB3ZWRnZWQsIHByZXZlbnRpbmcgZnVydGhlciBleGVjdXRpb24gb24gdGhlIEdQVS4K PiAtCSAqIFdlIGFsc28gd2FudCB0byBnbyBvbmUgc3RlcCBmdXJ0aGVyIGFuZCBhZGQgYSB0YWlu dCB0byB0aGUKPiAtCSAqIGtlcm5lbCBzbyB0aGF0IGFueSBzdWJzZXF1ZW50IGZhdWx0cyBjYW4g YmUgdHJhY2VkIGJhY2sgdG8KPiAtCSAqIHRoaXMgZmFpbHVyZS4gVGhpcyBpcyBpbXBvcnRhbnQg Zm9yIENJLCB3aGVyZSBpZiB0aGUKPiAtCSAqIEdQVS9kcml2ZXIgZmFpbHMgd2Ugd291bGQgbGlr ZSB0byByZWJvb3QgYW5kIHJlc3RhcnQgdGVzdGluZwo+IC0JICogcmF0aGVyIHRoYW4gY29udGlu dWUgb24gaW50byBvYmxpdmlvbi4gRm9yIGV2ZXJ5b25lIGVsc2UsCj4gLQkgKiB0aGUgc3lzdGVt IHNob3VsZCBzdGlsbCBwbG9kIGFsb25nLCBidXQgdGhleSBoYXZlIGJlZW4gd2FybmVkIQo+IC0J ICovCj4gLQlhZGRfdGFpbnQoVEFJTlRfV0FSTiwgTE9DS0RFUF9TVElMTF9PSyk7Cj4gLWVycm9y Ogo+IC0JaTkxNV9nZW1fc2V0X3dlZGdlZChpOTE1KTsKPiAtCWk5MTVfcmV0aXJlX3JlcXVlc3Rz KGk5MTUpOwo+IC0JZ290byBmaW5pc2g7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgaW50IGlu dGVsX2d0X3Jlc2V0X2VuZ2luZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4g LQkJCQkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+IC17Cj4gLQlyZXR1cm4gaW50 ZWxfZ3B1X3Jlc2V0KGRldl9wcml2LCBpbnRlbF9lbmdpbmVfZmxhZyhlbmdpbmUpKTsKPiAtfQo+ IC0KPiAtLyoqCj4gLSAqIGk5MTVfcmVzZXRfZW5naW5lIC0gcmVzZXQgR1BVIGVuZ2luZSB0byBy ZWNvdmVyIGZyb20gYSBoYW5nCj4gLSAqIEBlbmdpbmU6IGVuZ2luZSB0byByZXNldAo+IC0gKiBA bXNnOiByZWFzb24gZm9yIEdQVSByZXNldDsgb3IgTlVMTCBmb3Igbm8gZGV2X25vdGljZSgpCj4g LSAqCj4gLSAqIFJlc2V0IGEgc3BlY2lmaWMgR1BVIGVuZ2luZS4gVXNlZnVsIGlmIGEgaGFuZyBp cyBkZXRlY3RlZC4KPiAtICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3NmdWwgcmVzZXQgb3Igb3Ro ZXJ3aXNlIGFuIGVycm9yIGNvZGUuCj4gLSAqCj4gLSAqIFByb2NlZHVyZSBpczoKPiAtICogIC0g aWRlbnRpZmllcyB0aGUgcmVxdWVzdCB0aGF0IGNhdXNlZCB0aGUgaGFuZyBhbmQgaXQgaXMgZHJv cHBlZAo+IC0gKiAgLSByZXNldCBlbmdpbmUgKHdoaWNoIHdpbGwgZm9yY2UgdGhlIGVuZ2luZSB0 byBpZGxlKQo+IC0gKiAgLSByZS1pbml0L2NvbmZpZ3VyZSBlbmdpbmUKPiAtICovCj4gLWludCBp OTE1X3Jlc2V0X2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIGNvbnN0IGNo YXIgKm1zZykKPiAtewo+IC0Jc3RydWN0IGk5MTVfZ3B1X2Vycm9yICplcnJvciA9ICZlbmdpbmUt Pmk5MTUtPmdwdV9lcnJvcjsKPiAtCXN0cnVjdCBpOTE1X3JlcXVlc3QgKmFjdGl2ZV9yZXF1ZXN0 Owo+IC0JaW50IHJldDsKPiAtCj4gLQlHRU1fVFJBQ0UoIiVzIGZsYWdzPSVseFxuIiwgZW5naW5l LT5uYW1lLCBlcnJvci0+ZmxhZ3MpOwo+IC0JR0VNX0JVR19PTighdGVzdF9iaXQoSTkxNV9SRVNF VF9FTkdJTkUgKyBlbmdpbmUtPmlkLCAmZXJyb3ItPmZsYWdzKSk7Cj4gLQo+IC0JYWN0aXZlX3Jl cXVlc3QgPSBpOTE1X2dlbV9yZXNldF9wcmVwYXJlX2VuZ2luZShlbmdpbmUpOwo+IC0JaWYgKElT X0VSUl9PUl9OVUxMKGFjdGl2ZV9yZXF1ZXN0KSkgewo+IC0JCS8qIEVpdGhlciB0aGUgcHJldmlv dXMgcmVzZXQgZmFpbGVkLCBvciB3ZSBwYXJkb24gdGhlIHJlc2V0LiAqLwo+IC0JCXJldCA9IFBU Ul9FUlIoYWN0aXZlX3JlcXVlc3QpOwo+IC0JCWdvdG8gb3V0Owo+IC0JfQo+IC0KPiAtCWlmICht c2cpCj4gLQkJZGV2X25vdGljZShlbmdpbmUtPmk5MTUtPmRybS5kZXYsCj4gLQkJCSAgICJSZXNl dHRpbmcgJXMgZm9yICVzXG4iLCBlbmdpbmUtPm5hbWUsIG1zZyk7Cj4gLQllcnJvci0+cmVzZXRf ZW5naW5lX2NvdW50W2VuZ2luZS0+aWRdKys7Cj4gLQo+IC0JaWYgKCFlbmdpbmUtPmk5MTUtPmd1 Yy5leGVjYnVmX2NsaWVudCkKPiAtCQlyZXQgPSBpbnRlbF9ndF9yZXNldF9lbmdpbmUoZW5naW5l LT5pOTE1LCBlbmdpbmUpOwo+IC0JZWxzZQo+IC0JCXJldCA9IGludGVsX2d1Y19yZXNldF9lbmdp bmUoJmVuZ2luZS0+aTkxNS0+Z3VjLCBlbmdpbmUpOwo+IC0JaWYgKHJldCkgewo+IC0JCS8qIElm IHdlIGZhaWwgaGVyZSwgd2UgZXhwZWN0IHRvIGZhbGxiYWNrIHRvIGEgZ2xvYmFsIHJlc2V0ICov Cj4gLQkJRFJNX0RFQlVHX0RSSVZFUigiJXNGYWlsZWQgdG8gcmVzZXQgJXMsIHJldD0lZFxuIiwK PiAtCQkJCSBlbmdpbmUtPmk5MTUtPmd1Yy5leGVjYnVmX2NsaWVudCA/ICJHdUMgIiA6ICIiLAo+ IC0JCQkJIGVuZ2luZS0+bmFtZSwgcmV0KTsKPiAtCQlnb3RvIG91dDsKPiAtCX0KPiAtCj4gLQkv Kgo+IC0JICogVGhlIHJlcXVlc3QgdGhhdCBjYXVzZWQgdGhlIGhhbmcgaXMgc3R1Y2sgb24gZWxz cCwgd2Uga25vdyB0aGUKPiAtCSAqIGFjdGl2ZSByZXF1ZXN0IGFuZCBjYW4gZHJvcCBpdCwgYWRq dXN0IGhlYWQgdG8gc2tpcCB0aGUgb2ZmZW5kaW5nCj4gLQkgKiByZXF1ZXN0IHRvIHJlc3VtZSBl eGVjdXRpbmcgcmVtYWluaW5nIHJlcXVlc3RzIGluIHRoZSBxdWV1ZS4KPiAtCSAqLwo+IC0JaTkx NV9nZW1fcmVzZXRfZW5naW5lKGVuZ2luZSwgYWN0aXZlX3JlcXVlc3QsIHRydWUpOwo+IC0KPiAt CS8qCj4gLQkgKiBUaGUgZW5naW5lIGFuZCBpdHMgcmVnaXN0ZXJzIChhbmQgd29ya2Fyb3VuZHMg aW4gY2FzZSBvZiByZW5kZXIpCj4gLQkgKiBoYXZlIGJlZW4gcmVzZXQgdG8gdGhlaXIgZGVmYXVs dCB2YWx1ZXMuIEZvbGxvdyB0aGUgaW5pdF9yaW5nCj4gLQkgKiBwcm9jZXNzIHRvIHByb2dyYW0g UklOR19NT0RFLCBIV1NQIGFuZCByZS1lbmFibGUgc3VibWlzc2lvbi4KPiAtCSAqLwo+IC0JcmV0 ID0gZW5naW5lLT5pbml0X2h3KGVuZ2luZSk7Cj4gLQlpZiAocmV0KQo+IC0JCWdvdG8gb3V0Owo+ IC0KPiAtb3V0Ogo+IC0JaW50ZWxfZW5naW5lX2NhbmNlbF9zdG9wX2NzKGVuZ2luZSk7Cj4gLQlp OTE1X2dlbV9yZXNldF9maW5pc2hfZW5naW5lKGVuZ2luZSk7Cj4gLQlyZXR1cm4gcmV0Owo+IC19 Cj4gLQo+ICBzdGF0aWMgaW50IGk5MTVfcG1fcHJlcGFyZShzdHJ1Y3QgZGV2aWNlICprZGV2KQo+ ICB7Cj4gIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoa2Rldik7Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggZmE5OTgyNGY2M2IzLi4yMjRkNDMzYWM3YjYgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAtMjYxMSwxOSArMjYxMSw3IEBAIGV4dGVybiBj b25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBpOTE1X3BtX29wczsKPiAgZXh0ZXJuIGludCBpOTE1X2Ry aXZlcl9sb2FkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAo+ICAJCQkgICAgY29uc3Qgc3RydWN0IHBj aV9kZXZpY2VfaWQgKmVudCk7Cj4gIGV4dGVybiB2b2lkIGk5MTVfZHJpdmVyX3VubG9hZChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAtZXh0ZXJuIGludCBpbnRlbF9ncHVfcmVzZXQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgZW5naW5lX21hc2spOwo+IC1leHRlcm4g Ym9vbCBpbnRlbF9oYXNfZ3B1X3Jlc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dik7Cj4gLQo+IC1leHRlcm4gdm9pZCBpOTE1X3Jlc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1LAo+IC0JCSAgICAgICB1bnNpZ25lZCBpbnQgc3RhbGxlZF9tYXNrLAo+IC0JCSAgICAg ICBjb25zdCBjaGFyICpyZWFzb24pOwo+IC1leHRlcm4gaW50IGk5MTVfcmVzZXRfZW5naW5lKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAtCQkJICAgICBjb25zdCBjaGFyICpyZWFz b24pOwo+IC0KPiAtZXh0ZXJuIGJvb2wgaW50ZWxfaGFzX3Jlc2V0X2VuZ2luZShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+IC1leHRlcm4gaW50IGludGVsX3Jlc2V0X2d1Yyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+IC1leHRlcm4gaW50IGludGVsX2d1 Y19yZXNldF9lbmdpbmUoc3RydWN0IGludGVsX2d1YyAqZ3VjLAo+IC0JCQkJICBzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICsKPiAgZXh0ZXJuIHZvaWQgaW50ZWxfZW5naW5lX2lu aXRfaGFuZ2NoZWNrKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gIGV4dGVybiB2 b2lkIGludGVsX2hhbmdjaGVja19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dik7Cj4gIGV4dGVybiB1bnNpZ25lZCBsb25nIGk5MTVfY2hpcHNldF92YWwoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiBAQCAtMjY2NiwyMCArMjY1NCwxMSBAQCBzdGF0aWMg aW5saW5lIHZvaWQgaTkxNV9xdWV1ZV9oYW5nY2hlY2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQo+ICAJCQkgICAmZGV2X3ByaXYtPmdwdV9lcnJvci5oYW5nY2hlY2tfd29yaywg ZGVsYXkpOwo+ICB9Cj4gIAo+IC1fX3ByaW50Zig0LCA1KQo+IC12b2lkIGk5MTVfaGFuZGxlX2Vy cm9yKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkgICAgICAgdTMyIGVu Z2luZV9tYXNrLAo+IC0JCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLAo+IC0JCSAgICAgICBj b25zdCBjaGFyICpmbXQsIC4uLik7Cj4gLSNkZWZpbmUgSTkxNV9FUlJPUl9DQVBUVVJFIEJJVCgw KQo+IC0KPiAgZXh0ZXJuIHZvaWQgaW50ZWxfaXJxX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KTsKPiAgZXh0ZXJuIHZvaWQgaW50ZWxfaXJxX2Zpbmkoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAgaW50IGludGVsX2lycV9pbnN0YWxsKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIHZvaWQgaW50ZWxfaXJxX3VuaW5zdGFsbChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICAKPiAtdm9pZCBpOTE1X2NsZWFy X2Vycm9yX3JlZ2lzdGVycyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+IC0K PiAgc3RhdGljIGlubGluZSBib29sIGludGVsX2d2dF9hY3RpdmUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+ICB7Cj4gIAlyZXR1cm4gZGV2X3ByaXYtPmd2dDsKPiBAQCAtMzA0 NCwxOCArMzAyMyw4IEBAIHN0YXRpYyBpbmxpbmUgdTMyIGk5MTVfcmVzZXRfZW5naW5lX2NvdW50 KHN0cnVjdCBpOTE1X2dwdV9lcnJvciAqZXJyb3IsCj4gIAlyZXR1cm4gUkVBRF9PTkNFKGVycm9y LT5yZXNldF9lbmdpbmVfY291bnRbZW5naW5lLT5pZF0pOwo+ICB9Cj4gIAo+IC1zdHJ1Y3QgaTkx NV9yZXF1ZXN0ICoKPiAtaTkxNV9nZW1fcmVzZXRfcHJlcGFyZV9lbmdpbmUoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKTsKPiAtaW50IGk5MTVfZ2VtX3Jlc2V0X3ByZXBhcmUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAtdm9pZCBpOTE1X2dlbV9yZXNldChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJICAgIHVuc2lnbmVkIGludCBzdGFs bGVkX21hc2spOwo+IC12b2lkIGk5MTVfZ2VtX3Jlc2V0X2ZpbmlzaF9lbmdpbmUoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiAtdm9pZCBpOTE1X2dlbV9yZXNldF9maW5pc2goc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAgdm9pZCBpOTE1X2dlbV9zZXRfd2Vk Z2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIGJvb2wgaTkxNV9nZW1f dW5zZXRfd2VkZ2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gLXZvaWQg aTkxNV9nZW1fcmVzZXRfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAt CQkJICAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCwKPiAtCQkJICAgYm9vbCBzdGFsbGVk KTsKPiAgCj4gIHZvaWQgaTkxNV9nZW1faW5pdF9tbWlvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1KTsKPiAgaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9pbml0KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gaW5kZXggOTEw YzQ5YmVmYzUwLi5hN2UwZDYxYTQ1ZWEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBA QCAtMjcsMTUgKzI3LDYgQEAKPiAgCj4gICNpbmNsdWRlIDxkcm0vZHJtX3ZtYV9tYW5hZ2VyLmg+ Cj4gICNpbmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4KPiAtI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4g LSNpbmNsdWRlICJpOTE1X2dlbV9jbGZsdXNoLmgiCj4gLSNpbmNsdWRlICJpOTE1X3ZncHUuaCIK PiAtI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKPiAtI2luY2x1ZGUgImludGVsX2Rydi5oIgo+IC0j aW5jbHVkZSAiaW50ZWxfZnJvbnRidWZmZXIuaCIKPiAtI2luY2x1ZGUgImludGVsX21vY3MuaCIK PiAtI2luY2x1ZGUgImludGVsX3dvcmthcm91bmRzLmgiCj4gLSNpbmNsdWRlICJpOTE1X2dlbWZz LmgiCj4gICNpbmNsdWRlIDxsaW51eC9kbWEtZmVuY2UtYXJyYXkuaD4KPiAgI2luY2x1ZGUgPGxp bnV4L2t0aHJlYWQuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+Cj4gQEAgLTQ2 LDYgKzM3LDE4IEBACj4gICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KPiAgI2luY2x1ZGUgPGxpbnV4 L2RtYS1idWYuaD4KPiAgCj4gKyNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ICsjaW5jbHVkZSAiaTkx NV9nZW1fY2xmbHVzaC5oIgo+ICsjaW5jbHVkZSAiaTkxNV9nZW1mcy5oIgo+ICsjaW5jbHVkZSAi aTkxNV9yZXNldC5oIgo+ICsjaW5jbHVkZSAiaTkxNV90cmFjZS5oIgo+ICsjaW5jbHVkZSAiaTkx NV92Z3B1LmgiCj4gKwo+ICsjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCj4gKyNpbmNsdWRlICJpbnRl bF9mcm9udGJ1ZmZlci5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfbW9jcy5oIgo+ICsjaW5jbHVkZSAi aW50ZWxfd29ya2Fyb3VuZHMuaCIKPiArCj4gIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX2ZsdXNoX2Zy ZWVfb2JqZWN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cj4gIAo+ICBzdGF0aWMg Ym9vbCBjcHVfd3JpdGVfbmVlZHNfY2xmbHVzaChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqKQo+IEBAIC0yODU5LDYxICsyODYyLDYgQEAgaTkxNV9nZW1fb2JqZWN0X3B3cml0ZV9ndHQo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+ IC1zdGF0aWMgdm9pZCBpOTE1X2dlbV9jbGllbnRfbWFya19ndWlsdHkoc3RydWN0IGRybV9pOTE1 X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2LAo+IC0JCQkJCWNvbnN0IHN0cnVjdCBpOTE1X2dlbV9j b250ZXh0ICpjdHgpCj4gLXsKPiAtCXVuc2lnbmVkIGludCBzY29yZTsKPiAtCXVuc2lnbmVkIGxv bmcgcHJldl9oYW5nOwo+IC0KPiAtCWlmIChpOTE1X2dlbV9jb250ZXh0X2lzX2Jhbm5lZChjdHgp KQo+IC0JCXNjb3JlID0gSTkxNV9DTElFTlRfU0NPUkVfQ09OVEVYVF9CQU47Cj4gLQllbHNlCj4g LQkJc2NvcmUgPSAwOwo+IC0KPiAtCXByZXZfaGFuZyA9IHhjaGcoJmZpbGVfcHJpdi0+aGFuZ190 aW1lc3RhbXAsIGppZmZpZXMpOwo+IC0JaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHByZXZfaGFu ZyArIEk5MTVfQ0xJRU5UX0ZBU1RfSEFOR19KSUZGSUVTKSkKPiAtCQlzY29yZSArPSBJOTE1X0NM SUVOVF9TQ09SRV9IQU5HX0ZBU1Q7Cj4gLQo+IC0JaWYgKHNjb3JlKSB7Cj4gLQkJYXRvbWljX2Fk ZChzY29yZSwgJmZpbGVfcHJpdi0+YmFuX3Njb3JlKTsKPiAtCj4gLQkJRFJNX0RFQlVHX0RSSVZF UigiY2xpZW50ICVzOiBnYWluZWQgJXUgYmFuIHNjb3JlLCBub3cgJXVcbiIsCj4gLQkJCQkgY3R4 LT5uYW1lLCBzY29yZSwKPiAtCQkJCSBhdG9taWNfcmVhZCgmZmlsZV9wcml2LT5iYW5fc2NvcmUp KTsKPiAtCX0KPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaTkxNV9nZW1fY29udGV4dF9tYXJrX2d1 aWx0eShzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+IC17Cj4gLQl1bnNpZ25lZCBpbnQg c2NvcmU7Cj4gLQlib29sIGJhbm5lZCwgYmFubmFibGU7Cj4gLQo+IC0JYXRvbWljX2luYygmY3R4 LT5ndWlsdHlfY291bnQpOwo+IC0KPiAtCWJhbm5hYmxlID0gaTkxNV9nZW1fY29udGV4dF9pc19i YW5uYWJsZShjdHgpOwo+IC0Jc2NvcmUgPSBhdG9taWNfYWRkX3JldHVybihDT05URVhUX1NDT1JF X0dVSUxUWSwgJmN0eC0+YmFuX3Njb3JlKTsKPiAtCWJhbm5lZCA9IHNjb3JlID49IENPTlRFWFRf U0NPUkVfQkFOX1RIUkVTSE9MRDsKPiAtCj4gLQkvKiBDb29sIGNvbnRleHRzIGRvbid0IGFjY3Vt dWxhdGUgY2xpZW50IGJhbiBzY29yZSAqLwo+IC0JaWYgKCFiYW5uYWJsZSkKPiAtCQlyZXR1cm47 Cj4gLQo+IC0JaWYgKGJhbm5lZCkgewo+IC0JCURSTV9ERUJVR19EUklWRVIoImNvbnRleHQgJXM6 IGd1aWx0eSAlZCwgc2NvcmUgJXUsIGJhbm5lZFxuIiwKPiAtCQkJCSBjdHgtPm5hbWUsIGF0b21p Y19yZWFkKCZjdHgtPmd1aWx0eV9jb3VudCksCj4gLQkJCQkgc2NvcmUpOwo+IC0JCWk5MTVfZ2Vt X2NvbnRleHRfc2V0X2Jhbm5lZChjdHgpOwo+IC0JfQo+IC0KPiAtCWlmICghSVNfRVJSX09SX05V TEwoY3R4LT5maWxlX3ByaXYpKQo+IC0JCWk5MTVfZ2VtX2NsaWVudF9tYXJrX2d1aWx0eShjdHgt PmZpbGVfcHJpdiwgY3R4KTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaTkxNV9nZW1fY29udGV4 dF9tYXJrX2lubm9jZW50KHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4gLXsKPiAtCWF0 b21pY19pbmMoJmN0eC0+YWN0aXZlX2NvdW50KTsKPiAtfQo+IC0KPiAgc3RydWN0IGk5MTVfcmVx dWVzdCAqCj4gIGk5MTVfZ2VtX2ZpbmRfYWN0aXZlX3JlcXVlc3Qoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQo+ICB7Cj4gQEAgLTI5NDQsMzc2ICsyODkyLDYgQEAgaTkxNV9nZW1fZmlu ZF9hY3RpdmVfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAlyZXR1 cm4gYWN0aXZlOwo+ICB9Cj4gIAo+IC0vKgo+IC0gKiBFbnN1cmUgaXJxIGhhbmRsZXIgZmluaXNo ZXMsIGFuZCBub3QgcnVuIGFnYWluLgo+IC0gKiBBbHNvIHJldHVybiB0aGUgYWN0aXZlIHJlcXVl c3Qgc28gdGhhdCB3ZSBvbmx5IHNlYXJjaCBmb3IgaXQgb25jZS4KPiAtICovCj4gLXN0cnVjdCBp OTE1X3JlcXVlc3QgKgo+IC1pOTE1X2dlbV9yZXNldF9wcmVwYXJlX2VuZ2luZShzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gLXsKPiAtCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVl c3Q7Cj4gLQo+IC0JLyoKPiAtCSAqIER1cmluZyB0aGUgcmVzZXQgc2VxdWVuY2UsIHdlIG11c3Qg cHJldmVudCB0aGUgZW5naW5lIGZyb20KPiAtCSAqIGVudGVyaW5nIFJDNi4gQXMgdGhlIGNvbnRl eHQgc3RhdGUgaXMgdW5kZWZpbmVkIHVudGlsIHdlIHJlc3RhcnQKPiAtCSAqIHRoZSBlbmdpbmUs IGlmIGl0IGRvZXMgZW50ZXIgUkM2IGR1cmluZyB0aGUgcmVzZXQsIHRoZSBzdGF0ZQo+IC0JICog d3JpdHRlbiB0byB0aGUgcG93ZXJjb250ZXh0IGlzIHVuZGVmaW5lZCBhbmQgc28gd2UgbWF5IGxv c2UKPiAtCSAqIEdQVSBzdGF0ZSB1cG9uIHJlc3VtZSwgaS5lLiBmYWlsIHRvIHJlc3RhcnQgYWZ0 ZXIgYSByZXNldC4KPiAtCSAqLwo+IC0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoZW5naW5l LT5pOTE1LCBGT1JDRVdBS0VfQUxMKTsKPiAtCj4gLQlyZXF1ZXN0ID0gZW5naW5lLT5yZXNldC5w cmVwYXJlKGVuZ2luZSk7Cj4gLQlpZiAocmVxdWVzdCAmJiByZXF1ZXN0LT5mZW5jZS5lcnJvciA9 PSAtRUlPKQo+IC0JCXJlcXVlc3QgPSBFUlJfUFRSKC1FSU8pOyAvKiBQcmV2aW91cyByZXNldCBm YWlsZWQhICovCj4gLQo+IC0JcmV0dXJuIHJlcXVlc3Q7Cj4gLX0KPiAtCj4gLWludCBpOTE1X2dl bV9yZXNldF9wcmVwYXJlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+ IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+IC0Jc3RydWN0IGk5MTVfcmVxdWVz dCAqcmVxdWVzdDsKPiAtCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+IC0JaW50IGVyciA9IDA7 Cj4gLQo+IC0JZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYsIGlkKSB7Cj4gLQkJcmVx dWVzdCA9IGk5MTVfZ2VtX3Jlc2V0X3ByZXBhcmVfZW5naW5lKGVuZ2luZSk7Cj4gLQkJaWYgKElT X0VSUihyZXF1ZXN0KSkgewo+IC0JCQllcnIgPSBQVFJfRVJSKHJlcXVlc3QpOwo+IC0JCQljb250 aW51ZTsKPiAtCQl9Cj4gLQo+IC0JCWVuZ2luZS0+aGFuZ2NoZWNrLmFjdGl2ZV9yZXF1ZXN0ID0g cmVxdWVzdDsKPiAtCX0KPiAtCj4gLQlpOTE1X2dlbV9yZXZva2VfZmVuY2VzKGRldl9wcml2KTsK PiAtCWludGVsX3VjX3Nhbml0aXplKGRldl9wcml2KTsKPiAtCj4gLQlyZXR1cm4gZXJyOwo+IC19 Cj4gLQo+IC1zdGF0aWMgdm9pZCBlbmdpbmVfc2tpcF9jb250ZXh0KHN0cnVjdCBpOTE1X3JlcXVl c3QgKnJlcXVlc3QpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IHJl cXVlc3QtPmVuZ2luZTsKPiAtCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpodW5nX2N0eCA9IHJl cXVlc3QtPmdlbV9jb250ZXh0Owo+IC0Jc3RydWN0IGk5MTVfdGltZWxpbmUgKnRpbWVsaW5lID0g cmVxdWVzdC0+dGltZWxpbmU7Cj4gLQl1bnNpZ25lZCBsb25nIGZsYWdzOwo+IC0KPiAtCUdFTV9C VUdfT04odGltZWxpbmUgPT0gJmVuZ2luZS0+dGltZWxpbmUpOwo+IC0KPiAtCXNwaW5fbG9ja19p cnFzYXZlKCZlbmdpbmUtPnRpbWVsaW5lLmxvY2ssIGZsYWdzKTsKPiAtCXNwaW5fbG9jaygmdGlt ZWxpbmUtPmxvY2spOwo+IC0KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUocmVxdWVz dCwgJmVuZ2luZS0+dGltZWxpbmUucmVxdWVzdHMsIGxpbmspCj4gLQkJaWYgKHJlcXVlc3QtPmdl bV9jb250ZXh0ID09IGh1bmdfY3R4KQo+IC0JCQlpOTE1X3JlcXVlc3Rfc2tpcChyZXF1ZXN0LCAt RUlPKTsKPiAtCj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcXVlc3QsICZ0aW1lbGluZS0+cmVx dWVzdHMsIGxpbmspCj4gLQkJaTkxNV9yZXF1ZXN0X3NraXAocmVxdWVzdCwgLUVJTyk7Cj4gLQo+ IC0Jc3Bpbl91bmxvY2soJnRpbWVsaW5lLT5sb2NrKTsKPiAtCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmVuZ2luZS0+dGltZWxpbmUubG9jaywgZmxhZ3MpOwo+IC19Cj4gLQo+IC0vKiBSZXR1cm5z IHRoZSByZXF1ZXN0IGlmIGl0IHdhcyBndWlsdHkgb2YgdGhlIGhhbmcgKi8KPiAtc3RhdGljIHN0 cnVjdCBpOTE1X3JlcXVlc3QgKgo+IC1pOTE1X2dlbV9yZXNldF9yZXF1ZXN0KHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAtCQkgICAgICAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVx dWVzdCwKPiAtCQkgICAgICAgYm9vbCBzdGFsbGVkKQo+IC17Cj4gLQkvKiBUaGUgZ3VpbHR5IHJl cXVlc3Qgd2lsbCBnZXQgc2tpcHBlZCBvbiBhIGh1bmcgZW5naW5lLgo+IC0JICoKPiAtCSAqIFVz ZXJzIG9mIGNsaWVudCBkZWZhdWx0IGNvbnRleHRzIGRvIG5vdCByZWx5IG9uIGxvZ2ljYWwKPiAt CSAqIHN0YXRlIHByZXNlcnZlZCBiZXR3ZWVuIGJhdGNoZXMgc28gaXQgaXMgc2FmZSB0byBleGVj dXRlCj4gLQkgKiBxdWV1ZWQgcmVxdWVzdHMgZm9sbG93aW5nIHRoZSBoYW5nLiBOb24gZGVmYXVs dCBjb250ZXh0cwo+IC0JICogcmVseSBvbiBwcmVzZXJ2ZWQgc3RhdGUsIHNvIHNraXBwaW5nIGEg YmF0Y2ggbG9zZXMgdGhlCj4gLQkgKiBldm9sdXRpb24gb2YgdGhlIHN0YXRlIGFuZCBpdCBuZWVk cyB0byBiZSBjb25zaWRlcmVkIGNvcnJ1cHRlZC4KPiAtCSAqIEV4ZWN1dGluZyBtb3JlIHF1ZXVl ZCBiYXRjaGVzIG9uIHRvcCBvZiBjb3JydXB0ZWQgc3RhdGUgaXMKPiAtCSAqIHJpc2t5LiBCdXQg d2UgdGFrZSB0aGUgcmlzayBieSB0cnlpbmcgdG8gYWR2YW5jZSB0aHJvdWdoCj4gLQkgKiB0aGUg cXVldWVkIHJlcXVlc3RzIGluIG9yZGVyIHRvIG1ha2UgdGhlIGNsaWVudCBiZWhhdmlvdXIKPiAt CSAqIG1vcmUgcHJlZGljdGFibGUgYXJvdW5kIHJlc2V0cywgYnkgbm90IHRocm93aW5nIGF3YXkg cmFuZG9tCj4gLQkgKiBhbW91bnQgb2YgYmF0Y2hlcyBpdCBoYXMgcHJlcGFyZWQgZm9yIGV4ZWN1 dGlvbi4gU29waGlzdGljYXRlZAo+IC0JICogY2xpZW50cyBjYW4gdXNlIGdlbV9yZXNldF9zdGF0 c19pb2N0bCBhbmQgZG1hIGZlbmNlIHN0YXR1cwo+IC0JICogKGV4cG9ydGVkIHZpYSBzeW5jX2Zp bGUgaW5mbyBpb2N0bCBvbiBleHBsaWNpdCBmZW5jZXMpIHRvIG9ic2VydmUKPiAtCSAqIHdoZW4g aXQgbG9zZXMgdGhlIGNvbnRleHQgc3RhdGUgYW5kIHNob3VsZCByZWJ1aWxkIGFjY29yZGluZ2x5 Lgo+IC0JICoKPiAtCSAqIFRoZSBjb250ZXh0IGJhbiwgYW5kIHVsdGltYXRlbHkgdGhlIGNsaWVu dCBiYW4sIG1lY2hhbmlzbSBhcmUgc2FmZXR5Cj4gLQkgKiB2YWx2ZXMgaWYgY2xpZW50IHN1Ym1p c3Npb24gZW5kcyB1cCByZXN1bHRpbmcgaW4gbm90aGluZyBtb3JlIHRoYW4KPiAtCSAqIHN1YnNl cXVlbnQgaGFuZ3MuCj4gLQkgKi8KPiAtCj4gLQlpZiAoaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChy ZXF1ZXN0KSkgewo+IC0JCUdFTV9UUkFDRSgiJXMgcGFyZG9uZWQgZ2xvYmFsPSVkIChmZW5jZSAl bGx4OiVsbGQpLCBjdXJyZW50ICVkXG4iLAo+IC0JCQkgIGVuZ2luZS0+bmFtZSwgcmVxdWVzdC0+ Z2xvYmFsX3NlcW5vLAo+IC0JCQkgIHJlcXVlc3QtPmZlbmNlLmNvbnRleHQsIHJlcXVlc3QtPmZl bmNlLnNlcW5vLAo+IC0JCQkgIGludGVsX2VuZ2luZV9nZXRfc2Vxbm8oZW5naW5lKSk7Cj4gLQkJ c3RhbGxlZCA9IGZhbHNlOwo+IC0JfQo+IC0KPiAtCWlmIChzdGFsbGVkKSB7Cj4gLQkJaTkxNV9n ZW1fY29udGV4dF9tYXJrX2d1aWx0eShyZXF1ZXN0LT5nZW1fY29udGV4dCk7Cj4gLQkJaTkxNV9y ZXF1ZXN0X3NraXAocmVxdWVzdCwgLUVJTyk7Cj4gLQo+IC0JCS8qIElmIHRoaXMgY29udGV4dCBp cyBub3cgYmFubmVkLCBza2lwIGFsbCBwZW5kaW5nIHJlcXVlc3RzLiAqLwo+IC0JCWlmIChpOTE1 X2dlbV9jb250ZXh0X2lzX2Jhbm5lZChyZXF1ZXN0LT5nZW1fY29udGV4dCkpCj4gLQkJCWVuZ2lu ZV9za2lwX2NvbnRleHQocmVxdWVzdCk7Cj4gLQl9IGVsc2Ugewo+IC0JCS8qCj4gLQkJICogU2lu Y2UgdGhpcyBpcyBub3QgdGhlIGh1bmcgZW5naW5lLCBpdCBtYXkgaGF2ZSBhZHZhbmNlZAo+IC0J CSAqIHNpbmNlIHRoZSBoYW5nIGRlY2xhcmF0aW9uLiBEb3VibGUgY2hlY2sgYnkgcmVmaW5kaW5n Cj4gLQkJICogdGhlIGFjdGl2ZSByZXF1ZXN0IGF0IHRoZSB0aW1lIG9mIHRoZSByZXNldC4KPiAt CQkgKi8KPiAtCQlyZXF1ZXN0ID0gaTkxNV9nZW1fZmluZF9hY3RpdmVfcmVxdWVzdChlbmdpbmUp Owo+IC0JCWlmIChyZXF1ZXN0KSB7Cj4gLQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gLQo+IC0J CQlpOTE1X2dlbV9jb250ZXh0X21hcmtfaW5ub2NlbnQocmVxdWVzdC0+Z2VtX2NvbnRleHQpOwo+ IC0JCQlkbWFfZmVuY2Vfc2V0X2Vycm9yKCZyZXF1ZXN0LT5mZW5jZSwgLUVBR0FJTik7Cj4gLQo+ IC0JCQkvKiBSZXdpbmQgdGhlIGVuZ2luZSB0byByZXBsYXkgdGhlIGluY29tcGxldGUgcnEgKi8K PiAtCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmVuZ2luZS0+dGltZWxpbmUubG9jaywgZmxhZ3MpOwo+ IC0JCQlyZXF1ZXN0ID0gbGlzdF9wcmV2X2VudHJ5KHJlcXVlc3QsIGxpbmspOwo+IC0JCQlpZiAo JnJlcXVlc3QtPmxpbmsgPT0gJmVuZ2luZS0+dGltZWxpbmUucmVxdWVzdHMpCj4gLQkJCQlyZXF1 ZXN0ID0gTlVMTDsKPiAtCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT50aW1lbGlu ZS5sb2NrLCBmbGFncyk7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCXJldHVybiByZXF1ZXN0Owo+IC19 Cj4gLQo+IC12b2lkIGk5MTVfZ2VtX3Jlc2V0X2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsCj4gLQkJCSAgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsCj4gLQkJCSAg IGJvb2wgc3RhbGxlZCkKPiAtewo+IC0JaWYgKHJlcXVlc3QpCj4gLQkJcmVxdWVzdCA9IGk5MTVf Z2VtX3Jlc2V0X3JlcXVlc3QoZW5naW5lLCByZXF1ZXN0LCBzdGFsbGVkKTsKPiAtCj4gLQkvKiBT ZXR1cCB0aGUgQ1MgdG8gcmVzdW1lIGZyb20gdGhlIGJyZWFkY3J1bWIgb2YgdGhlIGh1bmcgcmVx dWVzdCAqLwo+IC0JZW5naW5lLT5yZXNldC5yZXNldChlbmdpbmUsIHJlcXVlc3QpOwo+IC19Cj4g LQo+IC12b2lkIGk5MTVfZ2VtX3Jlc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKPiAtCQkgICAgdW5zaWduZWQgaW50IHN0YWxsZWRfbWFzaykKPiAtewo+IC0Jc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+IC0JZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gLQo+ IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0K PiAtCWk5MTVfcmV0aXJlX3JlcXVlc3RzKGRldl9wcml2KTsKPiAtCj4gLQlmb3JfZWFjaF9lbmdp bmUoZW5naW5lLCBkZXZfcHJpdiwgaWQpIHsKPiAtCQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7 Cj4gLQo+IC0JCWk5MTVfZ2VtX3Jlc2V0X2VuZ2luZShlbmdpbmUsCj4gLQkJCQkgICAgICBlbmdp bmUtPmhhbmdjaGVjay5hY3RpdmVfcmVxdWVzdCwKPiAtCQkJCSAgICAgIHN0YWxsZWRfbWFzayAm IEVOR0lORV9NQVNLKGlkKSk7Cj4gLQkJY2UgPSBmZXRjaF9hbmRfemVybygmZW5naW5lLT5sYXN0 X3JldGlyZWRfY29udGV4dCk7Cj4gLQkJaWYgKGNlKQo+IC0JCQlpbnRlbF9jb250ZXh0X3VucGlu KGNlKTsKPiAtCj4gLQkJLyoKPiAtCQkgKiBPc3RlbnNpYmlseSwgd2UgYWx3YXlzIHdhbnQgYSBj b250ZXh0IGxvYWRlZCBmb3IgcG93ZXJzYXZpbmcsCj4gLQkJICogc28gaWYgdGhlIGVuZ2luZSBp cyBpZGxlIGFmdGVyIHRoZSByZXNldCwgc2VuZCBhIHJlcXVlc3QKPiAtCQkgKiB0byBsb2FkIG91 ciBzY3JhdGNoIGtlcm5lbF9jb250ZXh0Lgo+IC0JCSAqCj4gLQkJICogTW9yZSBteXN0ZXJpb3Vz bHksIGlmIHdlIGxlYXZlIHRoZSBlbmdpbmUgaWRsZSBhZnRlciBhIHJlc2V0LAo+IC0JCSAqIHRo ZSBuZXh0IHVzZXJzcGFjZSBiYXRjaCBtYXkgaGFuZywgd2l0aCB3aGF0IGFwcGVhcnMgdG8gYmUK PiAtCQkgKiBhbiBpbmNvaGVyZW50IHJlYWQgYnkgdGhlIENTIChwcmVzdW1hYmx5IHN0YWxlIFRM QikuIEFuCj4gLQkJICogZW1wdHkgcmVxdWVzdCBhcHBlYXJzIHN1ZmZpY2llbnQgdG8gcGFwZXIg b3ZlciB0aGUgZ2xpdGNoLgo+IC0JCSAqLwo+IC0JCWlmIChpbnRlbF9lbmdpbmVfaXNfaWRsZShl bmdpbmUpKSB7Cj4gLQkJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOwo+IC0KPiAtCQkJcnEgPSBp OTE1X3JlcXVlc3RfYWxsb2MoZW5naW5lLAo+IC0JCQkJCQlkZXZfcHJpdi0+a2VybmVsX2NvbnRl eHQpOwo+IC0JCQlpZiAoIUlTX0VSUihycSkpCj4gLQkJCQlpOTE1X3JlcXVlc3RfYWRkKHJxKTsK PiAtCQl9Cj4gLQl9Cj4gLQo+IC0JaTkxNV9nZW1fcmVzdG9yZV9mZW5jZXMoZGV2X3ByaXYpOwo+ IC19Cj4gLQo+IC12b2lkIGk5MTVfZ2VtX3Jlc2V0X2ZpbmlzaF9lbmdpbmUoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQo+IC17Cj4gLQllbmdpbmUtPnJlc2V0LmZpbmlzaChlbmdpbmUp Owo+IC0KPiAtCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGVuZ2luZS0+aTkxNSwgRk9SQ0VX QUtFX0FMTCk7Cj4gLX0KPiAtCj4gLXZvaWQgaTkxNV9nZW1fcmVzZXRfZmluaXNoKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lOwo+IC0JZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gLQo+IC0JbG9ja2RlcF9h c3NlcnRfaGVsZCgmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0KPiAtCWZvcl9lYWNo X2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpZCkgewo+IC0JCWVuZ2luZS0+aGFuZ2NoZWNrLmFj dGl2ZV9yZXF1ZXN0ID0gTlVMTDsKPiAtCQlpOTE1X2dlbV9yZXNldF9maW5pc2hfZW5naW5lKGVu Z2luZSk7Cj4gLQl9Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIG5vcF9zdWJtaXRfcmVxdWVzdChz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0KQo+IC17Cj4gLQl1bnNpZ25lZCBsb25nIGZsYWdz Owo+IC0KPiAtCUdFTV9UUkFDRSgiJXMgZmVuY2UgJWxseDolbGxkIC0+IC1FSU9cbiIsCj4gLQkJ ICByZXF1ZXN0LT5lbmdpbmUtPm5hbWUsCj4gLQkJICByZXF1ZXN0LT5mZW5jZS5jb250ZXh0LCBy ZXF1ZXN0LT5mZW5jZS5zZXFubyk7Cj4gLQlkbWFfZmVuY2Vfc2V0X2Vycm9yKCZyZXF1ZXN0LT5m ZW5jZSwgLUVJTyk7Cj4gLQo+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJlcXVlc3QtPmVuZ2luZS0+ dGltZWxpbmUubG9jaywgZmxhZ3MpOwo+IC0JX19pOTE1X3JlcXVlc3Rfc3VibWl0KHJlcXVlc3Qp Owo+IC0JaW50ZWxfZW5naW5lX3dyaXRlX2dsb2JhbF9zZXFubyhyZXF1ZXN0LT5lbmdpbmUsIHJl cXVlc3QtPmdsb2JhbF9zZXFubyk7Cj4gLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZXF1ZXN0 LT5lbmdpbmUtPnRpbWVsaW5lLmxvY2ssIGZsYWdzKTsKPiAtfQo+IC0KPiAtdm9pZCBpOTE1X2dl bV9zZXRfd2VkZ2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+IC17Cj4gLQlzdHJ1 Y3QgaTkxNV9ncHVfZXJyb3IgKmVycm9yID0gJmk5MTUtPmdwdV9lcnJvcjsKPiAtCXN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAtCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+IC0K PiAtCW11dGV4X2xvY2soJmVycm9yLT53ZWRnZV9tdXRleCk7Cj4gLQlpZiAodGVzdF9iaXQoSTkx NV9XRURHRUQsICZlcnJvci0+ZmxhZ3MpKSB7Cj4gLQkJbXV0ZXhfdW5sb2NrKCZlcnJvci0+d2Vk Z2VfbXV0ZXgpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gLQlpZiAoR0VNX1NIT1dfREVCVUco KSkgewo+IC0JCXN0cnVjdCBkcm1fcHJpbnRlciBwID0gZHJtX2RlYnVnX3ByaW50ZXIoX19mdW5j X18pOwo+IC0KPiAtCQlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1LCBpZCkKPiAtCQkJaW50 ZWxfZW5naW5lX2R1bXAoZW5naW5lLCAmcCwgIiVzXG4iLCBlbmdpbmUtPm5hbWUpOwo+IC0JfQo+ IC0KPiAtCUdFTV9UUkFDRSgic3RhcnRcbiIpOwo+IC0KPiAtCS8qCj4gLQkgKiBGaXJzdCwgc3Rv cCBzdWJtaXNzaW9uIHRvIGh3LCBidXQgZG8gbm90IHlldCBjb21wbGV0ZSByZXF1ZXN0cyBieQo+ IC0JICogcm9sbGluZyB0aGUgZ2xvYmFsIHNlcW5vIGZvcndhcmQgKHNpbmNlIHRoaXMgd291bGQg Y29tcGxldGUgcmVxdWVzdHMKPiAtCSAqIGZvciB3aGljaCB3ZSBoYXZlbid0IHNldCB0aGUgZmVu Y2UgZXJyb3IgdG8gRUlPIHlldCkuCj4gLQkgKi8KPiAtCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUs IGk5MTUsIGlkKQo+IC0JCWk5MTVfZ2VtX3Jlc2V0X3ByZXBhcmVfZW5naW5lKGVuZ2luZSk7Cj4g LQo+IC0JLyogRXZlbiBpZiB0aGUgR1BVIHJlc2V0IGZhaWxzLCBpdCBzaG91bGQgc3RpbGwgc3Rv cCB0aGUgZW5naW5lcyAqLwo+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSA1KQo+IC0JCWludGVs X2dwdV9yZXNldChpOTE1LCBBTExfRU5HSU5FUyk7Cj4gLQo+IC0JZm9yX2VhY2hfZW5naW5lKGVu Z2luZSwgaTkxNSwgaWQpIHsKPiAtCQllbmdpbmUtPnN1Ym1pdF9yZXF1ZXN0ID0gbm9wX3N1Ym1p dF9yZXF1ZXN0Owo+IC0JCWVuZ2luZS0+c2NoZWR1bGUgPSBOVUxMOwo+IC0JfQo+IC0JaTkxNS0+ Y2Fwcy5zY2hlZHVsZXIgPSAwOwo+IC0KPiAtCS8qCj4gLQkgKiBNYWtlIHN1cmUgbm8gcmVxdWVz dCBjYW4gc2xpcCB0aHJvdWdoIHdpdGhvdXQgZ2V0dGluZyBjb21wbGV0ZWQgYnkKPiAtCSAqIGVp dGhlciB0aGlzIGNhbGwgaGVyZSB0byBpbnRlbF9lbmdpbmVfd3JpdGVfZ2xvYmFsX3NlcW5vLCBv ciB0aGUgb25lCj4gLQkgKiBpbiBub3Bfc3VibWl0X3JlcXVlc3QuCj4gLQkgKi8KPiAtCXN5bmNo cm9uaXplX3JjdSgpOwo+IC0KPiAtCS8qIE1hcmsgYWxsIGV4ZWN1dGluZyByZXF1ZXN0cyBhcyBz a2lwcGVkICovCj4gLQlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1LCBpZCkKPiAtCQllbmdp bmUtPmNhbmNlbF9yZXF1ZXN0cyhlbmdpbmUpOwo+IC0KPiAtCWZvcl9lYWNoX2VuZ2luZShlbmdp bmUsIGk5MTUsIGlkKSB7Cj4gLQkJaTkxNV9nZW1fcmVzZXRfZmluaXNoX2VuZ2luZShlbmdpbmUp Owo+IC0JCWludGVsX2VuZ2luZV93YWtldXAoZW5naW5lKTsKPiAtCX0KPiAtCj4gLQlzbXBfbWJf X2JlZm9yZV9hdG9taWMoKTsKPiAtCXNldF9iaXQoSTkxNV9XRURHRUQsICZlcnJvci0+ZmxhZ3Mp Owo+IC0KPiAtCUdFTV9UUkFDRSgiZW5kXG4iKTsKPiAtCW11dGV4X3VubG9jaygmZXJyb3ItPndl ZGdlX211dGV4KTsKPiAtCj4gLQl3YWtlX3VwX2FsbCgmZXJyb3ItPnJlc2V0X3F1ZXVlKTsKPiAt fQo+IC0KPiAtYm9vbCBpOTE1X2dlbV91bnNldF93ZWRnZWQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUpCj4gLXsKPiAtCXN0cnVjdCBpOTE1X2dwdV9lcnJvciAqZXJyb3IgPSAmaTkxNS0+ Z3B1X2Vycm9yOwo+IC0Jc3RydWN0IGk5MTVfdGltZWxpbmUgKnRsOwo+IC0JYm9vbCByZXQgPSBm YWxzZTsKPiAtCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZpOTE1LT5kcm0uc3RydWN0X211dGV4 KTsKPiAtCj4gLQlpZiAoIXRlc3RfYml0KEk5MTVfV0VER0VELCAmZXJyb3ItPmZsYWdzKSkKPiAt CQlyZXR1cm4gdHJ1ZTsKPiAtCj4gLQlpZiAoIWk5MTUtPmd0LnNjcmF0Y2gpIC8qIE5ldmVyIGZ1 bGwgaW5pdGlhbGlzZWQsIHJlY292ZXJ5IGltcG9zc2libGUgKi8KPiAtCQlyZXR1cm4gZmFsc2U7 Cj4gLQo+IC0JbXV0ZXhfbG9jaygmZXJyb3ItPndlZGdlX211dGV4KTsKPiAtCj4gLQlHRU1fVFJB Q0UoInN0YXJ0XG4iKTsKPiAtCj4gLQkvKgo+IC0JICogQmVmb3JlIHVud2VkZ2luZywgbWFrZSBz dXJlIHRoYXQgYWxsIHBlbmRpbmcgb3BlcmF0aW9ucwo+IC0JICogYXJlIGZsdXNoZWQgYW5kIGVy cm9yZWQgb3V0IC0gd2UgbWF5IGhhdmUgcmVxdWVzdHMgd2FpdGluZyB1cG9uCj4gLQkgKiB0aGly ZCBwYXJ0eSBmZW5jZXMuIFdlIG1hcmtlZCBhbGwgaW5mbGlnaHQgcmVxdWVzdHMgYXMgRUlPLCBh bmQKPiAtCSAqIGV2ZXJ5IGV4ZWNidWYgc2luY2UgcmV0dXJuZWQgRUlPLCBmb3IgY29uc2lzdGVu Y3kgd2Ugd2FudCBhbGwKPiAtCSAqIHRoZSBjdXJyZW50bHkgcGVuZGluZyByZXF1ZXN0cyB0byBh bHNvIGJlIG1hcmtlZCBhcyBFSU8sIHdoaWNoCj4gLQkgKiBpcyBkb25lIGluc2lkZSBvdXIgbm9w X3N1Ym1pdF9yZXF1ZXN0IC0gYW5kIHNvIHdlIG11c3Qgd2FpdC4KPiAtCSAqCj4gLQkgKiBObyBt b3JlIGNhbiBiZSBzdWJtaXR0ZWQgdW50aWwgd2UgcmVzZXQgdGhlIHdlZGdlZCBiaXQuCj4gLQkg Ki8KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkodGwsICZpOTE1LT5ndC50aW1lbGluZXMsIGxpbmsp IHsKPiAtCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKPiAtCj4gLQkJcnEgPSBpOTE1X2dlbV9h Y3RpdmVfcGVlaygmdGwtPmxhc3RfcmVxdWVzdCwKPiAtCQkJCQkgICZpOTE1LT5kcm0uc3RydWN0 X211dGV4KTsKPiAtCQlpZiAoIXJxKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJLyoKPiAtCQkg KiBXZSBjYW4ndCB1c2Ugb3VyIG5vcm1hbCB3YWl0ZXIgYXMgd2Ugd2FudCB0bwo+IC0JCSAqIGF2 b2lkIHJlY3Vyc2l2ZWx5IHRyeWluZyB0byBoYW5kbGUgdGhlIGN1cnJlbnQKPiAtCQkgKiByZXNl dC4gVGhlIGJhc2ljIGRtYV9mZW5jZV9kZWZhdWx0X3dhaXQoKSBpbnN0YWxscwo+IC0JCSAqIGEg Y2FsbGJhY2sgZm9yIGRtYV9mZW5jZV9zaWduYWwoKSwgd2hpY2ggaXMKPiAtCQkgKiB0cmlnZ2Vy ZWQgYnkgb3VyIG5vcCBoYW5kbGVyIChpbmRpcmVjdGx5LCB0aGUKPiAtCQkgKiBjYWxsYmFjayBl bmFibGVzIHRoZSBzaWduYWxlciB0aHJlYWQgd2hpY2ggaXMKPiAtCQkgKiB3b2tlbiBieSB0aGUg bm9wX3N1Ym1pdF9yZXF1ZXN0KCkgYWR2YW5jaW5nIHRoZSBzZXFubwo+IC0JCSAqIGFuZCB3aGVu IHRoZSBzZXFubyBwYXNzZXMgdGhlIGZlbmNlLCB0aGUgc2lnbmFsZXIKPiAtCQkgKiB0aGVuIHNp Z25hbHMgdGhlIGZlbmNlIHdha2luZyB1cyB1cCkuCj4gLQkJICovCj4gLQkJaWYgKGRtYV9mZW5j ZV9kZWZhdWx0X3dhaXQoJnJxLT5mZW5jZSwgdHJ1ZSwKPiAtCQkJCQkgICBNQVhfU0NIRURVTEVf VElNRU9VVCkgPCAwKQo+IC0JCQlnb3RvIHVubG9jazsKPiAtCX0KPiAtCWk5MTVfcmV0aXJlX3Jl cXVlc3RzKGk5MTUpOwo+IC0JR0VNX0JVR19PTihpOTE1LT5ndC5hY3RpdmVfcmVxdWVzdHMpOwo+ IC0KPiAtCWludGVsX2VuZ2luZXNfc2FuaXRpemUoaTkxNSwgZmFsc2UpOwo+IC0KPiAtCS8qCj4g LQkgKiBVbmRvIG5vcF9zdWJtaXRfcmVxdWVzdC4gV2UgcHJldmVudCBhbGwgbmV3IGk5MTUgcmVx dWVzdHMgZnJvbQo+IC0JICogYmVpbmcgcXVldWVkIChieSBkaXNhbGxvd2luZyBleGVjYnVmIHdo aWxzdCB3ZWRnZWQpIHNvIGhhdmluZwo+IC0JICogd2FpdGVkIGZvciBhbGwgYWN0aXZlIHJlcXVl c3RzIGFib3ZlLCB3ZSBrbm93IHRoZSBzeXN0ZW0gaXMgaWRsZQo+IC0JICogYW5kIGRvIG5vdCBo YXZlIHRvIHdvcnJ5IGFib3V0IGEgdGhyZWFkIGJlaW5nIGluc2lkZQo+IC0JICogZW5naW5lLT5z dWJtaXRfcmVxdWVzdCgpIGFzIHdlIHN3YXAgb3Zlci4gU28gdW5saWtlIGluc3RhbGxpbmcKPiAt CSAqIHRoZSBub3Bfc3VibWl0X3JlcXVlc3Qgb24gcmVzZXQsIHdlIGNhbiBkbyB0aGlzIGZyb20g bm9ybWFsCj4gLQkgKiBjb250ZXh0IGFuZCBkbyBub3QgcmVxdWlyZSBzdG9wX21hY2hpbmUoKS4K PiAtCSAqLwo+IC0JaW50ZWxfZW5naW5lc19yZXNldF9kZWZhdWx0X3N1Ym1pc3Npb24oaTkxNSk7 Cj4gLQlpOTE1X2dlbV9jb250ZXh0c19sb3N0KGk5MTUpOwo+IC0KPiAtCUdFTV9UUkFDRSgiZW5k XG4iKTsKPiAtCj4gLQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsgLyogY29tcGxldGUgdGFrZW92 ZXIgYmVmb3JlIGVuYWJsaW5nIGV4ZWNidWYgKi8KPiAtCWNsZWFyX2JpdChJOTE1X1dFREdFRCwg Jmk5MTUtPmdwdV9lcnJvci5mbGFncyk7Cj4gLQlyZXQgPSB0cnVlOwo+IC11bmxvY2s6Cj4gLQlt dXRleF91bmxvY2soJmk5MTUtPmdwdV9lcnJvci53ZWRnZV9tdXRleCk7Cj4gLQo+IC0JcmV0dXJu IHJldDsKPiAtfQo+IC0KPiAgc3RhdGljIHZvaWQKPiAgaTkxNV9nZW1fcmV0aXJlX3dvcmtfaGFu ZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9ndHQuYwo+IGluZGV4IDc0ZTZkMDJkY2JiZi4uNjhlMDJlNDYxODZiIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiBAQCAtMzcsNiArMzcsNyBAQAo+ICAKPiAgI2lu Y2x1ZGUgImk5MTVfZHJ2LmgiCj4gICNpbmNsdWRlICJpOTE1X3ZncHUuaCIKPiArI2luY2x1ZGUg Imk5MTVfcmVzZXQuaCIKPiAgI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKPiAgI2luY2x1ZGUgImlu dGVsX2Rydi5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfZnJvbnRidWZmZXIuaCIKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfaXJxLmMKPiBpbmRleCA5NDE4N2U2OGQzOWEuLjFjNmNmMDI0YTUwOSAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9pcnEuYwo+IEBAIC0yOTMwLDQ2ICsyOTMwLDYgQEAgc3RhdGljIGlycXJl dHVybl90IGdlbjhfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQo+ICAJcmV0dXJuIElS UV9IQU5ETEVEOwo+ICB9Cj4gIAo+IC1zdHJ1Y3Qgd2VkZ2VfbWUgewo+IC0Jc3RydWN0IGRlbGF5 ZWRfd29yayB3b3JrOwo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4gLQljb25z dCBjaGFyICpuYW1lOwo+IC19Owo+IC0KPiAtc3RhdGljIHZvaWQgd2VkZ2VfbWUoc3RydWN0IHdv cmtfc3RydWN0ICp3b3JrKQo+IC17Cj4gLQlzdHJ1Y3Qgd2VkZ2VfbWUgKncgPSBjb250YWluZXJf b2Yod29yaywgdHlwZW9mKCp3KSwgd29yay53b3JrKTsKPiAtCj4gLQlkZXZfZXJyKHctPmk5MTUt PmRybS5kZXYsCj4gLQkJIiVzIHRpbWVkIG91dCwgY2FuY2VsbGluZyBhbGwgaW4tZmxpZ2h0IHJl bmRlcmluZy5cbiIsCj4gLQkJdy0+bmFtZSk7Cj4gLQlpOTE1X2dlbV9zZXRfd2VkZ2VkKHctPmk5 MTUpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBfX2luaXRfd2VkZ2Uoc3RydWN0IHdlZGdlX21l ICp3LAo+IC0JCQkgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gLQkJCSBsb25nIHRp bWVvdXQsCj4gLQkJCSBjb25zdCBjaGFyICpuYW1lKQo+IC17Cj4gLQl3LT5pOTE1ID0gaTkxNTsK PiAtCXctPm5hbWUgPSBuYW1lOwo+IC0KPiAtCUlOSVRfREVMQVlFRF9XT1JLX09OU1RBQ0soJnct PndvcmssIHdlZGdlX21lKTsKPiAtCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdy0+d29yaywgdGlt ZW91dCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIF9fZmluaV93ZWRnZShzdHJ1Y3Qgd2VkZ2Vf bWUgKncpCj4gLXsKPiAtCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmdy0+d29yayk7Cj4gLQlk ZXN0cm95X2RlbGF5ZWRfd29ya19vbl9zdGFjaygmdy0+d29yayk7Cj4gLQl3LT5pOTE1ID0gTlVM TDsKPiAtfQo+IC0KPiAtI2RlZmluZSBpOTE1X3dlZGdlX29uX3RpbWVvdXQoVywgREVWLCBUSU1F T1VUKQkJCQlcCj4gLQlmb3IgKF9faW5pdF93ZWRnZSgoVyksIChERVYpLCAoVElNRU9VVCksIF9f ZnVuY19fKTsJCVwKPiAtCSAgICAgKFcpLT5pOTE1OwkJCQkJCQlcCj4gLQkgICAgIF9fZmluaV93 ZWRnZSgoVykpKQo+IC0KPiAgc3RhdGljIHUzMgo+ICBnZW4xMV9ndF9lbmdpbmVfaWRlbnRpdHko c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKiBjb25zdCBpOTE1LAo+ICAJCQkgY29uc3QgdW5zaWdu ZWQgaW50IGJhbmssIGNvbnN0IHVuc2lnbmVkIGludCBiaXQpCj4gQEAgLTMxODAsMjA0ICszMTQw LDYgQEAgc3RhdGljIGlycXJldHVybl90IGdlbjExX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQg KmFyZykKPiAgCXJldHVybiBJUlFfSEFORExFRDsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgaTkx NV9yZXNldF9kZXZpY2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkg ICAgICB1MzIgZW5naW5lX21hc2ssCj4gLQkJCSAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbikKPiAt ewo+IC0Jc3RydWN0IGk5MTVfZ3B1X2Vycm9yICplcnJvciA9ICZkZXZfcHJpdi0+Z3B1X2Vycm9y Owo+IC0Jc3RydWN0IGtvYmplY3QgKmtvYmogPSAmZGV2X3ByaXYtPmRybS5wcmltYXJ5LT5rZGV2 LT5rb2JqOwo+IC0JY2hhciAqZXJyb3JfZXZlbnRbXSA9IHsgSTkxNV9FUlJPUl9VRVZFTlQgIj0x IiwgTlVMTCB9Owo+IC0JY2hhciAqcmVzZXRfZXZlbnRbXSA9IHsgSTkxNV9SRVNFVF9VRVZFTlQg Ij0xIiwgTlVMTCB9Owo+IC0JY2hhciAqcmVzZXRfZG9uZV9ldmVudFtdID0geyBJOTE1X0VSUk9S X1VFVkVOVCAiPTAiLCBOVUxMIH07Cj4gLQlzdHJ1Y3Qgd2VkZ2VfbWUgdzsKPiAtCj4gLQlrb2Jq ZWN0X3VldmVudF9lbnYoa29iaiwgS09CSl9DSEFOR0UsIGVycm9yX2V2ZW50KTsKPiAtCj4gLQlE Uk1fREVCVUdfRFJJVkVSKCJyZXNldHRpbmcgY2hpcFxuIik7Cj4gLQlrb2JqZWN0X3VldmVudF9l bnYoa29iaiwgS09CSl9DSEFOR0UsIHJlc2V0X2V2ZW50KTsKPiAtCj4gLQkvKiBVc2UgYSB3YXRj aGRvZyB0byBlbnN1cmUgdGhhdCBvdXIgcmVzZXQgY29tcGxldGVzICovCj4gLQlpOTE1X3dlZGdl X29uX3RpbWVvdXQoJncsIGRldl9wcml2LCA1KkhaKSB7Cj4gLQkJaW50ZWxfcHJlcGFyZV9yZXNl dChkZXZfcHJpdik7Cj4gLQo+IC0JCWVycm9yLT5yZWFzb24gPSByZWFzb247Cj4gLQkJZXJyb3It PnN0YWxsZWRfbWFzayA9IGVuZ2luZV9tYXNrOwo+IC0KPiAtCQkvKiBTaWduYWwgdGhhdCBsb2Nr ZWQgd2FpdGVycyBzaG91bGQgcmVzZXQgdGhlIEdQVSAqLwo+IC0JCXNtcF9tYl9fYmVmb3JlX2F0 b21pYygpOwo+IC0JCXNldF9iaXQoSTkxNV9SRVNFVF9IQU5ET0ZGLCAmZXJyb3ItPmZsYWdzKTsK PiAtCQl3YWtlX3VwX2FsbCgmZXJyb3ItPndhaXRfcXVldWUpOwo+IC0KPiAtCQkvKiBXYWl0IGZv ciBhbnlvbmUgaG9sZGluZyB0aGUgbG9jayB0byB3YWtldXAsIHdpdGhvdXQKPiAtCQkgKiBibG9j a2luZyBpbmRlZmluaXRlbHkgb24gc3RydWN0X211dGV4Lgo+IC0JCSAqLwo+IC0JCWRvIHsKPiAt CQkJaWYgKG11dGV4X3RyeWxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KSkgewo+IC0J CQkJaTkxNV9yZXNldChkZXZfcHJpdiwgZW5naW5lX21hc2ssIHJlYXNvbik7Cj4gLQkJCQltdXRl eF91bmxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCQkJfQo+IC0JCX0gd2hp bGUgKHdhaXRfb25fYml0X3RpbWVvdXQoJmVycm9yLT5mbGFncywKPiAtCQkJCQkgICAgIEk5MTVf UkVTRVRfSEFORE9GRiwKPiAtCQkJCQkgICAgIFRBU0tfVU5JTlRFUlJVUFRJQkxFLAo+IC0JCQkJ CSAgICAgMSkpOwo+IC0KPiAtCQllcnJvci0+c3RhbGxlZF9tYXNrID0gMDsKPiAtCQllcnJvci0+ cmVhc29uID0gTlVMTDsKPiAtCj4gLQkJaW50ZWxfZmluaXNoX3Jlc2V0KGRldl9wcml2KTsKPiAt CX0KPiAtCj4gLQlpZiAoIXRlc3RfYml0KEk5MTVfV0VER0VELCAmZXJyb3ItPmZsYWdzKSkKPiAt CQlrb2JqZWN0X3VldmVudF9lbnYoa29iaiwgS09CSl9DSEFOR0UsIHJlc2V0X2RvbmVfZXZlbnQp Owo+IC19Cj4gLQo+IC12b2lkIGk5MTVfY2xlYXJfZXJyb3JfcmVnaXN0ZXJzKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JdTMyIGVpcjsKPiAtCj4gLQlpZiAoIUlT X0dFTihkZXZfcHJpdiwgMikpCj4gLQkJSTkxNV9XUklURShQR1RCTF9FUiwgSTkxNV9SRUFEKFBH VEJMX0VSKSk7Cj4gLQo+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA0KQo+IC0JCUk5MTVf V1JJVEUoSVBFSVIsIEk5MTVfUkVBRChJUEVJUikpOwo+IC0JZWxzZQo+IC0JCUk5MTVfV1JJVEUo SVBFSVJfSTk2NSwgSTkxNV9SRUFEKElQRUlSX0k5NjUpKTsKPiAtCj4gLQlJOTE1X1dSSVRFKEVJ UiwgSTkxNV9SRUFEKEVJUikpOwo+IC0JZWlyID0gSTkxNV9SRUFEKEVJUik7Cj4gLQlpZiAoZWly KSB7Cj4gLQkJLyoKPiAtCQkgKiBzb21lIGVycm9ycyBtaWdodCBoYXZlIGJlY29tZSBzdHVjaywK PiAtCQkgKiBtYXNrIHRoZW0uCj4gLQkJICovCj4gLQkJRFJNX0RFQlVHX0RSSVZFUigiRUlSIHN0 dWNrOiAweCUwOHgsIG1hc2tpbmdcbiIsIGVpcik7Cj4gLQkJSTkxNV9XUklURShFTVIsIEk5MTVf UkVBRChFTVIpIHwgZWlyKTsKPiAtCQlJOTE1X1dSSVRFKElJUiwgSTkxNV9NQVNURVJfRVJST1Jf SU5URVJSVVBUKTsKPiAtCX0KPiAtCj4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA4KSB7 Cj4gLQkJSTkxNV9XUklURShHRU44X1JJTkdfRkFVTFRfUkVHLAo+IC0JCQkgICBJOTE1X1JFQUQo R0VOOF9SSU5HX0ZBVUxUX1JFRykgJiB+UklOR19GQVVMVF9WQUxJRCk7Cj4gLQkJUE9TVElOR19S RUFEKEdFTjhfUklOR19GQVVMVF9SRUcpOwo+IC0JfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDYpIHsKPiAtCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gLQkJZW51 bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gLQo+IC0JCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRl dl9wcml2LCBpZCkgewo+IC0JCQlJOTE1X1dSSVRFKFJJTkdfRkFVTFRfUkVHKGVuZ2luZSksCj4g LQkJCQkgICBJOTE1X1JFQUQoUklOR19GQVVMVF9SRUcoZW5naW5lKSkgJgo+IC0JCQkJICAgflJJ TkdfRkFVTFRfVkFMSUQpOwo+IC0JCX0KPiAtCQlQT1NUSU5HX1JFQUQoUklOR19GQVVMVF9SRUco ZGV2X3ByaXYtPmVuZ2luZVtSQ1NdKSk7Cj4gLQl9Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBpOTE1 X2hhbmRsZV9lcnJvciAtIGhhbmRsZSBhIGdwdSBlcnJvcgo+IC0gKiBAZGV2X3ByaXY6IGk5MTUg ZGV2aWNlIHByaXZhdGUKPiAtICogQGVuZ2luZV9tYXNrOiBtYXNrIHJlcHJlc2VudGluZyBlbmdp bmVzIHRoYXQgYXJlIGh1bmcKPiAtICogQGZsYWdzOiBjb250cm9sIGZsYWdzCj4gLSAqIEBmbXQ6 IEVycm9yIG1lc3NhZ2UgZm9ybWF0IHN0cmluZwo+IC0gKgo+IC0gKiBEbyBzb21lIGJhc2ljIGNo ZWNraW5nIG9mIHJlZ2lzdGVyIHN0YXRlIGF0IGVycm9yIHRpbWUgYW5kCj4gLSAqIGR1bXAgaXQg dG8gdGhlIHN5c2xvZy4gIEFsc28gY2FsbCBpOTE1X2NhcHR1cmVfZXJyb3Jfc3RhdGUoKSB0byBt YWtlCj4gLSAqIHN1cmUgd2UgZ2V0IGEgcmVjb3JkIGFuZCBtYWtlIGl0IGF2YWlsYWJsZSBpbiBk ZWJ1Z2ZzLiAgRmlyZSBhIHVldmVudAo+IC0gKiBzbyB1c2Vyc3BhY2Uga25vd3Mgc29tZXRoaW5n IGJhZCBoYXBwZW5lZCAoc2hvdWxkIHRyaWdnZXIgY29sbGVjdGlvbgo+IC0gKiBvZiBhIHJpbmcg ZHVtcCBldGMuKS4KPiAtICovCj4gLXZvaWQgaTkxNV9oYW5kbGVfZXJyb3Ioc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCSAgICAgICB1MzIgZW5naW5lX21hc2ssCj4gLQkJ ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCj4gLQkJICAgICAgIGNvbnN0IGNoYXIgKmZtdCwg Li4uKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gLQlpbnRlbF93 YWtlcmVmX3Qgd2FrZXJlZjsKPiAtCXVuc2lnbmVkIGludCB0bXA7Cj4gLQljaGFyIGVycm9yX21z Z1s4MF07Cj4gLQljaGFyICptc2cgPSBOVUxMOwo+IC0KPiAtCWlmIChmbXQpIHsKPiAtCQl2YV9s aXN0IGFyZ3M7Cj4gLQo+IC0JCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Cj4gLQkJdnNjbnByaW50Zihl cnJvcl9tc2csIHNpemVvZihlcnJvcl9tc2cpLCBmbXQsIGFyZ3MpOwo+IC0JCXZhX2VuZChhcmdz KTsKPiAtCj4gLQkJbXNnID0gZXJyb3JfbXNnOwo+IC0JfQo+IC0KPiAtCS8qCj4gLQkgKiBJbiBt b3N0IGNhc2VzIGl0J3MgZ3VhcmFudGVlZCB0aGF0IHdlIGdldCBoZXJlIHdpdGggYW4gUlBNCj4g LQkgKiByZWZlcmVuY2UgaGVsZCwgZm9yIGV4YW1wbGUgYmVjYXVzZSB0aGVyZSBpcyBhIHBlbmRp bmcgR1BVCj4gLQkgKiByZXF1ZXN0IHRoYXQgd29uJ3QgZmluaXNoIHVudGlsIHRoZSByZXNldCBp cyBkb25lLiBUaGlzCj4gLQkgKiBpc24ndCB0aGUgY2FzZSBhdCBsZWFzdCB3aGVuIHdlIGdldCBo ZXJlIGJ5IGRvaW5nIGEKPiAtCSAqIHNpbXVsYXRlZCByZXNldCB2aWEgZGVidWdmcywgc28gZ2V0 IGFuIFJQTSByZWZlcmVuY2UuCj4gLQkgKi8KPiAtCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3Bt X2dldChkZXZfcHJpdik7Cj4gLQo+IC0JZW5naW5lX21hc2sgJj0gSU5URUxfSU5GTyhkZXZfcHJp diktPnJpbmdfbWFzazsKPiAtCj4gLQlpZiAoZmxhZ3MgJiBJOTE1X0VSUk9SX0NBUFRVUkUpIHsK PiAtCQlpOTE1X2NhcHR1cmVfZXJyb3Jfc3RhdGUoZGV2X3ByaXYsIGVuZ2luZV9tYXNrLCBtc2cp Owo+IC0JCWk5MTVfY2xlYXJfZXJyb3JfcmVnaXN0ZXJzKGRldl9wcml2KTsKPiAtCX0KPiAtCj4g LQkvKgo+IC0JICogVHJ5IGVuZ2luZSByZXNldCB3aGVuIGF2YWlsYWJsZS4gV2UgZmFsbCBiYWNr IHRvIGZ1bGwgcmVzZXQgaWYKPiAtCSAqIHNpbmdsZSByZXNldCBmYWlscy4KPiAtCSAqLwo+IC0J aWYgKGludGVsX2hhc19yZXNldF9lbmdpbmUoZGV2X3ByaXYpICYmCj4gLQkgICAgIWk5MTVfdGVy bWluYWxseV93ZWRnZWQoJmRldl9wcml2LT5ncHVfZXJyb3IpKSB7Cj4gLQkJZm9yX2VhY2hfZW5n aW5lX21hc2tlZChlbmdpbmUsIGRldl9wcml2LCBlbmdpbmVfbWFzaywgdG1wKSB7Cj4gLQkJCUJV SUxEX0JVR19PTihJOTE1X1JFU0VUX01PREVTRVQgPj0gSTkxNV9SRVNFVF9FTkdJTkUpOwo+IC0J CQlpZiAodGVzdF9hbmRfc2V0X2JpdChJOTE1X1JFU0VUX0VOR0lORSArIGVuZ2luZS0+aWQsCj4g LQkJCQkJICAgICAmZGV2X3ByaXYtPmdwdV9lcnJvci5mbGFncykpCj4gLQkJCQljb250aW51ZTsK PiAtCj4gLQkJCWlmIChpOTE1X3Jlc2V0X2VuZ2luZShlbmdpbmUsIG1zZykgPT0gMCkKPiAtCQkJ CWVuZ2luZV9tYXNrICY9IH5pbnRlbF9lbmdpbmVfZmxhZyhlbmdpbmUpOwo+IC0KPiAtCQkJY2xl YXJfYml0KEk5MTVfUkVTRVRfRU5HSU5FICsgZW5naW5lLT5pZCwKPiAtCQkJCSAgJmRldl9wcml2 LT5ncHVfZXJyb3IuZmxhZ3MpOwo+IC0JCQl3YWtlX3VwX2JpdCgmZGV2X3ByaXYtPmdwdV9lcnJv ci5mbGFncywKPiAtCQkJCSAgICBJOTE1X1JFU0VUX0VOR0lORSArIGVuZ2luZS0+aWQpOwo+IC0J CX0KPiAtCX0KPiAtCj4gLQlpZiAoIWVuZ2luZV9tYXNrKQo+IC0JCWdvdG8gb3V0Owo+IC0KPiAt CS8qIEZ1bGwgcmVzZXQgbmVlZHMgdGhlIG11dGV4LCBzdG9wIGFueSBvdGhlciB1c2VyIHRyeWlu ZyB0byBkbyBzby4gKi8KPiAtCWlmICh0ZXN0X2FuZF9zZXRfYml0KEk5MTVfUkVTRVRfQkFDS09G RiwgJmRldl9wcml2LT5ncHVfZXJyb3IuZmxhZ3MpKSB7Cj4gLQkJd2FpdF9ldmVudChkZXZfcHJp di0+Z3B1X2Vycm9yLnJlc2V0X3F1ZXVlLAo+IC0JCQkgICAhdGVzdF9iaXQoSTkxNV9SRVNFVF9C QUNLT0ZGLAo+IC0JCQkJICAgICAmZGV2X3ByaXYtPmdwdV9lcnJvci5mbGFncykpOwo+IC0JCWdv dG8gb3V0Owo+IC0JfQo+IC0KPiAtCS8qIFByZXZlbnQgYW55IG90aGVyIHJlc2V0LWVuZ2luZSBh dHRlbXB0LiAqLwo+IC0JZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYsIHRtcCkgewo+ IC0JCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KEk5MTVfUkVTRVRfRU5HSU5FICsgZW5naW5lLT5p ZCwKPiAtCQkJCQkmZGV2X3ByaXYtPmdwdV9lcnJvci5mbGFncykpCj4gLQkJCXdhaXRfb25fYml0 KCZkZXZfcHJpdi0+Z3B1X2Vycm9yLmZsYWdzLAo+IC0JCQkJICAgIEk5MTVfUkVTRVRfRU5HSU5F ICsgZW5naW5lLT5pZCwKPiAtCQkJCSAgICBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Cj4gLQl9Cj4g LQo+IC0JaTkxNV9yZXNldF9kZXZpY2UoZGV2X3ByaXYsIGVuZ2luZV9tYXNrLCBtc2cpOwo+IC0K PiAtCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCB0bXApIHsKPiAtCQljbGVhcl9i aXQoSTkxNV9SRVNFVF9FTkdJTkUgKyBlbmdpbmUtPmlkLAo+IC0JCQkgICZkZXZfcHJpdi0+Z3B1 X2Vycm9yLmZsYWdzKTsKPiAtCX0KPiAtCj4gLQljbGVhcl9iaXQoSTkxNV9SRVNFVF9CQUNLT0ZG LCAmZGV2X3ByaXYtPmdwdV9lcnJvci5mbGFncyk7Cj4gLQl3YWtlX3VwX2FsbCgmZGV2X3ByaXYt PmdwdV9lcnJvci5yZXNldF9xdWV1ZSk7Cj4gLQo+IC1vdXQ6Cj4gLQlpbnRlbF9ydW50aW1lX3Bt X3B1dChkZXZfcHJpdiwgd2FrZXJlZik7Cj4gLX0KPiAtCj4gIC8qIENhbGxlZCBmcm9tIGRybSBn ZW5lcmljIGNvZGUsIHBhc3NlZCAnY3J0Yycgd2hpY2gKPiAgICogd2UgdXNlIGFzIGEgcGlwZSBp bmRleAo+ICAgKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1 ZXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+IGluZGV4IGQxMzU1 MTU0ODg2YS4uNTQwM2Q0ZTJjZWUwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVxdWVzdC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0 LmMKPiBAQCAtMjksNiArMjksNyBAQAo+ICAjaW5jbHVkZSA8bGludXgvc2NoZWQvc2lnbmFsLmg+ Cj4gIAo+ICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiArI2luY2x1ZGUgImk5MTVfcmVzZXQuaCIK PiAgCj4gIHN0YXRpYyBjb25zdCBjaGFyICppOTE1X2ZlbmNlX2dldF9kcml2ZXJfbmFtZShzdHJ1 Y3QgZG1hX2ZlbmNlICpmZW5jZSkKPiAgewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3Jlc2V0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jlc2V0LmMKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZTJlNDBiNDRhOWE4Cj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVzZXQuYwo+ IEBAIC0wLDAgKzEsMTM4OSBAQAo+ICsvKgo+ICsgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog TUlUCj4gKyAqCj4gKyAqIENvcHlyaWdodCDCqSAyMDA4LTIwMTggSW50ZWwgQ29ycG9yYXRpb24K PiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvc2NoZWQvbW0uaD4KPiArCj4gKyNpbmNsdWRl ICJpOTE1X2Rydi5oIgo+ICsjaW5jbHVkZSAiaTkxNV9ncHVfZXJyb3IuaCIKPiArI2luY2x1ZGUg Imk5MTVfcmVzZXQuaCIKPiArCj4gKyNpbmNsdWRlICJpbnRlbF9ndWMuaCIKPiArCj4gK3N0YXRp YyB2b2lkIGVuZ2luZV9za2lwX2NvbnRleHQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gK3sK PiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IHJxLT5lbmdpbmU7Cj4gKwlzdHJ1 Y3QgaTkxNV9nZW1fY29udGV4dCAqaHVuZ19jdHggPSBycS0+Z2VtX2NvbnRleHQ7Cj4gKwlzdHJ1 Y3QgaTkxNV90aW1lbGluZSAqdGltZWxpbmUgPSBycS0+dGltZWxpbmU7Cj4gKwl1bnNpZ25lZCBs b25nIGZsYWdzOwo+ICsKPiArCUdFTV9CVUdfT04odGltZWxpbmUgPT0gJmVuZ2luZS0+dGltZWxp bmUpOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZlbmdpbmUtPnRpbWVsaW5lLmxvY2ssIGZs YWdzKTsKPiArCXNwaW5fbG9jaygmdGltZWxpbmUtPmxvY2spOwo+ICsKPiArCWxpc3RfZm9yX2Vh Y2hfZW50cnlfY29udGludWUocnEsICZlbmdpbmUtPnRpbWVsaW5lLnJlcXVlc3RzLCBsaW5rKQo+ ICsJCWlmIChycS0+Z2VtX2NvbnRleHQgPT0gaHVuZ19jdHgpCj4gKwkJCWk5MTVfcmVxdWVzdF9z a2lwKHJxLCAtRUlPKTsKPiArCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJxLCAmdGltZWxpbmUt PnJlcXVlc3RzLCBsaW5rKQo+ICsJCWk5MTVfcmVxdWVzdF9za2lwKHJxLCAtRUlPKTsKPiArCj4g KwlzcGluX3VubG9jaygmdGltZWxpbmUtPmxvY2spOwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmZW5naW5lLT50aW1lbGluZS5sb2NrLCBmbGFncyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGNsaWVudF9tYXJrX2d1aWx0eShzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3By aXYsCj4gKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+ICt7 Cj4gKwl1bnNpZ25lZCBpbnQgc2NvcmU7Cj4gKwl1bnNpZ25lZCBsb25nIHByZXZfaGFuZzsKPiAr Cj4gKwlpZiAoaTkxNV9nZW1fY29udGV4dF9pc19iYW5uZWQoY3R4KSkKPiArCQlzY29yZSA9IEk5 MTVfQ0xJRU5UX1NDT1JFX0NPTlRFWFRfQkFOOwo+ICsJZWxzZQo+ICsJCXNjb3JlID0gMDsKPiAr Cj4gKwlwcmV2X2hhbmcgPSB4Y2hnKCZmaWxlX3ByaXYtPmhhbmdfdGltZXN0YW1wLCBqaWZmaWVz KTsKPiArCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBwcmV2X2hhbmcgKyBJOTE1X0NMSUVOVF9G QVNUX0hBTkdfSklGRklFUykpCj4gKwkJc2NvcmUgKz0gSTkxNV9DTElFTlRfU0NPUkVfSEFOR19G QVNUOwo+ICsKPiArCWlmIChzY29yZSkgewo+ICsJCWF0b21pY19hZGQoc2NvcmUsICZmaWxlX3By aXYtPmJhbl9zY29yZSk7Cj4gKwo+ICsJCURSTV9ERUJVR19EUklWRVIoImNsaWVudCAlczogZ2Fp bmVkICV1IGJhbiBzY29yZSwgbm93ICV1XG4iLAo+ICsJCQkJIGN0eC0+bmFtZSwgc2NvcmUsCj4g KwkJCQkgYXRvbWljX3JlYWQoJmZpbGVfcHJpdi0+YmFuX3Njb3JlKSk7Cj4gKwl9Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIGNvbnRleHRfbWFya19ndWlsdHkoc3RydWN0IGk5MTVfZ2VtX2NvbnRl eHQgKmN0eCkKPiArewo+ICsJdW5zaWduZWQgaW50IHNjb3JlOwo+ICsJYm9vbCBiYW5uZWQsIGJh bm5hYmxlOwo+ICsKPiArCWF0b21pY19pbmMoJmN0eC0+Z3VpbHR5X2NvdW50KTsKPiArCj4gKwli YW5uYWJsZSA9IGk5MTVfZ2VtX2NvbnRleHRfaXNfYmFubmFibGUoY3R4KTsKPiArCXNjb3JlID0g YXRvbWljX2FkZF9yZXR1cm4oQ09OVEVYVF9TQ09SRV9HVUlMVFksICZjdHgtPmJhbl9zY29yZSk7 Cj4gKwliYW5uZWQgPSBzY29yZSA+PSBDT05URVhUX1NDT1JFX0JBTl9USFJFU0hPTEQ7Cj4gKwo+ ICsJLyogQ29vbCBjb250ZXh0cyBkb24ndCBhY2N1bXVsYXRlIGNsaWVudCBiYW4gc2NvcmUgKi8K PiArCWlmICghYmFubmFibGUpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmIChiYW5uZWQpIHsKPiAr CQlEUk1fREVCVUdfRFJJVkVSKCJjb250ZXh0ICVzOiBndWlsdHkgJWQsIHNjb3JlICV1LCBiYW5u ZWRcbiIsCj4gKwkJCQkgY3R4LT5uYW1lLCBhdG9taWNfcmVhZCgmY3R4LT5ndWlsdHlfY291bnQp LAo+ICsJCQkJIHNjb3JlKTsKPiArCQlpOTE1X2dlbV9jb250ZXh0X3NldF9iYW5uZWQoY3R4KTsK PiArCX0KPiArCj4gKwlpZiAoIUlTX0VSUl9PUl9OVUxMKGN0eC0+ZmlsZV9wcml2KSkKPiArCQlj bGllbnRfbWFya19ndWlsdHkoY3R4LT5maWxlX3ByaXYsIGN0eCk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGNvbnRleHRfbWFya19pbm5vY2VudChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4 KQo+ICt7Cj4gKwlhdG9taWNfaW5jKCZjdHgtPmFjdGl2ZV9jb3VudCk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGdlbjNfc3RvcF9lbmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5 MTU7Cj4gKwljb25zdCB1MzIgYmFzZSA9IGVuZ2luZS0+bW1pb19iYXNlOwo+ICsKPiArCWlmIChp bnRlbF9lbmdpbmVfc3RvcF9jcyhlbmdpbmUpKQo+ICsJCURSTV9ERUJVR19EUklWRVIoIiVzOiB0 aW1lZCBvdXQgb24gU1RPUF9SSU5HXG4iLCBlbmdpbmUtPm5hbWUpOwo+ICsKPiArCUk5MTVfV1JJ VEVfRlcoUklOR19IRUFEKGJhc2UpLCBJOTE1X1JFQURfRlcoUklOR19UQUlMKGJhc2UpKSk7Cj4g KwlQT1NUSU5HX1JFQURfRlcoUklOR19IRUFEKGJhc2UpKTsgLyogcGFyYW5vaWEgKi8KPiArCj4g KwlJOTE1X1dSSVRFX0ZXKFJJTkdfSEVBRChiYXNlKSwgMCk7Cj4gKwlJOTE1X1dSSVRFX0ZXKFJJ TkdfVEFJTChiYXNlKSwgMCk7Cj4gKwlQT1NUSU5HX1JFQURfRlcoUklOR19UQUlMKGJhc2UpKTsK PiArCj4gKwkvKiBUaGUgcmluZyBtdXN0IGJlIGVtcHR5IGJlZm9yZSBpdCBpcyBkaXNhYmxlZCAq Lwo+ICsJSTkxNV9XUklURV9GVyhSSU5HX0NUTChiYXNlKSwgMCk7Cj4gKwo+ICsJLyogQ2hlY2sg YWN0cyBhcyBhIHBvc3QgKi8KPiArCWlmIChJOTE1X1JFQURfRlcoUklOR19IRUFEKGJhc2UpKSAh PSAwKQo+ICsJCURSTV9ERUJVR19EUklWRVIoIiVzOiByaW5nIGhlYWQgbm90IHBhcmtlZFxuIiwK PiArCQkJCSBlbmdpbmUtPm5hbWUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpOTE1X3N0b3Bf ZW5naW5lcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiArCQkJICAgICAgdW5zaWdu ZWQgaW50IGVuZ2luZV9tYXNrKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmU7Cj4gKwllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPiArCj4gKwlpZiAoSU5URUxfR0VOKGk5 MTUpIDwgMykKPiArCQlyZXR1cm47Cj4gKwo+ICsJZm9yX2VhY2hfZW5naW5lX21hc2tlZChlbmdp bmUsIGk5MTUsIGVuZ2luZV9tYXNrLCBpZCkKPiArCQlnZW4zX3N0b3BfZW5naW5lKGVuZ2luZSk7 Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGk5MTVfaW5fcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBk ZXYpCj4gK3sKPiArCXU4IGdkcnN0Owo+ICsKPiArCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYs IEk5MTVfR0RSU1QsICZnZHJzdCk7Cj4gKwlyZXR1cm4gZ2Ryc3QgJiBHUkRPTV9SRVNFVF9TVEFU VVM7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaTkxNV9kb19yZXNldChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSwKPiArCQkJIHVuc2lnbmVkIGludCBlbmdpbmVfbWFzaywKPiArCQkJIHVu c2lnbmVkIGludCByZXRyeSkKPiArewo+ICsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBpOTE1LT5k cm0ucGRldjsKPiArCWludCBlcnI7Cj4gKwo+ICsJLyogQXNzZXJ0IHJlc2V0IGZvciBhdCBsZWFz dCAyMCB1c2VjLCBhbmQgd2FpdCBmb3IgYWNrbm93bGVkZ2VtZW50LiAqLwo+ICsJcGNpX3dyaXRl X2NvbmZpZ19ieXRlKHBkZXYsIEk5MTVfR0RSU1QsIEdSRE9NX1JFU0VUX0VOQUJMRSk7Cj4gKwl1 c2xlZXBfcmFuZ2UoNTAsIDIwMCk7Cj4gKwllcnIgPSB3YWl0X2ZvcihpOTE1X2luX3Jlc2V0KHBk ZXYpLCA1MDApOwo+ICsKPiArCS8qIENsZWFyIHRoZSByZXNldCByZXF1ZXN0LiAqLwo+ICsJcGNp X3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIEk5MTVfR0RSU1QsIDApOwo+ICsJdXNsZWVwX3Jhbmdl KDUwLCAyMDApOwo+ICsJaWYgKCFlcnIpCj4gKwkJZXJyID0gd2FpdF9mb3IoIWk5MTVfaW5fcmVz ZXQocGRldiksIDUwMCk7Cj4gKwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGJv b2wgZzR4X3Jlc2V0X2NvbXBsZXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQo+ICt7Cj4gKwl1OCBn ZHJzdDsKPiArCj4gKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBJOTE1X0dEUlNULCAmZ2Ry c3QpOwo+ICsJcmV0dXJuIChnZHJzdCAmIEdSRE9NX1JFU0VUX0VOQUJMRSkgPT0gMDsKPiArfQo+ ICsKPiArc3RhdGljIGludCBnMzNfZG9fcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUsCj4gKwkJCXVuc2lnbmVkIGludCBlbmdpbmVfbWFzaywKPiArCQkJdW5zaWduZWQgaW50IHJl dHJ5KQo+ICt7Cj4gKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGk5MTUtPmRybS5wZGV2Owo+ICsK PiArCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBJOTE1X0dEUlNULCBHUkRPTV9SRVNFVF9F TkFCTEUpOwo+ICsJcmV0dXJuIHdhaXRfZm9yKGc0eF9yZXNldF9jb21wbGV0ZShwZGV2KSwgNTAw KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBnNHhfZG9fcmVzZXQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAo+ICsJCQl1bnNpZ25lZCBpbnQgZW5naW5lX21hc2ssCj4gKwkJCXVu c2lnbmVkIGludCByZXRyeSkKPiArewo+ICsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkZXZfcHJp di0+ZHJtLnBkZXY7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCS8qIFdhVmNwQ2xrR2F0ZURpc2FibGVG b3JNZWRpYVJlc2V0OmN0ZyxlbGsgKi8KPiArCUk5MTVfV1JJVEUoVkRFQ0NMS19HQVRFX0QsCj4g KwkJICAgSTkxNV9SRUFEKFZERUNDTEtfR0FURV9EKSB8IFZDUF9VTklUX0NMT0NLX0dBVEVfRElT QUJMRSk7Cj4gKwlQT1NUSU5HX1JFQUQoVkRFQ0NMS19HQVRFX0QpOwo+ICsKPiArCXBjaV93cml0 ZV9jb25maWdfYnl0ZShwZGV2LCBJOTE1X0dEUlNULAo+ICsJCQkgICAgICBHUkRPTV9NRURJQSB8 IEdSRE9NX1JFU0VUX0VOQUJMRSk7Cj4gKwlyZXQgPSAgd2FpdF9mb3IoZzR4X3Jlc2V0X2NvbXBs ZXRlKHBkZXYpLCA1MDApOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9ERUJVR19EUklWRVIoIldh aXQgZm9yIG1lZGlhIHJlc2V0IGZhaWxlZFxuIik7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ ICsJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIEk5MTVfR0RSU1QsCj4gKwkJCSAgICAgIEdS RE9NX1JFTkRFUiB8IEdSRE9NX1JFU0VUX0VOQUJMRSk7Cj4gKwlyZXQgPSAgd2FpdF9mb3IoZzR4 X3Jlc2V0X2NvbXBsZXRlKHBkZXYpLCA1MDApOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9ERUJV R19EUklWRVIoIldhaXQgZm9yIHJlbmRlciByZXNldCBmYWlsZWRcbiIpOwo+ICsJCWdvdG8gb3V0 Owo+ICsJfQo+ICsKPiArb3V0Ogo+ICsJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIEk5MTVf R0RSU1QsIDApOwo+ICsKPiArCUk5MTVfV1JJVEUoVkRFQ0NMS19HQVRFX0QsCj4gKwkJICAgSTkx NV9SRUFEKFZERUNDTEtfR0FURV9EKSAmIH5WQ1BfVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOwo+ ICsJUE9TVElOR19SRUFEKFZERUNDTEtfR0FURV9EKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGlyb25sYWtlX2RvX3Jlc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPiArCQkJICAgICB1bnNpZ25lZCBpbnQgZW5naW5lX21hc2ssCj4gKwkJ CSAgICAgdW5zaWduZWQgaW50IHJldHJ5KQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCUk5MTVf V1JJVEUoSUxLX0dEU1IsIElMS19HUkRPTV9SRU5ERVIgfCBJTEtfR1JET01fUkVTRVRfRU5BQkxF KTsKPiArCXJldCA9IGludGVsX3dhaXRfZm9yX3JlZ2lzdGVyKGRldl9wcml2LAo+ICsJCQkJICAg ICAgSUxLX0dEU1IsIElMS19HUkRPTV9SRVNFVF9FTkFCTEUsIDAsCj4gKwkJCQkgICAgICA1MDAp Owo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9ERUJVR19EUklWRVIoIldhaXQgZm9yIHJlbmRlciBy ZXNldCBmYWlsZWRcbiIpOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCUk5MTVfV1JJVEUo SUxLX0dEU1IsIElMS19HUkRPTV9NRURJQSB8IElMS19HUkRPTV9SRVNFVF9FTkFCTEUpOwo+ICsJ cmV0ID0gaW50ZWxfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYsCj4gKwkJCQkgICAgICBJTEtf R0RTUiwgSUxLX0dSRE9NX1JFU0VUX0VOQUJMRSwgMCwKPiArCQkJCSAgICAgIDUwMCk7Cj4gKwlp ZiAocmV0KSB7Cj4gKwkJRFJNX0RFQlVHX0RSSVZFUigiV2FpdCBmb3IgbWVkaWEgcmVzZXQgZmFp bGVkXG4iKTsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gK291dDoKPiArCUk5MTVfV1JJVEUo SUxLX0dEU1IsIDApOwo+ICsJUE9TVElOR19SRUFEKElMS19HRFNSKTsKPiArCXJldHVybiByZXQ7 Cj4gK30KPiArCj4gKy8qIFJlc2V0IHRoZSBoYXJkd2FyZSBkb21haW5zIChHRU5YX0dSRE9NXyop IHNwZWNpZmllZCBieSBtYXNrICovCj4gK3N0YXRpYyBpbnQgZ2VuNl9od19kb21haW5fcmVzZXQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkJdTMyIGh3X2RvbWFpbl9t YXNrKQo+ICt7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCS8qCj4gKwkgKiBHRU42X0dEUlNUIGlzIG5v dCBpbiB0aGUgZ3QgcG93ZXIgd2VsbCwgbm8gbmVlZCB0byBjaGVjawo+ICsJICogZm9yIGZpZm8g c3BhY2UgZm9yIHRoZSB3cml0ZSBvciBmb3JjZXdha2UgdGhlIGNoaXAgZm9yCj4gKwkgKiB0aGUg cmVhZAo+ICsJICovCj4gKwlJOTE1X1dSSVRFX0ZXKEdFTjZfR0RSU1QsIGh3X2RvbWFpbl9tYXNr KTsKPiArCj4gKwkvKiBXYWl0IGZvciB0aGUgZGV2aWNlIHRvIGFjayB0aGUgcmVzZXQgcmVxdWVz dHMgKi8KPiArCWVyciA9IF9faW50ZWxfd2FpdF9mb3JfcmVnaXN0ZXJfZncoZGV2X3ByaXYsCj4g KwkJCQkJICAgR0VONl9HRFJTVCwgaHdfZG9tYWluX21hc2ssIDAsCj4gKwkJCQkJICAgNTAwLCAw LAo+ICsJCQkJCSAgIE5VTEwpOwo+ICsJaWYgKGVycikKPiArCQlEUk1fREVCVUdfRFJJVkVSKCJX YWl0IGZvciAweCUwOHggZW5naW5lcyByZXNldCBmYWlsZWRcbiIsCj4gKwkJCQkgaHdfZG9tYWlu X21hc2spOwo+ICsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZ2VuNl9y ZXNldF9lbmdpbmVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICsJCQkgICAgICB1 bnNpZ25lZCBpbnQgZW5naW5lX21hc2ssCj4gKwkJCSAgICAgIHVuc2lnbmVkIGludCByZXRyeSkK PiArewo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICsJY29uc3QgdTMyIGh3 X2VuZ2luZV9tYXNrW0k5MTVfTlVNX0VOR0lORVNdID0gewo+ICsJCVtSQ1NdID0gR0VONl9HUkRP TV9SRU5ERVIsCj4gKwkJW0JDU10gPSBHRU42X0dSRE9NX0JMVCwKPiArCQlbVkNTXSA9IEdFTjZf R1JET01fTUVESUEsCj4gKwkJW1ZDUzJdID0gR0VOOF9HUkRPTV9NRURJQTIsCj4gKwkJW1ZFQ1Nd ID0gR0VONl9HUkRPTV9WRUNTLAo+ICsJfTsKPiArCXUzMiBod19tYXNrOwo+ICsKPiArCWlmIChl bmdpbmVfbWFzayA9PSBBTExfRU5HSU5FUykgewo+ICsJCWh3X21hc2sgPSBHRU42X0dSRE9NX0ZV TEw7Cj4gKwl9IGVsc2Ugewo+ICsJCXVuc2lnbmVkIGludCB0bXA7Cj4gKwo+ICsJCWh3X21hc2sg PSAwOwo+ICsJCWZvcl9lYWNoX2VuZ2luZV9tYXNrZWQoZW5naW5lLCBpOTE1LCBlbmdpbmVfbWFz aywgdG1wKQo+ICsJCQlod19tYXNrIHw9IGh3X2VuZ2luZV9tYXNrW2VuZ2luZS0+aWRdOwo+ICsJ fQo+ICsKPiArCXJldHVybiBnZW42X2h3X2RvbWFpbl9yZXNldChpOTE1LCBod19tYXNrKTsKPiAr fQo+ICsKPiArc3RhdGljIHUzMiBnZW4xMV9sb2NrX3NmYyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCj4gKwkJCSAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7 Cj4gKwl1OCB2ZGJveF9zZmNfYWNjZXNzID0gUlVOVElNRV9JTkZPKGRldl9wcml2KS0+dmRib3hf c2ZjX2FjY2VzczsKPiArCWk5MTVfcmVnX3Qgc2ZjX2ZvcmNlZF9sb2NrLCBzZmNfZm9yY2VkX2xv Y2tfYWNrOwo+ICsJdTMyIHNmY19mb3JjZWRfbG9ja19iaXQsIHNmY19mb3JjZWRfbG9ja19hY2tf Yml0Owo+ICsJaTkxNV9yZWdfdCBzZmNfdXNhZ2U7Cj4gKwl1MzIgc2ZjX3VzYWdlX2JpdDsKPiAr CXUzMiBzZmNfcmVzZXRfYml0Owo+ICsKPiArCXN3aXRjaCAoZW5naW5lLT5jbGFzcykgewo+ICsJ Y2FzZSBWSURFT19ERUNPREVfQ0xBU1M6Cj4gKwkJaWYgKChCSVQoZW5naW5lLT5pbnN0YW5jZSkg JiB2ZGJveF9zZmNfYWNjZXNzKSA9PSAwKQo+ICsJCQlyZXR1cm4gMDsKPiArCj4gKwkJc2ZjX2Zv cmNlZF9sb2NrID0gR0VOMTFfVkNTX1NGQ19GT1JDRURfTE9DSyhlbmdpbmUpOwo+ICsJCXNmY19m b3JjZWRfbG9ja19iaXQgPSBHRU4xMV9WQ1NfU0ZDX0ZPUkNFRF9MT0NLX0JJVDsKPiArCj4gKwkJ c2ZjX2ZvcmNlZF9sb2NrX2FjayA9IEdFTjExX1ZDU19TRkNfTE9DS19TVEFUVVMoZW5naW5lKTsK PiArCQlzZmNfZm9yY2VkX2xvY2tfYWNrX2JpdCAgPSBHRU4xMV9WQ1NfU0ZDX0xPQ0tfQUNLX0JJ VDsKPiArCj4gKwkJc2ZjX3VzYWdlID0gR0VOMTFfVkNTX1NGQ19MT0NLX1NUQVRVUyhlbmdpbmUp Owo+ICsJCXNmY191c2FnZV9iaXQgPSBHRU4xMV9WQ1NfU0ZDX1VTQUdFX0JJVDsKPiArCQlzZmNf cmVzZXRfYml0ID0gR0VOMTFfVkNTX1NGQ19SRVNFVF9CSVQoZW5naW5lLT5pbnN0YW5jZSk7Cj4g KwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBWSURFT19FTkhBTkNFTUVOVF9DTEFTUzoKPiArCQlzZmNf Zm9yY2VkX2xvY2sgPSBHRU4xMV9WRUNTX1NGQ19GT1JDRURfTE9DSyhlbmdpbmUpOwo+ICsJCXNm Y19mb3JjZWRfbG9ja19iaXQgPSBHRU4xMV9WRUNTX1NGQ19GT1JDRURfTE9DS19CSVQ7Cj4gKwo+ ICsJCXNmY19mb3JjZWRfbG9ja19hY2sgPSBHRU4xMV9WRUNTX1NGQ19MT0NLX0FDSyhlbmdpbmUp Owo+ICsJCXNmY19mb3JjZWRfbG9ja19hY2tfYml0ICA9IEdFTjExX1ZFQ1NfU0ZDX0xPQ0tfQUNL X0JJVDsKPiArCj4gKwkJc2ZjX3VzYWdlID0gR0VOMTFfVkVDU19TRkNfVVNBR0UoZW5naW5lKTsK PiArCQlzZmNfdXNhZ2VfYml0ID0gR0VOMTFfVkVDU19TRkNfVVNBR0VfQklUOwo+ICsJCXNmY19y ZXNldF9iaXQgPSBHRU4xMV9WRUNTX1NGQ19SRVNFVF9CSVQoZW5naW5lLT5pbnN0YW5jZSk7Cj4g KwkJYnJlYWs7Cj4gKwo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwkv Kgo+ICsJICogVGVsbCB0aGUgZW5naW5lIHRoYXQgYSBzb2Z0d2FyZSByZXNldCBpcyBnb2luZyB0 byBoYXBwZW4uIFRoZSBlbmdpbmUKPiArCSAqIHdpbGwgdGhlbiB0cnkgdG8gZm9yY2UgbG9jayB0 aGUgU0ZDIChpZiBjdXJyZW50bHkgbG9ja2VkLCBpdCB3aWxsCj4gKwkgKiByZW1haW4gc28gdW50 aWwgd2UgdGVsbCB0aGUgZW5naW5lIGl0IGlzIHNhZmUgdG8gdW5sb2NrOyBpZiBjdXJyZW50bHkK PiArCSAqIHVubG9ja2VkLCBpdCB3aWxsIGlnbm9yZSB0aGlzIGFuZCBhbGwgbmV3IGxvY2sgcmVx dWVzdHMpLiBJZiBTRkMKPiArCSAqIGVuZHMgdXAgYmVpbmcgbG9ja2VkIHRvIHRoZSBlbmdpbmUg d2Ugd2FudCB0byByZXNldCwgd2UgaGF2ZSB0byByZXNldAo+ICsJICogaXQgYXMgd2VsbCAod2Ug d2lsbCB1bmxvY2sgaXQgb25jZSB0aGUgcmVzZXQgc2VxdWVuY2UgaXMgY29tcGxldGVkKS4KPiAr CSAqLwo+ICsJSTkxNV9XUklURV9GVyhzZmNfZm9yY2VkX2xvY2ssCj4gKwkJICAgICAgSTkxNV9S RUFEX0ZXKHNmY19mb3JjZWRfbG9jaykgfCBzZmNfZm9yY2VkX2xvY2tfYml0KTsKPiArCj4gKwlp ZiAoX19pbnRlbF93YWl0X2Zvcl9yZWdpc3Rlcl9mdyhkZXZfcHJpdiwKPiArCQkJCQkgc2ZjX2Zv cmNlZF9sb2NrX2FjaywKPiArCQkJCQkgc2ZjX2ZvcmNlZF9sb2NrX2Fja19iaXQsCj4gKwkJCQkJ IHNmY19mb3JjZWRfbG9ja19hY2tfYml0LAo+ICsJCQkJCSAxMDAwLCAwLCBOVUxMKSkgewo+ICsJ CURSTV9ERUJVR19EUklWRVIoIldhaXQgZm9yIFNGQyBmb3JjZWQgbG9jayBhY2sgZmFpbGVkXG4i KTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlpZiAoSTkxNV9SRUFEX0ZXKHNmY191c2Fn ZSkgJiBzZmNfdXNhZ2VfYml0KQo+ICsJCXJldHVybiBzZmNfcmVzZXRfYml0Owo+ICsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBnZW4xMV91bmxvY2tfc2ZjKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4gK3sKPiArCXU4IHZkYm94X3NmY19hY2Nlc3MgPSBSVU5USU1FX0lORk8o ZGV2X3ByaXYpLT52ZGJveF9zZmNfYWNjZXNzOwo+ICsJaTkxNV9yZWdfdCBzZmNfZm9yY2VkX2xv Y2s7Cj4gKwl1MzIgc2ZjX2ZvcmNlZF9sb2NrX2JpdDsKPiArCj4gKwlzd2l0Y2ggKGVuZ2luZS0+ Y2xhc3MpIHsKPiArCWNhc2UgVklERU9fREVDT0RFX0NMQVNTOgo+ICsJCWlmICgoQklUKGVuZ2lu ZS0+aW5zdGFuY2UpICYgdmRib3hfc2ZjX2FjY2VzcykgPT0gMCkKPiArCQkJcmV0dXJuOwo+ICsK PiArCQlzZmNfZm9yY2VkX2xvY2sgPSBHRU4xMV9WQ1NfU0ZDX0ZPUkNFRF9MT0NLKGVuZ2luZSk7 Cj4gKwkJc2ZjX2ZvcmNlZF9sb2NrX2JpdCA9IEdFTjExX1ZDU19TRkNfRk9SQ0VEX0xPQ0tfQklU Owo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgVklERU9fRU5IQU5DRU1FTlRfQ0xBU1M6Cj4gKwkJ c2ZjX2ZvcmNlZF9sb2NrID0gR0VOMTFfVkVDU19TRkNfRk9SQ0VEX0xPQ0soZW5naW5lKTsKPiAr CQlzZmNfZm9yY2VkX2xvY2tfYml0ID0gR0VOMTFfVkVDU19TRkNfRk9SQ0VEX0xPQ0tfQklUOwo+ ICsJCWJyZWFrOwo+ICsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCUk5 MTVfV1JJVEVfRlcoc2ZjX2ZvcmNlZF9sb2NrLAo+ICsJCSAgICAgIEk5MTVfUkVBRF9GVyhzZmNf Zm9yY2VkX2xvY2spICYgfnNmY19mb3JjZWRfbG9ja19iaXQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IGdlbjExX3Jlc2V0X2VuZ2luZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4g KwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZW5naW5lX21hc2ssCj4gKwkJCSAgICAgICB1bnNpZ25l ZCBpbnQgcmV0cnkpCj4gK3sKPiArCWNvbnN0IHUzMiBod19lbmdpbmVfbWFza1tJOTE1X05VTV9F TkdJTkVTXSA9IHsKPiArCQlbUkNTXSA9IEdFTjExX0dSRE9NX1JFTkRFUiwKPiArCQlbQkNTXSA9 IEdFTjExX0dSRE9NX0JMVCwKPiArCQlbVkNTXSA9IEdFTjExX0dSRE9NX01FRElBLAo+ICsJCVtW Q1MyXSA9IEdFTjExX0dSRE9NX01FRElBMiwKPiArCQlbVkNTM10gPSBHRU4xMV9HUkRPTV9NRURJ QTMsCj4gKwkJW1ZDUzRdID0gR0VOMTFfR1JET01fTUVESUE0LAo+ICsJCVtWRUNTXSA9IEdFTjEx X0dSRE9NX1ZFQ1MsCj4gKwkJW1ZFQ1MyXSA9IEdFTjExX0dSRE9NX1ZFQ1MyLAo+ICsJfTsKPiAr CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiArCXVuc2lnbmVkIGludCB0bXA7Cj4g Kwl1MzIgaHdfbWFzazsKPiArCWludCByZXQ7Cj4gKwo+ICsJQlVJTERfQlVHX09OKFZFQ1MyICsg MSAhPSBJOTE1X05VTV9FTkdJTkVTKTsKPiArCj4gKwlpZiAoZW5naW5lX21hc2sgPT0gQUxMX0VO R0lORVMpIHsKPiArCQlod19tYXNrID0gR0VOMTFfR1JET01fRlVMTDsKPiArCX0gZWxzZSB7Cj4g KwkJaHdfbWFzayA9IDA7Cj4gKwkJZm9yX2VhY2hfZW5naW5lX21hc2tlZChlbmdpbmUsIGk5MTUs IGVuZ2luZV9tYXNrLCB0bXApIHsKPiArCQkJaHdfbWFzayB8PSBod19lbmdpbmVfbWFza1tlbmdp bmUtPmlkXTsKPiArCQkJaHdfbWFzayB8PSBnZW4xMV9sb2NrX3NmYyhpOTE1LCBlbmdpbmUpOwo+ ICsJCX0KPiArCX0KPiArCj4gKwlyZXQgPSBnZW42X2h3X2RvbWFpbl9yZXNldChpOTE1LCBod19t YXNrKTsKPiArCj4gKwlpZiAoZW5naW5lX21hc2sgIT0gQUxMX0VOR0lORVMpCj4gKwkJZm9yX2Vh Y2hfZW5naW5lX21hc2tlZChlbmdpbmUsIGk5MTUsIGVuZ2luZV9tYXNrLCB0bXApCj4gKwkJCWdl bjExX3VubG9ja19zZmMoaTkxNSwgZW5naW5lKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGdlbjhfZW5naW5lX3Jlc2V0X3ByZXBhcmUoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBlbmdpbmUtPmk5MTU7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCUk5MTVfV1JJVEVfRlcoUklO R19SRVNFVF9DVEwoZW5naW5lLT5tbWlvX2Jhc2UpLAo+ICsJCSAgICAgIF9NQVNLRURfQklUX0VO QUJMRShSRVNFVF9DVExfUkVRVUVTVF9SRVNFVCkpOwo+ICsKPiArCXJldCA9IF9faW50ZWxfd2Fp dF9mb3JfcmVnaXN0ZXJfZncoZGV2X3ByaXYsCj4gKwkJCQkJICAgUklOR19SRVNFVF9DVEwoZW5n aW5lLT5tbWlvX2Jhc2UpLAo+ICsJCQkJCSAgIFJFU0VUX0NUTF9SRUFEWV9UT19SRVNFVCwKPiAr CQkJCQkgICBSRVNFVF9DVExfUkVBRFlfVE9fUkVTRVQsCj4gKwkJCQkJICAgNzAwLCAwLAo+ICsJ CQkJCSAgIE5VTEwpOwo+ICsJaWYgKHJldCkKPiArCQlEUk1fRVJST1IoIiVzOiByZXNldCByZXF1 ZXN0IHRpbWVvdXRcbiIsIGVuZ2luZS0+bmFtZSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgZ2VuOF9lbmdpbmVfcmVzZXRfY2FuY2VsKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gZW5naW5lLT5pOTE1Owo+ICsKPiArCUk5MTVfV1JJVEVfRlcoUklOR19SRVNFVF9DVEwo ZW5naW5lLT5tbWlvX2Jhc2UpLAo+ICsJCSAgICAgIF9NQVNLRURfQklUX0RJU0FCTEUoUkVTRVRf Q1RMX1JFUVVFU1RfUkVTRVQpKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBnZW44X3Jlc2V0X2Vu Z2luZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gKwkJCSAgICAgIHVuc2lnbmVk IGludCBlbmdpbmVfbWFzaywKPiArCQkJICAgICAgdW5zaWduZWQgaW50IHJldHJ5KQo+ICt7Cj4g KwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gKwljb25zdCBib29sIHJlc2V0X25v bl9yZWFkeSA9IHJldHJ5ID49IDE7Cj4gKwl1bnNpZ25lZCBpbnQgdG1wOwo+ICsJaW50IHJldDsK PiArCj4gKwlmb3JfZWFjaF9lbmdpbmVfbWFza2VkKGVuZ2luZSwgaTkxNSwgZW5naW5lX21hc2ss IHRtcCkgewo+ICsJCXJldCA9IGdlbjhfZW5naW5lX3Jlc2V0X3ByZXBhcmUoZW5naW5lKTsKPiAr CQlpZiAocmV0ICYmICFyZXNldF9ub25fcmVhZHkpCj4gKwkJCWdvdG8gc2tpcF9yZXNldDsKPiAr Cj4gKwkJLyoKPiArCQkgKiBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZmFpbGVkIGF0dGVtcHQg dG8gcHJlcGFyZSwKPiArCQkgKiB3ZSBkZWNpZGUgdG8gcHJvY2VlZCBhbnl3YXkuCj4gKwkJICoK PiArCQkgKiBCeSBkb2luZyBzbyB3ZSByaXNrIGNvbnRleHQgY29ycnVwdGlvbiBhbmQgd2l0aAo+ ICsJCSAqIHNvbWUgZ2VucyAoa2JsKSwgcG9zc2libGUgc3lzdGVtIGhhbmcgaWYgcmVzZXQKPiAr CQkgKiBoYXBwZW5zIGR1cmluZyBhY3RpdmUgYmIgZXhlY3V0aW9uLgo+ICsJCSAqCj4gKwkJICog V2UgcmF0aGVyIHRha2UgY29udGV4dCBjb3JydXB0aW9uIGluc3RlYWQgb2YKPiArCQkgKiBmYWls ZWQgcmVzZXQgd2l0aCBhIHdlZGdlZCBkcml2ZXIvZ3B1LiBBbmQKPiArCQkgKiBhY3RpdmUgYmIg ZXhlY3V0aW9uIGNhc2Ugc2hvdWxkIGJlIGNvdmVyZWQgYnkKPiArCQkgKiBpOTE1X3N0b3BfZW5n aW5lcyB3ZSBoYXZlIGJlZm9yZSB0aGUgcmVzZXQuCj4gKwkJICovCj4gKwl9Cj4gKwo+ICsJaWYg KElOVEVMX0dFTihpOTE1KSA+PSAxMSkKPiArCQlyZXQgPSBnZW4xMV9yZXNldF9lbmdpbmVzKGk5 MTUsIGVuZ2luZV9tYXNrLCByZXRyeSk7Cj4gKwllbHNlCj4gKwkJcmV0ID0gZ2VuNl9yZXNldF9l bmdpbmVzKGk5MTUsIGVuZ2luZV9tYXNrLCByZXRyeSk7Cj4gKwo+ICtza2lwX3Jlc2V0Ogo+ICsJ Zm9yX2VhY2hfZW5naW5lX21hc2tlZChlbmdpbmUsIGk5MTUsIGVuZ2luZV9tYXNrLCB0bXApCj4g KwkJZ2VuOF9lbmdpbmVfcmVzZXRfY2FuY2VsKGVuZ2luZSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsK PiArfQo+ICsKPiArdHlwZWRlZiBpbnQgKCpyZXNldF9mdW5jKShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqLAo+ICsJCQkgIHVuc2lnbmVkIGludCBlbmdpbmVfbWFzaywKPiArCQkJICB1bnNpZ25l ZCBpbnQgcmV0cnkpOwo+ICsKPiArc3RhdGljIHJlc2V0X2Z1bmMgaW50ZWxfZ2V0X2dwdV9yZXNl dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiArewo+ICsJaWYgKCFpOTE1X21vZHBh cmFtcy5yZXNldCkKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlpZiAoSU5URUxfR0VOKGk5MTUp ID49IDgpCj4gKwkJcmV0dXJuIGdlbjhfcmVzZXRfZW5naW5lczsKPiArCWVsc2UgaWYgKElOVEVM X0dFTihpOTE1KSA+PSA2KQo+ICsJCXJldHVybiBnZW42X3Jlc2V0X2VuZ2luZXM7Cj4gKwllbHNl IGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNSkKPiArCQlyZXR1cm4gaXJvbmxha2VfZG9fcmVzZXQ7 Cj4gKwllbHNlIGlmIChJU19HNFgoaTkxNSkpCj4gKwkJcmV0dXJuIGc0eF9kb19yZXNldDsKPiAr CWVsc2UgaWYgKElTX0czMyhpOTE1KSB8fCBJU19QSU5FVklFVyhpOTE1KSkKPiArCQlyZXR1cm4g ZzMzX2RvX3Jlc2V0Owo+ICsJZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDMpCj4gKwkJcmV0 dXJuIGk5MTVfZG9fcmVzZXQ7Cj4gKwllbHNlCj4gKwkJcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4g K2ludCBpbnRlbF9ncHVfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHVuc2ln bmVkIGludCBlbmdpbmVfbWFzaykKPiArewo+ICsJcmVzZXRfZnVuYyByZXNldCA9IGludGVsX2dl dF9ncHVfcmVzZXQoaTkxNSk7Cj4gKwlpbnQgcmV0cnk7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCS8q Cj4gKwkgKiBXZSB3YW50IHRvIHBlcmZvcm0gcGVyLWVuZ2luZSByZXNldCBmcm9tIGF0b21pYyBj b250ZXh0IChlLmcuCj4gKwkgKiBzb2Z0aXJxKSwgd2hpY2ggaW1wb3NlcyB0aGUgY29uc3RyYWlu dCB0aGF0IHdlIGNhbm5vdCBzbGVlcC4KPiArCSAqIEhvd2V2ZXIsIGV4cGVyaWVuY2Ugc3VnZ2Vz dHMgdGhhdCBzcGVuZGluZyBhIGJpdCBvZiB0aW1lIHdhaXRpbmcKPiArCSAqIGZvciBhIHJlc2V0 IGhlbHBzIGluIHZhcmlvdXMgY2FzZXMsIHNvIGZvciBhIGZ1bGwtZGV2aWNlIHJlc2V0Cj4gKwkg KiB3ZSBhcHBseSB0aGUgb3Bwb3NpdGUgcnVsZSBhbmQgd2FpdCBpZiB3ZSB3YW50IHRvLiBBcyB3 ZSBzaG91bGQKPiArCSAqIGFsd2F5cyBmb2xsb3cgdXAgYSBmYWlsZWQgcGVyLWVuZ2luZSByZXNl dCB3aXRoIGEgZnVsbCBkZXZpY2UgcmVzZXQsCj4gKwkgKiBiZWluZyBhIGxpdHRsZSBmYXN0ZXIs IHN0cmljdGVyIGFuZCBtb3JlIGVycm9yIHByb25lIGZvciB0aGUKPiArCSAqIGF0b21pYyBjYXNl IHNlZW1zIGFuIGFjY2VwdGFibGUgY29tcHJvbWlzZS4KPiArCSAqCj4gKwkgKiBVbmZvcnR1bmF0 ZWx5IHRoaXMgbGVhZHMgdG8gYSBiaW1vZGFsIHJvdXRpbmUsIHdoZW4gdGhlIGdvYWwgd2FzCj4g KwkgKiB0byBoYXZlIGEgc2luZ2xlIHJlc2V0IGZ1bmN0aW9uIHRoYXQgd29ya2VkIGZvciByZXNl dHRpbmcgYW55Cj4gKwkgKiBudW1iZXIgb2YgZW5naW5lcyBzaW11bHRhbmVvdXNseS4KPiArCSAq Lwo+ICsJbWlnaHRfc2xlZXBfaWYoZW5naW5lX21hc2sgPT0gQUxMX0VOR0lORVMpOwo+ICsKPiAr CS8qCj4gKwkgKiBJZiB0aGUgcG93ZXIgd2VsbCBzbGVlcHMgZHVyaW5nIHRoZSByZXNldCwgdGhl IHJlc2V0Cj4gKwkgKiByZXF1ZXN0IG1heSBiZSBkcm9wcGVkIGFuZCBuZXZlciBjb21wbGV0ZXMg KGNhdXNpbmcgLUVJTykuCj4gKwkgKi8KPiArCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KGk5 MTUsIEZPUkNFV0FLRV9BTEwpOwo+ICsJZm9yIChyZXRyeSA9IDA7IHJldHJ5IDwgMzsgcmV0cnkr Kykgewo+ICsJCS8qCj4gKwkJICogV2Ugc3RvcCBlbmdpbmVzLCBvdGhlcndpc2Ugd2UgbWlnaHQg Z2V0IGZhaWxlZCByZXNldCBhbmQgYQo+ICsJCSAqIGRlYWQgZ3B1IChvbiBlbGspLiBBbHNvIGFz IG1vZGVybiBncHUgYXMga2JsIGNhbiBzdWZmZXIKPiArCQkgKiBmcm9tIHN5c3RlbSBoYW5nIGlm IGJhdGNoYnVmZmVyIGlzIHByb2dyZXNzaW5nIHdoZW4KPiArCQkgKiB0aGUgcmVzZXQgaXMgaXNz dWVkLCByZWdhcmRsZXNzIG9mIFJFQURZX1RPX1JFU0VUIGFjay4KPiArCQkgKiBUaHVzIGFzc3Vt ZSBpdCBpcyBiZXN0IHRvIHN0b3AgZW5naW5lcyBvbiBhbGwgZ2Vucwo+ICsJCSAqIHdoZXJlIHdl IGhhdmUgYSBncHUgcmVzZXQuCj4gKwkJICoKPiArCQkgKiBXYUtCTFZFQ1NTZW1hcGhvcmVXYWl0 UG9sbDprYmwgKG9uIEFMTF9FTkdJTkVTKQo+ICsJCSAqCj4gKwkJICogV2FNZWRpYVJlc2V0TWFp blJpbmdDbGVhbnVwOmN0ZyxlbGsgKHByZXN1bWFibHkpCj4gKwkJICoKPiArCQkgKiBGSVhNRTog V2EgZm9yIG1vcmUgbW9kZXJuIGdlbnMgbmVlZHMgdG8gYmUgdmFsaWRhdGVkCj4gKwkJICovCj4g KwkJaTkxNV9zdG9wX2VuZ2luZXMoaTkxNSwgZW5naW5lX21hc2spOwo+ICsKPiArCQlyZXQgPSAt RU5PREVWOwo+ICsJCWlmIChyZXNldCkgewo+ICsJCQlHRU1fVFJBQ0UoImVuZ2luZV9tYXNrPSV4 XG4iLCBlbmdpbmVfbWFzayk7Cj4gKwkJCXJldCA9IHJlc2V0KGk5MTUsIGVuZ2luZV9tYXNrLCBy ZXRyeSk7Cj4gKwkJfQo+ICsJCWlmIChyZXQgIT0gLUVUSU1FRE9VVCB8fCBlbmdpbmVfbWFzayAh PSBBTExfRU5HSU5FUykKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCWNvbmRfcmVzY2hlZCgpOwo+ICsJ fQo+ICsJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoaTkxNSwgRk9SQ0VXQUtFX0FMTCk7Cj4g Kwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArYm9vbCBpbnRlbF9oYXNfZ3B1X3Jlc2V0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICt7Cj4gKwlyZXR1cm4gaW50ZWxfZ2V0X2dw dV9yZXNldChpOTE1KTsKPiArfQo+ICsKPiArYm9vbCBpbnRlbF9oYXNfcmVzZXRfZW5naW5lKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICt7Cj4gKwlyZXR1cm4gSU5URUxfSU5GTyhp OTE1KS0+aGFzX3Jlc2V0X2VuZ2luZSAmJiBpOTE1X21vZHBhcmFtcy5yZXNldCA+PSAyOwo+ICt9 Cj4gKwo+ICtpbnQgaW50ZWxfcmVzZXRfZ3VjKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 KQo+ICt7Cj4gKwl1MzIgZ3VjX2RvbWFpbiA9Cj4gKwkJSU5URUxfR0VOKGk5MTUpID49IDExID8g R0VOMTFfR1JET01fR1VDIDogR0VOOV9HUkRPTV9HVUM7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCUdF TV9CVUdfT04oIUhBU19HVUMoaTkxNSkpOwo+ICsKPiArCWludGVsX3VuY29yZV9mb3JjZXdha2Vf Z2V0KGk5MTUsIEZPUkNFV0FLRV9BTEwpOwo+ICsJcmV0ID0gZ2VuNl9od19kb21haW5fcmVzZXQo aTkxNSwgZ3VjX2RvbWFpbik7Cj4gKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChpOTE1LCBG T1JDRVdBS0VfQUxMKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBF bnN1cmUgaXJxIGhhbmRsZXIgZmluaXNoZXMsIGFuZCBub3QgcnVuIGFnYWluLgo+ICsgKiBBbHNv IHJldHVybiB0aGUgYWN0aXZlIHJlcXVlc3Qgc28gdGhhdCB3ZSBvbmx5IHNlYXJjaCBmb3IgaXQg b25jZS4KPiArICovCj4gK3N0YXRpYyBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICoKPiArcmVzZXRfcHJl cGFyZV9lbmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycTsKPiArCj4gKwkvKgo+ICsJICogRHVyaW5nIHRoZSByZXNldCBz ZXF1ZW5jZSwgd2UgbXVzdCBwcmV2ZW50IHRoZSBlbmdpbmUgZnJvbQo+ICsJICogZW50ZXJpbmcg UkM2LiBBcyB0aGUgY29udGV4dCBzdGF0ZSBpcyB1bmRlZmluZWQgdW50aWwgd2UgcmVzdGFydAo+ ICsJICogdGhlIGVuZ2luZSwgaWYgaXQgZG9lcyBlbnRlciBSQzYgZHVyaW5nIHRoZSByZXNldCwg dGhlIHN0YXRlCj4gKwkgKiB3cml0dGVuIHRvIHRoZSBwb3dlcmNvbnRleHQgaXMgdW5kZWZpbmVk IGFuZCBzbyB3ZSBtYXkgbG9zZQo+ICsJICogR1BVIHN0YXRlIHVwb24gcmVzdW1lLCBpLmUuIGZh aWwgdG8gcmVzdGFydCBhZnRlciBhIHJlc2V0Lgo+ICsJICovCj4gKwlpbnRlbF91bmNvcmVfZm9y Y2V3YWtlX2dldChlbmdpbmUtPmk5MTUsIEZPUkNFV0FLRV9BTEwpOwo+ICsKPiArCXJxID0gZW5n aW5lLT5yZXNldC5wcmVwYXJlKGVuZ2luZSk7Cj4gKwlpZiAocnEgJiYgcnEtPmZlbmNlLmVycm9y ID09IC1FSU8pCj4gKwkJcnEgPSBFUlJfUFRSKC1FSU8pOyAvKiBQcmV2aW91cyByZXNldCBmYWls ZWQhICovCj4gKwo+ICsJcmV0dXJuIHJxOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJlc2V0X3By ZXBhcmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gK3sKPiArCXN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZTsKPiArCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOwo+ICsJZW51 bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gKwlpbnQgZXJyID0gMDsKPiArCj4gKwlmb3JfZWFjaF9l bmdpbmUoZW5naW5lLCBpOTE1LCBpZCkgewo+ICsJCXJxID0gcmVzZXRfcHJlcGFyZV9lbmdpbmUo ZW5naW5lKTsKPiArCQlpZiAoSVNfRVJSKHJxKSkgewo+ICsJCQllcnIgPSBQVFJfRVJSKHJxKTsK PiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQllbmdpbmUtPmhhbmdjaGVjay5hY3RpdmVf cmVxdWVzdCA9IHJxOwo+ICsJfQo+ICsKPiArCWk5MTVfZ2VtX3Jldm9rZV9mZW5jZXMoaTkxNSk7 Cj4gKwlpbnRlbF91Y19zYW5pdGl6ZShpOTE1KTsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4g Kwo+ICsvKiBSZXR1cm5zIHRoZSByZXF1ZXN0IGlmIGl0IHdhcyBndWlsdHkgb2YgdGhlIGhhbmcg Ki8KPiArc3RhdGljIHN0cnVjdCBpOTE1X3JlcXVlc3QgKgo+ICtyZXNldF9yZXF1ZXN0KHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiArCSAgICAgIHN0cnVjdCBpOTE1X3JlcXVlc3Qg KnJxLAo+ICsJICAgICAgYm9vbCBzdGFsbGVkKQo+ICt7Cj4gKwkvKgo+ICsJICogVGhlIGd1aWx0 eSByZXF1ZXN0IHdpbGwgZ2V0IHNraXBwZWQgb24gYSBodW5nIGVuZ2luZS4KPiArCSAqCj4gKwkg KiBVc2VycyBvZiBjbGllbnQgZGVmYXVsdCBjb250ZXh0cyBkbyBub3QgcmVseSBvbiBsb2dpY2Fs Cj4gKwkgKiBzdGF0ZSBwcmVzZXJ2ZWQgYmV0d2VlbiBiYXRjaGVzIHNvIGl0IGlzIHNhZmUgdG8g ZXhlY3V0ZQo+ICsJICogcXVldWVkIHJlcXVlc3RzIGZvbGxvd2luZyB0aGUgaGFuZy4gTm9uIGRl ZmF1bHQgY29udGV4dHMKPiArCSAqIHJlbHkgb24gcHJlc2VydmVkIHN0YXRlLCBzbyBza2lwcGlu ZyBhIGJhdGNoIGxvc2VzIHRoZQo+ICsJICogZXZvbHV0aW9uIG9mIHRoZSBzdGF0ZSBhbmQgaXQg bmVlZHMgdG8gYmUgY29uc2lkZXJlZCBjb3JydXB0ZWQuCj4gKwkgKiBFeGVjdXRpbmcgbW9yZSBx dWV1ZWQgYmF0Y2hlcyBvbiB0b3Agb2YgY29ycnVwdGVkIHN0YXRlIGlzCj4gKwkgKiByaXNreS4g QnV0IHdlIHRha2UgdGhlIHJpc2sgYnkgdHJ5aW5nIHRvIGFkdmFuY2UgdGhyb3VnaAo+ICsJICog dGhlIHF1ZXVlZCByZXF1ZXN0cyBpbiBvcmRlciB0byBtYWtlIHRoZSBjbGllbnQgYmVoYXZpb3Vy Cj4gKwkgKiBtb3JlIHByZWRpY3RhYmxlIGFyb3VuZCByZXNldHMsIGJ5IG5vdCB0aHJvd2luZyBh d2F5IHJhbmRvbQo+ICsJICogYW1vdW50IG9mIGJhdGNoZXMgaXQgaGFzIHByZXBhcmVkIGZvciBl eGVjdXRpb24uIFNvcGhpc3RpY2F0ZWQKPiArCSAqIGNsaWVudHMgY2FuIHVzZSBnZW1fcmVzZXRf c3RhdHNfaW9jdGwgYW5kIGRtYSBmZW5jZSBzdGF0dXMKPiArCSAqIChleHBvcnRlZCB2aWEgc3lu Y19maWxlIGluZm8gaW9jdGwgb24gZXhwbGljaXQgZmVuY2VzKSB0byBvYnNlcnZlCj4gKwkgKiB3 aGVuIGl0IGxvc2VzIHRoZSBjb250ZXh0IHN0YXRlIGFuZCBzaG91bGQgcmVidWlsZCBhY2NvcmRp bmdseS4KPiArCSAqCj4gKwkgKiBUaGUgY29udGV4dCBiYW4sIGFuZCB1bHRpbWF0ZWx5IHRoZSBj bGllbnQgYmFuLCBtZWNoYW5pc20gYXJlIHNhZmV0eQo+ICsJICogdmFsdmVzIGlmIGNsaWVudCBz dWJtaXNzaW9uIGVuZHMgdXAgcmVzdWx0aW5nIGluIG5vdGhpbmcgbW9yZSB0aGFuCj4gKwkgKiBz dWJzZXF1ZW50IGhhbmdzLgo+ICsJICovCj4gKwo+ICsJaWYgKGk5MTVfcmVxdWVzdF9jb21wbGV0 ZWQocnEpKSB7Cj4gKwkJR0VNX1RSQUNFKCIlcyBwYXJkb25lZCBnbG9iYWw9JWQgKGZlbmNlICVs bHg6JWxsZCksIGN1cnJlbnQgJWRcbiIsCj4gKwkJCSAgZW5naW5lLT5uYW1lLCBycS0+Z2xvYmFs X3NlcW5vLAo+ICsJCQkgIHJxLT5mZW5jZS5jb250ZXh0LCBycS0+ZmVuY2Uuc2Vxbm8sCj4gKwkJ CSAgaW50ZWxfZW5naW5lX2dldF9zZXFubyhlbmdpbmUpKTsKPiArCQlzdGFsbGVkID0gZmFsc2U7 Cj4gKwl9Cj4gKwo+ICsJaWYgKHN0YWxsZWQpIHsKPiArCQljb250ZXh0X21hcmtfZ3VpbHR5KHJx LT5nZW1fY29udGV4dCk7Cj4gKwkJaTkxNV9yZXF1ZXN0X3NraXAocnEsIC1FSU8pOwo+ICsKPiAr CQkvKiBJZiB0aGlzIGNvbnRleHQgaXMgbm93IGJhbm5lZCwgc2tpcCBhbGwgcGVuZGluZyByZXF1 ZXN0cy4gKi8KPiArCQlpZiAoaTkxNV9nZW1fY29udGV4dF9pc19iYW5uZWQocnEtPmdlbV9jb250 ZXh0KSkKPiArCQkJZW5naW5lX3NraXBfY29udGV4dChycSk7Cj4gKwl9IGVsc2Ugewo+ICsJCS8q Cj4gKwkJICogU2luY2UgdGhpcyBpcyBub3QgdGhlIGh1bmcgZW5naW5lLCBpdCBtYXkgaGF2ZSBh ZHZhbmNlZAo+ICsJCSAqIHNpbmNlIHRoZSBoYW5nIGRlY2xhcmF0aW9uLiBEb3VibGUgY2hlY2sg YnkgcmVmaW5kaW5nCj4gKwkJICogdGhlIGFjdGl2ZSByZXF1ZXN0IGF0IHRoZSB0aW1lIG9mIHRo ZSByZXNldC4KPiArCQkgKi8KPiArCQlycSA9IGk5MTVfZ2VtX2ZpbmRfYWN0aXZlX3JlcXVlc3Qo ZW5naW5lKTsKPiArCQlpZiAocnEpIHsKPiArCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4g KwkJCWNvbnRleHRfbWFya19pbm5vY2VudChycS0+Z2VtX2NvbnRleHQpOwo+ICsJCQlkbWFfZmVu Y2Vfc2V0X2Vycm9yKCZycS0+ZmVuY2UsIC1FQUdBSU4pOwo+ICsKPiArCQkJLyogUmV3aW5kIHRo ZSBlbmdpbmUgdG8gcmVwbGF5IHRoZSBpbmNvbXBsZXRlIHJxICovCj4gKwkJCXNwaW5fbG9ja19p cnFzYXZlKCZlbmdpbmUtPnRpbWVsaW5lLmxvY2ssIGZsYWdzKTsKPiArCQkJcnEgPSBsaXN0X3By ZXZfZW50cnkocnEsIGxpbmspOwo+ICsJCQlpZiAoJnJxLT5saW5rID09ICZlbmdpbmUtPnRpbWVs aW5lLnJlcXVlc3RzKQo+ICsJCQkJcnEgPSBOVUxMOwo+ICsJCQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZlbmdpbmUtPnRpbWVsaW5lLmxvY2ssIGZsYWdzKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJ cmV0dXJuIHJxOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCByZXNldF9lbmdpbmUoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQkgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4g KwkJCSBib29sIHN0YWxsZWQpCj4gK3sKPiArCWlmIChycSkKPiArCQlycSA9IHJlc2V0X3JlcXVl c3QoZW5naW5lLCBycSwgc3RhbGxlZCk7Cj4gKwo+ICsJLyogU2V0dXAgdGhlIENTIHRvIHJlc3Vt ZSBmcm9tIHRoZSBicmVhZGNydW1iIG9mIHRoZSBodW5nIHJlcXVlc3QgKi8KPiArCWVuZ2luZS0+ cmVzZXQucmVzZXQoZW5naW5lLCBycSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGd0X3Jlc2V0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCB1bnNpZ25lZCBpbnQgc3RhbGxlZF9tYXNr KQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gKwllbnVtIGludGVs X2VuZ2luZV9pZCBpZDsKPiArCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZpOTE1LT5kcm0uc3Ry dWN0X211dGV4KTsKPiArCj4gKwlpOTE1X3JldGlyZV9yZXF1ZXN0cyhpOTE1KTsKPiArCj4gKwlm b3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1LCBpZCkgewo+ICsJCXN0cnVjdCBpbnRlbF9jb250 ZXh0ICpjZTsKPiArCj4gKwkJcmVzZXRfZW5naW5lKGVuZ2luZSwKPiArCQkJICAgICBlbmdpbmUt PmhhbmdjaGVjay5hY3RpdmVfcmVxdWVzdCwKPiArCQkJICAgICBzdGFsbGVkX21hc2sgJiBFTkdJ TkVfTUFTSyhpZCkpOwo+ICsJCWNlID0gZmV0Y2hfYW5kX3plcm8oJmVuZ2luZS0+bGFzdF9yZXRp cmVkX2NvbnRleHQpOwo+ICsJCWlmIChjZSkKPiArCQkJaW50ZWxfY29udGV4dF91bnBpbihjZSk7 Cj4gKwo+ICsJCS8qCj4gKwkJICogT3N0ZW5zaWJpbHksIHdlIGFsd2F5cyB3YW50IGEgY29udGV4 dCBsb2FkZWQgZm9yIHBvd2Vyc2F2aW5nLAo+ICsJCSAqIHNvIGlmIHRoZSBlbmdpbmUgaXMgaWRs ZSBhZnRlciB0aGUgcmVzZXQsIHNlbmQgYSByZXF1ZXN0Cj4gKwkJICogdG8gbG9hZCBvdXIgc2Ny YXRjaCBrZXJuZWxfY29udGV4dC4KPiArCQkgKgo+ICsJCSAqIE1vcmUgbXlzdGVyaW91c2x5LCBp ZiB3ZSBsZWF2ZSB0aGUgZW5naW5lIGlkbGUgYWZ0ZXIgYSByZXNldCwKPiArCQkgKiB0aGUgbmV4 dCB1c2Vyc3BhY2UgYmF0Y2ggbWF5IGhhbmcsIHdpdGggd2hhdCBhcHBlYXJzIHRvIGJlCj4gKwkJ ICogYW4gaW5jb2hlcmVudCByZWFkIGJ5IHRoZSBDUyAocHJlc3VtYWJseSBzdGFsZSBUTEIpLiBB bgo+ICsJCSAqIGVtcHR5IHJlcXVlc3QgYXBwZWFycyBzdWZmaWNpZW50IHRvIHBhcGVyIG92ZXIg dGhlIGdsaXRjaC4KPiArCQkgKi8KPiArCQlpZiAoaW50ZWxfZW5naW5lX2lzX2lkbGUoZW5naW5l KSkgewo+ICsJCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKPiArCj4gKwkJCXJxID0gaTkxNV9y ZXF1ZXN0X2FsbG9jKGVuZ2luZSwgaTkxNS0+a2VybmVsX2NvbnRleHQpOwo+ICsJCQlpZiAoIUlT X0VSUihycSkpCj4gKwkJCQlpOTE1X3JlcXVlc3RfYWRkKHJxKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ ICsJaTkxNV9nZW1fcmVzdG9yZV9mZW5jZXMoaTkxNSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHJlc2V0X2ZpbmlzaF9lbmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7 Cj4gKwllbmdpbmUtPnJlc2V0LmZpbmlzaChlbmdpbmUpOwo+ICsKPiArCWludGVsX3VuY29yZV9m b3JjZXdha2VfcHV0KGVuZ2luZS0+aTkxNSwgRk9SQ0VXQUtFX0FMTCk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHJlc2V0X2ZpbmlzaChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAr ewo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICsJZW51bSBpbnRlbF9lbmdp bmVfaWQgaWQ7Cj4gKwo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmaTkxNS0+ZHJtLnN0cnVjdF9t dXRleCk7Cj4gKwo+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkxNSwgaWQpIHsKPiArCQll bmdpbmUtPmhhbmdjaGVjay5hY3RpdmVfcmVxdWVzdCA9IE5VTEw7Cj4gKwkJcmVzZXRfZmluaXNo X2VuZ2luZShlbmdpbmUpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBub3Bfc3VibWl0 X3JlcXVlc3Qoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCkKPiArewo+ICsJdW5zaWduZWQg bG9uZyBmbGFnczsKPiArCj4gKwlHRU1fVFJBQ0UoIiVzIGZlbmNlICVsbHg6JWxsZCAtPiAtRUlP XG4iLAo+ICsJCSAgcmVxdWVzdC0+ZW5naW5lLT5uYW1lLAo+ICsJCSAgcmVxdWVzdC0+ZmVuY2Uu Y29udGV4dCwgcmVxdWVzdC0+ZmVuY2Uuc2Vxbm8pOwo+ICsJZG1hX2ZlbmNlX3NldF9lcnJvcigm cmVxdWVzdC0+ZmVuY2UsIC1FSU8pOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZyZXF1ZXN0 LT5lbmdpbmUtPnRpbWVsaW5lLmxvY2ssIGZsYWdzKTsKPiArCV9faTkxNV9yZXF1ZXN0X3N1Ym1p dChyZXF1ZXN0KTsKPiArCWludGVsX2VuZ2luZV93cml0ZV9nbG9iYWxfc2Vxbm8ocmVxdWVzdC0+ ZW5naW5lLCByZXF1ZXN0LT5nbG9iYWxfc2Vxbm8pOwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmcmVxdWVzdC0+ZW5naW5lLT50aW1lbGluZS5sb2NrLCBmbGFncyk7Cj4gK30KPiArCj4gK3Zv aWQgaTkxNV9nZW1fc2V0X3dlZGdlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAr ewo+ICsJc3RydWN0IGk5MTVfZ3B1X2Vycm9yICplcnJvciA9ICZpOTE1LT5ncHVfZXJyb3I7Cj4g KwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gKwllbnVtIGludGVsX2VuZ2luZV9p ZCBpZDsKPiArCj4gKwltdXRleF9sb2NrKCZlcnJvci0+d2VkZ2VfbXV0ZXgpOwo+ICsJaWYgKHRl c3RfYml0KEk5MTVfV0VER0VELCAmZXJyb3ItPmZsYWdzKSkgewo+ICsJCW11dGV4X3VubG9jaygm ZXJyb3ItPndlZGdlX211dGV4KTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJaWYgKEdFTV9T SE9XX0RFQlVHKCkpIHsKPiArCQlzdHJ1Y3QgZHJtX3ByaW50ZXIgcCA9IGRybV9kZWJ1Z19wcmlu dGVyKF9fZnVuY19fKTsKPiArCj4gKwkJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkxNSwgaWQp Cj4gKwkJCWludGVsX2VuZ2luZV9kdW1wKGVuZ2luZSwgJnAsICIlc1xuIiwgZW5naW5lLT5uYW1l KTsKPiArCX0KPiArCj4gKwlHRU1fVFJBQ0UoInN0YXJ0XG4iKTsKPiArCj4gKwkvKgo+ICsJICog Rmlyc3QsIHN0b3Agc3VibWlzc2lvbiB0byBodywgYnV0IGRvIG5vdCB5ZXQgY29tcGxldGUgcmVx dWVzdHMgYnkKPiArCSAqIHJvbGxpbmcgdGhlIGdsb2JhbCBzZXFubyBmb3J3YXJkIChzaW5jZSB0 aGlzIHdvdWxkIGNvbXBsZXRlIHJlcXVlc3RzCj4gKwkgKiBmb3Igd2hpY2ggd2UgaGF2ZW4ndCBz ZXQgdGhlIGZlbmNlIGVycm9yIHRvIEVJTyB5ZXQpLgo+ICsJICovCj4gKwlmb3JfZWFjaF9lbmdp bmUoZW5naW5lLCBpOTE1LCBpZCkKPiArCQlyZXNldF9wcmVwYXJlX2VuZ2luZShlbmdpbmUpOwo+ ICsKPiArCS8qIEV2ZW4gaWYgdGhlIEdQVSByZXNldCBmYWlscywgaXQgc2hvdWxkIHN0aWxsIHN0 b3AgdGhlIGVuZ2luZXMgKi8KPiArCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNSkKPiArCQlpbnRl bF9ncHVfcmVzZXQoaTkxNSwgQUxMX0VOR0lORVMpOwo+ICsKPiArCWZvcl9lYWNoX2VuZ2luZShl bmdpbmUsIGk5MTUsIGlkKSB7Cj4gKwkJZW5naW5lLT5zdWJtaXRfcmVxdWVzdCA9IG5vcF9zdWJt aXRfcmVxdWVzdDsKPiArCQllbmdpbmUtPnNjaGVkdWxlID0gTlVMTDsKPiArCX0KPiArCWk5MTUt PmNhcHMuc2NoZWR1bGVyID0gMDsKPiArCj4gKwkvKgo+ICsJICogTWFrZSBzdXJlIG5vIHJlcXVl c3QgY2FuIHNsaXAgdGhyb3VnaCB3aXRob3V0IGdldHRpbmcgY29tcGxldGVkIGJ5Cj4gKwkgKiBl aXRoZXIgdGhpcyBjYWxsIGhlcmUgdG8gaW50ZWxfZW5naW5lX3dyaXRlX2dsb2JhbF9zZXFubywg b3IgdGhlIG9uZQo+ICsJICogaW4gbm9wX3N1Ym1pdF9yZXF1ZXN0Lgo+ICsJICovCj4gKwlzeW5j aHJvbml6ZV9yY3UoKTsKPiArCj4gKwkvKiBNYXJrIGFsbCBleGVjdXRpbmcgcmVxdWVzdHMgYXMg c2tpcHBlZCAqLwo+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkxNSwgaWQpCj4gKwkJZW5n aW5lLT5jYW5jZWxfcmVxdWVzdHMoZW5naW5lKTsKPiArCj4gKwlmb3JfZWFjaF9lbmdpbmUoZW5n aW5lLCBpOTE1LCBpZCkgewo+ICsJCXJlc2V0X2ZpbmlzaF9lbmdpbmUoZW5naW5lKTsKPiArCQlp bnRlbF9lbmdpbmVfd2FrZXVwKGVuZ2luZSk7Cj4gKwl9Cj4gKwo+ICsJc21wX21iX19iZWZvcmVf YXRvbWljKCk7Cj4gKwlzZXRfYml0KEk5MTVfV0VER0VELCAmZXJyb3ItPmZsYWdzKTsKPiArCj4g KwlHRU1fVFJBQ0UoImVuZFxuIik7Cj4gKwltdXRleF91bmxvY2soJmVycm9yLT53ZWRnZV9tdXRl eCk7Cj4gKwo+ICsJd2FrZV91cF9hbGwoJmVycm9yLT5yZXNldF9xdWV1ZSk7Cj4gK30KPiArCj4g K2Jvb2wgaTkxNV9nZW1fdW5zZXRfd2VkZ2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 KQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9ncHVfZXJyb3IgKmVycm9yID0gJmk5MTUtPmdwdV9lcnJv cjsKPiArCXN0cnVjdCBpOTE1X3RpbWVsaW5lICp0bDsKPiArCWJvb2wgcmV0ID0gZmFsc2U7Cj4g Kwo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwo+ ICsJaWYgKCF0ZXN0X2JpdChJOTE1X1dFREdFRCwgJmVycm9yLT5mbGFncykpCj4gKwkJcmV0dXJu IHRydWU7Cj4gKwo+ICsJaWYgKCFpOTE1LT5ndC5zY3JhdGNoKSAvKiBOZXZlciBmdWxsIGluaXRp YWxpc2VkLCByZWNvdmVyeSBpbXBvc3NpYmxlICovCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiAr CW11dGV4X2xvY2soJmVycm9yLT53ZWRnZV9tdXRleCk7Cj4gKwo+ICsJR0VNX1RSQUNFKCJzdGFy dFxuIik7Cj4gKwo+ICsJLyoKPiArCSAqIEJlZm9yZSB1bndlZGdpbmcsIG1ha2Ugc3VyZSB0aGF0 IGFsbCBwZW5kaW5nIG9wZXJhdGlvbnMKPiArCSAqIGFyZSBmbHVzaGVkIGFuZCBlcnJvcmVkIG91 dCAtIHdlIG1heSBoYXZlIHJlcXVlc3RzIHdhaXRpbmcgdXBvbgo+ICsJICogdGhpcmQgcGFydHkg ZmVuY2VzLiBXZSBtYXJrZWQgYWxsIGluZmxpZ2h0IHJlcXVlc3RzIGFzIEVJTywgYW5kCj4gKwkg KiBldmVyeSBleGVjYnVmIHNpbmNlIHJldHVybmVkIEVJTywgZm9yIGNvbnNpc3RlbmN5IHdlIHdh bnQgYWxsCj4gKwkgKiB0aGUgY3VycmVudGx5IHBlbmRpbmcgcmVxdWVzdHMgdG8gYWxzbyBiZSBt YXJrZWQgYXMgRUlPLCB3aGljaAo+ICsJICogaXMgZG9uZSBpbnNpZGUgb3VyIG5vcF9zdWJtaXRf cmVxdWVzdCAtIGFuZCBzbyB3ZSBtdXN0IHdhaXQuCj4gKwkgKgo+ICsJICogTm8gbW9yZSBjYW4g YmUgc3VibWl0dGVkIHVudGlsIHdlIHJlc2V0IHRoZSB3ZWRnZWQgYml0Lgo+ICsJICovCj4gKwls aXN0X2Zvcl9lYWNoX2VudHJ5KHRsLCAmaTkxNS0+Z3QudGltZWxpbmVzLCBsaW5rKSB7Cj4gKwkJ c3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gKwo+ICsJCXJxID0gaTkxNV9nZW1fYWN0aXZlX3Bl ZWsoJnRsLT5sYXN0X3JlcXVlc3QsCj4gKwkJCQkJICAmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7 Cj4gKwkJaWYgKCFycSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCS8qCj4gKwkJICogV2UgY2Fu J3QgdXNlIG91ciBub3JtYWwgd2FpdGVyIGFzIHdlIHdhbnQgdG8KPiArCQkgKiBhdm9pZCByZWN1 cnNpdmVseSB0cnlpbmcgdG8gaGFuZGxlIHRoZSBjdXJyZW50Cj4gKwkJICogcmVzZXQuIFRoZSBi YXNpYyBkbWFfZmVuY2VfZGVmYXVsdF93YWl0KCkgaW5zdGFsbHMKPiArCQkgKiBhIGNhbGxiYWNr IGZvciBkbWFfZmVuY2Vfc2lnbmFsKCksIHdoaWNoIGlzCj4gKwkJICogdHJpZ2dlcmVkIGJ5IG91 ciBub3AgaGFuZGxlciAoaW5kaXJlY3RseSwgdGhlCj4gKwkJICogY2FsbGJhY2sgZW5hYmxlcyB0 aGUgc2lnbmFsZXIgdGhyZWFkIHdoaWNoIGlzCj4gKwkJICogd29rZW4gYnkgdGhlIG5vcF9zdWJt aXRfcmVxdWVzdCgpIGFkdmFuY2luZyB0aGUgc2Vxbm8KPiArCQkgKiBhbmQgd2hlbiB0aGUgc2Vx bm8gcGFzc2VzIHRoZSBmZW5jZSwgdGhlIHNpZ25hbGVyCj4gKwkJICogdGhlbiBzaWduYWxzIHRo ZSBmZW5jZSB3YWtpbmcgdXMgdXApLgo+ICsJCSAqLwo+ICsJCWlmIChkbWFfZmVuY2VfZGVmYXVs dF93YWl0KCZycS0+ZmVuY2UsIHRydWUsCj4gKwkJCQkJICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQp IDwgMCkKPiArCQkJZ290byB1bmxvY2s7Cj4gKwl9Cj4gKwlpOTE1X3JldGlyZV9yZXF1ZXN0cyhp OTE1KTsKPiArCUdFTV9CVUdfT04oaTkxNS0+Z3QuYWN0aXZlX3JlcXVlc3RzKTsKPiArCj4gKwlp bnRlbF9lbmdpbmVzX3Nhbml0aXplKGk5MTUsIGZhbHNlKTsKPiArCj4gKwkvKgo+ICsJICogVW5k byBub3Bfc3VibWl0X3JlcXVlc3QuIFdlIHByZXZlbnQgYWxsIG5ldyBpOTE1IHJlcXVlc3RzIGZy b20KPiArCSAqIGJlaW5nIHF1ZXVlZCAoYnkgZGlzYWxsb3dpbmcgZXhlY2J1ZiB3aGlsc3Qgd2Vk Z2VkKSBzbyBoYXZpbmcKPiArCSAqIHdhaXRlZCBmb3IgYWxsIGFjdGl2ZSByZXF1ZXN0cyBhYm92 ZSwgd2Uga25vdyB0aGUgc3lzdGVtIGlzIGlkbGUKPiArCSAqIGFuZCBkbyBub3QgaGF2ZSB0byB3 b3JyeSBhYm91dCBhIHRocmVhZCBiZWluZyBpbnNpZGUKPiArCSAqIGVuZ2luZS0+c3VibWl0X3Jl cXVlc3QoKSBhcyB3ZSBzd2FwIG92ZXIuIFNvIHVubGlrZSBpbnN0YWxsaW5nCj4gKwkgKiB0aGUg bm9wX3N1Ym1pdF9yZXF1ZXN0IG9uIHJlc2V0LCB3ZSBjYW4gZG8gdGhpcyBmcm9tIG5vcm1hbAo+ ICsJICogY29udGV4dCBhbmQgZG8gbm90IHJlcXVpcmUgc3RvcF9tYWNoaW5lKCkuCj4gKwkgKi8K PiArCWludGVsX2VuZ2luZXNfcmVzZXRfZGVmYXVsdF9zdWJtaXNzaW9uKGk5MTUpOwo+ICsJaTkx NV9nZW1fY29udGV4dHNfbG9zdChpOTE1KTsKPiArCj4gKwlHRU1fVFJBQ0UoImVuZFxuIik7Cj4g Kwo+ICsJc21wX21iX19iZWZvcmVfYXRvbWljKCk7IC8qIGNvbXBsZXRlIHRha2VvdmVyIGJlZm9y ZSBlbmFibGluZyBleGVjYnVmICovCj4gKwljbGVhcl9iaXQoSTkxNV9XRURHRUQsICZpOTE1LT5n cHVfZXJyb3IuZmxhZ3MpOwo+ICsJcmV0ID0gdHJ1ZTsKPiArdW5sb2NrOgo+ICsJbXV0ZXhfdW5s b2NrKCZpOTE1LT5ncHVfZXJyb3Iud2VkZ2VfbXV0ZXgpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4g K30KPiArCj4gKy8qKgo+ICsgKiBpOTE1X3Jlc2V0IC0gcmVzZXQgY2hpcCBhZnRlciBhIGhhbmcK PiArICogQGk5MTU6ICNkcm1faTkxNV9wcml2YXRlIHRvIHJlc2V0Cj4gKyAqIEBzdGFsbGVkX21h c2s6IG1hc2sgb2YgdGhlIHN0YWxsZWQgZW5naW5lcyB3aXRoIHRoZSBndWlsdHkgcmVxdWVzdHMK PiArICogQHJlYXNvbjogdXNlciBlcnJvciBtZXNzYWdlIGZvciB3aHkgd2UgYXJlIHJlc2V0dGlu Zwo+ICsgKgo+ICsgKiBSZXNldCB0aGUgY2hpcC4gIFVzZWZ1bCBpZiBhIGhhbmcgaXMgZGV0ZWN0 ZWQuIE1hcmtzIHRoZSBkZXZpY2UgYXMgd2VkZ2VkCj4gKyAqIG9uIGZhaWx1cmUuCj4gKyAqCj4g KyAqIENhbGxlciBtdXN0IGhvbGQgdGhlIHN0cnVjdF9tdXRleC4KPiArICoKPiArICogUHJvY2Vk dXJlIGlzIGZhaXJseSBzaW1wbGU6Cj4gKyAqICAgLSByZXNldCB0aGUgY2hpcCB1c2luZyB0aGUg cmVzZXQgcmVnCj4gKyAqICAgLSByZS1pbml0IGNvbnRleHQgc3RhdGUKPiArICogICAtIHJlLWlu aXQgaGFyZHdhcmUgc3RhdHVzIHBhZ2UKPiArICogICAtIHJlLWluaXQgcmluZyBidWZmZXIKPiAr ICogICAtIHJlLWluaXQgaW50ZXJydXB0IHN0YXRlCj4gKyAqICAgLSByZS1pbml0IGRpc3BsYXkK PiArICovCj4gK3ZvaWQgaTkxNV9yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwK PiArCQl1bnNpZ25lZCBpbnQgc3RhbGxlZF9tYXNrLAo+ICsJCWNvbnN0IGNoYXIgKnJlYXNvbikK PiArewo+ICsJc3RydWN0IGk5MTVfZ3B1X2Vycm9yICplcnJvciA9ICZpOTE1LT5ncHVfZXJyb3I7 Cj4gKwlpbnQgcmV0Owo+ICsJaW50IGk7Cj4gKwo+ICsJR0VNX1RSQUNFKCJmbGFncz0lbHhcbiIs IGVycm9yLT5mbGFncyk7Cj4gKwo+ICsJbWlnaHRfc2xlZXAoKTsKPiArCWxvY2tkZXBfYXNzZXJ0 X2hlbGQoJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJYXNzZXJ0X3JwbV93YWtlbG9ja19o ZWxkKGk5MTUpOwo+ICsJR0VNX0JVR19PTighdGVzdF9iaXQoSTkxNV9SRVNFVF9CQUNLT0ZGLCAm ZXJyb3ItPmZsYWdzKSk7Cj4gKwo+ICsJaWYgKCF0ZXN0X2JpdChJOTE1X1JFU0VUX0hBTkRPRkYs ICZlcnJvci0+ZmxhZ3MpKQo+ICsJCXJldHVybjsKPiArCj4gKwkvKiBDbGVhciBhbnkgcHJldmlv dXMgZmFpbGVkIGF0dGVtcHRzIGF0IHJlY292ZXJ5LiBUaW1lIHRvIHRyeSBhZ2Fpbi4gKi8KPiAr CWlmICghaTkxNV9nZW1fdW5zZXRfd2VkZ2VkKGk5MTUpKQo+ICsJCWdvdG8gd2FrZXVwOwo+ICsK PiArCWlmIChyZWFzb24pCj4gKwkJZGV2X25vdGljZShpOTE1LT5kcm0uZGV2LCAiUmVzZXR0aW5n IGNoaXAgZm9yICVzXG4iLCByZWFzb24pOwo+ICsJZXJyb3ItPnJlc2V0X2NvdW50Kys7Cj4gKwo+ ICsJcmV0ID0gcmVzZXRfcHJlcGFyZShpOTE1KTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJy KGk5MTUtPmRybS5kZXYsICJHUFUgcmVjb3ZlcnkgZmFpbGVkXG4iKTsKPiArCQlnb3RvIHRhaW50 Owo+ICsJfQo+ICsKPiArCWlmICghaW50ZWxfaGFzX2dwdV9yZXNldChpOTE1KSkgewo+ICsJCWlm IChpOTE1X21vZHBhcmFtcy5yZXNldCkKPiArCQkJZGV2X2VycihpOTE1LT5kcm0uZGV2LCAiR1BV IHJlc2V0IG5vdCBzdXBwb3J0ZWRcbiIpOwo+ICsJCWVsc2UKPiArCQkJRFJNX0RFQlVHX0RSSVZF UigiR1BVIHJlc2V0IGRpc2FibGVkXG4iKTsKPiArCQlnb3RvIGVycm9yOwo+ICsJfQo+ICsKPiAr CWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKPiArCQlyZXQgPSBpbnRlbF9ncHVfcmVzZXQoaTkx NSwgQUxMX0VOR0lORVMpOwo+ICsJCWlmIChyZXQgPT0gMCkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJ CW1zbGVlcCgxMDApOwo+ICsJfQo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoaTkxNS0+ZHJt LmRldiwgIkZhaWxlZCB0byByZXNldCBjaGlwXG4iKTsKPiArCQlnb3RvIHRhaW50Owo+ICsJfQo+ ICsKPiArCS8qIE9rLCBub3cgZ2V0IHRoaW5ncyBnb2luZyBhZ2Fpbi4uLiAqLwo+ICsKPiArCS8q Cj4gKwkgKiBFdmVyeXRoaW5nIGRlcGVuZHMgb24gaGF2aW5nIHRoZSBHVFQgcnVubmluZywgc28g d2UgbmVlZCB0byBzdGFydAo+ICsJICogdGhlcmUuCj4gKwkgKi8KPiArCXJldCA9IGk5MTVfZ2d0 dF9lbmFibGVfaHcoaTkxNSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQg dG8gcmUtZW5hYmxlIEdHVFQgZm9sbG93aW5nIHJlc2V0ICglZClcbiIsCj4gKwkJCSAgcmV0KTsK PiArCQlnb3RvIGVycm9yOwo+ICsJfQo+ICsKPiArCWd0X3Jlc2V0KGk5MTUsIHN0YWxsZWRfbWFz ayk7Cj4gKwlpbnRlbF9vdmVybGF5X3Jlc2V0KGk5MTUpOwo+ICsKPiArCS8qCj4gKwkgKiBOZXh0 IHdlIG5lZWQgdG8gcmVzdG9yZSB0aGUgY29udGV4dCwgYnV0IHdlIGRvbid0IHVzZSB0aG9zZQo+ ICsJICogeWV0IGVpdGhlci4uLgo+ICsJICoKPiArCSAqIFJpbmcgYnVmZmVyIG5lZWRzIHRvIGJl IHJlLWluaXRpYWxpemVkIGluIHRoZSBLTVMgY2FzZSwgb3IgaWYgWAo+ICsJICogd2FzIHJ1bm5p bmcgYXQgdGhlIHRpbWUgb2YgdGhlIHJlc2V0IChpLmUuIHdlIHdlcmVuJ3QgVlQKPiArCSAqIHN3 aXRjaGVkIGF3YXkpLgo+ICsJICovCj4gKwlyZXQgPSBpOTE1X2dlbV9pbml0X2h3KGk5MTUpOwo+ ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpc2UgSFcgZm9s bG93aW5nIHJlc2V0ICglZClcbiIsCj4gKwkJCSAgcmV0KTsKPiArCQlnb3RvIGVycm9yOwo+ICsJ fQo+ICsKPiArCWk5MTVfcXVldWVfaGFuZ2NoZWNrKGk5MTUpOwo+ICsKPiArZmluaXNoOgo+ICsJ cmVzZXRfZmluaXNoKGk5MTUpOwo+ICt3YWtldXA6Cj4gKwljbGVhcl9iaXQoSTkxNV9SRVNFVF9I QU5ET0ZGLCAmZXJyb3ItPmZsYWdzKTsKPiArCXdha2VfdXBfYml0KCZlcnJvci0+ZmxhZ3MsIEk5 MTVfUkVTRVRfSEFORE9GRik7Cj4gKwlyZXR1cm47Cj4gKwo+ICt0YWludDoKPiArCS8qCj4gKwkg KiBIaXN0b3J5IHRlbGxzIHVzIHRoYXQgaWYgd2UgY2Fubm90IHJlc2V0IHRoZSBHUFUgbm93LCB3 ZQo+ICsJICogbmV2ZXIgd2lsbC4gVGhpcyB0aGVuIGltcGFjdHMgZXZlcnl0aGluZyB0aGF0IGlz IHJ1bgo+ICsJICogc3Vic2VxdWVudGx5LiBPbiBmYWlsaW5nIHRoZSByZXNldCwgd2UgbWFyayB0 aGUgZHJpdmVyCj4gKwkgKiBhcyB3ZWRnZWQsIHByZXZlbnRpbmcgZnVydGhlciBleGVjdXRpb24g b24gdGhlIEdQVS4KPiArCSAqIFdlIGFsc28gd2FudCB0byBnbyBvbmUgc3RlcCBmdXJ0aGVyIGFu ZCBhZGQgYSB0YWludCB0byB0aGUKPiArCSAqIGtlcm5lbCBzbyB0aGF0IGFueSBzdWJzZXF1ZW50 IGZhdWx0cyBjYW4gYmUgdHJhY2VkIGJhY2sgdG8KPiArCSAqIHRoaXMgZmFpbHVyZS4gVGhpcyBp cyBpbXBvcnRhbnQgZm9yIENJLCB3aGVyZSBpZiB0aGUKPiArCSAqIEdQVS9kcml2ZXIgZmFpbHMg d2Ugd291bGQgbGlrZSB0byByZWJvb3QgYW5kIHJlc3RhcnQgdGVzdGluZwo+ICsJICogcmF0aGVy IHRoYW4gY29udGludWUgb24gaW50byBvYmxpdmlvbi4gRm9yIGV2ZXJ5b25lIGVsc2UsCj4gKwkg KiB0aGUgc3lzdGVtIHNob3VsZCBzdGlsbCBwbG9kIGFsb25nLCBidXQgdGhleSBoYXZlIGJlZW4g d2FybmVkIQo+ICsJICovCj4gKwlhZGRfdGFpbnQoVEFJTlRfV0FSTiwgTE9DS0RFUF9TVElMTF9P Syk7Cj4gK2Vycm9yOgo+ICsJaTkxNV9nZW1fc2V0X3dlZGdlZChpOTE1KTsKPiArCWk5MTVfcmV0 aXJlX3JlcXVlc3RzKGk5MTUpOwo+ICsJZ290byBmaW5pc2g7Cj4gK30KPiArCj4gK3N0YXRpYyBp bmxpbmUgaW50IGludGVsX2d0X3Jlc2V0X2VuZ2luZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSwKPiArCQkJCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArCXJl dHVybiBpbnRlbF9ncHVfcmVzZXQoaTkxNSwgaW50ZWxfZW5naW5lX2ZsYWcoZW5naW5lKSk7Cj4g K30KPiArCj4gKy8qKgo+ICsgKiBpOTE1X3Jlc2V0X2VuZ2luZSAtIHJlc2V0IEdQVSBlbmdpbmUg dG8gcmVjb3ZlciBmcm9tIGEgaGFuZwo+ICsgKiBAZW5naW5lOiBlbmdpbmUgdG8gcmVzZXQKPiAr ICogQG1zZzogcmVhc29uIGZvciBHUFUgcmVzZXQ7IG9yIE5VTEwgZm9yIG5vIGRldl9ub3RpY2Uo KQo+ICsgKgo+ICsgKiBSZXNldCBhIHNwZWNpZmljIEdQVSBlbmdpbmUuIFVzZWZ1bCBpZiBhIGhh bmcgaXMgZGV0ZWN0ZWQuCj4gKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzZnVsIHJlc2V0IG9y IG90aGVyd2lzZSBhbiBlcnJvciBjb2RlLgo+ICsgKgo+ICsgKiBQcm9jZWR1cmUgaXM6Cj4gKyAq ICAtIGlkZW50aWZpZXMgdGhlIHJlcXVlc3QgdGhhdCBjYXVzZWQgdGhlIGhhbmcgYW5kIGl0IGlz IGRyb3BwZWQKPiArICogIC0gcmVzZXQgZW5naW5lICh3aGljaCB3aWxsIGZvcmNlIHRoZSBlbmdp bmUgdG8gaWRsZSkKPiArICogIC0gcmUtaW5pdC9jb25maWd1cmUgZW5naW5lCj4gKyAqLwo+ICtp bnQgaTkxNV9yZXNldF9lbmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBjb25z dCBjaGFyICptc2cpCj4gK3sKPiArCXN0cnVjdCBpOTE1X2dwdV9lcnJvciAqZXJyb3IgPSAmZW5n aW5lLT5pOTE1LT5ncHVfZXJyb3I7Cj4gKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICphY3RpdmVfcmVx dWVzdDsKPiArCWludCByZXQ7Cj4gKwo+ICsJR0VNX1RSQUNFKCIlcyBmbGFncz0lbHhcbiIsIGVu Z2luZS0+bmFtZSwgZXJyb3ItPmZsYWdzKTsKPiArCUdFTV9CVUdfT04oIXRlc3RfYml0KEk5MTVf UkVTRVRfRU5HSU5FICsgZW5naW5lLT5pZCwgJmVycm9yLT5mbGFncykpOwo+ICsKPiArCWFjdGl2 ZV9yZXF1ZXN0ID0gcmVzZXRfcHJlcGFyZV9lbmdpbmUoZW5naW5lKTsKPiArCWlmIChJU19FUlJf T1JfTlVMTChhY3RpdmVfcmVxdWVzdCkpIHsKPiArCQkvKiBFaXRoZXIgdGhlIHByZXZpb3VzIHJl c2V0IGZhaWxlZCwgb3Igd2UgcGFyZG9uIHRoZSByZXNldC4gKi8KPiArCQlyZXQgPSBQVFJfRVJS KGFjdGl2ZV9yZXF1ZXN0KTsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwlpZiAobXNnKQo+ ICsJCWRldl9ub3RpY2UoZW5naW5lLT5pOTE1LT5kcm0uZGV2LAo+ICsJCQkgICAiUmVzZXR0aW5n ICVzIGZvciAlc1xuIiwgZW5naW5lLT5uYW1lLCBtc2cpOwo+ICsJZXJyb3ItPnJlc2V0X2VuZ2lu ZV9jb3VudFtlbmdpbmUtPmlkXSsrOwo+ICsKPiArCWlmICghZW5naW5lLT5pOTE1LT5ndWMuZXhl Y2J1Zl9jbGllbnQpCj4gKwkJcmV0ID0gaW50ZWxfZ3RfcmVzZXRfZW5naW5lKGVuZ2luZS0+aTkx NSwgZW5naW5lKTsKPiArCWVsc2UKPiArCQlyZXQgPSBpbnRlbF9ndWNfcmVzZXRfZW5naW5lKCZl bmdpbmUtPmk5MTUtPmd1YywgZW5naW5lKTsKPiArCWlmIChyZXQpIHsKPiArCQkvKiBJZiB3ZSBm YWlsIGhlcmUsIHdlIGV4cGVjdCB0byBmYWxsYmFjayB0byBhIGdsb2JhbCByZXNldCAqLwo+ICsJ CURSTV9ERUJVR19EUklWRVIoIiVzRmFpbGVkIHRvIHJlc2V0ICVzLCByZXQ9JWRcbiIsCj4gKwkJ CQkgZW5naW5lLT5pOTE1LT5ndWMuZXhlY2J1Zl9jbGllbnQgPyAiR3VDICIgOiAiIiwKPiArCQkJ CSBlbmdpbmUtPm5hbWUsIHJldCk7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJLyoKPiAr CSAqIFRoZSByZXF1ZXN0IHRoYXQgY2F1c2VkIHRoZSBoYW5nIGlzIHN0dWNrIG9uIGVsc3AsIHdl IGtub3cgdGhlCj4gKwkgKiBhY3RpdmUgcmVxdWVzdCBhbmQgY2FuIGRyb3AgaXQsIGFkanVzdCBo ZWFkIHRvIHNraXAgdGhlIG9mZmVuZGluZwo+ICsJICogcmVxdWVzdCB0byByZXN1bWUgZXhlY3V0 aW5nIHJlbWFpbmluZyByZXF1ZXN0cyBpbiB0aGUgcXVldWUuCj4gKwkgKi8KPiArCXJlc2V0X2Vu Z2luZShlbmdpbmUsIGFjdGl2ZV9yZXF1ZXN0LCB0cnVlKTsKPiArCj4gKwkvKgo+ICsJICogVGhl IGVuZ2luZSBhbmQgaXRzIHJlZ2lzdGVycyAoYW5kIHdvcmthcm91bmRzIGluIGNhc2Ugb2YgcmVu ZGVyKQo+ICsJICogaGF2ZSBiZWVuIHJlc2V0IHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLiBGb2xs b3cgdGhlIGluaXRfcmluZwo+ICsJICogcHJvY2VzcyB0byBwcm9ncmFtIFJJTkdfTU9ERSwgSFdT UCBhbmQgcmUtZW5hYmxlIHN1Ym1pc3Npb24uCj4gKwkgKi8KPiArCXJldCA9IGVuZ2luZS0+aW5p dF9odyhlbmdpbmUpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIG91dDsKPiArCj4gK291dDoKPiAr CWludGVsX2VuZ2luZV9jYW5jZWxfc3RvcF9jcyhlbmdpbmUpOwo+ICsJcmVzZXRfZmluaXNoX2Vu Z2luZShlbmdpbmUpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaTkx NV9yZXNldF9kZXZpY2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gKwkJCSAgICAg IHUzMiBlbmdpbmVfbWFzaywKPiArCQkJICAgICAgY29uc3QgY2hhciAqcmVhc29uKQo+ICt7Cj4g KwlzdHJ1Y3QgaTkxNV9ncHVfZXJyb3IgKmVycm9yID0gJmk5MTUtPmdwdV9lcnJvcjsKPiArCXN0 cnVjdCBrb2JqZWN0ICprb2JqID0gJmk5MTUtPmRybS5wcmltYXJ5LT5rZGV2LT5rb2JqOwo+ICsJ Y2hhciAqZXJyb3JfZXZlbnRbXSA9IHsgSTkxNV9FUlJPUl9VRVZFTlQgIj0xIiwgTlVMTCB9Owo+ ICsJY2hhciAqcmVzZXRfZXZlbnRbXSA9IHsgSTkxNV9SRVNFVF9VRVZFTlQgIj0xIiwgTlVMTCB9 Owo+ICsJY2hhciAqcmVzZXRfZG9uZV9ldmVudFtdID0geyBJOTE1X0VSUk9SX1VFVkVOVCAiPTAi LCBOVUxMIH07Cj4gKwlzdHJ1Y3QgaTkxNV93ZWRnZV9tZSB3Owo+ICsKPiArCWtvYmplY3RfdWV2 ZW50X2Vudihrb2JqLCBLT0JKX0NIQU5HRSwgZXJyb3JfZXZlbnQpOwo+ICsKPiArCURSTV9ERUJV R19EUklWRVIoInJlc2V0dGluZyBjaGlwXG4iKTsKPiArCWtvYmplY3RfdWV2ZW50X2Vudihrb2Jq LCBLT0JKX0NIQU5HRSwgcmVzZXRfZXZlbnQpOwo+ICsKPiArCS8qIFVzZSBhIHdhdGNoZG9nIHRv IGVuc3VyZSB0aGF0IG91ciByZXNldCBjb21wbGV0ZXMgKi8KPiArCWk5MTVfd2VkZ2Vfb25fdGlt ZW91dCgmdywgaTkxNSwgNSAqIEhaKSB7Cj4gKwkJaW50ZWxfcHJlcGFyZV9yZXNldChpOTE1KTsK PiArCj4gKwkJZXJyb3ItPnJlYXNvbiA9IHJlYXNvbjsKPiArCQllcnJvci0+c3RhbGxlZF9tYXNr ID0gZW5naW5lX21hc2s7Cj4gKwo+ICsJCS8qIFNpZ25hbCB0aGF0IGxvY2tlZCB3YWl0ZXJzIHNo b3VsZCByZXNldCB0aGUgR1BVICovCj4gKwkJc21wX21iX19iZWZvcmVfYXRvbWljKCk7Cj4gKwkJ c2V0X2JpdChJOTE1X1JFU0VUX0hBTkRPRkYsICZlcnJvci0+ZmxhZ3MpOwo+ICsJCXdha2VfdXBf YWxsKCZlcnJvci0+d2FpdF9xdWV1ZSk7Cj4gKwo+ICsJCS8qCj4gKwkJICogV2FpdCBmb3IgYW55 b25lIGhvbGRpbmcgdGhlIGxvY2sgdG8gd2FrZXVwLCB3aXRob3V0Cj4gKwkJICogYmxvY2tpbmcg aW5kZWZpbml0ZWx5IG9uIHN0cnVjdF9tdXRleC4KPiArCQkgKi8KPiArCQlkbyB7Cj4gKwkJCWlm IChtdXRleF90cnlsb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KSkgewo+ICsJCQkJaTkxNV9y ZXNldChpOTE1LCBlbmdpbmVfbWFzaywgcmVhc29uKTsKPiArCQkJCW11dGV4X3VubG9jaygmaTkx NS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwkJCX0KPiArCQl9IHdoaWxlICh3YWl0X29uX2JpdF90 aW1lb3V0KCZlcnJvci0+ZmxhZ3MsCj4gKwkJCQkJICAgICBJOTE1X1JFU0VUX0hBTkRPRkYsCj4g KwkJCQkJICAgICBUQVNLX1VOSU5URVJSVVBUSUJMRSwKPiArCQkJCQkgICAgIDEpKTsKPiArCj4g KwkJZXJyb3ItPnN0YWxsZWRfbWFzayA9IDA7Cj4gKwkJZXJyb3ItPnJlYXNvbiA9IE5VTEw7Cj4g Kwo+ICsJCWludGVsX2ZpbmlzaF9yZXNldChpOTE1KTsKPiArCX0KPiArCj4gKwlpZiAoIXRlc3Rf Yml0KEk5MTVfV0VER0VELCAmZXJyb3ItPmZsYWdzKSkKPiArCQlrb2JqZWN0X3VldmVudF9lbnYo a29iaiwgS09CSl9DSEFOR0UsIHJlc2V0X2RvbmVfZXZlbnQpOwo+ICt9Cj4gKwo+ICt2b2lkIGk5 MTVfY2xlYXJfZXJyb3JfcmVnaXN0ZXJzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKPiArewo+ICsJdTMyIGVpcjsKPiArCj4gKwlpZiAoIUlTX0dFTihkZXZfcHJpdiwgMikpCj4g KwkJSTkxNV9XUklURShQR1RCTF9FUiwgSTkxNV9SRUFEKFBHVEJMX0VSKSk7Cj4gKwo+ICsJaWYg KElOVEVMX0dFTihkZXZfcHJpdikgPCA0KQo+ICsJCUk5MTVfV1JJVEUoSVBFSVIsIEk5MTVfUkVB RChJUEVJUikpOwo+ICsJZWxzZQo+ICsJCUk5MTVfV1JJVEUoSVBFSVJfSTk2NSwgSTkxNV9SRUFE KElQRUlSX0k5NjUpKTsKPiArCj4gKwlJOTE1X1dSSVRFKEVJUiwgSTkxNV9SRUFEKEVJUikpOwo+ ICsJZWlyID0gSTkxNV9SRUFEKEVJUik7Cj4gKwlpZiAoZWlyKSB7Cj4gKwkJLyoKPiArCQkgKiBz b21lIGVycm9ycyBtaWdodCBoYXZlIGJlY29tZSBzdHVjaywKPiArCQkgKiBtYXNrIHRoZW0uCj4g KwkJICovCj4gKwkJRFJNX0RFQlVHX0RSSVZFUigiRUlSIHN0dWNrOiAweCUwOHgsIG1hc2tpbmdc biIsIGVpcik7Cj4gKwkJSTkxNV9XUklURShFTVIsIEk5MTVfUkVBRChFTVIpIHwgZWlyKTsKPiAr CQlJOTE1X1dSSVRFKElJUiwgSTkxNV9NQVNURVJfRVJST1JfSU5URVJSVVBUKTsKPiArCX0KPiAr Cj4gKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA4KSB7Cj4gKwkJSTkxNV9XUklURShHRU44 X1JJTkdfRkFVTFRfUkVHLAo+ICsJCQkgICBJOTE1X1JFQUQoR0VOOF9SSU5HX0ZBVUxUX1JFRykg JiB+UklOR19GQVVMVF9WQUxJRCk7Cj4gKwkJUE9TVElOR19SRUFEKEdFTjhfUklOR19GQVVMVF9S RUcpOwo+ICsJfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDYpIHsKPiArCQlzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gKwkJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7 Cj4gKwo+ICsJCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpZCkgewo+ICsJCQlJ OTE1X1dSSVRFKFJJTkdfRkFVTFRfUkVHKGVuZ2luZSksCj4gKwkJCQkgICBJOTE1X1JFQUQoUklO R19GQVVMVF9SRUcoZW5naW5lKSkgJgo+ICsJCQkJICAgflJJTkdfRkFVTFRfVkFMSUQpOwo+ICsJ CX0KPiArCQlQT1NUSU5HX1JFQUQoUklOR19GQVVMVF9SRUcoZGV2X3ByaXYtPmVuZ2luZVtSQ1Nd KSk7Cj4gKwl9Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpOTE1X2hhbmRsZV9lcnJvciAtIGhhbmRs ZSBhIGdwdSBlcnJvcgo+ICsgKiBAaTkxNTogaTkxNSBkZXZpY2UgcHJpdmF0ZQo+ICsgKiBAZW5n aW5lX21hc2s6IG1hc2sgcmVwcmVzZW50aW5nIGVuZ2luZXMgdGhhdCBhcmUgaHVuZwo+ICsgKiBA ZmxhZ3M6IGNvbnRyb2wgZmxhZ3MKPiArICogQGZtdDogRXJyb3IgbWVzc2FnZSBmb3JtYXQgc3Ry aW5nCj4gKyAqCj4gKyAqIERvIHNvbWUgYmFzaWMgY2hlY2tpbmcgb2YgcmVnaXN0ZXIgc3RhdGUg YXQgZXJyb3IgdGltZSBhbmQKPiArICogZHVtcCBpdCB0byB0aGUgc3lzbG9nLiAgQWxzbyBjYWxs IGk5MTVfY2FwdHVyZV9lcnJvcl9zdGF0ZSgpIHRvIG1ha2UKPiArICogc3VyZSB3ZSBnZXQgYSBy ZWNvcmQgYW5kIG1ha2UgaXQgYXZhaWxhYmxlIGluIGRlYnVnZnMuICBGaXJlIGEgdWV2ZW50Cj4g KyAqIHNvIHVzZXJzcGFjZSBrbm93cyBzb21ldGhpbmcgYmFkIGhhcHBlbmVkIChzaG91bGQgdHJp Z2dlciBjb2xsZWN0aW9uCj4gKyAqIG9mIGEgcmluZyBkdW1wIGV0Yy4pLgo+ICsgKi8KPiArdm9p ZCBpOTE1X2hhbmRsZV9lcnJvcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiArCQkg ICAgICAgdTMyIGVuZ2luZV9tYXNrLAo+ICsJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLAo+ ICsJCSAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKPiArewo+ICsJc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lOwo+ICsJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gKwl1bnNpZ25l ZCBpbnQgdG1wOwo+ICsJY2hhciBlcnJvcl9tc2dbODBdOwo+ICsJY2hhciAqbXNnID0gTlVMTDsK PiArCj4gKwlpZiAoZm10KSB7Cj4gKwkJdmFfbGlzdCBhcmdzOwo+ICsKPiArCQl2YV9zdGFydChh cmdzLCBmbXQpOwo+ICsJCXZzY25wcmludGYoZXJyb3JfbXNnLCBzaXplb2YoZXJyb3JfbXNnKSwg Zm10LCBhcmdzKTsKPiArCQl2YV9lbmQoYXJncyk7Cj4gKwo+ICsJCW1zZyA9IGVycm9yX21zZzsK PiArCX0KPiArCj4gKwkvKgo+ICsJICogSW4gbW9zdCBjYXNlcyBpdCdzIGd1YXJhbnRlZWQgdGhh dCB3ZSBnZXQgaGVyZSB3aXRoIGFuIFJQTQo+ICsJICogcmVmZXJlbmNlIGhlbGQsIGZvciBleGFt cGxlIGJlY2F1c2UgdGhlcmUgaXMgYSBwZW5kaW5nIEdQVQo+ICsJICogcmVxdWVzdCB0aGF0IHdv bid0IGZpbmlzaCB1bnRpbCB0aGUgcmVzZXQgaXMgZG9uZS4gVGhpcwo+ICsJICogaXNuJ3QgdGhl IGNhc2UgYXQgbGVhc3Qgd2hlbiB3ZSBnZXQgaGVyZSBieSBkb2luZyBhCj4gKwkgKiBzaW11bGF0 ZWQgcmVzZXQgdmlhIGRlYnVnZnMsIHNvIGdldCBhbiBSUE0gcmVmZXJlbmNlLgo+ICsJICovCj4g Kwl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7Cj4gKwo+ICsJZW5naW5lX21h c2sgJj0gSU5URUxfSU5GTyhpOTE1KS0+cmluZ19tYXNrOwo+ICsKPiArCWlmIChmbGFncyAmIEk5 MTVfRVJST1JfQ0FQVFVSRSkgewo+ICsJCWk5MTVfY2FwdHVyZV9lcnJvcl9zdGF0ZShpOTE1LCBl bmdpbmVfbWFzaywgbXNnKTsKPiArCQlpOTE1X2NsZWFyX2Vycm9yX3JlZ2lzdGVycyhpOTE1KTsK PiArCX0KPiArCj4gKwkvKgo+ICsJICogVHJ5IGVuZ2luZSByZXNldCB3aGVuIGF2YWlsYWJsZS4g V2UgZmFsbCBiYWNrIHRvIGZ1bGwgcmVzZXQgaWYKPiArCSAqIHNpbmdsZSByZXNldCBmYWlscy4K PiArCSAqLwo+ICsJaWYgKGludGVsX2hhc19yZXNldF9lbmdpbmUoaTkxNSkgJiYKPiArCSAgICAh aTkxNV90ZXJtaW5hbGx5X3dlZGdlZCgmaTkxNS0+Z3B1X2Vycm9yKSkgewo+ICsJCWZvcl9lYWNo X2VuZ2luZV9tYXNrZWQoZW5naW5lLCBpOTE1LCBlbmdpbmVfbWFzaywgdG1wKSB7Cj4gKwkJCUJV SUxEX0JVR19PTihJOTE1X1JFU0VUX01PREVTRVQgPj0gSTkxNV9SRVNFVF9FTkdJTkUpOwo+ICsJ CQlpZiAodGVzdF9hbmRfc2V0X2JpdChJOTE1X1JFU0VUX0VOR0lORSArIGVuZ2luZS0+aWQsCj4g KwkJCQkJICAgICAmaTkxNS0+Z3B1X2Vycm9yLmZsYWdzKSkKPiArCQkJCWNvbnRpbnVlOwo+ICsK PiArCQkJaWYgKGk5MTVfcmVzZXRfZW5naW5lKGVuZ2luZSwgbXNnKSA9PSAwKQo+ICsJCQkJZW5n aW5lX21hc2sgJj0gfmludGVsX2VuZ2luZV9mbGFnKGVuZ2luZSk7Cj4gKwo+ICsJCQljbGVhcl9i aXQoSTkxNV9SRVNFVF9FTkdJTkUgKyBlbmdpbmUtPmlkLAo+ICsJCQkJICAmaTkxNS0+Z3B1X2Vy cm9yLmZsYWdzKTsKPiArCQkJd2FrZV91cF9iaXQoJmk5MTUtPmdwdV9lcnJvci5mbGFncywKPiAr CQkJCSAgICBJOTE1X1JFU0VUX0VOR0lORSArIGVuZ2luZS0+aWQpOwo+ICsJCX0KPiArCX0KPiAr Cj4gKwlpZiAoIWVuZ2luZV9tYXNrKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCS8qIEZ1bGwgcmVz ZXQgbmVlZHMgdGhlIG11dGV4LCBzdG9wIGFueSBvdGhlciB1c2VyIHRyeWluZyB0byBkbyBzby4g Ki8KPiArCWlmICh0ZXN0X2FuZF9zZXRfYml0KEk5MTVfUkVTRVRfQkFDS09GRiwgJmk5MTUtPmdw dV9lcnJvci5mbGFncykpIHsKPiArCQl3YWl0X2V2ZW50KGk5MTUtPmdwdV9lcnJvci5yZXNldF9x dWV1ZSwKPiArCQkJICAgIXRlc3RfYml0KEk5MTVfUkVTRVRfQkFDS09GRiwKPiArCQkJCSAgICAg Jmk5MTUtPmdwdV9lcnJvci5mbGFncykpOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCS8q IFByZXZlbnQgYW55IG90aGVyIHJlc2V0LWVuZ2luZSBhdHRlbXB0LiAqLwo+ICsJZm9yX2VhY2hf ZW5naW5lKGVuZ2luZSwgaTkxNSwgdG1wKSB7Cj4gKwkJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQo STkxNV9SRVNFVF9FTkdJTkUgKyBlbmdpbmUtPmlkLAo+ICsJCQkJCSZpOTE1LT5ncHVfZXJyb3Iu ZmxhZ3MpKQo+ICsJCQl3YWl0X29uX2JpdCgmaTkxNS0+Z3B1X2Vycm9yLmZsYWdzLAo+ICsJCQkJ ICAgIEk5MTVfUkVTRVRfRU5HSU5FICsgZW5naW5lLT5pZCwKPiArCQkJCSAgICBUQVNLX1VOSU5U RVJSVVBUSUJMRSk7Cj4gKwl9Cj4gKwo+ICsJaTkxNV9yZXNldF9kZXZpY2UoaTkxNSwgZW5naW5l X21hc2ssIG1zZyk7Cj4gKwo+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkxNSwgdG1wKSB7 Cj4gKwkJY2xlYXJfYml0KEk5MTVfUkVTRVRfRU5HSU5FICsgZW5naW5lLT5pZCwKPiArCQkJICAm aTkxNS0+Z3B1X2Vycm9yLmZsYWdzKTsKPiArCX0KPiArCj4gKwljbGVhcl9iaXQoSTkxNV9SRVNF VF9CQUNLT0ZGLCAmaTkxNS0+Z3B1X2Vycm9yLmZsYWdzKTsKPiArCXdha2VfdXBfYWxsKCZpOTE1 LT5ncHVfZXJyb3IucmVzZXRfcXVldWUpOwo+ICsKPiArb3V0Ogo+ICsJaW50ZWxfcnVudGltZV9w bV9wdXQoaTkxNSwgd2FrZXJlZik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGk5MTVfd2VkZ2Vf bWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV93ZWRnZV9t ZSAqdyA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKncpLCB3b3JrLndvcmspOwo+ICsKPiAr CWRldl9lcnIody0+aTkxNS0+ZHJtLmRldiwKPiArCQkiJXMgdGltZWQgb3V0LCBjYW5jZWxsaW5n IGFsbCBpbi1mbGlnaHQgcmVuZGVyaW5nLlxuIiwKPiArCQl3LT5uYW1lKTsKPiArCWk5MTVfZ2Vt X3NldF93ZWRnZWQody0+aTkxNSk7Cj4gK30KPiArCj4gK3ZvaWQgX19pOTE1X2luaXRfd2VkZ2Uo c3RydWN0IGk5MTVfd2VkZ2VfbWUgKncsCj4gKwkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1LAo+ICsJCSAgICAgICBsb25nIHRpbWVvdXQsCj4gKwkJICAgICAgIGNvbnN0IGNo YXIgKm5hbWUpCj4gK3sKPiArCXctPmk5MTUgPSBpOTE1Owo+ICsJdy0+bmFtZSA9IG5hbWU7Cj4g Kwo+ICsJSU5JVF9ERUxBWUVEX1dPUktfT05TVEFDSygmdy0+d29yaywgaTkxNV93ZWRnZV9tZSk7 Cj4gKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnctPndvcmssIHRpbWVvdXQpOwo+ICt9Cj4gKwo+ ICt2b2lkIF9faTkxNV9maW5pX3dlZGdlKHN0cnVjdCBpOTE1X3dlZGdlX21lICp3KQo+ICt7Cj4g KwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnctPndvcmspOwo+ICsJZGVzdHJveV9kZWxheWVk X3dvcmtfb25fc3RhY2soJnctPndvcmspOwo+ICsJdy0+aTkxNSA9IE5VTEw7Cj4gK30KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXNldC5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9yZXNldC5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAw MDAwMDAwMDAuLmI2YTUxOWJkZTY3ZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3Jlc2V0LmgKPiBAQCAtMCwwICsxLDU2IEBACj4gKy8qCj4gKyAqIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKPiArICoKPiArICogQ29weXJpZ2h0IMKpIDIwMDgt MjAxOCBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgSTkxNV9SRVNFVF9I Cj4gKyNkZWZpbmUgSTkxNV9SRVNFVF9ICj4gKwo+ICsjaW5jbHVkZSA8bGludXgvY29tcGlsZXIu aD4KPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gKwo+ICtzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZTsKPiArc3RydWN0IGludGVsX2VuZ2luZV9jczsKPiArc3RydWN0IGludGVsX2d1YzsKPiAr Cj4gK19fcHJpbnRmKDQsIDUpCj4gK3ZvaWQgaTkxNV9oYW5kbGVfZXJyb3Ioc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUsCj4gKwkJICAgICAgIHUzMiBlbmdpbmVfbWFzaywKPiArCQkgICAg ICAgdW5zaWduZWQgbG9uZyBmbGFncywKPiArCQkgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4p Owo+ICsjZGVmaW5lIEk5MTVfRVJST1JfQ0FQVFVSRSBCSVQoMCkKPiArCj4gK3ZvaWQgaTkxNV9j bGVhcl9lcnJvcl9yZWdpc3RlcnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwo+ICsK PiArdm9pZCBpOTE1X3Jlc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICsJCXVu c2lnbmVkIGludCBzdGFsbGVkX21hc2ssCj4gKwkJY29uc3QgY2hhciAqcmVhc29uKTsKPiAraW50 IGk5MTVfcmVzZXRfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiArCQkg ICAgICBjb25zdCBjaGFyICpyZWFzb24pOwo+ICsKPiArYm9vbCBpbnRlbF9oYXNfZ3B1X3Jlc2V0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPiArYm9vbCBpbnRlbF9oYXNfcmVzZXRf ZW5naW5lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPiArCj4gK2ludCBpbnRlbF9n cHVfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHUzMiBlbmdpbmVfbWFzayk7 Cj4gKwo+ICtpbnQgaW50ZWxfcmVzZXRfZ3VjKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 KTsKPiArCj4gK3N0cnVjdCBpOTE1X3dlZGdlX21lIHsKPiArCXN0cnVjdCBkZWxheWVkX3dvcmsg d29yazsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1Owo+ICsJY29uc3QgY2hhciAq bmFtZTsKPiArfTsKPiArCj4gK3ZvaWQgX19pOTE1X2luaXRfd2VkZ2Uoc3RydWN0IGk5MTVfd2Vk Z2VfbWUgKncsCj4gKwkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICsJ CSAgICAgICBsb25nIHRpbWVvdXQsCj4gKwkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpOwo+ICt2 b2lkIF9faTkxNV9maW5pX3dlZGdlKHN0cnVjdCBpOTE1X3dlZGdlX21lICp3KTsKPiArCj4gKyNk ZWZpbmUgaTkxNV93ZWRnZV9vbl90aW1lb3V0KFcsIERFViwgVElNRU9VVCkJCQkJXAo+ICsJZm9y IChfX2k5MTVfaW5pdF93ZWRnZSgoVyksIChERVYpLCAoVElNRU9VVCksIF9fZnVuY19fKTsJXAo+ ICsJICAgICAoVyktPmk5MTU7CQkJCQkJCVwKPiArCSAgICAgX19pOTE1X2Zpbmlfd2VkZ2UoKFcp KSkKPiArCj4gKyNlbmRpZiAvKiBJOTE1X1JFU0VUX0ggKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZGlzcGxheS5jCj4gaW5kZXggNjRkYmQwNmY0ZmZiLi5mYmUzYzNhM2I2NzUgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gQEAgLTMxLDEzICszMSw3IEBACj4gICNp bmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gICNpbmNsdWRlIDxsaW51eC92Z2FhcmIuaD4KPiAgI2lu Y2x1ZGUgPGRybS9kcm1fZWRpZC5oPgo+IC0jaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCj4gLSNpbmNs dWRlICJpbnRlbF9mcm9udGJ1ZmZlci5oIgo+ICAjaW5jbHVkZSA8ZHJtL2k5MTVfZHJtLmg+Cj4g LSNpbmNsdWRlICJpOTE1X2Rydi5oIgo+IC0jaW5jbHVkZSAiaTkxNV9nZW1fY2xmbHVzaC5oIgo+ IC0jaW5jbHVkZSAiaW50ZWxfZHNpLmgiCj4gLSNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCj4gICNp bmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVs cGVyLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2RwX2hlbHBlci5oPgo+IEBAIC00OCw2ICs0Miwx NSBAQAo+ICAjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KPiAgI2luY2x1ZGUgPGxpbnV4 L3Jlc2VydmF0aW9uLmg+Cj4gIAo+ICsjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCj4gKyNpbmNsdWRl ICJpbnRlbF9kc2kuaCIKPiArI2luY2x1ZGUgImludGVsX2Zyb250YnVmZmVyLmgiCj4gKwo+ICsj aW5jbHVkZSAiaTkxNV9kcnYuaCIKPiArI2luY2x1ZGUgImk5MTVfZ2VtX2NsZmx1c2guaCIKPiAr I2luY2x1ZGUgImk5MTVfcmVzZXQuaCIKPiArI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKPiArCj4g IC8qIFByaW1hcnkgcGxhbmUgZm9ybWF0cyBmb3IgZ2VuIDw9IDMgKi8KPiAgc3RhdGljIGNvbnN0 IHVpbnQzMl90IGk4eHhfcHJpbWFyeV9mb3JtYXRzW10gPSB7Cj4gIAlEUk1fRk9STUFUX0M4LAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCj4gaW5kZXggYmY0ZGFlMjY0OWFi Li45Yzk0M2JiOTVjYjkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZW5naW5lX2NzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3Mu Ywo+IEBAIC0yNSw2ICsyNSw3IEBACj4gICNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+Cj4gIAo+ ICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiArI2luY2x1ZGUgImk5MTVfcmVzZXQuaCIKPiAgI2lu Y2x1ZGUgImludGVsX3JpbmdidWZmZXIuaCIKPiAgI2luY2x1ZGUgImludGVsX2xyYy5oIgo+ICAK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaAo+IGluZGV4IDBmMWM0ZjllYmZkOC4uNzQ0MjIwMjk2 NjUzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmgKPiBAQCAtMTkyLDQgKzE5Miw3IEBA IHN0YXRpYyBpbmxpbmUgdm9pZCBpbnRlbF9ndWNfZGlzYWJsZV9tc2coc3RydWN0IGludGVsX2d1 YyAqZ3VjLCB1MzIgbWFzaykKPiAgCXNwaW5fdW5sb2NrX2lycSgmZ3VjLT5pcnFfbG9jayk7Cj4g IH0KPiAgCj4gK2ludCBpbnRlbF9ndWNfcmVzZXRfZW5naW5lKHN0cnVjdCBpbnRlbF9ndWMgKmd1 YywKPiArCQkJICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiArCj4gICNlbmRp Zgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oYW5nY2hlY2suYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hhbmdjaGVjay5jCj4gaW5kZXggNTFlOWVmZWM1 MTE2Li43ZGMxMWZjYjEzZGUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfaGFuZ2NoZWNrLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oYW5nY2hl Y2suYwo+IEBAIC0yMyw2ICsyMyw3IEBACj4gICAqLwo+ICAKPiAgI2luY2x1ZGUgImk5MTVfZHJ2 LmgiCj4gKyNpbmNsdWRlICJpOTE1X3Jlc2V0LmgiCj4gIAo+ICBzdGF0aWMgYm9vbCBpbnN0ZG9u ZV91bmNoYW5nZWQodTMyIGN1cnJlbnRfaW5zdGRvbmUsIHUzMiAqb2xkX2luc3Rkb25lKQo+ICB7 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF91Yy5jCj4gaW5kZXggNzMxYjgyYWZlNjM2Li5lNzExZWIzMjY4 YmMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWMuYwo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjLmMKPiBAQCAtMjYsNiArMjYsNyBAQAo+ICAj aW5jbHVkZSAiaW50ZWxfZ3VjX3N1Ym1pc3Npb24uaCIKPiAgI2luY2x1ZGUgImludGVsX2d1Yy5o Igo+ICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiArI2luY2x1ZGUgImk5MTVfcmVzZXQuaCIKPiAg Cj4gIHN0YXRpYyB2b2lkIGd1Y19mcmVlX2xvYWRfZXJyX2xvZyhzdHJ1Y3QgaW50ZWxfZ3VjICpn dWMpOwo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3Jl LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91bmNvcmUuYwo+IGluZGV4IDY4MWVhNTMy NTg1ZS4uZTg4ZjAyNTJkNzdlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3VuY29yZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMK PiBAQCAtMTcxNSwzNzIgKzE3MTUsNiBAQCBpbnQgaTkxNV9yZWdfcmVhZF9pb2N0bChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAo+ICAJcmV0dXJuIHJldDsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQg Z2VuM19zdG9wX2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gLXsKPiAt CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKPiAtCWNv bnN0IHUzMiBiYXNlID0gZW5naW5lLT5tbWlvX2Jhc2U7Cj4gLQo+IC0JaWYgKGludGVsX2VuZ2lu ZV9zdG9wX2NzKGVuZ2luZSkpCj4gLQkJRFJNX0RFQlVHX0RSSVZFUigiJXM6IHRpbWVkIG91dCBv biBTVE9QX1JJTkdcbiIsIGVuZ2luZS0+bmFtZSk7Cj4gLQo+IC0JSTkxNV9XUklURV9GVyhSSU5H X0hFQUQoYmFzZSksIEk5MTVfUkVBRF9GVyhSSU5HX1RBSUwoYmFzZSkpKTsKPiAtCVBPU1RJTkdf UkVBRF9GVyhSSU5HX0hFQUQoYmFzZSkpOyAvKiBwYXJhbm9pYSAqLwo+IC0KPiAtCUk5MTVfV1JJ VEVfRlcoUklOR19IRUFEKGJhc2UpLCAwKTsKPiAtCUk5MTVfV1JJVEVfRlcoUklOR19UQUlMKGJh c2UpLCAwKTsKPiAtCVBPU1RJTkdfUkVBRF9GVyhSSU5HX1RBSUwoYmFzZSkpOwo+IC0KPiAtCS8q IFRoZSByaW5nIG11c3QgYmUgZW1wdHkgYmVmb3JlIGl0IGlzIGRpc2FibGVkICovCj4gLQlJOTE1 X1dSSVRFX0ZXKFJJTkdfQ1RMKGJhc2UpLCAwKTsKPiAtCj4gLQkvKiBDaGVjayBhY3RzIGFzIGEg cG9zdCAqLwo+IC0JaWYgKEk5MTVfUkVBRF9GVyhSSU5HX0hFQUQoYmFzZSkpICE9IDApCj4gLQkJ RFJNX0RFQlVHX0RSSVZFUigiJXM6IHJpbmcgaGVhZCBub3QgcGFya2VkXG4iLAo+IC0JCQkJIGVu Z2luZS0+bmFtZSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGk5MTVfc3RvcF9lbmdpbmVzKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJICAgICAgdW5zaWduZWQgaW50 IGVuZ2luZV9tYXNrKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4g LQllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPiAtCj4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA8IDMpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWZvcl9lYWNoX2VuZ2luZV9tYXNrZWQoZW5naW5l LCBkZXZfcHJpdiwgZW5naW5lX21hc2ssIGlkKQo+IC0JCWdlbjNfc3RvcF9lbmdpbmUoZW5naW5l KTsKPiAtfQo+IC0KPiAtc3RhdGljIGJvb2wgaTkxNV9pbl9yZXNldChzdHJ1Y3QgcGNpX2RldiAq cGRldikKPiAtewo+IC0JdTggZ2Ryc3Q7Cj4gLQo+IC0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGRl diwgSTkxNV9HRFJTVCwgJmdkcnN0KTsKPiAtCXJldHVybiBnZHJzdCAmIEdSRE9NX1JFU0VUX1NU QVRVUzsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBpOTE1X2RvX3Jlc2V0KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJIHVuc2lnbmVkIGludCBlbmdpbmVfbWFzaywKPiAt CQkJIHVuc2lnbmVkIGludCByZXRyeSkKPiAtewo+IC0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBk ZXZfcHJpdi0+ZHJtLnBkZXY7Cj4gLQlpbnQgZXJyOwo+IC0KPiAtCS8qIEFzc2VydCByZXNldCBm b3IgYXQgbGVhc3QgMjAgdXNlYywgYW5kIHdhaXQgZm9yIGFja25vd2xlZGdlbWVudC4gKi8KPiAt CXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBJOTE1X0dEUlNULCBHUkRPTV9SRVNFVF9FTkFC TEUpOwo+IC0JdXNsZWVwX3JhbmdlKDUwLCAyMDApOwo+IC0JZXJyID0gd2FpdF9mb3IoaTkxNV9p bl9yZXNldChwZGV2KSwgNTAwKTsKPiAtCj4gLQkvKiBDbGVhciB0aGUgcmVzZXQgcmVxdWVzdC4g Ki8KPiAtCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBJOTE1X0dEUlNULCAwKTsKPiAtCXVz bGVlcF9yYW5nZSg1MCwgMjAwKTsKPiAtCWlmICghZXJyKQo+IC0JCWVyciA9IHdhaXRfZm9yKCFp OTE1X2luX3Jlc2V0KHBkZXYpLCA1MDApOwo+IC0KPiAtCXJldHVybiBlcnI7Cj4gLX0KPiAtCj4g LXN0YXRpYyBib29sIGc0eF9yZXNldF9jb21wbGV0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKPiAt ewo+IC0JdTggZ2Ryc3Q7Cj4gLQo+IC0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgSTkxNV9H RFJTVCwgJmdkcnN0KTsKPiAtCXJldHVybiAoZ2Ryc3QgJiBHUkRPTV9SRVNFVF9FTkFCTEUpID09 IDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgZzMzX2RvX3Jlc2V0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKPiAtCQkJdW5zaWduZWQgaW50IGVuZ2luZV9tYXNrLAo+IC0JCQl1 bnNpZ25lZCBpbnQgcmV0cnkpCj4gLXsKPiAtCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2X3By aXYtPmRybS5wZGV2Owo+IC0KPiAtCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBJOTE1X0dE UlNULCBHUkRPTV9SRVNFVF9FTkFCTEUpOwo+IC0JcmV0dXJuIHdhaXRfZm9yKGc0eF9yZXNldF9j b21wbGV0ZShwZGV2KSwgNTAwKTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBnNHhfZG9fcmVzZXQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQl1bnNpZ25lZCBpbnQgZW5n aW5lX21hc2ssCj4gLQkJCXVuc2lnbmVkIGludCByZXRyeSkKPiAtewo+IC0Jc3RydWN0IHBjaV9k ZXYgKnBkZXYgPSBkZXZfcHJpdi0+ZHJtLnBkZXY7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCS8qIFdh VmNwQ2xrR2F0ZURpc2FibGVGb3JNZWRpYVJlc2V0OmN0ZyxlbGsgKi8KPiAtCUk5MTVfV1JJVEUo VkRFQ0NMS19HQVRFX0QsCj4gLQkJICAgSTkxNV9SRUFEKFZERUNDTEtfR0FURV9EKSB8IFZDUF9V TklUX0NMT0NLX0dBVEVfRElTQUJMRSk7Cj4gLQlQT1NUSU5HX1JFQUQoVkRFQ0NMS19HQVRFX0Qp Owo+IC0KPiAtCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBJOTE1X0dEUlNULAo+IC0JCQkg ICAgICBHUkRPTV9NRURJQSB8IEdSRE9NX1JFU0VUX0VOQUJMRSk7Cj4gLQlyZXQgPSAgd2FpdF9m b3IoZzR4X3Jlc2V0X2NvbXBsZXRlKHBkZXYpLCA1MDApOwo+IC0JaWYgKHJldCkgewo+IC0JCURS TV9ERUJVR19EUklWRVIoIldhaXQgZm9yIG1lZGlhIHJlc2V0IGZhaWxlZFxuIik7Cj4gLQkJZ290 byBvdXQ7Cj4gLQl9Cj4gLQo+IC0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIEk5MTVfR0RS U1QsCj4gLQkJCSAgICAgIEdSRE9NX1JFTkRFUiB8IEdSRE9NX1JFU0VUX0VOQUJMRSk7Cj4gLQly ZXQgPSAgd2FpdF9mb3IoZzR4X3Jlc2V0X2NvbXBsZXRlKHBkZXYpLCA1MDApOwo+IC0JaWYgKHJl dCkgewo+IC0JCURSTV9ERUJVR19EUklWRVIoIldhaXQgZm9yIHJlbmRlciByZXNldCBmYWlsZWRc biIpOwo+IC0JCWdvdG8gb3V0Owo+IC0JfQo+IC0KPiAtb3V0Ogo+IC0JcGNpX3dyaXRlX2NvbmZp Z19ieXRlKHBkZXYsIEk5MTVfR0RSU1QsIDApOwo+IC0KPiAtCUk5MTVfV1JJVEUoVkRFQ0NMS19H QVRFX0QsCj4gLQkJICAgSTkxNV9SRUFEKFZERUNDTEtfR0FURV9EKSAmIH5WQ1BfVU5JVF9DTE9D S19HQVRFX0RJU0FCTEUpOwo+IC0JUE9TVElOR19SRUFEKFZERUNDTEtfR0FURV9EKTsKPiAtCj4g LQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGlyb25sYWtlX2RvX3Jlc2V0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJICAgICB1bnNpZ25lZCBpbnQg ZW5naW5lX21hc2ssCj4gLQkJCSAgICAgdW5zaWduZWQgaW50IHJldHJ5KQo+IC17Cj4gLQlpbnQg cmV0Owo+IC0KPiAtCUk5MTVfV1JJVEUoSUxLX0dEU1IsIElMS19HUkRPTV9SRU5ERVIgfCBJTEtf R1JET01fUkVTRVRfRU5BQkxFKTsKPiAtCXJldCA9IGludGVsX3dhaXRfZm9yX3JlZ2lzdGVyKGRl dl9wcml2LAo+IC0JCQkJICAgICAgSUxLX0dEU1IsIElMS19HUkRPTV9SRVNFVF9FTkFCTEUsIDAs Cj4gLQkJCQkgICAgICA1MDApOwo+IC0JaWYgKHJldCkgewo+IC0JCURSTV9ERUJVR19EUklWRVIo IldhaXQgZm9yIHJlbmRlciByZXNldCBmYWlsZWRcbiIpOwo+IC0JCWdvdG8gb3V0Owo+IC0JfQo+ IC0KPiAtCUk5MTVfV1JJVEUoSUxLX0dEU1IsIElMS19HUkRPTV9NRURJQSB8IElMS19HUkRPTV9S RVNFVF9FTkFCTEUpOwo+IC0JcmV0ID0gaW50ZWxfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYs Cj4gLQkJCQkgICAgICBJTEtfR0RTUiwgSUxLX0dSRE9NX1JFU0VUX0VOQUJMRSwgMCwKPiAtCQkJ CSAgICAgIDUwMCk7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJRFJNX0RFQlVHX0RSSVZFUigiV2FpdCBm b3IgbWVkaWEgcmVzZXQgZmFpbGVkXG4iKTsKPiAtCQlnb3RvIG91dDsKPiAtCX0KPiAtCj4gLW91 dDoKPiAtCUk5MTVfV1JJVEUoSUxLX0dEU1IsIDApOwo+IC0JUE9TVElOR19SRUFEKElMS19HRFNS KTsKPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4gLS8qIFJlc2V0IHRoZSBoYXJkd2FyZSBkb21h aW5zIChHRU5YX0dSRE9NXyopIHNwZWNpZmllZCBieSBtYXNrICovCj4gLXN0YXRpYyBpbnQgZ2Vu Nl9od19kb21haW5fcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0J CQkJdTMyIGh3X2RvbWFpbl9tYXNrKQo+IC17Cj4gLQlpbnQgZXJyOwo+IC0KPiAtCS8qIEdFTjZf R0RSU1QgaXMgbm90IGluIHRoZSBndCBwb3dlciB3ZWxsLCBubyBuZWVkIHRvIGNoZWNrCj4gLQkg KiBmb3IgZmlmbyBzcGFjZSBmb3IgdGhlIHdyaXRlIG9yIGZvcmNld2FrZSB0aGUgY2hpcCBmb3IK PiAtCSAqIHRoZSByZWFkCj4gLQkgKi8KPiAtCV9fcmF3X2k5MTVfd3JpdGUzMihkZXZfcHJpdiwg R0VONl9HRFJTVCwgaHdfZG9tYWluX21hc2spOwo+IC0KPiAtCS8qIFdhaXQgZm9yIHRoZSBkZXZp Y2UgdG8gYWNrIHRoZSByZXNldCByZXF1ZXN0cyAqLwo+IC0JZXJyID0gX19pbnRlbF93YWl0X2Zv cl9yZWdpc3Rlcl9mdyhkZXZfcHJpdiwKPiAtCQkJCQkgICBHRU42X0dEUlNULCBod19kb21haW5f bWFzaywgMCwKPiAtCQkJCQkgICA1MDAsIDAsCj4gLQkJCQkJICAgTlVMTCk7Cj4gLQlpZiAoZXJy KQo+IC0JCURSTV9ERUJVR19EUklWRVIoIldhaXQgZm9yIDB4JTA4eCBlbmdpbmVzIHJlc2V0IGZh aWxlZFxuIiwKPiAtCQkJCSBod19kb21haW5fbWFzayk7Cj4gLQo+IC0JcmV0dXJuIGVycjsKPiAt fQo+IC0KPiAtLyoqCj4gLSAqIGdlbjZfcmVzZXRfZW5naW5lcyAtIHJlc2V0IGluZGl2aWR1YWwg ZW5naW5lcwo+IC0gKiBAZGV2X3ByaXY6IGk5MTUgZGV2aWNlCj4gLSAqIEBlbmdpbmVfbWFzazog bWFzayBvZiBpbnRlbF9yaW5nX2ZsYWcoKSBlbmdpbmVzIG9yIEFMTF9FTkdJTkVTIGZvciBmdWxs IHJlc2V0Cj4gLSAqIEByZXRyeTogdGhlIGNvdW50IG9mIG9mIHByZXZpb3VzIGF0dGVtcHRzIHRv IHJlc2V0Lgo+IC0gKgo+IC0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVzZXQgdGhlIGluZGl2aWR1 YWwgZW5naW5lcyB0aGF0IGFyZSBzZXQgaW4gZW5naW5lX21hc2suCj4gLSAqIElmIHlvdSBwcm92 aWRlIEFMTF9FTkdJTkVTIGFzIG1hc2ssIGZ1bGwgZ2xvYmFsIGRvbWFpbiByZXNldCB3aWxsIGJl IGlzc3VlZC4KPiAtICoKPiAtICogTm90ZTogSXQgaXMgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNh bGxlciB0byBoYW5kbGUgdGhlIGRpZmZlcmVuY2UgYmV0d2Vlbgo+IC0gKiBhc2tpbmcgZnVsbCBk b21haW4gcmVzZXQgdmVyc3VzIHJlc2V0IGZvciBhbGwgYXZhaWxhYmxlIGluZGl2aWR1YWwgZW5n aW5lcy4KPiAtICoKPiAtICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5vbnplcm8gb24gZXJyb3Iu Cj4gLSAqLwo+IC1zdGF0aWMgaW50IGdlbjZfcmVzZXRfZW5naW5lcyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCSAgICAgIHVuc2lnbmVkIGludCBlbmdpbmVfbWFzaywK PiAtCQkJICAgICAgdW5zaWduZWQgaW50IHJldHJ5KQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmU7Cj4gLQljb25zdCB1MzIgaHdfZW5naW5lX21hc2tbSTkxNV9OVU1fRU5H SU5FU10gPSB7Cj4gLQkJW1JDU10gPSBHRU42X0dSRE9NX1JFTkRFUiwKPiAtCQlbQkNTXSA9IEdF TjZfR1JET01fQkxULAo+IC0JCVtWQ1NdID0gR0VONl9HUkRPTV9NRURJQSwKPiAtCQlbVkNTMl0g PSBHRU44X0dSRE9NX01FRElBMiwKPiAtCQlbVkVDU10gPSBHRU42X0dSRE9NX1ZFQ1MsCj4gLQl9 Owo+IC0JdTMyIGh3X21hc2s7Cj4gLQo+IC0JaWYgKGVuZ2luZV9tYXNrID09IEFMTF9FTkdJTkVT KSB7Cj4gLQkJaHdfbWFzayA9IEdFTjZfR1JET01fRlVMTDsKPiAtCX0gZWxzZSB7Cj4gLQkJdW5z aWduZWQgaW50IHRtcDsKPiAtCj4gLQkJaHdfbWFzayA9IDA7Cj4gLQkJZm9yX2VhY2hfZW5naW5l X21hc2tlZChlbmdpbmUsIGRldl9wcml2LCBlbmdpbmVfbWFzaywgdG1wKQo+IC0JCQlod19tYXNr IHw9IGh3X2VuZ2luZV9tYXNrW2VuZ2luZS0+aWRdOwo+IC0JfQo+IC0KPiAtCXJldHVybiBnZW42 X2h3X2RvbWFpbl9yZXNldChkZXZfcHJpdiwgaHdfbWFzayk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB1 MzIgZ2VuMTFfbG9ja19zZmMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0J CQkgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAtewo+IC0JdTggdmRib3hfc2Zj X2FjY2VzcyA9IFJVTlRJTUVfSU5GTyhkZXZfcHJpdiktPnZkYm94X3NmY19hY2Nlc3M7Cj4gLQlp OTE1X3JlZ190IHNmY19mb3JjZWRfbG9jaywgc2ZjX2ZvcmNlZF9sb2NrX2FjazsKPiAtCXUzMiBz ZmNfZm9yY2VkX2xvY2tfYml0LCBzZmNfZm9yY2VkX2xvY2tfYWNrX2JpdDsKPiAtCWk5MTVfcmVn X3Qgc2ZjX3VzYWdlOwo+IC0JdTMyIHNmY191c2FnZV9iaXQ7Cj4gLQl1MzIgc2ZjX3Jlc2V0X2Jp dDsKPiAtCj4gLQlzd2l0Y2ggKGVuZ2luZS0+Y2xhc3MpIHsKPiAtCWNhc2UgVklERU9fREVDT0RF X0NMQVNTOgo+IC0JCWlmICgoQklUKGVuZ2luZS0+aW5zdGFuY2UpICYgdmRib3hfc2ZjX2FjY2Vz cykgPT0gMCkKPiAtCQkJcmV0dXJuIDA7Cj4gLQo+IC0JCXNmY19mb3JjZWRfbG9jayA9IEdFTjEx X1ZDU19TRkNfRk9SQ0VEX0xPQ0soZW5naW5lKTsKPiAtCQlzZmNfZm9yY2VkX2xvY2tfYml0ID0g R0VOMTFfVkNTX1NGQ19GT1JDRURfTE9DS19CSVQ7Cj4gLQo+IC0JCXNmY19mb3JjZWRfbG9ja19h Y2sgPSBHRU4xMV9WQ1NfU0ZDX0xPQ0tfU1RBVFVTKGVuZ2luZSk7Cj4gLQkJc2ZjX2ZvcmNlZF9s b2NrX2Fja19iaXQgID0gR0VOMTFfVkNTX1NGQ19MT0NLX0FDS19CSVQ7Cj4gLQo+IC0JCXNmY191 c2FnZSA9IEdFTjExX1ZDU19TRkNfTE9DS19TVEFUVVMoZW5naW5lKTsKPiAtCQlzZmNfdXNhZ2Vf Yml0ID0gR0VOMTFfVkNTX1NGQ19VU0FHRV9CSVQ7Cj4gLQkJc2ZjX3Jlc2V0X2JpdCA9IEdFTjEx X1ZDU19TRkNfUkVTRVRfQklUKGVuZ2luZS0+aW5zdGFuY2UpOwo+IC0JCWJyZWFrOwo+IC0KPiAt CWNhc2UgVklERU9fRU5IQU5DRU1FTlRfQ0xBU1M6Cj4gLQkJc2ZjX2ZvcmNlZF9sb2NrID0gR0VO MTFfVkVDU19TRkNfRk9SQ0VEX0xPQ0soZW5naW5lKTsKPiAtCQlzZmNfZm9yY2VkX2xvY2tfYml0 ID0gR0VOMTFfVkVDU19TRkNfRk9SQ0VEX0xPQ0tfQklUOwo+IC0KPiAtCQlzZmNfZm9yY2VkX2xv Y2tfYWNrID0gR0VOMTFfVkVDU19TRkNfTE9DS19BQ0soZW5naW5lKTsKPiAtCQlzZmNfZm9yY2Vk X2xvY2tfYWNrX2JpdCAgPSBHRU4xMV9WRUNTX1NGQ19MT0NLX0FDS19CSVQ7Cj4gLQo+IC0JCXNm Y191c2FnZSA9IEdFTjExX1ZFQ1NfU0ZDX1VTQUdFKGVuZ2luZSk7Cj4gLQkJc2ZjX3VzYWdlX2Jp dCA9IEdFTjExX1ZFQ1NfU0ZDX1VTQUdFX0JJVDsKPiAtCQlzZmNfcmVzZXRfYml0ID0gR0VOMTFf VkVDU19TRkNfUkVTRVRfQklUKGVuZ2luZS0+aW5zdGFuY2UpOwo+IC0JCWJyZWFrOwo+IC0KPiAt CWRlZmF1bHQ6Cj4gLQkJcmV0dXJuIDA7Cj4gLQl9Cj4gLQo+IC0JLyoKPiAtCSAqIFRlbGwgdGhl IGVuZ2luZSB0aGF0IGEgc29mdHdhcmUgcmVzZXQgaXMgZ29pbmcgdG8gaGFwcGVuLiBUaGUgZW5n aW5lCj4gLQkgKiB3aWxsIHRoZW4gdHJ5IHRvIGZvcmNlIGxvY2sgdGhlIFNGQyAoaWYgY3VycmVu dGx5IGxvY2tlZCwgaXQgd2lsbAo+IC0JICogcmVtYWluIHNvIHVudGlsIHdlIHRlbGwgdGhlIGVu Z2luZSBpdCBpcyBzYWZlIHRvIHVubG9jazsgaWYgY3VycmVudGx5Cj4gLQkgKiB1bmxvY2tlZCwg aXQgd2lsbCBpZ25vcmUgdGhpcyBhbmQgYWxsIG5ldyBsb2NrIHJlcXVlc3RzKS4gSWYgU0ZDCj4g LQkgKiBlbmRzIHVwIGJlaW5nIGxvY2tlZCB0byB0aGUgZW5naW5lIHdlIHdhbnQgdG8gcmVzZXQs IHdlIGhhdmUgdG8gcmVzZXQKPiAtCSAqIGl0IGFzIHdlbGwgKHdlIHdpbGwgdW5sb2NrIGl0IG9u Y2UgdGhlIHJlc2V0IHNlcXVlbmNlIGlzIGNvbXBsZXRlZCkuCj4gLQkgKi8KPiAtCUk5MTVfV1JJ VEVfRlcoc2ZjX2ZvcmNlZF9sb2NrLAo+IC0JCSAgICAgIEk5MTVfUkVBRF9GVyhzZmNfZm9yY2Vk X2xvY2spIHwgc2ZjX2ZvcmNlZF9sb2NrX2JpdCk7Cj4gLQo+IC0JaWYgKF9faW50ZWxfd2FpdF9m b3JfcmVnaXN0ZXJfZncoZGV2X3ByaXYsCj4gLQkJCQkJIHNmY19mb3JjZWRfbG9ja19hY2ssCj4g LQkJCQkJIHNmY19mb3JjZWRfbG9ja19hY2tfYml0LAo+IC0JCQkJCSBzZmNfZm9yY2VkX2xvY2tf YWNrX2JpdCwKPiAtCQkJCQkgMTAwMCwgMCwgTlVMTCkpIHsKPiAtCQlEUk1fREVCVUdfRFJJVkVS KCJXYWl0IGZvciBTRkMgZm9yY2VkIGxvY2sgYWNrIGZhaWxlZFxuIik7Cj4gLQkJcmV0dXJuIDA7 Cj4gLQl9Cj4gLQo+IC0JaWYgKEk5MTVfUkVBRF9GVyhzZmNfdXNhZ2UpICYgc2ZjX3VzYWdlX2Jp dCkKPiAtCQlyZXR1cm4gc2ZjX3Jlc2V0X2JpdDsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0K PiAtc3RhdGljIHZvaWQgZ2VuMTFfdW5sb2NrX3NmYyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCj4gLQkJCSAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+IC17 Cj4gLQl1OCB2ZGJveF9zZmNfYWNjZXNzID0gUlVOVElNRV9JTkZPKGRldl9wcml2KS0+dmRib3hf c2ZjX2FjY2VzczsKPiAtCWk5MTVfcmVnX3Qgc2ZjX2ZvcmNlZF9sb2NrOwo+IC0JdTMyIHNmY19m b3JjZWRfbG9ja19iaXQ7Cj4gLQo+IC0Jc3dpdGNoIChlbmdpbmUtPmNsYXNzKSB7Cj4gLQljYXNl IFZJREVPX0RFQ09ERV9DTEFTUzoKPiAtCQlpZiAoKEJJVChlbmdpbmUtPmluc3RhbmNlKSAmIHZk Ym94X3NmY19hY2Nlc3MpID09IDApCj4gLQkJCXJldHVybjsKPiAtCj4gLQkJc2ZjX2ZvcmNlZF9s b2NrID0gR0VOMTFfVkNTX1NGQ19GT1JDRURfTE9DSyhlbmdpbmUpOwo+IC0JCXNmY19mb3JjZWRf bG9ja19iaXQgPSBHRU4xMV9WQ1NfU0ZDX0ZPUkNFRF9MT0NLX0JJVDsKPiAtCQlicmVhazsKPiAt Cj4gLQljYXNlIFZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTOgo+IC0JCXNmY19mb3JjZWRfbG9jayA9 IEdFTjExX1ZFQ1NfU0ZDX0ZPUkNFRF9MT0NLKGVuZ2luZSk7Cj4gLQkJc2ZjX2ZvcmNlZF9sb2Nr X2JpdCA9IEdFTjExX1ZFQ1NfU0ZDX0ZPUkNFRF9MT0NLX0JJVDsKPiAtCQlicmVhazsKPiAtCj4g LQlkZWZhdWx0Ogo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gLQlJOTE1X1dSSVRFX0ZXKHNmY19m b3JjZWRfbG9jaywKPiAtCQkgICAgICBJOTE1X1JFQURfRlcoc2ZjX2ZvcmNlZF9sb2NrKSAmIH5z ZmNfZm9yY2VkX2xvY2tfYml0KTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGdlbjExX3Jlc2V0X2Vu Z2luZXMgLSByZXNldCBpbmRpdmlkdWFsIGVuZ2luZXMKPiAtICogQGRldl9wcml2OiBpOTE1IGRl dmljZQo+IC0gKiBAZW5naW5lX21hc2s6IG1hc2sgb2YgaW50ZWxfcmluZ19mbGFnKCkgZW5naW5l cyBvciBBTExfRU5HSU5FUyBmb3IgZnVsbCByZXNldAo+IC0gKgo+IC0gKiBUaGlzIGZ1bmN0aW9u IHdpbGwgcmVzZXQgdGhlIGluZGl2aWR1YWwgZW5naW5lcyB0aGF0IGFyZSBzZXQgaW4gZW5naW5l X21hc2suCj4gLSAqIElmIHlvdSBwcm92aWRlIEFMTF9FTkdJTkVTIGFzIG1hc2ssIGZ1bGwgZ2xv YmFsIGRvbWFpbiByZXNldCB3aWxsIGJlIGlzc3VlZC4KPiAtICoKPiAtICogTm90ZTogSXQgaXMg cmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlciB0byBoYW5kbGUgdGhlIGRpZmZlcmVuY2UgYmV0 d2Vlbgo+IC0gKiBhc2tpbmcgZnVsbCBkb21haW4gcmVzZXQgdmVyc3VzIHJlc2V0IGZvciBhbGwg YXZhaWxhYmxlIGluZGl2aWR1YWwgZW5naW5lcy4KPiAtICoKPiAtICogUmV0dXJucyAwIG9uIHN1 Y2Nlc3MsIG5vbnplcm8gb24gZXJyb3IuCj4gLSAqLwo+IC1zdGF0aWMgaW50IGdlbjExX3Jlc2V0 X2VuZ2luZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkgICAgICAg dW5zaWduZWQgaW50IGVuZ2luZV9tYXNrKQo+IC17Cj4gLQljb25zdCB1MzIgaHdfZW5naW5lX21h c2tbSTkxNV9OVU1fRU5HSU5FU10gPSB7Cj4gLQkJW1JDU10gPSBHRU4xMV9HUkRPTV9SRU5ERVIs Cj4gLQkJW0JDU10gPSBHRU4xMV9HUkRPTV9CTFQsCj4gLQkJW1ZDU10gPSBHRU4xMV9HUkRPTV9N RURJQSwKPiAtCQlbVkNTMl0gPSBHRU4xMV9HUkRPTV9NRURJQTIsCj4gLQkJW1ZDUzNdID0gR0VO MTFfR1JET01fTUVESUEzLAo+IC0JCVtWQ1M0XSA9IEdFTjExX0dSRE9NX01FRElBNCwKPiAtCQlb VkVDU10gPSBHRU4xMV9HUkRPTV9WRUNTLAo+IC0JCVtWRUNTMl0gPSBHRU4xMV9HUkRPTV9WRUNT MiwKPiAtCX07Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gLQl1bnNpZ25l ZCBpbnQgdG1wOwo+IC0JdTMyIGh3X21hc2s7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCUJVSUxEX0JV R19PTihWRUNTMiArIDEgIT0gSTkxNV9OVU1fRU5HSU5FUyk7Cj4gLQo+IC0JaWYgKGVuZ2luZV9t YXNrID09IEFMTF9FTkdJTkVTKSB7Cj4gLQkJaHdfbWFzayA9IEdFTjExX0dSRE9NX0ZVTEw7Cj4g LQl9IGVsc2Ugewo+IC0JCWh3X21hc2sgPSAwOwo+IC0JCWZvcl9lYWNoX2VuZ2luZV9tYXNrZWQo ZW5naW5lLCBkZXZfcHJpdiwgZW5naW5lX21hc2ssIHRtcCkgewo+IC0JCQlod19tYXNrIHw9IGh3 X2VuZ2luZV9tYXNrW2VuZ2luZS0+aWRdOwo+IC0JCQlod19tYXNrIHw9IGdlbjExX2xvY2tfc2Zj KGRldl9wcml2LCBlbmdpbmUpOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlyZXQgPSBnZW42X2h3X2Rv bWFpbl9yZXNldChkZXZfcHJpdiwgaHdfbWFzayk7Cj4gLQo+IC0JaWYgKGVuZ2luZV9tYXNrICE9 IEFMTF9FTkdJTkVTKQo+IC0JCWZvcl9lYWNoX2VuZ2luZV9tYXNrZWQoZW5naW5lLCBkZXZfcHJp diwgZW5naW5lX21hc2ssIHRtcCkKPiAtCQkJZ2VuMTFfdW5sb2NrX3NmYyhkZXZfcHJpdiwgZW5n aW5lKTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+ICAvKioKPiAgICogX19pbnRlbF93 YWl0X2Zvcl9yZWdpc3Rlcl9mdyAtIHdhaXQgdW50aWwgcmVnaXN0ZXIgbWF0Y2hlcyBleHBlY3Rl ZCBzdGF0ZQo+ICAgKiBAZGV2X3ByaXY6IHRoZSBpOTE1IGRldmljZQo+IEBAIC0yMTkxLDE5NiAr MTgyNSw2IEBAIGludCBfX2ludGVsX3dhaXRfZm9yX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQg Z2VuOF9lbmdpbmVfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkx NTsKPiAtCWludCByZXQ7Cj4gLQo+IC0JSTkxNV9XUklURV9GVyhSSU5HX1JFU0VUX0NUTChlbmdp bmUtPm1taW9fYmFzZSksCj4gLQkJICAgICAgX01BU0tFRF9CSVRfRU5BQkxFKFJFU0VUX0NUTF9S RVFVRVNUX1JFU0VUKSk7Cj4gLQo+IC0JcmV0ID0gX19pbnRlbF93YWl0X2Zvcl9yZWdpc3Rlcl9m dyhkZXZfcHJpdiwKPiAtCQkJCQkgICBSSU5HX1JFU0VUX0NUTChlbmdpbmUtPm1taW9fYmFzZSks Cj4gLQkJCQkJICAgUkVTRVRfQ1RMX1JFQURZX1RPX1JFU0VULAo+IC0JCQkJCSAgIFJFU0VUX0NU TF9SRUFEWV9UT19SRVNFVCwKPiAtCQkJCQkgICA3MDAsIDAsCj4gLQkJCQkJICAgTlVMTCk7Cj4g LQlpZiAocmV0KQo+IC0JCURSTV9FUlJPUigiJXM6IHJlc2V0IHJlcXVlc3QgdGltZW91dFxuIiwg ZW5naW5lLT5uYW1lKTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC1zdGF0aWMgdm9p ZCBnZW44X2VuZ2luZV9yZXNldF9jYW5jZWwoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5 MTU7Cj4gLQo+IC0JSTkxNV9XUklURV9GVyhSSU5HX1JFU0VUX0NUTChlbmdpbmUtPm1taW9fYmFz ZSksCj4gLQkJICAgICAgX01BU0tFRF9CSVRfRElTQUJMRShSRVNFVF9DVExfUkVRVUVTVF9SRVNF VCkpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IHJlc2V0X2VuZ2luZXMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsCj4gLQkJCSB1bnNpZ25lZCBpbnQgZW5naW5lX21hc2ssCj4gLQkJCSB1 bnNpZ25lZCBpbnQgcmV0cnkpCj4gLXsKPiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTEpCj4g LQkJcmV0dXJuIGdlbjExX3Jlc2V0X2VuZ2luZXMoaTkxNSwgZW5naW5lX21hc2spOwo+IC0JZWxz ZQo+IC0JCXJldHVybiBnZW42X3Jlc2V0X2VuZ2luZXMoaTkxNSwgZW5naW5lX21hc2ssIHJldHJ5 KTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBnZW44X3Jlc2V0X2VuZ2luZXMoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkgICAgICB1bnNpZ25lZCBpbnQgZW5naW5lX21h c2ssCj4gLQkJCSAgICAgIHVuc2lnbmVkIGludCByZXRyeSkKPiAtewo+IC0Jc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lOwo+IC0JY29uc3QgYm9vbCByZXNldF9ub25fcmVhZHkgPSByZXRy eSA+PSAxOwo+IC0JdW5zaWduZWQgaW50IHRtcDsKPiAtCWludCByZXQ7Cj4gLQo+IC0JZm9yX2Vh Y2hfZW5naW5lX21hc2tlZChlbmdpbmUsIGRldl9wcml2LCBlbmdpbmVfbWFzaywgdG1wKSB7Cj4g LQkJcmV0ID0gZ2VuOF9lbmdpbmVfcmVzZXRfcHJlcGFyZShlbmdpbmUpOwo+IC0JCWlmIChyZXQg JiYgIXJlc2V0X25vbl9yZWFkeSkKPiAtCQkJZ290byBza2lwX3Jlc2V0Owo+IC0KPiAtCQkvKgo+ IC0JCSAqIElmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBmYWlsZWQgYXR0ZW1wdCB0byBwcmVwYXJl LAo+IC0JCSAqIHdlIGRlY2lkZSB0byBwcm9jZWVkIGFueXdheS4KPiAtCQkgKgo+IC0JCSAqIEJ5 IGRvaW5nIHNvIHdlIHJpc2sgY29udGV4dCBjb3JydXB0aW9uIGFuZCB3aXRoCj4gLQkJICogc29t ZSBnZW5zIChrYmwpLCBwb3NzaWJsZSBzeXN0ZW0gaGFuZyBpZiByZXNldAo+IC0JCSAqIGhhcHBl bnMgZHVyaW5nIGFjdGl2ZSBiYiBleGVjdXRpb24uCj4gLQkJICoKPiAtCQkgKiBXZSByYXRoZXIg dGFrZSBjb250ZXh0IGNvcnJ1cHRpb24gaW5zdGVhZCBvZgo+IC0JCSAqIGZhaWxlZCByZXNldCB3 aXRoIGEgd2VkZ2VkIGRyaXZlci9ncHUuIEFuZAo+IC0JCSAqIGFjdGl2ZSBiYiBleGVjdXRpb24g Y2FzZSBzaG91bGQgYmUgY292ZXJlZCBieQo+IC0JCSAqIGk5MTVfc3RvcF9lbmdpbmVzIHdlIGhh dmUgYmVmb3JlIHRoZSByZXNldC4KPiAtCQkgKi8KPiAtCX0KPiAtCj4gLQlyZXQgPSByZXNldF9l bmdpbmVzKGRldl9wcml2LCBlbmdpbmVfbWFzaywgcmV0cnkpOwo+IC0KPiAtc2tpcF9yZXNldDoK PiAtCWZvcl9lYWNoX2VuZ2luZV9tYXNrZWQoZW5naW5lLCBkZXZfcHJpdiwgZW5naW5lX21hc2ss IHRtcCkKPiAtCQlnZW44X2VuZ2luZV9yZXNldF9jYW5jZWwoZW5naW5lKTsKPiAtCj4gLQlyZXR1 cm4gcmV0Owo+IC19Cj4gLQo+IC10eXBlZGVmIGludCAoKnJlc2V0X2Z1bmMpKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICosCj4gLQkJCSAgdW5zaWduZWQgaW50IGVuZ2luZV9tYXNrLCB1bnNpZ25l ZCBpbnQgcmV0cnkpOwo+IC0KPiAtc3RhdGljIHJlc2V0X2Z1bmMgaW50ZWxfZ2V0X2dwdV9yZXNl dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCWlmICghaTkxNV9t b2RwYXJhbXMucmVzZXQpCj4gLQkJcmV0dXJuIE5VTEw7Cj4gLQo+IC0JaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPj0gOCkKPiAtCQlyZXR1cm4gZ2VuOF9yZXNldF9lbmdpbmVzOwo+IC0JZWxzZSBp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA2KQo+IC0JCXJldHVybiBnZW42X3Jlc2V0X2VuZ2lu ZXM7Cj4gLQllbHNlIGlmIChJU19HRU4oZGV2X3ByaXYsIDUpKQo+IC0JCXJldHVybiBpcm9ubGFr ZV9kb19yZXNldDsKPiAtCWVsc2UgaWYgKElTX0c0WChkZXZfcHJpdikpCj4gLQkJcmV0dXJuIGc0 eF9kb19yZXNldDsKPiAtCWVsc2UgaWYgKElTX0czMyhkZXZfcHJpdikgfHwgSVNfUElORVZJRVco ZGV2X3ByaXYpKQo+IC0JCXJldHVybiBnMzNfZG9fcmVzZXQ7Cj4gLQllbHNlIGlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDMpCj4gLQkJcmV0dXJuIGk5MTVfZG9fcmVzZXQ7Cj4gLQllbHNlCj4g LQkJcmV0dXJuIE5VTEw7Cj4gLX0KPiAtCj4gLWludCBpbnRlbF9ncHVfcmVzZXQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCSAgICBjb25zdCB1bnNpZ25lZCBpbnQgZW5n aW5lX21hc2spCj4gLXsKPiAtCXJlc2V0X2Z1bmMgcmVzZXQgPSBpbnRlbF9nZXRfZ3B1X3Jlc2V0 KGRldl9wcml2KTsKPiAtCXVuc2lnbmVkIGludCByZXRyeTsKPiAtCWludCByZXQ7Cj4gLQo+IC0J R0VNX0JVR19PTighZW5naW5lX21hc2spOwo+IC0KPiAtCS8qCj4gLQkgKiBXZSB3YW50IHRvIHBl cmZvcm0gcGVyLWVuZ2luZSByZXNldCBmcm9tIGF0b21pYyBjb250ZXh0IChlLmcuCj4gLQkgKiBz b2Z0aXJxKSwgd2hpY2ggaW1wb3NlcyB0aGUgY29uc3RyYWludCB0aGF0IHdlIGNhbm5vdCBzbGVl cC4KPiAtCSAqIEhvd2V2ZXIsIGV4cGVyaWVuY2Ugc3VnZ2VzdHMgdGhhdCBzcGVuZGluZyBhIGJp dCBvZiB0aW1lIHdhaXRpbmcKPiAtCSAqIGZvciBhIHJlc2V0IGhlbHBzIGluIHZhcmlvdXMgY2Fz ZXMsIHNvIGZvciBhIGZ1bGwtZGV2aWNlIHJlc2V0Cj4gLQkgKiB3ZSBhcHBseSB0aGUgb3Bwb3Np dGUgcnVsZSBhbmQgd2FpdCBpZiB3ZSB3YW50IHRvLiBBcyB3ZSBzaG91bGQKPiAtCSAqIGFsd2F5 cyBmb2xsb3cgdXAgYSBmYWlsZWQgcGVyLWVuZ2luZSByZXNldCB3aXRoIGEgZnVsbCBkZXZpY2Ug cmVzZXQsCj4gLQkgKiBiZWluZyBhIGxpdHRsZSBmYXN0ZXIsIHN0cmljdGVyIGFuZCBtb3JlIGVy cm9yIHByb25lIGZvciB0aGUKPiAtCSAqIGF0b21pYyBjYXNlIHNlZW1zIGFuIGFjY2VwdGFibGUg Y29tcHJvbWlzZS4KPiAtCSAqCj4gLQkgKiBVbmZvcnR1bmF0ZWx5IHRoaXMgbGVhZHMgdG8gYSBi aW1vZGFsIHJvdXRpbmUsIHdoZW4gdGhlIGdvYWwgd2FzCj4gLQkgKiB0byBoYXZlIGEgc2luZ2xl IHJlc2V0IGZ1bmN0aW9uIHRoYXQgd29ya2VkIGZvciByZXNldHRpbmcgYW55Cj4gLQkgKiBudW1i ZXIgb2YgZW5naW5lcyBzaW11bHRhbmVvdXNseS4KPiAtCSAqLwo+IC0JbWlnaHRfc2xlZXBfaWYo ZW5naW5lX21hc2sgPT0gQUxMX0VOR0lORVMpOwo+IC0KPiAtCS8qCj4gLQkgKiBJZiB0aGUgcG93 ZXIgd2VsbCBzbGVlcHMgZHVyaW5nIHRoZSByZXNldCwgdGhlIHJlc2V0Cj4gLQkgKiByZXF1ZXN0 IG1heSBiZSBkcm9wcGVkIGFuZCBuZXZlciBjb21wbGV0ZXMgKGNhdXNpbmcgLUVJTykuCj4gLQkg Ki8KPiAtCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxM KTsKPiAtCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IDM7IHJldHJ5KyspIHsKPiAtCj4gLQkJLyoK PiAtCQkgKiBXZSBzdG9wIGVuZ2luZXMsIG90aGVyd2lzZSB3ZSBtaWdodCBnZXQgZmFpbGVkIHJl c2V0IGFuZCBhCj4gLQkJICogZGVhZCBncHUgKG9uIGVsaykuIEFsc28gYXMgbW9kZXJuIGdwdSBh cyBrYmwgY2FuIHN1ZmZlcgo+IC0JCSAqIGZyb20gc3lzdGVtIGhhbmcgaWYgYmF0Y2hidWZmZXIg aXMgcHJvZ3Jlc3Npbmcgd2hlbgo+IC0JCSAqIHRoZSByZXNldCBpcyBpc3N1ZWQsIHJlZ2FyZGxl c3Mgb2YgUkVBRFlfVE9fUkVTRVQgYWNrLgo+IC0JCSAqIFRodXMgYXNzdW1lIGl0IGlzIGJlc3Qg dG8gc3RvcCBlbmdpbmVzIG9uIGFsbCBnZW5zCj4gLQkJICogd2hlcmUgd2UgaGF2ZSBhIGdwdSBy ZXNldC4KPiAtCQkgKgo+IC0JCSAqIFdhS0JMVkVDU1NlbWFwaG9yZVdhaXRQb2xsOmtibCAob24g QUxMX0VOR0lORVMpCj4gLQkJICoKPiAtCQkgKiBXYU1lZGlhUmVzZXRNYWluUmluZ0NsZWFudXA6 Y3RnLGVsayAocHJlc3VtYWJseSkKPiAtCQkgKgo+IC0JCSAqIEZJWE1FOiBXYSBmb3IgbW9yZSBt b2Rlcm4gZ2VucyBuZWVkcyB0byBiZSB2YWxpZGF0ZWQKPiAtCQkgKi8KPiAtCQlpOTE1X3N0b3Bf ZW5naW5lcyhkZXZfcHJpdiwgZW5naW5lX21hc2spOwo+IC0KPiAtCQlyZXQgPSAtRU5PREVWOwo+ IC0JCWlmIChyZXNldCkgewo+IC0JCQlyZXQgPSByZXNldChkZXZfcHJpdiwgZW5naW5lX21hc2ss IHJldHJ5KTsKPiAtCQkJR0VNX1RSQUNFKCJlbmdpbmVfbWFzaz0leCwgcmV0PSVkLCByZXRyeT0l ZFxuIiwKPiAtCQkJCSAgZW5naW5lX21hc2ssIHJldCwgcmV0cnkpOwo+IC0JCX0KPiAtCQlpZiAo cmV0ICE9IC1FVElNRURPVVQgfHwgZW5naW5lX21hc2sgIT0gQUxMX0VOR0lORVMpCj4gLQkJCWJy ZWFrOwo+IC0KPiAtCQljb25kX3Jlc2NoZWQoKTsKPiAtCX0KPiAtCWludGVsX3VuY29yZV9mb3Jj ZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ IC19Cj4gLQo+IC1ib29sIGludGVsX2hhc19ncHVfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQo+IC17Cj4gLQlyZXR1cm4gaW50ZWxfZ2V0X2dwdV9yZXNldChkZXZfcHJp dikgIT0gTlVMTDsKPiAtfQo+IC0KPiAtYm9vbCBpbnRlbF9oYXNfcmVzZXRfZW5naW5lKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JcmV0dXJuIChJTlRFTF9JTkZP KGRldl9wcml2KS0+aGFzX3Jlc2V0X2VuZ2luZSAmJgo+IC0JCWk5MTVfbW9kcGFyYW1zLnJlc2V0 ID49IDIpOwo+IC19Cj4gLQo+IC1pbnQgaW50ZWxfcmVzZXRfZ3VjKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JdTMyIGd1Y19kb21haW4gPSBJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDExID8gR0VOMTFfR1JET01fR1VDIDoKPiAtCQkJCQkJICAgICBHRU45X0dSRE9N X0dVQzsKPiAtCWludCByZXQ7Cj4gLQo+IC0JR0VNX0JVR19PTighSEFTX0dVQyhkZXZfcHJpdikp Owo+IC0KPiAtCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KGRldl9wcml2LCBGT1JDRVdBS0Vf QUxMKTsKPiAtCXJldCA9IGdlbjZfaHdfZG9tYWluX3Jlc2V0KGRldl9wcml2LCBndWNfZG9tYWlu KTsKPiAtCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxM KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+ICBib29sIGludGVsX3VuY29yZV91bmNs YWltZWRfbW1pbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIHsKPiAgCXJl dHVybiBjaGVja19mb3JfdW5jbGFpbWVkX21taW8oZGV2X3ByaXYpOwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbHJjLmMKPiBpbmRleCBlNjA3M2NkNDcxOWMuLjJiMmVj ZDc2YzJhYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50 ZWxfbHJjLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbHJj LmMKPiBAQCAtNCw2ICs0LDggQEAKPiAgICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29ycG9y YXRpb24KPiAgICovCj4gIAo+ICsjaW5jbHVkZSAiLi4vaTkxNV9yZXNldC5oIgo+ICsKPiAgI2lu Y2x1ZGUgIi4uL2k5MTVfc2VsZnRlc3QuaCIKPiAgI2luY2x1ZGUgImlndF9mbHVzaF90ZXN0Lmgi Cj4gICNpbmNsdWRlICJpZ3Rfc3Bpbm5lci5oIgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfd29ya2Fyb3VuZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pbnRlbF93b3JrYXJvdW5kcy5jCj4gaW5kZXggOTAwOWQ3YjhiMTM2Li5h OGNhYzU2YmU4MzUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3Rz L2ludGVsX3dvcmthcm91bmRzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvaW50ZWxfd29ya2Fyb3VuZHMuYwo+IEBAIC01LDYgKzUsNyBAQAo+ICAgKi8KPiAgCj4gICNp bmNsdWRlICIuLi9pOTE1X3NlbGZ0ZXN0LmgiCj4gKyNpbmNsdWRlICIuLi9pOTE1X3Jlc2V0Lmgi Cj4gIAo+ICAjaW5jbHVkZSAiaWd0X2ZsdXNoX3Rlc3QuaCIKPiAgI2luY2x1ZGUgImlndF9yZXNl dC5oIgo+IC0tIAo+IDIuMjAuMQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p bnRlbC1nZngK