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 1u4L06-000rhg-1U for pgsql-bugs@arkaria.postgresql.org; Mon, 14 Apr 2025 14:41:30 +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 1u4L04-001QWL-35 for pgsql-bugs@arkaria.postgresql.org; Mon, 14 Apr 2025 14:41:28 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1u4L03-001QW6-Gl for pgsql-bugs@lists.postgresql.org; Mon, 14 Apr 2025 14:41:28 +0000 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1u4L01-0002Dc-0s for pgsql-bugs@lists.postgresql.org; Mon, 14 Apr 2025 14:41:27 +0000 Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-39ac8e7688aso2693783f8f.2 for ; Mon, 14 Apr 2025 07:41:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744641684; x=1745246484; darn=lists.postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=I+LnJKu5Nlp1VfuJ6mjDpNCgVYiIo8y4VEQoC6PC6mY=; b=Nzzh6/yGXhl2nFV7FVUfIMUGJGN/cdRBPKopJs3LWM4vPQUuFfaOPqZ8Lp1fYiynB5 ZYmDET7K2VLdz/3u163sDkf+dKG1C+2nC4nvfju3oWniaCiZACPlfve7ERiKcCerqwCT nQAGVyi2JMaAz9EsXuvKdFVc2QjckZ4Gwig27CvuERcNUSLBavUSHe6gbb7F95Dv2/DU AcKOYcjMotUCAHvWhQOYb/X5Q6kvORX4LvqRM+c4bqgxJtuiq2kN/MBaG8GpnKoVvH+V vG8Ttz3KDzZyjNrvJKoK+0NydWpwFiJTAXNxJTE5v5pGkRrSwmRm3aTF/g6up2DrS4Ld m47Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744641684; x=1745246484; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=I+LnJKu5Nlp1VfuJ6mjDpNCgVYiIo8y4VEQoC6PC6mY=; b=kuhp4iuZAIyW6phOdMbeGdABbN2YmcWEJq8zKVEzm0yVwnfBRXsHxyrUrAOHL0OhN2 PP5SyonZk3AkzTWlhyfcnJEFJszQQFY7Bu13JhkB/Ovy4uHujsGMteRteLawDwmrdjE3 dAy7YAftoSwy/q+JlJTs/FZFPcFWLGAAH30TA3ANXbiVzdvHDQzurMSGCfCN+ez7e45H v72VUWfk6I/L+j+F8Kl4pK4zePd0z4yBfZ4kEihRja4j6tMFybY6Mm1h4TSgrN0olEEX pPbxxEFt5/f/VSLieKP0fmiISrr3W2yKjRBXSmkI/gJ3nvu3xJvSoTuhUO5BDuQM67wl NSfA== X-Forwarded-Encrypted: i=1; AJvYcCXaxETUDG2whito+Shth69c0a7eWUO5WGC7f5QgRmCeoIDspgDomNRS3/7/HNR8eKOOM+s9xqYa0wCy@lists.postgresql.org X-Gm-Message-State: AOJu0YysQuOXYRRg7oL1YvxyGLRs0h4STweWCuNjgubWaCVnUNNYGjlh OYnztZBsWMzQA5v8i33xGf9Q/UiCCtJSTNNV+yCp9cQ/qrEWg9vG X-Gm-Gg: ASbGncsjG0L8ho66xc53lEfQPjESppj+2u2XbkL90ixoaBrvdNF3yA1KbET/p9AbY+u 1o/JFXAU0YyAhvhQAShUmSS/wFVocdR3CXC0z5rCQlJxivLriqUElz48KHgkLjm9h8sFRwaDFWV xCYpQzwek0ajUSlrviPt2Hx9+y5bhCb8/o4ll7gcQUIdGm2Ij7rAdmrNumTkc09Vf64fxJgIaEP qxtVm8jo2aflHL047eyjbVIjXMkXTUz+btbmfjhgoVVzeaUNW4yaBrqX3YFcz+lseTq+j5Mq8z+ OgUwXacpSEw4b2p69IuLGFqFIywAvdkgMdK4MXDtjpWjshjTl/h1QHnctJ+rgN3byiLvC9qKoOE = X-Google-Smtp-Source: AGHT+IH2AtcNdjIZrYDErAPpgm4Xymw7GZoTcr4ov9O6NEg2VLA+3Y3zr53Ufy28Fm4ZRGiiGEbttw== X-Received: by 2002:a05:6000:2d06:b0:39e:cbe3:881 with SMTP id ffacd0b85a97d-39ecbe30939mr5036265f8f.12.1744641683850; Mon, 14 Apr 2025 07:41:23 -0700 (PDT) Received: from [192.168.0.89] (84.123.232.230.dyn.user.ono.com. [84.123.232.230]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-39eae96bf97sm11014806f8f.25.2025.04.14.07.41.22 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 14 Apr 2025 07:41:23 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------h3j30o70UyA0HM5IA2L1bdQ8" Message-ID: Date: Mon, 14 Apr 2025 16:41:22 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: BUG #18885: ERROR: corrupt MVNDistinct entry - 2 To: Alexander Korotkov , Tomas Vondra Cc: tharakan@gmail.com, pgsql-bugs@lists.postgresql.org, PG Bug reporting form References: <18885-da51324078588253@postgresql.org> Content-Language: en-AU From: Andrei Lepikhov 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. --------------h3j30o70UyA0HM5IA2L1bdQ8 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 4/12/25 00:30, Alexander Korotkov wrote: > On Thu, Apr 10, 2025 at 3:28 PM Andrei Lepikhov wrote: >> ... >> Here, I attempt to use this routine in the hash join bucket size >> estimation. I transformed it a little, made it more general. Not sure it >> is the best design, but it is debatable. > ... > SELECT FROM sb_1 LEFT JOIN sb_2 ON (sb_2.x=sb_1.x) AND (sb_1.x=sb_2.x) > AND (sb_1.y=sb_2.y); > > When you use add_unique_group_var() which keeps varinfos unique then > you can no longer expect that varinfos have the same order as > origin_rinfos. Ok, here is a patch that considers this issue. Now GroupVarInfo tracks source RestrictInfo. Not sure it is an ideal approach, but we don't need to synchronise the restrictions and corresponding varinfos. On Fri, 11 Apr 2025 at 01:31, Tomas Vondra wrote: > I think estimate_multivariate_bucketsize() needs to be more careful > about building the GroupVarInfo list - in particular, it needs to do > dance with examine_variable + add_unique_group_var + pull_var_clause, > similar to estimate_num_groups() at line ~3532. Yeah, estimate_num_groups and bucket size estimation have a lot in common. It would be better to invent some common GroupVarInfo preparation/estimation code for them, but specifics of HashJoin bucket estimation need mcv_freq and result caching that limits intersection of these estimators. -- regards, Andrei Lepikhov --------------h3j30o70UyA0HM5IA2L1bdQ8 Content-Type: text/x-patch; charset=UTF-8; name="v0-0001-Be-more-conventional-in-estimating-hash-join-buck.patch" Content-Disposition: attachment; filename*0="v0-0001-Be-more-conventional-in-estimating-hash-join-buck.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAyZGY5YzQ3ZjE4OGVkMWE4YWU4YjcwODY1YzZhNWRkZmY2ZGJlNzY2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmVpIFYuIExlcGlraG92IiA8bGVwaWhvdkBn bWFpbC5jb20+CkRhdGU6IFRodSwgMTAgQXByIDIwMjUgMTQ6MTY6NDQgKzAyMDAKU3ViamVj dDogW1BBVENIIHYwXSBCZSBtb3JlIGNvbnZlbnRpb25hbCBpbiBlc3RpbWF0aW5nIGhhc2gg am9pbiBidWNrZXQgc2l6ZS4KCkltcGxlbWVudGluZyBlc3RpbWF0aW9uIG9mIGhhc2ggam9p biBidWNrZXQgc2l6ZSBieSBleHRlbmRlZCBzdGF0aXN0aWNzLCB3ZQp3YW50ZWQgdG8gYXZv aWQgdGhlIHVzZSBvZiBhZGRfdW5pcXVlX2dyb3VwX3ZhciBiZWNhdXNlIGl0cyBsb2dpYyBn cmVhdGx5CmRlcGVuZHMgb24gdGhlIGdyb3VwJ3MgbnVtYmVyIGVzdGltYXRpb24gY29kZS4g QnV0IHdlIGZvcmdvdCB0aGF0IHRoaXMgcm91dGluZQphbHNvIGRvZXMgb3ZlciBzdHVmZiwg bGlrZSBkdXBsaWNhdGUgcmVtb3ZhbCBmcm9tIHRoZSBsaXN0IG9mIGVzdGltYXRlZApjbGF1 c2VzLgpXaXRoIHRoaXMgY29tbWl0LCB3ZSBtYWtlIGFkZF91bmlxdWVfZ3JvdXBfdmFyIGEg bGl0dGxlIG1vcmUgZ2VuZXJhbCwgd2hpY2gKYWxsb3dzIHVzIHRvIHVzZSBpdCBkdXJpbmcg dGhlIGJ1Y2tldCBlc3RpbWF0aW9uLiBBdCBmaXJzdCwgaXQgZG9lc24ndCBuZWVkCnZhcmRh dGEgcmVjZWl2aW5nIFJlbE9wdEluZm8gcmVmZXJlbmNlLCBuZGlzdGluY3QgYW5kIGlzZGVm YXVsdCB2YWx1ZXMKZGlyZWN0bHkuIEFsc28sIEdyb3VwVmFySW5mbyB0cmFja3Mgb3JpZ2lu YWwgcmVzdHJpY3Rpb24gLSBpdCBpcyBhIHBhbGxpYXRpdmUKdGhhdCBzaW1wbGlmaWVzIHRo ZSBkZXRlY3Rpb24gb2YgY2xhdXNlcyB0aGF0IGhhdmUgbm90IHlldCBiZWVuIGVzdGltYXRl ZC4KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyAgICAgICAgfCA3NyAr KysrKysrKysrKy0tLS0tLS0tLS0tLS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0 YXRzX2V4dC5vdXQgfCAyOCArKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRz X2V4dC5zcWwgICAgICB8IDExICsrKysKIDMgZmlsZXMgY2hhbmdlZCwgNzIgaW5zZXJ0aW9u cygrKSwgNDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwppbmRl eCA1ODhkOTkxZmE1Ny4uYjg4YTZiZjU4MjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9zZWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5j cy5jCkBAIC0zMzEwLDE5ICszMzEwLDE3IEBAIHR5cGVkZWYgc3RydWN0CiAJUmVsT3B0SW5m byAqcmVsOwkJCS8qIHJlbGF0aW9uIGl0IGJlbG9uZ3MgdG8gKi8KIAlkb3VibGUJCW5kaXN0 aW5jdDsJCS8qICMgZGlzdGluY3QgdmFsdWVzICovCiAJYm9vbAkJaXNkZWZhdWx0OwkJLyog dHJ1ZSBpZiBERUZBVUxUX05VTV9ESVNUSU5DVCB3YXMgdXNlZCAqLworCVJlc3RyaWN0SW5m byAqc291cmNlOwkJLyogU291cmNlIHJlc3RyaWN0aW9uIHRvIHN1cmVseSBpZGVudGlmaWNh dGlvbiAqLwogfSBHcm91cFZhckluZm87CiAKIHN0YXRpYyBMaXN0ICoKLWFkZF91bmlxdWVf Z3JvdXBfdmFyKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICp2YXJpbmZvcywKLQkJCQkJIE5v ZGUgKnZhciwgVmFyaWFibGVTdGF0RGF0YSAqdmFyZGF0YSkKK2FkZF91bmlxdWVfZ3JvdXBf dmFyKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICp2YXJpbmZvcywgTm9kZSAqdmFyLAorCQkJ CQkgUmVsT3B0SW5mbyAqcmVsLCBkb3VibGUgbmRpc3RpbmN0LCBib29sIGlzZGVmYXVsdCwK KwkJCQkJIFJlc3RyaWN0SW5mbyAqc291cmNlKQogewogCUdyb3VwVmFySW5mbyAqdmFyaW5m bzsKLQlkb3VibGUJCW5kaXN0aW5jdDsKLQlib29sCQlpc2RlZmF1bHQ7CiAJTGlzdENlbGwg ICAqbGM7CiAKLQluZGlzdGluY3QgPSBnZXRfdmFyaWFibGVfbnVtZGlzdGluY3QodmFyZGF0 YSwgJmlzZGVmYXVsdCk7Ci0KIAkvKgogCSAqIFRoZSBudWxsaW5ncmVscyBiaXRzIHdpdGhp biB0aGUgdmFyIGNvdWxkIGNhdXNlIHRoZSBzYW1lIHZhciB0byBiZQogCSAqIGNvdW50ZWQg bXVsdGlwbGUgdGltZXMgaWYgaXQncyBtYXJrZWQgd2l0aCBkaWZmZXJlbnQgbnVsbGluZ3Jl bHMuICBUaGV5CkBAIC0zMzQ1LDcgKzMzNDMsNyBAQCBhZGRfdW5pcXVlX2dyb3VwX3ZhcihQ bGFubmVySW5mbyAqcm9vdCwgTGlzdCAqdmFyaW5mb3MsCiAJCSAqIHJlbGF0aW9ucyAoc2Vl IGNvbW1lbnRzIGZvciBlc3RpbWF0ZV9udW1fZ3JvdXBzKS4gIFdlIGFyZW4ndCB0b28KIAkJ ICogZnVzc3kgYWJvdXQgdGhlIHNlbWFudGljcyBvZiAiZXF1YWwiIGhlcmUuCiAJCSAqLwot CQlpZiAodmFyZGF0YS0+cmVsICE9IHZhcmluZm8tPnJlbCAmJgorCQlpZiAocmVsICE9IHZh cmluZm8tPnJlbCAmJgogCQkJZXhwcnNfa25vd25fZXF1YWwocm9vdCwgdmFyLCB2YXJpbmZv LT52YXIsIEludmFsaWRPaWQpKQogCQl7CiAJCQlpZiAodmFyaW5mby0+bmRpc3RpbmN0IDw9 IG5kaXN0aW5jdCkKQEAgLTMzNjQsOSArMzM2MiwxMCBAQCBhZGRfdW5pcXVlX2dyb3VwX3Zh cihQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqdmFyaW5mb3MsCiAJdmFyaW5mbyA9IChHcm91 cFZhckluZm8gKikgcGFsbG9jKHNpemVvZihHcm91cFZhckluZm8pKTsKIAogCXZhcmluZm8t PnZhciA9IHZhcjsKLQl2YXJpbmZvLT5yZWwgPSB2YXJkYXRhLT5yZWw7CisJdmFyaW5mby0+ cmVsID0gcmVsOwogCXZhcmluZm8tPm5kaXN0aW5jdCA9IG5kaXN0aW5jdDsKIAl2YXJpbmZv LT5pc2RlZmF1bHQgPSBpc2RlZmF1bHQ7CisJdmFyaW5mby0+c291cmNlID0gc291cmNlOwog CXZhcmluZm9zID0gbGFwcGVuZCh2YXJpbmZvcywgdmFyaW5mbyk7CiAJcmV0dXJuIHZhcmlu Zm9zOwogfQpAQCAtMzUzMiw4ICszNTMxLDEzIEBAIGVzdGltYXRlX251bV9ncm91cHMoUGxh bm5lckluZm8gKnJvb3QsIExpc3QgKmdyb3VwRXhwcnMsIGRvdWJsZSBpbnB1dF9yb3dzLAog CQlleGFtaW5lX3ZhcmlhYmxlKHJvb3QsIGdyb3VwZXhwciwgMCwgJnZhcmRhdGEpOwogCQlp ZiAoSGVhcFR1cGxlSXNWYWxpZCh2YXJkYXRhLnN0YXRzVHVwbGUpIHx8IHZhcmRhdGEuaXN1 bmlxdWUpCiAJCXsKLQkJCXZhcmluZm9zID0gYWRkX3VuaXF1ZV9ncm91cF92YXIocm9vdCwg dmFyaW5mb3MsCi0JCQkJCQkJCQkJCWdyb3VwZXhwciwgJnZhcmRhdGEpOworCQkJZG91Ymxl CW5kaXN0aW5jdDsKKwkJCWJvb2wJaXNkZWZhdWx0OworCisJCQluZGlzdGluY3QgPSBnZXRf dmFyaWFibGVfbnVtZGlzdGluY3QoJnZhcmRhdGEsICZpc2RlZmF1bHQpOworCQkJdmFyaW5m b3MgPSBhZGRfdW5pcXVlX2dyb3VwX3Zhcihyb290LCB2YXJpbmZvcywgZ3JvdXBleHByLAor CQkJCQkJCQkJCQl2YXJkYXRhLnJlbCwgbmRpc3RpbmN0LCBpc2RlZmF1bHQsCisJCQkJCQkJ CQkJCU5VTEwpOwogCQkJUmVsZWFzZVZhcmlhYmxlU3RhdHModmFyZGF0YSk7CiAJCQljb250 aW51ZTsKIAkJfQpAQCAtMzU2OSw5ICszNTczLDEzIEBAIGVzdGltYXRlX251bV9ncm91cHMo UGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmdyb3VwRXhwcnMsIGRvdWJsZSBpbnB1dF9yb3dz LAogCQlmb3JlYWNoKGwyLCB2YXJzaGVyZSkKIAkJewogCQkJTm9kZQkgICAqdmFyID0gKE5v ZGUgKikgbGZpcnN0KGwyKTsKKwkJCWRvdWJsZQkJbmRpc3RpbmN0OworCQkJYm9vbAkJaXNk ZWZhdWx0OwogCiAJCQlleGFtaW5lX3ZhcmlhYmxlKHJvb3QsIHZhciwgMCwgJnZhcmRhdGEp OwotCQkJdmFyaW5mb3MgPSBhZGRfdW5pcXVlX2dyb3VwX3Zhcihyb290LCB2YXJpbmZvcywg dmFyLCAmdmFyZGF0YSk7CisJCQluZGlzdGluY3QgPSBnZXRfdmFyaWFibGVfbnVtZGlzdGlu Y3QoJnZhcmRhdGEsICZpc2RlZmF1bHQpOworCQkJdmFyaW5mb3MgPSBhZGRfdW5pcXVlX2dy b3VwX3Zhcihyb290LCB2YXJpbmZvcywgdmFyLCB2YXJkYXRhLnJlbCwKKwkJCQkJCQkJCQkJ bmRpc3RpbmN0LCBpc2RlZmF1bHQsIE5VTEwpOwogCQkJUmVsZWFzZVZhcmlhYmxlU3RhdHMo dmFyZGF0YSk7CiAJCX0KIAl9CkBAIC0zODE2LDEzICszODI0LDkgQEAgZXN0aW1hdGVfbXVs dGl2YXJpYXRlX2J1Y2tldHNpemUoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlu bmVyLAogCQlMaXN0Q2VsbCAgICpsYzsKIAkJaW50CQkJcmVsaWQgPSAtMTsKIAkJTGlzdAkg ICAqdmFyaW5mb3MgPSBOSUw7Ci0JCUxpc3QJICAgKm9yaWdpbl9yaW5mb3MgPSBOSUw7CiAJ CWRvdWJsZQkJbXZuZGlzdGluY3Q7Ci0JCUxpc3QJICAgKm9yaWdpbl92YXJpbmZvczsKIAkJ aW50CQkJZ3JvdXBfcmVsaWQgPSAtMTsKIAkJUmVsT3B0SW5mbyAqZ3JvdXBfcmVsID0gTlVM TDsKLQkJTGlzdENlbGwgICAqbGMxLAotCQkJCSAgICpsYzI7CiAKIAkJLyoKIAkJICogRmlu ZCBjbGF1c2VzLCByZWZlcmVuY2luZyB0aGUgc2FtZSBzaW5nbGUgYmFzZSByZWxhdGlvbiBh bmQgdHJ5IHRvCkBAIC0zODM1LDcgKzM4MzksNiBAQCBlc3RpbWF0ZV9tdWx0aXZhcmlhdGVf YnVja2V0c2l6ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5uZXIsCiAJCQlS ZXN0cmljdEluZm8gKnJpbmZvID0gbGZpcnN0X25vZGUoUmVzdHJpY3RJbmZvLCBsYyk7CiAJ CQlOb2RlCSAgICpleHByOwogCQkJUmVsaWRzCQlyZWxpZHM7Ci0JCQlHcm91cFZhckluZm8g KnZhcmluZm87CiAKIAkJCS8qCiAJCQkgKiBGaW5kIHRoZSBpbm5lciBzaWRlIG9mIHRoZSBq b2luLCB3aGljaCB3ZSBuZWVkIHRvIGVzdGltYXRlIHRoZQpAQCAtMzg4MCwxOCArMzg4Myw5 IEBAIGVzdGltYXRlX211bHRpdmFyaWF0ZV9idWNrZXRzaXplKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICppbm5lciwKIAkJCQkJICovCiAJCQkJCWNvbnRpbnVlOwogCi0JCQkJ dmFyaW5mbyA9IChHcm91cFZhckluZm8gKikgcGFsbG9jKHNpemVvZihHcm91cFZhckluZm8p KTsKLQkJCQl2YXJpbmZvLT52YXIgPSBleHByOwotCQkJCXZhcmluZm8tPnJlbCA9IHJvb3Qt PnNpbXBsZV9yZWxfYXJyYXlbcmVsaWRdOwotCQkJCXZhcmluZm8tPm5kaXN0aW5jdCA9IDAu MDsKLQkJCQl2YXJpbmZvLT5pc2RlZmF1bHQgPSBmYWxzZTsKLQkJCQl2YXJpbmZvcyA9IGxh cHBlbmQodmFyaW5mb3MsIHZhcmluZm8pOwotCi0JCQkJLyoKLQkJCQkgKiBSZW1lbWJlciB0 aGUgbGluayB0byBSZXN0cmljdEluZm8gZm9yIHRoZSBjYXNlIHRoZSBjbGF1c2UKLQkJCQkg KiBpcyBmYWlsZWQgdG8gYmUgZXN0aW1hdGVkLgotCQkJCSAqLwotCQkJCW9yaWdpbl9yaW5m b3MgPSBsYXBwZW5kKG9yaWdpbl9yaW5mb3MsIHJpbmZvKTsKKwkJCQl2YXJpbmZvcyA9IGFk ZF91bmlxdWVfZ3JvdXBfdmFyKHJvb3QsIHZhcmluZm9zLCBleHByLAorCQkJCQkJCQkJCQkJ cm9vdC0+c2ltcGxlX3JlbF9hcnJheVtyZWxpZF0sCisJCQkJCQkJCQkJCQkwLjAsIGZhbHNl LCByaW5mbyk7CiAJCQl9CiAJCQllbHNlCiAJCQkJLyogVGhpcyBjbGF1c2UgY2FuJ3QgYmUg ZXN0aW1hdGVkIHdpdGggZXh0ZW5kZWQgc3RhdGlzdGljcyAqLwpAQCAtMzkwNiwyMiArMzkw MCwyMyBAQCBlc3RpbWF0ZV9tdWx0aXZhcmlhdGVfYnVja2V0c2l6ZShQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqaW5uZXIsCiAJCQkgKiBNdWx0aXZhcmlhdGUgc3RhdGlzdGlj cyBkb2Vzbid0IGFwcGx5IHRvIHNpbmdsZSBjb2x1bW5zIGV4Y2VwdAogCQkJICogZm9yIGV4 cHJlc3Npb25zLCBidXQgaXQgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkIHlldC4KIAkJCSAq LwotCQkJb3RoZXJjbGF1c2VzID0gbGlzdF9jb25jYXQob3RoZXJjbGF1c2VzLCBvcmlnaW5f cmluZm9zKTsKKworCQkJaWYgKHZhcmluZm9zICE9IE5VTEwpCisJCQkJb3RoZXJjbGF1c2Vz ID0gbGFwcGVuZChvdGhlcmNsYXVzZXMsCisJCQkJCQkJCSgoR3JvdXBWYXJJbmZvICopIGxp bml0aWFsKHZhcmluZm9zKSktPnNvdXJjZSk7CiAJCQlsaXN0X2ZyZWVfZGVlcCh2YXJpbmZv cyk7Ci0JCQlsaXN0X2ZyZWUob3JpZ2luX3JpbmZvcyk7CiAJCQljb250aW51ZTsKIAkJfQog CiAJCUFzc2VydChncm91cF9yZWwgIT0gTlVMTCk7CiAKIAkJLyogRW1wbG95IHRoZSBleHRl bmRlZCBzdGF0aXN0aWNzLiAqLwotCQlvcmlnaW5fdmFyaW5mb3MgPSB2YXJpbmZvczsKIAkJ Zm9yICg7OykKIAkJewotCQkJYm9vbAkJZXN0aW1hdGVkID0gZXN0aW1hdGVfbXVsdGl2YXJp YXRlX25kaXN0aW5jdChyb290LAotCQkJCQkJCQkJCQkJCQkJCQlncm91cF9yZWwsCi0JCQkJ CQkJCQkJCQkJCQkJCSZ2YXJpbmZvcywKLQkJCQkJCQkJCQkJCQkJCQkJJm12bmRpc3RpbmN0 KTsKKwkJCWJvb2wJZXN0aW1hdGVkID0gZXN0aW1hdGVfbXVsdGl2YXJpYXRlX25kaXN0aW5j dChyb290LAorCQkJCQkJCQkJCQkJCQkJCWdyb3VwX3JlbCwKKwkJCQkJCQkJCQkJCQkJCQkm dmFyaW5mb3MsCisJCQkJCQkJCQkJCQkJCQkJJm12bmRpc3RpbmN0KTsKIAogCQkJaWYgKCFl c3RpbWF0ZWQpCiAJCQkJYnJlYWs7CkBAIC0zOTM2LDE5ICszOTMxLDEzIEBAIGVzdGltYXRl X211bHRpdmFyaWF0ZV9idWNrZXRzaXplKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICppbm5lciwKIAkJCUFzc2VydChuZGlzdGluY3QgPj0gMS4wKTsKIAkJfQogCi0JCUFzc2Vy dChsaXN0X2xlbmd0aChvcmlnaW5fdmFyaW5mb3MpID09IGxpc3RfbGVuZ3RoKG9yaWdpbl9y aW5mb3MpKTsKLQogCQkvKiBDb2xsZWN0IHVubWF0Y2hlZCBjbGF1c2VzIGFzIG90aGVyY2xh dXNlcy4gKi8KLQkJZm9yYm90aChsYzEsIG9yaWdpbl92YXJpbmZvcywgbGMyLCBvcmlnaW5f cmluZm9zKQorCQlmb3JlYWNoKGxjLCB2YXJpbmZvcykKIAkJewotCQkJR3JvdXBWYXJJbmZv ICp2aW5mbyA9IGxmaXJzdChsYzEpOwotCi0JCQlpZiAoIWxpc3RfbWVtYmVyX3B0cih2YXJp bmZvcywgdmluZm8pKQotCQkJCS8qIEFscmVhZHkgZXN0aW1hdGVkICovCi0JCQkJY29udGlu dWU7CisJCQlHcm91cFZhckluZm8gKnZhcmluZm8gPSBsZmlyc3QobGMpOwogCiAJCQkvKiBD YW4ndCBiZSBlc3RpbWF0ZWQgaGVyZSAtIHB1c2ggdG8gdGhlIHJldHVybmluZyBsaXN0ICov Ci0JCQlvdGhlcmNsYXVzZXMgPSBsYXBwZW5kKG90aGVyY2xhdXNlcywgbGZpcnN0KGxjMikp OworCQkJb3RoZXJjbGF1c2VzID0gbGFwcGVuZChvdGhlcmNsYXVzZXMsIHZhcmluZm8tPnNv dXJjZSk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvc3RhdHNfZXh0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0 Lm91dAppbmRleCA2ODZkOGM5M2FhOC4uNjM1OWU1ZmI2ODkgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dAorKysgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3N0YXRzX2V4dC5vdXQKQEAgLTM0MjcsNCArMzQyNywzMiBAQCBTRUxF Q1QgKiBGUk9NIHNiXzEgYSwgc2JfMiBiIFdIRVJFIGEueCA9IGIueCBBTkQgYS55ID0gYi55 IEFORCBhLnogPSBiLno7CiAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2JfMiBiCiAoNSBy b3dzKQogCistLSBDaGVjayB0aGF0IHRoZSBIYXNoIEpvaW4gYnVja2V0IHNpemUgZXN0aW1h dG9yIGRldGVjdHMgZXF1YWwgY2xhdXNlcyBjb3JyZWN0bHkuCitTRVQgZW5hYmxlX25lc3Rs b29wID0gJ29mZic7CitTRVQgZW5hYmxlX21lcmdlam9pbiA9ICdvZmYnOworRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUIEZST00gc2JfMSBMRUZUIEpPSU4gc2JfMiBPTiAoc2JfMi54 PXNiXzEueCkgQU5EIChzYl8xLng9c2JfMi54KTsKKyAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggTGVmdCBKb2lu CisgICBIYXNoIENvbmQ6ICgoc2JfMS54ID0gc2JfMi54KSBBTkQgKHNiXzEueCA9IHNiXzIu eCkpCisgICAtPiAgU2VxIFNjYW4gb24gc2JfMQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBzYl8yCisoNSByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitT RUxFQ1QgRlJPTSBzYl8xIExFRlQgSk9JTiBzYl8yCisgICBPTiAoc2JfMi54PXNiXzEueCkg QU5EIChzYl8xLng9c2JfMi54KSBBTkQgKHNiXzEueT1zYl8yLnkpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIExlZnQgSm9p bgorICAgSGFzaCBDb25kOiAoKHNiXzEueCA9IHNiXzIueCkgQU5EIChzYl8xLnkgPSBzYl8y LnkpIEFORCAoc2JfMS54ID0gc2JfMi54KSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzYl8xCisg ICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNiXzIKKyg1IHJvd3MpCisK K1JFU0VUIGVuYWJsZV9uZXN0bG9vcDsKK1JFU0VUIGVuYWJsZV9tZXJnZWpvaW47CiBEUk9Q IFRBQkxFIHNiXzEsIHNiXzIgQ0FTQ0FERTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3N0YXRzX2V4dC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19leHQu c3FsCmluZGV4IGI3MWE2Y2QwODlmLi5kYTRmMmZlOWM5MyAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvc3RhdHNfZXh0LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9zdGF0c19leHQuc3FsCkBAIC0xNzQ3LDQgKzE3NDcsMTUgQEAgQU5BTFlaRSBzYl8yOwog RVhQTEFJTiAoQ09TVFMgT0ZGKSAtLSBDaG9vc2UgaGFzaCBqb2luCiBTRUxFQ1QgKiBGUk9N IHNiXzEgYSwgc2JfMiBiIFdIRVJFIGEueCA9IGIueCBBTkQgYS55ID0gYi55IEFORCBhLnog PSBiLno7CiAKKy0tIENoZWNrIHRoYXQgdGhlIEhhc2ggSm9pbiBidWNrZXQgc2l6ZSBlc3Rp bWF0b3IgZGV0ZWN0cyBlcXVhbCBjbGF1c2VzIGNvcnJlY3RseS4KK1NFVCBlbmFibGVfbmVz dGxvb3AgPSAnb2ZmJzsKK1NFVCBlbmFibGVfbWVyZ2Vqb2luID0gJ29mZic7CitFWFBMQUlO IChDT1NUUyBPRkYpCitTRUxFQ1QgRlJPTSBzYl8xIExFRlQgSk9JTiBzYl8yIE9OIChzYl8y Lng9c2JfMS54KSBBTkQgKHNiXzEueD1zYl8yLngpOworRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUIEZST00gc2JfMSBMRUZUIEpPSU4gc2JfMgorICAgT04gKHNiXzIueD1zYl8xLngp IEFORCAoc2JfMS54PXNiXzIueCkgQU5EIChzYl8xLnk9c2JfMi55KTsKK1JFU0VUIGVuYWJs ZV9uZXN0bG9vcDsKK1JFU0VUIGVuYWJsZV9tZXJnZWpvaW47CisKIERST1AgVEFCTEUgc2Jf MSwgc2JfMiBDQVNDQURFOwotLSAKMi4zOS41Cgo= --------------h3j30o70UyA0HM5IA2L1bdQ8--