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 1s40gz-00HMvS-Dx for pgsql-hackers@arkaria.postgresql.org; Mon, 06 May 2024 15:55:54 +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 1s40gw-00EB7t-R0 for pgsql-hackers@arkaria.postgresql.org; Mon, 06 May 2024 15:55:51 +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 1s40gw-00EB7l-9v for pgsql-hackers@lists.postgresql.org; Mon, 06 May 2024 15:55:51 +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 1s40gt-001rdP-T6 for pgsql-hackers@lists.postgresql.org; Mon, 06 May 2024 15:55:50 +0000 Received: from mail.postgrespro.ru (unknown [192.168.2.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: m.litsarev@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 411BAE20EAE; Mon, 6 May 2024 18:55:46 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1715010946; bh=fnEItl6LlfOOLIVOa2bCRPqM9TeXRdyj2ZrIRyDGd9M=; h=Date:From:To:Cc:Subject:In-Reply-To:References:User-Agent: Message-ID:From; b=hwiBI1ULn04rQT5ocqoPswjqKFa/e2pXg2dREDQiJ+q8liG1qfsqqdhs1f+bdZbEH 1zxy5DaZtynv2ZVvgdTgmEf178quU+ZL+KMNJplH5vM8Cbk2hEo2wQRzCIXZstqlcE RAl9qPhh+UvW3x7zapHoPgw1/aCQVUnP0j2c+bd/O9DFebxbh0ioGO6+Sy4mw2IroJ oQj2BUzKPmHaXz0bMuj7NAFw81TDVHrDY6w1tHfPCkSj/uFMceJWpepf4NpClrxXAg n52UD2AqWicFrdwDeiqk/PRb8QlovpfE/yPoUGrpRxxhuIhGl/Rtimdmy+sLX9+wJ9 nUwRGLa+e/y8Q== MIME-Version: 1.0 Date: Mon, 06 May 2024 18:55:46 +0300 From: m.litsarev@postgrespro.ru To: Michael Paquier Cc: Tristan Partin , pgsql-hackers@lists.postgresql.org Subject: Re: SQL function which allows to distinguish a server being in point in time recovery mode and an ordinary replica In-Reply-To: References: <06c02ef916d85e77778e5cdfdf67a3df@postgrespro.ru> User-Agent: Roundcube Webmail/1.6.5 Message-ID: X-Sender: m.litsarev@postgrespro.ru Content-Type: multipart/mixed; boundary="=_9df5102222c99decd000671c8e7ced9a" X-KSMG-AntiPhishing: NotDetected, bases: 2024/05/06 15:10:00 X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2024/05/06 12:01:00 #25108659 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_9df5102222c99decd000671c8e7ced9a Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed > simple there are already too many of them. Perhaps we should begin > tracking all that as a set of bitmasks, then plug in the tracked state > in shmem for consumption in some SQL function. Hi! Michael, Tristan as a first step I have introduced the `SharedRecoveryDataFlags` bitmask instead of three boolean SharedHotStandbyActive, SharedPromoteIsTriggered and SharedStandbyModeRequested flags (the last one from my previous patch) and made minimal updates in corresponding code based on that change. Respectfully, Mikhail Litsarev Postgres Professional: https://postgrespro.com --=_9df5102222c99decd000671c8e7ced9a Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v1-0001-Standby-mode-requested-bitmask.patch Content-Disposition: attachment; filename=v1-0001-Standby-mode-requested-bitmask.patch; size=10604 RnJvbSBlMDVlODZiYWY5MGExNGVmZWMyOWIwZWZjYjU2OTY1MDQ3OTZhZjliIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIExpdHNhcmV2IDxtLmxpdHNhcmV2QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBNb24sIDYgTWF5IDIwMjQgMTU6MjM6NTIgKzAzMDAKU3ViamVjdDogW1BB VENIIDEvMl0gSW50cm9kdWNlIHBnX2lzX3N0YW5kYnlfcmVxdWVzdGVkKCkuCgpJbnRyb2R1Y2Ug YSBiaXQgYXJyYXkgU2hhcmVkUmVjb3ZlcnlEYXRhRmxhZ3MgYW5kCnBnX2lzX3N0YW5kYnlfcmVx dWVzdGVkKCkgZnVuY3Rpb24gdG8gZGlzdGluZ3Vpc2gKYSByZXBsaWNhIGZyb20gYSByZWd1bGFy IGluc3RhbmNlIGluIHBvaW50IGluIHRpbWUgcmVjb3ZlcnkgbW9kZS4KLS0tCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3MuYyAgICB8IDE0ICsrKysrCiBzcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyB8IDc1ICsrKysrKysrKysrKysrKysrKy0tLS0t CiBzcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3JlY292ZXJ5LmggICAgICAgICB8ICAxICsKIHNyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgIHwgIDQgKysKIDQgZmlsZXMgY2hh bmdlZCwgNzkgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9nZnVuY3MuYwppbmRleCA5MmJkYjE3ZWQ1Mi4uM2NlOTM0ZmNlZGIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dmdW5jcy5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dmdW5jcy5jCkBAIC03NDcsMyArNzQ3LDE3IEBAIHBn X3Byb21vdGUoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCSAgIHdhaXRfc2Vjb25kcykpKTsKIAlQ R19SRVRVUk5fQk9PTChmYWxzZSk7CiB9CisKKy8qCisgKiBSZXR1cm5zIGJvb2wgd2l0aCBhIGN1 cnJlbnQgdmFsdWUgb2YgU3RhbmRieU1vZGVJc1JlcXVlc3RlZCBmbGFnCisgKiB0byBkaXN0aW5n dWlzaCBhIHJlcGxpY2EgZnJvbSBhIHJlZ3VsYXIgaW5zdGFuY2UgaW4gYQorICogUG9pbnQgSW4g VGltZSBSZWNvdmVyeSAoUElUUikgbW9kZS4KKyAqCisgKiBSZXR1cm5zCXRydWUJaWYgc3RhbmRi eS5zaWduYWwgZmlsZSBpcyBmb3VuZCBhdCBzdGFydHVwIHByb2Nlc3MKKyAqIAkJCWZhbHNlCW90 aGVyd2lzZQorICovCitEYXR1bQorcGdfaXNfc3RhbmRieV9yZXF1ZXN0ZWQoUEdfRlVOQ1RJT05f QVJHUykKK3sKKwlQR19SRVRVUk5fQk9PTChTdGFuZGJ5TW9kZUlzUmVxdWVzdGVkKCkpOworfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwppbmRleCAyOWM1YmVjMDg0 Ny4uNTMzN2M0OTc0ZjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hs b2dyZWNvdmVyeS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVy eS5jCkBAIC0xNzAsMTMgKzE3MCwxMyBAQCBzdGF0aWMgWExvZ1JlY1B0ciBSZWRvU3RhcnRMU04g PSBJbnZhbGlkWExvZ1JlY1B0cjsKIHN0YXRpYyBUaW1lTGluZUlEIFJlZG9TdGFydFRMSSA9IDA7 CiAKIC8qCi0gKiBMb2NhbCBjb3B5IG9mIFNoYXJlZEhvdFN0YW5kYnlBY3RpdmUgdmFyaWFibGUu IEZhbHNlIGFjdHVhbGx5IG1lYW5zICJub3QKKyAqIExvY2FsIGNvcHkgb2YgWExSX0hPVF9TVEFO REJZX0FDVElWRSBmbGFnLiBGYWxzZSBhY3R1YWxseSBtZWFucyAibm90CiAgKiBrbm93biwgbmVl ZCB0byBjaGVjayB0aGUgc2hhcmVkIHN0YXRlIi4KICAqLwogc3RhdGljIGJvb2wgTG9jYWxIb3RT dGFuZGJ5QWN0aXZlID0gZmFsc2U7CiAKIC8qCi0gKiBMb2NhbCBjb3B5IG9mIFNoYXJlZFByb21v dGVJc1RyaWdnZXJlZCB2YXJpYWJsZS4gRmFsc2UgYWN0dWFsbHkgbWVhbnMgIm5vdAorICogTG9j YWwgY29weSBvZiBYTFJfUFJPTU9URV9JU19UUklHR0VSRUQgZmxhZy4gRmFsc2UgYWN0dWFsbHkg bWVhbnMgIm5vdAogICoga25vd24sIG5lZWQgdG8gY2hlY2sgdGhlIHNoYXJlZCBzdGF0ZSIuCiAg Ki8KIHN0YXRpYyBib29sIExvY2FsUHJvbW90ZUlzVHJpZ2dlcmVkID0gZmFsc2U7CkBAIC0yOTgs MjIgKzI5OCw0MiBAQCBzdGF0aWMgY2hhciAqcmVwbGF5X2ltYWdlX21hc2tlZCA9IE5VTEw7CiBz dGF0aWMgY2hhciAqcHJpbWFyeV9pbWFnZV9tYXNrZWQgPSBOVUxMOwogCiAKKy8qCisgKiBUaGUg ZmxhZyBpbmRpY2F0ZXMgaWYgd2UgYWxsb3cgaG90IHN0YW5kYnkgcXVlcmllcyB0byBiZQorICog cnVuLiAgUHJvdGVjdGVkIGJ5IGluZm9fbGNrLgorICovCisjZGVmaW5lCVhMUl9IT1RfU1RBTkRC WV9BQ1RJVkUJCTB4MDEKKy8qCisgKiBUaGUgZmxhZyBpbmRpY2F0ZXMgaWYgYSBzdGFuZGJ5IHBy b21vdGlvbiBoYXMgYmVlbgorICogdHJpZ2dlcmVkLiAgUHJvdGVjdGVkIGJ5IGluZm9fbGNrLgor ICovCisjZGVmaW5lCVhMUl9QUk9NT1RFX0lTX1RSSUdHRVJFRAkweDAyCisvKgorICogVGhlIGZs YWcgaW5kaWNhdGVzIGlmIHdlJ3JlIGluIGEgc3RhbmRieSBtb2RlIGF0CisgKiBzdGFydCwgd2hp bGUgcmVjb3ZlcnkgbW9kZSBpcyBvbi4KKyAqLworI2RlZmluZQlYTFJfU1RBTkRCWV9NT0RFX1JF UVVFU1RFRAkweDA0CisKIC8qCiAgKiBTaGFyZWQtbWVtb3J5IHN0YXRlIGZvciBXQUwgcmVjb3Zl cnkuCiAgKi8KIHR5cGVkZWYgc3RydWN0IFhMb2dSZWNvdmVyeUN0bERhdGEKIHsKIAkvKgotCSAq IFNoYXJlZEhvdFN0YW5kYnlBY3RpdmUgaW5kaWNhdGVzIGlmIHdlIGFsbG93IGhvdCBzdGFuZGJ5 IHF1ZXJpZXMgdG8gYmUKLQkgKiBydW4uICBQcm90ZWN0ZWQgYnkgaW5mb19sY2suCi0JICovCi0J Ym9vbAkJU2hhcmVkSG90U3RhbmRieUFjdGl2ZTsKLQotCS8qCi0JICogU2hhcmVkUHJvbW90ZUlz VHJpZ2dlcmVkIGluZGljYXRlcyBpZiBhIHN0YW5kYnkgcHJvbW90aW9uIGhhcyBiZWVuCi0JICog dHJpZ2dlcmVkLiAgUHJvdGVjdGVkIGJ5IGluZm9fbGNrLgorCSAqIFRoaXMgYml0IGFycmF5IGlz IGludHJvZHVjZWQgdG8ga2VlcCB0aGUgZm9sbG93aW5nIHN0YXRlczoKKwkgKgorCSAqCS0tCVhM Ul9IT1RfU1RBTkRCWV9BQ1RJVkUgaW5kaWNhdGVzIGlmIHdlIGFsbG93IGhvdCBzdGFuZGJ5IHF1 ZXJpZXMKKwkgKgkJdG8gYmUgcnVuLiBQcm90ZWN0ZWQgYnkgaW5mb19sY2suCisJICoKKwkgKgkt LQlYTFJfUFJPTU9URV9JU19UUklHR0VSRUQgaW5kaWNhdGVzIGlmIGEgc3RhbmRieSBwcm9tb3Rp b24KKwkgKgkJaGFzIGJlZW4gdHJpZ2dlcmVkLiBQcm90ZWN0ZWQgYnkgaW5mb19sY2suCisJICoK KwkgKiAJLS0JWExSX1NUQU5EQllfTU9ERV9SRVFVRVNURUQgaW5kaWNhdGVzIGlmIHdlJ3JlIGlu IGEgc3RhbmRieSBtb2RlCisJICoJCWF0IHN0YXJ0LCB3aGlsZSByZWNvdmVyeSBtb2RlIGlzIG9u LiBObyBpbmZvX2xjayBwcm90ZWN0aW9uLgorCSAqCisJICoJYW5kIGNhbiBiZSBleHRlbmRlZCBp biBmdXR1cmUuCiAJICovCi0JYm9vbAkJU2hhcmVkUHJvbW90ZUlzVHJpZ2dlcmVkOworCXVpbnQz MgkJU2hhcmVkUmVjb3ZlcnlEYXRhRmxhZ3M7CiAKIAkvKgogCSAqIHJlY292ZXJ5V2FrZXVwTGF0 Y2ggaXMgdXNlZCB0byB3YWtlIHVwIHRoZSBzdGFydHVwIHByb2Nlc3MgdG8gY29udGludWUKQEAg LTEwODIsMTAgKzExMDIsMTcgQEAgcmVhZFJlY292ZXJ5U2lnbmFsRmlsZSh2b2lkKQogCiAJU3Rh bmRieU1vZGVSZXF1ZXN0ZWQgPSBmYWxzZTsKIAlBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQgPSBm YWxzZTsKKwkvKgorCSAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIFNwaW5sb2NrIGhlcmUgYmVj YXVzZSBvbmx5IHRoZSBzdGFydHVwCisJICogcHJvY2VzcyBtb2RpZmllcyB0aGUgU2hhcmVkUmVj b3ZlcnlEYXRhRmxhZ3MgYml0IGhlcmUgYW5kCisJICogbm8gb3RoZXIgcHJvY2Vzc2VzIGFyZSBy ZWFkaW5nIGl0IGF0IHRoYXQgdGltZS4KKwkgKi8KKwlYTG9nUmVjb3ZlcnlDdGwtPlNoYXJlZFJl Y292ZXJ5RGF0YUZsYWdzICY9IH5YTFJfU1RBTkRCWV9NT0RFX1JFUVVFU1RFRDsKIAlpZiAoc3Rh bmRieV9zaWduYWxfZmlsZV9mb3VuZCkKIAl7CiAJCVN0YW5kYnlNb2RlUmVxdWVzdGVkID0gdHJ1 ZTsKIAkJQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkID0gdHJ1ZTsKKwkJWExvZ1JlY292ZXJ5Q3Rs LT5TaGFyZWRSZWNvdmVyeURhdGFGbGFncyB8PSBYTFJfU1RBTkRCWV9NT0RFX1JFUVVFU1RFRDsK IAl9CiAJZWxzZSBpZiAocmVjb3Zlcnlfc2lnbmFsX2ZpbGVfZm91bmQpCiAJewpAQCAtMjI1OSw3 ICsyMjg2LDcgQEAgQ2hlY2tSZWNvdmVyeUNvbnNpc3RlbmN5KHZvaWQpCiAJCUlzVW5kZXJQb3N0 bWFzdGVyKQogCXsKIAkJU3BpbkxvY2tBY3F1aXJlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNr KTsKLQkJWExvZ1JlY292ZXJ5Q3RsLT5TaGFyZWRIb3RTdGFuZGJ5QWN0aXZlID0gdHJ1ZTsKKwkJ WExvZ1JlY292ZXJ5Q3RsLT5TaGFyZWRSZWNvdmVyeURhdGFGbGFncyB8PSBYTFJfSE9UX1NUQU5E QllfQUNUSVZFOwogCQlTcGluTG9ja1JlbGVhc2UoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2sp OwogCiAJCUxvY2FsSG90U3RhbmRieUFjdGl2ZSA9IHRydWU7CkBAIC00NDAyLDcgKzQ0MjksOCBA QCBQcm9tb3RlSXNUcmlnZ2VyZWQodm9pZCkKIAkJcmV0dXJuIHRydWU7CiAKIAlTcGluTG9ja0Fj cXVpcmUoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOwotCUxvY2FsUHJvbW90ZUlzVHJpZ2dl cmVkID0gWExvZ1JlY292ZXJ5Q3RsLT5TaGFyZWRQcm9tb3RlSXNUcmlnZ2VyZWQ7CisJTG9jYWxQ cm9tb3RlSXNUcmlnZ2VyZWQgPQorCQkoWExvZ1JlY292ZXJ5Q3RsLT5TaGFyZWRSZWNvdmVyeURh dGFGbGFncyAmIFhMUl9QUk9NT1RFX0lTX1RSSUdHRVJFRCkgIT0gMDsKIAlTcGluTG9ja1JlbGVh c2UoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOwogCiAJcmV0dXJuIExvY2FsUHJvbW90ZUlz VHJpZ2dlcmVkOwpAQCAtNDQxMiw3ICs0NDQwLDcgQEAgc3RhdGljIHZvaWQKIFNldFByb21vdGVJ c1RyaWdnZXJlZCh2b2lkKQogewogCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1JlY292ZXJ5Q3RsLT5p bmZvX2xjayk7Ci0JWExvZ1JlY292ZXJ5Q3RsLT5TaGFyZWRQcm9tb3RlSXNUcmlnZ2VyZWQgPSB0 cnVlOworCVhMb2dSZWNvdmVyeUN0bC0+U2hhcmVkUmVjb3ZlcnlEYXRhRmxhZ3MgfD0gWExSX1BS T01PVEVfSVNfVFJJR0dFUkVEOwogCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ1JlY292ZXJ5Q3RsLT5p bmZvX2xjayk7CiAKIAkvKgpAQCAtNDUxMiw3ICs0NTQwLDggQEAgSG90U3RhbmRieUFjdGl2ZSh2 b2lkKQogCXsKIAkJLyogc3BpbmxvY2sgaXMgZXNzZW50aWFsIG9uIG1hY2hpbmVzIHdpdGggd2Vh ayBtZW1vcnkgb3JkZXJpbmchICovCiAJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1JlY292ZXJ5Q3Rs LT5pbmZvX2xjayk7Ci0JCUxvY2FsSG90U3RhbmRieUFjdGl2ZSA9IFhMb2dSZWNvdmVyeUN0bC0+ U2hhcmVkSG90U3RhbmRieUFjdGl2ZTsKKwkJTG9jYWxIb3RTdGFuZGJ5QWN0aXZlID0KKwkJCShY TG9nUmVjb3ZlcnlDdGwtPlNoYXJlZFJlY292ZXJ5RGF0YUZsYWdzICYgWExSX0hPVF9TVEFOREJZ X0FDVElWRSkgIT0gMDsKIAkJU3BpbkxvY2tSZWxlYXNlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9f bGNrKTsKIAogCQlyZXR1cm4gTG9jYWxIb3RTdGFuZGJ5QWN0aXZlOwpAQCAtNDUzMCw2ICs0NTU5 LDIyIEBAIEhvdFN0YW5kYnlBY3RpdmVJblJlcGxheSh2b2lkKQogCXJldHVybiBMb2NhbEhvdFN0 YW5kYnlBY3RpdmU7CiB9CiAKKy8qCisgKiBJdCByZXBvcnRzIHdoZXRoZXIgYSBzdGFuZGJ5LnNp Z25hbCBmaWxlIGlzIGluIHRoZSBkYXRhIGRpcmVjdG9yeQorICogYXQgc3RhcnR1cC4KKyAqCisg KiBUaGlzIHdvcmtzIGluIGFueSBwcm9jZXNzIHRoYXQncyBjb25uZWN0ZWQgdG8gc2hhcmVkIG1l bW9yeS4KKyAqLworYm9vbAorU3RhbmRieU1vZGVJc1JlcXVlc3RlZCh2b2lkKQoreworCS8qCisJ ICogU3BpbmxvY2sgaXMgbm90IG5lZWRlZCBoZXJlIGJlY2F1c2UgWExSX1NUQU5EQllfTU9ERV9S RVFVRVNURUQgZmxhZworCSAqIGNhbiBvbmx5IGJlIHJlYWQgYWZ0ZXIgc3RhcnR1cCBwcm9jZXNz IGlzIGRvbmUuCisJICovCisJcmV0dXJuIChYTG9nUmVjb3ZlcnlDdGwtPlNoYXJlZFJlY292ZXJ5 RGF0YUZsYWdzICYgWExSX1NUQU5EQllfTU9ERV9SRVFVRVNURUQpICE9IDA7Cit9CisKIC8qCiAg KiBHZXQgbGF0ZXN0IHJlZG8gYXBwbHkgcG9zaXRpb24uCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3hsb2dyZWNvdmVyeS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dyZWNv dmVyeS5oCmluZGV4IGM0MjM0NjRlOGJjLi5hZDk0ZGQ3OTYyOSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3hsb2dyZWNvdmVyeS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9n cmVjb3ZlcnkuaApAQCAtMTQ0LDYgKzE0NCw3IEBAIGV4dGVybiBUaW1lc3RhbXBUeiBHZXRMYXRl c3RYVGltZSh2b2lkKTsKIGV4dGVybiBUaW1lc3RhbXBUeiBHZXRDdXJyZW50Q2h1bmtSZXBsYXlT dGFydFRpbWUodm9pZCk7CiBleHRlcm4gWExvZ1JlY1B0ciBHZXRDdXJyZW50UmVwbGF5UmVjUHRy KFRpbWVMaW5lSUQgKnJlcGxheUVuZFRMSSk7CiAKK2V4dGVybiBib29sIFN0YW5kYnlNb2RlSXNS ZXF1ZXN0ZWQodm9pZCk7CiBleHRlcm4gYm9vbCBQcm9tb3RlSXNUcmlnZ2VyZWQodm9pZCk7CiBl eHRlcm4gYm9vbCBDaGVja1Byb21vdGVTaWduYWwodm9pZCk7CiBleHRlcm4gdm9pZCBXYWtldXBS ZWNvdmVyeSh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDEzNGUzYjIyZmQ4Li45 YmY5N2Y4MWQ2MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAor KysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC02NTE5LDYgKzY1MTksMTAg QEAKIHsgb2lkID0+ICczODEwJywgZGVzY3IgPT4gJ3RydWUgaWYgc2VydmVyIGlzIGluIHJlY292 ZXJ5JywKICAgcHJvbmFtZSA9PiAncGdfaXNfaW5fcmVjb3ZlcnknLCBwcm92b2xhdGlsZSA9PiAn dicsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLAogICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ ICdwZ19pc19pbl9yZWNvdmVyeScgfSwKK3sgb2lkID0+ICc4NDM5JywKKyAgZGVzY3IgPT4gJ0lz IFN0YW5kYnlNb2RlIHJlcXVlc3RlZCBhdCBzdGFydHVwIHdoaWxlIGJlaW5nIGluIHJlY292ZXJ5 IG1vZGUnLAorICBwcm9uYW1lID0+ICdwZ19pc19zdGFuZGJ5X3JlcXVlc3RlZCcsIHByb3ZvbGF0 aWxlID0+ICd2JywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBw cm9zcmMgPT4gJ3BnX2lzX3N0YW5kYnlfcmVxdWVzdGVkJyB9LAogCiB7IG9pZCA9PiAnMzgyMCcs IGRlc2NyID0+ICdjdXJyZW50IHdhbCBmbHVzaCBsb2NhdGlvbicsCiAgIHByb25hbWUgPT4gJ3Bn X2xhc3Rfd2FsX3JlY2VpdmVfbHNuJywgcHJvdm9sYXRpbGUgPT4gJ3YnLAotLSAKMi4zNC4xCgoK RnJvbSA5ZTJiZTMxYzM4OTg3YjU2NWZlMmI0MWI1NDcwNjU5OTExY2YyYTEwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIExpdHNhcmV2IDxtLmxpdHNhcmV2QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBUdWUsIDI3IEZlYiAyMDI0IDE0OjA4OjQyICswMzAwClN1YmplY3Q6IFtQ QVRDSCAyLzJdIFRlc3QgcGdfaXNfc3RhbmRieV9yZXF1ZXN0ZWQoKSBpbiBkaWZmZXJlbnQgdXNl LWNhc2VzLgoKQWRkIHRpbnkgdGVzdHMgaW4gc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMDRfdGltZWxp bmVfc3dpdGNoLnBsClRoZXkgdmFsaWRhdGU6CiAtIG1hc3RlciBpcyBub3QgYSByZXBsaWNhCiAt IHN0YW5kYnlfMSBpcyBhIHJlcGxpY2EKIC0gcHJvbW90ZWQgcmVwbGljYSBpbiBtYXN0ZXIgbW9k ZQogLSBzdGFuZGJ5XzIgcmVtYWlucyBhIHJlcGxpY2EgYWZ0ZXIgc3dpdGNoIHRvIHByb21vdGVk IG1hc3RlcgotLS0KIHNyYy90ZXN0L3JlY292ZXJ5L3QvMDA0X3RpbWVsaW5lX3N3aXRjaC5wbCB8 IDIzICsrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAyMyBpbnNlcnRpb25z KCspCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMDRfdGltZWxpbmVfc3dpdGNo LnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMDRfdGltZWxpbmVfc3dpdGNoLnBsCmluZGV4IDY4 NDgzOGNiYWI3Li4xMGE2ZmE4YjkwNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8w MDRfdGltZWxpbmVfc3dpdGNoLnBsCisrKyBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDA0X3RpbWVs aW5lX3N3aXRjaC5wbApAQCAtMTYsNiArMTYsMTEgQEAgbXkgJG5vZGVfcHJpbWFyeSA9IFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHJpbWFyeScpOwogJG5vZGVfcHJpbWFyeS0+aW5p dChhbGxvd3Nfc3RyZWFtaW5nID0+IDEpOwogJG5vZGVfcHJpbWFyeS0+c3RhcnQ7CiAKKyMgVmFs aWRhdGUgcGdfaXNfc3RhbmRieV9yZXF1ZXN0ZWQoKSBmb3IgbWFzdGVyCitteSAkcmV0X21vZGVf cHJpbWFyeSA9ICRub2RlX3ByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSdTRUxFQ1Qg cGdfaXNfc3RhbmRieV9yZXF1ZXN0ZWQoKScpOworaXMoJHJldF9tb2RlX3ByaW1hcnksICdmJywg Im1hc3RlciBpcyBub3QgYSByZXBsaWNhIik7CisKICMgVGFrZSBiYWNrdXAKIG15ICRiYWNrdXBf bmFtZSA9ICdteV9iYWNrdXAnOwogJG5vZGVfcHJpbWFyeS0+YmFja3VwKCRiYWNrdXBfbmFtZSk7 CkBAIC0zMCw2ICszNSwxMSBAQCAkbm9kZV9zdGFuZGJ5XzItPmluaXRfZnJvbV9iYWNrdXAoJG5v ZGVfcHJpbWFyeSwgJGJhY2t1cF9uYW1lLAogCWhhc19zdHJlYW1pbmcgPT4gMSk7CiAkbm9kZV9z dGFuZGJ5XzItPnN0YXJ0OwogCisjIFZhbGlkYXRlIHBnX2lzX3N0YW5kYnlfcmVxdWVzdGVkKCkg Zm9yIHJlcGxpY2Egbm9kZQorbXkgJHJldF9tb2RlX3N0YW5kYnlfMSA9ICRub2RlX3N0YW5kYnlf MS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJJ1NFTEVDVCBwZ19pc19zdGFuZGJ5X3JlcXVlc3Rl ZCgpJyk7CitpcygkcmV0X21vZGVfc3RhbmRieV8xLCAndCcsICJub2RlX3N0YW5kYnlfMSBpcyBh IHJlcGxpY2EiKTsKKwogIyBDcmVhdGUgc29tZSBjb250ZW50IG9uIHByaW1hcnkKICRub2RlX3By aW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgVEFCTEUgdGFiX2ludCBBUyBT RUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgQVMgYSIpOwpAQCAtNDgsNiArNTgsMTQgQEAg JG5vZGVfc3RhbmRieV8xLT5wc3FsKAogCXN0ZG91dCA9PiBcJHBzcWxfb3V0KTsKIGlzKCRwc3Fs X291dCwgJ3QnLCAicHJvbW90aW9uIG9mIHN0YW5kYnkgd2l0aCBwZ19wcm9tb3RlIik7CiAKKyMg VmFsaWRhdGUgcGdfaXNfc3RhbmRieV9yZXF1ZXN0ZWQoKSBmb3IgbWFzdGVyIHByb21vdGVkIGZy b20gc3RhbmRieSBub2RlLgorIyBwZ19pc19zdGFuZGJ5X3JlcXVlc3RlZCgpIHJldHVybnMgdHJ1 ZSBiZWNhdXNlIHN0YW5kYnkuc2lnbmFsIGZpbGUKKyMgd2FzIGZvdW5kIHdoaWxlIGJlaW5nIGEg cmVwbGljYS4KKyMgVXNlIGl0IHdpdGggcGdfaXNfaW5fcmVjb3ZlcnkoKSAocmV0dXJucyBmYWxz ZSksIGZvciBzdWNoIHVzZS1jYXNlcy4KK215ICRyZXRfbW9kZV8xID0gJG5vZGVfc3RhbmRieV8x LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwknU0VMRUNUIHBnX2lzX3N0YW5kYnlfcmVxdWVzdGVk KCknKTsKK2lzKCRyZXRfbW9kZV8xLCAndCcsICJub2RlX3N0YW5kYnlfMSBiZWNvbWVzIGEgbWFz dGVyIik7CisKICMgU3dpdGNoIHN0YW5kYnkgMiB0byByZXBsYXkgZnJvbSBzdGFuZGJ5IDEKIG15 ICRjb25uc3RyXzEgPSAkbm9kZV9zdGFuZGJ5XzEtPmNvbm5zdHI7CiAkbm9kZV9zdGFuZGJ5XzIt PmFwcGVuZF9jb25mKApAQCAtNTYsNiArNzQsMTEgQEAgcHJpbWFyeV9jb25uaW5mbz0nJGNvbm5z dHJfMScKICkpOwogJG5vZGVfc3RhbmRieV8yLT5yZXN0YXJ0OwogCisjIFZhbGlkYXRlIHBnX2lz X3N0YW5kYnlfcmVxdWVzdGVkKCkgZm9yIHNlY29uZCByZXBsaWNhIGFmdGVyIHJlc3RhcnQKK215 ICRyZXRfbW9kZV9zdGFuZGJ5XzIgPSAkbm9kZV9zdGFuZGJ5XzItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSdTRUxFQ1QgcGdfaXNfc3RhbmRieV9yZXF1ZXN0ZWQoKScpOworaXMoJHJldF9tb2Rl X3N0YW5kYnlfMiwgJ3QnLCAibm9kZV9zdGFuZGJ5XzIgcmVtYWlucyBhIHJlcGxpY2EiKTsKKwog IyBJbnNlcnQgc29tZSBkYXRhIGluIHN0YW5kYnkgMSBhbmQgY2hlY2sgaXRzIHByZXNlbmNlIGlu IHN0YW5kYnkgMgogIyB0byBlbnN1cmUgdGhhdCB0aGUgdGltZWxpbmUgc3dpdGNoIGhhcyBiZWVu IGRvbmUuCiAkbm9kZV9zdGFuZGJ5XzEtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotLSAKMi4zNC4x Cgo= --=_9df5102222c99decd000671c8e7ced9a--