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 1rshmV-008iot-Lb for pgsql-hackers@arkaria.postgresql.org; Fri, 05 Apr 2024 11:30:52 +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 1rshlV-00Dk4t-TU for pgsql-hackers@arkaria.postgresql.org; Fri, 05 Apr 2024 11:29:49 +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 1rshlV-00Dk4l-Gn for pgsql-hackers@lists.postgresql.org; Fri, 05 Apr 2024 11:29:49 +0000 Received: from mail-yw1-x112a.google.com ([2607:f8b0:4864:20::112a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rshlO-000mG4-3z for pgsql-hackers@lists.postgresql.org; Fri, 05 Apr 2024 11:29:48 +0000 Received: by mail-yw1-x112a.google.com with SMTP id 00721157ae682-61500da846fso17640197b3.1 for ; Fri, 05 Apr 2024 04:29:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1712316580; x=1712921380; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=+MobdRogwDPNtM1xNBab5/t7anUTenubqxCJHYZ/n6M=; b=R7cBkXMc6aIwVB8TMg2b8iVKFdgEFhO2r+ROL5wz7/PvFDy+ZPg/RNUDZsF3bG0CcY oQryJsArBf3FgQrSEYrsJAzjXfcHu7Mvt+aRRFIVeIB/tcmjQSH0uXuWAnKG1CdrDA18 DYVxXIS0ttjXI2Lhu9yv96z+w6O/KYDISBFLVzkRrY6T+0AtuIS1XVGZCvawax+azIUz eMLU7RcllXRAQ3bncTsD0J7ju2DB4n4LzQ9KPsc/HfvGGMHU3AY8a4tw9Pzm2QkF9wUT 1Yee/4XsMgIxf9bCKMdvmNSa0yEYz7L2lDJVB6/6MaiQP9mJo4COBELeDDyIAem8UHOA iLzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712316580; x=1712921380; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=+MobdRogwDPNtM1xNBab5/t7anUTenubqxCJHYZ/n6M=; b=HOiHmM3j0A5QsRRwkg57G6TW7HtETGxpyQCTvGs7yTnyNaK/vzY4KAyfNraVutFv3k bCxYZ0VKpxavx4DMQomCAqlixwIzz8EG4t9Xgg4dSQdV4K922PQWLKsXsK1k+w32fcEX 1YqOXaudxuTSJmhturfNtRR1oGbms/iy4Q3bWfEynivJ/L340jpBvrIKCz0BvWTHTTUD X0labY8ylj59NOjIxvLjzu0IcNOkqdSPLTN/N8QT7wTttE75eGSL1HmlZMi1bHv/nAEQ 6kFu0Qj+WaPEmKTR9LQXEeBU3Sm/+MQOk/X8d2ilw8f1EJPFgF2FWrcSRsXUnuQq0Tvh UyTA== X-Forwarded-Encrypted: i=1; AJvYcCXDyNfQpt2eKb/7jHLrNT2ANuaFOQfzLM4L+pjoKsfk9qR6vJY/X/7YOE0mgBVtiwISTIfJWbEQJKWWKiWD8GD5WCgjuN3tRKJuyfhPbwfg1/Fc X-Gm-Message-State: AOJu0YzhQBMQrhkDWPPDmmXGFz1ko+SBvlw3SR24mxHbByBndA5cwF9T I6QFCELzQrPtx3361qm+IWJjASV27srTAuCRL9HCVkjTomRgyrA25IybQBeszadQMOeR/QHPJxh EvqN9s7+eISerRSPSceUyaDOA5E0= X-Google-Smtp-Source: AGHT+IF/CTkFwjb/OOTXk9zZ66aY8heAS3q6TcXJTMconW3QAC5COiH8XAsg9ohRp5URLXcVPvOlDQ9t+EXwoB75gp0= X-Received: by 2002:a25:c306:0:b0:dc6:a8c6:c9e5 with SMTP id t6-20020a25c306000000b00dc6a8c6c9e5mr822840ybf.26.1712316580420; Fri, 05 Apr 2024 04:29:40 -0700 (PDT) MIME-Version: 1.0 References: <8fab8-65d74c80-1-2f28e880@39088166> <99df2-65d8d200-1-63c26880@172687752> In-Reply-To: From: Ajin Cherian Date: Fri, 5 Apr 2024 22:29:29 +1100 Message-ID: Subject: Re: Slow catchup of 2PC (twophase) transactions on replica in LR To: Amit Kapila Cc: =?UTF-8?B?0JTQsNCy0YvQtNC+0LIg0JLQuNGC0LDQu9C40Lk=?= , Heikki Linnakangas , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000084fba0061557c5d5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000084fba0061557c5d5 Content-Type: multipart/alternative; boundary="00000000000084fb9d061557c5d3" --00000000000084fb9d061557c5d3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Apr 4, 2024 at 4:38=E2=80=AFPM Amit Kapila wrote: > > I think this would probably be better than the current situation but > can we think of a solution to allow toggling the value of two_phase > even when prepared transactions are present? Can you please summarize > the reason for the problems in doing that and the solutions, if any? > > -- > With Regards, > Amit Kapila. > Updated the patch, as it wasn't addressing updating of two-phase in the remote slot. Currently the main issue that needs to be handled is the handling of pending prepared transactions while the two_phase is altered. I see 3 issues with the current approach. 1. Uncommitted prepared transactions when toggling two_phase from true to false When two_phase was true, prepared transactions were decoded at PREPARE time and send to the subscriber, which is then prepared on the subscriber with a new gid. Once the two_phase is toggled to false, then the COMMIT PREPARED on the publisher is converted to commit and the entire transaction is decoded and sent to the subscriber. This will leave the previously prepared transaction pending. 2. Uncommitted prepared transactions when toggling two_phase form false to true When two_phase was false, prepared transactions were ignored and not decoded at PREPARE time on the publisher. Once the two_phase is toggled to true, the apply worker and the walsender are restarted and a replication is restarted from a new "start_decoding_at" LSN. Now, this new "start_decoding_at" could be past the LSN of the PREPARE record and if so, the PREPARE record is skipped and not send to the subscriber. Look at comments in DecodeTXNNeedSkip() for detail. Later when the user issues COMMIT PREPARED, this is decoded and sent to the subscriber. but there is no prepared transaction on the subscriber, and this fails because the corresponding gid of the transaction couldn't be found. 3. While altering the two_phase of the subscription, it is required to also alter the two_phase field of the slot on the primary. The subscription cannot remotely alter the two_phase option of the slot when the subscription is enabled, as the slot is owned by the walsender on the publisher side. Possible solutions for the 3 problems: 1. While toggling two_phase from true to false, we could probably get list of prepared transactions for this subscriber id and rollback/abort the prepared transactions. This will allow the transactions to be re-applied like a normal transaction when the commit comes. Alternatively, if this isn't appropriate doing it in the ALTER SUBSCRIPTION context, we could store the xids of all prepared transactions of this subscription in a list and when the corresponding xid is being committed by the apply worker, prior to commit, we make sure the previously prepared transaction is rolled back. But this would add the overhead of checking this list every time a transaction is committed by the apply worker. 2. No solution yet. 3. We could mandate that the altering of two_phase state only be done after disabling the subscription, just like how it is handled for failover option= . Let me know your thoughts. regards, Ajin Cherian Fujitsu Australia --00000000000084fb9d061557c5d3 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


=
On Thu, Apr 4, 2024 at 4:38=E2=80=AFP= M Amit Kapila <amit.kapila16@= gmail.com> wrote:

I think this would probably be better than the current situation but
can we think of a solution to allow toggling the value of two_phase
even when prepared transactions are present? Can you please summarize
the reason for the problems in doing that and the solutions, if any?

--
With Regards,
Amit Kapila.

Updated the patch, as it wasn&#= 39;t addressing updating of two-phase in the remote slot.

=C2=A0Curre= ntly the main issue that needs to be handled is the handling of pending pre= pared transactions while the two_phase is altered. I see 3 issues with the = current approach.

1. Uncommitted prepared transactions when toggling two_phase from true to f= alse
=E2=80=83=E2=80=83When two_phase was true, prepared transactions were decod= ed at PREPARE time and send to the subscriber, which is then prepared on th= e subscriber with a new gid. Once the two_phase is toggled to false, then t= he COMMIT PREPARED on the publisher is converted to commit and the entire t= ransaction is decoded and sent to the subscriber. This will=C2=A0=C2=A0 lea= ve the previously prepared transaction pending.

2. Uncommitted prepared transactions when toggling two_phase form false to = true
=E2=80=83=E2=80=83When two_phase was false, prepared transactions were igno= red and not decoded at PREPARE time on the publisher. Once the two_phase is= toggled to true, the apply worker and the walsender are restarted and a re= plication is restarted from a new "start_decoding_at" LSN. Now, t= his new "start_decoding_at" could be past the LSN of the PREPARE = record and if so, the PREPARE record is skipped and not send to the subscri= ber. Look at comments in=C2=A0DecodeTXNNeedSkip() for detail.=C2=A0 Later w= hen the user issues COMMIT PREPARED, this is decoded and sent to the subscr= iber. but there is no prepared transaction on the subscriber, and this fail= s because the=C2=A0 corresponding gid of the transaction couldn't be fo= und.

3. While altering the two_phase of the subscription, it is requi= red to also alter the two_phase field of the slot on the primary. The subsc= ription cannot remotely alter the two_phase option of the slot when the sub= scription is=C2=A0 enabled, as the slot is owned by the walsender on the pu= blisher side.=C2=A0

Possible solutions for the 3 problems:

1. While toggling two_phase from true to false, we could probably get list = of prepared transactions for this subscriber id and rollback/abort the prep= ared transactions. This will allow the transactions to be re-applied like a= normal transaction when the commit comes. Alternatively, if this isn't= appropriate doing it in the ALTER SUBSCRIPTION context, we could store the= xids of all prepared transactions of this subscription in a list and when = the corresponding xid is being committed by the apply worker, prior to comm= it, we make sure the previously prepared transaction is rolled back. But th= is would add the overhead of checking this list every time a transaction is= committed by the apply worker.

2. No solution yet.

3. We could mandate that the altering of two_phase state only be done after= disabling the subscription, just like how it is handled for failover optio= n.

Let me know your thoughts.

regards,
Ajin Che= rian
Fujitsu Australia
--00000000000084fb9d061557c5d3-- --00000000000084fba0061557c5d5 Content-Type: application/octet-stream; name="v2-0001-Allow-altering-of-two_phase-option-of-a-SUBSCRIPT.patch" Content-Disposition: attachment; filename="v2-0001-Allow-altering-of-two_phase-option-of-a-SUBSCRIPT.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lumkv1fc0 RnJvbSAxMDYwNDUzOGE2MWM0YjAxNTM3OGI1ZTMzYWY0OTQwNWVjNzc0MzY2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IEZyaSwgNSBBcHIgMjAyNCAwNjo0NzoxOCAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg djJdIEFsbG93IGFsdGVyaW5nIG9mIHR3b19waGFzZSBvcHRpb24gb2YgYSBTVUJTQ1JJUFRJT04K ClRoaXMgcGF0Y2ggYWxsb3dzIHVzZXIgdG8gYWx0ZXIgdHdvX3BoYXNlIG9wdGlvbiBvZiBhIHN1 YnNjcmliZXIgcHJvdmlkZWQgbm8gdW5jb21taXR0ZWQKcHJlcGFyZWQgdHJhbnNhY3Rpb25zIGFy ZSBwZW5kaW5nIG9uIHRoYXQgc3Vic2NyaXB0aW9uLgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3R3b3BoYXNlLmMgICAgICAgICAgICAgIHwgNDIgKysrKysrKysrKysrKysrKysrKysr Kwogc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jICAgICAgICAgICAgfCA0 MiArKysrKysrKysrKysrKysrKystLS0tCiAuLi4vbGlicHF3YWxyZWNlaXZlci9saWJwcXdhbHJl Y2VpdmVyLmMgICAgICAgICAgICB8ICA3ICsrLS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvbGF1bmNoZXIuYyAgICAgICAgIHwgMjIgKysrKysrKysrKy0tCiBzcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jICAgICAgICAgICB8ICAzIC0tCiBzcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9zbG90LmMgICAgICAgICAgICAgICAgICAgICB8IDE5ICsrKysrKysrKy0K IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jICAgICAgICAgICAgICAgIHwgMjAg KysrKysrKystLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90d29waGFzZS5oICAgICAgICAgICAgICAg ICAgICAgIHwgIDMgKysKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5o ICAgICAgICAgIHwgIDIgKy0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaCAgICAgICAg ICAgICAgICAgICAgIHwgIDMgKy0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVy LmggICAgICAgICAgICAgIHwgIDUgKy0tCiAxMSBmaWxlcyBjaGFuZ2VkLCAxNDMgaW5zZXJ0aW9u cygrKSwgMjUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vdHdvcGhhc2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMK aW5kZXggODA5MGFjOS4uYjBhYWUyNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vdHdvcGhhc2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFz ZS5jCkBAIC0yNjgyLDMgKzI2ODIsNDUgQEAgTG9va3VwR1hhY3QoY29uc3QgY2hhciAqZ2lkLCBY TG9nUmVjUHRyIHByZXBhcmVfZW5kX2xzbiwKIAlMV0xvY2tSZWxlYXNlKFR3b1BoYXNlU3RhdGVM b2NrKTsKIAlyZXR1cm4gZm91bmQ7CiB9CisKKy8qCisgKiBjaGVja0dpZAorICovCitzdGF0aWMg Ym9vbAorY2hlY2tHaWQoY2hhciAqZ2lkLCBPaWQgc3ViaWQpCit7CisJaW50IHJldDsKKwlPaWQg c3ViaWRfd3JpdHRlbiwgeGlkOworCisJcmV0ID0gc3NjYW5mKGdpZCwgInBnX2dpZF8ldV8ldSIs ICZzdWJpZF93cml0dGVuLCAmeGlkKTsKKworCWlmIChyZXQgIT0gMiB8fCBzdWJpZCAhPSBzdWJp ZF93cml0dGVuKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAq IExvb2t1cEdYYWN0QnlTdWJpZAorICoJCUNoZWNrIGlmIHRoZSBwcmVwYXJlZCB0cmFuc2FjdGlv biBkb25lIGJ5IGFwcGx5IHdvcmtlciBleGlzdHMuCisgKi8KK2Jvb2wKK0xvb2t1cEdYYWN0QnlT dWJpZChPaWQgc3ViaWQpCit7CisJYm9vbAkJZm91bmQgPSBmYWxzZTsKKworCUxXTG9ja0FjcXVp cmUoVHdvUGhhc2VTdGF0ZUxvY2ssIExXX1NIQVJFRCk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBU d29QaGFzZVN0YXRlLT5udW1QcmVwWGFjdHM7IGkrKykKKwl7CisJCUdsb2JhbFRyYW5zYWN0aW9u IGd4YWN0ID0gVHdvUGhhc2VTdGF0ZS0+cHJlcFhhY3RzW2ldOworCisJCS8qIElnbm9yZSBub3Qt eWV0LXZhbGlkIEdJRHMuICovCisJCWlmIChneGFjdC0+dmFsaWQgJiYJY2hlY2tHaWQoZ3hhY3Qt PmdpZCwgc3ViaWQpKQorCQl7CisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0K KwlMV0xvY2tSZWxlYXNlKFR3b1BoYXNlU3RhdGVMb2NrKTsKKwlyZXR1cm4gZm91bmQ7Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKaW5kZXggNWE0N2ZhOS4uNjY0M2Zj MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYwpAQCAtMTYsNiArMTYs NyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImFjY2Vz cy90YWJsZS5oIgorI2luY2x1ZGUgImFjY2Vzcy90d29waGFzZS5oIgogI2luY2x1ZGUgImFjY2Vz cy94YWN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9jYXRhbG9nLmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9kZXBlbmRlbmN5LmgiCkBAIC04NDksNyArODUwLDcgQEAgQ3JlYXRlU3Vic2NyaXB0aW9uKFBh cnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwKIAkJCWVsc2Ug aWYgKG9wdHMuc2xvdF9uYW1lICYmCiAJCQkJCSAob3B0cy5mYWlsb3ZlciB8fCB3YWxyY3Zfc2Vy dmVyX3ZlcnNpb24od3Jjb25uKSA+PSAxNzAwMDApKQogCQkJewotCQkJCXdhbHJjdl9hbHRlcl9z bG90KHdyY29ubiwgb3B0cy5zbG90X25hbWUsIG9wdHMuZmFpbG92ZXIpOworCQkJCXdhbHJjdl9h bHRlcl9zbG90KHdyY29ubiwgb3B0cy5zbG90X25hbWUsIG9wdHMudHdvcGhhc2UsIG9wdHMuZmFp bG92ZXIpOwogCQkJfQogCQl9CiAJCVBHX0ZJTkFMTFkoKTsKQEAgLTg2OCw3ICs4NjksNyBAQCBD cmVhdGVTdWJzY3JpcHRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVTdWJzY3JpcHRpb25T dG10ICpzdG10LAogCXBnc3RhdF9jcmVhdGVfc3Vic2NyaXB0aW9uKHN1YmlkKTsKIAogCWlmIChv cHRzLmVuYWJsZWQpCi0JCUFwcGx5TGF1bmNoZXJXYWtldXBBdENvbW1pdCgpOworCQlBcHBseUxh dW5jaGVyV2FrZXVwQXRFT1hhY3QodHJ1ZSk7CiAKIAlPYmplY3RBZGRyZXNzU2V0KG15c2VsZiwg U3Vic2NyaXB0aW9uUmVsYXRpb25JZCwgc3ViaWQpOwogCkBAIC0xMTY1LDcgKzExNjYsOCBAQCBB bHRlclN1YnNjcmlwdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU3Vic2NyaXB0aW9uU3Rt dCAqc3RtdCwKIAkJCXsKIAkJCQlzdXBwb3J0ZWRfb3B0cyA9IChTVUJPUFRfU0xPVF9OQU1FIHwK IAkJCQkJCQkJICBTVUJPUFRfU1lOQ0hST05PVVNfQ09NTUlUIHwgU1VCT1BUX0JJTkFSWSB8Ci0J CQkJCQkJCSAgU1VCT1BUX1NUUkVBTUlORyB8IFNVQk9QVF9ESVNBQkxFX09OX0VSUiB8CisJCQkJ CQkJCSAgU1VCT1BUX1NUUkVBTUlORyB8IFNVQk9QVF9UV09QSEFTRV9DT01NSVQgfAorCQkJCQkJ CQkgIFNVQk9QVF9ESVNBQkxFX09OX0VSUiB8CiAJCQkJCQkJCSAgU1VCT1BUX1BBU1NXT1JEX1JF UVVJUkVEIHwKIAkJCQkJCQkJICBTVUJPUFRfUlVOX0FTX09XTkVSIHwgU1VCT1BUX0ZBSUxPVkVS IHwKIAkJCQkJCQkJICBTVUJPUFRfT1JJR0lOKTsKQEAgLTExNzMsNiArMTE3NSwzMSBAQCBBbHRl clN1YnNjcmlwdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU3Vic2NyaXB0aW9uU3RtdCAq c3RtdCwKIAkJCQlwYXJzZV9zdWJzY3JpcHRpb25fb3B0aW9ucyhwc3RhdGUsIHN0bXQtPm9wdGlv bnMsCiAJCQkJCQkJCQkJICAgc3VwcG9ydGVkX29wdHMsICZvcHRzKTsKIAorCQkJCS8qIFhYWCAq LworCQkJCWlmIChJc1NldChvcHRzLnNwZWNpZmllZF9vcHRzLCBTVUJPUFRfVFdPUEhBU0VfQ09N TUlUKSkKKwkJCQl7CisJCQkJCS8qIFN0b3AgY29ycmVzcG9uZGluZyB3b3JrZXIgKi8KKwkJCQkJ bG9naWNhbHJlcF93b3JrZXJfc3RvcChzdWJpZCwgSW52YWxpZE9pZCk7CisKKwkJCQkJLyogUmVx dWVzdCB0byBzdGFydCB3b3JrZXIgYXQgdGhlIGVuZCBvZiB0cmFuc2FjdGlvbiAqLworCQkJCQlB cHBseUxhdW5jaGVyV2FrZXVwQXRFT1hhY3QoZmFsc2UpOworCisJCQkJCS8qIENoZWNrIHdoZXRo ZXIgdGhlIG51bWJlciBvZiBwcmVwYXJlZCB0cmFuc2FjdGlvbnMgKi8KKwkJCQkJaWYgKCFvcHRz LnR3b3BoYXNlICYmCisJCQkJCQlmb3JtLT5zdWJ0d29waGFzZXN0YXRlID09IExPR0lDQUxSRVBf VFdPUEhBU0VfU1RBVEVfRU5BQkxFRCAmJgorCQkJCQkJTG9va3VwR1hhY3RCeVN1YmlkKHN1Ymlk KSkKKwkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNU X05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkJCQkgZXJybXNnKCJjYW5ub3QgZGlz YWJsZSB0d29fcGhhc2Ugd2hlbiB1bmNvbW1pdHRlZCBwcmVwYXJlZCB0cmFuc2FjdGlvbnMgcHJl c2VudCIpKSk7CisKKwkJCQkJLyogQ2hhbmdlIHN5c3RlbSBjYXRhbG9nIGFjb29yZGluZ2x5ICov CisJCQkJCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJ0d29waGFzZXN0YXRlIC0gMV0g PQorCQkJCQkJQ2hhckdldERhdHVtKG9wdHMudHdvcGhhc2UgPworCQkJCQkJCQkJIExPR0lDQUxS RVBfVFdPUEhBU0VfU1RBVEVfUEVORElORyA6CisJCQkJCQkJCQkgTE9HSUNBTFJFUF9UV09QSEFT RV9TVEFURV9ESVNBQkxFRCk7CisJCQkJCXJlcGxhY2VzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1 YnR3b3BoYXNlc3RhdGUgLSAxXSA9IHRydWU7CisJCQkJfQorCiAJCQkJaWYgKElzU2V0KG9wdHMu c3BlY2lmaWVkX29wdHMsIFNVQk9QVF9TTE9UX05BTUUpKQogCQkJCXsKIAkJCQkJLyoKQEAgLTEy OTksNyArMTMyNiw3IEBAIEFsdGVyU3Vic2NyaXB0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0 ZXJTdWJzY3JpcHRpb25TdG10ICpzdG10LAogCQkJCXJlcGxhY2VzW0FudW1fcGdfc3Vic2NyaXB0 aW9uX3N1YmVuYWJsZWQgLSAxXSA9IHRydWU7CiAKIAkJCQlpZiAob3B0cy5lbmFibGVkKQotCQkJ CQlBcHBseUxhdW5jaGVyV2FrZXVwQXRDb21taXQoKTsKKwkJCQkJQXBwbHlMYXVuY2hlcldha2V1 cEF0RU9YYWN0KHRydWUpOwogCiAJCQkJdXBkYXRlX3R1cGxlID0gdHJ1ZTsKIAkJCQlicmVhazsK QEAgLTE1MjEsNyArMTU0OCw4IEBAIEFsdGVyU3Vic2NyaXB0aW9uKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgQWx0ZXJTdWJzY3JpcHRpb25TdG10ICpzdG10LAogCSAqIGRvaW5nIHRoZSBkYXRhYmFzZSBv cGVyYXRpb25zIHdlIHdvbid0IGJlIGFibGUgdG8gcm9sbGJhY2sgYWx0ZXJlZAogCSAqIHNsb3Qu CiAJICovCi0JaWYgKHJlcGxhY2VzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YmZhaWxvdmVyIC0g MV0pCisJaWYgKHJlcGxhY2VzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YnR3b3BoYXNlc3RhdGUg LSAxXSB8fAorCQlyZXBsYWNlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJmYWlsb3ZlciAtIDFd KQogCXsKIAkJYm9vbAkJbXVzdF91c2VfcGFzc3dvcmQ7CiAJCWNoYXIJICAgKmVycjsKQEAgLTE1 NDEsNyArMTU2OSw3IEBAIEFsdGVyU3Vic2NyaXB0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0 ZXJTdWJzY3JpcHRpb25TdG10ICpzdG10LAogCiAJCVBHX1RSWSgpOwogCQl7Ci0JCQl3YWxyY3Zf YWx0ZXJfc2xvdCh3cmNvbm4sIHN1Yi0+c2xvdG5hbWUsIG9wdHMuZmFpbG92ZXIpOworCQkJd2Fs cmN2X2FsdGVyX3Nsb3Qod3Jjb25uLCBzdWItPnNsb3RuYW1lLCBvcHRzLnR3b3BoYXNlLCBvcHRz LmZhaWxvdmVyKTsKIAkJfQogCQlQR19GSU5BTExZKCk7CiAJCXsKQEAgLTE5NjIsNyArMTk5MCw3 IEBAIEFsdGVyU3Vic2NyaXB0aW9uT3duZXJfaW50ZXJuYWwoUmVsYXRpb24gcmVsLCBIZWFwVHVw bGUgdHVwLCBPaWQgbmV3T3duZXJJZCkKIAkJCQkJCQkgIGZvcm0tPm9pZCwgMCk7CiAKIAkvKiBX YWtlIHVwIHJlbGF0ZWQgYmFja2dyb3VuZCBwcm9jZXNzZXMgdG8gaGFuZGxlIHRoaXMgY2hhbmdl IHF1aWNrbHkuICovCi0JQXBwbHlMYXVuY2hlcldha2V1cEF0Q29tbWl0KCk7CisJQXBwbHlMYXVu Y2hlcldha2V1cEF0RU9YYWN0KHRydWUpOwogCUxvZ2ljYWxSZXBXb3JrZXJzV2FrZXVwQXRDb21t aXQoZm9ybS0+b2lkKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bGlicHF3YWxyZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9saWJwcXdhbHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYwppbmRleCA3NjFiZjBmLi45 ZjdhOTM2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdhbHJlY2Vp dmVyL2xpYnBxd2FscmVjZWl2ZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJw cXdhbHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYwpAQCAtODAsNyArODAsNyBAQCBzdGF0aWMg Y2hhciAqbGlicHFyY3ZfY3JlYXRlX3Nsb3QoV2FsUmVjZWl2ZXJDb25uICpjb25uLAogCQkJCQkJ CQkgIENSU1NuYXBzaG90QWN0aW9uIHNuYXBzaG90X2FjdGlvbiwKIAkJCQkJCQkJICBYTG9nUmVj UHRyICpsc24pOwogc3RhdGljIHZvaWQgbGlicHFyY3ZfYWx0ZXJfc2xvdChXYWxSZWNlaXZlckNv bm4gKmNvbm4sIGNvbnN0IGNoYXIgKnNsb3RuYW1lLAotCQkJCQkJCQlib29sIGZhaWxvdmVyKTsK KwkJCQkJCQkJYm9vbCB0d29fcGhhc2UsIGJvb2wgZmFpbG92ZXIpOwogc3RhdGljIHBpZF90IGxp YnBxcmN2X2dldF9iYWNrZW5kX3BpZChXYWxSZWNlaXZlckNvbm4gKmNvbm4pOwogc3RhdGljIFdh bFJjdkV4ZWNSZXN1bHQgKmxpYnBxcmN2X2V4ZWMoV2FsUmVjZWl2ZXJDb25uICpjb25uLAogCQkJ CQkJCQkJICAgY29uc3QgY2hhciAqcXVlcnksCkBAIC0xMTIxLDE0ICsxMTIxLDE1IEBAIGxpYnBx cmN2X2NyZWF0ZV9zbG90KFdhbFJlY2VpdmVyQ29ubiAqY29ubiwgY29uc3QgY2hhciAqc2xvdG5h bWUsCiAgKi8KIHN0YXRpYyB2b2lkCiBsaWJwcXJjdl9hbHRlcl9zbG90KFdhbFJlY2VpdmVyQ29u biAqY29ubiwgY29uc3QgY2hhciAqc2xvdG5hbWUsCi0JCQkJCWJvb2wgZmFpbG92ZXIpCisJCQkJ CWJvb2wgdHdvX3BoYXNlLCBib29sIGZhaWxvdmVyKQogewogCVN0cmluZ0luZm9EYXRhIGNtZDsK IAlQR3Jlc3VsdCAgICpyZXM7CiAKIAlpbml0U3RyaW5nSW5mbygmY21kKTsKLQlhcHBlbmRTdHJp bmdJbmZvKCZjbWQsICJBTFRFUl9SRVBMSUNBVElPTl9TTE9UICVzICggRkFJTE9WRVIgJXMgKSIs CisJYXBwZW5kU3RyaW5nSW5mbygmY21kLCAiQUxURVJfUkVQTElDQVRJT05fU0xPVCAlcyAoIFRX T19QSEFTRSAlcywgRkFJTE9WRVIgJXMgKSIsCiAJCQkJCSBxdW90ZV9pZGVudGlmaWVyKHNsb3Ru YW1lKSwKKwkJCQkJIHR3b19waGFzZSA/ICJ0cnVlIiA6ICJmYWxzZSIsCiAJCQkJCSBmYWlsb3Zl ciA/ICJ0cnVlIiA6ICJmYWxzZSIpOwogCiAJcmVzID0gbGlicHFyY3ZfUFFleGVjKGNvbm4tPnN0 cmVhbUNvbm4sIGNtZC5kYXRhKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvbGF1bmNoZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1 bmNoZXIuYwppbmRleCA2NjA3MGU5Li44OTllYzIyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9sYXVuY2hlci5jCkBAIC04OSw2ICs4OSw3IEBAIHN0YXRpYyBkc2FfYXJlYSAq bGFzdF9zdGFydF90aW1lc19kc2EgPSBOVUxMOwogc3RhdGljIGRzaGFzaF90YWJsZSAqbGFzdF9z dGFydF90aW1lcyA9IE5VTEw7CiAKIHN0YXRpYyBib29sIG9uX2NvbW1pdF9sYXVuY2hlcl93YWtl dXAgPSBmYWxzZTsKK3N0YXRpYyBib29sIGxhdW5jaGVyX3dha2V1cCA9IGZhbHNlOwogCiAKIHN0 YXRpYyB2b2lkIEFwcGx5TGF1bmNoZXJXYWtldXAodm9pZCk7CkBAIC0xMDg1LDEzICsxMDg2LDIy IEBAIEFwcGx5TGF1bmNoZXJGb3JnZXRXb3JrZXJTdGFydFRpbWUoT2lkIHN1YmlkKQogdm9pZAog QXRFT1hhY3RfQXBwbHlMYXVuY2hlcihib29sIGlzQ29tbWl0KQogeworCWJvb2wga2lja2VkID0g ZmFsc2U7CisKIAlpZiAoaXNDb21taXQpCiAJewogCQlpZiAob25fY29tbWl0X2xhdW5jaGVyX3dh a2V1cCkKKwkJewogCQkJQXBwbHlMYXVuY2hlcldha2V1cCgpOworCQkJa2lja2VkID0gdHJ1ZTsK KwkJfQogCX0KIAorCWlmICgha2lja2VkICYmIGxhdW5jaGVyX3dha2V1cCkKKwkJQXBwbHlMYXVu Y2hlcldha2V1cCgpOworCiAJb25fY29tbWl0X2xhdW5jaGVyX3dha2V1cCA9IGZhbHNlOworCWxh dW5jaGVyX3dha2V1cCA9IGZhbHNlOwogfQogCiAvKgpAQCAtMTEwMiwxMCArMTExMiwxNiBAQCBB dEVPWGFjdF9BcHBseUxhdW5jaGVyKGJvb2wgaXNDb21taXQpCiAgKiB0dXBsZSB3YXMgYWRkZWQg dG8gdGhlIHBnX3N1YnNjcmlwdGlvbiBjYXRhbG9nLgogKi8KIHZvaWQKLUFwcGx5TGF1bmNoZXJX YWtldXBBdENvbW1pdCh2b2lkKQorQXBwbHlMYXVuY2hlcldha2V1cEF0RU9YYWN0KGJvb2wgb25f Y29tbWl0KQogewotCWlmICghb25fY29tbWl0X2xhdW5jaGVyX3dha2V1cCkKLQkJb25fY29tbWl0 X2xhdW5jaGVyX3dha2V1cCA9IHRydWU7CisJaWYgKG9uX2NvbW1pdCkKKwl7CisJCWlmICghb25f Y29tbWl0X2xhdW5jaGVyX3dha2V1cCkKKwkJCW9uX2NvbW1pdF9sYXVuY2hlcl93YWtldXAgPSB0 cnVlOworCX0KKwllbHNlCisJCWlmICghbGF1bmNoZXJfd2FrZXVwKQorCQkJbGF1bmNoZXJfd2Fr ZXVwID0gdHJ1ZTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jCmluZGV4IGI1YTgwZmUuLmNhM2QyNjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC93b3JrZXIuYwpAQCAtMzkxMSw5ICszOTExLDYgQEAgbWF5YmVfcmVyZWFk X3N1YnNjcmlwdGlvbih2b2lkKQogCS8qICFzbG90bmFtZSBzaG91bGQgbmV2ZXIgaGFwcGVuIHdo ZW4gZW5hYmxlZCBpcyB0cnVlLiAqLwogCUFzc2VydChuZXdzdWItPnNsb3RuYW1lKTsKIAotCS8q IHR3by1waGFzZSBzaG91bGQgbm90IGJlIGFsdGVyZWQgKi8KLQlBc3NlcnQobmV3c3ViLT50d29w aGFzZXN0YXRlID09IE15U3Vic2NyaXB0aW9uLT50d29waGFzZXN0YXRlKTsKLQogCS8qCiAJICog RXhpdCBpZiBhbnkgcGFyYW1ldGVyIHRoYXQgYWZmZWN0cyB0aGUgcmVtb3RlIGNvbm5lY3Rpb24g d2FzIGNoYW5nZWQuCiAJICogVGhlIGxhdW5jaGVyIHdpbGwgc3RhcnQgYSBuZXcgd29ya2VyIGJ1 dCBub3RlIHRoYXQgdGhlIHBhcmFsbGVsIGFwcGx5CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9zbG90LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMKaW5kZXgg M2JkZGFhZS4uM2QyNGViYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xv dC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYwpAQCAtODAwLDggKzgwMCwx MCBAQCBSZXBsaWNhdGlvblNsb3REcm9wKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgbm93YWl0KQog ICogQ2hhbmdlIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBzbG90IGlkZW50aWZpZWQgYnkgdGhlIHNw ZWNpZmllZCBuYW1lLgogICovCiB2b2lkCi1SZXBsaWNhdGlvblNsb3RBbHRlcihjb25zdCBjaGFy ICpuYW1lLCBib29sIGZhaWxvdmVyKQorUmVwbGljYXRpb25TbG90QWx0ZXIoY29uc3QgY2hhciAq bmFtZSwgYm9vbCB0d29fcGhhc2UsIGJvb2wgZmFpbG92ZXIpCiB7CisJYm9vbAkJdXBkYXRlX3Ns b3QgPSBmYWxzZTsKKwogCUFzc2VydChNeVJlcGxpY2F0aW9uU2xvdCA9PSBOVUxMKTsKIAogCVJl cGxpY2F0aW9uU2xvdEFjcXVpcmUobmFtZSwgZmFsc2UpOwpAQCAtODQ0LDEyICs4NDYsMjcgQEAg UmVwbGljYXRpb25TbG90QWx0ZXIoY29uc3QgY2hhciAqbmFtZSwgYm9vbCBmYWlsb3ZlcikKIAkJ CQllcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQllcnJtc2coImNh bm5vdCBlbmFibGUgZmFpbG92ZXIgZm9yIGEgdGVtcG9yYXJ5IHJlcGxpY2F0aW9uIHNsb3QiKSk7 CiAKKwlpZiAoTXlSZXBsaWNhdGlvblNsb3QtPmRhdGEudHdvX3BoYXNlICE9IHR3b19waGFzZSkK Kwl7CisJCVNwaW5Mb2NrQWNxdWlyZSgmTXlSZXBsaWNhdGlvblNsb3QtPm11dGV4KTsKKwkJTXlS ZXBsaWNhdGlvblNsb3QtPmRhdGEudHdvX3BoYXNlID0gdHdvX3BoYXNlOworCQlTcGluTG9ja1Jl bGVhc2UoJk15UmVwbGljYXRpb25TbG90LT5tdXRleCk7CisKKwkJdXBkYXRlX3Nsb3QgPSB0cnVl OworCX0KKworCiAJaWYgKE15UmVwbGljYXRpb25TbG90LT5kYXRhLmZhaWxvdmVyICE9IGZhaWxv dmVyKQogCXsKIAkJU3BpbkxvY2tBY3F1aXJlKCZNeVJlcGxpY2F0aW9uU2xvdC0+bXV0ZXgpOwog CQlNeVJlcGxpY2F0aW9uU2xvdC0+ZGF0YS5mYWlsb3ZlciA9IGZhaWxvdmVyOwogCQlTcGluTG9j a1JlbGVhc2UoJk15UmVwbGljYXRpb25TbG90LT5tdXRleCk7CiAKKwkJdXBkYXRlX3Nsb3QgPSB0 cnVlOworCX0KKworCWlmICh1cGRhdGVfc2xvdCkKKwl7CiAJCVJlcGxpY2F0aW9uU2xvdE1hcmtE aXJ0eSgpOwogCQlSZXBsaWNhdGlvblNsb3RTYXZlKCk7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93 YWxzZW5kZXIuYwppbmRleCBiYzQwYzQ1Li5iZTE1NTA2IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93 YWxzZW5kZXIuYwpAQCAtMTQxMSwxNCArMTQxMSwyNSBAQCBEcm9wUmVwbGljYXRpb25TbG90KERy b3BSZXBsaWNhdGlvblNsb3RDbWQgKmNtZCkKICAqIFByb2Nlc3MgZXh0cmEgb3B0aW9ucyBnaXZl biB0byBBTFRFUl9SRVBMSUNBVElPTl9TTE9ULgogICovCiBzdGF0aWMgdm9pZAotUGFyc2VBbHRl clJlcGxTbG90T3B0aW9ucyhBbHRlclJlcGxpY2F0aW9uU2xvdENtZCAqY21kLCBib29sICpmYWls b3ZlcikKK1BhcnNlQWx0ZXJSZXBsU2xvdE9wdGlvbnMoQWx0ZXJSZXBsaWNhdGlvblNsb3RDbWQg KmNtZCwKKwkJCQkJCSAgYm9vbCAqdHdvX3BoYXNlLCBib29sICpmYWlsb3ZlcikKIHsKKwlib29s CQl0d29fcGhhc2VfZ2l2ZW4gPSBmYWxzZTsKIAlib29sCQlmYWlsb3Zlcl9naXZlbiA9IGZhbHNl OwogCiAJLyogUGFyc2Ugb3B0aW9ucyAqLwogCWZvcmVhY2hfcHRyKERlZkVsZW0sIGRlZmVsLCBj bWQtPm9wdGlvbnMpCiAJewotCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAiZmFpbG92ZXIi KSA9PSAwKQorCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidHdvX3BoYXNlIikgPT0gMCkK KwkJeworCQkJaWYgKHR3b19waGFzZV9naXZlbikKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJ KGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJIGVycm1zZygiY29uZmxpY3Rp bmcgb3IgcmVkdW5kYW50IG9wdGlvbnMiKSkpOworCQkJdHdvX3BoYXNlX2dpdmVuID0gdHJ1ZTsK KwkJCSp0d29fcGhhc2UgPSBkZWZHZXRCb29sZWFuKGRlZmVsKTsKKwkJfQorCQllbHNlIGlmIChz dHJjbXAoZGVmZWwtPmRlZm5hbWUsICJmYWlsb3ZlciIpID09IDApCiAJCXsKIAkJCWlmIChmYWls b3Zlcl9naXZlbikKIAkJCQllcmVwb3J0KEVSUk9SLApAQCAtMTQzOCwxMCArMTQ0OSwxMSBAQCBQ YXJzZUFsdGVyUmVwbFNsb3RPcHRpb25zKEFsdGVyUmVwbGljYXRpb25TbG90Q21kICpjbWQsIGJv b2wgKmZhaWxvdmVyKQogc3RhdGljIHZvaWQKIEFsdGVyUmVwbGljYXRpb25TbG90KEFsdGVyUmVw bGljYXRpb25TbG90Q21kICpjbWQpCiB7CisJYm9vbAkJdHdvX3BoYXNlID0gZmFsc2U7CiAJYm9v bAkJZmFpbG92ZXIgPSBmYWxzZTsKIAotCVBhcnNlQWx0ZXJSZXBsU2xvdE9wdGlvbnMoY21kLCAm ZmFpbG92ZXIpOwotCVJlcGxpY2F0aW9uU2xvdEFsdGVyKGNtZC0+c2xvdG5hbWUsIGZhaWxvdmVy KTsKKwlQYXJzZUFsdGVyUmVwbFNsb3RPcHRpb25zKGNtZCwgJnR3b19waGFzZSwgJmZhaWxvdmVy KTsKKwlSZXBsaWNhdGlvblNsb3RBbHRlcihjbWQtPnNsb3RuYW1lLCB0d29fcGhhc2UsIGZhaWxv dmVyKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90d29waGFzZS5o IGIvc3JjL2luY2x1ZGUvYWNjZXNzL3R3b3BoYXNlLmgKaW5kZXggNTYyNDhjMC4uZDQ5M2VkMiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3R3b3BoYXNlLmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3R3b3BoYXNlLmgKQEAgLTYyLDQgKzYyLDcgQEAgZXh0ZXJuIHZvaWQgUHJlcGFy ZVJlZG9SZW1vdmUoVHJhbnNhY3Rpb25JZCB4aWQsIGJvb2wgZ2l2ZVdhcm5pbmcpOwogZXh0ZXJu IHZvaWQgcmVzdG9yZVR3b1BoYXNlRGF0YSh2b2lkKTsKIGV4dGVybiBib29sIExvb2t1cEdYYWN0 KGNvbnN0IGNoYXIgKmdpZCwgWExvZ1JlY1B0ciBwcmVwYXJlX2VuZF9sc24sCiAJCQkJCQlUaW1l c3RhbXBUeiBvcmlnaW5fcHJlcGFyZV90aW1lc3RhbXApOworCitleHRlcm4gYm9vbCBMb29rdXBH WGFjdEJ5U3ViaWQoT2lkIHN1YmlkKTsKKwogI2VuZGlmCQkJCQkJCS8qIFRXT1BIQVNFX0ggKi8K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVyLmgKaW5kZXggZmYwNDM4Yi4u MDc1ODQyYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGxhdW5j aGVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVyLmgKQEAg LTI0LDcgKzI0LDcgQEAgZXh0ZXJuIHZvaWQgQXBwbHlMYXVuY2hlclNobWVtSW5pdCh2b2lkKTsK IAogZXh0ZXJuIHZvaWQgQXBwbHlMYXVuY2hlckZvcmdldFdvcmtlclN0YXJ0VGltZShPaWQgc3Vi aWQpOwogCi1leHRlcm4gdm9pZCBBcHBseUxhdW5jaGVyV2FrZXVwQXRDb21taXQodm9pZCk7Citl eHRlcm4gdm9pZCBBcHBseUxhdW5jaGVyV2FrZXVwQXRFT1hhY3QoYm9vbCBvbl9jb21taXQpOwog ZXh0ZXJuIHZvaWQgQXRFT1hhY3RfQXBwbHlMYXVuY2hlcihib29sIGlzQ29tbWl0KTsKIAogZXh0 ZXJuIGJvb2wgSXNMb2dpY2FsTGF1bmNoZXIodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9zbG90LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90LmgKaW5k ZXggN2I5MzdkMS4uMmZjYjExNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v c2xvdC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaApAQCAtMjQzLDcgKzI0 Myw4IEBAIGV4dGVybiB2b2lkIFJlcGxpY2F0aW9uU2xvdENyZWF0ZShjb25zdCBjaGFyICpuYW1l LCBib29sIGRiX3NwZWNpZmljLAogZXh0ZXJuIHZvaWQgUmVwbGljYXRpb25TbG90UGVyc2lzdCh2 b2lkKTsKIGV4dGVybiB2b2lkIFJlcGxpY2F0aW9uU2xvdERyb3AoY29uc3QgY2hhciAqbmFtZSwg Ym9vbCBub3dhaXQpOwogZXh0ZXJuIHZvaWQgUmVwbGljYXRpb25TbG90RHJvcEFjcXVpcmVkKHZv aWQpOwotZXh0ZXJuIHZvaWQgUmVwbGljYXRpb25TbG90QWx0ZXIoY29uc3QgY2hhciAqbmFtZSwg Ym9vbCBmYWlsb3Zlcik7CitleHRlcm4gdm9pZCBSZXBsaWNhdGlvblNsb3RBbHRlcihjb25zdCBj aGFyICpuYW1lLCBib29sIHR3b19waGFzZSwKKwkJCQkJCQkJIGJvb2wgZmFpbG92ZXIpOwogCiBl eHRlcm4gdm9pZCBSZXBsaWNhdGlvblNsb3RBY3F1aXJlKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wg bm93YWl0KTsKIGV4dGVybiB2b2lkIFJlcGxpY2F0aW9uU2xvdFJlbGVhc2Uodm9pZCk7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaAppbmRleCAxMmY3MWZhLi5hNDQzZjQwIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oCisrKyBiL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgKQEAgLTM3Nyw2ICszNzcsNyBAQCB0eXBl ZGVmIGNoYXIgKigqd2FscmN2X2NyZWF0ZV9zbG90X2ZuKSAoV2FsUmVjZWl2ZXJDb25uICpjb25u LAogICovCiB0eXBlZGVmIHZvaWQgKCp3YWxyY3ZfYWx0ZXJfc2xvdF9mbikgKFdhbFJlY2VpdmVy Q29ubiAqY29ubiwKIAkJCQkJCQkJCSAgY29uc3QgY2hhciAqc2xvdG5hbWUsCisJCQkJCQkJCQkg IGJvb2wgdHdvX3BoYXNlLAogCQkJCQkJCQkJICBib29sIGZhaWxvdmVyKTsKIAogLyoKQEAgLTQ1 NSw4ICs0NTYsOCBAQCBleHRlcm4gUEdETExJTVBPUlQgV2FsUmVjZWl2ZXJGdW5jdGlvbnNUeXBl ICpXYWxSZWNlaXZlckZ1bmN0aW9uczsKIAlXYWxSZWNlaXZlckZ1bmN0aW9ucy0+d2FscmN2X3Nl bmQoY29ubiwgYnVmZmVyLCBuYnl0ZXMpCiAjZGVmaW5lIHdhbHJjdl9jcmVhdGVfc2xvdChjb25u LCBzbG90bmFtZSwgdGVtcG9yYXJ5LCB0d29fcGhhc2UsIGZhaWxvdmVyLCBzbmFwc2hvdF9hY3Rp b24sIGxzbikgXAogCVdhbFJlY2VpdmVyRnVuY3Rpb25zLT53YWxyY3ZfY3JlYXRlX3Nsb3QoY29u biwgc2xvdG5hbWUsIHRlbXBvcmFyeSwgdHdvX3BoYXNlLCBmYWlsb3Zlciwgc25hcHNob3RfYWN0 aW9uLCBsc24pCi0jZGVmaW5lIHdhbHJjdl9hbHRlcl9zbG90KGNvbm4sIHNsb3RuYW1lLCBmYWls b3ZlcikgXAotCVdhbFJlY2VpdmVyRnVuY3Rpb25zLT53YWxyY3ZfYWx0ZXJfc2xvdChjb25uLCBz bG90bmFtZSwgZmFpbG92ZXIpCisjZGVmaW5lIHdhbHJjdl9hbHRlcl9zbG90KGNvbm4sIHNsb3Ru YW1lLCB0d29fcGhhc2UsIGZhaWxvdmVyKSBcCisJV2FsUmVjZWl2ZXJGdW5jdGlvbnMtPndhbHJj dl9hbHRlcl9zbG90KGNvbm4sIHNsb3RuYW1lLCB0d29fcGhhc2UsIGZhaWxvdmVyKQogI2RlZmlu ZSB3YWxyY3ZfZ2V0X2JhY2tlbmRfcGlkKGNvbm4pIFwKIAlXYWxSZWNlaXZlckZ1bmN0aW9ucy0+ d2FscmN2X2dldF9iYWNrZW5kX3BpZChjb25uKQogI2RlZmluZSB3YWxyY3ZfZXhlYyhjb25uLCBl eGVjLCBuUmV0VHlwZXMsIHJldFR5cGVzKSBcCi0tIAoxLjguMy4xCgo= --00000000000084fba0061557c5d5--