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 1qsnCr-009RZP-8A for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Oct 2023 16:46:09 +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 1qsnCp-00COVb-8S for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Oct 2023 16:46:07 +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 1qsnCo-00COUr-SB for pgsql-hackers@lists.postgresql.org; Tue, 17 Oct 2023 16:46:07 +0000 Received: from mail-lf1-x134.google.com ([2a00:1450:4864:20::134]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qsnCl-001Cyh-Ao for pgsql-hackers@postgresql.org; Tue, 17 Oct 2023 16:46:06 +0000 Received: by mail-lf1-x134.google.com with SMTP id 2adb3069b0e04-50305abe5f0so7825747e87.2 for ; Tue, 17 Oct 2023 09:46:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1697561164; x=1698165964; darn=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=sipzpbIb4vWsP5QxMRm47NgaOamb6cn7r0fa0E0TXf8=; b=AmRtm+ueW9YrapBdL+xI9CKObPwFALHI9OHmotn5ju7fi25oPi3a4ZIMi8rVwm9Y9Y 6ctnZ2wp/vqQ/YHJ8MokBAd13trNJ+1ke9krjQ/UUTYa2b7Kl0QsXGf7YnEsouKPBsPi DooZAEE303jfjDhhrOgEDODCqEn5tjxrnz/u8vyvn90+kFx1ZfT2o+bdb+InJ2o/VJ6P N+H7dkc266SA0YFZUnaL04n4tMnf2yYph2NwALCxfhUVrNwlKP8FTRgIuTY/DU/xTtrE UVmfyC38LBUDymEfC/k8O0lrtQUehLLmydEqrcM8sG1xHdt9QXrj93uK+18wUFfgPPnS JwJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697561164; x=1698165964; 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=sipzpbIb4vWsP5QxMRm47NgaOamb6cn7r0fa0E0TXf8=; b=wq//fKy8Okfa0xn2jc5BZ+h7P+V0UGgeoRMFVBEPVRTfC+wyzuzwkj+J9IJLxqwk6p xwDqFXnbP/mHX7Ofi9+ltJG/eT0fEX3waHcKawXcLinpIU1oPc8wngv62uIlr/MSAkQE +gWPXKls9wlowUZww7EEZnAU4vImajB7NAPVGmbjzS0O+tlOa3n+txac2UofbEn86u1O fek62ue3blIO8Jsqho93HvWdaqTuHUqkLIukyu3WwMB7sGYcROKTwWzJ2Zx+JBIJ7140 vbZ3YcHiN5poK6+S580wVfUa/XziKDov+VXWkB4zRHlkqDpS8exDo6L40w4DD05jUUoS tl5Q== X-Gm-Message-State: AOJu0YzQn+rrXvCIrmBdZgRUNnp37XfmN3IjqUL3m0LzHigcPp8UTShz L/94mJ4ksdQcbqF36ZQpkQjfof8ihZkHUgqgesM= X-Google-Smtp-Source: AGHT+IGINCbcGcIzujEMeU0+avf5Y8ppnFuedP1v+FnWlLYrCYCv1kM260C56fV62/8zUvvyLcgdrM3q6kFWevxk1SI= X-Received: by 2002:a05:6512:3195:b0:503:34b8:20b with SMTP id i21-20020a056512319500b0050334b8020bmr2938788lfe.65.1697561163504; Tue, 17 Oct 2023 09:46:03 -0700 (PDT) MIME-Version: 1.0 References: <20230714151626.rhgae7taigk2xrq7@awork3.anarazel.de> <20231005183400.n5myso7vu6crd656@alap3.anarazel.de> <20231009204702.cy3ilp6wgh7a5qms@awork3.anarazel.de> In-Reply-To: From: Robert Haas Date: Tue, 17 Oct 2023 12:45:52 -0400 Message-ID: Subject: Re: New WAL record to detect the checkpoint redo location To: Michael Paquier Cc: Andres Freund , Dilip Kumar , Heikki Linnakangas , pgsql-hackers Content-Type: multipart/mixed; boundary="00000000000022bbb90607ec42a5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000022bbb90607ec42a5 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Oct 13, 2023 at 3:29=E2=80=AFAM Michael Paquier wrote: > Now looking at 0002, where you should be careful about the code > indentation or koel will complain. Fixed in the attached version. > This makes the new code call LocalSetXLogInsertAllowed() and what we > set for checkPoint.PrevTimeLineID after taking the insertion locks, > which should be OK. Cool. > I've mentioned as well a test in pg_walinspect after one of the > checkpoints generated there, but what you do here is enough for the > online case. I don't quite understand what you're saying here. If you're suggesting a potential improvement, can you be a bit more clear and explicit about what the suggestion is? > + /* > + * XLogInsertRecord will have updated RedoRecPtr, but we need to = copy > + * that into the record that will be inserted when the checkpoint= is > + * complete. > + */ > + checkPoint.redo =3D RedoRecPtr; > > For online checkpoints, a very important point is that > XLogCtl->Insert.RedoRecPtr is also updated in XLogInsertRecord(). > Perhaps that's worth an addition? I was a bit confused first that we > do the following for shutdown checkpoints: > RedoRecPtr =3D XLogCtl->Insert.RedoRecPtr =3D checkPoint.redo; > > Then repeat this pattern for non-shutdown checkpoints a few lines down > without touching the copy of the redo LSN in XLogCtl->Insert, because > of course we don't hold the WAL insert locks in an exclusive fashion > here: > checkPoint.redo =3D RedoRecPtr; > > My point is that this is not only about RedoRecPtr, but also about > XLogCtl->Insert.RedoRecPtr here. The comment in ReserveXLogSwitch() > says that. I have adjusted the comment in CreateCheckPoint to hopefully address this concern. I don't understand what you mean about ReserveXLogSwitch(), though. --=20 Robert Haas EDB: http://www.enterprisedb.com --00000000000022bbb90607ec42a5 Content-Type: application/octet-stream; name="v9-0001-During-online-checkpoints-insert-XLOG_CHECKPOINT_.patch" Content-Disposition: attachment; filename="v9-0001-During-online-checkpoints-insert-XLOG_CHECKPOINT_.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lnuk2d1t0 RnJvbSBjZDU0ZTQ5MmYxOWZlOTM4NDg1MGU3M2FiNGVlM2IzZTQ4ODFiYjU4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFR1ZSwgMTcgT2N0IDIwMjMgMTI6Mjc6MDMgLTA0MDAKU3ViamVjdDogW1BBVENIIHY5XSBE dXJpbmcgb25saW5lIGNoZWNrcG9pbnRzLCBpbnNlcnQgWExPR19DSEVDS1BPSU5UX1JFRE8gYXQK IHJlZG8gcG9pbnQuCgpUaGlzIGFsbG93cyB0b29scyB0aGF0IHJlYWQgdGhlIFdBTCBzZXF1ZW50 aWFsbHkgdG8gaWRlbnRpZnkgKHBvc3NpYmxlKQpyZWRvIHBvaW50cyB3aGVuIHRoZXkncmUgcmVh Y2hlZCwgcmF0aGVyIHRoYW4gb25seSBiZWluZyBhYmxlIHRvCmRldGVjdCB0aGVtIGluIHJldHJv c3BlY3Qgd2hlbiBYTE9HX0NIRUNLUE9JTlRfT05MSU5FIGlzIGZvdW5kLCBwb3NzaWJseQptdWNo IGxhdGVyIGluIHRoZSBXQUwgc3RyZWFtLgoKQW55IHJlZG8gbG9jYXRpb24gdGhhdCBwcmVjZWRl cyB0aGUgY2hlY2twb2ludCBsb2NhdGlvbiBzaG91bGQgbm93IHBvaW50CnRvIGFuIFhMT0dfQ0hF Q0tQT0lOVF9SRURPIHJlY29yZCwgc28gYWRkIGEgY3Jvc3MtY2hlY2sgdG8gdmVyaWZ5IHRoaXMu CgpXaGlsZSBhZGp1c3RpbmcgdGhlIGNvZGUgaW4gQ3JlYXRlQ2hlY2tQb2ludCgpIGZvciB0aGlz IHBhdGNoLCBJIG1hZGUgaXQKY2FsbCBXQUxJbnNlcnRMb2NrQWNxdWlyZUV4Y2x1c2l2ZSBhIGJp dCBsYXRlciB0aGFuIGJlZm9yZSwgc2luY2UgdGhlcmUKYXBwZWFycyB0byBiZSBubyBuZWVkIGZv ciBpdCB0byBiZSBoZWxkIHdoaWxlIGNoZWNraW5nIHdoZXRoZXIgdGhlIHN5c3RlbQppcyBpZGxl LCB3aGV0aGVyIHRoaXMgaXMgYW4gZW5kLW9mLXJlY292ZXJ5IGNoZWNrcG9pbnQsIG9yIHdoYXQg dGhlIGN1cnJlbnQKdGltZWxpbmUgaXMuCgpQYXRjaCBieSBtZSwgYmFzZWQgaW4gcGFydCBvbiBl YXJsaWVyIHdvcmsgZnJvbSBEaWxpcCBLdW1hci4gUmV2aWV3IGJ5CkRpbGlwIEt1bWFyLCBBbWl0 IEthcGlsYSBhbmQgQW5kcmVzIEZyZXVuZC4gRGlsaXAncyBlYXJsaWVyIHBhdGNoIHdhcwphbHNv IHJldmlld2VkIGJ5IE1pY2hhZWwgUGFxdWllci4KCkRpc2N1c3Npb246IGh0dHA6Ly9wb3N0Z3Iu ZXMvbS9DQStUZ21vWXktVmM2RzlRS2NBS05rc0NhMjljdl9fY3pyK045WF9RQ3hFZlFWcHBfOHdA bWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rlc2Mu YyAgICB8ICAgNyArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgICAgICAgICB8 IDE5MyArKysrKysrKysrKysrKystLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9ncmVjb3ZlcnkuYyB8ICAxMSArKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9k ZWNvZGUuYyAgfCAgIDEgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19jb250cm9sLmggICAgICAg ICAgfCAgIDEgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgfCAg IDEgKwogNiBmaWxlcyBjaGFuZ2VkLCAxNTYgaW5zZXJ0aW9ucygrKSwgNTggZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rlc2MuYwppbmRleCBmMzkwYzE3N2U0Li4z N2Y1OWJkYTdlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rl c2MuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rlc2MuYwpAQCAtMTQ4 LDYgKzE0OCwxMCBAQCB4bG9nX2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAq cmVjb3JkKQogCQkJCQkJIExTTl9GT1JNQVRfQVJHUyh4bHJlYy5vdmVyd3JpdHRlbl9sc24pLAog CQkJCQkJIHRpbWVzdGFtcHR6X3RvX3N0cih4bHJlYy5vdmVyd3JpdGVfdGltZSkpOwogCX0KKwll bHNlIGlmIChpbmZvID09IFhMT0dfQ0hFQ0tQT0lOVF9SRURPKQorCXsKKwkJLyogTm8gZGV0YWls cyB0byB3cml0ZSBvdXQgKi8KKwl9CiB9CiAKIGNvbnN0IGNoYXIgKgpAQCAtMTk2LDYgKzIwMCw5 IEBAIHhsb2dfaWRlbnRpZnkodWludDggaW5mbykKIAkJY2FzZSBYTE9HX0ZQSV9GT1JfSElOVDoK IAkJCWlkID0gIkZQSV9GT1JfSElOVCI7CiAJCQlicmVhazsKKwkJY2FzZSBYTE9HX0NIRUNLUE9J TlRfUkVETzoKKwkJCWlkID0gIkNIRUNLUE9JTlRfUkVETyI7CisJCQlicmVhazsKIAl9CiAKIAly ZXR1cm4gaWQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKaW5kZXggYzBlNGNhNTA4OS4uY2Vh MTNlM2Q1OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAtNTU5LDYgKzU1OSwxNiBA QCB0eXBlZGVmIHN0cnVjdCBYTG9nQ3RsRGF0YQogCXNsb2NrX3QJCWluZm9fbGNrOwkJLyogbG9j a3Mgc2hhcmVkIHZhcmlhYmxlcyBzaG93biBhYm92ZSAqLwogfSBYTG9nQ3RsRGF0YTsKIAorLyoK KyAqIENsYXNzaWZpY2F0aW9uIG9mIFhMb2dSZWNvcmRJbnNlcnQgb3BlcmF0aW9ucy4KKyAqLwor dHlwZWRlZiBlbnVtCit7CisJV0FMSU5TRVJUX05PUk1BTCwKKwlXQUxJTlNFUlRfU1BFQ0lBTF9T V0lUQ0gsCisJV0FMSU5TRVJUX1NQRUNJQUxfQ0hFQ0tQT0lOVAorfSBXYWxJbnNlcnRDbGFzczsK Kwogc3RhdGljIFhMb2dDdGxEYXRhICpYTG9nQ3RsID0gTlVMTDsKIAogLyogYSBwcml2YXRlIGNv cHkgb2YgWExvZ0N0bC0+SW5zZXJ0LldBTEluc2VydExvY2tzLCBmb3IgY29udmVuaWVuY2UgKi8K QEAgLTczOSwxMyArNzQ5LDIxIEBAIFhMb2dJbnNlcnRSZWNvcmQoWExvZ1JlY0RhdGEgKnJkYXRh LAogCWJvb2wJCWluc2VydGVkOwogCVhMb2dSZWNvcmQgKnJlY2hkciA9IChYTG9nUmVjb3JkICop IHJkYXRhLT5kYXRhOwogCXVpbnQ4CQlpbmZvID0gcmVjaGRyLT54bF9pbmZvICYgflhMUl9JTkZP X01BU0s7Ci0JYm9vbAkJaXNMb2dTd2l0Y2ggPSAocmVjaGRyLT54bF9ybWlkID09IFJNX1hMT0df SUQgJiYKLQkJCQkJCQkgICBpbmZvID09IFhMT0dfU1dJVENIKTsKKwlXYWxJbnNlcnRDbGFzcyBj bGFzcyA9IFdBTElOU0VSVF9OT1JNQUw7CiAJWExvZ1JlY1B0cglTdGFydFBvczsKIAlYTG9nUmVj UHRyCUVuZFBvczsKIAlib29sCQlwcmV2RG9QYWdlV3JpdGVzID0gZG9QYWdlV3JpdGVzOwogCVRp bWVMaW5lSUQJaW5zZXJ0VExJOwogCisJLyogRG9lcyB0aGlzIHJlY29yZCB0eXBlIHJlcXVpcmUg c3BlY2lhbCBoYW5kbGluZz8gKi8KKwlpZiAodW5saWtlbHkocmVjaGRyLT54bF9ybWlkID09IFJN X1hMT0dfSUQpKQorCXsKKwkJaWYgKGluZm8gPT0gWExPR19TV0lUQ0gpCisJCQljbGFzcyA9IFdB TElOU0VSVF9TUEVDSUFMX1NXSVRDSDsKKwkJZWxzZSBpZiAoaW5mbyA9PSBYTE9HX0NIRUNLUE9J TlRfUkVETykKKwkJCWNsYXNzID0gV0FMSU5TRVJUX1NQRUNJQUxfQ0hFQ0tQT0lOVDsKKwl9CisK IAkvKiB3ZSBhc3N1bWUgdGhhdCBhbGwgb2YgdGhlIHJlY29yZCBoZWFkZXIgaXMgaW4gdGhlIGZp cnN0IGNodW5rICovCiAJQXNzZXJ0KHJkYXRhLT5sZW4gPj0gU2l6ZU9mWExvZ1JlY29yZCk7CiAK QEAgLTc5Myw3ICs4MTEsNyBAQCBYTG9nSW5zZXJ0UmVjb3JkKFhMb2dSZWNEYXRhICpyZGF0YSwK IAkgKi8KIAlTVEFSVF9DUklUX1NFQ1RJT04oKTsKIAotCWlmIChsaWtlbHkoIWlzTG9nU3dpdGNo KSkKKwlpZiAobGlrZWx5KGNsYXNzID09IFdBTElOU0VSVF9OT1JNQUwpKQogCXsKIAkJV0FMSW5z ZXJ0TG9ja0FjcXVpcmUoKTsKIApAQCAtODQzLDcgKzg2MSw3IEBAIFhMb2dJbnNlcnRSZWNvcmQo WExvZ1JlY0RhdGEgKnJkYXRhLAogCQkvKiBOb3JtYWwgcmVjb3JkcyBhcmUgYWx3YXlzIGluc2Vy dGVkLiAqLwogCQlpbnNlcnRlZCA9IHRydWU7CiAJfQotCWVsc2UKKwllbHNlIGlmIChjbGFzcyA9 PSBXQUxJTlNFUlRfU1BFQ0lBTF9TV0lUQ0gpCiAJewogCQkvKgogCQkgKiBJbiBvcmRlciB0byBp bnNlcnQgYW4gWExPR19TV0lUQ0ggcmVjb3JkLCB3ZSBuZWVkIHRvIGhvbGQgYWxsIG9mCkBAIC04 NTIsMTQgKzg3MCwzMiBAQCBYTG9nSW5zZXJ0UmVjb3JkKFhMb2dSZWNEYXRhICpyZGF0YSwKIAkJ ICogcmVtYWlucyBpbiB0aGUgY3VycmVudCBXQUwgc2VnbWVudCBhbmQgY2xhaW1lZCBhbGwgb2Yg aXQuCiAJCSAqCiAJCSAqIE5vbmV0aGVsZXNzLCB0aGlzIGNhc2UgaXMgc2ltcGxlciB0aGFuIHRo ZSBub3JtYWwgY2FzZXMgaGFuZGxlZAotCQkgKiBhYm92ZSwgd2hpY2ggbXVzdCBjaGVjayBmb3Ig Y2hhbmdlcyBpbiBkb1BhZ2VXcml0ZXMgYW5kIFJlZG9SZWNQdHIuCi0JCSAqIFRob3NlIGNoZWNr cyBhcmUgb25seSBuZWVkZWQgZm9yIHJlY29yZHMgdGhhdCBjYW4gY29udGFpbgotCQkgKiBmdWxs LXBhZ2VzIGltYWdlcywgYW5kIGFuIFhMT0dfU1dJVENIIHJlY29yZCBuZXZlciBkb2VzLgorCQkg KiBiZWxvdywgd2hpY2ggbXVzdCBjaGVjayBmb3IgY2hhbmdlcyBpbiBkb1BhZ2VXcml0ZXMgYW5k IFJlZG9SZWNQdHIuCisJCSAqIFRob3NlIGNoZWNrcyBhcmUgb25seSBuZWVkZWQgZm9yIHJlY29y ZHMgdGhhdCBjYW4gY29udGFpbiBidWZmZXIKKwkJICogcmVmZXJlbmNlcywgYW5kIGFuIFhMT0df U1dJVENIIHJlY29yZCBuZXZlciBkb2VzLgogCQkgKi8KIAkJQXNzZXJ0KGZwd19sc24gPT0gSW52 YWxpZFhMb2dSZWNQdHIpOwogCQlXQUxJbnNlcnRMb2NrQWNxdWlyZUV4Y2x1c2l2ZSgpOwogCQlp bnNlcnRlZCA9IFJlc2VydmVYTG9nU3dpdGNoKCZTdGFydFBvcywgJkVuZFBvcywgJnJlY2hkci0+ eGxfcHJldik7CiAJfQorCWVsc2UKKwl7CisJCUFzc2VydChjbGFzcyA9PSBXQUxJTlNFUlRfU1BF Q0lBTF9DSEVDS1BPSU5UKTsKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIHVwZGF0ZSBib3RoIHRo ZSBsb2NhbCBhbmQgc2hhcmVkIGNvcGllcyBvZiBSZWRvUmVjUHRyLAorCQkgKiB3aGljaCBtZWFu cyB0aGF0IHdlIG5lZWQgdG8gaG9sZCBhbGwgdGhlIFdBTCBpbnNlcnRpb24gbG9ja3MuCisJCSAq IEhvd2V2ZXIsIHRoZXJlIGNhbid0IGJlIGFueSBidWZmZXIgcmVmZXJlbmNlcywgc28gYXMgYWJv dmUsIHdlIG5lZWQKKwkJICogbm90IGNoZWNrIFJlZG9SZWNQdHIgYmVmb3JlIGluc2VydGluZyB0 aGUgcmVjb3JkOyB3ZSBqdXN0IG5lZWQgdG8KKwkJICogdXBkYXRlIGl0IGFmdGVyd2FyZHMuCisJ CSAqLworCQlBc3NlcnQoZnB3X2xzbiA9PSBJbnZhbGlkWExvZ1JlY1B0cik7CisJCVdBTEluc2Vy dExvY2tBY3F1aXJlRXhjbHVzaXZlKCk7CisJCVJlc2VydmVYTG9nSW5zZXJ0TG9jYXRpb24ocmVj aGRyLT54bF90b3RfbGVuLCAmU3RhcnRQb3MsICZFbmRQb3MsCisJCQkJCQkJCSAgJnJlY2hkci0+ eGxfcHJldik7CisJCVJlZG9SZWNQdHIgPSBJbnNlcnQtPlJlZG9SZWNQdHIgPSBTdGFydFBvczsK KwkJaW5zZXJ0ZWQgPSB0cnVlOworCX0KIAogCWlmIChpbnNlcnRlZCkKIAl7CkBAIC04NzYsNyAr OTEyLDggQEAgWExvZ0luc2VydFJlY29yZChYTG9nUmVjRGF0YSAqcmRhdGEsCiAJCSAqIEFsbCB0 aGUgcmVjb3JkIGRhdGEsIGluY2x1ZGluZyB0aGUgaGVhZGVyLCBpcyBub3cgcmVhZHkgdG8gYmUK IAkJICogaW5zZXJ0ZWQuIENvcHkgdGhlIHJlY29yZCBpbiB0aGUgc3BhY2UgcmVzZXJ2ZWQuCiAJ CSAqLwotCQlDb3B5WExvZ1JlY29yZFRvV0FMKHJlY2hkci0+eGxfdG90X2xlbiwgaXNMb2dTd2l0 Y2gsIHJkYXRhLAorCQlDb3B5WExvZ1JlY29yZFRvV0FMKHJlY2hkci0+eGxfdG90X2xlbiwKKwkJ CQkJCQljbGFzcyA9PSBXQUxJTlNFUlRfU1BFQ0lBTF9TV0lUQ0gsIHJkYXRhLAogCQkJCQkJCVN0 YXJ0UG9zLCBFbmRQb3MsIGluc2VydFRMSSk7CiAKIAkJLyoKQEAgLTkzNSw3ICs5NzIsNyBAQCBY TG9nSW5zZXJ0UmVjb3JkKFhMb2dSZWNEYXRhICpyZGF0YSwKIAkgKiBwYWRkaW5nIHNwYWNlIHRo YXQgZmlsbHMgdGhlIHJlc3Qgb2YgdGhlIHNlZ21lbnQsIGFuZCBwZXJmb3JtCiAJICogZW5kLW9m LXNlZ21lbnQgYWN0aW9ucyAoZWcsIG5vdGlmeWluZyBhcmNoaXZlcikuCiAJICovCi0JaWYgKGlz TG9nU3dpdGNoKQorCWlmIChjbGFzcyA9PSBXQUxJTlNFUlRfU1BFQ0lBTF9TV0lUQ0gpCiAJewog CQlUUkFDRV9QT1NUR1JFU1FMX1dBTF9TV0lUQ0goKTsKIAkJWExvZ0ZsdXNoKEVuZFBvcyk7CkBA IC0xMDU0LDggKzEwOTEsMTIgQEAgWExvZ0luc2VydFJlY29yZChYTG9nUmVjRGF0YSAqcmRhdGEs CiAgKgogICogTkI6IFRoZSBzcGFjZSBjYWxjdWxhdGlvbiBoZXJlIG11c3QgbWF0Y2ggdGhlIGNv ZGUgaW4gQ29weVhMb2dSZWNvcmRUb1dBTCwKICAqIHdoZXJlIHdlIGFjdHVhbGx5IGNvcHkgdGhl IHJlY29yZCB0byB0aGUgcmVzZXJ2ZWQgc3BhY2UuCisgKgorICogTkI6IFRlc3Rpbmcgc2hvd3Mg dGhhdCBYTG9nSW5zZXJ0UmVjb3JkIHJ1bnMgZmFzdGVyIGlmIHRoaXMgY29kZSBpcyBpbmxpbmVk OworICogaG93ZXZlciwgYmVjYXVzZSB0aGVyZSBhcmUgdHdvIGNhbGwgc2l0ZXMsIHRoZSBjb21w aWxlciBpcyByZWx1Y3RhbnQgdG8KKyAqIGlubGluZS4gV2UgdXNlIHBnX2F0dHJpYnV0ZV9hbHdh eXNfaW5saW5lIGhlcmUgdG8gdHJ5IHRvIGNvbnZpbmNlIGl0LgogICovCi1zdGF0aWMgdm9pZAor c3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQKIFJlc2VydmVYTG9nSW5zZXJ0 TG9jYXRpb24oaW50IHNpemUsIFhMb2dSZWNQdHIgKlN0YXJ0UG9zLCBYTG9nUmVjUHRyICpFbmRQ b3MsCiAJCQkJCQkgIFhMb2dSZWNQdHIgKlByZXZQdHIpCiB7CkBAIC02NDc1LDE3ICs2NTE2LDIy IEBAIHVwZGF0ZV9jaGVja3BvaW50X2Rpc3BsYXkoaW50IGZsYWdzLCBib29sIHJlc3RhcnRwb2lu dCwgYm9vbCByZXNldCkKICAqIEluIHBhcnRpY3VsYXIgbm90ZSB0aGF0IHRoaXMgcm91dGluZSBp cyBzeW5jaHJvbm91cyBhbmQgZG9lcyBub3QgcGF5CiAgKiBhdHRlbnRpb24gdG8gQ0hFQ0tQT0lO VF9XQUlULgogICoKLSAqIElmICFzaHV0ZG93biB0aGVuIHdlIGFyZSB3cml0aW5nIGFuIG9ubGlu ZSBjaGVja3BvaW50LiBUaGlzIGlzIGEgdmVyeSBzcGVjaWFsCi0gKiBraW5kIG9mIG9wZXJhdGlv biBhbmQgV0FMIHJlY29yZCBiZWNhdXNlIHRoZSBjaGVja3BvaW50IGFjdGlvbiBvY2N1cnMgb3Zl cgotICogYSBwZXJpb2Qgb2YgdGltZSB5ZXQgbG9naWNhbGx5IG9jY3VycyBhdCBqdXN0IGEgc2lu Z2xlIExTTi4gVGhlIGxvZ2ljYWwKLSAqIHBvc2l0aW9uIG9mIHRoZSBXQUwgcmVjb3JkIChyZWRv IHB0cikgaXMgdGhlIHNhbWUgb3IgZWFybGllciB0aGFuIHRoZQotICogcGh5c2ljYWwgcG9zaXRp b24uIFdoZW4gd2UgcmVwbGF5IFdBTCB3ZSBsb2NhdGUgdGhlIGNoZWNrcG9pbnQgdmlhIGl0cwot ICogcGh5c2ljYWwgcG9zaXRpb24gdGhlbiByZWFkIHRoZSByZWRvIHB0ciBhbmQgYWN0dWFsbHkg c3RhcnQgcmVwbGF5IGF0IHRoZQotICogZWFybGllciBsb2dpY2FsIHBvc2l0aW9uLiBOb3RlIHRo YXQgd2UgZG9uJ3Qgd3JpdGUgKmFueXRoaW5nKiB0byBXQUwgYXQKLSAqIHRoZSBsb2dpY2FsIHBv c2l0aW9uLCBzbyB0aGF0IGxvY2F0aW9uIGNvdWxkIGJlIGFueSBvdGhlciBraW5kIG9mIFdBTCBy ZWNvcmQuCi0gKiBBbGwgb2YgdGhpcyBtZWNoYW5pc20gYWxsb3dzIHVzIHRvIGNvbnRpbnVlIHdv cmtpbmcgd2hpbGUgd2UgY2hlY2twb2ludC4KLSAqIEFzIGEgcmVzdWx0LCB0aW1pbmcgb2YgYWN0 aW9ucyBpcyBjcml0aWNhbCBoZXJlIGFuZCBiZSBjYXJlZnVsIHRvIG5vdGUgdGhhdAotICogdGhp cyBmdW5jdGlvbiB3aWxsIGxpa2VseSB0YWtlIG1pbnV0ZXMgdG8gZXhlY3V0ZSBvbiBhIGJ1c3kg c3lzdGVtLgorICogSWYgIXNodXRkb3duIHRoZW4gd2UgYXJlIHdyaXRpbmcgYW4gb25saW5lIGNo ZWNrcG9pbnQuIEFuIFhMT0dfQ0hFQ0tQT0lOVF9SRURPCisgKiByZWNvcmQgaXMgaW5zZXJ0ZWQg aW50byBXQUwgYXQgdGhlIGxvZ2ljYWwgbG9jYXRpb24gb2YgdGhlIGNoZWNrcG9pbnQsIGJlZm9y ZQorICogZmx1c2hpbmcgYW55dGhpbmcgdG8gZGlzaywgYW5kIHdoZW4gdGhlIGNoZWNrcG9pbnQg aXMgZXZlbnR1YWxseSBjb21wbGV0ZWQsCisgKiBhbmQgaXQgaXMgZnJvbSB0aGlzIHBvaW50IHRo YXQgV0FMIHJlcGxheSB3aWxsIGJlZ2luIGluIHRoZSBjYXNlIG9mIGEgcmVjb3ZlcnkKKyAqIGZy b20gdGhpcyBjaGVja3BvaW50LiBPbmNlIGV2ZXJ5dGhpbmcgaXMgd3JpdHRlbiB0byBkaXNrLCBh bgorICogWExPR19DSEVDS1BPSU5UX09OTElORSByZWNvcmQgaXMgd3JpdHRlbiB0byBjb21wbGV0 ZSB0aGUgY2hlY2twb2ludCwgYW5kCisgKiBwb2ludHMgYmFjayB0byB0aGUgZWFybGllciBYTE9H X0NIRUNLUE9JTlRfUkVETyByZWNvcmQuIFRoaXMgbWVjaGFuaXNtIGFsbG93cworICogb3RoZXIg d3JpdGUtYWhlYWQgbG9nIHJlY29yZHMgdG8gYmUgd3JpdHRlbiB3aGlsZSB0aGUgY2hlY2twb2lu dCBpcyBpbgorICogcHJvZ3Jlc3MsIGJ1dCB3ZSBtdXN0IGJlIHZlcnkgY2FyZWZ1bCBhYm91dCBv cmRlciBvZiBvcGVyYXRpb25zLiBUaGlzIGZ1bmN0aW9uCisgKiBtYXkgdGFrZSBtYW55IG1pbnV0 ZXMgdG8gZXhlY3V0ZSBvbiBhIGJ1c3kgc3lzdGVtLgorICoKKyAqIE9uIHRoZSBvdGhlciBoYW5k LCB3aGVuIHNodXRkb3duIGlzIHRydWUsIGNvbmN1cnJlbnQgaW5zZXJ0aW9uIGludG8gdGhlCisg KiB3cml0ZS1haGVhZCBsb2cgaXMgaW1wb3NzaWJsZSwgc28gdGhlcmUgaXMgbm8gbmVlZCBmb3Ig dHdvIHNlcGFyYXRlIHJlY29yZHMuCisgKiBJbiB0aGlzIGNhc2UsIHdlIG9ubHkgaW5zZXJ0IGFu IFhMT0dfQ0hFQ0tQT0lOVF9TSFVURE9XTiByZWNvcmQsIGFuZCBpdCdzCisgKiBib3RoIHRoZSBy ZWNvcmQgbWFya2luZyB0aGUgY29tcGxldGlvbiBvZiB0aGUgY2hlY2twb2ludCBhbmQgdGhlIGxv Y2F0aW9uCisgKiBmcm9tIHdoaWNoIFdBTCByZXBsYXkgd291bGQgYmVnaW4gaWYgbmVlZGVkLgog ICovCiB2b2lkCiBDcmVhdGVDaGVja1BvaW50KGludCBmbGFncykKQEAgLTY0OTcsNyArNjU0Myw2 IEBAIENyZWF0ZUNoZWNrUG9pbnQoaW50IGZsYWdzKQogCVhMb2dDdGxJbnNlcnQgKkluc2VydCA9 ICZYTG9nQ3RsLT5JbnNlcnQ7CiAJdWludDMyCQlmcmVlc3BhY2U7CiAJWExvZ1JlY1B0cglQcmlv clJlZG9QdHI7Ci0JWExvZ1JlY1B0cgljdXJJbnNlcnQ7CiAJWExvZ1JlY1B0cglsYXN0X2ltcG9y dGFudF9sc247CiAJVmlydHVhbFRyYW5zYWN0aW9uSWQgKnZ4aWRzOwogCWludAkJCW52eGlkczsK QEAgLTY1NjcsMTMgKzY2MTIsNiBAQCBDcmVhdGVDaGVja1BvaW50KGludCBmbGFncykKIAkgKi8K IAlsYXN0X2ltcG9ydGFudF9sc24gPSBHZXRMYXN0SW1wb3J0YW50UmVjUHRyKCk7CiAKLQkvKgot CSAqIFdlIG11c3QgYmxvY2sgY29uY3VycmVudCBpbnNlcnRpb25zIHdoaWxlIGV4YW1pbmluZyBp bnNlcnQgc3RhdGUgdG8KLQkgKiBkZXRlcm1pbmUgdGhlIGNoZWNrcG9pbnQgUkVETyBwb2ludGVy LgotCSAqLwotCVdBTEluc2VydExvY2tBY3F1aXJlRXhjbHVzaXZlKCk7Ci0JY3VySW5zZXJ0ID0g WExvZ0J5dGVQb3NUb1JlY1B0cihJbnNlcnQtPkN1cnJCeXRlUG9zKTsKLQogCS8qCiAJICogSWYg dGhpcyBpc24ndCBhIHNodXRkb3duIG9yIGZvcmNlZCBjaGVja3BvaW50LCBhbmQgaWYgdGhlcmUg aGFzIGJlZW4gbm8KIAkgKiBXQUwgYWN0aXZpdHkgcmVxdWlyaW5nIGEgY2hlY2twb2ludCwgc2tp cCBpdC4gIFRoZSBpZGVhIGhlcmUgaXMgdG8KQEAgLTY1ODQsNyArNjYyMiw2IEBAIENyZWF0ZUNo ZWNrUG9pbnQoaW50IGZsYWdzKQogCXsKIAkJaWYgKGxhc3RfaW1wb3J0YW50X2xzbiA9PSBDb250 cm9sRmlsZS0+Y2hlY2tQb2ludCkKIAkJewotCQkJV0FMSW5zZXJ0TG9ja1JlbGVhc2UoKTsKIAkJ CUVORF9DUklUX1NFQ1RJT04oKTsKIAkJCWVyZXBvcnQoREVCVUcxLAogCQkJCQkoZXJybXNnX2lu dGVybmFsKCJjaGVja3BvaW50IHNraXBwZWQgYmVjYXVzZSBzeXN0ZW0gaXMgaWRsZSIpKSk7CkBA IC02NjA2LDM4ICs2NjQzLDQ3IEBAIENyZWF0ZUNoZWNrUG9pbnQoaW50IGZsYWdzKQogCWVsc2UK IAkJY2hlY2tQb2ludC5QcmV2VGltZUxpbmVJRCA9IGNoZWNrUG9pbnQuVGhpc1RpbWVMaW5lSUQ7 CiAKLQljaGVja1BvaW50LmZ1bGxQYWdlV3JpdGVzID0gSW5zZXJ0LT5mdWxsUGFnZVdyaXRlczsK LQogCS8qCi0JICogQ29tcHV0ZSBuZXcgUkVETyByZWNvcmQgcHRyID0gbG9jYXRpb24gb2YgbmV4 dCBYTE9HIHJlY29yZC4KLQkgKgotCSAqIE5COiB0aGlzIGlzIE5PVCBuZWNlc3NhcmlseSB3aGVy ZSB0aGUgY2hlY2twb2ludCByZWNvcmQgaXRzZWxmIHdpbGwgYmUsCi0JICogc2luY2Ugb3RoZXIg YmFja2VuZHMgbWF5IGluc2VydCBtb3JlIFhMT0cgcmVjb3JkcyB3aGlsZSB3ZSdyZSBvZmYgZG9p bmcKLQkgKiB0aGUgYnVmZmVyIGZsdXNoIHdvcmsuICBUaG9zZSBYTE9HIHJlY29yZHMgYXJlIGxv Z2ljYWxseSBhZnRlciB0aGUKLQkgKiBjaGVja3BvaW50LCBldmVuIHRob3VnaCBwaHlzaWNhbGx5 IGJlZm9yZSBpdC4gIEdvdCB0aGF0PworCSAqIFdlIG11c3QgYmxvY2sgY29uY3VycmVudCBpbnNl cnRpb25zIHdoaWxlIGV4YW1pbmluZyBpbnNlcnQgc3RhdGUuCiAJICovCi0JZnJlZXNwYWNlID0g SU5TRVJUX0ZSRUVTUEFDRShjdXJJbnNlcnQpOwotCWlmIChmcmVlc3BhY2UgPT0gMCkKKwlXQUxJ bnNlcnRMb2NrQWNxdWlyZUV4Y2x1c2l2ZSgpOworCisJY2hlY2tQb2ludC5mdWxsUGFnZVdyaXRl cyA9IEluc2VydC0+ZnVsbFBhZ2VXcml0ZXM7CisKKwlpZiAoc2h1dGRvd24pCiAJewotCQlpZiAo WExvZ1NlZ21lbnRPZmZzZXQoY3VySW5zZXJ0LCB3YWxfc2VnbWVudF9zaXplKSA9PSAwKQotCQkJ Y3VySW5zZXJ0ICs9IFNpemVPZlhMb2dMb25nUEhEOwotCQllbHNlCi0JCQljdXJJbnNlcnQgKz0g U2l6ZU9mWExvZ1Nob3J0UEhEOwotCX0KLQljaGVja1BvaW50LnJlZG8gPSBjdXJJbnNlcnQ7CisJ CVhMb2dSZWNQdHIJY3VySW5zZXJ0ID0gWExvZ0J5dGVQb3NUb1JlY1B0cihJbnNlcnQtPkN1cnJC eXRlUG9zKTsKIAotCS8qCi0JICogSGVyZSB3ZSB1cGRhdGUgdGhlIHNoYXJlZCBSZWRvUmVjUHRy IGZvciBmdXR1cmUgWExvZ0luc2VydCBjYWxsczsgdGhpcwotCSAqIG11c3QgYmUgZG9uZSB3aGls ZSBob2xkaW5nIGFsbCB0aGUgaW5zZXJ0aW9uIGxvY2tzLgotCSAqCi0JICogTm90ZTogaWYgd2Ug ZmFpbCB0byBjb21wbGV0ZSB0aGUgY2hlY2twb2ludCwgUmVkb1JlY1B0ciB3aWxsIGJlIGxlZnQK LQkgKiBwb2ludGluZyBwYXN0IHdoZXJlIGl0IHJlYWxseSBuZWVkcyB0byBwb2ludC4gIFRoaXMg aXMgb2theTsgdGhlIG9ubHkKLQkgKiBjb25zZXF1ZW5jZSBpcyB0aGF0IFhMb2dJbnNlcnQgbWln aHQgYmFjayB1cCB3aG9sZSBidWZmZXJzIHRoYXQgaXQKLQkgKiBkaWRuJ3QgcmVhbGx5IG5lZWQg dG8uICBXZSBjYW4ndCBwb3N0cG9uZSBhZHZhbmNpbmcgUmVkb1JlY1B0ciBiZWNhdXNlCi0JICog WExvZ0luc2VydHMgdGhhdCBoYXBwZW4gd2hpbGUgd2UgYXJlIGR1bXBpbmcgYnVmZmVycyBtdXN0 IGFzc3VtZSB0aGF0Ci0JICogdGhlaXIgYnVmZmVyIGNoYW5nZXMgYXJlIG5vdCBpbmNsdWRlZCBp biB0aGUgY2hlY2twb2ludC4KLQkgKi8KLQlSZWRvUmVjUHRyID0gWExvZ0N0bC0+SW5zZXJ0LlJl ZG9SZWNQdHIgPSBjaGVja1BvaW50LnJlZG87CisJCS8qCisJCSAqIENvbXB1dGUgbmV3IFJFRE8g cmVjb3JkIHB0ciA9IGxvY2F0aW9uIG9mIG5leHQgWExPRyByZWNvcmQuCisJCSAqCisJCSAqIFNp bmNlIHRoaXMgaXMgYSBzaHV0ZG93biBjaGVja3BvaW50LCB0aGVyZSBjYW4ndCBiZSBhbnkgY29u Y3VycmVudAorCQkgKiBXQUwgaW5zZXJ0aW9uLgorCQkgKi8KKwkJZnJlZXNwYWNlID0gSU5TRVJU X0ZSRUVTUEFDRShjdXJJbnNlcnQpOworCQlpZiAoZnJlZXNwYWNlID09IDApCisJCXsKKwkJCWlm IChYTG9nU2VnbWVudE9mZnNldChjdXJJbnNlcnQsIHdhbF9zZWdtZW50X3NpemUpID09IDApCisJ CQkJY3VySW5zZXJ0ICs9IFNpemVPZlhMb2dMb25nUEhEOworCQkJZWxzZQorCQkJCWN1ckluc2Vy dCArPSBTaXplT2ZYTG9nU2hvcnRQSEQ7CisJCX0KKwkJY2hlY2tQb2ludC5yZWRvID0gY3VySW5z ZXJ0OworCisJCS8qCisJCSAqIEhlcmUgd2UgdXBkYXRlIHRoZSBzaGFyZWQgUmVkb1JlY1B0ciBm b3IgZnV0dXJlIFhMb2dJbnNlcnQgY2FsbHM7CisJCSAqIHRoaXMgbXVzdCBiZSBkb25lIHdoaWxl IGhvbGRpbmcgYWxsIHRoZSBpbnNlcnRpb24gbG9ja3MuCisJCSAqCisJCSAqIE5vdGU6IGlmIHdl IGZhaWwgdG8gY29tcGxldGUgdGhlIGNoZWNrcG9pbnQsIFJlZG9SZWNQdHIgd2lsbCBiZQorCQkg KiBsZWZ0IHBvaW50aW5nIHBhc3Qgd2hlcmUgaXQgcmVhbGx5IG5lZWRzIHRvIHBvaW50LiAgVGhp cyBpcyBva2F5OworCQkgKiB0aGUgb25seSBjb25zZXF1ZW5jZSBpcyB0aGF0IFhMb2dJbnNlcnQg bWlnaHQgYmFjayB1cCB3aG9sZSBidWZmZXJzCisJCSAqIHRoYXQgaXQgZGlkbid0IHJlYWxseSBu ZWVkIHRvLiAgV2UgY2FuJ3QgcG9zdHBvbmUgYWR2YW5jaW5nCisJCSAqIFJlZG9SZWNQdHIgYmVj YXVzZSBYTG9nSW5zZXJ0cyB0aGF0IGhhcHBlbiB3aGlsZSB3ZSBhcmUgZHVtcGluZworCQkgKiBi dWZmZXJzIG11c3QgYXNzdW1lIHRoYXQgdGhlaXIgYnVmZmVyIGNoYW5nZXMgYXJlIG5vdCBpbmNs dWRlZCBpbgorCQkgKiB0aGUgY2hlY2twb2ludC4KKwkJICovCisJCVJlZG9SZWNQdHIgPSBYTG9n Q3RsLT5JbnNlcnQuUmVkb1JlY1B0ciA9IGNoZWNrUG9pbnQucmVkbzsKKwl9CiAKIAkvKgogCSAq IE5vdyB3ZSBjYW4gcmVsZWFzZSB0aGUgV0FMIGluc2VydGlvbiBsb2NrcywgYWxsb3dpbmcgb3Ro ZXIgeGFjdHMgdG8KQEAgLTY2NDUsNiArNjY5MSwzMyBAQCBDcmVhdGVDaGVja1BvaW50KGludCBm bGFncykKIAkgKi8KIAlXQUxJbnNlcnRMb2NrUmVsZWFzZSgpOwogCisJLyoKKwkgKiBJZiB0aGlz IGlzIGFuIG9ubGluZSBjaGVja3BvaW50LCB3ZSBoYXZlIG5vdCB5ZXQgZGV0ZXJtaW5lZCB0aGUg cmVkbworCSAqIHBvaW50LiBXZSBkbyBzbyBub3cgYnkgaW5zZXJ0aW5nIHRoZSBzcGVjaWFsIFhM T0dfQ0hFQ0tQT0lOVF9SRURPCisJICogcmVjb3JkOyB0aGUgTFNOIGF0IHdoaWNoIGl0IHN0YXJ0 cyBiZWNvbWVzIHRoZSBuZXcgcmVkbyBwb2ludGVyLiBXZQorCSAqIGRvbid0IGRvIHRoaXMgZm9y IGEgc2h1dGRvd24gY2hlY2twb2ludCwgYmVjYXVzZSBpbiB0aGF0IGNhc2Ugbm8gV0FMCisJICog Y2FuIGJlIHdyaXR0ZW4gYmV0d2VlbiB0aGUgcmVkbyBwb2ludCBhbmQgdGhlIGluc2VydGlvbiBv ZiB0aGUKKwkgKiBjaGVja3BvaW50IHJlY29yZCBpdHNlbGYsIHNvIHRoZSBjaGVja3BvaW50IHJl Y29yZCBpdHNlbGYgc2VydmVzIHRvCisJICogbWFyayB0aGUgcmVkbyBwb2ludC4KKwkgKi8KKwlp ZiAoIXNodXRkb3duKQorCXsKKwkJaW50CQkJZHVtbXkgPSAwOworCisJCS8qIFJlY29yZCBtdXN0 IGhhdmUgcGF5bG9hZCB0byBhdm9pZCBhc3NlcnRpb24gZmFpbHVyZS4gKi8KKwkJWExvZ0JlZ2lu SW5zZXJ0KCk7CisJCVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgJmR1bW15LCBzaXplb2YoZHVt bXkpKTsKKwkJKHZvaWQpIFhMb2dJbnNlcnQoUk1fWExPR19JRCwgWExPR19DSEVDS1BPSU5UX1JF RE8pOworCisJCS8qCisJCSAqIFhMb2dJbnNlcnRSZWNvcmQgd2lsbCBoYXZlIHVwZGF0ZWQgWExv Z0N0bC0+SW5zZXJ0LlJlZG9SZWNQdHIgaW4KKwkJICogc2hhcmVkIG1lbW9yeSBhbmQgUmVkb1Jl Y1B0ciBpbiBiYWNrZW5kLWxvY2FsIG1lbW9yeSwgYnV0IHdlIG5lZWQKKwkJICogdG8gY29weSB0 aGF0IGludG8gdGhlIHJlY29yZCB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgd2hlbiB0aGUKKwkJICog Y2hlY2twb2ludCBpcyBjb21wbGV0ZS4KKwkJICovCisJCWNoZWNrUG9pbnQucmVkbyA9IFJlZG9S ZWNQdHI7CisJfQorCiAJLyogVXBkYXRlIHRoZSBpbmZvX2xjay1wcm90ZWN0ZWQgY29weSBvZiBS ZWRvUmVjUHRyIGFzIHdlbGwgKi8KIAlTcGluTG9ja0FjcXVpcmUoJlhMb2dDdGwtPmluZm9fbGNr KTsKIAlYTG9nQ3RsLT5SZWRvUmVjUHRyID0gY2hlY2tQb2ludC5yZWRvOwpAQCAtODEwNSw2ICs4 MTc4LDEwIEBAIHhsb2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJLyogS2VlcCB0 cmFjayBvZiBmdWxsX3BhZ2Vfd3JpdGVzICovCiAJCWxhc3RGdWxsUGFnZVdyaXRlcyA9IGZwdzsK IAl9CisJZWxzZSBpZiAoaW5mbyA9PSBYTE9HX0NIRUNLUE9JTlRfUkVETykKKwl7CisJCS8qIG5v dGhpbmcgdG8gZG8gaGVyZSwganVzdCBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyAqLworCX0K IH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNv dmVyeS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKaW5kZXgg YmVjYzJiZGE2Mi4uZDZmMmJiODI4NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGxvZ3JlY292ZXJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Z3JlY292ZXJ5LmMKQEAgLTE2MzgsNiArMTYzOCwxNyBAQCBQZXJmb3JtV2FsUmVjb3Zlcnkodm9p ZCkKIAkJcmVwbGF5VExJID0gUmVkb1N0YXJ0VExJOwogCQlYTG9nUHJlZmV0Y2hlckJlZ2luUmVh ZCh4bG9ncHJlZmV0Y2hlciwgUmVkb1N0YXJ0TFNOKTsKIAkJcmVjb3JkID0gUmVhZFJlY29yZCh4 bG9ncHJlZmV0Y2hlciwgUEFOSUMsIGZhbHNlLCByZXBsYXlUTEkpOworCisJCS8qCisJCSAqIElm IGEgY2hlY2twb2ludCByZWNvcmQncyByZWRvIHBvaW50ZXIgcG9pbnRzIGJhY2sgdG8gYW4gZWFy bGllcgorCQkgKiBMU04sIHRoZSByZWNvcmQgYXQgdGhhdCBMU04gc2hvdWxkIGJlIGFuIFhMT0df Q0hFQ0tQT0lOVF9SRURPCisJCSAqIHJlY29yZC4KKwkJICovCisJCWlmIChyZWNvcmQtPnhsX3Jt aWQgIT0gUk1fWExPR19JRCB8fAorCQkJKHJlY29yZC0+eGxfaW5mbyAmIH5YTFJfSU5GT19NQVNL KSAhPSBYTE9HX0NIRUNLUE9JTlRfUkVETykKKwkJCWVyZXBvcnQoRkFUQUwsCisJCQkJCShlcnJt c2coInVuZXhwZWN0ZWQgcmVjb3JkIHR5cGUgZm91bmQgYXQgcmVkbyBwb2ludCAlWC8lWCIsCisJ CQkJCQkJTFNOX0ZPUk1BVF9BUkdTKHhsb2dyZWFkZXItPlJlYWRSZWNQdHIpKSkpOwogCX0KIAll bHNlCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNv ZGUuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKaW5kZXggNzMw MDYxYzlkYS4uMjRiNzEyYWE2NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9kZWNvZGUuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2Rl Y29kZS5jCkBAIC0xOTAsNiArMTkwLDcgQEAgeGxvZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpCiAJCWNhc2UgWExPR19GUElfRk9SX0hJ TlQ6CiAJCWNhc2UgWExPR19GUEk6CiAJCWNhc2UgWExPR19PVkVSV1JJVEVfQ09OVFJFQ09SRDoK KwkJY2FzZSBYTE9HX0NIRUNLUE9JTlRfUkVETzoKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJ ZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgUk1fWExPR19JRCByZWNvcmQgdHlwZTogJXUiLCBpbmZv KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29udHJvbC5oIGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19jb250cm9sLmgKaW5kZXggZGM5NTM5NzdjNS4uMTEzNjYxMzI1OSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19jb250cm9sLmgKKysrIGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19jb250cm9sLmgKQEAgLTc4LDYgKzc4LDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgQ2hlY2tQb2ludAogI2RlZmluZSBYTE9HX0ZQSQkJCQkJCTB4QjAKIC8qIDB4QzAgaXMgdXNl ZCBpbiBQb3N0Z3JlcyA5LjUtMTEgKi8KICNkZWZpbmUgWExPR19PVkVSV1JJVEVfQ09OVFJFQ09S RAkJMHhEMAorI2RlZmluZSBYTE9HX0NIRUNLUE9JTlRfUkVETwkJCTB4RTAKIAogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBlNjliYjY3MWJmLi4wNmIyNTYxN2JjIDEwMDY0NAot LS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjk3MSw2ICsyOTcxLDcgQEAgVm9sYXRpbGVGdW5jdGlv blN0YXR1cwogVnNydAogV0FJVF9PUkRFUgogV0FMQXZhaWxhYmlsaXR5CitXYWxJbnNlcnRDbGFz cwogV0FMSW5zZXJ0TG9jawogV0FMSW5zZXJ0TG9ja1BhZGRlZAogV0FMT3BlblNlZ21lbnQKLS0g CjIuMzcuMSAoQXBwbGUgR2l0LTEzNy4xKQoK --00000000000022bbb90607ec42a5--