From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH 09/60] drm/bridge: Add connector-related bridge operations and data Date: Mon, 19 Aug 2019 05:37:36 +0300 Message-ID: <20190819023736.GI4999@pendragon.ideasonboard.com> References: <20190707181937.6250-6-laurent.pinchart@ideasonboard.com> <1f98e5f0-d513-d3f2-420d-80e0e0c3c71b@samsung.com> <20190711073548.GD15868@phenom.ffwll.local> <20190808181948.GW6055@pendragon.ideasonboard.com> <20190808183631.GX6055@pendragon.ideasonboard.com> <20190814130329.GF7444@phenom.ffwll.local> <20190814133057.GN5009@pendragon.ideasonboard.com> <20190814170229.GJ7444@phenom.ffwll.local> <20190816233008.GD17858@pendragon.ideasonboard.com> <20190817001456.GA20692@pendragon.ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by gabe.freedesktop.org (Postfix) with ESMTPS id C26856E086 for ; Mon, 19 Aug 2019 02:37:44 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190817001456.GA20692@pendragon.ideasonboard.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: Maxime Ripard , Tomi Valkeinen , Sean Paul , Sebastian Reichel , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org SGkgRGFuaWVsLAoKT24gU2F0LCBBdWcgMTcsIDIwMTkgYXQgMDM6MTQ6NTZBTSArMDMwMCwgTGF1 cmVudCBQaW5jaGFydCB3cm90ZToKPiBPbiBTYXQsIEF1ZyAxNywgMjAxOSBhdCAwMjozMDowOEFN ICswMzAwLCBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+ID4gT24gV2VkLCBBdWcgMTQsIDIwMTkg YXQgMDc6MDI6MjlQTSArMDIwMCwgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+PiBPbiBXZWQsIEF1 ZyAxNCwgMjAxOSBhdCAwNDozMDo1N1BNICswMzAwLCBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+ ID4+PiBPbiBXZWQsIEF1ZyAxNCwgMjAxOSBhdCAwMzowMzoyOVBNICswMjAwLCBEYW5pZWwgVmV0 dGVyIHdyb3RlOgo+ID4+Pj4gT24gVGh1LCBBdWcgMDgsIDIwMTkgYXQgMDk6MzY6MzFQTSArMDMw MCwgTGF1cmVudCBQaW5jaGFydCB3cm90ZToKPiA+Pj4+PiBPbiBUaHUsIEF1ZyAwOCwgMjAxOSBh dCAwOToxOTo0OFBNICswMzAwLCBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+ID4+Pj4+PiBPbiBU aHUsIEp1bCAxMSwgMjAxOSBhdCAwOTozNTo0OEFNICswMjAwLCBEYW5pZWwgVmV0dGVyIHdyb3Rl Ogo+ID4+Pj4+Pj4gT24gV2VkLCBKdWwgMTAsIDIwMTkgYXQgMDI6MTI6MTRQTSArMDIwMCwgQW5k cnplaiBIYWpkYSB3cm90ZToKPiA+Pj4+Pj4+PiBIaSBMYXVyZW50LAo+ID4+Pj4+Pj4+IAo+ID4+ Pj4+Pj4+IEkgbGlrZSB0aGUgYXBwcm9hY2gsIGN1cnJlbnQgcHJhY3RpY2Ugd2hlbiBhbG1vc3Qg ZXZlcnkgYnJpZGdlIHNob3VsZAo+ID4+Pj4+Pj4+IG9wdGlvbmFsbHkgaW1wbGVtZW50IGNvbm5l Y3Rvciwgb3IgYWx0ZXJuYXRpdmVseSBkb3duc3RyZWFtIGJyaWRnZSBvcgo+ID4+Pj4+Pj4+IHBh bmVsIGlzIHZlcnkgcGFpbmZ1bC4KPiA+Pj4+Pj4+IAo+ID4+Pj4+Pj4gWWVhaCBJIHRoaW5rIHRo aXMgbG9va3MgbW9zdGx5IHJlYXNvbmFibGUuIFNvbWUgYXBpIGRlc2lnbiBjb21tZW50cyBvbiB0 b3AKPiA+Pj4+Pj4+IG9mIEFuZHJ6ZWonLCB3aXRoIHRoZSBmYWlyIHdhcm5pbmcgdGhhdCBJIGRp ZG4ndCBib3RoZXIgdG8gcmVhZCB1cCBvbiBob3cKPiA+Pj4+Pj4+IGl0J3MgYWxsIHVzZWQgaW4g dGhlIGVuZC4gSSBwcm9iYWJseSBzaG91bGQgZ28gYW5kIGRvIHRoYXQsIGF0IGxlYXN0IHRvCj4g Pj4+Pj4+PiBnZXQgYSBmZWVsaW5nIGZvciB3aGF0IHlvdXIgaHBkX2NiIHVzdWFsbHkgZG9lcy4K PiA+Pj4+Pj4+IAo+ID4+Pj4+Pj4+IE1vcmUgY29tbWVudHMgaW5saW5lZC4KPiA+Pj4+Pj4+PiAK PiA+Pj4+Pj4+PiBPbiAwNy4wNy4yMDE5IDIwOjE4LCBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+ ID4+Pj4+Pj4+PiBUbyBzdXBwb3J0IGltcGxlbWVudGF0aW9uIG9mIERSTSBjb25uZWN0b3JzIG9u IHRvcCBvZiBEUk0gYnJpZGdlcwo+ID4+Pj4+Pj4+PiBpbnN0ZWFkIG9mIGJ5IGJyaWRnZXMsIHRo ZSBkcm1fYnJpZGdlIG5lZWRzIHRvIGV4cG9zZSBuZXcgb3BlcmF0aW9ucyBhbmQKPiA+Pj4+Pj4+ Pj4gZGF0YToKPiA+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4gLSBPdXRwdXQgZGV0ZWN0aW9uLCBob3Qt cGx1ZyBub3RpZmljYXRpb24sIG1vZGUgcmV0cmlldmFsIGFuZCBFRElECj4gPj4+Pj4+Pj4+ICAg cmV0cmlldmFsIG9wZXJhdGlvbnMKPiA+Pj4+Pj4+Pj4gLSBCaXRtYXNrIG9mIHN1cHBvcnRlZCBv cGVyYXRpb25zCj4gPj4+Pj4+Pj4gCj4gPj4+Pj4+Pj4gCj4gPj4+Pj4+Pj4gV2h5IGRvIHdlIG5l ZWQgdGhlc2UgYml0bWFzayBhdCBhbGw/IFdoeSBjYW5ub3Qgd2UgcmVseSBvbiBwcmVzZW5jZSBv Zgo+ID4+Pj4+Pj4+IG9wZXJhdGlvbidzIGNhbGxiYWNrPwo+ID4+Pj4+Pj4gCj4gPj4+Pj4+PiBZ ZWFoIGFsc28gbm90IGEgaHVnZSBmYW4gb2YgdGhlc2UgYml0bWFza3MuIFNtZWxscyBsaWtlCj4g Pj4+Pj4+PiBEUklWRVJfR0VNfERSSVZFUl9NT0RFU0VULCBhbmQgSSBwZXJzb25hbGx5IHJlYWxs eSBoYXRlIHRob3NlLiBFYXN5IHRvCj4gPj4+Pj4+PiBhZGQsIGdlbmVyYWxseSBnb29kIGV4Y3Vz ZSB0byBub3QgaGF2ZSB0byB0aGluayB0aHJvdWdoIHRoZSBkZXNpZ24gYmV0d2Vlbgo+ID4+Pj4+ Pj4gZGlmZmVyZW50IHBhcnRzIG9mIGRyaXZlcnMgLSAianVzdCIgYWRkIGFub3RoZXIgZmxhZy4K PiA+Pj4+Pj4gCj4gPj4+Pj4+IFRoZSByZWFzb24gaXMgdGhhdCBhIGJyaWRnZSBtYXkgc3VwcG9y dCBhbiBvcGVyYXRpb24gKGFzIGluIGltcGxlbWVudGVkCj4gPj4+Pj4+IGluIHRoZSBicmlkZ2Ug aGFyZHdhcmUpLCBidXQgdGhhdCBvcGVyYXRpb24gbWF5IG5vdCBiZSBzdXBwb3J0ZWQgb24gYQo+ ID4+Pj4+PiBwYXJ0aWN1bGFyIGJvYXJkLiBGb3IgaW5zdGFuY2UgYW4gSERNSSBlbmNvZGVyIG1h eSBzdXBwb3J0IHJlYWRpbmcgRURJRAo+ID4+Pj4+PiB3aGVuIHRoZSBEREMgbGluZXMgYXJlIGNv bm5lY3RlZCB0byB0aGUgZW5jb2RlciwgYnV0IGEgYm9hcmQgbWF5IGNvbm5lY3QKPiA+Pj4+Pj4g dGhlIEREQyBsaW5lcyB0byBhbiBJMkMgcG9ydCBvZiB0aGUgU29DLiBXZSB0aHVzIG5lZWQgdG8g ZGVjb3VwbGUKPiA+Pj4+Pj4gaWYgYSBwYXJ0aWN1bGFyIGluc3RhbmNlIG9mIHRoZSBkZXZpY2Ug c3VwcG9ydHMgdGhlIG9wZXJhdGlvbiAoZXhwb3NlZAo+ID4+Pj4+PiBieSB0aGUgb3BzIGZsYWdz KSBmcm9tIHRoZSBmdW5jdGlvbiBwb2ludGVycy4KPiA+Pj4+Pj4gCj4gPj4+Pj4+IFdlIGNvdWxk IG9mIGNvdXJzZSBhbGxvY2F0ZSB0aGUgZHJtX2JyaWRnZV9mdW5jcyBzdHJ1Y3R1cmUgZHluYW1p Y2FsbHkKPiA+Pj4+Pj4gZm9yIGVhY2ggYnJpZGdlIGluc3RhbmNlLCBhbmQgZmlsbCBpdCB3aXRo IGZ1bmN0aW9uIHBvaW50ZXJzIG1hbnVhbGx5LAo+ID4+Pj4+PiBsZWF2aW5nIHRoZSB1bnVzZWQg b3BzIGFsd2F5cyBOVUxMLCBidXQgdGhhdCB3b3VsZCByZXF1aXJlIG1ha2luZyB0aGUKPiA+Pj4+ Pj4gc3RydWN0dXJlIHdyaXRhYmxlLCB3aGljaCBpcyBjb25zaWRlcmVkIGEgc2VjdXJpdHkgaXNz dWUuIFRoYXQncyB3aHkgSQo+ID4+Pj4+PiBkZWNpZGVkIHRvIGtlZXAgdGhlIGRybV9icmlkZ2Vf ZnVuY3Mgc3RydWN0dXJlIGFzIGEgZ2xvYmFsIHN0YXRpYyBjb25zdAo+ID4+Pj4+PiBzdHJ1Y3R1 cmUsIGFuZCBhZGQgYW4gb3BzIGJpdG1hc2suCj4gPj4+Pj4+IAo+ID4+Pj4+Pj4+PiAtIEJyaWRn ZSBvdXRwdXQgdHlwZQo+ID4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+PiBBZGQgYW5kIGRvY3VtZW50IHRo ZXNlLgo+ID4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+PiBUaHJlZSBuZXcgYnJpZGdlIGhlbHBlciBmdW5j dGlvbnMgYXJlIGFsc28gYWRkZWQgdG8gaGFuZGxlIGhvdCBwbHVnCj4gPj4+Pj4+Pj4+IG5vdGlm aWNhdGlvbiBpbiBhIHdheSB0aGF0IGlzIGFzIHRyYW5zcGFyZW50IGFzIHBvc3NpYmxlIGZvciB0 aGUKPiA+Pj4+Pj4+Pj4gYnJpZGdlcy4KPiA+Pj4+Pj4+PiAKPiA+Pj4+Pj4+PiBEb2N1bWVudGF0 aW9uIG9mIG5ldyBvcHNlcyBkb2VzIG5vdCBleHBsYWluIGhvdyBpdCBzaG91bGQgY29vcGVyYXRl IHdpdGgKPiA+Pj4+Pj4+PiBicmlkZ2UgY2hhaW5pbmcsIEkgc3VwcG9zZSB0aGV5IHNob3VsZCBi ZSBjaGFpbmVkIGV4cGxpY2l0bHksIGFtIEkKPiA+Pj4+Pj4+PiByaWdodD8gTW9yZSBjb21tZW50 cyBhYm91dCBpdCBsYXRlci4KPiA+Pj4+Pj4gCj4gPj4+Pj4+IE5vLCB0aGUgd2hvbGUgcG9pbnQg aXMgdGhhdCB0aGV5IHNob3VsZCBub3QgYmUgY2hhaW5lZCBhdCBhbGwuIEEgYnJpZGdlCj4gPj4+ Pj4+IGRvZXMgbm90IGhhdmUgdG8gcHJvcGFnYXRlLCBmb3IgaW5zdGFuY2UsIC5nZXRfZWRpZCgp IHRvIHRoZSBuZXh0Cj4gPj4+Pj4+IGJyaWRnZS4gVGhhdCdzIG9uZSBvZiB0aGUgY29yZSBkZXNp Z24gcHJpbmNpcGxlcyBpbiB0aGlzIHNlcmllcywgSSB3YW50Cj4gPj4+Pj4+IHRvIGtlZXAgdGhl IGJyaWRnZXMgYXMgc2ltcGxlIGFzIHBvc3NpYmxlLCBhbmQgbW92ZSB0aGUgY29tcGxleGl0eSBv Zgo+ID4+Pj4+PiB0aGUgYm9pbGVycGxhdGUgY29kZSB0aGF0IGlzIGN1cnJlbnRseSBjb3BpZWQg YWxsIGFyb3VuZCB0byBoZWxwZXJzLiBTZWUKPiA+Pj4+Pj4gcGF0Y2ggImRybTogQWRkIGhlbHBl ciB0byBjcmVhdGUgYSBjb25uZWN0b3IgZm9yIGEgY2hhaW4gb2YgYnJpZGdlcyIgZm9yCj4gPj4+ Pj4+IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoaXMgaXMgdXNlZCwgd2l0aCBhIGhlbHBl ciB0aGF0IGRlbGVnYXRlcwo+ID4+Pj4+PiB0aGUgY29ubmVjdG9yIG9wZXJhdGlvbnMgdG8gdGhl IGNvcnJlY3QgYnJpZGdlIGluIHRoZSBjaGFpbiBiYXNlZCBvbiB0aGUKPiA+Pj4+Pj4gb3BzIHJl cG9ydGVkIGJ5IGVhY2ggYnJpZGdlLgo+ID4+Pj4+PiAKPiA+Pj4+Pj4+Pj4gU2lnbmVkLW9mZi1i eTogTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPgo+ ID4+Pj4+Pj4+PiAtLS0KPiA+Pj4+Pj4+Pj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMg fCAgOTIgKysrKysrKysrKysrKysrKysrKwo+ID4+Pj4+Pj4+PiAgaW5jbHVkZS9kcm0vZHJtX2Jy aWRnZS5oICAgICB8IDE3MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQo+ID4+ Pj4+Pj4+PiAgMiBmaWxlcyBjaGFuZ2VkLCAyNjEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigt KQo+ID4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ry bV9icmlkZ2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMKPiA+Pj4+Pj4+Pj4gaW5k ZXggNTE5NTc3ZjM2M2UzLi4zYzJhMjU1ZGY3YWYgMTAwNjQ0Cj4gPj4+Pj4+Pj4+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMKPiA+Pj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2RybV9icmlkZ2UuYwo+ID4+Pj4+Pj4+PiBAQCAtNzAsNiArNzAsOCBAQCBzdGF0aWMgTElT VF9IRUFEKGJyaWRnZV9saXN0KTsKPiA+Pj4+Pj4+Pj4gICAqLwo+ID4+Pj4+Pj4+PiAgdm9pZCBk cm1fYnJpZGdlX2FkZChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ID4+Pj4+Pj4+PiAgewo+ ID4+Pj4+Pj4+PiArCW11dGV4X2luaXQoJmJyaWRnZS0+aHBkX211dGV4KTsKPiA+Pj4+Pj4+Pj4g Kwo+ID4+Pj4+Pj4+PiAgCW11dGV4X2xvY2soJmJyaWRnZV9sb2NrKTsKPiA+Pj4+Pj4+Pj4gIAls aXN0X2FkZF90YWlsKCZicmlkZ2UtPmxpc3QsICZicmlkZ2VfbGlzdCk7Cj4gPj4+Pj4+Pj4+ICAJ bXV0ZXhfdW5sb2NrKCZicmlkZ2VfbG9jayk7Cj4gPj4+Pj4+Pj4+IEBAIC04Niw2ICs4OCw4IEBA IHZvaWQgZHJtX2JyaWRnZV9yZW1vdmUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiA+Pj4+ Pj4+Pj4gIAltdXRleF9sb2NrKCZicmlkZ2VfbG9jayk7Cj4gPj4+Pj4+Pj4+ICAJbGlzdF9kZWxf aW5pdCgmYnJpZGdlLT5saXN0KTsKPiA+Pj4+Pj4+Pj4gIAltdXRleF91bmxvY2soJmJyaWRnZV9s b2NrKTsKPiA+Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+PiArCW11dGV4X2Rlc3Ryb3koJmJyaWRnZS0+ aHBkX211dGV4KTsKPiA+Pj4+Pj4+Pj4gIH0KPiA+Pj4+Pj4+Pj4gIEVYUE9SVF9TWU1CT0woZHJt X2JyaWRnZV9yZW1vdmUpOwo+ID4+Pj4+Pj4+PiAgCj4gPj4+Pj4+Pj4+IEBAIC00NjMsNiArNDY3 LDk0IEBAIHZvaWQgZHJtX2F0b21pY19icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpi cmlkZ2UsCj4gPj4+Pj4+Pj4+ICB9Cj4gPj4+Pj4+Pj4+ICBFWFBPUlRfU1lNQk9MKGRybV9hdG9t aWNfYnJpZGdlX2VuYWJsZSk7Cj4gPj4+Pj4+Pj4+ICAKPiA+Pj4+Pj4+Pj4gKy8qKgo+ID4+Pj4+ Pj4+PiArICogZHJtX2JyaWRnZV9ocGRfZW5hYmxlIC0gZW5hYmxlIGhvdCBwbHVnIGRldGVjdGlv biBmb3IgdGhlIGJyaWRnZQo+ID4+Pj4+Pj4+PiArICogQGJyaWRnZTogYnJpZGdlIGNvbnRyb2wg c3RydWN0dXJlCj4gPj4+Pj4+Pj4+ICsgKiBAY2I6IGhvdC1wbHVnIGRldGVjdGlvbiBjYWxsYmFj awo+ID4+Pj4+Pj4+PiArICogQGRhdGE6IGRhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBob3QtcGx1 ZyBkZXRlY3Rpb24gY2FsbGJhY2sKPiA+Pj4+Pj4+Pj4gKyAqCj4gPj4+Pj4+Pj4+ICsgKiBDYWxs ICZkcm1fYnJpZGdlX2Z1bmNzLmhwZF9lbmFibGUgYW5kIHJlZ2lzdGVyIHRoZSBnaXZlbiBAY2Ig YW5kIEBkYXRhIGFzCj4gPj4+Pj4+Pj4+ICsgKiBob3QgcGx1ZyBub3RpZmljYXRpb24gY2FsbGJh Y2suIEZyb20gbm93IG9uIHRoZSBAY2Igd2lsbCBiZSBjYWxsZWQgd2l0aAo+ID4+Pj4+Pj4+PiAr ICogQGRhdGEgd2hlbiBhbiBvdXRwdXQgc3RhdHVzIGNoYW5nZSBpcyBkZXRlY3RlZCBieSB0aGUg YnJpZGdlLCB1bnRpbCBob3QgcGx1Zwo+ID4+Pj4+Pj4+PiArICogbm90aWZpY2F0aW9uIGdldHMg ZGlzYWJsZWQgd2l0aCBkcm1fYnJpZGdlX2hwZF9kaXNhYmxlKCkuCj4gPj4+Pj4+Pj4+ICsgKgo+ ID4+Pj4+Pj4+PiArICogSG90IHBsdWcgZGV0ZWN0aW9uIGlzIHN1cHBvcnRlZCBvbmx5IGlmIHRo ZSBEUk1fQlJJREdFX09QX0hQRCBmbGFnIGlzIHNldCBpbgo+ID4+Pj4+Pj4+PiArICogYnJpZGdl LT5vcHMuIFRoaXMgZnVuY3Rpb24gc2hhbGwgbm90IGJlIGNhbGxlZCB3aGVuIHRoZSBmbGFnIGlz IG5vdCBzZXQuCj4gPj4+Pj4+Pj4+ICsgKgo+ID4+Pj4+Pj4+PiArICogT25seSBvbmUgaG90IHBs dWcgZGV0ZWN0aW9uIGNhbGxiYWNrIGNhbiBiZSByZWdpc3RlcmVkIGF0IGEgdGltZSwgaXQgaXMg YW4KPiA+Pj4+Pj4+Pj4gKyAqIGVycm9yIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIGhvdCBw bHVnIGRldGVjdGlvbiBpcyBhbHJlYWR5IGVuYWJsZWQgZm9yCj4gPj4+Pj4+Pj4+ICsgKiB0aGUg YnJpZGdlLgo+ID4+Pj4+Pj4+PiArICovCj4gPj4+Pj4+Pj4gCj4gPj4+Pj4+Pj4gVG8gc2ltcGxp ZnkgYXJjaGl0ZWN0dXJlIG1heWJlIHdvdWxkIGJlIGJldHRlciB0byBlbmFibGUgaHBkIGp1c3Qg b24KPiA+Pj4+Pj4+PiBicmlkZ2UgYXR0YWNoOgo+ID4+Pj4+Pj4+IAo+ID4+Pj4+Pj4+IGJyaWRn ZS0+aHBkX2NiID0gY2I7Cj4gPj4+Pj4+Pj4gCj4gPj4+Pj4+Pj4gYnJpZGdlLT5ocGRfZGF0YSA9 IGRhdGE7Cj4gPj4+Pj4+Pj4gCj4gPj4+Pj4+Pj4gcmV0ID0gZHJtX2JyaWRnZV9hdHRhY2goLi4u KTsKPiA+Pj4+Pj4+IAo+ID4+Pj4+Pj4gWWVhaCBJIGxpa2UgdGhpcyBtb3JlLiBUaGUgb3RoZXIg cHJvYmxlbSBoZXJlIGlzLCB3aGF0IGlmIHlvdSBuZWVkIG1vcmUKPiA+Pj4+Pj4+IHRoYW4gMSBj YWxsYmFjayByZWdpc3RlcnMgb24gdGhlIHNhbWUgYnJpZGdlIGhkcCBzaWduYWw/Cj4gPj4+Pj4+ IAo+ID4+Pj4+PiBUaGF0J3Mgd2h5IEkgZGVjaWRlZCB0byBoaWRlIGhpZGUgSFBEIHRocm91Z2gg aGVscGVycywKPiA+Pj4+Pj4gZHJtX2JyaWRnZV9ocGRfZW5hYmxlKCkgYW5kIGRybV9icmlkZ2Vf aHBkX2Rpc2FibGUoKSBvbiB0aGUgbGlzdGVuZXIKPiA+Pj4+Pj4gc2lkZSwgYW5kIGRybV9icmlk Z2VfaHBkX25vdGlmeSgpIG9uIHRoZSBldmVudCByZXBvcnRlciBzaWRlLiBXaGlsZSB0aGUKPiA+ Pj4+Pj4gY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpcyBsaW1pdGVkIHRvIGEgc2luZ2xlIGxpc3Rl bmVyLCBvbmx5IHRoZSBoZWxwZXJzCj4gPj4+Pj4+IHdvdWxkIG5lZWQgdG8gYmUgY2hhbmdlZCB0 byBleHRlbmQgdGhhdCB0byBtdWx0aXBsZSBsaXN0ZW5lcnMuCj4gPj4+Pj4+IAo+ID4+Pj4+PiBO b3RlIHRoYXQgdGhlIC5ocGRfZW5hYmxlKCkgYW5kIC5ocGRfZGlzYWJsZSgpIG9wZXJhdGlvbnMg YWxzbyBhbGxvdyB0aGUKPiA+Pj4+Pj4gYnJpZGdlIHRvIGRpc2FibGUgSFBEIGRldGVjdGlvbiB3 aGVuIG5vdCB1c2VkLiBEb2luZyBzbyBrZWVwcyB0aGUgYnJpZGdlCj4gPj4+Pj4+IHNpbXBsZSwg aXQgb25seSBuZWVkcyB0byBjYXJlIGFib3V0IHJlcG9ydGluZyBIUEQgZXZlbnRzIHdoZW4gdGhl eSdyZQo+ID4+Pj4+PiBlbmFibGVkLCB3aXRob3V0IGNhcmluZyB3aG8gKGlmIGFueW9uZSkgaXMg bGlzdGVuaW5nLCBhbmQgZ2V0cyBjbGVhcgo+ID4+Pj4+PiBpbnN0cnVjdGlvbnMgb24gd2hldGhl ciB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgSFBEIGhhcmR3YXJlIChpbiBjYXNlCj4gPj4+Pj4+ IGl0IGNhbiBiZSBkaXNhYmxlZCkuCj4gPj4+Pj4+IAo+ID4+Pj4+Pj4+IFRoaXMgd2F5IHdlIGNv dWxkIGF2b2lkIGFkZGluZyBuZXcgY2FsbGJhY2tzIGhwZF8oZW5hYmxlfGRpc2FibGUpCj4gPj4+ Pj4+Pj4gd2l0aG91dCBiaWcgc2FjcmlmaWNlcy4KPiA+Pj4+Pj4+PiAKPiA+Pj4+Pj4+PiBPbmUg bW9yZSB0aGluZzogSFBEIGluIERpc3BsYXlQb3J0L0hETUkgYmVzaWRlIHNpZ25hbGxpbmcgcGx1 Zy91bnBsdWcsCj4gPj4+Pj4+Pj4gbm90aWZpZXMgYWJvdXQgc2luayBzdGF0dXMgY2hhbmdlLCBo b3cgaXQgdHJhbnNsYXRlcyB0byB0aGlzIGNiPwo+ID4+Pj4+PiAKPiA+Pj4+Pj4gVGhpcyBpcyBz b21ldGhpbmcgdGhpcyBzZXJpZXMgZG9lc24ndCBpbXBsZW1lbnQuIEkgZG9uJ3QgdGhpbmsgaXQg d291bGQKPiA+Pj4+Pj4gYmUgYSBiaWcgZGVhbCwgYnV0IG15IGtub3dsZWRnZSBvZiBIUEQgKGVz cGVjaWFsbHkgZm9yIERpc3BsYXlQb3J0KSBlbmRzCj4gPj4+Pj4+IGhlcmUuIElmIHlvdSBjYW4g ZWxhYm9yYXRlIG9uIHdoYXQgd291bGQgYmUgbmVlZGVkLCBJIGNhbiBpbXBsZW1lbnQKPiA+Pj4+ Pj4gdGhhdC4KPiA+Pj4+Pj4gCj4gPj4+Pj4+Pj4+ICt2b2lkIGRybV9icmlkZ2VfaHBkX2VuYWJs ZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ID4+Pj4+Pj4+PiArCQkJICAgdm9pZCAoKmNi KSh2b2lkICpkYXRhLAo+ID4+Pj4+Pj4+PiArCQkJCSAgICAgIGVudW0gZHJtX2Nvbm5lY3Rvcl9z dGF0dXMgc3RhdHVzKSwKPiA+Pj4+Pj4+Pj4gKwkJCSAgIHZvaWQgKmRhdGEpCj4gPj4+Pj4+Pj4+ ICt7Cj4gPj4+Pj4+Pj4+ICsJaWYgKCFicmlkZ2UgfHwgIWJyaWRnZS0+ZnVuY3MtPmhwZF9lbmFi bGUpCj4gPj4+Pj4+Pj4+ICsJCXJldHVybjsKPiA+Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+PiArCW11 dGV4X2xvY2soJmJyaWRnZS0+aHBkX211dGV4KTsKPiA+Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+PiAr CWlmIChXQVJOKGJyaWRnZS0+aHBkX2NiLCAiSG90IHBsdWcgZGV0ZWN0aW9uIGFscmVhZHkgZW5h YmxlZFxuIikpCj4gPj4+Pj4+Pj4+ICsJCWdvdG8gdW5sb2NrOwo+ID4+Pj4+Pj4+PiArCj4gPj4+ Pj4+Pj4+ICsJYnJpZGdlLT5ocGRfY2IgPSBjYjsKPiA+Pj4+Pj4+Pj4gKwlicmlkZ2UtPmhwZF9k YXRhID0gZGF0YTsKPiA+Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+PiArCWJyaWRnZS0+ZnVuY3MtPmhw ZF9lbmFibGUoYnJpZGdlKTsKPiA+Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+PiArdW5sb2NrOgo+ID4+ Pj4+Pj4+PiArCW11dGV4X3VubG9jaygmYnJpZGdlLT5ocGRfbXV0ZXgpOwo+ID4+Pj4+Pj4+PiAr fQo+ID4+Pj4+Pj4+PiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2JyaWRnZV9ocGRfZW5hYmxlKTsK PiA+Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+PiArLyoqCj4gPj4+Pj4+Pj4+ICsgKiBkcm1fYnJpZGdl X2hwZF9kaXNhYmxlIC0gZGlzYWJsZSBob3QgcGx1ZyBkZXRlY3Rpb24gZm9yIHRoZSBicmlkZ2UK PiA+Pj4+Pj4+Pj4gKyAqIEBicmlkZ2U6IGJyaWRnZSBjb250cm9sIHN0cnVjdHVyZQo+ID4+Pj4+ Pj4+PiArICoKPiA+Pj4+Pj4+Pj4gKyAqIENhbGwgJmRybV9icmlkZ2VfZnVuY3MuaHBkX2Rpc2Fi bGUgYW5kIHVucmVnaXN0ZXIgdGhlIGhvdCBwbHVnIGRldGVjdGlvbgo+ID4+Pj4+Pj4+PiArICog Y2FsbGJhY2sgcHJldmlvdXNseSByZWdpc3RlcmVkIHdpdGggZHJtX2JyaWRnZV9ocGRfZW5hYmxl KCkuIE9uY2UgdGhpcwo+ID4+Pj4+Pj4+PiArICogZnVuY3Rpb24gcmV0dXJucyB0aGUgY2FsbGJh Y2sgd2lsbCBub3QgYmUgY2FsbGVkIGJ5IHRoZSBicmlkZ2Ugd2hlbiBhbgo+ID4+Pj4+Pj4+PiAr ICogb3V0cHV0IHN0YXR1cyBjaGFuZ2Ugb2NjdXJzLgo+ID4+Pj4+Pj4+PiArICoKPiA+Pj4+Pj4+ Pj4gKyAqIEhvdCBwbHVnIGRldGVjdGlvbiBpcyBzdXBwb3J0ZWQgb25seSBpZiB0aGUgRFJNX0JS SURHRV9PUF9IUEQgZmxhZyBpcyBzZXQgaW4KPiA+Pj4+Pj4+Pj4gKyAqIGJyaWRnZS0+b3BzLiBU aGlzIGZ1bmN0aW9uIHNoYWxsIG5vdCBiZSBjYWxsZWQgd2hlbiB0aGUgZmxhZyBpcyBub3Qgc2V0 Lgo+ID4+Pj4+Pj4+PiArICovCj4gPj4+Pj4+Pj4+ICt2b2lkIGRybV9icmlkZ2VfaHBkX2Rpc2Fi bGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiA+Pj4+Pj4+Pj4gK3sKPiA+Pj4+Pj4+Pj4g KwlpZiAoIWJyaWRnZSB8fCAhYnJpZGdlLT5mdW5jcy0+aHBkX2Rpc2FibGUpCj4gPj4+Pj4+Pj4+ ICsJCXJldHVybjsKPiA+Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+PiArCW11dGV4X2xvY2soJmJyaWRn ZS0+aHBkX211dGV4KTsKPiA+Pj4+Pj4+Pj4gKwlicmlkZ2UtPmZ1bmNzLT5ocGRfZGlzYWJsZShi cmlkZ2UpOwo+ID4+Pj4+Pj4+PiArCj4gPj4+Pj4+Pj4+ICsJYnJpZGdlLT5ocGRfY2IgPSBOVUxM Owo+ID4+Pj4+Pj4+PiArCWJyaWRnZS0+aHBkX2RhdGEgPSBOVUxMOwo+ID4+Pj4+Pj4+PiArCW11 dGV4X3VubG9jaygmYnJpZGdlLT5ocGRfbXV0ZXgpOwo+ID4+Pj4+Pj4+PiArfQo+ID4+Pj4+Pj4+ PiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2JyaWRnZV9ocGRfZGlzYWJsZSk7Cj4gPj4+Pj4+Pj4+ ICsKPiA+Pj4+Pj4+Pj4gKy8qKgo+ID4+Pj4+Pj4+PiArICogZHJtX2JyaWRnZV9ocGRfbm90aWZ5 IC0gbm90aWZ5IGhvdCBwbHVnIGRldGVjdGlvbiBldmVudHMKPiA+Pj4+Pj4+Pj4gKyAqIEBicmlk Z2U6IGJyaWRnZSBjb250cm9sIHN0cnVjdHVyZQo+ID4+Pj4+Pj4+PiArICogQHN0YXR1czogb3V0 cHV0IGNvbm5lY3Rpb24gc3RhdHVzCj4gPj4+Pj4+Pj4+ICsgKgo+ID4+Pj4+Pj4+PiArICogQnJp ZGdlIGRyaXZlcnMgc2hhbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHJlcG9ydCBob3QgcGx1ZyBl dmVudHMgd2hlbiB0aGV5Cj4gPj4+Pj4+Pj4+ICsgKiBkZXRlY3QgYSBjaGFuZ2UgaW4gdGhlIG91 dHB1dCBzdGF0dXMsIHdoZW4gaG90IHBsdWcgZGV0ZWN0aW9uIGhhcyBiZWVuCj4gPj4+Pj4+Pj4+ ICsgKiBlbmFibGVkIGJ5IHRoZSAmZHJtX2JyaWRnZV9mdW5jcy5ocGRfZW5hYmxlIGNhbGxiYWNr Lgo+ID4+Pj4+Pj4+PiArICoKPiA+Pj4+Pj4+Pj4gKyAqIFRoaXMgZnVuY3Rpb24gc2hhbGwgYmUg Y2FsbGVkIGluIGEgY29udGV4dCB0aGF0IGNhbiBzbGVlcC4KPiA+Pj4+Pj4+Pj4gKyAqLwo+ID4+ Pj4+Pj4+PiArdm9pZCBkcm1fYnJpZGdlX2hwZF9ub3RpZnkoc3RydWN0IGRybV9icmlkZ2UgKmJy aWRnZSwKPiA+Pj4+Pj4+Pj4gKwkJCSAgIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVz KQo+ID4+Pj4+Pj4+PiArewo+ID4+Pj4+Pj4+PiArCW11dGV4X2xvY2soJmJyaWRnZS0+aHBkX211 dGV4KTsKPiA+Pj4+Pj4+Pj4gKwlpZiAoYnJpZGdlLT5ocGRfY2IpCj4gPj4+Pj4+Pj4+ICsJCWJy aWRnZS0+aHBkX2NiKGJyaWRnZS0+aHBkX2RhdGEsIHN0YXR1cyk7Cj4gPj4+Pj4+PiAKPiA+Pj4+ Pj4+IFNvIHRoaXMgaXNuJ3QgcXVpdGUgd2hhdCBJIGhhZCBpbiBtaW5kLiBJbnN0ZWFkIHNvbWV0 aGluZyBsaWtlIHRoaXM6Cj4gPj4+Pj4+PiAKPiA+Pj4+Pj4+IAkvKiBpdGVyYXRlcyBvdmVyIGFs bCBicmlkZ2VzIGluIHRoZSBjaGFpbiBjb250YWluaW5nIEBicmlkZ2UgKi8KPiA+Pj4+Pj4+IAlm b3JfZWFjaF9icmlkZ2UodG1wX2JyaWRnZSwgYnJpZGdlKSB7Cj4gPj4+Pj4+PiAJCWlmICh0bXBf YnJpZGdlID09IGJyaWRnZSkKPiA+Pj4+Pj4+IAkJCWNvbnRpbnVlOwo+ID4+Pj4+Pj4gCQlpZiAo YnJpZGdlLT5ocGRfbm90aWZ5KTsKPiA+Pj4+Pj4+IAkJCWJyaWRnZS0+aHBkX25vdGlmeSh0bXBf YnJpZGdlLCBicmlkZ2UsIHN0YXR1cyk7Cj4gPj4+Pj4+PiAJfQo+ID4+Pj4+Pj4gCj4gPj4+Pj4+ PiAJZW5jb2RlciA9IGVuY29kZXJfZm9yX2JyaWRnZShicmlkZ2UpOwo+ID4+Pj4+Pj4gCWlmIChl bmNvZGVyLT5oZWxwZXJfcHJpdmF0ZS0+YnJpZGdlX2hwZF9ub3RpZnkpCj4gPj4+Pj4+PiAJCWVu Y29kZXItPmhlbHBlcl9wcml2YXRlLT5icmlkZ2VfaHBkX25vdGlmeShlbmNvZGVyLCBicmlkZ2Us IHN0YXR1cyk7Cj4gPj4+Pj4+PiAKPiA+Pj4+Pj4+IAlkZXYgPSBicmlkZ2UtPmRldgo+ID4+Pj4+ Pj4gCWlmIChkZXYtPm1vZGVfY29uZmlnLmhlbHBlcl9wcml2YXRlLT5icmlkZ2VfaHBkX25vdGlm eSkKPiA+Pj4+Pj4+IAkJZGV2LT5tb2RlX2NvbmZpZy5oZWxwZXJfcHJpdmF0ZS0+YnJpZGdlX2hw ZF9ub3RpZnkoZGV2LCBicmlkZ2UsIHN0YXR1cykKPiA+Pj4+Pj4+IAo+ID4+Pj4+Pj4gTm8gcmVn aXN0ZXIgY2FsbGJhY2sgbmVlZGVkLCBubyBsb2NraW5nIG5lZWRlZCwgZXZlcnlvbmUgZ2V0cyBl eGFjdGx5IHRoZQo+ID4+Pj4+Pj4gaHBkIHRoZXkgd2FudC9uZWVkLgo+ID4+Pj4+PiAKPiA+Pj4+ Pj4gSSdsbCByZXBseSB0byB0aGlzIGZ1cnRoZXIgZG93biB0aGUgbWFpbCB0aHJlYWQsIHRvIGFk ZHJlc3MgYWRkaXRpb25hbAo+ID4+Pj4+PiBjb21tZW50cy4KPiA+Pj4+Pj4gCj4gPj4+Pj4+Pj4+ ICsJbXV0ZXhfdW5sb2NrKCZicmlkZ2UtPmhwZF9tdXRleCk7Cj4gPj4+Pj4+Pj4+ICt9Cj4gPj4+ Pj4+Pj4+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fYnJpZGdlX2hwZF9ub3RpZnkpOwo+ID4+Pj4+ Pj4+PiArCj4gPj4+Pj4+Pj4+ICAjaWZkZWYgQ09ORklHX09GCj4gPj4+Pj4+Pj4+ICAvKioKPiA+ Pj4+Pj4+Pj4gICAqIG9mX2RybV9maW5kX2JyaWRnZSAtIGZpbmQgdGhlIGJyaWRnZSBjb3JyZXNw b25kaW5nIHRvIHRoZSBkZXZpY2Ugbm9kZSBpbgo+ID4+Pj4+Pj4+PiBkaWZmIC0tZ2l0IGEvaW5j bHVkZS9kcm0vZHJtX2JyaWRnZS5oIGIvaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oCj4gPj4+Pj4+ Pj4+IGluZGV4IDA4ZGMxNWY5M2RlZC4uYjk0NDVhYTViMWVmIDEwMDY0NAo+ID4+Pj4+Pj4+PiAt LS0gYS9pbmNsdWRlL2RybS9kcm1fYnJpZGdlLmgKPiA+Pj4+Pj4+Pj4gKysrIGIvaW5jbHVkZS9k cm0vZHJtX2JyaWRnZS5oCj4gPj4+Pj4+Pj4+IEBAIC0yMyw4ICsyMyw5IEBACj4gPj4+Pj4+Pj4+ ICAjaWZuZGVmIF9fRFJNX0JSSURHRV9IX18KPiA+Pj4+Pj4+Pj4gICNkZWZpbmUgX19EUk1fQlJJ REdFX0hfXwo+ID4+Pj4+Pj4+PiAgCj4gPj4+Pj4+Pj4+IC0jaW5jbHVkZSA8bGludXgvbGlzdC5o Pgo+ID4+Pj4+Pj4+PiAgI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Cj4gPj4+Pj4+Pj4+ICsjaW5j bHVkZSA8bGludXgvbGlzdC5oPgo+ID4+Pj4+Pj4+PiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+ Cj4gPj4+Pj4+Pj4+ICAjaW5jbHVkZSA8ZHJtL2RybV9tb2RlX29iamVjdC5oPgo+ID4+Pj4+Pj4+ PiAgI2luY2x1ZGUgPGRybS9kcm1fbW9kZXMuaD4KPiA+Pj4+Pj4+Pj4gIAo+ID4+Pj4+Pj4+PiBA QCAtMzM0LDYgKzMzNSwxMTAgQEAgc3RydWN0IGRybV9icmlkZ2VfZnVuY3Mgewo+ID4+Pj4+Pj4+ PiAgCSAqLwo+ID4+Pj4+Pj4+PiAgCXZvaWQgKCphdG9taWNfcG9zdF9kaXNhYmxlKShzdHJ1Y3Qg ZHJtX2JyaWRnZSAqYnJpZGdlLAo+ID4+Pj4+Pj4+PiAgCQkJCSAgICBzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUpOwo+ID4+Pj4+Pj4+PiArCj4gPj4+Pj4+Pj4+ICsJLyoqCj4gPj4+Pj4+ Pj4+ICsJICogQGRldGVjdDoKPiA+Pj4+Pj4+Pj4gKwkgKgo+ID4+Pj4+Pj4+PiArCSAqIENoZWNr IGlmIGFueXRoaW5nIGlzIGF0dGFjaGVkIHRvIHRoZSBicmlkZ2Ugb3V0cHV0Lgo+ID4+Pj4+Pj4+ PiArCSAqCj4gPj4+Pj4+Pj4+ICsJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCwgaWYgbm90 IGltcGxlbWVudGVkIHRoZSBicmlkZ2Ugd2lsbCBiZQo+ID4+Pj4+Pj4+PiArCSAqIGNvbnNpZGVy ZWQgYXMgYWx3YXlzIGhhdmluZyBhIGNvbXBvbmVudCBhdHRhY2hlZCB0byBpdHMgb3V0cHV0Lgo+ ID4+Pj4+Pj4+PiArCSAqIEJyaWRnZXMgdGhhdCBpbXBsZW1lbnQgdGhpcyBjYWxsYmFjayBzaGFs bCBzZXQgdGhlCj4gPj4+Pj4+Pj4+ICsJICogRFJNX0JSSURHRV9PUF9ERVRFQ1QgZmxhZyBpbiB0 aGVpciAmZHJtX2JyaWRnZS0+b3BzLgo+ID4+Pj4+Pj4+PiArCSAqCj4gPj4+Pj4+Pj4+ICsJICog UkVUVVJOUzoKPiA+Pj4+Pj4+Pj4gKwkgKgo+ID4+Pj4+Pj4+PiArCSAqIGRybV9jb25uZWN0b3Jf c3RhdHVzIGluZGljYXRpbmcgdGhlIGJyaWRnZSBvdXRwdXQgc3RhdHVzLgo+ID4+Pj4+Pj4+PiAr CSAqLwo+ID4+Pj4+Pj4+PiArCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgKCpkZXRlY3QpKHN0 cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpOwo+ID4+Pj4+Pj4+PiArCj4gPj4+Pj4+Pj4+ICsJLyoq Cj4gPj4+Pj4+Pj4+ICsJICogQGdldF9tb2RlczoKPiA+Pj4+Pj4+Pj4gKwkgKgo+ID4+Pj4+Pj4+ PiArCSAqIEZpbGwgYWxsIG1vZGVzIGN1cnJlbnRseSB2YWxpZCBmb3IgdGhlIHNpbmsgaW50byB0 aGUgJmRybV9jb25uZWN0b3IKPiA+Pj4+Pj4+Pj4gKwkgKiB3aXRoIGRybV9tb2RlX3Byb2JlZF9h ZGQoKS4KPiA+Pj4+Pj4+Pj4gKwkgKgo+ID4+Pj4+Pj4+PiArCSAqIFRoZSBAZ2V0X21vZGVzIGNh bGxiYWNrIGlzIG1vc3RseSBpbnRlbmRlZCB0byBzdXBwb3J0IG5vbi1wcm9iYWJsZQo+ID4+Pj4+ Pj4+PiArCSAqIGRpc3BsYXlzIHN1Y2ggYXMgbWFueSBmaXhlZCBwYW5lbHMuIEJyaWRnZXMgdGhh dCBzdXBwb3J0IHJlYWRpbmcKPiA+Pj4+Pj4+Pj4gKwkgKiBFRElEIHNoYWxsIGxlYXZlIEBnZXRf bW9kZXMgdW5pbXBsZW1lbnRlZCBhbmQgaW1wbGVtZW50IHRoZQo+ID4+Pj4+Pj4+PiArCSAqICZk cm1fYnJpZGdlX2Z1bmNzLT5nZXRfZWRpZCBjYWxsYmFjayBpbnN0ZWFkLgo+ID4+Pj4+Pj4+PiAr CSAqCj4gPj4+Pj4+Pj4+ICsJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4gQnJpZGdlcyB0 aGF0IGltcGxlbWVudCBpdCBzaGFsbCBzZXQgdGhlCj4gPj4+Pj4+Pj4+ICsJICogRFJNX0JSSURH RV9PUF9NT0RFUyBmbGFnIGluIHRoZWlyICZkcm1fYnJpZGdlLT5vcHMuCj4gPj4+Pj4+Pj4+ICsJ ICoKPiA+Pj4+Pj4+Pj4gKwkgKiBSRVRVUk5TOgo+ID4+Pj4+Pj4+PiArCSAqCj4gPj4+Pj4+Pj4+ ICsJICogVGhlIG51bWJlciBvZiBtb2RlcyBhZGRlZCBieSBjYWxsaW5nIGRybV9tb2RlX3Byb2Jl ZF9hZGQoKS4KPiA+Pj4+Pj4+Pj4gKwkgKi8KPiA+Pj4+Pj4+Pj4gKwlpbnQgKCpnZXRfbW9kZXMp KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gPj4+Pj4+Pj4+ICsJCQkgc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3Rvcik7Cj4gPj4+Pj4+Pj4+ICsKPiA+Pj4+Pj4+Pj4gKwkvKioKPiA+ Pj4+Pj4+Pj4gKwkgKiBAZ2V0X2VkaWQ6Cj4gPj4+Pj4+Pj4+ICsJICoKPiA+Pj4+Pj4+Pj4gKwkg KiBSZWFkIGFuZCBwYXJzZSB0aGUgRURJRCBkYXRhIG9mIHRoZSBjb25uZWN0ZWQgZGlzcGxheS4K PiA+Pj4+Pj4+Pj4gKwkgKgo+ID4+Pj4+Pj4+PiArCSAqIFRoZSBAZ2V0X2VkaWQgY2FsbGJhY2sg aXMgdGhlIHByZWZlcnJlZCB3YXkgb2YgcmVwb3J0aW5nIG1vZGUKPiA+Pj4+Pj4+Pj4gKwkgKiBp bmZvcm1hdGlvbiBmb3IgYSBkaXNwbGF5IGNvbm5lY3RlZCB0byB0aGUgYnJpZGdlIG91dHB1dC4g QnJpZGdlcwo+ID4+Pj4+Pj4+PiArCSAqIHRoYXQgc3VwcG9ydCByZWFkaW5kIEVESUQgc2hhbGwg aW1wbGVtZW50IHRoaXMgY2FsbGJhY2sgYW5kIGxlYXZlCj4gPj4+Pj4+Pj4+ICsJICogdGhlIEBn ZXRfbW9kZXMgY2FsbGJhY2sgdW5pbXBsZW1lbnRlZC4KPiA+Pj4+Pj4+Pj4gKwkgKgo+ID4+Pj4+ Pj4+PiArCSAqIFRoZSBjYWxsZXIgb2YgdGhpcyBvcGVyYXRpb24gc2hhbGwgZmlyc3QgdmVyaWZ5 IHRoZSBvdXRwdXQKPiA+Pj4+Pj4+Pj4gKwkgKiBjb25uZWN0aW9uIHN0YXR1cyBhbmQgcmVmcmFp biBmcm9tIHJlYWRpbmcgRURJRCBmcm9tIGEgZGlzY29ubmVjdGVkCj4gPj4+Pj4+Pj4+ICsJICog b3V0cHV0Lgo+ID4+Pj4+Pj4+PiArCSAqCj4gPj4+Pj4+Pj4+ICsJICogVGhpcyBjYWxsYmFjayBp cyBvcHRpb25hbC4gQnJpZGdlcyB0aGF0IGltcGxlbWVudCBpdCBzaGFsbCBzZXQgdGhlCj4gPj4+ Pj4+Pj4+ICsJICogRFJNX0JSSURHRV9PUF9FRElEIGZsYWcgaW4gdGhlaXIgJmRybV9icmlkZ2Ut Pm9wcy4KPiA+Pj4+Pj4+Pj4gKwkgKgo+ID4+Pj4+Pj4+PiArCSAqIFJFVFVSTlM6Cj4gPj4+Pj4+ Pj4+ICsJICoKPiA+Pj4+Pj4+Pj4gKwkgKiBBbiBlZGlkIHN0cnVjdHVyZSBuZXdseSBhbGxvY2F0 ZWQgd2l0aCBrbWFsbG9jKCkgKG9yIHNpbWlsYXIpIG9uCj4gPj4+Pj4+Pj4+ICsJICogc3VjY2Vz cywgb3IgTlVMTCBvdGhlcndpc2UuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVp bmcKPiA+Pj4+Pj4+Pj4gKwkgKiB0aGUgcmV0dXJuZWQgZWRpZCBzdHJ1Y3R1cmUgd2l0aCBrZnJl ZSgpLgo+ID4+Pj4+Pj4+PiArCSAqLwo+ID4+Pj4+Pj4+PiArCXN0cnVjdCBlZGlkICooKmdldF9l ZGlkKShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ID4+Pj4+Pj4+PiArCQkJCSBzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKPiA+Pj4+Pj4+PiAKPiA+Pj4+Pj4+PiBJdCBvdmVy bGFwcyB3aXRoIGdldF9tb2RlcywgSSBndWVzcyBwcmVzZW5jZSBvZiBvbmUgb3BzIHNob3VsZCBk aXNhbGxvdwo+ID4+Pj4+Pj4+IHByZXNlbmNlIG9mIGFub3RoZXIgb25lPwo+ID4+Pj4+Pj4+IAo+ ID4+Pj4+Pj4+IEkgYW0gbm90IHJlYWxseSBjb252aW5jZWQgd2UgbmVlZCB0aGlzIG9wIGF0IGFs bCwgY2Fubm90IHdlIGp1c3QgYXNzaWduCj4gPj4+Pj4+Pj4gc29tZSBoZWxwZXIgZnVuY3Rpb24g dG8gLmdldF9tb2RlcyBjYiwgd2hpY2ggd2lsbCBkbyB0aGUgc2FtZT8KPiA+Pj4+Pj4+IAo+ID4+ Pj4+Pj4gUGxhbiBCKTogZGl0Y2ggLT5nZXRfZWRpZCwgcmVxdWlyZSB0aGF0IHRoZSBkcml2ZXIg aGFzIC0+Z2V0X21vZGVzIGluIHRoYXQKPiA+Pj4+Pj4+IGNhc2UsIGFuZCByZXF1aXJlIHRoYXQg aWYgaXQgaGFzIGFuIGVkaWQgaXQgbXVzdCBmaWxsIG91dCBjb25uZWN0b3ItPmluZm8KPiA+Pj4+ Pj4+IGFuZCBjb25uZWN0b3ItPmVkaWQgY29ycmVjdGx5Lgo+ID4+Pj4+PiAKPiA+Pj4+Pj4gSSB0 aGluayB0aGF0J3MgZG9hYmxlLCBJJ2xsIGhhdmUgYSBsb29rLgo+ID4+Pj4+IAo+ID4+Pj4+IFNv IEkgaGFkIGEgbG9vaywgYW5kIHdoaWxlIHRoaXMgaXMgZG9hYmxlLCBpdCB3b3VsZCBlc3NlbnRp YWxseSBtZWFuCj4gPj4+Pj4gdGhhdCBhbGwgYnJpZGdlcyB0aGF0IHJldHJpZXZlIG1vZGVzIGZy b20gRURJRCB3b3VsZCBoYXZlIHRvIHJvbGwgb3V0Cj4gPj4+Pj4gdGhlaXIgb3duIHZlcnNpb24g b2YgdGhlIGZvbGxvd2luZyBjb2RlOgo+ID4+Pj4+IAo+ID4+Pj4+IHN0YXRpYyBpbnQgZHJtX2Jy aWRnZV9jb25uZWN0b3JfZ2V0X21vZGVzX2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKPiA+Pj4+PiAJCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ID4+ Pj4+IHsKPiA+Pj4+PiAJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXM7Cj4gPj4+Pj4g CXN0cnVjdCBlZGlkICplZGlkOwo+ID4+Pj4+IAlpbnQgbjsKPiA+Pj4+PiAKPiA+Pj4+PiAJc3Rh dHVzID0gZHJtX2JyaWRnZV9jb25uZWN0b3JfZGV0ZWN0KGNvbm5lY3RvciwgZmFsc2UpOwo+ID4+ Pj4+IAlpZiAoc3RhdHVzICE9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKQo+ID4+Pj4+IAkJ Z290byBub19lZGlkOwo+ID4+Pj4+IAo+ID4+Pj4+IAllZGlkID0gYnJpZGdlLT5mdW5jcy0+Z2V0 X2VkaWQoYnJpZGdlLCBjb25uZWN0b3IpOwo+ID4+Pj4+IAlpZiAoIWVkaWQgfHwgIWRybV9lZGlk X2lzX3ZhbGlkKGVkaWQpKSB7Cj4gPj4+Pj4gCQlrZnJlZShlZGlkKTsKPiA+Pj4+PiAJCWdvdG8g bm9fZWRpZDsKPiA+Pj4+PiAJfQo+ID4+Pj4+IAo+ID4+Pj4+IAlkcm1fY29ubmVjdG9yX3VwZGF0 ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgZWRpZCk7Cj4gPj4+Pj4gCW4gPSBkcm1fYWRkX2Vk aWRfbW9kZXMoY29ubmVjdG9yLCBlZGlkKTsKPiA+Pj4+PiAKPiA+Pj4+PiAJa2ZyZWUoZWRpZCk7 Cj4gPj4+Pj4gCXJldHVybiBuOwo+ID4+Pj4+IAo+ID4+Pj4+IG5vX2VkaWQ6Cj4gPj4+Pj4gCWRy bV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBOVUxMKTsKPiA+Pj4+ PiAJcmV0dXJuIDA7Cj4gPj4+Pj4gfQo+ID4+Pj4+IAo+ID4+Pj4+IElzIHRoaXMgZGVzaXJlZCA/ Cj4gPj4+PiAKPiA+Pj4+IFdlIHN0b3JlIHRoZSBlZGlkLCBhbmQgd2Ugc3RvcmUgYSBsb3Qgb2Yg ZGVjb2RlZCBpbmZvcm1hdGlvbiBpbgo+ID4+Pj4gZHJtX2Nvbm5lY3Rvci0+ZGlzcGxheV9pbmZv LiBDYW4ndCB0aGV5IGp1c3QgbG9vayB0aGVyZT8gUmUtZmV0Y2hpbmcgdGhlCj4gPj4+PiBlZGlk IGRlZmluaXRlbHkgc291bmRzIGxpa2UgdGhlIHdyb25nIHRoaW5nIHRvIGRvLgo+ID4+Pj4gCj4g Pj4+PiBXZSBtaWdodCBydW4gaW50byBzb21lIG9yZGVyaW5nIGlzc3VlIGhlcmUgSSBndWVzcyB3 aXRoIGhvdHBsdWdzIGFuZCB3aG8ncwo+ID4+Pj4gZmV0Y2hpbmcgdGhlIGVkaWQgYW5kIGV2ZXJ5 dGhpbmcgbGlrZSB0aGF0Lgo+ID4+PiAKPiA+Pj4gVGhhdCdzIGV4YWN0bHkgd2hhdCBJIHdhcyBh Ym91dCB0byBhbnN3ZXIgYWZ0ZXIgcmVhZGluZyB5b3VyIGZpcnN0Cj4gPj4+IHBhcmFncmFwaCA6 LSkgSSBiZWxpZXZlIGNhY2hpbmcgRURJRCBpcyBhIGdvb2QgaWRlYSwgYnV0IG15IGZhbWlsaWFy aXR5Cj4gPj4+IHdpdGggaG90cGx1Zy1yZWxhdGVkIGlzc3VlcyBpcyBsaW1pdGVkIHRvIGEgaGFu ZGZ1bCBvZiBzeXN0ZW1zLCBhbmQgSSdtCj4gPj4+IHN1cmUgSSdtIG1pc3Npbmcgc29tZSBjb21t b24gcHJvYmxlbXMuIElmIHlvdSBjYW4gdGVsbCBtZSBob3cgeW91IHRoaW5rCj4gPj4+IHRoaXMg c2hvdWxkIGJlIGRvbmUsIEkgY2FuIGdpdmUgaXQgYSB0cnkuCj4gPj4gCj4gPj4gSSB0aGluayBh bGwgeW91IG5lZWQgdG8gZG8gaXMgbWFrZSBzdXJlIHRoYXQgd2hlbiBoYW5kbGluZyBhIGhwZCwg dGhlIGVkaWQKPiA+PiBpcyBmZXRjaGVkIGZpcnN0LiBCZWZvcmUgb3RoZXIgcGFydHMgb2YgdGhl IGJyaWRnZSB0cnkgdG8gcmVjb25maWd1cmUKPiA+PiB0aGVtc2VsdmVzIC4uLgo+ID4+IAo+ID4+ Pj4gQWxzbyBtYXliZSBJJ20gbWlzc2luZyB0aGUgcG9pbnQgaGVyZSwgYW5kIHRoaW5raW5nIHRv byBtdWNoIG9mCj4gPj4+PiAtPmdldF9tb2RlcyBvbiB0aGUgY29ubmVjdG9yLiBCdXQgdGhlbiBJ J20gbm90IGNsZWFyIG9uIHdoeSB0aGUgYnJpZGdlCj4gPj4+PiBuZWVkcyB0aGUgY29ubmVjdG9y LCBhbmQgd2h5IGl0IGluc3RlYWQgY2FuJ3QganVzdCByZXR1cm4gdGhlIGVkaWQgaXQgY2FuCj4g Pj4+PiByZWFkIGFuZCBsZXQgdGhlIGNhbGxlci9jb3JlIGZpZ3VyZSBvdXQgZXZlcnl0aGluZyBl bHNlPwo+ID4+PiAKPiA+Pj4gVGhhdCdzIGV4YWN0bHkgd2hhdCB0aGUgLmdldF9lZGlkKCkgb3Bl cmF0aW9uIHRoYXQgeW91IGFza2VkIG1lIHRvCj4gPj4+IHJlbW92ZSBkaWQuLi4gOi0pIFlvdSBk aWRuJ3QgbGlrZSB0aGUgZmFjdCB0aGF0IGl0IGR1cGxpY2F0ZWQgdGhlCj4gPj4+IC5nZXRfbW9k ZXMoKSBsb2dpYy4gU2hvdWxkIEkgYWRkIGl0IGJhY2ssIGFuZCBjbGVhcmx5IGRvY3VtZW50Cj4g Pj4+IC5nZXRfbW9kZXMoKSBhcyBhIGZhbGxiYWNrIHVzZWQgb25seSB3aGVuIHRoZSBjb25uZWN0 b3IgZG9lc24ndCB1c2UgRURJRAo+ID4+PiA/Cj4gPj4gCj4gPj4gSSBndWVzcyBJJ20gbWFraW5n IGEgYml0IGEgZm9vbCBvZiBteXNlbGYgaGVyZS4gV2hhdCBJIG1lYW50IGlzIHRoYXQgaWYgd2UK PiA+PiBkbyB3YW50IHRvIGtlZXAgLT5nZXRfZWRpZCwgdGhlbiB3aHkgZG8geW91IG5lZWQgdG8g cGFzcyB0aGUgY29ubmVjdG9yPwo+ID4+IEp1c3QgcmV0dXJuIHRoZSBlZGlkIGJsb2IsIGFuZCBs ZXQgdGhlIGNhbGxlciBwYXJzZSBpdCwgYW5kIHN0dWZmIGFsbAo+ID4+IHJlbGV2YW50IGRhdGEg aW50byBkcm1fY29ubmVjdG9yLiBKdXN0IHRoaW5raW5nIGFsb25nIHRoZSBsaW5lcyBvZiB5b3Vy Cj4gPj4gZ29hbCBvZiBtYWtpbmcgdGhlIGJyaWRnZSBkcml2ZXJzIGFzIGR1bWIgYXMgcG9zc2li bGUuCj4gPj4gCj4gPj4gU2FtZSB0aGluZyBmb3IgLT5nZXRfbW9kZXMgd291bGQgYmUgbmVhdCB0 b28sIGJ1dCB3ZSBkb24ndCBoYXZlIGEgbmljZQo+ID4+IGRhdGFzdHJ1Y3R1cmUgZm9yIHRoaXMu IFdlJ2QgbmVlZCB0byBwYXNzIGJvdGggYSBsaXN0X2hlYWQgYW5kIGEgcG9pbnRlcgo+ID4+IHRv IHRoZSBkcm1fZGlzcGxheV9pbmZvIEkgdGhpbmsuCj4gPj4gCj4gPj4gVGhhdCB3b3VsZCBkZWNv dXBsZSBicmlkZ2VzIGV2ZW4gbW9yZSBmcm9tIGNvbm5lY3Rvciwgd2hpY2ggSSB0aGluayBpcwo+ ID4+IHNvbWV3aGVyZSBvbiB5b3VyIGdvYWwgbGlzdCAuLi4KPiA+IAo+ID4gU28gSSBoYWQgYSBs b29rIGF0IHRoYXQuIFdlIHdvdWxkIG5lZWQgdG8gcmVtb3ZlIHRoZSBjb25uZWN0b3IgYXJndW1l bnQKPiA+IGZyb20gZHJtX2RvX2dldF9lZGlkKCkuIFRoZSBjb25uZWN0b3IgY3VycmVudGx5IHN0 b3JlcyBhIGZldyBmaWVsZHMKPiA+IHJlbGF0ZWQgdG8gRURJRCBwYXJzaW5nOgo+ID4gCj4gPiAg ICAgICAgIC8qKgo+ID4gICAgICAgICAgKiBAbnVsbF9lZGlkX2NvdW50ZXI6IHRyYWNrIHNpbmtz IHRoYXQgZ2l2ZSB1cyBhbGwgemVyb3MgZm9yIHRoZSBFRElELgo+ID4gICAgICAgICAgKiBOZWVk ZWQgdG8gd29ya2Fyb3VuZCBzb21lIEhXIGJ1Z3Mgd2hlcmUgd2UgZ2V0IGFsbCAwcwo+ID4gICAg ICAgICAgKi8KPiA+ICAgICAgICAgaW50IG51bGxfZWRpZF9jb3VudGVyOwo+ID4gCj4gPiAgICAg ICAgIC8qKiBAYmFkX2VkaWRfY291bnRlcjogdHJhY2sgc2lua3MgdGhhdCBnaXZlIHVzIGFuIEVE SUQgd2l0aCBpbnZhbGlkIGNoZWNrc3VtICovCj4gPiAgICAgICAgIHVuc2lnbmVkIGJhZF9lZGlk X2NvdW50ZXI7Cj4gPiAKPiA+ICAgICAgICAgLyoqCj4gPiAgICAgICAgICAqIEBlZGlkX2NvcnJ1 cHQ6IEluZGljYXRlcyB3aGV0aGVyIHRoZSBsYXN0IHJlYWQgRURJRCB3YXMgY29ycnVwdC4gVXNl ZAo+ID4gICAgICAgICAgKiBpbiBEaXNwbGF5cG9ydCBjb21wbGlhbmNlIHRlc3RpbmcgLSBEaXNw bGF5cG9ydCBMaW5rIENUUyBDb3JlIDEuMgo+ID4gICAgICAgICAgKiByZXYxLjEgNC4yLjIuNgo+ ID4gICAgICAgICAgKi8KPiA+ICAgICAgICAgYm9vbCBlZGlkX2NvcnJ1cHQ7Cj4gPiAKPiA+IFdl IHdvdWxkIG5lZWQgdG8gZGVjb3VwbGUgdGhhdCBmcm9tIGRybV9jb25uZWN0b3IuIE9uZSBvcHRp b24gd291bGQgYmUKPiA+IHRvIGNyZWF0ZSBhIG5ldyBkcm1fZWRpZCBzdHJ1Y3R1cmUgdGhhdCB3 b3VsZCBzdG9yZSB0aG9zZSB0aHJlZSBmaWVsZHMsCj4gPiBhcyB3ZWxsIGFzIGEgc3RydWN0IGVk aWQsIGFuZCByZXR1cm4gaXQgZnJvbSBkcm1fZG9fZ2V0X2VkaWQoKSBpbnN0ZWFkCj4gPiBvZiB0 aGUgcmF3IHN0cnVjdCBlZGlkLiBXb3VsZCB5b3UgcHJlZmVyIGEgZGlmZmVyZW50IHNvbHV0aW9u ID8gRG8geW91Cj4gPiB0aGluayB0aGF0J3MgYSBwcmVyZXF1aXNpdGUgdG8gZm9yIHRoaXMgcGF0 Y2ggPwo+IAo+IFRoZSBtb3JlIEkgbG9vayBhdCBFRElEIHBhcnNpbmcsIHRoZSBtb3JlIGl0IGZl ZWxzIHRoYXQgd2Ugc2hvdWxkCj4gcmVkZXNpZ24gdGhlIHdob2xlIEhQRCBhbmQgRURJRCBnZXQg aGFuZGxpbmcsIGFuZCB0aGUgbW9yZSBpdCBiZWNvbWVzCj4gb3V0IG9mIHNjb3BlIGZvciB0aGlz IHBhdGNoIHNlcmllcyA6LVMgRURJRCByZXRyaWV2YWwgYW5kIGV4dHJhY3Rpb24gb2YKPiBpbmZv cm1hdGlvbiBmcm9tIEVESUQgaXMgaW50ZXJ0d2luZWQsIGZvciBpbnN0YW5jZSBkcm1fZ2V0X2Vk aWQoKQo+IHBlcmZvcm1zIHRoZSBmb2xsb3dpbmc6Cj4gCj4gc3RydWN0IGVkaWQgKmRybV9nZXRf ZWRpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+IAkJCSAgc3RydWN0IGkyY19h ZGFwdGVyICphZGFwdGVyKQo+IHsKPiAJc3RydWN0IGVkaWQgKmVkaWQ7Cj4gCj4gCWlmIChjb25u ZWN0b3ItPmZvcmNlID09IERSTV9GT1JDRV9PRkYpCj4gCQlyZXR1cm4gTlVMTDsKPiAKPiAJaWYg KGNvbm5lY3Rvci0+Zm9yY2UgPT0gRFJNX0ZPUkNFX1VOU1BFQ0lGSUVEICYmICFkcm1fcHJvYmVf ZGRjKGFkYXB0ZXIpKQo+IAkJcmV0dXJuIE5VTEw7Cj4gCj4gCWVkaWQgPSBkcm1fZG9fZ2V0X2Vk aWQoY29ubmVjdG9yLCBkcm1fZG9fcHJvYmVfZGRjX2VkaWQsIGFkYXB0ZXIpOwo+IAlpZiAoZWRp ZCkKPiAJCWRybV9nZXRfZGlzcGxheWlkKGNvbm5lY3RvciwgZWRpZCk7Cj4gCXJldHVybiBlZGlk Owo+IH0KPiAKPiBJIGRvbid0IHRoaW5rIHRoZSBkcm1fZ2V0X2Rpc3BsYXlpZCgpIGNhbGwgYmVs b25ncyB0aGVyZS4gTW92aW5nIGl0IHRvCj4gdGhlIG51bWVyb3VzIGNhbGxlcnMgb2YgZHJtX2dl dF9lZGlkKCkgZG9lc24ndCBzZWVtIGEgZ29vZCBpZGVhLiBJZGVhbGx5Cj4gaXQgc2hvdWxkIGJl IGRvbmUgYXQgdGhlIHNhbWUgdGltZSBhcyBwb3B1bGF0aW5nIHRoZSBtb2RlcyBmcm9tIEVESUQs Cj4gYnV0IEknbSBwcmV0dHkgc3VyZSB0aGF0IHdvdWxkIGJyZWFrIHRoaW5ncywgd2l0aCBub3Qg YWxsIEVESUQgcmV0cmlldmFsCj4gcmVzdWx0aW5nIGluIG1vZGVzIHVwZGF0ZXMuCj4gCj4gQSBm ZXcgZHJpdmVycyBjYWxsIGRybV9kb19nZXRfZWRpZCgpIGRpcmVjdGx5LCBpbiBvcmRlciB0byBw cm92aWRlIGEKPiBjdXN0b20gRURJRCBibG9jayByZWFkIGZ1bmN0aW9uLCBhbmQgdGhleSBza2lw IGNvbm5lY3Rvci0+Zm9yY2UgaGFuZGxpbmcKPiBhbmQgZHJtX2dldF9kaXNwbGF5aWQoKSBhcyBh IHJlc3VsdC4gSW4gbW9zdCBjYXNlIEkgYXNzdW1lIHRoYXQncyBhIGJ1Zwo+IHRoYXQganVzdCB3 ZW50IHVubm90aWNlZC4KPiAKPiBEZWNvdXBsaW5nIEVESUQgcmVhZCBmcm9tIGRybV9jb25uZWN0 b3IgZm9yIGJyaWRnZXMgaW4gYSBwcm9wZXIgd2F5IHNlZW0KPiBsaWtlIGEgaHVnZSBwaWVjZSBv ZiB3b3JrIHRvIG1lLCBhbmQgSSByZWFsbHkgY2FuJ3QgbWFrZSBpdCBhCj4gcHJlcmVxdWlzaXRl IGZvciB0aGlzIHBhdGNoLgoKSSBzdGlsbCBnYXZlIGl0IGEgdHJ5LCBhbmQgaXQgcmVzdWx0ZWQg aW4KCglnaXQ6Ly9saW51eHR2Lm9yZy9waW5jaGFydGwvbWVkaWEuZ2l0IG9tYXBkcm0vZWRpZAoK Q291bGQgeW91IGhhdmUgYSBsb29rIGF0IHRoZSBsYXN0IGZpdmUgcGF0Y2hlcyBpbiB0aGUgYnJh bmNoID8KCmRybS9lZGlkOiBSZW9yZ2FuaXNlIHRoZSBEaXNwbGF5SUQgcGFyc2luZyBjb2RlCmRy bS9lZGlkOiBNb3ZlIGZ1bmN0aW9ucyB0byBhdm9pZCBmb3J3YXJkIGRlY2xhcmF0aW9uCmRybS9l ZGlkOiBNb3ZlIERpc3BsYXlJRCB0aWxlIHBhcnNpbmcgdG8gZHJtX2Nvbm5lY3Rvci5jCmRybS9l ZGlkOiBIb25vdXIgY29ubmVjdG9yLT5mb3JjZSBpbiBkcm1fZG9fZ2V0X2VkaWQoKQpbV0lQXSBk cm0vZWRpZDogRGVjb3VwbGUgRURJRCByZXRyaWV2YWwgZnJvbSBjb25uZWN0b3IKCldoaWxlIHRo ZSBmaXJzdCBmb3VyIHBhdGNoZXMgcHJvYmFibHkgbWFrZSBzZW5zZSBhbmQgY291bGQgYmUgbWVy Z2VkCmluZGVwZW5kZW50bHkgb2YgdGhlIGxhc3Qgb25lLCBpdCdzIHJlYWxseSB0aGUgZmlmdGgg cGF0Y2ggdGhhdCBtYWtlcwpkZWNvdXBsaW5nIG9mIC5nZXRfZWRpZCgpIGZyb20gZHJtX2Nvbm5l Y3RvciBwb3NzaWJsZS4gQW5kIGl0J3MgdGhlCnBhdGNoIEknbSB0aGUgbGVhc3QgaGFwcHkgd2l0 aCBpbiB0aGlzIHdob2xlIHNlcmllcyA6LVMgQXMgd3JpdHRlbiBpbgppdCdzIGNvbW1pdCBtZXNz YWdlLCBpcyBpdCB3b3J0aCBpdCA/Cgo+ID4+Pj4+Pj4gQnR3IGlmIGEgaHBkIGhhcHBlbnMsIHdo bydzIHJlc3BvbmlibGUgZm9yIG1ha2luZyBzdXJlIHRoZSBlZGlkL21vZGUgbGlzdAo+ID4+Pj4+ Pj4gaW4gdGhlIGNvbm5lY3RvciBpcyB1cC10by1kYXRlPyBXaXRoIHlvdXIgY3VycmVudCBjYWxs YmFjayBkZXNpZ24gdGhhdCdzCj4gPj4+Pj4+PiB1cCB0byB0aGUgY2FsbGJhY2ssIHdoaWNoIGRv ZXNuJ3QgZmVlbCBncmVhdC4gTWF5YmUgIGRybV9icmlkZ2VfaHBkX25vdGlmeQo+ID4+Pj4+Pj4g c2hvdWxkIGd1YXJhbnRlZSB0aGF0IGl0J2xsIGZpcnN0IHdhbGsgdGhlIGNvbm5lY3RvcnMgdG8g dXBkYXRlIHN0YXR1cyBhbmQKPiA+Pj4+Pj4+IGVkaWQvbW9kZSBsaXN0IGZvciB0aGUgZmluYWwg ZHJtX2Nvbm5lY3Rvci4gQW5kIHRoZW4gaW5zdGVhZCBvZiBqdXN0Cj4gPj4+Pj4+PiBwYXNzaW5n IHRoZSBzaW1wbGUgInN0YXR1cyIsIGl0J2xsIHBhc3MgdGhlIGNvbm5lY3Rvciwgd2l0aCBldmVy eXRoaW5nCj4gPj4+Pj4+PiBjb3JyZWN0bHkgdXBkYXRlZC4KPiA+Pj4+Pj4+IAo+ID4+Pj4+Pj4g T3RoZXJ3aXNlIGV2ZXJ5b25lIGludGVyZXN0ZWQgaW4gdGhhdCBocGQgc2lnbmFsIHdpbGwgZ28g YW5kIHJlLWZldGNoIHRoZQo+ID4+Pj4+Pj4gZWRpZCwgd2hpY2ggaXMgbm90IHNvIGF3ZXNvbWUg Oi0pCj4gPj4+Pj4+IAo+ID4+Pj4+PiBXaXRoIHRoZSBjdXJyZW50IGRlc2lnbiB0aGVyZSdzIGEg c2luZ2xlIGxpc3RlbmVyLCBzbyBpdCdzIG5vdCBhIGJpZwo+ID4+Pj4+PiBkZWFsIDotKSBGdXJ0 aGVybW9yZSwgdGhlIGxpc3RlbmVyIGlzIHRoZSBoZWxwZXIgdGhhdCBjcmVhdGVzIGEKPiA+Pj4+ Pj4gY29ubmVjdG9yIG9uIHRvcCBvZiBhIGNoYWluIG9mIGJyaWRnZXMsIHNvIGl0J3MgYSBwcmV0 dHkgZ29vZCBwbGFjZSB0bwo+ID4+Pj4+PiBoYW5kbGUgdGhpcy4gU2VlIHRoZSBjYWxsIHRvIGRy bV9rbXNfaGVscGVyX2hvdHBsdWdfZXZlbnQoKSBpbgo+ID4+Pj4+PiBkcm1fYnJpZGdlX2Nvbm5l Y3Rvcl9ocGRfY2IoKS4KPiA+Pj4+Pj4gCj4gPj4+Pj4+IEknbSBhbGwgZm9yIHJld29ya2luZyBI UEQgYW5kIG1vZGUgZmV0Y2hpbmcsIGJ1dCBJIHRoaW5rIGl0J3MgYSBiaXQgdG9vCj4gPj4+Pj4+ IGJpZyBvZiBhIHJlcXVpcmVtZW50IGFzIGEgcHJlcmVxdWlzaXRlIGZvciB0aGlzIHNlcmllcyAo b3IgYXMgcGFydCBvZgo+ID4+Pj4+PiB0aGlzIHNlcmllcykuIFdlIGhhdmUgaGFyZHdhcmUgdGhh dCBjYW4gcmVwb3J0IEhQRCB3aXRoIHZhcmlvdXMgbGV2ZWwgb2YKPiA+Pj4+Pj4gZGV0YWlscyAo ZnJvbSAic29tZXRoaW5nIGhhcHBlbmVkIG9uIGEgY29ubmVjdG9yIiB0byAidGhpcyBwYXJ0aWN1 bGFyCj4gPj4+Pj4+IGV2ZW50IGhhcHBlbmVkIG9uIHRoaXMgcGFydGljdWxhciBjb25uZWN0b3Ii KSwgYW5kIHdlIGNoYW5uZWwgdGhhdAo+ID4+Pj4+PiB0aHJvdWdoIGhlbHBlcnMgc3VjaCBhcyBk cm1fa21zX2hlbHBlcl9ob3RwbHVnX2V2ZW50KCkgdGhhdCBsb3NlIHRoZQo+ID4+Pj4+PiBkZXRh aWxzIGFuZCBnbyB0aHJvdWdoIGEgaGVhdnkgbWVjaGFuaXNtIHRvIHJlZmV0Y2ggZXZlcnl0aGlu Zy4gSQo+ID4+Pj4+PiB1bmRlcnN0YW5kIHRoaXMgaXMgbmVlZGVkIGluIG1hbnkgY2FzZXMsIGJ1 dCBJIHRoaW5rIHRoZXJlJ3Mgcm9vbSBmb3IKPiA+Pj4+Pj4gaW1wcm92ZW1lbnQuIFRoaXMgc2Vy aWVzLCBpbiBteSBvcGluaW9uLCBkb2Vzbid0IGdvIGluIHRoZSB3cm9uZwo+ID4+Pj4+PiBkaXJl Y3Rpb24gaW4gdGhhdCByZWdhcmQsIGFzIGl0IGV2ZW50dWFsbHkgY2FsbHMKPiA+Pj4+Pj4gZHJt X2ttc19oZWxwZXJfaG90cGx1Z19ldmVudCgpLCBzbyBJIHRoaW5rIGltcHJvdmVtZW50cyB3b3Vs ZCBtYWtlIHNlbnNlCj4gPj4+Pj4+IG9uIHRvcCBvZiBpdC4gSSdtIGV2ZW4gd2lsbGluZyB0byB3 b3JrIG9uIHRoaXMsIHByb3ZpZGVkIEkgZ2V0IGZlZWRiYWNrCj4gPj4+Pj4+IG9uIHdoYXQgaXMg ZGVzaXJlZC4KPiA+Pj4+Pj4gCj4gPj4+Pj4+Pj4+ICsJLyoqCj4gPj4+Pj4+Pj4+ICsJICogQGxv c3RfaG90cGx1ZzoKPiA+Pj4+Pj4+Pj4gKwkgKgo+ID4+Pj4+Pj4+PiArCSAqIE5vdGlmeSB0aGUg YnJpZGdlIG9mIGRpc3BsYXkgZGlzY29ubmVjdGlvbi4KPiA+Pj4+Pj4+Pj4gKwkgKgo+ID4+Pj4+ Pj4+PiArCSAqIFRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwsIGl0IG1heSBiZSBpbXBsZW1lbnRl ZCBieSBicmlkZ2VzIHRoYXQKPiA+Pj4+Pj4+Pj4gKwkgKiBuZWVkIHRvIGJlIG5vdGlmaWVkIG9m IGRpc3BsYXkgZGlzY29ubmVjdGlvbiBmb3IgaW50ZXJuYWwgcmVhc29ucy4KPiA+Pj4+Pj4+Pj4g KwkgKiBPbmUgdXNlIGNhc2UgaXMgdG8gcmVzZXQgdGhlIGludGVybmFsIHN0YXRlIG9mIENFQyBj b250cm9sbGVycyBmb3IKPiA+Pj4+Pj4+Pj4gKwkgKiBIRE1JIGJyaWRnZXMuCj4gPj4+Pj4+Pj4+ ICsJICovCj4gPj4+Pj4+Pj4+ICsJdm9pZCAoKmxvc3RfaG90cGx1Zykoc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSk7Cj4gPj4+Pj4+Pj4+ICsKPiA+Pj4+Pj4+Pj4gKwkvKioKPiA+Pj4+Pj4+Pj4g KwkgKiBAaHBkX2VuYWJsZToKPiA+Pj4+Pj4+Pj4gKwkgKgo+ID4+Pj4+Pj4+PiArCSAqIEVuYWJs ZSBob3QgcGx1ZyBkZXRlY3Rpb24uIEZyb20gbm93IG9uIHRoZSBicmlkZ2Ugc2hhbGwgY2FsbAo+ ID4+Pj4+Pj4+PiArCSAqIGRybV9icmlkZ2VfaHBkX25vdGlmeSgpIGVhY2ggdGltZSBhIGNoYW5n ZSBpcyBkZXRlY3RlZCBpbiB0aGUgb3V0cHV0Cj4gPj4+Pj4+Pj4+ICsJICogY29ubmVjdGlvbiBz dGF0dXMsIHVudGlsIGhvdCBwbHVnIGRldGVjdGlvbiBnZXRzIGRpc2FibGVkIHdpdGgKPiA+Pj4+ Pj4+Pj4gKwkgKiBAaHBkX2Rpc2FibGUuCj4gPj4+Pj4+Pj4+ICsJICoKPiA+Pj4+Pj4+Pj4gKwkg KiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsIGFuZCBzaGFsbCBvbmx5IGJlIGltcGxlbWVudGVk IGJ5IGJyaWRnZXMKPiA+Pj4+Pj4+Pj4gKwkgKiB0aGF0IHN1cHBvcnQgaG90LXBsdWcgbm90aWZp Y2F0aW9uIHdpdGhvdXQgcG9sbGluZy4gQnJpZGdlcyB0aGF0Cj4gPj4+Pj4+Pj4+ICsJICogaW1w bGVtZW50IGl0IHNoYWxsIGFsc28gaW1wbGVtZW50IHRoZSBAaHBkX2Rpc2FibGUgY2FsbGJhY2sg YW5kIHNldAo+ID4+Pj4+Pj4+PiArCSAqIHRoZSBEUk1fQlJJREdFX09QX0hQRCBmbGFnIGluIHRo ZWlyICZkcm1fYnJpZGdlLT5vcHMuCj4gPj4+Pj4+Pj4+ICsJICovCj4gPj4+Pj4+Pj4+ICsJdm9p ZCAoKmhwZF9lbmFibGUpKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpOwo+ID4+Pj4+Pj4+PiAr Cj4gPj4+Pj4+Pj4+ICsJLyoqCj4gPj4+Pj4+Pj4+ICsJICogQGhwZF9kaXNhYmxlOgo+ID4+Pj4+ Pj4+PiArCSAqCj4gPj4+Pj4+Pj4+ICsJICogRGlzYWJsZSBob3QgcGx1ZyBkZXRlY3Rpb24uIE9u Y2UgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBicmlkZ2UKPiA+Pj4+Pj4+Pj4gKwkgKiBzaGFs bCBub3QgY2FsbCBkcm1fYnJpZGdlX2hwZF9ub3RpZnkoKSB3aGVuIGEgY2hhbmdlIGluIHRoZSBv dXRwdXQKPiA+Pj4+Pj4+Pj4gKwkgKiBjb25uZWN0aW9uIHN0YXR1cyBvY2N1cnMuCj4gPj4+Pj4+ Pj4+ICsJICoKPiA+Pj4+Pj4+Pj4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsIGFuZCBz aGFsbCBvbmx5IGJlIGltcGxlbWVudGVkIGJ5IGJyaWRnZXMKPiA+Pj4+Pj4+Pj4gKwkgKiB0aGF0 IHN1cHBvcnQgaG90LXBsdWcgbm90aWZpY2F0aW9uIHdpdGhvdXQgcG9sbGluZy4gQnJpZGdlcyB0 aGF0Cj4gPj4+Pj4+Pj4+ICsJICogaW1wbGVtZW50IGl0IHNoYWxsIGFsc28gaW1wbGVtZW50IHRo ZSBAaHBkX2VuYWJsZSBjYWxsYmFjayBhbmQgc2V0Cj4gPj4+Pj4+Pj4+ICsJICogdGhlIERSTV9C UklER0VfT1BfSFBEIGZsYWcgaW4gdGhlaXIgJmRybV9icmlkZ2UtPm9wcy4KPiA+Pj4+Pj4+Pj4g KwkgKi8KPiA+Pj4+Pj4+Pj4gKwl2b2lkICgqaHBkX2Rpc2FibGUpKHN0cnVjdCBkcm1fYnJpZGdl ICpicmlkZ2UpOwo+ID4+Pj4+Pj4+PiAgfTsKPiA+Pj4+Pj4+Pj4gIAo+ID4+Pj4+Pj4+PiAgLyoq Cj4gPj4+Pj4+Pj4+IEBAIC0zNzIsNiArNDc3LDM4IEBAIHN0cnVjdCBkcm1fYnJpZGdlX3RpbWlu Z3Mgewo+ID4+Pj4+Pj4+PiAgCWJvb2wgZHVhbF9saW5rOwo+ID4+Pj4+Pj4+PiAgfTsKPiA+Pj4+ Pj4+Pj4gIAo+ID4+Pj4+Pj4+PiArLyoqCj4gPj4+Pj4+Pj4+ICsgKiBlbnVtIGRybV9icmlkZ2Vf b3BzIC0gQml0bWFzayBvZiBvcGVyYXRpb25zIHN1cHBvcnRlZCBieSB0aGUgYnJpZGdlCj4gPj4+ Pj4+Pj4+ICsgKi8KPiA+Pj4+Pj4+Pj4gK2VudW0gZHJtX2JyaWRnZV9vcHMgewo+ID4+Pj4+Pj4+ PiArCS8qKgo+ID4+Pj4+Pj4+PiArCSAqIEBEUk1fQlJJREdFX09QX0RFVEVDVDogVGhlIGJyaWRn ZSBjYW4gZGV0ZWN0IGRpc3BsYXlzIGNvbm5lY3RlZCB0bwo+ID4+Pj4+Pj4+PiArCSAqIGl0cyBv dXRwdXQuIEJyaWRnZXMgdGhhdCBzZXQgdGhpcyBmbGFnIHNoYWxsIGltcGxlbWVudCB0aGUKPiA+ Pj4+Pj4+Pj4gKwkgKiAmZHJtX2JyaWRnZV9mdW5jcy0+ZGV0ZWN0IGNhbGxiYWNrLgo+ID4+Pj4+ Pj4+PiArCSAqLwo+ID4+Pj4+Pj4+PiArCURSTV9CUklER0VfT1BfREVURUNUID0gQklUKDApLAo+ ID4+Pj4+Pj4+PiArCS8qKgo+ID4+Pj4+Pj4+PiArCSAqIEBEUk1fQlJJREdFX09QX0VESUQ6IFRo ZSBicmlkZ2UgY2FuIHJldHJpZXZlIHRoZSBFRElEIG9mIHRoZSBkaXNwbGF5Cj4gPj4+Pj4+Pj4+ ICsJICogY29ubmVjdGVkIHRvIGl0cyBvdXRwdXQuIEJyaWRnZXMgdGhhdCBzZXQgdGhpcyBmbGFn IHNoYWxsIGltcGxlbWVudAo+ID4+Pj4+Pj4+PiArCSAqIHRoZSAmZHJtX2JyaWRnZV9mdW5jcy0+ Z2V0X2VkaWQgY2FsbGJhY2suCj4gPj4+Pj4+Pj4+ICsJICovCj4gPj4+Pj4+Pj4+ICsJRFJNX0JS SURHRV9PUF9FRElEID0gQklUKDEpLAo+ID4+Pj4+Pj4+PiArCS8qKgo+ID4+Pj4+Pj4+PiArCSAq IEBEUk1fQlJJREdFX09QX0hQRDogVGhlIGJyaWRnZSBjYW4gZGV0ZWN0IGhvdC1wbHVnIGFuZCBo b3QtdW5wbHVnCj4gPj4+Pj4+Pj4+ICsJICogd2l0aG91dCByZXF1aXJpbmcgcG9sbGluZy4gQnJp ZGdlcyB0aGF0IHNldCB0aGlzIGZsYWcgc2hhbGwKPiA+Pj4+Pj4+Pj4gKwkgKiBpbXBsZW1lbnQg dGhlICZkcm1fYnJpZGdlX2Z1bmNzLT5ocGRfZW5hYmxlIGFuZAo+ID4+Pj4+Pj4+PiArCSAqICZk cm1fYnJpZGdlX2Z1bmNzLT5kaXNhYmxlX2hwZF9jYiBjYWxsYmFja3MuCj4gPj4+Pj4+Pj4+ICsJ ICovCj4gPj4+Pj4+Pj4+ICsJRFJNX0JSSURHRV9PUF9IUEQgPSBCSVQoMiksCj4gPj4+Pj4+Pj4+ ICsJLyoqCj4gPj4+Pj4+Pj4+ICsJICogQERSTV9CUklER0VfT1BfTU9ERVM6IFRoZSBicmlkZ2Ug Y2FuIHJldHJpZXZpbmcgdGhlIG1vZGVzIHN1cHBvcnRlZAo+ID4+Pj4+Pj4+PiArCSAqIGJ5IHRo ZSBkaXNwbGF5IGF0IGl0cyBvdXRwdXQuIFRoaXMgZG9lcyBub3QgaW5jbHVkZSByZWFkaW5kIEVE SUQKPiA+Pj4+Pj4+Pj4gKwkgKiB3aGljaCBpcyBzZXBhcmF0ZWx5IGNvdmVyZWQgYnkgQERSTV9C UklER0VfT1BfRURJRC4gQnJpZGdlcyB0aGF0IHNldAo+ID4+Pj4+Pj4+PiArCSAqIHRoaXMgZmxh ZyBzaGFsbCBpbXBsZW1lbnQgdGhlICZkcm1fYnJpZGdlX2Z1bmNzLT5nZXRfbW9kZXMgY2FsbGJh Y2suCj4gPj4+Pj4+Pj4+ICsJICovCj4gPj4+Pj4+Pj4+ICsJRFJNX0JSSURHRV9PUF9NT0RFUyA9 IEJJVCgzKSwKPiA+Pj4+Pj4+Pj4gK307Cj4gPj4+Pj4+Pj4+ICsKPiA+Pj4+Pj4+Pj4gIC8qKgo+ ID4+Pj4+Pj4+PiAgICogc3RydWN0IGRybV9icmlkZ2UgLSBjZW50cmFsIERSTSBicmlkZ2UgY29u dHJvbCBzdHJ1Y3R1cmUKPiA+Pj4+Pj4+Pj4gICAqLwo+ID4+Pj4+Pj4+PiBAQCAtMzk4LDYgKzUz NSwyOSBAQCBzdHJ1Y3QgZHJtX2JyaWRnZSB7Cj4gPj4+Pj4+Pj4+ICAJY29uc3Qgc3RydWN0IGRy bV9icmlkZ2VfZnVuY3MgKmZ1bmNzOwo+ID4+Pj4+Pj4+PiAgCS8qKiBAZHJpdmVyX3ByaXZhdGU6 IHBvaW50ZXIgdG8gdGhlIGJyaWRnZSBkcml2ZXIncyBpbnRlcm5hbCBjb250ZXh0ICovCj4gPj4+ Pj4+Pj4+ICAJdm9pZCAqZHJpdmVyX3ByaXZhdGU7Cj4gPj4+Pj4+Pj4+ICsJLyoqIEBvcHM6IGJp dG1hc2sgb2Ygb3BlcmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhlIGJyaWRnZSAqLwo+ID4+Pj4+Pj4+ PiArCWVudW0gZHJtX2JyaWRnZV9vcHMgb3BzOwo+ID4+Pj4+Pj4+PiArCS8qKgo+ID4+Pj4+Pj4+ PiArCSAqIEB0eXBlOiBUeXBlIG9mIHRoZSBjb25uZWN0aW9uIGF0IHRoZSBicmlkZ2Ugb3V0cHV0 Cj4gPj4+Pj4+Pj4+ICsJICogKERSTV9NT0RFX0NPTk5FQ1RPUl8qKS4gRm9yIGJyaWRnZXMgYXQg dGhlIGVuZCBvZiB0aGlzIGNoYWluIHRoaXMKPiA+Pj4+Pj4+Pj4gKwkgKiBpZGVudGlmaWVzIHRo ZSB0eXBlIG9mIGNvbm5lY3RlZCBkaXNwbGF5Lgo+ID4+Pj4+Pj4+PiArCSAqLwo+ID4+Pj4+Pj4+ PiArCWludCB0eXBlOwo+ID4+Pj4+Pj4+PiArCS8qKiBwcml2YXRlOiAqLwo+ID4+Pj4+Pj4+PiAr CS8qKgo+ID4+Pj4+Pj4+PiArCSAqIEBocGRfbXV0ZXg6IFByb3RlY3RzIHRoZSBAaHBkX2NiIGFu ZCBAaHBkX2RhdGEgZmllbGRzLgo+ID4+Pj4+Pj4+PiArCSAqLwo+ID4+Pj4+Pj4+PiArCXN0cnVj dCBtdXRleCBocGRfbXV0ZXg7Cj4gPj4+Pj4+Pj4+ICsJLyoqCj4gPj4+Pj4+Pj4+ICsJICogQGhw ZF9jYjogSG90IHBsdWcgZGV0ZWN0aW9uIGNhbGxiYWNrLCByZWdpc3RlcmVkIHdpdGgKPiA+Pj4+ Pj4+Pj4gKwkgKiBkcm1fYnJpZGdlX2hwZF9lbmFibGUoKS4KPiA+Pj4+Pj4+Pj4gKwkgKi8KPiA+ Pj4+Pj4+Pj4gKwl2b2lkICgqaHBkX2NiKSh2b2lkICpkYXRhLCBlbnVtIGRybV9jb25uZWN0b3Jf c3RhdHVzIHN0YXR1cyk7Cj4gPj4+Pj4+Pj4+ICsJLyoqCj4gPj4+Pj4+Pj4+ICsJICogQGhwZF9k YXRhOiBQcml2YXRlIGRhdGEgcGFzc2VkIHRvIHRoZSBIb3QgcGx1ZyBkZXRlY3Rpb24gY2FsbGJh Y2sKPiA+Pj4+Pj4+Pj4gKwkgKiBAaHBkX2NiLgo+ID4+Pj4+Pj4+PiArCSAqLwo+ID4+Pj4+Pj4+ PiArCXZvaWQgKmhwZF9kYXRhOwo+ID4+Pj4+Pj4+PiAgfTsKPiA+Pj4+Pj4+Pj4gIAo+ID4+Pj4+ Pj4+PiAgdm9pZCBkcm1fYnJpZGdlX2FkZChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKTsKPiA+ Pj4+Pj4+Pj4gQEAgLTQyOCw2ICs1ODgsMTQgQEAgdm9pZCBkcm1fYXRvbWljX2JyaWRnZV9wcmVf ZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gPj4+Pj4+Pj4+ICB2b2lkIGRybV9h dG9taWNfYnJpZGdlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ID4+Pj4+Pj4+ PiAgCQkJICAgICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKTsKPiA+Pj4+Pj4+Pj4g IAo+ID4+Pj4+Pj4+PiArdm9pZCBkcm1fYnJpZGdlX2hwZF9lbmFibGUoc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSwKPiA+Pj4+Pj4+Pj4gKwkJCSAgIHZvaWQgKCpjYikodm9pZCAqZGF0YSwKPiA+ Pj4+Pj4+Pj4gKwkJCQkgICAgICBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cyksCj4g Pj4+Pj4+Pj4+ICsJCQkgICB2b2lkICpkYXRhKTsKPiA+Pj4+Pj4+Pj4gK3ZvaWQgZHJtX2JyaWRn ZV9ocGRfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKTsKPiA+Pj4+Pj4+Pj4gK3Zv aWQgZHJtX2JyaWRnZV9ocGRfbm90aWZ5KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gPj4+ Pj4+Pj4+ICsJCQkgICBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cyk7Cj4gPj4+Pj4+ Pj4+ICsKPiA+Pj4+Pj4+Pj4gICNpZmRlZiBDT05GSUdfRFJNX1BBTkVMX0JSSURHRQo+ID4+Pj4+ Pj4+PiAgc3RydWN0IGRybV9icmlkZ2UgKmRybV9wYW5lbF9icmlkZ2VfYWRkKHN0cnVjdCBkcm1f cGFuZWwgKnBhbmVsLAo+ID4+Pj4+Pj4+PiAgCQkJCQl1MzIgY29ubmVjdG9yX3R5cGUpOwoKLS0g ClJlZ2FyZHMsCgpMYXVyZW50IFBpbmNoYXJ0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbA==