From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v2 13/14] drm/i915: Move ddb/wm programming into plane update/disable hooks on skl+ Date: Fri, 9 Nov 2018 16:53:12 +0200 Message-ID: <20181109145312.GK9144@intel.com> References: <20181101150605.18235-14-ville.syrjala@linux.intel.com> <20181107184430.31896-1-ville.syrjala@linux.intel.com> <20181109013837.GJ27871@mdroper-desk.amr.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2D0FC6E595 for ; Fri, 9 Nov 2018 14:53:16 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20181109013837.GJ27871@mdroper-desk.amr.corp.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Matt Roper Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBOb3YgMDgsIDIwMTggYXQgMDU6Mzg6MzdQTSAtMDgwMCwgTWF0dCBSb3BlciB3cm90 ZToKPiBPbiBXZWQsIE5vdiAwNywgMjAxOCBhdCAwODo0NDozMFBNICswMjAwLCBWaWxsZSBTeXJq YWxhIHdyb3RlOgo+ID4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4 LmludGVsLmNvbT4KPiA+IAo+ID4gT24gU0tMKyB0aGUgcGxhbmUgV00vQlVGX0NGRyByZWdpc3Rl cnMgYXJlIGEgcHJvcGVyIHBhcnQgb2YgZWFjaAo+ID4gcGxhbmUncyByZWdpc3RlciBzZXQuIFRo YXQgbWVhbnMgYWNjZXNzaW5nIHRoZW0gd2lsbCBjYW5jZWwgYW55Cj4gPiBwZW5kaW5nIHBsYW5l IHVwZGF0ZSwgYW5kIHdlIHdvdWxkIG5lZWQgYSBQTEFORV9TVVJGIHJlZ2lzdGVyIHdyaXRlCj4g PiB0byBhcm0gdGhlIHdtL2RkYiBjaGFuZ2UgYXMgd2VsbC4KPiA+IAo+ID4gVG8gYXZvaWQgYWxs IHRoZSBwcm9ibGVtcyB3aXRoIHRoYXQgbGV0J3MganVzdCBtb3ZlIHRoZSB3bS9kZGIKPiA+IHBy b2dyYW1taW5nIGludG8gdGhlIHBsYW5lIHVwZGF0ZS9kaXNhYmxlIGhvb2tzLiBOb3cgYWxsIHBs YW5lCj4gPiByZWdpc3RlcnMgZ2V0IHdyaXR0ZW4gaW4gb25lIChob3BlZnVsbHkgYXRvbWljKSBv cGVyYXRpb24uCj4gPiAKPiA+IFRvIG1ha2UgdGhhdCBmZWFzaWJsZSB3ZSdsbCBtb3ZlIHRoZSBw bGFuZSBkZGIgdHJhY2tpbmcgaW50bwo+ID4gdGhlIGNydGMgc3RhdGUuIFdhdGVybWFya3Mgd2Vy ZSBhbHJlYWR5IHRyYWNrZWQgdGhlcmUuCj4gPiAKPiA+IHYyOiBSZWJhc2UgZHVlIHRvIGlucHV0 IENTQwo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmph bGFAbGludXguaW50ZWwuY29tPgo+ID4gLS0tCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kZWJ1Z2ZzLmMgIHwgIDIxICstCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aCAgICAgIHwgICAzIC0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMg fCAgMTYgKy0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmggfCAgMTEg Ky0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgfCAgIDkgKwo+ID4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgICAgICB8IDQ1MCArKysrKysrKysrKyst LS0tLS0tLS0tLS0tLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYyAg fCAgIDQgKwo+ID4gIDcgZmlsZXMgY2hhbmdlZCwgMjUwIGluc2VydGlvbnMoKyksIDI2NCBkZWxl dGlvbnMoLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZGVidWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiA+IGluZGV4 IGY2MDQ4NTkwNmY3ZS4uM2U4MGEwNGQyNzkwIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZGVidWdmcy5jCj4gPiBAQCAtMzQzNywzMSArMzQzNywzMiBAQCBzdGF0aWMgaW50IGk5MTVf ZGRiX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gPiAgewo+ID4gIAlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0 ZSk7Cj4gPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmZGV2X3ByaXYtPmRybTsKPiA+IC0J c3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqZGRiOwo+ID4gIAlzdHJ1Y3Qgc2tsX2RkYl9lbnRy eSAqZW50cnk7Cj4gPiAtCWVudW0gcGlwZSBwaXBlOwo+ID4gLQlpbnQgcGxhbmU7Cj4gPiArCXN0 cnVjdCBpbnRlbF9jcnRjICpjcnRjOwo+ID4gIAo+ID4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA8IDkpCj4gPiAgCQlyZXR1cm4gLUVOT0RFVjsKPiA+ICAKPiA+ICAJZHJtX21vZGVzZXRfbG9j a19hbGwoZGV2KTsKPiA+ICAKPiA+IC0JZGRiID0gJmRldl9wcml2LT53bS5za2xfaHcuZGRiOwo+ ID4gLQo+ID4gIAlzZXFfcHJpbnRmKG0sICIlLTE1cyU4cyU4cyU4c1xuIiwgIiIsICJTdGFydCIs ICJFbmQiLCAiU2l6ZSIpOwo+ID4gIAo+ID4gLQlmb3JfZWFjaF9waXBlKGRldl9wcml2LCBwaXBl KSB7Cj4gPiArCWZvcl9lYWNoX2ludGVsX2NydGMoJmRldl9wcml2LT5kcm0sIGNydGMpIHsKPiA+ ICsJCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlID0KPiA+ICsJCQl0b19pbnRl bF9jcnRjX3N0YXRlKGNydGMtPmJhc2Uuc3RhdGUpOwo+ID4gKwkJZW51bSBwaXBlIHBpcGUgPSBj cnRjLT5waXBlOwo+ID4gKwkJZW51bSBwbGFuZV9pZCBwbGFuZV9pZDsKPiA+ICsKPiA+ICAJCXNl cV9wcmludGYobSwgIlBpcGUgJWNcbiIsIHBpcGVfbmFtZShwaXBlKSk7Cj4gPiAgCj4gPiAtCQlm b3JfZWFjaF91bml2ZXJzYWxfcGxhbmUoZGV2X3ByaXYsIHBpcGUsIHBsYW5lKSB7Cj4gPiAtCQkJ ZW50cnkgPSAmZGRiLT5wbGFuZVtwaXBlXVtwbGFuZV07Cj4gPiAtCQkJc2VxX3ByaW50ZihtLCAi ICBQbGFuZSUtOGQlOHUlOHUlOHVcbiIsIHBsYW5lICsgMSwKPiA+ICsJCWZvcl9lYWNoX3BsYW5l X2lkX29uX2NydGMoY3J0YywgcGxhbmVfaWQpIHsKPiA+ICsJCQllbnRyeSA9ICZjcnRjX3N0YXRl LT53bS5za2wucGxhbmVfZGRiX3lbcGxhbmVfaWRdOwo+ID4gKwkJCXNlcV9wcmludGYobSwgIiAg UGxhbmUlLThkJTh1JTh1JTh1XG4iLCBwbGFuZV9pZCArIDEsCj4gPiAgCQkJCSAgIGVudHJ5LT5z dGFydCwgZW50cnktPmVuZCwKPiA+ICAJCQkJICAgc2tsX2RkYl9lbnRyeV9zaXplKGVudHJ5KSk7 Cj4gPiAgCQl9Cj4gPiAgCj4gPiAtCQllbnRyeSA9ICZkZGItPnBsYW5lW3BpcGVdW1BMQU5FX0NV UlNPUl07Cj4gPiArCQllbnRyeSA9ICZjcnRjX3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3lbUExB TkVfQ1VSU09SXTsKPiA+ICAJCXNlcV9wcmludGYobSwgIiAgJS0xM3MlOHUlOHUlOHVcbiIsICJD dXJzb3IiLCBlbnRyeS0+c3RhcnQsCj4gPiAgCQkJICAgZW50cnktPmVuZCwgc2tsX2RkYl9lbnRy eV9zaXplKGVudHJ5KSk7Cj4gPiAgCX0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4gaW5k ZXggMmE4OGE3ZWI4NzFiLi4xNzAyM2E4NjkwOTEgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCj4gPiBAQCAtMTIzNiw5ICsxMjM2LDYgQEAgc3RhdGljIGlubGluZSBib29sIHNrbF9k ZGJfZW50cnlfZXF1YWwoY29uc3Qgc3RydWN0IHNrbF9kZGJfZW50cnkgKmUxLAo+ID4gIH0KPiA+ ICAKPiA+ICBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uIHsKPiA+IC0JLyogcGFja2VkL3kgKi8K PiA+IC0Jc3RydWN0IHNrbF9kZGJfZW50cnkgcGxhbmVbSTkxNV9NQVhfUElQRVNdW0k5MTVfTUFY X1BMQU5FU107Cj4gPiAtCXN0cnVjdCBza2xfZGRiX2VudHJ5IHV2X3BsYW5lW0k5MTVfTUFYX1BJ UEVTXVtJOTE1X01BWF9QTEFORVNdOwo+ID4gIAl1OCBlbmFibGVkX3NsaWNlczsgLyogR0VOMTEg aGFzIGNvbmZpZ3VyYWJsZSAyIHNsaWNlcyAqLwo+ID4gIH07Cj4gCj4gTm93IHRoYXQgd2UncmUg ZG93biB0byBhIHNpbmdsZSBmaWVsZCBoZXJlLCB0aGVyZSBpc24ndCByZWFsbHkgYSBuZWVkIHRv Cj4gd3JhcCBpdCBpbiBhIHN0cnVjdC4gIENhbiB3ZSBqdXN0IGVsaW1pbmF0ZSB0aGUgc3RydWN0 dXJlPwoKUHJvYmFibHkuIFRoZSBlbmFibGVkX3NsaWNlcyB0aGluZyBpcyBhIGJpdCBidXN0ZWQg YW55d2F5IGF0IHRoZSBtb21lbnQuCkEgZmV3IHBlb3BsZSBoYXZlIG5vdGljZWQgdGhhdCB3ZSB0 cnkgdG8gcmVwcm9ncmFtIHRoZSBzbGljZSBjb3VudCBldmVuCmFsbCBwaXBlcyBhcmUgb2ZmIHdo aWNoIGxlYWRzIHRvIGEgd2FybmluZyBhYm91dCBhIG1pc3NpbmcgcnBtYSByZWZlcmVuY2UuCldo b2V2ZXIgZml4ZXMgdGhhdCBzaG91bGQgcHJvYmFibHkgZmlndXJlIG91dCB3aGVyZSB0aGlzIHRo aW5nIHNob3VsZApsaXZlIGFzIHdlbGwuCgo+IAo+ID4gIAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYwo+ID4gaW5kZXggYWMzNjg3YTAyNDVkLi5mNDk3YmI1MjFiYWYgMTAwNjQ0 Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gQEAgLTEwMDQwLDYgKzEw MDQwLDEwIEBAIHN0YXRpYyB2b2lkIGk5eHhfdXBkYXRlX2N1cnNvcihzdHJ1Y3QgaW50ZWxfcGxh bmUgKnBsYW5lLAo+ID4gIAkgKiBleGNlcHQgd2hlbiB0aGUgcGxhbmUgaXMgZ2V0dGluZyBlbmFi bGVkIGF0IHdoaWNoIHRpbWUKPiA+ICAJICogdGhlIENVUkNOVFIgd3JpdGUgYXJtcyB0aGUgdXBk YXRlLgo+ID4gIAkgKi8KPiA+ICsKPiA+ICsJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkK PiA+ICsJCXNrbF93cml0ZV9jdXJzb3Jfd20ocGxhbmUsIGNydGNfc3RhdGUpOwo+ID4gKwo+ID4g IAlpZiAocGxhbmUtPmN1cnNvci5iYXNlICE9IGJhc2UgfHwKPiA+ICAJICAgIHBsYW5lLT5jdXJz b3Iuc2l6ZSAhPSBmYmNfY3RsIHx8Cj4gPiAgCSAgICBwbGFuZS0+Y3Vyc29yLmNudGwgIT0gY250 bCkgewo+ID4gQEAgLTExODI5LDYgKzExODMzLDggQEAgc3RhdGljIHZvaWQgdmVyaWZ5X3dtX3N0 YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICAJc3RydWN0IHNrbF9waXBlX3dtIGh3X3dt LCAqc3dfd207Cj4gPiAgCXN0cnVjdCBza2xfcGxhbmVfd20gKmh3X3BsYW5lX3dtLCAqc3dfcGxh bmVfd207Cj4gPiAgCXN0cnVjdCBza2xfZGRiX2VudHJ5ICpod19kZGJfZW50cnksICpzd19kZGJf ZW50cnk7Cj4gPiArCXN0cnVjdCBza2xfZGRiX2VudHJ5IGh3X2RkYl95W0k5MTVfTUFYX1BMQU5F U107Cj4gPiArCXN0cnVjdCBza2xfZGRiX2VudHJ5IGh3X2RkYl91dltJOTE1X01BWF9QTEFORVNd Owo+ID4gIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0 Yyk7Cj4gPiAgCWNvbnN0IGVudW0gcGlwZSBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKPiA+ICAJ aW50IHBsYW5lLCBsZXZlbCwgbWF4X2xldmVsID0gaWxrX3dtX21heF9sZXZlbChkZXZfcHJpdik7 Cj4gPiBAQCAtMTE4MzksNiArMTE4NDUsOCBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfd21fc3RhdGUo c3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gIAlza2xfcGlwZV93bV9nZXRfaHdfc3RhdGUoY3J0 YywgJmh3X3dtKTsKPiA+ICAJc3dfd20gPSAmdG9faW50ZWxfY3J0Y19zdGF0ZShuZXdfc3RhdGUp LT53bS5za2wub3B0aW1hbDsKPiA+ICAKPiA+ICsJc2tsX3BpcGVfZGRiX2dldF9od19zdGF0ZShp bnRlbF9jcnRjLCBod19kZGJfeSwgaHdfZGRiX3V2KTsKPiA+ICsKPiAKPiBJIG5vdGljZSB3ZSd2 ZSBuZXZlciBiZWVuIHZlcmlmeWluZyB0aGUgVVYgZGRiIGVudHJpZXM7IHNob3VsZCB3ZSBiZQo+ IChtYXliZSBpbiBhIHNlcGFyYXRlIHBhdGNoKT8KClNlZW1zIGxpa2UgZ29vZCBpZGVhLiBXZSdy ZSBhbHNvIHVzaW5nIGEgPjFLaUIgb2Ygc3RhY2sgaGVyZSAoMzJiaXQKYnVpbGRzIGFyZSBjb21w bGFpbmluZyBhYm91dCB0aGF0KS4gU28gcHJvYmFibHkgbmVlZCB0byByZXdvcmsgdGhpcwpjb2Rl IG1vcmUgZXh0ZW5zaXZlbHkuCgo+IAo+IAo+ID4gIAlza2xfZGRiX2dldF9od19zdGF0ZShkZXZf cHJpdiwgJmh3X2RkYik7Cj4gPiAgCXN3X2RkYiA9ICZkZXZfcHJpdi0+d20uc2tsX2h3LmRkYjsK PiA+ICAKPiA+IEBAIC0xMTg4MSw4ICsxMTg4OSw4IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV93bV9z dGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiAgCQl9Cj4gPiAgCj4gPiAgCQkvKiBEREIg Ki8KPiA+IC0JCWh3X2RkYl9lbnRyeSA9ICZod19kZGIucGxhbmVbcGlwZV1bcGxhbmVdOwo+ID4g LQkJc3dfZGRiX2VudHJ5ID0gJnN3X2RkYi0+cGxhbmVbcGlwZV1bcGxhbmVdOwo+ID4gKwkJaHdf ZGRiX2VudHJ5ID0gJmh3X2RkYl95W3BsYW5lXTsKPiA+ICsJCXN3X2RkYl9lbnRyeSA9ICZ0b19p bnRlbF9jcnRjX3N0YXRlKG5ld19zdGF0ZSktPndtLnNrbC5wbGFuZV9kZGJfeVtwbGFuZV07Cj4g PiAgCj4gPiAgCQlpZiAoIXNrbF9kZGJfZW50cnlfZXF1YWwoaHdfZGRiX2VudHJ5LCBzd19kZGJf ZW50cnkpKSB7Cj4gPiAgCQkJRFJNX0VSUk9SKCJtaXNtYXRjaCBpbiBEREIgc3RhdGUgcGlwZSAl YyBwbGFuZSAlZCAoZXhwZWN0ZWQgKCV1LCV1KSwgZm91bmQgKCV1LCV1KSlcbiIsCj4gPiBAQCAt MTE5MzEsOCArMTE5MzksOCBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfd21fc3RhdGUoc3RydWN0IGRy bV9jcnRjICpjcnRjLAo+ID4gIAkJfQo+ID4gIAo+ID4gIAkJLyogRERCICovCj4gPiAtCQlod19k ZGJfZW50cnkgPSAmaHdfZGRiLnBsYW5lW3BpcGVdW1BMQU5FX0NVUlNPUl07Cj4gPiAtCQlzd19k ZGJfZW50cnkgPSAmc3dfZGRiLT5wbGFuZVtwaXBlXVtQTEFORV9DVVJTT1JdOwo+ID4gKwkJaHdf ZGRiX2VudHJ5ID0gJmh3X2RkYl95W1BMQU5FX0NVUlNPUl07Cj4gPiArCQlzd19kZGJfZW50cnkg PSAmdG9faW50ZWxfY3J0Y19zdGF0ZShuZXdfc3RhdGUpLT53bS5za2wucGxhbmVfZGRiX3lbUExB TkVfQ1VSU09SXTsKPiA+ICAKPiA+ICAJCWlmICghc2tsX2RkYl9lbnRyeV9lcXVhbChod19kZGJf ZW50cnksIHN3X2RkYl9lbnRyeSkpIHsKPiA+ICAJCQlEUk1fRVJST1IoIm1pc21hdGNoIGluIERE QiBzdGF0ZSBwaXBlICVjIGN1cnNvciAoZXhwZWN0ZWQgKCV1LCV1KSwgZm91bmQgKCV1LCV1KSlc biIsCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5oCj4gPiBpbmRleCBkZjllNmVi YjI3ZGUuLjA3ODQwNmRjNjVlNSAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rpc3BsYXkuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlz cGxheS5oCj4gPiBAQCAtMzE5LDcgKzMxOSw3IEBAIHN0cnVjdCBpbnRlbF9saW5rX21fbiB7Cj4g PiAgCQkJICAgICYoZGV2KS0+bW9kZV9jb25maWcucGxhbmVfbGlzdCwJCVwKPiA+ICAJCQkgICAg YmFzZS5oZWFkKQkJCQkJXAo+ID4gIAkJZm9yX2VhY2hfaWYoKHBsYW5lX21hc2spICYJCQkJXAo+ ID4gLQkJCSAgICBkcm1fcGxhbmVfbWFzaygmaW50ZWxfcGxhbmUtPmJhc2UpKSkKPiA+ICsJCQkg ICAgZHJtX3BsYW5lX21hc2soJmludGVsX3BsYW5lLT5iYXNlKSkKPiA+ICAKPiAKPiBMb29rcyBs aWtlIHRoaXMgaXMgYW4gaW5kZXBlbmRlbnQgZml4IGZvciA0MDU2MGUyNmRjNDVlICgiZHJtL2k5 MTU6IFVzZQo+IGRybV9wbGFuZV9tYXNrKCkgJiBjby4iKS4gIEFwcGFyZW50bHkgd2UgaGF2ZW4n dCBhY3R1YWxseSBiZWVuIHVzaW5nCj4gdGhhdCBtYWNybywgYnV0IHdlIGRvbid0IHN0YXJ0IHVz aW5nIGl0IGluIHRoaXMgcGF0Y2gsIHNvIGl0IHNob3VsZAo+IHByb2JhYmx5IGJlIGZpeGVkIHNl cGFyYXRlbHkuCgpPaC4gSSB0aGluayBJIHdhcyB1c2luZyBpdCBhbmQgdGhlbiB0aGUgYnVpbGQg b2J2aW91c2x5IGZhaWxlZC4gQnV0Cm1heWJlIEkgcmV3b3JrZWQgc29tZXRoaW5nIGFuZCBzdG9w cGVkIHVzaW5nIGl0LiBJJ2xsIGhhdmUgYW5vdGhlcgpsb29rIGFuZCBzcGxpdCB0aGlzIG91dCBp ZiBpdCdzIG5vdCBuZWVkZWQuCgo+IAo+ID4gICNkZWZpbmUgZm9yX2VhY2hfaW50ZWxfcGxhbmVf b25fY3J0YyhkZXYsIGludGVsX2NydGMsIGludGVsX3BsYW5lKQlcCj4gPiAgCWxpc3RfZm9yX2Vh Y2hfZW50cnkoaW50ZWxfcGxhbmUsCQkJCVwKPiA+IEBAIC00MTUsNiArNDE1LDE1IEBAIHN0cnVj dCBpbnRlbF9saW5rX21fbiB7Cj4gPiAgCSAgICAgKF9faSkrKykgXAo+ID4gIAkJZm9yX2VhY2hf aWYocGxhbmUpCj4gPiAgCj4gPiArI2RlZmluZSBmb3JfZWFjaF9vbGRuZXdfaW50ZWxfY3J0Y19p bl9zdGF0ZShfX3N0YXRlLCBjcnRjLCBvbGRfY3J0Y19zdGF0ZSwgbmV3X2NydGNfc3RhdGUsIF9f aSkgXAo+ID4gKwlmb3IgKChfX2kpID0gMDsgXAo+ID4gKwkgICAgIChfX2kpIDwgKF9fc3RhdGUp LT5iYXNlLmRldi0+bW9kZV9jb25maWcubnVtX2NydGMgJiYgXAo+ID4gKwkJICAgICAoKGNydGMp ID0gdG9faW50ZWxfY3J0YygoX19zdGF0ZSktPmJhc2UuY3J0Y3NbX19pXS5wdHIpLCBcCj4gPiAr CQkgICAgICAob2xkX2NydGNfc3RhdGUpID0gdG9faW50ZWxfY3J0Y19zdGF0ZSgoX19zdGF0ZSkt PmJhc2UuY3J0Y3NbX19pXS5vbGRfc3RhdGUpLCBcCj4gPiArCQkgICAgICAobmV3X2NydGNfc3Rh dGUpID0gdG9faW50ZWxfY3J0Y19zdGF0ZSgoX19zdGF0ZSktPmJhc2UuY3J0Y3NbX19pXS5uZXdf c3RhdGUpLCAxKTsgXAo+ID4gKwkgICAgIChfX2kpKyspIFwKPiA+ICsJCWZvcl9lYWNoX2lmKGNy dGMpCj4gPiArCj4gPiAgdm9pZCBpbnRlbF9saW5rX2NvbXB1dGVfbV9uKGludCBicHAsIGludCBu bGFuZXMsCj4gPiAgCQkJICAgIGludCBwaXhlbF9jbG9jaywgaW50IGxpbmtfY2xvY2ssCj4gPiAg CQkJICAgIHN0cnVjdCBpbnRlbF9saW5rX21fbiAqbV9uLAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHJ2LmgKPiA+IGluZGV4IGZhZThjOGY2ZDAwOS4uNjRlZTg0YzZlZTA5IDEwMDY0NAo+ID4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gPiBAQCAtNzA1LDYgKzcwNSw4IEBAIHN0cnVjdCBpbnRl bF9jcnRjX3dtX3N0YXRlIHsKPiA+ICAJCQkvKiBnZW45KyBvbmx5IG5lZWRzIDEtc3RlcCB3bSBw cm9ncmFtbWluZyAqLwo+ID4gIAkJCXN0cnVjdCBza2xfcGlwZV93bSBvcHRpbWFsOwo+ID4gIAkJ CXN0cnVjdCBza2xfZGRiX2VudHJ5IGRkYjsKPiA+ICsJCQlzdHJ1Y3Qgc2tsX2RkYl9lbnRyeSBw bGFuZV9kZGJfeVtJOTE1X01BWF9QTEFORVNdOwo+ID4gKwkJCXN0cnVjdCBza2xfZGRiX2VudHJ5 IHBsYW5lX2RkYl91dltJOTE1X01BWF9QTEFORVNdOwo+ID4gIAkJfSBza2w7Cj4gPiAgCj4gPiAg CQlzdHJ1Y3Qgewo+ID4gQEAgLTIxODMsNiArMjE4NSw5IEBAIHZvaWQgZzR4X3dtX2dldF9od19z dGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiA+ICB2b2lkIHZsdl93bV9nZXRfaHdfc3Rh dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gPiAgdm9pZCBpbGtfd21fZ2V0X2h3X3N0YXRl KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ID4gIHZvaWQgc2tsX3dtX2dldF9od19zdGF0ZShz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiA+ICt2b2lkIHNrbF9waXBlX2RkYl9nZXRfaHdfc3Rh dGUoc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gPiArCQkJICAgICAgIHN0cnVjdCBza2xfZGRi X2VudHJ5ICpkZGJfeSwKPiA+ICsJCQkgICAgICAgc3RydWN0IHNrbF9kZGJfZW50cnkgKmRkYl91 dik7Cj4gPiAgdm9pZCBza2xfZGRiX2dldF9od19zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCj4gPiAgCQkJICBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpkZGIgLyog b3V0ICovKTsKPiA+ICB2b2lkIHNrbF9waXBlX3dtX2dldF9od19zdGF0ZShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCj4gPiBAQCAtMjE5Nyw2ICsyMjAyLDEwIEBAIGJvb2wgc2tsX3dtX2xldmVsX2Vx dWFscyhjb25zdCBzdHJ1Y3Qgc2tsX3dtX2xldmVsICpsMSwKPiA+ICBib29sIHNrbF9kZGJfYWxs b2NhdGlvbl9vdmVybGFwcyhjb25zdCBzdHJ1Y3Qgc2tsX2RkYl9lbnRyeSAqZGRiLAo+ID4gIAkJ CQkgY29uc3Qgc3RydWN0IHNrbF9kZGJfZW50cnkgZW50cmllc1tdLAo+ID4gIAkJCQkgaW50IG51 bV9lbnRyaWVzLCBpbnQgaWdub3JlX2lkeCk7Cj4gPiArdm9pZCBza2xfd3JpdGVfcGxhbmVfd20o c3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKPiA+ICsJCQljb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Cj4gPiArdm9pZCBza2xfd3JpdGVfY3Vyc29yX3dtKHN0cnVj dCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gPiArCQkJIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlKTsKPiA+ICBib29sIGlsa19kaXNhYmxlX2xwX3dtKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpOwo+ID4gIGludCBza2xfY2hlY2tfcGlwZV9tYXhfcGl4ZWxfcmF0ZShzdHJ1 Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywKPiA+ICAJCQkJICBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3N0YXRlKTsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ID4gaW5kZXggNzQ5ZThk ODE0Y2U1Li40MDQwNmNjMGQ0MGIgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9wbS5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4g PiBAQCAtMzkxMSw2OCArMzkxMSw3MCBAQCBzdGF0aWMgdm9pZAo+ID4gIHNrbF9kZGJfZ2V0X2h3 X3BsYW5lX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ICAJCQkg ICBjb25zdCBlbnVtIHBpcGUgcGlwZSwKPiA+ICAJCQkgICBjb25zdCBlbnVtIHBsYW5lX2lkIHBs YW5lX2lkLAo+ID4gLQkJCSAgIHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRkYiAvKiBvdXQg Ki8pCj4gPiArCQkJICAgc3RydWN0IHNrbF9kZGJfZW50cnkgKmRkYl95LAo+ID4gKwkJCSAgIHN0 cnVjdCBza2xfZGRiX2VudHJ5ICpkZGJfdXYpCj4gPiAgewo+ID4gLQl1MzIgdmFsLCB2YWwyID0g MDsKPiA+IC0JaW50IGZvdXJjYywgcGl4ZWxfZm9ybWF0Owo+ID4gKwl1MzIgdmFsLCB2YWwyOwo+ ID4gKwl1MzIgZm91cmNjID0gMDsKPiA+ICAKPiA+ICAJLyogQ3Vyc29yIGRvZXNuJ3Qgc3VwcG9y dCBOVjEyL3BsYW5hciwgc28gbm8gZXh0cmEgY2FsY3VsYXRpb24gbmVlZGVkICovCj4gPiAgCWlm IChwbGFuZV9pZCA9PSBQTEFORV9DVVJTT1IpIHsKPiA+ICAJCXZhbCA9IEk5MTVfUkVBRChDVVJf QlVGX0NGRyhwaXBlKSk7Cj4gPiAtCQlza2xfZGRiX2VudHJ5X2luaXRfZnJvbV9odyhkZXZfcHJp diwKPiA+IC0JCQkJCSAgICZkZGItPnBsYW5lW3BpcGVdW3BsYW5lX2lkXSwgdmFsKTsKPiA+ICsJ CXNrbF9kZGJfZW50cnlfaW5pdF9mcm9tX2h3KGRldl9wcml2LCBkZGJfeSwgdmFsKTsKPiA+ICAJ CXJldHVybjsKPiA+ICAJfQo+ID4gIAo+ID4gIAl2YWwgPSBJOTE1X1JFQUQoUExBTkVfQ1RMKHBp cGUsIHBsYW5lX2lkKSk7Cj4gPiAgCj4gPiAgCS8qIE5vIEREQiBhbGxvY2F0ZWQgZm9yIGRpc2Fi bGVkIHBsYW5lcyAqLwo+IAo+IFRoZSBjb2RlIGZsb3cgYmVsb3cgbm8gbG9uZ2VyIG1hdGNoZXMg dGhpcyBjb21tZW50Li4ud2Ugbm93IG9ubHkgc2tpcAo+IGZvdXJjYyBsb29rdXAgZm9yIGRpc2Fi bGVkIHBsYW5lcywgYnV0IHN0aWxsIHJlYWQgdGhlIGJ1ZiByZWdpc3RlcnMgYW5kCj4gZmlsbCBp biB0aGUgZGRiIGVudHJ5IHN0cnVjdHVyZXMuICBXYXMgdGhpcyBjaGFuZ2UgaW50ZW50aW9uYWw/ CgpZZWFoLCBzaW5jZSB3ZSBub3cgcHJvZ3JhbSB0aGVtIGZyb20gLmRpc2FibGVfcGxhbmUoKSBh cyB3ZWxsIEkgd2FudGVkCnRvIG1ha2Ugc3VyZSB3ZSdyZSBhbHdheXMgcHJvZ3JhbW1pbmcgdGhl bSBjb25zaXN0ZW50bHkuCgo+IEknZAo+IGV4cGVjdCB0aGUgcmVnaXN0ZXJzIHRvIHByb2JhYmx5 IGdpdmUgdXMgemVybydkIGVudHJpZXMgd2hlbiB3ZSByZWFkCj4gdGhlbSwgYnV0IEknbSBub3Qg c3VyZSBpZiB0aGF0J3MgYWN0dWFsbHkgdHJ1ZSB3aGVuIHJlYWRpbmcgaW4gdGhlCj4gaW5pdGlh bCBCSU9TIHN0YXRlLgoKV2Ugc2hvdWxkIGNsZWFuIHVwIHdoYXRldmVyIG1lc3MgdGhlIEJJT1Mg bGVmdCB1cy4gRG9pbmcgdGhlIHJlYWRvdXQKdW5jb25kaXRpb25hbGx5IHNob3VsZCBtYWtlIHRo YXQgaGFwcGVuIGFzIHdlJ2xsIG5vdGUgdGhlIGluY29uc2lzdGVuY3kKYmV0d2VlbiB0aGUgY2Fs Y3VsYXRlZCBhbmQgY3VycmVudCBkZGIgYWxsb2NhdGlvbiBhbmQgZm9yY2UgYSBwbGFuZQp1cGRh dGUgd2hlcmUgbmVlZGVkLgoKPiAKPiA+IC0JaWYgKCEodmFsICYgUExBTkVfQ1RMX0VOQUJMRSkp Cj4gPiAtCQlyZXR1cm47Cj4gPiAtCj4gPiAtCXBpeGVsX2Zvcm1hdCA9IHZhbCAmIFBMQU5FX0NU TF9GT1JNQVRfTUFTSzsKPiA+IC0JZm91cmNjID0gc2tsX2Zvcm1hdF90b19mb3VyY2MocGl4ZWxf Zm9ybWF0LAo+ID4gLQkJCQkgICAgICB2YWwgJiBQTEFORV9DVExfT1JERVJfUkdCWCwKPiA+IC0J CQkJICAgICAgdmFsICYgUExBTkVfQ1RMX0FMUEhBX01BU0spOwo+ID4gKwlpZiAodmFsICYgUExB TkVfQ1RMX0VOQUJMRSkKPiA+ICsJCWZvdXJjYyA9IHNrbF9mb3JtYXRfdG9fZm91cmNjKHZhbCAm IFBMQU5FX0NUTF9GT1JNQVRfTUFTSywKPiA+ICsJCQkJCSAgICAgIHZhbCAmIFBMQU5FX0NUTF9P UkRFUl9SR0JYLAo+ID4gKwkJCQkJICAgICAgdmFsICYgUExBTkVfQ1RMX0FMUEhBX01BU0spOwo+ ID4gIAo+ID4gLQl2YWwgPSBJOTE1X1JFQUQoUExBTkVfQlVGX0NGRyhwaXBlLCBwbGFuZV9pZCkp Owo+ID4gLQlpZiAoZm91cmNjID09IERSTV9GT1JNQVRfTlYxMiAmJiBJTlRFTF9HRU4oZGV2X3By aXYpIDwgMTEpIHsKPiA+ICsJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEpIHsKPiA+ICsJ CXZhbCA9IEk5MTVfUkVBRChQTEFORV9CVUZfQ0ZHKHBpcGUsIHBsYW5lX2lkKSk7Cj4gPiArCQlz a2xfZGRiX2VudHJ5X2luaXRfZnJvbV9odyhkZXZfcHJpdiwgZGRiX3ksIHZhbCk7Cj4gPiArCX0g ZWxzZSB7Cj4gPiArCQl2YWwgPSBJOTE1X1JFQUQoUExBTkVfQlVGX0NGRyhwaXBlLCBwbGFuZV9p ZCkpOwo+ID4gIAkJdmFsMiA9IEk5MTVfUkVBRChQTEFORV9OVjEyX0JVRl9DRkcocGlwZSwgcGxh bmVfaWQpKTsKPiA+ICAKPiA+IC0JCXNrbF9kZGJfZW50cnlfaW5pdF9mcm9tX2h3KGRldl9wcml2 LAo+ID4gLQkJCQkJICAgJmRkYi0+cGxhbmVbcGlwZV1bcGxhbmVfaWRdLCB2YWwyKTsKPiA+IC0J CXNrbF9kZGJfZW50cnlfaW5pdF9mcm9tX2h3KGRldl9wcml2LAo+ID4gLQkJCQkJICAgJmRkYi0+ dXZfcGxhbmVbcGlwZV1bcGxhbmVfaWRdLCB2YWwpOwo+ID4gLQl9IGVsc2Ugewo+ID4gLQkJc2ts X2RkYl9lbnRyeV9pbml0X2Zyb21faHcoZGV2X3ByaXYsCj4gPiAtCQkJCQkgICAmZGRiLT5wbGFu ZVtwaXBlXVtwbGFuZV9pZF0sIHZhbCk7Cj4gPiArCQlpZiAoZm91cmNjID09IERSTV9GT1JNQVRf TlYxMikKPiA+ICsJCQlzd2FwKHZhbCwgdmFsMik7Cj4gPiArCj4gPiArCQlza2xfZGRiX2VudHJ5 X2luaXRfZnJvbV9odyhkZXZfcHJpdiwgZGRiX3ksIHZhbCk7Cj4gPiArCQlza2xfZGRiX2VudHJ5 X2luaXRfZnJvbV9odyhkZXZfcHJpdiwgZGRiX3V2LCB2YWwyKTsKPiA+ICAJfQo+ID4gIH0KPiA+ ICAKPiA+IC12b2lkIHNrbF9kZGJfZ2V0X2h3X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKPiA+IC0JCQkgIHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRkYiAvKiBv dXQgKi8pCj4gPiArdm9pZCBza2xfcGlwZV9kZGJfZ2V0X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9j cnRjICpjcnRjLAo+ID4gKwkJCSAgICAgICBzdHJ1Y3Qgc2tsX2RkYl9lbnRyeSAqZGRiX3ksCj4g PiArCQkJICAgICAgIHN0cnVjdCBza2xfZGRiX2VudHJ5ICpkZGJfdXYpCj4gPiAgewo+ID4gLQlz dHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKPiA+IC0KPiA+IC0JbWVtc2V0KGRkYiwgMCwgc2l6ZW9m KCpkZGIpKTsKPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShjcnRjLT5iYXNlLmRldik7Cj4gPiArCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4g cG93ZXJfZG9tYWluOwo+ID4gKwllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7Cj4gPiArCWVu dW0gcGxhbmVfaWQgcGxhbmVfaWQ7Cj4gPiAgCj4gPiAtCWRkYi0+ZW5hYmxlZF9zbGljZXMgPSBp bnRlbF9lbmFibGVkX2RidWZfc2xpY2VzX251bShkZXZfcHJpdik7Cj4gPiArCXBvd2VyX2RvbWFp biA9IFBPV0VSX0RPTUFJTl9QSVBFKHBpcGUpOwo+ID4gKwlpZiAoIWludGVsX2Rpc3BsYXlfcG93 ZXJfZ2V0X2lmX2VuYWJsZWQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbikpCj4gPiArCQlyZXR1cm47 Cj4gPiAgCj4gPiAtCWZvcl9lYWNoX2ludGVsX2NydGMoJmRldl9wcml2LT5kcm0sIGNydGMpIHsK PiA+IC0JCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gcG93ZXJfZG9tYWluOwo+ID4g LQkJZW51bSBwbGFuZV9pZCBwbGFuZV9pZDsKPiA+IC0JCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+ cGlwZTsKPiA+ICsJZm9yX2VhY2hfcGxhbmVfaWRfb25fY3J0YyhjcnRjLCBwbGFuZV9pZCkKPiA+ ICsJCXNrbF9kZGJfZ2V0X2h3X3BsYW5lX3N0YXRlKGRldl9wcml2LCBwaXBlLAo+ID4gKwkJCQkJ ICAgcGxhbmVfaWQsCj4gPiArCQkJCQkgICAmZGRiX3lbcGxhbmVfaWRdLAo+ID4gKwkJCQkJICAg JmRkYl91dltwbGFuZV9pZF0pOwo+ID4gIAo+ID4gLQkJcG93ZXJfZG9tYWluID0gUE9XRVJfRE9N QUlOX1BJUEUocGlwZSk7Cj4gPiAtCQlpZiAoIWludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0X2lmX2Vu YWJsZWQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbikpCj4gPiAtCQkJY29udGludWU7Cj4gPiArCWlu dGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBwb3dlcl9kb21haW4pOwo+ID4gK30KPiA+ ICAKPiA+IC0JCWZvcl9lYWNoX3BsYW5lX2lkX29uX2NydGMoY3J0YywgcGxhbmVfaWQpCj4gPiAt CQkJc2tsX2RkYl9nZXRfaHdfcGxhbmVfc3RhdGUoZGV2X3ByaXYsIHBpcGUsCj4gPiAtCQkJCQkJ ICAgcGxhbmVfaWQsIGRkYik7Cj4gPiArdm9pZCBza2xfZGRiX2dldF9od19zdGF0ZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiArCQkJICBzdHJ1Y3Qgc2tsX2RkYl9hbGxv Y2F0aW9uICpkZGIgLyogb3V0ICovKQo+ID4gK3sKPiA+ICsJbWVtc2V0KGRkYiwgMCwgc2l6ZW9m KCpkZGIpKTsKPiAKPiBUaGUgb25seSB0aGluZyBsZWZ0IGluIHRoZSBzdHJ1Y3R1cmUgaXMgJ2Vu YWJsZWRfc2xpY2VzJyB3aGljaCB3ZSBzZXQKPiBkaXJlY3RseSBiZWxvdywgc28gSSB0aGluayB0 aGlzIG1lbXNldCBpcyB1bm5lY2Vzc2FyeS4gIEFsdGhvdWdoIGFzCj4gbm90ZWQgYWJvdmUsIGl0 IHdvdWxkIGJlIGJldHRlciB0byBqdXN0IGVsaW1pbmF0ZSB0aGUgc3RydWN0dXJlIGl0c2VsZi4K PiAKPiA+ICAKPiA+IC0JCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBwb3dlcl9k b21haW4pOwo+ID4gLQl9Cj4gPiArCWRkYi0+ZW5hYmxlZF9zbGljZXMgPSBpbnRlbF9lbmFibGVk X2RidWZfc2xpY2VzX251bShkZXZfcHJpdik7Cj4gPiAgfQo+ID4gIAo+ID4gIC8qCj4gPiBAQCAt NDM3MCw3ICs0MzcyLDYgQEAgc2tsX2FsbG9jYXRlX3BpcGVfZGRiKHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjc3RhdGUsCj4gPiAgCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGNzdGF0ZS0+YmFz ZS5jcnRjOwo+ID4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KGNydGMtPmRldik7Cj4gPiAgCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50 ZWxfY3J0YyhjcnRjKTsKPiA+IC0JZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwo+ ID4gIAlzdHJ1Y3Qgc2tsX2RkYl9lbnRyeSAqYWxsb2MgPSAmY3N0YXRlLT53bS5za2wuZGRiOwo+ ID4gIAl1aW50MTZfdCBhbGxvY19zaXplLCBzdGFydDsKPiA+ICAJdWludDE2X3QgbWluaW11bVtJ OTE1X01BWF9QTEFORVNdID0ge307Cj4gPiBAQCAtNDM4Myw4ICs0Mzg0LDggQEAgc2tsX2FsbG9j YXRlX3BpcGVfZGRiKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gPiAgCXVpbnQx Nl90IHRvdGFsX21pbl9ibG9ja3MgPSAwOwo+ID4gIAo+ID4gIAkvKiBDbGVhciB0aGUgcGFydGl0 aW9uaW5nIGZvciBkaXNhYmxlZCBwbGFuZXMuICovCj4gPiAtCW1lbXNldChkZGItPnBsYW5lW3Bp cGVdLCAwLCBzaXplb2YoZGRiLT5wbGFuZVtwaXBlXSkpOwo+ID4gLQltZW1zZXQoZGRiLT51dl9w bGFuZVtwaXBlXSwgMCwgc2l6ZW9mKGRkYi0+dXZfcGxhbmVbcGlwZV0pKTsKPiA+ICsJbWVtc2V0 KGNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95LCAwLCBzaXplb2YoY3N0YXRlLT53bS5za2wucGxh bmVfZGRiX3kpKTsKPiA+ICsJbWVtc2V0KGNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl91diwgMCwg c2l6ZW9mKGNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl91dikpOwo+ID4gIAo+ID4gIAlpZiAoV0FS Tl9PTighc3RhdGUpKQo+ID4gIAkJcmV0dXJuIDA7Cj4gPiBAQCAtNDQzMSw4ICs0NDMyLDggQEAg c2tsX2FsbG9jYXRlX3BpcGVfZGRiKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4g PiAgCX0KPiA+ICAKPiA+ICAJYWxsb2Nfc2l6ZSAtPSB0b3RhbF9taW5fYmxvY2tzOwo+ID4gLQlk ZGItPnBsYW5lW3BpcGVdW1BMQU5FX0NVUlNPUl0uc3RhcnQgPSBhbGxvYy0+ZW5kIC0gbWluaW11 bVtQTEFORV9DVVJTT1JdOwo+ID4gLQlkZGItPnBsYW5lW3BpcGVdW1BMQU5FX0NVUlNPUl0uZW5k ID0gYWxsb2MtPmVuZDsKPiA+ICsJY3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3lbUExBTkVfQ1VS U09SXS5zdGFydCA9IGFsbG9jLT5lbmQgLSBtaW5pbXVtW1BMQU5FX0NVUlNPUl07Cj4gPiArCWNz dGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95W1BMQU5FX0NVUlNPUl0uZW5kID0gYWxsb2MtPmVuZDsK PiA+ICAKPiA+ICAJLyoKPiA+ICAJICogMi4gRGlzdHJpYnV0ZSB0aGUgcmVtYWluaW5nIHNwYWNl IGluIHByb3BvcnRpb24gdG8gdGhlIGFtb3VudCBvZgo+ID4gQEAgLTQ0NjMsOCArNDQ2NCw4IEBA IHNrbF9hbGxvY2F0ZV9waXBlX2RkYihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ ID4gIAo+ID4gIAkJLyogTGVhdmUgZGlzYWJsZWQgcGxhbmVzIGF0ICgwLDApICovCj4gPiAgCQlp ZiAoZGF0YV9yYXRlKSB7Cj4gPiAtCQkJZGRiLT5wbGFuZVtwaXBlXVtwbGFuZV9pZF0uc3RhcnQg PSBzdGFydDsKPiA+IC0JCQlkZGItPnBsYW5lW3BpcGVdW3BsYW5lX2lkXS5lbmQgPSBzdGFydCAr IHBsYW5lX2Jsb2NrczsKPiA+ICsJCQljc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtwbGFuZV9p ZF0uc3RhcnQgPSBzdGFydDsKPiA+ICsJCQljc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtwbGFu ZV9pZF0uZW5kID0gc3RhcnQgKyBwbGFuZV9ibG9ja3M7Cj4gPiAgCQl9Cj4gPiAgCj4gPiAgCQlz dGFydCArPSBwbGFuZV9ibG9ja3M7Cj4gPiBAQCAtNDQ3OSw4ICs0NDgwLDggQEAgc2tsX2FsbG9j YXRlX3BpcGVfZGRiKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gPiAgCQlXQVJO X09OKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEgJiYgdXZfcGxhbmVfYmxvY2tzKTsKPiA+ICAK PiA+ICAJCWlmICh1dl9kYXRhX3JhdGUpIHsKPiA+IC0JCQlkZGItPnV2X3BsYW5lW3BpcGVdW3Bs YW5lX2lkXS5zdGFydCA9IHN0YXJ0Owo+ID4gLQkJCWRkYi0+dXZfcGxhbmVbcGlwZV1bcGxhbmVf aWRdLmVuZCA9Cj4gPiArCQkJY3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3V2W3BsYW5lX2lkXS5z dGFydCA9IHN0YXJ0Owo+ID4gKwkJCWNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl91dltwbGFuZV9p ZF0uZW5kID0KPiA+ICAJCQkJc3RhcnQgKyB1dl9wbGFuZV9ibG9ja3M7Cj4gPiAgCQl9Cj4gPiAg Cj4gPiBAQCAtNDU5MCw5ICs0NTkxLDYgQEAgc2tsX2NvbXB1dGVfcGxhbmVfd21fcGFyYW1zKGNv bnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ICAJCXRvX2ludGVsX2F0 b21pY19zdGF0ZShjc3RhdGUtPmJhc2Uuc3RhdGUpOwo+ID4gIAlib29sIGFwcGx5X21lbW9yeV9i d193YSA9IHNrbF9uZWVkc19tZW1vcnlfYndfd2Eoc3RhdGUpOwo+ID4gIAo+ID4gLQlpZiAoIWlu dGVsX3dtX3BsYW5lX3Zpc2libGUoY3N0YXRlLCBpbnRlbF9wc3RhdGUpKQo+ID4gLQkJcmV0dXJu IDA7Cj4gPiAtCj4gCj4gSXQncyBub3QgY2xlYXIgdG8gbWUgd2h5IHdlIHJlbW92ZSB0aGlzPyAg Q2FuJ3Qgd2Ugc3RpbGwgZ2V0IGhlcmUgZm9yCj4gZGlzYWJsZWQgcGxhbmVzICh3aGVyZSBmYiBp cyBOVUxMKT8gIAoKSSBtb3ZlZCB0aGVzZSBjaGVja3MgaGlnaGVyIHVwIChza2xfYnVpbGRfcGxh bmVfd20oKSBhbmQKaWNsX2J1aWxkX3BsYW5lX3dtKCkpLgoKPiAKPiA+ICAJLyogb25seSBOVjEy IGZvcm1hdCBoYXMgdHdvIHBsYW5lcyAqLwo+ID4gIAlpZiAocGxhbmVfaWQgPT0gMSAmJiBmYi0+ Zm9ybWF0LT5mb3JtYXQgIT0gRFJNX0ZPUk1BVF9OVjEyKSB7Cj4gPiAgCQlEUk1fREVCVUdfS01T KCJOb24gTlYxMiBmb3JtYXQgaGF2ZSBzaW5nbGUgcGxhbmVcbiIpOwo+ID4gQEAgLTQ3MDYsOSAr NDcwNCw2IEBAIHN0YXRpYyBpbnQgc2tsX2NvbXB1dGVfcGxhbmVfd20oY29uc3Qgc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gIAlpZiAobGF0ZW5jeSA9PSAwKQo+ID4gIAkJ cmV0dXJuIGxldmVsID09IDAgPyAtRUlOVkFMIDogMDsKPiA+ICAKPiA+IC0JaWYgKCFpbnRlbF93 bV9wbGFuZV92aXNpYmxlKGNzdGF0ZSwgaW50ZWxfcHN0YXRlKSkKPiA+IC0JCXJldHVybiAwOwo+ ID4gLQo+IAo+IFVubGlrZSBhYm92ZSwgSSB0aGluayB3ZSBhbHdheXMgaGF2ZSBhIHZhbGlkIGZi IGhlcmUuICBCdXQgSSBkb24ndCBzZWUKPiBob3cgdGhpcyByZWxhdGVzIHRvIHdoYXQgdGhlIHJl c3Qgb2YgdGhlIHBhdGNoIGlzIHRyeWluZyB0byBkbz8gIEluIGZhY3QKPiBmcm9tIHRoaXMgcG9p bnQgb24sIEknbSBnZXR0aW5nIGEgYml0IGxvc3QgaW4gYSBsb3Qgb2YgY29kZWZsb3cgY2hhbmdl cwo+IG9uIHRoZSAnY2hlY2snIHBhcnQgb2YgdGhlIHRyYW5zYWN0aW9uIHRoYXQgZG9uJ3Qgc2Vl bSBsaWtlIGl0J3MKPiBkaXJlY3RseSByZWxhdGVkIHRvIHN0YXRlIGdvYWwgb2Ygd3JpdGluZyB3 YXRlcm1hcmtzIGFzIHBhcnQgb2YgdGhlIG1haW4KPiBwbGFuZSByZWdpc3RlciB1cGRhdGUgKHdo aWNoIHNob3VsZCBiZSBtb3N0bHkgb24gdGhlICdjb21taXQnIHNpZGUpIG9yCj4gbW92aW5nIGRk YiBpbnRvIGNzdGF0ZS4gIAoKSSB0aGluayB0aGUgY29kZSBlbmRlZCB1cCBzdXBlciBtZXNzeSB3 aXRoIHRyeWluZyB0byBtaW5pbWl6ZQp0aGUgY2hhbmdlcyByZWxhdGVkIHRvIHVzaW5nIHRoZSBj cnRjIHN0YXRlLiBCdXQgYSBsb3Qgb2YgdGhhdApjb3VsZCBoYXZlIGp1c3QgYmVlbiBkdWUgdG8g dGhlIGNvZGUgYmVpbmcgbWVzc3kgaW4gdGhlIGZpcnN0CnBsYWNlLiBZb3UgYXJlIHRvdGFsbHkg cmlnaHQgdGhhdCB0aGUgcGF0Y2ggZGlkIGVuZCBsb29raW5nCmxpa2UgY3JhcCA6KAoKPiAKPiBJ dCBmZWVscyBsaWtlIHdlJ3JlIGFsc28gdGFja2xpbmcgYSBsb3Qgb2YgbnYxMiB3YXRlcm1hcmsg YmVoYXZpb3IKPiBjaGFuZ2VzIHdpdGggdGhpcyBwYXRjaDsgaXMgaXQgcG9zc2libGUgdG8gc2Vw YXJhdGUgdGhhdCBvdXQgaW50byBhCj4gc2VwYXJhdGUgcGF0Y2g/CgpZZWFoLiBJJ2xsIHRyeSB0 byBzcGxpdCBpbnRvIHNtYWxsZXIgcGllY2VzLgoKPiAKPiAKPiBNYXR0Cj4gCj4gPiAgCS8qIERp c3BsYXkgV0EgIzExNDE6IGtibCxjZmwgKi8KPiA+ICAJaWYgKChJU19LQUJZTEFLRShkZXZfcHJp dikgfHwgSVNfQ09GRkVFTEFLRShkZXZfcHJpdikgfHwKPiA+ICAJICAgIElTX0NOTF9SRVZJRChk ZXZfcHJpdiwgQ05MX1JFVklEX0EwLCBDTkxfUkVWSURfQjApKSAmJgo+ID4gQEAgLTQ4MzEsMjEg KzQ4MjYsMTYgQEAgc3RhdGljIGludCBza2xfY29tcHV0ZV9wbGFuZV93bShjb25zdCBzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiAgCj4gPiAgc3RhdGljIGludAo+ID4gIHNr bF9jb21wdXRlX3dtX2xldmVscyhjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCj4gPiAtCQkgICAgICBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpkZGIsCj4gPiAgCQkg ICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ID4gIAkJICAgICAg Y29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICppbnRlbF9wc3RhdGUsCj4gPiAgCQkgICAg ICB1aW50MTZfdCBkZGJfYmxvY2tzLAo+ID4gIAkJICAgICAgY29uc3Qgc3RydWN0IHNrbF93bV9w YXJhbXMgKndtX3BhcmFtcywKPiA+IC0JCSAgICAgIHN0cnVjdCBza2xfcGxhbmVfd20gKndtLAo+ ID4gIAkJICAgICAgc3RydWN0IHNrbF93bV9sZXZlbCAqbGV2ZWxzKQo+ID4gIHsKPiA+ICAJaW50 IGxldmVsLCBtYXhfbGV2ZWwgPSBpbGtfd21fbWF4X2xldmVsKGRldl9wcml2KTsKPiA+ICAJc3Ry dWN0IHNrbF93bV9sZXZlbCAqcmVzdWx0X3ByZXYgPSAmbGV2ZWxzWzBdOwo+ID4gIAlpbnQgcmV0 Owo+ID4gIAo+ID4gLQlpZiAoV0FSTl9PTighaW50ZWxfcHN0YXRlLT5iYXNlLmZiKSkKPiA+IC0J CXJldHVybiAtRUlOVkFMOwo+ID4gLQo+ID4gIAlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPD0gbWF4 X2xldmVsOyBsZXZlbCsrKSB7Cj4gPiAgCQlzdHJ1Y3Qgc2tsX3dtX2xldmVsICpyZXN1bHQgPSAm bGV2ZWxzW2xldmVsXTsKPiA+ICAKPiA+IEBAIC00ODYzLDkgKzQ4NTMsNiBAQCBza2xfY29tcHV0 ZV93bV9sZXZlbHMoY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4g IAkJcmVzdWx0X3ByZXYgPSByZXN1bHQ7Cj4gPiAgCX0KPiA+ICAKPiA+IC0JaWYgKGludGVsX3Bz dGF0ZS0+YmFzZS5mYi0+Zm9ybWF0LT5mb3JtYXQgPT0gRFJNX0ZPUk1BVF9OVjEyKQo+ID4gLQkJ d20tPmlzX3BsYW5hciA9IHRydWU7Cj4gPiAtCj4gPiAgCXJldHVybiAwOwo+ID4gIH0KPiA+ICAK PiA+IEBAIC00ODkzLDEwICs0ODgwLDkgQEAgc2tsX2NvbXB1dGVfbGluZXRpbWVfd20oY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSkKPiA+ICB9Cj4gPiAgCj4gPiAgc3RhdGlj IHZvaWQgc2tsX2NvbXB1dGVfdHJhbnNpdGlvbl93bShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3N0YXRlLAo+ID4gLQkJCQkgICAgICBzdHJ1Y3Qgc2tsX3dtX3BhcmFtcyAqd3AsCj4g PiAtCQkJCSAgICAgIHN0cnVjdCBza2xfd21fbGV2ZWwgKndtX2wwLAo+ID4gLQkJCQkgICAgICB1 aW50MTZfdCBkZGJfYWxsb2NhdGlvbiwKPiA+IC0JCQkJICAgICAgc3RydWN0IHNrbF93bV9sZXZl bCAqdHJhbnNfd20gLyogb3V0ICovKQo+ID4gKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tsX3dt X3BhcmFtcyAqd3AsCj4gPiArCQkJCSAgICAgIHN0cnVjdCBza2xfcGxhbmVfd20gKndtLAo+ID4g KwkJCQkgICAgICB1aW50MTZfdCBkZGJfYWxsb2NhdGlvbikKPiA+ICB7Cj4gPiAgCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBjc3RhdGUtPmJhc2UuY3J0Yy0+ZGV2Owo+ID4gIAljb25zdCBzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gPiBAQCAtNDkw NCw5ICs0ODkwLDYgQEAgc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfdHJhbnNpdGlvbl93bShjb25z dCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ID4gIAljb25zdCB1aW50MTZfdCB0 cmFuc19hbW91bnQgPSAxMDsgLyogVGhpcyBpcyBjb25maWd1cmFibGUgYW1vdW50ICovCj4gPiAg CXVpbnQxNl90IHdtMF9zZWxfcmVzX2IsIHRyYW5zX29mZnNldF9iLCByZXNfYmxvY2tzOwo+ID4g IAo+ID4gLQlpZiAoIWNzdGF0ZS0+YmFzZS5hY3RpdmUpCj4gPiAtCQlyZXR1cm47Cj4gPiAtCj4g PiAgCS8qIFRyYW5zaXRpb24gV00gYXJlIG5vdCByZWNvbW1lbmRlZCBieSBIVyB0ZWFtIGZvciBH RU45ICovCj4gPiAgCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDw9IDkpCj4gPiAgCQlyZXR1cm47 Cj4gPiBAQCAtNDkzMSw3ICs0OTE0LDcgQEAgc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfdHJhbnNp dGlvbl93bShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ID4gIAkgKiBS ZXN1bHQgQmxvY2tzIGlzIFJlc3VsdCBCbG9ja3MgbWludXMgMSBhbmQgaXQgc2hvdWxkIHdvcmsg Zm9yIHRoZQo+ID4gIAkgKiBjdXJyZW50IHBsYXRmb3Jtcy4KPiA+ICAJICovCj4gPiAtCXdtMF9z ZWxfcmVzX2IgPSB3bV9sMC0+cGxhbmVfcmVzX2IgLSAxOwo+ID4gKwl3bTBfc2VsX3Jlc19iID0g d20tPndtWzBdLnBsYW5lX3Jlc19iIC0gMTsKPiA+ICAKPiA+ICAJaWYgKHdwLT55X3RpbGVkKSB7 Cj4gPiAgCQl0cmFuc195X3RpbGVfbWluID0gKHVpbnQxNl90KSBtdWxfcm91bmRfdXBfdTMyX2Zp eGVkMTYoMiwKPiA+IEBAIC00OTUwLDIzICs0OTMzLDE5IEBAIHN0YXRpYyB2b2lkIHNrbF9jb21w dXRlX3RyYW5zaXRpb25fd20oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwK PiA+ICAJcmVzX2Jsb2NrcyArPSAxOwo+ID4gIAo+ID4gIAlpZiAocmVzX2Jsb2NrcyA8IGRkYl9h bGxvY2F0aW9uKSB7Cj4gPiAtCQl0cmFuc193bS0+cGxhbmVfcmVzX2IgPSByZXNfYmxvY2tzOwo+ ID4gLQkJdHJhbnNfd20tPnBsYW5lX2VuID0gdHJ1ZTsKPiA+ICsJCXdtLT50cmFuc193bS5wbGFu ZV9yZXNfYiA9IHJlc19ibG9ja3M7Cj4gPiArCQl3bS0+dHJhbnNfd20ucGxhbmVfZW4gPSB0cnVl Owo+ID4gIAl9Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyBpbnQgX19za2xfYnVpbGRfcGxhbmVf d21fc2luZ2xlKHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRkYiwKPiA+IC0JCQkJICAgICAg IHN0cnVjdCBza2xfcGlwZV93bSAqcGlwZV93bSwKPiA+IC0JCQkJICAgICAgIGVudW0gcGxhbmVf aWQgcGxhbmVfaWQsCj4gPiAtCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3N0YXRlLAo+ID4gLQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpwc3RhdGUsCj4gPiAtCQkJCSAgICAgICBpbnQgY29sb3JfcGxhbmUpCj4gPiArc3RhdGljIGlu dCBza2xfYnVpbGRfcGxhbmVfd21fc2luZ2xlKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3Rh dGUsCj4gPiArCQkJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwc3RhdGUs Cj4gPiArCQkJCSAgICAgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCwgaW50IGNvbG9yX3BsYW5lKQo+ ID4gIHsKPiA+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShw c3RhdGUtPmJhc2UucGxhbmUtPmRldik7Cj4gPiAtCXN0cnVjdCBza2xfcGxhbmVfd20gKndtID0g JnBpcGVfd20tPnBsYW5lc1twbGFuZV9pZF07Cj4gPiAtCWVudW0gcGlwZSBwaXBlID0gdG9faW50 ZWxfcGxhbmUocHN0YXRlLT5iYXNlLnBsYW5lKS0+cGlwZTsKPiA+ICsJc3RydWN0IHNrbF9wbGFu ZV93bSAqd20gPSAmY3N0YXRlLT53bS5za2wub3B0aW1hbC5wbGFuZXNbcGxhbmVfaWRdOwo+ID4g Kwl1MTYgZGRiX2Jsb2NrcyA9IHNrbF9kZGJfZW50cnlfc2l6ZSgmY3N0YXRlLT53bS5za2wucGxh bmVfZGRiX3lbcGxhbmVfaWRdKTsKPiA+ICAJc3RydWN0IHNrbF93bV9wYXJhbXMgd21fcGFyYW1z Owo+ID4gLQl1aW50MTZfdCBkZGJfYmxvY2tzID0gc2tsX2RkYl9lbnRyeV9zaXplKCZkZGItPnBs YW5lW3BpcGVdW3BsYW5lX2lkXSk7Cj4gPiAgCWludCByZXQ7Cj4gPiAgCj4gPiAgCXJldCA9IHNr bF9jb21wdXRlX3BsYW5lX3dtX3BhcmFtcyhkZXZfcHJpdiwgY3N0YXRlLCBwc3RhdGUsCj4gPiBA QCAtNDk3NCw3OSArNDk1MywxMDUgQEAgc3RhdGljIGludCBfX3NrbF9idWlsZF9wbGFuZV93bV9z aW5nbGUoc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqZGRiLAo+ID4gIAlpZiAocmV0KQo+ID4g IAkJcmV0dXJuIHJldDsKPiA+ICAKPiA+IC0JcmV0ID0gc2tsX2NvbXB1dGVfd21fbGV2ZWxzKGRl dl9wcml2LCBkZGIsIGNzdGF0ZSwgcHN0YXRlLAo+ID4gLQkJCQkgICAgZGRiX2Jsb2NrcywgJndt X3BhcmFtcywgd20sIHdtLT53bSk7Cj4gPiAtCj4gPiArCXJldCA9IHNrbF9jb21wdXRlX3dtX2xl dmVscyhkZXZfcHJpdiwgY3N0YXRlLCBwc3RhdGUsCj4gPiArCQkJCSAgICBkZGJfYmxvY2tzLCAm d21fcGFyYW1zLCB3bS0+d20pOwo+ID4gIAlpZiAocmV0KQo+ID4gIAkJcmV0dXJuIHJldDsKPiA+ ICAKPiA+IC0Jc2tsX2NvbXB1dGVfdHJhbnNpdGlvbl93bShjc3RhdGUsICZ3bV9wYXJhbXMsICZ3 bS0+d21bMF0sCj4gPiAtCQkJCSAgZGRiX2Jsb2NrcywgJndtLT50cmFuc193bSk7Cj4gPiArCXNr bF9jb21wdXRlX3RyYW5zaXRpb25fd20oY3N0YXRlLCAmd21fcGFyYW1zLCB3bSwgZGRiX2Jsb2Nr cyk7Cj4gPiAgCj4gPiAgCXJldHVybiAwOwo+ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMgaW50IHNr bF9idWlsZF9wbGFuZV93bV9zaW5nbGUoc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqZGRiLAo+ ID4gLQkJCQkgICAgIHN0cnVjdCBza2xfcGlwZV93bSAqcGlwZV93bSwKPiA+IC0JCQkJICAgICBj b25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ID4gLQkJCQkgICAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcHN0YXRlKQo+ID4gK3N0YXRpYyBpbnQgc2tsX2J1 aWxkX3BsYW5lX3dtX3V2KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gPiArCQkJ CSBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBzdGF0ZSwKPiA+ICsJCQkJIGVudW0g cGxhbmVfaWQgcGxhbmVfaWQpCj4gPiAgewo+ID4gLQllbnVtIHBsYW5lX2lkIHBsYW5lX2lkID0g dG9faW50ZWxfcGxhbmUocHN0YXRlLT5iYXNlLnBsYW5lKS0+aWQ7Cj4gPiArCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocHN0YXRlLT5iYXNlLnBsYW5lLT5kZXYp Owo+ID4gKwlzdHJ1Y3Qgc2tsX3BsYW5lX3dtICp3bSA9ICZjc3RhdGUtPndtLnNrbC5vcHRpbWFs LnBsYW5lc1twbGFuZV9pZF07Cj4gPiArCXUxNiBkZGJfYmxvY2tzID0gc2tsX2RkYl9lbnRyeV9z aXplKCZjc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfdXZbcGxhbmVfaWRdKTsKPiA+ICsJc3RydWN0 IHNrbF93bV9wYXJhbXMgd21fcGFyYW1zOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwl3bS0+ aXNfcGxhbmFyID0gdHJ1ZTsKPiA+ICAKPiA+IC0JcmV0dXJuIF9fc2tsX2J1aWxkX3BsYW5lX3dt X3NpbmdsZShkZGIsIHBpcGVfd20sIHBsYW5lX2lkLCBjc3RhdGUsIHBzdGF0ZSwgMCk7Cj4gPiAr CS8qIHV2IHBsYW5lIHdhdGVybWFya3MgbXVzdCBhbHNvIGJlIHZhbGlkYXRlZCBmb3IgTlYxMi9Q bGFuYXIgKi8KPiA+ICsJcmV0ID0gc2tsX2NvbXB1dGVfcGxhbmVfd21fcGFyYW1zKGRldl9wcml2 LCBjc3RhdGUsIHBzdGF0ZSwKPiA+ICsJCQkJCSAgJndtX3BhcmFtcywgMSk7Cj4gPiArCWlmIChy ZXQpCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwlyZXQgPSBza2xfY29tcHV0ZV93bV9s ZXZlbHMoZGV2X3ByaXYsIGNzdGF0ZSwgcHN0YXRlLAo+ID4gKwkJCQkgICAgZGRiX2Jsb2Nrcywg JndtX3BhcmFtcywgd20tPnV2X3dtKTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCXJldHVybiByZXQ7 Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMgaW50IHNrbF9i dWlsZF9wbGFuZV93bV9wbGFuYXIoc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqZGRiLAo+ID4g LQkJCQkgICAgIHN0cnVjdCBza2xfcGlwZV93bSAqcGlwZV93bSwKPiA+IC0JCQkJICAgICBjb25z dCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ID4gLQkJCQkgICAgIGNvbnN0IHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcHN0YXRlKQo+ID4gK3N0YXRpYyBpbnQgc2tsX2J1aWxk X3BsYW5lX3dtKHN0cnVjdCBza2xfcGlwZV93bSAqcGlwZV93bSwKPiA+ICsJCQkgICAgICBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ID4gKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcHN0YXRlKQo+ID4gIHsKPiA+ICAJc3RydWN0IGludGVsX3BsYW5l ICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBzdGF0ZS0+YmFzZS5wbGFuZSk7Cj4gPiAtCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsK PiA+ICsJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwc3RhdGUtPmJhc2UuZmI7 Cj4gPiAgCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSBwbGFuZS0+aWQ7Cj4gPiAtCXN0cnVjdCBz a2xfcGxhbmVfd20gKndtID0gJnBpcGVfd20tPnBsYW5lc1twbGFuZV9pZF07Cj4gPiAtCXN0cnVj dCBza2xfd21fcGFyYW1zIHdtX3BhcmFtczsKPiA+IC0JZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+ cGlwZTsKPiA+IC0JdWludDE2X3QgZGRiX2Jsb2NrcyA9IHNrbF9kZGJfZW50cnlfc2l6ZSgmZGRi LT5wbGFuZVtwaXBlXVtwbGFuZV9pZF0pOwo+ID4gIAlpbnQgcmV0Owo+ID4gIAo+ID4gLQlyZXQg PSBfX3NrbF9idWlsZF9wbGFuZV93bV9zaW5nbGUoZGRiLCBwaXBlX3dtLCBwbGFuZV9pZCwgY3N0 YXRlLCBwc3RhdGUsIDApOwo+ID4gLQlpZiAocmV0KQo+ID4gLQkJcmV0dXJuIHJldDsKPiA+IC0K PiA+IC0JLyogdXYgcGxhbmUgd2F0ZXJtYXJrcyBtdXN0IGFsc28gYmUgdmFsaWRhdGVkIGZvciBO VjEyL1BsYW5hciAqLwo+ID4gLQlkZGJfYmxvY2tzID0gc2tsX2RkYl9lbnRyeV9zaXplKCZkZGIt PnV2X3BsYW5lW3BpcGVdW3BsYW5lX2lkXSk7Cj4gPiArCWlmICghaW50ZWxfd21fcGxhbmVfdmlz aWJsZShjc3RhdGUsIHBzdGF0ZSkpCj4gPiArCQlyZXR1cm4gMDsKPiA+ICAKPiA+IC0JcmV0ID0g c2tsX2NvbXB1dGVfcGxhbmVfd21fcGFyYW1zKGRldl9wcml2LCBjc3RhdGUsIHBzdGF0ZSwgJndt X3BhcmFtcywgMSk7Cj4gPiArCXJldCA9IHNrbF9idWlsZF9wbGFuZV93bV9zaW5nbGUoY3N0YXRl LCBwc3RhdGUsIHBsYW5lX2lkLCAwKTsKPiA+ICAJaWYgKHJldCkKPiA+ICAJCXJldHVybiByZXQ7 Cj4gPiAgCj4gPiAtCXJldHVybiBza2xfY29tcHV0ZV93bV9sZXZlbHMoZGV2X3ByaXYsIGRkYiwg Y3N0YXRlLCBwc3RhdGUsCj4gPiAtCQkJCSAgICAgZGRiX2Jsb2NrcywgJndtX3BhcmFtcywgd20s IHdtLT51dl93bSk7Cj4gPiArCWlmIChmYi0+Zm9ybWF0LT5pc195dXYgJiYgZmItPmZvcm1hdC0+ bnVtX3BsYW5lcyA+IDEpIHsKPiA+ICsJCXJldCA9IHNrbF9idWlsZF9wbGFuZV93bV91dihjc3Rh dGUsIHBzdGF0ZSwgcGxhbmVfaWQpOwo+ID4gKwkJaWYgKHJldCkKPiA+ICsJCQlyZXR1cm4gcmV0 Owo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMg aW50IGljbF9idWlsZF9wbGFuZV93bV9wbGFuYXIoc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAq ZGRiLAo+ID4gLQkJCQkgICAgIHN0cnVjdCBza2xfcGlwZV93bSAqcGlwZV93bSwKPiA+IC0JCQkJ ICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ID4gLQkJCQkgICAg IGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcHN0YXRlKQo+ID4gK3N0YXRpYyBpbnQg aWNsX2J1aWxkX3BsYW5lX3dtKHN0cnVjdCBza2xfcGlwZV93bSAqcGlwZV93bSwKPiA+ICsJCQkg ICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ID4gKwkJCSAgICAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcHN0YXRlKQo+ID4gIHsKPiA+ICsJZW51bSBwbGFu ZV9pZCBwbGFuZV9pZCA9IHRvX2ludGVsX3BsYW5lKHBzdGF0ZS0+YmFzZS5wbGFuZSktPmlkOwo+ ID4gIAlpbnQgcmV0Owo+ID4gLQllbnVtIHBsYW5lX2lkIHlfcGxhbmVfaWQgPSBwc3RhdGUtPmxp bmtlZF9wbGFuZS0+aWQ7Cj4gPiAtCWVudW0gcGxhbmVfaWQgdXZfcGxhbmVfaWQgPSB0b19pbnRl bF9wbGFuZShwc3RhdGUtPmJhc2UucGxhbmUpLT5pZDsKPiA+ICAKPiA+IC0JcmV0ID0gX19za2xf YnVpbGRfcGxhbmVfd21fc2luZ2xlKGRkYiwgcGlwZV93bSwgeV9wbGFuZV9pZCwKPiA+IC0JCQkJ CSAgY3N0YXRlLCBwc3RhdGUsIDApOwo+ID4gLQlpZiAocmV0KQo+ID4gLQkJcmV0dXJuIHJldDsK PiA+ICsJLyogV2F0ZXJtYXJrcyBjYWxjdWxhdGVkIGluIG1hc3RlciAqLwo+ID4gKwlpZiAocHN0 YXRlLT5zbGF2ZSkKPiA+ICsJCXJldHVybiAwOwo+ID4gKwo+ID4gKwlpZiAocHN0YXRlLT5saW5r ZWRfcGxhbmUpIHsKPiA+ICsJCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcHN0 YXRlLT5iYXNlLmZiOwo+ID4gKwkJZW51bSBwbGFuZV9pZCB5X3BsYW5lX2lkID0gcHN0YXRlLT5s aW5rZWRfcGxhbmUtPmlkOwo+ID4gKwo+ID4gKwkJV0FSTl9PTighZmItPmZvcm1hdC0+aXNfeXV2 IHx8Cj4gPiArCQkJZmItPmZvcm1hdC0+bnVtX3BsYW5lcyA9PSAxKTsKPiA+ICsKPiA+ICsJCXJl dCA9IHNrbF9idWlsZF9wbGFuZV93bV9zaW5nbGUoY3N0YXRlLCBwc3RhdGUsIHlfcGxhbmVfaWQs IDApOwo+ID4gKwkJaWYgKHJldCkKPiA+ICsJCQlyZXR1cm4gcmV0Owo+ID4gIAo+ID4gLQlyZXR1 cm4gX19za2xfYnVpbGRfcGxhbmVfd21fc2luZ2xlKGRkYiwgcGlwZV93bSwgdXZfcGxhbmVfaWQs Cj4gPiAtCQkJCQkgICBjc3RhdGUsIHBzdGF0ZSwgMSk7Cj4gPiArCQlyZXQgPSBza2xfYnVpbGRf cGxhbmVfd21fc2luZ2xlKGNzdGF0ZSwgcHN0YXRlLCBwbGFuZV9pZCwgMSk7Cj4gPiArCQlpZiAo cmV0KQo+ID4gKwkJCXJldHVybiByZXQ7Cj4gPiArCX0gZWxzZSBpZiAoaW50ZWxfd21fcGxhbmVf dmlzaWJsZShjc3RhdGUsIHBzdGF0ZSkpIHsKPiA+ICsJCXJldCA9IHNrbF9idWlsZF9wbGFuZV93 bV9zaW5nbGUoY3N0YXRlLCBwc3RhdGUsIHBsYW5lX2lkLCAwKTsKPiA+ICsJCWlmIChyZXQpCj4g PiArCQkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICB9Cj4g PiAgCj4gPiAgc3RhdGljIGludCBza2xfYnVpbGRfcGlwZV93bShzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3N0YXRlLAo+ID4gLQkJCSAgICAgc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqZGRi LAo+ID4gIAkJCSAgICAgc3RydWN0IHNrbF9waXBlX3dtICpwaXBlX3dtKQo+ID4gIHsKPiA+ICsJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjc3RhdGUtPmJhc2Uu Y3J0Yy0+ZGV2KTsKPiA+ICAJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlID0gJmNz dGF0ZS0+YmFzZTsKPiA+ICAJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Cj4gPiAgCWNvbnN0IHN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZTsKPiA+IEBAIC01MDYyLDE4ICs1MDY3LDEwIEBA IHN0YXRpYyBpbnQgc2tsX2J1aWxkX3BpcGVfd20oc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNz dGF0ZSwKPiA+ICAJCWNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqaW50ZWxfcHN0YXRl ID0KPiA+ICAJCQkJCQl0b19pbnRlbF9wbGFuZV9zdGF0ZShwc3RhdGUpOwo+ID4gIAo+ID4gLQkJ LyogV2F0ZXJtYXJrcyBjYWxjdWxhdGVkIGluIG1hc3RlciAqLwo+ID4gLQkJaWYgKGludGVsX3Bz dGF0ZS0+c2xhdmUpCj4gPiAtCQkJY29udGludWU7Cj4gPiAtCj4gPiAtCQlpZiAoaW50ZWxfcHN0 YXRlLT5saW5rZWRfcGxhbmUpCj4gPiAtCQkJcmV0ID0gaWNsX2J1aWxkX3BsYW5lX3dtX3BsYW5h cihkZGIsIHBpcGVfd20sIGNzdGF0ZSwgaW50ZWxfcHN0YXRlKTsKPiA+IC0JCWVsc2UgaWYgKGlu dGVsX3BzdGF0ZS0+YmFzZS5mYiAmJgo+ID4gLQkJCSBpbnRlbF9wc3RhdGUtPmJhc2UuZmItPmZv cm1hdC0+Zm9ybWF0ID09IERSTV9GT1JNQVRfTlYxMikKPiA+IC0JCQlyZXQgPSBza2xfYnVpbGRf cGxhbmVfd21fcGxhbmFyKGRkYiwgcGlwZV93bSwgY3N0YXRlLCBpbnRlbF9wc3RhdGUpOwo+ID4g KwkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEpCj4gPiArCQkJcmV0ID0gaWNsX2J1aWxk X3BsYW5lX3dtKHBpcGVfd20sIGNzdGF0ZSwgaW50ZWxfcHN0YXRlKTsKPiA+ICAJCWVsc2UKPiA+ IC0JCQlyZXQgPSBza2xfYnVpbGRfcGxhbmVfd21fc2luZ2xlKGRkYiwgcGlwZV93bSwgY3N0YXRl LCBpbnRlbF9wc3RhdGUpOwo+ID4gLQo+ID4gKwkJCXJldCA9IHNrbF9idWlsZF9wbGFuZV93bShw aXBlX3dtLCBjc3RhdGUsIGludGVsX3BzdGF0ZSk7Cj4gPiAgCQlpZiAocmV0KQo+ID4gIAkJCXJl dHVybiByZXQ7Cj4gPiAgCX0KPiA+IEBAIC01MDg4LDkgKzUwODUsOSBAQCBzdGF0aWMgdm9pZCBz a2xfZGRiX2VudHJ5X3dyaXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ ICAJCQkJY29uc3Qgc3RydWN0IHNrbF9kZGJfZW50cnkgKmVudHJ5KQo+ID4gIHsKPiA+ICAJaWYg KGVudHJ5LT5lbmQpCj4gPiAtCQlJOTE1X1dSSVRFKHJlZywgKGVudHJ5LT5lbmQgLSAxKSA8PCAx NiB8IGVudHJ5LT5zdGFydCk7Cj4gPiArCQlJOTE1X1dSSVRFX0ZXKHJlZywgKGVudHJ5LT5lbmQg LSAxKSA8PCAxNiB8IGVudHJ5LT5zdGFydCk7Cj4gPiAgCWVsc2UKPiA+IC0JCUk5MTVfV1JJVEUo cmVnLCAwKTsKPiA+ICsJCUk5MTVfV1JJVEVfRlcocmVnLCAwKTsKPiA+ICB9Cj4gPiAgCj4gPiAg c3RhdGljIHZvaWQgc2tsX3dyaXRlX3dtX2xldmVsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiA+IEBAIC01MTA1LDE5ICs1MTAyLDIyIEBAIHN0YXRpYyB2b2lkIHNrbF93cml0 ZV93bV9sZXZlbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiAgCQl2YWwg fD0gbGV2ZWwtPnBsYW5lX3Jlc19sIDw8IFBMQU5FX1dNX0xJTkVTX1NISUZUOwo+ID4gIAl9Cj4g PiAgCj4gPiAtCUk5MTVfV1JJVEUocmVnLCB2YWwpOwo+ID4gKwlJOTE1X1dSSVRFX0ZXKHJlZywg dmFsKTsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIHZvaWQgc2tsX3dyaXRlX3BsYW5lX3dtKHN0 cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLAo+ID4gLQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qg c2tsX3BsYW5lX3dtICp3bSwKPiA+IC0JCQkgICAgICAgY29uc3Qgc3RydWN0IHNrbF9kZGJfYWxs b2NhdGlvbiAqZGRiLAo+ID4gLQkJCSAgICAgICBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQo+ID4g K3ZvaWQgc2tsX3dyaXRlX3BsYW5lX3dtKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gPiAr CQkJY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gPiAgewo+ID4g LQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmaW50ZWxfY3J0Yy0+YmFzZTsKPiA+IC0Jc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiA+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Cj4gPiAgCWludCBsZXZlbCwg bWF4X2xldmVsID0gaWxrX3dtX21heF9sZXZlbChkZXZfcHJpdik7Cj4gPiAtCWVudW0gcGlwZSBw aXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKPiA+ICsJZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBs YW5lLT5pZDsKPiA+ICsJZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlwZTsKPiA+ICsJY29uc3Qg c3RydWN0IHNrbF9wbGFuZV93bSAqd20gPQo+ID4gKwkJJmNydGNfc3RhdGUtPndtLnNrbC5vcHRp bWFsLnBsYW5lc1twbGFuZV9pZF07Cj4gPiArCWNvbnN0IHN0cnVjdCBza2xfZGRiX2VudHJ5ICpk ZGJfeSA9Cj4gPiArCQkmY3J0Y19zdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95W3BsYW5lX2lkXTsK PiA+ICsJY29uc3Qgc3RydWN0IHNrbF9kZGJfZW50cnkgKmRkYl91diA9Cj4gPiArCQkmY3J0Y19z dGF0ZS0+d20uc2tsLnBsYW5lX2RkYl91dltwbGFuZV9pZF07Cj4gPiAgCj4gPiAgCWZvciAobGV2 ZWwgPSAwOyBsZXZlbCA8PSBtYXhfbGV2ZWw7IGxldmVsKyspIHsKPiA+ICAJCXNrbF93cml0ZV93 bV9sZXZlbChkZXZfcHJpdiwgUExBTkVfV00ocGlwZSwgcGxhbmVfaWQsIGxldmVsKSwKPiA+IEBA IC01MTI2LDI5ICs1MTI2LDMyIEBAIHN0YXRpYyB2b2lkIHNrbF93cml0ZV9wbGFuZV93bShzdHJ1 Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywKPiA+ICAJc2tsX3dyaXRlX3dtX2xldmVsKGRldl9w cml2LCBQTEFORV9XTV9UUkFOUyhwaXBlLCBwbGFuZV9pZCksCj4gPiAgCQkJICAgJndtLT50cmFu c193bSk7Cj4gPiAgCj4gPiAtCWlmICh3bS0+aXNfcGxhbmFyICYmIElOVEVMX0dFTihkZXZfcHJp dikgPCAxMSkgewo+ID4gLQkJc2tsX2RkYl9lbnRyeV93cml0ZShkZXZfcHJpdiwgUExBTkVfQlVG X0NGRyhwaXBlLCBwbGFuZV9pZCksCj4gPiAtCQkJCSAgICAmZGRiLT51dl9wbGFuZVtwaXBlXVtw bGFuZV9pZF0pOwo+ID4gKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkgewo+ID4gIAkJ c2tsX2RkYl9lbnRyeV93cml0ZShkZXZfcHJpdiwKPiA+IC0JCQkJICAgIFBMQU5FX05WMTJfQlVG X0NGRyhwaXBlLCBwbGFuZV9pZCksCj4gPiAtCQkJCSAgICAmZGRiLT5wbGFuZVtwaXBlXVtwbGFu ZV9pZF0pOwo+ID4gLQl9IGVsc2Ugewo+ID4gLQkJc2tsX2RkYl9lbnRyeV93cml0ZShkZXZfcHJp diwgUExBTkVfQlVGX0NGRyhwaXBlLCBwbGFuZV9pZCksCj4gPiAtCQkJCSAgICAmZGRiLT5wbGFu ZVtwaXBlXVtwbGFuZV9pZF0pOwo+ID4gLQkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCAxMSkK PiA+IC0JCQlJOTE1X1dSSVRFKFBMQU5FX05WMTJfQlVGX0NGRyhwaXBlLCBwbGFuZV9pZCksIDB4 MCk7Cj4gPiArCQkJCSAgICBQTEFORV9CVUZfQ0ZHKHBpcGUsIHBsYW5lX2lkKSwgZGRiX3kpOwo+ ID4gKwkJcmV0dXJuOwo+ID4gIAl9Cj4gPiArCj4gPiArCWlmICh3bS0+aXNfcGxhbmFyKQo+ID4g KwkJc3dhcChkZGJfeSwgZGRiX3V2KTsKPiA+ICsKPiA+ICsJc2tsX2RkYl9lbnRyeV93cml0ZShk ZXZfcHJpdiwKPiA+ICsJCQkgICAgUExBTkVfQlVGX0NGRyhwaXBlLCBwbGFuZV9pZCksIGRkYl95 KTsKPiA+ICsJc2tsX2RkYl9lbnRyeV93cml0ZShkZXZfcHJpdiwKPiA+ICsJCQkgICAgUExBTkVf TlYxMl9CVUZfQ0ZHKHBpcGUsIHBsYW5lX2lkKSwgZGRiX3V2KTsKPiA+ICB9Cj4gPiAgCj4gPiAt c3RhdGljIHZvaWQgc2tsX3dyaXRlX2N1cnNvcl93bShzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxf Y3J0YywKPiA+IC0JCQkJY29uc3Qgc3RydWN0IHNrbF9wbGFuZV93bSAqd20sCj4gPiAtCQkJCWNv bnN0IHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRkYikKPiA+ICt2b2lkIHNrbF93cml0ZV9j dXJzb3Jfd20oc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKPiA+ICsJCQkgY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gPiAgewo+ID4gLQlzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMgPSAmaW50ZWxfY3J0Yy0+YmFzZTsKPiA+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGNydGMtPmRldjsKPiA+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShkZXYpOwo+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0 b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Cj4gPiAgCWludCBsZXZlbCwgbWF4X2xldmVsID0gaWxr X3dtX21heF9sZXZlbChkZXZfcHJpdik7Cj4gPiAtCWVudW0gcGlwZSBwaXBlID0gaW50ZWxfY3J0 Yy0+cGlwZTsKPiA+ICsJZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsKPiA+ICsJ ZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlwZTsKPiA+ICsJY29uc3Qgc3RydWN0IHNrbF9wbGFu ZV93bSAqd20gPQo+ID4gKwkJJmNydGNfc3RhdGUtPndtLnNrbC5vcHRpbWFsLnBsYW5lc1twbGFu ZV9pZF07Cj4gPiArCWNvbnN0IHN0cnVjdCBza2xfZGRiX2VudHJ5ICpkZGIgPQo+ID4gKwkJJmNy dGNfc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtwbGFuZV9pZF07Cj4gPiAgCj4gPiAgCWZvciAo bGV2ZWwgPSAwOyBsZXZlbCA8PSBtYXhfbGV2ZWw7IGxldmVsKyspIHsKPiA+ICAJCXNrbF93cml0 ZV93bV9sZXZlbChkZXZfcHJpdiwgQ1VSX1dNKHBpcGUsIGxldmVsKSwKPiA+IEBAIC01MTU2LDgg KzUxNTksNyBAQCBzdGF0aWMgdm9pZCBza2xfd3JpdGVfY3Vyc29yX3dtKHN0cnVjdCBpbnRlbF9j cnRjICppbnRlbF9jcnRjLAo+ID4gIAl9Cj4gPiAgCXNrbF93cml0ZV93bV9sZXZlbChkZXZfcHJp diwgQ1VSX1dNX1RSQU5TKHBpcGUpLCAmd20tPnRyYW5zX3dtKTsKPiA+ICAKPiA+IC0Jc2tsX2Rk Yl9lbnRyeV93cml0ZShkZXZfcHJpdiwgQ1VSX0JVRl9DRkcocGlwZSksCj4gPiAtCQkJICAgICZk ZGItPnBsYW5lW3BpcGVdW1BMQU5FX0NVUlNPUl0pOwo+ID4gKwlza2xfZGRiX2VudHJ5X3dyaXRl KGRldl9wcml2LCBDVVJfQlVGX0NGRyhwaXBlKSwgZGRiKTsKPiA+ICB9Cj4gPiAgCj4gPiAgYm9v bCBza2xfd21fbGV2ZWxfZXF1YWxzKGNvbnN0IHN0cnVjdCBza2xfd21fbGV2ZWwgKmwxLAo+ID4g QEAgLTUxOTgsMTMgKzUyMDAsMTIgQEAgYm9vbCBza2xfZGRiX2FsbG9jYXRpb25fb3ZlcmxhcHMo Y29uc3Qgc3RydWN0IHNrbF9kZGJfZW50cnkgKmRkYiwKPiA+ICBzdGF0aWMgaW50IHNrbF91cGRh dGVfcGlwZV93bShzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNzdGF0ZSwKPiA+ICAJCQkgICAgICBj b25zdCBzdHJ1Y3Qgc2tsX3BpcGVfd20gKm9sZF9waXBlX3dtLAo+ID4gIAkJCSAgICAgIHN0cnVj dCBza2xfcGlwZV93bSAqcGlwZV93bSwgLyogb3V0ICovCj4gPiAtCQkJICAgICAgc3RydWN0IHNr bF9kZGJfYWxsb2NhdGlvbiAqZGRiLCAvKiBvdXQgKi8KPiA+ICAJCQkgICAgICBib29sICpjaGFu Z2VkIC8qIG91dCAqLykKPiA+ICB7Cj4gPiAgCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICppbnRl bF9jc3RhdGUgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNzdGF0ZSk7Cj4gPiAgCWludCByZXQ7Cj4g PiAgCj4gPiAtCXJldCA9IHNrbF9idWlsZF9waXBlX3dtKGludGVsX2NzdGF0ZSwgZGRiLCBwaXBl X3dtKTsKPiA+ICsJcmV0ID0gc2tsX2J1aWxkX3BpcGVfd20oaW50ZWxfY3N0YXRlLCBwaXBlX3dt KTsKPiA+ICAJaWYgKHJldCkKPiA+ICAJCXJldHVybiByZXQ7Cj4gPiAgCj4gPiBAQCAtNTIzMCw0 MiArNTIzMSwyOSBAQCBwaXBlc19tb2RpZmllZChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUpCj4gPiAgfQo+ID4gIAo+ID4gIHN0YXRpYyBpbnQKPiA+IC1za2xfZGRiX2FkZF9hZmZlY3Rl ZF9wbGFuZXMoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSkKPiA+ICtza2xfZGRiX2Fk ZF9hZmZlY3RlZF9wbGFuZXMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRj X3N0YXRlLAo+ID4gKwkJCSAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqbmV3X2NydGNfc3Rh dGUpCj4gPiAgewo+ID4gLQlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUgPSBjc3RhdGUt PmJhc2Uuc3RhdGU7Cj4gPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBzdGF0ZS0+ZGV2Owo+ ID4gLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBjc3RhdGUtPmJhc2UuY3J0YzsKPiA+IC0Jc3Ry dWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ID4gLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gPiAtCXN0 cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKmludGVsX3N0YXRlID0gdG9faW50ZWxfYXRvbWljX3N0 YXRlKHN0YXRlKTsKPiA+IC0Jc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqbmV3X2RkYiA9ICZp bnRlbF9zdGF0ZS0+d21fcmVzdWx0cy5kZGI7Cj4gPiAtCXN0cnVjdCBza2xfZGRiX2FsbG9jYXRp b24gKmN1cl9kZGIgPSAmZGV2X3ByaXYtPndtLnNrbF9ody5kZGI7Cj4gPiAtCXN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lOwo+ID4gLQllbnVtIHBpcGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Cj4g PiArCXN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlID0gdG9faW50ZWxfYXRvbWljX3N0 YXRlKG5ld19jcnRjX3N0YXRlLT5iYXNlLnN0YXRlKTsKPiA+ICsJc3RydWN0IGludGVsX2NydGMg KmNydGMgPSB0b19pbnRlbF9jcnRjKG5ld19jcnRjX3N0YXRlLT5iYXNlLmNydGMpOwo+ID4gKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2 KTsKPiA+ICsJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZTsKPiA+ICAKPiA+IC0JZHJtX2Zvcl9l YWNoX3BsYW5lX21hc2socGxhbmUsIGRldiwgY3N0YXRlLT5iYXNlLnBsYW5lX21hc2spIHsKPiA+ IC0JCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOwo+ID4gLQkJc3RydWN0IGlu dGVsX3BsYW5lICpsaW5rZWQ7Cj4gPiAtCQllbnVtIHBsYW5lX2lkIHBsYW5lX2lkID0gdG9faW50 ZWxfcGxhbmUocGxhbmUpLT5pZDsKPiA+ICsJZm9yX2VhY2hfaW50ZWxfcGxhbmVfb25fY3J0Yygm ZGV2X3ByaXYtPmRybSwgY3J0YywgcGxhbmUpIHsKPiA+ICsJCXN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZSAqcGxhbmVfc3RhdGU7Cj4gPiArCQllbnVtIHBsYW5lX2lkIHBsYW5lX2lkID0gcGxhbmUt PmlkOwo+ID4gIAo+ID4gLQkJaWYgKHNrbF9kZGJfZW50cnlfZXF1YWwoJmN1cl9kZGItPnBsYW5l W3BpcGVdW3BsYW5lX2lkXSwKPiA+IC0JCQkJCSZuZXdfZGRiLT5wbGFuZVtwaXBlXVtwbGFuZV9p ZF0pICYmCj4gPiAtCQkgICAgc2tsX2RkYl9lbnRyeV9lcXVhbCgmY3VyX2RkYi0+dXZfcGxhbmVb cGlwZV1bcGxhbmVfaWRdLAo+ID4gLQkJCQkJJm5ld19kZGItPnV2X3BsYW5lW3BpcGVdW3BsYW5l X2lkXSkpCj4gPiArCQlpZiAoc2tsX2RkYl9lbnRyeV9lcXVhbCgmb2xkX2NydGNfc3RhdGUtPndt LnNrbC5wbGFuZV9kZGJfeVtwbGFuZV9pZF0sCj4gPiArCQkJCQkmbmV3X2NydGNfc3RhdGUtPndt LnNrbC5wbGFuZV9kZGJfeVtwbGFuZV9pZF0pICYmCj4gPiArCQkgICAgc2tsX2RkYl9lbnRyeV9l cXVhbCgmb2xkX2NydGNfc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfdXZbcGxhbmVfaWRdLAo+ID4g KwkJCQkJJm5ld19jcnRjX3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3V2W3BsYW5lX2lkXSkpCj4g PiAgCQkJY29udGludWU7Cj4gPiAgCj4gPiAtCQlwbGFuZV9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0 X3BsYW5lX3N0YXRlKHN0YXRlLCBwbGFuZSk7Cj4gPiArCQlwbGFuZV9zdGF0ZSA9IGludGVsX2F0 b21pY19nZXRfcGxhbmVfc3RhdGUoc3RhdGUsIHBsYW5lKTsKPiA+ICAJCWlmIChJU19FUlIocGxh bmVfc3RhdGUpKQo+ID4gIAkJCXJldHVybiBQVFJfRVJSKHBsYW5lX3N0YXRlKTsKPiA+ICAKPiA+ IC0JCS8qIE1ha2Ugc3VyZSBsaW5rZWQgcGxhbmUgaXMgdXBkYXRlZCB0b28gKi8KPiA+IC0JCWxp bmtlZCA9IHRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lX3N0YXRlKS0+bGlua2VkX3BsYW5lOwo+ ID4gLQkJaWYgKCFsaW5rZWQpCj4gPiAtCQkJY29udGludWU7Cj4gPiAtCj4gPiAtCQlwbGFuZV9z dGF0ZSA9IGRybV9hdG9taWNfZ2V0X3BsYW5lX3N0YXRlKHN0YXRlLCAmbGlua2VkLT5iYXNlKTsK PiA+IC0JCWlmIChJU19FUlIocGxhbmVfc3RhdGUpKQo+ID4gLQkJCXJldHVybiBQVFJfRVJSKHBs YW5lX3N0YXRlKTsKPiA+ICsJCW5ld19jcnRjX3N0YXRlLT51cGRhdGVfcGxhbmVzIHw9IEJJVChw bGFuZV9pZCk7Cj4gPiAgCX0KPiA+ICAKPiA+ICAJcmV0dXJuIDA7Cj4gPiBAQCAtNTI3NywxOCAr NTI2NSwyMSBAQCBza2xfY29tcHV0ZV9kZGIoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl KQo+ID4gIAljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KHN0YXRlLT5kZXYpOwo+ID4gIAlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICppbnRlbF9zdGF0 ZSA9IHRvX2ludGVsX2F0b21pY19zdGF0ZShzdGF0ZSk7Cj4gPiAgCXN0cnVjdCBza2xfZGRiX2Fs bG9jYXRpb24gKmRkYiA9ICZpbnRlbF9zdGF0ZS0+d21fcmVzdWx0cy5kZGI7Cj4gPiArCXN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZTsKPiA+ICsJc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlOwo+ID4gIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsK PiA+IC0Jc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZTsKPiA+ICAJaW50IHJldCwgaTsK PiA+ICAKPiA+ICAJbWVtY3B5KGRkYiwgJmRldl9wcml2LT53bS5za2xfaHcuZGRiLCBzaXplb2Yo KmRkYikpOwo+ID4gIAo+ID4gLQlmb3JfZWFjaF9uZXdfaW50ZWxfY3J0Y19pbl9zdGF0ZShpbnRl bF9zdGF0ZSwgY3J0YywgY3N0YXRlLCBpKSB7Cj4gPiAtCQlyZXQgPSBza2xfYWxsb2NhdGVfcGlw ZV9kZGIoY3N0YXRlLCBkZGIpOwo+ID4gKwlmb3JfZWFjaF9vbGRuZXdfaW50ZWxfY3J0Y19pbl9z dGF0ZShpbnRlbF9zdGF0ZSwgY3J0Yywgb2xkX2NydGNfc3RhdGUsCj4gPiArCQkJCQkgICAgbmV3 X2NydGNfc3RhdGUsIGkpIHsKPiA+ICsJCXJldCA9IHNrbF9hbGxvY2F0ZV9waXBlX2RkYihuZXdf Y3J0Y19zdGF0ZSwgZGRiKTsKPiA+ICAJCWlmIChyZXQpCj4gPiAgCQkJcmV0dXJuIHJldDsKPiA+ ICAKPiA+IC0JCXJldCA9IHNrbF9kZGJfYWRkX2FmZmVjdGVkX3BsYW5lcyhjc3RhdGUpOwo+ID4g KwkJcmV0ID0gc2tsX2RkYl9hZGRfYWZmZWN0ZWRfcGxhbmVzKG9sZF9jcnRjX3N0YXRlLAo+ID4g KwkJCQkJCSAgbmV3X2NydGNfc3RhdGUpOwo+ID4gIAkJaWYgKHJldCkKPiA+ICAJCQlyZXR1cm4g cmV0Owo+ID4gIAl9Cj4gPiBAQCAtNTI5NywzNiArNTI4OCwyOSBAQCBza2xfY29tcHV0ZV9kZGIo c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ID4gIH0KPiA+ICAKPiA+ICBzdGF0aWMg dm9pZAo+ID4gLXNrbF9wcmludF93bV9jaGFuZ2VzKGNvbnN0IHN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICpzdGF0ZSkKPiA+ICtza2xfcHJpbnRfd21fY2hhbmdlcyhzdHJ1Y3QgaW50ZWxfYXRvbWlj X3N0YXRlICpzdGF0ZSkKPiA+ICB7Cj4gPiAtCWNvbnN0IHN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBzdGF0ZS0+ZGV2Owo+ID4gLQljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGRldik7Cj4gPiAtCWNvbnN0IHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUg KmludGVsX3N0YXRlID0KPiA+IC0JCXRvX2ludGVsX2F0b21pY19zdGF0ZShzdGF0ZSk7Cj4gPiAt CWNvbnN0IHN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiA+IC0JY29uc3Qgc3RydWN0IGRybV9jcnRj X3N0YXRlICpjc3RhdGU7Cj4gPiAtCWNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxh bmU7Cj4gPiAtCWNvbnN0IHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKm9sZF9kZGIgPSAmZGV2 X3ByaXYtPndtLnNrbF9ody5kZGI7Cj4gPiAtCWNvbnN0IHN0cnVjdCBza2xfZGRiX2FsbG9jYXRp b24gKm5ld19kZGIgPSAmaW50ZWxfc3RhdGUtPndtX3Jlc3VsdHMuZGRiOwo+ID4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHN0YXRlLT5iYXNlLmRldik7Cj4g PiArCWNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZTsKPiA+ICsJ Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlOwo+ID4gKwlzdHJ1 Y3QgaW50ZWxfcGxhbmUgKnBsYW5lOwo+ID4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKPiA+ ICAJaW50IGk7Cj4gPiAgCj4gPiAtCWZvcl9lYWNoX25ld19jcnRjX2luX3N0YXRlKHN0YXRlLCBj cnRjLCBjc3RhdGUsIGkpIHsKPiA+IC0JCWNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9j cnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiA+IC0JCWVudW0gcGlwZSBwaXBlID0gaW50ZWxf Y3J0Yy0+cGlwZTsKPiA+IC0KPiA+IC0JCWZvcl9lYWNoX2ludGVsX3BsYW5lX29uX2NydGMoZGV2 LCBpbnRlbF9jcnRjLCBpbnRlbF9wbGFuZSkgewo+ID4gLQkJCWVudW0gcGxhbmVfaWQgcGxhbmVf aWQgPSBpbnRlbF9wbGFuZS0+aWQ7Cj4gPiArCWZvcl9lYWNoX29sZG5ld19pbnRlbF9jcnRjX2lu X3N0YXRlKHN0YXRlLCBjcnRjLCBvbGRfY3J0Y19zdGF0ZSwKPiA+ICsJCQkJCSAgICBuZXdfY3J0 Y19zdGF0ZSwgaSkgewo+ID4gKwkJZm9yX2VhY2hfaW50ZWxfcGxhbmVfb25fY3J0YygmZGV2X3By aXYtPmRybSwgY3J0YywgcGxhbmUpIHsKPiA+ICsJCQllbnVtIHBsYW5lX2lkIHBsYW5lX2lkID0g cGxhbmUtPmlkOwo+ID4gIAkJCWNvbnN0IHN0cnVjdCBza2xfZGRiX2VudHJ5ICpvbGQsICpuZXc7 Cj4gPiAgCj4gPiAtCQkJb2xkID0gJm9sZF9kZGItPnBsYW5lW3BpcGVdW3BsYW5lX2lkXTsKPiA+ IC0JCQluZXcgPSAmbmV3X2RkYi0+cGxhbmVbcGlwZV1bcGxhbmVfaWRdOwo+ID4gKwkJCW9sZCA9 ICZvbGRfY3J0Y19zdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95W3BsYW5lX2lkXTsKPiA+ICsJCQlu ZXcgPSAmbmV3X2NydGNfc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtwbGFuZV9pZF07Cj4gPiAg Cj4gPiAgCQkJaWYgKHNrbF9kZGJfZW50cnlfZXF1YWwob2xkLCBuZXcpKQo+ID4gIAkJCQljb250 aW51ZTsKPiA+ICAKPiA+ICAJCQlEUk1fREVCVUdfS01TKCJbUExBTkU6JWQ6JXNdIGRkYiAoJWQg LSAlZCkgLT4gKCVkIC0gJWQpXG4iLAo+ID4gLQkJCQkgICAgICBpbnRlbF9wbGFuZS0+YmFzZS5i YXNlLmlkLAo+ID4gLQkJCQkgICAgICBpbnRlbF9wbGFuZS0+YmFzZS5uYW1lLAo+ID4gKwkJCQkg ICAgICBwbGFuZS0+YmFzZS5iYXNlLmlkLCBwbGFuZS0+YmFzZS5uYW1lLAo+ID4gIAkJCQkgICAg ICBvbGQtPnN0YXJ0LCBvbGQtPmVuZCwKPiA+ICAJCQkJICAgICAgbmV3LT5zdGFydCwgbmV3LT5l bmQpOwo+ID4gIAkJfQo+ID4gQEAgLTU0NjIsOCArNTQ0Niw3IEBAIHNrbF9jb21wdXRlX3dtKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiA+ICAJCQkmdG9faW50ZWxfY3J0Y19zdGF0 ZShjcnRjLT5zdGF0ZSktPndtLnNrbC5vcHRpbWFsOwo+ID4gIAo+ID4gIAkJcGlwZV93bSA9ICZp bnRlbF9jc3RhdGUtPndtLnNrbC5vcHRpbWFsOwo+ID4gLQkJcmV0ID0gc2tsX3VwZGF0ZV9waXBl X3dtKGNzdGF0ZSwgb2xkX3BpcGVfd20sIHBpcGVfd20sCj4gPiAtCQkJCQkgJnJlc3VsdHMtPmRk YiwgJmNoYW5nZWQpOwo+ID4gKwkJcmV0ID0gc2tsX3VwZGF0ZV9waXBlX3dtKGNzdGF0ZSwgb2xk X3BpcGVfd20sIHBpcGVfd20sICZjaGFuZ2VkKTsKPiA+ICAJCWlmIChyZXQpCj4gPiAgCQkJcmV0 dXJuIHJldDsKPiA+ICAKPiA+IEBAIC01NDc3LDcgKzU0NjAsNyBAQCBza2xfY29tcHV0ZV93bShz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gPiAgCQlpbnRlbF9jc3RhdGUtPnVwZGF0 ZV93bV9wcmUgPSB0cnVlOwo+ID4gIAl9Cj4gPiAgCj4gPiAtCXNrbF9wcmludF93bV9jaGFuZ2Vz KHN0YXRlKTsKPiA+ICsJc2tsX3ByaW50X3dtX2NoYW5nZXMoaW50ZWxfc3RhdGUpOwo+ID4gIAo+ ID4gIAlyZXR1cm4gMDsKPiA+ICB9Cj4gPiBAQCAtNTQ4OCwyMyArNTQ3MSwxMiBAQCBzdGF0aWMg dm9pZCBza2xfYXRvbWljX3VwZGF0ZV9jcnRjX3dtKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUg KnN0YXRlLAo+ID4gIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3N0 YXRlLT5iYXNlLmNydGMpOwo+ID4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KHN0YXRlLT5iYXNlLmRldik7Cj4gPiAgCXN0cnVjdCBza2xfcGlwZV93bSAqcGlw ZV93bSA9ICZjc3RhdGUtPndtLnNrbC5vcHRpbWFsOwo+ID4gLQljb25zdCBzdHJ1Y3Qgc2tsX2Rk Yl9hbGxvY2F0aW9uICpkZGIgPSAmc3RhdGUtPndtX3Jlc3VsdHMuZGRiOwo+ID4gIAllbnVtIHBp cGUgcGlwZSA9IGNydGMtPnBpcGU7Cj4gPiAtCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQ7Cj4gPiAg Cj4gPiAgCWlmICghKHN0YXRlLT53bV9yZXN1bHRzLmRpcnR5X3BpcGVzICYgZHJtX2NydGNfbWFz aygmY3J0Yy0+YmFzZSkpKQo+ID4gIAkJcmV0dXJuOwo+ID4gIAo+ID4gIAlJOTE1X1dSSVRFKFBJ UEVfV01fTElORVRJTUUocGlwZSksIHBpcGVfd20tPmxpbmV0aW1lKTsKPiA+IC0KPiA+IC0JZm9y X2VhY2hfcGxhbmVfaWRfb25fY3J0YyhjcnRjLCBwbGFuZV9pZCkgewo+ID4gLQkJaWYgKHBsYW5l X2lkICE9IFBMQU5FX0NVUlNPUikKPiA+IC0JCQlza2xfd3JpdGVfcGxhbmVfd20oY3J0YywgJnBp cGVfd20tPnBsYW5lc1twbGFuZV9pZF0sCj4gPiAtCQkJCQkgICBkZGIsIHBsYW5lX2lkKTsKPiA+ IC0JCWVsc2UKPiA+IC0JCQlza2xfd3JpdGVfY3Vyc29yX3dtKGNydGMsICZwaXBlX3dtLT5wbGFu ZXNbcGxhbmVfaWRdLAo+ID4gLQkJCQkJICAgIGRkYik7Cj4gPiAtCX0KPiA+ICB9Cj4gPiAgCj4g PiAgc3RhdGljIHZvaWQgc2tsX2luaXRpYWxfd20oc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAq c3RhdGUsCj4gPiBAQCAtNTUxNCw4ICs1NDg2LDYgQEAgc3RhdGljIHZvaWQgc2tsX2luaXRpYWxf d20oc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiAgCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBpbnRlbF9jcnRjLT5iYXNlLmRldjsKPiA+ICAJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+ID4gIAlzdHJ1Y3Qgc2tsX2RkYl92YWx1 ZXMgKnJlc3VsdHMgPSAmc3RhdGUtPndtX3Jlc3VsdHM7Cj4gPiAtCXN0cnVjdCBza2xfZGRiX3Zh bHVlcyAqaHdfdmFscyA9ICZkZXZfcHJpdi0+d20uc2tsX2h3Owo+ID4gLQllbnVtIHBpcGUgcGlw ZSA9IGludGVsX2NydGMtPnBpcGU7Cj4gPiAgCj4gPiAgCWlmICgocmVzdWx0cy0+ZGlydHlfcGlw ZXMgJiBkcm1fY3J0Y19tYXNrKCZpbnRlbF9jcnRjLT5iYXNlKSkgPT0gMCkKPiA+ICAJCXJldHVy bjsKPiA+IEBAIC01NTI1LDExICs1NDk1LDYgQEAgc3RhdGljIHZvaWQgc2tsX2luaXRpYWxfd20o c3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiAgCWlmIChjc3RhdGUtPmJhc2Uu YWN0aXZlX2NoYW5nZWQpCj4gPiAgCQlza2xfYXRvbWljX3VwZGF0ZV9jcnRjX3dtKHN0YXRlLCBj c3RhdGUpOwo+ID4gIAo+ID4gLQltZW1jcHkoaHdfdmFscy0+ZGRiLnV2X3BsYW5lW3BpcGVdLCBy ZXN1bHRzLT5kZGIudXZfcGxhbmVbcGlwZV0sCj4gPiAtCSAgICAgICBzaXplb2YoaHdfdmFscy0+ ZGRiLnV2X3BsYW5lW3BpcGVdKSk7Cj4gPiAtCW1lbWNweShod192YWxzLT5kZGIucGxhbmVbcGlw ZV0sIHJlc3VsdHMtPmRkYi5wbGFuZVtwaXBlXSwKPiA+IC0JICAgICAgIHNpemVvZihod192YWxz LT5kZGIucGxhbmVbcGlwZV0pKTsKPiA+IC0KPiA+ICAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ d20ud21fbXV0ZXgpOwo+ID4gIH0KPiA+ICAKPiA+IEBAIC01NjgwLDEzICs1NjQ1LDYgQEAgdm9p ZCBza2xfd21fZ2V0X2h3X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPiAgCWlmIChk ZXZfcHJpdi0+YWN0aXZlX2NydGNzKSB7Cj4gPiAgCQkvKiBGdWxseSByZWNvbXB1dGUgRERCIG9u IGZpcnN0IGF0b21pYyBjb21taXQgKi8KPiA+ICAJCWRldl9wcml2LT53bS5kaXN0cnVzdF9iaW9z X3dtID0gdHJ1ZTsKPiA+IC0JfSBlbHNlIHsKPiA+IC0JCS8qCj4gPiAtCQkgKiBFYXN5L2NvbW1v biBjYXNlOyBqdXN0IHNhbml0aXplIEREQiBub3cgaWYgZXZlcnl0aGluZyBvZmYKPiA+IC0JCSAq IEtlZXAgZGJ1ZiBzbGljZSBpbmZvIGludGFjdAo+ID4gLQkJICovCj4gPiAtCQltZW1zZXQoZGRi LT5wbGFuZSwgMCwgc2l6ZW9mKGRkYi0+cGxhbmUpKTsKPiA+IC0JCW1lbXNldChkZGItPnV2X3Bs YW5lLCAwLCBzaXplb2YoZGRiLT51dl9wbGFuZSkpOwo+ID4gIAl9Cj4gPiAgfQo+ID4gIAo+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMKPiA+IGluZGV4IDk5ZDQzOTZjYWMwMC4uMTI2 YTUxYTdiMzc2IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3By aXRlLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCj4gPiBA QCAtNTM1LDYgKzUzNSw4IEBAIHNrbF9wcm9ncmFtX3BsYW5lKHN0cnVjdCBpbnRlbF9wbGFuZSAq cGxhbmUsCj4gPiAgCWlmIChmYi0+Zm9ybWF0LT5pc195dXYgJiYgaWNsX2lzX2hkcl9wbGFuZShw bGFuZSkpCj4gPiAgCQlpY2xfcHJvZ3JhbV9pbnB1dF9jc2NfY29lZmYoY3J0Y19zdGF0ZSwgcGxh bmVfc3RhdGUpOwo+ID4gIAo+ID4gKwlza2xfd3JpdGVfcGxhbmVfd20ocGxhbmUsIGNydGNfc3Rh dGUpOwo+ID4gKwo+ID4gIAlJOTE1X1dSSVRFX0ZXKFBMQU5FX0tFWVZBTChwaXBlLCBwbGFuZV9p ZCksIGtleS0+bWluX3ZhbHVlKTsKPiA+ICAJSTkxNV9XUklURV9GVyhQTEFORV9LRVlNQVgocGlw ZSwgcGxhbmVfaWQpLCBrZXltYXgpOwo+ID4gIAlJOTE1X1dSSVRFX0ZXKFBMQU5FX0tFWU1TSyhw aXBlLCBwbGFuZV9pZCksIGtleW1zayk7Cj4gPiBAQCAtNTk3LDYgKzU5OSw4IEBAIHNrbF9kaXNh YmxlX3BsYW5lKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gPiAgCj4gPiAgCXNwaW5fbG9j a19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKPiA+ICAKPiA+ICsJ c2tsX3dyaXRlX3BsYW5lX3dtKHBsYW5lLCBjcnRjX3N0YXRlKTsKPiA+ICsKPiA+ICAJSTkxNV9X UklURV9GVyhQTEFORV9DVEwocGlwZSwgcGxhbmVfaWQpLCAwKTsKPiA+ICAJSTkxNV9XUklURV9G VyhQTEFORV9TVVJGKHBpcGUsIHBsYW5lX2lkKSwgMCk7Cj4gPiAgCj4gPiAtLSAKPiA+IDIuMTgu MQo+ID4gCj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xwo+ID4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+ID4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwo+ID4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZngKPiAKPiAtLSAKPiBNYXR0IFJvcGVyCj4gR3JhcGhpY3MgU29mdHdhcmUgRW5n aW5lZXIKPiBJb1RHIFBsYXRmb3JtIEVuYWJsaW5nICYgRGV2ZWxvcG1lbnQKPiBJbnRlbCBDb3Jw b3JhdGlvbgo+ICg5MTYpIDM1Ni0yNzk1CgotLSAKVmlsbGUgU3lyasOkbMOkCkludGVsCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWls aW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=