Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nAPeP-0007cg-N5 for pgsql-hackers@arkaria.postgresql.org; Thu, 20 Jan 2022 05:06:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nAPeO-000611-DP for pgsql-hackers@arkaria.postgresql.org; Thu, 20 Jan 2022 05:06:20 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nAPeN-00060s-PK for pgsql-hackers@lists.postgresql.org; Thu, 20 Jan 2022 05:06:20 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nAPeK-00045Z-69 for pgsql-hackers@lists.postgresql.org; Thu, 20 Jan 2022 05:06:18 +0000 Received: from [192.168.129.212] (unknown [91.205.25.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 3652921C3B0E; Thu, 20 Jan 2022 08:06:13 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1642655173; bh=kHhuV2VWL4h49jdkL4pKgrqm+4/6TKAdrWMfupuME2s=; h=From:Subject:To:Cc:References:Date:In-Reply-To; b=Pv9IzR3+tFIdDpHHx8hXKH5av6g+R2fD8zSlUlrhlsQZGFyaXmhCI/yebkMwluU60 plzvtHF+kZUVJV2mY+L2wwFFQQiXLIOoP1FittXfSGN3CmQ+SRmizJTup7772bxx98 q0UUOTX66jrSewB44OZ3LivW7LOt3YZEh2Cs9/tk= From: "Andrey V. Lepikhov" Subject: Re: POC: GROUP BY optimization To: Tomas Vondra , Teodor Sigaev Cc: Tomas Vondra , PostgreSQL Developers References: <20190524225725.embuha33qvc5avz3@development> <20200514235220.xewrrwjvatxzn3g6@development> <20201026085721.g6h5xljxvodnmk34@localhost> <20201026104040.6bigvej6f55vjvgp@localhost> <20201027201509.jfv6sfhrmxhdwlvk@development> <20201029145025.tn3tekboot37nkbf@localhost> <22c44f98-bfa8-8630-62b5-5155e11eb284@enterprisedb.com> <006667af-fc50-0627-4be7-5d9cf665219f@enterprisedb.com> Organization: Postgres Professional Message-ID: Date: Thu, 20 Jan 2022 10:05:57 +0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: <006667af-fc50-0627-4be7-5d9cf665219f@enterprisedb.com> Content-Type: multipart/mixed; boundary="------------754AA93233B6606F8A42B085" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------754AA93233B6606F8A42B085 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit I keep work on this patch. Here is intermediate results. On 7/22/21 3:58 AM, Tomas Vondra wrote: > in the first loop. Which seems pretty bogus - why would there be just > two groups? When processing the first expression, it's as if there was > one big "prev group" with all the tuples, so why not to just use nGroups > as it is? I think, heapsort code seems very strange. Look into fallback case. It based on an output_tuples value. Maybe we should use nGroups value here, but based on a number of output_tuples? > 1) I looked at the resources mentioned as sources the formulas came > from, but I've been unable to really match the algorithm to them. The > quicksort paper is particularly "dense", the notation seems to be very > different, and none of the theorems seem like an obvious fit. Would be > good to make the relationship clearer in comments etc. Fixed (See attachment). > 3) I'm getting a bit skeptical about the various magic coefficients that > are meant to model higher costs with non-uniform distribution. But > consider that we do this, for example: > > tuplesPerPrevGroup = ceil(1.5 * tuplesPerPrevGroup / nGroups); > > but then in the next loop we call estimate_num_groups_incremental and > pass this "tweaked" tuplesPerPrevGroup value to it. I'm pretty sure this > may have various strange consequences - we'll calculate the nGroups > based on the inflated value, and we'll calculate tuplesPerPrevGroup from > that again - that seems susceptible to "amplification". > > We inflate tuplesPerPrevGroup by 50%, which means we'll get a higher > nGroups estimate in the next loop - but not linearly. An then we'll > calculate the inflated tuplesPerPrevGroup and estimated nGroup ... Weighting coefficient '1.5' shows our desire to minimize the number of comparison operations on each next attribute of a pathkeys list. Increasing this coef we increase a chance, that planner will order pathkeys by decreasing of uniqueness. I think, it's ok. -- regards, Andrey Lepikhov Postgres Professional --------------754AA93233B6606F8A42B085 Content-Type: text/plain; charset=UTF-8; name="fixes.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="fixes.txt" RnJvbSBmYmM1ZTY3MDk1NTBmNDg1YTIxNTNkZGE5N2VmODA1NzAwNzE3ZjIzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXkgTGVwaWtob3YgPGEubGVwaWtob3ZAcG9z dGdyZXNwcm8ucnU+CkRhdGU6IEZyaSwgMjQgRGVjIDIwMjEgMTM6MDE6NDggKzA1MDAKU3Vi amVjdDogW1BBVENIXSBNeSBmaXhlcy4KCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvY29zdHNpemUuYyB8IDMzICsrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvcGF0aGtleXMuYyB8ICA5ICsrKystLS0tCiBzcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgIHwgIDggLS0tLS0tLQogMyBmaWxlcyBj aGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCAzMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwppbmRleCBhZmI4YmE1NGVhLi43MGFmOWM5MWQ1 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisr KyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTE4NDUsMTkg KzE4NDUsMTcgQEAgZ2V0X3dpZHRoX2Nvc3RfbXVsdGlwbGllcihQbGFubmVySW5mbyAqcm9v dCwgRXhwciAqZXhwcikKICAqIGdyb3VwcyBpbiB0aGUgY3VycmVudCBwYXRoa2V5IHByZWZp eCBhbmQgdGhlIG5ldyBwYXRoa2V5KSwgYW5kIHRoZSBjb21wYXJpc29uCiAgKiBjb3N0cyAo d2hpY2ggaXMgZGF0YSB0eXBlIHNwZWNpZmljKS4KICAqCi0gKiBFc3RpbWF0aW9uIG9mIHRo ZSBudW1iZXIgb2YgY29tcGFyaXNvbnMgaXMgYmFzZWQgb24gaWRlYXMgZnJvbSB0d28gc291 cmNlczoKKyAqIEVzdGltYXRpb24gb2YgdGhlIG51bWJlciBvZiBjb21wYXJpc29ucyBpcyBi YXNlZCBvbiBpZGVhcyBmcm9tOgogICoKLSAqIDEpICJBbGdvcml0aG1zIiAoY291cnNlKSwg Um9iZXJ0IFNlZGdld2ljaywgS2V2aW4gV2F5bmUgW2h0dHBzOi8vYWxnczQuY3MucHJpbmNl dG9uLmVkdS9ob21lL10KKyAqICJRdWlja3NvcnQgSXMgT3B0aW1hbCIsIFJvYmVydCBTZWRn ZXdpY2ssIEpvbiBCZW50bGV5LCAyMDAyCisgKiBbaHR0cHM6Ly93d3cuY3MucHJpbmNldG9u LmVkdS9+cnMvdGFsa3MvUXVpY2tzb3J0SXNPcHRpbWFsLnBkZl0KICAqCi0gKiAyKSAiUXVp Y2tzb3J0IElzIE9wdGltYWwgRm9yIE1hbnkgRXF1YWwgS2V5cyIgKHBhcGVyKSwgU2ViYXN0 aWFuIFdpbGQsCi0gKiBhclhpdjoxNjA4LjA0OTA2djQgW2NzLkRTXSAxIE5vdiAyMDE3LiBb aHR0cHM6Ly9hcnhpdi5vcmcvYWJzLzE2MDguMDQ5MDZdCi0gKgotICogSW4gdGVybSBvZiB0 aGF0IHBhcGVyLCBsZXQgTiAtIG51bWJlciBvZiB0dXBsZXMsIFhpIC0gbnVtYmVyIG9mIHR1 cGxlcyB3aXRoCi0gKiBrZXkgS2ksIHRoZW4gdGhlIGVzdGltYXRlIG9mIG51bWJlciBvZiBj b21wYXJpc29ucyBpczoKKyAqIEluIHRlcm0gb2YgdGhhdCBwYXBlciwgbGV0IE4gLSBudW1i ZXIgb2YgdHVwbGVzLCBYaSAtIG51bWJlciBvZiBpZGVudGljYWwKKyAqIHR1cGxlcyB3aXRo IHZhbHVlIEtpLCB0aGVuIHRoZSBlc3RpbWF0ZSBvZiBudW1iZXIgb2YgY29tcGFyaXNvbnMg aXM6CiAgKgogICoJbG9nKE4hIC8gKFgxISAqIFgyISAqIC4uKSkgIH4gIHN1bShYaSAqIGxv ZyhOL1hpKSkKICAqCi0gKiBJbiBvdXIgY2FzZSBhbGwgWGkgYXJlIHRoZSBzYW1lIGJlY2F1 c2Ugbm93IHdlIGRvbid0IGhhdmUgYW55IGVzdGltYXRpb24gb2YKKyAqIFdlIGFzc3VtZSBh bGwgWGkgdGhlIHNhbWUgYmVjYXVzZSBub3cgd2UgZG9uJ3QgaGF2ZSBhbnkgZXN0aW1hdGlv biBvZgogICogZ3JvdXAgc2l6ZXMsIHdlIGhhdmUgb25seSBrbm93IHRoZSBlc3RpbWF0ZSBv ZiBudW1iZXIgb2YgZ3JvdXBzIChkaXN0aW5jdAogICogdmFsdWVzKS4gSW4gdGhhdCBjYXNl LCBmb3JtdWxhIGJlY29tZXM6CiAgKgpAQCAtMTg2NSw3ICsxODYzLDcgQEAgZ2V0X3dpZHRo X2Nvc3RfbXVsdGlwbGllcihQbGFubmVySW5mbyAqcm9vdCwgRXhwciAqZXhwcikKICAqCiAg KiBGb3IgbXVsdGktY29sdW1uIHNvcnRzIHdlIG5lZWQgdG8gZXN0aW1hdGUgdGhlIG51bWJl ciBvZiBjb21wYXJpc29ucyBmb3IKICAqIGVhY2ggaW5kaXZpZHVhbCBjb2x1bW4gLSBmb3Ig ZXhhbXBsZSB3aXRoIGNvbHVtbnMgKGMxLCBjMiwgLi4uLCBjaykgd2UKLSAqIGNhbiBlc3Rp bWF0ZSB0aGF0IG51bWJlciBvZiBjb21wYXJpb25zIG9uIGNrIGlzIHJvdWdobHkKKyAqIGNh biBlc3RpbWF0ZSB0aGF0IG51bWJlciBvZiBjb21wYXJpc29ucyBvbiBjayBpcyByb3VnaGx5 CiAgKgogICoJbmNvbXBhcmlzb25zKGMxLCBjMiwgLi4uLCBjaykgLyBuY29tcGFyaXNvbnMo YzEsIGMyLCAuLi4sIGMoay0xKSkKICAqCkBAIC0xODc0LDEwICsxODcyLDEwIEBAIGdldF93 aWR0aF9jb3N0X211bHRpcGxpZXIoUGxhbm5lckluZm8gKnJvb3QsIEV4cHIgKmV4cHIpCiAg KgogICoJTiAqIHN1bSggRmsgKiBsb2coR2spICkKICAqCi0gKiBOb3RlOiBXZSBhbHNvIGNv bnNpZGVyIGNvbHVtbiB3aXRkdGgsIG5vdCBqdXN0IHRoZSBjb21wYXJhdG9yIGNvc3QuCisg KiBOb3RlOiBXZSBhbHNvIGNvbnNpZGVyIGNvbHVtbiB3aWR0aCwgbm90IGp1c3QgdGhlIGNv bXBhcmF0b3IgY29zdC4KICAqCiAgKiBOT1RFOiBzb21lIGNhbGxlcnMgY3VycmVudGx5IHBh c3MgTklMIGZvciBwYXRoa2V5cyBiZWNhdXNlIHRoZXkKLSAqIGNhbid0IGNvbnZlbmllbnRs eSBzdXBwbHkgdGhlIHNvcnQga2V5cy4gIEluIHRoaXMgY2FzZSwgaXQgd2lsbCBmYWxsYmFj ayB0bworICogY2FuJ3QgY29udmVuaWVudGx5IHN1cHBseSB0aGUgc29ydCBrZXlzLiBJbiB0 aGlzIGNhc2UsIGl0IHdpbGwgZmFsbGJhY2sgdG8KICAqIHNpbXBsZSBjb21wYXJpc29uIGNv c3QgZXN0aW1hdGUuCiAgKi8KIHN0YXRpYyBDb3N0CkBAIC0xOTI1LDEzICsxOTIzLDEzIEBA IGNvbXB1dGVfY3B1X3NvcnRfY29zdChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqcGF0aGtl eXMsIGludCBuUHJlc29ydGVkS2V5cywKIAkgKi8KIAlmb3JlYWNoKGxjLCBwYXRoa2V5cykK IAl7Ci0JCVBhdGhLZXkJCQkJKnBhdGhrZXkgPSAoUGF0aEtleSopbGZpcnN0KGxjKTsKKwkJ UGF0aEtleQkJCQkqcGF0aGtleSA9IChQYXRoS2V5KikgbGZpcnN0KGxjKTsKIAkJRXF1aXZh bGVuY2VNZW1iZXIJKmVtOwogCQlkb3VibGUJCQkJIG5Hcm91cHMsCiAJCQkJCQkJIGNvcnJl Y3RlZE5Hcm91cHM7CiAKIAkJLyoKLQkJICogV2UgYmVsaWV2ZSB0aGFuIGVxdWl2YWxlbmNl IG1lbWJlcnMgYXJlbid0IHZlcnkgIGRpZmZlcmVudCwgc28sIHRvCisJCSAqIFdlIGJlbGll dmUgdGhhdCBlcXVpdmFsZW5jZSBtZW1iZXJzIGFyZW4ndCB2ZXJ5IGRpZmZlcmVudCwgc28s IHRvCiAJCSAqIGVzdGltYXRlIGNvc3Qgd2UgdGFrZSBqdXN0IGZpcnN0IG1lbWJlcgogCQkg Ki8KIAkJZW0gPSAoRXF1aXZhbGVuY2VNZW1iZXIgKikgbGluaXRpYWwocGF0aGtleS0+cGtf ZWNsYXNzLT5lY19tZW1iZXJzKTsKQEAgLTE5NjQsNyArMTk2Miw3IEBAIGNvbXB1dGVfY3B1 X3NvcnRfY29zdChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqcGF0aGtleXMsIGludCBuUHJl c29ydGVkS2V5cywKIAogCQl0b3RhbEZ1bmNDb3N0ICs9IGZ1bmNDb3N0OwogCi0JCS8qIHJl bWViZXIgaWYgd2UgaGF2ZSBhIGZha2UgdmFyIGluIHBhdGhrZXlzICovCisJCS8qIFJlbWVt YmVyIGlmIHdlIGhhdmUgYSBmYWtlIHZhciBpbiBwYXRoa2V5cyAqLwogCQloYXNfZmFrZV92 YXIgfD0gaXNfZmFrZV92YXIoZW0tPmVtX2V4cHIpOwogCQlwYXRoa2V5RXhwcnMgPSBsYXBw ZW5kKHBhdGhrZXlFeHBycywgZW0tPmVtX2V4cHIpOwogCkBAIC0xOTc0LDcgKzE5NzIsNyBA QCBjb21wdXRlX2NwdV9zb3J0X2Nvc3QoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKnBhdGhr ZXlzLCBpbnQgblByZXNvcnRlZEtleXMsCiAJCSAqLwogCQlpZiAoaGFzX2Zha2VfdmFyID09 IGZhbHNlKQogCQkJLyoKLQkJCSAqIFJlY3Vyc2l2ZWx5IGNvbXB1dGUgbnVtYmVyIG9mIGdy b3VwIGluIGdyb3VwIGZyb20gcHJldmlvdXMgc3RlcAorCQkJICogUmVjdXJzaXZlbHkgY29t cHV0ZSBudW1iZXIgb2YgZ3JvdXBzIGluIGEgZ3JvdXAgZnJvbSBwcmV2aW91cyBzdGVwCiAJ CQkgKi8KIAkJCW5Hcm91cHMgPSBlc3RpbWF0ZV9udW1fZ3JvdXBzX2luY3JlbWVudGFsKHJv b3QsIHBhdGhrZXlFeHBycywKIAkJCQkJCQkJCQkJCQkgIHR1cGxlc1BlclByZXZHcm91cCwg TlVMTCwgTlVMTCwKQEAgLTE5OTIsOCArMTk5MCw3IEBAIGNvbXB1dGVfY3B1X3NvcnRfY29z dChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqcGF0aGtleXMsIGludCBuUHJlc29ydGVkS2V5 cywKIAkJCSAqCiAJCQkgKiBYWFggV2hhdCdzIHRoZSBsb2dpYyBvZiB0aGUgZm9sbG93aW5n IGZvcm11bGE/CiAJCQkgKi8KLQkJCW5Hcm91cHMgPSBjZWlsKDIuMCArIHNxcnQodHVwbGVz KSAqCi0JCQkJbGlzdF9sZW5ndGgocGF0aGtleUV4cHJzKSAvIGxpc3RfbGVuZ3RoKHBhdGhr ZXlzKSk7CisJCQluR3JvdXBzID0gY2VpbCgyLjAgKyBzcXJ0KHR1cGxlcykgKiAoaSArIDEp IC8gbGlzdF9sZW5ndGgocGF0aGtleXMpKTsKIAkJZWxzZQogCQkJbkdyb3VwcyA9IHR1cGxl czsKIApAQCAtMjAzMyw3ICsyMDMwLDcgQEAgY29tcHV0ZV9jcHVfc29ydF9jb3N0KFBsYW5u ZXJJbmZvICpyb290LCBMaXN0ICpwYXRoa2V5cywgaW50IG5QcmVzb3J0ZWRLZXlzLAogCiAJ CS8qCiAJCSAqIFdlIGNvdWxkIHNraXAgYWxsIGZvbGxvd2luZyBjb2x1bW5zIGZvciBjb3N0 IGVzdGltYXRpb24sIGJlY2F1c2Ugd2UKLQkJICogYmVsaWV2ZSB0aGF0IHR1cGxlcyBhcmUg dW5pcXVlIGJ5IHNldCBvdCBwcmV2aW91cyBjb2x1bW5zCisJCSAqIGJlbGlldmUgdGhhdCB0 dXBsZXMgYXJlIHVuaXF1ZSBieSB0aGUgc2V0IG9mIHByZXZpb3VzIGNvbHVtbnMKIAkJICov CiAJCWlmICh0dXBsZXNQZXJQcmV2R3JvdXAgPD0gMS4wKQogCQkJYnJlYWs7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9wYXRoa2V5cy5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvcGF0aGtleXMuYwppbmRleCA0NTcwMThjMmE0Li5mMTkxOTgy M2RhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9wYXRoa2V5cy5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3BhdGhrZXlzLmMKQEAgLTU0NCw5 ICs1NDQsMTAgQEAgUGF0aGtleU11dGF0b3JOZXh0KFBhdGhrZXlNdXRhdG9yU3RhdGUgKnN0 YXRlKQogCXJldHVybiBzdGF0ZS0+ZWxlbXNMaXN0OwogfQogCi10eXBlZGVmIHN0cnVjdCB7 Ci0JQ29zdCBjb3N0OwotCVBhdGhLZXkgKnBhdGhrZXk7Cit0eXBlZGVmIHN0cnVjdCBQYXRo a2V5U29ydENvc3QKK3sKKwlDb3N0CQljb3N0OworCVBhdGhLZXkJICAgKnBhdGhrZXk7CiB9 IFBhdGhrZXlTb3J0Q29zdDsKIAogc3RhdGljIGludApAQCAtNzkzLDcgKzc5NCw3IEBAIGdl dF91c2VmdWxfZ3JvdXBfa2V5c19vcmRlcmluZ3MoUGxhbm5lckluZm8gKnJvb3QsIGRvdWJs ZSBucm93cywKIAkgKiBtb3JlIGNvbXBsZXggbG9naWMgdG8gZGVjaWRlIHRoZSBvcmRlcmlu Zy4KIAkgKgogCSAqIFhYWCBJc24ndCB0aGlzIHNvbWV3aGF0IHJlZHVuZGFudCB3aXRoIHBy ZXNvcnRlZF9rZXlzPyBBY3R1YWxseSwgaXQncwotCSAqIG1vcmUgYSBjb21wbGVtZW50LCBi ZWNhdXNlIGl0IGFsbG93cyBiZW5lZmludGluZyBmcm9tIGluY3JlbWVudGFsIHNvcnQKKwkg KiBtb3JlIGEgY29tcGxlbWVudCwgYmVjYXVzZSBpdCBhbGxvd3MgYmVuZWZpdGluZyBmcm9t IGluY3JlbWVudGFsIHNvcnQKIAkgKiBhcyBtdWNoIGFzIHBvc3NpYmxlLgogCSAqCiAJICog WFhYIFRoaXMgZG9lcyBub3RoaW5nIGlmIChuX3ByZW9yZGVyZWQgPT0gMCkuIFdlIHNob3Vs ZG4ndCBjcmVhdGUgdGhlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5k ZXggZmFjNTgyMmU1Yi4uYTdlMzZlZDc2ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYwpAQCAtNjE1OCw3ICs2MTU4LDYgQEAgYWRkX3BhdGhzX3RvX2dyb3VwaW5n X3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQl7CiAJ CQlMaXN0Q2VsbCAgICpsYzI7CiAJCQlQYXRoCSAgICpwYXRoID0gKFBhdGggKikgbGZpcnN0 KGxjKTsKLQkJCVBhdGgJICAgKnBhdGhfc2F2ZSA9IHBhdGg7CiAJCQlQYXRoCSAgICpwYXRo X29yaWdpbmFsID0gcGF0aDsKIAogCQkJTGlzdAkgICAqcGF0aGtleV9vcmRlcmluZ3MgPSBO SUw7CkBAIC02MTgyLDkgKzYxODEsNiBAQCBhZGRfcGF0aHNfdG9fZ3JvdXBpbmdfcmVsKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1dF9yZWwsCiAJCQkJaW50CQkJcHJl c29ydGVkX2tleXMgPSAwOwogCQkJCVBhdGhLZXlJbmZvICppbmZvID0gKFBhdGhLZXlJbmZv ICopIGxmaXJzdChsYzIpOwogCi0JCQkJLyogcmVzdG9yZSB0aGUgcGF0aCAod2UgcmVwbGFj ZSBpdCBpbiB0aGUgbG9vcCkgKi8KLQkJCQlwYXRoID0gcGF0aF9zYXZlOwotCiAJCQkJaXNf c29ydGVkID0gcGF0aGtleXNfY291bnRfY29udGFpbmVkX2luKGluZm8tPnBhdGhrZXlzLAog CQkJCQkJCQkJCQkJCQlwYXRoLT5wYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkJJnByZXNvcnRl ZF9rZXlzKTsKQEAgLTY2NTMsNyArNjY0OSw2IEBAIGNyZWF0ZV9wYXJ0aWFsX2dyb3VwaW5n X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCQl7CiAJCQlMaXN0Q2VsbCAgICpsYzI7CiAJ CQlQYXRoCSAgICpwYXRoID0gKFBhdGggKikgbGZpcnN0KGxjKTsKLQkJCVBhdGgJICAgKnBh dGhfc2F2ZSA9IHBhdGg7CiAKIAkJCUxpc3QJICAgKnBhdGhrZXlfb3JkZXJpbmdzID0gTklM OwogCkBAIC02Njc2LDkgKzY2NzEsNiBAQCBjcmVhdGVfcGFydGlhbF9ncm91cGluZ19wYXRo cyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQlpbnQJCQlwcmVzb3J0ZWRfa2V5cyA9IDA7CiAJ CQkJUGF0aEtleUluZm8gKmluZm8gPSAoUGF0aEtleUluZm8gKikgbGZpcnN0KGxjMik7CiAK LQkJCQkvKiByZXN0b3JlIHRoZSBwYXRoICh3ZSByZXBsYWNlIGl0IGluIHRoZSBsb29wKSAq LwotCQkJCXBhdGggPSBwYXRoX3NhdmU7Ci0KIAkJCQlpc19zb3J0ZWQgPSBwYXRoa2V5c19j b3VudF9jb250YWluZWRfaW4oaW5mby0+cGF0aGtleXMsCiAJCQkJCQkJCQkJCQkJCXBhdGgt PnBhdGhrZXlzLAogCQkJCQkJCQkJCQkJCQkmcHJlc29ydGVkX2tleXMpOwotLSAKMi4yNS4x Cgo= --------------754AA93233B6606F8A42B085--