From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sagar Arun Kamble Subject: [PATCH 1/8] drm/i915: Separate GuC/HuC specific functionality from intel_uc Date: Mon, 28 Aug 2017 15:26:07 +0530 Message-ID: <1503914174-3974-1-git-send-email-sagar.a.kamble@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 76FA16E2AC for ; Mon, 28 Aug 2017 09:52:52 +0000 (UTC) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org UmVtb3ZlZCB1bm5lY2Vzc2FyeSBpbnRlbF91Yy5oIGluY2x1ZGVzIGFzIGl0IGlzIHByZXNlbnQg aW4gaTkxNV9kcnYuaC4KQ3JlYXRlZCBpbnRlbF9ndWMuYyBhbmQgaW50ZWxfZ3VjLmggZm9yIHBs YWNpbmcgR3VDIHNwZWNpZmljIGNvZGUuCkNyZWF0ZWQgaW50ZWxfaHVjLmggdG8gcmVmZXIgdG8g SHVDIHNwZWNpZmljIGZ1bmN0aW9ucy4KCnYyOiBQcmVwYXJlZCBpbnRlbF91Y19jb21tb24uaC4g aHVjX2F1dGggY29kZSBkZWNsYXJhdGlvbiBhZGp1c3RlZC4KTW92ZWQgZW5hYmxlL2Rpc2FibGVf Y29tbXVuaWNhdGlvbiB0byBpbnRlbF91Yy5jIChNaWNoYWwpCgpDYzogQ2hyaXMgV2lsc29uIDxj aHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNjOiBNaWNoYWwgV2FqZGVjemtvIDxtaWNoYWwud2Fq ZGVjemtvQGludGVsLmNvbT4KQ2M6IERhbmllbGUgQ2VyYW9sbyBTcHVyaW8gPGRhbmllbGUuY2Vy YW9sb3NwdXJpb0BpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IFNhZ2FyIEFydW4gS2FtYmxlIDxz YWdhci5hLmthbWJsZUBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZp bGUgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMg ICAgICAgICAgICB8ICAgMSAtCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNz aW9uLmMgfCAgIDEgLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmMgICAgICAgICAg IHwgMTkzICsrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2d1Yy5oICAgICAgICAgICB8IDIwMCArKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5jICAgIHwgICAxIC0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2h1Yy5jICAgICAgICAgICB8ICA1MCArLS0tLS0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2h1Yy5oICAgICAgICAgICB8ICAzOCArKysrKwogZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfdWMuYyAgICAgICAgICAgIHwgMTI4ICstLS0tLS0tLS0tLS0tLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfdWMuaCAgICAgICAgICAgIHwgMjU0ICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19jb21tb24uaCAg ICAgfCAxMDEgKysrKysrKysrKysrCiAxMSBmaWxlcyBjaGFuZ2VkLCA1NDUgaW5zZXJ0aW9ucygr KSwgNDIzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2d1Yy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZ3VjLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9odWMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Vj X2NvbW1vbi5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCA4OTJmNTJiLi5lZmM1YjMwIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9NYWtlZmlsZQpAQCAtNTksNiArNTksNyBAQCBpOTE1LXkgKz0gaTkxNV9jbWRfcGFy c2VyLm8gXAogCiAjIGdlbmVyYWwtcHVycG9zZSBtaWNyb2NvbnRyb2xsZXIgKEd1Qykgc3VwcG9y dAogaTkxNS15ICs9IGludGVsX3VjLm8gXAorCSAgaW50ZWxfZ3VjLm8gXAogCSAgaW50ZWxfZ3Vj X2N0Lm8gXAogCSAgaW50ZWxfZ3VjX2xvZy5vIFwKIAkgIGludGVsX2d1Y19sb2FkZXIubyBcCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCBmMTBhMDc4Li4yYWU3MzBjIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmMKQEAgLTUwLDcgKzUwLDYgQEAKICNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCiAj aW5jbHVkZSAiaTkxNV92Z3B1LmgiCiAjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCi0jaW5jbHVkZSAi aW50ZWxfdWMuaCIKIAogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlcjsKIApkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jCmluZGV4IDQ4YTFlOTMuLjYwMmFl OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24u YworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMKQEAgLTIz LDcgKzIzLDYgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+CiAjaW5jbHVkZSAi aTkxNV9kcnYuaCIKLSNpbmNsdWRlICJpbnRlbF91Yy5oIgogCiAjaW5jbHVkZSA8dHJhY2UvZXZl bnRzL2RtYV9mZW5jZS5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9ndWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OGEwZTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuYwpAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIENvcHly aWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJl c3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5z ZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBu ZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBB VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwor ICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKwor aW50IGludGVsX2d1Y19zZW5kX25vcChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIGNvbnN0IHUzMiAq YWN0aW9uLCB1MzIgbGVuKQoreworCVdBUk4oMSwgIlVuZXhwZWN0ZWQgc2VuZDogYWN0aW9uPSUj eFxuIiwgKmFjdGlvbik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyB2b2lkIGdlbjhf Z3VjX3JhaXNlX2lycShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCit7CisJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKKworCUk5MTVfV1JJVEUoR1VD X1NFTkRfSU5URVJSVVBULCBHVUNfU0VORF9UUklHR0VSKTsKK30KKwordm9pZCBpbnRlbF9ndWNf aW5pdF9lYXJseShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCit7CisJaW50ZWxfZ3VjX2N0X2luaXRf ZWFybHkoJmd1Yy0+Y3QpOworCisJbXV0ZXhfaW5pdCgmZ3VjLT5zZW5kX211dGV4KTsKKwlndWMt PnNlbmQgPSBpbnRlbF9ndWNfc2VuZF9ub3A7CisJZ3VjLT5ub3RpZnkgPSBnZW44X2d1Y19yYWlz ZV9pcnE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaTkxNV9yZWdfdCBndWNfc2VuZF9yZWcoc3RydWN0 IGludGVsX2d1YyAqZ3VjLCB1MzIgaSkKK3sKKwlHRU1fQlVHX09OKCFndWMtPnNlbmRfcmVncy5i YXNlKTsKKwlHRU1fQlVHX09OKCFndWMtPnNlbmRfcmVncy5jb3VudCk7CisJR0VNX0JVR19PTihp ID49IGd1Yy0+c2VuZF9yZWdzLmNvdW50KTsKKworCXJldHVybiBfTU1JTyhndWMtPnNlbmRfcmVn cy5iYXNlICsgNCAqIGkpOworfQorCit2b2lkIGludGVsX2d1Y19pbml0X3NlbmRfcmVncyhzdHJ1 Y3QgaW50ZWxfZ3VjICpndWMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKKwllbnVtIGZvcmNld2FrZV9kb21haW5zIGZ3X2RvbWFpbnMg PSAwOworCXVuc2lnbmVkIGludCBpOworCisJZ3VjLT5zZW5kX3JlZ3MuYmFzZSA9IGk5MTVfbW1p b19yZWdfb2Zmc2V0KFNPRlRfU0NSQVRDSCgwKSk7CisJZ3VjLT5zZW5kX3JlZ3MuY291bnQgPSBT T0ZUX1NDUkFUQ0hfQ09VTlQgLSAxOworCisJZm9yIChpID0gMDsgaSA8IGd1Yy0+c2VuZF9yZWdz LmNvdW50OyBpKyspIHsKKwkJZndfZG9tYWlucyB8PSBpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2Zv cl9yZWcoZGV2X3ByaXYsCisJCQkJCWd1Y19zZW5kX3JlZyhndWMsIGkpLAorCQkJCQlGV19SRUdf UkVBRCB8IEZXX1JFR19XUklURSk7CisJfQorCWd1Yy0+c2VuZF9yZWdzLmZ3X2RvbWFpbnMgPSBm d19kb21haW5zOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBNTUlP IGJhc2VkIGhvc3QgdG8gR3VDIGludGVyZmFjZS4KKyAqLworaW50IGludGVsX2d1Y19zZW5kX21t aW8oc3RydWN0IGludGVsX2d1YyAqZ3VjLCBjb25zdCB1MzIgKmFjdGlvbiwgdTMyIGxlbikKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBndWNfdG9faTkxNShndWMpOwor CXUzMiBzdGF0dXM7CisJaW50IGk7CisJaW50IHJldDsKKworCUdFTV9CVUdfT04oIWxlbik7CisJ R0VNX0JVR19PTihsZW4gPiBndWMtPnNlbmRfcmVncy5jb3VudCk7CisKKwkvKiBJZiBDVCBpcyBh dmFpbGFibGUsIHdlIGV4cGVjdCB0byB1c2UgTU1JTyBvbmx5IGR1cmluZyBpbml0L2ZpbmkgKi8K KwlHRU1fQlVHX09OKEhBU19HVUNfQ1QoZGV2X3ByaXYpICYmCisJCSphY3Rpb24gIT0gSU5URUxf R1VDX0FDVElPTl9SRUdJU1RFUl9DT01NQU5EX1RSQU5TUE9SVF9CVUZGRVIgJiYKKwkJKmFjdGlv biAhPSBJTlRFTF9HVUNfQUNUSU9OX0RFUkVHSVNURVJfQ09NTUFORF9UUkFOU1BPUlRfQlVGRkVS KTsKKworCW11dGV4X2xvY2soJmd1Yy0+c2VuZF9tdXRleCk7CisJaW50ZWxfdW5jb3JlX2ZvcmNl d2FrZV9nZXQoZGV2X3ByaXYsIGd1Yy0+c2VuZF9yZWdzLmZ3X2RvbWFpbnMpOworCisJZm9yIChp ID0gMDsgaSA8IGxlbjsgaSsrKQorCQlJOTE1X1dSSVRFKGd1Y19zZW5kX3JlZyhndWMsIGkpLCBh Y3Rpb25baV0pOworCisJUE9TVElOR19SRUFEKGd1Y19zZW5kX3JlZyhndWMsIGkgLSAxKSk7CisK KwlpbnRlbF9ndWNfbm90aWZ5KGd1Yyk7CisKKwkvKgorCSAqIE5vIEd1QyBjb21tYW5kIHNob3Vs ZCBldmVyIHRha2UgbG9uZ2VyIHRoYW4gMTBtcy4KKwkgKiBGYXN0IGNvbW1hbmRzIHNob3VsZCBz dGlsbCBjb21wbGV0ZSBpbiAxMHVzLgorCSAqLworCXJldCA9IF9faW50ZWxfd2FpdF9mb3JfcmVn aXN0ZXJfZncoZGV2X3ByaXYsCisJCQkJCSAgIGd1Y19zZW5kX3JlZyhndWMsIDApLAorCQkJCQkg ICBJTlRFTF9HVUNfUkVDVl9NQVNLLAorCQkJCQkgICBJTlRFTF9HVUNfUkVDVl9NQVNLLAorCQkJ CQkgICAxMCwgMTAsICZzdGF0dXMpOworCWlmIChzdGF0dXMgIT0gSU5URUxfR1VDX1NUQVRVU19T VUNDRVNTKSB7CisJCS8qCisJCSAqIEVpdGhlciB0aGUgR3VDIGV4cGxpY2l0bHkgcmV0dXJuZWQg YW4gZXJyb3IgKHdoaWNoCisJCSAqIHdlIGNvbnZlcnQgdG8gLUVJTyBoZXJlKSBvciBubyByZXNw b25zZSBhdCBhbGwgd2FzCisJCSAqIHJlY2VpdmVkIHdpdGhpbiB0aGUgdGltZW91dCBsaW1pdCAo LUVUSU1FRE9VVCkKKwkJICovCisJCWlmIChyZXQgIT0gLUVUSU1FRE9VVCkKKwkJCXJldCA9IC1F SU87CisKKwkJRFJNX1dBUk4oIklOVEVMX0dVQ19TRU5EOiBBY3Rpb24gMHglWCBmYWlsZWQ7Igor CQkJICIgcmV0PSVkIHN0YXR1cz0weCUwOFggcmVzcG9uc2U9MHglMDhYXG4iLAorCQkJIGFjdGlv blswXSwgcmV0LCBzdGF0dXMsIEk5MTVfUkVBRChTT0ZUX1NDUkFUQ0goMTUpKSk7CisJfQorCisJ aW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoZGV2X3ByaXYsIGd1Yy0+c2VuZF9yZWdzLmZ3X2Rv bWFpbnMpOworCW11dGV4X3VubG9jaygmZ3VjLT5zZW5kX211dGV4KTsKKworCXJldHVybiByZXQ7 Cit9CisKK2ludCBpbnRlbF9ndWNfc2FtcGxlX2ZvcmNld2FrZShzdHJ1Y3QgaW50ZWxfZ3VjICpn dWMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3VjX3RvX2k5MTUo Z3VjKTsKKwl1MzIgYWN0aW9uWzJdOworCisJYWN0aW9uWzBdID0gSU5URUxfR1VDX0FDVElPTl9T QU1QTEVfRk9SQ0VXQUtFOworCS8qIFdhUnNEaXNhYmxlQ29hcnNlUG93ZXJHYXRpbmc6c2tsLGJ4 dCAqLworCWlmICghaW50ZWxfZW5hYmxlX3JjNigpIHx8IE5FRURTX1dhUnNEaXNhYmxlQ29hcnNl UG93ZXJHYXRpbmcoZGV2X3ByaXYpKQorCQlhY3Rpb25bMV0gPSAwOworCWVsc2UKKwkJLyogYml0 IDAgYW5kIDEgYXJlIGZvciBSZW5kZXIgYW5kIE1lZGlhIGRvbWFpbiBzZXBhcmF0ZWx5ICovCisJ CWFjdGlvblsxXSA9IEdVQ19GT1JDRVdBS0VfUkVOREVSIHwgR1VDX0ZPUkNFV0FLRV9NRURJQTsK KworCXJldHVybiBpbnRlbF9ndWNfc2VuZChndWMsIGFjdGlvbiwgQVJSQVlfU0laRShhY3Rpb24p KTsKK30KKworLyoqCisgKiBpbnRlbF9ndWNfYXV0aF9odWMoKSAtIGF1dGhlbnRpY2F0ZSBIdUMK KyAqCisgKiBUcmlnZ2VycyBhIEh1QyBmdyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHRvIHRoZSBH dUMgdmlhIGludGVsX2d1Y19hY3Rpb25fCisgKiBhdXRoZW50aWNhdGVfaHVjIGludGVyZmFjZS4K KyAqLwordm9pZCBpbnRlbF9ndWNfYXV0aF9odWMoc3RydWN0IGludGVsX2d1YyAqZ3VjLCBzdHJ1 Y3QgaW50ZWxfdWNfZncgKmh1Y19mdykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBndWNfdG9faTkxNShndWMpOworCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOworCWludCBy ZXQ7CisJdTMyIGRhdGFbMl07CisKKwl2bWEgPSBpOTE1X2dlbV9vYmplY3RfZ2d0dF9waW4oaHVj X2Z3LT5vYmosIE5VTEwsIDAsIDAsCisJCQkJUElOX09GRlNFVF9CSUFTIHwgR1VDX1dPUENNX1RP UCk7CisJaWYgKElTX0VSUih2bWEpKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBpbiBodWMg Zncgb2JqZWN0ICVkXG4iLAorCQkJCShpbnQpUFRSX0VSUih2bWEpKTsKKwkJcmV0dXJuOworCX0K KworCS8qIFNwZWNpZnkgYXV0aCBhY3Rpb24gYW5kIHdoZXJlIHB1YmxpYyBzaWduYXR1cmUgaXMu ICovCisJZGF0YVswXSA9IElOVEVMX0dVQ19BQ1RJT05fQVVUSEVOVElDQVRFX0hVQzsKKwlkYXRh WzFdID0gZ3VjX2dndHRfb2Zmc2V0KHZtYSkgKyBodWNfZnctPnJzYV9vZmZzZXQ7CisKKwlyZXQg PSBpbnRlbF9ndWNfc2VuZChndWMsIGRhdGEsIEFSUkFZX1NJWkUoZGF0YSkpOworCWlmIChyZXQp IHsKKwkJRFJNX0VSUk9SKCJIdUM6IEd1QyBkaWQgbm90IGFjayBBdXRoIHJlcXVlc3QgJWRcbiIs IHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIENoZWNrIGF1dGhlbnRpY2F0aW9uIHN0YXR1 cywgaXQgc2hvdWxkIGJlIGRvbmUgYnkgbm93ICovCisJcmV0ID0gaW50ZWxfd2FpdF9mb3JfcmVn aXN0ZXIoZGV2X3ByaXYsCisJCQkJSFVDX1NUQVRVUzIsCisJCQkJSFVDX0ZXX1ZFUklGSUVELAor CQkJCUhVQ19GV19WRVJJRklFRCwKKwkJCQk1MCk7CisKKwlpZiAocmV0KSB7CisJCURSTV9FUlJP UigiSHVDOiBBdXRoZW50aWNhdGlvbiBmYWlsZWQgJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0Owor CX0KKworb3V0OgorCWk5MTVfdm1hX3VucGluKHZtYSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1 Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMjk4MzAKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaApAQCAtMCwwICsxLDIw MCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9uCisgKgorICog UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz b24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk b2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBT b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u CisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdh cmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVy bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAq CisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGlu IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4K KyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZF TlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBG T1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworI2lmbmRlZiBf SU5URUxfR1VDX0hfCisjZGVmaW5lIF9JTlRFTF9HVUNfSF8KKworI2luY2x1ZGUgImludGVsX2d1 Y19md2lmLmgiCisjaW5jbHVkZSAiaTkxNV9ndWNfcmVnLmgiCisjaW5jbHVkZSAiaW50ZWxfcmlu Z2J1ZmZlci5oIgorI2luY2x1ZGUgImludGVsX2d1Y19jdC5oIgorI2luY2x1ZGUgImk5MTVfdm1h LmgiCisKK3N0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdDsKKworLyoKKyAqIFRoaXMgc3RydWN0 dXJlIHByaW1hcmlseSBkZXNjcmliZXMgdGhlIEdFTSBvYmplY3Qgc2hhcmVkIHdpdGggdGhlIEd1 Qy4KKyAqIFRoZSBzcGVjcyBzb21ldGltZXMgcmVmZXIgdG8gdGhpcyBvYmplY3QgYXMgYSAiR3VD IGNvbnRleHQiLCBidXQgd2UgdXNlCisgKiB0aGUgdGVybSAiY2xpZW50IiB0byBhdm9pZCBjb25m dXNpb24gd2l0aCBoYXJkd2FyZSBjb250ZXh0cy4gVGhpcworICogR0VNIG9iamVjdCBpcyBoZWxk IGZvciB0aGUgZW50aXJlIGxpZmV0aW1lIG9mIG91ciBpbnRlcmFjdGlvbiB3aXRoCisgKiB0aGUg R3VDLCBiZWluZyBhbGxvY2F0ZWQgYmVmb3JlIHRoZSBHdUMgaXMgbG9hZGVkIHdpdGggaXRzIGZp cm13YXJlLgorICogQmVjYXVzZSB0aGVyZSdzIG5vIHdheSB0byB1cGRhdGUgdGhlIGFkZHJlc3Mg dXNlZCBieSB0aGUgR3VDIGFmdGVyCisgKiBpbml0aWFsaXNhdGlvbiwgdGhlIHNoYXJlZCBvYmpl Y3QgbXVzdCBzdGF5IHBpbm5lZCBpbnRvIHRoZSBHR1RUIGFzCisgKiBsb25nIGFzIHRoZSBHdUMg aXMgaW4gdXNlLiBXZSBhbHNvIGtlZXAgdGhlIGZpcnN0IHBhZ2UgKG9ubHkpIG1hcHBlZAorICog aW50byBrZXJuZWwgYWRkcmVzcyBzcGFjZSwgYXMgaXQgaW5jbHVkZXMgc2hhcmVkIGRhdGEgdGhh dCBtdXN0IGJlCisgKiB1cGRhdGVkIG9uIGV2ZXJ5IHJlcXVlc3Qgc3VibWlzc2lvbi4KKyAqCisg KiBUaGUgc2luZ2xlIEdFTSBvYmplY3QgZGVzY3JpYmVkIGhlcmUgaXMgYWN0dWFsbHkgbWFkZSB1 cCBvZiBzZXZlcmFsCisgKiBzZXBhcmF0ZSBhcmVhcywgYXMgZmFyIGFzIHRoZSBHdUMgaXMgY29u Y2VybmVkLiBUaGUgZmlyc3QgcGFnZSAoa2VwdAorICoga21hcCdkKSBpbmNsdWRlcyB0aGUgInBy b2Nlc3MgZGVzY3JpcHRvciIgd2hpY2ggaG9sZHMgc2VxdWVuY2UgZGF0YSBmb3IKKyAqIHRoZSBk b29yYmVsbCwgYW5kIG9uZSBjYWNoZWxpbmUgd2hpY2ggYWN0dWFsbHkgKmlzKiB0aGUgZG9vcmJl bGw7IGEKKyAqIHdyaXRlIHRvIHRoaXMgd2lsbCAicmluZyB0aGUgZG9vcmJlbGwiIChpLmUuIHNl bmQgYW4gaW50ZXJydXB0IHRvIHRoZQorICogR3VDKS4gVGhlIHN1YnNlcXVlbnQgIHBhZ2VzIG9m IHRoZSBjbGllbnQgb2JqZWN0IGNvbnN0aXR1dGUgdGhlIHdvcmsKKyAqIHF1ZXVlIChhIGNpcmN1 bGFyIGFycmF5IG9mIHdvcmsgaXRlbXMpLCBhZ2FpbiBkZXNjcmliZWQgaW4gdGhlIHByb2Nlc3MK KyAqIGRlc2NyaXB0b3IuIFdvcmsgcXVldWUgcGFnZXMgYXJlIG1hcHBlZCBtb21lbnRhcmlseSBh cyByZXF1aXJlZC4KKyAqCisgKiBXZSBhbHNvIGtlZXAgYSBmZXcgc3RhdGlzdGljcyBvbiBmYWls dXJlcy4gSWRlYWxseSwgdGhlc2Ugc2hvdWxkIGFsbAorICogYmUgemVybyEKKyAqICAgbm9fd3Ff c3BhY2U6IHRpbWVzIHRoYXQgdGhlIHN1Ym1pc3Npb24gcHJlLWNoZWNrIGZvdW5kIG5vIHNwYWNl IHdhcworICogICAgICAgICAgICAgICAgYXZhaWxhYmxlIGluIHRoZSB3b3JrIHF1ZXVlIChub3Rl LCB0aGUgcXVldWUgaXMgc2hhcmVkLAorICogICAgICAgICAgICAgICAgbm90IHBlci1lbmdpbmUp LiBJdCBpcyBPSyBmb3IgdGhpcyB0byBiZSBub256ZXJvLCBidXQKKyAqICAgICAgICAgICAgICAg IGl0IHNob3VsZCBub3QgYmUgaHVnZSEKKyAqICAgYl9mYWlsOiBmYWlsZWQgdG8gcmluZyB0aGUg ZG9vcmJlbGwuIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgdW5sZXNzCisgKiAgICAgICAgICAg c29tZWhvdyB0aGUgaGFyZHdhcmUgbWlzYmVoYXZlcywgb3IgbWF5YmUgaWYgdGhlIEd1QyBmaXJt d2FyZQorICogICAgICAgICAgIGNyYXNoZXM/IFdlIHByb2JhYmx5IG5lZWQgdG8gcmVzZXQgdGhl IEdQVSB0byByZWNvdmVyLgorICogICByZXRjb2RlOiBlcnJubyBmcm9tIGxhc3QgZ3VjX3N1Ym1p dCgpCisgKi8KK3N0cnVjdCBpOTE1X2d1Y19jbGllbnQgeworCXN0cnVjdCBpOTE1X3ZtYSAqdm1h OworCXZvaWQgKnZhZGRyOworCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpvd25lcjsKKwlzdHJ1 Y3QgaW50ZWxfZ3VjICpndWM7CisKKwl1aW50MzJfdCBlbmdpbmVzOwkJLyogYml0bWFwIG9mICho b3N0KSBlbmdpbmUgaWRzCSovCisJdWludDMyX3QgcHJpb3JpdHk7CisJdTMyIHN0YWdlX2lkOwor CXVpbnQzMl90IHByb2NfZGVzY19vZmZzZXQ7CisKKwl1MTYgZG9vcmJlbGxfaWQ7CisJdW5zaWdu ZWQgbG9uZyBkb29yYmVsbF9vZmZzZXQ7CisJdTMyIGRvb3JiZWxsX2Nvb2tpZTsKKworCXNwaW5s b2NrX3Qgd3FfbG9jazsKKwl1aW50MzJfdCB3cV9vZmZzZXQ7CisJdWludDMyX3Qgd3Ffc2l6ZTsK Kwl1aW50MzJfdCB3cV90YWlsOworCXVpbnQzMl90IHdxX3JzdmQ7CisJdWludDMyX3Qgbm9fd3Ff c3BhY2U7CisKKwkvKiBQZXItZW5naW5lIGNvdW50cyBvZiBHdUMgc3VibWlzc2lvbnMgKi8KKwl1 aW50NjRfdCBzdWJtaXNzaW9uc1tJOTE1X05VTV9FTkdJTkVTXTsKK307CisKK3N0cnVjdCBpbnRl bF9ndWNfbG9nIHsKKwl1aW50MzJfdCBmbGFnczsKKwlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKKwkv KiBUaGUgcnVudGltZSBzdHVmZiBnZXRzIGNyZWF0ZWQgb25seSB3aGVuIEd1QyBsb2dnaW5nIGdl dHMgZW5hYmxlZCAqLworCXN0cnVjdCB7CisJCXZvaWQgKmJ1Zl9hZGRyOworCQlzdHJ1Y3Qgd29y a3F1ZXVlX3N0cnVjdCAqZmx1c2hfd3E7CisJCXN0cnVjdCB3b3JrX3N0cnVjdCBmbHVzaF93b3Jr OworCQlzdHJ1Y3QgcmNoYW4gKnJlbGF5X2NoYW47CisJfSBydW50aW1lOworCS8qIGxvZ2dpbmcg cmVsYXRlZCBzdGF0cyAqLworCXUzMiBjYXB0dXJlX21pc3NfY291bnQ7CisJdTMyIGZsdXNoX2lu dGVycnVwdF9jb3VudDsKKwl1MzIgcHJldl9vdmVyZmxvd19jb3VudFtHVUNfTUFYX0xPR19CVUZG RVJdOworCXUzMiB0b3RhbF9vdmVyZmxvd19jb3VudFtHVUNfTUFYX0xPR19CVUZGRVJdOworCXUz MiBmbHVzaF9jb3VudFtHVUNfTUFYX0xPR19CVUZGRVJdOworfTsKKworc3RydWN0IGludGVsX2d1 YyB7CisJc3RydWN0IGludGVsX3VjX2Z3IGZ3OworCXN0cnVjdCBpbnRlbF9ndWNfbG9nIGxvZzsK KwlzdHJ1Y3QgaW50ZWxfZ3VjX2N0IGN0OworCisJLyogTG9nIHNuYXBzaG90IGlmIEd1QyBlcnJv cnMgZHVyaW5nIGxvYWQgKi8KKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqbG9hZF9lcnJf bG9nOworCisJLyogaW50ZWxfZ3VjX3JlY3YgaW50ZXJydXB0IHJlbGF0ZWQgc3RhdGUgKi8KKwli b29sIGludGVycnVwdHNfZW5hYmxlZDsKKworCXN0cnVjdCBpOTE1X3ZtYSAqYWRzX3ZtYTsKKwlz dHJ1Y3QgaTkxNV92bWEgKnN0YWdlX2Rlc2NfcG9vbDsKKwl2b2lkICpzdGFnZV9kZXNjX3Bvb2xf dmFkZHI7CisJc3RydWN0IGlkYSBzdGFnZV9pZHM7CisKKwlzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50 ICpleGVjYnVmX2NsaWVudDsKKworCURFQ0xBUkVfQklUTUFQKGRvb3JiZWxsX2JpdG1hcCwgR1VD X05VTV9ET09SQkVMTFMpOworCXVpbnQzMl90IGRiX2NhY2hlbGluZTsJCS8qIEN5Y2xpYyBjb3Vu dGVyIG1vZCBwYWdlc2l6ZQkqLworCisJLyogR3VDJ3MgRlcgc3BlY2lmaWMgcmVnaXN0ZXJzIHVz ZWQgaW4gTU1JTyBzZW5kICovCisJc3RydWN0IHsKKwkJdTMyIGJhc2U7CisJCXVuc2lnbmVkIGlu dCBjb3VudDsKKwkJZW51bSBmb3JjZXdha2VfZG9tYWlucyBmd19kb21haW5zOworCX0gc2VuZF9y ZWdzOworCisJLyogVG8gc2VyaWFsaXplIHRoZSBpbnRlbF9ndWNfc2VuZCBhY3Rpb25zICovCisJ c3RydWN0IG11dGV4IHNlbmRfbXV0ZXg7CisKKwkvKiBHdUMncyBGVyBzcGVjaWZpYyBzZW5kIGZ1 bmN0aW9uICovCisJaW50ICgqc2VuZCkoc3RydWN0IGludGVsX2d1YyAqZ3VjLCBjb25zdCB1MzIg KmRhdGEsIHUzMiBsZW4pOworCisJLyogR3VDJ3MgRlcgc3BlY2lmaWMgbm90aWZ5IGZ1bmN0aW9u ICovCisJdm9pZCAoKm5vdGlmeSkoc3RydWN0IGludGVsX2d1YyAqZ3VjKTsKK307CisKK3N0YXRp YyBpbmxpbmUgdTMyIGd1Y19nZ3R0X29mZnNldChzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKK3sKKwl1 MzIgb2Zmc2V0ID0gaTkxNV9nZ3R0X29mZnNldCh2bWEpOworCisJR0VNX0JVR19PTihvZmZzZXQg PCBHVUNfV09QQ01fVE9QKTsKKwlHRU1fQlVHX09OKHJhbmdlX292ZXJmbG93c190KHU2NCwgb2Zm c2V0LCB2bWEtPnNpemUsIEdVQ19HR1RUX1RPUCkpOworCXJldHVybiBvZmZzZXQ7Cit9CisKKy8q IGludGVsX2d1Yy5jICovCit2b2lkIGludGVsX2d1Y19pbml0X2Vhcmx5KHN0cnVjdCBpbnRlbF9n dWMgKmd1Yyk7CitpbnQgaW50ZWxfZ3VjX3NhbXBsZV9mb3JjZXdha2Uoc3RydWN0IGludGVsX2d1 YyAqZ3VjKTsKK3ZvaWQgaW50ZWxfZ3VjX2luaXRfc2VuZF9yZWdzKHN0cnVjdCBpbnRlbF9ndWMg Kmd1Yyk7CitpbnQgaW50ZWxfZ3VjX3NlbmRfbm9wKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgY29u c3QgdTMyICphY3Rpb24sIHUzMiBsZW4pOworaW50IGludGVsX2d1Y19zZW5kX21taW8oc3RydWN0 IGludGVsX2d1YyAqZ3VjLCBjb25zdCB1MzIgKmFjdGlvbiwgdTMyIGxlbik7Cit2b2lkIGludGVs X2d1Y19hdXRoX2h1YyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHN0cnVjdCBpbnRlbF91Y19mdyAq aHVjX2Z3KTsKKworc3RhdGljIGlubGluZSBpbnQgaW50ZWxfZ3VjX3NlbmQoc3RydWN0IGludGVs X2d1YyAqZ3VjLCBjb25zdCB1MzIgKmFjdGlvbiwKKwkJCQkgdTMyIGxlbikKK3sKKwlyZXR1cm4g Z3VjLT5zZW5kKGd1YywgYWN0aW9uLCBsZW4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW50 ZWxfZ3VjX25vdGlmeShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCit7CisJZ3VjLT5ub3RpZnkoZ3Vj KTsKK30KKworLyogaW50ZWxfZ3VjX2xvYWRlci5jICovCitpbnQgaW50ZWxfZ3VjX3NlbGVjdF9m dyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpOworaW50IGludGVsX2d1Y19pbml0X2h3KHN0cnVjdCBp bnRlbF9ndWMgKmd1Yyk7CitpbnQgaW50ZWxfZ3VjX3N1c3BlbmQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KTsKK2ludCBpbnRlbF9ndWNfcmVzdW1lKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdik7Cit1MzIgaW50ZWxfZ3VjX3dvcGNtX3NpemUoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KTsKKworLyogaTkxNV9ndWNfc3VibWlzc2lvbi5jICovCitp bnQgaTkxNV9ndWNfc3VibWlzc2lvbl9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdik7CitpbnQgaTkxNV9ndWNfc3VibWlzc2lvbl9lbmFibGUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KTsKK2ludCBpOTE1X2d1Y193cV9yZXNlcnZlKHN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcnEpOwordm9pZCBpOTE1X2d1Y193cV91bnJlc2VydmUoc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0KTsKK3ZvaWQgaTkxNV9ndWNfc3VibWlzc2lvbl9k aXNhYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cit2b2lkIGk5MTVfZ3Vj X3N1Ym1pc3Npb25fZmluaShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOworc3Ry dWN0IGk5MTVfdm1hICppbnRlbF9ndWNfYWxsb2NhdGVfdm1hKHN0cnVjdCBpbnRlbF9ndWMgKmd1 YywgdTMyIHNpemUpOworCisvKiBpbnRlbF9ndWNfbG9nLmMgKi8KK2ludCBpbnRlbF9ndWNfbG9n X2NyZWF0ZShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpOwordm9pZCBpbnRlbF9ndWNfbG9nX2Rlc3Ry b3koc3RydWN0IGludGVsX2d1YyAqZ3VjKTsKK2ludCBpOTE1X2d1Y19sb2dfY29udHJvbChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHU2NCBjb250cm9sX3ZhbCk7Cit2b2lkIGk5 MTVfZ3VjX2xvZ19yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwor dm9pZCBpOTE1X2d1Y19sb2dfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2d1Y19sb2FkZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIuYwpp bmRleCA4YjBhZTdmLi44MWUwM2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9ndWNfbG9hZGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xv YWRlci5jCkBAIC0yNyw3ICsyNyw2IEBACiAgKiAgICBBbGV4IERhaSA8eXUuZGFpQGludGVsLmNv bT4KICAqLwogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCi0jaW5jbHVkZSAiaW50ZWxfdWMuaCIKIAog LyoqCiAgKiBET0M6IEd1Qy1zcGVjaWZpYyBmaXJtd2FyZSBsb2FkZXIKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2h1Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfaHVjLmMKaW5kZXggNjE0NWZhMC4uZjk0NTlmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfaHVjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVj LmMKQEAgLTIxLDkgKzIxLDcgQEAKICAqIElOIFRIRSBTT0ZUV0FSRS4KICAqCiAgKi8KLSNpbmNs dWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCi0jaW5jbHVkZSAi aW50ZWxfdWMuaCIKIAogLyoqCiAgKiBET0M6IEh1QyBGaXJtd2FyZQpAQCAtMjI1LDU0ICsyMjMs MTQgQEAgdm9pZCBpbnRlbF9odWNfaW5pdF9odyhzdHJ1Y3QgaW50ZWxfaHVjICpodWMpCiB9CiAK IC8qKgotICogaW50ZWxfZ3VjX2F1dGhfaHVjKCkgLSBhdXRoZW50aWNhdGUgdWNvZGUKLSAqIEBk ZXZfcHJpdjogdGhlIGRybV9pOTE1X2RldmljZQotICoKLSAqIFRyaWdnZXJzIGEgSHVDIGZ3IGF1 dGhlbnRpY2F0aW9uIHJlcXVlc3QgdG8gdGhlIEd1QyB2aWEgaW50ZWxfZ3VjX2FjdGlvbl8KLSAq IGF1dGhlbnRpY2F0ZV9odWMgaW50ZXJmYWNlLgorICogaW50ZWxfYXV0aF9odWMoKSAtIGF1dGhl bnRpY2F0ZSBIdUMgdWNvZGUKICAqLwotdm9pZCBpbnRlbF9ndWNfYXV0aF9odWMoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQordm9pZCBpbnRlbF9odWNfYXV0aChzdHJ1Y3QgaW50 ZWxfaHVjICpodWMpCiB7Ci0Jc3RydWN0IGludGVsX2d1YyAqZ3VjID0gJmRldl9wcml2LT5ndWM7 Ci0Jc3RydWN0IGludGVsX2h1YyAqaHVjID0gJmRldl9wcml2LT5odWM7Ci0Jc3RydWN0IGk5MTVf dm1hICp2bWE7Ci0JaW50IHJldDsKLQl1MzIgZGF0YVsyXTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBodWNfdG9faTkxNShodWMpOwogCiAJaWYgKGh1Yy0+ZncubG9hZF9z dGF0dXMgIT0gSU5URUxfVUNfRklSTVdBUkVfU1VDQ0VTUykKIAkJcmV0dXJuOwogCi0Jdm1hID0g aTkxNV9nZW1fb2JqZWN0X2dndHRfcGluKGh1Yy0+Zncub2JqLCBOVUxMLCAwLCAwLAotCQkJCVBJ Tl9PRkZTRVRfQklBUyB8IEdVQ19XT1BDTV9UT1ApOwotCWlmIChJU19FUlIodm1hKSkgewotCQlE Uk1fRVJST1IoImZhaWxlZCB0byBwaW4gaHVjIGZ3IG9iamVjdCAlZFxuIiwKLQkJCQkoaW50KVBU Ul9FUlIodm1hKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBTcGVjaWZ5IGF1dGggYWN0aW9uIGFu ZCB3aGVyZSBwdWJsaWMgc2lnbmF0dXJlIGlzLiAqLwotCWRhdGFbMF0gPSBJTlRFTF9HVUNfQUNU SU9OX0FVVEhFTlRJQ0FURV9IVUM7Ci0JZGF0YVsxXSA9IGd1Y19nZ3R0X29mZnNldCh2bWEpICsg aHVjLT5mdy5yc2Ffb2Zmc2V0OwotCi0JcmV0ID0gaW50ZWxfZ3VjX3NlbmQoZ3VjLCBkYXRhLCBB UlJBWV9TSVpFKGRhdGEpKTsKLQlpZiAocmV0KSB7Ci0JCURSTV9FUlJPUigiSHVDOiBHdUMgZGlk IG5vdCBhY2sgQXV0aCByZXF1ZXN0ICVkXG4iLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkv KiBDaGVjayBhdXRoZW50aWNhdGlvbiBzdGF0dXMsIGl0IHNob3VsZCBiZSBkb25lIGJ5IG5vdyAq LwotCXJldCA9IGludGVsX3dhaXRfZm9yX3JlZ2lzdGVyKGRldl9wcml2LAotCQkJCUhVQ19TVEFU VVMyLAotCQkJCUhVQ19GV19WRVJJRklFRCwKLQkJCQlIVUNfRldfVkVSSUZJRUQsCi0JCQkJNTAp OwotCi0JaWYgKHJldCkgewotCQlEUk1fRVJST1IoIkh1QzogQXV0aGVudGljYXRpb24gZmFpbGVk ICVkXG4iLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlpOTE1X3ZtYV91bnBpbih2 bWEpOworCWludGVsX2d1Y19hdXRoX2h1YygmZGV2X3ByaXYtPmd1YywgJmh1Yy0+ZncpOwogfQot CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9odWMuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2h1Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmU5MDk1MmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9odWMuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwg Q29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwK KyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl CisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hU IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUu CisgKgorICovCisjaWZuZGVmIF9JTlRFTF9IVUNfSF8KKyNkZWZpbmUgX0lOVEVMX0hVQ19IXwor CitzdHJ1Y3QgaW50ZWxfaHVjIHsKKwkvKiBHZW5lcmljIHVDIGZpcm13YXJlIG1hbmFnZW1lbnQg Ki8KKwlzdHJ1Y3QgaW50ZWxfdWNfZncgZnc7CisKKwkvKiBIdUMtc3BlY2lmaWMgYWRkaXRpb25z ICovCit9OworCisvKiBpbnRlbF9odWMuYyAqLwordm9pZCBpbnRlbF9odWNfc2VsZWN0X2Z3KHN0 cnVjdCBpbnRlbF9odWMgKmh1Yyk7Cit2b2lkIGludGVsX2h1Y19pbml0X2h3KHN0cnVjdCBpbnRl bF9odWMgKmh1Yyk7Cit2b2lkIGludGVsX2h1Y19hdXRoKHN0cnVjdCBpbnRlbF9odWMgKmh1Yyk7 CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Yy5jCmluZGV4IDAxNzhiYTQuLmEzZmM0YzggMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfdWMuYwpAQCAtMjMsNyArMjMsNiBAQAogICovCiAKICNpbmNsdWRl ICJpOTE1X2Rydi5oIgotI2luY2x1ZGUgImludGVsX3VjLmgiCiAjaW5jbHVkZSA8bGludXgvZmly bXdhcmUuaD4KIAogLyogQ2xlYW5zIHVwIHVDIGZpcm13YXJlIGJ5IHJlbGVhc2luZyB0aGUgZmly bXdhcmUgR0VNIG9iai4KQEAgLTk0LDIyICs5MywxMSBAQCB2b2lkIGludGVsX3VjX3Nhbml0aXpl X29wdGlvbnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCQlpOTE1LmVuYWJs ZV9ndWNfc3VibWlzc2lvbiA9IEhBU19HVUNfU0NIRUQoZGV2X3ByaXYpOwogfQogCi1zdGF0aWMg dm9pZCBnZW44X2d1Y19yYWlzZV9pcnEoc3RydWN0IGludGVsX2d1YyAqZ3VjKQotewotCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGd1Y190b19pOTE1KGd1Yyk7Ci0KLQlJOTE1 X1dSSVRFKEdVQ19TRU5EX0lOVEVSUlVQVCwgR1VDX1NFTkRfVFJJR0dFUik7Ci19Ci0KIHZvaWQg aW50ZWxfdWNfaW5pdF9lYXJseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7 CiAJc3RydWN0IGludGVsX2d1YyAqZ3VjID0gJmRldl9wcml2LT5ndWM7CiAKLQlpbnRlbF9ndWNf Y3RfaW5pdF9lYXJseSgmZ3VjLT5jdCk7Ci0KLQltdXRleF9pbml0KCZndWMtPnNlbmRfbXV0ZXgp OwotCWd1Yy0+c2VuZCA9IGludGVsX2d1Y19zZW5kX25vcDsKLQlndWMtPm5vdGlmeSA9IGdlbjhf Z3VjX3JhaXNlX2lycTsKKwlpbnRlbF9ndWNfaW5pdF9lYXJseShndWMpOwogfQogCiBzdGF0aWMg dm9pZCBmZXRjaF91Y19mdyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCkBAIC0y NjIsMzIgKzI1MCw2IEBAIHZvaWQgaW50ZWxfdWNfZmluaV9mdyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCiAJX19pbnRlbF91Y19md19maW5pKCZkZXZfcHJpdi0+aHVjLmZ3KTsK IH0KIAotc3RhdGljIGlubGluZSBpOTE1X3JlZ190IGd1Y19zZW5kX3JlZyhzdHJ1Y3QgaW50ZWxf Z3VjICpndWMsIHUzMiBpKQotewotCUdFTV9CVUdfT04oIWd1Yy0+c2VuZF9yZWdzLmJhc2UpOwot CUdFTV9CVUdfT04oIWd1Yy0+c2VuZF9yZWdzLmNvdW50KTsKLQlHRU1fQlVHX09OKGkgPj0gZ3Vj LT5zZW5kX3JlZ3MuY291bnQpOwotCi0JcmV0dXJuIF9NTUlPKGd1Yy0+c2VuZF9yZWdzLmJhc2Ug KyA0ICogaSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGd1Y19pbml0X3NlbmRfcmVncyhzdHJ1Y3QgaW50 ZWxfZ3VjICpndWMpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3Vj X3RvX2k5MTUoZ3VjKTsKLQllbnVtIGZvcmNld2FrZV9kb21haW5zIGZ3X2RvbWFpbnMgPSAwOwot CXVuc2lnbmVkIGludCBpOwotCi0JZ3VjLT5zZW5kX3JlZ3MuYmFzZSA9IGk5MTVfbW1pb19yZWdf b2Zmc2V0KFNPRlRfU0NSQVRDSCgwKSk7Ci0JZ3VjLT5zZW5kX3JlZ3MuY291bnQgPSBTT0ZUX1ND UkFUQ0hfQ09VTlQgLSAxOwotCi0JZm9yIChpID0gMDsgaSA8IGd1Yy0+c2VuZF9yZWdzLmNvdW50 OyBpKyspIHsKLQkJZndfZG9tYWlucyB8PSBpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2Zvcl9yZWco ZGV2X3ByaXYsCi0JCQkJCWd1Y19zZW5kX3JlZyhndWMsIGkpLAotCQkJCQlGV19SRUdfUkVBRCB8 IEZXX1JFR19XUklURSk7Ci0JfQotCWd1Yy0+c2VuZF9yZWdzLmZ3X2RvbWFpbnMgPSBmd19kb21h aW5zOwotfQotCiBzdGF0aWMgdm9pZCBndWNfY2FwdHVyZV9sb2FkX2Vycl9sb2coc3RydWN0IGlu dGVsX2d1YyAqZ3VjKQogewogCWlmICghZ3VjLT5sb2cudm1hIHx8IGk5MTUuZ3VjX2xvZ19sZXZl bCA8IDApCkBAIC0yOTUsOCArMjU3LDYgQEAgc3RhdGljIHZvaWQgZ3VjX2NhcHR1cmVfbG9hZF9l cnJfbG9nKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKIAogCWlmICghZ3VjLT5sb2FkX2Vycl9sb2cp CiAJCWd1Yy0+bG9hZF9lcnJfbG9nID0gaTkxNV9nZW1fb2JqZWN0X2dldChndWMtPmxvZy52bWEt Pm9iaik7Ci0KLQlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIGd1Y19mcmVlX2xvYWRfZXJyX2xv ZyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCkBAIC0zMDksOCArMjY5LDYgQEAgc3RhdGljIGludCBn dWNfZW5hYmxlX2NvbW11bmljYXRpb24oc3RydWN0IGludGVsX2d1YyAqZ3VjKQogewogCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGd1Y190b19pOTE1KGd1Yyk7CiAKLQlndWNf aW5pdF9zZW5kX3JlZ3MoZ3VjKTsKLQogCWlmIChIQVNfR1VDX0NUKGRldl9wcml2KSkKIAkJcmV0 dXJuIGludGVsX2d1Y19lbmFibGVfY3QoZ3VjKTsKIApAQCAtMzMxLDYgKzI4OSw3IEBAIHN0YXRp YyB2b2lkIGd1Y19kaXNhYmxlX2NvbW11bmljYXRpb24oc3RydWN0IGludGVsX2d1YyAqZ3VjKQog aW50IGludGVsX3VjX2luaXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQog ewogCXN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZkZXZfcHJpdi0+Z3VjOworCXN0cnVjdCBpbnRl bF9odWMgKmh1YyA9ICZkZXZfcHJpdi0+aHVjOwogCWludCByZXQsIGF0dGVtcHRzOwogCiAJaWYg KCFpOTE1LmVuYWJsZV9ndWNfbG9hZGluZykKQEAgLTM4NiwxMSArMzQ1LDEzIEBAIGludCBpbnRl bF91Y19pbml0X2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlpZiAocmV0 KQogCQlnb3RvIGVycl9sb2dfY2FwdHVyZTsKIAorCWludGVsX2d1Y19pbml0X3NlbmRfcmVncyhn dWMpOworCiAJcmV0ID0gZ3VjX2VuYWJsZV9jb21tdW5pY2F0aW9uKGd1Yyk7CiAJaWYgKHJldCkK IAkJZ290byBlcnJfbG9nX2NhcHR1cmU7CiAKLQlpbnRlbF9ndWNfYXV0aF9odWMoZGV2X3ByaXYp OworCWludGVsX2h1Y19hdXRoKGh1Yyk7CiAJaWYgKGk5MTUuZW5hYmxlX2d1Y19zdWJtaXNzaW9u KSB7CiAJCWlmIChpOTE1Lmd1Y19sb2dfbGV2ZWwgPj0gMCkKIAkJCWdlbjlfZW5hYmxlX2d1Y19p bnRlcnJ1cHRzKGRldl9wcml2KTsKQEAgLTQ1OCw4MiArNDE5LDMgQEAgdm9pZCBpbnRlbF91Y19m aW5pX2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAogCWk5MTVfZ2d0dF9k aXNhYmxlX2d1YyhkZXZfcHJpdik7CiB9Ci0KLWludCBpbnRlbF9ndWNfc2VuZF9ub3Aoc3RydWN0 IGludGVsX2d1YyAqZ3VjLCBjb25zdCB1MzIgKmFjdGlvbiwgdTMyIGxlbikKLXsKLQlXQVJOKDEs ICJVbmV4cGVjdGVkIHNlbmQ6IGFjdGlvbj0lI3hcbiIsICphY3Rpb24pOwotCXJldHVybiAtRU5P REVWOwotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBNTUlPIGJhc2Vk IGhvc3QgdG8gR3VDIGludGVyZmFjZS4KLSAqLwotaW50IGludGVsX2d1Y19zZW5kX21taW8oc3Ry dWN0IGludGVsX2d1YyAqZ3VjLCBjb25zdCB1MzIgKmFjdGlvbiwgdTMyIGxlbikKLXsKLQlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBndWNfdG9faTkxNShndWMpOwotCXUzMiBz dGF0dXM7Ci0JaW50IGk7Ci0JaW50IHJldDsKLQotCUdFTV9CVUdfT04oIWxlbik7Ci0JR0VNX0JV R19PTihsZW4gPiBndWMtPnNlbmRfcmVncy5jb3VudCk7Ci0KLQkvKiBJZiBDVCBpcyBhdmFpbGFi bGUsIHdlIGV4cGVjdCB0byB1c2UgTU1JTyBvbmx5IGR1cmluZyBpbml0L2ZpbmkgKi8KLQlHRU1f QlVHX09OKEhBU19HVUNfQ1QoZGV2X3ByaXYpICYmCi0JCSphY3Rpb24gIT0gSU5URUxfR1VDX0FD VElPTl9SRUdJU1RFUl9DT01NQU5EX1RSQU5TUE9SVF9CVUZGRVIgJiYKLQkJKmFjdGlvbiAhPSBJ TlRFTF9HVUNfQUNUSU9OX0RFUkVHSVNURVJfQ09NTUFORF9UUkFOU1BPUlRfQlVGRkVSKTsKLQot CW11dGV4X2xvY2soJmd1Yy0+c2VuZF9tdXRleCk7Ci0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9n ZXQoZGV2X3ByaXYsIGd1Yy0+c2VuZF9yZWdzLmZ3X2RvbWFpbnMpOwotCi0JZm9yIChpID0gMDsg aSA8IGxlbjsgaSsrKQotCQlJOTE1X1dSSVRFKGd1Y19zZW5kX3JlZyhndWMsIGkpLCBhY3Rpb25b aV0pOwotCi0JUE9TVElOR19SRUFEKGd1Y19zZW5kX3JlZyhndWMsIGkgLSAxKSk7Ci0KLQlpbnRl bF9ndWNfbm90aWZ5KGd1Yyk7Ci0KLQkvKgotCSAqIE5vIEd1QyBjb21tYW5kIHNob3VsZCBldmVy IHRha2UgbG9uZ2VyIHRoYW4gMTBtcy4KLQkgKiBGYXN0IGNvbW1hbmRzIHNob3VsZCBzdGlsbCBj b21wbGV0ZSBpbiAxMHVzLgotCSAqLwotCXJldCA9IF9faW50ZWxfd2FpdF9mb3JfcmVnaXN0ZXJf ZncoZGV2X3ByaXYsCi0JCQkJCSAgIGd1Y19zZW5kX3JlZyhndWMsIDApLAotCQkJCQkgICBJTlRF TF9HVUNfUkVDVl9NQVNLLAotCQkJCQkgICBJTlRFTF9HVUNfUkVDVl9NQVNLLAotCQkJCQkgICAx MCwgMTAsICZzdGF0dXMpOwotCWlmIChzdGF0dXMgIT0gSU5URUxfR1VDX1NUQVRVU19TVUNDRVNT KSB7Ci0JCS8qCi0JCSAqIEVpdGhlciB0aGUgR3VDIGV4cGxpY2l0bHkgcmV0dXJuZWQgYW4gZXJy b3IgKHdoaWNoCi0JCSAqIHdlIGNvbnZlcnQgdG8gLUVJTyBoZXJlKSBvciBubyByZXNwb25zZSBh dCBhbGwgd2FzCi0JCSAqIHJlY2VpdmVkIHdpdGhpbiB0aGUgdGltZW91dCBsaW1pdCAoLUVUSU1F RE9VVCkKLQkJICovCi0JCWlmIChyZXQgIT0gLUVUSU1FRE9VVCkKLQkJCXJldCA9IC1FSU87Ci0K LQkJRFJNX1dBUk4oIklOVEVMX0dVQ19TRU5EOiBBY3Rpb24gMHglWCBmYWlsZWQ7IgotCQkJICIg cmV0PSVkIHN0YXR1cz0weCUwOFggcmVzcG9uc2U9MHglMDhYXG4iLAotCQkJIGFjdGlvblswXSwg cmV0LCBzdGF0dXMsIEk5MTVfUkVBRChTT0ZUX1NDUkFUQ0goMTUpKSk7Ci0JfQotCi0JaW50ZWxf dW5jb3JlX2ZvcmNld2FrZV9wdXQoZGV2X3ByaXYsIGd1Yy0+c2VuZF9yZWdzLmZ3X2RvbWFpbnMp OwotCW11dGV4X3VubG9jaygmZ3VjLT5zZW5kX211dGV4KTsKLQotCXJldHVybiByZXQ7Ci19Ci0K LWludCBpbnRlbF9ndWNfc2FtcGxlX2ZvcmNld2FrZShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCi17 Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsK LQl1MzIgYWN0aW9uWzJdOwotCi0JYWN0aW9uWzBdID0gSU5URUxfR1VDX0FDVElPTl9TQU1QTEVf Rk9SQ0VXQUtFOwotCS8qIFdhUnNEaXNhYmxlQ29hcnNlUG93ZXJHYXRpbmc6c2tsLGJ4dCAqLwot CWlmICghaW50ZWxfZW5hYmxlX3JjNigpIHx8IE5FRURTX1dhUnNEaXNhYmxlQ29hcnNlUG93ZXJH YXRpbmcoZGV2X3ByaXYpKQotCQlhY3Rpb25bMV0gPSAwOwotCWVsc2UKLQkJLyogYml0IDAgYW5k IDEgYXJlIGZvciBSZW5kZXIgYW5kIE1lZGlhIGRvbWFpbiBzZXBhcmF0ZWx5ICovCi0JCWFjdGlv blsxXSA9IEdVQ19GT1JDRVdBS0VfUkVOREVSIHwgR1VDX0ZPUkNFV0FLRV9NRURJQTsKLQotCXJl dHVybiBpbnRlbF9ndWNfc2VuZChndWMsIGFjdGlvbiwgQVJSQVlfU0laRShhY3Rpb24pKTsKLX0K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjLmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF91Yy5oCmluZGV4IDIyYWU1MmIuLmM4N2EyYjQgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfdWMuaApAQCAtMjQsMjU2ICsyNCw4IEBACiAjaWZuZGVmIF9JTlRFTF9VQ19IXwog I2RlZmluZSBfSU5URUxfVUNfSF8KIAotI2luY2x1ZGUgImludGVsX2d1Y19md2lmLmgiCi0jaW5j bHVkZSAiaTkxNV9ndWNfcmVnLmgiCi0jaW5jbHVkZSAiaW50ZWxfcmluZ2J1ZmZlci5oIgotI2lu Y2x1ZGUgImludGVsX2d1Y19jdC5oIgotI2luY2x1ZGUgImk5MTVfdm1hLmgiCi0KLXN0cnVjdCBk cm1faTkxNV9nZW1fcmVxdWVzdDsKLQotLyoKLSAqIFRoaXMgc3RydWN0dXJlIHByaW1hcmlseSBk ZXNjcmliZXMgdGhlIEdFTSBvYmplY3Qgc2hhcmVkIHdpdGggdGhlIEd1Qy4KLSAqIFRoZSBzcGVj cyBzb21ldGltZXMgcmVmZXIgdG8gdGhpcyBvYmplY3QgYXMgYSAiR3VDIGNvbnRleHQiLCBidXQg d2UgdXNlCi0gKiB0aGUgdGVybSAiY2xpZW50IiB0byBhdm9pZCBjb25mdXNpb24gd2l0aCBoYXJk d2FyZSBjb250ZXh0cy4gVGhpcwotICogR0VNIG9iamVjdCBpcyBoZWxkIGZvciB0aGUgZW50aXJl IGxpZmV0aW1lIG9mIG91ciBpbnRlcmFjdGlvbiB3aXRoCi0gKiB0aGUgR3VDLCBiZWluZyBhbGxv Y2F0ZWQgYmVmb3JlIHRoZSBHdUMgaXMgbG9hZGVkIHdpdGggaXRzIGZpcm13YXJlLgotICogQmVj YXVzZSB0aGVyZSdzIG5vIHdheSB0byB1cGRhdGUgdGhlIGFkZHJlc3MgdXNlZCBieSB0aGUgR3VD IGFmdGVyCi0gKiBpbml0aWFsaXNhdGlvbiwgdGhlIHNoYXJlZCBvYmplY3QgbXVzdCBzdGF5IHBp bm5lZCBpbnRvIHRoZSBHR1RUIGFzCi0gKiBsb25nIGFzIHRoZSBHdUMgaXMgaW4gdXNlLiBXZSBh bHNvIGtlZXAgdGhlIGZpcnN0IHBhZ2UgKG9ubHkpIG1hcHBlZAotICogaW50byBrZXJuZWwgYWRk cmVzcyBzcGFjZSwgYXMgaXQgaW5jbHVkZXMgc2hhcmVkIGRhdGEgdGhhdCBtdXN0IGJlCi0gKiB1 cGRhdGVkIG9uIGV2ZXJ5IHJlcXVlc3Qgc3VibWlzc2lvbi4KLSAqCi0gKiBUaGUgc2luZ2xlIEdF TSBvYmplY3QgZGVzY3JpYmVkIGhlcmUgaXMgYWN0dWFsbHkgbWFkZSB1cCBvZiBzZXZlcmFsCi0g KiBzZXBhcmF0ZSBhcmVhcywgYXMgZmFyIGFzIHRoZSBHdUMgaXMgY29uY2VybmVkLiBUaGUgZmly c3QgcGFnZSAoa2VwdAotICoga21hcCdkKSBpbmNsdWRlcyB0aGUgInByb2Nlc3MgZGVzY3JpcHRv ciIgd2hpY2ggaG9sZHMgc2VxdWVuY2UgZGF0YSBmb3IKLSAqIHRoZSBkb29yYmVsbCwgYW5kIG9u ZSBjYWNoZWxpbmUgd2hpY2ggYWN0dWFsbHkgKmlzKiB0aGUgZG9vcmJlbGw7IGEKLSAqIHdyaXRl IHRvIHRoaXMgd2lsbCAicmluZyB0aGUgZG9vcmJlbGwiIChpLmUuIHNlbmQgYW4gaW50ZXJydXB0 IHRvIHRoZQotICogR3VDKS4gVGhlIHN1YnNlcXVlbnQgIHBhZ2VzIG9mIHRoZSBjbGllbnQgb2Jq ZWN0IGNvbnN0aXR1dGUgdGhlIHdvcmsKLSAqIHF1ZXVlIChhIGNpcmN1bGFyIGFycmF5IG9mIHdv cmsgaXRlbXMpLCBhZ2FpbiBkZXNjcmliZWQgaW4gdGhlIHByb2Nlc3MKLSAqIGRlc2NyaXB0b3Iu IFdvcmsgcXVldWUgcGFnZXMgYXJlIG1hcHBlZCBtb21lbnRhcmlseSBhcyByZXF1aXJlZC4KLSAq Ci0gKiBXZSBhbHNvIGtlZXAgYSBmZXcgc3RhdGlzdGljcyBvbiBmYWlsdXJlcy4gSWRlYWxseSwg dGhlc2Ugc2hvdWxkIGFsbAotICogYmUgemVybyEKLSAqICAgbm9fd3Ffc3BhY2U6IHRpbWVzIHRo YXQgdGhlIHN1Ym1pc3Npb24gcHJlLWNoZWNrIGZvdW5kIG5vIHNwYWNlIHdhcwotICogICAgICAg ICAgICAgICAgYXZhaWxhYmxlIGluIHRoZSB3b3JrIHF1ZXVlIChub3RlLCB0aGUgcXVldWUgaXMg c2hhcmVkLAotICogICAgICAgICAgICAgICAgbm90IHBlci1lbmdpbmUpLiBJdCBpcyBPSyBmb3Ig dGhpcyB0byBiZSBub256ZXJvLCBidXQKLSAqICAgICAgICAgICAgICAgIGl0IHNob3VsZCBub3Qg YmUgaHVnZSEKLSAqICAgYl9mYWlsOiBmYWlsZWQgdG8gcmluZyB0aGUgZG9vcmJlbGwuIFRoaXMg c2hvdWxkIG5ldmVyIGhhcHBlbiwgdW5sZXNzCi0gKiAgICAgICAgICAgc29tZWhvdyB0aGUgaGFy ZHdhcmUgbWlzYmVoYXZlcywgb3IgbWF5YmUgaWYgdGhlIEd1QyBmaXJtd2FyZQotICogICAgICAg ICAgIGNyYXNoZXM/IFdlIHByb2JhYmx5IG5lZWQgdG8gcmVzZXQgdGhlIEdQVSB0byByZWNvdmVy LgotICogICByZXRjb2RlOiBlcnJubyBmcm9tIGxhc3QgZ3VjX3N1Ym1pdCgpCi0gKi8KLXN0cnVj dCBpOTE1X2d1Y19jbGllbnQgewotCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwotCXZvaWQgKnZhZGRy OwotCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpvd25lcjsKLQlzdHJ1Y3QgaW50ZWxfZ3VjICpn dWM7Ci0KLQl1aW50MzJfdCBlbmdpbmVzOwkJLyogYml0bWFwIG9mIChob3N0KSBlbmdpbmUgaWRz CSovCi0JdWludDMyX3QgcHJpb3JpdHk7Ci0JdTMyIHN0YWdlX2lkOwotCXVpbnQzMl90IHByb2Nf ZGVzY19vZmZzZXQ7Ci0KLQl1MTYgZG9vcmJlbGxfaWQ7Ci0JdW5zaWduZWQgbG9uZyBkb29yYmVs bF9vZmZzZXQ7Ci0JdTMyIGRvb3JiZWxsX2Nvb2tpZTsKLQotCXNwaW5sb2NrX3Qgd3FfbG9jazsK LQl1aW50MzJfdCB3cV9vZmZzZXQ7Ci0JdWludDMyX3Qgd3Ffc2l6ZTsKLQl1aW50MzJfdCB3cV90 YWlsOwotCXVpbnQzMl90IHdxX3JzdmQ7Ci0JdWludDMyX3Qgbm9fd3Ffc3BhY2U7Ci0KLQkvKiBQ ZXItZW5naW5lIGNvdW50cyBvZiBHdUMgc3VibWlzc2lvbnMgKi8KLQl1aW50NjRfdCBzdWJtaXNz aW9uc1tJOTE1X05VTV9FTkdJTkVTXTsKLX07Ci0KLWVudW0gaW50ZWxfdWNfZndfc3RhdHVzIHsK LQlJTlRFTF9VQ19GSVJNV0FSRV9GQUlMID0gLTEsCi0JSU5URUxfVUNfRklSTVdBUkVfTk9ORSA9 IDAsCi0JSU5URUxfVUNfRklSTVdBUkVfUEVORElORywKLQlJTlRFTF9VQ19GSVJNV0FSRV9TVUND RVNTCi19OwotCi0vKiBVc2VyLWZyaWVuZGx5IHJlcHJlc2VudGF0aW9uIG9mIGFuIGVudW0gKi8K LXN0YXRpYyBpbmxpbmUKLWNvbnN0IGNoYXIgKmludGVsX3VjX2Z3X3N0YXR1c19yZXByKGVudW0g aW50ZWxfdWNfZndfc3RhdHVzIHN0YXR1cykKLXsKLQlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2Ug SU5URUxfVUNfRklSTVdBUkVfRkFJTDoKLQkJcmV0dXJuICJGQUlMIjsKLQljYXNlIElOVEVMX1VD X0ZJUk1XQVJFX05PTkU6Ci0JCXJldHVybiAiTk9ORSI7Ci0JY2FzZSBJTlRFTF9VQ19GSVJNV0FS RV9QRU5ESU5HOgotCQlyZXR1cm4gIlBFTkRJTkciOwotCWNhc2UgSU5URUxfVUNfRklSTVdBUkVf U1VDQ0VTUzoKLQkJcmV0dXJuICJTVUNDRVNTIjsKLQl9Ci0JcmV0dXJuICI8aW52YWxpZD4iOwot fQotCi1lbnVtIGludGVsX3VjX2Z3X3R5cGUgewotCUlOVEVMX1VDX0ZXX1RZUEVfR1VDLAotCUlO VEVMX1VDX0ZXX1RZUEVfSFVDCi19OwotCi0vKiBVc2VyLWZyaWVuZGx5IHJlcHJlc2VudGF0aW9u IG9mIGFuIGVudW0gKi8KLXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqaW50ZWxfdWNfZndfdHlw ZV9yZXByKGVudW0gaW50ZWxfdWNfZndfdHlwZSB0eXBlKQotewotCXN3aXRjaCAodHlwZSkgewot CWNhc2UgSU5URUxfVUNfRldfVFlQRV9HVUM6Ci0JCXJldHVybiAiR3VDIjsKLQljYXNlIElOVEVM X1VDX0ZXX1RZUEVfSFVDOgotCQlyZXR1cm4gIkh1QyI7Ci0JfQotCXJldHVybiAidUMiOwotfQot Ci0vKgotICogVGhpcyBzdHJ1Y3R1cmUgZW5jYXBzdWxhdGVzIGFsbCB0aGUgZGF0YSBuZWVkZWQg ZHVyaW5nIHRoZSBwcm9jZXNzCi0gKiBvZiBmZXRjaGluZywgY2FjaGluZywgYW5kIGxvYWRpbmcg dGhlIGZpcm13YXJlIGltYWdlIGludG8gdGhlIEd1Qy4KLSAqLwotc3RydWN0IGludGVsX3VjX2Z3 IHsKLQljb25zdCBjaGFyICpwYXRoOwotCXNpemVfdCBzaXplOwotCXN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmo7Ci0JZW51bSBpbnRlbF91Y19md19zdGF0dXMgZmV0Y2hfc3RhdHVzOwot CWVudW0gaW50ZWxfdWNfZndfc3RhdHVzIGxvYWRfc3RhdHVzOwotCi0JdWludDE2X3QgbWFqb3Jf dmVyX3dhbnRlZDsKLQl1aW50MTZfdCBtaW5vcl92ZXJfd2FudGVkOwotCXVpbnQxNl90IG1ham9y X3Zlcl9mb3VuZDsKLQl1aW50MTZfdCBtaW5vcl92ZXJfZm91bmQ7Ci0KLQllbnVtIGludGVsX3Vj X2Z3X3R5cGUgdHlwZTsKLQl1aW50MzJfdCBoZWFkZXJfc2l6ZTsKLQl1aW50MzJfdCBoZWFkZXJf b2Zmc2V0OwotCXVpbnQzMl90IHJzYV9zaXplOwotCXVpbnQzMl90IHJzYV9vZmZzZXQ7Ci0JdWlu dDMyX3QgdWNvZGVfc2l6ZTsKLQl1aW50MzJfdCB1Y29kZV9vZmZzZXQ7Ci19OwotCi1zdHJ1Y3Qg aW50ZWxfZ3VjX2xvZyB7Ci0JdWludDMyX3QgZmxhZ3M7Ci0Jc3RydWN0IGk5MTVfdm1hICp2bWE7 Ci0JLyogVGhlIHJ1bnRpbWUgc3R1ZmYgZ2V0cyBjcmVhdGVkIG9ubHkgd2hlbiBHdUMgbG9nZ2lu ZyBnZXRzIGVuYWJsZWQgKi8KLQlzdHJ1Y3QgewotCQl2b2lkICpidWZfYWRkcjsKLQkJc3RydWN0 IHdvcmtxdWV1ZV9zdHJ1Y3QgKmZsdXNoX3dxOwotCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmx1c2hf d29yazsKLQkJc3RydWN0IHJjaGFuICpyZWxheV9jaGFuOwotCX0gcnVudGltZTsKLQkvKiBsb2dn aW5nIHJlbGF0ZWQgc3RhdHMgKi8KLQl1MzIgY2FwdHVyZV9taXNzX2NvdW50OwotCXUzMiBmbHVz aF9pbnRlcnJ1cHRfY291bnQ7Ci0JdTMyIHByZXZfb3ZlcmZsb3dfY291bnRbR1VDX01BWF9MT0df QlVGRkVSXTsKLQl1MzIgdG90YWxfb3ZlcmZsb3dfY291bnRbR1VDX01BWF9MT0dfQlVGRkVSXTsK LQl1MzIgZmx1c2hfY291bnRbR1VDX01BWF9MT0dfQlVGRkVSXTsKLX07Ci0KLXN0cnVjdCBpbnRl bF9ndWMgewotCXN0cnVjdCBpbnRlbF91Y19mdyBmdzsKLQlzdHJ1Y3QgaW50ZWxfZ3VjX2xvZyBs b2c7Ci0Jc3RydWN0IGludGVsX2d1Y19jdCBjdDsKLQotCS8qIExvZyBzbmFwc2hvdCBpZiBHdUMg ZXJyb3JzIGR1cmluZyBsb2FkICovCi0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmxvYWRf ZXJyX2xvZzsKLQotCS8qIGludGVsX2d1Y19yZWN2IGludGVycnVwdCByZWxhdGVkIHN0YXRlICov Ci0JYm9vbCBpbnRlcnJ1cHRzX2VuYWJsZWQ7Ci0KLQlzdHJ1Y3QgaTkxNV92bWEgKmFkc192bWE7 Ci0Jc3RydWN0IGk5MTVfdm1hICpzdGFnZV9kZXNjX3Bvb2w7Ci0Jdm9pZCAqc3RhZ2VfZGVzY19w b29sX3ZhZGRyOwotCXN0cnVjdCBpZGEgc3RhZ2VfaWRzOwotCi0Jc3RydWN0IGk5MTVfZ3VjX2Ns aWVudCAqZXhlY2J1Zl9jbGllbnQ7Ci0KLQlERUNMQVJFX0JJVE1BUChkb29yYmVsbF9iaXRtYXAs IEdVQ19OVU1fRE9PUkJFTExTKTsKLQl1aW50MzJfdCBkYl9jYWNoZWxpbmU7CQkvKiBDeWNsaWMg Y291bnRlciBtb2QgcGFnZXNpemUJKi8KLQotCS8qIEd1QydzIEZXIHNwZWNpZmljIHJlZ2lzdGVy cyB1c2VkIGluIE1NSU8gc2VuZCAqLwotCXN0cnVjdCB7Ci0JCXUzMiBiYXNlOwotCQl1bnNpZ25l ZCBpbnQgY291bnQ7Ci0JCWVudW0gZm9yY2V3YWtlX2RvbWFpbnMgZndfZG9tYWluczsKLQl9IHNl bmRfcmVnczsKLQotCS8qIFRvIHNlcmlhbGl6ZSB0aGUgaW50ZWxfZ3VjX3NlbmQgYWN0aW9ucyAq LwotCXN0cnVjdCBtdXRleCBzZW5kX211dGV4OwotCi0JLyogR3VDJ3MgRlcgc3BlY2lmaWMgc2Vu ZCBmdW5jdGlvbiAqLwotCWludCAoKnNlbmQpKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgY29uc3Qg dTMyICpkYXRhLCB1MzIgbGVuKTsKLQotCS8qIEd1QydzIEZXIHNwZWNpZmljIG5vdGlmeSBmdW5j dGlvbiAqLwotCXZvaWQgKCpub3RpZnkpKHN0cnVjdCBpbnRlbF9ndWMgKmd1Yyk7Ci19OwotCi1z dHJ1Y3QgaW50ZWxfaHVjIHsKLQkvKiBHZW5lcmljIHVDIGZpcm13YXJlIG1hbmFnZW1lbnQgKi8K LQlzdHJ1Y3QgaW50ZWxfdWNfZncgZnc7Ci0KLQkvKiBIdUMtc3BlY2lmaWMgYWRkaXRpb25zICov Ci19OwotCi0vKiBpbnRlbF91Yy5jICovCi12b2lkIGludGVsX3VjX3Nhbml0aXplX29wdGlvbnMo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLXZvaWQgaW50ZWxfdWNfaW5pdF9l YXJseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotdm9pZCBpbnRlbF91Y19p bml0X2Z3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci12b2lkIGludGVsX3Vj X2ZpbmlfZncoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLWludCBpbnRlbF91 Y19pbml0X2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci12b2lkIGludGVs X3VjX2ZpbmlfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLWludCBpbnRl bF9ndWNfc2FtcGxlX2ZvcmNld2FrZShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpOwotaW50IGludGVs X2d1Y19zZW5kX25vcChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIGNvbnN0IHUzMiAqYWN0aW9uLCB1 MzIgbGVuKTsKLWludCBpbnRlbF9ndWNfc2VuZF9tbWlvKHN0cnVjdCBpbnRlbF9ndWMgKmd1Yywg Y29uc3QgdTMyICphY3Rpb24sIHUzMiBsZW4pOwotCi1zdGF0aWMgaW5saW5lIGludCBpbnRlbF9n dWNfc2VuZChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIGNvbnN0IHUzMiAqYWN0aW9uLCB1MzIgbGVu KQotewotCXJldHVybiBndWMtPnNlbmQoZ3VjLCBhY3Rpb24sIGxlbik7Ci19Ci0KLXN0YXRpYyBp bmxpbmUgdm9pZCBpbnRlbF9ndWNfbm90aWZ5KHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKLXsKLQln dWMtPm5vdGlmeShndWMpOwotfQotCi0vKiBpbnRlbF9ndWNfbG9hZGVyLmMgKi8KLWludCBpbnRl bF9ndWNfc2VsZWN0X2Z3KHN0cnVjdCBpbnRlbF9ndWMgKmd1Yyk7Ci1pbnQgaW50ZWxfZ3VjX2lu aXRfaHcoc3RydWN0IGludGVsX2d1YyAqZ3VjKTsKLWludCBpbnRlbF9ndWNfc3VzcGVuZChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotaW50IGludGVsX2d1Y19yZXN1bWUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLXUzMiBpbnRlbF9ndWNfd29wY21fc2l6 ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotCi0vKiBpOTE1X2d1Y19zdWJt aXNzaW9uLmMgKi8KLWludCBpOTE1X2d1Y19zdWJtaXNzaW9uX2luaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KTsKLWludCBpOTE1X2d1Y19zdWJtaXNzaW9uX2VuYWJsZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotaW50IGk5MTVfZ3VjX3dxX3Jlc2VydmUo c3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycSk7Ci12b2lkIGk5MTVfZ3VjX3dxX3VucmVz ZXJ2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpOwotdm9pZCBpOTE1X2d1 Y19zdWJtaXNzaW9uX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsK LXZvaWQgaTkxNV9ndWNfc3VibWlzc2lvbl9maW5pKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdik7Ci1zdHJ1Y3QgaTkxNV92bWEgKmludGVsX2d1Y19hbGxvY2F0ZV92bWEoc3RydWN0 IGludGVsX2d1YyAqZ3VjLCB1MzIgc2l6ZSk7Ci0KLS8qIGludGVsX2d1Y19sb2cuYyAqLwotaW50 IGludGVsX2d1Y19sb2dfY3JlYXRlKHN0cnVjdCBpbnRlbF9ndWMgKmd1Yyk7Ci12b2lkIGludGVs X2d1Y19sb2dfZGVzdHJveShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpOwotaW50IGk5MTVfZ3VjX2xv Z19jb250cm9sKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTY0IGNvbnRyb2xf dmFsKTsKLXZvaWQgaTkxNV9ndWNfbG9nX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdik7Ci12b2lkIGk5MTVfZ3VjX2xvZ191bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdik7Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGd1Y19nZ3R0X29mZnNl dChzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKLXsKLQl1MzIgb2Zmc2V0ID0gaTkxNV9nZ3R0X29mZnNl dCh2bWEpOwotCUdFTV9CVUdfT04ob2Zmc2V0IDwgR1VDX1dPUENNX1RPUCk7Ci0JR0VNX0JVR19P TihyYW5nZV9vdmVyZmxvd3NfdCh1NjQsIG9mZnNldCwgdm1hLT5zaXplLCBHVUNfR0dUVF9UT1Ap KTsKLQlyZXR1cm4gb2Zmc2V0OwotfQotCi0vKiBpbnRlbF9odWMuYyAqLwotdm9pZCBpbnRlbF9o dWNfc2VsZWN0X2Z3KHN0cnVjdCBpbnRlbF9odWMgKmh1Yyk7Ci12b2lkIGludGVsX2h1Y19pbml0 X2h3KHN0cnVjdCBpbnRlbF9odWMgKmh1Yyk7Ci12b2lkIGludGVsX2d1Y19hdXRoX2h1YyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOworI2luY2x1ZGUgPGludGVsX3VjX2NvbW1v bi5oPgorI2luY2x1ZGUgPGludGVsX2d1Yy5oPgorI2luY2x1ZGUgPGludGVsX2h1Yy5oPgogCiAj ZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2NvbW1vbi5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWNfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ1NGY3MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3VjX2NvbW1vbi5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICog Q29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcg dGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICog VEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisjaWZuZGVmIF9JTlRFTF9VQ19DT01N T05fSF8KKyNkZWZpbmUgX0lOVEVMX1VDX0NPTU1PTl9IXworCitlbnVtIGludGVsX3VjX2Z3X3N0 YXR1cyB7CisJSU5URUxfVUNfRklSTVdBUkVfRkFJTCA9IC0xLAorCUlOVEVMX1VDX0ZJUk1XQVJF X05PTkUgPSAwLAorCUlOVEVMX1VDX0ZJUk1XQVJFX1BFTkRJTkcsCisJSU5URUxfVUNfRklSTVdB UkVfU1VDQ0VTUworfTsKKworLyogVXNlci1mcmllbmRseSByZXByZXNlbnRhdGlvbiBvZiBhbiBl bnVtICovCitzdGF0aWMgaW5saW5lCitjb25zdCBjaGFyICppbnRlbF91Y19md19zdGF0dXNfcmVw cihlbnVtIGludGVsX3VjX2Z3X3N0YXR1cyBzdGF0dXMpCit7CisJc3dpdGNoIChzdGF0dXMpIHsK KwljYXNlIElOVEVMX1VDX0ZJUk1XQVJFX0ZBSUw6CisJCXJldHVybiAiRkFJTCI7CisJY2FzZSBJ TlRFTF9VQ19GSVJNV0FSRV9OT05FOgorCQlyZXR1cm4gIk5PTkUiOworCWNhc2UgSU5URUxfVUNf RklSTVdBUkVfUEVORElORzoKKwkJcmV0dXJuICJQRU5ESU5HIjsKKwljYXNlIElOVEVMX1VDX0ZJ Uk1XQVJFX1NVQ0NFU1M6CisJCXJldHVybiAiU1VDQ0VTUyI7CisJfQorCXJldHVybiAiPGludmFs aWQ+IjsKK30KKworZW51bSBpbnRlbF91Y19md190eXBlIHsKKwlJTlRFTF9VQ19GV19UWVBFX0dV QywKKwlJTlRFTF9VQ19GV19UWVBFX0hVQworfTsKKworLyogVXNlci1mcmllbmRseSByZXByZXNl bnRhdGlvbiBvZiBhbiBlbnVtICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmludGVsX3Vj X2Z3X3R5cGVfcmVwcihlbnVtIGludGVsX3VjX2Z3X3R5cGUgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5 cGUpIHsKKwljYXNlIElOVEVMX1VDX0ZXX1RZUEVfR1VDOgorCQlyZXR1cm4gIkd1QyI7CisJY2Fz ZSBJTlRFTF9VQ19GV19UWVBFX0hVQzoKKwkJcmV0dXJuICJIdUMiOworCX0KKwlyZXR1cm4gInVD IjsKK30KKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGVuY2Fwc3VsYXRlcyBhbGwgdGhlIGRhdGEg bmVlZGVkIGR1cmluZyB0aGUgcHJvY2VzcworICogb2YgZmV0Y2hpbmcsIGNhY2hpbmcsIGFuZCBs b2FkaW5nIHRoZSBmaXJtd2FyZSBpbWFnZSBpbnRvIHRoZSBHdUMuCisgKi8KK3N0cnVjdCBpbnRl bF91Y19mdyB7CisJY29uc3QgY2hhciAqcGF0aDsKKwlzaXplX3Qgc2l6ZTsKKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqOworCWVudW0gaW50ZWxfdWNfZndfc3RhdHVzIGZldGNoX3N0 YXR1czsKKwllbnVtIGludGVsX3VjX2Z3X3N0YXR1cyBsb2FkX3N0YXR1czsKKworCXVpbnQxNl90 IG1ham9yX3Zlcl93YW50ZWQ7CisJdWludDE2X3QgbWlub3JfdmVyX3dhbnRlZDsKKwl1aW50MTZf dCBtYWpvcl92ZXJfZm91bmQ7CisJdWludDE2X3QgbWlub3JfdmVyX2ZvdW5kOworCisJZW51bSBp bnRlbF91Y19md190eXBlIHR5cGU7CisJdWludDMyX3QgaGVhZGVyX3NpemU7CisJdWludDMyX3Qg aGVhZGVyX29mZnNldDsKKwl1aW50MzJfdCByc2Ffc2l6ZTsKKwl1aW50MzJfdCByc2Ffb2Zmc2V0 OworCXVpbnQzMl90IHVjb2RlX3NpemU7CisJdWludDMyX3QgdWNvZGVfb2Zmc2V0OworfTsKKwor LyogaW50ZWxfdWMuYyAqLwordm9pZCBpbnRlbF91Y19zYW5pdGl6ZV9vcHRpb25zKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cit2b2lkIGludGVsX3VjX2luaXRfZWFybHkoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKK3ZvaWQgaW50ZWxfdWNfaW5pdF9mdyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwordm9pZCBpbnRlbF91Y19maW5pX2Z3 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CitpbnQgaW50ZWxfdWNfaW5pdF9o dyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwordm9pZCBpbnRlbF91Y19maW5p X2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CisKKyNlbmRpZgotLSAKMS45 LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=