Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qwdIH-00DMDL-OB for pgsql-bugs@arkaria.postgresql.org; Sat, 28 Oct 2023 06:59:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qwdIE-003LBu-8E for pgsql-bugs@arkaria.postgresql.org; Sat, 28 Oct 2023 06:59:34 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qwdID-003LBm-Pn for pgsql-bugs@lists.postgresql.org; Sat, 28 Oct 2023 06:59:34 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qwdIA-003KN2-GG for pgsql-bugs@lists.postgresql.org; Sat, 28 Oct 2023 06:59:32 +0000 Received: from [192.168.1.35] (cm-27-145-170-25.revip12.asianet.co.th [27.145.170.25]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: a.lepikhov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 50238E203E9; Sat, 28 Oct 2023 09:59:26 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1698476369; bh=IsBbPAV6IoMc/B3BGvw+tnDv/yEB4n0mT9gcdAIQ1s0=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=W+VKqH7mELY01+397tGYOZ2p3CKxgkUSLuLDU0zE7IlfK3cNphBS40zj9NYACJSiO 44VYWUEiPqagDOTPxj0MTDLvx14dMakCafptm90uuU/10p/SzXUadlQSpCBGosxE9G EkeByRKLtrMRVq5ozPoHKzDRd6DZzoOYIdkbWfcEmTAE8Xs/itopHo/oYoMC3pMlCb 7orMzKuwwy0QK4OF4lSZKvBNh14MpM2leRu1NlytBbpGQfFBCn3l2oZk5rSD1UMFfd JjEiegNVMp/bfhbgRV1hVjkZpCcYg2RwjSfu0cv/svrMFtnU5O3jQkAx3DhDKE4JD7 OGc1Regd6jXBA== Content-Type: multipart/mixed; boundary="------------k26DiwdQsnAeQBF2eGUQl0U0" Message-ID: Date: Sat, 28 Oct 2023 13:59:23 +0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: BUG #18170: Unexpected error: no relation entry for relid 3 To: Richard Guo Cc: Alexander Korotkov , Tom Lane , Vik Fearing , zuming.jiang@inf.ethz.ch, pgsql-bugs@lists.postgresql.org, Alexander Korotkov References: <18170-f1d17bf9a0d58b24@postgresql.org> <4ecab120-6be3-4cf6-a2a0-249c73ae91d4@postgresfriends.org> <1189851.1698340331@sss.pgh.pa.us> <011bcae5-7840-42c7-a50c-b406189e2e78@postgrespro.ru> <721542ce-79df-469e-93e9-811fadb5bd0c@postgrespro.ru> <2eb87c2e-7e6f-4002-8df3-8fac3aa6a037@postgrespro.ru> Content-Language: en-US From: Andrei Lepikhov Organization: Postgres Professional In-Reply-To: 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. --------------k26DiwdQsnAeQBF2eGUQl0U0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 27/10/2023 21:10, Richard Guo wrote: > > On Fri, Oct 27, 2023 at 7:00 PM Andrei Lepikhov > > wrote: > > So, I can propose two options. First - don't clean only the current > root > structure, but also make cleanup of the parent. Although it looks safe, > I am not happy with this approach - it seems too simple: we should have > a genuine reason for such a cleaning because it potentially adds > overhead. > The second option is to add a flag for not altering queries in > remove_nulling_relids() - it looks like a mistake when we have two > different query trees in the root and its parent. Also, it reduces > memory usage a bit. > So, if my analysis is correct, it is better to use the second way (see > attachment). > > > Alternatively, can we look at subroot->parse->targetList instead of > subquery->targetList where we call estimate_num_groups on the output of > the subquery? It is a solution. But does it mask the real problem? In my mind, we copy node trees to use somewhere else or probe a conjecture. Here, we have two different representations of the same subquery. Keeping aside the memory consumption issue, is it correct? Make sense to apply both options: switch the groups estimation to subroot targetList and keep one version of a subquery. In attachment - second (combined) version of the change. Here I added assertions to check identity of root->parse and incoming query tree. > > --- a/src/backend/optimizer/prep/prepunion.c > +++ b/src/backend/optimizer/prep/prepunion.c > @@ -341,7 +341,7 @@ recurse_set_operations(Node *setOp, PlannerInfo *root, >         *pNumGroups = subpath->rows; >     else >         *pNumGroups = estimate_num_groups(subroot, > - > get_tlist_exprs(subquery->targetList, false), > + > get_tlist_exprs(subroot->parse->targetList, false), >                                           subpath->rows, >                                           NULL, >                                           NULL); > > BTW, I'm a little surprised that QTW_DONT_COPY_QUERY doesn't seem to be > used anywhere currently. I too. But we use this flag in the enterprise fork to reduce memory consumption. It could be proposed for upstream, but looks a bit unsafe. I guess, some extensions could do the same. -- regards, Andrei Lepikhov Postgres Professional --------------k26DiwdQsnAeQBF2eGUQl0U0 Content-Type: text/plain; charset=UTF-8; name="v2-0001-Don-t-alter-parse-tree-during-the-procedure-of-outer.patch" Content-Disposition: attachment; filename*0="v2-0001-Don-t-alter-parse-tree-during-the-procedure-of-outer"; filename*1=".patch" Content-Transfer-Encoding: base64 RnJvbSA1OTkyY2MyMGZhYmVkMjFiZDQ5MzI2OGFlM2ZiOTZiNDg5MWFkYWRkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmV5IFYuIExlcGlraG92IiA8YS5sZXBpa2hv dkBwb3N0Z3Jlc3Byby5ydT4KRGF0ZTogRnJpLCAyNyBPY3QgMjAyMyAxNzo1NTowNCArMDcw MApTdWJqZWN0OiBbUEFUQ0hdIERvbid0IGFsdGVyIHBhcnNlIHRyZWUgZHVyaW5nIHRoZSBw cm9jZWR1cmUgb2Ygb3V0ZXIgam9pbgogcmVkdWN0aW9uLgoKLS0tCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jICAgICB8ICAzICsrKwogc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbm5lci5jICAgICAgfCAgMyArKysKIHNyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL3N1YnNlbGVjdC5jICAgIHwgIDkgKysrKysrKysrCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvcHJlcC9wcmVwam9pbnRyZWUuYyB8IDI0ICsrKysrKysrKysrLS0tLS0tLS0t LS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYyAgICB8ICA1ICsr KystCiBzcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVNYW5pcC5jICAgICAgICB8IDEwICsr KysrKysrKy0KIHNyYy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmggICAgICAgIHwg IDUgKysrKy0KIDcgZmlsZXMgY2hhbmdlZCwgNDQgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0 aHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKaW5kZXggNjc5 MjFhMDgyNi4uZThjNTdiNGUyZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BhdGgvYWxscGF0aHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxw YXRocy5jCkBAIC0yNjUyLDYgKzI2NTIsOSBAQCBzZXRfc3VicXVlcnlfcGF0aGxpc3QoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCXJvb3QsCiAJCQkJ CQkJCQlmYWxzZSwgdHVwbGVfZnJhY3Rpb24pOwogCisJLyogS2VlcCBvbmx5IG9uZSBjb3B5 IG9mIHRoZSBzdWJxdWVyeSAqLworCUFzc2VydChzdWJxdWVyeSA9PSByZWwtPnN1YnJvb3Qt PnBhcnNlKTsKKwogCS8qIElzb2xhdGUgdGhlIHBhcmFtcyBuZWVkZWQgYnkgdGhpcyBzcGVj aWZpYyBzdWJwbGFuICovCiAJcmVsLT5zdWJwbGFuX3BhcmFtcyA9IHJvb3QtPnBsYW5fcGFy YW1zOwogCXJvb3QtPnBsYW5fcGFyYW1zID0gTklMOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vcGxhbm5lci5jCmluZGV4IGE4Y2VhNWVmZTEuLjUwMTY4OGMwMTIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTQxMyw2ICs0MTMsOSBAQCBzdGFuZGFy ZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLCBpbnQg Y3Vyc29yT3B0aW9ucywKIAlyb290ID0gc3VicXVlcnlfcGxhbm5lcihnbG9iLCBwYXJzZSwg TlVMTCwKIAkJCQkJCQlmYWxzZSwgdHVwbGVfZnJhY3Rpb24pOwogCisJLyogS2VlcCBvbmx5 IG9uZSBjb3B5IG9mIHRoZSBzdWJxdWVyeSAqLworCUFzc2VydChwYXJzZSA9PSByb290LT5w YXJzZSk7CisKIAkvKiBTZWxlY3QgYmVzdCBQYXRoIGFuZCB0dXJuIGl0IGludG8gYSBQbGFu ICovCiAJZmluYWxfcmVsID0gZmV0Y2hfdXBwZXJfcmVsKHJvb3QsIFVQUEVSUkVMX0ZJTkFM LCBOVUxMKTsKIAliZXN0X3BhdGggPSBnZXRfY2hlYXBlc3RfZnJhY3Rpb25hbF9wYXRoKGZp bmFsX3JlbCwgdHVwbGVfZnJhY3Rpb24pOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vc3Vic2VsZWN0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9z dWJzZWxlY3QuYwppbmRleCA3YTlmZTg4ZmVjLi45MmFjNWYwOTMxIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3QuYworKysgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3QuYwpAQCAtMjIyLDYgKzIyMiw5IEBAIG1ha2Vf c3VicGxhbihQbGFubmVySW5mbyAqcm9vdCwgUXVlcnkgKm9yaWdfc3VicXVlcnksCiAJCQkJ CQkJICAgcm9vdCwKIAkJCQkJCQkgICBmYWxzZSwgdHVwbGVfZnJhY3Rpb24pOwogCisJLyog S2VlcCBvbmx5IG9uZSBjb3B5IG9mIHRoZSBzdWJxdWVyeSAqLworCUFzc2VydChzdWJxdWVy eSA9PSBzdWJyb290LT5wYXJzZSk7CisKIAkvKiBJc29sYXRlIHRoZSBwYXJhbXMgbmVlZGVk IGJ5IHRoaXMgc3BlY2lmaWMgc3VicGxhbiAqLwogCXBsYW5fcGFyYW1zID0gcm9vdC0+cGxh bl9wYXJhbXM7CiAJcm9vdC0+cGxhbl9wYXJhbXMgPSBOSUw7CkBAIC0yNjksNiArMjcyLDkg QEAgbWFrZV9zdWJwbGFuKFBsYW5uZXJJbmZvICpyb290LCBRdWVyeSAqb3JpZ19zdWJxdWVy eSwKIAkJCQkJCQkJCSAgIHJvb3QsCiAJCQkJCQkJCQkgICBmYWxzZSwgMC4wKTsKIAorCQkJ LyogS2VlcCBvbmx5IG9uZSBjb3B5IG9mIHRoZSBzdWJxdWVyeSAqLworCQkJQXNzZXJ0KHN1 YnF1ZXJ5ID09IHN1YnJvb3QtPnBhcnNlKTsKKwogCQkJLyogSXNvbGF0ZSB0aGUgcGFyYW1z IG5lZWRlZCBieSB0aGlzIHNwZWNpZmljIHN1YnBsYW4gKi8KIAkJCXBsYW5fcGFyYW1zID0g cm9vdC0+cGxhbl9wYXJhbXM7CiAJCQlyb290LT5wbGFuX3BhcmFtcyA9IE5JTDsKQEAgLTk4 Miw2ICs5ODgsOSBAQCBTU19wcm9jZXNzX2N0ZXMoUGxhbm5lckluZm8gKnJvb3QpCiAJCQkJ CQkJCSAgIHJvb3QsCiAJCQkJCQkJCSAgIGN0ZS0+Y3RlcmVjdXJzaXZlLCAwLjApOwogCisJ CS8qIEtlZXAgb25seSBvbmUgY29weSBvZiB0aGUgc3VicXVlcnkgKi8KKwkJQXNzZXJ0KHN1 YnF1ZXJ5ID09IHN1YnJvb3QtPnBhcnNlKTsKKwogCQkvKgogCQkgKiBTaW5jZSB0aGUgY3Vy cmVudCBxdWVyeSBsZXZlbCBkb2Vzbid0IHlldCBjb250YWluIGFueSBSVEVzLCBpdAogCQkg KiBzaG91bGQgbm90IGJlIHBvc3NpYmxlIGZvciB0aGUgQ1RFIHRvIGhhdmUgcmVxdWVzdGVk IHBhcmFtZXRlcnMgb2YKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVw L3ByZXBqb2ludHJlZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50 cmVlLmMKaW5kZXggNzNmZjQwNzIxYy4uZGIwNjY4ZjYxZiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMKQEAgLTI2ODcsMTQgKzI2ODcsMTQgQEAg cmVkdWNlX291dGVyX2pvaW5zKFBsYW5uZXJJbmZvICpyb290KQogCWlmICghYm1zX2lzX2Vt cHR5KHN0YXRlMi5pbm5lcl9yZWR1Y2VkKSkKIAl7CiAJCXJvb3QtPnBhcnNlID0gKFF1ZXJ5 ICopCi0JCQlyZW1vdmVfbnVsbGluZ19yZWxpZHMoKE5vZGUgKikgcm9vdC0+cGFyc2UsCisJ CQlyZW1vdmVfbnVsbGluZ19yZWxpZHNfZXh0KChOb2RlICopIHJvb3QtPnBhcnNlLAogCQkJ CQkJCQkgIHN0YXRlMi5pbm5lcl9yZWR1Y2VkLAotCQkJCQkJCQkgIE5VTEwpOworCQkJCQkJ CQkgIE5VTEwsIFFUV19ET05UX0NPUFlfUVVFUlkpOwogCQkvKiBUaGVyZSBjb3VsZCBiZSBy ZWZlcmVuY2VzIGluIHRoZSBhcHBlbmRfcmVsX2xpc3QsIHRvbyAqLwogCQlyb290LT5hcHBl bmRfcmVsX2xpc3QgPSAoTGlzdCAqKQotCQkJcmVtb3ZlX251bGxpbmdfcmVsaWRzKChOb2Rl ICopIHJvb3QtPmFwcGVuZF9yZWxfbGlzdCwKKwkJCXJlbW92ZV9udWxsaW5nX3JlbGlkc19l eHQoKE5vZGUgKikgcm9vdC0+YXBwZW5kX3JlbF9saXN0LAogCQkJCQkJCQkgIHN0YXRlMi5p bm5lcl9yZWR1Y2VkLAotCQkJCQkJCQkgIE5VTEwpOworCQkJCQkJCQkgIE5VTEwsIFFUV19E T05UX0NPUFlfUVVFUlkpOwogCX0KIAogCS8qCkBAIC0yNzA3LDEzICsyNzA3LDEzIEBAIHJl ZHVjZV9vdXRlcl9qb2lucyhQbGFubmVySW5mbyAqcm9vdCkKIAkJUmVsaWRzCQlmdWxsX2pv aW5fcmVsaWRzID0gYm1zX21ha2Vfc2luZ2xldG9uKHN0YXRlcC0+ZnVsbF9qb2luX3J0aSk7 CiAKIAkJcm9vdC0+cGFyc2UgPSAoUXVlcnkgKikKLQkJCXJlbW92ZV9udWxsaW5nX3JlbGlk cygoTm9kZSAqKSByb290LT5wYXJzZSwKKwkJCXJlbW92ZV9udWxsaW5nX3JlbGlkc19leHQo KE5vZGUgKikgcm9vdC0+cGFyc2UsCiAJCQkJCQkJCSAgZnVsbF9qb2luX3JlbGlkcywKLQkJ CQkJCQkJICBzdGF0ZXAtPnVucmVkdWNlZF9zaWRlKTsKKwkJCQkJCQkJICBzdGF0ZXAtPnVu cmVkdWNlZF9zaWRlLCBRVFdfRE9OVF9DT1BZX1FVRVJZKTsKIAkJcm9vdC0+YXBwZW5kX3Jl bF9saXN0ID0gKExpc3QgKikKLQkJCXJlbW92ZV9udWxsaW5nX3JlbGlkcygoTm9kZSAqKSBy b290LT5hcHBlbmRfcmVsX2xpc3QsCisJCQlyZW1vdmVfbnVsbGluZ19yZWxpZHNfZXh0KChO b2RlICopIHJvb3QtPmFwcGVuZF9yZWxfbGlzdCwKIAkJCQkJCQkJICBmdWxsX2pvaW5fcmVs aWRzLAotCQkJCQkJCQkgIHN0YXRlcC0+dW5yZWR1Y2VkX3NpZGUpOworCQkJCQkJCQkgIHN0 YXRlcC0+dW5yZWR1Y2VkX3NpZGUsIFFUV19ET05UX0NPUFlfUVVFUlkpOwogCX0KIH0KIApA QCAtMzE3MiwxNCArMzE3MiwxNCBAQCByZW1vdmVfdXNlbGVzc19yZXN1bHRfcnRlcyhQbGFu bmVySW5mbyAqcm9vdCkKIAlpZiAoIWJtc19pc19lbXB0eShkcm9wcGVkX291dGVyX2pvaW5z KSkKIAl7CiAJCXJvb3QtPnBhcnNlID0gKFF1ZXJ5ICopCi0JCQlyZW1vdmVfbnVsbGluZ19y ZWxpZHMoKE5vZGUgKikgcm9vdC0+cGFyc2UsCisJCQlyZW1vdmVfbnVsbGluZ19yZWxpZHNf ZXh0KChOb2RlICopIHJvb3QtPnBhcnNlLAogCQkJCQkJCQkgIGRyb3BwZWRfb3V0ZXJfam9p bnMsCi0JCQkJCQkJCSAgTlVMTCk7CisJCQkJCQkJCSAgTlVMTCwgUVRXX0RPTlRfQ09QWV9R VUVSWSk7CiAJCS8qIFRoZXJlIGNvdWxkIGJlIHJlZmVyZW5jZXMgaW4gdGhlIGFwcGVuZF9y ZWxfbGlzdCwgdG9vICovCiAJCXJvb3QtPmFwcGVuZF9yZWxfbGlzdCA9IChMaXN0ICopCi0J CQlyZW1vdmVfbnVsbGluZ19yZWxpZHMoKE5vZGUgKikgcm9vdC0+YXBwZW5kX3JlbF9saXN0 LAorCQkJcmVtb3ZlX251bGxpbmdfcmVsaWRzX2V4dCgoTm9kZSAqKSByb290LT5hcHBlbmRf cmVsX2xpc3QsCiAJCQkJCQkJCSAgZHJvcHBlZF9vdXRlcl9qb2lucywKLQkJCQkJCQkJICBO VUxMKTsKKwkJCQkJCQkJICBOVUxMLCBRVFdfRE9OVF9DT1BZX1FVRVJZKTsKIAl9CiAKIAkv KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYwppbmRleCAwYzY4ZWMw MTFiLi5mYmUzOWUyMGZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJl cC9wcmVwdW5pb24uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5p b24uYwpAQCAtMjQzLDYgKzI0Myw5IEBAIHJlY3Vyc2Vfc2V0X29wZXJhdGlvbnMoTm9kZSAq c2V0T3AsIFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJICBmYWxzZSwKIAkJCQkJ CQkJCQkJCSAgcm9vdC0+dHVwbGVfZnJhY3Rpb24pOwogCisJCS8qIEtlZXAgb25seSBvbmUg Y29weSBvZiB0aGUgc3VicXVlcnkgKi8KKwkJQXNzZXJ0KHJ0ZS0+c3VicXVlcnkgPT0gc3Vi cm9vdC0+cGFyc2UpOworCiAJCS8qCiAJCSAqIEl0IHNob3VsZCBub3QgYmUgcG9zc2libGUg Zm9yIHRoZSBwcmltaXRpdmUgcXVlcnkgdG8gY29udGFpbiBhbnkKIAkJICogY3Jvc3MtcmVm ZXJlbmNlcyB0byBvdGhlciBwcmltaXRpdmUgcXVlcmllcyBpbiB0aGUgc2V0b3AgdHJlZS4K QEAgLTM0MSw3ICszNDQsNyBAQCByZWN1cnNlX3NldF9vcGVyYXRpb25zKE5vZGUgKnNldE9w LCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkqcE51bUdyb3VwcyA9IHN1YnBhdGgtPnJvd3M7 CiAJCQllbHNlCiAJCQkJKnBOdW1Hcm91cHMgPSBlc3RpbWF0ZV9udW1fZ3JvdXBzKHN1YnJv b3QsCi0JCQkJCQkJCQkJCQkgIGdldF90bGlzdF9leHBycyhzdWJxdWVyeS0+dGFyZ2V0TGlz dCwgZmFsc2UpLAorCQkJCQkJCQkJCQkJICBnZXRfdGxpc3RfZXhwcnMoc3Vicm9vdC0+cGFy c2UtPnRhcmdldExpc3QsIGZhbHNlKSwKIAkJCQkJCQkJCQkJCSAgc3VicGF0aC0+cm93cywK IAkJCQkJCQkJCQkJCSAgTlVMTCwKIAkJCQkJCQkJCQkJCSAgTlVMTCk7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVNYW5pcC5jIGIvc3JjL2JhY2tlbmQvcmV3 cml0ZS9yZXdyaXRlTWFuaXAuYwppbmRleCAzMmJkMmYxZGM5Li4xZmRmYjA1Y2ZiIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVNYW5pcC5jCisrKyBiL3NyYy9i YWNrZW5kL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmMKQEAgLTEyMjYsNiArMTIyNiwxNCBAQCBO b2RlICoKIHJlbW92ZV9udWxsaW5nX3JlbGlkcyhOb2RlICpub2RlLAogCQkJCQkgIGNvbnN0 IEJpdG1hcHNldCAqcmVtb3ZhYmxlX3JlbGlkcywKIAkJCQkJICBjb25zdCBCaXRtYXBzZXQg KmV4Y2VwdF9yZWxpZHMpCit7CisJcmV0dXJuIHJlbW92ZV9udWxsaW5nX3JlbGlkc19leHQo bm9kZSwgcmVtb3ZhYmxlX3JlbGlkcywgZXhjZXB0X3JlbGlkcywgMCk7CisKK30KK05vZGUg KgorcmVtb3ZlX251bGxpbmdfcmVsaWRzX2V4dChOb2RlICpub2RlLAorCQkJCQkJICBjb25z dCBCaXRtYXBzZXQgKnJlbW92YWJsZV9yZWxpZHMsCisJCQkJCQkgIGNvbnN0IEJpdG1hcHNl dCAqZXhjZXB0X3JlbGlkcywgaW50IGZsYWdzKQogewogCXJlbW92ZV9udWxsaW5nX3JlbGlk c19jb250ZXh0IGNvbnRleHQ7CiAKQEAgLTEyMzUsNyArMTI0Myw3IEBAIHJlbW92ZV9udWxs aW5nX3JlbGlkcyhOb2RlICpub2RlLAogCXJldHVybiBxdWVyeV9vcl9leHByZXNzaW9uX3Ry ZWVfbXV0YXRvcihub2RlLAogCQkJCQkJCQkJCQlyZW1vdmVfbnVsbGluZ19yZWxpZHNfbXV0 YXRvciwKIAkJCQkJCQkJCQkJJmNvbnRleHQsCi0JCQkJCQkJCQkJCTApOworCQkJCQkJCQkJ CQlmbGFncyk7CiB9CiAKIHN0YXRpYyBOb2RlICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3Jld3JpdGUvcmV3cml0ZU1hbmlwLmggYi9zcmMvaW5jbHVkZS9yZXdyaXRlL3Jld3JpdGVN YW5pcC5oCmluZGV4IGNhMTI3ODBiYzcuLjZiYzdlNmYzNmUgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmgKKysrIGIvc3JjL2luY2x1ZGUvcmV3cml0 ZS9yZXdyaXRlTWFuaXAuaApAQCAtNzEsNyArNzEsMTAgQEAgZXh0ZXJuIE5vZGUgKmFkZF9u dWxsaW5nX3JlbGlkcyhOb2RlICpub2RlLAogZXh0ZXJuIE5vZGUgKnJlbW92ZV9udWxsaW5n X3JlbGlkcyhOb2RlICpub2RlLAogCQkJCQkJCQkgICBjb25zdCBCaXRtYXBzZXQgKnJlbW92 YWJsZV9yZWxpZHMsCiAJCQkJCQkJCSAgIGNvbnN0IEJpdG1hcHNldCAqZXhjZXB0X3JlbGlk cyk7Ci0KK2V4dGVybiBOb2RlICpyZW1vdmVfbnVsbGluZ19yZWxpZHNfZXh0KE5vZGUgKm5v ZGUsCisJCQkJCQkJCQkgICBjb25zdCBCaXRtYXBzZXQgKnJlbW92YWJsZV9yZWxpZHMsCisJ CQkJCQkJCQkgICBjb25zdCBCaXRtYXBzZXQgKmV4Y2VwdF9yZWxpZHMsCisJCQkJCQkJCQkg ICBpbnQgZmxhZ3MpOwogZXh0ZXJuIE5vZGUgKnJlcGxhY2VfcnRlX3ZhcmlhYmxlcyhOb2Rl ICpub2RlLAogCQkJCQkJCQkgICBpbnQgdGFyZ2V0X3Zhcm5vLCBpbnQgc3VibGV2ZWxzX3Vw LAogCQkJCQkJCQkgICByZXBsYWNlX3J0ZV92YXJpYWJsZXNfY2FsbGJhY2sgY2FsbGJhY2ss Ci0tIAoyLjQyLjAKCg== --------------k26DiwdQsnAeQBF2eGUQl0U0--