From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Shankar, Uma" Subject: Re: [PATCH v6 13/35] drm/i915: Implement HDCP2.2 repeater authentication Date: Wed, 1 Aug 2018 10:30:00 +0000 Message-ID: References: <1531538117-1606-1-git-send-email-ramalingam.c@intel.com> <1531538117-1606-14-git-send-email-ramalingam.c@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1531538117-1606-14-git-send-email-ramalingam.c@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: "C, Ramalingam" , "intel-gfx@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" , "daniel@ffwll.ch" , "seanpaul@chromium.org" , "Winkler, Tomas" , "Usyskin, Alexander" List-Id: dri-devel@lists.freedesktop.org Cgo+LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPkZyb206IEMsIFJhbWFsaW5nYW0KPlNlbnQ6 IFNhdHVyZGF5LCBKdWx5IDE0LCAyMDE4IDg6NDUgQU0KPlRvOiBpbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnOyBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnOwo+ZGFuaWVsQGZm d2xsLmNoOyBzZWFucGF1bEBjaHJvbWl1bS5vcmc7IFdpbmtsZXIsIFRvbWFzCj48dG9tYXMud2lu a2xlckBpbnRlbC5jb20+OyBVc3lza2luLCBBbGV4YW5kZXIgPGFsZXhhbmRlci51c3lza2luQGlu dGVsLmNvbT47Cj5TaGFua2FyLCBVbWEgPHVtYS5zaGFua2FyQGludGVsLmNvbT4KPkNjOiBTaGFy bWEsIFNoYXNoYW5rIDxzaGFzaGFuay5zaGFybWFAaW50ZWwuY29tPjsgQywgUmFtYWxpbmdhbQo+ PHJhbWFsaW5nYW0uY0BpbnRlbC5jb20+Cj5TdWJqZWN0OiBbUEFUQ0ggdjYgMTMvMzVdIGRybS9p OTE1OiBJbXBsZW1lbnQgSERDUDIuMiByZXBlYXRlciBhdXRoZW50aWNhdGlvbgo+Cj5JbXBsZW1l bnRzIHRoZSBIRENQMi4yIHJlcGVhdGVycyBhdXRoZW50aWNhdGlvbiBzdGVwcyBzdWNoIGFzIHZl cmlmeWluZyB0aGUKPmRvd25zdHJlYW0gdG9wb2xvZ3kgYW5kIHNlbmRpbmcgc3RyZWFtIG1hbmFn ZW1lbnQgaW5mb3JtYXRpb24uCj4KPnYyOgo+ICBSZWJhc2VkLgo+djM6Cj4gIE5vIENoYW5nZXMu Cj52NDoKPiAgLUVJTlZBTCBpcyByZXR1cm5lZCBmb3IgdG9wb2xvZ3kgZXJyb3IgYW5kIHJvbGxv dmVyIHNjZW5hcmlvLgo+ICBFbmRpYW5uZXNzIGNvbnZlcnNpb24gZnVuYyBmcm9tIGRybV9oZGNw LmggaXMgdXNlZCBbVW1hXQo+djU6Cj4gIFJlYmFzZWQgYXMgcGFydCBvZiBwYXRjaGVzIHJlb3Jk ZXJpbmcuCj4gIERlZmluZWQgdGhlIG1laSBzZXJ2aWNlIGZ1bmN0aW9ucyBbRGFuaWVsXQo+djY6 Cj4gIFJlZGVmaW5lZCB0aGUgbWVpIHNlcnZpY2UgZnVuY3Rpb25zIGFzIHBlciBjb21wIHJlZGVz aWduLgo+Cj5TaWduZWQtb2ZmLWJ5OiBSYW1hbGluZ2FtIEMgPHJhbWFsaW5nYW0uY0BpbnRlbC5j b20+Cj4tLS0KPiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZGNwLmMgfCAxNzEKPisrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gaW5jbHVkZS9kcm0vZHJtX2hkY3Au aCAgICAgICAgICAgIHwgIDE1ICsrKysKPiAyIGZpbGVzIGNoYW5nZWQsIDE4NiBpbnNlcnRpb25z KCspCj4KPmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZGNwLmMKPmIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRjcC5jCj5pbmRleCBlZTFlMDZiYWMxNzUuLmEw OGQ4MGM3MTBkNyAxMDA2NDQKPi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkY3Au Ywo+KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRjcC5jCj5AQCAtMTE0NCw2ICsx MTQ0LDU2IEBAIHN0YXRpYyBpbnQgaGRjcDJfcHJlcGFyZV9za2V5KHN0cnVjdCBpbnRlbF9jb25u ZWN0b3IKPipjb25uZWN0b3IsCj4gCXJldHVybiByZXQ7Cj4gfQo+Cj4rc3RhdGljIGludAo+K2hk Y3AyX3ZlcmlmeV9yZXBfdG9wb2xvZ3lfcHJlcGFyZV9hY2soCj4rCQkJc3RydWN0IGludGVsX2Nv bm5lY3RvciAqY29ubmVjdG9yLAo+KwkJCXN0cnVjdCBoZGNwMl9yZXBfc2VuZF9yZWNlaXZlcmlk X2xpc3QgKnJlcF90b3BvbG9neSwKPisJCQlzdHJ1Y3QgaGRjcDJfcmVwX3NlbmRfYWNrICpyZXBf c2VuZF9hY2spIHsKPisJc3RydWN0IG1laV9oZGNwX2RhdGEgKmRhdGEgPSAmY29ubmVjdG9yLT5o ZGNwLm1laV9kYXRhOwo+KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGNvbm5lY3Rvci0+YmFzZS5kZXYpOwo+KwlzdHJ1Y3QgaTkxNV9jb21wb25lbnRfbWFzdGVy ICpjb21wID0gZGV2X3ByaXYtPmNvbXBfbWFzdGVyOwo+KwlpbnQgcmV0Owo+Kwo+KwlpZiAoIWNv bXApCj4rCQlyZXR1cm4gLUVJTlZBTDsKPisKPisJaWYgKCFjb21wLT5oZGNwX29wcyB8fCAhY29t cC0+bWVpX2NsZGV2IHx8IGRhdGEtPnBvcnQgPT0KPklOVkFMSURfUE9SVCkKPisJCXJldHVybiAt RUlOVkFMOwo+Kwo+KwlyZXQgPSBjb21wLT5oZGNwX29wcy0+cmVwZWF0ZXJfY2hlY2tfZmxvd19w cmVwYXJlX2Fjayhjb21wLQo+Pm1laV9jbGRldiwKPisJCQkJCQkJICAgICAgZGF0YSwKPisJCQkJ CQkJICAgICAgcmVwX3RvcG9sb2d5LAo+KwkJCQkJCQkgICAgICByZXBfc2VuZF9hY2spOwoKU2Ft ZSBhcyBtZW50aW9uZWQgaW4gZWFybGllciBwYXRjaCBpbiB0aGUgc2VyaWVzLgpPdGhlcndpc2Ug b3ZlcmFsbCB0aGUgY2hhbmdlIGxvb2tzIG9rIHRvIG1lLgoKPisJaWYgKHJldCA8IDApCj4rCQlj b21wLT5oZGNwX29wcy0+Y2xvc2VfaGRjcF9zZXNzaW9uKGNvbXAtPm1laV9jbGRldiwgZGF0YSk7 Cj4rCj4rCXJldHVybiByZXQ7Cj4rfQo+Kwo+K3N0YXRpYyBpbnQKPitoZGNwMl92ZXJpZnlfbXBy aW1lKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciwKPisJCSAgICBzdHJ1Y3QgaGRj cDJfcmVwX3N0cmVhbV9yZWFkeSAqc3RyZWFtX3JlYWR5KSB7Cj4rCXN0cnVjdCBtZWlfaGRjcF9k YXRhICpkYXRhID0gJmNvbm5lY3Rvci0+aGRjcC5tZWlfZGF0YTsKPisJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjb25uZWN0b3ItPmJhc2UuZGV2KTsKPisJc3Ry dWN0IGk5MTVfY29tcG9uZW50X21hc3RlciAqY29tcCA9IGRldl9wcml2LT5jb21wX21hc3RlcjsK PisJaW50IHJldDsKPisKPisJaWYgKCFjb21wKQo+KwkJcmV0dXJuIC1FSU5WQUw7Cj4rCj4rCWlm ICghY29tcC0+aGRjcF9vcHMgfHwgIWNvbXAtPm1laV9jbGRldiB8fCBkYXRhLT5wb3J0ID09Cj5J TlZBTElEX1BPUlQpCj4rCQlyZXR1cm4gLUVJTlZBTDsKPisKPisJcmV0ID0gY29tcC0+aGRjcF9v cHMtPnZlcmlmeV9tcHJpbWUoY29tcC0+bWVpX2NsZGV2LCBkYXRhLAo+KwkJCQkJICAgIHN0cmVh bV9yZWFkeSk7Cj4rCWlmIChyZXQgPCAwKQo+KwkJY29tcC0+aGRjcF9vcHMtPmNsb3NlX2hkY3Bf c2Vzc2lvbihjb21wLT5tZWlfY2xkZXYsIGRhdGEpOwo+Kwo+KwlyZXR1cm4gcmV0Owo+K30KPisK PiBzdGF0aWMgaW50IGhkY3AyX2F1dGhlbnRpY2F0ZV9wb3J0KHN0cnVjdCBpbnRlbF9jb25uZWN0 b3IgKmNvbm5lY3RvcikgIHsKPiAJc3RydWN0IG1laV9oZGNwX2RhdGEgKmRhdGEgPSAmY29ubmVj dG9yLT5oZGNwLm1laV9kYXRhOyBAQCAtMTMxOSw2Cj4rMTM2OSwxMjEgQEAgc3RhdGljIGludCBo ZGNwMl9zZXNzaW9uX2tleV9leGNoYW5nZShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yCj4qY29ubmVj dG9yKQo+IAlyZXR1cm4gMDsKPiB9Cj4KPitzdGF0aWMKPitpbnQgaGRjcDJfcHJvcGFnYXRlX3N0 cmVhbV9tYW5hZ2VtZW50X2luZm8oc3RydWN0IGludGVsX2Nvbm5lY3Rvcgo+Kypjb25uZWN0b3Ip IHsKPisJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBjb25uX3Rv X2RpZ19wb3J0KGNvbm5lY3Rvcik7Cj4rCXN0cnVjdCBpbnRlbF9oZGNwICpoZGNwID0gJmNvbm5l Y3Rvci0+aGRjcDsKPisJdW5pb24gewo+KwkJc3RydWN0IGhkY3AyX3JlcF9zdHJlYW1fbWFuYWdl IHN0cmVhbV9tYW5hZ2U7Cj4rCQlzdHJ1Y3QgaGRjcDJfcmVwX3N0cmVhbV9yZWFkeSBzdHJlYW1f cmVhZHk7Cj4rCX0gbXNnczsKPisJY29uc3Qgc3RydWN0IGludGVsX2hkY3Bfc2hpbSAqc2hpbSA9 IGhkY3AtPnNoaW07Cj4rCWludCByZXQ7Cj4rCj4rCS8qIFByZXBhcmUgUmVwZWF0ZXJBdXRoX1N0 cmVhbV9NYW5hZ2UgbXNnICovCj4rCW1zZ3Muc3RyZWFtX21hbmFnZS5tc2dfaWQgPSBIRENQXzJf Ml9SRVBfU1RSRUFNX01BTkFHRTsKPisJcmV2ZXJzZV9lbmRpYW5uZXNzKG1zZ3Muc3RyZWFtX21h bmFnZS5zZXFfbnVtX20sCj5IRENQXzJfMl9TRVFfTlVNX0xFTiwKPisJCQkgICAodTggKikmaGRj cC0+c2VxX251bV9tKTsKPisKPisJLyogSyBubyBvZiBzdHJlYW1zIGlzIGZpeGVkIGFzIDEuIFN0 b3JlZCBhcyBiaWctZW5kaWFuLiAqLwo+Kwltc2dzLnN0cmVhbV9tYW5hZ2UuayA9IF9fc3dhYjE2 KDEpOwo+Kwo+KwkvKiBGb3IgSERNSSB0aGlzIGlzIGZvcmNlZCB0byBiZSAweDAuIEZvciBEUCBT U1QgYWxzbyB0aGlzIGlzIDB4MC4gKi8KPisJbXNncy5zdHJlYW1fbWFuYWdlLnN0cmVhbXNbMF0u c3RyZWFtX2lkID0gMDsKPisJbXNncy5zdHJlYW1fbWFuYWdlLnN0cmVhbXNbMF0uc3RyZWFtX3R5 cGUgPSBoZGNwLT5jb250ZW50X3R5cGU7Cj4rCj4rCS8qIFNlbmQgaXQgdG8gUmVwZWF0ZXIgKi8K PisJcmV0ID0gc2hpbS0+d3JpdGVfMl8yX21zZyhpbnRlbF9kaWdfcG9ydCwgJm1zZ3Muc3RyZWFt X21hbmFnZSwKPisJCQkJICBzaXplb2YobXNncy5zdHJlYW1fbWFuYWdlKSk7Cj4rCWlmIChyZXQg PCAwKQo+KwkJcmV0dXJuIHJldDsKPisKPisJcmV0ID0gc2hpbS0+cmVhZF8yXzJfbXNnKGludGVs X2RpZ19wb3J0LAo+SERDUF8yXzJfUkVQX1NUUkVBTV9SRUFEWSwKPisJCQkJICZtc2dzLnN0cmVh bV9yZWFkeSwKPnNpemVvZihtc2dzLnN0cmVhbV9yZWFkeSkpOwoKSG93IHRoZSB0aW1lb3V0IG9m IDEwMG1zIGlzIGVuc3VyZWQgaGVyZS4KCj4rCWlmIChyZXQgPCAwKQo+KwkJcmV0dXJuIHJldDsK PisKPisJaGRjcC0+bWVpX2RhdGEuc2VxX251bV9tID0gaGRjcC0+c2VxX251bV9tOwo+KwloZGNw LT5tZWlfZGF0YS5zdHJlYW1zWzBdLnN0cmVhbV90eXBlID0gaGRjcC0+Y29udGVudF90eXBlOwo+ Kwo+KwlyZXQgPSBoZGNwMl92ZXJpZnlfbXByaW1lKGNvbm5lY3RvciwgJm1zZ3Muc3RyZWFtX3Jl YWR5KTsKPisJaWYgKHJldCA8IDApCj4rCQlyZXR1cm4gcmV0Owo+Kwo+KwloZGNwLT5zZXFfbnVt X20rKzsKPisKPisJaWYgKGhkY3AtPnNlcV9udW1fbSA+IEhEQ1BfMl8yX1NFUV9OVU1fTUFYKSB7 Cj4rCQlEUk1fREVCVUdfS01TKCJzZXFfbnVtX20gcm9sbCBvdmVyLlxuIik7Cj4rCQlyZXR1cm4g LTE7Cj4rCX0KPisKPisJcmV0dXJuIDA7Cj4rfQo+Kwo+K3N0YXRpYwo+K2ludCBoZGNwMl9hdXRo ZW50aWNhdGVfcmVwZWF0ZXJfdG9wb2xvZ3koc3RydWN0IGludGVsX2Nvbm5lY3Rvcgo+Kypjb25u ZWN0b3IpIHsKPisJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBj b25uX3RvX2RpZ19wb3J0KGNvbm5lY3Rvcik7Cj4rCXN0cnVjdCBpbnRlbF9oZGNwICpoZGNwID0g JmNvbm5lY3Rvci0+aGRjcDsKPisJdW5pb24gewo+KwkJc3RydWN0IGhkY3AyX3JlcF9zZW5kX3Jl Y2VpdmVyaWRfbGlzdCByZWN2aWRfbGlzdDsKPisJCXN0cnVjdCBoZGNwMl9yZXBfc2VuZF9hY2sg cmVwX2FjazsKPisJfSBtc2dzOwo+Kwljb25zdCBzdHJ1Y3QgaW50ZWxfaGRjcF9zaGltICpzaGlt ID0gaGRjcC0+c2hpbTsKPisJdWludDhfdCAqcnhfaW5mbzsKPisJdWludDMyX3Qgc2VxX251bV92 Owo+KwlpbnQgcmV0Owo+Kwo+KwlyZXQgPSBzaGltLT5yZWFkXzJfMl9tc2coaW50ZWxfZGlnX3Bv cnQsCj5IRENQXzJfMl9SRVBfU0VORF9SRUNWSURfTElTVCwKPisJCQkJICZtc2dzLnJlY3ZpZF9s aXN0LCBzaXplb2YobXNncy5yZWN2aWRfbGlzdCkpOwo+KwlpZiAocmV0IDwgMCkKPisJCXJldHVy biByZXQ7Cj4rCj4rCXJ4X2luZm8gPSBtc2dzLnJlY3ZpZF9saXN0LnJ4X2luZm87Cj4rCj4rCWlm IChIRENQXzJfMl9NQVhfQ0FTQ0FERV9FWENFRURFRChyeF9pbmZvWzFdKSB8fAo+KwkgICAgSERD UF8yXzJfTUFYX0RFVlNfRVhDRUVERUQocnhfaW5mb1sxXSkpIHsKPisJCURSTV9ERUJVR19LTVMo IlRvcG9sb2d5IE1heCBTaXplIEV4Y2VlZGVkXG4iKTsKPisJCXJldHVybiAtRUlOVkFMOwo+Kwl9 Cj4rCj4rCS8qIENvbnZlcnRpbmcgYW5kIFN0b3JpbmcgdGhlIHNlcV9udW1fdiB0byBsb2NhbCB2 YXJpYWJsZSBhcyBEV09SRCAqLwo+KwlyZXZlcnNlX2VuZGlhbm5lc3MoKHU4ICopJnNlcV9udW1f diwgSERDUF8yXzJfU0VRX05VTV9MRU4sCj4rCQkJICAgbXNncy5yZWN2aWRfbGlzdC5zZXFfbnVt X3YpOwo+Kwo+KwlpZiAoc2VxX251bV92IDwgaGRjcC0+c2VxX251bV92KSB7Cj4rCQkvKiBSb2xs IG92ZXIgb2YgdGhlIHNlcV9udW1fdiBmcm9tIHJlcGVhdGVyLiBSZWF1dGhlbnRpY2F0ZS4gKi8K PisJCURSTV9ERUJVR19LTVMoIlNlcV9udW1fdiByb2xsIG92ZXIuXG4iKTsKPisJCXJldHVybiAt RUlOVkFMOwo+Kwl9Cj4rCj4rCXJldCA9IGhkY3AyX3ZlcmlmeV9yZXBfdG9wb2xvZ3lfcHJlcGFy ZV9hY2soY29ubmVjdG9yLAo+KwkJCQkJCSAgICAmbXNncy5yZWN2aWRfbGlzdCwKPisJCQkJCQkg ICAgJm1zZ3MucmVwX2Fjayk7Cj4rCWlmIChyZXQgPCAwKQo+KwkJcmV0dXJuIHJldDsKPisKPisJ aGRjcC0+c2VxX251bV92ID0gc2VxX251bV92Owo+KwlyZXQgPSBzaGltLT53cml0ZV8yXzJfbXNn KGludGVsX2RpZ19wb3J0LCAmbXNncy5yZXBfYWNrLAo+KwkJCQkgIHNpemVvZihtc2dzLnJlcF9h Y2spKTsKPisJaWYgKHJldCA8IDApCj4rCQlyZXR1cm4gcmV0Owo+Kwo+KwlyZXR1cm4gMDsKPit9 Cj4rCj4rc3RhdGljIGludCBoZGNwMl9hdXRoZW50aWNhdGVfcmVwZWF0ZXIoc3RydWN0IGludGVs X2Nvbm5lY3Rvcgo+Kypjb25uZWN0b3IpIHsKPisJaW50IHJldDsKPisKPisJcmV0ID0gaGRjcDJf YXV0aGVudGljYXRlX3JlcGVhdGVyX3RvcG9sb2d5KGNvbm5lY3Rvcik7Cj4rCWlmIChyZXQgPCAw KQo+KwkJcmV0dXJuIHJldDsKPisKPisJcmV0dXJuIGhkY3AyX3Byb3BhZ2F0ZV9zdHJlYW1fbWFu YWdlbWVudF9pbmZvKGNvbm5lY3Rvcik7Cj4rfQo+Kwo+IHN0YXRpYyBpbnQgaGRjcDJfYXV0aGVu dGljYXRlX3Npbmsoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKSAgewo+IAlzdHJ1 Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCA9IGNvbm5fdG9fZGlnX3BvcnQo Y29ubmVjdG9yKTsKPkBAIC0xMzYwLDYgKzE1MjUsMTIgQEAgc3RhdGljIGludCBoZGNwMl9hdXRo ZW50aWNhdGVfc2luayhzdHJ1Y3QKPmludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+IAkJCQkJ ICAgICAgIHNpemVvZihzdHJlYW1fdHlwZV9tc2cpKTsKPiAJCWlmIChyZXQgPCAwKQo+IAkJCXJl dHVybiByZXQ7Cj4rCX0gZWxzZSBpZiAoaGRjcC0+aXNfcmVwZWF0ZXIpIHsKPisJCXJldCA9IGhk Y3AyX2F1dGhlbnRpY2F0ZV9yZXBlYXRlcihjb25uZWN0b3IpOwo+KwkJaWYgKHJldCA8IDApIHsK PisJCQlEUk1fREVCVUdfS01TKCJSZXBlYXRlciBBdXRoIEZhaWxlZC4gRXJyOiAlZFxuIiwKPnJl dCk7Cj4rCQkJcmV0dXJuIHJldDsKPisJCX0KPiAJfQo+Cj4gCWhkY3AtPm1laV9kYXRhLnN0cmVh bXNbMF0uc3RyZWFtX3R5cGUgPSBoZGNwLT5jb250ZW50X3R5cGU7IGRpZmYgLS1naXQKPmEvaW5j bHVkZS9kcm0vZHJtX2hkY3AuaCBiL2luY2x1ZGUvZHJtL2RybV9oZGNwLmggaW5kZXgKPjJiNGNm YjBiNzMyNC4uYzAxY2RiMWQ4NDhkIDEwMDY0NAo+LS0tIGEvaW5jbHVkZS9kcm0vZHJtX2hkY3Au aAo+KysrIGIvaW5jbHVkZS9kcm0vZHJtX2hkY3AuaAo+QEAgLTI1Miw0ICsyNTIsMTkgQEAgc3Ry dWN0IGhkY3AyX2RwX2VycmF0YV9zdHJlYW1fdHlwZSB7Cj4gI2RlZmluZSBIRENQXzJfMl9IRE1J X1JYU1RBVFVTX1JFQURZKHgpCQkoKHgpICYgQklUKDIpKQo+ICNkZWZpbmUgSERDUF8yXzJfSERN SV9SWFNUQVRVU19SRUFVVEhfUkVRKHgpCSgoeCkgJiBCSVQoMykpCj4KPisvKgo+KyAqIExpYnJh cnkgZnVuY3Rpb25zIGZvciBlbmRpYW5uZXNzIGFyZSBhbGlnbmVkIGZvciAxNi8zMi82NCBiaXRz Lgo+KyAqIEJ1dCBoZGNwIHNlcXVlbmNlIG51bWJlcnMgYXJlIDI0Yml0cy4gU28gZm9yIHRoZWly IEJ5dGUgc3dhcHBpbmcsCj4rICogYSBjb252ZXJzaW9uIGZ1bmN0aW9uIGlzIGRldmVsb3BlZC4K PisgKi8KPitzdGF0aWMgaW5saW5lIHZvaWQgcmV2ZXJzZV9lbmRpYW5uZXNzKHU4ICpkZXN0LCBz aXplX3Qgc3osIHU4ICpzcmMpIHsKPisJdTMyIGluZGV4Owo+Kwo+KwlpZiAoIXN6IHx8IHN6ID4g c2l6ZW9mKHUzMikpCj4rCQlyZXR1cm47Cj4rCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN6OyBp bmRleCsrKQo+KwkJZGVzdFtzeiAtIGluZGV4IC0gMV0gPSBzcmNbaW5kZXhdOwo+K30KPisKPiAj ZW5kaWYKPi0tCj4yLjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg==