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 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 118C1C87FCB for ; Fri, 1 Aug 2025 14:39:55 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uhqnZ-0007Kt-U4; Fri, 01 Aug 2025 10:31:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uhqmp-0004gD-Vw for grub-devel@gnu.org; Fri, 01 Aug 2025 10:31:19 -0400 Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uhqmk-0003rN-Hw for grub-devel@gnu.org; Fri, 01 Aug 2025 10:31:07 -0400 Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-af910372ab3so447077766b.1 for ; Fri, 01 Aug 2025 07:31:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754058661; x=1754663461; darn=gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=vUCcUHjzQIx8OB79L/uyDnegSvgz5X0AwSyCyv8OFWM=; b=aeb8EJrdhZuA72y9jq8wpxQyfNcqKSVy8m/tTeZgy2lgRI7UnZC6smKaaPu+waHLIa +ec8VoCDmHu1ZvXyzfK0bBBZBmg7AncuX4hXXa4o3Rds0UyY0ejAerHPXp19nLn9Rit+ DQjCt8Psnh4l5PVsN2f6DjxEYbECGMJig1iwHsVPifc9AyHZXUplIeaiSOIeKfwblye7 +Pr/sPUwU8JdxqZAiWqDBm89TCAt9B0/pGttGwNwy0y8bR9ML5wKw53Ro/6cDn+CDDMS 8v2h55rf1T+zbHESMMK4dYniSTtJPpvYqmZVfJchEGRaQmRwJjTemBvWce8v8khaFnfo impw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754058661; x=1754663461; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vUCcUHjzQIx8OB79L/uyDnegSvgz5X0AwSyCyv8OFWM=; b=Xxf8uRGUFyB2JsyGQkb5+oCXMxbEmNs8knyK2lCdcBewJZbWe0pCxGZ1MLGIgRF+ei YbTJj6kIaaYpd+vQIIsnyiMRKfxD1iiyZJmN+0WAaft712QKE77ybACA5YCogxJLz8M0 4eYz7d49D3ydKGLUeKm7mB2U1Y5VzazfXjOIMOOtkLVrBgaWoeDkhsqxrb067ObrrT7K 2rt9p6ppsSU1+bb0XsXPwG+9k8i4CnK9A8KIc4qqaq8xO/Z8Coxp5P8Hh7KToc5Uzt22 /lnJrO44NpXV1kjQTEo641g082LViUQSVGT/zQXFP67e4KGYjltUzrHUdnCozZ1BRNVa RCvg== X-Gm-Message-State: AOJu0YzjC18lZJJ/fK36246yMgcAe7bcxpRRhVnpV+3Ck1aa0RMXszZZ MdrOHA4z+uaCXq98TWmgFv4y29Z1OXh2Qd272TKgfPD/Ivpu4nT8zvP2Kycl8yvv910= X-Gm-Gg: ASbGncszQ7arpjSchino128jKa+kkeCyH80qjSx5hXUh21h10fXdb8UWvq8Om65wYSa ciDtWvkryUdo0ODA31REg66XgHaK4tTlpenOWOrCo7WOQfsNhzN5Wmhy4OgUL69Vyy7D5lJlBhL ajUUfpeNPznyXQRjCJmFATRVEd/tDs6B8vd3KAI8o9dm09SdtmPo/41xFGHAfOcjcvvg331BX4A paEpyOAzpvxuM/F6B8hFL+wAMIuihrNoGtIIwM5SDV4tRRPYPF6X2h8WOfsEVNuRuZTlKFnHlXb ueLg3B0t1QTBa+S01OIrB6ZAEzNTroEtPjSj82DbUKGhpEqEmQagv47OFpryxjCCVkVRgGFjKRS u1oUMeN7dYK15CdpsjRknkVODlAFF4IA4oUqOW5yskh8= X-Google-Smtp-Source: AGHT+IGoGLmO++AsNBbQ3gp47IeJnXsVM4D7cbh+JQ6XED1K4MeOpTrJjSS31TM1iGMcKe/kOOO+2w== X-Received: by 2002:a17:906:9fc5:b0:ae9:cc51:40d6 with SMTP id a640c23a62f3a-af91bf21394mr726477466b.28.1754058659649; Fri, 01 Aug 2025 07:30:59 -0700 (PDT) Received: from localhost (83-228-105-85.ip.btc-net.bg. [83.228.105.85]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-af91a0a3149sm294889266b.38.2025.08.01.07.30.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Aug 2025 07:30:59 -0700 (PDT) From: Vladimir Serbinenko To: grub-devel@gnu.org Cc: Vladimir Serbinenko Subject: [PATCH 2/2] zfs: Support datto encryption Date: Fri, 1 Aug 2025 14:30:40 +0000 Message-ID: <20250801143052.251913-3-phcoder@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250801143052.251913-1-phcoder@gmail.com> References: <20250801143052.251913-1-phcoder@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::62b; envelope-from=phcoder@gmail.com; helo=mail-ej1-x62b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: The development of GNU GRUB Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org Sender: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org U2lnbmVkLW9mZi1ieTogVmxhZGltaXIgU2VyYmluZW5rbyA8cGhjb2RlckBnbWFpbC5jb20+Ci0t LQogZ3J1Yi1jb3JlL2ZzL3pmcy96ZnMuYyAgICAgIHwgNTAyICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLS0tLQogZ3J1Yi1jb3JlL2ZzL3pmcy96ZnNjcnlwdC5jIHwgMzM1ICsrKysr KysrKysrKysrKysrKysrKy0tLQogaW5jbHVkZS9ncnViL3pmcy96ZnMuaCAgICAgIHwgIDU0ICsr Ky0KIDMgZmlsZXMgY2hhbmdlZCwgNzkzIGluc2VydGlvbnMoKyksIDk4IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL2dydWItY29yZS9mcy96ZnMvemZzLmMgYi9ncnViLWNvcmUvZnMvemZzL3pm cy5jCmluZGV4IGI4OGEyYjAzMi4uZGExNjYxNjgwIDEwMDY0NAotLS0gYS9ncnViLWNvcmUvZnMv emZzL3pmcy5jCisrKyBiL2dydWItY29yZS9mcy96ZnMvemZzLmMKQEAgLTIyNyw2ICsyMjcsMTAg QEAgc3RydWN0IHN1YnZvbHVtZQogICAgIGdydWJfdWludDY0X3QgdHhnOwogICAgIGdydWJfdWlu dDY0X3QgYWxnbzsKICAgfSAqa2V5cmluZzsKKworICBzdHJ1Y3QgZ3J1Yl96ZnNfZGF0dG9fa2V5 IGtleV9kYXR0bzsKKworICBpbnQgaXNfZGF0dG9fZW5jcnlwdGVkOwogfTsKIAogc3RydWN0IGdy dWJfemZzX2RhdGEKQEAgLTI2NCwxNiArMjY4LDE5IEBAIHN0cnVjdCBncnViX3pmc19kaXJfY3R4 CiAgIHN0cnVjdCBncnViX3pmc19kYXRhICpkYXRhOwogfTsKIAotZ3J1Yl9lcnJfdCAoKmdydWJf emZzX2RlY3J5cHQpIChncnViX2NyeXB0b19jaXBoZXJfaGFuZGxlX3QgY2lwaGVyLAotCQkJCWdy dWJfdWludDY0X3QgYWxnbywKLQkJCQljb25zdCB2b2lkICpub25jZSwKLQkJCQljaGFyICpidWYs IGdydWJfc2l6ZV90IHNpemUsCi0JCQkJY29uc3QgZ3J1Yl91aW50MzJfdCAqZXhwZWN0ZWRfbWFj LAotCQkJCWdydWJfemZzX2VuZGlhbl90IGVuZGlhbikgPSBOVUxMOwotZ3J1Yl9jcnlwdG9fY2lw aGVyX2hhbmRsZV90ICgqZ3J1Yl96ZnNfbG9hZF9rZXkpIChjb25zdCBzdHJ1Y3QgZ3J1Yl96ZnNf a2V5ICprZXksCi0JCQkJCQkgIGdydWJfc2l6ZV90IGtleXNpemUsCi0JCQkJCQkgIGdydWJfdWlu dDY0X3Qgc2FsdCwKLQkJCQkJCSAgZ3J1Yl91aW50NjRfdCBhbGdvKSA9IE5VTEw7CitzdHJ1Y3Qg Z3J1Yl96ZnNfZGVjcnlwdG9yICpncnViX3pmc19kZWNyeXB0ID0gTlVMTDsKKworc3RydWN0IGdy dWJfemZzX2NyeXB0X2RhdHRvX2RhdGEKK3sKKyAgZ3J1Yl91aW50OF90ICppdjsKKyAgZ3J1Yl9z aXplX3QgaXZsZW47CisgIGdydWJfdWludDhfdCAqbWFjOworICBncnViX3NpemVfdCBtYWNsZW47 CisgIGdydWJfdWludDhfdCAqbWFzdGVyOworICBncnViX3NpemVfdCBtYXN0ZXJsZW47CisgIGdy dWJfdWludDhfdCAqaG1hYzsKKyAgZ3J1Yl9zaXplX3QgaG1hY2xlbjsKK307CiAvKgogICogTGlz dCBvZiBwb29sIGZlYXR1cmVzIHRoYXQgdGhlIGdydWIgaW1wbGVtZW50YXRpb24gb2YgWkZTIHN1 cHBvcnRzIGZvcgogICogcmVhZC4gTm90ZSB0aGF0IGZlYXR1cmVzIHRoYXQgYXJlIG9ubHkgcmVx dWlyZWQgZm9yIHdyaXRlIGRvIG5vdCBuZWVkCkBAIC0yODksNiArMjk2LDcgQEAgc3RhdGljIGNv bnN0IGNoYXIgKnNwYV9mZWF0dXJlX25hbWVzW10gPSB7CiAgICJjb20ua2xhcmFzeXN0ZW1zOnZk ZXZfemFwc192MiIsCiAgICJjb20uZGVscGhpeDpoZWFkX2VycmxvZyIsCiAgICJvcmcuZnJlZWJz ZDp6c3RkX2NvbXByZXNzIiwKKyAgImNvbS5kYXR0bzplbmNyeXB0aW9uIiwKICAgTlVMTAogfTsK IApAQCAtNDAwLDYgKzQwOCw0NyBAQCBzdGF0aWMgZGVjb21wX2VudHJ5X3QgZGVjb21wX3RhYmxl W1pJT19DT01QUkVTU19GVU5DVElPTlNdID0gewogc3RhdGljIGdydWJfZXJyX3QgemlvX3JlYWRf ZGF0YSAoY29uc3QgYmxrcHRyX3QgKiBicCwKIAkJCQkgdm9pZCAqYnVmLCBzdHJ1Y3QgZ3J1Yl96 ZnNfZGF0YSAqZGF0YSk7CiAKK3N0YXRpYyBpbnQKK2ZpbGxfY3J5cHRfZGF0dG9fZGF0YSAoY29u c3Qgdm9pZCAqbmFtZSwKKwkJICAgIGdydWJfc2l6ZV90IG5hbWVsZW4gX19hdHRyaWJ1dGVfXyAo KHVudXNlZCkpLAorCQkgICAgY29uc3Qgdm9pZCAqdmFsX2luLAorCQkgICAgZ3J1Yl9zaXplX3Qg bmVsZW0sCisJCSAgICBncnViX3NpemVfdCBlbGVtc2l6ZSwKKwkJICAgIHZvaWQgKmRhdGFfaW4p Cit7CisgIHN0cnVjdCBncnViX3pmc19jcnlwdF9kYXR0b19kYXRhICpkYXRhID0gZGF0YV9pbjsK KyAgaWYgKGdydWJfc3RyY21wKG5hbWUsICJEU0xfQ1JZUFRPX0lWIikgPT0gMCAmJiBlbGVtc2l6 ZSA9PSAxKQorICAgIHsKKyAgICAgIGRhdGEtPml2bGVuID0gbmVsZW07CisgICAgICBkYXRhLT5p diA9IGdydWJfbWFsbG9jKG5lbGVtKTsKKyAgICAgIGlmIChkYXRhLT5pdikKKwlncnViX21lbWNw eShkYXRhLT5pdiwgdmFsX2luLCBuZWxlbSk7CisgICAgfQorICBlbHNlIGlmIChncnViX3N0cmNt cChuYW1lLCAiRFNMX0NSWVBUT19NQUMiKSA9PSAwICYmIGVsZW1zaXplID09IDEpCisgICAgewor ICAgICAgZGF0YS0+bWFjbGVuID0gbmVsZW07CisgICAgICBkYXRhLT5tYWMgPSBncnViX21hbGxv YyhuZWxlbSk7CisgICAgICBpZiAoZGF0YS0+bWFjKQorCWdydWJfbWVtY3B5KGRhdGEtPm1hYywg dmFsX2luLCBuZWxlbSk7CisgICAgfQorICBlbHNlIGlmIChncnViX3N0cmNtcChuYW1lLCAiRFNM X0NSWVBUT19NQVNURVJfS0VZXzEiKSA9PSAwICYmIGVsZW1zaXplID09IDEpCisgICAgeworICAg ICAgZGF0YS0+bWFzdGVybGVuID0gbmVsZW07CisgICAgICBkYXRhLT5tYXN0ZXIgPSBncnViX21h bGxvYyhuZWxlbSk7CisgICAgICBpZiAoZGF0YS0+bWFzdGVyKQorCWdydWJfbWVtY3B5KGRhdGEt Pm1hc3RlciwgdmFsX2luLCBuZWxlbSk7CisgICAgfQorICBlbHNlIGlmIChncnViX3N0cmNtcChu YW1lLCAiRFNMX0NSWVBUT19ITUFDX0tFWV8xIikgPT0gMCAmJiBlbGVtc2l6ZSA9PSAxKQorICAg IHsKKyAgICAgIGRhdGEtPmhtYWNsZW4gPSBuZWxlbTsKKyAgICAgIGRhdGEtPmhtYWMgPSBncnVi X21hbGxvYyhuZWxlbSk7CisgICAgICBpZiAoZGF0YS0+aG1hYykKKwlncnViX21lbWNweShkYXRh LT5obWFjLCB2YWxfaW4sIG5lbGVtKTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKIC8qCiAg KiBPdXIgb3duIHZlcnNpb24gb2YgbG9nMigpLiAgU2FtZSB0aGluZyBhcyBoaWdoYml0KCktMS4K ICAqLwpAQCAtNjkwLDcgKzczOSw3IEBAIGdydWJfemZzX2J5dGVzd2FwX3R5cGUodm9pZCAqYnVm LCBncnViX3NpemVfdCBsZW4sIGdydWJfdWludDhfdCB0eXBlKQogc3RhdGljIGdydWJfZXJyX3QK IHppb19jaGVja3N1bV92ZXJpZnkgKHppb19ja3N1bV90IHpjLCBncnViX3VpbnQzMl90IGNoZWNr c3VtLAogCQkgICAgIGdydWJfemZzX2VuZGlhbl90IGVuZGlhbiwKLQkJICAgICBjaGFyICpidWYs IGdydWJfc2l6ZV90IHNpemUpCisJCSAgICAgY2hhciAqYnVmLCBncnViX3NpemVfdCBzaXplLCBp bnQgZGF0dG9fY3J5cHQpCiB7CiAgIHppb19lY2tfdCAqemVjID0gKHppb19lY2tfdCAqKSAoYnVm ICsgc2l6ZSkgLSAxOwogICB6aW9fY2hlY2tzdW1faW5mb190ICpjaSA9ICZ6aW9fY2hlY2tzdW1f dGFibGVbY2hlY2tzdW1dOwpAQCAtNzE1LDYgKzc2NCwxMiBAQCB6aW9fY2hlY2tzdW1fdmVyaWZ5 ICh6aW9fY2tzdW1fdCB6YywgZ3J1Yl91aW50MzJfdCBjaGVja3N1bSwKICAgICBjaS0+Y2lfZnVu YyAoYnVmLCBzaXplLCBlbmRpYW4sICZhY3R1YWxfY2tzdW0pOwogCiAgIGludCBja3N1bWxlbiA9 IGNoZWNrc3VtICE9IFpJT19DSEVDS1NVTV9TSEEyNTZfTUFDID8gMzIgOiAyMDsKKyAgaWYgKGRh dHRvX2NyeXB0KQorICAgIHsKKyAgICAgIGFjdHVhbF9ja3N1bS56Y193b3JkWzBdIF49IGFjdHVh bF9ja3N1bS56Y193b3JkWzJdOworICAgICAgYWN0dWFsX2Nrc3VtLnpjX3dvcmRbMV0gXj0gYWN0 dWFsX2Nrc3VtLnpjX3dvcmRbM107CisgICAgICBja3N1bWxlbiA9IDE2OworICAgIH0KIAogICBp ZiAoY2ktPmNpX2VjayAmJiAhR1JVQl9aRlNfSVNfTkFUSVZFX0JZVEVPUkRFUihlbmRpYW4pKQog ICAgIGdydWJfemZzX2J5dGVzd2FwX2NoZWNrc3VtKCZhY3R1YWxfY2tzdW0pOwpAQCAtNzk2LDcg Kzg1MSw3IEBAIHViZXJibG9ja192ZXJpZnkgKHViZXJibG9ja19waHlzX3QgKiB1YiwgZ3J1Yl91 aW50NjRfdCBvZmZzZXQsCiAKICAgemMuemNfd29yZFswXSA9IGdydWJfY3B1X3RvX3pmczY0IChv ZmZzZXQsIGVuZGlhbik7CiAgIGVyciA9IHppb19jaGVja3N1bV92ZXJpZnkgKHpjLCBaSU9fQ0hF Q0tTVU1fTEFCRUwsIGVuZGlhbiwKLQkJCSAgICAgKGNoYXIgKikgdWIsIHMpOworCQkJICAgICAo Y2hhciAqKSB1YiwgcywgMCk7CiAKICAgcmV0dXJuIGVycjsKIH0KQEAgLTEyNjksNyArMTMyNCw3 IEBAIGNoZWNrX3Bvb2xfbGFiZWwgKHN0cnVjdCBncnViX3pmc19kYXRhICpkYXRhLAogICAvKiBO b3cgY2hlY2sgdGhlIGludGVncml0eSBvZiB0aGUgdmRldl9waHlzX3Qgc3RydWN0dXJlIHRob3Vn aCBjaGVja3N1bS4gICovCiAgIFpJT19TRVRfQ0hFQ0tTVU0oJmVtcHR5Y2tzdW0sIGdydWJfY3B1 X3RvX3pmczY0KGRpc2tkZXNjLT52ZGV2X3BoeXNfc2VjdG9yIDw8IDksIGVuZGlhbiksIDAsIDAs IDApOwogICBlcnIgPSB6aW9fY2hlY2tzdW1fdmVyaWZ5IChlbXB0eWNrc3VtLCBaSU9fQ0hFQ0tT VU1fTEFCRUwsIGVuZGlhbiwKLQkJCSAgICAgbnZsaXN0LCBWREVWX1BIWVNfU0laRSk7CisJCQkg ICAgIG52bGlzdCwgVkRFVl9QSFlTX1NJWkUsIDApOwogICBpZiAoZXJyKSB7CiAgICAgZ3J1Yl9m cmVlIChudmxpc3QpOwogICAgIHJldHVybiBlcnI7CkBAIC0yMDE5LDcgKzIwNzQsNyBAQCB6aW9f cmVhZF9nYW5nIChjb25zdCBibGtwdHJfdCAqIGJwLCBjb25zdCBkdmFfdCAqIGR2YSwgdm9pZCAq YnVmLAogICBaSU9fU0VUX0NIRUNLU1VNICgmemMsIERWQV9HRVRfVkRFViAoZHZhKSwKIAkJICAg IERWQV9HRVRfT0ZGU0VUIChkdmEpLCBicC0+YmxrX2JpcnRoLCAwKTsKICAgZXJyID0gemlvX2No ZWNrc3VtX3ZlcmlmeSAoemMsIFpJT19DSEVDS1NVTV9HQU5HX0hFQURFUiwgQlBfR0VUX0JZVEVP UkRFUihicCksCi0JCQkgICAgIChjaGFyICopIHppb19nYiwgU1BBX0dBTkdCTE9DS1NJWkUpOwor CQkJICAgICAoY2hhciAqKSB6aW9fZ2IsIFNQQV9HQU5HQkxPQ0tTSVpFLCAwKTsKICAgaWYgKGVy cikKICAgICB7CiAgICAgICBncnViX2ZyZWUgKHppb19nYik7CkBAIC0yMTEzLDYgKzIxNjgsNTcg QEAgZGVjb2RlX2VtYmVkZGVkX2JwX2NvbXByZXNzZWQoY29uc3QgYmxrcHRyX3QgKmJwLCB2b2lk ICpidWYpCiAgIHJldHVybiBHUlVCX0VSUl9OT05FOwogfQogCitzdGF0aWMgaW50CitkYXR0b19p c19lbmNyeXB0ZWRfdHlwZShncnViX3VpbnQ4X3QgZG5fdHlwZSkKK3sKKyAgLyogTmV3IHN0cnVj dHJlZCB0eXBlcy4gICovCisgIGlmIChkbl90eXBlICYgMHg4MCkKKyAgICByZXR1cm4gISEoZG5f dHlwZSAmIDB4MjApOworICBzd2l0Y2goZG5fdHlwZSkgeworICBjYXNlIERNVV9PVF9OT05FIC4u LiBETVVfT1RfU1BBQ0VfTUFQOgorICBjYXNlIERNVV9PVF9PQkpTRVQgLi4uIERNVV9PVF9aTk9E RToKKyAgY2FzZSBETVVfT1RfTUFTVEVSX05PREU6CisgIGNhc2UgRE1VX09UX1pWT0xfUFJPUDoK KyAgY2FzZSBETVVfT1RfWkFQX09USEVSIC4uLiBETVVfT1RfRFNMX1BFUk1TOgorICBjYXNlIERN VV9PVF9GVUlEX1NJWkUgLi4uIERNVV9PVF9TQ1JVQl9RVUVVRToKKyAgY2FzZSBETVVfT1RfVVNF UlJFRlMgLi4uIERNVV9PVF9ERFRfU1RBVFM6CisgICAgcmV0dXJuIDA7CisgIGRlZmF1bHQ6Cisg ICAgcmV0dXJuIDE7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2FkZF9ibGtwdHJfdG9fYWFkIChj aGFyICphYWQsIGdydWJfc2l6ZV90ICphYWRfb2Zmc2V0LCBibGtwdHJfdCBicCwgZ3J1Yl96ZnNf ZW5kaWFuX3QgZW5kaWFuLCBpbnQgcHJlc3dhcHBlZCkKK3sKKyAgaWYgKCFwcmVzd2FwcGVkICYm ICFHUlVCX1pGU19JU19OQVRJVkVfQllURU9SREVSKGVuZGlhbikpCisgICAgZ3J1Yl96ZnNfYnl0 ZXN3YXBfYmxrcHRyKCZicCk7CisgIAorICBncnViX3VpbnQ2NF90IGJsa19wcm9wID0gQlBfSVNf SE9MRSgmYnApID8gMCA6IGJwLmJsa19wcm9wOworCisgIGlmIChCUF9HRVRfTEVWRUwoJmJwKSAh PSAwKSB7CisgICAgYmxrX3Byb3AgJj0gfjB4ODAwMDAwN2ZmZmZmMDAwMFVMTDsKKyAgfQorCisg IGJsa19wcm9wICY9IH4weDQwMDBmZjAwMDAwMDAwMDBVTEw7CisKKyAgZ3J1Yl9zZXRfdW5hbGln bmVkNjQoJmFhZFsqYWFkX29mZnNldF0sIGdydWJfY3B1X3RvX2xlNjQoYmxrX3Byb3ApKTsKKyAg KmFhZF9vZmZzZXQgKz0gODsKKworICBpZiAoIUdSVUJfWkZTX0lTX05BVElWRV9CWVRFT1JERVIo ZW5kaWFuKSkKKyAgICB7CisgICAgICBncnViX3NldF91bmFsaWduZWQ2NCgmYWFkWyphYWRfb2Zm c2V0XSwgZ3J1Yl9zd2FwX2J5dGVzNjQoYnAuYmxrX2Nrc3VtLnpjX3dvcmRbMl0pKTsKKyAgICAg IGdydWJfc2V0X3VuYWxpZ25lZDY0KCZhYWRbKmFhZF9vZmZzZXQrOF0sIGdydWJfc3dhcF9ieXRl czY0KGJwLmJsa19ja3N1bS56Y193b3JkWzNdKSk7CisgICAgfQorICBlbHNlCisgICAgICBncnVi X21lbWNweSgmYWFkWyphYWRfb2Zmc2V0XSwgJmJwLmJsa19ja3N1bS56Y193b3JkWzJdLCAxNik7 CisgICAgICAKKyAgKmFhZF9vZmZzZXQgKz0gMTY7CisKKyAgZ3J1Yl9tZW1zZXQoJmFhZFsqYWFk X29mZnNldF0sIDAsIDgpOworICAqYWFkX29mZnNldCArPSA4OworfQorCiAvKgogICogUmVhZCBp biBhIGJsb2NrIG9mIGRhdGEsIHZlcmlmeSBpdHMgY2hlY2tzdW0sIGRlY29tcHJlc3MgaWYgbmVl ZGVkLAogICogYW5kIHB1dCB0aGUgdW5jb21wcmVzc2VkIGRhdGEgaW4gYnVmLgpAQCAtMjEyMiwx NyArMjIyOCw0NCBAQCB6aW9fcmVhZCAoY29uc3QgYmxrcHRyX3QgKmJwLCB2b2lkICoqYnVmLAog CSAgZ3J1Yl9zaXplX3QgKnNpemUsIHN0cnVjdCBncnViX3pmc19kYXRhICpkYXRhKQogewogICBn cnViX3NpemVfdCBsc2l6ZSwgcHNpemU7Ci0gIHVuc2lnbmVkIGludCBjb21wLCBlbmNyeXB0ZWQ7 CisgIHVuc2lnbmVkIGludCBjb21wOwogICBjaGFyICpjb21wYnVmID0gTlVMTDsKICAgZ3J1Yl9l cnJfdCBlcnI7CiAgIHppb19ja3N1bV90IHpjID0gYnAtPmJsa19ja3N1bTsKICAgZ3J1Yl91aW50 MzJfdCBjaGVja3N1bTsKKyAgaW50IGRhdHRvX2VuY3J5cHRlZCA9IDAsIGRhdHRvX2F1dGhlbnRp Y2F0ZWQgPSAwLCBkYXR0b19kbm9kZV9lbmNyeXB0aW9uID0gMCwgb3JhY2xlX2VuY3J5cHRlZCA9 IDA7CiAKICAgKmJ1ZiA9IE5VTEw7CiAKICAgY2hlY2tzdW0gPSBCUF9HRVRfQ0hFQ0tTVU0oYnAp OwogICBjb21wID0gQlBfR0VUX0NPTVBSRVNTKGJwKTsKLSAgZW5jcnlwdGVkID0gQlBfR0VUX1BS T1BfQklUXzYxKGJwKTsKKyAgaWYgKEJQX0dFVF9QUk9QX0JJVF82MShicCkpCisgICAgeworICAg ICAgaWYgKGRhdGEtPnN1YnZvbC5pc19kYXR0b19lbmNyeXB0ZWQpCisJeworCSAgZ3J1Yl91aW50 OF90IHR5cGUgPSBCUF9HRVRfVFlQRShicCk7CisJICBpZiAoQlBfR0VUX0xFVkVMKGJwKSA+IDAp CisJICAgIGRhdHRvX2F1dGhlbnRpY2F0ZWQgPSAxOworCSAgZWxzZSBpZiAodHlwZSA9PSBETVVf T1RfRE5PREUpCisJICAgIHsKKwkgICAgICBkYXR0b19lbmNyeXB0ZWQgPSAxOworCSAgICAgIGRh dHRvX2F1dGhlbnRpY2F0ZWQgPSAwOworCSAgICAgIGRhdHRvX2Rub2RlX2VuY3J5cHRpb24gPSAx OworCSAgICB9CisJICBlbHNlIGlmICh0eXBlID09IERNVV9PVF9PQkpTRVQpCisJICAgIHsKKwkg ICAgICAvKiBPYmpzZXQgdXNlcyBpbm5lciBobWFjcyB0aGF0IHdlIGRvbid0IHN1cG9ydCB5ZXQu CisJCSBOb3JtYWwgY2hlY2tzdW0gaXMgdW5hZmZlY3RlZCAuICovCisJICAgIH0KKwkgIGVsc2UK KwkgICAgeworCSAgICAgIGRhdHRvX2VuY3J5cHRlZCA9IGRhdHRvX2lzX2VuY3J5cHRlZF90eXBl KHR5cGUpOworCSAgICAgIGRhdHRvX2F1dGhlbnRpY2F0ZWQgPSAhZGF0dG9fZW5jcnlwdGVkOwor CSAgICB9CisJfQorICAgICAgZWxzZQorCSAgb3JhY2xlX2VuY3J5cHRlZCA9IDE7CisgICAgfQog ICBpZiAoQlBfSVNfRU1CRURERUQoYnApKQogICAgIHsKICAgICAgIGlmIChCUEVfR0VUX0VUWVBF KGJwKSAhPSBCUF9FTUJFRERFRF9UWVBFX0RBVEEpCkBAIC0yMTg2LDEwICsyMzE5LDExIEBAIHpp b19yZWFkIChjb25zdCBibGtwdHJfdCAqYnAsIHZvaWQgKipidWYsCiAgICAgICByZXR1cm4gZXJy OwogICAgIH0KIAotICBpZiAoIUJQX0lTX0VNQkVEREVEKGJwKSkKKyAgaWYgKCFCUF9JU19FTUJF RERFRChicCkgJiYgIWRhdHRvX2VuY3J5cHRlZCkKICAgICB7CiAgICAgICBlcnIgPSB6aW9fY2hl Y2tzdW1fdmVyaWZ5ICh6YywgY2hlY2tzdW0sIEJQX0dFVF9CWVRFT1JERVIoYnApLAotCQkJICAg ICAgICAgY29tcGJ1ZiwgcHNpemUpOworCQkJICAgICAgICAgY29tcGJ1ZiwgcHNpemUsCisJCQkJ IGRhdHRvX2F1dGhlbnRpY2F0ZWQpOwogICAgICAgaWYgKGVycikKICAgICAgICAgewogICAgICAg ICAgIGdydWJfZHByaW50ZiAoInpmcyIsICJpbmNvcnJlY3QgY2hlY2tzdW1cbiIpOwpAQCAtMjE5 OSw0OCArMjMzMywxOTAgQEAgemlvX3JlYWQgKGNvbnN0IGJsa3B0cl90ICpicCwgdm9pZCAqKmJ1 ZiwKICAgICAgICAgfQogICAgIH0KIAotICBpZiAoZW5jcnlwdGVkKQorICBpZiAoIUJQX0lTX0VN QkVEREVEKGJwKSAmJiBkYXR0b19hdXRoZW50aWNhdGVkICYmIGRhdGEtPnN1YnZvbC5rZXlfZGF0 dG8uaG1hY19rZXkgJiYgQlBfR0VUX0xFVkVMKGJwKSA9PSAwKQogICAgIHsKLSAgICAgIGlmICgh Z3J1Yl96ZnNfZGVjcnlwdCkKLQllcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRlMsCi0J CQkgIE5fKCJtb2R1bGUgYCVzJyBpc24ndCBsb2FkZWQiKSwKLQkJCSAgInpmc2NyeXB0Iik7Ci0g ICAgICBlbHNlCisgICAgICBncnViX3VpbnQ2NF90IGhtYWNbOF07CisgICAgICBnY3J5X2Vycm9y X3QgZXJyX2djcnk7CisgICAgICBlcnJfZ2NyeSA9IGdydWJfY3J5cHRvX2htYWNfYnVmZmVyIChH UlVCX01EX1NIQTUxMiwKKwkJCQkJICBkYXRhLT5zdWJ2b2wua2V5X2RhdHRvLmhtYWNfa2V5LCA2 NCwKKwkJCQkJICBjb21wYnVmLCBwc2l6ZSwKKwkJCQkJICBobWFjKTsKKyAgICAgIGlmIChlcnJf Z2NyeSkKIAl7Ci0JICB1bnNpZ25lZCBpLCBiZXN0aSA9IDA7Ci0JICBncnViX3VpbnQ2NF90IGJl c3R2YWwgPSAwOwotCSAgZm9yIChpID0gMDsgaSA8IGRhdGEtPnN1YnZvbC5ua2V5czsgaSsrKQot CSAgICBpZiAoZGF0YS0+c3Vidm9sLmtleXJpbmdbaV0udHhnIDw9IGJwLT5ibGtfYmlydGgKLQkJ JiYgZGF0YS0+c3Vidm9sLmtleXJpbmdbaV0udHhnID4gYmVzdHZhbCkKLQkgICAgICB7Ci0JCWJl c3RpID0gaTsKLQkJYmVzdHZhbCA9IGRhdGEtPnN1YnZvbC5rZXlyaW5nW2ldLnR4ZzsKLQkgICAg ICB9Ci0JICBpZiAoYmVzdHZhbCA9PSAwKQorCSAgZ3J1Yl9mcmVlIChjb21wYnVmKTsKKyAgICAg ICAgICAqYnVmID0gTlVMTDsKKwkgIHJldHVybiBncnViX2NyeXB0b19nY3J5X2Vycm9yIChlcnJf Z2NyeSk7CisJfQorCisgICAgICBpZiAoIUdSVUJfWkZTX0lTX05BVElWRV9CWVRFT1JERVIoQlBf R0VUX0JZVEVPUkRFUihicCkpKQorCXsKKwkgIGdydWJfemZzX2J5dGVzd2FwX3U2NCgmaG1hY1sw XSk7CisJICBncnViX3pmc19ieXRlc3dhcF91NjQoJmhtYWNbMV0pOworCX0gICAgICAKKworICAg ICAgaWYgKGdydWJfY3J5cHRvX21lbWNtcCgmemMuemNfd29yZFsyXSwgaG1hYywgOCkgIT0gMCkK Kwl7CisJICBncnViX2ZyZWUgKGNvbXBidWYpOworICAgICAgICAgICpidWYgPSBOVUxMOworCSAg Z3J1Yl9kcHJpbnRmICgiemZzIiwgImFjdHVhbCBobWFjICIKKwkJCSIlMDE2bGx4ICUwMTZsbHgg JTAxNmxseCAlMDE2bGx4ICUwMTZsbHggJTAxNmxseCAlMDE2bGx4ICUwMTZsbHggXG4iLAorCQkJ KHVuc2lnbmVkIGxvbmcgbG9uZykgaG1hY1swXSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGht YWNbMV0sCisJCQkodW5zaWduZWQgbG9uZyBsb25nKSBobWFjWzJdLAorCQkJKHVuc2lnbmVkIGxv bmcgbG9uZykgaG1hY1szXSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGhtYWNbNF0sCisJCQko dW5zaWduZWQgbG9uZyBsb25nKSBobWFjWzVdLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgaG1h Y1s2XSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGhtYWNbN10pOworCSAgZ3J1Yl9kcHJpbnRm ICgiemZzIiwgImV4cGVjdGVkIGhtYWMgJTAxNmxseCAlMDE2bGx4ICUwMTZsbHggJTAxNmxseFxu IiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHpjLnpjX3dvcmRbMF0sCisJCQkodW5zaWduZWQg bG9uZyBsb25nKSB6Yy56Y193b3JkWzFdLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgemMuemNf d29yZFsyXSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHpjLnpjX3dvcmRbM10pOworCSAgcmV0 dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GUywgTl8oIkhNQUMgdmVyaWZpY2F0aW9uIGZh aWxlZCIpKTsKKwl9CisgICAgfQorCisgIGlmIChkYXR0b19kbm9kZV9lbmNyeXB0aW9uICYmICgh Z3J1Yl96ZnNfZGVjcnlwdCB8fCAhZGF0YS0+c3Vidm9sLmtleV9kYXR0by5tYXN0ZXJfa2V5KSkK KyAgICB7CisgICAgICBncnViX2RwcmludGYoInpmcyIsICJTa2lwcGluZyBkZWNyeXB0IG9mIGJv bnVzIGJlY2F1c2Ugb2YgbWlzc2luZyB6ZnNjcnlwdCBtb2R1bGUgb3Iga2V5XG4iKTsKKyAgICAg IGRhdHRvX2VuY3J5cHRlZCA9IDA7CisgICAgICBkYXR0b19kbm9kZV9lbmNyeXB0aW9uID0gMDsK KyAgICB9CisgIGlmICgob3JhY2xlX2VuY3J5cHRlZCB8fCBkYXR0b19lbmNyeXB0ZWQpICYmICFn cnViX3pmc19kZWNyeXB0KQorICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GUywK KwkJICAgICAgTl8oIm1vZHVsZSBgJXMnIGlzbid0IGxvYWRlZCIpLAorCQkgICAgICAiemZzY3J5 cHQiKTsKKyAgZWxzZSBpZiAoZGF0dG9fZW5jcnlwdGVkKQorICAgIHsKKyAgICAgIGdydWJfdWlu dDMyX3QgaXZbM107CisKKyAgICAgIGlmICghZGF0YS0+c3Vidm9sLmtleV9kYXR0by5tYXN0ZXJf a2V5KQorCXsKKwkgIGdydWJfZnJlZSAoY29tcGJ1Zik7CisJICAqYnVmID0gTlVMTDsKKwkgIGdy dWJfZHByaW50ZiAoInpmcyIsICJubyBrZXkgZm9yIHR4ZyAlIiBQUkl4R1JVQl9VSU5UNjRfVCAi XG4iLAorCQkJYnAtPmJsa19iaXJ0aCk7CisJICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJf QkFEX0ZTLCAibm8ga2V5IGZvdW5kIGluIGtleWNoYWluIik7CisJfQorCisgICAgICBncnViX3Nl dF91bmFsaWduZWQ2NChpdiwgZ3J1Yl9jcHVfdG9femZzNjQoKGJwKS0+YmxrX2R2YVsyXS5kdmFf d29yZFsxXSwgQlBfR0VUX0JZVEVPUkRFUihicCkpKTsKKyAgICAgIGl2WzJdID0gZ3J1Yl9jcHVf dG9femZzMzIoKGJwKS0+YmxrX2ZpbGwgPj4gMzIsIEJQX0dFVF9CWVRFT1JERVIoYnApKTsKKwor ICAgICAgaWYgKGRhdHRvX2Rub2RlX2VuY3J5cHRpb24pCisJeworCSAgZ3J1Yl9zaXplX3Qgb2Zm c2V0ID0gMCwgY3J5cHRfb2Zmc2V0ID0gMCwgYWFkX29mZnNldCA9IDA7CisJICBjaGFyICpjcnlw dCA9IGdydWJfbWFsbG9jKHBzaXplKSwgKmFhZCA9IGdydWJfbWFsbG9jKHBzaXplKTsKKwkgIGdy dWJfemZzX2VuZGlhbl90IGVuZGlhbiA9IEJQX0dFVF9CWVRFT1JERVIoYnApOworCSAgaWYgKCFj cnlwdCB8fCAhYWFkKQogCSAgICB7CiAJICAgICAgZ3J1Yl9mcmVlIChjb21wYnVmKTsKKwkgICAg ICBncnViX2ZyZWUgKGNyeXB0KTsKKwkgICAgICBncnViX2ZyZWUgKGFhZCk7CiAJICAgICAgKmJ1 ZiA9IE5VTEw7Ci0JICAgICAgZ3J1Yl9kcHJpbnRmICgiemZzIiwgIm5vIGtleSBmb3IgdHhnICUi IFBSSXhHUlVCX1VJTlQ2NF9UICJcbiIsCi0JCQkgICAgYnAtPmJsa19iaXJ0aCk7Ci0JICAgICAg cmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GUywgIm5vIGtleSBmb3VuZCBpbiBrZXlj aGFpbiIpOworCSAgICAgIHJldHVybiBncnViX2Vycm5vOwogCSAgICB9Ci0JICBncnViX2Rwcmlu dGYgKCJ6ZnMiLCAidXNpbmcga2V5ICV1ICglIiBQUkl4R1JVQl9VSU5UNjRfVAotCQkJIiwgJXAp IGZvciB0eGcgJSIgUFJJeEdSVUJfVUlOVDY0X1QgIlxuIiwKLQkJCWJlc3RpLCBkYXRhLT5zdWJ2 b2wua2V5cmluZ1tiZXN0aV0udHhnLAotCQkJZGF0YS0+c3Vidm9sLmtleXJpbmdbYmVzdGldLmNp cGhlciwKLQkJCWJwLT5ibGtfYmlydGgpOwotCSAgZXJyID0gZ3J1Yl96ZnNfZGVjcnlwdCAoZGF0 YS0+c3Vidm9sLmtleXJpbmdbYmVzdGldLmNpcGhlciwKLQkJCQkgIGRhdGEtPnN1YnZvbC5rZXly aW5nW2Jlc3RpXS5hbGdvLAotCQkJCSAgJihicCktPmJsa19kdmFbMl0sCi0JCQkJICBjb21wYnVm LCBwc2l6ZSwgemMuemNfbWFjLAotCQkJCSAgQlBfR0VUX0JZVEVPUkRFUihicCkpOworCSAgZm9y IChvZmZzZXQgPSAwOyBvZmZzZXQgKyBzaXplb2YgKGRub2RlX3BoeXNfdCkgPD0gcHNpemU7IG9m ZnNldCArPSBzaXplb2YoZG5vZGVfcGh5c190KSkKKwkgICAgeworCSAgICAgIGRub2RlX3BoeXNf dCAqZG5wID0gKGRub2RlX3BoeXNfdCAqKSAodm9pZCAqKSAoY29tcGJ1ZiArIG9mZnNldCk7CisJ ICAgICAgZG5vZGVfcGh5c190ICpkbm8gPSAoZG5vZGVfcGh5c190ICopIChhYWQgKyBhYWRfb2Zm c2V0KTsKKwkgICAgICBncnViX21lbWNweShhYWQgKyBhYWRfb2Zmc2V0LCBkbnAsIDY0KTsKKwkg ICAgICBkbm8tPmRuX3VzZWQgPSAwOworCSAgICAgIGRuby0+ZG5fZmxhZ3MgJj0gRE5PREVfRkxB R19TUElMTF9CTEtQVFI7CisJICAgICAgaW50IGhhc19zcGlsbCA9IGRucC0+ZG5fZmxhZ3MgJiBE Tk9ERV9GTEFHX1NQSUxMX0JMS1BUUjsKKwkgICAgICB1bnNpZ25lZCBpOworCisJICAgICAgYWFk X29mZnNldCArPSA2NDsKKworCSAgICAgIGZvciAoaSA9IDA7IGkgPCBkbnAtPmRuX25ibGtwdHI7 IGkrKykgeworCQlhZGRfYmxrcHRyX3RvX2FhZCAoYWFkLCAmYWFkX29mZnNldCwgZG5wLT5kbl9i bGtwdHJbaV0sIGVuZGlhbiwgMCk7CisJICAgICAgfQorCisJICAgICAgaWYgKGhhc19zcGlsbCkK KwkJYWRkX2Jsa3B0cl90b19hYWQgKGFhZCwgJmFhZF9vZmZzZXQsIGRucC0+ZG5fc3BpbGwsIGVu ZGlhbiwgMCk7CisKKwkgICAgICBjaGFyICpib251cyA9IEROX0JPTlVTKGRucCk7CisJICAgICAg Y2hhciAqYm9udXNtYXhwdHIgPSAoY2hhciAqKSAoZG5wICsgMSk7CisJICAgICAgaWYgKGhhc19z cGlsbCkKKwkJYm9udXNtYXhwdHIgLT0gc2l6ZW9mKGJsa3B0cl90KTsKKwkgICAgICBncnViX3Np emVfdCBib251c21heGxlbiA9IGJvbnVzbWF4cHRyIC0gYm9udXM7CisJICAgICAgaWYgKGRhdHRv X2lzX2VuY3J5cHRlZF90eXBlKGRucC0+ZG5fYm9udXN0eXBlKSkKKwkJeworCQkgIGdydWJfbWVt Y3B5KGNyeXB0ICsgY3J5cHRfb2Zmc2V0LCBib251cywgYm9udXNtYXhsZW4pOworCQkgIGNyeXB0 X29mZnNldCArPSBib251c21heGxlbjsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGdydWJf bWVtY3B5KGFhZCArIGFhZF9vZmZzZXQsIGJvbnVzLCBib251c21heGxlbik7CisJCSAgZ3J1Yl96 ZnNfYnl0ZXN3YXBfdHlwZSgoYWFkICsgYWFkX29mZnNldCksIGJvbnVzbWF4bGVuLCBkbnAtPmRu X2JvbnVzdHlwZSk7CisJCSAgYWFkX29mZnNldCArPSBib251c21heGxlbjsKKwkJfQorCSAgICB9 CisJICBlcnIgPSBncnViX3pmc19kZWNyeXB0LT5kZWNyeXB0X2RhdHRvICgmZGF0YS0+c3Vidm9s LmtleV9kYXR0bywKKwkJCQkJCSBpdiwgKGJwKS0+YmxrX2R2YVsyXS5kdmFfd29yZFswXSwKKwkJ CQkJCSBjcnlwdCwgY3J5cHRfb2Zmc2V0LCBhYWQsIGFhZF9vZmZzZXQsCisJCQkJCQkgJnpjLnpj X3dvcmRbMl0sCisJCQkJCQkgZW5kaWFuKTsKKwkgIGdydWJfc2l6ZV90IG91dF9vZmZzZXQgPSAw OworCSAgZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgKyBzaXplb2YgKGRub2RlX3BoeXNfdCkgPD0g cHNpemU7IG9mZnNldCArPSBzaXplb2YoZG5vZGVfcGh5c190KSkKKwkgICAgeworCSAgICAgIGRu b2RlX3BoeXNfdCAqZG5wID0gKGRub2RlX3BoeXNfdCAqKSAodm9pZCAqKSAoY29tcGJ1ZiArIG9m ZnNldCk7CisJICAgICAgaW50IGhhc19zcGlsbCA9IGRucC0+ZG5fZmxhZ3MgJiBETk9ERV9GTEFH X1NQSUxMX0JMS1BUUjsKKwkgICAgICBpZiAoIWRhdHRvX2lzX2VuY3J5cHRlZF90eXBlKGRucC0+ ZG5fYm9udXN0eXBlKSkKKwkJY29udGludWU7CisJICAgICAgY2hhciAqIGJvbnVzID0gRE5fQk9O VVMoZG5wKTsKKwkgICAgICBjaGFyICpib251c21heHB0ciA9IChjaGFyICopIChkbnAgKyAxKTsK KwkgICAgICBpZiAoaGFzX3NwaWxsKQorCQlib251c21heHB0ciAtPSBzaXplb2YoYmxrcHRyX3Qp OworCSAgICAgIGdydWJfc2l6ZV90IGJvbnVzbWF4bGVuID0gYm9udXNtYXhwdHIgLSBib251czsK KwkgICAgICBncnViX21lbWNweShib251cywgY3J5cHQgKyBvdXRfb2Zmc2V0LCBib251c21heGxl bik7CisJICAgICAgb3V0X29mZnNldCArPSBib251c21heGxlbjsKKwkgICAgfQorCiAJfQotICAg ICAgaWYgKGVycikKKyAgICAgIGVsc2UKKwllcnIgPSBncnViX3pmc19kZWNyeXB0LT5kZWNyeXB0 X2RhdHRvICgmZGF0YS0+c3Vidm9sLmtleV9kYXR0bywKKwkJCQkJICAgICAgIGl2LCAoYnApLT5i bGtfZHZhWzJdLmR2YV93b3JkWzBdLAorCQkJCQkgICAgICAgY29tcGJ1ZiwgcHNpemUsIE5VTEws IDAsCisJCQkJCSAgICAgICAmemMuemNfd29yZFsyXSwKKwkJCQkJICAgICAgIEJQX0dFVF9CWVRF T1JERVIoYnApKTsKKyAgICB9CisgIGVsc2UgaWYgKG9yYWNsZV9lbmNyeXB0ZWQpCisgICAgewor ICAgICAgdW5zaWduZWQgaSwgYmVzdGkgPSAwOworICAgICAgZ3J1Yl91aW50NjRfdCBiZXN0dmFs ID0gMDsKKyAgICAgIGdydWJfZHByaW50ZigiemZzIiwgIlN1YnZvbCBoYXMgJWQga2V5c1xuIiwg KGludCkgZGF0YS0+c3Vidm9sLm5rZXlzKTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhLT5z dWJ2b2wubmtleXM7IGkrKykKKwlpZiAoZGF0YS0+c3Vidm9sLmtleXJpbmdbaV0udHhnIDw9IGJw LT5ibGtfYmlydGgKKwkgICAgJiYgZGF0YS0+c3Vidm9sLmtleXJpbmdbaV0udHhnID4gYmVzdHZh bCkKKwkgIHsKKwkgICAgYmVzdGkgPSBpOworCSAgICBiZXN0dmFsID0gZGF0YS0+c3Vidm9sLmtl eXJpbmdbaV0udHhnOworCSAgfQorICAgICAgaWYgKGJlc3R2YWwgPT0gMCkKIAl7CiAJICBncnVi X2ZyZWUgKGNvbXBidWYpOwogCSAgKmJ1ZiA9IE5VTEw7Ci0JICByZXR1cm4gZXJyOworCSAgZ3J1 Yl9kcHJpbnRmICgiemZzIiwgIm5vIGtleSBmb3IgdHhnICUiIFBSSXhHUlVCX1VJTlQ2NF9UICJc biIsCisJCQlicC0+YmxrX2JpcnRoKTsKKwkgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9C QURfRlMsICJubyBrZXkgZm91bmQgaW4ga2V5Y2hhaW4iKTsKIAl9CisgICAgICBncnViX2Rwcmlu dGYgKCJ6ZnMiLCAidXNpbmcga2V5ICV1ICglIiBQUkl4R1JVQl9VSU5UNjRfVAorCQkgICAgIiwg JXApIGZvciB0eGcgJSIgUFJJeEdSVUJfVUlOVDY0X1QgIlxuIiwKKwkJICAgIGJlc3RpLCBkYXRh LT5zdWJ2b2wua2V5cmluZ1tiZXN0aV0udHhnLAorCQkgICAgZGF0YS0+c3Vidm9sLmtleXJpbmdb YmVzdGldLmNpcGhlciwKKwkJICAgIGJwLT5ibGtfYmlydGgpOworICAgICAgZXJyID0gZ3J1Yl96 ZnNfZGVjcnlwdC0+ZGVjcnlwdF9vcmFjbGUgKGRhdGEtPnN1YnZvbC5rZXlyaW5nW2Jlc3RpXS5j aXBoZXIsCisJCQkJCSAgICAgIGRhdGEtPnN1YnZvbC5rZXlyaW5nW2Jlc3RpXS5hbGdvLAorCQkJ CQkgICAgICAmKGJwKS0+YmxrX2R2YVsyXSwKKwkJCQkJICAgICAgY29tcGJ1ZiwgcHNpemUsIHpj LnpjX21hYywKKwkJCQkJICAgICAgQlBfR0VUX0JZVEVPUkRFUihicCkpOworICAgIH0KKyAgaWYg KGVycikKKyAgICB7CisgICAgICBncnViX2ZyZWUgKGNvbXBidWYpOworICAgICAgKmJ1ZiA9IE5V TEw7CisgICAgICByZXR1cm4gZXJyOwogICAgIH0KIAogICBpZiAoY29tcCAhPSBaSU9fQ09NUFJF U1NfT0ZGKQpAQCAtMjI1NCw2ICsyNTMwLDcgQEAgemlvX3JlYWQgKGNvbnN0IGJsa3B0cl90ICpi cCwgdm9pZCAqKmJ1ZiwKIAogICAgICAgZXJyID0gZGVjb21wX3RhYmxlW2NvbXBdLmRlY29tcF9m dW5jIChjb21wYnVmLCAqYnVmLCBwc2l6ZSwgbHNpemUpOwogICAgICAgZ3J1Yl9mcmVlIChjb21w YnVmKTsKKyAgICAgIGNvbXBidWYgPSBOVUxMOwogICAgICAgaWYgKGVycikKIAl7CiAJICBncnVi X2ZyZWUgKCpidWYpOwpAQCAtMjI3Myw2ICsyNTUwLDUxIEBAIHppb19yZWFkIChjb25zdCBibGtw dHJfdCAqYnAsIHZvaWQgKipidWYsCiAJZ3J1Yl96ZnNfYnl0ZXN3YXBfdHlwZSgqYnVmLCBsc2l6 ZSwgQlBfR0VUX1RZUEUoYnApKTsKICAgICB9CiAKKyAgaWYgKCFCUF9JU19FTUJFRERFRChicCkg JiYgZGF0dG9fYXV0aGVudGljYXRlZCAmJiBCUF9HRVRfTEVWRUwoYnApID4gMCkKKyAgICB7Cisg ICAgICBncnViX3VpbnQ2NF90IGhhc2hbOF07CisgICAgICBjaGFyICphYWQgPSBncnViX21hbGxv Yyhsc2l6ZSk7CisgICAgICBncnViX3NpemVfdCBhYWRfb2Zmc2V0ID0gMDsKKyAgICAgIGlmICgh YWFkKQorCXsKKwkgIGdydWJfZnJlZSAoKmJ1Zik7CisJICAqYnVmID0gTlVMTDsKKwkgIHJldHVy biBncnViX2Vycm5vOworCX0KKyAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsc2l6ZSAv IHNpemVvZihibGtwdHJfdCk7IGkrKykKKwlhZGRfYmxrcHRyX3RvX2FhZCAoYWFkLCAmYWFkX29m ZnNldCwgKChibGtwdHJfdCAqKSpidWYpW2ldLCBCUF9HRVRfQllURU9SREVSKGJwKSwgMSk7Cisg ICAgICBncnViX2NyeXB0b19oYXNoKEdSVUJfTURfU0hBNTEyLCBoYXNoLCBhYWQsIGFhZF9vZmZz ZXQpOworICAgICAgZ3J1Yl9mcmVlKGFhZCk7CisKKyAgICAgIGlmICghR1JVQl9aRlNfSVNfTkFU SVZFX0JZVEVPUkRFUihCUF9HRVRfQllURU9SREVSKGJwKSkpCisJeworCSAgZ3J1Yl96ZnNfYnl0 ZXN3YXBfdTY0KCZoYXNoWzBdKTsKKwkgIGdydWJfemZzX2J5dGVzd2FwX3U2NCgmaGFzaFsxXSk7 CisJfSAgICAgIAorCisgICAgICBpZiAoZ3J1Yl9jcnlwdG9fbWVtY21wKCZ6Yy56Y193b3JkWzJd LCBoYXNoLCA4KSAhPSAwKQorCXsKKwkgIGdydWJfZnJlZSAoKmJ1Zik7CisgICAgICAgICAgKmJ1 ZiA9IE5VTEw7CisJICBncnViX2RwcmludGYgKCJ6ZnMiLCAiYWN0dWFsIGhhc2ggIgorCQkJIiUw MTZsbHggJTAxNmxseCAlMDE2bGx4ICUwMTZsbHggJTAxNmxseCAlMDE2bGx4ICUwMTZsbHggJTAx NmxseCBcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKSBoYXNoWzBdLAorCQkJKHVuc2lnbmVk IGxvbmcgbG9uZykgaGFzaFsxXSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGhhc2hbMl0sCisJ CQkodW5zaWduZWQgbG9uZyBsb25nKSBoYXNoWzNdLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykg aGFzaFs0XSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGhhc2hbNV0sCisJCQkodW5zaWduZWQg bG9uZyBsb25nKSBoYXNoWzZdLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgaGFzaFs3XSk7CisJ ICBncnViX2RwcmludGYgKCJ6ZnMiLCAiZXhwZWN0ZWQgaGFzaCAlMDE2bGx4ICUwMTZsbHggJTAx NmxseCAlMDE2bGx4XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgemMuemNfd29yZFswXSwK KwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHpjLnpjX3dvcmRbMV0sCisJCQkodW5zaWduZWQgbG9u ZyBsb25nKSB6Yy56Y193b3JkWzJdLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgemMuemNfd29y ZFszXSk7CisJICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZTLCBOXygiaGFzaCB2 ZXJpZmljYXRpb24gZmFpbGVkIikpOworCX0KKyAgICB9CisKICAgcmV0dXJuIEdSVUJfRVJSX05P TkU7CiB9CiAKQEAgLTM1MTksOCArMzg0MSw4IEBAIGxvYWRfemFwX2tleSAoY29uc3Qgdm9pZCAq bmFtZSwgZ3J1Yl9zaXplX3QgbmFtZWxlbiwgY29uc3Qgdm9pZCAqdmFsX2luLAogICBjdHgtPnN1 YnZvbC0+a2V5cmluZ1tjdHgtPmtleW5dLmFsZ28gPQogICAgIGdydWJfbGVfdG9fY3B1NjQgKCoo Z3J1Yl91aW50NjRfdCAqKSB2YWxfaW4pOwogICBjdHgtPnN1YnZvbC0+a2V5cmluZ1tjdHgtPmtl eW5dLmNpcGhlciA9Ci0gICAgZ3J1Yl96ZnNfbG9hZF9rZXkgKHZhbF9pbiwgbmVsZW0sIGN0eC0+ c2FsdCwKLQkJICAgICAgIGN0eC0+c3Vidm9sLT5rZXlyaW5nW2N0eC0+a2V5bl0uYWxnbyk7Cisg ICAgZ3J1Yl96ZnNfZGVjcnlwdC0+bG9hZF9rZXlfb3JhY2xlICh2YWxfaW4sIG5lbGVtLCBjdHgt PnNhbHQsCisJCQkJICAgICAgIGN0eC0+c3Vidm9sLT5rZXlyaW5nW2N0eC0+a2V5bl0uYWxnbyk7 CiAgIGN0eC0+a2V5bisrOwogICByZXR1cm4gMDsKIH0KQEAgLTM1ODcsNiArMzkwOSw4MiBAQCBk bm9kZV9nZXRfZnVsbHBhdGggKGNvbnN0IGNoYXIgKmZ1bGxwYXRoLCBzdHJ1Y3Qgc3Vidm9sdW1l ICpzdWJ2b2wsCiAKICAgZ3J1Yl9kcHJpbnRmICgiemZzIiwgImFsaXZlXG4iKTsKIAorICBncnVi X3VpbnQ2NF90IGNyeXB0X29iajsKKworICBlcnIgPSB6YXBfbG9va3VwIChkbiwgImNvbS5kYXR0 bzpjcnlwdG9fa2V5X29iaiIsICZjcnlwdF9vYmosIGRhdGEsIDApOworICBpZiAoZXJyKQorICAg IHsKKyAgICAgIGdydWJfZXJybm8gPSBHUlVCX0VSUl9OT05FOworICAgICAgY3J5cHRfb2JqID0g MDsKKyAgICB9CisKKyAgZ3J1Yl9kcHJpbnRmKCJ6ZnMiLCAiY3J5cHQgb2JqID0gJWxsZFxuIiwg KGxvbmcgbG9uZykgY3J5cHRfb2JqKTsKKyAgc3Vidm9sLT5pc19kYXR0b19lbmNyeXB0ZWQgPSBj cnlwdF9vYmogIT0gMDsKKworICBpZiAoZ3J1Yl96ZnNfZGVjcnlwdCAmJiBjcnlwdF9vYmopCisg ICAgeworICAgICAgZG5vZGVfcGh5c190IGNyeXB0X2RuOworICAgICAgZXJyID0gZG5vZGVfZ2V0 ICgmKGRhdGEtPm1vcyksIGNyeXB0X29iaiwgMHhjNCwKKwkJICAgICAgICZjcnlwdF9kbiwgZGF0 YSk7CisgICAgICBpZiAoZXJyKQorCXsKKwkgIGdydWJfZnJlZSAoZnNuYW1lKTsKKwkgIGdydWJf ZnJlZSAoc25hcG5hbWUpOworCSAgcmV0dXJuIGVycjsKKwl9CisKKyAgICAgIGVyciA9IGRub2Rl X2dldCAoJihkYXRhLT5tb3MpLCBjcnlwdF9vYmosIDAgLyogPz8gKi8sCisJCSAgICAgICAmY3J5 cHRfZG4sIGRhdGEpOworICAgICAgc3RydWN0IGdydWJfemZzX2NyeXB0X2RhdHRvX2RhdGEgY3J5 cHRfZGF0dG9fZGF0YSA9IHsgMCB9OworICAgICAgZ3J1Yl91aW50NjRfdCBwYmtkZjJpdGVycyA9 IDAsIHBia2RmMnNhbHQgPSAwLCBndWlkID0gMCwgYWxnbyA9IDAsIHZlcnNpb24gPSAwOworICAg ICAgemFwX2l0ZXJhdGUgKCZjcnlwdF9kbiwgMSwgZmlsbF9jcnlwdF9kYXR0b19kYXRhLCAmY3J5 cHRfZGF0dG9fZGF0YSwgZGF0YSk7CisKKyAgICAgIGVyciA9IHphcF9sb29rdXAgKCZjcnlwdF9k biwgInBia2RmMml0ZXJzIiwgJnBia2RmMml0ZXJzLCBkYXRhLCAwKTsKKyAgICAgIGlmIChlcnIp CisJeworCSAgZ3J1Yl9lcnJubyA9IEdSVUJfRVJSX05PTkU7CisJICBwYmtkZjJpdGVycyA9IDA7 CisJfQorCisgICAgICBlcnIgPSB6YXBfbG9va3VwICgmY3J5cHRfZG4sICJEU0xfQ1JZUFRPX0dV SUQiLCAmZ3VpZCwgZGF0YSwgMCk7CisgICAgICBpZiAoZXJyKQorCXsKKwkgIGdydWJfZXJybm8g PSBHUlVCX0VSUl9OT05FOworCSAgZ3VpZCA9IDA7CisJfQorCisgICAgICBlcnIgPSB6YXBfbG9v a3VwICgmY3J5cHRfZG4sICJEU0xfQ1JZUFRPX1NVSVRFIiwgJmFsZ28sIGRhdGEsIDApOworICAg ICAgaWYgKGVycikKKwl7CisJICBncnViX2Vycm5vID0gR1JVQl9FUlJfTk9ORTsKKwkgIGFsZ28g PSAwOworCX0KKworICAgICAgZXJyID0gemFwX2xvb2t1cCAoJmNyeXB0X2RuLCAiRFNMX0NSWVBU T19WRVJTSU9OIiwgJnZlcnNpb24sIGRhdGEsIDApOworICAgICAgaWYgKGVycikKKwl7CisJICBn cnViX2Vycm5vID0gR1JVQl9FUlJfTk9ORTsKKwkgIHZlcnNpb24gPSAwOworCX0KKworICAgICAg ZXJyID0gemFwX2xvb2t1cCAoJmNyeXB0X2RuLCAicGJrZGYyc2FsdCIsICZwYmtkZjJzYWx0LCBk YXRhLCAwKTsKKyAgICAgIGlmIChlcnIpCisJeworCSAgZ3J1Yl9lcnJubyA9IEdSVUJfRVJSX05P TkU7CisJICBwYmtkZjJzYWx0ID0gMDsKKwl9CisKKyAgICAgIHBia2RmMnNhbHQgPSBncnViX2Nw dV90b19sZTY0KHBia2RmMnNhbHQpOworCisgICAgICBzdWJ2b2wtPmtleV9kYXR0byA9IGdydWJf emZzX2RlY3J5cHQtPmxvYWRfa2V5X2RhdHRvKGNyeXB0X2RhdHRvX2RhdGEuaXYsIGNyeXB0X2Rh dHRvX2RhdGEuaXZsZW4sCisJCQkJCQkJICAgY3J5cHRfZGF0dG9fZGF0YS5tYWMsIGNyeXB0X2Rh dHRvX2RhdGEubWFjbGVuLAorCQkJCQkJCSAgIGNyeXB0X2RhdHRvX2RhdGEubWFzdGVyLCBjcnlw dF9kYXR0b19kYXRhLm1hc3RlcmxlbiwKKwkJCQkJCQkgICBjcnlwdF9kYXR0b19kYXRhLmhtYWMs IGNyeXB0X2RhdHRvX2RhdGEuaG1hY2xlbiwKKwkJCQkJCQkgICAoY29uc3QgZ3J1Yl91aW50OF90 ICopICZwYmtkZjJzYWx0LCBzaXplb2YgKHBia2RmMnNhbHQpLAorCQkJCQkJCSAgIHBia2RmMml0 ZXJzLCBndWlkLCBhbGdvLCB2ZXJzaW9uKTsKKyAgICB9CisKKwogICBoZWFkb2JqID0gKChkc2xf ZGlyX3BoeXNfdCAqKSBETl9CT05VUyAoZG4pKS0+ZGRfaGVhZF9kYXRhc2V0X29iajsKIAogICBl cnIgPSBkbm9kZV9nZXQgKCYoZGF0YS0+bW9zKSwgaGVhZG9iaiwgMCwgJnN1YnZvbC0+bWRuLCBk YXRhKTsKQEAgLTM2MDAsNyArMzk5OCw3IEBAIGRub2RlX2dldF9mdWxscGF0aCAoY29uc3QgY2hh ciAqZnVsbHBhdGgsIHN0cnVjdCBzdWJ2b2x1bWUgKnN1YnZvbCwKIAogICBncnViX2RwcmludGYo InpmcyIsICJrZXljaGFpbiBvYmogPSAlbGxkXG4iLCAobG9uZyBsb25nKSBrZXljaGFpbm9iaik7 CiAKLSAgaWYgKGdydWJfemZzX2RlY3J5cHQgJiYga2V5Y2hhaW5vYmopCisgIGlmIChncnViX3pm c19kZWNyeXB0ICYmICFzdWJ2b2wtPmlzX2RhdHRvX2VuY3J5cHRlZCAmJiBrZXljaGFpbm9iaikK ICAgICB7CiAgICAgICBzdHJ1Y3QgZG5vZGVfZ2V0X2Z1bGxwYXRoX2N0eCBjdHggPSB7CiAJLnN1 YnZvbCA9IHN1YnZvbCwKZGlmZiAtLWdpdCBhL2dydWItY29yZS9mcy96ZnMvemZzY3J5cHQuYyBi L2dydWItY29yZS9mcy96ZnMvemZzY3J5cHQuYwppbmRleCA1MzVmZDQwNjUuLmUyMDJmNDI2NSAx MDA2NDQKLS0tIGEvZ3J1Yi1jb3JlL2ZzL3pmcy96ZnNjcnlwdC5jCisrKyBiL2dydWItY29yZS9m cy96ZnMvemZzY3J5cHQuYwpAQCAtNDYsOCArNDYsOSBAQAogR1JVQl9NT0RfTElDRU5TRSAoIkdQ THYzKyIpOwogCiAvKgotICBNb3N0bHkgYmFzZWQgb24gZm9sbG93aW5nIGFydGljbGU6CisgIE9y YWNsZSBwYXJ0IGlzIG1vc3RseSBiYXNlZCBvbiBmb2xsb3dpbmcgYXJ0aWNsZToKICAgaHR0cHM6 Ly9ibG9ncy5vcmFjbGUuY29tL2RhcnJlbi9lbnRyeS96ZnNfZW5jcnlwdGlvbl93aGF0X2lzX29u CisgIERhdHRvIHBhcnQgaXMgYmFzZWQgb24gY29tbWVudHMgaW4gT3BlblpGUy4gTm8gYWN0YWwg Y29kZSBoYXMgYmVlbiB1c2VkCiAgKi8KIAogZW51bSBncnViX3pmc19hbGdvCkBAIC01Niw3ICs1 NywyNiBAQCBlbnVtIGdydWJfemZzX2FsZ28KICAgICBHUlVCX1pGU19BTEdPX0dDTSwKICAgfTsK IAotc3RydWN0IGdydWJfemZzX2tleQorc3RydWN0IGRhdHRvX2FsZ28geworICBncnViX3NpemVf dCB3cmFwa2V5bGVuOworICBncnViX3NpemVfdCBjcnlwdGtleWxlbjsKKyAgZ3J1Yl9zaXplX3Qg bWFzdGVya2V5bGVuOworICBlbnVtIGdydWJfemZzX2FsZ28gdXNlZF9hbGdvOworfSBkYXR0b19h bGdvc1tdID0geworICB7IDAgfSwKKyAgeyAwIH0sCisgIHsgMCB9LAorICB7IDMyLCAxNiwgMTYs IEdSVUJfWkZTX0FMR09fQ0NNIH0sCisgIHsgMzIsIDI0LCAyNCwgR1JVQl9aRlNfQUxHT19DQ00g fSwKKyAgeyAzMiwgMzIsIDMyLCBHUlVCX1pGU19BTEdPX0NDTSB9LAorICB7IDMyLCAxNiwgMTYs IEdSVUJfWkZTX0FMR09fR0NNIH0sCisgIHsgMzIsIDI0LCAyNCwgR1JVQl9aRlNfQUxHT19HQ00g fSwKKyAgeyAzMiwgMzIsIDMyLCBHUlVCX1pGU19BTEdPX0dDTSB9LAorfTsKKyNkZWZpbmUgTUFY X1dSQVBDSVBIRVJURVhUTEVOIDk2CisjZGVmaW5lIE1BWF9NQUNMRU4gMTYKKworc3RydWN0IGdy dWJfemZzX2tleV9vcmFjbGUKIHsKICAgZ3J1Yl91aW50NjRfdCBhbGdvOwogICBncnViX3VpbnQ4 X3QgZW5jX25vbmNlWzEzXTsKQEAgLTEwMiwyNiArMTIyLDgxIEBAIGdydWJfemZzX2FkZF9rZXkg KGdydWJfdWludDhfdCAqa2V5X2luLAogCiBzdGF0aWMgZ2NyeV9lcnJfY29kZV90CiBncnViX2Nj bV9kZWNyeXB0IChncnViX2NyeXB0b19jaXBoZXJfaGFuZGxlX3QgY2lwaGVyLAotCQkgIGdydWJf dWludDhfdCAqb3V0LCBjb25zdCBncnViX3VpbnQ4X3QgKmluLAotCQkgIGdydWJfc2l6ZV90IHBz aXplLAorCQkgIGdydWJfdWludDhfdCAqb3V0LAorCQkgIGNvbnN0IGdydWJfdWludDhfdCAqaW4s IGdydWJfc2l6ZV90IHBzaXplLAorCQkgIGNvbnN0IGdydWJfdWludDhfdCAqYWFkLCBncnViX3Np emVfdCBhYWRzaXplLAogCQkgIHZvaWQgKm1hY19vdXQsIGNvbnN0IHZvaWQgKm5vbmNlLAotCQkg IHVuc2lnbmVkIGwsIHVuc2lnbmVkIG0pCisJCSAgdW5zaWduZWQgbm9uY2VsZW4sIHVuc2lnbmVk IG0pCiB7CiAgIGdydWJfdWludDhfdCBpdlsxNl07CiAgIGdydWJfdWludDhfdCBtdWxbMTZdOwog ICBncnViX3VpbnQzMl90IG1hY1s0XTsKLSAgdW5zaWduZWQgaSwgajsKKyAgdW5zaWduZWQgaSwg aiwgbCA9IDE1IC0gbm9uY2VsZW4sIGFwcmVmaXhsZW4gPSAwOwogICBnY3J5X2Vycl9jb2RlX3Qg ZXJyOworICBncnViX3VpbnQ4X3QgYXByZWZpeFsxNl0gPSB7IDAgfTsKIAotICBncnViX21lbWNw eSAoaXYgKyAxLCBub25jZSwgMTUgLSBsKTsKKyAgZ3J1Yl9tZW1jcHkgKGl2ICsgMSwgbm9uY2Us IG5vbmNlbGVuKTsKIAotICBpdlswXSA9IChsIC0gMSkgfCAoKChtLTIpIC8gMikgPDwgMyk7Cisg IGl2WzBdID0gKGwgLSAxKSB8ICgoKG0tMikgLyAyKSA8PCAzKSB8ICgoYWFkc2l6ZSAhPSAwKSA8 PCA2KTsKICAgZm9yIChqID0gMDsgaiA8IGw7IGorKykKICAgICBpdlsxNSAtIGpdID0gcHNpemUg Pj4gKDggKiBqKTsKICAgZXJyID0gZ3J1Yl9jcnlwdG9fZWNiX2VuY3J5cHQgKGNpcGhlciwgbWFj LCBpdiwgMTYpOwogICBpZiAoZXJyKQogICAgIHJldHVybiBlcnI7CiAKKyAgaWYgKGFhZHNpemUg PT0gMCkKKyAgICBhcHJlZml4bGVuID0gMDsKKyAgZWxzZSBpZiAoYWFkc2l6ZSA8PSAweEZFRkYp CisgICAgeworICAgICAgYXByZWZpeGxlbiA9IDI7CisgICAgICBhcHJlZml4WzBdID0gYWFkc2l6 ZSA+PiA4OworICAgICAgYXByZWZpeFsxXSA9IGFhZHNpemU7CisgICAgfQorI2lmIEdSVUJfQ1BV X1NJWkVPRl9WT0lEX1AgPT0gOAorICBlbHNlIGlmICgoYWFkc2l6ZSA+PiAzMikgPT0gMCkKKyNl bmRpZgorICAgIHsKKyAgICAgIGFwcmVmaXhsZW4gPSA2OworICAgICAgYXByZWZpeFswXSA9IDB4 ZmY7CisgICAgICBhcHJlZml4WzFdID0gMHhmZTsKKyAgICAgIGdydWJfc2V0X3VuYWxpZ25lZDMy KGFwcmVmaXggKyAyLCBncnViX2NwdV90b19iZTMyKGFhZHNpemUpKTsKKyAgICB9CisjaWYgR1JV Ql9DUFVfU0laRU9GX1ZPSURfUCA9PSA4CisgIGVsc2UKKyAgICB7CisgICAgICBhcHJlZml4bGVu ID0gMTA7CisgICAgICBhcHJlZml4WzBdID0gMHhmZjsKKyAgICAgIGFwcmVmaXhbMV0gPSAweGZm OworICAgICAgZ3J1Yl9zZXRfdW5hbGlnbmVkNjQoYXByZWZpeCArIDIsIGdydWJfY3B1X3RvX2Jl NjQoYWFkc2l6ZSkpOworICAgIH0KKyNlbmRpZgorCisgIGlmIChhYWRzaXplICE9IDApCisgICAg eworICAgICAgZ3J1Yl9zaXplX3QgYWJsb2NrcyA9IChhYWRzaXplICsgYXByZWZpeGxlbiArIDE1 KSAvIDE2OworICAgICAgZ3J1Yl9zaXplX3QgZmlyc3RfYmxvY2tfZGF0YWxlbiA9IDE2IC0gYXBy ZWZpeGxlbjsKKyAgICAgIGlmIChmaXJzdF9ibG9ja19kYXRhbGVuID4gYWFkc2l6ZSkKKwlmaXJz dF9ibG9ja19kYXRhbGVuID0gYWFkc2l6ZTsKKyAgICAgIGdydWJfbWVtY3B5IChhcHJlZml4ICsg YXByZWZpeGxlbiwgYWFkLCBmaXJzdF9ibG9ja19kYXRhbGVuKTsKKworICAgICAgZ3J1Yl9jcnlw dG9feG9yIChtYWMsIG1hYywgYXByZWZpeCwgMTYpOworICAgICAgZXJyID0gZ3J1Yl9jcnlwdG9f ZWNiX2VuY3J5cHQgKGNpcGhlciwgbWFjLCBtYWMsIDE2KTsKKyAgICAgIGlmIChlcnIpCisJcmV0 dXJuIGVycjsKKworICAgICAgZm9yIChpID0gMTsgaSA8IGFibG9ja3M7IGkrKykKKwl7CisJICBn cnViX3NpemVfdCBjc2l6ZSwgaW5zdGFydCA9IChpIC0gMSkgKiAxNiArIGZpcnN0X2Jsb2NrX2Rh dGFsZW47CisJICBjc2l6ZSA9IDE2OworCSAgaWYgKGNzaXplID4gYWFkc2l6ZSAtIGluc3RhcnQp CisJICAgIGNzaXplID0gYWFkc2l6ZSAtIGluc3RhcnQ7CisJICBncnViX2NyeXB0b194b3IgKG1h YywgbWFjLCBhYWQgKyBpbnN0YXJ0LCBjc2l6ZSk7CisJICBlcnIgPSBncnViX2NyeXB0b19lY2Jf ZW5jcnlwdCAoY2lwaGVyLCBtYWMsIG1hYywgMTYpOworCSAgaWYgKGVycikKKwkgICAgcmV0dXJu IGVycjsKKwl9CisgICAgfQorCiAgIGl2WzBdID0gbCAtIDE7CiAKICAgZm9yIChpID0gMDsgaSA8 IChwc2l6ZSArIDE1KSAvIDE2OyBpKyspCkBAIC0xODcsNiArMjYyLDggQEAgc3RhdGljIGdjcnlf ZXJyX2NvZGVfdAogZ3J1Yl9nY21fZGVjcnlwdCAoZ3J1Yl9jcnlwdG9fY2lwaGVyX2hhbmRsZV90 IGNpcGhlciwKIAkJICBncnViX3VpbnQ4X3QgKm91dCwgY29uc3QgZ3J1Yl91aW50OF90ICppbiwK IAkJICBncnViX3NpemVfdCBwc2l6ZSwKKwkJICBjb25zdCBncnViX3VpbnQ4X3QgKmFhZCwKKwkJ ICBncnViX3NpemVfdCBhYWRzaXplLAogCQkgIHZvaWQgKm1hY19vdXQsIGNvbnN0IHZvaWQgKm5v bmNlLAogCQkgIHVuc2lnbmVkIG5vbmNlX2xlbiwgdW5zaWduZWQgbSkKIHsKQEAgLTIxMyw3ICsy OTAsNyBAQCBncnViX2djbV9kZWNyeXB0IChncnViX2NyeXB0b19jaXBoZXJfaGFuZGxlX3QgY2lw aGVyLAogICBlbHNlCiAgICAgewogICAgICAgZ3J1Yl9tZW1zZXQgKGl2LCAwLCBzaXplb2YgKGl2 KSk7Ci0gICAgICBncnViX21lbWNweSAoaXYsIG5vbmNlLCBub25jZV9sZW4pOworICAgICAgZ3J1 Yl9tZW1jcHkgKGl2LCBub25jZSwgbm9uY2VfbGVuID4gc2l6ZW9mIChpdikgPyBzaXplb2YgKGl2 KSA6IG5vbmNlX2xlbik7CiAgICAgICBncnViX2djbV9tdWwgKGl2LCBoKTsKICAgICAgIGl2WzE1 XSBePSBub25jZV9sZW4gKiA4OwogICAgICAgZ3J1Yl9nY21fbXVsIChpdiwgaCk7CkBAIC0yMjMs NiArMzAwLDE2IEBAIGdydWJfZ2NtX2RlY3J5cHQgKGdydWJfY3J5cHRvX2NpcGhlcl9oYW5kbGVf dCBjaXBoZXIsCiAgIGlmIChlcnIpCiAgICAgcmV0dXJuIGVycjsKIAorICBmb3IgKGkgPSAwOyBp IDwgKGFhZHNpemUgKyAxNSkgLyAxNjsgaSsrKQorICAgIHsKKyAgICAgIGdydWJfc2l6ZV90IGNz aXplOworICAgICAgY3NpemUgPSAxNjsKKyAgICAgIGlmIChjc2l6ZSA+IGFhZHNpemUgLSAxNiAq IGkpCisJY3NpemUgPSBhYWRzaXplIC0gMTYgKiBpOworICAgICAgZ3J1Yl9jcnlwdG9feG9yICht YWMsIG1hYywgYWFkICsgMTYgKiBpLCBjc2l6ZSk7CisgICAgICBncnViX2djbV9tdWwgKG1hYywg aCk7CisgICAgfQorCiAgIGZvciAoaSA9IDA7IGkgPCAocHNpemUgKyAxNSkgLyAxNjsgaSsrKQog ICAgIHsKICAgICAgIGdydWJfc2l6ZV90IGNzaXplOwpAQCAtMjQ0LDYgKzMzMSw4IEBAIGdydWJf Z2NtX2RlY3J5cHQgKGdydWJfY3J5cHRvX2NpcGhlcl9oYW5kbGVfdCBjaXBoZXIsCiAgICAgfQog ICBmb3IgKGogPSAwOyBqIDwgODsgaisrKQogICAgIG1hY1sxNSAtIGpdIF49ICgoKChncnViX3Vp bnQ2NF90KSBwc2l6ZSkgKiA4KSA+PiAoOCAqIGopKTsKKyAgZm9yIChqID0gMDsgaiA8IDg7IGor KykKKyAgICBtYWNbNyAtIGpdIF49ICgoKChncnViX3VpbnQ2NF90KSBhYWRzaXplKSAqIDgpID4+ ICg4ICogaikpOwogICBncnViX2djbV9tdWwgKG1hYywgaCk7CiAKICAgaWYgKG1hY19vdXQpCkBA IC0yNTcsMzAgKzM0NiwzMyBAQCBzdGF0aWMgZ2NyeV9lcnJfY29kZV90CiBhbGdvX2RlY3J5cHQg KGdydWJfY3J5cHRvX2NpcGhlcl9oYW5kbGVfdCBjaXBoZXIsIGdydWJfdWludDY0X3QgYWxnbywK IAkgICAgICBncnViX3VpbnQ4X3QgKm91dCwgY29uc3QgZ3J1Yl91aW50OF90ICppbiwKIAkgICAg ICBncnViX3NpemVfdCBwc2l6ZSwKKwkgICAgICBjb25zdCBncnViX3VpbnQ4X3QgKmFhZCwKKwkg ICAgICBncnViX3NpemVfdCBhYWRzaXplLAogCSAgICAgIHZvaWQgKm1hY19vdXQsIGNvbnN0IHZv aWQgKm5vbmNlLAogCSAgICAgIHVuc2lnbmVkIGwsIHVuc2lnbmVkIG0pCiB7CiAgIHN3aXRjaCAo YWxnbykKICAgICB7Ci0gICAgY2FzZSAwOgorICAgIGNhc2UgR1JVQl9aRlNfQUxHT19DQ006CiAg ICAgICByZXR1cm4gZ3J1Yl9jY21fZGVjcnlwdCAoY2lwaGVyLCBvdXQsIGluLCBwc2l6ZSwKLQkJ CSAgICAgICBtYWNfb3V0LCBub25jZSwgbCwgbSk7Ci0gICAgY2FzZSAxOgorCQkJICAgICAgIGFh ZCwgYWFkc2l6ZSwgbWFjX291dCwgbm9uY2UsCisJCQkgICAgICAgbCA8PSAxNSA/IGwgOiAwLCBt KTsKKyAgICBjYXNlIEdSVUJfWkZTX0FMR09fR0NNOgogICAgICAgcmV0dXJuIGdydWJfZ2NtX2Rl Y3J5cHQgKGNpcGhlciwgb3V0LCBpbiwgcHNpemUsCi0JCQkgICAgICAgbWFjX291dCwgbm9uY2Us Ci0JCQkgICAgICAgMTUgLSBsLCBtKTsKKwkJCSAgICAgICBhYWQsIGFhZHNpemUsIG1hY19vdXQs IG5vbmNlLAorCQkJICAgICAgIGwgPD0gMTUgPyBsIDogMCwgbSk7CiAgICAgZGVmYXVsdDoKICAg ICAgIHJldHVybiBHUEdfRVJSX0NJUEhFUl9BTEdPOwogICAgIH0KIH0KIAogc3RhdGljIGdydWJf ZXJyX3QKLWdydWJfemZzX2RlY3J5cHRfcmVhbCAoZ3J1Yl9jcnlwdG9fY2lwaGVyX2hhbmRsZV90 IGNpcGhlciwKLQkJICAgICAgIGdydWJfdWludDY0X3QgYWxnbywKLQkJICAgICAgIGNvbnN0IHZv aWQgKm5vbmNlLAotCQkgICAgICAgY2hhciAqYnVmLCBncnViX3NpemVfdCBzaXplLAotCQkgICAg ICAgY29uc3QgZ3J1Yl91aW50MzJfdCAqZXhwZWN0ZWRfbWFjLAotCQkgICAgICAgZ3J1Yl96ZnNf ZW5kaWFuX3QgZW5kaWFuKQorZ3J1Yl96ZnNfZGVjcnlwdF9vcmFjbGUgKGdydWJfY3J5cHRvX2Np cGhlcl9oYW5kbGVfdCBjaXBoZXIsCisJCQkgZ3J1Yl91aW50NjRfdCBhbGdvLAorCQkJIGNvbnN0 IHZvaWQgKm5vbmNlLAorCQkJIGNoYXIgKmJ1ZiwgZ3J1Yl9zaXplX3Qgc2l6ZSwKKwkJCSBjb25z dCBncnViX3VpbnQzMl90ICpleHBlY3RlZF9tYWMsCisJCQkgZ3J1Yl96ZnNfZW5kaWFuX3QgZW5k aWFuKQogewogICBncnViX3VpbnQzMl90IG1hY1s0XTsKICAgdW5zaWduZWQgaTsKQEAgLTI5OCw4 ICszOTAsOCBAQCBncnViX3pmc19kZWNyeXB0X3JlYWwgKGdydWJfY3J5cHRvX2NpcGhlcl9oYW5k bGVfdCBjaXBoZXIsCiAgIGVyciA9IGFsZ29fZGVjcnlwdCAoY2lwaGVyLCBhbGdvLAogCQkgICAg ICAoZ3J1Yl91aW50OF90ICopIGJ1ZiwKIAkJICAgICAgKGdydWJfdWludDhfdCAqKSBidWYsCi0J CSAgICAgIHNpemUsIG1hYywKLQkJICAgICAgc3cgKyAxLCAzLCAxMik7CisJCSAgICAgIHNpemUs IE5VTEwsIDAsIG1hYywKKwkJICAgICAgc3csIDEyLCAxMik7CiAgIGlmIChlcnIpCiAgICAgcmV0 dXJuIGdydWJfY3J5cHRvX2djcnlfZXJyb3IgKGVycik7CiAKQEAgLTMxMCwxMSArNDAyLDczIEBA IGdydWJfemZzX2RlY3J5cHRfcmVhbCAoZ3J1Yl9jcnlwdG9fY2lwaGVyX2hhbmRsZV90IGNpcGhl ciwKICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CiB9CiAKK3N0YXRpYyBncnViX2Vycl90CitncnVi X3pmc19kZWNyeXB0X2RhdHRvIChjb25zdCBzdHJ1Y3QgZ3J1Yl96ZnNfZGF0dG9fa2V5ICprZXks CisJCQljb25zdCBncnViX3VpbnQzMl90ICpub25jZSwgZ3J1Yl91aW50NjRfdCBzYWx0LAorCQkJ Y2hhciAqYnVmLCBncnViX3NpemVfdCBzaXplLAorCQkJY29uc3QgY2hhciAqYWFkYnVmLCBncnVi X3NpemVfdCBhYWRzaXplLAorCQkJY29uc3QgZ3J1Yl91aW50NjRfdCAqZXhwZWN0ZWRfbWFjLAor CQkJZ3J1Yl96ZnNfZW5kaWFuX3QgZW5kaWFuKQoreworICBncnViX3VpbnQ2NF90IG1hY1syXTsK KyAgdW5zaWduZWQgaTsKKyAgZ3J1Yl91aW50OF90IGV4dHJhY3RrZXlbNjRdOworICBncnViX3Vp bnQ4X3QgZXhwYW5ka2V5WzY0XTsKKyAgZ3J1Yl91aW50OF90IHRbOV07CisgIGdjcnlfZXJyX2Nv ZGVfdCBlcnI7CisgIGdydWJfY3J5cHRvX2NpcGhlcl9oYW5kbGVfdCBjaXBoZXI7CisKKyAgaWYg KCFrZXkpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0FDQ0VTU19ERU5JRUQsCisJ CSAgICAgICBOXygibm8gZGVjcnlwdGlvbiBrZXkgYXZhaWxhYmxlIikpOworCisgIC8qIEEgc3Bl Y2lhbCBjYXNlIG9mIEhLREYgd2l0aCA1MTIgPiBrZXlsZW4uICAqLworICBlcnIgPSBncnViX2Ny eXB0b19obWFjX2J1ZmZlciAoR1JVQl9NRF9TSEE1MTIsCisJCQkJICIiLCAwLAorCQkJCSBrZXkt Pm1hc3Rlcl9rZXksIGtleS0+bWFzdGVyX2tleWxlbiwKKwkJCQkgZXh0cmFjdGtleSk7CisgIGlm IChlcnIpCisgICAgcmV0dXJuIGdydWJfY3J5cHRvX2djcnlfZXJyb3IgKGVycik7CisKKyAgZ3J1 Yl9zZXRfdW5hbGlnbmVkNjQodCwgZ3J1Yl9jcHVfdG9femZzNjQoc2FsdCwgZW5kaWFuKSk7Cisg IHRbOF0gPSAxOworICBlcnIgPSBncnViX2NyeXB0b19obWFjX2J1ZmZlciAoR1JVQl9NRF9TSEE1 MTIsCisJCQkJIGV4dHJhY3RrZXksIDY0LAorCQkJCSB0LCA5LCBleHBhbmRrZXkpOworICBpZiAo ZXJyKQorICAgIHJldHVybiBncnViX2NyeXB0b19nY3J5X2Vycm9yIChlcnIpOworCisgIGNpcGhl ciA9IGdydWJfY3J5cHRvX2NpcGhlcl9vcGVuIChHUlVCX0NJUEhFUl9BRVMpOworICBpZiAoIWNp cGhlcikKKyAgICByZXR1cm4gZ3J1Yl9jcnlwdG9fZ2NyeV9lcnJvciAoZXJyKTsKKyAgZXJyID0g Z3J1Yl9jcnlwdG9fY2lwaGVyX3NldF9rZXkgKGNpcGhlciwgZXhwYW5ka2V5LCBkYXR0b19hbGdv c1trZXktPmFsZ29dLmNyeXB0a2V5bGVuKTsKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBncnVi X2NyeXB0b19jaXBoZXJfY2xvc2UgKGNpcGhlcik7CisgICAgICByZXR1cm4gZ3J1Yl9jcnlwdG9f Z2NyeV9lcnJvciAoZXJyKTsKKyAgICB9CisKKyAgZXJyID0gYWxnb19kZWNyeXB0IChjaXBoZXIs IGRhdHRvX2FsZ29zW2tleS0+YWxnb10udXNlZF9hbGdvLAorCQkgICAgICAoZ3J1Yl91aW50OF90 ICopIGJ1ZiwKKwkJICAgICAgKGdydWJfdWludDhfdCAqKSBidWYsCisJCSAgICAgIHNpemUsIChn cnViX3VpbnQ4X3QgKikgYWFkYnVmLCBhYWRzaXplLCBtYWMsCisJCSAgICAgIG5vbmNlLCAxMiwg MTYpOworICBncnViX2NyeXB0b19jaXBoZXJfY2xvc2UgKGNpcGhlcik7CisgIGlmIChlcnIpCisg ICAgcmV0dXJuIGdydWJfY3J5cHRvX2djcnlfZXJyb3IgKGVycik7CisKKyAgZm9yIChpID0gMDsg aSA8IDI7IGkrKykKKyAgICBpZiAoZ3J1Yl96ZnNfdG9fY3B1NjQgKGV4cGVjdGVkX21hY1tpXSwg ZW5kaWFuKQorICAJIT0gZ3J1Yl9sZV90b19jcHU2NCAobWFjW2ldKSkKKyAgICAgIGdydWJfZHBy aW50ZigiemZzIiwgTl8oIk1BQyB2ZXJpZmljYXRpb24gZmFpbGVkIikpOworICByZXR1cm4gR1JV Ql9FUlJfTk9ORTsKK30KKwogc3RhdGljIGdydWJfY3J5cHRvX2NpcGhlcl9oYW5kbGVfdAotZ3J1 Yl96ZnNfbG9hZF9rZXlfcmVhbCAoY29uc3Qgc3RydWN0IGdydWJfemZzX2tleSAqa2V5LAotCQkJ Z3J1Yl9zaXplX3Qga2V5c2l6ZSwKLQkJCWdydWJfdWludDY0X3Qgc2FsdCwKLQkJCWdydWJfdWlu dDY0X3QgYWxnbykKK2dydWJfemZzX2xvYWRfa2V5X29yYWNsZSAoY29uc3Qgc3RydWN0IGdydWJf emZzX2tleV9vcmFjbGUgKmtleSwKKwkJCSAgZ3J1Yl9zaXplX3Qga2V5c2l6ZSwKKwkJCSAgZ3J1 Yl91aW50NjRfdCBzYWx0LAorCQkJICBncnViX3VpbnQ2NF90IGFsZ28pCiB7CiAgIHVuc2lnbmVk IGtleWxlbjsKICAgc3RydWN0IGdydWJfemZzX3dyYXBfa2V5ICp3cmFwX2tleTsKQEAgLTM3Myw3 ICs1MjcsNyBAQCBncnViX3pmc19sb2FkX2tleV9yZWFsIChjb25zdCBzdHJ1Y3QgZ3J1Yl96ZnNf a2V5ICprZXksCiAJfQogCiAgICAgICBlcnIgPSBhbGdvX2RlY3J5cHQgKGNpcGhlciwgYWxnbywg ZGVjcnlwdGVkLCBrZXktPnVua25vd25fcHVycG9zZV9rZXksIDMyLAotCQkJICBtYWMsIGtleS0+ dW5rbm93bl9wdXJwb3NlX25vbmNlLCAyLCAxNik7CisJCQkgIE5VTEwsIDAsIG1hYywga2V5LT51 bmtub3duX3B1cnBvc2Vfbm9uY2UsIDEzLCAxNik7CiAgICAgICBpZiAoZXJyIHx8IChncnViX2Ny eXB0b19tZW1jbXAgKG1hYywga2V5LT51bmtub3duX3B1cnBvc2Vfa2V5ICsgMzIsIDE2KQogCQkg ICE9IDApKQogCXsKQEAgLTM4Myw4ICs1MzcsOCBAQCBncnViX3pmc19sb2FkX2tleV9yZWFsIChj b25zdCBzdHJ1Y3QgZ3J1Yl96ZnNfa2V5ICprZXksCiAJICBjb250aW51ZTsKIAl9CiAKLSAgICAg IGVyciA9IGFsZ29fZGVjcnlwdCAoY2lwaGVyLCBhbGdvLCBkZWNyeXB0ZWQsIGtleS0+ZW5jX2tl eSwga2V5bGVuLCBtYWMsCi0JCQkgIGtleS0+ZW5jX25vbmNlLCAyLCAxNik7CisgICAgICBlcnIg PSBhbGdvX2RlY3J5cHQgKGNpcGhlciwgYWxnbywgZGVjcnlwdGVkLCBrZXktPmVuY19rZXksIGtl eWxlbiwgTlVMTCwgMCwKKwkJCSAgbWFjLCBrZXktPmVuY19ub25jZSwgMTMsIDE2KTsKICAgICAg IGlmIChlcnIgfHwgZ3J1Yl9jcnlwdG9fbWVtY21wIChtYWMsIGtleS0+ZW5jX2tleSArIGtleWxl biwgMTYpICE9IDApCiAJewogCSAgZ3J1Yl9kcHJpbnRmICgiemZzIiwgImtleSBsb2FkaW5nIGZh aWxlZFxuIik7CkBAIC00MTMsNiArNTY3LDExOSBAQCBncnViX3pmc19sb2FkX2tleV9yZWFsIChj b25zdCBzdHJ1Y3QgZ3J1Yl96ZnNfa2V5ICprZXksCiAgIHJldHVybiBOVUxMOwogfQogCitzdGF0 aWMgc3RydWN0IGdydWJfemZzX2RhdHRvX2tleQorZ3J1Yl96ZnNfbG9hZF9rZXlfZGF0dG8gKGNv bnN0IGdydWJfdWludDhfdCAqaXYsIGdydWJfc2l6ZV90IGl2bGVuLAorCQkJIGNvbnN0IGdydWJf dWludDhfdCAqbWFjX2luLCBncnViX3NpemVfdCBtYWNfaW5sZW4sCisJCQkgY29uc3QgZ3J1Yl91 aW50OF90ICptYXN0ZXIsIGdydWJfc2l6ZV90IG1hc3RlcmxlbiwKKwkJCSBjb25zdCBncnViX3Vp bnQ4X3QgKmhtYWMsIGdydWJfc2l6ZV90IGhtYWNsZW4sCisJCQkgY29uc3QgZ3J1Yl91aW50OF90 ICpwYmtkZjJzYWx0LCBncnViX3NpemVfdCBwYmtkZjJzYWx0bGVuLAorCQkJIGdydWJfdWludDY0 X3QgcGJrZGYyaXRlcnMsIGdydWJfdWludDY0X3QgZ3VpZCwgZ3J1Yl91aW50NjRfdCBhbGdvLCBn cnViX3VpbnQ2NF90IHZlcnNpb24pCit7CisgIHN0cnVjdCBncnViX3pmc193cmFwX2tleSAqd3Jh cF9rZXk7CisgIHN0cnVjdCBncnViX3pmc19kYXR0b19rZXkgcmV0ID0geyAwIH07CisKKyAgaWYg KGFsZ28gPD0gMiB8fCBhbGdvID49IEFSUkFZX1NJWkUoZGF0dG9fYWxnb3MpKQorICAgIHsKKyAg ICAgIGdydWJfZXJyb3IoR1JVQl9FUlJfQkFEX0ZTLCAidW5zdXBwb3J0ZWQgY3J5cHRvIGFsZ28i KTsKKyAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgIC8qIE5vdGU6IGlmIGxhc3QgdHdvIGV2 ZXIgYmVjb21lIHZhcmlhYmxlIHRoZXkgbmVlZCB0byBiZSBjaGVja2Vja2VkIGFzIG1hdGNoaW5n IGFsZ28uIEVzcGVjaWFsbHkgbWFjX2lubGVuLiAgKi8KKyAgaWYgKG1hc3RlcmxlbiA8IGRhdHRv X2FsZ29zW2FsZ29dLm1hc3RlcmtleWxlbiB8fCBobWFjbGVuICE9IDY0IHx8IG1hY19pbmxlbiAh PSAxNikKKyAgICB7CisgICAgICBncnViX2Vycm9yKEdSVUJfRVJSX0JBRF9GUywgImNyeXB0byBr ZXlzIGFyZSBpbnZhbGlkIik7CisgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICBtYXN0ZXJs ZW4gPSBkYXR0b19hbGdvc1thbGdvXS5tYXN0ZXJrZXlsZW47CisKKyAgZ3J1Yl91aW50OF90IGNp cGhlcnRleHRbTUFYX1dSQVBDSVBIRVJURVhUTEVOXTsKKyAgZ3J1Yl91aW50OF90IHBsYWludGV4 dFtNQVhfV1JBUENJUEhFUlRFWFRMRU5dOworICBncnViX3VpbnQ4X3QgbWFjX2NvbXB1dGVkW01B WF9NQUNMRU5dOworICBzdHJ1Y3QgeworICAgIGdydWJfdWludDY0X3QgZ3VpZDsKKyAgICBncnVi X3VpbnQ2NF90IGFsZ287CisgICAgZ3J1Yl91aW50NjRfdCB2ZXJzaW9uOworICB9IGFhZCA9IHsK KyAgICBncnViX2NwdV90b19sZTY0KGd1aWQpLAorICAgIGdydWJfY3B1X3RvX2xlNjQoYWxnbyks CisgICAgZ3J1Yl9jcHVfdG9fbGU2NCh2ZXJzaW9uKQorICB9OworCisgIGdydWJfbWVtY3B5KGNp cGhlcnRleHQsIG1hc3RlciwgbWFzdGVybGVuKTsKKyAgZ3J1Yl9tZW1jcHkoY2lwaGVydGV4dCAr IG1hc3RlcmxlbiwgaG1hYywgaG1hY2xlbik7CisKKyAgZm9yICh3cmFwX2tleSA9IHpmc193cmFw X2tleXM7IHdyYXBfa2V5OyB3cmFwX2tleSA9IHdyYXBfa2V5LT5uZXh0KQorICAgIHsKKyAgICAg IGdydWJfY3J5cHRvX2NpcGhlcl9oYW5kbGVfdCBjaXBoZXI7CisgICAgICBncnViX3VpbnQ4X3Qg d3JhcF9rZXlfcmVhbFszMl0gPSB7IDAgfTsKKyAgICAgIGdjcnlfZXJyX2NvZGVfdCBlcnIgPSAw OworCisgICAgICBjaXBoZXIgPSBncnViX2NyeXB0b19jaXBoZXJfb3BlbiAoR1JVQl9DSVBIRVJf QUVTKTsKKyAgICAgIGlmICghY2lwaGVyKQorCXsKKwkgIGdydWJfZXJybm8gPSBHUlVCX0VSUl9O T05FOworCSAgcmV0dXJuIHJldDsKKwl9CisgICAgICBncnViX21lbXNldCAod3JhcF9rZXlfcmVh bCwgMCwgc2l6ZW9mICh3cmFwX2tleV9yZWFsKSk7CisKKyAgICAgIGlmICghd3JhcF9rZXktPmlz X3Bhc3NwaHJhc2UpCisJZ3J1Yl9tZW1jcHkod3JhcF9rZXlfcmVhbCwgd3JhcF9rZXktPmtleSwK KwkJICAgIHdyYXBfa2V5LT5rZXlsZW4gPCBkYXR0b19hbGdvc1thbGdvXS53cmFwa2V5bGVuID8g d3JhcF9rZXktPmtleWxlbiA6IGRhdHRvX2FsZ29zW2FsZ29dLndyYXBrZXlsZW4pOworICAgICAg ZWxzZQorCS8vIFRPRE86IFBCS0RGMgorCWVyciA9IGdydWJfY3J5cHRvX3Bia2RmMiAoR1JVQl9N RF9TSEExLAorCQkJCSAgKGNvbnN0IGdydWJfdWludDhfdCAqKSB3cmFwX2tleS0+a2V5LAorCQkJ CSAgd3JhcF9rZXktPmtleWxlbiwKKwkJCQkgIHBia2RmMnNhbHQsIHBia2RmMnNhbHRsZW4sCisJ CQkJICBwYmtkZjJpdGVycywgd3JhcF9rZXlfcmVhbCwgZGF0dG9fYWxnb3NbYWxnb10ud3JhcGtl eWxlbik7CisKKyAgICAgIGlmIChlcnIpCisJeworCSAgZ3J1Yl9lcnJubyA9IEdSVUJfRVJSX05P TkU7CisJICBncnViX2NyeXB0b19jaXBoZXJfY2xvc2UgKGNpcGhlcik7CisJICBjb250aW51ZTsK Kwl9CisKKyAgICAgIGVyciA9IGdydWJfY3J5cHRvX2NpcGhlcl9zZXRfa2V5IChjaXBoZXIsIHdy YXBfa2V5X3JlYWwsIGRhdHRvX2FsZ29zW2FsZ29dLndyYXBrZXlsZW4pOworICAgICAgaWYgKGVy cikKKwl7CisJICBncnViX2Vycm5vID0gR1JVQl9FUlJfTk9ORTsKKwkgIGdydWJfY3J5cHRvX2Np cGhlcl9jbG9zZSAoY2lwaGVyKTsKKwkgIGNvbnRpbnVlOworCX0KKworICAgICAgZXJyID0gYWxn b19kZWNyeXB0IChjaXBoZXIsIGRhdHRvX2FsZ29zW2FsZ29dLnVzZWRfYWxnbywKKwkJCSAgcGxh aW50ZXh0LCBjaXBoZXJ0ZXh0LCBtYXN0ZXJsZW4gKyBobWFjbGVuLAorCQkJICAoZ3J1Yl91aW50 OF90ICopICZhYWQsIHNpemVvZihhYWQpLAorCQkJICBtYWNfY29tcHV0ZWQsIGl2LCBpdmxlbiwg bWFjX2lubGVuKTsKKyAgICAgIGlmIChlcnIgfHwgKGdydWJfY3J5cHRvX21lbWNtcCAobWFjX2Nv bXB1dGVkLCBtYWNfaW4sIG1hY19pbmxlbikgIT0gMCkpCisJeworCSAgZ3J1Yl9kcHJpbnRmICgi emZzIiwgImtleSBsb2FkaW5nIGZhaWxlZFxuIik7CisJICBncnViX2Vycm5vID0gR1JVQl9FUlJf Tk9ORTsKKwkgIGdydWJfY3J5cHRvX2NpcGhlcl9jbG9zZSAoY2lwaGVyKTsKKwkgIGNvbnRpbnVl OworCX0KKworICAgICAgcmV0Lm1hc3Rlcl9rZXlsZW4gPSBtYXN0ZXJsZW47CisgICAgICByZXQu bWFzdGVyX2tleSA9IGdydWJfbWFsbG9jKHJldC5tYXN0ZXJfa2V5bGVuKTsKKyAgICAgIGlmICgh cmV0Lm1hc3Rlcl9rZXkpCisJcmV0dXJuIHJldDsKKyAgICAgIGdydWJfbWVtY3B5KHJldC5tYXN0 ZXJfa2V5LCBwbGFpbnRleHQsIG1hc3Rlcmxlbik7CisgICAgICByZXQuaG1hY19rZXkgPSBncnVi X21hbGxvYyhobWFjbGVuKTsKKyAgICAgIGlmICghcmV0LmhtYWNfa2V5KQorCXsKKwkgIGdydWJf ZnJlZShyZXQubWFzdGVyX2tleSk7CisJICByZXQubWFzdGVyX2tleSA9IE5VTEw7CisJICByZXR1 cm4gcmV0OworCX0KKyAgICAgIHJldC5hbGdvID0gYWxnbzsKKyAgICAgIGdydWJfbWVtY3B5KHJl dC5obWFjX2tleSwgcGxhaW50ZXh0ICsgbWFzdGVybGVuLCBobWFjbGVuKTsKKyAgICAgIHJldHVy biByZXQ7CisgICAgfQorICByZXR1cm4gcmV0OworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGdy dWJfYXJnX29wdGlvbiBvcHRpb25zW10gPQogICB7CiAgICAgeyJyYXciLCAncicsIDAsIE5fKCJB c3N1bWUgaW5wdXQgaXMgcmF3LiIpLCAwLCAwfSwKQEAgLTQ3MSwxMiArNzM4LDE3IEBAIGdydWJf Y21kX3pmc19rZXkgKGdydWJfZXh0Y21kX2NvbnRleHRfdCBjdHh0LCBpbnQgYXJnYywgY2hhciAq KmFyZ3MpCiAJCQkgICAgICAgJiYgIWN0eHQtPnN0YXRlWzFdLnNldCkpOwogfQogCitzdHJ1Y3Qg Z3J1Yl96ZnNfZGVjcnlwdG9yIGdydWJfemZzX2RlY3J5cHRfcmVhbCA9IHsKKyAgLmRlY3J5cHRf b3JhY2xlID0gZ3J1Yl96ZnNfZGVjcnlwdF9vcmFjbGUsCisgIC5kZWNyeXB0X2RhdHRvID0gZ3J1 Yl96ZnNfZGVjcnlwdF9kYXR0bywKKyAgLmxvYWRfa2V5X29yYWNsZSA9IGdydWJfemZzX2xvYWRf a2V5X29yYWNsZSwKKyAgLmxvYWRfa2V5X2RhdHRvID0gZ3J1Yl96ZnNfbG9hZF9rZXlfZGF0dG8s Cit9Owogc3RhdGljIGdydWJfZXh0Y21kX3QgY21kX2tleTsKIAogR1JVQl9NT0RfSU5JVCh6ZnNj cnlwdCkKIHsKLSAgZ3J1Yl96ZnNfZGVjcnlwdCA9IGdydWJfemZzX2RlY3J5cHRfcmVhbDsKLSAg Z3J1Yl96ZnNfbG9hZF9rZXkgPSBncnViX3pmc19sb2FkX2tleV9yZWFsOworICBncnViX3pmc19k ZWNyeXB0ID0gJmdydWJfemZzX2RlY3J5cHRfcmVhbDsKICAgY21kX2tleSA9IGdydWJfcmVnaXN0 ZXJfZXh0Y21kICgiemZza2V5IiwgZ3J1Yl9jbWRfemZzX2tleSwgMCwKIAkJCQkgIE5fKCJbLWh8 LXB8LXJdIFtGSUxFXSIpLAogCQkJCSAgTl8oIkltcG9ydCBaRlMgd3JhcHBpbmcga2V5IHN0b3Jl ZCBpbiBGSUxFLiIpLApAQCAtNDg2LDYgKzc1OCw1IEBAIEdSVUJfTU9EX0lOSVQoemZzY3J5cHQp CiBHUlVCX01PRF9GSU5JKHpmc2NyeXB0KQogewogICBncnViX3pmc19kZWNyeXB0ID0gMDsKLSAg Z3J1Yl96ZnNfbG9hZF9rZXkgPSAwOwogICBncnViX3VucmVnaXN0ZXJfZXh0Y21kIChjbWRfa2V5 KTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ3J1Yi96ZnMvemZzLmggYi9pbmNsdWRlL2dydWIv emZzL3pmcy5oCmluZGV4IDBjNWM0MGE3My4uZmJhYzM2OGIwIDEwMDY0NAotLS0gYS9pbmNsdWRl L2dydWIvemZzL3pmcy5oCisrKyBiL2luY2x1ZGUvZ3J1Yi96ZnMvemZzLmgKQEAgLTE0NywyMCAr MTQ3LDQ2IEBAIGdydWJfemZzX2FkZF9rZXkgKGdydWJfdWludDhfdCAqa2V5X2luLAogCQkgIGdy dWJfc2l6ZV90IGtleWxlbiwKIAkJICBpbnQgcGFzc3BocmFzZSk7CiAKLWV4dGVybiBncnViX2Vy cl90ICgqZ3J1Yl96ZnNfZGVjcnlwdCkgKGdydWJfY3J5cHRvX2NpcGhlcl9oYW5kbGVfdCBjaXBo ZXIsCi0JCQkJICAgICAgIGdydWJfdWludDY0X3QgYWxnbywKLQkJCQkgICAgICAgY29uc3Qgdm9p ZCAqbm9uY2UsCi0JCQkJICAgICAgIGNoYXIgKmJ1ZiwgZ3J1Yl9zaXplX3Qgc2l6ZSwKLQkJCQkg ICAgICAgY29uc3QgZ3J1Yl91aW50MzJfdCAqZXhwZWN0ZWRfbWFjLAotCQkJCSAgICAgICBncnVi X3pmc19lbmRpYW5fdCBlbmRpYW4pOwotCi1zdHJ1Y3QgZ3J1Yl96ZnNfa2V5OwotCi1leHRlcm4g Z3J1Yl9jcnlwdG9fY2lwaGVyX2hhbmRsZV90ICgqZ3J1Yl96ZnNfbG9hZF9rZXkpIChjb25zdCBz dHJ1Y3QgZ3J1Yl96ZnNfa2V5ICprZXksCi0JCQkJCQkJIGdydWJfc2l6ZV90IGtleXNpemUsCi0J CQkJCQkJIGdydWJfdWludDY0X3Qgc2FsdCwKLQkJCQkJCQkgZ3J1Yl91aW50NjRfdCBhbGdvKTsK LQorc3RydWN0IGdydWJfemZzX2tleV9vcmFjbGU7CisKK3N0cnVjdCBncnViX3pmc19kYXR0b19r ZXkKK3sKKyAgZ3J1Yl91aW50OF90ICptYXN0ZXJfa2V5OworICBncnViX3NpemVfdCBtYXN0ZXJf a2V5bGVuOworICBncnViX3VpbnQ4X3QgKmhtYWNfa2V5OworICBncnViX3VpbnQ2NF90IGFsZ287 Cit9OworCitzdHJ1Y3QgZ3J1Yl96ZnNfZGVjcnlwdG9yCit7CisgIGdydWJfZXJyX3QgKCpkZWNy eXB0X29yYWNsZSkgKGdydWJfY3J5cHRvX2NpcGhlcl9oYW5kbGVfdCBjaXBoZXIsCisJCQkJZ3J1 Yl91aW50NjRfdCBhbGdvLAorCQkJCWNvbnN0IHZvaWQgKm5vbmNlLAorCQkJCWNoYXIgKmJ1Ziwg Z3J1Yl9zaXplX3Qgc2l6ZSwKKwkJCQljb25zdCBncnViX3VpbnQzMl90ICpleHBlY3RlZF9tYWMs CisJCQkJZ3J1Yl96ZnNfZW5kaWFuX3QgZW5kaWFuKTsKKworICBncnViX2NyeXB0b19jaXBoZXJf aGFuZGxlX3QgKCpsb2FkX2tleV9vcmFjbGUpIChjb25zdCBzdHJ1Y3QgZ3J1Yl96ZnNfa2V5X29y YWNsZSAqa2V5LAorCQkJCQkJICBncnViX3NpemVfdCBrZXlzaXplLAorCQkJCQkJICBncnViX3Vp bnQ2NF90IHNhbHQsCisJCQkJCQkgIGdydWJfdWludDY0X3QgYWxnbyk7CisKKyAgZ3J1Yl9lcnJf dCAoKmRlY3J5cHRfZGF0dG8pIChjb25zdCBzdHJ1Y3QgZ3J1Yl96ZnNfZGF0dG9fa2V5ICprZXks CisJCQkgICAgICAgY29uc3QgZ3J1Yl91aW50MzJfdCAqbm9uY2UsIGdydWJfdWludDY0X3Qgc2Fs dCwKKwkJCSAgICAgICBjaGFyICpidWYsIGdydWJfc2l6ZV90IHNpemUsCisJCQkgICAgICAgY29u c3QgY2hhciAqYWFkYnVmLCBncnViX3NpemVfdCBhYWRzaXplLAorCQkJICAgICAgIGNvbnN0IGdy dWJfdWludDY0X3QgKmV4cGVjdGVkX21hYywKKwkJCSAgICAgICBncnViX3pmc19lbmRpYW5fdCBl bmRpYW4pOworCisgIHN0cnVjdCBncnViX3pmc19kYXR0b19rZXkgKCpsb2FkX2tleV9kYXR0bykg KGNvbnN0IGdydWJfdWludDhfdCAqaXYsIGdydWJfc2l6ZV90IGl2bGVuLAorCQkJCQkgICAgICAg Y29uc3QgZ3J1Yl91aW50OF90ICptYWMsIGdydWJfc2l6ZV90IG1hY2xlbiwKKwkJCQkJICAgICAg IGNvbnN0IGdydWJfdWludDhfdCAqbWFzdGVyLCBncnViX3NpemVfdCBtYXN0ZXJsZW4sCisJCQkJ CSAgICAgICBjb25zdCBncnViX3VpbnQ4X3QgKmhtYWMsIGdydWJfc2l6ZV90IGhtYWNsZW4sCisJ CQkJCSAgICAgICBjb25zdCBncnViX3VpbnQ4X3QgKnBia2RmMnNhbHQsIGdydWJfc2l6ZV90IHBi a2RmMnNhbHRsZW4sCisJCQkJCSAgICAgICBncnViX3VpbnQ2NF90IHBia2RmMml0ZXJzLCBncnVi X3VpbnQ2NF90IGd1aWQsIGdydWJfdWludDY0X3QgYWxnbywgZ3J1Yl91aW50NjRfdCB2ZXJzaW9u KTsKK307CisKK2V4dGVybiBzdHJ1Y3QgZ3J1Yl96ZnNfZGVjcnlwdG9yICpncnViX3pmc19kZWNy eXB0OwogCiAKICNlbmRpZgkvKiAhIEdSVUJfWkZTX0hFQURFUiAqLwotLSAKMi40OS4wCgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KR3J1Yi1kZXZlbCBt YWlsaW5nIGxpc3QKR3J1Yi1kZXZlbEBnbnUub3JnCmh0dHBzOi8vbGlzdHMuZ251Lm9yZy9tYWls bWFuL2xpc3RpbmZvL2dydWItZGV2ZWwK