From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v3 2/3] drm: Add API for capturing frame CRCs Date: Wed, 3 Aug 2016 09:57:21 +0200 Message-ID: <20160803075721.GH6232@phenom.ffwll.local> References: <1469196645-3061-1-git-send-email-tomeu.vizoso@collabora.com> <1469196645-3061-3-git-send-email-tomeu.vizoso@collabora.com> <20160803070638.GE4329@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id EC2B66E287 for ; Wed, 3 Aug 2016 07:57:27 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id x83so34916891wma.3 for ; Wed, 03 Aug 2016 00:57:27 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20160803070638.GE4329@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: Tomeu Vizoso , linux-doc@vger.kernel.org, Jonathan Corbet , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Daniel Vetter , Emil Velikov List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBBdWcgMDMsIDIwMTYgYXQgMTA6MDY6MzhBTSArMDMwMCwgVmlsbGUgU3lyasOkbMOk IHdyb3RlOgo+IE9uIEZyaSwgSnVsIDIyLCAyMDE2IGF0IDA0OjEwOjQ0UE0gKzAyMDAsIFRvbWV1 IFZpem9zbyB3cm90ZToKPiA+IEFkZHMgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGRlYnVnZnMg Zm9yIGNvbnRyb2xsaW5nIGFuZCByZWFkaW5nIGZyYW1lCj4gPiBDUkNzLCBwZXIgQ1JUQzoKPiA+ IAo+ID4gZHJpLzAvY3J0Yy0wL2NyYwo+ID4gZHJpLzAvY3J0Yy0wL2NyYy9jb250cm9sCj4gPiBk cmkvMC9jcnRjLTAvY3JjL2RhdGEKPiA+IAo+ID4gRHJpdmVycyBjYW4gaW1wbGVtZW50IHRoZSBz ZXRfY3JjX3NvdXJjZSBjYWxsYmFjaygpIGluIGRybV9jcnRjX2Z1bmNzIHRvCj4gPiBzdGFydCBh bmQgc3RvcCBnZW5lcmF0aW5nIGZyYW1lIENSQ3MgYW5kIGNhbiBhZGQgZW50cmllcyB0byB0aGUg b3V0cHV0Cj4gPiBieSBjYWxsaW5nIGRybV9jcnRjX2FkZF9jcmNfZW50cnkuCj4gPiAKPiA+IHYy Ogo+ID4gICAgIC0gTG90cyBvZiBnb29kIGZpeGVzIHN1Z2dlc3RlZCBieSBUaGllcnJ5Lgo+ID4g ICAgIC0gQWRkZWQgZG9jdW1lbnRhdGlvbi4KPiA+ICAgICAtIENoYW5nZWQgdGhlIGRlYnVnZnMg bGF5b3V0Lgo+ID4gICAgIC0gTW92ZWQgdG8gYWxsb2NhdGUgdGhlIGVudHJpZXMgY2lyY3VsYXIg cXVldWUgb25jZSB3aGVuIGZyYW1lCj4gPiAgICAgICBnZW5lcmF0aW9uIGdldHMgZW5hYmxlZCBm b3IgdGhlIGZpcnN0IHRpbWUuCj4gPiB2MzoKPiA+ICAgICAtIFVzZSB0aGUgY29udHJvbCBmaWxl IGp1c3QgdG8gc2VsZWN0IHRoZSBzb3VyY2UsIGFuZCBzdGFydCBhbmQgc3RvcAo+ID4gICAgICAg Y2FwdHVyZSB3aGVuIHRoZSBkYXRhIGZpbGUgaXMgb3BlbmVkIGFuZCBjbG9zZWQsIHJlc3BlY3Rp dmVseS4KPiA+ICAgICAtIE1ha2UgdmFyaWFibGUgdGhlIG51bWJlciBvZiBDUkMgdmFsdWVzIHBl ciBlbnRyeSwgcGVyIHNvdXJjZS4KPiA+ICAgICAtIEFsbG9jYXRlIGVudHJpZXMgcXVldWUgZWFj aCB0aW1lIHdlIHN0YXJ0IGNhcHR1cmluZyBhcyBub3cgdGhlcmUKPiA+ICAgICAgIGlzbid0IGEg Zml4ZWQgbnVtYmVyIG9mIENSQyB2YWx1ZXMgcGVyIGVudHJ5Lgo+ID4gICAgIC0gU3RvcmUgdGhl IGZyYW1lIGNvdW50ZXIgaW4gdGhlIGRhdGEgZmlsZSBhcyBhIDgtZGlnaXQgaGV4IG51bWJlci4K PiA+ICAgICAtIEZvciBzb3VyY2VzIHRoYXQgY2Fubm90IHByb3ZpZGUgdXNlZnVsIGZyYW1lIG51 bWJlcnMsIHBsYWNlCj4gPiAgICAgICBYWFhYWFhYWCBpbiB0aGUgZnJhbWUgZmllbGQuCj4gPiAK PiA+IFNpZ25lZC1vZmYtYnk6IFRvbWV1IFZpem9zbyA8dG9tZXUudml6b3NvQGNvbGxhYm9yYS5j b20+Cj4gPiAtLS0KPiA+IAo+ID4gIERvY3VtZW50YXRpb24vZ3B1L2RybS11YXBpLnJzdCAgICB8 ICAgNiArCj4gPiAgZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAgICAgIHwgICAzICstCj4g PiAgZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMgICAgICAgIHwgIDEyICsrCj4gPiAgZHJpdmVy cy9ncHUvZHJtL2RybV9kZWJ1Z2ZzLmMgICAgIHwgIDM2ICsrKy0KPiA+ICBkcml2ZXJzL2dwdS9k cm0vZHJtX2RlYnVnZnNfY3JjLmMgfCAzNzAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKPiA+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jICAgICAgICAgfCAgIDkgKwo+ ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1faW50ZXJuYWwuaCAgICB8ICAxMCArKwo+ID4gIGluY2x1 ZGUvZHJtL2RybVAuaCAgICAgICAgICAgICAgICB8ICAgNSArCj4gPiAgaW5jbHVkZS9kcm0vZHJt X2NydGMuaCAgICAgICAgICAgIHwgIDQxICsrKysrCj4gPiAgaW5jbHVkZS9kcm0vZHJtX2RlYnVn ZnNfY3JjLmggICAgIHwgIDc0ICsrKysrKysrCj4gPiAgMTAgZmlsZXMgY2hhbmdlZCwgNTY0IGlu c2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9kcm1fZGVidWdmc19jcmMuYwo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNs dWRlL2RybS9kcm1fZGVidWdmc19jcmMuaAo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRh dGlvbi9ncHUvZHJtLXVhcGkucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXVhcGkucnN0Cj4g PiBpbmRleCA1MzZiZjNlYWFkZDQuLjMzZjc3ODY5NmNjZCAxMDA2NDQKPiA+IC0tLSBhL0RvY3Vt ZW50YXRpb24vZ3B1L2RybS11YXBpLnJzdAo+ID4gKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJt LXVhcGkucnN0Cj4gPiBAQCAtMTA5LDMgKzEwOSw5IEBAIGludGVyZmFjZXMuIEVzcGVjaWFsbHkg c2luY2UgYWxsIGhhcmR3YXJlLWFjY2VsZXJhdGlvbiBpbnRlcmZhY2VzIHRvCj4gPiAgdXNlcnNw YWNlIGFyZSBkcml2ZXIgc3BlY2lmaWMgZm9yIGVmZmljaWVuY3kgYW5kIG90aGVyIHJlYXNvbnMg dGhlc2UKPiA+ICBpbnRlcmZhY2VzIGNhbiBiZSByYXRoZXIgc3Vic3RhbnRpYWwuIEhlbmNlIGV2 ZXJ5IGRyaXZlciBoYXMgaXRzIG93bgo+ID4gIGNoYXB0ZXIuCj4gPiArCj4gPiArVGVzdGluZyBh bmQgdmFsaWRhdGlvbgo+ID4gKz09PT09PT09PT09PT09PT09PT09PT0KPiA+ICsKPiA+ICsuLiBr ZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9kZWJ1Z2ZzX2NyYy5jCj4gPiArICAgOmRv YzogQ1JDIEFCSQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2Ry aXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ID4gaW5kZXggZTNkYmE2ZjQ0YTc5Li5iNTNiNWFhYWVi NGQgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ID4gQEAgLTEyLDcgKzEyLDggQEAgZHJtLXkgICAgICAg Oj0JZHJtX2F1dGgubyBkcm1fYnVmcy5vIGRybV9jYWNoZS5vIFwKPiA+ICAJCWRybV9pbmZvLm8g ZHJtX2RlYnVnZnMubyBkcm1fZW5jb2Rlcl9zbGF2ZS5vIFwKPiA+ICAJCWRybV90cmFjZV9wb2lu dHMubyBkcm1fZ2xvYmFsLm8gZHJtX3ByaW1lLm8gXAo+ID4gIAkJZHJtX3JlY3QubyBkcm1fdm1h X21hbmFnZXIubyBkcm1fZmxpcF93b3JrLm8gXAo+ID4gLQkJZHJtX21vZGVzZXRfbG9jay5vIGRy bV9hdG9taWMubyBkcm1fYnJpZGdlLm8KPiA+ICsJCWRybV9tb2Rlc2V0X2xvY2subyBkcm1fYXRv bWljLm8gZHJtX2JyaWRnZS5vIFwKPiA+ICsJCWRybV9kZWJ1Z2ZzX2NyYy5vCj4gPiAgCj4gPiAg ZHJtLSQoQ09ORklHX0NPTVBBVCkgKz0gZHJtX2lvYzMyLm8KPiA+ICBkcm0tJChDT05GSUdfRFJN X0dFTV9DTUFfSEVMUEVSKSArPSBkcm1fZ2VtX2NtYV9oZWxwZXIubwo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMK PiA+IGluZGV4IDEwYjczZjY4YzAyMy4uMDg3MzQ1YWY5NmU3IDEwMDY0NAo+ID4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2RybV9jcnRjLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0 Yy5jCj4gPiBAQCAtNDAsNiArNDAsNyBAQAo+ID4gICNpbmNsdWRlIDxkcm0vZHJtX21vZGVzZXRf bG9jay5oPgo+ID4gICNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgo+ID4gICNpbmNsdWRlIDxk cm0vZHJtX2F1dGguaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9kZWJ1Z2ZzX2NyYy5oPgo+ID4g IAo+ID4gICNpbmNsdWRlICJkcm1fY3J0Y19pbnRlcm5hbC5oIgo+ID4gICNpbmNsdWRlICJkcm1f aW50ZXJuYWwuaCIKPiA+IEBAIC03MzgsNiArNzM5LDEyIEBAIGludCBkcm1fY3J0Y19pbml0X3dp dGhfcGxhbmVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK PiA+ICAJaWYgKGN1cnNvcikKPiA+ICAJCWN1cnNvci0+cG9zc2libGVfY3J0Y3MgPSAxIDw8IGRy bV9jcnRjX2luZGV4KGNydGMpOwo+ID4gIAo+ID4gKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKPiA+ ICsJc3Bpbl9sb2NrX2luaXQoJmNydGMtPmNyYy5sb2NrKTsKPiA+ICsJaW5pdF93YWl0cXVldWVf aGVhZCgmY3J0Yy0+Y3JjLndxKTsKPiA+ICsJY3J0Yy0+Y3JjLnNvdXJjZSA9IGtzdHJkdXAoImF1 dG8iLCBHRlBfS0VSTkVMKTsKPiA+ICsjZW5kaWYKPiA+ICsKPiA+ICAJaWYgKGRybV9jb3JlX2No ZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfQVRPTUlDKSkgewo+ID4gIAkJZHJtX29iamVjdF9hdHRh Y2hfcHJvcGVydHkoJmNydGMtPmJhc2UsIGNvbmZpZy0+cHJvcF9hY3RpdmUsIDApOwo+ID4gIAkJ ZHJtX29iamVjdF9hdHRhY2hfcHJvcGVydHkoJmNydGMtPmJhc2UsIGNvbmZpZy0+cHJvcF9tb2Rl X2lkLCAwKTsKPiA+IEBAIC03NjQsNiArNzcxLDExIEBAIHZvaWQgZHJtX2NydGNfY2xlYW51cChz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gPiAgCSAqIHRoZSBpbmRpY2VzIG9uIHRoZSBkcm1fY3J0 YyBhZnRlciB1cyBpbiB0aGUgY3J0Y19saXN0Lgo+ID4gIAkgKi8KPiA+ICAKPiA+ICsjaWZkZWYg Q09ORklHX0RFQlVHX0ZTCj4gPiArCWRybV9kZWJ1Z2ZzX2NydGNfcmVtb3ZlKGNydGMpOwo+ID4g KwlrZnJlZShjcnRjLT5jcmMuc291cmNlKTsKPiA+ICsjZW5kaWYKPiA+ICsKPiA+ICAJa2ZyZWUo Y3J0Yy0+Z2FtbWFfc3RvcmUpOwo+ID4gIAljcnRjLT5nYW1tYV9zdG9yZSA9IE5VTEw7Cj4gPiAg Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kZWJ1Z2ZzLmMgYi9kcml2ZXJz L2dwdS9kcm0vZHJtX2RlYnVnZnMuYwo+ID4gaW5kZXggZmExMGNlZjJiYTM3Li43MzUzMGNiZjEz MTYgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RlYnVnZnMuYwo+ID4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2RybV9kZWJ1Z2ZzLmMKPiA+IEBAIC00MTUsNSArNDE1LDM5IEBA IHZvaWQgZHJtX2RlYnVnZnNfY29ubmVjdG9yX3JlbW92ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yKQo+ID4gIAljb25uZWN0b3ItPmRlYnVnZnNfZW50cnkgPSBOVUxMOwo+ID4gIH0K PiA+ICAKPiA+IC0jZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovCj4gPiAraW50IGRybV9kZWJ1 Z2ZzX2NydGNfYWRkKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+ICt7Cj4gPiArCXN0cnVjdCBk cm1fbWlub3IgKm1pbm9yID0gY3J0Yy0+ZGV2LT5wcmltYXJ5Owo+ID4gKwlzdHJ1Y3QgZGVudHJ5 ICpyb290Owo+ID4gKwljaGFyICpuYW1lOwo+ID4gKwo+ID4gKwluYW1lID0ga2FzcHJpbnRmKEdG UF9LRVJORUwsICJjcnRjLSVkIiwgY3J0Yy0+aW5kZXgpOwo+ID4gKwlpZiAoIW5hbWUpCj4gPiAr CQlyZXR1cm4gLUVOT01FTTsKPiA+ICAKPiA+ICsJcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2Rpcihu YW1lLCBtaW5vci0+ZGVidWdmc19yb290KTsKPiA+ICsJa2ZyZWUobmFtZSk7Cj4gPiArCWlmICgh cm9vdCkKPiA+ICsJCXJldHVybiAtRU5PTUVNOwo+ID4gKwo+ID4gKwljcnRjLT5kZWJ1Z2ZzX2Vu dHJ5ID0gcm9vdDsKPiA+ICsKPiA+ICsJaWYgKGRybV9kZWJ1Z2ZzX2NydGNfY3JjX2FkZChjcnRj KSkKPiA+ICsJCWdvdG8gZXJyb3I7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gKwo+ID4gK2Vy cm9yOgo+ID4gKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoY3J0Yy0+ZGVidWdmc19lbnRyeSk7 Cj4gPiArCWNydGMtPmRlYnVnZnNfZW50cnkgPSBOVUxMOwo+ID4gKwlyZXR1cm4gLUVOT01FTTsK PiA+ICt9Cj4gPiArCj4gPiArdm9pZCBkcm1fZGVidWdmc19jcnRjX3JlbW92ZShzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCj4gPiArewo+ID4gKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoY3J0Yy0+ ZGVidWdmc19lbnRyeSk7Cj4gPiArCj4gPiArCWNydGMtPmRlYnVnZnNfZW50cnkgPSBOVUxMOwo+ ID4gK30KPiA+ICsKPiA+ICsjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovCj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kZWJ1Z2ZzX2NyYy5jIGIvZHJpdmVycy9ncHUvZHJt L2RybV9kZWJ1Z2ZzX2NyYy5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAw MDAwMDAwMDAwLi41ZWYwNzE0Mzc5NTIKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9kcm1fZGVidWdmc19jcmMuYwo+ID4gQEAgLTAsMCArMSwzNzAgQEAKPiA+ICsv Kgo+ID4gKyAqIENvcHlyaWdodCDCqSAyMDA4IEludGVsIENvcnBvcmF0aW9uCj4gPiArICogQ29w eXJpZ2h0IMKpIDIwMTYgQ29sbGFib3JhIEx0ZAo+ID4gKyAqCj4gPiArICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKPiA+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiA+ ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwgc3VibGljZW5zZSwKPiA+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiA+ICsgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgo+ID4gKyAqCj4gPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ID4gKyAqIHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUKPiA+ICsgKiBTb2Z0d2FyZS4KPiA+ICsgKgo+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S Cj4gPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gPiArICog VEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IgT1RIRVIKPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ID4gKyAqIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MKPiA+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gPiArICoKPiA+ICsgKiBBdXRo b3JzOgo+ID4gKyAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+Cj4gPiArICogICAg S2VpdGggUGFja2FyZCA8a2VpdGhwQGtlaXRocC5jb20+Cj4gPiArICoKPiA+ICsgKi8KPiA+ICsK PiA+ICsjaW5jbHVkZSA8bGludXgvY2lyY19idWYuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvY3R5 cGUuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgo+ID4gKyNpbmNsdWRlIDxkcm0v ZHJtUC5oPgo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIERPQzogQ1JDIEFCSQo+ID4gKyAqCj4gPiAr ICogRFJNIGRldmljZSBkcml2ZXJzIGNhbiBwcm92aWRlIHRvIHVzZXJzcGFjZSBDUkMgaW5mb3Jt YXRpb24gb2YgZWFjaCBmcmFtZSBhcwo+ID4gKyAqIGl0IHJlYWNoZWQgYSBnaXZlbiBoYXJkd2Fy ZSBjb21wb25lbnQgKGEgInNvdXJjZSIpLgo+ID4gKyAqCj4gPiArICogVXNlcnNwYWNlIGNhbiBj b250cm9sIGdlbmVyYXRpb24gb2YgQ1JDcyBpbiBhIGdpdmVuIENSVEMgYnkgd3JpdGluZyB0byB0 aGUKPiA+ICsgKiBmaWxlIGRyaS8wL2NydGMtTi9jcmMvY29udHJvbCBpbiBkZWJ1Z2ZzLCB3aXRo IE4gYmVpbmcgdGhlIGluZGV4IG9mIHRoZSBDUlRDLgo+ID4gKyAqIEFjY2VwdGVkIHZhbHVlcyBh cmUgc291cmNlIG5hbWVzICh3aGljaCBhcmUgZHJpdmVyLXNwZWNpZmljKSBhbmQgdGhlICJub25l Igo+ID4gKyAqIGFuZCAiYXV0byIga2V5d29yZHMuICJub25lIiB3aWxsIGRpc2FibGUgQ1JDIGdl bmVyYXRpb24gYW5kICJhdXRvIiB3aWxsIGxldAo+ID4gKyAqIHRoZSBkcml2ZXIgc2VsZWN0IGEg ZGVmYXVsdCBzb3VyY2Ugb2YgZnJhbWUgQ1JDcyBmb3IgdGhpcyBDUlRDLgo+ID4gKyAqCj4gPiAr ICogT25jZSBmcmFtZSBDUkMgZ2VuZXJhdGlvbiBpcyBlbmFibGVkLCB1c2Vyc3BhY2UgY2FuIGNh cHR1cmUgdGhlbSBieSByZWFkaW5nCj4gPiArICogdGhlIGRyaS8wL2NydGMtTi9jcmMvZGF0YSBm aWxlLiBFYWNoIGxpbmUgaW4gdGhhdCBmaWxlIGNvbnRhaW5zIHRoZSBmcmFtZQo+ID4gKyAqIG51 bWJlciBpbiB0aGUgZmlyc3QgZmllbGQgYW5kIHRoZW4gYSBudW1iZXIgb2YgdW5zaWduZWQgaW50 ZWdlciBmaWVsZHMKPiA+ICsgKiBjb250YWluaW5nIHRoZSBDUkMgZGF0YS4gRmllbGRzIGFyZSBz ZXBhcmF0ZWQgYnkgYSBzaW5nbGUgc3BhY2UgYW5kIHRoZSBudW1iZXIKPiA+ICsgKiBvZiBDUkMg ZmllbGRzIGlzIHNvdXJjZS1zcGVjaWZpYy4KPiA+ICsgKgo+ID4gKyAqIE5vdGUgdGhhdCB0aG91 Z2ggaW4gc29tZSBjYXNlcyB0aGUgQ1JDIGlzIGNvbXB1dGVkIGluIGEgc3BlY2lmaWVkIHdheSBh bmQgb24KPiA+ICsgKiB0aGUgZnJhbWUgY29udGVudHMgYXMgc3VwcGxpZWQgYnkgdXNlcnNwYWNl IChlRFAgMS4zKSwgaW4gZ2VuZXJhbCB0aGUgQ1JDCj4gPiArICogY29tcHV0YXRpb24gaXMgcGVy Zm9ybWVkIGluIGFuIHVuc3BlY2lmaWVkIHdheSBhbmQgb24gZnJhbWUgY29udGVudHMgdGhhdCBo YXZlCj4gPiArICogYmVlbiBhbHJlYWR5IHByb2Nlc3NlZCBpbiBhbHNvIGFuIHVuc3BlY2lmaWVk IHdheSBhbmQgdGh1cyB1c2Vyc3BhY2UgY2Fubm90Cj4gPiArICogcmVseSBvbiBiZWluZyBhYmxl IHRvIGdlbmVyYXRlIG1hdGNoaW5nIENSQyB2YWx1ZXMgZm9yIHRoZSBmcmFtZSBjb250ZW50cyB0 aGF0Cj4gPiArICogaXQgc3VibWl0cy4gSW4gdGhpcyBnZW5lcmFsIGNhc2UsIHRoZSBtYXhpbXVt IHVzZXJzcGFjZSBjYW4gZG8gaXMgdG8gY29tcGFyZQo+ID4gKyAqIHRoZSByZXBvcnRlZCBDUkNz IG9mIGZyYW1lcyB0aGF0IHNob3VsZCBoYXZlIHRoZSBzYW1lIGNvbnRlbnRzLgo+ID4gKyAqLwo+ ID4gKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKPiA+ICsKPiA+ICtzdGF0aWMgaW50IGNy Y19jb250cm9sX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ID4gK3sKPiA+ ICsJc3RydWN0IGRybV9jcnRjICpjcnRjID0gbS0+cHJpdmF0ZTsKPiA+ICsKPiA+ICsJc2VxX3By aW50ZihtLCAiJXNcbiIsIGNydGMtPmNyYy5zb3VyY2UpOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBjcmNfY29udHJvbF9vcGVuKHN0cnVjdCBpbm9k ZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9jcnRj ICpjcnRjID0gaW5vZGUtPmlfcHJpdmF0ZTsKPiA+ICsKPiA+ICsJcmV0dXJuIHNpbmdsZV9vcGVu KGZpbGUsIGNyY19jb250cm9sX3Nob3csIGNydGMpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg c3NpemVfdCBjcmNfY29udHJvbF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBf X3VzZXIgKnVidWYsCj4gPiArCQkJCSBzaXplX3QgbGVuLCBsb2ZmX3QgKm9mZnApCj4gPiArewo+ ID4gKwlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Cj4gPiArCXN0cnVj dCBkcm1fY3J0YyAqY3J0YyA9IG0tPnByaXZhdGU7Cj4gPiArCXN0cnVjdCBkcm1fY3J0Y19jcmMg KmNyYyA9ICZjcnRjLT5jcmM7Cj4gPiArCWNoYXIgKnNvdXJjZTsKPiA+ICsKPiA+ICsJaWYgKGxl biA9PSAwKQo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCj4gPiArCWlmIChsZW4gPiBQQUdFX1NJWkUg LSAxKSB7Cj4gPiArCQlEUk1fREVCVUdfS01TKCJFeHBlY3RlZCA8ICVsdSBieXRlcyBpbnRvIGNy dGMgY3JjIGNvbnRyb2xcbiIsCj4gPiArCQkJICAgICAgUEFHRV9TSVpFKTsKPiA+ICsJCXJldHVy biAtRTJCSUc7Cj4gPiArCX0KPiA+ICsKPiA+ICsJc291cmNlID0ga21hbGxvYyhsZW4gKyAxLCBH RlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFzb3VyY2UpCj4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ ICsKPiA+ICsJaWYgKGNvcHlfZnJvbV91c2VyKHNvdXJjZSwgdWJ1ZiwgbGVuKSkgewo+ID4gKwkJ a2ZyZWUoc291cmNlKTsKPiA+ICsJCXJldHVybiAtRUZBVUxUOwo+ID4gKwl9Cj4gCj4gbWVtZHVw X3VzZXJfbnVsKCkgPwo+IAo+ID4gKwo+ID4gKwlpZiAoc291cmNlW2xlbiAtIDFdID09ICdcbicp Cj4gPiArCQlzb3VyY2VbbGVuIC0gMV0gPSAnXDAnOwo+ID4gKwllbHNlCj4gPiArCQlzb3VyY2Vb bGVuXSA9ICdcMCc7Cj4gPiArCj4gPiArCXNwaW5fbG9ja19pcnEoJmNyYy0+bG9jayk7Cj4gPiAr Cj4gPiArCWlmIChjcmMtPm9wZW5lZCkgewo+ID4gKwkJa2ZyZWUoc291cmNlKTsKPiA+ICsJCXJl dHVybiAtRUJVU1k7Cj4gPiArCX0KPiAKPiBXaHkgbm90IGp1c3Qgc3RhcnQgdGhlIHRoaW5nIGhl cmU/Cj4gCj4gPiArCj4gPiArCWtmcmVlKGNyYy0+c291cmNlKTsKPiA+ICsJY3JjLT5zb3VyY2Ug PSBzb3VyY2U7Cj4gPiArCj4gPiArCXNwaW5fdW5sb2NrX2lycSgmY3JjLT5sb2NrKTsKPiA+ICsK PiA+ICsJKm9mZnAgKz0gbGVuOwo+ID4gKwlyZXR1cm4gbGVuOwo+ID4gK30KPiA+ICsKPiA+ICtj b25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRybV9jcnRjX2NyY19jb250cm9sX2ZvcHMgPSB7 Cj4gPiArCS5vd25lciA9IFRISVNfTU9EVUxFLAo+ID4gKwkub3BlbiA9IGNyY19jb250cm9sX29w ZW4sCj4gPiArCS5yZWFkID0gc2VxX3JlYWQsCj4gPiArCS5sbHNlZWsgPSBzZXFfbHNlZWssCj4g PiArCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCj4gPiArCS53cml0ZSA9IGNyY19jb250cm9s X3dyaXRlCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IGNydGNfY3JjX29wZW4oc3RydWN0 IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRy bV9jcnRjICpjcnRjID0gaW5vZGUtPmlfcHJpdmF0ZTsKPiA+ICsJc3RydWN0IGRybV9jcnRjX2Ny YyAqY3JjID0gJmNydGMtPmNyYzsKPiA+ICsJc3RydWN0IGRybV9jcnRjX2NyY19lbnRyeSAqZW50 cmllcyA9IE5VTEw7Cj4gPiArCXNpemVfdCBlbnRyeV9zaXplLCB2YWx1ZXNfY250Owo+ID4gKwlp bnQgcmV0Owo+ID4gKwo+ID4gKwlpZiAoY3JjLT5vcGVuZWQpCj4gPiArCQlyZXR1cm4gLUVCVVNZ Owo+ID4gKwo+ID4gKwlyZXQgPSBjcnRjLT5mdW5jcy0+c2V0X2NyY19zb3VyY2UoY3J0YywgY3Jj LT5zb3VyY2UsICZ2YWx1ZXNfY250KTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCXJldHVybiByZXQ7 Cj4gPiArCj4gPiArCWlmIChXQVJOX09OKHZhbHVlc19jbnQgPiBEUk1fTUFYX0NSQ19OUikpIHsK PiA+ICsJCXJldCA9IC1FSU5WQUw7Cj4gPiArCQlnb3RvIGVycl9kaXNhYmxlOwo+ID4gKwl9Cj4g PiArCj4gPiArCWlmIChXQVJOX09OKHZhbHVlc19jbnQgPT0gMCkpIHsKPiA+ICsJCXJldCA9IC1F SU5WQUw7Cj4gPiArCQlnb3RvIGVycl9kaXNhYmxlOwo+ID4gKwl9Cj4gPiArCj4gPiArCWVudHJ5 X3NpemUgPSBzaXplb2YoKmNyYy0+ZW50cmllcykgKyBzaXplb2YodWludDMyX3QpICogdmFsdWVz X2NudDsKPiA+ICsJZW50cmllcyA9IGtjYWxsb2MoRFJNX0NSQ19FTlRSSUVTX05SLCBlbnRyeV9z aXplLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFlbnRyaWVzKSB7Cj4gPiArCQlyZXQgPSAtRU5P TUVNOwo+ID4gKwkJZ290byBlcnJfZGlzYWJsZTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlzcGluX2xv Y2tfaXJxKCZjcmMtPmxvY2spOwo+ID4gKwljcmMtPmVudHJpZXMgPSBlbnRyaWVzOwo+ID4gKwlj cmMtPnZhbHVlc19jbnQgPSB2YWx1ZXNfY250Owo+ID4gKwljcmMtPm9wZW5lZCA9IHRydWU7Cj4g PiArCXNwaW5fdW5sb2NrX2lycSgmY3JjLT5sb2NrKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4g PiArCj4gPiArZXJyX2Rpc2FibGU6Cj4gPiArCWNydGMtPmZ1bmNzLT5zZXRfY3JjX3NvdXJjZShj cnRjLCBOVUxMLCAmdmFsdWVzX2NudCk7Cj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyBpbnQgY3J0Y19jcmNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1 Y3QgZmlsZSAqZmlsZXApCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBmaWxl cC0+Zl9pbm9kZS0+aV9wcml2YXRlOwo+ID4gKwlzdHJ1Y3QgZHJtX2NydGNfY3JjICpjcmMgPSAm Y3J0Yy0+Y3JjOwo+ID4gKwlzaXplX3QgdmFsdWVzX2NudDsKPiA+ICsKPiA+ICsJY3J0Yy0+ZnVu Y3MtPnNldF9jcmNfc291cmNlKGNydGMsIE5VTEwsICZ2YWx1ZXNfY250KTsKPiA+ICsKPiA+ICsJ c3Bpbl9sb2NrX2lycSgmY3JjLT5sb2NrKTsKPiA+ICsJa2ZyZWUoY3JjLT5lbnRyaWVzKTsKPiA+ ICsJY3JjLT5lbnRyaWVzID0gTlVMTDsKPiA+ICsJY3JjLT5oZWFkID0gMDsKPiA+ICsJY3JjLT50 YWlsID0gMDsKPiA+ICsJY3JjLT52YWx1ZXNfY250ID0gMDsKPiA+ICsJY3JjLT5vcGVuZWQgPSBm YWxzZTsKPiA+ICsJc3Bpbl91bmxvY2tfaXJxKCZjcmMtPmxvY2spOwo+ID4gKwo+ID4gKwlyZXR1 cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBjcnRjX2NyY19kYXRhX2NvdW50KHN0 cnVjdCBkcm1fY3J0Y19jcmMgKmNyYykKPiA+ICt7Cj4gPiArCWFzc2VydF9zcGluX2xvY2tlZCgm Y3JjLT5sb2NrKTsKPiA+ICsJcmV0dXJuIENJUkNfQ05UKGNyYy0+aGVhZCwgY3JjLT50YWlsLCBE Uk1fQ1JDX0VOVFJJRVNfTlIpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IGRybV9j cnRjX2NyY19lbnRyeSAqY3J0Y19nZXRfY3JjX2VudHJ5KHN0cnVjdCBkcm1fY3J0Y19jcmMgKmNy YywKPiA+ICsJCQkJCQkgICAgIGludCBpbmRleCkKPiA+ICt7Cj4gPiArCXZvaWQgKnAgPSBjcmMt PmVudHJpZXM7Cj4gPiArCXNpemVfdCBlbnRyeV9zaXplID0gKHNpemVvZigqY3JjLT5lbnRyaWVz KSArCj4gPiArCQkJICAgICBzaXplb2YoKmNyYy0+ZW50cmllc1swXS5jcmNzKSAqIGNyYy0+dmFs dWVzX2NudCk7Cj4gCj4gVGhpcyBjb21wdXRhdGlvbiBpcyBkdXBsaWNhdGVkIGFsc28gaW4gY3J0 Y19jcmNfb3BlbigpLiBjb3VsZCB1c2UgYQo+IGNvbW1vbiBoZWxwZXIgdG8gZG8gaXQuCj4gCj4g U2hhbWUgdGhlIGxhbmd1YWdlIGRvZXNuJ3QgaGF2ZSBhIHdheSB0byBkZWFsIHdpdGggYXJyYXlz IG9mIHZhcmlhYmxlCj4gc2l6ZWQgYXJyYXlzIGluIGEgbmljZSB3YXkuCj4gCj4gPiArCj4gPiAr CXJldHVybiBwICsgZW50cnlfc2l6ZSAqIGluZGV4Owo+ID4gK30KPiA+ICsKPiA+ICsjZGVmaW5l IE1BWF9MSU5FX0xFTiAoOCArIDkgKiBEUk1fTUFYX0NSQ19OUiArIDEgKyAxKQo+ID4gKwo+ID4g K3N0YXRpYyBzc2l6ZV90IGNydGNfY3JjX3JlYWQoc3RydWN0IGZpbGUgKmZpbGVwLCBjaGFyIF9f dXNlciAqdXNlcl9idWYsCj4gPiArCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQo+ ID4gK3sKPiA+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjID0gZmlsZXAtPmZfaW5vZGUtPmlfcHJp dmF0ZTsKPiA+ICsJc3RydWN0IGRybV9jcnRjX2NyYyAqY3JjID0gJmNydGMtPmNyYzsKPiA+ICsJ c3RydWN0IGRybV9jcnRjX2NyY19lbnRyeSAqZW50cnk7Cj4gPiArCWNoYXIgYnVmW01BWF9MSU5F X0xFTl07Cj4gPiArCWludCByZXQsIGk7Cj4gPiArCj4gPiArCXNwaW5fbG9ja19pcnEoJmNyYy0+ bG9jayk7Cj4gPiArCj4gPiArCWlmICghY3JjLT5zb3VyY2UpIHsKPiA+ICsJCXNwaW5fdW5sb2Nr X2lycSgmY3JjLT5sb2NrKTsKPiA+ICsJCXJldHVybiAwOwo+ID4gKwl9Cj4gPiArCj4gPiArCS8q IE5vdGhpbmcgdG8gcmVhZD8gKi8KPiA+ICsJd2hpbGUgKGNydGNfY3JjX2RhdGFfY291bnQoY3Jj KSA9PSAwKSB7Cj4gPiArCQlpZiAoZmlsZXAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Cj4gPiAr CQkJc3Bpbl91bmxvY2tfaXJxKCZjcmMtPmxvY2spOwo+ID4gKwkJCXJldHVybiAtRUFHQUlOOwo+ ID4gKwkJfQo+ID4gKwo+ID4gKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2xvY2tf aXJxKGNyYy0+d3EsCj4gPiArCQkJCQkJCWNydGNfY3JjX2RhdGFfY291bnQoY3JjKSwKPiA+ICsJ CQkJCQkJY3JjLT5sb2NrKTsKPiA+ICsJCWlmIChyZXQpIHsKPiA+ICsJCQlzcGluX3VubG9ja19p cnEoJmNyYy0+bG9jayk7Cj4gPiArCQkJcmV0dXJuIHJldDsKPiA+ICsJCX0KPiA+ICsJfQo+ID4g Kwo+ID4gKwkvKiBXZSBrbm93IHdlIGhhdmUgYW4gZW50cnkgdG8gYmUgcmVhZCAqLwo+ID4gKwll bnRyeSA9IGNydGNfZ2V0X2NyY19lbnRyeShjcmMsIGNyYy0+dGFpbCk7Cj4gPiArCj4gPiArCS8q Cj4gPiArCSAqIDEgZnJhbWUgZmllbGQgb2YgOCBjaGFycyBwbHVzIGEgbnVtYmVyIG9mIENSQyBm aWVsZHMgb2YgOAo+ID4gKwkgKiBjaGFycyBlYWNoLCBzcGFjZSBzZXBhcmF0ZWQgYW5kIHdpdGgg YSBuZXdsaW5lIGF0IHRoZSBlbmQuCj4gPiArCSAqLwo+ID4gKwlpZiAoY291bnQgPCA4ICsgOSAq IGNyYy0+dmFsdWVzX2NudCArIDEgKyAxKSB7Cj4gCj4gSnVzdCA8IE1BWF9MSU5FX0xFTiBwZXJo YXBzPyBPciBjb3VsZCBtYWtlIGEgbWFjcm8vZnVuY3Rpb24gdGhhdCB0YWtlcwo+IGNyYy0+dmFs dWVzX2NudCBvciBEUk1fTUFYX0NSQ19OUiBhcyBhbiBhcmd1bWVudC4KPiAKPiA+ICsJCXNwaW5f dW5sb2NrX2lycSgmY3JjLT5sb2NrKTsKPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gKwl9Cj4g PiArCj4gPiArCUJVSUxEX0JVR19PTl9OT1RfUE9XRVJfT0ZfMihEUk1fQ1JDX0VOVFJJRVNfTlIp Owo+ID4gKwljcmMtPnRhaWwgPSAoY3JjLT50YWlsICsgMSkgJiAoRFJNX0NSQ19FTlRSSUVTX05S IC0gMSk7Cj4gPiArCj4gPiArCXNwaW5fdW5sb2NrX2lycSgmY3JjLT5sb2NrKTsKClRoaXMgaGVy ZSBpcyBhIGJpdCByYWN5LCBJJ2QganVzdCBsb29wIG92ZXIgdGhlIHJpbmdidWYgYW5kIGVtaXQg Y3JjcwpvbmUtYnktb25lLiBUaGF0J3Mgc2ltcGxlciBmbG93LCBhbmQgd2UgZG9uJ3QgY2FyZSBh Ym91dCBwZXJmb3JtYW5jZSBoZXJlCmF0IGFsbC4gQnV0IHRoZW4gdGhhdCdzIGFsc28gYSBiaWtl c2hlZCA7LSkKCj4gPiArCj4gPiArCWlmIChlbnRyeS0+aGFzX2ZyYW1lX2NvdW50ZXIpCj4gPiAr CQlzbnByaW50ZihidWYsIDksICIlMDh4IiwgZW50cnktPmZyYW1lKTsKPiA+ICsJZWxzZQo+ID4g KwkJc25wcmludGYoYnVmLCA5LCAiWFhYWFhYWFgiKTsKPiAKPiBTaG91bGQgd2UgYWRkICIweCIg cHJlZml4IHRvIGFsbCB0aGVzZSBudW1iZXJzIHRvIG1ha2UgaXQgY2xlYXIgdGhhdAo+IHRoZXkn cmUgaW4gZmFjdCBoZXg/Cj4gCj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBjcmMtPnZhbHVl c19jbnQ7IGkrKykKPiA+ICsJCXNucHJpbnRmKGJ1ZiArIHN0cmxlbihidWYpLCAxMCwgIiAlMDh4 IiwgZW50cnktPmNyY3NbaV0pOwo+IAo+IFRoZSAnbicgaW4gc25wcmludGYoKSBoZXJlIHNlZW1z IHBvaW50bGVzcy4gQXMgZG9lcyB0aGUgc3RybGVuKCkuCj4gCj4gPiArCXNucHJpbnRmKGJ1ZiAr IHN0cmxlbihidWYpLCAyLCAiXG4iKTsKPiA+ICsKPiA+ICsJaWYgKGNvcHlfdG9fdXNlcih1c2Vy X2J1ZiwgYnVmLCBzdHJsZW4oYnVmKSArIDEpKQo+ID4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4gPiAr Cj4gPiArCXJldHVybiBzdHJsZW4oYnVmKSArIDE7Cj4gCj4gTW9yZSBzdHJsZW4oKXMgdGhhdCBz aG91bGRuJ3QgYmUgbmVlZGVkLgoKU2luY2UgSSBqdXN0IHJldmlld2VkIHRoaXMgb24gdGhlIGk5 MTUgc2lkZTogSSB0aGluayB3ZSBzaG91bGQgX25vdF8KaW5jbHVkZSB0aGUgdGVybWluYXRpbmcg MCBjaGFyIGluIHdoYXQgd2UgY29weSB0byB1c2Vyc3BhY2UgYW5kIHJlcG9ydCBhcwp0aGUgY29w aWVkIGxlbmdodC4gQSBmaWxlIGFscmVhZHkgaGFzIG91dC1vZi1iYW5kIGxlbmdodC9lb2YgaW5m b3JtYXRpb24sCnNwcmlua2xpbmcgMCBjaGFycyBhdCByYW5kb20gaW50ZXJ2YWxzIHNlZW1zIHBv aW50bGVzcy4gUmFuZG9tIGJlY2F1c2UgeW91Cm9ubHkgZG8gaXQgYXQgdGhlIGVuZCBvZiBhIHJl YWQsIG5vdCBhZnRlciBlYWNoIGNyYy4KLURhbmllbAoKPiAKPiA+ICt9Cj4gPiArCj4gPiArY29u c3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcm1fY3J0Y19jcmNfZGF0YV9mb3BzID0gewo+ID4g Kwkub3duZXIgPSBUSElTX01PRFVMRSwKPiA+ICsJLm9wZW4gPSBjcnRjX2NyY19vcGVuLAo+ID4g KwkucmVhZCA9IGNydGNfY3JjX3JlYWQsCj4gPiArCS5yZWxlYXNlID0gY3J0Y19jcmNfcmVsZWFz ZSwKPiA+ICt9Owo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9kZWJ1Z2ZzX2NydGNfY3JjX2Fk ZCAtIEFkZCBmaWxlcyB0byBkZWJ1Z2ZzIGZvciBjYXB0dXJlIG9mIGZyYW1lIENSQ3MKPiA+ICsg KiBAY3J0YzogQ1JUQyB0byB3aG9tIHRoZSBmcmFtZXMgd2lsbCBiZWxvbmcKPiA+ICsgKgo+ID4g KyAqIEFkZHMgZmlsZXMgdG8gZGVidWdmcyBkaXJlY3RvcnkgdGhhdCBhbGxvd3MgdXNlcnNwYWNl IHRvIGNvbnRyb2wgdGhlCj4gPiArICogZ2VuZXJhdGlvbiBvZiBmcmFtZSBDUkNzIGFuZCB0byBy ZWFkIHRoZW0uCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zOgo+ID4gKyAqIFplcm8gb24gc3VjY2Vz cywgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ID4gKyAqLwo+ID4gK2ludCBkcm1fZGVidWdmc19j cnRjX2NyY19hZGQoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRl bnRyeSAqY3JjX2VudCwgKmVudDsKPiA+ICsKPiA+ICsJaWYgKCFjcnRjLT5mdW5jcy0+c2V0X2Ny Y19zb3VyY2UpCj4gPiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+ICsJY3JjX2VudCA9IGRlYnVnZnNf Y3JlYXRlX2RpcigiY3JjIiwgY3J0Yy0+ZGVidWdmc19lbnRyeSk7Cj4gPiArCWlmICghY3JjX2Vu dCkKPiA+ICsJCXJldHVybiAtRU5PTUVNOwo+ID4gKwo+ID4gKwllbnQgPSBkZWJ1Z2ZzX2NyZWF0 ZV9maWxlKCJjb250cm9sIiwgU19JUlVHTywgY3JjX2VudCwgY3J0YywKPiA+ICsJCQkJICAmZHJt X2NydGNfY3JjX2NvbnRyb2xfZm9wcyk7Cj4gPiArCWlmICghZW50KQo+ID4gKwkJZ290byBlcnJv cjsKPiA+ICsKPiA+ICsJZW50ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZGF0YSIsIFNfSVJVR08s IGNyY19lbnQsIGNydGMsCj4gPiArCQkJCSAgJmRybV9jcnRjX2NyY19kYXRhX2ZvcHMpOwo+ID4g KwlpZiAoIWVudCkKPiA+ICsJCWdvdG8gZXJyb3I7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4g Kwo+ID4gK2Vycm9yOgo+ID4gKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoY3JjX2VudCk7Cj4g PiArCj4gPiArCXJldHVybiAtRU5PTUVNOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBk cm1fY3J0Y19hZGRfY3JjX2VudHJ5IC0gQWRkIGVudHJ5IHdpdGggQ1JDIGluZm9ybWF0aW9uIGZv ciBhIGZyYW1lCj4gPiArICogQGNydGM6IENSVEMgdG8gd2hpY2ggdGhlIGZyYW1lIGJlbG9uZ3MK PiA+ICsgKiBAaGFzX2ZyYW1lOiB3aGV0aGVyIHRoaXMgZW50cnkgaGFzIGEgZnJhbWUgbnVtYmVy IHRvIGdvIHdpdGgKPiA+ICsgKiBAZnJhbWU6IG51bWJlciBvZiB0aGUgZnJhbWUgdGhlc2UgQ1JD cyBhcmUgYWJvdXQKPiA+ICsgKiBAY3JjczogYXJyYXkgb2YgQ1JDIHZhbHVlcywgd2l0aCBsZW5n dGggbWF0Y2hpbmcgI2RybV9jcnRjX2NyYy52YWx1ZXNfY250Cj4gPiArICoKPiA+ICsgKiBGb3Ig ZWFjaCBmcmFtZSwgdGhlIGRyaXZlciBwb2xscyB0aGUgc291cmNlIG9mIENSQ3MgZm9yIG5ldyBk YXRhIGFuZCBjYWxscwo+ID4gKyAqIHRoaXMgZnVuY3Rpb24gdG8gYWRkIHRoZW0gdG8gdGhlIGJ1 ZmZlciBmcm9tIHdoZXJlIHVzZXJzcGFjZSByZWFkcy4KPiA+ICsgKi8KPiA+ICtpbnQgZHJtX2Ny dGNfYWRkX2NyY19lbnRyeShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGJvb2wgaGFzX2ZyYW1lLAo+ ID4gKwkJCSAgIHVpbnQzMl90IGZyYW1lLCB1aW50MzJfdCAqY3JjcykKPiA+ICt7Cj4gPiArCXN0 cnVjdCBkcm1fY3J0Y19jcmMgKmNyYyA9ICZjcnRjLT5jcmM7Cj4gPiArCXN0cnVjdCBkcm1fY3J0 Y19jcmNfZW50cnkgKmVudHJ5Owo+ID4gKwlpbnQgaGVhZCwgdGFpbDsKPiA+ICsKPiA+ICsJYXNz ZXJ0X3NwaW5fbG9ja2VkKCZjcmMtPmxvY2spOwo+ID4gKwo+ID4gKwkvKiBDYWxsZXIgbWF5IG5v dCBoYXZlIG5vdGljZWQgeWV0IHRoYXQgdXNlcnNwYWNlIGhhcyBzdG9wcGVkIHJlYWRpbmcgKi8K PiA+ICsJaWYgKCFjcmMtPm9wZW5lZCkKPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gKwo+ID4g KwloZWFkID0gY3JjLT5oZWFkOwo+ID4gKwl0YWlsID0gY3JjLT50YWlsOwo+ID4gKwo+ID4gKwlp ZiAoQ0lSQ19TUEFDRShoZWFkLCB0YWlsLCBEUk1fQ1JDX0VOVFJJRVNfTlIpIDwgMSkgewo+ID4g KwkJRFJNX0VSUk9SKCJPdmVyZmxvdyBvZiBDUkMgYnVmZmVyLCB1c2Vyc3BhY2UgcmVhZHMgdG9v IHNsb3cuXG4iKTsKPiA+ICsJCXJldHVybiAtRU5PQlVGUzsKPiA+ICsJfQo+ID4gKwo+ID4gKwll bnRyeSA9IGNydGNfZ2V0X2NyY19lbnRyeShjcmMsIGhlYWQpOwo+ID4gKwllbnRyeS0+ZnJhbWUg PSBmcmFtZTsKPiA+ICsJZW50cnktPmhhc19mcmFtZV9jb3VudGVyID0gaGFzX2ZyYW1lOwo+ID4g KwltZW1jcHkoJmVudHJ5LT5jcmNzLCBjcmNzLCBzaXplb2YoKmNyY3MpICogY3JjLT52YWx1ZXNf Y250KTsKPiA+ICsKPiA+ICsJaGVhZCA9IChoZWFkICsgMSkgJiAoRFJNX0NSQ19FTlRSSUVTX05S IC0gMSk7Cj4gPiArCWNyYy0+aGVhZCA9IGhlYWQ7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4g K30KPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fY3J0Y19hZGRfY3JjX2VudHJ5KTsKPiA+ICsj ZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKPiA+IGluZGV4IGFlYWQ5 ZmZjYmUyOS4uYTAyNDA2ZjUxZDk4IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2Ry bV9kcnYuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwo+ID4gQEAgLTE5Miw2 ICsxOTIsNyBAQCBzdGF0aWMgdm9pZCBkcm1fbWlub3JfZnJlZShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSkKPiA+ICBzdGF0aWMgaW50IGRybV9taW5vcl9yZWdpc3Rl cihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSkKPiA+ICB7Cj4gPiAg CXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yOwo+ID4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4g PiAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiAgCWludCByZXQ7Cj4gPiAgCj4gPiBAQCAtMjA3 LDYgKzIwOCwxNCBAQCBzdGF0aWMgaW50IGRybV9taW5vcl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSkKPiA+ICAJCXJldHVybiByZXQ7Cj4gPiAgCX0K PiA+ICAKPiA+ICsJaWYgKHR5cGUgPT0gRFJNX01JTk9SX0xFR0FDWSkgewo+ID4gKwkJZHJtX2Zv cl9lYWNoX2NydGMoY3J0YywgZGV2KSB7Cj4gPiArCQkJcmV0ID0gZHJtX2RlYnVnZnNfY3J0Y19h ZGQoY3J0Yyk7Cj4gPiArCQkJaWYgKHJldCkKPiA+ICsJCQkJZ290byBlcnJfZGVidWdmczsKPiA+ ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4gIAlyZXQgPSBkZXZpY2VfYWRkKG1pbm9yLT5rZGV2KTsK PiA+ICAJaWYgKHJldCkKPiA+ICAJCWdvdG8gZXJyX2RlYnVnZnM7Cj4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2RybV9pbnRlcm5hbC5oIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pbnRl cm5hbC5oCj4gPiBpbmRleCBiODZkYzliOTIxYTUuLjk5Y2U2ZDRmMjkxNiAxMDA2NDQKPiA+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faW50ZXJuYWwuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2RybV9pbnRlcm5hbC5oCj4gPiBAQCAtOTcsNiArOTcsOCBAQCBpbnQgZHJtX2RlYnVnZnNf aW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vciwgaW50IG1pbm9yX2lkLAo+ID4gIGludCBkcm1f ZGVidWdmc19jbGVhbnVwKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKPiA+ICBpbnQgZHJtX2Rl YnVnZnNfY29ubmVjdG9yX2FkZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKPiA+ ICB2b2lkIGRybV9kZWJ1Z2ZzX2Nvbm5lY3Rvcl9yZW1vdmUoc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3Rvcik7Cj4gPiAraW50IGRybV9kZWJ1Z2ZzX2NydGNfYWRkKHN0cnVjdCBkcm1fY3J0 YyAqY3J0Yyk7Cj4gPiArdm9pZCBkcm1fZGVidWdmc19jcnRjX3JlbW92ZShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpOwo+ID4gICNlbHNlCj4gPiAgc3RhdGljIGlubGluZSBpbnQgZHJtX2RlYnVnZnNf aW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vciwgaW50IG1pbm9yX2lkLAo+ID4gIAkJCQkgICBz dHJ1Y3QgZGVudHJ5ICpyb290KQo+ID4gQEAgLTExNiw0ICsxMTgsMTIgQEAgc3RhdGljIGlubGlu ZSBpbnQgZHJtX2RlYnVnZnNfY29ubmVjdG9yX2FkZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKQo+ID4gIHN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fZGVidWdmc19jb25uZWN0b3JfcmVt b3ZlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gPiAgewo+ID4gIH0KPiA+ICsK PiA+ICtzdGF0aWMgaW5saW5lIGludCBkcm1fZGVidWdmc19jcnRjX2FkZChzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCj4gPiArewo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArc3RhdGljIGlubGlu ZSB2b2lkIGRybV9kZWJ1Z2ZzX2NydGNfcmVtb3ZlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+ ICt7Cj4gPiArfQo+ID4gICNlbmRpZgo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybVAu aCBiL2luY2x1ZGUvZHJtL2RybVAuaAo+ID4gaW5kZXggY2Y5MThlM2U2YWZiLi44YTBiMjM1Y2Nj MzkgMTAwNjQ0Cj4gPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1QLmgKPiA+ICsrKyBiL2luY2x1ZGUv ZHJtL2RybVAuaAo+ID4gQEAgLTExMTEsNiArMTExMSwxMSBAQCBzdGF0aWMgX19pbmxpbmVfXyBi b29sIGRybV9jYW5fc2xlZXAodm9pZCkKPiA+ICAJcmV0dXJuIHRydWU7Cj4gPiAgfQo+ID4gIAo+ ID4gKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKPiA+ICtleHRlcm4gY29uc3Qgc3RydWN0 IGZpbGVfb3BlcmF0aW9ucyBkcm1fY3JjX2NvbnRyb2xfZm9wczsKPiA+ICtleHRlcm4gY29uc3Qg c3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcm1fY3J0Y19jcmNfZm9wczsKPiA+ICsjZW5kaWYKPiA+ ICsKPiA+ICAvKiBoZWxwZXIgZm9yIGhhbmRsaW5nIGNvbmRpdGlvbmFscyBpbiB2YXJpb3VzIGZv cl9lYWNoIG1hY3JvcyAqLwo+ID4gICNkZWZpbmUgZm9yX2VhY2hfaWYoY29uZGl0aW9uKSBpZiAo IShjb25kaXRpb24pKSB7fSBlbHNlCj4gPiAgCj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0v ZHJtX2NydGMuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKPiA+IGluZGV4IDc4MTY5NWM3NDUy OC4uZmNjNjMyOTQwZGNlIDEwMDY0NAo+ID4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAo+ ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAo+ID4gQEAgLTM1LDYgKzM1LDcgQEAKPiA+ ICAjaW5jbHVkZSA8dWFwaS9kcm0vZHJtX21vZGUuaD4KPiA+ICAjaW5jbHVkZSA8dWFwaS9kcm0v ZHJtX2ZvdXJjYy5oPgo+ID4gICNpbmNsdWRlIDxkcm0vZHJtX21vZGVzZXRfbG9jay5oPgo+ID4g KyNpbmNsdWRlIDxkcm0vZHJtX2RlYnVnZnNfY3JjLmg+Cj4gPiAgCj4gPiAgc3RydWN0IGRybV9k ZXZpY2U7Cj4gPiAgc3RydWN0IGRybV9tb2RlX3NldDsKPiA+IEBAIC03MzEsNiArNzMyLDMwIEBA IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyB7Cj4gPiAgCSAqIGJlZm9yZSBkYXRhIHN0cnVjdHVyZXMg YXJlIHRvcm5kb3duLgo+ID4gIAkgKi8KPiA+ICAJdm9pZCAoKmVhcmx5X3VucmVnaXN0ZXIpKHN0 cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gPiArCj4gPiArCS8qKgo+ID4gKwkgKiBAc2V0X2NyY19z b3VyY2U6Cj4gPiArCSAqCj4gPiArCSAqIENoYW5nZXMgdGhlIHNvdXJjZSBvZiBDUkMgY2hlY2tz dW1zIG9mIGZyYW1lcyBhdCB0aGUgcmVxdWVzdCBvZgo+ID4gKwkgKiB1c2Vyc3BhY2UsIHR5cGlj YWxseSBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gVGhlIHNvdXJjZXMgYXZhaWxhYmxlIGFyZQo+ID4g KwkgKiBzcGVjaWZpYyBvZiBlYWNoIGRyaXZlciBhbmQgYSAlTlVMTCB2YWx1ZSBpbmRpY2F0ZXMg dGhhdCBDUkMKPiA+ICsJICogZ2VuZXJhdGlvbiBpcyB0byBiZSBzd2l0Y2hlZCBvZmYuCj4gPiAr CSAqCj4gPiArCSAqIFdoZW4gQ1JDIGdlbmVyYXRpb24gaXMgZW5hYmxlZCwgdGhlIGRyaXZlciBz aG91bGQgY2FsbAo+ID4gKwkgKiBkcm1fY3J0Y19hZGRfY3JjX2VudHJ5KCkgYXQgZWFjaCBmcmFt ZSwgcHJvdmlkaW5nIGFueSBpbmZvcm1hdGlvbgo+ID4gKwkgKiB0aGF0IGNoYXJhY3Rlcml6ZXMg dGhlIGZyYW1lIGNvbnRlbnRzIGluIHRoZSBjcmNOIGFyZ3VtZW50cywgYXMKPiA+ICsJICogcHJv dmlkZWQgZnJvbSB0aGUgY29uZmlndXJlZCBzb3VyY2UuIERyaXZlcnMgc2hvdWxkIGFjY2VwdCBh ICJhdXRvIgo+ID4gKwkgKiBzb3VyY2UgbmFtZSB0aGF0IHdpbGwgc2VsZWN0IGEgZGVmYXVsdCBz b3VyY2UgZm9yIHRoaXMgQ1JUQy4KPiA+ICsJICoKPiA+ICsJICogVGhpcyBjYWxsYmFjayBpcyBv cHRpb25hbCBpZiB0aGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgYW55IENSQwo+ID4gKwkgKiBn ZW5lcmF0aW9uIGZ1bmN0aW9uYWxpdHkuCj4gPiArCSAqCj4gPiArCSAqIFJFVFVSTlM6Cj4gPiAr CSAqCj4gPiArCSAqIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFp bHVyZS4KPiA+ICsJICovCj4gPiArCWludCAoKnNldF9jcmNfc291cmNlKShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsIGNvbnN0IGNoYXIgKnNvdXJjZSwKPiA+ICsJCQkgICAgICBzaXplX3QgKnZhbHVl c19jbnQpOwo+ID4gIH07Cj4gPiAgCj4gPiAgLyoqCj4gPiBAQCAtODQ0LDYgKzg2OSwyMiBAQCBz dHJ1Y3QgZHJtX2NydGMgewo+ID4gIAkgKiBjb250ZXh0Lgo+ID4gIAkgKi8KPiA+ICAJc3RydWN0 IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4ICphY3F1aXJlX2N0eDsKPiA+ICsKPiA+ICsjaWZkZWYg Q09ORklHX0RFQlVHX0ZTCj4gPiArCS8qKgo+ID4gKwkgKiBAZGVidWdmc19lbnRyeToKPiA+ICsJ ICoKPiA+ICsJICogRGVidWdmcyBkaXJlY3RvcnkgZm9yIHRoaXMgQ1JUQy4KPiA+ICsJICovCj4g PiArCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZW50cnk7Cj4gPiArCj4gPiArCS8qKgo+ID4gKwkg KiBAY3JjOgo+ID4gKwkgKgo+ID4gKwkgKiBDb25maWd1cmF0aW9uIHNldHRpbmdzIG9mIENSQyBj YXB0dXJlLgo+ID4gKwkgKi8KPiA+ICsJc3RydWN0IGRybV9jcnRjX2NyYyBjcmM7Cj4gPiArI2Vu ZGlmCj4gPiAgfTsKPiA+ICAKPiA+ICAvKioKPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9k cm1fZGVidWdmc19jcmMuaCBiL2luY2x1ZGUvZHJtL2RybV9kZWJ1Z2ZzX2NyYy5oCj4gPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5hMzQxZmM5YmVjYWQKPiA+ IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9kZWJ1Z2ZzX2NyYy5oCj4g PiBAQCAtMCwwICsxLDc0IEBACj4gPiArLyoKPiA+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNiBDb2xs YWJvcmEgTHRkLgo+ID4gKyAqCj4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiA+ICsgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAo+ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiA+ICsgKiB0aGUgcmlnaHRzIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5z ZSwKPiA+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ID4gKyAqCj4gPiAr ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug c2hhbGwgYmUgaW5jbHVkZWQgaW4KPiA+ICsgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KPiA+ICsgKgo+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S Cj4gPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gPiArICog VEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SCj4gPiArICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCj4gPiArICogQVJJU0lORyBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S Cj4gPiArICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+ID4gKyAqLwo+ID4gKyNp Zm5kZWYgX19EUk1fREVCVUdGU19DUkNfSF9fCj4gPiArI2RlZmluZSBfX0RSTV9ERUJVR0ZTX0NS Q19IX18KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBzdHJ1Y3QgZHJtX2NydGNfY3JjX2VudHJ5IC0g ZW50cnkgZGVzY3JpYmluZyBhIGZyYW1lJ3MgY29udGVudAo+ID4gKyAqIEBmcmFtZTogbnVtYmVy IG9mIHRoZSBmcmFtZSB0aGlzIENSQyBpcyBhYm91dAo+ID4gKyAqIEBjcmM6IGFycmF5IG9mIHZh bHVlcyB0aGF0IGNoYXJhY3Rlcml6ZSB0aGUgZnJhbWUKPiA+ICsgKi8KPiA+ICtzdHJ1Y3QgZHJt X2NydGNfY3JjX2VudHJ5IHsKPiA+ICsJYm9vbCBoYXNfZnJhbWVfY291bnRlcjsKPiA+ICsJdWlu dDMyX3QgZnJhbWU7Cj4gPiArCXVpbnQzMl90IGNyY3NbMF07Cj4gPiArfTsKPiA+ICsKPiA+ICsj ZGVmaW5lIERSTV9NQVhfQ1JDX05SCQkxMAo+ID4gKyNkZWZpbmUgRFJNX0NSQ19FTlRSSUVTX05S CTEyOAo+ID4gKy8qKgo+ID4gKyAqIHN0cnVjdCBkcm1fY3J0Y19jcmMgLSBkYXRhIHN1cHBvcnRp bmcgQ1JDIGNhcHR1cmUgb24gYSBnaXZlbiBDUlRDCj4gPiArICogQGxvY2s6IHByb3RlY3RzIHRo ZSBmaWVsZHMgaW4gdGhpcyBzdHJ1Y3QKPiA+ICsgKiBAc291cmNlOiBuYW1lIG9mIHRoZSBjdXJy ZW50bHkgY29uZmlndXJlZCBzb3VyY2Ugb2YgQ1JDcwo+ID4gKyAqIEBvcGVuZWQ6IHdoZXRoZXIg dXNlcnNwYWNlIGhhcyBvcGVuZWQgdGhlIGRhdGEgZmlsZSBmb3IgcmVhZGluZwo+ID4gKyAqIEBl bnRyaWVzOiBhcnJheSBvZiBlbnRyaWVzLCB3aXRoIHNpemUgb2YgJURSTV9DUlRDX0NSQ19FTlRS SUVTX05SCj4gPiArICogQGhlYWQ6IGhlYWQgb2YgY2lyY3VsYXIgcXVldWUKPiA+ICsgKiBAdGFp bDogdGFpbCBvZiBjaXJjdWxhciBxdWV1ZQo+ID4gKyAqIEB3cTogd29ya3F1ZXVlIHVzZWQgdG8g c3luY2hyb25pemUgcmVhZGluZyBhbmQgd3JpdGluZwo+ID4gKyAqLwo+ID4gK3N0cnVjdCBkcm1f Y3J0Y19jcmMgewo+ID4gKwlzcGlubG9ja190IGxvY2s7Cj4gPiArCWNvbnN0IGNoYXIgKnNvdXJj ZTsKPiA+ICsJYm9vbCBvcGVuZWQ7Cj4gPiArCXN0cnVjdCBkcm1fY3J0Y19jcmNfZW50cnkgKmVu dHJpZXM7Cj4gPiArCWludCBoZWFkLCB0YWlsOwo+ID4gKwlzaXplX3QgdmFsdWVzX2NudDsKPiA+ ICsJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7Cj4gPiArfTsKPiA+ICsKPiA+ICsjaWYgZGVmaW5lZChD T05GSUdfREVCVUdfRlMpCj4gPiAraW50IGRybV9kZWJ1Z2ZzX2NydGNfY3JjX2FkZChzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpOwo+ID4gK2ludCBkcm1fY3J0Y19hZGRfY3JjX2VudHJ5KHN0cnVjdCBk cm1fY3J0YyAqY3J0YywgYm9vbCBoYXNfZnJhbWUsCj4gPiArCQkJICAgdWludDMyX3QgZnJhbWUs IHVpbnQzMl90ICpjcmNzKTsKPiA+ICsjZWxzZQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IGRybV9k ZWJ1Z2ZzX2NydGNfY3JjX2FkZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gPiArewo+ID4gKwly ZXR1cm4gMDsKPiA+ICt9Cj4gPiArc3RhdGljIGlubGluZSBpbnQgZHJtX2NydGNfYWRkX2NyY19l bnRyeShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGJvb2wgaGFzX2ZyYW1lLAo+ID4gKwkJCQkJIHVp bnQzMl90IGZyYW1lLCB1aW50MzJfdCAqY3JjcykKPiA+ICt7Cj4gPiArCXJldHVybiAtRUlOVkFM Owo+ID4gK30KPiA+ICsjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfREVCVUdfRlMpICovCj4gPiAr Cj4gPiArI2VuZGlmIC8qIF9fRFJNX0RFQlVHRlNfQ1JDX0hfXyAqLwo+ID4gLS0gCj4gPiAyLjUu NQo+ID4gCj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xwo+ID4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+ID4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwo+ID4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWwKPiAKPiAtLSAKPiBWaWxsZSBTeXJqw6Rsw6QKPiBJbnRlbCBPVEMKPiBfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKCi0tIApEYW5p ZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxv Zy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK