From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 34287C433C1 for ; Thu, 25 Mar 2021 21:48:35 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E5944619BA for ; Thu, 25 Mar 2021 21:48:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E5944619BA Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 0567A6EE5D; Thu, 25 Mar 2021 21:48:34 +0000 (UTC) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id B54D46EE57 for ; Thu, 25 Mar 2021 21:48:25 +0000 (UTC) IronPort-SDR: sNP8qhxHneRxSahy3Jcxhfc0Tg1H69wNr4pSxsoatItI2wzOGKkFieVQ7lszhkQWZk7qn+5bap usAAM7ZY1FCg== X-IronPort-AV: E=McAfee;i="6000,8403,9934"; a="171005056" X-IronPort-AV: E=Sophos;i="5.81,278,1610438400"; d="scan'208";a="171005056" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Mar 2021 14:48:25 -0700 IronPort-SDR: Vmucq1diWk8MealdasXDplAogjeLC6iKE9Iuz6H46jOC8zYx+/RJFrnU81VRL/QW3Jr++GKfuS 7ION6PE59YmA== X-IronPort-AV: E=Sophos;i="5.81,278,1610438400"; d="scan'208";a="375235655" Received: from ideak-desk.fi.intel.com ([10.237.68.141]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Mar 2021 14:48:23 -0700 From: Imre Deak To: intel-gfx@lists.freedesktop.org Date: Thu, 25 Mar 2021 23:47:53 +0200 Message-Id: <20210325214808.2071517-11-imre.deak@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210325214808.2071517-1-imre.deak@intel.com> References: <20210325214808.2071517-1-imre.deak@intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v2 10/25] drm/i915/intel_fb: Pull FB plane functions from intel_display.c X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" TW92ZSB0aGUgRkIgcGxhbmUgc3BlY2lmaWMgZnVuY3Rpb25zIGZyb20gaW50ZWxfZGlzcGxheS5j IHRvIGludGVsX2ZiLmMuClRoZXJlJ3MgbW9yZSBmdW5jdGlvbnMgbGlrZSB0aGlzLCBidXQgSSBs ZWF2ZSBtb3ZpbmcgdGhvc2UgYXMgd2VsbCBmb3IgYQpmb2xsb3cgdXAsIGFuZCBmb3Igbm93IG1v dmluZyBvbmx5IHRoZSBvbmVzIG5lZWRlZCBieSB0aGUgZW5kIG9mIHRoaXMKcGF0Y2hzZXQgKGFk ZGluZyBzdXBwb3J0IGZvciBwYWRkaW5nIHRpbGUtcm93cyBpbiBhbiBGQiBHR1RUIHZpZXcpLgoK U2lnbmVkLW9mZi1ieTogSW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPgpSZXZpZXdlZC1i eTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KLS0tCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2k5eHhfcGxhbmUuYyAgICB8ICAgMSArCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2N1cnNvci5jICB8ICAgMSArCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyB8IDgxOCAtLS0tLS0tLS0tLS0t LS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaCB8ICAx MyAtCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2ZiLmMgICAgICB8IDgwNyAr KysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZmIu aCAgICAgIHwgIDMxICsKIDYgZmlsZXMgY2hhbmdlZCwgODQwIGluc2VydGlvbnMoKyksIDgzMSBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2k5 eHhfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaTl4eF9wbGFuZS5jCmlu ZGV4IDY5MTllZGUyMGIxOWIuLjQwMjY2Yjc4MjQ3YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaTl4eF9wbGFuZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaTl4eF9wbGFuZS5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSAiaW50ZWxf YXRvbWljLmgiCiAjaW5jbHVkZSAiaW50ZWxfYXRvbWljX3BsYW5lLmgiCiAjaW5jbHVkZSAiaW50 ZWxfZGlzcGxheV90eXBlcy5oIgorI2luY2x1ZGUgImludGVsX2ZiLmgiCiAjaW5jbHVkZSAiaW50 ZWxfc3ByaXRlLmgiCiAjaW5jbHVkZSAiaTl4eF9wbGFuZS5oIgogCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2N1cnNvci5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9jdXJzb3IuYwppbmRleCAwMTMyZWQzY2IwOWQzLi44NDA5OWI3 ZjVjMzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2N1 cnNvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3Vyc29yLmMK QEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlICJpbnRlbF9jdXJzb3IuaCIKICNpbmNsdWRlICJp bnRlbF9kaXNwbGF5X3R5cGVzLmgiCiAjaW5jbHVkZSAiaW50ZWxfZGlzcGxheS5oIgorI2luY2x1 ZGUgImludGVsX2ZiLmgiCiAKICNpbmNsdWRlICJpbnRlbF9mcm9udGJ1ZmZlci5oIgogI2luY2x1 ZGUgImludGVsX3BtLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlz cGxheS5jCmluZGV4IDczNmFiMjNiY2FlZjQuLjI1ZWFhOGE0NGJhYTggMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCkBAIC04NTYsMTkgKzg1Niw2IEBA IHZvaWQgaW50ZWxfZGlzYWJsZV9waXBlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpv bGRfY3J0Y19zdGF0ZSkKIAkJaW50ZWxfd2FpdF9mb3JfcGlwZV9vZmYob2xkX2NydGNfc3RhdGUp OwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGludGVsX3RpbGVfc2l6ZShjb25zdCBzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JcmV0dXJuIElTX0RJU1BMQVlfVkVSKGRl dl9wcml2LCAyKSA/IDIwNDggOiA0MDk2OwotfQotCi1zdGF0aWMgYm9vbCBpc19hdXhfcGxhbmUo Y29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSkKLXsKLQlpZiAoaXNf Y2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpCi0JCXJldHVybiBpc19jY3NfcGxhbmUoZmIsIHBs YW5lKTsKLQotCXJldHVybiBwbGFuZSA9PSAxOwotfQotCiBib29sCiBpbnRlbF9mb3JtYXRfaW5m b19pc195dXZfc2VtaXBsYW5hcihjb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICppbmZvLAog CQkJCSAgICB1NjQgbW9kaWZpZXIpCkBAIC04NzcsMTMgKzg2NCw2IEBAIGludGVsX2Zvcm1hdF9p bmZvX2lzX3l1dl9zZW1pcGxhbmFyKGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm8s CiAJICAgICAgIGluZm8tPm51bV9wbGFuZXMgPT0gKGlzX2Njc19tb2RpZmllcihtb2RpZmllcikg PyA0IDogMik7CiB9CiAKLXN0YXRpYyBib29sIGlzX3NlbWlwbGFuYXJfdXZfcGxhbmUoY29uc3Qg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCi0JCQkJICAgaW50IGNvbG9yX3BsYW5lKQotewot CXJldHVybiBpbnRlbF9mb3JtYXRfaW5mb19pc195dXZfc2VtaXBsYW5hcihmYi0+Zm9ybWF0LCBm Yi0+bW9kaWZpZXIpICYmCi0JICAgICAgIGNvbG9yX3BsYW5lID09IDE7Ci19Ci0KIHVuc2lnbmVk IGludAogaW50ZWxfdGlsZV93aWR0aF9ieXRlcyhjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiwgaW50IGNvbG9yX3BsYW5lKQogewpAQCAtOTM4LDM4ICs5MTgsNiBAQCBpbnRlbF90aWxl X3dpZHRoX2J5dGVzKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3Jf cGxhbmUpCiAJfQogfQogCi11bnNpZ25lZCBpbnQKLWludGVsX3RpbGVfaGVpZ2h0KGNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpCi17Ci0JaWYgKGlzX2dl bjEyX2Njc19wbGFuZShmYiwgY29sb3JfcGxhbmUpKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiBp bnRlbF90aWxlX3NpemUodG9faTkxNShmYi0+ZGV2KSkgLwotCQlpbnRlbF90aWxlX3dpZHRoX2J5 dGVzKGZiLCBjb2xvcl9wbGFuZSk7Ci19Ci0KLS8qIFJldHVybiB0aGUgdGlsZSBkaW1lbnNpb25z IGluIHBpeGVsIHVuaXRzICovCi1zdGF0aWMgdm9pZCBpbnRlbF90aWxlX2RpbXMoY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjb2xvcl9wbGFuZSwKLQkJCSAgICB1bnNpZ25l ZCBpbnQgKnRpbGVfd2lkdGgsCi0JCQkgICAgdW5zaWduZWQgaW50ICp0aWxlX2hlaWdodCkKLXsK LQl1bnNpZ25lZCBpbnQgdGlsZV93aWR0aF9ieXRlcyA9IGludGVsX3RpbGVfd2lkdGhfYnl0ZXMo ZmIsIGNvbG9yX3BsYW5lKTsKLQl1bnNpZ25lZCBpbnQgY3BwID0gZmItPmZvcm1hdC0+Y3BwW2Nv bG9yX3BsYW5lXTsKLQotCSp0aWxlX3dpZHRoID0gdGlsZV93aWR0aF9ieXRlcyAvIGNwcDsKLQkq dGlsZV9oZWlnaHQgPSBpbnRlbF90aWxlX2hlaWdodChmYiwgY29sb3JfcGxhbmUpOwotfQotCi1z dGF0aWMgdW5zaWduZWQgaW50IGludGVsX3RpbGVfcm93X3NpemUoY29uc3Qgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIsCi0JCQkJCWludCBjb2xvcl9wbGFuZSkKLXsKLQl1bnNpZ25lZCBpbnQg dGlsZV93aWR0aCwgdGlsZV9oZWlnaHQ7Ci0KLQlpbnRlbF90aWxlX2RpbXMoZmIsIGNvbG9yX3Bs YW5lLCAmdGlsZV93aWR0aCwgJnRpbGVfaGVpZ2h0KTsKLQotCXJldHVybiBmYi0+cGl0Y2hlc1tj b2xvcl9wbGFuZV0gKiB0aWxlX2hlaWdodDsKLX0KLQogdW5zaWduZWQgaW50CiBpbnRlbF9mYl9h bGlnbl9oZWlnaHQoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCiAJCSAgICAgIGlu dCBjb2xvcl9wbGFuZSwgdW5zaWduZWQgaW50IGhlaWdodCkKQEAgLTEwMDEsMzIgKzk0OSw2IEBA IHVuc2lnbmVkIGludCBpbnRlbF9yZW1hcHBlZF9pbmZvX3NpemUoY29uc3Qgc3RydWN0IGludGVs X3JlbWFwcGVkX2luZm8gKnJlbV9pbmZvCiAJcmV0dXJuIHNpemU7CiB9CiAKLXN0YXRpYyB2b2lk Ci1pbnRlbF9maWxsX2ZiX2dndHRfdmlldyhzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcgKnZpZXcsCi0J CQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKLQkJCXVuc2lnbmVkIGludCByb3Rh dGlvbikKLXsKLQltZW1zZXQodmlldywgMCwgc2l6ZW9mKCp2aWV3KSk7Ci0KLQl2aWV3LT50eXBl ID0gSTkxNV9HR1RUX1ZJRVdfTk9STUFMOwotCWlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcwKHJv dGF0aW9uKSkgewotCQl2aWV3LT50eXBlID0gSTkxNV9HR1RUX1ZJRVdfUk9UQVRFRDsKLQkJdmll dy0+cm90YXRlZCA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKS0+cm90X2luZm87Ci0JfQotfQot Ci1zdGF0aWMgdW5zaWduZWQgaW50IGludGVsX2N1cnNvcl9hbGlnbm1lbnQoY29uc3Qgc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCWlmIChJU19JODMwKGRldl9wcml2KSkK LQkJcmV0dXJuIDE2ICogMTAyNDsKLQllbHNlIGlmIChJU19JODVYKGRldl9wcml2KSkKLQkJcmV0 dXJuIDI1NjsKLQllbHNlIGlmIChJU19JODQ1RyhkZXZfcHJpdikgfHwgSVNfSTg2NUcoZGV2X3By aXYpKQotCQlyZXR1cm4gMzI7Ci0JZWxzZQotCQlyZXR1cm4gNCAqIDEwMjQ7Ci19Ci0KIHN0YXRp YyB1bnNpZ25lZCBpbnQgaW50ZWxfbGluZWFyX2FsaWdubWVudChjb25zdCBzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJaWYgKERJU1BMQVlfVkVSKGRldl9wcml2KSA+PSA5 KQpAQCAtMTIyNywxNSArMTE0OSw2IEBAIHZvaWQgaW50ZWxfdW5waW5fZmJfdm1hKHN0cnVjdCBp OTE1X3ZtYSAqdm1hLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogCWk5MTVfdm1hX3B1dCh2bWEpOwog fQogCi1zdGF0aWMgaW50IGludGVsX2ZiX3BpdGNoKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUsCi0JCQkgIHVuc2lnbmVkIGludCByb3RhdGlvbikKLXsK LQlpZiAoZHJtX3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpCi0JCXJldHVybiB0b19pbnRl bF9mcmFtZWJ1ZmZlcihmYiktPnJvdGF0ZWRbY29sb3JfcGxhbmVdLnBpdGNoOwotCWVsc2UKLQkJ cmV0dXJuIGZiLT5waXRjaGVzW2NvbG9yX3BsYW5lXTsKLX0KLQogLyoKICAqIENvbnZlcnQgdGhl IHgveSBvZmZzZXRzIGludG8gYSBsaW5lYXIgb2Zmc2V0LgogICogT25seSB2YWxpZCB3aXRoIDAv MTgwIGRlZ3JlZSByb3RhdGlvbiwgd2hpY2ggaXMgZmluZSBzaW5jZSBsaW5lYXIKQEAgLTEyNjcs MjI0ICsxMTgwLDYgQEAgdm9pZCBpbnRlbF9hZGRfZmJfb2Zmc2V0cyhpbnQgKngsIGludCAqeSwK IAkqeSArPSBzdGF0ZS0+Y29sb3JfcGxhbmVbY29sb3JfcGxhbmVdLnk7CiB9CiAKLXN0YXRpYyB1 MzIgaW50ZWxfYWRqdXN0X3RpbGVfb2Zmc2V0KGludCAqeCwgaW50ICp5LAotCQkJCSAgICB1bnNp Z25lZCBpbnQgdGlsZV93aWR0aCwKLQkJCQkgICAgdW5zaWduZWQgaW50IHRpbGVfaGVpZ2h0LAot CQkJCSAgICB1bnNpZ25lZCBpbnQgdGlsZV9zaXplLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgcGl0 Y2hfdGlsZXMsCi0JCQkJICAgIHUzMiBvbGRfb2Zmc2V0LAotCQkJCSAgICB1MzIgbmV3X29mZnNl dCkKLXsKLQl1bnNpZ25lZCBpbnQgcGl0Y2hfcGl4ZWxzID0gcGl0Y2hfdGlsZXMgKiB0aWxlX3dp ZHRoOwotCXVuc2lnbmVkIGludCB0aWxlczsKLQotCVdBUk5fT04ob2xkX29mZnNldCAmICh0aWxl X3NpemUgLSAxKSk7Ci0JV0FSTl9PTihuZXdfb2Zmc2V0ICYgKHRpbGVfc2l6ZSAtIDEpKTsKLQlX QVJOX09OKG5ld19vZmZzZXQgPiBvbGRfb2Zmc2V0KTsKLQotCXRpbGVzID0gKG9sZF9vZmZzZXQg LSBuZXdfb2Zmc2V0KSAvIHRpbGVfc2l6ZTsKLQotCSp5ICs9IHRpbGVzIC8gcGl0Y2hfdGlsZXMg KiB0aWxlX2hlaWdodDsKLQkqeCArPSB0aWxlcyAlIHBpdGNoX3RpbGVzICogdGlsZV93aWR0aDsK LQotCS8qIG1pbmltaXplIHggaW4gY2FzZSBpdCBnb3QgbmVlZGxlc3NseSBiaWcgKi8KLQkqeSAr PSAqeCAvIHBpdGNoX3BpeGVscyAqIHRpbGVfaGVpZ2h0OwotCSp4ICU9IHBpdGNoX3BpeGVsczsK LQotCXJldHVybiBuZXdfb2Zmc2V0OwotfQotCi1zdGF0aWMgdTMyIGludGVsX2FkanVzdF9hbGln bmVkX29mZnNldChpbnQgKngsIGludCAqeSwKLQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIsCi0JCQkJICAgICAgIGludCBjb2xvcl9wbGFuZSwKLQkJCQkgICAgICAg dW5zaWduZWQgaW50IHJvdGF0aW9uLAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcGl0Y2gsCi0J CQkJICAgICAgIHUzMiBvbGRfb2Zmc2V0LCB1MzIgbmV3X29mZnNldCkKLXsKLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGZiLT5kZXYpOwotCXVuc2lnbmVkIGlu dCBjcHAgPSBmYi0+Zm9ybWF0LT5jcHBbY29sb3JfcGxhbmVdOwotCi0JZHJtX1dBUk5fT04oJmRl dl9wcml2LT5kcm0sIG5ld19vZmZzZXQgPiBvbGRfb2Zmc2V0KTsKLQotCWlmICghaXNfc3VyZmFj ZV9saW5lYXIoZmIsIGNvbG9yX3BsYW5lKSkgewotCQl1bnNpZ25lZCBpbnQgdGlsZV9zaXplLCB0 aWxlX3dpZHRoLCB0aWxlX2hlaWdodDsKLQkJdW5zaWduZWQgaW50IHBpdGNoX3RpbGVzOwotCi0J CXRpbGVfc2l6ZSA9IGludGVsX3RpbGVfc2l6ZShkZXZfcHJpdik7Ci0JCWludGVsX3RpbGVfZGlt cyhmYiwgY29sb3JfcGxhbmUsICZ0aWxlX3dpZHRoLCAmdGlsZV9oZWlnaHQpOwotCi0JCWlmIChk cm1fcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkgewotCQkJcGl0Y2hfdGlsZXMgPSBwaXRj aCAvIHRpbGVfaGVpZ2h0OwotCQkJc3dhcCh0aWxlX3dpZHRoLCB0aWxlX2hlaWdodCk7Ci0JCX0g ZWxzZSB7Ci0JCQlwaXRjaF90aWxlcyA9IHBpdGNoIC8gKHRpbGVfd2lkdGggKiBjcHApOwotCQl9 Ci0KLQkJaW50ZWxfYWRqdXN0X3RpbGVfb2Zmc2V0KHgsIHksIHRpbGVfd2lkdGgsIHRpbGVfaGVp Z2h0LAotCQkJCQkgdGlsZV9zaXplLCBwaXRjaF90aWxlcywKLQkJCQkJIG9sZF9vZmZzZXQsIG5l d19vZmZzZXQpOwotCX0gZWxzZSB7Ci0JCW9sZF9vZmZzZXQgKz0gKnkgKiBwaXRjaCArICp4ICog Y3BwOwotCi0JCSp5ID0gKG9sZF9vZmZzZXQgLSBuZXdfb2Zmc2V0KSAvIHBpdGNoOwotCQkqeCA9 ICgob2xkX29mZnNldCAtIG5ld19vZmZzZXQpIC0gKnkgKiBwaXRjaCkgLyBjcHA7Ci0JfQotCi0J cmV0dXJuIG5ld19vZmZzZXQ7Ci19Ci0KLS8qCi0gKiBBZGp1c3QgdGhlIHRpbGUgb2Zmc2V0IGJ5 IG1vdmluZyB0aGUgZGlmZmVyZW5jZSBpbnRvCi0gKiB0aGUgeC95IG9mZnNldHMuCi0gKi8KLXUz MiBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoaW50ICp4LCBpbnQgKnksCi0JCQkJ ICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpzdGF0ZSwKLQkJCQkgICAgICBp bnQgY29sb3JfcGxhbmUsCi0JCQkJICAgICAgdTMyIG9sZF9vZmZzZXQsIHUzMiBuZXdfb2Zmc2V0 KQotewotCXJldHVybiBpbnRlbF9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoeCwgeSwgc3RhdGUtPmh3 LmZiLCBjb2xvcl9wbGFuZSwKLQkJCQkJICAgc3RhdGUtPmh3LnJvdGF0aW9uLAotCQkJCQkgICBz dGF0ZS0+Y29sb3JfcGxhbmVbY29sb3JfcGxhbmVdLnN0cmlkZSwKLQkJCQkJICAgb2xkX29mZnNl dCwgbmV3X29mZnNldCk7Ci19Ci0KLS8qCi0gKiBDb21wdXRlcyB0aGUgYWxpZ25lZCBvZmZzZXQg dG8gdGhlIGJhc2UgdGlsZSBhbmQgYWRqdXN0cwotICogeCwgeS4gYnl0ZXMgcGVyIHBpeGVsIGlz IGFzc3VtZWQgdG8gYmUgYSBwb3dlci1vZi10d28uCi0gKgotICogSW4gdGhlIDkwLzI3MCByb3Rh dGVkIGNhc2UsIHggYW5kIHkgYXJlIGFzc3VtZWQKLSAqIHRvIGJlIGFscmVhZHkgcm90YXRlZCB0 byBtYXRjaCB0aGUgcm90YXRlZCBHVFQgdmlldywgYW5kCi0gKiBwaXRjaCBpcyB0aGUgdGlsZV9o ZWlnaHQgYWxpZ25lZCBmcmFtZWJ1ZmZlciBoZWlnaHQuCi0gKgotICogVGhpcyBmdW5jdGlvbiBp cyB1c2VkIHdoZW4gY29tcHV0aW5nIHRoZSBkZXJpdmVkIGluZm9ybWF0aW9uCi0gKiB1bmRlciBp bnRlbF9mcmFtZWJ1ZmZlciwgc28gdXNpbmcgYW55IG9mIHRoYXQgaW5mb3JtYXRpb24KLSAqIGhl cmUgaXMgbm90IGFsbG93ZWQuIEFueXRoaW5nIHVuZGVyIGRybV9mcmFtZWJ1ZmZlciBjYW4gYmUK LSAqIHVzZWQuIFRoaXMgaXMgd2h5IHRoZSB1c2VyIGhhcyB0byBwYXNzIGluIHRoZSBwaXRjaCBz aW5jZSBpdAotICogaXMgc3BlY2lmaWVkIGluIHRoZSByb3RhdGVkIG9yaWVudGF0aW9uLgotICov Ci1zdGF0aWMgdTMyIGludGVsX2NvbXB1dGVfYWxpZ25lZF9vZmZzZXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCQlpbnQgKngsIGludCAqeSwKLQkJCQkJY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCi0JCQkJCWludCBjb2xvcl9wbGFuZSwKLQkJCQkJdW5z aWduZWQgaW50IHBpdGNoLAotCQkJCQl1bnNpZ25lZCBpbnQgcm90YXRpb24sCi0JCQkJCXUzMiBh bGlnbm1lbnQpCi17Ci0JdW5zaWduZWQgaW50IGNwcCA9IGZiLT5mb3JtYXQtPmNwcFtjb2xvcl9w bGFuZV07Ci0JdTMyIG9mZnNldCwgb2Zmc2V0X2FsaWduZWQ7Ci0KLQlpZiAoIWlzX3N1cmZhY2Vf bGluZWFyKGZiLCBjb2xvcl9wbGFuZSkpIHsKLQkJdW5zaWduZWQgaW50IHRpbGVfc2l6ZSwgdGls ZV93aWR0aCwgdGlsZV9oZWlnaHQ7Ci0JCXVuc2lnbmVkIGludCB0aWxlX3Jvd3MsIHRpbGVzLCBw aXRjaF90aWxlczsKLQotCQl0aWxlX3NpemUgPSBpbnRlbF90aWxlX3NpemUoZGV2X3ByaXYpOwot CQlpbnRlbF90aWxlX2RpbXMoZmIsIGNvbG9yX3BsYW5lLCAmdGlsZV93aWR0aCwgJnRpbGVfaGVp Z2h0KTsKLQotCQlpZiAoZHJtX3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpIHsKLQkJCXBp dGNoX3RpbGVzID0gcGl0Y2ggLyB0aWxlX2hlaWdodDsKLQkJCXN3YXAodGlsZV93aWR0aCwgdGls ZV9oZWlnaHQpOwotCQl9IGVsc2UgewotCQkJcGl0Y2hfdGlsZXMgPSBwaXRjaCAvICh0aWxlX3dp ZHRoICogY3BwKTsKLQkJfQotCi0JCXRpbGVfcm93cyA9ICp5IC8gdGlsZV9oZWlnaHQ7Ci0JCSp5 ICU9IHRpbGVfaGVpZ2h0OwotCi0JCXRpbGVzID0gKnggLyB0aWxlX3dpZHRoOwotCQkqeCAlPSB0 aWxlX3dpZHRoOwotCi0JCW9mZnNldCA9ICh0aWxlX3Jvd3MgKiBwaXRjaF90aWxlcyArIHRpbGVz KSAqIHRpbGVfc2l6ZTsKLQotCQlvZmZzZXRfYWxpZ25lZCA9IG9mZnNldDsKLQkJaWYgKGFsaWdu bWVudCkKLQkJCW9mZnNldF9hbGlnbmVkID0gcm91bmRkb3duKG9mZnNldF9hbGlnbmVkLCBhbGln bm1lbnQpOwotCi0JCWludGVsX2FkanVzdF90aWxlX29mZnNldCh4LCB5LCB0aWxlX3dpZHRoLCB0 aWxlX2hlaWdodCwKLQkJCQkJIHRpbGVfc2l6ZSwgcGl0Y2hfdGlsZXMsCi0JCQkJCSBvZmZzZXQs IG9mZnNldF9hbGlnbmVkKTsKLQl9IGVsc2UgewotCQlvZmZzZXQgPSAqeSAqIHBpdGNoICsgKngg KiBjcHA7Ci0JCW9mZnNldF9hbGlnbmVkID0gb2Zmc2V0OwotCQlpZiAoYWxpZ25tZW50KSB7Ci0J CQlvZmZzZXRfYWxpZ25lZCA9IHJvdW5kZG93bihvZmZzZXRfYWxpZ25lZCwgYWxpZ25tZW50KTsK LQkJCSp5ID0gKG9mZnNldCAlIGFsaWdubWVudCkgLyBwaXRjaDsKLQkJCSp4ID0gKChvZmZzZXQg JSBhbGlnbm1lbnQpIC0gKnkgKiBwaXRjaCkgLyBjcHA7Ci0JCX0gZWxzZSB7Ci0JCQkqeSA9ICp4 ID0gMDsKLQkJfQotCX0KLQotCXJldHVybiBvZmZzZXRfYWxpZ25lZDsKLX0KLQotdTMyIGludGVs X3BsYW5lX2NvbXB1dGVfYWxpZ25lZF9vZmZzZXQoaW50ICp4LCBpbnQgKnksCi0JCQkJICAgICAg IGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3RhdGUsCi0JCQkJICAgICAgIGludCBj b2xvcl9wbGFuZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lID0gdG9faW50 ZWxfcGxhbmUoc3RhdGUtPnVhcGkucGxhbmUpOwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHRvX2k5MTUoaW50ZWxfcGxhbmUtPmJhc2UuZGV2KTsKLQljb25zdCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0YXRlLT5ody5mYjsKLQl1bnNpZ25lZCBpbnQgcm90YXRp b24gPSBzdGF0ZS0+aHcucm90YXRpb247Ci0JaW50IHBpdGNoID0gc3RhdGUtPmNvbG9yX3BsYW5l W2NvbG9yX3BsYW5lXS5zdHJpZGU7Ci0JdTMyIGFsaWdubWVudDsKLQotCWlmIChpbnRlbF9wbGFu ZS0+aWQgPT0gUExBTkVfQ1VSU09SKQotCQlhbGlnbm1lbnQgPSBpbnRlbF9jdXJzb3JfYWxpZ25t ZW50KGRldl9wcml2KTsKLQllbHNlCi0JCWFsaWdubWVudCA9IGludGVsX3N1cmZfYWxpZ25tZW50 KGZiLCBjb2xvcl9wbGFuZSk7Ci0KLQlyZXR1cm4gaW50ZWxfY29tcHV0ZV9hbGlnbmVkX29mZnNl dChkZXZfcHJpdiwgeCwgeSwgZmIsIGNvbG9yX3BsYW5lLAotCQkJCQkgICAgcGl0Y2gsIHJvdGF0 aW9uLCBhbGlnbm1lbnQpOwotfQotCi0vKiBDb252ZXJ0IHRoZSBmYi0+b2Zmc2V0W10gaW50byB4 L3kgb2Zmc2V0cyAqLwotc3RhdGljIGludCBpbnRlbF9mYl9vZmZzZXRfdG9feHkoaW50ICp4LCBp bnQgKnksCi0JCQkJIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJCSBpbnQg Y29sb3JfcGxhbmUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShmYi0+ZGV2KTsKLQl1bnNpZ25lZCBpbnQgaGVpZ2h0OwotCXUzMiBhbGlnbm1lbnQ7Ci0K LQlpZiAoRElTUExBWV9WRVIoZGV2X3ByaXYpID49IDEyICYmCi0JICAgIGlzX3NlbWlwbGFuYXJf dXZfcGxhbmUoZmIsIGNvbG9yX3BsYW5lKSkKLQkJYWxpZ25tZW50ID0gaW50ZWxfdGlsZV9yb3df c2l6ZShmYiwgY29sb3JfcGxhbmUpOwotCWVsc2UgaWYgKGZiLT5tb2RpZmllciAhPSBEUk1fRk9S TUFUX01PRF9MSU5FQVIpCi0JCWFsaWdubWVudCA9IGludGVsX3RpbGVfc2l6ZShkZXZfcHJpdik7 Ci0JZWxzZQotCQlhbGlnbm1lbnQgPSAwOwotCi0JaWYgKGFsaWdubWVudCAhPSAwICYmIGZiLT5v ZmZzZXRzW2NvbG9yX3BsYW5lXSAlIGFsaWdubWVudCkgewotCQlkcm1fZGJnX2ttcygmZGV2X3By aXYtPmRybSwKLQkJCSAgICAiTWlzYWxpZ25lZCBvZmZzZXQgMHglMDh4IGZvciBjb2xvciBwbGFu ZSAlZFxuIiwKLQkJCSAgICBmYi0+b2Zmc2V0c1tjb2xvcl9wbGFuZV0sIGNvbG9yX3BsYW5lKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaGVpZ2h0ID0gZHJtX2ZyYW1lYnVmZmVyX3BsYW5l X2hlaWdodChmYi0+aGVpZ2h0LCBmYiwgY29sb3JfcGxhbmUpOwotCWhlaWdodCA9IEFMSUdOKGhl aWdodCwgaW50ZWxfdGlsZV9oZWlnaHQoZmIsIGNvbG9yX3BsYW5lKSk7Ci0KLQkvKiBDYXRjaCBw b3RlbnRpYWwgb3ZlcmZsb3dzIGVhcmx5ICovCi0JaWYgKGFkZF9vdmVyZmxvd3NfdCh1MzIsIG11 bF91MzJfdTMyKGhlaWdodCwgZmItPnBpdGNoZXNbY29sb3JfcGxhbmVdKSwKLQkJCSAgICBmYi0+ b2Zmc2V0c1tjb2xvcl9wbGFuZV0pKSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAot CQkJICAgICJCYWQgb2Zmc2V0IDB4JTA4eCBvciBwaXRjaCAlZCBmb3IgY29sb3IgcGxhbmUgJWRc biIsCi0JCQkgICAgZmItPm9mZnNldHNbY29sb3JfcGxhbmVdLCBmYi0+cGl0Y2hlc1tjb2xvcl9w bGFuZV0sCi0JCQkgICAgY29sb3JfcGxhbmUpOwotCQlyZXR1cm4gLUVSQU5HRTsKLQl9Ci0KLQkq eCA9IDA7Ci0JKnkgPSAwOwotCi0JaW50ZWxfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KHgsIHksCi0J CQkJICAgIGZiLCBjb2xvcl9wbGFuZSwgRFJNX01PREVfUk9UQVRFXzAsCi0JCQkJICAgIGZiLT5w aXRjaGVzW2NvbG9yX3BsYW5lXSwKLQkJCQkgICAgZmItPm9mZnNldHNbY29sb3JfcGxhbmVdLCAw KTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdW5zaWduZWQgaW50IGludGVsX2ZiX21vZGlm aWVyX3RvX3RpbGluZyh1NjQgZmJfbW9kaWZpZXIpCiB7CiAJc3dpdGNoIChmYl9tb2RpZmllcikg ewpAQCAtMTcyMCw1MTkgKzE0MTUsNiBAQCBpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpCiAJcmV0dXJuIHRp bGVfd2lkdGg7CiB9CiAKLWJvb2wgaW50ZWxfcGxhbmVfY2FuX3JlbWFwKGNvbnN0IHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGludGVsX3BsYW5lICpw bGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0J Y29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0J aW50IGk7Ci0KLQkvKiBXZSBkb24ndCB3YW50IHRvIGRlYWwgd2l0aCByZW1hcHBpbmcgd2l0aCBj dXJzb3JzICovCi0JaWYgKHBsYW5lLT5pZCA9PSBQTEFORV9DVVJTT1IpCi0JCXJldHVybiBmYWxz ZTsKLQotCS8qCi0JICogVGhlIGRpc3BsYXkgZW5naW5lIGxpbWl0cyBhbHJlYWR5IG1hdGNoL2V4 Y2VlZCB0aGUKLQkgKiByZW5kZXIgZW5naW5lIGxpbWl0cywgc28gbm90IG11Y2ggcG9pbnQgaW4g cmVtYXBwaW5nLgotCSAqIFdvdWxkIGFsc28gbmVlZCB0byBkZWFsIHdpdGggdGhlIGZlbmNlIFBP VCBhbGlnbm1lbnQKLQkgKiBhbmQgZ2VuMiAyS2lCIEdUVCB0aWxlIHNpemUuCi0JICovCi0JaWYg KERJU1BMQVlfVkVSKGRldl9wcml2KSA8IDQpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qCi0JICog VGhlIG5ldyBDQ1MgaGFzaCBtb2RlIGlzbid0IGNvbXBhdGlibGUgd2l0aCByZW1hcHBpbmcgYXMK LQkgKiB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBwYWdlcyBhZmZlY3RzIHRoZSBjb21wcmVz c2VkIGRhdGEuCi0JICovCi0JaWYgKGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpKQotCQly ZXR1cm4gZmFsc2U7Ci0KLQkvKiBMaW5lYXIgbmVlZHMgYSBwYWdlIGFsaWduZWQgc3RyaWRlIGZv ciByZW1hcHBpbmcgKi8KLQlpZiAoZmItPm1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVB UikgewotCQl1bnNpZ25lZCBpbnQgYWxpZ25tZW50ID0gaW50ZWxfdGlsZV9zaXplKGRldl9wcml2 KSAtIDE7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGZiLT5mb3JtYXQtPm51bV9wbGFuZXM7IGkrKykg ewotCQkJaWYgKGZiLT5waXRjaGVzW2ldICYgYWxpZ25tZW50KQotCQkJCXJldHVybiBmYWxzZTsK LQkJfQotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBpbnRlbF9wbGFuZV9u ZWVkc19yZW1hcChjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQot ewotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0 ZS0+dWFwaS5wbGFuZSk7Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFu ZV9zdGF0ZS0+aHcuZmI7Ci0JdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3 LnJvdGF0aW9uOwotCXUzMiBzdHJpZGUsIG1heF9zdHJpZGU7Ci0KLQkvKgotCSAqIE5vIHJlbWFw cGluZyBmb3IgaW52aXNpYmxlIHBsYW5lcyBzaW5jZSB3ZSBkb24ndCBoYXZlCi0JICogYW4gYWN0 dWFsIHNvdXJjZSB2aWV3cG9ydCB0byByZW1hcC4KLQkgKi8KLQlpZiAoIXBsYW5lX3N0YXRlLT51 YXBpLnZpc2libGUpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmICghaW50ZWxfcGxhbmVfY2FuX3Jl bWFwKHBsYW5lX3N0YXRlKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JLyoKLQkgKiBGSVhNRTogYXV4 IHBsYW5lIGxpbWl0cyBvbiBnZW45KyBhcmUKLQkgKiB1bmNsZWFyIGluIEJzcGVjLCBmb3Igbm93 IG5vIGNoZWNraW5nLgotCSAqLwotCXN0cmlkZSA9IGludGVsX2ZiX3BpdGNoKGZiLCAwLCByb3Rh dGlvbik7Ci0JbWF4X3N0cmlkZSA9IHBsYW5lLT5tYXhfc3RyaWRlKHBsYW5lLCBmYi0+Zm9ybWF0 LT5mb3JtYXQsCi0JCQkJICAgICAgIGZiLT5tb2RpZmllciwgcm90YXRpb24pOwotCi0JcmV0dXJu IHN0cmlkZSA+IG1heF9zdHJpZGU7Ci19Ci0KLXZvaWQKLWludGVsX2ZiX3BsYW5lX2dldF9zdWJz YW1wbGluZyhpbnQgKmhzdWIsIGludCAqdnN1YiwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpmYiwKLQkJCSAgICAgICBpbnQgY29sb3JfcGxhbmUpCi17Ci0JaW50IG1h aW5fcGxhbmU7Ci0KLQlpZiAoY29sb3JfcGxhbmUgPT0gMCkgewotCQkqaHN1YiA9IDE7Ci0JCSp2 c3ViID0gMTsKLQotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBUT0RPOiBEZWR1Y3QgdGhlIHN1 YnNhbXBsaW5nIGZyb20gdGhlIGNoYXIgYmxvY2sgZm9yIGFsbCBDQ1MKLQkgKiBmb3JtYXRzIGFu ZCBwbGFuZXMuCi0JICovCi0JaWYgKCFpc19nZW4xMl9jY3NfcGxhbmUoZmIsIGNvbG9yX3BsYW5l KSkgewotCQkqaHN1YiA9IGZiLT5mb3JtYXQtPmhzdWI7Ci0JCSp2c3ViID0gZmItPmZvcm1hdC0+ dnN1YjsKLQotCQlyZXR1cm47Ci0JfQotCi0JbWFpbl9wbGFuZSA9IHNrbF9jY3NfdG9fbWFpbl9w bGFuZShmYiwgY29sb3JfcGxhbmUpOwotCSpoc3ViID0gZHJtX2Zvcm1hdF9pbmZvX2Jsb2NrX3dp ZHRoKGZiLT5mb3JtYXQsIGNvbG9yX3BsYW5lKSAvCi0JCWRybV9mb3JtYXRfaW5mb19ibG9ja193 aWR0aChmYi0+Zm9ybWF0LCBtYWluX3BsYW5lKTsKLQotCS8qCi0JICogVGhlIG1pbiBzdHJpZGUg Y2hlY2sgaW4gdGhlIGNvcmUgZnJhbWVidWZmZXJfY2hlY2soKSBmdW5jdGlvbgotCSAqIGFzc3Vt ZXMgdGhhdCBmb3JtYXQtPmhzdWIgYXBwbGllcyB0byBldmVyeSBwbGFuZSBleGNlcHQgZm9yIHRo ZQotCSAqIGZpcnN0IHBsYW5lLiBUaGF0J3MgaW5jb3JyZWN0IGZvciB0aGUgQ0NTIEFVWCBwbGFu ZSBvZiB0aGUgZmlyc3QKLQkgKiBwbGFuZSwgYnV0IGZvciB0aGUgYWJvdmUgY2hlY2sgdG8gcGFz cyB3ZSBtdXN0IGRlZmluZSB0aGUgYmxvY2sKLQkgKiB3aWR0aCB3aXRoIHRoYXQgc3Vic2FtcGxp bmcgYXBwbGllZCB0byBpdC4gQWRqdXN0IHRoZSB3aWR0aCBoZXJlCi0JICogYWNjb3JkaW5nbHks IHNvIHdlIGNhbiBjYWxjdWxhdGUgdGhlIGFjdHVhbCBzdWJzYW1wbGluZyBmYWN0b3IuCi0JICov Ci0JaWYgKG1haW5fcGxhbmUgPT0gMCkKLQkJKmhzdWIgKj0gZmItPmZvcm1hdC0+aHN1YjsKLQot CSp2c3ViID0gMzI7Ci19Ci1zdGF0aWMgaW50Ci1pbnRlbF9mYl9jaGVja19jY3NfeHkoc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjY3NfcGxhbmUsIGludCB4LCBpbnQgeSkKLXsKLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUoZmItPmRldik7Ci0Jc3RydWN0 IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsK LQlpbnQgbWFpbl9wbGFuZTsKLQlpbnQgaHN1YiwgdnN1YjsKLQlpbnQgdGlsZV93aWR0aCwgdGls ZV9oZWlnaHQ7Ci0JaW50IGNjc194LCBjY3NfeTsKLQlpbnQgbWFpbl94LCBtYWluX3k7Ci0KLQlp ZiAoIWlzX2Njc19wbGFuZShmYiwgY2NzX3BsYW5lKSB8fCBpc19nZW4xMl9jY3NfY2NfcGxhbmUo ZmIsIGNjc19wbGFuZSkpCi0JCXJldHVybiAwOwotCi0JaW50ZWxfdGlsZV9kaW1zKGZiLCBjY3Nf cGxhbmUsICZ0aWxlX3dpZHRoLCAmdGlsZV9oZWlnaHQpOwotCWludGVsX2ZiX3BsYW5lX2dldF9z dWJzYW1wbGluZygmaHN1YiwgJnZzdWIsIGZiLCBjY3NfcGxhbmUpOwotCi0JdGlsZV93aWR0aCAq PSBoc3ViOwotCXRpbGVfaGVpZ2h0ICo9IHZzdWI7Ci0KLQljY3NfeCA9ICh4ICogaHN1YikgJSB0 aWxlX3dpZHRoOwotCWNjc195ID0gKHkgKiB2c3ViKSAlIHRpbGVfaGVpZ2h0OwotCi0JbWFpbl9w bGFuZSA9IHNrbF9jY3NfdG9fbWFpbl9wbGFuZShmYiwgY2NzX3BsYW5lKTsKLQltYWluX3ggPSBp bnRlbF9mYi0+bm9ybWFsW21haW5fcGxhbmVdLnggJSB0aWxlX3dpZHRoOwotCW1haW5feSA9IGlu dGVsX2ZiLT5ub3JtYWxbbWFpbl9wbGFuZV0ueSAlIHRpbGVfaGVpZ2h0OwotCi0JLyoKLQkgKiBD Q1MgZG9lc24ndCBoYXZlIGl0cyBvd24geC95IG9mZnNldCByZWdpc3Rlciwgc28gdGhlIGludHJh IENDUyB0aWxlCi0JICogeC95IG9mZnNldHMgbXVzdCBtYXRjaCBiZXR3ZWVuIENDUyBhbmQgdGhl IG1haW4gc3VyZmFjZS4KLQkgKi8KLQlpZiAobWFpbl94ICE9IGNjc194IHx8IG1haW5feSAhPSBj Y3NfeSkgewotCQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLAotCQkJICAgICAgIkJhZCBDQ1MgeC95 IChtYWluICVkLCVkIGNjcyAlZCwlZCkgZnVsbCAobWFpbiAlZCwlZCBjY3MgJWQsJWQpXG4iLAot CQkJICAgICAgbWFpbl94LCBtYWluX3ksCi0JCQkgICAgICBjY3NfeCwgY2NzX3ksCi0JCQkgICAg ICBpbnRlbF9mYi0+bm9ybWFsW21haW5fcGxhbmVdLngsCi0JCQkgICAgICBpbnRlbF9mYi0+bm9y bWFsW21haW5fcGxhbmVdLnksCi0JCQkgICAgICB4LCB5KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pbnRlbF9mYl9wbGFuZV9kaW1zKGlu dCAqdywgaW50ICpoLCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5l KQotewotCWludCBtYWluX3BsYW5lID0gaXNfY2NzX3BsYW5lKGZiLCBjb2xvcl9wbGFuZSkgPwot CQkJIHNrbF9jY3NfdG9fbWFpbl9wbGFuZShmYiwgY29sb3JfcGxhbmUpIDogMDsKLQlpbnQgbWFp bl9oc3ViLCBtYWluX3ZzdWI7Ci0JaW50IGhzdWIsIHZzdWI7Ci0KLQlpbnRlbF9mYl9wbGFuZV9n ZXRfc3Vic2FtcGxpbmcoJm1haW5faHN1YiwgJm1haW5fdnN1YiwgZmIsIG1haW5fcGxhbmUpOwot CWludGVsX2ZiX3BsYW5lX2dldF9zdWJzYW1wbGluZygmaHN1YiwgJnZzdWIsIGZiLCBjb2xvcl9w bGFuZSk7Ci0JKncgPSBmYi0+d2lkdGggLyBtYWluX2hzdWIgLyBoc3ViOwotCSpoID0gZmItPmhl aWdodCAvIG1haW5fdnN1YiAvIHZzdWI7Ci19Ci0KLS8qCi0gKiBTZXR1cCB0aGUgcm90YXRlZCB2 aWV3IGZvciBhbiBGQiBwbGFuZSBhbmQgcmV0dXJuIHRoZSBzaXplIHRoZSBHVFQgbWFwcGluZwot ICogcmVxdWlyZXMgZm9yIHRoaXMgdmlldy4KLSAqLwotc3RhdGljIHUzMgotc2V0dXBfZmJfcm90 YXRpb24oaW50IHBsYW5lLCBjb25zdCBzdHJ1Y3QgaW50ZWxfcmVtYXBwZWRfcGxhbmVfaW5mbyAq cGxhbmVfaW5mbywKLQkJICB1MzIgZ3R0X29mZnNldF9yb3RhdGVkLCBpbnQgeCwgaW50IHksCi0J CSAgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LAotCQkgIHVuc2lnbmVk IGludCB0aWxlX3NpemUsCi0JCSAgdW5zaWduZWQgaW50IHRpbGVfd2lkdGgsIHVuc2lnbmVkIGlu dCB0aWxlX2hlaWdodCwKLQkJICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKLXsKLQlzdHJ1 Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiID0gdG9faW50ZWxfZnJhbWVidWZmZXIoZmIp OwotCXN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvICpyb3RfaW5mbyA9ICZpbnRlbF9mYi0+cm90 X2luZm87Ci0JdW5zaWduZWQgaW50IHBpdGNoX3RpbGVzOwotCXN0cnVjdCBkcm1fcmVjdCByOwot Ci0JLyogWSBvciBZZiBtb2RpZmllcnMgcmVxdWlyZWQgZm9yIDkwLzI3MCByb3RhdGlvbiAqLwot CWlmIChmYi0+bW9kaWZpZXIgIT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQgJiYKLQkgICAgZmIt Pm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCkKLQkJcmV0dXJuIDA7Ci0KLQlp ZiAoZHJtX1dBUk5fT04oZmItPmRldiwgcGxhbmUgPj0gQVJSQVlfU0laRShyb3RfaW5mby0+cGxh bmUpKSkKLQkJcmV0dXJuIDA7Ci0KLQlyb3RfaW5mby0+cGxhbmVbcGxhbmVdID0gKnBsYW5lX2lu Zm87Ci0KLQlpbnRlbF9mYi0+cm90YXRlZFtwbGFuZV0ucGl0Y2ggPSBwbGFuZV9pbmZvLT5oZWln aHQgKiB0aWxlX2hlaWdodDsKLQotCS8qIHJvdGF0ZSB0aGUgeC95IG9mZnNldHMgdG8gbWF0Y2gg dGhlIEdUVCB2aWV3ICovCi0JZHJtX3JlY3RfaW5pdCgmciwgeCwgeSwgd2lkdGgsIGhlaWdodCk7 Ci0JZHJtX3JlY3Rfcm90YXRlKCZyLAotCQkJcGxhbmVfaW5mby0+d2lkdGggKiB0aWxlX3dpZHRo LAotCQkJcGxhbmVfaW5mby0+aGVpZ2h0ICogdGlsZV9oZWlnaHQsCi0JCQlEUk1fTU9ERV9ST1RB VEVfMjcwKTsKLQl4ID0gci54MTsKLQl5ID0gci55MTsKLQotCS8qIHJvdGF0ZSB0aGUgdGlsZSBk aW1lbnNpb25zIHRvIG1hdGNoIHRoZSBHVFQgdmlldyAqLwotCXBpdGNoX3RpbGVzID0gaW50ZWxf ZmItPnJvdGF0ZWRbcGxhbmVdLnBpdGNoIC8gdGlsZV9oZWlnaHQ7Ci0Jc3dhcCh0aWxlX3dpZHRo LCB0aWxlX2hlaWdodCk7Ci0KLQkvKgotCSAqIFdlIG9ubHkga2VlcCB0aGUgeC95IG9mZnNldHMs IHNvIHB1c2ggYWxsIG9mIHRoZQotCSAqIGd0dCBvZmZzZXQgaW50byB0aGUgeC95IG9mZnNldHMu Ci0JICovCi0JaW50ZWxfYWRqdXN0X3RpbGVfb2Zmc2V0KCZ4LCAmeSwKLQkJCQkgdGlsZV93aWR0 aCwgdGlsZV9oZWlnaHQsCi0JCQkJIHRpbGVfc2l6ZSwgcGl0Y2hfdGlsZXMsCi0JCQkJIGd0dF9v ZmZzZXRfcm90YXRlZCAqIHRpbGVfc2l6ZSwgMCk7Ci0KLQkvKgotCSAqIEZpcnN0IHBpeGVsIG9m IHRoZSBmcmFtZWJ1ZmZlciBmcm9tCi0JICogdGhlIHN0YXJ0IG9mIHRoZSByb3RhdGVkIGd0dCBt YXBwaW5nLgotCSAqLwotCWludGVsX2ZiLT5yb3RhdGVkW3BsYW5lXS54ID0geDsKLQlpbnRlbF9m Yi0+cm90YXRlZFtwbGFuZV0ueSA9IHk7Ci0KLQlyZXR1cm4gcGxhbmVfaW5mby0+d2lkdGggKiBw bGFuZV9pbmZvLT5oZWlnaHQ7Ci19Ci0KLXN0YXRpYyBpbnQKLWludGVsX2ZpbGxfZmJfaW5mbyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCSAgIHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiKQotewotCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIgPSB0b19p bnRlbF9mcmFtZWJ1ZmZlcihmYik7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9 IGludGVsX2ZiX29iaihmYik7Ci0JdTMyIGd0dF9vZmZzZXRfcm90YXRlZCA9IDA7Ci0JdW5zaWdu ZWQgaW50IG1heF9zaXplID0gMDsKLQlpbnQgaSwgbnVtX3BsYW5lcyA9IGZiLT5mb3JtYXQtPm51 bV9wbGFuZXM7Ci0JdW5zaWduZWQgaW50IHRpbGVfc2l6ZSA9IGludGVsX3RpbGVfc2l6ZShkZXZf cHJpdik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BsYW5lczsgaSsrKSB7Ci0JCXVuc2lnbmVk IGludCB3aWR0aCwgaGVpZ2h0OwotCQl1bnNpZ25lZCBpbnQgY3BwLCBzaXplOwotCQl1MzIgb2Zm c2V0OwotCQlpbnQgeCwgeTsKLQkJaW50IHJldDsKLQotCQkvKgotCQkgKiBQbGFuZSAyIG9mIFJl bmRlciBDb21wcmVzc2lvbiB3aXRoIENsZWFyIENvbG9yIGZiIG1vZGlmaWVyCi0JCSAqIGlzIGNv bnN1bWVkIGJ5IHRoZSBkcml2ZXIgYW5kIG5vdCBwYXNzZWQgdG8gREUuIFNraXAgdGhlCi0JCSAq IGFyaXRobWV0aWMgcmVsYXRlZCB0byBhbGlnbm1lbnQgYW5kIG9mZnNldCBjYWxjdWxhdGlvbi4K LQkJICovCi0JCWlmIChpc19nZW4xMl9jY3NfY2NfcGxhbmUoZmIsIGkpKSB7Ci0JCQlpZiAoSVNf QUxJR05FRChmYi0+b2Zmc2V0c1tpXSwgUEFHRV9TSVpFKSkKLQkJCQljb250aW51ZTsKLQkJCWVs c2UKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWNwcCA9IGZiLT5mb3JtYXQtPmNwcFtp XTsKLQkJaW50ZWxfZmJfcGxhbmVfZGltcygmd2lkdGgsICZoZWlnaHQsIGZiLCBpKTsKLQotCQly ZXQgPSBpbnRlbF9mYl9vZmZzZXRfdG9feHkoJngsICZ5LCBmYiwgaSk7Ci0JCWlmIChyZXQpIHsK LQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJCSAgICAiYmFkIGZiIHBsYW5lICVk IG9mZnNldDogMHgleFxuIiwKLQkJCQkgICAgaSwgZmItPm9mZnNldHNbaV0pOwotCQkJcmV0dXJu IHJldDsKLQkJfQotCi0JCXJldCA9IGludGVsX2ZiX2NoZWNrX2Njc194eShmYiwgaSwgeCwgeSk7 Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCS8qCi0JCSAqIFRoZSBmZW5jZSAoaWYg dXNlZCkgaXMgYWxpZ25lZCB0byB0aGUgc3RhcnQgb2YgdGhlIG9iamVjdAotCQkgKiBzbyBoYXZp bmcgdGhlIGZyYW1lYnVmZmVyIHdyYXAgYXJvdW5kIGFjcm9zcyB0aGUgZWRnZSBvZiB0aGUKLQkJ ICogZmVuY2VkIHJlZ2lvbiBkb2Vzbid0IHJlYWxseSB3b3JrLiBXZSBoYXZlIG5vIEFQSSB0byBj b25maWd1cmUKLQkJICogdGhlIGZlbmNlIHN0YXJ0IG9mZnNldCB3aXRoaW4gdGhlIG9iamVjdCAo bm9yIGNvdWxkIHdlIHByb2JhYmx5Ci0JCSAqIG9uIGdlbjIvMykuIFNvIGl0J3MganVzdCBlYXNp ZXIgaWYgd2UganVzdCByZXF1aXJlIHRoYXQgdGhlCi0JCSAqIGZiIGxheW91dCBhZ3JlZXMgd2l0 aCB0aGUgZmVuY2UgbGF5b3V0LiBXZSBhbHJlYWR5IGNoZWNrIHRoYXQgdGhlCi0JCSAqIGZiIHN0 cmlkZSBtYXRjaGVzIHRoZSBmZW5jZSBzdHJpZGUgZWxzZXdoZXJlLgotCQkgKi8KLQkJaWYgKGkg PT0gMCAmJiBpOTE1X2dlbV9vYmplY3RfaXNfdGlsZWQob2JqKSAmJgotCQkgICAgKHggKyB3aWR0 aCkgKiBjcHAgPiBmYi0+cGl0Y2hlc1tpXSkgewotCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5k cm0sCi0JCQkJICAgICJiYWQgZmIgcGxhbmUgJWQgb2Zmc2V0OiAweCV4XG4iLAotCQkJCSAgICAg aSwgZmItPm9mZnNldHNbaV0pOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQkvKgotCQkg KiBGaXJzdCBwaXhlbCBvZiB0aGUgZnJhbWVidWZmZXIgZnJvbQotCQkgKiB0aGUgc3RhcnQgb2Yg dGhlIG5vcm1hbCBndHQgbWFwcGluZy4KLQkJICovCi0JCWludGVsX2ZiLT5ub3JtYWxbaV0ueCA9 IHg7Ci0JCWludGVsX2ZiLT5ub3JtYWxbaV0ueSA9IHk7Ci0KLQkJb2Zmc2V0ID0gaW50ZWxfY29t cHV0ZV9hbGlnbmVkX29mZnNldChkZXZfcHJpdiwgJngsICZ5LCBmYiwgaSwKLQkJCQkJCSAgICAg IGZiLT5waXRjaGVzW2ldLAotCQkJCQkJICAgICAgRFJNX01PREVfUk9UQVRFXzAsCi0JCQkJCQkg ICAgICB0aWxlX3NpemUpOwotCQlvZmZzZXQgLz0gdGlsZV9zaXplOwotCi0JCWlmICghaXNfc3Vy ZmFjZV9saW5lYXIoZmIsIGkpKSB7Ci0JCQlzdHJ1Y3QgaW50ZWxfcmVtYXBwZWRfcGxhbmVfaW5m byBwbGFuZV9pbmZvOwotCQkJdW5zaWduZWQgaW50IHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0Owot Ci0JCQlpbnRlbF90aWxlX2RpbXMoZmIsIGksICZ0aWxlX3dpZHRoLCAmdGlsZV9oZWlnaHQpOwot Ci0JCQlwbGFuZV9pbmZvLm9mZnNldCA9IG9mZnNldDsKLQkJCXBsYW5lX2luZm8uc3RyaWRlID0g RElWX1JPVU5EX1VQKGZiLT5waXRjaGVzW2ldLAotCQkJCQkJCSB0aWxlX3dpZHRoICogY3BwKTsK LQkJCXBsYW5lX2luZm8ud2lkdGggPSBESVZfUk9VTkRfVVAoeCArIHdpZHRoLCB0aWxlX3dpZHRo KTsKLQkJCXBsYW5lX2luZm8uaGVpZ2h0ID0gRElWX1JPVU5EX1VQKHkgKyBoZWlnaHQsCi0JCQkJ CQkJIHRpbGVfaGVpZ2h0KTsKLQotCQkJLyogaG93IG1hbnkgdGlsZXMgZG9lcyB0aGlzIHBsYW5l IG5lZWQgKi8KLQkJCXNpemUgPSBwbGFuZV9pbmZvLnN0cmlkZSAqIHBsYW5lX2luZm8uaGVpZ2h0 OwotCQkJLyoKLQkJCSAqIElmIHRoZSBwbGFuZSBpc24ndCBob3Jpem9udGFsbHkgdGlsZSBhbGln bmVkLAotCQkJICogd2UgbmVlZCBvbmUgbW9yZSB0aWxlLgotCQkJICovCi0JCQlpZiAoeCAhPSAw KQotCQkJCXNpemUrKzsKLQotCQkJZ3R0X29mZnNldF9yb3RhdGVkICs9Ci0JCQkJc2V0dXBfZmJf cm90YXRpb24oaSwgJnBsYW5lX2luZm8sCi0JCQkJCQkgIGd0dF9vZmZzZXRfcm90YXRlZCwKLQkJ CQkJCSAgeCwgeSwgd2lkdGgsIGhlaWdodCwKLQkJCQkJCSAgdGlsZV9zaXplLAotCQkJCQkJICB0 aWxlX3dpZHRoLCB0aWxlX2hlaWdodCwKLQkJCQkJCSAgZmIpOwotCQl9IGVsc2UgewotCQkJc2l6 ZSA9IERJVl9ST1VORF9VUCgoeSArIGhlaWdodCkgKiBmYi0+cGl0Y2hlc1tpXSArCi0JCQkJCSAg ICB4ICogY3BwLCB0aWxlX3NpemUpOwotCQl9Ci0KLQkJLyogaG93IG1hbnkgdGlsZXMgaW4gdG90 YWwgbmVlZGVkIGluIHRoZSBibyAqLwotCQltYXhfc2l6ZSA9IG1heChtYXhfc2l6ZSwgb2Zmc2V0 ICsgc2l6ZSk7Ci0JfQotCi0JaWYgKG11bF91MzJfdTMyKG1heF9zaXplLCB0aWxlX3NpemUpID4g b2JqLT5iYXNlLnNpemUpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkgICAg ImZiIHRvbyBiaWcgZm9yIGJvIChuZWVkICVsbHUgYnl0ZXMsIGhhdmUgJXp1IGJ5dGVzKVxuIiwK LQkJCSAgICBtdWxfdTMyX3UzMihtYXhfc2l6ZSwgdGlsZV9zaXplKSwgb2JqLT5iYXNlLnNpemUp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQK LWludGVsX3BsYW5lX3JlbWFwX2d0dChzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0 YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Ci0JCXRvX2k5MTUo cGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Ci0Jc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0Jc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRl bF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKLQlzdHJ1Y3QgaW50ZWxfcm90YXRpb25f aW5mbyAqaW5mbyA9ICZwbGFuZV9zdGF0ZS0+dmlldy5yb3RhdGVkOwotCXVuc2lnbmVkIGludCBy b3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKLQlpbnQgaSwgbnVtX3BsYW5lcyA9 IGZiLT5mb3JtYXQtPm51bV9wbGFuZXM7Ci0JdW5zaWduZWQgaW50IHRpbGVfc2l6ZSA9IGludGVs X3RpbGVfc2l6ZShkZXZfcHJpdik7Ci0JdW5zaWduZWQgaW50IHNyY194LCBzcmNfeTsKLQl1bnNp Z25lZCBpbnQgc3JjX3csIHNyY19oOwotCXUzMiBndHRfb2Zmc2V0ID0gMDsKLQotCW1lbXNldCgm cGxhbmVfc3RhdGUtPnZpZXcsIDAsIHNpemVvZihwbGFuZV9zdGF0ZS0+dmlldykpOwotCXBsYW5l X3N0YXRlLT52aWV3LnR5cGUgPSBkcm1fcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSA/Ci0J CUk5MTVfR0dUVF9WSUVXX1JPVEFURUQgOiBJOTE1X0dHVFRfVklFV19SRU1BUFBFRDsKLQotCXNy Y194ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLngxID4+IDE2OwotCXNyY195ID0gcGxhbmVfc3Rh dGUtPnVhcGkuc3JjLnkxID4+IDE2OwotCXNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0 YXRlLT51YXBpLnNyYykgPj4gMTY7Ci0Jc3JjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0 YXRlLT51YXBpLnNyYykgPj4gMTY7Ci0KLQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgaXNf Y2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpOwotCi0JLyogTWFrZSBzcmMgY29vcmRpbmF0ZXMg cmVsYXRpdmUgdG8gdGhlIHZpZXdwb3J0ICovCi0JZHJtX3JlY3RfdHJhbnNsYXRlKCZwbGFuZV9z dGF0ZS0+dWFwaS5zcmMsCi0JCQkgICAtKHNyY194IDw8IDE2KSwgLShzcmNfeSA8PCAxNikpOwot Ci0JLyogUm90YXRlIHNyYyBjb29yZGluYXRlcyB0byBtYXRjaCByb3RhdGVkIEdUVCB2aWV3ICov Ci0JaWYgKGRybV9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKQotCQlkcm1fcmVjdF9yb3Rh dGUoJnBsYW5lX3N0YXRlLT51YXBpLnNyYywKLQkJCQlzcmNfdyA8PCAxNiwgc3JjX2ggPDwgMTYs Ci0JCQkJRFJNX01PREVfUk9UQVRFXzI3MCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BsYW5l czsgaSsrKSB7Ci0JCXVuc2lnbmVkIGludCBoc3ViID0gaSA/IGZiLT5mb3JtYXQtPmhzdWIgOiAx OwotCQl1bnNpZ25lZCBpbnQgdnN1YiA9IGkgPyBmYi0+Zm9ybWF0LT52c3ViIDogMTsKLQkJdW5z aWduZWQgaW50IGNwcCA9IGZiLT5mb3JtYXQtPmNwcFtpXTsKLQkJdW5zaWduZWQgaW50IHRpbGVf d2lkdGgsIHRpbGVfaGVpZ2h0OwotCQl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsKLQkJdW5z aWduZWQgaW50IHBpdGNoX3RpbGVzOwotCQl1bnNpZ25lZCBpbnQgeCwgeTsKLQkJdTMyIG9mZnNl dDsKLQotCQlpbnRlbF90aWxlX2RpbXMoZmIsIGksICZ0aWxlX3dpZHRoLCAmdGlsZV9oZWlnaHQp OwotCi0JCXggPSBzcmNfeCAvIGhzdWI7Ci0JCXkgPSBzcmNfeSAvIHZzdWI7Ci0JCXdpZHRoID0g c3JjX3cgLyBoc3ViOwotCQloZWlnaHQgPSBzcmNfaCAvIHZzdWI7Ci0KLQkJLyoKLQkJICogRmly c3QgcGl4ZWwgb2YgdGhlIHNyYyB2aWV3cG9ydCBmcm9tIHRoZQotCQkgKiBzdGFydCBvZiB0aGUg bm9ybWFsIGd0dCBtYXBwaW5nLgotCQkgKi8KLQkJeCArPSBpbnRlbF9mYi0+bm9ybWFsW2ldLng7 Ci0JCXkgKz0gaW50ZWxfZmItPm5vcm1hbFtpXS55OwotCi0JCW9mZnNldCA9IGludGVsX2NvbXB1 dGVfYWxpZ25lZF9vZmZzZXQoZGV2X3ByaXYsICZ4LCAmeSwKLQkJCQkJCSAgICAgIGZiLCBpLCBm Yi0+cGl0Y2hlc1tpXSwKLQkJCQkJCSAgICAgIERSTV9NT0RFX1JPVEFURV8wLCB0aWxlX3NpemUp OwotCQlvZmZzZXQgLz0gdGlsZV9zaXplOwotCi0JCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJt LCBpID49IEFSUkFZX1NJWkUoaW5mby0+cGxhbmUpKTsKLQkJaW5mby0+cGxhbmVbaV0ub2Zmc2V0 ID0gb2Zmc2V0OwotCQlpbmZvLT5wbGFuZVtpXS5zdHJpZGUgPSBESVZfUk9VTkRfVVAoZmItPnBp dGNoZXNbaV0sCi0JCQkJCQkgICAgIHRpbGVfd2lkdGggKiBjcHApOwotCQlpbmZvLT5wbGFuZVtp XS53aWR0aCA9IERJVl9ST1VORF9VUCh4ICsgd2lkdGgsIHRpbGVfd2lkdGgpOwotCQlpbmZvLT5w bGFuZVtpXS5oZWlnaHQgPSBESVZfUk9VTkRfVVAoeSArIGhlaWdodCwgdGlsZV9oZWlnaHQpOwot Ci0JCWlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkgewotCQkJc3RydWN0IGRy bV9yZWN0IHI7Ci0KLQkJCS8qIHJvdGF0ZSB0aGUgeC95IG9mZnNldHMgdG8gbWF0Y2ggdGhlIEdU VCB2aWV3ICovCi0JCQlkcm1fcmVjdF9pbml0KCZyLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLQkJ CWRybV9yZWN0X3JvdGF0ZSgmciwKLQkJCQkJaW5mby0+cGxhbmVbaV0ud2lkdGggKiB0aWxlX3dp ZHRoLAotCQkJCQlpbmZvLT5wbGFuZVtpXS5oZWlnaHQgKiB0aWxlX2hlaWdodCwKLQkJCQkJRFJN X01PREVfUk9UQVRFXzI3MCk7Ci0JCQl4ID0gci54MTsKLQkJCXkgPSByLnkxOwotCi0JCQlwaXRj aF90aWxlcyA9IGluZm8tPnBsYW5lW2ldLmhlaWdodDsKLQkJCXBsYW5lX3N0YXRlLT5jb2xvcl9w bGFuZVtpXS5zdHJpZGUgPSBwaXRjaF90aWxlcyAqIHRpbGVfaGVpZ2h0OwotCi0JCQkvKiByb3Rh dGUgdGhlIHRpbGUgZGltZW5zaW9ucyB0byBtYXRjaCB0aGUgR1RUIHZpZXcgKi8KLQkJCXN3YXAo dGlsZV93aWR0aCwgdGlsZV9oZWlnaHQpOwotCQl9IGVsc2UgewotCQkJcGl0Y2hfdGlsZXMgPSBp bmZvLT5wbGFuZVtpXS53aWR0aDsKLQkJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS5zdHJp ZGUgPSBwaXRjaF90aWxlcyAqIHRpbGVfd2lkdGggKiBjcHA7Ci0JCX0KLQotCQkvKgotCQkgKiBX ZSBvbmx5IGtlZXAgdGhlIHgveSBvZmZzZXRzLCBzbyBwdXNoIGFsbCBvZiB0aGUKLQkJICogZ3R0 IG9mZnNldCBpbnRvIHRoZSB4L3kgb2Zmc2V0cy4KLQkJICovCi0JCWludGVsX2FkanVzdF90aWxl X29mZnNldCgmeCwgJnksCi0JCQkJCSB0aWxlX3dpZHRoLCB0aWxlX2hlaWdodCwKLQkJCQkJIHRp bGVfc2l6ZSwgcGl0Y2hfdGlsZXMsCi0JCQkJCSBndHRfb2Zmc2V0ICogdGlsZV9zaXplLCAwKTsK LQotCQlndHRfb2Zmc2V0ICs9IGluZm8tPnBsYW5lW2ldLndpZHRoICogaW5mby0+cGxhbmVbaV0u aGVpZ2h0OwotCi0JCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS5vZmZzZXQgPSAwOwotCQlw bGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0ueCA9IHg7Ci0JCXBsYW5lX3N0YXRlLT5jb2xvcl9w bGFuZVtpXS55ID0geTsKLQl9Ci19Ci0KLWludAotaW50ZWxfcGxhbmVfY29tcHV0ZV9ndHQoc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQljb25zdCBzdHJ1Y3QgaW50 ZWxfZnJhbWVidWZmZXIgKmZiID0KLQkJdG9faW50ZWxfZnJhbWVidWZmZXIocGxhbmVfc3RhdGUt Pmh3LmZiKTsKLQl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRp b247Ci0JaW50IGksIG51bV9wbGFuZXM7Ci0KLQlpZiAoIWZiKQotCQlyZXR1cm4gMDsKLQotCW51 bV9wbGFuZXMgPSBmYi0+YmFzZS5mb3JtYXQtPm51bV9wbGFuZXM7Ci0KLQlpZiAoaW50ZWxfcGxh bmVfbmVlZHNfcmVtYXAocGxhbmVfc3RhdGUpKSB7Ci0JCWludGVsX3BsYW5lX3JlbWFwX2d0dChw bGFuZV9zdGF0ZSk7Ci0KLQkJLyoKLQkJICogU29tZXRpbWVzIGV2ZW4gcmVtYXBwaW5nIGNhbid0 IG92ZXJjb21lCi0JCSAqIHRoZSBzdHJpZGUgbGltaXRhdGlvbnMgOiggQ2FuIGhhcHBlbiB3aXRo Ci0JCSAqIGJpZyBwbGFuZSBzaXplcyBhbmQgc3VpdGFibHkgbWlzYWxpZ25lZAotCQkgKiBvZmZz ZXRzLgotCQkgKi8KLQkJcmV0dXJuIGludGVsX3BsYW5lX2NoZWNrX3N0cmlkZShwbGFuZV9zdGF0 ZSk7Ci0JfQotCi0JaW50ZWxfZmlsbF9mYl9nZ3R0X3ZpZXcoJnBsYW5lX3N0YXRlLT52aWV3LCAm ZmItPmJhc2UsIHJvdGF0aW9uKTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1fcGxhbmVzOyBpKysp IHsKLQkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ldLnN0cmlkZSA9IGludGVsX2ZiX3BpdGNo KCZmYi0+YmFzZSwgaSwgcm90YXRpb24pOwotCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0u b2Zmc2V0ID0gMDsKLQotCQlpZiAoZHJtX3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpIHsK LQkJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS54ID0gZmItPnJvdGF0ZWRbaV0ueDsKLQkJ CXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS55ID0gZmItPnJvdGF0ZWRbaV0ueTsKLQkJfSBl bHNlIHsKLQkJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS54ID0gZmItPm5vcm1hbFtpXS54 OwotCQkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ldLnkgPSBmYi0+bm9ybWFsW2ldLnk7Ci0J CX0KLQl9Ci0KLQkvKiBSb3RhdGUgc3JjIGNvb3JkaW5hdGVzIHRvIG1hdGNoIHJvdGF0ZWQgR1RU IHZpZXcgKi8KLQlpZiAoZHJtX3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpCi0JCWRybV9y ZWN0X3JvdGF0ZSgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjLAotCQkJCWZiLT5iYXNlLndpZHRoIDw8 IDE2LCBmYi0+YmFzZS5oZWlnaHQgPDwgMTYsCi0JCQkJRFJNX01PREVfUk9UQVRFXzI3MCk7Ci0K LQlyZXR1cm4gaW50ZWxfcGxhbmVfY2hlY2tfc3RyaWRlKHBsYW5lX3N0YXRlKTsKLX0KLQogc3Rh dGljIHN0cnVjdCBpOTE1X3ZtYSAqCiBpbml0aWFsX3BsYW5lX3ZtYShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSwKIAkJICBzdHJ1Y3QgaW50ZWxfaW5pdGlhbF9wbGFuZV9jb25maWcgKnBs YW5lX2NvbmZpZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfZGlzcGxheS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5 LmgKaW5kZXggZjA1NmUxOWNmNTU5YS4uNjJjZTNiMDZmZjk4YSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmgKQEAgLTUxNSw3ICs1MTUsNiBAQCB2b2lk IGludGVsX2xpbmtfY29tcHV0ZV9tX24odTE2IGJwcCwgaW50IG5sYW5lcywKIHZvaWQgbHB0X2Rp c2FibGVfY2xrb3V0X2RwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB1MzIg aW50ZWxfcGxhbmVfZmJfbWF4X3N0cmlkZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCiAJCQkgICAgICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIpOwotYm9vbCBpbnRl bF9wbGFuZV9jYW5fcmVtYXAoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSk7CiBlbnVtIGRybV9tb2RlX3N0YXR1cwogaW50ZWxfbW9kZV92YWxpZF9tYXhfcGxhbmVf c2l6ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkJY29uc3Qgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCkBAIC02MjcsMTAgKzYyNiw2IEBAIGJvb2wKIGludGVs X2Zvcm1hdF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2lu Zm8gKmluZm8sCiAJCQkJICAgIHU2NCBtb2RpZmllcik7CiAKLWludCBpbnRlbF9wbGFuZV9jb21w dXRlX2d0dChzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKLXUzMiBpbnRl bF9wbGFuZV9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KGludCAqeCwgaW50ICp5LAotCQkJCSAgICAg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnN0YXRlLAotCQkJCSAgICAgICBpbnQg Y29sb3JfcGxhbmUpOwogaW50IGludGVsX3BsYW5lX3Bpbl9mYihzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUgKnBsYW5lX3N0YXRlKTsKIHZvaWQgaW50ZWxfcGxhbmVfdW5waW5fZmIoc3RydWN0IGlu dGVsX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUpOwogc3RydWN0IGludGVsX2VuY29kZXIg KgpAQCAtNjM5LDE1ICs2MzQsNyBAQCBpbnRlbF9nZXRfY3J0Y19uZXdfZW5jb2Rlcihjb25zdCBz dHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKIAogdW5zaWduZWQgaW50IGludGVsX3N1 cmZfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAogCQkJCSAgaW50 IGNvbG9yX3BsYW5lKTsKLXZvaWQgaW50ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKGludCAq aHN1YiwgaW50ICp2c3ViLAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiwKLQkJCQkgICAgaW50IGNvbG9yX3BsYW5lKTsKLXUzMiBpbnRlbF9wbGFuZV9hZGp1c3RfYWxp Z25lZF9vZmZzZXQoaW50ICp4LCBpbnQgKnksCi0JCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpzdGF0ZSwKLQkJCQkgICAgICBpbnQgY29sb3JfcGxhbmUsCi0JCQkJICAg ICAgdTMyIG9sZF9vZmZzZXQsIHUzMiBuZXdfb2Zmc2V0KTsKIHVuc2lnbmVkIGludCBpbnRlbF90 aWxlX3dpZHRoX2J5dGVzKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29s b3JfcGxhbmUpOwotdW5zaWduZWQgaW50IGludGVsX3RpbGVfaGVpZ2h0KGNvbnN0IHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpOwogCiB2b2lkIGludGVsX2Rpc3Bs YXlfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKIHZvaWQg aW50ZWxfZGlzcGxheV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Zi LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2ZiLmMKaW5kZXggOGIxNGUw NjlmYzcxMC4uYjg3MmViMjlmZDBkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfZmIuYwpAQCAtNSw2ICs1LDcgQEAKIAogI2luY2x1ZGUgPGRybS9kcm1fZnJhbWVidWZmZXIu aD4KIAorI2luY2x1ZGUgImludGVsX2Rpc3BsYXkuaCIKICNpbmNsdWRlICJpbnRlbF9kaXNwbGF5 X3R5cGVzLmgiCiAjaW5jbHVkZSAiaW50ZWxfZmIuaCIKIApAQCAtMjcsNiArMjgsMjAgQEAgYm9v bCBpc19nZW4xMl9jY3NfY2NfcGxhbmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs IGludCBwbGFuZSkKIAkgICAgICAgcGxhbmUgPT0gMjsKIH0KIAorYm9vbCBpc19hdXhfcGxhbmUo Y29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSkKK3sKKwlpZiAoaXNf Y2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpCisJCXJldHVybiBpc19jY3NfcGxhbmUoZmIsIHBs YW5lKTsKKworCXJldHVybiBwbGFuZSA9PSAxOworfQorCitib29sIGlzX3NlbWlwbGFuYXJfdXZf cGxhbmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjb2xvcl9wbGFuZSkK K3sKKwlyZXR1cm4gaW50ZWxfZm9ybWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIoZmItPmZvcm1h dCwgZmItPm1vZGlmaWVyKSAmJgorCQljb2xvcl9wbGFuZSA9PSAxOworfQorCiBib29sIGlzX3N1 cmZhY2VfbGluZWFyKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3Jf cGxhbmUpCiB7CiAJcmV0dXJuIGZiLT5tb2RpZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIg fHwKQEAgLTY1LDYgKzgwLDc1MCBAQCBpbnQgc2tsX21haW5fdG9fYXV4X3BsYW5lKGNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgbWFpbl9wbGFuZSkKIAkJcmV0dXJuIDA7CiB9 CiAKK3Vuc2lnbmVkIGludCBpbnRlbF90aWxlX3NpemUoY29uc3Qgc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQoreworCXJldHVybiBJU19ESVNQTEFZX1ZFUihkZXZfcHJpdiwgMikg PyAyMDQ4IDogNDA5NjsKK30KKwordW5zaWduZWQgaW50IGludGVsX3RpbGVfaGVpZ2h0KGNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpCit7CisJaWYgKGlz X2dlbjEyX2Njc19wbGFuZShmYiwgY29sb3JfcGxhbmUpKQorCQlyZXR1cm4gMTsKKworCXJldHVy biBpbnRlbF90aWxlX3NpemUodG9faTkxNShmYi0+ZGV2KSkgLworCQlpbnRlbF90aWxlX3dpZHRo X2J5dGVzKGZiLCBjb2xvcl9wbGFuZSk7Cit9CisKKy8qIFJldHVybiB0aGUgdGlsZSBkaW1lbnNp b25zIGluIHBpeGVsIHVuaXRzICovCitzdGF0aWMgdm9pZCBpbnRlbF90aWxlX2RpbXMoY29uc3Qg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjb2xvcl9wbGFuZSwKKwkJCSAgICB1bnNp Z25lZCBpbnQgKnRpbGVfd2lkdGgsCisJCQkgICAgdW5zaWduZWQgaW50ICp0aWxlX2hlaWdodCkK K3sKKwl1bnNpZ25lZCBpbnQgdGlsZV93aWR0aF9ieXRlcyA9IGludGVsX3RpbGVfd2lkdGhfYnl0 ZXMoZmIsIGNvbG9yX3BsYW5lKTsKKwl1bnNpZ25lZCBpbnQgY3BwID0gZmItPmZvcm1hdC0+Y3Bw W2NvbG9yX3BsYW5lXTsKKworCSp0aWxlX3dpZHRoID0gdGlsZV93aWR0aF9ieXRlcyAvIGNwcDsK KwkqdGlsZV9oZWlnaHQgPSBpbnRlbF90aWxlX2hlaWdodChmYiwgY29sb3JfcGxhbmUpOworfQor Cit1bnNpZ25lZCBpbnQgaW50ZWxfdGlsZV9yb3dfc2l6ZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5lKQoreworCXVuc2lnbmVkIGludCB0aWxlX3dpZHRo LCB0aWxlX2hlaWdodDsKKworCWludGVsX3RpbGVfZGltcyhmYiwgY29sb3JfcGxhbmUsICZ0aWxl X3dpZHRoLCAmdGlsZV9oZWlnaHQpOworCisJcmV0dXJuIGZiLT5waXRjaGVzW2NvbG9yX3BsYW5l XSAqIHRpbGVfaGVpZ2h0OworfQorCit1bnNpZ25lZCBpbnQgaW50ZWxfY3Vyc29yX2FsaWdubWVu dChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaWYgKElTX0k4 MzAoZGV2X3ByaXYpKQorCQlyZXR1cm4gMTYgKiAxMDI0OworCWVsc2UgaWYgKElTX0k4NVgoZGV2 X3ByaXYpKQorCQlyZXR1cm4gMjU2OworCWVsc2UgaWYgKElTX0k4NDVHKGRldl9wcml2KSB8fCBJ U19JODY1RyhkZXZfcHJpdikpCisJCXJldHVybiAzMjsKKwllbHNlCisJCXJldHVybiA0ICogMTAy NDsKK30KKwordm9pZCBpbnRlbF9mYl9wbGFuZV9nZXRfc3Vic2FtcGxpbmcoaW50ICpoc3ViLCBp bnQgKnZzdWIsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJ CSAgICBpbnQgY29sb3JfcGxhbmUpCit7CisJaW50IG1haW5fcGxhbmU7CisKKwlpZiAoY29sb3Jf cGxhbmUgPT0gMCkgeworCQkqaHN1YiA9IDE7CisJCSp2c3ViID0gMTsKKworCQlyZXR1cm47CisJ fQorCisJLyoKKwkgKiBUT0RPOiBEZWR1Y3QgdGhlIHN1YnNhbXBsaW5nIGZyb20gdGhlIGNoYXIg YmxvY2sgZm9yIGFsbCBDQ1MKKwkgKiBmb3JtYXRzIGFuZCBwbGFuZXMuCisJICovCisJaWYgKCFp c19nZW4xMl9jY3NfcGxhbmUoZmIsIGNvbG9yX3BsYW5lKSkgeworCQkqaHN1YiA9IGZiLT5mb3Jt YXQtPmhzdWI7CisJCSp2c3ViID0gZmItPmZvcm1hdC0+dnN1YjsKKworCQlyZXR1cm47CisJfQor CisJbWFpbl9wbGFuZSA9IHNrbF9jY3NfdG9fbWFpbl9wbGFuZShmYiwgY29sb3JfcGxhbmUpOwor CSpoc3ViID0gZHJtX2Zvcm1hdF9pbmZvX2Jsb2NrX3dpZHRoKGZiLT5mb3JtYXQsIGNvbG9yX3Bs YW5lKSAvCisJCWRybV9mb3JtYXRfaW5mb19ibG9ja193aWR0aChmYi0+Zm9ybWF0LCBtYWluX3Bs YW5lKTsKKworCS8qCisJICogVGhlIG1pbiBzdHJpZGUgY2hlY2sgaW4gdGhlIGNvcmUgZnJhbWVi dWZmZXJfY2hlY2soKSBmdW5jdGlvbgorCSAqIGFzc3VtZXMgdGhhdCBmb3JtYXQtPmhzdWIgYXBw bGllcyB0byBldmVyeSBwbGFuZSBleGNlcHQgZm9yIHRoZQorCSAqIGZpcnN0IHBsYW5lLiBUaGF0 J3MgaW5jb3JyZWN0IGZvciB0aGUgQ0NTIEFVWCBwbGFuZSBvZiB0aGUgZmlyc3QKKwkgKiBwbGFu ZSwgYnV0IGZvciB0aGUgYWJvdmUgY2hlY2sgdG8gcGFzcyB3ZSBtdXN0IGRlZmluZSB0aGUgYmxv Y2sKKwkgKiB3aWR0aCB3aXRoIHRoYXQgc3Vic2FtcGxpbmcgYXBwbGllZCB0byBpdC4gQWRqdXN0 IHRoZSB3aWR0aCBoZXJlCisJICogYWNjb3JkaW5nbHksIHNvIHdlIGNhbiBjYWxjdWxhdGUgdGhl IGFjdHVhbCBzdWJzYW1wbGluZyBmYWN0b3IuCisJICovCisJaWYgKG1haW5fcGxhbmUgPT0gMCkK KwkJKmhzdWIgKj0gZmItPmZvcm1hdC0+aHN1YjsKKworCSp2c3ViID0gMzI7Cit9CisKK3N0YXRp YyB2b2lkIGludGVsX2ZiX3BsYW5lX2RpbXMoaW50ICp3LCBpbnQgKmgsIHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpCit7CisJaW50IG1haW5fcGxhbmUgPSBpc19j Y3NfcGxhbmUoZmIsIGNvbG9yX3BsYW5lKSA/CisJCQkgc2tsX2Njc190b19tYWluX3BsYW5lKGZi LCBjb2xvcl9wbGFuZSkgOiAwOworCWludCBtYWluX2hzdWIsIG1haW5fdnN1YjsKKwlpbnQgaHN1 YiwgdnN1YjsKKworCWludGVsX2ZiX3BsYW5lX2dldF9zdWJzYW1wbGluZygmbWFpbl9oc3ViLCAm bWFpbl92c3ViLCBmYiwgbWFpbl9wbGFuZSk7CisJaW50ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBs aW5nKCZoc3ViLCAmdnN1YiwgZmIsIGNvbG9yX3BsYW5lKTsKKwkqdyA9IGZiLT53aWR0aCAvIG1h aW5faHN1YiAvIGhzdWI7CisJKmggPSBmYi0+aGVpZ2h0IC8gbWFpbl92c3ViIC8gdnN1YjsKK30K Kworc3RhdGljIHUzMiBpbnRlbF9hZGp1c3RfdGlsZV9vZmZzZXQoaW50ICp4LCBpbnQgKnksCisJ CQkJICAgIHVuc2lnbmVkIGludCB0aWxlX3dpZHRoLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgdGls ZV9oZWlnaHQsCisJCQkJICAgIHVuc2lnbmVkIGludCB0aWxlX3NpemUsCisJCQkJICAgIHVuc2ln bmVkIGludCBwaXRjaF90aWxlcywKKwkJCQkgICAgdTMyIG9sZF9vZmZzZXQsCisJCQkJICAgIHUz MiBuZXdfb2Zmc2V0KQoreworCXVuc2lnbmVkIGludCBwaXRjaF9waXhlbHMgPSBwaXRjaF90aWxl cyAqIHRpbGVfd2lkdGg7CisJdW5zaWduZWQgaW50IHRpbGVzOworCisJV0FSTl9PTihvbGRfb2Zm c2V0ICYgKHRpbGVfc2l6ZSAtIDEpKTsKKwlXQVJOX09OKG5ld19vZmZzZXQgJiAodGlsZV9zaXpl IC0gMSkpOworCVdBUk5fT04obmV3X29mZnNldCA+IG9sZF9vZmZzZXQpOworCisJdGlsZXMgPSAo b2xkX29mZnNldCAtIG5ld19vZmZzZXQpIC8gdGlsZV9zaXplOworCisJKnkgKz0gdGlsZXMgLyBw aXRjaF90aWxlcyAqIHRpbGVfaGVpZ2h0OworCSp4ICs9IHRpbGVzICUgcGl0Y2hfdGlsZXMgKiB0 aWxlX3dpZHRoOworCisJLyogbWluaW1pemUgeCBpbiBjYXNlIGl0IGdvdCBuZWVkbGVzc2x5IGJp ZyAqLworCSp5ICs9ICp4IC8gcGl0Y2hfcGl4ZWxzICogdGlsZV9oZWlnaHQ7CisJKnggJT0gcGl0 Y2hfcGl4ZWxzOworCisJcmV0dXJuIG5ld19vZmZzZXQ7Cit9CisKK3N0YXRpYyB1MzIgaW50ZWxf YWRqdXN0X2FsaWduZWRfb2Zmc2V0KGludCAqeCwgaW50ICp5LAorCQkJCSAgICAgICBjb25zdCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCQkgICAgICAgaW50IGNvbG9yX3BsYW5lLAor CQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24sCisJCQkJICAgICAgIHVuc2lnbmVkIGlu dCBwaXRjaCwKKwkJCQkgICAgICAgdTMyIG9sZF9vZmZzZXQsIHUzMiBuZXdfb2Zmc2V0KQorewor CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZmItPmRldik7CisJ dW5zaWduZWQgaW50IGNwcCA9IGZiLT5mb3JtYXQtPmNwcFtjb2xvcl9wbGFuZV07CisKKwlkcm1f V0FSTl9PTigmZGV2X3ByaXYtPmRybSwgbmV3X29mZnNldCA+IG9sZF9vZmZzZXQpOworCisJaWYg KCFpc19zdXJmYWNlX2xpbmVhcihmYiwgY29sb3JfcGxhbmUpKSB7CisJCXVuc2lnbmVkIGludCB0 aWxlX3NpemUsIHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0OworCQl1bnNpZ25lZCBpbnQgcGl0Y2hf dGlsZXM7CisKKwkJdGlsZV9zaXplID0gaW50ZWxfdGlsZV9zaXplKGRldl9wcml2KTsKKwkJaW50 ZWxfdGlsZV9kaW1zKGZiLCBjb2xvcl9wbGFuZSwgJnRpbGVfd2lkdGgsICZ0aWxlX2hlaWdodCk7 CisKKwkJaWYgKGRybV9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKSB7CisJCQlwaXRjaF90 aWxlcyA9IHBpdGNoIC8gdGlsZV9oZWlnaHQ7CisJCQlzd2FwKHRpbGVfd2lkdGgsIHRpbGVfaGVp Z2h0KTsKKwkJfSBlbHNlIHsKKwkJCXBpdGNoX3RpbGVzID0gcGl0Y2ggLyAodGlsZV93aWR0aCAq IGNwcCk7CisJCX0KKworCQlpbnRlbF9hZGp1c3RfdGlsZV9vZmZzZXQoeCwgeSwgdGlsZV93aWR0 aCwgdGlsZV9oZWlnaHQsCisJCQkJCSB0aWxlX3NpemUsIHBpdGNoX3RpbGVzLAorCQkJCQkgb2xk X29mZnNldCwgbmV3X29mZnNldCk7CisJfSBlbHNlIHsKKwkJb2xkX29mZnNldCArPSAqeSAqIHBp dGNoICsgKnggKiBjcHA7CisKKwkJKnkgPSAob2xkX29mZnNldCAtIG5ld19vZmZzZXQpIC8gcGl0 Y2g7CisJCSp4ID0gKChvbGRfb2Zmc2V0IC0gbmV3X29mZnNldCkgLSAqeSAqIHBpdGNoKSAvIGNw cDsKKwl9CisKKwlyZXR1cm4gbmV3X29mZnNldDsKK30KKworLyoKKyAqIEFkanVzdCB0aGUgdGls ZSBvZmZzZXQgYnkgbW92aW5nIHRoZSBkaWZmZXJlbmNlIGludG8KKyAqIHRoZSB4L3kgb2Zmc2V0 cy4KKyAqLwordTMyIGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldChpbnQgKngsIGlu dCAqeSwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnN0YXRlLAor CQkJCSAgICAgIGludCBjb2xvcl9wbGFuZSwKKwkJCQkgICAgICB1MzIgb2xkX29mZnNldCwgdTMy IG5ld19vZmZzZXQpCit7CisJcmV0dXJuIGludGVsX2FkanVzdF9hbGlnbmVkX29mZnNldCh4LCB5 LCBzdGF0ZS0+aHcuZmIsIGNvbG9yX3BsYW5lLAorCQkJCQkgICBzdGF0ZS0+aHcucm90YXRpb24s CisJCQkJCSAgIHN0YXRlLT5jb2xvcl9wbGFuZVtjb2xvcl9wbGFuZV0uc3RyaWRlLAorCQkJCQkg ICBvbGRfb2Zmc2V0LCBuZXdfb2Zmc2V0KTsKK30KKworLyoKKyAqIENvbXB1dGVzIHRoZSBhbGln bmVkIG9mZnNldCB0byB0aGUgYmFzZSB0aWxlIGFuZCBhZGp1c3RzCisgKiB4LCB5LiBieXRlcyBw ZXIgcGl4ZWwgaXMgYXNzdW1lZCB0byBiZSBhIHBvd2VyLW9mLXR3by4KKyAqCisgKiBJbiB0aGUg OTAvMjcwIHJvdGF0ZWQgY2FzZSwgeCBhbmQgeSBhcmUgYXNzdW1lZAorICogdG8gYmUgYWxyZWFk eSByb3RhdGVkIHRvIG1hdGNoIHRoZSByb3RhdGVkIEdUVCB2aWV3LCBhbmQKKyAqIHBpdGNoIGlz IHRoZSB0aWxlX2hlaWdodCBhbGlnbmVkIGZyYW1lYnVmZmVyIGhlaWdodC4KKyAqCisgKiBUaGlz IGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBjb21wdXRpbmcgdGhlIGRlcml2ZWQgaW5mb3JtYXRpb24K KyAqIHVuZGVyIGludGVsX2ZyYW1lYnVmZmVyLCBzbyB1c2luZyBhbnkgb2YgdGhhdCBpbmZvcm1h dGlvbgorICogaGVyZSBpcyBub3QgYWxsb3dlZC4gQW55dGhpbmcgdW5kZXIgZHJtX2ZyYW1lYnVm ZmVyIGNhbiBiZQorICogdXNlZC4gVGhpcyBpcyB3aHkgdGhlIHVzZXIgaGFzIHRvIHBhc3MgaW4g dGhlIHBpdGNoIHNpbmNlIGl0CisgKiBpcyBzcGVjaWZpZWQgaW4gdGhlIHJvdGF0ZWQgb3JpZW50 YXRpb24uCisgKi8KK3N0YXRpYyB1MzIgaW50ZWxfY29tcHV0ZV9hbGlnbmVkX29mZnNldChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJCWludCAqeCwgaW50ICp5LAorCQkJ CQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCQkJaW50IGNvbG9yX3BsYW5l LAorCQkJCQl1bnNpZ25lZCBpbnQgcGl0Y2gsCisJCQkJCXVuc2lnbmVkIGludCByb3RhdGlvbiwK KwkJCQkJdTMyIGFsaWdubWVudCkKK3sKKwl1bnNpZ25lZCBpbnQgY3BwID0gZmItPmZvcm1hdC0+ Y3BwW2NvbG9yX3BsYW5lXTsKKwl1MzIgb2Zmc2V0LCBvZmZzZXRfYWxpZ25lZDsKKworCWlmICgh aXNfc3VyZmFjZV9saW5lYXIoZmIsIGNvbG9yX3BsYW5lKSkgeworCQl1bnNpZ25lZCBpbnQgdGls ZV9zaXplLCB0aWxlX3dpZHRoLCB0aWxlX2hlaWdodDsKKwkJdW5zaWduZWQgaW50IHRpbGVfcm93 cywgdGlsZXMsIHBpdGNoX3RpbGVzOworCisJCXRpbGVfc2l6ZSA9IGludGVsX3RpbGVfc2l6ZShk ZXZfcHJpdik7CisJCWludGVsX3RpbGVfZGltcyhmYiwgY29sb3JfcGxhbmUsICZ0aWxlX3dpZHRo LCAmdGlsZV9oZWlnaHQpOworCisJCWlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9u KSkgeworCQkJcGl0Y2hfdGlsZXMgPSBwaXRjaCAvIHRpbGVfaGVpZ2h0OworCQkJc3dhcCh0aWxl X3dpZHRoLCB0aWxlX2hlaWdodCk7CisJCX0gZWxzZSB7CisJCQlwaXRjaF90aWxlcyA9IHBpdGNo IC8gKHRpbGVfd2lkdGggKiBjcHApOworCQl9CisKKwkJdGlsZV9yb3dzID0gKnkgLyB0aWxlX2hl aWdodDsKKwkJKnkgJT0gdGlsZV9oZWlnaHQ7CisKKwkJdGlsZXMgPSAqeCAvIHRpbGVfd2lkdGg7 CisJCSp4ICU9IHRpbGVfd2lkdGg7CisKKwkJb2Zmc2V0ID0gKHRpbGVfcm93cyAqIHBpdGNoX3Rp bGVzICsgdGlsZXMpICogdGlsZV9zaXplOworCisJCW9mZnNldF9hbGlnbmVkID0gb2Zmc2V0Owor CQlpZiAoYWxpZ25tZW50KQorCQkJb2Zmc2V0X2FsaWduZWQgPSByb3VuZGRvd24ob2Zmc2V0X2Fs aWduZWQsIGFsaWdubWVudCk7CisKKwkJaW50ZWxfYWRqdXN0X3RpbGVfb2Zmc2V0KHgsIHksIHRp bGVfd2lkdGgsIHRpbGVfaGVpZ2h0LAorCQkJCQkgdGlsZV9zaXplLCBwaXRjaF90aWxlcywKKwkJ CQkJIG9mZnNldCwgb2Zmc2V0X2FsaWduZWQpOworCX0gZWxzZSB7CisJCW9mZnNldCA9ICp5ICog cGl0Y2ggKyAqeCAqIGNwcDsKKwkJb2Zmc2V0X2FsaWduZWQgPSBvZmZzZXQ7CisJCWlmIChhbGln bm1lbnQpIHsKKwkJCW9mZnNldF9hbGlnbmVkID0gcm91bmRkb3duKG9mZnNldF9hbGlnbmVkLCBh bGlnbm1lbnQpOworCQkJKnkgPSAob2Zmc2V0ICUgYWxpZ25tZW50KSAvIHBpdGNoOworCQkJKngg PSAoKG9mZnNldCAlIGFsaWdubWVudCkgLSAqeSAqIHBpdGNoKSAvIGNwcDsKKwkJfSBlbHNlIHsK KwkJCSp5ID0gKnggPSAwOworCQl9CisJfQorCisJcmV0dXJuIG9mZnNldF9hbGlnbmVkOworfQor Cit1MzIgaW50ZWxfcGxhbmVfY29tcHV0ZV9hbGlnbmVkX29mZnNldChpbnQgKngsIGludCAqeSwK KwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpzdGF0ZSwKKwkJCQkg ICAgICAgaW50IGNvbG9yX3BsYW5lKQoreworCXN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxh bmUgPSB0b19pbnRlbF9wbGFuZShzdGF0ZS0+dWFwaS5wbGFuZSk7CisJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShpbnRlbF9wbGFuZS0+YmFzZS5kZXYpOworCWNv bnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUtPmh3LmZiOworCXVuc2lnbmVk IGludCByb3RhdGlvbiA9IHN0YXRlLT5ody5yb3RhdGlvbjsKKwlpbnQgcGl0Y2ggPSBzdGF0ZS0+ Y29sb3JfcGxhbmVbY29sb3JfcGxhbmVdLnN0cmlkZTsKKwl1MzIgYWxpZ25tZW50OworCisJaWYg KGludGVsX3BsYW5lLT5pZCA9PSBQTEFORV9DVVJTT1IpCisJCWFsaWdubWVudCA9IGludGVsX2N1 cnNvcl9hbGlnbm1lbnQoZGV2X3ByaXYpOworCWVsc2UKKwkJYWxpZ25tZW50ID0gaW50ZWxfc3Vy Zl9hbGlnbm1lbnQoZmIsIGNvbG9yX3BsYW5lKTsKKworCXJldHVybiBpbnRlbF9jb21wdXRlX2Fs aWduZWRfb2Zmc2V0KGRldl9wcml2LCB4LCB5LCBmYiwgY29sb3JfcGxhbmUsCisJCQkJCSAgICBw aXRjaCwgcm90YXRpb24sIGFsaWdubWVudCk7Cit9CisKKy8qIENvbnZlcnQgdGhlIGZiLT5vZmZz ZXRbXSBpbnRvIHgveSBvZmZzZXRzICovCitzdGF0aWMgaW50IGludGVsX2ZiX29mZnNldF90b194 eShpbnQgKngsIGludCAqeSwKKwkJCQkgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs CisJCQkJIGludCBjb2xvcl9wbGFuZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGZiLT5kZXYpOworCXVuc2lnbmVkIGludCBoZWlnaHQ7CisJdTMyIGFs aWdubWVudDsKKworCWlmIChESVNQTEFZX1ZFUihkZXZfcHJpdikgPj0gMTIgJiYKKwkgICAgaXNf c2VtaXBsYW5hcl91dl9wbGFuZShmYiwgY29sb3JfcGxhbmUpKQorCQlhbGlnbm1lbnQgPSBpbnRl bF90aWxlX3Jvd19zaXplKGZiLCBjb2xvcl9wbGFuZSk7CisJZWxzZSBpZiAoZmItPm1vZGlmaWVy ICE9IERSTV9GT1JNQVRfTU9EX0xJTkVBUikKKwkJYWxpZ25tZW50ID0gaW50ZWxfdGlsZV9zaXpl KGRldl9wcml2KTsKKwllbHNlCisJCWFsaWdubWVudCA9IDA7CisKKwlpZiAoYWxpZ25tZW50ICE9 IDAgJiYgZmItPm9mZnNldHNbY29sb3JfcGxhbmVdICUgYWxpZ25tZW50KSB7CisJCWRybV9kYmdf a21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJICAgICJNaXNhbGlnbmVkIG9mZnNldCAweCUwOHggZm9y IGNvbG9yIHBsYW5lICVkXG4iLAorCQkJICAgIGZiLT5vZmZzZXRzW2NvbG9yX3BsYW5lXSwgY29s b3JfcGxhbmUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwloZWlnaHQgPSBkcm1fZnJhbWVi dWZmZXJfcGxhbmVfaGVpZ2h0KGZiLT5oZWlnaHQsIGZiLCBjb2xvcl9wbGFuZSk7CisJaGVpZ2h0 ID0gQUxJR04oaGVpZ2h0LCBpbnRlbF90aWxlX2hlaWdodChmYiwgY29sb3JfcGxhbmUpKTsKKwor CS8qIENhdGNoIHBvdGVudGlhbCBvdmVyZmxvd3MgZWFybHkgKi8KKwlpZiAoYWRkX292ZXJmbG93 c190KHUzMiwgbXVsX3UzMl91MzIoaGVpZ2h0LCBmYi0+cGl0Y2hlc1tjb2xvcl9wbGFuZV0pLAor CQkJICAgIGZiLT5vZmZzZXRzW2NvbG9yX3BsYW5lXSkpIHsKKwkJZHJtX2RiZ19rbXMoJmRldl9w cml2LT5kcm0sCisJCQkgICAgIkJhZCBvZmZzZXQgMHglMDh4IG9yIHBpdGNoICVkIGZvciBjb2xv ciBwbGFuZSAlZFxuIiwKKwkJCSAgICBmYi0+b2Zmc2V0c1tjb2xvcl9wbGFuZV0sIGZiLT5waXRj aGVzW2NvbG9yX3BsYW5lXSwKKwkJCSAgICBjb2xvcl9wbGFuZSk7CisJCXJldHVybiAtRVJBTkdF OworCX0KKworCSp4ID0gMDsKKwkqeSA9IDA7CisKKwlpbnRlbF9hZGp1c3RfYWxpZ25lZF9vZmZz ZXQoeCwgeSwKKwkJCQkgICAgZmIsIGNvbG9yX3BsYW5lLCBEUk1fTU9ERV9ST1RBVEVfMCwKKwkJ CQkgICAgZmItPnBpdGNoZXNbY29sb3JfcGxhbmVdLAorCQkJCSAgICBmYi0+b2Zmc2V0c1tjb2xv cl9wbGFuZV0sIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW50ZWxfZmJfY2hl Y2tfY2NzX3h5KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY2NzX3BsYW5lLCBpbnQg eCwgaW50IHkpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGZi LT5kZXYpOworCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIgPSB0b19pbnRlbF9m cmFtZWJ1ZmZlcihmYik7CisJaW50IG1haW5fcGxhbmU7CisJaW50IGhzdWIsIHZzdWI7CisJaW50 IHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0OworCWludCBjY3NfeCwgY2NzX3k7CisJaW50IG1haW5f eCwgbWFpbl95OworCisJaWYgKCFpc19jY3NfcGxhbmUoZmIsIGNjc19wbGFuZSkgfHwgaXNfZ2Vu MTJfY2NzX2NjX3BsYW5lKGZiLCBjY3NfcGxhbmUpKQorCQlyZXR1cm4gMDsKKworCWludGVsX3Rp bGVfZGltcyhmYiwgY2NzX3BsYW5lLCAmdGlsZV93aWR0aCwgJnRpbGVfaGVpZ2h0KTsKKwlpbnRl bF9mYl9wbGFuZV9nZXRfc3Vic2FtcGxpbmcoJmhzdWIsICZ2c3ViLCBmYiwgY2NzX3BsYW5lKTsK KworCXRpbGVfd2lkdGggKj0gaHN1YjsKKwl0aWxlX2hlaWdodCAqPSB2c3ViOworCisJY2NzX3gg PSAoeCAqIGhzdWIpICUgdGlsZV93aWR0aDsKKwljY3NfeSA9ICh5ICogdnN1YikgJSB0aWxlX2hl aWdodDsKKworCW1haW5fcGxhbmUgPSBza2xfY2NzX3RvX21haW5fcGxhbmUoZmIsIGNjc19wbGFu ZSk7CisJbWFpbl94ID0gaW50ZWxfZmItPm5vcm1hbFttYWluX3BsYW5lXS54ICUgdGlsZV93aWR0 aDsKKwltYWluX3kgPSBpbnRlbF9mYi0+bm9ybWFsW21haW5fcGxhbmVdLnkgJSB0aWxlX2hlaWdo dDsKKworCS8qCisJICogQ0NTIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIHgveSBvZmZzZXQgcmVnaXN0 ZXIsIHNvIHRoZSBpbnRyYSBDQ1MgdGlsZQorCSAqIHgveSBvZmZzZXRzIG11c3QgbWF0Y2ggYmV0 d2VlbiBDQ1MgYW5kIHRoZSBtYWluIHN1cmZhY2UuCisJICovCisJaWYgKG1haW5feCAhPSBjY3Nf eCB8fCBtYWluX3kgIT0gY2NzX3kpIHsKKwkJZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwKKwkJCSAg ICAgICJCYWQgQ0NTIHgveSAobWFpbiAlZCwlZCBjY3MgJWQsJWQpIGZ1bGwgKG1haW4gJWQsJWQg Y2NzICVkLCVkKVxuIiwKKwkJCSAgICAgIG1haW5feCwgbWFpbl95LAorCQkJICAgICAgY2NzX3gs IGNjc195LAorCQkJICAgICAgaW50ZWxfZmItPm5vcm1hbFttYWluX3BsYW5lXS54LAorCQkJICAg ICAgaW50ZWxfZmItPm5vcm1hbFttYWluX3BsYW5lXS55LAorCQkJICAgICAgeCwgeSk7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBpbnRlbF9w bGFuZV9jYW5fcmVtYXAoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVf c3RhdGUtPnVhcGkucGxhbmUpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwlpbnQgaTsKKworCS8qIFdlIGRvbid0IHdhbnQg dG8gZGVhbCB3aXRoIHJlbWFwcGluZyB3aXRoIGN1cnNvcnMgKi8KKwlpZiAocGxhbmUtPmlkID09 IFBMQU5FX0NVUlNPUikKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBUaGUgZGlzcGxheSBl bmdpbmUgbGltaXRzIGFscmVhZHkgbWF0Y2gvZXhjZWVkIHRoZQorCSAqIHJlbmRlciBlbmdpbmUg bGltaXRzLCBzbyBub3QgbXVjaCBwb2ludCBpbiByZW1hcHBpbmcuCisJICogV291bGQgYWxzbyBu ZWVkIHRvIGRlYWwgd2l0aCB0aGUgZmVuY2UgUE9UIGFsaWdubWVudAorCSAqIGFuZCBnZW4yIDJL aUIgR1RUIHRpbGUgc2l6ZS4KKwkgKi8KKwlpZiAoRElTUExBWV9WRVIoZGV2X3ByaXYpIDwgNCkK KwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBUaGUgbmV3IENDUyBoYXNoIG1vZGUgaXNuJ3Qg Y29tcGF0aWJsZSB3aXRoIHJlbWFwcGluZyBhcworCSAqIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2Yg dGhlIHBhZ2VzIGFmZmVjdHMgdGhlIGNvbXByZXNzZWQgZGF0YS4KKwkgKi8KKwlpZiAoaXNfY2Nz X21vZGlmaWVyKGZiLT5tb2RpZmllcikpCisJCXJldHVybiBmYWxzZTsKKworCS8qIExpbmVhciBu ZWVkcyBhIHBhZ2UgYWxpZ25lZCBzdHJpZGUgZm9yIHJlbWFwcGluZyAqLworCWlmIChmYi0+bW9k aWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSKSB7CisJCXVuc2lnbmVkIGludCBhbGlnbm1l bnQgPSBpbnRlbF90aWxlX3NpemUoZGV2X3ByaXYpIC0gMTsKKworCQlmb3IgKGkgPSAwOyBpIDwg ZmItPmZvcm1hdC0+bnVtX3BsYW5lczsgaSsrKSB7CisJCQlpZiAoZmItPnBpdGNoZXNbaV0gJiBh bGlnbm1lbnQpCisJCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJcmV0dXJuIHRydWU7Cit9 CisKK2ludCBpbnRlbF9mYl9waXRjaChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwg aW50IGNvbG9yX3BsYW5lLCB1bnNpZ25lZCBpbnQgcm90YXRpb24pCit7CisJaWYgKGRybV9yb3Rh dGlvbl85MF9vcl8yNzAocm90YXRpb24pKQorCQlyZXR1cm4gdG9faW50ZWxfZnJhbWVidWZmZXIo ZmIpLT5yb3RhdGVkW2NvbG9yX3BsYW5lXS5waXRjaDsKKwllbHNlCisJCXJldHVybiBmYi0+cGl0 Y2hlc1tjb2xvcl9wbGFuZV07Cit9CisKK3N0YXRpYyBib29sIGludGVsX3BsYW5lX25lZWRzX3Jl bWFwKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3Ry dWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBp LnBsYW5lKTsKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRl LT5ody5mYjsKKwl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRp b247CisJdTMyIHN0cmlkZSwgbWF4X3N0cmlkZTsKKworCS8qCisJICogTm8gcmVtYXBwaW5nIGZv ciBpbnZpc2libGUgcGxhbmVzIHNpbmNlIHdlIGRvbid0IGhhdmUKKwkgKiBhbiBhY3R1YWwgc291 cmNlIHZpZXdwb3J0IHRvIHJlbWFwLgorCSAqLworCWlmICghcGxhbmVfc3RhdGUtPnVhcGkudmlz aWJsZSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFpbnRlbF9wbGFuZV9jYW5fcmVtYXAocGxh bmVfc3RhdGUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIEZJWE1FOiBhdXggcGxhbmUg bGltaXRzIG9uIGdlbjkrIGFyZQorCSAqIHVuY2xlYXIgaW4gQnNwZWMsIGZvciBub3cgbm8gY2hl Y2tpbmcuCisJICovCisJc3RyaWRlID0gaW50ZWxfZmJfcGl0Y2goZmIsIDAsIHJvdGF0aW9uKTsK KwltYXhfc3RyaWRlID0gcGxhbmUtPm1heF9zdHJpZGUocGxhbmUsIGZiLT5mb3JtYXQtPmZvcm1h dCwKKwkJCQkgICAgICAgZmItPm1vZGlmaWVyLCByb3RhdGlvbik7CisKKwlyZXR1cm4gc3RyaWRl ID4gbWF4X3N0cmlkZTsKK30KKworLyoKKyAqIFNldHVwIHRoZSByb3RhdGVkIHZpZXcgZm9yIGFu IEZCIHBsYW5lIGFuZCByZXR1cm4gdGhlIHNpemUgdGhlIEdUVCBtYXBwaW5nCisgKiByZXF1aXJl cyBmb3IgdGhpcyB2aWV3LgorICovCitzdGF0aWMgdTMyIHNldHVwX2ZiX3JvdGF0aW9uKGludCBw bGFuZSwgY29uc3Qgc3RydWN0IGludGVsX3JlbWFwcGVkX3BsYW5lX2luZm8gKnBsYW5lX2luZm8s CisJCQkgICAgIHUzMiBndHRfb2Zmc2V0X3JvdGF0ZWQsIGludCB4LCBpbnQgeSwKKwkJCSAgICAg dW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LAorCQkJICAgICB1bnNpZ25l ZCBpbnQgdGlsZV9zaXplLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdGlsZV93aWR0aCwgdW5zaWdu ZWQgaW50IHRpbGVfaGVpZ2h0LAorCQkJICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikK K3sKKwlzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiID0gdG9faW50ZWxfZnJhbWVi dWZmZXIoZmIpOworCXN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvICpyb3RfaW5mbyA9ICZpbnRl bF9mYi0+cm90X2luZm87CisJdW5zaWduZWQgaW50IHBpdGNoX3RpbGVzOworCXN0cnVjdCBkcm1f cmVjdCByOworCisJLyogWSBvciBZZiBtb2RpZmllcnMgcmVxdWlyZWQgZm9yIDkwLzI3MCByb3Rh dGlvbiAqLworCWlmIChmYi0+bW9kaWZpZXIgIT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQgJiYK KwkgICAgZmItPm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCkKKwkJcmV0dXJu IDA7CisKKwlpZiAoZHJtX1dBUk5fT04oZmItPmRldiwgcGxhbmUgPj0gQVJSQVlfU0laRShyb3Rf aW5mby0+cGxhbmUpKSkKKwkJcmV0dXJuIDA7CisKKwlyb3RfaW5mby0+cGxhbmVbcGxhbmVdID0g KnBsYW5lX2luZm87CisKKwlpbnRlbF9mYi0+cm90YXRlZFtwbGFuZV0ucGl0Y2ggPSBwbGFuZV9p bmZvLT5oZWlnaHQgKiB0aWxlX2hlaWdodDsKKworCS8qIHJvdGF0ZSB0aGUgeC95IG9mZnNldHMg dG8gbWF0Y2ggdGhlIEdUVCB2aWV3ICovCisJZHJtX3JlY3RfaW5pdCgmciwgeCwgeSwgd2lkdGgs IGhlaWdodCk7CisJZHJtX3JlY3Rfcm90YXRlKCZyLAorCQkJcGxhbmVfaW5mby0+d2lkdGggKiB0 aWxlX3dpZHRoLAorCQkJcGxhbmVfaW5mby0+aGVpZ2h0ICogdGlsZV9oZWlnaHQsCisJCQlEUk1f TU9ERV9ST1RBVEVfMjcwKTsKKwl4ID0gci54MTsKKwl5ID0gci55MTsKKworCS8qIHJvdGF0ZSB0 aGUgdGlsZSBkaW1lbnNpb25zIHRvIG1hdGNoIHRoZSBHVFQgdmlldyAqLworCXBpdGNoX3RpbGVz ID0gaW50ZWxfZmItPnJvdGF0ZWRbcGxhbmVdLnBpdGNoIC8gdGlsZV9oZWlnaHQ7CisJc3dhcCh0 aWxlX3dpZHRoLCB0aWxlX2hlaWdodCk7CisKKwkvKgorCSAqIFdlIG9ubHkga2VlcCB0aGUgeC95 IG9mZnNldHMsIHNvIHB1c2ggYWxsIG9mIHRoZQorCSAqIGd0dCBvZmZzZXQgaW50byB0aGUgeC95 IG9mZnNldHMuCisJICovCisJaW50ZWxfYWRqdXN0X3RpbGVfb2Zmc2V0KCZ4LCAmeSwKKwkJCQkg dGlsZV93aWR0aCwgdGlsZV9oZWlnaHQsCisJCQkJIHRpbGVfc2l6ZSwgcGl0Y2hfdGlsZXMsCisJ CQkJIGd0dF9vZmZzZXRfcm90YXRlZCAqIHRpbGVfc2l6ZSwgMCk7CisKKwkvKgorCSAqIEZpcnN0 IHBpeGVsIG9mIHRoZSBmcmFtZWJ1ZmZlciBmcm9tCisJICogdGhlIHN0YXJ0IG9mIHRoZSByb3Rh dGVkIGd0dCBtYXBwaW5nLgorCSAqLworCWludGVsX2ZiLT5yb3RhdGVkW3BsYW5lXS54ID0geDsK KwlpbnRlbF9mYi0+cm90YXRlZFtwbGFuZV0ueSA9IHk7CisKKwlyZXR1cm4gcGxhbmVfaW5mby0+ d2lkdGggKiBwbGFuZV9pbmZvLT5oZWlnaHQ7Cit9CisKK2ludCBpbnRlbF9maWxsX2ZiX2luZm8o c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYikKK3sKKwlzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiID0gdG9faW50ZWxf ZnJhbWVidWZmZXIoZmIpOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRl bF9mYl9vYmooZmIpOworCXUzMiBndHRfb2Zmc2V0X3JvdGF0ZWQgPSAwOworCXVuc2lnbmVkIGlu dCBtYXhfc2l6ZSA9IDA7CisJaW50IGksIG51bV9wbGFuZXMgPSBmYi0+Zm9ybWF0LT5udW1fcGxh bmVzOworCXVuc2lnbmVkIGludCB0aWxlX3NpemUgPSBpbnRlbF90aWxlX3NpemUoZGV2X3ByaXYp OworCisJZm9yIChpID0gMDsgaSA8IG51bV9wbGFuZXM7IGkrKykgeworCQl1bnNpZ25lZCBpbnQg d2lkdGgsIGhlaWdodDsKKwkJdW5zaWduZWQgaW50IGNwcCwgc2l6ZTsKKwkJdTMyIG9mZnNldDsK KwkJaW50IHgsIHk7CisJCWludCByZXQ7CisKKwkJLyoKKwkJICogUGxhbmUgMiBvZiBSZW5kZXIg Q29tcHJlc3Npb24gd2l0aCBDbGVhciBDb2xvciBmYiBtb2RpZmllcgorCQkgKiBpcyBjb25zdW1l ZCBieSB0aGUgZHJpdmVyIGFuZCBub3QgcGFzc2VkIHRvIERFLiBTa2lwIHRoZQorCQkgKiBhcml0 aG1ldGljIHJlbGF0ZWQgdG8gYWxpZ25tZW50IGFuZCBvZmZzZXQgY2FsY3VsYXRpb24uCisJCSAq LworCQlpZiAoaXNfZ2VuMTJfY2NzX2NjX3BsYW5lKGZiLCBpKSkgeworCQkJaWYgKElTX0FMSUdO RUQoZmItPm9mZnNldHNbaV0sIFBBR0VfU0laRSkpCisJCQkJY29udGludWU7CisJCQllbHNlCisJ CQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQljcHAgPSBmYi0+Zm9ybWF0LT5jcHBbaV07CisJ CWludGVsX2ZiX3BsYW5lX2RpbXMoJndpZHRoLCAmaGVpZ2h0LCBmYiwgaSk7CisKKwkJcmV0ID0g aW50ZWxfZmJfb2Zmc2V0X3RvX3h5KCZ4LCAmeSwgZmIsIGkpOworCQlpZiAocmV0KSB7CisJCQlk cm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCQkgICAgImJhZCBmYiBwbGFuZSAlZCBvZmZz ZXQ6IDB4JXhcbiIsCisJCQkJICAgIGksIGZiLT5vZmZzZXRzW2ldKTsKKwkJCXJldHVybiByZXQ7 CisJCX0KKworCQlyZXQgPSBpbnRlbF9mYl9jaGVja19jY3NfeHkoZmIsIGksIHgsIHkpOworCQlp ZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQkvKgorCQkgKiBUaGUgZmVuY2UgKGlmIHVzZWQp IGlzIGFsaWduZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBvYmplY3QKKwkJICogc28gaGF2aW5nIHRo ZSBmcmFtZWJ1ZmZlciB3cmFwIGFyb3VuZCBhY3Jvc3MgdGhlIGVkZ2Ugb2YgdGhlCisJCSAqIGZl bmNlZCByZWdpb24gZG9lc24ndCByZWFsbHkgd29yay4gV2UgaGF2ZSBubyBBUEkgdG8gY29uZmln dXJlCisJCSAqIHRoZSBmZW5jZSBzdGFydCBvZmZzZXQgd2l0aGluIHRoZSBvYmplY3QgKG5vciBj b3VsZCB3ZSBwcm9iYWJseQorCQkgKiBvbiBnZW4yLzMpLiBTbyBpdCdzIGp1c3QgZWFzaWVyIGlm IHdlIGp1c3QgcmVxdWlyZSB0aGF0IHRoZQorCQkgKiBmYiBsYXlvdXQgYWdyZWVzIHdpdGggdGhl IGZlbmNlIGxheW91dC4gV2UgYWxyZWFkeSBjaGVjayB0aGF0IHRoZQorCQkgKiBmYiBzdHJpZGUg bWF0Y2hlcyB0aGUgZmVuY2Ugc3RyaWRlIGVsc2V3aGVyZS4KKwkJICovCisJCWlmIChpID09IDAg JiYgaTkxNV9nZW1fb2JqZWN0X2lzX3RpbGVkKG9iaikgJiYKKwkJICAgICh4ICsgd2lkdGgpICog Y3BwID4gZmItPnBpdGNoZXNbaV0pIHsKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAor CQkJCSAgICAiYmFkIGZiIHBsYW5lICVkIG9mZnNldDogMHgleFxuIiwKKwkJCQkgICAgIGksIGZi LT5vZmZzZXRzW2ldKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJLyoKKwkJICogRmly c3QgcGl4ZWwgb2YgdGhlIGZyYW1lYnVmZmVyIGZyb20KKwkJICogdGhlIHN0YXJ0IG9mIHRoZSBu b3JtYWwgZ3R0IG1hcHBpbmcuCisJCSAqLworCQlpbnRlbF9mYi0+bm9ybWFsW2ldLnggPSB4Owor CQlpbnRlbF9mYi0+bm9ybWFsW2ldLnkgPSB5OworCisJCW9mZnNldCA9IGludGVsX2NvbXB1dGVf YWxpZ25lZF9vZmZzZXQoZGV2X3ByaXYsICZ4LCAmeSwgZmIsIGksCisJCQkJCQkgICAgICBmYi0+ cGl0Y2hlc1tpXSwKKwkJCQkJCSAgICAgIERSTV9NT0RFX1JPVEFURV8wLAorCQkJCQkJICAgICAg dGlsZV9zaXplKTsKKwkJb2Zmc2V0IC89IHRpbGVfc2l6ZTsKKworCQlpZiAoIWlzX3N1cmZhY2Vf bGluZWFyKGZiLCBpKSkgeworCQkJc3RydWN0IGludGVsX3JlbWFwcGVkX3BsYW5lX2luZm8gcGxh bmVfaW5mbzsKKwkJCXVuc2lnbmVkIGludCB0aWxlX3dpZHRoLCB0aWxlX2hlaWdodDsKKworCQkJ aW50ZWxfdGlsZV9kaW1zKGZiLCBpLCAmdGlsZV93aWR0aCwgJnRpbGVfaGVpZ2h0KTsKKworCQkJ cGxhbmVfaW5mby5vZmZzZXQgPSBvZmZzZXQ7CisJCQlwbGFuZV9pbmZvLnN0cmlkZSA9IERJVl9S T1VORF9VUChmYi0+cGl0Y2hlc1tpXSwKKwkJCQkJCQkgdGlsZV93aWR0aCAqIGNwcCk7CisJCQlw bGFuZV9pbmZvLndpZHRoID0gRElWX1JPVU5EX1VQKHggKyB3aWR0aCwgdGlsZV93aWR0aCk7CisJ CQlwbGFuZV9pbmZvLmhlaWdodCA9IERJVl9ST1VORF9VUCh5ICsgaGVpZ2h0LAorCQkJCQkJCSB0 aWxlX2hlaWdodCk7CisKKwkJCS8qIGhvdyBtYW55IHRpbGVzIGRvZXMgdGhpcyBwbGFuZSBuZWVk ICovCisJCQlzaXplID0gcGxhbmVfaW5mby5zdHJpZGUgKiBwbGFuZV9pbmZvLmhlaWdodDsKKwkJ CS8qCisJCQkgKiBJZiB0aGUgcGxhbmUgaXNuJ3QgaG9yaXpvbnRhbGx5IHRpbGUgYWxpZ25lZCwK KwkJCSAqIHdlIG5lZWQgb25lIG1vcmUgdGlsZS4KKwkJCSAqLworCQkJaWYgKHggIT0gMCkKKwkJ CQlzaXplKys7CisKKwkJCWd0dF9vZmZzZXRfcm90YXRlZCArPQorCQkJCXNldHVwX2ZiX3JvdGF0 aW9uKGksICZwbGFuZV9pbmZvLAorCQkJCQkJICBndHRfb2Zmc2V0X3JvdGF0ZWQsCisJCQkJCQkg IHgsIHksIHdpZHRoLCBoZWlnaHQsCisJCQkJCQkgIHRpbGVfc2l6ZSwKKwkJCQkJCSAgdGlsZV93 aWR0aCwgdGlsZV9oZWlnaHQsCisJCQkJCQkgIGZiKTsKKwkJfSBlbHNlIHsKKwkJCXNpemUgPSBE SVZfUk9VTkRfVVAoKHkgKyBoZWlnaHQpICogZmItPnBpdGNoZXNbaV0gKworCQkJCQkgICAgeCAq IGNwcCwgdGlsZV9zaXplKTsKKwkJfQorCisJCS8qIGhvdyBtYW55IHRpbGVzIGluIHRvdGFsIG5l ZWRlZCBpbiB0aGUgYm8gKi8KKwkJbWF4X3NpemUgPSBtYXgobWF4X3NpemUsIG9mZnNldCArIHNp emUpOworCX0KKworCWlmIChtdWxfdTMyX3UzMihtYXhfc2l6ZSwgdGlsZV9zaXplKSA+IG9iai0+ YmFzZS5zaXplKSB7CisJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJICAgICJmYiB0 b28gYmlnIGZvciBibyAobmVlZCAlbGx1IGJ5dGVzLCBoYXZlICV6dSBieXRlcylcbiIsCisJCQkg ICAgbXVsX3UzMl91MzIobWF4X3NpemUsIHRpbGVfc2l6ZSksIG9iai0+YmFzZS5zaXplKTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGludGVs X3BsYW5lX3JlbWFwX2d0dChzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQor eworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9CisJCXRvX2k5MTUocGxhbmVf c3RhdGUtPnVhcGkucGxhbmUtPmRldik7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBw bGFuZV9zdGF0ZS0+aHcuZmI7CisJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYiA9 IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKKwlzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyAq aW5mbyA9ICZwbGFuZV9zdGF0ZS0+dmlldy5yb3RhdGVkOworCXVuc2lnbmVkIGludCByb3RhdGlv biA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKKwlpbnQgaSwgbnVtX3BsYW5lcyA9IGZiLT5m b3JtYXQtPm51bV9wbGFuZXM7CisJdW5zaWduZWQgaW50IHRpbGVfc2l6ZSA9IGludGVsX3RpbGVf c2l6ZShkZXZfcHJpdik7CisJdW5zaWduZWQgaW50IHNyY194LCBzcmNfeTsKKwl1bnNpZ25lZCBp bnQgc3JjX3csIHNyY19oOworCXUzMiBndHRfb2Zmc2V0ID0gMDsKKworCW1lbXNldCgmcGxhbmVf c3RhdGUtPnZpZXcsIDAsIHNpemVvZihwbGFuZV9zdGF0ZS0+dmlldykpOworCXBsYW5lX3N0YXRl LT52aWV3LnR5cGUgPSBkcm1fcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSA/CisJCUk5MTVf R0dUVF9WSUVXX1JPVEFURUQgOiBJOTE1X0dHVFRfVklFV19SRU1BUFBFRDsKKworCXNyY194ID0g cGxhbmVfc3RhdGUtPnVhcGkuc3JjLngxID4+IDE2OworCXNyY195ID0gcGxhbmVfc3RhdGUtPnVh cGkuc3JjLnkxID4+IDE2OworCXNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51 YXBpLnNyYykgPj4gMTY7CisJc3JjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51 YXBpLnNyYykgPj4gMTY7CisKKwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgaXNfY2NzX21v ZGlmaWVyKGZiLT5tb2RpZmllcikpOworCisJLyogTWFrZSBzcmMgY29vcmRpbmF0ZXMgcmVsYXRp dmUgdG8gdGhlIHZpZXdwb3J0ICovCisJZHJtX3JlY3RfdHJhbnNsYXRlKCZwbGFuZV9zdGF0ZS0+ dWFwaS5zcmMsCisJCQkgICAtKHNyY194IDw8IDE2KSwgLShzcmNfeSA8PCAxNikpOworCisJLyog Um90YXRlIHNyYyBjb29yZGluYXRlcyB0byBtYXRjaCByb3RhdGVkIEdUVCB2aWV3ICovCisJaWYg KGRybV9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKQorCQlkcm1fcmVjdF9yb3RhdGUoJnBs YW5lX3N0YXRlLT51YXBpLnNyYywKKwkJCQlzcmNfdyA8PCAxNiwgc3JjX2ggPDwgMTYsCisJCQkJ RFJNX01PREVfUk9UQVRFXzI3MCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BsYW5lczsgaSsr KSB7CisJCXVuc2lnbmVkIGludCBoc3ViID0gaSA/IGZiLT5mb3JtYXQtPmhzdWIgOiAxOworCQl1 bnNpZ25lZCBpbnQgdnN1YiA9IGkgPyBmYi0+Zm9ybWF0LT52c3ViIDogMTsKKwkJdW5zaWduZWQg aW50IGNwcCA9IGZiLT5mb3JtYXQtPmNwcFtpXTsKKwkJdW5zaWduZWQgaW50IHRpbGVfd2lkdGgs IHRpbGVfaGVpZ2h0OworCQl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsKKwkJdW5zaWduZWQg aW50IHBpdGNoX3RpbGVzOworCQl1bnNpZ25lZCBpbnQgeCwgeTsKKwkJdTMyIG9mZnNldDsKKwor CQlpbnRlbF90aWxlX2RpbXMoZmIsIGksICZ0aWxlX3dpZHRoLCAmdGlsZV9oZWlnaHQpOworCisJ CXggPSBzcmNfeCAvIGhzdWI7CisJCXkgPSBzcmNfeSAvIHZzdWI7CisJCXdpZHRoID0gc3JjX3cg LyBoc3ViOworCQloZWlnaHQgPSBzcmNfaCAvIHZzdWI7CisKKwkJLyoKKwkJICogRmlyc3QgcGl4 ZWwgb2YgdGhlIHNyYyB2aWV3cG9ydCBmcm9tIHRoZQorCQkgKiBzdGFydCBvZiB0aGUgbm9ybWFs IGd0dCBtYXBwaW5nLgorCQkgKi8KKwkJeCArPSBpbnRlbF9mYi0+bm9ybWFsW2ldLng7CisJCXkg Kz0gaW50ZWxfZmItPm5vcm1hbFtpXS55OworCisJCW9mZnNldCA9IGludGVsX2NvbXB1dGVfYWxp Z25lZF9vZmZzZXQoZGV2X3ByaXYsICZ4LCAmeSwKKwkJCQkJCSAgICAgIGZiLCBpLCBmYi0+cGl0 Y2hlc1tpXSwKKwkJCQkJCSAgICAgIERSTV9NT0RFX1JPVEFURV8wLCB0aWxlX3NpemUpOworCQlv ZmZzZXQgLz0gdGlsZV9zaXplOworCisJCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBpID49 IEFSUkFZX1NJWkUoaW5mby0+cGxhbmUpKTsKKwkJaW5mby0+cGxhbmVbaV0ub2Zmc2V0ID0gb2Zm c2V0OworCQlpbmZvLT5wbGFuZVtpXS5zdHJpZGUgPSBESVZfUk9VTkRfVVAoZmItPnBpdGNoZXNb aV0sCisJCQkJCQkgICAgIHRpbGVfd2lkdGggKiBjcHApOworCQlpbmZvLT5wbGFuZVtpXS53aWR0 aCA9IERJVl9ST1VORF9VUCh4ICsgd2lkdGgsIHRpbGVfd2lkdGgpOworCQlpbmZvLT5wbGFuZVtp XS5oZWlnaHQgPSBESVZfUk9VTkRfVVAoeSArIGhlaWdodCwgdGlsZV9oZWlnaHQpOworCisJCWlm IChkcm1fcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkgeworCQkJc3RydWN0IGRybV9yZWN0 IHI7CisKKwkJCS8qIHJvdGF0ZSB0aGUgeC95IG9mZnNldHMgdG8gbWF0Y2ggdGhlIEdUVCB2aWV3 ICovCisJCQlkcm1fcmVjdF9pbml0KCZyLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKwkJCWRybV9y ZWN0X3JvdGF0ZSgmciwKKwkJCQkJaW5mby0+cGxhbmVbaV0ud2lkdGggKiB0aWxlX3dpZHRoLAor CQkJCQlpbmZvLT5wbGFuZVtpXS5oZWlnaHQgKiB0aWxlX2hlaWdodCwKKwkJCQkJRFJNX01PREVf Uk9UQVRFXzI3MCk7CisJCQl4ID0gci54MTsKKwkJCXkgPSByLnkxOworCisJCQlwaXRjaF90aWxl cyA9IGluZm8tPnBsYW5lW2ldLmhlaWdodDsKKwkJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtp XS5zdHJpZGUgPSBwaXRjaF90aWxlcyAqIHRpbGVfaGVpZ2h0OworCisJCQkvKiByb3RhdGUgdGhl IHRpbGUgZGltZW5zaW9ucyB0byBtYXRjaCB0aGUgR1RUIHZpZXcgKi8KKwkJCXN3YXAodGlsZV93 aWR0aCwgdGlsZV9oZWlnaHQpOworCQl9IGVsc2UgeworCQkJcGl0Y2hfdGlsZXMgPSBpbmZvLT5w bGFuZVtpXS53aWR0aDsKKwkJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS5zdHJpZGUgPSBw aXRjaF90aWxlcyAqIHRpbGVfd2lkdGggKiBjcHA7CisJCX0KKworCQkvKgorCQkgKiBXZSBvbmx5 IGtlZXAgdGhlIHgveSBvZmZzZXRzLCBzbyBwdXNoIGFsbCBvZiB0aGUKKwkJICogZ3R0IG9mZnNl dCBpbnRvIHRoZSB4L3kgb2Zmc2V0cy4KKwkJICovCisJCWludGVsX2FkanVzdF90aWxlX29mZnNl dCgmeCwgJnksCisJCQkJCSB0aWxlX3dpZHRoLCB0aWxlX2hlaWdodCwKKwkJCQkJIHRpbGVfc2l6 ZSwgcGl0Y2hfdGlsZXMsCisJCQkJCSBndHRfb2Zmc2V0ICogdGlsZV9zaXplLCAwKTsKKworCQln dHRfb2Zmc2V0ICs9IGluZm8tPnBsYW5lW2ldLndpZHRoICogaW5mby0+cGxhbmVbaV0uaGVpZ2h0 OworCisJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS5vZmZzZXQgPSAwOworCQlwbGFuZV9z dGF0ZS0+Y29sb3JfcGxhbmVbaV0ueCA9IHg7CisJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtp XS55ID0geTsKKwl9Cit9CisKK3ZvaWQgaW50ZWxfZmlsbF9mYl9nZ3R0X3ZpZXcoc3RydWN0IGk5 MTVfZ2d0dF92aWV3ICp2aWV3LAorCQkJICAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiwKKwkJCSAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQoreworCW1lbXNldCh2aWV3LCAw LCBzaXplb2YoKnZpZXcpKTsKKworCXZpZXctPnR5cGUgPSBJOTE1X0dHVFRfVklFV19OT1JNQUw7 CisJaWYgKGRybV9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKSB7CisJCXZpZXctPnR5cGUg PSBJOTE1X0dHVFRfVklFV19ST1RBVEVEOworCQl2aWV3LT5yb3RhdGVkID0gdG9faW50ZWxfZnJh bWVidWZmZXIoZmIpLT5yb3RfaW5mbzsKKwl9Cit9CisKIGludCBpbnRlbF9wbGFuZV9jaGVja19z dHJpZGUoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIHsKIAlz dHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVh cGkucGxhbmUpOwpAQCAtOTYsMyArODU1LDUxIEBAIGludCBpbnRlbF9wbGFuZV9jaGVja19zdHJp ZGUoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIAogCXJldHVy biAwOwogfQorCitpbnQgaW50ZWxfcGxhbmVfY29tcHV0ZV9ndHQoc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwljb25zdCBzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIg KmZiID0KKwkJdG9faW50ZWxfZnJhbWVidWZmZXIocGxhbmVfc3RhdGUtPmh3LmZiKTsKKwl1bnNp Z25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb247CisJaW50IGksIG51 bV9wbGFuZXM7CisKKwlpZiAoIWZiKQorCQlyZXR1cm4gMDsKKworCW51bV9wbGFuZXMgPSBmYi0+ YmFzZS5mb3JtYXQtPm51bV9wbGFuZXM7CisKKwlpZiAoaW50ZWxfcGxhbmVfbmVlZHNfcmVtYXAo cGxhbmVfc3RhdGUpKSB7CisJCWludGVsX3BsYW5lX3JlbWFwX2d0dChwbGFuZV9zdGF0ZSk7CisK KwkJLyoKKwkJICogU29tZXRpbWVzIGV2ZW4gcmVtYXBwaW5nIGNhbid0IG92ZXJjb21lCisJCSAq IHRoZSBzdHJpZGUgbGltaXRhdGlvbnMgOiggQ2FuIGhhcHBlbiB3aXRoCisJCSAqIGJpZyBwbGFu ZSBzaXplcyBhbmQgc3VpdGFibHkgbWlzYWxpZ25lZAorCQkgKiBvZmZzZXRzLgorCQkgKi8KKwkJ cmV0dXJuIGludGVsX3BsYW5lX2NoZWNrX3N0cmlkZShwbGFuZV9zdGF0ZSk7CisJfQorCisJaW50 ZWxfZmlsbF9mYl9nZ3R0X3ZpZXcoJnBsYW5lX3N0YXRlLT52aWV3LCAmZmItPmJhc2UsIHJvdGF0 aW9uKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGxhbmVzOyBpKyspIHsKKwkJcGxhbmVfc3Rh dGUtPmNvbG9yX3BsYW5lW2ldLnN0cmlkZSA9IGludGVsX2ZiX3BpdGNoKCZmYi0+YmFzZSwgaSwg cm90YXRpb24pOworCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0ub2Zmc2V0ID0gMDsKKwor CQlpZiAoZHJtX3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpIHsKKwkJCXBsYW5lX3N0YXRl LT5jb2xvcl9wbGFuZVtpXS54ID0gZmItPnJvdGF0ZWRbaV0ueDsKKwkJCXBsYW5lX3N0YXRlLT5j b2xvcl9wbGFuZVtpXS55ID0gZmItPnJvdGF0ZWRbaV0ueTsKKwkJfSBlbHNlIHsKKwkJCXBsYW5l X3N0YXRlLT5jb2xvcl9wbGFuZVtpXS54ID0gZmItPm5vcm1hbFtpXS54OworCQkJcGxhbmVfc3Rh dGUtPmNvbG9yX3BsYW5lW2ldLnkgPSBmYi0+bm9ybWFsW2ldLnk7CisJCX0KKwl9CisKKwkvKiBS b3RhdGUgc3JjIGNvb3JkaW5hdGVzIHRvIG1hdGNoIHJvdGF0ZWQgR1RUIHZpZXcgKi8KKwlpZiAo ZHJtX3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpCisJCWRybV9yZWN0X3JvdGF0ZSgmcGxh bmVfc3RhdGUtPnVhcGkuc3JjLAorCQkJCWZiLT5iYXNlLndpZHRoIDw8IDE2LCBmYi0+YmFzZS5o ZWlnaHQgPDwgMTYsCisJCQkJRFJNX01PREVfUk9UQVRFXzI3MCk7CisKKwlyZXR1cm4gaW50ZWxf cGxhbmVfY2hlY2tfc3RyaWRlKHBsYW5lX3N0YXRlKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZmIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZmIuaAppbmRleCA4YzE1ZjRjOTU2MWIxLi41OWY4NzE1ZTBiZGFmIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2ZiLmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9mYi5oCkBAIC0xMCwxMSArMTAsMTcgQEAK IAogc3RydWN0IGRybV9mcmFtZWJ1ZmZlcjsKIAorc3RydWN0IGRybV9pOTE1X3ByaXZhdGU7CisK K3N0cnVjdCBpOTE1X2dndHRfdmlldzsKKwogc3RydWN0IGludGVsX3BsYW5lX3N0YXRlOwogCiBi b29sIGlzX2Njc19wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBs YW5lKTsKIGJvb2wgaXNfZ2VuMTJfY2NzX3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLCBpbnQgcGxhbmUpOwogYm9vbCBpc19nZW4xMl9jY3NfY2NfcGxhbmUoY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSk7Citib29sIGlzX2F1eF9wbGFuZShj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5lKTsKK2Jvb2wgaXNfc2Vt aXBsYW5hcl91dl9wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNv bG9yX3BsYW5lKTsKIAogYm9vbCBpc19zdXJmYWNlX2xpbmVhcihjb25zdCBzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5lKTsKIApAQCAtMjQsNCArMzAsMjkgQEAgaW50 IHNrbF9tYWluX3RvX2F1eF9wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwg aW50IG1haW5fcGxhbmUpOwogCiBpbnQgaW50ZWxfcGxhbmVfY2hlY2tfc3RyaWRlKGNvbnN0IHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwogCit1bnNpZ25lZCBpbnQgaW50 ZWxfdGlsZV9zaXplKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cit1 bnNpZ25lZCBpbnQgaW50ZWxfdGlsZV9oZWlnaHQoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIsIGludCBjb2xvcl9wbGFuZSk7Cit1bnNpZ25lZCBpbnQgaW50ZWxfdGlsZV9yb3dfc2l6 ZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5lKTsKKwor dW5zaWduZWQgaW50IGludGVsX2N1cnNvcl9hbGlnbm1lbnQoY29uc3Qgc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KTsKKwordm9pZCBpbnRlbF9mYl9wbGFuZV9nZXRfc3Vic2FtcGxp bmcoaW50ICpoc3ViLCBpbnQgKnZzdWIsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiLAorCQkJCSAgICBpbnQgY29sb3JfcGxhbmUpOworCit1MzIgaW50ZWxfcGxhbmVf YWRqdXN0X2FsaWduZWRfb2Zmc2V0KGludCAqeCwgaW50ICp5LAorCQkJCSAgICAgIGNvbnN0IHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3RhdGUsCisJCQkJICAgICAgaW50IGNvbG9yX3BsYW5l LAorCQkJCSAgICAgIHUzMiBvbGRfb2Zmc2V0LCB1MzIgbmV3X29mZnNldCk7Cit1MzIgaW50ZWxf cGxhbmVfY29tcHV0ZV9hbGlnbmVkX29mZnNldChpbnQgKngsIGludCAqeSwKKwkJCQkgICAgICAg Y29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpzdGF0ZSwKKwkJCQkgICAgICAgaW50IGNv bG9yX3BsYW5lKTsKKworaW50IGludGVsX2ZiX3BpdGNoKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUsIHVuc2lnbmVkIGludCByb3RhdGlvbik7CisKK2lu dCBpbnRlbF9maWxsX2ZiX2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYik7Cit2b2lkIGludGVsX2ZpbGxfZmJfZ2d0dF92aWV3 KHN0cnVjdCBpOTE1X2dndHRfdmlldyAqdmlldywgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIsCisJCQkgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbik7CitpbnQgaW50ZWxfcGxhbmVf Y29tcHV0ZV9ndHQoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7CisKICNl bmRpZiAvKiBfX0lOVEVMX0ZCX0hfXyAqLwotLSAKMi4yNS4xCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK