From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 04/11] drm/i915: Move workarounds from init_clock_gating Date: Wed, 11 Oct 2017 21:35:41 +0300 Message-ID: <20171011183541.GB10981@intel.com> References: <1507745721-4094-1-git-send-email-oscar.mateo@intel.com> <1507745721-4094-5-git-send-email-oscar.mateo@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9FD7D6E0CE for ; Wed, 11 Oct 2017 18:35:45 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1507745721-4094-5-git-send-email-oscar.mateo@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Oscar Mateo Cc: intel-gfx@lists.freedesktop.org, Rodrigo Vivi List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBPY3QgMTEsIDIwMTcgYXQgMTE6MTU6MTRBTSAtMDcwMCwgT3NjYXIgTWF0ZW8gd3Jv dGU6Cj4gSSdtIG5vdCBzdXJlIHdoeSBzb21lIFdBcyBoYXZlIGhpc3RvcmljYWxseSBiZWVuIGFw cGxpZWQgaW4gaW5pdF9jbG9ja19nYXRpbmcKPiBhbmQgc29tZSBvdGhlcnMgaW4gdGhlIGVuZ2lu ZSBzZXR1cCAoR1QgdnMuIGRpc3BsYXk/IGNvbnRleHQgdnMuIGdsb2JhbAo+IHJlZ2lzdGVycz8p IGJ1dCBpdCBkb2VzIG5vdCBsb29rIGxpa2UgdGhlIGJlc3QgcGxhY2UgdG8gYXBwbHkgd29ya2Fy b3VuZHM6Cj4gdGhlIG5hbWUgaXMgY29uZnVzaW5nLCBpdCdzIGEgZGlzcGxheSBmdW5jdGlvbiAo ZXZlbiB0aG91Z2ggc29tZSBHVCBXQXMKPiBhbHNvIGdvIGhlcmUpIGFuZCBpdCBpc24ndCBuZWNl c3NhcmlseSBjYWxsZWQgb24gYSBHUFUgcmVzZXQuIFRoaXMgcGF0Y2gKPiBtb3ZlcyB0aGVzZSBX QXMgdG8gdGhlaXIgcmlnaHRmdWwgcGxhY2UgaW5zaWRlIGk5MTVfd29ya2Fyb3VuZHMuYy4KPiAK PiBUT0RPOiBEbyB3ZSB3YW50IHRvIGtlZXAgZGlzcGxheSBXQXMgc2VwYXJhdGVkIGZyb20gR1Qg b25lcz8gSW4gdGhhdCBjYXNlLAo+IEkgd291bGQgcHJvcG9zZSBhbm90aGVyIGNhdGVnb3J5IGlu c2lkZSBpOTE1X3dvcmthcm91bmRzLmMgKGJ1dCBJIHdvdWxkIG5lZWQKPiBoZWxwIGRlY2lkaW5n IHdoYXQgZ29lcyB3aGVyZSkuCgpUaGUgY3VycmVudCBzaXR1YXRpb24gaXNuJ3QgdmVyeSBnb29k LiBCdXQgbmVpdGhlciByZWFsbHkgaXMgbW92aW5nCmRpc3BsYXkgc3R1ZmYgaW50byBzb21ldGhp bmcgY2FsbGVkIGdlbV9pbml0X2h3KCkuIEl0IGFsc28gZ2V0cyBjYWxsZWQKZHVyaW5nIEdQVSBy ZXNldCB3aGljaCBpcyBhdCB0aGUgdmVyeSBsZWFzdCB3YXN0ZWQgZWZmb3J0IHdoZW4gaXQgY29t ZXMKdG8gZGlzcGxheSB3L2FzLCBhbmQgY291bGQgZXZlbiBiZSBhY3RpdmVseSBoYXJtZnVsIGlu IGNhc2Ugd2UgZW5kIHVwCmNsb2JiZXJpbmcgc29tZXRoaW5nIHRoZSBjdXJyZW50IGRpc3BsYXkg Y29uZmlndXJhdGlvbiBkZXBlbmRzIG9uLgoKPiAKPiB2MjoKPiAgIC0gQWxzbyBtb3ZlIGJkdyBh bmQgY2h2IFdBcyBmcm9tIGluaXRfY2xvY2tfZ2F0aW5nIHRoYXQgZG8gbm90IHNlZW0gdG8gYmUK PiAgICAgYWN0dWFsbHkgcmVsYXRlZCB0byBjbG9jayBnYXRpbmcuCj4gICAtIFJlYmFzZWQuCj4g Cj4gU2lnbmVkLW9mZi1ieTogT3NjYXIgTWF0ZW8gPG9zY2FyLm1hdGVvQGludGVsLmNvbT4KPiBD YzogUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwuY29tPgo+IENjOiBDaHJpcyBXaWxz b24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiBDYzogTWlrYSBLdW9wcGFsYSA8bWlrYS5r dW9wcGFsYUBsaW51eC5pbnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3BtLmMgICAgICAgICAgfCAyNDMgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5jIHwgMTk1ICsrKysrKysr KysrKysrKysrKysrKysrKy0KPiAgMiBmaWxlcyBjaGFuZ2VkLCAyMDIgaW5zZXJ0aW9ucygrKSwg MjM2IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+IGluZGV4IDJmY2Zm OTcuLjAyNGVlOTQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0u Ywo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKPiBAQCAtNTYsMTAxICs1 Niw2IEBACj4gICNkZWZpbmUgSU5URUxfUkM2cF9FTkFCTEUJCQkoMTw8MSkKPiAgI2RlZmluZSBJ TlRFTF9SQzZwcF9FTkFCTEUJCQkoMTw8MikKPiAgCj4gLXN0YXRpYyB2b2lkIGdlbjlfaW5pdF9j bG9ja19nYXRpbmcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlp ZiAoSEFTX0xMQyhkZXZfcHJpdikpIHsKPiAtCQkvKgo+IC0JCSAqIFdhQ29tcHJlc3NlZFJlc291 cmNlRGlzcGxheU5ld0hhc2hNb2RlOnNrbCxrYmwKPiAtCQkgKiBEaXNwbGF5IFdBIzAzOTA6IHNr bCxrYmwKPiAtCQkgKgo+IC0JCSAqIE11c3QgbWF0Y2ggU2FtcGxlciwgUGl4ZWwgQmFjayBFbmQs IGFuZCBNZWRpYS4gU2VlCj4gLQkJICogV2FDb21wcmVzc2VkUmVzb3VyY2VTYW1wbGVyUGJlTWVk aWFOZXdIYXNoTW9kZS4KPiAtCQkgKi8KPiAtCQlJOTE1X1dSSVRFKENISUNLRU5fUEFSMV8xLAo+ IC0JCQkgICBJOTE1X1JFQUQoQ0hJQ0tFTl9QQVIxXzEpIHwKPiAtCQkJICAgU0tMX0RFX0NPTVBS RVNTRURfSEFTSF9NT0RFKTsKPiAtCX0KPiAtCj4gLQkvKiBTZWUgQnNwZWMgbm90ZSBmb3IgUFNS Ml9DVEwgYml0IDMxLCBXYSM4Mjg6c2tsLGJ4dCxrYmwsY2ZsICovCj4gLQlJOTE1X1dSSVRFKENI SUNLRU5fUEFSMV8xLAo+IC0JCSAgIEk5MTVfUkVBRChDSElDS0VOX1BBUjFfMSkgfCBTS0xfRURQ X1BTUl9GSVhfUkRXUkFQKTsKPiAtCj4gLQlJOTE1X1dSSVRFKEdFTjhfQ09ORklHMCwKPiAtCQkg ICBJOTE1X1JFQUQoR0VOOF9DT05GSUcwKSB8IEdFTjlfREVGQVVMVF9GSVhFUyk7Cj4gLQo+IC0J LyogV2FFbmFibGVDaGlja2VuRENQUjpza2wsYnh0LGtibCxnbGssY2ZsICovCj4gLQlJOTE1X1dS SVRFKEdFTjhfQ0hJQ0tFTl9EQ1BSXzEsCj4gLQkJICAgSTkxNV9SRUFEKEdFTjhfQ0hJQ0tFTl9E Q1BSXzEpIHwgTUFTS19XQUtFTUVNKTsKPiAtCj4gLQkvKiBXYUZiY1R1cm5PZmZGYmNXYXRlcm1h cms6c2tsLGJ4dCxrYmwsY2ZsICovCj4gLQkvKiBXYUZiY1dha2VNZW1Pbjpza2wsYnh0LGtibCxn bGssY2ZsICovCj4gLQlJOTE1X1dSSVRFKERJU1BfQVJCX0NUTCwgSTkxNV9SRUFEKERJU1BfQVJC X0NUTCkgfAo+IC0JCSAgIERJU1BfRkJDX1dNX0RJUyB8Cj4gLQkJICAgRElTUF9GQkNfTUVNT1JZ X1dBS0UpOwo+IC0KPiAtCS8qIFdhRmJjSGlnaE1lbUJ3Q29ycnVwdGlvbkF2b2lkYW5jZTpza2ws Ynh0LGtibCxjZmwgKi8KPiAtCUk5MTVfV1JJVEUoSUxLX0RQRkNfQ0hJQ0tFTiwgSTkxNV9SRUFE KElMS19EUEZDX0NISUNLRU4pIHwKPiAtCQkgICBJTEtfRFBGQ19ESVNBQkxFX0RVTU1ZMCk7Cj4g LQo+IC0JaWYgKElTX1NLWUxBS0UoZGV2X3ByaXYpKSB7Cj4gLQkJLyogV2FEaXNhYmxlRG9wQ2xv Y2tHYXRpbmcgKi8KPiAtCQlJOTE1X1dSSVRFKEdFTjdfTUlTQ0NQQ1RMLCBJOTE1X1JFQUQoR0VO N19NSVNDQ1BDVEwpCj4gLQkJCSAgICYgfkdFTjdfRE9QX0NMT0NLX0dBVEVfRU5BQkxFKTsKPiAt CX0KPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgYnh0X2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JZ2VuOV9pbml0X2Nsb2NrX2dhdGlu ZyhkZXZfcHJpdik7Cj4gLQo+IC0JLyogV2FEaXNhYmxlU0RFVW5pdENsb2NrR2F0aW5nOmJ4dCAq Lwo+IC0JSTkxNV9XUklURShHRU44X1VDR0NUTDYsIEk5MTVfUkVBRChHRU44X1VDR0NUTDYpIHwK PiAtCQkgICBHRU44X1NERVVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKPiAtCj4gLQkvKgo+IC0J ICogRklYTUU6Cj4gLQkgKiBHRU44X0hEQ1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFX0hEQ1JFUSBh cHBsaWVzIG9uIDN4NiBHVCBTS1VzIG9ubHkuCj4gLQkgKi8KPiAtCUk5MTVfV1JJVEUoR0VOOF9V Q0dDVEw2LCBJOTE1X1JFQUQoR0VOOF9VQ0dDVEw2KSB8Cj4gLQkJICAgR0VOOF9IRENVTklUX0NM T0NLX0dBVEVfRElTQUJMRV9IRENSRVEpOwo+IC0KPiAtCS8qCj4gLQkgKiBXYTogQmFja2xpZ2h0 IFBXTSBtYXkgc3RvcCBpbiB0aGUgYXNzZXJ0ZWQgc3RhdGUsIGNhdXNpbmcgYmFja2xpZ2h0Cj4g LQkgKiB0byBzdGF5IGZ1bGx5IG9uLgo+IC0JICovCj4gLQlJOTE1X1dSSVRFKEdFTjlfQ0xLR0FU RV9ESVNfMCwgSTkxNV9SRUFEKEdFTjlfQ0xLR0FURV9ESVNfMCkgfAo+IC0JCSAgIFBXTTFfR0FU SU5HX0RJUyB8IFBXTTJfR0FUSU5HX0RJUyk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGdsa19p bml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsK PiAtCXUzMiB2YWw7Cj4gLQlnZW45X2luaXRfY2xvY2tfZ2F0aW5nKGRldl9wcml2KTsKPiAtCj4g LQkvKgo+IC0JICogV2FEaXNhYmxlUFdNQ2xvY2tHYXRpbmc6Z2xrCj4gLQkgKiBCYWNrbGlnaHQg UFdNIG1heSBzdG9wIGluIHRoZSBhc3NlcnRlZCBzdGF0ZSwgY2F1c2luZyBiYWNrbGlnaHQKPiAt CSAqIHRvIHN0YXkgZnVsbHkgb24uCj4gLQkgKi8KPiAtCUk5MTVfV1JJVEUoR0VOOV9DTEtHQVRF X0RJU18wLCBJOTE1X1JFQUQoR0VOOV9DTEtHQVRFX0RJU18wKSB8Cj4gLQkJICAgUFdNMV9HQVRJ TkdfRElTIHwgUFdNMl9HQVRJTkdfRElTKTsKPiAtCj4gLQkvKiBXYURESUlPVGltZW91dDpnbGsg Ki8KPiAtCWlmIChJU19HTEtfUkVWSUQoZGV2X3ByaXYsIDAsIEdMS19SRVZJRF9BMSkpIHsKPiAt CQl1MzIgdmFsID0gSTkxNV9SRUFEKENISUNLRU5fTUlTQ18yKTsKPiAtCQl2YWwgJj0gfihHTEtf Q0wwX1BXUl9ET1dOIHwKPiAtCQkJIEdMS19DTDFfUFdSX0RPV04gfAo+IC0JCQkgR0xLX0NMMl9Q V1JfRE9XTik7Cj4gLQkJSTkxNV9XUklURShDSElDS0VOX01JU0NfMiwgdmFsKTsKPiAtCX0KPiAt Cj4gLQkvKiBEaXNwbGF5IFdBICMxMTMzOiBXYUZiY1NraXBTZWdtZW50czpnbGsgKi8KPiAtCXZh bCA9IEk5MTVfUkVBRChJTEtfRFBGQ19DSElDS0VOKTsKPiAtCXZhbCAmPSB+R0xLX1NLSVBfU0VH X0NPVU5UX01BU0s7Cj4gLQl2YWwgfD0gR0xLX1NLSVBfU0VHX0VOIHwgR0xLX1NLSVBfU0VHX0NP VU5UKDEpOwo+IC0JSTkxNV9XUklURShJTEtfRFBGQ19DSElDS0VOLCB2YWwpOwo+IC19Cj4gLQo+ ICBzdGF0aWMgdm9pZCBpOTE1X3BpbmV2aWV3X2dldF9tZW1fZnJlcShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCj4gIHsKPiAgCXUzMiB0bXA7Cj4gQEAgLTg1MDUsMTEwICs4NDEw LDEwIEBAIHN0YXRpYyB2b2lkIGNucF9pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAkJICAgQ05QX1BXTV9DR0VfR0FUSU5HX0RJU0FCTEUpOwo+ ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBjbmxfaW5pdF9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQl1MzIgdmFsOwo+IC0JY25wX2luaXRfY2xv Y2tfZ2F0aW5nKGRldl9wcml2KTsKPiAtCj4gLQkvKiBUaGlzIGlzIG5vdCBhbiBXYS4gRW5hYmxl IGZvciBiZXR0ZXIgaW1hZ2UgcXVhbGl0eSAqLwo+IC0JSTkxNV9XUklURShfM0RfQ0hJQ0tFTjMs Cj4gLQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKF8zRF9DSElDS0VOM19BQV9MSU5FX1FVQUxJVFlf RklYX0VOQUJMRSkpOwo+IC0KPiAtCS8qIFdhRW5hYmxlQ2hpY2tlbkRDUFI6Y25sICovCj4gLQlJ OTE1X1dSSVRFKEdFTjhfQ0hJQ0tFTl9EQ1BSXzEsCj4gLQkJICAgSTkxNV9SRUFEKEdFTjhfQ0hJ Q0tFTl9EQ1BSXzEpIHwgTUFTS19XQUtFTUVNKTsKPiAtCj4gLQkvKiBXYUZiY1dha2VNZW1Pbjpj bmwgKi8KPiAtCUk5MTVfV1JJVEUoRElTUF9BUkJfQ1RMLCBJOTE1X1JFQUQoRElTUF9BUkJfQ1RM KSB8Cj4gLQkJICAgRElTUF9GQkNfTUVNT1JZX1dBS0UpOwo+IC0KPiAtCS8qIFdhU2FyYlVuaXRD bG9ja0dhdGluZ0Rpc2FibGU6Y25sIChwcmUtcHJvZCkgKi8KPiAtCWlmIChJU19DTkxfUkVWSUQo ZGV2X3ByaXYsIENOTF9SRVZJRF9BMCwgQ05MX1JFVklEX0IwKSkKPiAtCQlJOTE1X1dSSVRFKFNM SUNFX1VOSVRfTEVWRUxfQ0xLR0FURSwKPiAtCQkJICAgSTkxNV9SRUFEKFNMSUNFX1VOSVRfTEVW RUxfQ0xLR0FURSkgfAo+IC0JCQkgICBTQVJCVU5JVF9DTEtHQVRFX0RJUyk7Cj4gLQo+IC0JLyog RGlzcGxheSBXQSAjMTEzMzogV2FGYmNTa2lwU2VnbWVudHM6Y25sICovCj4gLQl2YWwgPSBJOTE1 X1JFQUQoSUxLX0RQRkNfQ0hJQ0tFTik7Cj4gLQl2YWwgJj0gfkdMS19TS0lQX1NFR19DT1VOVF9N QVNLOwo+IC0JdmFsIHw9IEdMS19TS0lQX1NFR19FTiB8IEdMS19TS0lQX1NFR19DT1VOVCgxKTsK PiAtCUk5MTVfV1JJVEUoSUxLX0RQRkNfQ0hJQ0tFTiwgdmFsKTsKPiAtfQo+IC0KPiAtc3RhdGlj IHZvaWQgY2ZsX2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKPiAtewo+IC0JY25wX2luaXRfY2xvY2tfZ2F0aW5nKGRldl9wcml2KTsKPiAtCWdlbjlf aW5pdF9jbG9ja19nYXRpbmcoZGV2X3ByaXYpOwo+IC0KPiAtCS8qIFdhRmJjTnVrZU9uSG9zdE1v ZGlmeTpjZmwgKi8KPiAtCUk5MTVfV1JJVEUoSUxLX0RQRkNfQ0hJQ0tFTiwgSTkxNV9SRUFEKElM S19EUEZDX0NISUNLRU4pIHwKPiAtCQkgICBJTEtfRFBGQ19OVUtFX09OX0FOWV9NT0RJRklDQVRJ T04pOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBrYmxfaW5pdF9jbG9ja19nYXRpbmcoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlnZW45X2luaXRfY2xvY2tfZ2F0 aW5nKGRldl9wcml2KTsKPiAtCj4gLQkvKiBXYURpc2FibGVTREVVbml0Q2xvY2tHYXRpbmc6a2Js ICovCj4gLQlpZiAoSVNfS0JMX1JFVklEKGRldl9wcml2LCAwLCBLQkxfUkVWSURfQjApKQo+IC0J CUk5MTVfV1JJVEUoR0VOOF9VQ0dDVEw2LCBJOTE1X1JFQUQoR0VOOF9VQ0dDVEw2KSB8Cj4gLQkJ CSAgIEdFTjhfU0RFVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOwo+IC0KPiAtCS8qIFdhRGlzYWJs ZUdhbUNsb2NrR2F0aW5nOmtibCAqLwo+IC0JaWYgKElTX0tCTF9SRVZJRChkZXZfcHJpdiwgMCwg S0JMX1JFVklEX0IwKSkKPiAtCQlJOTE1X1dSSVRFKEdFTjZfVUNHQ1RMMSwgSTkxNV9SRUFEKEdF TjZfVUNHQ1RMMSkgfAo+IC0JCQkgICBHRU42X0dBTVVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsK PiAtCj4gLQkvKiBXYUZiY051a2VPbkhvc3RNb2RpZnk6a2JsICovCj4gLQlJOTE1X1dSSVRFKElM S19EUEZDX0NISUNLRU4sIEk5MTVfUkVBRChJTEtfRFBGQ19DSElDS0VOKSB8Cj4gLQkJICAgSUxL X0RQRkNfTlVLRV9PTl9BTllfTU9ESUZJQ0FUSU9OKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQg c2tsX2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK PiAtewo+IC0JZ2VuOV9pbml0X2Nsb2NrX2dhdGluZyhkZXZfcHJpdik7Cj4gLQo+IC0JLyogV0FD NmVudHJ5bGF0ZW5jeTpza2wgKi8KPiAtCUk5MTVfV1JJVEUoRkJDX0xMQ19SRUFEX0NUUkwsIEk5 MTVfUkVBRChGQkNfTExDX1JFQURfQ1RSTCkgfAo+IC0JCSAgIEZCQ19MTENfRlVMTFlfT1BFTik7 Cj4gLQo+IC0JLyogV2FGYmNOdWtlT25Ib3N0TW9kaWZ5OnNrbCAqLwo+IC0JSTkxNV9XUklURShJ TEtfRFBGQ19DSElDS0VOLCBJOTE1X1JFQUQoSUxLX0RQRkNfQ0hJQ0tFTikgfAo+IC0JCSAgIElM S19EUEZDX05VS0VfT05fQU5ZX01PRElGSUNBVElPTik7Cj4gLX0KPiAtCj4gIHN0YXRpYyB2b2lk IGJkd19pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cj4gIHsKPiAtCS8qIFRoZSBHVFQgY2FjaGUgbXVzdCBiZSBkaXNhYmxlZCBpZiB0aGUgc3lzdGVt IGlzIHVzaW5nIDJNIHBhZ2VzLiAqLwo+IC0JYm9vbCBjYW5fdXNlX2d0dF9jYWNoZSA9ICFIQVNf UEFHRV9TSVpFUyhkZXZfcHJpdiwKPiAtCQkJCQkJIEk5MTVfR1RUX1BBR0VfU0laRV8yTSk7Cj4g LQllbnVtIHBpcGUgcGlwZTsKPiAtCj4gIAlpbGtfaW5pdF9scF93YXRlcm1hcmtzKGRldl9wcml2 KTsKPiAgCj4gLQkvKiBXYVN3aXRjaFNvbFZmRkFyYml0cmF0aW9uUHJpb3JpdHk6YmR3ICovCj4g LQlJOTE1X1dSSVRFKEdBTV9FQ09DSEssIEk5MTVfUkVBRChHQU1fRUNPQ0hLKSB8IEhTV19FQ09D SEtfQVJCX1BSSU9fU09MKTsKPiAtCj4gLQkvKiBXYVBzckRQQU1hc2tWQmxhbmtJblNSRDpiZHcg Ki8KPiAtCUk5MTVfV1JJVEUoQ0hJQ0tFTl9QQVIxXzEsCj4gLQkJICAgSTkxNV9SRUFEKENISUNL RU5fUEFSMV8xKSB8IERQQV9NQVNLX1ZCTEFOS19TUkQpOwo+IC0KPiAtCS8qIFdhUHNyRFBSU1Vu bWFza1ZCbGFua0luU1JEOmJkdyAqLwo+IC0JZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcGlwZSkg ewo+IC0JCUk5MTVfV1JJVEUoQ0hJQ0tFTl9QSVBFU0xfMShwaXBlKSwKPiAtCQkJICAgSTkxNV9S RUFEKENISUNLRU5fUElQRVNMXzEocGlwZSkpIHwKPiAtCQkJICAgQkRXX0RQUlNfTUFTS19WQkxB TktfU1JEKTsKPiAtCX0KPiAtCj4gLQkvKiBXYVZTUmVmQ291bnRGdWxsZm9yY2VNaXNzRGlzYWJs ZTpiZHcgKi8KPiAtCS8qIFdhRFNSZWZDb3VudEZ1bGxmb3JjZU1pc3NEaXNhYmxlOmJkdyAqLwo+ IC0JSTkxNV9XUklURShHRU43X0ZGX1RIUkVBRF9NT0RFLAo+IC0JCSAgIEk5MTVfUkVBRChHRU43 X0ZGX1RIUkVBRF9NT0RFKSAmCj4gLQkJICAgfihHRU44X0ZGX0RTX1JFRl9DTlRfRkZNRSB8IEdF TjdfRkZfVlNfUkVGX0NOVF9GRk1FKSk7Cj4gLQo+IC0JSTkxNV9XUklURShHRU42X1JDX1NMRUVQ X1BTTUlfQ09OVFJPTCwKPiAtCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoR0VOOF9SQ19TRU1BX0lE TEVfTVNHX0RJU0FCTEUpKTsKPiAtCj4gIAkvKiBXYURpc2FibGVTREVVbml0Q2xvY2tHYXRpbmc6 YmR3ICovCj4gIAlJOTE1X1dSSVRFKEdFTjhfVUNHQ1RMNiwgSTkxNV9SRUFEKEdFTjhfVUNHQ1RM NikgfAo+ICAJCSAgIEdFTjhfU0RFVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOwo+IEBAIC04NjE2 LDE5ICs4NDIxLDEyIEBAIHN0YXRpYyB2b2lkIGJkd19pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAkvKiBXYVByb2dyYW1MM1NxY1JlZzFEZWZh dWx0OmJkdyAqLwo+ICAJZ2VuOF9zZXRfbDNzcWNfY3JlZGl0cyhkZXZfcHJpdiwgMzAsIDIpOwo+ ICAKPiAtCS8qIFdhR3R0Q2FjaGluZ09mZkJ5RGVmYXVsdDpiZHcgKi8KPiAtCUk5MTVfV1JJVEUo SFNXX0dUVF9DQUNIRV9FTiwgY2FuX3VzZV9ndHRfY2FjaGUgPyBHVFRfQ0FDSEVfRU5fQUxMIDog MCk7Cj4gLQo+IC0JLyogV2FLVk1Ob3RpZmljYXRpb25PbkNvbmZpZ0NoYW5nZTpiZHcgKi8KPiAt CUk5MTVfV1JJVEUoQ0hJQ0tFTl9QQVIyXzEsIEk5MTVfUkVBRChDSElDS0VOX1BBUjJfMSkKPiAt CQkgICB8IEtWTV9DT05GSUdfQ0hBTkdFX05PVElGSUNBVElPTl9TRUxFQ1QpOwo+IC0KPiAgCWxw dF9pbml0X2Nsb2NrX2dhdGluZyhkZXZfcHJpdik7Cj4gIAo+ICAJLyogV2FEaXNhYmxlRG9wQ2xv Y2tHYXRpbmc6YmR3Cj4gIAkgKgo+IC0JICogQWxzbyBzZWUgdGhlIENISUNLRU4yIHdyaXRlIGlu IGJkd19pbml0X3dvcmthcm91bmRzKCkgdG8gZGlzYWJsZSBET1AKPiAtCSAqIGNsb2NrIGdhdGlu Zy4KPiArCSAqIEFsc28gc2VlIHRoZSBDSElDS0VOMiB3cml0ZSBpbiBiZHdfY3R4X3dvcmthcm91 bmRzX2luaXQoKSB0byBkaXNhYmxlCj4gKwkgKiBET1AgY2xvY2sgZ2F0aW5nLgo+ICAJICovCj4g IAlJOTE1X1dSSVRFKEdFTjZfVUNHQ1RMMSwKPiAgCQkgICBJOTE1X1JFQUQoR0VONl9VQ0dDVEwx KSB8IEdFTjZfRVVfVENVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7Cj4gQEAgLTg4NjcsMTYgKzg2 NjUsNiBAQCBzdGF0aWMgdm9pZCB2bHZfaW5pdF9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+ICAKPiAgc3RhdGljIHZvaWQgY2h2X2luaXRfY2xvY2tfZ2F0 aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgewo+IC0JLyogV2FWU1Jl ZkNvdW50RnVsbGZvcmNlTWlzc0Rpc2FibGU6Y2h2ICovCj4gLQkvKiBXYURTUmVmQ291bnRGdWxs Zm9yY2VNaXNzRGlzYWJsZTpjaHYgKi8KPiAtCUk5MTVfV1JJVEUoR0VON19GRl9USFJFQURfTU9E RSwKPiAtCQkgICBJOTE1X1JFQUQoR0VON19GRl9USFJFQURfTU9ERSkgJgo+IC0JCSAgIH4oR0VO OF9GRl9EU19SRUZfQ05UX0ZGTUUgfCBHRU43X0ZGX1ZTX1JFRl9DTlRfRkZNRSkpOwo+IC0KPiAt CS8qIFdhRGlzYWJsZVNlbWFwaG9yZUFuZFN5bmNGbGlwV2FpdDpjaHYgKi8KPiAtCUk5MTVfV1JJ VEUoR0VONl9SQ19TTEVFUF9QU01JX0NPTlRST0wsCj4gLQkJICAgX01BU0tFRF9CSVRfRU5BQkxF KEdFTjhfUkNfU0VNQV9JRExFX01TR19ESVNBQkxFKSk7Cj4gLQo+ICAJLyogV2FEaXNhYmxlQ1NV bml0Q2xvY2tHYXRpbmc6Y2h2ICovCj4gIAlJOTE1X1dSSVRFKEdFTjZfVUNHQ1RMMSwgSTkxNV9S RUFEKEdFTjZfVUNHQ1RMMSkgfAo+ICAJCSAgIEdFTjZfQ1NVTklUX0NMT0NLX0dBVEVfRElTQUJM RSk7Cj4gQEAgLTg4OTEsMTIgKzg2NzksNiBAQCBzdGF0aWMgdm9pZCBjaHZfaW5pdF9jbG9ja19n YXRpbmcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJICogTFNRQyBTZXR0 aW5nIFJlY29tbWVuZGF0aW9ucy4KPiAgCSAqLwo+ICAJZ2VuOF9zZXRfbDNzcWNfY3JlZGl0cyhk ZXZfcHJpdiwgMzgsIDIpOwo+IC0KPiAtCS8qCj4gLQkgKiBHVFQgY2FjaGUgbWF5IG5vdCB3b3Jr IHdpdGggYmlnIHBhZ2VzLCBzbyBpZiB0aG9zZQo+IC0JICogYXJlIGV2ZXIgZW5hYmxlZCBHVFQg Y2FjaGUgbWF5IG5lZWQgdG8gYmUgZGlzYWJsZWQuCj4gLQkgKi8KPiAtCUk5MTVfV1JJVEUoSFNX X0dUVF9DQUNIRV9FTiwgR1RUX0NBQ0hFX0VOX0FMTCk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lk IGc0eF9pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cj4gQEAgLTkwMTgsMjQgKzg4MDAsMTUgQEAgc3RhdGljIHZvaWQgbm9wX2luaXRfY2xvY2tfZ2F0 aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgICogQGRldl9wcml2OiBk ZXZpY2UgcHJpdmF0ZQo+ICAgKgo+ICAgKiBTZXR1cCB0aGUgaG9va3MgdGhhdCBjb25maWd1cmUg d2hpY2ggY2xvY2tzIG9mIGEgZ2l2ZW4gcGxhdGZvcm0gY2FuIGJlCj4gLSAqIGdhdGVkIGFuZCBh bHNvIGFwcGx5IHZhcmlvdXMgR1QgYW5kIGRpc3BsYXkgc3BlY2lmaWMgd29ya2Fyb3VuZHMgZm9y IHRoZXNlCj4gLSAqIHBsYXRmb3Jtcy4gTm90ZSB0aGF0IHNvbWUgR1Qgc3BlY2lmaWMgd29ya2Fy b3VuZHMgYXJlIGFwcGxpZWQgc2VwYXJhdGVseQo+IC0gKiB3aGVuIEdQVSBjb250ZXh0cyBvciBi YXRjaGJ1ZmZlcnMgc3RhcnQgdGhlaXIgZXhlY3V0aW9uLgo+ICsgKiBnYXRlZC4KPiAgICovCj4g IHZvaWQgaW50ZWxfaW5pdF9jbG9ja19nYXRpbmdfaG9va3Moc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQo+ICB7Cj4gLQlpZiAoSVNfQ0FOTk9OTEFLRShkZXZfcHJpdikpCj4gLQkJ ZGV2X3ByaXYtPmRpc3BsYXkuaW5pdF9jbG9ja19nYXRpbmcgPSBjbmxfaW5pdF9jbG9ja19nYXRp bmc7Cj4gLQllbHNlIGlmIChJU19DT0ZGRUVMQUtFKGRldl9wcml2KSkKPiAtCQlkZXZfcHJpdi0+ ZGlzcGxheS5pbml0X2Nsb2NrX2dhdGluZyA9IGNmbF9pbml0X2Nsb2NrX2dhdGluZzsKPiAtCWVs c2UgaWYgKElTX1NLWUxBS0UoZGV2X3ByaXYpKQo+IC0JCWRldl9wcml2LT5kaXNwbGF5LmluaXRf Y2xvY2tfZ2F0aW5nID0gc2tsX2luaXRfY2xvY2tfZ2F0aW5nOwo+IC0JZWxzZSBpZiAoSVNfS0FC WUxBS0UoZGV2X3ByaXYpKQo+IC0JCWRldl9wcml2LT5kaXNwbGF5LmluaXRfY2xvY2tfZ2F0aW5n ID0ga2JsX2luaXRfY2xvY2tfZ2F0aW5nOwo+IC0JZWxzZSBpZiAoSVNfQlJPWFRPTihkZXZfcHJp dikpCj4gLQkJZGV2X3ByaXYtPmRpc3BsYXkuaW5pdF9jbG9ja19nYXRpbmcgPSBieHRfaW5pdF9j bG9ja19nYXRpbmc7Cj4gLQllbHNlIGlmIChJU19HRU1JTklMQUtFKGRldl9wcml2KSkKPiAtCQlk ZXZfcHJpdi0+ZGlzcGxheS5pbml0X2Nsb2NrX2dhdGluZyA9IGdsa19pbml0X2Nsb2NrX2dhdGlu ZzsKPiArCWlmIChJU19DQU5OT05MQUtFKGRldl9wcml2KSB8fCBJU19DT0ZGRUVMQUtFKGRldl9w cml2KSkKPiArCQlkZXZfcHJpdi0+ZGlzcGxheS5pbml0X2Nsb2NrX2dhdGluZyA9IGNucF9pbml0 X2Nsb2NrX2dhdGluZzsKPiArCWVsc2UgaWYgKElTX1NLWUxBS0UoZGV2X3ByaXYpIHx8IElTX0tB QllMQUtFKGRldl9wcml2KSB8fAo+ICsJCSBJU19CUk9YVE9OKGRldl9wcml2KSB8fCBJU19HRU1J TklMQUtFKGRldl9wcml2KSkKPiArCQlkZXZfcHJpdi0+ZGlzcGxheS5pbml0X2Nsb2NrX2dhdGlu ZyA9IG5vcF9pbml0X2Nsb2NrX2dhdGluZzsKPiAgCWVsc2UgaWYgKElTX0JST0FEV0VMTChkZXZf cHJpdikpCj4gIAkJZGV2X3ByaXYtPmRpc3BsYXkuaW5pdF9jbG9ja19nYXRpbmcgPSBiZHdfaW5p dF9jbG9ja19nYXRpbmc7Cj4gIAllbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3dvcmthcm91bmRzLmMKPiBpbmRleCBhZTY2MDg0Li5i YzE0NGMyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3dvcmthcm91 bmRzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5jCj4g QEAgLTUxMyw2ICs1MTMsNjMgQEAgaW50IGludGVsX2N0eF93b3JrYXJvdW5kc19lbWl0KHN0cnVj dCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gK3N0 YXRpYyB2b2lkIGJkd19tbWlvX3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPiArewo+ICsJLyogVGhlIEdUVCBjYWNoZSBtdXN0IGJlIGRpc2FibGVk IGlmIHRoZSBzeXN0ZW0gaXMgdXNpbmcgMk0gcGFnZXMuICovCj4gKwlib29sIGNhbl91c2VfZ3R0 X2NhY2hlID0gIUhBU19QQUdFX1NJWkVTKGRldl9wcml2LAo+ICsJCQkJCQkgSTkxNV9HVFRfUEFH RV9TSVpFXzJNKTsKPiArCWVudW0gcGlwZSBwaXBlOwo+ICsKPiArCS8qIFdhU3dpdGNoU29sVmZG QXJiaXRyYXRpb25Qcmlvcml0eTpiZHcgKi8KPiArCUk5MTVfV1JJVEUoR0FNX0VDT0NISywgSTkx NV9SRUFEKEdBTV9FQ09DSEspIHwgSFNXX0VDT0NIS19BUkJfUFJJT19TT0wpOwo+ICsKPiArCS8q IFdhUHNyRFBBTWFza1ZCbGFua0luU1JEOmJkdyAqLwo+ICsJSTkxNV9XUklURShDSElDS0VOX1BB UjFfMSwKPiArCQkgICBJOTE1X1JFQUQoQ0hJQ0tFTl9QQVIxXzEpIHwgRFBBX01BU0tfVkJMQU5L X1NSRCk7Cj4gKwo+ICsJLyogV2FQc3JEUFJTVW5tYXNrVkJsYW5rSW5TUkQ6YmR3ICovCj4gKwlm b3JfZWFjaF9waXBlKGRldl9wcml2LCBwaXBlKSB7Cj4gKwkJSTkxNV9XUklURShDSElDS0VOX1BJ UEVTTF8xKHBpcGUpLAo+ICsJCQkgICBJOTE1X1JFQUQoQ0hJQ0tFTl9QSVBFU0xfMShwaXBlKSkg fAo+ICsJCQkgICBCRFdfRFBSU19NQVNLX1ZCTEFOS19TUkQpOwo+ICsJfQo+ICsKPiArCS8qIFdh VlNSZWZDb3VudEZ1bGxmb3JjZU1pc3NEaXNhYmxlOmJkdyAqLwo+ICsJLyogV2FEU1JlZkNvdW50 RnVsbGZvcmNlTWlzc0Rpc2FibGU6YmR3ICovCj4gKwlJOTE1X1dSSVRFKEdFTjdfRkZfVEhSRUFE X01PREUsCj4gKwkJICAgSTkxNV9SRUFEKEdFTjdfRkZfVEhSRUFEX01PREUpICYKPiArCQkgICB+ KEdFTjhfRkZfRFNfUkVGX0NOVF9GRk1FIHwgR0VON19GRl9WU19SRUZfQ05UX0ZGTUUpKTsKPiAr Cj4gKwlJOTE1X1dSSVRFKEdFTjZfUkNfU0xFRVBfUFNNSV9DT05UUk9MLAo+ICsJCSAgIF9NQVNL RURfQklUX0VOQUJMRShHRU44X1JDX1NFTUFfSURMRV9NU0dfRElTQUJMRSkpOwo+ICsKPiArCS8q IFdhR3R0Q2FjaGluZ09mZkJ5RGVmYXVsdDpiZHcgKi8KPiArCUk5MTVfV1JJVEUoSFNXX0dUVF9D QUNIRV9FTiwgY2FuX3VzZV9ndHRfY2FjaGUgPyBHVFRfQ0FDSEVfRU5fQUxMIDogMCk7Cj4gKwo+ ICsJLyogV2FLVk1Ob3RpZmljYXRpb25PbkNvbmZpZ0NoYW5nZTpiZHcgKi8KPiArCUk5MTVfV1JJ VEUoQ0hJQ0tFTl9QQVIyXzEsIEk5MTVfUkVBRChDSElDS0VOX1BBUjJfMSkKPiArCQkgICB8IEtW TV9DT05GSUdfQ0hBTkdFX05PVElGSUNBVElPTl9TRUxFQ1QpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBjaHZfbW1pb193b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCj4gK3sKPiArCS8qIFdhVlNSZWZDb3VudEZ1bGxmb3JjZU1pc3NEaXNhYmxlOmNo diAqLwo+ICsJLyogV2FEU1JlZkNvdW50RnVsbGZvcmNlTWlzc0Rpc2FibGU6Y2h2ICovCj4gKwlJ OTE1X1dSSVRFKEdFTjdfRkZfVEhSRUFEX01PREUsCj4gKwkJICAgSTkxNV9SRUFEKEdFTjdfRkZf VEhSRUFEX01PREUpICYKPiArCQkgICB+KEdFTjhfRkZfRFNfUkVGX0NOVF9GRk1FIHwgR0VON19G Rl9WU19SRUZfQ05UX0ZGTUUpKTsKPiArCj4gKwkvKiBXYURpc2FibGVTZW1hcGhvcmVBbmRTeW5j RmxpcFdhaXQ6Y2h2ICovCj4gKwlJOTE1X1dSSVRFKEdFTjZfUkNfU0xFRVBfUFNNSV9DT05UUk9M LAo+ICsJCSAgIF9NQVNLRURfQklUX0VOQUJMRShHRU44X1JDX1NFTUFfSURMRV9NU0dfRElTQUJM RSkpOwo+ICsKPiArCS8qCj4gKwkgKiBHVFQgY2FjaGUgbWF5IG5vdCB3b3JrIHdpdGggYmlnIHBh Z2VzLCBzbyBpZiB0aG9zZQo+ICsJICogYXJlIGV2ZXIgZW5hYmxlZCBHVFQgY2FjaGUgbWF5IG5l ZWQgdG8gYmUgZGlzYWJsZWQuCj4gKwkgKi8KPiArCUk5MTVfV1JJVEUoSFNXX0dUVF9DQUNIRV9F TiwgR1RUX0NBQ0hFX0VOX0FMTCk7Cj4gK30KPiArCj4gIHN0YXRpYyB2b2lkIGdlbjlfbW1pb193 b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIHsK PiAgCWlmIChIQVNfTExDKGRldl9wcml2KSkgewo+IEBAIC01MjUsOCArNTgyLDQwIEBAIHN0YXRp YyB2b2lkIGdlbjlfbW1pb193b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCj4gIAkJCSAgIEk5MTVfUkVBRChNTUNEX01JU0NfQ1RSTCkgfAo+ICAJCQkg ICBNTUNEX1BDTEEgfAo+ICAJCQkgICBNTUNEX0hPVFNQT1RfRU4pOwo+ICsKPiArCQkvKgo+ICsJ CSAqIFdhQ29tcHJlc3NlZFJlc291cmNlRGlzcGxheU5ld0hhc2hNb2RlOnNrbCxrYmwKPiArCQkg KiBEaXNwbGF5IFdBIzAzOTA6IHNrbCxrYmwKPiArCQkgKgo+ICsJCSAqIE11c3QgbWF0Y2ggU2Ft cGxlciwgUGl4ZWwgQmFjayBFbmQsIGFuZCBNZWRpYS4gU2VlCj4gKwkJICogV2FDb21wcmVzc2Vk UmVzb3VyY2VTYW1wbGVyUGJlTWVkaWFOZXdIYXNoTW9kZS4KPiArCQkgKi8KPiArCQlJOTE1X1dS SVRFKENISUNLRU5fUEFSMV8xLAo+ICsJCQkgICBJOTE1X1JFQUQoQ0hJQ0tFTl9QQVIxXzEpIHwK PiArCQkJICAgU0tMX0RFX0NPTVBSRVNTRURfSEFTSF9NT0RFKTsKPiAgCX0KPiAgCj4gKwkvKiBT ZWUgQnNwZWMgbm90ZSBmb3IgUFNSMl9DVEwgYml0IDMxLCBXYSM4Mjg6c2tsLGJ4dCxrYmwsY2Zs ICovCj4gKwlJOTE1X1dSSVRFKENISUNLRU5fUEFSMV8xLAo+ICsJCSAgIEk5MTVfUkVBRChDSElD S0VOX1BBUjFfMSkgfCBTS0xfRURQX1BTUl9GSVhfUkRXUkFQKTsKPiArCj4gKwlJOTE1X1dSSVRF KEdFTjhfQ09ORklHMCwKPiArCQkgICBJOTE1X1JFQUQoR0VOOF9DT05GSUcwKSB8IEdFTjlfREVG QVVMVF9GSVhFUyk7Cj4gKwo+ICsJLyogV2FFbmFibGVDaGlja2VuRENQUjpza2wsYnh0LGtibCxn bGssY2ZsICovCj4gKwlJOTE1X1dSSVRFKEdFTjhfQ0hJQ0tFTl9EQ1BSXzEsCj4gKwkJICAgSTkx NV9SRUFEKEdFTjhfQ0hJQ0tFTl9EQ1BSXzEpIHwgTUFTS19XQUtFTUVNKTsKPiArCj4gKwkvKiBX YUZiY1R1cm5PZmZGYmNXYXRlcm1hcms6c2tsLGJ4dCxrYmwsY2ZsICovCj4gKwkvKiBXYUZiY1dh a2VNZW1Pbjpza2wsYnh0LGtibCxnbGssY2ZsICovCj4gKwlJOTE1X1dSSVRFKERJU1BfQVJCX0NU TCwgSTkxNV9SRUFEKERJU1BfQVJCX0NUTCkgfAo+ICsJCSAgIERJU1BfRkJDX1dNX0RJUyB8Cj4g KwkJICAgRElTUF9GQkNfTUVNT1JZX1dBS0UpOwo+ICsKPiArCS8qIFdhRmJjSGlnaE1lbUJ3Q29y cnVwdGlvbkF2b2lkYW5jZTpza2wsYnh0LGtibCxjZmwgKi8KPiArCUk5MTVfV1JJVEUoSUxLX0RQ RkNfQ0hJQ0tFTiwgSTkxNV9SRUFEKElMS19EUEZDX0NISUNLRU4pIHwKPiArCQkgICBJTEtfRFBG Q19ESVNBQkxFX0RVTU1ZMCk7Cj4gKwo+ICAJLyogV2FDb250ZXh0U3dpdGNoV2l0aENvbmN1cnJl bnRUTEJJbnZhbGlkYXRlOnNrbCxieHQsa2JsLGdsayxjZmwgKi8KPiAgCUk5MTVfV1JJVEUoR0VO OV9DU0ZFX0NISUNLRU4xX1JDUywKPiAgCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoR0VOOV9QUkVF TVBUX0dQR1BVX1NZTkNfU1dJVENIX0RJU0FCTEUpKTsKPiBAQCAtNTU3LDYgKzY0NiwxOCBAQCBz dGF0aWMgdm9pZCBza2xfbW1pb193b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCj4gIHsKPiAgCWdlbjlfbW1pb193b3JrYXJvdW5kc19hcHBseShkZXZf cHJpdik7Cj4gIAo+ICsJLyogV2FEaXNhYmxlRG9wQ2xvY2tHYXRpbmcgKi8KPiArCUk5MTVfV1JJ VEUoR0VON19NSVNDQ1BDVEwsIEk5MTVfUkVBRChHRU43X01JU0NDUENUTCkKPiArCQkgICAmIH5H RU43X0RPUF9DTE9DS19HQVRFX0VOQUJMRSk7Cj4gKwo+ICsJLyogV0FDNmVudHJ5bGF0ZW5jeTpz a2wgKi8KPiArCUk5MTVfV1JJVEUoRkJDX0xMQ19SRUFEX0NUUkwsIEk5MTVfUkVBRChGQkNfTExD X1JFQURfQ1RSTCkgfAo+ICsJCSAgIEZCQ19MTENfRlVMTFlfT1BFTik7Cj4gKwo+ICsJLyogV2FG YmNOdWtlT25Ib3N0TW9kaWZ5OnNrbCAqLwo+ICsJSTkxNV9XUklURShJTEtfRFBGQ19DSElDS0VO LCBJOTE1X1JFQUQoSUxLX0RQRkNfQ0hJQ0tFTikgfAo+ICsJCSAgIElMS19EUEZDX05VS0VfT05f QU5ZX01PRElGSUNBVElPTik7Cj4gKwo+ICAJLyogV2FFbmFibGVHYXBzVHN2Q3JlZGl0Rml4OnNr bCAqLwo+ICAJSTkxNV9XUklURShHRU44X0dBUkJDTlRMLCAoSTkxNV9SRUFEKEdFTjhfR0FSQkNO VEwpIHwKPiAgCQkJCSAgIEdFTjlfR0FQU19UU1ZfQ1JFRElUX0RJU0FCTEUpKTsKPiBAQCAtNTc2 LDYgKzY3NywyNCBAQCBzdGF0aWMgdm9pZCBieHRfbW1pb193b3JrYXJvdW5kc19hcHBseShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIHsKPiAgCWdlbjlfbW1pb193b3JrYXJv dW5kc19hcHBseShkZXZfcHJpdik7Cj4gIAo+ICsJLyogV2FEaXNhYmxlU0RFVW5pdENsb2NrR2F0 aW5nOmJ4dCAqLwo+ICsJSTkxNV9XUklURShHRU44X1VDR0NUTDYsIEk5MTVfUkVBRChHRU44X1VD R0NUTDYpIHwKPiArCQkgICBHRU44X1NERVVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKPiArCj4g KwkvKgo+ICsJICogRklYTUU6Cj4gKwkgKiBHRU44X0hEQ1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxF X0hEQ1JFUSBhcHBsaWVzIG9uIDN4NiBHVCBTS1VzIG9ubHkuCj4gKwkgKi8KPiArCUk5MTVfV1JJ VEUoR0VOOF9VQ0dDVEw2LCBJOTE1X1JFQUQoR0VOOF9VQ0dDVEw2KSB8Cj4gKwkJICAgR0VOOF9I RENVTklUX0NMT0NLX0dBVEVfRElTQUJMRV9IRENSRVEpOwo+ICsKPiArCS8qCj4gKwkgKiBXYTog QmFja2xpZ2h0IFBXTSBtYXkgc3RvcCBpbiB0aGUgYXNzZXJ0ZWQgc3RhdGUsIGNhdXNpbmcgYmFj a2xpZ2h0Cj4gKwkgKiB0byBzdGF5IGZ1bGx5IG9uLgo+ICsJICovCj4gKwlJOTE1X1dSSVRFKEdF TjlfQ0xLR0FURV9ESVNfMCwgSTkxNV9SRUFEKEdFTjlfQ0xLR0FURV9ESVNfMCkgfAo+ICsJCSAg IFBXTTFfR0FUSU5HX0RJUyB8IFBXTTJfR0FUSU5HX0RJUyk7Cj4gKwo+ICAJLyogV2FTdG9yZU11 bHRpcGxlUFRFZW5hYmxlOmJ4dCAqLwo+ICAJLyogVGhpcyBpcyBhIHJlcXVpcmVtZW50IGFjY29y ZGluZyB0byBIYXJkd2FyZSBzcGVjaWZpY2F0aW9uICovCj4gIAlpZiAoSVNfQlhUX1JFVklEKGRl dl9wcml2LCAwLCBCWFRfUkVWSURfQTEpKQo+IEBAIC02MDksNiArNzI4LDIwIEBAIHN0YXRpYyB2 b2lkIGtibF9tbWlvX3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPiAgewo+ICAJZ2VuOV9tbWlvX3dvcmthcm91bmRzX2FwcGx5KGRldl9wcml2KTsK PiAgCj4gKwkvKiBXYURpc2FibGVTREVVbml0Q2xvY2tHYXRpbmc6a2JsICovCj4gKwlpZiAoSVNf S0JMX1JFVklEKGRldl9wcml2LCAwLCBLQkxfUkVWSURfQjApKQo+ICsJCUk5MTVfV1JJVEUoR0VO OF9VQ0dDVEw2LCBJOTE1X1JFQUQoR0VOOF9VQ0dDVEw2KSB8Cj4gKwkJCSAgIEdFTjhfU0RFVU5J VF9DTE9DS19HQVRFX0RJU0FCTEUpOwo+ICsKPiArCS8qIFdhRGlzYWJsZUdhbUNsb2NrR2F0aW5n OmtibCAqLwo+ICsJaWYgKElTX0tCTF9SRVZJRChkZXZfcHJpdiwgMCwgS0JMX1JFVklEX0IwKSkK PiArCQlJOTE1X1dSSVRFKEdFTjZfVUNHQ1RMMSwgSTkxNV9SRUFEKEdFTjZfVUNHQ1RMMSkgfAo+ ICsJCQkgICBHRU42X0dBTVVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKPiArCj4gKwkvKiBXYUZi Y051a2VPbkhvc3RNb2RpZnk6a2JsICovCj4gKwlJOTE1X1dSSVRFKElMS19EUEZDX0NISUNLRU4s IEk5MTVfUkVBRChJTEtfRFBGQ19DSElDS0VOKSB8Cj4gKwkJICAgSUxLX0RQRkNfTlVLRV9PTl9B TllfTU9ESUZJQ0FUSU9OKTsKPiArCj4gIAkvKiBXYUVuYWJsZUdhcHNUc3ZDcmVkaXRGaXg6a2Js ICovCj4gIAlJOTE1X1dSSVRFKEdFTjhfR0FSQkNOVEwsIChJOTE1X1JFQUQoR0VOOF9HQVJCQ05U TCkgfAo+ICAJCQkJICAgR0VOOV9HQVBTX1RTVl9DUkVESVRfRElTQUJMRSkpOwo+IEBAIC02MzEs MTMgKzc2NCw0MyBAQCBzdGF0aWMgdm9pZCBrYmxfbW1pb193b3JrYXJvdW5kc19hcHBseShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAo+ICBzdGF0aWMgdm9pZCBnbGtfbW1p b193b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4g IHsKPiArCXUzMiB2YWw7Cj4gKwo+ICAJZ2VuOV9tbWlvX3dvcmthcm91bmRzX2FwcGx5KGRldl9w cml2KTsKPiArCj4gKwkvKgo+ICsJICogV2FEaXNhYmxlUFdNQ2xvY2tHYXRpbmc6Z2xrCj4gKwkg KiBCYWNrbGlnaHQgUFdNIG1heSBzdG9wIGluIHRoZSBhc3NlcnRlZCBzdGF0ZSwgY2F1c2luZyBi YWNrbGlnaHQKPiArCSAqIHRvIHN0YXkgZnVsbHkgb24uCj4gKwkgKi8KPiArCUk5MTVfV1JJVEUo R0VOOV9DTEtHQVRFX0RJU18wLCBJOTE1X1JFQUQoR0VOOV9DTEtHQVRFX0RJU18wKSB8Cj4gKwkJ ICAgUFdNMV9HQVRJTkdfRElTIHwgUFdNMl9HQVRJTkdfRElTKTsKPiArCj4gKwkvKiBXYURESUlP VGltZW91dDpnbGsgKi8KPiArCWlmIChJU19HTEtfUkVWSUQoZGV2X3ByaXYsIDAsIEdMS19SRVZJ RF9BMSkpIHsKPiArCQl1MzIgdmFsID0gSTkxNV9SRUFEKENISUNLRU5fTUlTQ18yKTsKPiArCQl2 YWwgJj0gfihHTEtfQ0wwX1BXUl9ET1dOIHwKPiArCQkJIEdMS19DTDFfUFdSX0RPV04gfAo+ICsJ CQkgR0xLX0NMMl9QV1JfRE9XTik7Cj4gKwkJSTkxNV9XUklURShDSElDS0VOX01JU0NfMiwgdmFs KTsKPiArCX0KPiArCj4gKwkvKiBEaXNwbGF5IFdBICMxMTMzOiBXYUZiY1NraXBTZWdtZW50czpn bGsgKi8KPiArCXZhbCA9IEk5MTVfUkVBRChJTEtfRFBGQ19DSElDS0VOKTsKPiArCXZhbCAmPSB+ R0xLX1NLSVBfU0VHX0NPVU5UX01BU0s7Cj4gKwl2YWwgfD0gR0xLX1NLSVBfU0VHX0VOIHwgR0xL X1NLSVBfU0VHX0NPVU5UKDEpOwo+ICsJSTkxNV9XUklURShJTEtfRFBGQ19DSElDS0VOLCB2YWwp Owo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBjZmxfbW1pb193b3JrYXJvdW5kc19hcHBseShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIHsKPiAgCWdlbjlfbW1pb193b3JrYXJv dW5kc19hcHBseShkZXZfcHJpdik7Cj4gIAo+ICsJLyogV2FGYmNOdWtlT25Ib3N0TW9kaWZ5OmNm bCAqLwo+ICsJSTkxNV9XUklURShJTEtfRFBGQ19DSElDS0VOLAo+ICsJCSAgIEk5MTVfUkVBRChJ TEtfRFBGQ19DSElDS0VOKSB8Cj4gKwkJCSAgICAgSUxLX0RQRkNfTlVLRV9PTl9BTllfTU9ESUZJ Q0FUSU9OKTsKPiArCj4gIAkvKiBXYUVuYWJsZUdhcHNUc3ZDcmVkaXRGaXg6Y2ZsICovCj4gIAlJ OTE1X1dSSVRFKEdFTjhfR0FSQkNOVEwsIChJOTE1X1JFQUQoR0VOOF9HQVJCQ05UTCkgfAo+ICAJ CQkJICAgR0VOOV9HQVBTX1RTVl9DUkVESVRfRElTQUJMRSkpOwo+IEBAIC02NTQsNiArODE3LDMy IEBAIHN0YXRpYyB2b2lkIGNmbF9tbWlvX3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKPiAgCj4gIHN0YXRpYyB2b2lkIGNubF9tbWlvX3dvcmthcm91 bmRzX2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgewo+ICsJdTMy IHZhbDsKPiArCj4gKwkvKiBUaGlzIGlzIG5vdCBhbiBXYS4gRW5hYmxlIGZvciBiZXR0ZXIgaW1h Z2UgcXVhbGl0eSAqLwo+ICsJSTkxNV9XUklURShfM0RfQ0hJQ0tFTjMsCj4gKwkJICAgX01BU0tF RF9CSVRfRU5BQkxFKF8zRF9DSElDS0VOM19BQV9MSU5FX1FVQUxJVFlfRklYX0VOQUJMRSkpOwo+ ICsKPiArCS8qIFdhRW5hYmxlQ2hpY2tlbkRDUFI6Y25sICovCj4gKwlJOTE1X1dSSVRFKEdFTjhf Q0hJQ0tFTl9EQ1BSXzEsCj4gKwkJICAgSTkxNV9SRUFEKEdFTjhfQ0hJQ0tFTl9EQ1BSXzEpIHwg TUFTS19XQUtFTUVNKTsKPiArCj4gKwkvKiBXYUZiY1dha2VNZW1PbjpjbmwgKi8KPiArCUk5MTVf V1JJVEUoRElTUF9BUkJfQ1RMLCBJOTE1X1JFQUQoRElTUF9BUkJfQ1RMKSB8Cj4gKwkJICAgRElT UF9GQkNfTUVNT1JZX1dBS0UpOwo+ICsKPiArCS8qIFdhU2FyYlVuaXRDbG9ja0dhdGluZ0Rpc2Fi bGU6Y25sIChwcmUtcHJvZCkgKi8KPiArCWlmIChJU19DTkxfUkVWSUQoZGV2X3ByaXYsIENOTF9S RVZJRF9BMCwgQ05MX1JFVklEX0IwKSkKPiArCQlJOTE1X1dSSVRFKFNMSUNFX1VOSVRfTEVWRUxf Q0xLR0FURSwKPiArCQkJICAgSTkxNV9SRUFEKFNMSUNFX1VOSVRfTEVWRUxfQ0xLR0FURSkgfAo+ ICsJCQkgICBTQVJCVU5JVF9DTEtHQVRFX0RJUyk7Cj4gKwo+ICsJLyogRGlzcGxheSBXQSAjMTEz MzogV2FGYmNTa2lwU2VnbWVudHM6Y25sICovCj4gKwl2YWwgPSBJOTE1X1JFQUQoSUxLX0RQRkNf Q0hJQ0tFTik7Cj4gKwl2YWwgJj0gfkdMS19TS0lQX1NFR19DT1VOVF9NQVNLOwo+ICsJdmFsIHw9 IEdMS19TS0lQX1NFR19FTiB8IEdMS19TS0lQX1NFR19DT1VOVCgxKTsKPiArCUk5MTVfV1JJVEUo SUxLX0RQRkNfQ0hJQ0tFTiwgdmFsKTsKPiArCj4gIAkvKiBXYURpc2FibGVJMm1DeWNsZU9uV1JQ b3J0OmNubCAocHJlLXByb2QpICovCj4gIAlpZiAoSVNfQ05MX1JFVklEKGRldl9wcml2LCBDTkxf UkVWSURfQjAsIENOTF9SRVZJRF9CMCkpCj4gIAkJSTkxNV9XUklURShHQU1UX0NIS05fQklUX1JF RywKPiBAQCAtNjcyLDggKzg2MSwxMiBAQCBzdGF0aWMgdm9pZCBjbmxfbW1pb193b3JrYXJvdW5k c19hcHBseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAo+ICB2b2lkIGlu dGVsX21taW9fd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQo+ICB7Cj4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDkpCj4gKwlpZiAoSU5URUxf R0VOKGRldl9wcml2KSA8IDgpCj4gIAkJcmV0dXJuOwo+ICsJZWxzZSBpZiAoSVNfQlJPQURXRUxM KGRldl9wcml2KSkKPiArCQliZHdfbW1pb193b3JrYXJvdW5kc19hcHBseShkZXZfcHJpdik7Cj4g KwllbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKPiArCQljaHZfbW1pb193b3JrYXJv dW5kc19hcHBseShkZXZfcHJpdik7Cj4gIAllbHNlIGlmIChJU19TS1lMQUtFKGRldl9wcml2KSkK PiAgCQlza2xfbW1pb193b3JrYXJvdW5kc19hcHBseShkZXZfcHJpdik7Cj4gIAllbHNlIGlmIChJ U19CUk9YVE9OKGRldl9wcml2KSkKPiAtLSAKPiAxLjkuMQo+IAo+IF9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+ IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAoKLS0gClZpbGxlIFN5cmrDpGzDpApJ bnRlbCBPVEMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==