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=-9.5 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,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 DB22EC4332B for ; Thu, 19 Mar 2020 20:25:23 +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 B104920663 for ; Thu, 19 Mar 2020 20:25:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ay9gwCi5" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B104920663 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 88B5E6EA7B; Thu, 19 Mar 2020 20:25:21 +0000 (UTC) Received: from mail-lf1-x141.google.com (mail-lf1-x141.google.com [IPv6:2a00:1450:4864:20::141]) by gabe.freedesktop.org (Postfix) with ESMTPS id 538FE6EA6E for ; Thu, 19 Mar 2020 20:25:05 +0000 (UTC) Received: by mail-lf1-x141.google.com with SMTP id t21so2746649lfe.9 for ; Thu, 19 Mar 2020 13:25:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3AS4tQBtTKD64+CWvvw6/YiGdelih2cgKPIbyZFkgK0=; b=ay9gwCi5mkWCj35TKLm40Ztxo5QE0jceW+0VbyhKtqg2jLD0WaPZ735GNgnAaJ5DMf 5EkVGa8HVOEJCF+MymU+8yyfrzluPrs36Lt/v6WfoPB55aAMR0a9o63BcndMLcOuXsl6 Sk5qes+bU3K4MH/lOcxUSL1OC1JqUi6MpMKaVe3iIdjglm5orfcBJCBs6fN53T+aipUC sYvtPbLQjrM9IxSNKVP0wZQe7iTWTPDJ8nJDTOLXxnqg9H9EhrMEA0oRBrNU3o31ths8 1SGxFKT4B5YB4RyG8WK9oxVntz6ABDUIrxLrHzUZHZcDLH8pkkaBF/7nI5pzKxkqjp5n /g3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3AS4tQBtTKD64+CWvvw6/YiGdelih2cgKPIbyZFkgK0=; b=pS5NA48nxwvXCcVWbqW6gSNz9rNzGHMz1vCsUDj+a1dllKVFMpDdpRwK8k4xgysPrG hjtMNrEBFfs9ZuFH5m0cCjia1qfx+CWqkU5SyEO0AN5aiglw2it03upBpZLzl6bJFlqy zsDpK8lt70aF9pfIfsRQfwy8zROGXu2/cgS6/1mAhn3QQsdAHHJ0EBZB9ZG8J9vEgBbF ekJvVZRyylpYa8V6Zot9aZDjMsXQNC3T9kbDcy1yBUbe2DVM0eBDvcvSZMruYvleOTnS sN3ZbdfSfm/lMEOLJBTXyJP1oR0JsiEzf5U4Ef+R9fqwlEJxeeyHPkSaG425eK8K/5ea 0f1Q== X-Gm-Message-State: ANhLgQ3DNsmdKspu3JjH4v0Lm1nMKoRJZA5zhq9iSHjwXZEN+oZ8G/io 7TZcAVs4tx4z2qAPdwCvk62v+4Da+4k= X-Google-Smtp-Source: ADFU+vtV2LQapkC9dsLUKeO5Yx4m3TVFtemMOKBQMl3XyW9t022yPZynrHtmPK0OiyhcDDxI5CERRQ== X-Received: by 2002:ac2:57c5:: with SMTP id k5mr2718570lfo.207.1584649502695; Thu, 19 Mar 2020 13:25:02 -0700 (PDT) Received: from sroland-t5810.vmware.com (46-126-183-173.dynamic.hispeed.ch. [46.126.183.173]) by smtp.gmail.com with ESMTPSA id v3sm2074372lfp.8.2020.03.19.13.25.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Mar 2020 13:25:01 -0700 (PDT) From: rscheidegger.oss@gmail.com X-Google-Original-From: sroland@vmware.com To: dri-devel@lists.freedesktop.org Subject: [PATCH 12/17] drm/vmwgfx: Add support for streamoutput with mob commands Date: Thu, 19 Mar 2020 21:24:09 +0100 Message-Id: <20200319202414.9296-13-sroland@vmware.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200319202414.9296-1-sroland@vmware.com> References: <20200319202414.9296-1-sroland@vmware.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-graphics-maintainer@vmware.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" RnJvbTogRGVlcGFrIFJhd2F0IDxkcmF3YXQuZmxvc3NAZ21haWwuY29tPgoKV2l0aCBTTTUgY2Fw YWJpbGl0eSBhIG5ldyB2ZXJzaW9uIG9mIHN0cmVhbW91dHB1dCBpcyBzdXBwb3J0ZWQgYnkgZGV2 aWNlCndoaWNoIG5lZWQgYmFja2luZyBtb2IgYW5kIGEgbmV3IGZpZWxkLiBXaXRoIHRoaXMgY2hh bmdlIHRoZSBuZXcgY29tbWFuZAppcyBzdXBwb3J0ZWQgaW4gY29tbWFuZCBidWZmZXIuCgp2Mjog QWxzbyB0cmFjayBzdHJlYW1vdXRwdXQgY29udGV4dCBiaW5kaW5nIGluIGJpbmRpbmcgbWFuYWdl ci4KCnYzOiBUcmFjayBvbmx5IG9uZSBzdHJlYW1vdXRwdXQgYXMgb25seSBvbmUgY2FuIGJlIHNl dCB0byBjb250ZXh0Lgp2NDogRml4IGNvbW1lbnQgdHlwb3MKClNpZ25lZC1vZmYtYnk6IERlZXBh ayBSYXdhdCA8ZHJhd2F0LmZsb3NzQGdtYWlsLmNvbT4KU2lnbmVkLW9mZi1ieTogTmVoYSBCaGVu ZGUgPGJoZW5kZW5Adm13YXJlLmNvbT4KUmV2aWV3ZWQtYnk6IFRob21hcyBIZWxsc3Ryw7ZtIChW TXdhcmUpIDx0aG9tYXNfb3NAc2hpcG1haWwub3JnPgpTaWduZWQtb2ZmLWJ5OiBSb2xhbmQgU2No ZWlkZWdnZXIgKFZNd2FyZSkgPHJzY2hlaWRlZ2dlci5vc3NAZ21haWwuY29tPgotLS0KIGRyaXZl cnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAyICstCiBkcml2ZXJz L2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9iaW5kaW5nLmMgICAgICB8ICAzOSArLQogZHJpdmVycy9n cHUvZHJtL3Ztd2dmeC92bXdnZnhfYmluZGluZy5oICAgICAgfCAgMTEgKwogZHJpdmVycy9ncHUv ZHJtL3Ztd2dmeC92bXdnZnhfY290YWJsZS5jICAgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2Ry bS92bXdnZngvdm13Z2Z4X2Rydi5oICAgICAgICAgIHwgIDIyICstCiBkcml2ZXJzL2dwdS9kcm0v dm13Z2Z4L3Ztd2dmeF9leGVjYnVmLmMgICAgICB8IDE3MyArKysrKysrKy0KIGRyaXZlcnMvZ3B1 L2RybS92bXdnZngvdm13Z2Z4X3NvLmggICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2Ry bS92bXdnZngvdm13Z2Z4X3N0cmVhbW91dHB1dC5jIHwgMzg3ICsrKysrKysrKysrKysrKysrKysK IDggZmlsZXMgY2hhbmdlZCwgNjMwIGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc3RyZWFtb3V0cHV0 LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL3Ztd2dmeC9NYWtlZmlsZQppbmRleCBjODc3YTIxYTA3MzkuLjVjMzUxNWU4Y2Nl MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9NYWtlZmlsZQorKysgYi9kcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L01ha2VmaWxlCkBAIC04LDcgKzgsNyBAQCB2bXdnZngteSA6PSB2 bXdnZnhfZXhlY2J1Zi5vIHZtd2dmeF9nbXIubyB2bXdnZnhfa21zLm8gdm13Z2Z4X2Rydi5vIFwK IAkgICAgdm13Z2Z4X2NtZGJ1Zl9yZXMubyB2bXdnZnhfY21kYnVmLm8gdm13Z2Z4X3N0ZHUubyBc CiAJICAgIHZtd2dmeF9jb3RhYmxlLm8gdm13Z2Z4X3NvLm8gdm13Z2Z4X2JpbmRpbmcubyB2bXdn ZnhfbXNnLm8gXAogCSAgICB2bXdnZnhfc2ltcGxlX3Jlc291cmNlLm8gdm13Z2Z4X3ZhLm8gdm13 Z2Z4X2JsaXQubyBcCi0JICAgIHZtd2dmeF92YWxpZGF0aW9uLm8gdm13Z2Z4X3BhZ2VfZGlydHku byBcCisJICAgIHZtd2dmeF92YWxpZGF0aW9uLm8gdm13Z2Z4X3BhZ2VfZGlydHkubyB2bXdnZnhf c3RyZWFtb3V0cHV0Lm8gXAogCSAgICB0dG1fb2JqZWN0Lm8gdHRtX2xvY2subwogCiBvYmotJChD T05GSUdfRFJNX1ZNV0dGWCkgOj0gdm13Z2Z4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS92bXdnZngvdm13Z2Z4X2JpbmRpbmcuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4 X2JpbmRpbmcuYwppbmRleCBmOTIzYjNjN2MxNTIuLmY0MTU1MDc5Nzk3MCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfYmluZGluZy5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS92bXdnZngvdm13Z2Z4X2JpbmRpbmcuYwpAQCAtNzgsNiArNzgsNyBAQAogICogQGluZGV4 X2J1ZmZlcjogSW5kZXggYnVmZmVyIGJpbmRpbmcuCiAgKiBAcGVyX3NoYWRlcjogUGVyIHNoYWRl ci10eXBlIGJpbmRpbmdzLgogICogQHVhX3ZpZXdzOiBVQVYgYmluZGluZ3MuCisgKiBAc29fc3Rh dGU6IFN0cmVhbU91dHB1dCBiaW5kaW5ncy4KICAqIEBkaXJ0eTogQml0bWFwIHRyYWNraW5nIHBl ciBiaW5kaW5nLXR5cGUgY2hhbmdlcyB0aGF0IGhhdmUgbm90IHlldAogICogYmVlbiBlbWl0dGVk IHRvIHRoZSBkZXZpY2UuCiAgKiBAZGlydHlfdmI6IEJpdG1hcCB0cmFja2luZyBpbmRpdmlkdWFs IHZlcnRleCBidWZmZXIgYmluZGluZyBjaGFuZ2VzIHRoYXQKQEAgLTEwMyw2ICsxMDQsNyBAQCBz dHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRlIHsKIAlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mb19p YiBpbmRleF9idWZmZXI7CiAJc3RydWN0IHZtd19keF9zaGFkZXJfYmluZGluZ3MgcGVyX3NoYWRl cltTVkdBM0RfTlVNX1NIQURFUlRZUEVdOwogCXN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvX3VhdiB1 YV92aWV3c1tWTVdfTUFYX1VBVl9CSU5EX1RZUEVdOworCXN0cnVjdCB2bXdfY3R4X2JpbmRpbmZv X3NvIHNvX3N0YXRlOwogCiAJdW5zaWduZWQgbG9uZyBkaXJ0eTsKIAlERUNMQVJFX0JJVE1BUChk aXJ0eV92YiwgU1ZHQTNEX0RYX01BWF9WRVJURVhCVUZGRVJTKTsKQEAgLTEyNyw2ICsxMjksNyBA QCBzdGF0aWMgaW50IHZtd19iaW5kaW5nX3NjcnViX2liKHN0cnVjdCB2bXdfY3R4X2JpbmRpbmZv ICpiaSwgYm9vbCByZWJpbmQpOwogc3RhdGljIGludCB2bXdfYmluZGluZ19zY3J1Yl92YihzdHJ1 Y3Qgdm13X2N0eF9iaW5kaW5mbyAqYmksIGJvb2wgcmViaW5kKTsKIHN0YXRpYyBpbnQgdm13X2Jp bmRpbmdfc2NydWJfdWF2KHN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvICpiaSwgYm9vbCByZWJpbmQp Owogc3RhdGljIGludCB2bXdfYmluZGluZ19zY3J1Yl9jc191YXYoc3RydWN0IHZtd19jdHhfYmlu ZGluZm8gKmJpLCBib29sIHJlYmluZCk7CitzdGF0aWMgaW50IHZtd19iaW5kaW5nX3NjcnViX3Nv KHN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvICpiaSwgYm9vbCByZWJpbmQpOwogCiBzdGF0aWMgdm9p ZCB2bXdfYmluZGluZ19idWlsZF9hc3NlcnRzKHZvaWQpIF9fYXR0cmlidXRlX18gKCh1bnVzZWQp KTsKIApAQCAtMjAyLDYgKzIwNSw5IEBAIHN0YXRpYyBjb25zdCBzaXplX3Qgdm13X2JpbmRpbmdf dWF2X29mZnNldHNbXSA9IHsKIHN0YXRpYyBjb25zdCBzaXplX3Qgdm13X2JpbmRpbmdfY3NfdWF2 X29mZnNldHNbXSA9IHsKIAlvZmZzZXRvZihzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRlLCB1 YV92aWV3c1sxXS52aWV3cyksCiB9Oworc3RhdGljIGNvbnN0IHNpemVfdCB2bXdfYmluZGluZ19z b19vZmZzZXRzW10gPSB7CisJb2Zmc2V0b2Yoc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZSwg c29fc3RhdGUpLAorfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2bXdfYmluZGluZ19pbmZvIHZt d19iaW5kaW5nX2luZm9zW10gPSB7CiAJW3Ztd19jdHhfYmluZGluZ19zaGFkZXJdID0gewpAQCAt MjU2LDYgKzI2MiwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZtd19iaW5kaW5nX2luZm8gdm13 X2JpbmRpbmdfaW5mb3NbXSA9IHsKIAkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHZtd19jdHhfYmlu ZGluZm9fdmlldyksCiAJCS5vZmZzZXRzID0gdm13X2JpbmRpbmdfY3NfdWF2X29mZnNldHMsCiAJ CS5zY3J1Yl9mdW5jID0gdm13X2JpbmRpbmdfc2NydWJfY3NfdWF2fSwKKwlbdm13X2N0eF9iaW5k aW5nX3NvXSA9IHsKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHZtd19jdHhfYmluZGluZm9fc28p LAorCQkub2Zmc2V0cyA9IHZtd19iaW5kaW5nX3NvX29mZnNldHMsCisJCS5zY3J1Yl9mdW5jID0g dm13X2JpbmRpbmdfc2NydWJfc299LAogfTsKIAogLyoqCkBAIC0xMjkwLDYgKzEzMDAsMzMgQEAg c3RhdGljIGludCB2bXdfYmluZGluZ19zY3J1Yl9jc191YXYoc3RydWN0IHZtd19jdHhfYmluZGlu Zm8gKmJpLCBib29sIHJlYmluZCkKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiB2bXdfYmluZGlu Z19zY3J1Yl9zbyAtIFNjcnViIGEgc3RyZWFtb3V0cHV0IGJpbmRpbmcgZnJvbSBjb250ZXh0Lgor ICogQGJpOiBTaW5nbGUgYmluZGluZyBpbmZvcm1hdGlvbi4KKyAqIEByZWJpbmQ6IFdoZXRoZXIg dG8gaXNzdWUgYSBiaW5kIGluc3RlYWQgb2Ygc2NydWIgY29tbWFuZC4KKyAqLworc3RhdGljIGlu dCB2bXdfYmluZGluZ19zY3J1Yl9zbyhzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mbyAqYmksIGJvb2wg cmViaW5kKQoreworCXN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvX3NvICpiaW5kaW5nID0KKwkJY29u dGFpbmVyX29mKGJpLCB0eXBlb2YoKmJpbmRpbmcpLCBiaSk7CisJc3RydWN0IHZtd19wcml2YXRl ICpkZXZfcHJpdiA9IGJpLT5jdHgtPmRldl9wcml2OworCXN0cnVjdCB7CisJCVNWR0EzZENtZEhl YWRlciBoZWFkZXI7CisJCVNWR0EzZENtZERYU2V0U3RyZWFtT3V0cHV0IGJvZHk7CisJfSAqY21k OworCisJY21kID0gVk1XX0ZJRk9fUkVTRVJWRV9EWChkZXZfcHJpdiwgc2l6ZW9mKCpjbWQpLCBi aS0+Y3R4LT5pZCk7CisJaWYgKCFjbWQpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFk ZXIuaWQgPSBTVkdBXzNEX0NNRF9EWF9TRVRfU1RSRUFNT1VUUFVUOworCWNtZC0+aGVhZGVyLnNp emUgPSBzaXplb2YoY21kLT5ib2R5KTsKKwljbWQtPmJvZHkuc29pZCA9IHJlYmluZCA/IGJpLT5y ZXMtPmlkIDogU1ZHQTNEX0lOVkFMSURfSUQ7CisJdm13X2ZpZm9fY29tbWl0KGRldl9wcml2LCBz aXplb2YoKmNtZCkpOworCisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogdm13X2JpbmRpbmdfc3Rh dGVfYWxsb2MgLSBBbGxvY2F0ZSBhIHN0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUgd2l0aAog ICogbWVtb3J5IGFjY291bnRpbmcuCkBAIC0xMzkzLDcgKzE0MzAsNyBAQCB1MzIgdm13X2JpbmRp bmdfZGlydHlpbmcoZW51bSB2bXdfY3R4X2JpbmRpbmdfdHlwZSBiaW5kaW5nX3R5cGUpCiAJfTsK IAogCS8qIFJldmlldyB0aGlzIGZ1bmN0aW9uIGFzIG5ldyBiaW5kaW5ncyBhcmUgYWRkZWQuICov Ci0JQlVJTERfQlVHX09OKHZtd19jdHhfYmluZGluZ19tYXggIT0gMTMpOworCUJVSUxEX0JVR19P Tih2bXdfY3R4X2JpbmRpbmdfbWF4ICE9IDE0KTsKIAlyZXR1cm4gaXNfYmluZGluZ19kaXJ0eWlu Z1tiaW5kaW5nX3R5cGVdOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4 L3Ztd2dmeF9iaW5kaW5nLmggYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9iaW5kaW5n LmgKaW5kZXggOGQ1Zjg3YWFkNDkwLi5kY2I3MWZkMGJiM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS92bXdnZngvdm13Z2Z4X2JpbmRpbmcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13 Z2Z4L3Ztd2dmeF9iaW5kaW5nLmgKQEAgLTU1LDYgKzU1LDcgQEAgZW51bSB2bXdfY3R4X2JpbmRp bmdfdHlwZSB7CiAJdm13X2N0eF9iaW5kaW5nX2liLAogCXZtd19jdHhfYmluZGluZ191YXYsCiAJ dm13X2N0eF9iaW5kaW5nX2NzX3VhdiwKKwl2bXdfY3R4X2JpbmRpbmdfc28sCiAJdm13X2N0eF9i aW5kaW5nX21heAogfTsKIApAQCAtMjAzLDYgKzIwNCwxNiBAQCBzdHJ1Y3Qgdm13X2N0eF9iaW5k aW5mb191YXYgewogCXVpbnQzMiBpbmRleDsKIH07CiAKKy8qKgorICogc3RydWN0IHZtd19jdHhf YmluZGluZm9fc28gLSBTdHJlYW0gb3V0cHV0IGJpbmRpbmcgbWV0YWRhdGEuCisgKiBAYmk6IHN0 cnVjdCB2bXdfY3R4X2JpbmRpbmZvIHdlIGRlcml2ZSBmcm9tLgorICogQHNsb3Q6IERldmljZSBk YXRhIHVzZWQgdG8gcmVjb25zdHJ1Y3QgYmluZGluZyBjb21tYW5kLgorICovCitzdHJ1Y3Qgdm13 X2N0eF9iaW5kaW5mb19zbyB7CisJc3RydWN0IHZtd19jdHhfYmluZGluZm8gYmk7CisJdWludDMy IHNsb3Q7Cit9OworCiBleHRlcm4gdm9pZCB2bXdfYmluZGluZ19hZGQoc3RydWN0IHZtd19jdHhf YmluZGluZ19zdGF0ZSAqY2JzLAogCQkJICAgIGNvbnN0IHN0cnVjdCB2bXdfY3R4X2JpbmRpbmZv ICpjaSwKIAkJCSAgICB1MzIgc2hhZGVyX3Nsb3QsIHUzMiBzbG90KTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2NvdGFibGUuYyBiL2RyaXZlcnMvZ3B1L2RybS92 bXdnZngvdm13Z2Z4X2NvdGFibGUuYwppbmRleCAwOGM1YjJjY2NhOTguLjY1ZThlN2E5NzcyNCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfY290YWJsZS5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2NvdGFibGUuYwpAQCAtODAsNyArODAsNyBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IHZtd19jb3RhYmxlX2luZm8gY29faW5mb1tdID0gewogCXsx LCBzaXplb2YoU1ZHQUNPVGFibGVEWERlcHRoU3RlbmNpbEVudHJ5KSwgTlVMTH0sCiAJezEsIHNp emVvZihTVkdBQ09UYWJsZURYUmFzdGVyaXplclN0YXRlRW50cnkpLCBOVUxMfSwKIAl7MSwgc2l6 ZW9mKFNWR0FDT1RhYmxlRFhTYW1wbGVyRW50cnkpLCBOVUxMfSwKLQl7MSwgc2l6ZW9mKFNWR0FD T1RhYmxlRFhTdHJlYW1PdXRwdXRFbnRyeSksIE5VTEx9LAorCXsxLCBzaXplb2YoU1ZHQUNPVGFi bGVEWFN0cmVhbU91dHB1dEVudHJ5KSwgJnZtd19keF9zdHJlYW1vdXRwdXRfY290YWJsZV9saXN0 X3NjcnVifSwKIAl7MSwgc2l6ZW9mKFNWR0FDT1RhYmxlRFhRdWVyeUVudHJ5KSwgTlVMTH0sCiAJ ezEsIHNpemVvZihTVkdBQ09UYWJsZURYU2hhZGVyRW50cnkpLCAmdm13X2R4X3NoYWRlcl9jb3Rh YmxlX2xpc3Rfc2NydWJ9LAogCXsxLCBzaXplb2YoU1ZHQUNPVGFibGVEWFVBVmlld0VudHJ5KSwg JnZtd192aWV3X2NvdGFibGVfbGlzdF9kZXN0cm95fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9k cnYuaAppbmRleCA0MWUwZDNiZDg1ZWUuLjU2OTVlMjY1NDA4YyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfZHJ2LmgKQEAgLTIwMiw2ICsyMDIsNyBAQCBlbnVtIHZtd19yZXNfdHlwZSB7CiAJ dm13X3Jlc19keF9jb250ZXh0LAogCXZtd19yZXNfY290YWJsZSwKIAl2bXdfcmVzX3ZpZXcsCisJ dm13X3Jlc19zdHJlYW1vdXRwdXQsCiAJdm13X3Jlc19tYXgKIH07CiAKQEAgLTIxMCw3ICsyMTEs OCBAQCBlbnVtIHZtd19yZXNfdHlwZSB7CiAgKi8KIGVudW0gdm13X2NtZGJ1Zl9yZXNfdHlwZSB7 CiAJdm13X2NtZGJ1Zl9yZXNfc2hhZGVyLAotCXZtd19jbWRidWZfcmVzX3ZpZXcKKwl2bXdfY21k YnVmX3Jlc192aWV3LAorCXZtd19jbWRidWZfcmVzX3N0cmVhbW91dHB1dAogfTsKIAogc3RydWN0 IHZtd19jbWRidWZfcmVzX21hbmFnZXI7CkBAIC0xMzM1LDYgKzEzMzcsMjQgQEAgZXh0ZXJuIHN0 cnVjdCB2bXdfcmVzb3VyY2UgKgogdm13X3NoYWRlcl9sb29rdXAoc3RydWN0IHZtd19jbWRidWZf cmVzX21hbmFnZXIgKm1hbiwKIAkJICB1MzIgdXNlcl9rZXksIFNWR0EzZFNoYWRlclR5cGUgc2hh ZGVyX3R5cGUpOwogCisvKgorICogU3RyZWFtb3V0cHV0IG1hbmFnZW1lbnQKKyAqLworc3RydWN0 IHZtd19yZXNvdXJjZSAqCit2bXdfZHhfc3RyZWFtb3V0cHV0X2xvb2t1cChzdHJ1Y3Qgdm13X2Nt ZGJ1Zl9yZXNfbWFuYWdlciAqbWFuLAorCQkJICAgdTMyIHVzZXJfa2V5KTsKK2ludCB2bXdfZHhf c3RyZWFtb3V0cHV0X2FkZChzdHJ1Y3Qgdm13X2NtZGJ1Zl9yZXNfbWFuYWdlciAqbWFuLAorCQkJ ICAgIHN0cnVjdCB2bXdfcmVzb3VyY2UgKmN0eCwKKwkJCSAgICBTVkdBM2RTdHJlYW1PdXRwdXRJ ZCB1c2VyX2tleSwKKwkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTsKK3ZvaWQgdm13X2R4 X3N0cmVhbW91dHB1dF9zZXRfc2l6ZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsIHUzMiBzaXpl KTsKK2ludCB2bXdfZHhfc3RyZWFtb3V0cHV0X3JlbW92ZShzdHJ1Y3Qgdm13X2NtZGJ1Zl9yZXNf bWFuYWdlciAqbWFuLAorCQkJICAgICAgIFNWR0EzZFN0cmVhbU91dHB1dElkIHVzZXJfa2V5LAor CQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpOwordm9pZCB2bXdfZHhfc3RyZWFtb3V0 cHV0X2NvdGFibGVfbGlzdF9zY3J1YihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJ CQkgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKwkJCQkJICAgIGJvb2wgcmVhZGJhY2spOwor CiAvKgogICogQ29tbWFuZCBidWZmZXIgbWFuYWdlZCByZXNvdXJjZXMgLSB2bXdnZnhfY21kYnVm X3Jlcy5jCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2V4 ZWNidWYuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2V4ZWNidWYuYwppbmRleCBk NDkxNjljNjhmYmEuLjM2N2Q1Yjg3ZWU2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Zt d2dmeC92bXdnZnhfZXhlY2J1Zi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4 X2V4ZWNidWYuYwpAQCAtMjk0OCw2ICsyOTQ4LDE2OSBAQCBzdGF0aWMgaW50IHZtd19jbWRfc2V0 X2NzX3VhdihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCXJldHVybiByZXQ7CiB9CiAK K3N0YXRpYyBpbnQgdm13X2NtZF9keF9kZWZpbmVfc3RyZWFtb3V0cHV0KHN0cnVjdCB2bXdfcHJp dmF0ZSAqZGV2X3ByaXYsCisJCQkJCSAgc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0 LAorCQkJCQkgIFNWR0EzZENtZEhlYWRlciAqaGVhZGVyKQoreworCXN0cnVjdCB2bXdfY3R4X3Zh bGlkYXRpb25faW5mbyAqY3R4X25vZGUgPSBzd19jb250ZXh0LT5keF9jdHhfbm9kZTsKKwlzdHJ1 Y3Qgdm13X3Jlc291cmNlICpyZXM7CisJc3RydWN0IHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRl cjsKKwkJU1ZHQTNkQ21kRFhEZWZpbmVTdHJlYW1PdXRwdXRXaXRoTW9iIGJvZHk7CisJfSAqY21k ID0gY29udGFpbmVyX29mKGhlYWRlciwgdHlwZW9mKCpjbWQpLCBoZWFkZXIpOworCWludCByZXQ7 CisKKwlpZiAoIWhhc19zbTVfY29udGV4dChkZXZfcHJpdikpCisJCXJldHVybiAtRUlOVkFMOwor CisJaWYgKCFjdHhfbm9kZSkgeworCQlEUk1fRVJST1IoIkRYIENvbnRleHQgbm90IHNldC5cbiIp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXMgPSB2bXdfY29udGV4dF9jb3RhYmxlKGN0 eF9ub2RlLT5jdHgsIFNWR0FfQ09UQUJMRV9TVFJFQU1PVVRQVVQpOworCXJldCA9IHZtd19jb3Rh YmxlX25vdGlmeShyZXMsIGNtZC0+Ym9keS5zb2lkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJcmV0dXJuIHZtd19keF9zdHJlYW1vdXRwdXRfYWRkKHN3X2NvbnRleHQtPm1hbiwgY3R4 X25vZGUtPmN0eCwKKwkJCQkgICAgICAgY21kLT5ib2R5LnNvaWQsCisJCQkJICAgICAgICZzd19j b250ZXh0LT5zdGFnZWRfY21kX3Jlcyk7Cit9CisKK3N0YXRpYyBpbnQgdm13X2NtZF9keF9kZXN0 cm95X3N0cmVhbW91dHB1dChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQkgICBz dHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQsCisJCQkJCSAgIFNWR0EzZENtZEhlYWRl ciAqaGVhZGVyKQoreworCXN0cnVjdCB2bXdfY3R4X3ZhbGlkYXRpb25faW5mbyAqY3R4X25vZGUg PSBzd19jb250ZXh0LT5keF9jdHhfbm9kZTsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXM7CisJ c3RydWN0IHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21kRFhEZXN0cm95 U3RyZWFtT3V0cHV0IGJvZHk7CisJfSAqY21kID0gY29udGFpbmVyX29mKGhlYWRlciwgdHlwZW9m KCpjbWQpLCBoZWFkZXIpOworCisJaWYgKCFjdHhfbm9kZSkgeworCQlEUk1fRVJST1IoIkRYIENv bnRleHQgbm90IHNldC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIFdo ZW4gZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgU001IHRoZW4gc3RyZWFtb3V0cHV0IHdpdGggbW9i IGNvbW1hbmQgaXMKKwkgKiBub3QgYXZhaWxhYmxlIHRvIHVzZXItc3BhY2UuIFNpbXBseSByZXR1 cm4gaW4gdGhpcyBjYXNlLgorCSAqLworCWlmICghaGFzX3NtNV9jb250ZXh0KGRldl9wcml2KSkK KwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFdpdGggU001IGNhcGFibGUgZGV2aWNlIGlmIGxvb2t1 cCBmYWlscyB0aGVuIHVzZXItc3BhY2UgcHJvYmFibHkgdXNlZAorCSAqIG9sZCBzdHJlYW1vdXRw dXQgZGVmaW5lIGNvbW1hbmQuIFJldHVybiB3aXRob3V0IGFuIGVycm9yLgorCSAqLworCXJlcyA9 IHZtd19keF9zdHJlYW1vdXRwdXRfbG9va3VwKHZtd19jb250ZXh0X3Jlc19tYW4oY3R4X25vZGUt PmN0eCksCisJCQkJCSBjbWQtPmJvZHkuc29pZCk7CisJaWYgKElTX0VSUihyZXMpKQorCQlyZXR1 cm4gMDsKKworCXJldHVybiB2bXdfZHhfc3RyZWFtb3V0cHV0X3JlbW92ZShzd19jb250ZXh0LT5t YW4sIGNtZC0+Ym9keS5zb2lkLAorCQkJCQkgICZzd19jb250ZXh0LT5zdGFnZWRfY21kX3Jlcyk7 Cit9CisKK3N0YXRpYyBpbnQgdm13X2NtZF9keF9iaW5kX3N0cmVhbW91dHB1dChzdHJ1Y3Qgdm13 X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQlzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRl eHQsCisJCQkJCVNWR0EzZENtZEhlYWRlciAqaGVhZGVyKQoreworCXN0cnVjdCB2bXdfY3R4X3Zh bGlkYXRpb25faW5mbyAqY3R4X25vZGUgPSBzd19jb250ZXh0LT5keF9jdHhfbm9kZTsKKwlzdHJ1 Y3Qgdm13X3Jlc291cmNlICpyZXM7CisJc3RydWN0IHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRl cjsKKwkJU1ZHQTNkQ21kRFhCaW5kU3RyZWFtT3V0cHV0IGJvZHk7CisJfSAqY21kID0gY29udGFp bmVyX29mKGhlYWRlciwgdHlwZW9mKCpjbWQpLCBoZWFkZXIpOworCWludCByZXQ7CisKKwlpZiAo IWhhc19zbTVfY29udGV4dChkZXZfcHJpdikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFj dHhfbm9kZSkgeworCQlEUk1fRVJST1IoIkRYIENvbnRleHQgbm90IHNldC5cbiIpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwlyZXMgPSB2bXdfZHhfc3RyZWFtb3V0cHV0X2xvb2t1cCh2bXdf Y29udGV4dF9yZXNfbWFuKGN0eF9ub2RlLT5jdHgpLAorCQkJCQkgY21kLT5ib2R5LnNvaWQpOwor CWlmIChJU19FUlIocmVzKSkgeworCQlEUk1fRVJST1IoIkNvdW5kIG5vdCBmaW5kIHN0cmVhbW91 dHB1dCB0byBiaW5kLlxuIik7CisJCXJldHVybiBQVFJfRVJSKHJlcyk7CisJfQorCisJdm13X2R4 X3N0cmVhbW91dHB1dF9zZXRfc2l6ZShyZXMsIGNtZC0+Ym9keS5zaXplSW5CeXRlcyk7CisKKwly ZXQgPSB2bXdfZXhlY2J1Zl9yZXNfbm9jdHhfdmFsX2FkZChzd19jb250ZXh0LCByZXMsCisJCQkJ CSAgICBWTVdfUkVTX0RJUlRZX05PTkUpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJFcnJv ciBjcmVhdGluZyByZXNvdXJjZSB2YWxpZGF0aW9uIG5vZGUuXG4iKTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwlyZXR1cm4gdm13X2NtZF9yZXNfc3dpdGNoX2JhY2t1cChkZXZfcHJpdiwgc3dfY29u dGV4dCwgcmVzLAorCQkJCQkgJmNtZC0+Ym9keS5tb2JpZCwKKwkJCQkJIGNtZC0+Ym9keS5vZmZz ZXRJbkJ5dGVzKTsKK30KKworc3RhdGljIGludCB2bXdfY21kX2R4X3NldF9zdHJlYW1vdXRwdXQo c3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgICAgICAgc3RydWN0IHZtd19zd19j b250ZXh0ICpzd19jb250ZXh0LAorCQkJCSAgICAgICBTVkdBM2RDbWRIZWFkZXIgKmhlYWRlcikK K3sKKwlzdHJ1Y3Qgdm13X2N0eF92YWxpZGF0aW9uX2luZm8gKmN0eF9ub2RlID0gc3dfY29udGV4 dC0+ZHhfY3R4X25vZGU7CisJc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzOworCXN0cnVjdCB2bXdf Y3R4X2JpbmRpbmZvX3NvIGJpbmRpbmc7CisJc3RydWN0IHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhl YWRlcjsKKwkJU1ZHQTNkQ21kRFhTZXRTdHJlYW1PdXRwdXQgYm9keTsKKwl9ICpjbWQgPSBjb250 YWluZXJfb2YoaGVhZGVyLCB0eXBlb2YoKmNtZCksIGhlYWRlcik7CisJaW50IHJldDsKKworCWlm ICghY3R4X25vZGUpIHsKKwkJRFJNX0VSUk9SKCJEWCBDb250ZXh0IG5vdCBzZXQuXG4iKTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNtZC0+Ym9keS5zb2lkID09IFNWR0EzRF9JTlZB TElEX0lEKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogV2hlbiBkZXZpY2UgZG9lcyBub3Qgc3Vw cG9ydCBTTTUgdGhlbiBzdHJlYW1vdXRwdXQgd2l0aCBtb2IgY29tbWFuZCBpcworCSAqIG5vdCBh dmFpbGFibGUgdG8gdXNlci1zcGFjZS4gU2ltcGx5IHJldHVybiBpbiB0aGlzIGNhc2UuCisJICov CisJaWYgKCFoYXNfc201X2NvbnRleHQoZGV2X3ByaXYpKQorCQlyZXR1cm4gMDsKKworCS8qCisJ ICogV2l0aCBTTTUgY2FwYWJsZSBkZXZpY2UgaWYgbG9va3VwIGZhaWxzIHRoZW4gdXNlci1zcGFj ZSBwcm9iYWJseSB1c2VkCisJICogb2xkIHN0cmVhbW91dHB1dCBkZWZpbmUgY29tbWFuZC4gUmV0 dXJuIHdpdGhvdXQgYW4gZXJyb3IuCisJICovCisJcmVzID0gdm13X2R4X3N0cmVhbW91dHB1dF9s b29rdXAodm13X2NvbnRleHRfcmVzX21hbihjdHhfbm9kZS0+Y3R4KSwKKwkJCQkJIGNtZC0+Ym9k eS5zb2lkKTsKKwlpZiAoSVNfRVJSKHJlcykpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0g dm13X2V4ZWNidWZfcmVzX25vY3R4X3ZhbF9hZGQoc3dfY29udGV4dCwgcmVzLAorCQkJCQkgICAg Vk1XX1JFU19ESVJUWV9OT05FKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRXJyb3IgY3Jl YXRpbmcgcmVzb3VyY2UgdmFsaWRhdGlvbiBub2RlLlxuIik7CisJCXJldHVybiByZXQ7CisJfQor CisJYmluZGluZy5iaS5jdHggPSBjdHhfbm9kZS0+Y3R4OworCWJpbmRpbmcuYmkucmVzID0gcmVz OworCWJpbmRpbmcuYmkuYnQgPSB2bXdfY3R4X2JpbmRpbmdfc287CisJYmluZGluZy5zbG90ID0g MDsgLyogT25seSBvbmUgU08gc2V0IHRvIGNvbnRleHQgYXQgYSB0aW1lLiAqLworCisJdm13X2Jp bmRpbmdfYWRkKHN3X2NvbnRleHQtPmR4X2N0eF9ub2RlLT5zdGFnZWQsICZiaW5kaW5nLmJpLCAw LAorCQkJYmluZGluZy5zbG90KTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgdm13 X2NtZF9pbmRleGVkX2luc3RhbmNlZF9pbmRpcmVjdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9w cml2LAogCQkJCQkgICAgICBzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQsCiAJCQkJ CSAgICAgIFNWR0EzZENtZEhlYWRlciAqaGVhZGVyKQpAQCAtMzMzMCw5ICszNDkzLDkgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCB2bXdfY21kX2VudHJ5IHZtd19jbWRfZW50cmllc1tTVkdBXzNEX0NN RF9NQVhdID0gewogCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0RYX0RFRklORV9TVFJFQU1PVVRQ VVQsCiAJCSAgICAmdm13X2NtZF9keF9zb19kZWZpbmUsIHRydWUsIGZhbHNlLCB0cnVlKSwKIAlW TVdfQ01EX0RFRihTVkdBXzNEX0NNRF9EWF9ERVNUUk9ZX1NUUkVBTU9VVFBVVCwKLQkJICAgICZ2 bXdfY21kX2R4X2NpZF9jaGVjaywgdHJ1ZSwgZmFsc2UsIHRydWUpLAotCVZNV19DTURfREVGKFNW R0FfM0RfQ01EX0RYX1NFVF9TVFJFQU1PVVRQVVQsICZ2bXdfY21kX2R4X2NpZF9jaGVjaywKLQkJ ICAgIHRydWUsIGZhbHNlLCB0cnVlKSwKKwkJICAgICZ2bXdfY21kX2R4X2Rlc3Ryb3lfc3RyZWFt b3V0cHV0LCB0cnVlLCBmYWxzZSwgdHJ1ZSksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfRFhf U0VUX1NUUkVBTU9VVFBVVCwKKwkJICAgICZ2bXdfY21kX2R4X3NldF9zdHJlYW1vdXRwdXQsIHRy dWUsIGZhbHNlLCB0cnVlKSwKIAlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9EWF9TRVRfU09UQVJH RVRTLAogCQkgICAgJnZtd19jbWRfZHhfc2V0X3NvX3RhcmdldHMsIHRydWUsIGZhbHNlLCB0cnVl KSwKIAlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9EWF9TRVRfSU5QVVRfTEFZT1VULApAQCAtMzM3 NSw2ICszNTM4LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm13X2NtZF9lbnRyeSB2bXdfY21k X2VudHJpZXNbU1ZHQV8zRF9DTURfTUFYXSA9IHsKIAkJICAgIGZhbHNlLCB0cnVlKSwKIAlWTVdf Q01EX0RFRihTVkdBXzNEX0NNRF9EWF9ERUZJTkVfREVQVEhTVEVOQ0lMX1ZJRVdfVjIsCiAJCSAg ICAmdm13X2NtZF9zbTVfdmlld19kZWZpbmUsIHRydWUsIGZhbHNlLCB0cnVlKSwKKwlWTVdfQ01E X0RFRihTVkdBXzNEX0NNRF9EWF9ERUZJTkVfU1RSRUFNT1VUUFVUX1dJVEhfTU9CLAorCQkgICAg JnZtd19jbWRfZHhfZGVmaW5lX3N0cmVhbW91dHB1dCwgdHJ1ZSwgZmFsc2UsIHRydWUpLAorCVZN V19DTURfREVGKFNWR0FfM0RfQ01EX0RYX0JJTkRfU1RSRUFNT1VUUFVULAorCQkgICAgJnZtd19j bWRfZHhfYmluZF9zdHJlYW1vdXRwdXQsIHRydWUsIGZhbHNlLCB0cnVlKSwKIH07CiAKIGJvb2wg dm13X2NtZF9kZXNjcmliZShjb25zdCB2b2lkICpidWYsIHUzMiAqc2l6ZSwgY2hhciBjb25zdCAq KmNtZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3NvLmggYi9k cml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zby5oCmluZGV4IDIyYjRmNTcyMDkwOC4uZjQ4 Yjg0YmZlZWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zby5o CisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3NvLmgKQEAgLTEyOSw2ICsxMjks NyBAQCBzdGF0aWMgaW5saW5lIGVudW0gdm13X3NvX3R5cGUgdm13X3NvX2NtZF90b190eXBlKHUz MiBpZCkKIAljYXNlIFNWR0FfM0RfQ01EX0RYX0RFU1RST1lfU0FNUExFUl9TVEFURToKIAkJcmV0 dXJuIHZtd19zb19zczsKIAljYXNlIFNWR0FfM0RfQ01EX0RYX0RFRklORV9TVFJFQU1PVVRQVVQ6 CisJY2FzZSBTVkdBXzNEX0NNRF9EWF9ERUZJTkVfU1RSRUFNT1VUUFVUX1dJVEhfTU9COgogCWNh c2UgU1ZHQV8zRF9DTURfRFhfREVTVFJPWV9TVFJFQU1PVVRQVVQ6CiAJCXJldHVybiB2bXdfc29f c287CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4 X3N0cmVhbW91dHB1dC5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc3RyZWFtb3V0 cHV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xOTMxOTI0NTY2 NjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zdHJl YW1vdXRwdXQuYwpAQCAtMCwwICsxLDM4NyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAgT1IgTUlUCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgwqkg MjAxOC0yMDE5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQorICogQWxsIFJpZ2h0 cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJl IiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdy YXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp b25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5P Ti1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERF UlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s CisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBE RUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5j bHVkZSA8ZHJtL3R0bS90dG1fcGxhY2VtZW50Lmg+CisKKyNpbmNsdWRlICJ2bXdnZnhfZHJ2Lmgi CisjaW5jbHVkZSAidm13Z2Z4X3Jlc291cmNlX3ByaXYuaCIKKyNpbmNsdWRlICJ2bXdnZnhfYmlu ZGluZy5oIgorCisvKioKKyAqIHN0cnVjdCB2bXdfZHhfc3RyZWFtb3V0cHV0IC0gU3RyZWFtb3V0 cHV0IHJlc291cmNlIG1ldGFkYXRhLgorICogQHJlczogQmFzZSByZXNvdXJjZSBzdHJ1Y3QuCisg KiBAY3R4OiBOb24tcmVmY291bnRlZCBjb250ZXh0IHRvIHdoaWNoIEByZXMgYmVsb25nLgorICog QGNvdGFibGU6IFJlZmNvdW50ZWQgY290YWJsZSBob2xkaW5nIHRoaXMgU3RyZWFtb3V0cHV0Lgor ICogQGNvdGFibGVfaGVhZDogTGlzdCBoZWFkIGZvciBjb3RhYmxlLXNvX3JlcyBsaXN0LgorICog QGlkOiBVc2VyLXNwYWNlIHByb3ZpZGVkIGlkZW50aWZpZXIuCisgKiBAc2l6ZTogVXNlci1zcGFj ZSBwcm92aWRlZCBtb2Igc2l6ZS4KKyAqIEBjb21taXR0ZWQ6IFdoZXRoZXIgc3RyZWFtb3V0cHV0 IGlzIGFjdHVhbGx5IGNyZWF0ZWQgb3IgcGVuZGluZyBjcmVhdGlvbi4KKyAqLworc3RydWN0IHZt d19keF9zdHJlYW1vdXRwdXQgeworCXN0cnVjdCB2bXdfcmVzb3VyY2UgcmVzOworCXN0cnVjdCB2 bXdfcmVzb3VyY2UgKmN0eDsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlICpjb3RhYmxlOworCXN0cnVj dCBsaXN0X2hlYWQgY290YWJsZV9oZWFkOworCXUzMiBpZDsKKwl1MzIgc2l6ZTsKKwlib29sIGNv bW1pdHRlZDsKK307CisKK3N0YXRpYyBpbnQgdm13X2R4X3N0cmVhbW91dHB1dF9jcmVhdGUoc3Ry dWN0IHZtd19yZXNvdXJjZSAqcmVzKTsKK3N0YXRpYyBpbnQgdm13X2R4X3N0cmVhbW91dHB1dF9i aW5kKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywKKwkJCQkgICAgc3RydWN0IHR0bV92YWxpZGF0 ZV9idWZmZXIgKnZhbF9idWYpOworc3RhdGljIGludCB2bXdfZHhfc3RyZWFtb3V0cHV0X3VuYmlu ZChzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsIGJvb2wgcmVhZGJhY2ssCisJCQkJICAgICAgc3Ry dWN0IHR0bV92YWxpZGF0ZV9idWZmZXIgKnZhbF9idWYpOworc3RhdGljIHZvaWQgdm13X2R4X3N0 cmVhbW91dHB1dF9jb21taXRfbm90aWZ5KHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywKKwkJCQkJ ICAgICAgZW51bSB2bXdfY21kYnVmX3Jlc19zdGF0ZSBzdGF0ZSk7CisKK3N0YXRpYyBzaXplX3Qg dm13X3N0cmVhbW91dHB1dF9zaXplOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZtd19yZXNfZnVu YyB2bXdfZHhfc3RyZWFtb3V0cHV0X2Z1bmMgPSB7CisJLnJlc190eXBlID0gdm13X3Jlc19zdHJl YW1vdXRwdXQsCisJLm5lZWRzX2JhY2t1cCA9IHRydWUsCisJLm1heV9ldmljdCA9IGZhbHNlLAor CS50eXBlX25hbWUgPSAiRFggc3RyZWFtb3V0cHV0IiwKKwkuYmFja3VwX3BsYWNlbWVudCA9ICZ2 bXdfbW9iX3BsYWNlbWVudCwKKwkuY3JlYXRlID0gdm13X2R4X3N0cmVhbW91dHB1dF9jcmVhdGUs CisJLmRlc3Ryb3kgPSBOVUxMLCAvKiBDb21tYW5kIGJ1ZmZlciBtYW5hZ2VkIHJlc291cmNlLiAq LworCS5iaW5kID0gdm13X2R4X3N0cmVhbW91dHB1dF9iaW5kLAorCS51bmJpbmQgPSB2bXdfZHhf c3RyZWFtb3V0cHV0X3VuYmluZCwKKwkuY29tbWl0X25vdGlmeSA9IHZtd19keF9zdHJlYW1vdXRw dXRfY29tbWl0X25vdGlmeSwKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZtd19keF9zdHJl YW1vdXRwdXQgKgordm13X3Jlc190b19keF9zdHJlYW1vdXRwdXQoc3RydWN0IHZtd19yZXNvdXJj ZSAqcmVzKQoreworCXJldHVybiBjb250YWluZXJfb2YocmVzLCBzdHJ1Y3Qgdm13X2R4X3N0cmVh bW91dHB1dCwgcmVzKTsKK30KKworLyoqCisgKiB2bXdfZHhfc3RyZWFtb3V0cHV0X3Vuc2NydWIg LSBSZWF0dGFjaCB0aGUgTU9CIHRvIHN0cmVhbW91dHB1dC4KKyAqIEByZXM6IFRoZSBzdHJlYW1v dXRwdXQgcmVzb3VyY2UuCisgKgorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVy cm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCB2bXdfZHhfc3RyZWFtb3V0cHV0 X3Vuc2NydWIoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKQoreworCXN0cnVjdCB2bXdfZHhfc3Ry ZWFtb3V0cHV0ICpzbyA9IHZtd19yZXNfdG9fZHhfc3RyZWFtb3V0cHV0KHJlcyk7CisJc3RydWN0 IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHJlcy0+ZGV2X3ByaXY7CisJc3RydWN0IHsKKwkJU1ZH QTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21kRFhCaW5kU3RyZWFtT3V0cHV0IGJvZHk7 CisJfSAqY21kOworCisJaWYgKCFsaXN0X2VtcHR5KCZzby0+Y290YWJsZV9oZWFkKSB8fCAhc28t PmNvbW1pdHRlZCApCisJCXJldHVybiAwOworCisJY21kID0gVk1XX0ZJRk9fUkVTRVJWRV9EWChk ZXZfcHJpdiwgc2l6ZW9mKCpjbWQpLCBzby0+Y3R4LT5pZCk7CisJaWYgKCFjbWQpCisJCXJldHVy biAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuaWQgPSBTVkdBXzNEX0NNRF9EWF9CSU5EX1NUUkVB TU9VVFBVVDsKKwljbWQtPmhlYWRlci5zaXplID0gc2l6ZW9mKGNtZC0+Ym9keSk7CisJY21kLT5i b2R5LnNvaWQgPSBzby0+aWQ7CisJY21kLT5ib2R5Lm1vYmlkID0gcmVzLT5iYWNrdXAtPmJhc2Uu bWVtLnN0YXJ0OworCWNtZC0+Ym9keS5vZmZzZXRJbkJ5dGVzID0gcmVzLT5iYWNrdXBfb2Zmc2V0 OworCWNtZC0+Ym9keS5zaXplSW5CeXRlcyA9IHNvLT5zaXplOworCXZtd19maWZvX2NvbW1pdChk ZXZfcHJpdiwgc2l6ZW9mKCpjbWQpKTsKKworCXZtd19jb3RhYmxlX2FkZF9yZXNvdXJjZShzby0+ Y290YWJsZSwgJnNvLT5jb3RhYmxlX2hlYWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgdm13X2R4X3N0cmVhbW91dHB1dF9jcmVhdGUoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKQor eworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSByZXMtPmRldl9wcml2OworCXN0cnVj dCB2bXdfZHhfc3RyZWFtb3V0cHV0ICpzbyA9IHZtd19yZXNfdG9fZHhfc3RyZWFtb3V0cHV0KHJl cyk7CisJaW50IHJldCA9IDA7CisKKwlXQVJOX09OX09OQ0UoIXNvLT5jb21taXR0ZWQpOworCisJ aWYgKHZtd19yZXNvdXJjZV9tb2JfYXR0YWNoZWQocmVzKSkgeworCQltdXRleF9sb2NrKCZkZXZf cHJpdi0+YmluZGluZ19tdXRleCk7CisJCXJldCA9IHZtd19keF9zdHJlYW1vdXRwdXRfdW5zY3J1 YihyZXMpOworCQltdXRleF91bmxvY2soJmRldl9wcml2LT5iaW5kaW5nX211dGV4KTsKKwl9CisK KwlyZXMtPmlkID0gc28tPmlkOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2bXdf ZHhfc3RyZWFtb3V0cHV0X2JpbmQoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzLAorCQkJCSAgICBz dHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciAqdmFsX2J1ZikKK3sKKwlzdHJ1Y3Qgdm13X3ByaXZh dGUgKmRldl9wcml2ID0gcmVzLT5kZXZfcHJpdjsKKwlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3Qg KmJvID0gdmFsX2J1Zi0+Ym87CisJaW50IHJldDsKKworCWlmIChXQVJOX09OKGJvLT5tZW0ubWVt X3R5cGUgIT0gVk1XX1BMX01PQikpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygm ZGV2X3ByaXYtPmJpbmRpbmdfbXV0ZXgpOworCXJldCA9IHZtd19keF9zdHJlYW1vdXRwdXRfdW5z Y3J1YihyZXMpOworCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmJpbmRpbmdfbXV0ZXgpOworCisJ cmV0dXJuIHJldDsKK30KKworLyoqCisgKiB2bXdfZHhfc3RyZWFtb3V0cHV0X3NjcnViIC0gVW5i aW5kIHRoZSBNT0IgZnJvbSBzdHJlYW1vdXRwdXQuCisgKiBAcmVzOiBUaGUgc3RyZWFtb3V0cHV0 IHJlc291cmNlLgorICoKKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBj b2RlIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgdm13X2R4X3N0cmVhbW91dHB1dF9zY3J1 YihzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpCit7CisJc3RydWN0IHZtd19wcml2YXRlICpkZXZf cHJpdiA9IHJlcy0+ZGV2X3ByaXY7CisJc3RydWN0IHZtd19keF9zdHJlYW1vdXRwdXQgKnNvID0g dm13X3Jlc190b19keF9zdHJlYW1vdXRwdXQocmVzKTsKKwlzdHJ1Y3QgeworCQlTVkdBM2RDbWRI ZWFkZXIgaGVhZGVyOworCQlTVkdBM2RDbWREWEJpbmRTdHJlYW1PdXRwdXQgYm9keTsKKwl9ICpj bWQ7CisKKwlpZiAobGlzdF9lbXB0eSgmc28tPmNvdGFibGVfaGVhZCkpCisJCXJldHVybiAwOwor CisJV0FSTl9PTl9PTkNFKCFzby0+Y29tbWl0dGVkKTsKKworCWNtZCA9IFZNV19GSUZPX1JFU0VS VkVfRFgoZGV2X3ByaXYsIHNpemVvZigqY21kKSwgc28tPmN0eC0+aWQpOworCWlmICghY21kKQor CQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmlkID0gU1ZHQV8zRF9DTURfRFhfQklO RF9TVFJFQU1PVVRQVVQ7CisJY21kLT5oZWFkZXIuc2l6ZSA9IHNpemVvZihjbWQtPmJvZHkpOwor CWNtZC0+Ym9keS5zb2lkID0gcmVzLT5pZDsKKwljbWQtPmJvZHkubW9iaWQgPSBTVkdBM0RfSU5W QUxJRF9JRDsKKwljbWQtPmJvZHkub2Zmc2V0SW5CeXRlcyA9IDA7CisJY21kLT5ib2R5LnNpemVJ bkJ5dGVzID0gc28tPnNpemU7CisJdm13X2ZpZm9fY29tbWl0KGRldl9wcml2LCBzaXplb2YoKmNt ZCkpOworCisJcmVzLT5pZCA9IC0xOworCWxpc3RfZGVsX2luaXQoJnNvLT5jb3RhYmxlX2hlYWQp OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdm13X2R4X3N0cmVhbW91dHB1dF91bmJp bmQoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzLCBib29sIHJlYWRiYWNrLAorCQkJCSAgICAgIHN0 cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVyICp2YWxfYnVmKQoreworCXN0cnVjdCB2bXdfcHJpdmF0 ZSAqZGV2X3ByaXYgPSByZXMtPmRldl9wcml2OworCXN0cnVjdCB2bXdfZmVuY2Vfb2JqICpmZW5j ZTsKKwlpbnQgcmV0OworCisJaWYgKFdBUk5fT04ocmVzLT5iYWNrdXAtPmJhc2UubWVtLm1lbV90 eXBlICE9IFZNV19QTF9NT0IpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmRl dl9wcml2LT5iaW5kaW5nX211dGV4KTsKKwlyZXQgPSB2bXdfZHhfc3RyZWFtb3V0cHV0X3NjcnVi KHJlcyk7CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+YmluZGluZ19tdXRleCk7CisKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJKHZvaWQpIHZtd19leGVjYnVmX2ZlbmNlX2NvbW1hbmRz KE5VTEwsIGRldl9wcml2LCAmZmVuY2UsIE5VTEwpOworCXZtd19ib19mZW5jZV9zaW5nbGUodmFs X2J1Zi0+Ym8sIGZlbmNlKTsKKworCWlmIChmZW5jZSAhPSBOVUxMKQorCQl2bXdfZmVuY2Vfb2Jq X3VucmVmZXJlbmNlKCZmZW5jZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdm13 X2R4X3N0cmVhbW91dHB1dF9jb21taXRfbm90aWZ5KHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywK KwkJCQkJICAgZW51bSB2bXdfY21kYnVmX3Jlc19zdGF0ZSBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgdm13 X3ByaXZhdGUgKmRldl9wcml2ID0gcmVzLT5kZXZfcHJpdjsKKwlzdHJ1Y3Qgdm13X2R4X3N0cmVh bW91dHB1dCAqc28gPSB2bXdfcmVzX3RvX2R4X3N0cmVhbW91dHB1dChyZXMpOworCisJaWYgKHN0 YXRlID09IFZNV19DTURCVUZfUkVTX0FERCkgeworCQltdXRleF9sb2NrKCZkZXZfcHJpdi0+Ymlu ZGluZ19tdXRleCk7CisJCXZtd19jb3RhYmxlX2FkZF9yZXNvdXJjZShzby0+Y290YWJsZSwgJnNv LT5jb3RhYmxlX2hlYWQpOworCQlzby0+Y29tbWl0dGVkID0gdHJ1ZTsKKwkJcmVzLT5pZCA9IHNv LT5pZDsKKwkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+YmluZGluZ19tdXRleCk7CisJfSBlbHNl IHsKKwkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmJpbmRpbmdfbXV0ZXgpOworCQlsaXN0X2RlbF9p bml0KCZzby0+Y290YWJsZV9oZWFkKTsKKwkJc28tPmNvbW1pdHRlZCA9IGZhbHNlOworCQlyZXMt PmlkID0gLTE7CisJCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmJpbmRpbmdfbXV0ZXgpOworCX0K K30KKworLyoqCisgKiB2bXdfZHhfc3RyZWFtb3V0cHV0X2xvb2t1cCAtIERvIGEgc3RyZWFtb3V0 cHV0IHJlc291cmNlIGxvb2t1cCBieSB1c2VyIGtleS4KKyAqIEBtYW46IENvbW1hbmQgYnVmZmVy IG1hbmFnZWQgcmVzb3VyY2UgbWFuYWdlciBmb3IgY3VycmVudCBjb250ZXh0LgorICogQHVzZXJf a2V5OiBVc2VyLXNwYWNlIGlkZW50aWZpZXIgZm9yIGxvb2t1cC4KKyAqCisgKiBSZXR1cm46IFZh bGlkIHJlZmNvdW50ZWQgdm13X3Jlc291cmNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24g ZmFpbHVyZS4KKyAqLworc3RydWN0IHZtd19yZXNvdXJjZSAqCit2bXdfZHhfc3RyZWFtb3V0cHV0 X2xvb2t1cChzdHJ1Y3Qgdm13X2NtZGJ1Zl9yZXNfbWFuYWdlciAqbWFuLAorCQkJICAgdTMyIHVz ZXJfa2V5KQoreworCXJldHVybiB2bXdfY21kYnVmX3Jlc19sb29rdXAobWFuLCB2bXdfY21kYnVm X3Jlc19zdHJlYW1vdXRwdXQsCisJCQkJICAgICB1c2VyX2tleSk7Cit9CisKK3N0YXRpYyB2b2lk IHZtd19keF9zdHJlYW1vdXRwdXRfcmVzX2ZyZWUoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKQor eworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSByZXMtPmRldl9wcml2OworCXN0cnVj dCB2bXdfZHhfc3RyZWFtb3V0cHV0ICpzbyA9IHZtd19yZXNfdG9fZHhfc3RyZWFtb3V0cHV0KHJl cyk7CisKKwl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJnNvLT5jb3RhYmxlKTsKKwlrZnJlZShz byk7CisJdHRtX21lbV9nbG9iYWxfZnJlZSh2bXdfbWVtX2dsb2IoZGV2X3ByaXYpLCB2bXdfc3Ry ZWFtb3V0cHV0X3NpemUpOworfQorCitzdGF0aWMgdm9pZCB2bXdfZHhfc3RyZWFtb3V0cHV0X2h3 X2Rlc3Ryb3koc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKQoreworCS8qIERlc3Ryb3llZCBieSB1 c2VyLXNwYWNlIGNtZCBidWYgb3IgYXMgcGFydCBvZiBjb250ZXh0IHRha2Vkb3duLiAqLworCXJl cy0+aWQgPSAtMTsKK30KKworLyoqCisgKiB2bXdfZHhfc3RyZWFtb3V0cHV0X2FkZCAtIEFkZCBh IHN0cmVhbW91dHB1dCBhcyBhIGNtZCBidWYgbWFuYWdlZCByZXNvdXJjZS4KKyAqIEBtYW46IENv bW1hbmQgYnVmZmVyIG1hbmFnZWQgcmVzb3VyY2UgbWFuYWdlciBmb3IgY3VycmVudCBjb250ZXh0 LgorICogQGN0eDogUG9pbnRlciB0byBjb250ZXh0IHJlc291cmNlLgorICogQHVzZXJfa2V5OiBU aGUgaWRlbnRpZmllciBmb3IgdGhpcyBzdHJlYW1vdXRwdXQuCisgKiBAbGlzdDogVGhlIGxpc3Qg b2Ygc3RhZ2VkIGNvbW1hbmQgYnVmZmVyIG1hbmFnZWQgcmVzb3VyY2VzLgorICoKKyAqIFJldHVy bjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2lu dCB2bXdfZHhfc3RyZWFtb3V0cHV0X2FkZChzdHJ1Y3Qgdm13X2NtZGJ1Zl9yZXNfbWFuYWdlciAq bWFuLAorCQkJICAgIHN0cnVjdCB2bXdfcmVzb3VyY2UgKmN0eCwgdTMyIHVzZXJfa2V5LAorCQkJ ICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IHZtd19keF9zdHJlYW1vdXRw dXQgKnNvOworCXN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUg KmRldl9wcml2ID0gY3R4LT5kZXZfcHJpdjsKKwlzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggdHRt X29wdF9jdHggPSB7CisJCS5pbnRlcnJ1cHRpYmxlID0gdHJ1ZSwKKwkJLm5vX3dhaXRfZ3B1ID0g ZmFsc2UKKwl9OworCWludCByZXQ7CisKKwlpZiAoIXZtd19zdHJlYW1vdXRwdXRfc2l6ZSkKKwkJ dm13X3N0cmVhbW91dHB1dF9zaXplID0gdHRtX3JvdW5kX3BvdChzaXplb2YoKnNvKSk7CisKKwly ZXQgPSB0dG1fbWVtX2dsb2JhbF9hbGxvYyh2bXdfbWVtX2dsb2IoZGV2X3ByaXYpLAorCQkJCSAg IHZtd19zdHJlYW1vdXRwdXRfc2l6ZSwgJnR0bV9vcHRfY3R4KTsKKwlpZiAocmV0KSB7CisJCWlm IChyZXQgIT0gLUVSRVNUQVJUU1lTKQorCQkJRFJNX0VSUk9SKCJPdXQgb2YgZ3JhcGhpY3MgbWVt b3J5IGZvciBzdHJlYW1vdXQuXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlzbyA9IGttYWxs b2Moc2l6ZW9mKCpzbyksIEdGUF9LRVJORUwpOworCWlmICghc28pIHsKKwkJdHRtX21lbV9nbG9i YWxfZnJlZSh2bXdfbWVtX2dsb2IoZGV2X3ByaXYpLAorCQkJCSAgICB2bXdfc3RyZWFtb3V0cHV0 X3NpemUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXMgPSAmc28tPnJlczsKKwlzby0+ Y3R4ID0gY3R4OworCXNvLT5jb3RhYmxlID0gdm13X3Jlc291cmNlX3JlZmVyZW5jZQorCQkodm13 X2NvbnRleHRfY290YWJsZShjdHgsIFNWR0FfQ09UQUJMRV9TVFJFQU1PVVRQVVQpKTsKKwlzby0+ aWQgPSB1c2VyX2tleTsKKwlzby0+Y29tbWl0dGVkID0gZmFsc2U7CisJSU5JVF9MSVNUX0hFQUQo JnNvLT5jb3RhYmxlX2hlYWQpOworCXJldCA9IHZtd19yZXNvdXJjZV9pbml0KGRldl9wcml2LCBy ZXMsIHRydWUsCisJCQkJdm13X2R4X3N0cmVhbW91dHB1dF9yZXNfZnJlZSwKKwkJCQkmdm13X2R4 X3N0cmVhbW91dHB1dF9mdW5jKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9yZXNvdXJjZV9pbml0 OworCisJcmV0ID0gdm13X2NtZGJ1Zl9yZXNfYWRkKG1hbiwgdm13X2NtZGJ1Zl9yZXNfc3RyZWFt b3V0cHV0LCB1c2VyX2tleSwKKwkJCQkgcmVzLCBsaXN0KTsKKwlpZiAocmV0KQorCQlnb3RvIG91 dF9yZXNvdXJjZV9pbml0OworCisJcmVzLT5pZCA9IHNvLT5pZDsKKwlyZXMtPmh3X2Rlc3Ryb3kg PSB2bXdfZHhfc3RyZWFtb3V0cHV0X2h3X2Rlc3Ryb3k7CisKK291dF9yZXNvdXJjZV9pbml0Ogor CXZtd19yZXNvdXJjZV91bnJlZmVyZW5jZSgmcmVzKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8q KgorICogdm13X2R4X3N0cmVhbW91dHB1dF9zZXRfc2l6ZSAtIFNldHMgc3RyZWFtb3V0cHV0IG1v YiBzaXplIGluIHJlcyBzdHJ1Y3QuCisgKiBAcmVzOiBUaGUgc3RyZWFtb3V0cHV0IHJlcyBmb3Ig d2hpY2ggbmVlZCB0byBzZXQgc2l6ZS4KKyAqIEBzaXplOiBUaGUgc2l6ZSBwcm92aWRlZCBieSB1 c2VyLXNwYWNlIHRvIHNldC4KKyAqLwordm9pZCB2bXdfZHhfc3RyZWFtb3V0cHV0X3NldF9zaXpl KHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywgdTMyIHNpemUpCit7CisJc3RydWN0IHZtd19keF9z dHJlYW1vdXRwdXQgKnNvID0gdm13X3Jlc190b19keF9zdHJlYW1vdXRwdXQocmVzKTsKKworCXNv LT5zaXplID0gc2l6ZTsKK30KKworLyoqCisgKiB2bXdfZHhfc3RyZWFtb3V0cHV0X3JlbW92ZSAt IFN0YWdlIHN0cmVhbW91dHB1dCBmb3IgcmVtb3ZhbC4KKyAqIEBtYW46IENvbW1hbmQgYnVmZmVy IG1hbmFnZWQgcmVzb3VyY2UgbWFuYWdlciBmb3IgY3VycmVudCBjb250ZXh0LgorICogQHVzZXJf a2V5OiBUaGUgaWRlbnRpZmllciBmb3IgdGhpcyBzdHJlYW1vdXRwdXQuCisgKiBAbGlzdDogVGhl IGxpc3Qgb2Ygc3RhZ2VkIGNvbW1hbmQgYnVmZmVyIG1hbmFnZWQgcmVzb3VyY2VzLgorICoKKyAq IFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisg Ki8KK2ludCB2bXdfZHhfc3RyZWFtb3V0cHV0X3JlbW92ZShzdHJ1Y3Qgdm13X2NtZGJ1Zl9yZXNf bWFuYWdlciAqbWFuLAorCQkJICAgICAgIHUzMiB1c2VyX2tleSwKKwkJCSAgICAgICBzdHJ1Y3Qg bGlzdF9oZWFkICpsaXN0KQoreworCXN0cnVjdCB2bXdfcmVzb3VyY2UgKnI7CisKKwlyZXR1cm4g dm13X2NtZGJ1Zl9yZXNfcmVtb3ZlKG1hbiwgdm13X2NtZGJ1Zl9yZXNfc3RyZWFtb3V0cHV0LAor CQkJCSAgICAgKHUzMil1c2VyX2tleSwgbGlzdCwgJnIpOworfQorCisvKioKKyAqIHZtd19keF9z dHJlYW1vdXRwdXRfY290YWJsZV9saXN0X3NjcnViIC0gY290YWJsZSB1bmJpbmRfZnVuYyBjYWxs YmFjay4KKyAqIEBkZXZfcHJpdjogRGV2aWNlIHByaXZhdGUuCisgKiBAbGlzdDogVGhlIGxpc3Qg b2YgY290YWJsZSByZXNvdXJjZXMuCisgKiBAcmVhZGJhY2s6IFdoZXRoZXIgdGhlIGNhbGwgd2Fz IHBhcnQgb2YgYSByZWFkYmFjayB1bmJpbmQuCisgKi8KK3ZvaWQgdm13X2R4X3N0cmVhbW91dHB1 dF9jb3RhYmxlX2xpc3Rfc2NydWIoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkJ ICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCQkJCSAgICBib29sIHJlYWRiYWNrKQorewor CXN0cnVjdCB2bXdfZHhfc3RyZWFtb3V0cHV0ICplbnRyeSwgKm5leHQ7CisKKwlsb2NrZGVwX2Fz c2VydF9oZWxkX29uY2UoJmRldl9wcml2LT5iaW5kaW5nX211dGV4KTsKKworCWxpc3RfZm9yX2Vh Y2hfZW50cnlfc2FmZShlbnRyeSwgbmV4dCwgbGlzdCwgY290YWJsZV9oZWFkKSB7CisJCVdBUk5f T04odm13X2R4X3N0cmVhbW91dHB1dF9zY3J1YigmZW50cnktPnJlcykpOworCQlpZiAoIXJlYWRi YWNrKQorCQkJZW50cnktPmNvbW1pdHRlZCA9ZmFsc2U7CisJfQorfQotLSAKMi4xNy4xCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFp bGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK