From mboxrd@z Thu Jan 1 00:00:00 1970 From: "C, Ramalingam" Subject: Re: [PATCH v8 08/35] drm/i915: Implement HDCP2.2 repeater authentication Date: Wed, 12 Dec 2018 14:41:16 +0530 Message-ID: <6231ea94-d6ba-b081-aeeb-e173622ad5e3@intel.com> References: <1543315413-24302-1-git-send-email-ramalingam.c@intel.com> <1543315413-24302-9-git-send-email-ramalingam.c@intel.com> <20181206104549.GQ21184@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181206104549.GQ21184@phenom.ffwll.local> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, uma.shankar@intel.com, tomas.winkler@intel.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gMTIvNi8yMDE4IDQ6MTUgUE0sIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gT24gVHVlLCBOb3Yg MjcsIDIwMTggYXQgMDQ6MTM6MDZQTSArMDUzMCwgUmFtYWxpbmdhbSBDIHdyb3RlOgo+PiBJbXBs ZW1lbnRzIHRoZSBIRENQMi4yIHJlcGVhdGVycyBhdXRoZW50aWNhdGlvbiBzdGVwcyBzdWNoIGFz IHZlcmlmeWluZwo+PiB0aGUgZG93bnN0cmVhbSB0b3BvbG9neSBhbmQgc2VuZGluZyBzdHJlYW0g bWFuYWdlbWVudCBpbmZvcm1hdGlvbi4KPj4KPj4gdjI6Cj4+ICAgIFJlYmFzZWQuCj4+IHYzOgo+ PiAgICBObyBDaGFuZ2VzLgo+PiB2NDoKPj4gICAgLUVJTlZBTCBpcyByZXR1cm5lZCBmb3IgdG9w b2xvZ3kgZXJyb3IgYW5kIHJvbGxvdmVyIHNjZW5hcmlvLgo+PiAgICBFbmRpYW5uZXNzIGNvbnZl cnNpb24gZnVuYyBmcm9tIGRybV9oZGNwLmggaXMgdXNlZCBbVW1hXQo+PiB2NToKPj4gICAgUmVi YXNlZCBhcyBwYXJ0IG9mIHBhdGNoZXMgcmVvcmRlcmluZy4KPj4gICAgRGVmaW5lZCB0aGUgbWVp IHNlcnZpY2UgZnVuY3Rpb25zIFtEYW5pZWxdCj4+IHY2Ogo+PiAgICBSZWRlZmluZWQgdGhlIG1l aSBzZXJ2aWNlIGZ1bmN0aW9ucyBhcyBwZXIgY29tcCByZWRlc2lnbi4KPj4gdjc6Cj4+ICAgICVz L3VpbnR4eF90L3V4eAo+PiAgICBDaGVjayBmb3IgY29tcF9tYXN0ZXIgaXMgcmVtb3ZlZC4KPj4g djg6Cj4+ICAgIEFkanVzdCB0byB0aGUgbmV3IG1laSBpbnRlcmZhY2UuCj4+ICAgIHN0eWxlIGlz c3VlIGZpeGVkLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBSYW1hbGluZ2FtIEMgPHJhbWFsaW5nYW0u Y0BpbnRlbC5jb20+Cj4+IC0tLQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkY3Au YyB8IDEyNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQo+PiAgIGluY2x1 ZGUvZHJtL2RybV9oZGNwLmggICAgICAgICAgICB8ICAxNSArKysrKwo+PiAgIDIgZmlsZXMgY2hh bmdlZCwgMTM4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZGNwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9oZGNwLmMKPj4gaW5kZXggMGQ3ZmVhOWM5YmIxLi42NzlmM2MxNjQ1ODIgMTAwNjQ0 Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkY3AuYwo+PiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZGNwLmMKPj4gQEAgLTEwNjksNyArMTA2OSw3IEBAIHN0 YXRpYyBpbnQgaGRjcDJfcHJlcGFyZV9za2V5KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5l Y3RvciwKPj4gICAJcmV0dXJuIHJldDsKPj4gICB9Cj4+ICAgCj4+IC1zdGF0aWMgX19hdHRyaWJ1 dGVfXygodW51c2VkKSkgaW50Cj4+ICtzdGF0aWMgaW50Cj4+ICAgaGRjcDJfdmVyaWZ5X3JlcF90 b3BvbG9neV9wcmVwYXJlX2FjayhzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsCj4+ ICAgCQkJCSAgICAgIHN0cnVjdCBoZGNwMl9yZXBfc2VuZF9yZWNlaXZlcmlkX2xpc3QKPj4gICAJ CQkJCQkJCSpyZXBfdG9wb2xvZ3ksCj4+IEBAIC0xMDk5LDcgKzEwOTksNyBAQCBoZGNwMl92ZXJp ZnlfcmVwX3RvcG9sb2d5X3ByZXBhcmVfYWNrKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5l Y3RvciwKPj4gICAJcmV0dXJuIHJldDsKPj4gICB9Cj4+ICAgCj4+IC1zdGF0aWMgX19hdHRyaWJ1 dGVfXygodW51c2VkKSkgaW50Cj4+ICtzdGF0aWMgaW50Cj4+ICAgaGRjcDJfdmVyaWZ5X21wcmlt ZShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsCj4+ICAgCQkgICAgc3RydWN0IGhk Y3AyX3JlcF9zdHJlYW1fcmVhZHkgKnN0cmVhbV9yZWFkeSkKPj4gICB7Cj4+IEBAIC0xMzE1LDYg KzEzMTUsMTIxIEBAIHN0YXRpYyBpbnQgaGRjcDJfc2Vzc2lvbl9rZXlfZXhjaGFuZ2Uoc3RydWN0 IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+PiAgIAlyZXR1cm4gMDsKPj4gICB9Cj4+ICAg Cj4+ICtzdGF0aWMKPj4gK2ludCBoZGNwMl9wcm9wYWdhdGVfc3RyZWFtX21hbmFnZW1lbnRfaW5m byhzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpCj4+ICt7Cj4+ICsJc3RydWN0IGlu dGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBjb25uX3RvX2RpZ19wb3J0KGNvbm5l Y3Rvcik7Cj4+ICsJc3RydWN0IGludGVsX2hkY3AgKmhkY3AgPSAmY29ubmVjdG9yLT5oZGNwOwo+ PiArCXVuaW9uIHsKPj4gKwkJc3RydWN0IGhkY3AyX3JlcF9zdHJlYW1fbWFuYWdlIHN0cmVhbV9t YW5hZ2U7Cj4+ICsJCXN0cnVjdCBoZGNwMl9yZXBfc3RyZWFtX3JlYWR5IHN0cmVhbV9yZWFkeTsK Pj4gKwl9IG1zZ3M7Cj4+ICsJY29uc3Qgc3RydWN0IGludGVsX2hkY3Bfc2hpbSAqc2hpbSA9IGhk Y3AtPnNoaW07Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCS8qIFByZXBhcmUgUmVwZWF0ZXJBdXRo X1N0cmVhbV9NYW5hZ2UgbXNnICovCj4+ICsJbXNncy5zdHJlYW1fbWFuYWdlLm1zZ19pZCA9IEhE Q1BfMl8yX1JFUF9TVFJFQU1fTUFOQUdFOwo+PiArCXJldmVyc2VfZW5kaWFubmVzcyhtc2dzLnN0 cmVhbV9tYW5hZ2Uuc2VxX251bV9tLCBIRENQXzJfMl9TRVFfTlVNX0xFTiwKPj4gKwkJCSAgICh1 OCAqKSZoZGNwLT5zZXFfbnVtX20pOwo+PiArCj4+ICsJLyogSyBubyBvZiBzdHJlYW1zIGlzIGZp eGVkIGFzIDEuIFN0b3JlZCBhcyBiaWctZW5kaWFuLiAqLwo+PiArCW1zZ3Muc3RyZWFtX21hbmFn ZS5rID0gX19zd2FiMTYoMSk7Cj4+ICsKPj4gKwkvKiBGb3IgSERNSSB0aGlzIGlzIGZvcmNlZCB0 byBiZSAweDAuIEZvciBEUCBTU1QgYWxzbyB0aGlzIGlzIDB4MC4gKi8KPj4gKwltc2dzLnN0cmVh bV9tYW5hZ2Uuc3RyZWFtc1swXS5zdHJlYW1faWQgPSAwOwo+PiArCW1zZ3Muc3RyZWFtX21hbmFn ZS5zdHJlYW1zWzBdLnN0cmVhbV90eXBlID0gaGRjcC0+Y29udGVudF90eXBlOwo+PiArCj4+ICsJ LyogU2VuZCBpdCB0byBSZXBlYXRlciAqLwo+PiArCXJldCA9IHNoaW0tPndyaXRlXzJfMl9tc2co aW50ZWxfZGlnX3BvcnQsICZtc2dzLnN0cmVhbV9tYW5hZ2UsCj4+ICsJCQkJICBzaXplb2YobXNn cy5zdHJlYW1fbWFuYWdlKSk7Cj4+ICsJaWYgKHJldCA8IDApCj4+ICsJCXJldHVybiByZXQ7Cj4+ ICsKPj4gKwlyZXQgPSBzaGltLT5yZWFkXzJfMl9tc2coaW50ZWxfZGlnX3BvcnQsIEhEQ1BfMl8y X1JFUF9TVFJFQU1fUkVBRFksCj4+ICsJCQkJICZtc2dzLnN0cmVhbV9yZWFkeSwgc2l6ZW9mKG1z Z3Muc3RyZWFtX3JlYWR5KSk7Cj4+ICsJaWYgKHJldCA8IDApCj4+ICsJCXJldHVybiByZXQ7Cj4+ ICsKPj4gKwloZGNwLT5tZWlfZGF0YS5zZXFfbnVtX20gPSBoZGNwLT5zZXFfbnVtX207Cj4+ICsJ aGRjcC0+bWVpX2RhdGEuc3RyZWFtc1swXS5zdHJlYW1fdHlwZSA9IGhkY3AtPmNvbnRlbnRfdHlw ZTsKPj4gKwo+PiArCXJldCA9IGhkY3AyX3ZlcmlmeV9tcHJpbWUoY29ubmVjdG9yLCAmbXNncy5z dHJlYW1fcmVhZHkpOwo+PiArCWlmIChyZXQgPCAwKQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ ICsJaGRjcC0+c2VxX251bV9tKys7Cj4+ICsKPj4gKwlpZiAoaGRjcC0+c2VxX251bV9tID4gSERD UF8yXzJfU0VRX05VTV9NQVgpIHsKPj4gKwkJRFJNX0RFQlVHX0tNUygic2VxX251bV9tIHJvbGwg b3Zlci5cbiIpOwo+PiArCQlyZXR1cm4gLTE7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYwo+PiAraW50IGhkY3AyX2F1dGhlbnRpY2F0ZV9yZXBlYXRlcl90 b3BvbG9neShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpCj4+ICt7Cj4+ICsJc3Ry dWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBjb25uX3RvX2RpZ19wb3J0 KGNvbm5lY3Rvcik7Cj4+ICsJc3RydWN0IGludGVsX2hkY3AgKmhkY3AgPSAmY29ubmVjdG9yLT5o ZGNwOwo+PiArCXVuaW9uIHsKPj4gKwkJc3RydWN0IGhkY3AyX3JlcF9zZW5kX3JlY2VpdmVyaWRf bGlzdCByZWN2aWRfbGlzdDsKPj4gKwkJc3RydWN0IGhkY3AyX3JlcF9zZW5kX2FjayByZXBfYWNr Owo+PiArCX0gbXNnczsKPj4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfaGRjcF9zaGltICpzaGltID0g aGRjcC0+c2hpbTsKPj4gKwl1OCAqcnhfaW5mbzsKPj4gKwl1MzIgc2VxX251bV92Owo+PiArCWlu dCByZXQ7Cj4+ICsKPj4gKwlyZXQgPSBzaGltLT5yZWFkXzJfMl9tc2coaW50ZWxfZGlnX3BvcnQs IEhEQ1BfMl8yX1JFUF9TRU5EX1JFQ1ZJRF9MSVNULAo+PiArCQkJCSAmbXNncy5yZWN2aWRfbGlz dCwgc2l6ZW9mKG1zZ3MucmVjdmlkX2xpc3QpKTsKPj4gKwlpZiAocmV0IDwgMCkKPj4gKwkJcmV0 dXJuIHJldDsKPj4gKwo+PiArCXJ4X2luZm8gPSBtc2dzLnJlY3ZpZF9saXN0LnJ4X2luZm87Cj4+ ICsKPj4gKwlpZiAoSERDUF8yXzJfTUFYX0NBU0NBREVfRVhDRUVERUQocnhfaW5mb1sxXSkgfHwK Pj4gKwkgICAgSERDUF8yXzJfTUFYX0RFVlNfRVhDRUVERUQocnhfaW5mb1sxXSkpIHsKPj4gKwkJ RFJNX0RFQlVHX0tNUygiVG9wb2xvZ3kgTWF4IFNpemUgRXhjZWVkZWRcbiIpOwo+PiArCQlyZXR1 cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBDb252ZXJ0aW5nIGFuZCBTdG9yaW5nIHRo ZSBzZXFfbnVtX3YgdG8gbG9jYWwgdmFyaWFibGUgYXMgRFdPUkQgKi8KPj4gKwlyZXZlcnNlX2Vu ZGlhbm5lc3MoKHU4ICopJnNlcV9udW1fdiwgSERDUF8yXzJfU0VRX05VTV9MRU4sCj4+ICsJCQkg ICBtc2dzLnJlY3ZpZF9saXN0LnNlcV9udW1fdik7Cj4+ICsKPj4gKwlpZiAoc2VxX251bV92IDwg aGRjcC0+c2VxX251bV92KSB7Cj4+ICsJCS8qIFJvbGwgb3ZlciBvZiB0aGUgc2VxX251bV92IGZy b20gcmVwZWF0ZXIuIFJlYXV0aGVudGljYXRlLiAqLwo+PiArCQlEUk1fREVCVUdfS01TKCJTZXFf bnVtX3Ygcm9sbCBvdmVyLlxuIik7Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+ PiArCXJldCA9IGhkY3AyX3ZlcmlmeV9yZXBfdG9wb2xvZ3lfcHJlcGFyZV9hY2soY29ubmVjdG9y LAo+PiArCQkJCQkJICAgICZtc2dzLnJlY3ZpZF9saXN0LAo+PiArCQkJCQkJICAgICZtc2dzLnJl cF9hY2spOwo+PiArCWlmIChyZXQgPCAwKQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJaGRj cC0+c2VxX251bV92ID0gc2VxX251bV92Owo+PiArCXJldCA9IHNoaW0tPndyaXRlXzJfMl9tc2co aW50ZWxfZGlnX3BvcnQsICZtc2dzLnJlcF9hY2ssCj4+ICsJCQkJICBzaXplb2YobXNncy5yZXBf YWNrKSk7Cj4+ICsJaWYgKHJldCA8IDApCj4+ICsJCXJldHVybiByZXQ7Cj4+ICsKPj4gKwlyZXR1 cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBoZGNwMl9hdXRoZW50aWNhdGVfcmVwZWF0 ZXIoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+PiArewo+PiArCWludCByZXQ7 Cj4+ICsKPj4gKwlyZXQgPSBoZGNwMl9hdXRoZW50aWNhdGVfcmVwZWF0ZXJfdG9wb2xvZ3koY29u bmVjdG9yKTsKPj4gKwlpZiAocmV0IDwgMCkKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwo+PiArCXJl dHVybiBoZGNwMl9wcm9wYWdhdGVfc3RyZWFtX21hbmFnZW1lbnRfaW5mbyhjb25uZWN0b3IpOwo+ PiArfQo+PiArCj4+ICAgc3RhdGljIGludCBoZGNwMl9hdXRoZW50aWNhdGVfc2luayhzdHJ1Y3Qg aW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpCj4+ICAgewo+PiAgIAlzdHJ1Y3QgaW50ZWxfZGln aXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCA9IGNvbm5fdG9fZGlnX3BvcnQoY29ubmVjdG9yKTsK Pj4gQEAgLTEzNTYsNiArMTQ3MSwxMiBAQCBzdGF0aWMgaW50IGhkY3AyX2F1dGhlbnRpY2F0ZV9z aW5rKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvcikKPj4gICAJCQkJCSAgICAgICBz aXplb2Yoc3RyZWFtX3R5cGVfbXNnKSk7Cj4+ICAgCQlpZiAocmV0IDwgMCkKPj4gICAJCQlyZXR1 cm4gcmV0Owo+PiArCX0gZWxzZSBpZiAoaGRjcC0+aXNfcmVwZWF0ZXIpIHsKPj4gKwkJcmV0ID0g aGRjcDJfYXV0aGVudGljYXRlX3JlcGVhdGVyKGNvbm5lY3Rvcik7Cj4+ICsJCWlmIChyZXQgPCAw KSB7Cj4+ICsJCQlEUk1fREVCVUdfS01TKCJSZXBlYXRlciBBdXRoIEZhaWxlZC4gRXJyOiAlZFxu IiwgcmV0KTsKPj4gKwkJCXJldHVybiByZXQ7Cj4+ICsJCX0KPj4gICAJfQo+PiAgIAo+PiAgIAlo ZGNwLT5tZWlfZGF0YS5zdHJlYW1zWzBdLnN0cmVhbV90eXBlID0gaGRjcC0+Y29udGVudF90eXBl Owo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2hkY3AuaCBiL2luY2x1ZGUvZHJtL2Ry bV9oZGNwLmgKPj4gaW5kZXggYTZkZTA5YzVlNDdmLi4zZTQ1YTc2MThhYjMgMTAwNjQ0Cj4+IC0t LSBhL2luY2x1ZGUvZHJtL2RybV9oZGNwLmgKPj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2hkY3Au aAo+PiBAQCAtMjUwLDQgKzI1MCwxOSBAQCBzdHJ1Y3QgaGRjcDJfZHBfZXJyYXRhX3N0cmVhbV90 eXBlIHsKPj4gICAjZGVmaW5lIEhEQ1BfMl8yX0hETUlfUlhTVEFUVVNfUkVBRFkoeCkJCSgoeCkg JiBCSVQoMikpCj4+ICAgI2RlZmluZSBIRENQXzJfMl9IRE1JX1JYU1RBVFVTX1JFQVVUSF9SRVEo eCkJKCh4KSAmIEJJVCgzKSkKPj4gICAKPj4gKy8qCj4+ICsgKiBMaWJyYXJ5IGZ1bmN0aW9ucyBm b3IgZW5kaWFubmVzcyBhcmUgYWxpZ25lZCBmb3IgMTYvMzIvNjQgYml0cy4KPj4gKyAqIEJ1dCBo ZGNwIHNlcXVlbmNlIG51bWJlcnMgYXJlIDI0Yml0cy4gU28gZm9yIHRoZWlyIEJ5dGUgc3dhcHBp bmcsCj4+ICsgKiBhIGNvbnZlcnNpb24gZnVuY3Rpb24gaXMgZGV2ZWxvcGVkLgo+PiArICovCj4+ ICtzdGF0aWMgaW5saW5lIHZvaWQgcmV2ZXJzZV9lbmRpYW5uZXNzKHU4ICpkZXN0LCBzaXplX3Qg c3osIHU4ICpzcmMpCj4gVGhpcyBmZWVscyBhIGJpdCBmYWtlLWdlbmVyaWMgYW5kIGRvZXNuJ3Qg Zml0IHRoYXQgd2VsbCBpbnRvIHdoYXQgeW91IHdhbnQKPiBpdCB0byBkbyBpbiB0aGUgY29kZSBh Y3R1YWxseS4gV2hhdCBhYm91dDoKPgo+IHUzMiBkcm1faGRjcDJfc2VxX251bV90b191MzIodTgg c2VxX251bVtIRENQXzJfMl9TRVFfTlVNX0xFTl0pCj4gewo+IAlyZXR1cm4gc2VxX251bVsyXSB8 IHNlcV9udW1bMV0gPDwgOCB8IHNlcV9udW1bMF0gPDwgMTY7Cj4gfQoKVW5kZXJzdG9vZCB0aGUg cG9pbnQuIHdlIG5lZWQgZHJtX2hkY3AyX3UzMl90b19zZXFfbnVtIHRvby4uLiBJIHdpbGwgYWRk IAp0aGF0IHRvby4KCi1SYW0KCj4KPiAoSSBkaWRuJ3QgY2hlY2sgdGhlIG1hdGgpLgo+Cj4gSSB0 aGluayB0aGlzIHdvdWxkIGJvdGggbWFrZSB0aGUgY29kZSBtb3JlIGNsZWFyZXIgYW5kIGF2b2lk IHRoZSBwcm9ibGVtCj4gb2YgInNob3VsZG4ndCB3ZSBtYWtlIHN1cmUgdGhpcyB3b3JrcyBmb3Ig ZXZlcnl0aGluZyBhbmQgcHV0IGl0IGludG8KPiBsaW51eC9zdHJpbmcuaD8iCj4KPiBBZ2FpbiBJ J2xsIGNoZWNrIHRoZSBhY3R1YWwgaGRjcDIgZmxvdyBsYXRlciBvbi4KPgo+IEluIGdlbmVyYWwg SSdtIGtpbmRhIG5vdCBoYXBweSB3aXRoIHRoZSBzaGltIG1pZGxheWVyIGRlc2lnbiwgYnV0IEkg d2Fzbid0Cj4gaGFwcHkgd2l0aCB0aGF0IHdpdGggaGRjcDEgZWl0aGVyLCBhbmQgaGRjcDIgaXMg anVzdCBhbiBleHRlbnNpb24sIGFuZCBJCj4gZG9uJ3QgcmVhbGx5IGhhdmUgYSBiZXR0ZXIgaWRl YSBlaXRoZXIgc28gc2VlbXMgYWxsIGdvb2QgdG8gbWUuCj4gLURhbmllbAo+Cj4+ICt7Cj4+ICsJ dTMyIGluZGV4Owo+PiArCj4+ICsJaWYgKCFzeiB8fCBzeiA+IHNpemVvZih1MzIpKQo+PiArCQly ZXR1cm47Cj4+ICsJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgc3o7IGluZGV4KyspCj4+ICsJCWRl c3Rbc3ogLSBpbmRleCAtIDFdID0gc3JjW2luZGV4XTsKPj4gK30KPj4gKwo+PiAgICNlbmRpZgo+ PiAtLSAKPj4gMi43LjQKPj4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJp LWRldmVsCg==