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 1vGyJl-009ymP-Ad for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Nov 2025 11:38:16 +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 1vGyJk-007Of9-A4 for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Nov 2025 11:38:15 +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 1vGyJj-007Of1-Sv for pgsql-hackers@lists.postgresql.org; Thu, 06 Nov 2025 11:38:15 +0000 Received: from mail-lf1-x135.google.com ([2a00:1450:4864:20::135]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vGyJh-005iAL-0P for pgsql-hackers@lists.postgresql.org; Thu, 06 Nov 2025 11:38:14 +0000 Received: by mail-lf1-x135.google.com with SMTP id 2adb3069b0e04-592ff1d80feso859133e87.2 for ; Thu, 06 Nov 2025 03:38:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762429090; x=1763033890; darn=lists.postgresql.org; h=cc:subject:from:to:content-language:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=MBIbk2ssTH7jAE2YM+gt9w2beeV07j9WmTaTEqAiero=; b=OynHeWpmQAE1IvkKg+6mzzQ9JPXmJRrbSsPYMet6KwDRiHboxsWJ9sYWpnQTwdUs+A 49wxH1o+s26wW/R/mBljLPyRdIszH159Gl6zOQFO0Cg1qPTJeel4j9ePBADVRlZNKmNw /KTQBT0pG4Z510YIp5bf8hUzR2ryIkgPFKEun5TZ5KvMLoxpKjW2onOc5ori4TP2xAe4 g7OYewHdSF4BB0wn2q/EKviVE+f8+CpCPgeRZs+DgN330GcmHEg8pL+5i/OZM8hnfR+T C3t57wky2/GAkX3ZDnC0BIR9E+o1lM4pDp8NOxlqVn2osBp2LI6a9rWvZJU9UIlIUyb7 1wwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762429090; x=1763033890; h=cc:subject:from:to:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=MBIbk2ssTH7jAE2YM+gt9w2beeV07j9WmTaTEqAiero=; b=I8EuUBarK3IntnGVZiNUYsqKemzbj+AqPjzMlpL8JczSHfZ/rkvz46vaVyyJfgdMP9 gcsACGZcCKl1nuwmXiBPnZruKO4dpFQs05WDv1bThf3DE84OuT7M1SsN+PuRYGFNdMi/ E4RS9FiWpIbmDJubAMFtxnkRDWfH6juJgxHGyEeWEOtQzGtHTq4Rq95m72up2sCvuYWt TuwKR4a9lo0MYNAe9Azl0J9Id7/hpoGFrr353Y14UXQtpxLLtkxwfxWhlWG61vy2RrxG IVctaqMH7htGF1IOtmnwWDlQTETvbkrx4V2YOjp7AD42o9luchf7d4l+iOC5rtrNpjAK 695g== X-Gm-Message-State: AOJu0YwHx2MWrsW4wVaqD1Ysgtg/5lzzsT7RC85rC2ugyAG2/vDwj21t apEL2Lp04zD9tMNe/mdZkYzoefsCpoPyDL14SUzDJsbWD3AzF6J+VgQWT2s0tQ== X-Gm-Gg: ASbGnctkv9w+/OpulKVPt7ZzB7gxeafloYCcVkILy2I1bGcRP0U0UI0i8DRVCUUULGG efYYTOoO8TF/FyAPM+E1iX+JCJn+e9OKQOVfAllh2Vw0D4vUUmblkqbtZkfRweeBwlecyQekFN9 bEYaFH1LUPyggmSk7by3i+8Oz4gYB9ngkQy5/9oCRRTsWq4e2SDN5eCVUt/ROv0z/tRCogpyIsf HxAX6gkJNLpkeIKR+sce/AlgOcTlt9iPHiSXzG3aqP7fxiUwy4hrf0BWGrJ/6Gw3yeEs9vidadA HBCNi6i9Ys9hcmHCPV0rtmXM1JuQKTLJgW6jEhjyssxxiLnknN6mq4Owoyi4uGn63YuhsaglRt5 /29lXs+zDx9fNCIsaTQZx4MNJsg90gi7pUzzEm3mzv8Tl6ZhaN5LynGaP54qJn8Jtd64yvNGe1G eGvo5EZdaDrg/5o/cw9ae76Mc9UMSYmOHAXICw8aZ+IIyZxMuX7DQ= X-Google-Smtp-Source: AGHT+IEJwGYljNVL/Uc0uReWJtQBF48viGiIAnuyi7IzFXDhoD2Lx5eZl0Uzp3Mvdrw9YupaB3FKlQ== X-Received: by 2002:a05:6512:10d2:b0:594:35b7:aa7 with SMTP id 2adb3069b0e04-5943d7ed597mr2245556e87.48.1762429089370; Thu, 06 Nov 2025 03:38:09 -0800 (PST) Received: from ?IPV6:2a02:aa1:114a:fa1c:3dec:5470:17c7:4bb7? ([2a02:aa1:114a:fa1c:3dec:5470:17c7:4bb7]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5944a013f4dsm672877e87.22.2025.11.06.03.38.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 06 Nov 2025 03:38:08 -0800 (PST) Content-Type: multipart/mixed; boundary="------------G03CGhS70sS0DJsu6VtS6r7Z" Message-ID: <0b381b02-cab9-41f9-a900-ad6c8d26c1fc@gmail.com> Date: Thu, 6 Nov 2025 12:38:07 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: pgsql-hackers@lists.postgresql.org From: Mats Kindahl Subject: Refactor StringInfo usage in subscriptioncmds.c Cc: David Rowley 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. --------------G03CGhS70sS0DJsu6VtS6r7Z Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi all, As discussed in [1] the functions check_publications_origin_tables() and check_publications_origin_sequences() are building error messages using dynamically allocated StringInfo instances only to avoid duplicating a call of ereport(). Attached is a proposal that instead of building error message and hints dynamically, it will use ereport() directly and as a result does not have to allocate the error message strings and error message hints dynamically and these can be removed. This also means that a previous use of gettext() (in the form of the "_" macro) is not needed any more and we can use errmsg() and errhint() rather than errmsg_internal() and errhint_internal() with ereport(). It also replaces the usage a dynamically allocated StringInfo of pubnames containing the publication names with a stack allocated StringInfoData, along the same line as in [2]. [1]: https://www.postgresql.org/message-id/CAApHDvrZnM28wa2VY58cvtY0y9XbMhKJH4m%3Dga3c1wfsx%3DMF4Q%40mail.gmail.com [2]: https://www.postgresql.org/message-id/flat/CAApHDvrZnM28wa2VY58cvtY0y9XbMhKJH4m%3Dga3c1wfsx%3DMF4Q%40mail.gmail.com#ba34970e59f9fd847f1ab52777d57edc --------------G03CGhS70sS0DJsu6VtS6r7Z Content-Type: text/x-patch; charset=UTF-8; name="0001-Refactor-StringInfo-usage-in-subscriptioncmds.c.v1.patch" Content-Disposition: attachment; filename*0="0001-Refactor-StringInfo-usage-in-subscriptioncmds.c.v1.patc"; filename*1="h" Content-Transfer-Encoding: base64 RnJvbSAyNDM2ZGUyNzJkMzllNjY0ZmEwYzAwMTBjZjg3NWNiMzRmY2VjZDFlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRzIEtpbmRhaGwgPG1hdHNAa2luZGFobC5uZXQ+ CkRhdGU6IFRodSwgNiBOb3YgMjAyNSAxMTo0Nzo1MCArMDEwMApTdWJqZWN0OiBbUEFUQ0hd IFJlZmFjdG9yIFN0cmluZ0luZm8gdXNhZ2UgaW4gc3Vic2NyaXB0aW9uY21kcy5jCgpUaGlz IGNvbW1pdCByZW1vdmVzIHNvbWUgdXNlcyBvZiBTdHJpbmdJbmZvIHRoYXQgd2FzIG5vdCBu ZWNlc3NhcnkgYW5kIHdhcyBvbmx5CnRoZXJlIHRvIGF2b2lkIGhhdmluZyB0byB3cml0ZSB0 d28gY2FsbHMgb2YgZXJlcG9ydCgpIGFzIHdlbGwgYXMgcmVwbGFjaW5nCmR5bmFtaWMgYWxs b2NhdGlvbiBvZiBTdHJpbmdJbmZvIHdpdGggYSBTdHJpbmdJbmZvRGF0YSB1c2FnZSBpbnN0 ZWFkLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyB8IDYx ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyOCBpbnNlcnRp b25zKCspLCAzMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3Jp cHRpb25jbWRzLmMKaW5kZXggM2QyOTgxOGJhZGQuLmJkNDU3ZGM2ZTYyIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCkBAIC0yNTk5LDMzICsyNTk5LDMy IEBAIGNoZWNrX3B1YmxpY2F0aW9uc19vcmlnaW5fdGFibGVzKFdhbFJlY2VpdmVyQ29ubiAq d3Jjb25uLCBMaXN0ICpwdWJsaWNhdGlvbnMsCiAJICovCiAJaWYgKHB1Ymxpc3QpCiAJewot CQlTdHJpbmdJbmZvCXB1Ym5hbWVzID0gbWFrZVN0cmluZ0luZm8oKTsKLQkJU3RyaW5nSW5m bwllcnJfbXNnID0gbWFrZVN0cmluZ0luZm8oKTsKLQkJU3RyaW5nSW5mbwllcnJfaGludCA9 IG1ha2VTdHJpbmdJbmZvKCk7CisJCVN0cmluZ0luZm9EYXRhIHB1Ym5hbWVzOwogCiAJCS8q IFByZXBhcmUgdGhlIGxpc3Qgb2YgcHVibGljYXRpb24ocykgZm9yIHdhcm5pbmcgbWVzc2Fn ZS4gKi8KLQkJR2V0UHVibGljYXRpb25zU3RyKHB1Ymxpc3QsIHB1Ym5hbWVzLCBmYWxzZSk7 CisJCWluaXRTdHJpbmdJbmZvKCZwdWJuYW1lcyk7CisJCUdldFB1YmxpY2F0aW9uc1N0cihw dWJsaXN0LCAmcHVibmFtZXMsIGZhbHNlKTsKIAogCQlpZiAoY2hlY2tfdGFibGVfc3luYykK LQkJewotCQkJYXBwZW5kU3RyaW5nSW5mbyhlcnJfbXNnLCBfKCJzdWJzY3JpcHRpb24gXCIl c1wiIHJlcXVlc3RlZCBjb3B5X2RhdGEgd2l0aCBvcmlnaW4gPSBOT05FIGJ1dCBtaWdodCBj b3B5IGRhdGEgdGhhdCBoYWQgYSBkaWZmZXJlbnQgb3JpZ2luIiksCi0JCQkJCQkJIHN1Ym5h bWUpOwotCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhlcnJfaGludCwgXygiVmVyaWZ5IHRo YXQgaW5pdGlhbCBkYXRhIGNvcGllZCBmcm9tIHRoZSBwdWJsaXNoZXIgdGFibGVzIGRpZCBu b3QgY29tZSBmcm9tIG90aGVyIG9yaWdpbnMuIikpOwotCQl9CisJCQllcmVwb3J0KFdBUk5J TkcsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9T VEFURSksCisJCQkJCWVycm1zZygic3Vic2NyaXB0aW9uIFwiJXNcIiByZXF1ZXN0ZWQgY29w eV9kYXRhIHdpdGggb3JpZ2luID0gTk9ORSBidXQgbWlnaHQgY29weSBkYXRhIHRoYXQgaGFk IGEgZGlmZmVyZW50IG9yaWdpbiIsCisJCQkJCQkgICBzdWJuYW1lKSwKKwkJCQkJZXJyZGV0 YWlsX3BsdXJhbCgiVGhlIHN1YnNjcmlwdGlvbiBzdWJzY3JpYmVzIHRvIGEgcHVibGljYXRp b24gKCVzKSB0aGF0IGNvbnRhaW5zIHRhYmxlcyB0aGF0IGFyZSB3cml0dGVuIHRvIGJ5IG90 aGVyIHN1YnNjcmlwdGlvbnMuIiwKKwkJCQkJCQkJCSAiVGhlIHN1YnNjcmlwdGlvbiBzdWJz Y3JpYmVzIHRvIHB1YmxpY2F0aW9ucyAoJXMpIHRoYXQgY29udGFpbiB0YWJsZXMgdGhhdCBh cmUgd3JpdHRlbiB0byBieSBvdGhlciBzdWJzY3JpcHRpb25zLiIsCisJCQkJCQkJCQkgbGlz dF9sZW5ndGgocHVibGlzdCksIHB1Ym5hbWVzLmRhdGEpLAorCQkJCQllcnJoaW50KCJWZXJp ZnkgdGhhdCBpbml0aWFsIGRhdGEgY29waWVkIGZyb20gdGhlIHB1Ymxpc2hlciB0YWJsZXMg ZGlkIG5vdCBjb21lIGZyb20gb3RoZXIgb3JpZ2lucy4iKSk7CiAJCWVsc2UKLQkJewotCQkJ YXBwZW5kU3RyaW5nSW5mbyhlcnJfbXNnLCBfKCJzdWJzY3JpcHRpb24gXCIlc1wiIGVuYWJs ZWQgcmV0YWluX2RlYWRfdHVwbGVzIGJ1dCBtaWdodCBub3QgcmVsaWFibHkgZGV0ZWN0IGNv bmZsaWN0cyBmb3IgY2hhbmdlcyBmcm9tIGRpZmZlcmVudCBvcmlnaW5zIiksCi0JCQkJCQkJ IHN1Ym5hbWUpOwotCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhlcnJfaGludCwgXygiQ29u c2lkZXIgdXNpbmcgb3JpZ2luID0gTk9ORSBvciBkaXNhYmxpbmcgcmV0YWluX2RlYWRfdHVw bGVzLiIpKTsKLQkJfQotCi0JCWVyZXBvcnQoV0FSTklORywKLQkJCQllcnJjb2RlKEVSUkNP REVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAotCQkJCWVycm1zZ19pbnRl cm5hbCgiJXMiLCBlcnJfbXNnLT5kYXRhKSwKLQkJCQllcnJkZXRhaWxfcGx1cmFsKCJUaGUg c3Vic2NyaXB0aW9uIHN1YnNjcmliZXMgdG8gYSBwdWJsaWNhdGlvbiAoJXMpIHRoYXQgY29u dGFpbnMgdGFibGVzIHRoYXQgYXJlIHdyaXR0ZW4gdG8gYnkgb3RoZXIgc3Vic2NyaXB0aW9u cy4iLAotCQkJCQkJCQkgIlRoZSBzdWJzY3JpcHRpb24gc3Vic2NyaWJlcyB0byBwdWJsaWNh dGlvbnMgKCVzKSB0aGF0IGNvbnRhaW4gdGFibGVzIHRoYXQgYXJlIHdyaXR0ZW4gdG8gYnkg b3RoZXIgc3Vic2NyaXB0aW9ucy4iLAotCQkJCQkJCQkgbGlzdF9sZW5ndGgocHVibGlzdCks IHB1Ym5hbWVzLT5kYXRhKSwKLQkJCQllcnJoaW50X2ludGVybmFsKCIlcyIsIGVycl9oaW50 LT5kYXRhKSk7CisJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9P QkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCWVycm1zZygic3Vic2Ny aXB0aW9uIFwiJXNcIiBlbmFibGVkIHJldGFpbl9kZWFkX3R1cGxlcyBidXQgbWlnaHQgbm90 IHJlbGlhYmx5IGRldGVjdCBjb25mbGljdHMgZm9yIGNoYW5nZXMgZnJvbSBkaWZmZXJlbnQg b3JpZ2lucyIsCisJCQkJCQkgICBzdWJuYW1lKSwKKwkJCQkJZXJyZGV0YWlsX3BsdXJhbCgi VGhlIHN1YnNjcmlwdGlvbiBzdWJzY3JpYmVzIHRvIGEgcHVibGljYXRpb24gKCVzKSB0aGF0 IGNvbnRhaW5zIHRhYmxlcyB0aGF0IGFyZSB3cml0dGVuIHRvIGJ5IG90aGVyIHN1YnNjcmlw dGlvbnMuIiwKKwkJCQkJCQkJCSAiVGhlIHN1YnNjcmlwdGlvbiBzdWJzY3JpYmVzIHRvIHB1 YmxpY2F0aW9ucyAoJXMpIHRoYXQgY29udGFpbiB0YWJsZXMgdGhhdCBhcmUgd3JpdHRlbiB0 byBieSBvdGhlciBzdWJzY3JpcHRpb25zLiIsCisJCQkJCQkJCQkgbGlzdF9sZW5ndGgocHVi bGlzdCksIHB1Ym5hbWVzLmRhdGEpLAorCQkJCQllcnJoaW50KCJDb25zaWRlciB1c2luZyBv cmlnaW4gPSBOT05FIG9yIGRpc2FibGluZyByZXRhaW5fZGVhZF90dXBsZXMuIikpOworCisJ CXBmcmVlKHB1Ym5hbWVzLmRhdGEpOwogCX0KIAogCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJs ZVNsb3Qoc2xvdCk7CkBAIC0yNzE2LDI0ICsyNzE1LDIwIEBAIGNoZWNrX3B1YmxpY2F0aW9u c19vcmlnaW5fc2VxdWVuY2VzKFdhbFJlY2VpdmVyQ29ubiAqd3Jjb25uLCBMaXN0ICpwdWJs aWNhdGlvbnMsCiAJICovCiAJaWYgKHB1Ymxpc3QpCiAJewotCQlTdHJpbmdJbmZvCXB1Ym5h bWVzID0gbWFrZVN0cmluZ0luZm8oKTsKLQkJU3RyaW5nSW5mbwllcnJfbXNnID0gbWFrZVN0 cmluZ0luZm8oKTsKLQkJU3RyaW5nSW5mbwllcnJfaGludCA9IG1ha2VTdHJpbmdJbmZvKCk7 CisJCVN0cmluZ0luZm9EYXRhIHB1Ym5hbWVzOwogCiAJCS8qIFByZXBhcmUgdGhlIGxpc3Qg b2YgcHVibGljYXRpb24ocykgZm9yIHdhcm5pbmcgbWVzc2FnZS4gKi8KLQkJR2V0UHVibGlj YXRpb25zU3RyKHB1Ymxpc3QsIHB1Ym5hbWVzLCBmYWxzZSk7Ci0KLQkJYXBwZW5kU3RyaW5n SW5mbyhlcnJfbXNnLCBfKCJzdWJzY3JpcHRpb24gXCIlc1wiIHJlcXVlc3RlZCBjb3B5X2Rh dGEgd2l0aCBvcmlnaW4gPSBOT05FIGJ1dCBtaWdodCBjb3B5IGRhdGEgdGhhdCBoYWQgYSBk aWZmZXJlbnQgb3JpZ2luIiksCi0JCQkJCQkgc3VibmFtZSk7Ci0JCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoZXJyX2hpbnQsIF8oIlZlcmlmeSB0aGF0IGluaXRpYWwgZGF0YSBjb3BpZWQg ZnJvbSB0aGUgcHVibGlzaGVyIHNlcXVlbmNlcyBkaWQgbm90IGNvbWUgZnJvbSBvdGhlciBv cmlnaW5zLiIpKTsKKwkJaW5pdFN0cmluZ0luZm8oJnB1Ym5hbWVzKTsKKwkJR2V0UHVibGlj YXRpb25zU3RyKHB1Ymxpc3QsICZwdWJuYW1lcywgZmFsc2UpOwogCiAJCWVyZXBvcnQoV0FS TklORywKIAkJCQllcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVf U1RBVEUpLAotCQkJCWVycm1zZ19pbnRlcm5hbCgiJXMiLCBlcnJfbXNnLT5kYXRhKSwKKwkJ CQllcnJtc2coInN1YnNjcmlwdGlvbiBcIiVzXCIgcmVxdWVzdGVkIGNvcHlfZGF0YSB3aXRo IG9yaWdpbiA9IE5PTkUgYnV0IG1pZ2h0IGNvcHkgZGF0YSB0aGF0IGhhZCBhIGRpZmZlcmVu dCBvcmlnaW4iLCBzdWJuYW1lKSwKIAkJCQllcnJkZXRhaWxfcGx1cmFsKCJUaGUgc3Vic2Ny aXB0aW9uIHN1YnNjcmliZXMgdG8gYSBwdWJsaWNhdGlvbiAoJXMpIHRoYXQgY29udGFpbnMg c2VxdWVuY2VzIHRoYXQgYXJlIHdyaXR0ZW4gdG8gYnkgb3RoZXIgc3Vic2NyaXB0aW9ucy4i LAogCQkJCQkJCQkgIlRoZSBzdWJzY3JpcHRpb24gc3Vic2NyaWJlcyB0byBwdWJsaWNhdGlv bnMgKCVzKSB0aGF0IGNvbnRhaW4gc2VxdWVuY2VzIHRoYXQgYXJlIHdyaXR0ZW4gdG8gYnkg b3RoZXIgc3Vic2NyaXB0aW9ucy4iLAotCQkJCQkJCQkgbGlzdF9sZW5ndGgocHVibGlzdCks IHB1Ym5hbWVzLT5kYXRhKSwKLQkJCQllcnJoaW50X2ludGVybmFsKCIlcyIsIGVycl9oaW50 LT5kYXRhKSk7CisJCQkJCQkJCSBsaXN0X2xlbmd0aChwdWJsaXN0KSwgcHVibmFtZXMuZGF0 YSksCisJCQkJZXJyaGludCgiVmVyaWZ5IHRoYXQgaW5pdGlhbCBkYXRhIGNvcGllZCBmcm9t IHRoZSBwdWJsaXNoZXIgc2VxdWVuY2VzIGRpZCBub3QgY29tZSBmcm9tIG90aGVyIG9yaWdp bnMuIikpOworCQlwZnJlZShwdWJuYW1lcy5kYXRhKTsKIAl9CiAKIAlFeGVjRHJvcFNpbmds ZVR1cGxlVGFibGVTbG90KHNsb3QpOwotLSAKMi40My4wCgo= --------------G03CGhS70sS0DJsu6VtS6r7Z--