From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [PATCH 25/39] drm/i915/tgl: Implement TGL DisplayPort training sequence Date: Mon, 19 Aug 2019 16:21:45 +0200 Message-ID: References: <20190816080503.28594-1-lucas.demarchi@intel.com> <20190816080503.28594-26-lucas.demarchi@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 EFA766E145 for ; Mon, 19 Aug 2019 14:21:47 +0000 (UTC) In-Reply-To: <20190816080503.28594-26-lucas.demarchi@intel.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Lucas De Marchi , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T3AgMTYtMDgtMjAxOSBvbSAxMDowNCBzY2hyZWVmIEx1Y2FzIERlIE1hcmNoaToKPiBGcm9tOiBK b3PDqSBSb2JlcnRvIGRlIFNvdXphIDxqb3NlLnNvdXphQGludGVsLmNvbT4KPgo+IE9uIFRHTCBz b21lIHJlZ2lzdGVycyBtb3ZlZCBmcm9tIERESSB0byB0cmFuc2NvZGVyIGFuZCB0aGUKPiBEaXNw bGF5UG9ydCB0cmFpbmluZyBzZXF1ZW5jZSBoYXMgYSBzZXBhcmF0ZSBCU3BlYyBwYWdlLgo+Cj4g SSBzdGFydGVkIGFkZGluZyAnaWZzJyB0byB0aGUgb3JpZ2luYWwgaW50ZWxfZGRpX3ByZV9lbmFi bGVfZHAoKSBidXQKPiBpdCB3YXMgYmVjb21pbmcgcmVhbGx5IGhhcmQgdG8gZm9sbG93LCBzbyBh IG5ldyBhbmQgY2xlYW5lciBmdW5jdGlvbgo+IGZvciBUR0wgd2FzIGFkZGVkIHdpdGggY29tbWVu dHMgb2YgYWxsIHN0ZXBzLiBJdCdzIHNpbWlsYXIgdG8gSUNMLCBidXQKPiBkaWZmZXJlbnQgZW5v dWdoIHRvIGRlc2VydmUgYSBuZXcgZnVuY3Rpb24KPgo+IFRoZSByZXN0IG9mIERpc3BsYXlQb3J0 IGVuYWJsZSBhbmQgdGhlIHdob2xlIGRpc2FibGUgc2VxdWVuY2VzCj4gcmVtYWluZWQgdGhlIHNh bWUuCj4KPiBCU3BlYzogNDkxOTAKPiBDYzogTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2YXJl QGludGVsLmNvbT4KPiBDYzogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4Lmlu dGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBKb3PDqSBSb2JlcnRvIGRlIFNvdXphIDxqb3NlLnNv dXphQGludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBMdWNhcyBEZSBNYXJjaGkgPGx1Y2FzLmRl bWFyY2hpQGludGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kZGkuYyB8IDEzNCArKysrKysrKysrKysrKysrKysrKysrLQo+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMgIHwgICA4ICstCj4gIDIgZmlsZXMgY2hhbmdlZCwg MTM0IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZGRpLmMKPiBpbmRleCAxN2Q0OWM3N2ZhYTAuLjVkOTcxZTlkMDQ1OSAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RkaS5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYwo+IEBAIC0xNzYx LDcgKzE3NjEsMTQgQEAgdm9pZCBpbnRlbF9kZGlfc2V0X3ZjX3BheWxvYWRfYWxsb2MoY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gIAlJOTE1X1dSSVRFKFRSQU5T X0RESV9GVU5DX0NUTChjcHVfdHJhbnNjb2RlciksIHRlbXApOwo+ICB9Cj4gIAo+IC12b2lkIGlu dGVsX2RkaV9lbmFibGVfdHJhbnNjb2Rlcl9mdW5jKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlKQo+ICsvKgo+ICsgKiBSZXR1cm5zIHRoZSBUUkFOU19ERElfRlVOQ19D VEwgdmFsdWUgYmFzZWQgb24gQ1JUQyBzdGF0ZS4KPiArICoKPiArICogT25seSBpbnRlbmRlZCB0 byBiZSB1c2VkIGJ5IGludGVsX2RkaV9lbmFibGVfdHJhbnNjb2Rlcl9mdW5jKCkgYW5kCj4gKyAq IGludGVsX2RkaV9jb25maWdfdHJhbnNjb2Rlcl9mdW5jKCkuCj4gKyAqLwo+ICtzdGF0aWMgdTMy Cj4gK2ludGVsX2RkaV90cmFuc2NvZGVyX2Z1bmNfcmVnX3ZhbF9nZXQoY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gIHsKPiAgCXN0cnVjdCBpbnRlbF9jcnRjICpj cnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT5iYXNlLmNydGMpOwo+ICAJc3RydWN0IGlu dGVsX2VuY29kZXIgKmVuY29kZXIgPSBpbnRlbF9kZGlfZ2V0X2NydGNfZW5jb2RlcihjcnRjKTsK PiBAQCAtMTg1MSw2ICsxODU4LDMzIEBAIHZvaWQgaW50ZWxfZGRpX2VuYWJsZV90cmFuc2NvZGVy X2Z1bmMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gIAkJdGVt cCB8PSBERElfUE9SVF9XSURUSChjcnRjX3N0YXRlLT5sYW5lX2NvdW50KTsKPiAgCX0KPiAgCj4g KwlyZXR1cm4gdGVtcDsKPiArfQo+ICsKPiArdm9pZCBpbnRlbF9kZGlfZW5hYmxlX3RyYW5zY29k ZXJfZnVuYyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiArewo+ ICsJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPmJh c2UuY3J0Yyk7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KGNydGMtPmJhc2UuZGV2KTsKPiArCWVudW0gdHJhbnNjb2RlciBjcHVfdHJhbnNjb2RlciA9IGNy dGNfc3RhdGUtPmNwdV90cmFuc2NvZGVyOwo+ICsJdTMyIHRlbXA7Cj4gKwo+ICsJdGVtcCA9IGlu dGVsX2RkaV90cmFuc2NvZGVyX2Z1bmNfcmVnX3ZhbF9nZXQoY3J0Y19zdGF0ZSk7Cj4gKwlJOTE1 X1dSSVRFKFRSQU5TX0RESV9GVU5DX0NUTChjcHVfdHJhbnNjb2RlciksIHRlbXApOwo+ICt9Cj4g Kwo+ICsvKgo+ICsgKiBTYW1lIGFzIGludGVsX2RkaV9lbmFibGVfdHJhbnNjb2Rlcl9mdW5jKCkg YnV0IGl0IGRvIG5vdCBzZXQgdGhlIGVuYWJsZSBiaXQKPiArICovCj4gK3N0YXRpYyB2b2lkCj4g K2ludGVsX2RkaV9jb25maWdfdHJhbnNjb2Rlcl9mdW5jKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRv X2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjKTsKPiArCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwo+ICsJZW51bSB0cmFu c2NvZGVyIGNwdV90cmFuc2NvZGVyID0gY3J0Y19zdGF0ZS0+Y3B1X3RyYW5zY29kZXI7Cj4gKwl1 MzIgdGVtcDsKPiArCj4gKwl0ZW1wID0gaW50ZWxfZGRpX3RyYW5zY29kZXJfZnVuY19yZWdfdmFs X2dldChjcnRjX3N0YXRlKTsKPiArCXRlbXAgJj0gflRSQU5TX0RESV9GVU5DX0VOQUJMRTsKPiAg CUk5MTVfV1JJVEUoVFJBTlNfRERJX0ZVTkNfQ1RMKGNwdV90cmFuc2NvZGVyKSwgdGVtcCk7Cj4g IH0KPiAgCj4gQEAgLTMxNzYsOSArMzIxMCw4OSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9kZGlfZGlz YWJsZV9mZWNfc3RhdGUoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gIAlQT1NUSU5H X1JFQUQoY3RsKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgaW50ZWxfZGRpX3ByZV9lbmFibGVf ZHAoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gLQkJCQkgICAgY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gLQkJCQkgICAgY29uc3Qgc3RydWN0IGRy bV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCj4gK3N0YXRpYyB2b2lkIHRnbF9kZGlfcHJl X2VuYWJsZV9kcChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiArCQkJCSAgY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gKwkJCQkgIGNvbnN0IHN0cnVj dCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKCZlbmNvZGVyLT5iYXNlKTsKPiArCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYp Owo+ICsJZW51bSBwaHkgcGh5ID0gaW50ZWxfcG9ydF90b19waHkoZGV2X3ByaXYsIGVuY29kZXIt PnBvcnQpOwo+ICsJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBlbmNfdG9f ZGlnX3BvcnQoJmVuY29kZXItPmJhc2UpOwo+ICsJYm9vbCBpc19tc3QgPSBpbnRlbF9jcnRjX2hh c190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9EUF9NU1QpOwo+ICsJaW50IGxldmVsID0g aW50ZWxfZGRpX2RwX2xldmVsKGludGVsX2RwKTsKPiArCj4gKwlpbnRlbF9kcF9zZXRfbGlua19w YXJhbXMoaW50ZWxfZHAsIGNydGNfc3RhdGUtPnBvcnRfY2xvY2ssCj4gKwkJCQkgY3J0Y19zdGF0 ZS0+bGFuZV9jb3VudCwgaXNfbXN0KTsKPiArCj4gKwkvKiAxLmEgZ290IG9uIGludGVsX2F0b21p Y19jb21taXRfdGFpbCgpICovCj4gKwo+ICsJLyogMi4gKi8KPiArCWludGVsX2VkcF9wYW5lbF9v bihpbnRlbF9kcCk7Cj4gKwo+ICsJLyoKPiArCSAqIDEuYiwgMy4gYW5kIDQuIGlzIGRvbmUgYnkg YmVmb3JlIHRoaXMgZnVuY3Rpb25zIGJ5Cj4gKwkgKiBoYXN3ZWxsX2NydGNfZW5hYmxlKCktPmlu dGVsX2VuY29kZXJzX3ByZV9wbGxfZW5hYmxlKCkgYW5kCj4gKwkgKiBoYXN3ZWxsX2NydGNfZW5h YmxlKCktPmludGVsX2VuYWJsZV9zaGFyZWRfZHBsbCgpCj4gKwkgKi8KPiArCj4gKwkvKiA1LiAq Lwo+ICsJaWYgKCFpbnRlbF9waHlfaXNfdGMoZGV2X3ByaXYsIHBoeSkgfHwKPiArCSAgICBkaWdf cG9ydC0+dGNfbW9kZSAhPSBUQ19QT1JUX1RCVF9BTFQpCj4gKwkJaW50ZWxfZGlzcGxheV9wb3dl cl9nZXQoZGV2X3ByaXYsCj4gKwkJCQkJZGlnX3BvcnQtPmRkaV9pb19wb3dlcl9kb21haW4pOwo+ ICsKPiArCS8qIDYuICovCj4gKwlpY2xfcHJvZ3JhbV9tZ19kcF9tb2RlKGRpZ19wb3J0KTsKPiAr Cj4gKwkvKgo+ICsJICogNy5hIC0gU3RlcHMgaW4gdGhpcyBmdW5jdGlvbiB0aGF0IHNob3VsZCBv bmx5IGJlIGV4ZWN1dGVkIG92ZXIgTVNUCj4gKwkgKiBtYXN0ZXIgYXMgTVNUIGVuY29kZXJzIHdp bGwgb25seSBiZSBleGVjdXRlZCBvbiBNU1QgbWFzdGVyIGFzIE1TVAo+ICsJICogZW5jb2RlciBo YXZlIGhhdmUgaXQncyBvd24gcHJlX2VuYWJsZSgpIGhvb2sKPiArCSAqLwo+ICsJaW50ZWxfZGRp X2VuYWJsZV9waXBlX2Nsb2NrKGNydGNfc3RhdGUpOwo+ICsKPiArCS8qIDcuYiAqLwo+ICsJaW50 ZWxfZGRpX2NvbmZpZ190cmFuc2NvZGVyX2Z1bmMoY3J0Y19zdGF0ZSk7Cj4gKwo+ICsJLyogNy5k ICovCj4gKwlpY2xfZGlzYWJsZV9waHlfY2xvY2tfZ2F0aW5nKGRpZ19wb3J0KTsKPiArCj4gKwkv KiA3LmUgKi8KPiArCWljbF9kZGlfdnN3aW5nX3NlcXVlbmNlKGVuY29kZXIsIGNydGNfc3RhdGUt PnBvcnRfY2xvY2ssIGxldmVsLAo+ICsJCQkJZW5jb2Rlci0+dHlwZSk7Cj4gKwo+ICsJLyogNy5m ICovCj4gKwlpZiAoaW50ZWxfcGh5X2lzX2NvbWJvKGRldl9wcml2LCBwaHkpKSB7Cj4gKwkJYm9v bCBsYW5lX3JldmVyc2FsID0KPiArCQkJZGlnX3BvcnQtPnNhdmVkX3BvcnRfYml0cyAmIERESV9C VUZfUE9SVF9SRVZFUlNBTDsKPiArCj4gKwkJaW50ZWxfY29tYm9fcGh5X3Bvd2VyX3VwX2xhbmVz KGRldl9wcml2LCBwaHksIGZhbHNlLAo+ICsJCQkJCSAgICAgICBjcnRjX3N0YXRlLT5sYW5lX2Nv dW50LAo+ICsJCQkJCSAgICAgICBsYW5lX3JldmVyc2FsKTsKPiArCX0KPiArCj4gKwkvKiA3Lmcg Ki8KPiArCWludGVsX2RkaV9pbml0X2RwX2J1Zl9yZWcoZW5jb2Rlcik7Cj4gKwo+ICsJaWYgKCFp c19tc3QpCj4gKwkJaW50ZWxfZHBfc2lua19kcG1zKGludGVsX2RwLCBEUk1fTU9ERV9EUE1TX09O KTsKPiArCj4gKwkvKiA3LmMsIDcuaCwgNy5pLCA3LmogKi8KPiArCWludGVsX2RwX3N0YXJ0X2xp bmtfdHJhaW4oaW50ZWxfZHApOwo+ICsKPiArCS8qIDcuayAqLwo+ICsJaW50ZWxfZHBfc3RvcF9s aW5rX3RyYWluKGludGVsX2RwKTsKPiArCj4gKwkvKiA3LmwgKi8KPiArCWludGVsX2RwX3Npbmtf c2V0X2RlY29tcHJlc3Npb25fc3RhdGUoaW50ZWxfZHAsIGNydGNfc3RhdGUsCj4gKwkJCQkJICAg ICAgdHJ1ZSk7Cj4gKwlpbnRlbF9kcF9zaW5rX3NldF9mZWNfcmVhZHkoaW50ZWxfZHAsIGNydGNf c3RhdGUpOwpTZWUgIkRESSBGRUMiIGluIGJzcGVjLgoKaW50ZWxfZHBfc2lua19zZXRfZmVjX3Jl YWR5KCkgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSBsaW5rIHRyYWluaW5nLAppbnRlbF9kZGlf ZW5hYmxlX2ZlYygpIGFmdGVyLgoKUHJlc3VtYWJseSB0aGlzIGlzIHRoZSBzYW1lIGZvciBEU0Mu Cgo+ICsJaW50ZWxfZHNjX2VuYWJsZShlbmNvZGVyLCBjcnRjX3N0YXRlKTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgaHN3X2RkaV9wcmVfZW5hYmxlX2RwKHN0cnVjdCBpbnRlbF9lbmNvZGVyICpl bmNvZGVyLAo+ICsJCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSwKPiArCQkJCSAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUp Cj4gIHsKPiAgCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoJmVu Y29kZXItPmJhc2UpOwo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShlbmNvZGVyLT5iYXNlLmRldik7Cj4gQEAgLTMyNDQsNiArMzM1OCwxOCBAQCBzdGF0aWMg dm9pZCBpbnRlbF9kZGlfcHJlX2VuYWJsZV9kcChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2Rl ciwKPiAgCWludGVsX2RzY19lbmFibGUoZW5jb2RlciwgY3J0Y19zdGF0ZSk7Cj4gIH0KPiAgCj4g K3N0YXRpYyB2b2lkIGludGVsX2RkaV9wcmVfZW5hYmxlX2RwKHN0cnVjdCBpbnRlbF9lbmNvZGVy ICplbmNvZGVyLAo+ICsJCQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRj X3N0YXRlLAo+ICsJCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25u X3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGVuY29kZXItPmJhc2UuZGV2KTsKPiArCj4gKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSAxMikKPiArCQl0Z2xfZGRpX3ByZV9lbmFibGVfZHAoZW5jb2RlciwgY3J0Y19zdGF0ZSwgY29u bl9zdGF0ZSk7Cj4gKwllbHNlCj4gKwkJaHN3X2RkaV9wcmVfZW5hYmxlX2RwKGVuY29kZXIsIGNy dGNfc3RhdGUsIGNvbm5fc3RhdGUpOwo+ICt9Cj4gKwo+ICBzdGF0aWMgdm9pZCBpbnRlbF9kZGlf cHJlX2VuYWJsZV9oZG1pKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ICAJCQkJICAg ICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gIAkJCQkgICAg ICBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jCj4gaW5kZXggZWJmY2YxODNjN2YxLi4xYThl MDQxYTVjNDMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kcC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jCj4g QEAgLTQwMDcsMTMgKzQwMDcsMTMgQEAgdm9pZCBpbnRlbF9kcF9zZXRfaWRsZV9saW5rX3RyYWlu KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIAlJOTE1X1dSSVRFKGN0bCwgdmFsKTsKPiAg Cj4gIAkvKgo+IC0JICogT24gUE9SVF9BIHdlIGNhbiBoYXZlIG9ubHkgZURQIGluIFNTVCBtb2Rl LiBUaGVyZSB0aGUgb25seSByZWFzb24KPiAtCSAqIHdlIG5lZWQgdG8gc2V0IGlkbGUgdHJhbnNt aXNzaW9uIG1vZGUgaXMgdG8gd29yayBhcm91bmQgYSBIVyBpc3N1ZQo+IC0JICogd2hlcmUgd2Ug ZW5hYmxlIHRoZSBwaXBlIHdoaWxlIG5vdCBpbiBpZGxlIGxpbmstdHJhaW5pbmcgbW9kZS4KPiAr CSAqIFVudGlsIFRHTCBvbiBQT1JUX0Egd2UgY2FuIGhhdmUgb25seSBlRFAgaW4gU1NUIG1vZGUu IFRoZXJlIHRoZSBvbmx5Cj4gKwkgKiByZWFzb24gd2UgbmVlZCB0byBzZXQgaWRsZSB0cmFuc21p c3Npb24gbW9kZSBpcyB0byB3b3JrIGFyb3VuZCBhIEhXCj4gKwkgKiBpc3N1ZSB3aGVyZSB3ZSBl bmFibGUgdGhlIHBpcGUgd2hpbGUgbm90IGluIGlkbGUgbGluay10cmFpbmluZyBtb2RlLgo+ICAJ ICogSW4gdGhpcyBjYXNlIHRoZXJlIGlzIHJlcXVpcmVtZW50IHRvIHdhaXQgZm9yIGEgbWluaW11 bSBudW1iZXIgb2YKPiAgCSAqIGlkbGUgcGF0dGVybnMgdG8gYmUgc2VudC4KPiAgCSAqLwo+IC0J aWYgKHBvcnQgPT0gUE9SVF9BKQo+ICsJaWYgKHBvcnQgPT0gUE9SVF9BICYmIElOVEVMX0dFTihk ZXZfcHJpdikgPCAxMikKPiAgCQlyZXR1cm47Cj4gIAo+ICAJaWYgKGludGVsX3dhaXRfZm9yX3Jl Z2lzdGVyKCZkZXZfcHJpdi0+dW5jb3JlLCBzdGF0dXMsCgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4