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 1owLPQ-0002lo-TP for pgsql-hackers@arkaria.postgresql.org; Sat, 19 Nov 2022 10:49:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1owLPP-0005Cv-Fc for pgsql-hackers@arkaria.postgresql.org; Sat, 19 Nov 2022 10:49:15 +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 1owLPP-0005Cg-12 for pgsql-hackers@lists.postgresql.org; Sat, 19 Nov 2022 10:49:15 +0000 Received: from mail-yb1-xb2b.google.com ([2607:f8b0:4864:20::b2b]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1owLPJ-0001mH-5A for pgsql-hackers@lists.postgresql.org; Sat, 19 Nov 2022 10:49:14 +0000 Received: by mail-yb1-xb2b.google.com with SMTP id p81so749656yba.4 for ; Sat, 19 Nov 2022 02:49:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=dXflMpuhVEckXOBcrlydUhmsAqgzQEQ3sBFFkP45Owk=; b=UG9z4H4F8FIsq4NDmIYNNeQ4ATWtzQiGZMnhW9+zFvkiIvkHkwyqKjxtuqnVEbOEBt RvNCOTiWjcxRXZMntbRZTmqrJJCHr7QXDl8f94HyoxZR87u2WGlj9xMvAizIw1ovjSHn +/EuyCo9Zwn+QzBrp7eZK2eJI+4MDnw70FLrwR6KneKHFVwD3tTXtnHXxE6Eb0haX/Zp tX5HjKI5mI1FKVKyvAwl573eG4MU6ozyYQbH0nNfaGYOnqGxpNF86DzSNK9+Nk0jo+Cz E0xM92gQpbaAMYWvgRPprt6nA4IctOgEGP4/kxEEwh2eqTEFzvQwY2wpXNZZUkIpCPQi VVpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=dXflMpuhVEckXOBcrlydUhmsAqgzQEQ3sBFFkP45Owk=; b=g03GQaPj1NjrCnTPEo9Yn6D7mdaUCViuB4Z7icl7XF5UlImITEToaWmYuveZomEPPJ VO3b25eWdyLv4Xki0QQ+Opuo6UgzH+M0NcALo9CNEe8937cMYpCLc23M+zHsB2qgPyCR BNBh1WhoN69783GlBnRZSSNby8RFv0Tu4JjUEpZ+34PevBvGRLbnj9aoGN0/aggvTyOj HfB8ccQ4dPS04GvzsO72wiLUfMnK/jAuL4UThWi6TGAloK8m2GJR/ScN/LccaPxm/kNX /oHkq74/s40esBOuRcAFQimKhiFGzz11/3U425EU6TzwTuxnBOh4qDsAny6UvLu89iwU 7fqg== X-Gm-Message-State: ANoB5pk1PWhbp+azT4ieQAqVFNdjDXBFW5oKn0ZO1b1ahWt1ozaMUrfR YQ3sE/j+khCYrCoWFut5walBTXac1GQxI8Yi03o= X-Google-Smtp-Source: AA0mqf4UYSifVBLtsj09Zsqee6JGFNzZMfpVoJ2bvyNkhIC5oHwDoXt7moeN6CGKLKHBLIXq+FjDfv259pHhhm3xuOY= X-Received: by 2002:a25:5304:0:b0:6ea:2a2:f21a with SMTP id h4-20020a255304000000b006ea02a2f21amr1661780ybb.170.1668854947092; Sat, 19 Nov 2022 02:49:07 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Amit Kapila Date: Sat, 19 Nov 2022 16:18:57 +0530 Message-ID: Subject: Re: Perform streaming logical transactions by background workers and parallel apply To: "houzj.fnst@fujitsu.com" Cc: Masahiko Sawada , "wangw.fnst@fujitsu.com" , Peter Smith , Dilip Kumar , "shiy.fnst@fujitsu.com" , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000004e195205edd09210" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004e195205edd09210 Content-Type: text/plain; charset="UTF-8" On Fri, Nov 18, 2022 at 7:56 AM Amit Kapila wrote: > > On Wed, Nov 16, 2022 at 1:50 PM houzj.fnst@fujitsu.com > wrote: > > > > On Tuesday, November 15, 2022 7:58 PM houzj.fnst@fujitsu.com wrote: > > > > I noticed that I didn't add CHECK_FOR_INTERRUPTS while retrying send message. > > So, attach the new version which adds that. Also attach the 0004 patch that > > restarts logical replication with temporarily disabling the parallel apply if > > failed to apply a transaction in parallel apply worker. > > > > Few comments on v48-0001 > ====================== > I have made quite a few changes in the comments, added some new comments, and made other cosmetic changes in the attached patch. The is atop v48-0001*. If these look okay to you, please include them in the next version. Apart from these, I have a few more comments on v48-0001* 1. +static bool +pa_can_start(TransactionId xid) +{ + if (!TransactionIdIsValid(xid)) + return false; The caller (see caller of pa_start_worker) already has a check that xid passed here is valid, so I think this should be an Assert unless I am missing something in which case it is better to add a comment here. 2. Will it be better to rename pa_start_worker() as pa_allocate_worker() because it sometimes gets the worker from the pool and also allocate the hash entry for worker info? That will even match the corresponding pa_free_worker(). 3. +pa_start_subtrans(TransactionId current_xid, TransactionId top_xid) { ... + + oldctx = MemoryContextSwitchTo(ApplyContext); + subxactlist = lappend_xid(subxactlist, current_xid); + MemoryContextSwitchTo(oldctx); ... Why do we need to allocate this list in a permanent context? IIUC, we need to use this to maintain subxacts so that it can be later used to find the given subxact at the time of rollback to savepoint in the current in-progress transaction, so why do we need it beyond the transaction being applied? If there is a reason for the same, it would be better to add some comments for the same. 4. +pa_stream_abort(LogicalRepStreamAbortData *abort_data) { ... + + for (i = list_length(subxactlist) - 1; i >= 0; i--) + { + TransactionId xid_tmp = lfirst_xid(list_nth_cell(subxactlist, i)); + + if (xid_tmp == subxid) + { + found = true; + break; + } + } + + if (found) + { + RollbackToSavepoint(spname); + CommitTransactionCommand(); + subxactlist = list_truncate(subxactlist, i + 1); + } I was thinking whether we can have an Assert(false) for the not found case but it seems if all the changes of a subxact have been skipped then probably subxid corresponding to "rollback to savepoint" won't be found in subxactlist and we don't need to do anything for it. If that is the case, then probably adding a comment for it would be a good idea, otherwise, we can probably have Assert(false) in the else case. -- With Regards, Amit Kapila. --0000000000004e195205edd09210 Content-Type: application/octet-stream; name="v48-changes_amit_1.patch" Content-Disposition: attachment; filename="v48-changes_amit_1.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lant1olb0 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxl bHdvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVs d29ya2VyLmMKaW5kZXggYTU0YWY5ZjhkNy4uZTExNmUwMzhiMiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKKysrIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKQEAgLTIz Nyw5ICsyMzcsMTEgQEAgcGFfZ2V0X2ZyZWVfd29ya2VyKHZvaWQpCiAJCXdpbmZvID0gKFBhcmFs bGVsQXBwbHlXb3JrZXJJbmZvICopIGxmaXJzdChsYyk7CiAKIAkJLyoKLQkJICogVHJ5IHRvIGZy ZWUgdGhlIHdvcmtlciBmaXJzdCwgYmVjYXVzZSB3ZSBkb24ndCB3YWl0IGZvciB0aGUgcm9sbGJh Y2sKLQkJICogY29tbWFuZCB0byBmaW5pc2ggc28gdGhlIHdvcmtlciBtYXkgbm90IGJlIGZyZWVk IGF0IHRoZSBlbmQgb2YgdGhlCi0JCSAqIHRyYW5zYWN0aW9uLgorCQkgKiBXZSBmaXJzdCB0cnkg dG8gZnJlZSB0aGUgd29ya2VyIHNvIGFzIGltcHJvdmUgb3VyIGNoYW5jZXMgb2YgZ2V0dGluZwor CQkgKiB0aGUgd29ya2VyLiBOb3JtYWxseSwgd2UgZnJlZSB0aGUgd29ya2VyIGFmdGVyIGVuc3Vy aW5nIHRoYXQgdGhlCisJCSAqIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBieSBwYXJhbGxlbCB3 b3JrZXIgYnV0IGZvciByb2xsYmFja3MsIHdlCisJCSAqIGRvbid0IHdhaXQgZm9yIHRoZSB0cmFu c2FjdGlvbiB0byBmaW5pc2ggc28gY2FuJ3QgZnJlZSB0aGUgd29ya2VyCisJCSAqIGluZm9ybWF0 aW9uIGltbWVkaWF0ZWx5LgogCQkgKi8KIAkJaWYgKHBhX2ZyZWVfd29ya2VyKHdpbmZvLCB3aW5m by0+c2hhcmVkLT54aWQpKQogCQkJY29udGludWU7CkBAIC0yNTQsOSArMjU2LDEwIEBAIHBhX2dl dF9mcmVlX3dvcmtlcih2b2lkKQogLyoKICAqIFN0YXJ0IGEgcGFyYWxsZWwgYXBwbHkgd29ya2Vy IHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgc3BlY2lmaWVkIHhpZC4KICAqCi0gKiBJZiBhIHBh cmFsbGVsIGFwcGx5IHdvcmtlciBpcyBmb3VuZCBidXQgbm90IGluIHVzZSB0aGVuIHJlLXVzZSBp dCwgb3RoZXJ3aXNlCi0gKiBzdGFydCBhIGZyZXNoIG9uZS4gQ2FjaGUgdGhlIHdvcmtlciBpbmZv cm1hdGlvbiBpbiBQYXJhbGxlbEFwcGx5V29ya2Vyc0hhc2gKLSAqIGtleWVkIGJ5IHRoZSBzcGVj aWZpZWQgeGlkLgorICogV2UgZmlyc3QgdHJ5IHRvIGdldCBhbiBhdmFpbGFibGUgd29ya2VyIGZy b20gdGhlIHBvb2wsIGlmIGFueSBhbmQgdGhlbiB0cnkKKyAqIHRvIGxhdW5jaCBhIG5ldyB3b3Jr ZXIuIE9uIHN1Y2Nlc3NmdWwgYWxsb2NhdGlvbiwgcmVtZW1iZXIgdGhlIHdvcmtlcgorICogaW5m b3JtYXRpb24gaW4gdGhlIGhhc2ggdGFibGUgc28gdGhhdCB3ZSBjYW4gZ2V0IGl0IGxhdGVyIGZv ciBwcm9jZXNzaW5nIHRoZQorICogc3RyZWFtaW5nIGNoYW5nZXMuCiAgKi8KIHZvaWQKIHBhX3N0 YXJ0X3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCkKQEAgLTI4NSwxNyArMjg4LDE1IEBAIHBhX3N0 YXJ0X3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCkKIAogCS8qIFRyeSB0byBnZXQgYSBmcmVlIHBh cmFsbGVsIGFwcGx5IHdvcmtlci4gKi8KIAl3aW5mbyA9IHBhX2dldF9mcmVlX3dvcmtlcigpOwot Ci0JaWYgKHdpbmZvID09IE5VTEwpCisJaWYgKCF3aW5mbykKIAl7CiAJCS8qIFRyeSB0byBzdGFy dCBhIG5ldyBwYXJhbGxlbCBhcHBseSB3b3JrZXIuICovCiAJCXdpbmZvID0gcGFfaW5pdF9hbmRf bGF1bmNoX3dvcmtlcigpOwotCi0JCWlmICh3aW5mbyA9PSBOVUxMKQorCQlpZiAoIXdpbmZvKQog CQkJcmV0dXJuOwogCX0KIAotCS8qIENyZWF0ZSBlbnRyeSBmb3IgcmVxdWVzdGVkIHRyYW5zYWN0 aW9uLiAqLworCS8qIENyZWF0ZSBhbiBlbnRyeSBmb3IgdGhlIHJlcXVlc3RlZCB0cmFuc2FjdGlv bi4gKi8KIAllbnRyeSA9IGhhc2hfc2VhcmNoKFBhcmFsbGVsQXBwbHlXb3JrZXJzSGFzaCwgJnhp ZCwgSEFTSF9FTlRFUiwgJmZvdW5kKTsKIAlpZiAoZm91bmQpCiAJCWVsb2coRVJST1IsICJoYXNo IHRhYmxlIGNvcnJ1cHRlZCIpOwpAQCAtMzMwLDE0ICszMzEsMTIgQEAgcGFfZmluZF93b3JrZXIo VHJhbnNhY3Rpb25JZCB4aWQpCiAJaWYgKHN0cmVhbV9hcHBseV93b3JrZXIgIT0gTlVMTCkKIAkJ cmV0dXJuIHN0cmVhbV9hcHBseV93b3JrZXI7CiAKLQkvKgotCSAqIEZpbmQgZW50cnkgZm9yIHJl cXVlc3RlZCB0cmFuc2FjdGlvbi4KLQkgKi8KKwkvKiBGaW5kIGFuIGVudHJ5IGZvciB0aGUgcmVx dWVzdGVkIHRyYW5zYWN0aW9uLiAqLwogCWVudHJ5ID0gaGFzaF9zZWFyY2goUGFyYWxsZWxBcHBs eVdvcmtlcnNIYXNoLCAmeGlkLCBIQVNIX0ZJTkQsICZmb3VuZCk7CiAJaWYgKGZvdW5kKQogCXsK KwkJLyogVGhlIHdvcmtlciBtdXN0IG5vdCBoYXZlIGV4aXRlZC4gICovCiAJCUFzc2VydChlbnRy eS0+d2luZm8tPmluX3VzZSk7Ci0KIAkJcmV0dXJuIGVudHJ5LT53aW5mbzsKIAl9CiAKQEAgLTM0 NSwxNyArMzQ0LDE2IEBAIHBhX2ZpbmRfd29ya2VyKFRyYW5zYWN0aW9uSWQgeGlkKQogfQogCiAv KgotICogUmVtb3ZlIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZW50cnkgZnJvbSB0aGUgaGFz aCB0YWJsZS4gU3RvcCB0aGUgd29yayBpZgotICogdGhlcmUgYXJlIGVub3VnaCB3b3JrZXJzIGlu IHRoZSBwb29sLgotICoKLSAqIElmIHRoZSB3b3JrZXIgaXMgc3RvcHBlZCwgdGhlIHdvcmtlciBp bmZvcm1hdGlvbiB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUKLSAqIFBhcmFsbGVsQXBwbHlXb3Jr ZXJzTGlzdCBhbmQgdGhlIG1lbW9yeSBvZiB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSBmcmVlZC4K LSAqCi0gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgd29ya2VyIGlzIHN0b3BwZWQsIGZhbHNlIG90aGVy d2lzZS4KKyAqIE1ha2VzIHRoZSB3b3JrZXIgYXZhaWxhYmxlIGZvciByZXVzZS4KICAqCi0gKiBE byBub3RoaW5nIGlmIHRoZSB3b3JrZXIgaXMgbm90IGJlaW5nIHVzZWQuCisgKiBUaGlzIHJlbW92 ZXMgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBlbnRyeSBmcm9tIHRoZSBoYXNoIHRhYmxlIHNv IHRoYXQKKyAqIGl0IGNhbid0IGJlIHVzZWQuIFRoaXMgZWl0aGVyIHN0b3BzIHRoZSB3b3JrZXIg YW5kIGZyZWUgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIGluZm8sIGlmIHRoZXJlIGFyZSBlbm91Z2gg d29ya2VycyBpbiB0aGUgcG9vbCBvciBqdXN0IG1hcmtzIGl0IGF2YWlsYWJsZQorICogZm9yIHJl dXNlLgogICoKICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB3b3JrZXIgcG9vbCwg c2VlIGNvbW1lbnRzIGF0b3Agd29ya2VyLmMuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSB3 b3JrZXIgaXMgc3RvcHBlZCwgZmFsc2Ugb3RoZXJ3aXNlLgogICovCiBib29sCiBwYV9mcmVlX3dv cmtlcihQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sIFRyYW5zYWN0aW9uSWQgeGlkKQpA QCAtMzY0LDEyICszNjIsMTMgQEAgcGFfZnJlZV93b3JrZXIoUGFyYWxsZWxBcHBseVdvcmtlcklu Zm8gKndpbmZvLCBUcmFuc2FjdGlvbklkIHhpZCkKIAogCUFzc2VydCghYW1fcGFyYWxsZWxfYXBw bHlfd29ya2VyKCkpOwogCisJLyogd29ya2VyIGlzIGFscmVhZHkgYXZhaWxhYmxlIGZvciByZXVz ZSAqLwogCWlmICghd2luZm8tPmluX3VzZSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyoKIAkgKiBE b24ndCBmcmVlIHRoZSB3b3JrZXIgaWYgdGhlIHRyYW5zYWN0aW9uIGluIHRoZSB3b3JrZXIgaXMg c3RpbGwgaW4KLQkgKiBwcm9ncmVzcy4gVGhpcyBjb3VsZCBoYXBwZW4gYXMgd2UgZG9uJ3Qgd2Fp dCBmb3IgdHJhbnNhY3Rpb24gcm9sbGJhY2sKKwkgKiBwcm9ncmVzcy4gVGhpcyBjb3VsZCBoYXBw ZW4gYXMgd2UgZG9uJ3Qgd2FpdCBmb3IgdGhlIGFwcGx5IG9mIHJvbGxiYWNrCiAJICogdG8gZmlu aXNoLgogCSAqLwogCWlmIChwYV9nZXRfeGFjdF9zdGF0ZSh3aW5mby0+c2hhcmVkKSAhPSBQQVJB TExFTF9UUkFOU19GSU5JU0hFRCkKQEAgLTM5Nyw4ICszOTYsOCBAQCBwYV9mcmVlX3dvcmtlcihQ YXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sIFRyYW5zYWN0aW9uSWQgeGlkKQogCQl3aW5m by0+ZXJyb3JfbXFfaGFuZGxlID0gTlVMTDsKIAogCQlTcGluTG9ja0FjcXVpcmUoJndpbmZvLT5z aGFyZWQtPm11dGV4KTsKLQkJc2xvdF9ubyA9IHdpbmZvLT5zaGFyZWQtPmxvZ2ljYWxyZXBfd29y a2VyX3Nsb3Rfbm87CiAJCWdlbmVyYXRpb24gPSB3aW5mby0+c2hhcmVkLT5sb2dpY2FscmVwX3dv cmtlcl9nZW5lcmF0aW9uOworCQlzbG90X25vID0gd2luZm8tPnNoYXJlZC0+bG9naWNhbHJlcF93 b3JrZXJfc2xvdF9ubzsKIAkJU3BpbkxvY2tSZWxlYXNlKCZ3aW5mby0+c2hhcmVkLT5tdXRleCk7 CiAKIAkJbG9naWNhbHJlcF93b3JrZXJfc3RvcF9ieV9zbG90KHNsb3Rfbm8sIGdlbmVyYXRpb24p OwpAQCAtNjkwLDcgKzY4OSw3IEBAIFBhcmFsbGVsQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5f YXJnKQogLyoKICAqIEhhbmRsZSByZWNlaXB0IG9mIGFuIGludGVycnVwdCBpbmRpY2F0aW5nIGEg cGFyYWxsZWwgYXBwbHkgd29ya2VyIG1lc3NhZ2UuCiAgKgotICogTm90ZTogdGhpcyBpcyBjYWxs ZWQgd2l0aGluIGEgc2lnbmFsIGhhbmRsZXIhICBBbGwgd2UgY2FuIGRvIGlzIHNldCBhIGZsYWcK KyAqIE5vdGU6IHRoaXMgaXMgY2FsbGVkIHdpdGhpbiBhIHNpZ25hbCBoYW5kbGVyISBBbGwgd2Ug Y2FuIGRvIGlzIHNldCBhIGZsYWcKICAqIHRoYXQgd2lsbCBjYXVzZSB0aGUgbmV4dCBDSEVDS19G T1JfSU5URVJSVVBUUygpIHRvIGludm9rZQogICogSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2Vz KCkuCiAgKi8KQEAgLTc3NywxNCArNzc2LDE0IEBAIEhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdl cyh2b2lkKQogCS8qCiAJICogVGhpcyBpcyBpbnZva2VkIGZyb20gUHJvY2Vzc0ludGVycnVwdHMo KSwgYW5kIHNpbmNlIHNvbWUgb2YgdGhlCiAJICogZnVuY3Rpb25zIGl0IGNhbGxzIGNvbnRhaW4g Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSwgdGhlcmUgaXMgYSBwb3RlbnRpYWwKLQkgKiBmb3IgcmVj dXJzaXZlIGNhbGxzIGlmIG1vcmUgc2lnbmFscyBhcmUgcmVjZWl2ZWQgd2hpbGUgdGhpcyBydW5z LiAgSXQncworCSAqIGZvciByZWN1cnNpdmUgY2FsbHMgaWYgbW9yZSBzaWduYWxzIGFyZSByZWNl aXZlZCB3aGlsZSB0aGlzIHJ1bnMuIEl0J3MKIAkgKiB1bmNsZWFyIHRoYXQgcmVjdXJzaXZlIGVu dHJ5IHdvdWxkIGJlIHNhZmUsIGFuZCBpdCBkb2Vzbid0IHNlZW0gdXNlZnVsCiAJICogZXZlbiBp ZiBpdCBpcyBzYWZlLCBzbyBsZXQncyBibG9jayBpbnRlcnJ1cHRzIHVudGlsIGRvbmUuCiAJICov CiAJSE9MRF9JTlRFUlJVUFRTKCk7CiAKIAkvKgotCSAqIE1vcmVvdmVyLCBDdXJyZW50TWVtb3J5 Q29udGV4dCBtaWdodCBiZSBwb2ludGluZyBhbG1vc3QgYW55d2hlcmUuICBXZQorCSAqIE1vcmVv dmVyLCBDdXJyZW50TWVtb3J5Q29udGV4dCBtaWdodCBiZSBwb2ludGluZyBhbG1vc3QgYW55d2hl cmUuIFdlCiAJICogZG9uJ3Qgd2FudCB0byByaXNrIGxlYWtpbmcgZGF0YSBpbnRvIGxvbmctbGl2 ZWQgY29udGV4dHMsIHNvIGxldCdzIGRvCiAJICogb3VyIHdvcmsgaGVyZSBpbiBhIHByaXZhdGUg Y29udGV4dCB0aGF0IHdlIGNhbiByZXNldCBvbiBlYWNoIHVzZS4KIAkgKi8KQEAgLTkyNSw2ICs5 MjQsMTAgQEAgcGFfaW5pdF9hbmRfbGF1bmNoX3dvcmtlcih2b2lkKQogCWJvb2wJCWxhdW5jaGVk OwogCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbzsKIAorCS8qCisJICogVGhlIHdyb2tl ciBpbmZvIGNhbiBiZSB1c2VkIGZvciB0aGUgZW50aXJlIGR1cmF0aW9uIG9mIHRoZSB3b3JrZXIg c28KKwkgKiBjcmVhdGUgaXQgaW4gYSBwZXJtYW5lbnQgY29udGV4dC4KKwkgKi8KIAlvbGRjb250 ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7CiAKIAl3aW5mbyA9IChQ YXJhbGxlbEFwcGx5V29ya2VySW5mbyAqKSBwYWxsb2MwKHNpemVvZihQYXJhbGxlbEFwcGx5V29y a2VySW5mbykpOwpAQCAtOTM0LDcgKzkzNyw2IEBAIHBhX2luaXRfYW5kX2xhdW5jaF93b3JrZXIo dm9pZCkKIAl7CiAJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIAkJcGZyZWUo d2luZm8pOwotCiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtOTUyLDcgKzk1NCw2IEBAIHBhX2lu aXRfYW5kX2xhdW5jaF93b3JrZXIodm9pZCkKIAllbHNlCiAJewogCQlwYV9mcmVlX3dvcmtlcl9p bmZvKHdpbmZvKTsKLQogCQl3aW5mbyA9IE5VTEw7CiAJfQogCkBAIC0xMDI5LDcgKzEwMzAsMTEg QEAgcGFfd2FpdF9mb3JfeGFjdF9maW5pc2goUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqd3No YXJlZCkKIAkgKi8KIAlwYV93YWl0X2Zvcl94YWN0X3N0YXRlKHdzaGFyZWQsIFBBUkFMTEVMX1RS QU5TX1NUQVJURUQpOwogCi0JLyogV2FpdCBmb3IgdGhlIHRyYW5zYWN0aW9uIGxvY2sgdG8gYmUg cmVsZWFzZWQuICovCisJLyoKKwkgKiBXYWl0IGZvciB0aGUgdHJhbnNhY3Rpb24gbG9jayB0byBi ZSByZWxlYXNlZC4gVGhpcyBpcyByZXF1aXJlZCB0byBkZXRlY3QKKwkgKiBkZWFkbG9jayBhbW9u ZyBsZWFkZXIgYW5kIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuIFNlZSBjb21tZW50cyBhdG9wIHRo aXMKKwkgKiBmaWxlLgorCSAqLwogCXBhX2xvY2tfdHJhbnNhY3Rpb24od3NoYXJlZC0+eGlkLCBB Y2Nlc3NFeGNsdXNpdmVMb2NrKTsKIAlwYV91bmxvY2tfdHJhbnNhY3Rpb24od3NoYXJlZC0+eGlk LCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKIApAQCAtMTA0NSwxNiArMTA1MCwxOSBAQCBwYV93YWl0 X2Zvcl94YWN0X2ZpbmlzaChQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkICp3c2hhcmVkKQogfQog CiAvKgotICogV2FpdCB1bnRpbCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyJ3MgdHJhbnNhY3Rp b24gc3RhdGUgcmVhY2ggb3IgZXhjZWVkIHRoZQotICogZ2l2ZW4geGFjdF9zdGF0ZS4KKyAqIFdh aXQgdW50aWwgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcidzIHRyYW5zYWN0aW9uIHN0YXRlIGhh cyByZWFjaGVkIG9yCisgKiBleGNlZWRlZCB0aGUgZ2l2ZW4geGFjdF9zdGF0ZS4KICAqLwogc3Rh dGljIHZvaWQKIHBhX3dhaXRfZm9yX3hhY3Rfc3RhdGUoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJl ZCAqd3NoYXJlZCwKLQkJCQkJCQkJICAgUGFyYWxsZWxUcmFuc1N0YXRlIHhhY3Rfc3RhdGUpCisJ CQkJCSAgIFBhcmFsbGVsVHJhbnNTdGF0ZSB4YWN0X3N0YXRlKQogewogCWZvciAoOzspCiAJewot CQkvKiBTdG9wIGlmIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSByZWFjaCBvciBleGNlZWQgdGhlIHhh Y3Rfc3RhdGUuICovCisJCS8qCisJCSAqIFN0b3AgaWYgdGhlIHRyYW5zYWN0aW9uIHN0YXRlIGhh cyByZWFjaGVkIG9yIGV4Y2VlZGVkIHRoZSBnaXZlbgorCQkgKiB4YWN0X3N0YXRlLgorCQkgKi8K IAkJaWYgKHBhX2dldF94YWN0X3N0YXRlKHdzaGFyZWQpID49IHhhY3Rfc3RhdGUpCiAJCQlicmVh azsKIApAQCAtMTA3OCw3ICsxMDg2LDcgQEAgcGFfd2FpdF9mb3JfeGFjdF9zdGF0ZShQYXJhbGxl bEFwcGx5V29ya2VyU2hhcmVkICp3c2hhcmVkLAogICovCiB2b2lkCiBwYV9zZXRfeGFjdF9zdGF0 ZShQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkICp3c2hhcmVkLAotCQkJCQkJCSAgUGFyYWxsZWxU cmFuc1N0YXRlIHhhY3Rfc3RhdGUpCisJCQkJICBQYXJhbGxlbFRyYW5zU3RhdGUgeGFjdF9zdGF0 ZSkKIHsKIAlTcGluTG9ja0FjcXVpcmUoJndzaGFyZWQtPm11dGV4KTsKIAl3c2hhcmVkLT54YWN0 X3N0YXRlID0geGFjdF9zdGF0ZTsKQEAgLTExMDIsMTMgKzExMTAsMTYgQEAgcGFfZ2V0X3hhY3Rf c3RhdGUoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqd3NoYXJlZCkKIH0KIAogLyoKLSAqIEZv cm0gdGhlIHNhdmVwb2ludCBuYW1lIGZvciB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLgorICog Rm9ybSBhIHVuaXF1ZSBzYXZlcG9pbnQgbmFtZSBmb3IgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlv bi4KKyAqCisgKiBOb3RlIHRoYXQgZGlmZmVyZW50IHN1YnNjcmlwdGlvbnMgZm9yIHB1YmxpY2F0 aW9ucyBvbiBkaWZmZXJlbnQgbm9kZXMgY2FuCisgKiByZWNlaXZlIHNhbWUgcmVtb3RlIHhpZCwg c28gd2UgbmVlZCB0byB1c2Ugc3Vic2NyaXB0aW9uIGlkIGFsb25nIHdpdGggaXQuCiAgKgogICog UmV0dXJuIHRoZSBuYW1lIGluIHRoZSBzdXBwbGllZCBidWZmZXIuCiAgKi8KIHN0YXRpYyB2b2lk Ci1wYV9zYXZlcG9pbnRfbmFtZShPaWQgc3Vib2lkLCBUcmFuc2FjdGlvbklkIHhpZCwKLQkJCQkJ CQkgIGNoYXIgKnNwbmFtZSwgU2l6ZSBzenNwKQorcGFfc2F2ZXBvaW50X25hbWUoT2lkIHN1Ym9p ZCwgVHJhbnNhY3Rpb25JZCB4aWQsIGNoYXIgKnNwbmFtZSwKKwkJCQkgIFNpemUgc3pzcCkKIHsK IAlzbnByaW50ZihzcG5hbWUsIHN6c3AsICJwZ19zcF8ldV8ldSIsIHN1Ym9pZCwgeGlkKTsKIH0K QEAgLTExMzEsNyArMTE0Miw3IEBAIHBhX3N0YXJ0X3N1YnRyYW5zKFRyYW5zYWN0aW9uSWQgY3Vy cmVudF94aWQsIFRyYW5zYWN0aW9uSWQgdG9wX3hpZCkKIAkJY2hhcgkJc3BuYW1lW05BTUVEQVRB TEVOXTsKIAogCQlwYV9zYXZlcG9pbnRfbmFtZShNeVN1YnNjcmlwdGlvbi0+b2lkLCBjdXJyZW50 X3hpZCwKLQkJCQkJCQkJCSAgc3BuYW1lLCBzaXplb2Yoc3BuYW1lKSk7CisJCQkJCQkgIHNwbmFt ZSwgc2l6ZW9mKHNwbmFtZSkpOwogCiAJCWVsb2coREVCVUcxLCAiZGVmaW5pbmcgc2F2ZXBvaW50 ICVzIGluIHBhcmFsbGVsIGFwcGx5IHdvcmtlciIsIHNwbmFtZSk7CiAKQEAgLTEyMTgsNyArMTIy OSw3IEBAIHBhX3N0cmVhbV9hYm9ydChMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhICphYm9ydF9k YXRhKQogCQljaGFyCQlzcG5hbWVbTkFNRURBVEFMRU5dOwogCiAJCXBhX3NhdmVwb2ludF9uYW1l KE15U3Vic2NyaXB0aW9uLT5vaWQsIHN1YnhpZCwgc3BuYW1lLAotCQkJCQkJCQkJICBzaXplb2Yo c3BuYW1lKSk7CisJCQkJCQkgIHNpemVvZihzcG5hbWUpKTsKIAogCQllbG9nKERFQlVHMSwgInJv bGxpbmcgYmFjayB0byBzYXZlcG9pbnQgJXMgaW4gcGFyYWxsZWwgYXBwbHkgd29ya2VyIiwgc3Bu YW1lKTsKIApAQCAtMTI2NCwxNiArMTI3NSwxOSBAQCBwYV91bmxvY2tfc3RyZWFtKFRyYW5zYWN0 aW9uSWQgeGlkLCBMT0NLTU9ERSBsb2NrbW9kZSkKIH0KIAogLyoKLSAqIEhlbHBlciBmdW5jdGlv bnMgdG8gYWNxdWlyZSBhbmQgcmVsZWFzZSBhIGxvY2sgZm9yIGVhY2ggbG9jYWwgdHJhbnNhY3Rp b24uCisgKiBIZWxwZXIgZnVuY3Rpb25zIHRvIGFjcXVpcmUgYW5kIHJlbGVhc2UgYSBsb2NrIGZv ciBlYWNoIGxvY2FsIHRyYW5zYWN0aW9uCisgKiBhcHBseS4KICAqCiAgKiBTZXQgbG9ja3RhZ19m aWVsZDQgdG8gMSB0byBpbmRpY2F0ZSB0aGF0IGl0J3MgYSB0cmFuc2FjdGlvbiBsb2NrLgogICoK LSAqIE5vdGUgdGhhdCBhbGwgdGhlIGNhbGxlcnMgYXJlIHBhc3NpbmcgcmVtb3RlIHRyYW5zYWN0 aW9uIElEIGluc3RlYWQgb2YgbG9jYWwKLSAqIHRyYW5zYWN0aW9uIElEIGFzIHhpZC4gVGhpcyBp cyBiZWNhdXNlIHRoZSBsb2NhbCB0cmFuc2FjdGlvbiBJRCB3aWxsIG9ubHkgYmUKLSAqIGFzc2ln bmVkIHdoaWxlIGFwcGx5aW5nIHRoZSBmaXJzdCBjaGFuZ2UgaW4gdGhlIHBhcmFsbGVsIGFwcGx5 LCBidXQgaXQncwotICogcG9zc2libGUgdGhhdCB0aGUgZmlyc3QgY2hhbmdlIGluIHBhcmFsbGVs IGFwcGx5IHdvcmtlciBpcyBibG9ja2VkIGJ5IGEKLSAqIGNvbmN1cnJlbnRseSBleGVjdXRpbmcg dHJhbnNhY3Rpb24gaW4gYW5vdGhlciBwYXJhbGxlbCBhcHBseSB3b3JrZXIgY2F1c2luZwotICog dGhlIGxlYWRlciBjYW5ub3QgZ2V0IGxvY2FsIHRyYW5zYWN0aW9uIElELgorICogTm90ZSB0aGF0 IGFsbCB0aGUgY2FsbGVycyBtdXN0IHBhc3MgYSByZW1vdGUgdHJhbnNhY3Rpb24gSUQgaW5zdGVh ZCBvZiBhCisgKiBsb2NhbCB0cmFuc2FjdGlvbiBJRCBhcyB4aWQuIFRoaXMgaXMgYmVjYXVzZSB0 aGUgbG9jYWwgdHJhbnNhY3Rpb24gSUQgd2lsbAorICogb25seSBiZSBhc3NpZ25lZCB3aGlsZSBh cHBseWluZyB0aGUgZmlyc3QgY2hhbmdlIGluIHRoZSBwYXJhbGxlbCBhcHBseSBidXQKKyAqIGl0 J3MgcG9zc2libGUgdGhhdCB0aGUgZmlyc3QgY2hhbmdlIGluIHRoZSBwYXJhbGxlbCBhcHBseSB3 b3JrZXIgaXMgYmxvY2tlZAorICogYnkgYSBjb25jdXJyZW50bHkgZXhlY3V0aW5nIHRyYW5zYWN0 aW9uIGluIGFub3RoZXIgcGFyYWxsZWwgYXBwbHkgd29ya2VyLiBXZQorICogY2FuIG9ubHkgY29t bXVuaWNhdGUgdGhlIGxvY2FsIHRyYW5zYWN0aW9uIGlkIHRvIHRoZSBsZWFkZXIgYWZ0ZXIgYXBw bHlpbmcKKyAqIHRoZSBmaXJzdCBjaGFuZ2Ugc28gaXQgd29uJ3QgYmUgYWJsZSB0byB3YWl0IGFm dGVyIHNlbmRpbmcgdGhlIHhhY3QgZmluaXNoCisgKiBjb21tYW5kIHVzaW5nIHRoaXMgbG9jay4K ICAqLwogdm9pZAogcGFfbG9ja190cmFuc2FjdGlvbihUcmFuc2FjdGlvbklkIHhpZCwgTE9DS01P REUgbG9ja21vZGUpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2xhdW5jaGVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMK aW5kZXggYTA4Njk5N2YxNy4uNmY5MGQzOThlZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvbGF1bmNoZXIuYwpAQCAtMjY5LDcgKzI2OSw3IEBAIGxvZ2ljYWxyZXBfd29ya2Vy c19maW5kKE9pZCBzdWJpZCwgYm9vbCBvbmx5X3J1bm5pbmcpCiB9CiAKIC8qCi0gKiBTdGFydCBu ZXcgYmFja2dyb3VuZCB3b3JrZXIsIGlmIHBvc3NpYmxlLgorICogU3RhcnQgbmV3IGxvZ2ljYWwg cmVwbGljYXRpb24gYmFja2dyb3VuZCB3b3JrZXIsIGlmIHBvc3NpYmxlLgogICoKICAqIFJldHVy bnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlLgogICovCkBAIC00ODIsNyArNDgy LDggQEAgcmV0cnk6CiB9CiAKIC8qCi0gKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBzdG9wIHRoZSB3 b3JrZXIgYW5kIHdhaXQgZm9yIGl0IHRvIGRpZS4KKyAqIEludGVybmFsIGZ1bmN0aW9uIHRvIHN0 b3AgdGhlIHdvcmtlciBhbmQgd2FpdCB1bnRpbCBpdCBkZXRhY2hlcyBmcm9tIHRoZQorICogc2xv dC4KICAqLwogc3RhdGljIHZvaWQKIGxvZ2ljYWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwoTG9n aWNhbFJlcFdvcmtlciAqd29ya2VyKQpAQCAtNTY0LDggKzU2NSw3IEBAIGxvZ2ljYWxyZXBfd29y a2VyX3N0b3BfaW50ZXJuYWwoTG9naWNhbFJlcFdvcmtlciAqd29ya2VyKQogfQogCiAvKgotICog U3RvcCB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9yIHN1YmlkL3JlbGlkLCBpZiBh bnksIGFuZCB3YWl0IHVudGlsCi0gKiBpdCBkZXRhY2hlcyBmcm9tIHRoZSBzbG90LgorICogU3Rv cCB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9yIHN1YmlkL3JlbGlkLCBpZiBhbnku CiAgKi8KIHZvaWQKIGxvZ2ljYWxyZXBfd29ya2VyX3N0b3AoT2lkIHN1YmlkLCBPaWQgcmVsaWQp CkBAIC01ODYsOCArNTg2LDcgQEAgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9p ZCByZWxpZCkKIH0KIAogLyoKLSAqIFN0b3AgdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2Vy IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGlucHV0IHNsb3QgbnVtYmVyLAotICogYW5kIHdhaXQgdW50 aWwgaXQgZGV0YWNoZXMgZnJvbSB0aGUgc2xvdC4KKyAqIFN0b3AgdGhlIGxvZ2ljYWwgcmVwbGlj YXRpb24gd29ya2VyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGlucHV0IHNsb3QgbnVtYmVyLgogICov CiB2b2lkCiBsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2J5X3Nsb3QoaW50IHNsb3Rfbm8sIHVpbnQx NiBnZW5lcmF0aW9uKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9vcmlnaW4uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMKaW5k ZXggODBkZWExMmU2NS4uZTFmY2ZhOGIzNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9vcmlnaW4uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL29yaWdpbi5jCkBAIC0xMDc5LDE0ICsxMDc5LDExIEBAIFJlcGxpY2F0aW9uT3JpZ2luRXhp dENsZWFudXAoaW50IGNvZGUsIERhdHVtIGFyZykKICAqIGNhY2hlZCB2YWx1ZSBjYW4gb25seSBi ZSBzZXQgYWdhaW4gYWZ0ZXIgdGhlIHByZXZpb3VzIHZhbHVlIGlzIHRvcm4gZG93bgogICogd2l0 aCByZXBsb3JpZ2luX3Nlc3Npb25fcmVzZXQoKS4KICAqCi0gKiBIb3dldmVyLCBpZiB0aGUgZnVu Y3Rpb24gcGFyYW1ldGVyICdhY3F1aXJlZF9ieScgaXMgbm90IDAsIHdlIGFsbG93IHRoZQotICog cHJvY2VzcyB0byB1c2UgdGhlIHNhbWUgc2xvdCBhbHJlYWR5IGFjcXVpcmVkIGJ5IGFub3RoZXIg cHJvY2Vzcy4gSXQncyBzYWZlCi0gKiBiZWNhdXNlIDEpIFRoZSBvbmx5IGNhbGxlciAocGFyYWxs ZWwgYXBwbHkgd29ya2Vycykgd2lsbCBtYWludGFpbiB0aGUKLSAqIGNvbW1pdCBvcmRlciBieSBh bGxvd2luZyBvbmx5IG9uZSBwcm9jZXNzIHRvIGNvbW1pdCBhdCBhIHRpbWUsIHNvIG5vIHR3bwot ICogd29ya2VycyB3aWxsIGJlIG9wZXJhdGluZyBvbiB0aGUgc2FtZSBvcmlnaW4gYXQgdGhlIHNh bWUgdGltZSAoc2VlIGNvbW1lbnRzCi0gKiBpbiBsb2dpY2FsL3dvcmtlci5jKS4gMikgRXZlbiB0 aG91Z2ggd2UgdHJ5IHRvIGFkdmFuY2UgdGhlIHNlc3Npb24ncyBvcmlnaW4KLSAqIGNvbmN1cnJl bnRseSwgaXQncyBzYWZlIHRvIGRvIHNvIGFzIHdlIGNoYW5nZS9hZHZhbmNlIHRoZSBzZXNzaW9u X29yaWdpbgotICogTFNOcyB1bmRlciByZXBsaWNhdGVfc3RhdGUgTFdMb2NrLgorICogSG93ZXZl ciwgd2UgZG8gYWxsb3cgbXVsdGlwbGUgcHJvY2Vzc2VzIHRvIHBvaW50IHRvIHRoZSBzYW1lIG9y aWdpbiBzbG90CisgKiBpZiByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlciBieSBwYXNzaW5nIFBJRCBv ZiB0aGUgcHJvY2VzcyB0aGF0IGhhcyBhbHJlYWR5CisgKiBhY3F1aXJlZCBpdC4gVGhpcyBpcyB0 byBhbGxvdyB1c2luZyB0aGUgc2FtZSBvcmlnaW4gYnkgbXVsdGlwbGUgcGFyYWxsZWwKKyAqIGFw cGx5IHByb2Nlc3NlcyB0aGUgcHJvdmlkZWQgdGhleSBtYWludGFpbiBjb21taXQgb3JkZXIsIGZv ciBleGFtcGxlLCBieQorICogYWxsb3dpbmcgb25seSBvbmUgcHJvY2VzcyB0byBjb21taXQgYXQg YSB0aW1lLgogICovCiB2b2lkCiByZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAoUmVwT3JpZ2luSWQg bm9kZSwgaW50IGFjcXVpcmVkX2J5KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC90YWJsZXN5bmMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv dGFibGVzeW5jLmMKaW5kZXggNjQ0ZDVlMDFjZi4uZTI0MzBmY2VkNSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYworKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCkBAIC02MzIsOCArNjMyLDkgQEAgdm9p ZAogcHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhYTG9nUmVjUHRyIGN1cnJlbnRfbHNuKQogewogCS8q Ci0JICogU2tpcCBmb3IgcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4gU2VlIHBhX2Nhbl9zdGFydCgp IGZvcgotCSAqIGRldGFpbHMuCisJICogU2tpcCBmb3IgcGFyYWxsZWwgYXBwbHkgd29ya2VycyBh cyB0aGV5IGRvbid0IG9wZXJhdGUgb24gdGFibGVzIHRoYXQKKwkgKiBhcmUgbm90IGluIHJlYWR5 IHN0YXRlLiBTZWUgcGFfY2FuX3N0YXJ0KCkgYW5kCisJICogc2hvdWxkX2FwcGx5X2NoYW5nZXNf Zm9yX3JlbCgpLgogCSAqLwogCWlmIChhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKIAkJcmV0 dXJuOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggZjA5YzVj MmRjZS4uNGJmMTk0ZmFjYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtl ci5jCkBAIC0xNDE2LDExICsxNDE2LDcgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFydChTdHJp bmdJbmZvIHMpCiAKIAlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KHN0cmVhbV94aWQsIElu dmFsaWRYTG9nUmVjUHRyKTsKIAotCS8qCi0JICogRm9yIHRoZSBmaXJzdCBzdHJlYW0gc3RhcnQs IGNoZWNrIGlmIHRoZXJlIGlzIGFueSBmcmVlIHBhcmFsbGVsIGFwcGx5Ci0JICogd29ya2VyIHdl IGNhbiB1c2UgdG8gcHJvY2VzcyB0aGlzIHRyYW5zYWN0aW9uLCBvdGhlcndpc2UgdHJ5IHRvIHN0 YXJ0IGEKLQkgKiBuZXcgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgotCSAqLworCS8qIFRyeSB0byBh bGxvY2F0ZSBhIHdvcmtlciBmb3IgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbi4gKi8KIAlpZiAo Zmlyc3Rfc2VnbWVudCkKIAkJcGFfc3RhcnRfd29ya2VyKHN0cmVhbV94aWQpOwogCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCBiL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCmluZGV4IGMxZjg2NjZmMTQuLjU2NWQ0 ZDczZGUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5h bC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCkBAIC0x MjksNyArMTI5LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZAog CiAJLyogSW5mb3JtYXRpb24gZnJvbSB0aGUgY29ycmVzcG9uZGluZyBMb2dpY2FsUmVwV29ya2Vy IHNsb3QuICovCiAJdWludDE2CQlsb2dpY2FscmVwX3dvcmtlcl9nZW5lcmF0aW9uOwotCiAJaW50 CQkJbG9naWNhbHJlcF93b3JrZXJfc2xvdF9ubzsKIAogCS8qCg== --0000000000004e195205edd09210--