From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dhinakaran Pandiyan Subject: Re: [PATCH v4 9/9] Gen-12 display can decompress surfaces compressed by the media engine. Date: Fri, 04 Oct 2019 16:20:59 -0700 Message-ID: <91d7baa077669e2aeb6afbfef5931c5093328188.camel@intel.com> References: <20190923102935.5860-10-dhinakaran.pandiyan@intel.com> <20190926105512.25818-1-dhinakaran.pandiyan@intel.com> <20191004202745.GS1869@mdroper-desk1.amr.corp.intel.com> Reply-To: dhinakaran.pandiyan@intel.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4A75C6EC35 for ; Fri, 4 Oct 2019 23:21:08 +0000 (UTC) In-Reply-To: <20191004202745.GS1869@mdroper-desk1.amr.corp.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Matt Roper Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCAyMDE5LTEwLTA0IGF0IDEzOjI3IC0wNzAwLCBNYXR0IFJvcGVyIHdyb3RlOgo+IE9u IFRodSwgU2VwIDI2LCAyMDE5IGF0IDAzOjU1OjEyQU0gLTA3MDAsIERoaW5ha2FyYW4gUGFuZGl5 YW4gd3JvdGU6Cj4gPiBEZXRlY3QgdGhlIG1vZGlmaWVyIGNvcnJlc3BvbmRpbmcgdG8gbWVkaWEg Y29tcHJlc3Npb24gdG8gZW5hYmxlCj4gPiBkaXNwbGF5IGRlY29tcHJlc3Npb24gZm9yIFlVViBh bmQgeFJHQiBwYWNrZWQgZm9ybWF0cy4gQSBuZXcgbW9kaWZpZXIgaXMKPiA+IGFkZGVkIHNvIHRo YXQgdGhlIGRyaXZlciBjYW4gZGlzdGluZ3Vpc2ggYmV0d2VlbiBtZWRpYSBhbmQgcmVuZGVyCj4g PiBjb21wcmVzc2VkIGJ1ZmZlcnMuIFVubGlrZSByZW5kZXIgZGVjb21wcmVzc2lvbiwgcGxhbmUg NiBhbmQgIHBsYW5lIDcgZG8gbm90Cj4gPiBzdXBwb3J0IG1lZGlhIGRlY29tcHJlc3Npb24uCj4g PiAKPiA+IHYyOiBGaXggY2hlY2twYXRjaCB3YXJuaW5ncyBvbiBjb2RlIHN0eWxlIChMdWNhcykK PiA+IAo+ID4gRnJvbSBESzoKPiA+IFNlcGFyYXRlIG1vZGlmaWVyIGFycmF5IGZvciBwbGFuZXMg dGhhdCBjYW5ub3QgZGVjb21wcmVzcyBtZWRpYSAoVmlsbGUpCj4gPiAKPiA+IHYzOiBTdXBwb3J0 IHBsYW5hciBmb3JtYXRzCj4gPiB2NDogU3dpdGNoIHBsYW5lIG9yZGVyCj4gPiAKPiA+IENjOiBO YW5sZXkgRyBDaGVyeSA8bmFubGV5LmcuY2hlcnlAaW50ZWwuY29tPgo+ID4gQ2M6IFZpbGxlIFN5 cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gPiBDYzogTWF0dCBSb3Bl ciA8bWF0dGhldy5kLnJvcGVyQGludGVsLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IERoaW5ha2Fy YW4gUGFuZGl5YW4gPGRoaW5ha2FyYW4ucGFuZGl5YW5AaW50ZWwuY29tPgo+ID4gU2lnbmVkLW9m Zi1ieTogTHVjYXMgRGUgTWFyY2hpIDxsdWNhcy5kZW1hcmNoaUBpbnRlbC5jb20+Cj4gPiAtLS0K PiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyAgfCAyOTAg KysrKysrKysrKysrKy0tLS0tCj4gPiAgLi4uL2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxh eV90eXBlcy5oICAgIHwgICAyICstCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9zcHJpdGUuYyAgIHwgIDU1ICsrKy0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3JlZy5oICAgICAgICAgICAgICAgfCAgIDEgKwo+ID4gIDQgZmlsZXMgY2hhbmdlZCwgMjY3IGlu c2VydGlvbnMoKyksIDgxIGRlbGV0aW9ucygtKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKPiA+IGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKPiA+IGluZGV4IDhlYTU1ZDY3NDQyYy4u ZGYzZWJhYTE2N2FiIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kaXNwbGF5LmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZGlzcGxheS5jCj4gPiBAQCAtMTg4OCw2ICsxODg4LDIyIEBAIHN0YXRpYyB2b2lkIGlu dGVsX2Rpc2FibGVfcGlwZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZQo+ID4gKm9sZF9j cnRjX3N0YXRlKQo+ID4gIAkJaW50ZWxfd2FpdF9mb3JfcGlwZV9vZmYob2xkX2NydGNfc3RhdGUp Owo+ID4gIH0KPiA+ICAKPiA+ICtib29sIGlzX2Njc19tb2RpZmllcih1NjQgbW9kaWZpZXIpCj4g PiArewo+ID4gKwlyZXR1cm4gbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VO MTJfUkNfQ0NTIHx8Cj4gPiArCSAgICAgICBtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRF9HRU4xMl9NQ19DQ1MgfHwKPiA+ICsJICAgICAgIG1vZGlmaWVyID09IEk5MTVfRk9STUFU X01PRF9ZX1RJTEVEX0NDUyB8fAo+ID4gKwkgICAgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRf TU9EX1lmX1RJTEVEX0NDUzsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGJvb2wgaXNfY2NzX3Bs YW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpCj4g PiArewo+ID4gKwlpZiAoIWlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpKQo+ID4gKwkJcmV0 dXJuIGZhbHNlOwo+ID4gKwo+ID4gKwlyZXR1cm4gY29sb3JfcGxhbmUgPj0gZmItPmZvcm1hdC0+ bnVtX3BsYW5lcyAvIDI7Cj4gPiArfQo+IAo+IFRoaXMgYXBwZWFycyB0byBjb250cmFkaWN0IHdo YXQgeW91IGluZGljYXRlZCBvbiB0aGUgbW9kaWZpZXIgcGF0Y2g6Cj4gCj4gICArICogWS10aWxl IHdpZHRocy4gRm9yIHNlbWktcGxhbmFyIGZvcm1hdHMgbGlrZSBOVjEyLCBDQ1MgcGxhbmUgZm9s bG93cyB0aGUKPiAgICsgKiBZIGFuZCBVViBwbGFuZXMgaS5lLiwgcGxhbmVzIDAgYW5kIDIgYXJl IHVzZWQgZm9yIFkgYW5kIFVWIHN1cmZhY2VzLAo+ICAgKyAqIHBsYW5lcyAxIGFuZCAzIGZvciB0 aGUgcmVzcGVjdGl2ZSBDQ1MuCj4gCj4gQmFzZWQgb24gdGhhdCBjb21tZW50IEknZCBleHBlY3Qg c29tZXRoaW5nIG1vcmUgbGlrZSAoY29sb3JfcGxhbmUgJSAyKS4KCkkgbmVlZCB0byB1cGRhdGUg dGhlIGNvbW1lbnQgaW4gdGhlIG1vZGlmaWVyIHBhdGNoLCB0aGFua3MgZm9yIGNhdGNoaW5nIHRo aXMuIFRoZSBtYWpvciBjaGFuZ2UgaW4KdGhpcyB2ZXJzaW9uIGlzIAoKZm9yIHBsYW5hciBmb3Jt YXRzOiBwbGFuZXMgMiBhbmQgMyB3aWxsIGJlIHVzZWQgZm9yIENDUyBpbnN0ZWFkIG9mIDEgYW5k IDMuIApmb3IgcGFja2VkIGZvcm1hdHM6IHBsYW5lIDEgd2lsbCBiZSB1c2VkIGZvciBDQ1MKCj4g Cj4gCj4gPiArCj4gPiAgc3RhdGljIHVuc2lnbmVkIGludCBpbnRlbF90aWxlX3NpemUoY29uc3Qg c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ID4gIHsKPiA+ICAJcmV0dXJuIElT X0dFTihkZXZfcHJpdiwgMikgPyAyMDQ4IDogNDA5NjsKPiA+IEBAIC0xOTA4LDExICsxOTI0LDEz IEBAIGludGVsX3RpbGVfd2lkdGhfYnl0ZXMoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIsIGludAo+ID4gY29sb3JfcGxhbmUpCj4gPiAgCQllbHNlCj4gPiAgCQkJcmV0dXJuIDUxMjsK PiA+ICAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6Cj4gPiAtCQlpZiAoY29sb3Jf cGxhbmUgPT0gMSkKPiA+ICsJCWlmIChpc19jY3NfcGxhbmUoZmIsIGNvbG9yX3BsYW5lKSkKPiA+ ICAJCQlyZXR1cm4gMTI4Owo+ID4gIAkJLyogZmFsbCB0aHJvdWdoICovCj4gPiArCWNhc2UgSTkx NV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTOgo+ID4gKwkJLyogZmFsbCB0aHJvdWdo ICovCj4gPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTOgo+ID4g LQkJaWYgKGNvbG9yX3BsYW5lID09IDEpCj4gPiArCQlpZiAoaXNfY2NzX3BsYW5lKGZiLCBjb2xv cl9wbGFuZSkpCj4gPiAgCQkJcmV0dXJuIDY0Owo+ID4gIAkJLyogZmFsbCB0aHJvdWdoICovCj4g PiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6Cj4gPiBAQCAtMTkyMSw3ICsxOTM5LDcg QEAgaW50ZWxfdGlsZV93aWR0aF9ieXRlcyhjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiwgaW50IGNvbG9yX3BsYW5lKQo+ID4gIAkJZWxzZQo+ID4gIAkJCXJldHVybiA1MTI7Cj4gPiAg CWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKPiA+IC0JCWlmIChjb2xvcl9wbGFu ZSA9PSAxKQo+ID4gKwkJaWYgKGlzX2Njc19wbGFuZShmYiwgY29sb3JfcGxhbmUpKQo+ID4gIAkJ CXJldHVybiAxMjg7Cj4gPiAgCQkvKiBmYWxsIHRocm91Z2ggKi8KPiA+ICAJY2FzZSBJOTE1X0ZP Uk1BVF9NT0RfWWZfVElMRUQ6Cj4gPiBAQCAtMTk0OSw4ICsxOTY3LDkgQEAgc3RhdGljIHVuc2ln bmVkIGludAo+ID4gIGludGVsX3RpbGVfaGVpZ2h0KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpCj4gPiAgewo+ID4gIAlzd2l0Y2ggKGZiLT5tb2RpZmll cikgewo+ID4gKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUzoKPiA+ ICAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1M6Cj4gPiAtCQlpZiAo Y29sb3JfcGxhbmUgPT0gMSkKPiA+ICsJCWlmIChpc19jY3NfcGxhbmUoZmIsIGNvbG9yX3BsYW5l KSkKPiA+ICAJCQlyZXR1cm4gMTsKPiA+ICAJCS8qIGZhbGwgdGhyb3VnaCAqLwo+ID4gIAlkZWZh dWx0Ogo+ID4gQEAgLTIwNTUsNiArMjA3NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxf c3VyZl9hbGlnbm1lbnQoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gPiAgCQlp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQo+ID4gIAkJCXJldHVybiAyNTYgKiAxMDI0Owo+ ID4gIAkJcmV0dXJuIDA7Cj4gPiArCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJf TUNfQ0NTOgo+ID4gIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUzoK PiA+ICAJCXJldHVybiAxNiAqIDEwMjQ7Cj4gPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElM RURfQ0NTOgo+ID4gQEAgLTIyNTQsMTAgKzIyNzQsMTcgQEAgc3RhdGljIHUzMiBpbnRlbF9hZGp1 c3RfdGlsZV9vZmZzZXQoaW50ICp4LCBpbnQgKnksCj4gPiAgCXJldHVybiBuZXdfb2Zmc2V0Owo+ ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMgYm9vbCBpc19zdXJmYWNlX2xpbmVhcih1NjQgbW9kaWZp ZXIsIGludCBjb2xvcl9wbGFuZSkKPiA+ICtzdGF0aWMgYm9vbCBpc19zdXJmYWNlX2xpbmVhcihj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5lKQo+ID4gIHsK PiA+IC0JcmV0dXJuIG1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8fAo+ID4gLQkg ICAgICAgKG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUyAm JiBjb2xvcl9wbGFuZSA9PSAxKTsKPiA+ICsJc3dpdGNoIChmYi0+bW9kaWZpZXIpIHsKPiA+ICsJ Y2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6Cj4gPiArCQlyZXR1cm4gdHJ1ZTsKPiA+ICsJY2Fz ZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1M6Cj4gPiArCWNhc2UgSTkxNV9G T1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTOgo+ID4gKwkJcmV0dXJuIGlzX2Njc19wbGFu ZShmYiwgY29sb3JfcGxhbmUpOwo+ID4gKwlkZWZhdWx0Ogo+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ ID4gKwl9Cj4gPiAgfQo+ID4gIAo+ID4gIHN0YXRpYyB1MzIgaW50ZWxfYWRqdXN0X2FsaWduZWRf b2Zmc2V0KGludCAqeCwgaW50ICp5LAo+ID4gQEAgLTIyNzIsNyArMjI5OSw3IEBAIHN0YXRpYyB1 MzIgaW50ZWxfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KGludCAqeCwgaW50ICp5LAo+ID4gIAo+ID4g IAlXQVJOX09OKG5ld19vZmZzZXQgPiBvbGRfb2Zmc2V0KTsKPiA+ICAKPiA+IC0JaWYgKCFpc19z dXJmYWNlX2xpbmVhcihmYi0+bW9kaWZpZXIsIGNvbG9yX3BsYW5lKSkgewo+ID4gKwlpZiAoIWlz X3N1cmZhY2VfbGluZWFyKGZiLCBjb2xvcl9wbGFuZSkpIHsKPiA+ICAJCXVuc2lnbmVkIGludCB0 aWxlX3NpemUsIHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0Owo+ID4gIAkJdW5zaWduZWQgaW50IHBp dGNoX3RpbGVzOwo+ID4gIAo+ID4gQEAgLTIzNDIsNyArMjM2OSw3IEBAIHN0YXRpYyB1MzIgaW50 ZWxfY29tcHV0ZV9hbGlnbmVkX29mZnNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCj4gPiAgCWlmIChhbGlnbm1lbnQpCj4gPiAgCQlhbGlnbm1lbnQtLTsKPiA+ICAKPiA+IC0J aWYgKCFpc19zdXJmYWNlX2xpbmVhcihmYi0+bW9kaWZpZXIsIGNvbG9yX3BsYW5lKSkgewo+ID4g KwlpZiAoIWlzX3N1cmZhY2VfbGluZWFyKGZiLCBjb2xvcl9wbGFuZSkpIHsKPiA+ICAJCXVuc2ln bmVkIGludCB0aWxlX3NpemUsIHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0Owo+ID4gIAkJdW5zaWdu ZWQgaW50IHRpbGVfcm93cywgdGlsZXMsIHBpdGNoX3RpbGVzOwo+ID4gIAo+ID4gQEAgLTI0NDUs NiArMjQ3Miw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfZmJfbW9kaWZpZXJfdG9fdGls aW5nKHU2NCBmYl9tb2RpZmllcikKPiA+ICAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoK PiA+ICAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6Cj4gPiAgCWNhc2UgSTkxNV9G T1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTOgo+ID4gKwljYXNlIEk5MTVfRk9STUFUX01P RF9ZX1RJTEVEX0dFTjEyX01DX0NDUzoKPiA+ICAJCXJldHVybiBJOTE1X1RJTElOR19ZOwo+ID4g IAlkZWZhdWx0Ogo+ID4gIAkJcmV0dXJuIEk5MTVfVElMSU5HX05PTkU7Cj4gPiBAQCAtMjQ5NCw2 ICsyNTIyLDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvIGdlbjEyX2Nj c19mb3JtYXRzW10gPSB7Cj4gPiAgCSAgLmNwcCA9IHsgNCwgMSwgfSwgLmhzdWIgPSAyLCAudnN1 YiA9IDMyLCAuaGFzX2FscGhhID0gdHJ1ZSB9LAo+ID4gIH07Cj4gPiAgCj4gPiArc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gZ2VuMTJfbWNfY2NzX2Zvcm1hdHNbXSA9IHsKPiA+ ICsJeyAuZm9ybWF0ID0gRFJNX0ZPUk1BVF9ZVVlWLCAubnVtX3BsYW5lcyA9IDIsCj4gPiArCSAg LmNwcCA9IHsgMiwgMSwgfSwgLmhzdWIgPSA0LCAudnN1YiA9IDMyLCAuaXNfeXV2ID0gdHJ1ZSB9 LAo+ID4gKwl7IC5mb3JtYXQgPSBEUk1fRk9STUFUX05WMTIsIC5udW1fcGxhbmVzID0gNCwKPiA+ ICsJICAuY3BwID0geyAxLCAyLCAxLCAxfSwgLmhzdWIgPSAyLCAudnN1YiA9IDIsIC5pc195dXYg PSB0cnVlIH0sCj4gPiArfTsKPiAKPiBEb24ndCB3ZSBhbHNvIHN1cHBvcnQgbWVkaWEgY29tcHJl c3Npb24gb24gUkdCIGFuZCBtb3JlIHBhY2tlZCBZVVYKPiBmb3JtYXRzPyAgSS5lLiwgc2VlIHRo ZSBtYXRyaXggb24gYnNwZWMgcGFnZSA0OTI1MC4KPiAKPiA+ICsKPiA+ICBzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9mb3JtYXRfaW5mbyAqCj4gPiAgbG9va3VwX2Zvcm1hdF9pbmZvKGNvbnN0IHN0 cnVjdCBkcm1fZm9ybWF0X2luZm8gZm9ybWF0c1tdLAo+ID4gIAkJICAgaW50IG51bV9mb3JtYXRz LCB1MzIgZm9ybWF0KQo+ID4gQEAgLTI1MTEsMTIgKzI1NDYsMjEgQEAgbG9va3VwX2Zvcm1hdF9p bmZvKGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gZm9ybWF0c1tdLAo+ID4gIHN0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICoKPiA+ICBpbnRlbF9nZXRfZm9ybWF0X2luZm8o Y29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKmNtZCkKPiA+ICB7Cj4gPiArCWNvbnN0IHN0 cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm87Cj4gPiArCj4gPiAgCXN3aXRjaCAoY21kLT5tb2Rp ZmllclswXSkgewo+ID4gIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKPiA+ICAJ Y2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgo+ID4gIAkJcmV0dXJuIGxvb2t1cF9m b3JtYXRfaW5mbyhza2xfY2NzX2Zvcm1hdHMsCj4gPiAgCQkJCQkgIEFSUkFZX1NJWkUoc2tsX2Nj c19mb3JtYXRzKSwKPiA+ICAJCQkJCSAgY21kLT5waXhlbF9mb3JtYXQpOwo+ID4gKwljYXNlIEk5 MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUzoKPiA+ICsJCWluZm8gPSBsb29rdXBf Zm9ybWF0X2luZm8oZ2VuMTJfbWNfY2NzX2Zvcm1hdHMsCj4gPiArCQkJCQkgIEFSUkFZX1NJWkUo Z2VuMTJfbWNfY2NzX2Zvcm1hdHMpLAo+ID4gKwkJCQkJICBjbWQtPnBpeGVsX2Zvcm1hdCk7Cj4g PiArCQlpZiAoaW5mbykKPiA+ICsJCQlyZXR1cm4gaW5mbzsKPiA+ICsJCS8qIGZhbGwgdGhyb3Vn aCAqLwo+IAo+IE9oLCBJIHNlZS4gIFlvdSdyZSBlZmZlY3RpdmVseSB1bmlvbmluZyBnZW4xMl9j Y3NfZm9ybWF0cyBpbiB3aXRoIHRoaXMKPiBmYWxsIHRocm91Z2guICBJIHN0aWxsIHRoaW5nIHRo YXQgd2luZHMgdXAgYmVpbmcgYSBiaXQgY29uZnVzaW5nIHNvIEknZAo+IGF0IGxlYXN0IHB1dCBh IGNvbW1lbnQgdXAgYWJvdmUgdGhlIG1jX2Njc19mb3JtYXRzIHRhYmxlLiAgQWx0aG91Z2ggSQo+ IGFsc28gd29ycnkgdGhhdCBhIGZ1dHVyZSBwbGF0Zm9ybSBtaWdodCBhbGxvdyByZW5kZXIgY29t cHJlc3Npb24gb24gc29tZQo+IGZvcm1hdCB0aGF0IGl0IGRvZXNuJ3Qgc3VwcG9ydCBtZWRpYSBj b21wcmVzc2lvbiBvbiwgd2hpY2ggd291bGQgZm9yY2UKPiB1cyB0byBkZWNvdXBsZSB0aGUgdGFi bGVzIGF0IHRoYXQgcG9pbnQuCj4gCj4gRXZlbiBnaXZlbiB0aGUgdW5pb24gb2YgdGhlIHR3byB0 YWJsZXMsIGFyZSB3ZSBzdGlsbCBtaXNzaW5nIHNvbWUgb2YgdGhlCj4gYXJyYW5nZW1lbnRzIG9m IFlVVjQyMiAoaS5lLiwgWVZZVSwgVVlWWSwgYW5kIFZZVVkpPwoKSSBkaWQgbm90IGluY2x1ZGUg YWxsIHRoZSBzdXBwb3J0ZWQgZm9ybWF0cyBJIHdhbnRlZCB0byBnZXQgZmVlZGJhY2sgb24gdGhl IGludGVyZmFjZSBmb3IgcGxhbmFyCmZvcm1hdHMuIEknbGwgYWRkIHRoZW0gaW4gdGhlIG5leHQg dmVyc2lvbi4KIAo+IAo+ID4gIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JD X0NDUzoKPiA+ICAJCXJldHVybiBsb29rdXBfZm9ybWF0X2luZm8oZ2VuMTJfY2NzX2Zvcm1hdHMs Cj4gPiAgCQkJCQkgIEFSUkFZX1NJWkUoZ2VuMTJfY2NzX2Zvcm1hdHMpLAo+ID4gQEAgLTI1MjYs MTMgKzI1NzAsNiBAQCBpbnRlbF9nZXRfZm9ybWF0X2luZm8oY29uc3Qgc3RydWN0IGRybV9tb2Rl X2ZiX2NtZDIgKmNtZCkKPiA+ICAJfQo+ID4gIH0KPiA+ICAKPiA+IC1ib29sIGlzX2Njc19tb2Rp Zmllcih1NjQgbW9kaWZpZXIpCj4gPiAtewo+ID4gLQlyZXR1cm4gbW9kaWZpZXIgPT0gSTkxNV9G T1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTIHx8Cj4gPiAtCSAgICAgICBtb2RpZmllciA9 PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MgfHwKPiA+IC0JICAgICAgIG1vZGlmaWVyID09 IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M7Cj4gPiAtfQo+ID4gLQo+ID4gIHUzMiBpbnRl bF9wbGFuZV9mYl9tYXhfc3RyaWRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK PiA+ICAJCQkgICAgICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIpCj4gPiAgewo+ID4g QEAgLTI1NzYsNyArMjYxMyw3IEBAIGludGVsX2ZiX3N0cmlkZV9hbGlnbm1lbnQoY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludAo+ID4gY29sb3JfcGxhbmUpCj4gPiAgCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZmItPmRldik7Cj4gPiAgCXUz MiB0aWxlX3dpZHRoOwo+ID4gIAo+ID4gLQlpZiAoaXNfc3VyZmFjZV9saW5lYXIoZmItPm1vZGlm aWVyLCBjb2xvcl9wbGFuZSkpIHsKPiA+ICsJaWYgKGlzX3N1cmZhY2VfbGluZWFyKGZiLCBjb2xv cl9wbGFuZSkpIHsKPiA+ICAJCXUzMiBtYXhfc3RyaWRlID0gaW50ZWxfcGxhbmVfZmJfbWF4X3N0 cmlkZShkZXZfcHJpdiwKPiA+ICAJCQkJCQkJICAgZmItPmZvcm1hdC0+Zm9ybWF0LAo+ID4gIAkJ CQkJCQkgICBmYi0+bW9kaWZpZXIpOwo+ID4gQEAgLTI1OTIsNyArMjYyOSw3IEBAIGludGVsX2Zi X3N0cmlkZV9hbGlnbm1lbnQoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludAo+ ID4gY29sb3JfcGxhbmUpCj4gPiAgCX0KPiA+ICAKPiA+ICAJdGlsZV93aWR0aCA9IGludGVsX3Rp bGVfd2lkdGhfYnl0ZXMoZmIsIGNvbG9yX3BsYW5lKTsKPiA+IC0JaWYgKGlzX2Njc19tb2RpZmll cihmYi0+bW9kaWZpZXIpICYmIGNvbG9yX3BsYW5lID09IDApIHsKPiA+ICsJaWYgKGlzX2Njc19t b2RpZmllcihmYi0+bW9kaWZpZXIpKSB7Cj4gPiAgCQkvKgo+ID4gIAkJICogRGlzcGxheSBXQSAj MDUzMTogc2tsLGJ4dCxrYmwsZ2xrCj4gPiAgCQkgKgo+ID4gQEAgLTI2MDIsNyArMjYzOSw3IEBA IGludGVsX2ZiX3N0cmlkZV9hbGlnbm1lbnQoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIsIGludAo+ID4gY29sb3JfcGxhbmUpCj4gPiAgCQkgKiByZXF1aXJlIHRoZSBlbnRpcmUgZmIg dG8gYWNjb21tb2RhdGUgdGhhdCB0byBhdm9pZAo+ID4gIAkJICogcG90ZW50aWFsIHJ1bnRpbWUg ZXJyb3JzIGF0IHBsYW5lIGNvbmZpZ3VyYXRpb24gdGltZS4KPiA+ICAJCSAqLwo+ID4gLQkJaWYg KElTX0dFTihkZXZfcHJpdiwgOSkgJiYgZmItPndpZHRoID4gMzg0MCkKPiA+ICsJCWlmIChJU19H RU4oZGV2X3ByaXYsIDkpICYmIGNvbG9yX3BsYW5lID09IDAgJiYgZmItPndpZHRoID4gMzg0MCkK PiA+ICAJCQl0aWxlX3dpZHRoICo9IDQ7Cj4gPiAgCQkvKgo+ID4gIAkJICogVGhlIG1haW4gc3Vy ZmFjZSBwaXRjaCBtdXN0IGJlIHBhZGRlZCB0byBhIG11bHRpcGxlIG9mIGZvdXIKPiA+IEBAIC0y NjgyLDI1ICsyNzE5LDc1IEBAIHN0YXRpYyBib29sIGludGVsX3BsYW5lX25lZWRzX3JlbWFwKGNv bnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZQo+ID4gKnBsYW5lX3N0YXRlKQo+ID4gIAlyZXR1 cm4gc3RyaWRlID4gbWF4X3N0cmlkZTsKPiA+ICB9Cj4gPiAgCj4gPiArc3RhdGljIHZvaWQKPiA+ ICtpbnRlbF9mYl9wbGFuZV9nZXRfc3Vic2FtcGxpbmcoaW50ICpoc3ViLCBpbnQgKnZzdWIsIGNv bnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQKPiA+IGNvbG9yX3BsYW5lKQo+ID4g K3sKPiA+ICsJaW50IGk7Cj4gPiArCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgewo+ID4gKwkJdTMyIGZv cm1hdDsKPiA+ICsJCWludCB2c3ViWzRdOwo+ID4gKwkJaW50IGhzdWJbNF07Cj4gPiArCX0gbWNf Y2NzX3N1YnNhbXBsaW5nW10gPSB7IHsgLmhzdWIgPSB7IDEsIDIsIDgsIDE2IH0sCj4gPiArCQkJ CSAgICAgLnZzdWIgPSB7IDEsIDIsIDMyLCAzMiB9LAo+ID4gKwkJCQkgICAgIC5mb3JtYXQgPSBE Uk1fRk9STUFUX05WMTIsIH0sCj4gPiArCQkJCSB9Owo+ID4gKwo+ID4gKwkqaHN1YiA9IGZiLT5m b3JtYXQtPmhzdWI7Cj4gPiArCSp2c3ViID0gZmItPmZvcm1hdC0+dnN1YjsKPiA+ICsKPiA+ICsJ aWYgKGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9NQ19DQ1Mg JiYKPiA+ICsJICAgIGZiLT5mb3JtYXQtPm51bV9wbGFuZXMgPT0gNCkgewo+ID4gKwkJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUobWNfY2NzX3N1YnNhbXBsaW5nKTsgaSsrKSB7Cj4gPiArCQkJ aWYgIChtY19jY3Nfc3Vic2FtcGxpbmdbaV0uZm9ybWF0ID09IGZiLT5mb3JtYXQtPmZvcm1hdCkg ewo+ID4gKwkJCQkqaHN1YiA9IG1jX2Njc19zdWJzYW1wbGluZ1tpXS5oc3ViW2NvbG9yX3BsYW5l XTsKPiA+ICsJCQkJKnZzdWIgPSBtY19jY3Nfc3Vic2FtcGxpbmdbaV0udnN1Yltjb2xvcl9wbGFu ZV07Cj4gPiArCQkJCWJyZWFrOwo+ID4gKwkJCX0KPiA+ICsJCX0KPiA+ICsJCVdBUk5fT04oaSA9 PSBBUlJBWV9TSVpFKG1jX2Njc19zdWJzYW1wbGluZykpOwo+ID4gKwl9Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyB2b2lkCj4gPiAraW50ZWxfZmJfcGxhbmVfZGltcyhpbnQgKncsIGludCAqaCwg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjb2xvcl9wbGFuZSkKPiA+ICt7Cj4gPiAr CWludCBoc3ViLCB2c3ViOwo+ID4gKwo+ID4gKwlpbnRlbF9mYl9wbGFuZV9nZXRfc3Vic2FtcGxp bmcoJmhzdWIsICZ2c3ViLCBmYiwgY29sb3JfcGxhbmUpOwo+ID4gKwkqdyA9IGZiLT53aWR0aC9o c3ViOwo+ID4gKwkqaCA9IGZiLT5oZWlnaHQvdnN1YjsKPiA+ICt9Cj4gPiArCj4gPiAgc3RhdGlj IGludAo+ID4gLWludGVsX2ZiX2NoZWNrX2Njc194eShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiwgaW50IHgsIGludCB5KQo+ID4gK2ludGVsX2ZiX2NoZWNrX2Njc194eShzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiwgaW50IGF1eF9wbGFuZSwgaW50IHgsIGludCB5KQo+ID4gIHsKPiA+ICAJ c3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVy KGZiKTsKPiA+IC0JaW50IGhzdWIgPSBmYi0+Zm9ybWF0LT5oc3ViOwo+ID4gLQlpbnQgdnN1YiA9 IGZiLT5mb3JtYXQtPnZzdWI7Cj4gPiArCWludCBoc3ViLCB2c3ViOwo+ID4gKwlpbnQgaHN1Yl9t YWluLCB2c3ViX21haW47Cj4gPiAgCWludCB0aWxlX3dpZHRoLCB0aWxlX2hlaWdodDsKPiA+ICAJ aW50IGNjc194LCBjY3NfeTsKPiA+ICAJaW50IG1haW5feCwgbWFpbl95Owo+ID4gKwlpbnQgbWFp bl9wbGFuZTsKPiA+ICsKPiA+ICsJaWYgKCFpc19jY3NfcGxhbmUoZmIsIGF1eF9wbGFuZSkpCj4g PiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+ICsJbWFpbl9wbGFuZSA9IChhdXhfcGxhbmUgLSAxKSAv IDI7Cj4gCj4gVGhpcyBhbHNvIGRvZXNuJ3QgbWVudGlvbiB0aGUgbW9kaWZpZXIgZGVzY3JpcHRp b24gY29tbWVudC4gIFNvIEkgZ3Vlc3MKPiB0aGF0IGNvbW1lbnQganVzdCBuZWVkcyB0byBiZSB1 cGRhdGVkLCAKWWVhaC4KCj4gYW5kIG1heWJlIHdpdGggYSBkZXNjcmlwdGlvbiB0aGF0Cj4gdGhl IGRybV9mcmFtZWJ1ZmZlciBjb2xvciBwbGFuZSBvcmRlcmluZyBkb2Vzbid0IG1hdGNoIHRoZSBv cmRlciB0aGF0Cj4gdGhleSBzaG93IHVwIGluIG1lbW9yeS4KClRoZSBjb2xvciBwbGFuZSBvcmRl cmluZyBpcyBleHBlY3RlZCB0byBtYXRjaCB0aGUgc3VyZmFjZXMgcG9zaXRpb25zIGluIG1lbW9y eS4gTXkgdW5kZXJzdGFuZGluZyBpcwp0aGF0IFVNRCdzIGhhdmUgdGhlIGZsZXhpYmlsaXR5IGlu IHRoZWlyIG9yZGVyaW5nLCB3aXRoIHRoZSBvbmx5IGNvbnN0cmFpbnRzIGJlaW5nIAoxKSBDQ1Mg bXVzdCBiZSBwbGFjZWQgYWZ0ZXIgdGhlIGNvcnJlc3BvbmRpbmcgbWFpbiBzdXJmYWNlCjIpIFVW IG11c3QgYmUgcGxhY2VkIGFmdGVyIFkuCgpUaGFua3MgZm9yIHRoZSBmZWVkYmFjay4KCi1ESwoK PiAKPiA+ICsJaW50ZWxfdGlsZV9kaW1zKGZiLCBhdXhfcGxhbmUsICZ0aWxlX3dpZHRoLCAmdGls ZV9oZWlnaHQpOwo+ID4gKwlpbnRlbF9mYl9wbGFuZV9nZXRfc3Vic2FtcGxpbmcoJmhzdWIsICZ2 c3ViLCBmYiwgYXV4X3BsYW5lKTsKPiA+ICsJaW50ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5n KCZoc3ViX21haW4sICZ2c3ViX21haW4sIGZiLAo+ID4gKwkJCQkgICAgICAgbWFpbl9wbGFuZSk7 Cj4gPiAgCj4gPiAtCWludGVsX3RpbGVfZGltcyhmYiwgMSwgJnRpbGVfd2lkdGgsICZ0aWxlX2hl aWdodCk7Cj4gPiArCWhzdWIgLz0gaHN1Yl9tYWluOwo+ID4gKwl2c3ViIC89IHZzdWJfbWFpbjsK PiA+ICAKPiA+ICAJdGlsZV93aWR0aCAqPSBoc3ViOwo+ID4gIAl0aWxlX2hlaWdodCAqPSB2c3Vi Owo+ID4gIAo+ID4gIAljY3NfeCA9ICh4ICogaHN1YikgJSB0aWxlX3dpZHRoOwo+ID4gIAljY3Nf eSA9ICh5ICogdnN1YikgJSB0aWxlX2hlaWdodDsKPiA+IC0JbWFpbl94ID0gaW50ZWxfZmItPm5v cm1hbFswXS54ICUgdGlsZV93aWR0aDsKPiA+IC0JbWFpbl95ID0gaW50ZWxfZmItPm5vcm1hbFsw XS55ICUgdGlsZV9oZWlnaHQ7Cj4gPiArCW1haW5feCA9IGludGVsX2ZiLT5ub3JtYWxbbWFpbl9w bGFuZV0ueCAlIHRpbGVfd2lkdGg7Cj4gPiArCW1haW5feSA9IGludGVsX2ZiLT5ub3JtYWxbbWFp bl9wbGFuZV0ueSAlIHRpbGVfaGVpZ2h0Owo+ID4gIAo+ID4gIAkvKgo+ID4gIAkqIENDUyBkb2Vz bid0IGhhdmUgaXRzIG93biB4L3kgb2Zmc2V0IHJlZ2lzdGVyLCBzbyB0aGUgaW50cmEgQ0NTIHRp bGUKPiA+IEBAIC0yNzEwLDggKzI3OTcsOCBAQCBpbnRlbF9mYl9jaGVja19jY3NfeHkoc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCB4LCBpbnQgeSkKPiA+ICAJCURSTV9ERUJVR19LTVMo IkJhZCBDQ1MgeC95IChtYWluICVkLCVkIGNjcyAlZCwlZCkgZnVsbCAobWFpbiAlZCwlZCBjY3Mg JWQsJWQpXG4iLAo+ID4gIAkJCSAgICAgIG1haW5feCwgbWFpbl95LAo+ID4gIAkJCSAgICAgIGNj c194LCBjY3NfeSwKPiA+IC0JCQkgICAgICBpbnRlbF9mYi0+bm9ybWFsWzBdLngsCj4gPiAtCQkJ ICAgICAgaW50ZWxfZmItPm5vcm1hbFswXS55LAo+ID4gKwkJCSAgICAgIGludGVsX2ZiLT5ub3Jt YWxbbWFpbl9wbGFuZV0ueCwKPiA+ICsJCQkgICAgICBpbnRlbF9mYi0+bm9ybWFsW21haW5fcGxh bmVdLnksCj4gPiAgCQkJICAgICAgeCwgeSk7Cj4gPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICAJ fQo+ID4gQEAgLTI3MzksOCArMjgyNiw3IEBAIGludGVsX2ZpbGxfZmJfaW5mbyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiAgCQlpbnQgcmV0Owo+ID4gIAo+ID4gIAkJY3Bw ID0gZmItPmZvcm1hdC0+Y3BwW2ldOwo+ID4gLQkJd2lkdGggPSBkcm1fZnJhbWVidWZmZXJfcGxh bmVfd2lkdGgoZmItPndpZHRoLCBmYiwgaSk7Cj4gPiAtCQloZWlnaHQgPSBkcm1fZnJhbWVidWZm ZXJfcGxhbmVfaGVpZ2h0KGZiLT5oZWlnaHQsIGZiLCBpKTsKPiA+ICsJCWludGVsX2ZiX3BsYW5l X2RpbXMoJndpZHRoLCAmaGVpZ2h0LCBmYiwgaSk7Cj4gPiAgCj4gPiAgCQlyZXQgPSBpbnRlbF9m Yl9vZmZzZXRfdG9feHkoJngsICZ5LCBmYiwgaSk7Cj4gPiAgCQlpZiAocmV0KSB7Cj4gPiBAQCAt Mjc0OSwxMSArMjgzNSw5IEBAIGludGVsX2ZpbGxfZmJfaW5mbyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCj4gPiAgCQkJcmV0dXJuIHJldDsKPiA+ICAJCX0KPiA+ICAKPiA+IC0J CWlmIChpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSAmJiBpID09IDEpIHsKPiA+IC0JCQly ZXQgPSBpbnRlbF9mYl9jaGVja19jY3NfeHkoZmIsIHgsIHkpOwo+ID4gLQkJCWlmIChyZXQpCj4g PiAtCQkJCXJldHVybiByZXQ7Cj4gPiAtCQl9Cj4gPiArCQlyZXQgPSBpbnRlbF9mYl9jaGVja19j Y3NfeHkoZmIsIGksIHgsIHkpOwo+ID4gKwkJaWYgKHJldCkKPiA+ICsJCQlyZXR1cm4gcmV0Owo+ ID4gIAo+ID4gIAkJLyoKPiA+ICAJCSAqIFRoZSBmZW5jZSAoaWYgdXNlZCkgaXMgYWxpZ25lZCB0 byB0aGUgc3RhcnQgb2YgdGhlIG9iamVjdAo+ID4gQEAgLTMzNzEsNiArMzQ1NSw3IEBAIHN0YXRp YyBpbnQgc2tsX21heF9wbGFuZV93aWR0aChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiwKPiA+ICAJCQlyZXR1cm4gNTEyMDsKPiA+ICAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxF RF9DQ1M6Cj4gPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKPiA+ICsJY2Fz ZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9NQ19DQ1M6Cj4gPiAgCQkvKiBGSVhNRSBB VVggcGxhbmU/ICovCj4gPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6Cj4gPiAgCWNh c2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgo+ID4gQEAgLTM0MzAsMTYgKzM1MTUsMTggQEAg c3RhdGljIGludCBpY2xfbWF4X3BsYW5lX2hlaWdodCh2b2lkKQo+ID4gIH0KPiA+ICAKPiA+ICBz dGF0aWMgYm9vbCBza2xfY2hlY2tfbWFpbl9jY3NfY29vcmRpbmF0ZXMoc3RydWN0IGludGVsX3Bs YW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKPiA+IC0JCQkJCSAgIGludCBtYWluX3gsIGludCBtYWlu X3ksIHUzMiBtYWluX29mZnNldCkKPiA+ICsJCQkJCSAgIGludCBtYWluX3gsIGludCBtYWluX3ks Cj4gPiArCQkJCQkgICB1MzIgbWFpbl9vZmZzZXQsIGludCBhdXhfcGxhbmUpCj4gPiAgewo+ID4g IAljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZi Owo+ID4gLQlpbnQgaHN1YiA9IGZiLT5mb3JtYXQtPmhzdWI7Cj4gPiAtCWludCB2c3ViID0gZmIt PmZvcm1hdC0+dnN1YjsKPiA+IC0JaW50IGF1eF94ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5l WzFdLng7Cj4gPiAtCWludCBhdXhfeSA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS55Owo+ ID4gLQl1MzIgYXV4X29mZnNldCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS5vZmZzZXQ7 Cj4gPiAtCXUzMiBhbGlnbm1lbnQgPSBpbnRlbF9zdXJmX2FsaWdubWVudChmYiwgMSk7Cj4gPiAt Cj4gPiArCWludCBoc3ViOwo+ID4gKwlpbnQgdnN1YjsKPiA+ICsJaW50IGF1eF94ID0gcGxhbmVf c3RhdGUtPmNvbG9yX3BsYW5lW2F1eF9wbGFuZV0ueDsKPiA+ICsJaW50IGF1eF95ID0gcGxhbmVf c3RhdGUtPmNvbG9yX3BsYW5lW2F1eF9wbGFuZV0ueTsKPiA+ICsJdTMyIGF1eF9vZmZzZXQgPSBw bGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbYXV4X3BsYW5lXS5vZmZzZXQ7Cj4gPiArCXUzMiBhbGln bm1lbnQgPSBpbnRlbF9zdXJmX2FsaWdubWVudChmYiwgYXV4X3BsYW5lKTsKPiA+ICsKPiA+ICsJ aW50ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKCZoc3ViLCAmdnN1YiwgZmIsIGF1eF9wbGFu ZSk7Cj4gPiAgCXdoaWxlIChhdXhfb2Zmc2V0ID49IG1haW5fb2Zmc2V0ICYmIGF1eF95IDw9IG1h aW5feSkgewo+ID4gIAkJaW50IHgsIHk7Cj4gPiAgCj4gPiBAQCAtMzQ1MSw3ICszNTM4LDcgQEAg c3RhdGljIGJvb2wgc2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5hdGVzKHN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZQo+ID4gKnBsYW5lX3N0YXRlCj4gPiAgCj4gPiAgCQl4ID0gYXV4X3ggLyBoc3Vi Owo+ID4gIAkJeSA9IGF1eF95IC8gdnN1YjsKPiA+IC0JCWF1eF9vZmZzZXQgPSBpbnRlbF9wbGFu ZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngsICZ5LCBwbGFuZV9zdGF0ZSwgMSwKPiA+ICsJCWF1 eF9vZmZzZXQgPSBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngsICZ5LCBwbGFu ZV9zdGF0ZSwgYXV4X3BsYW5lLAo+ID4gIAkJCQkJCQkgICAgICAgYXV4X29mZnNldCwgYXV4X29m ZnNldCAtIGFsaWdubWVudCk7Cj4gPiAgCQlhdXhfeCA9IHggKiBoc3ViICsgYXV4X3ggJSBoc3Vi Owo+ID4gIAkJYXV4X3kgPSB5ICogdnN1YiArIGF1eF95ICUgdnN1YjsKPiA+IEBAIC0zNDYwLDkg KzM1NDcsOSBAQCBzdGF0aWMgYm9vbCBza2xfY2hlY2tfbWFpbl9jY3NfY29vcmRpbmF0ZXMoc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlCj4gPiAqcGxhbmVfc3RhdGUKPiA+ICAJaWYgKGF1eF94ICE9 IG1haW5feCB8fCBhdXhfeSAhPSBtYWluX3kpCj4gPiAgCQlyZXR1cm4gZmFsc2U7Cj4gPiAgCj4g PiAtCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS5vZmZzZXQgPSBhdXhfb2Zmc2V0Owo+ID4g LQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMV0ueCA9IGF1eF94Owo+ID4gLQlwbGFuZV9zdGF0 ZS0+Y29sb3JfcGxhbmVbMV0ueSA9IGF1eF95Owo+ID4gKwlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxh bmVbYXV4X3BsYW5lXS5vZmZzZXQgPSBhdXhfb2Zmc2V0Owo+ID4gKwlwbGFuZV9zdGF0ZS0+Y29s b3JfcGxhbmVbYXV4X3BsYW5lXS54ID0gYXV4X3g7Cj4gPiArCXBsYW5lX3N0YXRlLT5jb2xvcl9w bGFuZVthdXhfcGxhbmVdLnkgPSBhdXhfeTsKPiA+ICAKPiA+ICAJcmV0dXJuIHRydWU7Cj4gPiAg fQo+ID4gQEAgLTM0NzgsNyArMzU2NSw4IEBAIHN0YXRpYyBpbnQgc2tsX2NoZWNrX21haW5fc3Vy ZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ID4gIAlpbnQgaCA9 IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPmJhc2Uuc3JjKSA+PiAxNjsKPiA+ICAJaW50 IG1heF93aWR0aDsKPiA+ICAJaW50IG1heF9oZWlnaHQ7Cj4gPiAtCXUzMiBhbGlnbm1lbnQsIG9m ZnNldCwgYXV4X29mZnNldCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS5vZmZzZXQ7Cj4g PiArCWludCBhdXhfcGxhbmUgPSBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzIC8gMjsKPiA+ICsJdTMy IGFsaWdubWVudCwgb2Zmc2V0LCBhdXhfb2Zmc2V0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5l W2F1eF9wbGFuZV0ub2Zmc2V0Owo+ID4gIAo+ID4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSAxMSkKPiA+ICAJCW1heF93aWR0aCA9IGljbF9tYXhfcGxhbmVfd2lkdGgoZmIsIDAsIHJvdGF0 aW9uKTsKPiA+IEBAIC0zNTM2LDcgKzM2MjQsOSBAQCBzdGF0aWMgaW50IHNrbF9jaGVja19tYWlu X3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiA+ICAJICog dGhleSBtYXRjaCB3aXRoIHRoZSBtYWluIHN1cmZhY2UgeC95IG9mZnNldHMuCj4gPiAgCSAqLwo+ ID4gIAlpZiAoaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpIHsKPiA+IC0JCXdoaWxlICgh c2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlLCB4LCB5LCBvZmZzZXQp KSB7Cj4gPiArCj4gPiArCQl3aGlsZSAoIXNrbF9jaGVja19tYWluX2Njc19jb29yZGluYXRlcyhw bGFuZV9zdGF0ZSwgeCwgeSwKPiA+ICsJCQkJCQkgICAgICAgb2Zmc2V0LCBhdXhfcGxhbmUpKSB7 Cj4gPiAgCQkJaWYgKG9mZnNldCA9PSAwKQo+ID4gIAkJCQlicmVhazsKPiA+ICAKPiA+IEBAIC0z NTQ0LDcgKzM2MzQsOCBAQCBzdGF0aWMgaW50IHNrbF9jaGVja19tYWluX3N1cmZhY2Uoc3RydWN0 IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiA+ICAJCQkJCQkJCSAgIG9mZnNldCwg b2Zmc2V0IC0gYWxpZ25tZW50KTsKPiA+ICAJCX0KPiA+ICAKPiA+IC0JCWlmICh4ICE9IHBsYW5l X3N0YXRlLT5jb2xvcl9wbGFuZVsxXS54IHx8IHkgIT0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5l WzFdLnkpIHsKPiA+ICsJCWlmICh4ICE9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVthdXhfcGxh bmVdLnggfHwKPiA+ICsJCSAgICB5ICE9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVthdXhfcGxh bmVdLnkpIHsKPiA+ICAJCQlEUk1fREVCVUdfS01TKCJVbmFibGUgdG8gZmluZCBzdWl0YWJsZSBk aXNwbGF5IHN1cmZhY2Ugb2Zmc2V0IGR1ZSB0bwo+ID4gQ0NTXG4iKTsKPiA+ICAJCQlyZXR1cm4g LUVJTlZBTDsKPiA+ICAJCX0KPiA+IEBAIC0zNTg3LDYgKzM2NzgsNDEgQEAgc3RhdGljIGludCBz a2xfY2hlY2tfbnYxMl9hdXhfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUKPiA+ICpw bGFuZV9zdGF0ZSkKPiA+ICAJCXJldHVybiAtRUlOVkFMOwo+ID4gIAl9Cj4gPiAgCj4gPiArCWlm IChpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkgewo+ID4gKwkJaW50IGF1eF9vZmZzZXQg PSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbM10ub2Zmc2V0Owo+ID4gKwkJaW50IGFsaWdubWVu dCA9IGludGVsX3N1cmZfYWxpZ25tZW50KGZiLCAxKTsKPiA+ICsKPiA+ICsJCWlmIChvZmZzZXQg PiBhdXhfb2Zmc2V0KSB7Cj4gPiArCQkJaW50IGhzdWIsIHZzdWI7Cj4gPiArCQkJaW50IG1haW5f eCA9IHgsIG1haW5feSA9IHk7Cj4gPiArCj4gPiArCj4gPiArCQkJaW50ZWxfZmJfcGxhbmVfZ2V0 X3N1YnNhbXBsaW5nKCZoc3ViLCAmdnN1YiwgZmIsIDEpOwo+ID4gKwkJCXggPSBtYWluX3ggLyBo c3ViOwo+ID4gKwkJCXkgPSBtYWluX3kgLyB2c3ViOwo+ID4gKwkJCW9mZnNldCA9IGludGVsX3Bs YW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgmeCwgJnksIHBsYW5lX3N0YXRlLCAxLAo+ID4gKwkJ CQkJCQkJICAgb2Zmc2V0LAo+ID4gKwkJCQkJCQkJICAgYXV4X29mZnNldCAmIH4oYWxpZ25tZW50 IC0gMSkpOwo+ID4gKwkJCXggPSB4ICogaHN1YiArIG1haW5feCAlIGhzdWI7Cj4gPiArCQkJeSA9 IHkgKiB2c3ViICsgbWFpbl95ICUgdnN1YjsKPiA+ICsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCXdo aWxlICghc2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlLCB4LCB5LCBv ZmZzZXQsIDMpKSB7Cj4gPiArCQkJaWYgKG9mZnNldCA9PSAwKQo+ID4gKwkJCQlicmVhazsKPiA+ ICsKPiA+ICsJCQlvZmZzZXQgPSBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngs ICZ5LCBwbGFuZV9zdGF0ZSwgMSwKPiA+ICsJCQkJCQkJCSAgIG9mZnNldCwgb2Zmc2V0IC0gYWxp Z25tZW50KTsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWlmICh4ICE9IHBsYW5lX3N0YXRlLT5jb2xv cl9wbGFuZVszXS54IHx8Cj4gPiArCQkgICAgeSAhPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVb M10ueSkgewo+ID4gKwkJCURSTV9ERUJVR19LTVMoIlVuYWJsZSB0byBmaW5kIHN1aXRhYmxlIGRp c3BsYXkgc3VyZmFjZSBvZmZzZXQgZHVlIHRvCj4gPiBDQ1NcbiIpOwo+ID4gKwkJCXJldHVybiAt RUlOVkFMOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiAgCXBsYW5lX3N0YXRlLT5jb2xvcl9w bGFuZVsxXS5vZmZzZXQgPSBvZmZzZXQ7Cj4gPiAgCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsx XS54ID0geDsKPiA+ICAJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzFdLnkgPSB5Owo+ID4gQEAg LTM1OTksMTkgKzM3MjUsMzAgQEAgc3RhdGljIGludCBza2xfY2hlY2tfY2NzX2F1eF9zdXJmYWNl KHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZQo+ID4gKnBsYW5lX3N0YXRlKQo+ID4gIAljb25zdCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwo+ID4gIAlp bnQgc3JjX3ggPSBwbGFuZV9zdGF0ZS0+YmFzZS5zcmMueDEgPj4gMTY7Cj4gPiAgCWludCBzcmNf eSA9IHBsYW5lX3N0YXRlLT5iYXNlLnNyYy55MSA+PiAxNjsKPiA+IC0JaW50IGhzdWIgPSBmYi0+ Zm9ybWF0LT5oc3ViOwo+ID4gLQlpbnQgdnN1YiA9IGZiLT5mb3JtYXQtPnZzdWI7Cj4gPiAtCWlu dCB4ID0gc3JjX3ggLyBoc3ViOwo+ID4gLQlpbnQgeSA9IHNyY195IC8gdnN1YjsKPiA+ICAJdTMy IG9mZnNldDsKPiA+ICsJaW50IGNjczsKPiA+ICAKPiA+IC0JaW50ZWxfYWRkX2ZiX29mZnNldHMo JngsICZ5LCBwbGFuZV9zdGF0ZSwgMSk7Cj4gPiAtCW9mZnNldCA9IGludGVsX3BsYW5lX2NvbXB1 dGVfYWxpZ25lZF9vZmZzZXQoJngsICZ5LCBwbGFuZV9zdGF0ZSwgMSk7Cj4gPiAgCj4gPiAtCXBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS5vZmZzZXQgPSBvZmZzZXQ7Cj4gPiAtCXBsYW5lX3N0 YXRlLT5jb2xvcl9wbGFuZVsxXS54ID0geCAqIGhzdWIgKyBzcmNfeCAlIGhzdWI7Cj4gPiAtCXBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS55ID0geSAqIHZzdWIgKyBzcmNfeSAlIHZzdWI7Cj4g PiArCWZvciAoY2NzID0gZmItPmZvcm1hdC0+bnVtX3BsYW5lcyAvIDI7IGNjcyA8IGZiLT5mb3Jt YXQtPm51bV9wbGFuZXM7IGNjcysrKSB7Cj4gPiArCQlpbnQgaHN1YiwgdnN1YjsKPiA+ICsJCWlu dCBtYWluX2hzdWIsIG1haW5fdnN1YjsKPiA+ICsJCWludCB4LCB5Owo+ID4gKwo+ID4gKwkJaW50 ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKCZoc3ViLCAmdnN1YiwgZmIsIGNjcyk7Cj4gPiAr CQlpbnRlbF9mYl9wbGFuZV9nZXRfc3Vic2FtcGxpbmcoJm1haW5faHN1YiwgJm1haW5fdnN1Yiwg ZmIsIChjY3MgLSAxKS8gMik7Cj4gPiArCj4gPiArCQloc3ViIC89IG1haW5faHN1YjsKPiA+ICsJ CXZzdWIgLz0gbWFpbl92c3ViOwo+ID4gKwkJeCA9IHNyY194IC8gaHN1YjsKPiA+ICsJCXkgPSBz cmNfeSAvIHZzdWI7Cj4gPiAgCj4gPiArCQlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIHBs YW5lX3N0YXRlLCBjY3MpOwo+ID4gKwkJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9hbGln bmVkX29mZnNldCgmeCwgJnksCj4gPiArCQkJCQkJCSAgICBwbGFuZV9zdGF0ZSwgY2NzKTsKPiA+ ICsJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NdLm9mZnNldCA9IG9mZnNldDsKPiA+ICsJ CXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NdLnggPSB4ICogaHN1YiArIHNyY194ICUgaHN1 YjsKPiA+ICsJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NdLnkgPSB5ICogdnN1YiArIHNy Y195ICUgdnN1YjsKPiA+ICsJfQo+ID4gIAlyZXR1cm4gMDsKPiA+ICB9Cj4gPiAgCj4gPiBAQCAt MzYxOSw2ICszNzU2LDcgQEAgaW50IHNrbF9jaGVja19wbGFuZV9zdXJmYWNlKHN0cnVjdCBpbnRl bF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gPiAgewo+ID4gIAljb25zdCBzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwo+ID4gIAlpbnQgcmV0Owo+ ID4gKwlib29sIG5lZWRzX2F1eCA9IGZhbHNlOwo+ID4gIAo+ID4gIAlyZXQgPSBpbnRlbF9wbGFu ZV9jb21wdXRlX2d0dChwbGFuZV9zdGF0ZSk7Cj4gPiAgCWlmIChyZXQpCj4gPiBAQCAtMzYyOCwy MSArMzc2NiwzMSBAQCBpbnQgc2tsX2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3RydWN0IGludGVsX3Bs YW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiA+ICAJCXJldHVybiAwOwo+ID4gIAo+ID4gIAkvKgo+ ID4gLQkgKiBIYW5kbGUgdGhlIEFVWCBzdXJmYWNlIGZpcnN0IHNpbmNlCj4gPiAtCSAqIHRoZSBt YWluIHN1cmZhY2Ugc2V0dXAgZGVwZW5kcyBvbiBpdC4KPiA+ICsJICogSGFuZGxlIHRoZSBBVVgg c3VyZmFjZSBmaXJzdCBzaW5jZSB0aGUgbWFpbiBzdXJmYWNlIHNldHVwIGRlcGVuZHMgb24KPiA+ ICsJICogaXQuCj4gPiAgCSAqLwo+ID4gLQlpZiAoZHJtX2Zvcm1hdF9pbmZvX2lzX3l1dl9zZW1p cGxhbmFyKGZiLT5mb3JtYXQpKSB7Cj4gPiAtCQlyZXQgPSBza2xfY2hlY2tfbnYxMl9hdXhfc3Vy ZmFjZShwbGFuZV9zdGF0ZSk7Cj4gPiArCWlmIChpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVy KSkgewo+ID4gKwkJbmVlZHNfYXV4ID0gdHJ1ZTsKPiA+ICsJCXJldCA9IHNrbF9jaGVja19jY3Nf YXV4X3N1cmZhY2UocGxhbmVfc3RhdGUpOwo+ID4gIAkJaWYgKHJldCkKPiA+ICAJCQlyZXR1cm4g cmV0Owo+ID4gLQl9IGVsc2UgaWYgKGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpKSB7Cj4g PiAtCQlyZXQgPSBza2xfY2hlY2tfY2NzX2F1eF9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKPiA+ICsJ fQo+ID4gKwo+ID4gKwlpZiAoZHJtX2Zvcm1hdF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGZiLT5m b3JtYXQpKSB7Cj4gPiArCQluZWVkc19hdXggPSB0cnVlOwo+ID4gKwkJcmV0ID0gc2tsX2NoZWNr X252MTJfYXV4X3N1cmZhY2UocGxhbmVfc3RhdGUpOwo+ID4gIAkJaWYgKHJldCkKPiA+ICAJCQly ZXR1cm4gcmV0Owo+ID4gLQl9IGVsc2Ugewo+ID4gLQkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5l WzFdLm9mZnNldCA9IH4weGZmZjsKPiA+IC0JCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS54 ID0gMDsKPiA+IC0JCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS55ID0gMDsKPiA+ICsJfQo+ ID4gKwo+ID4gKwlpZiAoIW5lZWRzX2F1eCkgewo+ID4gKwkJaW50IGk7Cj4gPiArCj4gPiArCQlm b3IgKGkgPSAxOyBpIDwgZmItPmZvcm1hdC0+bnVtX3BsYW5lczsgaSsrKSB7Cj4gPiArCQkJcGxh bmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ldLm9mZnNldCA9IH4weGZmZjsKPiA+ICsJCQlwbGFuZV9z dGF0ZS0+Y29sb3JfcGxhbmVbaV0ueCA9IDA7Cj4gPiArCQkJcGxhbmVfc3RhdGUtPmNvbG9yX3Bs YW5lW2ldLnkgPSAwOwo+ID4gKwkJfQo+ID4gIAl9Cj4gPiAgCj4gPiAgCXJldCA9IHNrbF9jaGVj a19tYWluX3N1cmZhY2UocGxhbmVfc3RhdGUpOwo+ID4gQEAgLTQwMzAsNyArNDE3OCw3IEBAIHN0 YXRpYyB1bnNpZ25lZCBpbnQgc2tsX3BsYW5lX3N0cmlkZV9tdWx0KGNvbnN0IHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIKPiA+ICpmYiwKPiA+ICAJICogVGhlIHN0cmlkZSBpcyBlaXRoZXIgZXhwcmVz c2VkIGFzIGEgbXVsdGlwbGUgb2YgNjQgYnl0ZXMgY2h1bmtzIGZvcgo+ID4gIAkgKiBsaW5lYXIg YnVmZmVycyBvciBpbiBudW1iZXIgb2YgdGlsZXMgZm9yIHRpbGVkIGJ1ZmZlcnMuCj4gPiAgCSAq Lwo+ID4gLQlpZiAoaXNfc3VyZmFjZV9saW5lYXIoZmItPm1vZGlmaWVyLCBjb2xvcl9wbGFuZSkp Cj4gPiArCWlmIChpc19zdXJmYWNlX2xpbmVhcihmYiwgY29sb3JfcGxhbmUpKQo+ID4gIAkJcmV0 dXJuIDY0Owo+ID4gIAllbHNlIGlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkK PiA+ICAJCXJldHVybiBpbnRlbF90aWxlX2hlaWdodChmYiwgY29sb3JfcGxhbmUpOwo+ID4gQEAg LTQxNjAsNiArNDMwOCw4IEBAIHN0YXRpYyB1MzIgc2tsX3BsYW5lX2N0bF90aWxpbmcodTY0IGZi X21vZGlmaWVyKQo+ID4gIAkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZIHwKPiA+ICAJCSAgICAg ICBQTEFORV9DVExfUkVOREVSX0RFQ09NUFJFU1NJT05fRU5BQkxFIHwKPiA+ICAJCSAgICAgICBQ TEFORV9DVExfQ0xFQVJfQ09MT1JfRElTQUJMRTsKPiA+ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0Rf WV9USUxFRF9HRU4xMl9NQ19DQ1M6Cj4gPiArCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1kgfCBQ TEFORV9DVExfTUVESUFfREVDT01QUkVTU0lPTl9FTkFCTEU7Cj4gPiAgCWNhc2UgSTkxNV9GT1JN QVRfTU9EX1lmX1RJTEVEOgo+ID4gIAkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZRjsKPiA+ICAJ Y2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgo+ID4gQEAgLTk5NjgsNiArMTAxMTgs OCBAQCBza3lsYWtlX2dldF9pbml0aWFsX3BsYW5lX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0YywKPiA+ICAJCQlmYi0+bW9kaWZpZXIgPSBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEyID8K PiA+ICAJCQkJSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTIDoKPiA+ICAJCQkJ STkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOwo+ID4gKwkJZWxzZSBpZiAodmFsICYgUExBTkVf Q1RMX01FRElBX0RFQ09NUFJFU1NJT05fRU5BQkxFKQo+ID4gKwkJCWZiLT5tb2RpZmllciA9IEk5 MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUzsKPiA+ICAJCWVsc2UKPiA+ICAJCQlm Yi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDsKPiA+ICAJCWJyZWFrOwo+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90 eXBlcy5oCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90 eXBlcy5oCj4gPiBpbmRleCA5NzY2NjlmMDFhOGMuLjU5OThiOTU5MjI1YyAxMDA2NDQKPiA+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCj4g PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMu aAo+ID4gQEAgLTUzMCw3ICs1MzAsNyBAQCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgewo+ID4g IAkJICovCj4gPiAgCQl1MzIgc3RyaWRlOwo+ID4gIAkJaW50IHgsIHk7Cj4gPiAtCX0gY29sb3Jf cGxhbmVbMl07Cj4gPiArCX0gY29sb3JfcGxhbmVbNF07Cj4gPiAgCj4gPiAgCS8qIHBsYW5lIGNv bnRyb2wgcmVnaXN0ZXIgKi8KPiA+ICAJdTMyIGN0bDsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5jCj4gPiBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmMKPiA+IGluZGV4IDliOWI0MWIwZmM5MS4uNzg4 ZDBmYzhkOGVmIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9zcHJpdGUuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9zcHJpdGUuYwo+ID4gQEAgLTUzMiwxMSArNTMyLDEzIEBAIHNrbF9wcm9ncmFtX3BsYW5lKHN0 cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKPiA+ICAJZW51bSBwbGFuZV9pZCBw bGFuZV9pZCA9IHBsYW5lLT5pZDsKPiA+ICAJZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlwZTsK PiA+ICsJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFz ZS5mYjsKPiA+ICsJaW50IGF1eF9wbGFuZSA9IGZiLT5mb3JtYXQtPm51bV9wbGFuZXMgLyAyICsg Y29sb3JfcGxhbmU7Cj4gPiAgCWNvbnN0IHN0cnVjdCBkcm1faW50ZWxfc3ByaXRlX2NvbG9ya2V5 ICprZXkgPSAmcGxhbmVfc3RhdGUtPmNrZXk7Cj4gPiAgCXUzMiBzdXJmX2FkZHIgPSBwbGFuZV9z dGF0ZS0+Y29sb3JfcGxhbmVbY29sb3JfcGxhbmVdLm9mZnNldDsKPiA+ICAJdTMyIHN0cmlkZSA9 IHNrbF9wbGFuZV9zdHJpZGUocGxhbmVfc3RhdGUsIGNvbG9yX3BsYW5lKTsKPiA+IC0JdTMyIGF1 eF9kaXN0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzFdLm9mZnNldCAtIHN1cmZfYWRkcjsK PiA+IC0JdTMyIGF1eF9zdHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKHBsYW5lX3N0YXRlLCAxKTsK PiA+ICsJdTMyIGF1eF9kaXN0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1eF9wbGFuZV0u b2Zmc2V0IC0gc3VyZl9hZGRyOwo+ID4gKwl1MzIgYXV4X3N0cmlkZSA9IHNrbF9wbGFuZV9zdHJp ZGUocGxhbmVfc3RhdGUsIGF1eF9wbGFuZSk7Cj4gPiAgCWludCBjcnRjX3ggPSBwbGFuZV9zdGF0 ZS0+YmFzZS5kc3QueDE7Cj4gPiAgCWludCBjcnRjX3kgPSBwbGFuZV9zdGF0ZS0+YmFzZS5kc3Qu eTE7Cj4gPiAgCXUzMiB4ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2NvbG9yX3BsYW5lXS54 Owo+ID4gQEAgLTU0NCw3ICs1NDYsNiBAQCBza2xfcHJvZ3JhbV9wbGFuZShzdHJ1Y3QgaW50ZWxf cGxhbmUgKnBsYW5lLAo+ID4gIAl1MzIgc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3Rh dGUtPmJhc2Uuc3JjKSA+PiAxNjsKPiA+ICAJdTMyIHNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZw bGFuZV9zdGF0ZS0+YmFzZS5zcmMpID4+IDE2Owo+ID4gIAlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmxp bmtlZCA9IHBsYW5lX3N0YXRlLT5wbGFuYXJfbGlua2VkX3BsYW5lOwo+ID4gLQljb25zdCBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwo+ID4gIAl1OCBh bHBoYSA9IHBsYW5lX3N0YXRlLT5iYXNlLmFscGhhID4+IDg7Cj4gPiAgCXUzMiBwbGFuZV9jb2xv cl9jdGwgPSAwOwo+ID4gIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwo+ID4gQEAgLTYxOSw4ICs2 MjAsOCBAQCBza2xfcHJvZ3JhbV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+ID4g IAo+ID4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDExKQo+ID4gIAkJSTkxNV9XUklURV9G VyhQTEFORV9BVVhfT0ZGU0VUKHBpcGUsIHBsYW5lX2lkKSwKPiA+IC0JCQkgICAgICAocGxhbmVf c3RhdGUtPmNvbG9yX3BsYW5lWzFdLnkgPDwgMTYpIHwKPiA+IC0JCQkgICAgICBwbGFuZV9zdGF0 ZS0+Y29sb3JfcGxhbmVbMV0ueCk7Cj4gPiArCQkJICAgICAgKHBsYW5lX3N0YXRlLT5jb2xvcl9w bGFuZVthdXhfcGxhbmVdLnkgPDwgMTYpIHwKPiA+ICsJCQkgICAgICBwbGFuZV9zdGF0ZS0+Y29s b3JfcGxhbmVbYXV4X3BsYW5lXS54KTsKPiA+ICAKPiA+ICAJLyoKPiA+ICAJICogVGhlIGNvbnRy b2wgcmVnaXN0ZXIgc2VsZi1hcm1zIGlmIHRoZSBwbGFuZSB3YXMgcHJldmlvdXNseQo+ID4gQEAg LTE3MzcsNyArMTczOCw4IEBAIHN0YXRpYyBpbnQgc2tsX3BsYW5lX2NoZWNrX2ZiKGNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gIAkgICAgIGZiLT5tb2RpZmll ciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQgfHwKPiA+ICAJICAgICBmYi0+bW9kaWZpZXIg PT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTIHx8Cj4gPiAgCSAgICAgZmItPm1vZGlmaWVy ID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1MgfHwKPiA+IC0JICAgICBmYi0+bW9kaWZp ZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTKSkgewo+ID4gKwkgICAg IGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1MgfHwK PiA+ICsJICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJf TUNfQ0NTKSkgewo+ID4gIAkJRFJNX0RFQlVHX0tNUygiWS9ZZiB0aWxpbmcgbm90IHN1cHBvcnRl ZCBpbiBJRi1JRCBtb2RlXG4iKTsKPiA+ICAJCXJldHVybiAtRUlOVkFMOwo+ID4gIAl9Cj4gPiBA QCAtMjE0OSw3ICsyMTUxLDE2IEBAIHN0YXRpYyBjb25zdCB1NjQgc2tsX3BsYW5lX2Zvcm1hdF9t b2RpZmllcnNfY2NzW10gPSB7Cj4gPiAgCURSTV9GT1JNQVRfTU9EX0lOVkFMSUQKPiA+ICB9Owo+ ID4gIAo+ID4gLXN0YXRpYyBjb25zdCB1NjQgZ2VuMTJfcGxhbmVfZm9ybWF0X21vZGlmaWVyc19j Y3NbXSA9IHsKPiA+ICtzdGF0aWMgY29uc3QgdTY0IGdlbjEyX3BsYW5lX2Zvcm1hdF9tb2RpZmll cnNfbWNfY2NzW10gPSB7Cj4gPiArCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0ND UywKPiA+ICsJSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTLAo+ID4gKwlJOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRCwKPiA+ICsJSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCj4gPiAr CURSTV9GT1JNQVRfTU9EX0xJTkVBUiwKPiA+ICsJRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAo+ID4g K307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHU2NCBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kaWZp ZXJzX3JjX2Njc1tdID0gewo+ID4gIAlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19D Q1MsCj4gPiAgCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVELAo+ID4gIAlJOTE1X0ZPUk1BVF9NT0Rf WF9USUxFRCwKPiA+IEBAIC0yMzA1LDEwICsyMzE2LDIxIEBAIHN0YXRpYyBib29sIHNrbF9wbGFu ZV9mb3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCj4gPiAgCX0K PiA+ICB9Cj4gPiAgCj4gPiArc3RhdGljIGJvb2wgZ2VuMTJfcGxhbmVfc3VwcG9ydHNfbWNfY2Nz KGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCj4gPiArewo+ID4gKwlyZXR1cm4gcGxhbmVfaWQgPCBQ TEFORV9TUFJJVEU0Owo+ID4gK30KPiA+ICsKPiA+ICBzdGF0aWMgYm9vbCBnZW4xMl9wbGFuZV9m b3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCj4gPiAgCQkJCQkg ICAgIHUzMiBmb3JtYXQsIHU2NCBtb2RpZmllcikKPiA+ICB7Cj4gPiArCXN0cnVjdCBpbnRlbF9w bGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShfcGxhbmUpOwo+ID4gKwo+ID4gIAlzd2l0Y2gg KG1vZGlmaWVyKSB7Cj4gPiArCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNf Q0NTOgo+ID4gKwkJaWYgKCFnZW4xMl9wbGFuZV9zdXBwb3J0c19tY19jY3MocGxhbmUtPmlkKSkK PiA+ICsJCQlyZXR1cm4gZmFsc2U7Cj4gPiArCQkvKiBmYWxsIHRocm91Z2ggKi8KPiA+ICAJY2Fz ZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6Cj4gPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElM RUQ6Cj4gPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6Cj4gPiBAQCAtMjMyNiwxNCAr MjM0OCwxNyBAQCBzdGF0aWMgYm9vbCBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZChz dHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCj4gPiAgCQlpZiAoaXNfY2NzX21vZGlmaWVyKG1vZGlm aWVyKSkKPiA+ICAJCQlyZXR1cm4gdHJ1ZTsKPiA+ICAJCS8qIGZhbGwgdGhyb3VnaCAqLwo+ID4g LQljYXNlIERSTV9GT1JNQVRfUkdCNTY1Ogo+ID4gLQljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEw MTA6Cj4gPiAtCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKPiA+ICAJY2FzZSBEUk1fRk9S TUFUX1lVWVY6Cj4gPiAgCWNhc2UgRFJNX0ZPUk1BVF9ZVllVOgo+ID4gIAljYXNlIERSTV9GT1JN QVRfVVlWWToKPiA+ICAJY2FzZSBEUk1fRk9STUFUX1ZZVVk6Cj4gPiArCQlpZiAobW9kaWZpZXIg PT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTKQo+ID4gKwkJCXJldHVybiB0 cnVlOwo+ID4gKwkJLyogZmFsbCB0aHJvdWdoICovCj4gPiAgCWNhc2UgRFJNX0ZPUk1BVF9OVjEy Ogo+ID4gKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1Ogo+ID4gKwljYXNlIERSTV9GT1JNQVRfWFJH QjIxMDEwMTA6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKPiA+ICAJY2FzZSBE Uk1fRk9STUFUX1AwMTA6Cj4gPiAgCWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgo+ID4gIAljYXNlIERS TV9GT1JNQVRfUDAxNjoKPiA+IEBAIC0yNDcwLDYgKzI0OTUsMTQgQEAgc3RhdGljIGNvbnN0IHUz MiAqaWNsX2dldF9wbGFuZV9mb3JtYXRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4gPiAqZGV2 X3ByaXYsCj4gPiAgCX0KPiA+ICB9Cj4gPiAgCj4gPiArc3RhdGljIGNvbnN0IHU2NCAqZ2VuMTJf Z2V0X3BsYW5lX21vZGlmaWVycyhlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQo+ID4gK3sKPiA+ICsJ aWYgKGdlbjEyX3BsYW5lX3N1cHBvcnRzX21jX2NjcyhwbGFuZV9pZCkpCj4gPiArCQlyZXR1cm4g Z2VuMTJfcGxhbmVfZm9ybWF0X21vZGlmaWVyc19tY19jY3M7Cj4gPiArCWVsc2UKPiA+ICsJCXJl dHVybiBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX3JjX2NjczsKPiA+ICt9Cj4gPiArCj4g PiAgc3RhdGljIGJvb2wgc2tsX3BsYW5lX2hhc19jY3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAo+ID4gIAkJCSAgICAgIGVudW0gcGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBs YW5lX2lkKQo+ID4gIHsKPiA+IEBAIC0yNTM2LDcgKzI1NjksNyBAQCBza2xfdW5pdmVyc2FsX3Bs YW5lX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiAgCj4gPiAg CXBsYW5lLT5oYXNfY2NzID0gc2tsX3BsYW5lX2hhc19jY3MoZGV2X3ByaXYsIHBpcGUsIHBsYW5l X2lkKTsKPiA+ICAJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTIpIHsKPiA+IC0JCW1vZGlm aWVycyA9IGdlbjEyX3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNfY2NzOwo+ID4gKwkJbW9kaWZpZXJz ID0gZ2VuMTJfZ2V0X3BsYW5lX21vZGlmaWVycyhwbGFuZV9pZCk7Cj4gPiAgCQlwbGFuZV9mdW5j cyA9ICZnZW4xMl9wbGFuZV9mdW5jczsKPiA+ICAJfSBlbHNlIHsKPiA+ICAJCWlmIChwbGFuZS0+ aGFzX2NjcykKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ID4gaW5kZXggNTE5Y2ZiMGE1YzQy Li4wMmVhZWY4YWRhYzAgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3JlZy5oCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gPiBAQCAt NjY5Nyw2ICs2Njk3LDcgQEAgZW51bSB7Cj4gPiAgI2RlZmluZSAgIFBMQU5FX0NUTF9USUxFRF9Z CQkJKDQgPDwgMTApCj4gPiAgI2RlZmluZSAgIFBMQU5FX0NUTF9USUxFRF9ZRgkJCSg1IDw8IDEw KQo+ID4gICNkZWZpbmUgICBQTEFORV9DVExfRkxJUF9IT1JJWk9OVEFMCQkoMSA8PCA4KQo+ID4g KyNkZWZpbmUgICBQTEFORV9DVExfTUVESUFfREVDT01QUkVTU0lPTl9FTkFCTEUJKDEgPDwgNCkg LyogVEdMKyAqLwo+ID4gICNkZWZpbmUgICBQTEFORV9DVExfQUxQSEFfTUFTSwkJCSgweDMgPDwg NCkgLyogUHJlLUdMSyAqLwo+ID4gICNkZWZpbmUgICBQTEFORV9DVExfQUxQSEFfRElTQUJMRQkJ KDAgPDwgNCkKPiA+ICAjZGVmaW5lICAgUExBTkVfQ1RMX0FMUEhBX1NXX1BSRU1VTFRJUExZCSgy IDw8IDQpCj4gPiAtLSAKPiA+IDIuMTcuMQo+ID4gCj4gPiBfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+ID4g SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKPiAKPiAKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==