From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [PATCH v2 3/5] drm/rockchip: Use the helpers for PSR Date: Fri, 29 Mar 2019 15:00:10 -0400 Message-ID: <20190329190010.GQ114153@art_vandelay> References: <20190326204509.96515-1-sean@poorly.run> <20190326204509.96515-3-sean@poorly.run> <2899575.41yBNtqCfV@diego> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qk1-x743.google.com (mail-qk1-x743.google.com [IPv6:2607:f8b0:4864:20::743]) by gabe.freedesktop.org (Postfix) with ESMTPS id A66E36E4F9 for ; Fri, 29 Mar 2019 19:00:12 +0000 (UTC) Received: by mail-qk1-x743.google.com with SMTP id g1so2016082qki.5 for ; Fri, 29 Mar 2019 12:00:12 -0700 (PDT) Content-Disposition: inline In-Reply-To: <2899575.41yBNtqCfV@diego> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Heiko =?iso-8859-1?Q?St=FCbner?= Cc: Zain Wang , David Airlie , dri-devel@lists.freedesktop.org, Tomasz Figa , Sean Paul , Laurent Pinchart , Sean Paul List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBNYXIgMjksIDIwMTkgYXQgMDc6NTE6NTFQTSArMDEwMCwgSGVpa28gU3TDvGJuZXIg d3JvdGU6Cj4gSGksCj4gCj4gQW0gRGllbnN0YWcsIDI2LiBNw6RyeiAyMDE5LCAyMTo0NDo1NiBD RVQgc2NocmllYiBTZWFuIFBhdWw6Cj4gPiBGcm9tOiBTZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9t aXVtLm9yZz4KPiA+IAo+ID4gSW5zdGVhZCBvZiByb2xsaW5nIG91ciBvd24gaW1wbGVtZW50YXRp b24gZm9yIHRyYWNraW5nIHdoZW4gUFNSIHNob3VsZAo+ID4gYmUgW2luXWFjdGl2ZSwgdXNlIHRo ZSBuZXcgc2VsZiByZWZyZXNoIGhlbHBlcnMgdG8gZG8gdGhlIGhlYXZ5IGxpZnRpbmcuCj4gCj4g SSBvbmx5IGdvdCBwYXRjaGVzIDMtNSBhbmQgaGFkIHRvIHB1bGwgMSsyIGZyb20gcGF0Y2h3b3Jr LCB0aGUgZm9sbG93aW5nCj4gYXBwbGllcyB0byB0aGUgd2hvbGUgc2VyaWVzIHRob3VnaC4KPiAK PiBXaGlsZSBteSBLZXZpbiBkaXNwbGF5IGRvZXMgc3RpbGwgZ2VuZXJhbGx5IHdvcmsgd2l0aCB0 aGVzZSA1IHBhdGNoZXMKPiBhcHBsaWVkIGZ1bmN0aW9uYWxpdHkgaGFzIHJlZ3Jlc3NlZCBzb21l aG93Lgo+IAo+IEVudmlyb25tZW50IGlzIGEgc3RhbmRhcmQgRGViaWFuIHdpdGggZnJhbWVidWZm ZXIgY29uc29sZSBhbmQgc2RkbQo+IGxvZ2luIG1hbmFnZXIuCgpBaGgsIHRoaXMgaXMgcHJvYmFi bHkgYi9jIGZiX2RpcnR5IGlzIG5vdCB0cmlnZ2VyaW5nIFBTUiBleGl0LiBJIGhhZCBpdAp3b3Jr aW5nIGluIHYxLCBidXQgcmVtb3ZlZCBpdCBpbiB2MiBzaW5jZSBEYW5pZWwgc3VnZ2VzdGVkIHdl IHJlcXVpcmUgdGhlCmZiX2RpcnR5IGhlbHBlcnMuIEkgbmVnbGVjdGVkIHRvIGFkZCBzdXBwb3J0 IGZvciB0aGUgZmJfZGlydHkgaGVscGVycywgc28gZmJjb24KdXBkYXRlcyB3b24ndCBjYXVzZSB0 aGUgc2NyZWVuIHRvIHJlZnJlc2guIEknbGwgYWRkIHRoZSBoZWxwZXJzIGluIHYzIGFuZCBtYWtl CnN1cmUgSSB0ZXN0IGl0IG91dCB3aXRoIGZiY29uLgoKVGhhbmtzIGZvciByZXBvcnRpbmcgdGhp cyEKClNlYW4KCj4gCj4gV2l0aCB0aGlzIHBhdGNoc2V0IGFwcGxpZWQsIHdoZW4gc2RkbSBzdGFy dHMgSSBvbmx5IGdldCB0aGUgc2VlIHRoZQo+IGxvZ2luIHNjcmVlbiBhZnRlciBJIG1vdmUgdGhl IG1vdXNlLCBzaW1pbGFybHkgdGhlIGJsaW5raW5nIGN1cnNvciBpbgo+IHRoZSBwYXNzd29yZCBm aWVsZCBhbHNvIG9ubHkgYmxpbmtzIHdoZW4gSSBhY3RpdmVseSBtb3ZlIHRoZSBjdXJzb3IKPiBh bmQgc3RvcHMgd2hlbiB0aGVyZSBpcyBubyBtb3VzZSBtb3ZlbWVudC4KPiAKPiBXaXRoIGFsbCA1 IHBhdGNoZXMgcmV2ZXJ0ZWQgdGhpcyBnb2VzIGJhY2sgdG8gbm9ybWFsLgo+IAo+IFNvIGl0IGxv b2tzIGxpa2UgdGhlIFBTUiBnZXRzIGEgYml0IHRvbyBhZ3Jlc3NpdmUgd2l0aCB0aGVzZT8KPiAK PiAKPiBIZWlrbwo+IAo+ID4gQ2hhbmdlcyBpbiB2MjoKPiA+IC0gdXBkYXRlZCB0byByZWZsZWN0 IGNoYW5nZXMgbWFkZSBpbiB0aGUgaGVscGVycwo+ID4gCj4gPiBMaW5rIHRvIHYxOiBodHRwczov L3BhdGNod29yay5mcmVlZGVza3RvcC5vcmcvcGF0Y2gvbXNnaWQvMjAxOTAyMjgyMTA5MzkuODMz ODYtNC1zZWFuQHBvb3JseS5ydW4KPiA+IAo+ID4gQ2M6IFphaW4gV2FuZyA8d3p6QHJvY2stY2hp cHMuY29tPgo+ID4gQ2M6IFRvbWFzeiBGaWdhIDx0ZmlnYUBjaHJvbWl1bS5vcmc+Cj4gPiBTaWdu ZWQtb2ZmLWJ5OiBTZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9taXVtLm9yZz4KPiA+IC0tLQo+ID4g IC4uLi9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4X2RwX2NvcmUuYyAgICB8IDIxMyArKysr KysrKy0tLS0tCj4gPiAgLi4uL2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBfY29yZS5o ICAgIHwgICAyICstCj4gPiAgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlICAgICAg ICAgICAgIHwgICAzICstCj4gPiAgLi4uL2dwdS9kcm0vcm9ja2NoaXAvYW5hbG9naXhfZHAtcm9j a2NoaXAuYyAgIHwgIDcwICsrLS0tCj4gPiAgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tj aGlwX2RybV9mYi5jICAgIHwgIDE2IC0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9j a2NoaXBfZHJtX3Bzci5jICAgfCAyOTAgLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiAgZHJpdmVycy9n cHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9wc3IuaCAgIHwgIDMwIC0tCj4gPiAgZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYyAgIHwgIDMzICstCj4gPiAgaW5j bHVkZS9kcm0vYnJpZGdlL2FuYWxvZ2l4X2RwLmggICAgICAgICAgICAgIHwgICA0ICstCj4gPiAg OSBmaWxlcyBjaGFuZ2VkLCAxODUgaW5zZXJ0aW9ucygrKSwgNDc2IGRlbGV0aW9ucygtKQo+ID4g IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJt X3Bzci5jCj4gPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9y b2NrY2hpcF9kcm1fcHNyLmgKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9i cmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBfY29yZS5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9hbmFsb2dpeC9hbmFsb2dpeF9kcF9jb3JlLmMKPiA+IGluZGV4IGFmMzQ1NTRhNWEwMi4uYzUw M2ZlM2JjM2IzIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dp eC9hbmFsb2dpeF9kcF9jb3JlLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5h bG9naXgvYW5hbG9naXhfZHBfY29yZS5jCj4gPiBAQCAtMTA2LDYzICsxMDYsMTMgQEAgc3RhdGlj IGludCBhbmFsb2dpeF9kcF9kZXRlY3RfaHBkKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRw KQo+ID4gIAlyZXR1cm4gMDsKPiA+ICB9Cj4gPiAgCj4gPiAtaW50IGFuYWxvZ2l4X2RwX3Bzcl9l bmFibGVkKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKQo+ID4gK2Jvb2wgYW5hbG9naXhf ZHBfc2VsZl9yZWZyZXNoX2NoYW5nZWQoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApCj4g PiAgewo+ID4gLQo+ID4gLQlyZXR1cm4gZHAtPnBzcl9lbmFibGU7Cj4gPiArCXJldHVybiBkcC0+ Y29ubmVjdG9yLnN0YXRlLT5zZWxmX3JlZnJlc2hfY2hhbmdlZDsKPiA+ICB9Cj4gPiAtRVhQT1JU X1NZTUJPTF9HUEwoYW5hbG9naXhfZHBfcHNyX2VuYWJsZWQpOwo+ID4gK0VYUE9SVF9TWU1CT0xf R1BMKGFuYWxvZ2l4X2RwX3NlbGZfcmVmcmVzaF9jaGFuZ2VkKTsKPiA+ICAKPiA+IC1pbnQgYW5h bG9naXhfZHBfZW5hYmxlX3BzcihzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCkKPiA+IC17 Cj4gPiAtCXN0cnVjdCBlZHBfdnNjX3BzciBwc3JfdnNjOwo+ID4gLQo+ID4gLQlpZiAoIWRwLT5w c3JfZW5hYmxlKQo+ID4gLQkJcmV0dXJuIDA7Cj4gPiAtCj4gPiAtCS8qIFByZXBhcmUgVlNDIHBh Y2tldCBhcyBwZXIgRURQIDEuNCBzcGVjLCBUYWJsZSA2LjkgKi8KPiA+IC0JbWVtc2V0KCZwc3Jf dnNjLCAwLCBzaXplb2YocHNyX3ZzYykpOwo+ID4gLQlwc3JfdnNjLnNkcF9oZWFkZXIuSEIwID0g MDsKPiA+IC0JcHNyX3ZzYy5zZHBfaGVhZGVyLkhCMSA9IDB4NzsKPiA+IC0JcHNyX3ZzYy5zZHBf aGVhZGVyLkhCMiA9IDB4MjsKPiA+IC0JcHNyX3ZzYy5zZHBfaGVhZGVyLkhCMyA9IDB4ODsKPiA+ IC0KPiA+IC0JcHNyX3ZzYy5EQjAgPSAwOwo+ID4gLQlwc3JfdnNjLkRCMSA9IEVEUF9WU0NfUFNS X1NUQVRFX0FDVElWRSB8IEVEUF9WU0NfUFNSX0NSQ19WQUxVRVNfVkFMSUQ7Cj4gPiAtCj4gPiAt CXJldHVybiBhbmFsb2dpeF9kcF9zZW5kX3Bzcl9zcGQoZHAsICZwc3JfdnNjLCB0cnVlKTsKPiA+ IC19Cj4gPiAtRVhQT1JUX1NZTUJPTF9HUEwoYW5hbG9naXhfZHBfZW5hYmxlX3Bzcik7Cj4gPiAt Cj4gPiAtaW50IGFuYWxvZ2l4X2RwX2Rpc2FibGVfcHNyKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZp Y2UgKmRwKQo+ID4gLXsKPiA+IC0Jc3RydWN0IGVkcF92c2NfcHNyIHBzcl92c2M7Cj4gPiAtCWlu dCByZXQ7Cj4gPiAtCj4gPiAtCWlmICghZHAtPnBzcl9lbmFibGUpCj4gPiAtCQlyZXR1cm4gMDsK PiA+IC0KPiA+IC0JLyogUHJlcGFyZSBWU0MgcGFja2V0IGFzIHBlciBFRFAgMS40IHNwZWMsIFRh YmxlIDYuOSAqLwo+ID4gLQltZW1zZXQoJnBzcl92c2MsIDAsIHNpemVvZihwc3JfdnNjKSk7Cj4g PiAtCXBzcl92c2Muc2RwX2hlYWRlci5IQjAgPSAwOwo+ID4gLQlwc3JfdnNjLnNkcF9oZWFkZXIu SEIxID0gMHg3Owo+ID4gLQlwc3JfdnNjLnNkcF9oZWFkZXIuSEIyID0gMHgyOwo+ID4gLQlwc3Jf dnNjLnNkcF9oZWFkZXIuSEIzID0gMHg4Owo+ID4gLQo+ID4gLQlwc3JfdnNjLkRCMCA9IDA7Cj4g PiAtCXBzcl92c2MuREIxID0gMDsKPiA+IC0KPiA+IC0JcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGVi KCZkcC0+YXV4LCBEUF9TRVRfUE9XRVIsIERQX1NFVF9QT1dFUl9EMCk7Cj4gPiAtCWlmIChyZXQg IT0gMSkgewo+ID4gLQkJZGV2X2VycihkcC0+ZGV2LCAiRmFpbGVkIHRvIHNldCBEUCBQb3dlcjAg JWRcbiIsIHJldCk7Cj4gPiAtCQlyZXR1cm4gcmV0Owo+ID4gLQl9Cj4gPiAtCj4gPiAtCXJldHVy biBhbmFsb2dpeF9kcF9zZW5kX3Bzcl9zcGQoZHAsICZwc3JfdnNjLCBmYWxzZSk7Cj4gPiAtfQo+ ID4gLUVYUE9SVF9TWU1CT0xfR1BMKGFuYWxvZ2l4X2RwX2Rpc2FibGVfcHNyKTsKPiA+IC0KPiA+ IC1zdGF0aWMgaW50IGFuYWxvZ2l4X2RwX2RldGVjdF9zaW5rX3BzcihzdHJ1Y3QgYW5hbG9naXhf ZHBfZGV2aWNlICpkcCkKPiA+ICtzdGF0aWMgYm9vbCBhbmFsb2dpeF9kcF9kZXRlY3Rfc2lua19w c3Ioc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApCj4gPiAgewo+ID4gIAl1bnNpZ25lZCBj aGFyIHBzcl92ZXJzaW9uOwo+ID4gIAlpbnQgcmV0Owo+ID4gQEAgLTE3MCwxNCArMTIwLDExIEBA IHN0YXRpYyBpbnQgYW5hbG9naXhfZHBfZGV0ZWN0X3NpbmtfcHNyKHN0cnVjdCBhbmFsb2dpeF9k cF9kZXZpY2UgKmRwKQo+ID4gIAlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkYigmZHAtPmF1eCwgRFBf UFNSX1NVUFBPUlQsICZwc3JfdmVyc2lvbik7Cj4gPiAgCWlmIChyZXQgIT0gMSkgewo+ID4gIAkJ ZGV2X2VycihkcC0+ZGV2LCAiZmFpbGVkIHRvIGdldCBQU1IgdmVyc2lvbiwgZGlzYWJsZSBpdFxu Iik7Cj4gPiAtCQlyZXR1cm4gcmV0Owo+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ID4gIAl9Cj4gPiAg Cj4gPiAgCWRldl9kYmcoZHAtPmRldiwgIlBhbmVsIFBTUiB2ZXJzaW9uIDogJXhcbiIsIHBzcl92 ZXJzaW9uKTsKPiA+IC0KPiA+IC0JZHAtPnBzcl9lbmFibGUgPSAocHNyX3ZlcnNpb24gJiBEUF9Q U1JfSVNfU1VQUE9SVEVEKSA/IHRydWUgOiBmYWxzZTsKPiA+IC0KPiA+IC0JcmV0dXJuIDA7Cj4g PiArCXJldHVybiBwc3JfdmVyc2lvbiAmIERQX1BTUl9JU19TVVBQT1JURUQ7Cj4gPiAgfQo+ID4g IAo+ID4gIHN0YXRpYyBpbnQgYW5hbG9naXhfZHBfZW5hYmxlX3NpbmtfcHNyKHN0cnVjdCBhbmFs b2dpeF9kcF9kZXZpY2UgKmRwKQo+ID4gQEAgLTIwMCw3ICsxNDcsNyBAQCBzdGF0aWMgaW50IGFu YWxvZ2l4X2RwX2VuYWJsZV9zaW5rX3BzcihzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCkK PiA+ICAJfQo+ID4gIAo+ID4gIAkvKiBNYWluLUxpbmsgdHJhbnNtaXR0ZXIgcmVtYWlucyBhY3Rp dmUgZHVyaW5nIFBTUiBhY3RpdmUgc3RhdGVzICovCj4gPiAtCXBzcl9lbiA9IERQX1BTUl9NQUlO X0xJTktfQUNUSVZFIHwgRFBfUFNSX0NSQ19WRVJJRklDQVRJT047Cj4gPiArCXBzcl9lbiA9IERQ X1BTUl9DUkNfVkVSSUZJQ0FUSU9OOwo+ID4gIAlyZXQgPSBkcm1fZHBfZHBjZF93cml0ZWIoJmRw LT5hdXgsIERQX1BTUl9FTl9DRkcsIHBzcl9lbik7Cj4gPiAgCWlmIChyZXQgIT0gMSkgewo+ID4g IAkJZGV2X2VycihkcC0+ZGV2LCAiZmFpbGVkIHRvIHNldCBwYW5lbCBwc3JcbiIpOwo+ID4gQEAg LTIwOCw4ICsxNTUsNyBAQCBzdGF0aWMgaW50IGFuYWxvZ2l4X2RwX2VuYWJsZV9zaW5rX3Bzcihz dHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCkKPiA+ICAJfQo+ID4gIAo+ID4gIAkvKiBFbmFi bGUgcHNyIGZ1bmN0aW9uICovCj4gPiAtCXBzcl9lbiA9IERQX1BTUl9FTkFCTEUgfCBEUF9QU1Jf TUFJTl9MSU5LX0FDVElWRSB8Cj4gPiAtCQkgRFBfUFNSX0NSQ19WRVJJRklDQVRJT047Cj4gPiAr CXBzcl9lbiA9IERQX1BTUl9FTkFCTEUgfCBEUF9QU1JfQ1JDX1ZFUklGSUNBVElPTjsKPiA+ICAJ cmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGViKCZkcC0+YXV4LCBEUF9QU1JfRU5fQ0ZHLCBwc3JfZW4p Owo+ID4gIAlpZiAocmV0ICE9IDEpIHsKPiA+ICAJCWRldl9lcnIoZHAtPmRldiwgImZhaWxlZCB0 byBzZXQgcGFuZWwgcHNyXG4iKTsKPiA+IEBAIC0yMTgsMTAgKzE2NCwxMSBAQCBzdGF0aWMgaW50 IGFuYWxvZ2l4X2RwX2VuYWJsZV9zaW5rX3BzcihzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpk cCkKPiA+ICAKPiA+ICAJYW5hbG9naXhfZHBfZW5hYmxlX3Bzcl9jcmMoZHApOwo+ID4gIAo+ID4g KwlkcC0+cHNyX3N1cHBvcnRlZCA9IHRydWU7Cj4gPiArCj4gPiAgCXJldHVybiAwOwo+ID4gIGVu ZDoKPiA+ICAJZGV2X2VycihkcC0+ZGV2LCAiZW5hYmxlIHBzciBmYWlsLCBmb3JjZSB0byBkaXNh YmxlIHBzclxuIik7Cj4gPiAtCWRwLT5wc3JfZW5hYmxlID0gZmFsc2U7Cj4gPiAgCj4gPiAgCXJl dHVybiByZXQ7Cj4gPiAgfQo+ID4gQEAgLTEwMzYsMjUgKzk4Myw5MCBAQCBzdGF0aWMgaW50IGFu YWxvZ2l4X2RwX2NvbW1pdChzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCkKPiA+ICAJCX0K PiA+ICAJfQo+ID4gIAo+ID4gLQlyZXQgPSBhbmFsb2dpeF9kcF9kZXRlY3Rfc2lua19wc3IoZHAp Owo+ID4gLQlpZiAocmV0KQo+ID4gLQkJcmV0dXJuIHJldDsKPiA+IC0KPiA+ICAJLyogQ2hlY2sg d2hldGhlciBwYW5lbCBzdXBwb3J0cyBmYXN0IHRyYWluaW5nICovCj4gPiAgCXJldCA9IGFuYWxv Z2l4X2RwX2Zhc3RfbGlua190cmFpbl9kZXRlY3Rpb24oZHApOwo+ID4gIAlpZiAocmV0KQo+ID4g LQkJZHAtPnBzcl9lbmFibGUgPSBmYWxzZTsKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiAgCj4gPiAt CWlmIChkcC0+cHNyX2VuYWJsZSkgewo+ID4gKwlpZiAoYW5hbG9naXhfZHBfZGV0ZWN0X3Npbmtf cHNyKGRwKSkgewo+ID4gIAkJcmV0ID0gYW5hbG9naXhfZHBfZW5hYmxlX3NpbmtfcHNyKGRwKTsK PiA+ICAJCWlmIChyZXQpCj4gPiAgCQkJcmV0dXJuIHJldDsKPiA+ICAJfQo+ID4gIAo+ID4gKwly ZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGFuYWxvZ2l4X2RwX2VuYWJs ZV9wc3Ioc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApCj4gPiArewo+ID4gKwlzdHJ1Y3Qg ZWRwX3ZzY19wc3IgcHNyX3ZzYzsKPiA+ICsJaW50IHJldDsKPiA+ICsJdTggc2luazsKPiA+ICsK PiA+ICsJcmV0ID0gZHJtX2RwX2RwY2RfcmVhZGIoJmRwLT5hdXgsIERQX1BTUl9TVEFUVVMsICZz aW5rKTsKPiA+ICsJaWYgKHJldCAhPSAxKQo+ID4gKwkJRFJNX0RFVl9FUlJPUihkcC0+ZGV2LCAi RmFpbGVkIHRvIHJlYWQgcHNyIHN0YXR1cyAlZFxuIiwgcmV0KTsKPiA+ICsJZWxzZSBpZiAoc2lu ayA9PSBEUF9QU1JfU0lOS19BQ1RJVkVfUkZCKQo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCj4gPiAr CS8qIFByZXBhcmUgVlNDIHBhY2tldCBhcyBwZXIgRURQIDEuNCBzcGVjLCBUYWJsZSA2LjkgKi8K PiA+ICsJbWVtc2V0KCZwc3JfdnNjLCAwLCBzaXplb2YocHNyX3ZzYykpOwo+ID4gKwlwc3JfdnNj LnNkcF9oZWFkZXIuSEIwID0gMDsKPiA+ICsJcHNyX3ZzYy5zZHBfaGVhZGVyLkhCMSA9IDB4NzsK PiA+ICsJcHNyX3ZzYy5zZHBfaGVhZGVyLkhCMiA9IDB4MjsKPiA+ICsJcHNyX3ZzYy5zZHBfaGVh ZGVyLkhCMyA9IDB4ODsKPiA+ICsJcHNyX3ZzYy5EQjAgPSAwOwo+ID4gKwlwc3JfdnNjLkRCMSA9 IEVEUF9WU0NfUFNSX1NUQVRFX0FDVElWRSB8IEVEUF9WU0NfUFNSX0NSQ19WQUxVRVNfVkFMSUQ7 Cj4gPiArCj4gPiArCXJldCA9IGFuYWxvZ2l4X2RwX3NlbmRfcHNyX3NwZChkcCwgJnBzcl92c2Ms IHRydWUpOwo+ID4gKwlpZiAoIXJldCkKPiA+ICsJCWFuYWxvZ2l4X2RwX3NldF9hbmFsb2dfcG93 ZXJfZG93bihkcCwgUE9XRVJfQUxMLCB0cnVlKTsKPiA+ICAKPiA+ICAJcmV0dXJuIHJldDsKPiA+ ICB9Cj4gPiAgCj4gPiArc3RhdGljIGludCBhbmFsb2dpeF9kcF9kaXNhYmxlX3BzcihzdHJ1Y3Qg YW5hbG9naXhfZHBfZGV2aWNlICpkcCkKPiA+ICt7Cj4gPiArCXN0cnVjdCBlZHBfdnNjX3BzciBw c3JfdnNjOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwl1OCBzaW5rOwo+ID4gKwo+ID4gKwlhbmFsb2dp eF9kcF9zZXRfYW5hbG9nX3Bvd2VyX2Rvd24oZHAsIFBPV0VSX0FMTCwgZmFsc2UpOwo+ID4gKwo+ ID4gKwlyZXQgPSBkcm1fZHBfZHBjZF93cml0ZWIoJmRwLT5hdXgsIERQX1NFVF9QT1dFUiwgRFBf U0VUX1BPV0VSX0QwKTsKPiA+ICsJaWYgKHJldCAhPSAxKSB7Cj4gPiArCQlEUk1fREVWX0VSUk9S KGRwLT5kZXYsICJGYWlsZWQgdG8gc2V0IERQIFBvd2VyMCAlZFxuIiwgcmV0KTsKPiA+ICsJCXJl dHVybiByZXQ7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0ID0gZHJtX2RwX2RwY2RfcmVhZGIoJmRw LT5hdXgsIERQX1BTUl9TVEFUVVMsICZzaW5rKTsKPiA+ICsJaWYgKHJldCAhPSAxKSB7Cj4gPiAr CQlEUk1fREVWX0VSUk9SKGRwLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBwc3Igc3RhdHVzICVkXG4i LCByZXQpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfSBlbHNlIGlmIChzaW5rID09IERQX1BT Ul9TSU5LX0lOQUNUSVZFKSB7Cj4gPiArCQlEUk1fREVWX0VSUk9SKGRwLT5kZXYsICJzaW5rIGlu YWN0aXZlLCBza2lwIGRpc2FibGUgcHNyIik7Cj4gPiArCQlyZXR1cm4gMDsKPiA+ICsJfQo+ID4g Kwo+ID4gKwlyZXQgPSBhbmFsb2dpeF9kcF90cmFpbl9saW5rKGRwKTsKPiA+ICsJaWYgKHJldCkg ewo+ID4gKwkJRFJNX0RFVl9FUlJPUihkcC0+ZGV2LCAiRmFpbGVkIHRvIHRyYWluIHRoZSBsaW5r ICVkXG4iLCByZXQpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwkvKiBQ cmVwYXJlIFZTQyBwYWNrZXQgYXMgcGVyIEVEUCAxLjQgc3BlYywgVGFibGUgNi45ICovCj4gPiAr CW1lbXNldCgmcHNyX3ZzYywgMCwgc2l6ZW9mKHBzcl92c2MpKTsKPiA+ICsJcHNyX3ZzYy5zZHBf aGVhZGVyLkhCMCA9IDA7Cj4gPiArCXBzcl92c2Muc2RwX2hlYWRlci5IQjEgPSAweDc7Cj4gPiAr CXBzcl92c2Muc2RwX2hlYWRlci5IQjIgPSAweDI7Cj4gPiArCXBzcl92c2Muc2RwX2hlYWRlci5I QjMgPSAweDg7Cj4gPiArCj4gPiArCXBzcl92c2MuREIwID0gMDsKPiA+ICsJcHNyX3ZzYy5EQjEg PSAwOwo+ID4gKwo+ID4gKwlyZXR1cm4gYW5hbG9naXhfZHBfc2VuZF9wc3Jfc3BkKGRwLCAmcHNy X3ZzYywgdHJ1ZSk7Cj4gPiArfQo+ID4gKwo+ID4gIC8qCj4gPiAgICogVGhpcyBmdW5jdGlvbiBp cyBhIGJpdCBvZiBhIGNhdGNoLWFsbCBmb3IgcGFuZWwgcHJlcGFyYXRpb24sIGhvcGVmdWxseQo+ ID4gICAqIHNpbXBsaWZ5aW5nIHRoZSBsb2dpYyBvZiBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIHBy ZXBhcmUvdW5wcmVwYXJlIHRoZSBwYW5lbAo+ID4gQEAgLTExNDUsOSArMTE1NywyMyBAQCBhbmFs b2dpeF9kcF9iZXN0X2VuY29kZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiA+ ICAJcmV0dXJuIGRwLT5lbmNvZGVyOwo+ID4gIH0KPiA+ICAKPiA+ICsKPiA+ICtpbnQgYW5hbG9n aXhfZHBfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiAr CQkJICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUpCj4gPiArewo+ID4gKwlz dHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCA9IHRvX2RwKGNvbm5lY3Rvcik7Cj4gPiArCj4g PiArCXN0YXRlLT5zZWxmX3JlZnJlc2hfYXdhcmUgPSB0cnVlOwo+ID4gKwlpZiAoc3RhdGUtPnNl bGZfcmVmcmVzaF9hY3RpdmUgJiYgIWRwLT5wc3Jfc3VwcG9ydGVkKQo+ID4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICBzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIGFuYWxvZ2l4X2RwX2Nvbm5lY3Rv cl9oZWxwZXJfZnVuY3MgPSB7Cj4gPiAgCS5nZXRfbW9kZXMgPSBhbmFsb2dpeF9kcF9nZXRfbW9k ZXMsCj4gPiAgCS5iZXN0X2VuY29kZXIgPSBhbmFsb2dpeF9kcF9iZXN0X2VuY29kZXIsCj4gPiAr CS5hdG9taWNfY2hlY2sgPSBhbmFsb2dpeF9kcF9hdG9taWNfY2hlY2ssCj4gPiAgfTsKPiA+ICAK PiA+ICBzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cwo+ID4gQEAgLTEyNDQsNiArMTI3 MCwxMCBAQCBzdGF0aWMgdm9pZCBhbmFsb2dpeF9kcF9icmlkZ2VfcHJlX2VuYWJsZShzdHJ1Y3Qg ZHJtX2JyaWRnZSAqYnJpZGdlKQo+ID4gIAlzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCA9 IGJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7Cj4gPiAgCWludCByZXQ7Cj4gPiAgCj4gPiArCS8qIERv bid0IHRvdWNoIHRoZSBwYW5lbCBpZiB3ZSdyZSBjb21pbmcgYmFjayBmcm9tIFBTUiAqLwo+ID4g KwlpZiAoZHAtPmNvbm5lY3Rvci5zdGF0ZS0+c2VsZl9yZWZyZXNoX2NoYW5nZWQpCj4gPiArCQly ZXR1cm47Cj4gPiArCj4gPiAgCXJldCA9IGFuYWxvZ2l4X2RwX3ByZXBhcmVfcGFuZWwoZHAsIHRy dWUsIHRydWUpOwo+ID4gIAlpZiAocmV0KQo+ID4gIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0 dXAgdGhlIHBhbmVsIHJldCA9ICVkXG4iLCByZXQpOwo+ID4gQEAgLTEzMDksNiArMTMzOSwxNCBA QCBzdGF0aWMgdm9pZCBhbmFsb2dpeF9kcF9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdl ICpicmlkZ2UpCj4gPiAgCXN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwID0gYnJpZGdlLT5k cml2ZXJfcHJpdmF0ZTsKPiA+ICAJaW50IHRpbWVvdXRfbG9vcCA9IDA7Cj4gPiAgCj4gPiArCS8q IE5vdCBhIGZ1bGwgZW5hYmxlLCBqdXN0IGRpc2FibGUgUFNSIGFuZCBjb250aW51ZSAqLwo+ID4g KwlpZiAoZHAtPmNvbm5lY3Rvci5zdGF0ZS0+c2VsZl9yZWZyZXNoX2NoYW5nZWQpIHsKPiA+ICsJ CWludCByZXQgPSBhbmFsb2dpeF9kcF9kaXNhYmxlX3BzcihkcCk7Cj4gPiArCQlpZiAocmV0KQo+ ID4gKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGRpc2FibGUgcHNyICVkXG4iLCByZXQpOwo+ID4g KwkJcmV0dXJuOwo+ID4gKwl9Cj4gPiArCj4gPiAgCWlmIChkcC0+ZHBtc19tb2RlID09IERSTV9N T0RFX0RQTVNfT04pCj4gPiAgCQlyZXR1cm47Cj4gPiAgCj4gPiBAQCAtMTM1NiwxMSArMTM5NCwz NyBAQCBzdGF0aWMgdm9pZCBhbmFsb2dpeF9kcF9icmlkZ2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2Jy aWRnZSAqYnJpZGdlKQo+ID4gIAlpZiAocmV0KQo+ID4gIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8g c2V0dXAgdGhlIHBhbmVsIHJldCA9ICVkXG4iLCByZXQpOwo+ID4gIAo+ID4gLQlkcC0+cHNyX2Vu YWJsZSA9IGZhbHNlOwo+ID4gIAlkcC0+ZmFzdF90cmFpbl9lbmFibGUgPSBmYWxzZTsKPiA+ICsJ ZHAtPnBzcl9zdXBwb3J0ZWQgPSBmYWxzZTsKPiA+ICAJZHAtPmRwbXNfbW9kZSA9IERSTV9NT0RF X0RQTVNfT0ZGOwo+ID4gIH0KPiA+ICAKPiA+ICtzdGF0aWMgdm9pZCBhbmFsb2dpeF9kcF9icmlk Z2VfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiA+ICt7Cj4gPiAr CXN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwID0gYnJpZGdlLT5kcml2ZXJfcHJpdmF0ZTsK PiA+ICsJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUgPSBkcC0+Y29ubmVj dG9yLnN0YXRlOwo+ID4gKwo+ID4gKwkvKiBEb24ndCBkbyBhIGZ1bGwgZGlzYWJsZSBvbiBQU1Ig dHJhbnNpdGlvbnMgKi8KPiA+ICsJaWYgKGNvbm5fc3RhdGUtPmNydGMgJiYgY29ubl9zdGF0ZS0+ c2VsZl9yZWZyZXNoX2NoYW5nZWQpCj4gPiArCQlyZXR1cm47Cj4gPiArCj4gPiArCWFuYWxvZ2l4 X2RwX2JyaWRnZV9kaXNhYmxlKGJyaWRnZSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lk IGFuYWxvZ2l4X2RwX2JyaWRnZV9wb3N0X2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwID0gYnJpZGdlLT5k cml2ZXJfcHJpdmF0ZTsKPiA+ICsJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3Rh dGUgPSBkcC0+Y29ubmVjdG9yLnN0YXRlOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlpZiAo Y29ubl9zdGF0ZS0+c2VsZl9yZWZyZXNoX2FjdGl2ZSkgewo+ID4gKwkJcmV0ID0gYW5hbG9naXhf ZHBfZW5hYmxlX3BzcihkcCk7Cj4gPiArCQlpZiAocmV0KQo+ID4gKwkJCURSTV9FUlJPUigiRmFp bGVkIHRvIGVuYWJsZSBwc3IgKCVkKVxuIiwgcmV0KTsKPiA+ICsJCXJldHVybjsKPiA+ICsJfQo+ ID4gK30KPiA+ICsKPiA+ICBzdGF0aWMgdm9pZCBhbmFsb2dpeF9kcF9icmlkZ2VfbW9kZV9zZXQo c3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiA+ICAJCQkJY29uc3Qgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm9yaWdfbW9kZSwKPiA+ICAJCQkJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGUpCj4gPiBAQCAtMTQ0MCwxNiArMTUwNCwxMSBAQCBzdGF0aWMgdm9pZCBhbmFsb2dp eF9kcF9icmlkZ2VfbW9kZV9zZXQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiA+ICAJCXZp ZGVvLT5pbnRlcmxhY2VkID0gdHJ1ZTsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIHZvaWQgYW5h bG9naXhfZHBfYnJpZGdlX25vcChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ID4gLXsKPiA+ IC0JLyogZG8gbm90aGluZyAqLwo+ID4gLX0KPiA+IC0KPiA+ICBzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9icmlkZ2VfZnVuY3MgYW5hbG9naXhfZHBfYnJpZGdlX2Z1bmNzID0gewo+ID4gIAkucHJl X2VuYWJsZSA9IGFuYWxvZ2l4X2RwX2JyaWRnZV9wcmVfZW5hYmxlLAo+ID4gIAkuZW5hYmxlID0g YW5hbG9naXhfZHBfYnJpZGdlX2VuYWJsZSwKPiA+IC0JLmRpc2FibGUgPSBhbmFsb2dpeF9kcF9i cmlkZ2VfZGlzYWJsZSwKPiA+IC0JLnBvc3RfZGlzYWJsZSA9IGFuYWxvZ2l4X2RwX2JyaWRnZV9u b3AsCj4gPiArCS5kaXNhYmxlID0gYW5hbG9naXhfZHBfYnJpZGdlX2F0b21pY19kaXNhYmxlLAo+ ID4gKwkucG9zdF9kaXNhYmxlID0gYW5hbG9naXhfZHBfYnJpZGdlX3Bvc3RfZGlzYWJsZSwKPiA+ ICAJLm1vZGVfc2V0ID0gYW5hbG9naXhfZHBfYnJpZGdlX21vZGVfc2V0LAo+ID4gIAkuYXR0YWNo ID0gYW5hbG9naXhfZHBfYnJpZGdlX2F0dGFjaCwKPiA+ICB9Owo+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBfY29yZS5oIGIvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeF9kcF9jb3JlLmgKPiA+IGluZGV4IDc2 OTI1NWRjNmU5OS4uZDkzN2ZhM2Q5ZWU4IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeF9kcF9jb3JlLmgKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBfY29yZS5oCj4gPiBAQCAtMTczLDggKzE3 Myw4IEBAIHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2Ugewo+ID4gIAlpbnQJCQlkcG1zX21vZGU7 Cj4gPiAgCWludAkJCWhwZF9ncGlvOwo+ID4gIAlib29sICAgICAgICAgICAgICAgICAgICBmb3Jj ZV9ocGQ7Cj4gPiAtCWJvb2wJCQlwc3JfZW5hYmxlOwo+ID4gIAlib29sCQkJZmFzdF90cmFpbl9l bmFibGU7Cj4gPiArCWJvb2wJCQlwc3Jfc3VwcG9ydGVkOwo+ID4gIAo+ID4gIAlzdHJ1Y3QgbXV0 ZXgJCXBhbmVsX2xvY2s7Cj4gPiAgCWJvb2wJCQlwYW5lbF9pc19tb2Rlc2V0Owo+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9NYWtlZmlsZQo+ID4gaW5kZXggZjZmYzlkNWRkMGFkLi5hNzc3NzI2YzIzY2Ig MTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKPiA+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZQo+ID4gQEAgLTQsOCArNCw3IEBA Cj4gPiAgIyBEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlIChEUkkpIGluIFhGcmVlODYg NC4xLjAgYW5kIGhpZ2hlci4KPiA+ICAKPiA+ICByb2NrY2hpcGRybS15IDo9IHJvY2tjaGlwX2Ry bV9kcnYubyByb2NrY2hpcF9kcm1fZmIubyBcCj4gPiAtCQlyb2NrY2hpcF9kcm1fZ2VtLm8gcm9j a2NoaXBfZHJtX3Bzci5vIFwKPiA+IC0JCXJvY2tjaGlwX2RybV92b3AubyByb2NrY2hpcF92b3Bf cmVnLm8KPiA+ICsJCXJvY2tjaGlwX2RybV9nZW0ubyByb2NrY2hpcF9kcm1fdm9wLm8gcm9ja2No aXBfdm9wX3JlZy5vCj4gPiAgcm9ja2NoaXBkcm0tJChDT05GSUdfRFJNX0ZCREVWX0VNVUxBVElP TikgKz0gcm9ja2NoaXBfZHJtX2ZiZGV2Lm8KPiA+ICAKPiA+ICByb2NrY2hpcGRybS0kKENPTkZJ R19ST0NLQ0hJUF9BTkFMT0dJWF9EUCkgKz0gYW5hbG9naXhfZHAtcm9ja2NoaXAubwo+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9hbmFsb2dpeF9kcC1yb2NrY2hpcC5j IGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2FuYWxvZ2l4X2RwLXJvY2tjaGlwLmMKPiA+IGlu ZGV4IGJjNDQyMzYyNDIwOS4uOGY0MmMzODg0OGRiIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL3JvY2tjaGlwL2FuYWxvZ2l4X2RwLXJvY2tjaGlwLmMKPiA+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9yb2NrY2hpcC9hbmFsb2dpeF9kcC1yb2NrY2hpcC5jCj4gPiBAQCAtMzIsNyArMzIs NiBAQAo+ID4gICNpbmNsdWRlIDxkcm0vYnJpZGdlL2FuYWxvZ2l4X2RwLmg+Cj4gPiAgCj4gPiAg I2luY2x1ZGUgInJvY2tjaGlwX2RybV9kcnYuaCIKPiA+IC0jaW5jbHVkZSAicm9ja2NoaXBfZHJt X3Bzci5oIgo+ID4gICNpbmNsdWRlICJyb2NrY2hpcF9kcm1fdm9wLmgiCj4gPiAgCj4gPiAgI2Rl ZmluZSBSSzMyODhfR1JGX1NPQ19DT042CQkweDI1Ywo+ID4gQEAgLTc3LDI5ICs3Niw2IEBAIHN0 cnVjdCByb2NrY2hpcF9kcF9kZXZpY2Ugewo+ID4gIAlzdHJ1Y3QgYW5hbG9naXhfZHBfcGxhdF9k YXRhIHBsYXRfZGF0YTsKPiA+ICB9Owo+ID4gIAo+ID4gLXN0YXRpYyBpbnQgYW5hbG9naXhfZHBf cHNyX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGJvb2wgZW5hYmxlZCkKPiA+IC17 Cj4gPiAtCXN0cnVjdCByb2NrY2hpcF9kcF9kZXZpY2UgKmRwID0gdG9fZHAoZW5jb2Rlcik7Cj4g PiAtCWludCByZXQ7Cj4gPiAtCj4gPiAtCWlmICghYW5hbG9naXhfZHBfcHNyX2VuYWJsZWQoZHAt PmFkcCkpCj4gPiAtCQlyZXR1cm4gMDsKPiA+IC0KPiA+IC0JRFJNX0RFVl9ERUJVRyhkcC0+ZGV2 LCAiJXMgUFNSLi4uXG4iLCBlbmFibGVkID8gIkVudHJ5IiA6ICJFeGl0Iik7Cj4gPiAtCj4gPiAt CXJldCA9IHJvY2tjaGlwX2RybV93YWl0X3ZhY3RfZW5kKGRwLT5lbmNvZGVyLmNydGMsCj4gPiAt CQkJCQkgUFNSX1dBSVRfTElORV9GTEFHX1RJTUVPVVRfTVMpOwo+ID4gLQlpZiAocmV0KSB7Cj4g PiAtCQlEUk1fREVWX0VSUk9SKGRwLT5kZXYsICJsaW5lIGZsYWcgaW50ZXJydXB0IGRpZCBub3Qg YXJyaXZlXG4iKTsKPiA+IC0JCXJldHVybiAtRVRJTUVET1VUOwo+ID4gLQl9Cj4gPiAtCj4gPiAt CWlmIChlbmFibGVkKQo+ID4gLQkJcmV0dXJuIGFuYWxvZ2l4X2RwX2VuYWJsZV9wc3IoZHAtPmFk cCk7Cj4gPiAtCWVsc2UKPiA+IC0JCXJldHVybiBhbmFsb2dpeF9kcF9kaXNhYmxlX3BzcihkcC0+ YWRwKTsKPiA+IC19Cj4gPiAtCj4gPiAgc3RhdGljIGludCByb2NrY2hpcF9kcF9wcmVfaW5pdChz dHJ1Y3Qgcm9ja2NoaXBfZHBfZGV2aWNlICpkcCkKPiA+ICB7Cj4gPiAgCXJlc2V0X2NvbnRyb2xf YXNzZXJ0KGRwLT5yc3QpOwo+ID4gQEAgLTEzMCwyMSArMTA2LDkgQEAgc3RhdGljIGludCByb2Nr Y2hpcF9kcF9wb3dlcm9uX3N0YXJ0KHN0cnVjdCBhbmFsb2dpeF9kcF9wbGF0X2RhdGEgKnBsYXRf ZGF0YSkKPiA+ICAJcmV0dXJuIHJldDsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIGludCByb2Nr Y2hpcF9kcF9wb3dlcm9uX2VuZChzdHJ1Y3QgYW5hbG9naXhfZHBfcGxhdF9kYXRhICpwbGF0X2Rh dGEpCj4gPiAtewo+ID4gLQlzdHJ1Y3Qgcm9ja2NoaXBfZHBfZGV2aWNlICpkcCA9IHRvX2RwKHBs YXRfZGF0YSk7Cj4gPiAtCj4gPiAtCXJldHVybiByb2NrY2hpcF9kcm1fcHNyX2luaGliaXRfcHV0 KCZkcC0+ZW5jb2Rlcik7Cj4gPiAtfQo+ID4gLQo+ID4gIHN0YXRpYyBpbnQgcm9ja2NoaXBfZHBf cG93ZXJkb3duKHN0cnVjdCBhbmFsb2dpeF9kcF9wbGF0X2RhdGEgKnBsYXRfZGF0YSkKPiA+ICB7 Cj4gPiAgCXN0cnVjdCByb2NrY2hpcF9kcF9kZXZpY2UgKmRwID0gdG9fZHAocGxhdF9kYXRhKTsK PiA+IC0JaW50IHJldDsKPiA+IC0KPiA+IC0JcmV0ID0gcm9ja2NoaXBfZHJtX3Bzcl9pbmhpYml0 X2dldCgmZHAtPmVuY29kZXIpOwo+ID4gLQlpZiAocmV0ICE9IDApCj4gPiAtCQlyZXR1cm4gcmV0 Owo+ID4gIAo+ID4gIAljbGtfZGlzYWJsZV91bnByZXBhcmUoZHAtPnBjbGspOwo+ID4gIAo+ID4g QEAgLTE5MCw2ICsxNTQsOSBAQCBzdGF0aWMgdm9pZCByb2NrY2hpcF9kcF9kcm1fZW5jb2Rlcl9l bmFibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQo+ID4gIAlpbnQgcmV0Owo+ID4gIAl1 MzIgdmFsOwo+ID4gIAo+ID4gKwlpZiAoYW5hbG9naXhfZHBfc2VsZl9yZWZyZXNoX2NoYW5nZWQo ZHAtPmFkcCkpCj4gPiArCQlyZXR1cm47Cj4gPiArCj4gPiAgCXJldCA9IGRybV9vZl9lbmNvZGVy X2FjdGl2ZV9lbmRwb2ludF9pZChkcC0+ZGV2LT5vZl9ub2RlLCBlbmNvZGVyKTsKPiA+ICAJaWYg KHJldCA8IDApCj4gPiAgCQlyZXR1cm47Cj4gPiBAQCAtMjE0LDkgKzE4MSwyNCBAQCBzdGF0aWMg dm9pZCByb2NrY2hpcF9kcF9kcm1fZW5jb2Rlcl9lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyKQo+ID4gIAljbGtfZGlzYWJsZV91bnByZXBhcmUoZHAtPmdyZmNsayk7Cj4gPiAgfQo+ ID4gIAo+ID4gLXN0YXRpYyB2b2lkIHJvY2tjaGlwX2RwX2RybV9lbmNvZGVyX25vcChzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXIpCj4gPiArc3RhdGljIHZvaWQgcm9ja2NoaXBfZHBfZHJtX2Vu Y29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCj4gPiAgewo+ID4gLQkv KiBkbyBub3RoaW5nICovCj4gPiArCXN0cnVjdCByb2NrY2hpcF9kcF9kZXZpY2UgKmRwID0gdG9f ZHAoZW5jb2Rlcik7Cj4gPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiA+ICsJaW50IHJldDsK PiA+ICsKPiA+ICsJZHJtX2Zvcl9lYWNoX2NydGMoY3J0YywgZHAtPmRybV9kZXYpIHsKPiA+ICsJ CWlmICghKGNydGMtPnN0YXRlLT5lbmNvZGVyX21hc2sgJiBkcm1fZW5jb2Rlcl9tYXNrKGVuY29k ZXIpKSkKPiA+ICsJCQljb250aW51ZTsKPiA+ICsKPiA+ICsJCWlmICghY3J0Yy0+c3RhdGUtPnNl bGZfcmVmcmVzaF9hY3RpdmUpCj4gPiArCQkJY29udGludWU7Cj4gPiArCj4gPiArCQlyZXQgPSBy b2NrY2hpcF9kcm1fd2FpdF92YWN0X2VuZChjcnRjLAo+ID4gKwkJCQkJCSBQU1JfV0FJVF9MSU5F X0ZMQUdfVElNRU9VVF9NUyk7Cj4gPiArCQlpZiAocmV0KQo+ID4gKwkJCURSTV9ERVZfRVJST1Io ZHAtPmRldiwgImxpbmUgZmxhZyBpcnEgdGltZWQgb3V0XG4iKTsKPiA+ICsJfQo+ID4gIH0KPiA+ ICAKPiA+ICBzdGF0aWMgaW50Cj4gPiBAQCAtMjQ2LDcgKzIyOCw3IEBAIHN0YXRpYyBzdHJ1Y3Qg ZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIHJvY2tjaGlwX2RwX2VuY29kZXJfaGVscGVyX2Z1bmNz ID0gewo+ID4gIAkubW9kZV9maXh1cCA9IHJvY2tjaGlwX2RwX2RybV9lbmNvZGVyX21vZGVfZml4 dXAsCj4gPiAgCS5tb2RlX3NldCA9IHJvY2tjaGlwX2RwX2RybV9lbmNvZGVyX21vZGVfc2V0LAo+ ID4gIAkuZW5hYmxlID0gcm9ja2NoaXBfZHBfZHJtX2VuY29kZXJfZW5hYmxlLAo+ID4gLQkuZGlz YWJsZSA9IHJvY2tjaGlwX2RwX2RybV9lbmNvZGVyX25vcCwKPiA+ICsJLmRpc2FibGUgPSByb2Nr Y2hpcF9kcF9kcm1fZW5jb2Rlcl9kaXNhYmxlLAo+ID4gIAkuYXRvbWljX2NoZWNrID0gcm9ja2No aXBfZHBfZHJtX2VuY29kZXJfYXRvbWljX2NoZWNrLAo+ID4gIH07Cj4gPiAgCj4gPiBAQCAtMzM4 LDIzICszMjAsMTYgQEAgc3RhdGljIGludCByb2NrY2hpcF9kcF9iaW5kKHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAo+ID4gIAo+ID4gIAlkcC0+cGxhdF9kYXRhLmRl dl90eXBlID0gZHAtPmRhdGEtPmNoaXBfdHlwZTsKPiA+ICAJZHAtPnBsYXRfZGF0YS5wb3dlcl9v bl9zdGFydCA9IHJvY2tjaGlwX2RwX3Bvd2Vyb25fc3RhcnQ7Cj4gPiAtCWRwLT5wbGF0X2RhdGEu cG93ZXJfb25fZW5kID0gcm9ja2NoaXBfZHBfcG93ZXJvbl9lbmQ7Cj4gPiAgCWRwLT5wbGF0X2Rh dGEucG93ZXJfb2ZmID0gcm9ja2NoaXBfZHBfcG93ZXJkb3duOwo+ID4gIAlkcC0+cGxhdF9kYXRh LmdldF9tb2RlcyA9IHJvY2tjaGlwX2RwX2dldF9tb2RlczsKPiA+ICAKPiA+IC0JcmV0ID0gcm9j a2NoaXBfZHJtX3Bzcl9yZWdpc3RlcigmZHAtPmVuY29kZXIsIGFuYWxvZ2l4X2RwX3Bzcl9zZXQp Owo+ID4gLQlpZiAocmV0IDwgMCkKPiA+IC0JCWdvdG8gZXJyX2NsZWFudXBfZW5jb2RlcjsKPiA+ IC0KPiA+ICAJZHAtPmFkcCA9IGFuYWxvZ2l4X2RwX2JpbmQoZGV2LCBkcC0+ZHJtX2RldiwgJmRw LT5wbGF0X2RhdGEpOwo+ID4gIAlpZiAoSVNfRVJSKGRwLT5hZHApKSB7Cj4gPiAgCQlyZXQgPSBQ VFJfRVJSKGRwLT5hZHApOwo+ID4gLQkJZ290byBlcnJfdW5yZWdfcHNyOwo+ID4gKwkJZ290byBl cnJfY2xlYW51cF9lbmNvZGVyOwo+ID4gIAl9Cj4gPiAgCj4gPiAgCXJldHVybiAwOwo+ID4gLWVy cl91bnJlZ19wc3I6Cj4gPiAtCXJvY2tjaGlwX2RybV9wc3JfdW5yZWdpc3RlcigmZHAtPmVuY29k ZXIpOwo+ID4gIGVycl9jbGVhbnVwX2VuY29kZXI6Cj4gPiAgCWRwLT5lbmNvZGVyLmZ1bmNzLT5k ZXN0cm95KCZkcC0+ZW5jb2Rlcik7Cj4gPiAgCXJldHVybiByZXQ7Cj4gPiBAQCAtMzY2LDcgKzM0 MSw2IEBAIHN0YXRpYyB2b2lkIHJvY2tjaGlwX2RwX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYs IHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKPiA+ICAJc3RydWN0IHJvY2tjaGlwX2RwX2RldmljZSAq ZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+ICAKPiA+ICAJYW5hbG9naXhfZHBfdW5iaW5k KGRwLT5hZHApOwo+ID4gLQlyb2NrY2hpcF9kcm1fcHNyX3VucmVnaXN0ZXIoJmRwLT5lbmNvZGVy KTsKPiA+ICAJZHAtPmVuY29kZXIuZnVuY3MtPmRlc3Ryb3koJmRwLT5lbmNvZGVyKTsKPiA+ICAK PiA+ICAJZHAtPmFkcCA9IEVSUl9QVFIoLUVOT0RFVik7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL3JvY2tjaGlwX2RybV9mYi5jCj4gPiBpbmRleCA5NzQzOGJiYmUzODkuLjdlMTIxODc1 ZTNjOSAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9k cm1fZmIuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9m Yi5jCj4gPiBAQCAtMjMsMjIgKzIzLDEwIEBACj4gPiAgI2luY2x1ZGUgInJvY2tjaGlwX2RybV9k cnYuaCIKPiA+ICAjaW5jbHVkZSAicm9ja2NoaXBfZHJtX2ZiLmgiCj4gPiAgI2luY2x1ZGUgInJv Y2tjaGlwX2RybV9nZW0uaCIKPiA+IC0jaW5jbHVkZSAicm9ja2NoaXBfZHJtX3Bzci5oIgo+ID4g LQo+ID4gLXN0YXRpYyBpbnQgcm9ja2NoaXBfZHJtX2ZiX2RpcnR5KHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiLAo+ID4gLQkJCQkgc3RydWN0IGRybV9maWxlICpmaWxlLAo+ID4gLQkJCQkgdW5z aWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgY29sb3IsCj4gPiAtCQkJCSBzdHJ1Y3QgZHJt X2NsaXBfcmVjdCAqY2xpcHMsCj4gPiAtCQkJCSB1bnNpZ25lZCBpbnQgbnVtX2NsaXBzKQo+ID4g LXsKPiA+IC0Jcm9ja2NoaXBfZHJtX3Bzcl9mbHVzaF9hbGwoZmItPmRldik7Cj4gPiAtCXJldHVy biAwOwo+ID4gLX0KPiA+ICAKPiA+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZl cl9mdW5jcyByb2NrY2hpcF9kcm1fZmJfZnVuY3MgPSB7Cj4gPiAgCS5kZXN0cm95ICAgICAgID0g ZHJtX2dlbV9mYl9kZXN0cm95LAo+ID4gIAkuY3JlYXRlX2hhbmRsZSA9IGRybV9nZW1fZmJfY3Jl YXRlX2hhbmRsZSwKPiA+IC0JLmRpcnR5CSAgICAgICA9IHJvY2tjaGlwX2RybV9mYl9kaXJ0eSwK PiA+ICB9Owo+ID4gIAo+ID4gIHN0YXRpYyBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoKPiA+IEBA IC0xMzIsOCArMTIwLDYgQEAgcm9ja2NoaXBfYXRvbWljX2hlbHBlcl9jb21taXRfdGFpbF9ycG0o c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSkKPiA+ICB7Cj4gPiAgCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBvbGRfc3RhdGUtPmRldjsKPiA+ICAKPiA+IC0Jcm9ja2NoaXBfZHJt X3Bzcl9pbmhpYml0X2dldF9zdGF0ZShvbGRfc3RhdGUpOwo+ID4gLQo+ID4gIAlkcm1fYXRvbWlj X2hlbHBlcl9jb21taXRfbW9kZXNldF9kaXNhYmxlcyhkZXYsIG9sZF9zdGF0ZSk7Cj4gPiAgCj4g PiAgCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9tb2Rlc2V0X2VuYWJsZXMoZGV2LCBvbGRfc3Rh dGUpOwo+ID4gQEAgLTE0MSw4ICsxMjcsNiBAQCByb2NrY2hpcF9hdG9taWNfaGVscGVyX2NvbW1p dF90YWlsX3JwbShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqb2xkX3N0YXRlKQo+ID4gIAlkcm1f YXRvbWljX2hlbHBlcl9jb21taXRfcGxhbmVzKGRldiwgb2xkX3N0YXRlLAo+ID4gIAkJCQkJRFJN X1BMQU5FX0NPTU1JVF9BQ1RJVkVfT05MWSk7Cj4gPiAgCj4gPiAtCXJvY2tjaGlwX2RybV9wc3Jf aW5oaWJpdF9wdXRfc3RhdGUob2xkX3N0YXRlKTsKPiA+IC0KPiA+ICAJZHJtX2F0b21pY19oZWxw ZXJfY29tbWl0X2h3X2RvbmUob2xkX3N0YXRlKTsKPiA+ICAKPiA+ICAJZHJtX2F0b21pY19oZWxw ZXJfd2FpdF9mb3JfdmJsYW5rcyhkZXYsIG9sZF9zdGF0ZSk7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9wc3IuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fcHNyLmMKPiA+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAo+ID4gaW5kZXggYTBjOGJkMjM1YjY3Li4wMDAwMDAwMDAwMDAKPiA+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fcHNyLmMKPiA+ICsrKyAvZGV2L251bGwKPiA+ IEBAIC0xLDI5MCArMCwwIEBACj4gPiAtLyoKPiA+IC0gKiBDb3B5cmlnaHQgKEMpIEZ1emhvdSBS b2NrY2hpcCBFbGVjdHJvbmljcyBDby5MdGQKPiA+IC0gKiBBdXRob3I6IFlha2lyIFlhbmcgPHlr a0Byb2NrLWNoaXBzLmNvbT4KPiA+IC0gKgo+ID4gLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5z ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKPiA+IC0gKiBMaWNl bnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIGFuZAo+ID4gLSAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQg dW5kZXIgdGhvc2UgdGVybXMuCj4gPiAtICoKPiA+IC0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiA+IC0gKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ ID4gLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKPiA+IC0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgo+ID4gLSAqLwo+ID4gLQo+ID4gLSNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ID4gLSNp bmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgo+ID4gLSNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hl bHBlci5oPgo+ID4gLQo+ID4gLSNpbmNsdWRlICJyb2NrY2hpcF9kcm1fZHJ2LmgiCj4gPiAtI2lu Y2x1ZGUgInJvY2tjaGlwX2RybV9wc3IuaCIKPiA+IC0KPiA+IC0jZGVmaW5lIFBTUl9GTFVTSF9U SU1FT1VUX01TCTEwMAo+ID4gLQo+ID4gLXN0cnVjdCBwc3JfZHJ2IHsKPiA+IC0Jc3RydWN0IGxp c3RfaGVhZAlsaXN0Owo+ID4gLQlzdHJ1Y3QgZHJtX2VuY29kZXIJKmVuY29kZXI7Cj4gPiAtCj4g PiAtCXN0cnVjdCBtdXRleAkJbG9jazsKPiA+IC0JaW50CQkJaW5oaWJpdF9jb3VudDsKPiA+IC0J Ym9vbAkJCWVuYWJsZWQ7Cj4gPiAtCj4gPiAtCXN0cnVjdCBkZWxheWVkX3dvcmsJZmx1c2hfd29y azsKPiA+IC0KPiA+IC0JaW50ICgqc2V0KShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGJv b2wgZW5hYmxlKTsKPiA+IC19Owo+ID4gLQo+ID4gLXN0YXRpYyBzdHJ1Y3QgcHNyX2RydiAqZmlu ZF9wc3JfYnlfZW5jb2RlcihzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCj4gPiAtewo+ID4g LQlzdHJ1Y3Qgcm9ja2NoaXBfZHJtX3ByaXZhdGUgKmRybV9kcnYgPSBlbmNvZGVyLT5kZXYtPmRl dl9wcml2YXRlOwo+ID4gLQlzdHJ1Y3QgcHNyX2RydiAqcHNyOwo+ID4gLQo+ID4gLQltdXRleF9s b2NrKCZkcm1fZHJ2LT5wc3JfbGlzdF9sb2NrKTsKPiA+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShw c3IsICZkcm1fZHJ2LT5wc3JfbGlzdCwgbGlzdCkgewo+ID4gLQkJaWYgKHBzci0+ZW5jb2RlciA9 PSBlbmNvZGVyKQo+ID4gLQkJCWdvdG8gb3V0Owo+ID4gLQl9Cj4gPiAtCXBzciA9IEVSUl9QVFIo LUVOT0RFVik7Cj4gPiAtCj4gPiAtb3V0Ogo+ID4gLQltdXRleF91bmxvY2soJmRybV9kcnYtPnBz cl9saXN0X2xvY2spOwo+ID4gLQlyZXR1cm4gcHNyOwo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMg aW50IHBzcl9zZXRfc3RhdGVfbG9ja2VkKHN0cnVjdCBwc3JfZHJ2ICpwc3IsIGJvb2wgZW5hYmxl KQo+ID4gLXsKPiA+IC0JaW50IHJldDsKPiA+IC0KPiA+IC0JaWYgKHBzci0+aW5oaWJpdF9jb3Vu dCA+IDApCj4gPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiA+IC0KPiA+IC0JaWYgKGVuYWJsZSA9PSBw c3ItPmVuYWJsZWQpCj4gPiAtCQlyZXR1cm4gMDsKPiA+IC0KPiA+IC0JcmV0ID0gcHNyLT5zZXQo cHNyLT5lbmNvZGVyLCBlbmFibGUpOwo+ID4gLQlpZiAocmV0KQo+ID4gLQkJcmV0dXJuIHJldDsK PiA+IC0KPiA+IC0JcHNyLT5lbmFibGVkID0gZW5hYmxlOwo+ID4gLQlyZXR1cm4gMDsKPiA+IC19 Cj4gPiAtCj4gPiAtc3RhdGljIHZvaWQgcHNyX2ZsdXNoX2hhbmRsZXIoc3RydWN0IHdvcmtfc3Ry dWN0ICp3b3JrKQo+ID4gLXsKPiA+IC0Jc3RydWN0IHBzcl9kcnYgKnBzciA9IGNvbnRhaW5lcl9v Zih0b19kZWxheWVkX3dvcmsod29yayksCj4gPiAtCQkJCQkgICBzdHJ1Y3QgcHNyX2RydiwgZmx1 c2hfd29yayk7Cj4gPiAtCj4gPiAtCW11dGV4X2xvY2soJnBzci0+bG9jayk7Cj4gPiAtCXBzcl9z ZXRfc3RhdGVfbG9ja2VkKHBzciwgdHJ1ZSk7Cj4gPiAtCW11dGV4X3VubG9jaygmcHNyLT5sb2Nr KTsKPiA+IC19Cj4gPiAtCj4gPiAtLyoqCj4gPiAtICogcm9ja2NoaXBfZHJtX3Bzcl9pbmhpYml0 X3B1dCAtIHJlbGVhc2UgUFNSIGluaGliaXQgb24gZ2l2ZW4gZW5jb2Rlcgo+ID4gLSAqIEBlbmNv ZGVyOiBlbmNvZGVyIHRvIG9idGFpbiB0aGUgUFNSIGVuY29kZXIKPiA+IC0gKgo+ID4gLSAqIERl Y3JlbWVudHMgUFNSIGluaGliaXQgY291bnQgb24gZ2l2ZW4gZW5jb2Rlci4gU2hvdWxkIGJlIGNh bGxlZCBvbmx5Cj4gPiAtICogZm9yIGEgUFNSIGluaGliaXQgY291bnQgaW5jcmVtZW50IGRvbmUg YmVmb3JlLiBJZiBQU1IgaW5oaWJpdCBjb3VudGVyCj4gPiAtICogcmVhY2hlcyB6ZXJvLCBQU1Ig Zmx1c2ggd29yayBpcyBzY2hlZHVsZWQgdG8gbWFrZSB0aGUgaGFyZHdhcmUgZW50ZXIKPiA+IC0g KiBQU1IgbW9kZSBpbiBQU1JfRkxVU0hfVElNRU9VVF9NUy4KPiA+IC0gKgo+ID4gLSAqIFJldHVy bnM6Cj4gPiAtICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgo+ ID4gLSAqLwo+ID4gLWludCByb2NrY2hpcF9kcm1fcHNyX2luaGliaXRfcHV0KHN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2RlcikKPiA+IC17Cj4gPiAtCXN0cnVjdCBwc3JfZHJ2ICpwc3IgPSBmaW5k X3Bzcl9ieV9lbmNvZGVyKGVuY29kZXIpOwo+ID4gLQo+ID4gLQlpZiAoSVNfRVJSKHBzcikpCj4g PiAtCQlyZXR1cm4gUFRSX0VSUihwc3IpOwo+ID4gLQo+ID4gLQltdXRleF9sb2NrKCZwc3ItPmxv Y2spOwo+ID4gLQktLXBzci0+aW5oaWJpdF9jb3VudDsKPiA+IC0JV0FSTl9PTihwc3ItPmluaGli aXRfY291bnQgPCAwKTsKPiA+IC0JaWYgKCFwc3ItPmluaGliaXRfY291bnQpCj4gPiAtCQltb2Rf ZGVsYXllZF93b3JrKHN5c3RlbV93cSwgJnBzci0+Zmx1c2hfd29yaywKPiA+IC0JCQkJIFBTUl9G TFVTSF9USU1FT1VUX01TKTsKPiA+IC0JbXV0ZXhfdW5sb2NrKCZwc3ItPmxvY2spOwo+ID4gLQo+ ID4gLQlyZXR1cm4gMDsKPiA+IC19Cj4gPiAtRVhQT1JUX1NZTUJPTChyb2NrY2hpcF9kcm1fcHNy X2luaGliaXRfcHV0KTsKPiA+IC0KPiA+IC12b2lkIHJvY2tjaGlwX2RybV9wc3JfaW5oaWJpdF9n ZXRfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ID4gLXsKPiA+IC0Jc3Ry dWN0IGRybV9jcnRjICpjcnRjOwo+ID4gLQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3Rh dGU7Cj4gPiAtCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKPiA+IC0JdTMyIGVuY29kZXJf bWFzayA9IDA7Cj4gPiAtCWludCBpOwo+ID4gLQo+ID4gLQlmb3JfZWFjaF9vbGRfY3J0Y19pbl9z dGF0ZShzdGF0ZSwgY3J0YywgY3J0Y19zdGF0ZSwgaSkgewo+ID4gLQkJZW5jb2Rlcl9tYXNrIHw9 IGNydGNfc3RhdGUtPmVuY29kZXJfbWFzazsKPiA+IC0JCWVuY29kZXJfbWFzayB8PSBjcnRjLT5z dGF0ZS0+ZW5jb2Rlcl9tYXNrOwo+ID4gLQl9Cj4gPiAtCj4gPiAtCWRybV9mb3JfZWFjaF9lbmNv ZGVyX21hc2soZW5jb2Rlciwgc3RhdGUtPmRldiwgZW5jb2Rlcl9tYXNrKQo+ID4gLQkJcm9ja2No aXBfZHJtX3Bzcl9pbmhpYml0X2dldChlbmNvZGVyKTsKPiA+IC19Cj4gPiAtRVhQT1JUX1NZTUJP TChyb2NrY2hpcF9kcm1fcHNyX2luaGliaXRfZ2V0X3N0YXRlKTsKPiA+IC0KPiA+IC12b2lkIHJv Y2tjaGlwX2RybV9wc3JfaW5oaWJpdF9wdXRfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUg KnN0YXRlKQo+ID4gLXsKPiA+IC0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ID4gLQlzdHJ1Y3Qg ZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gPiAtCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5j b2RlcjsKPiA+IC0JdTMyIGVuY29kZXJfbWFzayA9IDA7Cj4gPiAtCWludCBpOwo+ID4gLQo+ID4g LQlmb3JfZWFjaF9vbGRfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgY3J0Y19zdGF0ZSwgaSkg ewo+ID4gLQkJZW5jb2Rlcl9tYXNrIHw9IGNydGNfc3RhdGUtPmVuY29kZXJfbWFzazsKPiA+IC0J CWVuY29kZXJfbWFzayB8PSBjcnRjLT5zdGF0ZS0+ZW5jb2Rlcl9tYXNrOwo+ID4gLQl9Cj4gPiAt Cj4gPiAtCWRybV9mb3JfZWFjaF9lbmNvZGVyX21hc2soZW5jb2Rlciwgc3RhdGUtPmRldiwgZW5j b2Rlcl9tYXNrKQo+ID4gLQkJcm9ja2NoaXBfZHJtX3Bzcl9pbmhpYml0X3B1dChlbmNvZGVyKTsK PiA+IC19Cj4gPiAtRVhQT1JUX1NZTUJPTChyb2NrY2hpcF9kcm1fcHNyX2luaGliaXRfcHV0X3N0 YXRlKTsKPiA+IC0KPiA+IC0vKioKPiA+IC0gKiByb2NrY2hpcF9kcm1fcHNyX2luaGliaXRfZ2V0 IC0gYWNxdWlyZSBQU1IgaW5oaWJpdCBvbiBnaXZlbiBlbmNvZGVyCj4gPiAtICogQGVuY29kZXI6 IGVuY29kZXIgdG8gb2J0YWluIHRoZSBQU1IgZW5jb2Rlcgo+ID4gLSAqCj4gPiAtICogSW5jcmVt ZW50cyBQU1IgaW5oaWJpdCBjb3VudCBvbiBnaXZlbiBlbmNvZGVyLiBUaGlzIGZ1bmN0aW9uIGd1 YXJhbnRlZXMKPiA+IC0gKiB0aGF0IGFmdGVyIGl0IHJldHVybnMgUFNSIGlzIHR1cm5lZCBvZmYg b24gZ2l2ZW4gZW5jb2RlciBhbmQgbm8gUFNSLXJlbGF0ZWQKPiA+IC0gKiBoYXJkd2FyZSBzdGF0 ZSBjaGFuZ2Ugb2NjdXJzIGF0IGxlYXN0IHVudGlsIGEgbWF0Y2hpbmcgY2FsbCB0bwo+ID4gLSAq IHJvY2tjaGlwX2RybV9wc3JfaW5oaWJpdF9wdXQoKSBpcyBkb25lLgo+ID4gLSAqCj4gPiAtICog UmV0dXJuczoKPiA+IC0gKiBaZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1 cmUuCj4gPiAtICovCj4gPiAtaW50IHJvY2tjaGlwX2RybV9wc3JfaW5oaWJpdF9nZXQoc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyKQo+ID4gLXsKPiA+IC0Jc3RydWN0IHBzcl9kcnYgKnBzciA9 IGZpbmRfcHNyX2J5X2VuY29kZXIoZW5jb2Rlcik7Cj4gPiAtCj4gPiAtCWlmIChJU19FUlIocHNy KSkKPiA+IC0JCXJldHVybiBQVFJfRVJSKHBzcik7Cj4gPiAtCj4gPiAtCW11dGV4X2xvY2soJnBz ci0+bG9jayk7Cj4gPiAtCXBzcl9zZXRfc3RhdGVfbG9ja2VkKHBzciwgZmFsc2UpOwo+ID4gLQkr K3Bzci0+aW5oaWJpdF9jb3VudDsKPiA+IC0JbXV0ZXhfdW5sb2NrKCZwc3ItPmxvY2spOwo+ID4g LQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnBzci0+Zmx1c2hfd29yayk7Cj4gPiAtCj4gPiAt CXJldHVybiAwOwo+ID4gLX0KPiA+IC1FWFBPUlRfU1lNQk9MKHJvY2tjaGlwX2RybV9wc3JfaW5o aWJpdF9nZXQpOwo+ID4gLQo+ID4gLXN0YXRpYyB2b2lkIHJvY2tjaGlwX2RybV9kb19mbHVzaChz dHJ1Y3QgcHNyX2RydiAqcHNyKQo+ID4gLXsKPiA+IC0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5j KCZwc3ItPmZsdXNoX3dvcmspOwo+ID4gLQo+ID4gLQltdXRleF9sb2NrKCZwc3ItPmxvY2spOwo+ ID4gLQlpZiAoIXBzcl9zZXRfc3RhdGVfbG9ja2VkKHBzciwgZmFsc2UpKQo+ID4gLQkJbW9kX2Rl bGF5ZWRfd29yayhzeXN0ZW1fd3EsICZwc3ItPmZsdXNoX3dvcmssCj4gPiAtCQkJCSBQU1JfRkxV U0hfVElNRU9VVF9NUyk7Cj4gPiAtCW11dGV4X3VubG9jaygmcHNyLT5sb2NrKTsKPiA+IC19Cj4g PiAtCj4gPiAtLyoqCj4gPiAtICogcm9ja2NoaXBfZHJtX3Bzcl9mbHVzaF9hbGwgLSBmb3JjZSB0 byBmbHVzaCBhbGwgcmVnaXN0ZXJlZCBQU1IgZW5jb2RlcnMKPiA+IC0gKiBAZGV2OiBkcm0gZGV2 aWNlCj4gPiAtICoKPiA+IC0gKiBEaXNhYmxlIHRoZSBQU1IgZnVuY3Rpb24gZm9yIGFsbCByZWdp c3RlcmVkIGVuY29kZXJzLCBhbmQgdGhlbiBlbmFibGUgdGhlCj4gPiAtICogUFNSIGZ1bmN0aW9u IGJhY2sgYWZ0ZXIgUFNSX0ZMVVNIX1RJTUVPVVQuIElmIGVuY29kZXIgUFNSIHN0YXRlIGhhdmUg YmVlbgo+ID4gLSAqIGNoYW5nZWQgZHVyaW5nIGZsdXNoIHRpbWUsIHRoZW4ga2VlcCB0aGUgc3Rh dGUgbm8gY2hhbmdlIGFmdGVyIGZsdXNoCj4gPiAtICogdGltZW91dC4KPiA+IC0gKgo+ID4gLSAq IFJldHVybnM6Cj4gPiAtICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWls dXJlLgo+ID4gLSAqLwo+ID4gLXZvaWQgcm9ja2NoaXBfZHJtX3Bzcl9mbHVzaF9hbGwoc3RydWN0 IGRybV9kZXZpY2UgKmRldikKPiA+IC17Cj4gPiAtCXN0cnVjdCByb2NrY2hpcF9kcm1fcHJpdmF0 ZSAqZHJtX2RydiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gPiAtCXN0cnVjdCBwc3JfZHJ2ICpwc3I7 Cj4gPiAtCj4gPiAtCW11dGV4X2xvY2soJmRybV9kcnYtPnBzcl9saXN0X2xvY2spOwo+ID4gLQls aXN0X2Zvcl9lYWNoX2VudHJ5KHBzciwgJmRybV9kcnYtPnBzcl9saXN0LCBsaXN0KQo+ID4gLQkJ cm9ja2NoaXBfZHJtX2RvX2ZsdXNoKHBzcik7Cj4gPiAtCW11dGV4X3VubG9jaygmZHJtX2Rydi0+ cHNyX2xpc3RfbG9jayk7Cj4gPiAtfQo+ID4gLUVYUE9SVF9TWU1CT0wocm9ja2NoaXBfZHJtX3Bz cl9mbHVzaF9hbGwpOwo+ID4gLQo+ID4gLS8qKgo+ID4gLSAqIHJvY2tjaGlwX2RybV9wc3JfcmVn aXN0ZXIgLSByZWdpc3RlciBlbmNvZGVyIHRvIHBzciBkcml2ZXIKPiA+IC0gKiBAZW5jb2Rlcjog ZW5jb2RlciB0aGF0IG9idGFpbiB0aGUgUFNSIGZ1bmN0aW9uCj4gPiAtICogQHBzcl9zZXQ6IGNh bGwgYmFjayB0byBzZXQgUFNSIHN0YXRlCj4gPiAtICoKPiA+IC0gKiBUaGUgZnVuY3Rpb24gcmV0 dXJucyB3aXRoIFBTUiBpbmhpYml0IGNvdW50ZXIgaW5pdGlhbGl6ZWQgd2l0aCBvbmUKPiA+IC0g KiBhbmQgdGhlIGNhbGxlciAodHlwaWNhbGx5IGVuY29kZXIgZHJpdmVyKSBuZWVkcyB0byBjYWxs Cj4gPiAtICogcm9ja2NoaXBfZHJtX3Bzcl9pbmhpYml0X3B1dCgpIHdoZW4gaXQgYmVjb21lcyBy ZWFkeSB0byBhY2NlcHQgUFNSCj4gPiAtICogZW5hYmxlIHJlcXVlc3QuCj4gPiAtICoKPiA+IC0g KiBSZXR1cm5zOgo+ID4gLSAqIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFp bHVyZS4KPiA+IC0gKi8KPiA+IC1pbnQgcm9ja2NoaXBfZHJtX3Bzcl9yZWdpc3RlcihzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXIsCj4gPiAtCQkJaW50ICgqcHNyX3NldCkoc3RydWN0IGRybV9l bmNvZGVyICosIGJvb2wgZW5hYmxlKSkKPiA+IC17Cj4gPiAtCXN0cnVjdCByb2NrY2hpcF9kcm1f cHJpdmF0ZSAqZHJtX2RydjsKPiA+IC0Jc3RydWN0IHBzcl9kcnYgKnBzcjsKPiA+IC0KPiA+IC0J aWYgKCFlbmNvZGVyIHx8ICFwc3Jfc2V0KQo+ID4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiAtCj4g PiAtCWRybV9kcnYgPSBlbmNvZGVyLT5kZXYtPmRldl9wcml2YXRlOwo+ID4gLQo+ID4gLQlwc3Ig PSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHNyX2RydiksIEdGUF9LRVJORUwpOwo+ID4gLQlpZiAo IXBzcikKPiA+IC0JCXJldHVybiAtRU5PTUVNOwo+ID4gLQo+ID4gLQlJTklUX0RFTEFZRURfV09S SygmcHNyLT5mbHVzaF93b3JrLCBwc3JfZmx1c2hfaGFuZGxlcik7Cj4gPiAtCW11dGV4X2luaXQo JnBzci0+bG9jayk7Cj4gPiAtCj4gPiAtCXBzci0+aW5oaWJpdF9jb3VudCA9IDE7Cj4gPiAtCXBz ci0+ZW5hYmxlZCA9IGZhbHNlOwo+ID4gLQlwc3ItPmVuY29kZXIgPSBlbmNvZGVyOwo+ID4gLQlw c3ItPnNldCA9IHBzcl9zZXQ7Cj4gPiAtCj4gPiAtCW11dGV4X2xvY2soJmRybV9kcnYtPnBzcl9s aXN0X2xvY2spOwo+ID4gLQlsaXN0X2FkZF90YWlsKCZwc3ItPmxpc3QsICZkcm1fZHJ2LT5wc3Jf bGlzdCk7Cj4gPiAtCW11dGV4X3VubG9jaygmZHJtX2Rydi0+cHNyX2xpc3RfbG9jayk7Cj4gPiAt Cj4gPiAtCXJldHVybiAwOwo+ID4gLX0KPiA+IC1FWFBPUlRfU1lNQk9MKHJvY2tjaGlwX2RybV9w c3JfcmVnaXN0ZXIpOwo+ID4gLQo+ID4gLS8qKgo+ID4gLSAqIHJvY2tjaGlwX2RybV9wc3JfdW5y ZWdpc3RlciAtIHVucmVnaXN0ZXIgZW5jb2RlciB0byBwc3IgZHJpdmVyCj4gPiAtICogQGVuY29k ZXI6IGVuY29kZXIgdGhhdCBvYnRhaW4gdGhlIFBTUiBmdW5jdGlvbgo+ID4gLSAqIEBwc3Jfc2V0 OiBjYWxsIGJhY2sgdG8gc2V0IFBTUiBzdGF0ZQo+ID4gLSAqCj4gPiAtICogSXQgaXMgZXhwZWN0 ZWQgdGhhdCB0aGUgUFNSIGluaGliaXQgY291bnRlciBpcyAxIHdoZW4gdGhpcyBmdW5jdGlvbiBp cwo+ID4gLSAqIGNhbGxlZCwgd2hpY2ggY29ycmVzcG9uZHMgdG8gYSBzdGF0ZSB3aGVuIHJlbGF0 ZWQgZW5jb2RlciBoYXMgYmVlbgo+ID4gLSAqIGRpc2Nvbm5lY3RlZCBmcm9tIGFueSBDUlRDcyBh bmQgaXRzIGRyaXZlciBjYWxsZWQKPiA+IC0gKiByb2NrY2hpcF9kcm1fcHNyX2luaGliaXRfZ2V0 KCkgdG8gc3RvcCB0aGUgUFNSIGxvZ2ljLgo+ID4gLSAqCj4gPiAtICogUmV0dXJuczoKPiA+IC0g KiBaZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuCj4gPiAtICovCj4g PiAtdm9pZCByb2NrY2hpcF9kcm1fcHNyX3VucmVnaXN0ZXIoc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyKQo+ID4gLXsKPiA+IC0Jc3RydWN0IHJvY2tjaGlwX2RybV9wcml2YXRlICpkcm1fZHJ2 ID0gZW5jb2Rlci0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiA+IC0Jc3RydWN0IHBzcl9kcnYgKnBzciwg Km47Cj4gPiAtCj4gPiAtCW11dGV4X2xvY2soJmRybV9kcnYtPnBzcl9saXN0X2xvY2spOwo+ID4g LQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHNyLCBuLCAmZHJtX2Rydi0+cHNyX2xpc3QsIGxp c3QpIHsKPiA+IC0JCWlmIChwc3ItPmVuY29kZXIgPT0gZW5jb2Rlcikgewo+ID4gLQkJCS8qCj4g PiAtCQkJICogQW55IG90aGVyIHZhbHVlIHdvdWxkIG1lYW4gdGhhdCB0aGUgZW5jb2Rlcgo+ID4g LQkJCSAqIGlzIHN0aWxsIGluIHVzZS4KPiA+IC0JCQkgKi8KPiA+IC0JCQlXQVJOX09OKHBzci0+ aW5oaWJpdF9jb3VudCAhPSAxKTsKPiA+IC0KPiA+IC0JCQlsaXN0X2RlbCgmcHNyLT5saXN0KTsK PiA+IC0JCQlrZnJlZShwc3IpOwo+ID4gLQkJfQo+ID4gLQl9Cj4gPiAtCW11dGV4X3VubG9jaygm ZHJtX2Rydi0+cHNyX2xpc3RfbG9jayk7Cj4gPiAtfQo+ID4gLUVYUE9SVF9TWU1CT0wocm9ja2No aXBfZHJtX3Bzcl91bnJlZ2lzdGVyKTsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvcm9ja2NoaXBfZHJtX3Bzci5oIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3Jv Y2tjaGlwX2RybV9wc3IuaAo+ID4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAy NTM1MGJhMzIzN2IuLjAwMDAwMDAwMDAwMAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL3JvY2tjaGlwX2RybV9wc3IuaAo+ID4gKysrIC9kZXYvbnVsbAo+ID4gQEAgLTEsMzAgKzAs MCBAQAo+ID4gLS8qCj4gPiAtICogQ29weXJpZ2h0IChDKSBGdXpob3UgUm9ja2NoaXAgRWxlY3Ry b25pY3MgQ28uTHRkCj4gPiAtICogQXV0aG9yOiBZYWtpciBZYW5nIDx5a2tAcm9jay1jaGlwcy5j b20+Cj4gPiAtICoKPiA+IC0gKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCj4gPiAtICogTGljZW5zZSB2ZXJzaW9uIDIs IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKPiA+IC0g KiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRl cm1zLgo+ID4gLSAqCj4gPiAtICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gPiAtICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiA+IC0gKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4g PiAtICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiA+IC0g Ki8KPiA+IC0KPiA+IC0jaWZuZGVmIF9fUk9DS0NISVBfRFJNX1BTUl9fXwo+ID4gLSNkZWZpbmUg X19ST0NLQ0hJUF9EUk1fUFNSX19fCj4gPiAtCj4gPiAtdm9pZCByb2NrY2hpcF9kcm1fcHNyX2Zs dXNoX2FsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiA+IC0KPiA+IC1pbnQgcm9ja2NoaXBf ZHJtX3Bzcl9pbmhpYml0X3B1dChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwo+ID4gLWlu dCByb2NrY2hpcF9kcm1fcHNyX2luaGliaXRfZ2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cik7Cj4gPiAtCj4gPiAtdm9pZCByb2NrY2hpcF9kcm1fcHNyX2luaGliaXRfZ2V0X3N0YXRlKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7Cj4gPiAtdm9pZCByb2NrY2hpcF9kcm1fcHNy X2luaGliaXRfcHV0X3N0YXRlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7Cj4gPiAt Cj4gPiAtaW50IHJvY2tjaGlwX2RybV9wc3JfcmVnaXN0ZXIoc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyLAo+ID4gLQkJCWludCAoKnBzcl9zZXQpKHN0cnVjdCBkcm1fZW5jb2RlciAqLCBib29s IGVuYWJsZSkpOwo+ID4gLXZvaWQgcm9ja2NoaXBfZHJtX3Bzcl91bnJlZ2lzdGVyKHN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2Rlcik7Cj4gPiAtCj4gPiAtI2VuZGlmIC8qIF9fUk9DS0NISVBfRFJN X1BTUl9fICovCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tj aGlwX2RybV92b3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9w LmMKPiA+IGluZGV4IGM3ZDRjNjA3M2VhNS4uMjFmY2NkYTcwMzU2IDEwMDY0NAo+ID4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYwo+ID4gKysrIGIvZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYwo+ID4gQEAgLTIxLDYgKzIx LDcgQEAKPiA+ICAjaW5jbHVkZSA8ZHJtL2RybV9nZW1fZnJhbWVidWZmZXJfaGVscGVyLmg+Cj4g PiAgI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+Cj4gPiAgI2luY2x1ZGUgPGRybS9k cm1fcHJvYmVfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fc2VsZl9yZWZyZXNoX2hl bHBlci5oPgo+ID4gICNpZmRlZiBDT05GSUdfRFJNX0FOQUxPR0lYX0RQCj4gPiAgI2luY2x1ZGUg PGRybS9icmlkZ2UvYW5hbG9naXhfZHAuaD4KPiA+ICAjZW5kaWYKPiA+IEBAIC00MiwxMCArNDMs MTEgQEAKPiA+ICAjaW5jbHVkZSAicm9ja2NoaXBfZHJtX2Rydi5oIgo+ID4gICNpbmNsdWRlICJy b2NrY2hpcF9kcm1fZ2VtLmgiCj4gPiAgI2luY2x1ZGUgInJvY2tjaGlwX2RybV9mYi5oIgo+ID4g LSNpbmNsdWRlICJyb2NrY2hpcF9kcm1fcHNyLmgiCj4gPiAgI2luY2x1ZGUgInJvY2tjaGlwX2Ry bV92b3AuaCIKPiA+ICAjaW5jbHVkZSAicm9ja2NoaXBfcmdiLmgiCj4gPiAgCj4gPiArI2RlZmlu ZSBWT1BfU0VMRl9SRUZSRVNIX0VOVFJZX0RFTEFZX01TIDEwMAo+ID4gKwo+ID4gICNkZWZpbmUg Vk9QX1dJTl9TRVQodm9wLCB3aW4sIG5hbWUsIHYpIFwKPiA+ICAJCXZvcF9yZWdfc2V0KHZvcCwg Jndpbi0+cGh5LT5uYW1lLCB3aW4tPmJhc2UsIH4wLCB2LCAjbmFtZSkKPiA+ICAjZGVmaW5lIFZP UF9TQ0xfU0VUKHZvcCwgd2luLCBuYW1lLCB2KSBcCj4gPiBAQCAtNTQxLDcgKzU0Myw3IEBAIHN0 YXRpYyB2b2lkIHZvcF9jb3JlX2Nsa3NfZGlzYWJsZShzdHJ1Y3Qgdm9wICp2b3ApCj4gPiAgCWNs a19kaXNhYmxlKHZvcC0+aGNsayk7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyBpbnQgdm9wX2Vu YWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gPiArc3RhdGljIGludCB2b3BfZW5hYmxlKHN0 cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfc3RhdGUpCj4g PiAgewo+ID4gIAlzdHJ1Y3Qgdm9wICp2b3AgPSB0b192b3AoY3J0Yyk7Cj4gPiAgCWludCByZXQs IGk7Cj4gPiBAQCAtNTgxLDEyICs1ODMsMTggQEAgc3RhdGljIGludCB2b3BfZW5hYmxlKHN0cnVj dCBkcm1fY3J0YyAqY3J0YykKPiA+ICAJICogV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBhbGwg d2luZG93cyBhcmUgZGlzYWJsZWQgYmVmb3JlIHdlCj4gPiAgCSAqIGVuYWJsZSB0aGUgY3J0Yy4g T3RoZXJ3aXNlIHdlIG1pZ2h0IHRyeSB0byBzY2FuIGZyb20gYSBkZXN0cm95ZWQKPiA+ICAJICog YnVmZmVyIGxhdGVyLgo+ID4gKwkgKgo+ID4gKwkgKiBJbiB0aGUgY2FzZSBvZiBlbmFibGUtYWZ0 ZXItUFNSLCB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoaXMKPiA+ICsJICogY2FzZSBz aW5jZSB0aGUgYnVmZmVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQgYW5kIGRpc2FibGluZyB0 aGUKPiA+ICsJICogd2luZG93IHdpbGwgcmVzdWx0IGluIHNjcmVlbiBnbGl0Y2hlcyBvbiBQU1Ig ZXhpdC4KPiA+ICAJICovCj4gPiAtCWZvciAoaSA9IDA7IGkgPCB2b3AtPmRhdGEtPndpbl9zaXpl OyBpKyspIHsKPiA+IC0JCXN0cnVjdCB2b3Bfd2luICp2b3Bfd2luID0gJnZvcC0+d2luW2ldOwo+ ID4gLQkJY29uc3Qgc3RydWN0IHZvcF93aW5fZGF0YSAqd2luID0gdm9wX3dpbi0+ZGF0YTsKPiA+ ICsJaWYgKCFvbGRfc3RhdGUgfHwgIW9sZF9zdGF0ZS0+c2VsZl9yZWZyZXNoX2FjdGl2ZSkgewo+ ID4gKwkJZm9yIChpID0gMDsgaSA8IHZvcC0+ZGF0YS0+d2luX3NpemU7IGkrKykgewo+ID4gKwkJ CXN0cnVjdCB2b3Bfd2luICp2b3Bfd2luID0gJnZvcC0+d2luW2ldOwo+ID4gKwkJCWNvbnN0IHN0 cnVjdCB2b3Bfd2luX2RhdGEgKndpbiA9IHZvcF93aW4tPmRhdGE7Cj4gPiAgCj4gPiAtCQlWT1Bf V0lOX1NFVCh2b3AsIHdpbiwgZW5hYmxlLCAwKTsKPiA+ICsJCQlWT1BfV0lOX1NFVCh2b3AsIHdp biwgZW5hYmxlLCAwKTsKPiA+ICsJCX0KPiA+ICAJfQo+ID4gIAlzcGluX3VubG9jaygmdm9wLT5y ZWdfbG9jayk7Cj4gPiAgCj4gPiBAQCAtOTM3LDEyICs5NDUsMTAgQEAgc3RhdGljIHZvaWQgdm9w X3BsYW5lX2F0b21pY19hc3luY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gPiAg CX0KPiA+ICAKPiA+ICAJaWYgKHZvcC0+aXNfZW5hYmxlZCkgewo+ID4gLQkJcm9ja2NoaXBfZHJt X3Bzcl9pbmhpYml0X2dldF9zdGF0ZShuZXdfc3RhdGUtPnN0YXRlKTsKPiA+ICAJCXZvcF9wbGFu ZV9hdG9taWNfdXBkYXRlKHBsYW5lLCBwbGFuZS0+c3RhdGUpOwo+ID4gIAkJc3Bpbl9sb2NrKCZ2 b3AtPnJlZ19sb2NrKTsKPiA+ICAJCXZvcF9jZmdfZG9uZSh2b3ApOwo+ID4gIAkJc3Bpbl91bmxv Y2soJnZvcC0+cmVnX2xvY2spOwo+ID4gLQkJcm9ja2NoaXBfZHJtX3Bzcl9pbmhpYml0X3B1dF9z dGF0ZShuZXdfc3RhdGUtPnN0YXRlKTsKPiA+ICAJfQo+ID4gIAo+ID4gIAlwbGFuZS0+ZnVuY3Mt PmF0b21pY19kZXN0cm95X3N0YXRlKHBsYW5lLCBwbGFuZV9zdGF0ZSk7Cj4gPiBAQCAtMTAzNSw3 ICsxMDQxLDcgQEAgc3RhdGljIHZvaWQgdm9wX2NydGNfYXRvbWljX2VuYWJsZShzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCj4gPiAgCj4gPiAgCVdBUk5fT04odm9wLT5ldmVudCk7Cj4gPiAgCj4gPiAt CXJldCA9IHZvcF9lbmFibGUoY3J0Yyk7Cj4gPiArCXJldCA9IHZvcF9lbmFibGUoY3J0Yywgb2xk X3N0YXRlKTsKPiA+ICAJaWYgKHJldCkgewo+ID4gIAkJbXV0ZXhfdW5sb2NrKCZ2b3AtPnZvcF9s b2NrKTsKPiA+ICAJCURSTV9ERVZfRVJST1Iodm9wLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHZv cCAoJWQpXG4iLCByZXQpOwo+ID4gQEAgLTE1MDksNiArMTUxNSwxMyBAQCBzdGF0aWMgaW50IHZv cF9jcmVhdGVfY3J0YyhzdHJ1Y3Qgdm9wICp2b3ApCj4gPiAgCWluaXRfY29tcGxldGlvbigmdm9w LT5saW5lX2ZsYWdfY29tcGxldGlvbik7Cj4gPiAgCWNydGMtPnBvcnQgPSBwb3J0Owo+ID4gIAo+ ID4gKwlyZXQgPSBkcm1fc2VsZl9yZWZyZXNoX2hlbHBlcl9yZWdpc3RlcihjcnRjLAo+ID4gKwkJ CQkJICAgICAgIFZPUF9TRUxGX1JFRlJFU0hfRU5UUllfREVMQVlfTVMpOwo+ID4gKwlpZiAocmV0 KQo+ID4gKwkJRFJNX0RFVl9ERUJVR19LTVModm9wLT5kZXYsCj4gPiArCQkJIkZhaWxlZCB0byBy ZWdpc3RlciAlcyB3aXRoIFNSIGhlbHBlcnMgJWQsIGlnbm9yaW5nXG4iLAo+ID4gKwkJCWNydGMt Pm5hbWUsIHJldCk7Cj4gPiArCj4gPiAgCXJldHVybiAwOwo+ID4gIAo+ID4gIGVycl9jbGVhbnVw X2NydGM6Cj4gPiBAQCAtMTUyNiw2ICsxNTM5LDggQEAgc3RhdGljIHZvaWQgdm9wX2Rlc3Ryb3lf Y3J0YyhzdHJ1Y3Qgdm9wICp2b3ApCj4gPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0g dm9wLT5kcm1fZGV2Owo+ID4gIAlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwgKnRtcDsKPiA+ICAK PiA+ICsJZHJtX3NlbGZfcmVmcmVzaF9oZWxwZXJfdW5yZWdpc3RlcihjcnRjKTsKPiA+ICsKPiA+ ICAJb2Zfbm9kZV9wdXQoY3J0Yy0+cG9ydCk7Cj4gPiAgCj4gPiAgCS8qCj4gPiBkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9kcm0vYnJpZGdlL2FuYWxvZ2l4X2RwLmggYi9pbmNsdWRlL2RybS9icmlkZ2Uv YW5hbG9naXhfZHAuaAo+ID4gaW5kZXggNDc1YjcwNmI0OWRlLi5iNmNjNjU0MTQzZDcgMTAwNjQ0 Cj4gPiAtLS0gYS9pbmNsdWRlL2RybS9icmlkZ2UvYW5hbG9naXhfZHAuaAo+ID4gKysrIGIvaW5j bHVkZS9kcm0vYnJpZGdlL2FuYWxvZ2l4X2RwLmgKPiA+IEBAIC00Miw5ICs0Miw3IEBAIHN0cnVj dCBhbmFsb2dpeF9kcF9wbGF0X2RhdGEgewo+ID4gIAkJCSBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq KTsKPiA+ICB9Owo+ID4gIAo+ID4gLWludCBhbmFsb2dpeF9kcF9wc3JfZW5hYmxlZChzdHJ1Y3Qg YW5hbG9naXhfZHBfZGV2aWNlICpkcCk7Cj4gPiAtaW50IGFuYWxvZ2l4X2RwX2VuYWJsZV9wc3Io c3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApOwo+ID4gLWludCBhbmFsb2dpeF9kcF9kaXNh YmxlX3BzcihzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCk7Cj4gPiArYm9vbCBhbmFsb2dp eF9kcF9zZWxmX3JlZnJlc2hfY2hhbmdlZChzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCk7 Cj4gPiAgCj4gPiAgaW50IGFuYWxvZ2l4X2RwX3Jlc3VtZShzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2 aWNlICpkcCk7Cj4gPiAgaW50IGFuYWxvZ2l4X2RwX3N1c3BlbmQoc3RydWN0IGFuYWxvZ2l4X2Rw X2RldmljZSAqZHApOwo+ID4gCj4gCj4gCj4gCj4gCgotLSAKU2VhbiBQYXVsLCBTb2Z0d2FyZSBF bmdpbmVlciwgR29vZ2xlIC8gQ2hyb21pdW0gT1MKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVs