From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v3 3/4] drm/i915: Clean up DDI DDC/AUX CH sanitation Date: Fri, 21 Oct 2016 16:17:17 +0300 Message-ID: <20161021131717.GJ4329@intel.com> References: <1476208368-5710-4-git-send-email-ville.syrjala@linux.intel.com> <1476727623-10361-1-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2BC676ED0A for ; Fri, 21 Oct 2016 13:18:00 +0000 (UTC) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Maarten Maathuis Cc: intel-gfx List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBPY3QgMjEsIDIwMTYgYXQgMTI6MDA6NTZBTSArMDIwMCwgTWFhcnRlbiBNYWF0aHVp cyB3cm90ZToKPiBJIG1lYW50IERPTid0IHN1c3BlY3QKPiAKPiBPbiBUaHUsIE9jdCAyMCwgMjAx NiBhdCAxMTo1MyBQTSwgTWFhcnRlbiBNYWF0aHVpcyA8bWFkbWFuMjAwM0BnbWFpbC5jb20+Cj4g d3JvdGU6Cj4gCj4gPiBBbHNvIHRlc3RlZCB2MyBvbiB0b3Agb2YgNC44LjMgKG1haW5saW5lIGdp dCBpcyBhIG1lc3MgcmlnaHQgbm93IGZvcgo+ID4gYm9vdGluZykuCj4gPgo+ID4gSSBkaWQgZW5j b3VudGVyIGEgc2VlbWluZ2x5IHVucmVsYXRlZCBtZXNzYWdlIGR1cmluZyBib290IChpbmNsdWRp bmcgYQo+ID4gV0FSTl9PTik6Cj4gPiBbZHJtOnNreWxha2VfcGZpdF9lbmFibGUgW2k5MTVdXSAq RVJST1IqIFJlcXVlc3RpbmcgcGZpdCB3aXRob3V0IGdldHRpbmcgYQo+ID4gc2NhbGVyIGZpcnN0 Cj4gPgo+ID4gSSBzdXNwZWN0IGFueSBjYXVzYWwgcmVsYXRpb24gd2l0aCB0aGVzZSBwYXRjaGVz LgoKWWVhaCBzaG91bGRuJ3QgYmUgcmVsYXRlZC4KCkkndmUgcHVzaGVkIHRoZSBwYXRjaGVzIHRv IGRpbnEuIFRoYW5rcyBmb3IgdGVzdGluZyBhbmQgcmV2aWV3cy4KCj4gPgo+ID4gT24gTW9uLCBP Y3QgMTcsIDIwMTYgYXQgODowNyBQTSwgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPiB3 cm90ZToKPiA+Cj4gPj4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4 LmludGVsLmNvbT4KPiA+Pgo+ID4+IE5vdyB0aGF0IHdlIHVzZSB0aGUgQVVYIGFuZCBHTUJVUyBh c3NpZ25tZW50IGZyb20gVkJUIGZvciBhbGwgcG9ydHMsCj4gPj4gbGV0J3MgY2xlYW4gdXAgdGhl IHNhbml0aXphdGlvbiBvZiB0aGUgcG9ydCBpbmZvcm1hdGlvbiBhIGJpdC4KPiA+PiBQcmV2aW9z dWx5IHdlIG9ubHkgZGlkIHRoaXMgZm9yIHBvcnQgRSwgYW5kIG9ubHkgY29tcGxhaW5lZCBhYm91 dCBhCj4gPj4gbm9uLXN0YW5kYXJkIGFzc2lnbm1lbnQgZm9yIHRoZSBvdGhlciBwb3J0cy4gQnV0 IGFzIHdlIGtub3cgdGhhdAo+ID4+IG5vbi1zdGFuZGFyZCBhc3NpZ25tZW50cyBhcmUgYSBmYWN0 IG9mIGxpZmUsIGxldCdzIGV4cGFuZCB0aGUKPiA+PiBzYW5pdGl6YXRpb24gdG8gYWxsIHRoZSBw b3J0cy4KPiA+Pgo+ID4+IHYyOiBJbmNsdWRlIGEgY29tbWl0IG1lc3NhZ2UsIGZpeCB1cCB0aGUg Y29tbWVudHMgYSBiaXQKPiA+PiB2MzogRG9uJ3QgY2xvYmJlciBvdGhlciBwb3J0cyBpZiB0aGUg Y3VycmVudCBwb3J0IGhhcyBubyBhbHRlcm5hdGUgYXV4Cj4gPj4gY2gvZGRjIHBpbgo+ID4+Cj4g Pj4gQ2M6IHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcKPiA+PiBDYzogTWFhcnRlbiBNYWF0aHVpcyA8 bWFkbWFuMjAwM0BnbWFpbC5jb20+Cj4gPj4gVGVzdGVkLWJ5OiBNYWFydGVuIE1hYXRodWlzIDxt YWRtYW4yMDAzQGdtYWlsLmNvbT4KPiA+PiBSZWZlcmVuY2VzOiBodHRwczovL2J1Z3MuZnJlZWRl c2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD05Nzg3Nwo+ID4+IFNpZ25lZC1vZmYtYnk6IFZpbGxl IFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gPj4gTGluazogaHR0 cDovL3BhdGNod29yay5mcmVlZGVza3RvcC5vcmcvcGF0Y2gvbXNnaWQvMTQ3NjIwODM2OC01NzEw Cj4gPj4gLTQtZ2l0LXNlbmQtZW1haWwtdmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20KPiA+ PiBSZXZpZXdlZC1ieTogSmltIEJyaWRlIDxqaW0uYnJpZGVAbGludXguaW50ZWwuY29tPiAodjIp Cj4gPj4gLS0tCj4gPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYyB8IDEyMiAr KysrKysrKysrKysrKysrKysrKysrKystLS0tLS0KPiA+PiAtLS0tLS0tLQo+ID4+ICAxIGZpbGUg Y2hhbmdlZCwgNzcgaW5zZXJ0aW9ucygrKSwgNDUgZGVsZXRpb25zKC0pCj4gPj4KPiA+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jCj4gPj4gYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmMKPiA+PiBpbmRleCA4MzY2N2U4Y2RkNmIuLmE4ZmY4 YzA5OTY4NSAxMDA2NDQKPiA+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9z LmMKPiA+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmMKPiA+PiBAQCAt MTAzNSw2ICsxMDM1LDc3IEBAIHN0YXRpYyB1OCB0cmFuc2xhdGVfaWJvb3N0KHU4IHZhbCkKPiA+ PiAgICAgICAgIHJldHVybiBtYXBwaW5nW3ZhbF07Cj4gPj4gIH0KPiA+Pgo+ID4+ICtzdGF0aWMg dm9pZCBzYW5pdGl6ZV9kZGNfcGluKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK PiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcG9ydCBwb3J0KQo+ID4+ICt7 Cj4gPj4gKyAgICAgICBjb25zdCBzdHJ1Y3QgZGRpX3ZidF9wb3J0X2luZm8gKmluZm8gPQo+ID4+ ICsgICAgICAgICAgICAgICAmZGV2X3ByaXYtPnZidC5kZGlfcG9ydF9pbmZvW3BvcnRdOwo+ID4+ ICsgICAgICAgZW51bSBwb3J0IHA7Cj4gPj4gKwo+ID4+ICsgICAgICAgaWYgKCFpbmZvLT5hbHRl cm5hdGVfZGRjX3BpbikKPiA+PiArICAgICAgICAgICAgICAgcmV0dXJuOwo+ID4+ICsKPiA+PiAr ICAgICAgIGZvcl9lYWNoX3BvcnRfbWFza2VkKHAsICgxIDw8IHBvcnQpIC0gMSkgewo+ID4+ICsg ICAgICAgICAgICAgICBzdHJ1Y3QgZGRpX3ZidF9wb3J0X2luZm8gKmkgPQo+ID4+ICZkZXZfcHJp di0+dmJ0LmRkaV9wb3J0X2luZm9bcF07Cj4gPj4gKwo+ID4+ICsgICAgICAgICAgICAgICBpZiAo aW5mby0+YWx0ZXJuYXRlX2RkY19waW4gIT0gaS0+YWx0ZXJuYXRlX2RkY19waW4pCj4gPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gPj4gKwo+ID4+ICsgICAgICAgICAgICAg ICBEUk1fREVCVUdfS01TKCJwb3J0ICVjIHRyeWluZyB0byB1c2UgdGhlIHNhbWUgRERDIHBpbgo+ ID4+ICgweCV4KSBhcyBwb3J0ICVjLCAiCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImRpc2FibGluZyBwb3J0ICVjIERWSS9IRE1JIHN1cHBvcnRcbiIsCj4gPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcG9ydF9uYW1lKHApLCBpLT5hbHRlcm5hdGVfZGRjX3BpbiwK PiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0X25hbWUocG9ydCksIHBvcnRf bmFtZShwKSk7Cj4gPj4gKwo+ID4+ICsgICAgICAgICAgICAgICAvKgo+ID4+ICsgICAgICAgICAg ICAgICAgKiBJZiB3ZSBoYXZlIG11bHRpcGxlIHBvcnRzIHN1cHBvc2VkbHkgc2hhcmluZyB0aGUK PiA+PiArICAgICAgICAgICAgICAgICogcGluLCB0aGVuIGR2aS9oZG1pIGNvdWxkbid0IGV4aXN0 IG9uIHRoZSBzaGFyZWQKPiA+PiArICAgICAgICAgICAgICAgICogcG9ydC4gT3RoZXJ3aXNlIHRo ZXkgc2hhcmUgdGhlIHNhbWUgZGRjIGJpbiBhbmQKPiA+PiArICAgICAgICAgICAgICAgICogc3lz dGVtIGNvdWxkbid0IGNvbW11bmljYXRlIHdpdGggdGhlbSBzZXBhcmF0ZWx5Lgo+ID4+ICsgICAg ICAgICAgICAgICAgKgo+ID4+ICsgICAgICAgICAgICAgICAgKiBEdWUgdG8gcGFyc2luZyB0aGUg cG9ydHMgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLAo+ID4+ICsgICAgICAgICAgICAgICAgKiBhIGhp Z2hlciBwb3J0IHdpbGwgYWx3YXlzIGNsb2JiZXIgYSBsb3dlciBvbmUuCj4gPj4gKyAgICAgICAg ICAgICAgICAqLwo+ID4+ICsgICAgICAgICAgICAgICBpLT5zdXBwb3J0c19kdmkgPSBmYWxzZTsK PiA+PiArICAgICAgICAgICAgICAgaS0+c3VwcG9ydHNfaGRtaSA9IGZhbHNlOwo+ID4+ICsgICAg ICAgICAgICAgICBpLT5hbHRlcm5hdGVfZGRjX3BpbiA9IDA7Cj4gPj4gKyAgICAgICB9Cj4gPj4g K30KPiA+PiArCj4gPj4gK3N0YXRpYyB2b2lkIHNhbml0aXplX2F1eF9jaChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu dW0gcG9ydCBwb3J0KQo+ID4+ICt7Cj4gPj4gKyAgICAgICBjb25zdCBzdHJ1Y3QgZGRpX3ZidF9w b3J0X2luZm8gKmluZm8gPQo+ID4+ICsgICAgICAgICAgICAgICAmZGV2X3ByaXYtPnZidC5kZGlf cG9ydF9pbmZvW3BvcnRdOwo+ID4+ICsgICAgICAgZW51bSBwb3J0IHA7Cj4gPj4gKwo+ID4+ICsg ICAgICAgaWYgKCFpbmZvLT5hbHRlcm5hdGVfYXV4X2NoYW5uZWwpCj4gPj4gKyAgICAgICAgICAg ICAgIHJldHVybjsKPiA+PiArCj4gPj4gKyAgICAgICBmb3JfZWFjaF9wb3J0X21hc2tlZChwLCAo MSA8PCBwb3J0KSAtIDEpIHsKPiA+PiArICAgICAgICAgICAgICAgc3RydWN0IGRkaV92YnRfcG9y dF9pbmZvICppID0KPiA+PiAmZGV2X3ByaXYtPnZidC5kZGlfcG9ydF9pbmZvW3BdOwo+ID4+ICsK PiA+PiArICAgICAgICAgICAgICAgaWYgKGluZm8tPmFsdGVybmF0ZV9hdXhfY2hhbm5lbCAhPQo+ ID4+IGktPmFsdGVybmF0ZV9hdXhfY2hhbm5lbCkKPiA+PiArICAgICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsKPiA+PiArCj4gPj4gKyAgICAgICAgICAgICAgIERSTV9ERUJVR19LTVMoInBv cnQgJWMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZSBBVVggQ0gKPiA+PiAoMHgleCkgYXMgcG9ydCAl YywgIgo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXNhYmxpbmcgcG9ydCAl YyBEUCBzdXBwb3J0XG4iLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRf bmFtZShwKSwgaS0+YWx0ZXJuYXRlX2F1eF9jaGFubmVsLAo+ID4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBvcnRfbmFtZShwb3J0KSwgcG9ydF9uYW1lKHApKTsKPiA+PiArCj4gPj4g KyAgICAgICAgICAgICAgIC8qCj4gPj4gKyAgICAgICAgICAgICAgICAqIElmIHdlIGhhdmUgbXVs dGlwbGUgcG9ydHMgc3VwcG9zZWRsdCBzaGFyaW5nIHRoZQo+ID4+ICsgICAgICAgICAgICAgICAg KiBhdXggY2hhbm5lbCwgdGhlbiBEUCBjb3VsZG4ndCBleGlzdCBvbiB0aGUgc2hhcmVkCj4gPj4g KyAgICAgICAgICAgICAgICAqIHBvcnQuIE90aGVyd2lzZSB0aGV5IHNoYXJlIHRoZSBzYW1lIGF1 eCBjaGFubmVsCj4gPj4gKyAgICAgICAgICAgICAgICAqIGFuZCBzeXN0ZW0gY291bGRuJ3QgY29t bXVuaWNhdGUgd2l0aCB0aGVtIHNlcGFyYXRlbHkuCj4gPj4gKyAgICAgICAgICAgICAgICAqCj4g Pj4gKyAgICAgICAgICAgICAgICAqIER1ZSB0byBwYXJzaW5nIHRoZSBwb3J0cyBpbiBhbHBoYWJl dGljYWwgb3JkZXIsCj4gPj4gKyAgICAgICAgICAgICAgICAqIGEgaGlnaGVyIHBvcnQgd2lsbCBh bHdheXMgY2xvYmJlciBhIGxvd2VyIG9uZS4KPiA+PiArICAgICAgICAgICAgICAgICovCj4gPj4g KyAgICAgICAgICAgICAgIGktPnN1cHBvcnRzX2RwID0gZmFsc2U7Cj4gPj4gKyAgICAgICAgICAg ICAgIGktPmFsdGVybmF0ZV9hdXhfY2hhbm5lbCA9IDA7Cj4gPj4gKyAgICAgICB9Cj4gPj4gK30K PiA+PiArCj4gPj4gIHN0YXRpYyB2b2lkIHBhcnNlX2RkaV9wb3J0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwgZW51bSBwb3J0Cj4gPj4gcG9ydCwKPiA+PiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYmRiX2hlYWRlciAqYmRiKQo+ID4+ICB7Cj4gPj4g QEAgLTExMDksNTQgKzExODAsMTUgQEAgc3RhdGljIHZvaWQgcGFyc2VfZGRpX3BvcnQoc3RydWN0 Cj4gPj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcG9ydCBwb3J0LAo+ID4+ICAg ICAgICAgICAgICAgICBEUk1fREVCVUdfS01TKCJQb3J0ICVjIGlzIGludGVybmFsIERQXG4iLAo+ ID4+IHBvcnRfbmFtZShwb3J0KSk7Cj4gPj4KPiA+PiAgICAgICAgIGlmIChpc19kdmkpIHsKPiA+ PiAtICAgICAgICAgICAgICAgaWYgKHBvcnQgPT0gUE9SVF9FKSB7Cj4gPj4gLSAgICAgICAgICAg ICAgICAgICAgICAgaW5mby0+YWx0ZXJuYXRlX2RkY19waW4gPSBkZGNfcGluOwo+ID4+IC0gICAg ICAgICAgICAgICAgICAgICAgIC8qIGlmIERESUUgc2hhcmUgZGRjIHBpbiB3aXRoIG90aGVyIHBv cnQsIHRoZW4KPiA+PiAtICAgICAgICAgICAgICAgICAgICAgICAgKiBkdmkvaGRtaSBjb3VsZG4n dCBleGlzdCBvbiB0aGUgc2hhcmVkIHBvcnQuCj4gPj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICogT3RoZXJ3aXNlIHRoZXkgc2hhcmUgdGhlIHNhbWUgZGRjIGJpbiBhbmQKPiA+PiBzeXN0ZW0K PiA+PiAtICAgICAgICAgICAgICAgICAgICAgICAgKiBjb3VsZG4ndCBjb21tdW5pY2F0ZSB3aXRo IHRoZW0gc2VwZXJhdGVseS4gKi8KPiA+PiAtICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGRj X3BpbiA9PSBERENfUElOX0IpIHsKPiA+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRldl9wcml2LT52YnQuZGRpX3BvcnRfaW5mb1tQT1JUX0JdLnN1cHBvcnRzX2R2aQo+ID4+ID0g MDsKPiA+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9wcml2LT52YnQuZGRp X3BvcnRfaW5mb1tQT1JUX0JdLnN1cHBvcnRzX2hkbWkKPiA+PiA9IDA7Cj4gPj4gLSAgICAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZGNfcGluID09IEREQ19QSU5fQykgewo+ID4+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X3ByaXYtPnZidC5kZGlfcG9ydF9pbmZv W1BPUlRfQ10uc3VwcG9ydHNfZHZpCj4gPj4gPSAwOwo+ID4+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGV2X3ByaXYtPnZidC5kZGlfcG9ydF9pbmZvW1BPUlRfQ10uc3VwcG9ydHNf aGRtaQo+ID4+ID0gMDsKPiA+PiAtICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRk Y19waW4gPT0gRERDX1BJTl9EKSB7Cj4gPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkZXZfcHJpdi0+dmJ0LmRkaV9wb3J0X2luZm9bUE9SVF9EXS5zdXBwb3J0c19kdmkKPiA+PiA9 IDA7Cj4gPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfcHJpdi0+dmJ0LmRk aV9wb3J0X2luZm9bUE9SVF9EXS5zdXBwb3J0c19oZG1pCj4gPj4gPSAwOwo+ID4+IC0gICAgICAg ICAgICAgICAgICAgICAgIH0KPiA+PiAtICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZGNfcGlu ID09IEREQ19QSU5fQiAmJiBwb3J0ICE9IFBPUlRfQikKPiA+PiAtICAgICAgICAgICAgICAgICAg ICAgICBEUk1fREVCVUdfS01TKCJVbmV4cGVjdGVkIEREQyBwaW4gZm9yIHBvcnQgQlxuIik7Cj4g Pj4gLSAgICAgICAgICAgICAgIGVsc2UgaWYgKGRkY19waW4gPT0gRERDX1BJTl9DICYmIHBvcnQg IT0gUE9SVF9DKQo+ID4+IC0gICAgICAgICAgICAgICAgICAgICAgIERSTV9ERUJVR19LTVMoIlVu ZXhwZWN0ZWQgRERDIHBpbiBmb3IgcG9ydCBDXG4iKTsKPiA+PiAtICAgICAgICAgICAgICAgZWxz ZSBpZiAoZGRjX3BpbiA9PSBERENfUElOX0QgJiYgcG9ydCAhPSBQT1JUX0QpCj4gPj4gLSAgICAg ICAgICAgICAgICAgICAgICAgRFJNX0RFQlVHX0tNUygiVW5leHBlY3RlZCBEREMgcGluIGZvciBw b3J0IERcbiIpOwo+ID4+ICsgICAgICAgICAgICAgICBpbmZvLT5hbHRlcm5hdGVfZGRjX3BpbiA9 IGRkY19waW47Cj4gPj4gKwo+ID4+ICsgICAgICAgICAgICAgICBzYW5pdGl6ZV9kZGNfcGluKGRl dl9wcml2LCBwb3J0KTsKPiA+PiAgICAgICAgIH0KPiA+Pgo+ID4+ICAgICAgICAgaWYgKGlzX2Rw KSB7Cj4gPj4gLSAgICAgICAgICAgICAgIGlmIChwb3J0ID09IFBPUlRfRSkgewo+ID4+IC0gICAg ICAgICAgICAgICAgICAgICAgIGluZm8tPmFsdGVybmF0ZV9hdXhfY2hhbm5lbCA9IGF1eF9jaGFu bmVsOwo+ID4+IC0gICAgICAgICAgICAgICAgICAgICAgIC8qIGlmIERESUUgc2hhcmUgYXV4IGNo YW5uZWwgd2l0aCBvdGhlciBwb3J0LCB0aGVuCj4gPj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICogRFAgY291bGRuJ3QgZXhpc3Qgb24gdGhlIHNoYXJlZCBwb3J0LiBPdGhlcndpc2UKPiA+PiAt ICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGV5IHNoYXJlIHRoZSBzYW1lIGF1eCBjaGFubmVs IGFuZCBzeXN0ZW0KPiA+PiAtICAgICAgICAgICAgICAgICAgICAgICAgKiBjb3VsZG4ndCBjb21t dW5pY2F0ZSB3aXRoIHRoZW0gc2VwZXJhdGVseS4gKi8KPiA+PiAtICAgICAgICAgICAgICAgICAg ICAgICBpZiAoYXV4X2NoYW5uZWwgPT0gRFBfQVVYX0EpCj4gPj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkZXZfcHJpdi0+dmJ0LmRkaV9wb3J0X2luZm9bUE9SVF9BXS5zdXBwb3J0 c19kcAo+ID4+ID0gMDsKPiA+PiAtICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhdXhf Y2hhbm5lbCA9PSBEUF9BVVhfQikKPiA+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRldl9wcml2LT52YnQuZGRpX3BvcnRfaW5mb1tQT1JUX0JdLnN1cHBvcnRzX2RwCj4gPj4gPSAw Owo+ID4+IC0gICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF1eF9jaGFubmVsID09IERQ X0FVWF9DKQo+ID4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X3ByaXYtPnZi dC5kZGlfcG9ydF9pbmZvW1BPUlRfQ10uc3VwcG9ydHNfZHAKPiA+PiA9IDA7Cj4gPj4gLSAgICAg ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXV4X2NoYW5uZWwgPT0gRFBfQVVYX0QpCj4gPj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfcHJpdi0+dmJ0LmRkaV9wb3J0X2lu Zm9bUE9SVF9EXS5zdXBwb3J0c19kcAo+ID4+ID0gMDsKPiA+PiAtICAgICAgICAgICAgICAgfQo+ ID4+IC0gICAgICAgICAgICAgICBlbHNlIGlmIChhdXhfY2hhbm5lbCA9PSBEUF9BVVhfQSAmJiBw b3J0ICE9IFBPUlRfQSkKPiA+PiAtICAgICAgICAgICAgICAgICAgICAgICBEUk1fREVCVUdfS01T KCJVbmV4cGVjdGVkIEFVWCBjaGFubmVsIGZvciBwb3J0Cj4gPj4gQVxuIik7Cj4gPj4gLSAgICAg ICAgICAgICAgIGVsc2UgaWYgKGF1eF9jaGFubmVsID09IERQX0FVWF9CICYmIHBvcnQgIT0gUE9S VF9CKQo+ID4+IC0gICAgICAgICAgICAgICAgICAgICAgIERSTV9ERUJVR19LTVMoIlVuZXhwZWN0 ZWQgQVVYIGNoYW5uZWwgZm9yIHBvcnQKPiA+PiBCXG4iKTsKPiA+PiAtICAgICAgICAgICAgICAg ZWxzZSBpZiAoYXV4X2NoYW5uZWwgPT0gRFBfQVVYX0MgJiYgcG9ydCAhPSBQT1JUX0MpCj4gPj4g LSAgICAgICAgICAgICAgICAgICAgICAgRFJNX0RFQlVHX0tNUygiVW5leHBlY3RlZCBBVVggY2hh bm5lbCBmb3IgcG9ydAo+ID4+IENcbiIpOwo+ID4+IC0gICAgICAgICAgICAgICBlbHNlIGlmIChh dXhfY2hhbm5lbCA9PSBEUF9BVVhfRCAmJiBwb3J0ICE9IFBPUlRfRCkKPiA+PiAtICAgICAgICAg ICAgICAgICAgICAgICBEUk1fREVCVUdfS01TKCJVbmV4cGVjdGVkIEFVWCBjaGFubmVsIGZvciBw b3J0Cj4gPj4gRFxuIik7Cj4gPj4gKyAgICAgICAgICAgICAgIGluZm8tPmFsdGVybmF0ZV9hdXhf Y2hhbm5lbCA9IGF1eF9jaGFubmVsOwo+ID4+ICsKPiA+PiArICAgICAgICAgICAgICAgc2FuaXRp emVfYXV4X2NoKGRldl9wcml2LCBwb3J0KTsKPiA+PiAgICAgICAgIH0KPiA+Pgo+ID4+ICAgICAg ICAgaWYgKGJkYi0+dmVyc2lvbiA+PSAxNTgpIHsKPiA+PiAtLQo+ID4+IDIuNy40Cj4gPj4KPiA+ Pgo+ID4KPiA+Cj4gPiAtLQo+ID4gRmFyIGF3YXkgZnJvbSB0aGUgcHJpbWFsIGluc3RpbmN0LCB0 aGUgc29uZyBzZWVtcyB0byBmYWRlIGF3YXksIHRoZSByaXZlcgo+ID4gZ2V0IHdpZGVyIGJldHdl ZW4geW91ciB0aG91Z2h0cyBhbmQgdGhlIHRoaW5ncyB3ZSBkbyBhbmQgc2F5Lgo+ID4KPiAKPiAK PiAKPiAtLSAKPiBGYXIgYXdheSBmcm9tIHRoZSBwcmltYWwgaW5zdGluY3QsIHRoZSBzb25nIHNl ZW1zIHRvIGZhZGUgYXdheSwgdGhlIHJpdmVyCj4gZ2V0IHdpZGVyIGJldHdlZW4geW91ciB0aG91 Z2h0cyBhbmQgdGhlIHRoaW5ncyB3ZSBkbyBhbmQgc2F5LgoKLS0gClZpbGxlIFN5cmrDpGzDpApJ bnRlbCBPVEMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==