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 1t5S25-006AYU-S0 for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Oct 2024 15:51: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 1t5S23-007qMO-Eo for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Oct 2024 15:51:51 +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 1t5S22-007qMG-S6 for pgsql-hackers@lists.postgresql.org; Mon, 28 Oct 2024 15:51:51 +0000 Received: from fout-a5-smtp.messagingengine.com ([103.168.172.148]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1t5S20-003IHj-1l for pgsql-hackers@postgresql.org; Mon, 28 Oct 2024 15:51:50 +0000 Received: from phl-compute-01.internal (phl-compute-01.phl.internal [10.202.2.41]) by mailfout.phl.internal (Postfix) with ESMTP id D8A4E13801A3 for ; Mon, 28 Oct 2024 11:51:46 -0400 (EDT) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-01.internal (MEProxy); Mon, 28 Oct 2024 11:51:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eisentraut.org; h=cc:content-type:content-type:date:date:from:from:in-reply-to :message-id:mime-version:reply-to:subject:subject:to:to; s=fm2; t=1730130706; x=1730217106; bh=+asJgeAX0NPvgnRVCxNe7Sdm28tbiNHo 0PDZ7KhFQZg=; b=di1VMjSKUnL00V474vq9CEE2hCsD9kLRXyrJexPzITJJtdUy t3Wt8dZXZsLzFRuFrZLfyo5zR1h4eEcL80lgaRO9qN0/M4WXF+y3KvmL5GpfkpXn HkYoNsYN5wOd0api76EOrS58COrMO7h1lq712q5wpQ9Z0L7X1EY92fDN98SX0sxp o80ra03asayFaAEb+Ymv+3z6I1mNhYUX3m/BiEuKPi6JvgsOqYln/JY0n5ySytzc lvegc94V9ew4NCkwAB7Ss6NrgId/YB4bLmj1O8qUV9t1HfTobWlTV5CIj6XQgK7w QwJMWoFuDRtdc1sfc3ni1mRhkUpcedEb3FoCLA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:message-id :mime-version:reply-to:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1730130706; x=1730217106; bh=+asJgeAX0NPvgnRVCxNe7Sdm28tbiNHo0PD Z7KhFQZg=; b=AhjKEDq7azEvhcdMxWJv3egCPI+4N2+i38SJ8IpMQDFLv+l1TKZ SOfiHIEfsDyuRyftQW6S44C47jXpQGFQGcpyxb6NTL9iIbzUF1Wr1bpo3sAIC+jJ 7QMqJkjiqiX0xG7Waab5Y428xSsganG4Nw8FztzX3v6ad3qGMXvM4L/2hbkIlnm3 la5H9lnoZUaUy/LotPujRJKC5UAKDf1NG/Uz0VEoevGHfKiUGldoSjX0Vwj/URHr PCSDsDWRkcXt8o7MCGPrfPCjOBvGghnvLDl+kwuvWgBr2ykAEmlH6ulYvBpdP0Lm dGrTpHDf9YVsOKLVXm7347B3CU0PbHAKZ3g== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddrvdejledgheegucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucenucfjughrpegtkfffgg gfhffuvfesmhdtreertddvjeenucfhrhhomheprfgvthgvrhcugfhishgvnhhtrhgruhht uceophgvthgvrhesvghishgvnhhtrhgruhhtrdhorhhgqeenucggtffrrghtthgvrhhnpe ehteekudegtdehtedttefhudekjefgudeiheeiteffuedtteffkeekgfelvdffleenucev lhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehpvghtvghrse gvihhsvghnthhrrghuthdrohhrghdpnhgspghrtghpthhtohepuddpmhhouggvpehsmhht phhouhhtpdhrtghpthhtohepphhgshhqlhdqhhgrtghkvghrshesphhoshhtghhrvghsqh hlrdhorhhg X-ME-Proxy: Feedback-ID: ie0a040ee:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Mon, 28 Oct 2024 11:51:46 -0400 (EDT) Content-Type: multipart/mixed; boundary="------------hL2E0DP81RUGzJ6IAIWmk4cr" Message-ID: <8e6ba982-fd41-4779-8729-eb120df69ea0@eisentraut.org> Date: Mon, 28 Oct 2024 16:51:44 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US From: Peter Eisentraut Subject: protocol-level wait-for-LSN To: pgsql-hackers 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. --------------hL2E0DP81RUGzJ6IAIWmk4cr Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit This is something I hacked together on the way back from pgconf.eu. It's highly experimental. The idea is to do the equivalent of pg_wal_replay_wait() on the protocol level, so that it is ideally fully transparent to the application code. The application just issues queries, and they might be serviced by a primary or a standby, but there is always a correct ordering of reads after writes. Additionally, I'm exploring whether this is an idea for a protocol extension that might be a bit more complex than, say, longer cancel keys, something we could have a discussion around protocol versioning around. The patch adds a protocol extension called _pq_.wait_for_lsn as well as a libpq connection option wait_for_lsn to activate the same. (Use e.g., psql -d 'wait_for_lsn=1'.) With this protocol extension, two things are changed: - The ReadyForQuery message sends back the current LSN. - The Query message sends an LSN to wait for. (This doesn't handle the extended query protocol yet.) To make any real use of this, you'd need some middleware, like a hacked pgbouncer, that transparently redirects queries among primaries and standbys, which doesn't exist yet. But if it did, I imagine it could be pretty useful. There might be other ways to slice this. Instead of using a hypothetical middleware, the application would use two connections, one for writing, one for reading, and the LSN would be communicated between the two. I imagine in this case, at least the one half of the protocol, shipping the current LSN with ReadyForQuery, could be useful, instead of requiring application code to issue pg_current_wal_insert_lsn() explicitly. Thoughts? --------------hL2E0DP81RUGzJ6IAIWmk4cr Content-Type: text/plain; charset=UTF-8; name="v0-0001-wait_for_lsn-protocol-option.patch" Content-Disposition: attachment; filename="v0-0001-wait_for_lsn-protocol-option.patch" Content-Transfer-Encoding: base64 RnJvbSA0NGI2MzU0NDI5ODQ3ZTNiM2FlYWMyMWVlNTcxMjg3OWI5N2Q3ODc3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogU2F0LCAyNiBPY3QgMjAyNCAwMToxMTo1NyArMDIwMApTdWJqZWN0 OiBbUEFUQ0ggdjBdIHdhaXRfZm9yX2xzbiBwcm90b2NvbCBvcHRpb24KCi0tLQogc3JjL2Jh Y2tlbmQvdGNvcC9iYWNrZW5kX3N0YXJ0dXAuYyAgfCAxNSArKysrKysrKysrKysrLS0KIHNy Yy9iYWNrZW5kL3Rjb3AvZGVzdC5jICAgICAgICAgICAgIHwgMTIgKysrKysrKysrKysrCiBz cmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgICAgICAgICB8IDIzICsrKysrKysrKysrKysr KysrKysrKysrCiBzcmMvaW5jbHVkZS9saWJwcS9saWJwcS1iZS5oICAgICAgICB8ICAxICsK IHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYyAgIHwgMjYgKysrKysrKysrKysr KysrKysrKysrKysrKysKIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWV4ZWMuYyAgICAgIHwg IDEgKwogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtcHJvdG9jb2wzLmMgfCAyMCArKysrKysr KysrKysrKysrKysrKwogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtdHJhY2UuYyAgICAgfCAg MiArKwogc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmggICAgfCAgMyArKysKIDkg ZmlsZXMgY2hhbmdlZCwgMTAxIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9iYWNrZW5kX3N0YXJ0dXAuYyBiL3NyYy9iYWNr ZW5kL3Rjb3AvYmFja2VuZF9zdGFydHVwLmMKaW5kZXggMmE5NmM4MWY5MjUuLmJkM2I5MWQw MWViIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL2JhY2tlbmRfc3RhcnR1cC5jCisr KyBiL3NyYy9iYWNrZW5kL3Rjb3AvYmFja2VuZF9zdGFydHVwLmMKQEAgLTc2OCwxMiArNzY4 LDIzIEBAIFByb2Nlc3NTdGFydHVwUGFja2V0KFBvcnQgKnBvcnQsIGJvb2wgc3NsX2RvbmUs IGJvb2wgZ3NzX2RvbmUpCiAJCQkJCQkJCQl2YWxwdHIpLAogCQkJCQkJCSBlcnJoaW50KCJW YWxpZCB2YWx1ZXMgYXJlOiBcImZhbHNlXCIsIDAsIFwidHJ1ZVwiLCAxLCBcImRhdGFiYXNl XCIuIikpKTsKIAkJCX0KKwkJCWVsc2UgaWYgKHN0cmNtcChuYW1lcHRyLCAiX3BxXy53YWl0 X2Zvcl9sc24iKSA9PSAwKQorCQkJeworCQkJCWlmIChzdHJjbXAodmFscHRyLCAiMSIpID09 IDApCisJCQkJCXBvcnQtPndhaXRfZm9yX2xzbl9lbmFibGVkID0gdHJ1ZTsKKwkJCQllbHNl CisJCQkJCWVyZXBvcnQoRkFUQUwsCisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkJIGVycm1zZygiaW52YWxpZCB2YWx1ZSBmb3Ig cGFyYW1ldGVyIFwiJXNcIjogXCIlc1wiIiwKKwkJCQkJCQkJCSJ3YWl0X2Zvcl9sc24iLAor CQkJCQkJCQkJdmFscHRyKSwKKwkJCQkJCQkgZXJyaGludCgiVmFsaWQgdmFsdWVzIGFyZTog MS4iKSkpOworCQkJfQogCQkJZWxzZSBpZiAoc3RybmNtcChuYW1lcHRyLCAiX3BxXy4iLCA1 KSA9PSAwKQogCQkJewogCQkJCS8qCiAJCQkJICogQW55IG9wdGlvbiBiZWdpbm5pbmcgd2l0 aCBfcHFfLiBpcyByZXNlcnZlZCBmb3IgdXNlIGFzIGEKLQkJCQkgKiBwcm90b2NvbC1sZXZl bCBvcHRpb24sIGJ1dCBhdCBwcmVzZW50IG5vIHN1Y2ggb3B0aW9ucyBhcmUKLQkJCQkgKiBk ZWZpbmVkLgorCQkJCSAqIHByb3RvY29sLWxldmVsIG9wdGlvbi4KIAkJCQkgKi8KIAkJCQl1 bnJlY29nbml6ZWRfcHJvdG9jb2xfb3B0aW9ucyA9CiAJCQkJCWxhcHBlbmQodW5yZWNvZ25p emVkX3Byb3RvY29sX29wdGlvbnMsIHBzdHJkdXAobmFtZXB0cikpOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdGNvcC9kZXN0LmMgYi9zcmMvYmFja2VuZC90Y29wL2Rlc3QuYwppbmRl eCA5NmY4MGIzMDQ2My4uYmI5OTEwYjEyZDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rj b3AvZGVzdC5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvZGVzdC5jCkBAIC0zMSw2ICszMSw4 IEBACiAjaW5jbHVkZSAiYWNjZXNzL3ByaW50c2ltcGxlLmgiCiAjaW5jbHVkZSAiYWNjZXNz L3ByaW50dHVwLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJhY2Nl c3MveGxvZy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9nX2ludGVybmFsLmgiCiAjaW5jbHVk ZSAiY29tbWFuZHMvY29weS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2NyZWF0ZWFzLmgiCiAj aW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbi5oIgpAQCAtNDAsNiArNDIsNyBAQAogI2luY2x1 ZGUgImV4ZWN1dG9yL3RzdG9yZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAibGlicHEvbGlicHEu aCIKICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTI2NSw2ICsyNjgsMTUgQEAgUmVhZHlG b3JRdWVyeShDb21tYW5kRGVzdCBkZXN0KQogCiAJCQkJcHFfYmVnaW5tZXNzYWdlKCZidWYs IFBxTXNnX1JlYWR5Rm9yUXVlcnkpOwogCQkJCXBxX3NlbmRieXRlKCZidWYsIFRyYW5zYWN0 aW9uQmxvY2tTdGF0dXNDb2RlKCkpOworCQkJCWlmIChNeVByb2NQb3J0LT53YWl0X2Zvcl9s c25fZW5hYmxlZCkKKwkJCQl7CisJCQkJCWNoYXIJCXhsb2NbTUFYRk5BTUVMRU5dOworCQkJ CQlYTG9nUmVjUHRyCWxvZ3B0cjsKKworCQkJCQlsb2dwdHIgPSBHZXRYTG9nV3JpdGVSZWNQ dHIoKTsKKwkJCQkJc25wcmludGYoeGxvYywgc2l6ZW9mKHhsb2MpLCAiJVgvJVgiLCBMU05f Rk9STUFUX0FSR1MobG9ncHRyKSk7CisJCQkJCXBxX3NlbmRzdHJpbmcoJmJ1ZiwgeGxvYyk7 CisJCQkJfQogCQkJCXBxX2VuZG1lc3NhZ2UoJmJ1Zik7CiAJCQl9CiAJCQkvKiBGbHVzaCBv dXRwdXQgYXQgZW5kIG9mIGN5Y2xlIGluIGFueSBjYXNlLiAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5j CmluZGV4IDdmNWVhZGE5ZDQ1Li5hZWU2ZmVjMWZjNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdGNvcC9wb3N0Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpA QCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL2FzeW5jLmgiCiAjaW5jbHVk ZSAiY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ByZXBh cmUuaCIKKyNpbmNsdWRlICJjb21tYW5kcy93YWl0bHNuLmgiCiAjaW5jbHVkZSAiY29tbW9u L3BnX3BybmcuaCIKICNpbmNsdWRlICJqaXQvaml0LmgiCiAjaW5jbHVkZSAibGlicHEvbGli cHEuaCIKQEAgLTc1LDYgKzc2LDcgQEAKICNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9p bnQuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9t ZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3BnX2xzbi5oIgogI2luY2x1ZGUgInV0aWxz L3BzX3N0YXR1cy5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNsdWRlICJ1 dGlscy90aW1lb3V0LmgiCkBAIC00NzgyLDYgKzQ3ODQsMjcgQEAgUG9zdGdyZXNNYWluKGNv bnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJCQkJCVNldEN1cnJl bnRTdGF0ZW1lbnRTdGFydFRpbWVzdGFtcCgpOwogCiAJCQkJCXF1ZXJ5X3N0cmluZyA9IHBx X2dldG1zZ3N0cmluZygmaW5wdXRfbWVzc2FnZSk7CisJCQkJCWlmIChNeVByb2NQb3J0ICYm IE15UHJvY1BvcnQtPndhaXRfZm9yX2xzbl9lbmFibGVkKQorCQkJCQl7CisJCQkJCQljb25z dCBjaGFyICp3YWl0X2Zvcl9sc24gPSBwcV9nZXRtc2dzdHJpbmcoJmlucHV0X21lc3NhZ2Up OworCQkJCQkJWExvZ1JlY1B0cglsc247CisJCQkJCQlib29sCQllcnJvcjsKKworCQkJCQkJ bHNuID0gcGdfbHNuX2luX2ludGVybmFsKHdhaXRfZm9yX2xzbiwgJmVycm9yKTsKKwkJCQkJ CWlmIChlcnJvcikKKwkJCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAorCQkJCQkJCQkJIGVycm1zZygiaW52YWxp ZCBMU04gJXMiLCB3YWl0X2Zvcl9sc24pKSk7CisJCQkJCQlpZiAoUmVjb3ZlcnlJblByb2dy ZXNzKCkpCisJCQkJCQkJV2FpdEZvckxTTlJlcGxheShsc24sIDApOworCQkJCQkJZWxzZQor CQkJCQkJeworCQkJCQkJCWlmIChHZXRYTG9nV3JpdGVSZWNQdHIoKSAhPSBsc24pCisJCQkJ CQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NP TF9WSU9MQVRJT04pLAorCQkJCQkJCQkJCSBlcnJtc2coIkxTTiBtaXNtYXRjaCIpKSk7CisJ CQkJCQl9CisJCQkJCX0KIAkJCQkJcHFfZ2V0bXNnZW5kKCZpbnB1dF9tZXNzYWdlKTsKIAog CQkJCQlpZiAoYW1fd2Fsc2VuZGVyKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEv bGlicHEtYmUuaCBiL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmgKaW5kZXggMDVjYjE4 NzRjNTguLjBmMjNhOTY5MjMxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9saWJwcS9saWJw cS1iZS5oCisrKyBiL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmgKQEAgLTE1MCw2ICsx NTAsNyBAQCB0eXBlZGVmIHN0cnVjdCBQb3J0CiAJICovCiAJY2hhcgkgICAqZGF0YWJhc2Vf bmFtZTsKIAljaGFyCSAgICp1c2VyX25hbWU7CisJYm9vbAkJd2FpdF9mb3JfbHNuX2VuYWJs ZWQ7CiAJY2hhcgkgICAqY21kbGluZV9vcHRpb25zOwogCUxpc3QJICAgKmd1Y19vcHRpb25z OwogCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMgYi9z cmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMKaW5kZXggNjQ3ODdiZWE1MTEuLmFh NTZjYTQyYjJjIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0 LmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jCkBAIC0zNjAsNiAr MzYwLDEwIEBAIHN0YXRpYyBjb25zdCBpbnRlcm5hbFBRY29ubmluZm9PcHRpb24gUFFjb25u aW5mb09wdGlvbnNbXSA9IHsKIAkJIlRhcmdldC1TZXNzaW9uLUF0dHJzIiwgIiIsIDE1LCAv KiBzaXplb2YoInByZWZlci1zdGFuZGJ5IikgPSAxNSAqLwogCW9mZnNldG9mKHN0cnVjdCBw Z19jb25uLCB0YXJnZXRfc2Vzc2lvbl9hdHRycyl9LAogCisJeyJ3YWl0X2Zvcl9sc24iLCAi UEdXQUlURk9STFNOIiwgIjAiLCBOVUxMLAorCQkiV2FpdC1Gb3ItTFNOIiwgIiIsIDEsCisJ b2Zmc2V0b2Yoc3RydWN0IHBnX2Nvbm4sIHdhaXRfZm9yX2xzbl9zZXR0aW5nKX0sCisKIAl7 ImxvYWRfYmFsYW5jZV9ob3N0cyIsICJQR0xPQURCQUxBTkNFSE9TVFMiLAogCQlEZWZhdWx0 TG9hZEJhbGFuY2VIb3N0cywgTlVMTCwKIAkJIkxvYWQtQmFsYW5jZS1Ib3N0cyIsICIiLCA4 LAkvKiBzaXplb2YoImRpc2FibGUiKSA9IDggKi8KQEAgLTE4NDcsNiArMTg1MSwyOCBAQCBw cUNvbm5lY3RPcHRpb25zMihQR2Nvbm4gKmNvbm4pCiAJCQlnb3RvIG9vbV9lcnJvcjsKIAl9 CiAKKwkvKgorCSAqIHZhbGlkYXRlIHdhaXRfZm9yX2xzbiBvcHRpb24KKwkgKi8KKwlpZiAo Y29ubi0+d2FpdF9mb3JfbHNuX3NldHRpbmcpCisJeworCQlpZiAoc3RyY21wKGNvbm4tPndh aXRfZm9yX2xzbl9zZXR0aW5nLCAib24iKSA9PSAwIHx8CisJCQlzdHJjbXAoY29ubi0+d2Fp dF9mb3JfbHNuX3NldHRpbmcsICJ0cnVlIikgPT0gMCB8fAorCQkJc3RyY21wKGNvbm4tPndh aXRfZm9yX2xzbl9zZXR0aW5nLCAiMSIpID09IDApCisJCQljb25uLT53YWl0X2Zvcl9sc25f ZW5hYmxlZCA9IHRydWU7CisJCWVsc2UgaWYgKHN0cmNtcChjb25uLT53YWl0X2Zvcl9sc25f c2V0dGluZywgIm9mZiIpID09IDAgfHwKKwkJCQkgc3RyY21wKGNvbm4tPndhaXRfZm9yX2xz bl9zZXR0aW5nLCAiZmFsc2UiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChjb25uLT53YWl0X2Zv cl9sc25fc2V0dGluZywgIjAiKSA9PSAwKQorCQkJY29ubi0+d2FpdF9mb3JfbHNuX2VuYWJs ZWQgPSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQljb25uLT5zdGF0dXMgPSBDT05ORUNUSU9O X0JBRDsKKwkJCWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNvbm4sICJpbnZhbGlkICVzIHZh bHVlOiBcIiVzXCIiLAorCQkJCQkJCQkJIndhaXRfZm9yX2xzbiIsIGNvbm4tPndhaXRfZm9y X2xzbl9zZXR0aW5nKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKwogCS8qCiAJICog T25seSBpZiB3ZSBnZXQgdGhpcyBmYXIgaXMgaXQgYXBwcm9wcmlhdGUgdG8gdHJ5IHRvIGNv bm5lY3QuIChXZSBuZWVkIGEKIAkgKiBzdGF0ZSBmbGFnLCByYXRoZXIgdGhhbiBqdXN0IHRo ZSBib29sZWFuIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uLCBpbgpkaWZmIC0tZ2l0IGEvc3Jj L2ludGVyZmFjZXMvbGlicHEvZmUtZXhlYy5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUt ZXhlYy5jCmluZGV4IDBkMjI0YTg1MjRlLi44ZDJkMTgzNDc2YiAxMDA2NDQKLS0tIGEvc3Jj L2ludGVyZmFjZXMvbGlicHEvZmUtZXhlYy5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBx L2ZlLWV4ZWMuYwpAQCAtMTQ1NCw2ICsxNDU0LDcgQEAgUFFzZW5kUXVlcnlJbnRlcm5hbChQ R2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5LCBib29sIG5ld1F1ZXJ5KQogCS8qIGNv bnN0cnVjdCB0aGUgb3V0Z29pbmcgUXVlcnkgbWVzc2FnZSAqLwogCWlmIChwcVB1dE1zZ1N0 YXJ0KFBxTXNnX1F1ZXJ5LCBjb25uKSA8IDAgfHwKIAkJcHFQdXRzKHF1ZXJ5LCBjb25uKSA8 IDAgfHwKKwkJKGNvbm4tPndhaXRfZm9yX2xzbl9lbmFibGVkICYmIHBxUHV0cyhjb25uLT5s YXN0X2xzbiwgY29ubikpIHx8CiAJCXBxUHV0TXNnRW5kKGNvbm4pIDwgMCkKIAl7CiAJCS8q IGVycm9yIG1lc3NhZ2Ugc2hvdWxkIGJlIHNldCB1cCBhbHJlYWR5ICovCmRpZmYgLS1naXQg YS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1wcm90b2NvbDMuYyBiL3NyYy9pbnRlcmZhY2Vz L2xpYnBxL2ZlLXByb3RvY29sMy5jCmluZGV4IDhjNWFjMTcyOWYwLi42ODljODY5Y2U1NiAx MDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtcHJvdG9jb2wzLmMKKysrIGIv c3JjL2ludGVyZmFjZXMvbGlicHEvZmUtcHJvdG9jb2wzLmMKQEAgLTE2MjUsNiArMTYyNSwy MyBAQCBnZXRSZWFkeUZvclF1ZXJ5KFBHY29ubiAqY29ubikKIAkJCWJyZWFrOwogCX0KIAor CWlmIChjb25uLT53YWl0X2Zvcl9sc25fZW5hYmxlZCkKKwl7CisJCVBRRXhwQnVmZmVyRGF0 YSBidWY7CisKKwkJaW5pdFBRRXhwQnVmZmVyKCZidWYpOworCQlpZiAocHFHZXRzKCZidWYs IGNvbm4pKQorCQl7CisJCQl0ZXJtUFFFeHBCdWZmZXIoJmJ1Zik7CisJCQlyZXR1cm4gRU9G OworCQl9CisJCWVsc2UKKwkJeworCQkJc3RybGNweShjb25uLT5sYXN0X2xzbiwgYnVmLmRh dGEsIHNpemVvZiBjb25uLT5sYXN0X2xzbik7CisJCQl0ZXJtUFFFeHBCdWZmZXIoJmJ1Zik7 CisJCX0KKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI5OCw2ICsyMzE1LDkgQEAgYnVp bGRfc3RhcnR1cF9wYWNrZXQoY29uc3QgUEdjb25uICpjb25uLCBjaGFyICpwYWNrZXQsCiAJ aWYgKGNvbm4tPmNsaWVudF9lbmNvZGluZ19pbml0aWFsICYmIGNvbm4tPmNsaWVudF9lbmNv ZGluZ19pbml0aWFsWzBdKQogCQlBRERfU1RBUlRVUF9PUFRJT04oImNsaWVudF9lbmNvZGlu ZyIsIGNvbm4tPmNsaWVudF9lbmNvZGluZ19pbml0aWFsKTsKIAorCWlmIChjb25uLT53YWl0 X2Zvcl9sc25fZW5hYmxlZCkKKwkJQUREX1NUQVJUVVBfT1BUSU9OKCJfcHFfLndhaXRfZm9y X2xzbiIsICIxIik7CisKIAkvKiBBZGQgYW55IGVudmlyb25tZW50LWRyaXZlbiBHVUMgc2V0 dGluZ3MgbmVlZGVkICovCiAJZm9yIChuZXh0X2VvID0gb3B0aW9uczsgbmV4dF9lby0+ZW52 TmFtZTsgbmV4dF9lbysrKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBx L2ZlLXRyYWNlLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS10cmFjZS5jCmluZGV4IDE5 YzViOGE4OTAwLi4zMDIxN2I2ODdhZiAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGli cHEvZmUtdHJhY2UuYworKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS10cmFjZS5jCkBA IC00NzgsNiArNDc4LDcgQEAgcHFUcmFjZU91dHB1dF9RdWVyeShGSUxFICpmLCBjb25zdCBj aGFyICptZXNzYWdlLCBpbnQgKmN1cnNvcikKIHsKIAlmcHJpbnRmKGYsICJRdWVyeVx0Iik7 CiAJcHFUcmFjZU91dHB1dFN0cmluZyhmLCBtZXNzYWdlLCBjdXJzb3IsIGZhbHNlKTsKKwkv KiBGSVhNRSAqLwogfQogCiBzdGF0aWMgdm9pZApAQCAtNjA5LDYgKzYxMCw3IEBAIHBxVHJh Y2VPdXRwdXRfUmVhZHlGb3JRdWVyeShGSUxFICpmLCBjb25zdCBjaGFyICptZXNzYWdlLCBp bnQgKmN1cnNvcikKIHsKIAlmcHJpbnRmKGYsICJSZWFkeUZvclF1ZXJ5XHQiKTsKIAlwcVRy YWNlT3V0cHV0Qnl0ZTEoZiwgbWVzc2FnZSwgY3Vyc29yKTsKKwkvKiBGSVhNRSAqLwogfQog CiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmggYi9z cmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaAppbmRleCA5NTc5ZjgwMzUzOC4uNzFi OWFkMjRkNTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5o CisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oCkBAIC00MjYsNiArNDI2 LDcgQEAgc3RydWN0IHBnX2Nvbm4KIAljaGFyCSAgICpzc2xfbWF4X3Byb3RvY29sX3ZlcnNp b247CS8qIG1heGltdW0gVExTIHByb3RvY29sIHZlcnNpb24gKi8KIAljaGFyCSAgICp0YXJn ZXRfc2Vzc2lvbl9hdHRyczsJLyogZGVzaXJlZCBzZXNzaW9uIHByb3BlcnRpZXMgKi8KIAlj aGFyCSAgICpyZXF1aXJlX2F1dGg7CS8qIG5hbWUgb2YgdGhlIGV4cGVjdGVkIGF1dGggbWV0 aG9kICovCisJY2hhcgkgICAqd2FpdF9mb3JfbHNuX3NldHRpbmc7CiAJY2hhcgkgICAqbG9h ZF9iYWxhbmNlX2hvc3RzOyAvKiBsb2FkIGJhbGFuY2Ugb3ZlciBob3N0cyAqLwogCiAJYm9v bAkJY2FuY2VsUmVxdWVzdDsJLyogdHJ1ZSBpZiB0aGlzIGNvbm5lY3Rpb24gaXMgdXNlZCB0 byBzZW5kIGEKQEAgLTQ0OCw2ICs0NDksNyBAQCBzdHJ1Y3QgcGdfY29ubgogCUNvbm5TdGF0 dXNUeXBlIHN0YXR1czsKIAlQR0FzeW5jU3RhdHVzVHlwZSBhc3luY1N0YXR1czsKIAlQR1Ry YW5zYWN0aW9uU3RhdHVzVHlwZSB4YWN0U3RhdHVzOyAvKiBuZXZlciBjaGFuZ2VzIHRvIEFD VElWRSAqLworCWNoYXIJCWxhc3RfbHNuWzEyOF07CiAJY2hhcgkJbGFzdF9zcWxzdGF0ZVs2 XTsJLyogbGFzdCByZXBvcnRlZCBTUUxTVEFURSAqLwogCWJvb2wJCW9wdGlvbnNfdmFsaWQ7 CS8qIHRydWUgaWYgT0sgdG8gYXR0ZW1wdCBjb25uZWN0aW9uICovCiAJYm9vbAkJbm9uYmxv Y2tpbmc7CS8qIHdoZXRoZXIgdGhpcyBjb25uZWN0aW9uIGlzIHVzaW5nIG5vbmJsb2NrCkBA IC01MjksNiArNTMxLDcgQEAgc3RydWN0IHBnX2Nvbm4KIAlQR1ZlcmJvc2l0eSB2ZXJib3Np dHk7CQkvKiBlcnJvci9ub3RpY2UgbWVzc2FnZSB2ZXJib3NpdHkgKi8KIAlQR0NvbnRleHRW aXNpYmlsaXR5IHNob3dfY29udGV4dDsJLyogd2hldGhlciB0byBzaG93IENPTlRFWFQgZmll bGQgKi8KIAlQR2xvYmpmdW5jcyAqbG9iamZ1bmNzOwkJLyogcHJpdmF0ZSBzdGF0ZSBmb3Ig bGFyZ2Utb2JqZWN0IGFjY2VzcyBmbnMgKi8KKwlib29sCQl3YWl0X2Zvcl9sc25fZW5hYmxl ZDsKIAlwZ19wcm5nX3N0YXRlIHBybmdfc3RhdGU7CS8qIHBybmcgc3RhdGUgZm9yIGxvYWQg YmFsYW5jaW5nIGNvbm5lY3Rpb25zICovCiAKIAotLSAKMi40Ny4wCgo= --------------hL2E0DP81RUGzJ6IAIWmk4cr--