From mboxrd@z Thu Jan 1 00:00:00 1970 From: Huang Rui Subject: Re: [PATCH 2/2] drm/amd/pp: Use atombios interface directly in powerplay Date: Tue, 27 Mar 2018 10:23:13 +0800 Message-ID: <20180327022312.GA32670@hr-amur2> References: <1522065362-25568-1-git-send-email-Rex.Zhu@amd.com> <1522065362-25568-2-git-send-email-Rex.Zhu@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1522065362-25568-2-git-send-email-Rex.Zhu-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: Rex Zhu Cc: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org T24gTW9uLCBNYXIgMjYsIDIwMTggYXQgMDc6NTY6MDJQTSArMDgwMCwgUmV4IFpodSB3cm90ZToK PiBJbiBvcmRlciB0byByZW1vdmUgdGhlIGNncyB3cmFwcGVyIGZ1bmN0aW9ucyBmb3IgYXRvbWJp b3MgYXBpLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFJleCBaaHUgPFJleC5aaHVAYW1kLmNvbT4KClJl dmlld2VkLWJ5OiBIdWFuZyBSdWkgPHJheS5odWFuZ0BhbWQuY29tPgoKPiAtLS0KPiAgZHJpdmVy cy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvcHBhdG9tY3RybC5jICAgfCAxNDUgKysrKysr KysrKystLS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3Bw YXRvbWN0cmwuaCAgIHwgICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3 bWdyL3BwYXRvbWZ3Y3RybC5jIHwgIDg4ICsrKysrKystLS0tLS0KPiAgLi4uL2FtZC9wb3dlcnBs YXkvaHdtZ3IvcHJvY2Vzc19wcHRhYmxlc192MV8wLmMgICAgfCAgIDIgKy0KPiAgLi4uL2dwdS9k cm0vYW1kL3Bvd2VycGxheS9od21nci9wcm9jZXNzcHB0YWJsZXMuYyAgfCAgIDQgKy0KPiAgZHJp dmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3Ivc211N19od21nci5jICAgfCAgIDMgKy0K PiAgZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3Ivc211OF9od21nci5jICAgfCAg IDMgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3Ivc211X2hlbHBlci5j ICAgfCAgMTYgKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3NtdV9o ZWxwZXIuaCAgIHwgICAzICsKPiAgLi4uL2FtZC9wb3dlcnBsYXkvaHdtZ3IvdmVnYTEwX3Byb2Nl c3NwcHRhYmxlcy5jICAgfCAgIDIgKy0KPiAgLi4uL2FtZC9wb3dlcnBsYXkvaHdtZ3IvdmVnYTEy X3Byb2Nlc3NwcHRhYmxlcy5jICAgfCAgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dl cnBsYXkvc211bWdyL2Zpamlfc211bWdyLmMgfCAgIDIgKy0KPiAgMTIgZmlsZXMgY2hhbmdlZCwg MTQ5IGluc2VydGlvbnMoKyksIDEyMyBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvcHBhdG9tY3RybC5jIGIvZHJpdmVycy9n cHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvcHBhdG9tY3RybC5jCj4gaW5kZXggYzZmZWJiZi4u OTcxZmI1ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21n ci9wcGF0b21jdHJsLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21n ci9wcGF0b21jdHJsLmMKPiBAQCAtMjMsNyArMjMsNyBAQAo+ICAjaW5jbHVkZSAicHBfZGVidWcu aCIKPiAgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICAjaW5jbHVkZSA8bGludXgvc2xhYi5o Pgo+IC0KPiArI2luY2x1ZGUgImF0b20uaCIKPiAgI2luY2x1ZGUgInBwYXRvbWN0cmwuaCIKPiAg I2luY2x1ZGUgImF0b21iaW9zLmgiCj4gICNpbmNsdWRlICJjZ3NfY29tbW9uLmgiCj4gQEAgLTEy OCw3ICsxMjgsNiBAQCBzdGF0aWMgaW50IGF0b21jdHJsX3NldF9tY19yZWdfYWRkcmVzc190YWJs ZSgKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IC0KPiAgaW50IGF0b21jdHJsX2luaXRpYWxpemVf bWNfcmVnX3RhYmxlKAo+ICAJCXN0cnVjdCBwcF9od21nciAqaHdtZ3IsCj4gIAkJdWludDhfdCBt b2R1bGVfaW5kZXgsCj4gQEAgLTE0MSw3ICsxNDAsNyBAQCBpbnQgYXRvbWN0cmxfaW5pdGlhbGl6 ZV9tY19yZWdfdGFibGUoCj4gIAl1MTYgc2l6ZTsKPiAgCj4gIAl2cmFtX2luZm8gPSAoQVRPTV9W UkFNX0lORk9fSEVBREVSX1YyXzEgKikKPiAtCQljZ3NfYXRvbV9nZXRfZGF0YV90YWJsZShod21n ci0+ZGV2aWNlLAo+ICsJCXNtdV9hdG9tX2dldF9kYXRhX3RhYmxlKGh3bWdyLT5hZGV2LAo+ICAJ CQkJR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoREFUQSwgVlJBTV9JbmZvKSwgJnNpemUsICZmcmV2 LCAmY3Jldik7Cj4gIAo+ICAJaWYgKG1vZHVsZV9pbmRleCA+PSB2cmFtX2luZm8tPnVjTnVtT2ZW UkFNTW9kdWxlKSB7Cj4gQEAgLTE3NCw2ICsxNzMsOCBAQCBpbnQgYXRvbWN0cmxfc2V0X2VuZ2lu ZV9kcmFtX3RpbWluZ3NfcnY3NzAoCj4gIAkJdWludDMyX3QgZW5naW5lX2Nsb2NrLAo+ICAJCXVp bnQzMl90IG1lbW9yeV9jbG9jaykKPiAgewo+ICsJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYg PSBod21nci0+YWRldjsKPiArCj4gIAlTRVRfRU5HSU5FX0NMT0NLX1BTX0FMTE9DQVRJT04gZW5n aW5lX2Nsb2NrX3BhcmFtZXRlcnM7Cj4gIAo+ICAJLyogVGhleSBhcmUgYm90aCBpbiAxMEtIeiBV bml0cy4gKi8KPiBAQCAtMTg0LDkgKzE4NSwxMCBAQCBpbnQgYXRvbWN0cmxfc2V0X2VuZ2luZV9k cmFtX3RpbWluZ3NfcnY3NzAoCj4gIAkvKiBpbiAxMCBraHogdW5pdHMuKi8KPiAgCWVuZ2luZV9j bG9ja19wYXJhbWV0ZXJzLnNSZXNlcnZlZC51bENsb2NrID0KPiAgCQljcHVfdG9fbGUzMihtZW1v cnlfY2xvY2sgJiBTRVRfQ0xPQ0tfRlJFUV9NQVNLKTsKPiAtCXJldHVybiBjZ3NfYXRvbV9leGVj X2NtZF90YWJsZShod21nci0+ZGV2aWNlLAo+ICsKPiArCXJldHVybiBhbWRncHVfYXRvbV9leGVj dXRlX3RhYmxlKGFkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsCj4gIAkJCUdldEluZGV4SW50 b01hc3RlclRhYmxlKENPTU1BTkQsIER5bmFtaWNNZW1vcnlTZXR0aW5ncyksCj4gLQkJCSZlbmdp bmVfY2xvY2tfcGFyYW1ldGVycyk7Cj4gKwkJCSh1aW50MzJfdCAqKSZlbmdpbmVfY2xvY2tfcGFy YW1ldGVycyk7Cj4gIH0KPiAgCj4gIC8qKgo+IEBAIC0yMDMsNyArMjA1LDcgQEAgc3RhdGljIEFU T01fVk9MVEFHRV9PQkpFQ1RfSU5GTyAqZ2V0X3ZvbHRhZ2VfaW5mb190YWJsZSh2b2lkICpkZXZp Y2UpCj4gIAl1bmlvbiB2b2x0YWdlX29iamVjdF9pbmZvICp2b2x0YWdlX2luZm87Cj4gIAo+ICAJ dm9sdGFnZV9pbmZvID0gKHVuaW9uIHZvbHRhZ2Vfb2JqZWN0X2luZm8gKikKPiAtCQljZ3NfYXRv bV9nZXRfZGF0YV90YWJsZShkZXZpY2UsIGluZGV4LAo+ICsJCXNtdV9hdG9tX2dldF9kYXRhX3Rh YmxlKGRldmljZSwgaW5kZXgsCj4gIAkJCSZzaXplLCAmZnJldiwgJmNyZXYpOwo+ICAKPiAgCWlm ICh2b2x0YWdlX2luZm8gIT0gTlVMTCkKPiBAQCAtMjQ3LDE2ICsyNDksMTYgQEAgaW50IGF0b21j dHJsX2dldF9tZW1vcnlfcGxsX2RpdmlkZXJzX3NpKAo+ICAJCXBwX2F0b21jdHJsX21lbW9yeV9j bG9ja19wYXJhbSAqbXBsbF9wYXJhbSwKPiAgCQlib29sIHN0cm9iZV9tb2RlKQo+ICB7Cj4gKwlz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGh3bWdyLT5hZGV2Owo+ICAJQ09NUFVURV9NRU1P UllfQ0xPQ0tfUEFSQU1fUEFSQU1FVEVSU19WMl8xIG1wbGxfcGFyYW1ldGVyczsKPiAgCWludCBy ZXN1bHQ7Cj4gIAo+ICAJbXBsbF9wYXJhbWV0ZXJzLnVsQ2xvY2sgPSBjcHVfdG9fbGUzMihjbG9j a192YWx1ZSk7Cj4gIAltcGxsX3BhcmFtZXRlcnMudWNJbnB1dEZsYWcgPSAodWludDhfdCkoKHN0 cm9iZV9tb2RlKSA/IDEgOiAwKTsKPiAgCj4gLQlyZXN1bHQgPSBjZ3NfYXRvbV9leGVjX2NtZF90 YWJsZQo+IC0JCShod21nci0+ZGV2aWNlLAo+ICsJcmVzdWx0ID0gYW1kZ3B1X2F0b21fZXhlY3V0 ZV90YWJsZShhZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LAo+ICAJCSBHZXRJbmRleEludG9N YXN0ZXJUYWJsZShDT01NQU5ELCBDb21wdXRlTWVtb3J5Q2xvY2tQYXJhbSksCj4gLQkJICZtcGxs X3BhcmFtZXRlcnMpOwo+ICsJCSh1aW50MzJfdCAqKSZtcGxsX3BhcmFtZXRlcnMpOwo+ICAKPiAg CWlmICgwID09IHJlc3VsdCkgewo+ICAJCW1wbGxfcGFyYW0tPm1wbGxfZmJfZGl2aWRlci5jbGtf ZnJhYyA9Cj4gQEAgLTI5NSwxNCArMjk3LDE1IEBAIGludCBhdG9tY3RybF9nZXRfbWVtb3J5X3Bs bF9kaXZpZGVyc19zaSgKPiAgaW50IGF0b21jdHJsX2dldF9tZW1vcnlfcGxsX2RpdmlkZXJzX3Zp KHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCj4gIAkJdWludDMyX3QgY2xvY2tfdmFsdWUsIHBwX2F0 b21jdHJsX21lbW9yeV9jbG9ja19wYXJhbSAqbXBsbF9wYXJhbSkKPiAgewo+ICsJc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYgPSBod21nci0+YWRldjsKPiAgCUNPTVBVVEVfTUVNT1JZX0NMT0NL X1BBUkFNX1BBUkFNRVRFUlNfVjJfMiBtcGxsX3BhcmFtZXRlcnM7Cj4gIAlpbnQgcmVzdWx0Owo+ ICAKPiAgCW1wbGxfcGFyYW1ldGVycy51bENsb2NrLnVsQ2xvY2sgPSBjcHVfdG9fbGUzMihjbG9j a192YWx1ZSk7Cj4gIAo+IC0JcmVzdWx0ID0gY2dzX2F0b21fZXhlY19jbWRfdGFibGUoaHdtZ3It PmRldmljZSwKPiArCXJlc3VsdCA9IGFtZGdwdV9hdG9tX2V4ZWN1dGVfdGFibGUoYWRldi0+bW9k ZV9pbmZvLmF0b21fY29udGV4dCwKPiAgCQkJR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFO RCwgQ29tcHV0ZU1lbW9yeUNsb2NrUGFyYW0pLAo+IC0JCQkmbXBsbF9wYXJhbWV0ZXJzKTsKPiAr CQkJKHVpbnQzMl90ICopJm1wbGxfcGFyYW1ldGVycyk7Cj4gIAo+ICAJaWYgKCFyZXN1bHQpCj4g IAkJbXBsbF9wYXJhbS0+bXBsbF9wb3N0X2RpdmlkZXIgPQo+IEBAIC0zMTUsMTUgKzMxOCwxNSBA QCBpbnQgYXRvbWN0cmxfZ2V0X2VuZ2luZV9wbGxfZGl2aWRlcnNfa29uZyhzdHJ1Y3QgcHBfaHdt Z3IgKmh3bWdyLAo+ICAJCQkJCSAgdWludDMyX3QgY2xvY2tfdmFsdWUsCj4gIAkJCQkJICBwcF9h dG9tY3RybF9jbG9ja19kaXZpZGVyc19rb25nICpkaXZpZGVycykKPiAgewo+ICsJc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYgPSBod21nci0+YWRldjsKPiAgCUNPTVBVVEVfTUVNT1JZX0VOR0lO RV9QTExfUEFSQU1FVEVSU19WNCBwbGxfcGFyYW1ldGVyczsKPiAgCWludCByZXN1bHQ7Cj4gIAo+ ICAJcGxsX3BhcmFtZXRlcnMudWxDbG9jayA9IGNwdV90b19sZTMyKGNsb2NrX3ZhbHVlKTsKPiAg Cj4gLQlyZXN1bHQgPSBjZ3NfYXRvbV9leGVjX2NtZF90YWJsZQo+IC0JCShod21nci0+ZGV2aWNl LAo+ICsJcmVzdWx0ID0gYW1kZ3B1X2F0b21fZXhlY3V0ZV90YWJsZShhZGV2LT5tb2RlX2luZm8u YXRvbV9jb250ZXh0LAo+ICAJCSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBDb21w dXRlTWVtb3J5RW5naW5lUExMKSwKPiAtCQkgJnBsbF9wYXJhbWV0ZXJzKTsKPiArCQkodWludDMy X3QgKikmcGxsX3BhcmFtZXRlcnMpOwo+ICAKPiAgCWlmICgwID09IHJlc3VsdCkgewo+ICAJCWRp dmlkZXJzLT5wbGxfcG9zdF9kaXZpZGVyID0gcGxsX3BhcmFtZXRlcnMudWNQb3N0RGl2Owo+IEBA IC0zMzgsMTYgKzM0MSwxNiBAQCBpbnQgYXRvbWN0cmxfZ2V0X2VuZ2luZV9wbGxfZGl2aWRlcnNf dmkoCj4gIAkJdWludDMyX3QgY2xvY2tfdmFsdWUsCj4gIAkJcHBfYXRvbWN0cmxfY2xvY2tfZGl2 aWRlcnNfdmkgKmRpdmlkZXJzKQo+ICB7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9 IGh3bWdyLT5hZGV2Owo+ICAJQ09NUFVURV9HUFVfQ0xPQ0tfT1VUUFVUX1BBUkFNRVRFUlNfVjFf NiBwbGxfcGF0YW1ldGVyczsKPiAgCWludCByZXN1bHQ7Cj4gIAo+ICAJcGxsX3BhdGFtZXRlcnMu dWxDbG9jay51bENsb2NrID0gY3B1X3RvX2xlMzIoY2xvY2tfdmFsdWUpOwo+ICAJcGxsX3BhdGFt ZXRlcnMudWxDbG9jay51Y1Bvc3REaXYgPSBDT01QVVRFX0dQVUNMS19JTlBVVF9GTEFHX1NDTEs7 Cj4gIAo+IC0JcmVzdWx0ID0gY2dzX2F0b21fZXhlY19jbWRfdGFibGUKPiAtCQkoaHdtZ3ItPmRl dmljZSwKPiArCXJlc3VsdCA9IGFtZGdwdV9hdG9tX2V4ZWN1dGVfdGFibGUoYWRldi0+bW9kZV9p bmZvLmF0b21fY29udGV4dCwKPiAgCQkgR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwg Q29tcHV0ZU1lbW9yeUVuZ2luZVBMTCksCj4gLQkJICZwbGxfcGF0YW1ldGVycyk7Cj4gKwkJKHVp bnQzMl90ICopJnBsbF9wYXRhbWV0ZXJzKTsKPiAgCj4gIAlpZiAoMCA9PSByZXN1bHQpIHsKPiAg CQlkaXZpZGVycy0+cGxsX3Bvc3RfZGl2aWRlciA9Cj4gQEAgLTM3NSwxNiArMzc4LDE2IEBAIGlu dCBhdG9tY3RybF9nZXRfZW5naW5lX3BsbF9kaXZpZGVyc19haShzdHJ1Y3QgcHBfaHdtZ3IgKmh3 bWdyLAo+ICAJCXVpbnQzMl90IGNsb2NrX3ZhbHVlLAo+ICAJCXBwX2F0b21jdHJsX2Nsb2NrX2Rp dmlkZXJzX2FpICpkaXZpZGVycykKPiAgewo+ICsJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYg PSBod21nci0+YWRldjsKPiAgCUNPTVBVVEVfR1BVX0NMT0NLX09VVFBVVF9QQVJBTUVURVJTX1Yx XzcgcGxsX3BhdGFtZXRlcnM7Cj4gIAlpbnQgcmVzdWx0Owo+ICAKPiAgCXBsbF9wYXRhbWV0ZXJz LnVsQ2xvY2sudWxDbG9jayA9IGNwdV90b19sZTMyKGNsb2NrX3ZhbHVlKTsKPiAgCXBsbF9wYXRh bWV0ZXJzLnVsQ2xvY2sudWNQb3N0RGl2ID0gQ09NUFVURV9HUFVDTEtfSU5QVVRfRkxBR19TQ0xL Owo+ICAKPiAtCXJlc3VsdCA9IGNnc19hdG9tX2V4ZWNfY21kX3RhYmxlCj4gLQkJKGh3bWdyLT5k ZXZpY2UsCj4gKwlyZXN1bHQgPSBhbWRncHVfYXRvbV9leGVjdXRlX3RhYmxlKGFkZXYtPm1vZGVf aW5mby5hdG9tX2NvbnRleHQsCj4gIAkJIEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQs IENvbXB1dGVNZW1vcnlFbmdpbmVQTEwpLAo+IC0JCSAmcGxsX3BhdGFtZXRlcnMpOwo+ICsJCSh1 aW50MzJfdCAqKSZwbGxfcGF0YW1ldGVycyk7Cj4gIAo+ICAJaWYgKDAgPT0gcmVzdWx0KSB7Cj4g IAkJZGl2aWRlcnMtPnVzU2Nsa19mY3dfZnJhYyAgICAgPSBsZTE2X3RvX2NwdShwbGxfcGF0YW1l dGVycy51c1NjbGtfZmN3X2ZyYWMpOwo+IEBAIC00MDcsNiArNDEwLDcgQEAgaW50IGF0b21jdHJs X2dldF9kZnNfcGxsX2RpdmlkZXJzX3ZpKAo+ICAJCXVpbnQzMl90IGNsb2NrX3ZhbHVlLAo+ICAJ CXBwX2F0b21jdHJsX2Nsb2NrX2RpdmlkZXJzX3ZpICpkaXZpZGVycykKPiAgewo+ICsJc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBod21nci0+YWRldjsKPiAgCUNPTVBVVEVfR1BVX0NMT0NL X09VVFBVVF9QQVJBTUVURVJTX1YxXzYgcGxsX3BhdGFtZXRlcnM7Cj4gIAlpbnQgcmVzdWx0Owo+ ICAKPiBAQCAtNDE0LDEwICs0MTgsOSBAQCBpbnQgYXRvbWN0cmxfZ2V0X2Rmc19wbGxfZGl2aWRl cnNfdmkoCj4gIAlwbGxfcGF0YW1ldGVycy51bENsb2NrLnVjUG9zdERpdiA9Cj4gIAkJQ09NUFVU RV9HUFVDTEtfSU5QVVRfRkxBR19ERUZBVUxUX0dQVUNMSzsKPiAgCj4gLQlyZXN1bHQgPSBjZ3Nf YXRvbV9leGVjX2NtZF90YWJsZQo+IC0JCShod21nci0+ZGV2aWNlLAo+ICsJcmVzdWx0ID0gYW1k Z3B1X2F0b21fZXhlY3V0ZV90YWJsZShhZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LAo+ICAJ CSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBDb21wdXRlTWVtb3J5RW5naW5lUExM KSwKPiAtCQkgJnBsbF9wYXRhbWV0ZXJzKTsKPiArCQkodWludDMyX3QgKikmcGxsX3BhdGFtZXRl cnMpOwo+ICAKPiAgCWlmICgwID09IHJlc3VsdCkgewo+ICAJCWRpdmlkZXJzLT5wbGxfcG9zdF9k aXZpZGVyID0KPiBAQCAtNDUyLDcgKzQ1NSw3IEBAIHVpbnQzMl90IGF0b21jdHJsX2dldF9yZWZl cmVuY2VfY2xvY2soc3RydWN0IHBwX2h3bWdyICpod21ncikKPiAgCXVpbnQzMl90IGNsb2NrOwo+ ICAKPiAgCWZ3X2luZm8gPSAoQVRPTV9GSVJNV0FSRV9JTkZPICopCj4gLQkJY2dzX2F0b21fZ2V0 X2RhdGFfdGFibGUoaHdtZ3ItPmRldmljZSwKPiArCQlzbXVfYXRvbV9nZXRfZGF0YV90YWJsZSho d21nci0+YWRldiwKPiAgCQkJR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoREFUQSwgRmlybXdhcmVJ bmZvKSwKPiAgCQkJJnNpemUsICZmcmV2LCAmY3Jldik7Cj4gIAo+IEBAIC00NzYsNyArNDc5LDcg QEAgYm9vbCBhdG9tY3RybF9pc192b2x0YWdlX2NvbnRyb2xsZWRfYnlfZ3Bpb192MygKPiAgCQl1 aW50OF90IHZvbHRhZ2VfbW9kZSkKPiAgewo+ICAJQVRPTV9WT0xUQUdFX09CSkVDVF9JTkZPX1Yz XzEgKnZvbHRhZ2VfaW5mbyA9Cj4gLQkJKEFUT01fVk9MVEFHRV9PQkpFQ1RfSU5GT19WM18xICop Z2V0X3ZvbHRhZ2VfaW5mb190YWJsZShod21nci0+ZGV2aWNlKTsKPiArCQkoQVRPTV9WT0xUQUdF X09CSkVDVF9JTkZPX1YzXzEgKilnZXRfdm9sdGFnZV9pbmZvX3RhYmxlKGh3bWdyLT5hZGV2KTsK PiAgCWJvb2wgcmV0Owo+ICAKPiAgCVBQX0FTU0VSVF9XSVRIX0NPREUoKE5VTEwgIT0gdm9sdGFn ZV9pbmZvKSwKPiBAQCAtNDk1LDcgKzQ5OCw3IEBAIGludCBhdG9tY3RybF9nZXRfdm9sdGFnZV90 YWJsZV92MygKPiAgCQlwcF9hdG9tY3RybF92b2x0YWdlX3RhYmxlICp2b2x0YWdlX3RhYmxlKQo+ ICB7Cj4gIAlBVE9NX1ZPTFRBR0VfT0JKRUNUX0lORk9fVjNfMSAqdm9sdGFnZV9pbmZvID0KPiAt CQkoQVRPTV9WT0xUQUdFX09CSkVDVF9JTkZPX1YzXzEgKilnZXRfdm9sdGFnZV9pbmZvX3RhYmxl KGh3bWdyLT5kZXZpY2UpOwo+ICsJCShBVE9NX1ZPTFRBR0VfT0JKRUNUX0lORk9fVjNfMSAqKWdl dF92b2x0YWdlX2luZm9fdGFibGUoaHdtZ3ItPmFkZXYpOwo+ICAJY29uc3QgQVRPTV9WT0xUQUdF X09CSkVDVF9WMyAqdm9sdGFnZV9vYmplY3Q7Cj4gIAl1bnNpZ25lZCBpbnQgaTsKPiAgCj4gQEAg LTU3Miw3ICs1NzUsNyBAQCBzdGF0aWMgQVRPTV9HUElPX1BJTl9MVVQgKmdldF9ncGlvX2xvb2t1 cF90YWJsZSh2b2lkICpkZXZpY2UpCj4gIAl2b2lkICp0YWJsZV9hZGRyZXNzOwo+ICAKPiAgCXRh YmxlX2FkZHJlc3MgPSAoQVRPTV9HUElPX1BJTl9MVVQgKikKPiAtCQljZ3NfYXRvbV9nZXRfZGF0 YV90YWJsZShkZXZpY2UsCj4gKwkJc211X2F0b21fZ2V0X2RhdGFfdGFibGUoZGV2aWNlLAo+ICAJ CQkJR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoREFUQSwgR1BJT19QaW5fTFVUKSwKPiAgCQkJCSZz aXplLCAmZnJldiwgJmNyZXYpOwo+ICAKPiBAQCAtNTkyLDcgKzU5NSw3IEBAIGJvb2wgYXRvbWN0 cmxfZ2V0X3BwX2Fzc2lnbl9waW4oCj4gIHsKPiAgCWJvb2wgYlJldCA9IGZhbHNlOwo+ICAJQVRP TV9HUElPX1BJTl9MVVQgKmdwaW9fbG9va3VwX3RhYmxlID0KPiAtCQlnZXRfZ3Bpb19sb29rdXBf dGFibGUoaHdtZ3ItPmRldmljZSk7Cj4gKwkJZ2V0X2dwaW9fbG9va3VwX3RhYmxlKGh3bWdyLT5h ZGV2KTsKPiAgCj4gIAlQUF9BU1NFUlRfV0lUSF9DT0RFKChOVUxMICE9IGdwaW9fbG9va3VwX3Rh YmxlKSwKPiAgCQkJIkNvdWxkIG5vdCBmaW5kIEdQSU8gbG9va3VwIFRhYmxlIGluIEJJT1MuIiwg cmV0dXJuIGZhbHNlKTsKPiBAQCAtNjEzLDcgKzYxNiw3IEBAIGludCBhdG9tY3RybF9jYWxjdWxh dGVfdm9sdGFnZV9ldnZfb25fc2NsaygKPiAgCQlib29sIGRlYnVnKQo+ICB7Cj4gIAlBVE9NX0FT SUNfUFJPRklMSU5HX0lORk9fVjNfNCAqZ2V0QVNJQ1Byb2ZpbGluZ0luZm87Cj4gLQo+ICsJc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBod21nci0+YWRldjsKPiAgCUVGVVNFX0xJTkVBUl9G VU5DX1BBUkFNIHNST19mdXNlOwo+ICAJRUZVU0VfTElORUFSX0ZVTkNfUEFSQU0gc0NBQ21fZnVz ZTsKPiAgCUVGVVNFX0xJTkVBUl9GVU5DX1BBUkFNIHNDQUNiX2Z1c2U7Cj4gQEAgLTY0MCw3ICs2 NDMsNyBAQCBpbnQgYXRvbWN0cmxfY2FsY3VsYXRlX3ZvbHRhZ2VfZXZ2X29uX3NjbGsoCj4gIAlp bnQgcmVzdWx0Owo+ICAKPiAgCWdldEFTSUNQcm9maWxpbmdJbmZvID0gKEFUT01fQVNJQ19QUk9G SUxJTkdfSU5GT19WM180ICopCj4gLQkJCWNnc19hdG9tX2dldF9kYXRhX3RhYmxlKGh3bWdyLT5k ZXZpY2UsCj4gKwkJCXNtdV9hdG9tX2dldF9kYXRhX3RhYmxlKGh3bWdyLT5hZGV2LAo+ICAJCQkJ CUdldEluZGV4SW50b01hc3RlclRhYmxlKERBVEEsIEFTSUNfUHJvZmlsaW5nSW5mbyksCj4gIAkJ CQkJTlVMTCwgTlVMTCwgTlVMTCk7Cj4gIAo+IEBAIC03MDYsOSArNzA5LDkgQEAgaW50IGF0b21j dHJsX2NhbGN1bGF0ZV92b2x0YWdlX2V2dl9vbl9zY2xrKAo+ICAKPiAgCXNPdXRwdXRfRnVzZVZh bHVlcy5zRWZ1c2UgPSBzSW5wdXRfRnVzZVZhbHVlczsKPiAgCj4gLQlyZXN1bHQgPSBjZ3NfYXRv bV9leGVjX2NtZF90YWJsZShod21nci0+ZGV2aWNlLAo+ICsJcmVzdWx0ID0gYW1kZ3B1X2F0b21f ZXhlY3V0ZV90YWJsZShhZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LAo+ICAJCQlHZXRJbmRl eEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBSZWFkRWZ1c2VWYWx1ZSksCj4gLQkJCSZzT3V0cHV0 X0Z1c2VWYWx1ZXMpOwo+ICsJCQkodWludDMyX3QgKikmc091dHB1dF9GdXNlVmFsdWVzKTsKPiAg Cj4gIAlpZiAocmVzdWx0KQo+ICAJCXJldHVybiByZXN1bHQ7Cj4gQEAgLTcyNyw5ICs3MzAsOSBA QCBpbnQgYXRvbWN0cmxfY2FsY3VsYXRlX3ZvbHRhZ2VfZXZ2X29uX3NjbGsoCj4gIAo+ICAJc091 dHB1dF9GdXNlVmFsdWVzLnNFZnVzZSA9IHNJbnB1dF9GdXNlVmFsdWVzOwo+ICAKPiAtCXJlc3Vs dCA9IGNnc19hdG9tX2V4ZWNfY21kX3RhYmxlKGh3bWdyLT5kZXZpY2UsCj4gKwlyZXN1bHQgPSBh bWRncHVfYXRvbV9leGVjdXRlX3RhYmxlKGFkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsCj4g IAkJCUdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFJlYWRFZnVzZVZhbHVlKSwKPiAt CQkJJnNPdXRwdXRfRnVzZVZhbHVlcyk7Cj4gKwkJCSh1aW50MzJfdCAqKSZzT3V0cHV0X0Z1c2VW YWx1ZXMpOwo+ICAKPiAgCWlmIChyZXN1bHQpCj4gIAkJcmV0dXJuIHJlc3VsdDsKPiBAQCAtNzQ3 LDkgKzc1MCw5IEBAIGludCBhdG9tY3RybF9jYWxjdWxhdGVfdm9sdGFnZV9ldnZfb25fc2NsaygK PiAgCXNJbnB1dF9GdXNlVmFsdWVzLnVjQml0TGVuZ3RoID0gc0NBQ2JfZnVzZS51Y0VmdXNlTGVu Z3RoOwo+ICAJc091dHB1dF9GdXNlVmFsdWVzLnNFZnVzZSA9IHNJbnB1dF9GdXNlVmFsdWVzOwo+ ICAKPiAtCXJlc3VsdCA9IGNnc19hdG9tX2V4ZWNfY21kX3RhYmxlKGh3bWdyLT5kZXZpY2UsCj4g KwlyZXN1bHQgPSBhbWRncHVfYXRvbV9leGVjdXRlX3RhYmxlKGFkZXYtPm1vZGVfaW5mby5hdG9t X2NvbnRleHQsCj4gIAkJCUdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFJlYWRFZnVz ZVZhbHVlKSwKPiAtCQkJJnNPdXRwdXRfRnVzZVZhbHVlcyk7Cj4gKwkJCSh1aW50MzJfdCAqKSZz T3V0cHV0X0Z1c2VWYWx1ZXMpOwo+ICAKPiAgCWlmIChyZXN1bHQpCj4gIAkJcmV0dXJuIHJlc3Vs dDsKPiBAQCAtNzY4LDkgKzc3MSw5IEBAIGludCBhdG9tY3RybF9jYWxjdWxhdGVfdm9sdGFnZV9l dnZfb25fc2NsaygKPiAgCj4gIAlzT3V0cHV0X0Z1c2VWYWx1ZXMuc0VmdXNlID0gc0lucHV0X0Z1 c2VWYWx1ZXM7Cj4gIAo+IC0JcmVzdWx0ID0gY2dzX2F0b21fZXhlY19jbWRfdGFibGUoaHdtZ3It PmRldmljZSwKPiArCXJlc3VsdCA9IGFtZGdwdV9hdG9tX2V4ZWN1dGVfdGFibGUoYWRldi0+bW9k ZV9pbmZvLmF0b21fY29udGV4dCwKPiAgCQkJR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFO RCwgUmVhZEVmdXNlVmFsdWUpLAo+IC0JCQkmc091dHB1dF9GdXNlVmFsdWVzKTsKPiArCQkJKHVp bnQzMl90ICopJnNPdXRwdXRfRnVzZVZhbHVlcyk7Cj4gIAo+ICAJaWYgKHJlc3VsdCkKPiAgCQly ZXR1cm4gcmVzdWx0Owo+IEBAIC03OTAsOSArNzkzLDkgQEAgaW50IGF0b21jdHJsX2NhbGN1bGF0 ZV92b2x0YWdlX2V2dl9vbl9zY2xrKAo+ICAKPiAgCXNPdXRwdXRfRnVzZVZhbHVlcy5zRWZ1c2Ug PSBzSW5wdXRfRnVzZVZhbHVlczsKPiAgCj4gLQlyZXN1bHQgPSBjZ3NfYXRvbV9leGVjX2NtZF90 YWJsZShod21nci0+ZGV2aWNlLAo+ICsJcmVzdWx0ID0gYW1kZ3B1X2F0b21fZXhlY3V0ZV90YWJs ZShhZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LAo+ICAJCQlHZXRJbmRleEludG9NYXN0ZXJU YWJsZShDT01NQU5ELCBSZWFkRWZ1c2VWYWx1ZSksCj4gLQkJCSZzT3V0cHV0X0Z1c2VWYWx1ZXMp Owo+ICsJCQkodWludDMyX3QgKikmc091dHB1dF9GdXNlVmFsdWVzKTsKPiAgCWlmIChyZXN1bHQp Cj4gIAkJcmV0dXJuIHJlc3VsdDsKPiAgCj4gQEAgLTgxMSw5ICs4MTQsOSBAQCBpbnQgYXRvbWN0 cmxfY2FsY3VsYXRlX3ZvbHRhZ2VfZXZ2X29uX3NjbGsoCj4gIAlzSW5wdXRfRnVzZVZhbHVlcy51 Y0JpdExlbmd0aCA9IHNLdl9iX2Z1c2UudWNFZnVzZUxlbmd0aDsKPiAgCXNPdXRwdXRfRnVzZVZh bHVlcy5zRWZ1c2UgPSBzSW5wdXRfRnVzZVZhbHVlczsKPiAgCj4gLQlyZXN1bHQgPSBjZ3NfYXRv bV9leGVjX2NtZF90YWJsZShod21nci0+ZGV2aWNlLAo+ICsJcmVzdWx0ID0gYW1kZ3B1X2F0b21f ZXhlY3V0ZV90YWJsZShhZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LAo+ICAJCQlHZXRJbmRl eEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBSZWFkRWZ1c2VWYWx1ZSksCj4gLQkJCSZzT3V0cHV0 X0Z1c2VWYWx1ZXMpOwo+ICsJCQkodWludDMyX3QgKikmc091dHB1dF9GdXNlVmFsdWVzKTsKPiAg Cj4gIAlpZiAocmVzdWx0KQo+ICAJCXJldHVybiByZXN1bHQ7Cj4gQEAgLTg0Miw5ICs4NDUsOSBA QCBpbnQgYXRvbWN0cmxfY2FsY3VsYXRlX3ZvbHRhZ2VfZXZ2X29uX3NjbGsoCj4gIAo+ICAJc091 dHB1dF9GdXNlVmFsdWVzLnNFZnVzZSA9IHNJbnB1dF9GdXNlVmFsdWVzOwo+ICAKPiAtCXJlc3Vs dCA9IGNnc19hdG9tX2V4ZWNfY21kX3RhYmxlKGh3bWdyLT5kZXZpY2UsCj4gKwlyZXN1bHQgPSBh bWRncHVfYXRvbV9leGVjdXRlX3RhYmxlKGFkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsCj4g IAkJCUdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFJlYWRFZnVzZVZhbHVlKSwKPiAt CQkJJnNPdXRwdXRfRnVzZVZhbHVlcyk7Cj4gKwkJCSh1aW50MzJfdCAqKSZzT3V0cHV0X0Z1c2VW YWx1ZXMpOwo+ICAKPiAgCWlmIChyZXN1bHQpCj4gIAkJcmV0dXJuIHJlc3VsdDsKPiBAQCAtMTA1 Myw4ICsxMDU2LDkgQEAgaW50IGF0b21jdHJsX2dldF92b2x0YWdlX2V2dl9vbl9zY2xrKAo+ICAJ CXVpbnQzMl90IHNjbGssIHVpbnQxNl90IHZpcnR1YWxfdm9sdGFnZV9JZCwKPiAgCQl1aW50MTZf dCAqdm9sdGFnZSkKPiAgewo+IC0JaW50IHJlc3VsdDsKPiArCXN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2ID0gaHdtZ3ItPmFkZXY7Cj4gIAlHRVRfVk9MVEFHRV9JTkZPX0lOUFVUX1BBUkFNRVRF Ul9WMV8yIGdldF92b2x0YWdlX2luZm9fcGFyYW1fc3BhY2U7Cj4gKwlpbnQgcmVzdWx0Owo+ICAK PiAgCWdldF92b2x0YWdlX2luZm9fcGFyYW1fc3BhY2UudWNWb2x0YWdlVHlwZSAgID0KPiAgCQl2 b2x0YWdlX3R5cGU7Cj4gQEAgLTEwNjUsOSArMTA2OSw5IEBAIGludCBhdG9tY3RybF9nZXRfdm9s dGFnZV9ldnZfb25fc2NsaygKPiAgCWdldF92b2x0YWdlX2luZm9fcGFyYW1fc3BhY2UudWxTQ0xL RnJlcSAgICAgID0KPiAgCQljcHVfdG9fbGUzMihzY2xrKTsKPiAgCj4gLQlyZXN1bHQgPSBjZ3Nf YXRvbV9leGVjX2NtZF90YWJsZShod21nci0+ZGV2aWNlLAo+ICsJcmVzdWx0ID0gYW1kZ3B1X2F0 b21fZXhlY3V0ZV90YWJsZShhZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LAo+ICAJCQlHZXRJ bmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBHZXRWb2x0YWdlSW5mbyksCj4gLQkJCSZnZXRf dm9sdGFnZV9pbmZvX3BhcmFtX3NwYWNlKTsKPiArCQkJKHVpbnQzMl90ICopJmdldF92b2x0YWdl X2luZm9fcGFyYW1fc3BhY2UpOwo+ICAKPiAgCWlmICgwICE9IHJlc3VsdCkKPiAgCQlyZXR1cm4g cmVzdWx0Owo+IEBAIC0xMDg4LDkgKzEwOTIsMTAgQEAgaW50IGF0b21jdHJsX2dldF92b2x0YWdl X2V2dihzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAo+ICAJCQkgICAgIHVpbnQxNl90IHZpcnR1YWxf dm9sdGFnZV9pZCwKPiAgCQkJICAgICB1aW50MTZfdCAqdm9sdGFnZSkKPiAgewo+ICsJc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBod21nci0+YWRldjsKPiArCUdFVF9WT0xUQUdFX0lORk9f SU5QVVRfUEFSQU1FVEVSX1YxXzIgZ2V0X3ZvbHRhZ2VfaW5mb19wYXJhbV9zcGFjZTsKPiAgCWlu dCByZXN1bHQ7Cj4gIAlpbnQgZW50cnlfaWQ7Cj4gLQlHRVRfVk9MVEFHRV9JTkZPX0lOUFVUX1BB UkFNRVRFUl9WMV8yIGdldF92b2x0YWdlX2luZm9fcGFyYW1fc3BhY2U7Cj4gIAo+ICAJLyogc2Vh cmNoIGZvciBsZWFrYWdlIHZvbHRhZ2UgSUQgMHhmZjAxIH4gMHhmZjA4IGFuZCBzY2tsICovCj4g IAlmb3IgKGVudHJ5X2lkID0gMDsgZW50cnlfaWQgPCBod21nci0+ZHluX3N0YXRlLnZkZGNfZGVw ZW5kZW5jeV9vbl9zY2xrLT5jb3VudDsgZW50cnlfaWQrKykgewo+IEBAIC0xMTExLDkgKzExMTYs OSBAQCBpbnQgYXRvbWN0cmxfZ2V0X3ZvbHRhZ2VfZXZ2KHN0cnVjdCBwcF9od21nciAqaHdtZ3Is Cj4gIAlnZXRfdm9sdGFnZV9pbmZvX3BhcmFtX3NwYWNlLnVsU0NMS0ZyZXEgPQo+ICAJCWNwdV90 b19sZTMyKGh3bWdyLT5keW5fc3RhdGUudmRkY19kZXBlbmRlbmN5X29uX3NjbGstPmVudHJpZXNb ZW50cnlfaWRdLmNsayk7Cj4gIAo+IC0JcmVzdWx0ID0gY2dzX2F0b21fZXhlY19jbWRfdGFibGUo aHdtZ3ItPmRldmljZSwKPiArCXJlc3VsdCA9IGFtZGdwdV9hdG9tX2V4ZWN1dGVfdGFibGUoYWRl di0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwKPiAgCQkJR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUo Q09NTUFORCwgR2V0Vm9sdGFnZUluZm8pLAo+IC0JCQkmZ2V0X3ZvbHRhZ2VfaW5mb19wYXJhbV9z cGFjZSk7Cj4gKwkJCSh1aW50MzJfdCAqKSZnZXRfdm9sdGFnZV9pbmZvX3BhcmFtX3NwYWNlKTsK PiAgCj4gIAlpZiAoMCAhPSByZXN1bHQpCj4gIAkJcmV0dXJuIHJlc3VsdDsKPiBAQCAtMTEzNSw3 ICsxMTQwLDcgQEAgdWludDMyX3QgYXRvbWN0cmxfZ2V0X21wbGxfcmVmZXJlbmNlX2Nsb2NrKHN0 cnVjdCBwcF9od21nciAqaHdtZ3IpCj4gIAl1MTYgc2l6ZTsKPiAgCj4gIAlmd19pbmZvID0gKEFU T01fQ09NTU9OX1RBQkxFX0hFQURFUiAqKQo+IC0JCWNnc19hdG9tX2dldF9kYXRhX3RhYmxlKGh3 bWdyLT5kZXZpY2UsCj4gKwkJc211X2F0b21fZ2V0X2RhdGFfdGFibGUoaHdtZ3ItPmFkZXYsCj4g IAkJCQlHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBGaXJtd2FyZUluZm8pLAo+ICAJCQkJ JnNpemUsICZmcmV2LCAmY3Jldik7Cj4gIAo+IEBAIC0xMTY3LDcgKzExNzIsNyBAQCBzdGF0aWMg QVRPTV9BU0lDX0lOVEVSTkFMX1NTX0lORk8gKmFzaWNfaW50ZXJuYWxfc3NfZ2V0X3NzX3RhYmxl KHZvaWQgKmRldmljZSkKPiAgCXUxNiBzaXplOwo+ICAKPiAgCXRhYmxlID0gKEFUT01fQVNJQ19J TlRFUk5BTF9TU19JTkZPICopCj4gLQkJY2dzX2F0b21fZ2V0X2RhdGFfdGFibGUoZGV2aWNlLAo+ ICsJCXNtdV9hdG9tX2dldF9kYXRhX3RhYmxlKGRldmljZSwKPiAgCQkJR2V0SW5kZXhJbnRvTWFz dGVyVGFibGUoREFUQSwgQVNJQ19JbnRlcm5hbFNTX0luZm8pLAo+ICAJCQkmc2l6ZSwgJmZyZXYs ICZjcmV2KTsKPiAgCj4gQEAgLTExODgsNyArMTE5Myw3IEBAIHN0YXRpYyBpbnQgYXNpY19pbnRl cm5hbF9zc19nZXRfc3NfYXNpZ25tZW50KHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCj4gIAo+ICAJ bWVtc2V0KHNzRW50cnksIDB4MDAsIHNpemVvZihwcF9hdG9tY3RybF9pbnRlcm5hbF9zc19pbmZv KSk7Cj4gIAo+IC0JdGFibGUgPSBhc2ljX2ludGVybmFsX3NzX2dldF9zc190YWJsZShod21nci0+ ZGV2aWNlKTsKPiArCXRhYmxlID0gYXNpY19pbnRlcm5hbF9zc19nZXRfc3NfdGFibGUoaHdtZ3It PmFkZXYpOwo+ICAKPiAgCWlmIChOVUxMID09IHRhYmxlKQo+ICAJCXJldHVybiAtMTsKPiBAQCAt MTI2MCw5ICsxMjY1LDEwIEBAIGludCBhdG9tY3RybF9nZXRfZW5naW5lX2Nsb2NrX3NwcmVhZF9z cGVjdHJ1bSgKPiAgCQkJQVNJQ19JTlRFUk5BTF9FTkdJTkVfU1MsIGVuZ2luZV9jbG9jaywgc3NJ bmZvKTsKPiAgfQo+ICAKPiAtaW50IGF0b21jdHJsX3JlYWRfZWZ1c2Uodm9pZCAqZGV2aWNlLCB1 aW50MTZfdCBzdGFydF9pbmRleCwKPiAraW50IGF0b21jdHJsX3JlYWRfZWZ1c2Uoc3RydWN0IHBw X2h3bWdyICpod21nciwgdWludDE2X3Qgc3RhcnRfaW5kZXgsCj4gIAkJdWludDE2X3QgZW5kX2lu ZGV4LCB1aW50MzJfdCBtYXNrLCB1aW50MzJfdCAqZWZ1c2UpCj4gIHsKPiArCXN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2ID0gaHdtZ3ItPmFkZXY7Cj4gIAlpbnQgcmVzdWx0Owo+ICAJUkVBRF9F RlVTRV9WQUxVRV9QQVJBTUVURVIgZWZ1c2VfcGFyYW07Cj4gIAo+IEBAIC0xMjcyLDkgKzEyNzgs OSBAQCBpbnQgYXRvbWN0cmxfcmVhZF9lZnVzZSh2b2lkICpkZXZpY2UsIHVpbnQxNl90IHN0YXJ0 X2luZGV4LAo+ICAJZWZ1c2VfcGFyYW0uc0VmdXNlLnVjQml0TGVuZ3RoICA9ICh1aW50OF90KQo+ ICAJCQkoKGVuZF9pbmRleCAtIHN0YXJ0X2luZGV4KSArIDEpOwo+ICAKPiAtCXJlc3VsdCA9IGNn c19hdG9tX2V4ZWNfY21kX3RhYmxlKGRldmljZSwKPiArCXJlc3VsdCA9IGFtZGdwdV9hdG9tX2V4 ZWN1dGVfdGFibGUoYWRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwKPiAgCQkJR2V0SW5kZXhJ bnRvTWFzdGVyVGFibGUoQ09NTUFORCwgUmVhZEVmdXNlVmFsdWUpLAo+IC0JCQkmZWZ1c2VfcGFy YW0pOwo+ICsJCQkodWludDMyX3QgKikmZWZ1c2VfcGFyYW0pOwo+ICAJaWYgKCFyZXN1bHQpCj4g IAkJKmVmdXNlID0gbGUzMl90b19jcHUoZWZ1c2VfcGFyYW0udWxFZnVzZVZhbHVlKSAmIG1hc2s7 Cj4gIAo+IEBAIC0xMjg0LDYgKzEyOTAsNyBAQCBpbnQgYXRvbWN0cmxfcmVhZF9lZnVzZSh2b2lk ICpkZXZpY2UsIHVpbnQxNl90IHN0YXJ0X2luZGV4LAo+ICBpbnQgYXRvbWN0cmxfc2V0X2FjX3Rp bWluZ19haShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB1aW50MzJfdCBtZW1vcnlfY2xvY2ssCj4g IAkJCSAgICAgIHVpbnQ4X3QgbGV2ZWwpCj4gIHsKPiArCXN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2ID0gaHdtZ3ItPmFkZXY7Cj4gIAlEWU5BTUlDRV9NRU1PUllfU0VUVElOR1NfUEFSQU1FVEVS X1YyXzEgbWVtb3J5X2Nsb2NrX3BhcmFtZXRlcnM7Cj4gIAlpbnQgcmVzdWx0Owo+ICAKPiBAQCAt MTI5MywxMCArMTMwMCw5IEBAIGludCBhdG9tY3RybF9zZXRfYWNfdGltaW5nX2FpKHN0cnVjdCBw cF9od21nciAqaHdtZ3IsIHVpbnQzMl90IG1lbW9yeV9jbG9jaywKPiAgCQlBREpVU1RfTUNfU0VU VElOR19QQVJBTTsKPiAgCW1lbW9yeV9jbG9ja19wYXJhbWV0ZXJzLmFzRFBNTUNSZWcudWNNY2xr RFBNU3RhdGUgPSBsZXZlbDsKPiAgCj4gLQlyZXN1bHQgPSBjZ3NfYXRvbV9leGVjX2NtZF90YWJs ZQo+IC0JCShod21nci0+ZGV2aWNlLAo+ICsJcmVzdWx0ID0gYW1kZ3B1X2F0b21fZXhlY3V0ZV90 YWJsZShhZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LAo+ICAJCSBHZXRJbmRleEludG9NYXN0 ZXJUYWJsZShDT01NQU5ELCBEeW5hbWljTWVtb3J5U2V0dGluZ3MpLAo+IC0JCSAmbWVtb3J5X2Ns b2NrX3BhcmFtZXRlcnMpOwo+ICsJCSh1aW50MzJfdCAqKSZtZW1vcnlfY2xvY2tfcGFyYW1ldGVy cyk7Cj4gIAo+ICAJcmV0dXJuIHJlc3VsdDsKPiAgfQo+IEBAIC0xMzA0LDcgKzEzMTAsNyBAQCBp bnQgYXRvbWN0cmxfc2V0X2FjX3RpbWluZ19haShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB1aW50 MzJfdCBtZW1vcnlfY2xvY2ssCj4gIGludCBhdG9tY3RybF9nZXRfdm9sdGFnZV9ldnZfb25fc2Ns a19haShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB1aW50OF90IHZvbHRhZ2VfdHlwZSwKPiAgCQkJ CXVpbnQzMl90IHNjbGssIHVpbnQxNl90IHZpcnR1YWxfdm9sdGFnZV9JZCwgdWludDMyX3QgKnZv bHRhZ2UpCj4gIHsKPiAtCj4gKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGh3bWdyLT5h ZGV2Owo+ICAJaW50IHJlc3VsdDsKPiAgCUdFVF9WT0xUQUdFX0lORk9fSU5QVVRfUEFSQU1FVEVS X1YxXzMgZ2V0X3ZvbHRhZ2VfaW5mb19wYXJhbV9zcGFjZTsKPiAgCj4gQEAgLTEzMTMsOSArMTMx OSw5IEBAIGludCBhdG9tY3RybF9nZXRfdm9sdGFnZV9ldnZfb25fc2Nsa19haShzdHJ1Y3QgcHBf aHdtZ3IgKmh3bWdyLCB1aW50OF90IHZvbHRhZ2VfCj4gIAlnZXRfdm9sdGFnZV9pbmZvX3BhcmFt X3NwYWNlLnVzVm9sdGFnZUxldmVsID0gY3B1X3RvX2xlMTYodmlydHVhbF92b2x0YWdlX0lkKTsK PiAgCWdldF92b2x0YWdlX2luZm9fcGFyYW1fc3BhY2UudWxTQ0xLRnJlcSA9IGNwdV90b19sZTMy KHNjbGspOwo+ICAKPiAtCXJlc3VsdCA9IGNnc19hdG9tX2V4ZWNfY21kX3RhYmxlKGh3bWdyLT5k ZXZpY2UsCj4gKwlyZXN1bHQgPSBhbWRncHVfYXRvbV9leGVjdXRlX3RhYmxlKGFkZXYtPm1vZGVf aW5mby5hdG9tX2NvbnRleHQsCj4gIAkJCUdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQs IEdldFZvbHRhZ2VJbmZvKSwKPiAtCQkJJmdldF92b2x0YWdlX2luZm9fcGFyYW1fc3BhY2UpOwo+ ICsJCQkodWludDMyX3QgKikmZ2V0X3ZvbHRhZ2VfaW5mb19wYXJhbV9zcGFjZSk7Cj4gIAo+ICAJ aWYgKDAgIT0gcmVzdWx0KQo+ICAJCXJldHVybiByZXN1bHQ7Cj4gQEAgLTEzMzQsNyArMTM0MCw3 IEBAIGludCBhdG9tY3RybF9nZXRfc21jX3NjbGtfcmFuZ2VfdGFibGUoc3RydWN0IHBwX2h3bWdy ICpod21nciwgc3RydWN0IHBwX2F0b21fY3RyCj4gIAl1MTYgc2l6ZTsKPiAgCj4gIAlBVE9NX1NN VV9JTkZPX1YyXzEgKnBzbXVfaW5mbyA9Cj4gLQkJKEFUT01fU01VX0lORk9fVjJfMSAqKWNnc19h dG9tX2dldF9kYXRhX3RhYmxlKGh3bWdyLT5kZXZpY2UsCj4gKwkJKEFUT01fU01VX0lORk9fVjJf MSAqKXNtdV9hdG9tX2dldF9kYXRhX3RhYmxlKGh3bWdyLT5hZGV2LAo+ICAJCQlHZXRJbmRleElu dG9NYXN0ZXJUYWJsZShEQVRBLCBTTVVfSW5mbyksCj4gIAkJCSZzaXplLCAmZnJldiwgJmNyZXYp Owo+ICAKPiBAQCAtMTM2Miw3ICsxMzY4LDcgQEAgaW50IGF0b21jdHJsX2dldF9hdmZzX2luZm9y bWF0aW9uKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCj4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4gIAo+ ICAJcHJvZmlsZSA9IChBVE9NX0FTSUNfUFJPRklMSU5HX0lORk9fVjNfNiAqKQo+IC0JCQljZ3Nf YXRvbV9nZXRfZGF0YV90YWJsZShod21nci0+ZGV2aWNlLAo+ICsJCQlzbXVfYXRvbV9nZXRfZGF0 YV90YWJsZShod21nci0+YWRldiwKPiAgCQkJCQlHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRB LCBBU0lDX1Byb2ZpbGluZ0luZm8pLAo+ICAJCQkJCU5VTEwsIE5VTEwsIE5VTEwpOwo+ICAJaWYg KCFwcm9maWxlKQo+IEBAIC0xNDAyLDcgKzE0MDgsNyBAQCBpbnQgIGF0b21jdHJsX2dldF9zdmky X2luZm8oc3RydWN0IHBwX2h3bWdyICpod21nciwgdWludDhfdCB2b2x0YWdlX3R5cGUsCj4gIAkJ CQl1aW50MTZfdCAqbG9hZF9saW5lKQo+ICB7Cj4gIAlBVE9NX1ZPTFRBR0VfT0JKRUNUX0lORk9f VjNfMSAqdm9sdGFnZV9pbmZvID0KPiAtCQkoQVRPTV9WT0xUQUdFX09CSkVDVF9JTkZPX1YzXzEg KilnZXRfdm9sdGFnZV9pbmZvX3RhYmxlKGh3bWdyLT5kZXZpY2UpOwo+ICsJCShBVE9NX1ZPTFRB R0VfT0JKRUNUX0lORk9fVjNfMSAqKWdldF92b2x0YWdlX2luZm9fdGFibGUoaHdtZ3ItPmFkZXYp Owo+ICAKPiAgCWNvbnN0IEFUT01fVk9MVEFHRV9PQkpFQ1RfVjMgKnZvbHRhZ2Vfb2JqZWN0Owo+ ICAKPiBAQCAtMTQyMSwxNiArMTQyNywxNyBAQCBpbnQgIGF0b21jdHJsX2dldF9zdmkyX2luZm8o c3RydWN0IHBwX2h3bWdyICpod21nciwgdWludDhfdCB2b2x0YWdlX3R5cGUsCj4gIAo+ICBpbnQg YXRvbWN0cmxfZ2V0X2xlYWthZ2VfaWRfZnJvbV9lZnVzZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdy LCB1aW50MTZfdCAqdmlydHVhbF92b2x0YWdlX2lkKQo+ICB7Cj4gLQlpbnQgcmVzdWx0Owo+ICsJ c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBod21nci0+YWRldjsKPiAgCVNFVF9WT0xUQUdF X1BTX0FMTE9DQVRJT04gYWxsb2NhdGlvbjsKPiAgCVNFVF9WT0xUQUdFX1BBUkFNRVRFUlNfVjFf MyAqdm9sdGFnZV9wYXJhbWV0ZXJzID0KPiAgCQkJKFNFVF9WT0xUQUdFX1BBUkFNRVRFUlNfVjFf MyAqKSZhbGxvY2F0aW9uLnNBU0lDU2V0Vm9sdGFnZTsKPiArCWludCByZXN1bHQ7Cj4gIAo+ICAJ dm9sdGFnZV9wYXJhbWV0ZXJzLT51Y1ZvbHRhZ2VNb2RlID0gQVRPTV9HRVRfTEVBS0FHRV9JRDsK PiAgCj4gLQlyZXN1bHQgPSBjZ3NfYXRvbV9leGVjX2NtZF90YWJsZShod21nci0+ZGV2aWNlLAo+ ICsJcmVzdWx0ID0gYW1kZ3B1X2F0b21fZXhlY3V0ZV90YWJsZShhZGV2LT5tb2RlX2luZm8uYXRv bV9jb250ZXh0LAo+ICAJCQlHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBTZXRWb2x0 YWdlKSwKPiAtCQkJdm9sdGFnZV9wYXJhbWV0ZXJzKTsKPiArCQkJKHVpbnQzMl90ICopdm9sdGFn ZV9wYXJhbWV0ZXJzKTsKPiAgCj4gIAkqdmlydHVhbF92b2x0YWdlX2lkID0gdm9sdGFnZV9wYXJh bWV0ZXJzLT51c1ZvbHRhZ2VMZXZlbDsKPiAgCj4gQEAgLTE0NTMsNyArMTQ2MCw3IEBAIGludCBh dG9tY3RybF9nZXRfbGVha2FnZV92ZGRjX2Jhc2Vfb25fbGVha2FnZShzdHJ1Y3QgcHBfaHdtZ3Ig Kmh3bWdyLAo+ICAJaXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBBU0lDX1Byb2Zp bGluZ0luZm8pOwo+ICAKPiAgCXByb2ZpbGUgPSAoQVRPTV9BU0lDX1BST0ZJTElOR19JTkZPX1Yy XzEgKikKPiAtCQkJY2dzX2F0b21fZ2V0X2RhdGFfdGFibGUoaHdtZ3ItPmRldmljZSwKPiArCQkJ c211X2F0b21fZ2V0X2RhdGFfdGFibGUoaHdtZ3ItPmFkZXYsCj4gIAkJCQkJaXgsCj4gIAkJCQkJ TlVMTCwgTlVMTCwgTlVMTCk7Cj4gIAlpZiAoIXByb2ZpbGUpCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3BwYXRvbWN0cmwuaCBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3BwYXRvbWN0cmwuaAo+IGluZGV4IGM0NGE5MjAuLmM2 NzJhNTAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3Iv cHBhdG9tY3RybC5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3Iv cHBhdG9tY3RybC5oCj4gQEAgLTI5OCw3ICsyOTgsNyBAQCBleHRlcm4gaW50IGF0b21jdHJsX2dl dF9tZW1vcnlfcGxsX2RpdmlkZXJzX3ZpKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCj4gIGV4dGVy biBpbnQgYXRvbWN0cmxfZ2V0X2VuZ2luZV9wbGxfZGl2aWRlcnNfa29uZyhzdHJ1Y3QgcHBfaHdt Z3IgKmh3bWdyLAo+ICAJCQkJCQkgdWludDMyX3QgY2xvY2tfdmFsdWUsCj4gIAkJCQkJCSBwcF9h dG9tY3RybF9jbG9ja19kaXZpZGVyc19rb25nICpkaXZpZGVycyk7Cj4gLWV4dGVybiBpbnQgYXRv bWN0cmxfcmVhZF9lZnVzZSh2b2lkICpkZXZpY2UsIHVpbnQxNl90IHN0YXJ0X2luZGV4LAo+ICtl eHRlcm4gaW50IGF0b21jdHJsX3JlYWRfZWZ1c2Uoc3RydWN0IHBwX2h3bWdyICpod21nciwgdWlu dDE2X3Qgc3RhcnRfaW5kZXgsCj4gIAkJdWludDE2X3QgZW5kX2luZGV4LCB1aW50MzJfdCBtYXNr LCB1aW50MzJfdCAqZWZ1c2UpOwo+ICBleHRlcm4gaW50IGF0b21jdHJsX2NhbGN1bGF0ZV92b2x0 YWdlX2V2dl9vbl9zY2xrKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHVpbnQ4X3Qgdm9sdGFnZV90 eXBlLAo+ICAJCXVpbnQzMl90IHNjbGssIHVpbnQxNl90IHZpcnR1YWxfdm9sdGFnZV9JZCwgdWlu dDE2X3QgKnZvbHRhZ2UsIHVpbnQxNl90IGRwbV9sZXZlbCwgYm9vbCBkZWJ1Zyk7Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3BwYXRvbWZ3Y3RybC5j IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvcHBhdG9tZndjdHJsLmMKPiBp bmRleCA1NWY5YjMwLi41ZmE4NGNjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv cG93ZXJwbGF5L2h3bWdyL3BwYXRvbWZ3Y3RybC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9wb3dlcnBsYXkvaHdtZ3IvcHBhdG9tZndjdHJsLmMKPiBAQCAtMjMsOSArMjMsOSBAQAo+ICAK PiAgI2luY2x1ZGUgInBwYXRvbWZ3Y3RybC5oIgo+ICAjaW5jbHVkZSAiYXRvbWZpcm13YXJlLmgi Cj4gKyNpbmNsdWRlICJhdG9tLmgiCj4gICNpbmNsdWRlICJwcF9kZWJ1Zy5oIgo+ICAKPiAtCj4g IHN0YXRpYyBjb25zdCB1bmlvbiBhdG9tX3ZvbHRhZ2Vfb2JqZWN0X3Y0ICpwcF9hdG9tZndjdHJs X2xvb2t1cF92b2x0YWdlX3R5cGVfdjQoCj4gIAkJY29uc3Qgc3RydWN0IGF0b21fdm9sdGFnZV9v YmplY3RzX2luZm9fdjRfMSAqdm9sdGFnZV9vYmplY3RfaW5mb190YWJsZSwKPiAgCQl1aW50OF90 IHZvbHRhZ2VfdHlwZSwgdWludDhfdCB2b2x0YWdlX21vZGUpCj4gQEAgLTQwLDMzICs0MCwzMiBA QCBzdGF0aWMgY29uc3QgdW5pb24gYXRvbV92b2x0YWdlX29iamVjdF92NCAqcHBfYXRvbWZ3Y3Ry bF9sb29rdXBfdm9sdGFnZV90eXBlX3Y0KAo+ICAJCWNvbnN0IHVuaW9uIGF0b21fdm9sdGFnZV9v YmplY3RfdjQgKnZvbHRhZ2Vfb2JqZWN0ID0KPiAgCQkJCShjb25zdCB1bmlvbiBhdG9tX3ZvbHRh Z2Vfb2JqZWN0X3Y0ICopKHN0YXJ0ICsgb2Zmc2V0KTsKPiAgCj4gLSAgICAgICAgaWYgKHZvbHRh Z2VfdHlwZSA9PSB2b2x0YWdlX29iamVjdC0+Z3Bpb192b2x0YWdlX29iai5oZWFkZXIudm9sdGFn ZV90eXBlICYmCj4gLSAgICAgICAgICAgIHZvbHRhZ2VfbW9kZSA9PSB2b2x0YWdlX29iamVjdC0+ Z3Bpb192b2x0YWdlX29iai5oZWFkZXIudm9sdGFnZV9tb2RlKQo+IC0gICAgICAgICAgICByZXR1 cm4gdm9sdGFnZV9vYmplY3Q7Cj4gKwlpZiAodm9sdGFnZV90eXBlID09IHZvbHRhZ2Vfb2JqZWN0 LT5ncGlvX3ZvbHRhZ2Vfb2JqLmhlYWRlci52b2x0YWdlX3R5cGUgJiYKPiArCQl2b2x0YWdlX21v ZGUgPT0gdm9sdGFnZV9vYmplY3QtPmdwaW9fdm9sdGFnZV9vYmouaGVhZGVyLnZvbHRhZ2VfbW9k ZSkKPiArCQlyZXR1cm4gdm9sdGFnZV9vYmplY3Q7Cj4gIAo+IC0gICAgICAgIG9mZnNldCArPSBs ZTE2X3RvX2NwdSh2b2x0YWdlX29iamVjdC0+Z3Bpb192b2x0YWdlX29iai5oZWFkZXIub2JqZWN0 X3NpemUpOwo+ICsJCW9mZnNldCArPSBsZTE2X3RvX2NwdSh2b2x0YWdlX29iamVjdC0+Z3Bpb192 b2x0YWdlX29iai5oZWFkZXIub2JqZWN0X3NpemUpOwo+ICAKPiAtICAgIH0KPiArCX0KPiAgCj4g LSAgICByZXR1cm4gTlVMTDsKPiArCXJldHVybiBOVUxMOwo+ICB9Cj4gIAo+ICBzdGF0aWMgc3Ry dWN0IGF0b21fdm9sdGFnZV9vYmplY3RzX2luZm9fdjRfMSAqcHBfYXRvbWZ3Y3RybF9nZXRfdm9s dGFnZV9pbmZvX3RhYmxlKAo+ICAJCXN0cnVjdCBwcF9od21nciAqaHdtZ3IpCj4gIHsKPiAtICAg IGNvbnN0IHZvaWQgKnRhYmxlX2FkZHJlc3M7Cj4gLSAgICB1aW50MTZfdCBpZHg7Cj4gKwljb25z dCB2b2lkICp0YWJsZV9hZGRyZXNzOwo+ICsJdWludDE2X3QgaWR4Owo+ICAKPiAtICAgIGlkeCA9 IEdldEluZGV4SW50b01hc3RlckRhdGFUYWJsZSh2b2x0YWdlb2JqZWN0X2luZm8pOwo+IC0gICAg dGFibGVfYWRkcmVzcyA9CWNnc19hdG9tX2dldF9kYXRhX3RhYmxlKGh3bWdyLT5kZXZpY2UsCj4g LSAgICAJCWlkeCwgTlVMTCwgTlVMTCwgTlVMTCk7Cj4gKwlpZHggPSBHZXRJbmRleEludG9NYXN0 ZXJEYXRhVGFibGUodm9sdGFnZW9iamVjdF9pbmZvKTsKPiArCXRhYmxlX2FkZHJlc3MgPSBzbXVf YXRvbV9nZXRfZGF0YV90YWJsZShod21nci0+YWRldiwKPiArCQkJCQkJaWR4LCBOVUxMLCBOVUxM LCBOVUxMKTsKPiAgCj4gLSAgICBQUF9BU1NFUlRfV0lUSF9DT0RFKCAKPiAtICAgICAgICB0YWJs ZV9hZGRyZXNzLAo+IC0gICAgICAgICJFcnJvciByZXRyaWV2aW5nIEJJT1MgVGFibGUgQWRkcmVz cyEiLAo+IC0gICAgICAgIHJldHVybiBOVUxMKTsKPiArCVBQX0FTU0VSVF9XSVRIX0NPREUodGFi bGVfYWRkcmVzcywKPiArCQkJIkVycm9yIHJldHJpZXZpbmcgQklPUyBUYWJsZSBBZGRyZXNzISIs Cj4gKwkJCXJldHVybiBOVUxMKTsKPiAgCj4gLSAgICByZXR1cm4gKHN0cnVjdCBhdG9tX3ZvbHRh Z2Vfb2JqZWN0c19pbmZvX3Y0XzEgKil0YWJsZV9hZGRyZXNzOwo+ICsJcmV0dXJuIChzdHJ1Y3Qg YXRvbV92b2x0YWdlX29iamVjdHNfaW5mb192NF8xICopdGFibGVfYWRkcmVzczsKPiAgfQo+ICAK PiAgLyoqCj4gQEAgLTE2Nyw3ICsxNjYsNyBAQCBzdGF0aWMgc3RydWN0IGF0b21fZ3Bpb19waW5f bHV0X3YyXzEgKnBwX2F0b21md2N0cmxfZ2V0X2dwaW9fbG9va3VwX3RhYmxlKAo+ICAJdWludDE2 X3QgaWR4Owo+ICAKPiAgCWlkeCA9IEdldEluZGV4SW50b01hc3RlckRhdGFUYWJsZShncGlvX3Bp bl9sdXQpOwo+IC0JdGFibGVfYWRkcmVzcyA9CWNnc19hdG9tX2dldF9kYXRhX3RhYmxlKGh3bWdy LT5kZXZpY2UsCj4gKwl0YWJsZV9hZGRyZXNzID0Jc211X2F0b21fZ2V0X2RhdGFfdGFibGUoaHdt Z3ItPmFkZXYsCj4gIAkJCWlkeCwgTlVMTCwgTlVMTCwgTlVMTCk7Cj4gIAlQUF9BU1NFUlRfV0lU SF9DT0RFKHRhYmxlX2FkZHJlc3MsCj4gIAkJCSJFcnJvciByZXRyaWV2aW5nIEJJT1MgVGFibGUg QWRkcmVzcyEiLAo+IEBAIC0yNDgsMjggKzI0NywzMCBAQCBpbnQgcHBfYXRvbWZ3Y3RybF9nZXRf Z3B1X3BsbF9kaXZpZGVyc192ZWdhMTAoc3RydWN0IHBwX2h3bWdyICpod21nciwKPiAgCQl1aW50 MzJfdCBjbG9ja190eXBlLCB1aW50MzJfdCBjbG9ja192YWx1ZSwKPiAgCQlzdHJ1Y3QgcHBfYXRv bWZ3Y3RybF9jbG9ja19kaXZpZGVyc19zb2MxNSAqZGl2aWRlcnMpCj4gIHsKPiArCXN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2ID0gaHdtZ3ItPmFkZXY7Cj4gIAlzdHJ1Y3QgY29tcHV0ZV9ncHVf Y2xvY2tfaW5wdXRfcGFyYW1ldGVyX3YxXzggcGxsX3BhcmFtZXRlcnM7Cj4gIAlzdHJ1Y3QgY29t cHV0ZV9ncHVfY2xvY2tfb3V0cHV0X3BhcmFtZXRlcl92MV84ICpwbGxfb3V0cHV0Owo+IC0JaW50 IHJlc3VsdDsKPiAgCXVpbnQzMl90IGlkeDsKPiAgCj4gIAlwbGxfcGFyYW1ldGVycy5ncHVjbG9j a18xMGtoeiA9ICh1aW50MzJfdCljbG9ja192YWx1ZTsKPiAgCXBsbF9wYXJhbWV0ZXJzLmdwdV9j bG9ja190eXBlID0gY2xvY2tfdHlwZTsKPiAgCj4gIAlpZHggPSBHZXRJbmRleEludG9NYXN0ZXJD bWRUYWJsZShjb21wdXRlZ3B1Y2xvY2twYXJhbSk7Cj4gLQlyZXN1bHQgPSBjZ3NfYXRvbV9leGVj X2NtZF90YWJsZShod21nci0+ZGV2aWNlLCBpZHgsICZwbGxfcGFyYW1ldGVycyk7Cj4gLQo+IC0J aWYgKCFyZXN1bHQpIHsKPiAtCQlwbGxfb3V0cHV0ID0gKHN0cnVjdCBjb21wdXRlX2dwdV9jbG9j a19vdXRwdXRfcGFyYW1ldGVyX3YxXzggKikKPiAtCQkJCSZwbGxfcGFyYW1ldGVyczsKPiAtCQlk aXZpZGVycy0+dWxDbG9jayA9IGxlMzJfdG9fY3B1KHBsbF9vdXRwdXQtPmdwdWNsb2NrXzEwa2h6 KTsKPiAtCQlkaXZpZGVycy0+dWxEaWQgPSBsZTMyX3RvX2NwdShwbGxfb3V0cHV0LT5kZnNfZGlk KTsKPiAtCQlkaXZpZGVycy0+dWxQbGxfZmJfbXVsdCA9IGxlMzJfdG9fY3B1KHBsbF9vdXRwdXQt PnBsbF9mYl9tdWx0KTsKPiAtCQlkaXZpZGVycy0+dWxQbGxfc3NfZmJzbXVsdCA9IGxlMzJfdG9f Y3B1KHBsbF9vdXRwdXQtPnBsbF9zc19mYnNtdWx0KTsKPiAtCQlkaXZpZGVycy0+dXNQbGxfc3Nf c2xld19mcmFjID0gbGUxNl90b19jcHUocGxsX291dHB1dC0+cGxsX3NzX3NsZXdfZnJhYyk7Cj4g LQkJZGl2aWRlcnMtPnVjUGxsX3NzX2VuYWJsZSA9IHBsbF9vdXRwdXQtPnBsbF9zc19lbmFibGU7 Cj4gLQl9Cj4gLQlyZXR1cm4gcmVzdWx0Owo+ICsKPiArCWlmIChhbWRncHVfYXRvbV9leGVjdXRl X3RhYmxlKAo+ICsJCWFkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGlkeCwgKHVpbnQzMl90 ICopJnBsbF9wYXJhbWV0ZXJzKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlwbGxfb3V0 cHV0ID0gKHN0cnVjdCBjb21wdXRlX2dwdV9jbG9ja19vdXRwdXRfcGFyYW1ldGVyX3YxXzggKikK PiArCQkJJnBsbF9wYXJhbWV0ZXJzOwo+ICsJZGl2aWRlcnMtPnVsQ2xvY2sgPSBsZTMyX3RvX2Nw dShwbGxfb3V0cHV0LT5ncHVjbG9ja18xMGtoeik7Cj4gKwlkaXZpZGVycy0+dWxEaWQgPSBsZTMy X3RvX2NwdShwbGxfb3V0cHV0LT5kZnNfZGlkKTsKPiArCWRpdmlkZXJzLT51bFBsbF9mYl9tdWx0 ID0gbGUzMl90b19jcHUocGxsX291dHB1dC0+cGxsX2ZiX211bHQpOwo+ICsJZGl2aWRlcnMtPnVs UGxsX3NzX2Zic211bHQgPSBsZTMyX3RvX2NwdShwbGxfb3V0cHV0LT5wbGxfc3NfZmJzbXVsdCk7 Cj4gKwlkaXZpZGVycy0+dXNQbGxfc3Nfc2xld19mcmFjID0gbGUxNl90b19jcHUocGxsX291dHB1 dC0+cGxsX3NzX3NsZXdfZnJhYyk7Cj4gKwlkaXZpZGVycy0+dWNQbGxfc3NfZW5hYmxlID0gcGxs X291dHB1dC0+cGxsX3NzX2VuYWJsZTsKPiArCj4gKwlyZXR1cm4gMDsKPiAgfQo+ICAKPiAgaW50 IHBwX2F0b21md2N0cmxfZ2V0X2F2ZnNfaW5mb3JtYXRpb24oc3RydWN0IHBwX2h3bWdyICpod21n ciwKPiBAQCAtMjgzLDcgKzI4NCw3IEBAIGludCBwcF9hdG9tZndjdHJsX2dldF9hdmZzX2luZm9y bWF0aW9uKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCj4gIAo+ICAJaWR4ID0gR2V0SW5kZXhJbnRv TWFzdGVyRGF0YVRhYmxlKGFzaWNfcHJvZmlsaW5nX2luZm8pOwo+ICAJcHJvZmlsZSA9IChzdHJ1 Y3QgYXRvbV9hc2ljX3Byb2ZpbGluZ19pbmZvX3Y0XzEgKikKPiAtCQkJY2dzX2F0b21fZ2V0X2Rh dGFfdGFibGUoaHdtZ3ItPmRldmljZSwKPiArCQkJc211X2F0b21fZ2V0X2RhdGFfdGFibGUoaHdt Z3ItPmFkZXYsCj4gIAkJCQkJaWR4LCBOVUxMLCBOVUxMLCBOVUxMKTsKPiAgCj4gIAlpZiAoIXBy b2ZpbGUpCj4gQEAgLTQ2Nyw3ICs0NjgsNyBAQCBpbnQgcHBfYXRvbWZ3Y3RybF9nZXRfZ3Bpb19p bmZvcm1hdGlvbihzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAo+ICAKPiAgCWlkeCA9IEdldEluZGV4 SW50b01hc3RlckRhdGFUYWJsZShzbXVfaW5mbyk7Cj4gIAlpbmZvID0gKHN0cnVjdCBhdG9tX3Nt dV9pbmZvX3YzXzEgKikKPiAtCQljZ3NfYXRvbV9nZXRfZGF0YV90YWJsZShod21nci0+ZGV2aWNl LAo+ICsJCXNtdV9hdG9tX2dldF9kYXRhX3RhYmxlKGh3bWdyLT5hZGV2LAo+ICAJCQkJaWR4LCBO VUxMLCBOVUxMLCBOVUxMKTsKPiAgCj4gIAlpZiAoIWluZm8pIHsKPiBAQCAtNDg5LDYgKzQ5MCw3 IEBAIGludCBwcF9hdG9tZndjdHJsX2dldF9ncGlvX2luZm9ybWF0aW9uKHN0cnVjdCBwcF9od21n ciAqaHdtZ3IsCj4gIAo+ICBpbnQgcHBfYXRvbWZ3Y3RybF9fZ2V0X2Nsa19pbmZvcm1hdGlvbl9i eV9jbGtpZChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCBCSU9TX0NMS0lEIGlkLCB1aW50MzJfdCAq ZnJlcXVlbmN5KQo+ICB7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGh3bWdyLT5h ZGV2Owo+ICAJc3RydWN0IGF0b21fZ2V0X3NtdV9jbG9ja19pbmZvX3BhcmFtZXRlcnNfdjNfMSAg IHBhcmFtZXRlcnM7Cj4gIAlzdHJ1Y3QgYXRvbV9nZXRfc211X2Nsb2NrX2luZm9fb3V0cHV0X3Bh cmFtZXRlcnNfdjNfMSAqb3V0cHV0Owo+ICAJdWludDMyX3QgaXg7Cj4gQEAgLTQ5NywxMyArNDk5 LDEzIEBAIGludCBwcF9hdG9tZndjdHJsX19nZXRfY2xrX2luZm9ybWF0aW9uX2J5X2Nsa2lkKHN0 cnVjdCBwcF9od21nciAqaHdtZ3IsIEJJT1NfQ0xLCj4gIAlwYXJhbWV0ZXJzLmNvbW1hbmQgPSBH RVRfU01VX0NMT0NLX0lORk9fVjNfMV9HRVRfQ0xPQ0tfRlJFUTsKPiAgCj4gIAlpeCA9IEdldElu ZGV4SW50b01hc3RlckNtZFRhYmxlKGdldHNtdWNsb2NraW5mbyk7Cj4gLQlpZiAoIWNnc19hdG9t X2V4ZWNfY21kX3RhYmxlKGh3bWdyLT5kZXZpY2UsIGl4LCAmcGFyYW1ldGVycykpIHsKPiAtCQlv dXRwdXQgPSAoc3RydWN0IGF0b21fZ2V0X3NtdV9jbG9ja19pbmZvX291dHB1dF9wYXJhbWV0ZXJz X3YzXzEgKikmcGFyYW1ldGVyczsKPiAtCQkqZnJlcXVlbmN5ID0gb3V0cHV0LT5hdG9tX3NtdV9v dXRwdXRjbGtmcmVxLnNtdV9jbG9ja19mcmVxX2h6IC8gMTAwMDA7Cj4gLQl9IGVsc2Ugewo+IC0J CXByX2luZm8oIkVycm9yIGV4ZWN1dGVfdGFibGUgZ2V0c211Y2xvY2tpbmZvISIpOwo+IC0JCXJl dHVybiAtMTsKPiAtCX0KPiArCj4gKwlpZiAoYW1kZ3B1X2F0b21fZXhlY3V0ZV90YWJsZSgKPiAr CQlhZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpeCwgKHVpbnQzMl90ICopJnBhcmFtZXRl cnMpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCW91dHB1dCA9IChzdHJ1Y3QgYXRvbV9n ZXRfc211X2Nsb2NrX2luZm9fb3V0cHV0X3BhcmFtZXRlcnNfdjNfMSAqKSZwYXJhbWV0ZXJzOwo+ ICsJKmZyZXF1ZW5jeSA9IG91dHB1dC0+YXRvbV9zbXVfb3V0cHV0Y2xrZnJlcS5zbXVfY2xvY2tf ZnJlcV9oeiAvIDEwMDAwOwo+ICAKPiAgCXJldHVybiAwOwo+ICB9Cj4gQEAgLTUxNyw3ICs1MTks NyBAQCBpbnQgcHBfYXRvbWZ3Y3RybF9nZXRfdmJpb3NfYm9vdHVwX3ZhbHVlcyhzdHJ1Y3QgcHBf aHdtZ3IgKmh3bWdyLAo+ICAKPiAgCWl4ID0gR2V0SW5kZXhJbnRvTWFzdGVyRGF0YVRhYmxlKGZp cm13YXJlaW5mbyk7Cj4gIAlpbmZvID0gKHN0cnVjdCBhdG9tX2Zpcm13YXJlX2luZm9fdjNfMSAq KQo+IC0JCWNnc19hdG9tX2dldF9kYXRhX3RhYmxlKGh3bWdyLT5kZXZpY2UsCj4gKwkJc211X2F0 b21fZ2V0X2RhdGFfdGFibGUoaHdtZ3ItPmFkZXYsCj4gIAkJCQlpeCwgTlVMTCwgTlVMTCwgTlVM TCk7Cj4gIAo+ICAJaWYgKCFpbmZvKSB7Cj4gQEAgLTU1Myw3ICs1NTUsNyBAQCBpbnQgcHBfYXRv bWZ3Y3RybF9nZXRfc21jX2RwbV9pbmZvcm1hdGlvbihzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAo+ ICAKPiAgCWl4ID0gR2V0SW5kZXhJbnRvTWFzdGVyRGF0YVRhYmxlKHNtY19kcG1faW5mbyk7Cj4g IAlpbmZvID0gKHN0cnVjdCBhdG9tX3NtY19kcG1faW5mb192NF8xICopCj4gLQkJY2dzX2F0b21f Z2V0X2RhdGFfdGFibGUoaHdtZ3ItPmRldmljZSwKPiArCQlzbXVfYXRvbV9nZXRfZGF0YV90YWJs ZShod21nci0+YWRldiwKPiAgCQkJCWl4LCBOVUxMLCBOVUxMLCBOVUxMKTsKPiAgCWlmICghaW5m bykgewo+ICAJCXByX2luZm8oIkVycm9yIHJldHJpZXZpbmcgQklPUyBUYWJsZSBBZGRyZXNzISIp Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9wcm9j ZXNzX3BwdGFibGVzX3YxXzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdy L3Byb2Nlc3NfcHB0YWJsZXNfdjFfMC5jCj4gaW5kZXggYzllZWNjZS4uODUxNjUxNiAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9wcm9jZXNzX3BwdGFi bGVzX3YxXzAuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3By b2Nlc3NfcHB0YWJsZXNfdjFfMC5jCj4gQEAgLTE0MSw3ICsxNDEsNyBAQCBzdGF0aWMgY29uc3Qg dm9pZCAqZ2V0X3Bvd2VycGxheV90YWJsZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQo+ICAKPiAg CWlmICghdGFibGVfYWRkcmVzcykgewo+ICAJCXRhYmxlX2FkZHJlc3MgPSAoQVRPTV9Ub25nYV9Q T1dFUlBMQVlUQUJMRSAqKQo+IC0JCQkJY2dzX2F0b21fZ2V0X2RhdGFfdGFibGUoaHdtZ3ItPmRl dmljZSwKPiArCQkJCXNtdV9hdG9tX2dldF9kYXRhX3RhYmxlKGh3bWdyLT5hZGV2LAo+ICAJCQkJ CQlpbmRleCwgJnNpemUsICZmcmV2LCAmY3Jldik7Cj4gIAkJaHdtZ3ItPnNvZnRfcHBfdGFibGUg PSB0YWJsZV9hZGRyZXNzOwkvKkNhY2hlIHRoZSByZXN1bHQgaW4gUkFNLiovCj4gIAkJaHdtZ3It PnNvZnRfcHBfdGFibGVfc2l6ZSA9IHNpemU7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvcG93ZXJwbGF5L2h3bWdyL3Byb2Nlc3NwcHRhYmxlcy5jIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9wb3dlcnBsYXkvaHdtZ3IvcHJvY2Vzc3BwdGFibGVzLmMKPiBpbmRleCAzNmNhN2M0Li5j ZTY0ZGZhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdy L3Byb2Nlc3NwcHRhYmxlcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkv aHdtZ3IvcHJvY2Vzc3BwdGFibGVzLmMKPiBAQCAtODM3LDcgKzgzNyw3IEBAIHN0YXRpYyBjb25z dCBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFICpnZXRfcG93ZXJwbGF5X3RhYmxlKAo+ICAJCQlo d21nci0+c29mdF9wcF90YWJsZSA9ICZzb2Z0X2R1bW15X3BwX3RhYmxlWzBdOwo+ICAJCQlod21n ci0+c29mdF9wcF90YWJsZV9zaXplID0gc2l6ZW9mKHNvZnRfZHVtbXlfcHBfdGFibGUpOwo+ICAJ CX0gZWxzZSB7Cj4gLQkJCXRhYmxlX2FkZHIgPSBjZ3NfYXRvbV9nZXRfZGF0YV90YWJsZShod21n ci0+ZGV2aWNlLAo+ICsJCQl0YWJsZV9hZGRyID0gc211X2F0b21fZ2V0X2RhdGFfdGFibGUoaHdt Z3ItPmFkZXYsCj4gIAkJCQkJR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoREFUQSwgUG93ZXJQbGF5 SW5mbyksCj4gIAkJCQkJJnNpemUsICZmcmV2LCAmY3Jldik7Cj4gIAkJCWh3bWdyLT5zb2Z0X3Bw X3RhYmxlID0gdGFibGVfYWRkcjsKPiBAQCAtMTA1OCw3ICsxMDU4LDcgQEAgc3RhdGljIGludCBp bml0X292ZXJkcml2ZV9saW1pdHMoc3RydWN0IHBwX2h3bWdyICpod21nciwKPiAgCQlyZXR1cm4g MDsKPiAgCj4gIAkvKiBXZSBhc3N1bWUgaGVyZSB0aGF0IGZ3X2luZm8gaXMgdW5jaGFuZ2VkIGlm IHRoaXMgY2FsbCBmYWlscy4qLwo+IC0JZndfaW5mbyA9IGNnc19hdG9tX2dldF9kYXRhX3RhYmxl KGh3bWdyLT5kZXZpY2UsCj4gKwlmd19pbmZvID0gc211X2F0b21fZ2V0X2RhdGFfdGFibGUoaHdt Z3ItPmFkZXYsCj4gIAkJCSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBGaXJtd2FyZUlu Zm8pLAo+ICAJCQkgJnNpemUsICZmcmV2LCAmY3Jldik7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9zbXU3X2h3bWdyLmMgYi9kcml2ZXJzL2dw dS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9zbXU3X2h3bWdyLmMKPiBpbmRleCBkNDY5MDU1Li5m NmI3MWM1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdy L3NtdTdfaHdtZ3IuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdy L3NtdTdfaHdtZ3IuYwo+IEBAIC0yOTU3LDggKzI5NTcsNyBAQCBzdGF0aWMgaW50IHNtdTdfZHBt X3BhdGNoX2Jvb3Rfc3RhdGUoc3RydWN0IHBwX2h3bWdyICpod21nciwKPiAgCS8qIEZpcnN0IHJl dHJpZXZlIHRoZSBCb290IGNsb2NrcyBhbmQgVkREQyBmcm9tIHRoZSBmaXJtd2FyZSBpbmZvIHRh YmxlLgo+ICAJICogV2UgYXNzdW1lIGhlcmUgdGhhdCBmd19pbmZvIGlzIHVuY2hhbmdlZCBpZiB0 aGlzIGNhbGwgZmFpbHMuCj4gIAkgKi8KPiAtCWZ3X2luZm8gPSAoQVRPTV9GSVJNV0FSRV9JTkZP X1YyXzIgKiljZ3NfYXRvbV9nZXRfZGF0YV90YWJsZSgKPiAtCQkJaHdtZ3ItPmRldmljZSwgaW5k ZXgsCj4gKwlmd19pbmZvID0gKEFUT01fRklSTVdBUkVfSU5GT19WMl8yICopc211X2F0b21fZ2V0 X2RhdGFfdGFibGUoaHdtZ3ItPmFkZXYsIGluZGV4LAo+ICAJCQkmc2l6ZSwgJmZyZXYsICZjcmV2 KTsKPiAgCWlmICghZndfaW5mbykKPiAgCQkvKiBEdXJpbmcgYSB0ZXN0LCB0aGVyZSBpcyBubyBm aXJtd2FyZSBpbmZvIHRhYmxlLiAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1k L3Bvd2VycGxheS9od21nci9zbXU4X2h3bWdyLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2Vy cGxheS9od21nci9zbXU4X2h3bWdyLmMKPiBpbmRleCA3NWE0NjVmLi4wNTM0YjUxIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3NtdThfaHdtZ3IuYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3NtdThfaHdtZ3IuYwo+ IEBAIC0zMTQsOCArMzE0LDcgQEAgc3RhdGljIGludCBzbXU4X2dldF9zeXN0ZW1faW5mb19kYXRh KHN0cnVjdCBwcF9od21nciAqaHdtZ3IpCj4gIAl1aW50OF90IGZyZXYsIGNyZXY7Cj4gIAl1aW50 MTZfdCBzaXplOwo+ICAKPiAtCWluZm8gPSAoQVRPTV9JTlRFR1JBVEVEX1NZU1RFTV9JTkZPX1Yx XzkgKikgY2dzX2F0b21fZ2V0X2RhdGFfdGFibGUoCj4gLQkJCWh3bWdyLT5kZXZpY2UsCj4gKwlp bmZvID0gKEFUT01fSU5URUdSQVRFRF9TWVNURU1fSU5GT19WMV85ICopc211X2F0b21fZ2V0X2Rh dGFfdGFibGUoaHdtZ3ItPmFkZXYsCj4gIAkJCUdldEluZGV4SW50b01hc3RlclRhYmxlKERBVEEs IEludGVncmF0ZWRTeXN0ZW1JbmZvKSwKPiAgCQkJJnNpemUsICZmcmV2LCAmY3Jldik7Cj4gIAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9zbXVfaGVs cGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9zbXVfaGVscGVyLmMK PiBpbmRleCA1OTgxMjI4Li41MjliZTNjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvcG93ZXJwbGF5L2h3bWdyL3NtdV9oZWxwZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvcG93ZXJwbGF5L2h3bWdyL3NtdV9oZWxwZXIuYwo+IEBAIC0yNCw2ICsyNCw3IEBACj4gICNp bmNsdWRlICJwcF9kZWJ1Zy5oIgo+ICAjaW5jbHVkZSAicHBhdG9tY3RybC5oIgo+ICAjaW5jbHVk ZSAicHBzbWMuaCIKPiArI2luY2x1ZGUgImF0b20uaCIKPiAgCj4gIHVpbnQ4X3QgY29udmVydF90 b192aWQodWludDE2X3QgdmRkYykKPiAgewo+IEBAIC02MDgsMyArNjA5LDE4IEBAIGludCBzbXU5 X3JlZ2lzdGVyX2lycV9oYW5kbGVycyhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQo+ICAKPiAgCXJl dHVybiAwOwo+ICB9Cj4gKwo+ICt2b2lkICpzbXVfYXRvbV9nZXRfZGF0YV90YWJsZSh2b2lkICpk ZXYsIHVpbnQzMl90IHRhYmxlLCB1aW50MTZfdCAqc2l6ZSwKPiArCQkJCQkJdWludDhfdCAqZnJl diwgdWludDhfdCAqY3JldikKPiArewo+ICsJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBk ZXY7Cj4gKwl1aW50MTZfdCBkYXRhX3N0YXJ0Owo+ICsKPiArCWlmIChhbWRncHVfYXRvbV9wYXJz ZV9kYXRhX2hlYWRlcigKPiArCQkgICAgYWRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgdGFi bGUsIHNpemUsCj4gKwkJICAgIGZyZXYsIGNyZXYsICZkYXRhX3N0YXJ0KSkKPiArCQlyZXR1cm4g KHVpbnQ4X3QgKilhZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LT5iaW9zICsKPiArCQkJZGF0 YV9zdGFydDsKPiArCj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9zbXVfaGVscGVyLmggYi9kcml2ZXJzL2dwdS9k cm0vYW1kL3Bvd2VycGxheS9od21nci9zbXVfaGVscGVyLmgKPiBpbmRleCBkMzdkMTZlLi4xNGVl MTYyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3Nt dV9oZWxwZXIuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3Nt dV9oZWxwZXIuaAo+IEBAIC04Miw2ICs4Miw5IEBAIGludCBwaG1faXJxX3Byb2Nlc3Moc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gIAo+ICBpbnQgc211OV9yZWdpc3Rlcl9pcnFfaGFuZGxl cnMoc3RydWN0IHBwX2h3bWdyICpod21ncik7Cj4gIAo+ICt2b2lkICpzbXVfYXRvbV9nZXRfZGF0 YV90YWJsZSh2b2lkICpkZXYsIHVpbnQzMl90IHRhYmxlLCB1aW50MTZfdCAqc2l6ZSwKPiArCQkJ CQkJdWludDhfdCAqZnJldiwgdWludDhfdCAqY3Jldik7Cj4gKwo+ICAjZGVmaW5lIFBITV9GSUVM RF9TSElGVChyZWcsIGZpZWxkKSByZWcjI19fIyNmaWVsZCMjX19TSElGVAo+ICAjZGVmaW5lIFBI TV9GSUVMRF9NQVNLKHJlZywgZmllbGQpIHJlZyMjX18jI2ZpZWxkIyNfTUFTSwo+ICAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvdmVnYTEwX3Byb2Nl c3NwcHRhYmxlcy5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvdmVnYTEw X3Byb2Nlc3NwcHRhYmxlcy5jCj4gaW5kZXggYzYxZDA3NC4uMDc2OGQyNSAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci92ZWdhMTBfcHJvY2Vzc3BwdGFi bGVzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci92ZWdhMTBf cHJvY2Vzc3BwdGFibGVzLmMKPiBAQCAtNTIsNyArNTIsNyBAQCBzdGF0aWMgY29uc3Qgdm9pZCAq Z2V0X3Bvd2VycGxheV90YWJsZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQo+ICAKPiAgCWlmICgh dGFibGVfYWRkcmVzcykgewo+ICAJCXRhYmxlX2FkZHJlc3MgPSAoQVRPTV9WZWdhMTBfUE9XRVJQ TEFZVEFCTEUgKikKPiAtCQkJCWNnc19hdG9tX2dldF9kYXRhX3RhYmxlKGh3bWdyLT5kZXZpY2Us IGluZGV4LAo+ICsJCQkJc211X2F0b21fZ2V0X2RhdGFfdGFibGUoaHdtZ3ItPmFkZXYsIGluZGV4 LAo+ICAJCQkJCQkmc2l6ZSwgJmZyZXYsICZjcmV2KTsKPiAgCj4gIAkJaHdtZ3ItPnNvZnRfcHBf dGFibGUgPSB0YWJsZV9hZGRyZXNzOwkvKkNhY2hlIHRoZSByZXN1bHQgaW4gUkFNLiovCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3ZlZ2ExMl9wcm9j ZXNzcHB0YWJsZXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3ZlZ2Ex Ml9wcm9jZXNzcHB0YWJsZXMuYwo+IGluZGV4IGU3ZDc5NDkuLjkyOGJiOGYgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvdmVnYTEyX3Byb2Nlc3NwcHRh Ymxlcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvdmVnYTEy X3Byb2Nlc3NwcHRhYmxlcy5jCj4gQEAgLTUxLDcgKzUxLDcgQEAgc3RhdGljIGNvbnN0IHZvaWQg KmdldF9wb3dlcnBsYXlfdGFibGUoc3RydWN0IHBwX2h3bWdyICpod21ncikKPiAgCj4gIAlpZiAo IXRhYmxlX2FkZHJlc3MpIHsKPiAgCQl0YWJsZV9hZGRyZXNzID0gKEFUT01fVmVnYTEyX1BPV0VS UExBWVRBQkxFICopCj4gLQkJCQljZ3NfYXRvbV9nZXRfZGF0YV90YWJsZShod21nci0+ZGV2aWNl LCBpbmRleCwKPiArCQkJCXNtdV9hdG9tX2dldF9kYXRhX3RhYmxlKGh3bWdyLT5hZGV2LCBpbmRl eCwKPiAgCQkJCQkJJnNpemUsICZmcmV2LCAmY3Jldik7Cj4gIAo+ICAJCWh3bWdyLT5zb2Z0X3Bw X3RhYmxlID0gdGFibGVfYWRkcmVzczsJLypDYWNoZSB0aGUgcmVzdWx0IGluIFJBTS4qLwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9zbXVtZ3IvZmlqaV9zbXVt Z3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L3NtdW1nci9maWppX3NtdW1nci5j Cj4gaW5kZXggMzViOTQ3ZS4uMWVlYzUyNyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v YW1kL3Bvd2VycGxheS9zbXVtZ3IvZmlqaV9zbXVtZ3IuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvcG93ZXJwbGF5L3NtdW1nci9maWppX3NtdW1nci5jCj4gQEAgLTMzNyw3ICszMzcsNyBA QCBzdGF0aWMgYm9vbCBmaWppX2lzX2h3X2F2ZnNfcHJlc2VudChzdHJ1Y3QgcHBfaHdtZ3IgKmh3 bWdyKQo+ICAJaWYgKCFod21nci0+bm90X3ZmKQo+ICAJCXJldHVybiBmYWxzZTsKPiAgCj4gLQlp ZiAoIWF0b21jdHJsX3JlYWRfZWZ1c2UoaHdtZ3ItPmRldmljZSwgQVZGU19FTl9MU0IsIEFWRlNf RU5fTVNCLAo+ICsJaWYgKCFhdG9tY3RybF9yZWFkX2VmdXNlKGh3bWdyLCBBVkZTX0VOX0xTQiwg QVZGU19FTl9NU0IsCj4gIAkJCW1hc2ssICZlZnVzZSkpIHsKPiAgCQlpZiAoZWZ1c2UpCj4gIAkJ CXJldHVybiB0cnVlOwo+IC0tIAo+IDEuOS4xCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPiBhbWQtZ2Z4IG1haWxpbmcgbGlzdAo+IGFtZC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9hbWQtZ2Z4Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1k LWdmeAo=