From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ramalingam C Subject: [PATCH v3 04/10] drm/i915: HDCP SRM parsing and revocation check Date: Fri, 22 Mar 2019 06:14:42 +0530 Message-ID: <20190322004448.14045-5-ramalingam.c@intel.com> References: <20190322004448.14045-1-ramalingam.c@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190322004448.14045-1-ramalingam.c@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, daniel.vetter@ffwll.ch List-Id: intel-gfx@lists.freedesktop.org SW1wbGVtZW50cyB0aGUgU1JNIHRhYmxlIHBhcnNpbmcgZm9yIEhEQ1AgMS40IGFuZCAyLjIuCkFu ZCBhbHNvIHJldm9jYXRpb24gY2hlY2sgaXMgYWRkZWQgYXQgYXV0aGVudGljYXRpb24gb2YgSERD UDEuNAphbmQgMi4yCgpTaWduZWQtb2ZmLWJ5OiBSYW1hbGluZ2FtIEMgPHJhbWFsaW5nYW0uY0Bp bnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgIHwgICAxICsK IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICB8ICAgNiArCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kcnYuaCAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf aGRjcC5jIHwgMzA4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKystLQogaW5jbHVkZS9kcm0v ZHJtX2hkY3AuaCAgICAgICAgICAgIHwgIDMyICsrKysKIDUgZmlsZXMgY2hhbmdlZCwgMzM0IGlu c2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4 IGEzYjAwZWNjNThjOS4uNjBhODk0ZmFiNGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAg LTg3Myw2ICs4NzMsNyBAQCBzdGF0aWMgaW50IGk5MTVfZHJpdmVyX2luaXRfZWFybHkoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCW11dGV4X2luaXQoJmRldl9wcml2LT53bS53 bV9tdXRleCk7CiAJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPnBwc19tdXRleCk7CiAJbXV0ZXhfaW5p dCgmZGV2X3ByaXYtPmhkY3BfY29tcF9tdXRleCk7CisJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPnNy bV9tdXRleCk7CiAKIAlpOTE1X21lbWNweV9pbml0X2Vhcmx5KGRldl9wcml2KTsKIAlpbnRlbF9y dW50aW1lX3BtX2luaXRfZWFybHkoZGV2X3ByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5k ZXggYzY1YzJlNjY0OWRmLi45YjlkYWY2Yzk0OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApA QCAtMjA2MSw2ICsyMDYxLDEyIEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKIAkvKiBNdXRl eCB0byBwcm90ZWN0IHRoZSBhYm92ZSBoZGNwIGNvbXBvbmVudCByZWxhdGVkIHZhbHVlcy4gKi8K IAlzdHJ1Y3QgbXV0ZXggaGRjcF9jb21wX211dGV4OwogCisJdW5zaWduZWQgaW50IHJldm9jYXRl ZF9rc3ZfY250OworCXU4ICpyZXZvY2F0ZWRfa3N2X2xpc3Q7CisKKwkvKiBNdXRleCB0byBwcm90 ZWN0IHRoZSBkYXRhIGFib3V0IHJldm9jYXRlZCBrc3ZzICovCisJc3RydWN0IG11dGV4IHNybV9t dXRleDsKKwogCS8qCiAJICogTk9URTogVGhpcyBpcyB0aGUgZHJpMS91bXMgZHVuZ2VvbiwgZG9u J3QgYWRkIHN0dWZmIGhlcmUuIFlvdXIgcGF0Y2gKIAkgKiB3aWxsIGJlIHJlamVjdGVkLiBJbnN0 ZWFkIGxvb2sgZm9yIGEgYmV0dGVyIHBsYWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAppbmRl eCBlMzg3ZTg0MmY0MTQuLjRkYjE1ZWU4MTA0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgK QEAgLTIxODcsNiArMjE4Nyw4IEBAIHZvaWQgaW50ZWxfaGRjcF9jb21wb25lbnRfaW5pdChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpbnRlbF9oZGNwX2NvbXBvbmVu dF9maW5pKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB2b2lkIGludGVsX2hk Y3BfY2xlYW51cChzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpOwogdm9pZCBpbnRl bF9oZGNwX2hhbmRsZV9jcF9pcnEoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsK K3NzaXplX3QgaW50ZWxfaGRjcF9zcm1fdXBkYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwgY2hhciAqYnVmLAorCQkJICAgICAgc2l6ZV90IGNvdW50KTsKIAogLyogaW50ZWxf cHNyLmMgKi8KICNkZWZpbmUgQ0FOX1BTUihkZXZfcHJpdikgKEhBU19QU1IoZGV2X3ByaXYpICYm IGRldl9wcml2LT5wc3Iuc2lua19zdXBwb3J0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfaGRjcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRjcC5jCmlu ZGV4IDliNDkwNGE2Mjc0NC4uOTIxZjA3YzY0MzUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9oZGNwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRj cC5jCkBAIC0yNzMsNiArMjczLDYyIEBAIHUzMiBpbnRlbF9oZGNwX2dldF9yZXBlYXRlcl9jdGwo c3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQpCiAJcmV0dXJuIC1FSU5W QUw7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnRlbF9oZGNwX3ByaW50X2tzdih1OCAqa3N2 KQoreworCURSTV9ERUJVR19LTVMoIlx0JSMwNHgsICUjMDR4LCAlIzA0eCwgJSMwNHgsICUjMDR4 XG4iLCAqa3N2LAorCQkgICAgICAqKGtzdiArIDEpLCAqKGtzdiArIDIpLCAqKGtzdiArIDMpLCAq KGtzdiArIDQpKTsKK30KKworc3RhdGljIGlubGluZQorc3RydWN0IGludGVsX2Nvbm5lY3RvciAq aW50ZWxfaGRjcF90b19jb25uZWN0b3Ioc3RydWN0IGludGVsX2hkY3AgKmhkY3ApCit7CisJcmV0 dXJuIGNvbnRhaW5lcl9vZihoZGNwLCBzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yLCBoZGNwKTsKK30K KworLyogQ2hlY2sgaWYgYW55IG9mIHRoZSBLU1YgaXMgcmV2b2NhdGVkIGJ5IERDUCBMTEMgdGhy b3VnaCBTUk0gdGFibGUgKi8KK3N0YXRpYyBpbmxpbmUKK2Jvb2wgaW50ZWxfaGRjcF9rc3ZzX3Jl dm9jYXRlZChzdHJ1Y3QgaW50ZWxfaGRjcCAqaGRjcCwgdTggKmtzdnMsIHUzMiBrc3ZfY291bnQp Cit7CisJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gaW50ZWxfaGRjcF90b19j b25uZWN0b3IoaGRjcCk7CisJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3Bv cnQgPSBjb25uX3RvX2RpZ19wb3J0KGNvbm5lY3Rvcik7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0KKwkJCQlpbnRlbF9kaWdfcG9ydC0+YmFzZS5iYXNlLmRldi0+ZGV2X3By aXZhdGU7CisJdTMyIHJldl9rc3ZfY250LCBjbnQsIGksIGo7CisJdTggKnJldl9rc3ZfbGlzdDsK KworCW11dGV4X2xvY2soJmRldl9wcml2LT5zcm1fbXV0ZXgpOworCXJldl9rc3ZfY250ID0gZGV2 X3ByaXYtPnJldm9jYXRlZF9rc3ZfY250OworCXJldl9rc3ZfbGlzdCA9IGRldl9wcml2LT5yZXZv Y2F0ZWRfa3N2X2xpc3Q7CisKKwkvKiBJZiB0aGUgUmV2b2NhdGVkIGtzdiBsaXN0IGlzIGVtcHR5 ICovCisJaWYgKCFyZXZfa3N2X2NudCB8fCAhcmV2X2tzdl9saXN0KSB7CisJCW11dGV4X3VubG9j aygmZGV2X3ByaXYtPnNybV9tdXRleCk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlmb3IgIChj bnQgPSAwOyBjbnQgPCBrc3ZfY291bnQ7IGNudCsrKSB7CisJCXJldl9rc3ZfbGlzdCA9IGRldl9w cml2LT5yZXZvY2F0ZWRfa3N2X2xpc3Q7CisJCWZvciAoaSA9IDA7IGkgPCByZXZfa3N2X2NudDsg aSsrKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgRFJNX0hEQ1BfS1NWX0xFTjsgaisrKQorCQkJCWlm ICgqKGtzdnMgKyBqKSAhPSAqKHJldl9rc3ZfbGlzdCArIGopKSB7CisJCQkJCWJyZWFrOworCQkJ CX0gZWxzZSBpZiAoaiA9PSAoRFJNX0hEQ1BfS1NWX0xFTiAtIDEpKSB7CisJCQkJCURSTV9ERUJV R19LTVMoIlJldm9jYXRlZCBLU1YgaXMgIik7CisJCQkJCWludGVsX2hkY3BfcHJpbnRfa3N2KGtz dnMpOworCQkJCQltdXRleF91bmxvY2soJmRldl9wcml2LT5zcm1fbXV0ZXgpOworCQkJCQlyZXR1 cm4gdHJ1ZTsKKwkJCQl9CisJCQkvKiBNb3ZlIHRoZSBvZmZzZXQgdG8gbmV4dCBLU1YgaW4gdGhl IHJldm9jYXRlZCBsaXN0ICovCisJCQlyZXZfa3N2X2xpc3QgKz0gRFJNX0hEQ1BfS1NWX0xFTjsK KwkJfQorCisJCS8qIEl0ZXJhdGUgdG8gbmV4dCBrc3Zfb2Zmc2V0ICovCisJCWtzdnMgKz0gRFJN X0hEQ1BfS1NWX0xFTjsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+c3JtX211dGV4KTsK KwlyZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYwogaW50IGludGVsX2hkY3BfdmFsaWRhdGVfdl9w cmltZShzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwKIAkJCQljb25z dCBzdHJ1Y3QgaW50ZWxfaGRjcF9zaGltICpzaGltLApAQCAtNDkwLDkgKzU0NiwxMCBAQCBpbnQg aW50ZWxfaGRjcF92YWxpZGF0ZV92X3ByaW1lKHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmlu dGVsX2RpZ19wb3J0LAogCiAvKiBJbXBsZW1lbnRzIFBhcnQgMiBvZiB0aGUgSERDUCBhdXRob3Jp emF0aW9uIHByb2NlZHVyZSAqLwogc3RhdGljCi1pbnQgaW50ZWxfaGRjcF9hdXRoX2Rvd25zdHJl YW0oc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsCi0JCQkgICAgICAg Y29uc3Qgc3RydWN0IGludGVsX2hkY3Bfc2hpbSAqc2hpbSkKK2ludCBpbnRlbF9oZGNwX2F1dGhf ZG93bnN0cmVhbShzdHJ1Y3QgaW50ZWxfaGRjcCAqaGRjcCwKKwkJCSAgICAgICBzdHJ1Y3QgaW50 ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCkKIHsKKwljb25zdCBzdHJ1Y3QgaW50ZWxf aGRjcF9zaGltICpzaGltID0gaGRjcC0+c2hpbTsKIAl1OCBic3RhdHVzWzJdLCBudW1fZG93bnN0 cmVhbSwgKmtzdl9maWZvOwogCWludCByZXQsIGksIHRyaWVzID0gMzsKIApAQCAtNTMxLDYgKzU4 OCwxMSBAQCBpbnQgaW50ZWxfaGRjcF9hdXRoX2Rvd25zdHJlYW0oc3RydWN0IGludGVsX2RpZ2l0 YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsCiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKKwlpZiAo aW50ZWxfaGRjcF9rc3ZzX3Jldm9jYXRlZChoZGNwLCBrc3ZfZmlmbywgbnVtX2Rvd25zdHJlYW0p KSB7CisJCURSTV9FUlJPUigiUmV2b2NhdGVkIEtzdihzKSBpbiBrc3ZfZmlmb1xuIik7CisJCXJl dHVybiAtRVBFUk07CisJfQorCiAJLyoKIAkgKiBXaGVuIFYgcHJpbWUgbWlzbWF0Y2hlcywgRFAg U3BlYyBtYW5kYXRlcyByZS1yZWFkIG9mCiAJICogViBwcmltZSBhdGxlYXN0IHR3aWNlLgpAQCAt NTU3LDkgKzYxOSwxMSBAQCBpbnQgaW50ZWxfaGRjcF9hdXRoX2Rvd25zdHJlYW0oc3RydWN0IGlu dGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsCiB9CiAKIC8qIEltcGxlbWVudHMgUGFy dCAxIG9mIHRoZSBIRENQIGF1dGhvcml6YXRpb24gcHJvY2VkdXJlICovCi1zdGF0aWMgaW50IGlu dGVsX2hkY3BfYXV0aChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwK LQkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9oZGNwX3NoaW0gKnNoaW0pCitzdGF0aWMgaW50IGlu dGVsX2hkY3BfYXV0aChzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CisJc3Ry dWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBjb25uX3RvX2RpZ19wb3J0 KGNvbm5lY3Rvcik7CisJc3RydWN0IGludGVsX2hkY3AgKmhkY3AgPSAmY29ubmVjdG9yLT5oZGNw OworCWNvbnN0IHN0cnVjdCBpbnRlbF9oZGNwX3NoaW0gKnNoaW0gPSBoZGNwLT5zaGltOwogCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdjsKIAllbnVtIHBvcnQgcG9ydDsKIAl1bnNp Z25lZCBsb25nIHIwX3ByaW1lX2dlbl9zdGFydDsKQEAgLTYyNSw2ICs2ODksMTEgQEAgc3RhdGlj IGludCBpbnRlbF9oZGNwX2F1dGgoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGln X3BvcnQsCiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKKwlpZiAoaW50ZWxfaGRjcF9r c3ZzX3Jldm9jYXRlZChoZGNwLCBia3N2LnNoaW0sIDEpKSB7CisJCURSTV9FUlJPUigiQktTViBp cyByZXZvY2F0ZWRcbiIpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKwogCUk5MTVfV1JJVEUoUE9S VF9IRENQX0JLU1ZMTyhwb3J0KSwgYmtzdi5yZWdbMF0pOwogCUk5MTVfV1JJVEUoUE9SVF9IRENQ X0JLU1ZISShwb3J0KSwgYmtzdi5yZWdbMV0pOwogCkBAIC02OTgsNyArNzY3LDcgQEAgc3RhdGlj IGludCBpbnRlbF9oZGNwX2F1dGgoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGln X3BvcnQsCiAJICovCiAKIAlpZiAocmVwZWF0ZXJfcHJlc2VudCkKLQkJcmV0dXJuIGludGVsX2hk Y3BfYXV0aF9kb3duc3RyZWFtKGludGVsX2RpZ19wb3J0LCBzaGltKTsKKwkJcmV0dXJuIGludGVs X2hkY3BfYXV0aF9kb3duc3RyZWFtKGhkY3AsIGludGVsX2RpZ19wb3J0KTsKIAogCURSTV9ERUJV R19LTVMoIkhEQ1AgaXMgZW5hYmxlZCAobm8gcmVwZWF0ZXIgcHJlc2VudClcbiIpOwogCXJldHVy biAwOwpAQCAtNzM1LDcgKzgwNCw2IEBAIHN0YXRpYyBpbnQgX2ludGVsX2hkY3BfZGlzYWJsZShz dHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpCiAKIHN0YXRpYyBpbnQgX2ludGVsX2hk Y3BfZW5hYmxlKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKLQlzdHJ1Y3Qg aW50ZWxfaGRjcCAqaGRjcCA9ICZjb25uZWN0b3ItPmhkY3A7CiAJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gY29ubmVjdG9yLT5iYXNlLmRldi0+ZGV2X3ByaXZhdGU7CiAJaW50 IGksIHJldCwgdHJpZXMgPSAzOwogCkBAIC03NjAsOSArODI4LDkgQEAgc3RhdGljIGludCBfaW50 ZWxfaGRjcF9lbmFibGUoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogCiAJLyog SW5jYXNlIG9mIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmVzLCBIRENQIHNwZWMgZXhwZWN0cyByZWF1 dGguICovCiAJZm9yIChpID0gMDsgaSA8IHRyaWVzOyBpKyspIHsKLQkJcmV0ID0gaW50ZWxfaGRj cF9hdXRoKGNvbm5fdG9fZGlnX3BvcnQoY29ubmVjdG9yKSwgaGRjcC0+c2hpbSk7CisJCXJldCA9 IGludGVsX2hkY3BfYXV0aChjb25uZWN0b3IpOwogCQlpZiAoIXJldCkgewotCQkJaGRjcC0+aGRj cF9lbmNyeXB0ZWQgPSB0cnVlOworCQkJY29ubmVjdG9yLT5oZGNwLmhkY3BfZW5jcnlwdGVkID0g dHJ1ZTsKIAkJCXJldHVybiAwOwogCQl9CiAKQEAgLTc3NiwxMiArODQ0LDYgQEAgc3RhdGljIGlu dCBfaW50ZWxfaGRjcF9lbmFibGUoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKQog CXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUKLXN0cnVjdCBpbnRlbF9jb25uZWN0b3Ig KmludGVsX2hkY3BfdG9fY29ubmVjdG9yKHN0cnVjdCBpbnRlbF9oZGNwICpoZGNwKQotewotCXJl dHVybiBjb250YWluZXJfb2YoaGRjcCwgc3RydWN0IGludGVsX2Nvbm5lY3RvciwgaGRjcCk7Ci19 Ci0KIC8qIEltcGxlbWVudHMgUGFydCAzIG9mIHRoZSBIRENQIGF1dGhvcml6YXRpb24gcHJvY2Vk dXJlICovCiBzdGF0aWMgaW50IGludGVsX2hkY3BfY2hlY2tfbGluayhzdHJ1Y3QgaW50ZWxfY29u bmVjdG9yICpjb25uZWN0b3IpCiB7CkBAIC0xMTkzLDYgKzEyNTUsMTIgQEAgc3RhdGljIGludCBo ZGNwMl9hdXRoZW50aWNhdGlvbl9rZXlfZXhjaGFuZ2Uoc3RydWN0IGludGVsX2Nvbm5lY3RvciAq Y29ubmVjdG9yKQogCiAJaGRjcC0+aXNfcmVwZWF0ZXIgPSBIRENQXzJfMl9SWF9SRVBFQVRFUiht c2dzLnNlbmRfY2VydC5yeF9jYXBzWzJdKTsKIAorCWlmIChpbnRlbF9oZGNwX2tzdnNfcmV2b2Nh dGVkKGhkY3AsCisJCQkJICAgICAgbXNncy5zZW5kX2NlcnQuY2VydF9yeC5yZWNlaXZlcl9pZCwg MSkpIHsKKwkJRFJNX0VSUk9SKCJSZWNlaXZlciBJRCBpcyByZXZvY2F0ZWRcbiIpOworCQlyZXR1 cm4gLUVQRVJNOworCX0KKwogCS8qCiAJICogSGVyZSBtc2dzLm5vX3N0b3JlZF9rbSB3aWxsIGhv bGQgbXNncyBjb3JyZXNwb25kaW5nIHRvIHRoZSBrbQogCSAqIHN0b3JlZCBhbHNvLgpAQCAtMTM1 MSw3ICsxNDE5LDcgQEAgaW50IGhkY3AyX2F1dGhlbnRpY2F0ZV9yZXBlYXRlcl90b3BvbG9neShz dHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpCiAJfSBtc2dzOwogCWNvbnN0IHN0cnVj dCBpbnRlbF9oZGNwX3NoaW0gKnNoaW0gPSBoZGNwLT5zaGltOwogCXU4ICpyeF9pbmZvOwotCXUz MiBzZXFfbnVtX3Y7CisJdTMyIHNlcV9udW1fdiwgZGV2aWNlX2NudDsKIAlpbnQgcmV0OwogCiAJ cmV0ID0gc2hpbS0+cmVhZF8yXzJfbXNnKGludGVsX2RpZ19wb3J0LCBIRENQXzJfMl9SRVBfU0VO RF9SRUNWSURfTElTVCwKQEAgLTEzNzYsNiArMTQ0NCwxNCBAQCBpbnQgaGRjcDJfYXV0aGVudGlj YXRlX3JlcGVhdGVyX3RvcG9sb2d5KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvcikK IAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJZGV2aWNlX2NudCA9IEhEQ1BfMl8yX0RFVl9DT1VO VF9ISShyeF9pbmZvWzBdKSA8PCA0IHx8CisJCQlIRENQXzJfMl9ERVZfQ09VTlRfTE8ocnhfaW5m b1sxXSk7CisJaWYgKGludGVsX2hkY3Bfa3N2c19yZXZvY2F0ZWQoaGRjcCwgbXNncy5yZWN2aWRf bGlzdC5yZWNlaXZlcl9pZHMsCisJCQkJICAgICAgZGV2aWNlX2NudCkpIHsKKwkJRFJNX0VSUk9S KCJSZXZva2VkIHJlY2VpdmVyIElEKHMpIGlzIGluIGxpc3RcbiIpOworCQlyZXR1cm4gLUVQRVJN OworCX0KKwogCXJldCA9IGhkY3AyX3ZlcmlmeV9yZXBfdG9wb2xvZ3lfcHJlcGFyZV9hY2soY29u bmVjdG9yLAogCQkJCQkJICAgICZtc2dzLnJlY3ZpZF9saXN0LAogCQkJCQkJICAgICZtc2dzLnJl cF9hY2spOwpAQCAtMTgxOCw2ICsxODk0LDIwOCBAQCBpbnQgaW50ZWxfaGRjcF9pbml0KHN0cnVj dCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHUz MiBpbnRlbF9oZGNwX2dldF9yZXZvY2F0ZWRfa3N2X2NvdW50KHU4ICpidWYsIHUzMiB2cmxzX2xl bmd0aCkKK3sKKwl1MzIgcGFyc2VkX2J5dGVzID0gMCwga3N2X2NvdW50ID0gMCwgdnJsX2tzdl9j bnQsIHZybF9zejsKKworCWRvIHsKKwkJdnJsX2tzdl9jbnQgPSAqYnVmOworCQlrc3ZfY291bnQg Kz0gdnJsX2tzdl9jbnQ7CisKKwkJdnJsX3N6ID0gKHZybF9rc3ZfY250ICogRFJNX0hEQ1BfS1NW X0xFTikgKyAxOworCQlidWYgKz0gdnJsX3N6OworCQlwYXJzZWRfYnl0ZXMgKz0gdnJsX3N6Owor CX0gd2hpbGUgKHBhcnNlZF9ieXRlcyA8IHZybHNfbGVuZ3RoKTsKKworCXJldHVybiBrc3ZfY291 bnQ7Cit9CisKK3N0YXRpYyB1MzIgaW50ZWxfaGRjcF9nZXRfcmV2b2NhdGVkX2tzdnModTggKmtz dl9saXN0LCBjb25zdCB1OCAqYnVmLAorCQkJCQkgdTMyIHZybHNfbGVuZ3RoKQoreworCXUzMiBw YXJzZWRfYnl0ZXMgPSAwLCBrc3ZfY291bnQgPSAwOworCXUzMiB2cmxfa3N2X2NudCwgdnJsX2tz dl9zeiwgdnJsX2lkeCA9IDA7CisKKwlkbyB7CisJCXZybF9rc3ZfY250ID0gKmJ1ZjsKKwkJdnJs X2tzdl9zeiA9IHZybF9rc3ZfY250ICogRFJNX0hEQ1BfS1NWX0xFTjsKKworCQlidWYrKzsKKwor CQlEUk1fREVCVUdfS01TKCJ2cmw6ICVkLCBSZXZva2VkIEtTVnM6ICVkXG4iLCB2cmxfaWR4Kyss CisJCQkgICAgICB2cmxfa3N2X2NudCk7CisJCW1lbWNweShrc3ZfbGlzdCwgYnVmLCB2cmxfa3N2 X3N6KTsKKworCQlrc3ZfY291bnQgKz0gdnJsX2tzdl9jbnQ7CisJCWtzdl9saXN0ICs9IHZybF9r c3Zfc3o7CisJCWJ1ZiArPSB2cmxfa3N2X3N6OworCisJCXBhcnNlZF9ieXRlcyArPSAodnJsX2tz dl9zeiArIDEpOworCX0gd2hpbGUgKHBhcnNlZF9ieXRlcyA8IHZybHNfbGVuZ3RoKTsKKworCXJl dHVybiBrc3ZfY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgaW50ZWxfaGRjcF9wYXJzZV9zcm0oc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBjaGFyICpidWYsCisJCQkJc2l6ZV90IGNv dW50KQoreworCXN0cnVjdCBoZGNwX3NybV9oZWFkZXIgKmhlYWRlcjsKKwl1MzIgdnJsX2xlbmd0 aCwga3N2X2NvdW50OworCisJaWYgKGNvdW50IDwgKHNpemVvZihzdHJ1Y3QgaGRjcF9zcm1faGVh ZGVyKSArCisJICAgIERSTV9IRENQXzFfNF9WUkxfTEVOR1RIX1NJWkUgKyBEUk1fSERDUF8xXzRf RENQX1NJR19TSVpFKSkgeworCQlEUk1fRVJST1IoIkludmFsaWQgYmxvYiBsZW5ndGhcbiIpOwor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwloZWFkZXIgPSAoc3RydWN0IGhkY3Bfc3JtX2hlYWRl ciAqKWJ1ZjsKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+c3JtX211dGV4KTsKKwlEUk1fREVCVUdf S01TKCJTUk0gSUQ6IDB4JXgsIFNSTSBWZXI6IDB4JXgsIFNSTSBHZW4gTm86IDB4JXhcbiIsCisJ CSAgICAgIGhlYWRlci0+c3BlY19pbmRpY2F0b3Iuc3JtX2lkLAorCQkgICAgICBfX3N3YWIxNiho ZWFkZXItPnNybV92ZXJzaW9uKSwgaGVhZGVyLT5zcm1fZ2VuX25vKTsKKworCVdBUk5fT04oaGVh ZGVyLT5zcGVjX2luZGljYXRvci5yZXNlcnZlZF9oaSB8fAorCQloZWFkZXItPnNwZWNfaW5kaWNh dG9yLnJlc2VydmVkX2xvKTsKKworCWlmIChoZWFkZXItPnNwZWNfaW5kaWNhdG9yLnNybV9pZCAh PSBEUk1fSERDUF8xXzRfU1JNX0lEKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBzcm1faWRcbiIp OworCQltdXRleF91bmxvY2soJmRldl9wcml2LT5zcm1fbXV0ZXgpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwlidWYgPSBidWYgKyBzaXplb2YoKmhlYWRlcik7CisJdnJsX2xlbmd0aCA9ICgq YnVmIDw8IDE2IHwgKihidWYgKyAxKSA8PCA4IHwgKihidWYgKyAyKSk7CisJaWYgKGNvdW50IDwg KHNpemVvZihzdHJ1Y3QgaGRjcF9zcm1faGVhZGVyKSArIHZybF9sZW5ndGgpIHx8CisJICAgIHZy bF9sZW5ndGggPCAoRFJNX0hEQ1BfMV80X1ZSTF9MRU5HVEhfU0laRSArCisJCQkgIERSTV9IRENQ XzFfNF9EQ1BfU0lHX1NJWkUpKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBibG9iIGxlbmd0aCBv ciB2cmwgbGVuZ3RoXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+c3JtX211dGV4KTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogTGVuZ3RoIG9mIHRoZSBhbGwgdnJscyBjb21i aW5lZCAqLworCXZybF9sZW5ndGggLT0gKERSTV9IRENQXzFfNF9WUkxfTEVOR1RIX1NJWkUgKwor CQkgICAgICAgRFJNX0hEQ1BfMV80X0RDUF9TSUdfU0laRSk7CisKKwlpZiAoIXZybF9sZW5ndGgp IHsKKwkJRFJNX0RFQlVHX0tNUygiTm8gdnJsIGZvdW5kXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZk ZXZfcHJpdi0+c3JtX211dGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYnVmICs9IERS TV9IRENQXzFfNF9WUkxfTEVOR1RIX1NJWkU7CisJa3N2X2NvdW50ID0gaW50ZWxfaGRjcF9nZXRf cmV2b2NhdGVkX2tzdl9jb3VudChidWYsIHZybF9sZW5ndGgpOworCWlmICgha3N2X2NvdW50KSB7 CisJCURSTV9ERUJVR19LTVMoIlJldm9jYXRlZCBLU1YgY291bnQgaXMgMFxuIik7CisJCW11dGV4 X3VubG9jaygmZGV2X3ByaXYtPnNybV9tdXRleCk7CisJCXJldHVybiBjb3VudDsKKwl9CisKKwlr ZnJlZShkZXZfcHJpdi0+cmV2b2NhdGVkX2tzdl9saXN0KTsKKwlkZXZfcHJpdi0+cmV2b2NhdGVk X2tzdl9saXN0ID0ga3phbGxvYyhrc3ZfY291bnQgKiBEUk1fSERDUF9LU1ZfTEVOLAorCQkJCQkg ICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXZfcHJpdi0+cmV2b2NhdGVkX2tzdl9saXN0KSB7 CisJCURSTV9FUlJPUigiT3V0IG9mIE1lbW9yeVxuIik7CisJCW11dGV4X3VubG9jaygmZGV2X3By aXYtPnNybV9tdXRleCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmIChpbnRlbF9oZGNw X2dldF9yZXZvY2F0ZWRfa3N2cyhkZXZfcHJpdi0+cmV2b2NhdGVkX2tzdl9saXN0LAorCQkJCQkg IGJ1ZiwgdnJsX2xlbmd0aCkgIT0ga3N2X2NvdW50KSB7CisJCWRldl9wcml2LT5yZXZvY2F0ZWRf a3N2X2NudCA9IDA7CisJCWtmcmVlKGRldl9wcml2LT5yZXZvY2F0ZWRfa3N2X2xpc3QpOworCQlt dXRleF91bmxvY2soJmRldl9wcml2LT5zcm1fbXV0ZXgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlkZXZfcHJpdi0+cmV2b2NhdGVkX2tzdl9jbnQgPSBrc3ZfY291bnQ7CisJbXV0ZXhfdW5s b2NrKCZkZXZfcHJpdi0+c3JtX211dGV4KTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBp bnQgaW50ZWxfaGRjcDJfcGFyc2Vfc3JtKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwgY2hhciAqYnVmLAorCQkJCSBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGhkY3AyX3NybV9o ZWFkZXIgKmhlYWRlcjsKKwl1MzIgdnJsX2xlbmd0aCwga3N2X2NvdW50LCBrc3Zfc3o7CisKKwlt dXRleF9sb2NrKCZkZXZfcHJpdi0+c3JtX211dGV4KTsKKwlpZiAoY291bnQgPCAoc2l6ZW9mKHN0 cnVjdCBoZGNwMl9zcm1faGVhZGVyKSArCisJICAgIERSTV9IRENQXzJfVlJMX0xFTkdUSF9TSVpF ICsgRFJNX0hEQ1BfMl9EQ1BfU0lHX1NJWkUpKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBibG9i IGxlbmd0aFxuIik7CisJCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnNybV9tdXRleCk7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCWhlYWRlciA9IChzdHJ1Y3QgaGRjcDJfc3JtX2hlYWRlciAq KWJ1ZjsKKwlEUk1fREVCVUdfS01TKCJTUk0gSUQ6IDB4JXgsIFNSTSBWZXI6IDB4JXgsIFNSTSBH ZW4gTm86IDB4JXhcbiIsCisJCSAgICAgIGhlYWRlci0+c3BlY19pbmRpY2F0b3Iuc3JtX2lkLAor CQkgICAgICBfX3N3YWIxNihoZWFkZXItPnNybV92ZXJzaW9uKSwgaGVhZGVyLT5zcm1fZ2VuX25v KTsKKworCVdBUk5fT04oaGVhZGVyLT5zcGVjX2luZGljYXRvci5yZXNlcnZlZCk7CisJYnVmID0g YnVmICsgc2l6ZW9mKCpoZWFkZXIpOworCXZybF9sZW5ndGggPSAoKmJ1ZiA8PCAxNiB8ICooYnVm ICsgMSkgPDwgOCB8ICooYnVmICsgMikpOworCisJaWYgKGNvdW50IDwgKHNpemVvZihzdHJ1Y3Qg aGRjcDJfc3JtX2hlYWRlcikgKyB2cmxfbGVuZ3RoKSB8fAorCSAgICB2cmxfbGVuZ3RoIDwgKERS TV9IRENQXzJfVlJMX0xFTkdUSF9TSVpFICsKKwkgICAgRFJNX0hEQ1BfMl9EQ1BfU0lHX1NJWkUp KSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBibG9iIGxlbmd0aCBvciB2cmwgbGVuZ3RoXG4iKTsK KwkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+c3JtX211dGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJLyogTGVuZ3RoIG9mIHRoZSBhbGwgdnJscyBjb21iaW5lZCAqLworCXZybF9sZW5n dGggLT0gKERSTV9IRENQXzJfVlJMX0xFTkdUSF9TSVpFICsKKwkJICAgICAgIERSTV9IRENQXzJf RENQX1NJR19TSVpFKTsKKworCWlmICghdnJsX2xlbmd0aCkgeworCQlEUk1fREVCVUdfS01TKCJO byB2cmwgZm91bmRcbiIpOworCQltdXRleF91bmxvY2soJmRldl9wcml2LT5zcm1fbXV0ZXgpOwor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlidWYgKz0gRFJNX0hEQ1BfMl9WUkxfTEVOR1RIX1NJ WkU7CisJa3N2X2NvdW50ID0gKCpidWYgPDwgMikgfCBEUk1fSERDUF8yX0tTVl9DT1VOVF8yX0xT QklUUygqKGJ1ZiArIDEpKTsKKwlpZiAoIWtzdl9jb3VudCkgeworCQlEUk1fREVCVUdfS01TKCJS ZXZvY2F0ZWQgS1NWIGNvdW50IGlzIDBcbiIpOworCQltdXRleF91bmxvY2soJmRldl9wcml2LT5z cm1fbXV0ZXgpOworCQlyZXR1cm4gY291bnQ7CisJfQorCisJa2ZyZWUoZGV2X3ByaXYtPnJldm9j YXRlZF9rc3ZfbGlzdCk7CisJZGV2X3ByaXYtPnJldm9jYXRlZF9rc3ZfbGlzdCA9IGt6YWxsb2Mo a3N2X2NvdW50ICogRFJNX0hEQ1BfS1NWX0xFTiwKKwkJCQkJICAgICAgIEdGUF9LRVJORUwpOwor CWlmICghZGV2X3ByaXYtPnJldm9jYXRlZF9rc3ZfbGlzdCkgeworCQlEUk1fRVJST1IoIk91dCBv ZiBNZW1vcnlcbiIpOworCQltdXRleF91bmxvY2soJmRldl9wcml2LT5zcm1fbXV0ZXgpOworCQly ZXR1cm4gLUVOT01FTTsKKwl9CisKKwlrc3Zfc3ogPSBrc3ZfY291bnQgKiBEUk1fSERDUF9LU1Zf TEVOOworCWJ1ZiArPSBEUk1fSERDUF8yX05PX09GX0RFVl9QTFVTX1JFU0VSVkVEX1NaOworCisJ RFJNX0RFQlVHX0tNUygiUmV2b2tlZCBLU1ZzOiAlZFxuIiwga3N2X2NvdW50KTsKKwltZW1jcHko ZGV2X3ByaXYtPnJldm9jYXRlZF9rc3ZfbGlzdCwgYnVmLCBrc3Zfc3opOworCisJZGV2X3ByaXYt PnJldm9jYXRlZF9rc3ZfY250ID0ga3N2X2NvdW50OworCW11dGV4X3VubG9jaygmZGV2X3ByaXYt PnNybV9tdXRleCk7CisJcmV0dXJuIGNvdW50OworfQorCitzc2l6ZV90IGludGVsX2hkY3Bfc3Jt X3VwZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGNoYXIgKmJ1ZiwKKwkJ CSAgICAgIHNpemVfdCBjb3VudCkKK3sKKwl1OCBzcm1faWQ7CisKKwlzcm1faWQgPSAqKCh1OCAq KWJ1Zik7CisJaWYgKHNybV9pZCA9PSAweDgwKQorCQlyZXR1cm4gKHNzaXplX3QpaW50ZWxfaGRj cF9wYXJzZV9zcm0oZGV2X3ByaXYsIGJ1ZiwgY291bnQpOworCWVsc2UgaWYgKHNybV9pZCA9PSAw eDkxKQorCQlyZXR1cm4gKHNzaXplX3QpaW50ZWxfaGRjcDJfcGFyc2Vfc3JtKGRldl9wcml2LCBi dWYsIGNvdW50KTsKKworCXJldHVybiAoc3NpemVfdCktRUlOVkFMOworfQorCiBpbnQgaW50ZWxf aGRjcF9lbmFibGUoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yLCB1OCBjb250ZW50 X3R5cGUpCiB7CiAJc3RydWN0IGludGVsX2hkY3AgKmhkY3AgPSAmY29ubmVjdG9yLT5oZGNwOwpk aWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2hkY3AuaCBiL2luY2x1ZGUvZHJtL2RybV9oZGNw LmgKaW5kZXggZjI0MzQwOGVjZjI2Li42NTJhYWY1ZDY1OGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUv ZHJtL2RybV9oZGNwLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2hkY3AuaApAQCAtMjY1LDQgKzI2 NSwzNiBAQCB2b2lkIGRybV9oZGNwMl91MzJfdG9fc2VxX251bSh1OCBzZXFfbnVtW0hEQ1BfMl8y X1NFUV9OVU1fTEVOXSwgdTMyIHZhbCkKIAlzZXFfbnVtWzJdID0gdmFsOwogfQogCisjZGVmaW5l IERSTV9IRENQXzFfNF9TUk1fSUQJCQkweDgKKyNkZWZpbmUgRFJNX0hEQ1BfMV80X1ZSTF9MRU5H VEhfU0laRQkJMworI2RlZmluZSBEUk1fSERDUF8xXzRfRENQX1NJR19TSVpFCQk0MAorCitzdHJ1 Y3QgaGRjcF9zcm1faGVhZGVyIHsKKwlzdHJ1Y3QgeworCQl1OCByZXNlcnZlZF9oaTo0OworCQl1 OCBzcm1faWQ6NDsKKwkJdTggcmVzZXJ2ZWRfbG87CisJfSBzcGVjX2luZGljYXRvcjsKKwl1MTYg c3JtX3ZlcnNpb247CisJdTggc3JtX2dlbl9ubzsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgRFJN X0hEQ1BfMl9TUk1fSUQJCQkweDkKKyNkZWZpbmUgRFJNX0hEQ1BfMl9JTkRJQ0FUT1IJCQkweDEK KyNkZWZpbmUgRFJNX0hEQ1BfMl9WUkxfTEVOR1RIX1NJWkUJCTMKKyNkZWZpbmUgRFJNX0hEQ1Bf Ml9EQ1BfU0lHX1NJWkUJCQkzODQKKyNkZWZpbmUgRFJNX0hEQ1BfMl9OT19PRl9ERVZfUExVU19S RVNFUlZFRF9TWgk0CisKKyNkZWZpbmUgRFJNX0hEQ1BfMl9LU1ZfQ09VTlRfMl9MU0JJVFMoYnl0 ZSkJKCgoYnl0ZSkgJiAweEMpID4+IDYpCisKK3N0cnVjdCBoZGNwMl9zcm1faGVhZGVyIHsKKwlz dHJ1Y3QgeworCQl1OCBoZGNwMl9pbmRpY2F0b3I6NDsKKwkJdTggc3JtX2lkOjQ7CisJCXU4IHJl c2VydmVkOworCX0gc3BlY19pbmRpY2F0b3I7CisJdTE2IHNybV92ZXJzaW9uOworCXU4IHNybV9n ZW5fbm87Cit9IF9fcGFja2VkOworCiAjZW5kaWYKLS0gCjIuMTkuMQoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4