From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rodrigo Vivi Subject: Re: [PATCH 06/14] drm: extract drm_atomic_uapi.c Date: Tue, 4 Sep 2018 13:41:33 -0700 Message-ID: <20180904204133.GA2053@intel.com> References: <20180903165439.24845-1-daniel.vetter@ffwll.ch> <20180903165439.24845-6-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20180903165439.24845-6-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: David Airlie , Intel Graphics Development , DRI Development , Sean Paul , linux-arm-msm@vger.kernel.org, Daniel Vetter , freedreno@lists.freedesktop.org List-Id: linux-arm-msm@vger.kernel.org T24gTW9uLCBTZXAgMDMsIDIwMTggYXQgMDY6NTQ6MzFQTSArMDIwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBUaGlzIGxlYXZlcyBhbGwgdGhlIGNvbW1pdC9jaGVjayBhbmQgc3RhdGUgaGFuZGxp bmcgaW4gZHJtX2F0b21pYy5jLAo+IHdoaWxlIHB1bGxpbmcgYWxsIHRoZSB1YXBpIGdsdWUgYW5k IHRoZSBodWdlIGlvY3RsIGl0c2VsZiBpbnRvIGEKPiBzZXByYXRlIGZpbGUuCj4gCj4gVGhpcyBz ZWVtcyB0byBhbG1vc3QgcGVyZmVjdGx5IHNwbGl0IHRoZSByYXRoZXIgYmlnIGRybV9hdG9taWMu YyBmaWxlCj4gaW50byAyIGVxdWFsIHNpemVzLgo+IAo+IEFsc28gYWRqdXN0IHRoZSBrZXJuZWxk b2MgYW5kIHR5cGUgYSB2ZXJ5IHRlcnNlIG92ZXJ2aWV3IHRleHQuCj4gCj4gdjI6IFJlYmFzZS4K PiAKPiB2MzogRml4IHRpbnkgdHlwby4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgVmV0dGVy IDxkYW5pZWwudmV0dGVyQGludGVsLmNvbT4KPiBDYzogRGF2aWQgQWlybGllIDxhaXJsaWVkQGxp bnV4LmllPgo+IENjOiBHdXN0YXZvIFBhZG92YW4gPGd1c3Rhdm9AcGFkb3Zhbi5vcmc+Cj4gQ2M6 IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+Cj4g Q2M6IFNlYW4gUGF1bCA8c2VhbnBhdWxAY2hyb21pdW0ub3JnPgo+IENjOiBKYW5pIE5pa3VsYSA8 amFuaS5uaWt1bGFAbGludXguaW50ZWwuY29tPgo+IENjOiBKb29uYXMgTGFodGluZW4gPGpvb25h cy5sYWh0aW5lbkBsaW51eC5pbnRlbC5jb20+Cj4gQ2M6IFJvZHJpZ28gVml2aSA8cm9kcmlnby52 aXZpQGludGVsLmNvbT4KPiBDYzogUm9iIENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgo+IENj OiBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0Pgo+IENjOiBpbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCj4gQ2M6IGxpbnV4LWFybS1tc21Admdlci5rZXJuZWwub3JnCj4gQ2M6IGZy ZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiAtLS0KPiAgRG9jdW1lbnRhdGlvbi9ncHUv ZHJtLWttcy5yc3QgICAgICAgICAgICAgICAgfCAgIDExICstCj4gIGRyaXZlcnMvZ3B1L2RybS9N YWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArLQo+ICBkcml2ZXJzL2dwdS9kcm0v ZHJtX2F0b21pYy5jICAgICAgICAgICAgICAgICB8IDEzNTkgKy0tLS0tLS0tLS0tLS0tLS0KPiAg ZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMgICAgICAgICAgfCAgICAxICsKPiAg ZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfdWFwaS5jICAgICAgICAgICAgfCAxMzkzICsrKysr KysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMgICAgICAg ICAgICB8ICAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaW50ZXJuYWwuaCAgICAg ICAgICB8ICAgIDUgKwo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2ZyYW1lYnVmZmVyLmMgICAgICAg ICAgICB8ICAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9mcmFtZWJ1ZmZlcl9oZWxw ZXIuYyB8ICAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX3BsYW5lX2hlbHBlci5jICAgICAg ICAgICB8ICAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgICAg ICAgICB8ICAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9hdG9taWMuYyAgICAgICAg ICAgICB8ICAgIDIgKwo+ICBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9jcnRjLmMgICAgICAgICAg ICAgICB8ICAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wbGFuZS5jICAgICAgICAg ICAgICB8ICAgIDEgKwo+ICBpbmNsdWRlL2RybS9kcm1fYXRvbWljLmggICAgICAgICAgICAgICAg ICAgICB8ICAgMTYgLQo+ICBpbmNsdWRlL2RybS9kcm1fYXRvbWljX3VhcGkuaCAgICAgICAgICAg ICAgICB8ICAgNTggKwo+ICAxNiBmaWxlcyBjaGFuZ2VkLCAxNDgwIGluc2VydGlvbnMoKyksIDEz NzUgZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZHJt X2F0b21pY191YXBpLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvZHJtL2RybV9hdG9t aWNfdWFwaS5oCj4gCj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMucnN0 IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy5yc3QKPiBpbmRleCAzYTlkZDY4Yjk3YzkuLjRi MTUwMWI0ODM1YiAxMDA2NDQKPiAtLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLnJzdAo+ ICsrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMucnN0Cj4gQEAgLTI4Nyw2ICsyODcsMTUg QEAgQXRvbWljIE1vZGUgU2V0dGluZyBGdW5jdGlvbiBSZWZlcmVuY2UKPiAgLi4ga2VybmVsLWRv Yzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMKPiAgICAgOmV4cG9ydDoKPiAgCj4gK0F0 b21pYyBNb2RlIFNldHRpbmcgSU9DVEwgYW5kIFVBUEkgRnVuY3Rpb25zCj4gKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gKwo+ICsuLiBrZXJuZWwtZG9jOjog ZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfdWFwaS5jCj4gKyAgIDpkb2M6IG92ZXJ2aWV3Cj4g Kwo+ICsuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfdWFwaS5jCj4g KyAgIDpleHBvcnQ6Cj4gKwo+ICBDUlRDIEFic3RyYWN0aW9uCj4gID09PT09PT09PT09PT09PT0K PiAgCj4gQEAgLTU2Myw3ICs1NzIsNyBAQCBUaWxlIEdyb3VwIFByb3BlcnR5Cj4gIEV4cGxpY2l0 IEZlbmNpbmcgUHJvcGVydGllcwo+ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgCj4g LS4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jCj4gKy4uIGtlcm5l bC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY191YXBpLmMKPiAgICAgOmRvYzogZXhw bGljaXQgZmVuY2luZyBwcm9wZXJ0aWVzCj4gIAo+ICBFeGlzdGluZyBLTVMgUHJvcGVydGllcwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0v TWFrZWZpbGUKPiBpbmRleCBhNjc3MWNlZjg1ZTIuLmJjNmExNmEzYzM2ZSAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZp bGUKPiBAQCAtMTgsNyArMTgsOCBAQCBkcm0teSAgICAgICA6PQlkcm1fYXV0aC5vIGRybV9idWZz Lm8gZHJtX2NhY2hlLm8gXAo+ICAJCWRybV9lbmNvZGVyLm8gZHJtX21vZGVfb2JqZWN0Lm8gZHJt X3Byb3BlcnR5Lm8gXAo+ICAJCWRybV9wbGFuZS5vIGRybV9jb2xvcl9tZ210Lm8gZHJtX3ByaW50 Lm8gXAo+ICAJCWRybV9kdW1iX2J1ZmZlcnMubyBkcm1fbW9kZV9jb25maWcubyBkcm1fdmJsYW5r Lm8gXAo+IC0JCWRybV9zeW5jb2JqLm8gZHJtX2xlYXNlLm8gZHJtX3dyaXRlYmFjay5vIGRybV9j bGllbnQubwo+ICsJCWRybV9zeW5jb2JqLm8gZHJtX2xlYXNlLm8gZHJtX3dyaXRlYmFjay5vIGRy bV9jbGllbnQubyBcCj4gKwkJZHJtX2F0b21pY191YXBpLm8KPiAgCj4gIGRybS0kKENPTkZJR19E Uk1fTElCX1JBTkRPTSkgKz0gbGliL2RybV9yYW5kb20ubwo+ICBkcm0tJChDT05GSUdfRFJNX1ZN KSArPSBkcm1fdm0ubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5j IGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYwo+IGluZGV4IDI5YTRlNjk1OTM1OC4uMTk2 MzRlMDNiNzhlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jCj4gQEAgLTI4LDYgKzI4LDcgQEAKPiAg Cj4gICNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4K PiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX3VhcGkuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1f bW9kZS5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgo+ICAjaW5jbHVkZSA8ZHJtL2Ry bV93cml0ZWJhY2suaD4KPiBAQCAtMzA5LDI4NSArMzEwLDYgQEAgZHJtX2F0b21pY19nZXRfY3J0 Y19zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gIH0KPiAgRVhQT1JUX1NZ TUJPTChkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRlKTsKPiAgCj4gLXN0YXRpYyB2b2lkIHNldF9v dXRfZmVuY2VfZm9yX2NydGMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+IC0JCQkJ ICAgc3RydWN0IGRybV9jcnRjICpjcnRjLCBzMzIgX191c2VyICpmZW5jZV9wdHIpCj4gLXsKPiAt CXN0YXRlLT5jcnRjc1tkcm1fY3J0Y19pbmRleChjcnRjKV0ub3V0X2ZlbmNlX3B0ciA9IGZlbmNl X3B0cjsKPiAtfQo+IC0KPiAtc3RhdGljIHMzMiBfX3VzZXIgKmdldF9vdXRfZmVuY2VfZm9yX2Ny dGMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+IC0JCQkJCSAgc3RydWN0IGRybV9j cnRjICpjcnRjKQo+IC17Cj4gLQlzMzIgX191c2VyICpmZW5jZV9wdHI7Cj4gLQo+IC0JZmVuY2Vf cHRyID0gc3RhdGUtPmNydGNzW2RybV9jcnRjX2luZGV4KGNydGMpXS5vdXRfZmVuY2VfcHRyOwo+ IC0Jc3RhdGUtPmNydGNzW2RybV9jcnRjX2luZGV4KGNydGMpXS5vdXRfZmVuY2VfcHRyID0gTlVM TDsKPiAtCj4gLQlyZXR1cm4gZmVuY2VfcHRyOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IHNldF9v dXRfZmVuY2VfZm9yX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4g LQkJCQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiAtCQkJCQlzMzIgX191c2Vy ICpmZW5jZV9wdHIpCj4gLXsKPiAtCXVuc2lnbmVkIGludCBpbmRleCA9IGRybV9jb25uZWN0b3Jf aW5kZXgoY29ubmVjdG9yKTsKPiAtCj4gLQlpZiAoIWZlbmNlX3B0cikKPiAtCQlyZXR1cm4gMDsK PiAtCj4gLQlpZiAocHV0X3VzZXIoLTEsIGZlbmNlX3B0cikpCj4gLQkJcmV0dXJuIC1FRkFVTFQ7 Cj4gLQo+IC0Jc3RhdGUtPmNvbm5lY3RvcnNbaW5kZXhdLm91dF9mZW5jZV9wdHIgPSBmZW5jZV9w dHI7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBzMzIgX191c2VyICpnZXRf b3V0X2ZlbmNlX2Zvcl9jb25uZWN0b3Ioc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ IC0JCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+IC17Cj4gLQl1 bnNpZ25lZCBpbnQgaW5kZXggPSBkcm1fY29ubmVjdG9yX2luZGV4KGNvbm5lY3Rvcik7Cj4gLQlz MzIgX191c2VyICpmZW5jZV9wdHI7Cj4gLQo+IC0JZmVuY2VfcHRyID0gc3RhdGUtPmNvbm5lY3Rv cnNbaW5kZXhdLm91dF9mZW5jZV9wdHI7Cj4gLQlzdGF0ZS0+Y29ubmVjdG9yc1tpbmRleF0ub3V0 X2ZlbmNlX3B0ciA9IE5VTEw7Cj4gLQo+IC0JcmV0dXJuIGZlbmNlX3B0cjsKPiAtfQo+IC0KPiAt LyoqCj4gLSAqIGRybV9hdG9taWNfc2V0X21vZGVfZm9yX2NydGMgLSBzZXQgbW9kZSBmb3IgQ1JU Qwo+IC0gKiBAc3RhdGU6IHRoZSBDUlRDIHdob3NlIGluY29taW5nIHN0YXRlIHRvIHVwZGF0ZQo+ IC0gKiBAbW9kZToga2VybmVsLWludGVybmFsIG1vZGUgdG8gdXNlIGZvciB0aGUgQ1JUQywgb3Ig TlVMTCB0byBkaXNhYmxlCj4gLSAqCj4gLSAqIFNldCBhIG1vZGUgKG9yaWdpbmF0aW5nIGZyb20g dGhlIGtlcm5lbCkgb24gdGhlIGRlc2lyZWQgQ1JUQyBzdGF0ZSBhbmQgdXBkYXRlCj4gLSAqIHRo ZSBlbmFibGUgcHJvcGVydHkuCj4gLSAqCj4gLSAqIFJFVFVSTlM6Cj4gLSAqIFplcm8gb24gc3Vj Y2VzcywgZXJyb3IgY29kZSBvbiBmYWlsdXJlLiBDYW5ub3QgcmV0dXJuIC1FREVBRExLLgo+IC0g Ki8KPiAtaW50IGRybV9hdG9taWNfc2V0X21vZGVfZm9yX2NydGMoc3RydWN0IGRybV9jcnRjX3N0 YXRlICpzdGF0ZSwKPiAtCQkJCSBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkK PiAtewo+IC0Jc3RydWN0IGRybV9jcnRjICpjcnRjID0gc3RhdGUtPmNydGM7Cj4gLQlzdHJ1Y3Qg ZHJtX21vZGVfbW9kZWluZm8gdW1vZGU7Cj4gLQo+IC0JLyogRWFybHkgcmV0dXJuIGZvciBubyBj aGFuZ2UuICovCj4gLQlpZiAobW9kZSAmJiBtZW1jbXAoJnN0YXRlLT5tb2RlLCBtb2RlLCBzaXpl b2YoKm1vZGUpKSA9PSAwKQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCWRybV9wcm9wZXJ0eV9ibG9i X3B1dChzdGF0ZS0+bW9kZV9ibG9iKTsKPiAtCXN0YXRlLT5tb2RlX2Jsb2IgPSBOVUxMOwo+IC0K PiAtCWlmIChtb2RlKSB7Cj4gLQkJZHJtX21vZGVfY29udmVydF90b191bW9kZSgmdW1vZGUsIG1v ZGUpOwo+IC0JCXN0YXRlLT5tb2RlX2Jsb2IgPQo+IC0JCQlkcm1fcHJvcGVydHlfY3JlYXRlX2Js b2Ioc3RhdGUtPmNydGMtPmRldiwKPiAtCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplb2YodW1vZGUpLAo+IC0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1 bW9kZSk7Cj4gLQkJaWYgKElTX0VSUihzdGF0ZS0+bW9kZV9ibG9iKSkKPiAtCQkJcmV0dXJuIFBU Ul9FUlIoc3RhdGUtPm1vZGVfYmxvYik7Cj4gLQo+IC0JCWRybV9tb2RlX2NvcHkoJnN0YXRlLT5t b2RlLCBtb2RlKTsKPiAtCQlzdGF0ZS0+ZW5hYmxlID0gdHJ1ZTsKPiAtCQlEUk1fREVCVUdfQVRP TUlDKCJTZXQgW01PREU6JXNdIGZvciBbQ1JUQzolZDolc10gc3RhdGUgJXBcbiIsCj4gLQkJCQkg bW9kZS0+bmFtZSwgY3J0Yy0+YmFzZS5pZCwgY3J0Yy0+bmFtZSwgc3RhdGUpOwo+IC0JfSBlbHNl IHsKPiAtCQltZW1zZXQoJnN0YXRlLT5tb2RlLCAwLCBzaXplb2Yoc3RhdGUtPm1vZGUpKTsKPiAt CQlzdGF0ZS0+ZW5hYmxlID0gZmFsc2U7Cj4gLQkJRFJNX0RFQlVHX0FUT01JQygiU2V0IFtOT01P REVdIGZvciBbQ1JUQzolZDolc10gc3RhdGUgJXBcbiIsCj4gLQkJCQkgY3J0Yy0+YmFzZS5pZCwg Y3J0Yy0+bmFtZSwgc3RhdGUpOwo+IC0JfQo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLUVYUE9S VF9TWU1CT0woZHJtX2F0b21pY19zZXRfbW9kZV9mb3JfY3J0Yyk7Cj4gLQo+IC0vKioKPiAtICog ZHJtX2F0b21pY19zZXRfbW9kZV9wcm9wX2Zvcl9jcnRjIC0gc2V0IG1vZGUgZm9yIENSVEMKPiAt ICogQHN0YXRlOiB0aGUgQ1JUQyB3aG9zZSBpbmNvbWluZyBzdGF0ZSB0byB1cGRhdGUKPiAtICog QGJsb2I6IHBvaW50ZXIgdG8gYmxvYiBwcm9wZXJ0eSB0byB1c2UgZm9yIG1vZGUKPiAtICoKPiAt ICogU2V0IGEgbW9kZSAob3JpZ2luYXRpbmcgZnJvbSBhIGJsb2IgcHJvcGVydHkpIG9uIHRoZSBk ZXNpcmVkIENSVEMgc3RhdGUuCj4gLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIGEgcmVmZXJl bmNlIG9uIHRoZSBibG9iIHByb3BlcnR5IGZvciB0aGUgQ1JUQyBzdGF0ZSwKPiAtICogYW5kIHJl bGVhc2UgdGhlIHJlZmVyZW5jZSBoZWxkIG9uIHRoZSBzdGF0ZSdzIGV4aXN0aW5nIG1vZGUgcHJv cGVydHksIGlmIGFueQo+IC0gKiB3YXMgc2V0Lgo+IC0gKgo+IC0gKiBSRVRVUk5TOgo+IC0gKiBa ZXJvIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZS4gQ2Fubm90IHJldHVybiAtRURF QURMSy4KPiAtICovCj4gLWludCBkcm1fYXRvbWljX3NldF9tb2RlX3Byb3BfZm9yX2NydGMoc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2IpCj4gLXsKPiAtCXN0cnVj dCBkcm1fY3J0YyAqY3J0YyA9IHN0YXRlLT5jcnRjOwo+IC0KPiAtCWlmIChibG9iID09IHN0YXRl LT5tb2RlX2Jsb2IpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JZHJtX3Byb3BlcnR5X2Jsb2JfcHV0 KHN0YXRlLT5tb2RlX2Jsb2IpOwo+IC0Jc3RhdGUtPm1vZGVfYmxvYiA9IE5VTEw7Cj4gLQo+IC0J bWVtc2V0KCZzdGF0ZS0+bW9kZSwgMCwgc2l6ZW9mKHN0YXRlLT5tb2RlKSk7Cj4gLQo+IC0JaWYg KGJsb2IpIHsKPiAtCQlpbnQgcmV0Owo+IC0KPiAtCQlpZiAoYmxvYi0+bGVuZ3RoICE9IHNpemVv ZihzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8pKSB7Cj4gLQkJCURSTV9ERUJVR19BVE9NSUMoIltD UlRDOiVkOiVzXSBiYWQgbW9kZSBibG9iIGxlbmd0aDogJXp1XG4iLAo+IC0JCQkJCSBjcnRjLT5i YXNlLmlkLCBjcnRjLT5uYW1lLAo+IC0JCQkJCSBibG9iLT5sZW5ndGgpOwo+IC0JCQlyZXR1cm4g LUVJTlZBTDsKPiAtCQl9Cj4gLQo+IC0JCXJldCA9IGRybV9tb2RlX2NvbnZlcnRfdW1vZGUoY3J0 Yy0+ZGV2LAo+IC0JCQkJCSAgICAgJnN0YXRlLT5tb2RlLCBibG9iLT5kYXRhKTsKPiAtCQlpZiAo cmV0KSB7Cj4gLQkJCURSTV9ERUJVR19BVE9NSUMoIltDUlRDOiVkOiVzXSBpbnZhbGlkIG1vZGUg KHJldD0lZCwgc3RhdHVzPSVzKTpcbiIsCj4gLQkJCQkJIGNydGMtPmJhc2UuaWQsIGNydGMtPm5h bWUsCj4gLQkJCQkJIHJldCwgZHJtX2dldF9tb2RlX3N0YXR1c19uYW1lKHN0YXRlLT5tb2RlLnN0 YXR1cykpOwo+IC0JCQlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKCZzdGF0ZS0+bW9kZSk7 Cj4gLQkJCXJldHVybiAtRUlOVkFMOwo+IC0JCX0KPiAtCj4gLQkJc3RhdGUtPm1vZGVfYmxvYiA9 IGRybV9wcm9wZXJ0eV9ibG9iX2dldChibG9iKTsKPiAtCQlzdGF0ZS0+ZW5hYmxlID0gdHJ1ZTsK PiAtCQlEUk1fREVCVUdfQVRPTUlDKCJTZXQgW01PREU6JXNdIGZvciBbQ1JUQzolZDolc10gc3Rh dGUgJXBcbiIsCj4gLQkJCQkgc3RhdGUtPm1vZGUubmFtZSwgY3J0Yy0+YmFzZS5pZCwgY3J0Yy0+ bmFtZSwKPiAtCQkJCSBzdGF0ZSk7Cj4gLQl9IGVsc2Ugewo+IC0JCXN0YXRlLT5lbmFibGUgPSBm YWxzZTsKPiAtCQlEUk1fREVCVUdfQVRPTUlDKCJTZXQgW05PTU9ERV0gZm9yIFtDUlRDOiVkOiVz XSBzdGF0ZSAlcFxuIiwKPiAtCQkJCSBjcnRjLT5iYXNlLmlkLCBjcnRjLT5uYW1lLCBzdGF0ZSk7 Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTChkcm1fYXRvbWlj X3NldF9tb2RlX3Byb3BfZm9yX2NydGMpOwo+IC0KPiAtc3RhdGljIGludAo+IC1kcm1fYXRvbWlj X3JlcGxhY2VfcHJvcGVydHlfYmxvYl9mcm9tX2lkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4g LQkJCQkJIHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqKmJsb2IsCj4gLQkJCQkJIHVpbnQ2NF90 IGJsb2JfaWQsCj4gLQkJCQkJIHNzaXplX3QgZXhwZWN0ZWRfc2l6ZSwKPiAtCQkJCQkgc3NpemVf dCBleHBlY3RlZF9lbGVtX3NpemUsCj4gLQkJCQkJIGJvb2wgKnJlcGxhY2VkKQo+IC17Cj4gLQlz dHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKm5ld19ibG9iID0gTlVMTDsKPiAtCj4gLQlpZiAoYmxv Yl9pZCAhPSAwKSB7Cj4gLQkJbmV3X2Jsb2IgPSBkcm1fcHJvcGVydHlfbG9va3VwX2Jsb2IoZGV2 LCBibG9iX2lkKTsKPiAtCQlpZiAobmV3X2Jsb2IgPT0gTlVMTCkKPiAtCQkJcmV0dXJuIC1FSU5W QUw7Cj4gLQo+IC0JCWlmIChleHBlY3RlZF9zaXplID4gMCAmJgo+IC0JCSAgICBuZXdfYmxvYi0+ bGVuZ3RoICE9IGV4cGVjdGVkX3NpemUpIHsKPiAtCQkJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KG5l d19ibG9iKTsKPiAtCQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQkJfQo+IC0JCWlmIChleHBlY3RlZF9l bGVtX3NpemUgPiAwICYmCj4gLQkJICAgIG5ld19ibG9iLT5sZW5ndGggJSBleHBlY3RlZF9lbGVt X3NpemUgIT0gMCkgewo+IC0JCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQobmV3X2Jsb2IpOwo+IC0J CQlyZXR1cm4gLUVJTlZBTDsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JKnJlcGxhY2VkIHw9IGRybV9w cm9wZXJ0eV9yZXBsYWNlX2Jsb2IoYmxvYiwgbmV3X2Jsb2IpOwo+IC0JZHJtX3Byb3BlcnR5X2Js b2JfcHV0KG5ld19ibG9iKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGlu dCBkcm1fYXRvbWljX2NydGNfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAt CQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9w ZXJ0eSwKPiAtCQl1aW50NjRfdCB2YWwpCj4gLXsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBjcnRjLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5t b2RlX2NvbmZpZzsKPiAtCWJvb2wgcmVwbGFjZWQgPSBmYWxzZTsKPiAtCWludCByZXQ7Cj4gLQo+ IC0JaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9hY3RpdmUpCj4gLQkJc3RhdGUtPmFjdGl2 ZSA9IHZhbDsKPiAtCWVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9tb2RlX2lkKSB7 Cj4gLQkJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICptb2RlID0KPiAtCQkJZHJtX3Byb3BlcnR5 X2xvb2t1cF9ibG9iKGRldiwgdmFsKTsKPiAtCQlyZXQgPSBkcm1fYXRvbWljX3NldF9tb2RlX3By b3BfZm9yX2NydGMoc3RhdGUsIG1vZGUpOwo+IC0JCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChtb2Rl KTsKPiAtCQlyZXR1cm4gcmV0Owo+IC0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmRl Z2FtbWFfbHV0X3Byb3BlcnR5KSB7Cj4gLQkJcmV0ID0gZHJtX2F0b21pY19yZXBsYWNlX3Byb3Bl cnR5X2Jsb2JfZnJvbV9pZChkZXYsCj4gLQkJCQkJJnN0YXRlLT5kZWdhbW1hX2x1dCwKPiAtCQkJ CQl2YWwsCj4gLQkJCQkJLTEsIHNpemVvZihzdHJ1Y3QgZHJtX2NvbG9yX2x1dCksCj4gLQkJCQkJ JnJlcGxhY2VkKTsKPiAtCQlzdGF0ZS0+Y29sb3JfbWdtdF9jaGFuZ2VkIHw9IHJlcGxhY2VkOwo+ IC0JCXJldHVybiByZXQ7Cj4gLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+Y3RtX3By b3BlcnR5KSB7Cj4gLQkJcmV0ID0gZHJtX2F0b21pY19yZXBsYWNlX3Byb3BlcnR5X2Jsb2JfZnJv bV9pZChkZXYsCj4gLQkJCQkJJnN0YXRlLT5jdG0sCj4gLQkJCQkJdmFsLAo+IC0JCQkJCXNpemVv ZihzdHJ1Y3QgZHJtX2NvbG9yX2N0bSksIC0xLAo+IC0JCQkJCSZyZXBsYWNlZCk7Cj4gLQkJc3Rh dGUtPmNvbG9yX21nbXRfY2hhbmdlZCB8PSByZXBsYWNlZDsKPiAtCQlyZXR1cm4gcmV0Owo+IC0J fSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmdhbW1hX2x1dF9wcm9wZXJ0eSkgewo+IC0J CXJldCA9IGRybV9hdG9taWNfcmVwbGFjZV9wcm9wZXJ0eV9ibG9iX2Zyb21faWQoZGV2LAo+IC0J CQkJCSZzdGF0ZS0+Z2FtbWFfbHV0LAo+IC0JCQkJCXZhbCwKPiAtCQkJCQktMSwgc2l6ZW9mKHN0 cnVjdCBkcm1fY29sb3JfbHV0KSwKPiAtCQkJCQkmcmVwbGFjZWQpOwo+IC0JCXN0YXRlLT5jb2xv cl9tZ210X2NoYW5nZWQgfD0gcmVwbGFjZWQ7Cj4gLQkJcmV0dXJuIHJldDsKPiAtCX0gZWxzZSBp ZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX291dF9mZW5jZV9wdHIpIHsKPiAtCQlzMzIgX191 c2VyICpmZW5jZV9wdHIgPSB1NjRfdG9fdXNlcl9wdHIodmFsKTsKPiAtCj4gLQkJaWYgKCFmZW5j ZV9wdHIpCj4gLQkJCXJldHVybiAwOwo+IC0KPiAtCQlpZiAocHV0X3VzZXIoLTEsIGZlbmNlX3B0 cikpCj4gLQkJCXJldHVybiAtRUZBVUxUOwo+IC0KPiAtCQlzZXRfb3V0X2ZlbmNlX2Zvcl9jcnRj KHN0YXRlLT5zdGF0ZSwgY3J0YywgZmVuY2VfcHRyKTsKPiAtCX0gZWxzZSBpZiAoY3J0Yy0+ZnVu Y3MtPmF0b21pY19zZXRfcHJvcGVydHkpIHsKPiAtCQlyZXR1cm4gY3J0Yy0+ZnVuY3MtPmF0b21p Y19zZXRfcHJvcGVydHkoY3J0Yywgc3RhdGUsIHByb3BlcnR5LCB2YWwpOwo+IC0JfSBlbHNlIHsK PiAtCQlEUk1fREVCVUdfQVRPTUlDKCJbQ1JUQzolZDolc10gdW5rbm93biBwcm9wZXJ0eSBbUFJP UDolZDolc11dXG4iLAo+IC0JCQkJIGNydGMtPmJhc2UuaWQsIGNydGMtPm5hbWUsCj4gLQkJCQkg cHJvcGVydHktPmJhc2UuaWQsIHByb3BlcnR5LT5uYW1lKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsK PiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludAo+IC1kcm1fYXRv bWljX2NydGNfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAtCQljb25zdCBz dHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlLAo+IC0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKnBy b3BlcnR5LCB1aW50NjRfdCAqdmFsKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g Y3J0Yy0+ZGV2Owo+IC0Jc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJmRldi0+bW9k ZV9jb25maWc7Cj4gLQo+IC0JaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9hY3RpdmUpCj4g LQkJKnZhbCA9IHN0YXRlLT5hY3RpdmU7Cj4gLQllbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWct PnByb3BfbW9kZV9pZCkKPiAtCQkqdmFsID0gKHN0YXRlLT5tb2RlX2Jsb2IpID8gc3RhdGUtPm1v ZGVfYmxvYi0+YmFzZS5pZCA6IDA7Cj4gLQllbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmRl Z2FtbWFfbHV0X3Byb3BlcnR5KQo+IC0JCSp2YWwgPSAoc3RhdGUtPmRlZ2FtbWFfbHV0KSA/IHN0 YXRlLT5kZWdhbW1hX2x1dC0+YmFzZS5pZCA6IDA7Cj4gLQllbHNlIGlmIChwcm9wZXJ0eSA9PSBj b25maWctPmN0bV9wcm9wZXJ0eSkKPiAtCQkqdmFsID0gKHN0YXRlLT5jdG0pID8gc3RhdGUtPmN0 bS0+YmFzZS5pZCA6IDA7Cj4gLQllbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmdhbW1hX2x1 dF9wcm9wZXJ0eSkKPiAtCQkqdmFsID0gKHN0YXRlLT5nYW1tYV9sdXQpID8gc3RhdGUtPmdhbW1h X2x1dC0+YmFzZS5pZCA6IDA7Cj4gLQllbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3Bf b3V0X2ZlbmNlX3B0cikKPiAtCQkqdmFsID0gMDsKPiAtCWVsc2UgaWYgKGNydGMtPmZ1bmNzLT5h dG9taWNfZ2V0X3Byb3BlcnR5KQo+IC0JCXJldHVybiBjcnRjLT5mdW5jcy0+YXRvbWljX2dldF9w cm9wZXJ0eShjcnRjLCBzdGF0ZSwgcHJvcGVydHksIHZhbCk7Cj4gLQllbHNlCj4gLQkJcmV0dXJu IC1FSU5WQUw7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gIHN0YXRpYyBpbnQgZHJtX2F0 b21pY19jcnRjX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgCQlzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKnN0YXRlKQo+ICB7Cj4gQEAgLTc2MSwxNDQgKzQ4Myw2IEBAIGRybV9hdG9taWNf Z2V0X3BsYW5lX3N0YXRlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiAgfQo+ICBF WFBPUlRfU1lNQk9MKGRybV9hdG9taWNfZ2V0X3BsYW5lX3N0YXRlKTsKPiAgCj4gLS8qKgo+IC0g KiBkcm1fYXRvbWljX3BsYW5lX3NldF9wcm9wZXJ0eSAtIHNldCBwcm9wZXJ0eSBvbiBwbGFuZQo+ IC0gKiBAcGxhbmU6IHRoZSBkcm0gcGxhbmUgdG8gc2V0IGEgcHJvcGVydHkgb24KPiAtICogQHN0 YXRlOiB0aGUgc3RhdGUgb2JqZWN0IHRvIHVwZGF0ZSB3aXRoIHRoZSBuZXcgcHJvcGVydHkgdmFs dWUKPiAtICogQHByb3BlcnR5OiB0aGUgcHJvcGVydHkgdG8gc2V0Cj4gLSAqIEB2YWw6IHRoZSBu ZXcgcHJvcGVydHkgdmFsdWUKPiAtICoKPiAtICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGdlbmVy aWMvY29yZSBwcm9wZXJ0aWVzIGFuZCBjYWxscyBvdXQgdG8gZHJpdmVyJ3MKPiAtICogJmRybV9w bGFuZV9mdW5jcy5hdG9taWNfc2V0X3Byb3BlcnR5IGZvciBkcml2ZXIgcHJvcGVydGllcy4gIFRv IGVuc3VyZQo+IC0gKiBjb25zaXN0ZW50IGJlaGF2aW9yIHlvdSBtdXN0IGNhbGwgdGhpcyBmdW5j dGlvbiByYXRoZXIgdGhhbiB0aGUgZHJpdmVyIGhvb2sKPiAtICogZGlyZWN0bHkuCj4gLSAqCj4g LSAqIFJFVFVSTlM6Cj4gLSAqIFplcm8gb24gc3VjY2VzcywgZXJyb3IgY29kZSBvbiBmYWlsdXJl Cj4gLSAqLwo+IC1zdGF0aWMgaW50IGRybV9hdG9taWNfcGxhbmVfc2V0X3Byb3BlcnR5KHN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lLAo+IC0JCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlLCBz dHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKPiAtCQl1aW50NjRfdCB2YWwpCj4gLXsKPiAt CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwbGFuZS0+ZGV2Owo+IC0Jc3RydWN0IGRybV9tb2Rl X2NvbmZpZyAqY29uZmlnID0gJmRldi0+bW9kZV9jb25maWc7Cj4gLQo+IC0JaWYgKHByb3BlcnR5 ID09IGNvbmZpZy0+cHJvcF9mYl9pZCkgewo+IC0JCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi ID0gZHJtX2ZyYW1lYnVmZmVyX2xvb2t1cChkZXYsIE5VTEwsIHZhbCk7Cj4gLQkJZHJtX2F0b21p Y19zZXRfZmJfZm9yX3BsYW5lKHN0YXRlLCBmYik7Cj4gLQkJaWYgKGZiKQo+IC0JCQlkcm1fZnJh bWVidWZmZXJfcHV0KGZiKTsKPiAtCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9w X2luX2ZlbmNlX2ZkKSB7Cj4gLQkJaWYgKHN0YXRlLT5mZW5jZSkKPiAtCQkJcmV0dXJuIC1FSU5W QUw7Cj4gLQo+IC0JCWlmIChVNjQySTY0KHZhbCkgPT0gLTEpCj4gLQkJCXJldHVybiAwOwo+IC0K PiAtCQlzdGF0ZS0+ZmVuY2UgPSBzeW5jX2ZpbGVfZ2V0X2ZlbmNlKHZhbCk7Cj4gLQkJaWYgKCFz dGF0ZS0+ZmVuY2UpCj4gLQkJCXJldHVybiAtRUlOVkFMOwo+IC0KPiAtCX0gZWxzZSBpZiAocHJv cGVydHkgPT0gY29uZmlnLT5wcm9wX2NydGNfaWQpIHsKPiAtCQlzdHJ1Y3QgZHJtX2NydGMgKmNy dGMgPSBkcm1fY3J0Y19maW5kKGRldiwgTlVMTCwgdmFsKTsKPiAtCQlyZXR1cm4gZHJtX2F0b21p Y19zZXRfY3J0Y19mb3JfcGxhbmUoc3RhdGUsIGNydGMpOwo+IC0JfSBlbHNlIGlmIChwcm9wZXJ0 eSA9PSBjb25maWctPnByb3BfY3J0Y194KSB7Cj4gLQkJc3RhdGUtPmNydGNfeCA9IFU2NDJJNjQo dmFsKTsKPiAtCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2NydGNfeSkgewo+ IC0JCXN0YXRlLT5jcnRjX3kgPSBVNjQySTY0KHZhbCk7Cj4gLQl9IGVsc2UgaWYgKHByb3BlcnR5 ID09IGNvbmZpZy0+cHJvcF9jcnRjX3cpIHsKPiAtCQlzdGF0ZS0+Y3J0Y193ID0gdmFsOwo+IC0J fSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3BfY3J0Y19oKSB7Cj4gLQkJc3RhdGUt PmNydGNfaCA9IHZhbDsKPiAtCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX3Ny Y194KSB7Cj4gLQkJc3RhdGUtPnNyY194ID0gdmFsOwo+IC0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9 PSBjb25maWctPnByb3Bfc3JjX3kpIHsKPiAtCQlzdGF0ZS0+c3JjX3kgPSB2YWw7Cj4gLQl9IGVs c2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9zcmNfdykgewo+IC0JCXN0YXRlLT5zcmNf dyA9IHZhbDsKPiAtCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX3NyY19oKSB7 Cj4gLQkJc3RhdGUtPnNyY19oID0gdmFsOwo+IC0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFu ZS0+YWxwaGFfcHJvcGVydHkpIHsKPiAtCQlzdGF0ZS0+YWxwaGEgPSB2YWw7Cj4gLQl9IGVsc2Ug aWYgKHByb3BlcnR5ID09IHBsYW5lLT5ibGVuZF9tb2RlX3Byb3BlcnR5KSB7Cj4gLQkJc3RhdGUt PnBpeGVsX2JsZW5kX21vZGUgPSB2YWw7Cj4gLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5l LT5yb3RhdGlvbl9wcm9wZXJ0eSkgewo+IC0JCWlmICghaXNfcG93ZXJfb2ZfMih2YWwgJiBEUk1f TU9ERV9ST1RBVEVfTUFTSykpIHsKPiAtCQkJRFJNX0RFQlVHX0FUT01JQygiW1BMQU5FOiVkOiVz XSBiYWQgcm90YXRpb24gYml0bWFzazogMHglbGx4XG4iLAo+IC0JCQkJCSBwbGFuZS0+YmFzZS5p ZCwgcGxhbmUtPm5hbWUsIHZhbCk7Cj4gLQkJCXJldHVybiAtRUlOVkFMOwo+IC0JCX0KPiAtCQlz dGF0ZS0+cm90YXRpb24gPSB2YWw7Cj4gLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5lLT56 cG9zX3Byb3BlcnR5KSB7Cj4gLQkJc3RhdGUtPnpwb3MgPSB2YWw7Cj4gLQl9IGVsc2UgaWYgKHBy b3BlcnR5ID09IHBsYW5lLT5jb2xvcl9lbmNvZGluZ19wcm9wZXJ0eSkgewo+IC0JCXN0YXRlLT5j b2xvcl9lbmNvZGluZyA9IHZhbDsKPiAtCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxhbmUtPmNv bG9yX3JhbmdlX3Byb3BlcnR5KSB7Cj4gLQkJc3RhdGUtPmNvbG9yX3JhbmdlID0gdmFsOwo+IC0J fSBlbHNlIGlmIChwbGFuZS0+ZnVuY3MtPmF0b21pY19zZXRfcHJvcGVydHkpIHsKPiAtCQlyZXR1 cm4gcGxhbmUtPmZ1bmNzLT5hdG9taWNfc2V0X3Byb3BlcnR5KHBsYW5lLCBzdGF0ZSwKPiAtCQkJ CXByb3BlcnR5LCB2YWwpOwo+IC0JfSBlbHNlIHsKPiAtCQlEUk1fREVCVUdfQVRPTUlDKCJbUExB TkU6JWQ6JXNdIHVua25vd24gcHJvcGVydHkgW1BST1A6JWQ6JXNdXVxuIiwKPiAtCQkJCSBwbGFu ZS0+YmFzZS5pZCwgcGxhbmUtPm5hbWUsCj4gLQkJCQkgcHJvcGVydHktPmJhc2UuaWQsIHByb3Bl cnR5LT5uYW1lKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsK PiAtfQo+IC0KPiAtc3RhdGljIGludAo+IC1kcm1fYXRvbWljX3BsYW5lX2dldF9wcm9wZXJ0eShz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAtCQljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICpzdGF0ZSwKPiAtCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0X3QgKnZh bCkKPiAtewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBsYW5lLT5kZXY7Cj4gLQlzdHJ1 Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKPiAtCj4gLQlp ZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2ZiX2lkKSB7Cj4gLQkJKnZhbCA9IChzdGF0ZS0+ ZmIpID8gc3RhdGUtPmZiLT5iYXNlLmlkIDogMDsKPiAtCX0gZWxzZSBpZiAocHJvcGVydHkgPT0g Y29uZmlnLT5wcm9wX2luX2ZlbmNlX2ZkKSB7Cj4gLQkJKnZhbCA9IC0xOwo+IC0JfSBlbHNlIGlm IChwcm9wZXJ0eSA9PSBjb25maWctPnByb3BfY3J0Y19pZCkgewo+IC0JCSp2YWwgPSAoc3RhdGUt PmNydGMpID8gc3RhdGUtPmNydGMtPmJhc2UuaWQgOiAwOwo+IC0JfSBlbHNlIGlmIChwcm9wZXJ0 eSA9PSBjb25maWctPnByb3BfY3J0Y194KSB7Cj4gLQkJKnZhbCA9IEk2NDJVNjQoc3RhdGUtPmNy dGNfeCk7Cj4gLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9jcnRjX3kpIHsK PiAtCQkqdmFsID0gSTY0MlU2NChzdGF0ZS0+Y3J0Y195KTsKPiAtCX0gZWxzZSBpZiAocHJvcGVy dHkgPT0gY29uZmlnLT5wcm9wX2NydGNfdykgewo+IC0JCSp2YWwgPSBzdGF0ZS0+Y3J0Y193Owo+ IC0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3BfY3J0Y19oKSB7Cj4gLQkJKnZh bCA9IHN0YXRlLT5jcnRjX2g7Cj4gLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJv cF9zcmNfeCkgewo+IC0JCSp2YWwgPSBzdGF0ZS0+c3JjX3g7Cj4gLQl9IGVsc2UgaWYgKHByb3Bl cnR5ID09IGNvbmZpZy0+cHJvcF9zcmNfeSkgewo+IC0JCSp2YWwgPSBzdGF0ZS0+c3JjX3k7Cj4g LQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9zcmNfdykgewo+IC0JCSp2YWwg PSBzdGF0ZS0+c3JjX3c7Cj4gLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9z cmNfaCkgewo+IC0JCSp2YWwgPSBzdGF0ZS0+c3JjX2g7Cj4gLQl9IGVsc2UgaWYgKHByb3BlcnR5 ID09IHBsYW5lLT5hbHBoYV9wcm9wZXJ0eSkgewo+IC0JCSp2YWwgPSBzdGF0ZS0+YWxwaGE7Cj4g LQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5lLT5ibGVuZF9tb2RlX3Byb3BlcnR5KSB7Cj4g LQkJKnZhbCA9IHN0YXRlLT5waXhlbF9ibGVuZF9tb2RlOwo+IC0JfSBlbHNlIGlmIChwcm9wZXJ0 eSA9PSBwbGFuZS0+cm90YXRpb25fcHJvcGVydHkpIHsKPiAtCQkqdmFsID0gc3RhdGUtPnJvdGF0 aW9uOwo+IC0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+enBvc19wcm9wZXJ0eSkgewo+ IC0JCSp2YWwgPSBzdGF0ZS0+enBvczsKPiAtCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxhbmUt PmNvbG9yX2VuY29kaW5nX3Byb3BlcnR5KSB7Cj4gLQkJKnZhbCA9IHN0YXRlLT5jb2xvcl9lbmNv ZGluZzsKPiAtCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxhbmUtPmNvbG9yX3JhbmdlX3Byb3Bl cnR5KSB7Cj4gLQkJKnZhbCA9IHN0YXRlLT5jb2xvcl9yYW5nZTsKPiAtCX0gZWxzZSBpZiAocGxh bmUtPmZ1bmNzLT5hdG9taWNfZ2V0X3Byb3BlcnR5KSB7Cj4gLQkJcmV0dXJuIHBsYW5lLT5mdW5j cy0+YXRvbWljX2dldF9wcm9wZXJ0eShwbGFuZSwgc3RhdGUsIHByb3BlcnR5LCB2YWwpOwo+IC0J fSBlbHNlIHsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAt fQo+IC0KPiAgc3RhdGljIGJvb2wKPiAgcGxhbmVfc3dpdGNoaW5nX2NydGMoc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlLAo+ICAJCSAgICAgc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4g QEAgLTEyMzgsMTI5ICs4MjIsNiBAQCBkcm1fYXRvbWljX2dldF9jb25uZWN0b3Jfc3RhdGUoc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX2F0 b21pY19nZXRfY29ubmVjdG9yX3N0YXRlKTsKPiAgCj4gLXN0YXRpYyBzdHJ1Y3QgZHJtX3dyaXRl YmFja19qb2IgKgo+IC1kcm1fYXRvbWljX2dldF93cml0ZWJhY2tfam9iKHN0cnVjdCBkcm1fY29u bmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQo+IC17Cj4gLQlXQVJOX09OKGNvbm5fc3RhdGUtPmNv bm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX1dSSVRFQkFDSyk7 Cj4gLQo+IC0JaWYgKCFjb25uX3N0YXRlLT53cml0ZWJhY2tfam9iKQo+IC0JCWNvbm5fc3RhdGUt PndyaXRlYmFja19qb2IgPQo+IC0JCQlremFsbG9jKHNpemVvZigqY29ubl9zdGF0ZS0+d3JpdGVi YWNrX2pvYiksIEdGUF9LRVJORUwpOwo+IC0KPiAtCXJldHVybiBjb25uX3N0YXRlLT53cml0ZWJh Y2tfam9iOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGRybV9hdG9taWNfc2V0X3dyaXRlYmFja19m Yl9mb3JfY29ubmVjdG9yKAo+IC0JCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0 YXRlLAo+IC0JCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQo+IC17Cj4gLQlzdHJ1Y3QgZHJt X3dyaXRlYmFja19qb2IgKmpvYiA9Cj4gLQkJZHJtX2F0b21pY19nZXRfd3JpdGViYWNrX2pvYihj b25uX3N0YXRlKTsKPiAtCWlmICgham9iKQo+IC0JCXJldHVybiAtRU5PTUVNOwo+IC0KPiAtCWRy bV9mcmFtZWJ1ZmZlcl9hc3NpZ24oJmpvYi0+ZmIsIGZiKTsKPiAtCj4gLQlpZiAoZmIpCj4gLQkJ RFJNX0RFQlVHX0FUT01JQygiU2V0IFtGQjolZF0gZm9yIGNvbm5lY3RvciBzdGF0ZSAlcFxuIiwK PiAtCQkJCSBmYi0+YmFzZS5pZCwgY29ubl9zdGF0ZSk7Cj4gLQllbHNlCj4gLQkJRFJNX0RFQlVH X0FUT01JQygiU2V0IFtOT0ZCXSBmb3IgY29ubmVjdG9yIHN0YXRlICVwXG4iLAo+IC0JCQkJIGNv bm5fc3RhdGUpOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGRybV9h dG9taWNfY29ubmVjdG9yX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLAo+IC0JCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSwgc3RydWN0IGRybV9w cm9wZXJ0eSAqcHJvcGVydHksCj4gLQkJdWludDY0X3QgdmFsKQo+IC17Cj4gLQlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX21vZGVfY29uZmln ICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKPiAtCj4gLQlpZiAocHJvcGVydHkgPT0gY29u ZmlnLT5wcm9wX2NydGNfaWQpIHsKPiAtCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBkcm1fY3J0 Y19maW5kKGRldiwgTlVMTCwgdmFsKTsKPiAtCQlyZXR1cm4gZHJtX2F0b21pY19zZXRfY3J0Y19m b3JfY29ubmVjdG9yKHN0YXRlLCBjcnRjKTsKPiAtCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29u ZmlnLT5kcG1zX3Byb3BlcnR5KSB7Cj4gLQkJLyogc2V0dGluZyBEUE1TIHByb3BlcnR5IHJlcXVp cmVzIHNwZWNpYWwgaGFuZGxpbmcsIHdoaWNoCj4gLQkJICogaXMgZG9uZSBpbiBsZWdhY3kgc2V0 cHJvcCBwYXRoIGZvciB1cy4gIERpc2FsbG93IChmb3IKPiAtCQkgKiBub3c/KSBhdG9taWMgd3Jp dGVzIHRvIERQTVMgcHJvcGVydHk6Cj4gLQkJICovCj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9 IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfc2VsZWN0X3N1YmNvbm5lY3Rvcl9wcm9w ZXJ0eSkgewo+IC0JCXN0YXRlLT50di5zdWJjb25uZWN0b3IgPSB2YWw7Cj4gLQl9IGVsc2UgaWYg KHByb3BlcnR5ID09IGNvbmZpZy0+dHZfbGVmdF9tYXJnaW5fcHJvcGVydHkpIHsKPiAtCQlzdGF0 ZS0+dHYubWFyZ2lucy5sZWZ0ID0gdmFsOwo+IC0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25m aWctPnR2X3JpZ2h0X21hcmdpbl9wcm9wZXJ0eSkgewo+IC0JCXN0YXRlLT50di5tYXJnaW5zLnJp Z2h0ID0gdmFsOwo+IC0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X3RvcF9tYXJn aW5fcHJvcGVydHkpIHsKPiAtCQlzdGF0ZS0+dHYubWFyZ2lucy50b3AgPSB2YWw7Cj4gLQl9IGVs c2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfYm90dG9tX21hcmdpbl9wcm9wZXJ0eSkgewo+ IC0JCXN0YXRlLT50di5tYXJnaW5zLmJvdHRvbSA9IHZhbDsKPiAtCX0gZWxzZSBpZiAocHJvcGVy dHkgPT0gY29uZmlnLT50dl9tb2RlX3Byb3BlcnR5KSB7Cj4gLQkJc3RhdGUtPnR2Lm1vZGUgPSB2 YWw7Cj4gLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfYnJpZ2h0bmVzc19wcm9w ZXJ0eSkgewo+IC0JCXN0YXRlLT50di5icmlnaHRuZXNzID0gdmFsOwo+IC0JfSBlbHNlIGlmIChw cm9wZXJ0eSA9PSBjb25maWctPnR2X2NvbnRyYXN0X3Byb3BlcnR5KSB7Cj4gLQkJc3RhdGUtPnR2 LmNvbnRyYXN0ID0gdmFsOwo+IC0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2Zs aWNrZXJfcmVkdWN0aW9uX3Byb3BlcnR5KSB7Cj4gLQkJc3RhdGUtPnR2LmZsaWNrZXJfcmVkdWN0 aW9uID0gdmFsOwo+IC0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X292ZXJzY2Fu X3Byb3BlcnR5KSB7Cj4gLQkJc3RhdGUtPnR2Lm92ZXJzY2FuID0gdmFsOwo+IC0JfSBlbHNlIGlm IChwcm9wZXJ0eSA9PSBjb25maWctPnR2X3NhdHVyYXRpb25fcHJvcGVydHkpIHsKPiAtCQlzdGF0 ZS0+dHYuc2F0dXJhdGlvbiA9IHZhbDsKPiAtCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmln LT50dl9odWVfcHJvcGVydHkpIHsKPiAtCQlzdGF0ZS0+dHYuaHVlID0gdmFsOwo+IC0JfSBlbHNl IGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmxpbmtfc3RhdHVzX3Byb3BlcnR5KSB7Cj4gLQkJLyog TmV2ZXIgZG93bmdyYWRlIGZyb20gR09PRCB0byBCQUQgb24gdXNlcnNwYWNlJ3MgcmVxdWVzdCBo ZXJlLAo+IC0JCSAqIG9ubHkgaHcgaXNzdWVzIGNhbiBkbyB0aGF0Lgo+IC0JCSAqCj4gLQkJICog Rm9yIGFuIGF0b21pYyBwcm9wZXJ0eSB0aGUgdXNlcnNwYWNlIGRvZXNuJ3QgbmVlZCB0byBiZSBh YmxlCj4gLQkJICogdG8gdW5kZXJzdGFuZCBhbGwgdGhlIHByb3BlcnRpZXMsIGJ1dCBuZWVkcyB0 byBiZSBhYmxlIHRvCj4gLQkJICogcmVzdG9yZSB0aGUgc3RhdGUgaXQgd2FudHMgb24gVlQgc3dp dGNoLiBTbyBpZiB0aGUgdXNlcnNwYWNlCj4gLQkJICogdHJpZXMgdG8gY2hhbmdlIHRoZSBsaW5r X3N0YXR1cyBmcm9tIEdPT0QgdG8gQkFELCBkcml2ZXIKPiAtCQkgKiBzaWxlbnRseSByZWplY3Rz IGl0IGFuZCByZXR1cm5zIGEgMC4gVGhpcyBwcmV2ZW50cyB1c2Vyc3BhY2UKPiAtCQkgKiBmcm9t IGFjY2lkZW50bHkgYnJlYWtpbmcgIHRoZSBkaXNwbGF5IHdoZW4gaXQgcmVzdG9yZXMgdGhlCj4g LQkJICogc3RhdGUuCj4gLQkJICovCj4gLQkJaWYgKHN0YXRlLT5saW5rX3N0YXR1cyAhPSBEUk1f TElOS19TVEFUVVNfR09PRCkKPiAtCQkJc3RhdGUtPmxpbmtfc3RhdHVzID0gdmFsOwo+IC0JfSBl bHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmFzcGVjdF9yYXRpb19wcm9wZXJ0eSkgewo+IC0J CXN0YXRlLT5waWN0dXJlX2FzcGVjdF9yYXRpbyA9IHZhbDsKPiAtCX0gZWxzZSBpZiAocHJvcGVy dHkgPT0gY29uZmlnLT5jb250ZW50X3R5cGVfcHJvcGVydHkpIHsKPiAtCQlzdGF0ZS0+Y29udGVu dF90eXBlID0gdmFsOwo+IC0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25uZWN0b3ItPnNjYWxp bmdfbW9kZV9wcm9wZXJ0eSkgewo+IC0JCXN0YXRlLT5zY2FsaW5nX21vZGUgPSB2YWw7Cj4gLQl9 IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbm5lY3Rvci0+Y29udGVudF9wcm90ZWN0aW9uX3Byb3Bl cnR5KSB7Cj4gLQkJaWYgKHZhbCA9PSBEUk1fTU9ERV9DT05URU5UX1BST1RFQ1RJT05fRU5BQkxF RCkgewo+IC0JCQlEUk1fREVCVUdfS01TKCJvbmx5IGRyaXZlcnMgY2FuIHNldCBDUCBFbmFibGVk XG4iKTsKPiAtCQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQkJfQo+IC0JCXN0YXRlLT5jb250ZW50X3By b3RlY3Rpb24gPSB2YWw7Cj4gLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+d3JpdGVi YWNrX2ZiX2lkX3Byb3BlcnR5KSB7Cj4gLQkJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBk cm1fZnJhbWVidWZmZXJfbG9va3VwKGRldiwgTlVMTCwgdmFsKTsKPiAtCQlpbnQgcmV0ID0gZHJt X2F0b21pY19zZXRfd3JpdGViYWNrX2ZiX2Zvcl9jb25uZWN0b3Ioc3RhdGUsIGZiKTsKPiAtCQlp ZiAoZmIpCj4gLQkJCWRybV9mcmFtZWJ1ZmZlcl9wdXQoZmIpOwo+IC0JCXJldHVybiByZXQ7Cj4g LQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+d3JpdGViYWNrX291dF9mZW5jZV9wdHJf cHJvcGVydHkpIHsKPiAtCQlzMzIgX191c2VyICpmZW5jZV9wdHIgPSB1NjRfdG9fdXNlcl9wdHIo dmFsKTsKPiAtCj4gLQkJcmV0dXJuIHNldF9vdXRfZmVuY2VfZm9yX2Nvbm5lY3RvcihzdGF0ZS0+ c3RhdGUsIGNvbm5lY3RvciwKPiAtCQkJCQkJICAgZmVuY2VfcHRyKTsKPiAtCX0gZWxzZSBpZiAo Y29ubmVjdG9yLT5mdW5jcy0+YXRvbWljX3NldF9wcm9wZXJ0eSkgewo+IC0JCXJldHVybiBjb25u ZWN0b3ItPmZ1bmNzLT5hdG9taWNfc2V0X3Byb3BlcnR5KGNvbm5lY3RvciwKPiAtCQkJCXN0YXRl LCBwcm9wZXJ0eSwgdmFsKTsKPiAtCX0gZWxzZSB7Cj4gLQkJRFJNX0RFQlVHX0FUT01JQygiW0NP Tk5FQ1RPUjolZDolc10gdW5rbm93biBwcm9wZXJ0eSBbUFJPUDolZDolc11dXG4iLAo+IC0JCQkJ IGNvbm5lY3Rvci0+YmFzZS5pZCwgY29ubmVjdG9yLT5uYW1lLAo+IC0JCQkJIHByb3BlcnR5LT5i YXNlLmlkLCBwcm9wZXJ0eS0+bmFtZSk7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+ IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gIHN0YXRpYyB2b2lkIGRybV9hdG9taWNfY29ubmVjdG9y X3ByaW50X3N0YXRlKHN0cnVjdCBkcm1fcHJpbnRlciAqcCwKPiAgCQljb25zdCBzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUpCj4gIHsKPiBAQCAtMTM3NywyODEgKzgzOCw2IEBAIHN0 YXRpYyB2b2lkIGRybV9hdG9taWNfY29ubmVjdG9yX3ByaW50X3N0YXRlKHN0cnVjdCBkcm1fcHJp bnRlciAqcCwKPiAgCQljb25uZWN0b3ItPmZ1bmNzLT5hdG9taWNfcHJpbnRfc3RhdGUocCwgc3Rh dGUpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW50Cj4gLWRybV9hdG9taWNfY29ubmVjdG9yX2dldF9w cm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+IC0JCWNvbnN0IHN0cnVj dCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSwKPiAtCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpw cm9wZXJ0eSwgdWludDY0X3QgKnZhbCkKPiAtewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGNvbm5lY3Rvci0+ZGV2Owo+IC0Jc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJmRl di0+bW9kZV9jb25maWc7Cj4gLQo+IC0JaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9jcnRj X2lkKSB7Cj4gLQkJKnZhbCA9IChzdGF0ZS0+Y3J0YykgPyBzdGF0ZS0+Y3J0Yy0+YmFzZS5pZCA6 IDA7Cj4gLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+ZHBtc19wcm9wZXJ0eSkgewo+ IC0JCSp2YWwgPSBjb25uZWN0b3ItPmRwbXM7Cj4gLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNv bmZpZy0+dHZfc2VsZWN0X3N1YmNvbm5lY3Rvcl9wcm9wZXJ0eSkgewo+IC0JCSp2YWwgPSBzdGF0 ZS0+dHYuc3ViY29ubmVjdG9yOwo+IC0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2 X2xlZnRfbWFyZ2luX3Byb3BlcnR5KSB7Cj4gLQkJKnZhbCA9IHN0YXRlLT50di5tYXJnaW5zLmxl ZnQ7Cj4gLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfcmlnaHRfbWFyZ2luX3By b3BlcnR5KSB7Cj4gLQkJKnZhbCA9IHN0YXRlLT50di5tYXJnaW5zLnJpZ2h0Owo+IC0JfSBlbHNl IGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X3RvcF9tYXJnaW5fcHJvcGVydHkpIHsKPiAtCQkq dmFsID0gc3RhdGUtPnR2Lm1hcmdpbnMudG9wOwo+IC0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBj b25maWctPnR2X2JvdHRvbV9tYXJnaW5fcHJvcGVydHkpIHsKPiAtCQkqdmFsID0gc3RhdGUtPnR2 Lm1hcmdpbnMuYm90dG9tOwo+IC0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X21v ZGVfcHJvcGVydHkpIHsKPiAtCQkqdmFsID0gc3RhdGUtPnR2Lm1vZGU7Cj4gLQl9IGVsc2UgaWYg KHByb3BlcnR5ID09IGNvbmZpZy0+dHZfYnJpZ2h0bmVzc19wcm9wZXJ0eSkgewo+IC0JCSp2YWwg PSBzdGF0ZS0+dHYuYnJpZ2h0bmVzczsKPiAtCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmln LT50dl9jb250cmFzdF9wcm9wZXJ0eSkgewo+IC0JCSp2YWwgPSBzdGF0ZS0+dHYuY29udHJhc3Q7 Cj4gLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfZmxpY2tlcl9yZWR1Y3Rpb25f cHJvcGVydHkpIHsKPiAtCQkqdmFsID0gc3RhdGUtPnR2LmZsaWNrZXJfcmVkdWN0aW9uOwo+IC0J fSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X292ZXJzY2FuX3Byb3BlcnR5KSB7Cj4g LQkJKnZhbCA9IHN0YXRlLT50di5vdmVyc2NhbjsKPiAtCX0gZWxzZSBpZiAocHJvcGVydHkgPT0g Y29uZmlnLT50dl9zYXR1cmF0aW9uX3Byb3BlcnR5KSB7Cj4gLQkJKnZhbCA9IHN0YXRlLT50di5z YXR1cmF0aW9uOwo+IC0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2h1ZV9wcm9w ZXJ0eSkgewo+IC0JCSp2YWwgPSBzdGF0ZS0+dHYuaHVlOwo+IC0JfSBlbHNlIGlmIChwcm9wZXJ0 eSA9PSBjb25maWctPmxpbmtfc3RhdHVzX3Byb3BlcnR5KSB7Cj4gLQkJKnZhbCA9IHN0YXRlLT5s aW5rX3N0YXR1czsKPiAtCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5hc3BlY3RfcmF0 aW9fcHJvcGVydHkpIHsKPiAtCQkqdmFsID0gc3RhdGUtPnBpY3R1cmVfYXNwZWN0X3JhdGlvOwo+ IC0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmNvbnRlbnRfdHlwZV9wcm9wZXJ0eSkg ewo+IC0JCSp2YWwgPSBzdGF0ZS0+Y29udGVudF90eXBlOwo+IC0JfSBlbHNlIGlmIChwcm9wZXJ0 eSA9PSBjb25uZWN0b3ItPnNjYWxpbmdfbW9kZV9wcm9wZXJ0eSkgewo+IC0JCSp2YWwgPSBzdGF0 ZS0+c2NhbGluZ19tb2RlOwo+IC0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25uZWN0b3ItPmNv bnRlbnRfcHJvdGVjdGlvbl9wcm9wZXJ0eSkgewo+IC0JCSp2YWwgPSBzdGF0ZS0+Y29udGVudF9w cm90ZWN0aW9uOwo+IC0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPndyaXRlYmFja19m Yl9pZF9wcm9wZXJ0eSkgewo+IC0JCS8qIFdyaXRlYmFjayBmcmFtZWJ1ZmZlciBpcyBvbmUtc2hv dCwgd3JpdGUgYW5kIGZvcmdldCAqLwo+IC0JCSp2YWwgPSAwOwo+IC0JfSBlbHNlIGlmIChwcm9w ZXJ0eSA9PSBjb25maWctPndyaXRlYmFja19vdXRfZmVuY2VfcHRyX3Byb3BlcnR5KSB7Cj4gLQkJ KnZhbCA9IDA7Cj4gLQl9IGVsc2UgaWYgKGNvbm5lY3Rvci0+ZnVuY3MtPmF0b21pY19nZXRfcHJv cGVydHkpIHsKPiAtCQlyZXR1cm4gY29ubmVjdG9yLT5mdW5jcy0+YXRvbWljX2dldF9wcm9wZXJ0 eShjb25uZWN0b3IsCj4gLQkJCQlzdGF0ZSwgcHJvcGVydHksIHZhbCk7Cj4gLQl9IGVsc2Ugewo+ IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1p bnQgZHJtX2F0b21pY19nZXRfcHJvcGVydHkoc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqLAo+ IC0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCB1aW50NjRfdCAqdmFsKQo+IC17Cj4g LQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcHJvcGVydHktPmRldjsKPiAtCWludCByZXQ7Cj4g LQo+IC0Jc3dpdGNoIChvYmotPnR5cGUpIHsKPiAtCWNhc2UgRFJNX01PREVfT0JKRUNUX0NPTk5F Q1RPUjogewo+IC0JCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBvYmpfdG9fY29u bmVjdG9yKG9iaik7Cj4gLQkJV0FSTl9PTighZHJtX21vZGVzZXRfaXNfbG9ja2VkKCZkZXYtPm1v ZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgpKTsKPiAtCQlyZXQgPSBkcm1fYXRvbWljX2Nvbm5l Y3Rvcl9nZXRfcHJvcGVydHkoY29ubmVjdG9yLAo+IC0JCQkJY29ubmVjdG9yLT5zdGF0ZSwgcHJv cGVydHksIHZhbCk7Cj4gLQkJYnJlYWs7Cj4gLQl9Cj4gLQljYXNlIERSTV9NT0RFX09CSkVDVF9D UlRDOiB7Cj4gLQkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gb2JqX3RvX2NydGMob2JqKTsKPiAt CQlXQVJOX09OKCFkcm1fbW9kZXNldF9pc19sb2NrZWQoJmNydGMtPm11dGV4KSk7Cj4gLQkJcmV0 ID0gZHJtX2F0b21pY19jcnRjX2dldF9wcm9wZXJ0eShjcnRjLAo+IC0JCQkJY3J0Yy0+c3RhdGUs IHByb3BlcnR5LCB2YWwpOwo+IC0JCWJyZWFrOwo+IC0JfQo+IC0JY2FzZSBEUk1fTU9ERV9PQkpF Q1RfUExBTkU6IHsKPiAtCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9IG9ial90b19wbGFuZShv YmopOwo+IC0JCVdBUk5fT04oIWRybV9tb2Rlc2V0X2lzX2xvY2tlZCgmcGxhbmUtPm11dGV4KSk7 Cj4gLQkJcmV0ID0gZHJtX2F0b21pY19wbGFuZV9nZXRfcHJvcGVydHkocGxhbmUsCj4gLQkJCQlw bGFuZS0+c3RhdGUsIHByb3BlcnR5LCB2YWwpOwo+IC0JCWJyZWFrOwo+IC0JfQo+IC0JZGVmYXVs dDoKPiAtCQlyZXQgPSAtRUlOVkFMOwo+IC0JCWJyZWFrOwo+IC0JfQo+IC0KPiAtCXJldHVybiBy ZXQ7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9wbGFuZSAt IHNldCBjcnRjIGZvciBwbGFuZQo+IC0gKiBAcGxhbmVfc3RhdGU6IHRoZSBwbGFuZSB3aG9zZSBp bmNvbWluZyBzdGF0ZSB0byB1cGRhdGUKPiAtICogQGNydGM6IGNydGMgdG8gdXNlIGZvciB0aGUg cGxhbmUKPiAtICoKPiAtICogQ2hhbmdpbmcgdGhlIGFzc2lnbmVkIGNydGMgZm9yIGEgcGxhbmUg cmVxdWlyZXMgdXMgdG8gZ3JhYiB0aGUgbG9jayBhbmQgc3RhdGUKPiAtICogZm9yIHRoZSBuZXcg Y3J0YywgYXMgbmVlZGVkLiBUaGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUgb2YgYWxsIHRoZXNlIGRl dGFpbHMKPiAtICogYmVzaWRlcyB1cGRhdGluZyB0aGUgcG9pbnRlciBpbiB0aGUgc3RhdGUgb2Jq ZWN0IGl0c2VsZi4KPiAtICoKPiAtICogUmV0dXJuczoKPiAtICogMCBvbiBzdWNjZXNzIG9yIGNh biBmYWlsIHdpdGggLUVERUFETEsgb3IgLUVOT01FTS4gV2hlbiB0aGUgZXJyb3IgaXMgRURFQURM Swo+IC0gKiB0aGVuIHRoZSB3L3cgbXV0ZXggY29kZSBoYXMgZGV0ZWN0ZWQgYSBkZWFkbG9jayBh bmQgdGhlIGVudGlyZSBhdG9taWMKPiAtICogc2VxdWVuY2UgbXVzdCBiZSByZXN0YXJ0ZWQuIEFs bCBvdGhlciBlcnJvcnMgYXJlIGZhdGFsLgo+IC0gKi8KPiAtaW50Cj4gLWRybV9hdG9taWNfc2V0 X2NydGNfZm9yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAo+IC0J CQkgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gLXsKPiAtCXN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lID0gcGxhbmVfc3RhdGUtPnBsYW5lOwo+IC0Jc3RydWN0IGRybV9jcnRjX3N0YXRlICpj cnRjX3N0YXRlOwo+IC0JLyogTm90aGluZyB0byBkbyBmb3Igc2FtZSBjcnRjKi8KPiAtCWlmIChw bGFuZV9zdGF0ZS0+Y3J0YyA9PSBjcnRjKQo+IC0JCXJldHVybiAwOwo+IC0JaWYgKHBsYW5lX3N0 YXRlLT5jcnRjKSB7Cj4gLQkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUo cGxhbmVfc3RhdGUtPnN0YXRlLAo+IC0JCQkJCQkgICAgICAgcGxhbmVfc3RhdGUtPmNydGMpOwo+ IC0JCWlmIChXQVJOX09OKElTX0VSUihjcnRjX3N0YXRlKSkpCj4gLQkJCXJldHVybiBQVFJfRVJS KGNydGNfc3RhdGUpOwo+IC0KPiAtCQljcnRjX3N0YXRlLT5wbGFuZV9tYXNrICY9IH5kcm1fcGxh bmVfbWFzayhwbGFuZSk7Cj4gLQl9Cj4gLQo+IC0JcGxhbmVfc3RhdGUtPmNydGMgPSBjcnRjOwo+ IC0KPiAtCWlmIChjcnRjKSB7Cj4gLQkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNf c3RhdGUocGxhbmVfc3RhdGUtPnN0YXRlLAo+IC0JCQkJCQkgICAgICAgY3J0Yyk7Cj4gLQkJaWYg KElTX0VSUihjcnRjX3N0YXRlKSkKPiAtCQkJcmV0dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7Cj4g LQkJY3J0Y19zdGF0ZS0+cGxhbmVfbWFzayB8PSBkcm1fcGxhbmVfbWFzayhwbGFuZSk7Cj4gLQl9 Cj4gLQo+IC0JaWYgKGNydGMpCj4gLQkJRFJNX0RFQlVHX0FUT01JQygiTGluayBbUExBTkU6JWQ6 JXNdIHN0YXRlICVwIHRvIFtDUlRDOiVkOiVzXVxuIiwKPiAtCQkJCSBwbGFuZS0+YmFzZS5pZCwg cGxhbmUtPm5hbWUsIHBsYW5lX3N0YXRlLAo+IC0JCQkJIGNydGMtPmJhc2UuaWQsIGNydGMtPm5h bWUpOwo+IC0JZWxzZQo+IC0JCURSTV9ERUJVR19BVE9NSUMoIkxpbmsgW1BMQU5FOiVkOiVzXSBz dGF0ZSAlcCB0byBbTk9DUlRDXVxuIiwKPiAtCQkJCSBwbGFuZS0+YmFzZS5pZCwgcGxhbmUtPm5h bWUsIHBsYW5lX3N0YXRlKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC1FWFBPUlRfU1lNQk9M KGRybV9hdG9taWNfc2V0X2NydGNfZm9yX3BsYW5lKTsKPiAtCj4gLS8qKgo+IC0gKiBkcm1fYXRv bWljX3NldF9mYl9mb3JfcGxhbmUgLSBzZXQgZnJhbWVidWZmZXIgZm9yIHBsYW5lCj4gLSAqIEBw bGFuZV9zdGF0ZTogYXRvbWljIHN0YXRlIG9iamVjdCBmb3IgdGhlIHBsYW5lCj4gLSAqIEBmYjog ZmIgdG8gdXNlIGZvciB0aGUgcGxhbmUKPiAtICoKPiAtICogQ2hhbmdpbmcgdGhlIGFzc2lnbmVk IGZyYW1lYnVmZmVyIGZvciBhIHBsYW5lIHJlcXVpcmVzIHVzIHRvIGdyYWIgYSByZWZlcmVuY2UK PiAtICogdG8gdGhlIG5ldyBmYiBhbmQgZHJvcCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBvbGQgZmIs IGlmIHRoZXJlIGlzIG9uZS4gVGhpcwo+IC0gKiBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIGFsbCB0 aGVzZSBkZXRhaWxzIGJlc2lkZXMgdXBkYXRpbmcgdGhlIHBvaW50ZXIgaW4gdGhlCj4gLSAqIHN0 YXRlIG9iamVjdCBpdHNlbGYuCj4gLSAqLwo+IC12b2lkCj4gLWRybV9hdG9taWNfc2V0X2ZiX2Zv cl9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKPiAtCQkJICAgIHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSA9IHBsYW5lX3N0YXRlLT5wbGFuZTsKPiAtCj4gLQlpZiAoZmIpCj4gLQkJRFJNX0RFQlVHX0FU T01JQygiU2V0IFtGQjolZF0gZm9yIFtQTEFORTolZDolc10gc3RhdGUgJXBcbiIsCj4gLQkJCQkg ZmItPmJhc2UuaWQsIHBsYW5lLT5iYXNlLmlkLCBwbGFuZS0+bmFtZSwKPiAtCQkJCSBwbGFuZV9z dGF0ZSk7Cj4gLQllbHNlCj4gLQkJRFJNX0RFQlVHX0FUT01JQygiU2V0IFtOT0ZCXSBmb3IgW1BM QU5FOiVkOiVzXSBzdGF0ZSAlcFxuIiwKPiAtCQkJCSBwbGFuZS0+YmFzZS5pZCwgcGxhbmUtPm5h bWUsIHBsYW5lX3N0YXRlKTsKPiAtCj4gLQlkcm1fZnJhbWVidWZmZXJfYXNzaWduKCZwbGFuZV9z dGF0ZS0+ZmIsIGZiKTsKPiAtfQo+IC1FWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfc2V0X2ZiX2Zv cl9wbGFuZSk7Cj4gLQo+IC0vKioKPiAtICogZHJtX2F0b21pY19zZXRfZmVuY2VfZm9yX3BsYW5l IC0gc2V0IGZlbmNlIGZvciBwbGFuZQo+IC0gKiBAcGxhbmVfc3RhdGU6IGF0b21pYyBzdGF0ZSBv YmplY3QgZm9yIHRoZSBwbGFuZQo+IC0gKiBAZmVuY2U6IGRtYV9mZW5jZSB0byB1c2UgZm9yIHRo ZSBwbGFuZQo+IC0gKgo+IC0gKiBIZWxwZXIgdG8gc2V0dXAgdGhlIHBsYW5lX3N0YXRlIGZlbmNl IGluIGNhc2UgaXQgaXMgbm90IHNldCB5ZXQuCj4gLSAqIEJ5IHVzaW5nIHRoaXMgZHJpdmVycyBk b2Vzbid0IG5lZWQgdG8gd29ycnkgaWYgdGhlIHVzZXIgY2hvb3NlCj4gLSAqIGltcGxpY2l0IG9y IGV4cGxpY2l0IGZlbmNpbmcuCj4gLSAqCj4gLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBub3Qgc2V0 IHRoZSBmZW5jZSB0byB0aGUgc3RhdGUgaWYgaXQgd2FzIHNldAo+IC0gKiB2aWEgZXhwbGljaXQg ZmVuY2luZyBpbnRlcmZhY2VzIG9uIHRoZSBhdG9taWMgaW9jdGwuIEluIHRoYXQgY2FzZSBpdCB3 aWxsCj4gLSAqIGRyb3AgdGhlIHJlZmVyZW5jZSB0byB0aGUgZmVuY2UgYXMgd2UgYXJlIG5vdCBz dG9yaW5nIGl0IGFueXdoZXJlLgo+IC0gKiBPdGhlcndpc2UsIGlmICZkcm1fcGxhbmVfc3RhdGUu ZmVuY2UgaXMgbm90IHNldCB0aGlzIGZ1bmN0aW9uIHdlIGp1c3Qgc2V0IGl0Cj4gLSAqIHdpdGgg dGhlIHJlY2VpdmVkIGltcGxpY2l0IGZlbmNlLiBJbiBib3RoIGNhc2VzIHRoaXMgZnVuY3Rpb24g Y29uc3VtZXMgYQo+IC0gKiByZWZlcmVuY2UgZm9yIEBmZW5jZS4KPiAtICoKPiAtICogVGhpcyB3 YXkgZXhwbGljaXQgZmVuY2luZyBjYW4gYmUgdXNlZCB0byBvdmVycnVsZSBpbXBsaWNpdCBmZW5j aW5nLCB3aGljaCBpcwo+IC0gKiBpbXBvcnRhbnQgdG8gbWFrZSBleHBsaWNpdCBmZW5jaW5nIHVz ZS1jYXNlcyB3b3JrOiBPbmUgZXhhbXBsZSBpcyB1c2luZyBvbmUKPiAtICogYnVmZmVyIGZvciAy IHNjcmVlbnMgd2l0aCBkaWZmZXJlbnQgcmVmcmVzaCByYXRlcy4gSW1wbGljaXQgZmVuY2luZyB3 aWxsCj4gLSAqIGNsYW1wIHJlbmRlcmluZyB0byB0aGUgcmVmcmVzaCByYXRlIG9mIHRoZSBzbG93 ZXIgc2NyZWVuLCB3aGVyZWFzIGV4cGxpY2l0Cj4gLSAqIGZlbmNlIGFsbG93cyAyIGluZGVwZW5k ZW50IHJlbmRlciBhbmQgZGlzcGxheSBsb29wcyBvbiBhIHNpbmdsZSBidWZmZXIuIElmIGEKPiAt ICogZHJpdmVyIGFsbG93cyBvYmV5cyBib3RoIGltcGxpY2l0IGFuZCBleHBsaWNpdCBmZW5jZXMg Zm9yIHBsYW5lIHVwZGF0ZXMsIHRoZW4KPiAtICogaXQgd2lsbCBicmVhayBhbGwgdGhlIGJlbmVm aXRzIG9mIGV4cGxpY2l0IGZlbmNpbmcuCj4gLSAqLwo+IC12b2lkCj4gLWRybV9hdG9taWNfc2V0 X2ZlbmNlX2Zvcl9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKPiAt CQkJICAgICAgIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQo+IC17Cj4gLQlpZiAocGxhbmVfc3Rh dGUtPmZlbmNlKSB7Cj4gLQkJZG1hX2ZlbmNlX3B1dChmZW5jZSk7Cj4gLQkJcmV0dXJuOwo+IC0J fQo+IC0KPiAtCXBsYW5lX3N0YXRlLT5mZW5jZSA9IGZlbmNlOwo+IC19Cj4gLUVYUE9SVF9TWU1C T0woZHJtX2F0b21pY19zZXRfZmVuY2VfZm9yX3BsYW5lKTsKPiAtCj4gLS8qKgo+IC0gKiBkcm1f YXRvbWljX3NldF9jcnRjX2Zvcl9jb25uZWN0b3IgLSBzZXQgY3J0YyBmb3IgY29ubmVjdG9yCj4g LSAqIEBjb25uX3N0YXRlOiBhdG9taWMgc3RhdGUgb2JqZWN0IGZvciB0aGUgY29ubmVjdG9yCj4g LSAqIEBjcnRjOiBjcnRjIHRvIHVzZSBmb3IgdGhlIGNvbm5lY3Rvcgo+IC0gKgo+IC0gKiBDaGFu Z2luZyB0aGUgYXNzaWduZWQgY3J0YyBmb3IgYSBjb25uZWN0b3IgcmVxdWlyZXMgdXMgdG8gZ3Jh YiB0aGUgbG9jayBhbmQKPiAtICogc3RhdGUgZm9yIHRoZSBuZXcgY3J0YywgYXMgbmVlZGVkLiBU aGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUgb2YgYWxsIHRoZXNlCj4gLSAqIGRldGFpbHMgYmVzaWRl cyB1cGRhdGluZyB0aGUgcG9pbnRlciBpbiB0aGUgc3RhdGUgb2JqZWN0IGl0c2VsZi4KPiAtICoK PiAtICogUmV0dXJuczoKPiAtICogMCBvbiBzdWNjZXNzIG9yIGNhbiBmYWlsIHdpdGggLUVERUFE TEsgb3IgLUVOT01FTS4gV2hlbiB0aGUgZXJyb3IgaXMgRURFQURMSwo+IC0gKiB0aGVuIHRoZSB3 L3cgbXV0ZXggY29kZSBoYXMgZGV0ZWN0ZWQgYSBkZWFkbG9jayBhbmQgdGhlIGVudGlyZSBhdG9t aWMKPiAtICogc2VxdWVuY2UgbXVzdCBiZSByZXN0YXJ0ZWQuIEFsbCBvdGhlciBlcnJvcnMgYXJl IGZhdGFsLgo+IC0gKi8KPiAtaW50Cj4gLWRybV9hdG9taWNfc2V0X2NydGNfZm9yX2Nvbm5lY3Rv cihzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSwKPiAtCQkJCSAgc3RydWN0 IGRybV9jcnRjICpjcnRjKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y ID0gY29ubl9zdGF0ZS0+Y29ubmVjdG9yOwo+IC0Jc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRj X3N0YXRlOwo+IC0KPiAtCWlmIChjb25uX3N0YXRlLT5jcnRjID09IGNydGMpCj4gLQkJcmV0dXJu IDA7Cj4gLQo+IC0JaWYgKGNvbm5fc3RhdGUtPmNydGMpIHsKPiAtCQljcnRjX3N0YXRlID0gZHJt X2F0b21pY19nZXRfbmV3X2NydGNfc3RhdGUoY29ubl9zdGF0ZS0+c3RhdGUsCj4gLQkJCQkJCQkg ICBjb25uX3N0YXRlLT5jcnRjKTsKPiAtCj4gLQkJY3J0Y19zdGF0ZS0+Y29ubmVjdG9yX21hc2sg Jj0KPiAtCQkJfmRybV9jb25uZWN0b3JfbWFzayhjb25uX3N0YXRlLT5jb25uZWN0b3IpOwo+IC0K PiAtCQlkcm1fY29ubmVjdG9yX3B1dChjb25uX3N0YXRlLT5jb25uZWN0b3IpOwo+IC0JCWNvbm5f c3RhdGUtPmNydGMgPSBOVUxMOwo+IC0JfQo+IC0KPiAtCWlmIChjcnRjKSB7Cj4gLQkJY3J0Y19z dGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoY29ubl9zdGF0ZS0+c3RhdGUsIGNydGMp Owo+IC0JCWlmIChJU19FUlIoY3J0Y19zdGF0ZSkpCj4gLQkJCXJldHVybiBQVFJfRVJSKGNydGNf c3RhdGUpOwo+IC0KPiAtCQljcnRjX3N0YXRlLT5jb25uZWN0b3JfbWFzayB8PQo+IC0JCQlkcm1f Y29ubmVjdG9yX21hc2soY29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsKPiAtCj4gLQkJZHJtX2Nvbm5l Y3Rvcl9nZXQoY29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsKPiAtCQljb25uX3N0YXRlLT5jcnRjID0g Y3J0YzsKPiAtCj4gLQkJRFJNX0RFQlVHX0FUT01JQygiTGluayBbQ09OTkVDVE9SOiVkOiVzXSBz dGF0ZSAlcCB0byBbQ1JUQzolZDolc11cbiIsCj4gLQkJCQkgY29ubmVjdG9yLT5iYXNlLmlkLCBj b25uZWN0b3ItPm5hbWUsCj4gLQkJCQkgY29ubl9zdGF0ZSwgY3J0Yy0+YmFzZS5pZCwgY3J0Yy0+ bmFtZSk7Cj4gLQl9IGVsc2Ugewo+IC0JCURSTV9ERUJVR19BVE9NSUMoIkxpbmsgW0NPTk5FQ1RP UjolZDolc10gc3RhdGUgJXAgdG8gW05PQ1JUQ11cbiIsCj4gLQkJCQkgY29ubmVjdG9yLT5iYXNl LmlkLCBjb25uZWN0b3ItPm5hbWUsCj4gLQkJCQkgY29ubl9zdGF0ZSk7Cj4gLQl9Cj4gLQo+IC0J cmV0dXJuIDA7Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9j b25uZWN0b3IpOwo+IC0KPiAgLyoqCj4gICAqIGRybV9hdG9taWNfYWRkX2FmZmVjdGVkX2Nvbm5l Y3RvcnMgLSBhZGQgY29ubmVjdG9ycyBmb3IgY3J0Ywo+ICAgKiBAc3RhdGU6IGF0b21pYyBzdGF0 ZQo+IEBAIC0xOTE2LDcgKzExMDIsNyBAQCBpbnQgZHJtX2F0b21pY19ub25ibG9ja2luZ19jb21t aXQoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICB9Cj4gIEVYUE9SVF9TWU1CT0wo ZHJtX2F0b21pY19ub25ibG9ja2luZ19jb21taXQpOwo+ICAKPiAtc3RhdGljIHZvaWQgZHJtX2F0 b21pY19wcmludF9zdGF0ZShjb25zdCBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4g K3ZvaWQgZHJtX2F0b21pY19wcmludF9zdGF0ZShjb25zdCBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUpCj4gIHsKPiAgCXN0cnVjdCBkcm1fcHJpbnRlciBwID0gZHJtX2luZm9fcHJpbnRl cihzdGF0ZS0+ZGV2LT5kZXYpOwo+ICAJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Cj4gQEAgLTIw MjMsNTQ0ICsxMjA5LDMgQEAgaW50IGRybV9hdG9taWNfZGVidWdmc19pbml0KHN0cnVjdCBkcm1f bWlub3IgKm1pbm9yKQo+ICB9Cj4gICNlbmRpZgo+ICAKPiAtLyoKPiAtICogVGhlIGJpZyBtb25z dGVyIGlvY3RsCj4gLSAqLwo+IC0KPiAtc3RhdGljIHN0cnVjdCBkcm1fcGVuZGluZ192Ymxhbmtf ZXZlbnQgKmNyZWF0ZV92YmxhbmtfZXZlbnQoCj4gLQkJc3RydWN0IGRybV9jcnRjICpjcnRjLCB1 aW50NjRfdCB1c2VyX2RhdGEpCj4gLXsKPiAtCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZl bnQgKmUgPSBOVUxMOwo+IC0KPiAtCWUgPSBremFsbG9jKHNpemVvZiAqZSwgR0ZQX0tFUk5FTCk7 Cj4gLQlpZiAoIWUpCj4gLQkJcmV0dXJuIE5VTEw7Cj4gLQo+IC0JZS0+ZXZlbnQuYmFzZS50eXBl ID0gRFJNX0VWRU5UX0ZMSVBfQ09NUExFVEU7Cj4gLQllLT5ldmVudC5iYXNlLmxlbmd0aCA9IHNp emVvZihlLT5ldmVudCk7Cj4gLQllLT5ldmVudC52YmwuY3J0Y19pZCA9IGNydGMtPmJhc2UuaWQ7 Cj4gLQllLT5ldmVudC52YmwudXNlcl9kYXRhID0gdXNlcl9kYXRhOwo+IC0KPiAtCXJldHVybiBl Owo+IC19Cj4gLQo+IC1pbnQgZHJtX2F0b21pY19jb25uZWN0b3JfY29tbWl0X2RwbXMoc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+IC0JCQkJICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLAo+IC0JCQkJICAgICBpbnQgbW9kZSkKPiAtewo+IC0Jc3RydWN0IGRybV9j b25uZWN0b3IgKnRtcF9jb25uZWN0b3I7Cj4gLQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAq bmV3X2Nvbm5fc3RhdGU7Cj4gLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gLQlzdHJ1Y3QgZHJt X2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gLQlpbnQgaSwgcmV0LCBvbGRfbW9kZSA9IGNvbm5l Y3Rvci0+ZHBtczsKPiAtCWJvb2wgYWN0aXZlID0gZmFsc2U7Cj4gLQo+IC0JcmV0ID0gZHJtX21v ZGVzZXRfbG9jaygmc3RhdGUtPmRldi0+bW9kZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCwKPiAt CQkJICAgICAgIHN0YXRlLT5hY3F1aXJlX2N0eCk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiBy ZXQ7Cj4gLQo+IC0JaWYgKG1vZGUgIT0gRFJNX01PREVfRFBNU19PTikKPiAtCQltb2RlID0gRFJN X01PREVfRFBNU19PRkY7Cj4gLQljb25uZWN0b3ItPmRwbXMgPSBtb2RlOwo+IC0KPiAtCWNydGMg PSBjb25uZWN0b3ItPnN0YXRlLT5jcnRjOwo+IC0JaWYgKCFjcnRjKQo+IC0JCWdvdG8gb3V0Owo+ IC0JcmV0ID0gZHJtX2F0b21pY19hZGRfYWZmZWN0ZWRfY29ubmVjdG9ycyhzdGF0ZSwgY3J0Yyk7 Cj4gLQlpZiAocmV0KQo+IC0JCWdvdG8gb3V0Owo+IC0KPiAtCWNydGNfc3RhdGUgPSBkcm1fYXRv bWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLCBjcnRjKTsKPiAtCWlmIChJU19FUlIoY3J0Y19zdGF0 ZSkpIHsKPiAtCQlyZXQgPSBQVFJfRVJSKGNydGNfc3RhdGUpOwo+IC0JCWdvdG8gb3V0Owo+IC0J fQo+IC0KPiAtCWZvcl9lYWNoX25ld19jb25uZWN0b3JfaW5fc3RhdGUoc3RhdGUsIHRtcF9jb25u ZWN0b3IsIG5ld19jb25uX3N0YXRlLCBpKSB7Cj4gLQkJaWYgKG5ld19jb25uX3N0YXRlLT5jcnRj ICE9IGNydGMpCj4gLQkJCWNvbnRpbnVlOwo+IC0JCWlmICh0bXBfY29ubmVjdG9yLT5kcG1zID09 IERSTV9NT0RFX0RQTVNfT04pIHsKPiAtCQkJYWN0aXZlID0gdHJ1ZTsKPiAtCQkJYnJlYWs7Cj4g LQkJfQo+IC0JfQo+IC0KPiAtCWNydGNfc3RhdGUtPmFjdGl2ZSA9IGFjdGl2ZTsKPiAtCXJldCA9 IGRybV9hdG9taWNfY29tbWl0KHN0YXRlKTsKPiAtb3V0Ogo+IC0JaWYgKHJldCAhPSAwKQo+IC0J CWNvbm5lY3Rvci0+ZHBtcyA9IG9sZF9tb2RlOwo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAt aW50IGRybV9hdG9taWNfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSwKPiAtCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iaiwKPiAtCQkJICAgIHN0cnVj dCBkcm1fcHJvcGVydHkgKnByb3AsCj4gLQkJCSAgICB1aW50NjRfdCBwcm9wX3ZhbHVlKQo+IC17 Cj4gLQlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpyZWY7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCWlm ICghZHJtX3Byb3BlcnR5X2NoYW5nZV92YWxpZF9nZXQocHJvcCwgcHJvcF92YWx1ZSwgJnJlZikp Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQo+IC0Jc3dpdGNoIChvYmotPnR5cGUpIHsKPiAtCWNh c2UgRFJNX01PREVfT0JKRUNUX0NPTk5FQ1RPUjogewo+IC0JCXN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IgPSBvYmpfdG9fY29ubmVjdG9yKG9iaik7Cj4gLQkJc3RydWN0IGRybV9jb25u ZWN0b3Jfc3RhdGUgKmNvbm5lY3Rvcl9zdGF0ZTsKPiAtCj4gLQkJY29ubmVjdG9yX3N0YXRlID0g ZHJtX2F0b21pY19nZXRfY29ubmVjdG9yX3N0YXRlKHN0YXRlLCBjb25uZWN0b3IpOwo+IC0JCWlm IChJU19FUlIoY29ubmVjdG9yX3N0YXRlKSkgewo+IC0JCQlyZXQgPSBQVFJfRVJSKGNvbm5lY3Rv cl9zdGF0ZSk7Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiAtCj4gLQkJcmV0ID0gZHJtX2F0b21pY19j b25uZWN0b3Jfc2V0X3Byb3BlcnR5KGNvbm5lY3RvciwKPiAtCQkJCWNvbm5lY3Rvcl9zdGF0ZSwg cHJvcCwgcHJvcF92YWx1ZSk7Cj4gLQkJYnJlYWs7Cj4gLQl9Cj4gLQljYXNlIERSTV9NT0RFX09C SkVDVF9DUlRDOiB7Cj4gLQkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gb2JqX3RvX2NydGMob2Jq KTsKPiAtCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gLQo+IC0JCWNydGNf c3RhdGUgPSBkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLCBjcnRjKTsKPiAtCQlpZiAo SVNfRVJSKGNydGNfc3RhdGUpKSB7Cj4gLQkJCXJldCA9IFBUUl9FUlIoY3J0Y19zdGF0ZSk7Cj4g LQkJCWJyZWFrOwo+IC0JCX0KPiAtCj4gLQkJcmV0ID0gZHJtX2F0b21pY19jcnRjX3NldF9wcm9w ZXJ0eShjcnRjLAo+IC0JCQkJY3J0Y19zdGF0ZSwgcHJvcCwgcHJvcF92YWx1ZSk7Cj4gLQkJYnJl YWs7Cj4gLQl9Cj4gLQljYXNlIERSTV9NT0RFX09CSkVDVF9QTEFORTogewo+IC0JCXN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lID0gb2JqX3RvX3BsYW5lKG9iaik7Cj4gLQkJc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGU7Cj4gLQo+IC0JCXBsYW5lX3N0YXRlID0gZHJtX2F0b21pY19n ZXRfcGxhbmVfc3RhdGUoc3RhdGUsIHBsYW5lKTsKPiAtCQlpZiAoSVNfRVJSKHBsYW5lX3N0YXRl KSkgewo+IC0JCQlyZXQgPSBQVFJfRVJSKHBsYW5lX3N0YXRlKTsKPiAtCQkJYnJlYWs7Cj4gLQkJ fQo+IC0KPiAtCQlyZXQgPSBkcm1fYXRvbWljX3BsYW5lX3NldF9wcm9wZXJ0eShwbGFuZSwKPiAt CQkJCXBsYW5lX3N0YXRlLCBwcm9wLCBwcm9wX3ZhbHVlKTsKPiAtCQlicmVhazsKPiAtCX0KPiAt CWRlZmF1bHQ6Cj4gLQkJcmV0ID0gLUVJTlZBTDsKPiAtCQlicmVhazsKPiAtCX0KPiAtCj4gLQlk cm1fcHJvcGVydHlfY2hhbmdlX3ZhbGlkX3B1dChwcm9wLCByZWYpOwo+IC0JcmV0dXJuIHJldDsK PiAtfQo+IC0KPiAtLyoqCj4gLSAqIERPQzogZXhwbGljaXQgZmVuY2luZyBwcm9wZXJ0aWVzCj4g LSAqCj4gLSAqIEV4cGxpY2l0IGZlbmNpbmcgYWxsb3dzIHVzZXJzcGFjZSB0byBjb250cm9sIHRo ZSBidWZmZXIgc3luY2hyb25pemF0aW9uCj4gLSAqIGJldHdlZW4gZGV2aWNlcy4gQSBGZW5jZSBv ciBhIGdyb3VwIG9mIGZlbmNlcyBhcmUgdHJhbnNmZXJlZCB0by9mcm9tCj4gLSAqIHVzZXJzcGFj ZSB1c2luZyBTeW5jIEZpbGUgZmRzIGFuZCB0aGVyZSBhcmUgdHdvIERSTSBwcm9wZXJ0aWVzIGZv ciB0aGF0Lgo+IC0gKiBJTl9GRU5DRV9GRCBvbiBlYWNoIERSTSBQbGFuZSB0byBzZW5kIGZlbmNl cyB0byB0aGUga2VybmVsIGFuZAo+IC0gKiBPVVRfRkVOQ0VfUFRSIG9uIGVhY2ggRFJNIENSVEMg dG8gcmVjZWl2ZSBmZW5jZXMgZnJvbSB0aGUga2VybmVsLgo+IC0gKgo+IC0gKiBBcyBhIGNvbnRy YXN0LCB3aXRoIGltcGxpY2l0IGZlbmNpbmcgdGhlIGtlcm5lbCBrZWVwcyB0cmFjayBvZiBhbnkK PiAtICogb25nb2luZyByZW5kZXJpbmcsIGFuZCBhdXRvbWF0aWNhbGx5IGVuc3VyZXMgdGhhdCB0 aGUgYXRvbWljIHVwZGF0ZSB3YWl0cwo+IC0gKiBmb3IgYW55IHBlbmRpbmcgcmVuZGVyaW5nIHRv IGNvbXBsZXRlLiBGb3Igc2hhcmVkIGJ1ZmZlcnMgcmVwcmVzZW50ZWQgd2l0aAo+IC0gKiBhICZz dHJ1Y3QgZG1hX2J1ZiB0aGlzIGlzIHRyYWNrZWQgaW4gJnN0cnVjdCByZXNlcnZhdGlvbl9vYmpl Y3QuCj4gLSAqIEltcGxpY2l0IHN5bmNpbmcgaXMgaG93IExpbnV4IHRyYWRpdGlvbmFsbHkgd29y a2VkIChlLmcuIERSSTIvMyBvbiBYLm9yZyksCj4gLSAqIHdoZXJlYXMgZXhwbGljaXQgZmVuY2lu ZyBpcyB3aGF0IEFuZHJvaWQgd2FudHMuCj4gLSAqCj4gLSAqICJJTl9GRU5DRV9GROKAnToKPiAt ICoJVXNlIHRoaXMgcHJvcGVydHkgdG8gcGFzcyBhIGZlbmNlIHRoYXQgRFJNIHNob3VsZCB3YWl0 IG9uIGJlZm9yZQo+IC0gKglwcm9jZWVkaW5nIHdpdGggdGhlIEF0b21pYyBDb21taXQgcmVxdWVz dCBhbmQgc2hvdyB0aGUgZnJhbWVidWZmZXIgZm9yCj4gLSAqCXRoZSBwbGFuZSBvbiB0aGUgc2Ny ZWVuLiBUaGUgZmVuY2UgY2FuIGJlIGVpdGhlciBhIG5vcm1hbCBmZW5jZSBvciBhCj4gLSAqCW1l cmdlZCBvbmUsIHRoZSBzeW5jX2ZpbGUgZnJhbWV3b3JrIHdpbGwgaGFuZGxlIGJvdGggY2FzZXMg YW5kIHVzZSBhCj4gLSAqCWZlbmNlX2FycmF5IGlmIGEgbWVyZ2VkIGZlbmNlIGlzIHJlY2VpdmVk LiBQYXNzaW5nIC0xIGhlcmUgbWVhbnMgbm8KPiAtICoJZmVuY2VzIHRvIHdhaXQgb24uCj4gLSAq Cj4gLSAqCUlmIHRoZSBBdG9taWMgQ29tbWl0IHJlcXVlc3QgaGFzIHRoZSBEUk1fTU9ERV9BVE9N SUNfVEVTVF9PTkxZIGZsYWcKPiAtICoJaXQgd2lsbCBvbmx5IGNoZWNrIGlmIHRoZSBTeW5jIEZp bGUgaXMgYSB2YWxpZCBvbmUuCj4gLSAqCj4gLSAqCU9uIHRoZSBkcml2ZXIgc2lkZSB0aGUgZmVu Y2UgaXMgc3RvcmVkIG9uIHRoZSBAZmVuY2UgcGFyYW1ldGVyIG9mCj4gLSAqCSZzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlLiBEcml2ZXJzIHdoaWNoIGFsc28gc3VwcG9ydCBpbXBsaWNpdCBmZW5jaW5n Cj4gLSAqCXNob3VsZCBzZXQgdGhlIGltcGxpY2l0IGZlbmNlIHVzaW5nIGRybV9hdG9taWNfc2V0 X2ZlbmNlX2Zvcl9wbGFuZSgpLAo+IC0gKgl0byBtYWtlIHN1cmUgdGhlcmUncyBjb25zaXN0ZW50 IGJlaGF2aW91ciBiZXR3ZWVuIGRyaXZlcnMgaW4gcHJlY2VkZW5jZQo+IC0gKglvZiBpbXBsaWNp dCB2cy4gZXhwbGljaXQgZmVuY2luZy4KPiAtICoKPiAtICogIk9VVF9GRU5DRV9QVFLigJ06Cj4g LSAqCVVzZSB0aGlzIHByb3BlcnR5IHRvIHBhc3MgYSBmaWxlIGRlc2NyaXB0b3IgcG9pbnRlciB0 byBEUk0uIE9uY2UgdGhlCj4gLSAqCUF0b21pYyBDb21taXQgcmVxdWVzdCBjYWxsIHJldHVybnMg T1VUX0ZFTkNFX1BUUiB3aWxsIGJlIGZpbGxlZCB3aXRoCj4gLSAqCXRoZSBmaWxlIGRlc2NyaXB0 b3IgbnVtYmVyIG9mIGEgU3luYyBGaWxlLiBUaGlzIFN5bmMgRmlsZSBjb250YWlucyB0aGUKPiAt ICoJQ1JUQyBmZW5jZSB0aGF0IHdpbGwgYmUgc2lnbmFsZWQgd2hlbiBhbGwgZnJhbWVidWZmZXJz IHByZXNlbnQgb24gdGhlCj4gLSAqCUF0b21pYyBDb21taXQgKiByZXF1ZXN0IGZvciB0aGF0IGdp dmVuIENSVEMgYXJlIHNjYW5uZWQgb3V0IG9uIHRoZQo+IC0gKglzY3JlZW4uCj4gLSAqCj4gLSAq CVRoZSBBdG9taWMgQ29tbWl0IHJlcXVlc3QgZmFpbHMgaWYgYSBpbnZhbGlkIHBvaW50ZXIgaXMg cGFzc2VkLiBJZiB0aGUKPiAtICoJQXRvbWljIENvbW1pdCByZXF1ZXN0IGZhaWxzIGZvciBhbnkg b3RoZXIgcmVhc29uIHRoZSBvdXQgZmVuY2UgZmQKPiAtICoJcmV0dXJuZWQgd2lsbCBiZSAtMS4g T24gYSBBdG9taWMgQ29tbWl0IHdpdGggdGhlCj4gLSAqCURSTV9NT0RFX0FUT01JQ19URVNUX09O TFkgZmxhZyB0aGUgb3V0IGZlbmNlIHdpbGwgYWxzbyBiZSBzZXQgdG8gLTEuCj4gLSAqCj4gLSAq CU5vdGUgdGhhdCBvdXQtZmVuY2VzIGRvbid0IGhhdmUgYSBzcGVjaWFsIGludGVyZmFjZSB0byBk cml2ZXJzIGFuZCBhcmUKPiAtICoJaW50ZXJuYWxseSByZXByZXNlbnRlZCBieSBhICZzdHJ1Y3Qg ZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50IGluIHN0cnVjdAo+IC0gKgkmZHJtX2NydGNfc3RhdGUs IHdoaWNoIGlzIGFsc28gdXNlZCBieSB0aGUgbm9uYmxvY2tpbmcgYXRvbWljIGNvbW1pdAo+IC0g KgloZWxwZXJzIGFuZCBmb3IgdGhlIERSTSBldmVudCBoYW5kbGluZyBmb3IgZXhpc3RpbmcgdXNl cnNwYWNlLgo+IC0gKi8KPiAtCj4gLXN0cnVjdCBkcm1fb3V0X2ZlbmNlX3N0YXRlIHsKPiAtCXMz MiBfX3VzZXIgKm91dF9mZW5jZV9wdHI7Cj4gLQlzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGU7 Cj4gLQlpbnQgZmQ7Cj4gLX07Cj4gLQo+IC1zdGF0aWMgaW50IHNldHVwX291dF9mZW5jZShzdHJ1 Y3QgZHJtX291dF9mZW5jZV9zdGF0ZSAqZmVuY2Vfc3RhdGUsCj4gLQkJCSAgIHN0cnVjdCBkbWFf ZmVuY2UgKmZlbmNlKQo+IC17Cj4gLQlmZW5jZV9zdGF0ZS0+ZmQgPSBnZXRfdW51c2VkX2ZkX2Zs YWdzKE9fQ0xPRVhFQyk7Cj4gLQlpZiAoZmVuY2Vfc3RhdGUtPmZkIDwgMCkKPiAtCQlyZXR1cm4g ZmVuY2Vfc3RhdGUtPmZkOwo+IC0KPiAtCWlmIChwdXRfdXNlcihmZW5jZV9zdGF0ZS0+ZmQsIGZl bmNlX3N0YXRlLT5vdXRfZmVuY2VfcHRyKSkKPiAtCQlyZXR1cm4gLUVGQVVMVDsKPiAtCj4gLQlm ZW5jZV9zdGF0ZS0+c3luY19maWxlID0gc3luY19maWxlX2NyZWF0ZShmZW5jZSk7Cj4gLQlpZiAo IWZlbmNlX3N0YXRlLT5zeW5jX2ZpbGUpCj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4gLQo+IC0JcmV0 dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgcHJlcGFyZV9zaWduYWxpbmcoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKPiAtCQkJCSAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ IC0JCQkJICBzdHJ1Y3QgZHJtX21vZGVfYXRvbWljICphcmcsCj4gLQkJCQkgIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZV9wcml2LAo+IC0JCQkJICBzdHJ1Y3QgZHJtX291dF9mZW5jZV9zdGF0ZSAqKmZl bmNlX3N0YXRlLAo+IC0JCQkJICB1bnNpZ25lZCBpbnQgKm51bV9mZW5jZXMpCj4gLXsKPiAtCXN0 cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiAtCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZTsKPiAtCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uOwo+IC0Jc3RydWN0IGRybV9jb25uZWN0 b3Jfc3RhdGUgKmNvbm5fc3RhdGU7Cj4gLQlpbnQgaSwgYyA9IDAsIHJldDsKPiAtCj4gLQlpZiAo YXJnLT5mbGFncyAmIERSTV9NT0RFX0FUT01JQ19URVNUX09OTFkpCj4gLQkJcmV0dXJuIDA7Cj4g LQo+IC0JZm9yX2VhY2hfbmV3X2NydGNfaW5fc3RhdGUoc3RhdGUsIGNydGMsIGNydGNfc3RhdGUs IGkpIHsKPiAtCQlzMzIgX191c2VyICpmZW5jZV9wdHI7Cj4gLQo+IC0JCWZlbmNlX3B0ciA9IGdl dF9vdXRfZmVuY2VfZm9yX2NydGMoY3J0Y19zdGF0ZS0+c3RhdGUsIGNydGMpOwo+IC0KPiAtCQlp ZiAoYXJnLT5mbGFncyAmIERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCB8fCBmZW5jZV9wdHIpIHsK PiAtCQkJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZTsKPiAtCj4gLQkJCWUgPSBj cmVhdGVfdmJsYW5rX2V2ZW50KGNydGMsIGFyZy0+dXNlcl9kYXRhKTsKPiAtCQkJaWYgKCFlKQo+ IC0JCQkJcmV0dXJuIC1FTk9NRU07Cj4gLQo+IC0JCQljcnRjX3N0YXRlLT5ldmVudCA9IGU7Cj4g LQkJfQo+IC0KPiAtCQlpZiAoYXJnLT5mbGFncyAmIERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCkg ewo+IC0JCQlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICplID0gY3J0Y19zdGF0ZS0+ ZXZlbnQ7Cj4gLQo+IC0JCQlpZiAoIWZpbGVfcHJpdikKPiAtCQkJCWNvbnRpbnVlOwo+IC0KPiAt CQkJcmV0ID0gZHJtX2V2ZW50X3Jlc2VydmVfaW5pdChkZXYsIGZpbGVfcHJpdiwgJmUtPmJhc2Us Cj4gLQkJCQkJCSAgICAgJmUtPmV2ZW50LmJhc2UpOwo+IC0JCQlpZiAocmV0KSB7Cj4gLQkJCQlr ZnJlZShlKTsKPiAtCQkJCWNydGNfc3RhdGUtPmV2ZW50ID0gTlVMTDsKPiAtCQkJCXJldHVybiBy ZXQ7Cj4gLQkJCX0KPiAtCQl9Cj4gLQo+IC0JCWlmIChmZW5jZV9wdHIpIHsKPiAtCQkJc3RydWN0 IGRtYV9mZW5jZSAqZmVuY2U7Cj4gLQkJCXN0cnVjdCBkcm1fb3V0X2ZlbmNlX3N0YXRlICpmOwo+ IC0KPiAtCQkJZiA9IGtyZWFsbG9jKCpmZW5jZV9zdGF0ZSwgc2l6ZW9mKCoqZmVuY2Vfc3RhdGUp ICoKPiAtCQkJCSAgICAgKCpudW1fZmVuY2VzICsgMSksIEdGUF9LRVJORUwpOwo+IC0JCQlpZiAo IWYpCj4gLQkJCQlyZXR1cm4gLUVOT01FTTsKPiAtCj4gLQkJCW1lbXNldCgmZlsqbnVtX2ZlbmNl c10sIDAsIHNpemVvZigqZikpOwo+IC0KPiAtCQkJZlsqbnVtX2ZlbmNlc10ub3V0X2ZlbmNlX3B0 ciA9IGZlbmNlX3B0cjsKPiAtCQkJKmZlbmNlX3N0YXRlID0gZjsKPiAtCj4gLQkJCWZlbmNlID0g ZHJtX2NydGNfY3JlYXRlX2ZlbmNlKGNydGMpOwo+IC0JCQlpZiAoIWZlbmNlKQo+IC0JCQkJcmV0 dXJuIC1FTk9NRU07Cj4gLQo+IC0JCQlyZXQgPSBzZXR1cF9vdXRfZmVuY2UoJmZbKCpudW1fZmVu Y2VzKSsrXSwgZmVuY2UpOwo+IC0JCQlpZiAocmV0KSB7Cj4gLQkJCQlkbWFfZmVuY2VfcHV0KGZl bmNlKTsKPiAtCQkJCXJldHVybiByZXQ7Cj4gLQkJCX0KPiAtCj4gLQkJCWNydGNfc3RhdGUtPmV2 ZW50LT5iYXNlLmZlbmNlID0gZmVuY2U7Cj4gLQkJfQo+IC0KPiAtCQljKys7Cj4gLQl9Cj4gLQo+ IC0JZm9yX2VhY2hfbmV3X2Nvbm5lY3Rvcl9pbl9zdGF0ZShzdGF0ZSwgY29ubiwgY29ubl9zdGF0 ZSwgaSkgewo+IC0JCXN0cnVjdCBkcm1fd3JpdGViYWNrX2Nvbm5lY3RvciAqd2JfY29ubjsKPiAt CQlzdHJ1Y3QgZHJtX3dyaXRlYmFja19qb2IgKmpvYjsKPiAtCQlzdHJ1Y3QgZHJtX291dF9mZW5j ZV9zdGF0ZSAqZjsKPiAtCQlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKPiAtCQlzMzIgX191c2Vy ICpmZW5jZV9wdHI7Cj4gLQo+IC0JCWZlbmNlX3B0ciA9IGdldF9vdXRfZmVuY2VfZm9yX2Nvbm5l Y3RvcihzdGF0ZSwgY29ubik7Cj4gLQkJaWYgKCFmZW5jZV9wdHIpCj4gLQkJCWNvbnRpbnVlOwo+ IC0KPiAtCQlqb2IgPSBkcm1fYXRvbWljX2dldF93cml0ZWJhY2tfam9iKGNvbm5fc3RhdGUpOwo+ IC0JCWlmICgham9iKQo+IC0JCQlyZXR1cm4gLUVOT01FTTsKPiAtCj4gLQkJZiA9IGtyZWFsbG9j KCpmZW5jZV9zdGF0ZSwgc2l6ZW9mKCoqZmVuY2Vfc3RhdGUpICoKPiAtCQkJICAgICAoKm51bV9m ZW5jZXMgKyAxKSwgR0ZQX0tFUk5FTCk7Cj4gLQkJaWYgKCFmKQo+IC0JCQlyZXR1cm4gLUVOT01F TTsKPiAtCj4gLQkJbWVtc2V0KCZmWypudW1fZmVuY2VzXSwgMCwgc2l6ZW9mKCpmKSk7Cj4gLQo+ IC0JCWZbKm51bV9mZW5jZXNdLm91dF9mZW5jZV9wdHIgPSBmZW5jZV9wdHI7Cj4gLQkJKmZlbmNl X3N0YXRlID0gZjsKPiAtCj4gLQkJd2JfY29ubiA9IGRybV9jb25uZWN0b3JfdG9fd3JpdGViYWNr KGNvbm4pOwo+IC0JCWZlbmNlID0gZHJtX3dyaXRlYmFja19nZXRfb3V0X2ZlbmNlKHdiX2Nvbm4p Owo+IC0JCWlmICghZmVuY2UpCj4gLQkJCXJldHVybiAtRU5PTUVNOwo+IC0KPiAtCQlyZXQgPSBz ZXR1cF9vdXRfZmVuY2UoJmZbKCpudW1fZmVuY2VzKSsrXSwgZmVuY2UpOwo+IC0JCWlmIChyZXQp IHsKPiAtCQkJZG1hX2ZlbmNlX3B1dChmZW5jZSk7Cj4gLQkJCXJldHVybiByZXQ7Cj4gLQkJfQo+ IC0KPiAtCQlqb2ItPm91dF9mZW5jZSA9IGZlbmNlOwo+IC0JfQo+IC0KPiAtCS8qCj4gLQkgKiBI YXZpbmcgdGhpcyBmbGFnIG1lYW5zIHVzZXIgbW9kZSBwZW5kcyBvbiBldmVudCB3aGljaCB3aWxs IG5ldmVyCj4gLQkgKiByZWFjaCBkdWUgdG8gbGFjayBvZiBhdCBsZWFzdCBvbmUgQ1JUQyBmb3Ig c2lnbmFsaW5nCj4gLQkgKi8KPiAtCWlmIChjID09IDAgJiYgKGFyZy0+ZmxhZ3MgJiBEUk1fTU9E RV9QQUdFX0ZMSVBfRVZFTlQpKQo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0KPiAtCXJldHVybiAw Owo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBjb21wbGV0ZV9zaWduYWxpbmcoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKPiAtCQkJICAgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwK PiAtCQkJICAgICAgIHN0cnVjdCBkcm1fb3V0X2ZlbmNlX3N0YXRlICpmZW5jZV9zdGF0ZSwKPiAt CQkJICAgICAgIHVuc2lnbmVkIGludCBudW1fZmVuY2VzLAo+IC0JCQkgICAgICAgYm9vbCBpbnN0 YWxsX2ZkcykKPiAtewo+IC0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwo+IC0Jc3RydWN0IGRybV9j cnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+IC0JaW50IGk7Cj4gLQo+IC0JaWYgKGluc3RhbGxfZmRz KSB7Cj4gLQkJZm9yIChpID0gMDsgaSA8IG51bV9mZW5jZXM7IGkrKykKPiAtCQkJZmRfaW5zdGFs bChmZW5jZV9zdGF0ZVtpXS5mZCwKPiAtCQkJCSAgIGZlbmNlX3N0YXRlW2ldLnN5bmNfZmlsZS0+ ZmlsZSk7Cj4gLQo+IC0JCWtmcmVlKGZlbmNlX3N0YXRlKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4g LQo+IC0JZm9yX2VhY2hfbmV3X2NydGNfaW5fc3RhdGUoc3RhdGUsIGNydGMsIGNydGNfc3RhdGUs IGkpIHsKPiAtCQlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudCA9IGNydGNf c3RhdGUtPmV2ZW50Owo+IC0JCS8qCj4gLQkJICogRnJlZSB0aGUgYWxsb2NhdGVkIGV2ZW50LiBk cm1fYXRvbWljX2hlbHBlcl9zZXR1cF9jb21taXQKPiAtCQkgKiBjYW4gYWxsb2NhdGUgYW4gZXZl bnQgdG9vLCBzbyBvbmx5IGZyZWUgaXQgaWYgaXQncyBvdXJzCj4gLQkJICogdG8gcHJldmVudCBh IGRvdWJsZSBmcmVlIGluIGRybV9hdG9taWNfc3RhdGVfY2xlYXIuCj4gLQkJICovCj4gLQkJaWYg KGV2ZW50ICYmIChldmVudC0+YmFzZS5mZW5jZSB8fCBldmVudC0+YmFzZS5maWxlX3ByaXYpKSB7 Cj4gLQkJCWRybV9ldmVudF9jYW5jZWxfZnJlZShkZXYsICZldmVudC0+YmFzZSk7Cj4gLQkJCWNy dGNfc3RhdGUtPmV2ZW50ID0gTlVMTDsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JaWYgKCFmZW5jZV9z dGF0ZSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IG51bV9mZW5jZXM7IGkr Kykgewo+IC0JCWlmIChmZW5jZV9zdGF0ZVtpXS5zeW5jX2ZpbGUpCj4gLQkJCWZwdXQoZmVuY2Vf c3RhdGVbaV0uc3luY19maWxlLT5maWxlKTsKPiAtCQlpZiAoZmVuY2Vfc3RhdGVbaV0uZmQgPj0g MCkKPiAtCQkJcHV0X3VudXNlZF9mZChmZW5jZV9zdGF0ZVtpXS5mZCk7Cj4gLQo+IC0JCS8qIElm IHRoaXMgZmFpbHMgbG9nIGVycm9yIHRvIHRoZSB1c2VyICovCj4gLQkJaWYgKGZlbmNlX3N0YXRl W2ldLm91dF9mZW5jZV9wdHIgJiYKPiAtCQkgICAgcHV0X3VzZXIoLTEsIGZlbmNlX3N0YXRlW2ld Lm91dF9mZW5jZV9wdHIpKQo+IC0JCQlEUk1fREVCVUdfQVRPTUlDKCJDb3VsZG4ndCBjbGVhciBv dXRfZmVuY2VfcHRyXG4iKTsKPiAtCX0KPiAtCj4gLQlrZnJlZShmZW5jZV9zdGF0ZSk7Cj4gLX0K PiAtCj4gLWludCBkcm1fbW9kZV9hdG9taWNfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK PiAtCQkJICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKPiAtewo+IC0J c3RydWN0IGRybV9tb2RlX2F0b21pYyAqYXJnID0gZGF0YTsKPiAtCXVpbnQzMl90IF9fdXNlciAq b2Jqc19wdHIgPSAodWludDMyX3QgX191c2VyICopKHVuc2lnbmVkIGxvbmcpKGFyZy0+b2Jqc19w dHIpOwo+IC0JdWludDMyX3QgX191c2VyICpjb3VudF9wcm9wc19wdHIgPSAodWludDMyX3QgX191 c2VyICopKHVuc2lnbmVkIGxvbmcpKGFyZy0+Y291bnRfcHJvcHNfcHRyKTsKPiAtCXVpbnQzMl90 IF9fdXNlciAqcHJvcHNfcHRyID0gKHVpbnQzMl90IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKShh cmctPnByb3BzX3B0cik7Cj4gLQl1aW50NjRfdCBfX3VzZXIgKnByb3BfdmFsdWVzX3B0ciA9ICh1 aW50NjRfdCBfX3VzZXIgKikodW5zaWduZWQgbG9uZykoYXJnLT5wcm9wX3ZhbHVlc19wdHIpOwo+ IC0JdW5zaWduZWQgaW50IGNvcGllZF9vYmpzLCBjb3BpZWRfcHJvcHM7Cj4gLQlzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGU7Cj4gLQlzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHgg Y3R4Owo+IC0Jc3RydWN0IGRybV9vdXRfZmVuY2Vfc3RhdGUgKmZlbmNlX3N0YXRlOwo+IC0JaW50 IHJldCA9IDA7Cj4gLQl1bnNpZ25lZCBpbnQgaSwgaiwgbnVtX2ZlbmNlczsKPiAtCj4gLQkvKiBk aXNhbGxvdyBmb3IgZHJpdmVycyBub3Qgc3VwcG9ydGluZyBhdG9taWM6ICovCj4gLQlpZiAoIWRy bV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfQVRPTUlDKSkKPiAtCQlyZXR1cm4gLUVJ TlZBTDsKPiAtCj4gLQkvKiBkaXNhbGxvdyBmb3IgdXNlcnNwYWNlIHRoYXQgaGFzIG5vdCBlbmFi bGVkIGF0b21pYyBjYXAgKGV2ZW4KPiAtCSAqIHRob3VnaCB0aGlzIG1heSBiZSBhIGJpdCBvdmVy a2lsbCwgc2luY2UgbGVnYWN5IHVzZXJzcGFjZQo+IC0JICogd291bGRuJ3Qga25vdyBob3cgdG8g Y2FsbCB0aGlzIGlvY3RsKQo+IC0JICovCj4gLQlpZiAoIWZpbGVfcHJpdi0+YXRvbWljKQo+IC0J CXJldHVybiAtRUlOVkFMOwo+IC0KPiAtCWlmIChhcmctPmZsYWdzICYgfkRSTV9NT0RFX0FUT01J Q19GTEFHUykKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4gLQlpZiAoYXJnLT5yZXNlcnZlZCkK PiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4gLQlpZiAoKGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9Q QUdFX0ZMSVBfQVNZTkMpICYmCj4gLQkJCSFkZXYtPm1vZGVfY29uZmlnLmFzeW5jX3BhZ2VfZmxp cCkKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4gLQkvKiBjYW4ndCB0ZXN0IGFuZCBleHBlY3Qg YW4gZXZlbnQgYXQgdGhlIHNhbWUgdGltZS4gKi8KPiAtCWlmICgoYXJnLT5mbGFncyAmIERSTV9N T0RFX0FUT01JQ19URVNUX09OTFkpICYmCj4gLQkJCShhcmctPmZsYWdzICYgRFJNX01PREVfUEFH RV9GTElQX0VWRU5UKSkKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4gLQlkcm1fbW9kZXNldF9h Y3F1aXJlX2luaXQoJmN0eCwgRFJNX01PREVTRVRfQUNRVUlSRV9JTlRFUlJVUFRJQkxFKTsKPiAt Cj4gLQlzdGF0ZSA9IGRybV9hdG9taWNfc3RhdGVfYWxsb2MoZGV2KTsKPiAtCWlmICghc3RhdGUp Cj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4gLQo+IC0Jc3RhdGUtPmFjcXVpcmVfY3R4ID0gJmN0eDsK PiAtCXN0YXRlLT5hbGxvd19tb2Rlc2V0ID0gISEoYXJnLT5mbGFncyAmIERSTV9NT0RFX0FUT01J Q19BTExPV19NT0RFU0VUKTsKPiAtCj4gLXJldHJ5Ogo+IC0JY29waWVkX29ianMgPSAwOwo+IC0J Y29waWVkX3Byb3BzID0gMDsKPiAtCWZlbmNlX3N0YXRlID0gTlVMTDsKPiAtCW51bV9mZW5jZXMg PSAwOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBhcmctPmNvdW50X29ianM7IGkrKykgewo+IC0J CXVpbnQzMl90IG9ial9pZCwgY291bnRfcHJvcHM7Cj4gLQkJc3RydWN0IGRybV9tb2RlX29iamVj dCAqb2JqOwo+IC0KPiAtCQlpZiAoZ2V0X3VzZXIob2JqX2lkLCBvYmpzX3B0ciArIGNvcGllZF9v YmpzKSkgewo+IC0JCQlyZXQgPSAtRUZBVUxUOwo+IC0JCQlnb3RvIG91dDsKPiAtCQl9Cj4gLQo+ IC0JCW9iaiA9IGRybV9tb2RlX29iamVjdF9maW5kKGRldiwgZmlsZV9wcml2LCBvYmpfaWQsIERS TV9NT0RFX09CSkVDVF9BTlkpOwo+IC0JCWlmICghb2JqKSB7Cj4gLQkJCXJldCA9IC1FTk9FTlQ7 Cj4gLQkJCWdvdG8gb3V0Owo+IC0JCX0KPiAtCj4gLQkJaWYgKCFvYmotPnByb3BlcnRpZXMpIHsK PiAtCQkJZHJtX21vZGVfb2JqZWN0X3B1dChvYmopOwo+IC0JCQlyZXQgPSAtRU5PRU5UOwo+IC0J CQlnb3RvIG91dDsKPiAtCQl9Cj4gLQo+IC0JCWlmIChnZXRfdXNlcihjb3VudF9wcm9wcywgY291 bnRfcHJvcHNfcHRyICsgY29waWVkX29ianMpKSB7Cj4gLQkJCWRybV9tb2RlX29iamVjdF9wdXQo b2JqKTsKPiAtCQkJcmV0ID0gLUVGQVVMVDsKPiAtCQkJZ290byBvdXQ7Cj4gLQkJfQo+IC0KPiAt CQljb3BpZWRfb2JqcysrOwo+IC0KPiAtCQlmb3IgKGogPSAwOyBqIDwgY291bnRfcHJvcHM7IGor Kykgewo+IC0JCQl1aW50MzJfdCBwcm9wX2lkOwo+IC0JCQl1aW50NjRfdCBwcm9wX3ZhbHVlOwo+ IC0JCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wOwo+IC0KPiAtCQkJaWYgKGdldF91c2VyKHBy b3BfaWQsIHByb3BzX3B0ciArIGNvcGllZF9wcm9wcykpIHsKPiAtCQkJCWRybV9tb2RlX29iamVj dF9wdXQob2JqKTsKPiAtCQkJCXJldCA9IC1FRkFVTFQ7Cj4gLQkJCQlnb3RvIG91dDsKPiAtCQkJ fQo+IC0KPiAtCQkJcHJvcCA9IGRybV9tb2RlX29ial9maW5kX3Byb3BfaWQob2JqLCBwcm9wX2lk KTsKPiAtCQkJaWYgKCFwcm9wKSB7Cj4gLQkJCQlkcm1fbW9kZV9vYmplY3RfcHV0KG9iaik7Cj4g LQkJCQlyZXQgPSAtRU5PRU5UOwo+IC0JCQkJZ290byBvdXQ7Cj4gLQkJCX0KPiAtCj4gLQkJCWlm IChjb3B5X2Zyb21fdXNlcigmcHJvcF92YWx1ZSwKPiAtCQkJCQkgICBwcm9wX3ZhbHVlc19wdHIg KyBjb3BpZWRfcHJvcHMsCj4gLQkJCQkJICAgc2l6ZW9mKHByb3BfdmFsdWUpKSkgewo+IC0JCQkJ ZHJtX21vZGVfb2JqZWN0X3B1dChvYmopOwo+IC0JCQkJcmV0ID0gLUVGQVVMVDsKPiAtCQkJCWdv dG8gb3V0Owo+IC0JCQl9Cj4gLQo+IC0JCQlyZXQgPSBkcm1fYXRvbWljX3NldF9wcm9wZXJ0eShz dGF0ZSwgb2JqLCBwcm9wLAo+IC0JCQkJCQkgICAgICBwcm9wX3ZhbHVlKTsKPiAtCQkJaWYgKHJl dCkgewo+IC0JCQkJZHJtX21vZGVfb2JqZWN0X3B1dChvYmopOwo+IC0JCQkJZ290byBvdXQ7Cj4g LQkJCX0KPiAtCj4gLQkJCWNvcGllZF9wcm9wcysrOwo+IC0JCX0KPiAtCj4gLQkJZHJtX21vZGVf b2JqZWN0X3B1dChvYmopOwo+IC0JfQo+IC0KPiAtCXJldCA9IHByZXBhcmVfc2lnbmFsaW5nKGRl diwgc3RhdGUsIGFyZywgZmlsZV9wcml2LCAmZmVuY2Vfc3RhdGUsCj4gLQkJCQkmbnVtX2ZlbmNl cyk7Cj4gLQlpZiAocmV0KQo+IC0JCWdvdG8gb3V0Owo+IC0KPiAtCWlmIChhcmctPmZsYWdzICYg RFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSkgewo+IC0JCXJldCA9IGRybV9hdG9taWNfY2hlY2tf b25seShzdGF0ZSk7Cj4gLQl9IGVsc2UgaWYgKGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9BVE9NSUNf Tk9OQkxPQ0spIHsKPiAtCQlyZXQgPSBkcm1fYXRvbWljX25vbmJsb2NraW5nX2NvbW1pdChzdGF0 ZSk7Cj4gLQl9IGVsc2Ugewo+IC0JCWlmICh1bmxpa2VseShkcm1fZGVidWcgJiBEUk1fVVRfU1RB VEUpKQo+IC0JCQlkcm1fYXRvbWljX3ByaW50X3N0YXRlKHN0YXRlKTsKPiAtCj4gLQkJcmV0ID0g ZHJtX2F0b21pY19jb21taXQoc3RhdGUpOwo+IC0JfQo+IC0KPiAtb3V0Ogo+IC0JY29tcGxldGVf c2lnbmFsaW5nKGRldiwgc3RhdGUsIGZlbmNlX3N0YXRlLCBudW1fZmVuY2VzLCAhcmV0KTsKPiAt Cj4gLQlpZiAocmV0ID09IC1FREVBRExLKSB7Cj4gLQkJZHJtX2F0b21pY19zdGF0ZV9jbGVhcihz dGF0ZSk7Cj4gLQkJcmV0ID0gZHJtX21vZGVzZXRfYmFja29mZigmY3R4KTsKPiAtCQlpZiAoIXJl dCkKPiAtCQkJZ290byByZXRyeTsKPiAtCX0KPiAtCj4gLQlkcm1fYXRvbWljX3N0YXRlX3B1dChz dGF0ZSk7Cj4gLQo+IC0JZHJtX21vZGVzZXRfZHJvcF9sb2NrcygmY3R4KTsKPiAtCWRybV9tb2Rl c2V0X2FjcXVpcmVfZmluaSgmY3R4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jIGIvZHJpdmVycy9ncHUv ZHJtL2RybV9hdG9taWNfaGVscGVyLmMKPiBpbmRleCBkYWEwNGQyOWY4Y2MuLjg0NjlhN2U5YWZl MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jCj4gQEAgLTI3LDYgKzI3LDcg QEAKPiAgCj4gICNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9hdG9t aWMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX3VhcGkuaD4KPiAgI2luY2x1ZGUgPGRy bS9kcm1fcGxhbmVfaGVscGVyLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+ Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2RybV9hdG9taWNfdWFwaS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9t aWNfdWFwaS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjI2 NjkwYTY2NGVjNgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0 b21pY191YXBpLmMKPiBAQCAtMCwwICsxLDEzOTMgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChD KSAyMDE0IFJlZCBIYXQKPiArICogQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnAuCj4gKyAq IENvcHlyaWdodCAoQykgMjAxOCBJbnRlbCBDb3JwLgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoK PiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KPiArICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4g KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIENPUFlS SUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SCj4gKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAo+ICsgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPiArICogT1RIRVIg REVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKTWF5YmUgc3RhcnQgYSBuZXcgZmlsZSB3aXRoIFNQ RFggaWRlbnRpZmllcj8KCkkgbGlrZSB0aGUgaWRlYSBvZiB0aGlzIHNwbGl0Li4uCgpBY2tlZC1i eTogUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwuY29tPgoKPiArICoKPiArICogQXV0 aG9yczoKPiArICogUm9iIENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgo+ICsgKiBEYW5pZWwg VmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxk cm0vZHJtX2F0b21pY191YXBpLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgo+ICsj aW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4KPiAr I2luY2x1ZGUgPGRybS9kcm1fd3JpdGViYWNrLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3ZibGFu ay5oPgo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1mZW5jZS5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvdWFjY2Vzcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvc3luY19maWxlLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9maWxlLmg+Cj4gKwo+ICsjaW5jbHVkZSAiZHJtX2NydGNfaW50ZXJuYWwuaCIKPiAr Cj4gKy8qKgo+ICsgKiBET0M6IG92ZXJ2aWV3Cj4gKyAqCj4gKyAqIFRoaXMgZmlsZSBjb250YWlu cyB0aGUgbWFyc2hhbGxpbmcgYW5kIGRlbWFyc2hhbGxpbmcgZ2x1ZSBmb3IgdGhlIGF0b21pYyBV QVBJCj4gKyAqIGluIGFsbCBpdCdzIGZvcm06IFRoZSBtb25zdGVyIEFUT01JQyBJT0NUTCBpdHNl bGYsIGNvZGUgZm9yIEdFVF9QUk9QRVJUWSBhbmQKPiArICogU0VUX1BST1BFUlRZIElPQ1Rscy4g UGx1cyBpbnRlcmZhY2UgZnVuY3Rpb25zIGZvciBjb21wYXRpYmlsaXR5IGhlbHBlcnMgYW5kCj4g KyAqIGRyaXZlcnMgd2hpY2ggaGF2ZSBzcGVjaWFsIG5lZWRzIHRvIGNvbnN0cnVjdCB0aGVpciBv d24gYXRvbWljIHVwZGF0ZXMsIGUuZy4KPiArICogZm9yIGxvYWQgZGV0ZWN0IG9yIHNpbWlsaWFy Lgo+ICsgKi8KPiArCj4gKy8qKgo+ICsgKiBkcm1fYXRvbWljX3NldF9tb2RlX2Zvcl9jcnRjIC0g c2V0IG1vZGUgZm9yIENSVEMKPiArICogQHN0YXRlOiB0aGUgQ1JUQyB3aG9zZSBpbmNvbWluZyBz dGF0ZSB0byB1cGRhdGUKPiArICogQG1vZGU6IGtlcm5lbC1pbnRlcm5hbCBtb2RlIHRvIHVzZSBm b3IgdGhlIENSVEMsIG9yIE5VTEwgdG8gZGlzYWJsZQo+ICsgKgo+ICsgKiBTZXQgYSBtb2RlIChv cmlnaW5hdGluZyBmcm9tIHRoZSBrZXJuZWwpIG9uIHRoZSBkZXNpcmVkIENSVEMgc3RhdGUgYW5k IHVwZGF0ZQo+ICsgKiB0aGUgZW5hYmxlIHByb3BlcnR5Lgo+ICsgKgo+ICsgKiBSRVRVUk5TOgo+ ICsgKiBaZXJvIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZS4gQ2Fubm90IHJldHVy biAtRURFQURMSy4KPiArICovCj4gK2ludCBkcm1fYXRvbWljX3NldF9tb2RlX2Zvcl9jcnRjKHN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsCj4gKwkJCQkgY29uc3Qgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHN0YXRlLT5j cnRjOwo+ICsJc3RydWN0IGRybV9tb2RlX21vZGVpbmZvIHVtb2RlOwo+ICsKPiArCS8qIEVhcmx5 IHJldHVybiBmb3Igbm8gY2hhbmdlLiAqLwo+ICsJaWYgKG1vZGUgJiYgbWVtY21wKCZzdGF0ZS0+ bW9kZSwgbW9kZSwgc2l6ZW9mKCptb2RlKSkgPT0gMCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlk cm1fcHJvcGVydHlfYmxvYl9wdXQoc3RhdGUtPm1vZGVfYmxvYik7Cj4gKwlzdGF0ZS0+bW9kZV9i bG9iID0gTlVMTDsKPiArCj4gKwlpZiAobW9kZSkgewo+ICsJCWRybV9tb2RlX2NvbnZlcnRfdG9f dW1vZGUoJnVtb2RlLCBtb2RlKTsKPiArCQlzdGF0ZS0+bW9kZV9ibG9iID0KPiArCQkJZHJtX3By b3BlcnR5X2NyZWF0ZV9ibG9iKHN0YXRlLT5jcnRjLT5kZXYsCj4gKwkJICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVtb2RlKSwKPiArCQkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmdW1vZGUpOwo+ICsJCWlmIChJU19FUlIoc3RhdGUtPm1vZGVfYmxvYikp Cj4gKwkJCXJldHVybiBQVFJfRVJSKHN0YXRlLT5tb2RlX2Jsb2IpOwo+ICsKPiArCQlkcm1fbW9k ZV9jb3B5KCZzdGF0ZS0+bW9kZSwgbW9kZSk7Cj4gKwkJc3RhdGUtPmVuYWJsZSA9IHRydWU7Cj4g KwkJRFJNX0RFQlVHX0FUT01JQygiU2V0IFtNT0RFOiVzXSBmb3IgW0NSVEM6JWQ6JXNdIHN0YXRl ICVwXG4iLAo+ICsJCQkJIG1vZGUtPm5hbWUsIGNydGMtPmJhc2UuaWQsIGNydGMtPm5hbWUsIHN0 YXRlKTsKPiArCX0gZWxzZSB7Cj4gKwkJbWVtc2V0KCZzdGF0ZS0+bW9kZSwgMCwgc2l6ZW9mKHN0 YXRlLT5tb2RlKSk7Cj4gKwkJc3RhdGUtPmVuYWJsZSA9IGZhbHNlOwo+ICsJCURSTV9ERUJVR19B VE9NSUMoIlNldCBbTk9NT0RFXSBmb3IgW0NSVEM6JWQ6JXNdIHN0YXRlICVwXG4iLAo+ICsJCQkJ IGNydGMtPmJhc2UuaWQsIGNydGMtPm5hbWUsIHN0YXRlKTsKPiArCX0KPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfc2V0X21vZGVfZm9yX2NydGMpOwo+ ICsKPiArLyoqCj4gKyAqIGRybV9hdG9taWNfc2V0X21vZGVfcHJvcF9mb3JfY3J0YyAtIHNldCBt b2RlIGZvciBDUlRDCj4gKyAqIEBzdGF0ZTogdGhlIENSVEMgd2hvc2UgaW5jb21pbmcgc3RhdGUg dG8gdXBkYXRlCj4gKyAqIEBibG9iOiBwb2ludGVyIHRvIGJsb2IgcHJvcGVydHkgdG8gdXNlIGZv ciBtb2RlCj4gKyAqCj4gKyAqIFNldCBhIG1vZGUgKG9yaWdpbmF0aW5nIGZyb20gYSBibG9iIHBy b3BlcnR5KSBvbiB0aGUgZGVzaXJlZCBDUlRDIHN0YXRlLgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHdp bGwgdGFrZSBhIHJlZmVyZW5jZSBvbiB0aGUgYmxvYiBwcm9wZXJ0eSBmb3IgdGhlIENSVEMgc3Rh dGUsCj4gKyAqIGFuZCByZWxlYXNlIHRoZSByZWZlcmVuY2UgaGVsZCBvbiB0aGUgc3RhdGUncyBl eGlzdGluZyBtb2RlIHByb3BlcnR5LCBpZiBhbnkKPiArICogd2FzIHNldC4KPiArICoKPiArICog UkVUVVJOUzoKPiArICogWmVybyBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmUuIENh bm5vdCByZXR1cm4gLUVERUFETEsuCj4gKyAqLwo+ICtpbnQgZHJtX2F0b21pY19zZXRfbW9kZV9w cm9wX2Zvcl9jcnRjKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpibG9i KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+Y3J0YzsKPiArCj4gKwlp ZiAoYmxvYiA9PSBzdGF0ZS0+bW9kZV9ibG9iKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWRybV9w cm9wZXJ0eV9ibG9iX3B1dChzdGF0ZS0+bW9kZV9ibG9iKTsKPiArCXN0YXRlLT5tb2RlX2Jsb2Ig PSBOVUxMOwo+ICsKPiArCW1lbXNldCgmc3RhdGUtPm1vZGUsIDAsIHNpemVvZihzdGF0ZS0+bW9k ZSkpOwo+ICsKPiArCWlmIChibG9iKSB7Cj4gKwkJaW50IHJldDsKPiArCj4gKwkJaWYgKGJsb2It Pmxlbmd0aCAhPSBzaXplb2Yoc3RydWN0IGRybV9tb2RlX21vZGVpbmZvKSkgewo+ICsJCQlEUk1f REVCVUdfQVRPTUlDKCJbQ1JUQzolZDolc10gYmFkIG1vZGUgYmxvYiBsZW5ndGg6ICV6dVxuIiwK PiArCQkJCQkgY3J0Yy0+YmFzZS5pZCwgY3J0Yy0+bmFtZSwKPiArCQkJCQkgYmxvYi0+bGVuZ3Ro KTsKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsKPiArCQlyZXQgPSBkcm1fbW9kZV9j b252ZXJ0X3Vtb2RlKGNydGMtPmRldiwKPiArCQkJCQkgICAgICZzdGF0ZS0+bW9kZSwgYmxvYi0+ ZGF0YSk7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlEUk1fREVCVUdfQVRPTUlDKCJbQ1JUQzolZDol c10gaW52YWxpZCBtb2RlIChyZXQ9JWQsIHN0YXR1cz0lcyk6XG4iLAo+ICsJCQkJCSBjcnRjLT5i YXNlLmlkLCBjcnRjLT5uYW1lLAo+ICsJCQkJCSByZXQsIGRybV9nZXRfbW9kZV9zdGF0dXNfbmFt ZShzdGF0ZS0+bW9kZS5zdGF0dXMpKTsKPiArCQkJZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGlu ZSgmc3RhdGUtPm1vZGUpOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwo+ICsJCXN0 YXRlLT5tb2RlX2Jsb2IgPSBkcm1fcHJvcGVydHlfYmxvYl9nZXQoYmxvYik7Cj4gKwkJc3RhdGUt PmVuYWJsZSA9IHRydWU7Cj4gKwkJRFJNX0RFQlVHX0FUT01JQygiU2V0IFtNT0RFOiVzXSBmb3Ig W0NSVEM6JWQ6JXNdIHN0YXRlICVwXG4iLAo+ICsJCQkJIHN0YXRlLT5tb2RlLm5hbWUsIGNydGMt PmJhc2UuaWQsIGNydGMtPm5hbWUsCj4gKwkJCQkgc3RhdGUpOwo+ICsJfSBlbHNlIHsKPiArCQlz dGF0ZS0+ZW5hYmxlID0gZmFsc2U7Cj4gKwkJRFJNX0RFQlVHX0FUT01JQygiU2V0IFtOT01PREVd IGZvciBbQ1JUQzolZDolc10gc3RhdGUgJXBcbiIsCj4gKwkJCQkgY3J0Yy0+YmFzZS5pZCwgY3J0 Yy0+bmFtZSwgc3RhdGUpOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gK0VYUE9SVF9T WU1CT0woZHJtX2F0b21pY19zZXRfbW9kZV9wcm9wX2Zvcl9jcnRjKTsKPiArCj4gKy8qKgo+ICsg KiBkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9wbGFuZSAtIHNldCBjcnRjIGZvciBwbGFuZQo+ICsg KiBAcGxhbmVfc3RhdGU6IHRoZSBwbGFuZSB3aG9zZSBpbmNvbWluZyBzdGF0ZSB0byB1cGRhdGUK PiArICogQGNydGM6IGNydGMgdG8gdXNlIGZvciB0aGUgcGxhbmUKPiArICoKPiArICogQ2hhbmdp bmcgdGhlIGFzc2lnbmVkIGNydGMgZm9yIGEgcGxhbmUgcmVxdWlyZXMgdXMgdG8gZ3JhYiB0aGUg bG9jayBhbmQgc3RhdGUKPiArICogZm9yIHRoZSBuZXcgY3J0YywgYXMgbmVlZGVkLiBUaGlzIGZ1 bmN0aW9uIHRha2VzIGNhcmUgb2YgYWxsIHRoZXNlIGRldGFpbHMKPiArICogYmVzaWRlcyB1cGRh dGluZyB0aGUgcG9pbnRlciBpbiB0aGUgc3RhdGUgb2JqZWN0IGl0c2VsZi4KPiArICoKPiArICog UmV0dXJuczoKPiArICogMCBvbiBzdWNjZXNzIG9yIGNhbiBmYWlsIHdpdGggLUVERUFETEsgb3Ig LUVOT01FTS4gV2hlbiB0aGUgZXJyb3IgaXMgRURFQURMSwo+ICsgKiB0aGVuIHRoZSB3L3cgbXV0 ZXggY29kZSBoYXMgZGV0ZWN0ZWQgYSBkZWFkbG9jayBhbmQgdGhlIGVudGlyZSBhdG9taWMKPiAr ICogc2VxdWVuY2UgbXVzdCBiZSByZXN0YXJ0ZWQuIEFsbCBvdGhlciBlcnJvcnMgYXJlIGZhdGFs Lgo+ICsgKi8KPiAraW50Cj4gK2RybV9hdG9taWNfc2V0X2NydGNfZm9yX3BsYW5lKHN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAo+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGMg KmNydGMpCj4gK3sKPiArCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gcGxhbmVfc3RhdGUtPnBs YW5lOwo+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ICsJLyogTm90aGlu ZyB0byBkbyBmb3Igc2FtZSBjcnRjKi8KPiArCWlmIChwbGFuZV9zdGF0ZS0+Y3J0YyA9PSBjcnRj KQo+ICsJCXJldHVybiAwOwo+ICsJaWYgKHBsYW5lX3N0YXRlLT5jcnRjKSB7Cj4gKwkJY3J0Y19z dGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUocGxhbmVfc3RhdGUtPnN0YXRlLAo+ICsJ CQkJCQkgICAgICAgcGxhbmVfc3RhdGUtPmNydGMpOwo+ICsJCWlmIChXQVJOX09OKElTX0VSUihj cnRjX3N0YXRlKSkpCj4gKwkJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOwo+ICsKPiArCQlj cnRjX3N0YXRlLT5wbGFuZV9tYXNrICY9IH5kcm1fcGxhbmVfbWFzayhwbGFuZSk7Cj4gKwl9Cj4g Kwo+ICsJcGxhbmVfc3RhdGUtPmNydGMgPSBjcnRjOwo+ICsKPiArCWlmIChjcnRjKSB7Cj4gKwkJ Y3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUocGxhbmVfc3RhdGUtPnN0YXRl LAo+ICsJCQkJCQkgICAgICAgY3J0Yyk7Cj4gKwkJaWYgKElTX0VSUihjcnRjX3N0YXRlKSkKPiAr CQkJcmV0dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7Cj4gKwkJY3J0Y19zdGF0ZS0+cGxhbmVfbWFz ayB8PSBkcm1fcGxhbmVfbWFzayhwbGFuZSk7Cj4gKwl9Cj4gKwo+ICsJaWYgKGNydGMpCj4gKwkJ RFJNX0RFQlVHX0FUT01JQygiTGluayBbUExBTkU6JWQ6JXNdIHN0YXRlICVwIHRvIFtDUlRDOiVk OiVzXVxuIiwKPiArCQkJCSBwbGFuZS0+YmFzZS5pZCwgcGxhbmUtPm5hbWUsIHBsYW5lX3N0YXRl LAo+ICsJCQkJIGNydGMtPmJhc2UuaWQsIGNydGMtPm5hbWUpOwo+ICsJZWxzZQo+ICsJCURSTV9E RUJVR19BVE9NSUMoIkxpbmsgW1BMQU5FOiVkOiVzXSBzdGF0ZSAlcCB0byBbTk9DUlRDXVxuIiwK PiArCQkJCSBwbGFuZS0+YmFzZS5pZCwgcGxhbmUtPm5hbWUsIHBsYW5lX3N0YXRlKTsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfc2V0X2NydGNfZm9y X3BsYW5lKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fYXRvbWljX3NldF9mYl9mb3JfcGxhbmUgLSBz ZXQgZnJhbWVidWZmZXIgZm9yIHBsYW5lCj4gKyAqIEBwbGFuZV9zdGF0ZTogYXRvbWljIHN0YXRl IG9iamVjdCBmb3IgdGhlIHBsYW5lCj4gKyAqIEBmYjogZmIgdG8gdXNlIGZvciB0aGUgcGxhbmUK PiArICoKPiArICogQ2hhbmdpbmcgdGhlIGFzc2lnbmVkIGZyYW1lYnVmZmVyIGZvciBhIHBsYW5l IHJlcXVpcmVzIHVzIHRvIGdyYWIgYSByZWZlcmVuY2UKPiArICogdG8gdGhlIG5ldyBmYiBhbmQg ZHJvcCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBvbGQgZmIsIGlmIHRoZXJlIGlzIG9uZS4gVGhpcwo+ ICsgKiBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIGFsbCB0aGVzZSBkZXRhaWxzIGJlc2lkZXMgdXBk YXRpbmcgdGhlIHBvaW50ZXIgaW4gdGhlCj4gKyAqIHN0YXRlIG9iamVjdCBpdHNlbGYuCj4gKyAq Lwo+ICt2b2lkCj4gK2RybV9hdG9taWNfc2V0X2ZiX2Zvcl9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5l X3N0YXRlICpwbGFuZV9zdGF0ZSwKPiArCQkJICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9IHBsYW5lX3N0YXRlLT5wbGFuZTsK PiArCj4gKwlpZiAoZmIpCj4gKwkJRFJNX0RFQlVHX0FUT01JQygiU2V0IFtGQjolZF0gZm9yIFtQ TEFORTolZDolc10gc3RhdGUgJXBcbiIsCj4gKwkJCQkgZmItPmJhc2UuaWQsIHBsYW5lLT5iYXNl LmlkLCBwbGFuZS0+bmFtZSwKPiArCQkJCSBwbGFuZV9zdGF0ZSk7Cj4gKwllbHNlCj4gKwkJRFJN X0RFQlVHX0FUT01JQygiU2V0IFtOT0ZCXSBmb3IgW1BMQU5FOiVkOiVzXSBzdGF0ZSAlcFxuIiwK PiArCQkJCSBwbGFuZS0+YmFzZS5pZCwgcGxhbmUtPm5hbWUsIHBsYW5lX3N0YXRlKTsKPiArCj4g Kwlkcm1fZnJhbWVidWZmZXJfYXNzaWduKCZwbGFuZV9zdGF0ZS0+ZmIsIGZiKTsKPiArfQo+ICtF WFBPUlRfU1lNQk9MKGRybV9hdG9taWNfc2V0X2ZiX2Zvcl9wbGFuZSk7Cj4gKwo+ICsvKioKPiAr ICogZHJtX2F0b21pY19zZXRfZmVuY2VfZm9yX3BsYW5lIC0gc2V0IGZlbmNlIGZvciBwbGFuZQo+ ICsgKiBAcGxhbmVfc3RhdGU6IGF0b21pYyBzdGF0ZSBvYmplY3QgZm9yIHRoZSBwbGFuZQo+ICsg KiBAZmVuY2U6IGRtYV9mZW5jZSB0byB1c2UgZm9yIHRoZSBwbGFuZQo+ICsgKgo+ICsgKiBIZWxw ZXIgdG8gc2V0dXAgdGhlIHBsYW5lX3N0YXRlIGZlbmNlIGluIGNhc2UgaXQgaXMgbm90IHNldCB5 ZXQuCj4gKyAqIEJ5IHVzaW5nIHRoaXMgZHJpdmVycyBkb2Vzbid0IG5lZWQgdG8gd29ycnkgaWYg dGhlIHVzZXIgY2hvb3NlCj4gKyAqIGltcGxpY2l0IG9yIGV4cGxpY2l0IGZlbmNpbmcuCj4gKyAq Cj4gKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBub3Qgc2V0IHRoZSBmZW5jZSB0byB0aGUgc3RhdGUg aWYgaXQgd2FzIHNldAo+ICsgKiB2aWEgZXhwbGljaXQgZmVuY2luZyBpbnRlcmZhY2VzIG9uIHRo ZSBhdG9taWMgaW9jdGwuIEluIHRoYXQgY2FzZSBpdCB3aWxsCj4gKyAqIGRyb3AgdGhlIHJlZmVy ZW5jZSB0byB0aGUgZmVuY2UgYXMgd2UgYXJlIG5vdCBzdG9yaW5nIGl0IGFueXdoZXJlLgo+ICsg KiBPdGhlcndpc2UsIGlmICZkcm1fcGxhbmVfc3RhdGUuZmVuY2UgaXMgbm90IHNldCB0aGlzIGZ1 bmN0aW9uIHdlIGp1c3Qgc2V0IGl0Cj4gKyAqIHdpdGggdGhlIHJlY2VpdmVkIGltcGxpY2l0IGZl bmNlLiBJbiBib3RoIGNhc2VzIHRoaXMgZnVuY3Rpb24gY29uc3VtZXMgYQo+ICsgKiByZWZlcmVu Y2UgZm9yIEBmZW5jZS4KPiArICoKPiArICogVGhpcyB3YXkgZXhwbGljaXQgZmVuY2luZyBjYW4g YmUgdXNlZCB0byBvdmVycnVsZSBpbXBsaWNpdCBmZW5jaW5nLCB3aGljaCBpcwo+ICsgKiBpbXBv cnRhbnQgdG8gbWFrZSBleHBsaWNpdCBmZW5jaW5nIHVzZS1jYXNlcyB3b3JrOiBPbmUgZXhhbXBs ZSBpcyB1c2luZyBvbmUKPiArICogYnVmZmVyIGZvciAyIHNjcmVlbnMgd2l0aCBkaWZmZXJlbnQg cmVmcmVzaCByYXRlcy4gSW1wbGljaXQgZmVuY2luZyB3aWxsCj4gKyAqIGNsYW1wIHJlbmRlcmlu ZyB0byB0aGUgcmVmcmVzaCByYXRlIG9mIHRoZSBzbG93ZXIgc2NyZWVuLCB3aGVyZWFzIGV4cGxp Y2l0Cj4gKyAqIGZlbmNlIGFsbG93cyAyIGluZGVwZW5kZW50IHJlbmRlciBhbmQgZGlzcGxheSBs b29wcyBvbiBhIHNpbmdsZSBidWZmZXIuIElmIGEKPiArICogZHJpdmVyIGFsbG93cyBvYmV5cyBi b3RoIGltcGxpY2l0IGFuZCBleHBsaWNpdCBmZW5jZXMgZm9yIHBsYW5lIHVwZGF0ZXMsIHRoZW4K PiArICogaXQgd2lsbCBicmVhayBhbGwgdGhlIGJlbmVmaXRzIG9mIGV4cGxpY2l0IGZlbmNpbmcu Cj4gKyAqLwo+ICt2b2lkCj4gK2RybV9hdG9taWNfc2V0X2ZlbmNlX2Zvcl9wbGFuZShzdHJ1Y3Qg ZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKPiArCQkJICAgICAgIHN0cnVjdCBkbWFfZmVu Y2UgKmZlbmNlKQo+ICt7Cj4gKwlpZiAocGxhbmVfc3RhdGUtPmZlbmNlKSB7Cj4gKwkJZG1hX2Zl bmNlX3B1dChmZW5jZSk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCXBsYW5lX3N0YXRlLT5m ZW5jZSA9IGZlbmNlOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19zZXRfZmVuY2Vf Zm9yX3BsYW5lKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9jb25u ZWN0b3IgLSBzZXQgY3J0YyBmb3IgY29ubmVjdG9yCj4gKyAqIEBjb25uX3N0YXRlOiBhdG9taWMg c3RhdGUgb2JqZWN0IGZvciB0aGUgY29ubmVjdG9yCj4gKyAqIEBjcnRjOiBjcnRjIHRvIHVzZSBm b3IgdGhlIGNvbm5lY3Rvcgo+ICsgKgo+ICsgKiBDaGFuZ2luZyB0aGUgYXNzaWduZWQgY3J0YyBm b3IgYSBjb25uZWN0b3IgcmVxdWlyZXMgdXMgdG8gZ3JhYiB0aGUgbG9jayBhbmQKPiArICogc3Rh dGUgZm9yIHRoZSBuZXcgY3J0YywgYXMgbmVlZGVkLiBUaGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUg b2YgYWxsIHRoZXNlCj4gKyAqIGRldGFpbHMgYmVzaWRlcyB1cGRhdGluZyB0aGUgcG9pbnRlciBp biB0aGUgc3RhdGUgb2JqZWN0IGl0c2VsZi4KPiArICoKPiArICogUmV0dXJuczoKPiArICogMCBv biBzdWNjZXNzIG9yIGNhbiBmYWlsIHdpdGggLUVERUFETEsgb3IgLUVOT01FTS4gV2hlbiB0aGUg ZXJyb3IgaXMgRURFQURMSwo+ICsgKiB0aGVuIHRoZSB3L3cgbXV0ZXggY29kZSBoYXMgZGV0ZWN0 ZWQgYSBkZWFkbG9jayBhbmQgdGhlIGVudGlyZSBhdG9taWMKPiArICogc2VxdWVuY2UgbXVzdCBi ZSByZXN0YXJ0ZWQuIEFsbCBvdGhlciBlcnJvcnMgYXJlIGZhdGFsLgo+ICsgKi8KPiAraW50Cj4g K2RybV9hdG9taWNfc2V0X2NydGNfZm9yX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9z dGF0ZSAqY29ubl9zdGF0ZSwKPiArCQkJCSAgc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gY29ubl9zdGF0ZS0+Y29ubmVjdG9y Owo+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ICsKPiArCWlmIChjb25u X3N0YXRlLT5jcnRjID09IGNydGMpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKGNvbm5fc3Rh dGUtPmNydGMpIHsKPiArCQljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfbmV3X2NydGNfc3Rh dGUoY29ubl9zdGF0ZS0+c3RhdGUsCj4gKwkJCQkJCQkgICBjb25uX3N0YXRlLT5jcnRjKTsKPiAr Cj4gKwkJY3J0Y19zdGF0ZS0+Y29ubmVjdG9yX21hc2sgJj0KPiArCQkJfmRybV9jb25uZWN0b3Jf bWFzayhjb25uX3N0YXRlLT5jb25uZWN0b3IpOwo+ICsKPiArCQlkcm1fY29ubmVjdG9yX3B1dChj b25uX3N0YXRlLT5jb25uZWN0b3IpOwo+ICsJCWNvbm5fc3RhdGUtPmNydGMgPSBOVUxMOwo+ICsJ fQo+ICsKPiArCWlmIChjcnRjKSB7Cj4gKwkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2Ny dGNfc3RhdGUoY29ubl9zdGF0ZS0+c3RhdGUsIGNydGMpOwo+ICsJCWlmIChJU19FUlIoY3J0Y19z dGF0ZSkpCj4gKwkJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOwo+ICsKPiArCQljcnRjX3N0 YXRlLT5jb25uZWN0b3JfbWFzayB8PQo+ICsJCQlkcm1fY29ubmVjdG9yX21hc2soY29ubl9zdGF0 ZS0+Y29ubmVjdG9yKTsKPiArCj4gKwkJZHJtX2Nvbm5lY3Rvcl9nZXQoY29ubl9zdGF0ZS0+Y29u bmVjdG9yKTsKPiArCQljb25uX3N0YXRlLT5jcnRjID0gY3J0YzsKPiArCj4gKwkJRFJNX0RFQlVH X0FUT01JQygiTGluayBbQ09OTkVDVE9SOiVkOiVzXSBzdGF0ZSAlcCB0byBbQ1JUQzolZDolc11c biIsCj4gKwkJCQkgY29ubmVjdG9yLT5iYXNlLmlkLCBjb25uZWN0b3ItPm5hbWUsCj4gKwkJCQkg Y29ubl9zdGF0ZSwgY3J0Yy0+YmFzZS5pZCwgY3J0Yy0+bmFtZSk7Cj4gKwl9IGVsc2Ugewo+ICsJ CURSTV9ERUJVR19BVE9NSUMoIkxpbmsgW0NPTk5FQ1RPUjolZDolc10gc3RhdGUgJXAgdG8gW05P Q1JUQ11cbiIsCj4gKwkJCQkgY29ubmVjdG9yLT5iYXNlLmlkLCBjb25uZWN0b3ItPm5hbWUsCj4g KwkJCQkgY29ubl9zdGF0ZSk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JU X1NZTUJPTChkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9jb25uZWN0b3IpOwo+ICsKPiArc3RhdGlj IHZvaWQgc2V0X291dF9mZW5jZV9mb3JfY3J0YyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUsCj4gKwkJCQkgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHMzMiBfX3VzZXIgKmZlbmNlX3B0 cikKPiArewo+ICsJc3RhdGUtPmNydGNzW2RybV9jcnRjX2luZGV4KGNydGMpXS5vdXRfZmVuY2Vf cHRyID0gZmVuY2VfcHRyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgczMyIF9fdXNlciAqZ2V0X291dF9m ZW5jZV9mb3JfY3J0YyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gKwkJCQkJICBz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sKPiArCXMzMiBfX3VzZXIgKmZlbmNlX3B0cjsKPiAr Cj4gKwlmZW5jZV9wdHIgPSBzdGF0ZS0+Y3J0Y3NbZHJtX2NydGNfaW5kZXgoY3J0YyldLm91dF9m ZW5jZV9wdHI7Cj4gKwlzdGF0ZS0+Y3J0Y3NbZHJtX2NydGNfaW5kZXgoY3J0YyldLm91dF9mZW5j ZV9wdHIgPSBOVUxMOwo+ICsKPiArCXJldHVybiBmZW5jZV9wdHI7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgc2V0X291dF9mZW5jZV9mb3JfY29ubmVjdG9yKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSwKPiArCQkJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ICsJCQkJ CXMzMiBfX3VzZXIgKmZlbmNlX3B0cikKPiArewo+ICsJdW5zaWduZWQgaW50IGluZGV4ID0gZHJt X2Nvbm5lY3Rvcl9pbmRleChjb25uZWN0b3IpOwo+ICsKPiArCWlmICghZmVuY2VfcHRyKQo+ICsJ CXJldHVybiAwOwo+ICsKPiArCWlmIChwdXRfdXNlcigtMSwgZmVuY2VfcHRyKSkKPiArCQlyZXR1 cm4gLUVGQVVMVDsKPiArCj4gKwlzdGF0ZS0+Y29ubmVjdG9yc1tpbmRleF0ub3V0X2ZlbmNlX3B0 ciA9IGZlbmNlX3B0cjsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHMzMiBf X3VzZXIgKmdldF9vdXRfZmVuY2VfZm9yX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUsCj4gKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ip Cj4gK3sKPiArCXVuc2lnbmVkIGludCBpbmRleCA9IGRybV9jb25uZWN0b3JfaW5kZXgoY29ubmVj dG9yKTsKPiArCXMzMiBfX3VzZXIgKmZlbmNlX3B0cjsKPiArCj4gKwlmZW5jZV9wdHIgPSBzdGF0 ZS0+Y29ubmVjdG9yc1tpbmRleF0ub3V0X2ZlbmNlX3B0cjsKPiArCXN0YXRlLT5jb25uZWN0b3Jz W2luZGV4XS5vdXRfZmVuY2VfcHRyID0gTlVMTDsKPiArCj4gKwlyZXR1cm4gZmVuY2VfcHRyOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK2RybV9hdG9taWNfcmVwbGFjZV9wcm9wZXJ0eV9ibG9i X2Zyb21faWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJCQkgc3RydWN0IGRybV9wcm9w ZXJ0eV9ibG9iICoqYmxvYiwKPiArCQkJCQkgdWludDY0X3QgYmxvYl9pZCwKPiArCQkJCQkgc3Np emVfdCBleHBlY3RlZF9zaXplLAo+ICsJCQkJCSBzc2l6ZV90IGV4cGVjdGVkX2VsZW1fc2l6ZSwK PiArCQkJCQkgYm9vbCAqcmVwbGFjZWQpCj4gK3sKPiArCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxv YiAqbmV3X2Jsb2IgPSBOVUxMOwo+ICsKPiArCWlmIChibG9iX2lkICE9IDApIHsKPiArCQluZXdf YmxvYiA9IGRybV9wcm9wZXJ0eV9sb29rdXBfYmxvYihkZXYsIGJsb2JfaWQpOwo+ICsJCWlmIChu ZXdfYmxvYiA9PSBOVUxMKQo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwkJaWYgKGV4cGVj dGVkX3NpemUgPiAwICYmCj4gKwkJICAgIG5ld19ibG9iLT5sZW5ndGggIT0gZXhwZWN0ZWRfc2l6 ZSkgewo+ICsJCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQobmV3X2Jsb2IpOwo+ICsJCQlyZXR1cm4g LUVJTlZBTDsKPiArCQl9Cj4gKwkJaWYgKGV4cGVjdGVkX2VsZW1fc2l6ZSA+IDAgJiYKPiArCQkg ICAgbmV3X2Jsb2ItPmxlbmd0aCAlIGV4cGVjdGVkX2VsZW1fc2l6ZSAhPSAwKSB7Cj4gKwkJCWRy bV9wcm9wZXJ0eV9ibG9iX3B1dChuZXdfYmxvYik7Cj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsJ CX0KPiArCX0KPiArCj4gKwkqcmVwbGFjZWQgfD0gZHJtX3Byb3BlcnR5X3JlcGxhY2VfYmxvYihi bG9iLCBuZXdfYmxvYik7Cj4gKwlkcm1fcHJvcGVydHlfYmxvYl9wdXQobmV3X2Jsb2IpOwo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRybV9hdG9taWNfY3J0Y19zZXRf cHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICsJCXN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqc3RhdGUsIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAo+ICsJCXVpbnQ2NF90IHZh bCkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiArCXN0cnVj dCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmlnOwo+ICsJYm9vbCBy ZXBsYWNlZCA9IGZhbHNlOwo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAocHJvcGVydHkgPT0gY29u ZmlnLT5wcm9wX2FjdGl2ZSkKPiArCQlzdGF0ZS0+YWN0aXZlID0gdmFsOwo+ICsJZWxzZSBpZiAo cHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX21vZGVfaWQpIHsKPiArCQlzdHJ1Y3QgZHJtX3Byb3Bl cnR5X2Jsb2IgKm1vZGUgPQo+ICsJCQlkcm1fcHJvcGVydHlfbG9va3VwX2Jsb2IoZGV2LCB2YWwp Owo+ICsJCXJldCA9IGRybV9hdG9taWNfc2V0X21vZGVfcHJvcF9mb3JfY3J0YyhzdGF0ZSwgbW9k ZSk7Cj4gKwkJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KG1vZGUpOwo+ICsJCXJldHVybiByZXQ7Cj4g Kwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+ZGVnYW1tYV9sdXRfcHJvcGVydHkpIHsK PiArCQlyZXQgPSBkcm1fYXRvbWljX3JlcGxhY2VfcHJvcGVydHlfYmxvYl9mcm9tX2lkKGRldiwK PiArCQkJCQkmc3RhdGUtPmRlZ2FtbWFfbHV0LAo+ICsJCQkJCXZhbCwKPiArCQkJCQktMSwgc2l6 ZW9mKHN0cnVjdCBkcm1fY29sb3JfbHV0KSwKPiArCQkJCQkmcmVwbGFjZWQpOwo+ICsJCXN0YXRl LT5jb2xvcl9tZ210X2NoYW5nZWQgfD0gcmVwbGFjZWQ7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0g ZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5jdG1fcHJvcGVydHkpIHsKPiArCQlyZXQgPSBk cm1fYXRvbWljX3JlcGxhY2VfcHJvcGVydHlfYmxvYl9mcm9tX2lkKGRldiwKPiArCQkJCQkmc3Rh dGUtPmN0bSwKPiArCQkJCQl2YWwsCj4gKwkJCQkJc2l6ZW9mKHN0cnVjdCBkcm1fY29sb3JfY3Rt KSwgLTEsCj4gKwkJCQkJJnJlcGxhY2VkKTsKPiArCQlzdGF0ZS0+Y29sb3JfbWdtdF9jaGFuZ2Vk IHw9IHJlcGxhY2VkOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09 IGNvbmZpZy0+Z2FtbWFfbHV0X3Byb3BlcnR5KSB7Cj4gKwkJcmV0ID0gZHJtX2F0b21pY19yZXBs YWNlX3Byb3BlcnR5X2Jsb2JfZnJvbV9pZChkZXYsCj4gKwkJCQkJJnN0YXRlLT5nYW1tYV9sdXQs Cj4gKwkJCQkJdmFsLAo+ICsJCQkJCS0xLCBzaXplb2Yoc3RydWN0IGRybV9jb2xvcl9sdXQpLAo+ ICsJCQkJCSZyZXBsYWNlZCk7Cj4gKwkJc3RhdGUtPmNvbG9yX21nbXRfY2hhbmdlZCB8PSByZXBs YWNlZDsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWct PnByb3Bfb3V0X2ZlbmNlX3B0cikgewo+ICsJCXMzMiBfX3VzZXIgKmZlbmNlX3B0ciA9IHU2NF90 b191c2VyX3B0cih2YWwpOwo+ICsKPiArCQlpZiAoIWZlbmNlX3B0cikKPiArCQkJcmV0dXJuIDA7 Cj4gKwo+ICsJCWlmIChwdXRfdXNlcigtMSwgZmVuY2VfcHRyKSkKPiArCQkJcmV0dXJuIC1FRkFV TFQ7Cj4gKwo+ICsJCXNldF9vdXRfZmVuY2VfZm9yX2NydGMoc3RhdGUtPnN0YXRlLCBjcnRjLCBm ZW5jZV9wdHIpOwo+ICsJfSBlbHNlIGlmIChjcnRjLT5mdW5jcy0+YXRvbWljX3NldF9wcm9wZXJ0 eSkgewo+ICsJCXJldHVybiBjcnRjLT5mdW5jcy0+YXRvbWljX3NldF9wcm9wZXJ0eShjcnRjLCBz dGF0ZSwgcHJvcGVydHksIHZhbCk7Cj4gKwl9IGVsc2Ugewo+ICsJCURSTV9ERUJVR19BVE9NSUMo IltDUlRDOiVkOiVzXSB1bmtub3duIHByb3BlcnR5IFtQUk9QOiVkOiVzXV1cbiIsCj4gKwkJCQkg Y3J0Yy0+YmFzZS5pZCwgY3J0Yy0+bmFtZSwKPiArCQkJCSBwcm9wZXJ0eS0+YmFzZS5pZCwgcHJv cGVydHktPm5hbWUpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK2RybV9hdG9taWNfY3J0Y19nZXRfcHJvcGVydHko c3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICsJCWNvbnN0IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAq c3RhdGUsCj4gKwkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksIHVpbnQ2NF90ICp2YWwp Cj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gKwlzdHJ1Y3Qg ZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKPiArCj4gKwlpZiAo cHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2FjdGl2ZSkKPiArCQkqdmFsID0gc3RhdGUtPmFjdGl2 ZTsKPiArCWVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9tb2RlX2lkKQo+ICsJCSp2 YWwgPSAoc3RhdGUtPm1vZGVfYmxvYikgPyBzdGF0ZS0+bW9kZV9ibG9iLT5iYXNlLmlkIDogMDsK PiArCWVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+ZGVnYW1tYV9sdXRfcHJvcGVydHkpCj4g KwkJKnZhbCA9IChzdGF0ZS0+ZGVnYW1tYV9sdXQpID8gc3RhdGUtPmRlZ2FtbWFfbHV0LT5iYXNl LmlkIDogMDsKPiArCWVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+Y3RtX3Byb3BlcnR5KQo+ ICsJCSp2YWwgPSAoc3RhdGUtPmN0bSkgPyBzdGF0ZS0+Y3RtLT5iYXNlLmlkIDogMDsKPiArCWVs c2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+Z2FtbWFfbHV0X3Byb3BlcnR5KQo+ICsJCSp2YWwg PSAoc3RhdGUtPmdhbW1hX2x1dCkgPyBzdGF0ZS0+Z2FtbWFfbHV0LT5iYXNlLmlkIDogMDsKPiAr CWVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9vdXRfZmVuY2VfcHRyKQo+ICsJCSp2 YWwgPSAwOwo+ICsJZWxzZSBpZiAoY3J0Yy0+ZnVuY3MtPmF0b21pY19nZXRfcHJvcGVydHkpCj4g KwkJcmV0dXJuIGNydGMtPmZ1bmNzLT5hdG9taWNfZ2V0X3Byb3BlcnR5KGNydGMsIHN0YXRlLCBw cm9wZXJ0eSwgdmFsKTsKPiArCWVsc2UKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcm1fYXRvbWljX3BsYW5lX3NldF9wcm9wZXJ0 eShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiArCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpz dGF0ZSwgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCj4gKwkJdWludDY0X3QgdmFsKQo+ ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGxhbmUtPmRldjsKPiArCXN0cnVjdCBk cm1fbW9kZV9jb25maWcgKmNvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmlnOwo+ICsKPiArCWlmIChw cm9wZXJ0eSA9PSBjb25maWctPnByb3BfZmJfaWQpIHsKPiArCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiA9IGRybV9mcmFtZWJ1ZmZlcl9sb29rdXAoZGV2LCBOVUxMLCB2YWwpOwo+ICsJCWRy bV9hdG9taWNfc2V0X2ZiX2Zvcl9wbGFuZShzdGF0ZSwgZmIpOwo+ICsJCWlmIChmYikKPiArCQkJ ZHJtX2ZyYW1lYnVmZmVyX3B1dChmYik7Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZp Zy0+cHJvcF9pbl9mZW5jZV9mZCkgewo+ICsJCWlmIChzdGF0ZS0+ZmVuY2UpCj4gKwkJCXJldHVy biAtRUlOVkFMOwo+ICsKPiArCQlpZiAoVTY0Mkk2NCh2YWwpID09IC0xKQo+ICsJCQlyZXR1cm4g MDsKPiArCj4gKwkJc3RhdGUtPmZlbmNlID0gc3luY19maWxlX2dldF9mZW5jZSh2YWwpOwo+ICsJ CWlmICghc3RhdGUtPmZlbmNlKQo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwl9IGVsc2Ug aWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9jcnRjX2lkKSB7Cj4gKwkJc3RydWN0IGRybV9j cnRjICpjcnRjID0gZHJtX2NydGNfZmluZChkZXYsIE5VTEwsIHZhbCk7Cj4gKwkJcmV0dXJuIGRy bV9hdG9taWNfc2V0X2NydGNfZm9yX3BsYW5lKHN0YXRlLCBjcnRjKTsKPiArCX0gZWxzZSBpZiAo cHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2NydGNfeCkgewo+ICsJCXN0YXRlLT5jcnRjX3ggPSBV NjQySTY0KHZhbCk7Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9jcnRj X3kpIHsKPiArCQlzdGF0ZS0+Y3J0Y195ID0gVTY0Mkk2NCh2YWwpOwo+ICsJfSBlbHNlIGlmIChw cm9wZXJ0eSA9PSBjb25maWctPnByb3BfY3J0Y193KSB7Cj4gKwkJc3RhdGUtPmNydGNfdyA9IHZh bDsKPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2NydGNfaCkgewo+ICsJ CXN0YXRlLT5jcnRjX2ggPSB2YWw7Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+ cHJvcF9zcmNfeCkgewo+ICsJCXN0YXRlLT5zcmNfeCA9IHZhbDsKPiArCX0gZWxzZSBpZiAocHJv cGVydHkgPT0gY29uZmlnLT5wcm9wX3NyY195KSB7Cj4gKwkJc3RhdGUtPnNyY195ID0gdmFsOwo+ ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3Bfc3JjX3cpIHsKPiArCQlzdGF0 ZS0+c3JjX3cgPSB2YWw7Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9z cmNfaCkgewo+ICsJCXN0YXRlLT5zcmNfaCA9IHZhbDsKPiArCX0gZWxzZSBpZiAocHJvcGVydHkg PT0gcGxhbmUtPmFscGhhX3Byb3BlcnR5KSB7Cj4gKwkJc3RhdGUtPmFscGhhID0gdmFsOwo+ICsJ fSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+YmxlbmRfbW9kZV9wcm9wZXJ0eSkgewo+ICsJ CXN0YXRlLT5waXhlbF9ibGVuZF9tb2RlID0gdmFsOwo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9 PSBwbGFuZS0+cm90YXRpb25fcHJvcGVydHkpIHsKPiArCQlpZiAoIWlzX3Bvd2VyX29mXzIodmFs ICYgRFJNX01PREVfUk9UQVRFX01BU0spKSB7Cj4gKwkJCURSTV9ERUJVR19BVE9NSUMoIltQTEFO RTolZDolc10gYmFkIHJvdGF0aW9uIGJpdG1hc2s6IDB4JWxseFxuIiwKPiArCQkJCQkgcGxhbmUt PmJhc2UuaWQsIHBsYW5lLT5uYW1lLCB2YWwpOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9 Cj4gKwkJc3RhdGUtPnJvdGF0aW9uID0gdmFsOwo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBw bGFuZS0+enBvc19wcm9wZXJ0eSkgewo+ICsJCXN0YXRlLT56cG9zID0gdmFsOwo+ICsJfSBlbHNl IGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+Y29sb3JfZW5jb2RpbmdfcHJvcGVydHkpIHsKPiArCQlz dGF0ZS0+Y29sb3JfZW5jb2RpbmcgPSB2YWw7Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBs YW5lLT5jb2xvcl9yYW5nZV9wcm9wZXJ0eSkgewo+ICsJCXN0YXRlLT5jb2xvcl9yYW5nZSA9IHZh bDsKPiArCX0gZWxzZSBpZiAocGxhbmUtPmZ1bmNzLT5hdG9taWNfc2V0X3Byb3BlcnR5KSB7Cj4g KwkJcmV0dXJuIHBsYW5lLT5mdW5jcy0+YXRvbWljX3NldF9wcm9wZXJ0eShwbGFuZSwgc3RhdGUs Cj4gKwkJCQlwcm9wZXJ0eSwgdmFsKTsKPiArCX0gZWxzZSB7Cj4gKwkJRFJNX0RFQlVHX0FUT01J QygiW1BMQU5FOiVkOiVzXSB1bmtub3duIHByb3BlcnR5IFtQUk9QOiVkOiVzXV1cbiIsCj4gKwkJ CQkgcGxhbmUtPmJhc2UuaWQsIHBsYW5lLT5uYW1lLAo+ICsJCQkJIHByb3BlcnR5LT5iYXNlLmlk LCBwcm9wZXJ0eS0+bmFtZSk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiArZHJtX2F0b21pY19wbGFuZV9nZXRfcHJv cGVydHkoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gKwkJY29uc3Qgc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSAqc3RhdGUsCj4gKwkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksIHVpbnQ2 NF90ICp2YWwpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwbGFuZS0+ZGV2Owo+ ICsJc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJmRldi0+bW9kZV9jb25maWc7Cj4g Kwo+ICsJaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9mYl9pZCkgewo+ICsJCSp2YWwgPSAo c3RhdGUtPmZiKSA/IHN0YXRlLT5mYi0+YmFzZS5pZCA6IDA7Cj4gKwl9IGVsc2UgaWYgKHByb3Bl cnR5ID09IGNvbmZpZy0+cHJvcF9pbl9mZW5jZV9mZCkgewo+ICsJCSp2YWwgPSAtMTsKPiArCX0g ZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2NydGNfaWQpIHsKPiArCQkqdmFsID0g KHN0YXRlLT5jcnRjKSA/IHN0YXRlLT5jcnRjLT5iYXNlLmlkIDogMDsKPiArCX0gZWxzZSBpZiAo cHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2NydGNfeCkgewo+ICsJCSp2YWwgPSBJNjQyVTY0KHN0 YXRlLT5jcnRjX3gpOwo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3BfY3J0 Y195KSB7Cj4gKwkJKnZhbCA9IEk2NDJVNjQoc3RhdGUtPmNydGNfeSk7Cj4gKwl9IGVsc2UgaWYg KHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9jcnRjX3cpIHsKPiArCQkqdmFsID0gc3RhdGUtPmNy dGNfdzsKPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2NydGNfaCkgewo+ ICsJCSp2YWwgPSBzdGF0ZS0+Y3J0Y19oOwo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25m aWctPnByb3Bfc3JjX3gpIHsKPiArCQkqdmFsID0gc3RhdGUtPnNyY194Owo+ICsJfSBlbHNlIGlm IChwcm9wZXJ0eSA9PSBjb25maWctPnByb3Bfc3JjX3kpIHsKPiArCQkqdmFsID0gc3RhdGUtPnNy Y195Owo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3Bfc3JjX3cpIHsKPiAr CQkqdmFsID0gc3RhdGUtPnNyY193Owo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWct PnByb3Bfc3JjX2gpIHsKPiArCQkqdmFsID0gc3RhdGUtPnNyY19oOwo+ICsJfSBlbHNlIGlmIChw cm9wZXJ0eSA9PSBwbGFuZS0+YWxwaGFfcHJvcGVydHkpIHsKPiArCQkqdmFsID0gc3RhdGUtPmFs cGhhOwo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+YmxlbmRfbW9kZV9wcm9wZXJ0 eSkgewo+ICsJCSp2YWwgPSBzdGF0ZS0+cGl4ZWxfYmxlbmRfbW9kZTsKPiArCX0gZWxzZSBpZiAo cHJvcGVydHkgPT0gcGxhbmUtPnJvdGF0aW9uX3Byb3BlcnR5KSB7Cj4gKwkJKnZhbCA9IHN0YXRl LT5yb3RhdGlvbjsKPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxhbmUtPnpwb3NfcHJvcGVy dHkpIHsKPiArCQkqdmFsID0gc3RhdGUtPnpwb3M7Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09 IHBsYW5lLT5jb2xvcl9lbmNvZGluZ19wcm9wZXJ0eSkgewo+ICsJCSp2YWwgPSBzdGF0ZS0+Y29s b3JfZW5jb2Rpbmc7Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5lLT5jb2xvcl9yYW5n ZV9wcm9wZXJ0eSkgewo+ICsJCSp2YWwgPSBzdGF0ZS0+Y29sb3JfcmFuZ2U7Cj4gKwl9IGVsc2Ug aWYgKHBsYW5lLT5mdW5jcy0+YXRvbWljX2dldF9wcm9wZXJ0eSkgewo+ICsJCXJldHVybiBwbGFu ZS0+ZnVuY3MtPmF0b21pY19nZXRfcHJvcGVydHkocGxhbmUsIHN0YXRlLCBwcm9wZXJ0eSwgdmFs KTsKPiArCX0gZWxzZSB7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX3dyaXRlYmFja19qb2IgKgo+ICtkcm1f YXRvbWljX2dldF93cml0ZWJhY2tfam9iKHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25u X3N0YXRlKQo+ICt7Cj4gKwlXQVJOX09OKGNvbm5fc3RhdGUtPmNvbm5lY3Rvci0+Y29ubmVjdG9y X3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX1dSSVRFQkFDSyk7Cj4gKwo+ICsJaWYgKCFjb25u X3N0YXRlLT53cml0ZWJhY2tfam9iKQo+ICsJCWNvbm5fc3RhdGUtPndyaXRlYmFja19qb2IgPQo+ ICsJCQlremFsbG9jKHNpemVvZigqY29ubl9zdGF0ZS0+d3JpdGViYWNrX2pvYiksIEdGUF9LRVJO RUwpOwo+ICsKPiArCXJldHVybiBjb25uX3N0YXRlLT53cml0ZWJhY2tfam9iOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGRybV9hdG9taWNfc2V0X3dyaXRlYmFja19mYl9mb3JfY29ubmVjdG9yKAo+ ICsJCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlLAo+ICsJCXN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3dyaXRlYmFja19qb2IgKmpv YiA9Cj4gKwkJZHJtX2F0b21pY19nZXRfd3JpdGViYWNrX2pvYihjb25uX3N0YXRlKTsKPiArCWlm ICgham9iKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWRybV9mcmFtZWJ1ZmZlcl9hc3Np Z24oJmpvYi0+ZmIsIGZiKTsKPiArCj4gKwlpZiAoZmIpCj4gKwkJRFJNX0RFQlVHX0FUT01JQygi U2V0IFtGQjolZF0gZm9yIGNvbm5lY3RvciBzdGF0ZSAlcFxuIiwKPiArCQkJCSBmYi0+YmFzZS5p ZCwgY29ubl9zdGF0ZSk7Cj4gKwllbHNlCj4gKwkJRFJNX0RFQlVHX0FUT01JQygiU2V0IFtOT0ZC XSBmb3IgY29ubmVjdG9yIHN0YXRlICVwXG4iLAo+ICsJCQkJIGNvbm5fc3RhdGUpOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRybV9hdG9taWNfY29ubmVjdG9yX3Nl dF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ICsJCXN0cnVjdCBk cm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSwgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHks Cj4gKwkJdWludDY0X3QgdmFsKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29u bmVjdG9yLT5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5t b2RlX2NvbmZpZzsKPiArCj4gKwlpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2NydGNfaWQp IHsKPiArCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBkcm1fY3J0Y19maW5kKGRldiwgTlVMTCwg dmFsKTsKPiArCQlyZXR1cm4gZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfY29ubmVjdG9yKHN0YXRl LCBjcnRjKTsKPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5kcG1zX3Byb3BlcnR5 KSB7Cj4gKwkJLyogc2V0dGluZyBEUE1TIHByb3BlcnR5IHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxp bmcsIHdoaWNoCj4gKwkJICogaXMgZG9uZSBpbiBsZWdhY3kgc2V0cHJvcCBwYXRoIGZvciB1cy4g IERpc2FsbG93IChmb3IKPiArCQkgKiBub3c/KSBhdG9taWMgd3JpdGVzIHRvIERQTVMgcHJvcGVy dHk6Cj4gKwkJICovCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5 ID09IGNvbmZpZy0+dHZfc2VsZWN0X3N1YmNvbm5lY3Rvcl9wcm9wZXJ0eSkgewo+ICsJCXN0YXRl LT50di5zdWJjb25uZWN0b3IgPSB2YWw7Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZp Zy0+dHZfbGVmdF9tYXJnaW5fcHJvcGVydHkpIHsKPiArCQlzdGF0ZS0+dHYubWFyZ2lucy5sZWZ0 ID0gdmFsOwo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X3JpZ2h0X21hcmdp bl9wcm9wZXJ0eSkgewo+ICsJCXN0YXRlLT50di5tYXJnaW5zLnJpZ2h0ID0gdmFsOwo+ICsJfSBl bHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X3RvcF9tYXJnaW5fcHJvcGVydHkpIHsKPiAr CQlzdGF0ZS0+dHYubWFyZ2lucy50b3AgPSB2YWw7Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09 IGNvbmZpZy0+dHZfYm90dG9tX21hcmdpbl9wcm9wZXJ0eSkgewo+ICsJCXN0YXRlLT50di5tYXJn aW5zLmJvdHRvbSA9IHZhbDsKPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9t b2RlX3Byb3BlcnR5KSB7Cj4gKwkJc3RhdGUtPnR2Lm1vZGUgPSB2YWw7Cj4gKwl9IGVsc2UgaWYg KHByb3BlcnR5ID09IGNvbmZpZy0+dHZfYnJpZ2h0bmVzc19wcm9wZXJ0eSkgewo+ICsJCXN0YXRl LT50di5icmlnaHRuZXNzID0gdmFsOwo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWct PnR2X2NvbnRyYXN0X3Byb3BlcnR5KSB7Cj4gKwkJc3RhdGUtPnR2LmNvbnRyYXN0ID0gdmFsOwo+ ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2ZsaWNrZXJfcmVkdWN0aW9uX3By b3BlcnR5KSB7Cj4gKwkJc3RhdGUtPnR2LmZsaWNrZXJfcmVkdWN0aW9uID0gdmFsOwo+ICsJfSBl bHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X292ZXJzY2FuX3Byb3BlcnR5KSB7Cj4gKwkJ c3RhdGUtPnR2Lm92ZXJzY2FuID0gdmFsOwo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25m aWctPnR2X3NhdHVyYXRpb25fcHJvcGVydHkpIHsKPiArCQlzdGF0ZS0+dHYuc2F0dXJhdGlvbiA9 IHZhbDsKPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9odWVfcHJvcGVydHkp IHsKPiArCQlzdGF0ZS0+dHYuaHVlID0gdmFsOwo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBj b25maWctPmxpbmtfc3RhdHVzX3Byb3BlcnR5KSB7Cj4gKwkJLyogTmV2ZXIgZG93bmdyYWRlIGZy b20gR09PRCB0byBCQUQgb24gdXNlcnNwYWNlJ3MgcmVxdWVzdCBoZXJlLAo+ICsJCSAqIG9ubHkg aHcgaXNzdWVzIGNhbiBkbyB0aGF0Lgo+ICsJCSAqCj4gKwkJICogRm9yIGFuIGF0b21pYyBwcm9w ZXJ0eSB0aGUgdXNlcnNwYWNlIGRvZXNuJ3QgbmVlZCB0byBiZSBhYmxlCj4gKwkJICogdG8gdW5k ZXJzdGFuZCBhbGwgdGhlIHByb3BlcnRpZXMsIGJ1dCBuZWVkcyB0byBiZSBhYmxlIHRvCj4gKwkJ ICogcmVzdG9yZSB0aGUgc3RhdGUgaXQgd2FudHMgb24gVlQgc3dpdGNoLiBTbyBpZiB0aGUgdXNl cnNwYWNlCj4gKwkJICogdHJpZXMgdG8gY2hhbmdlIHRoZSBsaW5rX3N0YXR1cyBmcm9tIEdPT0Qg dG8gQkFELCBkcml2ZXIKPiArCQkgKiBzaWxlbnRseSByZWplY3RzIGl0IGFuZCByZXR1cm5zIGEg MC4gVGhpcyBwcmV2ZW50cyB1c2Vyc3BhY2UKPiArCQkgKiBmcm9tIGFjY2lkZW50bHkgYnJlYWtp bmcgIHRoZSBkaXNwbGF5IHdoZW4gaXQgcmVzdG9yZXMgdGhlCj4gKwkJICogc3RhdGUuCj4gKwkJ ICovCj4gKwkJaWYgKHN0YXRlLT5saW5rX3N0YXR1cyAhPSBEUk1fTElOS19TVEFUVVNfR09PRCkK PiArCQkJc3RhdGUtPmxpbmtfc3RhdHVzID0gdmFsOwo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9 PSBjb25maWctPmFzcGVjdF9yYXRpb19wcm9wZXJ0eSkgewo+ICsJCXN0YXRlLT5waWN0dXJlX2Fz cGVjdF9yYXRpbyA9IHZhbDsKPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5jb250 ZW50X3R5cGVfcHJvcGVydHkpIHsKPiArCQlzdGF0ZS0+Y29udGVudF90eXBlID0gdmFsOwo+ICsJ fSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25uZWN0b3ItPnNjYWxpbmdfbW9kZV9wcm9wZXJ0eSkg ewo+ICsJCXN0YXRlLT5zY2FsaW5nX21vZGUgPSB2YWw7Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5 ID09IGNvbm5lY3Rvci0+Y29udGVudF9wcm90ZWN0aW9uX3Byb3BlcnR5KSB7Cj4gKwkJaWYgKHZh bCA9PSBEUk1fTU9ERV9DT05URU5UX1BST1RFQ1RJT05fRU5BQkxFRCkgewo+ICsJCQlEUk1fREVC VUdfS01TKCJvbmx5IGRyaXZlcnMgY2FuIHNldCBDUCBFbmFibGVkXG4iKTsKPiArCQkJcmV0dXJu IC1FSU5WQUw7Cj4gKwkJfQo+ICsJCXN0YXRlLT5jb250ZW50X3Byb3RlY3Rpb24gPSB2YWw7Cj4g Kwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+d3JpdGViYWNrX2ZiX2lkX3Byb3BlcnR5 KSB7Cj4gKwkJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBkcm1fZnJhbWVidWZmZXJfbG9v a3VwKGRldiwgTlVMTCwgdmFsKTsKPiArCQlpbnQgcmV0ID0gZHJtX2F0b21pY19zZXRfd3JpdGVi YWNrX2ZiX2Zvcl9jb25uZWN0b3Ioc3RhdGUsIGZiKTsKPiArCQlpZiAoZmIpCj4gKwkJCWRybV9m cmFtZWJ1ZmZlcl9wdXQoZmIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9IGVsc2UgaWYgKHByb3Bl cnR5ID09IGNvbmZpZy0+d3JpdGViYWNrX291dF9mZW5jZV9wdHJfcHJvcGVydHkpIHsKPiArCQlz MzIgX191c2VyICpmZW5jZV9wdHIgPSB1NjRfdG9fdXNlcl9wdHIodmFsKTsKPiArCj4gKwkJcmV0 dXJuIHNldF9vdXRfZmVuY2VfZm9yX2Nvbm5lY3RvcihzdGF0ZS0+c3RhdGUsIGNvbm5lY3RvciwK PiArCQkJCQkJICAgZmVuY2VfcHRyKTsKPiArCX0gZWxzZSBpZiAoY29ubmVjdG9yLT5mdW5jcy0+ YXRvbWljX3NldF9wcm9wZXJ0eSkgewo+ICsJCXJldHVybiBjb25uZWN0b3ItPmZ1bmNzLT5hdG9t aWNfc2V0X3Byb3BlcnR5KGNvbm5lY3RvciwKPiArCQkJCXN0YXRlLCBwcm9wZXJ0eSwgdmFsKTsK PiArCX0gZWxzZSB7Cj4gKwkJRFJNX0RFQlVHX0FUT01JQygiW0NPTk5FQ1RPUjolZDolc10gdW5r bm93biBwcm9wZXJ0eSBbUFJPUDolZDolc11dXG4iLAo+ICsJCQkJIGNvbm5lY3Rvci0+YmFzZS5p ZCwgY29ubmVjdG9yLT5uYW1lLAo+ICsJCQkJIHByb3BlcnR5LT5iYXNlLmlkLCBwcm9wZXJ0eS0+ bmFtZSk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQKPiArZHJtX2F0b21pY19jb25uZWN0b3JfZ2V0X3Byb3BlcnR5KHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gKwkJY29uc3Qgc3RydWN0IGRybV9jb25u ZWN0b3Jfc3RhdGUgKnN0YXRlLAo+ICsJCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCB1 aW50NjRfdCAqdmFsKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9y LT5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5tb2RlX2Nv bmZpZzsKPiArCj4gKwlpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2NydGNfaWQpIHsKPiAr CQkqdmFsID0gKHN0YXRlLT5jcnRjKSA/IHN0YXRlLT5jcnRjLT5iYXNlLmlkIDogMDsKPiArCX0g ZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5kcG1zX3Byb3BlcnR5KSB7Cj4gKwkJKnZhbCA9 IGNvbm5lY3Rvci0+ZHBtczsKPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9z ZWxlY3Rfc3ViY29ubmVjdG9yX3Byb3BlcnR5KSB7Cj4gKwkJKnZhbCA9IHN0YXRlLT50di5zdWJj b25uZWN0b3I7Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfbGVmdF9tYXJn aW5fcHJvcGVydHkpIHsKPiArCQkqdmFsID0gc3RhdGUtPnR2Lm1hcmdpbnMubGVmdDsKPiArCX0g ZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9yaWdodF9tYXJnaW5fcHJvcGVydHkpIHsK PiArCQkqdmFsID0gc3RhdGUtPnR2Lm1hcmdpbnMucmlnaHQ7Cj4gKwl9IGVsc2UgaWYgKHByb3Bl cnR5ID09IGNvbmZpZy0+dHZfdG9wX21hcmdpbl9wcm9wZXJ0eSkgewo+ICsJCSp2YWwgPSBzdGF0 ZS0+dHYubWFyZ2lucy50b3A7Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZf Ym90dG9tX21hcmdpbl9wcm9wZXJ0eSkgewo+ICsJCSp2YWwgPSBzdGF0ZS0+dHYubWFyZ2lucy5i b3R0b207Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfbW9kZV9wcm9wZXJ0 eSkgewo+ICsJCSp2YWwgPSBzdGF0ZS0+dHYubW9kZTsKPiArCX0gZWxzZSBpZiAocHJvcGVydHkg PT0gY29uZmlnLT50dl9icmlnaHRuZXNzX3Byb3BlcnR5KSB7Cj4gKwkJKnZhbCA9IHN0YXRlLT50 di5icmlnaHRuZXNzOwo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2NvbnRy YXN0X3Byb3BlcnR5KSB7Cj4gKwkJKnZhbCA9IHN0YXRlLT50di5jb250cmFzdDsKPiArCX0gZWxz ZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9mbGlja2VyX3JlZHVjdGlvbl9wcm9wZXJ0eSkg ewo+ICsJCSp2YWwgPSBzdGF0ZS0+dHYuZmxpY2tlcl9yZWR1Y3Rpb247Cj4gKwl9IGVsc2UgaWYg KHByb3BlcnR5ID09IGNvbmZpZy0+dHZfb3ZlcnNjYW5fcHJvcGVydHkpIHsKPiArCQkqdmFsID0g c3RhdGUtPnR2Lm92ZXJzY2FuOwo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2 X3NhdHVyYXRpb25fcHJvcGVydHkpIHsKPiArCQkqdmFsID0gc3RhdGUtPnR2LnNhdHVyYXRpb247 Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfaHVlX3Byb3BlcnR5KSB7Cj4g KwkJKnZhbCA9IHN0YXRlLT50di5odWU7Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZp Zy0+bGlua19zdGF0dXNfcHJvcGVydHkpIHsKPiArCQkqdmFsID0gc3RhdGUtPmxpbmtfc3RhdHVz Owo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmFzcGVjdF9yYXRpb19wcm9wZXJ0 eSkgewo+ICsJCSp2YWwgPSBzdGF0ZS0+cGljdHVyZV9hc3BlY3RfcmF0aW87Cj4gKwl9IGVsc2Ug aWYgKHByb3BlcnR5ID09IGNvbmZpZy0+Y29udGVudF90eXBlX3Byb3BlcnR5KSB7Cj4gKwkJKnZh bCA9IHN0YXRlLT5jb250ZW50X3R5cGU7Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbm5l Y3Rvci0+c2NhbGluZ19tb2RlX3Byb3BlcnR5KSB7Cj4gKwkJKnZhbCA9IHN0YXRlLT5zY2FsaW5n X21vZGU7Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbm5lY3Rvci0+Y29udGVudF9wcm90 ZWN0aW9uX3Byb3BlcnR5KSB7Cj4gKwkJKnZhbCA9IHN0YXRlLT5jb250ZW50X3Byb3RlY3Rpb247 Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+d3JpdGViYWNrX2ZiX2lkX3Byb3Bl cnR5KSB7Cj4gKwkJLyogV3JpdGViYWNrIGZyYW1lYnVmZmVyIGlzIG9uZS1zaG90LCB3cml0ZSBh bmQgZm9yZ2V0ICovCj4gKwkJKnZhbCA9IDA7Cj4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNv bmZpZy0+d3JpdGViYWNrX291dF9mZW5jZV9wdHJfcHJvcGVydHkpIHsKPiArCQkqdmFsID0gMDsK PiArCX0gZWxzZSBpZiAoY29ubmVjdG9yLT5mdW5jcy0+YXRvbWljX2dldF9wcm9wZXJ0eSkgewo+ ICsJCXJldHVybiBjb25uZWN0b3ItPmZ1bmNzLT5hdG9taWNfZ2V0X3Byb3BlcnR5KGNvbm5lY3Rv ciwKPiArCQkJCXN0YXRlLCBwcm9wZXJ0eSwgdmFsKTsKPiArCX0gZWxzZSB7Cj4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBkcm1fYXRv bWljX2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmosCj4gKwkJc3RydWN0 IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksIHVpbnQ2NF90ICp2YWwpCj4gK3sKPiArCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBwcm9wZXJ0eS0+ZGV2Owo+ICsJaW50IHJldDsKPiArCj4gKwlzd2l0 Y2ggKG9iai0+dHlwZSkgewo+ICsJY2FzZSBEUk1fTU9ERV9PQkpFQ1RfQ09OTkVDVE9SOiB7Cj4g KwkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IG9ial90b19jb25uZWN0b3Iob2Jq KTsKPiArCQlXQVJOX09OKCFkcm1fbW9kZXNldF9pc19sb2NrZWQoJmRldi0+bW9kZV9jb25maWcu Y29ubmVjdGlvbl9tdXRleCkpOwo+ICsJCXJldCA9IGRybV9hdG9taWNfY29ubmVjdG9yX2dldF9w cm9wZXJ0eShjb25uZWN0b3IsCj4gKwkJCQljb25uZWN0b3ItPnN0YXRlLCBwcm9wZXJ0eSwgdmFs KTsKPiArCQlicmVhazsKPiArCX0KPiArCWNhc2UgRFJNX01PREVfT0JKRUNUX0NSVEM6IHsKPiAr CQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBvYmpfdG9fY3J0YyhvYmopOwo+ICsJCVdBUk5fT04o IWRybV9tb2Rlc2V0X2lzX2xvY2tlZCgmY3J0Yy0+bXV0ZXgpKTsKPiArCQlyZXQgPSBkcm1fYXRv bWljX2NydGNfZ2V0X3Byb3BlcnR5KGNydGMsCj4gKwkJCQljcnRjLT5zdGF0ZSwgcHJvcGVydHks IHZhbCk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwljYXNlIERSTV9NT0RFX09CSkVDVF9QTEFORTog ewo+ICsJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gb2JqX3RvX3BsYW5lKG9iaik7Cj4gKwkJ V0FSTl9PTighZHJtX21vZGVzZXRfaXNfbG9ja2VkKCZwbGFuZS0+bXV0ZXgpKTsKPiArCQlyZXQg PSBkcm1fYXRvbWljX3BsYW5lX2dldF9wcm9wZXJ0eShwbGFuZSwKPiArCQkJCXBsYW5lLT5zdGF0 ZSwgcHJvcGVydHksIHZhbCk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwlkZWZhdWx0Ogo+ICsJCXJl dCA9IC1FSU5WQUw7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ ICsKPiArLyoKPiArICogVGhlIGJpZyBtb25zdGVyIGlvY3RsCj4gKyAqLwo+ICsKPiArc3RhdGlj IHN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmNyZWF0ZV92YmxhbmtfZXZlbnQoCj4g KwkJc3RydWN0IGRybV9jcnRjICpjcnRjLCB1aW50NjRfdCB1c2VyX2RhdGEpCj4gK3sKPiArCXN0 cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmUgPSBOVUxMOwo+ICsKPiArCWUgPSBremFs bG9jKHNpemVvZiAqZSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWUpCj4gKwkJcmV0dXJuIE5VTEw7 Cj4gKwo+ICsJZS0+ZXZlbnQuYmFzZS50eXBlID0gRFJNX0VWRU5UX0ZMSVBfQ09NUExFVEU7Cj4g KwllLT5ldmVudC5iYXNlLmxlbmd0aCA9IHNpemVvZihlLT5ldmVudCk7Cj4gKwllLT5ldmVudC52 YmwuY3J0Y19pZCA9IGNydGMtPmJhc2UuaWQ7Cj4gKwllLT5ldmVudC52YmwudXNlcl9kYXRhID0g dXNlcl9kYXRhOwo+ICsKPiArCXJldHVybiBlOwo+ICt9Cj4gKwo+ICtpbnQgZHJtX2F0b21pY19j b25uZWN0b3JfY29tbWl0X2RwbXMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICsJ CQkJICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ICsJCQkJICAgICBpbnQg bW9kZSkKPiArewo+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKnRtcF9jb25uZWN0b3I7Cj4gKwlz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqbmV3X2Nvbm5fc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJt X2NydGMgKmNydGM7Cj4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gKwlp bnQgaSwgcmV0LCBvbGRfbW9kZSA9IGNvbm5lY3Rvci0+ZHBtczsKPiArCWJvb2wgYWN0aXZlID0g ZmFsc2U7Cj4gKwo+ICsJcmV0ID0gZHJtX21vZGVzZXRfbG9jaygmc3RhdGUtPmRldi0+bW9kZV9j b25maWcuY29ubmVjdGlvbl9tdXRleCwKPiArCQkJICAgICAgIHN0YXRlLT5hY3F1aXJlX2N0eCk7 Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJaWYgKG1vZGUgIT0gRFJNX01P REVfRFBNU19PTikKPiArCQltb2RlID0gRFJNX01PREVfRFBNU19PRkY7Cj4gKwljb25uZWN0b3It PmRwbXMgPSBtb2RlOwo+ICsKPiArCWNydGMgPSBjb25uZWN0b3ItPnN0YXRlLT5jcnRjOwo+ICsJ aWYgKCFjcnRjKQo+ICsJCWdvdG8gb3V0Owo+ICsJcmV0ID0gZHJtX2F0b21pY19hZGRfYWZmZWN0 ZWRfY29ubmVjdG9ycyhzdGF0ZSwgY3J0Yyk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gb3V0Owo+ ICsKPiArCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLCBjcnRj KTsKPiArCWlmIChJU19FUlIoY3J0Y19zdGF0ZSkpIHsKPiArCQlyZXQgPSBQVFJfRVJSKGNydGNf c3RhdGUpOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCWZvcl9lYWNoX25ld19jb25uZWN0 b3JfaW5fc3RhdGUoc3RhdGUsIHRtcF9jb25uZWN0b3IsIG5ld19jb25uX3N0YXRlLCBpKSB7Cj4g KwkJaWYgKG5ld19jb25uX3N0YXRlLT5jcnRjICE9IGNydGMpCj4gKwkJCWNvbnRpbnVlOwo+ICsJ CWlmICh0bXBfY29ubmVjdG9yLT5kcG1zID09IERSTV9NT0RFX0RQTVNfT04pIHsKPiArCQkJYWN0 aXZlID0gdHJ1ZTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWNydGNfc3RhdGUt PmFjdGl2ZSA9IGFjdGl2ZTsKPiArCXJldCA9IGRybV9hdG9taWNfY29tbWl0KHN0YXRlKTsKPiAr b3V0Ogo+ICsJaWYgKHJldCAhPSAwKQo+ICsJCWNvbm5lY3Rvci0+ZHBtcyA9IG9sZF9tb2RlOwo+ ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAraW50IGRybV9hdG9taWNfc2V0X3Byb3BlcnR5KHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiArCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9v YmplY3QgKm9iaiwKPiArCQkJICAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3AsCj4gKwkJCSAg ICB1aW50NjRfdCBwcm9wX3ZhbHVlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpy ZWY7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmICghZHJtX3Byb3BlcnR5X2NoYW5nZV92YWxpZF9n ZXQocHJvcCwgcHJvcF92YWx1ZSwgJnJlZikpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJ c3dpdGNoIChvYmotPnR5cGUpIHsKPiArCWNhc2UgRFJNX01PREVfT0JKRUNUX0NPTk5FQ1RPUjog ewo+ICsJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBvYmpfdG9fY29ubmVjdG9y KG9iaik7Cj4gKwkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5lY3Rvcl9zdGF0ZTsK PiArCj4gKwkJY29ubmVjdG9yX3N0YXRlID0gZHJtX2F0b21pY19nZXRfY29ubmVjdG9yX3N0YXRl KHN0YXRlLCBjb25uZWN0b3IpOwo+ICsJCWlmIChJU19FUlIoY29ubmVjdG9yX3N0YXRlKSkgewo+ ICsJCQlyZXQgPSBQVFJfRVJSKGNvbm5lY3Rvcl9zdGF0ZSk7Cj4gKwkJCWJyZWFrOwo+ICsJCX0K PiArCj4gKwkJcmV0ID0gZHJtX2F0b21pY19jb25uZWN0b3Jfc2V0X3Byb3BlcnR5KGNvbm5lY3Rv ciwKPiArCQkJCWNvbm5lY3Rvcl9zdGF0ZSwgcHJvcCwgcHJvcF92YWx1ZSk7Cj4gKwkJYnJlYWs7 Cj4gKwl9Cj4gKwljYXNlIERSTV9NT0RFX09CSkVDVF9DUlRDOiB7Cj4gKwkJc3RydWN0IGRybV9j cnRjICpjcnRjID0gb2JqX3RvX2NydGMob2JqKTsKPiArCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUg KmNydGNfc3RhdGU7Cj4gKwo+ICsJCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jcnRjX3N0 YXRlKHN0YXRlLCBjcnRjKTsKPiArCQlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKSB7Cj4gKwkJCXJl dCA9IFBUUl9FUlIoY3J0Y19zdGF0ZSk7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCj4gKwkJcmV0 ID0gZHJtX2F0b21pY19jcnRjX3NldF9wcm9wZXJ0eShjcnRjLAo+ICsJCQkJY3J0Y19zdGF0ZSwg cHJvcCwgcHJvcF92YWx1ZSk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwljYXNlIERSTV9NT0RFX09C SkVDVF9QTEFORTogewo+ICsJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gb2JqX3RvX3BsYW5l KG9iaik7Cj4gKwkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7Cj4gKwo+ICsJ CXBsYW5lX3N0YXRlID0gZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUoc3RhdGUsIHBsYW5lKTsK PiArCQlpZiAoSVNfRVJSKHBsYW5lX3N0YXRlKSkgewo+ICsJCQlyZXQgPSBQVFJfRVJSKHBsYW5l X3N0YXRlKTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsKPiArCQlyZXQgPSBkcm1fYXRvbWljX3Bs YW5lX3NldF9wcm9wZXJ0eShwbGFuZSwKPiArCQkJCXBsYW5lX3N0YXRlLCBwcm9wLCBwcm9wX3Zh bHVlKTsKPiArCQlicmVhazsKPiArCX0KPiArCWRlZmF1bHQ6Cj4gKwkJcmV0ID0gLUVJTlZBTDsK PiArCQlicmVhazsKPiArCX0KPiArCj4gKwlkcm1fcHJvcGVydHlfY2hhbmdlX3ZhbGlkX3B1dChw cm9wLCByZWYpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIERPQzogZXhw bGljaXQgZmVuY2luZyBwcm9wZXJ0aWVzCj4gKyAqCj4gKyAqIEV4cGxpY2l0IGZlbmNpbmcgYWxs b3dzIHVzZXJzcGFjZSB0byBjb250cm9sIHRoZSBidWZmZXIgc3luY2hyb25pemF0aW9uCj4gKyAq IGJldHdlZW4gZGV2aWNlcy4gQSBGZW5jZSBvciBhIGdyb3VwIG9mIGZlbmNlcyBhcmUgdHJhbnNm ZXJlZCB0by9mcm9tCj4gKyAqIHVzZXJzcGFjZSB1c2luZyBTeW5jIEZpbGUgZmRzIGFuZCB0aGVy ZSBhcmUgdHdvIERSTSBwcm9wZXJ0aWVzIGZvciB0aGF0Lgo+ICsgKiBJTl9GRU5DRV9GRCBvbiBl YWNoIERSTSBQbGFuZSB0byBzZW5kIGZlbmNlcyB0byB0aGUga2VybmVsIGFuZAo+ICsgKiBPVVRf RkVOQ0VfUFRSIG9uIGVhY2ggRFJNIENSVEMgdG8gcmVjZWl2ZSBmZW5jZXMgZnJvbSB0aGUga2Vy bmVsLgo+ICsgKgo+ICsgKiBBcyBhIGNvbnRyYXN0LCB3aXRoIGltcGxpY2l0IGZlbmNpbmcgdGhl IGtlcm5lbCBrZWVwcyB0cmFjayBvZiBhbnkKPiArICogb25nb2luZyByZW5kZXJpbmcsIGFuZCBh dXRvbWF0aWNhbGx5IGVuc3VyZXMgdGhhdCB0aGUgYXRvbWljIHVwZGF0ZSB3YWl0cwo+ICsgKiBm b3IgYW55IHBlbmRpbmcgcmVuZGVyaW5nIHRvIGNvbXBsZXRlLiBGb3Igc2hhcmVkIGJ1ZmZlcnMg cmVwcmVzZW50ZWQgd2l0aAo+ICsgKiBhICZzdHJ1Y3QgZG1hX2J1ZiB0aGlzIGlzIHRyYWNrZWQg aW4gJnN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QuCj4gKyAqIEltcGxpY2l0IHN5bmNpbmcgaXMg aG93IExpbnV4IHRyYWRpdGlvbmFsbHkgd29ya2VkIChlLmcuIERSSTIvMyBvbiBYLm9yZyksCj4g KyAqIHdoZXJlYXMgZXhwbGljaXQgZmVuY2luZyBpcyB3aGF0IEFuZHJvaWQgd2FudHMuCj4gKyAq Cj4gKyAqICJJTl9GRU5DRV9GROKAnToKPiArICoJVXNlIHRoaXMgcHJvcGVydHkgdG8gcGFzcyBh IGZlbmNlIHRoYXQgRFJNIHNob3VsZCB3YWl0IG9uIGJlZm9yZQo+ICsgKglwcm9jZWVkaW5nIHdp dGggdGhlIEF0b21pYyBDb21taXQgcmVxdWVzdCBhbmQgc2hvdyB0aGUgZnJhbWVidWZmZXIgZm9y Cj4gKyAqCXRoZSBwbGFuZSBvbiB0aGUgc2NyZWVuLiBUaGUgZmVuY2UgY2FuIGJlIGVpdGhlciBh IG5vcm1hbCBmZW5jZSBvciBhCj4gKyAqCW1lcmdlZCBvbmUsIHRoZSBzeW5jX2ZpbGUgZnJhbWV3 b3JrIHdpbGwgaGFuZGxlIGJvdGggY2FzZXMgYW5kIHVzZSBhCj4gKyAqCWZlbmNlX2FycmF5IGlm IGEgbWVyZ2VkIGZlbmNlIGlzIHJlY2VpdmVkLiBQYXNzaW5nIC0xIGhlcmUgbWVhbnMgbm8KPiAr ICoJZmVuY2VzIHRvIHdhaXQgb24uCj4gKyAqCj4gKyAqCUlmIHRoZSBBdG9taWMgQ29tbWl0IHJl cXVlc3QgaGFzIHRoZSBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZIGZsYWcKPiArICoJaXQgd2ls bCBvbmx5IGNoZWNrIGlmIHRoZSBTeW5jIEZpbGUgaXMgYSB2YWxpZCBvbmUuCj4gKyAqCj4gKyAq CU9uIHRoZSBkcml2ZXIgc2lkZSB0aGUgZmVuY2UgaXMgc3RvcmVkIG9uIHRoZSBAZmVuY2UgcGFy YW1ldGVyIG9mCj4gKyAqCSZzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlLiBEcml2ZXJzIHdoaWNoIGFs c28gc3VwcG9ydCBpbXBsaWNpdCBmZW5jaW5nCj4gKyAqCXNob3VsZCBzZXQgdGhlIGltcGxpY2l0 IGZlbmNlIHVzaW5nIGRybV9hdG9taWNfc2V0X2ZlbmNlX2Zvcl9wbGFuZSgpLAo+ICsgKgl0byBt YWtlIHN1cmUgdGhlcmUncyBjb25zaXN0ZW50IGJlaGF2aW91ciBiZXR3ZWVuIGRyaXZlcnMgaW4g cHJlY2VkZW5jZQo+ICsgKglvZiBpbXBsaWNpdCB2cy4gZXhwbGljaXQgZmVuY2luZy4KPiArICoK PiArICogIk9VVF9GRU5DRV9QVFLigJ06Cj4gKyAqCVVzZSB0aGlzIHByb3BlcnR5IHRvIHBhc3Mg YSBmaWxlIGRlc2NyaXB0b3IgcG9pbnRlciB0byBEUk0uIE9uY2UgdGhlCj4gKyAqCUF0b21pYyBD b21taXQgcmVxdWVzdCBjYWxsIHJldHVybnMgT1VUX0ZFTkNFX1BUUiB3aWxsIGJlIGZpbGxlZCB3 aXRoCj4gKyAqCXRoZSBmaWxlIGRlc2NyaXB0b3IgbnVtYmVyIG9mIGEgU3luYyBGaWxlLiBUaGlz IFN5bmMgRmlsZSBjb250YWlucyB0aGUKPiArICoJQ1JUQyBmZW5jZSB0aGF0IHdpbGwgYmUgc2ln bmFsZWQgd2hlbiBhbGwgZnJhbWVidWZmZXJzIHByZXNlbnQgb24gdGhlCj4gKyAqCUF0b21pYyBD b21taXQgKiByZXF1ZXN0IGZvciB0aGF0IGdpdmVuIENSVEMgYXJlIHNjYW5uZWQgb3V0IG9uIHRo ZQo+ICsgKglzY3JlZW4uCj4gKyAqCj4gKyAqCVRoZSBBdG9taWMgQ29tbWl0IHJlcXVlc3QgZmFp bHMgaWYgYSBpbnZhbGlkIHBvaW50ZXIgaXMgcGFzc2VkLiBJZiB0aGUKPiArICoJQXRvbWljIENv bW1pdCByZXF1ZXN0IGZhaWxzIGZvciBhbnkgb3RoZXIgcmVhc29uIHRoZSBvdXQgZmVuY2UgZmQK PiArICoJcmV0dXJuZWQgd2lsbCBiZSAtMS4gT24gYSBBdG9taWMgQ29tbWl0IHdpdGggdGhlCj4g KyAqCURSTV9NT0RFX0FUT01JQ19URVNUX09OTFkgZmxhZyB0aGUgb3V0IGZlbmNlIHdpbGwgYWxz byBiZSBzZXQgdG8gLTEuCj4gKyAqCj4gKyAqCU5vdGUgdGhhdCBvdXQtZmVuY2VzIGRvbid0IGhh dmUgYSBzcGVjaWFsIGludGVyZmFjZSB0byBkcml2ZXJzIGFuZCBhcmUKPiArICoJaW50ZXJuYWxs eSByZXByZXNlbnRlZCBieSBhICZzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50IGluIHN0 cnVjdAo+ICsgKgkmZHJtX2NydGNfc3RhdGUsIHdoaWNoIGlzIGFsc28gdXNlZCBieSB0aGUgbm9u YmxvY2tpbmcgYXRvbWljIGNvbW1pdAo+ICsgKgloZWxwZXJzIGFuZCBmb3IgdGhlIERSTSBldmVu dCBoYW5kbGluZyBmb3IgZXhpc3RpbmcgdXNlcnNwYWNlLgo+ICsgKi8KPiArCj4gK3N0cnVjdCBk cm1fb3V0X2ZlbmNlX3N0YXRlIHsKPiArCXMzMiBfX3VzZXIgKm91dF9mZW5jZV9wdHI7Cj4gKwlz dHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGU7Cj4gKwlpbnQgZmQ7Cj4gK307Cj4gKwo+ICtzdGF0 aWMgaW50IHNldHVwX291dF9mZW5jZShzdHJ1Y3QgZHJtX291dF9mZW5jZV9zdGF0ZSAqZmVuY2Vf c3RhdGUsCj4gKwkJCSAgIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQo+ICt7Cj4gKwlmZW5jZV9z dGF0ZS0+ZmQgPSBnZXRfdW51c2VkX2ZkX2ZsYWdzKE9fQ0xPRVhFQyk7Cj4gKwlpZiAoZmVuY2Vf c3RhdGUtPmZkIDwgMCkKPiArCQlyZXR1cm4gZmVuY2Vfc3RhdGUtPmZkOwo+ICsKPiArCWlmIChw dXRfdXNlcihmZW5jZV9zdGF0ZS0+ZmQsIGZlbmNlX3N0YXRlLT5vdXRfZmVuY2VfcHRyKSkKPiAr CQlyZXR1cm4gLUVGQVVMVDsKPiArCj4gKwlmZW5jZV9zdGF0ZS0+c3luY19maWxlID0gc3luY19m aWxlX2NyZWF0ZShmZW5jZSk7Cj4gKwlpZiAoIWZlbmNlX3N0YXRlLT5zeW5jX2ZpbGUpCj4gKwkJ cmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg cHJlcGFyZV9zaWduYWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJCSAgc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICsJCQkJICBzdHJ1Y3QgZHJtX21vZGVfYXRvbWlj ICphcmcsCj4gKwkJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAo+ICsJCQkJICBzdHJ1 Y3QgZHJtX291dF9mZW5jZV9zdGF0ZSAqKmZlbmNlX3N0YXRlLAo+ICsJCQkJICB1bnNpZ25lZCBp bnQgKm51bV9mZW5jZXMpCj4gK3sKPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiArCXN0cnVj dCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uOwo+ICsJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGU7Cj4gKwlpbnQg aSwgYyA9IDAsIHJldDsKPiArCj4gKwlpZiAoYXJnLT5mbGFncyAmIERSTV9NT0RFX0FUT01JQ19U RVNUX09OTFkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJZm9yX2VhY2hfbmV3X2NydGNfaW5fc3Rh dGUoc3RhdGUsIGNydGMsIGNydGNfc3RhdGUsIGkpIHsKPiArCQlzMzIgX191c2VyICpmZW5jZV9w dHI7Cj4gKwo+ICsJCWZlbmNlX3B0ciA9IGdldF9vdXRfZmVuY2VfZm9yX2NydGMoY3J0Y19zdGF0 ZS0+c3RhdGUsIGNydGMpOwo+ICsKPiArCQlpZiAoYXJnLT5mbGFncyAmIERSTV9NT0RFX1BBR0Vf RkxJUF9FVkVOVCB8fCBmZW5jZV9wdHIpIHsKPiArCQkJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFu a19ldmVudCAqZTsKPiArCj4gKwkJCWUgPSBjcmVhdGVfdmJsYW5rX2V2ZW50KGNydGMsIGFyZy0+ dXNlcl9kYXRhKTsKPiArCQkJaWYgKCFlKQo+ICsJCQkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJ CQljcnRjX3N0YXRlLT5ldmVudCA9IGU7Cj4gKwkJfQo+ICsKPiArCQlpZiAoYXJnLT5mbGFncyAm IERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCkgewo+ICsJCQlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJs YW5rX2V2ZW50ICplID0gY3J0Y19zdGF0ZS0+ZXZlbnQ7Cj4gKwo+ICsJCQlpZiAoIWZpbGVfcHJp dikKPiArCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJcmV0ID0gZHJtX2V2ZW50X3Jlc2VydmVfaW5p dChkZXYsIGZpbGVfcHJpdiwgJmUtPmJhc2UsCj4gKwkJCQkJCSAgICAgJmUtPmV2ZW50LmJhc2Up Owo+ICsJCQlpZiAocmV0KSB7Cj4gKwkJCQlrZnJlZShlKTsKPiArCQkJCWNydGNfc3RhdGUtPmV2 ZW50ID0gTlVMTDsKPiArCQkJCXJldHVybiByZXQ7Cj4gKwkJCX0KPiArCQl9Cj4gKwo+ICsJCWlm IChmZW5jZV9wdHIpIHsKPiArCQkJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Cj4gKwkJCXN0cnVj dCBkcm1fb3V0X2ZlbmNlX3N0YXRlICpmOwo+ICsKPiArCQkJZiA9IGtyZWFsbG9jKCpmZW5jZV9z dGF0ZSwgc2l6ZW9mKCoqZmVuY2Vfc3RhdGUpICoKPiArCQkJCSAgICAgKCpudW1fZmVuY2VzICsg MSksIEdGUF9LRVJORUwpOwo+ICsJCQlpZiAoIWYpCj4gKwkJCQlyZXR1cm4gLUVOT01FTTsKPiAr Cj4gKwkJCW1lbXNldCgmZlsqbnVtX2ZlbmNlc10sIDAsIHNpemVvZigqZikpOwo+ICsKPiArCQkJ ZlsqbnVtX2ZlbmNlc10ub3V0X2ZlbmNlX3B0ciA9IGZlbmNlX3B0cjsKPiArCQkJKmZlbmNlX3N0 YXRlID0gZjsKPiArCj4gKwkJCWZlbmNlID0gZHJtX2NydGNfY3JlYXRlX2ZlbmNlKGNydGMpOwo+ ICsJCQlpZiAoIWZlbmNlKQo+ICsJCQkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJCQlyZXQgPSBz ZXR1cF9vdXRfZmVuY2UoJmZbKCpudW1fZmVuY2VzKSsrXSwgZmVuY2UpOwo+ICsJCQlpZiAocmV0 KSB7Cj4gKwkJCQlkbWFfZmVuY2VfcHV0KGZlbmNlKTsKPiArCQkJCXJldHVybiByZXQ7Cj4gKwkJ CX0KPiArCj4gKwkJCWNydGNfc3RhdGUtPmV2ZW50LT5iYXNlLmZlbmNlID0gZmVuY2U7Cj4gKwkJ fQo+ICsKPiArCQljKys7Cj4gKwl9Cj4gKwo+ICsJZm9yX2VhY2hfbmV3X2Nvbm5lY3Rvcl9pbl9z dGF0ZShzdGF0ZSwgY29ubiwgY29ubl9zdGF0ZSwgaSkgewo+ICsJCXN0cnVjdCBkcm1fd3JpdGVi YWNrX2Nvbm5lY3RvciAqd2JfY29ubjsKPiArCQlzdHJ1Y3QgZHJtX3dyaXRlYmFja19qb2IgKmpv YjsKPiArCQlzdHJ1Y3QgZHJtX291dF9mZW5jZV9zdGF0ZSAqZjsKPiArCQlzdHJ1Y3QgZG1hX2Zl bmNlICpmZW5jZTsKPiArCQlzMzIgX191c2VyICpmZW5jZV9wdHI7Cj4gKwo+ICsJCWZlbmNlX3B0 ciA9IGdldF9vdXRfZmVuY2VfZm9yX2Nvbm5lY3RvcihzdGF0ZSwgY29ubik7Cj4gKwkJaWYgKCFm ZW5jZV9wdHIpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlqb2IgPSBkcm1fYXRvbWljX2dldF93 cml0ZWJhY2tfam9iKGNvbm5fc3RhdGUpOwo+ICsJCWlmICgham9iKQo+ICsJCQlyZXR1cm4gLUVO T01FTTsKPiArCj4gKwkJZiA9IGtyZWFsbG9jKCpmZW5jZV9zdGF0ZSwgc2l6ZW9mKCoqZmVuY2Vf c3RhdGUpICoKPiArCQkJICAgICAoKm51bV9mZW5jZXMgKyAxKSwgR0ZQX0tFUk5FTCk7Cj4gKwkJ aWYgKCFmKQo+ICsJCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwkJbWVtc2V0KCZmWypudW1fZmVu Y2VzXSwgMCwgc2l6ZW9mKCpmKSk7Cj4gKwo+ICsJCWZbKm51bV9mZW5jZXNdLm91dF9mZW5jZV9w dHIgPSBmZW5jZV9wdHI7Cj4gKwkJKmZlbmNlX3N0YXRlID0gZjsKPiArCj4gKwkJd2JfY29ubiA9 IGRybV9jb25uZWN0b3JfdG9fd3JpdGViYWNrKGNvbm4pOwo+ICsJCWZlbmNlID0gZHJtX3dyaXRl YmFja19nZXRfb3V0X2ZlbmNlKHdiX2Nvbm4pOwo+ICsJCWlmICghZmVuY2UpCj4gKwkJCXJldHVy biAtRU5PTUVNOwo+ICsKPiArCQlyZXQgPSBzZXR1cF9vdXRfZmVuY2UoJmZbKCpudW1fZmVuY2Vz KSsrXSwgZmVuY2UpOwo+ICsJCWlmIChyZXQpIHsKPiArCQkJZG1hX2ZlbmNlX3B1dChmZW5jZSk7 Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ICsKPiArCQlqb2ItPm91dF9mZW5jZSA9IGZlbmNl Owo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBIYXZpbmcgdGhpcyBmbGFnIG1lYW5zIHVzZXIgbW9k ZSBwZW5kcyBvbiBldmVudCB3aGljaCB3aWxsIG5ldmVyCj4gKwkgKiByZWFjaCBkdWUgdG8gbGFj ayBvZiBhdCBsZWFzdCBvbmUgQ1JUQyBmb3Igc2lnbmFsaW5nCj4gKwkgKi8KPiArCWlmIChjID09 IDAgJiYgKGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQpKQo+ICsJCXJldHVy biAtRUlOVkFMOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb21w bGV0ZV9zaWduYWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJICAgICAgIHN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiArCQkJICAgICAgIHN0cnVjdCBkcm1fb3V0X2Zl bmNlX3N0YXRlICpmZW5jZV9zdGF0ZSwKPiArCQkJICAgICAgIHVuc2lnbmVkIGludCBudW1fZmVu Y2VzLAo+ICsJCQkgICAgICAgYm9vbCBpbnN0YWxsX2ZkcykKPiArewo+ICsJc3RydWN0IGRybV9j cnRjICpjcnRjOwo+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ICsJaW50 IGk7Cj4gKwo+ICsJaWYgKGluc3RhbGxfZmRzKSB7Cj4gKwkJZm9yIChpID0gMDsgaSA8IG51bV9m ZW5jZXM7IGkrKykKPiArCQkJZmRfaW5zdGFsbChmZW5jZV9zdGF0ZVtpXS5mZCwKPiArCQkJCSAg IGZlbmNlX3N0YXRlW2ldLnN5bmNfZmlsZS0+ZmlsZSk7Cj4gKwo+ICsJCWtmcmVlKGZlbmNlX3N0 YXRlKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZm9yX2VhY2hfbmV3X2NydGNfaW5fc3Rh dGUoc3RhdGUsIGNydGMsIGNydGNfc3RhdGUsIGkpIHsKPiArCQlzdHJ1Y3QgZHJtX3BlbmRpbmdf dmJsYW5rX2V2ZW50ICpldmVudCA9IGNydGNfc3RhdGUtPmV2ZW50Owo+ICsJCS8qCj4gKwkJICog RnJlZSB0aGUgYWxsb2NhdGVkIGV2ZW50LiBkcm1fYXRvbWljX2hlbHBlcl9zZXR1cF9jb21taXQK PiArCQkgKiBjYW4gYWxsb2NhdGUgYW4gZXZlbnQgdG9vLCBzbyBvbmx5IGZyZWUgaXQgaWYgaXQn cyBvdXJzCj4gKwkJICogdG8gcHJldmVudCBhIGRvdWJsZSBmcmVlIGluIGRybV9hdG9taWNfc3Rh dGVfY2xlYXIuCj4gKwkJICovCj4gKwkJaWYgKGV2ZW50ICYmIChldmVudC0+YmFzZS5mZW5jZSB8 fCBldmVudC0+YmFzZS5maWxlX3ByaXYpKSB7Cj4gKwkJCWRybV9ldmVudF9jYW5jZWxfZnJlZShk ZXYsICZldmVudC0+YmFzZSk7Cj4gKwkJCWNydGNfc3RhdGUtPmV2ZW50ID0gTlVMTDsKPiArCQl9 Cj4gKwl9Cj4gKwo+ICsJaWYgKCFmZW5jZV9zdGF0ZSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJZm9y IChpID0gMDsgaSA8IG51bV9mZW5jZXM7IGkrKykgewo+ICsJCWlmIChmZW5jZV9zdGF0ZVtpXS5z eW5jX2ZpbGUpCj4gKwkJCWZwdXQoZmVuY2Vfc3RhdGVbaV0uc3luY19maWxlLT5maWxlKTsKPiAr CQlpZiAoZmVuY2Vfc3RhdGVbaV0uZmQgPj0gMCkKPiArCQkJcHV0X3VudXNlZF9mZChmZW5jZV9z dGF0ZVtpXS5mZCk7Cj4gKwo+ICsJCS8qIElmIHRoaXMgZmFpbHMgbG9nIGVycm9yIHRvIHRoZSB1 c2VyICovCj4gKwkJaWYgKGZlbmNlX3N0YXRlW2ldLm91dF9mZW5jZV9wdHIgJiYKPiArCQkgICAg cHV0X3VzZXIoLTEsIGZlbmNlX3N0YXRlW2ldLm91dF9mZW5jZV9wdHIpKQo+ICsJCQlEUk1fREVC VUdfQVRPTUlDKCJDb3VsZG4ndCBjbGVhciBvdXRfZmVuY2VfcHRyXG4iKTsKPiArCX0KPiArCj4g KwlrZnJlZShmZW5jZV9zdGF0ZSk7Cj4gK30KPiArCj4gK2ludCBkcm1fbW9kZV9hdG9taWNfaW9j dGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGVfcHJpdikKPiArewo+ICsJc3RydWN0IGRybV9tb2RlX2F0b21pYyAqYXJnID0g ZGF0YTsKPiArCXVpbnQzMl90IF9fdXNlciAqb2Jqc19wdHIgPSAodWludDMyX3QgX191c2VyICop KHVuc2lnbmVkIGxvbmcpKGFyZy0+b2Jqc19wdHIpOwo+ICsJdWludDMyX3QgX191c2VyICpjb3Vu dF9wcm9wc19wdHIgPSAodWludDMyX3QgX191c2VyICopKHVuc2lnbmVkIGxvbmcpKGFyZy0+Y291 bnRfcHJvcHNfcHRyKTsKPiArCXVpbnQzMl90IF9fdXNlciAqcHJvcHNfcHRyID0gKHVpbnQzMl90 IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKShhcmctPnByb3BzX3B0cik7Cj4gKwl1aW50NjRfdCBf X3VzZXIgKnByb3BfdmFsdWVzX3B0ciA9ICh1aW50NjRfdCBfX3VzZXIgKikodW5zaWduZWQgbG9u ZykoYXJnLT5wcm9wX3ZhbHVlc19wdHIpOwo+ICsJdW5zaWduZWQgaW50IGNvcGllZF9vYmpzLCBj b3BpZWRfcHJvcHM7Cj4gKwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGU7Cj4gKwlzdHJ1 Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggY3R4Owo+ICsJc3RydWN0IGRybV9vdXRfZmVuY2Vf c3RhdGUgKmZlbmNlX3N0YXRlOwo+ICsJaW50IHJldCA9IDA7Cj4gKwl1bnNpZ25lZCBpbnQgaSwg aiwgbnVtX2ZlbmNlczsKPiArCj4gKwkvKiBkaXNhbGxvdyBmb3IgZHJpdmVycyBub3Qgc3VwcG9y dGluZyBhdG9taWM6ICovCj4gKwlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklW RVJfQVRPTUlDKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwkvKiBkaXNhbGxvdyBmb3Ig dXNlcnNwYWNlIHRoYXQgaGFzIG5vdCBlbmFibGVkIGF0b21pYyBjYXAgKGV2ZW4KPiArCSAqIHRo b3VnaCB0aGlzIG1heSBiZSBhIGJpdCBvdmVya2lsbCwgc2luY2UgbGVnYWN5IHVzZXJzcGFjZQo+ ICsJICogd291bGRuJ3Qga25vdyBob3cgdG8gY2FsbCB0aGlzIGlvY3RsKQo+ICsJICovCj4gKwlp ZiAoIWZpbGVfcHJpdi0+YXRvbWljKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWlmIChh cmctPmZsYWdzICYgfkRSTV9NT0RFX0FUT01JQ19GTEFHUykKPiArCQlyZXR1cm4gLUVJTlZBTDsK PiArCj4gKwlpZiAoYXJnLT5yZXNlcnZlZCkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlp ZiAoKGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9QQUdFX0ZMSVBfQVNZTkMpICYmCj4gKwkJCSFkZXYt Pm1vZGVfY29uZmlnLmFzeW5jX3BhZ2VfZmxpcCkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4g KwkvKiBjYW4ndCB0ZXN0IGFuZCBleHBlY3QgYW4gZXZlbnQgYXQgdGhlIHNhbWUgdGltZS4gKi8K PiArCWlmICgoYXJnLT5mbGFncyAmIERSTV9NT0RFX0FUT01JQ19URVNUX09OTFkpICYmCj4gKwkJ CShhcmctPmZsYWdzICYgRFJNX01PREVfUEFHRV9GTElQX0VWRU5UKSkKPiArCQlyZXR1cm4gLUVJ TlZBTDsKPiArCj4gKwlkcm1fbW9kZXNldF9hY3F1aXJlX2luaXQoJmN0eCwgRFJNX01PREVTRVRf QUNRVUlSRV9JTlRFUlJVUFRJQkxFKTsKPiArCj4gKwlzdGF0ZSA9IGRybV9hdG9taWNfc3RhdGVf YWxsb2MoZGV2KTsKPiArCWlmICghc3RhdGUpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJ c3RhdGUtPmFjcXVpcmVfY3R4ID0gJmN0eDsKPiArCXN0YXRlLT5hbGxvd19tb2Rlc2V0ID0gISEo YXJnLT5mbGFncyAmIERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VUKTsKPiArCj4gK3JldHJ5 Ogo+ICsJY29waWVkX29ianMgPSAwOwo+ICsJY29waWVkX3Byb3BzID0gMDsKPiArCWZlbmNlX3N0 YXRlID0gTlVMTDsKPiArCW51bV9mZW5jZXMgPSAwOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBh cmctPmNvdW50X29ianM7IGkrKykgewo+ICsJCXVpbnQzMl90IG9ial9pZCwgY291bnRfcHJvcHM7 Cj4gKwkJc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqOwo+ICsKPiArCQlpZiAoZ2V0X3VzZXIo b2JqX2lkLCBvYmpzX3B0ciArIGNvcGllZF9vYmpzKSkgewo+ICsJCQlyZXQgPSAtRUZBVUxUOwo+ ICsJCQlnb3RvIG91dDsKPiArCQl9Cj4gKwo+ICsJCW9iaiA9IGRybV9tb2RlX29iamVjdF9maW5k KGRldiwgZmlsZV9wcml2LCBvYmpfaWQsIERSTV9NT0RFX09CSkVDVF9BTlkpOwo+ICsJCWlmICgh b2JqKSB7Cj4gKwkJCXJldCA9IC1FTk9FTlQ7Cj4gKwkJCWdvdG8gb3V0Owo+ICsJCX0KPiArCj4g KwkJaWYgKCFvYmotPnByb3BlcnRpZXMpIHsKPiArCQkJZHJtX21vZGVfb2JqZWN0X3B1dChvYmop Owo+ICsJCQlyZXQgPSAtRU5PRU5UOwo+ICsJCQlnb3RvIG91dDsKPiArCQl9Cj4gKwo+ICsJCWlm IChnZXRfdXNlcihjb3VudF9wcm9wcywgY291bnRfcHJvcHNfcHRyICsgY29waWVkX29ianMpKSB7 Cj4gKwkJCWRybV9tb2RlX29iamVjdF9wdXQob2JqKTsKPiArCQkJcmV0ID0gLUVGQVVMVDsKPiAr CQkJZ290byBvdXQ7Cj4gKwkJfQo+ICsKPiArCQljb3BpZWRfb2JqcysrOwo+ICsKPiArCQlmb3Ig KGogPSAwOyBqIDwgY291bnRfcHJvcHM7IGorKykgewo+ICsJCQl1aW50MzJfdCBwcm9wX2lkOwo+ ICsJCQl1aW50NjRfdCBwcm9wX3ZhbHVlOwo+ICsJCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9w Owo+ICsKPiArCQkJaWYgKGdldF91c2VyKHByb3BfaWQsIHByb3BzX3B0ciArIGNvcGllZF9wcm9w cykpIHsKPiArCQkJCWRybV9tb2RlX29iamVjdF9wdXQob2JqKTsKPiArCQkJCXJldCA9IC1FRkFV TFQ7Cj4gKwkJCQlnb3RvIG91dDsKPiArCQkJfQo+ICsKPiArCQkJcHJvcCA9IGRybV9tb2RlX29i al9maW5kX3Byb3BfaWQob2JqLCBwcm9wX2lkKTsKPiArCQkJaWYgKCFwcm9wKSB7Cj4gKwkJCQlk cm1fbW9kZV9vYmplY3RfcHV0KG9iaik7Cj4gKwkJCQlyZXQgPSAtRU5PRU5UOwo+ICsJCQkJZ290 byBvdXQ7Cj4gKwkJCX0KPiArCj4gKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmcHJvcF92YWx1ZSwK PiArCQkJCQkgICBwcm9wX3ZhbHVlc19wdHIgKyBjb3BpZWRfcHJvcHMsCj4gKwkJCQkJICAgc2l6 ZW9mKHByb3BfdmFsdWUpKSkgewo+ICsJCQkJZHJtX21vZGVfb2JqZWN0X3B1dChvYmopOwo+ICsJ CQkJcmV0ID0gLUVGQVVMVDsKPiArCQkJCWdvdG8gb3V0Owo+ICsJCQl9Cj4gKwo+ICsJCQlyZXQg PSBkcm1fYXRvbWljX3NldF9wcm9wZXJ0eShzdGF0ZSwgb2JqLCBwcm9wLAo+ICsJCQkJCQkgICAg ICBwcm9wX3ZhbHVlKTsKPiArCQkJaWYgKHJldCkgewo+ICsJCQkJZHJtX21vZGVfb2JqZWN0X3B1 dChvYmopOwo+ICsJCQkJZ290byBvdXQ7Cj4gKwkJCX0KPiArCj4gKwkJCWNvcGllZF9wcm9wcysr Owo+ICsJCX0KPiArCj4gKwkJZHJtX21vZGVfb2JqZWN0X3B1dChvYmopOwo+ICsJfQo+ICsKPiAr CXJldCA9IHByZXBhcmVfc2lnbmFsaW5nKGRldiwgc3RhdGUsIGFyZywgZmlsZV9wcml2LCAmZmVu Y2Vfc3RhdGUsCj4gKwkJCQkmbnVtX2ZlbmNlcyk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gb3V0 Owo+ICsKPiArCWlmIChhcmctPmZsYWdzICYgRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSkgewo+ ICsJCXJldCA9IGRybV9hdG9taWNfY2hlY2tfb25seShzdGF0ZSk7Cj4gKwl9IGVsc2UgaWYgKGFy Zy0+ZmxhZ3MgJiBEUk1fTU9ERV9BVE9NSUNfTk9OQkxPQ0spIHsKPiArCQlyZXQgPSBkcm1fYXRv bWljX25vbmJsb2NraW5nX2NvbW1pdChzdGF0ZSk7Cj4gKwl9IGVsc2Ugewo+ICsJCWlmICh1bmxp a2VseShkcm1fZGVidWcgJiBEUk1fVVRfU1RBVEUpKQo+ICsJCQlkcm1fYXRvbWljX3ByaW50X3N0 YXRlKHN0YXRlKTsKPiArCj4gKwkJcmV0ID0gZHJtX2F0b21pY19jb21taXQoc3RhdGUpOwo+ICsJ fQo+ICsKPiArb3V0Ogo+ICsJY29tcGxldGVfc2lnbmFsaW5nKGRldiwgc3RhdGUsIGZlbmNlX3N0 YXRlLCBudW1fZmVuY2VzLCAhcmV0KTsKPiArCj4gKwlpZiAocmV0ID09IC1FREVBRExLKSB7Cj4g KwkJZHJtX2F0b21pY19zdGF0ZV9jbGVhcihzdGF0ZSk7Cj4gKwkJcmV0ID0gZHJtX21vZGVzZXRf YmFja29mZigmY3R4KTsKPiArCQlpZiAoIXJldCkKPiArCQkJZ290byByZXRyeTsKPiArCX0KPiAr Cj4gKwlkcm1fYXRvbWljX3N0YXRlX3B1dChzdGF0ZSk7Cj4gKwo+ICsJZHJtX21vZGVzZXRfZHJv cF9sb2NrcygmY3R4KTsKPiArCWRybV9tb2Rlc2V0X2FjcXVpcmVfZmluaSgmY3R4KTsKPiArCj4g KwlyZXR1cm4gcmV0Owo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0 Y19oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYwo+IGluZGV4IDVh ODRjM2JjOTE1ZC4uY2U3NWU5NTA2ZTg1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9k cm1fY3J0Y19oZWxwZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIu Ywo+IEBAIC0zNSw2ICszNSw3IEBACj4gIAo+ICAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiAgI2lu Y2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY191YXBp Lmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fZW5j b2Rlci5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2RybV9jcnRjX2ludGVybmFsLmggYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Ny dGNfaW50ZXJuYWwuaAo+IGluZGV4IGZmNWUwZDUyMWMyMS4uZWRlMjBiNTVkNTBjIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19pbnRlcm5hbC5oCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2RybV9jcnRjX2ludGVybmFsLmgKPiBAQCAtMjA0LDYgKzIwNCw5IEBAIHN0cnVj dCBkcm1fbWlub3I7Cj4gIGludCBkcm1fYXRvbWljX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21p bm9yICptaW5vcik7Cj4gICNlbmRpZgo+ICAKPiArdm9pZCBkcm1fYXRvbWljX3ByaW50X3N0YXRl KGNvbnN0IHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7Cj4gKwo+ICsvKiBkcm1fYXRv bWljX3VhcGkuYyAqLwo+ICBpbnQgZHJtX2F0b21pY19jb25uZWN0b3JfY29tbWl0X2RwbXMoc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICAJCQkJICAgICBzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yLAo+ICAJCQkJICAgICBpbnQgbW9kZSk7Cj4gQEAgLTIxMyw2ICsyMTYs OCBAQCBpbnQgZHJtX2F0b21pY19zZXRfcHJvcGVydHkoc3RydWN0IGRybV9hdG9taWNfc3RhdGUg KnN0YXRlLAo+ICAJCQkgICAgdWludDY0X3QgcHJvcF92YWx1ZSk7Cj4gIGludCBkcm1fYXRvbWlj X2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmosCj4gIAkJCSAgICBzdHJ1 Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0X3QgKnZhbCk7Cj4gKwo+ICsvKiBJT0NU TCAqLwo+ICBpbnQgZHJtX21vZGVfYXRvbWljX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Cj4gIAkJCSAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwo+ICAKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mcmFtZWJ1ZmZlci5jIGIvZHJpdmVycy9n cHUvZHJtL2RybV9mcmFtZWJ1ZmZlci5jCj4gaW5kZXggNzgxYWYxZDQyZDc2Li43Y2E4Yzc3MjIz Y2IgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mcmFtZWJ1ZmZlci5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2RybV9mcmFtZWJ1ZmZlci5jCj4gQEAgLTI1LDYgKzI1LDcgQEAK PiAgI2luY2x1ZGUgPGRybS9kcm1fYXV0aC5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9mcmFtZWJ1 ZmZlci5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KPiArI2luY2x1ZGUgPGRybS9k cm1fYXRvbWljX3VhcGkuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4KPiAgCj4gICNp bmNsdWRlICJkcm1faW50ZXJuYWwuaCIKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ry bV9nZW1fZnJhbWVidWZmZXJfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9mcmFt ZWJ1ZmZlcl9oZWxwZXIuYwo+IGluZGV4IDI4MTBkNDEzMTQxMS4uNzYwN2Y5Y2Q2Zjc3IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2ZyYW1lYnVmZmVyX2hlbHBlci5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZnJhbWVidWZmZXJfaGVscGVyLmMKPiBAQCAt MTYsNiArMTYsNyBAQAo+ICAKPiAgI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gICNpbmNsdWRlIDxk cm0vZHJtX2F0b21pYy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfdWFwaS5oPgo+ICAj aW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fZm91cmNj Lmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2ZyYW1lYnVmZmVyLmg+Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9kcm1fcGxhbmVfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Bs YW5lX2hlbHBlci5jCj4gaW5kZXggNjIxZjE3NjQzYmIwLi5hMzkzNzU2YjY2NGUgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9wbGFuZV9oZWxwZXIuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fcGxhbmVfaGVscGVyLmMKPiBAQCAtMjgsNiArMjgsNyBAQAo+ICAjaW5jbHVk ZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fcmVjdC5oPgo+ ICAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWlj X3VhcGkuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiAgI2luY2x1ZGUg PGRybS9kcm1fZW5jb2Rlci5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+ Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IGluZGV4IGE4NWE4M2YzMTk3OS4u ODVjYWQxNmYzMWVkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rp c3BsYXkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IEBA IC00Niw2ICs0Niw3IEBACj4gICNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gICNp bmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9yZWN0 Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY191YXBpLmg+Cj4gICNpbmNsdWRlIDxsaW51 eC9kbWFfcmVtYXBwaW5nLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9yZXNlcnZhdGlvbi5oPgo+ICAK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fYXRvbWljLmMgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL21zbV9hdG9taWMuYwo+IGluZGV4IGMxZjE3NzljOTgwZi4uNGJjZGVjYTc0 NzlkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2F0b21pYy5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fYXRvbWljLmMKPiBAQCAtMTUsNiArMTUsOCBAQAo+ ICAgKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCj4gICAqLwo+ICAKPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX3VhcGkuaD4KPiAr Cj4gICNpbmNsdWRlICJtc21fZHJ2LmgiCj4gICNpbmNsdWRlICJtc21fZ2VtLmgiCj4gICNpbmNs dWRlICJtc21fa21zLmgiCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Ny dGMuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2NydGMuYwo+IGluZGV4IDBlNmExMjE4NThk MS4uM2NlMTM2YmE4NzkxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Ny dGMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2NydGMuYwo+IEBAIC0zNSw2ICsz NSw3IEBACj4gICNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgo+ICAjaW5jbHVkZSA8ZHJtL2Ry bV9hdG9taWNfaGVscGVyLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4g KyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY191YXBpLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9jbGsu aD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgo+ICAjaW5jbHVkZSA8bGlu dXgvY29tcG9uZW50Lmg+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3Bs YW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wbGFuZS5jCj4gaW5kZXggNmM2ZDM3YWE1 MTJhLi45ZGMzZmNiZDI5MGIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRf cGxhbmUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BsYW5lLmMKPiBAQCAtMjIs NiArMjIsNyBAQAo+ICAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gICNpbmNs dWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVf aGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY191YXBpLmg+Cj4gIAo+ICAjaW5j bHVkZSAidWFwaS9kcm0vdmM0X2RybS5oIgo+ICAjaW5jbHVkZSAidmM0X2Rydi5oIgo+IGRpZmYg LS1naXQgYS9pbmNsdWRlL2RybS9kcm1fYXRvbWljLmggYi9pbmNsdWRlL2RybS9kcm1fYXRvbWlj LmgKPiBpbmRleCA2NmU0OWVmN2QzYjUuLjRhZmY0MDg4NmFjYiAxMDA2NDQKPiAtLS0gYS9pbmNs dWRlL2RybS9kcm1fYXRvbWljLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fYXRvbWljLmgKPiBA QCAtNTg0LDIyICs1ODQsNiBAQCBfX2RybV9hdG9taWNfZ2V0X2N1cnJlbnRfcGxhbmVfc3RhdGUo c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICAJcmV0dXJuIHBsYW5lLT5zdGF0ZTsK PiAgfQo+ICAKPiAtaW50IF9fbXVzdF9jaGVjawo+IC1kcm1fYXRvbWljX3NldF9tb2RlX2Zvcl9j cnRjKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsCj4gLQkJCSAgICAgY29uc3Qgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOwo+IC1pbnQgX19tdXN0X2NoZWNrCj4gLWRybV9hdG9t aWNfc2V0X21vZGVfcHJvcF9mb3JfY3J0YyhzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlLAo+ IC0JCQkJICBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2IpOwo+IC1pbnQgX19tdXN0X2No ZWNrCj4gLWRybV9hdG9taWNfc2V0X2NydGNfZm9yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlLAo+IC0JCQkgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+IC12 b2lkIGRybV9hdG9taWNfc2V0X2ZiX2Zvcl9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZSwKPiAtCQkJCSBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYik7Cj4gLXZvaWQg ZHJtX2F0b21pY19zZXRfZmVuY2VfZm9yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBs YW5lX3N0YXRlLAo+IC0JCQkJICAgIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKTsKPiAtaW50IF9f bXVzdF9jaGVjawo+IC1kcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9jb25uZWN0b3Ioc3RydWN0IGRy bV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUsCj4gLQkJCQkgIHN0cnVjdCBkcm1fY3J0YyAq Y3J0Yyk7Cj4gIGludCBfX211c3RfY2hlY2sKPiAgZHJtX2F0b21pY19hZGRfYWZmZWN0ZWRfY29u bmVjdG9ycyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gIAkJCQkgICBzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fYXRvbWljX3Vh cGkuaCBiL2luY2x1ZGUvZHJtL2RybV9hdG9taWNfdWFwaS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjhjZWM1MmFkMTI3Nwo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9pbmNsdWRlL2RybS9kcm1fYXRvbWljX3VhcGkuaAo+IEBAIC0wLDAgKzEsNTggQEAKPiAr LyoKPiArICogQ29weXJpZ2h0IChDKSAyMDE0IFJlZCBIYXQKPiArICogQ29weXJpZ2h0IChDKSAy MDE0IEludGVsIENvcnAuCj4gKyAqIENvcHlyaWdodCAoQykgMjAxOCBJbnRlbCBDb3JwLgo+ICsg Kgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBk ZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91 dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiAr ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KPiArICogYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCj4gKyAqCj4gKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwKPiArICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJM RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCj4gKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAo+ICsgKiBBUklT SU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IKPiArICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsg KiBBdXRob3JzOgo+ICsgKiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+Cj4gKyAqIERh bmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cj4gKyAqLwo+ICsKPiArI2lmbmRl ZiBEUk1fQVRPTUlDX1VBUElfSF8KPiArI2RlZmluZSBEUk1fQVRPTUlDX1VBUElfSF8KPiArCj4g K3N0cnVjdCBkcm1fY3J0Y19zdGF0ZTsKPiArc3RydWN0IGRybV9kaXNwbGF5X21vZGU7Cj4gK3N0 cnVjdCBkcm1fcHJvcGVydHlfYmxvYjsKPiArc3RydWN0IGRybV9wbGFuZV9zdGF0ZTsKPiArc3Ry dWN0IGRybV9jcnRjOwo+ICtzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZTsKPiArc3RydWN0IGRt YV9mZW5jZTsKPiArc3RydWN0IGRybV9mcmFtZWJ1ZmZlcjsKPiArCj4gK2ludCBfX211c3RfY2hl Y2sKPiArZHJtX2F0b21pY19zZXRfbW9kZV9mb3JfY3J0YyhzdHJ1Y3QgZHJtX2NydGNfc3RhdGUg KnN0YXRlLAo+ICsJCQkgICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsK PiAraW50IF9fbXVzdF9jaGVjawo+ICtkcm1fYXRvbWljX3NldF9tb2RlX3Byb3BfZm9yX2NydGMo c3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwKPiArCQkJCSAgc3RydWN0IGRybV9wcm9wZXJ0 eV9ibG9iICpibG9iKTsKPiAraW50IF9fbXVzdF9jaGVjawo+ICtkcm1fYXRvbWljX3NldF9jcnRj X2Zvcl9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKPiArCQkJICAg ICAgc3RydWN0IGRybV9jcnRjICpjcnRjKTsKPiArdm9pZCBkcm1fYXRvbWljX3NldF9mYl9mb3Jf cGxhbmUoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCj4gKwkJCQkgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIpOwo+ICt2b2lkIGRybV9hdG9taWNfc2V0X2ZlbmNlX2Zvcl9w bGFuZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKPiArCQkJCSAgICBzdHJ1 Y3QgZG1hX2ZlbmNlICpmZW5jZSk7Cj4gK2ludCBfX211c3RfY2hlY2sKPiArZHJtX2F0b21pY19z ZXRfY3J0Y19mb3JfY29ubmVjdG9yKHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0 YXRlLAo+ICsJCQkJICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ICsKPiArI2VuZGlmCj4gLS0g Cj4gMi4xOC4wCj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eAo=