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 1w5XCq-003LYv-0m for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Mar 2026 23:00:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w5XCo-00HHFx-1I for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Mar 2026 23:00:06 +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.96) (envelope-from ) id 1w5XCo-00HHFp-05 for pgsql-hackers@lists.postgresql.org; Wed, 25 Mar 2026 23:00:06 +0000 Received: from udcm-wwu2.uni-muenster.de ([128.176.118.28]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1w5XCl-000000019gN-32X2 for pgsql-hackers@lists.postgresql.org; Wed, 25 Mar 2026 23:00:06 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=uni-muenster.de; i=@uni-muenster.de; q=dns/txt; s=uniout; t=1774479604; x=1806015604; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to; bh=nmEGNjR4uUhd0fF52u0BUkOZ7V+hhTyjYAmCnpfjT+k=; b=LEaUqqjVQ962EzBhqfPaIKyqosyEFGVhcaX5OxBsZgkt5SuyEhluCytc 5fJjgzo+w+PJdMvTBb6rg1oeslpbekmHfIVc6CWm4967VAdtE4RG9W5Bv /ve0Z669rlS5IuWwiPG2SpsmdIeeqHDoJYd+es1MVQTTYAVOco1j2XafB 9Pmuv5ycep8FgjdhG3E5rhUphWGEHjMBho1R28n0qxN3PBmF1m1hVo5jA WHJ6aqFKG3KydT62/v2t1eI/cpCrjPtOwHMHUDMpuCY+DwtFfMSO94fmb 93VBKb22b8dluyKqciQgxc8WTX/dXemmtW0zZNo81pDr8S+QsSVesARq/ g==; X-CSE-ConnectionGUID: FphJ03Z7TL27J1643QkbfA== X-CSE-MsgGUID: F61AIS5sSQ6QLfP15+Sp6w== X-IronPort-AV: E=Sophos;i="6.23,141,1770591600"; d="scan'208,223";a="388814360" Received: from secmail.uni-muenster.de ([128.176.118.4]) by UDCM-RELAY2.UNI-MUENSTER.DE with ESMTP; 26 Mar 2026 00:00:03 +0100 Received: from [192.168.178.27] (dynamic-093-131-238-209.93.131.pool.telefonica.de [93.131.238.209]) by SECMAIL.UNI-MUENSTER.DE (Postfix) with ESMTPSA id B667F20ADF02; Thu, 26 Mar 2026 00:00:02 +0100 (CET) Content-Type: multipart/mixed; boundary="------------dcAtHQCWFk1c0vDB1CacF0gq" Message-ID: <9de2a59f-9597-4101-bf34-cf3804752e64@uni-muenster.de> Date: Thu, 26 Mar 2026 00:00:02 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: VACUUM FULL, CLUSTER, and REPACK block on other sessions' temp tables To: Zsolt Parragi Cc: Chao Li , PostgreSQL Hackers , Antonin Houska References: <0b555318-2bf2-46df-9377-09629a2a59db@uni-muenster.de> <97B93CF6-109D-46B4-AD50-8908DD4BE6E4@gmail.com> <039cca2d-5574-4dad-92e6-6e72c1747b23@uni-muenster.de> Content-Language: de-DE, en-GB From: Jim Jones 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. --------------dcAtHQCWFk1c0vDB1CacF0gq Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi On 25/03/2026 21:38, Zsolt Parragi wrote: > Shouldn't the patch also include a tap test to verify that the change > works / fails without it? Definitely. I just didn't want to invest much time on tests before getting feedback on the issue itself. > + /* Skip temp relations belonging to other sessions */ > + { > + Oid nsp = get_rel_namespace(index->indrelid); > + > + if (!isTempOrTempToastNamespace(nsp) && isAnyTempNamespace(nsp)) > + { > > Doesn't this result in several repeated syscache lookups? > > There's already a SearchSysCacheExsists1 directly above this, then a > get_rel_namespace, then an isAnyTempNamespace. While this probably > isn't performance critical, this should be doable with a single > SearchSysCache1(RELOID...) and then a few conditions, similarly to the > else branch below this? You're right. Although it is not performance critical we can solve it with a single SearchSysCache1. PFA v3 with the improved fix (0001) and tests (0002). Thanks for the review! Best, Jim --------------dcAtHQCWFk1c0vDB1CacF0gq Content-Type: text/x-patch; charset=UTF-8; name="v3-0001-Skip-other-sessions-temp-tables-in-REPACK-CLUSTER.patch" Content-Disposition: attachment; filename*0="v3-0001-Skip-other-sessions-temp-tables-in-REPACK-CLUSTER.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA2Njk5NTM0YzAzNzcyYjBlNWIwNjY4MGIyZTM4MmEzNmViMTA4YTY3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gSm9uZXMgPGppbS5qb25lc0B1bmktbXVlbnN0 ZXIuZGU+CkRhdGU6IFdlZCwgMjUgTWFyIDIwMjYgMjM6MTQ6MTIgKzAxMDAKU3ViamVjdDog W1BBVENIIHYzIDEvMl0gU2tpcCBvdGhlciBzZXNzaW9ucycgdGVtcCB0YWJsZXMgaW4gUkVQ QUNLLCBDTFVTVEVSLAogYW5kIFZBQ1VVTSBGVUxMCgpnZXRfdGFibGVzX3RvX3JlcGFjaygp IHdhcyBpbmNsdWRpbmcgb3RoZXIgc2Vzc2lvbnMnIHRlbXBvcmFyeSB0YWJsZXMKaW4gdGhl IHdvcmsgbGlzdCwgY2F1c2luZyBSRVBBQ0sgYW5kIENMVVNURVIgKHdpdGhvdXQgYXJndW1l bnRzKSB0bwphdHRlbXB0IHRvIGFjcXVpcmUgQWNjZXNzRXhjbHVzaXZlTG9jayBvbiB0aGVt LCBwb3RlbnRpYWxseSBibG9ja2luZwpmb3IgYW4gZXh0ZW5kZWQgdGltZS4gRml4IGJ5IHNr aXBwaW5nIG90aGVyLXNlc3Npb24gdGVtcCB0YWJsZXMgZWFybHkKaW4gZ2V0X3RhYmxlc190 b19yZXBhY2soKSwgYmVmb3JlIHRoZXkgYXJlIGFkZGVkIHRvIHRoZSBsaXN0LiBCZWNhdXNl CmFuIEFjY2Vzc1NoYXJlTG9jayBoYXMgYWxyZWFkeSBiZWVuIGFjcXVpcmVkIHBlciByZWxh dGlvbiBhdCB0aGF0CnBvaW50LCByZWxlYXNlIGl0IGJlZm9yZSBjb250aW51aW5nLgoKU2lt aWxhcmx5LCBnZXRfYWxsX3ZhY3V1bV9yZWxzKCkgc3VmZmVyZWQgZnJvbSB0aGUgc2FtZSBw cm9ibGVtIGZvcgpWQUNVVU0gRlVMTC4gU2luY2Ugbm8gcGVyLXJlbGF0aW9uIGxvY2sgaXMg aGVsZCBkdXJpbmcgbGlzdC1idWlsZGluZwp0aGVyZSwgYSBwbGFpbiBza2lwIHN1ZmZpY2Vz LgoKQXV0aG9yOiBKaW0gSm9uZXMgPGppbS5qb25lc0B1bmktbXVlbnN0ZXIuZGU+ClJldmll d2VkLWJ5OiBDaGFvIExpIDxsaS5ldmFuLmNoYW9AZ21haWwuY29tPgpSZXZpZXdlZC1ieTog WnNvbHQgUGFycmFnaSA8enNvbHQucGFycmFnaUBwZXJjb25hLmNvbT4KLS0tCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9jbHVzdGVyLmMgfCAyNSArKysrKysrKysrKysrKysrKysrKysrKyst CiBzcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYyAgfCAgNSArKysrKwogMiBmaWxlcyBj aGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvY2x1c3Rlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv Y2x1c3Rlci5jCmluZGV4IDA5MDY2ZGIwOTU2Li4xNGMxMWU4ZTUzMiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvY2x1c3Rlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2NsdXN0ZXIuYwpAQCAtMTY3OSw2ICsxNjc5LDggQEAgZ2V0X3RhYmxlc190b19yZXBh Y2soUmVwYWNrQ29tbWFuZCBjbWQsIGJvb2wgdXNpbmdpbmRleCwgTWVtb3J5Q29udGV4dCBw ZXJtY3h0KQogCQl7CiAJCQlSZWxUb0NsdXN0ZXIgKnJ0YzsKIAkJCUZvcm1fcGdfaW5kZXgg aW5kZXg7CisJCQlIZWFwVHVwbGUJY2xhc3N0dXA7CisJCQlGb3JtX3BnX2NsYXNzIGNsYXNz Rm9ybTsKIAkJCU1lbW9yeUNvbnRleHQgb2xkY3h0OwogCiAJCQlpbmRleCA9IChGb3JtX3Bn X2luZGV4KSBHRVRTVFJVQ1QodHVwbGUpOwpAQCAtMTY5MywxMSArMTY5NSwyNCBAQCBnZXRf dGFibGVzX3RvX3JlcGFjayhSZXBhY2tDb21tYW5kIGNtZCwgYm9vbCB1c2luZ2luZGV4LCBN ZW1vcnlDb250ZXh0IHBlcm1jeHQpCiAJCQkJY29udGludWU7CiAKIAkJCS8qIFZlcmlmeSB0 aGF0IHRoZSB0YWJsZSBzdGlsbCBleGlzdHM7IHNraXAgaWYgbm90ICovCi0JCQlpZiAoIVNl YXJjaFN5c0NhY2hlRXhpc3RzMShSRUxPSUQsIE9iamVjdElkR2V0RGF0dW0oaW5kZXgtPmlu ZHJlbGlkKSkpCisJCQljbGFzc3R1cCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVj dElkR2V0RGF0dW0oaW5kZXgtPmluZHJlbGlkKSk7CisJCQlpZiAoIUhlYXBUdXBsZUlzVmFs aWQoY2xhc3N0dXApKQogCQkJewogCQkJCVVubG9ja1JlbGF0aW9uT2lkKGluZGV4LT5pbmRy ZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKIAkJCQljb250aW51ZTsKIAkJCX0KKwkJCWNsYXNz Rm9ybSA9IChGb3JtX3BnX2NsYXNzKSBHRVRTVFJVQ1QoY2xhc3N0dXApOworCisJCQkvKiBT a2lwIHRlbXAgcmVsYXRpb25zIGJlbG9uZ2luZyB0byBvdGhlciBzZXNzaW9ucyAqLworCQkJ aWYgKGNsYXNzRm9ybS0+cmVscGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCAm JgorCQkJCSFpc1RlbXBPclRlbXBUb2FzdE5hbWVzcGFjZShjbGFzc0Zvcm0tPnJlbG5hbWVz cGFjZSkpCisJCQl7CisJCQkJUmVsZWFzZVN5c0NhY2hlKGNsYXNzdHVwKTsKKwkJCQlVbmxv Y2tSZWxhdGlvbk9pZChpbmRleC0+aW5kcmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJ Y29udGludWU7CisJCQl9CisKKwkJCVJlbGVhc2VTeXNDYWNoZShjbGFzc3R1cCk7CiAKIAkJ CS8qIG5vaXNpbHkgc2tpcCByZWxzIHdoaWNoIHRoZSB1c2VyIGNhbid0IHByb2Nlc3MgKi8K IAkJCWlmICghcmVwYWNrX2lzX3Blcm1pdHRlZF9mb3JfcmVsYXRpb24oY21kLCBpbmRleC0+ aW5kcmVsaWQsCkBAIC0xNzUzLDYgKzE3NjgsMTQgQEAgZ2V0X3RhYmxlc190b19yZXBhY2so UmVwYWNrQ29tbWFuZCBjbWQsIGJvb2wgdXNpbmdpbmRleCwgTWVtb3J5Q29udGV4dCBwZXJt Y3h0KQogCQkJCWNvbnRpbnVlOwogCQkJfQogCisJCQkvKiBTa2lwIHRlbXAgcmVsYXRpb25z IGJlbG9uZ2luZyB0byBvdGhlciBzZXNzaW9ucyAqLworCQkJaWYgKGNsYXNzLT5yZWxwZXJz aXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QICYmCisJCQkJIWlzVGVtcE9yVGVtcFRv YXN0TmFtZXNwYWNlKGNsYXNzLT5yZWxuYW1lc3BhY2UpKQorCQkJeworCQkJCVVubG9ja1Jl bGF0aW9uT2lkKGNsYXNzLT5vaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJY29udGludWU7 CisJCQl9CisKIAkJCS8qIG5vaXNpbHkgc2tpcCByZWxzIHdoaWNoIHRoZSB1c2VyIGNhbid0 IHByb2Nlc3MgKi8KIAkJCWlmICghcmVwYWNrX2lzX3Blcm1pdHRlZF9mb3JfcmVsYXRpb24o Y21kLCBjbGFzcy0+b2lkLAogCQkJCQkJCQkJCQkJICBHZXRVc2VySWQoKSkpCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3ZhY3V1bS5jCmluZGV4IGJjZTNhMmRhYTI0Li45YjBhNWEzOGE4YSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvdmFjdXVtLmMKQEAgLTEwNjIsNiArMTA2MiwxMSBAQCBnZXRfYWxsX3ZhY3V1bV9y ZWxzKE1lbW9yeUNvbnRleHQgdmFjX2NvbnRleHQsIGludCBvcHRpb25zKQogCQkJY2xhc3NG b3JtLT5yZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCiAJCQljb250aW51 ZTsKIAorCQkvKiBTa2lwIHRlbXAgcmVsYXRpb25zIGJlbG9uZ2luZyB0byBvdGhlciBzZXNz aW9ucyAqLworCQlpZiAoY2xhc3NGb3JtLT5yZWxwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNU RU5DRV9URU1QICYmCisJCQkhaXNUZW1wT3JUZW1wVG9hc3ROYW1lc3BhY2UoY2xhc3NGb3Jt LT5yZWxuYW1lc3BhY2UpKQorCQkJY29udGludWU7CisKIAkJLyogY2hlY2sgcGVybWlzc2lv bnMgb2YgcmVsYXRpb24gKi8KIAkJaWYgKCF2YWN1dW1faXNfcGVybWl0dGVkX2Zvcl9yZWxh dGlvbihyZWxpZCwgY2xhc3NGb3JtLCBvcHRpb25zKSkKIAkJCWNvbnRpbnVlOwotLSAKMi40 My4wCgo= --------------dcAtHQCWFk1c0vDB1CacF0gq Content-Type: text/x-patch; charset=UTF-8; name="v3-0002-Test-VACUUM-FULL-CLUSTER-and-REPACK-with-locked-t.patch" Content-Disposition: attachment; filename*0="v3-0002-Test-VACUUM-FULL-CLUSTER-and-REPACK-with-locked-t.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA5N2QxYjIwMjNiOGM0YWM1ZDkyNjEwZTk3NjFkMTEyYWI2OGNiZTIzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gSm9uZXMgPGppbS5qb25lc0B1bmktbXVlbnN0 ZXIuZGU+CkRhdGU6IFdlZCwgMjUgTWFyIDIwMjYgMjM6MzA6NTUgKzAxMDAKU3ViamVjdDog W1BBVENIIHYzIDIvMl0gVGVzdCBWQUNVVU0gRlVMTCwgQ0xVU1RFUiwgYW5kIFJFUEFDSyB3 aXRoIGxvY2tlZCB0ZW1wCiB0YWJsZXMKClRoaXMgdGVzdCBjcmVhdGVzIGEgYmFja2dyb3Vu ZCBzZXNzaW9uIHdpdGggYSB0ZW1wIHRhYmxlIGFuZCBtYXJrcwppdHMgaW5kZXggYXMgY2x1 c3RlcmVkIChtYWtpbmcgaXQgdmlzaWJsZSB0byBib3RoIHRoZSBwZ19jbGFzcyBzY2FuCnVz ZWQgYnkgVkFDVVVNIEZVTEwgYW5kIFJFUEFDSywgYW5kIHRoZSBwZ19pbmRleCBzY2FuIHVz ZWQgYnkgQ0xVU1RFUiksCnRoZW4gaG9sZHMgQUNDRVNTIFNIQVJFIExPQ0sgaW4gYW4gb3Bl biB0cmFuc2FjdGlvbi4gIEVhY2ggY29tbWFuZApydW5zIHdpdGggbG9ja190aW1lb3V0ID0g JzFtcycuICBTaW5jZSBsb2NrX3RpbWVvdXQgb25seSBmaXJlcyB3aGVuIGEKYmFja2VuZCBh Y3R1YWxseSBibG9ja3Mgd2FpdGluZyBmb3IgYSBsb2NrLCAxbXMgaXMgc3VmZmljaWVudC4K LS0tCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy9tZXNvbi5idWlsZCAgICAgICAgfCAg MSArCiAuLi4vdC8wMTFfdmFjdXVtX2NsdXN0ZXJfdGVtcF90YWJsZXMucGwgICAgICAgfCA2 NSArKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDY2IGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAx MV92YWN1dW1fY2x1c3Rlcl90ZW1wX3RhYmxlcy5wbAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9taXNjL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X21pc2MvbWVzb24uYnVpbGQKaW5kZXggNmU4ZGIxNjIxYTcuLmQ2NGU4ZGY1NmJmIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy9tZXNvbi5idWlsZAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy9tZXNvbi5idWlsZApAQCAtMTksNiArMTksNyBA QCB0ZXN0cyArPSB7CiAgICAgICAndC8wMDhfcmVwbHNsb3Rfc2luZ2xlX3VzZXIucGwnLAog ICAgICAgJ3QvMDA5X2xvZ190ZW1wX2ZpbGVzLnBsJywKICAgICAgICd0LzAxMF9pbmRleF9j b25jdXJyZW50bHlfdXBzZXJ0LnBsJywKKyAgICAgICd0LzAxMV92YWN1dW1fY2x1c3Rlcl90 ZW1wX3RhYmxlcy5wbCcsCiAgICAgXSwKICAgICAjIFRoZSBpbmplY3Rpb24gcG9pbnRzIGFy ZSBjbHVzdGVyLXdpZGUsIHNvIGRpc2FibGUgaW5zdGFsbGNoZWNrCiAgICAgJ3J1bm5pbmdj aGVjayc6IGZhbHNlLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2Mv dC8wMTFfdmFjdXVtX2NsdXN0ZXJfdGVtcF90YWJsZXMucGwgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfbWlzYy90LzAxMV92YWN1dW1fY2x1c3Rlcl90ZW1wX3RhYmxlcy5wbApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTYxMmI0ZDYzNjEKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAxMV92YWN1dW1fY2x1 c3Rlcl90ZW1wX3RhYmxlcy5wbApAQCAtMCwwICsxLDY1IEBACisjIENvcHlyaWdodCAoYykg MjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyMKKyMgVmVyaWZ5 IHRoYXQgbm8tYXJndW1lbnQgVkFDVVVNIEZVTEwsIENMVVNURVIsIGFuZCBSRVBBQ0sgc2tp cCB0ZW1wb3JhcnkKKyMgdGFibGVzIGJlbG9uZ2luZyB0byBvdGhlciBzZXNzaW9ucy4KKyMK KyMgQSBiYWNrZ3JvdW5kIHNlc3Npb24gY3JlYXRlcyBhIHRlbXAgdGFibGUgYW5kIG1hcmtz IGl0cyBpbmRleCBhcyBjbHVzdGVyZWQg4oCUCisjIG1ha2luZyBpdCB2aXNpYmxlIHRvIGJv dGggdGhlIHBnX2NsYXNzIHNjYW4gKFZBQ1VVTSBGVUxMLCBSRVBBQ0spIGFuZCB0aGUKKyMg cGdfaW5kZXggc2NhbiAoQ0xVU1RFUikg4oCUIHRoZW4gaG9sZHMgQUNDRVNTIFNIQVJFIExP Q0sgaW4gYW4gb3BlbiB0cmFuc2FjdGlvbi4KKyMgRWFjaCBjb21tYW5kIHJ1bnMgd2l0aCBs b2NrX3RpbWVvdXQgPSAnMW1zJy4gU2luY2UgbG9ja190aW1lb3V0IG9ubHkKKyMgZmlyZXMg d2hlbiBhIGJhY2tlbmQgYWN0dWFsbHkgYmxvY2tzIHdhaXRpbmcgZm9yIGEgbG9jaywgMW1z IGlzIHN1ZmZpY2llbnQuCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgUG9z dGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsK K3VzZSBUZXN0OjpNb3JlOworCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0 ZXItPm5ldygndmFjdXVtX2NsdXN0ZXJfdGVtcCcpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+ c3RhcnQ7CisKKyMgU2Vzc2lvbiAxOiBidWlsZCB0aGUgdGVtcCB0YWJsZSBhbmQgaG9sZCBh IGNvbmZsaWN0aW5nIGxvY2suCitteSAkcHNxbDEgPSAkbm9kZS0+YmFja2dyb3VuZF9wc3Fs KCdwb3N0Z3JlcycpOworCiskcHNxbDEtPnF1ZXJ5X3NhZmUoCisJcXtDUkVBVEUgVEVNUCBU QUJMRSB0ZW1wX3JlcGFja190ZXN0ICh2YWwgaW50KTsKKwkgIElOU0VSVCBJTlRPIHRlbXBf cmVwYWNrX3Rlc3QgVkFMVUVTICgxKTsKKwkgIENSRUFURSBJTkRFWCB0ZW1wX3JlcGFja19p ZHggT04gdGVtcF9yZXBhY2tfdGVzdCAodmFsKTsKKwkgIENMVVNURVIgdGVtcF9yZXBhY2tf dGVzdCBVU0lORyB0ZW1wX3JlcGFja19pZHg7fSk7CisKKyRwc3FsMS0+cXVlcnlfc2FmZShx e0JFR0lOfSk7CiskcHNxbDEtPnF1ZXJ5X3NhZmUocXtMT0NLIFRBQkxFIHRlbXBfcmVwYWNr X3Rlc3QgSU4gQUNDRVNTIFNIQVJFIE1PREV9KTsKKworbXkgKCRzdGRvdXQsICRzdGRlcnIs ICRyZXQpOworCisjIFZBQ1VVTSBGVUxMIOKAlCBwZ19jbGFzcyBzY2FuIHBhdGguCiskcmV0 ID0gJG5vZGUtPnBzcWwoCisJJ3Bvc3RncmVzJywKKwkiU0VUIGxvY2tfdGltZW91dCA9ICcx bXMnOyBWQUNVVU0gRlVMTDsiLAorCXN0ZG91dCA9PiBcJHN0ZG91dCwKKwlzdGRlcnIgPT4g XCRzdGRlcnIpOworaXMoJHJldCwgMCwKKwknVkFDVVVNIEZVTEwgY29tcGxldGVzIHdpdGhv dXQgYmxvY2tpbmcgb24gYW5vdGhlciBzZXNzaW9uIHRlbXAgdGFibGUnKTsKKworIyBDTFVT VEVSIOKAlCBwZ19pbmRleCBzY2FuIHBhdGggKGluZGlzY2x1c3RlcmVkIGVudHJpZXMpLgor JHJldCA9ICRub2RlLT5wc3FsKAorCSdwb3N0Z3JlcycsCisJIlNFVCBsb2NrX3RpbWVvdXQg PSAnMW1zJzsgQ0xVU1RFUjsiLAorCXN0ZG91dCA9PiBcJHN0ZG91dCwKKwlzdGRlcnIgPT4g XCRzdGRlcnIpOworaXMoJHJldCwgMCwKKwknQ0xVU1RFUiBjb21wbGV0ZXMgd2l0aG91dCBi bG9ja2luZyBvbiBhbm90aGVyIHNlc3Npb24gdGVtcCB0YWJsZScpOworCisjIFJFUEFDSyDi gJQgcGdfY2xhc3Mgc2NhbiBwYXRoLgorJHJldCA9ICRub2RlLT5wc3FsKAorCSdwb3N0Z3Jl cycsCisJIlNFVCBsb2NrX3RpbWVvdXQgPSAnMW1zJzsgUkVQQUNLOyIsCisJc3Rkb3V0ID0+ IFwkc3Rkb3V0LAorCXN0ZGVyciA9PiBcJHN0ZGVycik7CitpcygkcmV0LCAwLAorCSdSRVBB Q0sgY29tcGxldGVzIHdpdGhvdXQgYmxvY2tpbmcgb24gYW5vdGhlciBzZXNzaW9uIHRlbXAg dGFibGUnKTsKKworJHBzcWwxLT5xdWl0OworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNDMu MAoK --------------dcAtHQCWFk1c0vDB1CacF0gq--