From owner-freebsd-net@freebsd.org Wed Apr 15 11:56:02 2020 Return-Path: Delivered-To: freebsd-net@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id C5E502B39DD for ; Wed, 15 Apr 2020 11:56:02 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 492LR648gPz3DNg for ; Wed, 15 Apr 2020 11:56:02 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: from reviews.nyi.freebsd.org (reviews.nyi.freebsd.org [IPv6:2610:1c1:1:607c::16:b]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 805811E852 for ; Wed, 15 Apr 2020 11:56:02 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: by reviews.nyi.freebsd.org (Postfix, from userid 1346) id 7915F3398AE; Wed, 15 Apr 2020 11:56:02 +0000 (UTC) Date: Wed, 15 Apr 2020 11:56:02 +0000 To: freebsd-net@freebsd.org From: "whu (Wei Hu)" Reply-to: "whu (Wei Hu)" Subject: [Differential] D24061: Hyper-V socket implementation for FreeBSD guest Message-ID: <79d16d788f9a405bf42820916438b2a4@localhost.localdomain> X-Priority: 3 X-Phabricator-Sent-This-Message: Yes X-Mail-Transport-Agent: MetaMTA X-Auto-Response-Suppress: All X-Phabricator-Mail-Tags: , , , X-Herald-Rules: <28>, <76> X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-Cc: X-Phabricator-Cc: Precedence: bulk Thread-Topic: PHID-DREV-jw7sxemgfjxsdvkov4cn X-Phabricator-Mail-ID: 1908001 X-Phabricator-Send-Attempt: wxgbjgx2f2e3naiw In-Reply-To: References: Thread-Index: MzZiZTcyYjBkYTFiNDZhYjY1NmQ1MTYwZmJiIF6W9lI= X-Phabricator-Stamps: actor(@whu) application(Differential) author(@whu) herald(H28) herald(H76) monogram(D24061) object-type(DREV) phid(PHID-DREV-jw7sxemgfjxsdvkov4cn) reviewer(@decui_microsoft.com) reviewer(@freebsd-net-list) revision-repository(rS) revision-status(needs-review) subscriber(@greg_unrelenting.technology) subscriber(@imp) via(web) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_79d16d788f9a405bf42820916438b2a4" X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.29 List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Apr 2020 11:56:02 -0000 --b1_79d16d788f9a405bf42820916438b2a4 Content-Type: text/plain; charset = "utf-8" Content-Transfer-Encoding: base64 d2h1IHVwZGF0ZWQgdGhpcyByZXZpc2lvbiB0byBEaWZmIDcwNTk1Lgp3aHUgZWRpdGVkIHRoZSBz dW1tYXJ5IG9mIHRoaXMgcmV2aXNpb24uCndodSBhZGRlZCByZXZpZXdlcnM6IGRlY3VpX21pY3Jv c29mdC5jb20sIGZyZWVic2QtbmV0LWxpc3QuCndodSBhZGRlZCBhIGNvbW1lbnQuCgoKICBPdXQg Zm9yIGJyb2FkZXIgcmV2aWV3CgpSRVBPU0lUT1JZCiAgclMgRnJlZUJTRCBzcmMgcmVwb3NpdG9y eQoKQ0hBTkdFUyBTSU5DRSBMQVNUIFVQREFURQogIGh0dHBzOi8vcmV2aWV3cy5mcmVlYnNkLm9y Zy9EMjQwNjE/dnM9Njk0NzgmaWQ9NzA1OTUKCkNIQU5HRVMgU0lOQ0UgTEFTVCBBQ1RJT04KICBo dHRwczovL3Jldmlld3MuZnJlZWJzZC5vcmcvRDI0MDYxL25ldy8KClJFVklTSU9OIERFVEFJTAog IGh0dHBzOi8vcmV2aWV3cy5mcmVlYnNkLm9yZy9EMjQwNjEKCkFGRkVDVEVEIEZJTEVTCiAgc3lz L2NvbmYvZmlsZXMueDg2CiAgc3lzL2Rldi9oeXBlcnYvaHZzb2NrL2h2X3NvY2suYwogIHN5cy9k ZXYvaHlwZXJ2L2h2c29jay9odl9zb2NrLmgKICBzeXMvZGV2L2h5cGVydi9pbmNsdWRlL3ZtYnVz LmgKICBzeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1cy5jCiAgc3lzL2Rldi9oeXBlcnYvdm1idXMv dm1idXNfYnIuYwogIHN5cy9kZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVzX2JydmFyLmgKICBzeXMvZGV2 L2h5cGVydi92bWJ1cy92bWJ1c19jaGFuLmMKICBzeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1c19j aGFudmFyLmgKICBzeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1c19yZWcuaAogIHN5cy9tb2R1bGVz L2h5cGVydi9NYWtlZmlsZQogIHN5cy9tb2R1bGVzL2h5cGVydi9odnNvY2svTWFrZWZpbGUKICBz eXMvc3lzL3NvY2tldC5oCgpFTUFJTCBQUkVGRVJFTkNFUwogIGh0dHBzOi8vcmV2aWV3cy5mcmVl YnNkLm9yZy9zZXR0aW5ncy9wYW5lbC9lbWFpbHByZWZlcmVuY2VzLwoKVG86IHdodSwgZGVjdWlf bWljcm9zb2Z0LmNvbSwgZnJlZWJzZC1uZXQtbGlzdApDYzogZ3JlZ191bnJlbGVudGluZy50ZWNo bm9sb2d5LCBpbXAK --b1_79d16d788f9a405bf42820916438b2a4 Content-Type: text/x-patch; charset=utf-8; name="D24061.70595.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D24061.70595.patch" ZGlmZiAtLWdpdCBhL3N5cy9zeXMvc29ja2V0LmggYi9zeXMvc3lzL3NvY2tldC5oCi0tLSBhL3N5 cy9zeXMvc29ja2V0LmgKKysrIGIvc3lzL3N5cy9zb2NrZXQuaApAQCAtMjY1LDcgKzI2NSw4IEBA CiAjZGVmaW5lCUFGX0lFRUU4MDIxMQkzNwkJLyogSUVFRSA4MDIuMTEgcHJvdG9jb2wgKi8KICNk ZWZpbmUJQUZfSU5FVF9TRFAJNDAJCS8qIE9GRUQgU29ja2V0IERpcmVjdCBQcm90b2NvbCBpcHY0 ICovCiAjZGVmaW5lCUFGX0lORVQ2X1NEUAk0MgkJLyogT0ZFRCBTb2NrZXQgRGlyZWN0IFByb3Rv Y29sIGlwdjYgKi8KLSNkZWZpbmUJQUZfTUFYCQk0MgorI2RlZmluZQlBRl9IWVBFUlYJNDMJCS8q IEh5cGVyViBzb2NrZXRzICovCisjZGVmaW5lCUFGX01BWAkJNDMKIC8qCiAgKiBXaGVuIGFsbG9j YXRpbmcgYSBuZXcgQUZfIGNvbnN0YW50LCBwbGVhc2Ugb25seSBhbGxvY2F0ZQogICogZXZlbiBu dW1iZXJlZCBjb25zdGFudHMgZm9yIEZyZWVCU0QgdW50aWwgMTM0IGFzIG9kZCBudW1iZXJlZCBB Rl8KQEAgLTI3Myw3ICsyNzQsNiBAQAogICovCiAjZGVmaW5lIEFGX1ZFTkRPUjAwIDM5CiAjZGVm aW5lIEFGX1ZFTkRPUjAxIDQxCi0jZGVmaW5lIEFGX1ZFTkRPUjAyIDQzCiAjZGVmaW5lIEFGX1ZF TkRPUjAzIDQ1CiAjZGVmaW5lIEFGX1ZFTkRPUjA0IDQ3CiAjZGVmaW5lIEFGX1ZFTkRPUjA1IDQ5 CmRpZmYgLS1naXQgYS9zeXMvbW9kdWxlcy9oeXBlcnYvaHZzb2NrL01ha2VmaWxlIGIvc3lzL21v ZHVsZXMvaHlwZXJ2L2h2c29jay9NYWtlZmlsZQotLS0gYS9zeXMvbW9kdWxlcy9oeXBlcnYvaHZz b2NrL01ha2VmaWxlCisrKyBiL3N5cy9tb2R1bGVzL2h5cGVydi9odnNvY2svTWFrZWZpbGUKQEAg LTAsMCArMSwxMyBAQAorIyAkRnJlZUJTRCQKKworLlBBVEg6ICAke1NSQ1RPUH0vc3lzL2Rldi9o eXBlcnYvaHZzb2NrCisKK0tNT0Q9CWh2X3NvY2sKK1NSQ1M9CWh2X3NvY2suYworU1JDUys9CWh2 X3NvY2suaAorCitDRkxBR1MrPSAtSSR7U1JDVE9QfS9zeXMvZGV2L2h5cGVydi9pbmNsdWRlCVwK KwkgLUkke1NSQ1RPUH0vc3lzL2Rldi9oeXBlcnYvdm1idXMJXAorCSAtSSR7U1JDVE9QfS9zeXMv ZGV2L2h5cGVydi9odnNvY2sKKworLmluY2x1ZGUgPGJzZC5rbW9kLm1rPgpkaWZmIC0tZ2l0IGEv c3lzL21vZHVsZXMvaHlwZXJ2L01ha2VmaWxlIGIvc3lzL21vZHVsZXMvaHlwZXJ2L01ha2VmaWxl Ci0tLSBhL3N5cy9tb2R1bGVzL2h5cGVydi9NYWtlZmlsZQorKysgYi9zeXMvbW9kdWxlcy9oeXBl cnYvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjICRGcmVlQlNEJAogCi1TVUJESVIgPSB2bWJ1 cyBuZXR2c2Mgc3RvcnZzYyB1dGlsaXRpZXMKK1NVQkRJUiA9IHZtYnVzIG5ldHZzYyBzdG9ydnNj IHV0aWxpdGllcyBodnNvY2sKIAogLmluY2x1ZGUgPGJzZC5zdWJkaXIubWs+CmRpZmYgLS1naXQg YS9zeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1c19yZWcuaCBiL3N5cy9kZXYvaHlwZXJ2L3ZtYnVz L3ZtYnVzX3JlZy5oCi0tLSBhL3N5cy9kZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVzX3JlZy5oCisrKyBi L3N5cy9kZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVzX3JlZy5oCkBAIC0xMjcsNyArMTI3LDU0IEBACiAJ ICovCiAJdm9sYXRpbGUgdWludDMyX3QJYnJfaW1hc2s7CiAKLQl1aW50OF90CQkJYnJfcnN2ZFs0 MDg0XTsKKwkvKgorCSAqIFdTMjAxMi9XaW44IGFuZCBsYXRlciB2ZXJzaW9ucyBvZiBIeXBlci1W IGltcGxlbWVudCBpbnRlcnJ1cHQKKwkgKiBkcml2ZW4gZmxvdyBtYW5hZ2VtZW50LiBUaGUgZmVh dHVyZSBiaXQgZmVhdF9wZW5kaW5nX3NuZF9zegorCSAqIGlzIHNldCBieSB0aGUgaG9zdCBvbiB0 aGUgaG9zdC0+Z3Vlc3QgYnVmZmVyIHJpbmcsIGFuZCBieSB0aGUKKwkgKiBndWVzdCBvbiB0aGUg Z3Vlc3QtPmhvc3QgYnVmZmVyIHJpbmcuCisJICoKKwkgKiBUaGUgbWVhbmluZyBvZiB0aGUgZmVh dHVyZSBiaXQgaXMgYSBiaXQgY29tcGxleCBpbiB0aGF0IGl0IGhhcworCSAqIHNlbWFudGljcyB0 aGF0IGFwcGx5IHRvIGJvdGggYnVmZmVyIHJpbmdzLiAgSWYgdGhlIGd1ZXN0IHNldHMKKwkgKiB0 aGUgZmVhdHVyZSBiaXQgaW4gdGhlIGd1ZXN0LT5ob3N0IGJ1ZmZlciByaW5nLCB0aGUgZ3Vlc3Qg aXMKKwkgKiB0ZWxsaW5nIHRoZSBob3N0IHRoYXQ6CisJICogMSkgSXQgd2lsbCBzZXQgdGhlIGJy X3BlbmRpbmdfc25kX3N6IGZpZWxkIGluIHRoZSBndWVzdC0+aG9zdCBidWZmZXIKKwkgKiAgICBy aW5nIHdoZW4gaXQgaXMgd2FpdGluZyBmb3Igc3BhY2UgdG8gYmVjb21lIGF2YWlsYWJsZSwgYW5k CisJICogMikgSXQgd2lsbCByZWFkIHRoZSBwZW5kaW5nX3NlbmRfc3ogZmllbGQgaW4gdGhlIGhv c3QtPmd1ZXN0CisJICogICAgcmluZyBidWZmZXIgYW5kIGludGVycnVwdCB0aGUgaG9zdCB3aGVu IGl0IGZyZWVzIGVub3VnaCBzcGFjZQorCSAqCisJICogU2ltaWxhcmx5LCBpZiB0aGUgaG9zdCBz ZXRzIHRoZSBmZWF0dXJlIGJpdCBpbiB0aGUgaG9zdC0+Z3Vlc3QKKwkgKiByaW5nIGJ1ZmZlciwg dGhlIGhvc3QgaXMgdGVsbGluZyB0aGUgZ3Vlc3QgdGhhdDoKKwkgKiAxKSBJdCB3aWxsIHNldCB0 aGUgcGVuZGluZ19zZW5kX3N6IGZpZWxkIGluIHRoZSBob3N0LT5ndWVzdCByaW5nCisJICogICAg YnVmZmVyIHdoZW4gaXQgaXMgd2FpdGluZyBmb3Igc3BhY2UgdG8gYmVjb21lIGF2YWlsYWJsZSwg YW5kCisJICogMikgSXQgd2lsbCByZWFkIHRoZSBwZW5kaW5nX3NlbmRfc3ogZmllbGQgaW4gdGhl IGd1ZXN0LT5ob3N0CisJICogICAgcmluZyBidWZmZXIgYW5kIGludGVycnVwdCB0aGUgZ3Vlc3Qg d2hlbiBpdCBmcmVlcyBlbm91Z2ggc3BhY2UKKwkgKgorCSAqIElmIGVpdGhlciB0aGUgZ3Vlc3Qg b3IgaG9zdCBkb2VzIG5vdCBzZXQgdGhlIGZlYXR1cmUgYml0IHRoYXQgaXQKKwkgKiBvd25zLCB0 aGF0IGd1ZXN0IG9yIGhvc3QgbXVzdCBkbyBwb2xsaW5nIGlmIGl0IGVuY291bnRlcnMgYSBmdWxs CisJICogcmluZyBidWZmZXIsIGFuZCBub3Qgc2lnbmFsIHRoZSBvdGhlciBlbmQgd2l0aCBhbiBp bnRlcnJ1cHQuCisJICovCisJdm9sYXRpbGUgdWludDMyX3QJYnJfcGVuZGluZ19zbmRfc3o7CisJ dWludDMyX3QJCWJyX3JzdmQxWzEyXTsKKwl1bmlvbgl7CisJCXN0cnVjdCB7CisJCQl1aW50MzJf dCBmZWF0X3BlbmRpbmdfc25kX3N6OjE7CisJCX07CisJCXVpbnQzMl90IHZhbHVlOworCX0gYnJf ZmVhdHVyZV9iaXRzOworCisJLyogUGFkZGluZyB0byBQQUdFX1NJWkUgKi8KKwl1aW50OF90CQkJ YnJfcnN2ZDJbNDAyMF07CisKKwkvKgorCSAqIFRvdGFsIGd1ZXN0IHRvIGhvc3QgaW50ZXJydXB0 IGNvdW50CisJICogLSBGb3IgcnggcmluZywgdGhpcyBjb3VudHMgdGhlIGd1ZXN0IHNpZ25hbGlu ZyBob3N0IHdoZW4gdGhpcyByeAorCSAqIHJpbmcgY2hhbmdpbmcgZnJvbSBmdWxsIHRvIG5vdCBm dWxsLgorCSAqCisJICogLSBGb3IgdHggcmluZywgdGhpcyBjb3VudHMgdGhlIGd1ZXN0IHNpZ25h bGluZyBob3N0IHdoZW4gdGhpcyB0eAorCSAqIHJpbmcgY2hhbmdpbmcgZnJvbSBlbXB0eSB0byBu b24gZW1wdHkuCisJICovCisJdWludDY0X3QJCWJyX2cyaF9pbnRyX2NudDsKKwogCXVpbnQ4X3QJ CQlicl9kYXRhW107CiB9IF9fcGFja2VkOwogQ1RBU1NFUlQoc2l6ZW9mKHN0cnVjdCB2bWJ1c19i dWZyaW5nKSA9PSBQQUdFX1NJWkUpOwpAQCAtMTk2LDcgKzI0MywxNCBAQAogI2RlZmluZSBWTUJV U19DSEFOTVNHX1RZUEVfQ09OTkVDVAkJMTQJLyogUkVRICovCiAjZGVmaW5lIFZNQlVTX0NIQU5N U0dfVFlQRV9DT05ORUNUX1JFU1AJCTE1CS8qIFJFU1AgKi8KICNkZWZpbmUgVk1CVVNfQ0hBTk1T R19UWVBFX0RJU0NPTk5FQ1QJCTE2CS8qIFJFUSAqLwotI2RlZmluZSBWTUJVU19DSEFOTVNHX1RZ UEVfTUFYCQkJMjIKKyNkZWZpbmUgVk1CVVNfQ0hBTk1TR19UWVBFXzE3CQkJMTcKKyNkZWZpbmUg Vk1CVVNfQ0hBTk1TR19UWVBFXzE4CQkJMTgKKyNkZWZpbmUgVk1CVVNfQ0hBTk1TR19UWVBFXzE5 CQkJMTkKKyNkZWZpbmUgVk1CVVNfQ0hBTk1TR19UWVBFXzIwCQkJMjAKKyNkZWZpbmUgVk1CVVNf Q0hBTk1TR19UWVBFX1RMX0NPTk4JCTIxCS8qIFJFUSAqLworI2RlZmluZSBWTUJVU19DSEFOTVNH X1RZUEVfMjIJCQkyMgorI2RlZmluZSBWTUJVU19DSEFOTVNHX1RZUEVfVExfUkVTVUxUCQkyMwkv KiBSRVNQICovCisjZGVmaW5lIFZNQlVTX0NIQU5NU0dfVFlQRV9NQVgJCQkyNAogCiBzdHJ1Y3Qg dm1idXNfY2hhbm1zZ19oZHIgewogCXVpbnQzMl90CWNobV90eXBlOwkvKiBWTUJVU19DSEFOTVNH X1RZUEVfICovCkBAIC0yMjksNiArMjgzLDE1IEBACiAJc3RydWN0IHZtYnVzX2NoYW5tc2dfaGRy IGNobV9oZHI7CiB9IF9fcGFja2VkOwogCisvKiBWTUJVU19DSEFOTVNHX1RZUEVfVExfQ09OTiAq LworLyogSHlwZXItViBzb2NrZXQgZ3Vlc3QgY29ubmVjdCByZXF1ZXN0ICovCitzdHJ1Y3Qgdm1i dXNfY2hhbm1zZ190bF9jb25uZWN0IHsKKwlzdHJ1Y3Qgdm1idXNfY2hhbm1zZ19oZHIgY2htX2hk cjsKKwlzdHJ1Y3QgaHlwZXJ2X2d1aWQgZ3Vlc3RfZW5kcG9pbnRfaWQ7CisJc3RydWN0IGh5cGVy dl9ndWlkIGhvc3Rfc2VydmljZV9pZDsKK30gX19wYWNrZWQ7CisKKwogLyogVk1CVVNfQ0hBTk1T R19UWVBFX0NIT1BFTiAqLwogc3RydWN0IHZtYnVzX2NoYW5tc2dfY2hvcGVuIHsKIAlzdHJ1Y3Qg dm1idXNfY2hhbm1zZ19oZHIgY2htX2hkcjsKQEAgLTMxMCw2ICszNzMsMTIgQEAKIAl1aW50MzJf dAljaG1fY2hhbmlkOwogfSBfX3BhY2tlZDsKIAorLyogU2l6ZSBvZiB0aGUgdXNlciBkZWZpbmVk IGRhdGEgYnVmZmVyIGZvciBub24tcGlwZSBvZmZlcnMgKi8KKyNkZWZpbmUgVk1CVVNfQ0hBTk1T R19DSE9GRkVSX1VEQVRBX1NJWkUJCTEyMAorCisvKiBTaXplIG9mIHRoZSB1c2VyIGRlZmluZWQg ZGF0YSBidWZmZXIgZm9yIHBpcGUgb2ZmZXJzLiAqLworI2RlZmluZSBWTUJVU19DSEFOTVNHX0NI T0ZGRVJfVURBVEFfUElQRV9TSVpFCQkxMTYKKwogLyogVk1CVVNfQ0hBTk1TR19UWVBFX0NIT0ZG RVIgKi8KIHN0cnVjdCB2bWJ1c19jaGFubXNnX2Nob2ZmZXIgewogCXN0cnVjdCB2bWJ1c19jaGFu bXNnX2hkciBjaG1faGRyOwpAQCAtMzIwLDcgKzM4OSwyNiBAQAogCXVpbnQzMl90CWNobV9zdnJj dHhfc3o7CiAJdWludDE2X3QJY2htX2NoZmxhZ3M7CiAJdWludDE2X3QJY2htX21taW9fc3o7CS8q IHVuaXQ6IE1CICovCi0JdWludDhfdAkJY2htX3VkYXRhWzEyMF07CisKKwl1bmlvbiB7CisJCS8q IE5vbi1waXBlcyAqLworCQlzdHJ1Y3QgeworCQkJdWludDhfdAl1c2VyX2RlZltWTUJVU19DSEFO TVNHX0NIT0ZGRVJfVURBVEFfU0laRV07CisJCX0gc3RkOworCQkvKgorCQkgKiBQaXBlczoKKwkJ ICogRm9yIGludGVncmF0ZWQgcGlwZSBwcm90b2NvbCwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgb24K KwkJICogdG9wIG9mIHN0YW5kYXJkIHVzZXItZGVmaW5lZCBkYXRhLiBQaXBlIGNsaWVudHMgaGF2 ZQorCQkgKiBWTUJVU19DSEFOTVNHX0NIT0ZGRVJfVURBVEFfUElQRV9TSVpFIGJ5dGVzIGxlZnQg Zm9yCisJCSAqIHRoZWlyIG93biB1c2VyLgorCQkgKi8KKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90 IHBpcGVfbW9kZTsKKwkJCXVpbnQ4X3QKKwkJCSAgICB1c2VyX2RlZltWTUJVU19DSEFOTVNHX0NI T0ZGRVJfVURBVEFfUElQRV9TSVpFXTsKKwkJfSBwaXBlOworCX0gY2htX3VkYXRhOworCiAJdWlu dDE2X3QJY2htX3N1YmlkeDsKIAl1aW50MTZfdAljaG1fcnN2ZDsKIAl1aW50MzJfdAljaG1fY2hh bmlkOwpAQCAtMzMxLDYgKzQxOSw5IEBACiB9IF9fcGFja2VkOwogQ1RBU1NFUlQoc2l6ZW9mKHN0 cnVjdCB2bWJ1c19jaGFubXNnX2Nob2ZmZXIpIDw9IFZNQlVTX01TR19EU0laRV9NQVgpOwogCisv KiBTZXJ2ZXIgRmxhZyAqLworI2RlZmluZSBWTUJVU19DSEFOX1RMTlBJX1BST1ZJREVSX09GRkVS CQkJMHgyMDAwCisKICNkZWZpbmUgVk1CVVNfQ0hPRkZFUl9GTEFHMV9IQVNNTkYJMHgwMQogCiAj ZW5kaWYJLyogIV9WTUJVU19SRUdfSF8gKi8KZGlmZiAtLWdpdCBhL3N5cy9kZXYvaHlwZXJ2L3Zt YnVzL3ZtYnVzX2NoYW52YXIuaCBiL3N5cy9kZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVzX2NoYW52YXIu aAotLS0gYS9zeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1c19jaGFudmFyLmgKKysrIGIvc3lzL2Rl di9oeXBlcnYvdm1idXMvdm1idXNfY2hhbnZhci5oCkBAIC0xNDksNiArMTQ5LDEyIEBACiAKIAlp bnQJCQkJY2hfcmVmczsKIAorCS8qCisJICogVGhlc2UgYXJlIGZvciBIeXBlclYgc29ja2V0IGNo YW5uZWwgb25seQorCSAqLworCWJvb2wJCQkJY2hfaXNfaHZzOworCXVpbnQ4X3QJCQkJY2hfaHZz X2Nvbm5fZnJvbV9ob3N0OworCiAJc3RydWN0IHN5c2N0bF9jdHhfbGlzdAkJY2hfc3lzY3RsX2N0 eDsKIH0gX19hbGlnbmVkKENBQ0hFX0xJTkVfU0laRSk7CiAKZGlmZiAtLWdpdCBhL3N5cy9kZXYv aHlwZXJ2L3ZtYnVzL3ZtYnVzX2NoYW4uYyBiL3N5cy9kZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVzX2No YW4uYwotLS0gYS9zeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1c19jaGFuLmMKKysrIGIvc3lzL2Rl di9oeXBlcnYvdm1idXMvdm1idXNfY2hhbi5jCkBAIC0xMjcsMTAgKzEyNywxMSBAQAogfTsKIAog LyoKLSAqIE5vdGlmeSBob3N0IHRoYXQgdGhlcmUgYXJlIGRhdGEgcGVuZGluZyBvbiBvdXIgVFgg YnVmcmluZy4KKyAqIE5vdGlmeSBob3N0IHRoYXQgdGhlcmUgYXJlIGRhdGEgcGVuZGluZyBvbiBv dXIgVFggYnVmcmluZyBvcgorICogd2UgaGF2ZSBwdXQgc29tZSBkYXRhIG9uIHRoZSBUWCBidWZy aW5nLgogICovCiBzdGF0aWMgX19pbmxpbmUgdm9pZAotdm1idXNfY2hhbl9zaWduYWxfdHgoY29u c3Qgc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4pCit2bWJ1c19jaGFuX3NpZ25hbChjb25zdCBz dHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbikKIHsKIAlhdG9taWNfc2V0X2xvbmcoY2hhbi0+Y2hf ZXZ0ZmxhZywgY2hhbi0+Y2hfZXZ0ZmxhZ19tYXNrKTsKIAlpZiAoY2hhbi0+Y2hfdHhmbGFncyAm IFZNQlVTX0NIQU5fVFhGX0hBU01ORikKQEAgLTEzOSw2ICsxNDAsMjIgQEAKIAkJaHlwZXJjYWxs X3NpZ25hbF9ldmVudChjaGFuLT5jaF9tb25wcm1fZG1hLmh2X3BhZGRyKTsKIH0KIAorc3RhdGlj IF9faW5saW5lIHZvaWQKK3ZtYnVzX2NoYW5fc2lnbmFsX3R4KHN0cnVjdCB2bWJ1c19jaGFubmVs ICpjaGFuKQoreworCWNoYW4tPmNoX3R4YnIudHhicl9pbnRyY250ICsrOworCisJdm1idXNfY2hh bl9zaWduYWwoY2hhbik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCit2bWJ1c19jaGFuX3Np Z25hbF9yeChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbikKK3sKKwljaGFuLT5jaF9yeGJyLnJ4 YnJfaW50cmNudCArKzsKKworCXZtYnVzX2NoYW5fc2lnbmFsKGNoYW4pOworfQorCiBzdGF0aWMg dm9pZAogdm1idXNfY2hhbl9pbnNfcHJpbGlzdChzdHJ1Y3Qgdm1idXNfc29mdGMgKnNjLCBzdHJ1 Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbikKIHsKQEAgLTEwMTIsNyArMTAyOSw2MCBAQAogCXRhc2tx dWV1ZV9kcmFpbihjaGFuLT5jaF90cSwgJmNoYW4tPmNoX3Rhc2spOwogfQogCit1aW50MzJfdAor dm1idXNfY2hhbl93cml0ZV9hdmFpbGFibGUoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4pCit7 CisJcmV0dXJuICh2bWJ1c190eGJyX2F2YWlsYWJsZSgmY2hhbi0+Y2hfdHhicikpOworfQorCiti b29sCit2bWJ1c19jaGFuX3dyaXRlX3NpZ25hbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbiwK KyAgICBpbnQzMl90IG1pbl9zaWduYWxfc2l6ZSkKK3sKKwlpZiAobWluX3NpZ25hbF9zaXplID49 IDAgJiYKKwkgICAgdm1idXNfY2hhbl93cml0ZV9hdmFpbGFibGUoY2hhbikgPiBtaW5fc2lnbmFs X3NpemUpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmICghdm1idXNfdHhicl9nZXRfaW1h c2soJmNoYW4tPmNoX3R4YnIpKSB7CisJCS8qIHR4YnIgaW1hc2sgaXMgbm90IHNldCwgc2lnbmFs IHRoZSByZWFkZXIgKi8KKwkJdm1idXNfY2hhbl9zaWduYWxfdHgoY2hhbik7CisJCXJldHVybiB0 cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKwordm9pZAordm1idXNfY2hhbl9zZXRfcGVu ZGluZ19zZW5kX3NpemUoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4sCisgICAgdWludDMyX3Qg c2l6ZSkKK3sKKwlpZiAoY2hhbikKKwkJdm1idXNfdHhicl9zZXRfcGVuZGluZ19zbmRfc3ooJmNo YW4tPmNoX3R4YnIsIHNpemUpOworfQorCiBpbnQKK3ZtYnVzX2NoYW5faW92X3NlbmQoc3RydWN0 IHZtYnVzX2NoYW5uZWwgKmNoYW4sCisgICAgY29uc3Qgc3RydWN0IGlvdmVjIGlvdltdLCBpbnQg aW92bGVuLAorICAgIHZtYnVzX2JyX2NvcHlfY2FsbGJhY2tfdCBjYiwgdm9pZCAqY2JhcmcpCit7 CisJaW50IGVycm9yOworCWJvb2xlYW5fdCBzZW5kX2V2dDsKKworCWlmIChpb3ZsZW4gPT0gMCkK KwkJcmV0dXJuICgwKTsKKworCWVycm9yID0gdm1idXNfdHhicl93cml0ZV9jYWxsKCZjaGFuLT5j aF90eGJyLCBpb3YsIGlvdmxlbiwKKwkgICAgY2IsIGNiYXJnLCAmc2VuZF9ldnQpOworCisJaWYg KCFlcnJvciAmJiBzZW5kX2V2dCkgeworCQl2bWJ1c19jaGFuX3NpZ25hbF90eChjaGFuKTsKKwl9 CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2ludAogdm1idXNfY2hhbl9zZW5kKHN0cnVjdCB2bWJ1 c19jaGFubmVsICpjaGFuLCB1aW50MTZfdCB0eXBlLCB1aW50MTZfdCBmbGFncywKICAgICB2b2lk ICpkYXRhLCBpbnQgZGxlbiwgdWludDY0X3QgeGFjdGlkKQogewpAQCAtMTIxMSw2ICsxMjgxLDc4 IEBACiAJcmV0dXJuICgwKTsKIH0KIAordWludDMyX3QKK3ZtYnVzX2NoYW5fcmVhZF9hdmFpbGFi bGUoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4pCit7CisJcmV0dXJuICh2bWJ1c19yeGJyX2F2 YWlsYWJsZSgmY2hhbi0+Y2hfcnhicikpOworfQorCisvKgorICogVGhpcyByb3V0aW5lIGRvZXM6 CisgKiAgICAgLSBBZHZhbmNlIHRoZSBjaGFubmVsIHJlYWQgaW5kZXggZm9yICdhZHZhbmNlJyBi eXRlcworICogICAgIC0gQ29weSBkYXRhX2xlbiBieXRlcyBpbiB0byB0aGUgYnVmZmVyIHBvaW50 ZWQgYnkgJ2RhdGEnCisgKiBSZXR1cm4gMCBpZiBvcGVyYXRpb24gc3VjY2VlZC4gRUFHQUlOIGlm IG9wZXJhdGlvbnMgaWYgZmFpbGVkLgorICogSWYgZmFpbGVkLCB0aGUgYnVmZmVyIHBvaW50ZWQg YnkgJ2RhdGEnIGlzIGludGFjdCwgYW5kIHRoZQorICogY2hhbm5lbCByZWFkIGluZGV4IGlzIG5v dCBhZHZhbmNlZCBhdCBhbGwuCisgKi8KK2ludAordm1idXNfY2hhbl9yZWN2X3BlZWsoc3RydWN0 IHZtYnVzX2NoYW5uZWwgKmNoYW4sCisgICAgdm9pZCAqZGF0YSwgaW50IGRhdGFfbGVuLCB1aW50 MzJfdCBhZHZhbmNlKQoreworCWludCBlcnJvcjsKKwlib29sZWFuX3Qgc2lnX2V2ZW50OworCisJ aWYgKGRhdGEgPT0gTlVMTCB8fCBkYXRhX2xlbiA8PSAwKQorCQlyZXR1cm4gKEVJTlZBTCk7CisK KwllcnJvciA9IHZtYnVzX3J4YnJfaWR4YWR2X3BlZWsoJmNoYW4tPmNoX3J4YnIsCisJICAgIGRh dGEsIGRhdGFfbGVuLCBhZHZhbmNlLCAmc2lnX2V2ZW50KTsKKworCWlmICghZXJyb3IgJiYgc2ln X2V2ZW50KSB7CisJCXZtYnVzX2NoYW5fc2lnbmFsX3J4KGNoYW4pOworCX0KKworCXJldHVybiAo ZXJyb3IpOworfQorCisvKgorICogVGhpcyByb3V0aW5lIGRvZXM6CisgKiAgICAgLSBBZHZhbmNl IHRoZSBjaGFubmVsIHJlYWQgaW5kZXggZm9yICdhZHZhbmNlJyBieXRlcworICovCitpbnQKK3Zt YnVzX2NoYW5fcmVjdl9pZHhhZHYoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4sIHVpbnQzMl90 IGFkdmFuY2UpCit7CisJaW50IGVycm9yOworCWJvb2xlYW5fdCBzaWdfZXZlbnQ7CisKKwlpZiAo YWR2YW5jZSA9PSAwKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwllcnJvciA9IHZtYnVzX3J4YnJf aWR4YWR2KCZjaGFuLT5jaF9yeGJyLCBhZHZhbmNlLCAmc2lnX2V2ZW50KTsKKworCWlmICghZXJy b3IgJiYgc2lnX2V2ZW50KSB7CisJCXZtYnVzX2NoYW5fc2lnbmFsX3J4KGNoYW4pOworCX0KKwor CXJldHVybiAoZXJyb3IpOworfQorCisKKy8qCisgKiBDYWxsZXIgc2hvdWxkIGhvbGQgaXRzIG93 biBsb2NrIHRvIHNlcmlhbGl6ZSB0aGUgcmluZyBidWZmZXIKKyAqIGNvcHkuCisgKi8KK2ludAor dm1idXNfY2hhbl9yZWN2X3BlZWtfY2FsbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbiwgaW50 IGRhdGFfbGVuLAorICAgIHVpbnQzMl90IHNraXAsIHZtYnVzX2JyX2NvcHlfY2FsbGJhY2tfdCBj Yiwgdm9pZCAqY2JhcmcpCit7CisJaWYgKCFjaGFuIHx8IGRhdGFfbGVuIDw9IDAgfHwgY2IgPT0g TlVMTCkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJcmV0dXJuICh2bWJ1c19yeGJyX3BlZWtfY2Fs bCgmY2hhbi0+Y2hfcnhiciwgZGF0YV9sZW4sIHNraXAsCisJICAgIGNiLCBjYmFyZykpOworfQor CiBzdGF0aWMgdm9pZAogdm1idXNfY2hhbl90YXNrKHZvaWQgKnhjaGFuLCBpbnQgcGVuZGluZyBf X3VudXNlZCkKIHsKQEAgLTE3MzIsNiArMTg3NCwyNSBAQAogCQkgICAgMSA8PCAob2ZmZXItPmNo bV9tb250cmlnICUgVk1CVVNfTU9OVFJJR19MRU4pOwogCX0KIAorCWlmIChvZmZlci0+Y2htX2No ZmxhZ3MgJiBWTUJVU19DSEFOX1RMTlBJX1BST1ZJREVSX09GRkVSKSB7CisJCS8qIFRoaXMgaXMg SHlwZXJWIHNvY2tldCBjaGFubmVsICovCisJCWNoYW4tPmNoX2lzX2h2cyA9IHRydWU7CisJCS8q IFRoZSBmaXJzdCBieXRlICE9IDAgbWVhbnMgdGhlIGhvc3QgaW5pdGlhdGVkIGNvbm5lY3Rpb24u ICovCisJCWNoYW4tPmNoX2h2c19jb25uX2Zyb21faG9zdCA9CisJCSAgICBvZmZlci0+Y2htX3Vk YXRhLnBpcGUudXNlcl9kZWZbMF07CisKKwkJaWYgKGJvb3R2ZXJib3NlKSB7CisJCQlkZXZpY2Vf cHJpbnRmKHNjLT52bWJ1c19kZXYsCisJCQkgICAgImNoYW4ldSBpcyBoeXBlcnYgc29ja2V0IGNo YW5uZWwgIgorCQkJICAgICJjb25uZWN0ZWQgJXMgaG9zdFxuIiwKKwkJCSAgICBjaGFuLT5jaF9p ZCwKKwkJCSAgICAoY2hhbi0+Y2hfaHZzX2Nvbm5fZnJvbV9ob3N0ICE9IDApID8KKwkJCSAgICAi ZnJvbSIgOiAidG8iKTsKKwkJfQorCX0gZWxzZSB7CisJCWNoYW4tPmNoX2lzX2h2cyA9IGZhbHNl OworCX0KKwogCS8qCiAJICogU2V0dXAgZXZlbnQgZmxhZy4KIAkgKi8KQEAgLTIwNDcsOSArMjIw OCwzMiBAQAogCQlyZXR1cm4gZmFsc2U7CiB9CiAKLWNvbnN0IHN0cnVjdCBoeXBlcnZfZ3VpZCAq Ci12bWJ1c19jaGFuX2d1aWRfaW5zdChjb25zdCBzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbikK K2Jvb2wKK3ZtYnVzX2NoYW5faXNfaHZzKGNvbnN0IHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFu KQogeworCXJldHVybiBjaGFuLT5jaF9pc19odnM7Cit9CisKK2Jvb2wKK3ZtYnVzX2NoYW5faXNf aHZzX2Nvbm5fZnJvbV9ob3N0KGNvbnN0IHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFuKQorewor CUtBU1NFUlQodm1idXNfY2hhbl9pc19odnMoY2hhbikgPT0gdHJ1ZSwKKwkgICAgKCJOb3QgYSBI eXBlclYgU29ja2V0IGNoYW5uZWwgJXUiLCBjaGFuLT5jaF9pZCkpOworCWlmIChjaGFuLT5jaF9o dnNfY29ubl9mcm9tX2hvc3QgIT0gMCkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4g ZmFsc2U7Cit9CisKK3N0cnVjdCBoeXBlcnZfZ3VpZCAqCit2bWJ1c19jaGFuX2d1aWRfdHlwZShz dHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbikKK3sKKwlyZXR1cm4gJmNoYW4tPmNoX2d1aWRfdHlw ZTsKK30KKworc3RydWN0IGh5cGVydl9ndWlkICoKK3ZtYnVzX2NoYW5fZ3VpZF9pbnN0KHN0cnVj dCB2bWJ1c19jaGFubmVsICpjaGFuKQorewogCXJldHVybiAmY2hhbi0+Y2hfZ3VpZF9pbnN0Owog fQogCmRpZmYgLS1naXQgYS9zeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1c19icnZhci5oIGIvc3lz L2Rldi9oeXBlcnYvdm1idXMvdm1idXNfYnJ2YXIuaAotLS0gYS9zeXMvZGV2L2h5cGVydi92bWJ1 cy92bWJ1c19icnZhci5oCisrKyBiL3N5cy9kZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVzX2JydmFyLmgK QEAgLTQ0LDYgKzQ0LDEwIEBACiAjZGVmaW5lIHZicl93aW5kZXgJCXZici0+YnJfd2luZGV4CiAj ZGVmaW5lIHZicl9yaW5kZXgJCXZici0+YnJfcmluZGV4CiAjZGVmaW5lIHZicl9pbWFzawkJdmJy LT5icl9pbWFzaworI2RlZmluZSB2YnJfcHNuZHN6CQl2YnItPmJyX3BlbmRpbmdfc25kX3N6Cisj ZGVmaW5lIHZicl9mcHNuZHN6CQl2YnItPmJyX2ZlYXR1cmVfYml0cy5mZWF0X3BlbmRpbmdfc25k X3N6CisjZGVmaW5lIHZicl9mdmFsdWUJCXZici0+YnJfZmVhdHVyZV9iaXRzLnZhbHVlCisjZGVm aW5lIHZicl9pbnRyY250CQl2YnItPmJyX2cyaF9pbnRyX2NudAogI2RlZmluZSB2YnJfZGF0YQkJ dmJyLT5icl9kYXRhCiAKIHN0cnVjdCB2bWJ1c19yeGJyIHsKQEAgLTU0LDYgKzU4LDEwIEBACiAj ZGVmaW5lIHJ4YnJfd2luZGV4CQlyeGJyLnZicl93aW5kZXgKICNkZWZpbmUgcnhicl9yaW5kZXgJ CXJ4YnIudmJyX3JpbmRleAogI2RlZmluZSByeGJyX2ltYXNrCQlyeGJyLnZicl9pbWFzaworI2Rl ZmluZSByeGJyX3BzbmRzegkJcnhici52YnJfcHNuZHN6CisjZGVmaW5lIHJ4YnJfZnBzbmRzegkJ cnhici52YnJfZnBzbmRzegorI2RlZmluZSByeGJyX2Z2YWx1ZQkJcnhici52YnJfZnZhbHVlCisj ZGVmaW5lIHJ4YnJfaW50cmNudAkJcnhici52YnJfaW50cmNudAogI2RlZmluZSByeGJyX2RhdGEJ CXJ4YnIudmJyX2RhdGEKICNkZWZpbmUgcnhicl9kc2l6ZQkJcnhici52YnJfZHNpemUKIApAQCAt NjUsNiArNzMsMTAgQEAKICNkZWZpbmUgdHhicl93aW5kZXgJCXR4YnIudmJyX3dpbmRleAogI2Rl ZmluZSB0eGJyX3JpbmRleAkJdHhici52YnJfcmluZGV4CiAjZGVmaW5lIHR4YnJfaW1hc2sJCXR4 YnIudmJyX2ltYXNrCisjZGVmaW5lIHR4YnJfcHNuZHN6CQl0eGJyLnZicl9wc25kc3oKKyNkZWZp bmUgdHhicl9mcHNuZHN6CQl0eGJyLnZicl9mcHNuZHN6CisjZGVmaW5lIHR4YnJfZnZhbHVlCQl0 eGJyLnZicl9mdmFsdWUKKyNkZWZpbmUgdHhicl9pbnRyY250CQl0eGJyLnZicl9pbnRyY250CiAj ZGVmaW5lIHR4YnJfZGF0YQkJdHhici52YnJfZGF0YQogI2RlZmluZSB0eGJyX2RzaXplCQl0eGJy LnZicl9kc2l6ZQogCkBAIC0xMTgsOCArMTMwLDE1IEBACiBpbnQJCXZtYnVzX3J4YnJfcGVlayhz dHJ1Y3Qgdm1idXNfcnhiciAqcmJyLCB2b2lkICpkYXRhLCBpbnQgZGxlbik7CiBpbnQJCXZtYnVz X3J4YnJfcmVhZChzdHJ1Y3Qgdm1idXNfcnhiciAqcmJyLCB2b2lkICpkYXRhLCBpbnQgZGxlbiwK IAkJICAgIHVpbnQzMl90IHNraXApOworaW50CQl2bWJ1c19yeGJyX2lkeGFkdihzdHJ1Y3Qgdm1i dXNfcnhiciAqcmJyLCB1aW50MzJfdCBpZHhfYWR2LAorCQkgICAgYm9vbGVhbl90ICpuZWVkX3Np Zyk7CitpbnQJCXZtYnVzX3J4YnJfaWR4YWR2X3BlZWsoc3RydWN0IHZtYnVzX3J4YnIgKnJiciwg dm9pZCAqZGF0YSwKKwkJICAgIGludCBkbGVuLCB1aW50MzJfdCBpZHhfYWR2LCBib29sZWFuX3Qg Km5lZWRfc2lnKTsKK2ludAkJdm1idXNfcnhicl9wZWVrX2NhbGwoc3RydWN0IHZtYnVzX3J4YnIg KnJiciwgaW50IGRsZW4sCisJCSAgICB1aW50MzJfdCBza2lwLCB2bWJ1c19icl9jb3B5X2NhbGxi YWNrX3QgY2IsIHZvaWQgKmNiYXJnKTsKIHZvaWQJCXZtYnVzX3J4YnJfaW50cl9tYXNrKHN0cnVj dCB2bWJ1c19yeGJyICpyYnIpOwogdWludDMyX3QJdm1idXNfcnhicl9pbnRyX3VubWFzayhzdHJ1 Y3Qgdm1idXNfcnhiciAqcmJyKTsKK3VpbnQzMl90CXZtYnVzX3J4YnJfYXZhaWxhYmxlKGNvbnN0 IHN0cnVjdCB2bWJ1c19yeGJyICpyYnIpOwogCiB2b2lkCQl2bWJ1c190eGJyX2luaXQoc3RydWN0 IHZtYnVzX3R4YnIgKnRicik7CiB2b2lkCQl2bWJ1c190eGJyX2RlaW5pdChzdHJ1Y3Qgdm1idXNf dHhiciAqdGJyKTsKQEAgLTEyNiw1ICsxNDUsMTMgQEAKIHZvaWQJCXZtYnVzX3R4YnJfc2V0dXAo c3RydWN0IHZtYnVzX3R4YnIgKnRiciwgdm9pZCAqYnVmLCBpbnQgYmxlbik7CiBpbnQJCXZtYnVz X3R4YnJfd3JpdGUoc3RydWN0IHZtYnVzX3R4YnIgKnRiciwKIAkJICAgIGNvbnN0IHN0cnVjdCBp b3ZlYyBpb3ZbXSwgaW50IGlvdmxlbiwgYm9vbGVhbl90ICpuZWVkX3NpZyk7CitpbnQJCXZtYnVz X3R4YnJfd3JpdGVfY2FsbChzdHJ1Y3Qgdm1idXNfdHhiciAqdGJyLAorCQkgICAgY29uc3Qgc3Ry dWN0IGlvdmVjIGlvdltdLCBpbnQgaW92bGVuLAorCQkgICAgdm1idXNfYnJfY29weV9jYWxsYmFj a190IGNiLCB2b2lkICpjYmFyZywKKwkJICAgIGJvb2xlYW5fdCAqbmVlZF9zaWcpOwordWludDMy X3QJdm1idXNfdHhicl9hdmFpbGFibGUoY29uc3Qgc3RydWN0IHZtYnVzX3R4YnIgKnRicik7Cit1 aW50MzJfdAl2bWJ1c190eGJyX2dldF9pbWFzayhjb25zdCBzdHJ1Y3Qgdm1idXNfdHhiciAqdGJy KTsKK3ZvaWQJCXZtYnVzX3R4YnJfc2V0X3BlbmRpbmdfc25kX3N6KHN0cnVjdCB2bWJ1c190eGJy ICp0YnIsCisJCSAgICB1aW50MzJfdCBzaXplKTsKIAogI2VuZGlmICAvKiBfVk1CVVNfQlJWQVJf SF8gKi8KZGlmZiAtLWdpdCBhL3N5cy9kZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVzX2JyLmMgYi9zeXMv ZGV2L2h5cGVydi92bWJ1cy92bWJ1c19ici5jCi0tLSBhL3N5cy9kZXYvaHlwZXJ2L3ZtYnVzL3Zt YnVzX2JyLmMKKysrIGIvc3lzL2Rldi9oeXBlcnYvdm1idXMvdm1idXNfYnIuYwpAQCAtNTIsMTgg KzUyLDIzIEBACiB2bWJ1c19icl9zeXNjdGxfc3RhdGUoU1lTQ1RMX0hBTkRMRVJfQVJHUykKIHsK IAljb25zdCBzdHJ1Y3Qgdm1idXNfYnIgKmJyID0gYXJnMTsKLQl1aW50MzJfdCByaW5kZXgsIHdp bmRleCwgaW1hc2ssIHJhdmFpbCwgd2F2YWlsOworCXVpbnQzMl90IHJpbmRleCwgd2luZGV4LCBp bWFzaywgcHNuZHN6LCBmdmFsdWUsIHJhdmFpbCwgd2F2YWlsOworCXVpbnQ2NF90IGludHJjbnQ7 CiAJY2hhciBzdGF0ZVsyNTZdOwogCisJaW50cmNudCA9IGJyLT52YnJfaW50cmNudDsKIAlyaW5k ZXggPSBici0+dmJyX3JpbmRleDsKIAl3aW5kZXggPSBici0+dmJyX3dpbmRleDsKIAlpbWFzayA9 IGJyLT52YnJfaW1hc2s7CisJcHNuZHN6ID0gYnItPnZicl9wc25kc3o7CisJZnZhbHVlID0gYnIt PnZicl9mdmFsdWU7CiAJd2F2YWlsID0gVk1CVVNfQlJfV0FWQUlMKHJpbmRleCwgd2luZGV4LCBi ci0+dmJyX2RzaXplKTsKIAlyYXZhaWwgPSBici0+dmJyX2RzaXplIC0gd2F2YWlsOwogCiAJc25w cmludGYoc3RhdGUsIHNpemVvZihzdGF0ZSksCi0JICAgICJyaW5kZXg6JXUgd2luZGV4OiV1IGlt YXNrOiV1IHJhdmFpbDoldSB3YXZhaWw6JXUiLAotCSAgICByaW5kZXgsIHdpbmRleCwgaW1hc2ss IHJhdmFpbCwgd2F2YWlsKTsKKwkgICAgImludHJjbnQ6JWx1IHJpbmRleDoldSB3aW5kZXg6JXUg aW1hc2s6JXUgcHNuZHN6OiV1IGZ2YWx1ZToldSAiCisJICAgICJyYXZhaWw6JXUgd2F2YWlsOiV1 IiwKKwkgICAgaW50cmNudCwgcmluZGV4LCB3aW5kZXgsIGltYXNrLCBwc25kc3osIGZ2YWx1ZSwg cmF2YWlsLCB3YXZhaWwpOwogCXJldHVybiBzeXNjdGxfaGFuZGxlX3N0cmluZyhvaWRwLCBzdGF0 ZSwgc2l6ZW9mKHN0YXRlKSwgcmVxKTsKIH0KIApAQCAtNzYsOSArODEsMTEgQEAKICNkZWZpbmUg QlJfU1RBVEVfUklEWAkwCiAjZGVmaW5lIEJSX1NUQVRFX1dJRFgJMQogI2RlZmluZSBCUl9TVEFU RV9JTVNLCTIKLSNkZWZpbmUgQlJfU1RBVEVfUlNQQwkzCi0jZGVmaW5lIEJSX1NUQVRFX1dTUEMJ NAotI2RlZmluZSBCUl9TVEFURV9NQVgJNQorI2RlZmluZSBCUl9TVEFURV9QU1NaCTMKKyNkZWZp bmUgQlJfU1RBVEVfRlZBTAk0CisjZGVmaW5lIEJSX1NUQVRFX1JTUEMJNQorI2RlZmluZSBCUl9T VEFURV9XU1BDCTYKKyNkZWZpbmUgQlJfU1RBVEVfTUFYCTcKIAogCWNvbnN0IHN0cnVjdCB2bWJ1 c19iciAqYnIgPSBhcmcxOwogCXVpbnQzMl90IHJpbmRleCwgd2luZGV4LCB3YXZhaWwsIHN0YXRl W0JSX1NUQVRFX01BWF07CkBAIC05MCw2ICs5Nyw4IEBACiAJc3RhdGVbQlJfU1RBVEVfUklEWF0g PSByaW5kZXg7CiAJc3RhdGVbQlJfU1RBVEVfV0lEWF0gPSB3aW5kZXg7CiAJc3RhdGVbQlJfU1RB VEVfSU1TS10gPSBici0+dmJyX2ltYXNrOworCXN0YXRlW0JSX1NUQVRFX1BTU1pdID0gYnItPnZi cl9wc25kc3o7CisJc3RhdGVbQlJfU1RBVEVfRlZBTF0gPSBici0+dmJyX2Z2YWx1ZTsKIAlzdGF0 ZVtCUl9TVEFURV9XU1BDXSA9IHdhdmFpbDsKIAlzdGF0ZVtCUl9TVEFURV9SU1BDXSA9IGJyLT52 YnJfZHNpemUgLSB3YXZhaWw7CiAKQEAgLTE0MCw2ICsxNDksMTIgQEAKIH0KIAogdWludDMyX3QK K3ZtYnVzX3J4YnJfYXZhaWxhYmxlKGNvbnN0IHN0cnVjdCB2bWJ1c19yeGJyICpyYnIpCit7CisJ cmV0dXJuICh2bWJ1c19yeGJyX2F2YWlsKHJicikpOworfQorCit1aW50MzJfdAogdm1idXNfcnhi cl9pbnRyX3VubWFzayhzdHJ1Y3Qgdm1idXNfcnhiciAqcmJyKQogewogCXJici0+cnhicl9pbWFz ayA9IDA7CkBAIC0xNzgsNiArMTkzLDQwIEBACiAJdm1idXNfYnJfc2V0dXAoJnJici0+cnhiciwg YnVmLCBibGVuKTsKIH0KIAorc3RhdGljIF9faW5saW5lIGJvb2xlYW5fdAordm1idXNfcnhicl9u ZWVkX3NpZ25hbChjb25zdCBzdHJ1Y3Qgdm1idXNfcnhiciAqcmJyLCB1aW50MzJfdCBieXRlc19y ZWFkKQoreworCXVpbnQzMl90IHBlbmRpbmdfc25kX3N6LCBjYW53cml0ZV9zaXplOworCisJLyog Tm8gbmVlZCB0byBzaWduYWwgaWYgaG9zdCBkb2Vzbid0IHdhbnQgdXMgdG8gKi8KKwlpZiAoIXJi ci0+cnhicl9mcHNuZHN6KQorCQlyZXR1cm4gZmFsc2U7CisKKwltYigpOworCisJcGVuZGluZ19z bmRfc3ogPSByYnItPnJ4YnJfcHNuZHN6OworCS8qIE5vIG5lZWQgdG8gc2lnbmFsIGlmIGhvc3Qg c2V0cyBwZW5kaW5nX3NuZF9zeiB0byAwICovCisJaWYgKCFwZW5kaW5nX3NuZF9zeikKKwkJcmV0 dXJuIGZhbHNlOworCisJbWIoKTsKKworCWNhbndyaXRlX3NpemUgPSByYnItPnJ4YnJfZHNpemUg LSB2bWJ1c19yeGJyX2F2YWlsKHJicik7CisKKwkvKiBObyBuZWVkIHRvIHNpZ25hbCBpZiBiciBh bHJlYWR5IGhhcyBlbm91Z2ggc3BhY2UgYmVmb3JlIHJlYWQgKi8KKwlpZiAoY2Fud3JpdGVfc2l6 ZSAtIGJ5dGVzX3JlYWQgPiBwZW5kaW5nX3NuZF9zeikKKwkJcmV0dXJuIGZhbHNlOworCisJLyoK KwkgKiBObyBuZWVkIHRvIHNpZ25hbCBpZiBzdGlsbCBkb2Vzbid0IGhhdmUgZW5vdWdoIHNwYWNl CisJICogYXNrZWQgYnkgaG9zdAorCSAqLworCWlmIChjYW53cml0ZV9zaXplIDw9IHBlbmRpbmdf c25kX3N6KQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogdm9pZAogdm1i dXNfdHhicl9pbml0KHN0cnVjdCB2bWJ1c190eGJyICp0YnIpCiB7CkBAIC0xOTQsOCArMjQzLDI1 IEBACiB2bWJ1c190eGJyX3NldHVwKHN0cnVjdCB2bWJ1c190eGJyICp0YnIsIHZvaWQgKmJ1Ziwg aW50IGJsZW4pCiB7CiAJdm1idXNfYnJfc2V0dXAoJnRici0+dHhiciwgYnVmLCBibGVuKTsKKwor CS8qIFNldCBmZWF0dXJlIGJpdCBlbmFibGluZyBmbG93IGNvbnRyb2wgKi8KKwl0YnItPnR4YnJf ZnBzbmRzeiA9IDE7CiB9CiAKK3VpbnQzMl90Cit2bWJ1c190eGJyX2dldF9pbWFzayhjb25zdCBz dHJ1Y3Qgdm1idXNfdHhiciAqdGJyKQoreworCW1iKCk7CisKKwlyZXR1cm4odGJyLT50eGJyX2lt YXNrKTsKK30KKwordm9pZAordm1idXNfdHhicl9zZXRfcGVuZGluZ19zbmRfc3ooc3RydWN0IHZt YnVzX3R4YnIgKnRiciwgdWludDMyX3Qgc2l6ZSkKK3sKKwl0YnItPnR4YnJfcHNuZHN6ID0gc2l6 ZTsKK30KKwogLyoKICAqIFdoZW4gd2Ugd3JpdGUgdG8gdGhlIHJpbmcgYnVmZmVyLCBjaGVjayBp ZiB0aGUgaG9zdCBuZWVkcyB0byBiZQogICogc2lnbmFsZWQuCkBAIC0yNjAsNyArMzI2LDExNyBA QAogCXJldHVybiBWTUJVU19CUl9JRFhJTkMod2luZGV4LCBjcGxlbiwgYnJfZHNpemUpOwogfQog CitzdGF0aWMgX19pbmxpbmUgdWludDMyX3QKK3ZtYnVzX3R4YnJfY29weXRvX2NhbGwoY29uc3Qg c3RydWN0IHZtYnVzX3R4YnIgKnRiciwgdWludDMyX3Qgd2luZGV4LAorICAgIHVpbnQzMl90IGNw bGVuLCB2bWJ1c19icl9jb3B5X2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNiYXJnLCBpbnQgKnJldCkK K3sKKwl1aW50OF90ICpicl9kYXRhID0gdGJyLT50eGJyX2RhdGE7CisJdWludDMyX3QgYnJfZHNp emUgPSB0YnItPnR4YnJfZHNpemU7CisJaW50IGVyciA9IDA7CisKKwlpZiAoY3BsZW4gPiBicl9k c2l6ZSAtIHdpbmRleCkgeworCQl1aW50MzJfdCBmcmFnbGVuID0gYnJfZHNpemUgLSB3aW5kZXg7 CisKKwkJLyogV3JhcC1hcm91bmQgZGV0ZWN0ZWQgKi8KKwkJZXJyID0gY2IoKHZvaWQgKikoYnJf ZGF0YSArIHdpbmRleCksIGZyYWdsZW4sIGNiYXJnKTsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSBj Yigodm9pZCAqKWJyX2RhdGEsIGNwbGVuIC0gZnJhZ2xlbiwgY2JhcmcpOworCX0gZWxzZSB7CisJ CWVyciA9IGNiKCh2b2lkICopKGJyX2RhdGEgKyB3aW5kZXgpLCBjcGxlbiwgY2JhcmcpOworCX0K KworCSpyZXQgPSBlcnI7CisKKwlyZXR1cm4gVk1CVVNfQlJfSURYSU5DKHdpbmRleCwgY3BsZW4s IGJyX2RzaXplKTsKK30KKwordWludDMyX3QKK3ZtYnVzX3R4YnJfYXZhaWxhYmxlKGNvbnN0IHN0 cnVjdCB2bWJ1c190eGJyICp0YnIpCit7CisJcmV0dXJuICh2bWJ1c190eGJyX2F2YWlsKHRicikp OworfQorCiAvKgorICogTk9URToKKyAqIE5vdCBob2xkaW5nIGxvY2sgd2hlbiBjYWxsaW5nIHVz ZXIgcHJvdmlkZWQgY2FsbGJhY2sgcm91dGluZS4KKyAqIENhbGxlciBzaG91bGQgaG9sZCBsb2Nr IHRvIHNlcmlhbGl6ZSByaW5nIGJ1ZmZlciBhY2Nlc3Nlcy4KKyAqLworaW50Cit2bWJ1c190eGJy X3dyaXRlX2NhbGwoc3RydWN0IHZtYnVzX3R4YnIgKnRiciwKKyAgICBjb25zdCBzdHJ1Y3QgaW92 ZWMgaW92W10sIGludCBpb3ZsZW4sCisgICAgdm1idXNfYnJfY29weV9jYWxsYmFja190IGNiLCB2 b2lkICpjYmFyZywKKyAgICBib29sZWFuX3QgKm5lZWRfc2lnKQoreworCXVpbnQzMl90IG9sZF93 aW5kZXgsIHdpbmRleCwgdG90YWw7CisJdWludDY0X3Qgc2F2ZV93aW5kZXg7CisJaW50IGk7CisJ aW50IGNiX3JldCA9IDA7CisKKwl0b3RhbCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGlvdmxlbjsg aSsrKQorCQl0b3RhbCArPSBpb3ZbaV0uaW92X2xlbjsKKwl0b3RhbCArPSBzaXplb2Yoc2F2ZV93 aW5kZXgpOworCisKKwkvKgorCSAqIE5PVEU6CisJICogSWYgdGhpcyB3cml0ZSBpcyBnb2luZyB0 byBtYWtlIGJyX3dpbmRleCBzYW1lIGFzIGJyX3JpbmRleCwKKwkgKiBpLmUuIHRoZSBhdmFpbGFi bGUgc3BhY2UgZm9yIHdyaXRlIGlzIHNhbWUgYXMgdGhlIHdyaXRlIHNpemUsCisJICogd2UgY2Fu J3QgZG8gaXQgdGhlbiwgc2luY2UgYnJfd2luZGV4ID09IGJyX3JpbmRleCBtZWFucyB0aGF0CisJ ICogdGhlIGJ1ZnJpbmcgaXMgZW1wdHkuCisJICovCisJaWYgKHZtYnVzX3R4YnJfYXZhaWwodGJy KSA8PSB0b3RhbCkgeworCQlyZXR1cm4gKEVBR0FJTik7CisJfQorCisJLyogU2F2ZSBicl93aW5k ZXggZm9yIGxhdGVyIHVzZSAqLworCW9sZF93aW5kZXggPSB0YnItPnR4YnJfd2luZGV4OworCisJ LyoKKwkgKiBDb3B5IHRoZSBzY2F0dGVyZWQgY2hhbm5lbCBwYWNrZXQgdG8gdGhlIFRYIGJ1ZnJp bmcuCisJICovCisJd2luZGV4ID0gb2xkX3dpbmRleDsKKwlmb3IgKGkgPSAwOyBpIDwgaW92bGVu OyBpKyspIHsKKwkJaWYgKGlvdltpXS5pb3ZfYmFzZSAhPSBOVUxMKSB7CisJCQl3aW5kZXggPSB2 bWJ1c190eGJyX2NvcHl0byh0YnIsIHdpbmRleCwKKwkJCSAgICBpb3ZbaV0uaW92X2Jhc2UsIGlv dltpXS5pb3ZfbGVuKTsKKwkJfSBlbHNlIGlmIChjYiAhPSBOVUxMKSB7CisJCQl3aW5kZXggPSB2 bWJ1c190eGJyX2NvcHl0b19jYWxsKHRiciwgd2luZGV4LAorCQkJICAgIGlvdltpXS5pb3ZfbGVu LCBjYiwgY2JhcmcsICZjYl9yZXQpOworCQkJLyoKKwkJCSAqIElmIGNhbGxiYWNrIGZhaWxzLCBy ZXR1cm4gd2l0aG91dCB1cGRhdGluZworCQkJICogd3JpdGUgaW5kZXguCisJCQkgKi8KKwkJCWlm IChjYl9yZXQpCisJCQkJcmV0dXJuIChjYl9yZXQpOworCQl9CisJfQorCisJbXR4X2xvY2tfc3Bp bigmdGJyLT50eGJyX2xvY2spOworCisJLyoKKwkgKiBTZXQgdGhlIG9mZnNldCBvZiB0aGUgY3Vy cmVudCBjaGFubmVsIHBhY2tldC4KKwkgKi8KKwlzYXZlX3dpbmRleCA9ICgodWludDY0X3Qpb2xk X3dpbmRleCkgPDwgMzI7CisJd2luZGV4ID0gdm1idXNfdHhicl9jb3B5dG8odGJyLCB3aW5kZXgs ICZzYXZlX3dpbmRleCwKKwkgICAgc2l6ZW9mKHNhdmVfd2luZGV4KSk7CisKKwkvKgorCSAqIFVw ZGF0ZSB0aGUgd3JpdGUgaW5kZXggX2FmdGVyXyB0aGUgY2hhbm5lbCBwYWNrZXQKKwkgKiBpcyBj b3BpZWQuCisJICovCisJX19jb21waWxlcl9tZW1iYXIoKTsKKwl0YnItPnR4YnJfd2luZGV4ID0g d2luZGV4OworCisJbXR4X3VubG9ja19zcGluKCZ0YnItPnR4YnJfbG9jayk7CisKKwlpZiAobmVl ZF9zaWcpCisJCSpuZWVkX3NpZyA9IHZtYnVzX3R4YnJfbmVlZF9zaWduYWwodGJyLCBvbGRfd2lu ZGV4KTsKKworCXJldHVybiAoMCk7Cit9CisKKy8qCiAgKiBXcml0ZSBzY2F0dGVyZWQgY2hhbm5l bCBwYWNrZXQgdG8gVFggYnVmcmluZy4KICAqCiAgKiBUaGUgb2Zmc2V0IG9mIHRoaXMgY2hhbm5l bCBwYWNrZXQgaXMgd3JpdHRlbiBhcyBhIDY0Yml0cyB2YWx1ZQpAQCAtMzQ2LDYgKzUyMiwyNyBA QAogCXJldHVybiBWTUJVU19CUl9JRFhJTkMocmluZGV4LCBjcGxlbiwgYnJfZHNpemUpOwogfQog CitzdGF0aWMgX19pbmxpbmUgdWludDMyX3QKK3ZtYnVzX3J4YnJfY29weWZyb21fY2FsbChjb25z dCBzdHJ1Y3Qgdm1idXNfcnhiciAqcmJyLCB1aW50MzJfdCByaW5kZXgsCisgICAgaW50IGNwbGVu LCB2bWJ1c19icl9jb3B5X2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNiYXJnKQoreworCXVpbnQ4X3Qg KmJyX2RhdGEgPSByYnItPnJ4YnJfZGF0YTsKKwl1aW50MzJfdCBicl9kc2l6ZSA9IHJici0+cnhi cl9kc2l6ZTsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKGNwbGVuID4gYnJfZHNpemUgLSByaW5k ZXgpIHsKKwkJdWludDMyX3QgZnJhZ2xlbiA9IGJyX2RzaXplIC0gcmluZGV4OworCisJCS8qIFdy YXAtYXJvdW5kIGRldGVjdGVkLiAqLworCQllcnJvciA9IGNiKCh2b2lkICopKGJyX2RhdGEgKyBy aW5kZXgpLCBmcmFnbGVuLCBjYmFyZyk7CisJCWlmICghZXJyb3IpCisJCQllcnJvciA9IGNiKCh2 b2lkICopYnJfZGF0YSwgY3BsZW4gLSBmcmFnbGVuLCBjYmFyZyk7CisJfSBlbHNlIHsKKwkJZXJy b3IgPSBjYigodm9pZCAqKShicl9kYXRhICsgcmluZGV4KSwgY3BsZW4sIGNiYXJnKTsKKwl9CisJ cmV0dXJuIChlcnJvcik7Cit9CisKIGludAogdm1idXNfcnhicl9wZWVrKHN0cnVjdCB2bWJ1c19y eGJyICpyYnIsIHZvaWQgKmRhdGEsIGludCBkbGVuKQogewpAQCAtMzY4LDYgKzU2NSwxMjEgQEAK IAogLyoKICAqIE5PVEU6CisgKiBXZSBvbmx5IGhvbGQgc3BpbiBsb2NrIHRvIGNoZWNrIHRoZSBy aW5nIGJ1ZmZlciBzcGFjZS4gSXQgaXMKKyAqIHJlbGVhc2VkIGJlZm9yZSBjYWxsaW5nIHVzZXIg cHJvdmlkZWQgY2FsbGJhY2sgcm91dGluZS4KKyAqIENhbGxlciBzaG91bGQgaG9sZCBsb2NrIHRv IHNlcmlhbGl6ZSByaW5nIGJ1ZmZlciBhY2Nlc3Nlcy4KKyAqLworaW50Cit2bWJ1c19yeGJyX3Bl ZWtfY2FsbChzdHJ1Y3Qgdm1idXNfcnhiciAqcmJyLCBpbnQgZGxlbiwgdWludDMyX3Qgc2tpcCwK KyAgICB2bWJ1c19icl9jb3B5X2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNiYXJnKQoreworCXVpbnQz Ml90IHJpbmRleCwgYnJfZHNpemUwID0gcmJyLT5yeGJyX2RzaXplOworCWludCByZXQ7CisKKwlt dHhfbG9ja19zcGluKCZyYnItPnJ4YnJfbG9jayk7CisJLyoKKwkgKiBUaGUgcmVxdWVzdGVkIGRh dGEgKyBza2lwIGFuZCB0aGUgNjRiaXRzIGNoYW5uZWwgcGFja2V0CisJICogb2Zmc2V0IHNob3Vs ZCBiZSB0aGVyZSBhdCBsZWFzdC4KKwkgKi8KKwlpZiAodm1idXNfcnhicl9hdmFpbChyYnIpIDwg c2tpcCArIGRsZW4gKyBzaXplb2YodWludDY0X3QpKSB7CisJCW10eF91bmxvY2tfc3BpbigmcmJy LT5yeGJyX2xvY2spOworCQlyZXR1cm4gKEVBR0FJTik7CisJfQorCisJcmluZGV4ID0gVk1CVVNf QlJfSURYSU5DKHJici0+cnhicl9yaW5kZXgsIHNraXAsIGJyX2RzaXplMCk7CisJbXR4X3VubG9j a19zcGluKCZyYnItPnJ4YnJfbG9jayk7CisKKwlyZXQgPSB2bWJ1c19yeGJyX2NvcHlmcm9tX2Nh bGwocmJyLCByaW5kZXgsIGRsZW4sIGNiLCBjYmFyZyk7CisKKwlyZXR1cm4gKHJldCk7Cit9CisK Ky8qCisgKiBOT1RFOgorICogV2UgYXNzdW1lIGlkeF9hZHYgPT0gc2l6ZW9mKGNoYW5uZWwgcGFj a2V0KS4KKyAqLworaW50Cit2bWJ1c19yeGJyX2lkeGFkdl9wZWVrKHN0cnVjdCB2bWJ1c19yeGJy ICpyYnIsIHZvaWQgKmRhdGEsIGludCBkbGVuLAorICAgIHVpbnQzMl90IGlkeF9hZHYsIGJvb2xl YW5fdCAqbmVlZF9zaWcpCit7CisJdWludDMyX3QgcmluZGV4LCBicl9kc2l6ZSA9IHJici0+cnhi cl9kc2l6ZTsKKworCW10eF9sb2NrX3NwaW4oJnJici0+cnhicl9sb2NrKTsKKwkvKgorCSAqIE1h a2Ugc3VyZSBpdCBoYXMgZW5vdWdoIGRhdGEgdG8gcmVhZC4KKwkgKi8KKwlpZiAodm1idXNfcnhi cl9hdmFpbChyYnIpIDwgaWR4X2FkdiArIHNpemVvZih1aW50NjRfdCkgKyBkbGVuKSB7CisJCW10 eF91bmxvY2tfc3BpbigmcmJyLT5yeGJyX2xvY2spOworCQlyZXR1cm4gKEVBR0FJTik7CisJfQor CisJaWYgKGlkeF9hZHYgPiAwKSB7CisJCS8qCisJCSAqIEFkdmFuY2UgdGhlIHJlYWQgaW5kZXgg Zmlyc3QsIGluY2x1ZGluZyB0aGUgY2hhbm5lbCdzIDY0Yml0CisJCSAqIHByZXZpb3VzIHdyaXRl IG9mZnNldC4KKwkJICovCisJCXJpbmRleCA9IFZNQlVTX0JSX0lEWElOQyhyYnItPnJ4YnJfcmlu ZGV4LAorCQkgICAgaWR4X2FkdiArIHNpemVvZih1aW50NjRfdCksIGJyX2RzaXplKTsKKwkJX19j b21waWxlcl9tZW1iYXIoKTsKKwkJcmJyLT5yeGJyX3JpbmRleCA9IHJpbmRleDsKKwl9CisKKwl2 bWJ1c19yeGJyX2NvcHlmcm9tKHJiciwgcmJyLT5yeGJyX3JpbmRleCwgZGF0YSwgZGxlbik7CisK KwltdHhfdW5sb2NrX3NwaW4oJnJici0+cnhicl9sb2NrKTsKKworCWlmIChuZWVkX3NpZykgewor CQlpZiAoaWR4X2FkdiA+IDApCisJCQkqbmVlZF9zaWcgPQorCQkJICAgIHZtYnVzX3J4YnJfbmVl ZF9zaWduYWwocmJyLCBpZHhfYWR2ICsKKwkJCSAgICBzaXplb2YodWludDY0X3QpKTsKKwkJZWxz ZQorCQkJKm5lZWRfc2lnID0gZmFsc2U7CisJfQorCisJcmV0dXJuICgwKTsKK30KKworLyoKKyAq IE5PVEU6CisgKiBKdXN0IHVwZGF0ZSB0aGUgUlggcmIgaW5kZXguCisgKi8KK2ludAordm1idXNf cnhicl9pZHhhZHYoc3RydWN0IHZtYnVzX3J4YnIgKnJiciwgdWludDMyX3QgaWR4X2FkdiwKKyAg ICBib29sZWFuX3QgKm5lZWRfc2lnKQoreworCXVpbnQzMl90IHJpbmRleCwgYnJfZHNpemUgPSBy YnItPnJ4YnJfZHNpemU7CisKKwltdHhfbG9ja19zcGluKCZyYnItPnJ4YnJfbG9jayk7CisJLyoK KwkgKiBNYWtlIHN1cmUgaXQgaGFzIGVub3VnaCBzcGFjZSB0byBhZHZhbmNlLgorCSAqLworCWlm ICh2bWJ1c19yeGJyX2F2YWlsKHJicikgPCBpZHhfYWR2ICsgc2l6ZW9mKHVpbnQ2NF90KSkgewor CQltdHhfdW5sb2NrX3NwaW4oJnJici0+cnhicl9sb2NrKTsKKwkJcmV0dXJuIChFQUdBSU4pOwor CX0KKworCS8qCisJICogQWR2YW5jZSB0aGUgcmVhZCBpbmRleCwgaW5jbHVkaW5nIHRoZSBjaGFu bmVsJ3MgNjRiaXQKKwkgKiBwcmV2aW91cyB3cml0ZSBvZmZzZXQuCisJICovCisJcmluZGV4ID0g Vk1CVVNfQlJfSURYSU5DKHJici0+cnhicl9yaW5kZXgsCisJICAgIGlkeF9hZHYgKyBzaXplb2Yo dWludDY0X3QpLCBicl9kc2l6ZSk7CisJX19jb21waWxlcl9tZW1iYXIoKTsKKwlyYnItPnJ4YnJf cmluZGV4ID0gcmluZGV4OworCisJbXR4X3VubG9ja19zcGluKCZyYnItPnJ4YnJfbG9jayk7CisK KwlpZiAobmVlZF9zaWcpIHsKKwkJKm5lZWRfc2lnID0KKwkJICAgIHZtYnVzX3J4YnJfbmVlZF9z aWduYWwocmJyLCBpZHhfYWR2ICsgc2l6ZW9mKHVpbnQ2NF90KSk7CisJfQorCisJcmV0dXJuICgw KTsKK30KKworLyoKKyAqIE5PVEU6CiAgKiBXZSBhc3N1bWUgKGRsZW4gKyBza2lwKSA9PSBzaXpl b2YoY2hhbm5lbCBwYWNrZXQpLgogICovCiBpbnQKZGlmZiAtLWdpdCBhL3N5cy9kZXYvaHlwZXJ2 L3ZtYnVzL3ZtYnVzLmMgYi9zeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1cy5jCi0tLSBhL3N5cy9k ZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVzLmMKKysrIGIvc3lzL2Rldi9oeXBlcnYvdm1idXMvdm1idXMu YwpAQCAtMzY1LDEyICszNjUsNDggQEAKIAl1aW50MzJfdCBncGFkbDsKIAogYWdhaW46Ci0JZ3Bh ZGwgPSBhdG9taWNfZmV0Y2hhZGRfaW50KCZzYy0+dm1idXNfZ3BhZGwsIDEpOyAKKwlncGFkbCA9 IGF0b21pY19mZXRjaGFkZF9pbnQoJnNjLT52bWJ1c19ncGFkbCwgMSk7CiAJaWYgKGdwYWRsID09 IDApCiAJCWdvdG8gYWdhaW47CiAJcmV0dXJuIChncGFkbCk7CiB9CiAKKy8qIFVzZWQgZm9yIEh5 cGVyLVYgc29ja2V0IHdoZW4gZ3Vlc3QgY2xpZW50IGNvbm5lY3RzIHRvIGhvc3QgKi8KK2ludAor dm1idXNfcmVxX3RsX2Nvbm5lY3Qoc3RydWN0IGh5cGVydl9ndWlkICpndWVzdF9zcnZfaWQsCisg ICAgc3RydWN0IGh5cGVydl9ndWlkICpob3N0X3Nydl9pZCkKK3sKKwlzdHJ1Y3Qgdm1idXNfc29m dGMgKnNjID0gdm1idXNfZ2V0X3NvZnRjKCk7CisJc3RydWN0IHZtYnVzX2NoYW5tc2dfdGxfY29u bmVjdCAqcmVxOworCXN0cnVjdCB2bWJ1c19tc2doYyAqbWg7CisJaW50IGVycm9yOworCisJaWYg KCFzYykKKwkJcmV0dXJuIEVOWElPOworCisJbWggPSB2bWJ1c19tc2doY19nZXQoc2MsIHNpemVv ZigqcmVxKSk7CisJaWYgKG1oID09IE5VTEwpIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+dm1idXNf ZGV2LAorCQkgICAgImNhbiBub3QgZ2V0IG1zZyBoeXBlcmNhbGwgZm9yIHRsIGNvbm5lY3RcbiIp OworCQlyZXR1cm4gRU5YSU87CisJfQorCisJcmVxID0gdm1idXNfbXNnaGNfZGF0YXB0cihtaCk7 CisJcmVxLT5jaG1faGRyLmNobV90eXBlID0gVk1CVVNfQ0hBTk1TR19UWVBFX1RMX0NPTk47CisJ cmVxLT5ndWVzdF9lbmRwb2ludF9pZCA9ICpndWVzdF9zcnZfaWQ7CisJcmVxLT5ob3N0X3NlcnZp Y2VfaWQgPSAqaG9zdF9zcnZfaWQ7CisKKwllcnJvciA9IHZtYnVzX21zZ2hjX2V4ZWNfbm9yZXN1 bHQobWgpOworCXZtYnVzX21zZ2hjX3B1dChzYywgbWgpOworCisJaWYgKGVycm9yKSB7CisJCWRl dmljZV9wcmludGYoc2MtPnZtYnVzX2RldiwKKwkJICAgICJ0bCBjb25uZWN0IG1zZyBoeXBlcmNh bGwgZmFpbGVkXG4iKTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKIHN0YXRpYyBpbnQKIHZt YnVzX2Nvbm5lY3Qoc3RydWN0IHZtYnVzX3NvZnRjICpzYywgdWludDMyX3QgdmVyc2lvbikKIHsK ZGlmZiAtLWdpdCBhL3N5cy9kZXYvaHlwZXJ2L2luY2x1ZGUvdm1idXMuaCBiL3N5cy9kZXYvaHlw ZXJ2L2luY2x1ZGUvdm1idXMuaAotLS0gYS9zeXMvZGV2L2h5cGVydi9pbmNsdWRlL3ZtYnVzLmgK KysrIGIvc3lzL2Rldi9oeXBlcnYvaW5jbHVkZS92bWJ1cy5oCkBAIC0zMSw2ICszMSw3IEBACiAK ICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8 c3lzL19pb3ZlYy5oPgogCiAvKgogICogVk1CVVMgdmVyc2lvbiBpcyAzMiBiaXQsIHVwcGVyIDE2 IGJpdCBmb3IgbWFqb3JfbnVtYmVyIGFuZCBsb3dlcgpAQCAtMTMwLDYgKzEzMSw3IEBACiBzdHJ1 Y3QgdGFza3F1ZXVlOwogCiB0eXBlZGVmIHZvaWQJKCp2bWJ1c19jaGFuX2NhbGxiYWNrX3QpKHN0 cnVjdCB2bWJ1c19jaGFubmVsICosIHZvaWQgKik7Cit0eXBlZGVmIGludAkoKnZtYnVzX2JyX2Nv cHlfY2FsbGJhY2tfdCkodm9pZCAqLCBpbnQsIHZvaWQgKik7CiAKIHN0YXRpYyBfX2lubGluZSBz dHJ1Y3Qgdm1idXNfY2hhbm5lbCAqCiB2bWJ1c19nZXRfY2hhbm5lbChkZXZpY2VfdCBkZXYpCkBA IC0yMDUsNiArMjA3LDE0IEBACiBpbnQJCXZtYnVzX2NoYW5fcmVjdl9wa3Qoc3RydWN0IHZtYnVz X2NoYW5uZWwgKmNoYW4sCiAJCSAgICBzdHJ1Y3Qgdm1idXNfY2hhbnBrdF9oZHIgKnBrdCwgaW50 ICpwa3RsZW4pOwogCitpbnQJCXZtYnVzX2NoYW5fcmVjdl9pZHhhZHYoc3RydWN0IHZtYnVzX2No YW5uZWwgKmNoYW4sCisJCSAgICB1aW50MzJfdCBhZHZhbmNlKTsKK2ludAkJdm1idXNfY2hhbl9y ZWN2X3BlZWsoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4sCisJCSAgICB2b2lkICpkYXRhLCBp bnQgZGF0YV9sZW4sIHVpbnQzMl90IGFkdmFuY2UpOworaW50CQl2bWJ1c19jaGFuX3JlY3ZfcGVl a19jYWxsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFuLAorCQkgICAgaW50IGRhdGFfbGVuLCB1 aW50MzJfdCBza2lwLAorCQkgICAgdm1idXNfYnJfY29weV9jYWxsYmFja190IGNiLCB2b2lkICpj YmFyZyk7CisKIGludAkJdm1idXNfY2hhbl9zZW5kKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFu LCB1aW50MTZfdCB0eXBlLAogCQkgICAgdWludDE2X3QgZmxhZ3MsIHZvaWQgKmRhdGEsIGludCBk bGVuLCB1aW50NjRfdCB4YWN0aWQpOwogaW50CQl2bWJ1c19jaGFuX3NlbmRfc2dsaXN0KHN0cnVj dCB2bWJ1c19jaGFubmVsICpjaGFuLApAQCAtMjEzLDEzICsyMjMsMzAgQEAKIGludAkJdm1idXNf Y2hhbl9zZW5kX3BycGxpc3Qoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4sCiAJCSAgICBzdHJ1 Y3Qgdm1idXNfZ3BhX3JhbmdlICpwcnAsIGludCBwcnBfY250LCB2b2lkICpkYXRhLAogCQkgICAg aW50IGRsZW4sIHVpbnQ2NF90IHhhY3RpZCk7CitpbnQJCXZtYnVzX2NoYW5faW92X3NlbmQoc3Ry dWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4sCisJCSAgICBjb25zdCBzdHJ1Y3QgaW92ZWMgaW92W10s IGludCBpb3ZsZW4sCisJCSAgICB2bWJ1c19icl9jb3B5X2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNi YXJnKTsKK3VpbnQzMl90CXZtYnVzX2NoYW5fd3JpdGVfYXZhaWxhYmxlKHN0cnVjdCB2bWJ1c19j aGFubmVsICpjaGFuKTsKK3VpbnQzMl90CXZtYnVzX2NoYW5fcmVhZF9hdmFpbGFibGUoc3RydWN0 IHZtYnVzX2NoYW5uZWwgKmNoYW4pOworYm9vbAkJdm1idXNfY2hhbl93cml0ZV9zaWduYWwoc3Ry dWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4sCisJCSAgICBpbnQzMl90IG1pbl9zaWduYWxfc2l6ZSk7 Cit2b2lkCQl2bWJ1c19jaGFuX3NldF9wZW5kaW5nX3NlbmRfc2l6ZShzdHJ1Y3Qgdm1idXNfY2hh bm5lbCAqY2hhbiwKKwkJICAgIHVpbnQzMl90IHNpemUpOwogCiB1aW50MzJfdAl2bWJ1c19jaGFu X2lkKGNvbnN0IHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFuKTsKIHVpbnQzMl90CXZtYnVzX2No YW5fc3ViaWR4KGNvbnN0IHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFuKTsKIGJvb2wJCXZtYnVz X2NoYW5faXNfcHJpbWFyeShjb25zdCBzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbik7CiBib29s CQl2bWJ1c19jaGFuX2lzX3Jldm9rZWQoY29uc3Qgc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4p OwotY29uc3Qgc3RydWN0IGh5cGVydl9ndWlkICoKLQkJdm1idXNfY2hhbl9ndWlkX2luc3QoY29u c3Qgc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4pOworYm9vbAkJdm1idXNfY2hhbl9pc19odnMo Y29uc3Qgc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4pOworYm9vbAkJdm1idXNfY2hhbl9pc19o dnNfY29ubl9mcm9tX2hvc3QoCisJCSAgICBjb25zdCBzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hh bik7CitpbnQJCXZtYnVzX3JlcV90bF9jb25uZWN0KHN0cnVjdCBoeXBlcnZfZ3VpZCAqLAorCQkg ICAgc3RydWN0IGh5cGVydl9ndWlkICopOworCitzdHJ1Y3QgaHlwZXJ2X2d1aWQgKgorCQl2bWJ1 c19jaGFuX2d1aWRfdHlwZShzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbik7CitzdHJ1Y3QgaHlw ZXJ2X2d1aWQgKgorCQl2bWJ1c19jaGFuX2d1aWRfaW5zdChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAq Y2hhbik7CiBpbnQJCXZtYnVzX2NoYW5fcHJwbGlzdF9uZWxlbShpbnQgYnJfc2l6ZSwgaW50IHBy cGNudF9tYXgsCiAJCSAgICBpbnQgZGxlbl9tYXgpOwogYm9vbAkJdm1idXNfY2hhbl9yeF9lbXB0 eShjb25zdCBzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbik7CmRpZmYgLS1naXQgYS9zeXMvZGV2 L2h5cGVydi9odnNvY2svaHZfc29jay5oIGIvc3lzL2Rldi9oeXBlcnYvaHZzb2NrL2h2X3NvY2su aAotLS0gYS9zeXMvZGV2L2h5cGVydi9odnNvY2svaHZfc29jay5oCisrKyBiL3N5cy9kZXYvaHlw ZXJ2L2h2c29jay9odl9zb2NrLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8qLQorICogU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1GcmVlQlNECisgKgorICogQ29weXJpZ2h0IChj KSAyMDIwIE1pY3Jvc29mdCBDb3JwLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu b3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93 aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ RVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAq IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpZm5k ZWYgX0hWU09DS19ICisjZGVmaW5lIF9IVlNPQ0tfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4K KyNpbmNsdWRlIDxzeXMvc29ja2V0dmFyLmg+CisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisKKyNp bmNsdWRlIDxkZXYvaHlwZXJ2L2luY2x1ZGUvaHlwZXJ2Lmg+CisjaW5jbHVkZSA8ZGV2L2h5cGVy di9pbmNsdWRlL3ZtYnVzLmg+CisKKy8qCisgKiBIeXBlclYgU29ja2V0IFByb3RvY29scworICov CisjZGVmaW5lCUhZUEVSVl9TT0NLX1BST1RPX1RSQU5TCQkxCS8qIFRyYW5zcG9ydCBwcm90b2Nv bCAqLworCisjZGVmaW5lCUhWQUREUl9QT1JUX0FOWQkJCS0xVQorI2RlZmluZQlIVkFERFJfUE9S VF9VTktOT1dOCQktMVUKKworI2RlZmluZSBIVlNfTElTVF9CT1VORAkJCTB4MDEKKyNkZWZpbmUg SFZTX0xJU1RfQ09OTkVDVEVECQkweDAyCisjZGVmaW5lIEhWU19MSVNUX0FMTAkJCShIVlNfTElT VF9CT1VORCB8IEhWU19MSVNUX0NPTk5FQ1RFRCkKKworc3RydWN0IHNvY2thZGRyX2h2cyB7CisJ dW5zaWduZWQgY2hhcglzYV9sZW47CisJc2FfZmFtaWx5X3QJc2FfZmFtaWx5OworCXVuc2lnbmVk IGludAlodnNfcG9ydDsKKwl1bnNpZ25lZCBjaGFyCWh2c196ZXJvW3NpemVvZihzdHJ1Y3Qgc29j a2FkZHIpIC0KKwkJCQkgc2l6ZW9mKHNhX2ZhbWlseV90KSAtCisJCQkJIHNpemVvZih1bnNpZ25l ZCBjaGFyKSAtCisJCQkJIHNpemVvZih1bnNpZ25lZCBpbnQpXTsKK307CisKK3N0cnVjdCB2bXBp cGVfcHJvdG9faGVhZGVyIHsKKwl1aW50MzJfdAkJCXZtcGlwZV9wa3RfdHlwZTsKKwl1aW50MzJf dAkJCXZtcGlwZV9kYXRhX3NpemU7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaHZzX3BrdF9oZWFk ZXIgeworCXN0cnVjdCB2bWJ1c19jaGFucGt0X2hkcgljaGFuX3BrdF9oZHI7CisJc3RydWN0IHZt cGlwZV9wcm90b19oZWFkZXIJdm1waXBlX3BrdF9oZHI7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qg aHZzX3BjYiB7CisJc3RydWN0IHNvY2tldAkJCSpzbzsJCS8qIFBvaW50ZXIgdG8gc29ja2V0ICov CisJc3RydWN0IHNvY2thZGRyX2h2cwkJbG9jYWxfYWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaHZz CQlyZW1vdGVfYWRkcjsKKworCXN0cnVjdCBoeXBlcnZfZ3VpZAkJdm1fc3J2X2lkOworCXN0cnVj dCBoeXBlcnZfZ3VpZAkJaG9zdF9zcnZfaWQ7CisKKwlzdHJ1Y3Qgdm1idXNfY2hhbm5lbAkJKmNo YW47CisJLyogQ3VycmVudCBwYWNrZXQgaGVhZGVyIG9uIHJ4IHJpbmcgKi8KKwlzdHJ1Y3QgaHZz X3BrdF9oZWFkZXIJCWh2c19wa3Q7CisJLyogQXZhaWxhYmxlIGRhdGEgaW4gcmVjZWl2ZSBiciBp biBjdXJyZW50IHBhY2tldCAqLworCXVpbnQzMl90CQkJcmVjdl9kYXRhX2xlbjsKKwkvKiBvZmZz ZXQgaW4gdGhlIHBhY2tldCAqLworCXVpbnQzMl90CQkJcmVjdl9kYXRhX29mZjsKKwlib29sCQkJ CXJiX2luaXQ7CisJLyogTGluayBsaXN0cyBmb3IgZ2xvYmFsIGJvdW5kIGFuZCBjb25uZWN0ZWQg c29ja2V0cyAqLworCUxJU1RfRU5UUlkoaHZzX3BjYikJCWJvdW5kX25leHQ7CisJTElTVF9FTlRS WShodnNfcGNiKQkJY29ubmVjdGVkX25leHQ7Cit9OworCisjZGVmaW5lIHNvMmh2c3BjYihzbykg XAorCSgoc3RydWN0IGh2c19wY2IgKikoKHNvKS0+c29fcGNiKSkKKyNkZWZpbmUgaHN2cGNiMnNv KGh2c3BjYikgXAorCSgoc3RydWN0IHNvY2tldCAqKSgoaHZzcGNiKS0+c28pKQorCit2b2lkCWh2 c19hZGRyX2luaXQoc3RydWN0IHNvY2thZGRyX2h2cyAqLCBjb25zdCBzdHJ1Y3QgaHlwZXJ2X2d1 aWQgKik7Cit2b2lkCWh2c190cmFuc19pbml0KHZvaWQpOwordm9pZAlodnNfdHJhbnNfY2xvc2Uo c3RydWN0IHNvY2tldCAqKTsKK3ZvaWQJaHZzX3RyYW5zX2RldGFjaChzdHJ1Y3Qgc29ja2V0ICop Owordm9pZAlodnNfdHJhbnNfYWJvcnQoc3RydWN0IHNvY2tldCAqKTsKK2ludAlodnNfdHJhbnNf YXR0YWNoKHN0cnVjdCBzb2NrZXQgKiwgaW50LCBzdHJ1Y3QgdGhyZWFkICopOworaW50CWh2c190 cmFuc19iaW5kKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCB0aHJl YWQgKik7CitpbnQJaHZzX3RyYW5zX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICosIGludCwgc3RydWN0 IHRocmVhZCAqKTsKK2ludAlodnNfdHJhbnNfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0 IHNvY2thZGRyICoqKTsKK2ludAlodnNfdHJhbnNfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICosCisJ ICAgIHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3QgdGhyZWFkICopOworaW50CWh2c190cmFuc19w ZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBzb2NrYWRkciAqKik7CitpbnQJaHZzX3Ry YW5zX3NvY2thZGRyKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2thZGRyICoqKTsKK2ludAlo dnNfdHJhbnNfc29yZWNlaXZlKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2thZGRyICoqLAor CSAgICBzdHJ1Y3QgdWlvICosIHN0cnVjdCBtYnVmICoqLCBzdHJ1Y3QgbWJ1ZiAqKiwgaW50ICop OworaW50CWh2c190cmFuc19zb3NlbmQoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3Qgc29ja2FkZHIg Kiwgc3RydWN0IHVpbyAqLAorCSAgICAgc3RydWN0IG1idWYgKiwgc3RydWN0IG1idWYgKiwgaW50 LCBzdHJ1Y3QgdGhyZWFkICopOworaW50CWh2c190cmFuc19kaXNjb25uZWN0KHN0cnVjdCBzb2Nr ZXQgKik7CitpbnQJaHZzX3RyYW5zX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKik7CisKK2ludAlo dnNfdHJhbnNfbG9jayh2b2lkKTsKK3ZvaWQJaHZzX3RyYW5zX3VubG9jayh2b2lkKTsKKwordm9p ZAlodnNfcmVtb3ZlX3NvY2tldF9mcm9tX2xpc3Qoc3RydWN0IHNvY2tldCAqLCB1bnNpZ25lZCBj aGFyKTsKKyNlbmRpZiAvKiBfSFZTT0NLX0ggKi8KZGlmZiAtLWdpdCBhL3N5cy9kZXYvaHlwZXJ2 L2h2c29jay9odl9zb2NrLmMgYi9zeXMvZGV2L2h5cGVydi9odnNvY2svaHZfc29jay5jCi0tLSBh L3N5cy9kZXYvaHlwZXJ2L2h2c29jay9odl9zb2NrLmMKKysrIGIvc3lzL2Rldi9oeXBlcnYvaHZz b2NrL2h2X3NvY2suYwpAQCAtMCwwICsxLDE3NDggQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1GcmVlQlNECisgKgorICogQ29weXJpZ2h0IChjKSAyMDIw IE1pY3Jvc29mdCBDb3JwLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Ug dW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisg KiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVU SE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAq IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJT RElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5 cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvZG9tYWluLmg+CisjaW5jbHVkZSA8c3lzL2xvY2suaD4K KyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVk ZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMv bXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvcHJvYy5oPgorI2luY2x1ZGUgPHN5cy9wcm90b3N3Lmg+ CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNs dWRlIDxzeXMvc3lzcHJvdG8uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxz eXMvc29ja2J1Zi5oPgorI2luY2x1ZGUgPHN5cy9zeC5oPgorI2luY2x1ZGUgPHN5cy91aW8uaD4K KworI2luY2x1ZGUgPG5ldC92bmV0Lmg+CisKKyNpbmNsdWRlIDxkZXYvaHlwZXJ2L3ZtYnVzL3Zt YnVzX3JlZy5oPgorCisjaW5jbHVkZSAiaHZfc29jay5oIgorCisjZGVmaW5lIEhWU09DS19EQkdf Tk9ORQkJCTB4MAorI2RlZmluZSBIVlNPQ0tfREJHX0lORk8JCQkweDEKKyNkZWZpbmUgSFZTT0NL X0RCR19FUlIJCQkweDIKKyNkZWZpbmUgSFZTT0NLX0RCR19WRVJCT1NFCQkweDMKKworCitTWVND VExfTk9ERShfbmV0LCBPSURfQVVUTywgaHZzb2NrLCBDVExGTEFHX1JELCAwLCAiSHlwZXJWIHNv Y2tldCIpOworCitzdGF0aWMgaW50IGh2c19kYmdfbGV2ZWw7CitTWVNDVExfSU5UKF9uZXRfaHZz b2NrLCBPSURfQVVUTywgaHZzX2RiZ19sZXZlbCwgQ1RMRkxBR19SV1RVTiwgJmh2c19kYmdfbGV2 ZWwsCisgICAgMCwgImh5cGVydiBzb2NrZXQgZGVidWcgbGV2ZWw6IDAgPSBub25lLCAxID0gaW5m bywgMiA9IGVycm9yLCAzID0gdmVyYm9zZSIpOworCisKKyNkZWZpbmUgSFZTT0NLX0RCRyhsZXZl bCwgLi4uKSBkbyB7CQkJCQlcCisJaWYgKGh2c19kYmdfbGV2ZWwgPj0gKGxldmVsKSkJCQkJCVwK KwkJcHJpbnRmKF9fVkFfQVJHU19fKTsJCQkJCVwKKwl9IHdoaWxlICgwKQorCitNQUxMT0NfREVG SU5FKE1fSFZTT0NLLCAiaHlwZXJ2X3NvY2tldCIsICJoeXBlcnYgc29ja2V0IGNvbnRyb2wgc3Ry dWN0dXJlcyIpOworCisvKiBUaGUgTVRVIGlzIDE2S0IgcGVyIGhvc3Qgc2lkZSdzIGRlc2lnbiAq LworI2RlZmluZSBIVlNPQ0tfTVRVX1NJWkUJCSgxMDI0ICogMTYpCisjZGVmaW5lIEhWU09DS19T RU5EX0JVRl9TWgkoUEFHRV9TSVpFIC0gc2l6ZW9mKHN0cnVjdCB2bXBpcGVfcHJvdG9faGVhZGVy KSkKKworI2RlZmluZSBIVlNPQ0tfSEVBREVSX0xFTgkoc2l6ZW9mKHN0cnVjdCBodnNfcGt0X2hl YWRlcikpCisKKyNkZWZpbmUgSFZTT0NLX1BLVF9MRU4ocGF5bG9hZF9sZW4pCShIVlNPQ0tfSEVB REVSX0xFTiArIFwKKwkJCQkJIHJvdW5kdXAyKHBheWxvYWRfbGVuLCA4KSArIFwKKwkJCQkJIHNp emVvZih1aW50NjRfdCkpCisKKworc3RhdGljIHN0cnVjdCBkb21haW4JCWh2X3NvY2tldF9kb21h aW47CisKKy8qCisgKiBIeXBlclYgVHJhbnNwb3J0IHNvY2tldHMKKyAqLworc3RhdGljIHN0cnVj dCBwcl91c3JyZXFzCWh2c190cmFuc191c3JyZXFzID0geworCS5wcnVfYXR0YWNoID0JCWh2c190 cmFuc19hdHRhY2gsCisJLnBydV9iaW5kID0JCWh2c190cmFuc19iaW5kLAorCS5wcnVfbGlzdGVu ID0JCWh2c190cmFuc19saXN0ZW4sCisJLnBydV9hY2NlcHQgPQkJaHZzX3RyYW5zX2FjY2VwdCwK KwkucHJ1X2Nvbm5lY3QgPQkJaHZzX3RyYW5zX2Nvbm5lY3QsCisJLnBydV9wZWVyYWRkciA9CQlo dnNfdHJhbnNfcGVlcmFkZHIsCisJLnBydV9zb2NrYWRkciA9CQlodnNfdHJhbnNfc29ja2FkZHIs CisJLnBydV9zb3JlY2VpdmUgPQlodnNfdHJhbnNfc29yZWNlaXZlLAorCS5wcnVfc29zZW5kID0J CWh2c190cmFuc19zb3NlbmQsCisJLnBydV9kaXNjb25uZWN0ID0JaHZzX3RyYW5zX2Rpc2Nvbm5l Y3QsCisJLnBydV9jbG9zZSA9CQlodnNfdHJhbnNfY2xvc2UsCisJLnBydV9kZXRhY2ggPQkJaHZz X3RyYW5zX2RldGFjaCwKKwkucHJ1X3NodXRkb3duID0JCWh2c190cmFuc19zaHV0ZG93biwKKwku cHJ1X2Fib3J0ID0JCWh2c190cmFuc19hYm9ydCwKK307CisKKy8qCisgKiBEZWZpbml0aW9ucyBv ZiBwcm90b2NvbHMgc3VwcG9ydGVkIGluIEh5cGVyViBzb2NrZXQgZG9tYWluCisgKi8KK3N0YXRp YyBzdHJ1Y3QgcHJvdG9zdwkJaHZfc29ja2V0X3Byb3Rvc3dbXSA9IHsKK3sKKwkucHJfdHlwZSA9 CQlTT0NLX1NUUkVBTSwKKwkucHJfZG9tYWluID0JCSZodl9zb2NrZXRfZG9tYWluLAorCS5wcl9w cm90b2NvbCA9CQlIWVBFUlZfU09DS19QUk9UT19UUkFOUywKKwkucHJfZmxhZ3MgPQkJUFJfQ09O TlJFUVVJUkVELAorCS5wcl9pbml0ID0JCWh2c190cmFuc19pbml0LAorCS5wcl91c3JyZXFzID0J CSZodnNfdHJhbnNfdXNycmVxcywKK30sCit9OworCitzdGF0aWMgc3RydWN0IGRvbWFpbgkJaHZf c29ja2V0X2RvbWFpbiA9IHsKKwkuZG9tX2ZhbWlseSA9CQlBRl9IWVBFUlYsCisJLmRvbV9uYW1l ID0JCSJoeXBlcnYiLAorCS5kb21fcHJvdG9zdyA9CQlodl9zb2NrZXRfcHJvdG9zdywKKwkuZG9t X3Byb3Rvc3dOUFJPVE9TVyA9CSZodl9zb2NrZXRfcHJvdG9zd1tuaXRlbXMoaHZfc29ja2V0X3By b3Rvc3cpXQorfTsKKworVk5FVF9ET01BSU5fU0VUKGh2X3NvY2tldF8pOworCisjZGVmaW5lIE1B WF9QT1JUCQkJKCh1aW50MzJfdCkweEZGRkZGRkZGKQorI2RlZmluZSBNSU5fUE9SVAkJCSgodWlu dDMyX3QpMHgwKQorCisvKiAwMDAwMDAwMC1mYWNiLTExZTYtYmQ1OC02NDAwNmE3OTg2ZDMgKi8K K3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHlwZXJ2X2d1aWQgc3J2X2lkX3RlbXBsYXRlID0geworCS5o dl9ndWlkID0geworCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweGZhLCAweGU2 LCAweDExLAorCSAgICAweGJkLCAweDU4LCAweDY0LCAweDAwLCAweDZhLCAweDc5LCAweDg2LCAw eGQzIH0KK307CisKK3N0YXRpYyBpbnQJCWh2c29ja19icl9jYWxsYmFjayh2b2lkICosIGludCwg dm9pZCAqKTsKK3N0YXRpYyB1aW50MzJfdAkJaHZzb2NrX2NhbnJlYWRfY2hlY2soc3RydWN0IGh2 c19wY2IgKik7CitzdGF0aWMgdWludDMyX3QJCWh2c29ja19jYW53cml0ZV9jaGVjayhzdHJ1Y3Qg aHZzX3BjYiAqKTsKK3N0YXRpYyBpbnQJCWh2c29ja19zZW5kX2RhdGEoc3RydWN0IHZtYnVzX2No YW5uZWwgKmNoYW4sCisgICAgc3RydWN0IHVpbyAqdWlvLCB1aW50MzJfdCB0b193cml0ZSwgc3Ry dWN0IHNvY2tidWYgKnNiKTsKKworCisKKy8qIEdsb2JhbHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3gJ CWh2c190cmFuc19zb2Nrc19zeDsKK3N0YXRpYyBzdHJ1Y3QgbXR4CQlodnNfdHJhbnNfc29ja3Nf bXR4Oworc3RhdGljIExJU1RfSEVBRCgsIGh2c19wY2IpCWh2c190cmFuc19ib3VuZF9zb2NrczsK K3N0YXRpYyBMSVNUX0hFQUQoLCBodnNfcGNiKQlodnNfdHJhbnNfY29ubmVjdGVkX3NvY2tzOwor c3RhdGljIHVpbnQzMl90CQkJcHJldmlvdXNfYXV0b19ib3VuZF9wb3J0OworCitzdGF0aWMgdm9p ZAoraHZzb2NrX3ByaW50X2d1aWQoc3RydWN0IGh5cGVydl9ndWlkICpndWlkKQoreworCXVuc2ln bmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKWd1aWQ7CisKKwlIVlNPQ0tfREJHKEhWU09D S19EQkdfSU5GTywKKwkgICAgIjB4JXgtMHgleC0weCV4LTB4JXgtMHgleC0weCV4LTB4JXgtMHgl eC0weCV4LTB4JXgtMHgleFxuIiwKKwkgICAgKih1bnNpZ25lZCBpbnQgKilwLAorCSAgICAqKCh1 bnNpZ25lZCBzaG9ydCAqKSAmcFs0XSksCisJICAgICooKHVuc2lnbmVkIHNob3J0ICopICZwWzZd KSwKKwkgICAgcFs4XSwgcFs5XSwgcFsxMF0sIHBbMTFdLCBwWzEyXSwgcFsxM10sIHBbMTRdLCBw WzE1XSk7Cit9CisKK3N0YXRpYyBib29sCitpc192YWxpZF9zcnZfaWQoY29uc3Qgc3RydWN0IGh5 cGVydl9ndWlkICppZCkKK3sKKwlyZXR1cm4gIW1lbWNtcCgmaWQtPmh2X2d1aWRbNF0sCisJICAg ICZzcnZfaWRfdGVtcGxhdGUuaHZfZ3VpZFs0XSwgc2l6ZW9mKHN0cnVjdCBoeXBlcnZfZ3VpZCkg LSA0KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorZ2V0X3BvcnRfYnlfc3J2X2lkKGNvbnN0 IHN0cnVjdCBoeXBlcnZfZ3VpZCAqc3J2X2lkKQoreworCXJldHVybiAqKChjb25zdCB1bnNpZ25l ZCBpbnQgKilzcnZfaWQpOworfQorCitzdGF0aWMgdm9pZAorc2V0X3BvcnRfYnlfc3J2X2lkKHN0 cnVjdCBoeXBlcnZfZ3VpZCAqc3J2X2lkLCB1bnNpZ25lZCBpbnQgcG9ydCkKK3sKKwkqKCh1bnNp Z25lZCBpbnQgKilzcnZfaWQpID0gcG9ydDsKK30KKworCitzdGF0aWMgdm9pZAorX19odnNfcmVt b3ZlX3BjYl9mcm9tX2xpc3Qoc3RydWN0IGh2c19wY2IgKnBjYiwgdW5zaWduZWQgY2hhciBsaXN0 KQoreworCXN0cnVjdCBodnNfcGNiICpwID0gTlVMTDsKKworCUhWU09DS19EQkcoSFZTT0NLX0RC R19WRVJCT1NFLCAiJXM6IHBjYiBpcyAlcFxuIiwgX19mdW5jX18sIHBjYik7CisKKwlpZiAoIXBj YikKKwkJcmV0dXJuOworCisJaWYgKGxpc3QgJiBIVlNfTElTVF9CT1VORCkgeworCQlMSVNUX0ZP UkVBQ0gocCwgJmh2c190cmFuc19ib3VuZF9zb2NrcywgYm91bmRfbmV4dCkKKwkJCWlmICAocCA9 PSBwY2IpCisJCQkJTElTVF9SRU1PVkUocCwgYm91bmRfbmV4dCk7CisJfQorCisJaWYgKGxpc3Qg JiBIVlNfTElTVF9DT05ORUNURUQpIHsKKwkJTElTVF9GT1JFQUNIKHAsICZodnNfdHJhbnNfY29u bmVjdGVkX3NvY2tzLCBjb25uZWN0ZWRfbmV4dCkKKwkJCWlmIChwID09IHBjYikKKwkJCQlMSVNU X1JFTU9WRShwY2IsIGNvbm5lY3RlZF9uZXh0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitfX2h2 c19yZW1vdmVfc29ja2V0X2Zyb21fbGlzdChzdHJ1Y3Qgc29ja2V0ICpzbywgdW5zaWduZWQgY2hh ciBsaXN0KQoreworCXN0cnVjdCBodnNfcGNiICpwY2IgPSBzbzJodnNwY2Ioc28pOworCisJSFZT T0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsICIlczogcGNiIGlzICVwXG4iLCBfX2Z1bmNfXywg cGNiKTsKKworCV9faHZzX3JlbW92ZV9wY2JfZnJvbV9saXN0KHBjYiwgbGlzdCk7Cit9CisKK3N0 YXRpYyB2b2lkCitfX2h2c19pbnNlcnRfc29ja2V0X29uX2xpc3Qoc3RydWN0IHNvY2tldCAqc28s IHVuc2lnbmVkIGNoYXIgbGlzdCkKK3sKKwlzdHJ1Y3QgaHZzX3BjYiAqcGNiID0gc28yaHZzcGNi KHNvKTsKKworCWlmIChsaXN0ICYgSFZTX0xJU1RfQk9VTkQpCisJCUxJU1RfSU5TRVJUX0hFQUQo Jmh2c190cmFuc19ib3VuZF9zb2NrcywKKwkJICAgcGNiLCBib3VuZF9uZXh0KTsKKworCWlmIChs aXN0ICYgSFZTX0xJU1RfQ09OTkVDVEVEKQorCQlMSVNUX0lOU0VSVF9IRUFEKCZodnNfdHJhbnNf Y29ubmVjdGVkX3NvY2tzLAorCQkgICBwY2IsIGNvbm5lY3RlZF9uZXh0KTsKK30KKwordm9pZAor aHZzX3JlbW92ZV9zb2NrZXRfZnJvbV9saXN0KHN0cnVjdCBzb2NrZXQgKnNvLCB1bnNpZ25lZCBj aGFyIGxpc3QpCit7CisJaWYgKCFzbyB8fCAhc28tPnNvX3BjYikgeworCQlIVlNPQ0tfREJHKEhW U09DS19EQkdfVkVSQk9TRSwKKwkJICAgICIlczogc29ja2V0IG9yIHNvX3BjYiBpcyBudWxsXG4i LCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwltdHhfbG9jaygmaHZzX3RyYW5zX3NvY2tz X210eCk7CisJX19odnNfcmVtb3ZlX3NvY2tldF9mcm9tX2xpc3Qoc28sIGxpc3QpOworCW10eF91 bmxvY2soJmh2c190cmFuc19zb2Nrc19tdHgpOworfQorCitzdGF0aWMgdm9pZAoraHZzX2luc2Vy dF9zb2NrZXRfb25fbGlzdChzdHJ1Y3Qgc29ja2V0ICpzbywgdW5zaWduZWQgY2hhciBsaXN0KQor eworCWlmICghc28gfHwgIXNvLT5zb19wY2IpIHsKKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZF UkJPU0UsCisJCSAgICAiJXM6IHNvY2tldCBvciBzb19wY2IgaXMgbnVsbFxuIiwgX19mdW5jX18p OworCQlyZXR1cm47CisJfQorCisJbXR4X2xvY2soJmh2c190cmFuc19zb2Nrc19tdHgpOworCV9f aHZzX2luc2VydF9zb2NrZXRfb25fbGlzdChzbywgbGlzdCk7CisJbXR4X3VubG9jaygmaHZzX3Ry YW5zX3NvY2tzX210eCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ja2V0ICoKK19faHZzX2ZpbmRf c29ja2V0X29uX2xpc3Qoc3RydWN0IHNvY2thZGRyX2h2cyAqYWRkciwgdW5zaWduZWQgY2hhciBs aXN0KQoreworCXN0cnVjdCBodnNfcGNiICpwID0gTlVMTDsKKworCWlmIChsaXN0ICYgSFZTX0xJ U1RfQk9VTkQpCisJCUxJU1RfRk9SRUFDSChwLCAmaHZzX3RyYW5zX2JvdW5kX3NvY2tzLCBib3Vu ZF9uZXh0KQorCQkJaWYgKHAtPnNvICE9IE5VTEwgJiYKKwkJCSAgICBhZGRyLT5odnNfcG9ydCA9 PSBwLT5sb2NhbF9hZGRyLmh2c19wb3J0KQorCQkJCXJldHVybiBwLT5zbzsKKworCWlmIChsaXN0 ICYgSFZTX0xJU1RfQ09OTkVDVEVEKQorCQlMSVNUX0ZPUkVBQ0gocCwgJmh2c190cmFuc19jb25u ZWN0ZWRfc29ja3MsIGNvbm5lY3RlZF9uZXh0KQorCQkJaWYgKHAtPnNvICE9IE5VTEwgJiYKKwkJ CSAgICBhZGRyLT5odnNfcG9ydCA9PSBwLT5sb2NhbF9hZGRyLmh2c19wb3J0KQorCQkJCXJldHVy biBwLT5zbzsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHNvY2tldCAqCito dnNfZmluZF9zb2NrZXRfb25fbGlzdChzdHJ1Y3Qgc29ja2FkZHJfaHZzICphZGRyLCB1bnNpZ25l ZCBjaGFyIGxpc3QpCit7CisJc3RydWN0IHNvY2tldCAqcyA9IE5VTEw7CisKKwltdHhfbG9jaygm aHZzX3RyYW5zX3NvY2tzX210eCk7CisJcyA9IF9faHZzX2ZpbmRfc29ja2V0X29uX2xpc3QoYWRk ciwgbGlzdCk7CisJbXR4X3VubG9jaygmaHZzX3RyYW5zX3NvY2tzX210eCk7CisKKwlyZXR1cm4g czsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitodnNfYWRkcl9zZXQoc3RydWN0IHNvY2thZGRy X2h2cyAqYWRkciwgdW5zaWduZWQgaW50IHBvcnQpCit7CisJbWVtc2V0KGFkZHIsIDAsIHNpemVv ZigqYWRkcikpOworCWFkZHItPnNhX2ZhbWlseSA9IEFGX0hZUEVSVjsKKwlhZGRyLT5odnNfcG9y dCA9IHBvcnQ7Cit9CisKK3ZvaWQKK2h2c19hZGRyX2luaXQoc3RydWN0IHNvY2thZGRyX2h2cyAq YWRkciwgY29uc3Qgc3RydWN0IGh5cGVydl9ndWlkICpzdnJfaWQpCit7CisJaHZzX2FkZHJfc2V0 KGFkZHIsIGdldF9wb3J0X2J5X3Nydl9pZChzdnJfaWQpKTsKK30KKworaW50CitodnNfdHJhbnNf bG9jayh2b2lkKQoreworCXN4X3hsb2NrKCZodnNfdHJhbnNfc29ja3Nfc3gpOworCXJldHVybiAo MCk7Cit9CisKK3ZvaWQKK2h2c190cmFuc191bmxvY2sodm9pZCkKK3sKKwlzeF94dW5sb2NrKCZo dnNfdHJhbnNfc29ja3Nfc3gpOworfQorCit2b2lkCitodnNfdHJhbnNfaW5pdCh2b2lkKQorewor CS8qIFNraXAgaW5pdGlhbGl6YXRpb24gb2YgZ2xvYmFscyBmb3Igbm9uLWRlZmF1bHQgaW5zdGFu Y2VzLiAqLworCWlmICghSVNfREVGQVVMVF9WTkVUKGN1cnZuZXQpKQorCQlyZXR1cm47CisKKwlp ZiAodm1fZ3Vlc3QgIT0gVk1fR1VFU1RfSFYpCisJCXJldHVybjsKKworCUhWU09DS19EQkcoSFZT T0NLX0RCR19WRVJCT1NFLAorCSAgICAiJXM6IEh5cGVyViBTb2NrZXQgaHZzX3RyYW5zX2luaXQg Y2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBJbml0aWFsaXplIEdsb2JhbHMgKi8KKwlwcmV2 aW91c19hdXRvX2JvdW5kX3BvcnQgPSBNQVhfUE9SVDsKKwlzeF9pbml0KCZodnNfdHJhbnNfc29j a3Nfc3gsICJodnNfdHJhbnNfc29ja19zeCIpOworCW10eF9pbml0KCZodnNfdHJhbnNfc29ja3Nf bXR4LAorCSAgICAiaHZzX3RyYW5zX3NvY2tzX210eCIsIE5VTEwsIE1UWF9ERUYpOworCUxJU1Rf SU5JVCgmaHZzX3RyYW5zX2JvdW5kX3NvY2tzKTsKKwlMSVNUX0lOSVQoJmh2c190cmFuc19jb25u ZWN0ZWRfc29ja3MpOworfQorCisvKgorICogQ2FsbGVkIGluIHR3byBjYXNlczoKKyAqIDEpIFdo ZW4gdXNlciBjYWxscyBzb2NrZXQoKTsKKyAqIDIpIFdoZW4gd2UgYWNjZXB0IG5ldyBpbmNvbWlu ZyBjb25uZWNpdG9uIGFuZCBjYWxsIHNvbmV3Y29ubigpLgorICovCitpbnQKK2h2c190cmFuc19h dHRhY2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90bywgc3RydWN0IHRocmVhZCAqdGQpCit7 CisJc3RydWN0IGh2c19wY2IgKnBjYiA9IHNvMmh2c3BjYihzbyk7CisKKwlIVlNPQ0tfREJHKEhW U09DS19EQkdfVkVSQk9TRSwKKwkgICAgIiVzOiBIeXBlclYgU29ja2V0IGh2c190cmFuc19hdHRh Y2ggY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoc28tPnNvX3R5cGUgIT0gU09DS19TVFJF QU0pCisJCXJldHVybiAoRVNPQ0tUTk9TVVBQT1JUKTsKKworCWlmIChwcm90byAhPSAwICYmIHBy b3RvICE9IEhZUEVSVl9TT0NLX1BST1RPX1RSQU5TKQorCQlyZXR1cm4gKEVQUk9UT05PU1VQUE9S VCk7CisKKwlpZiAocGNiICE9IE5VTEwpCisJCXJldHVybiAoRUlTQ09OTik7CisJcGNiID0gbWFs bG9jKHNpemVvZihzdHJ1Y3QgaHZzX3BjYiksIE1fSFZTT0NLLCBNX05PV0FJVCB8IE1fWkVSTyk7 CisJaWYgKHBjYiA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01FTSk7CisKKwlwY2ItPnNvID0gc287 CisJc28tPnNvX3BjYiA9ICh2b2lkICopcGNiOworCisJcmV0dXJuICgwKTsKK30KKwordm9pZAor aHZzX3RyYW5zX2RldGFjaChzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlzdHJ1Y3QgaHZzX3BjYiAq cGNiOworCisJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJICAgICIlczogSHlwZXJW IFNvY2tldCBodnNfdHJhbnNfZGV0YWNoIGNhbGxlZFxuIiwgX19mdW5jX18pOworCisJKHZvaWQp IGh2c190cmFuc19sb2NrKCk7CisJcGNiID0gc28yaHZzcGNiKHNvKTsKKwlpZiAocGNiID09IE5V TEwpIHsKKwkJaHZzX3RyYW5zX3VubG9jaygpOworCQlyZXR1cm47CisJfQorCisJaWYgKFNPTElT VEVOSU5HKHNvKSkgeworCQliemVybyhwY2IsIHNpemVvZigqcGNiKSk7CisJCWZyZWUocGNiLCBN X0hWU09DSyk7CisJfQorCisJc28tPnNvX3BjYiA9IE5VTEw7CisKKwlodnNfdHJhbnNfdW5sb2Nr KCk7Cit9CisKK2ludAoraHZzX3RyYW5zX2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBz b2NrYWRkciAqYWRkciwgc3RydWN0IHRocmVhZCAqdGQpCit7CisJc3RydWN0IGh2c19wY2IgKnBj YiA9IHNvMmh2c3BjYihzbyk7CisJc3RydWN0IHNvY2thZGRyX2h2cyAqc2EgPSAoc3RydWN0IHNv Y2thZGRyX2h2cyAqKSBhZGRyOworCWludCBlcnJvciA9IDA7CisKKwlIVlNPQ0tfREJHKEhWU09D S19EQkdfVkVSQk9TRSwKKwkgICAgIiVzOiBIeXBlclYgU29ja2V0IGh2c190cmFuc19iaW5kIGNh bGxlZFxuIiwgX19mdW5jX18pOworCisJaWYgKHNhID09IE5VTEwpIHsKKwkJcmV0dXJuIChFSU5W QUwpOworCX0KKworCWlmIChwY2IgPT0gTlVMTCkgeworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQor CisJaWYgKHNhLT5zYV9mYW1pbHkgIT0gQUZfSFlQRVJWKSB7CisJCUhWU09DS19EQkcoSFZTT0NL X0RCR19FUlIsCisJCSAgICAiJXM6IE5vdCBzdXBwb3J0ZWQsIHNhX2ZhbWlseSBpcyAldVxuIiwK KwkJICAgIF9fZnVuY19fLCBzYS0+c2FfZmFtaWx5KTsKKwkJcmV0dXJuIChFQUZOT1NVUFBPUlQp OworCX0KKworCUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCSAgICAiJXM6IGJpbmRp bmcgcG9ydCA9IDB4JXhcbiIsIF9fZnVuY19fLCBzYS0+aHZzX3BvcnQpOworCisJbXR4X2xvY2so Jmh2c190cmFuc19zb2Nrc19tdHgpOworCWlmIChfX2h2c19maW5kX3NvY2tldF9vbl9saXN0KHNh LAorCSAgICBIVlNfTElTVF9CT1VORCB8IEhWU19MSVNUX0NPTk5FQ1RFRCkpIHsKKwkJZXJyb3Ig PSBFQUREUklOVVNFOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoZSBhZGRyZXNzIGlzIGF2YWls YWJsZSBmb3IgdXMgdG8gYmluZC4KKwkJICogQWRkIHNvY2tldCB0byB0aGUgYm91bmQgbGlzdC4K KwkJICovCisJCWh2c19hZGRyX3NldCgmcGNiLT5sb2NhbF9hZGRyLCBzYS0+aHZzX3BvcnQpOwor CQlodnNfYWRkcl9zZXQoJnBjYi0+cmVtb3RlX2FkZHIsIEhWQUREUl9QT1JUX0FOWSk7CisJCV9f aHZzX2luc2VydF9zb2NrZXRfb25fbGlzdChzbywgSFZTX0xJU1RfQk9VTkQpOworCX0KKwltdHhf dW5sb2NrKCZodnNfdHJhbnNfc29ja3NfbXR4KTsKKworCXJldHVybiAoZXJyb3IpOworfQorCitp bnQKK2h2c190cmFuc19saXN0ZW4oc3RydWN0IHNvY2tldCAqc28sIGludCBiYWNrbG9nLCBzdHJ1 Y3QgdGhyZWFkICp0ZCkKK3sKKwlzdHJ1Y3QgaHZzX3BjYiAqcGNiID0gc28yaHZzcGNiKHNvKTsK KwlzdHJ1Y3Qgc29ja2V0ICpib3VuZF9zbzsKKwlpbnQgZXJyb3I7CisKKwlIVlNPQ0tfREJHKEhW U09DS19EQkdfVkVSQk9TRSwKKwkgICAgIiVzOiBIeXBlclYgU29ja2V0IGh2c190cmFuc19saXN0 ZW4gY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAocGNiID09IE5VTEwpCisJCXJldHVybiAo RUlOVkFMKTsKKworCS8qIENoZWNrIGlmIHRoZSBhZGRyZXNzIGlzIGFscmVhZHkgYm91bmQgYW5k IGl0IHdhcyBieSB1cy4gKi8KKwlib3VuZF9zbyA9IGh2c19maW5kX3NvY2tldF9vbl9saXN0KCZw Y2ItPmxvY2FsX2FkZHIsIEhWU19MSVNUX0JPVU5EKTsKKwlpZiAoYm91bmRfc28gPT0gTlVMTCB8 fCBib3VuZF9zbyAhPSBzbykgeworCQlIVlNPQ0tfREJHKEhWU09DS19EQkdfRVJSLAorCQkgICAg IiVzOiBBZGRyZXNzIG5vdCBib3VuZCBvciBub3QgYnkgdXMuXG4iLCBfX2Z1bmNfXyk7CisJCXJl dHVybiAoRUFERFJOT1RBVkFJTCk7CisJfQorCisJU09DS19MT0NLKHNvKTsKKwllcnJvciA9IHNv bGlzdGVuX3Byb3RvX2NoZWNrKHNvKTsKKwlpZiAoZXJyb3IgPT0gMCkKKwkJc29saXN0ZW5fcHJv dG8oc28sIGJhY2tsb2cpOworCVNPQ0tfVU5MT0NLKHNvKTsKKworCUhWU09DS19EQkcoSFZTT0NL X0RCR19WRVJCT1NFLAorCSAgICAiJXM6IEh5cGVyViBTb2NrZXQgbGlzdGVuIGVycm9yID0gJWRc biIsIF9fZnVuY19fLCBlcnJvcik7CisJcmV0dXJuIChlcnJvcik7Cit9CisKK2ludAoraHZzX3Ry YW5zX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICoqbmFtKQorewor CXN0cnVjdCBodnNfcGNiICpwY2IgPSBzbzJodnNwY2Ioc28pOworCisJSFZTT0NLX0RCRyhIVlNP Q0tfREJHX1ZFUkJPU0UsCisJICAgICIlczogSHlwZXJWIFNvY2tldCBodnNfdHJhbnNfYWNjZXB0 IGNhbGxlZFxuIiwgX19mdW5jX18pOworCisJaWYgKHBjYiA9PSBOVUxMKQorCQlyZXR1cm4gKEVJ TlZBTCk7CisKKwkqbmFtID0gc29kdXBzb2NrYWRkcigoc3RydWN0IHNvY2thZGRyICopICZwY2It PnJlbW90ZV9hZGRyLAorCSAgICBNX05PV0FJVCk7CisKKwlyZXR1cm4gKCgqbmFtID09IE5VTEwp ID8gRU5PTUVNIDogMCk7Cit9CisKK2ludAoraHZzX3RyYW5zX2Nvbm5lY3Qoc3RydWN0IHNvY2tl dCAqc28sIHN0cnVjdCBzb2NrYWRkciAqbmFtLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKwlzdHJ1 Y3QgaHZzX3BjYiAqcGNiID0gc28yaHZzcGNiKHNvKTsKKwlzdHJ1Y3Qgc29ja2FkZHJfaHZzICpy YWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaHZzICopbmFtOworCWJvb2wgZm91bmRfYXV0b19ib3Vu ZF9wb3J0ID0gZmFsc2U7CisJaW50IGksIGVycm9yID0gMDsKKworCUhWU09DS19EQkcoSFZTT0NL X0RCR19WRVJCT1NFLAorCSAgICAiJXM6IEh5cGVyViBTb2NrZXQgaHZzX3RyYW5zX2Nvbm5lY3Qg Y2FsbGVkLCByZW1vdGUgcG9ydCBpcyAleFxuIiwKKwkgICAgX19mdW5jX18sIHJhZGRyLT5odnNf cG9ydCk7CisKKwlpZiAocGNiID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFMKTsKKworCS8qIFZl cmlmeSB0aGUgcmVtb3RlIGFkZHJlc3MgKi8KKwlpZiAocmFkZHIgPT0gTlVMTCkKKwkJcmV0dXJu IChFSU5WQUwpOworCWlmIChyYWRkci0+c2FfZmFtaWx5ICE9IEFGX0hZUEVSVikKKwkJcmV0dXJu IChFQUZOT1NVUFBPUlQpOworCisJbXR4X2xvY2soJmh2c190cmFuc19zb2Nrc19tdHgpOworCWlm IChzby0+c29fc3RhdGUgJgorCSAgICAoU1NfSVNDT05ORUNURUR8U1NfSVNESVNDT05ORUNUSU5H fFNTX0lTQ09OTkVDVElORykpIHsKKwkJCUhWU09DS19EQkcoSFZTT0NLX0RCR19FUlIsCisJCQkg ICAgIiVzOiBzb2NrZXQgY29ubmVjdCBpbiBwcm9ncmVzc1xuIiwKKwkJCSAgICBfX2Z1bmNfXyk7 CisJCQllcnJvciA9IEVJTlBST0dSRVNTOworCQkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBG aW5kIGFuIGF2YWlsYWJsZSBwb3J0IGZvciB1cyB0byBhdXRvIGJpbmQgdGhlIGxvY2FsCisJICog YWRkcmVzcy4KKwkgKi8KKwlodnNfYWRkcl9zZXQoJnBjYi0+bG9jYWxfYWRkciwgMCk7CisKKwlm b3IgKGkgPSBwcmV2aW91c19hdXRvX2JvdW5kX3BvcnQgLSAxOworCSAgICBpICE9IHByZXZpb3Vz X2F1dG9fYm91bmRfcG9ydDsgaSAtLSkgeworCQlpZiAoaSA9PSBNSU5fUE9SVCkKKwkJCWkgPSBN QVhfUE9SVDsKKworCQlwY2ItPmxvY2FsX2FkZHIuaHZzX3BvcnQgPSBpOworCisJCWlmIChfX2h2 c19maW5kX3NvY2tldF9vbl9saXN0KCZwY2ItPmxvY2FsX2FkZHIsCisJCSAgICBIVlNfTElTVF9C T1VORCB8IEhWU19MSVNUX0NPTk5FQ1RFRCkgPT0gTlVMTCkgeworCQkJZm91bmRfYXV0b19ib3Vu ZF9wb3J0ID0gdHJ1ZTsKKwkJCXByZXZpb3VzX2F1dG9fYm91bmRfcG9ydCA9IGk7CisJCQlIVlNP Q0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkJCSAgICAiJXM6IGZvdW5kIGxvY2FsIGJvdW5k IHBvcnQgaXMgJXhcbiIsCisJCQkgICAgX19mdW5jX18sIHBjYi0+bG9jYWxfYWRkci5odnNfcG9y dCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChmb3VuZF9hdXRvX2JvdW5kX3BvcnQgPT0g dHJ1ZSkgeworCQkvKiBGb3VuZCBhdmFpbGFibGUgcG9ydCBmb3IgYXV0byBib3VuZCwgcHV0IG9u IGxpc3QgKi8KKwkJX19odnNfaW5zZXJ0X3NvY2tldF9vbl9saXN0KHNvLCBIVlNfTElTVF9CT1VO RCk7CisJCS8qIFNldCBWTSBzZXJ2aWNlIElEICovCisJCXBjYi0+dm1fc3J2X2lkID0gc3J2X2lk X3RlbXBsYXRlOworCQlzZXRfcG9ydF9ieV9zcnZfaWQoJnBjYi0+dm1fc3J2X2lkLCBwY2ItPmxv Y2FsX2FkZHIuaHZzX3BvcnQpOworCQkvKiBTZXQgaG9zdCBzZXJ2aWNlIElEIGFuZCByZW1vdGUg cG9ydCAqLworCQlwY2ItPmhvc3Rfc3J2X2lkID0gc3J2X2lkX3RlbXBsYXRlOworCQlzZXRfcG9y dF9ieV9zcnZfaWQoJnBjYi0+aG9zdF9zcnZfaWQsIHJhZGRyLT5odnNfcG9ydCk7CisJCWh2c19h ZGRyX3NldCgmcGNiLT5yZW1vdGVfYWRkciwgcmFkZHItPmh2c19wb3J0KTsKKworCQkvKiBDaGFu Z2UgdGhlIHNvY2tldCBzdGF0ZSB0byBTU19JU0NPTk5FQ1RJTkcgKi8KKwkJc29pc2Nvbm5lY3Rp bmcoc28pOworCX0gZWxzZSB7CisJCUhWU09DS19EQkcoSFZTT0NLX0RCR19FUlIsCisJCSAgICAi JXM6IE5vIGxvY2FsIHBvcnQgYXZhaWxhYmxlIGZvciBhdXRvIGJvdW5kXG4iLAorCQkgICAgX19m dW5jX18pOworCQllcnJvciA9IEVBRERSSU5VU0U7CisJfQorCisJSFZTT0NLX0RCRyhIVlNPQ0tf REJHX0lORk8sICJDb25uZWN0IHZtX3Nydl9pZCBpcyAiKTsKKwlodnNvY2tfcHJpbnRfZ3VpZCgm cGNiLT52bV9zcnZfaWQpOworCUhWU09DS19EQkcoSFZTT0NLX0RCR19JTkZPLCAiQ29ubmVjdCBo b3N0X3Nydl9pZCBpcyAiKTsKKwlodnNvY2tfcHJpbnRfZ3VpZCgmcGNiLT5ob3N0X3Nydl9pZCk7 CisKK291dDoKKwltdHhfdW5sb2NrKCZodnNfdHJhbnNfc29ja3NfbXR4KTsKKworCWlmIChmb3Vu ZF9hdXRvX2JvdW5kX3BvcnQgPT0gdHJ1ZSkKKwkJIHZtYnVzX3JlcV90bF9jb25uZWN0KCZwY2It PnZtX3Nydl9pZCwgJnBjYi0+aG9zdF9zcnZfaWQpOworCisJcmV0dXJuIChlcnJvcik7Cit9CisK K2ludAoraHZzX3RyYW5zX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28pCit7CisJc3RydWN0 IGh2c19wY2IgKnBjYjsKKworCUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCSAgICAi JXM6IEh5cGVyViBTb2NrZXQgaHZzX3RyYW5zX2Rpc2Nvbm5lY3QgY2FsbGVkXG4iLCBfX2Z1bmNf Xyk7CisKKwkodm9pZCkgaHZzX3RyYW5zX2xvY2soKTsKKwlwY2IgPSBzbzJodnNwY2Ioc28pOwor CWlmIChwY2IgPT0gTlVMTCkgeworCQlodnNfdHJhbnNfdW5sb2NrKCk7CisJCXJldHVybiAoRUlO VkFMKTsKKwl9CisKKwkvKiBJZiBzb2NrZXQgaXMgYWxyZWFkeSBkaXNjb25uZWN0ZWQsIHNraXAg dGhpcyAqLworCWlmICgoc28tPnNvX3N0YXRlICYgU1NfSVNESVNDT05ORUNURUQpID09IDApCisJ CXNvaXNkaXNjb25uZWN0aW5nKHNvKTsKKworCWh2c190cmFuc191bmxvY2soKTsKKworCXJldHVy biAoMCk7Cit9CisKKyNkZWZpbmUgU0JMT0NLV0FJVChmKQkoKChmKSAmIE1TR19ET05UV0FJVCkg PyAwIDogU0JMX1dBSVQpCitzdHJ1Y3QgaHZzX2NhbGxiYWNrX2FyZyB7CisJc3RydWN0IHVpbyAq dWlvOworCXN0cnVjdCBzb2NrYnVmICpzYjsKK307CisKK2ludAoraHZzX3RyYW5zX3NvcmVjZWl2 ZShzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICoqcGFkZHIsCisgICAgc3RydWN0 IHVpbyAqdWlvLCBzdHJ1Y3QgbWJ1ZiAqKm1wMCwgc3RydWN0IG1idWYgKipjb250cm9scCwgaW50 ICpmbGFnc3ApCit7CisJc3RydWN0IGh2c19wY2IgKnBjYiA9IHNvMmh2c3BjYihzbyk7CisJc3Ry dWN0IHNvY2tidWYgKnNiOworCXNzaXplX3Qgb3JpZ19yZXNpZDsKKwl1aW50MzJfdCBjYW5yZWFk LCB0b19yZWFkOworCWludCBmbGFncywgZXJyb3IgPSAwOworCXN0cnVjdCBodnNfY2FsbGJhY2tf YXJnIGNiYXJnOworCisJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJICAgICIlczog SHlwZXJWIFNvY2tldCBodnNfdHJhbnNfc29yZWNlaXZlIGNhbGxlZFxuIiwgX19mdW5jX18pOwor CisJaWYgKHNvLT5zb190eXBlICE9IFNPQ0tfU1RSRUFNKQorCQlyZXR1cm4gKEVJTlZBTCk7CisJ aWYgKHBjYiA9PSBOVUxMKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlpZiAoZmxhZ3NwICE9IE5V TEwpCisJCWZsYWdzID0gKmZsYWdzcCAmfiBNU0dfRU9SOworCWVsc2UKKwkJZmxhZ3MgPSAwOwor CisJaWYgKGZsYWdzICYgTVNHX1BFRUspCisJCXJldHVybiAoRU9QTk9UU1VQUCk7CisKKwkvKiBJ ZiBubyBzcGFjZSB0byBjb3B5IG91dCBhbnl0aGluZyAqLworCWlmICh1aW8tPnVpb19yZXNpZCA9 PSAwIHx8IHVpby0+dWlvX3J3ICE9IFVJT19SRUFEKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlz YiA9ICZzby0+c29fcmN2OworCisJb3JpZ19yZXNpZCA9IHVpby0+dWlvX3Jlc2lkOworCisJLyog UHJldmVudCBvdGhlciByZWFkZXJzIGZyb20gZW50ZXJpbmcgdGhlIHNvY2tldC4gKi8KKwllcnJv ciA9IHNibG9jayhzYiwgU0JMT0NLV0FJVChmbGFncykpOworCWlmIChlcnJvcikgeworCQlIVlNP Q0tfREJHKEhWU09DS19EQkdfRVJSLAorCQkgICAgIiVzOiBzYmxvY2sgcmV0dXJuZWQgZXJyb3Ig PSAlZFxuIiwgX19mdW5jX18sIGVycm9yKTsKKwkJcmV0dXJuIChlcnJvcik7CisJfQorCisJU09D S0JVRl9MT0NLKHNiKTsKKworCWNiYXJnLnVpbyA9IHVpbzsKKwljYmFyZy5zYiA9IHNiOworCS8q CisJICogSWYgdGhlIHNvY2tldCBpcyBjbG9zaW5nLCB0aGVyZSBtaWdodCBzdGlsbCBiZSBzb21l IGRhdGEKKwkgKiBpbiByeCBiciB0byByZWFkLiBIb3dldmVyIHdlIG5lZWQgdG8gbWFrZSBzdXJl CisJICogdGhlIGNoYW5uZWwgaXMgc3RpbGwgb3Blbi4KKwkgKi8KKwlpZiAoKHNiLT5zYl9zdGF0 ZSAmIFNCU19DQU5UUkNWTU9SRSkgJiYKKwkgICAgKHNvLT5zb19zdGF0ZSAmIFNTX0lTRElTQ09O TkVDVEVEKSkgeworCQkvKiBPdGhlciB0aHJlYWQgYWxyZWFkeSBjbG9zZWQgdGhlIGNoYW5uZWwg Ki8KKwkJZXJyb3IgPSBFUElQRTsKKwkJZ290byBvdXQ7CisJfQorCisJd2hpbGUgKHRydWUpIHsK KwkJd2hpbGUgKHVpby0+dWlvX3Jlc2lkID4gMCAmJgorCQkgICAgKGNhbnJlYWQgPSBodnNvY2tf Y2FucmVhZF9jaGVjayhwY2IpKSA+IDApIHsKKwkJCXRvX3JlYWQgPSBNSU4oY2FucmVhZCwgdWlv LT51aW9fcmVzaWQpOworCQkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCQkgICAg IiVzOiB0b19yZWFkID0gJXUsIHNraXAgPSAldVxuIiwgX19mdW5jX18sIHRvX3JlYWQsCisJCQkg ICAgKHVuc2lnbmVkIGludCkoc2l6ZW9mKHN0cnVjdCBodnNfcGt0X2hlYWRlcikgKworCQkJICAg IHBjYi0+cmVjdl9kYXRhX29mZikpOworCisJCQllcnJvciA9IHZtYnVzX2NoYW5fcmVjdl9wZWVr X2NhbGwocGNiLT5jaGFuLCB0b19yZWFkLAorCQkJICAgIHNpemVvZihzdHJ1Y3QgaHZzX3BrdF9o ZWFkZXIpICsgcGNiLT5yZWN2X2RhdGFfb2ZmLAorCQkJICAgIGh2c29ja19icl9jYWxsYmFjaywg KHZvaWQgKikmY2JhcmcpOworCQkJLyoKKwkJCSAqIEl0IGlzIHBvc3NpYmxlIHNvY2tldCBpcyBk aXNjb25uZWN0ZWQgYmVjYXN1ZQorCQkJICogd2UgcmVsZWFzZWQgbG9jayBpbiBodnNvY2tfYnJf Y2FsbGJhY2suIFNvIHdlCisJCQkgKiBuZWVkIHRvIGNoZWNrIHRoZSBzdGF0ZSB0byBtYWtlIHN1 cmUgaXQgaXMgbm90CisJCQkgKiBkaXNjb25uZWN0ZWQuCisJCQkgKi8KKwkJCWlmIChlcnJvciB8 fCBzby0+c29fc3RhdGUgJiBTU19JU0RJU0NPTk5FQ1RFRCkgeworCQkJCWJyZWFrOworCQkJfQor CisJCQlwY2ItPnJlY3ZfZGF0YV9sZW4gLT0gdG9fcmVhZDsKKwkJCXBjYi0+cmVjdl9kYXRhX29m ZiArPSB0b19yZWFkOworCQl9CisKKwkJaWYgKGVycm9yKQorCQkJYnJlYWs7CisKKwkJLyogQWJv cnQgaWYgc29ja2V0IGhhcyByZXBvcnRlZCBwcm9ibGVtcy4gKi8KKwkJaWYgKHNvLT5zb19lcnJv cikgeworCQkJaWYgKHNvLT5zb19lcnJvciA9PSBFU0hVVERPV04gJiYKKwkJCSAgICBvcmlnX3Jl c2lkID4gdWlvLT51aW9fcmVzaWQpIHsKKwkJCQkvKgorCQkJCSAqIEFsdGhvdWdoIHdlIGdvdCBh IEZJTiwgd2UgYWxzbyByZWNlaXZlZAorCQkJCSAqIHNvbWUgZGF0YSBpbiB0aGlzIHJvdW5kLiBE ZWxpdmVyeSBpdAorCQkJCSAqIHRvIHVzZXIuCisJCQkJICovCisJCQkJZXJyb3IgPSAwOworCQkJ fSBlbHNlIHsKKwkJCQlpZiAoc28tPnNvX2Vycm9yICE9IEVTSFVURE9XTikKKwkJCQkJZXJyb3Ig PSBzby0+c29fZXJyb3I7CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisKKwkJLyogQ2Fubm90IHJl Y2VpdmVkIG1vcmUuICovCisJCWlmIChzYi0+c2Jfc3RhdGUgJiBTQlNfQ0FOVFJDVk1PUkUpCisJ CQlicmVhazsKKworCQkvKiBXZSBhcmUgZG9uZSBpZiBidWZmZXIgaGFzIGJlZW4gZmlsbGVkICov CisJCWlmICh1aW8tPnVpb19yZXNpZCA9PSAwKQorCQkJYnJlYWs7CisKKwkJaWYgKCEoZmxhZ3Mg JiBNU0dfV0FJVEFMTCkgJiYgb3JpZ19yZXNpZCA+IHVpby0+dWlvX3Jlc2lkKQorCQkJYnJlYWs7 CisKKwkJLyogQnVmZmVyIHJpbmcgaXMgZW1wdHkgYW5kIHdlIHNoYWxsIG5vdCBibG9jayAqLwor CQlpZiAoKHNvLT5zb19zdGF0ZSAmIFNTX05CSU8pIHx8CisJCSAgICAoZmxhZ3MgJiAoTVNHX0RP TlRXQUlUfE1TR19OQklPKSkpIHsKKwkJCWlmIChvcmlnX3Jlc2lkID09IHVpby0+dWlvX3Jlc2lk KSB7CisJCQkJLyogV2UgaGF2ZSBub3QgcmVhZCBhbnl0aGluZyAqLworCQkJCWVycm9yID0gRUFH QUlOOworCQkJfQorCQkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCQkgICAgIiVz OiBub24gYmxvY2tlZCByZWFkIHJldHVybiwgZXJyb3IgJWQuXG4iLAorCQkJICAgIF9fZnVuY19f LCBlcnJvcik7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFdhaXQgYW5kIGJsb2NrIHVu dGlsIChtb3JlKSBkYXRhIGNvbWVzIGluLgorCQkgKiBOb3RlOiBEcm9wcyB0aGUgc29ja2J1ZiBs b2NrIGR1cmluZyB3YWl0LgorCQkgKi8KKwkJZXJyb3IgPSBzYndhaXQoc2IpOworCisJCWlmIChl cnJvcikKKwkJCWJyZWFrOworCisJCUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCQkg ICAgIiVzOiB3YWtlIHVwIGZyb20gc2J3YWl0LCByZWFkIGF2YWlsYWJsZSBpcyAldVxuIiwKKwkJ ICAgIF9fZnVuY19fLCB2bWJ1c19jaGFuX3JlYWRfYXZhaWxhYmxlKHBjYi0+Y2hhbikpOworCX0K Kworb3V0OgorCVNPQ0tCVUZfVU5MT0NLKHNiKTsKKworCXNidW5sb2NrKHNiKTsKKworCS8qIFdl IHJlY2lldmVkIGEgRklOIGluIHRoaXMgY2FsbCAqLworCWlmIChzby0+c29fZXJyb3IgPT0gRVNI VVRET1dOKSB7CisJCWlmIChzby0+c29fc25kLnNiX3N0YXRlICYgU0JTX0NBTlRTRU5ETU9SRSkg eworCQkJLyogU2VuZCBoYXMgYWxyZWFkeSBjbG9zZWQgKi8KKwkJCXNvaXNkaXNjb25uZWN0aW5n KHNvKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEp1c3QgY2xvc2UgdGhlIHJlY2VpdmUgc2lkZSAqLwor CQkJc29jYW50cmN2bW9yZShzbyk7CisJCX0KKwl9CisKKwlIVlNPQ0tfREJHKEhWU09DS19EQkdf VkVSQk9TRSwKKwkgICAgIiVzOiByZXR1cm5pbmcgZXJyb3IgPSAlZCwgc29fZXJyb3IgPSAlZFxu IiwKKwkgICAgX19mdW5jX18sIGVycm9yLCBzby0+c29fZXJyb3IpOworCisJcmV0dXJuIChlcnJv cik7Cit9CisKK2ludAoraHZzX3RyYW5zX3Nvc2VuZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0 IHNvY2thZGRyICphZGRyLCBzdHJ1Y3QgdWlvICp1aW8sCisgICAgc3RydWN0IG1idWYgKnRvcCwg c3RydWN0IG1idWYgKmNvbnRyb2xwLCBpbnQgZmxhZ3MsIHN0cnVjdCB0aHJlYWQgKnRkKQorewor CXN0cnVjdCBodnNfcGNiICpwY2IgPSBzbzJodnNwY2Ioc28pOworCXN0cnVjdCBzb2NrYnVmICpz YjsKKwlzc2l6ZV90IG9yaWdfcmVzaWQ7CisJdWludDMyX3QgY2Fud3JpdGUsIHRvX3dyaXRlOwor CWludCBlcnJvciA9IDA7CisKKwlIVlNPQ0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkgICAg IiVzOiBIeXBlclYgU29ja2V0IGh2c190cmFuc19zb3NlbmQgY2FsbGVkLCB1aW9fcmVzaWQgPSAl bHVcbiIsCisJICAgIF9fZnVuY19fLCB1aW8tPnVpb19yZXNpZCk7CisKKwlpZiAoc28tPnNvX3R5 cGUgIT0gU09DS19TVFJFQU0pCisJCXJldHVybiAoRUlOVkFMKTsKKwlpZiAocGNiID09IE5VTEwp CisJCXJldHVybiAoRUlOVkFMKTsKKworCS8qIElmIG5vdGhpbmcgdG8gc2VuZCAqLworCWlmICh1 aW8tPnVpb19yZXNpZCA9PSAwIHx8IHVpby0+dWlvX3J3ICE9IFVJT19XUklURSkKKwkJcmV0dXJu IChFSU5WQUwpOworCisJc2IgPSAmc28tPnNvX3NuZDsKKworCW9yaWdfcmVzaWQgPSB1aW8tPnVp b19yZXNpZDsKKworCS8qIFByZXZlbnQgb3RoZXIgd3JpdGVycyBmcm9tIGVudGVyaW5nIHRoZSBz b2NrZXQuICovCisJZXJyb3IgPSBzYmxvY2soc2IsIFNCTE9DS1dBSVQoZmxhZ3MpKTsKKwlpZiAo ZXJyb3IpIHsKKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX0VSUiwKKwkJICAgICIlczogc2Jsb2Nr IHJldHVybmVkIGVycm9yID0gJWRcbiIsIF9fZnVuY19fLCBlcnJvcik7CisJCXJldHVybiAoZXJy b3IpOworCX0KKworCVNPQ0tCVUZfTE9DSyhzYik7CisKKwlpZiAoKHNiLT5zYl9zdGF0ZSAmIFNC U19DQU5UU0VORE1PUkUpIHx8CisJICAgIHNvLT5zb19lcnJvciA9PSBFU0hVVERPV04pIHsKKwkJ ZXJyb3IgPSBFUElQRTsKKwkJZ290byBvdXQ7CisJfQorCisJd2hpbGUgKHVpby0+dWlvX3Jlc2lk ID4gMCkgeworCQljYW53cml0ZSA9IGh2c29ja19jYW53cml0ZV9jaGVjayhwY2IpOworCQlpZiAo Y2Fud3JpdGUgPT0gMCkgeworCQkJLyogV2UgaGF2ZSBzZW50IHNvbWUgZGF0YSAqLworCQkJaWYg KG9yaWdfcmVzaWQgPiB1aW8tPnVpb19yZXNpZCkKKwkJCQlicmVhazsKKwkJCS8qCisJCQkgKiBX ZSBoYXZlIG5vdCBzZW50IGFueSBkYXRhIGFuZCBpdCBpcworCQkJICogbm9uLWJsb2NrZWQgaW8K KwkJCSAqLworCQkJaWYgKHNvLT5zb19zdGF0ZSAmIFNTX05CSU8gfHwKKwkJCSAgICAoZmxhZ3Mg JiAoTVNHX05CSU8gfCBNU0dfRE9OVFdBSVQpKSAhPSAwKSB7CisJCQkJZXJyb3IgPSBFV09VTERC TE9DSzsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBXZSBhcmUgaGVy ZSBiZWNhdXNlIHRoZXJlIGlzIG5vIHNwYWNlIG9uCisJCQkJICogc2VuZCBidWZmZXIgcmluZy4g U2lnbmFsIHRoZSBvdGhlciBzaWRlCisJCQkJICogdG8gcmVhZCBhbmQgZnJlZSBtb3JlIHNwYWNl LgorCQkJCSAqIFNsZWVwIHdhaXQgdW50aWwgc3BhY2UgYXZhaWFibGUgdG8gc2VuZAorCQkJCSAq IE5vdGU6IERyb3BzIHRoZSBzb2NrYnVmIGxvY2sgZHVyaW5nIHdhaXQuCisJCQkJICovCisJCQkJ ZXJyb3IgPSBzYndhaXQoc2IpOworCisJCQkJaWYgKGVycm9yKQorCQkJCQlicmVhazsKKworCQkJ CUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCQkJCSAgICAiJXM6IHdha2UgdXAgZnJv bSBzYndhaXQsIHNwYWNlIGF2YWlsIG9uICIKKwkJCQkgICAgInR4IHJpbmcgaXMgJXVcbiIsCisJ CQkJICAgIF9fZnVuY19fLAorCQkJCSAgICB2bWJ1c19jaGFuX3dyaXRlX2F2YWlsYWJsZShwY2It PmNoYW4pKTsKKworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCXRvX3dyaXRlID0gTUlOKGNh bndyaXRlLCB1aW8tPnVpb19yZXNpZCk7CisJCXRvX3dyaXRlID0gTUlOKHRvX3dyaXRlLCBIVlNP Q0tfU0VORF9CVUZfU1opOworCisJCUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCQkg ICAgIiVzOiBjYW53cml0ZSBpcyAldSwgdG9fd3JpdGUgPSAldVxuIiwgX19mdW5jX18sCisJCSAg ICBjYW53cml0ZSwgdG9fd3JpdGUpOworCQllcnJvciA9IGh2c29ja19zZW5kX2RhdGEocGNiLT5j aGFuLCB1aW8sIHRvX3dyaXRlLCBzYik7CisKKwkJaWYgKGVycm9yKQorCQkJYnJlYWs7CisJfQor CitvdXQ6CisJU09DS0JVRl9VTkxPQ0soc2IpOworCXNidW5sb2NrKHNiKTsKKworCXJldHVybiAo ZXJyb3IpOworfQorCitpbnQKK2h2c190cmFuc19wZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywg c3RydWN0IHNvY2thZGRyICoqbmFtKQoreworCXN0cnVjdCBodnNfcGNiICpwY2IgPSBzbzJodnNw Y2Ioc28pOworCisJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJICAgICIlczogSHlw ZXJWIFNvY2tldCBodnNfdHJhbnNfcGVlcmFkZHIgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwlp ZiAocGNiID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFMKTsKKworCSpuYW0gPSBzb2R1cHNvY2th ZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikgJnBjYi0+cmVtb3RlX2FkZHIsIE1fTk9XQUlUKTsKKwor CXJldHVybiAoKCpuYW0gPT0gTlVMTCk/IEVOT01FTSA6IDApOworfQorCitpbnQKK2h2c190cmFu c19zb2NrYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICoqbmFtKQorewor CXN0cnVjdCBodnNfcGNiICpwY2IgPSBzbzJodnNwY2Ioc28pOworCisJSFZTT0NLX0RCRyhIVlNP Q0tfREJHX1ZFUkJPU0UsCisJICAgICIlczogSHlwZXJWIFNvY2tldCBodnNfdHJhbnNfc29ja2Fk ZHIgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAocGNiID09IE5VTEwpCisJCXJldHVybiAo RUlOVkFMKTsKKworCSpuYW0gPSBzb2R1cHNvY2thZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikgJnBj Yi0+bG9jYWxfYWRkciwgTV9OT1dBSVQpOworCisJcmV0dXJuICgoKm5hbSA9PSBOVUxMKT8gRU5P TUVNIDogMCk7Cit9CisKK3ZvaWQKK2h2c190cmFuc19jbG9zZShzdHJ1Y3Qgc29ja2V0ICpzbykK K3sKKwlzdHJ1Y3QgaHZzX3BjYiAqcGNiOworCisJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJP U0UsCisJICAgICIlczogSHlwZXJWIFNvY2tldCBodnNfdHJhbnNfY2xvc2UgY2FsbGVkXG4iLCBf X2Z1bmNfXyk7CisKKwkodm9pZCkgaHZzX3RyYW5zX2xvY2soKTsKKwlwY2IgPSBzbzJodnNwY2Io c28pOworCWlmICghcGNiKSB7CisJCWh2c190cmFuc191bmxvY2soKTsKKwkJcmV0dXJuOworCX0K KworCWlmIChzby0+c29fc3RhdGUgJiBTU19JU0NPTk5FQ1RFRCkgeworCQkvKiBTZW5kIGEgRklO IHRvIHBlZXIgKi8KKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCSAgICAiJXM6 IGh2c190cmFuc19jbG9zZSBzZW5kaW5nIGEgRklOIHRvIGhvc3RcbiIsIF9fZnVuY19fKTsKKwkJ KHZvaWQpIGh2c29ja19zZW5kX2RhdGEocGNiLT5jaGFuLCBOVUxMLCAwLCBOVUxMKTsKKwl9CisK KwlpZiAoc28tPnNvX3N0YXRlICYKKwkgICAgKFNTX0lTQ09OTkVDVEVEfFNTX0lTQ09OTkVDVElO R3xTU19JU0RJU0NPTk5FQ1RJTkcpKQorCQlzb2lzZGlzY29ubmVjdGVkKHNvKTsKKworCXBjYi0+ Y2hhbiA9IE5VTEw7CisJcGNiLT5zbyA9IE5VTEw7CisKKwlpZiAoU09MSVNURU5JTkcoc28pKSB7 CisJCW10eF9sb2NrKCZodnNfdHJhbnNfc29ja3NfbXR4KTsKKwkJLyogUmVtb3ZlIGZyb20gYm91 bmQgbGlzdCAqLworCQlfX2h2c19yZW1vdmVfc29ja2V0X2Zyb21fbGlzdChzbywgSFZTX0xJU1Rf Qk9VTkQpOworCQltdHhfdW5sb2NrKCZodnNfdHJhbnNfc29ja3NfbXR4KTsKKwl9CisKKwlodnNf dHJhbnNfdW5sb2NrKCk7CisKKwlyZXR1cm47Cit9CisKK3ZvaWQKK2h2c190cmFuc19hYm9ydChz dHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlzdHJ1Y3QgaHZzX3BjYiAqcGNiID0gc28yaHZzcGNiKHNv KTsKKworCUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCSAgICAiJXM6IEh5cGVyViBT b2NrZXQgaHZzX3RyYW5zX2Fib3J0IGNhbGxlZFxuIiwgX19mdW5jX18pOworCisJKHZvaWQpIGh2 c190cmFuc19sb2NrKCk7CisJaWYgKHBjYiA9PSBOVUxMKSB7CisJCWh2c190cmFuc191bmxvY2so KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChTT0xJU1RFTklORyhzbykpIHsKKwkJbXR4X2xvY2so Jmh2c190cmFuc19zb2Nrc19tdHgpOworCQkvKiBSZW1vdmUgZnJvbSBib3VuZCBsaXN0ICovCisJ CV9faHZzX3JlbW92ZV9zb2NrZXRfZnJvbV9saXN0KHNvLCBIVlNfTElTVF9CT1VORCk7CisJCW10 eF91bmxvY2soJmh2c190cmFuc19zb2Nrc19tdHgpOworCX0KKworCWlmIChzby0+c29fc3RhdGUg JiBTU19JU0NPTk5FQ1RFRCkgeworCQkodm9pZCkgc29kaXNjb25uZWN0KHNvKTsKKwl9CisJaHZz X3RyYW5zX3VubG9jaygpOworCisJcmV0dXJuOworfQorCitpbnQKK2h2c190cmFuc19zaHV0ZG93 bihzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlzdHJ1Y3QgaHZzX3BjYiAqcGNiID0gc28yaHZzcGNi KHNvKTsKKwlzdHJ1Y3Qgc29ja2J1ZiAqc2I7CisKKwlIVlNPQ0tfREJHKEhWU09DS19EQkdfVkVS Qk9TRSwKKwkgICAgIiVzOiBIeXBlclYgU29ja2V0IGh2c190cmFuc19zaHV0ZG93biBjYWxsZWRc biIsIF9fZnVuY19fKTsKKworCWlmIChwY2IgPT0gTlVMTCkKKwkJcmV0dXJuIChFSU5WQUwpOwor CisJLyoKKwkgKiBPbmx5IGdldCBjYWxsZWQgd2l0aCB0aGUgc2h1dGRvd24gbWV0aG9kIGlzIFNI VVRfV1Igb3IKKwkgKiBTSFVUX1JEV1IuCisJICogV2hlbiB0aGUgbWV0aG9kIGlzIFNIVVRfUkQg b3IgU0hVVF9SRFdSLCB0aGUgY2FsbGVyCisJICogYWxyZWFkeSBzZXQgdGhlIFNCU19DQU5UUkNW TU9SRSBvbiByZWNlaXZlIHNpZGUgc29ja2V0CisJICogYnVmZmVyLgorCSAqLworCWlmICgoc28t PnNvX3Jjdi5zYl9zdGF0ZSAmIFNCU19DQU5UUkNWTU9SRSkgPT0gMCkgeworCQkvKgorCQkgKiBT SFVUX1dSIG9ubHkgY2FzZS4KKwkJICogUmVjZWl2ZSBzaWRlIGlzIHN0aWxsIG9wZW4uIEp1c3Qg Y2xvc2UKKwkJICogdGhlIHNlbmQgc2lkZS4KKwkJICovCisJCXNvY2FudHNlbmRtb3JlKHNvKTsK Kwl9IGVsc2UgeworCQkvKiBTSFVUX1JEV1IgY2FzZSAqLworCQlpZiAoc28tPnNvX3N0YXRlICYg U1NfSVNDT05ORUNURUQpIHsKKwkJCS8qIFNlbmQgYSBGSU4gdG8gcGVlciAqLworCQkJc2IgPSAm c28tPnNvX3NuZDsKKwkJCVNPQ0tCVUZfTE9DSyhzYik7CisJCQkodm9pZCkgaHZzb2NrX3NlbmRf ZGF0YShwY2ItPmNoYW4sIE5VTEwsIDAsIHNiKTsKKwkJCVNPQ0tCVUZfVU5MT0NLKHNiKTsKKwor CQkJc29pc2Rpc2Nvbm5lY3Rpbmcoc28pOworCQl9CisJfQorCisJcmV0dXJuICgwKTsKK30KKwor LyogSW4gdGhlIFZNLCB3ZSBzdXBwb3J0IEh5cGVyLVYgU29ja2V0cyB3aXRoIEFGX0hZUEVSViwg YW5kIHRoZSBlbmRwb2ludCBpcworICogPHBvcnQ+IChzZWUgc3RydWN0IHNvY2thZGRyX2h2cyku CisgKgorICogT24gdGhlIGhvc3QsIEh5cGVyLVYgU29ja2V0cyBhcmUgc3VwcG9ydGVkIGJ5IFdp bnNvY2sgQUZfSFlQRVJWOgorICogaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvdmly dHVhbGl6YXRpb24vaHlwZXItdi1vbi13aW5kb3dzL3VzZXItCisgKiBndWlkZS9tYWtlLWludGVn cmF0aW9uLXNlcnZpY2UsIGFuZCB0aGUgZW5kcG9pbnQgaXMgPFZtSUQsIFNlcnZpY2VJZD4gd2l0 aAorICogdGhlIGJlbG93IHNvY2thZGRyOgorICoKKyAqIHN0cnVjdCBTT0NLQUREUl9IVgorICog eworICogICAgQUREUkVTU19GQU1JTFkgRmFtaWx5OworICogICAgVVNIT1JUIFJlc2VydmVkOwor ICogICAgR1VJRCBWbUlkOworICogICAgR1VJRCBTZXJ2aWNlSWQ7CisgKiB9OworICogTm90ZTog Vm1JRCBpcyBub3QgdXNlZCBieSBGcmVlQlNEIFZNIGFuZCBhY3R1YWxseSBpdCBpc24ndCB0cmFu c21pdHRlZCB2aWEKKyAqIFZNQnVzLCBiZWNhdXNlIGhlcmUgaXQncyBvYnZpb3VzIHRoZSBob3N0 IGFuZCB0aGUgVk0gY2FuIGVhc2lseSBpZGVudGlmeQorICogZWFjaCBvdGhlci4gVGhvdWdoIHRo ZSBWbUlEIGlzIHVzZWZ1bCBvbiB0aGUgaG9zdCwgZXNwZWNpYWxseSBpbiB0aGUgY2FzZQorICog b2YgV2luZG93cyBjb250YWluZXIsIEZyZWVCU0QgVk0gZG9lc24ndCBuZWVkIGl0IGF0IGFsbC4K KyAqCisgKiBUbyBiZSBjb21wYXRpYmxlIHdpdGggc2ltaWxhciBpbmZyYXN0cnVjdHVyZSBpbiBM aW51eCBWTXMsIHdlIGhhdmUKKyAqIHRvIGxpbWl0IHRoZSBhdmFpbGFibGUgR1VJRCBzcGFjZSBv ZiBTT0NLQUREUl9IViBzbyB0aGF0IHdlIGNhbiBjcmVhdGUKKyAqIGEgbWFwcGluZyBiZXR3ZWVu IEZyZWVCU0QgQUZfSFlQRVJWIHBvcnQgYW5kIFNPQ0tBRERSX0hWIFNlcnZpY2UgR1VJRC4KKyAq IFRoZSBydWxlIG9mIHdyaXRpbmcgSHlwZXItViBTb2NrZXRzIGFwcHMgb24gdGhlIGhvc3QgYW5k IGluIEZyZWVCU0QgVk0gaXM6CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoZSBvbmx5 IHZhbGlkIFNlcnZpY2UgR1VJRHMsIGZyb20gdGhlIHBlcnNwZWN0aXZlcyBvZiBib3RoIHRoZSBo b3N0IGFuZCAqCisgKiBGcmVlQlNEIFZNLCB0aGF0IGNhbiBiZSBjb25uZWN0ZWQgYnkgdGhlIG90 aGVyIGVuZCwgbXVzdCBjb25mb3JtIHRvIHRoaXMgKgorICogZm9ybWF0OiA8cG9ydD4tZmFjYi0x MWU2LWJkNTgtNjQwMDZhNzk4NmQzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCisgKgorICogV2hlbiB3ZSB3cml0ZSBhcHBzIG9uIHRoZSBob3N0 IHRvIGNvbm5lY3QoKSwgdGhlIEdVSUQgU2VydmljZUlEIGlzIHVzZWQuCisgKiBXaGVuIHdlIHdy aXRlIGFwcHMgaW4gRnJlZUJTRCBWTSB0byBjb25uZWN0KCksIHdlIG9ubHkgbmVlZCB0byBzcGVj aWZ5IHRoZQorICogcG9ydCBhbmQgdGhlIGRyaXZlciB3aWxsIGZvcm0gdGhlIEdVSUQgYW5kIHVz ZSB0aGF0IHRvIHJlcXVlc3QgdGhlIGhvc3QuCisgKgorICogRnJvbSB0aGUgcGVyc3BlY3RpdmUg b2YgRnJlZUJTRCBWTSwgdGhlIHJlbW90ZSBlcGhlbWVyYWwgcG9ydCAoaS5lLiB0aGUKKyAqIGF1 dG8tZ2VuZXJhdGVkIHJlbW90ZSBwb3J0IGZvciBhIGNvbm5lY3QgcmVxdWVzdCBpbml0aWF0ZWQg YnkgdGhlIGhvc3QncworICogY29ubmVjdCgpKSBpcyBzZXQgdG8gSFZBRERSX1BPUlRfVU5LTk9X Tiwgd2hpY2ggaXMgbm90IHJlYWx5IHVzZWQgb24gdGhlCisgKiBGcmVlQlNEIGd1ZXN0LgorICov CisKKy8qCisgKiBPbGRlciBIeXBlclYgaG9zdHMgKHZtYnVzIHZlcnNpb24gJ1ZNQlVTX1ZFUlNJ T05fV0lOMTAnIG9yIGJlZm9yZSkKKyAqIHJlc3RyaWN0cyBIeXBlclYgc29ja2V0IHJpbmcgYnVm ZmVyIHNpemUgdG8gc2l4IDRLIHBhZ2VzLiBOZXdlcgorICogSHlwZXJWIGhvc3RzIGRvZW4ndCBo YXZlIHRoaXMgbGltaXQuCisgKi8KKyNkZWZpbmUgSFZTX1JJTkdCVUZfUkNWX1NJWkUJKFBBR0Vf U0laRSAqIDYpCisjZGVmaW5lIEhWU19SSU5HQlVGX1NORF9TSVpFCShQQUdFX1NJWkUgKiA2KQor I2RlZmluZSBIVlNfUklOR0JVRl9NQVhfU0laRQkoUEFHRV9TSVpFICogNjQpCisKK3N0cnVjdCBo dnNvY2tfc2MgeworCWRldmljZV90CQlkZXY7CisJc3RydWN0IGh2c19wY2IJCSpwY2I7CisJc3Ry dWN0IHZtYnVzX2NoYW5uZWwJKmNoYW5uZWw7Cit9OworCitzdGF0aWMgYm9vbAoraHZzb2NrX2No YW5fcmVhZGFibGUoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4pCit7CisJdWludDMyX3QgcmVh ZGFibGUgPSB2bWJ1c19jaGFuX3JlYWRfYXZhaWxhYmxlKGNoYW4pOworCisJcmV0dXJuIChyZWFk YWJsZSA+PSBIVlNPQ0tfUEtUX0xFTigwKSk7Cit9CisKK3N0YXRpYyB2b2lkCitodnNvY2tfY2hh bl9jYihzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbiwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1 Y3QgaHZzX3BjYiAqcGNiID0gKHN0cnVjdCBodnNfcGNiICopIGNvbnRleHQ7CisJc3RydWN0IHNv Y2tldCAqc287CisJdWludDMyX3QgY2Fud3JpdGU7CisKKwlIVlNPQ0tfREJHKEhWU09DS19EQkdf VkVSQk9TRSwKKwkgICAgIiVzOiBob3N0IHNlbmQgdXMgYSB3YWtldXAgb24gcmIgZGF0YSwgcGNi ID0gJXBcbiIsCisJICAgIF9fZnVuY19fLCBwY2IpOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGUg c29ja2V0IGlzIHN0aWxsIGF0dGFjaGVkIGFuZCB2YWxpZC4KKwkgKiBIZXJlIHdlIGtub3cgY2hh bm5lbCBpcyBzdGlsbCBvcGVuLiBOZWVkIHRvIG1ha2UKKwkgKiBzdXJlIHRoZSBzb2NrZXQgaGFz IG5vdCBiZWVuIGNsb3NlZCBvciBmcmVlZC4KKwkgKi8KKwkodm9pZCkgaHZzX3RyYW5zX2xvY2so KTsKKwlzbyA9IGhzdnBjYjJzbyhwY2IpOworCisJaWYgKHBjYi0+Y2hhbiAhPSBOVUxMICYmIHNv ICE9IE5VTEwpIHsKKwkJLyoKKwkJICogV2FrZSB1cCByZWFkZXIgaWYgdGhlcmUgYXJlIGRhdGEg dG8gcmVhZC4KKwkJICovCisJCVNPQ0tCVUZfTE9DSygmKHNvKS0+c29fcmN2KTsKKworCQlIVlNP Q0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkJICAgICIlczogcmVhZCBhdmFpbGFibGUgPSAl dVxuIiwgX19mdW5jX18sCisJCSAgICB2bWJ1c19jaGFuX3JlYWRfYXZhaWxhYmxlKHBjYi0+Y2hh bikpOworCisJCWlmIChodnNvY2tfY2hhbl9yZWFkYWJsZShwY2ItPmNoYW4pKQorCQkJc29yd2Fr ZXVwX2xvY2tlZChzbyk7CisJCWVsc2UKKwkJCVNPQ0tCVUZfVU5MT0NLKCYoc28pLT5zb19yY3Yp OworCisJCS8qCisJCSAqIFdha2UgdXAgc2VuZGVyIGlmIHNwYWNlIGJlY29tZXMgYXZhaWxhYmxl IHRvIHdyaXRlLgorCQkgKi8KKwkJU09DS0JVRl9MT0NLKCYoc28pLT5zb19zbmQpOworCQljYW53 cml0ZSA9IGh2c29ja19jYW53cml0ZV9jaGVjayhwY2IpOworCisJCUhWU09DS19EQkcoSFZTT0NL X0RCR19WRVJCT1NFLAorCQkgICAgIiVzOiBjYW53cml0ZSA9ICV1XG4iLCBfX2Z1bmNfXywgY2Fu d3JpdGUpOworCisJCWlmIChjYW53cml0ZSA+IDApIHsKKwkJCXNvd3dha2V1cF9sb2NrZWQoc28p OworCQl9IGVsc2UgeworCQkJU09DS0JVRl9VTkxPQ0soJihzbyktPnNvX3NuZCk7CisJCX0KKwl9 CisKKwlodnNfdHJhbnNfdW5sb2NrKCk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQKK2h2 c29ja19icl9jYWxsYmFjayh2b2lkICpkYXRhcCwgaW50IGNwbGVuLCB2b2lkICpjYmFyZykKK3sK KwlzdHJ1Y3QgaHZzX2NhbGxiYWNrX2FyZyAqYXJnID0gKHN0cnVjdCBodnNfY2FsbGJhY2tfYXJn ICopY2Jhcmc7CisJc3RydWN0IHVpbyAqdWlvID0gYXJnLT51aW87CisJc3RydWN0IHNvY2tidWYg KnNiID0gYXJnLT5zYjsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKGNiYXJnID09IE5VTEwgfHwg ZGF0YXAgPT0gTlVMTCkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJSFZTT0NLX0RCRyhIVlNPQ0tf REJHX1ZFUkJPU0UsCisJICAgICIlczogY2FsbGVkLCB1aW9fcncgPSAlcywgdWlvX3Jlc2lkID0g JWx1LCBjcGxlbiA9ICV1LCAiCisJICAgICJkYXRhcCA9ICVwXG4iLAorCSAgICBfX2Z1bmNfXywg KHVpby0+dWlvX3J3ID09IFVJT19SRUFEKSA/ICJyZWFkIGZyb20gYnIiOiJ3cml0ZSB0byBiciIs CisJICAgIHVpby0+dWlvX3Jlc2lkLCBjcGxlbiwgZGF0YXApOworCisJaWYgKHNiKQorCQlTT0NL QlVGX1VOTE9DSyhzYik7CisKKwllcnJvciA9IHVpb21vdmUoZGF0YXAsIGNwbGVuLCB1aW8pOwor CisJaWYgKHNiKQorCQlTT0NLQlVGX0xPQ0soc2IpOworCisJSFZTT0NLX0RCRyhIVlNPQ0tfREJH X1ZFUkJPU0UsCisJICAgICIlczogYWZ0ZXIgdWlvbW92ZSwgdWlvX3Jlc2lkID0gJWx1LCBlcnJv ciA9ICVkXG4iLAorCSAgICBfX2Z1bmNfXywgdWlvLT51aW9fcmVzaWQsIGVycm9yKTsKKworCXJl dHVybiAoZXJyb3IpOworfQorCitzdGF0aWMgaW50CitodnNvY2tfc2VuZF9kYXRhKHN0cnVjdCB2 bWJ1c19jaGFubmVsICpjaGFuLCBzdHJ1Y3QgdWlvICp1aW8sCisgICAgdWludDMyX3QgdG9fd3Jp dGUsIHN0cnVjdCBzb2NrYnVmICpzYikKK3sKKwlzdHJ1Y3QgaHZzX3BrdF9oZWFkZXIgaHZzX3Br dDsKKwlpbnQgaHZzX3BrdGhsZW4sIGh2c19wa3RsZW4sIHBhZF9wa3RsZW4sIGhsZW4sIGVycm9y ID0gMDsKKwl1aW50NjRfdCBwYWQgPSAwOworCXN0cnVjdCBpb3ZlYyBpb3ZbM107CisJc3RydWN0 IGh2c19jYWxsYmFja19hcmcgY2Jhcmc7CisKKwlpZiAoY2hhbiA9PSBOVUxMKQorCQlyZXR1cm4g KEVOT1RDT05OKTsKKworCWhsZW4gPSBzaXplb2Yoc3RydWN0IHZtYnVzX2NoYW5wa3RfaGRyKTsK KwlodnNfcGt0aGxlbiA9IHNpemVvZihzdHJ1Y3QgaHZzX3BrdF9oZWFkZXIpOworCWh2c19wa3Rs ZW4gPSBodnNfcGt0aGxlbiArIHRvX3dyaXRlOworCXBhZF9wa3RsZW4gPSBWTUJVU19DSEFOUEtU X1RPVExFTihodnNfcGt0bGVuKTsKKworCUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAor CSAgICAiJXM6IGhsZW4gPSAldSwgaHZzX3BrdGhsZW4gPSAldSwgaHZzX3BrdGxlbiA9ICV1LCAi CisJICAgICJwYWRfcGt0bGVuID0gJXUsIGRhdGFfbGVuID0gJXVcbiIsCisJICAgIF9fZnVuY19f LCBobGVuLCBodnNfcGt0aGxlbiwgaHZzX3BrdGxlbiwgcGFkX3BrdGxlbiwgdG9fd3JpdGUpOwor CisJaHZzX3BrdC5jaGFuX3BrdF9oZHIuY3BoX3R5cGUgPSBWTUJVU19DSEFOUEtUX1RZUEVfSU5C QU5EOworCWh2c19wa3QuY2hhbl9wa3RfaGRyLmNwaF9mbGFncyA9IDA7CisJVk1CVVNfQ0hBTlBL VF9TRVRMRU4oaHZzX3BrdC5jaGFuX3BrdF9oZHIuY3BoX2hsZW4sIGhsZW4pOworCVZNQlVTX0NI QU5QS1RfU0VUTEVOKGh2c19wa3QuY2hhbl9wa3RfaGRyLmNwaF90bGVuLCBwYWRfcGt0bGVuKTsK KwlodnNfcGt0LmNoYW5fcGt0X2hkci5jcGhfeGFjdGlkID0gMDsKKworCWh2c19wa3Qudm1waXBl X3BrdF9oZHIudm1waXBlX3BrdF90eXBlID0gMTsKKwlodnNfcGt0LnZtcGlwZV9wa3RfaGRyLnZt cGlwZV9kYXRhX3NpemUgPSB0b193cml0ZTsKKworCWNiYXJnLnVpbyA9IHVpbzsKKwljYmFyZy5z YiA9IHNiOworCisJaWYgKHVpbyAmJiB0b193cml0ZSA+IDApIHsKKwkJaW92WzBdLmlvdl9iYXNl ID0gJmh2c19wa3Q7CisJCWlvdlswXS5pb3ZfbGVuID0gaHZzX3BrdGhsZW47CisJCWlvdlsxXS5p b3ZfYmFzZSA9IE5VTEw7CisJCWlvdlsxXS5pb3ZfbGVuID0gdG9fd3JpdGU7CisJCWlvdlsyXS5p b3ZfYmFzZSA9ICZwYWQ7CisJCWlvdlsyXS5pb3ZfbGVuID0gcGFkX3BrdGxlbiAtIGh2c19wa3Rs ZW47CisKKwkJZXJyb3IgPSB2bWJ1c19jaGFuX2lvdl9zZW5kKGNoYW4sIGlvdiwgMywKKwkJICAg IGh2c29ja19icl9jYWxsYmFjaywgJmNiYXJnKTsKKwl9IGVsc2UgeworCQlpZiAodG9fd3JpdGUg PT0gMCkgeworCQkJaW92WzBdLmlvdl9iYXNlID0gJmh2c19wa3Q7CisJCQlpb3ZbMF0uaW92X2xl biA9IGh2c19wa3RobGVuOworCQkJaW92WzFdLmlvdl9iYXNlID0gJnBhZDsKKwkJCWlvdlsxXS5p b3ZfbGVuID0gcGFkX3BrdGxlbiAtIGh2c19wa3RsZW47CisJCQllcnJvciA9IHZtYnVzX2NoYW5f aW92X3NlbmQoY2hhbiwgaW92LCAyLCBOVUxMLCBOVUxMKTsKKwkJfQorCX0KKworCWlmIChlcnJv cikgeworCQlIVlNPQ0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkJICAgICIlczogZXJyb3Ig PSAlZFxuIiwgX19mdW5jX18sIGVycm9yKTsKKwl9CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKwor LyoKKyAqIENoZWNrIGlmIHdlIGhhdmUgZGF0YSBvbiBjdXJyZW50IHJpbmcgYnVmZmVyIHRvIHJl YWQKKyAqIG9yIG5vdC4gSWYgbm90LCBhZHZhbmNlIHRoZSByaW5nIGJ1ZmZlciByZWFkIGluZGV4 IHRvCisgKiBuZXh0IHBhY2tldC4gVXBkYXRlIHRoZSByZWNldl9kYXRhX2xlbiBhbmQgcmVjZXZf ZGF0YV9vZmYKKyAqIHRvIG5ldyB2YWx1ZS4KKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVz IGNhbiByZWFkLgorICovCitzdGF0aWMgdWludDMyX3QKK2h2c29ja19jYW5yZWFkX2NoZWNrKHN0 cnVjdCBodnNfcGNiICpwY2IpCit7CisJdWludDMyX3QgYWR2YW5jZTsKKwl1aW50MzJfdCB0bGVu LCBobGVuLCBkbGVuOworCXVpbnQzMl90IGJ5dGVzX2NhbnJlYWQgPSAwOworCWludCBlcnJvcjsK KworCWlmIChwY2IgPT0gTlVMTCB8fCBwY2ItPmNoYW4gPT0gTlVMTCkgeworCQlwY2ItPnNvLT5z b19lcnJvciA9IEVJTzsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwkvKiBTdGlsbCBoYXZlIGRhdGEg bm90IHJlYWQgeWV0IG9uIGN1cnJlbnQgcGFja2V0ICovCisJaWYgKHBjYi0+cmVjdl9kYXRhX2xl biA+IDApCisJCXJldHVybiAocGNiLT5yZWN2X2RhdGFfbGVuKTsKKworCWlmIChwY2ItPnJiX2lu aXQpCisJCWFkdmFuY2UgPQorCQkgICAgVk1CVVNfQ0hBTlBLVF9HRVRMRU4ocGNiLT5odnNfcGt0 LmNoYW5fcGt0X2hkci5jcGhfdGxlbik7CisJZWxzZQorCQlhZHZhbmNlID0gMDsKKworCWJ5dGVz X2NhbnJlYWQgPSB2bWJ1c19jaGFuX3JlYWRfYXZhaWxhYmxlKHBjYi0+Y2hhbik7CisKKwlIVlNP Q0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkgICAgIiVzOiBieXRlc19jYW5yZWFkIG9uIGJy ID0gJXUsIGFkdmFuY2UgPSAldVxuIiwKKwkgICAgX19mdW5jX18sIGJ5dGVzX2NhbnJlYWQsIGFk dmFuY2UpOworCisJaWYgKHBjYi0+cmJfaW5pdCAmJiBieXRlc19jYW5yZWFkID09IChhZHZhbmNl ICsgc2l6ZW9mKHVpbnQ2NF90KSkpIHsKKwkJLyoKKwkJICogTm90aGluZyB0byByZWFkLiBOZWVk IHRvIGFkdmFuY2UgdGhlIHJpbmRleCBiZWZvcmUKKwkJICogY2FsbGluZyBzYndhaXQsIHNvIGhv c3Qga25vd3MgdG8gd2FrZSB1cyB1cCB3aGVuIGRhdGEKKwkJICogaXMgYXZhaWxhYmxlIHRvIHJl YWQgb24gcmIuCisJCSAqLworCQllcnJvciA9IHZtYnVzX2NoYW5fcmVjdl9pZHhhZHYocGNiLT5j aGFuLCBhZHZhbmNlKTsKKwkJaWYgKGVycm9yKSB7CisJCQlIVlNPQ0tfREJHKEhWU09DS19EQkdf RVJSLAorCQkJICAgICIlczogYWZ0ZXIgY2FsbGluZyB2bWJ1c19jaGFuX3JlY3ZfaWR4YWR2LCAi CisJCQkgICAgImdvdCBlcnJvciA9ICVkXG4iLCAgX19mdW5jX18sIGVycm9yKTsKKwkJCXJldHVy biAoMCk7CisJCX0gZWxzZSB7CisJCQlwY2ItPnJiX2luaXQgPSBmYWxzZTsKKwkJCXBjYi0+cmVj dl9kYXRhX2xlbiA9IDA7CisJCQlwY2ItPnJlY3ZfZGF0YV9vZmYgPSAwOworCQkJYnl0ZXNfY2Fu cmVhZCA9IHZtYnVzX2NoYW5fcmVhZF9hdmFpbGFibGUocGNiLT5jaGFuKTsKKworCQkJSFZTT0NL X0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCQkgICAgIiVzOiBhZHZhbmNlZCAldSBieXRlcywg IgorCQkJICAgICIgYnl0ZXNfY2FucmVhZCBvbiBiciBub3cgPSAldVxuIiwKKwkJCSAgICBfX2Z1 bmNfXywgYWR2YW5jZSwgYnl0ZXNfY2FucmVhZCk7CisKKwkJCWlmIChieXRlc19jYW5yZWFkID09 IDApCisJCQkJcmV0dXJuICgwKTsKKwkJCWVsc2UKKwkJCQlhZHZhbmNlID0gMDsKKwkJfQorCX0K KworCWlmIChieXRlc19jYW5yZWFkIDwKKwkgICAgYWR2YW5jZSArIChzaXplb2Yoc3RydWN0IGh2 c19wa3RfaGVhZGVyKSArIHNpemVvZih1aW50NjRfdCkpKQorCQlyZXR1cm4gKDApOworCisJZXJy b3IgPSB2bWJ1c19jaGFuX3JlY3ZfcGVlayhwY2ItPmNoYW4sICZwY2ItPmh2c19wa3QsCisJICAg IHNpemVvZihzdHJ1Y3QgaHZzX3BrdF9oZWFkZXIpLCBhZHZhbmNlKTsKKworCS8qIERvbid0IGhh dmUgYW55dGhpbmcgdG8gcmVhZCAqLworCWlmIChlcnJvcikgeworCQlIVlNPQ0tfREJHKEhWU09D S19EQkdfVkVSQk9TRSwKKwkJICAgICIlczogYWZ0ZXIgY2FsbGluZyB2bWJ1c19jaGFuX3JlY3Zf cGVlaywgZ290IGVycm9yID0gJWRcbiIsCisJCSAgICBfX2Z1bmNfXywgZXJyb3IpOworCQlyZXR1 cm4gKDApOworCX0KKworCS8qCisJICogV2UganVzdCByZWFkIGluIGEgbmV3IHBhY2tldCBoZWFk ZXIuIERvIHNvbWUgc2FuaXR5IGNoZWNrcy4KKwkgKi8KKwl0bGVuID0gVk1CVVNfQ0hBTlBLVF9H RVRMRU4ocGNiLT5odnNfcGt0LmNoYW5fcGt0X2hkci5jcGhfdGxlbik7CisJaGxlbiA9IFZNQlVT X0NIQU5QS1RfR0VUTEVOKHBjYi0+aHZzX3BrdC5jaGFuX3BrdF9oZHIuY3BoX2hsZW4pOworCWRs ZW4gPSBwY2ItPmh2c19wa3Qudm1waXBlX3BrdF9oZHIudm1waXBlX2RhdGFfc2l6ZTsKKwlpZiAo X19wcmVkaWN0X2ZhbHNlKGhsZW4gPCBzaXplb2Yoc3RydWN0IHZtYnVzX2NoYW5wa3RfaGRyKSkg fHwKKwkgICAgX19wcmVkaWN0X2ZhbHNlKGhsZW4gPiB0bGVuKSB8fAorCSAgICBfX3ByZWRpY3Rf ZmFsc2UodGxlbiA8IGRsZW4gKyBzaXplb2Yoc3RydWN0IGh2c19wa3RfaGVhZGVyKSkpIHsKKwkJ SFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCSAgICAiaW52YWxpZCB0bGVuKCV1KSwg aGxlbigldSkgb3IgZGxlbigldSlcbiIsCisJCSAgICB0bGVuLCBobGVuLCBkbGVuKTsKKwkJcGNi LT5zby0+c29fZXJyb3IgPSBFSU87CisJCXJldHVybiAoMCk7CisJfQorCWlmIChwY2ItPnJiX2lu aXQgPT0gZmFsc2UpCisJCXBjYi0+cmJfaW5pdCA9IHRydWU7CisKKwlIVlNPQ0tfREJHKEhWU09D S19EQkdfVkVSQk9TRSwKKwkgICAgIkdvdCBuZXcgcGt0IHRsZW4oJXUpLCBobGVuKCV1KSBvciBk bGVuKCV1KVxuIiwKKwkgICAgdGxlbiwgaGxlbiwgZGxlbik7CisKKwkvKiBUaGUgb3RoZXIgc2lk ZSBoYXMgc2VudCBhIGNsb3NlIEZJTiAqLworCWlmIChkbGVuID09IDApIHsKKwkJSFZTT0NLX0RC RyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCSAgICAiJXM6IFJlY2VpdmVkIEZJTiBmcm9tIG90aGVy IHNpZGVcbiIsIF9fZnVuY19fKTsKKwkJLyogaW5mb3JtIHRoZSBjYWxsZXIgYnkgc2V0aW5nIHNv X2Vycm9yIHRvIEVTSFVURE9XTiAqLworCQlwY2ItPnNvLT5zb19lcnJvciA9IEVTSFVURE9XTjsK Kwl9CisKKwlIVlNPQ0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkgICAgIiVzOiBjYW5yZWFk IG9uIHJlY2VpdmUgcmluZyBpcyAldSBcbiIsIF9fZnVuY19fLCBkbGVuKTsKKworCXBjYi0+cmVj dl9kYXRhX2xlbiA9IGRsZW47CisJcGNiLT5yZWN2X2RhdGFfb2ZmID0gMDsKKworCXJldHVybiAo cGNiLT5yZWN2X2RhdGFfbGVuKTsKK30KKworc3RhdGljIHVpbnQzMl90CitodnNvY2tfY2Fud3Jp dGVfY2hlY2soc3RydWN0IGh2c19wY2IgKnBjYikKK3sKKwl1aW50MzJfdCB3cml0ZWFibGU7CisJ dWludDMyX3QgcmV0OworCisJaWYgKHBjYiA9PSBOVUxMIHx8IHBjYi0+Y2hhbiA9PSBOVUxMKQor CQlyZXR1cm4gKDApOworCisJd3JpdGVhYmxlID0gdm1idXNfY2hhbl93cml0ZV9hdmFpbGFibGUo cGNiLT5jaGFuKTsKKworCS8qCisJICogV2UgbXVzdCBhbHdheXMgcmVzZXJ2ZSBhIDAtbGVuZ3Ro LXBheWxvYWQgcGFja2V0IGZvciB0aGUgRklOLgorCSAqLworCUhWU09DS19EQkcoSFZTT0NLX0RC R19WRVJCT1NFLAorCSAgICAiJXM6IHdyaXRlYWJsZSBpcyAldSwgc2hvdWxkIGJlIGdyZWF0ZXIg dGhhbiAlbHVcbiIsCisJICAgIF9fZnVuY19fLCB3cml0ZWFibGUsIEhWU09DS19QS1RfTEVOKDEp ICsgSFZTT0NLX1BLVF9MRU4oMCkpOworCisJaWYgKHdyaXRlYWJsZSA8IEhWU09DS19QS1RfTEVO KDEpICsgSFZTT0NLX1BLVF9MRU4oMCkpIHsKKwkJLyoKKwkJICogVGhlIFR4IHJpbmcgc2VlbXMg ZnVsbC4KKwkJICovCisJCXJldHVybiAoMCk7CisJfQorCisJcmV0ID0gd3JpdGVhYmxlIC0gSFZT T0NLX1BLVF9MRU4oMCkgLSBIVlNPQ0tfUEtUX0xFTigwKTsKKworCUhWU09DS19EQkcoSFZTT0NL X0RCR19WRVJCT1NFLAorCSAgICAiJXM6IGF2YWlsYWJsZSBzaXplIGlzICV1XG4iLCBfX2Z1bmNf Xywgcm91bmRkb3duMihyZXQsIDgpKTsKKworCXJldHVybiAocm91bmRkb3duMihyZXQsIDgpKTsK K30KKworc3RhdGljIHZvaWQKK2h2c29ja19zZXRfY2hhbl9wZW5kaW5nX3NlbmRfc2l6ZShzdHJ1 Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbikKK3sKKwl2bWJ1c19jaGFuX3NldF9wZW5kaW5nX3NlbmRf c2l6ZShjaGFuLAorCSAgICBIVlNPQ0tfUEtUX0xFTihIVlNPQ0tfU0VORF9CVUZfU1opKTsKK30K Kworc3RhdGljIGludAoraHZzb2NrX29wZW5fY2hhbm5lbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAq Y2hhbiwgc3RydWN0IHNvY2tldCAqc28pCit7CisJdW5zaWduZWQgaW50IHJjdmJ1Ziwgc25kYnVm OworCXN0cnVjdCBodnNfcGNiICpwY2IgPSBzbzJodnNwY2Ioc28pOworCWludCByZXQ7CisKKwlp ZiAodm1idXNfY3VycmVudF92ZXJzaW9uIDwgVk1CVVNfVkVSU0lPTl9XSU4xMF9WNSkgeworCQlz bmRidWYgPSBIVlNfUklOR0JVRl9TTkRfU0laRTsKKwkJcmN2YnVmID0gSFZTX1JJTkdCVUZfUkNW X1NJWkU7CisJfSBlbHNlIHsKKwkJc25kYnVmID0gTUFYKHNvLT5zb19zbmQuc2JfaGl3YXQsIEhW U19SSU5HQlVGX1NORF9TSVpFKTsKKwkJc25kYnVmID0gTUlOKHNuZGJ1ZiwgSFZTX1JJTkdCVUZf TUFYX1NJWkUpOworCQlzbmRidWYgPSByb3VuZGRvd24yKHNuZGJ1ZiwgUEFHRV9TSVpFKTsKKwkJ cmN2YnVmID0gTUFYKHNvLT5zb19yY3Yuc2JfaGl3YXQsIEhWU19SSU5HQlVGX1JDVl9TSVpFKTsK KwkJcmN2YnVmID0gTUlOKHJjdmJ1ZiwgSFZTX1JJTkdCVUZfTUFYX1NJWkUpOworCQlyY3ZidWYg PSByb3VuZGRvd24yKHJjdmJ1ZiwgUEFHRV9TSVpFKTsKKwl9CisKKwkvKgorCSAqIENhbiBvbmx5 IHJlYWQgd2hhdGV2ZXIgdXNlciBwcm92aWRlZCBzaXplIG9mIGRhdGEKKwkgKiBmcm9tIHJpbmcg YnVmZmVyLiBUdXJuIG9mZiBiYXRjaGVkIHJlYWRpbmcuCisJICovCisJdm1idXNfY2hhbl9zZXRf cmVhZGJhdGNoKGNoYW4sIGZhbHNlKTsKKworCXJldCA9IHZtYnVzX2NoYW5fb3BlbihjaGFuLCBz bmRidWYsIHJjdmJ1ZiwgTlVMTCwgMCwKKwkgICAgaHZzb2NrX2NoYW5fY2IsIHBjYik7CisKKwlp ZiAocmV0ICE9IDApIHsKKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX0VSUiwKKwkJICAgICIlczog ZmFpbGVkIHRvIG9wZW4gaHZzb2NrIGNoYW5uZWwsIHNuZGJ1ZiA9ICV1LCAiCisJCSAgICAicmN2 YnVmID0gJXVcbiIsIF9fZnVuY19fLCBzbmRidWYsIHJjdmJ1Zik7CisJfSBlbHNlIHsKKwkJSFZT T0NLX0RCRyhIVlNPQ0tfREJHX0lORk8sCisJCSAgICAiJXM6IGh2c29jayBjaGFubmVsIG9wZW5l ZCwgc25kYnVmID0gJXUsIGkiCisJCSAgICAicmN2YnVmID0gJXVcbiIsIF9fZnVuY19fLCBzbmRi dWYsIHJjdmJ1Zik7CisJCS8qCisJCSAqIFNlIHRoZSBwZW5kaW5nIHNlbmQgc2l6ZSBzbyB0byBy ZWNlaXZlIHdha2V1cAorCQkgKiBzaWduYWxzIGZyb20gaG9zdCB3aGVuIHRoZXJlIGlzIGVub3Vn aCBzcGFjZSBvbgorCQkgKiByeCBidWZmZXIgcmluZyB0byB3cml0ZS4KKwkJICovCisJCWh2c29j a19zZXRfY2hhbl9wZW5kaW5nX3NlbmRfc2l6ZShjaGFuKTsKKwl9CisKKwlyZXR1cm4gcmV0Owor fQorCisvKgorICogR3Vlc3QgaXMgbGlzdGVuaW5nIHBhc3NpdmVseSBvbiB0aGUgc29ja2V0LiBP cGVuIGNoYW5uZWwgYW5kCisgKiBjcmVhdGUgYSBuZXcgc29ja2V0IGZvciB0aGUgY29ubmVjaXRv bi4KKyAqLworc3RhdGljIHZvaWQKK2h2c29ja19vcGVuX2Nvbm5fcGFzc2l2ZShzdHJ1Y3Qgdm1i dXNfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNvY2tldCAqc28sCisgICAgc3RydWN0IGh2c29ja19z YyAqc2MpCit7CisJc3RydWN0IHNvY2tldCAqbmV3X3NvOworCXN0cnVjdCBodnNfcGNiICpuZXdf cGNiLCAqcGNiOworCWludCBlcnJvcjsKKworCS8qIERvIG5vdGhpbmcgaWYgc29ja2V0IGlzIG5v dCBsaXN0ZW5pbmcgKi8KKwlpZiAoKHNvLT5zb19vcHRpb25zICYgU09fQUNDRVBUQ09OTikgPT0g MCkgeworCQlIVlNPQ0tfREJHKEhWU09DS19EQkdfRVJSLAorCQkgICAgIiVzOiBzb2NrZXQgaXMg bm90IGEgbGlzdGVuaW5nIG9uZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJLyoK KwkgKiBDcmVhdGUgYSBuZXcgc29ja2V0LiBUaGlzIHdpbGwgY2FsbCBwcnVfYXR0YWNoIHRvIGNv bXBsZXRlCisJICogdGhlIHNvY2tldCBpbml0aWFsaXphdGlvbiBhbmQgcHV0IHRoZSBuZXcgc29j a2V0IG9udG8KKwkgKiBsaXN0ZW5pbmcgc29ja2V0J3Mgc29sX2luY29tcCBsaXN0LCB3YWl0aW5n IHRvIGJlIHByb21vdGVkCisJICogdG8gc29sX2NvbXAgbGlzdC4KKwkgKiBUaGUgbmV3IHNvY2tl dCBjcmVhdGVkIGhhcyByZWYgY291bnQgMC4gVGhlcmUgaXMgbm8gb3RoZXIKKwkgKiB0aHJlYWQg dGhhdCBjaGFuZ2VzIHRoZSBzdGF0ZSBvZiB0aGlzIG5ldyBvbmUgYXQgdGhlCisJICogbW9tZW50 LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGhvbGQgaXRzIGxvY2sgd2hpbGUgb3BlbmluZworCSAqIGNo YW5uZWwgYW5kIGZpbGxpbmcgb3V0IGl0cyBwY2IgaW5mb3JtYXRpb24uCisJICovCisJbmV3X3Nv ID0gc29uZXdjb25uKHNvLCAwKTsKKwlpZiAoIW5ld19zbykKKwkJSFZTT0NLX0RCRyhIVlNPQ0tf REJHX0VSUiwKKwkJICAgICIlczogY3JlYXRpbmcgbmV3IHNvY2tldCBmYWlsZWRcbiIsIF9fZnVu Y19fKTsKKworCS8qCisJICogTm93IG9wZW4gdGhlIHZtYnVzIGNoYW5uZWwuIElmIGl0IGZhaWxz LCB0aGUgc29ja2V0IHdpbGwgYmUKKwkgKiBvbiB0aGUgbGlzdGVuaW5nIHNvY2tldCdzIHNvbF9p bmNvbXAgcXVldWUgdW50aWwgaXQgaXMKKwkgKiByZXBsYWNlZCBhbmQgYWJvcnRlZC4KKwkgKi8K KwllcnJvciA9IGh2c29ja19vcGVuX2NoYW5uZWwoY2hhbiwgbmV3X3NvKTsKKwlpZiAoZXJyb3Ip IHsKKwkJbmV3X3NvLT5zb19lcnJvciA9IGVycm9yOworCQlyZXR1cm47CisJfQorCisJcGNiID0g c28tPnNvX3BjYjsKKwluZXdfcGNiID0gbmV3X3NvLT5zb19wY2I7CisKKwlodnNfYWRkcl9zZXQo JihuZXdfcGNiLT5sb2NhbF9hZGRyKSwgcGNiLT5sb2NhbF9hZGRyLmh2c19wb3J0KTsKKwkvKiBS ZW1vdGUgcG9ydCBpcyB1bmtub3duIHRvIGd1ZXN0IGluIHRoaXMgdHlwZSBvZiBjb25uZWNpdG9u ICovCisJaHZzX2FkZHJfc2V0KCYobmV3X3BjYi0+cmVtb3RlX2FkZHIpLCBIVkFERFJfUE9SVF9V TktOT1dOKTsKKwluZXdfcGNiLT5jaGFuID0gY2hhbjsKKwluZXdfcGNiLT5yZWN2X2RhdGFfbGVu ID0gMDsKKwluZXdfcGNiLT5yZWN2X2RhdGFfb2ZmID0gMDsKKwluZXdfcGNiLT5yYl9pbml0ID0g ZmFsc2U7CisKKwluZXdfcGNiLT52bV9zcnZfaWQgPSAqdm1idXNfY2hhbl9ndWlkX3R5cGUoY2hh bik7CisJbmV3X3BjYi0+aG9zdF9zcnZfaWQgPSAqdm1idXNfY2hhbl9ndWlkX2luc3QoY2hhbik7 CisKKwlodnNfaW5zZXJ0X3NvY2tldF9vbl9saXN0KG5ld19zbywgSFZTX0xJU1RfQ09OTkVDVEVE KTsKKworCXNjLT5wY2IgPSBuZXdfcGNiOworCisJLyoKKwkgKiBDaGFuZ2UgdGhlIHNvY2tldCBz dGF0ZSB0byBTU19JU0NPTk5FQ1RFRC4gVGhpcyB3aWxsIHByb21vdGUKKwkgKiB0aGUgc29ja2V0 IHRvIHNvbF9jb21wIHF1ZXVlIGFuZCB3YWtlIHVwIHRoZSB0aHJlYWQgd2hpY2gKKwkgKiBpcyBh Y2NlcHRpbmcgY29ubmVjdGlvbi4KKwkgKi8KKwlzb2lzY29ubmVjdGVkKG5ld19zbyk7Cit9CisK KworLyoKKyAqIEd1ZXN0IGlzIGFjdGl2ZWx5IGNvbm5lY3RpbmcgdG8gaG9zdC4KKyAqLworc3Rh dGljIHZvaWQKK2h2c29ja19vcGVuX2Nvbm5fYWN0aXZlKHN0cnVjdCB2bWJ1c19jaGFubmVsICpj aGFuLCBzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlzdHJ1Y3QgaHZzX3BjYiAqcGNiOworCWludCBl cnJvcjsKKworCWVycm9yID0gaHZzb2NrX29wZW5fY2hhbm5lbChjaGFuLCBzbyk7CisJaWYgKGVy cm9yKSB7CisJCXNvLT5zb19lcnJvciA9IGVycm9yOworCQlyZXR1cm47CisJfQorCisJcGNiID0g c28tPnNvX3BjYjsKKwlwY2ItPmNoYW4gPSBjaGFuOworCXBjYi0+cmVjdl9kYXRhX2xlbiA9IDA7 CisJcGNiLT5yZWN2X2RhdGFfb2ZmID0gMDsKKwlwY2ItPnJiX2luaXQgPSBmYWxzZTsKKworCW10 eF9sb2NrKCZodnNfdHJhbnNfc29ja3NfbXR4KTsKKwlfX2h2c19yZW1vdmVfc29ja2V0X2Zyb21f bGlzdChzbywgSFZTX0xJU1RfQk9VTkQpOworCV9faHZzX2luc2VydF9zb2NrZXRfb25fbGlzdChz bywgSFZTX0xJU1RfQ09OTkVDVEVEKTsKKwltdHhfdW5sb2NrKCZodnNfdHJhbnNfc29ja3NfbXR4 KTsKKworCS8qCisJICogQ2hhbmdlIHRoZSBzb2NrZXQgc3RhdGUgdG8gU1NfSVNDT05ORUNURUQu IFRoaXMgd2lsbCB3YWtlIHVwCisJICogdGhlIHRocmVhZCBzbGVlcGluZyBpbiBjb25uZWN0IGNh bGwuCisJICovCisJc29pc2Nvbm5lY3RlZChzbyk7Cit9CisKK3N0YXRpYyB2b2lkCitodnNvY2tf b3Blbl9jb25uZWN0aW9uKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFuLCBzdHJ1Y3QgaHZzb2Nr X3NjICpzYykKK3sKKwlzdHJ1Y3QgaHlwZXJ2X2d1aWQgKmluc3RfZ3VpZCwgKnR5cGVfZ3VpZDsK Kwlib29sIGNvbm5fZnJvbV9ob3N0OworCXN0cnVjdCBzb2NrYWRkcl9odnMgYWRkcjsKKwlzdHJ1 Y3Qgc29ja2V0ICpzbzsKKwlzdHJ1Y3QgaHZzX3BjYiAqcGNiOworCisJdHlwZV9ndWlkID0gKHN0 cnVjdCBoeXBlcnZfZ3VpZCAqKSB2bWJ1c19jaGFuX2d1aWRfdHlwZShjaGFuKTsKKwlpbnN0X2d1 aWQgPSAoc3RydWN0IGh5cGVydl9ndWlkICopIHZtYnVzX2NoYW5fZ3VpZF9pbnN0KGNoYW4pOwor CWNvbm5fZnJvbV9ob3N0ID0gdm1idXNfY2hhbl9pc19odnNfY29ubl9mcm9tX2hvc3QoY2hhbik7 CisKKwlIVlNPQ0tfREJHKEhWU09DS19EQkdfSU5GTywgInR5cGVfZ3VpZCBpcyAiKTsKKwlodnNv Y2tfcHJpbnRfZ3VpZCh0eXBlX2d1aWQpOworCUhWU09DS19EQkcoSFZTT0NLX0RCR19JTkZPLCAi aW5zdF9ndWlkIGlzICIpOworCWh2c29ja19wcmludF9ndWlkKGluc3RfZ3VpZCk7CisJSFZTT0NL X0RCRyhIVlNPQ0tfREJHX0lORk8sICJjb25uZWN0aW9uICVzIGhvc3RcbiIsCisJICAgIChjb25u X2Zyb21faG9zdCA9PSB0cnVlICkgPyAiZnJvbSIgOiAidG8iKTsKKworCS8qCisJICogVGhlIGxp c3RlbmluZyBwb3J0IHNob3VsZCBiZSBpbiBbMCwgTUFYX0xJU1RFTl9QT1JUXQorCSAqLworCWlm ICghaXNfdmFsaWRfc3J2X2lkKHR5cGVfZ3VpZCkpCisJCXJldHVybjsKKworCS8qCisJICogVGhl cmUgc2hvdWxkIGJlIGEgYm91bmQgc29ja2V0IGFscmVhZHkgY3JlYXRlZCBubyBtYXR0ZXIKKwkg KiBpdCBpcyBhIHBhc3NpdmUgb3IgYWN0aXZlIGNvbm5lY3Rpb24uCisJICogRm9yIGhvc3QgaW5p dGlhdGVkIGNvbm5lY3Rpb24gKHBhc3NpdmUgb24gZ3Vlc3Qgc2lkZSksCisJICogdGhlICB0eXBl X2d1aWQgY29udGFpbnMgdGhlIHBvcnQgd2hpY2ggZ3Vlc3QgaXMgYm91bmQgYW5kCisJICogbGlz dGVuaW5nLgorCSAqIEZvciB0aGUgZ3Vlc3QgaW5pdGlhdGVkIGNvbm5lY3Rpb24gKGFjdGl2ZSBv biBndWVzdCBzaWRlKSwKKwkgKiB0aGUgaW5zdF9ndWlkIGNvbnRhaW5zIHRoZSBwb3J0IHRoYXQg Z3Vlc3QgaGFzIGF1dG8gYm91bmQKKwkgKiB0by4KKwkgKi8KKwlodnNfYWRkcl9pbml0KCZhZGRy LCBjb25uX2Zyb21faG9zdCA/IHR5cGVfZ3VpZCA6IGluc3RfZ3VpZCk7CisJc28gPSBodnNfZmlu ZF9zb2NrZXRfb25fbGlzdCgmYWRkciwgSFZTX0xJU1RfQk9VTkQpOworCWlmICghc28pIHsKKwkJ SFZTT0NLX0RCRyhIVlNPQ0tfREJHX0VSUiwKKwkJICAgICIlczogbm8gYm91bmQgc29ja2V0IGZv dW5kIGZvciBwb3J0ICV1XG4iLAorCQkgICAgX19mdW5jX18sIGFkZHIuaHZzX3BvcnQpOworCQly ZXR1cm47CisJfQorCisJaWYgKGNvbm5fZnJvbV9ob3N0KSB7CisJCWh2c29ja19vcGVuX2Nvbm5f cGFzc2l2ZShjaGFuLCBzbywgc2MpOworCX0gZWxzZSB7CisJCSh2b2lkKSBodnNfdHJhbnNfbG9j aygpOworCQlwY2IgPSBzby0+c29fcGNiOworCQlpZiAocGNiICYmIHBjYi0+c28pIHsKKwkJCXNj LT5wY2IgPSBzbzJodnNwY2Ioc28pOworCQkJaHZzb2NrX29wZW5fY29ubl9hY3RpdmUoY2hhbiwg c28pOworCQl9IGVsc2UgeworCQkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCQkg ICAgIiVzOiBjaGFubmVsIGRldGFjaGVkIGJlZm9yZSBvcGVuXG4iLCBfX2Z1bmNfXyk7CisJCX0K KwkJaHZzX3RyYW5zX3VubG9jaygpOworCX0KKworfQorCitzdGF0aWMgaW50CitodnNvY2tfcHJv YmUoZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsID0gdm1i dXNfZ2V0X2NoYW5uZWwoZGV2KTsKKworCWlmICghY2hhbm5lbCB8fCAhdm1idXNfY2hhbl9pc19o dnMoY2hhbm5lbCkpIHsKKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCSAgICAi aHZzb2NrX3Byb2JlIGNhbGxlZCBidXQgbm90IGEgaHZzb2NrIGNoYW5uZWwgaWQgJXVcbiIsCisJ CSAgICB2bWJ1c19jaGFuX2lkKGNoYW5uZWwpKTsKKworCQlyZXR1cm4gRU5YSU87CisJfSBlbHNl IHsKKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCSAgICAiaHZzb2NrX3Byb2Jl IGdvdCBhIGh2c29jayBjaGFubmVsIGlkICV1XG4iLAorCQkgICAgdm1idXNfY2hhbl9pZChjaGFu bmVsKSk7CisKKwkJcmV0dXJuIEJVU19QUk9CRV9ERUZBVUxUOworCX0KK30KKworc3RhdGljIGlu dAoraHZzb2NrX2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IHZtYnVzX2NoYW5uZWwg KmNoYW5uZWwgPSB2bWJ1c19nZXRfY2hhbm5lbChkZXYpOworCXN0cnVjdCBodnNvY2tfc2MgKnNj ID0gKHN0cnVjdCBodnNvY2tfc2MgKilkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisKKwlIVlNPQ0tf REJHKEhWU09DS19EQkdfVkVSQk9TRSwgImh2c29ja19hdHRhY2ggY2FsbGVkLlxuIik7CisKKwlo dnNvY2tfb3Blbl9jb25uZWN0aW9uKGNoYW5uZWwsIHNjKTsKKworCS8qCisJICogQWx3YXlzIHJl dHVybiBzdWNjZXNzLiBPbiBlcnJvciB0aGUgaG9zdCB3aWxsIHJlc2NpbmQgdGhlIGRldmljZQor CSAqIGluIDMwIHNlY29uZHMgYW5kIHdlIGNhbiBkbyBjbGVhbnVwIGF0IHRoYXQgdGltZSBpbgor CSAqIHZtYnVzX2NoYW5fbXNncHJvY19jaHJlc2NpbmQoKS4KKwkgKi8KKwlyZXR1cm4gKDApOwor fQorCitzdGF0aWMgaW50CitodnNvY2tfZGV0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3Qg aHZzb2NrX3NjICpzYyA9IChzdHJ1Y3QgaHZzb2NrX3NjICopZGV2aWNlX2dldF9zb2Z0YyhkZXYp OworCXN0cnVjdCBzb2NrZXQgKnNvOworCWludCBlcnJvciwgcmV0cnk7CisKKwlpZiAoYm9vdHZl cmJvc2UpCisJCWRldmljZV9wcmludGYoZGV2LCAiaHZzb2NrX2RldGFjaCBjYWxsZWQuXG4iKTsK KworCUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLCAiaHZzb2NrX2RldGFjaCBjYWxsZWQu XG4iKTsKKworCWlmIChzYy0+cGNiICE9IE5VTEwpIHsKKwkJKHZvaWQpIGh2c190cmFuc19sb2Nr KCk7CisKKwkJc28gPSBoc3ZwY2Iyc28oc2MtPnBjYik7CisJCWlmIChzbykgeworCQkJLyogQ2xv c2UgdGhlIGNvbm5lY3Rpb24gKi8KKwkJCWlmIChzby0+c29fc3RhdGUgJgorCQkJICAgIChTU19J U0NPTk5FQ1RFRHxTU19JU0NPTk5FQ1RJTkd8U1NfSVNESVNDT05ORUNUSU5HKSkKKwkJCQlzb2lz ZGlzY29ubmVjdGVkKHNvKTsKKwkJfQorCisJCW10eF9sb2NrKCZodnNfdHJhbnNfc29ja3NfbXR4 KTsKKwkJX19odnNfcmVtb3ZlX3BjYl9mcm9tX2xpc3Qoc2MtPnBjYiwKKwkJICAgIEhWU19MSVNU X0JPVU5EIHwgSFZTX0xJU1RfQ09OTkVDVEVEKTsKKwkJbXR4X3VubG9jaygmaHZzX3RyYW5zX3Nv Y2tzX210eCk7CisKKwkJLyoKKwkJICogQ2xvc2UgY2hhbm5lbCB3aGlsZSBubyByZWFkZXIgYW5k IHNlbmRlciBhcmUgd29ya2luZworCQkgKiBvbiB0aGUgYnVmZmVyIHJpbmdzLgorCQkgKi8KKwkJ aWYgKHNvKSB7CisJCQlyZXRyeSA9IDA7CisJCQl3aGlsZSAoKGVycm9yID0gc2Jsb2NrKCZzby0+ c29fcmN2LCAwKSkgPT0KKwkJCSAgICBFV09VTERCTE9DSykgeworCQkJCS8qCisJCQkJICogU29t ZW9uZSBpcyByZWFkaW5nLCByeCBiciBpcyBidXN5CisJCQkJICovCisJCQkJc29pc2Rpc2Nvbm5l Y3RlZChzbyk7CisJCQkJREVMQVkoNTAwKTsKKwkJCQlIVlNPQ0tfREJHKEhWU09DS19EQkdfVkVS Qk9TRSwKKwkJCQkgICAgIndhaXRpbmcgZm9yIHJ4IHJlYWRlciB0byBleGl0LCAiCisJCQkJICAg ICJyZXRyeSA9ICVkXG4iLCByZXRyeSsrKTsKKwkJCX0KKwkJCXJldHJ5ID0gMDsKKwkJCXdoaWxl ICgoZXJyb3IgPSBzYmxvY2soJnNvLT5zb19zbmQsIDApKSA9PQorCQkJICAgIEVXT1VMREJMT0NL KSB7CisJCQkJLyoKKwkJCQkgKiBTb21lb25lIGlzIHNlbmRpbmcsIHR4IGJyIGlzIGJ1c3kKKwkJ CQkgKi8KKwkJCQlzb2lzZGlzY29ubmVjdGVkKHNvKTsKKwkJCQlERUxBWSg1MDApOworCQkJCUhW U09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCQkJCSAgICAid2FpdGluZyBmb3IgdHggc2Vu ZGVyIHRvIGV4aXQsICIKKwkJCQkgICAgInJldHJ5ID0gJWRcbiIsIHJldHJ5KyspOworCQkJfQor CQl9CisKKworCQliemVybyhzYy0+cGNiLCBzaXplb2Yoc3RydWN0IGh2c19wY2IpKTsKKwkJZnJl ZShzYy0+cGNiLCBNX0hWU09DSyk7CisJCXNjLT5wY2IgPSBOVUxMOworCisJCWlmIChzbykgewor CQkJc2J1bmxvY2soJnNvLT5zb19yY3YpOworCQkJc2J1bmxvY2soJnNvLT5zb19zbmQpOworCQkJ c28tPnNvX3BjYiA9IE5VTEw7CisJCX0KKworCQlodnNfdHJhbnNfdW5sb2NrKCk7CisJfQorCisJ dm1idXNfY2hhbl9jbG9zZSh2bWJ1c19nZXRfY2hhbm5lbChkZXYpKTsKKworCXJldHVybiAoMCk7 Cit9CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgaHZzb2NrX21ldGhvZHNbXSA9IHsKKwkvKiBE ZXZpY2UgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGRldmljZV9wcm9iZSwgaHZzb2NrX3Byb2Jl KSwKKwlERVZNRVRIT0QoZGV2aWNlX2F0dGFjaCwgaHZzb2NrX2F0dGFjaCksCisJREVWTUVUSE9E KGRldmljZV9kZXRhY2gsIGh2c29ja19kZXRhY2gpLAorCURFVk1FVEhPRF9FTkQKK307CisKK3N0 YXRpYyBkcml2ZXJfdCBodnNvY2tfZHJpdmVyID0geworCSJodl9zb2NrIiwKKwlodnNvY2tfbWV0 aG9kcywKKwlzaXplb2Yoc3RydWN0IGh2c29ja19zYykKK307CisKK3N0YXRpYyBkZXZjbGFzc190 IGh2c29ja19kZXZjbGFzczsKKworRFJJVkVSX01PRFVMRShodnNvY2ssIHZtYnVzLCBodnNvY2tf ZHJpdmVyLCBodnNvY2tfZGV2Y2xhc3MsIE5VTEwsIE5VTEwpOworTU9EVUxFX1ZFUlNJT04oaHZz b2NrLCAxKTsKK01PRFVMRV9ERVBFTkQoaHZzb2NrLCB2bWJ1cywgMSwgMSwgMSk7CmRpZmYgLS1n aXQgYS9zeXMvY29uZi9maWxlcy54ODYgYi9zeXMvY29uZi9maWxlcy54ODYKLS0tIGEvc3lzL2Nv bmYvZmlsZXMueDg2CisrKyBiL3N5cy9jb25mL2ZpbGVzLng4NgpAQCAtMTEzLDYgKzExMyw3IEBA CiBkZXYvaHdwbWMvaHdwbWNfdW5jb3JlLmMJb3B0aW9uYWwJaHdwbWMKIGRldi9od3BtYy9od3Bt Y190c2MuYwkJb3B0aW9uYWwJaHdwbWMKIGRldi9od3BtYy9od3BtY194ODYuYwkJb3B0aW9uYWwJ aHdwbWMKK2Rldi9oeXBlcnYvaHZzb2NrL2h2X3NvY2suYwkJCQlvcHRpb25hbAloeXBlcnYKIGRl di9oeXBlcnYvcGNpYi92bWJ1c19wY2liLmMJCQkJb3B0aW9uYWwJaHlwZXJ2IHBjaQogZGV2L2h5 cGVydi9uZXR2c2MvaG5fbnZzLmMJCQkJb3B0aW9uYWwJaHlwZXJ2CiBkZXYvaHlwZXJ2L25ldHZz Yy9obl9ybmRpcy5jCQkJCW9wdGlvbmFsCWh5cGVydgoK --b1_79d16d788f9a405bf42820916438b2a4--