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 1wtGqO-0016Ij-35 for pgsql-hackers@arkaria.postgresql.org; Mon, 10 Aug 2026 03:38:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wtGqO-00EnYD-1e for pgsql-hackers@arkaria.postgresql.org; Mon, 10 Aug 2026 03:38:31 +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 1wtGqO-00EnY4-0U for pgsql-hackers@lists.postgresql.org; Mon, 10 Aug 2026 03:38:31 +0000 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wtGqJ-00000001Gms-1rbv for pgsql-hackers@postgresql.org; Mon, 10 Aug 2026 03:38:31 +0000 Received: by mail-pf1-x431.google.com with SMTP id d2e1a72fcca58-8485bd28dd0so1320473b3a.2 for ; Sun, 09 Aug 2026 20:38:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786333105; x=1786937905; darn=postgresql.org; h=content-transfer-encoding:mime-version:content-type:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=hVtTsGN0fyppHbmOBUpD3FpUjXKf3OyU+SQZsX461B8=; b=raU0LLYyJAhKb3SGEuFCV2IS+8u9PvRjesS2ifSZhv6dS8d9qnG5lwmzu3Kupkf/U1 ui1Zqvnouud41N0NGYs6ZDJNS/dgDwUQD/3F5iXOYa9mtj+DO6m5DVaaYqLiMxSL0Mu0 8pJOpe0bLN5dgio0zhuMITRxy6JNH3VEQKEJXOcXH9rD6sAs3mq7tD4C74eMhhl8T9ZK nq4Lrc3T/f1z7PuxbKs0zJWEFqaLPfBxXhPpcT+tn4ogXx6+BmFNbeZRjD5ZCrdOv6Sr W3WG3dNRmgMqHW1Sdy0TmQesNMXg3Bk6ksERKSeJl4heaSVOTxcMIqA+j2jTpjN2NeH5 M3zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786333105; x=1786937905; h=content-transfer-encoding:mime-version:content-type:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=hVtTsGN0fyppHbmOBUpD3FpUjXKf3OyU+SQZsX461B8=; b=USD0fvtoRf4/rKvp07j0I94jAWyDFH4L9KLlVwLtMBObuKH6bO6WBQUdCDGNkNpABn ciANXulzexKqI/wKsdqa6lq4dxZXZR2r4BQzg9sfYXjnjsC8D3aYDFusZeAJh9QUgLYH hdOGOst1qiHPHBvk5WknQZSIjmsIAJBYzuOVcYytUbBEDElh9kwnzgD/A/3eNhMdSgpv VLDUNhRWV8uc0bU9sbD+jGiZwxozsa+kSIZdwX+bN5nqWM1sYq73ur1sFaMmG0OkiPEf jrXLDEY6AK+98K7n9pk7xjYdUUxEeVq2/M6djtflf5kuGmojtru2O4A2OjobUFhSm2Ei l9zQ== X-Gm-Message-State: AOJu0YxsY5ej/hPQZTvI98JBAMN7kKNJPjECbbcpjmyyrrhk6ZfnS9EC YMGhQDtAnknPrBlbbyZAcmA+3WD7W3p+vkmNEdt99tt8yb9mMdawZFhLdg9dTR/D X-Gm-Gg: AR+sD10p9WhbHMUaua5awHFYEiE0Zr50RwGeOPgW7HrmN6yI2+oYdeP+bxv7ru4OsP8 Ym0L+sXDkNLw8LCaFKsVarV9CmqQNZhpwlqjesUxYErUUKbGIyKBgNnJWKgwyQ7M6DqXpK+JLjx jZk2DciO2i7wLPpPwgT3gAxizmiqD9ZPBr4xdRXBpiipxeqYmrDV2EmAP0lMF2gOVJaDd5u/klR OyxmqleMn7g3CkEx4njrJad40dw7FcY/ZSHgLj7bGBw1Yb1R53DOre8A46HMAyLtfwPqo8eMkUu 3zgRB9is22gaHZymycpsIUo6GWj9Zhihj6MP3temutkIT0OA6KN3tdj3AX1t2cJZbeMcFtmAg0v h3di2qdORWzqAAkaBF0PB7Dyhmt1/dJHZHQa3RtX/spXkP36QdLRLt1flD3zEeu3nTwKBmsqY59 dkoUiEDQGqAWoO+SMlXObLQthmgKO2ufQ7ylyRwjJY0XkRAflP/7+HMOI= X-Received: by 2002:a05:6a00:4519:b0:847:968d:b101 with SMTP id d2e1a72fcca58-84f2e03916amr47375857b3a.21.1786333105267; Sun, 09 Aug 2026 20:38:25 -0700 (PDT) Received: from redmi.lan ([1.85.10.142]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-cbe8f35bc75sm3060914a12.19.2026.08.09.20.38.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Aug 2026 20:38:24 -0700 (PDT) From: "chee.wooson" To: pgsql-hackers@postgresql.org Cc: "chee.wooson" Subject: [PATCH v5] Fix exported snapshot xmin handoff race Date: Mon, 10 Aug 2026 11:38:20 +0800 Message-ID: <20260810113633.4993-1-chee.wooson@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260729101045.422679-1-chee.wooson@gmail.com> References: <20260729101045.422679-1-chee.wooson@gmail.com> Content-Type: multipart/mixed; boundary="===============0068986617220607236==" MIME-Version: 1.0 X-Mailer: git-send-email 2.43.0 Content-Transfer-Encoding: 8bit List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --===============0068986617220607236== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 SGksCgp2NCBmYWlsZWQgb24gdGhlIG1hY09TIENJIGpvYjogMDE1X2V4cG9ydF9zbmFwc2hvdCB0 aW1lZCBvdXQuCgpBdHRhY2hlZCBpcyB2NS4gSXQgZml4ZXMgdGhlIHRlc3Qgb25seTsgdGhlIHNl cnZlci1zaWRlIGNvZGUgaXMgdW5jaGFuZ2VkCmZyb20gdjQuIFRoZSBwb2ludCBpcyBub3cgUElE LWZpbHRlcmVkIHRvIHRoZSBWQUNVVU0gYmFja2VuZCAoZXhhY3RseSBvbmUKd2FpdGVyKSBhbmQg aXMgZGV0YWNoZWQgYmVmb3JlIHdha2luZy4KClRoYW5rcywKQ2hlZQ== --===============0068986617220607236== Content-Type: text/x-patch MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="fix-exported-snapshot-xmin-handoff-race-v5.patch" Content-Description: v5 patch RnJvbSA5MzEzN2ViZWRlNTE5MGJmYjZlODI3M2I2ZTVlMTI4Y2IxOWM2MmQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiY2hlZS53b29zb24iIDxjaGVlLndvb3NvbkBnbWFpbC5jb20+ CkRhdGU6IFRodSwgMzAgSnVsIDIwMjYgMTI6MDA6NDAgKzA4MDAKU3ViamVjdDogW1BBVENIIHY1 XSBGaXggZXhwb3J0ZWQgc25hcHNob3QgeG1pbiBoYW5kb2ZmIHJhY2UKClByb2NBcnJheUluc3Rh bGxJbXBvcnRlZFhtaW4oKSB2ZXJpZmllcyB0aGF0IHRoZSBzb3VyY2UgdHJhbnNhY3Rpb24gaXMK c3RpbGwgcnVubmluZyBhbmQgdGhlbiBpbnN0YWxscyB0aGUgaW1wb3J0ZWQgeG1pbi4gIEJvdGgg c3RlcHMgaGF2ZSB0byBiZQpzZXJpYWxpemVkIHdpdGggY29uY3VycmVudCBwcm9jLWFycmF5IGhv cml6b24gY29tcHV0YXRpb25zOyBvdGhlcndpc2UKVkFDVVVNIGNhbiBzY2FuIHRoZSBpbXBvcnRl ciBiZWZvcmUgdGhlIHhtaW4gaXMgaW5zdGFsbGVkIHdoaWxlIHRoZSBzb3VyY2UKdHJhbnNhY3Rp b24gaXMgc3RpbGwgYWxsb3dlZCB0byBjbGVhciBpdHMgeG1pbiBjb25jdXJyZW50bHkuCgpUYWtl IFByb2NBcnJheUxvY2sgaW4gZXhjbHVzaXZlIG1vZGUgd2hpbGUgaW1wb3J0aW5nIGFuIGV4cG9y dGVkIHNuYXBzaG90LgpUaGF0IG1ha2VzIHRoZSB4bWluIGhhbmRvZmYgYXRvbWljIHdpdGggcmVz cGVjdCB0byBDb21wdXRlWGlkSG9yaXpvbnMoKSwKd2hpbGUga2VlcGluZyB0aGUgbm8taW1wb3J0 ZXIgdHJhbnNhY3Rpb24gZW5kIHBhdGggdW5jaGFuZ2VkLgoKQWRkIGFuIGluamVjdGlvbi1wb2lu dCBUQVAgdGVzdCB0aGF0IHBhdXNlcyBWQUNVVU0gaW5zaWRlCkNvbXB1dGVYaWRIb3Jpem9ucygp IHdoaWxlIGl0IGhvbGRzIFByb2NBcnJheUxvY2sgc2hhcmVkLCBzdGFydHMgU0VUClRSQU5TQUNU SU9OIFNOQVBTSE9UIGNvbmN1cnJlbnRseSwgYW5kIHZlcmlmaWVzIHRoYXQgdGhlIGltcG9ydGVy IHdhaXRzIGZvcgpQcm9jQXJyYXlMb2NrIGJlZm9yZSB0aGUgaW1wb3J0ZWQgc25hcHNob3QgaXMg YWxsb3dlZCB0byBwcm90ZWN0IHRoZSBkZWxldGVkCnR1cGxlLgotLS0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL3ZhY3V1bS5jICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9wcm9jYXJyYXkuYyAgICAgICAgICAgfCAgMTIgKy0KIHNyYy90ZXN0L21vZHVsZXMv dGVzdF9taXNjL21lc29uLmJ1aWxkICAgICAgICB8ICAgMSArCiAuLi4vdGVzdF9taXNjL3QvMDE1 X2V4cG9ydF9zbmFwc2hvdC5wbCAgICAgICAgfCAyNDAgKysrKysrKysrKysrKysrKysrCiA0IGZp bGVzIGNoYW5nZWQsIDI1MyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wMTVfZXhwb3J0X3NuYXBzaG90 LnBsCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy92YWN1dW0uYwppbmRleCAzODUzOWE2ZmQzZC4uZDQxZGM1YzY3OWEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3ZhY3V1bS5jCkBAIC0xMTM5LDYgKzExMzksNyBAQCB2YWN1dW1fZ2V0X2N1dG9m ZnMoUmVsYXRpb24gcmVsLCBjb25zdCBWYWN1dW1QYXJhbXMgKnBhcmFtcywKIAkgKiB0aGF0IG9u bHkgb25lIHZhY3V1bSBwcm9jZXNzIGNhbiBiZSB3b3JraW5nIG9uIGEgcGFydGljdWxhciB0YWJs ZSBhdAogCSAqIGFueSB0aW1lLCBhbmQgdGhhdCBlYWNoIHZhY3V1bSBpcyBhbHdheXMgYW4gaW5k ZXBlbmRlbnQgdHJhbnNhY3Rpb24uCiAJICovCisJSU5KRUNUSU9OX1BPSU5UKCJ2YWN1dW0tZ2V0 LWN1dG9mZnMtYmVmb3JlLW9sZGVzdC14bWluIiwgTlVMTCk7CiAJY3V0b2Zmcy0+T2xkZXN0WG1p biA9IEdldE9sZGVzdE5vblJlbW92YWJsZVRyYW5zYWN0aW9uSWQocmVsKTsKIAogCUFzc2VydChU cmFuc2FjdGlvbklkSXNOb3JtYWwoY3V0b2Zmcy0+T2xkZXN0WG1pbikpOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9wcm9jYXJyYXkuYwppbmRleCA2MDMzNmIzMTgwMy4uOWNlNWRjZmNiNjggMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jCisrKyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jCkBAIC0xNzQwLDYgKzE3NDAsMTYgQEAgQ29tcHV0ZVhp ZEhvcml6b25zKENvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdCAqaCkKIAkJeGlkID0gVUlOVDMyX0FD Q0VTU19PTkNFKG90aGVyX3hpZHNbaW5kZXhdKTsKIAkJeG1pbiA9IFVJTlQzMl9BQ0NFU1NfT05D RShwcm9jLT54bWluKTsKIAorI2lmZGVmIFVTRV9JTkpFQ1RJT05fUE9JTlRTCisJCXsKKwkJCWNo YXIJCWlwX25hbWVbNjRdOworCisJCQlzbnByaW50ZihpcF9uYW1lLCBzaXplb2YoaXBfbmFtZSks CisJCQkJCSAiY29tcHV0ZS14aWQtaG9yaXpvbnMtYWZ0ZXItcmVhZGluZy1waWQtJWQiLCBwcm9j LT5waWQpOworCQkJSW5qZWN0aW9uUG9pbnRSdW4oaXBfbmFtZSwgTlVMTCk7CisJCX0KKyNlbmRp ZgorCiAJCS8qCiAJCSAqIENvbnNpZGVyIGJvdGggdGhlIHRyYW5zYWN0aW9uJ3MgWG1pbiwgYW5k IGl0cyBYaWQuCiAJCSAqCkBAIC0yNDg4LDcgKzI0OTgsNyBAQCBQcm9jQXJyYXlJbnN0YWxsSW1w b3J0ZWRYbWluKFRyYW5zYWN0aW9uSWQgeG1pbiwKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogR2V0 IGxvY2sgc28gc291cmNlIHhhY3QgY2FuJ3QgZW5kIHdoaWxlIHdlJ3JlIGRvaW5nIHRoaXMgKi8K LQlMV0xvY2tBY3F1aXJlKFByb2NBcnJheUxvY2ssIExXX1NIQVJFRCk7CisJTFdMb2NrQWNxdWly ZShQcm9jQXJyYXlMb2NrLCBMV19FWENMVVNJVkUpOwogCiAJLyoKIAkgKiBGaW5kIHRoZSBQR1BS T0MgZW50cnkgb2YgdGhlIHNvdXJjZSB0cmFuc2FjdGlvbi4gKFRoaXMgY291bGQgdXNlCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9taXNjL21lc29uLmJ1aWxkCmluZGV4IGVlMjkwNjk4YjMxLi5lYjQ4ZWUz NWQxZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVpbGQK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVpbGQKQEAgLTIzLDYgKzIz LDcgQEAgdGVzdHMgKz0gewogICAgICAgJ3QvMDEyX2RkbHV0aWxzLnBsJywKICAgICAgICd0LzAx M190ZW1wX29ial9tdWx0aXNlc3Npb24ucGwnLAogICAgICAgJ3QvMDE0X2xvZ19zdGF0ZW1lbnRf bWF4X2xlbmd0aC5wbCcsCisgICAgICAndC8wMTVfZXhwb3J0X3NuYXBzaG90LnBsJywKICAgICBd LAogICAgICMgVGhlIGluamVjdGlvbiBwb2ludHMgYXJlIGNsdXN0ZXItd2lkZSwgc28gZGlzYWJs ZSBpbnN0YWxsY2hlY2sKICAgICAncnVubmluZ2NoZWNrJzogZmFsc2UsCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAxNV9leHBvcnRfc25hcHNob3QucGwgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAxNV9leHBvcnRfc25hcHNob3QucGwKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJkMTMxYWFlZDE3Ci0tLSAvZGV2L251bGwK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wMTVfZXhwb3J0X3NuYXBzaG90LnBs CkBAIC0wLDAgKzEsMjQwIEBACisjIENvcHlyaWdodCAoYykgMjAyNC0yMDI2LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIworIyBUZXN0OiByZXByb2R1Y2UgdGhlIGV4cG9y dGVkLXNuYXBzaG90IHhtaW4gaGFuZG9mZiByYWNlLgorIworIyBTdHJhdGVneToKKyMgICAxLiBT b3VyY2UgZXhwb3J0cyBhIHNuYXBzaG90IHRoYXQgY2FuIHN0aWxsIHNlZSBhIHR1cGxlIGRlbGV0 ZWQgbGF0ZXIuCisjICAgMi4gSW1wb3J0ZXIgc3RhcnRzIGEgdHJhbnNhY3Rpb24gYnV0IGRvZXMg bm90IHlldCBpbXBvcnQgdGhlIHNuYXBzaG90LCBzbworIyAgICAgIGl0cyB4bWluIGlzIEludmFs aWQuCisjICAgMy4gVkFDVVVNIHJlYWNoZXMgdmFjdXVtX2dldF9jdXRvZmZzKCksIHRoZW4gd2Fp dHMgYWZ0ZXIKKyMgICAgICBDb21wdXRlWGlkSG9yaXpvbnMoKSBoYXMgcmVhZCB0aGUgaW1wb3J0 ZXIncyBzdGlsbC1JbnZhbGlkIHhtaW4uCisjICAgNC4gV2l0aG91dCB0aGUgZml4LCBTRVQgVFJB TlNBQ1RJT04gU05BUFNIT1QgY2FuIGNvbXBsZXRlIHdoaWxlIFZBQ1VVTSBpcworIyAgICAgIHBh dXNlZCBpbiB0aGUgcHJvYy1hcnJheSBzY2FuLiAgVGhlIHRlc3QgdGhlbiBjb21taXRzIHRoZSBz b3VyY2UKKyMgICAgICB0cmFuc2FjdGlvbiBhbmQgd2FrZXMgVkFDVVVNLCBhbGxvd2luZyBWQUNV VU0gdG8gbWlzcyBib3RoIHRoZSBpbXBvcnRlcgorIyAgICAgIGFuZCB0aGUgc291cmNlIHhtaW4g YW5kIHJlbW92ZSB0aGUgZGVsZXRlZCB0dXBsZS4KKyMgICA1LiBXaXRoIHRoZSBmaXgsIFNFVCBU UkFOU0FDVElPTiBTTkFQU0hPVCB3YWl0cyBmb3IgUHJvY0FycmF5TG9jaworIyAgICAgIGV4Y2x1 c2l2ZS4gIFRoZSB0ZXN0IHdha2VzIFZBQ1VVTSB3aGlsZSB0aGUgc291cmNlIGlzIHN0aWxsIG9w ZW4sIHNvCisjICAgICAgVkFDVVVNIHNlZXMgdGhlIHNvdXJjZSB4bWluIGJlZm9yZSB0aGUgaW1w b3J0ZXIgaW5zdGFsbHMgdGhlIHNuYXBzaG90LgorIworIyBUaGUgZmluYWwgcXVlcnkgbXVzdCBz ZWUgdGhlIGRlbGV0ZWQgdHVwbGUgdGhyb3VnaCB0aGUgaW1wb3J0ZWQgc25hcHNob3QuCisjIE9u IGFuIHVuZml4ZWQgc2VydmVyIGl0IGluc3RlYWQgc2VlcyB6ZXJvIHJvd3MuCisjCisjIERlcGVu ZHMgb25seSBvbjogaW5qZWN0aW9uX3BvaW50cyAoYnVpbHQtaW4gdGVzdCBtb2R1bGUpCisKK3Vz ZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3VzZSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6 Ok1vcmU7Cit1c2UgVGltZTo6SGlSZXMgcXcodXNsZWVwKTsKKworaWYgKCRFTlZ7ZW5hYmxlX2lu amVjdGlvbl9wb2ludHN9IG5lICd5ZXMnKQoreworCXBsYW4gc2tpcF9hbGwgPT4gJ0luamVjdGlv biBwb2ludHMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJ1aWxkJzsKK30KKworbXkgJG5vZGUgPSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ2V4cG9ydF9yYWNlX25vZGUnKTsKKyRub2Rl LT5pbml0OworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCSJzaGFyZWRf cHJlbG9hZF9saWJyYXJpZXMgPSAnaW5qZWN0aW9uX3BvaW50cyciKTsKKyRub2RlLT5zdGFydDsK KworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JFQVRFIEVYVEVOU0lPTiBpbmplY3Rp b25fcG9pbnRzJyk7CisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXF7CisJQ1JFQVRF IFRBQkxFIHJhY2VfdGVzdCAoaWQgaW50LCBkYXRhIHRleHQpOworCUlOU0VSVCBJTlRPIHJhY2Vf dGVzdCBWQUxVRVMgKDEsICdzaG91bGRfYmVfdmlzaWJsZScpOworfSk7CisKKyMgQ3JlYXRlIHRo ZSBpbXBvcnRlciBiZWZvcmUgdGhlIHNvdXJjZS4gIFRoZSB0ZXN0IGRvZXMgbm90IGRlcGVuZCBv biBhIGZpeGVkCisjIHByb2MtYXJyYXkgaW5kZXgsIGJ1dCB0aGUgd3JvbmctaG9yaXpvbiBpbnRl cmxlYXZpbmcgcmVxdWlyZXMgVkFDVVVNIHRvIHJlYWQKKyMgdGhlIGltcG9ydGVyJ3MgSW52YWxp ZCB4bWluIGJlZm9yZSBpdCByZWFkcyB0aGUgc291cmNlJ3MgeG1pbi4KK215ICRpbXAgICA9ICRu b2RlLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVzJyk7CitteSAkc3JjICAgPSAkbm9kZS0+YmFj a2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycpOworbXkgJHZhYyAgID0gJG5vZGUtPmJhY2tncm91bmRf cHNxbCgncG9zdGdyZXMnKTsKK215ICRkZWwgICA9ICRub2RlLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bv c3RncmVzJyk7CitteSAkY29vcmQgPSAkbm9kZS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3Jlcycp OworCitteSAkaW1wX3BpZCA9ICRpbXAtPnF1ZXJ5KCJTRUxFQ1QgcGdfYmFja2VuZF9waWQoKSIp OworJGltcF9waWQgPX4gcy9ccysvL2c7CitteSAkYWZ0ZXJfcmVhZGluZ19pbXBvcnRlcl9pcCA9 CisgICJjb21wdXRlLXhpZC1ob3Jpem9ucy1hZnRlci1yZWFkaW5nLXBpZC0kaW1wX3BpZCI7CisK KyRzcmMtPnF1ZXJ5KCJCRUdJTiBJU09MQVRJT04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEIik7Cisk c3JjLT5xdWVyeSgiU0VMRUNUICogRlJPTSByYWNlX3Rlc3QiKTsKK215ICR0b2tlbiA9ICRzcmMt PnF1ZXJ5KCJTRUxFQ1QgcGdfZXhwb3J0X3NuYXBzaG90KCkiKTsKKyR0b2tlbiA9fiBzL1xzKy8v ZzsKK2RpYWcoImV4cG9ydGVkIHNuYXBzaG90IHRva2VuOiAkdG9rZW4iKTsKKworJGRlbC0+cXVl cnkoIkRFTEVURSBGUk9NIHJhY2VfdGVzdCBXSEVSRSBpZCA9IDEiKTsKKyRkZWwtPnF1ZXJ5KCJD T01NSVQiKTsKK2RpYWcoImRlbGV0ZXIgY29tbWl0dGVkIik7CisKKyMgQWR2YW5jZSB0aGUgWElE IGNvdW50ZXIgc28gdGhhdCB0aGUgaG9yaXpvbiAobGF0ZXN0Q29tcGxldGVkWGlkICsgMSB3aGVu CisjIG5vIGJhY2tlbmQgaGFzIGEgdmFsaWQgeG1pbikgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFu IHRoZSBkZWxldGVyJ3MgWElELgorZm9yIChteSAkaSA9IDA7ICRpIDwgMTAwOyAkaSsrKQorewor CSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCB0eGlkX2N1cnJlbnQoKSIpOwor fQorZGlhZygiMTAwIGZpbGxlciBYSURzIGNvbnN1bWVkIik7CisKKyMgTm8gcXVlcnkgYWZ0ZXIg QkVHSU46IGltcG9ydGVyIHhtaW4gc3RheXMgSW52YWxpZCB1bnRpbCBTRVQgVFJBTlNBQ1RJT04K KyMgU05BUFNIT1QsIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgdGhpcyByYWNlLgorJGltcC0+cXVl cnkoIkJFR0lOIElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQiKTsKKworbXkgJHZhY19w aWQgPSAkdmFjLT5xdWVyeSgiU0VMRUNUIHBnX2JhY2tlbmRfcGlkKCkiKTsKKyR2YWNfcGlkID1+ IHMvXHMrLy9nOworZGlhZygiVkFDVVVNIFBJRDogJHZhY19waWQiKTsKKworJHZhYy0+cXVlcnko IlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3NldF9sb2NhbCgpIik7CiskdmFjLT5xdWVyeSgKKwki U0VMRUNUIGluamVjdGlvbl9wb2ludHNfYXR0YWNoKCd2YWN1dW0tZ2V0LWN1dG9mZnMtYmVmb3Jl LW9sZGVzdC14bWluJywgJ3dhaXQnKSIpOworIyBBdHRhY2ggdGhlIHBlci1QSUQgcG9pbnQgaGVy ZSwgaW4gdGhlIFZBQ1VVTSBiYWNrZW5kLCBzbyB0aGF0CisjIGluamVjdGlvbl9wb2ludHNfc2V0 X2xvY2FsKCkgdGFncyBpdCB3aXRoIGEgUElEIGNvbmRpdGlvbi4gIEEgZ2xvYmFsbHkKKyMgYXR0 YWNoZWQgcG9pbnQgd291bGQgYWxzbyBmaXJlIChhbmQgYmxvY2spIGluIGFueSBvdGhlciBwcm9j ZXNzIHRoYXQgcnVucworIyBDb21wdXRlWGlkSG9yaXpvbnMoKSwgZS5nLiBhbiBhdXRvdmFjdXVt IHdvcmtlciwgYW5kCisjIGluamVjdGlvbl9wb2ludHNfd2FrZXVwKCkgb25seSB3YWtlcyB0aGUg Zmlyc3Qgd2FpdGVyIC0gbGVhdmluZyB0aGUgb3RoZXIKKyMgb25lIHN0dWNrIGhvbGRpbmcgUHJv Y0FycmF5TG9jayBTSEFSRUQgZm9yZXZlci4gIFdpdGggdGhlIFBJRCBjb25kaXRpb24sCisjIGV4 YWN0bHkgb25lIHdhaXRlciBjYW4gZXZlciBleGlzdC4KKyR2YWMtPnF1ZXJ5KAorCSJTRUxFQ1Qg aW5qZWN0aW9uX3BvaW50c19hdHRhY2goJyRhZnRlcl9yZWFkaW5nX2ltcG9ydGVyX2lwJywgJ3dh aXQnKSIpOworZGlhZygiVkFDVVVNIGF0dGFjaGVkIGJvdGggaW5qZWN0aW9uIHBvaW50cyAoUElE LWZpbHRlcmVkIHRvIFZBQ1VVTSkiKTsKKworJHZhYy0+cXVlcnlfdW50aWwocXIvdmFjX3N0YXJ0 ZWQvLAorCSJcXGVjaG8gdmFjX3N0YXJ0ZWRcblZBQ1VVTSByYWNlX3Rlc3Q7XG4iKTsKK2RpYWco IlZBQ1VVTSBzdGFydGVkIik7CisKK3sKKwlteSAkYmxvY2tlZCA9IDA7CisJZm9yIChteSAkaSA9 IDA7ICRpIDwgMTgwMDsgJGkrKykKKwl7CisJCW15ICRyZXN1bHQgPSAkY29vcmQtPnF1ZXJ5KAor CQkJIlNFTEVDVCBjb3VudCgqKSA9IDEgRlJPTSBwZ19zdGF0X2FjdGl2aXR5IgorCQkJICAuICIg V0hFUkUgcGlkID0gJHZhY19waWQiCisJCQkgIC4gIiBBTkQgd2FpdF9ldmVudF90eXBlID0gJ0lu amVjdGlvblBvaW50JyIKKwkJCSAgLiAiIEFORCB3YWl0X2V2ZW50ID0gJ3ZhY3V1bS1nZXQtY3V0 b2Zmcy1iZWZvcmUtb2xkZXN0LXhtaW4nIik7CisJCWlmICgkcmVzdWx0ID1+IC90LykKKwkJewor CQkJJGJsb2NrZWQgPSAxOworCQkJbGFzdDsKKwkJfQorCQl1c2xlZXAoMTAwXzAwMCk7CisJfQor CWRpZSAiVkFDVVVNIGRpZCBub3QgcmVhY2ggdmFjdXVtX2dldF9jdXRvZmZzIHdpdGhpbiAxODBz IgorCQl1bmxlc3MgJGJsb2NrZWQ7Cit9CitkaWFnKCJWQUNVVU0gYmxvY2tlZCBiZWZvcmUgY29t cHV0aW5nIFZBQ1VVTSBjdXRvZmZzIik7CisKKyRjb29yZC0+cXVlcnkoCisJIlNFTEVDVCBpbmpl Y3Rpb25fcG9pbnRzX2RldGFjaCgndmFjdXVtLWdldC1jdXRvZmZzLWJlZm9yZS1vbGRlc3QteG1p bicpIik7CitkaWFnKCJkZXRhY2hlZCB2YWN1dW0tZ2V0LWN1dG9mZnMtYmVmb3JlLW9sZGVzdC14 bWluIik7CisKKyRjb29yZC0+cXVlcnkoCisJIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3dha2V1 cCgndmFjdXVtLWdldC1jdXRvZmZzLWJlZm9yZS1vbGRlc3QteG1pbicpIik7CitkaWFnKCJ3b2tl IFZBQ1VVTSBmcm9tIHZhY3V1bV9nZXRfY3V0b2ZmcyIpOworCit7CisJbXkgJGJsb2NrZWQgPSAw OworCWZvciAobXkgJGkgPSAwOyAkaSA8IDE4MDA7ICRpKyspCisJeworCQlteSAkcmVzdWx0ID0g JGNvb3JkLT5xdWVyeSgKKwkJCSJTRUxFQ1QgY291bnQoKikgPSAxIEZST00gcGdfc3RhdF9hY3Rp dml0eSIKKwkJCSAgLiAiIFdIRVJFIHBpZCA9ICR2YWNfcGlkIgorCQkJICAuICIgQU5EIHdhaXRf ZXZlbnRfdHlwZSA9ICdJbmplY3Rpb25Qb2ludCciCisJCQkgIC4gIiBBTkQgd2FpdF9ldmVudCA9 ICckYWZ0ZXJfcmVhZGluZ19pbXBvcnRlcl9pcCciKTsKKwkJaWYgKCRyZXN1bHQgPX4gL3QvKQor CQl7CisJCQkkYmxvY2tlZCA9IDE7CisJCQlsYXN0OworCQl9CisJCXVzbGVlcCgxMDBfMDAwKTsK Kwl9CisJZGllICJWQUNVVU0gZGlkIG5vdCBzY2FuIHRoZSBpbXBvcnRlciB3aXRoaW4gMTgwcyIg dW5sZXNzICRibG9ja2VkOworfQorZGlhZygiVkFDVVVNIGJsb2NrZWQgYWZ0ZXIgcmVhZGluZyBp bXBvcnRlciB4bWluIik7CisKKyRpbXAtPnF1ZXJ5X3VudGlsKHFyL2ltcG9ydF9zdGFydGVkLywK KwkiXFxlY2hvIGltcG9ydF9zdGFydGVkXG5TRVQgVFJBTlNBQ1RJT04gU05BUFNIT1QgJyR0b2tl bic7XG4iCisJICAuICJcXGVjaG8gaW1wb3J0X2RvbmVcbiIpOworZGlhZygiaW1wb3J0ZXIgc3Rh cnRlZCBTRVQgVFJBTlNBQ1RJT04gU05BUFNIT1QiKTsKKworbXkgJGltcG9ydGVyX3dhaXRpbmcg PSAwOworbXkgJGltcG9ydGVyX3dhaXRfc3RhdGUgPSAnJzsKK2ZvciAobXkgJGkgPSAwOyAkaSA8 IDEwMDsgJGkrKykKK3sKKwlteSAkcmVzdWx0ID0gJGNvb3JkLT5xdWVyeSgKKwkJIlNFTEVDVCBD T0FMRVNDRShzdGF0ZSwgJycpIHx8ICd8JyB8fCIKKwkJICAuICIgQ09BTEVTQ0Uod2FpdF9ldmVu dF90eXBlLCAnJykgfHwgJ3wnIHx8IgorCQkgIC4gIiBDT0FMRVNDRSh3YWl0X2V2ZW50LCAnJyki CisJCSAgLiAiIEZST00gcGdfc3RhdF9hY3Rpdml0eSIKKwkJICAuICIgV0hFUkUgcGlkID0gJGlt cF9waWQiKTsKKwkkaW1wb3J0ZXJfd2FpdF9zdGF0ZSA9ICRyZXN1bHQ7CisJaWYgKCRyZXN1bHQg PX4gL2FjdGl2ZVx8TFdMb2NrXHxQcm9jQXJyYXkvKQorCXsKKwkJJGltcG9ydGVyX3dhaXRpbmcg PSAxOworCQlsYXN0OworCX0KKwlsYXN0IGlmICRyZXN1bHQgZXEgJyc7CisJdXNsZWVwKDEwMF8w MDApOworfQorCitpZiAoJGltcG9ydGVyX3dhaXRpbmcpCit7CisJIyBEZXRhY2ggYmVmb3JlIHdh a2luZy4gIERldGFjaGluZyBkb2VzIG5vdCB1bmJsb2NrIGEgYmFja2VuZCBhbHJlYWR5CisJIyB3 YWl0aW5nIGluIGluamVjdGlvbl93YWl0KCksIGJ1dCBvbmNlIFZBQ1VVTSBpcyB3b2tlbiBpdCBt dXN0IG5vdCBiZQorCSMgYWJsZSB0byByZS1maXJlIGEgc3RpbGwtYXR0YWNoZWQgcG9pbnQgKENv bXB1dGVYaWRIb3Jpem9ucygpIHJ1bnMgYWdhaW4KKwkjIGR1cmluZyBoZWFwIHBydW5pbmcgdmlh IEdsb2JhbFZpc1VwZGF0ZSkgYW5kIGJsb2NrIGEgc2Vjb25kIHRpbWUgaW4gYQorCSMgZnJlc2gg c2xvdCB0aGF0IG5vYm9keSB3aWxsIHdha2UuCisJJGNvb3JkLT5xdWVyeSgiU0VMRUNUIGluamVj dGlvbl9wb2ludHNfZGV0YWNoKCckYWZ0ZXJfcmVhZGluZ19pbXBvcnRlcl9pcCcpIik7CisJJGNv b3JkLT5xdWVyeSgiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfd2FrZXVwKCckYWZ0ZXJfcmVhZGlu Z19pbXBvcnRlcl9pcCcpIik7CisJZGlhZygid29rZSBWQUNVVU0gd2hpbGUgc291cmNlIHRyYW5z YWN0aW9uIGlzIHN0aWxsIG9wZW4iKTsKKwkkaW1wLT5xdWVyeV91bnRpbChxci9pbXBvcnRfZG9u ZS8sICIiKTsKKwkkc3JjLT5xdWVyeSgiQ09NTUlUIik7Cit9CitlbHNlCit7CisJJGltcC0+cXVl cnlfdW50aWwocXIvaW1wb3J0X2RvbmUvLCAiIik7CisJJHNyYy0+cXVlcnkoIkNPTU1JVCIpOwor CWRpYWcoInNvdXJjZSBjb21taXR0ZWQgYmVmb3JlIHdha2luZyBWQUNVVU0iKTsKKwkkY29vcmQt PnF1ZXJ5KCJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19kZXRhY2goJyRhZnRlcl9yZWFkaW5nX2lt cG9ydGVyX2lwJykiKTsKKwkkY29vcmQtPnF1ZXJ5KCJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c193 YWtldXAoJyRhZnRlcl9yZWFkaW5nX2ltcG9ydGVyX2lwJykiKTsKK30KKworb2soJGltcG9ydGVy X3dhaXRpbmcsCisJImltcG9ydGluZyB0cmFuc2FjdGlvbiB3YWl0cyBmb3IgUHJvY0FycmF5TG9j ayB3aGlsZSBWQUNVVU0gY29tcHV0ZXMgaG9yaXpvbnMiKTsKKworeworCW15ICRkb25lID0gMDsK Kwlmb3IgKG15ICRpID0gMDsgJGkgPCAxODAwOyAkaSsrKQorCXsKKwkJbXkgJHJlc3VsdCA9ICRj b29yZC0+cXVlcnkoCisJCQkiU0VMRUNUIGNvdW50KCopID0gMSBGUk9NIHBnX3N0YXRfYWN0aXZp dHkiCisJCQkgIC4gIiBXSEVSRSBwaWQgPSAkdmFjX3BpZCIKKwkJCSAgLiAiIEFORCBzdGF0ZSA9 ICdpZGxlJyIpOworCQlpZiAoJHJlc3VsdCA9fiAvdC8pCisJCXsKKwkJCSRkb25lID0gMTsKKwkJ CWxhc3Q7CisJfQorCXVzbGVlcCgxMDBfMDAwKTsKK30KK2Nob21wKCRpbXBvcnRlcl93YWl0X3N0 YXRlKTsKK2RpYWcoImltcG9ydGVyIHdhaXQgc3RhdGU6ICRpbXBvcnRlcl93YWl0X3N0YXRlIik7 CisJZGllICJWQUNVVU0gZGlkIG5vdCBmaW5pc2ggd2l0aGluIDE4MHMiIHVubGVzcyAkZG9uZTsK K30KK2RpYWcoIlZBQ1VVTSBmaW5pc2hlZCIpOworCitteSAkY291bnQgPSAkaW1wLT5xdWVyeSgi U0VMRUNUIGNvdW50KCopIEZST00gcmFjZV90ZXN0Iik7CiskY291bnQgPX4gcy9ccysvL2c7Citk aWFnKCJpbXBvcnRlciBzZWVzICRjb3VudCByb3cocykiKTsKKworaXMoJGNvdW50LCAxLAorCSJp bXBvcnRlZCBzbmFwc2hvdCBzdGlsbCBzZWVzIHRoZSByb3cgYWZ0ZXIgY29uY3VycmVudCBWQUNV VU0iKQorICBvciBkaWFnKCJCVUcgREVURUNURUQ6IGV4cG9ydC1zbmFwc2hvdCB4bWluIHJhY2Ug Y2F1c2VkICIKKwkJLiAicHJlbWF0dXJlIHR1cGxlIHJlbW92YWwgKGV4cGVjdGVkIDEgcm93LCBn b3QgJGNvdW50KSIpOworCiskaW1wLT5xdWVyeSgiQ09NTUlUIik7CisKKyRub2RlLT5zdG9wOwor ZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjQzLjAKCg== --===============0068986617220607236==--