From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 09/60] drm/bridge: Add connector-related bridge operations and data Date: Wed, 14 Aug 2019 14:43:21 +0200 Message-ID: <20190814124321.GE7444@phenom.ffwll.local> References: <20190707180852.5512-1-laurent.pinchart@ideasonboard.com> <20190707181937.6250-1-laurent.pinchart@ideasonboard.com> <20190707181937.6250-6-laurent.pinchart@ideasonboard.com> <1f98e5f0-d513-d3f2-420d-80e0e0c3c71b@samsung.com> <20190711073548.GD15868@phenom.ffwll.local> <20190808181948.GW6055@pendragon.ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id 260D16E520 for ; Wed, 14 Aug 2019 12:43:26 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id h13so6952545edq.10 for ; Wed, 14 Aug 2019 05:43:26 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20190808181948.GW6055@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: Laurent Pinchart Cc: Maxime Ripard , Sebastian Reichel , dri-devel@lists.freedesktop.org, Tomi Valkeinen , Sean Paul List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBBdWcgMDgsIDIwMTkgYXQgMDk6MTk6NDhQTSArMDMwMCwgTGF1cmVudCBQaW5jaGFy dCB3cm90ZToKPiBIZWxsbyBEYW5pZWwgYW5kIEFuZHJ6ZWosCj4gCj4gT24gVGh1LCBKdWwgMTEs IDIwMTkgYXQgMDk6MzU6NDhBTSArMDIwMCwgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+IE9uIFdl ZCwgSnVsIDEwLCAyMDE5IGF0IDAyOjEyOjE0UE0gKzAyMDAsIEFuZHJ6ZWogSGFqZGEgd3JvdGU6 Cj4gPiA+IEhpIExhdXJlbnQsCj4gPiA+IAo+ID4gPiBJIGxpa2UgdGhlIGFwcHJvYWNoLCBjdXJy ZW50IHByYWN0aWNlIHdoZW4gYWxtb3N0IGV2ZXJ5IGJyaWRnZSBzaG91bGQKPiA+ID4gb3B0aW9u YWxseSBpbXBsZW1lbnQgY29ubmVjdG9yLCBvciBhbHRlcm5hdGl2ZWx5IGRvd25zdHJlYW0gYnJp ZGdlIG9yCj4gPiA+IHBhbmVsIGlzIHZlcnkgcGFpbmZ1bC4KPiA+IAo+ID4gWWVhaCBJIHRoaW5r IHRoaXMgbG9va3MgbW9zdGx5IHJlYXNvbmFibGUuIFNvbWUgYXBpIGRlc2lnbiBjb21tZW50cyBv biB0b3AKPiA+IG9mIEFuZHJ6ZWonLCB3aXRoIHRoZSBmYWlyIHdhcm5pbmcgdGhhdCBJIGRpZG4n dCBib3RoZXIgdG8gcmVhZCB1cCBvbiBob3cKPiA+IGl0J3MgYWxsIHVzZWQgaW4gdGhlIGVuZC4g SSBwcm9iYWJseSBzaG91bGQgZ28gYW5kIGRvIHRoYXQsIGF0IGxlYXN0IHRvCj4gPiBnZXQgYSBm ZWVsaW5nIGZvciB3aGF0IHlvdXIgaHBkX2NiIHVzdWFsbHkgZG9lcy4KPiA+IAo+ID4gPiBNb3Jl IGNvbW1lbnRzIGlubGluZWQuCj4gPiA+IAo+ID4gPiBPbiAwNy4wNy4yMDE5IDIwOjE4LCBMYXVy ZW50IFBpbmNoYXJ0IHdyb3RlOgo+ID4gPiA+IFRvIHN1cHBvcnQgaW1wbGVtZW50YXRpb24gb2Yg RFJNIGNvbm5lY3RvcnMgb24gdG9wIG9mIERSTSBicmlkZ2VzCj4gPiA+ID4gaW5zdGVhZCBvZiBi eSBicmlkZ2VzLCB0aGUgZHJtX2JyaWRnZSBuZWVkcyB0byBleHBvc2UgbmV3IG9wZXJhdGlvbnMg YW5kCj4gPiA+ID4gZGF0YToKPiA+ID4gPgo+ID4gPiA+IC0gT3V0cHV0IGRldGVjdGlvbiwgaG90 LXBsdWcgbm90aWZpY2F0aW9uLCBtb2RlIHJldHJpZXZhbCBhbmQgRURJRAo+ID4gPiA+ICAgcmV0 cmlldmFsIG9wZXJhdGlvbnMKPiA+ID4gPiAtIEJpdG1hc2sgb2Ygc3VwcG9ydGVkIG9wZXJhdGlv bnMKPiA+ID4gCj4gPiA+IAo+ID4gPiBXaHkgZG8gd2UgbmVlZCB0aGVzZSBiaXRtYXNrIGF0IGFs bD8gV2h5IGNhbm5vdCB3ZSByZWx5IG9uIHByZXNlbmNlIG9mCj4gPiA+IG9wZXJhdGlvbidzIGNh bGxiYWNrPwo+ID4gCj4gPiBZZWFoIGFsc28gbm90IGEgaHVnZSBmYW4gb2YgdGhlc2UgYml0bWFz a3MuIFNtZWxscyBsaWtlCj4gPiBEUklWRVJfR0VNfERSSVZFUl9NT0RFU0VULCBhbmQgSSBwZXJz b25hbGx5IHJlYWxseSBoYXRlIHRob3NlLiBFYXN5IHRvCj4gPiBhZGQsIGdlbmVyYWxseSBnb29k IGV4Y3VzZSB0byBub3QgaGF2ZSB0byB0aGluayB0aHJvdWdoIHRoZSBkZXNpZ24gYmV0d2Vlbgo+ ID4gZGlmZmVyZW50IHBhcnRzIG9mIGRyaXZlcnMgLSAianVzdCIgYWRkIGFub3RoZXIgZmxhZy4K PiAKPiBUaGUgcmVhc29uIGlzIHRoYXQgYSBicmlkZ2UgbWF5IHN1cHBvcnQgYW4gb3BlcmF0aW9u IChhcyBpbiBpbXBsZW1lbnRlZAo+IGluIHRoZSBicmlkZ2UgaGFyZHdhcmUpLCBidXQgdGhhdCBv cGVyYXRpb24gbWF5IG5vdCBiZSBzdXBwb3J0ZWQgb24gYQo+IHBhcnRpY3VsYXIgYm9hcmQuIEZv ciBpbnN0YW5jZSBhbiBIRE1JIGVuY29kZXIgbWF5IHN1cHBvcnQgcmVhZGluZyBFRElECj4gd2hl biB0aGUgRERDIGxpbmVzIGFyZSBjb25uZWN0ZWQgdG8gdGhlIGVuY29kZXIsIGJ1dCBhIGJvYXJk IG1heSBjb25uZWN0Cj4gdGhlIEREQyBsaW5lcyB0byBhbiBJMkMgcG9ydCBvZiB0aGUgU29DLiBX ZSB0aHVzIG5lZWQgdG8gZGVjb3VwbGUKPiBpZiBhIHBhcnRpY3VsYXIgaW5zdGFuY2Ugb2YgdGhl IGRldmljZSBzdXBwb3J0cyB0aGUgb3BlcmF0aW9uIChleHBvc2VkCj4gYnkgdGhlIG9wcyBmbGFn cykgZnJvbSB0aGUgZnVuY3Rpb24gcG9pbnRlcnMuCj4gCj4gV2UgY291bGQgb2YgY291cnNlIGFs bG9jYXRlIHRoZSBkcm1fYnJpZGdlX2Z1bmNzIHN0cnVjdHVyZSBkeW5hbWljYWxseQo+IGZvciBl YWNoIGJyaWRnZSBpbnN0YW5jZSwgYW5kIGZpbGwgaXQgd2l0aCBmdW5jdGlvbiBwb2ludGVycyBt YW51YWxseSwKPiBsZWF2aW5nIHRoZSB1bnVzZWQgb3BzIGFsd2F5cyBOVUxMLCBidXQgdGhhdCB3 b3VsZCByZXF1aXJlIG1ha2luZyB0aGUKPiBzdHJ1Y3R1cmUgd3JpdGFibGUsIHdoaWNoIGlzIGNv bnNpZGVyZWQgYSBzZWN1cml0eSBpc3N1ZS4gVGhhdCdzIHdoeSBJCj4gZGVjaWRlZCB0byBrZWVw IHRoZSBkcm1fYnJpZGdlX2Z1bmNzIHN0cnVjdHVyZSBhcyBhIGdsb2JhbCBzdGF0aWMgY29uc3QK PiBzdHJ1Y3R1cmUsIGFuZCBhZGQgYW4gb3BzIGJpdG1hc2suCgpZZWFoIHJlYWxsb2NhdGluZyBm dW5jIHN0cnVjdHVyZXMgaXMgbm90IGdyZWF0LCBJIGFncmVlIC4uLgoKV291bGQgYW4gLUVOWElP IGF0IHJ1bnRpbWUgd29yayB0b28/IE9yIGRvIHdlIG5lZWQgdG8ga25vdyB0aGlzCnN0YXRpY2Fs bHkuIEl0IGp1c3QgZmVlbHMgc28gc2lsbHkgYW5kIHJlZHVuZGFudCB0byBoYXZlIHRoZSBmbGFn IGFuZCB0aGUKaG9vay4KCj4gPiA+ID4gLSBCcmlkZ2Ugb3V0cHV0IHR5cGUKPiA+ID4gPgo+ID4g PiA+IEFkZCBhbmQgZG9jdW1lbnQgdGhlc2UuCj4gPiA+ID4KPiA+ID4gPiBUaHJlZSBuZXcgYnJp ZGdlIGhlbHBlciBmdW5jdGlvbnMgYXJlIGFsc28gYWRkZWQgdG8gaGFuZGxlIGhvdCBwbHVnCj4g PiA+ID4gbm90aWZpY2F0aW9uIGluIGEgd2F5IHRoYXQgaXMgYXMgdHJhbnNwYXJlbnQgYXMgcG9z c2libGUgZm9yIHRoZQo+ID4gPiA+IGJyaWRnZXMuCj4gPiA+IAo+ID4gPiBEb2N1bWVudGF0aW9u IG9mIG5ldyBvcHNlcyBkb2VzIG5vdCBleHBsYWluIGhvdyBpdCBzaG91bGQgY29vcGVyYXRlIHdp dGgKPiA+ID4gYnJpZGdlIGNoYWluaW5nLCBJIHN1cHBvc2UgdGhleSBzaG91bGQgYmUgY2hhaW5l ZCBleHBsaWNpdGx5LCBhbSBJCj4gPiA+IHJpZ2h0PyBNb3JlIGNvbW1lbnRzIGFib3V0IGl0IGxh dGVyLgo+IAo+IE5vLCB0aGUgd2hvbGUgcG9pbnQgaXMgdGhhdCB0aGV5IHNob3VsZCBub3QgYmUg Y2hhaW5lZCBhdCBhbGwuIEEgYnJpZGdlCj4gZG9lcyBub3QgaGF2ZSB0byBwcm9wYWdhdGUsIGZv ciBpbnN0YW5jZSwgLmdldF9lZGlkKCkgdG8gdGhlIG5leHQKPiBicmlkZ2UuIFRoYXQncyBvbmUg b2YgdGhlIGNvcmUgZGVzaWduIHByaW5jaXBsZXMgaW4gdGhpcyBzZXJpZXMsIEkgd2FudAo+IHRv IGtlZXAgdGhlIGJyaWRnZXMgYXMgc2ltcGxlIGFzIHBvc3NpYmxlLCBhbmQgbW92ZSB0aGUgY29t cGxleGl0eSBvZgo+IHRoZSBib2lsZXJwbGF0ZSBjb2RlIHRoYXQgaXMgY3VycmVudGx5IGNvcGll ZCBhbGwgYXJvdW5kIHRvIGhlbHBlcnMuIFNlZQo+IHBhdGNoICJkcm06IEFkZCBoZWxwZXIgdG8g Y3JlYXRlIGEgY29ubmVjdG9yIGZvciBhIGNoYWluIG9mIGJyaWRnZXMiIGZvcgo+IG1vcmUgaW5m b3JtYXRpb24gYWJvdXQgaG93IHRoaXMgaXMgdXNlZCwgd2l0aCBhIGhlbHBlciB0aGF0IGRlbGVn YXRlcwo+IHRoZSBjb25uZWN0b3Igb3BlcmF0aW9ucyB0byB0aGUgY29ycmVjdCBicmlkZ2UgaW4g dGhlIGNoYWluIGJhc2VkIG9uIHRoZQo+IG9wcyByZXBvcnRlZCBieSBlYWNoIGJyaWRnZS4KClNv dW5kcyBsaWtlIHdlIGhhdmUgYSBnZW5lcmFsIGRpc2N1c3Npb24gb2Ygd2hvIHNob3VsZCBiZSBv d25pbmcgdGhlCnRvcG9sb2d5IGFyb3VuZCBicmlkZ2VzLiBJIGd1ZXNzIHRoZXJlJ3MgYXJndW1l bnRzIGZvciBib3RoIHBvc2l0aW9ucyAuLi4KCk5vdCBzdXJlIHdoYXQgdG8gZG8sIGFzaWRlIGZy b20gdGhhdCBJJ20gbm90IGEgaHVnZSBmYW4gb2YgZmxhZ3MKZXZlcnl3aGVyZS4gQnV0IGlmIHRo YXQncyB0aGUgYmVzdCB3ZSBjYW4gZG8sIHNvIGJlIGl0IDotLwotRGFuaWVsCgo+IAo+ID4gPiA+ IFNpZ25lZC1vZmYtYnk6IExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRAaWRlYXNv bmJvYXJkLmNvbT4KPiA+ID4gPiAtLS0KPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2RybV9icmlk Z2UuYyB8ICA5MiArKysrKysrKysrKysrKysrKysrCj4gPiA+ID4gIGluY2x1ZGUvZHJtL2RybV9i cmlkZ2UuaCAgICAgfCAxNzAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KPiA+ ID4gPiAgMiBmaWxlcyBjaGFuZ2VkLCAyNjEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ ID4gPiA+Cj4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMg Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX2JyaWRnZS5jCj4gPiA+ID4gaW5kZXggNTE5NTc3ZjM2M2Uz Li4zYzJhMjU1ZGY3YWYgMTAwNjQ0Cj4gPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9i cmlkZ2UuYwo+ID4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMKPiA+ID4g PiBAQCAtNzAsNiArNzAsOCBAQCBzdGF0aWMgTElTVF9IRUFEKGJyaWRnZV9saXN0KTsKPiA+ID4g PiAgICovCj4gPiA+ID4gIHZvaWQgZHJtX2JyaWRnZV9hZGQoc3RydWN0IGRybV9icmlkZ2UgKmJy aWRnZSkKPiA+ID4gPiAgewo+ID4gPiA+ICsJbXV0ZXhfaW5pdCgmYnJpZGdlLT5ocGRfbXV0ZXgp Owo+ID4gPiA+ICsKPiA+ID4gPiAgCW11dGV4X2xvY2soJmJyaWRnZV9sb2NrKTsKPiA+ID4gPiAg CWxpc3RfYWRkX3RhaWwoJmJyaWRnZS0+bGlzdCwgJmJyaWRnZV9saXN0KTsKPiA+ID4gPiAgCW11 dGV4X3VubG9jaygmYnJpZGdlX2xvY2spOwo+ID4gPiA+IEBAIC04Niw2ICs4OCw4IEBAIHZvaWQg ZHJtX2JyaWRnZV9yZW1vdmUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiA+ID4gPiAgCW11 dGV4X2xvY2soJmJyaWRnZV9sb2NrKTsKPiA+ID4gPiAgCWxpc3RfZGVsX2luaXQoJmJyaWRnZS0+ bGlzdCk7Cj4gPiA+ID4gIAltdXRleF91bmxvY2soJmJyaWRnZV9sb2NrKTsKPiA+ID4gPiArCj4g PiA+ID4gKwltdXRleF9kZXN0cm95KCZicmlkZ2UtPmhwZF9tdXRleCk7Cj4gPiA+ID4gIH0KPiA+ ID4gPiAgRVhQT1JUX1NZTUJPTChkcm1fYnJpZGdlX3JlbW92ZSk7Cj4gPiA+ID4gIAo+ID4gPiA+ IEBAIC00NjMsNiArNDY3LDk0IEBAIHZvaWQgZHJtX2F0b21pY19icmlkZ2VfZW5hYmxlKHN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gPiA+ID4gIH0KPiA+ID4gPiAgRVhQT1JUX1NZTUJPTChk cm1fYXRvbWljX2JyaWRnZV9lbmFibGUpOwo+ID4gPiA+ICAKPiA+ID4gPiArLyoqCj4gPiA+ID4g KyAqIGRybV9icmlkZ2VfaHBkX2VuYWJsZSAtIGVuYWJsZSBob3QgcGx1ZyBkZXRlY3Rpb24gZm9y IHRoZSBicmlkZ2UKPiA+ID4gPiArICogQGJyaWRnZTogYnJpZGdlIGNvbnRyb2wgc3RydWN0dXJl Cj4gPiA+ID4gKyAqIEBjYjogaG90LXBsdWcgZGV0ZWN0aW9uIGNhbGxiYWNrCj4gPiA+ID4gKyAq IEBkYXRhOiBkYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaG90LXBsdWcgZGV0ZWN0aW9uIGNhbGxi YWNrCj4gPiA+ID4gKyAqCj4gPiA+ID4gKyAqIENhbGwgJmRybV9icmlkZ2VfZnVuY3MuaHBkX2Vu YWJsZSBhbmQgcmVnaXN0ZXIgdGhlIGdpdmVuIEBjYiBhbmQgQGRhdGEgYXMKPiA+ID4gPiArICog aG90IHBsdWcgbm90aWZpY2F0aW9uIGNhbGxiYWNrLiBGcm9tIG5vdyBvbiB0aGUgQGNiIHdpbGwg YmUgY2FsbGVkIHdpdGgKPiA+ID4gPiArICogQGRhdGEgd2hlbiBhbiBvdXRwdXQgc3RhdHVzIGNo YW5nZSBpcyBkZXRlY3RlZCBieSB0aGUgYnJpZGdlLCB1bnRpbCBob3QgcGx1Zwo+ID4gPiA+ICsg KiBub3RpZmljYXRpb24gZ2V0cyBkaXNhYmxlZCB3aXRoIGRybV9icmlkZ2VfaHBkX2Rpc2FibGUo KS4KPiA+ID4gPiArICoKPiA+ID4gPiArICogSG90IHBsdWcgZGV0ZWN0aW9uIGlzIHN1cHBvcnRl ZCBvbmx5IGlmIHRoZSBEUk1fQlJJREdFX09QX0hQRCBmbGFnIGlzIHNldCBpbgo+ID4gPiA+ICsg KiBicmlkZ2UtPm9wcy4gVGhpcyBmdW5jdGlvbiBzaGFsbCBub3QgYmUgY2FsbGVkIHdoZW4gdGhl IGZsYWcgaXMgbm90IHNldC4KPiA+ID4gPiArICoKPiA+ID4gPiArICogT25seSBvbmUgaG90IHBs dWcgZGV0ZWN0aW9uIGNhbGxiYWNrIGNhbiBiZSByZWdpc3RlcmVkIGF0IGEgdGltZSwgaXQgaXMg YW4KPiA+ID4gPiArICogZXJyb3IgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gaG90IHBsdWcg ZGV0ZWN0aW9uIGlzIGFscmVhZHkgZW5hYmxlZCBmb3IKPiA+ID4gPiArICogdGhlIGJyaWRnZS4K PiA+ID4gPiArICovCj4gPiA+IAo+ID4gPiBUbyBzaW1wbGlmeSBhcmNoaXRlY3R1cmUgbWF5YmUg d291bGQgYmUgYmV0dGVyIHRvIGVuYWJsZSBocGQganVzdCBvbgo+ID4gPiBicmlkZ2UgYXR0YWNo Ogo+ID4gPiAKPiA+ID4gYnJpZGdlLT5ocGRfY2IgPSBjYjsKPiA+ID4gCj4gPiA+IGJyaWRnZS0+ aHBkX2RhdGEgPSBkYXRhOwo+ID4gPiAKPiA+ID4gcmV0ID0gZHJtX2JyaWRnZV9hdHRhY2goLi4u KTsKPiA+IAo+ID4gWWVhaCBJIGxpa2UgdGhpcyBtb3JlLiBUaGUgb3RoZXIgcHJvYmxlbSBoZXJl IGlzLCB3aGF0IGlmIHlvdSBuZWVkIG1vcmUKPiA+IHRoYW4gMSBjYWxsYmFjayByZWdpc3RlcnMg b24gdGhlIHNhbWUgYnJpZGdlIGhkcCBzaWduYWw/Cj4gCj4gVGhhdCdzIHdoeSBJIGRlY2lkZWQg dG8gaGlkZSBoaWRlIEhQRCB0aHJvdWdoIGhlbHBlcnMsCj4gZHJtX2JyaWRnZV9ocGRfZW5hYmxl KCkgYW5kIGRybV9icmlkZ2VfaHBkX2Rpc2FibGUoKSBvbiB0aGUgbGlzdGVuZXIKPiBzaWRlLCBh bmQgZHJtX2JyaWRnZV9ocGRfbm90aWZ5KCkgb24gdGhlIGV2ZW50IHJlcG9ydGVyIHNpZGUuIFdo aWxlIHRoZQo+IGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgbGltaXRlZCB0byBhIHNpbmdsZSBs aXN0ZW5lciwgb25seSB0aGUgaGVscGVycwo+IHdvdWxkIG5lZWQgdG8gYmUgY2hhbmdlZCB0byBl eHRlbmQgdGhhdCB0byBtdWx0aXBsZSBsaXN0ZW5lcnMuCj4gCj4gTm90ZSB0aGF0IHRoZSAuaHBk X2VuYWJsZSgpIGFuZCAuaHBkX2Rpc2FibGUoKSBvcGVyYXRpb25zIGFsc28gYWxsb3cgdGhlCj4g YnJpZGdlIHRvIGRpc2FibGUgSFBEIGRldGVjdGlvbiB3aGVuIG5vdCB1c2VkLiBEb2luZyBzbyBr ZWVwcyB0aGUgYnJpZGdlCj4gc2ltcGxlLCBpdCBvbmx5IG5lZWRzIHRvIGNhcmUgYWJvdXQgcmVw b3J0aW5nIEhQRCBldmVudHMgd2hlbiB0aGV5J3JlCj4gZW5hYmxlZCwgd2l0aG91dCBjYXJpbmcg d2hvIChpZiBhbnlvbmUpIGlzIGxpc3RlbmluZywgYW5kIGdldHMgY2xlYXIKPiBpbnN0cnVjdGlv bnMgb24gd2hldGhlciB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgSFBEIGhhcmR3YXJlIChpbiBj YXNlCj4gaXQgY2FuIGJlIGRpc2FibGVkKS4KPiAKPiA+ID4gVGhpcyB3YXkgd2UgY291bGQgYXZv aWQgYWRkaW5nIG5ldyBjYWxsYmFja3MgaHBkXyhlbmFibGV8ZGlzYWJsZSkKPiA+ID4gd2l0aG91 dCBiaWcgc2FjcmlmaWNlcy4KPiA+ID4gCj4gPiA+IE9uZSBtb3JlIHRoaW5nOiBIUEQgaW4gRGlz cGxheVBvcnQvSERNSSBiZXNpZGUgc2lnbmFsbGluZyBwbHVnL3VucGx1ZywKPiA+ID4gbm90aWZp ZXMgYWJvdXQgc2luayBzdGF0dXMgY2hhbmdlLCBob3cgaXQgdHJhbnNsYXRlcyB0byB0aGlzIGNi Pwo+IAo+IFRoaXMgaXMgc29tZXRoaW5nIHRoaXMgc2VyaWVzIGRvZXNuJ3QgaW1wbGVtZW50LiBJ IGRvbid0IHRoaW5rIGl0IHdvdWxkCj4gYmUgYSBiaWcgZGVhbCwgYnV0IG15IGtub3dsZWRnZSBv ZiBIUEQgKGVzcGVjaWFsbHkgZm9yIERpc3BsYXlQb3J0KSBlbmRzCj4gaGVyZS4gSWYgeW91IGNh biBlbGFib3JhdGUgb24gd2hhdCB3b3VsZCBiZSBuZWVkZWQsIEkgY2FuIGltcGxlbWVudAo+IHRo YXQuCj4gCj4gPiA+ID4gK3ZvaWQgZHJtX2JyaWRnZV9ocGRfZW5hYmxlKHN0cnVjdCBkcm1fYnJp ZGdlICpicmlkZ2UsCj4gPiA+ID4gKwkJCSAgIHZvaWQgKCpjYikodm9pZCAqZGF0YSwKPiA+ID4g PiArCQkJCSAgICAgIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzKSwKPiA+ID4gPiAr CQkJICAgdm9pZCAqZGF0YSkKPiA+ID4gPiArewo+ID4gPiA+ICsJaWYgKCFicmlkZ2UgfHwgIWJy aWRnZS0+ZnVuY3MtPmhwZF9lbmFibGUpCj4gPiA+ID4gKwkJcmV0dXJuOwo+ID4gPiA+ICsKPiA+ ID4gPiArCW11dGV4X2xvY2soJmJyaWRnZS0+aHBkX211dGV4KTsKPiA+ID4gPiArCj4gPiA+ID4g KwlpZiAoV0FSTihicmlkZ2UtPmhwZF9jYiwgIkhvdCBwbHVnIGRldGVjdGlvbiBhbHJlYWR5IGVu YWJsZWRcbiIpKQo+ID4gPiA+ICsJCWdvdG8gdW5sb2NrOwo+ID4gPiA+ICsKPiA+ID4gPiArCWJy aWRnZS0+aHBkX2NiID0gY2I7Cj4gPiA+ID4gKwlicmlkZ2UtPmhwZF9kYXRhID0gZGF0YTsKPiA+ ID4gPiArCj4gPiA+ID4gKwlicmlkZ2UtPmZ1bmNzLT5ocGRfZW5hYmxlKGJyaWRnZSk7Cj4gPiA+ ID4gKwo+ID4gPiA+ICt1bmxvY2s6Cj4gPiA+ID4gKwltdXRleF91bmxvY2soJmJyaWRnZS0+aHBk X211dGV4KTsKPiA+ID4gPiArfQo+ID4gPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fYnJpZGdl X2hwZF9lbmFibGUpOwo+ID4gPiA+ICsKPiA+ID4gPiArLyoqCj4gPiA+ID4gKyAqIGRybV9icmlk Z2VfaHBkX2Rpc2FibGUgLSBkaXNhYmxlIGhvdCBwbHVnIGRldGVjdGlvbiBmb3IgdGhlIGJyaWRn ZQo+ID4gPiA+ICsgKiBAYnJpZGdlOiBicmlkZ2UgY29udHJvbCBzdHJ1Y3R1cmUKPiA+ID4gPiAr ICoKPiA+ID4gPiArICogQ2FsbCAmZHJtX2JyaWRnZV9mdW5jcy5ocGRfZGlzYWJsZSBhbmQgdW5y ZWdpc3RlciB0aGUgaG90IHBsdWcgZGV0ZWN0aW9uCj4gPiA+ID4gKyAqIGNhbGxiYWNrIHByZXZp b3VzbHkgcmVnaXN0ZXJlZCB3aXRoIGRybV9icmlkZ2VfaHBkX2VuYWJsZSgpLiBPbmNlIHRoaXMK PiA+ID4gPiArICogZnVuY3Rpb24gcmV0dXJucyB0aGUgY2FsbGJhY2sgd2lsbCBub3QgYmUgY2Fs bGVkIGJ5IHRoZSBicmlkZ2Ugd2hlbiBhbgo+ID4gPiA+ICsgKiBvdXRwdXQgc3RhdHVzIGNoYW5n ZSBvY2N1cnMuCj4gPiA+ID4gKyAqCj4gPiA+ID4gKyAqIEhvdCBwbHVnIGRldGVjdGlvbiBpcyBz dXBwb3J0ZWQgb25seSBpZiB0aGUgRFJNX0JSSURHRV9PUF9IUEQgZmxhZyBpcyBzZXQgaW4KPiA+ ID4gPiArICogYnJpZGdlLT5vcHMuIFRoaXMgZnVuY3Rpb24gc2hhbGwgbm90IGJlIGNhbGxlZCB3 aGVuIHRoZSBmbGFnIGlzIG5vdCBzZXQuCj4gPiA+ID4gKyAqLwo+ID4gPiA+ICt2b2lkIGRybV9i cmlkZ2VfaHBkX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiA+ID4gPiArewo+ ID4gPiA+ICsJaWYgKCFicmlkZ2UgfHwgIWJyaWRnZS0+ZnVuY3MtPmhwZF9kaXNhYmxlKQo+ID4g PiA+ICsJCXJldHVybjsKPiA+ID4gPiArCj4gPiA+ID4gKwltdXRleF9sb2NrKCZicmlkZ2UtPmhw ZF9tdXRleCk7Cj4gPiA+ID4gKwlicmlkZ2UtPmZ1bmNzLT5ocGRfZGlzYWJsZShicmlkZ2UpOwo+ ID4gPiA+ICsKPiA+ID4gPiArCWJyaWRnZS0+aHBkX2NiID0gTlVMTDsKPiA+ID4gPiArCWJyaWRn ZS0+aHBkX2RhdGEgPSBOVUxMOwo+ID4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZicmlkZ2UtPmhwZF9t dXRleCk7Cj4gPiA+ID4gK30KPiA+ID4gPiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2JyaWRnZV9o cGRfZGlzYWJsZSk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsvKioKPiA+ID4gPiArICogZHJtX2JyaWRn ZV9ocGRfbm90aWZ5IC0gbm90aWZ5IGhvdCBwbHVnIGRldGVjdGlvbiBldmVudHMKPiA+ID4gPiAr ICogQGJyaWRnZTogYnJpZGdlIGNvbnRyb2wgc3RydWN0dXJlCj4gPiA+ID4gKyAqIEBzdGF0dXM6 IG91dHB1dCBjb25uZWN0aW9uIHN0YXR1cwo+ID4gPiA+ICsgKgo+ID4gPiA+ICsgKiBCcmlkZ2Ug ZHJpdmVycyBzaGFsbCBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gcmVwb3J0IGhvdCBwbHVnIGV2ZW50 cyB3aGVuIHRoZXkKPiA+ID4gPiArICogZGV0ZWN0IGEgY2hhbmdlIGluIHRoZSBvdXRwdXQgc3Rh dHVzLCB3aGVuIGhvdCBwbHVnIGRldGVjdGlvbiBoYXMgYmVlbgo+ID4gPiA+ICsgKiBlbmFibGVk IGJ5IHRoZSAmZHJtX2JyaWRnZV9mdW5jcy5ocGRfZW5hYmxlIGNhbGxiYWNrLgo+ID4gPiA+ICsg Kgo+ID4gPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIHNoYWxsIGJlIGNhbGxlZCBpbiBhIGNvbnRleHQg dGhhdCBjYW4gc2xlZXAuCj4gPiA+ID4gKyAqLwo+ID4gPiA+ICt2b2lkIGRybV9icmlkZ2VfaHBk X25vdGlmeShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ID4gPiA+ICsJCQkgICBlbnVtIGRy bV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cykKPiA+ID4gPiArewo+ID4gPiA+ICsJbXV0ZXhfbG9j aygmYnJpZGdlLT5ocGRfbXV0ZXgpOwo+ID4gPiA+ICsJaWYgKGJyaWRnZS0+aHBkX2NiKQo+ID4g PiA+ICsJCWJyaWRnZS0+aHBkX2NiKGJyaWRnZS0+aHBkX2RhdGEsIHN0YXR1cyk7Cj4gPiAKPiA+ IFNvIHRoaXMgaXNuJ3QgcXVpdGUgd2hhdCBJIGhhZCBpbiBtaW5kLiBJbnN0ZWFkIHNvbWV0aGlu ZyBsaWtlIHRoaXM6Cj4gPiAKPiA+IAkvKiBpdGVyYXRlcyBvdmVyIGFsbCBicmlkZ2VzIGluIHRo ZSBjaGFpbiBjb250YWluaW5nIEBicmlkZ2UgKi8KPiA+IAlmb3JfZWFjaF9icmlkZ2UodG1wX2Jy aWRnZSwgYnJpZGdlKSB7Cj4gPiAJCWlmICh0bXBfYnJpZGdlID09IGJyaWRnZSkKPiA+IAkJCWNv bnRpbnVlOwo+ID4gCQlpZiAoYnJpZGdlLT5ocGRfbm90aWZ5KTsKPiA+IAkJCWJyaWRnZS0+aHBk X25vdGlmeSh0bXBfYnJpZGdlLCBicmlkZ2UsIHN0YXR1cyk7Cj4gPiAJfQo+ID4gCj4gPiAJZW5j b2RlciA9IGVuY29kZXJfZm9yX2JyaWRnZShicmlkZ2UpOwo+ID4gCWlmIChlbmNvZGVyLT5oZWxw ZXJfcHJpdmF0ZS0+YnJpZGdlX2hwZF9ub3RpZnkpCj4gPiAJCWVuY29kZXItPmhlbHBlcl9wcml2 YXRlLT5icmlkZ2VfaHBkX25vdGlmeShlbmNvZGVyLCBicmlkZ2UsIHN0YXR1cyk7Cj4gPiAKPiA+ IAlkZXYgPSBicmlkZ2UtPmRldgo+ID4gCWlmIChkZXYtPm1vZGVfY29uZmlnLmhlbHBlcl9wcml2 YXRlLT5icmlkZ2VfaHBkX25vdGlmeSkKPiA+IAkJZGV2LT5tb2RlX2NvbmZpZy5oZWxwZXJfcHJp dmF0ZS0+YnJpZGdlX2hwZF9ub3RpZnkoZGV2LCBicmlkZ2UsIHN0YXR1cykKPiA+IAo+ID4gTm8g cmVnaXN0ZXIgY2FsbGJhY2sgbmVlZGVkLCBubyBsb2NraW5nIG5lZWRlZCwgZXZlcnlvbmUgZ2V0 cyBleGFjdGx5IHRoZQo+ID4gaHBkIHRoZXkgd2FudC9uZWVkLgo+IAo+IEknbGwgcmVwbHkgdG8g dGhpcyBmdXJ0aGVyIGRvd24gdGhlIG1haWwgdGhyZWFkLCB0byBhZGRyZXNzIGFkZGl0aW9uYWwK PiBjb21tZW50cy4KPiAKPiA+ID4gPiArCW11dGV4X3VubG9jaygmYnJpZGdlLT5ocGRfbXV0ZXgp Owo+ID4gPiA+ICt9Cj4gPiA+ID4gK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9icmlkZ2VfaHBkX25v dGlmeSk7Cj4gPiA+ID4gKwo+ID4gPiA+ICAjaWZkZWYgQ09ORklHX09GCj4gPiA+ID4gIC8qKgo+ ID4gPiA+ICAgKiBvZl9kcm1fZmluZF9icmlkZ2UgLSBmaW5kIHRoZSBicmlkZ2UgY29ycmVzcG9u ZGluZyB0byB0aGUgZGV2aWNlIG5vZGUgaW4KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9k cm0vZHJtX2JyaWRnZS5oIGIvaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oCj4gPiA+ID4gaW5kZXgg MDhkYzE1ZjkzZGVkLi5iOTQ0NWFhNWIxZWYgMTAwNjQ0Cj4gPiA+ID4gLS0tIGEvaW5jbHVkZS9k cm0vZHJtX2JyaWRnZS5oCj4gPiA+ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oCj4g PiA+ID4gQEAgLTIzLDggKzIzLDkgQEAKPiA+ID4gPiAgI2lmbmRlZiBfX0RSTV9CUklER0VfSF9f Cj4gPiA+ID4gICNkZWZpbmUgX19EUk1fQlJJREdFX0hfXwo+ID4gPiA+ICAKPiA+ID4gPiAtI2lu Y2x1ZGUgPGxpbnV4L2xpc3QuaD4KPiA+ID4gPiAgI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Cj4g PiA+ID4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Cj4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9t dXRleC5oPgo+ID4gPiA+ICAjaW5jbHVkZSA8ZHJtL2RybV9tb2RlX29iamVjdC5oPgo+ID4gPiA+ ICAjaW5jbHVkZSA8ZHJtL2RybV9tb2Rlcy5oPgo+ID4gPiA+ICAKPiA+ID4gPiBAQCAtMzM0LDYg KzMzNSwxMTAgQEAgc3RydWN0IGRybV9icmlkZ2VfZnVuY3Mgewo+ID4gPiA+ICAJICovCj4gPiA+ ID4gIAl2b2lkICgqYXRvbWljX3Bvc3RfZGlzYWJsZSkoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSwKPiA+ID4gPiAgCQkJCSAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOwo+ID4g PiA+ICsKPiA+ID4gPiArCS8qKgo+ID4gPiA+ICsJICogQGRldGVjdDoKPiA+ID4gPiArCSAqCj4g PiA+ID4gKwkgKiBDaGVjayBpZiBhbnl0aGluZyBpcyBhdHRhY2hlZCB0byB0aGUgYnJpZGdlIG91 dHB1dC4KPiA+ID4gPiArCSAqCj4gPiA+ID4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFs LCBpZiBub3QgaW1wbGVtZW50ZWQgdGhlIGJyaWRnZSB3aWxsIGJlCj4gPiA+ID4gKwkgKiBjb25z aWRlcmVkIGFzIGFsd2F5cyBoYXZpbmcgYSBjb21wb25lbnQgYXR0YWNoZWQgdG8gaXRzIG91dHB1 dC4KPiA+ID4gPiArCSAqIEJyaWRnZXMgdGhhdCBpbXBsZW1lbnQgdGhpcyBjYWxsYmFjayBzaGFs bCBzZXQgdGhlCj4gPiA+ID4gKwkgKiBEUk1fQlJJREdFX09QX0RFVEVDVCBmbGFnIGluIHRoZWly ICZkcm1fYnJpZGdlLT5vcHMuCj4gPiA+ID4gKwkgKgo+ID4gPiA+ICsJICogUkVUVVJOUzoKPiA+ ID4gPiArCSAqCj4gPiA+ID4gKwkgKiBkcm1fY29ubmVjdG9yX3N0YXR1cyBpbmRpY2F0aW5nIHRo ZSBicmlkZ2Ugb3V0cHV0IHN0YXR1cy4KPiA+ID4gPiArCSAqLwo+ID4gPiA+ICsJZW51bSBkcm1f Y29ubmVjdG9yX3N0YXR1cyAoKmRldGVjdCkoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSk7Cj4g PiA+ID4gKwo+ID4gPiA+ICsJLyoqCj4gPiA+ID4gKwkgKiBAZ2V0X21vZGVzOgo+ID4gPiA+ICsJ ICoKPiA+ID4gPiArCSAqIEZpbGwgYWxsIG1vZGVzIGN1cnJlbnRseSB2YWxpZCBmb3IgdGhlIHNp bmsgaW50byB0aGUgJmRybV9jb25uZWN0b3IKPiA+ID4gPiArCSAqIHdpdGggZHJtX21vZGVfcHJv YmVkX2FkZCgpLgo+ID4gPiA+ICsJICoKPiA+ID4gPiArCSAqIFRoZSBAZ2V0X21vZGVzIGNhbGxi YWNrIGlzIG1vc3RseSBpbnRlbmRlZCB0byBzdXBwb3J0IG5vbi1wcm9iYWJsZQo+ID4gPiA+ICsJ ICogZGlzcGxheXMgc3VjaCBhcyBtYW55IGZpeGVkIHBhbmVscy4gQnJpZGdlcyB0aGF0IHN1cHBv cnQgcmVhZGluZwo+ID4gPiA+ICsJICogRURJRCBzaGFsbCBsZWF2ZSBAZ2V0X21vZGVzIHVuaW1w bGVtZW50ZWQgYW5kIGltcGxlbWVudCB0aGUKPiA+ID4gPiArCSAqICZkcm1fYnJpZGdlX2Z1bmNz LT5nZXRfZWRpZCBjYWxsYmFjayBpbnN0ZWFkLgo+ID4gPiA+ICsJICoKPiA+ID4gPiArCSAqIFRo aXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwuIEJyaWRnZXMgdGhhdCBpbXBsZW1lbnQgaXQgc2hhbGwg c2V0IHRoZQo+ID4gPiA+ICsJICogRFJNX0JSSURHRV9PUF9NT0RFUyBmbGFnIGluIHRoZWlyICZk cm1fYnJpZGdlLT5vcHMuCj4gPiA+ID4gKwkgKgo+ID4gPiA+ICsJICogUkVUVVJOUzoKPiA+ID4g PiArCSAqCj4gPiA+ID4gKwkgKiBUaGUgbnVtYmVyIG9mIG1vZGVzIGFkZGVkIGJ5IGNhbGxpbmcg ZHJtX21vZGVfcHJvYmVkX2FkZCgpLgo+ID4gPiA+ICsJICovCj4gPiA+ID4gKwlpbnQgKCpnZXRf bW9kZXMpKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gPiA+ID4gKwkJCSBzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKPiA+ID4gPiArCj4gPiA+ID4gKwkvKioKPiA+ID4gPiAr CSAqIEBnZXRfZWRpZDoKPiA+ID4gPiArCSAqCj4gPiA+ID4gKwkgKiBSZWFkIGFuZCBwYXJzZSB0 aGUgRURJRCBkYXRhIG9mIHRoZSBjb25uZWN0ZWQgZGlzcGxheS4KPiA+ID4gPiArCSAqCj4gPiA+ ID4gKwkgKiBUaGUgQGdldF9lZGlkIGNhbGxiYWNrIGlzIHRoZSBwcmVmZXJyZWQgd2F5IG9mIHJl cG9ydGluZyBtb2RlCj4gPiA+ID4gKwkgKiBpbmZvcm1hdGlvbiBmb3IgYSBkaXNwbGF5IGNvbm5l Y3RlZCB0byB0aGUgYnJpZGdlIG91dHB1dC4gQnJpZGdlcwo+ID4gPiA+ICsJICogdGhhdCBzdXBw b3J0IHJlYWRpbmQgRURJRCBzaGFsbCBpbXBsZW1lbnQgdGhpcyBjYWxsYmFjayBhbmQgbGVhdmUK PiA+ID4gPiArCSAqIHRoZSBAZ2V0X21vZGVzIGNhbGxiYWNrIHVuaW1wbGVtZW50ZWQuCj4gPiA+ ID4gKwkgKgo+ID4gPiA+ICsJICogVGhlIGNhbGxlciBvZiB0aGlzIG9wZXJhdGlvbiBzaGFsbCBm aXJzdCB2ZXJpZnkgdGhlIG91dHB1dAo+ID4gPiA+ICsJICogY29ubmVjdGlvbiBzdGF0dXMgYW5k IHJlZnJhaW4gZnJvbSByZWFkaW5nIEVESUQgZnJvbSBhIGRpc2Nvbm5lY3RlZAo+ID4gPiA+ICsJ ICogb3V0cHV0Lgo+ID4gPiA+ICsJICoKPiA+ID4gPiArCSAqIFRoaXMgY2FsbGJhY2sgaXMgb3B0 aW9uYWwuIEJyaWRnZXMgdGhhdCBpbXBsZW1lbnQgaXQgc2hhbGwgc2V0IHRoZQo+ID4gPiA+ICsJ ICogRFJNX0JSSURHRV9PUF9FRElEIGZsYWcgaW4gdGhlaXIgJmRybV9icmlkZ2UtPm9wcy4KPiA+ ID4gPiArCSAqCj4gPiA+ID4gKwkgKiBSRVRVUk5TOgo+ID4gPiA+ICsJICoKPiA+ID4gPiArCSAq IEFuIGVkaWQgc3RydWN0dXJlIG5ld2x5IGFsbG9jYXRlZCB3aXRoIGttYWxsb2MoKSAob3Igc2lt aWxhcikgb24KPiA+ID4gPiArCSAqIHN1Y2Nlc3MsIG9yIE5VTEwgb3RoZXJ3aXNlLiBUaGUgY2Fs bGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nCj4gPiA+ID4gKwkgKiB0aGUgcmV0dXJuZWQg ZWRpZCBzdHJ1Y3R1cmUgd2l0aCBrZnJlZSgpLgo+ID4gPiA+ICsJICovCj4gPiA+ID4gKwlzdHJ1 Y3QgZWRpZCAqKCpnZXRfZWRpZCkoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiA+ID4gPiAr CQkJCSBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKPiA+ID4gCj4gPiA+IEl0IG92 ZXJsYXBzIHdpdGggZ2V0X21vZGVzLCBJIGd1ZXNzIHByZXNlbmNlIG9mIG9uZSBvcHMgc2hvdWxk IGRpc2FsbG93Cj4gPiA+IHByZXNlbmNlIG9mIGFub3RoZXIgb25lPwo+ID4gPiAKPiA+ID4gSSBh bSBub3QgcmVhbGx5IGNvbnZpbmNlZCB3ZSBuZWVkIHRoaXMgb3AgYXQgYWxsLCBjYW5ub3Qgd2Ug anVzdCBhc3NpZ24KPiA+ID4gc29tZSBoZWxwZXIgZnVuY3Rpb24gdG8gLmdldF9tb2RlcyBjYiwg d2hpY2ggd2lsbCBkbyB0aGUgc2FtZT8KPiA+IAo+ID4gUGxhbiBCKTogZGl0Y2ggLT5nZXRfZWRp ZCwgcmVxdWlyZSB0aGF0IHRoZSBkcml2ZXIgaGFzIC0+Z2V0X21vZGVzIGluIHRoYXQKPiA+IGNh c2UsIGFuZCByZXF1aXJlIHRoYXQgaWYgaXQgaGFzIGFuIGVkaWQgaXQgbXVzdCBmaWxsIG91dCBj b25uZWN0b3ItPmluZm8KPiA+IGFuZCBjb25uZWN0b3ItPmVkaWQgY29ycmVjdGx5Lgo+IAo+IEkg dGhpbmsgdGhhdCdzIGRvYWJsZSwgSSdsbCBoYXZlIGEgbG9vay4KPiAKPiA+IEJ0dyBpZiBhIGhw ZCBoYXBwZW5zLCB3aG8ncyByZXNwb25pYmxlIGZvciBtYWtpbmcgc3VyZSB0aGUgZWRpZC9tb2Rl IGxpc3QKPiA+IGluIHRoZSBjb25uZWN0b3IgaXMgdXAtdG8tZGF0ZT8gV2l0aCB5b3VyIGN1cnJl bnQgY2FsbGJhY2sgZGVzaWduIHRoYXQncwo+ID4gdXAgdG8gdGhlIGNhbGxiYWNrLCB3aGljaCBk b2Vzbid0IGZlZWwgZ3JlYXQuIE1heWJlICBkcm1fYnJpZGdlX2hwZF9ub3RpZnkKPiA+IHNob3Vs ZCBndWFyYW50ZWUgdGhhdCBpdCdsbCBmaXJzdCB3YWxrIHRoZSBjb25uZWN0b3JzIHRvIHVwZGF0 ZSBzdGF0dXMgYW5kCj4gPiBlZGlkL21vZGUgbGlzdCBmb3IgdGhlIGZpbmFsIGRybV9jb25uZWN0 b3IuIEFuZCB0aGVuIGluc3RlYWQgb2YganVzdAo+ID4gcGFzc2luZyB0aGUgc2ltcGxlICJzdGF0 dXMiLCBpdCdsbCBwYXNzIHRoZSBjb25uZWN0b3IsIHdpdGggZXZlcnl0aGluZwo+ID4gY29ycmVj dGx5IHVwZGF0ZWQuCj4gPiAKPiA+IE90aGVyd2lzZSBldmVyeW9uZSBpbnRlcmVzdGVkIGluIHRo YXQgaHBkIHNpZ25hbCB3aWxsIGdvIGFuZCByZS1mZXRjaCB0aGUKPiA+IGVkaWQsIHdoaWNoIGlz IG5vdCBzbyBhd2Vzb21lIDotKQo+IAo+IFdpdGggdGhlIGN1cnJlbnQgZGVzaWduIHRoZXJlJ3Mg YSBzaW5nbGUgbGlzdGVuZXIsIHNvIGl0J3Mgbm90IGEgYmlnCj4gZGVhbCA6LSkgRnVydGhlcm1v cmUsIHRoZSBsaXN0ZW5lciBpcyB0aGUgaGVscGVyIHRoYXQgY3JlYXRlcyBhCj4gY29ubmVjdG9y IG9uIHRvcCBvZiBhIGNoYWluIG9mIGJyaWRnZXMsIHNvIGl0J3MgYSBwcmV0dHkgZ29vZCBwbGFj ZSB0bwo+IGhhbmRsZSB0aGlzLiBTZWUgdGhlIGNhbGwgdG8gZHJtX2ttc19oZWxwZXJfaG90cGx1 Z19ldmVudCgpIGluCj4gZHJtX2JyaWRnZV9jb25uZWN0b3JfaHBkX2NiKCkuCj4gCj4gSSdtIGFs bCBmb3IgcmV3b3JraW5nIEhQRCBhbmQgbW9kZSBmZXRjaGluZywgYnV0IEkgdGhpbmsgaXQncyBh IGJpdCB0b28KPiBiaWcgb2YgYSByZXF1aXJlbWVudCBhcyBhIHByZXJlcXVpc2l0ZSBmb3IgdGhp cyBzZXJpZXMgKG9yIGFzIHBhcnQgb2YKPiB0aGlzIHNlcmllcykuIFdlIGhhdmUgaGFyZHdhcmUg dGhhdCBjYW4gcmVwb3J0IEhQRCB3aXRoIHZhcmlvdXMgbGV2ZWwgb2YKPiBkZXRhaWxzIChmcm9t ICJzb21ldGhpbmcgaGFwcGVuZWQgb24gYSBjb25uZWN0b3IiIHRvICJ0aGlzIHBhcnRpY3VsYXIK PiBldmVudCBoYXBwZW5lZCBvbiB0aGlzIHBhcnRpY3VsYXIgY29ubmVjdG9yIiksIGFuZCB3ZSBj aGFubmVsIHRoYXQKPiB0aHJvdWdoIGhlbHBlcnMgc3VjaCBhcyBkcm1fa21zX2hlbHBlcl9ob3Rw bHVnX2V2ZW50KCkgdGhhdCBsb3NlIHRoZQo+IGRldGFpbHMgYW5kIGdvIHRocm91Z2ggYSBoZWF2 eSBtZWNoYW5pc20gdG8gcmVmZXRjaCBldmVyeXRoaW5nLiBJCj4gdW5kZXJzdGFuZCB0aGlzIGlz IG5lZWRlZCBpbiBtYW55IGNhc2VzLCBidXQgSSB0aGluayB0aGVyZSdzIHJvb20gZm9yCj4gaW1w cm92ZW1lbnQuIFRoaXMgc2VyaWVzLCBpbiBteSBvcGluaW9uLCBkb2Vzbid0IGdvIGluIHRoZSB3 cm9uZwo+IGRpcmVjdGlvbiBpbiB0aGF0IHJlZ2FyZCwgYXMgaXQgZXZlbnR1YWxseSBjYWxscwo+ IGRybV9rbXNfaGVscGVyX2hvdHBsdWdfZXZlbnQoKSwgc28gSSB0aGluayBpbXByb3ZlbWVudHMg d291bGQgbWFrZSBzZW5zZQo+IG9uIHRvcCBvZiBpdC4gSSdtIGV2ZW4gd2lsbGluZyB0byB3b3Jr IG9uIHRoaXMsIHByb3ZpZGVkIEkgZ2V0IGZlZWRiYWNrCj4gb24gd2hhdCBpcyBkZXNpcmVkLgo+ IAo+ID4gPiA+ICsJLyoqCj4gPiA+ID4gKwkgKiBAbG9zdF9ob3RwbHVnOgo+ID4gPiA+ICsJICoK PiA+ID4gPiArCSAqIE5vdGlmeSB0aGUgYnJpZGdlIG9mIGRpc3BsYXkgZGlzY29ubmVjdGlvbi4K PiA+ID4gPiArCSAqCj4gPiA+ID4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLCBpdCBt YXkgYmUgaW1wbGVtZW50ZWQgYnkgYnJpZGdlcyB0aGF0Cj4gPiA+ID4gKwkgKiBuZWVkIHRvIGJl IG5vdGlmaWVkIG9mIGRpc3BsYXkgZGlzY29ubmVjdGlvbiBmb3IgaW50ZXJuYWwgcmVhc29ucy4K PiA+ID4gPiArCSAqIE9uZSB1c2UgY2FzZSBpcyB0byByZXNldCB0aGUgaW50ZXJuYWwgc3RhdGUg b2YgQ0VDIGNvbnRyb2xsZXJzIGZvcgo+ID4gPiA+ICsJICogSERNSSBicmlkZ2VzLgo+ID4gPiA+ ICsJICovCj4gPiA+ID4gKwl2b2lkICgqbG9zdF9ob3RwbHVnKShzdHJ1Y3QgZHJtX2JyaWRnZSAq YnJpZGdlKTsKPiA+ID4gPiArCj4gPiA+ID4gKwkvKioKPiA+ID4gPiArCSAqIEBocGRfZW5hYmxl Ogo+ID4gPiA+ICsJICoKPiA+ID4gPiArCSAqIEVuYWJsZSBob3QgcGx1ZyBkZXRlY3Rpb24uIEZy b20gbm93IG9uIHRoZSBicmlkZ2Ugc2hhbGwgY2FsbAo+ID4gPiA+ICsJICogZHJtX2JyaWRnZV9o cGRfbm90aWZ5KCkgZWFjaCB0aW1lIGEgY2hhbmdlIGlzIGRldGVjdGVkIGluIHRoZSBvdXRwdXQK PiA+ID4gPiArCSAqIGNvbm5lY3Rpb24gc3RhdHVzLCB1bnRpbCBob3QgcGx1ZyBkZXRlY3Rpb24g Z2V0cyBkaXNhYmxlZCB3aXRoCj4gPiA+ID4gKwkgKiBAaHBkX2Rpc2FibGUuCj4gPiA+ID4gKwkg Kgo+ID4gPiA+ICsJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCBhbmQgc2hhbGwgb25seSBi ZSBpbXBsZW1lbnRlZCBieSBicmlkZ2VzCj4gPiA+ID4gKwkgKiB0aGF0IHN1cHBvcnQgaG90LXBs dWcgbm90aWZpY2F0aW9uIHdpdGhvdXQgcG9sbGluZy4gQnJpZGdlcyB0aGF0Cj4gPiA+ID4gKwkg KiBpbXBsZW1lbnQgaXQgc2hhbGwgYWxzbyBpbXBsZW1lbnQgdGhlIEBocGRfZGlzYWJsZSBjYWxs YmFjayBhbmQgc2V0Cj4gPiA+ID4gKwkgKiB0aGUgRFJNX0JSSURHRV9PUF9IUEQgZmxhZyBpbiB0 aGVpciAmZHJtX2JyaWRnZS0+b3BzLgo+ID4gPiA+ICsJICovCj4gPiA+ID4gKwl2b2lkICgqaHBk X2VuYWJsZSkoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJ LyoqCj4gPiA+ID4gKwkgKiBAaHBkX2Rpc2FibGU6Cj4gPiA+ID4gKwkgKgo+ID4gPiA+ICsJICog RGlzYWJsZSBob3QgcGx1ZyBkZXRlY3Rpb24uIE9uY2UgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRo ZSBicmlkZ2UKPiA+ID4gPiArCSAqIHNoYWxsIG5vdCBjYWxsIGRybV9icmlkZ2VfaHBkX25vdGlm eSgpIHdoZW4gYSBjaGFuZ2UgaW4gdGhlIG91dHB1dAo+ID4gPiA+ICsJICogY29ubmVjdGlvbiBz dGF0dXMgb2NjdXJzLgo+ID4gPiA+ICsJICoKPiA+ID4gPiArCSAqIFRoaXMgY2FsbGJhY2sgaXMg b3B0aW9uYWwgYW5kIHNoYWxsIG9ubHkgYmUgaW1wbGVtZW50ZWQgYnkgYnJpZGdlcwo+ID4gPiA+ ICsJICogdGhhdCBzdXBwb3J0IGhvdC1wbHVnIG5vdGlmaWNhdGlvbiB3aXRob3V0IHBvbGxpbmcu IEJyaWRnZXMgdGhhdAo+ID4gPiA+ICsJICogaW1wbGVtZW50IGl0IHNoYWxsIGFsc28gaW1wbGVt ZW50IHRoZSBAaHBkX2VuYWJsZSBjYWxsYmFjayBhbmQgc2V0Cj4gPiA+ID4gKwkgKiB0aGUgRFJN X0JSSURHRV9PUF9IUEQgZmxhZyBpbiB0aGVpciAmZHJtX2JyaWRnZS0+b3BzLgo+ID4gPiA+ICsJ ICovCj4gPiA+ID4gKwl2b2lkICgqaHBkX2Rpc2FibGUpKHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UpOwo+ID4gPiA+ICB9Owo+ID4gPiA+ICAKPiA+ID4gPiAgLyoqCj4gPiA+ID4gQEAgLTM3Miw2 ICs0NzcsMzggQEAgc3RydWN0IGRybV9icmlkZ2VfdGltaW5ncyB7Cj4gPiA+ID4gIAlib29sIGR1 YWxfbGluazsKPiA+ID4gPiAgfTsKPiA+ID4gPiAgCj4gPiA+ID4gKy8qKgo+ID4gPiA+ICsgKiBl bnVtIGRybV9icmlkZ2Vfb3BzIC0gQml0bWFzayBvZiBvcGVyYXRpb25zIHN1cHBvcnRlZCBieSB0 aGUgYnJpZGdlCj4gPiA+ID4gKyAqLwo+ID4gPiA+ICtlbnVtIGRybV9icmlkZ2Vfb3BzIHsKPiA+ ID4gPiArCS8qKgo+ID4gPiA+ICsJICogQERSTV9CUklER0VfT1BfREVURUNUOiBUaGUgYnJpZGdl IGNhbiBkZXRlY3QgZGlzcGxheXMgY29ubmVjdGVkIHRvCj4gPiA+ID4gKwkgKiBpdHMgb3V0cHV0 LiBCcmlkZ2VzIHRoYXQgc2V0IHRoaXMgZmxhZyBzaGFsbCBpbXBsZW1lbnQgdGhlCj4gPiA+ID4g KwkgKiAmZHJtX2JyaWRnZV9mdW5jcy0+ZGV0ZWN0IGNhbGxiYWNrLgo+ID4gPiA+ICsJICovCj4g PiA+ID4gKwlEUk1fQlJJREdFX09QX0RFVEVDVCA9IEJJVCgwKSwKPiA+ID4gPiArCS8qKgo+ID4g PiA+ICsJICogQERSTV9CUklER0VfT1BfRURJRDogVGhlIGJyaWRnZSBjYW4gcmV0cmlldmUgdGhl IEVESUQgb2YgdGhlIGRpc3BsYXkKPiA+ID4gPiArCSAqIGNvbm5lY3RlZCB0byBpdHMgb3V0cHV0 LiBCcmlkZ2VzIHRoYXQgc2V0IHRoaXMgZmxhZyBzaGFsbCBpbXBsZW1lbnQKPiA+ID4gPiArCSAq IHRoZSAmZHJtX2JyaWRnZV9mdW5jcy0+Z2V0X2VkaWQgY2FsbGJhY2suCj4gPiA+ID4gKwkgKi8K PiA+ID4gPiArCURSTV9CUklER0VfT1BfRURJRCA9IEJJVCgxKSwKPiA+ID4gPiArCS8qKgo+ID4g PiA+ICsJICogQERSTV9CUklER0VfT1BfSFBEOiBUaGUgYnJpZGdlIGNhbiBkZXRlY3QgaG90LXBs dWcgYW5kIGhvdC11bnBsdWcKPiA+ID4gPiArCSAqIHdpdGhvdXQgcmVxdWlyaW5nIHBvbGxpbmcu IEJyaWRnZXMgdGhhdCBzZXQgdGhpcyBmbGFnIHNoYWxsCj4gPiA+ID4gKwkgKiBpbXBsZW1lbnQg dGhlICZkcm1fYnJpZGdlX2Z1bmNzLT5ocGRfZW5hYmxlIGFuZAo+ID4gPiA+ICsJICogJmRybV9i cmlkZ2VfZnVuY3MtPmRpc2FibGVfaHBkX2NiIGNhbGxiYWNrcy4KPiA+ID4gPiArCSAqLwo+ID4g PiA+ICsJRFJNX0JSSURHRV9PUF9IUEQgPSBCSVQoMiksCj4gPiA+ID4gKwkvKioKPiA+ID4gPiAr CSAqIEBEUk1fQlJJREdFX09QX01PREVTOiBUaGUgYnJpZGdlIGNhbiByZXRyaWV2aW5nIHRoZSBt b2RlcyBzdXBwb3J0ZWQKPiA+ID4gPiArCSAqIGJ5IHRoZSBkaXNwbGF5IGF0IGl0cyBvdXRwdXQu IFRoaXMgZG9lcyBub3QgaW5jbHVkZSByZWFkaW5kIEVESUQKPiA+ID4gPiArCSAqIHdoaWNoIGlz IHNlcGFyYXRlbHkgY292ZXJlZCBieSBARFJNX0JSSURHRV9PUF9FRElELiBCcmlkZ2VzIHRoYXQg c2V0Cj4gPiA+ID4gKwkgKiB0aGlzIGZsYWcgc2hhbGwgaW1wbGVtZW50IHRoZSAmZHJtX2JyaWRn ZV9mdW5jcy0+Z2V0X21vZGVzIGNhbGxiYWNrLgo+ID4gPiA+ICsJICovCj4gPiA+ID4gKwlEUk1f QlJJREdFX09QX01PREVTID0gQklUKDMpLAo+ID4gPiA+ICt9Owo+ID4gPiA+ICsKPiA+ID4gPiAg LyoqCj4gPiA+ID4gICAqIHN0cnVjdCBkcm1fYnJpZGdlIC0gY2VudHJhbCBEUk0gYnJpZGdlIGNv bnRyb2wgc3RydWN0dXJlCj4gPiA+ID4gICAqLwo+ID4gPiA+IEBAIC0zOTgsNiArNTM1LDI5IEBA IHN0cnVjdCBkcm1fYnJpZGdlIHsKPiA+ID4gPiAgCWNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1 bmNzICpmdW5jczsKPiA+ID4gPiAgCS8qKiBAZHJpdmVyX3ByaXZhdGU6IHBvaW50ZXIgdG8gdGhl IGJyaWRnZSBkcml2ZXIncyBpbnRlcm5hbCBjb250ZXh0ICovCj4gPiA+ID4gIAl2b2lkICpkcml2 ZXJfcHJpdmF0ZTsKPiA+ID4gPiArCS8qKiBAb3BzOiBiaXRtYXNrIG9mIG9wZXJhdGlvbnMgc3Vw cG9ydGVkIGJ5IHRoZSBicmlkZ2UgKi8KPiA+ID4gPiArCWVudW0gZHJtX2JyaWRnZV9vcHMgb3Bz Owo+ID4gPiA+ICsJLyoqCj4gPiA+ID4gKwkgKiBAdHlwZTogVHlwZSBvZiB0aGUgY29ubmVjdGlv biBhdCB0aGUgYnJpZGdlIG91dHB1dAo+ID4gPiA+ICsJICogKERSTV9NT0RFX0NPTk5FQ1RPUl8q KS4gRm9yIGJyaWRnZXMgYXQgdGhlIGVuZCBvZiB0aGlzIGNoYWluIHRoaXMKPiA+ID4gPiArCSAq IGlkZW50aWZpZXMgdGhlIHR5cGUgb2YgY29ubmVjdGVkIGRpc3BsYXkuCj4gPiA+ID4gKwkgKi8K PiA+ID4gPiArCWludCB0eXBlOwo+ID4gPiA+ICsJLyoqIHByaXZhdGU6ICovCj4gPiA+ID4gKwkv KioKPiA+ID4gPiArCSAqIEBocGRfbXV0ZXg6IFByb3RlY3RzIHRoZSBAaHBkX2NiIGFuZCBAaHBk X2RhdGEgZmllbGRzLgo+ID4gPiA+ICsJICovCj4gPiA+ID4gKwlzdHJ1Y3QgbXV0ZXggaHBkX211 dGV4Owo+ID4gPiA+ICsJLyoqCj4gPiA+ID4gKwkgKiBAaHBkX2NiOiBIb3QgcGx1ZyBkZXRlY3Rp b24gY2FsbGJhY2ssIHJlZ2lzdGVyZWQgd2l0aAo+ID4gPiA+ICsJICogZHJtX2JyaWRnZV9ocGRf ZW5hYmxlKCkuCj4gPiA+ID4gKwkgKi8KPiA+ID4gPiArCXZvaWQgKCpocGRfY2IpKHZvaWQgKmRh dGEsIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzKTsKPiA+ID4gPiArCS8qKgo+ID4g PiA+ICsJICogQGhwZF9kYXRhOiBQcml2YXRlIGRhdGEgcGFzc2VkIHRvIHRoZSBIb3QgcGx1ZyBk ZXRlY3Rpb24gY2FsbGJhY2sKPiA+ID4gPiArCSAqIEBocGRfY2IuCj4gPiA+ID4gKwkgKi8KPiA+ ID4gPiArCXZvaWQgKmhwZF9kYXRhOwo+ID4gPiA+ICB9Owo+ID4gPiA+ICAKPiA+ID4gPiAgdm9p ZCBkcm1fYnJpZGdlX2FkZChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKTsKPiA+ID4gPiBAQCAt NDI4LDYgKzU4OCwxNCBAQCB2b2lkIGRybV9hdG9taWNfYnJpZGdlX3ByZV9lbmFibGUoc3RydWN0 IGRybV9icmlkZ2UgKmJyaWRnZSwKPiA+ID4gPiAgdm9pZCBkcm1fYXRvbWljX2JyaWRnZV9lbmFi bGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiA+ID4gPiAgCQkJICAgICAgc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlKTsKPiA+ID4gPiAgCj4gPiA+ID4gK3ZvaWQgZHJtX2JyaWRn ZV9ocGRfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gPiA+ID4gKwkJCSAgIHZv aWQgKCpjYikodm9pZCAqZGF0YSwKPiA+ID4gPiArCQkJCSAgICAgIGVudW0gZHJtX2Nvbm5lY3Rv cl9zdGF0dXMgc3RhdHVzKSwKPiA+ID4gPiArCQkJICAgdm9pZCAqZGF0YSk7Cj4gPiA+ID4gK3Zv aWQgZHJtX2JyaWRnZV9ocGRfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKTsKPiA+ ID4gPiArdm9pZCBkcm1fYnJpZGdlX2hwZF9ub3RpZnkoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSwKPiA+ID4gPiArCQkJICAgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMpOwo+ID4g PiA+ICsKPiA+ID4gPiAgI2lmZGVmIENPTkZJR19EUk1fUEFORUxfQlJJREdFCj4gPiA+ID4gIHN0 cnVjdCBkcm1fYnJpZGdlICpkcm1fcGFuZWxfYnJpZGdlX2FkZChzdHJ1Y3QgZHJtX3BhbmVsICpw YW5lbCwKPiA+ID4gPiAgCQkJCQl1MzIgY29ubmVjdG9yX3R5cGUpOwo+IAo+IC0tIAo+IFJlZ2Fy ZHMsCj4gCj4gTGF1cmVudCBQaW5jaGFydAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5n aW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==