From mboxrd@z Thu Jan 1 00:00:00 1970 From: Inki Dae Subject: Re: [PATCH V3] drm/exynos: Add DECON driver Date: Mon, 08 Dec 2014 22:39:27 +0900 Message-ID: <5485AA0F.7050404@samsung.com> References: <1417953876-28266-1-git-send-email-ajaykumar.rs@samsung.com> <1417953876-28266-3-git-send-email-ajaykumar.rs@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-reply-to: <1417953876-28266-3-git-send-email-ajaykumar.rs@samsung.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Ajay Kumar Cc: devicetree@vger.kernel.org, linux-samsung-soc@vger.kernel.org, seanpaul@google.com, jg1.han@samsung.com, dri-devel@lists.freedesktop.org, Akshu Agrawal , "cpgs ." , ajaynumb@gmail.com, bhushan.r@samsung.com, prashanth.g@samsung.com List-Id: linux-samsung-soc@vger.kernel.org CgpPbiAyMDE064WEIDEy7JuUIDA37J28IDIxOjA0LCBBamF5IEt1bWFyIHdyb3RlOgo+IFRoaXMg c2VyaWVzIGlzIGJhc2VkIG9uIGV4eW5vcy1kcm0tbmV4dCBicmFuY2ggb2YgSW5raSBEYWUncyB0 cmVlIGF0Ogo+IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9k YWVpbmtpL2RybS1leHlub3MuZ2l0Cj4KPiBERUNPTihEaXNwbGF5IGFuZCBFbmhhbmNlbWVudCBD b250cm9sbGVyKSBpcyB0aGUgbmV3IElQCj4gaW4gZXh5bm9zNyBTT0MgZm9yIGdlbmVyYXRpbmcg dmlkZW8gc2lnbmFscyB1c2luZyBwaXhlbCBkYXRhLgo+Cj4gREVDT04gZHJpdmVyIGNhbiBiZSB1 c2VkIHRvIGRyaXZlIDIgZGlmZmVyZW50IGludGVyZmFjZXMgb24gRXh5bm9zNzoKPiBERUNPTi1J TlQodmlkZW8gY29udHJvbGxlcikgYW5kIERFQ09OLUVYVChNaXhlciBmb3IgSERNSSkKPgo+IFRo ZSBleGlzdGluZyBGSU1EIGRyaXZlciBjb2RlIHdhcyB1c2VkIGFzIGEgdGVtcGxhdGUgdG8gY3Jl YXRlCj4gREVDT04gZHJpdmVyLiBPbmx5IERFQ09OLUlOVCBpcyBzdXBwb3J0ZWQgYXMgb2Ygbm93 LCBhbmQKPiBERUNPTi1FWFQgc3VwcG9ydCB3aWxsIGJlIGFkZGVkIGxhdGVyLgo+Cj4gU2lnbmVk LW9mZi1ieTogQWtzaHUgQWdyYXdhbCA8YWtzaHVhQGdtYWlsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5 OiBBamF5IEt1bWFyIDxhamF5a3VtYXIucnNAc2Ftc3VuZy5jb20+Cj4gLS0tCj4gQ2hhbmdlcyBz aW5jZSBWMToKPiAJLS0gQWRkcmVzcyBjb21tZW50cyBmcm9tIFBhbmthaiBhbmQgZG8gZmV3IGNs ZWFudXBzLgo+IENoYW5nZXMgc2luY2UgVjI6Cj4gCS0tIEFkZHJlc3MgbW9yZSBjb21tZW50cyBm cm9tIFBhbmthaiBhbmQgY2xlYW51cC4KPgo+ICAuLi4vZGV2aWNldHJlZS9iaW5kaW5ncy92aWRl by9leHlub3M3LWRlY29uLnR4dCAgICB8ICAgNjcgKysKPiAgZHJpdmVycy9ncHUvZHJtL2V4eW5v cy9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgfCAgIDEzICstCj4gIGRyaXZlcnMvZ3B1L2Ry bS9leHlub3MvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCj4gIGRyaXZlcnMv Z3B1L2RybS9leHlub3MvZXh5bm9zN19kcm1fZGVjb24uYyAgICAgICAgIHwgMTA0MgorKysrKysr KysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMg ICAgICAgICAgICB8ICAgIDQgKwo+ICBkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1f ZHJ2LmggICAgICAgICAgICB8ICAgIDEgKwo+ICBpbmNsdWRlL3ZpZGVvL2V4eW5vczdfZGVjb24u aCAgICAgICAgICAgICAgICAgICAgICB8ICAzNDYgKysrKysrKwo+ICA3IGZpbGVzIGNoYW5nZWQs IDE0NzEgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 CkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy92aWRlby9leHlub3M3LWRlY29uLnR4 dAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3M3X2Ry bV9kZWNvbi5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3ZpZGVvL2V4eW5vczdfZGVj b24uaAo+Cj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy92 aWRlby9leHlub3M3LWRlY29uLnR4dApiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5n cy92aWRlby9leHlub3M3LWRlY29uLnR4dAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMC4uMTRkYjUxOQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9Eb2N1bWVudGF0aW9uL2Rl dmljZXRyZWUvYmluZGluZ3MvdmlkZW8vZXh5bm9zNy1kZWNvbi50eHQKPiBAQCAtMCwwICsxLDY3 IEBACj4gK0RldmljZS1UcmVlIGJpbmRpbmdzIGZvciBTYW1zdW5nIEV4eW5vczcgU29DIGRpc3Bs YXkgY29udHJvbGxlciAoREVDT04pCj4gKwo+ICtERUNPTiAoRGlzcGxheSBhbmQgRW5oYW5jZW1l bnQgQ29udHJvbGxlcikgaXMgdGhlIERpc3BsYXkgQ29udHJvbGxlcgpmb3IgdGhlCj4gK0V4eW5v czcgc2VyaWVzIG9mIFNvQ3Mgd2hpY2ggdHJhbnNmZXJzIHRoZSBpbWFnZSBkYXRhIGZyb20gYSB2 aWRlbyBtZW1vcnkKPiArYnVmZmVyIHRvIGFuIGV4dGVybmFsIExDRCBpbnRlcmZhY2UuCj4gKwo+ ICtSZXF1aXJlZCBwcm9wZXJ0aWVzOgo+ICstIGNvbXBhdGlibGU6IHZhbHVlIHNob3VsZCBiZSAi c2Ftc3VuZyxleHlub3M3LWRlY29uIjsKPiArCj4gKy0gcmVnOiBwaHlzaWNhbCBiYXNlIGFkZHJl c3MgYW5kIGxlbmd0aCBvZiB0aGUgREVDT04gcmVnaXN0ZXJzIHNldC4KPiArCj4gKy0gaW50ZXJy dXB0LXBhcmVudDogc2hvdWxkIGJlIHRoZSBwaGFuZGxlIG9mIHRoZSBkZWNvbiBjb250cm9sbGVy J3MKPiArCQlwYXJlbnQgaW50ZXJydXB0IGNvbnRyb2xsZXIuCj4gKwo+ICstIGludGVycnVwdHM6 IHNob3VsZCBjb250YWluIGEgbGlzdCBvZiBhbGwgREVDT04gSVAgYmxvY2sgaW50ZXJydXB0cwpp biB0aGUKPiArCQkgb3JkZXI6IEZJRk8gTGV2ZWwsIFZTWU5DLCBMQ0RfU1lTVEVNLiBUaGUgaW50 ZXJydXB0IHNwZWNpZmllcgo+ICsJCSBmb3JtYXQgZGVwZW5kcyBvbiB0aGUgaW50ZXJydXB0IGNv bnRyb2xsZXIgdXNlZC4KPiArCj4gKy0gaW50ZXJydXB0LW5hbWVzOiBzaG91bGQgY29udGFpbiB0 aGUgaW50ZXJydXB0IG5hbWVzOiAiZmlmbyIsICJ2c3luYyIsCj4gKwkibGNkX3N5cyIsIGluIHRo ZSBzYW1lIG9yZGVyIGFzIHRoZXkgd2VyZSBsaXN0ZWQgaW4gdGhlIGludGVycnVwdHMKPiArICAg ICAgICBwcm9wZXJ0eS4KPiArCj4gKy0gcGluY3RybC0wOiBwaW4gY29udHJvbCBncm91cCB0byBi ZSB1c2VkIGZvciB0aGlzIGNvbnRyb2xsZXIuCj4gKwo+ICstIHBpbmN0cmwtbmFtZXM6IG11c3Qg Y29udGFpbiBhICJkZWZhdWx0IiBlbnRyeS4KPiArCj4gKy0gY2xvY2tzOiBtdXN0IGluY2x1ZGUg Y2xvY2sgc3BlY2lmaWVycyBjb3JyZXNwb25kaW5nIHRvIGVudHJpZXMgaW4gdGhlCj4gKyAgICAg ICAgIGNsb2NrLW5hbWVzIHByb3BlcnR5Lgo+ICsKPiArLSBjbG9jay1uYW1lczogbGlzdCBvZiBj bG9jayBuYW1lcyBzb3J0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIGNsb2Nrcwo+ICsgICAg ICAgICAgICAgICBwcm9wZXJ0eS4gTXVzdCBjb250YWluICJwY2xrX2RlY29uMCIsICJhY2xrX2Rl Y29uMCIsCj4gKwkgICAgICAgImRlY29uMF9lY2xrIiwgImRlY29uMF92Y2xrIi4KClNob3VsZCB0 aGUgREVDT04gZHJpdmVyIHJlYWxseSBjYXJlIGFib3V0IGRlY29uMF9lY2xrIGFuZCBkZWNvbjBf dmNsaz8KSWYgc28gdGhlbiBXaGF0IGlzIHRoZSBwdXJwb3NlIG9mIHRoZXNlIHNwZWNpYWwgY2xv Y2tzPyBJJ20gbm90IHN1cmUKdGhhdCB0aGVzZSBjbG9ja3Mgc2hvdWxkIGJlIGNhcmVkIGJ5IGRy aXZlci4gVW50aWwgbm93LCBFeHlub3MgZHJpdmVyCmhhcyBjYXJlZCBhYm91dCBvbmx5IHZpZGVv IHNvdXJjZSBhbmQgY29yZSBzb3VyY2UgY2xvY2tzLgoKQ2FuIHlvdSBnaXZlIG1lIG1vcmUgZGV0 YWlscyBhYm91dCB0aGUgdXNlIG9mIHRoZSBzcGVjaWFsIGNsb2Nrcz8KCj4gKwo+ICtPcHRpb25h bCBQcm9wZXJ0aWVzOgo+ICstIHNhbXN1bmcscG93ZXItZG9tYWluOiBhIHBoYW5kbGUgdG8gREVD T04gcG93ZXIgZG9tYWluIG5vZGUuCj4gKy0gZGlzcGxheS10aW1pbmdzOiB0aW1pbmcgc2V0dGlu Z3MgZm9yIEZJTUQsIGFzIGRlc2NyaWJlZCBpbiBkb2N1bWVudApbMV0uCj4gKwkJQ2FuIGJlIHVz ZWQgaW4gY2FzZSB0aW1pbmdzIGNhbm5vdCBiZSBwcm92aWRlZCBvdGhlcndpc2UKPiArCQlvciB0 byBvdmVycmlkZSB0aW1pbmdzIHByb3ZpZGVkIGJ5IHRoZSBwYW5lbC4KPiArCj4gK1sxXTogRG9j dW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3ZpZGVvL2Rpc3BsYXktdGltaW5nLnR4dAo+ ICsKPiArRXhhbXBsZToKPiArCj4gK1NvQyBzcGVjaWZpYyBEVCBlbnRyeToKPiArCj4gKwlkZWNv bkAxMzkzMDAwMCB7Cj4gKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczctZGVjb24iOwo+ ICsJCWludGVycnVwdC1wYXJlbnQgPSA8JmNvbWJpbmVyPjsKPiArCQlyZWcgPSA8MHgxMzkzMDAw MCAweDEwMDA+Owo+ICsJCWludGVycnVwdC1uYW1lcyA9ICJsY2Rfc3lzIiwgInZzeW5jIiwgImZp Zm8iOwo+ICsJCWludGVycnVwdHMgPSA8MCAxODggMD4sIDwwIDE4OSAwPiwgPDAgMTkwIDA+Owo+ ICsJCWNsb2NrcyA9IDwmY2xvY2tfZGlzcCBQQ0xLX0RFQ09OX0lOVD4sCj4gKwkJCSA8JmNsb2Nr X2Rpc3AgQUNMS19ERUNPTl9JTlQ+LAo+ICsJCQkgPCZjbG9ja19kaXNwIFNDTEtfREVDT05fSU5U X0VDTEs+LAo+ICsJCQkgPCZjbG9ja19kaXNwIFNDTEtfREVDT05fSU5UX0VYVENMS1BMTD47Cj4g KwkJY2xvY2stbmFtZXMgPSAicGNsa19kZWNvbjAiLCAiYWNsa19kZWNvbjAiLCAiZGVjb24wX2Vj bGsiLAo+ICsJCQkJImRlY29uMF92Y2xrIjsKPiArCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwo+ICsJ fTsKPiArCj4gK0JvYXJkIHNwZWNpZmljIERUIGVudHJ5Ogo+ICsKPiArCWRlY29uQDEzOTMwMDAw IHsKPiArCQlwaW5jdHJsLTAgPSA8JmxjZF9jbGsgJnB3bTFfb3V0PjsKPiArCQlwaW5jdHJsLW5h bWVzID0gImRlZmF1bHQiOwo+ICsJCXN0YXR1cyA9ICJva2F5IjsKPiArCX07Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvS2NvbmZpZwpiL2RyaXZlcnMvZ3B1L2RybS9leHlu b3MvS2NvbmZpZwo+IGluZGV4IDdmOWY2ZjkuLmQzNDM0Y2IgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2V4eW5vcy9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9L Y29uZmlnCj4gQEAgLTMyLDkgKzMyLDE2IEBAIGNvbmZpZyBEUk1fRVhZTk9TX0ZJTUQKPiAgCWhl bHAKPiAgCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBFeHlub3MgRklN RCBmb3IgRFJNLgo+Cj4gK2NvbmZpZyBEUk1fRVhZTk9TX0RFQ09OCj4gKwlib29sICJFeHlub3Mg RFJNIERFQ09OIgo+ICsJZGVwZW5kcyBvbiBEUk1fRVhZTk9TCj4gKwlzZWxlY3QgRkJfTU9ERV9I RUxQRVJTCj4gKwloZWxwCj4gKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1 c2UgRXh5bm9zIERFQ09OIGZvciBEUk0uCj4gKwo+ICBjb25maWcgRFJNX0VYWU5PU19EUEkKPiAg CWJvb2wgIkVYWU5PUyBEUk0gcGFyYWxsZWwgb3V0cHV0IHN1cHBvcnQiCj4gLQlkZXBlbmRzIG9u IERSTV9FWFlOT1NfRklNRAo+ICsJZGVwZW5kcyBvbiAoRFJNX0VYWU5PU19GSU1EIHx8IERSTV9F WFlOT1NfREVDT04pCj4gIAlzZWxlY3QgRFJNX1BBTkVMCj4gIAlkZWZhdWx0IG4KPiAgCWhlbHAK PiBAQCAtNDIsNyArNDksNyBAQCBjb25maWcgRFJNX0VYWU5PU19EUEkKPgo+ICBjb25maWcgRFJN X0VYWU5PU19EU0kKPiAgCWJvb2wgIkVYWU5PUyBEUk0gTUlQSS1EU0kgZHJpdmVyIHN1cHBvcnQi Cj4gLQlkZXBlbmRzIG9uIERSTV9FWFlOT1NfRklNRAo+ICsJZGVwZW5kcyBvbiAoRFJNX0VYWU5P U19GSU1EIHx8IERSTV9FWFlOT1NfREVDT04pCj4gIAlzZWxlY3QgRFJNX01JUElfRFNJCj4gIAlz ZWxlY3QgRFJNX1BBTkVMCj4gIAlkZWZhdWx0IG4KPiBAQCAtNTEsNyArNTgsNyBAQCBjb25maWcg RFJNX0VYWU5PU19EU0kKPgo+ICBjb25maWcgRFJNX0VYWU5PU19EUAo+ICAJYm9vbCAiRVhZTk9T IERSTSBEUCBkcml2ZXIgc3VwcG9ydCIKPiAtCWRlcGVuZHMgb24gRFJNX0VYWU5PU19GSU1EICYm IEFSQ0hfRVhZTk9TICYmIChEUk1fUFROMzQ2MD1uIHx8CkRSTV9QVE4zNDYwPXkgfHwgRFJNX1BU TjM0NjA9RFJNX0VYWU5PUykKPiArCWRlcGVuZHMgb24gKERSTV9FWFlOT1NfRklNRCB8fCBEUk1f RVhZTk9TX0RFQ09OKSAmJiBBUkNIX0VYWU5PUyAmJgooRFJNX1BUTjM0NjA9biB8fCBEUk1fUFRO MzQ2MD15IHx8IERSTV9QVE4zNDYwPURSTV9FWFlOT1MpCj4gIAlkZWZhdWx0IERSTV9FWFlOT1MK PiAgCXNlbGVjdCBEUk1fUEFORUwKPiAgCWhlbHAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2V4eW5vcy9NYWtlZmlsZQpiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvTWFrZWZpbGUKPiBp bmRleCAzM2FlMzY1Li5kNTc2NTg3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9leHlu b3MvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL01ha2VmaWxlCj4gQEAg LTExLDYgKzExLDcgQEAgZXh5bm9zZHJtLXkgOj0gZXh5bm9zX2RybV9kcnYubyBleHlub3NfZHJt X2VuY29kZXIubyBcCj4gIGV4eW5vc2RybS0kKENPTkZJR19EUk1fRVhZTk9TX0lPTU1VKSArPSBl eHlub3NfZHJtX2lvbW11Lm8KPiAgZXh5bm9zZHJtLSQoQ09ORklHX0RSTV9FWFlOT1NfRE1BQlVG KSArPSBleHlub3NfZHJtX2RtYWJ1Zi5vCj4gIGV4eW5vc2RybS0kKENPTkZJR19EUk1fRVhZTk9T X0ZJTUQpCSs9IGV4eW5vc19kcm1fZmltZC5vCj4gK2V4eW5vc2RybS0kKENPTkZJR19EUk1fRVhZ Tk9TX0RFQ09OKQkrPSBleHlub3M3X2RybV9kZWNvbi5vCj4gIGV4eW5vc2RybS0kKENPTkZJR19E Uk1fRVhZTk9TX0RQSSkJKz0gZXh5bm9zX2RybV9kcGkubwo+ICBleHlub3Nkcm0tJChDT05GSUdf RFJNX0VYWU5PU19EU0kpCSs9IGV4eW5vc19kcm1fZHNpLm8KPiAgZXh5bm9zZHJtLSQoQ09ORklH X0RSTV9FWFlOT1NfRFApCSs9IGV4eW5vc19kcF9jb3JlLm8gZXh5bm9zX2RwX3JlZy5vCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zN19kcm1fZGVjb24uYwpiL2Ry aXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zN19kcm1fZGVjb24uYwo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uOWQzM2E5YQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vczdfZHJtX2RlY29uLmMKPiBAQCAtMCwwICsxLDEw NDIgQEAKPiArLyogZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3M3X2RybV9kZWNvbi5jCj4g KyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLkx0ZAo+ ICsgKiBBdXRob3JzOgo+ICsgKglBa3NodSBBZ2Fyd2FsIDxha3NodWFAZ21haWwuY29tPgo+ICsg KglBamF5IEt1bWFyIDxhamF5a3VtYXIucnNAc2Ftc3VuZy5jb20+Cj4gKyAqCj4gKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29y Cm1vZGlmeSBpdAo+ICsgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZApieSB0aGUKPiArICogRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yCihhdCB5b3VyCj4g KyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqLwo+ICsjaW5jbHVkZSA8 ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9leHlub3NfZHJtLmg+Cj4gKwo+ICsjaW5jbHVk ZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPiArI2luY2x1ZGUg PGxpbnV4L29mX2FkZHJlc3MuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+ICsj aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbV9y dW50aW1lLmg+Cj4gKwo+ICsjaW5jbHVkZSA8dmlkZW8vb2ZfZGlzcGxheV90aW1pbmcuaD4KPiAr I2luY2x1ZGUgPHZpZGVvL29mX3ZpZGVvbW9kZS5oPgo+ICsjaW5jbHVkZSA8dmlkZW8vZXh5bm9z N19kZWNvbi5oPgo+ICsKPiArI2luY2x1ZGUgImV4eW5vc19kcm1fY3J0Yy5oIgo+ICsjaW5jbHVk ZSAiZXh5bm9zX2RybV9kcnYuaCIKPiArI2luY2x1ZGUgImV4eW5vc19kcm1fZmJkZXYuaCIKPiAr I2luY2x1ZGUgImV4eW5vc19kcm1faW9tbXUuaCIKPiArCj4gKy8qCj4gKyAqIERFQ09OIHN0YW5k cyBmb3IgRGlzcGxheSBhbmQgRW5oYW5jZW1lbnQgY29udHJvbGxlciwgYW5kCj4gKyAqIGFzIGEg ZGlzcGxheSBjb250cm9sbGVyLCBpdCB0cmFuc2ZlcnMgY29udGVudHMgZHJhd24gb24gbWVtb3J5 Cj4gKyAqIHRvIGEgTENEIFBhbmVsIHRocm91Z2ggRGlzcGxheSBJbnRlcmZhY2VzIHN1Y2ggYXMg UkdCIG9yCj4gKyAqIENQVSBJbnRlcmZhY2UuCgpERUNPTiBjb250cm9sbGVyIGlzIG1vcmUgY29t cGxleCB0aGFuIEZJTUQuIFNvIGNhbiB5b3UgbGVhdmUKZGVzY3JpcHRpb25zIGVub3VnaD8KCj4g KyAqLwo+ICsKPiArI2RlZmluZSBERUNPTl9ERUZBVUxUX0ZSQU1FUkFURSA2MAo+ICsjZGVmaW5l IFJFU0VUX1RJTUVPVVQgMjAwCgpJcyB0aGVyZSBzb21lIGd1aWRlIC0gUkVTRVRfVElNRU9VVCBp cyAyMDAgLSBmcm9tIEhXIGd1eXM/Cgo+ICsjZGVmaW5lIE1JTl9GQl9XSURUSF9GT1JfMTZXT1JE X0JVUlNUIDEyOAo+ICsKPiArI2RlZmluZSBXSU5ET1dTX05SCTIKPiArCj4gK3N0cnVjdCBkZWNv bl93aW5fZGF0YSB7Cj4gKwl1bnNpZ25lZCBpbnQJCW92bF94Owo+ICsJdW5zaWduZWQgaW50CQlv dmxfeTsKPiArCXVuc2lnbmVkIGludAkJb2Zmc2V0X3g7Cj4gKwl1bnNpZ25lZCBpbnQJCW9mZnNl dF95Owo+ICsJdW5zaWduZWQgaW50CQlvdmxfd2lkdGg7Cj4gKwl1bnNpZ25lZCBpbnQJCW92bF9o ZWlnaHQ7Cj4gKwl1bnNpZ25lZCBpbnQJCWZiX3dpZHRoOwo+ICsJdW5zaWduZWQgaW50CQlmYl9o ZWlnaHQ7Cj4gKwl1bnNpZ25lZCBpbnQJCWJwcDsKPiArCXVuc2lnbmVkIGludAkJcGl4ZWxfZm9y bWF0Owo+ICsJZG1hX2FkZHJfdAkJZG1hX2FkZHI7Cj4gKwlib29sCQkJZW5hYmxlZDsKPiArCWJv b2wJCQlyZXN1bWU7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZGVjb25fY29udGV4dCB7Cj4gKwlzdHJ1 Y3QgZXh5bm9zX2RybV9tYW5hZ2VyCW1hbmFnZXI7Cj4gKwlzdHJ1Y3QgZGV2aWNlCQkJKmRldjsK PiArCXN0cnVjdCBjbGsJCQkqcGNsazsKPiArCXN0cnVjdCBjbGsJCQkqYWNsazsKPiArCXN0cnVj dCBjbGsJCQkqZWNsazsKPiArCXN0cnVjdCBjbGsJCQkqdmNsazsKPiArCXZvaWQgX19pb21lbQkJ CSpyZWdzOwo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUJCW1vZGU7Cj4gKwlzdHJ1Y3QgZGVj b25fd2luX2RhdGEJCXdpbl9kYXRhW1dJTkRPV1NfTlJdOwo+ICsJdW5zaWduZWQgaW50CQkJZGVm YXVsdF93aW47Cj4gKwl1bnNpZ25lZCBsb25nCQkJaXJxX2ZsYWdzOwo+ICsJYm9vbAkJCQlzdXNw ZW5kZWQ7Cj4gKwl3YWl0X3F1ZXVlX2hlYWRfdAkJd2FpdF92c3luY19xdWV1ZTsKPiArCWF0b21p Y190CQkJd2FpdF92c3luY19ldmVudDsKPiArCj4gKwlzdHJ1Y3QgZXh5bm9zX2RybV9wYW5lbF9p bmZvIHBhbmVsOwo+ICsJc3RydWN0IGV4eW5vc19kcm1fZGlzcGxheSAqZGlzcGxheTsKPiArfTsK PiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRlY29uX2NvbnRleHQgKm1ncl90b19kZWNvbihz dHJ1Y3QKZXh5bm9zX2RybV9tYW5hZ2VyICptZ3IpCj4gK3sKPiArCXJldHVybiBjb250YWluZXJf b2YobWdyLCBzdHJ1Y3QgZGVjb25fY29udGV4dCwgbWFuYWdlcik7Cj4gK30KPiArCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGRlY29uX2RyaXZlcl9kdF9tYXRjaFtdID0gewo+ ICsJeyAuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczctZGVjb24ifSwKPiArCXt9LAo+ICt9 Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkZWNvbl9kcml2ZXJfZHRfbWF0Y2gpOwo+ICsK PiArc3RhdGljIHZvaWQgZGVjb25fd2FpdF9mb3JfdmJsYW5rKHN0cnVjdCBleHlub3NfZHJtX21h bmFnZXIgKm1ncikKPiArewo+ICsJc3RydWN0IGRlY29uX2NvbnRleHQgKmN0eCA9IG1ncl90b19k ZWNvbihtZ3IpOwo+ICsKPiArCWlmIChjdHgtPnN1c3BlbmRlZCkKPiArCQlyZXR1cm47Cj4gKwo+ ICsJYXRvbWljX3NldCgmY3R4LT53YWl0X3ZzeW5jX2V2ZW50LCAxKTsKPiArCj4gKwkvKgo+ICsJ ICogd2FpdCBmb3IgZGVjb24gdG8gc2lnbmFsIFZTWU5DIGludGVycnVwdCBvciByZXR1cm4gYWZ0 ZXIKPiArCSAqIHRpbWVvdXQgd2hpY2ggaXMgc2V0IHRvIDUwbXMgKHJlZnJlc2ggcmF0ZSBvZiAy MCkuCj4gKwkgKi8KPiArCWlmICghd2FpdF9ldmVudF90aW1lb3V0KGN0eC0+d2FpdF92c3luY19x dWV1ZSwKPiArCQkJCSFhdG9taWNfcmVhZCgmY3R4LT53YWl0X3ZzeW5jX2V2ZW50KSwKPiArCQkJ CUhaLzIwKSkKPiArCQlEUk1fREVCVUdfS01TKCJ2Ymxhbmsgd2FpdCB0aW1lZCBvdXQuXG4iKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgZGVjb25fY2xlYXJfY2hhbm5lbChzdHJ1Y3QgZXh5bm9z X2RybV9tYW5hZ2VyICptZ3IpCj4gK3sKPiArCXN0cnVjdCBkZWNvbl9jb250ZXh0ICpjdHggPSBt Z3JfdG9fZGVjb24obWdyKTsKPiArCWludCB3aW4sIGNoX2VuYWJsZWQgPSAwOwo+ICsKPiArCURS TV9ERUJVR19LTVMoIiVzXG4iLCBfX0ZJTEVfXyk7Cj4gKwo+ICsJLyogQ2hlY2sgaWYgYW55IGNo YW5uZWwgaXMgZW5hYmxlZC4gKi8KPiArCWZvciAod2luID0gMDsgd2luIDwgV0lORE9XU19OUjsg d2luKyspIHsKPiArCQl1MzIgdmFsID0gcmVhZGwoY3R4LT5yZWdzICsgV0lOQ09OKHdpbikpOwo+ ICsKPiArCQlpZiAodmFsICYgV0lOQ09OeF9FTldJTikgewo+ICsJCQl2YWwgJj0gfldJTkNPTnhf RU5XSU47Cj4gKwkJCXdyaXRlbCh2YWwsIGN0eC0+cmVncyArIFdJTkNPTih3aW4pKTsKPiArCQkJ Y2hfZW5hYmxlZCA9IDE7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCS8qIFdhaXQgZm9yIHZzeW5jLCBh cyBkaXNhYmxlIGNoYW5uZWwgdGFrZXMgZWZmZWN0IGF0IG5leHQgdnN5bmMgKi8KPiArCWlmIChj aF9lbmFibGVkKSB7Cj4gKwkJdW5zaWduZWQgaW50IHN0YXRlID0gY3R4LT5zdXNwZW5kZWQ7Cj4g Kwo+ICsJCWN0eC0+c3VzcGVuZGVkID0gMDsKPiArCQlkZWNvbl93YWl0X2Zvcl92YmxhbmsobWdy KTsKPiArCQljdHgtPnN1c3BlbmRlZCA9IHN0YXRlOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IGRlY29uX21ncl9pbml0aWFsaXplKHN0cnVjdCBleHlub3NfZHJtX21hbmFnZXIgKm1nciwK PiArCQkJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYpCj4gK3sKPiArCXN0cnVjdCBkZWNvbl9j b250ZXh0ICpjdHggPSBtZ3JfdG9fZGVjb24obWdyKTsKPiArCXN0cnVjdCBleHlub3NfZHJtX3By aXZhdGUgKnByaXYgPSBkcm1fZGV2LT5kZXZfcHJpdmF0ZTsKPiArCWludCByZXQ7Cj4gKwo+ICsJ bWdyLT5kcm1fZGV2ID0gZHJtX2RldjsKPiArCW1nci0+cGlwZSA9IHByaXYtPnBpcGUrKzsKPiAr Cj4gKwkvKiBhdHRhY2ggdGhpcyBzdWIgZHJpdmVyIHRvIGlvbW11IG1hcHBpbmcgaWYgc3VwcG9y dGVkLiAqLwo+ICsJaWYgKGlzX2RybV9pb21tdV9zdXBwb3J0ZWQobWdyLT5kcm1fZGV2KSkgewo+ ICsJCS8qCj4gKwkJICogSWYgYW55IGNoYW5uZWwgaXMgYWxyZWFkeSBhY3RpdmUsIGlvbW11IHdp bGwgdGhyb3cKPiArCQkgKiBhIFBBR0UgRkFVTFQgd2hlbiBlbmFibGVkLiBTbyBjbGVhciBhbnkg Y2hhbm5lbCBpZiBlbmFibGVkLgo+ICsJCSAqLwo+ICsJCWRlY29uX2NsZWFyX2NoYW5uZWwobWdy KTsKPiArCj4gKwkJcmV0ID0gZHJtX2lvbW11X2F0dGFjaF9kZXZpY2UobWdyLT5kcm1fZGV2LCBj dHgtPmRldik7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlEUk1fRVJST1IoImRybV9pb21tdV9hdHRh Y2ggZmFpbGVkLlxuIik7Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkZWNvbl9tZ3JfcmVtb3ZlKHN0cnVjdCBl eHlub3NfZHJtX21hbmFnZXIgKm1ncikKPiArewo+ICsJc3RydWN0IGRlY29uX2NvbnRleHQgKmN0 eCA9IG1ncl90b19kZWNvbihtZ3IpOwo+ICsKPiArCS8qIGRldGFjaCB0aGlzIHN1YiBkcml2ZXIg ZnJvbSBpb21tdSBtYXBwaW5nIGlmIHN1cHBvcnRlZC4gKi8KPiArCWlmIChpc19kcm1faW9tbXVf c3VwcG9ydGVkKG1nci0+ZHJtX2RldikpCj4gKwkJZHJtX2lvbW11X2RldGFjaF9kZXZpY2UobWdy LT5kcm1fZGV2LCBjdHgtPmRldik7Cj4gK30KPiArCj4gK3N0YXRpYyB1MzIgZGVjb25fY2FsY19j bGtkaXYoc3RydWN0IGRlY29uX2NvbnRleHQgKmN0eCwKPiArCQljb25zdCBzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZSkKPiArewo+ICsJdW5zaWduZWQgbG9uZyBpZGVhbF9jbGsgPSBtb2Rl LT5odG90YWwgKiBtb2RlLT52dG90YWwgKiBtb2RlLT52cmVmcmVzaDsKPiArCXUzMiBjbGtkaXY7 Cj4gKwo+ICsJLyogRmluZCB0aGUgY2xvY2sgZGl2aWRlciB2YWx1ZSB0aGF0IGdldHMgdXMgY2xv c2VzdCB0byBpZGVhbF9jbGsgKi8KPiArCWNsa2RpdiA9IERJVl9ST1VORF9VUChjbGtfZ2V0X3Jh dGUoY3R4LT52Y2xrKSwgaWRlYWxfY2xrKTsKPiArCj4gKwlyZXR1cm4gKGNsa2RpdiA8IDB4MTAw KSA/IGNsa2RpdiA6IDB4ZmY7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGRlY29uX21vZGVfZml4 dXAoc3RydWN0IGV4eW5vc19kcm1fbWFuYWdlciAqbWdyLAo+ICsJCWNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlLAo+ICsJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3Rl ZF9tb2RlKQo+ICt7Cj4gKwlpZiAoYWRqdXN0ZWRfbW9kZS0+dnJlZnJlc2ggPT0gMCkKPiArCQlh ZGp1c3RlZF9tb2RlLT52cmVmcmVzaCA9IERFQ09OX0RFRkFVTFRfRlJBTUVSQVRFOwo+ICsKPiAr CXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkZWNvbl9tb2RlX3NldChzdHJ1 Y3QgZXh5bm9zX2RybV9tYW5hZ2VyICptZ3IsCj4gKwkJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKmluX21vZGUpCj4gK3sKPiArCXN0cnVjdCBkZWNvbl9jb250ZXh0ICpjdHggPSBtZ3Jf dG9fZGVjb24obWdyKTsKPiArCj4gKwlkcm1fbW9kZV9jb3B5KCZjdHgtPm1vZGUsIGluX21vZGUp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkZWNvbl9jb21taXQoc3RydWN0IGV4eW5vc19kcm1f bWFuYWdlciAqbWdyKQo+ICt7Cj4gKwlzdHJ1Y3QgZGVjb25fY29udGV4dCAqY3R4ID0gbWdyX3Rv X2RlY29uKG1ncik7Cj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZjdHgtPm1v ZGU7Cj4gKwl1MzIgdmFsLCBjbGtkaXY7Cj4gKwlpbnQgdnN5bmNfbGVuLCB2YnBkLCB2ZnBkLCBo c3luY19sZW4sIGhicGQsIGhmcGQ7Cj4gKwo+ICsJaWYgKGN0eC0+c3VzcGVuZGVkKQo+ICsJCXJl dHVybjsKPiArCj4gKwkvKiBub3RoaW5nIHRvIGRvIGlmIHdlIGhhdmVuJ3Qgc2V0IHRoZSBtb2Rl IHlldCAqLwo+ICsJaWYgKG1vZGUtPmh0b3RhbCA9PSAwIHx8IG1vZGUtPnZ0b3RhbCA9PSAwKQo+ ICsJCXJldHVybjsKPiArCj4gKyAgICAgIC8qIHNldHVwIHZlcnRpY2FsIHRpbWluZyB2YWx1ZXMu ICovCj4gKwl2c3luY19sZW4gPSBtb2RlLT5jcnRjX3ZzeW5jX2VuZCAtIG1vZGUtPmNydGNfdnN5 bmNfc3RhcnQ7Cj4gKwl2YnBkID0gbW9kZS0+Y3J0Y192dG90YWwgLSBtb2RlLT5jcnRjX3ZzeW5j X2VuZDsKPiArCXZmcGQgPSBtb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0IC0gbW9kZS0+Y3J0Y192ZGlz cGxheTsKPiArCj4gKwl2YWwgPSBWSURUQ09OMF9WQlBEKHZicGQgLSAxKSB8IFZJRFRDT04wX1ZG UEQodmZwZCAtIDEpOwo+ICsJd3JpdGVsKHZhbCwgY3R4LT5yZWdzICsgVklEVENPTjApOwo+ICsK PiArCXZhbCA9IFZJRFRDT04xX1ZTUFcodnN5bmNfbGVuIC0gMSk7Cj4gKwl3cml0ZWwodmFsLCBj dHgtPnJlZ3MgKyBWSURUQ09OMSk7Cj4gKwo+ICsJLyogc2V0dXAgaG9yaXpvbnRhbCB0aW1pbmcg dmFsdWVzLiAgKi8KPiArCWhzeW5jX2xlbiA9IG1vZGUtPmNydGNfaHN5bmNfZW5kIC0gbW9kZS0+ Y3J0Y19oc3luY19zdGFydDsKPiArCWhicGQgPSBtb2RlLT5jcnRjX2h0b3RhbCAtIG1vZGUtPmNy dGNfaHN5bmNfZW5kOwo+ICsJaGZwZCA9IG1vZGUtPmNydGNfaHN5bmNfc3RhcnQgLSBtb2RlLT5j cnRjX2hkaXNwbGF5Owo+ICsKPiArCS8qIHNldHVwIGhvcml6b250YWwgdGltaW5nIHZhbHVlcy4g ICovCj4gKwl2YWwgPSBWSURUQ09OMl9IQlBEKGhicGQgLSAxKSB8IFZJRFRDT04yX0hGUEQoaGZw ZCAtIDEpOwo+ICsJd3JpdGVsKHZhbCwgY3R4LT5yZWdzICsgVklEVENPTjIpOwo+ICsKPiArCXZh bCA9IFZJRFRDT04zX0hTUFcoaHN5bmNfbGVuIC0gMSk7Cj4gKwl3cml0ZWwodmFsLCBjdHgtPnJl Z3MgKyBWSURUQ09OMyk7Cj4gKwo+ICsJLyogc2V0dXAgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwg ZGlzcGxheSBzaXplLiAqLwo+ICsJdmFsID0gVklEVENPTjRfTElORVZBTChtb2RlLT52ZGlzcGxh eSAtIDEpIHwKPiArCSAgICAgICBWSURUQ09ONF9IT1pWQUwobW9kZS0+aGRpc3BsYXkgLSAxKTsK PiArCXdyaXRlbCh2YWwsIGN0eC0+cmVncyArIFZJRFRDT040KTsKPiArCj4gKwl3cml0ZWwobW9k ZS0+dmRpc3BsYXkgLSAxLCBjdHgtPnJlZ3MgKyBMSU5FQ05UX09QX1RIUkVTSE9MRCk7Cj4gKwo+ ICsJLyoKPiArCSAqIGZpZWxkcyBvZiByZWdpc3RlciB3aXRoIHByZWZpeCAnX0YnIHdvdWxkIGJl IHVwZGF0ZWQKPiArCSAqIGF0IHZzeW5jKHNhbWUgYXMgZG1hIHN0YXJ0KQo+ICsJICovCj4gKwl2 YWwgPSBWSURDT04wX0VOVklEIHwgVklEQ09OMF9FTlZJRF9GOwo+ICsJd3JpdGVsKHZhbCwgY3R4 LT5yZWdzICsgVklEQ09OMCk7Cj4gKwo+ICsJY2xrZGl2ID0gZGVjb25fY2FsY19jbGtkaXYoY3R4 LCBtb2RlKTsKPiArCWlmIChjbGtkaXYgPiAxKSB7Cj4gKwkJdmFsID0gVkNMS0NPTjFfQ0xLVkFM X05VTV9WQ0xLKGNsa2RpdiAtIDEpOwo+ICsJCXdyaXRlbCh2YWwsIGN0eC0+cmVncyArIFZDTEtD T04xKTsKPiArCQl3cml0ZWwodmFsLCBjdHgtPnJlZ3MgKyBWQ0xLQ09OMik7Cj4gKwl9Cj4gKwo+ ICsJdmFsID0gcmVhZGwoY3R4LT5yZWdzICsgREVDT05fVVBEQVRFKTsKPiArCXZhbCB8PSBERUNP Tl9VUERBVEVfU1RBTkRBTE9ORV9GOwo+ICsJd3JpdGVsKHZhbCwgY3R4LT5yZWdzICsgREVDT05f VVBEQVRFKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkZWNvbl9lbmFibGVfdmJsYW5rKHN0cnVj dCBleHlub3NfZHJtX21hbmFnZXIgKm1ncikKPiArewo+ICsJc3RydWN0IGRlY29uX2NvbnRleHQg KmN0eCA9IG1ncl90b19kZWNvbihtZ3IpOwo+ICsJdTMyIHZhbDsKPiArCj4gKwlpZiAoY3R4LT5z dXNwZW5kZWQpCj4gKwkJcmV0dXJuIC1FUEVSTTsKPiArCj4gKwlpZiAoIXRlc3RfYW5kX3NldF9i aXQoMCwgJmN0eC0+aXJxX2ZsYWdzKSkgewo+ICsJCXZhbCA9IHJlYWRsKGN0eC0+cmVncyArIFZJ RElOVENPTjApOwo+ICsKPiArCQl2YWwgfD0gVklESU5UQ09OMF9JTlRfRU5BQkxFOwo+ICsJCXZh bCB8PSBWSURJTlRDT04wX0lOVF9GUkFNRTsKPiArCj4gKwkJdmFsICY9IH5WSURJTlRDT04wX0ZS QU1FU0VMMF9NQVNLOwo+ICsJCXZhbCB8PSBWSURJTlRDT04wX0ZSQU1FU0VMMF9WU1lOQzsKPiAr Cj4gKwkJd3JpdGVsKHZhbCwgY3R4LT5yZWdzICsgVklESU5UQ09OMCk7Cj4gKwl9Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRlY29uX2Rpc2FibGVfdmJsYW5rKHN0 cnVjdCBleHlub3NfZHJtX21hbmFnZXIgKm1ncikKPiArewo+ICsJc3RydWN0IGRlY29uX2NvbnRl eHQgKmN0eCA9IG1ncl90b19kZWNvbihtZ3IpOwo+ICsJdTMyIHZhbDsKPiArCj4gKwlpZiAoY3R4 LT5zdXNwZW5kZWQpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQo MCwgJmN0eC0+aXJxX2ZsYWdzKSkgewo+ICsJCXZhbCA9IHJlYWRsKGN0eC0+cmVncyArIFZJRElO VENPTjApOwo+ICsKPiArCQl2YWwgJj0gflZJRElOVENPTjBfSU5UX0VOQUJMRTsKPiArCQl2YWwg Jj0gflZJRElOVENPTjBfSU5UX0ZSQU1FOwo+ICsKPiArCQl3cml0ZWwodmFsLCBjdHgtPnJlZ3Mg KyBWSURJTlRDT04wKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZGVjb25fd2luX21v ZGVfc2V0KHN0cnVjdCBleHlub3NfZHJtX21hbmFnZXIgKm1nciwKPiArCQkJc3RydWN0IGV4eW5v c19kcm1fb3ZlcmxheSAqb3ZlcmxheSkKPiArewo+ICsJc3RydWN0IGRlY29uX2NvbnRleHQgKmN0 eCA9IG1ncl90b19kZWNvbihtZ3IpOwo+ICsJc3RydWN0IGRlY29uX3dpbl9kYXRhICp3aW5fZGF0 YTsKPiArCWludCB3aW4sIHBhZGRpbmc7Cj4gKwo+ICsJaWYgKCFvdmVybGF5KSB7Cj4gKwkJRFJN X0VSUk9SKCJvdmVybGF5IGlzIE5VTExcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwl3 aW4gPSBvdmVybGF5LT56cG9zOwo+ICsJaWYgKHdpbiA9PSBERUZBVUxUX1pQT1MpCj4gKwkJd2lu ID0gY3R4LT5kZWZhdWx0X3dpbjsKPiArCj4gKwlpZiAod2luIDwgMCB8fCB3aW4gPj0gV0lORE9X U19OUikKPiArCQlyZXR1cm47Cj4gKwo+ICsKPiArCXdpbl9kYXRhID0gJmN0eC0+d2luX2RhdGFb d2luXTsKPiArCj4gKwlwYWRkaW5nID0gKG92ZXJsYXktPnBpdGNoIC8gKG92ZXJsYXktPmJwcCA+ PiAzKSkgLSBvdmVybGF5LT5mYl93aWR0aDsKPiArCXdpbl9kYXRhLT5vZmZzZXRfeCA9IG92ZXJs YXktPmZiX3g7Cj4gKwl3aW5fZGF0YS0+b2Zmc2V0X3kgPSBvdmVybGF5LT5mYl95Owo+ICsJd2lu X2RhdGEtPmZiX3dpZHRoID0gb3ZlcmxheS0+ZmJfd2lkdGggKyBwYWRkaW5nOwo+ICsJd2luX2Rh dGEtPmZiX2hlaWdodCA9IG92ZXJsYXktPmZiX2hlaWdodDsKPiArCXdpbl9kYXRhLT5vdmxfeCA9 IG92ZXJsYXktPmNydGNfeDsKPiArCXdpbl9kYXRhLT5vdmxfeSA9IG92ZXJsYXktPmNydGNfeTsK PiArCXdpbl9kYXRhLT5vdmxfd2lkdGggPSBvdmVybGF5LT5jcnRjX3dpZHRoOwo+ICsJd2luX2Rh dGEtPm92bF9oZWlnaHQgPSBvdmVybGF5LT5jcnRjX2hlaWdodDsKPiArCXdpbl9kYXRhLT5kbWFf YWRkciA9IG92ZXJsYXktPmRtYV9hZGRyWzBdOwo+ICsJd2luX2RhdGEtPmJwcCA9IG92ZXJsYXkt PmJwcDsKPiArCXdpbl9kYXRhLT5waXhlbF9mb3JtYXQgPSBvdmVybGF5LT5waXhlbF9mb3JtYXQ7 Cj4gKwo+ICsJRFJNX0RFQlVHX0tNUygib2Zmc2V0X3ggPSAlZCwgb2Zmc2V0X3kgPSAlZFxuIiwK PiArCQkJd2luX2RhdGEtPm9mZnNldF94LCB3aW5fZGF0YS0+b2Zmc2V0X3kpOwo+ICsJRFJNX0RF QlVHX0tNUygib3ZsX3dpZHRoID0gJWQsIG92bF9oZWlnaHQgPSAlZFxuIiwKPiArCQkJd2luX2Rh dGEtPm92bF93aWR0aCwgd2luX2RhdGEtPm92bF9oZWlnaHQpOwo+ICsJRFJNX0RFQlVHX0tNUygi cGFkZHIgPSAweCVseFxuIiwgKHVuc2lnbmVkIGxvbmcpd2luX2RhdGEtPmRtYV9hZGRyKTsKPiAr CURSTV9ERUJVR19LTVMoImZiX3dpZHRoID0gJWQsIGNydGNfd2lkdGggPSAlZFxuIiwKPiArCQkJ b3ZlcmxheS0+ZmJfd2lkdGgsIG92ZXJsYXktPmNydGNfd2lkdGgpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBkZWNvbl93aW5fc2V0X3BpeGZtdChzdHJ1Y3QgZGVjb25fY29udGV4dCAqY3R4LCB1 bnNpZ25lZAppbnQgd2luKQo+ICt7Cj4gKwlzdHJ1Y3QgZGVjb25fd2luX2RhdGEgKndpbl9kYXRh ID0gJmN0eC0+d2luX2RhdGFbd2luXTsKPiArCXVuc2lnbmVkIGxvbmcgdmFsOwo+ICsKPiArCXZh bCA9IHJlYWRsKGN0eC0+cmVncyArIFdJTkNPTih3aW4pKTsKPiArCXZhbCAmPSB+V0lOQ09OeF9C UFBNT0RFX01BU0s7Cj4gKwo+ICsJc3dpdGNoICh3aW5fZGF0YS0+cGl4ZWxfZm9ybWF0KSB7Cj4g KwljYXNlIERSTV9GT1JNQVRfUkdCNTY1Ogo+ICsJCXZhbCB8PSBXSU5DT054X0JQUE1PREVfMTZC UFBfNTY1Owo+ICsJCXZhbCB8PSBXSU5DT054X0JVUlNUTEVOXzE2V09SRDsKPiArCQlicmVhazsK PiArCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPiArCQl2YWwgfD0gV0lOQ09OeF9CUFBNT0RF XzI0QlBQX3hSR0I7Cj4gKwkJdmFsIHw9IFdJTkNPTnhfQlVSU1RMRU5fMTZXT1JEOwo+ICsJCWJy ZWFrOwo+ICsJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4Ogo+ICsJCXZhbCB8PSBXSU5DT054X0JQ UE1PREVfMjRCUFBfeEJHUjsKPiArCQl2YWwgfD0gV0lOQ09OeF9CVVJTVExFTl8xNldPUkQ7Cj4g KwkJYnJlYWs7Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCWDg4ODg6Cj4gKwkJdmFsIHw9IFdJTkNP TnhfQlBQTU9ERV8yNEJQUF9SR0J4Owo+ICsJCXZhbCB8PSBXSU5DT054X0JVUlNUTEVOXzE2V09S RDsKPiArCQlicmVhazsKPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1JYODg4ODoKPiArCQl2YWwgfD0g V0lOQ09OeF9CUFBNT0RFXzI0QlBQX0JHUng7Cj4gKwkJdmFsIHw9IFdJTkNPTnhfQlVSU1RMRU5f MTZXT1JEOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4Ogo+ICsJCXZh bCB8PSBXSU5DT054X0JQUE1PREVfMzJCUFBfQVJHQiB8IFdJTkNPTnhfQkxEX1BJWCB8Cj4gKwkJ CVdJTkNPTnhfQUxQSEFfU0VMOwo+ICsJCXZhbCB8PSBXSU5DT054X0JVUlNUTEVOXzE2V09SRDsK PiArCQlicmVhazsKPiArCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKPiArCQl2YWwgfD0gV0lO Q09OeF9CUFBNT0RFXzMyQlBQX0FCR1IgfCBXSU5DT054X0JMRF9QSVggfAo+ICsJCQlXSU5DT054 X0FMUEhBX1NFTDsKPiArCQl2YWwgfD0gV0lOQ09OeF9CVVJTVExFTl8xNldPUkQ7Cj4gKwkJYnJl YWs7Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6Cj4gKwkJdmFsIHw9IFdJTkNPTnhfQlBQ TU9ERV8zMkJQUF9SR0JBIHwgV0lOQ09OeF9CTERfUElYIHwKPiArCQkJV0lOQ09OeF9BTFBIQV9T RUw7Cj4gKwkJdmFsIHw9IFdJTkNPTnhfQlVSU1RMRU5fMTZXT1JEOwo+ICsJCWJyZWFrOwo+ICsJ Y2FzZSBEUk1fRk9STUFUX0JHUkE4ODg4Ogo+ICsJCXZhbCB8PSBXSU5DT054X0JQUE1PREVfMzJC UFBfQkdSQSB8IFdJTkNPTnhfQkxEX1BJWCB8Cj4gKwkJCVdJTkNPTnhfQUxQSEFfU0VMOwo+ICsJ CXZhbCB8PSBXSU5DT054X0JVUlNUTEVOXzE2V09SRDsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6 Cj4gKwkJRFJNX0RFQlVHX0tNUygiaW52YWxpZCBwaXhlbCBzaXplIHNvIHVzaW5nIHVucGFja2Vk IDI0YnBwLlxuIik7Cj4gKwo+ICsJCXZhbCB8PSBXSU5DT054X0JQUE1PREVfMjRCUFBfeFJHQjsK PiArCQl2YWwgfD0gV0lOQ09OeF9CVVJTVExFTl8xNldPUkQ7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4g Kwo+ICsJRFJNX0RFQlVHX0tNUygiYnBwID0gJWRcbiIsIHdpbl9kYXRhLT5icHApOwo+ICsKPiAr CS8qCj4gKwkgKiBJbiBjYXNlIG9mIGV4eW5vcywgc2V0dGluZyBkbWEtYnVyc3QgdG8gMTZXb3Jk IGNhdXNlcyBwZXJtYW5lbnQKPiArCSAqIHRlYXJpbmcgZm9yIHZlcnkgc21hbGwgYnVmZmVycywg ZS5nLiBjdXJzb3IgYnVmZmVyLiBCdXJzdCBNb2RlCj4gKwkgKiBzd2l0Y2hpbmcgd2hpY2ggaXMg YmFzZWQgb24gb3ZlcmxheSBzaXplIGlzIG5vdCByZWNvbW1lbmRlZCBhcwo+ICsJICogb3Zlcmxh eSBzaXplIHZhcmllcyBhIGxvdCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIHNjcmVlbiBhbmQgcmFw aWQKPiArCSAqIG1vdmVtZW50IGNhdXNlcyB1bnN0YWJsZSBETUEgd2hpY2ggcmVzdWx0cyBpbnRv IGlvbW11IGNyYXNoL3RlYXIuCj4gKwkgKi8KPiArCj4gKwlpZiAod2luX2RhdGEtPmZiX3dpZHRo IDwgTUlOX0ZCX1dJRFRIX0ZPUl8xNldPUkRfQlVSU1QpIHsKPiArCQl2YWwgJj0gfldJTkNPTnhf QlVSU1RMRU5fTUFTSzsKPiArCQl2YWwgfD0gV0lOQ09OeF9CVVJTVExFTl84V09SRDsKPiArCX0K PiArCj4gKwl3cml0ZWwodmFsLCBjdHgtPnJlZ3MgKyBXSU5DT04od2luKSk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGRlY29uX3dpbl9zZXRfY29sa2V5KHN0cnVjdCBkZWNvbl9jb250ZXh0ICpj dHgsIHVuc2lnbmVkCmludCB3aW4pCj4gK3sKPiArCXVuc2lnbmVkIGludCBrZXljb24wID0gMCwg a2V5Y29uMSA9IDA7Cj4gKwo+ICsJa2V5Y29uMCA9IH4oV3hLRVlDT04wX0tFWUJMX0VOIHwgV3hL RVlDT04wX0tFWUVOX0YgfAo+ICsJCQlXeEtFWUNPTjBfRElSQ09OKSB8IFd4S0VZQ09OMF9DT01Q S0VZKDApOwo+ICsKPiArCWtleWNvbjEgPSBXeEtFWUNPTjFfQ09MVkFMKDB4ZmZmZmZmZmYpOwo+ ICsKPiArCXdyaXRlbChrZXljb24wLCBjdHgtPnJlZ3MgKyBXS0VZQ09OMF9CQVNFKHdpbikpOwo+ ICsJd3JpdGVsKGtleWNvbjEsIGN0eC0+cmVncyArIFdLRVlDT04xX0JBU0Uod2luKSk7Cj4gK30K PiArCj4gKy8qKgo+ICsgKiBzaGFkb3dfcHJvdGVjdF93aW4oKSAtIGRpc2FibGUgdXBkYXRpbmcg dmFsdWVzIGZyb20gc2hhZG93CnJlZ2lzdGVycyBhdCB2c3luYwo+ICsgKgo+ICsgKiBAd2luOiB3 aW5kb3cgdG8gcHJvdGVjdCByZWdpc3RlcnMgZm9yCj4gKyAqIEBwcm90ZWN0OiAxIHRvIHByb3Rl Y3QgKGRpc2FibGUgdXBkYXRlcykKPiArICovCj4gK3N0YXRpYyB2b2lkIGRlY29uX3NoYWRvd19w cm90ZWN0X3dpbihzdHJ1Y3QgZGVjb25fY29udGV4dCAqY3R4LAo+ICsJCQkJCQkJaW50IHdpbiwg Ym9vbCBwcm90ZWN0KQo+ICt7Cj4gKwl1MzIgYml0cywgdmFsOwo+ICsKPiArCWJpdHMgPSBTSEFE T1dDT05fV0lOeF9QUk9URUNUKHdpbik7Cj4gKwo+ICsJdmFsID0gcmVhZGwoY3R4LT5yZWdzICsg U0hBRE9XQ09OKTsKPiArCWlmIChwcm90ZWN0KQo+ICsJCXZhbCB8PSBiaXRzOwo+ICsJZWxzZQo+ ICsJCXZhbCAmPSB+Yml0czsKPiArCXdyaXRlbCh2YWwsIGN0eC0+cmVncyArIFNIQURPV0NPTik7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRlY29uX3dpbl9jb21taXQoc3RydWN0IGV4eW5vc19k cm1fbWFuYWdlciAqbWdyLCBpbnQgenBvcykKPiArewo+ICsJc3RydWN0IGRlY29uX2NvbnRleHQg KmN0eCA9IG1ncl90b19kZWNvbihtZ3IpOwo+ICsJc3RydWN0IGRlY29uX3dpbl9kYXRhICp3aW5f ZGF0YTsKPiArCWludCB3aW4gPSB6cG9zOwo+ICsJdW5zaWduZWQgbG9uZyB2YWwsIGFscGhhLCBi bGVuZGVxOwo+ICsJdW5zaWduZWQgaW50IGxhc3RfeDsKPiArCXVuc2lnbmVkIGludCBsYXN0X3k7 Cj4gKwo+ICsJaWYgKGN0eC0+c3VzcGVuZGVkKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAod2lu ID09IERFRkFVTFRfWlBPUykKPiArCQl3aW4gPSBjdHgtPmRlZmF1bHRfd2luOwo+ICsKPiArCWlm ICh3aW4gPCAwIHx8IHdpbiA+PSBXSU5ET1dTX05SKQo+ICsJCXJldHVybjsKPiArCj4gKwl3aW5f ZGF0YSA9ICZjdHgtPndpbl9kYXRhW3dpbl07Cj4gKwo+ICsJLyogSWYgc3VzcGVuZGVkLCBlbmFi bGUgdGhpcyBvbiByZXN1bWUgKi8KPiArCWlmIChjdHgtPnN1c3BlbmRlZCkgewo+ICsJCXdpbl9k YXRhLT5yZXN1bWUgPSB0cnVlOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwkvKgo+ICsJICog U0hBRE9XQ09OL1BSVENPTiByZWdpc3RlciBpcyB1c2VkIGZvciBlbmFibGluZyB0aW1pbmcuCj4g KwkgKgo+ICsJICogZm9yIGV4YW1wbGUsIG9uY2Ugb25seSB3aWR0aCB2YWx1ZSBvZiBhIHJlZ2lz dGVyIGlzIHNldCwKPiArCSAqIGlmIHRoZSBkbWEgaXMgc3RhcnRlZCB0aGVuIGRlY29uIGhhcmR3 YXJlIGNvdWxkIG1hbGZ1bmN0aW9uIHNvCj4gKwkgKiB3aXRoIHByb3RlY3Qgd2luZG93IHNldHRp bmcsIHRoZSByZWdpc3RlciBmaWVsZHMgd2l0aCBwcmVmaXggJ19GJwo+ICsJICogd291bGRuJ3Qg YmUgdXBkYXRlZCBhdCB2c3luYyBhbHNvIGJ1dCB1cGRhdGVkIG9uY2UgdW5wcm90ZWN0IHdpbmRv dwo+ICsJICogaXMgc2V0Lgo+ICsJICovCj4gKwo+ICsJLyogcHJvdGVjdCB3aW5kb3dzICovCj4g KwlkZWNvbl9zaGFkb3dfcHJvdGVjdF93aW4oY3R4LCB3aW4sIHRydWUpOwo+ICsKPiArCS8qIGJ1 ZmZlciBzdGFydCBhZGRyZXNzICovCj4gKwl2YWwgPSAodW5zaWduZWQgbG9uZyl3aW5fZGF0YS0+ ZG1hX2FkZHI7Cj4gKwl3cml0ZWwodmFsLCBjdHgtPnJlZ3MgKyBWSURXX0JVRl9TVEFSVCh3aW4p KTsKPiArCj4gKwkvKiBidWZmZXIgc2l6ZSAqLwo+ICsJd3JpdGVsKHdpbl9kYXRhLT5mYl93aWR0 aCwgY3R4LT5yZWdzICsgVklEV19XSE9MRV9YKHdpbikpOwo+ICsJd3JpdGVsKHdpbl9kYXRhLT5m Yl9oZWlnaHQsIGN0eC0+cmVncyArIFZJRFdfV0hPTEVfWSh3aW4pKTsKPiArCj4gKwkvKiBvZmZz ZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciB0byByZWFkICovCj4gKwl3cml0ZWwod2lu X2RhdGEtPm9mZnNldF94LCBjdHgtPnJlZ3MgKyBWSURXX09GRlNFVF9YKHdpbikpOwo+ICsJd3Jp dGVsKHdpbl9kYXRhLT5vZmZzZXRfeSwgY3R4LT5yZWdzICsgVklEV19PRkZTRVRfWSh3aW4pKTsK PiArCj4gKwlEUk1fREVCVUdfS01TKCJzdGFydCBhZGRyID0gMHglbHhcbiIsCj4gKwkJCSh1bnNp Z25lZCBsb25nKXdpbl9kYXRhLT5kbWFfYWRkcik7Cj4gKwlEUk1fREVCVUdfS01TKCJvdmxfd2lk dGggPSAlZCwgb3ZsX2hlaWdodCA9ICVkXG4iLAo+ICsJCQl3aW5fZGF0YS0+b3ZsX3dpZHRoLCB3 aW5fZGF0YS0+b3ZsX2hlaWdodCk7Cj4gKwo+ICsJLyogT1NEIHBvc2l0aW9uICovCj4gKwl2YWwg PSBWSURPU0R4QV9UT1BMRUZUX1god2luX2RhdGEtPm92bF94KSB8Cj4gKwkJVklET1NEeEFfVE9Q TEVGVF9ZKHdpbl9kYXRhLT5vdmxfeSk7Cj4gKwl3cml0ZWwodmFsLCBjdHgtPnJlZ3MgKyBWSURP U0RfQSh3aW4pKTsKPiArCj4gKwlsYXN0X3ggPSB3aW5fZGF0YS0+b3ZsX3ggKyB3aW5fZGF0YS0+ b3ZsX3dpZHRoOwo+ICsJaWYgKGxhc3RfeCkKPiArCQlsYXN0X3gtLTsKPiArCWxhc3RfeSA9IHdp bl9kYXRhLT5vdmxfeSArIHdpbl9kYXRhLT5vdmxfaGVpZ2h0Owo+ICsJaWYgKGxhc3RfeSkKPiAr CQlsYXN0X3ktLTsKPiArCj4gKwl2YWwgPSBWSURPU0R4Ql9CT1RSSUdIVF9YKGxhc3RfeCkgfCBW SURPU0R4Ql9CT1RSSUdIVF9ZKGxhc3RfeSk7Cj4gKwo+ICsJd3JpdGVsKHZhbCwgY3R4LT5yZWdz ICsgVklET1NEX0Iod2luKSk7Cj4gKwo+ICsJRFJNX0RFQlVHX0tNUygib3NkIHBvczogdHggPSAl ZCwgdHkgPSAlZCwgYnggPSAlZCwgYnkgPSAlZFxuIiwKPiArCQkJd2luX2RhdGEtPm92bF94LCB3 aW5fZGF0YS0+b3ZsX3ksIGxhc3RfeCwgbGFzdF95KTsKPiArCj4gKwkvKiBPU0QgYWxwaGEgKi8K PiArCWFscGhhID0gVklET1NEeENfQUxQSEEwX1JfRigweDApIHwKPiArCQkJVklET1NEeENfQUxQ SEEwX0dfRigweDApIHwKPiArCQkJVklET1NEeENfQUxQSEEwX0JfRigweDApOwo+ICsKPiArCXdy aXRlbChhbHBoYSwgY3R4LT5yZWdzICsgVklET1NEX0Mod2luKSk7Cj4gKwo+ICsJYWxwaGEgPSBW SURPU0R4RF9BTFBIQTFfUl9GKDB4ZmYpIHwKPiArCQkJVklET1NEeERfQUxQSEExX0dfRigweGZm KSB8Cj4gKwkJCVZJRE9TRHhEX0FMUEhBMV9CX0YoMHhmZik7Cj4gKwo+ICsJd3JpdGVsKGFscGhh LCBjdHgtPnJlZ3MgKyBWSURPU0RfRCh3aW4pKTsKPiArCj4gKwlpZiAod2luICE9IDApIHsKPiAr CQlibGVuZGVxID0gQkxFTkRFX0FfRlVOQyhCTEVOREVfQ09FRl9PTkUpIHwKPiArCQkJQkxFTkRF X0JfRlVOQyhCTEVOREVfQ09FRl9aRVJPKSB8Cj4gKwkJCUJMRU5ERV9QX0ZVTkMoQkxFTkRFX0NP RUZfWkVSTykgfAo+ICsJCQlCTEVOREVfUV9GVU5DKEJMRU5ERV9DT0VGX1pFUk8pOwo+ICsKPiAr CQl3cml0ZWwoYmxlbmRlcSwgY3R4LT5yZWdzICsgQkxFTkRFKHdpbiAtIDEpKTsKPiArCX0KPiAr Cj4gKwlkZWNvbl93aW5fc2V0X3BpeGZtdChjdHgsIHdpbik7Cj4gKwo+ICsJLyogaGFyZHdhcmUg d2luZG93IDAgZG9lc24ndCBzdXBwb3J0IGNvbG9yIGtleS4gKi8KPiArCWlmICh3aW4gIT0gMCkK PiArCQlkZWNvbl93aW5fc2V0X2NvbGtleShjdHgsIHdpbik7Cj4gKwo+ICsJLyogd2luY29uICov Cj4gKwl2YWwgPSByZWFkbChjdHgtPnJlZ3MgKyBXSU5DT04od2luKSk7Cj4gKwl2YWwgfD0gV0lO Q09OeF9UUklQTEVfQlVGX01PREU7Cj4gKwl2YWwgfD0gV0lOQ09OeF9FTldJTjsKPiArCXdyaXRl bCh2YWwsIGN0eC0+cmVncyArIFdJTkNPTih3aW4pKTsKPiArCj4gKwkvKiBFbmFibGUgRE1BIGNo YW5uZWwgYW5kIHVucHJvdGVjdCB3aW5kb3dzICovCj4gKwlkZWNvbl9zaGFkb3dfcHJvdGVjdF93 aW4oY3R4LCB3aW4sIGZhbHNlKTsKPiArCj4gKwl2YWwgPSByZWFkbChjdHgtPnJlZ3MgKyBERUNP Tl9VUERBVEUpOwo+ICsJdmFsIHw9IERFQ09OX1VQREFURV9TVEFOREFMT05FX0Y7Cj4gKwl3cml0 ZWwodmFsLCBjdHgtPnJlZ3MgKyBERUNPTl9VUERBVEUpOwo+ICsKPiArCXdpbl9kYXRhLT5lbmFi bGVkID0gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZGVjb25fd2luX2Rpc2FibGUoc3Ry dWN0IGV4eW5vc19kcm1fbWFuYWdlciAqbWdyLCBpbnQgenBvcykKPiArewo+ICsJc3RydWN0IGRl Y29uX2NvbnRleHQgKmN0eCA9IG1ncl90b19kZWNvbihtZ3IpOwo+ICsJc3RydWN0IGRlY29uX3dp bl9kYXRhICp3aW5fZGF0YTsKPiArCWludCB3aW4gPSB6cG9zOwo+ICsJdTMyIHZhbDsKPiArCj4g KwlpZiAod2luID09IERFRkFVTFRfWlBPUykKPiArCQl3aW4gPSBjdHgtPmRlZmF1bHRfd2luOwo+ ICsKPiArCWlmICh3aW4gPCAwIHx8IHdpbiA+PSBXSU5ET1dTX05SKQo+ICsJCXJldHVybjsKPiAr Cj4gKwl3aW5fZGF0YSA9ICZjdHgtPndpbl9kYXRhW3dpbl07Cj4gKwo+ICsJaWYgKGN0eC0+c3Vz cGVuZGVkKSB7Cj4gKwkJLyogZG8gbm90IHJlc3VtZSB0aGlzIHdpbmRvdyovCj4gKwkJd2luX2Rh dGEtPnJlc3VtZSA9IGZhbHNlOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwkvKiBwcm90ZWN0 IHdpbmRvd3MgKi8KPiArCWRlY29uX3NoYWRvd19wcm90ZWN0X3dpbihjdHgsIHdpbiwgdHJ1ZSk7 Cj4gKwo+ICsJLyogd2luY29uICovCj4gKwl2YWwgPSByZWFkbChjdHgtPnJlZ3MgKyBXSU5DT04o d2luKSk7Cj4gKwl2YWwgJj0gfldJTkNPTnhfRU5XSU47Cj4gKwl3cml0ZWwodmFsLCBjdHgtPnJl Z3MgKyBXSU5DT04od2luKSk7Cj4gKwo+ICsJZGVjb25fc2hhZG93X3Byb3RlY3Rfd2luKGN0eCwg d2luLCBmYWxzZSk7Cj4gKwo+ICsJd2luX2RhdGEtPmVuYWJsZWQgPSBmYWxzZTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgZGVjb25fd2luZG93X3N1c3BlbmQoc3RydWN0IGV4eW5vc19kcm1fbWFu YWdlciAqbWdyKQo+ICt7Cj4gKwlzdHJ1Y3QgZGVjb25fY29udGV4dCAqY3R4ID0gbWdyX3RvX2Rl Y29uKG1ncik7Cj4gKwlzdHJ1Y3QgZGVjb25fd2luX2RhdGEgKndpbl9kYXRhOwo+ICsJaW50IGk7 Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IFdJTkRPV1NfTlI7IGkrKykgewo+ICsJCXdpbl9kYXRh ID0gJmN0eC0+d2luX2RhdGFbaV07Cj4gKwkJd2luX2RhdGEtPnJlc3VtZSA9IHdpbl9kYXRhLT5l bmFibGVkOwo+ICsJCWlmICh3aW5fZGF0YS0+ZW5hYmxlZCkKPiArCQkJZGVjb25fd2luX2Rpc2Fi bGUobWdyLCBpKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZGVjb25fd2luZG93X3Jl c3VtZShzdHJ1Y3QgZXh5bm9zX2RybV9tYW5hZ2VyICptZ3IpCj4gK3sKPiArCXN0cnVjdCBkZWNv bl9jb250ZXh0ICpjdHggPSBtZ3JfdG9fZGVjb24obWdyKTsKPiArCXN0cnVjdCBkZWNvbl93aW5f ZGF0YSAqd2luX2RhdGE7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgV0lORE9X U19OUjsgaSsrKSB7Cj4gKwkJd2luX2RhdGEgPSAmY3R4LT53aW5fZGF0YVtpXTsKPiArCQl3aW5f ZGF0YS0+ZW5hYmxlZCA9IHdpbl9kYXRhLT5yZXN1bWU7Cj4gKwkJd2luX2RhdGEtPnJlc3VtZSA9 IGZhbHNlOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkZWNvbl9hcHBseShzdHJ1Y3Qg ZXh5bm9zX2RybV9tYW5hZ2VyICptZ3IpCj4gK3sKPiArCXN0cnVjdCBkZWNvbl9jb250ZXh0ICpj dHggPSBtZ3JfdG9fZGVjb24obWdyKTsKPiArCXN0cnVjdCBkZWNvbl93aW5fZGF0YSAqd2luX2Rh dGE7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgV0lORE9XU19OUjsgaSsrKSB7 Cj4gKwkJd2luX2RhdGEgPSAmY3R4LT53aW5fZGF0YVtpXTsKPiArCQlpZiAod2luX2RhdGEtPmVu YWJsZWQpCj4gKwkJCWRlY29uX3dpbl9jb21taXQobWdyLCBpKTsKPiArCQllbHNlCj4gKwkJCWRl Y29uX3dpbl9kaXNhYmxlKG1nciwgaSk7Cj4gKwl9Cj4gKwo+ICsJZGVjb25fY29tbWl0KG1ncik7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZGVjb25fcmVnX3Jlc2V0KHN0cnVjdCBkZWNvbl9jb250 ZXh0ICpjdHgpCj4gK3sKPiArCWludCB0cmllcyA9IFJFU0VUX1RJTUVPVVQ7Cj4gKwo+ICsJd3Jp dGVsKFZJRENPTjBfU1dSRVNFVCwgY3R4LT5yZWdzICsgVklEQ09OMCk7Cj4gKwo+ICsJd2hpbGUg KHRyaWVzKSB7Cj4gKwkJaWYgKCEocmVhZGwoY3R4LT5yZWdzICsgVklEQ09OMCkgJiBWSURDT04w X1NXUkVTRVQpKQo+ICsJCQlicmVhazsKPiArCQl1ZGVsYXkoMTApOwo+ICsJCXRyaWVzLS07Cj4g Kwl9Cj4gKwo+ICsJaWYgKCF0cmllcykgewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlc2V0 IGRlY29uXG4iKTsKPiArCQlyZXR1cm4gLUVCVVNZOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkZWNvbl9jbXVfZW5hYmxlKHN0cnVjdCBkZWNvbl9jb250 ZXh0ICpjdHgpCj4gK3sKPiArCXdyaXRlbCh+REVDT05fQ01VX0FMTF9DTEtHQVRFX0VOQUJMRSwg Y3R4LT5yZWdzICsgREVDT05fQ01VKTsKClRoaXMgZnVuY3Rpb24gc2F5cyBpdCBlbmFibGVzIGFs bCBjbG9jayBnYXRlcyBidXQgYWN0dWFsbHksIGl0IGRpc2FibGVzCnRoZW0uIEFuZCBwbGVhc2Ug ZmxhZyByZWFsIGZpZWxkczogWzMxOjJdIGFyZSByZXNlcnZlZC4KCj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGRlY29uX2JsZW5kX2FscGhhX2JpdHMoc3RydWN0IGRlY29uX2NvbnRleHQgKmN0eCkK PiArewo+ICsJd3JpdGVsKEJMRU5EQ09OX05FV184QklUX0FMUEhBX1ZBTFVFLCBjdHgtPnJlZ3Mg KyBCTEVORENPTik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRlY29uX3NldF92aWRvdXQoc3Ry dWN0IGRlY29uX2NvbnRleHQgKmN0eCkKPiArewo+ICsJd3JpdGVsKFZJRE9VVENPTjBfTENEX09O IHwgVklET1VUQ09OMF9SR0JJRiwgY3R4LT5yZWdzICsgVklET1VUQ09OMCk7CgpWSURPVVRDT04w X0xDRF9PTiBpcyBub3QgcmlnaHQgbWVhbi4gUGxlYXNlIHVzZSBWSURPVVRDT04wX0RVQUxfRiBp bnN0ZWFkLgpBbmQgeW91IGZvcmNlcyB0byBzZXQgdmlkZW8gaW50ZXJmYWNlIHRvIFJHQiBJRi4g U28gcGxlYXNlIHNldCBhbHNvIGl0CmNvcnJlY3RseSB0aHJvdWdoIGR0IGJpbmRpbmcuCgo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBkZWNvbl9zZXRfY3JjKHN0cnVjdCBkZWNvbl9jb250ZXh0ICpj dHgpCj4gK3sKPiArCXUzMiB2YWwgPSByZWFkbChjdHgtPnJlZ3MgKyBDUkNDVFJMKTsKPiArCj4g Kwl3cml0ZWwodmFsICYgfihDUkNDVFJMX0NSQ0NMS0VOIHwgQ1JDQ1RSTF9DUkNFTiB8IENSQ0NU UkxfQ1JDU1RBUlRfRiksCj4gKwkJCQkJCQljdHgtPnJlZ3MgKyBDUkNDVFJMKTsKCldoYXQgaXMg dGhlIHB1cnBvc2Ugb2YgQ1JDQ0xLPyBBbmQgd2h5IGRvIHlvdSBzZXQgYWxsIGZpZWxkcyBvZiB0 aGlzCnJlZ2lzdGVyIGxpa2UgYWJvdmU/Cgo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkZWNvbl9z ZXRfY2xrdmFsKHN0cnVjdCBkZWNvbl9jb250ZXh0ICpjdHgpCj4gK3sKPiArCXdyaXRlbChWQ0xL Q09OMF9DTEtWQUxVUCB8IFZDTEtDT04wX1ZDTEtGUkVFLCBjdHgtPnJlZ3MgKyBWQ0xLQ09OMCk7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRlY29uX3NldF9maXh2Y2xrKHN0cnVjdCBkZWNvbl9j b250ZXh0ICpjdHgpCj4gK3sKPiArCXdyaXRlbChWSURDT04xX1ZDTEtfSE9MRCwgY3R4LT5yZWdz ICsgVklEQ09OMSgwKSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZGVjb25fcG93ZXJvbihzdHJ1 Y3QgZXh5bm9zX2RybV9tYW5hZ2VyICptZ3IpCj4gK3sKPiArCXN0cnVjdCBkZWNvbl9jb250ZXh0 ICpjdHggPSBtZ3JfdG9fZGVjb24obWdyKTsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKCFjdHgt PnN1c3BlbmRlZCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwljdHgtPnN1c3BlbmRlZCA9IGZhbHNl Owo+ICsKPiArCXBtX3J1bnRpbWVfZ2V0X3N5bmMoY3R4LT5kZXYpOwo+ICsKPiArCXJldCA9IGNs a19wcmVwYXJlX2VuYWJsZShjdHgtPnBjbGspOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlEUk1f RVJST1IoIkZhaWxlZCB0byBwcmVwYXJlX2VuYWJsZSB0aGUgcGNsayBbJWRdXG4iLCByZXQpOwo+ ICsJCWdvdG8gcGNsa19lcnI7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxl KGN0eC0+YWNsayk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRv IHByZXBhcmVfZW5hYmxlIHRoZSBhY2xrIFslZF1cbiIsIHJldCk7Cj4gKwkJZ290byBhY2xrX2Vy cjsKPiArCX0KPiArCj4gKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY3R4LT5lY2xrKTsKPiAr CWlmICAocmV0IDwgMCkgewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIHByZXBhcmVfZW5hYmxl IHRoZSBlY2xrIFslZF1cbiIsIHJldCk7Cj4gKwkJZ290byBlY2xrX2VycjsKPiArCX0KPiArCj4g KwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY3R4LT52Y2xrKTsKPiArCWlmICAocmV0IDwgMCkg ewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIHByZXBhcmVfZW5hYmxlIHRoZSB2Y2xrIFslZF1c biIsIHJldCk7Cj4gKwkJZ290byB2Y2xrX2VycjsKPiArCX0KPiArCj4gKwlyZXQgPSBkZWNvbl9y ZWdfcmVzZXQoY3R4KTsKCldoeSBpcyByZWdpc3RlciByZXNldCBuZWVkZWQgYXQgaGVyZT8KCj4g KwlpZiAgKHJldCA8IDApIHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZXNldCBkZWNvbiBb JWRdXG4iLCByZXQpOwo+ICsJCWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCWRlY29uX2NtdV9lbmFi bGUoY3R4KTsKPiArCWRlY29uX2JsZW5kX2FscGhhX2JpdHMoY3R4KTsKPiArCWRlY29uX3NldF92 aWRvdXQoY3R4KTsKPiArCWRlY29uX3NldF9jcmMoY3R4KTsKPiArCWRlY29uX3NldF9maXh2Y2xr KGN0eCk7Cj4gKwlkZWNvbl9zZXRfY2xrdmFsKGN0eCk7CgpTaG91bGQgYWJvdmUgZnVudGlvbnMg cmVhbGx5IGJlIGNhbGxlZCBpbiBwb3dlcl9vbj8gSSB0aGluayBtb3N0IG9mCmFib3ZlIGZ1bmN0 aW9ucyBjYW4gYmUgY2FsbGVkIGluIGRlY29uX2NvbW1pdCBmdW50aW9uIGFuZCBpdCBjYW4gd3Jp dGUgYQpyZWdpc3RlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHVzaW5nIGZ1bmN0aW9uLgoKPiArCj4g KwkvKiBpZiB2Ymxhbmsgd2FzIGVuYWJsZWQgc3RhdHVzLCBlbmFibGUgaXQgYWdhaW4uICovCj4g KwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KDAsICZjdHgtPmlycV9mbGFncykpIHsKPiArCQlyZXQg PSBkZWNvbl9lbmFibGVfdmJsYW5rKG1ncik7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlEUk1fRVJS T1IoIkZhaWxlZCB0byByZS1lbmFibGUgdmJsYW5rIFslZF1cbiIsIHJldCk7Cj4gKwkJCWdvdG8g ZXJyOwo+ICsJCX0KPiArCX0KPiArCj4gKwlkZWNvbl93aW5kb3dfcmVzdW1lKG1ncik7Cj4gKwo+ ICsJZGVjb25fYXBwbHkobWdyKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2VycjoKPiArCWNs a19kaXNhYmxlX3VucHJlcGFyZShjdHgtPnZjbGspOwo+ICt2Y2xrX2VycjoKPiArCWNsa19kaXNh YmxlX3VucHJlcGFyZShjdHgtPmVjbGspOwo+ICtlY2xrX2VycjoKPiArCWNsa19kaXNhYmxlX3Vu cHJlcGFyZShjdHgtPmFjbGspOwo+ICthY2xrX2VycjoKPiArCWNsa19kaXNhYmxlX3VucHJlcGFy ZShjdHgtPnBjbGspOwo+ICtwY2xrX2VycjoKPiArCWN0eC0+c3VzcGVuZGVkID0gdHJ1ZTsKPiAr CXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZGVjb25fcG93ZXJvZmYoc3RydWN0 IGV4eW5vc19kcm1fbWFuYWdlciAqbWdyKQo+ICt7Cj4gKwlzdHJ1Y3QgZGVjb25fY29udGV4dCAq Y3R4ID0gbWdyX3RvX2RlY29uKG1ncik7Cj4gKwo+ICsJaWYgKGN0eC0+c3VzcGVuZGVkKQo+ICsJ CXJldHVybiAwOwo+ICsKPiArCS8qCj4gKwkgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGFs bCB3aW5kb3dzIGFyZSBkaXNhYmxlZCBiZWZvcmUgd2UKPiArCSAqIHN1c3BlbmQgdGhhdCBjb25u ZWN0b3IuIE90aGVyd2lzZSB3ZSBtaWdodCB0cnkgdG8gc2NhbiBmcm9tCj4gKwkgKiBhIGRlc3Ry b3llZCBidWZmZXIgbGF0ZXIuCj4gKwkgKi8KPiArCWRlY29uX3dpbmRvd19zdXNwZW5kKG1ncik7 Cj4gKwo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGN0eC0+dmNsayk7Cj4gKwljbGtfZGlzYWJs ZV91bnByZXBhcmUoY3R4LT5lY2xrKTsKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShjdHgtPmFj bGspOwo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGN0eC0+cGNsayk7Cj4gKwo+ICsJcG1fcnVu dGltZV9wdXRfc3luYyhjdHgtPmRldik7Cj4gKwo+ICsJY3R4LT5zdXNwZW5kZWQgPSB0cnVlOwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRlY29uX2RwbXMoc3RydWN0IGV4 eW5vc19kcm1fbWFuYWdlciAqbWdyLCBpbnQgbW9kZSkKPiArewo+ICsJRFJNX0RFQlVHX0tNUygi JXMsICVkXG4iLCBfX0ZJTEVfXywgbW9kZSk7Cj4gKwo+ICsJc3dpdGNoIChtb2RlKSB7Cj4gKwlj YXNlIERSTV9NT0RFX0RQTVNfT046Cj4gKwkJZGVjb25fcG93ZXJvbihtZ3IpOwo+ICsJCWJyZWFr Owo+ICsJY2FzZSBEUk1fTU9ERV9EUE1TX1NUQU5EQlk6Cj4gKwljYXNlIERSTV9NT0RFX0RQTVNf U1VTUEVORDoKPiArCWNhc2UgRFJNX01PREVfRFBNU19PRkY6Cj4gKwkJZGVjb25fcG93ZXJvZmYo bWdyKTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJRFJNX0RFQlVHX0tNUygidW5zcGVj aWZpZWQgbW9kZSAlZFxuIiwgbW9kZSk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gK30KPiArCj4gK3N0 YXRpYyBzdHJ1Y3QgZXh5bm9zX2RybV9tYW5hZ2VyX29wcyBkZWNvbl9tYW5hZ2VyX29wcyA9IHsK PiArCS5kcG1zID0gZGVjb25fZHBtcywKPiArCS5tb2RlX2ZpeHVwID0gZGVjb25fbW9kZV9maXh1 cCwKPiArCS5tb2RlX3NldCA9IGRlY29uX21vZGVfc2V0LAo+ICsJLmNvbW1pdCA9IGRlY29uX2Nv bW1pdCwKPiArCS5lbmFibGVfdmJsYW5rID0gZGVjb25fZW5hYmxlX3ZibGFuaywKPiArCS5kaXNh YmxlX3ZibGFuayA9IGRlY29uX2Rpc2FibGVfdmJsYW5rLAo+ICsJLndhaXRfZm9yX3ZibGFuayA9 IGRlY29uX3dhaXRfZm9yX3ZibGFuaywKPiArCS53aW5fbW9kZV9zZXQgPSBkZWNvbl93aW5fbW9k ZV9zZXQsCj4gKwkud2luX2NvbW1pdCA9IGRlY29uX3dpbl9jb21taXQsCj4gKwkud2luX2Rpc2Fi bGUgPSBkZWNvbl93aW5fZGlzYWJsZSwKPiArfTsKPiArCj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJu X3QgZGVjb25faXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQo+ICt7Cj4gKwlzdHJ1 Y3QgZGVjb25fY29udGV4dCAqY3R4ID0gKHN0cnVjdCBkZWNvbl9jb250ZXh0ICopZGV2X2lkOwo+ ICsJdTMyIHZhbDsKPiArCj4gKwl2YWwgPSByZWFkbChjdHgtPnJlZ3MgKyBWSURJTlRDT04xKTsK PiArCj4gKwlpZiAodmFsICYgVklESU5UQ09OMV9JTlRfRlJBTUUpCj4gKwkJLyogVlNZTkMgaW50 ZXJydXB0ICovCj4gKwkJd3JpdGVsKFZJRElOVENPTjFfSU5UX0ZSQU1FLCBjdHgtPnJlZ3MgKyBW SURJTlRDT04xKTsKPiArCj4gKwkvKiBjaGVjayB0aGUgY3J0YyBpcyBkZXRhY2hlZCBhbHJlYWR5 IGZyb20gZW5jb2RlciAqLwo+ICsJaWYgKGN0eC0+bWFuYWdlci5waXBlIDwgMCB8fCAhY3R4LT5t YW5hZ2VyLmRybV9kZXYpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJZHJtX2hhbmRsZV92Ymxhbmso Y3R4LT5tYW5hZ2VyLmRybV9kZXYsIGN0eC0+bWFuYWdlci5waXBlKTsKPiArCWV4eW5vc19kcm1f Y3J0Y19maW5pc2hfcGFnZWZsaXAoY3R4LT5tYW5hZ2VyLmRybV9kZXYsCj4gKwkJCQkJCWN0eC0+ bWFuYWdlci5waXBlKTsKPiArCj4gKwkvKiBzZXQgd2FpdCB2c3luYyBldmVudCB0byB6ZXJvIGFu ZCB3YWtlIHVwIHF1ZXVlLiAqLwo+ICsJaWYgKGF0b21pY19yZWFkKCZjdHgtPndhaXRfdnN5bmNf ZXZlbnQpKSB7Cj4gKwkJYXRvbWljX3NldCgmY3R4LT53YWl0X3ZzeW5jX2V2ZW50LCAwKTsKPiAr CQl3YWtlX3VwKCZjdHgtPndhaXRfdnN5bmNfcXVldWUpOwo+ICsJfQo+ICtvdXQ6Cj4gKwlyZXR1 cm4gSVJRX0hBTkRMRUQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZGVjb25fYmluZChzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZAoqZGF0YSkKPiArewo+ICsJ c3RydWN0IGRlY29uX2NvbnRleHQgKmN0eCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsJc3Ry dWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQg PSBkZWNvbl9tZ3JfaW5pdGlhbGl6ZSgmY3R4LT5tYW5hZ2VyLCBkcm1fZGV2KTsKPiArCWlmIChy ZXQpIHsKPiArCQlEUk1fRVJST1IoImRlY29uX21ncl9pbml0aWFsaXplIGZhaWxlZC5cbiIpOwo+ ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJZXh5bm9zX2RybV9jcnRjX2NyZWF0ZSgmY3R4 LT5tYW5hZ2VyKTsKPiArCWlmIChjdHgtPmRpc3BsYXkpCj4gKwkJZXh5bm9zX2RybV9jcmVhdGVf ZW5jX2Nvbm4oZHJtX2RldiwgY3R4LT5kaXNwbGF5KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGRlY29uX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0 cnVjdCBkZXZpY2UgKm1hc3RlciwKPiArCQkJdm9pZCAqZGF0YSkKPiArewo+ICsJc3RydWN0IGRl Y29uX2NvbnRleHQgKmN0eCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsKPiArCWRlY29uX2Rw bXMoJmN0eC0+bWFuYWdlciwgRFJNX01PREVfRFBNU19PRkYpOwo+ICsKPiArCWlmIChjdHgtPmRp c3BsYXkpCj4gKwkJZXh5bm9zX2RwaV9yZW1vdmUoY3R4LT5kaXNwbGF5KTsKPiArCj4gKwlkZWNv bl9tZ3JfcmVtb3ZlKCZjdHgtPm1hbmFnZXIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGNvbXBvbmVudF9vcHMgZGVjb25fY29tcG9uZW50X29wcyA9IHsKPiArCS5iaW5kCT0gZGVj b25fYmluZCwKPiArCS51bmJpbmQgPSBkZWNvbl91bmJpbmQsCj4gK307Cj4gKwo+ICtzdGF0aWMg aW50IGRlY29uX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0 cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gKwlzdHJ1Y3QgZGVjb25fY29udGV4dCAq Y3R4Owo+ICsJc3RydWN0IHJlc291cmNlICpyZXM7Cj4gKwlpbnQgcmV0ID0gLUVJTlZBTDsKPiAr Cj4gKwlpZiAoIWRldi0+b2Zfbm9kZSkKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwljdHgg PSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFj dHgpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJY3R4LT5tYW5hZ2VyLnR5cGUgPSBFWFlO T1NfRElTUExBWV9UWVBFX0xDRDsKPiArCWN0eC0+bWFuYWdlci5vcHMgPSAmZGVjb25fbWFuYWdl cl9vcHM7Cj4gKwo+ICsJcmV0ID0gZXh5bm9zX2RybV9jb21wb25lbnRfYWRkKGRldiwgRVhZTk9T X0RFVklDRV9UWVBFX0NSVEMsCj4gKwkJCQkJY3R4LT5tYW5hZ2VyLnR5cGUpOwo+ICsJaWYgKHJl dCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWN0eC0+ZGV2ID0gZGV2Owo+ICsJY3R4LT5zdXNw ZW5kZWQgPSB0cnVlOwo+ICsKPiArCWN0eC0+cmVncyA9IG9mX2lvbWFwKGRldi0+b2Zfbm9kZSwg MCk7Cj4gKwlpZiAoSVNfRVJSKGN0eC0+cmVncykpIHsKPiArCQlyZXQgPSBQVFJfRVJSKGN0eC0+ cmVncyk7Cj4gKwkJZ290byBlcnJfZGVsX2NvbXBvbmVudDsKPiArCX0KPiArCj4gKwljdHgtPnBj bGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGNsa19kZWNvbjAiKTsKPiArCWlmIChJU19FUlIoY3R4 LT5wY2xrKSkgewo+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBidXMgY2xvY2sgcGNs a1xuIik7Cj4gKwkJcmV0ID0gUFRSX0VSUihjdHgtPnBjbGspOwo+ICsJCWdvdG8gZXJyX2lvdW5t YXA7Cj4gKwl9Cj4gKwo+ICsJY3R4LT5hY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImFjbGtfZGVj b24wIik7Cj4gKwlpZiAoSVNfRVJSKGN0eC0+YWNsaykpIHsKPiArCQlkZXZfZXJyKGRldiwgImZh aWxlZCB0byBnZXQgYnVzIGNsb2NrIGFjbGtcbiIpOwo+ICsJCXJldCA9IFBUUl9FUlIoY3R4LT5h Y2xrKTsKPiArCQlnb3RvIGVycl9pb3VubWFwOwo+ICsJfQo+ICsKPiArCWN0eC0+ZWNsayA9IGRl dm1fY2xrX2dldChkZXYsICJkZWNvbjBfZWNsayIpOwo+ICsJaWYgKElTX0VSUihjdHgtPmVjbGsp KSB7Cj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGVjbG9ja1xuIik7Cj4gKwkJcmV0 ID0gUFRSX0VSUihjdHgtPmVjbGspOwo+ICsJCWdvdG8gZXJyX2lvdW5tYXA7Cj4gKwl9Cj4gKwo+ ICsJY3R4LT52Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImRlY29uMF92Y2xrIik7Cj4gKwlpZiAo SVNfRVJSKGN0eC0+dmNsaykpIHsKPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgdmNs b2NrXG4iKTsKPiArCQlyZXQgPSBQVFJfRVJSKGN0eC0+dmNsayk7Cj4gKwkJZ290byBlcnJfaW91 bm1hcDsKPiArCX0KPiArCj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBk ZXYsIElPUkVTT1VSQ0VfSVJRLCAidnN5bmMiKTsKCmxjZF9zeXMgaXJxIGNhbiBiZSB1c2VkIGFj Y29yZGluZyB0byB2aWRlbyBpbnRlcmZhY2UuCgo+ICsJaWYgKCFyZXMpIHsKPiArCQlkZXZfZXJy KGRldiwgImlycSByZXF1ZXN0IGZhaWxlZC5cbiIpOwo+ICsJCXJldCA9IC1FTlhJTzsKPiArCQln b3RvIGVycl9pb3VubWFwOwo+ICsJfQo+ICsKPiArCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2 LCByZXMtPnN0YXJ0LCBkZWNvbl9pcnFfaGFuZGxlciwKPiArCQkJCQkJCTAsICJkcm1fZGVjb24i LCBjdHgpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoZGV2LCAiaXJxIHJlcXVlc3QgZmFp bGVkLlxuIik7Cj4gKwkJZ290byBlcnJfaW91bm1hcDsKPiArCX0KPiArCj4gKwlpbml0X3dhaXRx dWV1ZV9oZWFkKCZjdHgtPndhaXRfdnN5bmNfcXVldWUpOwo+ICsJYXRvbWljX3NldCgmY3R4LT53 YWl0X3ZzeW5jX2V2ZW50LCAwKTsKPiArCj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBj dHgpOwo+ICsKPiArCWN0eC0+ZGlzcGxheSA9IGV4eW5vc19kcGlfcHJvYmUoZGV2KTsKPiArCWlm IChJU19FUlIoY3R4LT5kaXNwbGF5KSkgewo+ICsJCXJldCA9IFBUUl9FUlIoY3R4LT5kaXNwbGF5 KTsKPiArCQlnb3RvIGVycl9pb3VubWFwOwo+ICsJfQo+ICsKPiArCXBtX3J1bnRpbWVfZW5hYmxl KGRldik7Cj4gKwo+ICsJcmV0ID0gY29tcG9uZW50X2FkZChkZXYsICZkZWNvbl9jb21wb25lbnRf b3BzKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfZGlzYWJsZV9wbV9ydW50aW1lOwo+ICsK PiArCXJldHVybiByZXQ7Cj4gKwo+ICtlcnJfZGlzYWJsZV9wbV9ydW50aW1lOgo+ICsJcG1fcnVu dGltZV9kaXNhYmxlKGRldik7Cj4gKwo+ICtlcnJfaW91bm1hcDoKPiArCWlvdW5tYXAoY3R4LT5y ZWdzKTsKPiArCj4gK2Vycl9kZWxfY29tcG9uZW50Ogo+ICsJZXh5bm9zX2RybV9jb21wb25lbnRf ZGVsKGRldiwgRVhZTk9TX0RFVklDRV9UWVBFX0NSVEMpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ ICsKPiArc3RhdGljIGludCBkZWNvbl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKPiArewo+ICsJc3RydWN0IGRlY29uX2NvbnRleHQgKmN0eCA9IGRldl9nZXRfZHJ2ZGF0YSgm cGRldi0+ZGV2KTsKPiArCj4gKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7Cj4gKwo+ ICsJaW91bm1hcChjdHgtPnJlZ3MpOwo+ICsKPiArCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwg JmRlY29uX2NvbXBvbmVudF9vcHMpOwo+ICsJZXh5bm9zX2RybV9jb21wb25lbnRfZGVsKCZwZGV2 LT5kZXYsIEVYWU5PU19ERVZJQ0VfVFlQRV9DUlRDKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkZWNvbl9kcml2ZXIgPSB7Cj4gKwkucHJvYmUJ CT0gZGVjb25fcHJvYmUsCj4gKwkucmVtb3ZlCQk9IGRlY29uX3JlbW92ZSwKPiArCS5kcml2ZXIJ CT0gewo+ICsJCS5uYW1lCT0gImV4eW5vcy1kZWNvbiIsCj4gKwkJLm9mX21hdGNoX3RhYmxlID0g ZGVjb25fZHJpdmVyX2R0X21hdGNoLAo+ICsJfSwKPiArfTsKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==