From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: Re: [PATCH v3] vhost: introduce mdev based hardware backend Date: Wed, 30 Oct 2019 15:07:12 +0800 Message-ID: <1a7a10c7-0772-8fce-fb18-78c2dcf15fbc__34370.5405526393$1572419302$gmane$org@redhat.com> References: <20191029100734.9861-1-tiwei.bie@intel.com> <20191030055228.GA9578@___> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20191030055228.GA9578@___> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: Tiwei Bie Cc: kvm@vger.kernel.org, mst@redhat.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, zhihong.wang@intel.com, maxime.coquelin@redhat.com, lingshan.zhu@intel.com List-Id: virtualization@lists.linuxfoundation.org Ck9uIDIwMTkvMTAvMzAg5LiL5Y2IMTo1MiwgVGl3ZWkgQmllIHdyb3RlOgo+IE9uIFdlZCwgT2N0 IDMwLCAyMDE5IGF0IDA5OjU1OjU3QU0gKzA4MDAsIEphc29uIFdhbmcgd3JvdGU6Cj4+IE9uIDIw MTkvMTAvMjkg5LiL5Y2INjowNywgVGl3ZWkgQmllIHdyb3RlOgo+Pj4gVGhpcyBwYXRjaCBpbnRy b2R1Y2VzIGEgbWRldiBiYXNlZCBoYXJkd2FyZSB2aG9zdCBiYWNrZW5kLgo+Pj4gVGhpcyBiYWNr ZW5kIGlzIGJ1aWx0IG9uIHRvcCBvZiB0aGUgc2FtZSBhYnN0cmFjdGlvbiB1c2VkCj4+PiBpbiB2 aXJ0aW8tbWRldiBhbmQgcHJvdmlkZXMgYSBnZW5lcmljIHZob3N0IGludGVyZmFjZSBmb3IKPj4+ IHVzZXJzcGFjZSB0byBhY2NlbGVyYXRlIHRoZSB2aXJ0aW8gZGV2aWNlcyBpbiBndWVzdC4KPj4+ Cj4+PiBUaGlzIGJhY2tlbmQgaXMgaW1wbGVtZW50ZWQgYXMgYSBtZGV2IGRldmljZSBkcml2ZXIg b24gdG9wCj4+PiBvZiB0aGUgc2FtZSBtZGV2IGRldmljZSBvcHMgdXNlZCBpbiB2aXJ0aW8tbWRl diBidXQgdXNpbmcKPj4+IGEgZGlmZmVyZW50IG1kZXYgY2xhc3MgaWQsIGFuZCBpdCB3aWxsIHJl Z2lzdGVyIHRoZSBkZXZpY2UKPj4+IGFzIGEgVkZJTyBkZXZpY2UgZm9yIHVzZXJzcGFjZSB0byB1 c2UuIFVzZXJzcGFjZSBjYW4gc2V0dXAKPj4+IHRoZSBJT01NVSB3aXRoIHRoZSBleGlzdGluZyBW RklPIGNvbnRhaW5lci9ncm91cCBBUElzIGFuZAo+Pj4gdGhlbiBnZXQgdGhlIGRldmljZSBmZCB3 aXRoIHRoZSBkZXZpY2UgbmFtZS4gQWZ0ZXIgZ2V0dGluZwo+Pj4gdGhlIGRldmljZSBmZCBvZiB0 aGlzIGRldmljZSwgdXNlcnNwYWNlIGNhbiB1c2Ugdmhvc3QgaW9jdGxzCj4+PiB0byBzZXR1cCB0 aGUgYmFja2VuZC4KPj4KPj4gSGkgVGl3ZWk6Cj4+Cj4+IFRoZSBwYXRjaCBsb29rcyBnb29kIG92 ZXJhbGwsIGp1c3QgZmV3IGNvbW1lbnRzICYgbml0cy4KPiBUaGFua3MgZm9yIHRoZSByZXZpZXch IEkgZG8gYXBwcmVjaWF0ZSBpdC4KCgpZb3UncmUgd2VsY29tZSA6KQoKCj4KPj4KPj4+IFNpZ25l ZC1vZmYtYnk6IFRpd2VpIEJpZSA8dGl3ZWkuYmllQGludGVsLmNvbT4KPj4+IC0tLQo+Pj4gVGhp cyBwYXRjaCBkZXBlbmRzIG9uIGJlbG93IHNlcmllczoKPj4+IGh0dHBzOi8vbGttbC5vcmcvbGtt bC8yMDE5LzEwLzIzLzYxNAo+Pj4KPj4+IHYyIC0+IHYzOgo+Pj4gLSBGaXggdGhlIHJldHVybiB2 YWx1ZSAoSmFzb24pOwo+Pj4gLSBEb24ndCBjYWNoZSB1bm5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBp biB2aG9zdC1tZGV2IChKYXNvbik7Cj4+PiAtIEdldCByaWQgb2YgdGhlIG1lbXNldCBpbiBvcGVu IChKYXNvbik7Cj4+PiAtIEFkZCBjb21tZW50cyBmb3IgVkhPU1RfU0VUX01FTV9UQUJMRSwgLi4u IChKYXNvbik7Cj4+PiAtIEZpbHRlciBvdXQgdW5zdXBwb3J0ZWQgZmVhdHVyZXMgaW4gdmhvc3Qt bWRldiAoSmFzb24pOwo+Pj4gLSBBZGQgX0dFVF9ERVZJQ0VfSUQgaW9jdGwgKEphc29uKTsKPj4+ IC0gQWRkIF9HRVRfQ09ORklHL19TRVRfQ09ORklHIGlvY3RscyAoSmFzb24pOwo+Pj4gLSBEcm9w IF9HRVRfUVVFVUVfTlVNIGlvY3RsIChKYXNvbik7Cj4+PiAtIEZpeCB0aGUgY29weS1wYXN0ZSBl cnJvcnMgaW4gX0lPVy9fSU9SIHVzYWdlOwo+Pj4gLSBTb21lIG1pbm9yIGZpeGVzIGFuZCBpbXBy b3ZlbWVudHM7Cj4+Pgo+Pj4gdjEgLT4gdjI6Cj4+PiAtIFJlcGxhY2UgX1NFVF9TVEFURSB3aXRo IF9TRVRfU1RBVFVTIChNU1QpOwo+Pj4gLSBDaGVjayBzdGF0dXMgYml0cyBhdCBlYWNoIHN0ZXAg KE1TVCk7Cj4+PiAtIFJlcG9ydCB0aGUgbWF4IHJpbmcgc2l6ZSBhbmQgbWF4IG51bWJlciBvZiBx dWV1ZXMgKE1TVCk7Cj4+PiAtIEFkZCBtaXNzaW5nIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKEphc29u KTsKPj4+IC0gT25seSBzdXBwb3J0IHRoZSBuZXR3b3JrIGJhY2tlbmQgdy9vIG11bHRpcXVldWUg Zm9yIG5vdzsKPj4+IC0gU29tZSBtaW5vciBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzOwo+Pj4gLSBS ZWJhc2Ugb24gdG9wIG9mIHZpcnRpby1tZGV2IHNlcmllcyB2NDsKPj4+Cj4+PiBSRkMgdjQgLT4g djE6Cj4+PiAtIEltcGxlbWVudCB2aG9zdC1tZGV2IGFzIGEgbWRldiBkZXZpY2UgZHJpdmVyIGRp cmVjdGx5IGFuZAo+Pj4gICBjb25uZWN0IGl0IHRvIFZGSU8gY29udGFpbmVyL2dyb3VwLiAoSmFz b24pOwo+Pj4gLSBQYXNzIHJpbmcgYWRkcmVzc2VzIGFzIEdQQXMvSU9WQXMgaW4gdmhvc3QtbWRl diB0byBhdm9pZAo+Pj4gICBtZWFuaW5nbGVzcyBIVkEtPkdQQSB0cmFuc2xhdGlvbnMgKEphc29u KTsKPj4+Cj4+PiBSRkMgdjMgLT4gUkZDIHY0Ogo+Pj4gLSBCdWlsZCB2aG9zdC1tZGV2IG9uIHRv cCBvZiB0aGUgc2FtZSBhYnN0cmFjdGlvbiB1c2VkIGJ5Cj4+PiAgIHZpcnRpby1tZGV2IChKYXNv bik7Cj4+PiAtIEludHJvZHVjZSB2aG9zdCBmZCBhbmQgcGFzcyBWRklPIGZkIHZpYSBTRVRfQkFD S0VORCBpb2N0bCAoTVNUKTsKPj4+Cj4+PiBSRkMgdjIgLT4gUkZDIHYzOgo+Pj4gLSBSZXVzZSB2 aG9zdCdzIGlvY3RscyBpbnN0ZWFkIG9mIGludmVudGluZyBhIFZGSU8gcmVnaW9ucy9pcnFzCj4+ PiAgIGJhc2VkIHZob3N0IHByb3RvY29sIG9uIHRvcCBvZiB2ZmlvLW1kZXYgKEphc29uKTsKPj4+ Cj4+PiBSRkMgdjEgLT4gUkZDIHYyOgo+Pj4gLSBJbnRyb2R1Y2UgYSBuZXcgVkZJTyBkZXZpY2Ug dHlwZSB0byBidWlsZCBhIHZob3N0IHByb3RvY29sCj4+PiAgIG9uIHRvcCBvZiB2ZmlvLW1kZXY7 Cj4+Pgo+Pj4gIGRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jICAgIHwgIDIwICsrCj4+PiAg ZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmggfCAgIDEgKwo+Pj4gIGRyaXZlcnMvdmhv c3QvS2NvbmZpZyAgICAgICAgICAgIHwgIDEyICsKPj4+ICBkcml2ZXJzL3Zob3N0L01ha2VmaWxl ICAgICAgICAgICB8ICAgMyArCj4+PiAgZHJpdmVycy92aG9zdC9tZGV2LmMgICAgICAgICAgICAg fCA1NTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+Pj4gIGluY2x1ZGUvbGludXgv bWRldi5oICAgICAgICAgICAgIHwgICA1ICsKPj4+ICBpbmNsdWRlL3VhcGkvbGludXgvdmhvc3Qu aCAgICAgICB8ICAxOCArCj4+PiAgaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0X3R5cGVzLmggfCAg IDggKwo+Pj4gIDggZmlsZXMgY2hhbmdlZCwgNjIxIGluc2VydGlvbnMoKykKPj4+ICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy92aG9zdC9tZGV2LmMKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUu Ywo+Pj4gaW5kZXggOWIwMGMzNTEzMTIwLi4zY2ZkNzg3ZDYwNWMgMTAwNjQ0Cj4+PiAtLS0gYS9k cml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYwo+Pj4gKysrIGIvZHJpdmVycy92ZmlvL21kZXYv bWRldl9jb3JlLmMKPj4+IEBAIC05Niw2ICs5NiwyNiBAQCBtZGV2X2dldF92aXJ0aW9fb3BzKHN0 cnVjdCBtZGV2X2RldmljZSAqbWRldikKPj4+ICB9Cj4+PiAgRVhQT1JUX1NZTUJPTChtZGV2X2dl dF92aXJ0aW9fb3BzKTsKPj4+ICAKPj4+ICsvKiBTcGVjaWZ5IHRoZSB2aG9zdCBkZXZpY2Ugb3Bz IGZvciB0aGUgbWRldiBkZXZpY2UsIHRoaXMKPj4+ICsgKiBtdXN0IGJlIGNhbGxlZCBkdXJpbmcg Y3JlYXRlKCkgY2FsbGJhY2sgZm9yIHZob3N0IG1kZXYgZGV2aWNlLgo+Pj4gKyAqLwo+Pj4gK3Zv aWQgbWRldl9zZXRfdmhvc3Rfb3BzKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwKPj4+ICsJCQlj b25zdCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAqdmhvc3Rfb3BzKQo+Pj4gK3sKPj4+ ICsJbWRldl9zZXRfY2xhc3MobWRldiwgTURFVl9DTEFTU19JRF9WSE9TVCk7Cj4+PiArCW1kZXYt PnZob3N0X29wcyA9IHZob3N0X29wczsKPj4+ICt9Cj4+PiArRVhQT1JUX1NZTUJPTChtZGV2X3Nl dF92aG9zdF9vcHMpOwo+Pj4gKwo+Pj4gKy8qIEdldCB0aGUgdmhvc3QgZGV2aWNlIG9wcyBmb3Ig dGhlIG1kZXYgZGV2aWNlLiAqLwo+Pj4gK2NvbnN0IHN0cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2Vf b3BzICoKPj4+ICttZGV2X2dldF92aG9zdF9vcHMoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQo+ Pj4gK3sKPj4+ICsJV0FSTl9PTihtZGV2LT5jbGFzc19pZCAhPSBNREVWX0NMQVNTX0lEX1ZIT1NU KTsKPj4+ICsJcmV0dXJuIG1kZXYtPnZob3N0X29wczsKPj4+ICt9Cj4+PiArRVhQT1JUX1NZTUJP TChtZGV2X2dldF92aG9zdF9vcHMpOwo+Pj4gKwo+Pj4gIHN0cnVjdCBkZXZpY2UgKm1kZXZfZGV2 KHN0cnVjdCBtZGV2X2RldmljZSAqbWRldikKPj4+ICB7Cj4+PiAgCXJldHVybiAmbWRldi0+ZGV2 Owo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oIGIvZHJp dmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgKPj4+IGluZGV4IDdiNDc4OTBjMzRlNy4uNTU5 N2M4NDZlNTJmIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRl LmgKPj4+ICsrKyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oCj4+PiBAQCAtNDAs NiArNDAsNyBAQCBzdHJ1Y3QgbWRldl9kZXZpY2Ugewo+Pj4gIAl1bmlvbiB7Cj4+PiAgCQljb25z dCBzdHJ1Y3QgdmZpb19tZGV2X2RldmljZV9vcHMgKnZmaW9fb3BzOwo+Pj4gIAkJY29uc3Qgc3Ry dWN0IHZpcnRpb19tZGV2X2RldmljZV9vcHMgKnZpcnRpb19vcHM7Cj4+PiArCQljb25zdCBzdHJ1 Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAqdmhvc3Rfb3BzOwo+Pj4gIAl9Owo+Pj4gIH07Cj4+ PiAgCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9LY29uZmlnIGIvZHJpdmVycy92aG9z dC9LY29uZmlnCj4+PiBpbmRleCAzZDAzY2NiZDFhZGMuLjA2MmNhZGEyOGY4OSAxMDA2NDQKPj4+ IC0tLSBhL2RyaXZlcnMvdmhvc3QvS2NvbmZpZwo+Pj4gKysrIGIvZHJpdmVycy92aG9zdC9LY29u ZmlnCj4+PiBAQCAtMzQsNiArMzQsMTggQEAgY29uZmlnIFZIT1NUX1ZTT0NLCj4+PiAgCVRvIGNv bXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUg d2lsbCBiZSBjYWxsZWQKPj4+ICAJdmhvc3RfdnNvY2suCj4+PiAgCj4+PiArY29uZmlnIFZIT1NU X01ERVYKPj4+ICsJdHJpc3RhdGUgIlZob3N0IGRyaXZlciBmb3IgTWVkaWF0ZWQgZGV2aWNlcyIK Pj4+ICsJZGVwZW5kcyBvbiBFVkVOVEZEICYmIFZGSU8gJiYgVkZJT19NREVWCj4+PiArCXNlbGVj dCBWSE9TVAo+Pj4gKwlkZWZhdWx0IG4KPj4+ICsJLS0taGVscC0tLQo+Pj4gKwlUaGlzIGtlcm5l bCBtb2R1bGUgY2FuIGJlIGxvYWRlZCBpbiBob3N0IGtlcm5lbCB0byBhY2NlbGVyYXRlCj4+PiAr CWd1ZXN0IHZpcnRpbyBkZXZpY2VzIHdpdGggdGhlIG1lZGlhdGVkIGRldmljZSBiYXNlZCBiYWNr ZW5kcy4KPj4+ICsKPj4+ICsJVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hv b3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCj4+PiArCWJlIGNhbGxlZCB2aG9zdF9tZGV2Lgo+ Pj4gKwo+Pj4gIGNvbmZpZyBWSE9TVAo+Pj4gIAl0cmlzdGF0ZQo+Pj4gIAktLS1oZWxwLS0tCj4+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvdmhvc3QvTWFr ZWZpbGUKPj4+IGluZGV4IDZjNmRmMjRmNzcwYy4uYWQ5YzBmOGM2ZDhjIDEwMDY0NAo+Pj4gLS0t IGEvZHJpdmVycy92aG9zdC9NYWtlZmlsZQo+Pj4gKysrIGIvZHJpdmVycy92aG9zdC9NYWtlZmls ZQo+Pj4gQEAgLTEwLDQgKzEwLDcgQEAgdmhvc3RfdnNvY2steSA6PSB2c29jay5vCj4+PiAgCj4+ PiAgb2JqLSQoQ09ORklHX1ZIT1NUX1JJTkcpICs9IHZyaW5naC5vCj4+PiAgCj4+PiArb2JqLSQo Q09ORklHX1ZIT1NUX01ERVYpICs9IHZob3N0X21kZXYubwo+Pj4gK3Zob3N0X21kZXYteSA6PSBt ZGV2Lm8KPj4+ICsKPj4+ICBvYmotJChDT05GSUdfVkhPU1QpCSs9IHZob3N0Lm8KPj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL3Zob3N0L21kZXYuYyBiL2RyaXZlcnMvdmhvc3QvbWRldi5jCj4+PiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi4zNWIyZmIzM2U2ODYK Pj4+IC0tLSAvZGV2L251bGwKPj4+ICsrKyBiL2RyaXZlcnMvdmhvc3QvbWRldi5jCj4+PiBAQCAt MCwwICsxLDU1NCBAQAo+Pj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+ PiArLyoKPj4+ICsgKiBWaG9zdCBkcml2ZXIgZm9yIG1lZGlhdGVkIGRldmljZSBiYXNlZCBiYWNr ZW5kcy4KPj4+ICsgKgo+Pj4gKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEludGVsIENvcnBv cmF0aW9uLgo+Pj4gKyAqCj4+PiArICogQXV0aG9yOiBUaXdlaSBCaWUgPHRpd2VpLmJpZUBpbnRl bC5jb20+Cj4+PiArICoKPj4+ICsgKiBUaGFua3MgdG8gSmFzb24gV2FuZyBhbmQgTWljaGFlbCBT LiBUc2lya2luIGZvciB0aGUgdmFsdWFibGUKPj4+ICsgKiBjb21tZW50cyBhbmQgc3VnZ2VzdGlv bnMuICBBbmQgdGhhbmtzIHRvIEN1bm1pbmcgTGlhbmcgYW5kCj4+PiArICogWmhpaG9uZyBXYW5n IGZvciBhbGwgdGhlaXIgc3VwcG9ydHMuCj4+PiArICovCj4+PiArCj4+PiArI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPj4+ICsjaW5jbHVk ZSA8bGludXgvbWRldi5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC92ZmlvLmg+Cj4+PiArI2luY2x1 ZGUgPGxpbnV4L3Zob3N0Lmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19uZXQuaD4KPj4+ ICsjaW5jbHVkZSA8bGludXgvdmlydGlvX21kZXZfb3BzLmg+Cj4+PiArCj4+PiArI2luY2x1ZGUg InZob3N0LmgiCj4+PiArCj4+PiArZW51bSB7Cj4+PiArCVZIT1NUX01ERVZfRkVBVFVSRVMgPQo+ Pj4gKwkJKDFVTEwgPDwgVklSVElPX0ZfTk9USUZZX09OX0VNUFRZKSB8Cj4+PiArCQkoMVVMTCA8 PCBWSVJUSU9fRl9BTllfTEFZT1VUKSB8Cj4+PiArCQkoMVVMTCA8PCBWSVJUSU9fRl9WRVJTSU9O XzEpIHwKPj4+ICsJCSgxVUxMIDw8IFZJUlRJT19GX0lPTU1VX1BMQVRGT1JNKSB8Cj4+PiArCQko MVVMTCA8PCBWSVJUSU9fRl9SSU5HX1BBQ0tFRCkgfAo+Pj4gKwkJKDFVTEwgPDwgVklSVElPX0Zf T1JERVJfUExBVEZPUk0pIHwKPj4+ICsJCSgxVUxMIDw8IFZJUlRJT19SSU5HX0ZfSU5ESVJFQ1Rf REVTQykgfAo+Pj4gKwkJKDFVTEwgPDwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpLAo+Pj4gKwo+ Pj4gKwlWSE9TVF9NREVWX05FVF9GRUFUVVJFUyA9IFZIT1NUX01ERVZfRkVBVFVSRVMgfAo+Pj4g KwkJKDFVTEwgPDwgVklSVElPX05FVF9GX0NTVU0pIHwKPj4+ICsJCSgxVUxMIDw8IFZJUlRJT19O RVRfRl9HVUVTVF9DU1VNKSB8Cj4+PiArCQkoMVVMTCA8PCBWSVJUSU9fTkVUX0ZfTVRVKSB8Cj4+ PiArCQkoMVVMTCA8PCBWSVJUSU9fTkVUX0ZfTUFDKSB8Cj4+PiArCQkoMVVMTCA8PCBWSVJUSU9f TkVUX0ZfR1VFU1RfVFNPNCkgfAo+Pj4gKwkJKDFVTEwgPDwgVklSVElPX05FVF9GX0dVRVNUX1RT TzYpIHwKPj4+ICsJCSgxVUxMIDw8IFZJUlRJT19ORVRfRl9HVUVTVF9FQ04pIHwKPj4+ICsJCSgx VUxMIDw8IFZJUlRJT19ORVRfRl9HVUVTVF9VRk8pIHwKPj4+ICsJCSgxVUxMIDw8IFZJUlRJT19O RVRfRl9IT1NUX1RTTzQpIHwKPj4+ICsJCSgxVUxMIDw8IFZJUlRJT19ORVRfRl9IT1NUX1RTTzYp IHwKPj4+ICsJCSgxVUxMIDw8IFZJUlRJT19ORVRfRl9IT1NUX0VDTikgfAo+Pj4gKwkJKDFVTEwg PDwgVklSVElPX05FVF9GX0hPU1RfVUZPKSB8Cj4+PiArCQkoMVVMTCA8PCBWSVJUSU9fTkVUX0Zf TVJHX1JYQlVGKSB8Cj4+PiArCQkoMVVMTCA8PCBWSVJUSU9fTkVUX0ZfU1RBVFVTKSB8Cj4+PiAr CQkoMVVMTCA8PCBWSVJUSU9fTkVUX0ZfU1BFRURfRFVQTEVYKSwKPj4+ICt9Owo+Pj4gKwo+Pj4g Ky8qIEN1cnJlbnRseSwgb25seSBuZXR3b3JrIGJhY2tlbmQgdy9vIG11bHRpcXVldWUgaXMgc3Vw cG9ydGVkLiAqLwo+Pj4gKyNkZWZpbmUgVkhPU1RfTURFVl9WUV9NQVgJMgo+Pj4gKwo+Pj4gK3N0 cnVjdCB2aG9zdF9tZGV2IHsKPj4+ICsJLyogVGhlIGxvY2sgaXMgdG8gcHJvdGVjdCB0aGlzIHN0 cnVjdHVyZS4gKi8KPj4+ICsJc3RydWN0IG11dGV4IG11dGV4Owo+Pj4gKwlzdHJ1Y3Qgdmhvc3Rf ZGV2IGRldjsKPj4+ICsJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnFzOwo+Pj4gKwlpbnQgbnZx czsKPj4+ICsJaW50IHZpcnRpb19pZDsKPj4+ICsJYm9vbCBvcGVuZWQ7Cj4+PiArCXN0cnVjdCBt ZGV2X2RldmljZSAqbWRldjsKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCB1NjQgdmhv c3RfbWRldl9mZWF0dXJlc1tdID0gewo+Pj4gKwlbVklSVElPX0lEX05FVF0gPSBWSE9TVF9NREVW X05FVF9GRUFUVVJFUywKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIGhhbmRsZV92cV9r aWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKQo+Pj4gK3sKPj4+ICsJc3RydWN0IHZob3N0X3Zp cnRxdWV1ZSAqdnEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSwK Pj4+ICsJCQkJCQkgIHBvbGwud29yayk7Cj4+PiArCXN0cnVjdCB2aG9zdF9tZGV2ICptID0gY29u dGFpbmVyX29mKHZxLT5kZXYsIHN0cnVjdCB2aG9zdF9tZGV2LCBkZXYpOwo+Pj4gKwljb25zdCBz dHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAqb3BzID0gbWRldl9nZXRfdmhvc3Rfb3BzKG0t Pm1kZXYpOwo+Pj4gKwo+Pj4gKwlvcHMtPmtpY2tfdnEobS0+bWRldiwgdnEgLSBtLT52cXMpOwo+ Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaXJxcmV0dXJuX3Qgdmhvc3RfbWRldl92aXJ0cXVldWVf Y2Iodm9pZCAqcHJpdmF0ZSkKPj4+ICt7Cj4+PiArCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZx ID0gcHJpdmF0ZTsKPj4+ICsJc3RydWN0IGV2ZW50ZmRfY3R4ICpjYWxsX2N0eCA9IHZxLT5jYWxs X2N0eDsKPj4+ICsKPj4+ICsJaWYgKGNhbGxfY3R4KQo+Pj4gKwkJZXZlbnRmZF9zaWduYWwoY2Fs bF9jdHgsIDEpOwo+Pj4gKwo+Pj4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cj4+PiArfQo+Pj4gKwo+ Pj4gK3N0YXRpYyB2b2lkIHZob3N0X21kZXZfcmVzZXQoc3RydWN0IHZob3N0X21kZXYgKm0pCj4+ PiArewo+Pj4gKwlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSBtLT5tZGV2Owo+Pj4gKwljb25z dCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAqb3BzID0gbWRldl9nZXRfdmhvc3Rfb3Bz KG1kZXYpOwo+Pj4gKwo+Pj4gKwlvcHMtPnNldF9zdGF0dXMobWRldiwgMCk7Cj4+PiArfQo+Pj4g Kwo+Pj4gK3N0YXRpYyBsb25nIHZob3N0X21kZXZfZ2V0X2RldmljZV9pZChzdHJ1Y3Qgdmhvc3Rf bWRldiAqbSwgdTggX191c2VyICphcmdwKQo+Pj4gK3sKPj4+ICsJc3RydWN0IG1kZXZfZGV2aWNl ICptZGV2ID0gbS0+bWRldjsKPj4+ICsJY29uc3Qgc3RydWN0IHZpcnRpb19tZGV2X2RldmljZV9v cHMgKm9wcyA9IG1kZXZfZ2V0X3Zob3N0X29wcyhtZGV2KTsKPj4+ICsJdTMyIGRldmljZV9pZDsK Pj4+ICsKPj4+ICsJZGV2aWNlX2lkID0gb3BzLT5nZXRfZGV2aWNlX2lkKG1kZXYpOwo+Pj4gKwo+ Pj4gKwlpZiAoY29weV90b191c2VyKGFyZ3AsICZkZXZpY2VfaWQsIHNpemVvZihkZXZpY2VfaWQp KSkKPj4+ICsJCXJldHVybiAtRUZBVUxUOwo+Pj4gKwo+Pj4gKwlyZXR1cm4gMDsKPj4+ICt9Cj4+ Cj4+IEkgYmVsaWV2ZSB3ZSBuZWVkIGdldF92ZW5kb3JfaWQoKSBhcyB3ZWxsPwo+IEN1cnJlbnRs eSwgdGhlcmUgaXMgbm8gb2ZmaWNpYWwgd2F5IGZvciB2ZW5kb3JzIHRvIGRvIHZlbmRvcgo+IHNw ZWNpZmljIGV4dGVuc2lvbnMgaW4gdmhvc3QtbWRldiB5ZXQuIEl0IG1pZ2h0IGJlIGJldHRlciB0 bwo+IGFkZCB0aGlzIGlvY3RsIHdoZW4gd2Ugc3VwcG9ydCB0aGlzLgoKCkdvb2QgcG9pbnQuCgoK Pgo+Pgo+Pj4gKwo+Pj4gK3N0YXRpYyBsb25nIHZob3N0X21kZXZfZ2V0X3N0YXR1cyhzdHJ1Y3Qg dmhvc3RfbWRldiAqbSwgdTggX191c2VyICpzdGF0dXNwKQo+Pj4gK3sKPj4+ICsJc3RydWN0IG1k ZXZfZGV2aWNlICptZGV2ID0gbS0+bWRldjsKPj4+ICsJY29uc3Qgc3RydWN0IHZpcnRpb19tZGV2 X2RldmljZV9vcHMgKm9wcyA9IG1kZXZfZ2V0X3Zob3N0X29wcyhtZGV2KTsKPj4+ICsJdTggc3Rh dHVzOwo+Pj4gKwo+Pj4gKwlzdGF0dXMgPSBvcHMtPmdldF9zdGF0dXMobWRldik7Cj4+PiArCj4+ PiArCWlmIChjb3B5X3RvX3VzZXIoc3RhdHVzcCwgJnN0YXR1cywgc2l6ZW9mKHN0YXR1cykpKQo+ Pj4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4+PiArCj4+PiArCXJldHVybiAwOwo+Pj4gK30KPj4+ICsK Pj4+ICtzdGF0aWMgbG9uZyB2aG9zdF9tZGV2X3NldF9zdGF0dXMoc3RydWN0IHZob3N0X21kZXYg Km0sIHU4IF9fdXNlciAqc3RhdHVzcCkKPj4+ICt7Cj4+PiArCXN0cnVjdCBtZGV2X2RldmljZSAq bWRldiA9IG0tPm1kZXY7Cj4+PiArCWNvbnN0IHN0cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2Vfb3Bz ICpvcHMgPSBtZGV2X2dldF92aG9zdF9vcHMobWRldik7Cj4+PiArCXU4IHN0YXR1czsKPj4+ICsK Pj4+ICsJaWYgKGNvcHlfZnJvbV91c2VyKCZzdGF0dXMsIHN0YXR1c3AsIHNpemVvZihzdGF0dXMp KSkKPj4+ICsJCXJldHVybiAtRUZBVUxUOwo+Pj4gKwo+Pj4gKwkvKgo+Pj4gKwkgKiBVc2Vyc3Bh Y2Ugc2hvdWxkbid0IHJlbW92ZSBzdGF0dXMgYml0cyB1bmxlc3MgcmVzZXQgdGhlCj4+PiArCSAq IHN0YXR1cyB0byAwLgo+Pj4gKwkgKi8KPj4+ICsJaWYgKHN0YXR1cyAhPSAwICYmIChvcHMtPmdl dF9zdGF0dXMobWRldikgJiB+c3RhdHVzKSAhPSAwKQo+Pj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ PiArCj4+PiArCW9wcy0+c2V0X3N0YXR1cyhtZGV2LCBzdGF0dXMpOwo+Pj4gKwo+Pj4gKwlyZXR1 cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCB2aG9zdF9tZGV2X2NvbmZpZ192YWxp ZGF0ZShzdHJ1Y3Qgdmhvc3RfbWRldiAqbSwKPj4+ICsJCQkJICAgICAgc3RydWN0IHZob3N0X21k ZXZfY29uZmlnICpjKQo+Pj4gK3sKPj4+ICsJbG9uZyBzaXplID0gMDsKPj4+ICsKPj4+ICsJc3dp dGNoIChtLT52aXJ0aW9faWQpIHsKPj4+ICsJY2FzZSBWSVJUSU9fSURfTkVUOgo+Pj4gKwkJc2l6 ZSA9IHNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcpOwo+Pj4gKwkJYnJlYWs7Cj4+PiAr CX0KPj4+ICsKPj4+ICsJaWYgKGMtPmxlbiA9PSAwKQo+Pj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ PiArCj4+PiArCWlmIChjLT5vZmYgPj0gc2l6ZSB8fCBjLT5sZW4gPiBzaXplIHx8IGMtPm9mZiAr IGMtPmxlbiA+IHNpemUpCj4+PiArCQlyZXR1cm4gLUUyQklHOwo+Pj4gKwo+Pj4gKwlyZXR1cm4g MDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGxvbmcgdmhvc3RfbWRldl9nZXRfY29uZmlnKHN0 cnVjdCB2aG9zdF9tZGV2ICptLAo+Pj4gKwkJCQkgIHN0cnVjdCB2aG9zdF9tZGV2X2NvbmZpZyBf X3VzZXIgKmMpCj4+PiArewo+Pj4gKwlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSBtLT5tZGV2 Owo+Pj4gKwljb25zdCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAqb3BzID0gbWRldl9n ZXRfdmhvc3Rfb3BzKG1kZXYpOwo+Pj4gKwlzdHJ1Y3Qgdmhvc3RfbWRldl9jb25maWcgY29uZmln Owo+Pj4gKwl1bnNpZ25lZCBsb25nIHNpemUgPSBvZmZzZXRvZihzdHJ1Y3Qgdmhvc3RfbWRldl9j b25maWcsIGJ1Zik7Cj4+PiArCXU4ICpidWY7Cj4+PiArCj4+PiArCWlmIChjb3B5X2Zyb21fdXNl cigmY29uZmlnLCBjLCBzaXplKSkKPj4+ICsJCXJldHVybiAtRUZBVUxUOwo+Pj4gKwlpZiAodmhv c3RfbWRldl9jb25maWdfdmFsaWRhdGUobSwgJmNvbmZpZykpCj4+PiArCQlyZXR1cm4gLUVJTlZB TDsKPj4KPj4gSSB0aGluayBpdCdzIGJldHRlciB0byBsZXQgdGhlIHBhcmVudCB0byBkbyBzdWNo IHZhbGlkYXRpb24uIEVzcGVjaWFsbHkKPj4gY29uc2lkZXIgdGhhdCB0aGUgc2l6ZSBvZiBjb25m aWcgbWF5IGRlcGVuZCBvbiBmZWF0dXJlIChlLmcgTVEpLgo+IEFib3ZlIGNoZWNrIGlzIGp1c3Qg YSBiYXNpYyBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlCj4gdGhhdCBlLmcuIHdlIHdvbid0IGFs bG9jIGEgaHVnZSBhbW91bnQgb2YgbWVtb3J5LgoKCkkgc2VlLgoKCj4KPj4KPj4+ICsJYnVmID0g a3Z6YWxsb2MoY29uZmlnLmxlbiwgR0ZQX0tFUk5FTCk7Cj4+PiArCWlmICghYnVmKQo+Pj4gKwkJ cmV0dXJuIC1FTk9NRU07Cj4+PiArCj4+PiArCW9wcy0+Z2V0X2NvbmZpZyhtZGV2LCBjb25maWcu b2ZmLCBidWYsIGNvbmZpZy5sZW4pOwo+Pj4gKwo+Pj4gKwlpZiAoY29weV90b191c2VyKGMtPmJ1 ZiwgYnVmLCBjb25maWcubGVuKSkgewo+Pj4gKwkJa3ZmcmVlKGJ1Zik7Cj4+PiArCQlyZXR1cm4g LUVGQVVMVDsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlrdmZyZWUoYnVmKTsKPj4+ICsJcmV0dXJuIDA7 Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBsb25nIHZob3N0X21kZXZfc2V0X2NvbmZpZyhzdHJ1 Y3Qgdmhvc3RfbWRldiAqbSwKPj4+ICsJCQkJICBzdHJ1Y3Qgdmhvc3RfbWRldl9jb25maWcgX191 c2VyICpjKQo+Pj4gK3sKPj4+ICsJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gbS0+bWRldjsK Pj4+ICsJY29uc3Qgc3RydWN0IHZpcnRpb19tZGV2X2RldmljZV9vcHMgKm9wcyA9IG1kZXZfZ2V0 X3Zob3N0X29wcyhtZGV2KTsKPj4+ICsJc3RydWN0IHZob3N0X21kZXZfY29uZmlnIGNvbmZpZzsK Pj4+ICsJdW5zaWduZWQgbG9uZyBzaXplID0gb2Zmc2V0b2Yoc3RydWN0IHZob3N0X21kZXZfY29u ZmlnLCBidWYpOwo+Pj4gKwl1OCAqYnVmOwo+Pj4gKwo+Pj4gKwlpZiAoY29weV9mcm9tX3VzZXIo JmNvbmZpZywgYywgc2l6ZSkpCj4+PiArCQlyZXR1cm4gLUVGQVVMVDsKPj4+ICsJaWYgKHZob3N0 X21kZXZfY29uZmlnX3ZhbGlkYXRlKG0sICZjb25maWcpKQo+Pj4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4+PiArCWJ1ZiA9IGt2emFsbG9jKGNvbmZpZy5sZW4sIEdGUF9LRVJORUwpOwo+Pj4gKwlpZiAo IWJ1ZikKPj4+ICsJCXJldHVybiAtRU5PTUVNOwo+Pj4gKwo+Pj4gKwlpZiAoY29weV9mcm9tX3Vz ZXIoYnVmLCBjLT5idWYsIGNvbmZpZy5sZW4pKSB7Cj4+PiArCQlrdmZyZWUoYnVmKTsKPj4+ICsJ CXJldHVybiAtRUZBVUxUOwo+Pj4gKwl9Cj4+PiArCj4+PiArCW9wcy0+c2V0X2NvbmZpZyhtZGV2 LCBjb25maWcub2ZmLCBidWYsIGNvbmZpZy5sZW4pOwo+Pj4gKwo+Pj4gKwlrdmZyZWUoYnVmKTsK Pj4+ICsJcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBsb25nIHZob3N0X21kZXZf Z2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF9tZGV2ICptLCB1NjQgX191c2VyICpmZWF0dXJlcCkK Pj4+ICt7Cj4+PiArCXN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IG0tPm1kZXY7Cj4+PiArCWNv bnN0IHN0cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2Vfb3BzICpvcHMgPSBtZGV2X2dldF92aG9zdF9v cHMobWRldik7Cj4+PiArCXU2NCBmZWF0dXJlczsKPj4+ICsKPj4+ICsJZmVhdHVyZXMgPSBvcHMt PmdldF9mZWF0dXJlcyhtZGV2KTsKPj4+ICsJZmVhdHVyZXMgJj0gdmhvc3RfbWRldl9mZWF0dXJl c1ttLT52aXJ0aW9faWRdOwo+Pj4gKwo+Pj4gKwlpZiAoY29weV90b191c2VyKGZlYXR1cmVwLCAm ZmVhdHVyZXMsIHNpemVvZihmZWF0dXJlcykpKQo+Pj4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4+PiAr Cj4+PiArCXJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgbG9uZyB2aG9zdF9tZGV2 X3NldF9mZWF0dXJlcyhzdHJ1Y3Qgdmhvc3RfbWRldiAqbSwgdTY0IF9fdXNlciAqZmVhdHVyZXAp Cj4+PiArewo+Pj4gKwlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSBtLT5tZGV2Owo+Pj4gKwlj b25zdCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAqb3BzID0gbWRldl9nZXRfdmhvc3Rf b3BzKG1kZXYpOwo+Pj4gKwl1NjQgZmVhdHVyZXM7Cj4+PiArCj4+PiArCS8qCj4+PiArCSAqIEl0 J3Mgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoZSBmZWF0dXJlcyBhZnRlciB0aGV5IGhhdmUKPj4+ ICsJICogYmVlbiBuZWdvdGlhdGVkLgo+Pj4gKwkgKi8KPj4+ICsJaWYgKG9wcy0+Z2V0X3N0YXR1 cyhtZGV2KSAmIFZJUlRJT19DT05GSUdfU19GRUFUVVJFU19PSykKPj4+ICsJCXJldHVybiAtRUJV U1k7Cj4+PiArCj4+PiArCWlmIChjb3B5X2Zyb21fdXNlcigmZmVhdHVyZXMsIGZlYXR1cmVwLCBz aXplb2YoZmVhdHVyZXMpKSkKPj4+ICsJCXJldHVybiAtRUZBVUxUOwo+Pj4gKwo+Pj4gKwlpZiAo ZmVhdHVyZXMgJiB+dmhvc3RfbWRldl9mZWF0dXJlc1ttLT52aXJ0aW9faWRdKQo+Pj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4+PiArCj4+PiArCWlmIChvcHMtPnNldF9mZWF0dXJlcyhtZGV2LCBmZWF0 dXJlcykpCj4+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4+ICsKPj4+ICsJcmV0dXJuIDA7Cj4+PiAr fQo+Pj4gKwo+Pj4gK3N0YXRpYyBsb25nIHZob3N0X21kZXZfZ2V0X3ZyaW5nX251bShzdHJ1Y3Qg dmhvc3RfbWRldiAqbSwgdTE2IF9fdXNlciAqYXJncCkKPj4+ICt7Cj4+PiArCXN0cnVjdCBtZGV2 X2RldmljZSAqbWRldiA9IG0tPm1kZXY7Cj4+PiArCWNvbnN0IHN0cnVjdCB2aXJ0aW9fbWRldl9k ZXZpY2Vfb3BzICpvcHMgPSBtZGV2X2dldF92aG9zdF9vcHMobWRldik7Cj4+PiArCXUxNiBudW07 Cj4+PiArCj4+PiArCW51bSA9IG9wcy0+Z2V0X3ZxX251bV9tYXgobWRldik7Cj4+PiArCj4+PiAr CWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJm51bSwgc2l6ZW9mKG51bSkpKQo+Pj4gKwkJcmV0dXJu IC1FRkFVTFQ7Cj4+PiArCj4+PiArCXJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMg bG9uZyB2aG9zdF9tZGV2X3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF9tZGV2ICptLCB1bnNpZ25l ZCBpbnQgY21kLAo+Pj4gKwkJCQkgICB2b2lkIF9fdXNlciAqYXJncCkKPj4+ICt7Cj4+PiArCXN0 cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IG0tPm1kZXY7Cj4+PiArCWNvbnN0IHN0cnVjdCB2aXJ0 aW9fbWRldl9kZXZpY2Vfb3BzICpvcHMgPSBtZGV2X2dldF92aG9zdF9vcHMobWRldik7Cj4+PiAr CXN0cnVjdCB2aXJ0aW9fbWRldl9jYWxsYmFjayBjYjsKPj4+ICsJc3RydWN0IHZob3N0X3ZpcnRx dWV1ZSAqdnE7Cj4+PiArCXN0cnVjdCB2aG9zdF92cmluZ19zdGF0ZSBzOwo+Pj4gKwl1OCBzdGF0 dXM7Cj4+PiArCXUzMiBpZHg7Cj4+PiArCWxvbmcgcjsKPj4+ICsKPj4+ICsJciA9IGdldF91c2Vy KGlkeCwgKHUzMiBfX3VzZXIgKilhcmdwKTsKPj4+ICsJaWYgKHIgPCAwKQo+Pj4gKwkJcmV0dXJu IHI7Cj4+PiArCWlmIChpZHggPj0gbS0+bnZxcykKPj4+ICsJCXJldHVybiAtRU5PQlVGUzsKPj4+ ICsKPj4+ICsJc3RhdHVzID0gb3BzLT5nZXRfc3RhdHVzKG1kZXYpOwo+Pj4gKwo+Pj4gKwkvKgo+ Pj4gKwkgKiBJdCdzIG5vdCBhbGxvd2VkIHRvIGRldGVjdCBhbmQgcHJvZ3JhbSB2cXMgYmVmb3Jl Cj4+PiArCSAqIGZlYXR1cmVzIG5lZ290aWF0aW9uIG9yIGFmdGVyIGVuYWJsaW5nIGRyaXZlci4K Pj4+ICsJICovCj4+PiArCWlmICghKHN0YXR1cyAmIFZJUlRJT19DT05GSUdfU19GRUFUVVJFU19P SykgfHwKPj4+ICsJICAgIChzdGF0dXMgJiBWSVJUSU9fQ09ORklHX1NfRFJJVkVSX09LKSkKPj4+ ICsJCXJldHVybiAtRUJVU1k7Cj4+PiArCj4+PiArCXZxID0gJm0tPnZxc1tpZHhdOwo+Pj4gKwo+ Pj4gKwlpZiAoY21kID09IFZIT1NUX01ERVZfU0VUX1ZSSU5HX0VOQUJMRSkgewo+Pj4gKwkJaWYg KGNvcHlfZnJvbV91c2VyKCZzLCBhcmdwLCBzaXplb2YocykpKQo+Pj4gKwkJCXJldHVybiAtRUZB VUxUOwo+Pj4gKwkJb3BzLT5zZXRfdnFfcmVhZHkobWRldiwgaWR4LCBzLm51bSk7Cj4+PiArCQly ZXR1cm4gMDsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwkvKgo+Pj4gKwkgKiBJdCdzIG5vdCBhbGxvd2Vk IHRvIGRldGVjdCBhbmQgcHJvZ3JhbSB2cXMgd2l0aAo+Pj4gKwkgKiB2cXMgZW5hYmxlZC4KPj4+ ICsJICovCj4+PiArCWlmIChvcHMtPmdldF92cV9yZWFkeShtZGV2LCBpZHgpKQo+Pj4gKwkJcmV0 dXJuIC1FQlVTWTsKPj4+ICsKPj4+ICsJaWYgKGNtZCA9PSBWSE9TVF9HRVRfVlJJTkdfQkFTRSkK Pj4+ICsJCXZxLT5sYXN0X2F2YWlsX2lkeCA9IG9wcy0+Z2V0X3ZxX3N0YXRlKG0tPm1kZXYsIGlk eCk7Cj4+PiArCj4+PiArCXIgPSB2aG9zdF92cmluZ19pb2N0bCgmbS0+ZGV2LCBjbWQsIGFyZ3Ap Owo+Pj4gKwlpZiAocikKPj4+ICsJCXJldHVybiByOwo+Pj4gKwo+Pj4gKwlzd2l0Y2ggKGNtZCkg ewo+Pj4gKwljYXNlIFZIT1NUX1NFVF9WUklOR19BRERSOgo+Pj4gKwkJLyoKPj4+ICsJCSAqIElu IHZob3N0LW1kZXYsIHRoZSByaW5nIGFkZHJlc3NlcyBzZXQgYnkgdXNlcnNwYWNlIHNob3VsZAo+ Pj4gKwkJICogYmUgdGhlIERNQSBhZGRyZXNzZXMgd2l0aGluIHRoZSBWRklPIGNvbnRhaW5lci9n cm91cC4KPj4+ICsJCSAqLwo+Pj4gKwkJaWYgKG9wcy0+c2V0X3ZxX2FkZHJlc3MobWRldiwgaWR4 LCAodTY0KXZxLT5kZXNjLAo+Pj4gKwkJCQkJKHU2NCl2cS0+YXZhaWwsICh1NjQpdnEtPnVzZWQp KQo+Pj4gKwkJCXIgPSAtRU5PREVWOwo+Pgo+PiBOaXQ6IEl0IGxvb2tzIHRvIG1lIHRoYXQgd2Ug bmVlZCBleHBvc2UgYWxpZ25tZW50IG9mIHZxIHRvIHVzZXJzcGFjZQo+PiAoZ2V0X3ZxX2FsaWdu KCkpLgo+IEd1ZXN0IGRyaXZlcnMgYXJlIHVzaW5nIChtYXliZSBoYXJkY29kZWQpIGFsaWdubWVu dHMgYmFzZWQKPiBvbiB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBkZWZpbmVkIGluIHRoZSBz cGVjLiBJdCBtaWdodAo+IGJlIGJldHRlciB0byBsZXQgYmFja2VuZHMgZm9sbG93IHRoZSBzYW1l IHN0YW5kYXJkIGZvciB0aGUKPiBjb21wYXRpYmlsaXR5LgoKCk9rLgoKVGhhbmtzCgoKPgo+PiBU aGFua3MKPj4KPj4KPj4+ICsJCWJyZWFrOwo+Pj4gKwo+Pj4gKwljYXNlIFZIT1NUX1NFVF9WUklO R19CQVNFOgo+Pj4gKwkJaWYgKG9wcy0+c2V0X3ZxX3N0YXRlKG1kZXYsIGlkeCwgdnEtPmxhc3Rf YXZhaWxfaWR4KSkKPj4+ICsJCQlyID0gLUVOT0RFVjsKPj4+ICsJCWJyZWFrOwo+Pj4gKwo+Pj4g KwljYXNlIFZIT1NUX1NFVF9WUklOR19DQUxMOgo+Pj4gKwkJaWYgKHZxLT5jYWxsX2N0eCkgewo+ Pj4gKwkJCWNiLmNhbGxiYWNrID0gdmhvc3RfbWRldl92aXJ0cXVldWVfY2I7Cj4+PiArCQkJY2Iu cHJpdmF0ZSA9IHZxOwo+Pj4gKwkJfSBlbHNlIHsKPj4+ICsJCQljYi5jYWxsYmFjayA9IE5VTEw7 Cj4+PiArCQkJY2IucHJpdmF0ZSA9IE5VTEw7Cj4+PiArCQl9Cj4+PiArCQlvcHMtPnNldF92cV9j YihtZGV2LCBpZHgsICZjYik7Cj4+PiArCQlicmVhazsKPj4+ICsKPj4+ICsJY2FzZSBWSE9TVF9T RVRfVlJJTkdfTlVNOgo+Pj4gKwkJb3BzLT5zZXRfdnFfbnVtKG1kZXYsIGlkeCwgdnEtPm51bSk7 Cj4+PiArCQlicmVhazsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlyZXR1cm4gcjsKPj4+ICt9Cj4+PiAr Cj4+PiArc3RhdGljIGludCB2aG9zdF9tZGV2X29wZW4odm9pZCAqZGV2aWNlX2RhdGEpCj4+PiAr ewo+Pj4gKwlzdHJ1Y3Qgdmhvc3RfbWRldiAqbSA9IGRldmljZV9kYXRhOwo+Pj4gKwlzdHJ1Y3Qg dmhvc3RfZGV2ICpkZXY7Cj4+PiArCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKip2cXM7Cj4+PiAr CWludCBudnFzLCBpLCByOwo+Pj4gKwo+Pj4gKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9E VUxFKSkKPj4+ICsJCXJldHVybiAtRU5PREVWOwo+Pj4gKwo+Pj4gKwltdXRleF9sb2NrKCZtLT5t dXRleCk7Cj4+PiArCj4+PiArCWlmIChtLT5vcGVuZWQpIHsKPj4+ICsJCXIgPSAtRUJVU1k7Cj4+ PiArCQlnb3RvIGVycjsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwludnFzID0gbS0+bnZxczsKPj4+ICsJ dmhvc3RfbWRldl9yZXNldChtKTsKPj4+ICsKPj4+ICsJdnFzID0ga21hbGxvY19hcnJheShudnFz LCBzaXplb2YoKnZxcyksIEdGUF9LRVJORUwpOwo+Pj4gKwlpZiAoIXZxcykgewo+Pj4gKwkJciA9 IC1FTk9NRU07Cj4+PiArCQlnb3RvIGVycjsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlkZXYgPSAmbS0+ ZGV2Owo+Pj4gKwlmb3IgKGkgPSAwOyBpIDwgbnZxczsgaSsrKSB7Cj4+PiArCQl2cXNbaV0gPSAm bS0+dnFzW2ldOwo+Pj4gKwkJdnFzW2ldLT5oYW5kbGVfa2ljayA9IGhhbmRsZV92cV9raWNrOwo+ Pj4gKwl9Cj4+PiArCXZob3N0X2Rldl9pbml0KGRldiwgdnFzLCBudnFzLCAwLCAwLCAwKTsKPj4+ ICsJbS0+b3BlbmVkID0gdHJ1ZTsKPj4+ICsJbXV0ZXhfdW5sb2NrKCZtLT5tdXRleCk7Cj4+PiAr Cj4+PiArCXJldHVybiAwOwo+Pj4gKwo+Pj4gK2VycjoKPj4+ICsJbXV0ZXhfdW5sb2NrKCZtLT5t dXRleCk7Cj4+PiArCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwo+Pj4gKwlyZXR1cm4gcjsKPj4+ ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgdmhvc3RfbWRldl9yZWxlYXNlKHZvaWQgKmRldmlj ZV9kYXRhKQo+Pj4gK3sKPj4+ICsJc3RydWN0IHZob3N0X21kZXYgKm0gPSBkZXZpY2VfZGF0YTsK Pj4+ICsKPj4+ICsJbXV0ZXhfbG9jaygmbS0+bXV0ZXgpOwo+Pj4gKwl2aG9zdF9tZGV2X3Jlc2V0 KG0pOwo+Pj4gKwl2aG9zdF9kZXZfc3RvcCgmbS0+ZGV2KTsKPj4+ICsJdmhvc3RfZGV2X2NsZWFu dXAoJm0tPmRldik7Cj4+PiArCj4+PiArCWtmcmVlKG0tPmRldi52cXMpOwo+Pj4gKwltLT5vcGVu ZWQgPSBmYWxzZTsKPj4+ICsJbXV0ZXhfdW5sb2NrKCZtLT5tdXRleCk7Cj4+PiArCW1vZHVsZV9w dXQoVEhJU19NT0RVTEUpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgbG9uZyB2aG9zdF9tZGV2 X3VubG9ja2VkX2lvY3RsKHZvaWQgKmRldmljZV9kYXRhLAo+Pj4gKwkJCQkgICAgICB1bnNpZ25l ZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKPj4+ICt7Cj4+PiArCXN0cnVjdCB2aG9zdF9t ZGV2ICptID0gZGV2aWNlX2RhdGE7Cj4+PiArCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191 c2VyICopYXJnOwo+Pj4gKwlsb25nIHI7Cj4+PiArCj4+PiArCW11dGV4X2xvY2soJm0tPm11dGV4 KTsKPj4+ICsKPj4+ICsJc3dpdGNoIChjbWQpIHsKPj4+ICsJY2FzZSBWSE9TVF9NREVWX0dFVF9E RVZJQ0VfSUQ6Cj4+PiArCQlyID0gdmhvc3RfbWRldl9nZXRfZGV2aWNlX2lkKG0sIGFyZ3ApOwo+ Pj4gKwkJYnJlYWs7Cj4+PiArCWNhc2UgVkhPU1RfTURFVl9HRVRfU1RBVFVTOgo+Pj4gKwkJciA9 IHZob3N0X21kZXZfZ2V0X3N0YXR1cyhtLCBhcmdwKTsKPj4+ICsJCWJyZWFrOwo+Pj4gKwljYXNl IFZIT1NUX01ERVZfU0VUX1NUQVRVUzoKPj4+ICsJCXIgPSB2aG9zdF9tZGV2X3NldF9zdGF0dXMo bSwgYXJncCk7Cj4+PiArCQlicmVhazsKPj4+ICsJY2FzZSBWSE9TVF9NREVWX0dFVF9DT05GSUc6 Cj4+PiArCQlyID0gdmhvc3RfbWRldl9nZXRfY29uZmlnKG0sIGFyZ3ApOwo+Pj4gKwkJYnJlYWs7 Cj4+PiArCWNhc2UgVkhPU1RfTURFVl9TRVRfQ09ORklHOgo+Pj4gKwkJciA9IHZob3N0X21kZXZf c2V0X2NvbmZpZyhtLCBhcmdwKTsKPj4+ICsJCWJyZWFrOwo+Pj4gKwljYXNlIFZIT1NUX0dFVF9G RUFUVVJFUzoKPj4+ICsJCXIgPSB2aG9zdF9tZGV2X2dldF9mZWF0dXJlcyhtLCBhcmdwKTsKPj4+ ICsJCWJyZWFrOwo+Pj4gKwljYXNlIFZIT1NUX1NFVF9GRUFUVVJFUzoKPj4+ICsJCXIgPSB2aG9z dF9tZGV2X3NldF9mZWF0dXJlcyhtLCBhcmdwKTsKPj4+ICsJCWJyZWFrOwo+Pj4gKwljYXNlIFZI T1NUX01ERVZfR0VUX1ZSSU5HX05VTToKPj4+ICsJCXIgPSB2aG9zdF9tZGV2X2dldF92cmluZ19u dW0obSwgYXJncCk7Cj4+PiArCQlicmVhazsKPj4+ICsJZGVmYXVsdDoKPj4+ICsJCS8qCj4+PiAr CQkgKiBWSE9TVF9TRVRfTUVNX1RBQkxFLCBWSE9TVF9TRVRfTE9HX0JBU0UsIGFuZAo+Pj4gKwkJ ICogVkhPU1RfU0VUX0xPR19GRCBhcmUgbm90IHVzZWQgeWV0Lgo+Pj4gKwkJICovCj4+PiArCQly ID0gdmhvc3RfZGV2X2lvY3RsKCZtLT5kZXYsIGNtZCwgYXJncCk7Cj4+PiArCQlpZiAociA9PSAt RU5PSU9DVExDTUQpCj4+PiArCQkJciA9IHZob3N0X21kZXZfdnJpbmdfaW9jdGwobSwgY21kLCBh cmdwKTsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwltdXRleF91bmxvY2soJm0tPm11dGV4KTsKPj4+ICsJ cmV0dXJuIHI7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZp Y2Vfb3BzIHZmaW9fdmhvc3RfbWRldl9kZXZfb3BzID0gewo+Pj4gKwkubmFtZQkJPSAidmZpby12 aG9zdC1tZGV2IiwKPj4+ICsJLm9wZW4JCT0gdmhvc3RfbWRldl9vcGVuLAo+Pj4gKwkucmVsZWFz ZQk9IHZob3N0X21kZXZfcmVsZWFzZSwKPj4+ICsJLmlvY3RsCQk9IHZob3N0X21kZXZfdW5sb2Nr ZWRfaW9jdGwsCj4+PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMgaW50IHZob3N0X21kZXZfcHJvYmUo c3RydWN0IGRldmljZSAqZGV2KQo+Pj4gK3sKPj4+ICsJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2 ID0gbWRldl9mcm9tX2RldihkZXYpOwo+Pj4gKwljb25zdCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2 aWNlX29wcyAqb3BzID0gbWRldl9nZXRfdmhvc3Rfb3BzKG1kZXYpOwo+Pj4gKwlzdHJ1Y3Qgdmhv c3RfbWRldiAqbTsKPj4+ICsJaW50IG52cXMsIHI7Cj4+PiArCj4+PiArCS8qIEN1cnJlbnRseSwg d2Ugb25seSBhY2NlcHQgdGhlIG5ldHdvcmsgZGV2aWNlcy4gKi8KPj4+ICsJaWYgKG9wcy0+Z2V0 X2RldmljZV9pZChtZGV2KSAhPSBWSVJUSU9fSURfTkVUKQo+Pj4gKwkJcmV0dXJuIC1FTk9UU1VQ UDsKPj4+ICsKPj4+ICsJaWYgKG9wcy0+Z2V0X21kZXZfZmVhdHVyZXMobWRldikgIT0gVklSVElP X01ERVZfRl9WRVJTSU9OXzEpCj4+PiArCQlyZXR1cm4gLUVOT1RTVVBQOwo+Pj4gKwo+Pj4gKwlt ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptKSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1JFVFJZ X01BWUZBSUwpOwo+Pj4gKwlpZiAoIW0pCj4+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4+ICsKPj4+ ICsJbnZxcyA9IFZIT1NUX01ERVZfVlFfTUFYOwo+Pj4gKwo+Pj4gKwltLT52cXMgPSBkZXZtX2tt YWxsb2NfYXJyYXkoZGV2LCBudnFzLCBzaXplb2Yoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSksCj4+ PiArCQkJCSAgICBHRlBfS0VSTkVMKTsKPj4+ICsJaWYgKCFtLT52cXMpCj4+PiArCQlyZXR1cm4g LUVOT01FTTsKPj4+ICsKPj4+ICsJbXV0ZXhfaW5pdCgmbS0+bXV0ZXgpOwo+Pj4gKwo+Pj4gKwlt LT5tZGV2ID0gbWRldjsKPj4+ICsJbS0+bnZxcyA9IG52cXM7Cj4+PiArCW0tPnZpcnRpb19pZCA9 IG9wcy0+Z2V0X2RldmljZV9pZChtZGV2KTsKPj4+ICsKPj4+ICsJciA9IHZmaW9fYWRkX2dyb3Vw X2RldihkZXYsICZ2ZmlvX3Zob3N0X21kZXZfZGV2X29wcywgbSk7Cj4+PiArCWlmIChyKSB7Cj4+ PiArCQltdXRleF9kZXN0cm95KCZtLT5tdXRleCk7Cj4+PiArCQlyZXR1cm4gcjsKPj4+ICsJfQo+ Pj4gKwo+Pj4gKwlyZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgdmhvc3Rf bWRldl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQo+Pj4gK3sKPj4+ICsJc3RydWN0IHZob3N0 X21kZXYgKm07Cj4+PiArCj4+PiArCW0gPSB2ZmlvX2RlbF9ncm91cF9kZXYoZGV2KTsKPj4+ICsJ bXV0ZXhfZGVzdHJveSgmbS0+bXV0ZXgpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgY29uc3Qg c3RydWN0IG1kZXZfY2xhc3NfaWQgdmhvc3RfbWRldl9tYXRjaFtdID0gewo+Pj4gKwl7IE1ERVZf Q0xBU1NfSURfVkhPU1QgfSwKPj4+ICsJeyAwIH0sCj4+PiArfTsKPj4+ICtNT0RVTEVfREVWSUNF X1RBQkxFKG1kZXYsIHZob3N0X21kZXZfbWF0Y2gpOwo+Pj4gKwo+Pj4gK3N0YXRpYyBzdHJ1Y3Qg bWRldl9kcml2ZXIgdmhvc3RfbWRldl9kcml2ZXIgPSB7Cj4+PiArCS5uYW1lCT0gInZob3N0X21k ZXYiLAo+Pj4gKwkucHJvYmUJPSB2aG9zdF9tZGV2X3Byb2JlLAo+Pj4gKwkucmVtb3ZlCT0gdmhv c3RfbWRldl9yZW1vdmUsCj4+PiArCS5pZF90YWJsZSA9IHZob3N0X21kZXZfbWF0Y2gsCj4+PiAr fTsKPj4+ICsKPj4+ICtzdGF0aWMgaW50IF9faW5pdCB2aG9zdF9tZGV2X2luaXQodm9pZCkKPj4+ ICt7Cj4+PiArCXJldHVybiBtZGV2X3JlZ2lzdGVyX2RyaXZlcigmdmhvc3RfbWRldl9kcml2ZXIs IFRISVNfTU9EVUxFKTsKPj4+ICt9Cj4+PiArbW9kdWxlX2luaXQodmhvc3RfbWRldl9pbml0KTsK Pj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBfX2V4aXQgdmhvc3RfbWRldl9leGl0KHZvaWQpCj4+PiAr ewo+Pj4gKwltZGV2X3VucmVnaXN0ZXJfZHJpdmVyKCZ2aG9zdF9tZGV2X2RyaXZlcik7Cj4+PiAr fQo+Pj4gK21vZHVsZV9leGl0KHZob3N0X21kZXZfZXhpdCk7Cj4+PiArCj4+PiArTU9EVUxFX1ZF UlNJT04oIjAuMC4xIik7Cj4+PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+Pj4gK01PRFVM RV9BVVRIT1IoIkludGVsIENvcnBvcmF0aW9uIik7Cj4+PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJN ZWRpYXRlZCBkZXZpY2UgYmFzZWQgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyIpOwo+Pj4gZGlmZiAt LWdpdCBhL2luY2x1ZGUvbGludXgvbWRldi5oIGIvaW5jbHVkZS9saW51eC9tZGV2LmgKPj4+IGlu ZGV4IDliNjliMGJiZWJmZC4uM2UxZTAzOTI2MzU1IDEwMDY0NAo+Pj4gLS0tIGEvaW5jbHVkZS9s aW51eC9tZGV2LmgKPj4+ICsrKyBiL2luY2x1ZGUvbGludXgvbWRldi5oCj4+PiBAQCAtMTE3LDYg KzExNywxMCBAQCB2b2lkIG1kZXZfc2V0X3ZpcnRpb19vcHMoc3RydWN0IG1kZXZfZGV2aWNlICpt ZGV2LAo+Pj4gIAkJCSBjb25zdCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAqdmlydGlv X29wcyk7Cj4+PiAgY29uc3Qgc3RydWN0IHZpcnRpb19tZGV2X2RldmljZV9vcHMgKgo+Pj4gIG1k ZXZfZ2V0X3ZpcnRpb19vcHMoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKPj4+ICt2b2lkIG1k ZXZfc2V0X3Zob3N0X29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsCj4+PiArCQkJY29uc3Qg c3RydWN0IHZpcnRpb19tZGV2X2RldmljZV9vcHMgKnZob3N0X29wcyk7Cj4+PiArY29uc3Qgc3Ry dWN0IHZpcnRpb19tZGV2X2RldmljZV9vcHMgKgo+Pj4gK21kZXZfZ2V0X3Zob3N0X29wcyhzdHJ1 Y3QgbWRldl9kZXZpY2UgKm1kZXYpOwo+Pj4gIAo+Pj4gIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUg bWRldl9idXNfdHlwZTsKPj4+ICAKPj4+IEBAIC0xMzMsNiArMTM3LDcgQEAgc3RydWN0IG1kZXZf ZGV2aWNlICptZGV2X2Zyb21fZGV2KHN0cnVjdCBkZXZpY2UgKmRldik7Cj4+PiAgZW51bSB7Cj4+ PiAgCU1ERVZfQ0xBU1NfSURfVkZJTyA9IDEsCj4+PiAgCU1ERVZfQ0xBU1NfSURfVklSVElPID0g MiwKPj4+ICsJTURFVl9DTEFTU19JRF9WSE9TVCA9IDMsCj4+PiAgCS8qIE5ldyBlbnRyaWVzIG11 c3QgYmUgYWRkZWQgaGVyZSAqLwo+Pj4gIH07Cj4+PiAgCj4+PiBkaWZmIC0tZ2l0IGEvaW5jbHVk ZS91YXBpL2xpbnV4L3Zob3N0LmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmhvc3QuaAo+Pj4gaW5k ZXggNDBkMDI4ZWVkNjQ1Li4wNjFhMjgyNGExYjMgMTAwNjQ0Cj4+PiAtLS0gYS9pbmNsdWRlL3Vh cGkvbGludXgvdmhvc3QuaAo+Pj4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3Zob3N0LmgKPj4+ IEBAIC0xMTYsNCArMTE2LDIyIEBACj4+PiAgI2RlZmluZSBWSE9TVF9WU09DS19TRVRfR1VFU1Rf Q0lECV9JT1coVkhPU1RfVklSVElPLCAweDYwLCBfX3U2NCkKPj4+ICAjZGVmaW5lIFZIT1NUX1ZT T0NLX1NFVF9SVU5OSU5HCQlfSU9XKFZIT1NUX1ZJUlRJTywgMHg2MSwgaW50KQo+Pj4gIAo+Pj4g Ky8qIFZIT1NUX01ERVYgc3BlY2lmaWMgZGVmaW5lcyAqLwo+Pj4gKwo+Pj4gKy8qIEdldCB0aGUg ZGV2aWNlIGlkLiBUaGUgZGV2aWNlIGlkcyBmb2xsb3cgdGhlIHNhbWUgZGVmaW5pdGlvbiBvZgo+ Pj4gKyAqIHRoZSBkZXZpY2UgaWQgZGVmaW5lZCBpbiB2aXJ0aW8tc3BlYy4gKi8KPj4+ICsjZGVm aW5lIFZIT1NUX01ERVZfR0VUX0RFVklDRV9JRAlfSU9SKFZIT1NUX1ZJUlRJTywgMHg3MCwgX191 MzIpCj4+PiArLyogR2V0IGFuZCBzZXQgdGhlIHN0YXR1cy4gVGhlIHN0YXR1cyBiaXRzIGZvbGxv dyB0aGUgc2FtZSBkZWZpbml0aW9uCj4+PiArICogb2YgdGhlIGRldmljZSBzdGF0dXMgZGVmaW5l ZCBpbiB2aXJ0aW8tc3BlYy4gKi8KPj4+ICsjZGVmaW5lIFZIT1NUX01ERVZfR0VUX1NUQVRVUwkJ X0lPUihWSE9TVF9WSVJUSU8sIDB4NzEsIF9fdTgpCj4+PiArI2RlZmluZSBWSE9TVF9NREVWX1NF VF9TVEFUVVMJCV9JT1coVkhPU1RfVklSVElPLCAweDcyLCBfX3U4KQo+Pj4gKy8qIEdldCBhbmQg c2V0IHRoZSBkZXZpY2UgY29uZmlnLiBUaGUgZGV2aWNlIGNvbmZpZyBmb2xsb3dzIHRoZSBzYW1l Cj4+PiArICogZGVmaW5pdGlvbiBvZiB0aGUgZGV2aWNlIGNvbmZpZyBkZWZpbmVkIGluIHZpcnRp by1zcGVjLiAqLwo+Pj4gKyNkZWZpbmUgVkhPU1RfTURFVl9HRVRfQ09ORklHCQlfSU9SKFZIT1NU X1ZJUlRJTywgMHg3Mywgc3RydWN0IHZob3N0X21kZXZfY29uZmlnKQo+Pj4gKyNkZWZpbmUgVkhP U1RfTURFVl9TRVRfQ09ORklHCQlfSU9XKFZIT1NUX1ZJUlRJTywgMHg3NCwgc3RydWN0IHZob3N0 X21kZXZfY29uZmlnKQo+Pj4gKy8qIEVuYWJsZS9kaXNhYmxlIHRoZSByaW5nLiAqLwo+Pj4gKyNk ZWZpbmUgVkhPU1RfTURFVl9TRVRfVlJJTkdfRU5BQkxFCV9JT1coVkhPU1RfVklSVElPLCAweDc1 LCBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGUpCj4+PiArLyogR2V0IHRoZSBtYXggcmluZyBzaXpl LiAqLwo+Pj4gKyNkZWZpbmUgVkhPU1RfTURFVl9HRVRfVlJJTkdfTlVNCV9JT1IoVkhPU1RfVklS VElPLCAweDc2LCBfX3UxNikKPj4+ICsKPj4+ICAjZW5kaWYKPj4+IGRpZmYgLS1naXQgYS9pbmNs dWRlL3VhcGkvbGludXgvdmhvc3RfdHlwZXMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC92aG9zdF90 eXBlcy5oCj4+PiBpbmRleCBjOTA3MjkwZmYwNjUuLjdiMTA1ZDBiMmZiOSAxMDA2NDQKPj4+IC0t LSBhL2luY2x1ZGUvdWFwaS9saW51eC92aG9zdF90eXBlcy5oCj4+PiArKysgYi9pbmNsdWRlL3Vh cGkvbGludXgvdmhvc3RfdHlwZXMuaAo+Pj4gQEAgLTExOSw2ICsxMTksMTQgQEAgc3RydWN0IHZo b3N0X3Njc2lfdGFyZ2V0IHsKPj4+ICAJdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQ7Cj4+PiAgfTsK Pj4+ICAKPj4+ICsvKiBWSE9TVF9NREVWIHNwZWNpZmljIGRlZmluaXRpb25zICovCj4+PiArCj4+ PiArc3RydWN0IHZob3N0X21kZXZfY29uZmlnIHsKPj4+ICsJX191MzIgb2ZmOwo+Pj4gKwlfX3Uz MiBsZW47Cj4+PiArCV9fdTggYnVmWzBdOwo+Pj4gK307Cj4+PiArCj4+PiAgLyogRmVhdHVyZSBi aXRzICovCj4+PiAgLyogTG9nIGFsbCB3cml0ZSBkZXNjcmlwdG9ycy4gQ2FuIGJlIGNoYW5nZWQg d2hpbGUgZGV2aWNlIGlzIGFjdGl2ZS4gKi8KPj4+ICAjZGVmaW5lIFZIT1NUX0ZfTE9HX0FMTCAy NgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVmlydHVh bGl6YXRpb24gbWFpbGluZyBsaXN0ClZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRp b24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZv L3ZpcnR1YWxpemF0aW9u