From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: [PATCH 2/3] drm/panfrost: Expose HW counters to userspace Date: Thu, 4 Apr 2019 17:20:50 +0200 Message-ID: <20190404152051.17996-3-boris.brezillon@collabora.com> References: <20190404152051.17996-1-boris.brezillon@collabora.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [46.235.227.227]) by gabe.freedesktop.org (Postfix) with ESMTPS id 83C176E1B1 for ; Thu, 4 Apr 2019 15:21:04 +0000 (UTC) In-Reply-To: <20190404152051.17996-1-boris.brezillon@collabora.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Rob Herring , Tomeu Vizoso , dri-devel@lists.freedesktop.org Cc: kernel@collabora.com, Boris Brezillon , Alyssa Rosenzweig , Neil Armstrong List-Id: dri-devel@lists.freedesktop.org QWRkIHRoZSBuZWNlc3NhcnkgaW5mcmFzdHJ1Y3R1cmUgdG8gZXhwb3NlIEdQVSBjb3VudGVycyB0 byB1c2Vyc3BhY2UuClRoaXMgdGFrZXMgdGhlIGZvcm0gb2YgNCBuZXcgaW9jdGxzIHRvOgoKLSBx dWVyeSB0aGUgYXZhaWxhYmxlIGNvdW50ZXJzCi0gY3JlYXRlL2Rlc3Ryb3kgYSBwZXJmb3JtYW5j ZSBtb25pdG9yCi0gcmV0cmlldmUgaXRzIHZhbHVlcwoKVGhlIGRybV9wYW5mcm9zdF9zdWJtaXQg c3RydWN0IGlzIGV4dGVuZGVkIHRvIHBhc3MgYSBsaXN0IG9mIHBlcmZtb25zCnRvIGF0dGFjaCB0 byBhIGpvYiwgd2hpY2ggbWVhbnMgcGVyZm1vbnMgd2lsbCBvbmx5IHRyYWNrIGNoYW5nZXMgY2F1 c2VkCmJ5IHRoZSBqb2JzIHRoZXkgYXJlIGF0dGFjaGVkIHRvby4KClNpZ25lZC1vZmYtYnk6IEJv cmlzIEJyZXppbGxvbiA8Ym9yaXMuYnJlemlsbG9uQGNvbGxhYm9yYS5jb20+Ci0tLQogZHJpdmVy cy9ncHUvZHJtL3BhbmZyb3N0L01ha2VmaWxlICAgICAgICAgICB8ICAgMyArLQogZHJpdmVycy9n cHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2RldmljZS5jICB8ICAgOCArCiBkcml2ZXJzL2dwdS9k cm0vcGFuZnJvc3QvcGFuZnJvc3RfZGV2aWNlLmggIHwgIDExICsKIGRyaXZlcnMvZ3B1L2RybS9w YW5mcm9zdC9wYW5mcm9zdF9kcnYuYyAgICAgfCAgMjIgKy0KIGRyaXZlcnMvZ3B1L2RybS9wYW5m cm9zdC9wYW5mcm9zdF9ncHUuYyAgICAgfCAgNDMgKy0KIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9z dC9wYW5mcm9zdF9qb2IuYyAgICAgfCAgMjQgKwogZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3Bh bmZyb3N0X2pvYi5oICAgICB8ICAgNCArCiBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJv c3RfcGVyZmNudC5jIHwgOTU0ICsrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0v cGFuZnJvc3QvcGFuZnJvc3RfcGVyZmNudC5oIHwgIDU0ICsrCiBkcml2ZXJzL2dwdS9kcm0vcGFu ZnJvc3QvcGFuZnJvc3RfcmVncy5oICAgIHwgIDE5ICsKIGluY2x1ZGUvdWFwaS9kcm0vcGFuZnJv c3RfZHJtLmggICAgICAgICAgICAgfCAxMjIgKysrCiAxMSBmaWxlcyBjaGFuZ2VkLCAxMjYwIGlu c2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X3BlcmZjbnQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9wZXJmY250LmgKCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZnJv c3QvTWFrZWZpbGUKaW5kZXggZDA3ZTA5NzFiNjg3Li4zMWNmYjlkMjU2ODIgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0v cGFuZnJvc3QvTWFrZWZpbGUKQEAgLTYsNiArNiw3IEBAIHBhbmZyb3N0LXkgOj0gXAogCXBhbmZy b3N0X2dlbS5vIFwKIAlwYW5mcm9zdF9ncHUubyBcCiAJcGFuZnJvc3Rfam9iLm8gXAotCXBhbmZy b3N0X21tdS5vCisJcGFuZnJvc3RfbW11Lm8gXAorCXBhbmZyb3N0X3BlcmZjbnQubwogCiBvYmot JChDT05GSUdfRFJNX1BBTkZST1NUKSArPSBwYW5mcm9zdC5vCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFu ZnJvc3QvcGFuZnJvc3RfZGV2aWNlLmMKaW5kZXggMTQ4YjVjYWEyMzIyLi5mNmE4N2JmYTQ4NmIg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kZXZpY2UuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZGV2aWNlLmMKQEAgLTEzLDYg KzEzLDcgQEAKICNpbmNsdWRlICJwYW5mcm9zdF9ncHUuaCIKICNpbmNsdWRlICJwYW5mcm9zdF9q b2IuaCIKICNpbmNsdWRlICJwYW5mcm9zdF9tbXUuaCIKKyNpbmNsdWRlICJwYW5mcm9zdF9wZXJm Y250LmgiCiAKIHN0YXRpYyBpbnQgcGFuZnJvc3RfcmVzZXRfaW5pdChzdHJ1Y3QgcGFuZnJvc3Rf ZGV2aWNlICpwZmRldikKIHsKQEAgLTE0Nyw3ICsxNDgsMTMgQEAgaW50IHBhbmZyb3N0X2Rldmlj ZV9pbml0KHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2KQogCXBtX3J1bnRpbWVfbWFya19s YXN0X2J1c3kocGZkZXYtPmRldik7CiAJcG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQocGZkZXYt PmRldik7CiAKKwllcnIgPSBwYW5mcm9zdF9wZXJmY250X2luaXQocGZkZXYpOworCWlmIChlcnIp CisJCWdvdG8gZXJyX291dDU7CisKIAlyZXR1cm4gMDsKK2Vycl9vdXQ1OgorCXBhbmZyb3N0X2pv Yl9maW5pKHBmZGV2KTsKIGVycl9vdXQ0OgogCXBhbmZyb3N0X21tdV9maW5pKHBmZGV2KTsKIGVy cl9vdXQzOgpAQCAtMTYzLDYgKzE3MCw3IEBAIGludCBwYW5mcm9zdF9kZXZpY2VfaW5pdChzdHJ1 Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldikKIAogdm9pZCBwYW5mcm9zdF9kZXZpY2VfZmluaShz dHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldikKIHsKKwlwYW5mcm9zdF9wZXJmY250X2Zpbmko cGZkZXYpOwogCXBhbmZyb3N0X2pvYl9maW5pKHBmZGV2KTsKIAlwYW5mcm9zdF9tbXVfZmluaShw ZmRldik7CiAJcGFuZnJvc3RfZ3B1X2ZpbmkocGZkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2RldmljZS5oIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZy b3N0L3BhbmZyb3N0X2RldmljZS5oCmluZGV4IGE4MjFiNTBhMTRjMy4uZjdjNGU5ZTU1ZjFiIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZGV2aWNlLmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2RldmljZS5oCkBAIC05LDExICs5 LDEzIEBACiAjaW5jbHVkZSA8ZHJtL2RybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxkcm0vZHJtX21t Lmg+CiAjaW5jbHVkZSA8ZHJtL2dwdV9zY2hlZHVsZXIuaD4KKyNpbmNsdWRlIDxkcm0vcGFuZnJv c3RfZHJtLmg+CiAKIHN0cnVjdCBwYW5mcm9zdF9kZXZpY2U7CiBzdHJ1Y3QgcGFuZnJvc3RfbW11 Owogc3RydWN0IHBhbmZyb3N0X2pvYl9zbG90Owogc3RydWN0IHBhbmZyb3N0X2pvYjsKK3N0cnVj dCBwYW5mcm9zdF9wZXJmY250OwogCiAjZGVmaW5lIE5VTV9KT0JfU0xPVFMgMwogCkBAIC00NSw2 ICs0Nyw4IEBAIHN0cnVjdCBwYW5mcm9zdF9mZWF0dXJlcyB7CiAKIAl1bnNpZ25lZCBsb25nIGh3 X2ZlYXR1cmVzWzY0IC8gQklUU19QRVJfTE9OR107CiAJdW5zaWduZWQgbG9uZyBod19pc3N1ZXNb NjQgLyBCSVRTX1BFUl9MT05HXTsKKworCXN0cnVjdCBkcm1fcGFuZnJvc3RfYmxvY2tfcGVyZmNv dW50ZXJzIHBlcmZjbnRfbGF5b3V0W1BBTkZST1NUX05VTV9CTE9DS1NdOwogfTsKIAogc3RydWN0 IHBhbmZyb3N0X2RldmljZSB7CkBAIC03MCw2ICs3NCw4IEBAIHN0cnVjdCBwYW5mcm9zdF9kZXZp Y2UgewogCXN0cnVjdCBwYW5mcm9zdF9qb2IgKmpvYnNbTlVNX0pPQl9TTE9UU107CiAJc3RydWN0 IGxpc3RfaGVhZCBzY2hlZHVsZWRfam9iczsKIAorCXN0cnVjdCBwYW5mcm9zdF9wZXJmY250ICpw ZXJmY250OworCiAJc3RydWN0IG11dGV4IHNjaGVkX2xvY2s7CiB9OwogCkBAIC03Nyw2ICs4Mywx MSBAQCBzdHJ1Y3QgcGFuZnJvc3RfZmlsZV9wcml2IHsKIAlzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNl ICpwZmRldjsKIAogCXN0cnVjdCBkcm1fc2NoZWRfZW50aXR5IHNjaGVkX2VudGl0eVtOVU1fSk9C X1NMT1RTXTsKKworCXN0cnVjdCB7CisJCXN0cnVjdCBpZHIgaWRyOworCQlzdHJ1Y3QgbXV0ZXgg bG9jazsKKwl9IHBlcmZtb247CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYW5mcm9zdF9k ZXZpY2UgKnRvX3BhbmZyb3N0X2RldmljZShzdHJ1Y3QgZHJtX2RldmljZSAqZGRldikKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYyBiL2RyaXZlcnMv Z3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYwppbmRleCA4Y2ZmYjcwYTM1NDguLmU1Mzc1 YjMxNjI3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Ry di5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYwpAQCAtMTks NiArMTksNyBAQAogI2luY2x1ZGUgInBhbmZyb3N0X21tdS5oIgogI2luY2x1ZGUgInBhbmZyb3N0 X2pvYi5oIgogI2luY2x1ZGUgInBhbmZyb3N0X2dwdS5oIgorI2luY2x1ZGUgInBhbmZyb3N0X3Bl cmZjbnQuaCIKIAogc3RhdGljIGludCBwYW5mcm9zdF9pb2N0bF9nZXRfcGFyYW0oc3RydWN0IGRy bV9kZXZpY2UgKmRkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKIHsKQEAg LTIxOSw2ICsyMjAsMTAgQEAgc3RhdGljIGludCBwYW5mcm9zdF9pb2N0bF9zdWJtaXQoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAlpZiAocmV0KQogCQlnb3RvIGZhaWw7CiAK KwlyZXQgPSBwYW5mcm9zdF9wZXJmY250X2NyZWF0ZV9qb2JfY3R4KGpvYiwgZmlsZSwgYXJncyk7 CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCiAJcmV0ID0gcGFuZnJvc3Rfam9iX3B1c2goam9i KTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWw7CkBAIC0zMTMsNiArMzE4LDcgQEAgcGFuZnJvc3Rf b3BlbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCiB7CiAJ c3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVj dCBwYW5mcm9zdF9maWxlX3ByaXYgKnBhbmZyb3N0X3ByaXY7CisJaW50IHJldDsKIAogCXBhbmZy b3N0X3ByaXYgPSBremFsbG9jKHNpemVvZigqcGFuZnJvc3RfcHJpdiksIEdGUF9LRVJORUwpOwog CWlmICghcGFuZnJvc3RfcHJpdikKQEAgLTMyMSw3ICszMjcsMTYgQEAgcGFuZnJvc3Rfb3Blbihz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCiAJcGFuZnJvc3Rf cHJpdi0+cGZkZXYgPSBwZmRldjsKIAlmaWxlLT5kcml2ZXJfcHJpdiA9IHBhbmZyb3N0X3ByaXY7 CiAKLQlyZXR1cm4gcGFuZnJvc3Rfam9iX29wZW4ocGFuZnJvc3RfcHJpdik7CisJcmV0ID0gcGFu ZnJvc3Rfam9iX29wZW4ocGFuZnJvc3RfcHJpdik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJl ZV9wcml2OworCisJcGFuZnJvc3RfcGVyZmNudF9vcGVuKHBhbmZyb3N0X3ByaXYpOworCXJldHVy biAwOworCitlcnJfZnJlZV9wcml2OgorCWtmcmVlKHBhbmZyb3N0X3ByaXYpOworCXJldHVybiBy ZXQ7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0zMjksNiArMzQ0LDcgQEAgcGFuZnJvc3RfcG9zdGNs b3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKIHsKIAlz dHJ1Y3QgcGFuZnJvc3RfZmlsZV9wcml2ICpwYW5mcm9zdF9wcml2ID0gZmlsZS0+ZHJpdmVyX3By aXY7CiAKKwlwYW5mcm9zdF9wZXJmY250X2Nsb3NlKHBhbmZyb3N0X3ByaXYpOwogCXBhbmZyb3N0 X2pvYl9jbG9zZShwYW5mcm9zdF9wcml2KTsKIAogCWtmcmVlKHBhbmZyb3N0X3ByaXYpOwpAQCAt MzQ4LDYgKzM2NCwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pb2N0bF9kZXNjIHBhbmZy b3N0X2RybV9kcml2ZXJfaW9jdGxzW10gPSB7CiAJUEFORlJPU1RfSU9DVEwoTU1BUF9CTywJCW1t YXBfYm8sCURSTV9SRU5ERVJfQUxMT1cpLAogCVBBTkZST1NUX0lPQ1RMKEdFVF9QQVJBTSwJZ2V0 X3BhcmFtLAlEUk1fUkVOREVSX0FMTE9XKSwKIAlQQU5GUk9TVF9JT0NUTChHRVRfQk9fT0ZGU0VU LAlnZXRfYm9fb2Zmc2V0LAlEUk1fUkVOREVSX0FMTE9XKSwKKwlQQU5GUk9TVF9JT0NUTChHRVRf UEVSRkNOVF9MQVlPVVQsIGdldF9wZXJmY250X2xheW91dCwgRFJNX1JFTkRFUl9BTExPVyksCisJ UEFORlJPU1RfSU9DVEwoQ1JFQVRFX1BFUkZNT04sCWNyZWF0ZV9wZXJmbW9uLAlEUk1fUkVOREVS X0FMTE9XKSwKKwlQQU5GUk9TVF9JT0NUTChERVNUUk9ZX1BFUkZNT04sCWRlc3Ryb3lfcGVyZm1v biwgRFJNX1JFTkRFUl9BTExPVyksCisJUEFORlJPU1RfSU9DVEwoR0VUX1BFUkZNT05fVkFMVUVT LCBnZXRfcGVyZm1vbl92YWx1ZXMsIERSTV9SRU5ERVJfQUxMT1cpLAogfTsKIAogREVGSU5FX0RS TV9HRU1fU0hNRU1fRk9QUyhwYW5mcm9zdF9kcm1fZHJpdmVyX2ZvcHMpOwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2dwdS5jIGIvZHJpdmVycy9ncHUvZHJt L3BhbmZyb3N0L3BhbmZyb3N0X2dwdS5jCmluZGV4IGQ0NmQzNjE3MGUxOC4uYzI4YTMxYzU0N2Nj IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZ3B1LmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2dwdS5jCkBAIC0xMyw2ICsxMyw3 IEBACiAjaW5jbHVkZSAicGFuZnJvc3RfZmVhdHVyZXMuaCIKICNpbmNsdWRlICJwYW5mcm9zdF9p c3N1ZXMuaCIKICNpbmNsdWRlICJwYW5mcm9zdF9ncHUuaCIKKyNpbmNsdWRlICJwYW5mcm9zdF9w ZXJmY250LmgiCiAjaW5jbHVkZSAicGFuZnJvc3RfcmVncy5oIgogCiBzdGF0aWMgaXJxcmV0dXJu X3QgcGFuZnJvc3RfZ3B1X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCkBAIC00Miw2 ICs0MywxMiBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcGFuZnJvc3RfZ3B1X2lycV9oYW5kbGVyKGlu dCBpcnEsIHZvaWQgKmRhdGEpCiAJCWRvbmUgPSB0cnVlOwogCX0KIAorCWlmIChzdGF0ZSAmIEdQ VV9JUlFfUEVSRkNOVF9TQU1QTEVfQ09NUExFVEVEKQorCQlwYW5mcm9zdF9wZXJmY250X3NhbXBs ZV9kb25lKHBmZGV2KTsKKworCWlmIChzdGF0ZSAmIEdQVV9JUlFfQ0xFQU5fQ0FDSEVTX0NPTVBM RVRFRCkKKwkJcGFuZnJvc3RfcGVyZmNudF9jbGVhbl9jYWNoZV9kb25lKHBmZGV2KTsKKwogCWdw dV93cml0ZShwZmRldiwgR1BVX0lOVF9DTEVBUiwgc3RhdGUpOwogCiAJcmV0dXJuIElSUV9IQU5E TEVEOwpAQCAtMTUyLDE0ICsxNTksMTYgQEAgc3RydWN0IHBhbmZyb3N0X21vZGVsIHsKIAkJdTMy IHJldmlzaW9uOwogCQl1NjQgaXNzdWVzOwogCX0gcmV2c1tNQVhfSFdfUkVWU107CisJdTY0IHBl cmZjbnRbUEFORlJPU1RfTlVNX0JMT0NLU107CiB9OwogCiAjZGVmaW5lIEdQVV9NT0RFTChfbmFt ZSwgX2lkLCAuLi4pIFwKLXtcCit7CQkJCQkJCQlcCiAJLm5hbWUgPSBfX3N0cmluZ2lmeShfbmFt ZSksCQkJCVwKIAkuaWQgPSBfaWQsCQkJCQkJXAogCS5mZWF0dXJlcyA9IGh3X2ZlYXR1cmVzXyMj X25hbWUsCQkJXAogCS5pc3N1ZXMgPSBod19pc3N1ZXNfIyNfbmFtZSwJCQkJXAorCS5wZXJmY250 ID0gaHdfcGVyZmNudF8jI19uYW1lLAkJCQlcCiAJLnJldnMgPSB7IF9fVkFfQVJHU19fIH0sCQkJ CVwKIH0KIApAQCAtMTk4LDEzICsyMDcsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwYW5mcm9z dF9tb2RlbCBncHVfbW9kZWxzW10gPSB7CiAKIHN0YXRpYyB2b2lkIHBhbmZyb3N0X2dwdV9pbml0 X2ZlYXR1cmVzKHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2KQogeworCXN0cnVjdCBkcm1f cGFuZnJvc3RfYmxvY2tfcGVyZmNvdW50ZXJzICpwZXJmY250X2xheW91dDsKIAl1MzIgZ3B1X2lk LCBudW1fanMsIG1ham9yLCBtaW5vciwgc3RhdHVzLCByZXY7CiAJY29uc3QgY2hhciAqbmFtZSA9 ICJ1bmtub3duIjsKIAl1NjQgaHdfZmVhdCA9IDA7Ci0JdTY0IGh3X2lzc3VlcyA9IGh3X2lzc3Vl c19hbGw7CisJdTY0IGh3X2lzc3VlcyA9IGh3X2lzc3Vlc19hbGwsIG1hc2s7CiAJY29uc3Qgc3Ry dWN0IHBhbmZyb3N0X21vZGVsICptb2RlbDsKKwl1bnNpZ25lZCBpbnQgbnVtOwogCWludCBpOwog CisJcGVyZmNudF9sYXlvdXQgPSBwZmRldi0+ZmVhdHVyZXMucGVyZmNudF9sYXlvdXQ7CisKIAlw ZmRldi0+ZmVhdHVyZXMubDJfZmVhdHVyZXMgPSBncHVfcmVhZChwZmRldiwgR1BVX0wyX0ZFQVRV UkVTKTsKIAlwZmRldi0+ZmVhdHVyZXMuY29yZV9mZWF0dXJlcyA9IGdwdV9yZWFkKHBmZGV2LCBH UFVfQ09SRV9GRUFUVVJFUyk7CiAJcGZkZXYtPmZlYXR1cmVzLnRpbGVyX2ZlYXR1cmVzID0gZ3B1 X3JlYWQocGZkZXYsIEdQVV9USUxFUl9GRUFUVVJFUyk7CkBAIC0yNzIsOSArMjg1LDM1IEBAIHN0 YXRpYyB2b2lkIHBhbmZyb3N0X2dwdV9pbml0X2ZlYXR1cmVzKHN0cnVjdCBwYW5mcm9zdF9kZXZp Y2UgKnBmZGV2KQogCQlpZiAoYmVzdCA+PSAwKQogCQkJaHdfaXNzdWVzIHw9IG1vZGVsLT5yZXZz W2Jlc3RdLmlzc3VlczsKIAorCQlmb3IgKGkgPSAwOyBpIDwgUEFORlJPU1RfTlVNX0JMT0NLUzsg aSsrKQorCQkJcGVyZmNudF9sYXlvdXRbaV0uY291bnRlcnMgPSBtb2RlbC0+cGVyZmNudFtpXTsK KwogCQlicmVhazsKIAl9CiAKKwkvKiBPbmx5IG9uZSBKb2IgTWFuYWdlci4gKi8KKwlwZXJmY250 X2xheW91dFtQQU5GUk9TVF9KTV9CTE9DS10uaW5zdGFuY2VzID0gQklUKDApOworCXBlcmZjbnRf bGF5b3V0W1BBTkZST1NUX1NIQURFUl9CTE9DS10uaW5zdGFuY2VzID0KKwkJCQkJCXBmZGV2LT5m ZWF0dXJlcy5zaGFkZXJfcHJlc2VudDsKKworCS8qCisJICogSW4gdjQgSFcgd2UgaGF2ZSBvbmUg dGlsZXIgcGVyIGNvcmUgZ3JvdXAsIHdpdGggdGhlIG51bWJlcgorCSAqIG9mIGNvcmUgZ3JvdXBz IGJlaW5nIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgTDIgY2FjaGVzLiBPdGhlcgorCSAqIEhXIHZl cnNpb25zIGp1c3QgaGF2ZSBvbmUgdGlsZXIgYW5kIHRoZSBudW1iZXIgb2YgTDIgY2FjaGVzCisJ ICogY2FuIGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBtZW1fZmVhdHVyZXMgZmllbGQuCisJICovCisJ aWYgKGh3X2ZlYXQgJiBIV19GRUFUVVJFX1Y0KSB7CisJCW51bSA9IGh3ZWlnaHQ2NChwZmRldi0+ ZmVhdHVyZXMubDJfcHJlc2VudCk7CisJCW1hc2sgPSBHRU5NQVNLKG51bSAtIDEsIDApOworCQlw ZXJmY250X2xheW91dFtQQU5GUk9TVF9NTVVfTDJfQkxPQ0tdLmluc3RhbmNlcyA9IG1hc2s7CisJ CXBlcmZjbnRfbGF5b3V0W1BBTkZST1NUX1RJTEVSX0JMT0NLXS5pbnN0YW5jZXMgPSBtYXNrOwor CX0gZWxzZSB7CisJCXBlcmZjbnRfbGF5b3V0W1BBTkZST1NUX1RJTEVSX0JMT0NLXS5pbnN0YW5j ZXMgPSBCSVQoMCk7CisJCW51bSA9ICgocGZkZXYtPmZlYXR1cmVzLm1lbV9mZWF0dXJlcyA+PiA4 KSAmIEdFTk1BU0soMywgMCkpICsgMTsKKwkJbWFzayA9IEdFTk1BU0sobnVtIC0gMSwgMCk7CisJ CXBlcmZjbnRfbGF5b3V0W1BBTkZST1NUX01NVV9MMl9CTE9DS10uaW5zdGFuY2VzID0gbWFzazsK Kwl9CisKIAliaXRtYXBfZnJvbV91NjQocGZkZXYtPmZlYXR1cmVzLmh3X2ZlYXR1cmVzLCBod19m ZWF0KTsKIAliaXRtYXBfZnJvbV91NjQocGZkZXYtPmZlYXR1cmVzLmh3X2lzc3VlcywgaHdfaXNz dWVzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2pv Yi5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2pvYi5jCmluZGV4IDhkNTcw YzNmMTVkMC4uYzJiZTYxYTllYmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJv c3QvcGFuZnJvc3Rfam9iLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0 X2pvYi5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAicGFuZnJvc3RfZmVhdHVyZXMuaCIK ICNpbmNsdWRlICJwYW5mcm9zdF9pc3N1ZXMuaCIKICNpbmNsdWRlICJwYW5mcm9zdF9nZW0uaCIK KyNpbmNsdWRlICJwYW5mcm9zdF9wZXJmY250LmgiCiAjaW5jbHVkZSAicGFuZnJvc3RfcmVncy5o IgogI2luY2x1ZGUgInBhbmZyb3N0X2dwdS5oIgogI2luY2x1ZGUgInBhbmZyb3N0X21tdS5oIgpA QCAtMTUzLDYgKzE1NCw3IEBAIHN0YXRpYyB2b2lkIHBhbmZyb3N0X2pvYl9od19zdWJtaXQoc3Ry dWN0IHBhbmZyb3N0X2pvYiAqam9iLCBpbnQganMpCiAJCWdvdG8gZW5kOwogCiAJc3Bpbl9sb2Nr X2lycXNhdmUoJnBmZGV2LT5od2FjY2Vzc19sb2NrLCBmbGFncyk7CisJcGFuZnJvc3RfcGVyZmNu dF9ydW5fam9iKGpvYik7CiAKIAlqb2Jfd3JpdGUocGZkZXYsIEpTX0hFQURfTkVYVF9MTyhqcyks IGpjX2hlYWQgJiAweEZGRkZGRkZGKTsKIAlqb2Jfd3JpdGUocGZkZXYsIEpTX0hFQURfTkVYVF9I SShqcyksIGpjX2hlYWQgPj4gMzIpOwpAQCAtMjMzLDYgKzIzNSwxMiBAQCBpbnQgcGFuZnJvc3Rf am9iX3B1c2goc3RydWN0IHBhbmZyb3N0X2pvYiAqam9iKQogCQlnb3RvIHVubG9jazsKIAl9CiAK KwlyZXQgPSBwYW5mcm9zdF9wZXJmY250X3B1c2hfam9iKGpvYik7CisJaWYgKHJldCkgeworCQlt dXRleF91bmxvY2soJnBmZGV2LT5zY2hlZF9sb2NrKTsKKwkJZ290byB1bmxvY2s7CisJfQorCiAJ am9iLT5yZW5kZXJfZG9uZV9mZW5jZSA9IGRtYV9mZW5jZV9nZXQoJmpvYi0+YmFzZS5zX2ZlbmNl LT5maW5pc2hlZCk7CiAKIAlrcmVmX2dldCgmam9iLT5yZWZjb3VudCk7IC8qIHB1dCBieSBzY2hl ZHVsZXIgam9iIGNvbXBsZXRpb24gKi8KQEAgLTI3Miw2ICsyODAsOSBAQCBzdGF0aWMgdm9pZCBw YW5mcm9zdF9qb2JfY2xlYW51cChzdHJ1Y3Qga3JlZiAqcmVmKQogCiAJZm9yIChpID0gMDsgaSA8 IGpvYi0+Ym9fY291bnQ7IGkrKykKIAkJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKGpvYi0+ Ym9zW2ldKTsKKworCXBhbmZyb3N0X3BlcmZjbnRfY2xlYW5fam9iX2N0eChqb2IpOworCiAJa3Zm cmVlKGpvYi0+Ym9zKTsKIAogCWtmcmVlKGpvYik7CkBAIC0zMTYsNiArMzI3LDEzIEBAIHN0YXRp YyBzdHJ1Y3QgZG1hX2ZlbmNlICpwYW5mcm9zdF9qb2JfZGVwZW5kZW5jeShzdHJ1Y3QgZHJtX3Nj aGVkX2pvYiAqc2NoZWRfam9iCiAJCX0KIAl9CiAKKwkvKiBSZXR1cm4gdGhlIHBlcmZtb24gd2Fp dCBmZW5jZSBpZiBhbnkuICovCisJaWYgKGpvYi0+cGVyZmNudF9mZW5jZSkgeworCQlmZW5jZSA9 IGpvYi0+cGVyZmNudF9mZW5jZTsKKwkJam9iLT5wZXJmY250X2ZlbmNlID0gTlVMTDsKKwkJcmV0 dXJuIGZlbmNlOworCX0KKwogCXJldHVybiBOVUxMOwogfQogCkBAIC0zOTksNiArNDE3LDExIEBA IHN0YXRpYyB2b2lkIHBhbmZyb3N0X2pvYl90aW1lZG91dChzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAq c2NoZWRfam9iKQogCS8qIHJlc3RhcnQgc2NoZWR1bGVyIGFmdGVyIEdQVSBpcyB1c2FibGUgYWdh aW4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0pPQl9TTE9UUzsgaSsrKQogCQlkcm1fc2NoZWRf c3RhcnQoJnBmZGV2LT5qcy0+cXVldWVbaV0uc2NoZWQsIHRydWUpOworCisJLyogRm9yIG5vdywg anVzdCBzYXkgd2UncmUgZG9uZS4gTm8gcmVzZXQgYW5kIHJldHJ5LiAqLworLy8Jam9iX3dyaXRl KHBmZGV2LCBKU19DT01NQU5EKGpzKSwgSlNfQ09NTUFORF9IQVJEX1NUT1ApOworCWRtYV9mZW5j ZV9zaWduYWwoam9iLT5kb25lX2ZlbmNlKTsKKwlwYW5mcm9zdF9wZXJmY250X2ZpbmlzaF9qb2Io am9iLCB0cnVlKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fc2NoZWRfYmFja2VuZF9v cHMgcGFuZnJvc3Rfc2NoZWRfb3BzID0gewpAQCAtNDQyLDYgKzQ2NSw3IEBAIHN0YXRpYyBpcnFy ZXR1cm5fdCBwYW5mcm9zdF9qb2JfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKIAog CQlpZiAoc3RhdHVzICYgSk9CX0lOVF9NQVNLX0RPTkUoaikpIHsKIAkJCWRtYV9mZW5jZV9zaWdu YWwocGZkZXYtPmpvYnNbal0tPmRvbmVfZmVuY2UpOworCQkJcGFuZnJvc3RfcGVyZmNudF9maW5p c2hfam9iKHBmZGV2LT5qb2JzW2pdLCBmYWxzZSk7CiAJCX0KIAogCQlzdGF0dXMgJj0gfm1hc2s7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3Rfam9iLmggYi9k cml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3Rfam9iLmgKaW5kZXggNjI0NTQxMjhhNzky Li4xODY0NmNjNWVlYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5m cm9zdF9qb2IuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3Rfam9iLmgK QEAgLTM3LDYgKzM3LDEwIEBAIHN0cnVjdCBwYW5mcm9zdF9qb2IgewogCiAJLyogRmVuY2UgdG8g YmUgc2lnbmFsZWQgYnkgZHJtLXNjaGVkIG9uY2UgaXRzIGRvbmUgd2l0aCB0aGUgam9iICovCiAJ c3RydWN0IGRtYV9mZW5jZSAqcmVuZGVyX2RvbmVfZmVuY2U7CisKKwkvKiBQZXJmY250IGNvbnRl eHQgKi8KKwlzdHJ1Y3QgcGFuZnJvc3RfcGVyZmNudF9qb2JfY3R4ICpwZXJmY250X2N0eDsKKwlz dHJ1Y3QgZG1hX2ZlbmNlICpwZXJmY250X2ZlbmNlOwogfTsKIAogaW50IHBhbmZyb3N0X2pvYl9p bml0KHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9wZXJmY250LmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFu ZnJvc3QvcGFuZnJvc3RfcGVyZmNudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uNDQ5MWYxNTNhZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L3BhbmZyb3N0L3BhbmZyb3N0X3BlcmZjbnQuYwpAQCAtMCwwICsxLDk1NCBAQAorLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qIENvcHlyaWdodCAyMDE5IENvbGxhYm9yYSBM dGQgKi8KKworI2luY2x1ZGUgPGRybS9kcm1fZmlsZS5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2Vt X3NobWVtX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9wYW5mcm9zdF9kcm0uaD4KKyNpbmNsdWRl IDxsaW51eC9pb3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGlu dXgvdWFjY2Vzcy5oPgorCisjaW5jbHVkZSAicGFuZnJvc3RfZGV2aWNlLmgiCisjaW5jbHVkZSAi cGFuZnJvc3RfZmVhdHVyZXMuaCIKKyNpbmNsdWRlICJwYW5mcm9zdF9nZW0uaCIKKyNpbmNsdWRl ICJwYW5mcm9zdF9pc3N1ZXMuaCIKKyNpbmNsdWRlICJwYW5mcm9zdF9qb2IuaCIKKyNpbmNsdWRl ICJwYW5mcm9zdF9tbXUuaCIKKyNpbmNsdWRlICJwYW5mcm9zdF9yZWdzLmgiCisKKyNkZWZpbmUg Q09VTlRFUlNfUEVSX0JMT0NLCQk2NAorI2RlZmluZSBCWVRFU19QRVJfQ09VTlRFUgkJNAorI2Rl ZmluZSBCTE9DS1NfUEVSX0NPUkVHUk9VUAkJOAorI2RlZmluZSBWNF9TSEFERVJTX1BFUl9DT1JF R1JPVVAJNAorCitzdHJ1Y3QgcGFuZnJvc3RfcGVyZmNudF9qb2JfY3R4IHsKKwlyZWZjb3VudF90 IHJlZmNvdW50OworCXN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2OworCXN0cnVjdCBkbWFf ZmVuY2UgKndhaXRfZmVuY2U7CisJc3RydWN0IGRtYV9mZW5jZSAqZG9uZV9mZW5jZTsKKwlzdHJ1 Y3QgcGFuZnJvc3RfcGVyZm1vbiAqKnBlcmZtb25zOworCXUzMiBwZXJmbW9uX2NvdW50OworfTsK Kworc3RydWN0IHBhbmZyb3N0X3BlcmZjbnQgeworCXN0cnVjdCB3b3JrX3N0cnVjdCBkdW1wd29y azsKKwl1NjQgZmVuY2VfY29udGV4dDsKKwl1NjQgZW1pdF9zZXFubzsKKwlzcGlubG9ja190IGZl bmNlX2xvY2s7CisJc3RydWN0IG11dGV4IGNmZ19sb2NrOworCXUzMiBjdXJfY2ZnW1BBTkZST1NU X05VTV9CTE9DS1NdOworCXN0cnVjdCBwYW5mcm9zdF9nZW1fb2JqZWN0ICpibzsKKwl2b2lkICpi dWY7CisJc3BpbmxvY2tfdCBjdHhfbG9jazsKKwlzdHJ1Y3QgcGFuZnJvc3RfcGVyZmNudF9qb2Jf Y3R4ICpsYXN0X2N0eDsKKwlzdHJ1Y3QgcGFuZnJvc3RfcGVyZmNudF9qb2JfY3R4ICpkdW1wX2N0 eDsKK307CisKK3N0cnVjdCBwYW5mcm9zdF9wZXJmY250X2ZlbmNlIHsKKwlzdHJ1Y3QgZG1hX2Zl bmNlIGJhc2U7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwl1NjQgc2Vxbm87Cit9OworCitz dHJ1Y3QgcGFuZnJvc3RfcGVyZm1vbiB7CisJcmVmY291bnRfdCByZWZjbnQ7CisJYXRvbWljX3Qg YnVzeWNudDsKKwlzdHJ1Y3Qgd2FpdF9xdWV1ZV9oZWFkIHdxOworCXN0cnVjdCBkcm1fcGFuZnJv c3RfYmxvY2tfcGVyZmNvdW50ZXJzIGNvdW50ZXJzW1BBTkZST1NUX05VTV9CTE9DS1NdOworCXUz MiAqdmFsdWVzW1BBTkZST1NUX05VTV9CTE9DS1NdOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1 Y3QgcGFuZnJvc3RfcGVyZmNudF9mZW5jZSAqCit0b19wYW5mcm9zdF9wZXJmY250X2ZlbmNlKHN0 cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQoreworCXJldHVybiBjb250YWluZXJfb2YoZmVuY2UsIHN0 cnVjdCBwYW5mcm9zdF9wZXJmY250X2ZlbmNlLCBiYXNlKTsKK30KKworc3RhdGljIGNvbnN0IGNo YXIgKgorcGFuZnJvc3RfcGVyZmNudF9mZW5jZV9nZXRfZHJpdmVyX25hbWUoc3RydWN0IGRtYV9m ZW5jZSAqZmVuY2UpCit7CisJcmV0dXJuICJwYW5mcm9zdCI7Cit9CisKK3N0YXRpYyBjb25zdCBj aGFyICoKK3BhbmZyb3N0X3BlcmZjbnRfZmVuY2VfZ2V0X3RpbWVsaW5lX25hbWUoc3RydWN0IGRt YV9mZW5jZSAqZmVuY2UpCit7CisJcmV0dXJuICJwYW5mcm9zdC1wZXJmY250IjsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBkbWFfZmVuY2Vfb3BzIHBhbmZyb3N0X3BlcmZjbnRfZmVuY2Vfb3Bz ID0geworCS5nZXRfZHJpdmVyX25hbWUgPSBwYW5mcm9zdF9wZXJmY250X2ZlbmNlX2dldF9kcml2 ZXJfbmFtZSwKKwkuZ2V0X3RpbWVsaW5lX25hbWUgPSBwYW5mcm9zdF9wZXJmY250X2ZlbmNlX2dl dF90aW1lbGluZV9uYW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBkbWFfZmVuY2UgKgorcGFuZnJv c3RfcGVyZmNudF9mZW5jZV9jcmVhdGUoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYpCit7 CisJc3RydWN0IHBhbmZyb3N0X3BlcmZjbnRfZmVuY2UgKmZlbmNlOworCisJZmVuY2UgPSBremFs bG9jKHNpemVvZigqZmVuY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZlbmNlKQorCQlyZXR1cm4g RVJSX1BUUigtRU5PTUVNKTsKKworCWZlbmNlLT5kZXYgPSBwZmRldi0+ZGRldjsKKwlmZW5jZS0+ c2Vxbm8gPSArK3BmZGV2LT5wZXJmY250LT5lbWl0X3NlcW5vOworCWRtYV9mZW5jZV9pbml0KCZm ZW5jZS0+YmFzZSwgJnBhbmZyb3N0X3BlcmZjbnRfZmVuY2Vfb3BzLAorCQkgICAgICAgJnBmZGV2 LT5wZXJmY250LT5mZW5jZV9sb2NrLAorCQkgICAgICAgcGZkZXYtPnBlcmZjbnQtPmZlbmNlX2Nv bnRleHQsIGZlbmNlLT5zZXFubyk7CisKKwlyZXR1cm4gJmZlbmNlLT5iYXNlOworfQorCitzdGF0 aWMgdm9pZCBwYW5mcm9zdF9wZXJmbW9uX2dldChzdHJ1Y3QgcGFuZnJvc3RfcGVyZm1vbiAqcGVy Zm1vbikKK3sKKwlpZiAocGVyZm1vbikKKwkJcmVmY291bnRfaW5jKCZwZXJmbW9uLT5yZWZjbnQp OworfQorCitzdGF0aWMgdm9pZCBwYW5mcm9zdF9wZXJmbW9uX3B1dChzdHJ1Y3QgcGFuZnJvc3Rf cGVyZm1vbiAqcGVyZm1vbikKK3sKKwlpZiAocGVyZm1vbiAmJiByZWZjb3VudF9kZWNfYW5kX3Rl c3QoJnBlcmZtb24tPnJlZmNudCkpIHsKKwkJdW5zaWduZWQgaW50IGk7CisKKwkJZm9yIChpID0g MDsgaSA8IFBBTkZST1NUX05VTV9CTE9DS1M7IGkrKykKKwkJCWtmcmVlKHBlcmZtb24tPnZhbHVl c1tpXSk7CisKKwkJa2ZyZWUocGVyZm1vbik7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHBhbmZy b3N0X3BlcmZtb24gKgorcGFuZnJvc3RfcGVyZmNudF9maW5kX3BlcmZtb24oc3RydWN0IHBhbmZy b3N0X2ZpbGVfcHJpdiAqcGZpbGUsIGludCBpZCkKK3sKKwlzdHJ1Y3QgcGFuZnJvc3RfcGVyZm1v biAqcGVyZm1vbjsKKworCW11dGV4X2xvY2soJnBmaWxlLT5wZXJmbW9uLmxvY2spOworCXBlcmZt b24gPSBpZHJfZmluZCgmcGZpbGUtPnBlcmZtb24uaWRyLCBpZCk7CisJcGFuZnJvc3RfcGVyZm1v bl9nZXQocGVyZm1vbik7CisJbXV0ZXhfdW5sb2NrKCZwZmlsZS0+cGVyZm1vbi5sb2NrKTsKKwor CXJldHVybiBwZXJmbW9uOworfQorCit2b2lkIHBhbmZyb3N0X3BlcmZjbnRfb3BlbihzdHJ1Y3Qg cGFuZnJvc3RfZmlsZV9wcml2ICpwZmlsZSkKK3sKKwltdXRleF9pbml0KCZwZmlsZS0+cGVyZm1v bi5sb2NrKTsKKwlpZHJfaW5pdCgmcGZpbGUtPnBlcmZtb24uaWRyKTsKK30KKworc3RhdGljIGlu dCBwYW5mcm9zdF9wZXJmY250X2lkcl9kZWwoaW50IGlkLCB2b2lkICplbGVtLCB2b2lkICpkYXRh KQoreworCXN0cnVjdCBwYW5mcm9zdF9wZXJmbW9uICpwZXJmbW9uID0gZWxlbTsKKworCXBhbmZy b3N0X3BlcmZtb25fcHV0KHBlcmZtb24pOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcGFuZnJv c3RfcGVyZmNudF9jbG9zZShzdHJ1Y3QgcGFuZnJvc3RfZmlsZV9wcml2ICpwZmlsZSkKK3sKKwlt dXRleF9sb2NrKCZwZmlsZS0+cGVyZm1vbi5sb2NrKTsKKwlpZHJfZm9yX2VhY2goJnBmaWxlLT5w ZXJmbW9uLmlkciwgcGFuZnJvc3RfcGVyZmNudF9pZHJfZGVsLCBOVUxMKTsKKwlpZHJfZGVzdHJv eSgmcGZpbGUtPnBlcmZtb24uaWRyKTsKKwltdXRleF91bmxvY2soJnBmaWxlLT5wZXJmbW9uLmxv Y2spOworfQorCitpbnQgcGFuZnJvc3RfaW9jdGxfZ2V0X3BlcmZjbnRfbGF5b3V0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkJICAgICAgc3RydWN0IGRybV9maWxlICpm aWxlX3ByaXYpCit7CisJc3RydWN0IHBhbmZyb3N0X2ZpbGVfcHJpdiAqcGZpbGUgPSBmaWxlX3By aXYtPmRyaXZlcl9wcml2OworCXN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2ID0gcGZpbGUt PnBmZGV2OworCXN0cnVjdCBkcm1fcGFuZnJvc3RfZ2V0X3BlcmZjbnRfbGF5b3V0ICpsYXlvdXQg PSBkYXRhOworCisJbWVtY3B5KGxheW91dC0+Y291bnRlcnMsIHBmZGV2LT5mZWF0dXJlcy5wZXJm Y250X2xheW91dCwKKwkgICAgICAgc2l6ZW9mKGxheW91dC0+Y291bnRlcnMpKTsKKworCXJldHVy biAwOworfQorCitpbnQgcGFuZnJvc3RfaW9jdGxfY3JlYXRlX3BlcmZtb24oc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 KQoreworCXN0cnVjdCBwYW5mcm9zdF9maWxlX3ByaXYgKnBmaWxlID0gZmlsZV9wcml2LT5kcml2 ZXJfcHJpdjsKKwlzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiA9IHBmaWxlLT5wZmRldjsK KwlzdHJ1Y3QgZHJtX3BhbmZyb3N0X2NyZWF0ZV9wZXJmbW9uICpyZXEgPSBkYXRhOworCXN0cnVj dCBkcm1fcGFuZnJvc3RfYmxvY2tfcGVyZmNvdW50ZXJzICpsYXlvdXQ7CisJc3RydWN0IHBhbmZy b3N0X3BlcmZtb24gKnBlcmZtb247CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJldDsKKworCWlm IChyZXEtPnBhZGRpbmcpCisJCXJldHVybiAtRUlOVkFMOworCisJcGVyZm1vbiA9IGt6YWxsb2Mo c2l6ZW9mKCpwZXJmbW9uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZXJmbW9uKQorCQlyZXR1cm4g LUVOT01FTTsKKworCXJldCA9IC1FTk9NRU07CisJbGF5b3V0ID0gcGZkZXYtPmZlYXR1cmVzLnBl cmZjbnRfbGF5b3V0OworCWZvciAoaSA9IDA7IGkgPCBQQU5GUk9TVF9OVU1fQkxPQ0tTOyBpKysp IHsKKwkJdW5zaWduZWQgaW50IG5jb3VudGVyczsKKworCQkvKiBNYWtlIHN1cmUgdGhlIHJlcXVl c3QgbWF0Y2hlcyB0aGUgYXZhaWxhYmxlIGNvdW50ZXJzLiAqLworCQlpZiAofmxheW91dFtpXS5p bnN0YW5jZXMgJiByZXEtPmNvdW50ZXJzW2ldLmluc3RhbmNlcyB8fAorCQkgICAgfmxheW91dFtp XS5jb3VudGVycyAmIHJlcS0+Y291bnRlcnNbaV0uY291bnRlcnMpCisJCQlnb3RvIGVycl9mcmVl X3BlcmZtb247CisKKwkJbmNvdW50ZXJzID0gaHdlaWdodDY0KHJlcS0+Y291bnRlcnNbaV0uaW5z dGFuY2VzKSAqCisJCQkgICAgaHdlaWdodDY0KHJlcS0+Y291bnRlcnNbaV0uY291bnRlcnMpOwor CQlpZiAoIW5jb3VudGVycykKKwkJCWNvbnRpbnVlOworCisJCXBlcmZtb24tPmNvdW50ZXJzW2ld ID0gcmVxLT5jb3VudGVyc1tpXTsKKwkJcGVyZm1vbi0+dmFsdWVzW2ldID0ga2NhbGxvYyhuY291 bnRlcnMsIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwZXJmbW9uLT52YWx1ZXMp CisJCQlnb3RvIGVycl9mcmVlX3BlcmZtb247CisJfQorCisJcmVmY291bnRfc2V0KCZwZXJmbW9u LT5yZWZjbnQsIDEpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBlcmZtb24tPndxKTsKKworCW11 dGV4X2xvY2soJnBmaWxlLT5wZXJmbW9uLmxvY2spOworCXJldCA9IGlkcl9hbGxvYygmcGZpbGUt PnBlcmZtb24uaWRyLCBwZXJmbW9uLCAxLCBVMzJfTUFYLCBHRlBfS0VSTkVMKTsKKwltdXRleF91 bmxvY2soJnBmaWxlLT5wZXJmbW9uLmxvY2spOworCisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJy X2ZyZWVfcGVyZm1vbjsKKworCXJlcS0+aWQgPSByZXQ7CisJcmV0dXJuIDA7CisKK2Vycl9mcmVl X3BlcmZtb246CisJZm9yIChpID0gMDsgaSA8IFBBTkZST1NUX05VTV9CTE9DS1M7IGkrKykKKwkJ a2ZyZWUocGVyZm1vbi0+dmFsdWVzW2ldKTsKKworCWtmcmVlKHBlcmZtb24pOworCXJldHVybiBy ZXQ7Cit9CisKK2ludCBwYW5mcm9zdF9pb2N0bF9kZXN0cm95X3BlcmZtb24oc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJp dikKK3sKKwlzdHJ1Y3QgcGFuZnJvc3RfZmlsZV9wcml2ICpwZmlsZSA9IGZpbGVfcHJpdi0+ZHJp dmVyX3ByaXY7CisJc3RydWN0IGRybV9wYW5mcm9zdF9kZXN0cm95X3BlcmZtb24gKnJlcSA9IGRh dGE7CisJc3RydWN0IHBhbmZyb3N0X3BlcmZtb24gKnBlcmZtb247CisKKwltdXRleF9sb2NrKCZw ZmlsZS0+cGVyZm1vbi5sb2NrKTsKKwlwZXJmbW9uID0gaWRyX3JlbW92ZSgmcGZpbGUtPnBlcmZt b24uaWRyLCByZXEtPmlkKTsKKwltdXRleF91bmxvY2soJnBmaWxlLT5wZXJmbW9uLmxvY2spOwor CisJaWYgKCFwZXJmbW9uKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBhbmZyb3N0X3BlcmZtb25f cHV0KHBlcmZtb24pOworCXJldHVybiAwOworfQorCitpbnQgcGFuZnJvc3RfaW9jdGxfZ2V0X3Bl cmZtb25fdmFsdWVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkJICAg ICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IHBhbmZyb3N0X2ZpbGVf cHJpdiAqcGZpbGUgPSBmaWxlX3ByaXYtPmRyaXZlcl9wcml2OworCXN0cnVjdCBkcm1fcGFuZnJv c3RfZ2V0X3BlcmZtb25fdmFsdWVzICpyZXEgPSBkYXRhOworCXN0cnVjdCBwYW5mcm9zdF9wZXJm bW9uICpwZXJmbW9uOworCXVuc2lnbmVkIGludCBpOworCWludCByZXQgPSAwOworCisJbXV0ZXhf bG9jaygmcGZpbGUtPnBlcmZtb24ubG9jayk7CisJcGVyZm1vbiA9IGlkcl9maW5kKCZwZmlsZS0+ cGVyZm1vbi5pZHIsIHJlcS0+aWQpOworCXBhbmZyb3N0X3BlcmZtb25fZ2V0KHBlcmZtb24pOwor CW11dGV4X3VubG9jaygmcGZpbGUtPnBlcmZtb24ubG9jayk7CisKKwlpZiAoIXBlcmZtb24pCisJ CXJldHVybiAtRUlOVkFMOworCisJaWYgKCEocmVxLT5mbGFncyAmIERSTV9QQU5GUk9TVF9HRVRf UEVSRk1PTl9WQUxTX0RPTlRfV0FJVCkpCisJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJs ZShwZXJmbW9uLT53cSwKKwkJCQkJICAgICAgICFhdG9taWNfcmVhZCgmcGVyZm1vbi0+YnVzeWNu dCkpOworCWVsc2UgaWYgKGF0b21pY19yZWFkKCZwZXJmbW9uLT5idXN5Y250KSkKKwkJcmV0ID0g LUVCVVNZOworCisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgUEFO RlJPU1RfTlVNX0JMT0NLUzsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBuY291bnRlcnM7CisKKwkJ bmNvdW50ZXJzID0gaHdlaWdodDY0KHBlcmZtb24tPmNvdW50ZXJzW2ldLmluc3RhbmNlcykgKgor CQkJICAgIGh3ZWlnaHQ2NChwZXJmbW9uLT5jb3VudGVyc1tpXS5jb3VudGVycyk7CisJCWlmICgh bmNvdW50ZXJzKQorCQkJY29udGludWU7CisKKwkJaWYgKGNvcHlfdG9fdXNlcih1NjRfdG9fdXNl cl9wdHIocmVxLT52YWx1ZXNfcHRyc1tpXSksCisJCQkJIHBlcmZtb24tPnZhbHVlc1tpXSwKKwkJ CQkgbmNvdW50ZXJzICogc2l6ZW9mKHUzMikpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJl YWs7CisJCX0KKworCQlpZiAocmVxLT5mbGFncyAmIERSTV9QQU5GUk9TVF9HRVRfUEVSRk1PTl9W QUxTX1JFU0VUKQorCQkJbWVtc2V0KHBlcmZtb24tPnZhbHVlc1tpXSwgMCwgbmNvdW50ZXJzICog c2l6ZW9mKHUzMikpOworCX0KKworb3V0OgorCXBhbmZyb3N0X3BlcmZtb25fcHV0KHBlcmZtb24p OworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIDIgam9icyBo YXZlIGV4YWN0bHkgdGhlIHNhbWUgcGVyZmNudCBjb250ZXh0LCBmYWxzZQorICogb3RoZXJ3aXNl LgorICovCitzdGF0aWMgYm9vbCBwYW5mcm9zdF9wZXJmY250X2pvYl9jdHhfY21wKHN0cnVjdCBw YW5mcm9zdF9wZXJmY250X2pvYl9jdHggKmEsCisJCQkJCSBzdHJ1Y3QgcGFuZnJvc3RfcGVyZmNu dF9qb2JfY3R4ICpiKQoreworCXVuc2lnbmVkIGludCBpLCBqOworCisJaWYgKGEtPnBlcmZtb25f Y291bnQgIT0gYi0+cGVyZm1vbl9jb3VudCkKKwkJcmV0dXJuIGZhbHNlOworCisJZm9yIChpID0g MDsgaSA8IGEtPnBlcmZtb25fY291bnQ7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgYi0+cGVy Zm1vbl9jb3VudDsgaisrKSB7CisJCQlpZiAoYS0+cGVyZm1vbnNbaV0gPT0gYi0+cGVyZm1vbnNb al0pCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaiA9PSBiLT5wZXJmbW9uX2NvdW50KQorCQkJ cmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdTMyIGNvdW50 ZXJzX3U2NF90b191MzIodTY0IGluKQoreworCXVuc2lnbmVkIGludCBpOworCXUzMiBvdXQgPSAw OworCisJZm9yIChpID0gMDsgaSA8IDY0OyBpICs9IDQpIHsKKwkJaWYgKEdFTk1BU0soaSArIDMs IGkpICYgaW4pCisJCQlvdXQgfD0gQklUKGkgLyA0KTsKKwl9CisKKwlyZXR1cm4gb3V0OworfQor Cit2b2lkIHBhbmZyb3N0X3BlcmZjbnRfcnVuX2pvYihzdHJ1Y3QgcGFuZnJvc3Rfam9iICpqb2Ip Cit7CisJc3RydWN0IHBhbmZyb3N0X3BlcmZjbnRfam9iX2N0eCAqY3R4ID0gam9iLT5wZXJmY250 X2N0eDsKKwlzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiA9IGpvYi0+cGZkZXY7CisJdTMy IHBlcmZjbnRfZW5bUEFORlJPU1RfTlVNX0JMT0NLU10gPSB7IH07CisJYm9vbCBkaXNhYmxlX3Bl cmZjbnQgPSB0cnVlLCBjb25maWdfY2hhbmdlZCA9IGZhbHNlOworCXVuc2lnbmVkIGludCBpLCBq OworCXU2NCBncHV2YTsKKwl1MzIgY2ZnOworCisJbXV0ZXhfbG9jaygmcGZkZXYtPnBlcmZjbnQt PmNmZ19sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgUEFORlJPU1RfTlVNX0JMT0NLUzsgaSsrKSB7 CisJCWZvciAoaiA9IDA7IGogPCBjdHgtPnBlcmZtb25fY291bnQ7IGorKykgeworCQkJdTY0IGNv dW50ZXJzID0gY3R4LT5wZXJmbW9uc1tqXS0+Y291bnRlcnNbaV0uY291bnRlcnM7CisKKwkJCXBl cmZjbnRfZW5baV0gfD0gY291bnRlcnNfdTY0X3RvX3UzMihjb3VudGVycyk7CisJCX0KKworCQlp ZiAocGVyZmNudF9lbltpXSkKKwkJCWRpc2FibGVfcGVyZmNudCA9IGZhbHNlOworCisJCWlmIChw ZXJmY250X2VuW2ldICE9IHBmZGV2LT5wZXJmY250LT5jdXJfY2ZnW2ldKSB7CisJCQlwZmRldi0+ cGVyZmNudC0+Y3VyX2NmZ1tpXSA9IHBlcmZjbnRfZW5baV07CisJCQljb25maWdfY2hhbmdlZCA9 IHRydWU7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZwZmRldi0+cGVyZmNudC0+Y2ZnX2xvY2sp OworCisJaWYgKCFjb25maWdfY2hhbmdlZCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBbHdheXMg dXNlIGFkZHJlc3Mgc3BhY2UgMCBmb3Igbm93LgorCSAqIEZJWE1FOiB0aGlzIG5lZWRzIHRvIGJl IHVwZGF0ZWQgd2hlbiB3ZSBzdGFydCB1c2luZyBkaWZmZXJlbnQKKwkgKiBhZGRyZXNzIHNwYWNl LgorCSAqLworCWNmZyA9IEdQVV9QRVJGQ05UX0NGR19BUygwKTsKKwlpZiAocGFuZnJvc3RfbW9k ZWxfY21wKHBmZGV2LCAweDEwMDApID49IDApCisJCWNmZyB8PSBHUFVfUEVSRkNOVF9DRkdfU0VU U0VMKDEpOworCisJZ3B1X3dyaXRlKHBmZGV2LCBHUFVfUEVSRkNOVF9DRkcsCisJCSAgY2ZnIHwg R1BVX1BFUkZDTlRfQ0ZHX01PREUoR1BVX1BFUkZDTlRfQ0ZHX01PREVfT0ZGKSk7CisKKwlpZiAo ZGlzYWJsZV9wZXJmY250KQorCQlyZXR1cm47CisKKwlncHVfd3JpdGUocGZkZXYsIEdQVV9QUkZD TlRfSk1fRU4sIHBlcmZjbnRfZW5bUEFORlJPU1RfSk1fQkxPQ0tdKTsKKwlncHVfd3JpdGUocGZk ZXYsIEdQVV9QUkZDTlRfU0hBREVSX0VOLAorCQkgIHBlcmZjbnRfZW5bUEFORlJPU1RfU0hBREVS X0JMT0NLXSk7CisJZ3B1X3dyaXRlKHBmZGV2LCBHUFVfUFJGQ05UX01NVV9MMl9FTiwKKwkJICBw ZXJmY250X2VuW1BBTkZST1NUX01NVV9MMl9CTE9DS10pOworCWdwdXZhID0gcGZkZXYtPnBlcmZj bnQtPmJvLT5ub2RlLnN0YXJ0IDw8IFBBR0VfU0hJRlQ7CisJZ3B1X3dyaXRlKHBmZGV2LCBHUFVf UEVSRkNOVF9CQVNFX0xPLCBncHV2YSk7CisJZ3B1X3dyaXRlKHBmZGV2LCBHUFVfUEVSRkNOVF9C QVNFX0hJLCBncHV2YSA+PiAzMik7CisKKwkvKgorCSAqIER1ZSB0byBQUkxBTS04MTg2IHdlIG5l ZWQgdG8gZGlzYWJsZSB0aGUgVGlsZXIgYmVmb3JlIHdlIGVuYWJsZSBIVworCSAqIGNvdW50ZXJz LgorCSAqLworCWlmIChwYW5mcm9zdF9oYXNfaHdfaXNzdWUocGZkZXYsIEhXX0lTU1VFXzgxODYp KQorCQlncHVfd3JpdGUocGZkZXYsIEdQVV9QUkZDTlRfVElMRVJfRU4sIDApOworCWVsc2UKKwkJ Z3B1X3dyaXRlKHBmZGV2LCBHUFVfUFJGQ05UX1RJTEVSX0VOLAorCQkJICBwZXJmY250X2VuW1BB TkZST1NUX1RJTEVSX0JMT0NLXSk7CisKKwlncHVfd3JpdGUocGZkZXYsIEdQVV9QRVJGQ05UX0NG RywKKwkJICBjZmcgfCBHUFVfUEVSRkNOVF9DRkdfTU9ERShHUFVfUEVSRkNOVF9DRkdfTU9ERV9N QU5VQUwpKTsKKworCWlmIChwYW5mcm9zdF9oYXNfaHdfaXNzdWUocGZkZXYsIEhXX0lTU1VFXzgx ODYpKQorCQlncHVfd3JpdGUocGZkZXYsIEdQVV9QUkZDTlRfVElMRVJfRU4sCisJCQkgIHBlcmZj bnRfZW5bUEFORlJPU1RfVElMRVJfQkxPQ0tdKTsKK30KKworc3RhdGljIHZvaWQKK3BhbmZyb3N0 X3BlcmZjbnRfcmVsZWFzZV9qb2JfY3R4KHN0cnVjdCBwYW5mcm9zdF9wZXJmY250X2pvYl9jdHgg KmN0eCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCVdBUk5fT04ocmVmY291bnRfcmVhZCgmY3R4 LT5yZWZjb3VudCkpOworCWZvciAoaSA9IDA7IGkgPCBjdHgtPnBlcmZtb25fY291bnQ7IGkrKykg eworCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY3R4LT5wZXJmbW9uc1tpXS0+YnVzeWNudCkp CisJCQl3YWtlX3VwKCZjdHgtPnBlcmZtb25zW2ldLT53cSk7CisJCXBhbmZyb3N0X3BlcmZtb25f cHV0KGN0eC0+cGVyZm1vbnNbaV0pOworCX0KKworCWRtYV9mZW5jZV9wdXQoY3R4LT53YWl0X2Zl bmNlKTsKKwlkbWFfZmVuY2VfcHV0KGN0eC0+ZG9uZV9mZW5jZSk7CisJa2ZyZWUoY3R4LT5wZXJm bW9ucyk7CisJa2ZyZWUoY3R4KTsKK30KKworc3RhdGljIHZvaWQgcGFuZnJvc3RfcGVyZmNudF9w dXRfam9iX2N0eChzdHJ1Y3QgcGFuZnJvc3RfcGVyZmNudF9qb2JfY3R4ICpjdHgpCit7CisJaWYg KCFJU19FUlJfT1JfTlVMTChjdHgpICYmIHJlZmNvdW50X2RlY19hbmRfdGVzdCgmY3R4LT5yZWZj b3VudCkpCisJCXBhbmZyb3N0X3BlcmZjbnRfcmVsZWFzZV9qb2JfY3R4KGN0eCk7Cit9CisKK3N0 cnVjdCBwYW5mcm9zdF9wZXJmY250X2pvYl9jdHggKgorcGFuZnJvc3RfcGVyZmNudF9nZXRfam9i X2N0eChzdHJ1Y3QgcGFuZnJvc3RfcGVyZmNudF9qb2JfY3R4ICpjdHgpCit7CisJaWYgKGN0eCkK KwkJcmVmY291bnRfaW5jKCZjdHgtPnJlZmNvdW50KTsKKworCXJldHVybiBjdHg7Cit9CisKK3N0 YXRpYyB2b2lkIHBhbmZyb3N0X3BlcmZjbnRfZHVtcF9kb25lKHN0cnVjdCBwYW5mcm9zdF9wZXJm Y250X2pvYl9jdHggKmN0eCkKK3sKKwlzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldjsKKwl1 bnNpZ25lZCBsb25nIGZsYWdzOworCisJcGZkZXYgPSBjdHgtPnBmZGV2OworCXNwaW5fbG9ja19p cnFzYXZlKCZwZmRldi0+cGVyZmNudC0+Y3R4X2xvY2ssIGZsYWdzKTsKKwlwZmRldi0+cGVyZmNu dC0+ZHVtcF9jdHggPSBOVUxMOworCWlmIChwZmRldi0+cGVyZmNudC0+bGFzdF9jdHggPT0gY3R4 KQorCQlwZmRldi0+cGVyZmNudC0+bGFzdF9jdHggPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJnBmZGV2LT5wZXJmY250LT5jdHhfbG9jaywgZmxhZ3MpOworCisJZG1hX2ZlbmNlX3Np Z25hbChjdHgtPmRvbmVfZmVuY2UpOworCXBhbmZyb3N0X3BlcmZjbnRfcmVsZWFzZV9qb2JfY3R4 KGN0eCk7Cit9CisKK3N0YXRpYyB2b2lkCitwYW5mcm9zdF9wZXJmY250X2dldF9jb3VudGVyX3Zh bHMoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYsCisJCQkJICBlbnVtIGRybV9wYW5mcm9z dF9ibG9ja19pZCBibG9jaywKKwkJCQkgIHVuc2lnbmVkIGludCBpbnN0YW5jZSwgdTMyICp2YWxz KQoreworCXU2NCBzaGFkZXJfcHJlc2VudCA9IHBmZGV2LT5mZWF0dXJlcy5zaGFkZXJfcHJlc2Vu dDsKKwl1bnNpZ25lZCBpbnQgYnVmb2Zmcywgc2hhZGVyaWQsIHNoYWRlcm51bTsKKworCWlmIChw YW5mcm9zdF9oYXNfaHdfZmVhdHVyZShwZmRldiwgSFdfRkVBVFVSRV9WNCkpIHsKKwkJdW5zaWdu ZWQgaW50IG5jb3JlZ3JvdXBzOworCisJCW5jb3JlZ3JvdXBzID0gaHdlaWdodDY0KHBmZGV2LT5m ZWF0dXJlcy5sMl9wcmVzZW50KTsKKworCQlzd2l0Y2ggKGJsb2NrKSB7CisJCWNhc2UgUEFORlJP U1RfU0hBREVSX0JMT0NLOgorCQkJZm9yIChzaGFkZXJpZCA9IDAsIHNoYWRlcm51bSA9IDA7IHNo YWRlcmlkIDwgNjQ7CisJCQkgICAgIHNoYWRlcmlkKyspIHsKKwkJCQlpZiAoIShCSVRfVUxMKHNo YWRlcmlkKSAmIHNoYWRlcl9wcmVzZW50KSkKKwkJCQkJY29udGludWU7CisKKwkJCQlpZiAoc2hh ZGVybnVtID09IGluc3RhbmNlKQorCQkJCQlicmVhazsKKworCQkJCXNoYWRlcm51bSsrOworCQkJ fQorCisJCQlpZiAoV0FSTl9PTihzaGFkZXJpZCA9PSA2NCkpCisJCQkJcmV0dXJuOworCisJCQkv KiA0IHNoYWRlcnMgcGVyIGNvcmUgZ3JvdXAuICovCisJCQlidWZvZmZzID0gKChzaGFkZXJpZCAv IFY0X1NIQURFUlNfUEVSX0NPUkVHUk9VUCkgKgorCQkJCSAgIDIwNDgpICsKKwkJCQkgICgoc2hh ZGVyaWQgJSBWNF9TSEFERVJTX1BFUl9DT1JFR1JPVVApICoKKwkJCQkgICAyNTYpOworCQkJYnJl YWs7CisKKwkJY2FzZSBQQU5GUk9TVF9USUxFUl9CTE9DSzoKKwkJCWlmIChXQVJOX09OKGluc3Rh bmNlID49IG5jb3JlZ3JvdXBzKSkKKwkJCQlyZXR1cm47CisKKwkJCWJ1Zm9mZnMgPSAoaW5zdGFu Y2UgKiAyMDQ4KSArIDEwMjQ7CisJCQlicmVhazsKKwkJY2FzZSBQQU5GUk9TVF9NTVVfTDJfQkxP Q0s6CisJCQlpZiAoV0FSTl9PTihpbnN0YW5jZSA+PSBuY29yZWdyb3VwcykpCisJCQkJcmV0dXJu OworCisJCQlidWZvZmZzID0gKGluc3RhbmNlICogMjA0OCkgKyAxMjgwOworCQkJYnJlYWs7CisJ CWNhc2UgUEFORlJPU1RfSk1fQkxPQ0s6CisJCQlpZiAoV0FSTl9PTihpbnN0YW5jZSkpCisJCQkJ cmV0dXJuOworCQkJYnVmb2ZmcyA9IDE3OTI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVdB Uk5fT04oMSk7CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgeworCQl1bnNpZ25lZCBpbnQgbmwy YywgbmNvcmVzOworCisJCS8qCisJCSAqIFRPRE86IGRlZmluZSBhIG1hY3JvIHRvIGV4dHJhY3Qg dGhlIG51bWJlciBvZiBsMiBjYWNoZXMgZnJvbQorCQkgKiBtZW1fZmVhdHVyZXMuCisJCSAqLwor CQlubDJjID0gKChwZmRldi0+ZmVhdHVyZXMubWVtX2ZlYXR1cmVzID4+IDgpICYgR0VOTUFTSygz LCAwKSkgKyAxOworCisJCS8qCisJCSAqIFRoZSBBUk0gZHJpdmVyIGlzIGdyb3VwaW5nIGNvcmVz IHBlciBjb3JlIGdyb3VwIGFuZCB0aGVuCisJCSAqIG9ubHkgdXNpbmcgdGhlIG51bWJlciBvZiBj b3JlcyBpbiBncm91cCAwIHRvIGNhbGN1bGF0ZSB0aGUKKwkJICogc2l6ZS4gTm90IHN1cmUgd2h5 IHRoaXMgaXMgZG9uZSBsaWtlIHRoYXQsIGJ1dCBJIGd1ZXNzCisJCSAqIHNoYWRlcl9wcmVzZW50 IHdpbGwgb25seSBzaG93IGNvcmVzIGluIHRoZSBmaXJzdCBncm91cAorCQkgKiBhbnl3YXkuCisJ CSAqLworCQluY29yZXMgPSBod2VpZ2h0NjQocGZkZXYtPmZlYXR1cmVzLnNoYWRlcl9wcmVzZW50 KTsKKworCQlzd2l0Y2ggKGJsb2NrKSB7CisJCWNhc2UgUEFORlJPU1RfU0hBREVSX0JMT0NLOgor CQkJZm9yIChzaGFkZXJpZCA9IDAsIHNoYWRlcm51bSA9IDA7IHNoYWRlcmlkIDwgNjQ7CisJCQkg ICAgIHNoYWRlcmlkKyspIHsKKwkJCQlpZiAoIShCSVRfVUxMKHNoYWRlcmlkKSAmIHNoYWRlcl9w cmVzZW50KSkKKwkJCQkJY29udGludWU7CisKKwkJCQlpZiAoc2hhZGVybnVtID09IGluc3RhbmNl KQorCQkJCQlicmVhazsKKworCQkJCXNoYWRlcm51bSsrOworCQkJfQorCisJCQlpZiAoV0FSTl9P TihzaGFkZXJpZCA9PSA2NCkpCisJCQkJcmV0dXJuOworCisJCQkvKiA0IHNoYWRlcnMgcGVyIGNv cmUgZ3JvdXAuICovCisJCQlidWZvZmZzID0gNTEyICsgKChubDJjICsgc2hhZGVyaWQpICogMjU2 KTsKKwkJCWJyZWFrOworCisJCWNhc2UgUEFORlJPU1RfVElMRVJfQkxPQ0s6CisJCQlpZiAoV0FS Tl9PTihpbnN0YW5jZSkpCisJCQkJcmV0dXJuOworCisJCQlidWZvZmZzID0gMjU2OworCQkJYnJl YWs7CisJCWNhc2UgUEFORlJPU1RfTU1VX0wyX0JMT0NLOgorCQkJaWYgKFdBUk5fT04oaW5zdGFu Y2UgPj0gbmwyYykpCisJCQkJcmV0dXJuOworCisJCQlidWZvZmZzID0gNTEyICsgKGluc3RhbmNl ICogMjU2KTsKKwkJCWJyZWFrOworCQljYXNlIFBBTkZST1NUX0pNX0JMT0NLOgorCQkJaWYgKFdB Uk5fT04oaW5zdGFuY2UpKQorCQkJCXJldHVybjsKKwkJCWJ1Zm9mZnMgPSAwOworCQkJYnJlYWs7 CisJCWRlZmF1bHQ6CisJCQlXQVJOX09OKDEpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJbWVt Y3B5KHZhbHMsIHBmZGV2LT5wZXJmY250LT5idWYgKyBidWZvZmZzLCAyNTYpOworfQorCitzdGF0 aWMgdm9pZAorcGFuZnJvc3RfcGVyZm1vbl91cGRfY291bnRlcl92YWxzKHN0cnVjdCBwYW5mcm9z dF9wZXJmbW9uICpwZXJmbW9uLAorCQkJCSAgZW51bSBkcm1fcGFuZnJvc3RfYmxvY2tfaWQgYmxv Y2ssCisJCQkJICB1bnNpZ25lZCBpbnQgaW5zdGFuY2UsIHUzMiAqaW52YWxzKQoreworCXUzMiAq b3V0dmFscyA9IHBlcmZtb24tPnZhbHVlc1tibG9ja107CisJdW5zaWduZWQgaW50IGluaWR4LCBv dXRpZHg7CisKKwlpZiAoV0FSTl9PTihpbnN0YW5jZSA+PSBod2VpZ2h0NjQocGVyZm1vbi0+Y291 bnRlcnNbYmxvY2tdLmluc3RhbmNlcykpKQorCQlyZXR1cm47CisKKwlpZiAoIShwZXJmbW9uLT5j b3VudGVyc1tibG9ja10uaW5zdGFuY2VzICYgQklUX1VMTChpbnN0YW5jZSkpKQorCQlyZXR1cm47 CisKKwlvdXR2YWxzICs9IGluc3RhbmNlICogaHdlaWdodDY0KHBlcmZtb24tPmNvdW50ZXJzW2Js b2NrXS5jb3VudGVycyk7CisJZm9yIChpbmlkeCA9IDAsIG91dGlkeCA9IDA7IGluaWR4IDwgNjQ7 IGluaWR4KyspIHsKKwkJaWYgKCEocGVyZm1vbi0+Y291bnRlcnNbYmxvY2tdLmNvdW50ZXJzICYg QklUX1VMTChpbmlkeCkpKQorCQkJY29udGludWU7CisKKwkJaWYgKFUzMl9NQVggLSBvdXR2YWxz W291dGlkeF0gPCBpbnZhbHNbaW5pZHhdKQorCQkJb3V0dmFsc1tvdXRpZHhdID0gVTMyX01BWDsK KwkJZWxzZQorCQkJb3V0dmFsc1tvdXRpZHhdICs9IGludmFsc1tpbmlkeF07CisJCW91dGlkeCsr OworCX0KK30KKworc3RhdGljIHZvaWQgcGFuZnJvc3RfcGVyZmNudF9kdW1wX3dvcmsoc3RydWN0 IHdvcmtfc3RydWN0ICp3KQoreworCXN0cnVjdCBwYW5mcm9zdF9wZXJmY250ICpwZXJmY250ID0g Y29udGFpbmVyX29mKHcsCisJCQkJCQlzdHJ1Y3QgcGFuZnJvc3RfcGVyZmNudCwKKwkJCQkJCWR1 bXB3b3JrKTsKKwlzdHJ1Y3QgcGFuZnJvc3RfcGVyZmNudF9qb2JfY3R4ICpjdHggPSBwZXJmY250 LT5kdW1wX2N0eDsKKwl1bnNpZ25lZCBpbnQgYmxvY2ssIGluc3RhbmNlLCBwbW9uaWR4LCBudW07 CisKKwlpZiAoIWN0eCkKKwkJcmV0dXJuOworCisJZm9yIChibG9jayA9IDA7IGJsb2NrIDwgUEFO RlJPU1RfTlVNX0JMT0NLUzsgYmxvY2srKykgeworCQlzdHJ1Y3QgcGFuZnJvc3RfcGVyZm1vbiAq cGVyZm1vbjsKKwkJdTMyIHZhbHNbQ09VTlRFUlNfUEVSX0JMT0NLXTsKKwkJdTY0IGluc3RhbmNl cyA9IDA7CisKKwkJZm9yIChwbW9uaWR4ID0gMDsgcG1vbmlkeCA8IGN0eC0+cGVyZm1vbl9jb3Vu dDsgcG1vbmlkeCsrKSB7CisJCQlwZXJmbW9uID0gY3R4LT5wZXJmbW9uc1twbW9uaWR4XTsKKwkJ CWluc3RhbmNlcyB8PSBwZXJmbW9uLT5jb3VudGVyc1tibG9ja10uaW5zdGFuY2VzOworCQl9CisK KwkJZm9yIChpbnN0YW5jZSA9IDAsIG51bSA9IDA7IGluc3RhbmNlIDwgNjQ7IGluc3RhbmNlKysp IHsKKwkJCWlmICghKGluc3RhbmNlcyAmIEJJVF9VTEwoaW5zdGFuY2UpKSkKKwkJCQljb250aW51 ZTsKKworCQkJcGFuZnJvc3RfcGVyZmNudF9nZXRfY291bnRlcl92YWxzKGN0eC0+cGZkZXYsIGJs b2NrLAorCQkJCQkJCSAgaW5zdGFuY2UsIHZhbHMpOworCisJCQlmb3IgKHBtb25pZHggPSAwOyBw bW9uaWR4IDwgY3R4LT5wZXJmbW9uX2NvdW50OworCQkJICAgICBwbW9uaWR4KyspIHsKKwkJCQlw ZXJmbW9uID0gY3R4LT5wZXJmbW9uc1twbW9uaWR4XTsKKwkJCQlwYW5mcm9zdF9wZXJmbW9uX3Vw ZF9jb3VudGVyX3ZhbHMocGVyZm1vbiwKKwkJCQkJCQkJICBibG9jaywKKwkJCQkJCQkJICBudW0s CisJCQkJCQkJCSAgdmFscyk7CisJCQl9CisJCQludW0rKzsKKwkJfQorCX0KKworCXBhbmZyb3N0 X3BlcmZjbnRfZHVtcF9kb25lKGN0eCk7Cit9CisKK3ZvaWQgcGFuZnJvc3RfcGVyZmNudF9jbGVh bl9jYWNoZV9kb25lKHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2KQoreworCXNjaGVkdWxl X3dvcmsoJnBmZGV2LT5wZXJmY250LT5kdW1wd29yayk7Cit9CisKK3ZvaWQgcGFuZnJvc3RfcGVy ZmNudF9zYW1wbGVfZG9uZShzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldikKK3sKKwlncHVf d3JpdGUocGZkZXYsIEdQVV9DTUQsIEdQVV9DTURfQ0xFQU5fQ0FDSEVTKTsKK30KKwordm9pZCBw YW5mcm9zdF9wZXJmY250X2NsZWFuX2pvYl9jdHgoc3RydWN0IHBhbmZyb3N0X2pvYiAqam9iKQor eworCXJldHVybiBwYW5mcm9zdF9wZXJmY250X3B1dF9qb2JfY3R4KGpvYi0+cGVyZmNudF9jdHgp OworfQorCitpbnQgcGFuZnJvc3RfcGVyZmNudF9jcmVhdGVfam9iX2N0eChzdHJ1Y3QgcGFuZnJv c3Rfam9iICpqb2IsCisJCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSAg ICBzdHJ1Y3QgZHJtX3BhbmZyb3N0X3N1Ym1pdCAqYXJncykKK3sKKwlzdHJ1Y3QgcGFuZnJvc3Rf ZGV2aWNlICpwZmRldiA9IGpvYi0+cGZkZXY7CisJc3RydWN0IHBhbmZyb3N0X2ZpbGVfcHJpdiAq cGZpbGUgPSBmaWxlX3ByaXYtPmRyaXZlcl9wcml2OworCXN0cnVjdCBwYW5mcm9zdF9wZXJmY250 X2pvYl9jdHggKmN0eDsKKwl1bnNpZ25lZCBpbnQgaSwgajsKKwl1MzIgKmhhbmRsZXM7CisJaW50 IHJldDsKKworCWN0eCA9IGt6YWxsb2Moc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IWN0eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljdHgtPnBmZGV2ID0gcGZkZXY7CisJcmVmY291 bnRfc2V0KCZjdHgtPnJlZmNvdW50LCAxKTsKKworCWN0eC0+cGVyZm1vbl9jb3VudCA9IGFyZ3Mt PnBlcmZtb25faGFuZGxlX2NvdW50OworCWlmICghY3R4LT5wZXJmbW9uX2NvdW50KSB7CisJCWpv Yi0+cGVyZmNudF9jdHggPSBjdHg7CisJCXJldHVybiAwOworCX0KKworCWhhbmRsZXMgPSBrY2Fs bG9jKGN0eC0+cGVyZm1vbl9jb3VudCwgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOworCWlmICgh aGFuZGxlcykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9wdXRfY3R4OworCX0KKwor CWlmIChjb3B5X2Zyb21fdXNlcihoYW5kbGVzLAorCQkJICAgdTY0X3RvX3VzZXJfcHRyKGFyZ3Mt PnBlcmZtb25faGFuZGxlcyksCisJCQkgICBjdHgtPnBlcmZtb25fY291bnQgKiBzaXplb2YodTMy KSkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJRFJNX0RFQlVHKCJGYWlsZWQgdG8gY29weSBpbiBw ZXJmbW9uIGhhbmRsZXNcbiIpOworCQlnb3RvIGVycl9mcmVlX2hhbmRsZXM7CisJfQorCisJLyog TWFrZSBzdXJlIGVhY2ggcGVyZm1vbiBvbmx5IGFwcGVhcnMgb25jZS4gKi8KKwlmb3IgKGkgPSAw OyBpIDwgY3R4LT5wZXJmbW9uX2NvdW50IC0gMTsgaSsrKSB7CisJCWZvciAoaiA9IGkgKyAxOyBq IDwgY3R4LT5wZXJmbW9uX2NvdW50OyBqKyspIHsKKwkJCWlmIChoYW5kbGVzW2ldID09IGhhbmRs ZXNbal0pIHsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWdvdG8gZXJyX2ZyZWVfaGFuZGxlczsK KwkJCX0KKwkJfQorCX0KKworCWN0eC0+cGVyZm1vbnMgPSBrY2FsbG9jKGN0eC0+cGVyZm1vbl9j b3VudCwgc2l6ZW9mKCpjdHgtPnBlcmZtb25zKSwKKwkJCQlHRlBfS0VSTkVMIHwgX19HRlBfWkVS Tyk7CisJaWYgKCFjdHgtPnBlcmZtb25zKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJy X2ZyZWVfaGFuZGxlczsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY3R4LT5wZXJmbW9uX2NvdW50 OyBpKyspIHsKKwkJY3R4LT5wZXJmbW9uc1tpXSA9IHBhbmZyb3N0X3BlcmZjbnRfZmluZF9wZXJm bW9uKHBmaWxlLAorCQkJCQkJCQkgaGFuZGxlc1tpXSk7CisJCWlmICghY3R4LT5wZXJmbW9uc1tp XSkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZXJyX2ZyZWVfaGFuZGxlczsKKwkJfQor CQlhdG9taWNfaW5jKCZjdHgtPnBlcmZtb25zW2ldLT5idXN5Y250KTsKKwl9CisKKwlqb2ItPnBl cmZjbnRfY3R4ID0gY3R4OworCWtmcmVlKGhhbmRsZXMpOworCXJldHVybiAwOworCitlcnJfZnJl ZV9oYW5kbGVzOgorCWtmcmVlKGhhbmRsZXMpOworCitlcnJfcHV0X2N0eDoKKwlwYW5mcm9zdF9w ZXJmY250X3B1dF9qb2JfY3R4KGN0eCk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBwYW5mcm9z dF9wZXJmY250X2ZpbmlzaF9qb2Ioc3RydWN0IHBhbmZyb3N0X2pvYiAqam9iLCBib29sIHNraXBf ZHVtcCkKK3sKKwlzdHJ1Y3QgcGFuZnJvc3RfcGVyZmNudF9qb2JfY3R4ICpjdHggPSBqb2ItPnBl cmZjbnRfY3R4OworCisJaWYgKFdBUk5fT04oIWN0eCkpCisJCXJldHVybjsKKworCWpvYi0+cGVy ZmNudF9jdHggPSBOVUxMOworCWlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KCZjdHgtPnJlZmNv dW50KSkKKwkJcmV0dXJuOworCisJaWYgKCFjdHgtPnBlcmZtb25fY291bnQgfHwgc2tpcF9kdW1w KSB7CisJCXBhbmZyb3N0X3BlcmZjbnRfZHVtcF9kb25lKGN0eCk7CisJCXJldHVybjsKKwl9CisK KwljdHgtPnBmZGV2LT5wZXJmY250LT5kdW1wX2N0eCA9IGN0eDsKKwlncHVfd3JpdGUoY3R4LT5w ZmRldiwgR1BVX0NNRCwgR1BVX0NNRF9QRVJGQ05UX1NBTVBMRSk7Cit9CisKK3N0YXRpYyBib29s IHBhbmZyb3N0X3BlcmZjbnRfdHJ5X3JldXNlX2xhc3Rfam9iX2N0eChzdHJ1Y3QgcGFuZnJvc3Rf am9iICpqb2IpCit7CisJc3RydWN0IHBhbmZyb3N0X3BlcmZjbnRfam9iX2N0eCAqcHJldl9jdHgs ICpuZXdfY3R4OworCXN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2ID0gam9iLT5wZmRldjsK Kwl1bnNpZ25lZCBpbnQgaTsKKworCW5ld19jdHggPSBqb2ItPnBlcmZjbnRfY3R4OworCXByZXZf Y3R4ID0gcGZkZXYtPnBlcmZjbnQtPmxhc3RfY3R4OworCWlmICghcHJldl9jdHgpCisJCXJldHVy biBmYWxzZTsKKworCWlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKCZwcmV2X2N0eC0+cmVmY291 bnQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIXBhbmZyb3N0X3BlcmZjbnRfam9iX2N0eF9j bXAocHJldl9jdHgsIG5ld19jdHgpKSB7CisJCXJlZmNvdW50X2RlYygmcHJldl9jdHgtPnJlZmNv dW50KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogTWFrZSBzdXJlIHdlIGluY3Jl bWVudCBidXN5Y250LCBhcyBwYW5mcm9zdF9wZXJmY250X3B1dF9qb2JfY3R4KCkKKwkgKiB3aWxs IGRlY3JlbWVudCBpdC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcHJldl9jdHgtPnBlcmZtb25f Y291bnQ7IGkrKykKKwkJYXRvbWljX2luYygmcHJldl9jdHgtPnBlcmZtb25zW2ldLT5idXN5Y250 KTsKKworCXBhbmZyb3N0X3BlcmZjbnRfcHV0X2pvYl9jdHgobmV3X2N0eCk7CisJam9iLT5wZXJm Y250X2N0eCA9IHByZXZfY3R4OworCWpvYi0+cGVyZmNudF9mZW5jZSA9IGRtYV9mZW5jZV9nZXQo cHJldl9jdHgtPndhaXRfZmVuY2UpOworCXJldHVybiB0cnVlOworfQorCitpbnQgcGFuZnJvc3Rf cGVyZmNudF9wdXNoX2pvYihzdHJ1Y3QgcGFuZnJvc3Rfam9iICpqb2IpCit7CisJc3RydWN0IHBh bmZyb3N0X3BlcmZjbnRfam9iX2N0eCAqcHJldl9jdHgsICpuZXdfY3R4OworCXN0cnVjdCBwYW5m cm9zdF9kZXZpY2UgKnBmZGV2ID0gam9iLT5wZmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwor CWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBmZGV2LT5wZXJmY250LT5jdHhf bG9jaywgZmxhZ3MpOworCW5ld19jdHggPSBqb2ItPnBlcmZjbnRfY3R4OworCXByZXZfY3R4ID0g cGZkZXYtPnBlcmZjbnQtPmxhc3RfY3R4OworCS8qCisJICogSW4gb3JkZXIgdG8ga2VlcCB0aGlu Z3MgcmVsYXRpdmVseSBmYXN0IGV2ZW4gd2hlbiBIVyBjb3VudGVycyBhcmUKKwkgKiBlbmFibGVk IHdlIHRyeSB0byBhdm9pZCBoYXZpbmcgdG8gZHVtcCBwZXJmY291bnRlcnMgYXQgdGhlIGVuZCBv ZgorCSAqIGVhY2ggam9iICh3aGljaCBpbXBsaWVzIG1ha2luZyBvdGhlciBqb2JzIHdhaXQgZm9y IHRoaXMgZHVtcCB0bworCSAqIGZpbmlzaCkgd2hlbiB0aGF0J3MgcG9zc2libGUuCisJICogVGhp cyBpcyBvbmx5IGFjY2VwdGFibGUgaWYgYWxsIHF1ZXVlZCBqb2JzIHNoYXJlIHRoZSBzYW1lIHBl cmZjdHgsCisJICogdGhhdCBpcywgdGhleSBoYXZlIHRoZSBzYW1lIGxpc3Qgb2Ygam9icyBhdHRh Y2hlZCB0byB0aGVtLiBJbiB0aGlzCisJICogY29uZGl0aW9uIHdlIGFyZSBndWFyYW50ZWVkIHRo YXQgbm90aGluZyB3aWxsIGluY3JlbWVudCB0aGUgY291bnRlcnMKKwkgKiBiZWhpbmQgb3VyIGJh Y2suCisJICovCisJaWYgKHBhbmZyb3N0X3BlcmZjbnRfdHJ5X3JldXNlX2xhc3Rfam9iX2N0eChq b2IpKQorCQlnb3RvIG91dDsKKworCW5ld19jdHgtPmRvbmVfZmVuY2UgPSBwYW5mcm9zdF9wZXJm Y250X2ZlbmNlX2NyZWF0ZShwZmRldik7CisJaWYgKElTX0VSUihuZXdfY3R4LT5kb25lX2ZlbmNl KSkgeworCQlyZXQgPSBQVFJfRVJSKG5ld19jdHgtPmRvbmVfZmVuY2UpOworCQlnb3RvIG91dDsK Kwl9CisKKwkvKgorCSAqIFRoZSBwcmV2aW91cyBqb2IgaGFzIGEgZGlmZmVyZW50IHBlcmZtb24g Y3R4LCBzbyB3ZSBtdXN0IHdhaXQgZm9yIGl0CisJICogdG8gYmUgZG9uZSBkdW1waW5nIHRoZSBj b3VudGVycyBiZWZvcmUgd2UgY2FuIHNjaGVkdWxlIHRoaXMgbmV3IGpvYiwKKwkgKiBvdGhlcndp c2Ugd2UgbWlnaHQgY29ycnVwdCB0aGUgY291bnRlciB2YWx1ZXMuCisJICovCisJaWYgKHByZXZf Y3R4KQorCQluZXdfY3R4LT53YWl0X2ZlbmNlID0gZG1hX2ZlbmNlX2dldChwcmV2X2N0eC0+ZG9u ZV9mZW5jZSk7CisKKwlqb2ItPnBlcmZjbnRfZmVuY2UgPSBkbWFfZmVuY2VfZ2V0KG5ld19jdHgt PndhaXRfZmVuY2UpOworCXBmZGV2LT5wZXJmY250LT5sYXN0X2N0eCA9IG5ld19jdHg7CisKK291 dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZmRldi0+cGVyZmNudC0+Y3R4X2xvY2ssIGZs YWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcGFuZnJvc3RfcGVyZmNudF9pbml0KHN0cnVj dCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2KQoreworCXN0cnVjdCBwYW5mcm9zdF9wZXJmY250ICpw ZXJmY250OworCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqYm87CisJc2l6ZV90IHNpemU7 CisJdTMyIHN0YXR1czsKKwlpbnQgcmV0OworCisJaWYgKHBhbmZyb3N0X2hhc19od19mZWF0dXJl KHBmZGV2LCBIV19GRUFUVVJFX1Y0KSkgeworCQl1bnNpZ25lZCBpbnQgbmNvcmVncm91cHM7CisK KwkJbmNvcmVncm91cHMgPSBod2VpZ2h0NjQocGZkZXYtPmZlYXR1cmVzLmwyX3ByZXNlbnQpOwor CQlzaXplID0gbmNvcmVncm91cHMgKiBCTE9DS1NfUEVSX0NPUkVHUk9VUCAqCisJCSAgICAgICBD T1VOVEVSU19QRVJfQkxPQ0sgKiBCWVRFU19QRVJfQ09VTlRFUjsKKwl9IGVsc2UgeworCQl1bnNp Z25lZCBpbnQgbmwyYywgbmNvcmVzOworCisJCS8qCisJCSAqIFRPRE86IGRlZmluZSBhIG1hY3Jv IHRvIGV4dHJhY3QgdGhlIG51bWJlciBvZiBsMiBjYWNoZXMgZnJvbQorCQkgKiBtZW1fZmVhdHVy ZXMuCisJCSAqLworCQlubDJjID0gKChwZmRldi0+ZmVhdHVyZXMubWVtX2ZlYXR1cmVzID4+IDgp ICYgR0VOTUFTSygzLCAwKSkgKyAxOworCisJCS8qCisJCSAqIFRoZSBBUk0gZHJpdmVyIGlzIGdy b3VwaW5nIGNvcmVzIHBlciBjb3JlIGdyb3VwIGFuZCB0aGVuCisJCSAqIG9ubHkgdXNpbmcgdGhl IG51bWJlciBvZiBjb3JlcyBpbiBncm91cCAwIHRvIGNhbGN1bGF0ZSB0aGUKKwkJICogc2l6ZS4g Tm90IHN1cmUgd2h5IHRoaXMgaXMgZG9uZSBsaWtlIHRoYXQsIGJ1dCBJIGd1ZXNzCisJCSAqIHNo YWRlcl9wcmVzZW50IHdpbGwgb25seSBzaG93IGNvcmVzIGluIHRoZSBmaXJzdCBncm91cAorCQkg KiBhbnl3YXkuCisJCSAqLworCQluY29yZXMgPSBod2VpZ2h0NjQocGZkZXYtPmZlYXR1cmVzLnNo YWRlcl9wcmVzZW50KTsKKworCQkvKgorCQkgKiBUaGVyZSdzIGFsd2F5cyBvbmUgSk0gYW5kIG9u ZSBUaWxlciBibG9jaywgaGVuY2UgdGhlICcrIDInCisJCSAqIGhlcmUuCisJCSAqLworCQlzaXpl ID0gKG5sMmMgKyBuY29yZXMgKyAyKSAqCisJCSAgICAgICBDT1VOVEVSU19QRVJfQkxPQ0sgKiBC WVRFU19QRVJfQ09VTlRFUjsKKwl9CisKKwlwZXJmY250ID0gZGV2bV9remFsbG9jKHBmZGV2LT5k ZXYsIHNpemVvZigqcGVyZmNudCksIEdGUF9LRVJORUwpOworCWlmICghcGVyZmNudCkKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwlibyA9IGRybV9nZW1fc2htZW1fY3JlYXRlKHBmZGV2LT5kZGV2LCBz aXplKTsKKwlpZiAoSVNfRVJSKGJvKSkKKwkJcmV0dXJuIFBUUl9FUlIoYm8pOworCisJcGVyZmNu dC0+Ym8gPSB0b19wYW5mcm9zdF9ibygmYm8tPmJhc2UpOworCisJLyoKKwkgKiBXZSBhbHdheXMg dXNlIHRoZSBzYW1lIGJ1ZmZlciwgc28gbGV0J3MgbWFwIGl0IG9uY2UgYW5kIGtlZXAgaXQKKwkg KiBtYXBwZWQgdW50aWwgdGhlIGRyaXZlciBpcyB1bmxvYWRlZC4gVGhpcyBtaWdodCBiZSBhIHBy b2JsZW0gaWYKKwkgKiB3ZSBzdGFydCB1c2luZyBkaWZmZXJlbnQgQVMgYW5kIHRoZSBwZXJmY250 IEJPIGlzIG5vdCBtYXBwZWQgYXQKKwkgKiB0aGUgc2FtZSBHUFUgdmlydHVhbCBhZGRyZXNzLgor CSAqLworCXJldCA9IHBhbmZyb3N0X21tdV9tYXAocGVyZmNudC0+Ym8pOworCWlmIChyZXQpCisJ CWdvdG8gZXJyX3B1dF9ibzsKKworCS8qIERpc2FibGUgZXZlcnl0aGluZy4gKi8KKwlncHVfd3Jp dGUocGZkZXYsIEdQVV9QRVJGQ05UX0NGRywKKwkJICBHUFVfUEVSRkNOVF9DRkdfQVMoMCkgfAor CQkgIEdQVV9QRVJGQ05UX0NGR19NT0RFKEdQVV9QRVJGQ05UX0NGR19NT0RFX09GRikgfAorCQkg IChwYW5mcm9zdF9tb2RlbF9jbXAocGZkZXYsIDB4MTAwMCkgPj0gMCA/CisJCSAgIEdQVV9QRVJG Q05UX0NGR19TRVRTRUwoMSkgOiAwKSk7CisJZ3B1X3dyaXRlKHBmZGV2LCBHUFVfUFJGQ05UX0pN X0VOLCAwKTsKKwlncHVfd3JpdGUocGZkZXYsIEdQVV9QUkZDTlRfU0hBREVSX0VOLCAwKTsKKwln cHVfd3JpdGUocGZkZXYsIEdQVV9QUkZDTlRfTU1VX0wyX0VOLCAwKTsKKwlncHVfd3JpdGUocGZk ZXYsIEdQVV9QUkZDTlRfVElMRVJfRU4sIDApOworCisJcGVyZmNudC0+YnVmID0gZHJtX2dlbV92 bWFwKCZiby0+YmFzZSk7CisJaWYgKElTX0VSUihwZXJmY250LT5idWYpKSB7CisJCXJldCA9IFBU Ul9FUlIocGVyZmNudC0+YnVmKTsKKwkJZ290byBlcnJfcHV0X2JvOworCX0KKworCUlOSVRfV09S SygmcGVyZmNudC0+ZHVtcHdvcmssIHBhbmZyb3N0X3BlcmZjbnRfZHVtcF93b3JrKTsKKwltdXRl eF9pbml0KCZwZXJmY250LT5jZmdfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnBlcmZjbnQtPmZl bmNlX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwZXJmY250LT5jdHhfbG9jayk7CisJcGVyZmNu dC0+ZmVuY2VfY29udGV4dCA9IGRtYV9mZW5jZV9jb250ZXh0X2FsbG9jKDEpOworCXBmZGV2LT5w ZXJmY250ID0gcGVyZmNudDsKKworCS8qCisJICogSW52YWxpZGF0ZSB0aGUgY2FjaGUgYW5kIGNs ZWFyIHRoZSBjb3VudGVycyB0byBzdGFydCBmcm9tIGEgZnJlc2gKKwkgKiBzdGF0ZS4KKwkgKi8K KwlncHVfd3JpdGUocGZkZXYsIEdQVV9JTlRfTUFTSywgMCk7CisJZ3B1X3dyaXRlKHBmZGV2LCBH UFVfSU5UX0NMRUFSLCBHUFVfSVJRX0NMRUFOX0NBQ0hFU19DT01QTEVURUQpOworCisJZ3B1X3dy aXRlKHBmZGV2LCBHUFVfQ01ELCBHUFVfQ01EX1BFUkZDTlRfQ0xFQVIpOworCWdwdV93cml0ZShw ZmRldiwgR1BVX0NNRCwgR1BVX0NNRF9DTEVBTl9JTlZfQ0FDSEVTKTsKKwlyZXQgPSByZWFkbF9y ZWxheGVkX3BvbGxfdGltZW91dChwZmRldi0+aW9tZW0gKyBHUFVfSU5UX1JBV1NUQVQsCisJCQkJ CSBzdGF0dXMsCisJCQkJCSBzdGF0dXMgJgorCQkJCQkgR1BVX0lSUV9DTEVBTl9DQUNIRVNfQ09N UExFVEVELAorCQkJCQkgMTAwLCAxMDAwMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZ2VtX3Z1 bm1hcDsKKworCWdwdV93cml0ZShwZmRldiwgR1BVX0lOVF9NQVNLLCBHUFVfSVJRX01BU0tfQUxM KTsKKworCXJldHVybiAwOworCitlcnJfZ2VtX3Z1bm1hcDoKKwlkcm1fZ2VtX3Z1bm1hcCgmcGZk ZXYtPnBlcmZjbnQtPmJvLT5iYXNlLmJhc2UsIHBmZGV2LT5wZXJmY250LT5idWYpOworCitlcnJf cHV0X2JvOgorCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZCgmYm8tPmJhc2UpOworCXJldHVy biByZXQ7Cit9CisKK3ZvaWQgcGFuZnJvc3RfcGVyZmNudF9maW5pKHN0cnVjdCBwYW5mcm9zdF9k ZXZpY2UgKnBmZGV2KQoreworCWRybV9nZW1fdnVubWFwKCZwZmRldi0+cGVyZmNudC0+Ym8tPmJh c2UuYmFzZSwgcGZkZXYtPnBlcmZjbnQtPmJ1Zik7CisJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9j a2VkKCZwZmRldi0+cGVyZmNudC0+Ym8tPmJhc2UuYmFzZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfcGVyZmNudC5oIGIvZHJpdmVycy9ncHUvZHJt L3BhbmZyb3N0L3BhbmZyb3N0X3BlcmZjbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjdjYmZlYjA3MmFhMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9wZXJmY250LmgKQEAgLTAsMCArMSw1NCBAQAorLyogU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qIENvcHlyaWdodCAyMDE5IENvbGxh Ym9yYSBMdGQgKi8KKyNpZm5kZWYgX19QQU5GUk9TVF9QRVJGQ05UX0hfXworI2RlZmluZSBfX1BB TkZST1NUX1BFUkZDTlRfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworc3RydWN0 IHBhbmZyb3N0X3BlcmZjbnRfam9iX2N0eDsKKworI2RlZmluZSBQRVJGQ05UKF9zaGFkZXIsIF90 aWxlciwgX21tdV9sMiwgX2ptKQkJXAorCXsgX3NoYWRlciwgX3RpbGVyLCBfbW11X2wyLCBfam0g fQorI2RlZmluZSBOT19QRVJGQ05UICAgICAgUEVSRkNOVCgwLCAwLCAwLCAwKQorCisvKiBGSVhN RTogRGVjbGFyZSBjb3VudGVycyBmb3IgYWxsIG1vZGVscyAqLworI2RlZmluZSBod19wZXJmY250 X3Q2MDAJTk9fUEVSRkNOVAorI2RlZmluZSBod19wZXJmY250X3Q2MjAJTk9fUEVSRkNOVAorI2Rl ZmluZSBod19wZXJmY250X3Q3MjAJTk9fUEVSRkNOVAorI2RlZmluZSBod19wZXJmY250X3Q3NjAJ Tk9fUEVSRkNOVAorI2RlZmluZSBod19wZXJmY250X3Q4MjAJTk9fUEVSRkNOVAorI2RlZmluZSBo d19wZXJmY250X3Q4MzAJTk9fUEVSRkNOVAorI2RlZmluZSBod19wZXJmY250X3Q4NjAJTk9fUEVS RkNOVAorI2RlZmluZSBod19wZXJmY250X3Q4ODAJTk9fUEVSRkNOVAorI2RlZmluZSBod19wZXJm Y250X2c3NglOT19QRVJGQ05UCisjZGVmaW5lIGh3X3BlcmZjbnRfZzcxCU5PX1BFUkZDTlQKKyNk ZWZpbmUgaHdfcGVyZmNudF9nNzIJTk9fUEVSRkNOVAorI2RlZmluZSBod19wZXJmY250X2c1MQlO T19QRVJGQ05UCisjZGVmaW5lIGh3X3BlcmZjbnRfZzUyCU5PX1BFUkZDTlQKKyNkZWZpbmUgaHdf cGVyZmNudF9nMzEJTk9fUEVSRkNOVAorCit2b2lkIHBhbmZyb3N0X3BlcmZjbnRfc2FtcGxlX2Rv bmUoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYpOwordm9pZCBwYW5mcm9zdF9wZXJmY250 X2NsZWFuX2NhY2hlX2RvbmUoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYpOworaW50IHBh bmZyb3N0X3BlcmZjbnRfcHVzaF9qb2Ioc3RydWN0IHBhbmZyb3N0X2pvYiAqam9iKTsKK3ZvaWQg cGFuZnJvc3RfcGVyZmNudF9ydW5fam9iKHN0cnVjdCBwYW5mcm9zdF9qb2IgKmpvYik7Cit2b2lk IHBhbmZyb3N0X3BlcmZjbnRfZmluaXNoX2pvYihzdHJ1Y3QgcGFuZnJvc3Rfam9iICpqb2IsCisJ CQkJIGJvb2wgc2tpcF9kdW1wKTsKK3ZvaWQgcGFuZnJvc3RfcGVyZmNudF9jbGVhbl9qb2JfY3R4 KHN0cnVjdCBwYW5mcm9zdF9qb2IgKmpvYik7CitpbnQgcGFuZnJvc3RfcGVyZmNudF9jcmVhdGVf am9iX2N0eChzdHJ1Y3QgcGFuZnJvc3Rfam9iICpqb2IsCisJCQkJICAgIHN0cnVjdCBkcm1fZmls ZSAqZmlsZV9wcml2LAorCQkJCSAgICBzdHJ1Y3QgZHJtX3BhbmZyb3N0X3N1Ym1pdCAqYXJncyk7 Cit2b2lkIHBhbmZyb3N0X3BlcmZjbnRfb3BlbihzdHJ1Y3QgcGFuZnJvc3RfZmlsZV9wcml2ICpw ZmlsZSk7Cit2b2lkIHBhbmZyb3N0X3BlcmZjbnRfY2xvc2Uoc3RydWN0IHBhbmZyb3N0X2ZpbGVf cHJpdiAqcGZpbGUpOworaW50IHBhbmZyb3N0X3BlcmZjbnRfaW5pdChzdHJ1Y3QgcGFuZnJvc3Rf ZGV2aWNlICpwZmRldik7Cit2b2lkIHBhbmZyb3N0X3BlcmZjbnRfZmluaShzdHJ1Y3QgcGFuZnJv c3RfZGV2aWNlICpwZmRldik7CisKK2ludCBwYW5mcm9zdF9pb2N0bF9nZXRfcGVyZmNudF9sYXlv dXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQkgICAgICBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgcGFuZnJvc3RfaW9jdGxfY3JlYXRlX3BlcmZtb24o c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQkgIHN0cnVjdCBkcm1fZmls ZSAqZmlsZV9wcml2KTsKK2ludCBwYW5mcm9zdF9pb2N0bF9kZXN0cm95X3BlcmZtb24oc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGVfcHJpdik7CitpbnQgcGFuZnJvc3RfaW9jdGxfZ2V0X3BlcmZtb25fdmFsdWVzKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkJICAgICAgc3RydWN0IGRybV9maWxlICpm aWxlX3ByaXYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9z dC9wYW5mcm9zdF9yZWdzLmggYi9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfcmVn cy5oCmluZGV4IDQyZDA4ODYwZmQ3Ni4uZWEzOGFjNjA1ODFjIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfcmVncy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9w YW5mcm9zdC9wYW5mcm9zdF9yZWdzLmgKQEAgLTQ0LDEyICs0NCwzMSBAQAogCSBHUFVfSVJRX01V TFRJUExFX0ZBVUxUKQogI2RlZmluZSBHUFVfQ01ECQkJCTB4MzAKICNkZWZpbmUgICBHUFVfQ01E X1NPRlRfUkVTRVQJCTB4MDEKKyNkZWZpbmUgICBHUFVfQ01EX1BFUkZDTlRfQ0xFQVIJCTB4MDMK KyNkZWZpbmUgICBHUFVfQ01EX1BFUkZDTlRfU0FNUExFCTB4MDQKKyNkZWZpbmUgICBHUFVfQ01E X0NMRUFOX0NBQ0hFUwkJMHgwNworI2RlZmluZSAgIEdQVV9DTURfQ0xFQU5fSU5WX0NBQ0hFUwkw eDA4CiAjZGVmaW5lIEdQVV9TVEFUVVMJCQkweDM0CisjZGVmaW5lICAgR1BVX1NUQVRVU19QUkZD TlRfQUNUSVZFCUJJVCgyKQogI2RlZmluZSBHUFVfTEFURVNUX0ZMVVNIX0lECQkweDM4CiAjZGVm aW5lIEdQVV9GQVVMVF9TVEFUVVMJCTB4M0MKICNkZWZpbmUgR1BVX0ZBVUxUX0FERFJFU1NfTE8J CTB4NDAKICNkZWZpbmUgR1BVX0ZBVUxUX0FERFJFU1NfSEkJCTB4NDQKIAorI2RlZmluZSBHUFVf UEVSRkNOVF9CQVNFX0xPCQkweDYwCisjZGVmaW5lIEdQVV9QRVJGQ05UX0JBU0VfSEkJCTB4NjQK KyNkZWZpbmUgR1BVX1BFUkZDTlRfQ0ZHCQkJMHg2OAorI2RlZmluZSAgIEdQVV9QRVJGQ05UX0NG R19NT0RFKHgpCSh4KQorI2RlZmluZSAgIEdQVV9QRVJGQ05UX0NGR19NT0RFX09GRgkwCisjZGVm aW5lICAgR1BVX1BFUkZDTlRfQ0ZHX01PREVfTUFOVUFMCTEKKyNkZWZpbmUgICBHUFVfUEVSRkNO VF9DRkdfTU9ERV9USUxFCTIKKyNkZWZpbmUgICBHUFVfUEVSRkNOVF9DRkdfQVMoeCkJCSgoeCkg PDwgNCkKKyNkZWZpbmUgICBHUFVfUEVSRkNOVF9DRkdfU0VUU0VMKHgpCSgoeCkgPDwgOCkKKyNk ZWZpbmUgR1BVX1BSRkNOVF9KTV9FTgkJMHg2YworI2RlZmluZSBHUFVfUFJGQ05UX1NIQURFUl9F TgkJMHg3MAorI2RlZmluZSBHUFVfUFJGQ05UX1RJTEVSX0VOCQkweDc0CisjZGVmaW5lIEdQVV9Q UkZDTlRfTU1VX0wyX0VOCQkweDdjCisKICNkZWZpbmUgR1BVX1RIUkVBRF9NQVhfVEhSRUFEUwkJ MHgwQTAJLyogKFJPKSBNYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIHBlciBjb3JlICovCiAjZGVm aW5lIEdQVV9USFJFQURfTUFYX1dPUktHUk9VUF9TSVpFCTB4MEE0CS8qIChSTykgTWF4aW11bSB3 b3JrZ3JvdXAgc2l6ZSAqLwogI2RlZmluZSBHUFVfVEhSRUFEX01BWF9CQVJSSUVSX1NJWkUJMHgw QTgJLyogKFJPKSBNYXhpbXVtIHRocmVhZHMgd2FpdGluZyBhdCBhIGJhcnJpZXIgKi8KZGlmZiAt LWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vcGFuZnJvc3RfZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJt L3BhbmZyb3N0X2RybS5oCmluZGV4IDUwOGI5NjIxZDlkYi4uZTA5YjM1YmY2MDM1IDEwMDY0NAot LS0gYS9pbmNsdWRlL3VhcGkvZHJtL3BhbmZyb3N0X2RybS5oCisrKyBiL2luY2x1ZGUvdWFwaS9k cm0vcGFuZnJvc3RfZHJtLmgKQEAgLTE4LDYgKzE4LDEwIEBAIGV4dGVybiAiQyIgewogI2RlZmlu ZSBEUk1fUEFORlJPU1RfTU1BUF9CTwkJCTB4MDMKICNkZWZpbmUgRFJNX1BBTkZST1NUX0dFVF9Q QVJBTQkJCTB4MDQKICNkZWZpbmUgRFJNX1BBTkZST1NUX0dFVF9CT19PRkZTRVQJCTB4MDUKKyNk ZWZpbmUgRFJNX1BBTkZST1NUX0dFVF9QRVJGQ05UX0xBWU9VVAkJMHgwNgorI2RlZmluZSBEUk1f UEFORlJPU1RfQ1JFQVRFX1BFUkZNT04JCTB4MDcKKyNkZWZpbmUgRFJNX1BBTkZST1NUX0RFU1RS T1lfUEVSRk1PTgkJMHgwOAorI2RlZmluZSBEUk1fUEFORlJPU1RfR0VUX1BFUkZNT05fVkFMVUVT CQkweDA5CiAKICNkZWZpbmUgRFJNX0lPQ1RMX1BBTkZST1NUX1NVQk1JVAkJRFJNX0lPVyhEUk1f Q09NTUFORF9CQVNFICsgRFJNX1BBTkZST1NUX1NVQk1JVCwgc3RydWN0IGRybV9wYW5mcm9zdF9z dWJtaXQpCiAjZGVmaW5lIERSTV9JT0NUTF9QQU5GUk9TVF9XQUlUX0JPCQlEUk1fSU9XKERSTV9D T01NQU5EX0JBU0UgKyBEUk1fUEFORlJPU1RfV0FJVF9CTywgc3RydWN0IGRybV9wYW5mcm9zdF93 YWl0X2JvKQpAQCAtMjUsNiArMjksMTAgQEAgZXh0ZXJuICJDIiB7CiAjZGVmaW5lIERSTV9JT0NU TF9QQU5GUk9TVF9NTUFQX0JPCQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1BBTkZS T1NUX01NQVBfQk8sIHN0cnVjdCBkcm1fcGFuZnJvc3RfbW1hcF9ibykKICNkZWZpbmUgRFJNX0lP Q1RMX1BBTkZST1NUX0dFVF9QQVJBTQkJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9Q QU5GUk9TVF9HRVRfUEFSQU0sIHN0cnVjdCBkcm1fcGFuZnJvc3RfZ2V0X3BhcmFtKQogI2RlZmlu ZSBEUk1fSU9DVExfUEFORlJPU1RfR0VUX0JPX09GRlNFVAlEUk1fSU9XUihEUk1fQ09NTUFORF9C QVNFICsgRFJNX1BBTkZST1NUX0dFVF9CT19PRkZTRVQsIHN0cnVjdCBkcm1fcGFuZnJvc3RfZ2V0 X2JvX29mZnNldCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1BBTkZST1NUX0dFVF9QRVJGQ05UX0xBWU9V VAlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1BBTkZST1NUX0dFVF9QRVJGQ05UX0xB WU9VVCwgc3RydWN0IGRybV9wYW5mcm9zdF9nZXRfcGVyZmNudF9sYXlvdXQpCisjZGVmaW5lIERS TV9JT0NUTF9QQU5GUk9TVF9DUkVBVEVfUEVSRk1PTglEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNF ICsgRFJNX1BBTkZST1NUX0NSRUFURV9QRVJGTU9OLCBzdHJ1Y3QgZHJtX3BhbmZyb3N0X2NyZWF0 ZV9wZXJmbW9uKQorI2RlZmluZSBEUk1fSU9DVExfUEFORlJPU1RfREVTVFJPWV9QRVJGTU9OCURS TV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fUEFORlJPU1RfREVTVFJPWV9QRVJGTU9OLCBz dHJ1Y3QgZHJtX3BhbmZyb3N0X2Rlc3Ryb3lfcGVyZm1vbikKKyNkZWZpbmUgRFJNX0lPQ1RMX1BB TkZST1NUX0dFVF9QRVJGTU9OX1ZBTFVFUwlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJN X1BBTkZST1NUX0dFVF9QRVJGTU9OX1ZBTFVFUywgc3RydWN0IGRybV9wYW5mcm9zdF9nZXRfcGVy Zm1vbl92YWx1ZXMpCiAKICNkZWZpbmUgUEFORlJPU1RfSkRfUkVRX0ZTICgxIDw8IDApCiAvKioK QEAgLTU1LDYgKzYzLDE1IEBAIHN0cnVjdCBkcm1fcGFuZnJvc3Rfc3VibWl0IHsKIAogCS8qKiBB IGNvbWJpbmF0aW9uIG9mIFBBTkZST1NUX0pEX1JFUV8qICovCiAJX191MzIgcmVxdWlyZW1lbnRz OworCisJLyoqIFBvaW50ZXIgdG8gYSB1MzIgYXJyYXkgb2YgcGVyZm1vbnMgdGhhdCBzaG91bGQg YmUgYXR0YWNoZWQgdG8gdGhlIGpvYi4gKi8KKwlfX3U2NCBwZXJmbW9uX2hhbmRsZXM7CisKKwkv KiogTnVtYmVyIG9mIHBlcmZtb24gaGFuZGxlcyBwYXNzZWQgaW4gKHNpemUgaXMgdGhhdCB0aW1l cyA0KS4gKi8KKwlfX3UzMiBwZXJmbW9uX2hhbmRsZV9jb3VudDsKKworCS8qKiBVbnVzZWQgZmll bGQsIHNob3VsZCBiZSBzZXQgdG8gMC4gKi8KKwlfX3UzMiBwYWRkaW5nOwogfTsKIAogLyoqCkBA IC0xMzMsNiArMTUwLDExMSBAQCBzdHJ1Y3QgZHJtX3BhbmZyb3N0X2dldF9ib19vZmZzZXQgewog CV9fdTY0IG9mZnNldDsKIH07CiAKKy8qKgorICogUGFuZnJvc3QgSFcgYmxvY2sgaWRzIHVzZWQg dG8gZ3JvdXAgSFcgY291bnRlcnMuIFRoZXJlIG1pZ2h0IGJlIHNldmVyYWwKKyAqIHNoYWRlciwg dGlsZXIgYW5kIE1NVS9MMiBibG9ja3MgaW4gYSBnaXZlbiBHUFUuIEhvdyBtYW55IG9mIHRoZW0g YXJlCisgKiBhdmFpbGFibGUgaXMgZXhwb3NlZCB0aHJvdWdoIHRoZSBpbnN0YW5jZXMgZmllbGQg b2YKKyAqIGRybV9wYW5mcm9zdF9ibG9ja19wZXJmY291bnRlcnMuCisgKi8KK2VudW0gZHJtX3Bh bmZyb3N0X2Jsb2NrX2lkIHsKKwlQQU5GUk9TVF9TSEFERVJfQkxPQ0ssCisJUEFORlJPU1RfVElM RVJfQkxPQ0ssCisJUEFORlJPU1RfTU1VX0wyX0JMT0NLLAorCVBBTkZST1NUX0pNX0JMT0NLLAor CVBBTkZST1NUX05VTV9CTE9DS1MsCit9OworCitzdHJ1Y3QgZHJtX3BhbmZyb3N0X2Jsb2NrX3Bl cmZjb3VudGVycyB7CisJLyoKKwkgKiBGb3IgRFJNX0lPQ1RMX1BBTkZST1NUX0dFVF9QRVJGQ05U X0xBWU9VVCwgZW5jb2RlcyB0aGUgYXZhaWxhYmxlCisJICogaW5zdGFuY2VzIGZvciBhIHNwZWNp ZmljIGdpdmVuIGJsb2NrIHR5cGUuCisJICogRm9yIERSTV9JT0NUTF9QQU5GUk9TVF9DUkVBVEVf UEVSRk1PTiwgZW5jb2RlcyB0aGUgaW5zdGFuY2VzIHRoZQorCSAqIHVzZXIgd2FudHMgdG8gbW9u aXRvci4KKwkgKiBOb3RlOiB0aGUgYml0bWFwIG1pZ2h0IGJlIHNwYXJzZS4KKwkgKi8KKwlfX3U2 NCBpbnN0YW5jZXM7CisKKwkvKgorCSAqIEZvciBEUk1fSU9DVExfUEFORlJPU1RfR0VUX1BFUkZD TlRfTEFZT1VULCBlbmNvZGVzIHRoZSBhdmFpbGFibGUKKwkgKiBjb3VudGVycyBhdHRhY2hlZCB0 byBhIHNwZWNpZmljIGJsb2NrIHR5cGUuCisJICogRm9yIERSTV9JT0NUTF9QQU5GUk9TVF9DUkVB VEVfUEVSRk1PTiwgZW5jb2RlcyB0aGUgY291bnRlcnMgdGhlIHVzZXIKKwkgKiB3YW50cyB0byBt b25pdG9yLgorCSAqIE5vdGU6IHRoZSBiaXRtYXAgbWlnaHQgYmUgc3BhcnNlLgorCSAqLworCV9f dTY0IGNvdW50ZXJzOworfTsKKworLyoqCisgKiBVc2VkIHRvIHJldHJpZXZlIGF2YWlsYWJsZSBI VyBjb3VudGVycy4KKyAqLworc3RydWN0IGRybV9wYW5mcm9zdF9nZXRfcGVyZmNudF9sYXlvdXQg eworCXN0cnVjdCBkcm1fcGFuZnJvc3RfYmxvY2tfcGVyZmNvdW50ZXJzIGNvdW50ZXJzW1BBTkZS T1NUX05VTV9CTE9DS1NdOworfTsKKworLyoqCisgKiBVc2VkIHRvIGNyZWF0ZSBhIHBlcmZvcm1h bmNlIG1vbml0b3IuIEVhY2ggcGVyZm1vbmFuY2UgbW9uaXRvciBpcyBhc3NpZ25lZCBhbgorICog SUQgdGhhdCBjYW4gbGF0ZXIgYmUgcGFzc2VkIHdoZW4gc3VibWl0dGluZyBhIGpvYiB0byBjYXB0 dXJlIGhhcmR3YXJlIGNvdW50ZXIKKyAqIHZhbHVlcyAoYW5kIHRodXMgY291bnQgdGhpbmdzIHJl bGF0ZWQgdG8gdGhpcyBzcGVjaWZpYyBqb2IpLgorICogUGVyZm9ybWFuY2UgbW9uaXRvcnMgYXJl IGF0dGFjaGVkIHRvIHRoZSBHUFUgZmlsZSBkZXNjcmlwdG9yIGFuZCBJRHMgYXJlCisgKiB1bmlx dWUgd2l0aGluIHRoaXMgY29udGV4dCwgbm90IGFjcm9zcyBhbGwgR1BVIHVzZXJzLgorICogVGhp cyBpbXBsaWVzIHRoYXQKKyAqIC0gcGVyZm1vbnMgYXJlIGF1dG9tYXRpY2FsbHkgcmVsZWFzZWQg d2hlbiB0aGUgRkQgaXMgY2xvc2VkCisgKiAtIHBlcmZtb25zIGNhbid0IGJlIHNoYXJlZCBhY3Jv c3MgR1BVIGNvbnRleHQKKyAqLworc3RydWN0IGRybV9wYW5mcm9zdF9jcmVhdGVfcGVyZm1vbiB7 CisJLyogSW5wdXQgRmllbGRzLiAqLworCS8qIExpc3QgYWxsIEhXIGNvdW50ZXJzIHRoaXMgcGVy Zm9ybWFuY2UgbW9uaXRvciBzaG91bGQgdHJhY2suICovCisJc3RydWN0IGRybV9wYW5mcm9zdF9i bG9ja19wZXJmY291bnRlcnMgY291bnRlcnNbUEFORlJPU1RfTlVNX0JMT0NLU107CisKKwkvKiBP dXRwdXQgZmllbGRzLiAqLworCS8qIElEIG9mIHRoZSBuZXdseSBjcmVhdGVkIHBlcmZtb24uICov CisJX191MzIgaWQ7CisKKwkvKiBQYWRkaW5nOiBtdXN0IGJlIHNldCB0byAwLiAqLworCV9fdTMy IHBhZGRpbmc7Cit9OworCisvKioKKyAqIERlc3Ryb3kgYW4gZXhpc3RpbmcgcGVyZm9ybWFuY2Ug bW9uaXRvci4KKyAqLworc3RydWN0IGRybV9wYW5mcm9zdF9kZXN0cm95X3BlcmZtb24geworCS8q CisJICogSUQgb2YgdGhlIHBlcmZtb24gdG8gZGVzdHJveSAodGhlIG9uZSByZXR1cm5lZCBieQor CSAqIERSTV9JT0NUTF9QQU5GUk9TVF9DUkVBVEVfUEVSRk1PTikKKwkgKi8KKwlfX3UzMiBpZDsK K307CisKKy8qCisgKiBEb24ndCB3YWl0IHdoZW4gdHJ5aW5nIHRvIGdldCBwZXJmbW9uIHZhbHVl cy4gSWYgdGhlIHBlcmZtb24gaXMgc3RpbGwgYWN0aXZlCisgKiAoc3RpbGwgYXR0YWNoZWQgdG8g YSBxdWV1ZWQgb3IgcnVubmluZyBqb2IpLCBFQlVTWSBpcyByZXR1cm5lZC4KKyAqLworI2RlZmlu ZSBEUk1fUEFORlJPU1RfR0VUX1BFUkZNT05fVkFMU19ET05UX1dBSVQJCTB4MQorCisvKiBSZXNl dCBhbGwgcGVyZm1vbiB2YWx1ZXMgdG8gemVybyBhZnRlciByZWFkaW5nIHRoZW0uICovCisjZGVm aW5lIERSTV9QQU5GUk9TVF9HRVRfUEVSRk1PTl9WQUxTX1JFU0VUCQkweDIKKworLyoqCisgKiBV c2VkIHRvIHF1ZXJ5IHZhbHVlcyBjb2xsZWN0ZWQgYnkgYSBwZXJmb3JtYW5jZSBtb25pdG9yLgor ICovCitzdHJ1Y3QgZHJtX3BhbmZyb3N0X2dldF9wZXJmbW9uX3ZhbHVlcyB7CisJLyogSUQgb2Yg dGhlIHBlcmZtb24gdG8gcXVlcnkgdmFsdWUgb24uICovCisJX191MzIgaWQ7CisKKwkvKiBTZWUg RFJNX1BBTkZST1NUX0dFVF9QRVJGTU9OX1ZBTFNfWFhYIGZsYWdzICovCisJX191MzIgZmxhZ3M7 CisKKwkvKgorCSAqIEFuIGFycmF5IG9mIHUzMiB1c2Vyc3BhY2UgcG9pbnRlcnMgd2hlcmUgY291 bnRlcnMgdmFsdWVzIHdpbGwgYmUKKwkgKiBjb3BpZWQgdG9vLgorCSAqIFRoZSBhcnJheSBzaXpl cyBkZXBlbmQgb24gdGhlIGNvdW50ZXJzL2luc3RhbmNlcyBhY3RpdmF0ZWQgYXQKKwkgKiBwZXJm bW9uIGNyZWF0aW9uIHRpbWU6IGh3ZWlnaHQ2NChpbnN0YW5jZXMpICogaHdlaWdodDY0KGNvdW50 ZXJzKS4KKwkgKiBOb3RlIHRoYXQgc29tZSBlbnRyaWVzIGluIHZhbHVlc19wdHJzW10gbWlnaHQg YmUgTlVMTCBpZiBubyBjb3VudGVycworCSAqIG9uIGEgc3BlY2lmaWMgYmxvY2sgd2VyZSBhY3Rp dmF0ZWQuCisJICovCisJX191NjQgdmFsdWVzX3B0cnNbUEFORlJPU1RfTlVNX0JMT0NLU107Cit9 OworCiAjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKIH0KICNlbmRpZgotLSAKMi4yMC4xCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFp bGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=