From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oscar Mateo Subject: [PATCH 2/5] drm/i915: Split out functions for different kinds of workarounds Date: Tue, 13 Feb 2018 11:13:29 -0800 Message-ID: <1518549212-34904-2-git-send-email-oscar.mateo@intel.com> References: <1518549212-34904-1-git-send-email-oscar.mateo@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6CE1E6E2A0 for ; Tue, 13 Feb 2018 19:15:32 +0000 (UTC) In-Reply-To: <1518549212-34904-1-git-send-email-oscar.mateo@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org VGhlcmUgYXJlIGRpZmZlcmVudCBraW5kIG9mIHdvcmthcm91bmRzICh0aG9zZSB0aGF0IG1vZGlm eSByZWdpc3RlcnMgdGhhdApsaXZlIGluIHRoZSBjb250ZXh0IGltYWdlLCB0aG9zZSB0aGF0IG1v ZGlmeSBnbG9iYWwgcmVnaXN0ZXJzLCB0aG9zZSB0aGF0CndoaXRlbGlzdCByZWdpc3RlcnMsIGV0 Yy4uLikgYW5kIHRoZXkgaGF2ZSBkaWZmZXJlbnQgcmVxdWlyZW1lbnRzIGluIHRlcm1zCm9mIHdo ZXJlIHRoZXkgYXJlIGFwcGxpZWQgYW5kIGhvdy4gQWxzbywgYnkgc3BsaXR0aW5nIHRoZW0gYXBh cnQsIGl0IHNob3VsZApiZSBlYXNpZXIgdG8gZGVjaWRlIHdoZXJlIGEgbmV3IHdvcmthcm91bmQg c2hvdWxkIGdvLgoKdjI6CiAgLSBBZGQgbXVsdGlwbGUgTUlTU0lOR19DQVNFCiAgLSBSZWJhc2Vk Cgp2MzoKICAtIFJlbmFtZSBtbWlvX3dvcmthcm91bmRzIHRvIGd0X3dvcmthcm91bmRzIChDaHJp cywgTWlrYSkKICAtIENyZWF0ZSBlbXB0eSBwbGFjZWhvbGRlcnMgZm9yIEJEVyBhbmQgQ0hWIEdU IFdBcwogIC0gUmViYXNlZAoKdjQ6IFJlYmFzZWQKClNpZ25lZC1vZmYtYnk6IE9zY2FyIE1hdGVv IDxvc2Nhci5tYXRlb0BpbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdp bHNvbi5jby51az4KQ2M6IE1pa2EgS3VvcHBhbGEgPG1pa2Eua3VvcHBhbGFAbGludXguaW50ZWwu Y29tPgpDYzogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4K LS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgIHwgICAzICsKIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYyAgfCAgIDYgKwogZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgICAgICAgICB8ICAxMCArLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jICB8ICAgNCArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfd29ya2Fyb3VuZHMuYyB8IDYyNyArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0t CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5oIHwgICA4ICstCiA2IGZp bGVzIGNoYW5nZWQsIDQxNCBpbnNlcnRpb25zKCspLCAyNDQgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtLmMKaW5kZXggZmM2OGIzNS4uOTQ3MDdjMiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCiAjaW5jbHVk ZSAiaW50ZWxfZnJvbnRidWZmZXIuaCIKICNpbmNsdWRlICJpbnRlbF9tb2NzLmgiCisjaW5jbHVk ZSAiaW50ZWxfd29ya2Fyb3VuZHMuaCIKICNpbmNsdWRlICJpOTE1X2dlbWZzLmgiCiAjaW5jbHVk ZSA8bGludXgvZG1hLWZlbmNlLWFycmF5Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgpA QCAtNTEwNyw2ICs1MTA4LDggQEAgaW50IGk5MTVfZ2VtX2luaXRfaHcoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQogCQl9CiAJfQogCisJaW50ZWxfZ3Rfd29ya2Fyb3VuZHNfYXBw bHkoZGV2X3ByaXYpOworCiAJaTkxNV9nZW1faW5pdF9zd2l6emxpbmcoZGV2X3ByaXYpOwogCiAJ LyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwppbmRleCAzZDc1ZjQ4Li5h NWFkYTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0 LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCkBAIC05MCw2 ICs5MCw3IEBACiAjaW5jbHVkZSA8ZHJtL2k5MTVfZHJtLmg+CiAjaW5jbHVkZSAiaTkxNV9kcnYu aCIKICNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCisjaW5jbHVkZSAiaW50ZWxfd29ya2Fyb3VuZHMu aCIKIAogI2RlZmluZSBBTExfTDNfU0xJQ0VTKGRldikgKDEgPDwgTlVNX0wzX1NMSUNFUyhkZXYp KSAtIDEKIApAQCAtNDUyLDExICs0NTMsMTYgQEAgc3RhdGljIGJvb2wgbmVlZHNfcHJlZW1wdF9j b250ZXh0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogaW50IGk5MTVfZ2VtX2NvbnRl eHRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewogCXN0cnVjdCBp OTE1X2dlbV9jb250ZXh0ICpjdHg7CisJaW50IHJldDsKIAogCS8qIFJlYXNzdXJlIG91cnNlbHZl cyB3ZSBhcmUgb25seSBjYWxsZWQgb25jZSAqLwogCUdFTV9CVUdfT04oZGV2X3ByaXYtPmtlcm5l bF9jb250ZXh0KTsKIAlHRU1fQlVHX09OKGRldl9wcml2LT5wcmVlbXB0X2NvbnRleHQpOwogCisJ cmV0ID0gaW50ZWxfY3R4X3dvcmthcm91bmRzX2luaXQoZGV2X3ByaXYpOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKIAlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPmNvbnRleHRzLmxpc3Qp OwogCUlOSVRfV09SSygmZGV2X3ByaXYtPmNvbnRleHRzLmZyZWVfd29yaywgY29udGV4dHNfZnJl ZV93b3JrZXIpOwogCWluaXRfbGxpc3RfaGVhZCgmZGV2X3ByaXYtPmNvbnRleHRzLmZyZWVfbGlz dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCmluZGV4IDYyZGU2MTMuLjM5ZDQzYmIgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2xyYy5jCkBAIC0xNTQ0LDcgKzE1NDQsNyBAQCBzdGF0aWMgaW50IGdl bjhfaW5pdF9yZW5kZXJfcmluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAKIAlJ OTE1X1dSSVRFKElOU1RQTSwgX01BU0tFRF9CSVRfRU5BQkxFKElOU1RQTV9GT1JDRV9PUkRFUklO RykpOwogCi0JcmV0dXJuIGluaXRfd29ya2Fyb3VuZHNfcmluZyhlbmdpbmUpOworCXJldHVybiAw OwogfQogCiBzdGF0aWMgaW50IGdlbjlfaW5pdF9yZW5kZXJfcmluZyhzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUpCkBAIC0xNTU1LDcgKzE1NTUsMTEgQEAgc3RhdGljIGludCBnZW45X2lu aXRfcmVuZGVyX3Jpbmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCWlmIChyZXQp CiAJCXJldHVybiByZXQ7CiAKLQlyZXR1cm4gaW5pdF93b3JrYXJvdW5kc19yaW5nKGVuZ2luZSk7 CisJcmV0ID0gaW50ZWxfd2hpdGVsaXN0X3dvcmthcm91bmRzX2FwcGx5KGVuZ2luZSk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCByZXNl dF9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQpAQCAtMTkwNCw3ICsxOTA4LDcg QEAgc3RhdGljIGludCBnZW44X2luaXRfcmNzX2NvbnRleHQoc3RydWN0IGRybV9pOTE1X2dlbV9y ZXF1ZXN0ICpyZXEpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IGludGVsX3Jpbmdfd29ya2Fyb3Vu ZHNfZW1pdChyZXEpOworCXJldCA9IGludGVsX2N0eF93b3JrYXJvdW5kc19lbWl0KHJlcSk7CiAJ aWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcmluZ2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1 ZmZlci5jCmluZGV4IGVjNTgwZjUuLjBiNmMyMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9yaW5nYnVmZmVyLmMKQEAgLTYwMCw3ICs2MDAsNyBAQCBzdGF0aWMgaW50IGludGVsX3Jjc19j dHhfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKIHsKIAlpbnQgcmV0Owog Ci0JcmV0ID0gaW50ZWxfcmluZ193b3JrYXJvdW5kc19lbWl0KHJlcSk7CisJcmV0ID0gaW50ZWxf Y3R4X3dvcmthcm91bmRzX2VtaXQocmVxKTsKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7 CiAKQEAgLTY1OSw3ICs2NTksNyBAQCBzdGF0aWMgaW50IGluaXRfcmVuZGVyX3Jpbmcoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDYp CiAJCUk5MTVfV1JJVEVfSU1SKGVuZ2luZSwgfmVuZ2luZS0+aXJxX2tlZXBfbWFzayk7CiAKLQly ZXR1cm4gaW5pdF93b3JrYXJvdW5kc19yaW5nKGVuZ2luZSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0 YXRpYyB1MzIgKmdlbjZfc2lnbmFsKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLCB1 MzIgKmNzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3Vu ZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3dvcmthcm91bmRzLmMKaW5kZXggNTZh MTE1Mi4uOWU4YzZkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29y a2Fyb3VuZHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5j CkBAIC00MCwyNyArNDAsOCBAQCBzdGF0aWMgaW50IHdhX2FkZChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCiAjZGVmaW5lIFdBX1NFVF9GSUVMRF9NQVNLRUQoYWRkciwgbWFzaywg dmFsdWUpIFwKIAlXQV9SRUcoYWRkciwgbWFzaywgX01BU0tFRF9GSUVMRChtYXNrLCB2YWx1ZSkp CiAKLXN0YXRpYyBpbnQgd2FfcmluZ193aGl0ZWxpc3RfcmVnKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSwKLQkJCQkgaTkxNV9yZWdfdCByZWcpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1OwotCXN0cnVjdCBpOTE1X3dvcmthcm91bmRz ICp3YSA9ICZkZXZfcHJpdi0+d29ya2Fyb3VuZHM7Ci0JY29uc3QgdWludDMyX3QgaW5kZXggPSB3 YS0+aHdfd2hpdGVsaXN0X2NvdW50W2VuZ2luZS0+aWRdOwotCi0JaWYgKFdBUk5fT04oaW5kZXgg Pj0gUklOR19NQVhfTk9OUFJJVl9TTE9UUykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JSTkxNV9X UklURShSSU5HX0ZPUkNFX1RPX05PTlBSSVYoZW5naW5lLT5tbWlvX2Jhc2UsIGluZGV4KSwKLQkJ ICAgaTkxNV9tbWlvX3JlZ19vZmZzZXQocmVnKSk7Ci0Jd2EtPmh3X3doaXRlbGlzdF9jb3VudFtl bmdpbmUtPmlkXSsrOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZ2VuOF9pbml0X3dv cmthcm91bmRzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3N0YXRpYyBpbnQgZ2Vu OF9jdHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp CiB7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owot CiAJV0FfU0VUX0JJVF9NQVNLRUQoSU5TVFBNLCBJTlNUUE1fRk9SQ0VfT1JERVJJTkcpOwogCiAJ LyogV2FEaXNhYmxlQXN5bmNGbGlwUGVyZk1vZGU6YmR3LGNodiAqLwpAQCAtMTA4LDEyICs4OSwx MSBAQCBzdGF0aWMgaW50IGdlbjhfaW5pdF93b3JrYXJvdW5kcyhzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYmR3X2luaXRfd29ya2Fy b3VuZHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQorc3RhdGljIGludCBiZHdfY3R4 X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewot CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKIAlpbnQg cmV0OwogCi0JcmV0ID0gZ2VuOF9pbml0X3dvcmthcm91bmRzKGVuZ2luZSk7CisJcmV0ID0gZ2Vu OF9jdHhfd29ya2Fyb3VuZHNfaW5pdChkZXZfcHJpdik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJl dDsKIApAQCAtMTQwLDEyICsxMjAsMTEgQEAgc3RhdGljIGludCBiZHdfaW5pdF93b3JrYXJvdW5k cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRp YyBpbnQgY2h2X2luaXRfd29ya2Fyb3VuZHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQorc3RhdGljIGludCBjaHZfY3R4X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGVuZ2luZS0+aTkxNTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gZ2VuOF9pbml0X3dvcmthcm91bmRz KGVuZ2luZSk7CisJcmV0ID0gZ2VuOF9jdHhfd29ya2Fyb3VuZHNfaW5pdChkZXZfcHJpdik7CiAJ aWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMTU4LDIzICsxMzcsOCBAQCBzdGF0aWMgaW50 IGNodl9pbml0X3dvcmthcm91bmRzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAly ZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZW45X2luaXRfd29ya2Fyb3VuZHMoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQorc3RhdGljIGludCBnZW45X2N0eF93b3JrYXJvdW5kc19p bml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7Ci0JaW50IHJldDsKLQotCS8qIFdh Q29uZXh0U3dpdGNoV2l0aENvbmN1cnJlbnRUTEJJbnZhbGlkYXRlOnNrbCxieHQsa2JsLGdsayxj ZmwgKi8KLQlJOTE1X1dSSVRFKEdFTjlfQ1NGRV9DSElDS0VOMV9SQ1MsIF9NQVNLRURfQklUX0VO QUJMRShHRU45X1BSRUVNUFRfR1BHUFVfU1lOQ19TV0lUQ0hfRElTQUJMRSkpOwotCi0JLyogV2FF bmFibGVMYnNTbGFSZXRyeVRpbWVyRGVjcmVtZW50OnNrbCxieHQsa2JsLGdsayxjZmwgKi8KLQlJ OTE1X1dSSVRFKEJEV19TQ1JBVENIMSwgSTkxNV9SRUFEKEJEV19TQ1JBVENIMSkgfAotCQkgICBH RU45X0xCU19TTEFfUkVUUllfVElNRVJfREVDUkVNRU5UX0VOQUJMRSk7Ci0KLQkvKiBXYURpc2Fi bGVLaWxsTG9naWM6Ynh0LHNrbCxrYmwgKi8KLQlpZiAoIUlTX0NPRkZFRUxBS0UoZGV2X3ByaXYp KQotCQlJOTE1X1dSSVRFKEdBTV9FQ09DSEssIEk5MTVfUkVBRChHQU1fRUNPQ0hLKSB8Ci0JCQkg ICBFQ09DSEtfRElTX1RMQik7Ci0KIAlpZiAoSEFTX0xMQyhkZXZfcHJpdikpIHsKIAkJLyogV2FD b21wcmVzc2VkUmVzb3VyY2VTYW1wbGVyUGJlTWVkaWFOZXdIYXNoTW9kZTpza2wsa2JsCiAJCSAq CkBAIC0xODUsMTEgKzE0OSw2IEBAIHN0YXRpYyBpbnQgZ2VuOV9pbml0X3dvcmthcm91bmRzKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkJCQkgIEdFTjlfUEJFX0NPTVBSRVNTRURf SEFTSF9TRUxFQ1RJT04pOwogCQlXQV9TRVRfQklUX01BU0tFRChHRU45X0hBTEZfU0xJQ0VfQ0hJ Q0tFTjcsCiAJCQkJICBHRU45X1NBTVBMRVJfSEFTSF9DT01QUkVTU0VEX1JFQURfQUREUik7Ci0K LQkJSTkxNV9XUklURShNTUNEX01JU0NfQ1RSTCwKLQkJCSAgIEk5MTVfUkVBRChNTUNEX01JU0Nf Q1RSTCkgfAotCQkJICAgTU1DRF9QQ0xBIHwKLQkJCSAgIE1NQ0RfSE9UU1BPVF9FTik7CiAJfQog CiAJLyogV2FDbGVhckZsb3dDb250cm9sR3BncHVDb250ZXh0U2F2ZTpza2wsYnh0LGtibCxnbGss Y2ZsICovCkBAIC0yNDAsMTAgKzE5OSw2IEBAIHN0YXRpYyBpbnQgZ2VuOV9pbml0X3dvcmthcm91 bmRzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAlXQV9TRVRfQklUX01BU0tFRChI RENfQ0hJQ0tFTjAsCiAJCQkgIEhEQ19GT1JDRV9OT05fQ09IRVJFTlQpOwogCi0JLyogV2FEaXNh YmxlSERDSW52YWxpZGF0aW9uOnNrbCxieHQsa2JsLGNmbCAqLwotCUk5MTVfV1JJVEUoR0FNX0VD T0NISywgSTkxNV9SRUFEKEdBTV9FQ09DSEspIHwKLQkJICAgQkRXX0RJU0FCTEVfSERDX0lOVkFM SURBVElPTik7Ci0KIAkvKiBXYURpc2FibGVTYW1wbGVyUG93ZXJCeXBhc3NGb3JTT1BpbmdQb25n OnNrbCxieHQsa2JsLGNmbCAqLwogCWlmIChJU19TS1lMQUtFKGRldl9wcml2KSB8fAogCSAgICBJ U19LQUJZTEFLRShkZXZfcHJpdikgfHwKQEAgLTI1NCwxOSArMjA5LDYgQEAgc3RhdGljIGludCBn ZW45X2luaXRfd29ya2Fyb3VuZHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCS8q IFdhRGlzYWJsZVNUVW5pdFBvd2VyT3B0aW1pemF0aW9uOnNrbCxieHQsa2JsLGdsayxjZmwgKi8K IAlXQV9TRVRfQklUX01BU0tFRChIQUxGX1NMSUNFX0NISUNLRU4yLCBHRU44X1NUX1BPX0RJU0FC TEUpOwogCi0JLyogV2FQcm9ncmFtTDNTcWNSZWcxRGVmYXVsdEZvclBlcmY6Ynh0LGdsayAqLwot CWlmIChJU19HRU45X0xQKGRldl9wcml2KSkgewotCQl1MzIgdmFsID0gSTkxNV9SRUFEKEdFTjhf TDNTUUNSRUcxKTsKLQotCQl2YWwgJj0gfkwzX1BSSU9fQ1JFRElUU19NQVNLOwotCQl2YWwgfD0g TDNfR0VORVJBTF9QUklPX0NSRURJVFMoNjIpIHwgTDNfSElHSF9QUklPX0NSRURJVFMoMik7Ci0J CUk5MTVfV1JJVEUoR0VOOF9MM1NRQ1JFRzEsIHZhbCk7Ci0JfQotCi0JLyogV2FPQ0xDb2hlcmVu dExpbmVGbHVzaDpza2wsYnh0LGtibCxjZmwgKi8KLQlJOTE1X1dSSVRFKEdFTjhfTDNTUUNSRUc0 LCAoSTkxNV9SRUFEKEdFTjhfTDNTUUNSRUc0KSB8Ci0JCQkJICAgIEdFTjhfTFFTQ19GTFVTSF9D T0hFUkVOVF9MSU5FUykpOwotCiAJLyoKIAkgKiBTdXBwb3J0aW5nIHByZWVtcHRpb24gd2l0aCBm aW5lLWdyYW51bGFyaXR5IHJlcXVpcmVzIGNoYW5nZXMgaW4gdGhlCiAJICogYmF0Y2ggYnVmZmVy IHByb2dyYW1taW5nLiBTaW5jZSB3ZSBjYW4ndCBicmVhayBvbGQgdXNlcnNwYWNlLCB3ZQpAQCAt Mjg1LDI5ICsyMjcsMTEgQEAgc3RhdGljIGludCBnZW45X2luaXRfd29ya2Fyb3VuZHMoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCVdBX1NFVF9GSUVMRF9NQVNLRUQoR0VOOF9DU19D SElDS0VOMSwgR0VOOV9QUkVFTVBUX0dQR1BVX0xFVkVMX01BU0ssCiAJCQkgICAgR0VOOV9QUkVF TVBUX0dQR1BVX0NPTU1BTkRfTEVWRUwpOwogCi0JLyogV2FWRkVTdGF0ZUFmdGVyUGlwZUNvbnRy b2x3aXRoTWVkaWFTdGF0ZUNsZWFyOnNrbCxieHQsZ2xrLGNmbCAqLwotCXJldCA9IHdhX3Jpbmdf d2hpdGVsaXN0X3JlZyhlbmdpbmUsIEdFTjlfQ1RYX1BSRUVNUFRfUkVHKTsKLQlpZiAocmV0KQot CQlyZXR1cm4gcmV0OwotCi0JLyogV2FFbmFibGVQcmVlbXB0aW9uR3JhbnVsYXJpdHlDb250cm9s QnlVTUQ6c2tsLGJ4dCxrYmwsY2ZsLFtjbmxdICovCi0JSTkxNV9XUklURShHRU43X0ZGX1NMSUNF X0NTX0NISUNLRU4xLAotCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoR0VOOV9GRlNDX1BFUkNUWF9Q UkVFTVBUX0NUUkwpKTsKLQlyZXQgPSB3YV9yaW5nX3doaXRlbGlzdF9yZWcoZW5naW5lLCBHRU44 X0NTX0NISUNLRU4xKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogV2FBbGxvd1VN RFRvTW9kaWZ5SERDQ2hpY2tlbjE6c2tsLGJ4dCxrYmwsZ2xrLGNmbCAqLwotCXJldCA9IHdhX3Jp bmdfd2hpdGVsaXN0X3JlZyhlbmdpbmUsIEdFTjhfSERDX0NISUNLRU4xKTsKLQlpZiAocmV0KQot CQlyZXR1cm4gcmV0OwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2tsX3R1bmVfaXpf aGFzaGluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCitzdGF0aWMgaW50IHNrbF90 dW5lX2l6X2hhc2hpbmcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewotCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKIAl1OCB2YWxz WzNdID0geyAwLCAwLCAwIH07CiAJdW5zaWduZWQgaW50IGk7CiAKQEAgLTM0Niw3NyArMjcwLDk5 IEBAIHN0YXRpYyBpbnQgc2tsX3R1bmVfaXpfaGFzaGluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2tsX2luaXRfd29ya2Fyb3Vu ZHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQorc3RhdGljIGludCBza2xfY3R4X3dv cmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewotCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKIAlpbnQgcmV0 OwogCi0JcmV0ID0gZ2VuOV9pbml0X3dvcmthcm91bmRzKGVuZ2luZSk7CisJcmV0ID0gZ2VuOV9j dHhfd29ya2Fyb3VuZHNfaW5pdChkZXZfcHJpdik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsK IAotCS8qIFdhRW5hYmxlR2Fwc1RzdkNyZWRpdEZpeDpza2wgKi8KLQlJOTE1X1dSSVRFKEdFTjhf R0FSQkNOVEwsIChJOTE1X1JFQUQoR0VOOF9HQVJCQ05UTCkgfAotCQkJCSAgIEdFTjlfR0FQU19U U1ZfQ1JFRElUX0RJU0FCTEUpKTsKLQotCS8qIFdhRGlzYWJsZUdhZnNVbml0Q2xrR2F0aW5nOnNr bCAqLwotCUk5MTVfV1JJVEUoR0VON19VQ0dDVEw0LCAoSTkxNV9SRUFEKEdFTjdfVUNHQ1RMNCkg fAotCQkJCSAgR0VOOF9FVV9HQVVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKSk7CisJcmV0dXJuIHNr bF90dW5lX2l6X2hhc2hpbmcoZGV2X3ByaXYpOworfQogCi0JLyogV2FJblBsYWNlRGVjb21wcmVz c2lvbkhhbmc6c2tsICovCi0JaWYgKElTX1NLTF9SRVZJRChkZXZfcHJpdiwgU0tMX1JFVklEX0gw LCBSRVZJRF9GT1JFVkVSKSkKLQkJSTkxNV9XUklURShHRU45X0dBTVRfRUNPX1JFR19SV19JQSwK LQkJCSAgIChJOTE1X1JFQUQoR0VOOV9HQU1UX0VDT19SRUdfUldfSUEpIHwKLQkJCSAgICBHQU1U X0VDT19FTkFCTEVfSU5fUExBQ0VfREVDT01QUkVTUykpOworc3RhdGljIGludCBieHRfY3R4X3dv cmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCWlu dCByZXQ7CiAKLQkvKiBXYURpc2FibGVMU1FDUk9QRVJGZm9yT0NMOnNrbCAqLwotCXJldCA9IHdh X3Jpbmdfd2hpdGVsaXN0X3JlZyhlbmdpbmUsIEdFTjhfTDNTUUNSRUc0KTsKKwlyZXQgPSBnZW45 X2N0eF93b3JrYXJvdW5kc19pbml0KGRldl9wcml2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0 OwogCi0JcmV0dXJuIHNrbF90dW5lX2l6X2hhc2hpbmcoZW5naW5lKTsKKwkvKiBXYURpc2FibGVU aHJlYWRTdGFsbERvcENsb2NrR2F0aW5nOmJ4dCAqLworCVdBX1NFVF9CSVRfTUFTS0VEKEdFTjhf Uk9XX0NISUNLRU4sCisJCQkgIFNUQUxMX0RPUF9HQVRJTkdfRElTQUJMRSk7CisKKwkvKiBXYVRv RW5hYmxlSHdGaXhGb3JQdXNoQ29uc3RIV0J1ZzpieHQgKi8KKwlXQV9TRVRfQklUX01BU0tFRChD T01NT05fU0xJQ0VfQ0hJQ0tFTjIsCisJCQkgIEdFTjhfU0JFX0RJU0FCTEVfUkVQTEFZX0JVRl9P UFRJTUlaQVRJT04pOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYnh0X2luaXRfd29y a2Fyb3VuZHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQorc3RhdGljIGludCBrYmxf Y3R4X3dvcmthcm91bmRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQog ewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKIAlp bnQgcmV0OwogCi0JcmV0ID0gZ2VuOV9pbml0X3dvcmthcm91bmRzKGVuZ2luZSk7CisJcmV0ID0g Z2VuOV9jdHhfd29ya2Fyb3VuZHNfaW5pdChkZXZfcHJpdik7CiAJaWYgKHJldCkKIAkJcmV0dXJu IHJldDsKIAotCS8qIFdhRGlzYWJsZVRocmVhZFN0YWxsRG9wQ2xvY2tHYXRpbmc6Ynh0ICovCi0J V0FfU0VUX0JJVF9NQVNLRUQoR0VOOF9ST1dfQ0hJQ0tFTiwKLQkJCSAgU1RBTExfRE9QX0dBVElO R19ESVNBQkxFKTsKKwkvKiBXYURpc2FibGVGZW5jZURlc3RpbmF0aW9uVG9TTE06a2JsIChwcmUt cHJvZCkgKi8KKwlpZiAoSVNfS0JMX1JFVklEKGRldl9wcml2LCBLQkxfUkVWSURfQTAsIEtCTF9S RVZJRF9BMCkpCisJCVdBX1NFVF9CSVRfTUFTS0VEKEhEQ19DSElDS0VOMCwKKwkJCQkgIEhEQ19G RU5DRV9ERVNUX1NMTV9ESVNBQkxFKTsKIAotCS8qIFdhRGlzYWJsZVBvb2xlZEV1TG9hZEJhbGFu Y2luZ0ZpeDpieHQgKi8KLQlJOTE1X1dSSVRFKEZGX1NMSUNFX0NTX0NISUNLRU4yLAotCQkgICBf TUFTS0VEX0JJVF9FTkFCTEUoR0VOOV9QT09MRURfRVVfTE9BRF9CQUxBTkNJTkdfRklYX0RJU0FC TEUpKTsKKwkvKiBXYVRvRW5hYmxlSHdGaXhGb3JQdXNoQ29uc3RIV0J1ZzprYmwgKi8KKwlpZiAo SVNfS0JMX1JFVklEKGRldl9wcml2LCBLQkxfUkVWSURfQzAsIFJFVklEX0ZPUkVWRVIpKQorCQlX QV9TRVRfQklUX01BU0tFRChDT01NT05fU0xJQ0VfQ0hJQ0tFTjIsCisJCQkJICBHRU44X1NCRV9E SVNBQkxFX1JFUExBWV9CVUZfT1BUSU1JWkFUSU9OKTsKIAotCS8qIFdhVG9FbmFibGVId0ZpeEZv clB1c2hDb25zdEhXQnVnOmJ4dCAqLworCS8qIFdhRGlzYWJsZVNiZUNhY2hlRGlzcGF0Y2hQb3J0 U2hhcmluZzprYmwgKi8KKwlXQV9TRVRfQklUX01BU0tFRCgKKwkJR0VON19IQUxGX1NMSUNFX0NI SUNLRU4xLAorCQlHRU43X1NCRV9TU19DQUNIRV9ESVNQQVRDSF9QT1JUX1NIQVJJTkdfRElTQUJM RSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnbGtfY3R4X3dvcmthcm91bmRzX2lu aXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCWludCByZXQ7CisKKwly ZXQgPSBnZW45X2N0eF93b3JrYXJvdW5kc19pbml0KGRldl9wcml2KTsKKwlpZiAocmV0KQorCQly ZXR1cm4gcmV0OworCisJLyogV2FUb0VuYWJsZUh3Rml4Rm9yUHVzaENvbnN0SFdCdWc6Z2xrICov CiAJV0FfU0VUX0JJVF9NQVNLRUQoQ09NTU9OX1NMSUNFX0NISUNLRU4yLAogCQkJICBHRU44X1NC RV9ESVNBQkxFX1JFUExBWV9CVUZfT1BUSU1JWkFUSU9OKTsKIAotCS8qIFdhSW5QbGFjZURlY29t cHJlc3Npb25IYW5nOmJ4dCAqLwotCUk5MTVfV1JJVEUoR0VOOV9HQU1UX0VDT19SRUdfUldfSUEs Ci0JCSAgIChJOTE1X1JFQUQoR0VOOV9HQU1UX0VDT19SRUdfUldfSUEpIHwKLQkJICAgIEdBTVRf RUNPX0VOQUJMRV9JTl9QTEFDRV9ERUNPTVBSRVNTKSk7Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3Rh dGljIGludCBjbmxfaW5pdF93b3JrYXJvdW5kcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCitzdGF0aWMgaW50IGNmbF9jdHhfd29ya2Fyb3VuZHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZW5naW5lLT5pOTE1OwogCWludCByZXQ7CiAKLQkvKiBXYURpc2FibGVJMm1DeWNsZU9uV1JQ b3J0OmNubCAocHJlLXByb2QpICovCi0JaWYgKElTX0NOTF9SRVZJRChkZXZfcHJpdiwgQ05MX1JF VklEX0IwLCBDTkxfUkVWSURfQjApKQotCQlJOTE1X1dSSVRFKEdBTVRfQ0hLTl9CSVRfUkVHLAot CQkJICAgKEk5MTVfUkVBRChHQU1UX0NIS05fQklUX1JFRykgfAotCQkJICAgIEdBTVRfQ0hLTl9E SVNBQkxFX0kyTV9DWUNMRV9PTl9XUl9QT1JUKSk7CisJcmV0ID0gZ2VuOV9jdHhfd29ya2Fyb3Vu ZHNfaW5pdChkZXZfcHJpdik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFdhVG9F bmFibGVId0ZpeEZvclB1c2hDb25zdEhXQnVnOmNmbCAqLworCVdBX1NFVF9CSVRfTUFTS0VEKENP TU1PTl9TTElDRV9DSElDS0VOMiwKKwkJCSAgR0VOOF9TQkVfRElTQUJMRV9SRVBMQVlfQlVGX09Q VElNSVpBVElPTik7CisKKwkvKiBXYURpc2FibGVTYmVDYWNoZURpc3BhdGNoUG9ydFNoYXJpbmc6 Y2ZsICovCisJV0FfU0VUX0JJVF9NQVNLRUQoCisJCUdFTjdfSEFMRl9TTElDRV9DSElDS0VOMSwK KwkJR0VON19TQkVfU1NfQ0FDSEVfRElTUEFUQ0hfUE9SVF9TSEFSSU5HX0RJU0FCTEUpOworCisJ cmV0dXJuIDA7Cit9CiAKK3N0YXRpYyBpbnQgY25sX2N0eF93b3JrYXJvdW5kc19pbml0KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKIAkvKiBXYUZvcmNlQ29udGV4dFNhdmVS ZXN0b3JlTm9uQ29oZXJlbnQ6Y25sICovCiAJV0FfU0VUX0JJVF9NQVNLRUQoQ05MX0hEQ19DSElD S0VOMCwKIAkJCSAgSERDX0ZPUkNFX0NPTlRFWFRfU0FWRV9SRVNUT1JFX05PTl9DT0hFUkVOVCk7 CkBAIC00MzQsMTUgKzM4MCwxMCBAQCBzdGF0aWMgaW50IGNubF9pbml0X3dvcmthcm91bmRzKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkJV0FfU0VUX0JJVF9NQVNLRUQoQ09NTU9O X1NMSUNFX0NISUNLRU4yLAogCQkJCSAgR0VOOF9DU0MyX1NCRV9WVUVfQ0FDSEVfQ09OU0VSVkFU SVZFKTsKIAotCS8qIFdhSW5QbGFjZURlY29tcHJlc3Npb25IYW5nOmNubCAqLwotCUk5MTVfV1JJ VEUoR0VOOV9HQU1UX0VDT19SRUdfUldfSUEsCi0JCSAgIChJOTE1X1JFQUQoR0VOOV9HQU1UX0VD T19SRUdfUldfSUEpIHwKLQkJICAgIEdBTVRfRUNPX0VOQUJMRV9JTl9QTEFDRV9ERUNPTVBSRVNT KSk7Ci0KIAkvKiBXYVB1c2hDb25zdGFudERlcmVmZXJlbmNlSG9sZERpc2FibGU6Y25sICovCiAJ V0FfU0VUX0JJVF9NQVNLRUQoR0VON19ST1dfQ0hJQ0tFTjIsIFBVU0hfQ09OU1RBTlRfREVSRUZf RElTQUJMRSk7CiAKLQkvKiBGdHJFbmFibGVGYXN0QW5pc29MMUJhbmtpbmdGaXg6IGNubCAqLwor CS8qIEZ0ckVuYWJsZUZhc3RBbmlzb0wxQmFua2luZ0ZpeDpjbmwgKi8KIAlXQV9TRVRfQklUX01B U0tFRChIQUxGX1NMSUNFX0NISUNLRU4zLCBDTkxfRkFTVF9BTklTT19MMV9CQU5LSU5HX0ZJWCk7 CiAKIAkvKiBXYURpc2FibGUzRE1pZENtZFByZWVtcHRpb246Y25sICovCkBAIC00NTIsMjggKzM5 MywxNzUgQEAgc3RhdGljIGludCBjbmxfaW5pdF93b3JrYXJvdW5kcyhzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUpCiAJV0FfU0VUX0ZJRUxEX01BU0tFRChHRU44X0NTX0NISUNLRU4xLCBH RU45X1BSRUVNUFRfR1BHUFVfTEVWRUxfTUFTSywKIAkJCSAgICBHRU45X1BSRUVNUFRfR1BHUFVf Q09NTUFORF9MRVZFTCk7CiAKLQkvKiBXYUVuYWJsZVByZWVtcHRpb25HcmFudWxhcml0eUNvbnRy b2xCeVVNRDpjbmwgKi8KLQlJOTE1X1dSSVRFKEdFTjdfRkZfU0xJQ0VfQ1NfQ0hJQ0tFTjEsCi0J CSAgIF9NQVNLRURfQklUX0VOQUJMRShHRU45X0ZGU0NfUEVSQ1RYX1BSRUVNUFRfQ1RSTCkpOwot CXJldD0gd2FfcmluZ193aGl0ZWxpc3RfcmVnKGVuZ2luZSwgR0VOOF9DU19DSElDS0VOMSk7Ci0J aWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQogCS8qIFdhRGlzYWJsZUVhcmx5RU9UOmNubCAqLwog CVdBX1NFVF9CSVRfTUFTS0VEKEdFTjhfUk9XX0NISUNLRU4sIERJU0FCTEVfRUFSTFlfRU9UKTsK IAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGtibF9pbml0X3dvcmthcm91bmRzKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK2ludCBpbnRlbF9jdHhfd29ya2Fyb3VuZHNfaW5p dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0Jc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1OwotCWludCByZXQ7CisJaW50IGVycjsK KworCWRldl9wcml2LT53b3JrYXJvdW5kcy5jb3VudCA9IDA7CisKKwlpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA8IDgpCisJCWVyciA9IDA7CisJZWxzZSBpZiAoSVNfQlJPQURXRUxMKGRldl9wcml2 KSkKKwkJZXJyID0gYmR3X2N0eF93b3JrYXJvdW5kc19pbml0KGRldl9wcml2KTsKKwllbHNlIGlm IChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKKwkJZXJyID0gY2h2X2N0eF93b3JrYXJvdW5kc19p bml0KGRldl9wcml2KTsKKwllbHNlIGlmIChJU19TS1lMQUtFKGRldl9wcml2KSkKKwkJZXJyID0g c2tsX2N0eF93b3JrYXJvdW5kc19pbml0KGRldl9wcml2KTsKKwllbHNlIGlmIChJU19CUk9YVE9O KGRldl9wcml2KSkKKwkJZXJyID0gYnh0X2N0eF93b3JrYXJvdW5kc19pbml0KGRldl9wcml2KTsK KwllbHNlIGlmIChJU19LQUJZTEFLRShkZXZfcHJpdikpCisJCWVyciA9IGtibF9jdHhfd29ya2Fy b3VuZHNfaW5pdChkZXZfcHJpdik7CisJZWxzZSBpZiAoSVNfR0VNSU5JTEFLRShkZXZfcHJpdikp CisJCWVyciA9IGdsa19jdHhfd29ya2Fyb3VuZHNfaW5pdChkZXZfcHJpdik7CisJZWxzZSBpZiAo SVNfQ09GRkVFTEFLRShkZXZfcHJpdikpCisJCWVyciA9IGNmbF9jdHhfd29ya2Fyb3VuZHNfaW5p dChkZXZfcHJpdik7CisJZWxzZSBpZiAoSVNfQ0FOTk9OTEFLRShkZXZfcHJpdikpCisJCWVyciA9 IGNubF9jdHhfd29ya2Fyb3VuZHNfaW5pdChkZXZfcHJpdik7CisJZWxzZSB7CisJCU1JU1NJTkdf Q0FTRShJTlRFTF9HRU4oZGV2X3ByaXYpKTsKKwkJZXJyID0gMDsKKwl9CisJaWYgKGVycikKKwkJ cmV0dXJuIGVycjsKIAotCXJldCA9IGdlbjlfaW5pdF93b3JrYXJvdW5kcyhlbmdpbmUpOworCURS TV9ERUJVR19EUklWRVIoIk51bWJlciBvZiBjb250ZXh0IHNwZWNpZmljIHcvYTogJWRcbiIsCisJ CQkgZGV2X3ByaXYtPndvcmthcm91bmRzLmNvdW50KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGlu dGVsX2N0eF93b3JrYXJvdW5kc19lbWl0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVx KQoreworCXN0cnVjdCBpOTE1X3dvcmthcm91bmRzICp3ID0gJnJlcS0+aTkxNS0+d29ya2Fyb3Vu ZHM7CisJdTMyICpjczsKKwlpbnQgcmV0LCBpOworCisJaWYgKHctPmNvdW50ID09IDApCisJCXJl dHVybiAwOworCisJcmV0ID0gcmVxLT5lbmdpbmUtPmVtaXRfZmx1c2gocmVxLCBFTUlUX0JBUlJJ RVIpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwljcyA9IGludGVsX3JpbmdfYmVnaW4o cmVxLCAody0+Y291bnQgKiAyICsgMikpOworCWlmIChJU19FUlIoY3MpKQorCQlyZXR1cm4gUFRS X0VSUihjcyk7CisKKwkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKHctPmNvdW50KTsKKwlm b3IgKGkgPSAwOyBpIDwgdy0+Y291bnQ7IGkrKykgeworCQkqY3MrKyA9IGk5MTVfbW1pb19yZWdf b2Zmc2V0KHctPnJlZ1tpXS5hZGRyKTsKKwkJKmNzKysgPSB3LT5yZWdbaV0udmFsdWU7CisJfQor CSpjcysrID0gTUlfTk9PUDsKKworCWludGVsX3JpbmdfYWR2YW5jZShyZXEsIGNzKTsKKworCXJl dCA9IHJlcS0+ZW5naW5lLT5lbWl0X2ZsdXNoKHJlcSwgRU1JVF9CQVJSSUVSKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJkd19ndF93 b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7Cit9 CisKK3N0YXRpYyB2b2lkIGNodl9ndF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCit7Cit9CisKK3N0YXRpYyB2b2lkIGdlbjlfZ3Rfd29ya2Fyb3Vu ZHNfYXBwbHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCS8qIFdhQ29u dGV4dFN3aXRjaFdpdGhDb25jdXJyZW50VExCSW52YWxpZGF0ZTpza2wsYnh0LGtibCxnbGssY2Zs ICovCisJSTkxNV9XUklURShHRU45X0NTRkVfQ0hJQ0tFTjFfUkNTLAorCQkgICBfTUFTS0VEX0JJ VF9FTkFCTEUoR0VOOV9QUkVFTVBUX0dQR1BVX1NZTkNfU1dJVENIX0RJU0FCTEUpKTsKKworCS8q IFdhRW5hYmxlTGJzU2xhUmV0cnlUaW1lckRlY3JlbWVudDpza2wsYnh0LGtibCxnbGssY2ZsICov CisJSTkxNV9XUklURShCRFdfU0NSQVRDSDEsIEk5MTVfUkVBRChCRFdfU0NSQVRDSDEpIHwKKwkJ ICAgR0VOOV9MQlNfU0xBX1JFVFJZX1RJTUVSX0RFQ1JFTUVOVF9FTkFCTEUpOworCisJLyogV2FE aXNhYmxlS2lsbExvZ2ljOmJ4dCxza2wsa2JsICovCisJaWYgKCFJU19DT0ZGRUVMQUtFKGRldl9w cml2KSkKKwkJSTkxNV9XUklURShHQU1fRUNPQ0hLLCBJOTE1X1JFQUQoR0FNX0VDT0NISykgfAor CQkJICAgRUNPQ0hLX0RJU19UTEIpOworCisJaWYgKEhBU19MTEMoZGV2X3ByaXYpKSB7CisJCS8q IFdhQ29tcHJlc3NlZFJlc291cmNlU2FtcGxlclBiZU1lZGlhTmV3SGFzaE1vZGU6c2tsLGtibAor CQkgKgorCQkgKiBNdXN0IG1hdGNoIERpc3BsYXkgRW5naW5lLiBTZWUKKwkJICogV2FDb21wcmVz c2VkUmVzb3VyY2VEaXNwbGF5TmV3SGFzaE1vZGUuCisJCSAqLworCQlJOTE1X1dSSVRFKE1NQ0Rf TUlTQ19DVFJMLAorCQkJICAgSTkxNV9SRUFEKE1NQ0RfTUlTQ19DVFJMKSB8CisJCQkgICBNTUNE X1BDTEEgfAorCQkJICAgTU1DRF9IT1RTUE9UX0VOKTsKKwl9CisKKwkvKiBXYURpc2FibGVIRENJ bnZhbGlkYXRpb246c2tsLGJ4dCxrYmwsY2ZsICovCisJSTkxNV9XUklURShHQU1fRUNPQ0hLLCBJ OTE1X1JFQUQoR0FNX0VDT0NISykgfAorCQkgICBCRFdfRElTQUJMRV9IRENfSU5WQUxJREFUSU9O KTsKKworCS8qIFdhUHJvZ3JhbUwzU3FjUmVnMURlZmF1bHRGb3JQZXJmOmJ4dCxnbGsgKi8KKwlp ZiAoSVNfR0VOOV9MUChkZXZfcHJpdikpIHsKKwkJdTMyIHZhbCA9IEk5MTVfUkVBRChHRU44X0wz U1FDUkVHMSk7CisKKwkJdmFsICY9IH5MM19QUklPX0NSRURJVFNfTUFTSzsKKwkJdmFsIHw9IEwz X0dFTkVSQUxfUFJJT19DUkVESVRTKDYyKSB8IEwzX0hJR0hfUFJJT19DUkVESVRTKDIpOworCQlJ OTE1X1dSSVRFKEdFTjhfTDNTUUNSRUcxLCB2YWwpOworCX0KKworCS8qIFdhT0NMQ29oZXJlbnRM aW5lRmx1c2g6c2tsLGJ4dCxrYmwsY2ZsICovCisJSTkxNV9XUklURShHRU44X0wzU1FDUkVHNCwg KEk5MTVfUkVBRChHRU44X0wzU1FDUkVHNCkgfAorCQkJCSAgICBHRU44X0xRU0NfRkxVU0hfQ09I RVJFTlRfTElORVMpKTsKKworCS8qIFdhRW5hYmxlUHJlZW1wdGlvbkdyYW51bGFyaXR5Q29udHJv bEJ5VU1EOnNrbCxieHQsa2JsLGNmbCxbY25sXSAqLworCUk5MTVfV1JJVEUoR0VON19GRl9TTElD RV9DU19DSElDS0VOMSwKKwkJICAgX01BU0tFRF9CSVRfRU5BQkxFKEdFTjlfRkZTQ19QRVJDVFhf UFJFRU1QVF9DVFJMKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNrbF9ndF93b3JrYXJvdW5kc19hcHBs eShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJZ2VuOV9ndF93b3JrYXJv dW5kc19hcHBseShkZXZfcHJpdik7CisKKwkvKiBXYUVuYWJsZUdhcHNUc3ZDcmVkaXRGaXg6c2ts ICovCisJSTkxNV9XUklURShHRU44X0dBUkJDTlRMLCAoSTkxNV9SRUFEKEdFTjhfR0FSQkNOVEwp IHwKKwkJCQkgICBHRU45X0dBUFNfVFNWX0NSRURJVF9ESVNBQkxFKSk7CisKKwkvKiBXYURpc2Fi bGVHYWZzVW5pdENsa0dhdGluZzpza2wgKi8KKwlJOTE1X1dSSVRFKEdFTjdfVUNHQ1RMNCwgKEk5 MTVfUkVBRChHRU43X1VDR0NUTDQpIHwKKwkJCQkgIEdFTjhfRVVfR0FVTklUX0NMT0NLX0dBVEVf RElTQUJMRSkpOworCisJLyogV2FJblBsYWNlRGVjb21wcmVzc2lvbkhhbmc6c2tsICovCisJaWYg KElTX1NLTF9SRVZJRChkZXZfcHJpdiwgU0tMX1JFVklEX0gwLCBSRVZJRF9GT1JFVkVSKSkKKwkJ STkxNV9XUklURShHRU45X0dBTVRfRUNPX1JFR19SV19JQSwKKwkJCSAgIChJOTE1X1JFQUQoR0VO OV9HQU1UX0VDT19SRUdfUldfSUEpIHwKKwkJCSAgICBHQU1UX0VDT19FTkFCTEVfSU5fUExBQ0Vf REVDT01QUkVTUykpOworfQorCitzdGF0aWMgdm9pZCBieHRfZ3Rfd29ya2Fyb3VuZHNfYXBwbHko c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCWdlbjlfZ3Rfd29ya2Fyb3Vu ZHNfYXBwbHkoZGV2X3ByaXYpOworCisJLyogV2FEaXNhYmxlUG9vbGVkRXVMb2FkQmFsYW5jaW5n Rml4OmJ4dCAqLworCUk5MTVfV1JJVEUoRkZfU0xJQ0VfQ1NfQ0hJQ0tFTjIsCisJCSAgIF9NQVNL RURfQklUX0VOQUJMRShHRU45X1BPT0xFRF9FVV9MT0FEX0JBTEFOQ0lOR19GSVhfRElTQUJMRSkp OworCisJLyogV2FJblBsYWNlRGVjb21wcmVzc2lvbkhhbmc6Ynh0ICovCisJSTkxNV9XUklURShH RU45X0dBTVRfRUNPX1JFR19SV19JQSwKKwkJICAgKEk5MTVfUkVBRChHRU45X0dBTVRfRUNPX1JF R19SV19JQSkgfAorCQkgICAgR0FNVF9FQ09fRU5BQkxFX0lOX1BMQUNFX0RFQ09NUFJFU1MpKTsK K30KKworc3RhdGljIHZvaWQga2JsX2d0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlnZW45X2d0X3dvcmthcm91bmRzX2FwcGx5KGRldl9w cml2KTsKKwogCS8qIFdhRW5hYmxlR2Fwc1RzdkNyZWRpdEZpeDprYmwgKi8KIAlJOTE1X1dSSVRF KEdFTjhfR0FSQkNOVEwsIChJOTE1X1JFQUQoR0VOOF9HQVJCQ05UTCkgfAogCQkJCSAgIEdFTjlf R0FQU19UU1ZfQ1JFRElUX0RJU0FCTEUpKTsKQEAgLTQ4NCwxNTkgKzU3MiwyMjQgQEAgc3RhdGlj IGludCBrYmxfaW5pdF93b3JrYXJvdW5kcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp CiAJCQkgICAoSTkxNV9SRUFEKEdBTVRfQ0hLTl9CSVRfUkVHKSB8CiAJCQkgICAgR0FNVF9DSEtO X0RJU0FCTEVfRFlOQU1JQ19DUkVESVRfU0hBUklORykpOwogCi0JLyogV2FEaXNhYmxlRmVuY2VE ZXN0aW5hdGlvblRvU0xNOmtibCAocHJlLXByb2QpICovCi0JaWYgKElTX0tCTF9SRVZJRChkZXZf cHJpdiwgS0JMX1JFVklEX0EwLCBLQkxfUkVWSURfQTApKQotCQlXQV9TRVRfQklUX01BU0tFRChI RENfQ0hJQ0tFTjAsCi0JCQkJICBIRENfRkVOQ0VfREVTVF9TTE1fRElTQUJMRSk7Ci0KLQkvKiBX YVRvRW5hYmxlSHdGaXhGb3JQdXNoQ29uc3RIV0J1ZzprYmwgKi8KLQlpZiAoSVNfS0JMX1JFVklE KGRldl9wcml2LCBLQkxfUkVWSURfQzAsIFJFVklEX0ZPUkVWRVIpKQotCQlXQV9TRVRfQklUX01B U0tFRChDT01NT05fU0xJQ0VfQ0hJQ0tFTjIsCi0JCQkJICBHRU44X1NCRV9ESVNBQkxFX1JFUExB WV9CVUZfT1BUSU1JWkFUSU9OKTsKLQogCS8qIFdhRGlzYWJsZUdhZnNVbml0Q2xrR2F0aW5nOmti bCAqLwogCUk5MTVfV1JJVEUoR0VON19VQ0dDVEw0LCAoSTkxNV9SRUFEKEdFTjdfVUNHQ1RMNCkg fAogCQkJCSAgR0VOOF9FVV9HQVVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKSk7CiAKLQkvKiBXYURp c2FibGVTYmVDYWNoZURpc3BhdGNoUG9ydFNoYXJpbmc6a2JsICovCi0JV0FfU0VUX0JJVF9NQVNL RUQoCi0JCUdFTjdfSEFMRl9TTElDRV9DSElDS0VOMSwKLQkJR0VON19TQkVfU1NfQ0FDSEVfRElT UEFUQ0hfUE9SVF9TSEFSSU5HX0RJU0FCTEUpOwotCiAJLyogV2FJblBsYWNlRGVjb21wcmVzc2lv bkhhbmc6a2JsICovCiAJSTkxNV9XUklURShHRU45X0dBTVRfRUNPX1JFR19SV19JQSwKIAkJICAg KEk5MTVfUkVBRChHRU45X0dBTVRfRUNPX1JFR19SV19JQSkgfAogCQkgICAgR0FNVF9FQ09fRU5B QkxFX0lOX1BMQUNFX0RFQ09NUFJFU1MpKTsKLQotCS8qIFdhRGlzYWJsZUxTUUNST1BFUkZmb3JP Q0w6a2JsICovCi0JcmV0ID0gd2FfcmluZ193aGl0ZWxpc3RfcmVnKGVuZ2luZSwgR0VOOF9MM1NR Q1JFRzQpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKIH0KIAotc3Rh dGljIGludCBnbGtfaW5pdF93b3JrYXJvdW5kcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCitzdGF0aWMgdm9pZCBnbGtfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGVuZ2luZS0+aTkxNTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZ2VuOV9pbml0X3dvcmthcm91 bmRzKGVuZ2luZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIFdBICMwODYyOiBV c2Vyc3BhY2UgaGFzIHRvIHNldCAiQmFycmllciBNb2RlIiB0byBhdm9pZCBoYW5ncy4gKi8KLQly ZXQgPSB3YV9yaW5nX3doaXRlbGlzdF9yZWcoZW5naW5lLCBHRU45X1NMSUNFX0NPTU1PTl9FQ09f Q0hJQ0tFTjEpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBXYVRvRW5hYmxlSHdG aXhGb3JQdXNoQ29uc3RIV0J1ZzpnbGsgKi8KLQlXQV9TRVRfQklUX01BU0tFRChDT01NT05fU0xJ Q0VfQ0hJQ0tFTjIsCi0JCQkgIEdFTjhfU0JFX0RJU0FCTEVfUkVQTEFZX0JVRl9PUFRJTUlaQVRJ T04pOwotCi0JcmV0dXJuIDA7CisJZ2VuOV9ndF93b3JrYXJvdW5kc19hcHBseShkZXZfcHJpdik7 CiB9CiAKLXN0YXRpYyBpbnQgY2ZsX2luaXRfd29ya2Fyb3VuZHMoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQorc3RhdGljIHZvaWQgY2ZsX2d0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7Ci0JaW50IHJldDsKLQotCXJldCA9IGdlbjlfaW5p dF93b3JrYXJvdW5kcyhlbmdpbmUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJZ2VuOV9n dF93b3JrYXJvdW5kc19hcHBseShkZXZfcHJpdik7CiAKIAkvKiBXYUVuYWJsZUdhcHNUc3ZDcmVk aXRGaXg6Y2ZsICovCiAJSTkxNV9XUklURShHRU44X0dBUkJDTlRMLCAoSTkxNV9SRUFEKEdFTjhf R0FSQkNOVEwpIHwKIAkJCQkgICBHRU45X0dBUFNfVFNWX0NSRURJVF9ESVNBQkxFKSk7CiAKLQkv KiBXYVRvRW5hYmxlSHdGaXhGb3JQdXNoQ29uc3RIV0J1ZzpjZmwgKi8KLQlXQV9TRVRfQklUX01B U0tFRChDT01NT05fU0xJQ0VfQ0hJQ0tFTjIsCi0JCQkgIEdFTjhfU0JFX0RJU0FCTEVfUkVQTEFZ X0JVRl9PUFRJTUlaQVRJT04pOwotCiAJLyogV2FEaXNhYmxlR2Fmc1VuaXRDbGtHYXRpbmc6Y2Zs ICovCiAJSTkxNV9XUklURShHRU43X1VDR0NUTDQsIChJOTE1X1JFQUQoR0VON19VQ0dDVEw0KSB8 CiAJCQkJICBHRU44X0VVX0dBVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpKTsKIAotCS8qIFdhRGlz YWJsZVNiZUNhY2hlRGlzcGF0Y2hQb3J0U2hhcmluZzpjZmwgKi8KLQlXQV9TRVRfQklUX01BU0tF RCgKLQkJR0VON19IQUxGX1NMSUNFX0NISUNLRU4xLAotCQlHRU43X1NCRV9TU19DQUNIRV9ESVNQ QVRDSF9QT1JUX1NIQVJJTkdfRElTQUJMRSk7Ci0KIAkvKiBXYUluUGxhY2VEZWNvbXByZXNzaW9u SGFuZzpjZmwgKi8KIAlJOTE1X1dSSVRFKEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lBLAogCQkgICAo STkxNV9SRUFEKEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lBKSB8CiAJCSAgICBHQU1UX0VDT19FTkFC TEVfSU5fUExBQ0VfREVDT01QUkVTUykpOwotCi0JcmV0dXJuIDA7CiB9CiAKLWludCBpbml0X3dv cmthcm91bmRzX3Jpbmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQorc3RhdGljIHZv aWQgY25sX2d0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5 MTU7Ci0JaW50IGVycjsKKwkvKiBXYURpc2FibGVJMm1DeWNsZU9uV1JQb3J0OmNubCAocHJlLXBy b2QpICovCisJaWYgKElTX0NOTF9SRVZJRChkZXZfcHJpdiwgQ05MX1JFVklEX0IwLCBDTkxfUkVW SURfQjApKQorCQlJOTE1X1dSSVRFKEdBTVRfQ0hLTl9CSVRfUkVHLAorCQkJICAgKEk5MTVfUkVB RChHQU1UX0NIS05fQklUX1JFRykgfAorCQkJICAgIEdBTVRfQ0hLTl9ESVNBQkxFX0kyTV9DWUNM RV9PTl9XUl9QT1JUKSk7CiAKLQlpZiAoR0VNX1dBUk5fT04oZW5naW5lLT5pZCAhPSBSQ1MpKQot CQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBXYUluUGxhY2VEZWNvbXByZXNzaW9uSGFuZzpjbmwgKi8K KwlJOTE1X1dSSVRFKEdFTjlfR0FNVF9FQ09fUkVHX1JXX0lBLAorCQkgICAoSTkxNV9SRUFEKEdF TjlfR0FNVF9FQ09fUkVHX1JXX0lBKSB8CisJCSAgICBHQU1UX0VDT19FTkFCTEVfSU5fUExBQ0Vf REVDT01QUkVTUykpOwogCi0JZGV2X3ByaXYtPndvcmthcm91bmRzLmNvdW50ID0gMDsKLQlkZXZf cHJpdi0+d29ya2Fyb3VuZHMuaHdfd2hpdGVsaXN0X2NvdW50W2VuZ2luZS0+aWRdID0gMDsKKwkv KiBXYUVuYWJsZVByZWVtcHRpb25HcmFudWxhcml0eUNvbnRyb2xCeVVNRDpjbmwgKi8KKwlJOTE1 X1dSSVRFKEdFTjdfRkZfU0xJQ0VfQ1NfQ0hJQ0tFTjEsCisJCSAgIF9NQVNLRURfQklUX0VOQUJM RShHRU45X0ZGU0NfUEVSQ1RYX1BSRUVNUFRfQ1RSTCkpOworfQogCi0JaWYgKElTX0JST0FEV0VM TChkZXZfcHJpdikpCi0JCWVyciA9IGJkd19pbml0X3dvcmthcm91bmRzKGVuZ2luZSk7Cit2b2lk IGludGVsX2d0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKK3sKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDgpCisJCXJldHVybjsKKwllbHNl IGlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYpKQorCQliZHdfZ3Rfd29ya2Fyb3VuZHNfYXBwbHko ZGV2X3ByaXYpOwogCWVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQotCQllcnIgPSBj aHZfaW5pdF93b3JrYXJvdW5kcyhlbmdpbmUpOworCQljaHZfZ3Rfd29ya2Fyb3VuZHNfYXBwbHko ZGV2X3ByaXYpOwogCWVsc2UgaWYgKElTX1NLWUxBS0UoZGV2X3ByaXYpKQotCQllcnIgPSAgc2ts X2luaXRfd29ya2Fyb3VuZHMoZW5naW5lKTsKKwkJc2tsX2d0X3dvcmthcm91bmRzX2FwcGx5KGRl dl9wcml2KTsKIAllbHNlIGlmIChJU19CUk9YVE9OKGRldl9wcml2KSkKLQkJZXJyID0gYnh0X2lu aXRfd29ya2Fyb3VuZHMoZW5naW5lKTsKKwkJYnh0X2d0X3dvcmthcm91bmRzX2FwcGx5KGRldl9w cml2KTsKIAllbHNlIGlmIChJU19LQUJZTEFLRShkZXZfcHJpdikpCi0JCWVyciA9IGtibF9pbml0 X3dvcmthcm91bmRzKGVuZ2luZSk7CisJCWtibF9ndF93b3JrYXJvdW5kc19hcHBseShkZXZfcHJp dik7CiAJZWxzZSBpZiAoSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCi0JCWVyciA9ICBnbGtfaW5p dF93b3JrYXJvdW5kcyhlbmdpbmUpOworCQlnbGtfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoZGV2X3By aXYpOwogCWVsc2UgaWYgKElTX0NPRkZFRUxBS0UoZGV2X3ByaXYpKQotCQllcnIgPSBjZmxfaW5p dF93b3JrYXJvdW5kcyhlbmdpbmUpOworCQljZmxfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoZGV2X3By aXYpOwogCWVsc2UgaWYgKElTX0NBTk5PTkxBS0UoZGV2X3ByaXYpKQotCQllcnIgPSBjbmxfaW5p dF93b3JrYXJvdW5kcyhlbmdpbmUpOworCQljbmxfZ3Rfd29ya2Fyb3VuZHNfYXBwbHkoZGV2X3By aXYpOwogCWVsc2UKLQkJZXJyID0gMDsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlNSVNT SU5HX0NBU0UoSU5URUxfR0VOKGRldl9wcml2KSk7Cit9CisKK3N0YXRpYyBpbnQgd2FfcmluZ193 aGl0ZWxpc3RfcmVnKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKKwkJCQkgaTkxNV9y ZWdfdCByZWcpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5l LT5pOTE1OworCXN0cnVjdCBpOTE1X3dvcmthcm91bmRzICp3YSA9ICZkZXZfcHJpdi0+d29ya2Fy b3VuZHM7CisJY29uc3QgdWludDMyX3QgaW5kZXggPSB3YS0+aHdfd2hpdGVsaXN0X2NvdW50W2Vu Z2luZS0+aWRdOworCisJaWYgKFdBUk5fT04oaW5kZXggPj0gUklOR19NQVhfTk9OUFJJVl9TTE9U UykpCisJCXJldHVybiAtRUlOVkFMOworCisJSTkxNV9XUklURShSSU5HX0ZPUkNFX1RPX05PTlBS SVYoZW5naW5lLT5tbWlvX2Jhc2UsIGluZGV4KSwKKwkJICAgaTkxNV9tbWlvX3JlZ19vZmZzZXQo cmVnKSk7CisJd2EtPmh3X3doaXRlbGlzdF9jb3VudFtlbmdpbmUtPmlkXSsrOwogCi0JRFJNX0RF QlVHX0RSSVZFUigiJXM6IE51bWJlciBvZiBjb250ZXh0IHNwZWNpZmljIHcvYTogJWRcbiIsCi0J CQkgZW5naW5lLT5uYW1lLCBkZXZfcHJpdi0+d29ya2Fyb3VuZHMuY291bnQpOwogCXJldHVybiAw OwogfQogCi1pbnQgaW50ZWxfcmluZ193b3JrYXJvdW5kc19lbWl0KHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxKQorc3RhdGljIGludCBnZW45X3doaXRlbGlzdF93b3JrYXJvdW5kc19h cHBseShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7Ci0Jc3RydWN0IGk5MTVfd29y a2Fyb3VuZHMgKncgPSAmcmVxLT5pOTE1LT53b3JrYXJvdW5kczsKLQl1MzIgKmNzOwotCWludCBy ZXQsIGk7CisJaW50IHJldDsKIAotCWlmICh3LT5jb3VudCA9PSAwKQotCQlyZXR1cm4gMDsKKwkv KiBXYVZGRVN0YXRlQWZ0ZXJQaXBlQ29udHJvbHdpdGhNZWRpYVN0YXRlQ2xlYXI6c2tsLGJ4dCxn bGssY2ZsICovCisJcmV0ID0gd2FfcmluZ193aGl0ZWxpc3RfcmVnKGVuZ2luZSwgR0VOOV9DVFhf UFJFRU1QVF9SRUcpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQlyZXQgPSByZXEtPmVu Z2luZS0+ZW1pdF9mbHVzaChyZXEsIEVNSVRfQkFSUklFUik7CisJLyogV2FFbmFibGVQcmVlbXB0 aW9uR3JhbnVsYXJpdHlDb250cm9sQnlVTUQ6c2tsLGJ4dCxrYmwsY2ZsLFtjbmxdICovCisJcmV0 ID0gd2FfcmluZ193aGl0ZWxpc3RfcmVnKGVuZ2luZSwgR0VOOF9DU19DSElDS0VOMSk7CiAJaWYg KHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWNzID0gaW50ZWxfcmluZ19iZWdpbihyZXEsICh3LT5j b3VudCAqIDIgKyAyKSk7Ci0JaWYgKElTX0VSUihjcykpCi0JCXJldHVybiBQVFJfRVJSKGNzKTsK KwkvKiBXYUFsbG93VU1EVG9Nb2RpZnlIRENDaGlja2VuMTpza2wsYnh0LGtibCxnbGssY2ZsICov CisJcmV0ID0gd2FfcmluZ193aGl0ZWxpc3RfcmVnKGVuZ2luZSwgR0VOOF9IRENfQ0hJQ0tFTjEp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJf SU1NKHctPmNvdW50KTsKLQlmb3IgKGkgPSAwOyBpIDwgdy0+Y291bnQ7IGkrKykgewotCQkqY3Mr KyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KHctPnJlZ1tpXS5hZGRyKTsKLQkJKmNzKysgPSB3LT5y ZWdbaV0udmFsdWU7Ci0JfQotCSpjcysrID0gTUlfTk9PUDsKKwlyZXR1cm4gMDsKK30KIAotCWlu dGVsX3JpbmdfYWR2YW5jZShyZXEsIGNzKTsKK3N0YXRpYyBpbnQgc2tsX3doaXRlbGlzdF93b3Jr YXJvdW5kc19hcHBseShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJaW50IHJl dCA9IGdlbjlfd2hpdGVsaXN0X3dvcmthcm91bmRzX2FwcGx5KGVuZ2luZSk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKIAotCXJldCA9IHJlcS0+ZW5naW5lLT5lbWl0X2ZsdXNoKHJlcSwgRU1J VF9CQVJSSUVSKTsKKwkvKiBXYURpc2FibGVMU1FDUk9QRVJGZm9yT0NMOnNrbCAqLworCXJldCA9 IHdhX3Jpbmdfd2hpdGVsaXN0X3JlZyhlbmdpbmUsIEdFTjhfTDNTUUNSRUc0KTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnh0X3doaXRl bGlzdF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7 CisJaW50IHJldCA9IGdlbjlfd2hpdGVsaXN0X3dvcmthcm91bmRzX2FwcGx5KGVuZ2luZSk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGti bF93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQoreworCWludCByZXQgPSBnZW45X3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShlbmdp bmUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBXYURpc2FibGVMU1FDUk9QRVJG Zm9yT0NMOmtibCAqLworCXJldCA9IHdhX3Jpbmdfd2hpdGVsaXN0X3JlZyhlbmdpbmUsIEdFTjhf TDNTUUNSRUc0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgZ2xrX3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCit7CisJaW50IHJldCA9IGdlbjlfd2hpdGVsaXN0X3dvcmthcm91 bmRzX2FwcGx5KGVuZ2luZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFdBICMw ODYyOiBVc2Vyc3BhY2UgaGFzIHRvIHNldCAiQmFycmllciBNb2RlIiB0byBhdm9pZCBoYW5ncy4g Ki8KKwlyZXQgPSB3YV9yaW5nX3doaXRlbGlzdF9yZWcoZW5naW5lLCBHRU45X1NMSUNFX0NPTU1P Tl9FQ09fQ0hJQ0tFTjEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBjZmxfd2hpdGVsaXN0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlpbnQgcmV0ID0gZ2VuOV93aGl0ZWxpc3Rfd29y a2Fyb3VuZHNfYXBwbHkoZW5naW5lKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY25sX3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJaW50IHJldDsKKworCS8qIFdhRW5h YmxlUHJlZW1wdGlvbkdyYW51bGFyaXR5Q29udHJvbEJ5VU1EOmNubCAqLworCXJldCA9IHdhX3Jp bmdfd2hpdGVsaXN0X3JlZyhlbmdpbmUsIEdFTjhfQ1NfQ0hJQ0tFTjEpOwogCWlmIChyZXQpCiAJ CXJldHVybiByZXQ7CiAKIAlyZXR1cm4gMDsKIH0KKworaW50IGludGVsX3doaXRlbGlzdF93b3Jr YXJvdW5kc19hcHBseShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1OworCWludCBlcnI7CisK KwlXQVJOX09OKGVuZ2luZS0+aWQgIT0gUkNTKTsKKworCWRldl9wcml2LT53b3JrYXJvdW5kcy5o d193aGl0ZWxpc3RfY291bnRbZW5naW5lLT5pZF0gPSAwOworCisJaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPCA5KSB7CisJCVdBUk4oMSwgIk5vIHdoaXRlbGlzdGluZyBpbiBHZW4ldVxuIiwgSU5U RUxfR0VOKGRldl9wcml2KSk7CisJCWVyciA9IDA7CisJfSBlbHNlIGlmIChJU19TS1lMQUtFKGRl dl9wcml2KSkKKwkJZXJyID0gc2tsX3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShlbmdpbmUp OworCWVsc2UgaWYgKElTX0JST1hUT04oZGV2X3ByaXYpKQorCQllcnIgPSBieHRfd2hpdGVsaXN0 X3dvcmthcm91bmRzX2FwcGx5KGVuZ2luZSk7CisJZWxzZSBpZiAoSVNfS0FCWUxBS0UoZGV2X3By aXYpKQorCQllcnIgPSBrYmxfd2hpdGVsaXN0X3dvcmthcm91bmRzX2FwcGx5KGVuZ2luZSk7CisJ ZWxzZSBpZiAoSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCisJCWVyciA9IGdsa193aGl0ZWxpc3Rf d29ya2Fyb3VuZHNfYXBwbHkoZW5naW5lKTsKKwllbHNlIGlmIChJU19DT0ZGRUVMQUtFKGRldl9w cml2KSkKKwkJZXJyID0gY2ZsX3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShlbmdpbmUpOwor CWVsc2UgaWYgKElTX0NBTk5PTkxBS0UoZGV2X3ByaXYpKQorCQllcnIgPSBjbmxfd2hpdGVsaXN0 X3dvcmthcm91bmRzX2FwcGx5KGVuZ2luZSk7CisJZWxzZSB7CisJCU1JU1NJTkdfQ0FTRShJTlRF TF9HRU4oZGV2X3ByaXYpKTsKKwkJZXJyID0gMDsKKwl9CisJaWYgKGVycikKKwkJcmV0dXJuIGVy cjsKKworCURSTV9ERUJVR19EUklWRVIoIiVzOiBOdW1iZXIgb2Ygd2hpdGVsaXN0IHcvYTogJWRc biIsIGVuZ2luZS0+bmFtZSwKKwkJCSBkZXZfcHJpdi0+d29ya2Fyb3VuZHMuaHdfd2hpdGVsaXN0 X2NvdW50W2VuZ2luZS0+aWRdKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3dvcmthcm91bmRzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF93b3JrYXJvdW5kcy5oCmluZGV4IDc2ODExNjUuLjY0Zjk1OTkgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3dvcmthcm91bmRzLmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuaApAQCAtNyw3ICs3LDExIEBACiAjaWZuZGVmIF9J OTE1X1dPUktBUk9VTkRTX0hfCiAjZGVmaW5lIF9JOTE1X1dPUktBUk9VTkRTX0hfCiAKLWludCBp bml0X3dvcmthcm91bmRzX3Jpbmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKLWlu dCBpbnRlbF9yaW5nX3dvcmthcm91bmRzX2VtaXQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 ICpyZXEpOworaW50IGludGVsX2N0eF93b3JrYXJvdW5kc19pbml0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdik7CitpbnQgaW50ZWxfY3R4X3dvcmthcm91bmRzX2VtaXQoc3RydWN0 IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpOworCit2b2lkIGludGVsX2d0X3dvcmthcm91bmRz X2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CisKK2ludCBpbnRlbF93 aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KTsKIAogI2VuZGlmCi0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4Cg==