From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v4 37/38] drm: Improve drm_mm search (and fix topdown allocation) with rbtrees Date: Wed, 28 Dec 2016 14:48:52 +0100 Message-ID: <20161228134852.GO347@dvetter-linux.ger.corp.intel.com> References: <20161222083641.2691-1-chris@chris-wilson.co.uk> <20161222083641.2691-38-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20161222083641.2691-38-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 Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBEZWMgMjIsIDIwMTYgYXQgMDg6MzY6NDBBTSArMDAwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IFRoZSBkcm1fbW0gcmFuZ2UgbWFuYWdlciBjbGFpbWVkIHRvIHN1cHBvcnQgdG9wLWRv d24gaW5zZXJ0aW9uLCBidXQgaXQKPiB3YXMgbmVpdGhlciBzZWFyY2hpbmcgZm9yIHRoZSB0b3At bW9zdCBob2xlIHRoYXQgY291bGQgZml0IHRoZQo+IGFsbG9jYXRpb24gcmVxdWVzdCBub3IgZml0 dGluZyB0aGUgcmVxdWVzdCB0byB0aGUgaG9sZSBjb3JyZWN0bHkuCj4gCj4gSW4gb3JkZXIgdG8g c2VhcmNoIHRoZSByYW5nZSBlZmZpY2llbnRseSwgd2UgY3JlYXRlIGEgc2Vjb25kYXJ5IGluZGV4 Cj4gZm9yIHRoZSBob2xlcyB1c2luZyBlaXRoZXIgdGhlaXIgc2l6ZSBvciB0aGVpciBhZGRyZXNz LiBUaGlzIGluZGV4Cj4gYWxsb3dzIHVzIHRvIGZpbmQgdGhlIHNtYWxsZXN0IGhvbGUgb3IgdGhl IGhvbGUgYXQgdGhlIGJvdHRvbSBvciB0b3Agb2YKPiB0aGUgcmFuZ2UgZWZmaWNpZW50bHksIHdo aWxzdCBrZWVwaW5nIHRoZSBob2xlIHN0YWNrIHRvIHJhcGlkbHkgc2VydmljZQo+IGV2aWN0aW9u cy4KPiAKPiB2MjogU2VhcmNoIGZvciBob2xlcyBib3RoIGhpZ2ggYW5kIGxvdy4gUmVuYW1lIGZs YWdzIHRvIG1vZGUuCj4gdjM6IERpc2NvdmVyIHJiX2VudHJ5X3NhZmUoKSBhbmQgdXNlIGl0IQo+ IAo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVr Pgo+IFJldmlld2VkLWJ5OiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBsaW51eC5p bnRlbC5jb20+CgpUaGlzIGZlZWxzIGxpa2UgbXVjaCB3aXRob3V0IGRyaXZlciBtYWludGFpbmVy IGFja3MuIENhbiB5b3UgcGxzIHJlc2VuZAp3aXRoIHRoZW0gb24gY2MgKHBsdXMgdGhlIGdjYyBh cHBlYXNlbWVudCkgc28gd2UgY2FuIGdvIGFjayBmaXNoaW5nIGEgYml0PwoKQWxzbyBwcm9iYWJs eSBlYXNpZXIgdG8gZ2V0IHRoaXMgaW4gYWZ0ZXIgdGhlIGJhY2ttZXJnaW5nIGlzIGRvbmUuCkV2 ZXJ5dGhpbmcgZWxzZSBiZXNpZGVzIHRoZXNlIDIgbGFzdCBwYXRjaGVzLCBhbmQgdGhlIDIgaTkx NS1vbmx5IHBhdGNoZXMKaXMgbm93IGluIGRybS1taXNjLgoKVGhhbmtzLCBEYW5pZWwKCj4gLS0t Cj4gIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ndHRfbWdyLmMgIHwgIDE2ICst Cj4gIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92cmFtX21nci5jIHwgIDIwICst Cj4gIGRyaXZlcnMvZ3B1L2RybS9hcm1hZGEvYXJtYWRhX2dlbS5jICAgICAgICAgIHwgICA0ICst Cj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYyAgICAgICAgICAgICAgICAgICAgIHwgNTExICsr KysrKysrKysrKysrKy0tLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX3ZtYV9tYW5h Z2VyLmMgICAgICAgICAgICB8ICAgMyArLQo+ICBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5h dml2X21tdS5jICAgICAgICB8ICAgOCArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bS5jICAgICAgICAgICAgICB8ICAxMCArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9ldmljdC5jICAgICAgICB8ICAgOSArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9leGVjYnVmZmVyLmMgICB8ICAgNSArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9ndHQuYyAgICAgICAgICB8ICAzOSArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9zdG9sZW4uYyAgICAgICB8ICAgNiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0u YyAgICAgICAgICAgICAgICB8ICAgMyArLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW1f dm1hLmMgICAgICAgICAgICB8ICAgMyArLQo+ICBkcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL3Rl c3QtZHJtX21tLmMgICAgICB8ICA1OCArKy0KPiAgZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfbW0u YyAgICAgICAgICAgICAgICAgfCAgIDYgKy0KPiAgZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5j ICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KPiAgZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9f bWFuYWdlci5jICAgICAgICAgfCAgMTggKy0KPiAgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0 Yy5jICAgICAgICAgICAgICAgfCAgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfaHZz LmMgICAgICAgICAgICAgICAgfCAgIDMgKy0KPiAgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxh bmUuYyAgICAgICAgICAgICAgfCAgIDYgKy0KPiAgZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfbW0u YyAgICAgICAgICAgICAgICAgfCAgIDQgKy0KPiAgZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdn ZnhfY21kYnVmLmMgICAgICAgfCAgMTAgKy0KPiAgaW5jbHVkZS9kcm0vZHJtX21tLmggICAgICAg ICAgICAgICAgICAgICAgICAgfCAxMzUgKysrLS0tLQo+ICAyMyBmaWxlcyBjaGFuZ2VkLCA0MzQg aW5zZXJ0aW9ucygrKSwgNDQ5IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ3R0X21nci5jIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X2d0dF9tZ3IuYwo+IGluZGV4IDAwZjQ2YjBlMDc2ZC4uZDg0MWZjYjJl NzA5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ndHRf bWdyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ3R0X21nci5j Cj4gQEAgLTk3LDggKzk3LDcgQEAgaW50IGFtZGdwdV9ndHRfbWdyX2FsbG9jKHN0cnVjdCB0dG1f bWVtX3R5cGVfbWFuYWdlciAqbWFuLAo+ICB7Cj4gIAlzdHJ1Y3QgYW1kZ3B1X2d0dF9tZ3IgKm1n ciA9IG1hbi0+cHJpdjsKPiAgCXN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSA9IG1lbS0+bW1fbm9k ZTsKPiAtCWVudW0gZHJtX21tX3NlYXJjaF9mbGFncyBzZmxhZ3MgPSBEUk1fTU1fU0VBUkNIX0JF U1Q7Cj4gLQllbnVtIGRybV9tbV9hbGxvY2F0b3JfZmxhZ3MgYWZsYWdzID0gRFJNX01NX0NSRUFU RV9ERUZBVUxUOwo+ICsJZW51bSBkcm1fbW1faW5zZXJ0X21vZGUgbW9kZTsKPiAgCXVuc2lnbmVk IGxvbmcgZnBmbiwgbHBmbjsKPiAgCWludCByOwo+ICAKPiBAQCAtMTE1LDE1ICsxMTQsMTQgQEAg aW50IGFtZGdwdV9ndHRfbWdyX2FsbG9jKHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFu LAo+ICAJZWxzZQo+ICAJCWxwZm4gPSBtYW4tPnNpemU7Cj4gIAo+IC0JaWYgKHBsYWNlICYmIHBs YWNlLT5mbGFncyAmIFRUTV9QTF9GTEFHX1RPUERPV04pIHsKPiAtCQlzZmxhZ3MgPSBEUk1fTU1f U0VBUkNIX0JFTE9XOwo+IC0JCWFmbGFncyA9IERSTV9NTV9DUkVBVEVfVE9QOwo+IC0JfQo+ICsJ bW9kZSA9IERSTV9NTV9JTlNFUlRfQkVTVDsKPiArCWlmIChwbGFjZSAmJiBwbGFjZS0+bW9kZSAm IFRUTV9QTF9GTEFHX1RPUERPV04pCj4gKwkJbW9kZSA9IERSTV9NTV9JTlNFUlRfSElHSDsKPiAg Cj4gIAlzcGluX2xvY2soJm1nci0+bG9jayk7Cj4gLQlyID0gZHJtX21tX2luc2VydF9ub2RlX2lu X3JhbmdlX2dlbmVyaWMoJm1nci0+bW0sIG5vZGUsIG1lbS0+bnVtX3BhZ2VzLAo+IC0JCQkJCQlt ZW0tPnBhZ2VfYWxpZ25tZW50LCAwLAo+IC0JCQkJCQlmcGZuLCBscGZuLCBzZmxhZ3MsIGFmbGFn cyk7Cj4gKwlyID0gZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKCZtZ3ItPm1tLCBub2RlLAo+ ICsJCQkJCW1lbS0+bnVtX3BhZ2VzLCBtZW0tPnBhZ2VfYWxpZ25tZW50LCAwLAo+ICsJCQkJCWZw Zm4sIGxwZm4sIG1vZGUpOwo+ICAJc3Bpbl91bmxvY2soJm1nci0+bG9jayk7Cj4gIAo+ICAJaWYg KCFyKSB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92 cmFtX21nci5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZyYW1fbWdyLmMK PiBpbmRleCBkNzEwMjI2YTBmZmYuLjVmMTA2YWQ4MTVjZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdnJhbV9tZ3IuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92cmFtX21nci5jCj4gQEAgLTk3LDggKzk3LDcgQEAgc3Rh dGljIGludCBhbWRncHVfdnJhbV9tZ3JfbmV3KHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAq bWFuLAo+ICAJc3RydWN0IGFtZGdwdV92cmFtX21nciAqbWdyID0gbWFuLT5wcml2Owo+ICAJc3Ry dWN0IGRybV9tbSAqbW0gPSAmbWdyLT5tbTsKPiAgCXN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZXM7 Cj4gLQllbnVtIGRybV9tbV9zZWFyY2hfZmxhZ3Mgc2ZsYWdzID0gRFJNX01NX1NFQVJDSF9ERUZB VUxUOwo+IC0JZW51bSBkcm1fbW1fYWxsb2NhdG9yX2ZsYWdzIGFmbGFncyA9IERSTV9NTV9DUkVB VEVfREVGQVVMVDsKPiArCWVudW0gZHJtX21tX2luc2VydF9tb2RlIG1vZGU7Cj4gIAl1bnNpZ25l ZCBsb25nIGxwZm4sIG51bV9ub2RlcywgcGFnZXNfcGVyX25vZGUsIHBhZ2VzX2xlZnQ7Cj4gIAl1 bnNpZ25lZCBpOwo+ICAJaW50IHI7Cj4gQEAgLTEyMSwxMCArMTIwLDkgQEAgc3RhdGljIGludCBh bWRncHVfdnJhbV9tZ3JfbmV3KHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuLAo+ICAJ aWYgKCFub2RlcykKPiAgCQlyZXR1cm4gLUVOT01FTTsKPiAgCj4gLQlpZiAocGxhY2UtPmZsYWdz ICYgVFRNX1BMX0ZMQUdfVE9QRE9XTikgewo+IC0JCXNmbGFncyA9IERSTV9NTV9TRUFSQ0hfQkVM T1c7Cj4gLQkJYWZsYWdzID0gRFJNX01NX0NSRUFURV9UT1A7Cj4gLQl9Cj4gKwltb2RlID0gRFJN X01NX0lOU0VSVF9CRVNUOwo+ICsJaWYgKHBsYWNlLT5mbGFncyAmIFRUTV9QTF9GTEFHX1RPUERP V04pCj4gKwkJbW9kZSA9IERSTV9NTV9JTlNFUlRfSElHSDsKPiAgCj4gIAlwYWdlc19sZWZ0ID0g bWVtLT5udW1fcGFnZXM7Cj4gIAo+IEBAIC0xMzUsMTMgKzEzMywxMSBAQCBzdGF0aWMgaW50IGFt ZGdwdV92cmFtX21ncl9uZXcoc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sCj4gIAo+ ICAJCWlmIChwYWdlcyA9PSBwYWdlc19wZXJfbm9kZSkKPiAgCQkJYWxpZ25tZW50ID0gcGFnZXNf cGVyX25vZGU7Cj4gLQkJZWxzZQo+IC0JCQlzZmxhZ3MgfD0gRFJNX01NX1NFQVJDSF9CRVNUOwo+ ICAKPiAtCQlyID0gZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlX2dlbmVyaWMobW0sICZub2Rl c1tpXSwgcGFnZXMsCj4gLQkJCQkJCQlhbGlnbm1lbnQsIDAsCj4gLQkJCQkJCQlwbGFjZS0+ZnBm biwgbHBmbiwKPiAtCQkJCQkJCXNmbGFncywgYWZsYWdzKTsKPiArCQlyID0gZHJtX21tX2luc2Vy dF9ub2RlX2luX3JhbmdlKG1tLCAmbm9kZXNbaV0sCj4gKwkJCQkJCXBhZ2VzLCBhbGlnbm1lbnQs IDAsCj4gKwkJCQkJCXBsYWNlLT5mcGZuLCBscGZuLAo+ICsJCQkJCQltb2RlKTsKPiAgCQlpZiAo dW5saWtlbHkocikpCj4gIAkJCWdvdG8gZXJyb3I7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vYXJtYWRhL2FybWFkYV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hcm1hZGEvYXJt YWRhX2dlbS5jCj4gaW5kZXggNzY4MDg3ZGRiMDQ2Li42NWIwMjliYzg0YjUgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2FybWFkYS9hcm1hZGFfZ2VtLmMKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vYXJtYWRhL2FybWFkYV9nZW0uYwo+IEBAIC0xNDksOCArMTQ5LDggQEAgYXJtYWRhX2dl bV9saW5lYXJfYmFjayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgYXJtYWRhX2dlbV9v YmplY3QgKm9iaikKPiAgCQkJcmV0dXJuIC1FTk9TUEM7Cj4gIAo+ICAJCW11dGV4X2xvY2soJnBy aXYtPmxpbmVhcl9sb2NrKTsKPiAtCQlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGUoJnByaXYtPmxp bmVhciwgbm9kZSwgc2l6ZSwgYWxpZ24sCj4gLQkJCQkJIERSTV9NTV9TRUFSQ0hfREVGQVVMVCk7 Cj4gKwkJcmV0ID0gZHJtX21tX2luc2VydF9ub2RlX2dlbmVyaWMoJnByaXYtPmxpbmVhciwgbm9k ZSwKPiArCQkJCQkJIHNpemUsIGFsaWduLCAwLCAwKTsKPiAgCQltdXRleF91bmxvY2soJnByaXYt PmxpbmVhcl9sb2NrKTsKPiAgCQlpZiAocmV0KSB7Cj4gIAkJCWtmcmVlKG5vZGUpOwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21t LmMKPiBpbmRleCA1OGE3ZTNiYmUxMzAuLjk2MGM5Y2Q3ZGMyMyAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX21tLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKPiBA QCAtOTIsMTQgKzkyLDYgQEAKPiAgICogc29tZSBiYXNpYyBhbGxvY2F0b3IgZHVtcGVycyBmb3Ig ZGVidWdnaW5nLgo+ICAgKi8KPiAgCj4gLXN0YXRpYyBzdHJ1Y3QgZHJtX21tX25vZGUgKmRybV9t bV9zZWFyY2hfZnJlZV9pbl9yYW5nZV9nZW5lcmljKGNvbnN0IHN0cnVjdCBkcm1fbW0gKm1tLAo+ IC0JCQkJCQl1NjQgc2l6ZSwKPiAtCQkJCQkJdTY0IGFsaWdubWVudCwKPiAtCQkJCQkJdW5zaWdu ZWQgbG9uZyBjb2xvciwKPiAtCQkJCQkJdTY0IHN0YXJ0LAo+IC0JCQkJCQl1NjQgZW5kLAo+IC0J CQkJCQllbnVtIGRybV9tbV9zZWFyY2hfZmxhZ3MgZmxhZ3MpOwo+IC0KPiAgI2lmZGVmIENPTkZJ R19EUk1fREVCVUdfTU0KPiAgI2luY2x1ZGUgPGxpbnV4L3N0YWNrZGVwb3QuaD4KPiAgCj4gQEAg LTIyMSw2OSArMjEzLDQ3IEBAIHN0YXRpYyB2b2lkIGRybV9tbV9pbnRlcnZhbF90cmVlX2FkZF9u b2RlKHN0cnVjdCBkcm1fbW1fbm9kZSAqaG9sZV9ub2RlLAo+ICAJCQkgICAgJmRybV9tbV9pbnRl cnZhbF90cmVlX2F1Z21lbnQpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBkcm1fbW1faW5zZXJ0 X2hlbHBlcihzdHJ1Y3QgZHJtX21tX25vZGUgKmhvbGVfbm9kZSwKPiAtCQkJCSBzdHJ1Y3QgZHJt X21tX25vZGUgKm5vZGUsCj4gLQkJCQkgdTY0IHNpemUsIHU2NCBhbGlnbm1lbnQsCj4gLQkJCQkg dW5zaWduZWQgbG9uZyBjb2xvciwKPiAtCQkJCSB1NjQgcmFuZ2Vfc3RhcnQsIHU2NCByYW5nZV9l bmQsCj4gLQkJCQkgZW51bSBkcm1fbW1fYWxsb2NhdG9yX2ZsYWdzIGZsYWdzKQo+ICsjZGVmaW5l IFJCX0lOU0VSVChyb290LCBtZW1iZXIsIGV4cHIpIGRvIHsgXAo+ICsJc3RydWN0IHJiX25vZGUg KipsaW5rID0gJnJvb3QucmJfbm9kZSwgKnJiID0gTlVMTDsgXAo+ICsJdTY0IHggPSBleHByKG5v ZGUpOyBcCj4gKwl3aGlsZSAoKmxpbmspIHsgXAo+ICsJCXJiID0gKmxpbms7IFwKPiArCQlpZiAo eCA8IGV4cHIocmJfZW50cnkocmIsIHN0cnVjdCBkcm1fbW1fbm9kZSwgbWVtYmVyKSkpIFwKPiAr CQkJbGluayA9ICZyYi0+cmJfbGVmdDsgXAo+ICsJCWVsc2UgXAo+ICsJCQlsaW5rID0gJnJiLT5y Yl9yaWdodDsgXAo+ICsJfSBcCj4gKwlyYl9saW5rX25vZGUoJm5vZGUtPm1lbWJlciwgcmIsIGxp bmspOyBcCj4gKwlyYl9pbnNlcnRfY29sb3IoJm5vZGUtPm1lbWJlciwgJnJvb3QpOyBcCj4gK30g d2hpbGUgKDApCj4gKwo+ICsjZGVmaW5lIEhPTEVfU0laRShOT0RFKSAoKE5PREUpLT5ob2xlX3Np emUpCj4gKyNkZWZpbmUgSE9MRV9BRERSKE5PREUpIChfX2RybV9tbV9ob2xlX25vZGVfc3RhcnQo Tk9ERSkpCj4gKwo+ICtzdGF0aWMgdm9pZCBhZGRfaG9sZShzdHJ1Y3QgZHJtX21tX25vZGUgKm5v ZGUpCj4gIHsKPiAtCXN0cnVjdCBkcm1fbW0gKm1tID0gaG9sZV9ub2RlLT5tbTsKPiAtCXU2NCBo b2xlX3N0YXJ0ID0gZHJtX21tX2hvbGVfbm9kZV9zdGFydChob2xlX25vZGUpOwo+IC0JdTY0IGhv bGVfZW5kID0gZHJtX21tX2hvbGVfbm9kZV9lbmQoaG9sZV9ub2RlKTsKPiAtCXU2NCBhZGpfc3Rh cnQgPSBob2xlX3N0YXJ0Owo+IC0JdTY0IGFkal9lbmQgPSBob2xlX2VuZDsKPiAtCj4gLQlEUk1f TU1fQlVHX09OKCFkcm1fbW1faG9sZV9mb2xsb3dzKGhvbGVfbm9kZSkgfHwgbm9kZS0+YWxsb2Nh dGVkKTsKPiAtCj4gLQlpZiAobW0tPmNvbG9yX2FkanVzdCkKPiAtCQltbS0+Y29sb3JfYWRqdXN0 KGhvbGVfbm9kZSwgY29sb3IsICZhZGpfc3RhcnQsICZhZGpfZW5kKTsKPiAtCj4gLQlhZGpfc3Rh cnQgPSBtYXgoYWRqX3N0YXJ0LCByYW5nZV9zdGFydCk7Cj4gLQlhZGpfZW5kID0gbWluKGFkal9l bmQsIHJhbmdlX2VuZCk7Cj4gLQo+IC0JaWYgKGZsYWdzICYgRFJNX01NX0NSRUFURV9UT1ApCj4g LQkJYWRqX3N0YXJ0ID0gYWRqX2VuZCAtIHNpemU7Cj4gLQo+IC0JaWYgKGFsaWdubWVudCkgewo+ IC0JCXU2NCByZW07Cj4gLQo+IC0JCWRpdjY0X3U2NF9yZW0oYWRqX3N0YXJ0LCBhbGlnbm1lbnQs ICZyZW0pOwo+IC0JCWlmIChyZW0pIHsKPiAtCQkJaWYgKGZsYWdzICYgRFJNX01NX0NSRUFURV9U T1ApCj4gLQkJCQlhZGpfc3RhcnQgLT0gcmVtOwo+IC0JCQllbHNlCj4gLQkJCQlhZGpfc3RhcnQg Kz0gYWxpZ25tZW50IC0gcmVtOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlpZiAoYWRqX3N0YXJ0ID09 IGhvbGVfc3RhcnQpIHsKPiAtCQlob2xlX25vZGUtPmhvbGVfZm9sbG93cyA9IDA7Cj4gLQkJbGlz dF9kZWwoJmhvbGVfbm9kZS0+aG9sZV9zdGFjayk7Cj4gLQl9Cj4gKwlzdHJ1Y3QgZHJtX21tICpt bSA9IG5vZGUtPm1tOwo+ICAKPiAtCW5vZGUtPnN0YXJ0ID0gYWRqX3N0YXJ0Owo+IC0Jbm9kZS0+ c2l6ZSA9IHNpemU7Cj4gLQlub2RlLT5tbSA9IG1tOwo+IC0Jbm9kZS0+Y29sb3IgPSBjb2xvcjsK PiAtCW5vZGUtPmFsbG9jYXRlZCA9IDE7Cj4gKwlub2RlLT5ob2xlX3NpemUgPQo+ICsJCV9fZHJt X21tX2hvbGVfbm9kZV9lbmQobm9kZSkgLSBfX2RybV9tbV9ob2xlX25vZGVfc3RhcnQobm9kZSk7 Cj4gKwlEUk1fTU1fQlVHX09OKCFkcm1fbW1faG9sZV9mb2xsb3dzKG5vZGUpKTsKPiAgCj4gLQls aXN0X2FkZCgmbm9kZS0+bm9kZV9saXN0LCAmaG9sZV9ub2RlLT5ub2RlX2xpc3QpOwo+ICsJUkJf SU5TRVJUKG1tLT5ob2xlc19zaXplLCByYl9ob2xlX3NpemUsIEhPTEVfU0laRSk7Cj4gKwlSQl9J TlNFUlQobW0tPmhvbGVzX2FkZHIsIHJiX2hvbGVfYWRkciwgSE9MRV9BRERSKTsKPiAgCj4gLQlk cm1fbW1faW50ZXJ2YWxfdHJlZV9hZGRfbm9kZShob2xlX25vZGUsIG5vZGUpOwo+ICsJbGlzdF9h ZGQoJm5vZGUtPmhvbGVfc3RhY2ssICZtbS0+aG9sZV9zdGFjayk7Cj4gK30KPiAgCj4gLQlEUk1f TU1fQlVHX09OKG5vZGUtPnN0YXJ0IDwgcmFuZ2Vfc3RhcnQpOwo+IC0JRFJNX01NX0JVR19PTihu b2RlLT5zdGFydCA8IGFkal9zdGFydCk7Cj4gLQlEUk1fTU1fQlVHX09OKG5vZGUtPnN0YXJ0ICsg bm9kZS0+c2l6ZSA+IGFkal9lbmQpOwo+IC0JRFJNX01NX0JVR19PTihub2RlLT5zdGFydCArIG5v ZGUtPnNpemUgPiByYW5nZV9lbmQpOwo+ICtzdGF0aWMgdm9pZCBybV9ob2xlKHN0cnVjdCBkcm1f bW1fbm9kZSAqbm9kZSkKPiArewo+ICsJRFJNX01NX0JVR19PTighZHJtX21tX2hvbGVfZm9sbG93 cyhub2RlKSk7Cj4gIAo+IC0Jbm9kZS0+aG9sZV9mb2xsb3dzID0gMDsKPiAtCWlmIChfX2RybV9t bV9ob2xlX25vZGVfc3RhcnQobm9kZSkgPCBob2xlX2VuZCkgewo+IC0JCWxpc3RfYWRkKCZub2Rl LT5ob2xlX3N0YWNrLCAmbW0tPmhvbGVfc3RhY2spOwo+IC0JCW5vZGUtPmhvbGVfZm9sbG93cyA9 IDE7Cj4gLQl9Cj4gKwlsaXN0X2RlbCgmbm9kZS0+aG9sZV9zdGFjayk7Cj4gKwlyYl9lcmFzZSgm bm9kZS0+cmJfaG9sZV9zaXplLCAmbm9kZS0+bW0tPmhvbGVzX3NpemUpOwo+ICsJcmJfZXJhc2Uo Jm5vZGUtPnJiX2hvbGVfYWRkciwgJm5vZGUtPm1tLT5ob2xlc19hZGRyKTsKPiArCW5vZGUtPmhv bGVfc2l6ZSA9IDA7Cj4gIAo+IC0Jc2F2ZV9zdGFjayhub2RlKTsKPiArCURSTV9NTV9CVUdfT04o ZHJtX21tX2hvbGVfZm9sbG93cyhub2RlKSk7Cj4gIH0KPiAgCj4gIC8qKgo+IEBAIC0zMTMsNyAr MjgzLDcgQEAgaW50IGRybV9tbV9yZXNlcnZlX25vZGUoc3RydWN0IGRybV9tbSAqbW0sIHN0cnVj dCBkcm1fbW1fbm9kZSAqbm9kZSkKPiAgCj4gIAkvKiBGaW5kIHRoZSByZWxldmFudCBob2xlIHRv IGFkZCBvdXIgbm9kZSB0byAqLwo+ICAJaG9sZSA9IGRybV9tbV9pbnRlcnZhbF90cmVlX2l0ZXJf Zmlyc3QoJm1tLT5pbnRlcnZhbF90cmVlLAo+IC0JCQkJCSAgICAgICBub2RlLT5zdGFydCwgfih1 NjQpMCk7Cj4gKwkJCQkJICAgICAgIG5vZGUtPnN0YXJ0LCBVNjRfTUFYKTsKPiAgCWlmIChob2xl KSB7Cj4gIAkJaWYgKGhvbGUtPnN0YXJ0IDwgZW5kKQo+ICAJCQlyZXR1cm4gLUVOT1NQQzsKPiBA QCAtMzIxLDEyICsyOTEsMTIgQEAgaW50IGRybV9tbV9yZXNlcnZlX25vZGUoc3RydWN0IGRybV9t bSAqbW0sIHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSkKPiAgCQlob2xlID0gbGlzdF9lbnRyeShk cm1fbW1fbm9kZXMobW0pLCB0eXBlb2YoKmhvbGUpLCBub2RlX2xpc3QpOwo+ICAJfQo+ICAKPiAt CWhvbGUgPSBsaXN0X2xhc3RfZW50cnkoJmhvbGUtPm5vZGVfbGlzdCwgdHlwZW9mKCpob2xlKSwg bm9kZV9saXN0KTsKPiArCWhvbGUgPSBsaXN0X3ByZXZfZW50cnkoaG9sZSwgbm9kZV9saXN0KTsK PiAgCWlmICghZHJtX21tX2hvbGVfZm9sbG93cyhob2xlKSkKPiAgCQlyZXR1cm4gLUVOT1NQQzsK PiAgCj4gIAlhZGpfc3RhcnQgPSBob2xlX3N0YXJ0ID0gX19kcm1fbW1faG9sZV9ub2RlX3N0YXJ0 KGhvbGUpOwo+IC0JYWRqX2VuZCA9IGhvbGVfZW5kID0gX19kcm1fbW1faG9sZV9ub2RlX2VuZCho b2xlKTsKPiArCWFkal9lbmQgPSBob2xlX2VuZCA9IGhvbGVfc3RhcnQgKyBob2xlLT5ob2xlX3Np emU7Cj4gIAo+ICAJaWYgKG1tLT5jb2xvcl9hZGp1c3QpCj4gIAkJbW0tPmNvbG9yX2FkanVzdCho b2xlLCBub2RlLT5jb2xvciwgJmFkal9zdGFydCwgJmFkal9lbmQpOwo+IEBAIC0zMzUsMzEgKzMw NSwxMjggQEAgaW50IGRybV9tbV9yZXNlcnZlX25vZGUoc3RydWN0IGRybV9tbSAqbW0sIHN0cnVj dCBkcm1fbW1fbm9kZSAqbm9kZSkKPiAgCQlyZXR1cm4gLUVOT1NQQzsKPiAgCj4gIAlub2RlLT5t bSA9IG1tOwo+IC0Jbm9kZS0+YWxsb2NhdGVkID0gMTsKPiAgCj4gIAlsaXN0X2FkZCgmbm9kZS0+ bm9kZV9saXN0LCAmaG9sZS0+bm9kZV9saXN0KTsKPiAtCj4gIAlkcm1fbW1faW50ZXJ2YWxfdHJl ZV9hZGRfbm9kZShob2xlLCBub2RlKTsKPiArCW5vZGUtPmFsbG9jYXRlZCA9IHRydWU7Cj4gKwlu b2RlLT5ob2xlX3NpemUgPSAwOwo+ICsKPiArCXJtX2hvbGUoaG9sZSk7Cj4gKwlpZiAobm9kZS0+ c3RhcnQgPiBob2xlX3N0YXJ0KQo+ICsJCWFkZF9ob2xlKGhvbGUpOwo+ICsJaWYgKGVuZCA8IGhv bGVfZW5kKQo+ICsJCWFkZF9ob2xlKG5vZGUpOwo+ICsKPiArCXNhdmVfc3RhY2sobm9kZSk7Cj4g KwlyZXR1cm4gMDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9tbV9yZXNlcnZlX25vZGUpOwo+ ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX21tX25vZGUgKnJiX2hvbGVfc2l6ZV90b19u b2RlKHN0cnVjdCByYl9ub2RlICpyYikKPiArewo+ICsJcmV0dXJuIHJiX2VudHJ5X3NhZmUocmIs IHN0cnVjdCBkcm1fbW1fbm9kZSwgcmJfaG9sZV9zaXplKTsKPiArfQo+ICsKPiArc3RhdGljIGlu bGluZSBzdHJ1Y3QgZHJtX21tX25vZGUgKnJiX2hvbGVfYWRkcl90b19ub2RlKHN0cnVjdCByYl9u b2RlICpyYikKPiArewo+ICsJcmV0dXJuIHJiX2VudHJ5X3NhZmUocmIsIHN0cnVjdCBkcm1fbW1f bm9kZSwgcmJfaG9sZV9hZGRyKTsKPiArfQo+ICAKPiAtCWlmIChub2RlLT5zdGFydCA9PSBob2xl X3N0YXJ0KSB7Cj4gLQkJaG9sZS0+aG9sZV9mb2xsb3dzID0gMDsKPiAtCQlsaXN0X2RlbCgmaG9s ZS0+aG9sZV9zdGFjayk7Cj4gK3N0YXRpYyBpbmxpbmUgdTY0IHJiX2hvbGVfc2l6ZShzdHJ1Y3Qg cmJfbm9kZSAqcmIpCj4gK3sKPiArCXJldHVybiByYl9lbnRyeShyYiwgc3RydWN0IGRybV9tbV9u b2RlLCByYl9ob2xlX3NpemUpLT5ob2xlX3NpemU7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3Qg ZHJtX21tX25vZGUgKmJlc3RfaG9sZShzdHJ1Y3QgZHJtX21tICptbSwgdTY0IHNpemUpCj4gK3sK PiArCXN0cnVjdCByYl9ub2RlICpiZXN0ID0gTlVMTDsKPiArCXN0cnVjdCByYl9ub2RlICoqbGlu ayA9ICZtbS0+aG9sZXNfc2l6ZS5yYl9ub2RlOwo+ICsKPiArCXdoaWxlICgqbGluaykgewo+ICsJ CXN0cnVjdCByYl9ub2RlICpyYiA9ICpsaW5rOwo+ICsJCWlmIChzaXplIDw9IHJiX2hvbGVfc2l6 ZShyYikpIHsKPiArCQkJbGluayA9ICZyYi0+cmJfbGVmdDsKPiArCQkJYmVzdCA9IHJiOwo+ICsJ CX0gZWxzZSB7Cj4gKwkJCWxpbmsgPSAmcmItPnJiX3JpZ2h0Owo+ICsJCX0KPiAgCX0KPiAgCj4g LQlub2RlLT5ob2xlX2ZvbGxvd3MgPSAwOwo+IC0JaWYgKGVuZCAhPSBob2xlX2VuZCkgewo+IC0J CWxpc3RfYWRkKCZub2RlLT5ob2xlX3N0YWNrLCAmbW0tPmhvbGVfc3RhY2spOwo+IC0JCW5vZGUt PmhvbGVfZm9sbG93cyA9IDE7Cj4gKwlyZXR1cm4gcmJfaG9sZV9zaXplX3RvX25vZGUoYmVzdCk7 Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX21tX25vZGUgKmZpbmRfaG9sZShzdHJ1Y3Qg ZHJtX21tICptbSwgdTY0IGFkZHIpCj4gK3sKPiArCXN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSA9 IE5VTEw7Cj4gKwlzdHJ1Y3QgcmJfbm9kZSAqKmxpbmsgPSAmbW0tPmhvbGVzX2FkZHIucmJfbm9k ZTsKPiArCj4gKwl3aGlsZSAoKmxpbmspIHsKPiArCQl1NjQgaG9sZV9zdGFydDsKPiArCj4gKwkJ bm9kZSA9IHJiX2hvbGVfYWRkcl90b19ub2RlKCpsaW5rKTsKPiArCQlob2xlX3N0YXJ0ID0gX19k cm1fbW1faG9sZV9ub2RlX3N0YXJ0KG5vZGUpOwo+ICsKPiArCQlpZiAoYWRkciA8IGhvbGVfc3Rh cnQpCj4gKwkJCWxpbmsgPSAmbm9kZS0+cmJfaG9sZV9hZGRyLnJiX2xlZnQ7Cj4gKwkJZWxzZSBp ZiAoYWRkciA+IGhvbGVfc3RhcnQgKyBub2RlLT5ob2xlX3NpemUpCj4gKwkJCWxpbmsgPSAmbm9k ZS0+cmJfaG9sZV9hZGRyLnJiX3JpZ2h0Owo+ICsJCWVsc2UKPiArCQkJYnJlYWs7Cj4gIAl9Cj4g IAo+IC0Jc2F2ZV9zdGFjayhub2RlKTsKPiArCXJldHVybiBub2RlOwo+ICt9Cj4gIAo+IC0JcmV0 dXJuIDA7Cj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX21tX25vZGUgKgo+ICtmaXJzdF9ob2xlKHN0cnVj dCBkcm1fbW0gKm1tLAo+ICsJICAgdTY0IHN0YXJ0LCB1NjQgZW5kLCB1NjQgc2l6ZSwKPiArCSAg IGVudW0gZHJtX21tX2luc2VydF9tb2RlIG1vZGUpCj4gK3sKPiArCWlmIChSQl9FTVBUWV9ST09U KCZtbS0+aG9sZXNfc2l6ZSkpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJc3dpdGNoIChtb2Rl KSB7Cj4gKwlkZWZhdWx0Ogo+ICsJY2FzZSBEUk1fTU1fSU5TRVJUX0JFU1Q6Cj4gKwkJcmV0dXJu IGJlc3RfaG9sZShtbSwgc2l6ZSk7Cj4gKwo+ICsJY2FzZSBEUk1fTU1fSU5TRVJUX0xPVzoKPiAr CQlyZXR1cm4gZmluZF9ob2xlKG1tLCBzdGFydCk7Cj4gKwo+ICsJY2FzZSBEUk1fTU1fSU5TRVJU X0hJR0g6Cj4gKwkJcmV0dXJuIGZpbmRfaG9sZShtbSwgZW5kKTsKPiArCj4gKwljYXNlIERSTV9N TV9JTlNFUlRfRVZJQ1Q6Cj4gKwkJcmV0dXJuIGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmbW0t PmhvbGVfc3RhY2ssCj4gKwkJCQkJCXN0cnVjdCBkcm1fbW1fbm9kZSwKPiArCQkJCQkJaG9sZV9z dGFjayk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX21tX25vZGUgKgo+ICtu ZXh0X2hvbGUoc3RydWN0IGRybV9tbSAqbW0sCj4gKwkgIHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9k ZSwKPiArCSAgZW51bSBkcm1fbW1faW5zZXJ0X21vZGUgbW9kZSkKPiArewo+ICsJc3dpdGNoICht b2RlKSB7Cj4gKwlkZWZhdWx0Ogo+ICsJY2FzZSBEUk1fTU1fSU5TRVJUX0JFU1Q6Cj4gKwkJcmV0 dXJuIHJiX2hvbGVfc2l6ZV90b19ub2RlKHJiX25leHQoJm5vZGUtPnJiX2hvbGVfc2l6ZSkpOwo+ ICsKPiArCWNhc2UgRFJNX01NX0lOU0VSVF9MT1c6Cj4gKwkJcmV0dXJuIHJiX2hvbGVfYWRkcl90 b19ub2RlKHJiX25leHQoJm5vZGUtPnJiX2hvbGVfYWRkcikpOwo+ICsKPiArCWNhc2UgRFJNX01N X0lOU0VSVF9ISUdIOgo+ICsJCXJldHVybiByYl9ob2xlX2FkZHJfdG9fbm9kZShyYl9wcmV2KCZu b2RlLT5yYl9ob2xlX2FkZHIpKTsKPiArCj4gKwljYXNlIERSTV9NTV9JTlNFUlRfRVZJQ1Q6Cj4g KwkJbm9kZSA9IGxpc3RfbmV4dF9lbnRyeShub2RlLCBob2xlX3N0YWNrKTsKPiArCQlyZXR1cm4g Jm5vZGUtPmhvbGVfc3RhY2sgPT0gJm1tLT5ob2xlX3N0YWNrID8gTlVMTCA6IG5vZGU7Cj4gKwl9 Cj4gIH0KPiAtRVhQT1JUX1NZTUJPTChkcm1fbW1fcmVzZXJ2ZV9ub2RlKTsKPiAgCj4gIC8qKgo+ IC0gKiBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYyAtIHJhbmdlZCBzZWFyY2gg Zm9yIHNwYWNlIGFuZCBpbnNlcnQgQG5vZGUKPiArICogZHJtX21tX2luc2VydF9ub2RlX2luX3Jh bmdlIC0gcmFuZ2VkIHNlYXJjaCBmb3Igc3BhY2UgYW5kIGluc2VydCBAbm9kZQo+ICAgKiBAbW06 IGRybV9tbSB0byBhbGxvY2F0ZSBmcm9tCj4gICAqIEBub2RlOiBwcmVhbGxvY2F0ZSBub2RlIHRv IGluc2VydAo+ICAgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgYWxsb2NhdGlvbgo+IEBAIC0zNjcsMzgg KzQzNCwxMDQgQEAgRVhQT1JUX1NZTUJPTChkcm1fbW1fcmVzZXJ2ZV9ub2RlKTsKPiAgICogQGNv bG9yOiBvcGFxdWUgdGFnIHZhbHVlIHRvIHVzZSBmb3IgdGhpcyBub2RlCj4gICAqIEBzdGFydDog c3RhcnQgb2YgdGhlIGFsbG93ZWQgcmFuZ2UgZm9yIHRoaXMgbm9kZQo+ICAgKiBAZW5kOiBlbmQg b2YgdGhlIGFsbG93ZWQgcmFuZ2UgZm9yIHRoaXMgbm9kZQo+IC0gKiBAc2ZsYWdzOiBmbGFncyB0 byBmaW5lLXR1bmUgdGhlIGFsbG9jYXRpb24gc2VhcmNoCj4gLSAqIEBhZmxhZ3M6IGZsYWdzIHRv IGZpbmUtdHVuZSB0aGUgYWxsb2NhdGlvbiBiZWhhdmlvcgo+ICsgKiBAbW9kZTogZmluZS10dW5l IHRoZSBhbGxvY2F0aW9uIHNlYXJjaCBhbmQgcGxhY2VtZW50Cj4gICAqCj4gICAqIFRoZSBwcmVh bGxvY2F0ZWQgbm9kZSBtdXN0IGJlIGNsZWFyZWQgdG8gMC4KPiAgICoKPiAgICogUmV0dXJuczoK PiAgICogMCBvbiBzdWNjZXNzLCAtRU5PU1BDIGlmIHRoZXJlJ3Mgbm8gc3VpdGFibGUgaG9sZS4K PiAgICovCj4gLWludCBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYyhzdHJ1Y3Qg ZHJtX21tICptbSwgc3RydWN0IGRybV9tbV9ub2RlICpub2RlLAo+IC0JCQkJCXU2NCBzaXplLCB1 NjQgYWxpZ25tZW50LAo+IC0JCQkJCXVuc2lnbmVkIGxvbmcgY29sb3IsCj4gLQkJCQkJdTY0IHN0 YXJ0LCB1NjQgZW5kLAo+IC0JCQkJCWVudW0gZHJtX21tX3NlYXJjaF9mbGFncyBzZmxhZ3MsCj4g LQkJCQkJZW51bSBkcm1fbW1fYWxsb2NhdG9yX2ZsYWdzIGFmbGFncykKPiAraW50IGRybV9tbV9p bnNlcnRfbm9kZV9pbl9yYW5nZShzdHJ1Y3QgZHJtX21tICogY29uc3QgbW0sCj4gKwkJCQlzdHJ1 Y3QgZHJtX21tX25vZGUgKiBjb25zdCBub2RlLAo+ICsJCQkJdTY0IHNpemUsIHU2NCBhbGlnbm1l bnQsCj4gKwkJCQl1bnNpZ25lZCBsb25nIGNvbG9yLAo+ICsJCQkJdTY0IHJhbmdlX3N0YXJ0LCB1 NjQgcmFuZ2VfZW5kLAo+ICsJCQkJZW51bSBkcm1fbW1faW5zZXJ0X21vZGUgbW9kZSkKPiAgewo+ IC0Jc3RydWN0IGRybV9tbV9ub2RlICpob2xlX25vZGU7Cj4gKwlzdHJ1Y3QgZHJtX21tX25vZGUg KmhvbGU7Cj4gKwl1NjQgcmVtYWluZGVyX21hc2s7Cj4gIAo+IC0JaWYgKFdBUk5fT04oc2l6ZSA9 PSAwKSkKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiArCURSTV9NTV9CVUdfT04ocmFuZ2Vfc3RhcnQg Pj0gcmFuZ2VfZW5kKTsKPiAgCj4gLQlob2xlX25vZGUgPSBkcm1fbW1fc2VhcmNoX2ZyZWVfaW5f cmFuZ2VfZ2VuZXJpYyhtbSwKPiAtCQkJCQkJCXNpemUsIGFsaWdubWVudCwgY29sb3IsCj4gLQkJ CQkJCQlzdGFydCwgZW5kLCBzZmxhZ3MpOwo+IC0JaWYgKCFob2xlX25vZGUpCj4gKwlpZiAodW5s aWtlbHkoc2l6ZSA9PSAwIHx8IHJhbmdlX2VuZCAtIHJhbmdlX3N0YXJ0IDwgc2l6ZSkpCj4gIAkJ cmV0dXJuIC1FTk9TUEM7Cj4gIAo+IC0JZHJtX21tX2luc2VydF9oZWxwZXIoaG9sZV9ub2RlLCBu b2RlLAo+IC0JCQkgICAgIHNpemUsIGFsaWdubWVudCwgY29sb3IsCj4gLQkJCSAgICAgc3RhcnQs IGVuZCwgYWZsYWdzKTsKPiAtCXJldHVybiAwOwo+ICsJaWYgKGFsaWdubWVudCA8PSAxKQo+ICsJ CWFsaWdubWVudCA9IDA7Cj4gKwo+ICsJcmVtYWluZGVyX21hc2sgPSBpc19wb3dlcl9vZl8yKGFs aWdubWVudCkgPyBhbGlnbm1lbnQgLSAxIDogMDsKPiArCWZvciAoaG9sZSA9IGZpcnN0X2hvbGUo bW0sIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQsIHNpemUsIG1vZGUpOyBob2xlOwo+ICsJICAgICBo b2xlID0gbmV4dF9ob2xlKG1tLCBob2xlLCBtb2RlKSkgewo+ICsJCXU2NCBob2xlX3N0YXJ0ID0g X19kcm1fbW1faG9sZV9ub2RlX3N0YXJ0KGhvbGUpOwo+ICsJCXU2NCBob2xlX2VuZCA9IGhvbGVf c3RhcnQgKyBob2xlLT5ob2xlX3NpemU7Cj4gKwkJdTY0IGFkal9zdGFydCwgYWRqX2VuZDsKPiAr CQl1NjQgY29sX3N0YXJ0LCBjb2xfZW5kOwo+ICsKPiArCQlpZiAobW9kZSA9PSBEUk1fTU1fSU5T RVJUX0xPVyAmJiBob2xlX3N0YXJ0ID49IHJhbmdlX2VuZCkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJ CWlmIChtb2RlID09IERSTV9NTV9JTlNFUlRfSElHSCAmJiBob2xlX2VuZCA8PSByYW5nZV9zdGFy dCkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCWNvbF9zdGFydCA9IGhvbGVfc3RhcnQ7Cj4gKwkJY29s X2VuZCA9IGhvbGVfZW5kOwo+ICsJCWlmIChtbS0+Y29sb3JfYWRqdXN0KQo+ICsJCQltbS0+Y29s b3JfYWRqdXN0KGhvbGUsIGNvbG9yLCAmY29sX3N0YXJ0LCAmY29sX2VuZCk7Cj4gKwo+ICsJCWFk al9zdGFydCA9IG1heChjb2xfc3RhcnQsIHJhbmdlX3N0YXJ0KTsKPiArCQlhZGpfZW5kID0gbWlu KGNvbF9lbmQsIHJhbmdlX2VuZCk7Cj4gKwo+ICsJCWlmIChhZGpfZW5kIDw9IGFkal9zdGFydCB8 fCBhZGpfZW5kIC0gYWRqX3N0YXJ0IDwgc2l6ZSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWlm IChtb2RlID09IERSTV9NTV9JTlNFUlRfSElHSCkKPiArCQkJYWRqX3N0YXJ0ID0gYWRqX2VuZCAt IHNpemU7Cj4gKwo+ICsJCWlmIChhbGlnbm1lbnQpIHsKPiArCQkJdTY0IHJlbTsKPiArCj4gKwkJ CWlmIChsaWtlbHkocmVtYWluZGVyX21hc2spKQo+ICsJCQkJcmVtID0gYWRqX3N0YXJ0ICYgcmVt YWluZGVyX21hc2s7Cj4gKwkJCWVsc2UKPiArCQkJCWRpdjY0X3U2NF9yZW0oYWRqX3N0YXJ0LCBh bGlnbm1lbnQsICZyZW0pOwo+ICsJCQlpZiAocmVtKSB7Cj4gKwkJCQlhZGpfc3RhcnQgLT0gcmVt Owo+ICsJCQkJaWYgKG1vZGUgIT0gRFJNX01NX0lOU0VSVF9ISUdIKQo+ICsJCQkJCWFkal9zdGFy dCArPSBhbGlnbm1lbnQ7Cj4gKwo+ICsJCQkJaWYgKGFkal9zdGFydCA8IG1heChjb2xfc3RhcnQs IHJhbmdlX3N0YXJ0KSB8fAo+ICsJCQkJICAgIG1pbihjb2xfZW5kLCByYW5nZV9lbmQpIC0gYWRq X3N0YXJ0IDwgc2l6ZSkKPiArCQkJCQljb250aW51ZTsKPiArCj4gKwkJCQlpZiAoYWRqX2VuZCA8 PSBhZGpfc3RhcnQgfHwKPiArCQkJCSAgICBhZGpfZW5kIC0gYWRqX3N0YXJ0IDwgc2l6ZSkKPiAr CQkJCQljb250aW51ZTsKPiArCQkJfQo+ICsJCX0KPiArCj4gKwkJbm9kZS0+bW0gPSBtbTsKPiAr CQlub2RlLT5zaXplID0gc2l6ZTsKPiArCQlub2RlLT5zdGFydCA9IGFkal9zdGFydDsKPiArCQlu b2RlLT5jb2xvciA9IGNvbG9yOwo+ICsJCW5vZGUtPmhvbGVfc2l6ZSA9IDA7Cj4gKwo+ICsJCWxp c3RfYWRkKCZub2RlLT5ub2RlX2xpc3QsICZob2xlLT5ub2RlX2xpc3QpOwo+ICsJCWRybV9tbV9p bnRlcnZhbF90cmVlX2FkZF9ub2RlKGhvbGUsIG5vZGUpOwo+ICsJCW5vZGUtPmFsbG9jYXRlZCA9 IHRydWU7Cj4gKwo+ICsJCXJtX2hvbGUoaG9sZSk7Cj4gKwkJaWYgKGFkal9zdGFydCA+IGhvbGVf c3RhcnQpCj4gKwkJCWFkZF9ob2xlKGhvbGUpOwo+ICsJCWlmIChhZGpfc3RhcnQgKyBzaXplIDwg aG9sZV9lbmQpCj4gKwkJCWFkZF9ob2xlKG5vZGUpOwo+ICsKPiArCQlzYXZlX3N0YWNrKG5vZGUp Owo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCXJldHVybiAtRU5PU1BDOwo+ICB9Cj4gLUVY UE9SVF9TWU1CT0woZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlX2dlbmVyaWMpOwo+ICtFWFBP UlRfU1lNQk9MKGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZSk7Cj4gIAo+ICAvKioKPiAgICog ZHJtX21tX3JlbW92ZV9ub2RlIC0gUmVtb3ZlIGEgbWVtb3J5IG5vZGUgZnJvbSB0aGUgYWxsb2Nh dG9yLgo+IEBAIC00MTYsOTIgKzU0OSwyMCBAQCB2b2lkIGRybV9tbV9yZW1vdmVfbm9kZShzdHJ1 Y3QgZHJtX21tX25vZGUgKm5vZGUpCj4gIAlEUk1fTU1fQlVHX09OKCFub2RlLT5hbGxvY2F0ZWQp Owo+ICAJRFJNX01NX0JVR19PTihub2RlLT5zY2FubmVkX2Jsb2NrKTsKPiAgCj4gLQlwcmV2X25v ZGUgPQo+IC0JICAgIGxpc3RfZW50cnkobm9kZS0+bm9kZV9saXN0LnByZXYsIHN0cnVjdCBkcm1f bW1fbm9kZSwgbm9kZV9saXN0KTsKPiAtCj4gLQlpZiAoZHJtX21tX2hvbGVfZm9sbG93cyhub2Rl KSkgewo+IC0JCURSTV9NTV9CVUdfT04oX19kcm1fbW1faG9sZV9ub2RlX3N0YXJ0KG5vZGUpID09 Cj4gLQkJCSAgICAgIF9fZHJtX21tX2hvbGVfbm9kZV9lbmQobm9kZSkpOwo+IC0JCWxpc3RfZGVs KCZub2RlLT5ob2xlX3N0YWNrKTsKPiAtCX0gZWxzZSB7Cj4gLQkJRFJNX01NX0JVR19PTihfX2Ry bV9tbV9ob2xlX25vZGVfc3RhcnQobm9kZSkgIT0KPiAtCQkJICAgICAgX19kcm1fbW1faG9sZV9u b2RlX2VuZChub2RlKSk7Cj4gLQl9Cj4gKwlwcmV2X25vZGUgPSBsaXN0X3ByZXZfZW50cnkobm9k ZSwgbm9kZV9saXN0KTsKPiAgCj4gLQlpZiAoIWRybV9tbV9ob2xlX2ZvbGxvd3MocHJldl9ub2Rl KSkgewo+IC0JCXByZXZfbm9kZS0+aG9sZV9mb2xsb3dzID0gMTsKPiAtCQlsaXN0X2FkZCgmcHJl dl9ub2RlLT5ob2xlX3N0YWNrLCAmbW0tPmhvbGVfc3RhY2spOwo+IC0JfSBlbHNlCj4gLQkJbGlz dF9tb3ZlKCZwcmV2X25vZGUtPmhvbGVfc3RhY2ssICZtbS0+aG9sZV9zdGFjayk7Cj4gKwlpZiAo ZHJtX21tX2hvbGVfZm9sbG93cyhub2RlKSkKPiArCQlybV9ob2xlKG5vZGUpOwo+ICAKPiAgCWRy bV9tbV9pbnRlcnZhbF90cmVlX3JlbW92ZShub2RlLCAmbW0tPmludGVydmFsX3RyZWUpOwo+ICAJ bGlzdF9kZWwoJm5vZGUtPm5vZGVfbGlzdCk7Cj4gLQlub2RlLT5hbGxvY2F0ZWQgPSAwOwo+IC19 Cj4gLUVYUE9SVF9TWU1CT0woZHJtX21tX3JlbW92ZV9ub2RlKTsKPiAtCj4gLXN0YXRpYyBpbnQg Y2hlY2tfZnJlZV9ob2xlKHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IHNpemUsIHU2NCBhbGlnbm1l bnQpCj4gLXsKPiAtCWlmIChlbmQgLSBzdGFydCA8IHNpemUpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+ IC0JaWYgKGFsaWdubWVudCkgewo+IC0JCXU2NCByZW07Cj4gLQo+IC0JCWRpdjY0X3U2NF9yZW0o c3RhcnQsIGFsaWdubWVudCwgJnJlbSk7Cj4gLQkJaWYgKHJlbSkKPiAtCQkJc3RhcnQgKz0gYWxp Z25tZW50IC0gcmVtOwo+IC0JfQo+IC0KPiAtCXJldHVybiBlbmQgPj0gc3RhcnQgKyBzaXplOwo+ IC19Cj4gLQo+IC1zdGF0aWMgc3RydWN0IGRybV9tbV9ub2RlICpkcm1fbW1fc2VhcmNoX2ZyZWVf aW5fcmFuZ2VfZ2VuZXJpYyhjb25zdCBzdHJ1Y3QgZHJtX21tICptbSwKPiAtCQkJCQkJCXU2NCBz aXplLAo+IC0JCQkJCQkJdTY0IGFsaWdubWVudCwKPiAtCQkJCQkJCXVuc2lnbmVkIGxvbmcgY29s b3IsCj4gLQkJCQkJCQl1NjQgc3RhcnQsCj4gLQkJCQkJCQl1NjQgZW5kLAo+IC0JCQkJCQkJZW51 bSBkcm1fbW1fc2VhcmNoX2ZsYWdzIGZsYWdzKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX21tX25vZGUg KmVudHJ5Owo+IC0Jc3RydWN0IGRybV9tbV9ub2RlICpiZXN0Owo+IC0JdTY0IGFkal9zdGFydDsK PiAtCXU2NCBhZGpfZW5kOwo+IC0JdTY0IGJlc3Rfc2l6ZTsKPiAtCj4gLQlEUk1fTU1fQlVHX09O KG1tLT5zY2FuX2FjdGl2ZSk7Cj4gLQo+IC0JYmVzdCA9IE5VTEw7Cj4gLQliZXN0X3NpemUgPSB+ MFVMOwo+IC0KPiAtCV9fZHJtX21tX2Zvcl9lYWNoX2hvbGUoZW50cnksIG1tLCBhZGpfc3RhcnQs IGFkal9lbmQsCj4gLQkJCSAgICAgICBmbGFncyAmIERSTV9NTV9TRUFSQ0hfQkVMT1cpIHsKPiAt CQl1NjQgaG9sZV9zaXplID0gYWRqX2VuZCAtIGFkal9zdGFydDsKPiAtCj4gLQkJaWYgKG1tLT5j b2xvcl9hZGp1c3QpIHsKPiAtCQkJbW0tPmNvbG9yX2FkanVzdChlbnRyeSwgY29sb3IsICZhZGpf c3RhcnQsICZhZGpfZW5kKTsKPiAtCQkJaWYgKGFkal9lbmQgPD0gYWRqX3N0YXJ0KQo+IC0JCQkJ Y29udGludWU7Cj4gLQkJfQo+IC0KPiAtCQlhZGpfc3RhcnQgPSBtYXgoYWRqX3N0YXJ0LCBzdGFy dCk7Cj4gLQkJYWRqX2VuZCA9IG1pbihhZGpfZW5kLCBlbmQpOwo+IC0KPiAtCQlpZiAoIWNoZWNr X2ZyZWVfaG9sZShhZGpfc3RhcnQsIGFkal9lbmQsIHNpemUsIGFsaWdubWVudCkpCj4gLQkJCWNv bnRpbnVlOwo+IC0KPiAtCQlpZiAoIShmbGFncyAmIERSTV9NTV9TRUFSQ0hfQkVTVCkpCj4gLQkJ CXJldHVybiBlbnRyeTsKPiAtCj4gLQkJaWYgKGhvbGVfc2l6ZSA8IGJlc3Rfc2l6ZSkgewo+IC0J CQliZXN0ID0gZW50cnk7Cj4gLQkJCWJlc3Rfc2l6ZSA9IGhvbGVfc2l6ZTsKPiAtCQl9Cj4gLQl9 Cj4gKwlub2RlLT5hbGxvY2F0ZWQgPSBmYWxzZTsKPiAgCj4gLQlyZXR1cm4gYmVzdDsKPiArCWlm IChkcm1fbW1faG9sZV9mb2xsb3dzKHByZXZfbm9kZSkpCj4gKwkJcm1faG9sZShwcmV2X25vZGUp Owo+ICsJYWRkX2hvbGUocHJldl9ub2RlKTsKPiAgfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9tbV9y ZW1vdmVfbm9kZSk7Cj4gIAo+ICAvKioKPiAgICogZHJtX21tX3JlcGxhY2Vfbm9kZSAtIG1vdmUg YW4gYWxsb2NhdGlvbiBmcm9tIEBvbGQgdG8gQG5ldwo+IEBAIC01MTYsMTggKzU3NywyMyBAQCB2 b2lkIGRybV9tbV9yZXBsYWNlX25vZGUoc3RydWN0IGRybV9tbV9ub2RlICpvbGQsIHN0cnVjdCBk cm1fbW1fbm9kZSAqbmV3KQo+ICB7Cj4gIAlEUk1fTU1fQlVHX09OKCFvbGQtPmFsbG9jYXRlZCk7 Cj4gIAo+ICsJKm5ldyA9ICpvbGQ7Cj4gKwo+ICAJbGlzdF9yZXBsYWNlKCZvbGQtPm5vZGVfbGlz dCwgJm5ldy0+bm9kZV9saXN0KTsKPiAtCWxpc3RfcmVwbGFjZSgmb2xkLT5ob2xlX3N0YWNrLCAm bmV3LT5ob2xlX3N0YWNrKTsKPiAgCXJiX3JlcGxhY2Vfbm9kZSgmb2xkLT5yYiwgJm5ldy0+cmIs ICZvbGQtPm1tLT5pbnRlcnZhbF90cmVlKTsKPiAtCW5ldy0+aG9sZV9mb2xsb3dzID0gb2xkLT5o b2xlX2ZvbGxvd3M7Cj4gLQluZXctPm1tID0gb2xkLT5tbTsKPiAtCW5ldy0+c3RhcnQgPSBvbGQt PnN0YXJ0Owo+IC0JbmV3LT5zaXplID0gb2xkLT5zaXplOwo+IC0JbmV3LT5jb2xvciA9IG9sZC0+ Y29sb3I7Cj4gLQluZXctPl9fc3VidHJlZV9sYXN0ID0gb2xkLT5fX3N1YnRyZWVfbGFzdDsKPiAt Cj4gLQlvbGQtPmFsbG9jYXRlZCA9IDA7Cj4gLQluZXctPmFsbG9jYXRlZCA9IDE7Cj4gKwo+ICsJ aWYgKGRybV9tbV9ob2xlX2ZvbGxvd3Mob2xkKSkgewo+ICsJCWxpc3RfcmVwbGFjZSgmb2xkLT5o b2xlX3N0YWNrLCAmbmV3LT5ob2xlX3N0YWNrKTsKPiArCQlyYl9yZXBsYWNlX25vZGUoJm9sZC0+ cmJfaG9sZV9zaXplLAo+ICsJCQkJJm5ldy0+cmJfaG9sZV9zaXplLAo+ICsJCQkJJm9sZC0+bW0t PmhvbGVzX3NpemUpOwo+ICsJCXJiX3JlcGxhY2Vfbm9kZSgmb2xkLT5yYl9ob2xlX2FkZHIsCj4g KwkJCQkmbmV3LT5yYl9ob2xlX2FkZHIsCj4gKwkJCQkmb2xkLT5tbS0+aG9sZXNfYWRkcik7Cj4g Kwl9Cj4gKwo+ICsJb2xkLT5hbGxvY2F0ZWQgPSBmYWxzZTsKPiArCW5ldy0+YWxsb2NhdGVkID0g dHJ1ZTsKPiAgfQo+ICBFWFBPUlRfU1lNQk9MKGRybV9tbV9yZXBsYWNlX25vZGUpOwo+ICAKPiBA QCAtNTcwLDcgKzYzNiw3IEBAIEVYUE9SVF9TWU1CT0woZHJtX21tX3JlcGxhY2Vfbm9kZSk7Cj4g ICAqIEBjb2xvcjogb3BhcXVlIHRhZyB2YWx1ZSB0byB1c2UgZm9yIHRoZSBhbGxvY2F0aW9uCj4g ICAqIEBzdGFydDogc3RhcnQgb2YgdGhlIGFsbG93ZWQgcmFuZ2UgZm9yIHRoZSBhbGxvY2F0aW9u Cj4gICAqIEBlbmQ6IGVuZCBvZiB0aGUgYWxsb3dlZCByYW5nZSBmb3IgdGhlIGFsbG9jYXRpb24K PiAtICogQGZsYWdzOiBmbGFncyB0byBzcGVjaWZ5IGhvdyB0aGUgYWxsb2NhdGlvbiB3aWxsIGJl IHBlcmZvcm1lZCBhZnRlcndhcmRzCj4gKyAqIEBtb2RlOiBmaW5lLXR1bmUgdGhlIGFsbG9jYXRp b24gc2VhcmNoIGFuZCBwbGFjZW1lbnQKPiAgICoKPiAgICogVGhpcyBzaW1wbHkgc2V0cyB1cCB0 aGUgc2Nhbm5pbmcgcm91dGluZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGRlc2lyZWQK PiAgICogaG9sZS4KPiBAQCAtNTg2LDcgKzY1Miw3IEBAIHZvaWQgZHJtX21tX3NjYW5faW5pdF93 aXRoX3JhbmdlKHN0cnVjdCBkcm1fbW1fc2NhbiAqc2NhbiwKPiAgCQkJCSB1bnNpZ25lZCBsb25n IGNvbG9yLAo+ICAJCQkJIHU2NCBzdGFydCwKPiAgCQkJCSB1NjQgZW5kLAo+IC0JCQkJIHVuc2ln bmVkIGludCBmbGFncykKPiArCQkJCSBlbnVtIGRybV9tbV9pbnNlcnRfbW9kZSBtb2RlKQo+ICB7 Cj4gIAlEUk1fTU1fQlVHX09OKHN0YXJ0ID49IGVuZCk7Cj4gIAlEUk1fTU1fQlVHX09OKCFzaXpl IHx8IHNpemUgPiBlbmQgLSBzdGFydCk7Cj4gQEAgLTYwMSw3ICs2NjcsNyBAQCB2b2lkIGRybV9t bV9zY2FuX2luaXRfd2l0aF9yYW5nZShzdHJ1Y3QgZHJtX21tX3NjYW4gKnNjYW4sCj4gIAlzY2Fu LT5hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7Cj4gIAlzY2FuLT5yZW1haW5kZXJfbWFzayA9IGlzX3Bv d2VyX29mXzIoYWxpZ25tZW50KSA/IGFsaWdubWVudCAtIDEgOiAwOwo+ICAJc2Nhbi0+c2l6ZSA9 IHNpemU7Cj4gLQlzY2FuLT5mbGFncyA9IGZsYWdzOwo+ICsJc2Nhbi0+bW9kZSA9IG1vZGU7Cj4g IAo+ICAJRFJNX01NX0JVR19PTihlbmQgPD0gc3RhcnQpOwo+ICAJc2Nhbi0+cmFuZ2Vfc3RhcnQg PSBzdGFydDsKPiBAQCAtNjU5LDcgKzcyNSw3IEBAIGJvb2wgZHJtX21tX3NjYW5fYWRkX2Jsb2Nr KHN0cnVjdCBkcm1fbW1fc2NhbiAqc2NhbiwKPiAgCWlmIChhZGpfZW5kIDw9IGFkal9zdGFydCB8 fCBhZGpfZW5kIC0gYWRqX3N0YXJ0IDwgc2Nhbi0+c2l6ZSkKPiAgCQlyZXR1cm4gZmFsc2U7Cj4g IAo+IC0JaWYgKHNjYW4tPmZsYWdzID09IERSTV9NTV9DUkVBVEVfVE9QKQo+ICsJaWYgKHNjYW4t Pm1vZGUgPT0gRFJNX01NX0lOU0VSVF9ISUdIKQo+ICAJCWFkal9zdGFydCA9IGFkal9lbmQgLSBz Y2FuLT5zaXplOwo+ICAKPiAgCWlmIChzY2FuLT5hbGlnbm1lbnQpIHsKPiBAQCAtNjcxLDcgKzcz Nyw3IEBAIGJvb2wgZHJtX21tX3NjYW5fYWRkX2Jsb2NrKHN0cnVjdCBkcm1fbW1fc2NhbiAqc2Nh biwKPiAgCQkJZGl2NjRfdTY0X3JlbShhZGpfc3RhcnQsIHNjYW4tPmFsaWdubWVudCwgJnJlbSk7 Cj4gIAkJaWYgKHJlbSkgewo+ICAJCQlhZGpfc3RhcnQgLT0gcmVtOwo+IC0JCQlpZiAoc2Nhbi0+ ZmxhZ3MgIT0gRFJNX01NX0NSRUFURV9UT1ApCj4gKwkJCWlmIChzY2FuLT5tb2RlICE9IERSTV9N TV9JTlNFUlRfSElHSCkKPiAgCQkJCWFkal9zdGFydCArPSBzY2FuLT5hbGlnbm1lbnQ7Cj4gIAkJ CWlmIChhZGpfc3RhcnQgPCBtYXgoY29sX3N0YXJ0LCBzY2FuLT5yYW5nZV9zdGFydCkgfHwKPiAg CQkJICAgIG1pbihjb2xfZW5kLCBzY2FuLT5yYW5nZV9lbmQpIC0gYWRqX3N0YXJ0IDwgc2Nhbi0+ c2l6ZSkKPiBAQCAtNzY1LDcgKzgzMSw3IEBAIHN0cnVjdCBkcm1fbW1fbm9kZSAqZHJtX21tX3Nj YW5fY29sb3JfZXZpY3Qoc3RydWN0IGRybV9tbV9zY2FuICpzY2FuKQo+ICAKPiAgCWhvbGUgPSBs aXN0X2ZpcnN0X2VudHJ5KCZtbS0+aG9sZV9zdGFjaywgdHlwZW9mKCpob2xlKSwgaG9sZV9zdGFj ayk7Cj4gIAlob2xlX3N0YXJ0ID0gX19kcm1fbW1faG9sZV9ub2RlX3N0YXJ0KGhvbGUpOwo+IC0J aG9sZV9lbmQgPSBfX2RybV9tbV9ob2xlX25vZGVfZW5kKGhvbGUpOwo+ICsJaG9sZV9lbmQgPSBo b2xlX3N0YXJ0ICsgaG9sZS0+aG9sZV9zaXplOwo+ICAKPiAgCURSTV9NTV9CVUdfT04oaG9sZV9z dGFydCA+IHNjYW4tPmhpdF9zdGFydCk7Cj4gIAlEUk1fTU1fQlVHX09OKGhvbGVfZW5kIDwgc2Nh bi0+aGl0X2VuZCk7Cj4gQEAgLTc5MiwyMSArODU4LDIyIEBAIHZvaWQgZHJtX21tX2luaXQoc3Ry dWN0IGRybV9tbSAqbW0sIHU2NCBzdGFydCwgdTY0IHNpemUpCj4gIHsKPiAgCURSTV9NTV9CVUdf T04oc3RhcnQgKyBzaXplIDw9IHN0YXJ0KTsKPiAgCj4gKwltbS0+Y29sb3JfYWRqdXN0ID0gTlVM TDsKPiArCj4gIAlJTklUX0xJU1RfSEVBRCgmbW0tPmhvbGVfc3RhY2spOwo+IC0JbW0tPnNjYW5f YWN0aXZlID0gMDsKPiArCW1tLT5pbnRlcnZhbF90cmVlID0gUkJfUk9PVDsKPiArCW1tLT5ob2xl c19zaXplID0gUkJfUk9PVDsKPiArCW1tLT5ob2xlc19hZGRyID0gUkJfUk9PVDsKPiAgCj4gIAkv KiBDbGV2ZXIgdHJpY2sgdG8gYXZvaWQgYSBzcGVjaWFsIGNhc2UgaW4gdGhlIGZyZWUgaG9sZSB0 cmFja2luZy4gKi8KPiAgCUlOSVRfTElTVF9IRUFEKCZtbS0+aGVhZF9ub2RlLm5vZGVfbGlzdCk7 Cj4gLQltbS0+aGVhZF9ub2RlLmFsbG9jYXRlZCA9IDA7Cj4gLQltbS0+aGVhZF9ub2RlLmhvbGVf Zm9sbG93cyA9IDE7Cj4gKwltbS0+aGVhZF9ub2RlLmFsbG9jYXRlZCA9IGZhbHNlOwo+ICAJbW0t PmhlYWRfbm9kZS5tbSA9IG1tOwo+ICAJbW0tPmhlYWRfbm9kZS5zdGFydCA9IHN0YXJ0ICsgc2l6 ZTsKPiAtCW1tLT5oZWFkX25vZGUuc2l6ZSA9IHN0YXJ0IC0gbW0tPmhlYWRfbm9kZS5zdGFydDsK PiAtCWxpc3RfYWRkX3RhaWwoJm1tLT5oZWFkX25vZGUuaG9sZV9zdGFjaywgJm1tLT5ob2xlX3N0 YWNrKTsKPiAtCj4gLQltbS0+aW50ZXJ2YWxfdHJlZSA9IFJCX1JPT1Q7Cj4gKwltbS0+aGVhZF9u b2RlLnNpemUgPSAtc2l6ZTsKPiArCWFkZF9ob2xlKCZtbS0+aGVhZF9ub2RlKTsKPiAgCj4gLQlt bS0+Y29sb3JfYWRqdXN0ID0gTlVMTDsKPiArCW1tLT5zY2FuX2FjdGl2ZSA9IDA7Cj4gIH0KPiAg RVhQT1JUX1NZTUJPTChkcm1fbW1faW5pdCk7Cj4gIAo+IEBAIC04MjgsMTggKzg5NSwxNiBAQCBF WFBPUlRfU1lNQk9MKGRybV9tbV90YWtlZG93bik7Cj4gIHN0YXRpYyB1NjQgZHJtX21tX2RlYnVn X2hvbGUoY29uc3Qgc3RydWN0IGRybV9tbV9ub2RlICplbnRyeSwKPiAgCQkJICAgICBjb25zdCBj aGFyICpwcmVmaXgpCj4gIHsKPiAtCXU2NCBob2xlX3N0YXJ0LCBob2xlX2VuZCwgaG9sZV9zaXpl Owo+IC0KPiAtCWlmIChlbnRyeS0+aG9sZV9mb2xsb3dzKSB7Cj4gLQkJaG9sZV9zdGFydCA9IGRy bV9tbV9ob2xlX25vZGVfc3RhcnQoZW50cnkpOwo+IC0JCWhvbGVfZW5kID0gZHJtX21tX2hvbGVf bm9kZV9lbmQoZW50cnkpOwo+IC0JCWhvbGVfc2l6ZSA9IGhvbGVfZW5kIC0gaG9sZV9zdGFydDsK PiAtCQlwcl9kZWJ1ZygiJXMgJSNsbHgtJSNsbHg6ICVsbHU6IGZyZWVcbiIsIHByZWZpeCwgaG9s ZV9zdGFydCwKPiAtCQkJIGhvbGVfZW5kLCBob2xlX3NpemUpOwo+IC0JCXJldHVybiBob2xlX3Np emU7Cj4gKwl1NjQgc3RhcnQsIHNpemU7Cj4gKwo+ICsJc2l6ZSA9IGVudHJ5LT5ob2xlX3NpemU7 Cj4gKwlpZiAoc2l6ZSkgewo+ICsJCXN0YXJ0ID0gZHJtX21tX2hvbGVfbm9kZV9zdGFydChlbnRy eSk7Cj4gKwkJcHJfZGVidWcoIiVzICUjbGx4LSUjbGx4OiAlbGx1OiBmcmVlXG4iLAo+ICsJCQkg cHJlZml4LCBzdGFydCwgc3RhcnQgKyBzaXplLCBzaXplKTsKPiAgCX0KPiAgCj4gLQlyZXR1cm4g MDsKPiArCXJldHVybiBzaXplOwo+ICB9Cj4gIAo+ICAvKioKPiBAQCAtODcwLDE4ICs5MzUsMTYg QEAgRVhQT1JUX1NZTUJPTChkcm1fbW1fZGVidWdfdGFibGUpOwo+ICAjaWYgZGVmaW5lZChDT05G SUdfREVCVUdfRlMpCj4gIHN0YXRpYyB1NjQgZHJtX21tX2R1bXBfaG9sZShzdHJ1Y3Qgc2VxX2Zp bGUgKm0sIGNvbnN0IHN0cnVjdCBkcm1fbW1fbm9kZSAqZW50cnkpCj4gIHsKPiAtCXU2NCBob2xl X3N0YXJ0LCBob2xlX2VuZCwgaG9sZV9zaXplOwo+IC0KPiAtCWlmIChlbnRyeS0+aG9sZV9mb2xs b3dzKSB7Cj4gLQkJaG9sZV9zdGFydCA9IGRybV9tbV9ob2xlX25vZGVfc3RhcnQoZW50cnkpOwo+ IC0JCWhvbGVfZW5kID0gZHJtX21tX2hvbGVfbm9kZV9lbmQoZW50cnkpOwo+IC0JCWhvbGVfc2l6 ZSA9IGhvbGVfZW5kIC0gaG9sZV9zdGFydDsKPiAtCQlzZXFfcHJpbnRmKG0sICIlIzAxOGxseC0l IzAxOGxseDogJWxsdTogZnJlZVxuIiwgaG9sZV9zdGFydCwKPiAtCQkJICAgaG9sZV9lbmQsIGhv bGVfc2l6ZSk7Cj4gLQkJcmV0dXJuIGhvbGVfc2l6ZTsKPiArCXU2NCBzdGFydCwgc2l6ZTsKPiAr Cj4gKwlzaXplID0gZW50cnktPmhvbGVfc2l6ZTsKPiArCWlmIChzaXplKSB7Cj4gKwkJc3RhcnQg PSBkcm1fbW1faG9sZV9ub2RlX3N0YXJ0KGVudHJ5KTsKPiArCQlzZXFfcHJpbnRmKG0sICIlIzAx OGxseC0lIzAxOGxseDogJWxsdTogZnJlZVxuIiwKPiArCQkJICAgc3RhcnQsIHN0YXJ0ICsgc2l6 ZSwgc2l6ZSk7Cj4gIAl9Cj4gIAo+IC0JcmV0dXJuIDA7Cj4gKwlyZXR1cm4gc2l6ZTsKPiAgfQo+ ICAKPiAgLyoqCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm1hX21hbmFnZXIu YyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm1hX21hbmFnZXIuYwo+IGluZGV4IDIwY2MzM2QxYmZj MS4uZDkxMDBiNTY1MTk4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm1hX21h bmFnZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm1hX21hbmFnZXIuYwo+IEBAIC0y MTIsOCArMjEyLDcgQEAgaW50IGRybV92bWFfb2Zmc2V0X2FkZChzdHJ1Y3QgZHJtX3ZtYV9vZmZz ZXRfbWFuYWdlciAqbWdyLAo+ICAJCWdvdG8gb3V0X3VubG9jazsKPiAgCX0KPiAgCj4gLQlyZXQg PSBkcm1fbW1faW5zZXJ0X25vZGUoJm1nci0+dm1fYWRkcl9zcGFjZV9tbSwgJm5vZGUtPnZtX25v ZGUsCj4gLQkJCQkgcGFnZXMsIDAsIERSTV9NTV9TRUFSQ0hfREVGQVVMVCk7Cj4gKwlyZXQgPSBk cm1fbW1faW5zZXJ0X25vZGUoJm1nci0+dm1fYWRkcl9zcGFjZV9tbSwgJm5vZGUtPnZtX25vZGUs IHBhZ2VzKTsKPiAgCWlmIChyZXQpCj4gIAkJZ290byBvdXRfdW5sb2NrOwo+ICAKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9tbXUuYyBiL2RyaXZlcnMvZ3B1 L2RybS9ldG5hdml2L2V0bmF2aXZfbW11LmMKPiBpbmRleCAyZGFlMzE2OWNlNDguLjY5YWI5OGMx NDNkYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X21tdS5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9tbXUuYwo+IEBAIC0xMDcs NiArMTA3LDcgQEAgc3RhdGljIGludCBldG5hdml2X2lvbW11X2ZpbmRfaW92YShzdHJ1Y3QgZXRu YXZpdl9pb21tdSAqbW11LAo+ICAJCQkJICAgc3RydWN0IGRybV9tbV9ub2RlICpub2RlLCBzaXpl X3Qgc2l6ZSkKPiAgewo+ICAJc3RydWN0IGV0bmF2aXZfdnJhbV9tYXBwaW5nICpmcmVlID0gTlVM TDsKPiArCWVudW0gZHJtX21tX2luc2VydF9tb2RlIG1vZGUgPSBEUk1fTU1fSU5TRVJUX0xPVzsK PiAgCWludCByZXQ7Cj4gIAo+ICAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbW11LT5sb2NrKTsKPiBA QCAtMTE4LDggKzExOSw5IEBAIHN0YXRpYyBpbnQgZXRuYXZpdl9pb21tdV9maW5kX2lvdmEoc3Ry dWN0IGV0bmF2aXZfaW9tbXUgKm1tdSwKPiAgCQlib29sIGZvdW5kOwo+ICAKPiAgCQlyZXQgPSBk cm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2UoJm1tdS0+bW0sIG5vZGUsCj4gLQkJCXNpemUsIDAs IG1tdS0+bGFzdF9pb3ZhLCB+MFVMLAo+IC0JCQlEUk1fTU1fU0VBUkNIX0RFRkFVTFQpOwo+ICsJ CQkJCQkgIHNpemUsIDAsIDAsCj4gKwkJCQkJCSAgbW11LT5sYXN0X2lvdmEsIFU2NF9NQVgsCj4g KwkJCQkJCSAgbW9kZSk7Cj4gIAo+ICAJCWlmIChyZXQgIT0gLUVOT1NQQykKPiAgCQkJYnJlYWs7 Cj4gQEAgLTE4Nyw2ICsxODksOCBAQCBzdGF0aWMgaW50IGV0bmF2aXZfaW9tbXVfZmluZF9pb3Zh KHN0cnVjdCBldG5hdml2X2lvbW11ICptbXUsCj4gIAkJCWxpc3RfZGVsX2luaXQoJm0tPnNjYW5f bm9kZSk7Cj4gIAkJfQo+ICAKPiArCQltb2RlID0gRFJNX01NX0lOU0VSVF9FVklDVDsKPiArCj4g IAkJLyoKPiAgCQkgKiBXZSByZW1vdmVkIGVub3VnaCBtYXBwaW5ncyBzbyB0aGF0IHRoZSBuZXcg YWxsb2NhdGlvbiB3aWxsCj4gIAkJICogc3VjY2VlZC4gIEVuc3VyZSB0aGF0IHRoZSBNTVUgd2ls bCBiZSBmbHVzaGVkIGJlZm9yZSB0aGUKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBpbmRleCA1 Mjc1ZjYyNDhjZTMuLmNjNGUwMjI0OTY4ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ IEBAIC02OSwxMiArNjksMTAgQEAgaW5zZXJ0X21hcHBhYmxlX25vZGUoc3RydWN0IGk5MTVfZ2d0 dCAqZ2d0dCwKPiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9tbV9ub2RlICpub2Rl LCB1MzIgc2l6ZSkKPiAgewo+ICAJbWVtc2V0KG5vZGUsIDAsIHNpemVvZigqbm9kZSkpOwo+IC0J cmV0dXJuIGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZV9nZW5lcmljKCZnZ3R0LT5iYXNlLm1t LCBub2RlLAo+IC0JCQkJCQkgICBzaXplLCAwLAo+IC0JCQkJCQkgICBJOTE1X0NPTE9SX1VORVZJ Q1RBQkxFLAo+IC0JCQkJCQkgICAwLCBnZ3R0LT5tYXBwYWJsZV9lbmQsCj4gLQkJCQkJCSAgIERS TV9NTV9TRUFSQ0hfREVGQVVMVCwKPiAtCQkJCQkJICAgRFJNX01NX0NSRUFURV9ERUZBVUxUKTsK PiArCXJldHVybiBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2UoJmdndHQtPmJhc2UubW0sIG5v ZGUsCj4gKwkJCQkJICAgc2l6ZSwgMCwgSTkxNV9DT0xPUl9VTkVWSUNUQUJMRSwKPiArCQkJCQkg ICAwLCBnZ3R0LT5tYXBwYWJsZV9lbmQsCj4gKwkJCQkJICAgRFJNX01NX0lOU0VSVF9MT1cpOwo+ ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9ldmljdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXZpY3Qu Ywo+IGluZGV4IDUwMTI5ZWMxY2FhYi4uZjkyZjYzZTg3NDlhIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V2aWN0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9ldmljdC5jCj4gQEAgLTEwOSw2ICsxMDksNyBAQCBpOTE1X2dlbV9ldmlj dF9zb21ldGhpbmcoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAl9LCAqKnBoYXNl Owo+ICAJc3RydWN0IGk5MTVfdm1hICp2bWEsICpuZXh0Owo+ICAJc3RydWN0IGRybV9tbV9ub2Rl ICpub2RlOwo+ICsJZW51bSBkcm1fbW1faW5zZXJ0X21vZGUgbW9kZTsKPiAgCWludCByZXQ7Cj4g IAo+ICAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmdm0tPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ IEBAIC0xMjcsMTAgKzEyOCwxNCBAQCBpOTE1X2dlbV9ldmljdF9zb21ldGhpbmcoc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAkgKiBPbiBlYWNoIGxpc3QsIHRoZSBvbGRlc3Qgb2Jq ZWN0cyBsaWUgYXQgdGhlIEhFQUQgd2l0aCB0aGUgZnJlc2hlc3QKPiAgCSAqIG9iamVjdCBvbiB0 aGUgVEFJTC4KPiAgCSAqLwo+ICsJbW9kZSA9IERSTV9NTV9JTlNFUlRfQkVTVDsKPiArCWlmIChm bGFncyAmIFBJTl9ISUdIKQo+ICsJCW1vZGUgPSBEUk1fTU1fSU5TRVJUX0hJR0g7Cj4gKwlpZiAo ZmxhZ3MgJiBQSU5fTUFQUEFCTEUpCj4gKwkJbW9kZSA9IERSTV9NTV9JTlNFUlRfTE9XOwo+ICAJ ZHJtX21tX3NjYW5faW5pdF93aXRoX3JhbmdlKCZzY2FuLCAmdm0tPm1tLAo+ICAJCQkJICAgIG1p bl9zaXplLCBhbGlnbm1lbnQsIGNhY2hlX2xldmVsLAo+IC0JCQkJICAgIHN0YXJ0LCBlbmQsCj4g LQkJCQkgICAgZmxhZ3MgJiBQSU5fSElHSCA/IERSTV9NTV9DUkVBVEVfVE9QIDogMCk7Cj4gKwkJ CQkgICAgc3RhcnQsIGVuZCwgbW9kZSk7Cj4gIAo+ICAJLyogUmV0aXJlIGJlZm9yZSB3ZSBzZWFy Y2ggdGhlIGFjdGl2ZSBsaXN0LiBBbHRob3VnaCB3ZSBoYXZlCj4gIAkgKiByZWFzb25hYmxlIGFj Y3VyYWN5IGluIG91ciByZXRpcmVtZW50IGxpc3RzLCB3ZSBtYXkgaGF2ZQo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPiBpbmRleCBjNjQ0MzhmODE3MWMuLjNl NDM1Y2FmNzIyMSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9l eGVjYnVmZmVyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVm ZmVyLmMKPiBAQCAtNDM2LDEyICs0MzYsMTEgQEAgc3RhdGljIHZvaWQgKnJlbG9jX2lvbWFwKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gIAkJCQkJICAgICAgIFBJTl9NQVBQQUJM RSB8IFBJTl9OT05CTE9DSyk7Cj4gIAkJaWYgKElTX0VSUih2bWEpKSB7Cj4gIAkJCW1lbXNldCgm Y2FjaGUtPm5vZGUsIDAsIHNpemVvZihjYWNoZS0+bm9kZSkpOwo+IC0JCQlyZXQgPSBkcm1fbW1f aW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYwo+ICsJCQlyZXQgPSBkcm1fbW1faW5zZXJ0X25v ZGVfaW5fcmFuZ2UKPiAgCQkJCSgmZ2d0dC0+YmFzZS5tbSwgJmNhY2hlLT5ub2RlLAo+ICAJCQkJ IDQwOTYsIDAsIEk5MTVfQ09MT1JfVU5FVklDVEFCTEUsCj4gIAkJCQkgMCwgZ2d0dC0+bWFwcGFi bGVfZW5kLAo+IC0JCQkJIERSTV9NTV9TRUFSQ0hfREVGQVVMVCwKPiAtCQkJCSBEUk1fTU1fQ1JF QVRFX0RFRkFVTFQpOwo+ICsJCQkJIERSTV9NTV9JTlNFUlRfTE9XKTsKPiAgCQkJaWYgKHJldCkg Lyogbm8gaW5hY3RpdmUgYXBlcnR1cmUgc3BhY2UsIHVzZSBjcHUgcmVsb2MgKi8KPiAgCQkJCXJl dHVybiBOVUxMOwo+ICAJCX0gZWxzZSB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2d0dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMK PiBpbmRleCBjOGYxNjc1ODUyYTcuLjkzOWI4NjJiZmNmYSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2d0dC5jCj4gQEAgLTI3MjIsMTIgKzI3MjIsMTAgQEAgaW50IGk5MTVfZ2VtX2lu aXRfZ2d0dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAkJcmV0dXJuIHJl dDsKPiAgCj4gIAkvKiBSZXNlcnZlIGEgbWFwcGFibGUgc2xvdCBmb3Igb3VyIGxvY2tsZXNzIGVy cm9yIGNhcHR1cmUgKi8KPiAtCXJldCA9IGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZV9nZW5l cmljKCZnZ3R0LT5iYXNlLm1tLAo+IC0JCQkJCQkgICZnZ3R0LT5lcnJvcl9jYXB0dXJlLAo+IC0J CQkJCQkgIDQwOTYsIDAsCj4gLQkJCQkJCSAgSTkxNV9DT0xPUl9VTkVWSUNUQUJMRSwKPiAtCQkJ CQkJICAwLCBnZ3R0LT5tYXBwYWJsZV9lbmQsCj4gLQkJCQkJCSAgMCwgMCk7Cj4gKwlyZXQgPSBk cm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2UoJmdndHQtPmJhc2UubW0sICZnZ3R0LT5lcnJvcl9j YXB0dXJlLAo+ICsJCQkJCSAgNDA5NiwgMCwgSTkxNV9DT0xPUl9VTkVWSUNUQUJMRSwKPiArCQkJ CQkgIDAsIGdndHQtPm1hcHBhYmxlX2VuZCwKPiArCQkJCQkgIERSTV9NTV9JTlNFUlRfTE9XKTsK PiAgCWlmIChyZXQpCj4gIAkJcmV0dXJuIHJldDsKPiAgCj4gQEAgLTM1NDIsMTggKzM1NDAsMTYg QEAgaW50IGk5MTVfZ2VtX2d0dF9pbnNlcnQoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0s Cj4gIAkJCXU2NCBzaXplLCB1NjQgYWxpZ25tZW50LCB1bnNpZ25lZCBsb25nIGNvbG9yLAo+ICAJ CQl1NjQgc3RhcnQsIHU2NCBlbmQsIHVuc2lnbmVkIGludCBmbGFncykKPiAgewo+IC0JdTMyIHNl YXJjaF9mbGFnLCBhbGxvY19mbGFnOwo+ICsJZW51bSBkcm1fbW1faW5zZXJ0X21vZGUgbW9kZTsK PiAgCWludCBlcnI7Cj4gIAo+ICAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmdm0tPmk5MTUtPmRybS5z dHJ1Y3RfbXV0ZXgpOwo+ICAKPiAtCWlmIChmbGFncyAmIFBJTl9ISUdIKSB7Cj4gLQkJc2VhcmNo X2ZsYWcgPSBEUk1fTU1fU0VBUkNIX0JFTE9XOwo+IC0JCWFsbG9jX2ZsYWcgPSBEUk1fTU1fQ1JF QVRFX1RPUDsKPiAtCX0gZWxzZSB7Cj4gLQkJc2VhcmNoX2ZsYWcgPSBEUk1fTU1fU0VBUkNIX0RF RkFVTFQ7Cj4gLQkJYWxsb2NfZmxhZyA9IERSTV9NTV9DUkVBVEVfREVGQVVMVDsKPiAtCX0KPiAr CW1vZGUgPSBEUk1fTU1fSU5TRVJUX0JFU1Q7Cj4gKwlpZiAoZmxhZ3MgJiBQSU5fSElHSCkKPiAr CQltb2RlID0gRFJNX01NX0lOU0VSVF9ISUdIOwo+ICsJaWYgKGZsYWdzICYgUElOX01BUFBBQkxF KQo+ICsJCW1vZGUgPSBEUk1fTU1fSU5TRVJUX0xPVzsKPiAgCj4gIAkvKiBXZSBvbmx5IGFsbG9j YXRlIGluIFBBR0VfU0laRS9HVFRfUEFHRV9TSVpFICg0MDk2KSBjaHVua3MsCj4gIAkgKiBzbyB3 ZSBrbm93IHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBtaW5pbXVtIGFsaWdubWVudCBvZiA0MDk2Lgo+ IEBAIC0zNTY1LDEwICszNTYxLDkgQEAgaW50IGk5MTVfZ2VtX2d0dF9pbnNlcnQoc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAlpZiAoYWxpZ25tZW50IDw9IDQwOTYpCj4gIAkJYWxp Z25tZW50ID0gMDsKPiAgCj4gLQllcnIgPSBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2Vu ZXJpYygmdm0tPm1tLCBub2RlLAo+IC0JCQkJCQkgIHNpemUsIGFsaWdubWVudCwgY29sb3IsCj4g LQkJCQkJCSAgc3RhcnQsIGVuZCwKPiAtCQkJCQkJICBzZWFyY2hfZmxhZywgYWxsb2NfZmxhZyk7 Cj4gKwllcnIgPSBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2UoJnZtLT5tbSwgbm9kZSwKPiAr CQkJCQkgIHNpemUsIGFsaWdubWVudCwgY29sb3IsCj4gKwkJCQkJICBzdGFydCwgZW5kLCBtb2Rl KTsKPiAgCWlmIChlcnIgIT0gLUVOT1NQQykKPiAgCQlyZXR1cm4gZXJyOwo+ICAKPiBAQCAtMzU3 Nyw5ICszNTcyLDcgQEAgaW50IGk5MTVfZ2VtX2d0dF9pbnNlcnQoc3RydWN0IGk5MTVfYWRkcmVz c19zcGFjZSAqdm0sCj4gIAlpZiAoZXJyKQo+ICAJCXJldHVybiBlcnI7Cj4gIAo+IC0Jc2VhcmNo X2ZsYWcgPSBEUk1fTU1fU0VBUkNIX0RFRkFVTFQ7Cj4gLQlyZXR1cm4gZHJtX21tX2luc2VydF9u b2RlX2luX3JhbmdlX2dlbmVyaWMoJnZtLT5tbSwgbm9kZSwKPiAtCQkJCQkJICAgc2l6ZSwgYWxp Z25tZW50LCBjb2xvciwKPiAtCQkJCQkJICAgc3RhcnQsIGVuZCwKPiAtCQkJCQkJICAgc2VhcmNo X2ZsYWcsIGFsbG9jX2ZsYWcpOwo+ICsJcmV0dXJuIGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5n ZSgmdm0tPm1tLCBub2RlLAo+ICsJCQkJCSAgIHNpemUsIGFsaWdubWVudCwgY29sb3IsCj4gKwkJ CQkJICAgc3RhcnQsIGVuZCwgRFJNX01NX0lOU0VSVF9FVklDVCk7Cj4gIH0KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4uYwo+IGluZGV4IGYxYTgwYmZhOTkxOS4uZjZkNTA3ZmFm ODNiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMKPiBAQCAtNTUs OSArNTUsOSBAQCBpbnQgaTkxNV9nZW1fc3RvbGVuX2luc2VydF9ub2RlX2luX3JhbmdlKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgCQlyZXR1cm4gLUVOT0RFVjsKPiAgCj4g IAltdXRleF9sb2NrKCZkZXZfcHJpdi0+bW0uc3RvbGVuX2xvY2spOwo+IC0JcmV0ID0gZHJtX21t X2luc2VydF9ub2RlX2luX3JhbmdlKCZkZXZfcHJpdi0+bW0uc3RvbGVuLCBub2RlLCBzaXplLAo+ IC0JCQkJCSAgYWxpZ25tZW50LCBzdGFydCwgZW5kLAo+IC0JCQkJCSAgRFJNX01NX1NFQVJDSF9E RUZBVUxUKTsKPiArCXJldCA9IGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZSgmZGV2X3ByaXYt Pm1tLnN0b2xlbiwgbm9kZSwKPiArCQkJCQkgIHNpemUsIGFsaWdubWVudCwgMCwKPiArCQkJCQkg IHN0YXJ0LCBlbmQsIERSTV9NTV9JTlNFUlRfQkVTVCk7Cj4gIAltdXRleF91bmxvY2soJmRldl9w cml2LT5tbS5zdG9sZW5fbG9jayk7Cj4gIAo+ICAJcmV0dXJuIHJldDsKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9n ZW0uYwo+IGluZGV4IGNkMDZjZmQ5NDY4Ny4uNDEyNjY5MDYyY2I3IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9t c21fZ2VtLmMKPiBAQCAtNTQsOCArNTQsNyBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKipnZXRfcGFn ZXNfdnJhbShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKPiAgCWlmICghcCkKPiAgCQlyZXR1 cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAgCj4gLQlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGUoJnBy aXYtPnZyYW0ubW0sIG1zbV9vYmotPnZyYW1fbm9kZSwKPiAtCQkJbnBhZ2VzLCAwLCBEUk1fTU1f U0VBUkNIX0RFRkFVTFQpOwo+ICsJcmV0ID0gZHJtX21tX2luc2VydF9ub2RlKCZwcml2LT52cmFt Lm1tLCBtc21fb2JqLT52cmFtX25vZGUsIG5wYWdlcyk7Cj4gIAlpZiAocmV0KSB7Cj4gIAkJZHJt X2ZyZWVfbGFyZ2UocCk7Cj4gIAkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtX3ZtYS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9t c21fZ2VtX3ZtYS5jCj4gaW5kZXggYTMxMWQyNmNjYjIxLi5iNjU0ZWNhNzYzNmEgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtX3ZtYS5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL21zbS9tc21fZ2VtX3ZtYS5jCj4gQEAgLTQ1LDggKzQ1LDcgQEAgbXNtX2dlbV9tYXBf dm1hKHN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZSwKPiAgCWlmIChXQVJOX09O KGRybV9tbV9ub2RlX2FsbG9jYXRlZCgmdm1hLT5ub2RlKSkpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+ IC0JcmV0ID0gZHJtX21tX2luc2VydF9ub2RlKCZhc3BhY2UtPm1tLCAmdm1hLT5ub2RlLCBucGFn ZXMsCj4gLQkJCTAsIERSTV9NTV9TRUFSQ0hfREVGQVVMVCk7Cj4gKwlyZXQgPSBkcm1fbW1faW5z ZXJ0X25vZGUoJmFzcGFjZS0+bW0sICZ2bWEtPm5vZGUsIG5wYWdlcyk7Cj4gIAlpZiAocmV0KQo+ ICAJCXJldHVybiByZXQ7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2VsZnRl c3RzL3Rlc3QtZHJtX21tLmMgYi9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL3Rlc3QtZHJtX21t LmMKPiBpbmRleCAyY2U5MmY0ZGNmYzcuLmEwN2MwNGE2YzRiOSAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL3Rlc3QtZHJtX21tLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vc2VsZnRlc3RzL3Rlc3QtZHJtX21tLmMKPiBAQCAtMjIsMjMgKzIyLDI0IEBAIHN0YXRpYyB1 bnNpZ25lZCBpbnQgbWF4X2l0ZXJhdGlvbnMgPSA4MTkyOwo+ICBzdGF0aWMgdW5zaWduZWQgaW50 IG1heF9wcmltZSA9IDEyODsKPiAgCj4gIGVudW0gewo+IC0JREVGQVVMVCwKPiAtCVRPUERPV04s Cj4gIAlCRVNULAo+ICsJQk9UVE9NVVAsCj4gKwlUT1BET1dOLAo+ICsJRVZJQ1QsCj4gIH07Cj4g IAo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGluc2VydF9tb2RlIHsKPiAgCWNvbnN0IGNoYXIgKm5h bWU7Cj4gLQl1bnNpZ25lZCBpbnQgc2VhcmNoX2ZsYWdzOwo+IC0JdW5zaWduZWQgaW50IGNyZWF0 ZV9mbGFnczsKPiArCWVudW0gZHJtX21tX2luc2VydF9tb2RlIG1vZGU7Cj4gIH0gaW5zZXJ0X21v ZGVzW10gPSB7Cj4gLQlbREVGQVVMVF0gPSB7ICJkZWZhdWx0IiwgRFJNX01NX1NFQVJDSF9ERUZB VUxULCBEUk1fTU1fQ1JFQVRFX0RFRkFVTFQgfSwKPiAtCVtUT1BET1dOXSA9IHsgInRvcC1kb3du IiwgRFJNX01NX1NFQVJDSF9CRUxPVywgRFJNX01NX0NSRUFURV9UT1AgfSwKPiAtCVtCRVNUXSA9 IHsgImJlc3QiLCBEUk1fTU1fU0VBUkNIX0JFU1QsIERSTV9NTV9DUkVBVEVfREVGQVVMVCB9LAo+ ICsJW0JFU1RdID0geyAiYmVzdCIsIERSTV9NTV9JTlNFUlRfQkVTVCB9LAo+ICsJW0JPVFRPTVVQ XSA9IHsgImJvdHRvbS11cCIsIERSTV9NTV9JTlNFUlRfTE9XIH0sCj4gKwlbVE9QRE9XTl0gPSB7 ICJ0b3AtZG93biIsIERSTV9NTV9JTlNFUlRfSElHSCB9LAo+ICsJW0VWSUNUXSA9IHsgImV2aWN0 IiwgRFJNX01NX0lOU0VSVF9FVklDVCB9LAo+ICAJe30KPiAgfSwgZXZpY3RfbW9kZXNbXSA9IHsK PiAtCXsgImRlZmF1bHQiLCBEUk1fTU1fU0VBUkNIX0RFRkFVTFQsIERSTV9NTV9DUkVBVEVfREVG QVVMVCB9LAo+IC0JeyAidG9wLWRvd24iLCBEUk1fTU1fU0VBUkNIX0JFTE9XLCBEUk1fTU1fQ1JF QVRFX1RPUCB9LAo+ICsJeyAiYm90dG9tLXVwIiwgRFJNX01NX0lOU0VSVF9MT1cgfSwKPiArCXsg InRvcC1kb3duIiwgRFJNX01NX0lOU0VSVF9ISUdIIH0sCj4gIAl7fQo+ICB9Owo+ICAKPiBAQCAt NTIyLDggKzUyMyw3IEBAIHN0YXRpYyBib29sIGV4cGVjdF9pbnNlcnQoc3RydWN0IGRybV9tbSAq bW0sIHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSwKPiAgCj4gIAllcnIgPSBkcm1fbW1faW5zZXJ0 X25vZGVfZ2VuZXJpYyhtbSwgbm9kZSwKPiAgCQkJCQkgc2l6ZSwgYWxpZ25tZW50LCBjb2xvciwK PiAtCQkJCQkgbW9kZS0+c2VhcmNoX2ZsYWdzLAo+IC0JCQkJCSBtb2RlLT5jcmVhdGVfZmxhZ3Mp Owo+ICsJCQkJCSBtb2RlLT5tb2RlKTsKPiAgCWlmIChlcnIpIHsKPiAgCQlwcl9lcnIoImluc2Vy dCAoc2l6ZT0lbGx1LCBhbGlnbm1lbnQ9JWxsdSwgY29sb3I9JWx1LCBtb2RlPSVzKSBmYWlsZWQg d2l0aCBlcnI9JWRcbiIsCj4gIAkJICAgICAgIHNpemUsIGFsaWdubWVudCwgY29sb3IsIG1vZGUt Pm5hbWUsIGVycik7Cj4gQEAgLTU0Myw3ICs1NDMsNyBAQCBzdGF0aWMgYm9vbCBleHBlY3RfaW5z ZXJ0X2ZhaWwoc3RydWN0IGRybV9tbSAqbW0sIHU2NCBzaXplKQo+ICAJc3RydWN0IGRybV9tbV9u b2RlIHRtcCA9IHt9Owo+ICAJaW50IGVycjsKPiAgCj4gLQllcnIgPSBkcm1fbW1faW5zZXJ0X25v ZGUobW0sICZ0bXAsIHNpemUsIDAsIERSTV9NTV9TRUFSQ0hfREVGQVVMVCk7Cj4gKwllcnIgPSBk cm1fbW1faW5zZXJ0X25vZGUobW0sICZ0bXAsIHNpemUpOwo+ICAJaWYgKGxpa2VseShlcnIgPT0g LUVOT1NQQykpCj4gIAkJcmV0dXJuIHRydWU7Cj4gIAo+IEBAIC03NDksMTEgKzc0OSwxMCBAQCBz dGF0aWMgYm9vbCBleHBlY3RfaW5zZXJ0X2luX3JhbmdlKHN0cnVjdCBkcm1fbW0gKm1tLCBzdHJ1 Y3QgZHJtX21tX25vZGUgKm5vZGUsCj4gIHsKPiAgCWludCBlcnI7Cj4gIAo+IC0JZXJyID0gZHJt X21tX2luc2VydF9ub2RlX2luX3JhbmdlX2dlbmVyaWMobW0sIG5vZGUsCj4gLQkJCQkJCSAgc2l6 ZSwgYWxpZ25tZW50LCBjb2xvciwKPiAtCQkJCQkJICByYW5nZV9zdGFydCwgcmFuZ2VfZW5kLAo+ IC0JCQkJCQkgIG1vZGUtPnNlYXJjaF9mbGFncywKPiAtCQkJCQkJICBtb2RlLT5jcmVhdGVfZmxh Z3MpOwo+ICsJZXJyID0gZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKG1tLCBub2RlLAo+ICsJ CQkJCSAgc2l6ZSwgYWxpZ25tZW50LCBjb2xvciwKPiArCQkJCQkgIHJhbmdlX3N0YXJ0LCByYW5n ZV9lbmQsCj4gKwkJCQkJICBtb2RlLT5tb2RlKTsKPiAgCWlmIChlcnIpIHsKPiAgCQlwcl9lcnIo Imluc2VydCAoc2l6ZT0lbGx1LCBhbGlnbm1lbnQ9JWxsdSwgY29sb3I9JWx1LCBtb2RlPSVzKSBu dG8gcmFuZ2UgWyVsbHgsICVsbHhdIGZhaWxlZCB3aXRoIGVycj0lZFxuIiwKPiAgCQkgICAgICAg c2l6ZSwgYWxpZ25tZW50LCBjb2xvciwgbW9kZS0+bmFtZSwKPiBAQCAtNzc3LDExICs3NzYsMTAg QEAgc3RhdGljIGJvb2wgZXhwZWN0X2luc2VydF9pbl9yYW5nZV9mYWlsKHN0cnVjdCBkcm1fbW0g Km1tLAo+ICAJc3RydWN0IGRybV9tbV9ub2RlIHRtcCA9IHt9Owo+ICAJaW50IGVycjsKPiAgCj4g LQllcnIgPSBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYyhtbSwgJnRtcCwKPiAt CQkJCQkJICBzaXplLCAwLCAwLAo+IC0JCQkJCQkgIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQsCj4g LQkJCQkJCSAgRFJNX01NX1NFQVJDSF9ERUZBVUxULAo+IC0JCQkJCQkgIERSTV9NTV9DUkVBVEVf REVGQVVMVCk7Cj4gKwllcnIgPSBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2UobW0sICZ0bXAs Cj4gKwkJCQkJICBzaXplLCAwLCAwLAo+ICsJCQkJCSAgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCwK PiArCQkJCQkgIDApOwo+ICAJaWYgKGxpa2VseShlcnIgPT0gLUVOT1NQQykpCj4gIAkJcmV0dXJu IHRydWU7Cj4gIAo+IEBAIC0xMzE0LDcgKzEzMTIsNyBAQCBzdGF0aWMgaW50IGV2aWN0X3NvbWV0 aGluZyhzdHJ1Y3QgZHJtX21tICptbSwKPiAgCWRybV9tbV9zY2FuX2luaXRfd2l0aF9yYW5nZSgm c2NhbiwgbW0sCj4gIAkJCQkgICAgc2l6ZSwgYWxpZ25tZW50LCAwLAo+ICAJCQkJICAgIHJhbmdl X3N0YXJ0LCByYW5nZV9lbmQsCj4gLQkJCQkgICAgbW9kZS0+Y3JlYXRlX2ZsYWdzKTsKPiArCQkJ CSAgICBtb2RlLT5tb2RlKTsKPiAgCWlmICghZXZpY3Rfbm9kZXMoJnNjYW4sCj4gIAkJCSBub2Rl cywgb3JkZXIsIGNvdW50LCBmYWxzZSwKPiAgCQkJICZldmljdF9saXN0KSkKPiBAQCAtMTMyMiw4 ICsxMzIwLDcgQEAgc3RhdGljIGludCBldmljdF9zb21ldGhpbmcoc3RydWN0IGRybV9tbSAqbW0s Cj4gIAo+ICAJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZih0bXApKTsKPiAgCWVyciA9IGRybV9tbV9p bnNlcnRfbm9kZV9nZW5lcmljKG1tLCAmdG1wLCBzaXplLCBhbGlnbm1lbnQsIDAsCj4gLQkJCQkJ IG1vZGUtPnNlYXJjaF9mbGFncywKPiAtCQkJCQkgbW9kZS0+Y3JlYXRlX2ZsYWdzKTsKPiArCQkJ CQkgRFJNX01NX0lOU0VSVF9FVklDVCk7Cj4gIAlpZiAoZXJyKSB7Cj4gIAkJcHJfZXJyKCJGYWls ZWQgdG8gaW5zZXJ0IGludG8gZXZpY3Rpb24gaG9sZTogc2l6ZT0lZCwgYWxpZ249JWRcbiIsCj4g IAkJICAgICAgIHNpemUsIGFsaWdubWVudCk7Cj4gQEAgLTEzOTgsOCArMTM5NSw3IEBAIHN0YXRp YyBpbnQgaWd0X2V2aWN0KHZvaWQgKmlnbm9yZWQpCj4gIAlyZXQgPSAtRUlOVkFMOwo+ICAJZHJt X21tX2luaXQoJm1tLCAwLCBzaXplKTsKPiAgCWZvciAobiA9IDA7IG4gPCBzaXplOyBuKyspIHsK PiAtCQllcnIgPSBkcm1fbW1faW5zZXJ0X25vZGUoJm1tLCAmbm9kZXNbbl0ubm9kZSwgMSwgMCwK PiAtCQkJCQkgRFJNX01NX1NFQVJDSF9ERUZBVUxUKTsKPiArCQllcnIgPSBkcm1fbW1faW5zZXJ0 X25vZGUoJm1tLCAmbm9kZXNbbl0ubm9kZSwgMSk7Cj4gIAkJaWYgKGVycikgewo+ICAJCQlwcl9l cnIoImluc2VydCBmYWlsZWQsIHN0ZXAgJWRcbiIsIG4pOwo+ICAJCQlyZXQgPSBlcnI7Cj4gQEAg LTE1MDcsOCArMTUwMyw3IEBAIHN0YXRpYyBpbnQgaWd0X2V2aWN0X3JhbmdlKHZvaWQgKmlnbm9y ZWQpCj4gIAlyZXQgPSAtRUlOVkFMOwo+ICAJZHJtX21tX2luaXQoJm1tLCAwLCBzaXplKTsKPiAg CWZvciAobiA9IDA7IG4gPCBzaXplOyBuKyspIHsKPiAtCQllcnIgPSBkcm1fbW1faW5zZXJ0X25v ZGUoJm1tLCAmbm9kZXNbbl0ubm9kZSwgMSwgMCwKPiAtCQkJCQkgRFJNX01NX1NFQVJDSF9ERUZB VUxUKTsKPiArCQllcnIgPSBkcm1fbW1faW5zZXJ0X25vZGUoJm1tLCAmbm9kZXNbbl0ubm9kZSwg MSk7Cj4gIAkJaWYgKGVycikgewo+ICAJCQlwcl9lcnIoImluc2VydCBmYWlsZWQsIHN0ZXAgJWRc biIsIG4pOwo+ICAJCQlyZXQgPSBlcnI7Cj4gQEAgLTE4OTQsNyArMTg4OSw3IEBAIHN0YXRpYyBp bnQgZXZpY3RfY29sb3Ioc3RydWN0IGRybV9tbSAqbW0sCj4gIAlkcm1fbW1fc2Nhbl9pbml0X3dp dGhfcmFuZ2UoJnNjYW4sIG1tLAo+ICAJCQkJICAgIHNpemUsIGFsaWdubWVudCwgY29sb3IsCj4g IAkJCQkgICAgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCwKPiAtCQkJCSAgICBtb2RlLT5jcmVhdGVf ZmxhZ3MpOwo+ICsJCQkJICAgIG1vZGUtPm1vZGUpOwo+ICAJaWYgKCFldmljdF9ub2Rlcygmc2Nh biwKPiAgCQkJIG5vZGVzLCBvcmRlciwgY291bnQsIHRydWUsCj4gIAkJCSAmZXZpY3RfbGlzdCkp Cj4gQEAgLTE5MDIsOCArMTg5Nyw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfY29sb3Ioc3RydWN0IGRy bV9tbSAqbW0sCj4gIAo+ICAJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZih0bXApKTsKPiAgCWVyciA9 IGRybV9tbV9pbnNlcnRfbm9kZV9nZW5lcmljKG1tLCAmdG1wLCBzaXplLCBhbGlnbm1lbnQsIGNv bG9yLAo+IC0JCQkJCSBtb2RlLT5zZWFyY2hfZmxhZ3MsCj4gLQkJCQkJIG1vZGUtPmNyZWF0ZV9m bGFncyk7Cj4gKwkJCQkJIERSTV9NTV9JTlNFUlRfRVZJQ1QpOwo+ICAJaWYgKGVycikgewo+ICAJ CXByX2VycigiRmFpbGVkIHRvIGluc2VydCBpbnRvIGV2aWN0aW9uIGhvbGU6IHNpemU9JWQsIGFs aWduPSVkLCBjb2xvcj0lbHUsIGVycj0lZFxuIiwKPiAgCQkgICAgICAgc2l6ZSwgYWxpZ25tZW50 LCBjb2xvciwgZXJyKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfbW0u YyBiL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX21tLmMKPiBpbmRleCAwM2RlZmRhNzc3NjYuLjE2 MjJkYjI0Y2QzOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19tbS5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfbW0uYwo+IEBAIC0xMDksOCArMTA5LDcgQEAg c3RhdGljIGludCBzaXNfZHJtX2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBk cm1fZmlsZSAqZmlsZSwKPiAgCWlmIChwb29sID09IEFHUF9UWVBFKSB7Cj4gIAkJcmV0dmFsID0g ZHJtX21tX2luc2VydF9ub2RlKCZkZXZfcHJpdi0+YWdwX21tLAo+ICAJCQkJCSAgICAmaXRlbS0+ bW1fbm9kZSwKPiAtCQkJCQkgICAgbWVtLT5zaXplLCAwLAo+IC0JCQkJCSAgICBEUk1fTU1fU0VB UkNIX0RFRkFVTFQpOwo+ICsJCQkJCSAgICBtZW0tPnNpemUpOwo+ICAJCW9mZnNldCA9IGl0ZW0t Pm1tX25vZGUuc3RhcnQ7Cj4gIAl9IGVsc2Ugewo+ICAjaWYgZGVmaW5lZChDT05GSUdfRkJfU0lT KSB8fCBkZWZpbmVkKENPTkZJR19GQl9TSVNfTU9EVUxFKQo+IEBAIC0xMjIsOCArMTIxLDcgQEAg c3RhdGljIGludCBzaXNfZHJtX2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBk cm1fZmlsZSAqZmlsZSwKPiAgI2Vsc2UKPiAgCQlyZXR2YWwgPSBkcm1fbW1faW5zZXJ0X25vZGUo JmRldl9wcml2LT52cmFtX21tLAo+ICAJCQkJCSAgICAmaXRlbS0+bW1fbm9kZSwKPiAtCQkJCQkg ICAgbWVtLT5zaXplLCAwLAo+IC0JCQkJCSAgICBEUk1fTU1fU0VBUkNIX0RFRkFVTFQpOwo+ICsJ CQkJCSAgICBtZW0tPnNpemUpOwo+ICAJCW9mZnNldCA9IGl0ZW0tPm1tX25vZGUuc3RhcnQ7Cj4g ICNlbmRpZgo+ICAJfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmMg Yi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmMKPiBpbmRleCBjMDhlNTI3OWVlYWMuLmE2MDUx ZDZjNmRlNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmMKPiBAQCAtMTI4LDggKzEyOCw4IEBAIHN0YXRp YyBpbnQgdGVncmFfYm9faW9tbXVfbWFwKHN0cnVjdCB0ZWdyYV9kcm0gKnRlZ3JhLCBzdHJ1Y3Qg dGVncmFfYm8gKmJvKQo+ICAJaWYgKCFiby0+bW0pCj4gIAkJcmV0dXJuIC1FTk9NRU07Cj4gIAo+ IC0JZXJyID0gZHJtX21tX2luc2VydF9ub2RlX2dlbmVyaWMoJnRlZ3JhLT5tbSwgYm8tPm1tLCBi by0+Z2VtLnNpemUsCj4gLQkJCQkJIFBBR0VfU0laRSwgMCwgMCwgMCk7Cj4gKwllcnIgPSBkcm1f bW1faW5zZXJ0X25vZGVfZ2VuZXJpYygmdGVncmEtPm1tLAo+ICsJCQkJCSBiby0+bW0sIGJvLT5n ZW0uc2l6ZSwgUEFHRV9TSVpFLCAwLCAwKTsKPiAgCWlmIChlcnIgPCAwKSB7Cj4gIAkJZGV2X2Vy cih0ZWdyYS0+ZHJtLT5kZXYsICJvdXQgb2YgSS9PIHZpcnR1YWwgbWVtb3J5OiAlemRcbiIsCj4g IAkJCWVycik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX21hbmFn ZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX21hbmFnZXIuYwo+IGluZGV4IGFlYTZh MDE1MDBlMS4uNDkzZmU2YjMzMzUzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0v dHRtX2JvX21hbmFnZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX21hbmFn ZXIuYwo+IEBAIC01NCw5ICs1NCw4IEBAIHN0YXRpYyBpbnQgdHRtX2JvX21hbl9nZXRfbm9kZShz dHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiwKPiAgewo+ICAJc3RydWN0IHR0bV9yYW5n ZV9tYW5hZ2VyICpybWFuID0gKHN0cnVjdCB0dG1fcmFuZ2VfbWFuYWdlciAqKSBtYW4tPnByaXY7 Cj4gIAlzdHJ1Y3QgZHJtX21tICptbSA9ICZybWFuLT5tbTsKPiAtCXN0cnVjdCBkcm1fbW1fbm9k ZSAqbm9kZSA9IE5VTEw7Cj4gLQllbnVtIGRybV9tbV9zZWFyY2hfZmxhZ3Mgc2ZsYWdzID0gRFJN X01NX1NFQVJDSF9CRVNUOwo+IC0JZW51bSBkcm1fbW1fYWxsb2NhdG9yX2ZsYWdzIGFmbGFncyA9 IERSTV9NTV9DUkVBVEVfREVGQVVMVDsKPiArCXN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZTsKPiAr CWVudW0gZHJtX21tX2luc2VydF9tb2RlIG1vZGU7Cj4gIAl1bnNpZ25lZCBsb25nIGxwZm47Cj4g IAlpbnQgcmV0Owo+ICAKPiBAQCAtNjgsMTYgKzY3LDE1IEBAIHN0YXRpYyBpbnQgdHRtX2JvX21h bl9nZXRfbm9kZShzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiwKPiAgCWlmICghbm9k ZSkKPiAgCQlyZXR1cm4gLUVOT01FTTsKPiAgCj4gLQlpZiAocGxhY2UtPmZsYWdzICYgVFRNX1BM X0ZMQUdfVE9QRE9XTikgewo+IC0JCXNmbGFncyA9IERSTV9NTV9TRUFSQ0hfQkVMT1c7Cj4gLQkJ YWZsYWdzID0gRFJNX01NX0NSRUFURV9UT1A7Cj4gLQl9Cj4gKwltb2RlID0gRFJNX01NX0lOU0VS VF9CRVNUOwo+ICsJaWYgKHBsYWNlLT5mbGFncyAmIFRUTV9QTF9GTEFHX1RPUERPV04pCj4gKwkJ bW9kZSA9IERSTV9NTV9JTlNFUlRfSElHSDsKPiAgCj4gIAlzcGluX2xvY2soJnJtYW4tPmxvY2sp Owo+IC0JcmV0ID0gZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlX2dlbmVyaWMobW0sIG5vZGUs IG1lbS0+bnVtX3BhZ2VzLAo+ICsJcmV0ID0gZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKG1t LCBub2RlLAo+ICsJCQkJCSAgbWVtLT5udW1fcGFnZXMsCj4gIAkJCQkJICBtZW0tPnBhZ2VfYWxp Z25tZW50LCAwLAo+IC0JCQkJCSAgcGxhY2UtPmZwZm4sIGxwZm4sCj4gLQkJCQkJICBzZmxhZ3Ms IGFmbGFncyk7Cj4gKwkJCQkJICBwbGFjZS0+ZnBmbiwgbHBmbiwgbW9kZSk7Cj4gIAlzcGluX3Vu bG9jaygmcm1hbi0+bG9jayk7Cj4gIAo+ICAJaWYgKHVubGlrZWx5KHJldCkpIHsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3Zj NC92YzRfY3J0Yy5jCj4gaW5kZXggYTBmZDNlNjZiYzRiLi5iYWFjZGY2MmM4M2UgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL3ZjNC92YzRfY3J0Yy5jCj4gQEAgLTU4OSw3ICs1ODksNyBAQCBzdGF0aWMgaW50IHZjNF9j cnRjX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gIAo+ICAJc3Bpbl9sb2Nr X2lycXNhdmUoJnZjNC0+aHZzLT5tbV9sb2NrLCBmbGFncyk7Cj4gIAlyZXQgPSBkcm1fbW1faW5z ZXJ0X25vZGUoJnZjNC0+aHZzLT5kbGlzdF9tbSwgJnZjNF9zdGF0ZS0+bW0sCj4gLQkJCQkgZGxp c3RfY291bnQsIDEsIDApOwo+ICsJCQkJIGRsaXN0X2NvdW50KTsKPiAgCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJnZjNC0+aHZzLT5tbV9sb2NrLCBmbGFncyk7Cj4gIAlpZiAocmV0KQo+ICAJCXJl dHVybiByZXQ7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2h2cy5jIGIv ZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfaHZzLmMKPiBpbmRleCA2ZmJhYjFjODJjYjEuLjRhYmEw ZmE1NjI4OSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9odnMuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2h2cy5jCj4gQEAgLTE0MSw4ICsxNDEsNyBAQCBz dGF0aWMgaW50IHZjNF9odnNfdXBsb2FkX2xpbmVhcl9rZXJuZWwoc3RydWN0IHZjNF9odnMgKmh2 cywKPiAgCWludCByZXQsIGk7Cj4gIAl1MzIgX19pb21lbSAqZHN0X2tlcm5lbDsKPiAgCj4gLQly ZXQgPSBkcm1fbW1faW5zZXJ0X25vZGUoJmh2cy0+ZGxpc3RfbW0sIHNwYWNlLCBWQzRfS0VSTkVM X0RXT1JEUywgMSwKPiAtCQkJCSAwKTsKPiArCXJldCA9IGRybV9tbV9pbnNlcnRfbm9kZSgmaHZz LT5kbGlzdF9tbSwgc3BhY2UsIFZDNF9LRVJORUxfRFdPUkRTKTsKPiAgCWlmIChyZXQpIHsKPiAg CQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBzcGFjZSBmb3IgZmlsdGVyIGtlcm5lbDog JWRcbiIsCj4gIAkJCSAgcmV0KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92 YzRfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BsYW5lLmMKPiBpbmRleCAxMTBk MTUxOGY1ZDUuLmMxZjA2ODk3MTM2YiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0 L3ZjNF9wbGFuZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUuYwo+IEBA IC01MTQsOSArNTE0LDkgQEAgc3RhdGljIGludCB2YzRfcGxhbmVfbW9kZV9zZXQoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUsCj4gIAlpZiAobGJtX3NpemUpIHsKPiAgCQlpZiAoIXZjNF9zdGF0ZS0+ bGJtLmFsbG9jYXRlZCkgewo+ICAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmM0LT5odnMtPm1tX2xv Y2ssIGlycWZsYWdzKTsKPiAtCQkJcmV0ID0gZHJtX21tX2luc2VydF9ub2RlKCZ2YzQtPmh2cy0+ bGJtX21tLAo+IC0JCQkJCQkgJnZjNF9zdGF0ZS0+bGJtLAo+IC0JCQkJCQkgbGJtX3NpemUsIDMy LCAwKTsKPiArCQkJcmV0ID0gZHJtX21tX2luc2VydF9ub2RlX2dlbmVyaWMoJnZjNC0+aHZzLT5s Ym1fbW0sCj4gKwkJCQkJCQkgJnZjNF9zdGF0ZS0+bGJtLAo+ICsJCQkJCQkJIGxibV9zaXplLCAz MiwgMCwgMCk7Cj4gIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZjNC0+aHZzLT5tbV9sb2Nr LCBpcnFmbGFncyk7Cj4gIAkJfSBlbHNlIHsKPiAgCQkJV0FSTl9PTl9PTkNFKGxibV9zaXplICE9 IHZjNF9zdGF0ZS0+bGJtLnNpemUpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlh L3ZpYV9tbS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfbW0uYwo+IGluZGV4IGEwNGVmMWM5 OTJkOS4uNDIxN2Q2NmE1Y2M2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlh X21tLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9tbS5jCj4gQEAgLTE0MCwxMSAr MTQwLDExIEBAIGludCB2aWFfbWVtX2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsCj4gIAlpZiAobWVtLT50eXBlID09IFZJQV9NRU1fQUdQKQo+ICAJCXJldHZhbCA9IGRy bV9tbV9pbnNlcnRfbm9kZSgmZGV2X3ByaXYtPmFncF9tbSwKPiAgCQkJCQkgICAgJml0ZW0tPm1t X25vZGUsCj4gLQkJCQkJICAgIHRtcFNpemUsIDAsIERSTV9NTV9TRUFSQ0hfREVGQVVMVCk7Cj4g KwkJCQkJICAgIHRtcFNpemUpOwo+ICAJZWxzZQo+ICAJCXJldHZhbCA9IGRybV9tbV9pbnNlcnRf bm9kZSgmZGV2X3ByaXYtPnZyYW1fbW0sCj4gIAkJCQkJICAgICZpdGVtLT5tbV9ub2RlLAo+IC0J CQkJCSAgICB0bXBTaXplLCAwLCBEUk1fTU1fU0VBUkNIX0RFRkFVTFQpOwo+ICsJCQkJCSAgICB0 bXBTaXplKTsKPiAgCWlmIChyZXR2YWwpCj4gIAkJZ290byBmYWlsX2FsbG9jOwo+ICAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfY21kYnVmLmMgYi9kcml2ZXJz L2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9jbWRidWYuYwo+IGluZGV4IGFhMDRmYjAxNTlhNy4uNzdj YjdjNjI3ZTA5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Nt ZGJ1Zi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfY21kYnVmLmMKPiBA QCAtNjczLDE2ICs2NzMsMTAgQEAgc3RhdGljIGJvb2wgdm13X2NtZGJ1Zl90cnlfYWxsb2Moc3Ry dWN0IHZtd19jbWRidWZfbWFuICptYW4sCj4gICAKPiAgCW1lbXNldChpbmZvLT5ub2RlLCAwLCBz aXplb2YoKmluZm8tPm5vZGUpKTsKPiAgCXNwaW5fbG9ja19iaCgmbWFuLT5sb2NrKTsKPiAtCXJl dCA9IGRybV9tbV9pbnNlcnRfbm9kZV9nZW5lcmljKCZtYW4tPm1tLCBpbmZvLT5ub2RlLCBpbmZv LT5wYWdlX3NpemUsCj4gLQkJCQkJIDAsIDAsCj4gLQkJCQkJIERSTV9NTV9TRUFSQ0hfREVGQVVM VCwKPiAtCQkJCQkgRFJNX01NX0NSRUFURV9ERUZBVUxUKTsKPiArCXJldCA9IGRybV9tbV9pbnNl cnRfbm9kZSgmbWFuLT5tbSwgaW5mby0+bm9kZSwgaW5mby0+cGFnZV9zaXplKTsKPiAgCWlmIChy ZXQpIHsKPiAgCQl2bXdfY21kYnVmX21hbl9wcm9jZXNzKG1hbik7Cj4gLQkJcmV0ID0gZHJtX21t X2luc2VydF9ub2RlX2dlbmVyaWMoJm1hbi0+bW0sIGluZm8tPm5vZGUsCj4gLQkJCQkJCSBpbmZv LT5wYWdlX3NpemUsIDAsIDAsCj4gLQkJCQkJCSBEUk1fTU1fU0VBUkNIX0RFRkFVTFQsCj4gLQkJ CQkJCSBEUk1fTU1fQ1JFQVRFX0RFRkFVTFQpOwo+ICsJCXJldCA9IGRybV9tbV9pbnNlcnRfbm9k ZSgmbWFuLT5tbSwgaW5mby0+bm9kZSwgaW5mby0+cGFnZV9zaXplKTsKPiAgCX0KPiAgCj4gIAlz cGluX3VubG9ja19iaCgmbWFuLT5sb2NrKTsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJt X21tLmggYi9pbmNsdWRlL2RybS9kcm1fbW0uaAo+IGluZGV4IDkyZWM1NzU5Y2FhZS4uNjU1OGNk MDhkN2M5IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9tbS5oCj4gKysrIGIvaW5jbHVk ZS9kcm0vZHJtX21tLmgKPiBAQCAtNTUsMzIgKzU1LDI3IEBACj4gICNkZWZpbmUgRFJNX01NX0JV R19PTihleHByKSBCVUlMRF9CVUdfT05fSU5WQUxJRChleHByKQo+ICAjZW5kaWYKPiAgCj4gLWVu dW0gZHJtX21tX3NlYXJjaF9mbGFncyB7Cj4gLQlEUk1fTU1fU0VBUkNIX0RFRkFVTFQgPQkJMCwK PiAtCURSTV9NTV9TRUFSQ0hfQkVTVCA9CQkxIDw8IDAsCj4gLQlEUk1fTU1fU0VBUkNIX0JFTE9X ID0JCTEgPDwgMSwKPiArZW51bSBkcm1fbW1faW5zZXJ0X21vZGUgewo+ICsJRFJNX01NX0lOU0VS VF9CRVNUID0gMCwKPiArCURSTV9NTV9JTlNFUlRfTE9XLAo+ICsJRFJNX01NX0lOU0VSVF9ISUdI LAo+ICsJRFJNX01NX0lOU0VSVF9FVklDVCwKPiAgfTsKPiAgCj4gLWVudW0gZHJtX21tX2FsbG9j YXRvcl9mbGFncyB7Cj4gLQlEUk1fTU1fQ1JFQVRFX0RFRkFVTFQgPQkJMCwKPiAtCURSTV9NTV9D UkVBVEVfVE9QID0JCTEgPDwgMCwKPiAtfTsKPiAtCj4gLSNkZWZpbmUgRFJNX01NX0JPVFRPTVVQ IERSTV9NTV9TRUFSQ0hfREVGQVVMVCwgRFJNX01NX0NSRUFURV9ERUZBVUxUCj4gLSNkZWZpbmUg RFJNX01NX1RPUERPV04gRFJNX01NX1NFQVJDSF9CRUxPVywgRFJNX01NX0NSRUFURV9UT1AKPiAt Cj4gIHN0cnVjdCBkcm1fbW1fbm9kZSB7Cj4gKwlzdHJ1Y3QgZHJtX21tICptbTsKPiAgCXN0cnVj dCBsaXN0X2hlYWQgbm9kZV9saXN0Owo+ICAJc3RydWN0IGxpc3RfaGVhZCBob2xlX3N0YWNrOwo+ ICAJc3RydWN0IHJiX25vZGUgcmI7Cj4gLQl1bnNpZ25lZCBob2xlX2ZvbGxvd3MgOiAxOwo+IC0J dW5zaWduZWQgYWxsb2NhdGVkIDogMTsKPiAtCWJvb2wgc2Nhbm5lZF9ibG9jayA6IDE7Cj4gLQl1 bnNpZ25lZCBsb25nIGNvbG9yOwo+ICsJc3RydWN0IHJiX25vZGUgcmJfaG9sZV9zaXplOwo+ICsJ c3RydWN0IHJiX25vZGUgcmJfaG9sZV9hZGRyOwo+ICAJdTY0IHN0YXJ0Owo+ICAJdTY0IHNpemU7 Cj4gIAl1NjQgX19zdWJ0cmVlX2xhc3Q7Cj4gLQlzdHJ1Y3QgZHJtX21tICptbTsKPiArCXU2NCBo b2xlX3NpemU7Cj4gKwl1bnNpZ25lZCBsb25nIGNvbG9yOwo+ICsJYm9vbCBhbGxvY2F0ZWQgOiAx Owo+ICsJYm9vbCBzY2FubmVkX2Jsb2NrIDogMTsKPiAgI2lmZGVmIENPTkZJR19EUk1fREVCVUdf TU0KPiAgCWRlcG90X3N0YWNrX2hhbmRsZV90IHN0YWNrOwo+ICAjZW5kaWYKPiBAQCAtOTQsNiAr ODksOCBAQCBzdHJ1Y3QgZHJtX21tIHsKPiAgCXN0cnVjdCBkcm1fbW1fbm9kZSBoZWFkX25vZGU7 Cj4gIAkvKiBLZWVwIGFuIGludGVydmFsX3RyZWUgZm9yIGZhc3QgbG9va3VwIG9mIGRybV9tbV9u b2RlcyBieSBhZGRyZXNzLiAqLwo+ICAJc3RydWN0IHJiX3Jvb3QgaW50ZXJ2YWxfdHJlZTsKPiAr CXN0cnVjdCByYl9yb290IGhvbGVzX3NpemU7Cj4gKwlzdHJ1Y3QgcmJfcm9vdCBob2xlc19hZGRy Owo+ICAKPiAgCXZvaWQgKCpjb2xvcl9hZGp1c3QpKGNvbnN0IHN0cnVjdCBkcm1fbW1fbm9kZSAq bm9kZSwKPiAgCQkJICAgICB1bnNpZ25lZCBsb25nIGNvbG9yLAo+IEBAIC0xMTYsNyArMTEzLDcg QEAgc3RydWN0IGRybV9tbV9zY2FuIHsKPiAgCXU2NCBoaXRfZW5kOwo+ICAKPiAgCXVuc2lnbmVk IGxvbmcgY29sb3I7Cj4gLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Cj4gKwllbnVtIGRybV9tbV9pbnNl cnRfbW9kZSBtb2RlOwo+ICB9Owo+ICAKPiAgLyoqCj4gQEAgLTE2OCw3ICsxNjUsNyBAQCBzdGF0 aWMgaW5saW5lIGJvb2wgZHJtX21tX2luaXRpYWxpemVkKGNvbnN0IHN0cnVjdCBkcm1fbW0gKm1t KQo+ICAgKi8KPiAgc3RhdGljIGlubGluZSBib29sIGRybV9tbV9ob2xlX2ZvbGxvd3MoY29uc3Qg c3RydWN0IGRybV9tbV9ub2RlICpub2RlKQo+ICB7Cj4gLQlyZXR1cm4gbm9kZS0+aG9sZV9mb2xs b3dzOwo+ICsJcmV0dXJuIG5vZGUtPmhvbGVfc2l6ZTsKPiAgfQo+ICAKPiAgc3RhdGljIGlubGlu ZSB1NjQgX19kcm1fbW1faG9sZV9ub2RlX3N0YXJ0KGNvbnN0IHN0cnVjdCBkcm1fbW1fbm9kZSAq aG9sZV9ub2RlKQo+IEBAIC0yNTEsMTQgKzI0OCw2IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGRybV9t bV9ob2xlX25vZGVfZW5kKGNvbnN0IHN0cnVjdCBkcm1fbW1fbm9kZSAqaG9sZV9ub2RlKQo+ICAj ZGVmaW5lIGRybV9tbV9mb3JfZWFjaF9ub2RlX3NhZmUoZW50cnksIG5leHQsIG1tKSBcCj4gIAls aXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHQsIGRybV9tbV9ub2RlcyhtbSksIG5v ZGVfbGlzdCkKPiAgCj4gLSNkZWZpbmUgX19kcm1fbW1fZm9yX2VhY2hfaG9sZShlbnRyeSwgbW0s IGhvbGVfc3RhcnQsIGhvbGVfZW5kLCBiYWNrd2FyZHMpIFwKPiAtCWZvciAoZW50cnkgPSBsaXN0 X2VudHJ5KChiYWNrd2FyZHMpID8gKG1tKS0+aG9sZV9zdGFjay5wcmV2IDogKG1tKS0+aG9sZV9z dGFjay5uZXh0LCBzdHJ1Y3QgZHJtX21tX25vZGUsIGhvbGVfc3RhY2spOyBcCj4gLQkgICAgICZl bnRyeS0+aG9sZV9zdGFjayAhPSAmKG1tKS0+aG9sZV9zdGFjayA/IFwKPiAtCSAgICAgaG9sZV9z dGFydCA9IGRybV9tbV9ob2xlX25vZGVfc3RhcnQoZW50cnkpLCBcCj4gLQkgICAgIGhvbGVfZW5k ID0gZHJtX21tX2hvbGVfbm9kZV9lbmQoZW50cnkpLCBcCj4gLQkgICAgIDEgOiAwOyBcCj4gLQkg ICAgIGVudHJ5ID0gbGlzdF9lbnRyeSgoYmFja3dhcmRzKSA/IGVudHJ5LT5ob2xlX3N0YWNrLnBy ZXYgOiBlbnRyeS0+aG9sZV9zdGFjay5uZXh0LCBzdHJ1Y3QgZHJtX21tX25vZGUsIGhvbGVfc3Rh Y2spKQo+IC0KPiAgLyoqCj4gICAqIGRybV9tbV9mb3JfZWFjaF9ob2xlIC0gaXRlcmF0b3IgdG8g d2FsayBvdmVyIGFsbCBob2xlcwo+ICAgKiBAZW50cnk6IGRybV9tbV9ub2RlIHVzZWQgaW50ZXJu YWxseSB0byB0cmFjayBwcm9ncmVzcwo+IEBAIC0yNzQsNTcgKzI2MywyNyBAQCBzdGF0aWMgaW5s aW5lIHU2NCBkcm1fbW1faG9sZV9ub2RlX2VuZChjb25zdCBzdHJ1Y3QgZHJtX21tX25vZGUgKmhv bGVfbm9kZSkKPiAgICogSW1wbGVtZW50YXRpb24gTm90ZToKPiAgICogV2UgbmVlZCB0byBpbmxp bmUgbGlzdF9mb3JfZWFjaF9lbnRyeSBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHNldCBob2xlX3N0 YXJ0Cj4gICAqIGFuZCBob2xlX2VuZCBvbiBlYWNoIGl0ZXJhdGlvbiB3aGlsZSBrZWVwaW5nIHRo ZSBtYWNybyBzYW5lLgo+IC0gKgo+IC0gKiBUaGUgX19kcm1fbW1fZm9yX2VhY2hfaG9sZSB2ZXJz aW9uIGlzIHNpbWlsYXIsIGJ1dCB3aXRoIGFkZGVkIHN1cHBvcnQgZm9yCj4gLSAqIGdvaW5nIGJh Y2t3YXJkcy4KPiAgICovCj4gLSNkZWZpbmUgZHJtX21tX2Zvcl9lYWNoX2hvbGUoZW50cnksIG1t LCBob2xlX3N0YXJ0LCBob2xlX2VuZCkgXAo+IC0JX19kcm1fbW1fZm9yX2VhY2hfaG9sZShlbnRy eSwgbW0sIGhvbGVfc3RhcnQsIGhvbGVfZW5kLCAwKQo+ICsjZGVmaW5lIGRybV9tbV9mb3JfZWFj aF9ob2xlKHBvcywgbW0sIGhvbGVfc3RhcnQsIGhvbGVfZW5kKSBcCj4gKwlmb3IgKHBvcyA9IGxp c3RfZmlyc3RfZW50cnkoJihtbSktPmhvbGVfc3RhY2ssIFwKPiArCQkJCSAgICB0eXBlb2YoKnBv cyksIGhvbGVfc3RhY2spOyBcCj4gKwkgICAgICZwb3MtPmhvbGVfc3RhY2sgIT0gJihtbSktPmhv bGVfc3RhY2sgPyBcCj4gKwkgICAgIGhvbGVfc3RhcnQgPSBkcm1fbW1faG9sZV9ub2RlX3N0YXJ0 KHBvcyksIFwKPiArCSAgICAgaG9sZV9lbmQgPSBob2xlX3N0YXJ0ICsgcG9zLT5ob2xlX3NpemUg OiAwOyBcCj4gKwkgICAgIHBvcyA9IGxpc3RfbmV4dF9lbnRyeShwb3MsIGhvbGVfc3RhY2spKQo+ ICAKPiAgLyoKPiAgICogQmFzaWMgcmFuZ2UgbWFuYWdlciBzdXBwb3J0IChkcm1fbW0uYykKPiAg ICovCj4gIGludCBkcm1fbW1fcmVzZXJ2ZV9ub2RlKHN0cnVjdCBkcm1fbW0gKm1tLCBzdHJ1Y3Qg ZHJtX21tX25vZGUgKm5vZGUpOwo+IC1pbnQgZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlX2dl bmVyaWMoc3RydWN0IGRybV9tbSAqbW0sCj4gLQkJCQkJc3RydWN0IGRybV9tbV9ub2RlICpub2Rl LAo+IC0JCQkJCXU2NCBzaXplLAo+IC0JCQkJCXU2NCBhbGlnbm1lbnQsCj4gLQkJCQkJdW5zaWdu ZWQgbG9uZyBjb2xvciwKPiAtCQkJCQl1NjQgc3RhcnQsCj4gLQkJCQkJdTY0IGVuZCwKPiAtCQkJ CQllbnVtIGRybV9tbV9zZWFyY2hfZmxhZ3Mgc2ZsYWdzLAo+IC0JCQkJCWVudW0gZHJtX21tX2Fs bG9jYXRvcl9mbGFncyBhZmxhZ3MpOwo+IC0KPiAtLyoqCj4gLSAqIGRybV9tbV9pbnNlcnRfbm9k ZV9pbl9yYW5nZSAtIHJhbmdlZCBzZWFyY2ggZm9yIHNwYWNlIGFuZCBpbnNlcnQgQG5vZGUKPiAt ICogQG1tOiBkcm1fbW0gdG8gYWxsb2NhdGUgZnJvbQo+IC0gKiBAbm9kZTogcHJlYWxsb2NhdGUg bm9kZSB0byBpbnNlcnQKPiAtICogQHNpemU6IHNpemUgb2YgdGhlIGFsbG9jYXRpb24KPiAtICog QGFsaWdubWVudDogYWxpZ25tZW50IG9mIHRoZSBhbGxvY2F0aW9uCj4gLSAqIEBzdGFydDogc3Rh cnQgb2YgdGhlIGFsbG93ZWQgcmFuZ2UgZm9yIHRoaXMgbm9kZQo+IC0gKiBAZW5kOiBlbmQgb2Yg dGhlIGFsbG93ZWQgcmFuZ2UgZm9yIHRoaXMgbm9kZQo+IC0gKiBAZmxhZ3M6IGZsYWdzIHRvIGZp bmUtdHVuZSB0aGUgYWxsb2NhdGlvbgo+IC0gKgo+IC0gKiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2 ZXJzaW9uIG9mIGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZV9nZW5lcmljKCkgd2l0aAo+IC0g KiBAY29sb3Igc2V0IHRvIDAuCj4gLSAqCj4gLSAqIFRoZSBwcmVhbGxvY2F0ZWQgbm9kZSBtdXN0 IGJlIGNsZWFyZWQgdG8gMC4KPiAtICoKPiAtICogUmV0dXJuczoKPiAtICogMCBvbiBzdWNjZXNz LCAtRU5PU1BDIGlmIHRoZXJlJ3Mgbm8gc3VpdGFibGUgaG9sZS4KPiAtICovCj4gLXN0YXRpYyBp bmxpbmUgaW50IGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZShzdHJ1Y3QgZHJtX21tICptbSwK PiAtCQkJCQkgICAgICBzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUsCj4gLQkJCQkJICAgICAgdTY0 IHNpemUsCj4gLQkJCQkJICAgICAgdTY0IGFsaWdubWVudCwKPiAtCQkJCQkgICAgICB1NjQgc3Rh cnQsCj4gLQkJCQkJICAgICAgdTY0IGVuZCwKPiAtCQkJCQkgICAgICBlbnVtIGRybV9tbV9zZWFy Y2hfZmxhZ3MgZmxhZ3MpCj4gLXsKPiAtCXJldHVybiBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFu Z2VfZ2VuZXJpYyhtbSwgbm9kZSwgc2l6ZSwgYWxpZ25tZW50LAo+IC0JCQkJCQkgICAwLCBzdGFy dCwgZW5kLCBmbGFncywKPiAtCQkJCQkJICAgRFJNX01NX0NSRUFURV9ERUZBVUxUKTsKPiAtfQo+ ICtpbnQgZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKHN0cnVjdCBkcm1fbW0gKm1tLAo+ICsJ CQkJc3RydWN0IGRybV9tbV9ub2RlICpub2RlLAo+ICsJCQkJdTY0IHNpemUsCj4gKwkJCQl1NjQg YWxpZ25tZW50LAo+ICsJCQkJdW5zaWduZWQgbG9uZyBjb2xvciwKPiArCQkJCXU2NCBzdGFydCwK PiArCQkJCXU2NCBlbmQsCj4gKwkJCQllbnVtIGRybV9tbV9pbnNlcnRfbW9kZSBtb2RlKTsKPiAg Cj4gIC8qKgo+ICAgKiBkcm1fbW1faW5zZXJ0X25vZGVfZ2VuZXJpYyAtIHNlYXJjaCBmb3Igc3Bh Y2UgYW5kIGluc2VydCBAbm9kZQo+IEBAIC0zMzMsOCArMjkyLDcgQEAgc3RhdGljIGlubGluZSBp bnQgZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKHN0cnVjdCBkcm1fbW0gKm1tLAo+ICAgKiBA c2l6ZTogc2l6ZSBvZiB0aGUgYWxsb2NhdGlvbgo+ICAgKiBAYWxpZ25tZW50OiBhbGlnbm1lbnQg b2YgdGhlIGFsbG9jYXRpb24KPiAgICogQGNvbG9yOiBvcGFxdWUgdGFnIHZhbHVlIHRvIHVzZSBm b3IgdGhpcyBub2RlCj4gLSAqIEBzZmxhZ3M6IGZsYWdzIHRvIGZpbmUtdHVuZSB0aGUgYWxsb2Nh dGlvbiBzZWFyY2gKPiAtICogQGFmbGFnczogZmxhZ3MgdG8gZmluZS10dW5lIHRoZSBhbGxvY2F0 aW9uIGJlaGF2aW9yCj4gKyAqIEBtb2RlOiBmaW5lLXR1bmUgdGhlIGFsbG9jYXRpb24gc2VhcmNo IGFuZCBwbGFjZW1lbnQKPiAgICoKPiAgICogVGhlIHByZWFsbG9jYXRlZCBub2RlIG11c3QgYmUg Y2xlYXJlZCB0byAwLgo+ICAgKgo+IEBAIC0zNDUsMTMgKzMwMywxMSBAQCBzdGF0aWMgaW5saW5l IGludAo+ICBkcm1fbW1faW5zZXJ0X25vZGVfZ2VuZXJpYyhzdHJ1Y3QgZHJtX21tICptbSwgc3Ry dWN0IGRybV9tbV9ub2RlICpub2RlLAo+ICAJCQkgICB1NjQgc2l6ZSwgdTY0IGFsaWdubWVudCwK PiAgCQkJICAgdW5zaWduZWQgbG9uZyBjb2xvciwKPiAtCQkJICAgZW51bSBkcm1fbW1fc2VhcmNo X2ZsYWdzIHNmbGFncywKPiAtCQkJICAgZW51bSBkcm1fbW1fYWxsb2NhdG9yX2ZsYWdzIGFmbGFn cykKPiArCQkJICAgZW51bSBkcm1fbW1faW5zZXJ0X21vZGUgbW9kZSkKPiAgewo+IC0JcmV0dXJu IGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZV9nZW5lcmljKG1tLCBub2RlLAo+IC0JCQkJCQkg ICBzaXplLCBhbGlnbm1lbnQsIDAsCj4gLQkJCQkJCSAgIDAsIFU2NF9NQVgsCj4gLQkJCQkJCSAg IHNmbGFncywgYWZsYWdzKTsKPiArCXJldHVybiBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2Uo bW0sIG5vZGUsCj4gKwkJCQkJICAgc2l6ZSwgYWxpZ25tZW50LCBjb2xvciwKPiArCQkJCQkgICAw LCBVNjRfTUFYLCBtb2RlKTsKPiAgfQo+ICAKPiAgLyoqCj4gQEAgLTM1OSw4ICszMTUsNiBAQCBk cm1fbW1faW5zZXJ0X25vZGVfZ2VuZXJpYyhzdHJ1Y3QgZHJtX21tICptbSwgc3RydWN0IGRybV9t bV9ub2RlICpub2RlLAo+ICAgKiBAbW06IGRybV9tbSB0byBhbGxvY2F0ZSBmcm9tCj4gICAqIEBu b2RlOiBwcmVhbGxvY2F0ZSBub2RlIHRvIGluc2VydAo+ICAgKiBAc2l6ZTogc2l6ZSBvZiB0aGUg YWxsb2NhdGlvbgo+IC0gKiBAYWxpZ25tZW50OiBhbGlnbm1lbnQgb2YgdGhlIGFsbG9jYXRpb24K PiAtICogQGZsYWdzOiBmbGFncyB0byBmaW5lLXR1bmUgdGhlIGFsbG9jYXRpb24KPiAgICoKPiAg ICogVGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiBkcm1fbW1faW5zZXJ0X25vZGVfZ2Vu ZXJpYygpIHdpdGggQGNvbG9yIHNldAo+ICAgKiB0byAwLgo+IEBAIC0zNzIsMTMgKzMyNiw5IEBA IGRybV9tbV9pbnNlcnRfbm9kZV9nZW5lcmljKHN0cnVjdCBkcm1fbW0gKm1tLCBzdHJ1Y3QgZHJt X21tX25vZGUgKm5vZGUsCj4gICAqLwo+ICBzdGF0aWMgaW5saW5lIGludCBkcm1fbW1faW5zZXJ0 X25vZGUoc3RydWN0IGRybV9tbSAqbW0sCj4gIAkJCQkgICAgIHN0cnVjdCBkcm1fbW1fbm9kZSAq bm9kZSwKPiAtCQkJCSAgICAgdTY0IHNpemUsCj4gLQkJCQkgICAgIHU2NCBhbGlnbm1lbnQsCj4g LQkJCQkgICAgIGVudW0gZHJtX21tX3NlYXJjaF9mbGFncyBmbGFncykKPiArCQkJCSAgICAgdTY0 IHNpemUpCj4gIHsKPiAtCXJldHVybiBkcm1fbW1faW5zZXJ0X25vZGVfZ2VuZXJpYyhtbSwgbm9k ZSwKPiAtCQkJCQkgIHNpemUsIGFsaWdubWVudCwgMCwKPiAtCQkJCQkgIGZsYWdzLCBEUk1fTU1f Q1JFQVRFX0RFRkFVTFQpOwo+ICsJcmV0dXJuIGRybV9tbV9pbnNlcnRfbm9kZV9nZW5lcmljKG1t LCBub2RlLCBzaXplLCAwLCAwLCAwKTsKPiAgfQo+ICAKPiAgdm9pZCBkcm1fbW1fcmVtb3ZlX25v ZGUoc3RydWN0IGRybV9tbV9ub2RlICpub2RlKTsKPiBAQCAtNDI1LDcgKzM3NSw3IEBAIHZvaWQg ZHJtX21tX3NjYW5faW5pdF93aXRoX3JhbmdlKHN0cnVjdCBkcm1fbW1fc2NhbiAqc2NhbiwKPiAg CQkJCSBzdHJ1Y3QgZHJtX21tICptbSwKPiAgCQkJCSB1NjQgc2l6ZSwgdTY0IGFsaWdubWVudCwg dW5zaWduZWQgbG9uZyBjb2xvciwKPiAgCQkJCSB1NjQgc3RhcnQsIHU2NCBlbmQsCj4gLQkJCQkg dW5zaWduZWQgaW50IGZsYWdzKTsKPiArCQkJCSBlbnVtIGRybV9tbV9pbnNlcnRfbW9kZSBtb2Rl KTsKPiAgCj4gIC8qKgo+ICAgKiBkcm1fbW1fc2Nhbl9pbml0IC0gaW5pdGlhbGl6ZSBscnUgc2Nh bm5pbmcKPiBAQCAtNDM0LDcgKzM4NCw3IEBAIHZvaWQgZHJtX21tX3NjYW5faW5pdF93aXRoX3Jh bmdlKHN0cnVjdCBkcm1fbW1fc2NhbiAqc2NhbiwKPiAgICogQHNpemU6IHNpemUgb2YgdGhlIGFs bG9jYXRpb24KPiAgICogQGFsaWdubWVudDogYWxpZ25tZW50IG9mIHRoZSBhbGxvY2F0aW9uCj4g ICAqIEBjb2xvcjogb3BhcXVlIHRhZyB2YWx1ZSB0byB1c2UgZm9yIHRoZSBhbGxvY2F0aW9uCj4g LSAqIEBmbGFnczogZmxhZ3MgdG8gc3BlY2lmeSBob3cgdGhlIGFsbG9jYXRpb24gd2lsbCBiZSBw ZXJmb3JtZWQgYWZ0ZXJ3YXJkcwo+ICsgKiBAbW9kZTogZmluZS10dW5lIHRoZSBhbGxvY2F0aW9u IHNlYXJjaCBhbmQgcGxhY2VtZW50Cj4gICAqCj4gICAqIFRoaXMgc2ltcGx5IHNldHMgdXAgdGhl IHNjYW5uaW5nIHJvdXRpbmVzIHdpdGggdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBkZXNpcmVkCj4g ICAqIGhvbGUuCj4gQEAgLTQ0OCwxMiArMzk4LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkcm1f bW1fc2Nhbl9pbml0KHN0cnVjdCBkcm1fbW1fc2NhbiAqc2NhbiwKPiAgCQkJCSAgICB1NjQgc2l6 ZSwKPiAgCQkJCSAgICB1NjQgYWxpZ25tZW50LAo+ICAJCQkJICAgIHVuc2lnbmVkIGxvbmcgY29s b3IsCj4gLQkJCQkgICAgdW5zaWduZWQgaW50IGZsYWdzKQo+ICsJCQkJICAgIGVudW0gZHJtX21t X2luc2VydF9tb2RlIG1vZGUpCj4gIHsKPiAgCWRybV9tbV9zY2FuX2luaXRfd2l0aF9yYW5nZShz Y2FuLCBtbSwKPiAgCQkJCSAgICBzaXplLCBhbGlnbm1lbnQsIGNvbG9yLAo+IC0JCQkJICAgIDAs IFU2NF9NQVgsCj4gLQkJCQkgICAgZmxhZ3MpOwo+ICsJCQkJICAgIDAsIFU2NF9NQVgsIG1vZGUp Owo+ICB9Cj4gIAo+ICBib29sIGRybV9tbV9zY2FuX2FkZF9ibG9jayhzdHJ1Y3QgZHJtX21tX3Nj YW4gKnNjYW4sCj4gLS0gCj4gMi4xMS4wCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4CgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdp bmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==