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 1q9mFM-0003Bt-5V for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Jun 2023 12:38:40 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1q9mFK-0007Ep-QK for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Jun 2023 12:38:38 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q9mFK-0007Eg-ED for pgsql-hackers@lists.postgresql.org; Thu, 15 Jun 2023 12:38:38 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1q9mFF-002Wor-G8 for pgsql-hackers@postgresql.org; Thu, 15 Jun 2023 12:38:37 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTPA id 4BFA760A14; Thu, 15 Jun 2023 21:38:28 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.8 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_470ef97448234476c446092d28630e8e" Content-Transfer-Encoding: 7bit Date: Thu, 15 Jun 2023 21:38:28 +0900 From: torikoshia To: Kyotaro Horiguchi Cc: michael@paquier.xyz, masao.fujii@oss.nttdata.com, bharath.rupireddyforpostgres@gmail.com, pgsql-hackers@postgresql.org Subject: Re: Allow pg_archivecleanup to remove backup history files In-Reply-To: <20230615.152036.1556630042388070221.horikyota.ntt@gmail.com> References: <0e962f8a-78f5-eafe-1d54-7434482e9fd1@oss.nttdata.com> <34b661c3b6ec651bd13472b47ddb5913@oss.nttdata.com> <20230615.152036.1556630042388070221.horikyota.ntt@gmail.com> User-Agent: Roundcube Webmail/1.4.11 Message-ID: <2ea9987153ecb1f7ce52d798011cf303@oss.nttdata.com> X-Sender: torikoshia@oss.nttdata.com List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_470ef97448234476c446092d28630e8e Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed On 2023-06-15 15:20, Kyotaro Horiguchi wrote: Thanks for your review! > At Wed, 14 Jun 2023 00:49:39 +0900, torikoshia > wrote in >> On 2023-06-12 16:33, Michael Paquier wrote: >> > On Fri, Jun 09, 2023 at 12:32:15AM +0900, Fujii Masao wrote: >> Thanks for reviewing! >> >> >> printf(_(" -n, --dry-run dry run, show the names of the files that >> >> would be removed\n")); >> >> + printf(_(" -b, --clean-backup-history clean up files including >> >> backup history files\n")); >> >> Shouldn't -b option be placed in alphabetical order? >> > +1. >> >> Modified the place. > > - printf(_(" -d generate debug output (verbose mode)\n")); > - printf(_(" -n dry run, show the names of the files that > would be removed\n")); > - printf(_(" -V, --version output version information, then > exit\n")); > - printf(_(" -x EXT clean up files if they have this > extension\n")); > - printf(_(" -?, --help show this help, then exit\n")); > + printf(_(" -d, --debug generate debug output > (verbose mode)\n")); > + printf(_(" -n, --dry-run dry run, show the names of > the files that would be removed\n")); > + printf(_(" -V, --version output version information, > then exit\n")); > + printf(_(" -x, --strip-extension=EXT strip this extention before > identifying files fo clean up\n")); > + printf(_(" -?, --help show this help, then > exit\n")); > > After this change, some of these lines corss the boundary of the 80 > columns width. (is that policy viable noadays? I am usually working > using terminal windows with such a width..) It's somewhat unrelated to > this patch, but a help line a few lines further down also exceeds the > width. We could shorten it by removing the "/mnt/server" portion, but > I'm not sure if it's worth doing. I also highlight 80th column according to the wiki[1]. Since usage() in other files like pg_rewind.c and initdb.c also exceeded the 80th column, I thought that was something like a guide. >> Or for use as a standalone archive cleaner: >> e.g. >> pg_archivecleanup /mnt/server/archiverdir >> 000000010000000000000010.00000020.backup > > > + printf(_(" -x, --strip-extension=EXT strip this extention before > identifying files fo clean up\n")); > > s/fo/for/ ? Yeah, it's a typo. Fixed it. [1] https://wiki.postgresql.org/wiki/Configuring_vim_for_postgres_development -- Regards, -- Atsushi Torikoshi NTT DATA CORPORATION --=_470ef97448234476c446092d28630e8e Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v7-0001-Introduce-pg_archivecleanup-into-getopt_long.patch Content-Disposition: attachment; filename=v7-0001-Introduce-pg_archivecleanup-into-getopt_long.patch; size=4038 RnJvbSAwNmI1NjY0ZDEwOTNhYmE0NDUzMzJhZDU0MjBiZDQ0MmI5OWE4Zjk4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IFRodSwgMTYgSnVuIDIwMjMgMjE6MTM6MDIgKzA5MDAKU3ViamVjdDog W1BBVENIIHY3IDEvM10gSW50cm9kdWNlIHBnX2FyY2hpdmVjbGVhbnVwIGludG8gZ2V0b3B0X2xv bmcKClRoaXMgcGF0Y2ggaXMgYSBwcmVsaW1pbmFyeSBzdGVwIHRvIGFkZCBhbiBlYXN5LXRvLXVu ZGVyc3RhbmQgb3B0aW9uCnRvIGRlbGV0ZSBiYWNrdXAgaGlzdG9yeSBmaWxlcywgYnV0IGl0IGFs c28gYWRkcyBsb25nIG9wdGlvbnMgdG8KdGhlIGV4aXN0aW5nIG9wdGlvbnMuCi0tLQogZG9jL3Ny Yy9zZ21sL3JlZi9wZ2FyY2hpdmVjbGVhbnVwLnNnbWwgICAgICAgIHwgIDUgKysrKy0KIHNyYy9i aW4vcGdfYXJjaGl2ZWNsZWFudXAvcGdfYXJjaGl2ZWNsZWFudXAuYyB8IDIwICsrKysrKysrKysr Ky0tLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnYXJjaGl2ZWNsZWFudXAuc2dtbCBi L2RvYy9zcmMvc2dtbC9yZWYvcGdhcmNoaXZlY2xlYW51cC5zZ21sCmluZGV4IDYzNWU3Yzc2ODUu LjA5OTkxYzJmY2QgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdhcmNoaXZlY2xlYW51 cC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdhcmNoaXZlY2xlYW51cC5zZ21sCkBAIC05 NSw2ICs5NSw3IEBAIHBnX2FyY2hpdmVjbGVhbnVwOiAgcmVtb3ZpbmcgZmlsZSAiYXJjaGl2ZS8w MDAwMDAwMTAwMDAwMDM3MDAwMDAwMEUiCiAKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0 ZXJtPjxvcHRpb24+LWQ8L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tZGVi dWc8L29wdGlvbj48L3Rlcm0+CiAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgPHBhcmE+CiAgICAg ICAgIFByaW50IGxvdHMgb2YgZGVidWcgbG9nZ2luZyBvdXRwdXQgb24gPGZpbGVuYW1lPnN0ZGVy cjwvZmlsZW5hbWU+LgpAQCAtMTA0LDYgKzEwNSw3IEBAIHBnX2FyY2hpdmVjbGVhbnVwOiAgcmVt b3ZpbmcgZmlsZSAiYXJjaGl2ZS8wMDAwMDAwMTAwMDAwMDM3MDAwMDAwMEUiCiAKICAgICAgPHZh cmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LW48L29wdGlvbj48L3Rlcm0+CisgICAg ICA8dGVybT48b3B0aW9uPi0tZHJ5LXJ1bjwvb3B0aW9uPjwvdGVybT4KICAgICAgIDxsaXN0aXRl bT4KICAgICAgICA8cGFyYT4KICAgICAgICAgUHJpbnQgdGhlIG5hbWVzIG9mIHRoZSBmaWxlcyB0 aGF0IHdvdWxkIGhhdmUgYmVlbiByZW1vdmVkIG9uIDxmaWxlbmFtZT5zdGRvdXQ8L2ZpbGVuYW1l PiAocGVyZm9ybXMgYSBkcnkgcnVuKS4KQEAgLTEyMiw3ICsxMjQsOCBAQCBwZ19hcmNoaXZlY2xl YW51cDogIHJlbW92aW5nIGZpbGUgImFyY2hpdmUvMDAwMDAwMDEwMDAwMDAzNzAwMDAwMDBFIgog ICAgICA8L3Zhcmxpc3RlbnRyeT4KIAogICAgICA8dmFybGlzdGVudHJ5PgotICAgICAgPHRlcm0+ PG9wdGlvbj4teDwvb3B0aW9uPiA8cmVwbGFjZWFibGU+ZXh0ZW5zaW9uPC9yZXBsYWNlYWJsZT48 L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi14IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5leHRlbnNpb248L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJt PjxvcHRpb24+LS1zdHJpcC1leHRlbnNpb249PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PmV4dGVuc2lvbjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgogICAgICAgPGxpc3RpdGVt PgogICAgICAgIDxwYXJhPgogICAgICAgICBQcm92aWRlIGFuIGV4dGVuc2lvbgpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19hcmNoaXZlY2xlYW51cC9wZ19hcmNoaXZlY2xlYW51cC5jIGIvc3JjL2Jp bi9wZ19hcmNoaXZlY2xlYW51cC9wZ19hcmNoaXZlY2xlYW51cC5jCmluZGV4IDc3MjZkMDUxNDku LmJlNjJmZmU3NWQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfYXJjaGl2ZWNsZWFudXAvcGdfYXJj aGl2ZWNsZWFudXAuYworKysgYi9zcmMvYmluL3BnX2FyY2hpdmVjbGVhbnVwL3BnX2FyY2hpdmVj bGVhbnVwLmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy94bG9nX2ludGVy bmFsLmgiCiAjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJwZ19nZXRvcHQu aCIKKyNpbmNsdWRlICJnZXRvcHRfbG9uZy5oIgogCiBjb25zdCBjaGFyICpwcm9nbmFtZTsKIApA QCAtMjUyLDExICsyNTIsMTEgQEAgdXNhZ2Uodm9pZCkKIAlwcmludGYoXygiVXNhZ2U6XG4iKSk7 CiAJcHJpbnRmKF8oIiAgJXMgW09QVElPTl0uLi4gQVJDSElWRUxPQ0FUSU9OIE9MREVTVEtFUFRX QUxGSUxFXG4iKSwgcHJvZ25hbWUpOwogCXByaW50ZihfKCJcbk9wdGlvbnM6XG4iKSk7Ci0JcHJp bnRmKF8oIiAgLWQgICAgICAgICAgICAgZ2VuZXJhdGUgZGVidWcgb3V0cHV0ICh2ZXJib3NlIG1v ZGUpXG4iKSk7Ci0JcHJpbnRmKF8oIiAgLW4gICAgICAgICAgICAgZHJ5IHJ1biwgc2hvdyB0aGUg bmFtZXMgb2YgdGhlIGZpbGVzIHRoYXQgd291bGQgYmUgcmVtb3ZlZFxuIikpOwotCXByaW50Zihf KCIgIC1WLCAtLXZlcnNpb24gIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uLCB0aGVuIGV4aXRc biIpKTsKLQlwcmludGYoXygiICAteCBFWFQgICAgICAgICBjbGVhbiB1cCBmaWxlcyBpZiB0aGV5 IGhhdmUgdGhpcyBleHRlbnNpb25cbiIpKTsKLQlwcmludGYoXygiICAtPywgLS1oZWxwICAgICBz aG93IHRoaXMgaGVscCwgdGhlbiBleGl0XG4iKSk7CisJcHJpbnRmKF8oIiAgLWQsIC0tZGVidWcg ICAgICAgICAgICAgICAgIGdlbmVyYXRlIGRlYnVnIG91dHB1dCAodmVyYm9zZSBtb2RlKVxuIikp OworCXByaW50ZihfKCIgIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICAgICBkcnkgcnVuLCBzaG93 IHRoZSBuYW1lcyBvZiB0aGUgZmlsZXMgdGhhdCB3b3VsZCBiZSByZW1vdmVkXG4iKSk7CisJcHJp bnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9y bWF0aW9uLCB0aGVuIGV4aXRcbiIpKTsKKwlwcmludGYoXygiICAteCwgLS1zdHJpcC1leHRlbnNp b249RVhUICAgc3RyaXAgdGhpcyBleHRlbnRpb24gYmVmb3JlIGlkZW50aWZ5aW5nIGZpbGVzIGZv ciBjbGVhbiB1cFxuIikpOworCXByaW50ZihfKCIgIC0/LCAtLWhlbHAgICAgICAgICAgICAgICAg ICBzaG93IHRoaXMgaGVscCwgdGhlbiBleGl0XG4iKSk7CiAJcHJpbnRmKF8oIlxuIgogCQkJICJG b3IgdXNlIGFzIGFyY2hpdmVfY2xlYW51cF9jb21tYW5kIGluIHBvc3RncmVzcWwuY29uZjpcbiIK IAkJCSAiICBhcmNoaXZlX2NsZWFudXBfY29tbWFuZCA9ICdwZ19hcmNoaXZlY2xlYW51cCBbT1BU SU9OXS4uLiBBUkNISVZFTE9DQVRJT04gJSVyJ1xuIgpAQCAtMjc0LDYgKzI3NCwxMiBAQCB1c2Fn ZSh2b2lkKQogaW50CiBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKKwlzdGF0aWMgc3Ry dWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsKKwkJeyJkZWJ1ZyIsIG5vX2FyZ3VtZW50LCBO VUxMLCAnZCd9LAorCQl7ImRyeS1ydW4iLCBub19hcmd1bWVudCwgTlVMTCwgJ24nfSwKKwkJeyJz dHJpcC1leHRlbnNpb24iLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3gnfSwKKwkJe05VTEws IDAsIE5VTEwsIDB9CisJfTsKIAlpbnQJCQljOwogCiAJcGdfbG9nZ2luZ19pbml0KGFyZ3ZbMF0p OwpAQCAtMjk0LDcgKzMwMCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl9CiAJ fQogCi0Jd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJkbng6IikpICE9IC0xKQorCXdo aWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJkbng6IiwgbG9uZ19vcHRpb25zLCBO VUxMKSkgIT0gLTEpCiAJewogCQlzd2l0Y2ggKGMpCiAJCXsKLS0gCjIuMzkuMgoK --=_470ef97448234476c446092d28630e8e Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v7-0002-Allow-pg_archivecleanup-to-remove-backup-history-.patch Content-Disposition: attachment; filename=v7-0002-Allow-pg_archivecleanup-to-remove-backup-history-.patch; size=11060 RnJvbSBlZjIzNGZlMDZmMzJiMGIzYjBiM2Q1NGNlZmM3OGVlN2ZiZjQwMzI4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IFRodSwgMTYgSnVuIDIwMjMgMjE6MTU6MjMgKzA5MDAKU3ViamVjdDog W1BBVENIIHY3IDIvM10gQWxsb3cgcGdfYXJjaGl2ZWNsZWFudXAgdG8gcmVtb3ZlIGJhY2t1cCBo aXN0b3J5IGZpbGVzCgpCYWNrdXAgaGlzdG9yeSBmaWxlcyBhcmUganVzdCBmZXcgYnl0ZXMsIGJ1 dCBpdCBjYW4gYmUgbm9pc3kgZm9yIHRoZQpleWUgdG8gc2VlIGEgbGFyZ2UgYWNjdW11bGF0aW9u IG9mIGhpc3RvcnkgZmlsZXMgbWl4ZWQgd2l0aCB0aGUgV0FMCnNlZ21lbnRzLgpUaGlzIHBhdGNo IGFkZHMgYSBuZXcgb3B0aW9uIHRvIHJlbW92ZSBmaWxlcyBpbmNsdWRpbmcgYmFja3VwCmhpc3Rv cnkgZmlsZXMgb2xkZXIgb2xkZXN0a2VwdHdhbGZpbGUuCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9w Z2FyY2hpdmVjbGVhbnVwLnNnbWwgICAgICAgIHwgMTEgKysrCiBzcmMvYmluL3BnX2FyY2hpdmVj bGVhbnVwL3BnX2FyY2hpdmVjbGVhbnVwLmMgfCA4NSArKysrKysrKysrKystLS0tLS0tCiAuLi4v dC8wMTBfcGdfYXJjaGl2ZWNsZWFudXAucGwgICAgICAgICAgICAgICAgfCA3OSArKysrKysrKysr Ky0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAxMTcgaW5zZXJ0aW9ucygrKSwgNTggZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ2FyY2hpdmVjbGVhbnVwLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvcmVmL3BnYXJjaGl2ZWNsZWFudXAuc2dtbAppbmRleCAwOTk5MWMyZmNk Li44ZmFjMjMzZGI2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnYXJjaGl2ZWNsZWFu dXAuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnYXJjaGl2ZWNsZWFudXAuc2dtbApAQCAt MTEzLDYgKzExMywxNyBAQCBwZ19hcmNoaXZlY2xlYW51cDogIHJlbW92aW5nIGZpbGUgImFyY2hp dmUvMDAwMDAwMDEwMDAwMDAzNzAwMDAwMDBFIgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92 YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+ LWI8L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tY2xlYW4tYmFja3VwLWhp c3Rvcnk8L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+Cisg ICAgICAgICBSZW1vdmUgYmFja3VwIGhpc3RvcnkgZmlsZXMuCisgICAgICAgICBGb3IgZGV0YWls cyBhYm91dCBiYWNrdXAgaGlzdG9yeSBmaWxlLCBwbGVhc2UgcmVmZXIgdG8gdGhlIDx4cmVmIGxp bmtlbmQ9ImJhY2t1cC1iYXNlLWJhY2t1cCIvPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xp c3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAg ICAgPHRlcm0+PG9wdGlvbj4tVjwvb3B0aW9uPjwvdGVybT4KICAgICAgIDx0ZXJtPjxvcHRpb24+ LS12ZXJzaW9uPC9vcHRpb24+PC90ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19hcmNoaXZl Y2xlYW51cC9wZ19hcmNoaXZlY2xlYW51cC5jIGIvc3JjL2Jpbi9wZ19hcmNoaXZlY2xlYW51cC9w Z19hcmNoaXZlY2xlYW51cC5jCmluZGV4IGJlNjJmZmU3NWQuLmE3Zjc3ZDkxNTggMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcGdfYXJjaGl2ZWNsZWFudXAvcGdfYXJjaGl2ZWNsZWFudXAuYworKysgYi9z cmMvYmluL3BnX2FyY2hpdmVjbGVhbnVwL3BnX2FyY2hpdmVjbGVhbnVwLmMKQEAgLTIzLDYgKzIz LDggQEAgY29uc3QgY2hhciAqcHJvZ25hbWU7CiAKIC8qIE9wdGlvbnMgYW5kIGRlZmF1bHRzICov CiBib29sCQlkcnlydW4gPSBmYWxzZTsJCS8qIGFyZSB3ZSBwZXJmb3JtaW5nIGEgZHJ5LXJ1biBv cGVyYXRpb24/ICovCitib29sCQljbGVhbkJhY2t1cEhpc3RvcnkgPSBmYWxzZTsJLyogcmVtb3Zl IGZpbGVzIGluY2x1ZGluZworCQkJCQkJCQkJCQkJICogYmFja3VwIGhpc3RvcnkgZmlsZXMgKi8K IGNoYXIJICAgKmFkZGl0aW9uYWxfZXh0ID0gTlVMTDsJLyogRXh0ZW5zaW9uIHRvIHJlbW92ZSBm cm9tIGZpbGVuYW1lcyAqLwogCiBjaGFyCSAgICphcmNoaXZlTG9jYXRpb247CS8qIHdoZXJlIHRv IGZpbmQgdGhlIGFyY2hpdmU/ICovCkBAIC05NywxNSArOTksMzEgQEAgQ2xlYW51cFByaW9yV0FM RmlsZXModm9pZCkKIAl7CiAJCXdoaWxlIChlcnJubyA9IDAsICh4bGRlID0gcmVhZGRpcih4bGRp cikpICE9IE5VTEwpCiAJCXsKKwkJCWNoYXIJCVdBTEZpbGVQYXRoW01BWFBHUEFUSCAqIDJdOyAv KiB0aGUgZmlsZSBwYXRoCisJCQkJCQkJCQkJCQkJCSAqIGluY2x1ZGluZyBhcmNoaXZlICovCiAJ CQkvKgotCQkJICogVHJ1bmNhdGlvbiBpcyBlc3NlbnRpYWxseSBoYXJtbGVzcywgYmVjYXVzZSB3 ZSBza2lwIG5hbWVzIG9mCi0JCQkgKiBsZW5ndGggb3RoZXIgdGhhbiBYTE9HX0ZOQU1FX0xFTi4g IChJbiBwcmluY2lwbGUsIG9uZSBjb3VsZCB1c2UKLQkJCSAqIGEgMTAwMC1jaGFyYWN0ZXIgYWRk aXRpb25hbF9leHQgYW5kIGdldCB0cm91YmxlLikKKwkJCSAqIFRydW5jYXRpb24gaXMgZXNzZW50 aWFsbHkgaGFybWxlc3MsICBiZWNhdXNlIHdlIGNoZWNrIHRoZSBmaWxlCisJCQkgKiBmb3JtYXQg aW5jbHVkaW5nIHRoZSBsZW5ndGggaW1tZWRpYXRlbHkgYWZ0ZXIgdGhpcy4KKwkJCSAqIChJbiBw cmluY2lwbGUsIG9uZSBjb3VsZCB1c2UgYSAxMDAwLWNoYXJhY3RlciBhZGRpdGlvbmFsX2V4dAor CQkJICogYW5kIGdldCB0cm91YmxlLikKIAkJCSAqLwogCQkJc3RybGNweSh3YWxmaWxlLCB4bGRl LT5kX25hbWUsIE1BWFBHUEFUSCk7CiAJCQlUcmltRXh0ZW5zaW9uKHdhbGZpbGUsIGFkZGl0aW9u YWxfZXh0KTsKIAogCQkJLyoKKwkJCSAqIENoZWNrIGZpbGUgbmFtZS4KKwkJCSAqCisJCQkgKiBX ZSBza2lwIGZpbGVzIHdoaWNoIGFyZSBub3QgV0FMIGZpbGUgb3IgcGFydGlhbCBXQUwgZmlsZS4K KwkJCSAqIEFsc28gd2Ugc2tpcCBiYWNrdXAgaGlzdG9yeSBmaWxlcyB3aGVuIC0tY2xlYW4tYmFj a3VwLWhpc3RvcnkKKwkJCSAqIGlzIG5vdCBzcGVjaWZpZWQuCisJCQkgKi8KKwkJCWlmICghSXNY TG9nRmlsZU5hbWUod2FsZmlsZSkgJiYgIUlzUGFydGlhbFhMb2dGaWxlTmFtZSh3YWxmaWxlKSAm JgorCQkJCSEoY2xlYW5CYWNrdXBIaXN0b3J5ICYmIElzQmFja3VwSGlzdG9yeUZpbGVOYW1lKHdh bGZpbGUpKSkKKwkJCQljb250aW51ZTsKKworCQkJLyoKKwkJCSAqIENoZWNrIGN1dG9mZiBwb2lu dC4KKwkJCSAqCiAJCQkgKiBXZSBpZ25vcmUgdGhlIHRpbWVsaW5lIHBhcnQgb2YgdGhlIFhMT0cg c2VnbWVudCBpZGVudGlmaWVycyBpbgogCQkJICogZGVjaWRpbmcgd2hldGhlciBhIHNlZ21lbnQg aXMgc3RpbGwgbmVlZGVkLiAgVGhpcyBlbnN1cmVzIHRoYXQKIAkJCSAqIHdlIHdvbid0IHByZW1h dHVyZWx5IHJlbW92ZSBhIHNlZ21lbnQgZnJvbSBhIHBhcmVudCB0aW1lbGluZS4KQEAgLTExOCwz OSArMTM2LDM1IEBAIENsZWFudXBQcmlvcldBTEZpbGVzKHZvaWQpCiAJCQkgKiBmaWxlLiBOb3Rl IHRoYXQgdGhpcyBtZWFucyBmaWxlcyBhcmUgbm90IHJlbW92ZWQgaW4gdGhlIG9yZGVyCiAJCQkg KiB0aGV5IHdlcmUgb3JpZ2luYWxseSB3cml0dGVuLCBpbiBjYXNlIHRoaXMgd29ycmllcyB5b3Uu CiAJCQkgKi8KLQkJCWlmICgoSXNYTG9nRmlsZU5hbWUod2FsZmlsZSkgfHwgSXNQYXJ0aWFsWExv Z0ZpbGVOYW1lKHdhbGZpbGUpKSAmJgotCQkJCXN0cmNtcCh3YWxmaWxlICsgOCwgZXhjbHVzaXZl Q2xlYW51cEZpbGVOYW1lICsgOCkgPCAwKQotCQkJewotCQkJCWNoYXIJCVdBTEZpbGVQYXRoW01B WFBHUEFUSCAqIDJdOyAvKiB0aGUgZmlsZSBwYXRoCi0JCQkJCQkJCQkJCQkJCSAqIGluY2x1ZGlu ZyBhcmNoaXZlICovCisJCQlpZiAoc3RyY21wKHdhbGZpbGUgKyA4LCBleGNsdXNpdmVDbGVhbnVw RmlsZU5hbWUgKyA4KSA+PSAwKQorCQkJCWNvbnRpbnVlOwogCisJCQkvKgorCQkJICogVXNlIHRo ZSBvcmlnaW5hbCBmaWxlIG5hbWUgYWdhaW4gbm93LCBpbmNsdWRpbmcgYW55CisJCQkgKiBleHRl bnNpb24gdGhhdCBtaWdodCBoYXZlIGJlZW4gY2hvcHBlZCBvZmYgYmVmb3JlIHRlc3RpbmcKKwkJ CSAqIHRoZSBzZXF1ZW5jZS4KKwkJCSAqLworCQkJc25wcmludGYoV0FMRmlsZVBhdGgsIHNpemVv ZihXQUxGaWxlUGF0aCksICIlcy8lcyIsCisJCQkJCSBhcmNoaXZlTG9jYXRpb24sIHhsZGUtPmRf bmFtZSk7CisKKwkJCWlmIChkcnlydW4pCisJCQl7CiAJCQkJLyoKLQkJCQkgKiBVc2UgdGhlIG9y aWdpbmFsIGZpbGUgbmFtZSBhZ2FpbiBub3csIGluY2x1ZGluZyBhbnkKLQkJCQkgKiBleHRlbnNp b24gdGhhdCBtaWdodCBoYXZlIGJlZW4gY2hvcHBlZCBvZmYgYmVmb3JlIHRlc3RpbmcKLQkJCQkg KiB0aGUgc2VxdWVuY2UuCisJCQkJICogUHJpbnRzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGJl IHJlbW92ZWQgYW5kIHNraXBzIHRoZQorCQkJCSAqIGFjdHVhbCByZW1vdmFsLiAgVGhlIHJlZ3Vs YXIgcHJpbnRvdXQgaXMgc28gdGhhdCB0aGUKKwkJCQkgKiB1c2VyIGNhbiBwaXBlIHRoZSBvdXRw dXQgaW50byBzb21lIG90aGVyIHByb2dyYW0uCiAJCQkJICovCi0JCQkJc25wcmludGYoV0FMRmls ZVBhdGgsIHNpemVvZihXQUxGaWxlUGF0aCksICIlcy8lcyIsCi0JCQkJCQkgYXJjaGl2ZUxvY2F0 aW9uLCB4bGRlLT5kX25hbWUpOwotCi0JCQkJaWYgKGRyeXJ1bikKLQkJCQl7Ci0JCQkJCS8qCi0J CQkJCSAqIFByaW50cyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBiZSByZW1vdmVkIGFuZCBza2lw cyB0aGUKLQkJCQkJICogYWN0dWFsIHJlbW92YWwuICBUaGUgcmVndWxhciBwcmludG91dCBpcyBz byB0aGF0IHRoZQotCQkJCQkgKiB1c2VyIGNhbiBwaXBlIHRoZSBvdXRwdXQgaW50byBzb21lIG90 aGVyIHByb2dyYW0uCi0JCQkJCSAqLwotCQkJCQlwcmludGYoIiVzXG4iLCBXQUxGaWxlUGF0aCk7 Ci0JCQkJCXBnX2xvZ19kZWJ1ZygiZmlsZSBcIiVzXCIgd291bGQgYmUgcmVtb3ZlZCIsIFdBTEZp bGVQYXRoKTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCi0JCQkJcGdfbG9nX2RlYnVnKCJyZW1v dmluZyBmaWxlIFwiJXNcIiIsIFdBTEZpbGVQYXRoKTsKLQotCQkJCXJjID0gdW5saW5rKFdBTEZp bGVQYXRoKTsKLQkJCQlpZiAocmMgIT0gMCkKLQkJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZW1v dmUgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJCQkgV0FMRmlsZVBhdGgpOworCQkJCXByaW50Zigi JXNcbiIsIFdBTEZpbGVQYXRoKTsKKwkJCQlwZ19sb2dfZGVidWcoImZpbGUgXCIlc1wiIHdvdWxk IGJlIHJlbW92ZWQiLCBXQUxGaWxlUGF0aCk7CisJCQkJY29udGludWU7CiAJCQl9CisKKwkJCXBn X2xvZ19kZWJ1ZygicmVtb3ZpbmcgZmlsZSBcIiVzXCIiLCBXQUxGaWxlUGF0aCk7CisKKwkJCXJj ID0gdW5saW5rKFdBTEZpbGVQYXRoKTsKKwkJCWlmIChyYyAhPSAwKQorCQkJCXBnX2ZhdGFsKCJj b3VsZCBub3QgcmVtb3ZlIGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCQkgV0FMRmlsZVBhdGgpOwog CQl9CiAKIAkJaWYgKGVycm5vKQpAQCAtMjU0LDYgKzI2OCw3IEBAIHVzYWdlKHZvaWQpCiAJcHJp bnRmKF8oIlxuT3B0aW9uczpcbiIpKTsKKwlwcmludGYoXygiICAtYiwgLS1jbGVhbi1iYWNrdXAt aGlzdG9yeSAgY2xlYW4gdXAgZmlsZXMgaW5jbHVkaW5nIGJhY2t1cCBoaXN0b3J5IGZpbGVzXG4i KSk7CiAJcHJpbnRmKF8oIiAgLWQsIC0tZGVidWcgICAgICAgICAgICAgICAgIGdlbmVyYXRlIGRl YnVnIG91dHB1dCAodmVyYm9zZSBtb2RlKVxuIikpOwogCXByaW50ZihfKCIgIC1uLCAtLWRyeS1y dW4gICAgICAgICAgICAgICBkcnkgcnVuLCBzaG93IHRoZSBuYW1lcyBvZiB0aGUgZmlsZXMgdGhh dCB3b3VsZCBiZSByZW1vdmVkXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAg ICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uLCB0aGVuIGV4aXRcbiIpKTsKIAlw cmludGYoXygiICAteCwgLS1zdHJpcC1leHRlbnNpb249RVhUICAgc3RyaXAgdGhpcyBleHRlbnRp b24gYmVmb3JlIGlkZW50aWZ5aW5nIGZpbGVzIGZvciBjbGVhbiB1cFxuIikpOwogCXByaW50Zihf KCIgIC0/LCAtLWhlbHAgICAgICAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCwgdGhlbiBleGl0 XG4iKSk7CkBAIC0yNzUsNiArMjkwLDcgQEAgaW50CiBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIHsKIAlzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsKKwkJeyJjbGVh bi1iYWNrdXAtaGlzdG9yeSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnYid9LAogCQl7ImRlYnVnIiwg bm9fYXJndW1lbnQsIE5VTEwsICdkJ30sCiAJCXsiZHJ5LXJ1biIsIG5vX2FyZ3VtZW50LCBOVUxM LCAnbid9LAogCQl7InN0cmlwLWV4dGVuc2lvbiIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAn eCd9LApAQCAtMzAwLDEwICszMTYsMTMgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ CX0KIAl9CiAKLQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiZG54OiIsIGxv bmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKQorCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2Ms IGFyZ3YsICJiZG54OiIsIGxvbmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKQogCXsKIAkJc3dpdGNo IChjKQogCQl7CisJCQljYXNlICdiJzogCQkJLyogUmVtb3ZlIGJhY2t1cCBoaXN0b3J5IGZpbGVz IHRvbyAqLworCQkJCWNsZWFuQmFja3VwSGlzdG9yeSA9IHRydWU7CisJCQkJYnJlYWs7CiAJCQlj YXNlICdkJzoJCQkvKiBEZWJ1ZyBtb2RlICovCiAJCQkJcGdfbG9nZ2luZ19pbmNyZWFzZV92ZXJi b3NpdHkoKTsKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfYXJjaGl2ZWNsZWFu dXAvdC8wMTBfcGdfYXJjaGl2ZWNsZWFudXAucGwgYi9zcmMvYmluL3BnX2FyY2hpdmVjbGVhbnVw L3QvMDEwX3BnX2FyY2hpdmVjbGVhbnVwLnBsCmluZGV4IGNjMzM4NmQxNDYuLjAzMGE4MmU3ZmEg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfYXJjaGl2ZWNsZWFudXAvdC8wMTBfcGdfYXJjaGl2ZWNs ZWFudXAucGwKKysrIGIvc3JjL2Jpbi9wZ19hcmNoaXZlY2xlYW51cC90LzAxMF9wZ19hcmNoaXZl Y2xlYW51cC5wbApAQCAtMTIsMTMgKzEyLDIzIEBAIHByb2dyYW1fb3B0aW9uc19oYW5kbGluZ19v aygncGdfYXJjaGl2ZWNsZWFudXAnKTsKIAogbXkgJHRlbXBkaXIgPSBQb3N0Z3JlU1FMOjpUZXN0 OjpVdGlsczo6dGVtcGRpcjsKIAotbXkgQHdhbGZpbGVzID0gKAotCScwMDAwMDAwMTAwMDAwMDM3 MDAwMDAwMEMuZ3onLCAnMDAwMDAwMDEwMDAwMDAzNzAwMDAwMDBEJywKLQknMDAwMDAwMDEwMDAw MDAzNzAwMDAwMDBFJywgJzAwMDAwMDAxMDAwMDAwMzcwMDAwMDAwRi5wYXJ0aWFsJywpOworbXkg QHdhbGZpbGVzX3dpdGhfZ3ogPSAoCisJeyBuYW1lID0+ICcwMDAwMDAwMTAwMDAwMDM3MDAwMDAw MEMuZ3onLCAgICAgIHByZXNlbnQgPT4gMCB9LAorCXsgbmFtZSA9PiAnMDAwMDAwMDEwMDAwMDAz NzAwMDAwMDBEJywgICAgICAgICBwcmVzZW50ID0+IDAgfSwKKwl7IG5hbWUgPT4gJzAwMDAwMDAx MDAwMDAwMzcwMDAwMDAwRScsICAgICAgICAgcHJlc2VudCA9PiAxIH0sCisJeyBuYW1lID0+ICcw MDAwMDAwMTAwMDAwMDM3MDAwMDAwMEYucGFydGlhbCcsIHByZXNlbnQgPT4gMSB9LAorCXsgbmFt ZSA9PiAndW5yZWxhdGVkX2ZpbGUnLCAgICAgICAgICAgICAgICAgICBwcmVzZW50ID0+IDEgfSk7 CisKK215IEB3YWxmaWxlc193aXRoX2JhY2t1cCA9ICgKKwl7IG5hbWUgPT4gJzAwMDAwMDAxMDAw MDAwMzcwMDAwMDAwRCcsICAgICAgICAgICAgICAgICBwcmVzZW50ID0+IDAgfSwKKwl7IG5hbWUg PT4gJzAwMDAwMDAxMDAwMDAwMzcwMDAwMDAwRC4wMDAwMDAyOC5iYWNrdXAnLCBwcmVzZW50ID0+ IDAgfSwKKwl7IG5hbWUgPT4gJzAwMDAwMDAxMDAwMDAwMzcwMDAwMDAwRScsICAgICAgICAgICAg ICAgICBwcmVzZW50ID0+IDEgfSwKKwl7IG5hbWUgPT4gJzAwMDAwMDAxMDAwMDAwMzcwMDAwMDAw Ri5wYXJ0aWFsJywgICAgICAgICBwcmVzZW50ID0+IDEgfSwKKwl7IG5hbWUgPT4gJ3VucmVsYXRl ZF9maWxlJywgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50ID0+IDEgfSk7CiAKIHN1 YiBjcmVhdGVfZmlsZXMKIHsKLQlmb3JlYWNoIG15ICRmbiAoQHdhbGZpbGVzLCAndW5yZWxhdGVk X2ZpbGUnKQorCWZvcmVhY2ggbXkgJGZuIChAXykKIAl7CiAJCW9wZW4gbXkgJGZpbGUsICc+Jywg IiR0ZW1wZGlyLyRmbiI7CiAJCXByaW50ICRmaWxlICdDT05URU5UJzsKQEAgLTI3LDcgKzM3LDE4 IEBAIHN1YiBjcmVhdGVfZmlsZXMKIAlyZXR1cm47CiB9CiAKLWNyZWF0ZV9maWxlcygpOworc3Vi IGdldF93YWxmaWxlcworeworCW15IEB3YWxmaWxlczsKKworCWZvciBteSAkd2FscGFpciAoQF8p CisJeworCQlwdXNoIEB3YWxmaWxlcywgJHdhbHBhaXItPntuYW1lfTsKKwl9CisJcmV0dXJuIEB3 YWxmaWxlczsKK30KKworY3JlYXRlX2ZpbGVzKGdldF93YWxmaWxlcyhAd2FsZmlsZXNfd2l0aF9n eikpOwogCiBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJWydwZ19hcmNoaXZlY2xlYW51cCddLApAQCAt NTksMTQgKzgwLDE0IEBAIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAlteSAkc3RkZXJyOwogCW15ICRy ZXN1bHQgPQogCSAgSVBDOjpSdW46OnJ1biBbICdwZ19hcmNoaXZlY2xlYW51cCcsICctZCcsICct bicsICR0ZW1wZGlyLAotCQkkd2FsZmlsZXNbMl0gXSwKKwkJJHdhbGZpbGVzX3dpdGhfZ3pbMl0t PntuYW1lfSBdLAogCSAgJzI+JywgXCRzdGRlcnI7CiAJb2soJHJlc3VsdCwgInBnX2FyY2hpdmVj bGVhbnVwIGRyeSBydW46IGV4aXQgY29kZSAwIik7CiAJbGlrZSgKIAkJJHN0ZGVyciwKLQkJcXIv JHdhbGZpbGVzWzFdLip3b3VsZCBiZSByZW1vdmVkLywKKwkJcXIvJHdhbGZpbGVzX3dpdGhfZ3pb MV0tPntuYW1lfS4qd291bGQgYmUgcmVtb3ZlZC8sCiAJCSJwZ19hcmNoaXZlY2xlYW51cCBkcnkg cnVuOiBtYXRjaGVzIik7Ci0JZm9yZWFjaCBteSAkZm4gKEB3YWxmaWxlcykKKwlmb3JlYWNoIG15 ICRmbiAoZ2V0X3dhbGZpbGVzKEB3YWxmaWxlc193aXRoX2d6KSkKIAl7CiAJCW9rKC1mICIkdGVt cGRpci8kZm4iLCAiJGZuIG5vdCByZW1vdmVkIik7CiAJfQpAQCAtNzYsMzIgKzk3LDQwIEBAIHN1 YiBydW5fY2hlY2sKIHsKIAlsb2NhbCAkVGVzdDo6QnVpbGRlcjo6TGV2ZWwgPSAkVGVzdDo6QnVp bGRlcjo6TGV2ZWwgKyAxOwogCi0JbXkgKCRzdWZmaXgsICR0ZXN0X25hbWUpID0gQF87CisJbXkg KCR0ZXN0ZGF0YSwgJG9sZGVzdGtlcHR3YWxmaWxlLCAkdGVzdF9uYW1lLCBAb3B0aW9ucykgPSBA XzsKIAotCWNyZWF0ZV9maWxlcygpOworCWNyZWF0ZV9maWxlcyhnZXRfd2FsZmlsZXMoQCR0ZXN0 ZGF0YSkpOwogCiAJY29tbWFuZF9vaygKIAkJWwotCQkJJ3BnX2FyY2hpdmVjbGVhbnVwJywgJy14 JywgJy5neicsICR0ZW1wZGlyLAotCQkJJHdhbGZpbGVzWzJdIC4gJHN1ZmZpeAorCQkJJ3BnX2Fy Y2hpdmVjbGVhbnVwJywgQG9wdGlvbnMsICR0ZW1wZGlyLAorCQkJJG9sZGVzdGtlcHR3YWxmaWxl CiAJCV0sCiAJCSIkdGVzdF9uYW1lOiBydW5zIik7CiAKLQlvayghLWYgIiR0ZW1wZGlyLyR3YWxm aWxlc1swXSIsCi0JCSIkdGVzdF9uYW1lOiBmaXJzdCBvbGRlciBXQUwgZmlsZSB3YXMgY2xlYW5l ZCB1cCIpOwotCW9rKCEtZiAiJHRlbXBkaXIvJHdhbGZpbGVzWzFdIiwKLQkJIiR0ZXN0X25hbWU6 IHNlY29uZCBvbGRlciBXQUwgZmlsZSB3YXMgY2xlYW5lZCB1cCIpOwotCW9rKC1mICIkdGVtcGRp ci8kd2FsZmlsZXNbMl0iLAotCQkiJHRlc3RfbmFtZTogcmVzdGFydGZpbGUgd2FzIG5vdCBjbGVh bmVkIHVwIik7Ci0Jb2soLWYgIiR0ZW1wZGlyLyR3YWxmaWxlc1szXSIsCi0JCSIkdGVzdF9uYW1l OiBuZXdlciBXQUwgZmlsZSB3YXMgbm90IGNsZWFuZWQgdXAiKTsKLQlvaygtZiAiJHRlbXBkaXIv dW5yZWxhdGVkX2ZpbGUiLAotCQkiJHRlc3RfbmFtZTogdW5yZWxhdGVkIGZpbGUgd2FzIG5vdCBj bGVhbmVkIHVwIik7CisJZm9yIG15ICR3YWxwYWlyIChAJHRlc3RkYXRhKQorCXsKKwkJaWYgKCR3 YWxwYWlyLT57cHJlc2VudH0pCisJCXsKKwkJCW9rKC1mICIkdGVtcGRpci8kd2FscGFpci0+e25h bWV9IiwKKwkJCQkiJHRlc3RfbmFtZTokd2FscGFpci0+e25hbWV9IHdhcyBub3QgY2xlYW5lZCB1 cCIpOworCQl9CisJCWVsc2UKKwkJeworCQkJb2soIS1mICIkdGVtcGRpci8kd2FscGFpci0+e25h bWV9IiwKKwkJCQkiJHRlc3RfbmFtZTokd2FscGFpci0+e25hbWV9IHdhcyBjbGVhbmVkIHVwIik7 CisJCX0KKwl9CiAJcmV0dXJuOwogfQogCi1ydW5fY2hlY2soJycsICdwZ19hcmNoaXZlY2xlYW51 cCcpOwotcnVuX2NoZWNrKCcucGFydGlhbCcsICdwZ19hcmNoaXZlY2xlYW51cCB3aXRoIC5wYXJ0 aWFsIGZpbGUnKTsKLXJ1bl9jaGVjaygnLjAwMDAwMDIwLmJhY2t1cCcsICdwZ19hcmNoaXZlY2xl YW51cCB3aXRoIC5iYWNrdXAgZmlsZScpOworcnVuX2NoZWNrKFxAd2FsZmlsZXNfd2l0aF9neiwg JzAwMDAwMDAxMDAwMDAwMzcwMDAwMDAwRScsCisJJ3BnX2FyY2hpdmVjbGVhbnVwJywgJy14Lmd6 Jyk7CitydW5fY2hlY2soXEB3YWxmaWxlc193aXRoX2d6LCAnMDAwMDAwMDEwMDAwMDAzNzAwMDAw MDBFLnBhcnRpYWwnLAorCSdwZ19hcmNoaXZlY2xlYW51cCB3aXRoIC5wYXJ0aWFsIGZpbGUnLCAn LXguZ3onKTsKK3J1bl9jaGVjayhcQHdhbGZpbGVzX3dpdGhfZ3osICcwMDAwMDAwMTAwMDAwMDM3 MDAwMDAwMEUuMDAwMDAwMjAuYmFja3VwJywKKwkncGdfYXJjaGl2ZWNsZWFudXAgd2l0aCAuYmFj a3VwIGZpbGUnLCAnLXguZ3onKTsKK3J1bl9jaGVjayhcQHdhbGZpbGVzX3dpdGhfYmFja3VwLCAn MDAwMDAwMDEwMDAwMDAzNzAwMDAwMDBFJywKKwkncGdfYXJjaGl2ZWNsZWFudXAgd2l0aCAtLWNs ZWFuLWJhY2t1cC1oaXN0b3J5JywgJy1iJyk7CiAKIGRvbmVfdGVzdGluZygpOwotLSAKMi4zOS4y Cgo= --=_470ef97448234476c446092d28630e8e Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v7-0003-Refactored-to-reduce-the-nesting-level.patch Content-Disposition: attachment; filename=v7-0003-Refactored-to-reduce-the-nesting-level.patch; size=6092 RnJvbSBiZWYzNzZiMjc2NjkyMzMzOWRlZGJmM2ZhZTllNTE2MjYyYjQzM2ExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IFRodSwgMTYgSnVuIDIwMjMgMjE6MjM6MDIgKzA5MDAKU3ViamVjdDog W1BBVENIIHY3IDMvM10gUmVmYWN0b3JlZCB0byByZWR1Y2UgdGhlIG5lc3RpbmcgbGV2ZWwuCgot LS0KIHNyYy9iaW4vcGdfYXJjaGl2ZWNsZWFudXAvcGdfYXJjaGl2ZWNsZWFudXAuYyB8IDE0NiAr KysrKysrKystLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA3MiBpbnNlcnRpb25zKCspLCA3NCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2FyY2hpdmVjbGVhbnVwL3BnX2Fy Y2hpdmVjbGVhbnVwLmMgYi9zcmMvYmluL3BnX2FyY2hpdmVjbGVhbnVwL3BnX2FyY2hpdmVjbGVh bnVwLmMKaW5kZXggYTdmNzdkOTE1OC4uZjQ3NTE3N2VkYiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z19hcmNoaXZlY2xlYW51cC9wZ19hcmNoaXZlY2xlYW51cC5jCisrKyBiL3NyYy9iaW4vcGdfYXJj aGl2ZWNsZWFudXAvcGdfYXJjaGl2ZWNsZWFudXAuYwpAQCAtOTUsODcgKzk1LDg1IEBAIENsZWFu dXBQcmlvcldBTEZpbGVzKHZvaWQpCiAJc3RydWN0IGRpcmVudCAqeGxkZTsKIAljaGFyCQl3YWxm aWxlW01BWFBHUEFUSF07CiAKLQlpZiAoKHhsZGlyID0gb3BlbmRpcihhcmNoaXZlTG9jYXRpb24p KSAhPSBOVUxMKQorCWlmICgoeGxkaXIgPSBvcGVuZGlyKGFyY2hpdmVMb2NhdGlvbikpID09IE5V TEwpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBhcmNoaXZlIGxvY2F0aW9uIFwiJXNcIjog JW0iLAorCQkJCSBhcmNoaXZlTG9jYXRpb24pOworCisJd2hpbGUgKGVycm5vID0gMCwgKHhsZGUg PSByZWFkZGlyKHhsZGlyKSkgIT0gTlVMTCkKIAl7Ci0JCXdoaWxlIChlcnJubyA9IDAsICh4bGRl ID0gcmVhZGRpcih4bGRpcikpICE9IE5VTEwpCisJCWNoYXIJCVdBTEZpbGVQYXRoW01BWFBHUEFU SCAqIDJdOyAvKiB0aGUgZmlsZSBwYXRoCisJCQkJCQkJCQkJCQkJICogaW5jbHVkaW5nIGFyY2hp dmUgKi8KKwkJLyoKKwkJICogVHJ1bmNhdGlvbiBpcyBlc3NlbnRpYWxseSBoYXJtbGVzcywgIGJl Y2F1c2Ugd2UgY2hlY2sgdGhlIGZpbGUKKwkJICogZm9ybWF0IGluY2x1ZGluZyB0aGUgbGVuZ3Ro IGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMuCisJCSAqIChJbiBwcmluY2lwbGUsIG9uZSBjb3VsZCB1 c2UgYSAxMDAwLWNoYXJhY3RlciBhZGRpdGlvbmFsX2V4dAorCQkgKiBhbmQgZ2V0IHRyb3VibGUu KQorCQkgKi8KKwkJc3RybGNweSh3YWxmaWxlLCB4bGRlLT5kX25hbWUsIE1BWFBHUEFUSCk7CisJ CVRyaW1FeHRlbnNpb24od2FsZmlsZSwgYWRkaXRpb25hbF9leHQpOworCisJCS8qCisJCSAqIENo ZWNrIGZpbGUgbmFtZS4KKwkJICoKKwkJICogV2Ugc2tpcCBmaWxlcyB3aGljaCBhcmUgbm90IFdB TCBmaWxlIG9yIHBhcnRpYWwgV0FMIGZpbGUuCisJCSAqIEFsc28gd2Ugc2tpcCBiYWNrdXAgaGlz dG9yeSBmaWxlcyB3aGVuIC0tY2xlYW4tYmFja3VwLWhpc3RvcnkKKwkJICogaXMgbm90IHNwZWNp ZmllZC4KKwkJICovCisJCWlmICghSXNYTG9nRmlsZU5hbWUod2FsZmlsZSkgJiYgIUlzUGFydGlh bFhMb2dGaWxlTmFtZSh3YWxmaWxlKSAmJgorCQkJIShjbGVhbkJhY2t1cEhpc3RvcnkgJiYgSXNC YWNrdXBIaXN0b3J5RmlsZU5hbWUod2FsZmlsZSkpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJ ICogQ2hlY2sgY3V0b2ZmIHBvaW50LgorCQkgKgorCQkgKiBXZSBpZ25vcmUgdGhlIHRpbWVsaW5l IHBhcnQgb2YgdGhlIFhMT0cgc2VnbWVudCBpZGVudGlmaWVycyBpbgorCQkgKiBkZWNpZGluZyB3 aGV0aGVyIGEgc2VnbWVudCBpcyBzdGlsbCBuZWVkZWQuICBUaGlzIGVuc3VyZXMgdGhhdAorCQkg KiB3ZSB3b24ndCBwcmVtYXR1cmVseSByZW1vdmUgYSBzZWdtZW50IGZyb20gYSBwYXJlbnQgdGlt ZWxpbmUuCisJCSAqIFdlIGNvdWxkIHByb2JhYmx5IGJlIGEgbGl0dGxlIG1vcmUgcHJvYWN0aXZl IGFib3V0IHJlbW92aW5nCisJCSAqIHNlZ21lbnRzIG9mIG5vbi1wYXJlbnQgdGltZWxpbmVzLCBi dXQgdGhhdCB3b3VsZCBiZSBhIHdob2xlIGxvdAorCQkgKiBtb3JlIGNvbXBsaWNhdGVkLgorCQkg KgorCQkgKiBXZSB1c2UgdGhlIGFscGhhbnVtZXJpYyBzb3J0aW5nIHByb3BlcnR5IG9mIHRoZSBm aWxlbmFtZXMgdG8KKwkJICogZGVjaWRlIHdoaWNoIG9uZXMgYXJlIGVhcmxpZXIgdGhhbiB0aGUg ZXhjbHVzaXZlQ2xlYW51cEZpbGVOYW1lCisJCSAqIGZpbGUuIE5vdGUgdGhhdCB0aGlzIG1lYW5z IGZpbGVzIGFyZSBub3QgcmVtb3ZlZCBpbiB0aGUgb3JkZXIKKwkJICogdGhleSB3ZXJlIG9yaWdp bmFsbHkgd3JpdHRlbiwgaW4gY2FzZSB0aGlzIHdvcnJpZXMgeW91LgorCQkgKi8KKwkJaWYgKHN0 cmNtcCh3YWxmaWxlICsgOCwgZXhjbHVzaXZlQ2xlYW51cEZpbGVOYW1lICsgOCkgPj0gMCkKKwkJ CWNvbnRpbnVlOworCisJCS8qCisJCSAqIFVzZSB0aGUgb3JpZ2luYWwgZmlsZSBuYW1lIGFnYWlu IG5vdywgaW5jbHVkaW5nIGFueQorCQkgKiBleHRlbnNpb24gdGhhdCBtaWdodCBoYXZlIGJlZW4g Y2hvcHBlZCBvZmYgYmVmb3JlIHRlc3RpbmcKKwkJICogdGhlIHNlcXVlbmNlLgorCQkgKi8KKwkJ c25wcmludGYoV0FMRmlsZVBhdGgsIHNpemVvZihXQUxGaWxlUGF0aCksICIlcy8lcyIsCisJCQkJ IGFyY2hpdmVMb2NhdGlvbiwgeGxkZS0+ZF9uYW1lKTsKKworCQlpZiAoZHJ5cnVuKQogCQl7Ci0J CQljaGFyCQlXQUxGaWxlUGF0aFtNQVhQR1BBVEggKiAyXTsgLyogdGhlIGZpbGUgcGF0aAotCQkJ CQkJCQkJCQkJCQkgKiBpbmNsdWRpbmcgYXJjaGl2ZSAqLwotCQkJLyoKLQkJCSAqIFRydW5jYXRp b24gaXMgZXNzZW50aWFsbHkgaGFybWxlc3MsICBiZWNhdXNlIHdlIGNoZWNrIHRoZSBmaWxlCi0J CQkgKiBmb3JtYXQgaW5jbHVkaW5nIHRoZSBsZW5ndGggaW1tZWRpYXRlbHkgYWZ0ZXIgdGhpcy4K LQkJCSAqIChJbiBwcmluY2lwbGUsIG9uZSBjb3VsZCB1c2UgYSAxMDAwLWNoYXJhY3RlciBhZGRp dGlvbmFsX2V4dAotCQkJICogYW5kIGdldCB0cm91YmxlLikKLQkJCSAqLwotCQkJc3RybGNweSh3 YWxmaWxlLCB4bGRlLT5kX25hbWUsIE1BWFBHUEFUSCk7Ci0JCQlUcmltRXh0ZW5zaW9uKHdhbGZp bGUsIGFkZGl0aW9uYWxfZXh0KTsKLQogCQkJLyoKLQkJCSAqIENoZWNrIGZpbGUgbmFtZS4KLQkJ CSAqCi0JCQkgKiBXZSBza2lwIGZpbGVzIHdoaWNoIGFyZSBub3QgV0FMIGZpbGUgb3IgcGFydGlh bCBXQUwgZmlsZS4KLQkJCSAqIEFsc28gd2Ugc2tpcCBiYWNrdXAgaGlzdG9yeSBmaWxlcyB3aGVu IC0tY2xlYW4tYmFja3VwLWhpc3RvcnkKLQkJCSAqIGlzIG5vdCBzcGVjaWZpZWQuCisJCQkgKiBQ cmludHMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgcmVtb3ZlZCBhbmQgc2tpcHMgdGhlCisJ CQkgKiBhY3R1YWwgcmVtb3ZhbC4gIFRoZSByZWd1bGFyIHByaW50b3V0IGlzIHNvIHRoYXQgdGhl CisJCQkgKiB1c2VyIGNhbiBwaXBlIHRoZSBvdXRwdXQgaW50byBzb21lIG90aGVyIHByb2dyYW0u CiAJCQkgKi8KLQkJCWlmICghSXNYTG9nRmlsZU5hbWUod2FsZmlsZSkgJiYgIUlzUGFydGlhbFhM b2dGaWxlTmFtZSh3YWxmaWxlKSAmJgotCQkJCSEoY2xlYW5CYWNrdXBIaXN0b3J5ICYmIElzQmFj a3VwSGlzdG9yeUZpbGVOYW1lKHdhbGZpbGUpKSkKLQkJCQljb250aW51ZTsKLQotCQkJLyoKLQkJ CSAqIENoZWNrIGN1dG9mZiBwb2ludC4KLQkJCSAqCi0JCQkgKiBXZSBpZ25vcmUgdGhlIHRpbWVs aW5lIHBhcnQgb2YgdGhlIFhMT0cgc2VnbWVudCBpZGVudGlmaWVycyBpbgotCQkJICogZGVjaWRp bmcgd2hldGhlciBhIHNlZ21lbnQgaXMgc3RpbGwgbmVlZGVkLiAgVGhpcyBlbnN1cmVzIHRoYXQK LQkJCSAqIHdlIHdvbid0IHByZW1hdHVyZWx5IHJlbW92ZSBhIHNlZ21lbnQgZnJvbSBhIHBhcmVu dCB0aW1lbGluZS4KLQkJCSAqIFdlIGNvdWxkIHByb2JhYmx5IGJlIGEgbGl0dGxlIG1vcmUgcHJv YWN0aXZlIGFib3V0IHJlbW92aW5nCi0JCQkgKiBzZWdtZW50cyBvZiBub24tcGFyZW50IHRpbWVs aW5lcywgYnV0IHRoYXQgd291bGQgYmUgYSB3aG9sZSBsb3QKLQkJCSAqIG1vcmUgY29tcGxpY2F0 ZWQuCi0JCQkgKgotCQkJICogV2UgdXNlIHRoZSBhbHBoYW51bWVyaWMgc29ydGluZyBwcm9wZXJ0 eSBvZiB0aGUgZmlsZW5hbWVzIHRvCi0JCQkgKiBkZWNpZGUgd2hpY2ggb25lcyBhcmUgZWFybGll ciB0aGFuIHRoZSBleGNsdXNpdmVDbGVhbnVwRmlsZU5hbWUKLQkJCSAqIGZpbGUuIE5vdGUgdGhh dCB0aGlzIG1lYW5zIGZpbGVzIGFyZSBub3QgcmVtb3ZlZCBpbiB0aGUgb3JkZXIKLQkJCSAqIHRo ZXkgd2VyZSBvcmlnaW5hbGx5IHdyaXR0ZW4sIGluIGNhc2UgdGhpcyB3b3JyaWVzIHlvdS4KLQkJ CSAqLwotCQkJaWYgKHN0cmNtcCh3YWxmaWxlICsgOCwgZXhjbHVzaXZlQ2xlYW51cEZpbGVOYW1l ICsgOCkgPj0gMCkKLQkJCQljb250aW51ZTsKLQotCQkJLyoKLQkJCSAqIFVzZSB0aGUgb3JpZ2lu YWwgZmlsZSBuYW1lIGFnYWluIG5vdywgaW5jbHVkaW5nIGFueQotCQkJICogZXh0ZW5zaW9uIHRo YXQgbWlnaHQgaGF2ZSBiZWVuIGNob3BwZWQgb2ZmIGJlZm9yZSB0ZXN0aW5nCi0JCQkgKiB0aGUg c2VxdWVuY2UuCi0JCQkgKi8KLQkJCXNucHJpbnRmKFdBTEZpbGVQYXRoLCBzaXplb2YoV0FMRmls ZVBhdGgpLCAiJXMvJXMiLAotCQkJCQkgYXJjaGl2ZUxvY2F0aW9uLCB4bGRlLT5kX25hbWUpOwot Ci0JCQlpZiAoZHJ5cnVuKQotCQkJewotCQkJCS8qCi0JCQkJICogUHJpbnRzIHRoZSBuYW1lIG9m IHRoZSBmaWxlIHRvIGJlIHJlbW92ZWQgYW5kIHNraXBzIHRoZQotCQkJCSAqIGFjdHVhbCByZW1v dmFsLiAgVGhlIHJlZ3VsYXIgcHJpbnRvdXQgaXMgc28gdGhhdCB0aGUKLQkJCQkgKiB1c2VyIGNh biBwaXBlIHRoZSBvdXRwdXQgaW50byBzb21lIG90aGVyIHByb2dyYW0uCi0JCQkJICovCi0JCQkJ cHJpbnRmKCIlc1xuIiwgV0FMRmlsZVBhdGgpOwotCQkJCXBnX2xvZ19kZWJ1ZygiZmlsZSBcIiVz XCIgd291bGQgYmUgcmVtb3ZlZCIsIFdBTEZpbGVQYXRoKTsKLQkJCQljb250aW51ZTsKLQkJCX0K LQotCQkJcGdfbG9nX2RlYnVnKCJyZW1vdmluZyBmaWxlIFwiJXNcIiIsIFdBTEZpbGVQYXRoKTsK LQotCQkJcmMgPSB1bmxpbmsoV0FMRmlsZVBhdGgpOwotCQkJaWYgKHJjICE9IDApCi0JCQkJcGdf ZmF0YWwoImNvdWxkIG5vdCByZW1vdmUgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJCSBXQUxGaWxl UGF0aCk7CisJCQlwcmludGYoIiVzXG4iLCBXQUxGaWxlUGF0aCk7CisJCQlwZ19sb2dfZGVidWco ImZpbGUgXCIlc1wiIHdvdWxkIGJlIHJlbW92ZWQiLCBXQUxGaWxlUGF0aCk7CisJCQljb250aW51 ZTsKIAkJfQogCi0JCWlmIChlcnJubykKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBhcmNo aXZlIGxvY2F0aW9uIFwiJXNcIjogJW0iLAotCQkJCQkgYXJjaGl2ZUxvY2F0aW9uKTsKLQkJaWYg KGNsb3NlZGlyKHhsZGlyKSkKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgYXJjaGl2ZSBs b2NhdGlvbiBcIiVzXCI6ICVtIiwKLQkJCQkJIGFyY2hpdmVMb2NhdGlvbik7CisJCXBnX2xvZ19k ZWJ1ZygicmVtb3ZpbmcgZmlsZSBcIiVzXCIiLCBXQUxGaWxlUGF0aCk7CisKKwkJcmMgPSB1bmxp bmsoV0FMRmlsZVBhdGgpOworCQlpZiAocmMgIT0gMCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg cmVtb3ZlIGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCSBXQUxGaWxlUGF0aCk7CiAJfQotCWVsc2UK LQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGFyY2hpdmUgbG9jYXRpb24gXCIlc1wiOiAlbSIs CisKKwlpZiAoZXJybm8pCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBhcmNoaXZlIGxvY2F0 aW9uIFwiJXNcIjogJW0iLAorCQkJCSBhcmNoaXZlTG9jYXRpb24pOworCWlmIChjbG9zZWRpcih4 bGRpcikpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgYXJjaGl2ZSBsb2NhdGlvbiBcIiVz XCI6ICVtIiwKIAkJCQkgYXJjaGl2ZUxvY2F0aW9uKTsKIH0KIAotLSAKMi4zOS4yCgo= --=_470ef97448234476c446092d28630e8e--