From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Szyprowski Subject: [PATCH v3 4/9] drm/exynos: gsc: Convert driver to IPP v2 core API Date: Tue, 17 Oct 2017 13:07:47 +0200 Message-ID: <20171017110752.25096-5-m.szyprowski@samsung.com> References: <20171017110752.25096-1-m.szyprowski@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-reply-to: <20171017110752.25096-1-m.szyprowski@samsung.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org Cc: Bartlomiej Zolnierkiewicz , Seung-Woo Kim , Krzysztof Kozlowski , Tobias Jakobi , Sylwester Nawrocki , Andrzej Pietrasiewicz , Hoegeun Kwon , Marek Szyprowski List-Id: linux-samsung-soc@vger.kernel.org VGhpcyBwYXRjaCBhZGFwdHMgRXh5bm9zIERSTSByb3RhdG9yIGRyaXZlciB0byBuZXcgSVBQIHYy IGNvcmUgQVBJLgpUaGUgc2lkZSBlZmZlY3Qgb2YgdGhpcyBjb252ZXJzaW9uIGlzIGEgc3dpdGNo IHRvIGRyaXZlciBjb21wb25lbnQgQVBJCnRvIHJlZ2lzdGVyIHByb3Blcmx5IGluIHRoZSBFeHlu b3MgRFJNIGNvcmUuCgpTaWduZWQtb2ZmLWJ5OiBNYXJlayBTenlwcm93c2tpIDxtLnN6eXByb3dz a2lAc2Ftc3VuZy5jb20+ClRlc3RlZC1ieTogSG9lZ2V1biBLd29uIDxob2VnZXVuLmt3b25Ac2Ft c3VuZy5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9LY29uZmlnICAgICAgICAgIHwg ICAzICstCiBkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMgfCAgIDEgKwog ZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dzYy5jIHwgOTk1ICsrKysrKysrKyst LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1f Z3NjLmggfCAgMjQgLQogNCBmaWxlcyBjaGFuZ2VkLCAzMTUgaW5zZXJ0aW9ucygrKSwgNzA4IGRl bGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5 bm9zX2RybV9nc2MuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvS2NvbmZp ZyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvS2NvbmZpZwppbmRleCBjMTBjOWNhMGQ4YjQuLjRi YjllZGIwMDYwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9LY29uZmlnCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvS2NvbmZpZwpAQCAtMTExLDcgKzExMSw4IEBAIGNv bmZpZyBEUk1fRVhZTk9TX1JPVEFUT1IKIAogY29uZmlnIERSTV9FWFlOT1NfR1NDCiAJYm9vbCAi R1NjYWxlciIKLQlkZXBlbmRzIG9uIEJST0tFTiAmJiBBUkNIX0VYWU5PUzUgJiYgVklERU9fU0FN U1VOR19FWFlOT1NfR1NDPW4KKwlkZXBlbmRzIG9uIEFSQ0hfRVhZTk9TNSAmJiBWSURFT19TQU1T VU5HX0VYWU5PU19HU0M9bgorCXNlbGVjdCBEUk1fRVhZTk9TX0lQUAogCWhlbHAKIAkgIENob29z ZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgRXh5bm9zIEdTQyBmb3IgRFJNLgogCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMgYi9kcml2 ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMKaW5kZXggM2FkZTJiMGFkMTVkLi5j YWMwZDg0Mzg1ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2Ry bV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMKQEAg LTI2MCw2ICsyNjAsNyBAQCBzdGF0aWMgc3RydWN0IGV4eW5vc19kcm1fZHJpdmVyX2luZm8gZXh5 bm9zX2RybV9kcml2ZXJzW10gPSB7CiAJCURSTV9DT01QT05FTlRfRFJJVkVSCiAJfSwgewogCQlE UlZfUFRSKGdzY19kcml2ZXIsIENPTkZJR19EUk1fRVhZTk9TX0dTQyksCisJCURSTV9DT01QT05F TlRfRFJJVkVSCiAJfSwgewogCQkmZXh5bm9zX2RybV9wbGF0Zm9ybV9kcml2ZXIsCiAJCURSTV9W SVJUVUFMX0RFVklDRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3Nf ZHJtX2dzYy5jIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dzYy5jCmluZGV4 IDA1MDZiMmIxN2FjMS4uZjk5ZDRmZWE5ZGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v ZXh5bm9zL2V4eW5vc19kcm1fZ3NjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlu b3NfZHJtX2dzYy5jCkBAIC0xMiwxOCArMTIsMjAgQEAKICAqCiAgKi8KICNpbmNsdWRlIDxsaW51 eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KICNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxs aW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1 ZGUgPGxpbnV4L29mX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgogCiAjaW5j bHVkZSA8ZHJtL2RybVAuaD4KICNpbmNsdWRlIDxkcm0vZXh5bm9zX2RybS5oPgogI2luY2x1ZGUg InJlZ3MtZ3NjLmgiCiAjaW5jbHVkZSAiZXh5bm9zX2RybV9kcnYuaCIKKyNpbmNsdWRlICJleHlu b3NfZHJtX2lvbW11LmgiCiAjaW5jbHVkZSAiZXh5bm9zX2RybV9pcHAuaCIKLSNpbmNsdWRlICJl eHlub3NfZHJtX2dzYy5oIgogCiAvKgogICogR1NDIHN0YW5kcyBmb3IgR2VuZXJhbCBTQ2FsZXIg YW5kCkBAIC0zMSwyNiArMzMsMTAgQEAKICAqIGlucHV0IERNQSByZWFkcyBpbWFnZSBkYXRhIGZy b20gdGhlIG1lbW9yeS4KICAqIG91dHB1dCBETUEgd3JpdGVzIGltYWdlIGRhdGEgdG8gbWVtb3J5 LgogICogR1NDIHN1cHBvcnRzIGltYWdlIHJvdGF0aW9uIGFuZCBpbWFnZSBlZmZlY3QgZnVuY3Rp b25zLgotICoKLSAqIE0yTSBvcGVyYXRpb24gOiBzdXBwb3J0cyBjcm9wL3NjYWxlL3JvdGF0aW9u L2NzYyBzbyBvbi4KLSAqIE1lbW9yeSAtLS0tPiBHU0MgSC9XIC0tLS0+IE1lbW9yeS4KLSAqIFdy aXRlYmFjayBvcGVyYXRpb24gOiBzdXBwb3J0cyBjbG9uZWQgc2NyZWVuIHdpdGggRklNRC4KLSAq IEZJTUQgLS0tLT4gR1NDIEgvVyAtLS0tPiBNZW1vcnkuCi0gKiBPdXRwdXQgb3BlcmF0aW9uIDog c3VwcG9ydHMgZGlyZWN0IGRpc3BsYXkgdXNpbmcgbG9jYWwgcGF0aC4KLSAqIE1lbW9yeSAtLS0t PiBHU0MgSC9XIC0tLS0+IEZJTUQsIE1peGVyLgogICovCiAKLS8qCi0gKiBUT0RPCi0gKiAxLiBj aGVjayBzdXNwZW5kL3Jlc3VtZSBhcGkgaWYgbmVlZGVkLgotICogMi4gbmVlZCB0byBjaGVjayB1 c2UgY2FzZSBwbGF0Zm9ybV9kZXZpY2VfaWQuCi0gKiAzLiBjaGVjayBzcmMvZHN0IHNpemUgd2l0 aCwgaGVpZ2h0LgotICogNC4gYWRkZWQgY2hlY2tfcHJlcGFyZSBhcGkgZm9yIHJpZ2h0IHJlZ2lz dGVyLgotICogNS4gbmVlZCB0byBhZGQgc3VwcG9ydGVkIGxpc3QgaW4gcHJvcF9saXN0LgotICog Ni4gY2hlY2sgcHJlc2NhbGVyL3NjYWxlciBvcHRpbWl6YXRpb24uCi0gKi8KIAotI2RlZmluZSBH U0NfTUFYX0RFVlMJNAorI2RlZmluZSBHU0NfTUFYX0NMT0NLUwk4CiAjZGVmaW5lIEdTQ19NQVhf U1JDCQk0CiAjZGVmaW5lIEdTQ19NQVhfRFNUCQkxNgogI2RlZmluZSBHU0NfUkVTRVRfVElNRU9V VAk1MApAQCAtNjUsOCArNTEsNiBAQAogI2RlZmluZSBHU0NfU0NfRE9XTl9SQVRJT180XzgJCTEz MTA3MgogI2RlZmluZSBHU0NfU0NfRE9XTl9SQVRJT18zXzgJCTE3NDc2MgogI2RlZmluZSBHU0Nf U0NfRE9XTl9SQVRJT18yXzgJCTI2MjE0NAotI2RlZmluZSBHU0NfUkVGUkVTSF9NSU4JMTIKLSNk ZWZpbmUgR1NDX1JFRlJFU0hfTUFYCTYwCiAjZGVmaW5lIEdTQ19DUk9QX01BWAk4MTkyCiAjZGVm aW5lIEdTQ19DUk9QX01JTgkzMgogI2RlZmluZSBHU0NfU0NBTEVfTUFYCTQyMjQKQEAgLTc3LDEw ICs2MSw5IEBACiAjZGVmaW5lIEdTQ19DT0VGX0hfOFQJOAogI2RlZmluZSBHU0NfQ09FRl9WXzRU CTQKICNkZWZpbmUgR1NDX0NPRUZfREVQVEgJMworI2RlZmluZSBHU0NfQVVUT1NVU1BFTkRfREVM QVkJCTIwMDAKIAogI2RlZmluZSBnZXRfZ3NjX2NvbnRleHQoZGV2KQlwbGF0Zm9ybV9nZXRfZHJ2 ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSkKLSNkZWZpbmUgZ2V0X2N0eF9mcm9tX2lwcGRy dihpcHBkcnYpCWNvbnRhaW5lcl9vZihpcHBkcnYsXAotCQkJCQlzdHJ1Y3QgZ3NjX2NvbnRleHQs IGlwcGRydik7CiAjZGVmaW5lIGdzY19yZWFkKG9mZnNldCkJCXJlYWRsKGN0eC0+cmVncyArIChv ZmZzZXQpKQogI2RlZmluZSBnc2Nfd3JpdGUoY2ZnLCBvZmZzZXQpCXdyaXRlbChjZmcsIGN0eC0+ cmVncyArIChvZmZzZXQpKQogCkBAIC0xMjQsNyArMTA3LDYgQEAgc3RydWN0IGdzY19jYXBhYmls aXR5IHsKIC8qCiAgKiBBIHN0cnVjdHVyZSBvZiBnc2MgY29udGV4dC4KICAqCi0gKiBAaXBwZHJ2 OiBwcmVwYXJlIGluaXRpYWxpemF0aW9uIHVzaW5nIGlwcGRydi4KICAqIEByZWdzX3JlczogcmVn aXN0ZXIgcmVzb3VyY2VzLgogICogQHJlZ3M6IG1lbW9yeSBtYXBwZWQgaW8gcmVnaXN0ZXJzLgog ICogQHN5c3JlZzogaGFuZGxlIHRvIFNZU1JFRyBibG9jayByZWdtYXAuCkBAIC0xMzcsMTIgKzEx OSwxOCBAQCBzdHJ1Y3QgZ3NjX2NhcGFiaWxpdHkgewogICogQHN1c3BlbmRlZDogcW9zIG9wZXJh dGlvbnMuCiAgKi8KIHN0cnVjdCBnc2NfY29udGV4dCB7Ci0Jc3RydWN0IGV4eW5vc19kcm1faXBw ZHJ2CWlwcGRydjsKKwlzdHJ1Y3QgZXh5bm9zX2RybV9pcHAgaXBwOworCXN0cnVjdCBkcm1fZGV2 aWNlICpkcm1fZGV2OworCXN0cnVjdCBkZXZpY2UJKmRldjsKKwlzdHJ1Y3QgZXh5bm9zX2RybV9p cHBfdGFzawkqdGFzazsKKwlzdHJ1Y3QgZXh5bm9zX2RybV9pcHBfZm9ybWF0cwkqZm9ybWF0czsK KwogCXN0cnVjdCByZXNvdXJjZQkqcmVnc19yZXM7CiAJdm9pZCBfX2lvbWVtCSpyZWdzOwogCXN0 cnVjdCByZWdtYXAJKnN5c3JlZzsKLQlzdHJ1Y3QgbXV0ZXgJbG9jazsKLQlzdHJ1Y3QgY2xrCSpn c2NfY2xrOworCWNvbnN0IGNoYXIJKipjbGtfbmFtZXM7CisJc3RydWN0IGNsawkqY2xvY2tzW0dT Q19NQVhfQ0xPQ0tTXTsKKwlpbnQJCW51bV9jbG9ja3M7CiAJc3RydWN0IGdzY19zY2FsZXIJc2M7 CiAJaW50CWlkOwogCWludAlpcnE7CkBAIC0xNTAsNiArMTM4LDE5IEBAIHN0cnVjdCBnc2NfY29u dGV4dCB7CiAJYm9vbAlzdXNwZW5kZWQ7CiB9OwogCisvKioKKyAqIHN0cnVjdCBnc2NfZHJpdmVy ZGF0YSAtIHBlciBkZXZpY2UgdHlwZSBkcml2ZXIgZGF0YSBmb3IgaW5pdCB0aW1lLgorICoKKyAq IEBsaW1pdHM6IHBpY3R1cmUgc2l6ZSBsaW1pdHMgYXJyYXkKKyAqIEBjbGtfbmFtZXM6IG5hbWVz IG9mIGNsb2NrcyBuZWVkZWQgYnkgdGhpcyB2YXJpYW50CisgKiBAbnVtX2Nsb2NrczogdGhlIG51 bWJlciBvZiBjbG9ja3MgbmVlZGVkIGJ5IHRoaXMgdmFyaWFudAorICovCitzdHJ1Y3QgZ3NjX2Ry aXZlcmRhdGEgeworCWNvbnN0IHN0cnVjdCBkcm1fZXh5bm9zX2lwcF9saW1pdCAqbGltaXRzOwor CWNvbnN0IGNoYXIJKmNsa19uYW1lc1tHU0NfTUFYX0NMT0NLU107CisJaW50CQludW1fY2xvY2tz OworfTsKKwogLyogOC10YXAgRmlsdGVyIENvZWZmaWNpZW50ICovCiBzdGF0aWMgY29uc3QgaW50 IGhfY29lZl84dFtHU0NfQ09FRl9SQVRJT11bR1NDX0NPRUZfQVRUUl1bR1NDX0NPRUZfSF84VF0g PSB7CiAJewkvKiBSYXRpbyA8PSA2NTUzNiAofjg6OCkgKi8KQEAgLTQzOCwyNSArNDM5LDYgQEAg c3RhdGljIGludCBnc2Nfc3dfcmVzZXQoc3RydWN0IGdzY19jb250ZXh0ICpjdHgpCiAJcmV0dXJu IDA7CiB9CiAKLXN0YXRpYyB2b2lkIGdzY19zZXRfZ3NjYmxrX2ZpbWRfd2Ioc3RydWN0IGdzY19j b250ZXh0ICpjdHgsIGJvb2wgZW5hYmxlKQotewotCXVuc2lnbmVkIGludCBnc2NibGtfY2ZnOwot Ci0JaWYgKCFjdHgtPnN5c3JlZykKLQkJcmV0dXJuOwotCi0JcmVnbWFwX3JlYWQoY3R4LT5zeXNy ZWcsIFNZU1JFR19HU0NCTEtfQ0ZHMSwgJmdzY2Jsa19jZmcpOwotCi0JaWYgKGVuYWJsZSkKLQkJ Z3NjYmxrX2NmZyB8PSBHU0NfQkxLX0RJU1AxV0JfREVTVChjdHgtPmlkKSB8Ci0JCQkJR1NDX0JM S19HU0NMX1dCX0lOX1NSQ19TRUwoY3R4LT5pZCkgfAotCQkJCUdTQ19CTEtfU1dfUkVTRVRfV0Jf REVTVChjdHgtPmlkKTsKLQllbHNlCi0JCWdzY2Jsa19jZmcgfD0gR1NDX0JMS19QWExBU1lOQ19M T19NQVNLX1dCKGN0eC0+aWQpOwotCi0JcmVnbWFwX3dyaXRlKGN0eC0+c3lzcmVnLCBTWVNSRUdf R1NDQkxLX0NGRzEsIGdzY2Jsa19jZmcpOwotfQotCiBzdGF0aWMgdm9pZCBnc2NfaGFuZGxlX2ly cShzdHJ1Y3QgZ3NjX2NvbnRleHQgKmN0eCwgYm9vbCBlbmFibGUsCiAJCWJvb2wgb3ZlcmZsb3cs IGJvb2wgZG9uZSkKIHsKQEAgLTQ4NywxMCArNDY5LDggQEAgc3RhdGljIHZvaWQgZ3NjX2hhbmRs ZV9pcnEoc3RydWN0IGdzY19jb250ZXh0ICpjdHgsIGJvb2wgZW5hYmxlLAogfQogCiAKLXN0YXRp YyBpbnQgZ3NjX3NyY19zZXRfZm10KHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGZtdCkKK3N0YXRp YyBpbnQgZ3NjX3NyY19zZXRfZm10KHN0cnVjdCBnc2NfY29udGV4dCAqY3R4LCB1MzIgZm10KQog ewotCXN0cnVjdCBnc2NfY29udGV4dCAqY3R4ID0gZ2V0X2dzY19jb250ZXh0KGRldik7Ci0Jc3Ry dWN0IGV4eW5vc19kcm1faXBwZHJ2ICppcHBkcnYgPSAmY3R4LT5pcHBkcnY7CiAJdTMyIGNmZzsK IAogCURSTV9ERUJVR19LTVMoImZtdFsweCV4XVxuIiwgZm10KTsKQEAgLTU0OSw3ICs1MjksNyBA QCBzdGF0aWMgaW50IGdzY19zcmNfc2V0X2ZtdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBmbXQp CiAJCQlHU0NfSU5fWVVWNDIwXzJQKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGV2X2Vycihp cHBkcnYtPmRldiwgImludmFsaWQgdGFyZ2V0IHl1diBvcmRlciAweCV4LlxuIiwgZm10KTsKKwkJ ZGV2X2VycihjdHgtPmRldiwgImludmFsaWQgdGFyZ2V0IHl1diBvcmRlciAweCV4LlxuIiwgZm10 KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC01NTgsMTA1ICs1MzgsODEgQEAgc3RhdGlj IGludCBnc2Nfc3JjX3NldF9mbXQoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgZm10KQogCXJldHVy biAwOwogfQogCi1zdGF0aWMgaW50IGdzY19zcmNfc2V0X3RyYW5zZihzdHJ1Y3QgZGV2aWNlICpk ZXYsCi0JCWVudW0gZHJtX2V4eW5vc19kZWdyZWUgZGVncmVlLAotCQllbnVtIGRybV9leHlub3Nf ZmxpcCBmbGlwLCBib29sICpzd2FwKQorc3RhdGljIGludCBnc2Nfc3JjX3NldF90cmFuc2Yoc3Ry dWN0IGdzY19jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGludCByb3RhdGlvbikKIHsKLQlzdHJ1Y3Qg Z3NjX2NvbnRleHQgKmN0eCA9IGdldF9nc2NfY29udGV4dChkZXYpOwotCXN0cnVjdCBleHlub3Nf ZHJtX2lwcGRydiAqaXBwZHJ2ID0gJmN0eC0+aXBwZHJ2OworCXVuc2lnbmVkIGludCBkZWdyZWUg PSByb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV9NQVNLOwogCXUzMiBjZmc7CiAKLQlEUk1fREVC VUdfS01TKCJkZWdyZWVbJWRdZmxpcFsweCV4XVxuIiwgZGVncmVlLCBmbGlwKTsKLQogCWNmZyA9 IGdzY19yZWFkKEdTQ19JTl9DT04pOwogCWNmZyAmPSB+R1NDX0lOX1JPVF9NQVNLOwogCiAJc3dp dGNoIChkZWdyZWUpIHsKLQljYXNlIEVYWU5PU19EUk1fREVHUkVFXzA6Ci0JCWlmIChmbGlwICYg RVhZTk9TX0RSTV9GTElQX1ZFUlRJQ0FMKQorCWNhc2UgRFJNX01PREVfUk9UQVRFXzA6CisJCWlm IChyb3RhdGlvbiAmIERSTV9NT0RFX1JFRkxFQ1RfWSkKIAkJCWNmZyB8PSBHU0NfSU5fUk9UX1hG TElQOwotCQlpZiAoZmxpcCAmIEVYWU5PU19EUk1fRkxJUF9IT1JJWk9OVEFMKQorCQlpZiAocm90 YXRpb24gJiBEUk1fTU9ERV9SRUZMRUNUX1gpCiAJCQljZmcgfD0gR1NDX0lOX1JPVF9ZRkxJUDsK IAkJYnJlYWs7Ci0JY2FzZSBFWFlOT1NfRFJNX0RFR1JFRV85MDoKLQkJaWYgKGZsaXAgJiBFWFlO T1NfRFJNX0ZMSVBfVkVSVElDQUwpCisJY2FzZSBEUk1fTU9ERV9ST1RBVEVfOTA6CisJCWlmIChy b3RhdGlvbiAmIERSTV9NT0RFX1JFRkxFQ1RfWSkKIAkJCWNmZyB8PSBHU0NfSU5fUk9UXzkwX1hG TElQOwotCQllbHNlIGlmIChmbGlwICYgRVhZTk9TX0RSTV9GTElQX0hPUklaT05UQUwpCisJCWVs c2UgaWYgKHJvdGF0aW9uICYgRFJNX01PREVfUkVGTEVDVF9YKQogCQkJY2ZnIHw9IEdTQ19JTl9S T1RfOTBfWUZMSVA7CiAJCWVsc2UKIAkJCWNmZyB8PSBHU0NfSU5fUk9UXzkwOwogCQlicmVhazsK LQljYXNlIEVYWU5PU19EUk1fREVHUkVFXzE4MDoKKwljYXNlIERSTV9NT0RFX1JPVEFURV8xODA6 CiAJCWNmZyB8PSBHU0NfSU5fUk9UXzE4MDsKLQkJaWYgKGZsaXAgJiBFWFlOT1NfRFJNX0ZMSVBf VkVSVElDQUwpCisJCWlmIChyb3RhdGlvbiAmIERSTV9NT0RFX1JFRkxFQ1RfWSkKIAkJCWNmZyAm PSB+R1NDX0lOX1JPVF9YRkxJUDsKLQkJaWYgKGZsaXAgJiBFWFlOT1NfRFJNX0ZMSVBfSE9SSVpP TlRBTCkKKwkJaWYgKHJvdGF0aW9uICYgRFJNX01PREVfUkVGTEVDVF9YKQogCQkJY2ZnICY9IH5H U0NfSU5fUk9UX1lGTElQOwogCQlicmVhazsKLQljYXNlIEVYWU5PU19EUk1fREVHUkVFXzI3MDoK KwljYXNlIERSTV9NT0RFX1JPVEFURV8yNzA6CiAJCWNmZyB8PSBHU0NfSU5fUk9UXzI3MDsKLQkJ aWYgKGZsaXAgJiBFWFlOT1NfRFJNX0ZMSVBfVkVSVElDQUwpCisJCWlmIChyb3RhdGlvbiAmIERS TV9NT0RFX1JFRkxFQ1RfWSkKIAkJCWNmZyAmPSB+R1NDX0lOX1JPVF9YRkxJUDsKLQkJaWYgKGZs aXAgJiBFWFlOT1NfRFJNX0ZMSVBfSE9SSVpPTlRBTCkKKwkJaWYgKHJvdGF0aW9uICYgRFJNX01P REVfUkVGTEVDVF9YKQogCQkJY2ZnICY9IH5HU0NfSU5fUk9UX1lGTElQOwogCQlicmVhazsKLQlk ZWZhdWx0OgotCQlkZXZfZXJyKGlwcGRydi0+ZGV2LCAiaW52YWxpZCBkZWdyZWUgdmFsdWUgJWQu XG4iLCBkZWdyZWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlnc2Nfd3JpdGUoY2ZnLCBH U0NfSU5fQ09OKTsKIAogCWN0eC0+cm90YXRpb24gPSAoY2ZnICYgR1NDX0lOX1JPVF85MCkgPyAx IDogMDsKLQkqc3dhcCA9IGN0eC0+cm90YXRpb247Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGlj IGludCBnc2Nfc3JjX3NldF9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHN3YXAsCi0JCXN0 cnVjdCBkcm1fZXh5bm9zX3BvcyAqcG9zLCBzdHJ1Y3QgZHJtX2V4eW5vc19zeiAqc3opCitzdGF0 aWMgaW50IGdzY19zcmNfc2V0X3NpemUoc3RydWN0IGdzY19jb250ZXh0ICpjdHgsCisJCXN0cnVj dCBleHlub3NfZHJtX2lwcF9idWZmZXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgZ3NjX2NvbnRleHQgKmN0 eCA9IGdldF9nc2NfY29udGV4dChkZXYpOwotCXN0cnVjdCBkcm1fZXh5bm9zX3BvcyBpbWdfcG9z ID0gKnBvczsKIAlzdHJ1Y3QgZ3NjX3NjYWxlciAqc2MgPSAmY3R4LT5zYzsKIAl1MzIgY2ZnOwog Ci0JRFJNX0RFQlVHX0tNUygic3dhcFslZF14WyVkXXlbJWRdd1slZF1oWyVkXVxuIiwKLQkJc3dh cCwgcG9zLT54LCBwb3MtPnksIHBvcy0+dywgcG9zLT5oKTsKLQotCWlmIChzd2FwKSB7Ci0JCWlt Z19wb3MudyA9IHBvcy0+aDsKLQkJaW1nX3Bvcy5oID0gcG9zLT53OwotCX0KLQogCS8qIHBpeGVs IG9mZnNldCAqLwotCWNmZyA9IChHU0NfU1JDSU1HX09GRlNFVF9YKGltZ19wb3MueCkgfAotCQlH U0NfU1JDSU1HX09GRlNFVF9ZKGltZ19wb3MueSkpOworCWNmZyA9IChHU0NfU1JDSU1HX09GRlNF VF9YKGJ1Zi0+cmVjdC54KSB8CisJCUdTQ19TUkNJTUdfT0ZGU0VUX1koYnVmLT5yZWN0LnkpKTsK IAlnc2Nfd3JpdGUoY2ZnLCBHU0NfU1JDSU1HX09GRlNFVCk7CiAKIAkvKiBjcm9wcGVkIHNpemUg Ki8KLQljZmcgPSAoR1NDX0NST1BQRURfV0lEVEgoaW1nX3Bvcy53KSB8Ci0JCUdTQ19DUk9QUEVE X0hFSUdIVChpbWdfcG9zLmgpKTsKKwljZmcgPSAoR1NDX0NST1BQRURfV0lEVEgoYnVmLT5yZWN0 LncpIHwKKwkJR1NDX0NST1BQRURfSEVJR0hUKGJ1Zi0+cmVjdC5oKSk7CiAJZ3NjX3dyaXRlKGNm ZywgR1NDX0NST1BQRURfU0laRSk7CiAKLQlEUk1fREVCVUdfS01TKCJoc2l6ZVslZF12c2l6ZVsl ZF1cbiIsIHN6LT5oc2l6ZSwgc3otPnZzaXplKTsKLQogCS8qIG9yaWdpbmFsIHNpemUgKi8KIAlj ZmcgPSBnc2NfcmVhZChHU0NfU1JDSU1HX1NJWkUpOwogCWNmZyAmPSB+KEdTQ19TUkNJTUdfSEVJ R0hUX01BU0sgfAogCQlHU0NfU1JDSU1HX1dJRFRIX01BU0spOwogCi0JY2ZnIHw9IChHU0NfU1JD SU1HX1dJRFRIKHN6LT5oc2l6ZSkgfAotCQlHU0NfU1JDSU1HX0hFSUdIVChzei0+dnNpemUpKTsK KwljZmcgfD0gKEdTQ19TUkNJTUdfV0lEVEgoYnVmLT5idWYud2lkdGgpIHwKKwkJR1NDX1NSQ0lN R19IRUlHSFQoYnVmLT5idWYuaGVpZ2h0KSk7CiAKIAlnc2Nfd3JpdGUoY2ZnLCBHU0NfU1JDSU1H X1NJWkUpOwogCiAJY2ZnID0gZ3NjX3JlYWQoR1NDX0lOX0NPTik7CiAJY2ZnICY9IH5HU0NfSU5f UkdCX1RZUEVfTUFTSzsKIAotCURSTV9ERUJVR19LTVMoIndpZHRoWyVkXXJhbmdlWyVkXVxuIiwg cG9zLT53LCBzYy0+cmFuZ2UpOwotCi0JaWYgKHBvcy0+dyA+PSBHU0NfV0lEVEhfSVRVXzcwOSkK KwlpZiAoYnVmLT5yZWN0LncgPj0gR1NDX1dJRFRIX0lUVV83MDkpCiAJCWlmIChzYy0+cmFuZ2Up CiAJCQljZmcgfD0gR1NDX0lOX1JHQl9IRF9XSURFOwogCQllbHNlCkBAIC02NzMsMzAgKzYyOSwx NSBAQCBzdGF0aWMgaW50IGdzY19zcmNfc2V0X3NpemUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQg c3dhcCwKIH0KIAogc3RhdGljIGludCBnc2Nfc3JjX3NldF9idWZfc2VxKHN0cnVjdCBnc2NfY29u dGV4dCAqY3R4LCB1MzIgYnVmX2lkLAotCQllbnVtIGRybV9leHlub3NfaXBwX2J1Zl90eXBlIGJ1 Zl90eXBlKQorCQkJICAgICAgIGJvb2wgZW5xdWV1ZSkKIHsKLQlzdHJ1Y3QgZXh5bm9zX2RybV9p cHBkcnYgKmlwcGRydiA9ICZjdHgtPmlwcGRydjsKLQlib29sIG1hc2tlZDsKKwlib29sIG1hc2tl ZCA9ICFlbnF1ZXVlOwogCXUzMiBjZmc7CiAJdTMyIG1hc2sgPSAweDAwMDAwMDAxIDw8IGJ1Zl9p ZDsKIAotCURSTV9ERUJVR19LTVMoImJ1Zl9pZFslZF1idWZfdHlwZVslZF1cbiIsIGJ1Zl9pZCwg YnVmX3R5cGUpOwotCiAJLyogbWFzayByZWdpc3RlciBzZXQgKi8KIAljZmcgPSBnc2NfcmVhZChH U0NfSU5fQkFTRV9BRERSX1lfTUFTSyk7CiAKLQlzd2l0Y2ggKGJ1Zl90eXBlKSB7Ci0JY2FzZSBJ UFBfQlVGX0VOUVVFVUU6Ci0JCW1hc2tlZCA9IGZhbHNlOwotCQlicmVhazsKLQljYXNlIElQUF9C VUZfREVRVUVVRToKLQkJbWFza2VkID0gdHJ1ZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2 X2VycihpcHBkcnYtPmRldiwgImludmFsaWQgYnVmIGN0cmwgcGFyYW1ldGVyLlxuIik7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQogCS8qIHNlcXVlbmNlIGlkICovCiAJY2ZnICY9IH5tYXNrOwog CWNmZyB8PSBtYXNrZWQgPDwgYnVmX2lkOwpAQCAtNzA3LDY0ICs2NDgsMTkgQEAgc3RhdGljIGlu dCBnc2Nfc3JjX3NldF9idWZfc2VxKHN0cnVjdCBnc2NfY29udGV4dCAqY3R4LCB1MzIgYnVmX2lk LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdzY19zcmNfc2V0X2FkZHIoc3RydWN0IGRl dmljZSAqZGV2LAotCQlzdHJ1Y3QgZHJtX2V4eW5vc19pcHBfYnVmX2luZm8gKmJ1Zl9pbmZvLCB1 MzIgYnVmX2lkLAotCQllbnVtIGRybV9leHlub3NfaXBwX2J1Zl90eXBlIGJ1Zl90eXBlKQorc3Rh dGljIGludCBnc2Nfc3JjX3NldF9hZGRyKHN0cnVjdCBnc2NfY29udGV4dCAqY3R4LCB1MzIgYnVm X2lkLAorCQkJICAgIHN0cnVjdCBleHlub3NfZHJtX2lwcF9idWZmZXIgKmJ1ZikKIHsKLQlzdHJ1 Y3QgZ3NjX2NvbnRleHQgKmN0eCA9IGdldF9nc2NfY29udGV4dChkZXYpOwotCXN0cnVjdCBleHlu b3NfZHJtX2lwcGRydiAqaXBwZHJ2ID0gJmN0eC0+aXBwZHJ2OwotCXN0cnVjdCBkcm1fZXh5bm9z X2lwcF9jbWRfbm9kZSAqY19ub2RlID0gaXBwZHJ2LT5jX25vZGU7Ci0Jc3RydWN0IGRybV9leHlu b3NfaXBwX3Byb3BlcnR5ICpwcm9wZXJ0eTsKLQotCWlmICghY19ub2RlKSB7Ci0JCURSTV9FUlJP UigiZmFpbGVkIHRvIGdldCBjX25vZGUuXG4iKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0J cHJvcGVydHkgPSAmY19ub2RlLT5wcm9wZXJ0eTsKLQotCURSTV9ERUJVR19LTVMoInByb3BfaWRb JWRdYnVmX2lkWyVkXWJ1Zl90eXBlWyVkXVxuIiwKLQkJcHJvcGVydHktPnByb3BfaWQsIGJ1Zl9p ZCwgYnVmX3R5cGUpOwotCi0JaWYgKGJ1Zl9pZCA+IEdTQ19NQVhfU1JDKSB7Ci0JCWRldl9pbmZv KGlwcGRydi0+ZGV2LCAiaW52YWxpZCBidWZfaWQgJWQuXG4iLCBidWZfaWQpOwotCQlyZXR1cm4g LUVJTlZBTDsKLQl9Ci0KIAkvKiBhZGRyZXNzIHJlZ2lzdGVyIHNldCAqLwotCXN3aXRjaCAoYnVm X3R5cGUpIHsKLQljYXNlIElQUF9CVUZfRU5RVUVVRToKLQkJZ3NjX3dyaXRlKGJ1Zl9pbmZvLT5i YXNlW0VYWU5PU19EUk1fUExBTkFSX1ldLAotCQkJR1NDX0lOX0JBU0VfQUREUl9ZKGJ1Zl9pZCkp OwotCQlnc2Nfd3JpdGUoYnVmX2luZm8tPmJhc2VbRVhZTk9TX0RSTV9QTEFOQVJfQ0JdLAotCQkJ R1NDX0lOX0JBU0VfQUREUl9DQihidWZfaWQpKTsKLQkJZ3NjX3dyaXRlKGJ1Zl9pbmZvLT5iYXNl W0VYWU5PU19EUk1fUExBTkFSX0NSXSwKLQkJCUdTQ19JTl9CQVNFX0FERFJfQ1IoYnVmX2lkKSk7 Ci0JCWJyZWFrOwotCWNhc2UgSVBQX0JVRl9ERVFVRVVFOgotCQlnc2Nfd3JpdGUoMHgwLCBHU0Nf SU5fQkFTRV9BRERSX1koYnVmX2lkKSk7Ci0JCWdzY193cml0ZSgweDAsIEdTQ19JTl9CQVNFX0FE RFJfQ0IoYnVmX2lkKSk7Ci0JCWdzY193cml0ZSgweDAsIEdTQ19JTl9CQVNFX0FERFJfQ1IoYnVm X2lkKSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIGJ5cGFzcyAqLwotCQlicmVhazsKLQl9 CisJZ3NjX3dyaXRlKGJ1Zi0+ZG1hX2FkZHJbMF0sIEdTQ19JTl9CQVNFX0FERFJfWShidWZfaWQp KTsKKwlnc2Nfd3JpdGUoYnVmLT5kbWFfYWRkclsxXSwgR1NDX0lOX0JBU0VfQUREUl9DQihidWZf aWQpKTsKKwlnc2Nfd3JpdGUoYnVmLT5kbWFfYWRkclsyXSwgR1NDX0lOX0JBU0VfQUREUl9DUihi dWZfaWQpKTsKIAotCXJldHVybiBnc2Nfc3JjX3NldF9idWZfc2VxKGN0eCwgYnVmX2lkLCBidWZf dHlwZSk7CisJcmV0dXJuIGdzY19zcmNfc2V0X2J1Zl9zZXEoY3R4LCBidWZfaWQsIHRydWUpOwog fQogCi1zdGF0aWMgc3RydWN0IGV4eW5vc19kcm1faXBwX29wcyBnc2Nfc3JjX29wcyA9IHsKLQku c2V0X2ZtdCA9IGdzY19zcmNfc2V0X2ZtdCwKLQkuc2V0X3RyYW5zZiA9IGdzY19zcmNfc2V0X3Ry YW5zZiwKLQkuc2V0X3NpemUgPSBnc2Nfc3JjX3NldF9zaXplLAotCS5zZXRfYWRkciA9IGdzY19z cmNfc2V0X2FkZHIsCi19OwotCi1zdGF0aWMgaW50IGdzY19kc3Rfc2V0X2ZtdChzdHJ1Y3QgZGV2 aWNlICpkZXYsIHUzMiBmbXQpCitzdGF0aWMgaW50IGdzY19kc3Rfc2V0X2ZtdChzdHJ1Y3QgZ3Nj X2NvbnRleHQgKmN0eCwgdTMyIGZtdCkKIHsKLQlzdHJ1Y3QgZ3NjX2NvbnRleHQgKmN0eCA9IGdl dF9nc2NfY29udGV4dChkZXYpOwotCXN0cnVjdCBleHlub3NfZHJtX2lwcGRydiAqaXBwZHJ2ID0g JmN0eC0+aXBwZHJ2OwogCXUzMiBjZmc7CiAKIAlEUk1fREVCVUdfS01TKCJmbXRbMHgleF1cbiIs IGZtdCk7CkBAIC04MTksOSArNzE1LDYgQEAgc3RhdGljIGludCBnc2NfZHN0X3NldF9mbXQoc3Ry dWN0IGRldmljZSAqZGV2LCB1MzIgZm10KQogCQljZmcgfD0gKEdTQ19PVVRfQ0hST01BX09SREVS X0NCQ1IgfAogCQkJR1NDX09VVF9ZVVY0MjBfMlApOwogCQlicmVhazsKLQlkZWZhdWx0OgotCQlk ZXZfZXJyKGlwcGRydi0+ZGV2LCAiaW52YWxpZCB0YXJnZXQgeXV2IG9yZGVyIDB4JXguXG4iLCBm bXQpOwotCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlnc2Nfd3JpdGUoY2ZnLCBHU0NfT1VUX0NP Tik7CkBAIC04MjksNjEgKzcyMiw2IEBAIHN0YXRpYyBpbnQgZ3NjX2RzdF9zZXRfZm10KHN0cnVj dCBkZXZpY2UgKmRldiwgdTMyIGZtdCkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnc2Nf ZHN0X3NldF90cmFuc2Yoc3RydWN0IGRldmljZSAqZGV2LAotCQllbnVtIGRybV9leHlub3NfZGVn cmVlIGRlZ3JlZSwKLQkJZW51bSBkcm1fZXh5bm9zX2ZsaXAgZmxpcCwgYm9vbCAqc3dhcCkKLXsK LQlzdHJ1Y3QgZ3NjX2NvbnRleHQgKmN0eCA9IGdldF9nc2NfY29udGV4dChkZXYpOwotCXN0cnVj dCBleHlub3NfZHJtX2lwcGRydiAqaXBwZHJ2ID0gJmN0eC0+aXBwZHJ2OwotCXUzMiBjZmc7Ci0K LQlEUk1fREVCVUdfS01TKCJkZWdyZWVbJWRdZmxpcFsweCV4XVxuIiwgZGVncmVlLCBmbGlwKTsK LQotCWNmZyA9IGdzY19yZWFkKEdTQ19JTl9DT04pOwotCWNmZyAmPSB+R1NDX0lOX1JPVF9NQVNL OwotCi0Jc3dpdGNoIChkZWdyZWUpIHsKLQljYXNlIEVYWU5PU19EUk1fREVHUkVFXzA6Ci0JCWlm IChmbGlwICYgRVhZTk9TX0RSTV9GTElQX1ZFUlRJQ0FMKQotCQkJY2ZnIHw9IEdTQ19JTl9ST1Rf WEZMSVA7Ci0JCWlmIChmbGlwICYgRVhZTk9TX0RSTV9GTElQX0hPUklaT05UQUwpCi0JCQljZmcg fD0gR1NDX0lOX1JPVF9ZRkxJUDsKLQkJYnJlYWs7Ci0JY2FzZSBFWFlOT1NfRFJNX0RFR1JFRV85 MDoKLQkJaWYgKGZsaXAgJiBFWFlOT1NfRFJNX0ZMSVBfVkVSVElDQUwpCi0JCQljZmcgfD0gR1ND X0lOX1JPVF85MF9YRkxJUDsKLQkJZWxzZSBpZiAoZmxpcCAmIEVYWU5PU19EUk1fRkxJUF9IT1JJ Wk9OVEFMKQotCQkJY2ZnIHw9IEdTQ19JTl9ST1RfOTBfWUZMSVA7Ci0JCWVsc2UKLQkJCWNmZyB8 PSBHU0NfSU5fUk9UXzkwOwotCQlicmVhazsKLQljYXNlIEVYWU5PU19EUk1fREVHUkVFXzE4MDoK LQkJY2ZnIHw9IEdTQ19JTl9ST1RfMTgwOwotCQlpZiAoZmxpcCAmIEVYWU5PU19EUk1fRkxJUF9W RVJUSUNBTCkKLQkJCWNmZyAmPSB+R1NDX0lOX1JPVF9YRkxJUDsKLQkJaWYgKGZsaXAgJiBFWFlO T1NfRFJNX0ZMSVBfSE9SSVpPTlRBTCkKLQkJCWNmZyAmPSB+R1NDX0lOX1JPVF9ZRkxJUDsKLQkJ YnJlYWs7Ci0JY2FzZSBFWFlOT1NfRFJNX0RFR1JFRV8yNzA6Ci0JCWNmZyB8PSBHU0NfSU5fUk9U XzI3MDsKLQkJaWYgKGZsaXAgJiBFWFlOT1NfRFJNX0ZMSVBfVkVSVElDQUwpCi0JCQljZmcgJj0g fkdTQ19JTl9ST1RfWEZMSVA7Ci0JCWlmIChmbGlwICYgRVhZTk9TX0RSTV9GTElQX0hPUklaT05U QUwpCi0JCQljZmcgJj0gfkdTQ19JTl9ST1RfWUZMSVA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0J CWRldl9lcnIoaXBwZHJ2LT5kZXYsICJpbnZhbGlkIGRlZ3JlZSB2YWx1ZSAlZC5cbiIsIGRlZ3Jl ZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWdzY193cml0ZShjZmcsIEdTQ19JTl9DT04p OwotCi0JY3R4LT5yb3RhdGlvbiA9IChjZmcgJiBHU0NfSU5fUk9UXzkwKSA/IDEgOiAwOwotCSpz d2FwID0gY3R4LT5yb3RhdGlvbjsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGdzY19n ZXRfcmF0aW9fc2hpZnQodTMyIHNyYywgdTMyIGRzdCwgdTMyICpyYXRpbykKIHsKIAlEUk1fREVC VUdfS01TKCJzcmNbJWRdZHN0WyVkXVxuIiwgc3JjLCBkc3QpOwpAQCAtOTE5LDkgKzc1Nyw4IEBA IHN0YXRpYyB2b2lkIGdzY19nZXRfcHJlc2NhbGVyX3NoZmFjdG9yKHUzMiBocmF0aW8sIHUzMiB2 cmF0aW8sIHUzMiAqc2hmYWN0b3IpCiB9CiAKIHN0YXRpYyBpbnQgZ3NjX3NldF9wcmVzY2FsZXIo c3RydWN0IGdzY19jb250ZXh0ICpjdHgsIHN0cnVjdCBnc2Nfc2NhbGVyICpzYywKLQkJc3RydWN0 IGRybV9leHlub3NfcG9zICpzcmMsIHN0cnVjdCBkcm1fZXh5bm9zX3BvcyAqZHN0KQorICAgICBz dHJ1Y3QgZHJtX2V4eW5vc19pcHBfdGFza19yZWN0ICpzcmMsIHN0cnVjdCBkcm1fZXh5bm9zX2lw cF90YXNrX3JlY3QgKmRzdCkKIHsKLQlzdHJ1Y3QgZXh5bm9zX2RybV9pcHBkcnYgKmlwcGRydiA9 ICZjdHgtPmlwcGRydjsKIAl1MzIgY2ZnOwogCXUzMiBzcmNfdywgc3JjX2gsIGRzdF93LCBkc3Rf aDsKIAlpbnQgcmV0ID0gMDsKQEAgLTkzOSwxMyArNzc2LDEzIEBAIHN0YXRpYyBpbnQgZ3NjX3Nl dF9wcmVzY2FsZXIoc3RydWN0IGdzY19jb250ZXh0ICpjdHgsIHN0cnVjdCBnc2Nfc2NhbGVyICpz YywKIAogCXJldCA9IGdzY19nZXRfcmF0aW9fc2hpZnQoc3JjX3csIGRzdF93LCAmc2MtPnByZV9o cmF0aW8pOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycihpcHBkcnYtPmRldiwgImZhaWxlZCB0byBn ZXQgcmF0aW8gaG9yaXpvbnRhbC5cbiIpOworCQlkZXZfZXJyKGN0eC0+ZGV2LCAiZmFpbGVkIHRv IGdldCByYXRpbyBob3Jpem9udGFsLlxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0ID0g Z3NjX2dldF9yYXRpb19zaGlmdChzcmNfaCwgZHN0X2gsICZzYy0+cHJlX3ZyYXRpbyk7CiAJaWYg KHJldCkgewotCQlkZXZfZXJyKGlwcGRydi0+ZGV2LCAiZmFpbGVkIHRvIGdldCByYXRpbyB2ZXJ0 aWNhbC5cbiIpOworCQlkZXZfZXJyKGN0eC0+ZGV2LCAiZmFpbGVkIHRvIGdldCByYXRpbyB2ZXJ0 aWNhbC5cbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMTAzOSw0NyArODc2LDMxIEBAIHN0 YXRpYyB2b2lkIGdzY19zZXRfc2NhbGVyKHN0cnVjdCBnc2NfY29udGV4dCAqY3R4LCBzdHJ1Y3Qg Z3NjX3NjYWxlciAqc2MpCiAJZ3NjX3dyaXRlKGNmZywgR1NDX01BSU5fVl9SQVRJTyk7CiB9CiAK LXN0YXRpYyBpbnQgZ3NjX2RzdF9zZXRfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzd2Fw LAotCQlzdHJ1Y3QgZHJtX2V4eW5vc19wb3MgKnBvcywgc3RydWN0IGRybV9leHlub3Nfc3ogKnN6 KQorc3RhdGljIGludCBnc2NfZHN0X3NldF9zaXplKHN0cnVjdCBnc2NfY29udGV4dCAqY3R4LAor CQkJICAgIHN0cnVjdCBleHlub3NfZHJtX2lwcF9idWZmZXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgZ3Nj X2NvbnRleHQgKmN0eCA9IGdldF9nc2NfY29udGV4dChkZXYpOwotCXN0cnVjdCBkcm1fZXh5bm9z X3BvcyBpbWdfcG9zID0gKnBvczsKIAlzdHJ1Y3QgZ3NjX3NjYWxlciAqc2MgPSAmY3R4LT5zYzsK IAl1MzIgY2ZnOwogCi0JRFJNX0RFQlVHX0tNUygic3dhcFslZF14WyVkXXlbJWRdd1slZF1oWyVk XVxuIiwKLQkJc3dhcCwgcG9zLT54LCBwb3MtPnksIHBvcy0+dywgcG9zLT5oKTsKLQotCWlmIChz d2FwKSB7Ci0JCWltZ19wb3MudyA9IHBvcy0+aDsKLQkJaW1nX3Bvcy5oID0gcG9zLT53OwotCX0K LQogCS8qIHBpeGVsIG9mZnNldCAqLwotCWNmZyA9IChHU0NfRFNUSU1HX09GRlNFVF9YKHBvcy0+ eCkgfAotCQlHU0NfRFNUSU1HX09GRlNFVF9ZKHBvcy0+eSkpOworCWNmZyA9IChHU0NfRFNUSU1H X09GRlNFVF9YKGJ1Zi0+cmVjdC54KSB8CisJCUdTQ19EU1RJTUdfT0ZGU0VUX1koYnVmLT5yZWN0 LnkpKTsKIAlnc2Nfd3JpdGUoY2ZnLCBHU0NfRFNUSU1HX09GRlNFVCk7CiAKIAkvKiBzY2FsZWQg c2l6ZSAqLwotCWNmZyA9IChHU0NfU0NBTEVEX1dJRFRIKGltZ19wb3MudykgfCBHU0NfU0NBTEVE X0hFSUdIVChpbWdfcG9zLmgpKTsKKwljZmcgPSAoR1NDX1NDQUxFRF9XSURUSChidWYtPnJlY3Qu dykgfCBHU0NfU0NBTEVEX0hFSUdIVChidWYtPnJlY3QuaCkpOwogCWdzY193cml0ZShjZmcsIEdT Q19TQ0FMRURfU0laRSk7CiAKLQlEUk1fREVCVUdfS01TKCJoc2l6ZVslZF12c2l6ZVslZF1cbiIs IHN6LT5oc2l6ZSwgc3otPnZzaXplKTsKLQogCS8qIG9yaWdpbmFsIHNpemUgKi8KIAljZmcgPSBn c2NfcmVhZChHU0NfRFNUSU1HX1NJWkUpOwotCWNmZyAmPSB+KEdTQ19EU1RJTUdfSEVJR0hUX01B U0sgfAotCQlHU0NfRFNUSU1HX1dJRFRIX01BU0spOwotCWNmZyB8PSAoR1NDX0RTVElNR19XSURU SChzei0+aHNpemUpIHwKLQkJR1NDX0RTVElNR19IRUlHSFQoc3otPnZzaXplKSk7CisJY2ZnICY9 IH4oR1NDX0RTVElNR19IRUlHSFRfTUFTSyB8IEdTQ19EU1RJTUdfV0lEVEhfTUFTSyk7CisJY2Zn IHw9IChHU0NfRFNUSU1HX1dJRFRIKGJ1Zi0+YnVmLndpZHRoKSB8IEdTQ19EU1RJTUdfSEVJR0hU KGJ1Zi0+YnVmLmhlaWdodCkpOwogCWdzY193cml0ZShjZmcsIEdTQ19EU1RJTUdfU0laRSk7CiAK IAljZmcgPSBnc2NfcmVhZChHU0NfT1VUX0NPTik7CiAJY2ZnICY9IH5HU0NfT1VUX1JHQl9UWVBF X01BU0s7CiAKLQlEUk1fREVCVUdfS01TKCJ3aWR0aFslZF1yYW5nZVslZF1cbiIsIHBvcy0+dywg c2MtPnJhbmdlKTsKLQotCWlmIChwb3MtPncgPj0gR1NDX1dJRFRIX0lUVV83MDkpCisJaWYgKGJ1 Zi0+cmVjdC53ID49IEdTQ19XSURUSF9JVFVfNzA5KQogCQlpZiAoc2MtPnJhbmdlKQogCQkJY2Zn IHw9IEdTQ19PVVRfUkdCX0hEX1dJREU7CiAJCWVsc2UKQEAgLTExMTIsMzQgKzkzMywxNiBAQCBz dGF0aWMgaW50IGdzY19kc3RfZ2V0X2J1Zl9zZXEoc3RydWN0IGdzY19jb250ZXh0ICpjdHgpCiB9 CiAKIHN0YXRpYyBpbnQgZ3NjX2RzdF9zZXRfYnVmX3NlcShzdHJ1Y3QgZ3NjX2NvbnRleHQgKmN0 eCwgdTMyIGJ1Zl9pZCwKLQkJZW51bSBkcm1fZXh5bm9zX2lwcF9idWZfdHlwZSBidWZfdHlwZSkK KwkJCSAgICAgICBib29sIGVucXVldWUpCiB7Ci0Jc3RydWN0IGV4eW5vc19kcm1faXBwZHJ2ICpp cHBkcnYgPSAmY3R4LT5pcHBkcnY7Ci0JYm9vbCBtYXNrZWQ7CisJYm9vbCBtYXNrZWQgPSAhZW5x dWV1ZTsKIAl1MzIgY2ZnOwogCXUzMiBtYXNrID0gMHgwMDAwMDAwMSA8PCBidWZfaWQ7CiAJaW50 IHJldCA9IDA7CiAKLQlEUk1fREVCVUdfS01TKCJidWZfaWRbJWRdYnVmX3R5cGVbJWRdXG4iLCBi dWZfaWQsIGJ1Zl90eXBlKTsKLQotCW11dGV4X2xvY2soJmN0eC0+bG9jayk7Ci0KIAkvKiBtYXNr IHJlZ2lzdGVyIHNldCAqLwogCWNmZyA9IGdzY19yZWFkKEdTQ19PVVRfQkFTRV9BRERSX1lfTUFT Syk7CiAKLQlzd2l0Y2ggKGJ1Zl90eXBlKSB7Ci0JY2FzZSBJUFBfQlVGX0VOUVVFVUU6Ci0JCW1h c2tlZCA9IGZhbHNlOwotCQlicmVhazsKLQljYXNlIElQUF9CVUZfREVRVUVVRToKLQkJbWFza2Vk ID0gdHJ1ZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2X2VycihpcHBkcnYtPmRldiwgImlu dmFsaWQgYnVmIGN0cmwgcGFyYW1ldGVyLlxuIik7Ci0JCXJldCA9ICAtRUlOVkFMOwotCQlnb3Rv IGVycl91bmxvY2s7Ci0JfQotCiAJLyogc2VxdWVuY2UgaWQgKi8KIAljZmcgJj0gfm1hc2s7CiAJ Y2ZnIHw9IG1hc2tlZCA8PCBidWZfaWQ7CkBAIC0xMTQ4LDg3ICs5NTEsMjUgQEAgc3RhdGljIGlu dCBnc2NfZHN0X3NldF9idWZfc2VxKHN0cnVjdCBnc2NfY29udGV4dCAqY3R4LCB1MzIgYnVmX2lk LAogCWdzY193cml0ZShjZmcsIEdTQ19PVVRfQkFTRV9BRERSX0NSX01BU0spOwogCiAJLyogaW50 ZXJydXB0IGVuYWJsZSAqLwotCWlmIChidWZfdHlwZSA9PSBJUFBfQlVGX0VOUVVFVUUgJiYKLQkg ICAgZ3NjX2RzdF9nZXRfYnVmX3NlcShjdHgpID49IEdTQ19CVUZfU1RBUlQpCisJaWYgKGVucXVl dWUgJiYgZ3NjX2RzdF9nZXRfYnVmX3NlcShjdHgpID49IEdTQ19CVUZfU1RBUlQpCiAJCWdzY19o YW5kbGVfaXJxKGN0eCwgdHJ1ZSwgZmFsc2UsIHRydWUpOwogCiAJLyogaW50ZXJydXB0IGRpc2Fi bGUgKi8KLQlpZiAoYnVmX3R5cGUgPT0gSVBQX0JVRl9ERVFVRVVFICYmCi0JICAgIGdzY19kc3Rf Z2V0X2J1Zl9zZXEoY3R4KSA8PSBHU0NfQlVGX1NUT1ApCisJaWYgKCFlbnF1ZXVlICYmIGdzY19k c3RfZ2V0X2J1Zl9zZXEoY3R4KSA8PSBHU0NfQlVGX1NUT1ApCiAJCWdzY19oYW5kbGVfaXJxKGN0 eCwgZmFsc2UsIGZhbHNlLCB0cnVlKTsKIAotZXJyX3VubG9jazoKLQltdXRleF91bmxvY2soJmN0 eC0+bG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBnc2NfZHN0X3NldF9hZGRy KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRybV9leHlub3NfaXBwX2J1Zl9pbmZvICpi dWZfaW5mbywgdTMyIGJ1Zl9pZCwKLQkJZW51bSBkcm1fZXh5bm9zX2lwcF9idWZfdHlwZSBidWZf dHlwZSkKK3N0YXRpYyBpbnQgZ3NjX2RzdF9zZXRfYWRkcihzdHJ1Y3QgZ3NjX2NvbnRleHQgKmN0 eCwKKwkJdTMyIGJ1Zl9pZCwgc3RydWN0IGV4eW5vc19kcm1faXBwX2J1ZmZlciAqYnVmKQogewot CXN0cnVjdCBnc2NfY29udGV4dCAqY3R4ID0gZ2V0X2dzY19jb250ZXh0KGRldik7Ci0Jc3RydWN0 IGV4eW5vc19kcm1faXBwZHJ2ICppcHBkcnYgPSAmY3R4LT5pcHBkcnY7Ci0Jc3RydWN0IGRybV9l eHlub3NfaXBwX2NtZF9ub2RlICpjX25vZGUgPSBpcHBkcnYtPmNfbm9kZTsKLQlzdHJ1Y3QgZHJt X2V4eW5vc19pcHBfcHJvcGVydHkgKnByb3BlcnR5OwotCi0JaWYgKCFjX25vZGUpIHsKLQkJRFJN X0VSUk9SKCJmYWlsZWQgdG8gZ2V0IGNfbm9kZS5cbiIpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9 Ci0KLQlwcm9wZXJ0eSA9ICZjX25vZGUtPnByb3BlcnR5OwotCi0JRFJNX0RFQlVHX0tNUygicHJv cF9pZFslZF1idWZfaWRbJWRdYnVmX3R5cGVbJWRdXG4iLAotCQlwcm9wZXJ0eS0+cHJvcF9pZCwg YnVmX2lkLCBidWZfdHlwZSk7Ci0KLQlpZiAoYnVmX2lkID4gR1NDX01BWF9EU1QpIHsKLQkJZGV2 X2luZm8oaXBwZHJ2LT5kZXYsICJpbnZhbGlkIGJ1Zl9pZCAlZC5cbiIsIGJ1Zl9pZCk7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQogCS8qIGFkZHJlc3MgcmVnaXN0ZXIgc2V0ICovCi0Jc3dpdGNo IChidWZfdHlwZSkgewotCWNhc2UgSVBQX0JVRl9FTlFVRVVFOgotCQlnc2Nfd3JpdGUoYnVmX2lu Zm8tPmJhc2VbRVhZTk9TX0RSTV9QTEFOQVJfWV0sCi0JCQlHU0NfT1VUX0JBU0VfQUREUl9ZKGJ1 Zl9pZCkpOwotCQlnc2Nfd3JpdGUoYnVmX2luZm8tPmJhc2VbRVhZTk9TX0RSTV9QTEFOQVJfQ0Jd LAotCQkJR1NDX09VVF9CQVNFX0FERFJfQ0IoYnVmX2lkKSk7Ci0JCWdzY193cml0ZShidWZfaW5m by0+YmFzZVtFWFlOT1NfRFJNX1BMQU5BUl9DUl0sCi0JCQlHU0NfT1VUX0JBU0VfQUREUl9DUihi dWZfaWQpKTsKLQkJYnJlYWs7Ci0JY2FzZSBJUFBfQlVGX0RFUVVFVUU6Ci0JCWdzY193cml0ZSgw eDAsIEdTQ19PVVRfQkFTRV9BRERSX1koYnVmX2lkKSk7Ci0JCWdzY193cml0ZSgweDAsIEdTQ19P VVRfQkFTRV9BRERSX0NCKGJ1Zl9pZCkpOwotCQlnc2Nfd3JpdGUoMHgwLCBHU0NfT1VUX0JBU0Vf QUREUl9DUihidWZfaWQpKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogYnlwYXNzICovCi0J CWJyZWFrOwotCX0KLQotCXJldHVybiBnc2NfZHN0X3NldF9idWZfc2VxKGN0eCwgYnVmX2lkLCBi dWZfdHlwZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZXh5bm9zX2RybV9pcHBfb3BzIGdzY19kc3Rf b3BzID0gewotCS5zZXRfZm10ID0gZ3NjX2RzdF9zZXRfZm10LAotCS5zZXRfdHJhbnNmID0gZ3Nj X2RzdF9zZXRfdHJhbnNmLAotCS5zZXRfc2l6ZSA9IGdzY19kc3Rfc2V0X3NpemUsCi0JLnNldF9h ZGRyID0gZ3NjX2RzdF9zZXRfYWRkciwKLX07Ci0KLXN0YXRpYyBpbnQgZ3NjX2Nsa19jdHJsKHN0 cnVjdCBnc2NfY29udGV4dCAqY3R4LCBib29sIGVuYWJsZSkKLXsKLQlEUk1fREVCVUdfS01TKCJl bmFibGVbJWRdXG4iLCBlbmFibGUpOworCWdzY193cml0ZShidWYtPmRtYV9hZGRyWzBdLCBHU0Nf T1VUX0JBU0VfQUREUl9ZKGJ1Zl9pZCkpOworCWdzY193cml0ZShidWYtPmRtYV9hZGRyWzFdLCBH U0NfT1VUX0JBU0VfQUREUl9DQihidWZfaWQpKTsKKwlnc2Nfd3JpdGUoYnVmLT5kbWFfYWRkclsy XSwgR1NDX09VVF9CQVNFX0FERFJfQ1IoYnVmX2lkKSk7CiAKLQlpZiAoZW5hYmxlKSB7Ci0JCWNs a19wcmVwYXJlX2VuYWJsZShjdHgtPmdzY19jbGspOwotCQljdHgtPnN1c3BlbmRlZCA9IGZhbHNl OwotCX0gZWxzZSB7Ci0JCWNsa19kaXNhYmxlX3VucHJlcGFyZShjdHgtPmdzY19jbGspOwotCQlj dHgtPnN1c3BlbmRlZCA9IHRydWU7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGdzY19kc3Rf c2V0X2J1Zl9zZXEoY3R4LCBidWZfaWQsIHRydWUpOwogfQogCiBzdGF0aWMgaW50IGdzY19nZXRf c3JjX2J1Zl9pbmRleChzdHJ1Y3QgZ3NjX2NvbnRleHQgKmN0eCkKQEAgLTEyNDksMjAgKzk5MCwy MCBAQCBzdGF0aWMgaW50IGdzY19nZXRfc3JjX2J1Zl9pbmRleChzdHJ1Y3QgZ3NjX2NvbnRleHQg KmN0eCkKIAkJfQogCX0KIAorCURSTV9ERUJVR19LTVMoImNmZ1sweCV4XWN1cnJfaW5kZXhbJWRd YnVmX2lkWyVkXVxuIiwgY2ZnLAorCQljdXJyX2luZGV4LCBidWZfaWQpOworCiAJaWYgKGJ1Zl9p ZCA9PSBHU0NfTUFYX1NSQykgewogCQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQgaW4gYnVmZmVy IGluZGV4LlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldCA9IGdzY19zcmNfc2V0 X2J1Zl9zZXEoY3R4LCBidWZfaWQsIElQUF9CVUZfREVRVUVVRSk7CisJcmV0ID0gZ3NjX3NyY19z ZXRfYnVmX3NlcShjdHgsIGJ1Zl9pZCwgZmFsc2UpOwogCWlmIChyZXQgPCAwKSB7CiAJCURSTV9F UlJPUigiZmFpbGVkIHRvIGRlcXVldWUuXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlEUk1f REVCVUdfS01TKCJjZmdbMHgleF1jdXJyX2luZGV4WyVkXWJ1Zl9pZFslZF1cbiIsIGNmZywKLQkJ Y3Vycl9pbmRleCwgYnVmX2lkKTsKLQogCXJldHVybiBidWZfaWQ7CiB9CiAKQEAgLTEyODksNyAr MTAzMCw3IEBAIHN0YXRpYyBpbnQgZ3NjX2dldF9kc3RfYnVmX2luZGV4KHN0cnVjdCBnc2NfY29u dGV4dCAqY3R4KQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZXQgPSBnc2NfZHN0X3NldF9i dWZfc2VxKGN0eCwgYnVmX2lkLCBJUFBfQlVGX0RFUVVFVUUpOworCXJldCA9IGdzY19kc3Rfc2V0 X2J1Zl9zZXEoY3R4LCBidWZfaWQsIGZhbHNlKTsKIAlpZiAocmV0IDwgMCkgewogCQlEUk1fRVJS T1IoImZhaWxlZCB0byBkZXF1ZXVlLlxuIik7CiAJCXJldHVybiByZXQ7CkBAIC0xMzA0LDIxNSAr MTA0NSw1NSBAQCBzdGF0aWMgaW50IGdzY19nZXRfZHN0X2J1Zl9pbmRleChzdHJ1Y3QgZ3NjX2Nv bnRleHQgKmN0eCkKIHN0YXRpYyBpcnFyZXR1cm5fdCBnc2NfaXJxX2hhbmRsZXIoaW50IGlycSwg dm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBnc2NfY29udGV4dCAqY3R4ID0gZGV2X2lkOwotCXN0 cnVjdCBleHlub3NfZHJtX2lwcGRydiAqaXBwZHJ2ID0gJmN0eC0+aXBwZHJ2OwotCXN0cnVjdCBk cm1fZXh5bm9zX2lwcF9jbWRfbm9kZSAqY19ub2RlID0gaXBwZHJ2LT5jX25vZGU7Ci0Jc3RydWN0 IGRybV9leHlub3NfaXBwX2V2ZW50X3dvcmsgKmV2ZW50X3dvcmsgPQotCQljX25vZGUtPmV2ZW50 X3dvcms7CiAJdTMyIHN0YXR1czsKLQlpbnQgYnVmX2lkW0VYWU5PU19EUk1fT1BTX01BWF07CisJ aW50IGVyciA9IDA7CiAKIAlEUk1fREVCVUdfS01TKCJnc2MgaWRbJWRdXG4iLCBjdHgtPmlkKTsK IAogCXN0YXR1cyA9IGdzY19yZWFkKEdTQ19JUlEpOwogCWlmIChzdGF0dXMgJiBHU0NfSVJRX1NU QVRVU19PUl9JUlEpIHsKLQkJZGV2X2VycihpcHBkcnYtPmRldiwgIm9jY3VycmVkIG92ZXJmbG93 IGF0ICVkLCBzdGF0dXMgMHgleC5cbiIsCisJCWRldl9lcnIoY3R4LT5kZXYsICJvY2N1cnJlZCBv dmVyZmxvdyBhdCAlZCwgc3RhdHVzIDB4JXguXG4iLAogCQkJY3R4LT5pZCwgc3RhdHVzKTsKLQkJ cmV0dXJuIElSUV9OT05FOworCQllcnIgPSAtRUlOVkFMOwogCX0KIAogCWlmIChzdGF0dXMgJiBH U0NfSVJRX1NUQVRVU19PUl9GUk1fRE9ORSkgewotCQlkZXZfZGJnKGlwcGRydi0+ZGV2LCAib2Nj dXJyZWQgZnJhbWUgZG9uZSBhdCAlZCwgc3RhdHVzIDB4JXguXG4iLAotCQkJY3R4LT5pZCwgc3Rh dHVzKTsKLQotCQlidWZfaWRbRVhZTk9TX0RSTV9PUFNfU1JDXSA9IGdzY19nZXRfc3JjX2J1Zl9p bmRleChjdHgpOwotCQlpZiAoYnVmX2lkW0VYWU5PU19EUk1fT1BTX1NSQ10gPCAwKQotCQkJcmV0 dXJuIElSUV9IQU5ETEVEOwotCi0JCWJ1Zl9pZFtFWFlOT1NfRFJNX09QU19EU1RdID0gZ3NjX2dl dF9kc3RfYnVmX2luZGV4KGN0eCk7Ci0JCWlmIChidWZfaWRbRVhZTk9TX0RSTV9PUFNfRFNUXSA8 IDApCi0JCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCWludCBzcmNfYnVmX2lkLCBkc3RfYnVmX2lk OwogCi0JCURSTV9ERUJVR19LTVMoImJ1Zl9pZF9zcmNbJWRdYnVmX2lkX2RzdFslZF1cbiIsCi0J CQlidWZfaWRbRVhZTk9TX0RSTV9PUFNfU1JDXSwgYnVmX2lkW0VYWU5PU19EUk1fT1BTX0RTVF0p OwotCi0JCWV2ZW50X3dvcmstPmlwcGRydiA9IGlwcGRydjsKLQkJZXZlbnRfd29yay0+YnVmX2lk W0VYWU5PU19EUk1fT1BTX1NSQ10gPQotCQkJYnVmX2lkW0VYWU5PU19EUk1fT1BTX1NSQ107Ci0J CWV2ZW50X3dvcmstPmJ1Zl9pZFtFWFlOT1NfRFJNX09QU19EU1RdID0KLQkJCWJ1Zl9pZFtFWFlO T1NfRFJNX09QU19EU1RdOwotCQlxdWV1ZV93b3JrKGlwcGRydi0+ZXZlbnRfd29ya3EsICZldmVu dF93b3JrLT53b3JrKTsKLQl9Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBp bnQgZ3NjX2luaXRfcHJvcF9saXN0KHN0cnVjdCBleHlub3NfZHJtX2lwcGRydiAqaXBwZHJ2KQot ewotCXN0cnVjdCBkcm1fZXh5bm9zX2lwcF9wcm9wX2xpc3QgKnByb3BfbGlzdCA9ICZpcHBkcnYt PnByb3BfbGlzdDsKLQotCXByb3BfbGlzdC0+dmVyc2lvbiA9IDE7Ci0JcHJvcF9saXN0LT53cml0 ZWJhY2sgPSAxOwotCXByb3BfbGlzdC0+cmVmcmVzaF9taW4gPSBHU0NfUkVGUkVTSF9NSU47Ci0J cHJvcF9saXN0LT5yZWZyZXNoX21heCA9IEdTQ19SRUZSRVNIX01BWDsKLQlwcm9wX2xpc3QtPmZs aXAgPSAoMSA8PCBFWFlOT1NfRFJNX0ZMSVBfVkVSVElDQUwpIHwKLQkJCQkoMSA8PCBFWFlOT1Nf RFJNX0ZMSVBfSE9SSVpPTlRBTCk7Ci0JcHJvcF9saXN0LT5kZWdyZWUgPSAoMSA8PCBFWFlOT1Nf RFJNX0RFR1JFRV8wKSB8Ci0JCQkJKDEgPDwgRVhZTk9TX0RSTV9ERUdSRUVfOTApIHwKLQkJCQko MSA8PCBFWFlOT1NfRFJNX0RFR1JFRV8xODApIHwKLQkJCQkoMSA8PCBFWFlOT1NfRFJNX0RFR1JF RV8yNzApOwotCXByb3BfbGlzdC0+Y3NjID0gMTsKLQlwcm9wX2xpc3QtPmNyb3AgPSAxOwotCXBy b3BfbGlzdC0+Y3JvcF9tYXguaHNpemUgPSBHU0NfQ1JPUF9NQVg7Ci0JcHJvcF9saXN0LT5jcm9w X21heC52c2l6ZSA9IEdTQ19DUk9QX01BWDsKLQlwcm9wX2xpc3QtPmNyb3BfbWluLmhzaXplID0g R1NDX0NST1BfTUlOOwotCXByb3BfbGlzdC0+Y3JvcF9taW4udnNpemUgPSBHU0NfQ1JPUF9NSU47 Ci0JcHJvcF9saXN0LT5zY2FsZSA9IDE7Ci0JcHJvcF9saXN0LT5zY2FsZV9tYXguaHNpemUgPSBH U0NfU0NBTEVfTUFYOwotCXByb3BfbGlzdC0+c2NhbGVfbWF4LnZzaXplID0gR1NDX1NDQUxFX01B WDsKLQlwcm9wX2xpc3QtPnNjYWxlX21pbi5oc2l6ZSA9IEdTQ19TQ0FMRV9NSU47Ci0JcHJvcF9s aXN0LT5zY2FsZV9taW4udnNpemUgPSBHU0NfU0NBTEVfTUlOOwotCi0JcmV0dXJuIDA7Ci19Ci0K LXN0YXRpYyBpbmxpbmUgYm9vbCBnc2NfY2hlY2tfZHJtX2ZsaXAoZW51bSBkcm1fZXh5bm9zX2Zs aXAgZmxpcCkKLXsKLQlzd2l0Y2ggKGZsaXApIHsKLQljYXNlIEVYWU5PU19EUk1fRkxJUF9OT05F OgotCWNhc2UgRVhZTk9TX0RSTV9GTElQX1ZFUlRJQ0FMOgotCWNhc2UgRVhZTk9TX0RSTV9GTElQ X0hPUklaT05UQUw6Ci0JY2FzZSBFWFlOT1NfRFJNX0ZMSVBfQk9USDoKLQkJcmV0dXJuIHRydWU7 Ci0JZGVmYXVsdDoKLQkJRFJNX0RFQlVHX0tNUygiaW52YWxpZCBmbGlwXG4iKTsKLQkJcmV0dXJu IGZhbHNlOwotCX0KLX0KLQotc3RhdGljIGludCBnc2NfaXBwZHJ2X2NoZWNrX3Byb3BlcnR5KHN0 cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRybV9leHlub3NfaXBwX3Byb3BlcnR5ICpwcm9w ZXJ0eSkKLXsKLQlzdHJ1Y3QgZ3NjX2NvbnRleHQgKmN0eCA9IGdldF9nc2NfY29udGV4dChkZXYp OwotCXN0cnVjdCBleHlub3NfZHJtX2lwcGRydiAqaXBwZHJ2ID0gJmN0eC0+aXBwZHJ2OwotCXN0 cnVjdCBkcm1fZXh5bm9zX2lwcF9wcm9wX2xpc3QgKnBwID0gJmlwcGRydi0+cHJvcF9saXN0Owot CXN0cnVjdCBkcm1fZXh5bm9zX2lwcF9jb25maWcgKmNvbmZpZzsKLQlzdHJ1Y3QgZHJtX2V4eW5v c19wb3MgKnBvczsKLQlzdHJ1Y3QgZHJtX2V4eW5vc19zeiAqc3o7Ci0JYm9vbCBzd2FwOwotCWlu dCBpOwotCi0JZm9yX2VhY2hfaXBwX29wcyhpKSB7Ci0JCWlmICgoaSA9PSBFWFlOT1NfRFJNX09Q U19TUkMpICYmCi0JCQkocHJvcGVydHktPmNtZCA9PSBJUFBfQ01EX1dCKSkKLQkJCWNvbnRpbnVl OwotCi0JCWNvbmZpZyA9ICZwcm9wZXJ0eS0+Y29uZmlnW2ldOwotCQlwb3MgPSAmY29uZmlnLT5w b3M7Ci0JCXN6ID0gJmNvbmZpZy0+c3o7Ci0KLQkJLyogY2hlY2sgZm9yIGZsaXAgKi8KLQkJaWYg KCFnc2NfY2hlY2tfZHJtX2ZsaXAoY29uZmlnLT5mbGlwKSkgewotCQkJRFJNX0VSUk9SKCJpbnZh bGlkIGZsaXAuXG4iKTsKLQkJCWdvdG8gZXJyX3Byb3BlcnR5OwotCQl9Ci0KLQkJLyogY2hlY2sg Zm9yIGRlZ3JlZSAqLwotCQlzd2l0Y2ggKGNvbmZpZy0+ZGVncmVlKSB7Ci0JCWNhc2UgRVhZTk9T X0RSTV9ERUdSRUVfOTA6Ci0JCWNhc2UgRVhZTk9TX0RSTV9ERUdSRUVfMjcwOgotCQkJc3dhcCA9 IHRydWU7Ci0JCQlicmVhazsKLQkJY2FzZSBFWFlOT1NfRFJNX0RFR1JFRV8wOgotCQljYXNlIEVY WU5PU19EUk1fREVHUkVFXzE4MDoKLQkJCXN3YXAgPSBmYWxzZTsKLQkJCWJyZWFrOwotCQlkZWZh dWx0OgotCQkJRFJNX0VSUk9SKCJpbnZhbGlkIGRlZ3JlZS5cbiIpOwotCQkJZ290byBlcnJfcHJv cGVydHk7Ci0JCX0KKwkJZGV2X2RiZyhjdHgtPmRldiwgIm9jY3VycmVkIGZyYW1lIGRvbmUgYXQg JWQsIHN0YXR1cyAweCV4LlxuIiwKKwkJCWN0eC0+aWQsIHN0YXR1cyk7CiAKLQkJLyogY2hlY2sg Zm9yIGJ1ZmZlciBib3VuZCAqLwotCQlpZiAoKHBvcy0+eCArIHBvcy0+dyA+IHN6LT5oc2l6ZSkg fHwKLQkJCShwb3MtPnkgKyBwb3MtPmggPiBzei0+dnNpemUpKSB7Ci0JCQlEUk1fRVJST1IoIm91 dCBvZiBidWYgYm91bmQuXG4iKTsKLQkJCWdvdG8gZXJyX3Byb3BlcnR5OwotCQl9CisJCXNyY19i dWZfaWQgPSBnc2NfZ2V0X3NyY19idWZfaW5kZXgoY3R4KTsKKwkJZHN0X2J1Zl9pZCA9IGdzY19n ZXRfZHN0X2J1Zl9pbmRleChjdHgpOwogCi0JCS8qIGNoZWNrIGZvciBjcm9wICovCi0JCWlmICgo aSA9PSBFWFlOT1NfRFJNX09QU19TUkMpICYmIChwcC0+Y3JvcCkpIHsKLQkJCWlmIChzd2FwKSB7 Ci0JCQkJaWYgKChwb3MtPmggPCBwcC0+Y3JvcF9taW4uaHNpemUpIHx8Ci0JCQkJCShzei0+dnNp emUgPiBwcC0+Y3JvcF9tYXguaHNpemUpIHx8Ci0JCQkJCShwb3MtPncgPCBwcC0+Y3JvcF9taW4u dnNpemUpIHx8Ci0JCQkJCShzei0+aHNpemUgPiBwcC0+Y3JvcF9tYXgudnNpemUpKSB7Ci0JCQkJ CURSTV9FUlJPUigib3V0IG9mIGNyb3Agc2l6ZS5cbiIpOwotCQkJCQlnb3RvIGVycl9wcm9wZXJ0 eTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWlmICgocG9zLT53IDwgcHAtPmNyb3BfbWluLmhz aXplKSB8fAotCQkJCQkoc3otPmhzaXplID4gcHAtPmNyb3BfbWF4LmhzaXplKSB8fAotCQkJCQko cG9zLT5oIDwgcHAtPmNyb3BfbWluLnZzaXplKSB8fAotCQkJCQkoc3otPnZzaXplID4gcHAtPmNy b3BfbWF4LnZzaXplKSkgewotCQkJCQlEUk1fRVJST1IoIm91dCBvZiBjcm9wIHNpemUuXG4iKTsK LQkJCQkJZ290byBlcnJfcHJvcGVydHk7Ci0JCQkJfQotCQkJfQotCQl9CisJCURSTV9ERUJVR19L TVMoImJ1Zl9pZF9zcmNbJWRdYnVmX2lkX2RzdFslZF1cbiIsCXNyY19idWZfaWQsCisJCQkgICAg ICBkc3RfYnVmX2lkKTsKIAotCQkvKiBjaGVjayBmb3Igc2NhbGUgKi8KLQkJaWYgKChpID09IEVY WU5PU19EUk1fT1BTX0RTVCkgJiYgKHBwLT5zY2FsZSkpIHsKLQkJCWlmIChzd2FwKSB7Ci0JCQkJ aWYgKChwb3MtPmggPCBwcC0+c2NhbGVfbWluLmhzaXplKSB8fAotCQkJCQkoc3otPnZzaXplID4g cHAtPnNjYWxlX21heC5oc2l6ZSkgfHwKLQkJCQkJKHBvcy0+dyA8IHBwLT5zY2FsZV9taW4udnNp emUpIHx8Ci0JCQkJCShzei0+aHNpemUgPiBwcC0+c2NhbGVfbWF4LnZzaXplKSkgewotCQkJCQlE Uk1fRVJST1IoIm91dCBvZiBzY2FsZSBzaXplLlxuIik7Ci0JCQkJCWdvdG8gZXJyX3Byb3BlcnR5 OwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKChwb3MtPncgPCBwcC0+c2NhbGVfbWluLmhz aXplKSB8fAotCQkJCQkoc3otPmhzaXplID4gcHAtPnNjYWxlX21heC5oc2l6ZSkgfHwKLQkJCQkJ KHBvcy0+aCA8IHBwLT5zY2FsZV9taW4udnNpemUpIHx8Ci0JCQkJCShzei0+dnNpemUgPiBwcC0+ c2NhbGVfbWF4LnZzaXplKSkgewotCQkJCQlEUk1fRVJST1IoIm91dCBvZiBzY2FsZSBzaXplLlxu Iik7Ci0JCQkJCWdvdG8gZXJyX3Byb3BlcnR5OwotCQkJCX0KLQkJCX0KLQkJfQorCQlpZiAoc3Jj X2J1Zl9pZCA8IDAgfHwgZHN0X2J1Zl9pZCA8IDApCisJCQllcnIgPSAtRUlOVkFMOwogCX0KIAot CXJldHVybiAwOwotCi1lcnJfcHJvcGVydHk6Ci0JZm9yX2VhY2hfaXBwX29wcyhpKSB7Ci0JCWlm ICgoaSA9PSBFWFlOT1NfRFJNX09QU19TUkMpICYmCi0JCQkocHJvcGVydHktPmNtZCA9PSBJUFBf Q01EX1dCKSkKLQkJCWNvbnRpbnVlOworCWlmIChjdHgtPnRhc2spIHsKKwkJc3RydWN0IGV4eW5v c19kcm1faXBwX3Rhc2sgKnRhc2sgPSBjdHgtPnRhc2s7CiAKLQkJY29uZmlnID0gJnByb3BlcnR5 LT5jb25maWdbaV07Ci0JCXBvcyA9ICZjb25maWctPnBvczsKLQkJc3ogPSAmY29uZmlnLT5zejsK LQotCQlEUk1fRVJST1IoIlslc11mWyVkXXJbJWRdcG9zWyVkICVkICVkICVkXXN6WyVkICVkXVxu IiwKLQkJCWkgPyAiZHN0IiA6ICJzcmMiLCBjb25maWctPmZsaXAsIGNvbmZpZy0+ZGVncmVlLAot CQkJcG9zLT54LCBwb3MtPnksIHBvcy0+dywgcG9zLT5oLAotCQkJc3otPmhzaXplLCBzei0+dnNp emUpOworCQljdHgtPnRhc2sgPSBOVUxMOworCQlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KGN0 eC0+ZGV2KTsKKwkJcG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoY3R4LT5kZXYpOworCQlleHlu b3NfZHJtX2lwcF90YXNrX2RvbmUodGFzaywgZXJyKTsKIAl9CiAKLQlyZXR1cm4gLUVJTlZBTDsK KwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLQotc3RhdGljIGludCBnc2NfaXBwZHJ2X3Jlc2V0 KHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZ3NjX3Jlc2V0KHN0cnVjdCBnc2NfY29u dGV4dCAqY3R4KQogewotCXN0cnVjdCBnc2NfY29udGV4dCAqY3R4ID0gZ2V0X2dzY19jb250ZXh0 KGRldik7CiAJc3RydWN0IGdzY19zY2FsZXIgKnNjID0gJmN0eC0+c2M7CiAJaW50IHJldDsKIAog CS8qIHJlc2V0IGgvdyBibG9jayAqLwogCXJldCA9IGdzY19zd19yZXNldChjdHgpOwogCWlmIChy ZXQgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlc2V0IGhhcmR3YXJlLlxuIik7 CisJCWRldl9lcnIoY3R4LT5kZXYsICJmYWlsZWQgdG8gcmVzZXQgaGFyZHdhcmUuXG4iKTsKIAkJ cmV0dXJuIHJldDsKIAl9CiAKQEAgLTE1MjMsOTYgKzExMDQsMjkgQEAgc3RhdGljIGludCBnc2Nf aXBwZHJ2X3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldikKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGlj IGludCBnc2NfaXBwZHJ2X3N0YXJ0KHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBkcm1fZXh5bm9z X2lwcF9jbWQgY21kKQorc3RhdGljIGludCBnc2Nfc3RhcnQoc3RydWN0IGdzY19jb250ZXh0ICpj dHgpCiB7Ci0Jc3RydWN0IGdzY19jb250ZXh0ICpjdHggPSBnZXRfZ3NjX2NvbnRleHQoZGV2KTsK LQlzdHJ1Y3QgZXh5bm9zX2RybV9pcHBkcnYgKmlwcGRydiA9ICZjdHgtPmlwcGRydjsKLQlzdHJ1 Y3QgZHJtX2V4eW5vc19pcHBfY21kX25vZGUgKmNfbm9kZSA9IGlwcGRydi0+Y19ub2RlOwotCXN0 cnVjdCBkcm1fZXh5bm9zX2lwcF9wcm9wZXJ0eSAqcHJvcGVydHk7Ci0Jc3RydWN0IGRybV9leHlu b3NfaXBwX2NvbmZpZyAqY29uZmlnOwotCXN0cnVjdCBkcm1fZXh5bm9zX3BvcwlpbWdfcG9zW0VY WU5PU19EUk1fT1BTX01BWF07Ci0Jc3RydWN0IGRybV9leHlub3NfaXBwX3NldF93YiBzZXRfd2I7 CiAJdTMyIGNmZzsKLQlpbnQgcmV0LCBpOwotCi0JRFJNX0RFQlVHX0tNUygiY21kWyVkXVxuIiwg Y21kKTsKLQotCWlmICghY19ub2RlKSB7Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBjX25v ZGUuXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcHJvcGVydHkgPSAmY19ub2RlLT5w cm9wZXJ0eTsKIAogCWdzY19oYW5kbGVfaXJxKGN0eCwgdHJ1ZSwgZmFsc2UsIHRydWUpOwogCi0J Zm9yX2VhY2hfaXBwX29wcyhpKSB7Ci0JCWNvbmZpZyA9ICZwcm9wZXJ0eS0+Y29uZmlnW2ldOwot CQlpbWdfcG9zW2ldID0gY29uZmlnLT5wb3M7Ci0JfQorCS8qIGVuYWJsZSBvbmUgc2hvdCAqLwor CWNmZyA9IGdzY19yZWFkKEdTQ19FTkFCTEUpOworCWNmZyAmPSB+KEdTQ19FTkFCTEVfT05fQ0xF QVJfTUFTSyB8CisJCUdTQ19FTkFCTEVfQ0xLX0dBVEVfTU9ERV9NQVNLKTsKKwljZmcgfD0gR1ND X0VOQUJMRV9PTl9DTEVBUl9PTkVTSE9UOworCWdzY193cml0ZShjZmcsIEdTQ19FTkFCTEUpOwog Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIElQUF9DTURfTTJNOgotCQkvKiBlbmFibGUgb25lIHNo b3QgKi8KLQkJY2ZnID0gZ3NjX3JlYWQoR1NDX0VOQUJMRSk7Ci0JCWNmZyAmPSB+KEdTQ19FTkFC TEVfT05fQ0xFQVJfTUFTSyB8Ci0JCQlHU0NfRU5BQkxFX0NMS19HQVRFX01PREVfTUFTSyk7Ci0J CWNmZyB8PSBHU0NfRU5BQkxFX09OX0NMRUFSX09ORVNIT1Q7Ci0JCWdzY193cml0ZShjZmcsIEdT Q19FTkFCTEUpOwotCi0JCS8qIHNyYyBkbWEgbWVtb3J5ICovCi0JCWNmZyA9IGdzY19yZWFkKEdT Q19JTl9DT04pOwotCQljZmcgJj0gfihHU0NfSU5fUEFUSF9NQVNLIHwgR1NDX0lOX0xPQ0FMX1NF TF9NQVNLKTsKLQkJY2ZnIHw9IEdTQ19JTl9QQVRIX01FTU9SWTsKLQkJZ3NjX3dyaXRlKGNmZywg R1NDX0lOX0NPTik7Ci0KLQkJLyogZHN0IGRtYSBtZW1vcnkgKi8KLQkJY2ZnID0gZ3NjX3JlYWQo R1NDX09VVF9DT04pOwotCQljZmcgfD0gR1NDX09VVF9QQVRIX01FTU9SWTsKLQkJZ3NjX3dyaXRl KGNmZywgR1NDX09VVF9DT04pOwotCQlicmVhazsKLQljYXNlIElQUF9DTURfV0I6Ci0JCXNldF93 Yi5lbmFibGUgPSAxOwotCQlzZXRfd2IucmVmcmVzaCA9IHByb3BlcnR5LT5yZWZyZXNoX3JhdGU7 Ci0JCWdzY19zZXRfZ3NjYmxrX2ZpbWRfd2IoY3R4LCBzZXRfd2IuZW5hYmxlKTsKLQkJZXh5bm9z X2RybV9pcHBuYl9zZW5kX2V2ZW50KElQUF9TRVRfV1JJVEVCQUNLLCAodm9pZCAqKSZzZXRfd2Ip OwotCi0JCS8qIHNyYyBsb2NhbCBwYXRoICovCi0JCWNmZyA9IGdzY19yZWFkKEdTQ19JTl9DT04p OwotCQljZmcgJj0gfihHU0NfSU5fUEFUSF9NQVNLIHwgR1NDX0lOX0xPQ0FMX1NFTF9NQVNLKTsK LQkJY2ZnIHw9IChHU0NfSU5fUEFUSF9MT0NBTCB8IEdTQ19JTl9MT0NBTF9GSU1EX1dCKTsKLQkJ Z3NjX3dyaXRlKGNmZywgR1NDX0lOX0NPTik7Ci0KLQkJLyogZHN0IGRtYSBtZW1vcnkgKi8KLQkJ Y2ZnID0gZ3NjX3JlYWQoR1NDX09VVF9DT04pOwotCQljZmcgfD0gR1NDX09VVF9QQVRIX01FTU9S WTsKLQkJZ3NjX3dyaXRlKGNmZywgR1NDX09VVF9DT04pOwotCQlicmVhazsKLQljYXNlIElQUF9D TURfT1VUUFVUOgotCQkvKiBzcmMgZG1hIG1lbW9yeSAqLwotCQljZmcgPSBnc2NfcmVhZChHU0Nf SU5fQ09OKTsKLQkJY2ZnICY9IH4oR1NDX0lOX1BBVEhfTUFTSyB8IEdTQ19JTl9MT0NBTF9TRUxf TUFTSyk7Ci0JCWNmZyB8PSBHU0NfSU5fUEFUSF9NRU1PUlk7Ci0JCWdzY193cml0ZShjZmcsIEdT Q19JTl9DT04pOwotCi0JCS8qIGRzdCBsb2NhbCBwYXRoICovCi0JCWNmZyA9IGdzY19yZWFkKEdT Q19PVVRfQ09OKTsKLQkJY2ZnIHw9IEdTQ19PVVRfUEFUSF9NRU1PUlk7Ci0JCWdzY193cml0ZShj ZmcsIEdTQ19PVVRfQ09OKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVJTlZBTDsK LQkJZGV2X2VycihkZXYsICJpbnZhbGlkIG9wZXJhdGlvbnMuXG4iKTsKLQkJcmV0dXJuIHJldDsK LQl9CisJLyogc3JjIGRtYSBtZW1vcnkgKi8KKwljZmcgPSBnc2NfcmVhZChHU0NfSU5fQ09OKTsK KwljZmcgJj0gfihHU0NfSU5fUEFUSF9NQVNLIHwgR1NDX0lOX0xPQ0FMX1NFTF9NQVNLKTsKKwlj ZmcgfD0gR1NDX0lOX1BBVEhfTUVNT1JZOworCWdzY193cml0ZShjZmcsIEdTQ19JTl9DT04pOwog Ci0JcmV0ID0gZ3NjX3NldF9wcmVzY2FsZXIoY3R4LCAmY3R4LT5zYywKLQkJJmltZ19wb3NbRVhZ Tk9TX0RSTV9PUFNfU1JDXSwKLQkJJmltZ19wb3NbRVhZTk9TX0RSTV9PUFNfRFNUXSk7Ci0JaWYg KHJldCkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBzZXQgcHJlc2NhbGVyLlxuIik7Ci0J CXJldHVybiByZXQ7Ci0JfQorCS8qIGRzdCBkbWEgbWVtb3J5ICovCisJY2ZnID0gZ3NjX3JlYWQo R1NDX09VVF9DT04pOworCWNmZyB8PSBHU0NfT1VUX1BBVEhfTUVNT1JZOworCWdzY193cml0ZShj ZmcsIEdTQ19PVVRfQ09OKTsKIAogCWdzY19zZXRfc2NhbGVyKGN0eCwgJmN0eC0+c2MpOwogCkBA IC0xNjIzLDY2ICsxMTM3LDEzMiBAQCBzdGF0aWMgaW50IGdzY19pcHBkcnZfc3RhcnQoc3RydWN0 IGRldmljZSAqZGV2LCBlbnVtIGRybV9leHlub3NfaXBwX2NtZCBjbWQpCiAJcmV0dXJuIDA7CiB9 CiAKLXN0YXRpYyB2b2lkIGdzY19pcHBkcnZfc3RvcChzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0g ZHJtX2V4eW5vc19pcHBfY21kIGNtZCkKK3N0YXRpYyBpbnQgZ3NjX2NvbW1pdChzdHJ1Y3QgZXh5 bm9zX2RybV9pcHAgKmlwcCwKKwkJCSAgc3RydWN0IGV4eW5vc19kcm1faXBwX3Rhc2sgKnRhc2sp CiB7Ci0Jc3RydWN0IGdzY19jb250ZXh0ICpjdHggPSBnZXRfZ3NjX2NvbnRleHQoZGV2KTsKLQlz dHJ1Y3QgZHJtX2V4eW5vc19pcHBfc2V0X3diIHNldF93YiA9IHswLCAwfTsKLQl1MzIgY2ZnOwor CXN0cnVjdCBnc2NfY29udGV4dCAqY3R4ID0gY29udGFpbmVyX29mKGlwcCwgc3RydWN0IGdzY19j b250ZXh0LCBpcHApOworCisJcG1fcnVudGltZV9nZXRfc3luYyhjdHgtPmRldik7CisJY3R4LT50 YXNrID0gdGFzazsKKworCWdzY19yZXNldChjdHgpOworCWdzY19zcmNfc2V0X2ZtdChjdHgsIHRh c2stPnNyYy5idWYuZm91cmNjKTsKKwlnc2Nfc3JjX3NldF90cmFuc2YoY3R4LCB0YXNrLT50cmFu c2Zvcm0ucm90YXRpb24pOworCWdzY19zcmNfc2V0X3NpemUoY3R4LCAmdGFzay0+c3JjKTsKKwln c2Nfc3JjX3NldF9hZGRyKGN0eCwgMCwgJnRhc2stPnNyYyk7CisJZ3NjX2RzdF9zZXRfZm10KGN0 eCwgdGFzay0+ZHN0LmJ1Zi5mb3VyY2MpOworCWdzY19kc3Rfc2V0X3NpemUoY3R4LCAmdGFzay0+ ZHN0KTsKKwlnc2NfZHN0X3NldF9hZGRyKGN0eCwgMCwgJnRhc2stPmRzdCk7CisJZ3NjX3NldF9w cmVzY2FsZXIoY3R4LCAmY3R4LT5zYywgJnRhc2stPnNyYy5yZWN0LCAmdGFzay0+ZHN0LnJlY3Qp OworCWdzY19zdGFydChjdHgpOwogCi0JRFJNX0RFQlVHX0tNUygiY21kWyVkXVxuIiwgY21kKTsK KwlyZXR1cm4gMDsKK30KIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBJUFBfQ01EX00yTToKLQkJ LyogYnlwYXNzICovCi0JCWJyZWFrOwotCWNhc2UgSVBQX0NNRF9XQjoKLQkJZ3NjX3NldF9nc2Ni bGtfZmltZF93YihjdHgsIHNldF93Yi5lbmFibGUpOwotCQlleHlub3NfZHJtX2lwcG5iX3NlbmRf ZXZlbnQoSVBQX1NFVF9XUklURUJBQ0ssICh2b2lkICopJnNldF93Yik7Ci0JCWJyZWFrOwotCWNh c2UgSVBQX0NNRF9PVVRQVVQ6Ci0JZGVmYXVsdDoKLQkJZGV2X2VycihkZXYsICJpbnZhbGlkIG9w ZXJhdGlvbnMuXG4iKTsKLQkJYnJlYWs7CitzdGF0aWMgdm9pZCBnc2NfYWJvcnQoc3RydWN0IGV4 eW5vc19kcm1faXBwICppcHAsCisJCQkgIHN0cnVjdCBleHlub3NfZHJtX2lwcF90YXNrICp0YXNr KQoreworCXN0cnVjdCBnc2NfY29udGV4dCAqY3R4ID0KKwkJCWNvbnRhaW5lcl9vZihpcHAsIHN0 cnVjdCBnc2NfY29udGV4dCwgaXBwKTsKKworCWdzY19yZXNldChjdHgpOworCWlmIChjdHgtPnRh c2spIHsKKwkJc3RydWN0IGV4eW5vc19kcm1faXBwX3Rhc2sgKnRhc2sgPSBjdHgtPnRhc2s7CisK KwkJY3R4LT50YXNrID0gTlVMTDsKKwkJcG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeShjdHgtPmRl dik7CisJCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKGN0eC0+ZGV2KTsKKwkJZXh5bm9zX2Ry bV9pcHBfdGFza19kb25lKHRhc2ssIC1FSU8pOwogCX0KK30KIAotCWdzY19oYW5kbGVfaXJxKGN0 eCwgZmFsc2UsIGZhbHNlLCB0cnVlKTsKK3N0YXRpYyBzdHJ1Y3QgZXh5bm9zX2RybV9pcHBfZnVu Y3MgaXBwX2Z1bmNzID0geworCS5jb21taXQgPSBnc2NfY29tbWl0LAorCS5hYm9ydCA9IGdzY19h Ym9ydCwKK307CiAKLQkvKiByZXNldCBzZXF1ZW5jZSAqLwotCWdzY193cml0ZSgweGZmLCBHU0Nf T1VUX0JBU0VfQUREUl9ZX01BU0spOwotCWdzY193cml0ZSgweGZmLCBHU0NfT1VUX0JBU0VfQURE Ul9DQl9NQVNLKTsKLQlnc2Nfd3JpdGUoMHhmZiwgR1NDX09VVF9CQVNFX0FERFJfQ1JfTUFTSyk7 CitzdGF0aWMgaW50IGdzY19iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAq bWFzdGVyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBnc2NfY29udGV4dCAqY3R4ID0gZGV2X2dl dF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCXN0 cnVjdCBleHlub3NfZHJtX2lwcCAqaXBwID0gJmN0eC0+aXBwOwogCi0JY2ZnID0gZ3NjX3JlYWQo R1NDX0VOQUJMRSk7Ci0JY2ZnICY9IH5HU0NfRU5BQkxFX09OOwotCWdzY193cml0ZShjZmcsIEdT Q19FTkFCTEUpOworCWN0eC0+ZHJtX2RldiA9IGRybV9kZXY7CisJZHJtX2lvbW11X2F0dGFjaF9k ZXZpY2UoZHJtX2RldiwgZGV2KTsKKworCWV4eW5vc19kcm1faXBwX3JlZ2lzdGVyKGRybV9kZXYs IGlwcCwgJmlwcF9mdW5jcywKKwkJCSAgIERSTV9FWFlOT1NfSVBQX0NBUF9DUk9QIHwgRFJNX0VY WU5PU19JUFBfQ0FQX1JPVEFURSB8CisJCQkgICBEUk1fRVhZTk9TX0lQUF9DQVBfU0NBTEUgfCBE Uk1fRVhZTk9TX0lQUF9DQVBfQ09OVkVSVCwKKwkJCSAgIGN0eC0+Zm9ybWF0cywgImdzYyIpOwor CisJZGV2X2luZm8oZGV2LCAiVGhlIGV4eW5vcyBnc2NhbGVyIGlzIHByb2JlZCBzdWNjZXNzZnVs bHlcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdzY191bmJpbmQoc3RydWN0 IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQl2b2lkICpkYXRhKQorewor CXN0cnVjdCBnc2NfY29udGV4dCAqY3R4ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCXN0cnVjdCBleHlub3NfZHJtX2lwcCAqaXBw ID0gJmN0eC0+aXBwOworCisJZXh5bm9zX2RybV9pcHBfdW5yZWdpc3Rlcihkcm1fZGV2LCBpcHAp OworCWRybV9pb21tdV9kZXRhY2hfZGV2aWNlKGRybV9kZXYsIGRldik7CiB9CiAKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBnc2NfY29tcG9uZW50X29wcyA9IHsKKwkuYmluZAk9 IGdzY19iaW5kLAorCS51bmJpbmQgPSBnc2NfdW5iaW5kLAorfTsKKworc3RhdGljIGNvbnN0IHVu c2lnbmVkIGludCBnc2NfZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfWFJHQjg4ODgsIERSTV9G T1JNQVRfUkdCNTY1LCBEUk1fRk9STUFUX0JHUlg4ODg4LAorCURSTV9GT1JNQVRfTlYxMiwgRFJN X0ZPUk1BVF9OVjE2LCBEUk1fRk9STUFUX05WMjEsIERSTV9GT1JNQVRfTlY2MSwKKwlEUk1fRk9S TUFUX1VZVlksIERSTV9GT1JNQVRfVllVWSwgRFJNX0ZPUk1BVF9ZVVlWLCBEUk1fRk9STUFUX1lW WVUsCisJRFJNX0ZPUk1BVF9ZVVY0MjAsIERSTV9GT1JNQVRfWVZVNDIwLCBEUk1fRk9STUFUX1lV VjQyMiwKK307CisKIHN0YXRpYyBpbnQgZ3NjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZ3Nj X2RyaXZlcmRhdGEgKmRyaXZlcl9kYXRhOworCXN0cnVjdCBleHlub3NfZHJtX2lwcF9mb3JtYXRz ICpmb3JtYXRzOwogCXN0cnVjdCBnc2NfY29udGV4dCAqY3R4OwogCXN0cnVjdCByZXNvdXJjZSAq cmVzOwotCXN0cnVjdCBleHlub3NfZHJtX2lwcGRydiAqaXBwZHJ2OwotCWludCByZXQ7CisJaW50 IHJldCwgaTsKIAogCWN0eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY3R4KSwgR0ZQX0tF Uk5FTCk7CiAJaWYgKCFjdHgpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKGRldi0+b2Zfbm9k ZSkgewotCQljdHgtPnN5c3JlZyA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUoZGV2 LT5vZl9ub2RlLAotCQkJCQkJCSJzYW1zdW5nLHN5c3JlZyIpOwotCQlpZiAoSVNfRVJSKGN0eC0+ c3lzcmVnKSkgewotCQkJZGV2X3dhcm4oZGV2LCAiZmFpbGVkIHRvIGdldCBzeXN0ZW0gcmVnaXN0 ZXIuXG4iKTsKLQkJCWN0eC0+c3lzcmVnID0gTlVMTDsKLQkJfQorCWZvcm1hdHMgPSBkZXZtX2t6 YWxsb2MoZGV2LCBzaXplb2YoKmZvcm1hdHMpICoKKwkJCSAgICAgICAoQVJSQVlfU0laRShnc2Nf Zm9ybWF0cykgKyAxKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmb3JtYXRzKQorCQlyZXR1cm4gLUVO T01FTTsKKworCisJZHJpdmVyX2RhdGEgPSAoc3RydWN0IGdzY19kcml2ZXJkYXRhICopb2ZfZGV2 aWNlX2dldF9tYXRjaF9kYXRhKGRldik7CisJY3R4LT5kZXYgPSBkZXY7CisJY3R4LT5udW1fY2xv Y2tzID0gZHJpdmVyX2RhdGEtPm51bV9jbG9ja3M7CisJY3R4LT5jbGtfbmFtZXMgPSBkcml2ZXJf ZGF0YS0+Y2xrX25hbWVzOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZ3NjX2Zvcm1h dHMpOyBpKyspIHsKKwkJZm9ybWF0c1tpXS5mb3VyY2MgPSBnc2NfZm9ybWF0c1tpXTsKKwkJZm9y bWF0c1tpXS50eXBlID0gRFJNX0VYWU5PU19JUFBfRk9STUFUX1NPVVJDRSB8CisJCQkJICBEUk1f RVhZTk9TX0lQUF9GT1JNQVRfREVTVElOQVRJT047CisJCWZvcm1hdHNbaV0ubGltaXRzID0gZHJp dmVyX2RhdGEtPmxpbWl0czsKIAl9CisJY3R4LT5mb3JtYXRzID0gZm9ybWF0czsKIAogCS8qIGNs b2NrIGNvbnRyb2wgKi8KLQljdHgtPmdzY19jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZ3NjbCIp OwotCWlmIChJU19FUlIoY3R4LT5nc2NfY2xrKSkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0 byBnZXQgZ3NjIGNsb2NrLlxuIik7Ci0JCXJldHVybiBQVFJfRVJSKGN0eC0+Z3NjX2Nsayk7CisJ Zm9yIChpID0gMDsgaSA8IGN0eC0+bnVtX2Nsb2NrczsgaSsrKSB7CisJCWN0eC0+Y2xvY2tzW2ld ID0gZGV2bV9jbGtfZ2V0KGRldiwgY3R4LT5jbGtfbmFtZXNbaV0pOworCQlpZiAoSVNfRVJSKGN0 eC0+Y2xvY2tzW2ldKSkgeworCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGNsb2NrOiAl c1xuIiwKKwkJCQljdHgtPmNsa19uYW1lc1tpXSk7CisJCQlyZXR1cm4gUFRSX0VSUihjdHgtPmNs b2Nrc1tpXSk7CisJCX0KIAl9CiAKIAkvKiByZXNvdXJjZSBtZW1vcnkgKi8KQEAgLTE2OTksOCAr MTI3OSw4IEBAIHN0YXRpYyBpbnQgZ3NjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCiAJfQogCiAJY3R4LT5pcnEgPSByZXMtPnN0YXJ0OwotCXJldCA9IGRldm1fcmVxdWVzdF90 aHJlYWRlZF9pcnEoZGV2LCBjdHgtPmlycSwgTlVMTCwgZ3NjX2lycV9oYW5kbGVyLAotCQlJUlFG X09ORVNIT1QsICJkcm1fZ3NjIiwgY3R4KTsKKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwg Y3R4LT5pcnEsIGdzY19pcnFfaGFuZGxlciwgMCwKKwkJCSAgICAgICBkZXZfbmFtZShkZXYpLCBj dHgpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3Qg aXJxLlxuIik7CiAJCXJldHVybiByZXQ7CkBAIC0xNzA5LDM4ICsxMjg5LDIyIEBAIHN0YXRpYyBp bnQgZ3NjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJLyogY29udGV4dCBp bml0YWlsaXphdGlvbiAqLwogCWN0eC0+aWQgPSBwZGV2LT5pZDsKIAotCWlwcGRydiA9ICZjdHgt PmlwcGRydjsKLQlpcHBkcnYtPmRldiA9IGRldjsKLQlpcHBkcnYtPm9wc1tFWFlOT1NfRFJNX09Q U19TUkNdID0gJmdzY19zcmNfb3BzOwotCWlwcGRydi0+b3BzW0VYWU5PU19EUk1fT1BTX0RTVF0g PSAmZ3NjX2RzdF9vcHM7Ci0JaXBwZHJ2LT5jaGVja19wcm9wZXJ0eSA9IGdzY19pcHBkcnZfY2hl Y2tfcHJvcGVydHk7Ci0JaXBwZHJ2LT5yZXNldCA9IGdzY19pcHBkcnZfcmVzZXQ7Ci0JaXBwZHJ2 LT5zdGFydCA9IGdzY19pcHBkcnZfc3RhcnQ7Ci0JaXBwZHJ2LT5zdG9wID0gZ3NjX2lwcGRydl9z dG9wOwotCXJldCA9IGdzY19pbml0X3Byb3BfbGlzdChpcHBkcnYpOwotCWlmIChyZXQgPCAwKSB7 Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQgcHJvcGVydHkgbGlzdC5cbiIpOwotCQly ZXR1cm4gcmV0OwotCX0KLQotCURSTV9ERUJVR19LTVMoImlkWyVkXWlwcGRydlslcEtdXG4iLCBj dHgtPmlkLCBpcHBkcnYpOwotCi0JbXV0ZXhfaW5pdCgmY3R4LT5sb2NrKTsKIAlwbGF0Zm9ybV9z ZXRfZHJ2ZGF0YShwZGV2LCBjdHgpOwogCisJcG1fcnVudGltZV91c2VfYXV0b3N1c3BlbmQoZGV2 KTsKKwlwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheShkZXYsIEdTQ19BVVRPU1VTUEVO RF9ERUxBWSk7CiAJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKIAotCXJldCA9IGV4eW5vc19kcm1f aXBwZHJ2X3JlZ2lzdGVyKGlwcGRydik7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihkZXYs ICJmYWlsZWQgdG8gcmVnaXN0ZXIgZHJtIGdzYyBkZXZpY2UuXG4iKTsKLQkJZ290byBlcnJfaXBw ZHJ2X3JlZ2lzdGVyOwotCX0KKwlyZXQgPSBjb21wb25lbnRfYWRkKGRldiwgJmdzY19jb21wb25l bnRfb3BzKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9wbV9kaXM7CiAKIAlkZXZfaW5mbyhkZXYs ICJkcm0gZ3NjIHJlZ2lzdGVyZWQgc3VjY2Vzc2Z1bGx5LlxuIik7CiAKIAlyZXR1cm4gMDsKIAot ZXJyX2lwcGRydl9yZWdpc3RlcjoKK2Vycl9wbV9kaXM6CisJcG1fcnVudGltZV9kb250X3VzZV9h dXRvc3VzcGVuZChkZXYpOwogCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOwogCXJldHVybiByZXQ7 CiB9CkBAIC0xNzQ4LDEzICsxMzEyLDggQEAgc3RhdGljIGludCBnc2NfcHJvYmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKIHN0YXRpYyBpbnQgZ3NjX3JlbW92ZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Ci0J c3RydWN0IGdzY19jb250ZXh0ICpjdHggPSBnZXRfZ3NjX2NvbnRleHQoZGV2KTsKLQlzdHJ1Y3Qg ZXh5bm9zX2RybV9pcHBkcnYgKmlwcGRydiA9ICZjdHgtPmlwcGRydjsKLQotCWV4eW5vc19kcm1f aXBwZHJ2X3VucmVnaXN0ZXIoaXBwZHJ2KTsKLQltdXRleF9kZXN0cm95KCZjdHgtPmxvY2spOwog Ci0JcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKGRldik7CisJcG1fcnVudGltZV9kb250X3VzZV9h dXRvc3VzcGVuZChkZXYpOwogCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOwogCiAJcmV0dXJuIDA7 CkBAIC0xNzYzLDE5ICsxMzIyLDMyIEBAIHN0YXRpYyBpbnQgZ3NjX3JlbW92ZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQogc3RhdGljIGludCBfX21heWJlX3VudXNlZCBnc2NfcnVudGlt ZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZ3NjX2NvbnRleHQgKmN0 eCA9IGdldF9nc2NfY29udGV4dChkZXYpOworCWludCBpOwogCiAJRFJNX0RFQlVHX0tNUygiaWRb JWRdXG4iLCBjdHgtPmlkKTsKIAotCXJldHVybiAgZ3NjX2Nsa19jdHJsKGN0eCwgZmFsc2UpOwor CWZvciAoaSA9IGN0eC0+bnVtX2Nsb2NrcyAtIDE7IGkgPj0gMDsgaS0tKQorCQljbGtfZGlzYWJs ZV91bnByZXBhcmUoY3R4LT5jbG9ja3NbaV0pOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBp bnQgX19tYXliZV91bnVzZWQgZ3NjX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikK IHsKIAlzdHJ1Y3QgZ3NjX2NvbnRleHQgKmN0eCA9IGdldF9nc2NfY29udGV4dChkZXYpOworCWlu dCBpOwogCiAJRFJNX0RFQlVHX0tNUygiaWRbJWRdXG4iLCBjdHgtPmlkKTsKIAotCXJldHVybiAg Z3NjX2Nsa19jdHJsKGN0eCwgdHJ1ZSk7CisJZm9yIChpID0gMDsgaSA8IGN0eC0+bnVtX2Nsb2Nr czsgaSsrKSB7CisJCWludCByZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY3R4LT5jbG9ja3NbaV0p OworCQlpZiAocmV0KSB7CisJCQl3aGlsZSAoLS1pID4gMCkKKwkJCQljbGtfZGlzYWJsZV91bnBy ZXBhcmUoY3R4LT5jbG9ja3NbaV0pOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlyZXR1cm4g MDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGdzY19wbV9vcHMgPSB7CkBA IC0xNzg0LDkgKzEzNTYsNjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGdzY19w bV9vcHMgPSB7CiAJU0VUX1JVTlRJTUVfUE1fT1BTKGdzY19ydW50aW1lX3N1c3BlbmQsIGdzY19y dW50aW1lX3Jlc3VtZSwgTlVMTCkKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2V4eW5v c19pcHBfbGltaXQgZ3NjXzUyNTBfbGltaXRzW10gPSB7CisJeyBJUFBfU0laRV9MSU1JVChCVUZG RVIsIC5oID0gezMyLCA0ODAwLCAxNn0sIC52ID0gezE2LCAzMzQ0LCAxNn0pIH0sCisJeyBJUFBf U0laRV9MSU1JVChBUkVBLCAuaCA9IHsxNiwgNDgwMCwgMn0sIC52ID0gezgsIDMzNDQsIDJ9KSB9 LAorCXsgSVBQX1NJWkVfTElNSVQoUk9UQVRFRCwgLmggPSB7MzIsIDIwNDh9LCAudiA9IHsxNiwg MjA0OH0pIH0sCisJeyBJUFBfU0NBTEVfTElNSVQoLmggPSB7ICgxIDw8IDE2KSAvIDE2LCAoMSA8 PCAxNikgKiA4fSwKKwkJCSAgLnYgPSB7ICgxIDw8IDE2KSAvIDE2LCAoMSA8PCAxNikgKiA4fSkg fSwKKwl7IH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2V4eW5vc19pcHBfbGltaXQg Z3NjXzU0MjBfbGltaXRzW10gPSB7CisJeyBJUFBfU0laRV9MSU1JVChCVUZGRVIsIC5oID0gezMy LCA0ODAwLCAxNn0sIC52ID0gezE2LCAzMzQ0LCAxNn0pIH0sCisJeyBJUFBfU0laRV9MSU1JVChB UkVBLCAuaCA9IHsxNiwgNDgwMCwgMn0sIC52ID0gezgsIDMzNDQsIDJ9KSB9LAorCXsgSVBQX1NJ WkVfTElNSVQoUk9UQVRFRCwgLmggPSB7MTYsIDIwMTZ9LCAudiA9IHs4LCAyMDE2fSkgfSwKKwl7 IElQUF9TQ0FMRV9MSU1JVCguaCA9IHsgKDEgPDwgMTYpIC8gMTYsICgxIDw8IDE2KSAqIDh9LAor CQkJICAudiA9IHsgKDEgPDwgMTYpIC8gMTYsICgxIDw8IDE2KSAqIDh9KSB9LAorCXsgfQorfTsK Kworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZXh5bm9zX2lwcF9saW1pdCBnc2NfNTQzM19saW1p dHNbXSA9IHsKKwl7IElQUF9TSVpFX0xJTUlUKEJVRkZFUiwgLmggPSB7MzIsIDgxOTEsIDE2fSwg LnYgPSB7MTYsIDgxOTEsIDE2fSkgfSwKKwl7IElQUF9TSVpFX0xJTUlUKEFSRUEsIC5oID0gezE2 LCA0ODAwLCAyfSwgLnYgPSB7OCwgMzM0NCwgMn0pIH0sCisJeyBJUFBfU0laRV9MSU1JVChST1RB VEVELCAuaCA9IHsxNiwgMjA0N30sIC52ID0gezgsIDIwNDd9KSB9LAorCXsgSVBQX1NDQUxFX0xJ TUlUKC5oID0geyAoMSA8PCAxNikgLyAxNiwgKDEgPDwgMTYpICogOH0sCisJCQkgIC52ID0geyAo MSA8PCAxNikgLyAxNiwgKDEgPDwgMTYpICogOH0pIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3Ry dWN0IGdzY19kcml2ZXJkYXRhIGdzY19leHlub3M1MjUwX2RydmRhdGEgPSB7CisJLmNsa19uYW1l cyA9IHsiZ3NjbCJ9LAorCS5udW1fY2xvY2tzID0gMSwKKwkubGltaXRzID0gZ3NjXzUyNTBfbGlt aXRzLAorfTsKKworc3RhdGljIHN0cnVjdCBnc2NfZHJpdmVyZGF0YSBnc2NfZXh5bm9zNTQyMF9k cnZkYXRhID0geworCS5jbGtfbmFtZXMgPSB7ImdzY2wifSwKKwkubnVtX2Nsb2NrcyA9IDEsCisJ LmxpbWl0cyA9IGdzY181NDIwX2xpbWl0cywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3NjX2RyaXZl cmRhdGEgZ3NjX2V4eW5vczU0MzNfZHJ2ZGF0YSA9IHsKKwkuY2xrX25hbWVzID0geyJwY2xrIiwg ImFjbGsiLCAiYWNsa194aXUiLCAiYWNsa19nc2NsYmVuZCJ9LAorCS5udW1fY2xvY2tzID0gNCwK KwkubGltaXRzID0gZ3NjXzU0MzNfbGltaXRzLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgZXh5bm9zX2RybV9nc2Nfb2ZfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxl ID0gInNhbXN1bmcsZXh5bm9zNS1nc2MiIH0sCi0JeyB9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAi c2Ftc3VuZyxleHlub3M1LWdzYyIsCisJCS5kYXRhID0gJmdzY19leHlub3M1MjUwX2RydmRhdGEs CisJfSwgeworCQkuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNTAtZ3NjIiwKKwkJLmRh dGEgPSAmZ3NjX2V4eW5vczUyNTBfZHJ2ZGF0YSwKKwl9LCB7CisJCS5jb21wYXRpYmxlID0gInNh bXN1bmcsZXh5bm9zNTQyMC1nc2MiLAorCQkuZGF0YSA9ICZnc2NfZXh5bm9zNTQyMF9kcnZkYXRh LAorCX0sIHsKKwkJLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1NDMzLWdzYyIsCisJCS5k YXRhID0gJmdzY19leHlub3M1NDMzX2RydmRhdGEsCisJfSwgeworCX0sCiB9OwogTU9EVUxFX0RF VklDRV9UQUJMRShvZiwgZXh5bm9zX2RybV9nc2Nfb2ZfbWF0Y2gpOwogCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZ3NjLmggYi9kcml2ZXJzL2dwdS9kcm0v ZXh5bm9zL2V4eW5vc19kcm1fZ3NjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5 ZWMxYzVlZmNmMi4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5 bm9zX2RybV9nc2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qCi0gKiBDb3B5 cmlnaHQgKGMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KLSAqCi0gKiBBdXRo b3JzOgotICoJRXVuY2h1bCBLaW0gPGNodWxzcHJvLmtpbUBzYW1zdW5nLmNvbT4KLSAqCUppbnlv dW5nIEplb24gPGp5MC5qZW9uQHNhbXN1bmcuY29tPgotICoJU2FuZ21pbiBMZWUgPGxzbWluLmxl ZUBzYW1zdW5nLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVy bXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUg IExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICov Ci0KLSNpZm5kZWYgX0VYWU5PU19EUk1fR1NDX0hfCi0jZGVmaW5lIF9FWFlOT1NfRFJNX0dTQ19I XwotCi0vKgotICogVE9ETwotICogRklNRCBvdXRwdXQgaW50ZXJmYWNlIG5vdGlmaWVyIGNhbGxi YWNrLgotICogTWl4ZXIgb3V0cHV0IGludGVyZmFjZSBub3RpZmllciBjYWxsYmFjay4KLSAqLwot Ci0jZW5kaWYgLyogX0VYWU5PU19EUk1fR1NDX0hfICovCi0tIAoyLjE0LjIKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=