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 1rNyOO-0000gG-SN for pgsql-hackers@arkaria.postgresql.org; Thu, 11 Jan 2024 16:58:58 +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 1rNyOO-00Daxx-0h for pgsql-hackers@arkaria.postgresql.org; Thu, 11 Jan 2024 16:58:56 +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.94.2) (envelope-from ) id 1rNyON-00Daxo-H3 for pgsql-hackers@lists.postgresql.org; Thu, 11 Jan 2024 16:58:55 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rNyOK-0012s4-Dn for pgsql-hackers@lists.postgresql.org; Thu, 11 Jan 2024 16:58:54 +0000 Received: from [192.168.3.18] (broadband-5-228-82-85.ip.moscow.rt.ru [5.228.82.85]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: y.sokolov@postgrespro.ru) by mail.postgrespro.ru (Postfix/465) with ESMTPSA id BE3A3E20C31 for ; Thu, 11 Jan 2024 19:58:50 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1704992330; bh=SdnkmS0L972GI4YcQSklVSatFAekX2kSej7MT8EJosE=; h=Message-ID:Date:User-Agent:To:From:Subject:From; b=Rn+KPSsyWR1aepI0jR4TrnXCmnAD+KHgC2y2UrVOOr2+aHzvdp0dPfMNEyby+cZgI wDn12iLYjhGhVmhsaV2OyGBgfkw+/8xcafbusFYCa7efDWar29BD6WvqTBhPDnzii3 SLae8BMwhO8HoTJigsJ8g20Ilbn17b7J4zXkME4k845W3f+hLs3O083nVxxYcTyyI+ niNPrsEVmrmFZ3KYsIfsJrhUfBXdxOD/sUB6JEO5C9RD/9aohS3sesjpmNxrLCTS63 rGhaav/IFN5tOIZCboUsCY/mupTGdwhcfHf2OlHN41k1VOrGX3M2C0UgiN0LxJhaj3 X9/jdlIQRxCSA== Content-Type: multipart/mixed; boundary="------------sCZkcRL9l4sKXRxXNHvjiEoh" Message-ID: Date: Thu, 11 Jan 2024 19:58:50 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: PostgreSQL Hackers Content-Language: en-US From: Yura Sokolov Subject: Suggest two small improvements for PITR. 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. --------------sCZkcRL9l4sKXRxXNHvjiEoh Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Good day, hackers. Here I am to suggest two small improvements to Point In Time Recovery. First is ability to recover recovery-target-time with timestamp stored in XLOG_RESTORE_POINT. Looks like historically this ability did exist and were removed unintentionally during refactoring at commit [1] c945af80 "Refactor checking whether we've reached the recovery target." Second is extending XLOG_BACKUP_END record with timestamp, therefore backup will have its own timestamp as well. It is backward compatible change since there were no record length check before. Both changes slightly helps in mostly idle systems, when between several backups may happens no commits at all, so there's no timestamp to recover to. Attached sample patches are made in reverse order: - XLOG_BACKUP_END then XLOG_RESTORE_POINT. Second patch made by colleague by my idea. Publishing for both is permitted. If idea is accepted, patches for tests will be applied as well. [1] https://git.postgresql.org/gitweb/?p=postgresql.git;a=patch;h=c945af80 --- Yura Sokolov. --------------sCZkcRL9l4sKXRxXNHvjiEoh Content-Type: text/x-patch; charset=UTF-8; name="v1-0001-Add-timestamp-to-xlog-backup-end.patch" Content-Disposition: attachment; filename="v1-0001-Add-timestamp-to-xlog-backup-end.patch" Content-Transfer-Encoding: base64 RnJvbSAxNzNjZmMzNzYyYTk3YzMwMGI2MThmODYzZmQyMzQzMzkwOWNkYjgxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBZdXJhIFNva29sb3YgPHkuc29rb2xvdkBwb3N0Z3Jl c3Byby5ydT4KRGF0ZTogV2VkLCAzIE1heSAyMDIzIDE4OjQ4OjQ2ICswMzAwClN1YmplY3Q6 IFtQQVRDSF0gUEdQUk8tODA4MzogcmVjb3JkIHRpbWVzdGFtcCBpbiBYTE9HX0JBQ0tVUF9F TkQgZm9yCiByZWNvdmVyeV90YXJnZXRfdGltZQoKSXQgaXMgdXNlZnVsIGZvciBwZ19wcm9i YWNrdXAgdG8gcmVjb3ZlciBvbiBiYWNrdXAgZW5kLgoKVGFnczogcGdfcHJvYmFja3VwCi0t LQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMgICAgfCAxNSArKysr KysrLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyAgICAgICAgIHwgIDYg KystLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgfCAzOSAr KysrKysrKysrKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dfaW50ZXJu YWwuaCAgICAgICAgfCAgNyArKysrCiA0IGZpbGVzIGNoYW5nZWQsIDYyIGluc2VydGlvbnMo KyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL3hsb2dkZXNjLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rl c2MuYwppbmRleCAzZmQ3MTg1ZjIxNy4uZTExMTQxNjgyMzkgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy94bG9nZGVzYy5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9ybWdyZGVzYy94bG9nZGVzYy5jCkBAIC04NiwxMCArODYsMTkgQEAgeGxvZ19kZXNj KFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAl9CiAJZWxzZSBp ZiAoaW5mbyA9PSBYTE9HX0JBQ0tVUF9FTkQpCiAJewotCQlYTG9nUmVjUHRyCXN0YXJ0cG9p bnQ7CisJCXhsX2JhY2t1cF9lbmQJeGxyZWMgPSB7MCwgMH07CisJCXNpemVfdAkJCXJlY19s ZW4gPSBYTG9nUmVjR2V0RGF0YUxlbihyZWNvcmQpOwogCi0JCW1lbWNweSgmc3RhcnRwb2lu dCwgcmVjLCBzaXplb2YoWExvZ1JlY1B0cikpOwotCQlhcHBlbmRTdHJpbmdJbmZvKGJ1Ziwg IiVYLyVYIiwgTFNOX0ZPUk1BVF9BUkdTKHN0YXJ0cG9pbnQpKTsKKwkJaWYgKHJlY19sZW4g PT0gc2l6ZW9mKFhMb2dSZWNQdHIpKQorCQkJbWVtY3B5KCZ4bHJlYy5zdGFydHBvaW50LCBy ZWMsIHNpemVvZihYTG9nUmVjUHRyKSk7CisJCWVsc2UgaWYgKHJlY19sZW4gPj0gc2l6ZW9m KHhsX2JhY2t1cF9lbmQpKQorCQkJbWVtY3B5KCZ4bHJlYywgcmVjLCBzaXplb2YoeGxfYmFj a3VwX2VuZCkpOworCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJVgvJVgiLCBMU05fRk9S TUFUX0FSR1MoeGxyZWMuc3RhcnRwb2ludCkpOworCisJCWlmIChyZWNfbGVuID49IHNpemVv Zih4bF9iYWNrdXBfZW5kKSkKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIGF0ICVzIiwK KwkJCQkJCQkgdGltZXN0YW1wdHpfdG9fc3RyKHhscmVjLmVuZF90aW1lKSk7CiAJfQogCWVs c2UgaWYgKGluZm8gPT0gWExPR19QQVJBTUVURVJfQ0hBTkdFKQogCXsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3hsb2cuYwppbmRleCA1ZWJiOTc4M2UyZi4uNDJjZDA2Y2Q3ZDggMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKQEAgLTg2ODAsMTQgKzg2ODAsMTYgQEAgZG9f cGdfYmFja3VwX3N0b3AoQmFja3VwU3RhdGUgKnN0YXRlLCBib29sIHdhaXRmb3JhcmNoaXZl KQogCX0KIAllbHNlCiAJeworCQl4bF9iYWNrdXBfZW5kCXhscmVjOwogCQljaGFyCSAgICpo aXN0b3J5X2ZpbGU7CiAKIAkJLyoKIAkJICogV3JpdGUgdGhlIGJhY2t1cC1lbmQgeGxvZyBy ZWNvcmQKIAkJICovCisJCXhscmVjLnN0YXJ0cG9pbnQgPSBzdGF0ZS0+c3RhcnRwb2ludDsK KwkJeGxyZWMuZW5kX3RpbWUgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CiAJCVhMb2dCZWdp bkluc2VydCgpOwotCQlYTG9nUmVnaXN0ZXJEYXRhKChjaGFyICopICgmc3RhdGUtPnN0YXJ0 cG9pbnQpLAotCQkJCQkJIHNpemVvZihzdGF0ZS0+c3RhcnRwb2ludCkpOworCQlYTG9nUmVn aXN0ZXJEYXRhKChjaGFyICopICgmeGxyZWMpLCBzaXplb2YoeGxyZWMpKTsKIAkJc3RhdGUt PnN0b3Bwb2ludCA9IFhMb2dJbnNlcnQoUk1fWExPR19JRCwgWExPR19CQUNLVVBfRU5EKTsK IAogCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3Jl Y292ZXJ5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwpp bmRleCAxMTc0N2E2ZmYxMy4uNDJkNWI1OWFjMjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCkBAIC0yMzEyLDYgKzIzMTIsMTMgQEAgZ2V0UmVj b3JkVGltZXN0YW1wKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkLCBUaW1lc3RhbXBUeiAqcmVj b3JkWHRpbWUpCiAJCSpyZWNvcmRYdGltZSA9ICgoeGxfcmVzdG9yZV9wb2ludCAqKSBYTG9n UmVjR2V0RGF0YShyZWNvcmQpKS0+cnBfdGltZTsKIAkJcmV0dXJuIHRydWU7CiAJfQorCWlm IChybWlkID09IFJNX1hMT0dfSUQgJiYgaW5mbyA9PSBYTE9HX0JBQ0tVUF9FTkQpCisJewor CQlpZiAoWExvZ1JlY0dldERhdGFMZW4ocmVjb3JkKSA8IHNpemVvZih4bF9iYWNrdXBfZW5k KSkKKwkJCXJldHVybiBmYWxzZTsKKwkJKnJlY29yZFh0aW1lID0gKCh4bF9iYWNrdXBfZW5k ICopIFhMb2dSZWNHZXREYXRhKHJlY29yZCkpLT5lbmRfdGltZTsKKwkJcmV0dXJuIHRydWU7 CisJfQogCWlmIChybWlkID09IFJNX1hBQ1RfSUQgJiYgKHhhY3RfaW5mbyA9PSBYTE9HX1hB Q1RfQ09NTUlUIHx8CiAJCQkJCQkJICAgeGFjdF9pbmZvID09IFhMT0dfWEFDVF9DT01NSVRf UFJFUEFSRUQpKQogCXsKQEAgLTI2NDAsNiArMjY0NywzOCBAQCByZWNvdmVyeVN0b3BzQWZ0 ZXIoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCX0KIAl9CiAKKwlpZiAocmVjb3ZlcnlU YXJnZXQgPT0gUkVDT1ZFUllfVEFSR0VUX1RJTUUgJiYKKwkJcm1pZCA9PSBSTV9YTE9HX0lE ICYmIGluZm8gPT0gWExPR19CQUNLVVBfRU5EKQorCXsKKwkJYm9vbAlzdG9wc0hlcmUgPSBm YWxzZTsKKworCQlpZiAoZ2V0UmVjb3JkVGltZXN0YW1wKHJlY29yZCwgJnJlY29yZFh0aW1l KSkKKwkJeworCQkJLyoKKwkJCSAqIFVzZSBzYW1lIGNvbmRpdGlvbnMgYXMgaW4gcmVjb3Zl cnlTdG9wc0JlZm9yZSBmb3IgdHJhbnNhY3Rpb24KKwkJCSAqIHJlY29yZHMgdG8gbm90IG92 ZXJyaWRlIHRyYW5zYWN0aW9ucyB0aW1lIGhhbmRsaW5nLgorCQkJICovCisJCQlpZiAocmVj b3ZlcnlUYXJnZXRJbmNsdXNpdmUpCisJCQkJc3RvcHNIZXJlID0gcmVjb3JkWHRpbWUgPiBy ZWNvdmVyeVRhcmdldFRpbWU7CisJCQllbHNlCisJCQkJc3RvcHNIZXJlID0gcmVjb3JkWHRp bWUgPj0gcmVjb3ZlcnlUYXJnZXRUaW1lOworCQl9CisKKwkJaWYgKHN0b3BzSGVyZSkKKwkJ eworCQkJcmVjb3ZlcnlTdG9wQWZ0ZXIgPSB0cnVlOworCQkJcmVjb3ZlcnlTdG9wWGlkID0g SW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJCQlyZWNvdmVyeVN0b3BMU04gPSBJbnZhbGlkWExv Z1JlY1B0cjsKKwkJCXJlY292ZXJ5U3RvcFRpbWUgPSByZWNvcmRYdGltZTsKKwkJCXJlY292 ZXJ5U3RvcE5hbWVbMF0gPSAnXDAnOworCisJCQllcmVwb3J0KExPRywKKwkJCQkJKGVycm1z ZygicmVjb3Zlcnkgc3RvcHBpbmcgYXQgYmFja3VwIGVuZCBhdCB0aW1lICVzIiwKKwkJCQkJ CQl0aW1lc3RhbXB0el90b19zdHIocmVjb3ZlcnlTdG9wVGltZSkpKSk7CisJCQlyZXR1cm4g dHJ1ZTsKKwkJfQorCX0KKwogCS8qIENoZWNrIGlmIHRoZSB0YXJnZXQgTFNOIGhhcyBiZWVu IHJlYWNoZWQgKi8KIAlpZiAocmVjb3ZlcnlUYXJnZXQgPT0gUkVDT1ZFUllfVEFSR0VUX0xT TiAmJgogCQlyZWNvdmVyeVRhcmdldEluY2x1c2l2ZSAmJgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3hsb2dfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9n X2ludGVybmFsLmgKaW5kZXggZTVmYzY2OTY2YmMuLjFiZDBkYWYxNGEwIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ19pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRl L2FjY2Vzcy94bG9nX2ludGVybmFsLmgKQEAgLTI4OSw2ICsyODksMTMgQEAgdHlwZWRlZiBz dHJ1Y3QgeGxfcmVzdG9yZV9wb2ludAogCWNoYXIJCXJwX25hbWVbTUFYRk5BTUVMRU5dOwog fSB4bF9yZXN0b3JlX3BvaW50OwogCisvKiBiYWNrdXAgZW5kIHJlY29yZCAqLwordHlwZWRl ZiBzdHJ1Y3QgeGxfYmFja3VwX2VuZAoreworCVhMb2dSZWNQdHIJc3RhcnRwb2ludDsKKwlU aW1lc3RhbXBUegllbmRfdGltZTsKK30geGxfYmFja3VwX2VuZDsKKwogLyogT3ZlcndyaXRl IG9mIHByaW9yIGNvbnRyZWNvcmQgKi8KIHR5cGVkZWYgc3RydWN0IHhsX292ZXJ3cml0ZV9j b250cmVjb3JkCiB7Ci0tIApHaXRMYWIKCg== --------------sCZkcRL9l4sKXRxXNHvjiEoh Content-Type: text/x-patch; charset=UTF-8; name="v1-0002-Restore-timestamp-handling-in-recovery-point.patch" Content-Disposition: attachment; filename*0="v1-0002-Restore-timestamp-handling-in-recovery-point.patch" Content-Transfer-Encoding: base64 RnJvbSAxMTQ3ZWNjYzEyNDg2NGZjYWMyOTY3ZDE2MjUyMmU1YmM3NTcwOGIzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnZXkgRnVrYW5jaGlrIDxzLmZ1a2FuY2hpa0Bw b3N0Z3Jlc3Byby5ydT4KRGF0ZTogVGh1LCA0IE1heSAyMDIzIDE0OjQ1OjQ3ICswMzAwClN1 YmplY3Q6IFtQQVRDSF0gUEdQUk8tODA4MTogVXNlIFhMT0dfUkVTVE9SRV9QT0lOVCBmb3Ig cmVjb3ZlcnlfdGFyZ2V0X3RpbWUKCkl0IGlzIHVzZWZ1bCBmb3IgcGdfcHJvYmFja3VwIHRv IHJlY292ZXIgb24gcmVzdG9yZSBwb2ludC4KClRhZ3M6IHBnX3Byb2JhY2t1cAotLS0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jIHwgMjggKysrKysrKysr KysrKysrKysrKy0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCA1IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hs b2dyZWNvdmVyeS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5 LmMKaW5kZXggNDJkNWI1OWFjMjUuLjQ2NzY5MzdkNWNiIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwpAQCAtMjY0OCw3ICsyNjQ4LDggQEAgcmVj b3ZlcnlTdG9wc0FmdGVyKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCX0KIAogCWlmIChy ZWNvdmVyeVRhcmdldCA9PSBSRUNPVkVSWV9UQVJHRVRfVElNRSAmJgotCQlybWlkID09IFJN X1hMT0dfSUQgJiYgaW5mbyA9PSBYTE9HX0JBQ0tVUF9FTkQpCisJCXJtaWQgPT0gUk1fWExP R19JRCAmJiAoaW5mbyA9PSBYTE9HX0JBQ0tVUF9FTkQgfHwKKwkJCQkJCQkgICBpbmZvID09 IFhMT0dfUkVTVE9SRV9QT0lOVCkpCiAJewogCQlib29sCXN0b3BzSGVyZSA9IGZhbHNlOwog CkBAIC0yNjcwLDExICsyNjcxLDI4IEBAIHJlY292ZXJ5U3RvcHNBZnRlcihYTG9nUmVhZGVy U3RhdGUgKnJlY29yZCkKIAkJCXJlY292ZXJ5U3RvcFhpZCA9IEludmFsaWRUcmFuc2FjdGlv bklkOwogCQkJcmVjb3ZlcnlTdG9wTFNOID0gSW52YWxpZFhMb2dSZWNQdHI7CiAJCQlyZWNv dmVyeVN0b3BUaW1lID0gcmVjb3JkWHRpbWU7Ci0JCQlyZWNvdmVyeVN0b3BOYW1lWzBdID0g J1wwJzsKIAotCQkJZXJlcG9ydChMT0csCi0JCQkJCShlcnJtc2coInJlY292ZXJ5IHN0b3Bw aW5nIGF0IGJhY2t1cCBlbmQgYXQgdGltZSAlcyIsCi0JCQkJCQkJdGltZXN0YW1wdHpfdG9f c3RyKHJlY292ZXJ5U3RvcFRpbWUpKSkpOworCQkJaWYgKGluZm8gPT0gWExPR19CQUNLVVBf RU5EKQorCQkJeworCQkJCXJlY292ZXJ5U3RvcE5hbWVbMF0gPSAnXDAnOworCisJCQkJZXJl cG9ydChMT0csCisJCQkJCQkoZXJybXNnKCJyZWNvdmVyeSBzdG9wcGluZyBhdCBiYWNrdXAg ZW5kIGF0IHRpbWUgJXMiLAorCQkJCQkJCQl0aW1lc3RhbXB0el90b19zdHIocmVjb3ZlcnlT dG9wVGltZSkpKSk7CisJCQl9CisJCQllbHNlIGlmIChpbmZvID09IFhMT0dfUkVTVE9SRV9Q T0lOVCkKKwkJCXsKKwkJCQl4bF9yZXN0b3JlX3BvaW50ICpyZWNvcmRSZXN0b3JlUG9pbnRE YXRhOworCisJCQkJcmVjb3JkUmVzdG9yZVBvaW50RGF0YSA9ICh4bF9yZXN0b3JlX3BvaW50 ICopIFhMb2dSZWNHZXREYXRhKHJlY29yZCk7CisKKwkJCQlzdHJsY3B5KHJlY292ZXJ5U3Rv cE5hbWUsIHJlY29yZFJlc3RvcmVQb2ludERhdGEtPnJwX25hbWUsIE1BWEZOQU1FTEVOKTsK KworCQkJCWVyZXBvcnQoTE9HLAorCQkJCQkJKGVycm1zZygicmVjb3Zlcnkgc3RvcHBpbmcg YXQgcmVzdG9yZSBwb2ludCBcIiVzXCIsIHRpbWUgJXMiLAorCQkJCQkJCQlyZWNvdmVyeVN0 b3BOYW1lLAorCQkJCQkJCQl0aW1lc3RhbXB0el90b19zdHIocmVjb3ZlcnlTdG9wVGltZSkp KSk7CisJCQl9CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCX0KLS0gCkdpdExhYgoK --------------sCZkcRL9l4sKXRxXNHvjiEoh--