Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mLuNo-0005KG-Mt for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Sep 2021 21:36:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mLuNm-0007s8-Sk for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Sep 2021 21:36:26 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mLuNm-0007s0-Go for pgsql-hackers@lists.postgresql.org; Thu, 02 Sep 2021 21:36:26 +0000 Received: from [213.136.84.212] (helo=mail.krylov.eu) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mLuNh-0004VZ-Dl for pgsql-hackers@postgresql.org; Thu, 02 Sep 2021 21:36:25 +0000 Received: from roundcube (roundcube [172.16.15.33]) by mail.krylov.eu (Postfix) with ESMTPSA id 094B842E for ; Thu, 2 Sep 2021 23:36:13 +0200 (CEST) MIME-Version: 1.0 Date: Thu, 02 Sep 2021 23:36:13 +0200 From: Phil Krylov To: pgsql-hackers@postgresql.org Subject: [PATCH] pg_ctl should not truncate command lines at 1024 characters User-Agent: Roundcube Webmail/1.4.11 Message-ID: <567e199c6b97ee19deee600311515b86@krylov.eu> X-Sender: phil@krylov.eu Content-Type: multipart/mixed; boundary="=_6aa8cfb35ae5a584dc0ab6e280eb59d5" X-Host-Lookup-Failed: Reverse DNS lookup failed for 213.136.84.212 (failed) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_6aa8cfb35ae5a584dc0ab6e280eb59d5 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hello, Lacking a tool to edit postgresql.conf programmatically, people resort to passing cluster options on the command line. While passing all non-default options in this way may sound like an abuse of the feature, IMHO pg_ctl should not blindly truncate generated command lines at MAXPGPATH (1024 characters) and then run that, resulting in: /bin/sh: Syntax error: end of file unexpected (expecting word) pg_ctl: could not start server Examine the log output. The attached patch tries to fix it in the least intrusive way. While we're at it, is it supposed that pg_ctl is a very short-lived process and is therefore allowed to leak memory? I've noticed some places where I would like to add a free() call. -- Ph. --=_6aa8cfb35ae5a584dc0ab6e280eb59d5 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0001-pg_ctl-should-not-truncate-command-lines-at-1024-cha.patch Content-Disposition: attachment; filename=0001-pg_ctl-should-not-truncate-command-lines-at-1024-cha.patch; size=7190 RnJvbSA2ZjJlNzAwMjUyMDhmYTRkMDAzNGRkYmU1MjU0ZTJjYjk3NTlkZDI0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsIEtyeWxvdiA8cGhpbEBrcnlsb3YuZXU+CkRhdGU6IFRo dSwgMiBTZXAgMjAyMSAyMTozOTo1OCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIHBnX2N0bCBzaG91 bGQgbm90IHRydW5jYXRlIGNvbW1hbmQgbGluZXMgYXQgMTAyNCBjaGFyYWN0ZXJzCgotLS0KIHNy Yy9iaW4vcGdfY3RsL3BnX2N0bC5jICAgICAgICAgICAgfCA0NyArKysrKysrKysrKysrKysrKysr KysrLS0tLS0tLS0tLS0tLS0tLQogc3JjL2Jpbi9wZ19jdGwvdC8wMDFfc3RhcnRfc3RvcC5wbCB8 IDQxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogMiBmaWxlcyBjaGFuZ2VkLCA2 NyBpbnNlcnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2N0bC9wZ19jdGwuYyBiL3NyYy9iaW4vcGdfY3RsL3BnX2N0bC5jCmluZGV4IDc5ODVkYTBhOTQu LjE5OWQxM2MxZmIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfY3RsL3BnX2N0bC5jCisrKyBiL3Ny Yy9iaW4vcGdfY3RsL3BnX2N0bC5jCkBAIC00NDIsNyArNDQyLDcgQEAgZnJlZV9yZWFkZmlsZShj aGFyICoqb3B0bGluZXMpCiBzdGF0aWMgcGdwaWRfdAogc3RhcnRfcG9zdG1hc3Rlcih2b2lkKQog ewotCWNoYXIJCWNtZFtNQVhQR1BBVEhdOworCWNoYXIJICAgKmNtZDsKIAogI2lmbmRlZiBXSU4z MgogCXBncGlkX3QJCXBtX3BpZDsKQEAgLTQ4NywxNCArNDg3LDE1IEBAIHN0YXJ0X3Bvc3RtYXN0 ZXIodm9pZCkKIAkgKiBoYXMgdGhlIHNhbWUgUElEIGFzIHRoZSBjdXJyZW50IGNoaWxkIHByb2Nl c3MuCiAJICovCiAJaWYgKGxvZ19maWxlICE9IE5VTEwpCi0JCXNucHJpbnRmKGNtZCwgTUFYUEdQ QVRILCAiZXhlYyBcIiVzXCIgJXMlcyA8IFwiJXNcIiA+PiBcIiVzXCIgMj4mMSIsCi0JCQkJIGV4 ZWNfcGF0aCwgcGdkYXRhX29wdCwgcG9zdF9vcHRzLAotCQkJCSBERVZOVUxMLCBsb2dfZmlsZSk7 CisJCWNtZCA9IHBzcHJpbnRmKCJleGVjIFwiJXNcIiAlcyVzIDwgXCIlc1wiID4+IFwiJXNcIiAy PiYxIiwKKwkJCQkJICAgZXhlY19wYXRoLCBwZ2RhdGFfb3B0LCBwb3N0X29wdHMsCisJCQkJCSAg IERFVk5VTEwsIGxvZ19maWxlKTsKIAllbHNlCi0JCXNucHJpbnRmKGNtZCwgTUFYUEdQQVRILCAi ZXhlYyBcIiVzXCIgJXMlcyA8IFwiJXNcIiAyPiYxIiwKLQkJCQkgZXhlY19wYXRoLCBwZ2RhdGFf b3B0LCBwb3N0X29wdHMsIERFVk5VTEwpOworCQljbWQgPSBwc3ByaW50ZigiZXhlYyBcIiVzXCIg JXMlcyA8IFwiJXNcIiAyPiYxIiwKKwkJCQkJICAgZXhlY19wYXRoLCBwZ2RhdGFfb3B0LCBwb3N0 X29wdHMsIERFVk5VTEwpOwogCiAJKHZvaWQpIGV4ZWNsKCIvYmluL3NoIiwgIi9iaW4vc2giLCAi LWMiLCBjbWQsIChjaGFyICopIE5VTEwpOworCWZyZWUoY21kKTsKIAogCS8qIGV4ZWMgZmFpbGVk ICovCiAJd3JpdGVfc3RkZXJyKF8oIiVzOiBjb3VsZCBub3Qgc3RhcnQgc2VydmVyOiAlc1xuIiks CkBAIC01NTMsMTkgKzU1NCwyMSBAQCBzdGFydF9wb3N0bWFzdGVyKHZvaWQpCiAJCWVsc2UKIAkJ CWNsb3NlKGZkKTsKIAotCQlzbnByaW50ZihjbWQsIE1BWFBHUEFUSCwgIlwiJXNcIiAvQyBcIlwi JXNcIiAlcyVzIDwgXCIlc1wiID4+IFwiJXNcIiAyPiYxXCIiLAotCQkJCSBjb21zcGVjLCBleGVj X3BhdGgsIHBnZGF0YV9vcHQsIHBvc3Rfb3B0cywgREVWTlVMTCwgbG9nX2ZpbGUpOworCQljbWQg PSBwc3ByaW50ZigiXCIlc1wiIC9DIFwiXCIlc1wiICVzJXMgPCBcIiVzXCIgPj4gXCIlc1wiIDI+ JjFcIiIsCisJCQkJCSAgIGNvbXNwZWMsIGV4ZWNfcGF0aCwgcGdkYXRhX29wdCwgcG9zdF9vcHRz LCBERVZOVUxMLCBsb2dfZmlsZSk7CiAJfQogCWVsc2UKLQkJc25wcmludGYoY21kLCBNQVhQR1BB VEgsICJcIiVzXCIgL0MgXCJcIiVzXCIgJXMlcyA8IFwiJXNcIiAyPiYxXCIiLAotCQkJCSBjb21z cGVjLCBleGVjX3BhdGgsIHBnZGF0YV9vcHQsIHBvc3Rfb3B0cywgREVWTlVMTCk7CisJCWNtZCA9 IHBzcHJpbnRmKCJcIiVzXCIgL0MgXCJcIiVzXCIgJXMlcyA8IFwiJXNcIiAyPiYxXCIiLAorCQkJ CQkgICBjb21zcGVjLCBleGVjX3BhdGgsIHBnZGF0YV9vcHQsIHBvc3Rfb3B0cywgREVWTlVMTCk7 CiAKIAlpZiAoIUNyZWF0ZVJlc3RyaWN0ZWRQcm9jZXNzKGNtZCwgJnBpLCBmYWxzZSkpCiAJewog CQl3cml0ZV9zdGRlcnIoXygiJXM6IGNvdWxkIG5vdCBzdGFydCBzZXJ2ZXI6IGVycm9yIGNvZGUg JWx1XG4iKSwKIAkJCQkJIHByb2duYW1lLCAodW5zaWduZWQgbG9uZykgR2V0TGFzdEVycm9yKCkp OworCQlmcmVlKGNtZCk7CiAJCWV4aXQoMSk7CiAJfQorCWZyZWUoY21kKTsKIAkvKiBEb24ndCBj bG9zZSBjb21tYW5kIHByb2Nlc3MgaGFuZGxlIGhlcmU7IGNhbGxlciBtdXN0IGRvIHNvICovCiAJ cG9zdG1hc3RlclByb2Nlc3MgPSBwaS5oUHJvY2VzczsKIAlDbG9zZUhhbmRsZShwaS5oVGhyZWFk KTsKQEAgLTgyOCw3ICs4MzEsNyBAQCBmaW5kX290aGVyX2V4ZWNfb3JfZGllKGNvbnN0IGNoYXIg KmFyZ3YwLCBjb25zdCBjaGFyICp0YXJnZXQsIGNvbnN0IGNoYXIgKnZlcnNpbwogc3RhdGljIHZv aWQKIGRvX2luaXQodm9pZCkKIHsKLQljaGFyCQljbWRbTUFYUEdQQVRIXTsKKwljaGFyCSAgICpj bWQ7CiAKIAlpZiAoZXhlY19wYXRoID09IE5VTEwpCiAJCWV4ZWNfcGF0aCA9IGZpbmRfb3RoZXJf ZXhlY19vcl9kaWUoYXJndjAsICJpbml0ZGIiLCAiaW5pdGRiIChQb3N0Z3JlU1FMKSAiIFBHX1ZF UlNJT04gIlxuIik7CkBAIC04NDAsMTcgKzg0MywxOSBAQCBkb19pbml0KHZvaWQpCiAJCXBvc3Rf b3B0cyA9ICIiOwogCiAJaWYgKCFzaWxlbnRfbW9kZSkKLQkJc25wcmludGYoY21kLCBNQVhQR1BB VEgsICJcIiVzXCIgJXMlcyIsCi0JCQkJIGV4ZWNfcGF0aCwgcGdkYXRhX29wdCwgcG9zdF9vcHRz KTsKKwkJY21kID0gcHNwcmludGYoIlwiJXNcIiAlcyVzIiwKKwkJCQkJICAgZXhlY19wYXRoLCBw Z2RhdGFfb3B0LCBwb3N0X29wdHMpOwogCWVsc2UKLQkJc25wcmludGYoY21kLCBNQVhQR1BBVEgs ICJcIiVzXCIgJXMlcyA+IFwiJXNcIiIsCi0JCQkJIGV4ZWNfcGF0aCwgcGdkYXRhX29wdCwgcG9z dF9vcHRzLCBERVZOVUxMKTsKKwkJY21kID0gcHNwcmludGYoIlwiJXNcIiAlcyVzID4gXCIlc1wi IiwKKwkJCQkJICAgZXhlY19wYXRoLCBwZ2RhdGFfb3B0LCBwb3N0X29wdHMsIERFVk5VTEwpOwog CiAJaWYgKHN5c3RlbShjbWQpICE9IDApCiAJewogCQl3cml0ZV9zdGRlcnIoXygiJXM6IGRhdGFi YXNlIHN5c3RlbSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpLCBwcm9nbmFtZSk7CisJCWZyZWUo Y21kKTsKIAkJZXhpdCgxKTsKIAl9CisJZnJlZShjbWQpOwogfQogCiBzdGF0aWMgdm9pZApAQCAt MjE3NSw3ICsyMTgwLDcgQEAgc2V0X3N0YXJ0dHlwZShjaGFyICpzdGFydHR5cGVvcHQpCiBzdGF0 aWMgdm9pZAogYWRqdXN0X2RhdGFfZGlyKHZvaWQpCiB7Ci0JY2hhcgkJY21kW01BWFBHUEFUSF0s CisJY2hhcgkgICAqY21kLAogCQkJCWZpbGVuYW1lW01BWFBHUEFUSF0sCiAJCQkgICAqbXlfZXhl Y19wYXRoOwogCUZJTEUJICAgKmZkOwpAQCAtMjIwNywxOCArMjIxMiwyMCBAQCBhZGp1c3RfZGF0 YV9kaXIodm9pZCkKIAkJbXlfZXhlY19wYXRoID0gcGdfc3RyZHVwKGV4ZWNfcGF0aCk7CiAKIAkv KiBpdCdzIGltcG9ydGFudCBmb3IgLUMgdG8gYmUgdGhlIGZpcnN0IG9wdGlvbiwgc2VlIG1haW4u YyAqLwotCXNucHJpbnRmKGNtZCwgTUFYUEdQQVRILCAiXCIlc1wiIC1DIGRhdGFfZGlyZWN0b3J5 ICVzJXMiLAotCQkJIG15X2V4ZWNfcGF0aCwKLQkJCSBwZ2RhdGFfb3B0ID8gcGdkYXRhX29wdCA6 ICIiLAotCQkJIHBvc3Rfb3B0cyA/IHBvc3Rfb3B0cyA6ICIiKTsKKwljbWQgPSBwc3ByaW50Zigi XCIlc1wiIC1DIGRhdGFfZGlyZWN0b3J5ICVzJXMiLAorCQkJCSAgIG15X2V4ZWNfcGF0aCwKKwkJ CQkgICBwZ2RhdGFfb3B0ID8gcGdkYXRhX29wdCA6ICIiLAorCQkJCSAgIHBvc3Rfb3B0cyA/IHBv c3Rfb3B0cyA6ICIiKTsKIAogCWZkID0gcG9wZW4oY21kLCAiciIpOwogCWlmIChmZCA9PSBOVUxM IHx8IGZnZXRzKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCBmZCkgPT0gTlVMTCkKIAl7CiAJ CXdyaXRlX3N0ZGVycihfKCIlczogY291bGQgbm90IGRldGVybWluZSB0aGUgZGF0YSBkaXJlY3Rv cnkgdXNpbmcgY29tbWFuZCBcIiVzXCJcbiIpLCBwcm9nbmFtZSwgY21kKTsKKwkJZnJlZShjbWQp OwogCQlleGl0KDEpOwogCX0KIAlwY2xvc2UoZmQpOworCWZyZWUoY21kKTsKIAlmcmVlKG15X2V4 ZWNfcGF0aCk7CiAKIAkvKiBzdHJpcCB0cmFpbGluZyBuZXdsaW5lIGFuZCBjYXJyaWFnZSByZXR1 cm4gKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfY3RsL3QvMDAxX3N0YXJ0X3N0b3AucGwgYi9z cmMvYmluL3BnX2N0bC90LzAwMV9zdGFydF9zdG9wLnBsCmluZGV4IDFkOGQ2YmJiNzAuLmRhMDVj YzhmOGIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfY3RsL3QvMDAxX3N0YXJ0X3N0b3AucGwKKysr IGIvc3JjL2Jpbi9wZ19jdGwvdC8wMDFfc3RhcnRfc3RvcC5wbApAQCAtOSw3ICs5LDcgQEAgdXNl IEZjbnRsICc6bW9kZSc7CiB1c2UgRmlsZTo6c3RhdCBxd3tsc3RhdH07CiB1c2UgUG9zdGdyZXNO b2RlOwogdXNlIFRlc3RMaWI7Ci11c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAyNDsKK3VzZSBUZXN0 OjpNb3JlIHRlc3RzID0+IDI2OwogCiBteSAkdGVtcGRpciAgICAgICA9IFRlc3RMaWI6OnRlbXBk aXI7CiBteSAkdGVtcGRpcl9zaG9ydCA9IFRlc3RMaWI6OnRlbXBkaXJfc2hvcnQ7CkBAIC02OCw2 ICs2OCw0NSBAQCBjb21tYW5kX29rKFsgJ3BnX2N0bCcsICdzdG9wJywgJy1EJywgIiR0ZW1wZGly L2RhdGEiIF0sICdwZ19jdGwgc3RvcCcpOwogY29tbWFuZF9mYWlscyhbICdwZ19jdGwnLCAnc3Rv cCcsICctRCcsICIkdGVtcGRpci9kYXRhIiBdLAogCSdzZWNvbmQgcGdfY3RsIHN0b3AgZmFpbHMn KTsKIAorY29tbWFuZF9vayhbICdwZ19jdGwnLCAnc3RhcnQnLCAnLUQnLCAiJHRlbXBkaXIvZGF0 YSIsCisJCQkgJy13JywgJy1zJywgJy1tJywgJ2Zhc3QnLAorCQkJICctbycsICctYycsICctbycs ICd1cGRhdGVfcHJvY2Vzc190aXRsZT1vbicsCisJCQkgJy1vJywgJy1jJywgJy1vJywgJ2VmZmVj dGl2ZV9pb19jb25jdXJyZW5jeT0wJywKKwkJCSAnLW8nLCAnLWMnLCAnLW8nLCAnc3luY2hyb25v dXNfY29tbWl0PW9mZicsCisJCQkgJy1vJywgJy1jJywgJy1vJywgJ2Z1bGxfcGFnZV93cml0ZXM9 b2ZmJywKKwkJCSAnLW8nLCAnLWMnLCAnLW8nLCAnd2FsX2luaXRfemVybz1vZmYnLAorCQkJICct bycsICctYycsICctbycsICd3YWxfcmVjeWNsZT1vZmYnLAorCQkJICctbycsICctYycsICctbycs ICdlZmZlY3RpdmVfY2FjaGVfc2l6ZT0zMjAwTUInLAorCQkJICctbycsICctYycsICctbycsICdj aGVja3BvaW50X2NvbXBsZXRpb25fdGFyZ2V0PTAuOScsCisJCQkgJy1vJywgJy1jJywgJy1vJywg J3JhbmRvbV9wYWdlX2Nvc3Q9MS4xJywKKwkJCSAnLW8nLCAnLWMnLCAnLW8nLCAncGFyYWxsZWxf c2V0dXBfY29zdD0yMDAuMCcsCisJCQkgJy1vJywgJy1jJywgJy1vJywgJ2xvZ19taW5fZHVyYXRp b25fc3RhdGVtZW50PTEwMCcsCisJCQkgJy1vJywgJy1jJywgJy1vJywgJ2xvZ19jaGVja3BvaW50 cz1vbicsCisJCQkgJy1vJywgJy1jJywgJy1vJywgJ2xvZ190ZW1wX2ZpbGVzPTAnLAorCQkJICct bycsICctYycsICctbycsICd0ZW1wX2J1ZmZlcnM9MzJNQicsCisJCQkgJy1vJywgJy1jJywgJy1v JywgJ3dvcmtfbWVtPTUwTUInLAorCQkJICctbycsICctYycsICctbycsICdtYWludGVuYW5jZV93 b3JrX21lbT01ME1CJywKKwkJCSAnLW8nLCAnLWMnLCAnLW8nLCAnbWF4X3dhbF9zaXplPTUwME1C JywKKwkJCSAnLW8nLCAnLWMnLCAnLW8nLCAnZGVmYXVsdF9zdGF0aXN0aWNzX3RhcmdldD0xMDAw MCcsCisJCQkgJy1vJywgJy1jJywgJy1vJywgJ2F1dG92YWN1dW1fbWF4X3dvcmtlcnM9OCcsCisJ CQkgJy1vJywgJy1jJywgJy1vJywgJ2F1dG92YWN1dW1fbmFwdGltZT0xNW1pbicsCisJCQkgJy1v JywgJy1jJywgJy1vJywgJ2F1dG92YWN1dW1fdmFjdXVtX3RocmVzaG9sZD0xMDAwJywKKwkJCSAn LW8nLCAnLWMnLCAnLW8nLCAnYXV0b3ZhY3V1bV9hbmFseXplX3RocmVzaG9sZD0xMDAwJywKKwkJ CSAnLW8nLCAnLWMnLCAnLW8nLCAnYXV0b3ZhY3V1bV9mcmVlemVfbWF4X2FnZT0xMDAwMDAwMDAw JywKKwkJCSAnLW8nLCAnLWMnLCAnLW8nLCAndmFjdXVtX2ZyZWV6ZV9taW5fYWdlPTEwMDAwMDAw JywKKwkJCSAnLW8nLCAnLWMnLCAnLW8nLCAndmFjdXVtX2ZyZWV6ZV90YWJsZV9hZ2U9ODAwMDAw MDAwJywKKwkJCSAnLW8nLCAnLWMnLCAnLW8nLCAnaml0X2Fib3ZlX2Nvc3Q9LTEnLAorCQkJICct bycsICctYycsICctbycsICdqaXRfb3B0aW1pemVfYWJvdmVfY29zdD0xMDAwMDAwMCcsCisJCQkg Jy1vJywgJy1jJywgJy1vJywgJ21heF9sb2Nrc19wZXJfdHJhbnNhY3Rpb249MTI4JywKKwkJCSAn LW8nLCAnLWMnLCAnLW8nLCAnZGVmYXVsdF90ZXh0X3NlYXJjaF9jb25maWc9cGdfY2F0YWxvZy5l bmdsaXNoJywKKwkJCSAnLW8nLCAnLWMnLCAnLW8nLCAndGltZXpvbmU9RXVyb3BlL0xvbmRvbics CisJCQkgJy1vJywgJy1jJywgJy1vJywgJ3NoYXJlZF9idWZmZXJzPTQwME1CJywKKwkJCSAnLW8n LCAnLWMnLCAnLW8nLCAncG9ydD01NDMzJywKKwkJCSAnLW8nLCAnLWMnLCAnLW8nLCAnY2x1c3Rl cl9uYW1lPTEzL215dGVzdGNsdXN0ZXInLAorCQkJICctbycsICctYycsICctbycsICdtYXhfY29u bmVjdGlvbnM9MjAwJyBdLAorCSdwZ19jdGwgc3RhcnQgd2l0aCBsb3RzIG9mIHBhcmFtZXRlcnMn KTsKK2NvbW1hbmRfb2soWyAncGdfY3RsJywgJ3N0b3AnLCAnLUQnLCAiJHRlbXBkaXIvZGF0YSIg XSwgJ3BnX2N0bCBzdG9wJyk7CisKICMgTG9nIGZpbGUgZm9yIGRlZmF1bHQgcGVybWlzc2lvbiB0 ZXN0LiAgVGhlIHBlcm1pc3Npb25zIHdvbid0IGJlIGNoZWNrZWQgb24KICMgV2luZG93cyBidXQg d2Ugc3RpbGwgd2FudCB0byBkbyB0aGUgcmVzdGFydCB0ZXN0LgogbXkgJGxvZ0ZpbGVOYW1lID0g IiR0ZW1wZGlyL2RhdGEvcGVybS10ZXN0LTYwMC5sb2ciOwotLSAKMi4xNS4yIChBcHBsZSBHaXQt MTAxLjEpCgo= --=_6aa8cfb35ae5a584dc0ab6e280eb59d5--