Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oAtu9-0003Tb-V6 for pgsql-hackers@arkaria.postgresql.org; Mon, 11 Jul 2022 13:56:54 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oAtu8-0007EB-PH for pgsql-hackers@arkaria.postgresql.org; Mon, 11 Jul 2022 13:56:52 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oAtsL-0002mo-VE for pgsql-hackers@lists.postgresql.org; Mon, 11 Jul 2022 13:55:02 +0000 Received: from mail-pg1-x533.google.com ([2607:f8b0:4864:20::533]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oAtsJ-0006Mw-0W for pgsql-hackers@lists.postgresql.org; Mon, 11 Jul 2022 13:55:01 +0000 Received: by mail-pg1-x533.google.com with SMTP id q82so4791373pgq.6 for ; Mon, 11 Jul 2022 06:54:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=7wiQKqKhoMwkDG9vVgwQ9cJ5ATvoEgVgp1Ql4Chytn4=; b=kLDgsfnKipIgydIxjNBjFiV9D/VU24CpFBvjkq4RPLEZvtkssp20ro7GNwjwQH5CBW KkfcFErMuaM8XVKj6muF9OTBhj2NcW/vstlZNfonUSuq6oxFqxyLPQsTiXy4cmKKk8O/ ZqXgP1P1ZUon8LifWKT+hYEjjfpvo7YzkEC/BBrZgAmbiTSTt47snvVwoy/6eXjlhJoR /PAZ/X0I+dckKehw1FfBP/yamQloEHO2cesdKcxEuuW/vG++pXIqDwkw0OAL+x8mIf3n ThftHHsoQh9J6Hb03Y2MuiKsUgwAeWm+C8cTW2xA6B4SipvurUU2xsHD4x4AFIWn3R4q 38oA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=7wiQKqKhoMwkDG9vVgwQ9cJ5ATvoEgVgp1Ql4Chytn4=; b=lcMYEz66qZ9r4sqIuB0GtlVqeJE2/Uu37VcvKkBRzcopvL/0qcmQT8PXsb8jb3KYgi FwstSGdv1sa/0S13CuTXjm95+TZkvVjG3/fCDH/gzOx3jUWVXo2v81qXp0Y5efQVbkKW 0pFc2T0m0bcS+5+dd2P0FqzIdnqxQniQJYLmLd71mnyuBtg7Zlfvlz+vFHAqpsi0ZTb7 ILmw+tHK+wXXSjIcUn33DPn6DYRuD5r9pp8gihLjNey3rhQfhktOM+IbxuDCnQaitlg+ pt1UPylnXAqL0mdPw0/3UluuyVMYSk91U36Zg5Y+IAA6DnDJn2TB6Kh0W6c3WBGUt0R7 LSew== X-Gm-Message-State: AJIora/XWMYddlOK0gL+7AKZ687+IeCND2MkWogkizDCbst5PLWE9TeS T3tO+DVPYq3RfDYGqeXc7rOUq2+9zchEYytrib0= X-Google-Smtp-Source: AGRyM1tIZWEaaoajOp1PbMCLXdnX6oWQGVEHkesDR/kFePU/1o4oirE+uA1Whx7D2vV0ofYzhtJZDX/rv4OhY2EStrw= X-Received: by 2002:a63:84c8:0:b0:415:b761:efa1 with SMTP id k191-20020a6384c8000000b00415b761efa1mr15419352pgd.89.1657547696485; Mon, 11 Jul 2022 06:54:56 -0700 (PDT) MIME-Version: 1.0 References: <20211008.165055.1621145185927268721.horikyota.ntt@gmail.com> <20220523.133323.444599955292141474.horikyota.ntt@gmail.com> In-Reply-To: From: Masahiko Sawada Date: Mon, 11 Jul 2022 22:54:19 +0900 Message-ID: Subject: Re: [BUG] Logical replication failure "ERROR: could not map filenode "base/13237/442428" to relation OID" with catalog modifying txns To: Amit Kapila Cc: Kyotaro Horiguchi , "Drouvot, Bertrand" , PostgreSQL Hackers , "Oh, Mike" Content-Type: multipart/mixed; boundary="000000000000a5fac105e387e5c2" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a5fac105e387e5c2 Content-Type: text/plain; charset="UTF-8" On Wed, Jul 6, 2022 at 3:01 PM Amit Kapila wrote: > > On Wed, Jul 6, 2022 at 7:38 AM Masahiko Sawada wrote: > > > > I'll post a new version patch in the next email with replying to other comments. > > > > Okay, thanks for working on this. Few comments/suggestions on > poc_remember_last_running_xacts_v2 patch: > > 1. > +ReorderBufferSetLastRunningXactsCatalogChanges(ReorderBuffer *rb, > TransactionId xid, > + uint32 xinfo, int subxcnt, > + TransactionId *subxacts, XLogRecPtr lsn) > +{ > ... > ... > + > + test = bsearch(&xid, rb->last_running_xacts, rb->n_last_running_xacts, > + sizeof(TransactionId), xidComparator); > + > + if (test == NULL) > + { > + for (int i = 0; i < subxcnt; i++) > + { > + test = bsearch(&subxacts[i], rb->last_running_xacts, rb->n_last_running_xacts, > + sizeof(TransactionId), xidComparator); > ... > > Is there ever a possibility that the top transaction id is not in the > running_xacts list but one of its subxids is present? If yes, it is > not very obvious at least to me so adding a comment here could be > useful. If not, then why do we need this additional check for each of > the sub-transaction ids? I think there is no possibility. The check for subtransactions is not necessary. > > 2. > @@ -627,6 +647,15 @@ DecodeCommit(LogicalDecodingContext *ctx, > XLogRecordBuffer *buf, > commit_time = parsed->origin_timestamp; > } > > + /* > + * Set the last running xacts as containing catalog change if necessary. > + * This must be done before SnapBuildCommitTxn() so that we include catalog > + * change transactions to the historic snapshot. > + */ > + ReorderBufferSetLastRunningXactsCatalogChanges(ctx->reorder, xid, > parsed->xinfo, > + parsed->nsubxacts, parsed->subxacts, > + buf->origptr); > + > SnapBuildCommitTxn(ctx->snapshot_builder, buf->origptr, xid, > parsed->nsubxacts, parsed->subxacts); > > As mentioned previously as well, marking it before SnapBuildCommitTxn > has one disadvantage, we sometimes do this work even if the snapshot > state is SNAPBUILD_START or SNAPBUILD_BUILDING_SNAPSHOT in which case > SnapBuildCommitTxn wouldn't do anything. Can we instead check whether > the particular txn has invalidations and is present in the > last_running_xacts list along with the check > ReorderBufferXidHasCatalogChanges? I think that has the additional > advantage that we don't need this additional marking if the xact is > already marked as containing catalog changes. Agreed. > > 3. > 1. > + /* > + * We rely on HEAP2_NEW_CID records and XACT_INVALIDATIONS to know > + * if the transaction has changed the catalog, and that information > + * is not serialized to SnapBuilder. Therefore, if the logical > + * decoding decodes the commit record of the transaction that actually > + * has done catalog changes without these records, we miss to add > + * the xid to the snapshot so up creating the wrong snapshot. > > The part of the sentence "... snapshot so up creating the wrong > snapshot." is not clear. In this comment, at one place you have used > two spaces after a full stop, and at another place, there is one > space. I think let's follow nearby code practice to use a single space > before a new sentence. Agreed. > > 4. > +void > +ReorderBufferProcessLastRunningXacts(ReorderBuffer *rb, > xl_running_xacts *running) > +{ > + /* Quick exit if there is no longer last running xacts */ > + if (likely(rb->n_last_running_xacts == 0)) > + return; > + > + /* First call, build the last running xact list */ > + if (rb->n_last_running_xacts == -1) > + { > + int nxacts = running->subxcnt + running->xcnt; > + Size sz = sizeof(TransactionId) * nxacts;; > + > + rb->last_running_xacts = MemoryContextAlloc(rb->context, sz); > + memcpy(rb->last_running_xacts, running->xids, sz); > + qsort(rb->last_running_xacts, nxacts, sizeof(TransactionId), xidComparator); > + > + rb->n_last_running_xacts = nxacts; > + > + return; > + } > > a. Can we add the function header comments for this function? Updated. > b. We seem to be tracking the running_xact information for the first > running_xact record after start/restart. The name last_running_xacts > doesn't sound appropriate for that, how about initial_running_xacts? Sound good, updated. > > 5. > + /* > + * Purge xids in the last running xacts list if we can do that for at least > + * one xid. > + */ > + if (NormalTransactionIdPrecedes(rb->last_running_xacts[0], > + running->oldestRunningXid)) > > I think it would be a good idea to add a few lines here explaining why > it is safe to purge. IIUC, it is because the commit for those xacts > would have already been processed and we don't need such a xid > anymore. Right, updated. > > 6. As per the discussion above in this thread having > XACT_XINFO_HAS_INVALS in the commit record doesn't indicate that the > xact has catalog changes, so can we add somewhere in comments that for > such a case we can't distinguish whether the txn has catalog change > but we still mark the txn has catalog changes? Agreed. > Can you please share one example for this case? I think it depends on what we did in the transaction but one example I have is that a commit record for ALTER DATABASE has only a snapshot invalidation message: =# alter database postgrse set log_statement to 'all'; ALTER DATABASE $ pg_waldump $PGDATA/pg_wal/000000010000000000000001 | tail -1 rmgr: Transaction len (rec/tot): 66/ 66, tx: 821, lsn: 0/019B50A8, prev 0/019B5070, desc: COMMIT 2022-07-11 21:38:44.036513 JST; inval msgs: snapshot 2964 I've attached an updated patch, please review it. Regards, -- Masahiko Sawada EDB: https://www.enterprisedb.com/ --000000000000a5fac105e387e5c2 Content-Type: application/octet-stream; name="REL14-v1-0001-Fix-catalog-lookup-with-the-wrong-snapshot-during.patch" Content-Disposition: attachment; filename="REL14-v1-0001-Fix-catalog-lookup-with-the-wrong-snapshot-during.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l5gt09s10 RnJvbSBlNDUyNmFkODFkMTY2NWVhODJhMGM3NjY3YzI1ZDJhZTFhY2U0NWIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXNhaGlrbyBTYXdhZGEgPHNhd2FkYS5tc2hrQGdtYWlsLmNv bT4KRGF0ZTogTW9uLCAxMSBKdWwgMjAyMiAyMTo0OTowNiArMDkwMApTdWJqZWN0OiBbUEFUQ0gg djFdIEZpeCBjYXRhbG9nIGxvb2t1cCB3aXRoIHRoZSB3cm9uZyBzbmFwc2hvdCBkdXJpbmcgbG9n aWNhbAogZGVjb2RpbmcuCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFp bjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgpQcmV2aW91 c2x5LCB3ZSByZWxpZWQgb24gSEVBUDJfTkVXX0NJRCByZWNvcmRzIGFuZCBYQUNUX0lOVkFMSURB VElPTgpyZWNvcmRzIHRvIGtub3cgaWYgdGhlIHRyYW5zYWN0aW9uIGhhcyBtb2RpZmllZCB0aGUg Y2F0YWxvZywgYW5kIHRoYXQKaW5mb3JtYXRpb24gaXMgbm90IHNlcmlhbGl6ZWQgdG8gc25hcHNo b3QuIFRoZXJlZm9yZSwgaWYgdGhlIGxvZ2ljYWwKZGVjb2RpbmcgZGVjb2RlcyBvbmx5IHRoZSBj b21taXQgcmVjb3JkIG9mIHRoZSB0cmFuc2FjdGlvbiB0aGF0CmFjdHVhbGx5IGhhcyBtb2RpZmll ZCBhIGNhdGFsb2csIHdlIG1pc3NlZCBhZGRpbmcgaXRzIFhJRCB0byB0aGUKc25hcHNob3QuIFdl IGVuZGVkIHVwIGxvb2tpbmcgYXQgY2F0YWxvZ3Mgd2l0aCB0aGUgd3Jvbmcgc25hcHNob3QuCgpU byBmaXggdGhpcyBwcm9ibGVtLCB0aGlzIGNoYW5nZSB0aGUgcmVvcmRlciBidWZmZXIgc28gdGhh dCBpdApyZW1lbWJlcnMgdGhlIGluaXRpYWwgcnVubmluZyB0cmFuc2FjdGlvbiB3cml0dGVuIGlu IHRoZQp4bF9ydW5uaW5nX3hhY3RzIHJlY29yZCB0aGF0IHdlIGRlY29kZWQgZmlyc3QsIGFuZCBt YXJrIHRoZQp0cmFuc2FjdGlvbiBhcyBjb250YWluaW5nIGNhdGFsb2cgY2hhbmdlcyBpZiBpdOKA mXMgaW4gdGhlIGxpc3Qgb2YgdGhlCmluaXRpYWwgcnVubmluZyB0cmFuc2FjdGlvbnMgYW5kIGl0 cyBjb21taXQgcmVjb3JkIGhhcwpYQUNUX1hJTkZPX0hBU19JTlZBTFMuCgpUaGlzIGhhcyBmYWxz ZSBwb3NpdGl2ZTsgd2UgY291bGQgZW5kIHVwIGFkZGluZyB0aGUgdHJhbnNhY3Rpb24gdGhhdApk aWRuJ3QgY2hhbmdlIGNhdGFsb2cgdG8gdGhlIHNuYXBzaG90IHNpbmNlIHdlIGNhbm5vdCBkaXN0 aW5ndWlzaAp3aGV0aGVyIHRoZSB0cmFuc2FjdGlvbiBoYXMgY2F0YWxvZyBjaGFuZ2VzIG9ubHkg YnkgY2hlY2tpbmcgdGhlCkNPTU1JVCByZWNvcmQuIEl0IGRvZXNu4oCZdCBoYXZlIHRoZSBpbmZv cm1hdGlvbiBvbiB3aGljaCAoc3ViKQp0cmFuc2FjdGlvbiBoYXMgY2F0YWxvZyBjaGFuZ2VzLCBh bmQgWEFDVF9YSU5GT19IQVNfSU5WQUxTIGRvZXNuJ3QKbmVjZXNzYXJpbHkgaW5kaWNhdGUgdGhh dCB0aGUgdHJhbnNhY3Rpb24gaGFzIGNhdGFsb2cgY2hhbmdlLiBCdXQgaXQKZG9lc24ndCBiZWNv bWUgYSBwcm9ibGVtIHNpbmNlIHdlIHVzZSBoaXN0b3JpYyBzbmFwc2hvdCBvbmx5IGZvcgpyZWFk aW5nIHN5c3RlbSBjYXRhbG9ncy4KCk9uIHRoZSBtYXN0ZXIgYnJhbmNoLCB3ZSB0b29rIGEgbW9y ZSBmdXR1cmUtcHJvb2YgYXBwcm9hY2ggb2Ygd3JpdGluZwpjYXRhbG9nIG1vZGlmeWluZyB0cmFu c2FjdGlvbnMgdG8gdGhlIHNlcmlhbGl6ZWQgc25hcHNob3QuIEJ1dCB3ZQpjYW5ub3QgYmFja3Bh dGNoIGl0IGJlY2F1c2Ugb2YgY2hhbmdlIGluIFNuYXBCdWlsZC4KLS0tCiBjb250cmliL3Rlc3Rf ZGVjb2RpbmcvTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgIDIgKy0KIC4uLi9leHBlY3RlZC9j YXRhbG9nX2NoYW5nZV9zbmFwc2hvdC5vdXQgICAgICB8ICA0NCArKysrKysrKwogLi4uL3NwZWNz L2NhdGFsb2dfY2hhbmdlX3NuYXBzaG90LnNwZWMgICAgICAgIHwgIDM5ICsrKysrKysKIHNyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMgICAgICB8ICAxNyArKysKIC4uLi9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyAgICAgICB8IDEwNCArKysrKysrKysr KysrKysrKysKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCAgICAgICB8 ICAzNiArKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgMjQxIGluc2VydGlvbnMoKyksIDEgZGVsZXRp b24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3Rlc3RfZGVjb2RpbmcvZXhwZWN0ZWQv Y2F0YWxvZ19jaGFuZ2Vfc25hcHNob3Qub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi90 ZXN0X2RlY29kaW5nL3NwZWNzL2NhdGFsb2dfY2hhbmdlX3NuYXBzaG90LnNwZWMKCmRpZmYgLS1n aXQgYS9jb250cmliL3Rlc3RfZGVjb2RpbmcvTWFrZWZpbGUgYi9jb250cmliL3Rlc3RfZGVjb2Rp bmcvTWFrZWZpbGUKaW5kZXggOWEzMWUwYjg3OS4uNDU1MzI1MmQ3NSAxMDA2NDQKLS0tIGEvY29u dHJpYi90ZXN0X2RlY29kaW5nL01ha2VmaWxlCisrKyBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9N YWtlZmlsZQpAQCAtOCw3ICs4LDcgQEAgUkVHUkVTUyA9IGRkbCB4YWN0IHJld3JpdGUgdG9hc3Qg cGVybWlzc2lvbnMgZGVjb2RpbmdfaW5feGFjdCBcCiAJc3BpbGwgc2xvdCB0cnVuY2F0ZSBzdHJl YW0gc3RhdHMgdHdvcGhhc2UgdHdvcGhhc2Vfc3RyZWFtCiBJU09MQVRJT04gPSBteGFjdCBkZWxh eWVkX3N0YXJ0dXAgb25kaXNrX3N0YXJ0dXAgY29uY3VycmVudF9kZGxfZG1sIFwKIAlvbGRlc3Rf eG1pbiBzbmFwc2hvdF90cmFuc2ZlciBzdWJ4YWN0X3dpdGhvdXRfdG9wIGNvbmN1cnJlbnRfc3Ry ZWFtIFwKLQl0d29waGFzZV9zbmFwc2hvdAorCXR3b3BoYXNlX3NuYXBzaG90IGNhdGFsb2dfY2hh bmdlX3NuYXBzaG90CiAKIFJFR1JFU1NfT1BUUyA9IC0tdGVtcC1jb25maWcgJCh0b3Bfc3JjZGly KS9jb250cmliL3Rlc3RfZGVjb2RpbmcvbG9naWNhbC5jb25mCiBJU09MQVRJT05fT1BUUyA9IC0t dGVtcC1jb25maWcgJCh0b3Bfc3JjZGlyKS9jb250cmliL3Rlc3RfZGVjb2RpbmcvbG9naWNhbC5j b25mCmRpZmYgLS1naXQgYS9jb250cmliL3Rlc3RfZGVjb2RpbmcvZXhwZWN0ZWQvY2F0YWxvZ19j aGFuZ2Vfc25hcHNob3Qub3V0IGIvY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVkL2NhdGFs b2dfY2hhbmdlX3NuYXBzaG90Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi5kYzRmOWI3MDE4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi90ZXN0X2RlY29kaW5n L2V4cGVjdGVkL2NhdGFsb2dfY2hhbmdlX3NuYXBzaG90Lm91dApAQCAtMCwwICsxLDQ0IEBACitQ YXJzZWQgdGVzdCBzcGVjIHdpdGggMiBzZXNzaW9ucworCitzdGFydGluZyBwZXJtdXRhdGlvbjog czBfaW5pdCBzMF9iZWdpbiBzMF9zYXZlcG9pbnQgczBfdHJ1bmNhdGUgczFfY2hlY2twb2ludCBz MV9nZXRfY2hhbmdlcyBzMF9jb21taXQgczBfYmVnaW4gczBfaW5zZXJ0IHMxX2NoZWNrcG9pbnQg czFfZ2V0X2NoYW5nZXMgczBfY29tbWl0IHMxX2dldF9jaGFuZ2VzCitzdGVwIHMwX2luaXQ6IFNF TEVDVCAnaW5pdCcgRlJPTSBwZ19jcmVhdGVfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KCdpc29s YXRpb25fc2xvdCcsICd0ZXN0X2RlY29kaW5nJyk7Cis/Y29sdW1uPworLS0tLS0tLS0KK2luaXQg ICAgCisoMSByb3cpCisKK3N0ZXAgczBfYmVnaW46IEJFR0lOOworc3RlcCBzMF9zYXZlcG9pbnQ6 IFNBVkVQT0lOVCBzcDE7CitzdGVwIHMwX3RydW5jYXRlOiBUUlVOQ0FURSB0YmwxOworc3RlcCBz MV9jaGVja3BvaW50OiBDSEVDS1BPSU5UOworc3RlcCBzMV9nZXRfY2hhbmdlczogU0VMRUNUIGRh dGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ2lzb2xhdGlvbl9zbG90JywgTlVM TCwgTlVMTCwgJ3NraXAtZW1wdHkteGFjdHMnLCAnMScsICdpbmNsdWRlLXhpZHMnLCAnMCcpOwor ZGF0YQorLS0tLQorKDAgcm93cykKKworc3RlcCBzMF9jb21taXQ6IENPTU1JVDsKK3N0ZXAgczBf YmVnaW46IEJFR0lOOworc3RlcCBzMF9pbnNlcnQ6IElOU0VSVCBJTlRPIHRibDEgVkFMVUVTICgx KTsKK3N0ZXAgczFfY2hlY2twb2ludDogQ0hFQ0tQT0lOVDsKK3N0ZXAgczFfZ2V0X2NoYW5nZXM6 IFNFTEVDVCBkYXRhIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdpc29sYXRpb25f c2xvdCcsIE5VTEwsIE5VTEwsICdza2lwLWVtcHR5LXhhY3RzJywgJzEnLCAnaW5jbHVkZS14aWRz JywgJzAnKTsKK2RhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitCRUdJTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKK3RhYmxlIHB1YmxpYy50YmwxOiBUUlVOQ0FURTogKG5vLWZsYWdz KQorQ09NTUlUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisoMyByb3dzKQorCitz dGVwIHMwX2NvbW1pdDogQ09NTUlUOworc3RlcCBzMV9nZXRfY2hhbmdlczogU0VMRUNUIGRhdGEg RlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ2lzb2xhdGlvbl9zbG90JywgTlVMTCwg TlVMTCwgJ3NraXAtZW1wdHkteGFjdHMnLCAnMScsICdpbmNsdWRlLXhpZHMnLCAnMCcpOworZGF0 YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorQkVHSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAordGFibGUgcHVibGljLnRibDE6IElOU0VSVDogdmFsMVtpbnRlZ2VyXTox IHZhbDJbaW50ZWdlcl06bnVsbAorQ09NTUlUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorKDMgcm93cykKKworP2NvbHVtbj8KKy0tLS0tLS0t CitzdG9wICAgIAorKDEgcm93KQorCmRpZmYgLS1naXQgYS9jb250cmliL3Rlc3RfZGVjb2Rpbmcv c3BlY3MvY2F0YWxvZ19jaGFuZ2Vfc25hcHNob3Quc3BlYyBiL2NvbnRyaWIvdGVzdF9kZWNvZGlu Zy9zcGVjcy9jYXRhbG9nX2NoYW5nZV9zbmFwc2hvdC5zcGVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLmJmZmQ4NTZiYmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmli L3Rlc3RfZGVjb2Rpbmcvc3BlY3MvY2F0YWxvZ19jaGFuZ2Vfc25hcHNob3Quc3BlYwpAQCAtMCww ICsxLDM5IEBACisjIFRlc3QgdGhhdCBkZWNvZGluZyBvbmx5IHRoZSBjb21taXQgcmVjb3JkIG9m IHRoZSB0cmFuc2FjdGlvbiB0aGF0IGhhdmUKKyMgY2F0YWxvZy1jaGFuZ2VkLgorc2V0dXAKK3sK KyAgICBEUk9QIFRBQkxFIElGIEVYSVNUUyB0YmwxOworICAgIENSRUFURSBUQUJMRSB0YmwxICh2 YWwxIGludGVnZXIsIHZhbDIgaW50ZWdlcik7Cit9CisKK3RlYXJkb3duCit7CisgICAgRFJPUCBU QUJMRSB0YmwxOworICAgIFNFTEVDVCAnc3RvcCcgRlJPTSBwZ19kcm9wX3JlcGxpY2F0aW9uX3Ns b3QoJ2lzb2xhdGlvbl9zbG90Jyk7Cit9CisKK3Nlc3Npb24gInMwIgorc2V0dXAgeyBTRVQgc3lu Y2hyb25vdXNfY29tbWl0PW9uOyB9CitzdGVwICJzMF9pbml0IiB7IFNFTEVDVCAnaW5pdCcgRlJP TSBwZ19jcmVhdGVfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KCdpc29sYXRpb25fc2xvdCcsICd0 ZXN0X2RlY29kaW5nJyk7IH0KK3N0ZXAgInMwX2JlZ2luIiB7IEJFR0lOOyB9CitzdGVwICJzMF9z YXZlcG9pbnQiIHsgU0FWRVBPSU5UIHNwMTsgfQorc3RlcCAiczBfdHJ1bmNhdGUiIHsgVFJVTkNB VEUgdGJsMTsgfQorc3RlcCAiczBfaW5zZXJ0IiB7IElOU0VSVCBJTlRPIHRibDEgVkFMVUVTICgx KTsgfQorc3RlcCAiczBfY29tbWl0IiB7IENPTU1JVDsgfQorCitzZXNzaW9uICJzMSIKK3NldHVw IHsgU0VUIHN5bmNocm9ub3VzX2NvbW1pdD1vbjsgfQorc3RlcCAiczFfY2hlY2twb2ludCIgeyBD SEVDS1BPSU5UOyB9CitzdGVwICJzMV9nZXRfY2hhbmdlcyIgeyBTRUxFQ1QgZGF0YSBGUk9NIHBn X2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygnaXNvbGF0aW9uX3Nsb3QnLCBOVUxMLCBOVUxMLCAn c2tpcC1lbXB0eS14YWN0cycsICcxJywgJ2luY2x1ZGUteGlkcycsICcwJyk7IH0KKworIyBGb3Ig dGhlIHRyYW5zYWN0aW9uIHRoYXQgVFJVTkNBVEVkIHRoZSB0YWJsZSB0YmwxLCB0aGUgbGFzdCBk ZWNvZGluZyBkZWNvZGVzCisjIG9ubHkgaXRzIENPTU1JVCByZWNvcmQsIGJlY2F1c2UgaXQgc3Rh cnRzIGZyb20gdGhlIFJVTk5JTkdfWEFDVCByZWNvcmQgZW1pdHRlZAorIyBkdXJpbmcgdGhlIGZp cnN0IGNoZWNrcG9pbnQgZXhlY3V0aW9uLiAgVGhpcyB0cmFuc2FjdGlvbiBtdXN0IGJlIG1hcmtl ZCBhcworIyBjb250YWluaW5nIGNhdGFsb2cgY2hhbmdlcyB3aGlsZSBkZWNvZGluZyB0aGUgQ09N TUlUIHJlY29yZCBhbmQgdGhlIGRlY29kaW5nCisjIG9mIHRoZSBJTlNFUlQgcmVjb3JkIG11c3Qg cmVhZCB0aGUgcGdfY2xhc3Mgd2l0aCB0aGUgY29ycmVjdCBoaXN0b3JpYyBzbmFwc2hvdC4KKyMK KyMgTm90ZSB0aGF0IGluIGEgY2FzZSB3aGVyZSBiZ3dyaXRlciB3cm90ZSB0aGUgWEFDVF9SVU5O SU5HIHJlY29yZCBiZXR3ZWVuICJzMF9jb21taXQiCisjIGFuZCAiczBfYmVnaW4iLCB0aGlzIGRv ZXNuJ3QgaGFwcGVuIGFzIHRoZSBkZWNvZGluZyBzdGFydHMgZnJvbSB0aGUgUlVOTklOR19YQUNU CisjIHJlY29yZCB3cml0dGVuIGJ5IGJnd3JpdGVyLiAgT25lIG1pZ2h0IHRoaW5rIHdlIGNhbiBl aXRoZXIgc3RvcCB0aGUgYmd3cml0ZXIgb3IKKyMgaW5jcmVhc2UgTE9HX1NOQVBTSE9UX0lOVEVS VkFMX01TIGJ1dCBpdCdzIG5vdCBwcmFjdGljYWwgdmlhIHRlc3RzLgorcGVybXV0YXRpb24gInMw X2luaXQiICJzMF9iZWdpbiIgInMwX3NhdmVwb2ludCIgInMwX3RydW5jYXRlIiAiczFfY2hlY2tw b2ludCIgInMxX2dldF9jaGFuZ2VzIiAiczBfY29tbWl0IiAiczBfYmVnaW4iICJzMF9pbnNlcnQi ICJzMV9jaGVja3BvaW50IiAiczFfZ2V0X2NoYW5nZXMiICJzMF9jb21taXQiICJzMV9nZXRfY2hh bmdlcyIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2Rl LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCmluZGV4IDkyZGZh ZmM2MzIuLjg5MjllZjVjYzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvZGVjb2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNv ZGUuYwpAQCAtNDA3LDYgKzQwNyw5IEBAIERlY29kZVN0YW5kYnlPcChMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKIAkJCXsKIAkJCQl4bF9ydW5uaW5n X3hhY3RzICpydW5uaW5nID0gKHhsX3J1bm5pbmdfeGFjdHMgKikgWExvZ1JlY0dldERhdGEocik7 CiAKKwkJCQkvKiBQcm9jZXNzIHRoZSBpbml0aWFsIHJ1bm5pbmcgdHJhbnNhY3Rpb25zLCBpZiBh bnkgKi8KKwkJCQlSZW9yZGVyQnVmZmVyUHJvY2Vzc0luaXRpYWxYYWN0cyhjdHgtPnJlb3JkZXIs IHJ1bm5pbmcpOworCiAJCQkJU25hcEJ1aWxkUHJvY2Vzc1J1bm5pbmdYYWN0cyhidWlsZGVyLCBi dWYtPm9yaWdwdHIsIHJ1bm5pbmcpOwogCiAJCQkJLyoKQEAgLTY5MSw2ICs2OTQsMjAgQEAgRGVj b2RlQ29tbWl0KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAq YnVmLAogCQljb21taXRfdGltZSA9IHBhcnNlZC0+b3JpZ2luX3RpbWVzdGFtcDsKIAl9CiAKKwkv KgorCSAqIElmIHRoZSBDT01NSVQgcmVjb3JkIGhhcyBpbnZhbGlkYXRpb24gbWVzc2FnZXMsIGl0 IGNvdWxkIGhhdmUgY2F0YWxvZworCSAqIGNoYW5nZXMuIFdlIGNoZWNrIGlmIGl0J3MgaW4gdGhl IGxpc3Qgb2YgdGhlIGluaXRpYWwgcnVubmluZyB0cmFuc2FjdGlvbnMKKwkgKiBhbmQgbWFyayBp dCBhcyBjb250YWluaW5nIGNhdGFsb2cgY2hhbmdlIGlmIG5lY2Vzc2FyeS4KKwkgKgorCSAqIFRo aXMgbXVzdCBiZSBkb25lIGJlZm9yZSBTbmFwQnVpbGRDb21taXRUeG4oKSBzbyB0aGF0IHdlIGNh biBpbmNsdWRlCisJICogY2F0YWxvZyBjaGFuZ2UgdHJhbnNhY3Rpb25zIHRvIHRoZSBoaXN0b3Jp YyBzbmFwc2hvdC4KKwkgKi8KKwlpZiAoKHBhcnNlZC0+eGluZm8gJiBYQUNUX1hJTkZPX0hBU19J TlZBTFMpICE9IDApCisJCVJlb3JkZXJCdWZmZXJJbml0aWFsWGFjdHNTZXRDYXRhbG9nQ2hhbmdl cyhjdHgtPnJlb3JkZXIsIHhpZCwKKwkJCQkJCQkJCQkJCSAgIHBhcnNlZC0+bnN1YnhhY3RzLAor CQkJCQkJCQkJCQkJICAgcGFyc2VkLT5zdWJ4YWN0cywKKwkJCQkJCQkJCQkJCSAgIGJ1Zi0+b3Jp Z3B0cik7CisKIAlTbmFwQnVpbGRDb21taXRUeG4oY3R4LT5zbmFwc2hvdF9idWlsZGVyLCBidWYt Pm9yaWdwdHIsIHhpZCwKIAkJCQkJICAgcGFyc2VkLT5uc3VieGFjdHMsIHBhcnNlZC0+c3VieGFj dHMpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3Jk ZXJidWZmZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZl ci5jCmluZGV4IGU1OWQxMzk2YjUuLjhlZjFkMzEwZTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBAIC0zNDYsNiArMzQ2LDkgQEAgUmVv cmRlckJ1ZmZlckFsbG9jYXRlKHZvaWQpCiAJYnVmZmVyLT5vdXRidWZzaXplID0gMDsKIAlidWZm ZXItPnNpemUgPSAwOwogCisJYnVmZmVyLT5pbml0aWFsX3J1bm5pbmdfeGFjdHMgPSBOVUxMOwor CWJ1ZmZlci0+bl9pbml0aWFsX3J1bm5pbmdfeGFjdHMgPSAwOworCiAJYnVmZmVyLT5zcGlsbFR4 bnMgPSAwOwogCWJ1ZmZlci0+c3BpbGxDb3VudCA9IDA7CiAJYnVmZmVyLT5zcGlsbEJ5dGVzID0g MDsKQEAgLTUxNTQsMyArNTE1NywxMDQgQEAgcmVzdGFydDoKIAkJKmNtYXggPSBlbnQtPmNtYXg7 CiAJcmV0dXJuIHRydWU7CiB9CisKKy8qCisgKiBQcm9jZXNzIHRoZSB0cmFuc2FjdGlvbnMgaW4g eGxfcnVubmluZ194YWN0cyByZWNvcmQsIGFuZCByZW1lbWJlciB0aGUKKyAqIHRyYW5zYWN0aW9u cyBmaXJzdCBhbmQgbGF0ZXIgcmVtb3ZlIHRob3NlIHRoYXQgYXJlbid0IG5lZWRlZCBhbnltb3Jl LgorICovCit2b2lkCitSZW9yZGVyQnVmZmVyUHJvY2Vzc0luaXRpYWxYYWN0cyhSZW9yZGVyQnVm ZmVyICpyYiwgeGxfcnVubmluZ194YWN0cyAqcnVubmluZykKK3sKKwlMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHggPSByYi0+cHJpdmF0ZV9kYXRhOworCVNuYXBCdWlsZCAgKmJ1aWxkZXIgPSBj dHgtPnNuYXBzaG90X2J1aWxkZXI7CisJVHJhbnNhY3Rpb25JZCAqd29ya3NwYWNlOworCWludAkJ CXN1cnZpdmluZ194aWRzID0gMDsKKworCS8qIEJ1aWxkIHRoZSBpbml0aWFsIHJ1bm5pbmcgdHJh bnNhY3Rpb25zIGxpc3QgZm9yIHRoZSBmaXJzdCBjYWxsICovCisJaWYgKHVubGlrZWx5KFNuYXBC dWlsZEN1cnJlbnRTdGF0ZShidWlsZGVyKSA9PSBTTkFQQlVJTERfU1RBUlQpKQorCXsKKwkJaW50 CQkJbnhhY3RzID0gcnVubmluZy0+c3VieGNudCArIHJ1bm5pbmctPnhjbnQ7CisJCVNpemUJCXN6 ID0gc2l6ZW9mKFRyYW5zYWN0aW9uSWQpICogbnhhY3RzOzsKKworCQlBc3NlcnQocmItPm5faW5p dGlhbF9ydW5uaW5nX3hhY3RzID09IDApOworCisJCXJiLT5uX2luaXRpYWxfcnVubmluZ194YWN0 cyA9IG54YWN0czsKKwkJcmItPmluaXRpYWxfcnVubmluZ194YWN0cyA9IE1lbW9yeUNvbnRleHRB bGxvYyhyYi0+Y29udGV4dCwgc3opOworCQltZW1jcHkocmItPmluaXRpYWxfcnVubmluZ194YWN0 cywgcnVubmluZy0+eGlkcywgc3opOworCQlxc29ydChyYi0+aW5pdGlhbF9ydW5uaW5nX3hhY3Rz LCBueGFjdHMsIHNpemVvZihUcmFuc2FjdGlvbklkKSwKKwkJCSAgeGlkQ29tcGFyYXRvcik7CisK KwkJcmV0dXJuOworCX0KKworCS8qIFF1aWNrIGV4aXQgaWYgdGhlcmUgaXMgbm8gaW5pdGlhbCBy dW5uaW5nIHRyYW5zYWN0aW9ucyAqLworCWlmIChsaWtlbHkocmItPm5faW5pdGlhbF9ydW5uaW5n X3hhY3RzID09IDApKQorCQlyZXR1cm47CisKKwkvKiBib3VuZCBjaGVjayBpZiB0aGVyZSBpcyBh dCBsZWFzdCBvbmUgdHJhbnNhY3Rpb24gdG8gYmUgcmVtb3ZlZCAqLworCWlmIChOb3JtYWxUcmFu c2FjdGlvbklkUHJlY2VkZXMocmItPmluaXRpYWxfcnVubmluZ194YWN0c1swXSwKKwkJCQkJCQkJ CXJ1bm5pbmctPm9sZGVzdFJ1bm5pbmdYaWQpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFJlbW92 ZSB0cmFuc2FjdGlvbnMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gcHJvY2Vzc2VkIGFuZCB3ZSBkb24n dCBuZWVkIHRvCisJICoga2VlcCB0cmFjayBvZmYgYW55bW9yZS4KKwkgKi8KKwl3b3Jrc3BhY2Ug PSBNZW1vcnlDb250ZXh0QWxsb2MocmItPmNvbnRleHQsIHJiLT5uX2luaXRpYWxfcnVubmluZ194 YWN0cyk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCByYi0+bl9pbml0aWFsX3J1bm5pbmdfeGFjdHM7 IGkrKykKKwl7CisJCWlmIChOb3JtYWxUcmFuc2FjdGlvbklkUHJlY2VkZXMocmItPmluaXRpYWxf cnVubmluZ194YWN0c1tpXSwKKwkJCQkJCQkJCQlydW5uaW5nLT5vbGRlc3RSdW5uaW5nWGlkKSkK KwkJCTsJCQkJCS8qIHJlbW92ZSAqLworCQllbHNlCisJCQl3b3Jrc3BhY2Vbc3Vydml2aW5nX3hp ZHMrK10gPSByYi0+aW5pdGlhbF9ydW5uaW5nX3hhY3RzW2ldOworCX0KKworCWlmIChzdXJ2aXZp bmdfeGlkcyA+IDApCisJCW1lbWNweShyYi0+aW5pdGlhbF9ydW5uaW5nX3hhY3RzLCB3b3Jrc3Bh Y2UsCisJCQkgICBzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiBzdXJ2aXZpbmdfeGlkcyk7CisJZWxz ZQorCXsKKwkJcGZyZWUocmItPmluaXRpYWxfcnVubmluZ194YWN0cyk7CisJCXJiLT5pbml0aWFs X3J1bm5pbmdfeGFjdHMgPSBOVUxMOworCX0KKworCXJiLT5uX2luaXRpYWxfcnVubmluZ194YWN0 cyA9IHN1cnZpdmluZ194aWRzOworCXBmcmVlKHdvcmtzcGFjZSk7Cit9CisKKy8qCisgKiBJZiB0 aGUgZ2l2ZW4geGlkIGlzIGluIHRoZSBsaXN0IG9mIHRoZSBpbml0aWFsIHJ1bm5pbmcgeGFjdHMs IHdlIG1hcmsgYm90aCBpdAorICogYW5kIGl0cyBzdWJ0cmFuc2FjdGlvbnMgYXMgY29udGFpbmlu ZyBjYXRhbG9nIGNoYW5nZXMgaWYgbm90IHlldC4KKyAqLwordm9pZAorUmVvcmRlckJ1ZmZlcklu aXRpYWxYYWN0c1NldENhdGFsb2dDaGFuZ2VzKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlv bklkIHhpZCwKKwkJCQkJCQkJCQkgICBpbnQgc3VieGNudCwgVHJhbnNhY3Rpb25JZCAqc3VieGFj dHMsCisJCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBsc24pCit7CisJLyoKKwkgKiBTa2lwIGlmIHRo ZXJlIGlzIG5vIGluaXRpYWwgcnVubmluZyB4YWN0cyBpbmZvcm1hdGlvbiBvciB0aGUKKwkgKiB0 cmFuc2FjdGlvbiBpcyBhbHJlYWR5IG1hcmtlZCBhcyBjb250YWluaW5nIGNhdGFsb2cgY2hhbmdl cy4KKwkgKi8KKwlpZiAobGlrZWx5KHJiLT5uX2luaXRpYWxfcnVubmluZ194YWN0cyA9PSAwIHx8 CisJCQkgICBSZW9yZGVyQnVmZmVyWGlkSGFzQ2F0YWxvZ0NoYW5nZXMocmIsIHhpZCkpKQorCQly ZXR1cm47CisKKwkvKgorCSAqIElmIHRoaXMgY29tbWl0dGVkIHRyYW5zYWN0aW9uIGlzIHRoZSBv bmUgdGhhdCB3YXMgcnVubmluZyBhdCB0aGUgdGltZQorCSAqIHdoZW4gZGVjb2RpbmcgdGhlIGZp cnN0IFJVTk5JTkdfWEFDVFMgcmVjb3JkIGFuZCBoYXZlIGRvbmUgY2F0YWxvZworCSAqIGNoYW5n ZXMsIHdlIGNhbiBtYXJrIGJvdGggdGhlIHRvcCB0cmFuc2FjdGlvbiBhbmQgaXRzIHN1YnRyYW5z YWN0aW9ucworCSAqIGFzIGNvbnRhaW5pbmcgY2F0YWxvZyBjaGFuZ2VzLgorCSAqLworCWlmIChi c2VhcmNoKCZ4aWQsIHJiLT5pbml0aWFsX3J1bm5pbmdfeGFjdHMsIHJiLT5uX2luaXRpYWxfcnVu bmluZ194YWN0cywKKwkJCQlzaXplb2YoVHJhbnNhY3Rpb25JZCksIHhpZENvbXBhcmF0b3IpICE9 IE5VTEwpCisJeworCQlSZW9yZGVyQnVmZmVyWGlkU2V0Q2F0YWxvZ0NoYW5nZXMocmIsIHhpZCwg bHNuKTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IHN1YnhjbnQ7IGkrKykKKwkJeworCQkJUmVv cmRlckJ1ZmZlckFzc2lnbkNoaWxkKHJiLCB4aWQsIHN1YnhhY3RzW2ldLCBsc24pOworCQkJUmVv cmRlckJ1ZmZlclhpZFNldENhdGFsb2dDaGFuZ2VzKHJiLCBzdWJ4YWN0c1tpXSwgbHNuKTsKKwkJ fQorCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZm ZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaAppbmRleCBiYTI1 N2Q4MWI1Li5mZTBmNTJkNGUxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9y ZW9yZGVyYnVmZmVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZl ci5oCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgog I2luY2x1ZGUgImxpYi9pbGlzdC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFsLmgiCisjaW5j bHVkZSAic3RvcmFnZS9zdGFuZGJ5LmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgogI2lu Y2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcHNob3QuaCIKQEAg LTU4OSw2ICs1OTAsMzUgQEAgc3RydWN0IFJlb3JkZXJCdWZmZXIKIAkvKiBtZW1vcnkgYWNjb3Vu dGluZyAqLwogCVNpemUJCXNpemU7CiAKKwkvKgorCSAqIEFycmF5IG9mIHRyYW5zYWN0aW9ucyBh bmQgc3VidHJhbnNhY3Rpb25zIHRoYXQgd2VyZSBydW5uaW5nIHdoZW4KKwkgKiB0aGUgeGxfcnVu bmluZ194YWN0cyByZWNvcmQgdGhhdCB3ZSBkZWNvZGVkIGZpcnN0IHdhcyB3cml0dGVuLgorCSAq IFRoZSBhcnJheSBpcyBzb3J0ZWQgaW4geGlkQ29tcGFyYXRvciBvcmRlci4gWGlkcyBhcmUgcmVt b3ZlZCBmcm9tCisJICogdGhlIGFycmF5IHdoZW4gZGVjb2RpbmcgeGxfcnVubmluZ194YWN0cyBy ZWNvcmQsIGFuZCB0aGVuIHRoZSBhcnJheQorCSAqIGV2ZW50dWFsbHkgYmVjb21lcyBhbiBlbXB0 eS4KKwkgKgorCSAqIFdlIHJlbHkgb24gSEVBUDJfTkVXX0NJRCByZWNvcmRzIGFuZCBYQUNUX0lO VkFMSURBVElPTlMgdG8ga25vdworCSAqIGlmIHRoZSB0cmFuc2FjdGlvbiBoYXMgY2hhbmdlZCB0 aGUgY2F0YWxvZywgYW5kIHRoYXQgaW5mb3JtYXRpb24KKwkgKiBpcyBub3Qgc2VyaWFsaXplZCB0 byBTbmFwQnVpbGRlci4gVGhlcmVmb3JlLCBpZiB0aGUgbG9naWNhbAorCSAqIGRlY29kaW5nIGRl Y29kZXMgdGhlIGNvbW1pdCByZWNvcmQgb2YgdGhlIHRyYW5zYWN0aW9uIHRoYXQgYWN0dWFsbHkK KwkgKiBoYXMgZG9uZSBjYXRhbG9nIGNoYW5nZXMgd2l0aG91dCB0aGVzZSByZWNvcmRzLCB3ZSBt aXNzIHRvIGFkZAorCSAqIHRoZSB4aWQgdG8gdGhlIHNuYXBzaG90LCBhbmQgZW5kIHVwIGxvb2tp bmcgYXQgY2F0YWxvZ3Mgd2l0aCB0aGUKKwkgKiB3cm9uZyBzbmFwc2hvdC4gVG8gYXZvaWQgdGhp cyBwcm9ibGVtLCBpZiB0aGUgQ09NTUlUIHJlY29yZCBvZgorCSAqIHRoZSB4aWQgbGlzdGVkIGlu IGluaXRpYWxfcnVubmluZ194YWN0cyBoYXMgWEFDVF9YSU5GT19IQVNfSU5WQUxTCisJICogZmxh Zywgd2UgbWFyayBib3RoIHRoZSB0b3AgdHJhbnNhY3Rpb24gYW5kIGl0cyBzdWJzdHJhbnNhY3Rp b25zCisJICogYXMgY29udGFpbmluZyBjYXRhbG9nIGNoYW5nZXMuCisJICoKKwkgKiBXZSBjb3Vs ZCBlbmQgdXAgYWRkaW5nIHRoZSB0cmFuc2FjdGlvbiB0aGF0IGRpZG4ndCBjaGFuZ2UgY2F0YWxv ZworCSAqIHRvIHRoZSBzbmFwc2hvdCBzaW5jZSB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2ggd2hldGhl ciB0aGUgdHJhbnNhY3Rpb24KKwkgKiBoYXMgY2F0YWxvZyBjaGFuZ2VzIG9ubHkgYnkgY2hlY2tp bmcgdGhlIENPTU1JVCByZWNvcmQuIEl0IGRvZXNuJ3QKKwkgKiBoYXZlIHRoZSBpbmZvcm1hdGlv biBvbiB3aGljaCAoc3ViKSB0cmFuc2FjdGlvbiBoYXMgY2F0YWxvZyBjaGFuZ2VzLAorCSAqIGFu ZCBYQUNUX1hJTkZPX0hBU19JTlZBTFMgZG9lc24ndCBuZWNlc3NhcmlseSBpbmRpY2F0ZSB0aGF0 IHRoZQorCSAqIHRyYW5zYWN0aW9uIGhhcyBjYXRhbG9nIGNoYW5nZS4gQnV0IGl0IGRvZXNuJ3Qg YmVjb21lIGEgcHJvYmxlbSBzaW5jZQorCSAqIHdlIHVzZSBoaXN0b3JpYyBzbmFwc2hvdCBvbmx5 IGZvciByZWFkaW5nIHN5c3RlbSBjYXRhbG9ncy4KKwkgKi8KKwlUcmFuc2FjdGlvbklkICppbml0 aWFsX3J1bm5pbmdfeGFjdHM7CisJaW50IG5faW5pdGlhbF9ydW5uaW5nX3hhY3RzOworCiAJLyoK IAkgKiBTdGF0aXN0aWNzIGFib3V0IHRyYW5zYWN0aW9ucyBzcGlsbGVkIHRvIGRpc2suCiAJICoK QEAgLTY3OCw0ICs3MDgsMTAgQEAgdm9pZAkJUmVvcmRlckJ1ZmZlclNldFJlc3RhcnRQb2ludChS ZW9yZGVyQnVmZmVyICosIFhMb2dSZWNQdHIgcHRyKTsKIAogdm9pZAkJU3RhcnR1cFJlb3JkZXJC dWZmZXIodm9pZCk7CiAKK3ZvaWQJCVJlb3JkZXJCdWZmZXJQcm9jZXNzSW5pdGlhbFhhY3RzKFJl b3JkZXJCdWZmZXIgKnJiLAorCQkJCQkJCQkJCQkgeGxfcnVubmluZ194YWN0cyAqcnVubmluZyk7 Cit2b2lkCQlSZW9yZGVyQnVmZmVySW5pdGlhbFhhY3RzU2V0Q2F0YWxvZ0NoYW5nZXMoUmVvcmRl ckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCQkJCQkJCSAgIGludCBzdWJ4 Y250LAorCQkJCQkJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgKnN1YnhhY3RzLAorCQkJCQkJCQkJ CQkJCSAgIFhMb2dSZWNQdHIgbHNuKTsKICNlbmRpZgotLSAKMi4yNC4zIChBcHBsZSBHaXQtMTI4 KQoK --000000000000a5fac105e387e5c2--