From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhi Wang Subject: [RFC 17/29] gvt: Xen hypervisor GVT-g MPT module Date: Thu, 28 Jan 2016 18:21:39 +0800 Message-ID: <1453976511-27322-18-git-send-email-zhi.a.wang@intel.com> References: <1453976511-27322-1-git-send-email-zhi.a.wang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 60CAE6E7F9 for ; Thu, 28 Jan 2016 02:24:49 -0800 (PST) In-Reply-To: <1453976511-27322-1-git-send-email-zhi.a.wang@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, igvt-g@lists.01.org Cc: daniel.vetter@ffwll.ch, david.j.cowperthwaite@intel.com List-Id: intel-gfx@lists.freedesktop.org VGhpcyBpcyB0aGUgeGVuIGh5cGVydmlzb3IgTVBUIG1vZHVsZSB3aGljaCBsZXQgR1ZULWcgYmUg YWJsZSB0byBydW4gdW5kZXIKWGVuIGh5cGVydmlzb3IuCgpTaWduZWQtb2ZmLWJ5OiBaaGkgV2Fu ZyA8emhpLmEud2FuZ0BpbnRlbC5jb20+Ci0tLQogYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2h5 cGVyY2FsbC5oIHwgICAgNyArCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaW50ZXJmYWNlLmgg fCAgICAxICsKIGFyY2gveDg2L3hlbi9tbXUuYyAgICAgICAgICAgICAgICAgICB8ICAgODMgKysr CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmMgICAgICAgfCAgIDEwICsKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9ndnQuaCAgICAgICB8ICAgMTQgKwogZHJpdmVycy94ZW4vS2NvbmZp ZyAgICAgICAgICAgICAgICAgIHwgICAgNSArCiBkcml2ZXJzL3hlbi9NYWtlZmlsZSAgICAgICAg ICAgICAgICAgfCAgICA2ICsKIGRyaXZlcnMveGVuL3hlbmd0LmMgICAgICAgICAgICAgICAgICB8 IDExNTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS94ZW4vaW50 ZXJmYWNlL2h2bS9odm1fb3AuaCAgIHwgIDE3NyArKysrKy0KIGluY2x1ZGUveGVuL2ludGVyZmFj ZS9odm0vaW9yZXEuaCAgICB8ICAxMzIgKysrKwogaW5jbHVkZS94ZW4vaW50ZXJmYWNlL21lbW9y eS5oICAgICAgIHwgICAyOCArCiBpbmNsdWRlL3hlbi9pbnRlcmZhY2UveGVuLmggICAgICAgICAg fCAgMTA2ICsrKysKIGluY2x1ZGUveGVuL3hlbi1vcHMuaCAgICAgICAgICAgICAgICB8ICAgIDUg KwogMTMgZmlsZXMgY2hhbmdlZCwgMTcyNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy94ZW4veGVuZ3QuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGluY2x1ZGUveGVuL2ludGVyZmFjZS9odm0vaW9yZXEuaAoKZGlmZiAtLWdpdCBhL2FyY2gveDg2 L2luY2x1ZGUvYXNtL3hlbi9oeXBlcmNhbGwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9o eXBlcmNhbGwuaAppbmRleCAzYmNkY2M4Li5hZWE5N2UzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9p bmNsdWRlL2FzbS94ZW4vaHlwZXJjYWxsLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVu L2h5cGVyY2FsbC5oCkBAIC00NTksNiArNDU5LDEzIEBAIEhZUEVSVklTT1JfaHZtX29wKGludCBv cCwgdm9pZCAqYXJnKQogfQogCiBzdGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl9kb21jdGwo CisgICAgICAgIHN0cnVjdCB4ZW5fZG9tY3RsICphcmcpCit7CisgICAgICAgIHJldHVybiBfaHlw ZXJjYWxsMShpbnQsIGRvbWN0bCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKIEhZUEVS VklTT1JfdG1lbV9vcCgKIAlzdHJ1Y3QgdG1lbV9vcCAqb3ApCiB7CmRpZmYgLS1naXQgYS9hcmNo L3g4Ni9pbmNsdWRlL2FzbS94ZW4vaW50ZXJmYWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94 ZW4vaW50ZXJmYWNlLmgKaW5kZXggNmZmNDk4Ni4uYTRlZTNmNCAxMDA2NDQKLS0tIGEvYXJjaC94 ODYvaW5jbHVkZS9hc20veGVuL2ludGVyZmFjZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNt L3hlbi9pbnRlcmZhY2UuaApAQCAtODksNiArODksNyBAQCB0eXBlZGVmIGxvbmcgeGVuX2xvbmdf dDsKIC8qIEd1ZXN0IGhhbmRsZXMgZm9yIHByaW1pdGl2ZSBDIHR5cGVzLiAqLwogX19ERUZJTkVf R1VFU1RfSEFORExFKHVjaGFyLCB1bnNpZ25lZCBjaGFyKTsKIF9fREVGSU5FX0dVRVNUX0hBTkRM RSh1aW50LCAgdW5zaWduZWQgaW50KTsKK19fREVGSU5FX0dVRVNUX0hBTkRMRSh1bG9uZywgIHVu c2lnbmVkIGxvbmcpOwogREVGSU5FX0dVRVNUX0hBTkRMRShjaGFyKTsKIERFRklORV9HVUVTVF9I QU5ETEUoaW50KTsKIERFRklORV9HVUVTVF9IQU5ETEUodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNo L3g4Ni94ZW4vbW11LmMgYi9hcmNoL3g4Ni94ZW4vbW11LmMKaW5kZXggYzkxM2NhNC4uZGE5NWQ0 NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL21tdS5jCisrKyBiL2FyY2gveDg2L3hlbi9tbXUu YwpAQCAtMjkzMSwzICsyOTMxLDg2IEBAIGludCB4ZW5fdW5tYXBfZG9tYWluX2dmbl9yYW5nZShz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKICNlbmRpZgogfQogRVhQT1JUX1NZTUJPTF9HUEwo eGVuX3VubWFwX2RvbWFpbl9nZm5fcmFuZ2UpOworCisvKiBOb3RlOiBoZXJlICdtZm4nIGlzIGFj dHVhbGx5IGdmbiEhISAqLworc3RydWN0IHZtX3N0cnVjdCAqIHhlbl9yZW1hcF9kb21haW5fbWZu X3JhbmdlX2luX2tlcm5lbCh1bnNpZ25lZCBsb25nIG1mbiwKKwkJaW50IG5yLCB1bnNpZ25lZCBk b21pZCkKK3sKKwlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOworCXN0cnVjdCByZW1hcF9kYXRhIHJt ZDsKKwlzdHJ1Y3QgbW11X3VwZGF0ZSBtbXVfdXBkYXRlW1JFTUFQX0JBVENIX1NJWkVdOworCWlu dCBiYXRjaDsKKwl1bnNpZ25lZCBsb25nIHJhbmdlLCBhZGRyOworCXBncHJvdF90IHByb3Q7CisJ aW50IGVycjsKKworCVdBUk5fT04oaW5faW50ZXJydXB0KCkgfHwgaXJxc19kaXNhYmxlZCgpKTsK KworCWFyZWEgPSBhbGxvY192bV9hcmVhKG5yIDw8IFBBR0VfU0hJRlQsIE5VTEwpOworCWlmICgh YXJlYSkKKwkJcmV0dXJuIE5VTEw7CisKKwlhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS0+YWRk cjsKKworCXByb3QgPSBfX3BncHJvdChwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMKSk7CisKKwlybWQu bWZuID0gJm1mbjsKKwlybWQucHJvdCA9IHByb3Q7CisKKwl3aGlsZSAobnIpIHsKKwkJYmF0Y2gg PSBtaW4oUkVNQVBfQkFUQ0hfU0laRSwgbnIpOworCQlyYW5nZSA9ICh1bnNpZ25lZCBsb25nKWJh dGNoIDw8IFBBR0VfU0hJRlQ7CisKKwkJcm1kLm1tdV91cGRhdGUgPSBtbXVfdXBkYXRlOworCQll cnIgPSBhcHBseV90b19wYWdlX3JhbmdlKCZpbml0X21tLCBhZGRyLCByYW5nZSwKKwkJCQlyZW1h cF9hcmVhX21mbl9wdGVfZm4sICZybWQpOworCQlpZiAoZXJyIHx8IEhZUEVSVklTT1JfbW11X3Vw ZGF0ZShtbXVfdXBkYXRlLCBiYXRjaCwgTlVMTCwgZG9taWQpIDwgMCkKKwkJCWdvdG8gZXJyOwor CisJCW5yIC09IGJhdGNoOworCQlhZGRyICs9IHJhbmdlOworCX0KKworCXhlbl9mbHVzaF90bGJf YWxsKCk7CisJcmV0dXJuIGFyZWE7CitlcnI6CisJZnJlZV92bV9hcmVhKGFyZWEpOworCXhlbl9m bHVzaF90bGJfYWxsKCk7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKHhlbl9yZW1h cF9kb21haW5fbWZuX3JhbmdlX2luX2tlcm5lbCk7CisKK3ZvaWQgeGVuX3VubWFwX2RvbWFpbl9t Zm5fcmFuZ2VfaW5fa2VybmVsKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIGludCBuciwKKwkJdW5z aWduZWQgZG9taWQpCit7CisJc3RydWN0IHJlbWFwX2RhdGEgcm1kOworCXN0cnVjdCBtbXVfdXBk YXRlIG1tdV91cGRhdGVbUkVNQVBfQkFUQ0hfU0laRV07CisJaW50IGJhdGNoOworCXVuc2lnbmVk IGxvbmcgcmFuZ2UsIGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLT5hZGRyOworI2RlZmluZSBJ TlZBTElEX01GTiAofjBVTCkKKwl1bnNpZ25lZCBsb25nIGludmFsaWRfbWZuID0gSU5WQUxJRF9N Rk47CisJaW50IGVycjsKKworCVdBUk5fT04oaW5faW50ZXJydXB0KCkgfHwgaXJxc19kaXNhYmxl ZCgpKTsKKworCXJtZC5tZm4gPSAmaW52YWxpZF9tZm47CisJcm1kLnByb3QgPSBQQUdFX05PTkU7 CisKKwl3aGlsZSAobnIpIHsKKwkJYmF0Y2ggPSBtaW4oUkVNQVBfQkFUQ0hfU0laRSwgbnIpOwor CQlyYW5nZSA9ICh1bnNpZ25lZCBsb25nKWJhdGNoIDw8IFBBR0VfU0hJRlQ7CisKKwkJcm1kLm1t dV91cGRhdGUgPSBtbXVfdXBkYXRlOworCQllcnIgPSBhcHBseV90b19wYWdlX3JhbmdlKCZpbml0 X21tLCBhZGRyLCByYW5nZSwKKwkJCQlyZW1hcF9hcmVhX21mbl9wdGVfZm4sICZybWQpOworCQlC VUdfT04oZXJyKTsKKwkJQlVHX09OKEhZUEVSVklTT1JfbW11X3VwZGF0ZShtbXVfdXBkYXRlLCBi YXRjaCwgTlVMTCwgZG9taWQpIDwgMCk7CisKKwkJbnIgLT0gYmF0Y2g7CisJCWFkZHIgKz0gcmFu Z2U7CisJfQorCisJZnJlZV92bV9hcmVhKGFyZWEpOworCXhlbl9mbHVzaF90bGJfYWxsKCk7Cit9 CitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5fdW5tYXBfZG9tYWluX21mbl9yYW5nZV9pbl9rZXJuZWwp OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L2d2dC5jCmluZGV4IGE3MTg3M2MuLjI4YTUxZDkgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndnQvZ3Z0LmMKQEAgLTIxLDEyICsyMSwxNCBAQAogICogU09GVFdBUkUuCiAgKi8KIAorI2lu Y2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8eGVuL3hlbi5oPgogI2luY2x1ZGUgPGxp bnV4L2t0aHJlYWQuaD4KIAogI2luY2x1ZGUgImd2dC5oIgogCiBzdHJ1Y3QgZ3Z0X2hvc3QgZ3Z0 X2hvc3Q7CitFWFBPUlRfU1lNQk9MKGd2dF9ob3N0KTsKIAogZXh0ZXJuIHN0cnVjdCBndnRfa2Vy bmVsX2RtIHhlbmd0X2tkbTsKIGV4dGVybiBzdHJ1Y3QgZ3Z0X2tlcm5lbF9kbSBrdm1ndF9rZG07 CkBAIC0zNiw2ICszOCwxMyBAQCBzdGF0aWMgc3RydWN0IGd2dF9pb19lbXVsYXRpb25fb3BzIGRl ZmF1bHRfaW9fZW11bGF0aW9uX29wcyA9IHsKIAkuZW11bGF0ZV9tbWlvX3dyaXRlID0gZ3Z0X2Vt dWxhdGVfbW1pb193cml0ZSwKIH07CiAKK3Vuc2lnbmVkIGludCBwYV90b19tbWlvX29mZnNldChz dHJ1Y3Qgdmd0X2RldmljZSAqdmd0LAorICAgICAgICAgICAgICAgdWludDY0X3QgcGEpOworCitz dGF0aWMgc3RydWN0IGd2dF9tcHRfb3BzIGRlZmF1bHRfZXhwb3J0X21wdF9vcHMgPSB7CisJLnBh X3RvX21taW9fb2Zmc2V0ID0gcGFfdG9fbW1pb19vZmZzZXQsCit9OworCiBzdGF0aWMgY29uc3Qg Y2hhciAqc3VwcG9ydGVkX2h5cGVydmlzb3JzW10gPSB7CiAJW0dWVF9IWVBFUlZJU09SX1RZUEVf WEVOXSA9ICJYZW4gSHlwZXJ2aXNvciIsCiAJW0dWVF9IWVBFUlZJU09SX1RZUEVfS1ZNXSA9ICJL Vk0iLApAQCAtNzgsNiArODcsNyBAQCBzdGF0aWMgYm9vbCBndnRfaW5pdF9ob3N0KHZvaWQpCiAJ CQlzdXBwb3J0ZWRfaHlwZXJ2aXNvcnNbaG9zdC0+aHlwZXJ2aXNvcl90eXBlXSk7CiAKIAlob3N0 LT5lbXVsYXRlX29wcyA9ICZkZWZhdWx0X2lvX2VtdWxhdGlvbl9vcHM7CisJaG9zdC0+bXB0X29w cyA9ICZkZWZhdWx0X2V4cG9ydF9tcHRfb3BzOwogCWlkcl9pbml0KCZob3N0LT5kZXZpY2VfaWRy KTsKIAltdXRleF9pbml0KCZob3N0LT5kZXZpY2VfaWRyX2xvY2spOwogCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQv Z3Z0LmgKaW5kZXggZWI1ZmQ0Ny4uODNmOTBhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Z0L2d2dC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuaApAQCAt NTgsNiArNTgsMTAgQEAgc3RydWN0IGd2dF9pb19lbXVsYXRpb25fb3BzIHsKIAlib29sICgqZW11 bGF0ZV9jZmdfd3JpdGUpKHN0cnVjdCB2Z3RfZGV2aWNlICosIHVuc2lnbmVkIGludCwgdm9pZCAq LCBpbnQpOwogfTsKIAorc3RydWN0IGd2dF9tcHRfb3BzIHsKKwl1bnNpZ25lZCBpbnQgKCpwYV90 b19tbWlvX29mZnNldCkoc3RydWN0IHZndF9kZXZpY2UgKiwgdTY0KTsKK307CisKIHN0cnVjdCBn dnRfaG9zdCB7CiAJYm9vbCBpbml0aWFsaXplZDsKIAlpbnQgaHlwZXJ2aXNvcl90eXBlOwpAQCAt NjUsNiArNjksNyBAQCBzdHJ1Y3QgZ3Z0X2hvc3QgewogCXN0cnVjdCBpZHIgZGV2aWNlX2lkcjsK IAlzdHJ1Y3QgZ3Z0X2tlcm5lbF9kbSAqa2RtOwogCXN0cnVjdCBndnRfaW9fZW11bGF0aW9uX29w cyAqZW11bGF0ZV9vcHM7CisJc3RydWN0IGd2dF9tcHRfb3BzICptcHRfb3BzOwogfTsKIAogZXh0 ZXJuIHN0cnVjdCBndnRfaG9zdCBndnRfaG9zdDsKQEAgLTEyMyw2ICsxMjgsOSBAQCBzdHJ1Y3Qg dmd0X2RldmljZSB7CiAJc3RydWN0IGd2dF92aXJ0dWFsX2RldmljZV9zdGF0ZSBzdGF0ZTsKIAlz dHJ1Y3QgZ3Z0X3N0YXRpc3RpY3Mgc3RhdDsKIAlzdHJ1Y3QgZ3Z0X3ZndHRfaW5mbyBndHQ7CisJ dm9pZCAqaHlwZXJ2aXNvcl9kYXRhOworCXVuc2lnbmVkIGxvbmcgbG93X21lbV9tYXhfZ3BmbjsK KwlhdG9taWNfdCBjcmFzaGluZzsKIH07CiAKIHN0cnVjdCBndnRfZ21fYWxsb2NhdG9yIHsKQEAg LTQyMyw2ICs0MzEsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgZ3Z0X3BjaV9tbWlvX2lzX2VuYWJs ZWQoc3RydWN0IHZndF9kZXZpY2UgKnZndCkKIAkJX1JFR0JJVF9DRkdfQ09NTUFORF9NRU1PUlk7 CiB9CiAKK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgZ3Z0X21taW9fYmFyX2Jhc2Uoc3RydWN0IHZn dF9kZXZpY2UgKnZndCkKK3sKKyAgICAgICAgY2hhciAqY2ZnX3NwYWNlID0gJnZndC0+c3RhdGUu Y2ZnLnNwYWNlWzBdOworICAgICAgICByZXR1cm4gKih1NjQgKikoY2ZnX3NwYWNlICsgR1ZUX1JF R19DRkdfU1BBQ0VfQkFSMCk7Cit9CisKICNkZWZpbmUgX192cmVnKHZndCwgb2ZmKSAoKih1MzIq KSh2Z3QtPnN0YXRlLm1taW8udnJlZyArIG9mZikpCiAjZGVmaW5lIF9fdnJlZzgodmd0LCBvZmYp ICgqKHU4Kikodmd0LT5zdGF0ZS5tbWlvLnZyZWcgKyBvZmYpKQogI2RlZmluZSBfX3ZyZWcxNih2 Z3QsIG9mZikgKCoodTE2Kikodmd0LT5zdGF0ZS5tbWlvLnZyZWcgKyBvZmYpKQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy94ZW4vS2NvbmZpZyBiL2RyaXZlcnMveGVuL0tjb25maWcKaW5kZXggNzM3MDhh Yy4uOWVlMjAzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vS2NvbmZpZworKysgYi9kcml2ZXJz L3hlbi9LY29uZmlnCkBAIC0yOTEsNCArMjkxLDkgQEAgY29uZmlnIFhFTl9TWU1TCiBjb25maWcg WEVOX0hBVkVfVlBNVQogICAgICAgIGJvb2wKIAorY29uZmlnIFhFTkdUCisgICAgICAgIHRyaXN0 YXRlICJYZW4gRG9tMCBzdXBwb3J0IGZvciBpOTE1IGd2dCBkZXZpY2UgbW9kZWwiCisgICAgICAg IGRlcGVuZHMgb24gWEVOX0RPTTAgJiYgSTkxNV9HVlQKKyAgICAgICAgZGVmYXVsdCBtCisKIGVu ZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL01ha2VmaWxlIGIvZHJpdmVycy94ZW4vTWFr ZWZpbGUKaW5kZXggOWI3YTM1Yy4uZmY3NWMzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vTWFr ZWZpbGUKKysrIGIvZHJpdmVycy94ZW4vTWFrZWZpbGUKQEAgLTksNiArOSwxMCBAQCBDRkxBR1Nf ZmVhdHVyZXMubwkJCTo9ICQobm9zdGFja3ApCiAKIENGTEFHU19lZmkubwkJCQkrPSAtZnNob3J0 LXdjaGFyCiAKKworSTkxNSAgICAgICAgICAgICAgICAgICAgIDo9IGRyaXZlcnMvZ3B1L2RybS9p OTE1CitDRkxBR1NfeGVuZ3QubyAgICAgICAgICArPSAtV2FsbCAtV2Vycm9yIC1JJChJOTE1KSAt SSQoSTkxNSkvZ3Z0CisKIGRvbTAtJChDT05GSUdfUENJKSArPSBwY2kubwogZG9tMC0kKENPTkZJ R19VU0JfU1VQUE9SVCkgKz0gZGJncC5vCiBkb20wLSQoQ09ORklHX1hFTl9BQ1BJKSArPSBhY3Bp Lm8gJCh4ZW4tcGFkLXkpCkBAIC0zNiw2ICs0MCw4IEBAIG9iai0kKENPTkZJR19YRU5fQUNQSV9Q Uk9DRVNTT1IpCSs9IHhlbi1hY3BpLXByb2Nlc3Nvci5vCiBvYmotJChDT05GSUdfWEVOX0VGSSkJ CQkrPSBlZmkubwogb2JqLSQoQ09ORklHX1hFTl9TQ1NJX0JBQ0tFTkQpCQkrPSB4ZW4tc2NzaWJh Y2subwogb2JqLSQoQ09ORklHX1hFTl9BVVRPX1hMQVRFKQkJKz0geGxhdGVfbW11Lm8KK29iai0k KENPTkZJR19YRU5HVCkgICAgICAgICAgICAgICAgICAgICArPSB4ZW5ndC5vCisKIHhlbi1ldnRj aG4teQkJCQk6PSBldnRjaG4ubwogeGVuLWdudGRldi15CQkJCTo9IGdudGRldi5vCiB4ZW4tZ250 YWxsb2MteQkJCQk6PSBnbnRhbGxvYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi94ZW5ndC5j IGIvZHJpdmVycy94ZW4veGVuZ3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li42YzYwMGFkYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMveGVuL3hlbmd0LmMKQEAgLTAs MCArMSwxMTUzIEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIFZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz IHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRp b24sIEluYy4sIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAt MTMwMSBVU0EuCisgKi8KKworLyoKKyAqIE5PVEU6CisgKiBUaGlzIGZpbGUgY29udGFpbnMgaHlw ZXJ2aXNvciBzcGVjaWZpYyBpbnRlcmFjdGlvbnMgdG8KKyAqIGltcGxlbWVudCB0aGUgY29uY2Vw dCBvZiBtZWRpYXRlZCBwYXNzLXRocm91Z2ggZnJhbWV3b3JrLgorICogV2hhdCB0aGlzIGZpbGUg cHJvdmlkZXMgaXMgYWN0dWFsbHkgYSBnZW5lcmFsIGFic3RyYWN0aW9uCisgKiBvZiBpbi1rZXJu ZWwgZGV2aWNlIG1vZGVsLCB3aGljaCBpcyBub3Qgdmd0IHNwZWNpZmljLgorICoKKyAqIE5vdyB0 ZW1wb3JhcmlseSBpbiB2Z3QgY29kZS4gbG9uZy10ZXJtIHRoaXMgc2hvdWxkIGJlCisgKiBpbiBo eXBlcnZpc29yICh4ZW4va3ZtKSBzcGVjaWZpYyBkaXJlY3RvcnkKKyAqLworI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdHlw ZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5o PgorI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Cisj aW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworI2luY2x1ZGUgPGFzbS94ZW4vaHlwZXJjYWxsLmg+ CisjaW5jbHVkZSA8YXNtL3hlbi9wYWdlLmg+CisjaW5jbHVkZSA8eGVuL3hlbi1vcHMuaD4KKyNp bmNsdWRlIDx4ZW4vZXZlbnRzLmg+CisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9odm0vcGFyYW1z Lmg+CisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9odm0vaHZtX29wLmg+CisjaW5jbHVkZSA8eGVu L2ludGVyZmFjZS9odm0vaW9yZXEuaD4KKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL21lbW9yeS5o PgorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx4ZW4vaW50 ZXJmYWNlL3ZjcHUuaD4KKworI2luY2x1ZGUgImd2dC5oIgorCitNT0RVTEVfQVVUSE9SKCJJbnRl bCBDb3Jwb3JhdGlvbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJYZW5HVCBtZWRpYXRlZCBwYXNz dGhyb3VnaCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9O KCIwLjEiKTsKKworI2RlZmluZSBNQVhfSFZNX1ZDUFVTX1NVUFBPUlRFRCAxMjgKK3N0cnVjdCBn dnRfaHZtX2luZm8geworCS8qIGlvcGFnZV92bWEtPmFkZHIgaXMganVzdCBpb3BhZ2UuIFdlIG5l ZWQgaW9wYWdlX3ZtYSBvbiBWTSBkZXN0cm95ICovCisJc2hhcmVkX2lvcGFnZV90ICppb3BhZ2U7 CisJc3RydWN0IHZtX3N0cnVjdCAqaW9wYWdlX3ZtYTsKKwlpbnQgKmV2dGNobl9pcnE7IC8qIHRo ZSBldmVudCBjaGFubmxlIGlycXMgdG8gaGFuZGxlIEhWTSBpbyByZXF1ZXN0CisJCQkJaW5kZXgg aXMgdmNwdSBpZCAqLworCisJREVDTEFSRV9CSVRNQVAoaW9yZXFfcGVuZGluZywgTUFYX0hWTV9W Q1BVU19TVVBQT1JURUQpOworCXdhaXRfcXVldWVfaGVhZF90IGlvX2V2ZW50X3dxOworCXN0cnVj dCB0YXNrX3N0cnVjdCAqZW11bGF0aW9uX3RocmVhZDsKKworCWludCBucl92Y3B1OworCisJaW9z ZXJ2aWRfdCBpb3Nydl9pZDsgICAgLyogaW8tcmVxdWVzdCBzZXJ2ZXIgaWQgKi8KKworI2RlZmlu ZSBWTUVNXzFNQgkJKDFVTEwgPDwgMjApCS8qIHRoZSBzaXplIG9mIHRoZSBmaXJzdCAxTUIgKi8K KyNkZWZpbmUgVk1FTV9CVUNLX1NISUZUCQkyMAorI2RlZmluZSBWTUVNX0JVQ0tfU0laRQkJKDFV TEwgPDwgVk1FTV9CVUNLX1NISUZUKQorI2RlZmluZSBWTUVNX0JVQ0tfTUFTSwkJKH4oVk1FTV9C VUNLX1NJWkUgLSAxKSkKKwl1aW50NjRfdCB2bWVtX3N6OworCS8qIGZvciB0aGUgMXN0IDFNQiBt ZW1vcnkgb2YgSFZNOiBlYWNoIHZtX3N0cnVjdCBtZWFucyBvbmUgNEstcGFnZSAqLworCXN0cnVj dCB2bV9zdHJ1Y3QgKip2bWVtX3ZtYV9sb3dfMW1iOworCS8qIGZvciA+MU1CIG1lbW9yeSBvZiBI Vk06IGVhY2ggdm1fc3RydWN0IG1lYW5zIDFNQiAqLworCXN0cnVjdCB2bV9zdHJ1Y3QgKip2bWVt X3ZtYTsKKwkvKiBmb3IgPjFNQiBtZW1vcnkgb2YgSFZNOiBlYWNoIHZtX3N0cnVjdCBtZWFucyA0 S0IgKi8KKwlzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1lbV92bWFfNGs7Cit9OworCitzdGF0aWMgaW50 IHhlbl9wYXVzZV9kb21haW4oaW50IHZtX2lkKTsKK3N0YXRpYyBpbnQgeGVuX3NodXRkb3duX2Rv bWFpbihpbnQgdm1faWQpOworc3RhdGljIHZvaWQgKnhlbl9ncGFfdG9fdmEoc3RydWN0IHZndF9k ZXZpY2UgKnZndCwgdW5zaWduZWQgbG9uZyBncGEpOworCisjZGVmaW5lIFhFTl9BU1NFUlRfVk0o eCwgdmd0KQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICghKHgpKSB7CQkJCQkJXAorCQkJ cHJpbnRrKCJBc3NlcnQgYXQgJXMgbGluZSAlZFxuIiwJCVwKKwkJCQlfX0ZJTEVfXywgX19MSU5F X18pOwkJCVwKKwkJCWlmIChhdG9taWNfY21weGNoZygmKHZndCktPmNyYXNoaW5nLCAwLCAxKSkJ XAorCQkJCWJyZWFrOwkJCQkJXAorCQkJZ3Z0X2VycigiS2lsbGluZyBWTSVkXG4iLCAodmd0KS0+ dm1faWQpOwlcCisJCQlpZiAoIXhlbl9wYXVzZV9kb21haW4oKHZndC0+dm1faWQpKSkJCVwKKwkJ CQl4ZW5fc2h1dGRvd25fZG9tYWluKCh2Z3QtPnZtX2lkKSk7CVwKKwkJfQkJCQkJCQlcCisJfSB3 aGlsZSAoMCkKKworLyogVHJhbnNsYXRlIGZyb20gVk0ncyBndWVzdCBwZm4gdG8gbWFjaGluZSBw Zm4gKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHhlbl9nMm1fcGZuKGludCB2bV9pZCwgdW5zaWdu ZWQgbG9uZyBnX3BmbikKK3sKKwlzdHJ1Y3QgeGVuX2dldF9tZm5fZnJvbV9wZm4gcGZuX2FyZzsK KwlpbnQgcmM7CisJdW5zaWduZWQgbG9uZyBwZm5fbGlzdFsxXTsKKworCXBmbl9saXN0WzBdID0g Z19wZm47CisKKwlzZXRfeGVuX2d1ZXN0X2hhbmRsZShwZm5fYXJnLnBmbl9saXN0LCBwZm5fbGlz dCk7CisJcGZuX2FyZy5ucl9wZm5zID0gMTsKKwlwZm5fYXJnLmRvbWlkID0gdm1faWQ7CisKKwly YyA9IEhZUEVSVklTT1JfbWVtb3J5X29wKFhFTk1FTV9nZXRfbWZuX2Zyb21fcGZuLCAmcGZuX2Fy Zyk7CisJaWYocmMgPCAwKXsKKwkJcHJpbnRrKCJmYWlsZWQgdG8gZ2V0IG1mbiBmb3IgZ3Bmbigw eCVseClcbiwgZXJybm89JWRcbiIsIGdfcGZuLCByYyk7CisJCXJldHVybiBJTlZBTElEX01GTjsK Kwl9CisKKwlyZXR1cm4gcGZuX2xpc3RbMF07Cit9CisKK3N0YXRpYyBpbnQgeGVuX2dldF9tYXhf Z3BmbihpbnQgdm1faWQpCit7CisJZG9taWRfdCBkb21faWQgPSB2bV9pZDsKKwlpbnQgbWF4X2dw Zm4gPSBIWVBFUlZJU09SX21lbW9yeV9vcChYRU5NRU1fbWF4aW11bV9ncGZuLCAmZG9tX2lkKTsK KwlCVUdfT04obWF4X2dwZm4gPCAwKTsKKwlyZXR1cm4gbWF4X2dwZm47Cit9CisKK3N0YXRpYyBp bnQgeGVuX3BhdXNlX2RvbWFpbihpbnQgdm1faWQpCit7CisJaW50IHJjOworCXN0cnVjdCB4ZW5f ZG9tY3RsIGRvbWN0bDsKKworCWRvbWN0bC5kb21haW4gPSB2bV9pZDsKKwlkb21jdGwuY21kID0g WEVOX0RPTUNUTF9wYXVzZWRvbWFpbjsKKwlkb21jdGwuaW50ZXJmYWNlX3ZlcnNpb24gPSBYRU5f RE9NQ1RMX0lOVEVSRkFDRV9WRVJTSU9OOworCisJcmMgPSBIWVBFUlZJU09SX2RvbWN0bCgmZG9t Y3RsKTsKKwlpZiAocmMgIT0gMCkKKwkJcHJpbnRrKCJIWVBFUlZJU09SX2RvbWN0bCBwYXVzZWRv bWFpbiBmYWlsIHdpdGggJWQhXG4iLCByYyk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBp bnQgeGVuX3NodXRkb3duX2RvbWFpbihpbnQgdm1faWQpCit7CisJaW50IHJjOworCXN0cnVjdCBz Y2hlZF9yZW1vdGVfc2h1dGRvd24gcjsKKworCXIucmVhc29uID0gU0hVVERPV05fY3Jhc2g7CisJ ci5kb21haW5faWQgPSB2bV9pZDsKKwlyYyA9IEhZUEVSVklTT1Jfc2NoZWRfb3AoU0NIRURPUF9y ZW1vdGVfc2h1dGRvd24sICZyKTsKKwlpZiAocmMgIT0gMCkKKwkJcHJpbnRrKCJIWVBFUlZJU09S X3NjaGVkX29wIGZhaWxlZDogJWRcbiIsIHJjKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBp bnQgeGVuX2RvbWFpbl9pb21lbV9wZXJtKHVpbnQzMl90IGRvbWFpbl9pZCwgdWludDY0X3QgZmly c3RfbWZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG5yX21mbnMs IHVpbnQ4X3QgYWxsb3dfYWNjZXNzKQoreworCXN0cnVjdCB4ZW5fZG9tY3RsIGFyZzsKKwlpbnQg cmM7CisKKwlhcmcuZG9tYWluID0gZG9tYWluX2lkOworCWFyZy5jbWQgPSBYRU5fRE9NQ1RMX2lv bWVtX3Blcm1pc3Npb247CisJYXJnLmludGVyZmFjZV92ZXJzaW9uID0gWEVOX0RPTUNUTF9JTlRF UkZBQ0VfVkVSU0lPTjsKKwlhcmcudS5pb21lbV9wZXJtLmZpcnN0X21mbiA9IGZpcnN0X21mbjsK KwlhcmcudS5pb21lbV9wZXJtLm5yX21mbnMgPSBucl9tZm5zOworCWFyZy51LmlvbWVtX3Blcm0u YWxsb3dfYWNjZXNzID0gYWxsb3dfYWNjZXNzOworCXJjID0gSFlQRVJWSVNPUl9kb21jdGwoJmFy Zyk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgeGVuX2h2bV9tZW1vcnlfbWFwcGlu ZyhpbnQgdm1faWQsIHVpbnQ2NF90IGZpcnN0X2dmbiwgdWludDY0X3QgZmlyc3RfbWZuLAorCQkJ CSAgdWludDMyX3QgbnJfbWZucywgdWludDMyX3QgYWRkX21hcHBpbmcpCit7CisJc3RydWN0IHhl bl9kb21jdGwgYXJnOworCWludCByYzsKKworCWlmIChhZGRfbWFwcGluZykgeworCQlyYyA9IHhl bl9kb21haW5faW9tZW1fcGVybSh2bV9pZCwgZmlyc3RfbWZuLCBucl9tZm5zLCAxKTsKKwkgICAg ICAgIGlmIChyYyA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAieGVuX2RvbWFpbl9pb21lbV9w ZXJtIGZhaWxlZDogJWRcbiIsIHJjKTsKKwkJCXJldHVybiByYzsKKwkJfQorCX0KKworCWFyZy5k b21haW4gPSB2bV9pZDsKKwlhcmcuY21kID0gWEVOX0RPTUNUTF9tZW1vcnlfbWFwcGluZzsKKwlh cmcuaW50ZXJmYWNlX3ZlcnNpb24gPSBYRU5fRE9NQ1RMX0lOVEVSRkFDRV9WRVJTSU9OOworCWFy Zy51Lm1lbW9yeV9tYXBwaW5nLmZpcnN0X2dmbiA9IGZpcnN0X2dmbjsKKwlhcmcudS5tZW1vcnlf bWFwcGluZy5maXJzdF9tZm4gPSBmaXJzdF9tZm47CisJYXJnLnUubWVtb3J5X21hcHBpbmcubnJf bWZucyA9IG5yX21mbnM7CisJYXJnLnUubWVtb3J5X21hcHBpbmcuYWRkX21hcHBpbmcgPSBhZGRf bWFwcGluZzsKKworCXJjID0gSFlQRVJWSVNPUl9kb21jdGwoJmFyZyk7CisJaWYgKHJjIDwgMCkg eworCQlwcmludGsoS0VSTl9FUlIgIkhZUEVSVklTT1JfZG9tY3RsIGZhaWxlZDogJWRcbiIsIHJj KTsKKwkJcmV0dXJuIHJjOworCX0KKworCWlmICghYWRkX21hcHBpbmcpIHsKKwkJcmMgPSB4ZW5f ZG9tYWluX2lvbWVtX3Blcm0odm1faWQsIGZpcnN0X21mbiwgbnJfbWZucywgMCk7CisJICAgICAg ICBpZiAocmMgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInhlbl9kb21haW5faW9tZW1fcGVy bSBmYWlsZWQ6ICVkXG4iLCByYyk7CisJCQlyZXR1cm4gcmM7CisJCX0KKwl9CisKKwlyZXR1cm4g cmM7Cit9CisKK3N0YXRpYyBpbnQgeGVuX21hcF9tZm5fdG9fZ3BmbihpbnQgdm1faWQsIHVuc2ln bmVkIGxvbmcgZ3BmbiwKKwl1bnNpZ25lZCBsb25nIG1mbiwgaW50IG5yLCBpbnQgbWFwLCBlbnVt IG1hcF90eXBlIHR5cGUpCit7CisJaW50IHJjOworCXJjID0geGVuX2h2bV9tZW1vcnlfbWFwcGlu Zyh2bV9pZCwgZ3BmbiwgbWZuLCBuciwKKwkJCW1hcCA/IERQQ0lfQUREX01BUFBJTkcgOiBEUENJ X1JFTU9WRV9NQVBQSU5HKTsKKwlpZiAocmMgIT0gMCkKKwkJcHJpbnRrKCJ4ZW5faHZtX21lbW9y eV9tYXBwaW5nIGZhaWxlZDogJWRcbiIsIHJjKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBp bnQgeGVuX2dldF9ucl92Y3B1KGludCB2bV9pZCkKK3sKKwlzdHJ1Y3QgeGVuX2RvbWN0bCBhcmc7 CisJaW50IHJjOworCisJYXJnLmRvbWFpbiA9IHZtX2lkOworCWFyZy5jbWQgPSBYRU5fRE9NQ1RM X2dldGRvbWFpbmluZm87CisJYXJnLmludGVyZmFjZV92ZXJzaW9uID0gWEVOX0RPTUNUTF9JTlRF UkZBQ0VfVkVSU0lPTjsKKworCXJjID0gSFlQRVJWSVNPUl9kb21jdGwoJmFyZyk7CisJaWYgKHJj PDApeworCQlwcmludGsoS0VSTl9FUlIgIkhZUEVSVklTT1JfZG9tY3RsIGZhaWwgcmV0PSVkXG4i LHJjKTsKKwkJLyogYXNzdW1lIGl0IGlzIFVQICovCisJCXJldHVybiAxOworCX0KKworCXJldHVy biBhcmcudS5nZXRkb21haW5pbmZvLm1heF92Y3B1X2lkICsgMTsKK30KKworc3RhdGljIGludCBo dm1fY3JlYXRlX2lvcmVxdWVzdF9zZXJ2ZXIoc3RydWN0IHZndF9kZXZpY2UgKnZndCkKK3sKKwlz dHJ1Y3QgZ3Z0X2h2bV9pbmZvICppbmZvID0gdmd0LT5oeXBlcnZpc29yX2RhdGE7CisJc3RydWN0 IHhlbl9odm1fY3JlYXRlX2lvcmVxX3NlcnZlciBhcmc7CisJaW50IHI7CisKKwlhcmcuZG9taWQg PSB2Z3QtPnZtX2lkOworCWFyZy5oYW5kbGVfYnVmaW9yZXEgPSAwOworCXIgPSBIWVBFUlZJU09S X2h2bV9vcChIVk1PUF9jcmVhdGVfaW9yZXFfc2VydmVyLCAmYXJnKTsKKwlpZiAociA8IDApIHsK KwkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgY3JlYXRlIGlvLXJlcXVzZXQgc2VydmVyOiAlZCFc biIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJaW5mby0+aW9zcnZfaWQgPSBhcmcuaWQ7CisKKwly ZXR1cm4gcjsKK30KKworc3RhdGljIGludCBodm1fdG9nZ2xlX2lvcmVxdWVzdF9zZXJ2ZXIoc3Ry dWN0IHZndF9kZXZpY2UgKnZndCwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGd2dF9odm1faW5m byAqaW5mbyA9IHZndC0+aHlwZXJ2aXNvcl9kYXRhOworCXN0cnVjdCB4ZW5faHZtX3NldF9pb3Jl cV9zZXJ2ZXJfc3RhdGUgYXJnOworCWludCByOworCisJYXJnLmRvbWlkID0gdmd0LT52bV9pZDsK KwlhcmcuaWQgPSBpbmZvLT5pb3Nydl9pZDsKKwlhcmcuZW5hYmxlZCA9IGVuYWJsZTsKKwlyID0g SFlQRVJWSVNPUl9odm1fb3AoSFZNT1Bfc2V0X2lvcmVxX3NlcnZlcl9zdGF0ZSwgJmFyZyk7CisJ aWYgKHIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90ICVzIGlvLXJlcXVlc3Qgc2Vy dmVyOiAlZCFcbiIsCisJCQllbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNiYWxlIiwgIHIpOworCQly ZXR1cm4gcjsKKwl9CisKKyAgICAgICByZXR1cm4gcjsKK30KKworc3RhdGljIGludCBodm1fZ2V0 X2lvcmVxX3BmbihzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB1aW50NjRfdCAqdmFsdWUpCit7CisJ c3RydWN0IGd2dF9odm1faW5mbyAqaW5mbyA9IHZndC0+aHlwZXJ2aXNvcl9kYXRhOworCXN0cnVj dCB4ZW5faHZtX2dldF9pb3JlcV9zZXJ2ZXJfaW5mbyBhcmc7CisJaW50IHI7CisKKwlhcmcuZG9t aWQgPSB2Z3QtPnZtX2lkOworCWFyZy5pZCA9IGluZm8tPmlvc3J2X2lkOworCXIgPSBIWVBFUlZJ U09SX2h2bV9vcChIVk1PUF9nZXRfaW9yZXFfc2VydmVyX2luZm8sICZhcmcpOworCWlmIChyIDwg MCkgeworCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBnZXQgaW9yZXEgcGZuOiAlZCFcbiIsIHIp OworCQlyZXR1cm4gcjsKKwl9CisJKnZhbHVlID0gYXJnLmlvcmVxX3BmbjsKKwlyZXR1cm4gcjsK K30KKworc3RhdGljIGludCBodm1fZGVzdHJveV9pb3JlcXVlc3Rfc2VydmVyKHN0cnVjdCB2Z3Rf ZGV2aWNlICp2Z3QpCit7CisJc3RydWN0IGd2dF9odm1faW5mbyAqaW5mbyA9IHZndC0+aHlwZXJ2 aXNvcl9kYXRhOworCXN0cnVjdCB4ZW5faHZtX2Rlc3Ryb3lfaW9yZXFfc2VydmVyIGFyZzsKKwlp bnQgcjsKKworCWFyZy5kb21pZCA9IHZndC0+dm1faWQ7CisJYXJnLmlkID0gaW5mby0+aW9zcnZf aWQ7CisJciA9IEhZUEVSVklTT1JfaHZtX29wKEhWTU9QX2Rlc3Ryb3lfaW9yZXFfc2VydmVyLCAm YXJnKTsKKwlpZiAociA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgZGVzdHJveSBp by1yZXF1ZXN0IHNlcnZlciglZCk6ICVkIVxuIiwKKwkJCWluZm8tPmlvc3J2X2lkLCByKTsKKwkJ cmV0dXJuIHI7CisJfQorCWluZm8tPmlvc3J2X2lkID0gMDsKKworCXJldHVybiByOworfQorCitz dGF0aWMgaW50IGh2bV9tYXBfaW9fcmFuZ2VfdG9faW9yZXFfc2VydmVyKHN0cnVjdCB2Z3RfZGV2 aWNlICp2Z3QsCisJaW50IGlzX21taW8sIHVpbnQ2NF90IHN0YXJ0LCB1aW50NjRfdCBlbmQsIGlu dCBtYXApCit7CisJc3RydWN0IGd2dF9odm1faW5mbyAqaW5mbyA9IHZndC0+aHlwZXJ2aXNvcl9k YXRhOworCXhlbl9odm1faW9fcmFuZ2VfdCBhcmc7CisJaW50IHJjOworCisJYXJnLmRvbWlkID0g dmd0LT52bV9pZDsKKwlhcmcuaWQgPSBpbmZvLT5pb3Nydl9pZDsKKwlhcmcudHlwZSA9IGlzX21t aW8gPyBIVk1PUF9JT19SQU5HRV9NRU1PUlkgOiBIVk1PUF9JT19SQU5HRV9QT1JUOworCWFyZy5z dGFydCA9IHN0YXJ0OworCWFyZy5lbmQgPSBlbmQ7CisKKwlpZiAobWFwKQorCQlyYyA9IEhZUEVS VklTT1JfaHZtX29wKEhWTU9QX21hcF9pb19yYW5nZV90b19pb3JlcV9zZXJ2ZXIsICZhcmcpOwor CWVsc2UKKwkJcmMgPSBIWVBFUlZJU09SX2h2bV9vcChIVk1PUF91bm1hcF9pb19yYW5nZV9mcm9t X2lvcmVxX3NlcnZlciwgJmFyZyk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgaHZt X21hcF9wY2lkZXZfdG9faW9yZXFfc2VydmVyKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHVpbnQ2 NF90IHNiZGYpCit7CisJc3RydWN0IGd2dF9odm1faW5mbyAqaW5mbyA9IHZndC0+aHlwZXJ2aXNv cl9kYXRhOworCXhlbl9odm1faW9fcmFuZ2VfdCBhcmc7CisJaW50IHJjOworCisJYXJnLmRvbWlk ID0gdmd0LT52bV9pZDsKKwlhcmcuaWQgPSBpbmZvLT5pb3Nydl9pZDsKKwlhcmcudHlwZSA9IEhW TU9QX0lPX1JBTkdFX1BDSTsKKwlhcmcuc3RhcnQgPSBhcmcuZW5kID0gc2JkZjsKKwlyYyA9IEhZ UEVSVklTT1JfaHZtX29wKEhWTU9QX21hcF9pb19yYW5nZV90b19pb3JlcV9zZXJ2ZXIsICZhcmcp OworCWlmIChyYyA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgbWFwIHBjaV9kZXYg dG8gaW9yZXFfc2VydmVyOiAlZCFcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJldHVy biByYzsKK30KKworc3RhdGljIGludCBodm1fc2V0X21lbV90eXBlKHN0cnVjdCB2Z3RfZGV2aWNl ICp2Z3QsCisJdWludDE2X3QgbWVtX3R5cGUsIHVpbnQ2NF90IGZpcnN0X3BmbiwgdWludDY0X3Qg bnIpCit7CisJeGVuX2h2bV9zZXRfbWVtX3R5cGVfdCBhcmdzOworCWludCByYzsKKworCWFyZ3Mu ZG9taWQgPSB2Z3QtPnZtX2lkOworCWFyZ3MuaHZtbWVtX3R5cGUgPSBtZW1fdHlwZTsKKwlhcmdz LmZpcnN0X3BmbiA9IGZpcnN0X3BmbjsKKwlhcmdzLm5yID0gMTsKKwlyYyA9IEhZUEVSVklTT1Jf aHZtX29wKEhWTU9QX3NldF9tZW1fdHlwZSwgJmFyZ3MpOworCisJcmV0dXJuIHJjOworfQorCitz dGF0aWMgaW50IGh2bV93cF9wYWdlX3RvX2lvcmVxX3NlcnZlcihzdHJ1Y3Qgdmd0X2RldmljZSAq dmd0LCB1bnNpZ25lZCBsb25nIHBhZ2UsIGludCBzZXQpCit7CisJaW50IHJjID0gMDsKKwl1aW50 NjRfdCBzdGFydCwgZW5kOworCXVpbnQxNl90IG1lbV90eXBlOworCisJc3RhcnQgPSBwYWdlIDw8 IFBBR0VfU0hJRlQ7CisJZW5kID0gKChwYWdlICsgMSkgPDwgUEFHRV9TSElGVCkgLSAxOworCisJ cmMgPSBodm1fbWFwX2lvX3JhbmdlX3RvX2lvcmVxX3NlcnZlcih2Z3QsIDEsIHN0YXJ0LCBlbmQs IHNldCk7CisJaWYgKHJjIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byAlcyBw YWdlIDB4JWx4IHRvIGlvcmVxX3NlcnZlcjogJWQhXG4iLAorCQkJc2V0ID8gIm1hcCI6InVubWFw IiwgcGFnZSAsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCW1lbV90eXBlID0gc2V0ID8gSFZN TUVNX21taW9fd3JpdGVfZG0gOiBIVk1NRU1fcmFtX3J3OworCXJjID0gaHZtX3NldF9tZW1fdHlw ZSh2Z3QsIG1lbV90eXBlLCBwYWdlLCAxKTsKKwlpZiAocmMgPCAwKSB7CisJCXByaW50ayhLRVJO X0VSUiAiRmFpbGVkIHRvIHNldCBtZW0gdHlwZSBvZiBwYWdlIDB4JWx4IHRvICVzIVxuIiwgcGFn ZSwKKwkJCXNldCA/ICJIVk1NRU1fbW1pb193cml0ZV9kbSI6IkhWTU1FTV9yYW1fcnciKTsKKwkJ cmV0dXJuIHJjOworCX0KKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgeGVuX3NldF90cmFw X2FyZWEoc3RydWN0IHZndF9kZXZpY2UgKnZndCwgdWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGVu ZCwgYm9vbCBtYXApCit7CisJaWYgKCFndnRfcGNpX21taW9faXNfZW5hYmxlZCh2Z3QpKQorCQly ZXR1cm4gMDsKKworCXJldHVybiBodm1fbWFwX2lvX3JhbmdlX3RvX2lvcmVxX3NlcnZlcih2Z3Qs IDEsIHN0YXJ0LCBlbmQsIG1hcCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICp4ZW5f bWFwX2lvcGFnZShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0KQoreworCXVpbnQ2NF90IGlvcmVxX3Bm bjsKKwlpbnQgcmM7CisKKwlyYyA9IGh2bV9jcmVhdGVfaW9yZXF1ZXN0X3NlcnZlcih2Z3QpOwor CWlmIChyYyA8IDApCisJCXJldHVybiBOVUxMOworCXJjID0gaHZtX2dldF9pb3JlcV9wZm4odmd0 LCAmaW9yZXFfcGZuKTsKKwlpZiAocmMgPCAwKSB7CisJCWh2bV9kZXN0cm95X2lvcmVxdWVzdF9z ZXJ2ZXIodmd0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHhlbl9yZW1hcF9kb21h aW5fbWZuX3JhbmdlX2luX2tlcm5lbChpb3JlcV9wZm4sIDEsIHZndC0+dm1faWQpOworfQorCitz dGF0aWMgYm9vbCB4ZW5fc2V0X2d1ZXN0X3BhZ2Vfd3JpdGVwcm90ZWN0aW9uKHN0cnVjdCB2Z3Rf ZGV2aWNlICp2Z3QsCisJCWd1ZXN0X3BhZ2VfdCAqZ3Vlc3RfcGFnZSkKK3sKKwlpbnQgcjsKKwor CWlmIChndWVzdF9wYWdlLT53cml0ZXByb3RlY3Rpb24pCisJCXJldHVybiB0cnVlOworCisJciA9 IGh2bV93cF9wYWdlX3RvX2lvcmVxX3NlcnZlcih2Z3QsIGd1ZXN0X3BhZ2UtPmdmbiwgMSk7CisJ aWYgKHIpIHsKKwkJZ3Z0X2VycigiZmFpbCB0byBzZXQgd3JpdGUgcHJvdGVjdGlvbi5cbiIpOwor CQlyZXR1cm4gZmFsc2U7CisJfQorCisJZ3Vlc3RfcGFnZS0+d3JpdGVwcm90ZWN0aW9uID0gdHJ1 ZTsKKworCWF0b21pY19pbmMoJnZndC0+Z3R0Lm5fd3JpdGVfcHJvdGVjdGVkX2d1ZXN0X3BhZ2Up OworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHhlbl9jbGVhcl9ndWVzdF9wYWdl X3dyaXRlcHJvdGVjdGlvbihzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LAorCQlndWVzdF9wYWdlX3Qg Kmd1ZXN0X3BhZ2UpCit7CisJaW50IHI7CisKKwlpZiAoIWd1ZXN0X3BhZ2UtPndyaXRlcHJvdGVj dGlvbikKKwkJcmV0dXJuIHRydWU7CisKKwlyID0gaHZtX3dwX3BhZ2VfdG9faW9yZXFfc2VydmVy KHZndCwgZ3Vlc3RfcGFnZS0+Z2ZuLCAwKTsKKwlpZiAocikgeworCQlndnRfZXJyKCJmYWlsIHRv IGNsZWFyIHdyaXRlIHByb3RlY3Rpb24uXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWd1 ZXN0X3BhZ2UtPndyaXRlcHJvdGVjdGlvbiA9IGZhbHNlOworCisJYXRvbWljX2RlYygmdmd0LT5n dHQubl93cml0ZV9wcm90ZWN0ZWRfZ3Vlc3RfcGFnZSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwor c3RhdGljIGludCB4ZW5fZGV0ZWN0X2hvc3Qodm9pZCkKK3sKKwlyZXR1cm4geGVuX2luaXRpYWxf ZG9tYWluKCk7Cit9CisKK3N0YXRpYyBpbnQgeGVuX3ZpcnRfdG9fbWZuKHZvaWQgKmFkZHIpCit7 CisJcmV0dXJuIHZpcnRfdG9fbWZuKGFkZHIpOworfQorCitzdGF0aWMgdm9pZCAqeGVuX21mbl90 b192aXJ0KGludCBtZm4pCit7CisJcmV0dXJuIG1mbl90b192aXJ0KG1mbik7Cit9CisKK3N0YXRp YyBpbnQgeGVuX2luamVjdF9tc2koaW50IHZtX2lkLCB1MzIgYWRkcl9sbywgdTE2IGRhdGEpCit7 CisJc3RydWN0IHhlbl9odm1faW5qZWN0X21zaSBpbmZvID0geworCQkuZG9taWQJPSB2bV9pZCwK KwkJLmFkZHIJPSBhZGRyX2xvLCAvKiBvbmx5IGxvdyBhZGRyIHVzZWQgKi8KKwkJLmRhdGEJPSBk YXRhLAorCX07CisKKwlyZXR1cm4gSFlQRVJWSVNPUl9odm1fb3AoSFZNT1BfaW5qZWN0X21zaSwg JmluZm8pOworfQorCitzdGF0aWMgaW50IHZndF9odm1fdm1lbV9pbml0KHN0cnVjdCB2Z3RfZGV2 aWNlICp2Z3QpCit7CisJdW5zaWduZWQgbG9uZyBpLCBqLCBncGZuLCBjb3VudDsKKwl1bnNpZ25l ZCBsb25nIG5yX2xvd18xbWJfYmt0LCBucl9oaWdoX2JrdCwgbnJfaGlnaF80a19ia3Q7CisJc3Ry dWN0IGd2dF9odm1faW5mbyAqaW5mbyA9IHZndC0+aHlwZXJ2aXNvcl9kYXRhOworCisJaWYgKCF2 Z3QtPnZtX2lkKQorCQlyZXR1cm4gMDsKKworCUFTU0VSVChpbmZvLT52bWVtX3ZtYSA9PSBOVUxM ICYmIGluZm8tPnZtZW1fdm1hX2xvd18xbWIgPT0gTlVMTCk7CisKKwlpbmZvLT52bWVtX3N6ID0g eGVuX2dldF9tYXhfZ3Bmbih2Z3QtPnZtX2lkKSArIDE7CisJaW5mby0+dm1lbV9zeiA8PD0gUEFH RV9TSElGVDsKKworCS8qIHdhcm4gb24gbm9uLTFNQi1hbGlnbmVkIG1lbW9yeSBsYXlvdXQgb2Yg SFZNICovCisJaWYgKGluZm8tPnZtZW1fc3ogJiB+Vk1FTV9CVUNLX01BU0spCisJCWd2dF9lcnIo IlZNJWQ6IHZtZW1fc3o9MHglbGx4IVxuIiwgdmd0LT52bV9pZCwgaW5mby0+dm1lbV9zeik7CisK Kwlucl9sb3dfMW1iX2JrdCA9IFZNRU1fMU1CID4+IFBBR0VfU0hJRlQ7CisJbnJfaGlnaF9ia3Qg PSAoaW5mby0+dm1lbV9zeiA+PiBWTUVNX0JVQ0tfU0hJRlQpOworCW5yX2hpZ2hfNGtfYmt0ID0g KGluZm8tPnZtZW1fc3ogPj4gUEFHRV9TSElGVCk7CisKKwlpbmZvLT52bWVtX3ZtYV9sb3dfMW1i ID0KKwkJdnphbGxvYyhzaXplb2YoKmluZm8tPnZtZW1fdm1hKSAqIG5yX2xvd18xbWJfYmt0KTsK KwlpbmZvLT52bWVtX3ZtYSA9CisJCXZ6YWxsb2Moc2l6ZW9mKCppbmZvLT52bWVtX3ZtYSkgKiBu cl9oaWdoX2JrdCk7CisJaW5mby0+dm1lbV92bWFfNGsgPQorCQl2emFsbG9jKHNpemVvZigqaW5m by0+dm1lbV92bWEpICogbnJfaGlnaF80a19ia3QpOworCisJaWYgKGluZm8tPnZtZW1fdm1hX2xv d18xbWIgPT0gTlVMTCB8fCBpbmZvLT52bWVtX3ZtYSA9PSBOVUxMIHx8CisJCWluZm8tPnZtZW1f dm1hXzRrID09IE5VTEwpIHsKKwkJZ3Z0X2VycigiSW5zdWZmaWNpZW50IG1lbW9yeSBmb3Igdm1l bV92bWEsIHZtZW1fc3o9MHglbGx4XG4iLAorCQkJCWluZm8tPnZtZW1fc3ogKTsKKwkJZ290byBl cnI7CisJfQorCisJLyogbWFwIHRoZSBsb3cgMU1CIG1lbW9yeSAqLworCWZvciAoaSA9IDA7IGkg PCBucl9sb3dfMW1iX2JrdDsgaSsrKSB7CisJCWluZm8tPnZtZW1fdm1hX2xvd18xbWJbaV0gPQor CQkJeGVuX3JlbWFwX2RvbWFpbl9tZm5fcmFuZ2VfaW5fa2VybmVsKGksIDEsIHZndC0+dm1faWQp OworCisJCWlmIChpbmZvLT52bWVtX3ZtYV9sb3dfMW1iW2ldICE9IE5VTEwpCisJCQljb250aW51 ZTsKKworCQkvKiBEb24ndCB3YXJuIG9uIFsweGEwMDAwLCAweDEwMDAwMCk6IGEga25vd24gbm9u LVJBTSBob2xlICovCisJCWlmIChpIDwgKDB4YTAwMDAgPj4gUEFHRV9TSElGVCkpCisJCQlwcmlu dGsoS0VSTl9FUlIgIkdWVDogVk0lZDogY2FuJ3QgbWFwIEdQRk4gJWxkIVxuIiwKKwkJCQl2Z3Qt PnZtX2lkLCBpKTsKKwl9CisKKwlwcmludGsoInN0YXJ0IHZtZW1fbWFwXG4iKTsKKwljb3VudCA9 IDA7CisJLyogbWFwIHRoZSA+MU1CIG1lbW9yeSAqLworCWZvciAoaSA9IDE7IGkgPCBucl9oaWdo X2JrdDsgaSsrKSB7CisJCWdwZm4gPSBpIDw8IChWTUVNX0JVQ0tfU0hJRlQgLSBQQUdFX1NISUZU KTsKKwkJaW5mby0+dm1lbV92bWFbaV0gPSB4ZW5fcmVtYXBfZG9tYWluX21mbl9yYW5nZV9pbl9r ZXJuZWwoCisJCQkJZ3BmbiwgVk1FTV9CVUNLX1NJWkUgPj4gUEFHRV9TSElGVCwgdmd0LT52bV9p ZCk7CisKKwkJaWYgKGluZm8tPnZtZW1fdm1hW2ldICE9IE5VTEwpCisJCQljb250aW51ZTsKKwor CisJCS8qIGZvciA8NEcgR1BGTnM6IHNraXAgdGhlIGhvbGUgYWZ0ZXIgbG93X21lbV9tYXhfZ3Bm biAqLworCQlpZiAoZ3BmbiA8ICgxIDw8ICgzMiAtIFBBR0VfU0hJRlQpKSAmJgorCQkJdmd0LT5s b3dfbWVtX21heF9ncGZuICE9IDAgJiYKKwkJCWdwZm4gPiB2Z3QtPmxvd19tZW1fbWF4X2dwZm4p CisJCQljb250aW51ZTsKKworCQlmb3IgKGogPSBncGZuOworCQkgICAgIGogPCAoKGkgKyAxKSA8 PCAoVk1FTV9CVUNLX1NISUZUIC0gUEFHRV9TSElGVCkpOworCQkgICAgIGorKykgeworCQkJaW5m by0+dm1lbV92bWFfNGtbal0gPSB4ZW5fcmVtYXBfZG9tYWluX21mbl9yYW5nZV9pbl9rZXJuZWwo aiwgMSwgdmd0LT52bV9pZCk7CisKKwkJCWlmIChpbmZvLT52bWVtX3ZtYV80a1tqXSkgeworCQkJ CWNvdW50Kys7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJtYXAgNGsgZ3BhICglbHgpXG4iLCBqIDw8 IFBBR0VfU0hJRlQpOworCQkJfQorCQl9CisKKwkJLyogVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Yg ZXJyIG1lc3NhZ2VzKHNvbWUgb2YgdGhlbSwgZHVlIHRvCisJCSAqIHRoZSBNTUlPIGhvbGUsIGFy ZSBzcHVyaW91cyBhbmQgaGFybWxlc3MpIHdlIG9ubHkgcHJpbnQgYQorCQkgKiBtZXNzYWdlIGlm IGl0J3MgYXQgZXZlcnkgNjRNQiBib3VuZGFyeSBvciA+NEdCIG1lbW9yeS4KKwkJICovCisJCWlm ICgoaSAlIDY0ID09IDApIHx8IChpID49ICgxVUxMIDw8ICgzMiAtIFZNRU1fQlVDS19TSElGVCkp KSkKKwkJCXByaW50ayhLRVJOX0VSUiAiR1ZUOiBWTSVkOiBjYW4ndCBtYXAgJWxkS0JcbiIsCisJ CQkJdmd0LT52bV9pZCwgaSk7CisJfQorCXByaW50aygiZW5kIHZtZW1fbWFwICglbGQgNGsgbWFw cGluZ3MpXG4iLCBjb3VudCk7CisKKwlyZXR1cm4gMDsKK2VycjoKKwl2ZnJlZShpbmZvLT52bWVt X3ZtYSk7CisJdmZyZWUoaW5mby0+dm1lbV92bWFfbG93XzFtYik7CisJdmZyZWUoaW5mby0+dm1l bV92bWFfNGspOworCWluZm8tPnZtZW1fdm1hID0gaW5mby0+dm1lbV92bWFfbG93XzFtYiA9IGlu Zm8tPnZtZW1fdm1hXzRrID0gTlVMTDsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZv aWQgdmd0X3ZtZW1fZGVzdHJveShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0KQoreworCWludCBpLCBq OworCXVuc2lnbmVkIGxvbmcgbnJfbG93XzFtYl9ia3QsIG5yX2hpZ2hfYmt0LCBucl9oaWdoX2Jr dF80azsKKwlzdHJ1Y3QgZ3Z0X2h2bV9pbmZvICppbmZvID0gdmd0LT5oeXBlcnZpc29yX2RhdGE7 CisKKwlpZiAodmd0LT52bV9pZCA9PSAwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIE1heWJlIHRo ZSBWTSBoYXNuJ3QgYWNjZXNzZWQgR0VOIE1NSU8oZS5nLiwgc3RpbGwgaW4gdGhlIGxlZ2FjeSBW R0EKKwkgKiBtb2RlKSwgc28gbm8gbWFwcGluZyBpcyBjcmVhdGVkIHlldC4KKwkgKi8KKwlpZiAo aW5mby0+dm1lbV92bWEgPT0gTlVMTCAmJiBpbmZvLT52bWVtX3ZtYV9sb3dfMW1iID09IE5VTEwp CisJCXJldHVybjsKKworCUFTU0VSVChpbmZvLT52bWVtX3ZtYSAhPSBOVUxMICYmIGluZm8tPnZt ZW1fdm1hX2xvd18xbWIgIT0gTlVMTCk7CisKKwlucl9sb3dfMW1iX2JrdCA9IFZNRU1fMU1CID4+ IFBBR0VfU0hJRlQ7CisJbnJfaGlnaF9ia3QgPSAoaW5mby0+dm1lbV9zeiA+PiBWTUVNX0JVQ0tf U0hJRlQpOworCW5yX2hpZ2hfYmt0XzRrID0gKGluZm8tPnZtZW1fc3ogPj4gUEFHRV9TSElGVCk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfbG93XzFtYl9ia3Q7IGkrKykgeworCQlpZiAoaW5mby0+ dm1lbV92bWFfbG93XzFtYltpXSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCXhlbl91bm1hcF9k b21haW5fbWZuX3JhbmdlX2luX2tlcm5lbChpbmZvLT52bWVtX3ZtYV9sb3dfMW1iW2ldLAorCQkJ CTEsIHZndC0+dm1faWQpOworCX0KKworCWZvciAoaSA9IDE7IGkgPCBucl9oaWdoX2JrdDsgaSsr KSB7CisJCWlmIChpbmZvLT52bWVtX3ZtYVtpXSA9PSBOVUxMKSB7CisJCQlmb3IgKGogPSAoaSA8 PCAoVk1FTV9CVUNLX1NISUZUIC0gUEFHRV9TSElGVCkpOworCQkJICAgICBqIDwgKChpICsgMSkg PDwgKFZNRU1fQlVDS19TSElGVCAtIFBBR0VfU0hJRlQpKTsKKwkJCSAgICAgaisrKSB7CisJCQkJ aWYgKGluZm8tPnZtZW1fdm1hXzRrW2pdID09IE5VTEwpCisJCQkJCWNvbnRpbnVlOworCQkJCXhl bl91bm1hcF9kb21haW5fbWZuX3JhbmdlX2luX2tlcm5lbCgKKwkJCQkJaW5mby0+dm1lbV92bWFf NGtbal0sIDEsIHZndC0+dm1faWQpOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJeGVuX3Vu bWFwX2RvbWFpbl9tZm5fcmFuZ2VfaW5fa2VybmVsKAorCQkJaW5mby0+dm1lbV92bWFbaV0sIFZN RU1fQlVDS19TSVpFID4+IFBBR0VfU0hJRlQsCisJCQl2Z3QtPnZtX2lkKTsKKwl9CisKKwl2ZnJl ZShpbmZvLT52bWVtX3ZtYSk7CisJdmZyZWUoaW5mby0+dm1lbV92bWFfbG93XzFtYik7CisJdmZy ZWUoaW5mby0+dm1lbV92bWFfNGspOworfQorCitzdGF0aWMgaW50IF9odm1fbW1pb19lbXVsYXRp b24oc3RydWN0IHZndF9kZXZpY2UgKnZndCwgc3RydWN0IGlvcmVxICpyZXEpCit7CisJaW50IGks IHNpZ247CisJdm9pZCAqZ3ZhOworCXVuc2lnbmVkIGxvbmcgZ3BhOworCXVpbnQ2NF90IGJhc2Ug PSBndnRfbW1pb19iYXJfYmFzZSh2Z3QpOworCXVpbnQ2NF90IHRtcDsKKwlpbnQgcHZpbmZvX3Bh Z2U7CisJc3RydWN0IGd2dF9odm1faW5mbyAqaW5mbyA9IHZndC0+aHlwZXJ2aXNvcl9kYXRhOwor CisJaWYgKGluZm8tPnZtZW1fdm1hID09IE5VTEwpIHsKKwkJdG1wID0gZ3Z0X2hvc3QubXB0X29w cy0+cGFfdG9fbW1pb19vZmZzZXQodmd0LCByZXEtPmFkZHIpOworCQlwdmluZm9fcGFnZSA9ICh0 bXAgPj0gVkdUX1BWSU5GT19QQUdFCisJCQkJJiYgdG1wIDwgKFZHVF9QVklORk9fUEFHRSArIFZH VF9QVklORk9fU0laRSkpOworCQkvKgorCQkgKiBodm1sb2FkZXIgd2lsbCByZWFkIFBWSU5GTyB0 byBpZGVudGlmeSBpZiBIVk0gaXMgaW4gR1ZUCisJCSAqIG9yIFZURC4gU28gd2UgZG9uJ3QgdHJp Z2dlciBIVk0gbWFwcGluZyBsb2dpYyBoZXJlLgorCQkgKi8KKwkJaWYgKCFwdmluZm9fcGFnZSAm JiB2Z3RfaHZtX3ZtZW1faW5pdCh2Z3QpIDwgMCkgeworCQkJZ3Z0X2VycigiY2FuIG5vdCBtYXAg dGhlIG1lbW9yeSBvZiBWTSVkISEhXG4iLCB2Z3QtPnZtX2lkKTsKKwkJCVhFTl9BU1NFUlRfVk0o aW5mby0+dm1lbV92bWEgIT0gTlVMTCwgdmd0KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJ fQorCisJc2lnbiA9IHJlcS0+ZGYgPyAtMSA6IDE7CisKKwlpZiAocmVxLT5kaXIgPT0gSU9SRVFf UkVBRCkgeworCQkvKiBNTUlPIFJFQUQgKi8KKwkJaWYgKCFyZXEtPmRhdGFfaXNfcHRyKSB7CisJ CQlpZiAocmVxLT5jb3VudCAhPSAxKQorCQkJCWdvdG8gZXJyX2lvcmVxX2NvdW50OworCisJCQkv L3ZndF9kYmcoR1ZUX0RCR19HRU5FUklDLCJIVk1fTU1JT19yZWFkOiB0YXJnZXQgcmVnaXN0ZXIg KCVseCkuXG4iLAorCQkJLy8JKHVuc2lnbmVkIGxvbmcpcmVxLT5hZGRyKTsKKwkJCWlmICghZ3Z0 X2hvc3QuZW11bGF0ZV9vcHMtPmVtdWxhdGVfbW1pb19yZWFkKHZndCwgcmVxLT5hZGRyLCAmcmVx LT5kYXRhLCByZXEtPnNpemUpKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWVsc2Ugewor CQkJaWYgKChyZXEtPmFkZHIgKyBzaWduICogcmVxLT5jb3VudCAqIHJlcS0+c2l6ZSA8IGJhc2Up CisJCQkgICB8fCAocmVxLT5hZGRyICsgc2lnbiAqIHJlcS0+Y291bnQgKiByZXEtPnNpemUgPj0K KwkJCQliYXNlICsgdmd0LT5zdGF0ZS5jZmcuYmFyX3NpemVbMF0pKQorCQkJCWdvdG8gZXJyX2lv cmVxX3JhbmdlOworCQkJLy92Z3RfZGJnKEdWVF9EQkdfR0VORVJJQywiSFZNX01NSU9fcmVhZDog cmVwICVkIHRhcmdldCBtZW1vcnkgJWx4LCBzbG93IVxuIiwKKwkJCS8vCXJlcS0+Y291bnQsICh1 bnNpZ25lZCBsb25nKXJlcS0+YWRkcik7CisKKwkJCWZvciAoaSA9IDA7IGkgPCByZXEtPmNvdW50 OyBpKyspIHsKKwkJCQlpZiAoIWd2dF9ob3N0LmVtdWxhdGVfb3BzLT5lbXVsYXRlX21taW9fcmVh ZCh2Z3QsIHJlcS0+YWRkciArIHNpZ24gKiBpICogcmVxLT5zaXplLAorCQkJCQkmdG1wLCByZXEt PnNpemUpKQorCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQlncGEgPSByZXEtPmRhdGEgKyBzaWdu ICogaSAqIHJlcS0+c2l6ZTsKKwkJCQlpZighdmd0LT52bV9pZCkKKwkJCQkJZ3ZhID0gKGNoYXIg Kil4ZW5fbWZuX3RvX3ZpcnQoZ3BhID4+IFBBR0VfU0hJRlQpICsgb2Zmc2V0X2luX3BhZ2UoZ3Bh KTsKKwkJCQllbHNlCisJCQkJCWd2YSA9IHhlbl9ncGFfdG9fdmEodmd0LCBncGEpOworCQkJCWlm IChndmEpIHsKKwkJCQkJbWVtY3B5KGd2YSwgJnRtcCwgcmVxLT5zaXplKTsKKwkJCQl9IGVsc2UK KwkJCQkJZ3Z0X2VycigiVk0gJWQgaXMgdHJ5aW5nIHRvIHN0b3JlIG1taW8gZGF0YSBibG9jayB0 byBpbnZhbGlkIGdwYTogMHglbHguXG4iLCB2Z3QtPnZtX2lkLCBncGEpOworCQkJfQorCQl9CisJ fQorCWVsc2UgeyAvKiBNTUlPIFdyaXRlICovCisJCWlmICghcmVxLT5kYXRhX2lzX3B0cikgewor CQkJaWYgKHJlcS0+Y291bnQgIT0gMSkKKwkJCQlnb3RvIGVycl9pb3JlcV9jb3VudDsKKwkJCS8v dmd0X2RiZyhHVlRfREJHX0dFTkVSSUMsIkhWTV9NTUlPX3dyaXRlOiB0YXJnZXQgcmVnaXN0ZXIg KCVseCkuXG4iLCAodW5zaWduZWQgbG9uZylyZXEtPmFkZHIpOworCQkJaWYgKCFndnRfaG9zdC5l bXVsYXRlX29wcy0+ZW11bGF0ZV9tbWlvX3dyaXRlKHZndCwgcmVxLT5hZGRyLCAmcmVxLT5kYXRh LCByZXEtPnNpemUpKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWVsc2UgeworCQkJaWYg KChyZXEtPmFkZHIgKyBzaWduICogcmVxLT5jb3VudCAqIHJlcS0+c2l6ZSA8IGJhc2UpCisJCQkg ICAgfHwgKHJlcS0+YWRkciArIHNpZ24gKiByZXEtPmNvdW50ICogcmVxLT5zaXplID49CisJCQkJ YmFzZSArIHZndC0+c3RhdGUuY2ZnLmJhcl9zaXplWzBdKSkKKwkJCQlnb3RvIGVycl9pb3JlcV9y YW5nZTsKKwkJCS8vdmd0X2RiZyhHVlRfREJHX0dFTkVSSUMsIkhWTV9NTUlPX3dyaXRlOiByZXAg JWQgdGFyZ2V0IG1lbW9yeSAlbHgsIHNsb3chXG4iLAorCQkJLy8JcmVxLT5jb3VudCwgKHVuc2ln bmVkIGxvbmcpcmVxLT5hZGRyKTsKKworCQkJZm9yIChpID0gMDsgaSA8IHJlcS0+Y291bnQ7IGkr KykgeworCQkJCWdwYSA9IHJlcS0+ZGF0YSArIHNpZ24gKiBpICogcmVxLT5zaXplOworCQkJCWlm KCF2Z3QtPnZtX2lkKQorCQkJCQlndmEgPSAoY2hhciAqKXhlbl9tZm5fdG9fdmlydChncGEgPj4g UEFHRV9TSElGVCkgKyBvZmZzZXRfaW5fcGFnZShncGEpOworCQkJCWVsc2UKKwkJCQkJZ3ZhID0g eGVuX2dwYV90b192YSh2Z3QsIGdwYSk7CisKKwkJCQlpZiAoZ3ZhICE9IE5VTEwpCisJCQkJCW1l bWNweSgmdG1wLCBndmEsIHJlcS0+c2l6ZSk7CisJCQkJZWxzZSB7CisJCQkJCXRtcCA9IDA7CisJ CQkJCXByaW50ayhLRVJOX0VSUiAiR1ZUOiBjYW4gbm90IHJlYWQgZ3BhID0gMHglbHghISFcbiIs IGdwYSk7CisJCQkJfQorCQkJCWlmICghZ3Z0X2hvc3QuZW11bGF0ZV9vcHMtPmVtdWxhdGVfbW1p b193cml0ZSh2Z3QsIHJlcS0+YWRkciArIHNpZ24gKiBpICogcmVxLT5zaXplLCAmdG1wLCByZXEt PnNpemUpKQorCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAw OworCitlcnJfaW9yZXFfY291bnQ6CisJZ3Z0X2VycigiVk0oJWQpOiBVbmV4cGVjdGVkICVzIHJl cXVlc3QgY291bnQoJWQpXG4iLAorCQl2Z3QtPnZtX2lkLCByZXEtPmRpciA9PSBJT1JFUV9SRUFE ID8gInJlYWQiIDogIndyaXRlIiwKKwkJcmVxLT5jb3VudCk7CisJcmV0dXJuIC1FSU5WQUw7CisK K2Vycl9pb3JlcV9yYW5nZToKKwlndnRfZXJyKCJWTSglZCk6IEludmFsaWQgJXMgcmVxdWVzdCBh ZGRyIGVuZCglMDE2bGx4KVxuIiwKKwkJdmd0LT52bV9pZCwgcmVxLT5kaXIgPT0gSU9SRVFfUkVB RCA/ICJyZWFkIiA6ICJ3cml0ZSIsCisJCXJlcS0+YWRkciArIHNpZ24gKiByZXEtPmNvdW50ICog cmVxLT5zaXplKTsKKwlyZXR1cm4gLUVSQU5HRTsKK30KKworc3RhdGljIGJvb2wgdmd0X2h2bV93 cml0ZV9jZmdfc3BhY2Uoc3RydWN0IHZndF9kZXZpY2UgKnZndCwKKwl1aW50NjRfdCBhZGRyLCB1 bnNpZ25lZCBpbnQgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCS8qIExvdyAzMiBiaXQg b2YgYWRkciBpcyByZWFsIGFkZHJlc3MsIGhpZ2ggMzIgYml0IGlzIGJkZiAqLworCXVuc2lnbmVk IGludCBwb3J0ID0gYWRkciAmIDB4ZmZmZmZmZmY7CisKKwlBU1NFUlQoKChieXRlcyA9PSA0KSAm JiAoKHBvcnQgJiAzKSA9PSAwKSkgfHwKKwkJKChieXRlcyA9PSAyKSAmJiAoKHBvcnQgJiAxKSA9 PSAwKSkgfHwgKGJ5dGVzID09IDEpKTsKKwlndnRfaG9zdC5lbXVsYXRlX29wcy0+ZW11bGF0ZV9j Zmdfd3JpdGUodmd0LCBwb3J0LCAmdmFsLCBieXRlcyk7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0 YXRpYyBib29sIHZndF9odm1fcmVhZF9jZmdfc3BhY2Uoc3RydWN0IHZndF9kZXZpY2UgKnZndCwK Kwl1aW50NjRfdCBhZGRyLCB1bnNpZ25lZCBpbnQgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnZhbCkK K3sKKwl1bnNpZ25lZCBsb25nIGRhdGE7CisJLyogTG93IDMyIGJpdCBvZiBhZGRyIGlzIHJlYWwg YWRkcmVzcywgaGlnaCAzMiBiaXQgaXMgYmRmICovCisJdW5zaWduZWQgaW50IHBvcnQgPSBhZGRy ICYgMHhmZmZmZmZmZjsKKworCUFTU0VSVCAoKChieXRlcyA9PSA0KSAmJiAoKHBvcnQgJiAzKSA9 PSAwKSkgfHwKKwkJKChieXRlcyA9PSAyKSAmJiAoKHBvcnQgJiAxKSA9PSAwKSkgfHwgKGJ5dGVz ID09IDEpKTsKKwlndnRfaG9zdC5lbXVsYXRlX29wcy0+ZW11bGF0ZV9jZmdfcmVhZCh2Z3QsIHBv cnQsICZkYXRhLCBieXRlcyk7CisJbWVtY3B5KHZhbCwgJmRhdGEsIGJ5dGVzKTsKKwlyZXR1cm4g dHJ1ZTsKK30KKworc3RhdGljIGludCBfaHZtX3Bpb19lbXVsYXRpb24oc3RydWN0IHZndF9kZXZp Y2UgKnZndCwgc3RydWN0IGlvcmVxICppb3JlcSkKK3sKKwlpbnQgc2lnbjsKKworCXNpZ24gPSBp b3JlcS0+ZGYgPyAtMSA6IDE7CisKKwlpZiAoaW9yZXEtPmRpciA9PSBJT1JFUV9SRUFEKSB7CisJ CS8qIFBJTyBSRUFEICovCisJCWlmICghaW9yZXEtPmRhdGFfaXNfcHRyKSB7CisJCQlpZighdmd0 X2h2bV9yZWFkX2NmZ19zcGFjZSh2Z3QsCisJCQkJaW9yZXEtPmFkZHIsCisJCQkJaW9yZXEtPnNp emUsCisJCQkJKHVuc2lnbmVkIGxvbmcqKSZpb3JlcS0+ZGF0YSkpCisJCQkJcmV0dXJuIC1FSU5W QUw7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkdWVDogX2h2bV9waW9fZW11bGF0 aW9uIHJlYWQgZGF0YV9wdHIgJWx4XG4iLAorCQkJKGxvbmcpaW9yZXEtPmRhdGEpOworCQkJZ290 byBlcnJfZGF0YV9wdHI7CisJCX0KKwl9IGVsc2UgeworCQkvKiBQSU8gV1JJVEUgKi8KKwkJaWYg KCFpb3JlcS0+ZGF0YV9pc19wdHIpIHsKKwkJCWlmICghdmd0X2h2bV93cml0ZV9jZmdfc3BhY2Uo dmd0LAorCQkJCWlvcmVxLT5hZGRyLAorCQkJCWlvcmVxLT5zaXplLAorCQkJCSh1bnNpZ25lZCBs b25nKWlvcmVxLT5kYXRhKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlIHsKKwkJCXBy aW50ayhLRVJOX0VSUiAiR1ZUOiBfaHZtX3Bpb19lbXVsYXRpb24gd3JpdGUgZGF0YV9wdHIgJWx4 XG4iLAorCQkJKGxvbmcpaW9yZXEtPmRhdGEpOworCQkJZ290byBlcnJfZGF0YV9wdHI7CisJCX0K Kwl9CisJcmV0dXJuIDA7CitlcnJfZGF0YV9wdHI6CisJLyogVGhlIGRhdGEgcG9pbnRlciBvZiBl bXVsYXRpb24gaXMgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcworCSAqIHNvIGZhciwgd2hpY2ggZ29l cyB0byBRZW11IGVtdWxhdGlvbiwgYnV0IGhhcmQgZm9yCisJICogR1ZUIGRyaXZlciB3aGljaCBk b2Vzbid0IGtub3cgZ3BuXzJfbWZuIHRyYW5zbGF0aW9uLgorCSAqIFdlIG1heSBhc2sgaHlwZXJ2 aXNvciB0byB1c2UgbWZuIGZvciBHVlQgZHJpdmVyLgorCSAqIFdlIG1hcmsgaXQgYXMgdW5zdXBw b3J0ZWQgaW4gY2FzZSBndWVzdCByZWFsbHkgaXQuCisJICovCisJZ3Z0X2VycigiVk0oJWQpOiBV bnN1cHBvcnRlZCAlcyBkYXRhX3B0ciglbHgpXG4iLAorCQl2Z3QtPnZtX2lkLCBpb3JlcS0+ZGly ID09IElPUkVRX1JFQUQgPyAicmVhZCIgOiAid3JpdGUiLAorCQkobG9uZylpb3JlcS0+ZGF0YSk7 CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKyNkZWZpbmUgUENJX0JERjIoYixkZikgICgoKChiKSAm IDB4ZmYpIDw8IDgpIHwgKChkZikgJiAweGZmKSkKKworc3RhdGljIGludCB2Z3RfaHZtX2RvX2lv cmVxKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHN0cnVjdCBpb3JlcSAqaW9yZXEpCit7CisJc3Ry dWN0IHBndF9kZXZpY2UgKnBkZXYgPSB2Z3QtPnBkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9k ZXYgPSBwZGV2LT5kZXZfcHJpdi0+ZGV2LT5wZGV2OworCXVpbnQ2NF90IGJkZiA9IFBDSV9CREYy KHBjaV9kZXYtPmJ1cy0+bnVtYmVyLCBwY2lfZGV2LT5kZXZmbik7CisKKwkvKiBXaGVuIHVzaW5n IGlvcmVxLXNlcnZlciwgc29tZXRpbWVzIGFuIGV2ZW50IGNoYW5uYWwKKwkgKiBub3RpZmljYXRp b24gaXMgcmVjZWl2ZWQgd2l0aCBpbnZhbGlkIGlvcmVxLiBEb24ndAorCSAqIGtub3cgdGhlIHJv b3QgY2F1c2UuIFB1dCB0aGUgd29ya2Fyb3VuZCBoZXJlLgorCSAqLworCWlmIChpb3JlcS0+c3Rh dGUgPT0gU1RBVEVfSU9SRVFfTk9ORSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaW9yZXEtPnR5cGUg PT0gSU9SRVFfVFlQRV9JTlZBTElEQVRFKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoaW9yZXEt PnR5cGUpIHsKKwkJY2FzZSBJT1JFUV9UWVBFX1BDSV9DT05GSUc6CisJCS8qIEhpZ2ggMzIgYml0 IG9mIGlvcmVxLT5hZGRyIGlzIGJkZiAqLworCQlpZiAoKGlvcmVxLT5hZGRyID4+IDMyKSAhPSBi ZGYpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiR1ZUOiBVbmV4cGVjdGVkIFBDSSBEZXYgJWx4IGVt dWxhdGlvblxuIiwKKwkJCQkodW5zaWduZWQgbG9uZykgKGlvcmVxLT5hZGRyPj4zMikpOworCQkJ CXJldHVybiAtRUlOVkFMOworCQkJfSBlbHNlCisJCQkJcmV0dXJuIF9odm1fcGlvX2VtdWxhdGlv bih2Z3QsIGlvcmVxKTsKKwkJCWJyZWFrOworCQljYXNlIElPUkVRX1RZUEVfQ09QWToJLyogTU1J TyAqLworCQkJcmV0dXJuIF9odm1fbW1pb19lbXVsYXRpb24odmd0LCBpb3JlcSk7CisJCQlicmVh azsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0VSUiAiR1ZUOiBVbmtub3duIGlvcmVxIHR5 cGUgJXggYWRkciAlbGx4IHNpemUgJXUgc3RhdGUgJXVcbiIsCisJCQkJaW9yZXEtPnR5cGUsIGlv cmVxLT5hZGRyLCBpb3JlcS0+c2l6ZSwgaW9yZXEtPnN0YXRlKTsKKwkJCXJldHVybiAtRUlOVkFM OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlvcmVxICp2Z3RfZ2V0X2h2 bV9pb3JlcShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCBpbnQgdmNwdSkKK3sKKwlzdHJ1Y3QgZ3Z0 X2h2bV9pbmZvICppbmZvID0gdmd0LT5oeXBlcnZpc29yX2RhdGE7CisJcmV0dXJuICYoaW5mby0+ aW9wYWdlLT52Y3B1X2lvcmVxW3ZjcHVdKTsKK30KKworc3RhdGljIGludCB2Z3RfZW11bGF0aW9u X3RocmVhZCh2b2lkICpwcml2KQoreworCXN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QgPSAoc3RydWN0 IHZndF9kZXZpY2UgKilwcml2OworCXN0cnVjdCBndnRfaHZtX2luZm8gKmluZm8gPSB2Z3QtPmh5 cGVydmlzb3JfZGF0YTsKKworCWludCB2Y3B1OworCWludCBucl92Y3B1cyA9IGluZm8tPm5yX3Zj cHU7CisKKwlzdHJ1Y3QgaW9yZXEgKmlvcmVxOworCWludCBpcnEsIHJldDsKKworCWd2dF9pbmZv KCJzdGFydCBrdGhyZWFkIGZvciBWTSVkXG4iLCB2Z3QtPnZtX2lkKTsKKworCUFTU0VSVChpbmZv LT5ucl92Y3B1IDw9IE1BWF9IVk1fVkNQVVNfU1VQUE9SVEVEKTsKKworCXNldF9mcmVlemFibGUo KTsKKwl3aGlsZSAoMSkgeworCQlyZXQgPSB3YWl0X2V2ZW50X2ZyZWV6YWJsZShpbmZvLT5pb19l dmVudF93cSwKKwkJCWt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fAorCQkJYml0bWFwX3dlaWdodChp bmZvLT5pb3JlcV9wZW5kaW5nLCBucl92Y3B1cykpOworCisJCWlmIChrdGhyZWFkX3Nob3VsZF9z dG9wKCkpCisJCQlyZXR1cm4gMDsKKworCQlpZiAocmV0KQorCQkJZ3Z0X2VycigiRW11bGF0aW9u IHRocmVhZCglZCkgd2FrZW4gdXAiCisJCQkJICJieSB1bmV4cGVjdGVkIHNpZ25hbCFcbiIsIHZn dC0+dm1faWQpOworCisJCWZvciAodmNwdSA9IDA7IHZjcHUgPCBucl92Y3B1czsgdmNwdSsrKSB7 CisJCQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdCh2Y3B1LCBpbmZvLT5pb3JlcV9wZW5kaW5nKSkK KwkJCQljb250aW51ZTsKKworCQkJaW9yZXEgPSB2Z3RfZ2V0X2h2bV9pb3JlcSh2Z3QsIHZjcHUp OworCisJCQlpZiAodmd0X2h2bV9kb19pb3JlcSh2Z3QsIGlvcmVxKSkgeworCQkJCXhlbl9wYXVz ZV9kb21haW4odmd0LT52bV9pZCk7CisJCQkJeGVuX3NodXRkb3duX2RvbWFpbih2Z3QtPnZtX2lk KTsKKwkJCX0KKworCQkJaW9yZXEtPnN0YXRlID0gU1RBVEVfSU9SRVNQX1JFQURZOworCisJCQlp cnEgPSBpbmZvLT5ldnRjaG5faXJxW3ZjcHVdOworCQkJbm90aWZ5X3JlbW90ZV92aWFfaXJxKGly cSk7CisJCX0KKwl9CisKKwlCVUcoKTsgLyogSXQncyBhY3R1YWxseSBpbXBvc3NpYmxlIHRvIHJl YWNoIGhlcmUgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZndF9yYWlz ZV9lbXVsYXRpb25fcmVxdWVzdChzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0LAorCWludCB2Y3B1KQor eworCXN0cnVjdCBndnRfaHZtX2luZm8gKmluZm8gPSB2Z3QtPmh5cGVydmlzb3JfZGF0YTsKKwlz ZXRfYml0KHZjcHUsIGluZm8tPmlvcmVxX3BlbmRpbmcpOworCWlmICh3YWl0cXVldWVfYWN0aXZl KCZpbmZvLT5pb19ldmVudF93cSkpCisJCXdha2VfdXAoJmluZm8tPmlvX2V2ZW50X3dxKTsKK30K Kworc3RhdGljIGlycXJldHVybl90IHZndF9odm1faW9fcmVxX2hhbmRsZXIoaW50IGlycSwgdm9p ZCogZGV2KQoreworCXN0cnVjdCB2Z3RfZGV2aWNlICp2Z3Q7CisJc3RydWN0IGd2dF9odm1faW5m byAqaW5mbzsKKwlpbnQgdmNwdTsKKworCXZndCA9IChzdHJ1Y3Qgdmd0X2RldmljZSAqKWRldjsK KwlpbmZvID0gdmd0LT5oeXBlcnZpc29yX2RhdGE7CisKKwlmb3IodmNwdT0wOyB2Y3B1IDwgaW5m by0+bnJfdmNwdTsgdmNwdSsrKXsKKwkJaWYoaW5mby0+ZXZ0Y2huX2lycVt2Y3B1XSA9PSBpcnEp CisJCQlicmVhazsKKwl9CisJaWYgKHZjcHUgPT0gaW5mby0+bnJfdmNwdSl7CisJCS8qb3Bwcywg aXJxIGlzIG5vdCB0aGUgcmVnaXN0ZXJlZCBvbmUqLworCQlndnRfaW5mbygiUmVjZWl2ZWQgYSBJ T1JFUSB3L28gdmNwdSB0YXJnZXRcbiIpOworCQlndnRfaW5mbygiUG9zc2libGUgYSBmYWxzZSBy ZXF1ZXN0IGZyb20gZXZlbnQgYmluZGluZ1xuIik7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisK Kwl2Z3RfcmFpc2VfZW11bGF0aW9uX3JlcXVlc3Qodmd0LCB2Y3B1KTsKKworCXJldHVybiBJUlFf SEFORExFRDsKK30KKworc3RhdGljIHZvaWQgeGVuX2h2bV9leGl0KHN0cnVjdCB2Z3RfZGV2aWNl ICp2Z3QpCit7CisJc3RydWN0IGd2dF9odm1faW5mbyAqaW5mbzsKKwlpbnQgdmNwdTsKKworCWlu Zm8gPSB2Z3QtPmh5cGVydmlzb3JfZGF0YTsKKworCWlmIChpbmZvID09IE5VTEwpCisJCXJldHVy bjsKKworCWlmIChpbmZvLT5lbXVsYXRpb25fdGhyZWFkICE9IE5VTEwpCisJCWt0aHJlYWRfc3Rv cChpbmZvLT5lbXVsYXRpb25fdGhyZWFkKTsKKworCWlmICghaW5mby0+bnJfdmNwdSB8fCBpbmZv LT5ldnRjaG5faXJxID09IE5VTEwpCisJCWdvdG8gb3V0MTsKKworCWlmIChpbmZvLT5pb3Nydl9p ZCAhPSAwKQorCQlodm1fZGVzdHJveV9pb3JlcXVlc3Rfc2VydmVyKHZndCk7CisKKwlmb3IgKHZj cHUgPSAwOyB2Y3B1IDwgaW5mby0+bnJfdmNwdTsgdmNwdSsrKXsKKwkJaWYoaW5mby0+ZXZ0Y2hu X2lycVt2Y3B1XSA+PSAwKQorCQkJdW5iaW5kX2Zyb21faXJxaGFuZGxlcihpbmZvLT5ldnRjaG5f aXJxW3ZjcHVdLCB2Z3QpOworCX0KKworCWlmIChpbmZvLT5pb3BhZ2Vfdm1hICE9IE5VTEwpCisJ CXhlbl91bm1hcF9kb21haW5fbWZuX3JhbmdlX2luX2tlcm5lbChpbmZvLT5pb3BhZ2Vfdm1hLCAx LCB2Z3QtPnZtX2lkKTsKKworCWtmcmVlKGluZm8tPmV2dGNobl9pcnEpOworCitvdXQxOgorCXZn dF92bWVtX2Rlc3Ryb3kodmd0KTsKKwlrZnJlZShpbmZvKTsKK30KKworc3RhdGljIGludCB4ZW5f aHZtX2luaXQoc3RydWN0IHZndF9kZXZpY2UgKnZndCkKK3sKKwlzdHJ1Y3QgZ3Z0X2h2bV9pbmZv ICppbmZvOworCWludCB2Y3B1LCBpcnEsIHJjID0gMDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRo cmVhZDsKKwlzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiA9IHZndC0+cGRldjsKKwlzdHJ1Y3QgcGNp X2RldiAqcGNpX2RldiA9IHBkZXYtPmRldl9wcml2LT5kZXYtPnBkZXY7CisKKwlpbmZvID0ga3ph bGxvYyhzaXplb2Yoc3RydWN0IGd2dF9odm1faW5mbyksIEdGUF9LRVJORUwpOworCWlmIChpbmZv ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJdmd0LT5oeXBlcnZpc29yX2RhdGEgPSBp bmZvOworCisJaW5mby0+aW9wYWdlX3ZtYSA9IHhlbl9tYXBfaW9wYWdlKHZndCk7CisJaWYgKGlu Zm8tPmlvcGFnZV92bWEgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBt YXAgSFZNIEkvTyBwYWdlIGZvciBWTSVkXG4iLCB2Z3QtPnZtX2lkKTsKKwkJcmMgPSAtRUZBVUxU OworCQlnb3RvIGVycjsKKwl9CisJaW5mby0+aW9wYWdlID0gaW5mby0+aW9wYWdlX3ZtYS0+YWRk cjsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPmlvX2V2ZW50X3dxKTsKKworCWluZm8t Pm5yX3ZjcHUgPSB4ZW5fZ2V0X25yX3ZjcHUodmd0LT52bV9pZCk7CisJQVNTRVJUKGluZm8tPm5y X3ZjcHUgPiAwKTsKKwlBU1NFUlQoaW5mby0+bnJfdmNwdSA8PSBNQVhfSFZNX1ZDUFVTX1NVUFBP UlRFRCk7CisKKwlpbmZvLT5ldnRjaG5faXJxID0ga21hbGxvYyhpbmZvLT5ucl92Y3B1ICogc2l6 ZW9mKGludCksIEdGUF9LRVJORUwpOworCWlmIChpbmZvLT5ldnRjaG5faXJxID09IE5VTEwpewor CQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKwlmb3IoIHZjcHUgPSAwOyB2Y3B1IDwg aW5mby0+bnJfdmNwdTsgdmNwdSsrICkKKwkJaW5mby0+ZXZ0Y2huX2lycVt2Y3B1XSA9IC0xOwor CisJcmMgPSBodm1fbWFwX3BjaWRldl90b19pb3JlcV9zZXJ2ZXIodmd0LCBQQ0lfQkRGMihwY2lf ZGV2LT5idXMtPm51bWJlciwgcGNpX2Rldi0+ZGV2Zm4pKTsKKwlpZiAocmMgPCAwKQorCQlnb3Rv IGVycjsKKwlyYyA9IGh2bV90b2dnbGVfaW9yZXF1ZXN0X3NlcnZlcih2Z3QsIDEpOworCWlmIChy YyA8IDApCisJCWdvdG8gZXJyOworCisJZm9yICh2Y3B1ID0gMDsgdmNwdSA8IGluZm8tPm5yX3Zj cHU7IHZjcHUrKyl7CisJCWlycSA9IGJpbmRfaW50ZXJkb21haW5fZXZ0Y2huX3RvX2lycWhhbmRs ZXIoIHZndC0+dm1faWQsCisJCQkJaW5mby0+aW9wYWdlLT52Y3B1X2lvcmVxW3ZjcHVdLnZwX2Vw b3J0LAorCQkJCXZndF9odm1faW9fcmVxX2hhbmRsZXIsIDAsCisJCQkJInZndCIsIHZndCApOwor CQlpZiAoIGlycSA8IDAgKXsKKwkJCXJjID0gaXJxOworCQkJcHJpbnRrKEtFUk5fRVJSICJGYWls ZWQgdG8gYmluZCBldmVudCBjaGFubmxlIGZvciB2Z3QgSFZNIElPIGhhbmRsZXIsIHJjPSVkXG4i LCByYyk7CisJCQlnb3RvIGVycjsKKwkJfQorCQlpbmZvLT5ldnRjaG5faXJxW3ZjcHVdID0gaXJx OworCX0KKworCXRocmVhZCA9IGt0aHJlYWRfcnVuKHZndF9lbXVsYXRpb25fdGhyZWFkLCB2Z3Qs CisJCQkidmd0X2VtdWxhdGlvbjolZCIsIHZndC0+dm1faWQpOworCWlmKElTX0VSUih0aHJlYWQp KQorCQlnb3RvIGVycjsKKwlpbmZvLT5lbXVsYXRpb25fdGhyZWFkID0gdGhyZWFkOworCisJcmV0 dXJuIDA7CisKK2VycjoKKwl4ZW5faHZtX2V4aXQodmd0KTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0 YXRpYyB2b2lkICp4ZW5fZ3BhX3RvX3ZhKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHVuc2lnbmVk IGxvbmcgZ3BhKQoreworCXVuc2lnbmVkIGxvbmcgYnVja19pbmRleCwgYnVja180a19pbmRleDsK KwlzdHJ1Y3QgZ3Z0X2h2bV9pbmZvICppbmZvID0gdmd0LT5oeXBlcnZpc29yX2RhdGE7CisKKwlp ZiAoIXZndC0+dm1faWQpCisJCXJldHVybiAoY2hhciopeGVuX21mbl90b192aXJ0KGdwYT4+UEFH RV9TSElGVCkgKyAoZ3BhICYgKFBBR0VfU0laRS0xKSk7CisJLyoKKwkgKiBBdCB0aGUgYmVnaW5u aW5nIG9mIF9odm1fbW1pb19lbXVsYXRpb24oKSwgd2UgYWxyZWFkeSBpbml0aWFsaXplCisJICog aW5mby0+dm1lbV92bWEgYW5kIGluZm8tPnZtZW1fdm1hX2xvd18xbWIuCisJICovCisJQVNTRVJU KGluZm8tPnZtZW1fdm1hICE9IE5VTEwgJiYgaW5mby0+dm1lbV92bWFfbG93XzFtYiAhPSBOVUxM KTsKKworCS8qIGhhbmRsZSB0aGUgbG93IDFNQiBtZW1vcnkgKi8KKwlpZiAoZ3BhIDwgVk1FTV8x TUIpIHsKKwkJYnVja19pbmRleCA9IGdwYSA+PiBQQUdFX1NISUZUOworCQlpZiAoIWluZm8tPnZt ZW1fdm1hX2xvd18xbWJbYnVja19pbmRleF0pCisJCQlyZXR1cm4gTlVMTDsKKworCQlyZXR1cm4g KGNoYXIqKShpbmZvLT52bWVtX3ZtYV9sb3dfMW1iW2J1Y2tfaW5kZXhdLT5hZGRyKSArCisJCQko Z3BhICYgflBBR0VfTUFTSyk7CisKKwl9CisKKwkvKiBoYW5kbGUgdGhlID4xTUIgbWVtb3J5ICov CisJYnVja19pbmRleCA9IGdwYSA+PiBWTUVNX0JVQ0tfU0hJRlQ7CisKKwlpZiAoIWluZm8tPnZt ZW1fdm1hW2J1Y2tfaW5kZXhdKSB7CisJCWJ1Y2tfNGtfaW5kZXggPSBncGEgPj4gUEFHRV9TSElG VDsKKwkJaWYgKCFpbmZvLT52bWVtX3ZtYV80a1tidWNrXzRrX2luZGV4XSkgeworCQkJaWYgKGJ1 Y2tfNGtfaW5kZXggPiB2Z3QtPmxvd19tZW1fbWF4X2dwZm4pCisJCQkJZ3Z0X2VycigiR1ZUIGZh aWxlZCB0byBtYXAgZ3BhPTB4JWx4P1xuIiwgZ3BhKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisK KwkJcmV0dXJuIChjaGFyKikoaW5mby0+dm1lbV92bWFfNGtbYnVja180a19pbmRleF0tPmFkZHIp ICsKKwkJCShncGEgJiB+UEFHRV9NQVNLKTsKKwl9CisKKwlyZXR1cm4gKGNoYXIqKShpbmZvLT52 bWVtX3ZtYVtidWNrX2luZGV4XS0+YWRkcikgKworCQkoZ3BhICYgKFZNRU1fQlVDS19TSVpFIC0x KSk7Cit9CisKK3N0YXRpYyBib29sIHhlbl9yZWFkX3ZhKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3Qs IHZvaWQgKnZhLCB2b2lkICp2YWwsCisJCWludCBsZW4sIGludCBhdG9taWMpCit7CisJbWVtY3B5 KHZhbCwgdmEsIGxlbik7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgeGVuX3dy aXRlX3ZhKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHZvaWQgKnZhLCB2b2lkICp2YWwsCisJCWlu dCBsZW4sIGludCBhdG9taWMpCit7CisJbWVtY3B5KHZhLCB2YWwsIGxlbik7CisJcmV0dXJuIHRy dWU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3Z0X2tlcm5lbF9kbSB4ZW5ndF9rZG0gPSB7CisJLm5h bWUgPSAieGVuZ3Rfa2RtIiwKKwkuZzJtX3BmbiA9IHhlbl9nMm1fcGZuLAorCS5wYXVzZV9kb21h aW4gPSB4ZW5fcGF1c2VfZG9tYWluLAorCS5zaHV0ZG93bl9kb21haW4gPSB4ZW5fc2h1dGRvd25f ZG9tYWluLAorCS5tYXBfbWZuX3RvX2dwZm4gPSB4ZW5fbWFwX21mbl90b19ncGZuLAorCS5zZXRf dHJhcF9hcmVhID0geGVuX3NldF90cmFwX2FyZWEsCisJLnNldF93cF9wYWdlcyA9IHhlbl9zZXRf Z3Vlc3RfcGFnZV93cml0ZXByb3RlY3Rpb24sCisJLnVuc2V0X3dwX3BhZ2VzID0geGVuX2NsZWFy X2d1ZXN0X3BhZ2Vfd3JpdGVwcm90ZWN0aW9uLAorCS5kZXRlY3RfaG9zdCA9IHhlbl9kZXRlY3Rf aG9zdCwKKwkuZnJvbV92aXJ0X3RvX21mbiA9IHhlbl92aXJ0X3RvX21mbiwKKwkuZnJvbV9tZm5f dG9fdmlydCA9IHhlbl9tZm5fdG9fdmlydCwKKwkuaW5qZWN0X21zaSA9IHhlbl9pbmplY3RfbXNp LAorCS5odm1faW5pdCA9IHhlbl9odm1faW5pdCwKKwkuaHZtX2V4aXQgPSB4ZW5faHZtX2V4aXQs CisJLmdwYV90b192YSA9IHhlbl9ncGFfdG9fdmEsCisJLnJlYWRfdmEgPSB4ZW5fcmVhZF92YSwK Kwkud3JpdGVfdmEgPSB4ZW5fd3JpdGVfdmEsCit9OworRVhQT1JUX1NZTUJPTCh4ZW5ndF9rZG0p OworCitzdGF0aWMgaW50IF9faW5pdCB4ZW5ndF9pbml0KHZvaWQpCit7CisgICAgICAgaWYgKCF4 ZW5faW5pdGlhbF9kb21haW4oKSkKKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAg ICAgIHByaW50ayhLRVJOX0lORk8gInhlbmd0OiBsb2FkZWRcbiIpOworICAgICAgIHJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgeGVuZ3RfZXhpdCh2b2lkKQoreworCXByaW50ayhL RVJOX0lORk8gInhlbmd0OiB1bmxvYWRlZFxuIik7Cit9CisKK21vZHVsZV9pbml0KHhlbmd0X2lu aXQpOworbW9kdWxlX2V4aXQoeGVuZ3RfZXhpdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3hlbi9p bnRlcmZhY2UvaHZtL2h2bV9vcC5oIGIvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2h2bS9odm1fb3Au aAppbmRleCA5NTZhMDQ2Li4yMDU3N2NjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3hlbi9pbnRlcmZh Y2UvaHZtL2h2bV9vcC5oCisrKyBiL2luY2x1ZGUveGVuL2ludGVyZmFjZS9odm0vaHZtX29wLmgK QEAgLTIxLDYgKzIxLDggQEAKICNpZm5kZWYgX19YRU5fUFVCTElDX0hWTV9IVk1fT1BfSF9fCiAj ZGVmaW5lIF9fWEVOX1BVQkxJQ19IVk1fSFZNX09QX0hfXwogCisjaW5jbHVkZSA8eGVuL2ludGVy ZmFjZS9ldmVudF9jaGFubmVsLmg+CisKIC8qIEdldC9zZXQgc3ViY29tbWFuZHM6IHRoZSBzZWNv bmQgYXJndW1lbnQgb2YgdGhlIGh5cGVyY2FsbCBpcyBhCiAgKiBwb2ludGVyIHRvIGEgeGVuX2h2 bV9wYXJhbSBzdHJ1Y3QuICovCiAjZGVmaW5lIEhWTU9QX3NldF9wYXJhbSAgICAgICAgICAgMApA QCAtNDIsMTIgKzQ0LDQxIEBAIHN0cnVjdCB4ZW5faHZtX3BhZ2V0YWJsZV9keWluZyB7CiB9Owog dHlwZWRlZiBzdHJ1Y3QgeGVuX2h2bV9wYWdldGFibGVfZHlpbmcgeGVuX2h2bV9wYWdldGFibGVf ZHlpbmdfdDsKIERFRklORV9HVUVTVF9IQU5ETEVfU1RSVUNUKHhlbl9odm1fcGFnZXRhYmxlX2R5 aW5nX3QpOwotIAorCisvKiBNU0kgaW5qZWN0aW9uIGZvciBlbXVsYXRlZCBkZXZpY2VzICovCisj ZGVmaW5lIEhWTU9QX2luamVjdF9tc2kgICAgICAgICAxNgorc3RydWN0IHhlbl9odm1faW5qZWN0 X21zaSB7CisgICAgLyogRG9tYWluIHRvIGJlIGluamVjdGVkICovCisgICAgZG9taWRfdCAgIGRv bWlkOworICAgIC8qIERhdGEgLS0gbG93ZXIgMzIgYml0cyAqLworICAgIHVpbnQzMl90ICBkYXRh OworICAgIC8qIEFkZHJlc3MgKDB4ZmVleHh4eHgpICovCisgICAgdWludDY0X3QgIGFkZHI7Cit9 OwordHlwZWRlZiBzdHJ1Y3QgeGVuX2h2bV9pbmplY3RfbXNpIHhlbl9odm1faW5qZWN0X21zaV90 OworREVGSU5FX0dVRVNUX0hBTkRMRV9TVFJVQ1QoeGVuX2h2bV9pbmplY3RfbXNpX3QpOworCiBl bnVtIGh2bW1lbV90eXBlX3QgewogICAgIEhWTU1FTV9yYW1fcncsICAgICAgICAgICAgIC8qIE5v cm1hbCByZWFkL3dyaXRlIGd1ZXN0IFJBTSAqLwogICAgIEhWTU1FTV9yYW1fcm8sICAgICAgICAg ICAgIC8qIFJlYWQtb25seTsgd3JpdGVzIGFyZSBkaXNjYXJkZWQgKi8KICAgICBIVk1NRU1fbW1p b19kbSwgICAgICAgICAgICAvKiBSZWFkcyBhbmQgd3JpdGUgZ28gdG8gdGhlIGRldmljZSBtb2Rl bCAqLworICAgIEhWTU1FTV9tbWlvX3dyaXRlX2RtICAgICAgIC8qIFJlYWQtb25seTsgd3JpdGVz IGdvIHRvIHRoZSBkZXZpY2UgbW9kZWwgKi8KK307CisKKyNkZWZpbmUgSFZNT1Bfc2V0X21lbV90 eXBlICAgIDgKKy8qIE5vdGlmeSB0aGF0IGEgcmVnaW9uIG9mIG1lbW9yeSBpcyB0byBiZSB0cmVh dGVkIGluIGEgc3BlY2lmaWMgd2F5LiAqLworc3RydWN0IHhlbl9odm1fc2V0X21lbV90eXBlIHsK KyAgICAgICAgLyogRG9tYWluIHRvIGJlIHVwZGF0ZWQuICovCisgICAgICAgIGRvbWlkX3QgZG9t aWQ7CisgICAgICAgIC8qIE1lbW9yeSB0eXBlICovCisgICAgICAgIHVpbnQxNl90IGh2bW1lbV90 eXBlOworICAgICAgICAvKiBOdW1iZXIgb2YgcGFnZXMuICovCisgICAgICAgIHVpbnQzMl90IG5y OworICAgICAgICAvKiBGaXJzdCBwZm4uICovCisgICAgICAgIHVpbnQ2NF90IGZpcnN0X3BmbjsK IH07Cit0eXBlZGVmIHN0cnVjdCB4ZW5faHZtX3NldF9tZW1fdHlwZSB4ZW5faHZtX3NldF9tZW1f dHlwZV90OworREVGSU5FX0dVRVNUX0hBTkRMRV9TVFJVQ1QoeGVuX2h2bV9zZXRfbWVtX3R5cGVf dCk7CiAKICNkZWZpbmUgSFZNT1BfZ2V0X21lbV90eXBlICAgIDE1CiAvKiBSZXR1cm4gaHZtbWVt X3R5cGVfdCBmb3IgdGhlIHNwZWNpZmllZCBwZm4uICovCkBAIC02Miw0ICs5MywxNDggQEAgc3Ry dWN0IHhlbl9odm1fZ2V0X21lbV90eXBlIHsKIH07CiBERUZJTkVfR1VFU1RfSEFORExFX1NUUlVD VCh4ZW5faHZtX2dldF9tZW1fdHlwZSk7CiAKKyNkZWZpbmUgSFZNT1Bfdmd0X3dwX3BhZ2VzICAg ICAgICAgMjcgIC8qIHdyaXRlcHJvdGVjdGlvbiB0byBndWVzdCBwYWdlcyAqLworI2RlZmluZSBN QVhfV1BfQkFUQ0hfUEFHRVMgICAgICAgICAxMjgKK3N0cnVjdCB4ZW5faHZtX3ZndF93cF9wYWdl cyB7CisJdWludDE2X3QgZG9taWQ7CisJdWludDE2X3Qgc2V0OyAgICAgICAgICAgIC8qIDE6IHNl dCBXUCwgMDogcmVtb3ZlIFdQICovCisJdWludDE2X3QgbnJfcGFnZXM7CisJdW5zaWduZWQgbG9u ZyAgd3BfcGFnZXNbTUFYX1dQX0JBVENIX1BBR0VTXTsKK307Cit0eXBlZGVmIHN0cnVjdCB4ZW5f aHZtX3ZndF93cF9wYWdlcyB4ZW5faHZtX3ZndF93cF9wYWdlc190OworCisvKgorICogSU9SRVEg U2VydmVycworICoKKyAqIFRoZSBpbnRlcmZhY2UgYmV0d2VlbiBhbiBJL08gZW11bGF0b3IgYW4g WGVuIGlzIGNhbGxlZCBhbiBJT1JFUSBTZXJ2ZXIuCisgKiBBIGRvbWFpbiBzdXBwb3J0cyBhIHNp bmdsZSAnbGVnYWN5JyBJT1JFUSBTZXJ2ZXIgd2hpY2ggaXMgaW5zdGFudGlhdGVkIGlmCisgKiBw YXJhbWV0ZXIuLi4KKyAqCisgKiBIVk1fUEFSQU1fSU9SRVFfUEZOIGlzIHJlYWQgKHRvIGdldCB0 aGUgZ21mbiBjb250YWluaW5nIHRoZSBzeW5jaHJvbm91cworICogaW9yZXEgc3RydWN0dXJlcyks IG9yLi4uCisgKiBIVk1fUEFSQU1fQlVGSU9SRVFfUEZOIGlzIHJlYWQgKHRvIGdldCB0aGUgZ21m biBjb250YWluaW5nIHRoZSBidWZmZXJlZAorICogaW9yZXEgcmluZyksIG9yLi4uCisgKiBIVk1f UEFSQU1fQlVGSU9SRVFfRVZUQ0hOIGlzIHJlYWQgKHRvIGdldCB0aGUgZXZlbnQgY2hhbm5lbCB0 aGF0IFhlbiB1c2VzCisgKiB0byByZXF1ZXN0IGJ1ZmZlcmVkIEkvTyBlbXVsYXRpb24pLgorICoK KyAqIFRoZSBmb2xsb3dpbmcgaHlwZXJjYWxscyBmYWNpbGl0YXRlIHRoZSBjcmVhdGlvbiBvZiBJ T1JFUSBTZXJ2ZXJzIGZvcgorICogJ3NlY29uZGFyeScgZW11bGF0b3JzIHdoaWNoIGFyZSBpbnZv a2VkIHRvIGltcGxlbWVudCBwb3J0IEkvTywgbWVtb3J5LCBvcgorICogUENJIGNvbmZpZyBzcGFj ZSByYW5nZXMgd2hpY2ggdGhleSBleHBsaWNpdGx5IHJlZ2lzdGVyLgorICovCit0eXBlZGVmIHVp bnQxNl90IGlvc2VydmlkX3Q7CisKKy8qCisgKiBIVk1PUF9jcmVhdGVfaW9yZXFfc2VydmVyOiBJ bnN0YW50aWF0ZSBhIG5ldyBJT1JFUSBTZXJ2ZXIgZm9yIGEgc2Vjb25kYXJ5CisgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBlbXVsYXRvciBzZXJ2aWNpbmcgZG9tYWluIDxkb21pZD4uCisg KgorICogVGhlIDxpZD4gaGFuZGVkIGJhY2sgaXMgdW5pcXVlIGZvciA8ZG9taWQ+LiBJZiA8aGFu ZGxlX2J1ZmlvcmVxPiBpcyB6ZXJvCisgKiB0aGUgYnVmZmVyZWQgaW9yZXEgcmluZyB3aWxsIG5v dCBiZSBhbGxvY2F0ZWQgYW5kIGhlbmNlIGFsbCBlbXVsYXRpb24KKyAqIHJlcXVlc3RlcyB0byB0 aGlzIHNlcnZlciB3aWxsIGJlIHN5bmNocm9ub3VzLgorICovCisjZGVmaW5lIEhWTU9QX2NyZWF0 ZV9pb3JlcV9zZXJ2ZXIgMTcKK3N0cnVjdCB4ZW5faHZtX2NyZWF0ZV9pb3JlcV9zZXJ2ZXIgewor ICAgIGRvbWlkX3QgZG9taWQ7ICAgICAgICAgICAvKiBJTiAtIGRvbWFpbiB0byBiZSBzZXJ2aWNl ZCAqLworICAgIHVpbnQ4X3QgaGFuZGxlX2J1ZmlvcmVxOyAvKiBJTiAtIHNob3VsZCBzZXJ2ZXIg aGFuZGxlIGJ1ZmZlcmVkIGlvcmVxcyAqLworICAgIGlvc2VydmlkX3QgaWQ7ICAgICAgICAgICAv KiBPVVQgLSBzZXJ2ZXIgaWQgKi8KK307Cit0eXBlZGVmIHN0cnVjdCB4ZW5faHZtX2NyZWF0ZV9p b3JlcV9zZXJ2ZXIgeGVuX2h2bV9jcmVhdGVfaW9yZXFfc2VydmVyX3Q7CitERUZJTkVfR1VFU1Rf SEFORExFX1NUUlVDVCh4ZW5faHZtX2NyZWF0ZV9pb3JlcV9zZXJ2ZXJfdCk7CisKKy8qCisgKiBI Vk1PUF9nZXRfaW9yZXFfc2VydmVyX2luZm86IEdldCBhbGwgdGhlIGluZm9ybWF0aW9uIG5lY2Vz c2FyeSB0byBhY2Nlc3MKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9SRVEgU2Vy dmVyIDxpZD4uCisgKgorICogVGhlIGVtdWxhdG9yIG5lZWRzIHRvIG1hcCB0aGUgc3luY2hyb25v dXMgaW9yZXEgc3RydWN0dXJlcyBhbmQgYnVmZmVyZWQKKyAqIGlvcmVxIHJpbmcgKGlmIGl0IGV4 aXN0cykgdGhhdCBYZW4gdXNlcyB0byByZXF1ZXN0IGVtdWxhdGlvbi4gVGhlc2UgYXJlCisgKiBo b3N0ZWQgaW4gZG9tYWluIDxkb21pZD4ncyBnbWZucyA8aW9yZXFfcGZuPiBhbmQgPGJ1ZmlvcmVx X3Bmbj4KKyAqIHJlc3BlY3RpdmVseS4gSW4gYWRkaXRpb24sIGlmIHRoZSBJT1JFUSBTZXJ2ZXIg aXMgaGFuZGxpbmcgYnVmZmVyZWQKKyAqIGVtdWxhdGlvbiByZXF1ZXN0cywgdGhlIGVtdWxhdG9y IG5lZWRzIHRvIGJpbmQgdG8gZXZlbnQgY2hhbm5lbAorICogPGJ1ZmlvcmVxX3BvcnQ+IHRvIGxp c3RlbiBmb3IgdGhlbS4gKFRoZSBldmVudCBjaGFubmVscyB1c2VkIGZvcgorICogc3luY2hyb25v dXMgZW11bGF0aW9uIHJlcXVlc3RzIGFyZSBzcGVjaWZpZWQgaW4gdGhlIHBlci1DUFUgaW9yZXEK KyAqIHN0cnVjdHVyZXMgaW4gPGlvcmVxX3Bmbj4pLgorICogSWYgdGhlIElPUkVRIFNlcnZlciBp cyBub3QgaGFuZGxpbmcgYnVmZmVyZWQgZW11bGF0aW9uIHJlcXVlc3RzIHRoZW4gdGhlCisgKiB2 YWx1ZXMgaGFuZGVkIGJhY2sgaW4gPGJ1ZmlvcmVxX3Bmbj4gYW5kIDxidWZpb3JlcV9wb3J0PiB3 aWxsIGJvdGggYmUgMC4KKyAqLworI2RlZmluZSBIVk1PUF9nZXRfaW9yZXFfc2VydmVyX2luZm8g MTgKK3N0cnVjdCB4ZW5faHZtX2dldF9pb3JlcV9zZXJ2ZXJfaW5mbyB7CisgICAgZG9taWRfdCBk b21pZDsgICAgICAgICAgICAgICAgIC8qIElOIC0gZG9tYWluIHRvIGJlIHNlcnZpY2VkICovCisg ICAgaW9zZXJ2aWRfdCBpZDsgICAgICAgICAgICAgICAgIC8qIElOIC0gc2VydmVyIGlkICovCisg ICAgZXZ0Y2huX3BvcnRfdCBidWZpb3JlcV9wb3J0OyAgIC8qIE9VVCAtIGJ1ZmZlcmVkIGlvcmVx IHBvcnQgKi8KKyAgICB1aW50NjRfdCBpb3JlcV9wZm47ICAgIC8qIE9VVCAtIHN5bmMgaW9yZXEg cGZuICovCisgICAgdWludDY0X3QgYnVmaW9yZXFfcGZuOyAvKiBPVVQgLSBidWZmZXJlZCBpb3Jl cSBwZm4gKi8KK307Cit0eXBlZGVmIHN0cnVjdCB4ZW5faHZtX2dldF9pb3JlcV9zZXJ2ZXJfaW5m byB4ZW5faHZtX2dldF9pb3JlcV9zZXJ2ZXJfaW5mb190OworREVGSU5FX0dVRVNUX0hBTkRMRV9T VFJVQ1QoeGVuX2h2bV9nZXRfaW9yZXFfc2VydmVyX2luZm9fdCk7CisKKy8qCisgKiBIVk1fbWFw X2lvX3JhbmdlX3RvX2lvcmVxX3NlcnZlcjogUmVnaXN0ZXIgYW4gSS9PIHJhbmdlIG9mIGRvbWFp biA8ZG9taWQ+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGVtdWxh dGlvbiBieSB0aGUgY2xpZW50IG9mIElPUkVRCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU2VydmVyIDxpZD4KKyAqIEhWTV91bm1hcF9pb19yYW5nZV9mcm9tX2lvcmVxX3Nl cnZlcjogRGVyZWdpc3RlciBhbiBJL08gcmFuZ2Ugb2YgPGRvbWlkPgorICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZW11bGF0aW9uIGJ5IHRoZSBjbGllbnQgb2Yg SU9SRVEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmVyIDxp ZD4KKyAqCisgKiBUaGVyZSBhcmUgdGhyZWUgdHlwZXMgb2YgSS9PIHRoYXQgY2FuIGJlIGVtdWxh dGVkOiBwb3J0IEkvTywgbWVtb3J5IGFjY2Vzc2VzCisgKiBhbmQgUENJIGNvbmZpZyBzcGFjZSBh Y2Nlc3Nlcy4gVGhlIDx0eXBlPiBmaWVsZCBkZW5vdGVzIHdoaWNoIHR5cGUgb2YgcmFuZ2UKKyAq IHRoZSA8c3RhcnQ+IGFuZCA8ZW5kPiAoaW5jbHVzaXZlKSBmaWVsZHMgYXJlIHNwZWNpZnlpbmcu CisgKiBQQ0kgY29uZmlnIHNwYWNlIHJhbmdlcyBhcmUgc3BlY2lmaWVkIGJ5IHNlZ21lbnQvYnVz L2RldmljZS9mdW5jdGlvbiB2YWx1ZXMKKyAqIHdoaWNoIHNob3VsZCBiZSBlbmNvZGVkIHVzaW5n IHRoZSBIVk1PUF9QQ0lfU0JERiBoZWxwZXIgbWFjcm8gYmVsb3cuCisgKgorICogTk9URTogdW5s ZXNzIGFuIGVtdWxhdGlvbiByZXF1ZXN0IGZhbGxzIGVudGlyZWx5IHdpdGhpbiBhIHJhbmdlIG1h cHBlZAorICogYnkgYSBzZWNvbmRhcnkgZW11bGF0b3IsIGl0IHdpbGwgbm90IGJlIHBhc3NlZCB0 byB0aGF0IGVtdWxhdG9yLgorICovCisjZGVmaW5lIEhWTU9QX21hcF9pb19yYW5nZV90b19pb3Jl cV9zZXJ2ZXIgMTkKKyNkZWZpbmUgSFZNT1BfdW5tYXBfaW9fcmFuZ2VfZnJvbV9pb3JlcV9zZXJ2 ZXIgMjAKK3N0cnVjdCB4ZW5faHZtX2lvX3JhbmdlIHsKKyAgICBkb21pZF90IGRvbWlkOyAgICAg ICAgICAgICAgIC8qIElOIC0gZG9tYWluIHRvIGJlIHNlcnZpY2VkICovCisgICAgaW9zZXJ2aWRf dCBpZDsgICAgICAgICAgICAgICAvKiBJTiAtIHNlcnZlciBpZCAqLworICAgIHVpbnQzMl90IHR5 cGU7ICAgICAgICAgICAgICAgLyogSU4gLSB0eXBlIG9mIHJhbmdlICovCisjIGRlZmluZSBIVk1P UF9JT19SQU5HRV9QT1JUICAgMCAvKiBJL08gcG9ydCByYW5nZSAqLworIyBkZWZpbmUgSFZNT1Bf SU9fUkFOR0VfTUVNT1JZIDEgLyogTU1JTyByYW5nZSAqLworIyBkZWZpbmUgSFZNT1BfSU9fUkFO R0VfUENJICAgIDIgLyogUENJIHNlZ21lbnQvYnVzL2Rldi9mdW5jIHJhbmdlICovCisgICAgdWlu dDY0X3Qgc3RhcnQsIGVuZDsgLyogSU4gLSBpbmNsdXNpdmUgc3RhcnQgYW5kIGVuZCBvZiByYW5n ZSAqLworfTsKK3R5cGVkZWYgc3RydWN0IHhlbl9odm1faW9fcmFuZ2UgeGVuX2h2bV9pb19yYW5n ZV90OworREVGSU5FX0dVRVNUX0hBTkRMRV9TVFJVQ1QoeGVuX2h2bV9pb19yYW5nZV90KTsKKwor I2RlZmluZSBIVk1PUF9QQ0lfU0JERihzLGIsZCxmKSAgICAgICAgICAgICAgICAgXAorICAgICAg ICgoKChzKSAmIDB4ZmZmZikgPDwgMTYpIHwgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAo KChiKSAmIDB4ZmYpIDw8IDgpIHwgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKChk KSAmIDB4MWYpIDw8IDMpIHwgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKGYpICYg MHgwNykpCisKKy8qCisgKiBIVk1PUF9kZXN0cm95X2lvcmVxX3NlcnZlcjogRGVzdHJveSB0aGUg SU9SRVEgU2VydmVyIDxpZD4gc2VydmljaW5nIGRvbWFpbgorICogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDxkb21pZD4uCisgKgorICogQW55IHJlZ2lzdGVyZWQgSS9PIHJhbmdlcyB3aWxs IGJlIGF1dG9tYXRpY2FsbHkgZGVyZWdpc3RlcmVkLgorICovCisjZGVmaW5lIEhWTU9QX2Rlc3Ry b3lfaW9yZXFfc2VydmVyIDIxCitzdHJ1Y3QgeGVuX2h2bV9kZXN0cm95X2lvcmVxX3NlcnZlciB7 CisgICAgZG9taWRfdCBkb21pZDsgLyogSU4gLSBkb21haW4gdG8gYmUgc2VydmljZWQgKi8KKyAg ICBpb3NlcnZpZF90IGlkOyAvKiBJTiAtIHNlcnZlciBpZCAqLworfTsKK3R5cGVkZWYgc3RydWN0 IHhlbl9odm1fZGVzdHJveV9pb3JlcV9zZXJ2ZXIgeGVuX2h2bV9kZXN0cm95X2lvcmVxX3NlcnZl cl90OworREVGSU5FX0dVRVNUX0hBTkRMRV9TVFJVQ1QoeGVuX2h2bV9kZXN0cm95X2lvcmVxX3Nl cnZlcl90KTsKKworCisvKgorICogSFZNT1Bfc2V0X2lvcmVxX3NlcnZlcl9zdGF0ZTogRW5hYmxl IG9yIGRpc2FibGUgdGhlIElPUkVRIFNlcnZlciA8aWQ+IHNlcnZpY2luZworICogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZG9tYWluIDxkb21pZD4uCisgKgorICogVGhlIElPUkVRIFNl cnZlciB3aWxsIG5vdCBiZSBwYXNzZWQgYW55IGVtdWxhdGlvbiByZXF1ZXN0cyB1bnRpbCBpdCBp cyBpbiB0aGUKKyAqIGVuYWJsZWQgc3RhdGUuCisgKiBOb3RlIHRoYXQgdGhlIGNvbnRlbnRzIG9m IHRoZSBpb3JlcV9wZm4gYW5kIGJ1ZmlvcmVxX2ZuIChzZWUKKyAqIEhWTU9QX2dldF9pb3JlcV9z ZXJ2ZXJfaW5mbykgYXJlIG5vdCBtZWFuaW5nZnVsIHVudGlsIHRoZSBJT1JFUSBTZXJ2ZXIgaXMg aW4KKyAqIHRoZSBlbmFibGVkIHN0YXRlLgorICovCisjZGVmaW5lIEhWTU9QX3NldF9pb3JlcV9z ZXJ2ZXJfc3RhdGUgMjIKK3N0cnVjdCB4ZW5faHZtX3NldF9pb3JlcV9zZXJ2ZXJfc3RhdGUgewor ICAgIGRvbWlkX3QgZG9taWQ7ICAgLyogSU4gLSBkb21haW4gdG8gYmUgc2VydmljZWQgKi8KKyAg ICBpb3NlcnZpZF90IGlkOyAgIC8qIElOIC0gc2VydmVyIGlkICovCisgICAgdWludDhfdCBlbmFi bGVkOyAvKiBJTiAtIGVuYWJsZWQ/ICovCit9OwordHlwZWRlZiBzdHJ1Y3QgeGVuX2h2bV9zZXRf aW9yZXFfc2VydmVyX3N0YXRlIHhlbl9odm1fc2V0X2lvcmVxX3NlcnZlcl9zdGF0ZV90OworREVG SU5FX0dVRVNUX0hBTkRMRV9TVFJVQ1QoeGVuX2h2bV9zZXRfaW9yZXFfc2VydmVyX3N0YXRlX3Qp OworCiAjZW5kaWYgLyogX19YRU5fUFVCTElDX0hWTV9IVk1fT1BfSF9fICovCmRpZmYgLS1naXQg YS9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaHZtL2lvcmVxLmggYi9pbmNsdWRlL3hlbi9pbnRlcmZh Y2UvaHZtL2lvcmVxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJiZjRl NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUveGVuL2ludGVyZmFjZS9odm0vaW9yZXEuaApA QCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVy bXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICog dmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBi ZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlz IHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAt MTMwMSBVU0EuCisgKi8KKyNpZm5kZWYgX0lPUkVRX0hfCisjZGVmaW5lIF9JT1JFUV9IXworCisj ZGVmaW5lIElPUkVRX1JFQUQgICAgICAxCisjZGVmaW5lIElPUkVRX1dSSVRFICAgICAwCisKKyNk ZWZpbmUgU1RBVEVfSU9SRVFfTk9ORSAgICAgICAgMAorI2RlZmluZSBTVEFURV9JT1JFUV9SRUFE WSAgICAgICAxCisjZGVmaW5lIFNUQVRFX0lPUkVRX0lOUFJPQ0VTUyAgIDIKKyNkZWZpbmUgU1RB VEVfSU9SRVNQX1JFQURZICAgICAgMworCisjZGVmaW5lIElPUkVRX1RZUEVfUElPICAgICAgICAg IDAgLyogcGlvICovCisjZGVmaW5lIElPUkVRX1RZUEVfQ09QWSAgICAgICAgIDEgLyogbW1pbyBv cHMgKi8KKyNkZWZpbmUgSU9SRVFfVFlQRV9QQ0lfQ09ORklHICAgMgorI2RlZmluZSBJT1JFUV9U WVBFX1RJTUVPRkZTRVQgICA3CisjZGVmaW5lIElPUkVRX1RZUEVfSU5WQUxJREFURSAgIDggLyog bWFwY2FjaGUgKi8KKworLyoKKyAqIFZNRXhpdCBkaXNwYXRjaGVyIHNob3VsZCBjb29wZXJhdGUg d2l0aCBpbnN0cnVjdGlvbiBkZWNvZGVyIHRvCisgKiBwcmVwYXJlIHRoaXMgc3RydWN0dXJlIGFu ZCBub3RpZnkgc2VydmljZSBPUyBhbmQgRE0gYnkgc2VuZGluZworICogdmlycQorICovCitzdHJ1 Y3QgaW9yZXEgeworICAgIHVpbnQ2NF90IGFkZHI7ICAgICAgICAgIC8qIHBoeXNpY2FsIGFkZHJl c3MgKi8KKyAgICB1aW50NjRfdCBkYXRhOyAgICAgICAgICAvKiBkYXRhIChvciBwYWRkciBvZiBk YXRhKSAqLworICAgIHVpbnQzMl90IGNvdW50OyAgICAgICAgIC8qIGZvciByZXAgcHJlZml4ZXMg Ki8KKyAgICB1aW50MzJfdCBzaXplOyAgICAgICAgICAvKiBzaXplIGluIGJ5dGVzICovCisgICAg dWludDMyX3QgdnBfZXBvcnQ7ICAgICAgLyogZXZ0Y2huIGZvciBub3RpZmljYXRpb25zIHRvL2Zy b20gZGV2aWNlIG1vZGVsICovCisgICAgdWludDE2X3QgX3BhZDA7CisgICAgdWludDhfdCBzdGF0 ZTo0OworICAgIHVpbnQ4X3QgZGF0YV9pc19wdHI6MTsgIC8qIGlmIDEsIGRhdGEgYWJvdmUgaXMg dGhlIGd1ZXN0IHBhZGRyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogb2YgdGhlIHJl YWwgZGF0YSB0byB1c2UuICovCisgICAgdWludDhfdCBkaXI6MTsgICAgICAgICAgLyogMT1yZWFk LCAwPXdyaXRlICovCisgICAgdWludDhfdCBkZjoxOworICAgIHVpbnQ4X3QgX3BhZDE6MTsKKyAg ICB1aW50OF90IHR5cGU7ICAgICAgICAgICAvKiBJL08gdHlwZSAqLworfTsKK3R5cGVkZWYgc3Ry dWN0IGlvcmVxIGlvcmVxX3Q7CisKK3N0cnVjdCBzaGFyZWRfaW9wYWdlIHsKKyAgICBzdHJ1Y3Qg aW9yZXEgdmNwdV9pb3JlcVsxXTsKK307Cit0eXBlZGVmIHN0cnVjdCBzaGFyZWRfaW9wYWdlIHNo YXJlZF9pb3BhZ2VfdDsKKworc3RydWN0IGJ1Zl9pb3JlcSB7CisgICAgdWludDhfdCAgdHlwZTsg ICAvKiBJL08gdHlwZSAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1aW50OF90ICBwYWQ6MTsK KyAgICB1aW50OF90ICBkaXI6MTsgIC8qIDE9cmVhZCwgMD13cml0ZSAgICAgICAgICAgICAqLwor ICAgIHVpbnQ4X3QgIHNpemU6MjsgLyogMD0+MSwgMT0+MiwgMj0+NCwgMz0+OC4gSWYgOCwgdXNl IHR3byBidWZfaW9yZXFzICovCisgICAgdWludDMyX3QgYWRkcjoyMDsvKiBwaHlzaWNhbCBhZGRy ZXNzICAgICAgICAgICAgKi8KKyAgICB1aW50MzJfdCBkYXRhOyAgIC8qIGRhdGEgICAgICAgICAg ICAgICAgICAgICAgICAqLworfTsKK3R5cGVkZWYgc3RydWN0IGJ1Zl9pb3JlcSBidWZfaW9yZXFf dDsKKworI2RlZmluZSBJT1JFUV9CVUZGRVJfU0xPVF9OVU0gICAgIDUxMSAvKiA4IGJ5dGVzIGVh Y2gsIHBsdXMgMiA0LWJ5dGUgaW5kZXhlcyAqLworc3RydWN0IGJ1ZmZlcmVkX2lvcGFnZSB7Cisg ICAgdW5zaWduZWQgaW50IHJlYWRfcG9pbnRlcjsKKyAgICB1bnNpZ25lZCBpbnQgd3JpdGVfcG9p bnRlcjsKKyAgICBidWZfaW9yZXFfdCBidWZfaW9yZXFbSU9SRVFfQlVGRkVSX1NMT1RfTlVNXTsK K307IC8qIE5CLiBTaXplIG9mIHRoaXMgc3RydWN0dXJlIG11c3QgYmUgbm8gZ3JlYXRlciB0aGFu IG9uZSBwYWdlLiAqLwordHlwZWRlZiBzdHJ1Y3QgYnVmZmVyZWRfaW9wYWdlIGJ1ZmZlcmVkX2lv cGFnZV90OworCisjaWYgZGVmaW5lZChfX2lhNjRfXykKK3N0cnVjdCBwaW9fYnVmZmVyIHsKKyAg ICB1aW50MzJfdCBwYWdlX29mZnNldDsKKyAgICB1aW50MzJfdCBwb2ludGVyOworICAgIHVpbnQz Ml90IGRhdGFfZW5kOworICAgIHVpbnQzMl90IGJ1Zl9zaXplOworICAgIHZvaWQgKm9wYXF1ZTsK K307CisKKyNkZWZpbmUgUElPX0JVRkZFUl9JREVfUFJJTUFSWSAgIDAgLyogSS9PIHBvcnQgPSAw eDFGMCAqLworI2RlZmluZSBQSU9fQlVGRkVSX0lERV9TRUNPTkRBUlkgMSAvKiBJL08gcG9ydCA9 IDB4MTcwICovCisjZGVmaW5lIFBJT19CVUZGRVJfRU5UUllfTlVNICAgICAyCitzdHJ1Y3QgYnVm ZmVyZWRfcGlvcGFnZSB7CisgICAgc3RydWN0IHBpb19idWZmZXIgcGlvW1BJT19CVUZGRVJfRU5U UllfTlVNXTsKKyAgICB1aW50OF90IGJ1ZmZlclsxXTsKK307CisjZW5kaWYgLyogZGVmaW5lZChf X2lhNjRfXykgKi8KKworLyoKKyAqIEFDUEkgQ29udHJvbC9FdmVudCByZWdpc3RlciBsb2NhdGlv bnMuIExvY2F0aW9uIGlzIGNvbnRyb2xsZWQgYnkgYQorICogdmVyc2lvbiBudW1iZXIgaW4gSFZN X1BBUkFNX0FDUElfSU9QT1JUU19MT0NBVElPTi4KKyAqLworCisvKiBWZXJzaW9uIDAgKGRlZmF1 bHQpOiBUcmFkaXRpb25hbCBYZW4gbG9jYXRpb25zLiAqLworI2RlZmluZSBBQ1BJX1BNMUFfRVZU X0JMS19BRERSRVNTX1YwIDB4MWY0MAorI2RlZmluZSBBQ1BJX1BNMUFfQ05UX0JMS19BRERSRVNT X1YwIChBQ1BJX1BNMUFfRVZUX0JMS19BRERSRVNTX1YwICsgMHgwNCkKKyNkZWZpbmUgQUNQSV9Q TV9UTVJfQkxLX0FERFJFU1NfVjAgICAoQUNQSV9QTTFBX0VWVF9CTEtfQUREUkVTU19WMCArIDB4 MDgpCisjZGVmaW5lIEFDUElfR1BFMF9CTEtfQUREUkVTU19WMCAgICAgKEFDUElfUE1fVE1SX0JM S19BRERSRVNTX1YwICsgMHgyMCkKKyNkZWZpbmUgQUNQSV9HUEUwX0JMS19MRU5fVjAgICAgICAg ICAweDA4CisKKy8qIFZlcnNpb24gMTogTG9jYXRpb25zIHByZWZlcnJlZCBieSBtb2Rlcm4gUWVt dS4gKi8KKyNkZWZpbmUgQUNQSV9QTTFBX0VWVF9CTEtfQUREUkVTU19WMSAweGIwMDAKKyNkZWZp bmUgQUNQSV9QTTFBX0NOVF9CTEtfQUREUkVTU19WMSAoQUNQSV9QTTFBX0VWVF9CTEtfQUREUkVT U19WMSArIDB4MDQpCisjZGVmaW5lIEFDUElfUE1fVE1SX0JMS19BRERSRVNTX1YxICAgKEFDUElf UE0xQV9FVlRfQkxLX0FERFJFU1NfVjEgKyAweDA4KQorI2RlZmluZSBBQ1BJX0dQRTBfQkxLX0FE RFJFU1NfVjEgICAgIDB4YWZlMAorI2RlZmluZSBBQ1BJX0dQRTBfQkxLX0xFTl9WMSAgICAgICAg IDB4MDQKKworLyogQ29tcGF0aWJpbGl0eSBkZWZpbml0aW9ucyBmb3IgdGhlIGRlZmF1bHQgbG9j YXRpb24gKHZlcnNpb24gMCkuICovCisjZGVmaW5lIEFDUElfUE0xQV9FVlRfQkxLX0FERFJFU1Mg ICAgQUNQSV9QTTFBX0VWVF9CTEtfQUREUkVTU19WMAorI2RlZmluZSBBQ1BJX1BNMUFfQ05UX0JM S19BRERSRVNTICAgIEFDUElfUE0xQV9DTlRfQkxLX0FERFJFU1NfVjAKKyNkZWZpbmUgQUNQSV9Q TV9UTVJfQkxLX0FERFJFU1MgICAgICBBQ1BJX1BNX1RNUl9CTEtfQUREUkVTU19WMAorI2RlZmlu ZSBBQ1BJX0dQRTBfQkxLX0FERFJFU1MgICAgICAgIEFDUElfR1BFMF9CTEtfQUREUkVTU19WMAor I2RlZmluZSBBQ1BJX0dQRTBfQkxLX0xFTiAgICAgICAgICAgIEFDUElfR1BFMF9CTEtfTEVOX1Yw CisKKworI2VuZGlmIC8qIF9JT1JFUV9IXyAqLworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgor ICogbW9kZTogQworICogYy1zZXQtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAor ICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpk aWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL21lbW9yeS5oIGIvaW5jbHVkZS94ZW4v aW50ZXJmYWNlL21lbW9yeS5oCmluZGV4IDJlY2ZlNGYuLjkyZjE4YzUgMTAwNjQ0Ci0tLSBhL2lu Y2x1ZGUveGVuL2ludGVyZmFjZS9tZW1vcnkuaAorKysgYi9pbmNsdWRlL3hlbi9pbnRlcmZhY2Uv bWVtb3J5LmgKQEAgLTksNiArOSw3IEBACiAjaWZuZGVmIF9fWEVOX1BVQkxJQ19NRU1PUllfSF9f CiAjZGVmaW5lIF9fWEVOX1BVQkxJQ19NRU1PUllfSF9fCiAKKyNpbmNsdWRlIDx4ZW4vaW50ZXJm YWNlL2V2ZW50X2NoYW5uZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAvKgpA QCAtMTQxLDYgKzE0MiwxMSBAQCBzdHJ1Y3QgeGVuX21hY2hwaHlzX21mbl9saXN0IHsKIERFRklO RV9HVUVTVF9IQU5ETEVfU1RSVUNUKHhlbl9tYWNocGh5c19tZm5fbGlzdCk7CiAKIC8qCisgKiBS ZXR1cm5zIHRoZSBtYXhpbXVtIEdQRk4gaW4gdXNlIGJ5IHRoZSBndWVzdCwgb3IgLXZlIGVycmNv ZGUgb24gZmFpbHVyZS4KKyAqLworI2RlZmluZSBYRU5NRU1fbWF4aW11bV9ncGZuICAgICAgICAg MTQKKworLyoKICAqIFJldHVybnMgdGhlIGxvY2F0aW9uIGluIHZpcnR1YWwgYWRkcmVzcyBzcGFj ZSBvZiB0aGUgbWFjaGluZV90b19waHlzCiAgKiBtYXBwaW5nIHRhYmxlLiBBcmNoaXRlY3R1cmVz IHdoaWNoIGRvIG5vdCBoYXZlIGEgbTJwIHRhYmxlLCBvciB3aGljaCBkbyBub3QKICAqIG1hcCBp dCBieSBkZWZhdWx0IGludG8gZ3Vlc3QgYWRkcmVzcyBzcGFjZSwgZG8gbm90IGltcGxlbWVudCB0 aGlzIGNvbW1hbmQuCkBAIC0yNjMsNCArMjY5LDI2IEBAIHN0cnVjdCB4ZW5fcmVtb3ZlX2Zyb21f cGh5c21hcCB7CiB9OwogREVGSU5FX0dVRVNUX0hBTkRMRV9TVFJVQ1QoeGVuX3JlbW92ZV9mcm9t X3BoeXNtYXApOwogCisvKgorICogVHJhbnNsYXRlIHRoZSBnaXZlbiBndWVzdCBQRk5zIHRvIE1G TnMKKyAqLworI2RlZmluZSBYRU5NRU1fZ2V0X21mbl9mcm9tX3BmbiAgICAyNQorc3RydWN0IHhl bl9nZXRfbWZuX2Zyb21fcGZuIHsKKyAgICAvKgorICAgICAqIFBvaW50ZXIgdG8gYnVmZmVyIHRv IGZpbGwgd2l0aCBsaXN0IG9mIHBmbi4KKyAgICAgKiBmb3IgSU4sIGl0IGNvbnRhaW5zIHRoZSBn dWVzdCBQRk4gdGhhdCBuZWVkIHRvIHRyYW5zbGF0ZWQKKyAgICAgKiBmb3IgT1VULCBpdCBjb250 YWlucyB0aGUgdHJhbnNsYXRlZCBNRk4uIG9yIElOVkFMSURfTUZOIGlmIG5vIHZhbGlkIHRyYW5z bGF0aW9uCisgICAgICovCisgICAgR1VFU1RfSEFORExFKHVsb25nKSBwZm5fbGlzdDsKKworICAg IC8qCisgICAgICogSU46IFNpemUgb2YgdGhlIHBmbl9hcnJheS4KKyAgICAgKi8KKyAgICB1bnNp Z25lZCBpbnQgbnJfcGZuczsKKworICAgIC8qIElOOiB3aGljaCBkb21haW4gKi8KKyAgICBkb21p ZF90IGRvbWlkOworfTsKK0RFRklORV9HVUVTVF9IQU5ETEVfU1RSVUNUKHhlbl9nZXRfbWZuX2Zy b21fcGZuKTsKKwogI2VuZGlmIC8qIF9fWEVOX1BVQkxJQ19NRU1PUllfSF9fICovCmRpZmYgLS1n aXQgYS9pbmNsdWRlL3hlbi9pbnRlcmZhY2UveGVuLmggYi9pbmNsdWRlL3hlbi9pbnRlcmZhY2Uv eGVuLmgKaW5kZXggNzhhMzhmMS4uYzdlMGYzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS94ZW4vaW50 ZXJmYWNlL3hlbi5oCisrKyBiL2luY2x1ZGUveGVuL2ludGVyZmFjZS94ZW4uaApAQCAtNzU2LDYg Kzc1NiwxMTIgQEAgc3RydWN0IHRtZW1fb3AgewogCiBERUZJTkVfR1VFU1RfSEFORExFKHU2NCk7 CiAKKy8qIFhFTl9ET01DVExfZ2V0ZG9tYWluaW5mbyAqLworc3RydWN0IHhlbl9kb21jdGxfZ2V0 ZG9tYWluaW5mbyB7CisgICAgICAgIC8qIE9VVCB2YXJpYWJsZXMuICovCisgICAgICAgIGRvbWlk X3QgIGRvbWFpbjsgICAgICAgICAgICAgIC8qIEFsc28gZWNob2VkIGluIGRvbWN0bC5kb21haW4g Ki8KKyAgICAgICAgLyogRG9tYWluIGlzIHNjaGVkdWxlZCB0byBkaWUuICovCisjZGVmaW5lIF9Y RU5fRE9NSU5GX2R5aW5nICAgICAwCisjZGVmaW5lIFhFTl9ET01JTkZfZHlpbmcgICAgICAoMVU8 PF9YRU5fRE9NSU5GX2R5aW5nKQorICAgICAgICAvKiBEb21haW4gaXMgYW4gSFZNIGd1ZXN0IChh cyBvcHBvc2VkIHRvIGEgUFYgZ3Vlc3QpLiAqLworI2RlZmluZSBfWEVOX0RPTUlORl9odm1fZ3Vl c3QgMQorI2RlZmluZSBYRU5fRE9NSU5GX2h2bV9ndWVzdCAgKDFVPDxfWEVOX0RPTUlORl9odm1f Z3Vlc3QpCisgICAgICAgIC8qIFRoZSBndWVzdCBPUyBoYXMgc2h1dCBkb3duLiAqLworI2RlZmlu ZSBfWEVOX0RPTUlORl9zaHV0ZG93biAgMgorI2RlZmluZSBYRU5fRE9NSU5GX3NodXRkb3duICAg KDFVPDxfWEVOX0RPTUlORl9zaHV0ZG93bikKKyAgICAgICAgLyogQ3VycmVudGx5IHBhdXNlZCBi eSBjb250cm9sIHNvZnR3YXJlLiAqLworI2RlZmluZSBfWEVOX0RPTUlORl9wYXVzZWQgICAgMwor I2RlZmluZSBYRU5fRE9NSU5GX3BhdXNlZCAgICAgKDFVPDxfWEVOX0RPTUlORl9wYXVzZWQpCisg ICAgICAgIC8qIEN1cnJlbnRseSBibG9ja2VkIHBlbmRpbmcgYW4gZXZlbnQuICAgICAqLworI2Rl ZmluZSBfWEVOX0RPTUlORl9ibG9ja2VkICAgNAorI2RlZmluZSBYRU5fRE9NSU5GX2Jsb2NrZWQg ICAgKDFVPDxfWEVOX0RPTUlORl9ibG9ja2VkKQorICAgICAgICAvKiBEb21haW4gaXMgY3VycmVu dGx5IHJ1bm5pbmcuICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1hFTl9ET01JTkZfcnVubmluZyAg IDUKKyNkZWZpbmUgWEVOX0RPTUlORl9ydW5uaW5nICAgICgxVTw8X1hFTl9ET01JTkZfcnVubmlu ZykKKyAgICAgICAgLyogQmVpbmcgZGVidWdnZWQuICAqLworI2RlZmluZSBfWEVOX0RPTUlORl9k ZWJ1Z2dlZCAgNgorI2RlZmluZSBYRU5fRE9NSU5GX2RlYnVnZ2VkICAgKDFVPDxfWEVOX0RPTUlO Rl9kZWJ1Z2dlZCkKKyAgICAgICAgLyogWEVOX0RPTUlORl9zaHV0ZG93biBndWVzdC1zdXBwbGll ZCBjb2RlLiAgKi8KKyNkZWZpbmUgWEVOX0RPTUlORl9zaHV0ZG93bm1hc2sgMjU1CisjZGVmaW5l IFhFTl9ET01JTkZfc2h1dGRvd25zaGlmdCAxNgorICAgICAgICB1aW50MzJfdCBmbGFnczsgICAg ICAgICAgICAgIC8qIFhFTl9ET01JTkZfKiAqLworICAgICAgICBhbGlnbmVkX3U2NCB0b3RfcGFn ZXM7CisgICAgICAgIGFsaWduZWRfdTY0IG1heF9wYWdlczsKKyAgICAgICAgYWxpZ25lZF91NjQg b3V0c3RhbmRpbmdfcGFnZXM7CisgICAgICAgIGFsaWduZWRfdTY0IHNocl9wYWdlczsKKyAgICAg ICAgYWxpZ25lZF91NjQgcGFnZWRfcGFnZXM7CisgICAgICAgIGFsaWduZWRfdTY0IHNoYXJlZF9p bmZvX2ZyYW1lOyAvKiBHTUZOIG9mIHNoYXJlZF9pbmZvIHN0cnVjdCAqLworICAgICAgICBhbGln bmVkX3U2NCBjcHVfdGltZTsKKyAgICAgICAgdWludDMyX3QgbnJfb25saW5lX3ZjcHVzOyAgICAv KiBOdW1iZXIgb2YgVkNQVXMgY3VycmVudGx5IG9ubGluZS4gKi8KKyAgICAgICAgdWludDMyX3Qg bWF4X3ZjcHVfaWQ7ICAgICAgICAvKiBNYXhpbXVtIFZDUFVJRCBpbiB1c2UgYnkgdGhpcyBkb21h aW4uICovCisgICAgICAgIHVpbnQzMl90IHNzaWRyZWY7CisgICAgICAgIHhlbl9kb21haW5faGFu ZGxlX3QgaGFuZGxlOworICAgICAgICB1aW50MzJfdCBjcHVwb29sOworfTsKK0RFRklORV9HVUVT VF9IQU5ETEVfU1RSVUNUKHhlbl9kb21jdGxfZ2V0ZG9tYWluaW5mbyk7CisKKyNkZWZpbmUgWEVO X0RPTUNUTF9JTlRFUkZBQ0VfVkVSU0lPTiAweDAwMDAwMDBhCisjZGVmaW5lIFhFTl9ET01DVExf cGF1c2Vkb21haW4gICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgWEVOX0RPTUNUTF9nZXRk b21haW5pbmZvICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBYRU5fRE9NQ1RMX21lbW9yeV9t YXBwaW5nICAgICAgICAgICAgICAgICAzOQorI2RlZmluZSBYRU5fRE9NQ1RMX2lvbWVtX3Blcm1p c3Npb24gICAgICAgICAgICAgICAyMAorCisKKyNkZWZpbmUgWEVOX0RPTUNUTF92Z3RfaW9fdHJh cCAgICAgICAgICAgICAgICAgICAgNzAwCisKKyNkZWZpbmUgTUFYX1ZHVF9JT19UUkFQX0lORk8g NAorCitzdHJ1Y3Qgdmd0X2lvX3RyYXBfaW5mbyB7CisgICAgICAgIHVpbnQ2NF90IHM7CisgICAg ICAgIHVpbnQ2NF90IGU7Cit9OworCitzdHJ1Y3QgeGVuX2RvbWN0bF92Z3RfaW9fdHJhcCB7Cisg ICAgICAgIHVpbnQzMl90IG5fcGlvOworICAgICAgICBzdHJ1Y3Qgdmd0X2lvX3RyYXBfaW5mbyBw aW9bTUFYX1ZHVF9JT19UUkFQX0lORk9dOworCisgICAgICAgIHVpbnQzMl90IG5fbW1pbzsKKyAg ICAgICAgc3RydWN0IHZndF9pb190cmFwX2luZm8gbW1pb1tNQVhfVkdUX0lPX1RSQVBfSU5GT107 Cit9OworCisvKiBCaW5kIG1hY2hpbmUgSS9PIGFkZHJlc3MgcmFuZ2UgLT4gSFZNIGFkZHJlc3Mg cmFuZ2UuICovCisvKiBYRU5fRE9NQ1RMX21lbW9yeV9tYXBwaW5nICovCisjZGVmaW5lIERQQ0lf QUREX01BUFBJTkcgICAgICAgIDEKKyNkZWZpbmUgRFBDSV9SRU1PVkVfTUFQUElORyAgICAgMAor c3RydWN0IHhlbl9kb21jdGxfbWVtb3J5X21hcHBpbmcgeworICAgICAgICBhbGlnbmVkX3U2NCBm aXJzdF9nZm47IC8qIGZpcnN0IHBhZ2UgKGh2bSBndWVzdCBwaHlzIHBhZ2UpIGluIHJhbmdlICov CisgICAgICAgIGFsaWduZWRfdTY0IGZpcnN0X21mbjsgLyogZmlyc3QgcGFnZSAobWFjaGluZSBw YWdlKSBpbiByYW5nZS4gKi8KKyAgICAgICAgYWxpZ25lZF91NjQgbnJfbWZuczsgICAvKiBudW1i ZXIgb2YgcGFnZXMgaW4gcmFuZ2UgKD4wKSAqLworICAgICAgICB1aW50MzJfdCBhZGRfbWFwcGlu ZzsgIC8qIEFkZCBvciByZW1vdmUgbWFwcGluZyAqLworICAgICAgICB1aW50MzJfdCBwYWRkaW5n OyAgICAgIC8qIHBhZGRpbmcgZm9yIDY0LWJpdCBhbGlnbmVkIHN0cnVjdCAqLworfTsKK3R5cGVk ZWYgc3RydWN0IHhlbl9kb21jdGxfbWVtb3J5X21hcHBpbmcgeGVuX2RvbWN0bF9tZW1vcnlfbWFw cGluZ190OworREVGSU5FX0dVRVNUX0hBTkRMRV9TVFJVQ1QoeGVuX2RvbWN0bF9tZW1vcnlfbWFw cGluZ190KTsKKworLyogWEVOX0RPTUNUTF9pb21lbV9wZXJtaXNzaW9uICovCitzdHJ1Y3QgeGVu X2RvbWN0bF9pb21lbV9wZXJtaXNzaW9uIHsKKyAgICBhbGlnbmVkX3U2NCBmaXJzdF9tZm47Lyog Zmlyc3QgcGFnZSAocGh5c2ljYWwgcGFnZSBudW1iZXIpIGluIHJhbmdlICovCisgICAgYWxpZ25l ZF91NjQgbnJfbWZuczsgIC8qIG51bWJlciBvZiBwYWdlcyBpbiByYW5nZSAoPjApICovCisgICAg dWludDhfdCAgYWxsb3dfYWNjZXNzOyAgICAgLyogYWxsb3cgKCEwKSBvciBkZW55ICgwKSBhY2Nl c3MgdG8gcmFuZ2U/ICovCit9OwordHlwZWRlZiBzdHJ1Y3QgeGVuX2RvbWN0bF9pb21lbV9wZXJt aXNzaW9uIHhlbl9kb21jdGxfaW9tZW1fcGVybWlzc2lvbl90OworREVGSU5FX0dVRVNUX0hBTkRM RV9TVFJVQ1QoeGVuX2RvbWN0bF9pb21lbV9wZXJtaXNzaW9uX3QpOworCitzdHJ1Y3QgeGVuX2Rv bWN0bCB7CisgICAgICAgIHVpbnQzMl90IGNtZDsKKyAgICAgICAgdWludDMyX3QgaW50ZXJmYWNl X3ZlcnNpb247IC8qIFhFTl9ET01DVExfSU5URVJGQUNFX1ZFUlNJT04gKi8KKyAgICAgICAgZG9t aWRfdCAgZG9tYWluOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICAgICAgc3RydWN0IHhl bl9kb21jdGxfZ2V0ZG9tYWluaW5mbyAgICAgZ2V0ZG9tYWluaW5mbzsKKyAgICAgICAgICAgICAg ICBzdHJ1Y3QgeGVuX2RvbWN0bF92Z3RfaW9fdHJhcCAgICAgICB2Z3RfaW9fdHJhcDsKKyAgICAg ICAgICAgICAgICBzdHJ1Y3QgeGVuX2RvbWN0bF9tZW1vcnlfbWFwcGluZyAgICBtZW1vcnlfbWFw cGluZzsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgeGVuX2RvbWN0bF9pb21lbV9wZXJtaXNzaW9u ICAgICAgaW9tZW1fcGVybTsKKyAgICAgICAgICAgICAgICB1aW50OF90ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwYWRbMjU2XTsKKyAgICAgICAgfXU7Cit9OworREVGSU5FX0dVRVNUX0hB TkRMRV9TVFJVQ1QoeGVuX2RvbWN0bCk7CisKKwogI2Vsc2UgLyogX19BU1NFTUJMWV9fICovCiAK IC8qIEluIGFzc2VtYmx5IGNvZGUgd2UgY2Fubm90IHVzZSBDIG51bWVyaWMgY29uc3RhbnQgc3Vm Zml4ZXMuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3hlbi94ZW4tb3BzLmggYi9pbmNsdWRlL3hl bi94ZW4tb3BzLmgKaW5kZXggODZhYmUwNy4uZGRlOWViMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS94 ZW4veGVuLW9wcy5oCisrKyBiL2luY2x1ZGUveGVuL3hlbi1vcHMuaApAQCAtMTIzLDQgKzEyMyw5 IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB4ZW5fcHJlZW1wdGlibGVfaGNhbGxfZW5kKHZvaWQpCiAK ICNlbmRpZiAvKiBDT05GSUdfUFJFRU1QVCAqLwogCitzdHJ1Y3Qgdm1fc3RydWN0ICogeGVuX3Jl bWFwX2RvbWFpbl9tZm5fcmFuZ2VfaW5fa2VybmVsKHVuc2lnbmVkIGxvbmcgbWZuLAorICAgICAg ICBpbnQgbnIsIHVuc2lnbmVkIGRvbWlkKTsKK3ZvaWQgeGVuX3VubWFwX2RvbWFpbl9tZm5fcmFu Z2VfaW5fa2VybmVsKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIGludCBuciwKKyAgICAgICAgICAg ICAgICB1bnNpZ25lZCBkb21pZCk7CisKICNlbmRpZiAvKiBJTkNMVURFX1hFTl9PUFNfSCAqLwot LSAKMS45LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==