From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 33/43] drm/i915: Move phys objects to its own file Date: Wed, 6 Mar 2019 14:25:07 +0000 Message-ID: <20190306142517.22558-34-chris@chris-wilson.co.uk> References: <20190306142517.22558-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0A2BB6E0C0 for ; Wed, 6 Mar 2019 14:27:18 +0000 (UTC) In-Reply-To: <20190306142517.22558-1-chris@chris-wilson.co.uk> 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 Cc: matthew.auld@intel.com List-Id: intel-gfx@lists.freedesktop.org Q29udGludWluZyB0aGUgZGVjbHV0dGVyaW5nIG9mIGk5MTVfZ2VtLmMKClNpZ25lZC1vZmYtYnk6 IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmggICAgfCAgIDggKwogLi4uL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmggIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jICAgICB8IDQ4MiArKysrKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9waHlzLmMgICAgICB8IDIxMiArKysrKysKIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jICAgICB8ICAyMiArCiAuLi4vZHJt L2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9waHlzLmMgICAgfCAgODAgKysKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAgICAgICB8ICAgMiAtCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgICAgICAgfCA2ODUgLS0tLS0tLS0tLS0tLS0t LS0tCiAuLi4vZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3QuYyAgfCAgNTQg LS0KIC4uLi9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oICB8ICAgMSAr CiAxMSBmaWxlcyBjaGFuZ2VkLCA4MDkgaW5zZXJ0aW9ucygrKSwgNzQxIGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdl cy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2Vt X3BoeXMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxm dGVzdHMvaTkxNV9nZW1fcGh5cy5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv TWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCA1NDQxOGNlNWZh YWMuLjhlNmVmNTRmMjQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZp bGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTcyLDYgKzcyLDggQEAg aTkxNS0kKENPTkZJR19EUk1fSTkxNV9XRVJST1IpICs9IFwKICMgR0VNIGNvZGUKIGk5MTUteSAr PSBcCiAJICBnZW0vaTkxNV9nZW1fb2JqZWN0Lm8gXAorCSAgZ2VtL2k5MTVfZ2VtX3BhZ2VzLm8g XAorCSAgZ2VtL2k5MTVfZ2VtX3BoeXMubyBcCiAJICBnZW0vaTkxNV9nZW1fc2htZW0ubyBcCiAJ ICBpOTE1X2FjdGl2ZS5vIFwKIAkgIGk5MTVfY21kX3BhcnNlci5vIFwKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaAppbmRleCAwNWJiYjNmMzM5MDQuLmViYWIzNTA1 ZTUxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVj dC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaApAQCAt MzMsMTEgKzMzLDE3IEBAIHZvaWQgX19pOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9zaG1lbShzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQkJCSAgICAgc3RydWN0IHNnX3RhYmxlICpw YWdlcywKIAkJCQkgICAgIGJvb2wgbmVlZHNfY2xmbHVzaCk7CiAKK2ludCBpOTE1X2dlbV9vYmpl Y3RfYXR0YWNoX3BoeXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgaW50IGFsaWdu KTsKKwogdm9pZCBpOTE1X2dlbV9jbG9zZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpn ZW0sIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7CiB2b2lkIGk5MTVfZ2VtX2ZyZWVfb2JqZWN0KHN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKIAogdm9pZCBpOTE1X2dlbV9mbHVzaF9mcmVlX29i amVjdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwogCitzdHJ1Y3Qgc2dfdGFibGUg KgorX19pOTE1X2dlbV9vYmplY3RfdW5zZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaik7Cit2b2lkIGk5MTVfZ2VtX29iamVjdF90cnVuY2F0ZShzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqKTsKKwogLyoqCiAgKiBpOTE1X2dlbV9vYmplY3RfbG9va3VwX3JjdSAt IGxvb2sgdXAgYSB0ZW1wb3JhcnkgR0VNIG9iamVjdCBmcm9tIGl0cyBoYW5kbGUKICAqIEBmaWxw OiBEUk0gZmlsZSBwcml2YXRlIGRhdGUKQEAgLTIzMSw2ICsyMzcsOCBAQCBpOTE1X2dlbV9vYmpl Y3RfZ2V0X2RtYV9hZGRyZXNzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiB2b2lk IF9faTkxNV9nZW1fb2JqZWN0X3NldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqLAogCQkJCSBzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzLAogCQkJCSB1bnNpZ25lZCBpbnQgc2df cGFnZV9zaXplcyk7CisKK2ludCBfX19faTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKIGludCBfX2k5MTVfZ2VtX29iamVjdF9nZXRfcGFn ZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CiAKIHN0YXRpYyBpbmxpbmUgaW50 IF9fbXVzdF9jaGVjawpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX29iamVjdF90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29i amVjdF90eXBlcy5oCmluZGV4IGU0YjUwOTQ0ZjU1My4uZGE2YTMzZTIzOTVmIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oCkBAIC01Miw2 ICs1Miw4IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyB7CiAJaW50ICgqZ2V0X3Bh Z2VzKShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKIAl2b2lkICgqcHV0X3BhZ2Vz KShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQkJICBzdHJ1Y3Qgc2dfdGFibGUg KnBhZ2VzKTsKKwl2b2lkICgqdHJ1bmNhdGUpKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmopOworCXZvaWQgKCppbnZhbGlkYXRlKShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq KTsKIAogCWludCAoKnB3cml0ZSkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJ ICAgICAgY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgKmFyZyk7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uYTU5NGY0OGRiMjhlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmMKQEAgLTAsMCArMSw0ODIgQEAKKy8qCisg KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTQt MjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpbmNsdWRlICJpOTE1X2dlbV9vYmplY3Qu aCIKKworI2luY2x1ZGUgIi4uL2k5MTVfZHJ2LmgiCisKK3ZvaWQgX19pOTE1X2dlbV9vYmplY3Rf c2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkJIHN0cnVjdCBz Z190YWJsZSAqcGFnZXMsCisJCQkJIHVuc2lnbmVkIGludCBzZ19wYWdlX3NpemVzKQoreworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsKKwl1 bnNpZ25lZCBsb25nIHN1cHBvcnRlZCA9IElOVEVMX0lORk8oaTkxNSktPnBhZ2Vfc2l6ZXM7CisJ aW50IGk7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZvYmotPm1tLmxvY2spOworCisJb2JqLT5t bS5nZXRfcGFnZS5zZ19wb3MgPSBwYWdlcy0+c2dsOworCW9iai0+bW0uZ2V0X3BhZ2Uuc2dfaWR4 ID0gMDsKKworCW9iai0+bW0ucGFnZXMgPSBwYWdlczsKKworCWlmIChpOTE1X2dlbV9vYmplY3Rf aXNfdGlsZWQob2JqKSAmJgorCSAgICBpOTE1LT5xdWlya3MgJiBRVUlSS19QSU5fU1dJWlpMRURf UEFHRVMpIHsKKwkJR0VNX0JVR19PTihvYmotPm1tLnF1aXJrZWQpOworCQlfX2k5MTVfZ2VtX29i amVjdF9waW5fcGFnZXMob2JqKTsKKwkJb2JqLT5tbS5xdWlya2VkID0gdHJ1ZTsKKwl9CisKKwlH RU1fQlVHX09OKCFzZ19wYWdlX3NpemVzKTsKKwlvYmotPm1tLnBhZ2Vfc2l6ZXMucGh5cyA9IHNn X3BhZ2Vfc2l6ZXM7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgc3VwcG9ydGVkIHBhZ2Utc2l6 ZXMgd2hpY2ggZml0IGludG8gdGhlIGdpdmVuCisJICogc2dfcGFnZV9zaXplcy4gVGhpcyB3aWxs IGdpdmUgdXMgdGhlIHBhZ2Utc2l6ZXMgd2hpY2ggd2UgbWF5IGJlIGFibGUKKwkgKiB0byB1c2Ug b3Bwb3J0dW5pc3RpY2FsbHkgd2hlbiBsYXRlciBpbnNlcnRpbmcgaW50byB0aGUgR1RULiBGb3IK KwkgKiBleGFtcGxlIGlmIHBoeXM9MkcsIHRoZW4gaW4gdGhlb3J5IHdlIHNob3VsZCBiZSBhYmxl IHRvIHVzZSAxRywgMk0sCisJICogNjRLIG9yIDRLIHBhZ2VzLCBhbHRob3VnaCBpbiBwcmFjdGlj ZSB0aGlzIHdpbGwgZGVwZW5kIG9uIGEgbnVtYmVyIG9mCisJICogb3RoZXIgZmFjdG9ycy4KKwkg Ki8KKwlvYmotPm1tLnBhZ2Vfc2l6ZXMuc2cgPSAwOworCWZvcl9lYWNoX3NldF9iaXQoaSwgJnN1 cHBvcnRlZCwgaWxvZzIoSTkxNV9HVFRfTUFYX1BBR0VfU0laRSkgKyAxKSB7CisJCWlmIChvYmot Pm1tLnBhZ2Vfc2l6ZXMucGh5cyAmIH4wdSA8PCBpKQorCQkJb2JqLT5tbS5wYWdlX3NpemVzLnNn IHw9IEJJVChpKTsKKwl9CisJR0VNX0JVR19PTighSEFTX1BBR0VfU0laRVMoaTkxNSwgb2JqLT5t bS5wYWdlX3NpemVzLnNnKSk7CisKKwlzcGluX2xvY2soJmk5MTUtPm1tLm9ial9sb2NrKTsKKwls aXN0X2FkZCgmb2JqLT5tbS5saW5rLCAmaTkxNS0+bW0udW5ib3VuZF9saXN0KTsKKwlzcGluX3Vu bG9jaygmaTkxNS0+bW0ub2JqX2xvY2spOworfQorCitpbnQgX19fX2k5MTVfZ2VtX29iamVjdF9n ZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlpbnQgZXJyOwor CisJaWYgKHVubGlrZWx5KG9iai0+bW0ubWFkdiAhPSBJOTE1X01BRFZfV0lMTE5FRUQpKSB7CisJ CURSTV9ERUJVRygiQXR0ZW1wdGluZyB0byBvYnRhaW4gYSBwdXJnZWFibGUgb2JqZWN0XG4iKTsK KwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJZXJyID0gb2JqLT5vcHMtPmdldF9wYWdlcyhvYmop OworCUdFTV9CVUdfT04oIWVyciAmJiAhaTkxNV9nZW1fb2JqZWN0X2hhc19wYWdlcyhvYmopKTsK KworCXJldHVybiBlcnI7Cit9CisKKy8qIEVuc3VyZSB0aGF0IHRoZSBhc3NvY2lhdGVkIHBhZ2Vz IGFyZSBnYXRoZXJlZCBmcm9tIHRoZSBiYWNraW5nIHN0b3JhZ2UKKyAqIGFuZCBwaW5uZWQgaW50 byBvdXIgb2JqZWN0LiBpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKCkgbWF5IGJlIGNhbGxlZAor ICogbXVsdGlwbGUgdGltZXMgYmVmb3JlIHRoZXkgYXJlIHJlbGVhc2VkIGJ5IGEgc2luZ2xlIGNh bGwgdG8KKyAqIGk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcygpIC0gb25jZSB0aGUgcGFnZXMg YXJlIG5vIGxvbmdlciByZWZlcmVuY2VkCisgKiBlaXRoZXIgYXMgYSByZXN1bHQgb2YgbWVtb3J5 IHByZXNzdXJlIChyZWFwaW5nIHBhZ2VzIHVuZGVyIHRoZSBzaHJpbmtlcikKKyAqIG9yIGFzIHRo ZSBvYmplY3QgaXMgaXRzZWxmIHJlbGVhc2VkLgorICovCitpbnQgX19pOTE1X2dlbV9vYmplY3Rf Z2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJaW50IGVycjsK KworCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmb2JqLT5tbS5sb2NrKTsKKwlpZiAo ZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKHVubGlrZWx5KCFpOTE1X2dlbV9vYmplY3RfaGFz X3BhZ2VzKG9iaikpKSB7CisJCUdFTV9CVUdfT04oaTkxNV9nZW1fb2JqZWN0X2hhc19waW5uZWRf cGFnZXMob2JqKSk7CisKKwkJZXJyID0gX19fX2k5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMob2Jq KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gdW5sb2NrOworCisJCXNtcF9tYl9fYmVmb3JlX2F0b21p YygpOworCX0KKwlhdG9taWNfaW5jKCZvYmotPm1tLnBhZ2VzX3Bpbl9jb3VudCk7CisKK3VubG9j azoKKwltdXRleF91bmxvY2soJm9iai0+bW0ubG9jayk7CisJcmV0dXJuIGVycjsKK30KKworLyog SW1tZWRpYXRlbHkgZGlzY2FyZCB0aGUgYmFja2luZyBzdG9yYWdlICovCit2b2lkIGk5MTVfZ2Vt X29iamVjdF90cnVuY2F0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQoreworCWRy bV9nZW1fZnJlZV9tbWFwX29mZnNldCgmb2JqLT5iYXNlKTsKKwlpZiAob2JqLT5vcHMtPnRydW5j YXRlKQorCQlvYmotPm9wcy0+dHJ1bmNhdGUob2JqKTsKK30KKworLyogVHJ5IHRvIGRpc2NhcmQg dW53YW50ZWQgcGFnZXMgKi8KK3ZvaWQgX19pOTE1X2dlbV9vYmplY3RfaW52YWxpZGF0ZShzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQoreworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm9i ai0+bW0ubG9jayk7CisJR0VNX0JVR19PTihpOTE1X2dlbV9vYmplY3RfaGFzX3BhZ2VzKG9iaikp OworCisJc3dpdGNoIChvYmotPm1tLm1hZHYpIHsKKwljYXNlIEk5MTVfTUFEVl9ET05UTkVFRDoK KwkJaTkxNV9nZW1fb2JqZWN0X3RydW5jYXRlKG9iaik7CisJY2FzZSBfX0k5MTVfTUFEVl9QVVJH RUQ6CisJCXJldHVybjsKKwl9CisKKwlpZiAob2JqLT5vcHMtPmludmFsaWRhdGUpCisJCW9iai0+ b3BzLT5pbnZhbGlkYXRlKG9iaik7Cit9CisKK3N0YXRpYyB2b2lkIF9faTkxNV9nZW1fb2JqZWN0 X3Jlc2V0X3BhZ2VfaXRlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQoreworCXN0 cnVjdCByYWRpeF90cmVlX2l0ZXIgaXRlcjsKKwl2b2lkIF9fcmN1ICoqc2xvdDsKKworCXJjdV9y ZWFkX2xvY2soKTsKKwlyYWRpeF90cmVlX2Zvcl9lYWNoX3Nsb3Qoc2xvdCwgJm9iai0+bW0uZ2V0 X3BhZ2UucmFkaXgsICZpdGVyLCAwKQorCQlyYWRpeF90cmVlX2RlbGV0ZSgmb2JqLT5tbS5nZXRf cGFnZS5yYWRpeCwgaXRlci5pbmRleCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKK3N0cnVj dCBzZ190YWJsZSAqCitfX2k5MTVfZ2VtX29iamVjdF91bnNldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g dG9faTkxNShvYmotPmJhc2UuZGV2KTsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzOworCisJcGFn ZXMgPSBmZXRjaF9hbmRfemVybygmb2JqLT5tbS5wYWdlcyk7CisJaWYgKElTX0VSUl9PUl9OVUxM KHBhZ2VzKSkKKwkJcmV0dXJuIHBhZ2VzOworCisJc3Bpbl9sb2NrKCZpOTE1LT5tbS5vYmpfbG9j ayk7CisJbGlzdF9kZWwoJm9iai0+bW0ubGluayk7CisJc3Bpbl91bmxvY2soJmk5MTUtPm1tLm9i al9sb2NrKTsKKworCWlmIChvYmotPm1tLm1hcHBpbmcpIHsKKwkJdm9pZCAqcHRyOworCisJCXB0 ciA9IHBhZ2VfbWFza19iaXRzKG9iai0+bW0ubWFwcGluZyk7CisJCWlmIChpc192bWFsbG9jX2Fk ZHIocHRyKSkKKwkJCXZ1bm1hcChwdHIpOworCQllbHNlCisJCQlrdW5tYXAoa21hcF90b19wYWdl KHB0cikpOworCisJCW9iai0+bW0ubWFwcGluZyA9IE5VTEw7CisJfQorCisJX19pOTE1X2dlbV9v YmplY3RfcmVzZXRfcGFnZV9pdGVyKG9iaik7CisJb2JqLT5tbS5wYWdlX3NpemVzLnBoeXMgPSBv YmotPm1tLnBhZ2Vfc2l6ZXMuc2cgPSAwOworCisJcmV0dXJuIHBhZ2VzOworfQorCitpbnQgX19p OTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmos CisJCQkJZW51bSBpOTE1X21tX3N1YmNsYXNzIHN1YmNsYXNzKQoreworCXN0cnVjdCBzZ190YWJs ZSAqcGFnZXM7CisJaW50IGVycjsKKworCWlmIChpOTE1X2dlbV9vYmplY3RfaGFzX3Bpbm5lZF9w YWdlcyhvYmopKQorCQlyZXR1cm4gLUVCVVNZOworCisJR0VNX0JVR19PTihvYmotPmJpbmRfY291 bnQpOworCisJLyogTWF5IGJlIGNhbGxlZCBieSBzaHJpbmtlciBmcm9tIHdpdGhpbiBnZXRfcGFn ZXMoKSAob24gYW5vdGhlciBibykgKi8KKwltdXRleF9sb2NrX25lc3RlZCgmb2JqLT5tbS5sb2Nr LCBzdWJjbGFzcyk7CisJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZvYmotPm1tLnBhZ2VzX3Bp bl9jb3VudCkpKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byB1bmxvY2s7CisJfQorCisJLyoK KwkgKiAtPnB1dF9wYWdlcyBtaWdodCBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGJp dDE3IHN3aXp6bGUKKwkgKiBhcnJheSwgaGVuY2UgcHJvdGVjdCB0aGVtIGZyb20gYmVpbmcgcmVh cGVkIGJ5IHJlbW92aW5nIHRoZW0gZnJvbSBndHQKKwkgKiBsaXN0cyBlYXJseS4KKwkgKi8KKwlw YWdlcyA9IF9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0X3BhZ2VzKG9iaik7CisKKwkvKgorCSAqIFhY WCBUZW1wb3JhcnkgaGlqaW54IHRvIGF2b2lkIHVwZGF0aW5nIGFsbCBiYWNrZW5kcyB0byBoYW5k bGUKKwkgKiBOVUxMIHBhZ2VzLiBJbiB0aGUgZnV0dXJlLCB3aGVuIHdlIGhhdmUgbW9yZSBhc3lu Y2hyb25vdXMKKwkgKiBnZXRfcGFnZXMgYmFja2VuZHMgd2Ugc2hvdWxkIGJlIGJldHRlciBhYmxl IHRvIGhhbmRsZSB0aGUKKwkgKiBjYW5jZWxsYXRpb24gb2YgdGhlIGFzeW5jIHRhc2sgaW4gYSBt b3JlIHVuaWZvcm0gbWFubmVyLgorCSAqLworCWlmICghcGFnZXMgJiYgIWk5MTVfZ2VtX29iamVj dF9uZWVkc19hc3luY19jYW5jZWwob2JqKSkKKwkJcGFnZXMgPSBFUlJfUFRSKC1FSU5WQUwpOwor CisJaWYgKCFJU19FUlIocGFnZXMpKQorCQlvYmotPm9wcy0+cHV0X3BhZ2VzKG9iaiwgcGFnZXMp OworCisJZXJyID0gMDsKK3VubG9jazoKKwltdXRleF91bmxvY2soJm9iai0+bW0ubG9jayk7CisK KwlyZXR1cm4gZXJyOworfQorCisvKiBUaGUgJ21hcHBpbmcnIHBhcnQgb2YgaTkxNV9nZW1fb2Jq ZWN0X3Bpbl9tYXAoKSBiZWxvdyAqLworc3RhdGljIHZvaWQgKmk5MTVfZ2VtX29iamVjdF9tYXAo Y29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgZW51bSBpOTE1X21h cF90eXBlIHR5cGUpCit7CisJdW5zaWduZWQgbG9uZyBuX3BhZ2VzID0gb2JqLT5iYXNlLnNpemUg Pj4gUEFHRV9TSElGVDsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndCA9IG9iai0+bW0ucGFnZXM7CisJ c3RydWN0IHNndF9pdGVyIHNndF9pdGVyOworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBw YWdlICpzdGFja19wYWdlc1szMl07CisJc3RydWN0IHBhZ2UgKipwYWdlcyA9IHN0YWNrX3BhZ2Vz OworCXVuc2lnbmVkIGxvbmcgaSA9IDA7CisJcGdwcm90X3QgcGdwcm90OworCXZvaWQgKmFkZHI7 CisKKwkvKiBBIHNpbmdsZSBwYWdlIGNhbiBhbHdheXMgYmUga21hcHBlZCAqLworCWlmIChuX3Bh Z2VzID09IDEgJiYgdHlwZSA9PSBJOTE1X01BUF9XQikKKwkJcmV0dXJuIGttYXAoc2dfcGFnZShz Z3QtPnNnbCkpOworCisJaWYgKG5fcGFnZXMgPiBBUlJBWV9TSVpFKHN0YWNrX3BhZ2VzKSkgewor CQkvKiBUb28gYmlnIGZvciBzdGFjayAtLSBhbGxvY2F0ZSB0ZW1wb3JhcnkgYXJyYXkgaW5zdGVh ZCAqLworCQlwYWdlcyA9IGt2bWFsbG9jX2FycmF5KG5fcGFnZXMsIHNpemVvZigqcGFnZXMpLCBH RlBfS0VSTkVMKTsKKwkJaWYgKCFwYWdlcykKKwkJCXJldHVybiBOVUxMOworCX0KKworCWZvcl9l YWNoX3NndF9wYWdlKHBhZ2UsIHNndF9pdGVyLCBzZ3QpCisJCXBhZ2VzW2krK10gPSBwYWdlOwor CisJLyogQ2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgcGFnZXMgKi8K KwlHRU1fQlVHX09OKGkgIT0gbl9wYWdlcyk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwlkZWZhdWx0 OgorCQlNSVNTSU5HX0NBU0UodHlwZSk7CisJCS8qIGZhbGx0aHJvdWdoIHRvIHVzZSBQQUdFX0tF Uk5FTCBhbnl3YXkgKi8KKwljYXNlIEk5MTVfTUFQX1dCOgorCQlwZ3Byb3QgPSBQQUdFX0tFUk5F TDsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X01BUF9XQzoKKwkJcGdwcm90ID0gcGdwcm90X3dyaXRl Y29tYmluZShQQUdFX0tFUk5FTF9JTyk7CisJCWJyZWFrOworCX0KKwlhZGRyID0gdm1hcChwYWdl cywgbl9wYWdlcywgMCwgcGdwcm90KTsKKworCWlmIChwYWdlcyAhPSBzdGFja19wYWdlcykKKwkJ a3ZmcmVlKHBhZ2VzKTsKKworCXJldHVybiBhZGRyOworfQorCisvKiBnZXQsIHBpbiwgYW5kIG1h cCB0aGUgcGFnZXMgb2YgdGhlIG9iamVjdCBpbnRvIGtlcm5lbCBzcGFjZSAqLwordm9pZCAqaTkx NV9nZW1fb2JqZWN0X3Bpbl9tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJ CSAgICAgIGVudW0gaTkxNV9tYXBfdHlwZSB0eXBlKQoreworCWVudW0gaTkxNV9tYXBfdHlwZSBo YXNfdHlwZTsKKwlib29sIHBpbm5lZDsKKwl2b2lkICpwdHI7CisJaW50IGVycjsKKworCWlmICh1 bmxpa2VseSghaTkxNV9nZW1fb2JqZWN0X2hhc19zdHJ1Y3RfcGFnZShvYmopKSkKKwkJcmV0dXJu IEVSUl9QVFIoLUVOWElPKTsKKworCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmb2Jq LT5tbS5sb2NrKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJcGlubmVk ID0gISh0eXBlICYgSTkxNV9NQVBfT1ZFUlJJREUpOworCXR5cGUgJj0gfkk5MTVfTUFQX09WRVJS SURFOworCisJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZvYmotPm1tLnBhZ2VzX3Bpbl9jb3Vu dCkpIHsKKwkJaWYgKHVubGlrZWx5KCFpOTE1X2dlbV9vYmplY3RfaGFzX3BhZ2VzKG9iaikpKSB7 CisJCQlHRU1fQlVHX09OKGk5MTVfZ2VtX29iamVjdF9oYXNfcGlubmVkX3BhZ2VzKG9iaikpOwor CisJCQllcnIgPSBfX19faTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhvYmopOworCQkJaWYgKGVy cikKKwkJCQlnb3RvIGVycl91bmxvY2s7CisKKwkJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwor CQl9CisJCWF0b21pY19pbmMoJm9iai0+bW0ucGFnZXNfcGluX2NvdW50KTsKKwkJcGlubmVkID0g ZmFsc2U7CisJfQorCUdFTV9CVUdfT04oIWk5MTVfZ2VtX29iamVjdF9oYXNfcGFnZXMob2JqKSk7 CisKKwlwdHIgPSBwYWdlX3VucGFja19iaXRzKG9iai0+bW0ubWFwcGluZywgJmhhc190eXBlKTsK KwlpZiAocHRyICYmIGhhc190eXBlICE9IHR5cGUpIHsKKwkJaWYgKHBpbm5lZCkgeworCQkJZXJy ID0gLUVCVVNZOworCQkJZ290byBlcnJfdW5waW47CisJCX0KKworCQlpZiAoaXNfdm1hbGxvY19h ZGRyKHB0cikpCisJCQl2dW5tYXAocHRyKTsKKwkJZWxzZQorCQkJa3VubWFwKGttYXBfdG9fcGFn ZShwdHIpKTsKKworCQlwdHIgPSBvYmotPm1tLm1hcHBpbmcgPSBOVUxMOworCX0KKworCWlmICgh cHRyKSB7CisJCXB0ciA9IGk5MTVfZ2VtX29iamVjdF9tYXAob2JqLCB0eXBlKTsKKwkJaWYgKCFw dHIpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycl91bnBpbjsKKwkJfQorCisJCW9i ai0+bW0ubWFwcGluZyA9IHBhZ2VfcGFja19iaXRzKHB0ciwgdHlwZSk7CisJfQorCitvdXRfdW5s b2NrOgorCW11dGV4X3VubG9jaygmb2JqLT5tbS5sb2NrKTsKKwlyZXR1cm4gcHRyOworCitlcnJf dW5waW46CisJYXRvbWljX2RlYygmb2JqLT5tbS5wYWdlc19waW5fY291bnQpOworZXJyX3VubG9j azoKKwlwdHIgPSBFUlJfUFRSKGVycik7CisJZ290byBvdXRfdW5sb2NrOworfQorCitzdHJ1Y3Qg c2NhdHRlcmxpc3QgKgoraTkxNV9nZW1fb2JqZWN0X2dldF9zZyhzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAorCQkgICAgICAgdW5zaWduZWQgaW50IG4sCisJCSAgICAgICB1bnNpZ25l ZCBpbnQgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgaTkxNV9nZW1fb2JqZWN0X3BhZ2VfaXRlciAqaXRl ciA9ICZvYmotPm1tLmdldF9wYWdlOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWdu ZWQgaW50IGlkeCwgY291bnQ7CisKKwltaWdodF9zbGVlcCgpOworCUdFTV9CVUdfT04obiA+PSBv YmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZUKTsKKwlHRU1fQlVHX09OKCFpOTE1X2dlbV9vYmpl Y3RfaGFzX3Bpbm5lZF9wYWdlcyhvYmopKTsKKworCS8qIEFzIHdlIGl0ZXJhdGUgZm9yd2FyZCB0 aHJvdWdoIHRoZSBzZywgd2UgcmVjb3JkIGVhY2ggZW50cnkgaW4gYQorCSAqIHJhZGl4dHJlZSBm b3IgcXVpY2sgcmVwZWF0ZWQgKGJhY2t3YXJkcykgbG9va3Vwcy4gSWYgd2UgaGF2ZSBzZWVuCisJ ICogdGhpcyBpbmRleCBwcmV2aW91c2x5LCB3ZSB3aWxsIGhhdmUgYW4gZW50cnkgZm9yIGl0Lgor CSAqCisJICogSW5pdGlhbCBsb29rdXAgaXMgTyhOKSwgYnV0IHRoaXMgaXMgYW1vcnRpemVkIHRv IE8oMSkgZm9yCisJICogc2VxdWVudGlhbCBwYWdlIGFjY2VzcyAod2hlcmUgZWFjaCBuZXcgcmVx dWVzdCBpcyBjb25zZWN1dGl2ZQorCSAqIHRvIHRoZSBwcmV2aW91cyBvbmUpLiBSZXBlYXRlZCBs b29rdXBzIGFyZSBPKGxnKG9iai0+YmFzZS5zaXplKSksCisJICogaS5lLiBPKDEpIHdpdGggYSBs YXJnZSBjb25zdGFudCEKKwkgKi8KKwlpZiAobiA8IFJFQURfT05DRShpdGVyLT5zZ19pZHgpKQor CQlnb3RvIGxvb2t1cDsKKworCW11dGV4X2xvY2soJml0ZXItPmxvY2spOworCisJLyogV2UgcHJl ZmVyIHRvIHJldXNlIHRoZSBsYXN0IHNnIHNvIHRoYXQgcmVwZWF0ZWQgbG9va3VwIG9mIHRoaXMK KwkgKiAob3IgdGhlIHN1YnNlcXVlbnQpIHNnIGFyZSBmYXN0IC0gY29tcGFyaW5nIGFnYWluc3Qg dGhlIGxhc3QKKwkgKiBzZyBpcyBmYXN0ZXIgdGhhbiBnb2luZyB0aHJvdWdoIHRoZSByYWRpeHRy ZWUuCisJICovCisKKwlzZyA9IGl0ZXItPnNnX3BvczsKKwlpZHggPSBpdGVyLT5zZ19pZHg7CisJ Y291bnQgPSBfX3NnX3BhZ2VfY291bnQoc2cpOworCisJd2hpbGUgKGlkeCArIGNvdW50IDw9IG4p IHsKKwkJdm9pZCAqZW50cnk7CisJCXVuc2lnbmVkIGxvbmcgaTsKKwkJaW50IHJldDsKKworCQkv KiBJZiB3ZSBjYW5ub3QgYWxsb2NhdGUgYW5kIGluc2VydCB0aGlzIGVudHJ5LCBvciB0aGUKKwkJ ICogaW5kaXZpZHVhbCBwYWdlcyBmcm9tIHRoaXMgcmFuZ2UsIGNhbmNlbCB1cGRhdGluZyB0aGUK KwkJICogc2dfaWR4IHNvIHRoYXQgb24gdGhpcyBsb29rdXAgd2UgYXJlIGZvcmNlZCB0byBsaW5l YXJseQorCQkgKiBzY2FuIG9ud2FyZHMsIGJ1dCBvbiBmdXR1cmUgbG9va3VwcyB3ZSB3aWxsIHRy eSB0aGUKKwkJICogaW5zZXJ0aW9uIGFnYWluIChpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gYmUg Y2FyZWZ1bCBvZgorCQkgKiB0aGUgZXJyb3IgcmV0dXJuIHJlcG9ydGluZyB0aGF0IHdlIGhhdmUg YWxyZWFkeSBpbnNlcnRlZAorCQkgKiB0aGlzIGluZGV4KS4KKwkJICovCisJCXJldCA9IHJhZGl4 X3RyZWVfaW5zZXJ0KCZpdGVyLT5yYWRpeCwgaWR4LCBzZyk7CisJCWlmIChyZXQgJiYgcmV0ICE9 IC1FRVhJU1QpCisJCQlnb3RvIHNjYW47CisKKwkJZW50cnkgPSB4YV9ta192YWx1ZShpZHgpOwor CQlmb3IgKGkgPSAxOyBpIDwgY291bnQ7IGkrKykgeworCQkJcmV0ID0gcmFkaXhfdHJlZV9pbnNl cnQoJml0ZXItPnJhZGl4LCBpZHggKyBpLCBlbnRyeSk7CisJCQlpZiAocmV0ICYmIHJldCAhPSAt RUVYSVNUKQorCQkJCWdvdG8gc2NhbjsKKwkJfQorCisJCWlkeCArPSBjb3VudDsKKwkJc2cgPSBf X19fc2dfbmV4dChzZyk7CisJCWNvdW50ID0gX19zZ19wYWdlX2NvdW50KHNnKTsKKwl9CisKK3Nj YW46CisJaXRlci0+c2dfcG9zID0gc2c7CisJaXRlci0+c2dfaWR4ID0gaWR4OworCisJbXV0ZXhf dW5sb2NrKCZpdGVyLT5sb2NrKTsKKworCWlmICh1bmxpa2VseShuIDwgaWR4KSkgLyogaW5zZXJ0 aW9uIGNvbXBsZXRlZCBieSBhbm90aGVyIHRocmVhZCAqLworCQlnb3RvIGxvb2t1cDsKKworCS8q IEluIGNhc2Ugd2UgZmFpbGVkIHRvIGluc2VydCB0aGUgZW50cnkgaW50byB0aGUgcmFkaXh0cmVl LCB3ZSBuZWVkCisJICogdG8gbG9vayBiZXlvbmQgdGhlIGN1cnJlbnQgc2cuCisJICovCisJd2hp bGUgKGlkeCArIGNvdW50IDw9IG4pIHsKKwkJaWR4ICs9IGNvdW50OworCQlzZyA9IF9fX19zZ19u ZXh0KHNnKTsKKwkJY291bnQgPSBfX3NnX3BhZ2VfY291bnQoc2cpOworCX0KKworCSpvZmZzZXQg PSBuIC0gaWR4OworCXJldHVybiBzZzsKKworbG9va3VwOgorCXJjdV9yZWFkX2xvY2soKTsKKwor CXNnID0gcmFkaXhfdHJlZV9sb29rdXAoJml0ZXItPnJhZGl4LCBuKTsKKwlHRU1fQlVHX09OKCFz Zyk7CisKKwkvKiBJZiB0aGlzIGluZGV4IGlzIGluIHRoZSBtaWRkbGUgb2YgbXVsdGktcGFnZSBz ZyBlbnRyeSwKKwkgKiB0aGUgcmFkaXggdHJlZSB3aWxsIGNvbnRhaW4gYSB2YWx1ZSBlbnRyeSB0 aGF0IHBvaW50cworCSAqIHRvIHRoZSBzdGFydCBvZiB0aGF0IHJhbmdlLiBXZSB3aWxsIHJldHVy biB0aGUgcG9pbnRlciB0bworCSAqIHRoZSBiYXNlIHBhZ2UgYW5kIHRoZSBvZmZzZXQgb2YgdGhp cyBwYWdlIHdpdGhpbiB0aGUKKwkgKiBzZyBlbnRyeSdzIHJhbmdlLgorCSAqLworCSpvZmZzZXQg PSAwOworCWlmICh1bmxpa2VseSh4YV9pc192YWx1ZShzZykpKSB7CisJCXVuc2lnbmVkIGxvbmcg YmFzZSA9IHhhX3RvX3ZhbHVlKHNnKTsKKworCQlzZyA9IHJhZGl4X3RyZWVfbG9va3VwKCZpdGVy LT5yYWRpeCwgYmFzZSk7CisJCUdFTV9CVUdfT04oIXNnKTsKKworCQkqb2Zmc2V0ID0gbiAtIGJh c2U7CisJfQorCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gc2c7Cit9CisKK3N0cnVj dCBwYWdlICoKK2k5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqLCB1bnNpZ25lZCBpbnQgbikKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwor CXVuc2lnbmVkIGludCBvZmZzZXQ7CisKKwlHRU1fQlVHX09OKCFpOTE1X2dlbV9vYmplY3RfaGFz X3N0cnVjdF9wYWdlKG9iaikpOworCisJc2cgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3NnKG9iaiwg biwgJm9mZnNldCk7CisJcmV0dXJuIG50aF9wYWdlKHNnX3BhZ2Uoc2cpLCBvZmZzZXQpOworfQor CisvKiBMaWtlIGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZSgpLCBidXQgbWFyayB0aGUgcmV0dXJu ZWQgcGFnZSBkaXJ0eSAqLworc3RydWN0IHBhZ2UgKgoraTkxNV9nZW1fb2JqZWN0X2dldF9kaXJ0 eV9wYWdlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkgICAgICAgdW5zaWdu ZWQgaW50IG4pCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlwYWdlID0gaTkxNV9nZW1fb2Jq ZWN0X2dldF9wYWdlKG9iaiwgbik7CisJaWYgKCFvYmotPm1tLmRpcnR5KQorCQlzZXRfcGFnZV9k aXJ0eShwYWdlKTsKKworCXJldHVybiBwYWdlOworfQorCitkbWFfYWRkcl90CitpOTE1X2dlbV9v YmplY3RfZ2V0X2RtYV9hZGRyZXNzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJ CQkJdW5zaWduZWQgbG9uZyBuKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWdu ZWQgaW50IG9mZnNldDsKKworCXNnID0gaTkxNV9nZW1fb2JqZWN0X2dldF9zZyhvYmosIG4sICZv ZmZzZXQpOworCXJldHVybiBzZ19kbWFfYWRkcmVzcyhzZykgKyAob2Zmc2V0IDw8IFBBR0VfU0hJ RlQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Bo eXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9waHlzLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xYmYzZTBhZmNiYTIKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGh5cy5jCkBAIC0wLDAg KzEsMjEyIEBACisvKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAorICoKKyAqIENv cHlyaWdodCDCqSAyMDE0LTIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaW5jbHVkZSA8 bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+CisjaW5jbHVkZSA8 bGludXgvc3dhcC5oPgorCisjaW5jbHVkZSA8ZHJtL2RybS5oPiAvKiBmb3IgZHJtX2xlZ2FjeS5o ISAqLworI2luY2x1ZGUgPGRybS9kcm1fY2FjaGUuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2xlZ2Fj eS5oPiAvKiBmb3IgZHJtX3BjaS5oISAqLworI2luY2x1ZGUgPGRybS9kcm1fcGNpLmg+CisKKyNp bmNsdWRlICJpOTE1X2dlbV9vYmplY3QuaCIKKworI2luY2x1ZGUgIi4uL2k5MTVfZHJ2LmgiCisK K3N0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlc19waHlzKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBv YmotPmJhc2UuZmlscC0+Zl9tYXBwaW5nOworCXN0cnVjdCBkcm1fZG1hX2hhbmRsZSAqcGh5czsK KwlzdHJ1Y3Qgc2dfdGFibGUgKnN0OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJY2hhciAq dmFkZHI7CisJaW50IGk7CisJaW50IGVycjsKKworCWlmIChXQVJOX09OKGk5MTVfZ2VtX29iamVj dF9uZWVkc19iaXQxN19zd2l6emxlKG9iaikpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEFs d2F5cyBhbGlnbmluZyB0byB0aGUgb2JqZWN0IHNpemUsIGFsbG93cyBhIHNpbmdsZSBhbGxvY2F0 aW9uCisJICogdG8gaGFuZGxlIGFsbCBwb3NzaWJsZSBjYWxsZXJzLCBhbmQgZ2l2ZW4gdHlwaWNh bCBvYmplY3Qgc2l6ZXMsCisJICogdGhlIGFsaWdubWVudCBvZiB0aGUgYnVkZHkgYWxsb2NhdGlv biB3aWxsIG5hdHVyYWxseSBtYXRjaC4KKwkgKi8KKwlwaHlzID0gZHJtX3BjaV9hbGxvYyhvYmot PmJhc2UuZGV2LAorCQkJICAgICByb3VuZHVwX3Bvd19vZl90d28ob2JqLT5iYXNlLnNpemUpLAor CQkJICAgICByb3VuZHVwX3Bvd19vZl90d28ob2JqLT5iYXNlLnNpemUpKTsKKwlpZiAoIXBoeXMp CisJCXJldHVybiAtRU5PTUVNOworCisJdmFkZHIgPSBwaHlzLT52YWRkcjsKKwlmb3IgKGkgPSAw OyBpIDwgb2JqLT5iYXNlLnNpemUgLyBQQUdFX1NJWkU7IGkrKykgeworCQlzdHJ1Y3QgcGFnZSAq cGFnZTsKKwkJY2hhciAqc3JjOworCisJCXBhZ2UgPSBzaG1lbV9yZWFkX21hcHBpbmdfcGFnZSht YXBwaW5nLCBpKTsKKwkJaWYgKElTX0VSUihwYWdlKSkgeworCQkJZXJyID0gUFRSX0VSUihwYWdl KTsKKwkJCWdvdG8gZXJyX3BoeXM7CisJCX0KKworCQlzcmMgPSBrbWFwX2F0b21pYyhwYWdlKTsK KwkJbWVtY3B5KHZhZGRyLCBzcmMsIFBBR0VfU0laRSk7CisJCWRybV9jbGZsdXNoX3ZpcnRfcmFu Z2UodmFkZHIsIFBBR0VfU0laRSk7CisJCWt1bm1hcF9hdG9taWMoc3JjKTsKKworCQlwdXRfcGFn ZShwYWdlKTsKKwkJdmFkZHIgKz0gUEFHRV9TSVpFOworCX0KKworCWk5MTVfZ2VtX2NoaXBzZXRf Zmx1c2godG9faTkxNShvYmotPmJhc2UuZGV2KSk7CisKKwlzdCA9IGttYWxsb2Moc2l6ZW9mKCpz dCksIEdGUF9LRVJORUwpOworCWlmICghc3QpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBl cnJfcGh5czsKKwl9CisKKwlpZiAoc2dfYWxsb2NfdGFibGUoc3QsIDEsIEdGUF9LRVJORUwpKSB7 CisJCWtmcmVlKHN0KTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfcGh5czsKKwl9CisK KwlzZyA9IHN0LT5zZ2w7CisJc2ctPm9mZnNldCA9IDA7CisJc2ctPmxlbmd0aCA9IG9iai0+YmFz ZS5zaXplOworCisJc2dfZG1hX2FkZHJlc3Moc2cpID0gcGh5cy0+YnVzYWRkcjsKKwlzZ19kbWFf bGVuKHNnKSA9IG9iai0+YmFzZS5zaXplOworCisJb2JqLT5waHlzX2hhbmRsZSA9IHBoeXM7CisK KwlfX2k5MTVfZ2VtX29iamVjdF9zZXRfcGFnZXMob2JqLCBzdCwgc2ctPmxlbmd0aCk7CisKKwly ZXR1cm4gMDsKKworZXJyX3BoeXM6CisJZHJtX3BjaV9mcmVlKG9iai0+YmFzZS5kZXYsIHBoeXMp OworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQKK2k5MTVfZ2VtX29iamVjdF9wdXRf cGFnZXNfcGh5cyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJICAgICAgIHN0 cnVjdCBzZ190YWJsZSAqcGFnZXMpCit7CisJX19pOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9zaG1l bShvYmosIHBhZ2VzLCBmYWxzZSk7CisKKwlpZiAob2JqLT5tbS5kaXJ0eSkgeworCQlzdHJ1Y3Qg YWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IG9iai0+YmFzZS5maWxwLT5mX21hcHBpbmc7CisJCWNo YXIgKnZhZGRyID0gb2JqLT5waHlzX2hhbmRsZS0+dmFkZHI7CisJCWludCBpOworCisJCWZvciAo aSA9IDA7IGkgPCBvYmotPmJhc2Uuc2l6ZSAvIFBBR0VfU0laRTsgaSsrKSB7CisJCQlzdHJ1Y3Qg cGFnZSAqcGFnZTsKKwkJCWNoYXIgKmRzdDsKKworCQkJcGFnZSA9IHNobWVtX3JlYWRfbWFwcGlu Z19wYWdlKG1hcHBpbmcsIGkpOworCQkJaWYgKElTX0VSUihwYWdlKSkKKwkJCQljb250aW51ZTsK KworCQkJZHN0ID0ga21hcF9hdG9taWMocGFnZSk7CisJCQlkcm1fY2xmbHVzaF92aXJ0X3Jhbmdl KHZhZGRyLCBQQUdFX1NJWkUpOworCQkJbWVtY3B5KGRzdCwgdmFkZHIsIFBBR0VfU0laRSk7CisJ CQlrdW5tYXBfYXRvbWljKGRzdCk7CisKKwkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOworCQkJaWYg KG9iai0+bW0ubWFkdiA9PSBJOTE1X01BRFZfV0lMTE5FRUQpCisJCQkJbWFya19wYWdlX2FjY2Vz c2VkKHBhZ2UpOworCQkJcHV0X3BhZ2UocGFnZSk7CisJCQl2YWRkciArPSBQQUdFX1NJWkU7CisJ CX0KKwkJb2JqLT5tbS5kaXJ0eSA9IGZhbHNlOworCX0KKworCXNnX2ZyZWVfdGFibGUocGFnZXMp OworCWtmcmVlKHBhZ2VzKTsKKworCWRybV9wY2lfZnJlZShvYmotPmJhc2UuZGV2LCBvYmotPnBo eXNfaGFuZGxlKTsKK30KKworc3RhdGljIHZvaWQKK2k5MTVfZ2VtX29iamVjdF9yZWxlYXNlX3Bo eXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlpOTE1X2dlbV9vYmplY3Rf dW5waW5fcGFnZXMob2JqKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0X29wcyBpOTE1X2dlbV9waHlzX29wcyA9IHsKKwkuZ2V0X3BhZ2VzID0gaTkxNV9nZW1f b2JqZWN0X2dldF9wYWdlc19waHlzLAorCS5wdXRfcGFnZXMgPSBpOTE1X2dlbV9vYmplY3RfcHV0 X3BhZ2VzX3BoeXMsCisJLnJlbGVhc2UgPSBpOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9waHlzLAor fTsKKworaW50IGk5MTVfZ2VtX29iamVjdF9hdHRhY2hfcGh5cyhzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLCBpbnQgYWxpZ24pCit7CisJc3RydWN0IHNnX3RhYmxlICpwYWdlczsKKwlp bnQgZXJyOworCisJaWYgKGFsaWduID4gb2JqLT5iYXNlLnNpemUpCisJCXJldHVybiAtRUlOVkFM OworCisJaWYgKG9iai0+b3BzID09ICZpOTE1X2dlbV9waHlzX29wcykKKwkJcmV0dXJuIDA7CisK KwlpZiAob2JqLT5vcHMgIT0gJmk5MTVfZ2VtX3NobWVtX29wcykKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwllcnIgPSBpOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaik7CisJaWYgKGVycikKKwkJcmV0 dXJuIGVycjsKKworCW11dGV4X2xvY2soJm9iai0+bW0ubG9jayk7CisKKwlpZiAob2JqLT5tbS5t YWR2ICE9IEk5MTVfTUFEVl9XSUxMTkVFRCkgeworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIGVy cl91bmxvY2s7CisJfQorCisJaWYgKG9iai0+bW0ucXVpcmtlZCkgeworCQllcnIgPSAtRUZBVUxU OworCQlnb3RvIGVycl91bmxvY2s7CisJfQorCisJaWYgKG9iai0+bW0ubWFwcGluZykgeworCQll cnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3VubG9jazsKKwl9CisKKwlwYWdlcyA9IF9faTkxNV9n ZW1fb2JqZWN0X3Vuc2V0X3BhZ2VzKG9iaik7CisKKwlvYmotPm9wcyA9ICZpOTE1X2dlbV9waHlz X29wczsKKworCWVyciA9IF9fX19pOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKG9iaik7CisJaWYg KGVycikKKwkJZ290byBlcnJfeGZlcjsKKworCS8qIFBlcm1hLXBpbiAodW50aWwgcmVsZWFzZSkg dGhlIHBoeXNpY2FsIHNldCBvZiBwYWdlcyAqLworCV9faTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdl cyhvYmopOworCisJaWYgKCFJU19FUlJfT1JfTlVMTChwYWdlcykpCisJCWk5MTVfZ2VtX3NobWVt X29wcy5wdXRfcGFnZXMob2JqLCBwYWdlcyk7CisJbXV0ZXhfdW5sb2NrKCZvYmotPm1tLmxvY2sp OworCXJldHVybiAwOworCitlcnJfeGZlcjoKKwlvYmotPm9wcyA9ICZpOTE1X2dlbV9zaG1lbV9v cHM7CisJaWYgKCFJU19FUlJfT1JfTlVMTChwYWdlcykpIHsKKwkJdW5zaWduZWQgaW50IHNnX3Bh Z2Vfc2l6ZXMgPSBpOTE1X3NnX3BhZ2Vfc2l6ZXMocGFnZXMtPnNnbCk7CisKKwkJX19pOTE1X2dl bV9vYmplY3Rfc2V0X3BhZ2VzKG9iaiwgcGFnZXMsIHNnX3BhZ2Vfc2l6ZXMpOworCX0KK2Vycl91 bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZvYmotPm1tLmxvY2spOworCXJldHVybiBlcnI7Cit9CisK KyNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9TRUxGVEVTVCkKKyNpbmNsdWRlICJzZWxm dGVzdHMvaTkxNV9nZW1fcGh5cy5jIgorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fc2htZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9zaG1lbS5jCmluZGV4IGJjY2MwOTQ0ZDE3Ny4uOWEwOGFiYTYwMDVlIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2htZW0uYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2htZW0uYwpAQCAtMjE0LDYgKzIxNCwyNiBA QCBzdGF0aWMgaW50IHNobWVtX2dldF9wYWdlc19ndHQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaikKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZAorc2htZW1fdHJ1bmNhdGUo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwkvKgorCSAqIE91ciBnb2FsIGhl cmUgaXMgdG8gcmV0dXJuIGFzIG11Y2ggb2YgdGhlIG1lbW9yeSBhcworCSAqIGlzIHBvc3NpYmxl IGJhY2sgdG8gdGhlIHN5c3RlbSBhcyB3ZSBhcmUgY2FsbGVkIGZyb20gT09NLgorCSAqIFRvIGRv IHRoaXMgd2UgbXVzdCBpbnN0cnVjdCB0aGUgc2htZnMgdG8gZHJvcCBhbGwgb2YgaXRzCisJICog YmFja2luZyBwYWdlcywgKm5vdyouCisJICovCisJc2htZW1fdHJ1bmNhdGVfcmFuZ2UoZmlsZV9p bm9kZShvYmotPmJhc2UuZmlscCksIDAsIChsb2ZmX3QpLTEpOworCW9iai0+bW0ubWFkdiA9IF9f STkxNV9NQURWX1BVUkdFRDsKKwlvYmotPm1tLnBhZ2VzID0gRVJSX1BUUigtRUZBVUxUKTsKK30K Kworc3RhdGljIHZvaWQKK3NobWVtX2ludmFsaWRhdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaikKK3sKKwlpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXMob2JqLT5iYXNlLmZpbHAtPmZf bWFwcGluZywgMCwgKGxvZmZfdCktMSk7Cit9CisKIHZvaWQKIF9faTkxNV9nZW1fb2JqZWN0X3Jl bGVhc2Vfc2htZW0oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCQlzdHJ1Y3Qg c2dfdGFibGUgKnBhZ2VzLApAQCAtMzQ1LDYgKzM2NSw4IEBAIGNvbnN0IHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0X29wcyBpOTE1X2dlbV9zaG1lbV9vcHMgPSB7CiAKIAkuZ2V0X3BhZ2VzID0g c2htZW1fZ2V0X3BhZ2VzX2d0dCwKIAkucHV0X3BhZ2VzID0gc2htZW1fcHV0X3BhZ2VzX2d0dCwK KwkudHJ1bmNhdGUgPSBzaG1lbV90cnVuY2F0ZSwKKwkuaW52YWxpZGF0ZSA9IHNobWVtX2ludmFs aWRhdGUsCiAKIAkucHdyaXRlID0gc2htZW1fcHdyaXRlX2d0dCwKIH07CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX3BoeXMuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fcGh5cy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjc2YjUwM2IzOTk5Ci0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9waHlzLmMK QEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKyAq CisgKiBDb3B5cmlnaHQgwqkgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpbmNsdWRl ICIuLi8uLi9pOTE1X3NlbGZ0ZXN0LmgiCisKKyNpbmNsdWRlICIuLi8uLi9zZWxmdGVzdHMvbW9j a19nZW1fZGV2aWNlLmgiCisKK3N0YXRpYyBpbnQgbW9ja19waHlzX29iamVjdCh2b2lkICphcmcp Cit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBhcmc7CisJc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iajsKKwlpbnQgZXJyOworCisJLyogQ3JlYXRlIGFuIG9iamVjdCBh bmQgYmluZCBpdCB0byBhIGNvbnRpZ3VvdXMgc2V0IG9mIHBoeXNpY2FsIHBhZ2VzLAorCSAqIGku ZS4gZXhlcmNpc2UgdGhlIGk5MTVfZ2VtX29iamVjdF9waHlzIEFQSS4KKwkgKi8KKworCW9iaiA9 IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc2htZW0oaTkxNSwgUEFHRV9TSVpFKTsKKwlpZiAoSVNf RVJSKG9iaikpIHsKKwkJZXJyID0gUFRSX0VSUihvYmopOworCQlwcl9lcnIoImk5MTVfZ2VtX29i amVjdF9jcmVhdGUgZmFpbGVkLCBlcnI9JWRcbiIsIGVycik7CisJCWdvdG8gb3V0OworCX0KKwor CW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCWVyciA9IGk5MTVfZ2VtX29i amVjdF9hdHRhY2hfcGh5cyhvYmosIFBBR0VfU0laRSk7CisJbXV0ZXhfdW5sb2NrKCZpOTE1LT5k cm0uc3RydWN0X211dGV4KTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiaTkxNV9nZW1fb2JqZWN0 X2F0dGFjaF9waHlzIGZhaWxlZCwgZXJyPSVkXG4iLCBlcnIpOworCQlnb3RvIG91dF9vYmo7CisJ fQorCisJaWYgKG9iai0+b3BzICE9ICZpOTE1X2dlbV9waHlzX29wcykgeworCQlwcl9lcnIoImk5 MTVfZ2VtX29iamVjdF9hdHRhY2hfcGh5cyBkaWQgbm90IGNyZWF0ZSBhIHBoeXMgb2JqZWN0XG4i KTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXRfb2JqOworCX0KKworCWlmICghYXRvbWlj X3JlYWQoJm9iai0+bW0ucGFnZXNfcGluX2NvdW50KSkgeworCQlwcl9lcnIoImk5MTVfZ2VtX29i amVjdF9hdHRhY2hfcGh5cyBkaWQgbm90IHBpbiBpdHMgcGh5cyBwYWdlc1xuIik7CisJCWVyciA9 IC1FSU5WQUw7CisJCWdvdG8gb3V0X29iajsKKwl9CisKKwkvKiBNYWtlIHRoZSBvYmplY3QgZGly dHkgc28gdGhhdCBwdXRfcGFnZXMgbXVzdCBkbyBjb3B5IGJhY2sgdGhlIGRhdGEgKi8KKwltdXRl eF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwllcnIgPSBpOTE1X2dlbV9vYmplY3Rf c2V0X3RvX2d0dF9kb21haW4ob2JqLCB0cnVlKTsKKwltdXRleF91bmxvY2soJmk5MTUtPmRybS5z dHJ1Y3RfbXV0ZXgpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJpOTE1X2dlbV9vYmplY3Rfc2V0 X3RvX2d0dF9kb21haW4gZmFpbGVkIHdpdGggZXJyPSVkXG4iLAorCQkgICAgICAgZXJyKTsKKwkJ Z290byBvdXRfb2JqOworCX0KKworb3V0X29iajoKKwlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7 CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworaW50IGk5MTVfZ2VtX3BoeXNfbW9ja19zZWxmdGVz dHModm9pZCkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVzdCB0ZXN0c1tdID0g eworCQlTVUJURVNUKG1vY2tfcGh5c19vYmplY3QpLAorCX07CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTU7CisJaW50IGVycjsKKworCWk5MTUgPSBtb2NrX2dlbV9kZXZpY2UoKTsKKwlp ZiAoIWk5MTUpCisJCXJldHVybiAtRU5PTUVNOworCisJZXJyID0gaTkxNV9zdWJ0ZXN0cyh0ZXN0 cywgaTkxNSk7CisKKwlkcm1fZGV2X3B1dCgmaTkxNS0+ZHJtKTsKKwlyZXR1cm4gZXJyOworfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggZmZiYjhhMTBhNzE0Li4yZDlhYWE0NWY5NTAgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMjg4Niw4ICsyODg2LDYgQEAgaTkxNV9nZW1fb2Jq ZWN0X3Bpbl90b19kaXNwbGF5X3BsYW5lKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmos CiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcgKnZpZXcsCiAJCQkJICAgICB1 bnNpZ25lZCBpbnQgZmxhZ3MpOwogdm9pZCBpOTE1X2dlbV9vYmplY3RfdW5waW5fZnJvbV9kaXNw bGF5X3BsYW5lKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKTsKLWludCBpOTE1X2dlbV9vYmplY3RfYXR0 YWNoX3BoeXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKLQkJCQlpbnQgYWxpZ24p OwogaW50IGk5MTVfZ2VtX29wZW4oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHN0cnVj dCBkcm1fZmlsZSAqZmlsZSk7CiB2b2lkIGk5MTVfZ2VtX3JlbGVhc2Uoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMK aW5kZXggNTgxNmUzMmZlMzBiLi42OWExZjNjZTE5ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0u YwpAQCAtMjYsNyArMjYsNiBAQAogICovCiAKICNpbmNsdWRlIDxkcm0vZHJtX3ZtYV9tYW5hZ2Vy Lmg+Ci0jaW5jbHVkZSA8ZHJtL2RybV9wY2kuaD4KICNpbmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4K ICNpbmNsdWRlIDxsaW51eC9kbWEtZmVuY2UtYXJyYXkuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhy ZWFkLmg+CkBAIC0xOTQsMTMzICsxOTMsNiBAQCBpOTE1X2dlbV9nZXRfYXBlcnR1cmVfaW9jdGwo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAlyZXR1cm4gMDsKIH0KIAotc3Rh dGljIGludCBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzX3BoeXMoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaikKLXsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IG9iai0+ YmFzZS5maWxwLT5mX21hcHBpbmc7Ci0JZHJtX2RtYV9oYW5kbGVfdCAqcGh5czsKLQlzdHJ1Y3Qg c2dfdGFibGUgKnN0OwotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0JY2hhciAqdmFkZHI7Ci0J aW50IGk7Ci0JaW50IGVycjsKLQotCWlmIChXQVJOX09OKGk5MTVfZ2VtX29iamVjdF9uZWVkc19i aXQxN19zd2l6emxlKG9iaikpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIEFsd2F5cyBhbGln bmluZyB0byB0aGUgb2JqZWN0IHNpemUsIGFsbG93cyBhIHNpbmdsZSBhbGxvY2F0aW9uCi0JICog dG8gaGFuZGxlIGFsbCBwb3NzaWJsZSBjYWxsZXJzLCBhbmQgZ2l2ZW4gdHlwaWNhbCBvYmplY3Qg c2l6ZXMsCi0JICogdGhlIGFsaWdubWVudCBvZiB0aGUgYnVkZHkgYWxsb2NhdGlvbiB3aWxsIG5h dHVyYWxseSBtYXRjaC4KLQkgKi8KLQlwaHlzID0gZHJtX3BjaV9hbGxvYyhvYmotPmJhc2UuZGV2 LAotCQkJICAgICByb3VuZHVwX3Bvd19vZl90d28ob2JqLT5iYXNlLnNpemUpLAotCQkJICAgICBy b3VuZHVwX3Bvd19vZl90d28ob2JqLT5iYXNlLnNpemUpKTsKLQlpZiAoIXBoeXMpCi0JCXJldHVy biAtRU5PTUVNOwotCi0JdmFkZHIgPSBwaHlzLT52YWRkcjsKLQlmb3IgKGkgPSAwOyBpIDwgb2Jq LT5iYXNlLnNpemUgLyBQQUdFX1NJWkU7IGkrKykgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQkJ Y2hhciAqc3JjOwotCi0JCXBhZ2UgPSBzaG1lbV9yZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBp KTsKLQkJaWYgKElTX0VSUihwYWdlKSkgewotCQkJZXJyID0gUFRSX0VSUihwYWdlKTsKLQkJCWdv dG8gZXJyX3BoeXM7Ci0JCX0KLQotCQlzcmMgPSBrbWFwX2F0b21pYyhwYWdlKTsKLQkJbWVtY3B5 KHZhZGRyLCBzcmMsIFBBR0VfU0laRSk7Ci0JCWRybV9jbGZsdXNoX3ZpcnRfcmFuZ2UodmFkZHIs IFBBR0VfU0laRSk7Ci0JCWt1bm1hcF9hdG9taWMoc3JjKTsKLQotCQlwdXRfcGFnZShwYWdlKTsK LQkJdmFkZHIgKz0gUEFHRV9TSVpFOwotCX0KLQotCWk5MTVfZ2VtX2NoaXBzZXRfZmx1c2godG9f aTkxNShvYmotPmJhc2UuZGV2KSk7Ci0KLQlzdCA9IGttYWxsb2Moc2l6ZW9mKCpzdCksIEdGUF9L RVJORUwpOwotCWlmICghc3QpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfcGh5czsK LQl9Ci0KLQlpZiAoc2dfYWxsb2NfdGFibGUoc3QsIDEsIEdGUF9LRVJORUwpKSB7Ci0JCWtmcmVl KHN0KTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfcGh5czsKLQl9Ci0KLQlzZyA9IHN0 LT5zZ2w7Ci0Jc2ctPm9mZnNldCA9IDA7Ci0Jc2ctPmxlbmd0aCA9IG9iai0+YmFzZS5zaXplOwot Ci0Jc2dfZG1hX2FkZHJlc3Moc2cpID0gcGh5cy0+YnVzYWRkcjsKLQlzZ19kbWFfbGVuKHNnKSA9 IG9iai0+YmFzZS5zaXplOwotCi0Jb2JqLT5waHlzX2hhbmRsZSA9IHBoeXM7Ci0KLQlfX2k5MTVf Z2VtX29iamVjdF9zZXRfcGFnZXMob2JqLCBzdCwgc2ctPmxlbmd0aCk7Ci0KLQlyZXR1cm4gMDsK LQotZXJyX3BoeXM6Ci0JZHJtX3BjaV9mcmVlKG9iai0+YmFzZS5kZXYsIHBoeXMpOwotCi0JcmV0 dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQKLWk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXNfcGh5 cyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAotCQkJICAgICAgIHN0cnVjdCBzZ190 YWJsZSAqcGFnZXMpCi17Ci0JX19pOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9zaG1lbShvYmosIHBh Z2VzLCBmYWxzZSk7Ci0KLQlpZiAob2JqLT5tbS5kaXJ0eSkgewotCQlzdHJ1Y3QgYWRkcmVzc19z cGFjZSAqbWFwcGluZyA9IG9iai0+YmFzZS5maWxwLT5mX21hcHBpbmc7Ci0JCWNoYXIgKnZhZGRy ID0gb2JqLT5waHlzX2hhbmRsZS0+dmFkZHI7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IDA7IGkg PCBvYmotPmJhc2Uuc2l6ZSAvIFBBR0VfU0laRTsgaSsrKSB7Ci0JCQlzdHJ1Y3QgcGFnZSAqcGFn ZTsKLQkJCWNoYXIgKmRzdDsKLQotCQkJcGFnZSA9IHNobWVtX3JlYWRfbWFwcGluZ19wYWdlKG1h cHBpbmcsIGkpOwotCQkJaWYgKElTX0VSUihwYWdlKSkKLQkJCQljb250aW51ZTsKLQotCQkJZHN0 ID0ga21hcF9hdG9taWMocGFnZSk7Ci0JCQlkcm1fY2xmbHVzaF92aXJ0X3JhbmdlKHZhZGRyLCBQ QUdFX1NJWkUpOwotCQkJbWVtY3B5KGRzdCwgdmFkZHIsIFBBR0VfU0laRSk7Ci0JCQlrdW5tYXBf YXRvbWljKGRzdCk7Ci0KLQkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCQkJaWYgKG9iai0+bW0u bWFkdiA9PSBJOTE1X01BRFZfV0lMTE5FRUQpCi0JCQkJbWFya19wYWdlX2FjY2Vzc2VkKHBhZ2Up OwotCQkJcHV0X3BhZ2UocGFnZSk7Ci0JCQl2YWRkciArPSBQQUdFX1NJWkU7Ci0JCX0KLQkJb2Jq LT5tbS5kaXJ0eSA9IGZhbHNlOwotCX0KLQotCXNnX2ZyZWVfdGFibGUocGFnZXMpOwotCWtmcmVl KHBhZ2VzKTsKLQotCWRybV9wY2lfZnJlZShvYmotPmJhc2UuZGV2LCBvYmotPnBoeXNfaGFuZGxl KTsKLX0KLQotc3RhdGljIHZvaWQKLWk5MTVfZ2VtX29iamVjdF9yZWxlYXNlX3BoeXMoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLQlpOTE1X2dlbV9vYmplY3RfdW5waW5fcGFn ZXMob2JqKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29w cyBpOTE1X2dlbV9waHlzX29wcyA9IHsKLQkuZ2V0X3BhZ2VzID0gaTkxNV9nZW1fb2JqZWN0X2dl dF9wYWdlc19waHlzLAotCS5wdXRfcGFnZXMgPSBpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzX3Bo eXMsCi0JLnJlbGVhc2UgPSBpOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9waHlzLAotfTsKLQogaW50 IGk5MTVfZ2VtX29iamVjdF91bmJpbmQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikK IHsKIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKQEAgLTIwMjAsMTEgKzE4OTIsNiBAQCBzdGF0aWMg aW50IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfbW1hcF9vZmZzZXQoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaikKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBpOTE1X2dlbV9v YmplY3RfZnJlZV9tbWFwX29mZnNldChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQot ewotCWRybV9nZW1fZnJlZV9tbWFwX29mZnNldCgmb2JqLT5iYXNlKTsKLX0KLQogaW50CiBpOTE1 X2dlbV9tbWFwX2d0dChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCiAJCSAgc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKQEAgLTIwNzAsMTM0ICsxOTM3LDYgQEAgaTkxNV9nZW1fbW1hcF9ndHRfaW9jdGwo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAlyZXR1cm4gaTkxNV9nZW1fbW1h cF9ndHQoZmlsZSwgZGV2LCBhcmdzLT5oYW5kbGUsICZhcmdzLT5vZmZzZXQpOwogfQogCi0vKiBJ bW1lZGlhdGVseSBkaXNjYXJkIHRoZSBiYWNraW5nIHN0b3JhZ2UgKi8KLXN0YXRpYyB2b2lkCi1p OTE1X2dlbV9vYmplY3RfdHJ1bmNhdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikK LXsKLQlpOTE1X2dlbV9vYmplY3RfZnJlZV9tbWFwX29mZnNldChvYmopOwotCi0JaWYgKG9iai0+ YmFzZS5maWxwID09IE5VTEwpCi0JCXJldHVybjsKLQotCS8qIE91ciBnb2FsIGhlcmUgaXMgdG8g cmV0dXJuIGFzIG11Y2ggb2YgdGhlIG1lbW9yeSBhcwotCSAqIGlzIHBvc3NpYmxlIGJhY2sgdG8g dGhlIHN5c3RlbSBhcyB3ZSBhcmUgY2FsbGVkIGZyb20gT09NLgotCSAqIFRvIGRvIHRoaXMgd2Ug bXVzdCBpbnN0cnVjdCB0aGUgc2htZnMgdG8gZHJvcCBhbGwgb2YgaXRzCi0JICogYmFja2luZyBw YWdlcywgKm5vdyouCi0JICovCi0Jc2htZW1fdHJ1bmNhdGVfcmFuZ2UoZmlsZV9pbm9kZShvYmot PmJhc2UuZmlscCksIDAsIChsb2ZmX3QpLTEpOwotCW9iai0+bW0ubWFkdiA9IF9fSTkxNV9NQURW X1BVUkdFRDsKLQlvYmotPm1tLnBhZ2VzID0gRVJSX1BUUigtRUZBVUxUKTsKLX0KLQotLyogVHJ5 IHRvIGRpc2NhcmQgdW53YW50ZWQgcGFnZXMgKi8KLXZvaWQgX19pOTE1X2dlbV9vYmplY3RfaW52 YWxpZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQotewotCXN0cnVjdCBhZGRy ZXNzX3NwYWNlICptYXBwaW5nOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmb2JqLT5tbS5sb2Nr KTsKLQlHRU1fQlVHX09OKGk5MTVfZ2VtX29iamVjdF9oYXNfcGFnZXMob2JqKSk7Ci0KLQlzd2l0 Y2ggKG9iai0+bW0ubWFkdikgewotCWNhc2UgSTkxNV9NQURWX0RPTlRORUVEOgotCQlpOTE1X2dl bV9vYmplY3RfdHJ1bmNhdGUob2JqKTsKLQljYXNlIF9fSTkxNV9NQURWX1BVUkdFRDoKLQkJcmV0 dXJuOwotCX0KLQotCWlmIChvYmotPmJhc2UuZmlscCA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlt YXBwaW5nID0gb2JqLT5iYXNlLmZpbHAtPmZfbWFwcGluZywKLQlpbnZhbGlkYXRlX21hcHBpbmdf cGFnZXMobWFwcGluZywgMCwgKGxvZmZfdCktMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faTkxNV9n ZW1fb2JqZWN0X3Jlc2V0X3BhZ2VfaXRlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq KQotewotCXN0cnVjdCByYWRpeF90cmVlX2l0ZXIgaXRlcjsKLQl2b2lkIF9fcmN1ICoqc2xvdDsK LQotCXJjdV9yZWFkX2xvY2soKTsKLQlyYWRpeF90cmVlX2Zvcl9lYWNoX3Nsb3Qoc2xvdCwgJm9i ai0+bW0uZ2V0X3BhZ2UucmFkaXgsICZpdGVyLCAwKQotCQlyYWRpeF90cmVlX2RlbGV0ZSgmb2Jq LT5tbS5nZXRfcGFnZS5yYWRpeCwgaXRlci5pbmRleCk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19 Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKgotX19pOTE1X2dlbV9vYmplY3RfdW5zZXRfcGFn ZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUob2JqLT5iYXNlLmRldik7Ci0Jc3RydWN0IHNnX3RhYmxl ICpwYWdlczsKLQotCXBhZ2VzID0gZmV0Y2hfYW5kX3plcm8oJm9iai0+bW0ucGFnZXMpOwotCWlm IChJU19FUlJfT1JfTlVMTChwYWdlcykpCi0JCXJldHVybiBwYWdlczsKLQotCXNwaW5fbG9jaygm aTkxNS0+bW0ub2JqX2xvY2spOwotCWxpc3RfZGVsKCZvYmotPm1tLmxpbmspOwotCXNwaW5fdW5s b2NrKCZpOTE1LT5tbS5vYmpfbG9jayk7Ci0KLQlpZiAob2JqLT5tbS5tYXBwaW5nKSB7Ci0JCXZv aWQgKnB0cjsKLQotCQlwdHIgPSBwYWdlX21hc2tfYml0cyhvYmotPm1tLm1hcHBpbmcpOwotCQlp ZiAoaXNfdm1hbGxvY19hZGRyKHB0cikpCi0JCQl2dW5tYXAocHRyKTsKLQkJZWxzZQotCQkJa3Vu bWFwKGttYXBfdG9fcGFnZShwdHIpKTsKLQotCQlvYmotPm1tLm1hcHBpbmcgPSBOVUxMOwotCX0K LQotCV9faTkxNV9nZW1fb2JqZWN0X3Jlc2V0X3BhZ2VfaXRlcihvYmopOwotCW9iai0+bW0ucGFn ZV9zaXplcy5waHlzID0gb2JqLT5tbS5wYWdlX3NpemVzLnNnID0gMDsKLQotCXJldHVybiBwYWdl czsKLX0KLQotaW50IF9faTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLAotCQkJCWVudW0gaTkxNV9tbV9zdWJjbGFzcyBzdWJjbGFzcykKLXsK LQlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzOwotCWludCByZXQ7Ci0KLQlpZiAoaTkxNV9nZW1fb2Jq ZWN0X2hhc19waW5uZWRfcGFnZXMob2JqKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCUdFTV9CVUdf T04ob2JqLT5iaW5kX2NvdW50KTsKLQotCS8qIE1heSBiZSBjYWxsZWQgYnkgc2hyaW5rZXIgZnJv bSB3aXRoaW4gZ2V0X3BhZ2VzKCkgKG9uIGFub3RoZXIgYm8pICovCi0JbXV0ZXhfbG9ja19uZXN0 ZWQoJm9iai0+bW0ubG9jaywgc3ViY2xhc3MpOwotCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgm b2JqLT5tbS5wYWdlc19waW5fY291bnQpKSkgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gdW5s b2NrOwotCX0KLQotCS8qCi0JICogLT5wdXRfcGFnZXMgbWlnaHQgbmVlZCB0byBhbGxvY2F0ZSBt ZW1vcnkgZm9yIHRoZSBiaXQxNyBzd2l6emxlCi0JICogYXJyYXksIGhlbmNlIHByb3RlY3QgdGhl bSBmcm9tIGJlaW5nIHJlYXBlZCBieSByZW1vdmluZyB0aGVtIGZyb20gZ3R0Ci0JICogbGlzdHMg ZWFybHkuCi0JICovCi0JcGFnZXMgPSBfX2k5MTVfZ2VtX29iamVjdF91bnNldF9wYWdlcyhvYmop OwotCi0JLyoKLQkgKiBYWFggVGVtcG9yYXJ5IGhpamlueCB0byBhdm9pZCB1cGRhdGluZyBhbGwg YmFja2VuZHMgdG8gaGFuZGxlCi0JICogTlVMTCBwYWdlcy4gSW4gdGhlIGZ1dHVyZSwgd2hlbiB3 ZSBoYXZlIG1vcmUgYXN5bmNocm9ub3VzCi0JICogZ2V0X3BhZ2VzIGJhY2tlbmRzIHdlIHNob3Vs ZCBiZSBiZXR0ZXIgYWJsZSB0byBoYW5kbGUgdGhlCi0JICogY2FuY2VsbGF0aW9uIG9mIHRoZSBh c3luYyB0YXNrIGluIGEgbW9yZSB1bmlmb3JtIG1hbm5lci4KLQkgKi8KLQlpZiAoIXBhZ2VzICYm ICFpOTE1X2dlbV9vYmplY3RfbmVlZHNfYXN5bmNfY2FuY2VsKG9iaikpCi0JCXBhZ2VzID0gRVJS X1BUUigtRUlOVkFMKTsKLQotCWlmICghSVNfRVJSKHBhZ2VzKSkKLQkJb2JqLT5vcHMtPnB1dF9w YWdlcyhvYmosIHBhZ2VzKTsKLQotCXJldCA9IDA7Ci11bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZv YmotPm1tLmxvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLQogYm9vbCBpOTE1X3NnX3RyaW0oc3Ry dWN0IHNnX3RhYmxlICpvcmlnX3N0KQogewogCXN0cnVjdCBzZ190YWJsZSBuZXdfc3Q7CkBAIC0y MjI2LDIxNyArMTk2NSw2IEBAIGJvb2wgaTkxNV9zZ190cmltKHN0cnVjdCBzZ190YWJsZSAqb3Jp Z19zdCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9zZXRfcGFn ZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKLQkJCQkgc3RydWN0IHNnX3RhYmxl ICpwYWdlcywKLQkJCQkgdW5zaWduZWQgaW50IHNnX3BhZ2Vfc2l6ZXMpCi17Ci0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOwotCXVuc2lnbmVk IGxvbmcgc3VwcG9ydGVkID0gSU5URUxfSU5GTyhpOTE1KS0+cGFnZV9zaXplczsKLQlpbnQgaTsK LQotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm9iai0+bW0ubG9jayk7Ci0KLQlvYmotPm1tLmdldF9w YWdlLnNnX3BvcyA9IHBhZ2VzLT5zZ2w7Ci0Jb2JqLT5tbS5nZXRfcGFnZS5zZ19pZHggPSAwOwot Ci0Jb2JqLT5tbS5wYWdlcyA9IHBhZ2VzOwotCi0JaWYgKGk5MTVfZ2VtX29iamVjdF9pc190aWxl ZChvYmopICYmCi0JICAgIGk5MTUtPnF1aXJrcyAmIFFVSVJLX1BJTl9TV0laWkxFRF9QQUdFUykg ewotCQlHRU1fQlVHX09OKG9iai0+bW0ucXVpcmtlZCk7Ci0JCV9faTkxNV9nZW1fb2JqZWN0X3Bp bl9wYWdlcyhvYmopOwotCQlvYmotPm1tLnF1aXJrZWQgPSB0cnVlOwotCX0KLQotCUdFTV9CVUdf T04oIXNnX3BhZ2Vfc2l6ZXMpOwotCW9iai0+bW0ucGFnZV9zaXplcy5waHlzID0gc2dfcGFnZV9z aXplczsKLQotCS8qCi0JICogQ2FsY3VsYXRlIHRoZSBzdXBwb3J0ZWQgcGFnZS1zaXplcyB3aGlj aCBmaXQgaW50byB0aGUgZ2l2ZW4KLQkgKiBzZ19wYWdlX3NpemVzLiBUaGlzIHdpbGwgZ2l2ZSB1 cyB0aGUgcGFnZS1zaXplcyB3aGljaCB3ZSBtYXkgYmUgYWJsZQotCSAqIHRvIHVzZSBvcHBvcnR1 bmlzdGljYWxseSB3aGVuIGxhdGVyIGluc2VydGluZyBpbnRvIHRoZSBHVFQuIEZvcgotCSAqIGV4 YW1wbGUgaWYgcGh5cz0yRywgdGhlbiBpbiB0aGVvcnkgd2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNl IDFHLCAyTSwKLQkgKiA2NEsgb3IgNEsgcGFnZXMsIGFsdGhvdWdoIGluIHByYWN0aWNlIHRoaXMg d2lsbCBkZXBlbmQgb24gYSBudW1iZXIgb2YKLQkgKiBvdGhlciBmYWN0b3JzLgotCSAqLwotCW9i ai0+bW0ucGFnZV9zaXplcy5zZyA9IDA7Ci0JZm9yX2VhY2hfc2V0X2JpdChpLCAmc3VwcG9ydGVk LCBpbG9nMihJOTE1X0dUVF9NQVhfUEFHRV9TSVpFKSArIDEpIHsKLQkJaWYgKG9iai0+bW0ucGFn ZV9zaXplcy5waHlzICYgfjB1IDw8IGkpCi0JCQlvYmotPm1tLnBhZ2Vfc2l6ZXMuc2cgfD0gQklU KGkpOwotCX0KLQlHRU1fQlVHX09OKCFIQVNfUEFHRV9TSVpFUyhpOTE1LCBvYmotPm1tLnBhZ2Vf c2l6ZXMuc2cpKTsKLQotCXNwaW5fbG9jaygmaTkxNS0+bW0ub2JqX2xvY2spOwotCWxpc3RfYWRk KCZvYmotPm1tLmxpbmssICZpOTE1LT5tbS51bmJvdW5kX2xpc3QpOwotCXNwaW5fdW5sb2NrKCZp OTE1LT5tbS5vYmpfbG9jayk7Ci19Ci0KLXN0YXRpYyBpbnQgX19fX2k5MTVfZ2VtX29iamVjdF9n ZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLQlpbnQgZXJyOwot Ci0JaWYgKHVubGlrZWx5KG9iai0+bW0ubWFkdiAhPSBJOTE1X01BRFZfV0lMTE5FRUQpKSB7Ci0J CURSTV9ERUJVRygiQXR0ZW1wdGluZyB0byBvYnRhaW4gYSBwdXJnZWFibGUgb2JqZWN0XG4iKTsK LQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JZXJyID0gb2JqLT5vcHMtPmdldF9wYWdlcyhvYmop OwotCUdFTV9CVUdfT04oIWVyciAmJiAhaTkxNV9nZW1fb2JqZWN0X2hhc19wYWdlcyhvYmopKTsK LQotCXJldHVybiBlcnI7Ci19Ci0KLS8qIEVuc3VyZSB0aGF0IHRoZSBhc3NvY2lhdGVkIHBhZ2Vz IGFyZSBnYXRoZXJlZCBmcm9tIHRoZSBiYWNraW5nIHN0b3JhZ2UKLSAqIGFuZCBwaW5uZWQgaW50 byBvdXIgb2JqZWN0LiBpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKCkgbWF5IGJlIGNhbGxlZAot ICogbXVsdGlwbGUgdGltZXMgYmVmb3JlIHRoZXkgYXJlIHJlbGVhc2VkIGJ5IGEgc2luZ2xlIGNh bGwgdG8KLSAqIGk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcygpIC0gb25jZSB0aGUgcGFnZXMg YXJlIG5vIGxvbmdlciByZWZlcmVuY2VkCi0gKiBlaXRoZXIgYXMgYSByZXN1bHQgb2YgbWVtb3J5 IHByZXNzdXJlIChyZWFwaW5nIHBhZ2VzIHVuZGVyIHRoZSBzaHJpbmtlcikKLSAqIG9yIGFzIHRo ZSBvYmplY3QgaXMgaXRzZWxmIHJlbGVhc2VkLgotICovCi1pbnQgX19pOTE1X2dlbV9vYmplY3Rf Z2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCi17Ci0JaW50IGVycjsK LQotCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmb2JqLT5tbS5sb2NrKTsKLQlpZiAo ZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKHVubGlrZWx5KCFpOTE1X2dlbV9vYmplY3RfaGFz X3BhZ2VzKG9iaikpKSB7Ci0JCUdFTV9CVUdfT04oaTkxNV9nZW1fb2JqZWN0X2hhc19waW5uZWRf cGFnZXMob2JqKSk7Ci0KLQkJZXJyID0gX19fX2k5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMob2Jq KTsKLQkJaWYgKGVycikKLQkJCWdvdG8gdW5sb2NrOwotCi0JCXNtcF9tYl9fYmVmb3JlX2F0b21p YygpOwotCX0KLQlhdG9taWNfaW5jKCZvYmotPm1tLnBhZ2VzX3Bpbl9jb3VudCk7Ci0KLXVubG9j azoKLQltdXRleF91bmxvY2soJm9iai0+bW0ubG9jayk7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyog VGhlICdtYXBwaW5nJyBwYXJ0IG9mIGk5MTVfZ2VtX29iamVjdF9waW5fbWFwKCkgYmVsb3cgKi8K LXN0YXRpYyB2b2lkICppOTE1X2dlbV9vYmplY3RfbWFwKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmosCi0JCQkJIGVudW0gaTkxNV9tYXBfdHlwZSB0eXBlKQotewotCXVuc2ln bmVkIGxvbmcgbl9wYWdlcyA9IG9iai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQ7Ci0Jc3RydWN0 IHNnX3RhYmxlICpzZ3QgPSBvYmotPm1tLnBhZ2VzOwotCXN0cnVjdCBzZ3RfaXRlciBzZ3RfaXRl cjsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlzdHJ1Y3QgcGFnZSAqc3RhY2tfcGFnZXNbMzJdOwot CXN0cnVjdCBwYWdlICoqcGFnZXMgPSBzdGFja19wYWdlczsKLQl1bnNpZ25lZCBsb25nIGkgPSAw OwotCXBncHJvdF90IHBncHJvdDsKLQl2b2lkICphZGRyOwotCi0JLyogQSBzaW5nbGUgcGFnZSBj YW4gYWx3YXlzIGJlIGttYXBwZWQgKi8KLQlpZiAobl9wYWdlcyA9PSAxICYmIHR5cGUgPT0gSTkx NV9NQVBfV0IpCi0JCXJldHVybiBrbWFwKHNnX3BhZ2Uoc2d0LT5zZ2wpKTsKLQotCWlmIChuX3Bh Z2VzID4gQVJSQVlfU0laRShzdGFja19wYWdlcykpIHsKLQkJLyogVG9vIGJpZyBmb3Igc3RhY2sg LS0gYWxsb2NhdGUgdGVtcG9yYXJ5IGFycmF5IGluc3RlYWQgKi8KLQkJcGFnZXMgPSBrdm1hbGxv Y19hcnJheShuX3BhZ2VzLCBzaXplb2YoKnBhZ2VzKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGFn ZXMpCi0JCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlmb3JfZWFjaF9zZ3RfcGFnZShwYWdlLCBzZ3Rf aXRlciwgc2d0KQotCQlwYWdlc1tpKytdID0gcGFnZTsKLQotCS8qIENoZWNrIHRoYXQgd2UgaGF2 ZSB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIHBhZ2VzICovCi0JR0VNX0JVR19PTihpICE9IG5fcGFn ZXMpOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKHR5cGUp OwotCQkvKiBmYWxsdGhyb3VnaCB0byB1c2UgUEFHRV9LRVJORUwgYW55d2F5ICovCi0JY2FzZSBJ OTE1X01BUF9XQjoKLQkJcGdwcm90ID0gUEFHRV9LRVJORUw7Ci0JCWJyZWFrOwotCWNhc2UgSTkx NV9NQVBfV0M6Ci0JCXBncHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUoUEFHRV9LRVJORUxfSU8p OwotCQlicmVhazsKLQl9Ci0JYWRkciA9IHZtYXAocGFnZXMsIG5fcGFnZXMsIDAsIHBncHJvdCk7 Ci0KLQlpZiAocGFnZXMgIT0gc3RhY2tfcGFnZXMpCi0JCWt2ZnJlZShwYWdlcyk7Ci0KLQlyZXR1 cm4gYWRkcjsKLX0KLQotLyogZ2V0LCBwaW4sIGFuZCBtYXAgdGhlIHBhZ2VzIG9mIHRoZSBvYmpl Y3QgaW50byBrZXJuZWwgc3BhY2UgKi8KLXZvaWQgKmk5MTVfZ2VtX29iamVjdF9waW5fbWFwKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkgICAgICBlbnVtIGk5MTVfbWFwX3R5 cGUgdHlwZSkKLXsKLQllbnVtIGk5MTVfbWFwX3R5cGUgaGFzX3R5cGU7Ci0JYm9vbCBwaW5uZWQ7 Ci0Jdm9pZCAqcHRyOwotCWludCByZXQ7Ci0KLQlpZiAodW5saWtlbHkoIWk5MTVfZ2VtX29iamVj dF9oYXNfc3RydWN0X3BhZ2Uob2JqKSkpCi0JCXJldHVybiBFUlJfUFRSKC1FTlhJTyk7Ci0KLQly ZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJm9iai0+bW0ubG9jayk7Ci0JaWYgKHJldCkK LQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKLQotCXBpbm5lZCA9ICEodHlwZSAmIEk5MTVfTUFQX09W RVJSSURFKTsKLQl0eXBlICY9IH5JOTE1X01BUF9PVkVSUklERTsKLQotCWlmICghYXRvbWljX2lu Y19ub3RfemVybygmb2JqLT5tbS5wYWdlc19waW5fY291bnQpKSB7Ci0JCWlmICh1bmxpa2VseSgh aTkxNV9nZW1fb2JqZWN0X2hhc19wYWdlcyhvYmopKSkgewotCQkJR0VNX0JVR19PTihpOTE1X2dl bV9vYmplY3RfaGFzX3Bpbm5lZF9wYWdlcyhvYmopKTsKLQotCQkJcmV0ID0gX19fX2k5MTVfZ2Vt X29iamVjdF9nZXRfcGFnZXMob2JqKTsKLQkJCWlmIChyZXQpCi0JCQkJZ290byBlcnJfdW5sb2Nr OwotCi0JCQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKLQkJfQotCQlhdG9taWNfaW5jKCZvYmot Pm1tLnBhZ2VzX3Bpbl9jb3VudCk7Ci0JCXBpbm5lZCA9IGZhbHNlOwotCX0KLQlHRU1fQlVHX09O KCFpOTE1X2dlbV9vYmplY3RfaGFzX3BhZ2VzKG9iaikpOwotCi0JcHRyID0gcGFnZV91bnBhY2tf Yml0cyhvYmotPm1tLm1hcHBpbmcsICZoYXNfdHlwZSk7Ci0JaWYgKHB0ciAmJiBoYXNfdHlwZSAh PSB0eXBlKSB7Ci0JCWlmIChwaW5uZWQpIHsKLQkJCXJldCA9IC1FQlVTWTsKLQkJCWdvdG8gZXJy X3VucGluOwotCQl9Ci0KLQkJaWYgKGlzX3ZtYWxsb2NfYWRkcihwdHIpKQotCQkJdnVubWFwKHB0 cik7Ci0JCWVsc2UKLQkJCWt1bm1hcChrbWFwX3RvX3BhZ2UocHRyKSk7Ci0KLQkJcHRyID0gb2Jq LT5tbS5tYXBwaW5nID0gTlVMTDsKLQl9Ci0KLQlpZiAoIXB0cikgewotCQlwdHIgPSBpOTE1X2dl bV9vYmplY3RfbWFwKG9iaiwgdHlwZSk7Ci0JCWlmICghcHRyKSB7Ci0JCQlyZXQgPSAtRU5PTUVN OwotCQkJZ290byBlcnJfdW5waW47Ci0JCX0KLQotCQlvYmotPm1tLm1hcHBpbmcgPSBwYWdlX3Bh Y2tfYml0cyhwdHIsIHR5cGUpOwotCX0KLQotb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJm9i ai0+bW0ubG9jayk7Ci0JcmV0dXJuIHB0cjsKLQotZXJyX3VucGluOgotCWF0b21pY19kZWMoJm9i ai0+bW0ucGFnZXNfcGluX2NvdW50KTsKLWVycl91bmxvY2s6Ci0JcHRyID0gRVJSX1BUUihyZXQp OwotCWdvdG8gb3V0X3VubG9jazsKLX0KLQogc3RhdGljIHZvaWQKIGk5MTVfZ2VtX3JldGlyZV93 b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewpAQCAtNDQ0OSwyMTkgKzM5 NzcsNiBAQCB2b2lkIGk5MTVfZ2VtX3RyYWNrX2ZiKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvbGQsCiAJfQogfQogCi1zdHJ1Y3Qgc2NhdHRlcmxpc3QgKgotaTkxNV9nZW1fb2JqZWN0X2dl dF9zZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAotCQkgICAgICAgdW5zaWduZWQg aW50IG4sCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgKm9mZnNldCkKLXsKLQlzdHJ1Y3QgaTkxNV9n ZW1fb2JqZWN0X3BhZ2VfaXRlciAqaXRlciA9ICZvYmotPm1tLmdldF9wYWdlOwotCXN0cnVjdCBz Y2F0dGVybGlzdCAqc2c7Ci0JdW5zaWduZWQgaW50IGlkeCwgY291bnQ7Ci0KLQltaWdodF9zbGVl cCgpOwotCUdFTV9CVUdfT04obiA+PSBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZUKTsKLQlH RU1fQlVHX09OKCFpOTE1X2dlbV9vYmplY3RfaGFzX3Bpbm5lZF9wYWdlcyhvYmopKTsKLQotCS8q IEFzIHdlIGl0ZXJhdGUgZm9yd2FyZCB0aHJvdWdoIHRoZSBzZywgd2UgcmVjb3JkIGVhY2ggZW50 cnkgaW4gYQotCSAqIHJhZGl4dHJlZSBmb3IgcXVpY2sgcmVwZWF0ZWQgKGJhY2t3YXJkcykgbG9v a3Vwcy4gSWYgd2UgaGF2ZSBzZWVuCi0JICogdGhpcyBpbmRleCBwcmV2aW91c2x5LCB3ZSB3aWxs IGhhdmUgYW4gZW50cnkgZm9yIGl0LgotCSAqCi0JICogSW5pdGlhbCBsb29rdXAgaXMgTyhOKSwg YnV0IHRoaXMgaXMgYW1vcnRpemVkIHRvIE8oMSkgZm9yCi0JICogc2VxdWVudGlhbCBwYWdlIGFj Y2VzcyAod2hlcmUgZWFjaCBuZXcgcmVxdWVzdCBpcyBjb25zZWN1dGl2ZQotCSAqIHRvIHRoZSBw cmV2aW91cyBvbmUpLiBSZXBlYXRlZCBsb29rdXBzIGFyZSBPKGxnKG9iai0+YmFzZS5zaXplKSks Ci0JICogaS5lLiBPKDEpIHdpdGggYSBsYXJnZSBjb25zdGFudCEKLQkgKi8KLQlpZiAobiA8IFJF QURfT05DRShpdGVyLT5zZ19pZHgpKQotCQlnb3RvIGxvb2t1cDsKLQotCW11dGV4X2xvY2soJml0 ZXItPmxvY2spOwotCi0JLyogV2UgcHJlZmVyIHRvIHJldXNlIHRoZSBsYXN0IHNnIHNvIHRoYXQg cmVwZWF0ZWQgbG9va3VwIG9mIHRoaXMKLQkgKiAob3IgdGhlIHN1YnNlcXVlbnQpIHNnIGFyZSBm YXN0IC0gY29tcGFyaW5nIGFnYWluc3QgdGhlIGxhc3QKLQkgKiBzZyBpcyBmYXN0ZXIgdGhhbiBn b2luZyB0aHJvdWdoIHRoZSByYWRpeHRyZWUuCi0JICovCi0KLQlzZyA9IGl0ZXItPnNnX3BvczsK LQlpZHggPSBpdGVyLT5zZ19pZHg7Ci0JY291bnQgPSBfX3NnX3BhZ2VfY291bnQoc2cpOwotCi0J d2hpbGUgKGlkeCArIGNvdW50IDw9IG4pIHsKLQkJdm9pZCAqZW50cnk7Ci0JCXVuc2lnbmVkIGxv bmcgaTsKLQkJaW50IHJldDsKLQotCQkvKiBJZiB3ZSBjYW5ub3QgYWxsb2NhdGUgYW5kIGluc2Vy dCB0aGlzIGVudHJ5LCBvciB0aGUKLQkJICogaW5kaXZpZHVhbCBwYWdlcyBmcm9tIHRoaXMgcmFu Z2UsIGNhbmNlbCB1cGRhdGluZyB0aGUKLQkJICogc2dfaWR4IHNvIHRoYXQgb24gdGhpcyBsb29r dXAgd2UgYXJlIGZvcmNlZCB0byBsaW5lYXJseQotCQkgKiBzY2FuIG9ud2FyZHMsIGJ1dCBvbiBm dXR1cmUgbG9va3VwcyB3ZSB3aWxsIHRyeSB0aGUKLQkJICogaW5zZXJ0aW9uIGFnYWluIChpbiB3 aGljaCBjYXNlIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBvZgotCQkgKiB0aGUgZXJyb3IgcmV0dXJu IHJlcG9ydGluZyB0aGF0IHdlIGhhdmUgYWxyZWFkeSBpbnNlcnRlZAotCQkgKiB0aGlzIGluZGV4 KS4KLQkJICovCi0JCXJldCA9IHJhZGl4X3RyZWVfaW5zZXJ0KCZpdGVyLT5yYWRpeCwgaWR4LCBz Zyk7Ci0JCWlmIChyZXQgJiYgcmV0ICE9IC1FRVhJU1QpCi0JCQlnb3RvIHNjYW47Ci0KLQkJZW50 cnkgPSB4YV9ta192YWx1ZShpZHgpOwotCQlmb3IgKGkgPSAxOyBpIDwgY291bnQ7IGkrKykgewot CQkJcmV0ID0gcmFkaXhfdHJlZV9pbnNlcnQoJml0ZXItPnJhZGl4LCBpZHggKyBpLCBlbnRyeSk7 Ci0JCQlpZiAocmV0ICYmIHJldCAhPSAtRUVYSVNUKQotCQkJCWdvdG8gc2NhbjsKLQkJfQotCi0J CWlkeCArPSBjb3VudDsKLQkJc2cgPSBfX19fc2dfbmV4dChzZyk7Ci0JCWNvdW50ID0gX19zZ19w YWdlX2NvdW50KHNnKTsKLQl9Ci0KLXNjYW46Ci0JaXRlci0+c2dfcG9zID0gc2c7Ci0JaXRlci0+ c2dfaWR4ID0gaWR4OwotCi0JbXV0ZXhfdW5sb2NrKCZpdGVyLT5sb2NrKTsKLQotCWlmICh1bmxp a2VseShuIDwgaWR4KSkgLyogaW5zZXJ0aW9uIGNvbXBsZXRlZCBieSBhbm90aGVyIHRocmVhZCAq LwotCQlnb3RvIGxvb2t1cDsKLQotCS8qIEluIGNhc2Ugd2UgZmFpbGVkIHRvIGluc2VydCB0aGUg ZW50cnkgaW50byB0aGUgcmFkaXh0cmVlLCB3ZSBuZWVkCi0JICogdG8gbG9vayBiZXlvbmQgdGhl IGN1cnJlbnQgc2cuCi0JICovCi0Jd2hpbGUgKGlkeCArIGNvdW50IDw9IG4pIHsKLQkJaWR4ICs9 IGNvdW50OwotCQlzZyA9IF9fX19zZ19uZXh0KHNnKTsKLQkJY291bnQgPSBfX3NnX3BhZ2VfY291 bnQoc2cpOwotCX0KLQotCSpvZmZzZXQgPSBuIC0gaWR4OwotCXJldHVybiBzZzsKLQotbG9va3Vw OgotCXJjdV9yZWFkX2xvY2soKTsKLQotCXNnID0gcmFkaXhfdHJlZV9sb29rdXAoJml0ZXItPnJh ZGl4LCBuKTsKLQlHRU1fQlVHX09OKCFzZyk7Ci0KLQkvKiBJZiB0aGlzIGluZGV4IGlzIGluIHRo ZSBtaWRkbGUgb2YgbXVsdGktcGFnZSBzZyBlbnRyeSwKLQkgKiB0aGUgcmFkaXggdHJlZSB3aWxs IGNvbnRhaW4gYSB2YWx1ZSBlbnRyeSB0aGF0IHBvaW50cwotCSAqIHRvIHRoZSBzdGFydCBvZiB0 aGF0IHJhbmdlLiBXZSB3aWxsIHJldHVybiB0aGUgcG9pbnRlciB0bwotCSAqIHRoZSBiYXNlIHBh Z2UgYW5kIHRoZSBvZmZzZXQgb2YgdGhpcyBwYWdlIHdpdGhpbiB0aGUKLQkgKiBzZyBlbnRyeSdz IHJhbmdlLgotCSAqLwotCSpvZmZzZXQgPSAwOwotCWlmICh1bmxpa2VseSh4YV9pc192YWx1ZShz ZykpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgYmFzZSA9IHhhX3RvX3ZhbHVlKHNnKTsKLQotCQlzZyA9 IHJhZGl4X3RyZWVfbG9va3VwKCZpdGVyLT5yYWRpeCwgYmFzZSk7Ci0JCUdFTV9CVUdfT04oIXNn KTsKLQotCQkqb2Zmc2V0ID0gbiAtIGJhc2U7Ci0JfQotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0K LQlyZXR1cm4gc2c7Ci19Ci0KLXN0cnVjdCBwYWdlICoKLWk5MTVfZ2VtX29iamVjdF9nZXRfcGFn ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCB1bnNpZ25lZCBpbnQgbikKLXsKLQlz dHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCXVuc2lnbmVkIGludCBvZmZzZXQ7Ci0KLQlHRU1fQlVH X09OKCFpOTE1X2dlbV9vYmplY3RfaGFzX3N0cnVjdF9wYWdlKG9iaikpOwotCi0Jc2cgPSBpOTE1 X2dlbV9vYmplY3RfZ2V0X3NnKG9iaiwgbiwgJm9mZnNldCk7Ci0JcmV0dXJuIG50aF9wYWdlKHNn X3BhZ2Uoc2cpLCBvZmZzZXQpOwotfQotCi0vKiBMaWtlIGk5MTVfZ2VtX29iamVjdF9nZXRfcGFn ZSgpLCBidXQgbWFyayB0aGUgcmV0dXJuZWQgcGFnZSBkaXJ0eSAqLwotc3RydWN0IHBhZ2UgKgot aTkxNV9nZW1fb2JqZWN0X2dldF9kaXJ0eV9wYWdlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCi0JCQkgICAgICAgdW5zaWduZWQgaW50IG4pCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7 Ci0KLQlwYWdlID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKG9iaiwgbik7Ci0JaWYgKCFvYmot Pm1tLmRpcnR5KQotCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKLQotCXJldHVybiBwYWdlOwotfQot Ci1kbWFfYWRkcl90Ci1pOTE1X2dlbV9vYmplY3RfZ2V0X2RtYV9hZGRyZXNzKHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkJdW5zaWduZWQgbG9uZyBuKQotewotCXN0cnVjdCBz Y2F0dGVybGlzdCAqc2c7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKLQotCXNnID0gaTkxNV9nZW1f b2JqZWN0X2dldF9zZyhvYmosIG4sICZvZmZzZXQpOwotCXJldHVybiBzZ19kbWFfYWRkcmVzcyhz ZykgKyAob2Zmc2V0IDw8IFBBR0VfU0hJRlQpOwotfQotCi1pbnQgaTkxNV9nZW1fb2JqZWN0X2F0 dGFjaF9waHlzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIGludCBhbGlnbikKLXsK LQlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzOwotCWludCBlcnI7Ci0KLQlpZiAoYWxpZ24gPiBvYmot PmJhc2Uuc2l6ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAob2JqLT5vcHMgPT0gJmk5MTVf Z2VtX3BoeXNfb3BzKQotCQlyZXR1cm4gMDsKLQotCWlmIChvYmotPm9wcyAhPSAmaTkxNV9nZW1f c2htZW1fb3BzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWVyciA9IGk5MTVfZ2VtX29iamVjdF91 bmJpbmQob2JqKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JbXV0ZXhfbG9jaygmb2Jq LT5tbS5sb2NrKTsKLQotCWlmIChvYmotPm1tLm1hZHYgIT0gSTkxNV9NQURWX1dJTExORUVEKSB7 Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXJyX3VubG9jazsKLQl9Ci0KLQlpZiAob2JqLT5t bS5xdWlya2VkKSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXJyX3VubG9jazsKLQl9Ci0K LQlpZiAob2JqLT5tbS5tYXBwaW5nKSB7Ci0JCWVyciA9IC1FQlVTWTsKLQkJZ290byBlcnJfdW5s b2NrOwotCX0KLQotCXBhZ2VzID0gX19pOTE1X2dlbV9vYmplY3RfdW5zZXRfcGFnZXMob2JqKTsK LQotCW9iai0+b3BzID0gJmk5MTVfZ2VtX3BoeXNfb3BzOwotCi0JZXJyID0gX19fX2k5MTVfZ2Vt X29iamVjdF9nZXRfcGFnZXMob2JqKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl94ZmVyOwotCi0J LyogUGVybWEtcGluICh1bnRpbCByZWxlYXNlKSB0aGUgcGh5c2ljYWwgc2V0IG9mIHBhZ2VzICov Ci0JX19pOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKG9iaik7Ci0KLQlpZiAoIUlTX0VSUl9PUl9O VUxMKHBhZ2VzKSkKLQkJaTkxNV9nZW1fc2htZW1fb3BzLnB1dF9wYWdlcyhvYmosIHBhZ2VzKTsK LQltdXRleF91bmxvY2soJm9iai0+bW0ubG9jayk7Ci0JcmV0dXJuIDA7Ci0KLWVycl94ZmVyOgot CW9iai0+b3BzID0gJmk5MTVfZ2VtX3NobWVtX29wczsKLQlpZiAoIUlTX0VSUl9PUl9OVUxMKHBh Z2VzKSkgewotCQl1bnNpZ25lZCBpbnQgc2dfcGFnZV9zaXplcyA9IGk5MTVfc2dfcGFnZV9zaXpl cyhwYWdlcy0+c2dsKTsKLQotCQlfX2k5MTVfZ2VtX29iamVjdF9zZXRfcGFnZXMob2JqLCBwYWdl cywgc2dfcGFnZV9zaXplcyk7Ci0JfQotZXJyX3VubG9jazoKLQltdXRleF91bmxvY2soJm9iai0+ bW0ubG9jayk7Ci0JcmV0dXJuIGVycjsKLX0KLQogI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9J OTE1X1NFTEZURVNUKQogI2luY2x1ZGUgInNlbGZ0ZXN0cy9zY2F0dGVybGlzdC5jIgogI2luY2x1 ZGUgInNlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZpY2UuYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3QuYwppbmRleCBkNWJkMzNjODY3YzAuLmFiNmFl OWVjZjAzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVf Z2VtX29iamVjdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dl bV9vYmplY3QuYwpAQCAtNDgsNTkgKzQ4LDYgQEAgc3RhdGljIGludCBpZ3RfZ2VtX29iamVjdCh2 b2lkICphcmcpCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBpZ3RfcGh5c19vYmplY3Qo dm9pZCAqYXJnKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gYXJnOwotCXN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Ci0JaW50IGVycjsKLQotCS8qIENyZWF0ZSBh biBvYmplY3QgYW5kIGJpbmQgaXQgdG8gYSBjb250aWd1b3VzIHNldCBvZiBwaHlzaWNhbCBwYWdl cywKLQkgKiBpLmUuIGV4ZXJjaXNlIHRoZSBpOTE1X2dlbV9vYmplY3RfcGh5cyBBUEkuCi0JICov Ci0KLQlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGk5MTUsIFBBR0VfU0laRSk7 Ci0JaWYgKElTX0VSUihvYmopKSB7Ci0JCWVyciA9IFBUUl9FUlIob2JqKTsKLQkJcHJfZXJyKCJp OTE1X2dlbV9vYmplY3RfY3JlYXRlIGZhaWxlZCwgZXJyPSVkXG4iLCBlcnIpOwotCQlnb3RvIG91 dDsKLQl9Ci0KLQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKLQllcnIgPSBp OTE1X2dlbV9vYmplY3RfYXR0YWNoX3BoeXMob2JqLCBQQUdFX1NJWkUpOwotCW11dGV4X3VubG9j aygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Ci0JaWYgKGVycikgewotCQlwcl9lcnIoImk5MTVf Z2VtX29iamVjdF9hdHRhY2hfcGh5cyBmYWlsZWQsIGVycj0lZFxuIiwgZXJyKTsKLQkJZ290byBv dXRfb2JqOwotCX0KLQotCWlmIChvYmotPm9wcyAhPSAmaTkxNV9nZW1fcGh5c19vcHMpIHsKLQkJ cHJfZXJyKCJpOTE1X2dlbV9vYmplY3RfYXR0YWNoX3BoeXMgZGlkIG5vdCBjcmVhdGUgYSBwaHlz IG9iamVjdFxuIik7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0X29iajsKLQl9Ci0KLQlp ZiAoIWF0b21pY19yZWFkKCZvYmotPm1tLnBhZ2VzX3Bpbl9jb3VudCkpIHsKLQkJcHJfZXJyKCJp OTE1X2dlbV9vYmplY3RfYXR0YWNoX3BoeXMgZGlkIG5vdCBwaW4gaXRzIHBoeXMgcGFnZXNcbiIp OwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dF9vYmo7Ci0JfQotCi0JLyogTWFrZSB0aGUg b2JqZWN0IGRpcnR5IHNvIHRoYXQgcHV0X3BhZ2VzIG11c3QgZG8gY29weSBiYWNrIHRoZSBkYXRh ICovCi0JbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Ci0JZXJyID0gaTkxNV9n ZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKG9iaiwgdHJ1ZSk7Ci0JbXV0ZXhfdW5sb2NrKCZp OTE1LT5kcm0uc3RydWN0X211dGV4KTsKLQlpZiAoZXJyKSB7Ci0JCXByX2VycigiaTkxNV9nZW1f b2JqZWN0X3NldF90b19ndHRfZG9tYWluIGZhaWxlZCB3aXRoIGVycj0lZFxuIiwKLQkJICAgICAg IGVycik7Ci0JCWdvdG8gb3V0X29iajsKLQl9Ci0KLW91dF9vYmo6Ci0JaTkxNV9nZW1fb2JqZWN0 X3B1dChvYmopOwotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyBpbnQgaWd0X2dlbV9o dWdlKHZvaWQgKmFyZykKIHsKIAljb25zdCB1bnNpZ25lZCBpbnQgbnJlYWwgPSA1MDk7IC8qIGp1 c3QgdG8gYmUgYXdrd2FyZCAqLwpAQCAtNjMyLDcgKzU3OSw2IEBAIGludCBpOTE1X2dlbV9vYmpl Y3RfbW9ja19zZWxmdGVzdHModm9pZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3Vi dGVzdCB0ZXN0c1tdID0gewogCQlTVUJURVNUKGlndF9nZW1fb2JqZWN0KSwKLQkJU1VCVEVTVChp Z3RfcGh5c19vYmplY3QpLAogCX07CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7CiAJ aW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1 X21vY2tfc2VsZnRlc3RzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9t b2NrX3NlbGZ0ZXN0cy5oCmluZGV4IDg4ZTVhYjU4NjMzNy4uNTEwZWIxNzZiYjJjIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5o CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3Rz LmgKQEAgLTE4LDYgKzE4LDcgQEAgc2VsZnRlc3QoZW5naW5lLCBpbnRlbF9lbmdpbmVfY3NfbW9j a19zZWxmdGVzdHMpCiBzZWxmdGVzdCh0aW1lbGluZXMsIGk5MTVfdGltZWxpbmVfbW9ja19zZWxm dGVzdHMpCiBzZWxmdGVzdChyZXF1ZXN0cywgaTkxNV9yZXF1ZXN0X21vY2tfc2VsZnRlc3RzKQog c2VsZnRlc3Qob2JqZWN0cywgaTkxNV9nZW1fb2JqZWN0X21vY2tfc2VsZnRlc3RzKQorc2VsZnRl c3QocGh5cywgaTkxNV9nZW1fcGh5c19tb2NrX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGRtYWJ1Ziwg aTkxNV9nZW1fZG1hYnVmX21vY2tfc2VsZnRlc3RzKQogc2VsZnRlc3Qodm1hLCBpOTE1X3ZtYV9t b2NrX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGV2aWN0LCBpOTE1X2dlbV9ldmljdF9tb2NrX3NlbGZ0 ZXN0cykKLS0gCjIuMjAuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4