From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [1/8] phy: tegra: xusb: t210: add XUSB device mode support From: Nagarjuna Kristam Message-Id: Date: Wed, 13 Feb 2019 12:34:39 +0530 To: Thierry Reding Cc: balbi@kernel.org, gregkh@linuxfoundation.org, jonathanh@nvidia.com, linux-tegra@vger.kernel.org, linux-usb@vger.kernel.org List-ID: SGkgVGhpZXJyeSwKCk9uIDA0LTAyLTIwMTkgMTc6NTcsIFRoaWVycnkgUmVkaW5nIHdyb3RlOgo+ IE9uIFRodSwgSmFuIDAzLCAyMDE5IGF0IDAzOjM0OjUyUE0gKzA1MzAsIE5hZ2FyanVuYSBLcmlz dGFtIHdyb3RlOgo+PiBBZGQgc3VwcG9ydCBmb3IgWFVTQiBkZXZpY2UgbW9kZSBjb250cm9sbGVy IG9uIFRlZ3JhMjEwLgo+PiBVcGRhdGUgUEFEQ1RMIGRyaXZlciB0byBzZXQgcG9ydCBjYXAgYmFz ZWQgb24gRFQgY29uZmlnLgo+PiBBZGQgY29kZSB0byBoYW5kbGUgcHJvcGVydHkgIm52aWRpYSx1 c2IzLXBvcnQtZmFrZSIKPj4gUHJvdmlkZSBBUEkncyB0byBjb250cm9sIHZidXMgb3ZlcnJpZGUg YW5kIHV0bWkgcGFkIHBvd2VyIGNvbnRyb2wKPiAKPiBZb3UgZXNzZW50aWFsbHkgbGlzdCB0aHJl ZSBmZWF0dXJlcyBhZGRpdGlvbnMgaGVyZSwgc28gaXQgbWFrZXMgc2Vuc2UgdG8KPiBwcm92aWRl IGVhY2ggb2YgdGhlbSBpbiBhIHNlcGFyYXRlIHBhdGNoLiBUaGF0IGhlbHBzIHJldmlld2Vycwo+ IGNvbmNlbnRyYXRlIG9uIG9uZSBmZWF0dXJlIGF0IGEgdGltZSB3aXRob3V0IGhhdmluZyB0byBs b2FkIGNvbnRleHQgZm9yCj4gdGhyZWUgZGlmZmVyZW50IHRoaW5ncyBpbiBwYXJhbGxlbC4KPiAK PiBBbHNvLCBmb3IgZWFjaCBmZWF0dXJlIHBsZWFzZSBwcm92aWRlIGEgYml0IG1vcmUgYmFja2dy b3VuZCBpbmZvcm1hdGlvbgo+IGFzIHdlbGwgYXMgcmVhc29ucyBmb3Igd2h5IHRoZXkgYXJlIGFk ZGVkLgo+IAoKRm9yIFhVU0IgZGV2aWNlIGNvbnRyb2wgRmVhdHVyZSBzdXBwb3J0LCB3ZSBuZWVk ZWQgYWxsIHRocmVlIGFuZCBoZW5jZQphZGRlZCB0aGVtIGFzIHBhcnQgb2Ygb25lIGNoYW5nZS4g SWYgd2UgY2FuIGhhdmUgZ3JvdXAgb2YgaW5kaXZpZHVhbHMgQ0wncwpmb3IgcHJvdmlkaW5nIG9u ZSBmZWF0dXJlIHN1cHBvcnQsIHdpbGwgc3BsaXQgdGhlbSBhY2NvcmRpbmdseS4KRG9pbmcgYWJv dmUgd2lsbCBtYXJrIGN1cnJlbnQgY2hhbmdlcyBhcyBhIGRpZmZlcmVudCBwYXRjaCBzZXJpZXMs IGNvbnNpZGVyaW5nCm5ldyBwYXRjaCBzZXJpZXMgd2lsbCBiZSBtYWRlLCBpcyBpdCBmaW5lIHRv IG1vdmUgVVNCIGdhZGdldCBkcml2ZXIgY2hhbmdlcyB0bwphIG5ldyBzZXJpZXMgPwpQbGVhc2Ug c2hhcmUgeW91ciBpbnB1dHMKCj4+IFNpZ25lZC1vZmYtYnk6IE5hZ2FyanVuYSBLcmlzdGFtIDxu a3Jpc3RhbUBudmlkaWEuY29tPgo+PiAtLS0KPj4gIGRyaXZlcnMvcGh5L3RlZ3JhL3h1c2ItdGVn cmEyMTAuYyB8IDI5NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQo+PiAg ZHJpdmVycy9waHkvdGVncmEveHVzYi5jICAgICAgICAgIHwgIDc1ICsrKysrKysrKy0KPj4gIGRy aXZlcnMvcGh5L3RlZ3JhL3h1c2IuaCAgICAgICAgICB8ICAxNiArLQo+PiAgaW5jbHVkZS9saW51 eC9waHkvdGVncmEveHVzYi5oICAgIHwgICA3ICstCj4+ICA0IGZpbGVzIGNoYW5nZWQsIDM4NiBp bnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9w aHkvdGVncmEveHVzYi10ZWdyYTIxMC5jIGIvZHJpdmVycy9waHkvdGVncmEveHVzYi10ZWdyYTIx MC5jCj4+IGluZGV4IDA1YmVlMzIuLjAyODllMTAgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvcGh5 L3RlZ3JhL3h1c2ItdGVncmEyMTAuYwo+PiArKysgYi9kcml2ZXJzL3BoeS90ZWdyYS94dXNiLXRl Z3JhMjEwLmMKPj4gQEAgLTEsNSArMSw1IEBACj4+ICAvKgo+PiAtICogQ29weXJpZ2h0IChjKSAy MDE0LCBOVklESUEgQ09SUE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVkLgo+PiArICogQ29w eXJpZ2h0IChjKSAyMDE0LTIwMTgsIE5WSURJQSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCj4+ICAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgR29vZ2xlLCBJbmMuCj4+ICAgKgo+PiAg ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgaXQKPj4gQEAgLTQ3LDcgKzQ3LDEwIEBACj4+ICAjZGVmaW5lIFhVU0Jf UEFEQ1RMX1VTQjJfUEFEX01VWF9VU0IyX0JJQVNfUEFEX1hVU0IgMHgxCj4+ICAKPj4gICNkZWZp bmUgWFVTQl9QQURDVExfVVNCMl9QT1JUX0NBUCAweDAwOAo+PiArI2RlZmluZSBYVVNCX1BBRENU TF9VU0IyX1BPUlRfQ0FQX1BPUlRYX0NBUF9ESVNBQkxFRCh4KSAoMHgwIDw8ICgoeCkgKiA0KSkK Pj4gICNkZWZpbmUgWFVTQl9QQURDVExfVVNCMl9QT1JUX0NBUF9QT1JUWF9DQVBfSE9TVCh4KSAo MHgxIDw8ICgoeCkgKiA0KSkKPj4gKyNkZWZpbmUgWFVTQl9QQURDVExfVVNCMl9QT1JUX0NBUF9Q T1JUWF9DQVBfREVWSUNFKHgpICgweDIgPDwgKCh4KSAqIDQpKQo+PiArI2RlZmluZSBYVVNCX1BB RENUTF9VU0IyX1BPUlRfQ0FQX1BPUlRYX0NBUF9PVEcoeCkgKDB4MyA8PCAoKHgpICogNCkpCj4+ ICAjZGVmaW5lIFhVU0JfUEFEQ1RMX1VTQjJfUE9SVF9DQVBfUE9SVFhfQ0FQX01BU0soeCkgKDB4 MyA8PCAoKHgpICogNCkpCj4+ICAKPj4gICNkZWZpbmUgWFVTQl9QQURDVExfU1NfUE9SVF9NQVAg MHgwMTQKPj4gQEAgLTU1LDYgKzU4LDcgQEAKPj4gICNkZWZpbmUgWFVTQl9QQURDVExfU1NfUE9S VF9NQVBfUE9SVFhfTUFQX1NISUZUKHgpICgoeCkgKiA1KQo+PiAgI2RlZmluZSBYVVNCX1BBRENU TF9TU19QT1JUX01BUF9QT1JUWF9NQVBfTUFTSyh4KSAoMHg3IDw8ICgoeCkgKiA1KSkKPj4gICNk ZWZpbmUgWFVTQl9QQURDVExfU1NfUE9SVF9NQVBfUE9SVFhfTUFQKHgsIHYpICgoKHYpICYgMHg3 KSA8PCAoKHgpICogNSkpCj4+ICsjZGVmaW5lIFhVU0JfUEFEQ1RMX1NTX1BPUlRfTUFQX1BPUlRf RElTQUJMRUQgMHg3Cj4+ICAKPj4gICNkZWZpbmUgWFVTQl9QQURDVExfRUxQR19QUk9HUkFNMSAw eDAyNAo+PiAgI2RlZmluZSBYVVNCX1BBRENUTF9FTFBHX1BST0dSQU0xX0FVWF9NVVhfTFAwX1ZD T1JFX0RPV04gKDEgPDwgMzEpCj4+IEBAIC02OSw5ICs3MywxNCBAQAo+PiAgI2RlZmluZSBYVVNC X1BBRENUTF9VU0IzX1BBRF9NVVhfUENJRV9JRERRX0RJU0FCTEUoeCkgKDEgPDwgKDEgKyAoeCkp KQo+PiAgI2RlZmluZSBYVVNCX1BBRENUTF9VU0IzX1BBRF9NVVhfU0FUQV9JRERRX0RJU0FCTEUo eCkgKDEgPDwgKDggKyAoeCkpKQo+PiAgCj4+ICsjZGVmaW5lIFhVU0JfUEFEQ1RMX1VTQjJfQkFU VEVSWV9DSFJHX09UR1BBRFhfQ1RMMCh4KSAoMHgwODAgKyAoeCkgKiAweDQwKQo+PiArI2RlZmlu ZSBYVVNCX1BBRENUTF9VU0IyX0JBVFRFUllfQ0hSR19PVEdQQURfQ1RMMF9aSVAgKDEgPDwgMTgp Cj4+ICsjZGVmaW5lIFhVU0JfUEFEQ1RMX1VTQjJfQkFUVEVSWV9DSFJHX09UR1BBRF9DVEwwX1pJ TiAoMSA8PCAyMikKPj4gKwo+PiAgI2RlZmluZSBYVVNCX1BBRENUTF9VU0IyX0JBVFRFUllfQ0hS R19PVEdQQURYX0NUTDEoeCkgKDB4MDg0ICsgKHgpICogMHg0MCkKPj4gICNkZWZpbmUgWFVTQl9Q QURDVExfVVNCMl9CQVRURVJZX0NIUkdfT1RHUEFEX0NUTDFfVlJFR19MRVZfU0hJRlQgNwo+PiAg I2RlZmluZSBYVVNCX1BBRENUTF9VU0IyX0JBVFRFUllfQ0hSR19PVEdQQURfQ1RMMV9WUkVHX0xF Vl9NQVNLIDB4Mwo+PiArI2RlZmluZSBYVVNCX1BBRENUTF9VU0IyX0JBVFRFUllfQ0hSR19PVEdQ QURfQ1RMMV9WUkVHX0xFVl9WQUwgMHgxCj4+ICAjZGVmaW5lIFhVU0JfUEFEQ1RMX1VTQjJfQkFU VEVSWV9DSFJHX09UR1BBRF9DVEwxX1ZSRUdfRklYMTggKDEgPDwgNikKPj4gIAo+PiAgI2RlZmlu ZSBYVVNCX1BBRENUTF9VU0IyX09UR19QQURYX0NUTDAoeCkgKDB4MDg4ICsgKHgpICogMHg0MCkK Pj4gQEAgLTIzMCw2ICsyMzksMTIgQEAKPj4gICNkZWZpbmUgWFVTQl9QQURDVExfVVBIWV9VU0Iz X1BBRFhfRUNUTDYoeCkgKDB4YTc0ICsgKHgpICogMHg0MCkKPj4gICNkZWZpbmUgWFVTQl9QQURD VExfVVBIWV9VU0IzX1BBRF9FQ1RMNl9SWF9FUV9DVFJMX0hfVkFMIDB4ZmNmMDEzNjgKPj4gIAo+ PiArI2RlZmluZSBYVVNCX1BBRENUTF9VU0IyX1ZCVVNfSUQgMHhjNjAKPj4gKyNkZWZpbmUgWFVT Ql9QQURDVExfVVNCMl9WQlVTX0lEX09WRVJSSURFX1ZCVVNfT04gKDEgPDwgMTQpCj4+ICsjZGVm aW5lIFhVU0JfUEFEQ1RMX1VTQjJfVkJVU19JRF9PVkVSUklERV9TSElGVCAxOAo+PiArI2RlZmlu ZSBYVVNCX1BBRENUTF9VU0IyX1ZCVVNfSURfT1ZFUlJJREVfTUFTSyAweGYKPj4gKyNkZWZpbmUg WFVTQl9QQURDVExfVVNCMl9WQlVTX0lEX09WRVJSSURFX1ZBTCA4Cj4+ICsKPj4gIHN0cnVjdCB0 ZWdyYTIxMF94dXNiX2Z1c2VfY2FsaWJyYXRpb24gewo+PiAgCXUzMiBoc19jdXJyX2xldmVsWzRd Owo+PiAgCXUzMiBoc190ZXJtX3JhbmdlX2FkajsKPj4gQEAgLTkwNSw2ICs5MjAsMTYxIEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfeHVzYl9sYW5lX29wcyB0ZWdyYTIxMF91c2IyX2xhbmVf b3BzID0gewo+PiAgCS5yZW1vdmUgPSB0ZWdyYTIxMF91c2IyX2xhbmVfcmVtb3ZlLAo+PiAgfTsK Pj4gIAo+PiArLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgcGFkY3RsLT5sb2NrICovCj4+ICtzdGF0 aWMgdm9pZCB0ZWdyYTIxMF91dG1pX2JpYXNfcGFkX3Bvd2VyX29uKHN0cnVjdCB0ZWdyYV94dXNi X3BhZGN0bCAqcGFkY3RsLAo+PiArCQkJCXN0cnVjdCB0ZWdyYV94dXNiX3VzYjJfcGFkICpwYWQp Cj4+ICt7Cj4+ICsJdTMyIHJlZzsKPj4gKwo+PiArCWlmIChwYWQtPmVuYWJsZSsrID4gMCkKPj4g KwkJcmV0dXJuOwo+PiArCj4+ICsJZGV2X2RiZyhwYWRjdGwtPmRldiwgInBvd2VyIG9uIEJJQVMg UEFEICYgVVNCMiB0cmFja2luZ1xuIik7Cj4+ICsKPj4gKwlpZiAoY2xrX3ByZXBhcmVfZW5hYmxl KHBhZC0+Y2xrKSkKPj4gKwkJZGV2X3dhcm4ocGFkY3RsLT5kZXYsICJmYWlsZWQgdG8gZW5hYmxl IEJJQVMgUEFEICYgVVNCMiB0cmFja2luZ1xuIik7Cj4gCj4gTWF5YmUga2VlcCB0cmFjayBvZiB0 aGUgZXhhY3QgZXJyb3IgYW5kIG1ha2UgdGhhdCBwYXJ0IG9mIHRoZSBlcnJvcgo+IG1lc3NhZ2U/ Cj4gCgpXaWxsIGRvCgo+PiArCj4+ICsJcmVnID0gcGFkY3RsX3JlYWRsKHBhZGN0bCwgWFVTQl9Q QURDVExfVVNCMl9CSUFTX1BBRF9DVEwxKTsKPj4gKwo+PiArCXJlZyAmPSB+KChYVVNCX1BBRENU TF9VU0IyX0JJQVNfUEFEX0NUTDFfVFJLX1NUQVJUX1RJTUVSX01BU0sgPDwKPj4gKwkJICAgIFhV U0JfUEFEQ1RMX1VTQjJfQklBU19QQURfQ1RMMV9UUktfU1RBUlRfVElNRVJfU0hJRlQpIHwKPj4g KwkJICAgKFhVU0JfUEFEQ1RMX1VTQjJfQklBU19QQURfQ1RMMV9UUktfRE9ORV9SRVNFVF9USU1F Ul9NQVNLIDw8Cj4+ICsJCSAgICBYVVNCX1BBRENUTF9VU0IyX0JJQVNfUEFEX0NUTDFfVFJLX0RP TkVfUkVTRVRfVElNRVJfU0hJRlQpKTsKPj4gKwlyZWcgfD0gKFhVU0JfUEFEQ1RMX1VTQjJfQklB U19QQURfQ1RMMV9UUktfU1RBUlRfVElNRVJfVkFMIDw8Cj4+ICsJCSAgWFVTQl9QQURDVExfVVNC Ml9CSUFTX1BBRF9DVEwxX1RSS19TVEFSVF9USU1FUl9TSElGVCkgfAo+PiArCQkgKFhVU0JfUEFE Q1RMX1VTQjJfQklBU19QQURfQ1RMMV9UUktfRE9ORV9SRVNFVF9USU1FUl9WQUwgPDwKPj4gKwkJ ICBYVVNCX1BBRENUTF9VU0IyX0JJQVNfUEFEX0NUTDFfVFJLX0RPTkVfUkVTRVRfVElNRVJfU0hJ RlQpOwo+PiArCXBhZGN0bF93cml0ZWwocGFkY3RsLCByZWcsIFhVU0JfUEFEQ1RMX1VTQjJfQklB U19QQURfQ1RMMSk7Cj4+ICsKPj4gKwlyZWcgPSBwYWRjdGxfcmVhZGwocGFkY3RsLCBYVVNCX1BB RENUTF9VU0IyX0JJQVNfUEFEX0NUTDApOwo+PiArCXJlZyAmPSB+WFVTQl9QQURDVExfVVNCMl9C SUFTX1BBRF9DVEwwX1BEOwo+PiArCj4+ICsJcmVnICY9IH4oKFhVU0JfUEFEQ1RMX1VTQjJfQklB U19QQURfQ1RMMF9IU19TUVVFTENIX0xFVkVMX01BU0sgPDwKPj4gKwkJICAgIFhVU0JfUEFEQ1RM X1VTQjJfQklBU19QQURfQ1RMMF9IU19TUVVFTENIX0xFVkVMX1NISUZUKSB8Cj4+ICsJCSAgIChY VVNCX1BBRENUTF9VU0IyX0JJQVNfUEFEX0NUTDBfSFNfRElTQ09OX0xFVkVMX01BU0sgPDwKPj4g KwkJICAgIFhVU0JfUEFEQ1RMX1VTQjJfQklBU19QQURfQ1RMMF9IU19ESVNDT05fTEVWRUxfU0hJ RlQpKTsKPj4gKwlyZWcgfD0gKFhVU0JfUEFEQ1RMX1VTQjJfQklBU19QQURfQ1RMMF9IU19ESVND T05fTEVWRUxfVkFMIDw8Cj4+ICsJCSAgWFVTQl9QQURDVExfVVNCMl9CSUFTX1BBRF9DVEwwX0hT X0RJU0NPTl9MRVZFTF9TSElGVCk7Cj4+ICsKPj4gKwlpZiAodGVncmFfc2t1X2luZm8ucmV2aXNp b24gPCBURUdSQV9SRVZJU0lPTl9BMDIpCj4+ICsJCXJlZyB8PSAoWFVTQl9QQURDVExfVVNCMl9C SUFTX1BBRF9DVEwwX0hTX1NRVUVMQ0hfTEVWRUxfVkFMIDw8Cj4+ICsJCQlYVVNCX1BBRENUTF9V U0IyX0JJQVNfUEFEX0NUTDBfSFNfU1FVRUxDSF9MRVZFTF9TSElGVCk7Cj4+ICsJcGFkY3RsX3dy aXRlbChwYWRjdGwsIHJlZywgWFVTQl9QQURDVExfVVNCMl9CSUFTX1BBRF9DVEwwKTsKPj4gKwo+ PiArCXVkZWxheSgxKTsKPj4gKwo+PiArCXJlZyA9IHBhZGN0bF9yZWFkbChwYWRjdGwsIFhVU0Jf UEFEQ1RMX1VTQjJfQklBU19QQURfQ1RMMSk7Cj4+ICsJcmVnICY9IH5YVVNCX1BBRENUTF9VU0Iy X0JJQVNfUEFEX0NUTDFfUERfVFJLOwo+PiArCXBhZGN0bF93cml0ZWwocGFkY3RsLCByZWcsIFhV U0JfUEFEQ1RMX1VTQjJfQklBU19QQURfQ1RMMSk7Cj4+ICt9Cj4+ICsKPj4gKy8qIG11c3QgYmUg Y2FsbGVkIHVuZGVyIHBhZGN0bC0+bG9jayAqLwo+PiArc3RhdGljIHZvaWQgdGVncmEyMTBfdXRt aV9iaWFzX3BhZF9wb3dlcl9vZmYoc3RydWN0IHRlZ3JhX3h1c2JfcGFkY3RsICpwYWRjdGwsCj4+ ICsJCQkJc3RydWN0IHRlZ3JhX3h1c2JfdXNiMl9wYWQgKnBhZCkKPj4gK3sKPj4gKwl1MzIgcmVn Owo+PiArCj4+ICsJaWYgKFdBUk5fT04ocGFkLT5lbmFibGUgPT0gMCkpCj4+ICsJCXJldHVybjsK Pj4gKwo+PiArCWlmICgtLXBhZC0+ZW5hYmxlID4gMCkKPj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJ ZGV2X2RiZyhwYWRjdGwtPmRldiwgInBvd2VyIG9mZiBVU0IyIHRyYWNraW5nXG4iKTsKPj4gKwly ZWcgPSBwYWRjdGxfcmVhZGwocGFkY3RsLCBYVVNCX1BBRENUTF9VU0IyX0JJQVNfUEFEX0NUTDEp Owo+PiArCXJlZyB8PSBYVVNCX1BBRENUTF9VU0IyX0JJQVNfUEFEX0NUTDFfUERfVFJLOwo+PiAr CXBhZGN0bF93cml0ZWwocGFkY3RsLCByZWcsIFhVU0JfUEFEQ1RMX1VTQjJfQklBU19QQURfQ1RM MSk7Cj4+ICsKPj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUocGFkLT5jbGspOwo+PiArfQo+PiAr Cj4+ICt2b2lkIHRlZ3JhMjEwX3V0bWlfcGFkX3Bvd2VyX29uKHN0cnVjdCBwaHkgKnBoeSkKPj4g K3sKPj4gKwlzdHJ1Y3QgdGVncmFfeHVzYl9sYW5lICpsYW5lOwo+PiArCXN0cnVjdCB0ZWdyYV94 dXNiX3VzYjJfbGFuZSAqdXNiMjsKPj4gKwlzdHJ1Y3QgdGVncmFfeHVzYl91c2IyX3BhZCAqcGFk Owo+PiArCXN0cnVjdCB0ZWdyYV94dXNiX3BhZGN0bCAqcGFkY3RsOwo+PiArCXVuc2lnbmVkIGlu dCBpbmRleDsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+ICsJdTMyIHJlZzsKPj4gKwo+PiAr CWlmICghcGh5KQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwlsYW5lID0gcGh5X2dldF9kcnZkYXRh KHBoeSk7Cj4+ICsJdXNiMiA9IHRvX3VzYjJfbGFuZShsYW5lKTsKPj4gKwlwYWQgPSB0b191c2Iy X3BhZChsYW5lLT5wYWQpOwo+PiArCXBhZGN0bCA9IGxhbmUtPnBhZC0+cGFkY3RsOwo+PiArCWlu ZGV4ID0gbGFuZS0+aW5kZXg7Cj4+ICsJZGV2ID0gcGFkY3RsLT5kZXY7Cj4+ICsKPj4gKwlpZiAo dXNiMi0+cG93ZXJlZF9vbikKPj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJbXV0ZXhfbG9jaygmcGFk Y3RsLT5sb2NrKTsKPj4gKwo+PiArCWRldl9pbmZvKGRldiwgInBvd2VyIG9uIFVUTUkgcGFkcyAl ZFxuIiwgaW5kZXgpOwo+IAo+IGRldl9kYmcoKT8gQWxzbywgaW5kZXggaXMgdW5zaWduZWQsIHNv IHlvdSBzaG91bGQgdXNlICV1IHRvIHByaW50IGl0Lgo+IAoKV2lsbCBjaGFuZ2UgdG8gZGV2X2Ri ZyBhbmQgcHJpbnQgaW5kZXggYXMgJXUKCj4+ICsKPj4gKwl0ZWdyYTIxMF91dG1pX2JpYXNfcGFk X3Bvd2VyX29uKHBhZGN0bCwgcGFkKTsKPj4gKwo+PiArCXVkZWxheSgyKTsKPj4gKwo+PiArCXJl ZyA9IHBhZGN0bF9yZWFkbChwYWRjdGwsIFhVU0JfUEFEQ1RMX1VTQjJfT1RHX1BBRFhfQ1RMMChp bmRleCkpOwo+PiArCXJlZyAmPSB+WFVTQl9QQURDVExfVVNCMl9PVEdfUEFEX0NUTDBfUEQ7Cj4+ ICsJcGFkY3RsX3dyaXRlbChwYWRjdGwsIHJlZywgWFVTQl9QQURDVExfVVNCMl9PVEdfUEFEWF9D VEwwKGluZGV4KSk7Cj4+ICsKPj4gKwlyZWcgPSBwYWRjdGxfcmVhZGwocGFkY3RsLCBYVVNCX1BB RENUTF9VU0IyX09UR19QQURYX0NUTDEoaW5kZXgpKTsKPj4gKwlyZWcgJj0gflhVU0JfUEFEQ1RM X1VTQjJfT1RHX1BBRF9DVEwxX1BEX0RSOwo+PiArCXBhZGN0bF93cml0ZWwocGFkY3RsLCByZWcs IFhVU0JfUEFEQ1RMX1VTQjJfT1RHX1BBRFhfQ1RMMShpbmRleCkpOwo+PiArCj4+ICsJdXNiMi0+ cG93ZXJlZF9vbiA9IHRydWU7Cj4+ICsKPj4gKwltdXRleF91bmxvY2soJnBhZGN0bC0+bG9jayk7 Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgdGVncmEyMTBfdXRtaV9wYWRfcG93ZXJfZG93bihzdHJ1Y3Qg cGh5ICpwaHkpCj4+ICt7Cj4+ICsJc3RydWN0IHRlZ3JhX3h1c2JfbGFuZSAqbGFuZTsKPj4gKwlz dHJ1Y3QgdGVncmFfeHVzYl91c2IyX2xhbmUgKnVzYjI7Cj4+ICsJc3RydWN0IHRlZ3JhX3h1c2Jf dXNiMl9wYWQgKnBhZDsKPj4gKwlzdHJ1Y3QgdGVncmFfeHVzYl9wYWRjdGwgKnBhZGN0bDsKPj4g Kwl1bnNpZ25lZCBpbnQgaW5kZXg7Cj4+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+PiArCXUzMiBy ZWc7Cj4+ICsKPj4gKwlpZiAoIXBoeSkKPj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJbGFuZSA9IHBo eV9nZXRfZHJ2ZGF0YShwaHkpOwo+PiArCXVzYjIgPSB0b191c2IyX2xhbmUobGFuZSk7Cj4+ICsJ cGFkID0gdG9fdXNiMl9wYWQobGFuZS0+cGFkKTsKPj4gKwlwYWRjdGwgPSBsYW5lLT5wYWQtPnBh ZGN0bDsKPj4gKwlpbmRleCA9IGxhbmUtPmluZGV4Owo+PiArCWRldiA9IHBhZGN0bC0+ZGV2Owo+ PiArCj4+ICsJaWYgKCF1c2IyLT5wb3dlcmVkX29uKQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwlt dXRleF9sb2NrKCZwYWRjdGwtPmxvY2spOwo+PiArCj4+ICsJZGV2X2luZm8oZGV2LCAicG93ZXIg ZG93biBVVE1JIHBhZCAlZFxuIiwgaW5kZXgpOwo+IAo+IFNhbWUgYXMgYWJvdmUuCj4gCgp3aWxs IGRvCgo+PiArCj4+ICsJcmVnID0gcGFkY3RsX3JlYWRsKHBhZGN0bCwgWFVTQl9QQURDVExfVVNC Ml9PVEdfUEFEWF9DVEwwKGluZGV4KSk7Cj4+ICsJcmVnIHw9IFhVU0JfUEFEQ1RMX1VTQjJfT1RH X1BBRF9DVEwwX1BEOwo+PiArCXBhZGN0bF93cml0ZWwocGFkY3RsLCByZWcsIFhVU0JfUEFEQ1RM X1VTQjJfT1RHX1BBRFhfQ1RMMChpbmRleCkpOwo+PiArCj4+ICsJcmVnID0gcGFkY3RsX3JlYWRs KHBhZGN0bCwgWFVTQl9QQURDVExfVVNCMl9PVEdfUEFEWF9DVEwxKGluZGV4KSk7Cj4+ICsJcmVn IHw9IFhVU0JfUEFEQ1RMX1VTQjJfT1RHX1BBRF9DVEwxX1BEX0RSOwo+PiArCXBhZGN0bF93cml0 ZWwocGFkY3RsLCByZWcsIFhVU0JfUEFEQ1RMX1VTQjJfT1RHX1BBRFhfQ1RMMShpbmRleCkpOwo+ PiArCj4+ICsJdWRlbGF5KDIpOwo+PiArCj4+ICsJdGVncmEyMTBfdXRtaV9iaWFzX3BhZF9wb3dl cl9vZmYocGFkY3RsLCBwYWQpOwo+PiArCXVzYjItPnBvd2VyZWRfb24gPSBmYWxzZTsKPj4gKwo+ PiArCW11dGV4X3VubG9jaygmcGFkY3RsLT5sb2NrKTsKPj4gK30KPiAKPiBJJ20gbm90IHN1cmUg SSB1bmRlcnN0YW5kIHRoaXMgY29ycmVjdGx5LiBUaGlzIHNlZW1zIHRvIGltcGxlbWVudCBzb21l Cj4gcmVmZXJlbmNlIGNvdW50aW5nIG9mIGl0cyBvd24uIFdoeSBpcyB0aGF0PyBJcyBpdCBiZWNh dXNlIGl0IGlzIHNoYXJlZAo+IGJldHdlZW4gbXVsdGlwbGUgcGFkcz8gQnV0IHRoZW4sIHlvdSdy ZSB3cml0aW5nIHRvIGluZGV4ZWQgcmVnaXN0ZXJzLAo+IHdoaWNoIGluZGljYXRlcyB0byBtZSB0 aGF0IHRoZXNlIGFyZSBpbiBmYWN0IHNlcGFyYXRlIHBhZHMgYW5kIG5vdCBhCj4gc2hhcmVkIHJl c291cmNlLiBTbyB3aHkgdGhlIHJlZmVyZW5jZSBjb3VudGluZz8KPiAKPiBJJ20gYWxzbyBub3Qg c3VyZSB3aHkgdGhlc2UgZnVuY3Rpb25zIG5lZWQgdG8gYmUgYWNjZXNzaWJsZSBvdXRzaWRlIHRo aXMKPiBmaWxlLiBUaGV5IGFyZSBub3QgdXNlZCBvdXRzaWRlLCBhcyBmYXIgYXMgSSBjYW4gdGVs bC4KPiAKCkxvY2sgd2FzIGFkZGVkLCBzaW5jZSB0aGUgQVBJIGFyZWEgY2FsbGVkIGZyb20gZXh0 ZXJuYWwgY29udGV4dChYVURDIGRyaXZlcikKYW5kIHRvIHByb3RlY3QgYWdhaW5zdCBvbi9vZmYs IG11dGV4X2xvY2sgd2FzIGRvbmUuCkJhc2VkIG9uIGxhdGVyIHN1Z2dlc3Rpb24gaW4gdGhlIHJl dmlldywgd2lsbCBtb3ZlIHV0bWkgcGFkIGFuZCB1dG1pIGJpYXMgcGFkCnBvd2VyIG9uIGZ1bmN0 aW9ucyB0byBwaHlfcG93ZXJfb24sIHdpdGggdGhhdCwgbXV0ZXggbG9jayBpcyBub3QgbmVlZGVk IGFueSBtb3JlLgoKPj4gIHN0YXRpYyBpbnQgdGVncmEyMTBfdXNiMl9waHlfaW5pdChzdHJ1Y3Qg cGh5ICpwaHkpCj4+ICB7Cj4+ICAJc3RydWN0IHRlZ3JhX3h1c2JfbGFuZSAqbGFuZSA9IHBoeV9n ZXRfZHJ2ZGF0YShwaHkpOwo+PiBAQCAtOTQ4LDYgKzExMTgsMzQgQEAgc3RhdGljIGludCB0ZWdy YTIxMF91c2IyX3BoeV9wb3dlcl9vbihzdHJ1Y3QgcGh5ICpwaHkpCj4+ICAKPj4gIAlwcml2ID0g dG9fdGVncmEyMTBfeHVzYl9wYWRjdGwocGFkY3RsKTsKPj4gIAo+PiArCWlmIChwb3J0LT51c2Iz X3BvcnRfZmFrZSAhPSAtMSkgewo+PiArCQl2YWx1ZSA9IHBhZGN0bF9yZWFkbChwYWRjdGwsIFhV U0JfUEFEQ1RMX1NTX1BPUlRfTUFQKTsKPj4gKwkJdmFsdWUgJj0gflhVU0JfUEFEQ1RMX1NTX1BP UlRfTUFQX1BPUlRYX01BUF9NQVNLKAo+PiArCQkJCQlwb3J0LT51c2IzX3BvcnRfZmFrZSk7Cj4+ ICsJCXZhbHVlIHw9IFhVU0JfUEFEQ1RMX1NTX1BPUlRfTUFQX1BPUlRYX01BUCgKPj4gKwkJCQkJ cG9ydC0+dXNiM19wb3J0X2Zha2UsIGluZGV4KTsKPj4gKwkJcGFkY3RsX3dyaXRlbChwYWRjdGws IHZhbHVlLCBYVVNCX1BBRENUTF9TU19QT1JUX01BUCk7Cj4+ICsKPj4gKwkJdmFsdWUgPSBwYWRj dGxfcmVhZGwocGFkY3RsLCBYVVNCX1BBRENUTF9FTFBHX1BST0dSQU0xKTsKPj4gKwkJdmFsdWUg Jj0gflhVU0JfUEFEQ1RMX0VMUEdfUFJPR1JBTTFfU1NQWF9FTFBHX1ZDT1JFX0RPV04oCj4+ICsJ CQkJCXBvcnQtPnVzYjNfcG9ydF9mYWtlKTsKPj4gKwkJcGFkY3RsX3dyaXRlbChwYWRjdGwsIHZh bHVlLCBYVVNCX1BBRENUTF9FTFBHX1BST0dSQU0xKTsKPj4gKwo+PiArCQl1c2xlZXBfcmFuZ2Uo MTAwLCAyMDApOwo+PiArCj4+ICsJCXZhbHVlID0gcGFkY3RsX3JlYWRsKHBhZGN0bCwgWFVTQl9Q QURDVExfRUxQR19QUk9HUkFNMSk7Cj4+ICsJCXZhbHVlICY9IH5YVVNCX1BBRENUTF9FTFBHX1BS T0dSQU0xX1NTUFhfRUxQR19DTEFNUF9FTl9FQVJMWSgKPj4gKwkJCQkJcG9ydC0+dXNiM19wb3J0 X2Zha2UpOwo+PiArCQlwYWRjdGxfd3JpdGVsKHBhZGN0bCwgdmFsdWUsIFhVU0JfUEFEQ1RMX0VM UEdfUFJPR1JBTTEpOwo+PiArCj4+ICsJCXVzbGVlcF9yYW5nZSgxMDAsIDIwMCk7Cj4+ICsKPj4g KwkJdmFsdWUgPSBwYWRjdGxfcmVhZGwocGFkY3RsLCBYVVNCX1BBRENUTF9FTFBHX1BST0dSQU0x KTsKPj4gKwkJdmFsdWUgJj0gflhVU0JfUEFEQ1RMX0VMUEdfUFJPR1JBTTFfU1NQWF9FTFBHX0NM QU1QX0VOKAo+PiArCQkJCQlwb3J0LT51c2IzX3BvcnRfZmFrZSk7Cj4+ICsJCXBhZGN0bF93cml0 ZWwocGFkY3RsLCB2YWx1ZSwgWFVTQl9QQURDVExfRUxQR19QUk9HUkFNMSk7Cj4+ICsJfQo+PiAr Cj4+ICAJdmFsdWUgPSBwYWRjdGxfcmVhZGwocGFkY3RsLCBYVVNCX1BBRENUTF9VU0IyX0JJQVNf UEFEX0NUTDApOwo+PiAgCXZhbHVlICY9IH4oKFhVU0JfUEFEQ1RMX1VTQjJfQklBU19QQURfQ1RM MF9IU19TUVVFTENIX0xFVkVMX01BU0sgPDwKPj4gIAkJICAgIFhVU0JfUEFEQ1RMX1VTQjJfQklB U19QQURfQ1RMMF9IU19TUVVFTENIX0xFVkVMX1NISUZUKSB8Cj4+IEBAIC05NjUsNyArMTE2Mywx NCBAQCBzdGF0aWMgaW50IHRlZ3JhMjEwX3VzYjJfcGh5X3Bvd2VyX29uKHN0cnVjdCBwaHkgKnBo eSkKPj4gIAo+PiAgCXZhbHVlID0gcGFkY3RsX3JlYWRsKHBhZGN0bCwgWFVTQl9QQURDVExfVVNC Ml9QT1JUX0NBUCk7Cj4+ICAJdmFsdWUgJj0gflhVU0JfUEFEQ1RMX1VTQjJfUE9SVF9DQVBfUE9S VFhfQ0FQX01BU0soaW5kZXgpOwo+PiAtCXZhbHVlIHw9IFhVU0JfUEFEQ1RMX1VTQjJfUE9SVF9D QVBfUE9SVFhfQ0FQX0hPU1QoaW5kZXgpOwo+PiArCWlmIChwb3J0LT5wb3J0X2NhcCA9PSBVU0Jf UE9SVF9ESVNBQkxFRCkKPj4gKwkJdmFsdWUgfD0gWFVTQl9QQURDVExfVVNCMl9QT1JUX0NBUF9Q T1JUWF9DQVBfRElTQUJMRUQoaW5kZXgpOwo+PiArCWVsc2UgaWYgKHBvcnQtPnBvcnRfY2FwID09 IFVTQl9ERVZJQ0VfQ0FQKQo+PiArCQl2YWx1ZSB8PSBYVVNCX1BBRENUTF9VU0IyX1BPUlRfQ0FQ X1BPUlRYX0NBUF9ERVZJQ0UoaW5kZXgpOwo+PiArCWVsc2UgaWYgKHBvcnQtPnBvcnRfY2FwID09 IFVTQl9IT1NUX0NBUCkKPj4gKwkJdmFsdWUgfD0gWFVTQl9QQURDVExfVVNCMl9QT1JUX0NBUF9Q T1JUWF9DQVBfSE9TVChpbmRleCk7Cj4+ICsJZWxzZSBpZiAocG9ydC0+cG9ydF9jYXAgPT0gVVNC X09UR19DQVApCj4+ICsJCXZhbHVlIHw9IFhVU0JfUEFEQ1RMX1VTQjJfUE9SVF9DQVBfUE9SVFhf Q0FQX09URyhpbmRleCk7Cj4+ICAJcGFkY3RsX3dyaXRlbChwYWRjdGwsIHZhbHVlLCBYVVNCX1BB RENUTF9VU0IyX1BPUlRfQ0FQKTsKPj4gIAo+PiAgCXZhbHVlID0gcGFkY3RsX3JlYWRsKHBhZGN0 bCwgWFVTQl9QQURDVExfVVNCMl9PVEdfUEFEWF9DVEwwKGluZGV4KSk7Cj4+IEBAIC05OTcsNyAr MTIwMiwxMiBAQCBzdGF0aWMgaW50IHRlZ3JhMjEwX3VzYjJfcGh5X3Bvd2VyX29uKHN0cnVjdCBw aHkgKnBoeSkKPj4gIAkJCSAgICAgWFVTQl9QQURDVExfVVNCMl9CQVRURVJZX0NIUkdfT1RHUEFE WF9DVEwxKGluZGV4KSk7Cj4+ICAJdmFsdWUgJj0gfihYVVNCX1BBRENUTF9VU0IyX0JBVFRFUllf Q0hSR19PVEdQQURfQ1RMMV9WUkVHX0xFVl9NQVNLIDw8Cj4+ICAJCSAgIFhVU0JfUEFEQ1RMX1VT QjJfQkFUVEVSWV9DSFJHX09UR1BBRF9DVEwxX1ZSRUdfTEVWX1NISUZUKTsKPj4gLQl2YWx1ZSB8 PSBYVVNCX1BBRENUTF9VU0IyX0JBVFRFUllfQ0hSR19PVEdQQURfQ1RMMV9WUkVHX0ZJWDE4Owo+ PiArCWlmIChwb3J0LT5wb3J0X2NhcCA9PSBVU0JfSE9TVF9DQVApCj4+ICsJCXZhbHVlIHw9IFhV U0JfUEFEQ1RMX1VTQjJfQkFUVEVSWV9DSFJHX09UR1BBRF9DVEwxX1ZSRUdfRklYMTg7Cj4+ICsJ ZWxzZQo+PiArCQl2YWx1ZSB8PQo+PiArCQkgICAgICBYVVNCX1BBRENUTF9VU0IyX0JBVFRFUllf Q0hSR19PVEdQQURfQ1RMMV9WUkVHX0xFVl9WQUwgPDwKPj4gKwkJICAgICAgWFVTQl9QQURDVExf VVNCMl9CQVRURVJZX0NIUkdfT1RHUEFEX0NUTDFfVlJFR19MRVZfU0hJRlQ7Cj4+ICAJcGFkY3Rs X3dyaXRlbChwYWRjdGwsIHZhbHVlLAo+PiAgCQkgICAgICBYVVNCX1BBRENUTF9VU0IyX0JBVFRF UllfQ0hSR19PVEdQQURYX0NUTDEoaW5kZXgpKTsKPj4gIAo+PiBAQCAtMTA3MCw2ICsxMjgwLDM0 IEBAIHN0YXRpYyBpbnQgdGVncmEyMTBfdXNiMl9waHlfcG93ZXJfb2ZmKHN0cnVjdCBwaHkgKnBo eSkKPj4gIAo+PiAgCW11dGV4X2xvY2soJnBhZGN0bC0+bG9jayk7Cj4+ICAKPj4gKwlpZiAocG9y dC0+dXNiM19wb3J0X2Zha2UgIT0gLTEpIHsKPj4gKwkJdmFsdWUgPSBwYWRjdGxfcmVhZGwocGFk Y3RsLCBYVVNCX1BBRENUTF9FTFBHX1BST0dSQU0xKTsKPj4gKwkJdmFsdWUgfD0gWFVTQl9QQURD VExfRUxQR19QUk9HUkFNMV9TU1BYX0VMUEdfQ0xBTVBfRU5fRUFSTFkoCj4+ICsJCQkJCXBvcnQt PnVzYjNfcG9ydF9mYWtlKTsKPj4gKwkJcGFkY3RsX3dyaXRlbChwYWRjdGwsIHZhbHVlLCBYVVNC X1BBRENUTF9FTFBHX1BST0dSQU0xKTsKPj4gKwo+PiArCQl1c2xlZXBfcmFuZ2UoMTAwLCAyMDAp Owo+PiArCj4+ICsJCXZhbHVlID0gcGFkY3RsX3JlYWRsKHBhZGN0bCwgWFVTQl9QQURDVExfRUxQ R19QUk9HUkFNMSk7Cj4+ICsJCXZhbHVlIHw9IFhVU0JfUEFEQ1RMX0VMUEdfUFJPR1JBTTFfU1NQ WF9FTFBHX0NMQU1QX0VOKAo+PiArCQkJCQlwb3J0LT51c2IzX3BvcnRfZmFrZSk7Cj4+ICsJCXBh ZGN0bF93cml0ZWwocGFkY3RsLCB2YWx1ZSwgWFVTQl9QQURDVExfRUxQR19QUk9HUkFNMSk7Cj4+ ICsKPj4gKwkJdXNsZWVwX3JhbmdlKDI1MCwgMzUwKTsKPj4gKwo+PiArCQl2YWx1ZSA9IHBhZGN0 bF9yZWFkbChwYWRjdGwsIFhVU0JfUEFEQ1RMX0VMUEdfUFJPR1JBTTEpOwo+PiArCQl2YWx1ZSB8 PSBYVVNCX1BBRENUTF9FTFBHX1BST0dSQU0xX1NTUFhfRUxQR19WQ09SRV9ET1dOKAo+PiArCQkJ CQlwb3J0LT51c2IzX3BvcnRfZmFrZSk7Cj4+ICsJCXBhZGN0bF93cml0ZWwocGFkY3RsLCB2YWx1 ZSwgWFVTQl9QQURDVExfRUxQR19QUk9HUkFNMSk7Cj4+ICsKPj4gKwkJdmFsdWUgPSBwYWRjdGxf cmVhZGwocGFkY3RsLCBYVVNCX1BBRENUTF9TU19QT1JUX01BUCk7Cj4+ICsJCXZhbHVlICY9IH5Y VVNCX1BBRENUTF9TU19QT1JUX01BUF9QT1JUWF9NQVBfTUFTSygKPj4gKwkJCQkJcG9ydC0+dXNi M19wb3J0X2Zha2UpOwo+PiArCQl2YWx1ZSB8PSBYVVNCX1BBRENUTF9TU19QT1JUX01BUF9QT1JU WF9NQVBfTUFTSygKPj4gKwkJCQkJcG9ydC0+dXNiM19wb3J0X2Zha2UpOwo+PiArCQlwYWRjdGxf d3JpdGVsKHBhZGN0bCwgdmFsdWUsIFhVU0JfUEFEQ1RMX1NTX1BPUlRfTUFQKTsKPj4gKwl9Cj4+ ICsKPj4gIAlpZiAoV0FSTl9PTihwYWQtPmVuYWJsZSA9PSAwKSkKPj4gIAkJZ290byBvdXQ7Cj4+ ICAKPj4gQEAgLTE5NTMsNiArMjE5MSw1NSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3JhX3h1 c2JfcG9ydF9vcHMgdGVncmEyMTBfdXNiM19wb3J0X29wcyA9IHsKPj4gIAkubWFwID0gdGVncmEy MTBfdXNiM19wb3J0X21hcCwKPj4gIH07Cj4+ICAKPj4gK3N0YXRpYyBpbnQgdGVncmEyMTBfeHVz Yl9wYWRjdGxfdmJ1c19vdmVycmlkZShzdHJ1Y3QgdGVncmFfeHVzYl9wYWRjdGwgKnBhZGN0bCwK Pj4gKwkJCQkJICAgICAgYm9vbCBzZXQpCj4+ICt7Cj4+ICsJdTMyIHJlZzsKPj4gKwo+PiArCWRl dl9kYmcocGFkY3RsLT5kZXYsICIlcyB2YnVzIG92ZXJyaWRlXG4iLCBzZXQgPyAic2V0IiA6ICJj bGVhciIpOwo+PiArCj4+ICsJcmVnID0gcGFkY3RsX3JlYWRsKHBhZGN0bCwgWFVTQl9QQURDVExf VVNCMl9WQlVTX0lEKTsKPj4gKwlpZiAoc2V0KSB7Cj4+ICsJCXJlZyB8PSBYVVNCX1BBRENUTF9V U0IyX1ZCVVNfSURfT1ZFUlJJREVfVkJVU19PTjsKPj4gKwkJcmVnICY9IH4oWFVTQl9QQURDVExf VVNCMl9WQlVTX0lEX09WRVJSSURFX01BU0sgPDwKPj4gKwkJCSAgIFhVU0JfUEFEQ1RMX1VTQjJf VkJVU19JRF9PVkVSUklERV9TSElGVCk7Cj4+ICsJCXJlZyB8PSBYVVNCX1BBRENUTF9VU0IyX1ZC VVNfSURfT1ZFUlJJREVfVkFMIDw8Cj4+ICsJCQkgWFVTQl9QQURDVExfVVNCMl9WQlVTX0lEX09W RVJSSURFX1NISUZUOwo+PiArCX0gZWxzZQo+PiArCQlyZWcgJj0gflhVU0JfUEFEQ1RMX1VTQjJf VkJVU19JRF9PVkVSUklERV9WQlVTX09OOwo+PiArCXBhZGN0bF93cml0ZWwocGFkY3RsLCByZWcs IFhVU0JfUEFEQ1RMX1VTQjJfVkJVU19JRCk7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPiAK PiBJdCdkIGJlIGdvb2QgdG8gYnJpZWZseSBleHBsYWluIGluIGEgY29tbWVudCAob3IgdGhlIGNv bW1pdCBtZXNzYWdlKQo+IHdoYXQgZXhhY3RseSB0aGlzIGRvZXMgYW5kIHdoYXQgaXQncyB1c2Vk IGZvci4KPiAKCnZidXNfb3ZlcnJpZGUgc2V0dGluZyBpcyBuZWVkZWQgdG8gaW5mb3JtIGNvbnRy b2xsZXIgd2hvIGRyaXZlcyB2YnVzLgpGb3IgZGV2aWNlIG1vZGUsIGdhZGdldCBkcml2ZXIgbmVl ZHMgdG8gc2V0IG92ZXJyaWRlIHNvIHRoYXQgdmJ1cyBpcwpkZXRlY3RlZCBvbiBjb25uZWN0ZWQg aG9zdC4KV2lsbCBBZGQgdGhlIGNvbW1lbnQgYWNjb3JkaW5nbHkKCj4+ICsKPj4gK3N0YXRpYyBp bnQgdGVncmEyMTBfdXRtaV9wb3J0X3Jlc2V0X3F1aXJrKHN0cnVjdCBwaHkgKnBoeSkKPj4gK3sK Pj4gKwlzdHJ1Y3QgdGVncmFfeHVzYl9wYWRjdGwgKnBhZGN0bDsKPj4gKwlzdHJ1Y3QgdGVncmFf eHVzYl9sYW5lICpsYW5lOwo+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4gKwl1MzIgcmVnOwo+ PiArCj4+ICsJaWYgKCFwaHkpCj4+ICsJCXJldHVybiAtRU5PREVWOwo+PiArCj4+ICsJbGFuZSA9 IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwo+PiArCXBhZGN0bCA9IGxhbmUtPnBhZC0+cGFkY3RsOwo+ PiArCWRldiA9IHBhZGN0bC0+ZGV2Owo+PiArCj4+ICsJcmVnID0gcGFkY3RsX3JlYWRsKHBhZGN0 bCwKPj4gKwkJCQlYVVNCX1BBRENUTF9VU0IyX0JBVFRFUllfQ0hSR19PVEdQQURYX0NUTDAoMCkp Owo+PiArCWRldl9kYmcoZGV2LCAiQkFUVEVSWV9DSFJHX09UR1BBRFhfQ1RMMCgwKTogMHgleFxu IiwgcmVnKTsKPj4gKwo+PiArCWlmICgocmVnICYgWFVTQl9QQURDVExfVVNCMl9CQVRURVJZX0NI UkdfT1RHUEFEX0NUTDBfWklQKSB8fAo+PiArCSAgICAocmVnICYgWFVTQl9QQURDVExfVVNCMl9C QVRURVJZX0NIUkdfT1RHUEFEX0NUTDBfWklOKSkgewo+PiArCQlkZXZfZGJnKGRldiwgIlRvZ2ds ZSB2YnVzXG4iKTsKPj4gKwkJdGVncmEyMTBfeHVzYl9wYWRjdGxfdmJ1c19vdmVycmlkZShwYWRj dGwsIGZhbHNlKTsKPj4gKwkJdGVncmEyMTBfeHVzYl9wYWRjdGxfdmJ1c19vdmVycmlkZShwYWRj dGwsIHRydWUpOwo+PiArCQlyZXR1cm4gMTsKPj4gKwl9Cj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4g Cj4gVGhpcyB1c2VzIHRoZSBWQlVTIG92ZXJyaWRlIG1lY2hhbmlzbSwgYnV0IGF0IHRoZSBzYW1l IHRpbWUgeW91IGFsc28KPiBleHBvcnQgaXQgdG8gbWFrZSB1c2Ugb2YgaXQgaW4gdGhlIFhVREMg ZHJpdmVyIChwcmVzdW1hYmx5KS4gV2h5IGhhdmUKPiB0d28gd2F5cyBvZiBydW5uaW5nIHRoaXMg Y29kZT8gQWdhaW4sIGFuIGV4cGxhbmF0aW9uIG9mIHdoYXQgZXhhY3RseQo+IHRoaXMgaXMgdXNl ZCBmb3Igd291bGQgY2xhcmlmeS4KPiAKClRoaXMgaXMgYSByZXNldCBRdWlyayBleGVjdXRlZCBi eSBYVURDIGRyaXZlciBvbiBQTEMgaW5hY3RpdmUgY2FzZSBhbmQgaXMKcGxhbm5lZCB0byBiZSBk b25lIG9ubHkgaWYgYml0cyBaSU4gb3IgWklQIGFyZSBzZXQgaW4gWFVTQl9QQURDVExfVVNCMl9C QVRURVJZX0NIUkdfT1RHUEFEWF9DVEwwKDApCnJlZ2lzdGVyLgpXaWxsIGFkZCBjb21tZW50IGFj Y29yZGluZ2x5Cgo+PiAgc3RhdGljIGludAo+PiAgdGVncmEyMTBfeHVzYl9yZWFkX2Z1c2VfY2Fs aWJyYXRpb24oc3RydWN0IHRlZ3JhMjEwX3h1c2JfZnVzZV9jYWxpYnJhdGlvbiAqZnVzZSkKPj4g IHsKPj4gQEAgLTIwMTUsNiArMjMwMiwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3JhX3h1 c2JfcGFkY3RsX29wcyB0ZWdyYTIxMF94dXNiX3BhZGN0bF9vcHMgPSB7Cj4+ICAJLnJlbW92ZSA9 IHRlZ3JhMjEwX3h1c2JfcGFkY3RsX3JlbW92ZSwKPj4gIAkudXNiM19zZXRfbGZwc19kZXRlY3Qg PSB0ZWdyYTIxMF91c2IzX3NldF9sZnBzX2RldGVjdCwKPj4gIAkuaHNpY19zZXRfaWRsZSA9IHRl Z3JhMjEwX2hzaWNfc2V0X2lkbGUsCj4+ICsJLnZidXNfb3ZlcnJpZGUgPSB0ZWdyYTIxMF94dXNi X3BhZGN0bF92YnVzX292ZXJyaWRlLAo+PiArCS51dG1pX3BhZF9wb3dlcl9vbiA9IHRlZ3JhMjEw X3V0bWlfcGFkX3Bvd2VyX29uLAo+PiArCS51dG1pX3BhZF9wb3dlcl9kb3duID0gdGVncmEyMTBf dXRtaV9wYWRfcG93ZXJfZG93biwKPj4gKwkudXRtaV9wb3J0X3Jlc2V0X3F1aXJrID0gdGVncmEy MTBfdXRtaV9wb3J0X3Jlc2V0X3F1aXJrLAo+PiAgfTsKPj4gIAo+PiAgY29uc3Qgc3RydWN0IHRl Z3JhX3h1c2JfcGFkY3RsX3NvYyB0ZWdyYTIxMF94dXNiX3BhZGN0bF9zb2MgPSB7Cj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL3BoeS90ZWdyYS94dXNiLmMgYi9kcml2ZXJzL3BoeS90ZWdyYS94dXNi LmMKPj4gaW5kZXggNWIzYjg4Ni4uOWEyNWI1ZCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9waHkv dGVncmEveHVzYi5jCj4+ICsrKyBiL2RyaXZlcnMvcGh5L3RlZ3JhL3h1c2IuYwo+PiBAQCAtMSw1 ICsxLDUgQEAKPj4gIC8qCj4+IC0gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgTlZJRElBIENP UlBPUkFUSU9OLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KPj4gKyAqIENvcHlyaWdodCAoYykgMjAx NC0yMDE4LCBOVklESUEgQ09SUE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVkLgo+PiAgICoK Pj4gICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cj4+ICAgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlv bnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAo+PiBAQCAtNTQ2LDkgKzU0Niwy NiBAQCBzdGF0aWMgaW50IHRlZ3JhX3h1c2JfdXNiMl9wb3J0X3BhcnNlX2R0KHN0cnVjdCB0ZWdy YV94dXNiX3VzYjJfcG9ydCAqdXNiMikKPj4gIHsKPj4gIAlzdHJ1Y3QgdGVncmFfeHVzYl9wb3J0 ICpwb3J0ID0gJnVzYjItPmJhc2U7Cj4+ICAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBvcnQt PmRldi5vZl9ub2RlOwo+PiArCWNvbnN0IGNoYXIgKnByb3Bfc3RyaW5nOwo+PiArCXUzMiB2YWx1 ZTsKPj4gIAo+PiAgCXVzYjItPmludGVybmFsID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAi bnZpZGlhLGludGVybmFsIik7Cj4+ICAKPj4gKwl1c2IyLT5wb3J0X2NhcCA9IFVTQl9QT1JUX0RJ U0FCTEVEOyAvKiBkZWZhdWx0ICovCj4+ICsJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhu cCwgIm1vZGUiLCAmcHJvcF9zdHJpbmcpKSB7Cj4+ICsJCWlmICghc3RyY21wKCJob3N0IiwgcHJv cF9zdHJpbmcpKQo+PiArCQkJdXNiMi0+cG9ydF9jYXAgPSBVU0JfSE9TVF9DQVA7Cj4+ICsJCWVs c2UgaWYgKCFzdHJjbXAoImRldmljZSIsIHByb3Bfc3RyaW5nKSkKPj4gKwkJCXVzYjItPnBvcnRf Y2FwID0gVVNCX0RFVklDRV9DQVA7Cj4+ICsJCWVsc2UgaWYgKCFzdHJjbXAoIm90ZyIsIHByb3Bf c3RyaW5nKSkKPj4gKwkJCXVzYjItPnBvcnRfY2FwID0gVVNCX09UR19DQVA7Cj4+ICsJfQo+IAo+ IFRoaXMgc2VlbXMgdG8gZnVsZmlsbCB0aGUgc2FtZSBwdXJwb3NlIGFzIHRoaXM6Cj4gCj4gCWh0 dHA6Ly9wYXRjaHdvcmsub3psYWJzLm9yZy9wYXRjaC8xMDMxMDE0Lwo+IAo+IEFsdGhvdWdoLCBs b29raW5nIG1vcmUgY2xvc2VseSBhdCB0aGF0LCB3ZSBjYW4gcHJvYmFibHkganVzdCB0aGUKPiB1 c2JfZ2V0X2RyX21vZGUoKSBoZWxwZXIgZm9yIHRoaXMuIFRoZXJlJ3MgYWxzbyBhIHN0YW5kYXJk IHByb3BlcnR5IGZvcgo+IHRoZSBkdWFsLXJvbGUgbW9kZSwgbmFtZWQgImRyX21vZGUiLCBhbGJl aXQgdGhlIG5hbWUgZG9lcyBub3Qgc2VlbSB0bwo+IG1hdGNoIHN0YW5kYXJkIGJlc3QgcHJhY3Rp Y2VzLiBTZWVtcyBsaWtlIGl0IHdvdWxkIHN0aWxsIG1ha2Ugc2Vuc2UgdG8KPiBtb3ZlIHRvIHRo YXQgc3RhbmRhcmQgcHJvcGVydHkgbmFtZS4KPiAKClllcywgdGhpcyBwYXJ0IG9mIGNoYW5nZSBp cyB3aGF0IGJlbG93IHBhdGNoIGlzIGRvaW5nCglodHRwOi8vcGF0Y2h3b3JrLm96bGFicy5vcmcv cGF0Y2gvMTAzMTAxNC8Kdy5yLnQgdXNpbmcgdXNiX2dldF9kcl9tb2RlKCksIGl0IHBhcnNlcyBk cl9tb2RlIHN0cmluZyBpZiBwcmVzZW50IGluIGZ3bm9kZQpCdXQgaW4gb3VyIGNhc2UsIHdlIGhh dmUgbW9kZSBwYXJ0IG9mIHBvcnQgc2V0dGluZyBhbmQgaXMgbm90IGlubGluZSB3aXRoCmV4cGVj dGF0aW9uIG9mIEFQSSB1c2JfZ2V0X2RyX21vZGUoKS4gSSBiZWxpZXZlIHdlIG5lZWQgdG8gc3Rh eSB3aXRoIGltcGxlbWVudGF0aW9uCmFzIGluIGFib3ZlIGxpbmsuCgpDb25zaWRlcmluZyBjdXJy ZW50IHBhdGNoIGFuZCBjaGFuZ2VzIGluIHBhdGNoLzEwMzEwMTQvIGFyZSBzYW1lLApwbGVhc2Ug c3VnZ2VzdCwgaWYgY2hhbmdlcyB3LnIudCBtb2RlIHJlYWRpbmcgd2lsbCBiZSB0YWtlbiBhcyBw YXJ0IG9mCnBhdGNoLzEwMzEwMTQvIG9yIHNoYWxsIGkgY29udGludWUgaW4gY3VycmVudCBwYXRj aCBzZXJpZXMKCj4+ICsJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgIm52aWRpYSx1c2Iz LXBvcnQtZmFrZSIsICZ2YWx1ZSkpCj4+ICsJCXVzYjItPnVzYjNfcG9ydF9mYWtlID0gdmFsdWU7 Cj4+ICsJZWxzZQo+PiArCQl1c2IyLT51c2IzX3BvcnRfZmFrZSA9IC0xOyAvKiBkZWZhdWx0ICov Cj4+ICsKPj4gIAl1c2IyLT5zdXBwbHkgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoJnBvcnQtPmRldiwg InZidXMiKTsKPj4gIAlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKHVzYjItPnN1cHBseSk7Cj4+ICB9 Cj4+IEBAIC05NzYsNyArOTkzLDcgQEAgaW50IHRlZ3JhX3h1c2JfcGFkY3RsX3VzYjNfc2F2ZV9j b250ZXh0KHN0cnVjdCB0ZWdyYV94dXNiX3BhZGN0bCAqcGFkY3RsLAo+PiAgCWlmIChwYWRjdGwt PnNvYy0+b3BzLT51c2IzX3NhdmVfY29udGV4dCkKPj4gIAkJcmV0dXJuIHBhZGN0bC0+c29jLT5v cHMtPnVzYjNfc2F2ZV9jb250ZXh0KHBhZGN0bCwgcG9ydCk7Cj4+ICAKPj4gLQlyZXR1cm4gLUVO T1NZUzsKPj4gKwlyZXR1cm4gLUVJTlZBTDsKPiAKPiBXaHkgY2hhbmdlIHRoZSBlcnJvciBjb2Rl IGZvciB0aGVzZT8gRUlOVkFMIGhhcyBhIHByZXR0eSBzdGFuZGFyZAo+IG1lYW5pbmcgKCJpbnZh bGlkIGFyZ3VtZW50IikgYW5kIGRvZXNuJ3QgbWF0Y2ggdGhlIGVycm9yIGNvbmRpdGlvbiBhdAo+ IGFsbC4gRU5PU1lTIHdhcyBjaG9zZW4gaGVyZSBiZWNhdXNlIGl0J3MgdGhlIGNsb3Nlc3QgdGhl cmUgaXMgdG8gIm5vdAo+IGltcGxlbWVudGVkIi4gRU5PU1lTIGlzIHNvbWV3aGF0IHNwZWNpYWwg aW4gcmVsYXRpb24gdG8gc3lzY2FsbHMsIGJ1dAo+IHNpbmNlIHdlIG5ldmVyIHByb3BhZ2F0ZSBl cnJvcnMgZnJvbSBoZXJlIHRvIHVzZXJzcGFjZSwgaXQncyBzYWZlIHRvCj4gdXNlLgo+IAoKRU5P U1lTIG9ubHkgYWRkIGNvcnJlY3QgZXJyb3IgaW5mby4Kd2lsbCByZXZlcnQgY2hhbmdlIHRvIHJl dHVybiB0eXBlIGFuZCBhbHNvIHVzZSBFTk9TWVMgZm9yIG5ldyBleHBvcnQgZnVuY3Rpb25zCgo+ PiAgfQo+PiAgRVhQT1JUX1NZTUJPTF9HUEwodGVncmFfeHVzYl9wYWRjdGxfdXNiM19zYXZlX2Nv bnRleHQpOwo+PiAgCj4+IEBAIC05ODYsNyArMTAwMyw3IEBAIGludCB0ZWdyYV94dXNiX3BhZGN0 bF9oc2ljX3NldF9pZGxlKHN0cnVjdCB0ZWdyYV94dXNiX3BhZGN0bCAqcGFkY3RsLAo+PiAgCWlm IChwYWRjdGwtPnNvYy0+b3BzLT5oc2ljX3NldF9pZGxlKQo+PiAgCQlyZXR1cm4gcGFkY3RsLT5z b2MtPm9wcy0+aHNpY19zZXRfaWRsZShwYWRjdGwsIHBvcnQsIGlkbGUpOwo+PiAgCj4+IC0JcmV0 dXJuIC1FTk9TWVM7Cj4+ICsJcmV0dXJuIC1FSU5WQUw7Cj4+ICB9Cj4+ICBFWFBPUlRfU1lNQk9M X0dQTCh0ZWdyYV94dXNiX3BhZGN0bF9oc2ljX3NldF9pZGxlKTsKPj4gIAo+PiBAQCAtOTk3LDEw ICsxMDE0LDYwIEBAIGludCB0ZWdyYV94dXNiX3BhZGN0bF91c2IzX3NldF9sZnBzX2RldGVjdChz dHJ1Y3QgdGVncmFfeHVzYl9wYWRjdGwgKnBhZGN0bCwKPj4gIAkJcmV0dXJuIHBhZGN0bC0+c29j LT5vcHMtPnVzYjNfc2V0X2xmcHNfZGV0ZWN0KHBhZGN0bCwgcG9ydCwKPj4gIAkJCQkJCQkgICAg ICBlbmFibGUpOwo+PiAgCj4+IC0JcmV0dXJuIC1FTk9TWVM7Cj4+ICsJcmV0dXJuIC1FSU5WQUw7 Cj4+ICB9Cj4+ICBFWFBPUlRfU1lNQk9MX0dQTCh0ZWdyYV94dXNiX3BhZGN0bF91c2IzX3NldF9s ZnBzX2RldGVjdCk7Cj4+ICAKPj4gK2ludCB0ZWdyYV94dXNiX3BhZGN0bF9zZXRfdmJ1c19vdmVy cmlkZShzdHJ1Y3QgdGVncmFfeHVzYl9wYWRjdGwgKnBhZGN0bCkKPj4gK3sKPj4gKwlpZiAocGFk Y3RsLT5zb2MtPm9wcy0+dmJ1c19vdmVycmlkZSkKPj4gKwkJcmV0dXJuIHBhZGN0bC0+c29jLT5v cHMtPnZidXNfb3ZlcnJpZGUocGFkY3RsLCB0cnVlKTsKPj4gKwo+PiArCXJldHVybiAtRUlOVkFM Owo+IAo+IEl0J2QgYmUgYmVzdCB0byBzdGljayB0byB0aGUgLUVOT1NZUyBlcnJvciBjb2RlIGhl cmUuCj4gCgp3aWxsIGRvCgo+PiArdm9pZCB0ZWdyYV9waHlfeHVzYl91dG1pX3BhZF9wb3dlcl9v bihzdHJ1Y3QgcGh5ICpwaHkpCj4+ICt7Cj4+ICsJc3RydWN0IHRlZ3JhX3h1c2JfbGFuZSAqbGFu ZSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwo+PiArCXN0cnVjdCB0ZWdyYV94dXNiX3BhZGN0bCAq cGFkY3RsID0gbGFuZS0+cGFkLT5wYWRjdGw7Cj4+ICsKPj4gKwlpZiAocGFkY3RsLT5zb2MtPm9w cy0+dXRtaV9wYWRfcG93ZXJfb24pCj4+ICsJCXBhZGN0bC0+c29jLT5vcHMtPnV0bWlfcGFkX3Bv d2VyX29uKHBoeSk7Cj4+ICt9Cj4+ICtFWFBPUlRfU1lNQk9MX0dQTCh0ZWdyYV9waHlfeHVzYl91 dG1pX3BhZF9wb3dlcl9vbik7Cj4+ICsKPj4gK3ZvaWQgdGVncmFfcGh5X3h1c2JfdXRtaV9wYWRf cG93ZXJfZG93bihzdHJ1Y3QgcGh5ICpwaHkpCj4+ICt7Cj4+ICsJc3RydWN0IHRlZ3JhX3h1c2Jf bGFuZSAqbGFuZSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwo+PiArCXN0cnVjdCB0ZWdyYV94dXNi X3BhZGN0bCAqcGFkY3RsID0gbGFuZS0+cGFkLT5wYWRjdGw7Cj4+ICsKPj4gKwlpZiAocGFkY3Rs LT5zb2MtPm9wcy0+dXRtaV9wYWRfcG93ZXJfZG93bikKPj4gKwkJcGFkY3RsLT5zb2MtPm9wcy0+ dXRtaV9wYWRfcG93ZXJfZG93bihwaHkpOwo+PiArfQo+PiArRVhQT1JUX1NZTUJPTF9HUEwodGVn cmFfcGh5X3h1c2JfdXRtaV9wYWRfcG93ZXJfZG93bik7Cj4gCj4gSSBhbHJlYWR5IGJyaWVmbHkg dG91Y2hlZCBvbiB0aGlzIGVhcmxpZXIsIGJ1IHdoeSBkbyB0aGVzZSBoYXZlIHRvIGJlCj4gZXhw b3J0ZWQgZnVuY3Rpb25zPyBDYW4ndCB0aGVzZSBzaW1wbHkgYmUgYWJzdHJhY3RlZCBiZWhpbmQg dGhlIFBIWQo+IGFic3RyYWN0aW9uPwo+IAoKeWVzLCB0aGV5IGNhbiBiZSBwYXJ0IG9mIHBoeV9w b3dlcl94eHgoKS4gV2lsbCByZW1vdmUKdGVncmFfcGh5X3h1c2JfdXRtaV9wYWRfcG93ZXJfeHgg ZXhwb3J0IGZ1bmN0aW9ucwoKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3RlZ3JhL3h1c2Iu aCBiL2RyaXZlcnMvcGh5L3RlZ3JhL3h1c2IuaAo+PiBpbmRleCBiNDlkYmMzLi43NGFjYzA4IDEw MDY0NAo+PiAtLS0gYS9kcml2ZXJzL3BoeS90ZWdyYS94dXNiLmgKPj4gKysrIGIvZHJpdmVycy9w aHkvdGVncmEveHVzYi5oCj4+IEBAIC0xLDUgKzEsNSBAQAo+PiAgLyoKPj4gLSAqIENvcHlyaWdo dCAoYykgMjAxNC0yMDE1LCBOVklESUEgQ09SUE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVk Lgo+PiArICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTgsIE5WSURJQSBDT1JQT1JBVElPTi4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCj4+ICAgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEdvb2dsZSBJbmMu Cj4+ICAgKgo+PiAgICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKPj4gQEAgLTU4LDYgKzU4LDcgQEAgc3RydWN0 IHRlZ3JhX3h1c2JfdXNiMl9sYW5lIHsKPj4gIAlzdHJ1Y3QgdGVncmFfeHVzYl9sYW5lIGJhc2U7 Cj4+ICAKPj4gIAl1MzIgaHNfY3Vycl9sZXZlbF9vZmZzZXQ7Cj4+ICsJYm9vbCBwb3dlcmVkX29u Owo+PiAgfTsKPj4gIAo+PiAgc3RhdGljIGlubGluZSBzdHJ1Y3QgdGVncmFfeHVzYl91c2IyX2xh bmUgKgo+PiBAQCAtMjY3LDExICsyNjgsMjAgQEAgc3RydWN0IHRlZ3JhX3h1c2JfcG9ydCAqCj4+ ICB0ZWdyYV94dXNiX2ZpbmRfcG9ydChzdHJ1Y3QgdGVncmFfeHVzYl9wYWRjdGwgKnBhZGN0bCwg Y29uc3QgY2hhciAqdHlwZSwKPj4gIAkJICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpOwo+PiAgCj4+ ICtlbnVtIHRlZ3JhX3h1c2JfdXNiX3BvcnRfY2FwIHsKPj4gKwlVU0JfUE9SVF9ESVNBQkxFRCA9 IDAsCj4+ICsJVVNCX0hPU1RfQ0FQLAo+PiArCVVTQl9ERVZJQ0VfQ0FQLAo+PiArCVVTQl9PVEdf Q0FQLAo+PiArfTsKPiAKPiBNYXliZSB1c2UgZW51bSB1c2JfZHJfbW9kZSBmcm9tIGluY2x1ZGUv bGludXgvdXNiL290Zy5oIGluc3RlYWQgb2YKPiBlc3NlbnRpYWxseSBkdXBsaWNhdGluZyBpdD8K PiAKClllcywgaXRzIHRoZSBzYW1lLCB3aWxsIHJlLXVzZSB1c2JfZHJfbW9kZQoKPj4gKwo+PiAg c3RydWN0IHRlZ3JhX3h1c2JfdXNiMl9wb3J0IHsKPj4gIAlzdHJ1Y3QgdGVncmFfeHVzYl9wb3J0 IGJhc2U7Cj4+ICAKPj4gIAlzdHJ1Y3QgcmVndWxhdG9yICpzdXBwbHk7Cj4+ICAJYm9vbCBpbnRl cm5hbDsKPj4gKwllbnVtIHRlZ3JhX3h1c2JfdXNiX3BvcnRfY2FwIHBvcnRfY2FwOwo+PiArCWlu dCB1c2IzX3BvcnRfZmFrZTsKPj4gIH07Cj4+ICAKPj4gIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRl Z3JhX3h1c2JfdXNiMl9wb3J0ICoKPj4gQEAgLTM1Myw2ICszNjMsMTAgQEAgc3RydWN0IHRlZ3Jh X3h1c2JfcGFkY3RsX29wcyB7Cj4+ICAJCQkgICAgIHVuc2lnbmVkIGludCBpbmRleCwgYm9vbCBp ZGxlKTsKPj4gIAlpbnQgKCp1c2IzX3NldF9sZnBzX2RldGVjdCkoc3RydWN0IHRlZ3JhX3h1c2Jf cGFkY3RsICpwYWRjdGwsCj4+ICAJCQkJICAgIHVuc2lnbmVkIGludCBpbmRleCwgYm9vbCBlbmFi bGUpOwo+PiArCWludCAoKnZidXNfb3ZlcnJpZGUpKHN0cnVjdCB0ZWdyYV94dXNiX3BhZGN0bCAq cGFkY3RsLCBib29sIHNldCk7Cj4+ICsJdm9pZCAoKnV0bWlfcGFkX3Bvd2VyX29uKShzdHJ1Y3Qg cGh5ICpwaHkpOwo+PiArCXZvaWQgKCp1dG1pX3BhZF9wb3dlcl9kb3duKShzdHJ1Y3QgcGh5ICpw aHkpOwo+PiArCWludCAoKnV0bWlfcG9ydF9yZXNldF9xdWlyaykoc3RydWN0IHBoeSAqcGh5KTsK Pj4gIH07Cj4+ICAKPj4gIHN0cnVjdCB0ZWdyYV94dXNiX3BhZGN0bF9zb2Mgewo+PiBkaWZmIC0t Z2l0IGEvaW5jbHVkZS9saW51eC9waHkvdGVncmEveHVzYi5oIGIvaW5jbHVkZS9saW51eC9waHkv dGVncmEveHVzYi5oCj4+IGluZGV4IDhlMWE1N2EuLjE0M2FmNDQgMTAwNjQ0Cj4+IC0tLSBhL2lu Y2x1ZGUvbGludXgvcGh5L3RlZ3JhL3h1c2IuaAo+PiArKysgYi9pbmNsdWRlL2xpbnV4L3BoeS90 ZWdyYS94dXNiLmgKPj4gQEAgLTEsNSArMSw1IEBACj4+ICAvKgo+PiAtICogQ29weXJpZ2h0IChj KSAyMDE2LCBOVklESUEgQ09SUE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVkLgo+PiArICog Q29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIE5WSURJQSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCj4+ICAgKgo+PiAgICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKPj4gICAqIHVuZGVyIHRoZSB0 ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCj4+ IEBAIC0yNiw1ICsyNiwxMCBAQCBpbnQgdGVncmFfeHVzYl9wYWRjdGxfaHNpY19zZXRfaWRsZShz dHJ1Y3QgdGVncmFfeHVzYl9wYWRjdGwgKnBhZGN0bCwKPj4gIAkJCQkgICAgdW5zaWduZWQgaW50 IHBvcnQsIGJvb2wgaWRsZSk7Cj4+ICBpbnQgdGVncmFfeHVzYl9wYWRjdGxfdXNiM19zZXRfbGZw c19kZXRlY3Qoc3RydWN0IHRlZ3JhX3h1c2JfcGFkY3RsICpwYWRjdGwsCj4+ICAJCQkJCSAgIHVu c2lnbmVkIGludCBwb3J0LCBib29sIGVuYWJsZSk7Cj4+ICtpbnQgdGVncmFfeHVzYl9wYWRjdGxf c2V0X3ZidXNfb3ZlcnJpZGUoc3RydWN0IHRlZ3JhX3h1c2JfcGFkY3RsICpwYWRjdGwpOwo+PiAr aW50IHRlZ3JhX3h1c2JfcGFkY3RsX2NsZWFyX3ZidXNfb3ZlcnJpZGUoc3RydWN0IHRlZ3JhX3h1 c2JfcGFkY3RsICpwYWRjdGwpOwo+PiAgCj4+ICt2b2lkIHRlZ3JhX3BoeV94dXNiX3V0bWlfcGFk X3Bvd2VyX29uKHN0cnVjdCBwaHkgKnBoeSk7Cj4+ICt2b2lkIHRlZ3JhX3BoeV94dXNiX3V0bWlf cGFkX3Bvd2VyX2Rvd24oc3RydWN0IHBoeSAqcGh5KTsKPj4gK2ludCB0ZWdyYV9waHlfeHVzYl91 dG1pX3BvcnRfcmVzZXRfcXVpcmsoc3RydWN0IHBoeSAqcGh5KTsKPiAKPiBXZSBhbHJlYWR5IGhh dmUgbW9yZSBjdXN0b20gQVBJcyBoZXJlIHRoYW4gSSdkIGxpa2UsIHNvIEkgcmVhbGx5IHdhbnQg dG8KPiBtYWtlIHN1cmUgdGhhdCB3ZSdyZSBub3QgYWRkaW5nIHRvIHRoZXNlIGlmIG5vdCBhYnNv bHV0ZWx5IG5lY2Vzc2FyeS4KPiAKPiBBcmUgdGhlcmUgYW55IHJlYXNvbnMgd2h5IHdlIGNhbid0 IHNvbWVob3cgaGlkZSB0aGVzZSBiZWhpbmQgdGhlCj4gZXhpc3RpbmcgUEhZIGZyYW1ld29yaz8K PiAKPiB0ZWdyYV9waHlfeHVzYl91dG1pX3BvcnRfcmVzZXRfcXVpcmsoKSBzZWVtcyBsaWtlIHNv bWV0aGluZyB0aGF0IHdlIG1heQo+IGJlIGFibGUgdG8gaW1wbGVtZW50IHVzaW5nIHRoZSBwaHlf b3BzLT5yZXNldCgpIGNhbGxiYWNrLiBUaGUgcG93ZXJfb24oKQo+IGFuZCBwb3dlcl9vZmYoKSBm b3IgdGhlIFVUTUkgcGFkIHNlZW0gbGlrZSB0aGV5IHNob3VsZCBiZSBqdXN0IHBhcnQgb2YKPiB0 aGUgcmVndWxhciBwYWQgLT5wb3dlcl9vbigpIGFuZCAtPnBvd2VyX29mZigpIGNhbGxiYWNrIGlt cGxlbWVudGF0aW9ucwo+IChwZXJoYXBzIHRoaXMgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGludHJv ZHVjZSBhbm90aGVyIHBhZCBmb3IgdGhpcz8pLgo+IAoKQXMgbWVudGlvbmVkIGVhcmxpZXIsIHdp bGwgbW92ZSB1dG1pIHBhZCBhbmQgdXRtaSBiaWFzIHBhZCBwb3dlciBmdW5jdGlvbgpjYW4gYmUg dG8gcGh5IHBvd2VyIGZ1bmN0aW9ucy4KCnRlZ3JhX3BoeV94dXNiX3V0bWlfcG9ydF9yZXNldF9x dWlyaygpIGRvZXMgYSB2YnVzIG92ZXJyaWRlIG9ubHkgb24gYSBzcGVjaWZpYwpjb25kaXRpb24s IHNvIGl0IGNhbm5vdCBiZSBkaXJlY3QgcmVwbGFjZW1lbnQgb2YgcGh5X29wcy0+cmVzZXQuCgo+ IFNldC9jbGVhciBWQlVTIG92ZXJyaWRlIHNlZW1zIGxpa2UgbWF5YmUgc29tZXRoaW5nIHRoYXQg Y291bGQgYmUgaGlkZGVuCj4gYmVoaW5kIHBoeV9vcHMtPmNvbmZpZ3VyZSgpLiBUaGlzIGlzIGEg ZmFpcmx5IHJlY2VudCBhZGRpdGlvbiwgYnV0Cj4gc291bmRzIGxpa2Ugd2UgY291bGQgYWxzbyBw dXNoIHRoaW5ncyBsaWtlIEhTSUMgaWRsZSBhbmQgVVNCMyBMUEZTCj4gZGV0ZWN0aW9uIGludG8g dGhhdC4KPiAKQUZBSVUsIHdlIGNhbiBub3QgdXNlIHBoeV9vcHMtPmNvbmZpZ3VyZSgpLCBzaW5j ZSB0aGUgc2FtZSBoYXMgZW51bSBhcmd1bWVudApwaHlfY29uZmlndXJlX29wdHNfbWlwaV9kcGh5 LCB3aGljaCBpcyBub3QgaW5saW5lIHdpdGggbmVlZHMgb2YgdmJ1cyBvdmVycmlkZS4KQWxzbywg QVBJIGlzIG5vdCBwcmVzZW50IGluIGN1cnJlbnQga2VybmVsLgpTbyBpIGJlbGVpdmUgd2UgbmVl ZCB0byBzdGF5IHdpdGggdmJ1cyBvdmVycmlkZSBBUEksIHdoaWNoIGluc3RlYWQgb2YgMiwgd2ls bApleHBvcnQgMShhbmQgdGFrZSBhcmd1bWVudCBhcyBzZXQvY2xlYXIpIGFuZCBvdGhlciBwb3J0 X3Jlc2V0X3F1aXJrCgo+IFRoaWVycnkKPiAKCi0gTmFnYXJqdW5hCg==