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.96) (envelope-from ) id 1wEvZm-004ZdX-2a for pgsql-hackers@arkaria.postgresql.org; Mon, 20 Apr 2026 20:50:39 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wEvZl-004cXS-3D for pgsql-hackers@arkaria.postgresql.org; Mon, 20 Apr 2026 20:50:38 +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.96) (envelope-from ) id 1wEvZk-004cXJ-2Y for pgsql-hackers@lists.postgresql.org; Mon, 20 Apr 2026 20:50:37 +0000 Received: from fhigh-a3-smtp.messagingengine.com ([103.168.172.154]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wEvZh-00000001yi2-3DQv for pgsql-hackers@postgresql.org; Mon, 20 Apr 2026 20:50:35 +0000 Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfhigh.phl.internal (Postfix) with ESMTP id BCA8D14001C1; Mon, 20 Apr 2026 16:50:32 -0400 (EDT) Received: from phl-frontend-03 ([10.202.2.162]) by phl-compute-02.internal (MEProxy); Mon, 20 Apr 2026 16:50:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eisentraut.org; h=cc:cc:content-type:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1776718232; x= 1776804632; bh=TU3UI7Y/VchqAL1+0D9FIqw2OIHo/lVLo8uDOjLFAbM=; b=k iGscwPCj8mGYcr54d5/qRd1VHO17ZbHUrTdb4WANEXaJn+jNXrcT4kZ61zMlfgND 52VjI+us1rr8u+U45z/nCnINDsd8F6hH/oey5+PWcGANyImSBzLzWRtDY03hFbtL siW68qmjt8XVo4EnKVXzhh3ms9tOWRcS5opeH3tOiulvsiAq8dZ/elgltKfaejKY 4m4YGd6iTmsnq1CdbNY8V5OhWe2JL7010KvsW0oFmeAbkiwsoU5N0qNHxfRGQf7z Dz5lWEvvIMVrugMoLItPqQC22aPrDezAzxXIQlPvwd6tdXvd+4oL3urzgypvMG3Q WKicxuKC22gHomTkg5+Wg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t= 1776718232; x=1776804632; bh=TU3UI7Y/VchqAL1+0D9FIqw2OIHo/lVLo8u DOjLFAbM=; b=Ltj/TDkTFj8tUDJ7tNKZ9aMablXm27QfUdpjcWAiQ5HH75qZbqQ fUGKWQBD0/9Okv6CQn7BVqeiYr8Ytn0ozWT/38kbFalQloNsDtLlfxy60Zcl+9qe hzDyaq/a0EtIwLAX5ZDsqY3wPNXi5t7gkZrscomseXWdfImPCesunLmQYOWg14zn P3Zpsdq15y+7RN+GEZNJ9pVSVvMffq69TVAHAOqiA+25ebE6Z8lK6W6auhI87tJq qxv3+uqvZ4QiOG/Jk3/YDfF7H82CfObrpA1ehMwPZYb1/EP/RklA1Sv27NtYBG35 cEBvBUhzmVjKFak2cfk57j82Wl+HFQkEh3A== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefhedrtddtgdehleehvdcutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpuffrtefokffrpgfnqfghnecuuegr ihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjug hrpegtkfffgggfuffvvehfhfgjsehmtderredtvdejnecuhfhrohhmpefrvghtvghrucfg ihhsvghnthhrrghuthcuoehpvghtvghrsegvihhsvghnthhrrghuthdrohhrgheqnecugg ftrfgrthhtvghrnhepkedtuedthfdvhfeviefgffetgedvjedvhffhveefvefgtdfgleeg heeivefhgfeinecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrh homhepphgvthgvrhesvghishgvnhhtrhgruhhtrdhorhhgpdhnsggprhgtphhtthhopeej pdhmohguvgepshhmthhpohhuthdprhgtphhtthhopegrmhhithhlrghnghhothgvtdelse hgmhgrihhlrdgtohhmpdhrtghpthhtohepiihhjhifphhkuhesghhmrghilhdrtghomhdp rhgtphhtthhopehlihdrvghvrghnrdgthhgrohesghhmrghilhdrtghomhdprhgtphhtth hopehtrhhishhtrghnrdihihhmsehgmhgrihhlrdgtohhmpdhrtghpthhtohepphgrvhgv lhdrshhtvghhuhhlvgesghhmrghilhdrtghomhdprhgtphhtthhopehpghhsqhhlqdhhrg gtkhgvrhhssehpohhsthhgrhgvshhqlhdrohhrghdprhgtphhtthhopehtohhmrghssehv ohhnughrrgdrmhgv X-ME-Proxy: Feedback-ID: ie0a040ee:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 20 Apr 2026 16:50:31 -0400 (EDT) Content-Type: multipart/mixed; boundary="------------0N9O5GOoexIJCAIVGzKBWVXY" Message-ID: <548600ed-8bbb-4e50-8fc3-65091b122276@eisentraut.org> Date: Mon, 20 Apr 2026 22:50:29 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Eliminating SPI / SQL from some RI triggers - take 3 To: Amit Langote , Junwang Zhao Cc: Chao Li , Haibo Yan , Pavel Stehule , PostgreSQL-development , Tomas Vondra References: <77FA04FE-1F84-4DA1-8855-8BBFD8CC889A@gmail.com> Content-Language: en-US From: Peter Eisentraut 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. --------------0N9O5GOoexIJCAIVGzKBWVXY Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 02.04.26 09:41, Amit Langote wrote: > There's another case in which it is not ok to use FlushArray and that > is if the index AM's amsearcharray is false (should be true in all > cases because the unique index used for PK is always btree). Added an > Assert to that effect next to where SK_SEARCHARRAY is set in > ri_FastPathFlushArray rather than a runtime check in the dispatch > condition. > > Patch updated. Also added a comment about invalidation requirement or > lack thereof for RI_FastPathEntry, rename AfterTriggerBatchIsActive() > to simply AfterTriggerIsActive(), fixed the comments in trigger.h > describing the callback mechanism. > > Will push tomorrow morning (Friday) barring objections. This commit contains a couple of calls ri_populate_fastpath_metadata((RI_ConstraintInfo *) riinfo, fk_rel, idx_rel); where the cast casts away the const-ness of riinfo. But this is kind of a lie, since the purpose of ri_populate_fastpath_metadata() is to modify riinfo. I think the right thing to do here is to unwind the const qualifiers up the stack. See attached patch. --------------0N9O5GOoexIJCAIVGzKBWVXY Content-Type: text/plain; charset=UTF-8; name="0001-Fix-some-const-qualifier-use-in-ri_triggers.c.patch" Content-Disposition: attachment; filename="0001-Fix-some-const-qualifier-use-in-ri_triggers.c.patch" Content-Transfer-Encoding: base64 RnJvbSAzNWYyNzNjODEyYWE0ZjEzNDVhM2MxYTllYjE0NDNlM2M3NDM5MjU0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogTW9uLCAyMCBBcHIgMjAyNiAyMjo0MDowNSArMDIwMApTdWJqZWN0 OiBbUEFUQ0hdIEZpeCBzb21lIGNvbnN0IHF1YWxpZmllciB1c2UgaW4gcmlfdHJpZ2dlcnMu YwoKLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYyB8IDM0ICsrKysr KysrKysrKysrLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTYgaW5zZXJ0aW9u cygrKSwgMTggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3JpX3RyaWdnZXJzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMu YwppbmRleCBlMDYwMjgwZmNkNC4uZjYzYTdmMGI1ODAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9yaV90cmlnZ2Vycy5jCkBAIC0yOTcsOSArMjk3LDkgQEAgc3RhdGljIFJJX0NvbXBhcmVI YXNoRW50cnkgKnJpX0hhc2hDb21wYXJlT3AoT2lkIGVxX29wciwgT2lkIHR5cGVpZCk7CiAK IHN0YXRpYyB2b2lkIHJpX0NoZWNrVHJpZ2dlcihGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywg Y29uc3QgY2hhciAqZnVuY25hbWUsCiAJCQkJCQkJaW50IHRna2luZCk7Ci1zdGF0aWMgY29u c3QgUklfQ29uc3RyYWludEluZm8gKnJpX0ZldGNoQ29uc3RyYWludEluZm8oVHJpZ2dlciAq dHJpZ2dlciwKLQkJCQkJCQkJCQkJCQkgICBSZWxhdGlvbiB0cmlnX3JlbCwgYm9vbCByZWxf aXNfcGspOwotc3RhdGljIGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaV9Mb2FkQ29uc3Ry YWludEluZm8oT2lkIGNvbnN0cmFpbnRPaWQpOworc3RhdGljIFJJX0NvbnN0cmFpbnRJbmZv ICpyaV9GZXRjaENvbnN0cmFpbnRJbmZvKFRyaWdnZXIgKnRyaWdnZXIsCisJCQkJCQkJCQkJ CQkgUmVsYXRpb24gdHJpZ19yZWwsIGJvb2wgcmVsX2lzX3BrKTsKK3N0YXRpYyBSSV9Db25z dHJhaW50SW5mbyAqcmlfTG9hZENvbnN0cmFpbnRJbmZvKE9pZCBjb25zdHJhaW50T2lkKTsK IHN0YXRpYyBPaWQJZ2V0X3JpX2NvbnN0cmFpbnRfcm9vdChPaWQgY29uc3RyT2lkKTsKIHN0 YXRpYyBTUElQbGFuUHRyIHJpX1BsYW5DaGVjayhjb25zdCBjaGFyICpxdWVyeXN0ciwgaW50 IG5hcmdzLCBPaWQgKmFyZ3R5cGVzLAogCQkJCQkJCSAgIFJJX1F1ZXJ5S2V5ICpxa2V5LCBS ZWxhdGlvbiBma19yZWwsIFJlbGF0aW9uIHBrX3JlbCk7CkBAIC0zMDksMTIgKzMwOSwxMiBA QCBzdGF0aWMgYm9vbCByaV9QZXJmb3JtQ2hlY2soY29uc3QgUklfQ29uc3RyYWludEluZm8g KnJpaW5mbywKIAkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqb2xkc2xvdCwgVHVwbGVUYWJsZVNs b3QgKm5ld3Nsb3QsCiAJCQkJCQkJYm9vbCBpc19yZXN0cmljdCwKIAkJCQkJCQlib29sIGRl dGVjdE5ld1Jvd3MsIGludCBleHBlY3RfT0spOwotc3RhdGljIHZvaWQgcmlfRmFzdFBhdGhD aGVjayhjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAorc3RhdGljIHZvaWQgcmlf RmFzdFBhdGhDaGVjayhSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAogCQkJCQkJCSBSZWxh dGlvbiBma19yZWwsIFR1cGxlVGFibGVTbG90ICpuZXdzbG90KTsKLXN0YXRpYyB2b2lkIHJp X0Zhc3RQYXRoQmF0Y2hBZGQoY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKK3N0 YXRpYyB2b2lkIHJpX0Zhc3RQYXRoQmF0Y2hBZGQoUklfQ29uc3RyYWludEluZm8gKnJpaW5m bywKIAkJCQkJCQkJUmVsYXRpb24gZmtfcmVsLCBUdXBsZVRhYmxlU2xvdCAqbmV3c2xvdCk7 CiBzdGF0aWMgdm9pZCByaV9GYXN0UGF0aEJhdGNoRmx1c2goUklfRmFzdFBhdGhFbnRyeSAq ZnBlbnRyeSwgUmVsYXRpb24gZmtfcmVsLAotCQkJCQkJCQkgIGNvbnN0IFJJX0NvbnN0cmFp bnRJbmZvICpyaWluZm8pOworCQkJCQkJCQkgIFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8p Owogc3RhdGljIGludAlyaV9GYXN0UGF0aEZsdXNoQXJyYXkoUklfRmFzdFBhdGhFbnRyeSAq ZnBlbnRyeSwgVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3QsCiAJCQkJCQkJCSAgY29uc3QgUklf Q29uc3RyYWludEluZm8gKnJpaW5mbywgUmVsYXRpb24gZmtfcmVsLAogCQkJCQkJCQkgIFNu YXBzaG90IHNuYXBzaG90LCBJbmRleFNjYW5EZXNjIHNjYW5kZXNjKTsKQEAgLTM1Nyw3ICsz NTcsNyBAQCBzdGF0aWMgdm9pZCByaV9GYXN0UGF0aFRlYXJkb3duKHZvaWQpOwogc3RhdGlj IERhdHVtCiBSSV9GS2V5X2NoZWNrKFRyaWdnZXJEYXRhICp0cmlnZGF0YSkKIHsKLQljb25z dCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvOworCVJJX0NvbnN0cmFpbnRJbmZvICpyaWlu Zm87CiAJUmVsYXRpb24JZmtfcmVsOwogCVJlbGF0aW9uCXBrX3JlbDsKIAlUdXBsZVRhYmxl U2xvdCAqbmV3c2xvdDsKQEAgLTIzNDEsMTEgKzIzNDEsMTEgQEAgcmlfQ2hlY2tUcmlnZ2Vy KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBjb25zdCBjaGFyICpmdW5jbmFtZSwgaW50IHRn a2luZCkKIC8qCiAgKiBGZXRjaCB0aGUgUklfQ29uc3RyYWludEluZm8gc3RydWN0IGZvciB0 aGUgdHJpZ2dlcidzIEZLIGNvbnN0cmFpbnQuCiAgKi8KLXN0YXRpYyBjb25zdCBSSV9Db25z dHJhaW50SW5mbyAqCitzdGF0aWMgUklfQ29uc3RyYWludEluZm8gKgogcmlfRmV0Y2hDb25z dHJhaW50SW5mbyhUcmlnZ2VyICp0cmlnZ2VyLCBSZWxhdGlvbiB0cmlnX3JlbCwgYm9vbCBy ZWxfaXNfcGspCiB7CiAJT2lkCQkJY29uc3RyYWludE9pZCA9IHRyaWdnZXItPnRnY29uc3Ry YWludDsKLQljb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvOworCVJJX0NvbnN0cmFp bnRJbmZvICpyaWluZm87CiAKIAkvKgogCSAqIENoZWNrIHRoYXQgdGhlIEZLIGNvbnN0cmFp bnQncyBPSUQgaXMgYXZhaWxhYmxlOyBpdCBtaWdodCBub3QgYmUgaWYKQEAgLTIzOTUsNyAr MjM5NSw3IEBAIHJpX0ZldGNoQ29uc3RyYWludEluZm8oVHJpZ2dlciAqdHJpZ2dlciwgUmVs YXRpb24gdHJpZ19yZWwsIGJvb2wgcmVsX2lzX3BrKQogLyoKICAqIEZldGNoIG9yIGNyZWF0 ZSB0aGUgUklfQ29uc3RyYWludEluZm8gc3RydWN0IGZvciBhbiBGSyBjb25zdHJhaW50Lgog ICovCi1zdGF0aWMgY29uc3QgUklfQ29uc3RyYWludEluZm8gKgorc3RhdGljIFJJX0NvbnN0 cmFpbnRJbmZvICoKIHJpX0xvYWRDb25zdHJhaW50SW5mbyhPaWQgY29uc3RyYWludE9pZCkK IHsKIAlSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvOwpAQCAtMjc3Nyw3ICsyNzc3LDcgQEAg cmlfUGVyZm9ybUNoZWNrKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCiAgKiBy aV9GYXN0UGF0aEJhdGNoQWRkKCkuCiAgKi8KIHN0YXRpYyB2b2lkCi1yaV9GYXN0UGF0aENo ZWNrKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCityaV9GYXN0UGF0aENoZWNr KFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCiAJCQkJIFJlbGF0aW9uIGZrX3JlbCwgVHVw bGVUYWJsZVNsb3QgKm5ld3Nsb3QpCiB7CiAJUmVsYXRpb24JcGtfcmVsOwpAQCAtMjgyMCw4 ICsyODIwLDcgQEAgcmlfRmFzdFBhdGhDaGVjayhjb25zdCBSSV9Db25zdHJhaW50SW5mbyAq cmlpbmZvLAogCXsKIAkJLyogUmVsb2FkIHRvIGVuc3VyZSBpdCdzIHZhbGlkLiAqLwogCQly aWluZm8gPSByaV9Mb2FkQ29uc3RyYWludEluZm8ocmlpbmZvLT5jb25zdHJhaW50X2lkKTsK LQkJcmlfcG9wdWxhdGVfZmFzdHBhdGhfbWV0YWRhdGEoKFJJX0NvbnN0cmFpbnRJbmZvICop IHJpaW5mbywKLQkJCQkJCQkJCSAgZmtfcmVsLCBpZHhfcmVsKTsKKwkJcmlfcG9wdWxhdGVf ZmFzdHBhdGhfbWV0YWRhdGEocmlpbmZvLCBma19yZWwsIGlkeF9yZWwpOwogCX0KIAlBc3Nl cnQocmlpbmZvLT5mcG1ldGEpOwogCXJpX0V4dHJhY3RWYWx1ZXMoZmtfcmVsLCBuZXdzbG90 LCByaWluZm8sIGZhbHNlLCBwa192YWxzLCBwa19udWxscyk7CkBAIC0yODU3LDcgKzI4NTYs NyBAQCByaV9GYXN0UGF0aENoZWNrKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8s CiAgKiByaV9GYXN0UGF0aEVuZEJhdGNoKCkuCiAgKi8KIHN0YXRpYyB2b2lkCi1yaV9GYXN0 UGF0aEJhdGNoQWRkKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCityaV9GYXN0 UGF0aEJhdGNoQWRkKFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCiAJCQkJCVJlbGF0aW9u IGZrX3JlbCwgVHVwbGVUYWJsZVNsb3QgKm5ld3Nsb3QpCiB7CiAJUklfRmFzdFBhdGhFbnRy eSAqZnBlbnRyeSA9IHJpX0Zhc3RQYXRoR2V0RW50cnkocmlpbmZvLCBma19yZWwpOwpAQCAt Mjg4NCw3ICsyODgzLDcgQEAgcmlfRmFzdFBhdGhCYXRjaEFkZChjb25zdCBSSV9Db25zdHJh aW50SW5mbyAqcmlpbmZvLAogICovCiBzdGF0aWMgdm9pZAogcmlfRmFzdFBhdGhCYXRjaEZs dXNoKFJJX0Zhc3RQYXRoRW50cnkgKmZwZW50cnksIFJlbGF0aW9uIGZrX3JlbCwKLQkJCQkJ ICBjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvKQorCQkJCQkgIFJJX0NvbnN0cmFp bnRJbmZvICpyaWluZm8pCiB7CiAJUmVsYXRpb24JcGtfcmVsID0gZnBlbnRyeS0+cGtfcmVs OwogCVJlbGF0aW9uCWlkeF9yZWwgPSBmcGVudHJ5LT5pZHhfcmVsOwpAQCAtMjk0MSw4ICsy OTQwLDcgQEAgcmlfRmFzdFBhdGhCYXRjaEZsdXNoKFJJX0Zhc3RQYXRoRW50cnkgKmZwZW50 cnksIFJlbGF0aW9uIGZrX3JlbCwKIAl7CiAJCS8qIFJlbG9hZCB0byBlbnN1cmUgaXQncyB2 YWxpZC4gKi8KIAkJcmlpbmZvID0gcmlfTG9hZENvbnN0cmFpbnRJbmZvKHJpaW5mby0+Y29u c3RyYWludF9pZCk7Ci0JCXJpX3BvcHVsYXRlX2Zhc3RwYXRoX21ldGFkYXRhKChSSV9Db25z dHJhaW50SW5mbyAqKSByaWluZm8sCi0JCQkJCQkJCQkgIGZrX3JlbCwgaWR4X3JlbCk7CisJ CXJpX3BvcHVsYXRlX2Zhc3RwYXRoX21ldGFkYXRhKHJpaW5mbywgZmtfcmVsLCBpZHhfcmVs KTsKIAl9CiAJQXNzZXJ0KHJpaW5mby0+ZnBtZXRhKTsKIApAQCAtNDE0Nyw3ICs0MTQ1LDcg QEAgcmlfRmFzdFBhdGhFbmRCYXRjaCh2b2lkICphcmcpCiAJCWlmIChlbnRyeS0+YmF0Y2hf Y291bnQgPiAwKQogCQl7CiAJCQlSZWxhdGlvbglma19yZWwgPSB0YWJsZV9vcGVuKGVudHJ5 LT5ma19yZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKLQkJCWNvbnN0IFJJX0NvbnN0cmFpbnRJ bmZvICpyaWluZm8gPSByaV9Mb2FkQ29uc3RyYWludEluZm8oZW50cnktPmNvbm9pZCk7CisJ CQlSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvID0gcmlfTG9hZENvbnN0cmFpbnRJbmZvKGVu dHJ5LT5jb25vaWQpOwogCiAJCQlyaV9GYXN0UGF0aEJhdGNoRmx1c2goZW50cnksIGZrX3Jl bCwgcmlpbmZvKTsKIAkJCXRhYmxlX2Nsb3NlKGZrX3JlbCwgTm9Mb2NrKTsKLS0gCjIuNTMu MAoK --------------0N9O5GOoexIJCAIVGzKBWVXY--