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 1nchVS-00017n-S8 for pgsql-hackers@arkaria.postgresql.org; Fri, 08 Apr 2022 05:50:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nchVR-0002MZ-QL for pgsql-hackers@arkaria.postgresql.org; Fri, 08 Apr 2022 05:50:01 +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 1nchVR-0002MN-8y for pgsql-hackers@lists.postgresql.org; Fri, 08 Apr 2022 05:50:01 +0000 Received: from mail-ed1-x536.google.com ([2a00:1450:4864:20::536]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nchVO-0002k0-3y for pgsql-hackers@postgresql.org; Fri, 08 Apr 2022 05:50:00 +0000 Received: by mail-ed1-x536.google.com with SMTP id z99so224256ede.5 for ; Thu, 07 Apr 2022 22:49:57 -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=7H+JRSme54ZRTp2HUh1EgCT9l5Gp753XFKbkqObQS/s=; b=J7rgJ2fctGhvznW2WR+zWROQkyeuC3zHJrjQx4Qdma7yq5s2MUj3PmFNr8/CaxW0RL XVddmDU888FaOGTsGH9mwJQNYrJDoH48Ed2ieZizbVq+vSNoIr+yia+Oz9o6NW9xlB/l vMj9aMM3v7rw+kSItO/noZxIe49JPVGfN54Dc4mjwG6gAh2L/Vjkws7WLayh9pL2DGGD 0ZeWKZ3ybdIfE6npFneaIUY6R7H3hHJ+IuHCQm5M96hmE1iK8VtkDqAL2QzDsvSeYwrt pdCmjPzYGZXetj/iVevaMhMFo3XqXXvzwu+dx5Oh1N42lLTzXn11KdKbU9D2QUdG+1bJ jEFg== 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=7H+JRSme54ZRTp2HUh1EgCT9l5Gp753XFKbkqObQS/s=; b=omia5xafj/NlRP+SbMKia2ZHE6JhXJ+b+IhQuXuEoAXLmSGFzG+gu5q6yFyLWH84Ls ymD4bKQwmRT7x2IOS44F4RKB4NuHQUfZw3KmhtNgHEoqRliVVjyPgGMvdj3RS5by6iRO os+WsXJd7pzSxJdj4KzN8jZE9qiNZocO74m+IJRenhcMfdb6yAw2mTe8FC10rpmYLkR9 iRUN9Tdv9zy0t6ml30Ydj5j9sF69Xq6cDEgdcOeFmmlBMHL4FYGaNfMsxk/3puE2Jdqx 2LYLb9C3NsYReWepeth7GGrrHg6KOPswHEZDheSnhMUMV0cBNYyzEW0iRODV+r/OXQuC gNRw== X-Gm-Message-State: AOAM530kp2kAJFPoJg0z3lUB6DQ1U76q2ATg2UMIBlvvdmN/P0IX45+S Pw5VKz2FdRTNutyyHhyTkMW7C7eOzvzI7Fm2/5SpThwHKBc= X-Google-Smtp-Source: ABdhPJzi582/rP2J/PrAmZ2dwQUD7ZgoF1dZ/2Eyx14UQ2sDFCYPyzxjtPCapiLXuzV2fdONHo245jN9/JMAjtMhzEg= X-Received: by 2002:a05:6402:2553:b0:41c:debb:e4ac with SMTP id l19-20020a056402255300b0041cdebbe4acmr17628537edb.352.1649396996115; Thu, 07 Apr 2022 22:49:56 -0700 (PDT) MIME-Version: 1.0 References: <215356.1647286703@sss.pgh.pa.us> In-Reply-To: From: Amit Langote Date: Fri, 8 Apr 2022 14:49:39 +0900 Message-ID: Subject: Re: generic plans and "initial" pruning To: David Rowley Cc: Robert Haas , Tom Lane , PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000000c302505dc1e2a07" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000c302505dc1e2a07 Content-Type: text/plain; charset="UTF-8" On Thu, Apr 7, 2022 at 9:41 PM David Rowley wrote: > On Thu, 7 Apr 2022 at 20:28, Amit Langote wrote: > > Here's an updated version. In Particular, I removed > > part_prune_results list from PortalData, in favor of anything that > > needs to look at the list can instead get it from the CachedPlan > > (PortalData.cplan). This makes things better in 2 ways: > > Thanks for making those changes. > > I'm not overly familiar with the data structures we use for planning > around plans between the planner and executor, but storing the pruning > results in CachedPlan seems pretty bad. I see you've stashed it in > there and invented a new memory context to stop leaks into the cache > memory. > > Since I'm not overly familiar with these structures, I'm trying to > imagine why you made that choice and the best I can come up with was > that it was the most convenient thing you had to hand inside > CheckCachedPlan(). Yeah, it's that way because it felt convenient, though I have wondered if a simpler scheme that doesn't require any changes to the CachedPlan data structure might be better after all. Your pointing it out has made me think a bit harder on that. > I don't really have any great ideas right now on how to make this > better. I wonder if GetCachedPlan() should be changed to return some > struct that wraps up the CachedPlan with some sort of executor prep > info struct that we can stash the list of PartitionPruneResults in, > and perhaps something else one day. I think what might be better to do now is just add an output List parameter to GetCachedPlan() to add the PartitionPruneResult node to instead of stashing them into CachedPlan as now. IMHO, we should leave inventing a new generic struct to the next project that will make it necessary to return more information from GetCachedPlan() to its users. I find it hard to convincingly describe what the new generic struct really is if we invent it *now*, when it's going to carry a single list whose purpose is pretty narrow. So, I've implemented this by making the callers of GetCachedPlan() pass a list to add the PartitionPruneResults that may be produced. Most callers can put that into the Portal for passing that to other modules, so I have reinstated PortalData.part_prune_results. As for its memory management, the list and the PartitionPruneResults therein will be allocated in a context that holds the Portal itself. > Some lesser important stuff that I think could be done better. > > * Are you also able to put meaningful comments on the > PartitionPruneResult struct in execnodes.h? > > * In create_append_plan() and create_merge_append_plan() you have the > same code to set the part_prune_index. Why not just move all that code > into make_partition_pruneinfo() and have make_partition_pruneinfo() > return the index and append to the PlannerInfo.partPruneInfos List? That sounds better, so done. > * Why not forboth() here? > > i = 0; > foreach(stmtlist_item, portal->stmts) > { > PlannedStmt *pstmt = lfirst_node(PlannedStmt, stmtlist_item); > PartitionPruneResult *part_prune_result = part_prune_results ? > list_nth(part_prune_results, i) : > NULL; > > i++; Because the PartitionPruneResult list may not always be available. To wit, it's only available when it is GetCachedPlan() that gave the portal its plan. I know this is a bit ugly, but it seems better than fixing all users of Portal to build a dummy list, not that it is totally avoidable even in the current implementation. > * It would be good if ReleaseExecutorLocks() already knew the RTIs > that were locked. Maybe the executor prep info struct I mentioned > above could also store the RTIs that have been locked already and > allow ReleaseExecutorLocks() to just iterate over those to release the > locks. Rewrote this such that ReleaseExecutorLocks() just receives a list of per-PlannedStmt bitmapsets containing the RT indexes of only the locked entries in that plan. Attached updated patch with these changes. -- Amit Langote EDB: http://www.enterprisedb.com --0000000000000c302505dc1e2a07 Content-Type: application/octet-stream; name="v13-0001-Optimize-AcquireExecutorLocks-to-skip-pruned-par.patch" Content-Disposition: attachment; filename="v13-0001-Optimize-AcquireExecutorLocks-to-skip-pruned-par.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1q0daeq0 RnJvbSAzYzBjN2Y5ZjVmOGJkZjg5YzZhZmQwNmUyNmJhNmQ1NDkwYWY5MjIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyMiBEZWMgMjAyMSAxNjo1NToxNyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjEzXSBP cHRpbWl6ZSBBY3F1aXJlRXhlY3V0b3JMb2NrcygpIHRvIHNraXAgcHJ1bmVkIHBhcnRpdGlvbnMK Ci0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMgICAgICAgICAgIHwgICAyICstCiBz cmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICB8ICAgNyArLQogc3JjL2JhY2tlbmQvY29t bWFuZHMvZXh0ZW5zaW9uLmMgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9t YXR2aWV3LmMgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUu YyAgICAgICAgICB8ICAyNiArKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRSAgICAgICAg ICAgICB8ICAyNyArKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgICAgICAgICB8 ICA0NiArKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgICAgIHwgIDI4 ICsrLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jICAgIHwgMjM4ICsrKysr KysrKysrKysrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMgICAg ICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jICAgICAgICB8ICAg MiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jICAgICAgIHwgIDE2ICstCiBz cmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyAgfCAgIDkgKy0KIHNyYy9iYWNr ZW5kL2V4ZWN1dG9yL3NwaS5jICAgICAgICAgICAgICB8ICAyNyArKy0KIHNyYy9iYWNrZW5kL25v ZGVzL2NvcHlmdW5jcy5jICAgICAgICAgICB8ICAzMyArKystCiBzcmMvYmFja2VuZC9ub2Rlcy9v dXRmdW5jcy5jICAgICAgICAgICAgfCAgMzYgKysrLQogc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1 bmNzLmMgICAgICAgICAgIHwgIDU2ICsrKysrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jIHwgIDI1ICstLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5l ci5jICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyAgICB8 IDEwNCArKysrKysrKy0tLQogc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jICAg IHwgIDU5ICsrKysrLQogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgICAgIHwg ICA4ICstCiBzcmMvYmFja2VuZC90Y29wL3BxdWVyeS5jICAgICAgICAgICAgICAgfCAgMjUgKyst CiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyAgICAgfCAxODQgKysrKysrKysr KysrKysrLS0tCiBzcmMvYmFja2VuZC91dGlscy9tbWdyL3BvcnRhbG1lbS5jICAgICAgfCAgMTkg KysKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaCAgICAgICAgICB8ICAgMyArLQogc3Jj L2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oICAgIHwgIDEyICstCiBzcmMvaW5jbHVk ZS9leGVjdXRvci9leGVjZGVzYy5oICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY3V0b3IuaCAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oICAgICAgICAgICB8ICAzMCArKysKIHNyYy9pbmNsdWRlL25vZGVzL25vZGVzLmggICAgICAg ICAgICAgICB8ICAgNCArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAg fCAgMTUgKysKIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oICAgICAgICAgICB8ICAzOSAr KystCiBzcmMvaW5jbHVkZS9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmggICAgfCAgIDggKy0KIHNy Yy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oICAgICAgICAgICB8ICAgMyArLQogc3JjL2luY2x1 ZGUvdXRpbHMvcG9ydGFsLmggICAgICAgICAgICAgIHwgICAzICsKIDM3IGZpbGVzIGNoYW5nZWQs IDk0MiBpbnNlcnRpb25zKCspLCAxNjcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvY29weXRvLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYwpp bmRleCA1NWMzOGIwNGM0Li5kNDAzZWIyMzA5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9jb3B5dG8uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYwpAQCAtNTQy LDcgKzU0Miw3IEBAIEJlZ2luQ29weVRvKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJKChEUl9jb3B5 ICopIGRlc3QpLT5jc3RhdGUgPSBjc3RhdGU7CiAKIAkJLyogQ3JlYXRlIGEgUXVlcnlEZXNjIHJl cXVlc3Rpbmcgbm8gb3V0cHV0ICovCi0JCWNzdGF0ZS0+cXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlE ZXNjKHBsYW4sIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAorCQljc3RhdGUtPnF1ZXJ5RGVzYyA9IENy ZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBOVUxMLCBwc3RhdGUtPnBfc291cmNldGV4dCwKIAkJCQkJCQkJ CQkJR2V0QWN0aXZlU25hcHNob3QoKSwKIAkJCQkJCQkJCQkJSW52YWxpZFNuYXBzaG90LAogCQkJ CQkJCQkJCQlkZXN0LCBOVUxMLCBOVUxMLCAwKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2NyZWF0ZWFzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCmluZGV4 IDlhYmJiNmI1NTUuLmY2NjA3ZjI0NTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2NyZWF0ZWFzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYwpAQCAtMzI1 LDcgKzMyNSw3IEBAIEV4ZWNDcmVhdGVUYWJsZUFzKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRl VGFibGVBc1N0bXQgKnN0bXQsCiAJCVVwZGF0ZUFjdGl2ZVNuYXBzaG90Q29tbWFuZElkKCk7CiAK IAkJLyogQ3JlYXRlIGEgUXVlcnlEZXNjLCByZWRpcmVjdGluZyBvdXRwdXQgdG8gb3VyIHR1cGxl IHJlY2VpdmVyICovCi0JCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBwc3RhdGUt PnBfc291cmNldGV4dCwKKwkJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIE5VTEws IHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAogCQkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgSW52 YWxpZFNuYXBzaG90LAogCQkJCQkJCQkJZGVzdCwgcGFyYW1zLCBxdWVyeUVudiwgMCk7CiAKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4cGxhaW4uYwppbmRleCAxZTU3MDFiOGViLi43YmE5ODUyZTUxIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXhwbGFpbi5jCkBAIC00MDcsNyArNDA3LDcgQEAgRXhwbGFpbk9uZVF1ZXJ5KFF1ZXJ5ICpx dWVyeSwgaW50IGN1cnNvck9wdGlvbnMsCiAJCX0KIAogCQkvKiBydW4gaXQgKGlmIG5lZWRlZCkg YW5kIHByb2R1Y2Ugb3V0cHV0ICovCi0JCUV4cGxhaW5PbmVQbGFuKHBsYW4sIGludG8sIGVzLCBx dWVyeVN0cmluZywgcGFyYW1zLCBxdWVyeUVudiwKKwkJRXhwbGFpbk9uZVBsYW4ocGxhbiwgTlVM TCwgaW50bywgZXMsIHF1ZXJ5U3RyaW5nLCBwYXJhbXMsIHF1ZXJ5RW52LAogCQkJCQkgICAmcGxh bmR1cmF0aW9uLCAoZXMtPmJ1ZmZlcnMgPyAmYnVmdXNhZ2UgOiBOVUxMKSk7CiAJfQogfQpAQCAt NTE1LDcgKzUxNSw4IEBAIEV4cGxhaW5PbmVVdGlsaXR5KE5vZGUgKnV0aWxpdHlTdG10LCBJbnRv Q2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogICogdG8gY2FsbCBpdC4KICAqLwogdm9p ZAotRXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNlICpp bnRvLCBFeHBsYWluU3RhdGUgKmVzLAorRXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0bXQgKnBsYW5u ZWRzdG10LCBQYXJ0aXRpb25QcnVuZVJlc3VsdCAqcGFydF9wcnVuZV9yZXN1bHQsCisJCQkgICBJ bnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCQkJICAgY29uc3QgY2hhciAqcXVl cnlTdHJpbmcsIFBhcmFtTGlzdEluZm8gcGFyYW1zLAogCQkJICAgUXVlcnlFbnZpcm9ubWVudCAq cXVlcnlFbnYsIGNvbnN0IGluc3RyX3RpbWUgKnBsYW5kdXJhdGlvbiwKIAkJCSAgIGNvbnN0IEJ1 ZmZlclVzYWdlICpidWZ1c2FnZSkKQEAgLTU2Myw3ICs1NjQsNyBAQCBFeHBsYWluT25lUGxhbihQ bGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAq ZXMsCiAJCWRlc3QgPSBOb25lX1JlY2VpdmVyOwogCiAJLyogQ3JlYXRlIGEgUXVlcnlEZXNjIGZv ciB0aGUgcXVlcnkgKi8KLQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbm5lZHN0bXQs IHF1ZXJ5U3RyaW5nLAorCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFubmVkc3RtdCwg cGFydF9wcnVuZV9yZXN1bHQsIHF1ZXJ5U3RyaW5nLAogCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hv dCgpLCBJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkJCWRlc3QsIHBhcmFtcywgcXVlcnlFbnYsIGlu c3RydW1lbnRfb3B0aW9uKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0 ZW5zaW9uLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYwppbmRleCAxMDEzNzkw ZGJiLi41NDczNGEzYTkzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNp b24uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYwpAQCAtNzc2LDcgKzc3 Niw3IEBAIGV4ZWN1dGVfc3FsX3N0cmluZyhjb25zdCBjaGFyICpzcWwpCiAJCQl7CiAJCQkJUXVl cnlEZXNjICAqcWRlc2M7CiAKLQkJCQlxZGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhzdG10LAorCQkJ CXFkZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHN0bXQsIE5VTEwsCiAJCQkJCQkJCQkJc3FsLAogCQkJ CQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksIE5VTEwsCiAJCQkJCQkJCQkJZGVzdCwgTlVMTCwg TlVMTCwgMCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKaW5kZXggOWFiMjQ4ZDI1ZS4uMmJlMTc4MmJj NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYwpAQCAtNDE2LDcgKzQxNiw3IEBAIHJlZnJlc2hfbWF0 dmlld19kYXRhZmlsbChEZXN0UmVjZWl2ZXIgKmRlc3QsIFF1ZXJ5ICpxdWVyeSwKIAlVcGRhdGVB Y3RpdmVTbmFwc2hvdENvbW1hbmRJZCgpOwogCiAJLyogQ3JlYXRlIGEgUXVlcnlEZXNjLCByZWRp cmVjdGluZyBvdXRwdXQgdG8gb3VyIHR1cGxlIHJlY2VpdmVyICovCi0JcXVlcnlEZXNjID0gQ3Jl YXRlUXVlcnlEZXNjKHBsYW4sIHF1ZXJ5U3RyaW5nLAorCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5 RGVzYyhwbGFuLCBOVUxMLCBxdWVyeVN0cmluZywKIAkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3Qo KSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJCQlkZXN0LCBOVUxMLCBOVUxMLCAwKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvcHJlcGFyZS5jCmluZGV4IDgwNzM4NTQ3ZWQuLmM3MzYwNzEyYjEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9wcmVwYXJlLmMKQEAgLTE1NSw2ICsxNTUsNyBAQCBFeGVjdXRlUXVlcnkoUGFyc2VTdGF0ZSAq cHN0YXRlLAogCVByZXBhcmVkU3RhdGVtZW50ICplbnRyeTsKIAlDYWNoZWRQbGFuICpjcGxhbjsK IAlMaXN0CSAgICpwbGFuX2xpc3Q7CisJTGlzdAkgICAqcGFydF9wcnVuZV9yZXN1bHRfbGlzdDsK IAlQYXJhbUxpc3RJbmZvIHBhcmFtTEkgPSBOVUxMOwogCUVTdGF0ZQkgICAqZXN0YXRlID0gTlVM TDsKIAlQb3J0YWwJCXBvcnRhbDsKQEAgLTE5Myw3ICsxOTQsMTAgQEAgRXhlY3V0ZVF1ZXJ5KFBh cnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkJCSAgIGVudHJ5LT5wbGFuc291cmNlLT5xdWVyeV9z dHJpbmcpOwogCiAJLyogUmVwbGFuIGlmIG5lZWRlZCwgYW5kIGluY3JlbWVudCBwbGFuIHJlZmNv dW50IGZvciBwb3J0YWwgKi8KLQljcGxhbiA9IEdldENhY2hlZFBsYW4oZW50cnktPnBsYW5zb3Vy Y2UsIHBhcmFtTEksIE5VTEwsIE5VTEwpOworCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihlbnRyeS0+ cGxhbnNvdXJjZSwgcGFyYW1MSSwgTlVMTCwgTlVMTCwKKwkJCQkJCSAgJnBhcnRfcHJ1bmVfcmVz dWx0X2xpc3QpOworCUFzc2VydChsaXN0X2xlbmd0aChjcGxhbi0+c3RtdF9saXN0KSA9PQorCQkg ICBsaXN0X2xlbmd0aChwYXJ0X3BydW5lX3Jlc3VsdF9saXN0KSk7CiAJcGxhbl9saXN0ID0gY3Bs YW4tPnN0bXRfbGlzdDsKIAogCS8qCkBAIC0yMDcsNiArMjExLDkgQEAgRXhlY3V0ZVF1ZXJ5KFBh cnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJICBwbGFuX2xpc3QsCiAJCQkJCSAgY3BsYW4pOwogCisJ LyogQ29weSBQYXJ0aXRpb25QcnVuZVJlc3VsdHMgaW50byB0aGUgcG9ydGFsJ3MgY29udGV4dC4g Ki8KKwlQb3J0YWxTdG9yZVBhcnRpdGlvblBydW5lUmVzdWx0cyhwb3J0YWwsIHBhcnRfcHJ1bmVf cmVzdWx0X2xpc3QpOworCiAJLyoKIAkgKiBGb3IgQ1JFQVRFIFRBQkxFIC4uLiBBUyBFWEVDVVRF LCB3ZSBtdXN0IHZlcmlmeSB0aGF0IHRoZSBwcmVwYXJlZAogCSAqIHN0YXRlbWVudCBpcyBvbmUg dGhhdCBwcm9kdWNlcyB0dXBsZXMuICBDdXJyZW50bHkgd2UgaW5zaXN0IHRoYXQgaXQgYmUKQEAg LTU3Niw3ICs1ODMsOSBAQCBFeHBsYWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10ICpleGVjc3Rt dCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAljb25zdCBjaGFyICpxdWVy eV9zdHJpbmc7CiAJQ2FjaGVkUGxhbiAqY3BsYW47CiAJTGlzdAkgICAqcGxhbl9saXN0OwotCUxp c3RDZWxsICAgKnA7CisJTGlzdAkgICAqcGFydF9wcnVuZV9yZXN1bHRfbGlzdDsKKwlMaXN0Q2Vs bCAgICpwLAorCQkJICAgKnBwOwogCVBhcmFtTGlzdEluZm8gcGFyYW1MSSA9IE5VTEw7CiAJRVN0 YXRlCSAgICplc3RhdGUgPSBOVUxMOwogCWluc3RyX3RpbWUJcGxhbnN0YXJ0OwpAQCAtNjE5LDcg KzYyOCwxMCBAQCBFeHBsYWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10ICpleGVjc3RtdCwgSW50 b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAogCS8qIFJlcGxhbiBpZiBuZWVkZWQs IGFuZCBhY3F1aXJlIGEgdHJhbnNpZW50IHJlZmNvdW50ICovCiAJY3BsYW4gPSBHZXRDYWNoZWRQ bGFuKGVudHJ5LT5wbGFuc291cmNlLCBwYXJhbUxJLAotCQkJCQkJICBDdXJyZW50UmVzb3VyY2VP d25lciwgcXVlcnlFbnYpOworCQkJCQkJICBDdXJyZW50UmVzb3VyY2VPd25lciwgcXVlcnlFbnYs CisJCQkJCQkgICZwYXJ0X3BydW5lX3Jlc3VsdF9saXN0KTsKKwlBc3NlcnQobGlzdF9sZW5ndGgo Y3BsYW4tPnN0bXRfbGlzdCkgPT0KKwkJICAgbGlzdF9sZW5ndGgocGFydF9wcnVuZV9yZXN1bHRf bGlzdCkpOwogCiAJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChwbGFuZHVyYXRpb24pOwogCUlOU1RS X1RJTUVfU1VCVFJBQ1QocGxhbmR1cmF0aW9uLCBwbGFuc3RhcnQpOwpAQCAtNjM0LDEzICs2NDYs MTUgQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShFeGVjdXRlU3RtdCAqZXhlY3N0bXQsIEludG9DbGF1 c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJcGxhbl9saXN0ID0gY3BsYW4tPnN0bXRfbGlz dDsKIAogCS8qIEV4cGxhaW4gZWFjaCBxdWVyeSAqLwotCWZvcmVhY2gocCwgcGxhbl9saXN0KQor CWZvcmJvdGgocCwgcGxhbl9saXN0LCBwcCwgcGFydF9wcnVuZV9yZXN1bHRfbGlzdCkKIAl7CiAJ CVBsYW5uZWRTdG10ICpwc3RtdCA9IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10LCBwKTsKKwkJUGFy dGl0aW9uUHJ1bmVSZXN1bHQgKnBhcnRfcHJ1bmVfcmVzdWx0ID0gbGZpcnN0X25vZGUoUGFydGl0 aW9uUHJ1bmVSZXN1bHQsIHBwKTsKIAogCQlpZiAocHN0bXQtPmNvbW1hbmRUeXBlICE9IENNRF9V VElMSVRZKQotCQkJRXhwbGFpbk9uZVBsYW4ocHN0bXQsIGludG8sIGVzLCBxdWVyeV9zdHJpbmcs IHBhcmFtTEksIHF1ZXJ5RW52LAotCQkJCQkJICAgJnBsYW5kdXJhdGlvbiwgKGVzLT5idWZmZXJz ID8gJmJ1ZnVzYWdlIDogTlVMTCkpOworCQkJRXhwbGFpbk9uZVBsYW4ocHN0bXQsIHBhcnRfcHJ1 bmVfcmVzdWx0LCBpbnRvLCBlcywgcXVlcnlfc3RyaW5nLAorCQkJCQkJICAgcGFyYW1MSSwgcXVl cnlFbnYsICZwbGFuZHVyYXRpb24sCisJCQkJCQkgICAoZXMtPmJ1ZmZlcnMgPyAmYnVmdXNhZ2Ug OiBOVUxMKSk7CiAJCWVsc2UKIAkJCUV4cGxhaW5PbmVVdGlsaXR5KHBzdG10LT51dGlsaXR5U3Rt dCwgaW50bywgZXMsIHF1ZXJ5X3N0cmluZywKIAkJCQkJCQkgIHBhcmFtTEksIHF1ZXJ5RW52KTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRSBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL1JFQURNRQppbmRleCAwYjUxODNmYzRhLi5lMDgwMmJlNzIzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvUkVB RE1FCkBAIC02NSw2ICs2NSwyOSBAQCBmb3VuZCB0aGVyZS4gIFRoaXMgY3VycmVudGx5IG9ubHkg b2NjdXJzIGZvciBBcHBlbmQgYW5kIE1lcmdlQXBwZW5kIG5vZGVzLiAgSW4KIHRoaXMgY2FzZSB0 aGUgbm9uLXJlcXVpcmVkIHN1YnBsYW5zIGFyZSBpZ25vcmVkIGFuZCB0aGUgZXhlY3V0b3Igc3Rh dGUncwogc3Vibm9kZSBhcnJheSB3aWxsIGJlY29tZSBvdXQgb2Ygc2VxdWVuY2UgdG8gdGhlIHBs YW4ncyBzdWJwbGFuIGxpc3QuCiAKK0FjdHVhbGx5LCB0aGUgc28tY2FsbGVkIGV4ZWN1dGlvbiB0 aW1lIHBydW5pbmcgbWF5IGFsc28gb2NjdXIgZXZlbiBiZWZvcmUgdGhlCitleGVjdXRpb24gaGFz IHN0YXJ0ZWQuICBPbmUgY2FzZSB3aGVyZSB0aGF0IG9jY3VycyBpcyB3aGVuIGEgY2FjaGVkIGdl bmVyaWMKK3BsYW4gaXMgYmVpbmcgdmFsaWRhdGVkIGZvciBleGVjdXRpb24gYnkgcGxhbmNhY2hl LmM6IEdldENhY2hlZFBsYW4oKSwgd2hpY2gKK3Byb2NlZWRzIGJ5IGxvY2tpbmcgYWxsIHRoZSBy ZWxhdGlvbnMgdGhhdCB3aWxsIGJlIHNjYW5uZWQgYnkgdGhhdCBwbGFuLiAgSWYKK3RoZSBnZW5l cmljIHBsYW4gY29udGFpbnMgbm9kZXMgdGhhdCBjYW4gcGVyZm9ybSBleGVjdXRpb24gdGltZSBw YXJ0aXRpb24KK3BydW5pbmcgKHRoYXQgaXMsIGNvbnRhaW4gYSBQYXJ0aXRpb25QcnVuZUluZm8p LCBhIHN1YnNldCBvZiBwcnVuaW5nIHN0ZXBzCitjb250YWluZWQgaW4gdGhlIFBhcnRpdGlvblBy dW5lSW5mb3MgdGhhdCBkbyBub3QgZGVwZW5kIG9uIGV4ZWN1dGlvbiBhY3R1YWxseQoraGF2aW5n IHN0YXJ0ZWQgKGNhbGxlZCAiaW5pdGlhbCIgcHJ1bmluZyBzdGVwcykgYXJlIHBlcmZvcm1lZCBh dCB0aGlzIHBvaW50Cit0byBmaWd1cmUgb3V0IHRoZSBtaW5pbWFsIHNldCBvZiBjaGlsZCBzdWJw bGFucyB0aGF0IHNhdGlzZnkgdGhvc2UgcHJ1bmluZworaW5zdHJ1Y3Rpb25zLiAgQWNxdWlyZUV4 ZWN1dG9yTG9ja3MoKSBsb29raW5nIGF0IGEgcGFydGljdWxhciBwbGFuIHdpbGwgdGhlbgorbG9j ayBvbmx5IHRoZSByZWxhdGlvbnMgc2Nhbm5lZCBieSB0aG9zZSBzdXJ2aXZpbmcgc3VicGxhbnMg KGFsb25nIHdpdGggdGhvc2UKK3ByZXNlbnQgaW4gUGxhbm5lZFN0bXQubWluTG9ja1JlbGlkcyks IGFuZCBpZ25vcmUgdGhvc2Ugc2Nhbm5lZCBieSB0aGUgcHJ1bmVkCitzdWJwbGFucywgZXZlbiB0 aG91Z2ggdGhlIHBydW5lZCBzdWJwbGFucyB0aGVtc2VsdmVzIGFyZSBub3QgcmVtb3ZlZCBmcm9t IHRoZQorcGxhbiB0cmVlLiAgVGhlIHJlc3VsdCBvZiBwcnVuaW5nICh0aGF0IGlzLCB0aGUgc2V0 IG9mIGluZGV4ZXMgb2Ygc3Vydml2aW5nCitzdWJwbGFucyBpbiB0aGVpciBwYXJlbnQncyBsaXN0 IG9mIGNoaWxkIHN1YnBsYW5zKSBpcyBzYXZlZCBhcyBhIGxpc3Qgb2YKK2JpdG1hcHNldHMsIHdp dGggb25lIGVsZW1lbnQgZm9yIGV2ZXJ5IFBhcnRpdGlvblBydW5lSW5mbyByZWZlcmVuY2VkIGlu IHRoZQorcGxhbiAoUGxhbm5lZFN0bXQucGFydFBydW5lSW5mb3MpLiAgVGhlIGxpc3QgaXMgcGFj a2FnZWQgaW50byBhCitQYXJ0aXRpb25QcnVuZVJlc3VsdCBub2RlLCB3aGljaCBpcyBwYXNzZWQg YWxvbmcgd2l0aCB0aGUgUGxhbm5lZFN0bXQgdG8gdGhlCitleGVjdXRvciB2aWEgdGhlIFF1ZXJ5 RGVzYy4gIEl0IGlzIGltcGVyYXRpdmUgdGhhdCB0aGUgZXhlY3V0b3IgYW5kIGFueSB0aGlyZAor cGFydHkgY29kZSBpbnZva2VkIGJ5IGl0IHRoYXQgZ2V0cyBwYXNzZWQgdGhlIHBsYW4gdHJlZSBs b29rIGF0IHRoZSBwbGFuJ3MKK1BhcnRpdGlvblBydW5lUmVzdWx0IHRvIGRldGVybWluZSB3aGV0 aGVyIGEgcGFydGljdWxhciBjaGlsZCBzdWJwbGFuIG9mIGEKK3BhcmVudCBub2RlIHRoYXQgc3Vw cG9ydHMgcHJ1bmluZyBpcyB2YWxpZCBmb3IgYSBnaXZlbiBleGVjdXRpb24uCisKIEVhY2ggUGxh biBub2RlIG1heSBoYXZlIGV4cHJlc3Npb24gdHJlZXMgYXNzb2NpYXRlZCB3aXRoIGl0LCB0byBy ZXByZXNlbnQKIGl0cyB0YXJnZXQgbGlzdCwgcXVhbGlmaWNhdGlvbiBjb25kaXRpb25zLCBldGMu ICBUaGVzZSB0cmVlcyBhcmUgYWxzbwogcmVhZC1vbmx5IHRvIHRoZSBleGVjdXRvciwgYnV0IHRo ZSBleGVjdXRvciBzdGF0ZSBmb3IgZXhwcmVzc2lvbiBldmFsdWF0aW9uCkBAIC0yODYsNiArMzA5 LDEwIEBAIFF1ZXJ5IFByb2Nlc3NpbmcgQ29udHJvbCBGbG93CiAKIFRoaXMgaXMgYSBza2V0Y2gg b2YgY29udHJvbCBmbG93IGZvciBmdWxsIHF1ZXJ5IHByb2Nlc3Npbmc6CiAKKyAgWyBFeGVjdXRv ckRvSW5pdGlhbFBydW5pbmcgXSAtLS0gYW4gb3B0aW9uYWwgc3RlcCB0byBwZXJmb3JtIGluaXRp YWwKKwkJcGFydGl0aW9uIHBydW5pbmcgb24gdGhlIHBsYW4gdHJlZSB0aGUgcmVzdWx0IG9mIHdo aWNoIGlzIHBhc3NlZAorCQl0byB0aGUgZXhlY3V0b3IgdmlhIFF1ZXJ5RGVzYworCiAJQ3JlYXRl UXVlcnlEZXNjCiAKIAlFeGVjdXRvclN0YXJ0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjTWFpbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYwppbmRleCBl ZjJmZDQ2MDkyLi4wNWNjOTlkZjhmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjTWFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKQEAgLTQ5LDEx ICs0OSwxMyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL21hdHZpZXcuaCIKICNpbmNsdWRlICJjb21t YW5kcy90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY2RlYnVnLmgiCisjaW5jbHVk ZSAiZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVTdWJw bGFuLmgiCiAjaW5jbHVkZSAiZm9yZWlnbi9mZHdhcGkuaCIKICNpbmNsdWRlICJqaXQvaml0Lmgi CiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNs dWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKQEAg LTEwNCw2ICsxMDYsNDcgQEAgc3RhdGljIHZvaWQgRXZhbFBsYW5RdWFsU3RhcnQoRVBRU3RhdGUg KmVwcXN0YXRlLCBQbGFuICpwbGFuVHJlZSk7CiAKIC8qIGVuZCBvZiBsb2NhbCBkZWNscyAqLwog CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgkJRXhlY3V0b3JEb0luaXRpYWxQcnVuaW5nCisgKgorICoJCVBlcmZv cm1zIGluaXRpYWwgcGFydGl0aW9uIHBydW5pbmcgdG8gZmlndXJlIG91dCB0aGUgbWluaW1hbCBz ZXQgb2YKKyAqCQlzdWJwbGFucyB0byBiZSBleGVjdXRlZCBhbmQgdGhlIHNldCBvZiBSVCBpbmRl eGVzIG9mIHRoZSBjb3JyZXNwb25kaW5nCisgKgkJbGVhZiBwYXJ0aXRpb25zCisgKgorICogUmV0 dXJuZWQgUGFydGl0aW9uUHJ1bmVSZXN1bHQgbXVzdCBiZSBzdWJzZXF1ZW50bHkgcGFzc2VkIHRv IHRoZSBleGVjdXRvcgorICogc28gdGhhdCBpdCBjYW4gcmV1c2UgdGhlIHJlc3VsdCBvZiBwcnVu aW5nLiAgSXQncyBpbXBvcnRhbnQgdGhhdCB0aGUKKyAqIGhhcyB0aGUgc2FtZSB2aWV3IG9mIHdo aWNoIHBhcnRpdGlvbnMgYXJlIGluaXRpYWxseSBwcnVuZWQgKGJ5IG5vdCBkb2luZworICogdGhl IHBydW5pbmcgYWdhaW4gaXRzZWxmKSBvciBvdGhlcndpc2UgaXQgcmlza3MgaW5pdGlhbGl6aW5n IHN1YnBsYW5zIHdob3NlCisgKiBwYXJ0aXRpb25zIHdvdWxkIG5vdCBoYXZlIGJlZW4gbG9ja2Vk LgorICoKKyAqIE5vdGU6IFBhcnRpdGlvbmVkIHRhYmxlcyBtZW50aW9uZWQgaW4gUGFydGl0aW9u ZWRSZWxQcnVuZUluZm8gbm9kZXMgdGhhdAorICogZHJpdmUgdGhlIHBydW5pbmcgd2lsbCBiZSBs b2NrZWQgYmVmb3JlIGRvaW5nIHRoZSBwcnVuaW5nLgorICovCitQYXJ0aXRpb25QcnVuZVJlc3Vs dCAqCitFeGVjdXRvckRvSW5pdGlhbFBydW5pbmcoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBQ YXJhbUxpc3RJbmZvIHBhcmFtcykKK3sKKwlQYXJ0aXRpb25QcnVuZVJlc3VsdCAqcmVzdWx0Owor CUxpc3RDZWxsICpsYzsKKworCS8qIE9ubHkgZ2V0IGhlcmUgaWYgdGhlcmUgaXMgYW55IHBydW5p bmcgdG8gZG8uICovCisJQXNzZXJ0KHBsYW5uZWRzdG10LT5jb250YWluc0luaXRpYWxQcnVuaW5n KTsKKworCXJlc3VsdCA9IG1ha2VOb2RlKFBhcnRpdGlvblBydW5lUmVzdWx0KTsKKwlmb3JlYWNo KGxjLCBwbGFubmVkc3RtdC0+cGFydFBydW5lSW5mb3MpCisJeworCQlQYXJ0aXRpb25QcnVuZUlu Zm8gKnBydW5laW5mbyA9IGxmaXJzdChsYyk7CisJCUJpdG1hcHNldCAqdmFsaWRfc3VicGxhbl9v ZmZzOworCisJCXZhbGlkX3N1YnBsYW5fb2ZmcyA9CisJCQlFeGVjUGFydGl0aW9uRG9Jbml0aWFs UHJ1bmluZyhwbGFubmVkc3RtdCwgcGFyYW1zLCBwcnVuZWluZm8sCisJCQkJCQkJCQkJICAmcmVz dWx0LT5zY2FuX2xlYWZwYXJ0X3J0aXMpOworCQlyZXN1bHQtPnZhbGlkX3N1YnBsYW5fb2Zmc19s aXN0ID0KKwkJCWxhcHBlbmQocmVzdWx0LT52YWxpZF9zdWJwbGFuX29mZnNfbGlzdCwKKwkJCQkJ dmFsaWRfc3VicGxhbl9vZmZzKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQogCiAvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAgKgkJRXhlY3V0b3JTdGFydApAQCAtODA2LDYgKzg0OSw3IEBAIEluaXRQbGFuKFF1ZXJ5 RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogewogCUNtZFR5cGUJCW9wZXJhdGlvbiA9IHF1 ZXJ5RGVzYy0+b3BlcmF0aW9uOwogCVBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCA9IHF1ZXJ5RGVz Yy0+cGxhbm5lZHN0bXQ7CisJUGFydGl0aW9uUHJ1bmVSZXN1bHQgKnBhcnRfcHJ1bmVfcmVzdWx0 ID0gcXVlcnlEZXNjLT5wYXJ0X3BydW5lX3Jlc3VsdDsKIAlQbGFuCSAgICpwbGFuID0gcGxhbm5l ZHN0bXQtPnBsYW5UcmVlOwogCUxpc3QJICAgKnJhbmdlVGFibGUgPSBwbGFubmVkc3RtdC0+cnRh YmxlOwogCUVTdGF0ZQkgICAqZXN0YXRlID0gcXVlcnlEZXNjLT5lc3RhdGU7CkBAIC04MjUsNiAr ODY5LDggQEAgSW5pdFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpCiAJRXhl Y0luaXRSYW5nZVRhYmxlKGVzdGF0ZSwgcmFuZ2VUYWJsZSk7CiAKIAllc3RhdGUtPmVzX3BsYW5u ZWRzdG10ID0gcGxhbm5lZHN0bXQ7CisJZXN0YXRlLT5lc19wYXJ0X3BydW5lX2luZm9zID0gcGxh bm5lZHN0bXQtPnBhcnRQcnVuZUluZm9zOworCWVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9yZXN1bHQg PSBwYXJ0X3BydW5lX3Jlc3VsdDsKIAogCS8qCiAJICogTmV4dCwgYnVpbGQgdGhlIEV4ZWNSb3dN YXJrIGFycmF5IGZyb20gdGhlIFBsYW5Sb3dNYXJrKHMpLCBpZiBhbnkuCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNQYXJhbGxlbC5jCmluZGV4IDlhMGQ1ZDU5ZWYuLjgwNWY4NmM1MDMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCkBAIC02Niw2ICs2Niw3IEBACiAjZGVmaW5lIFBBUkFMTEVM X0tFWV9RVUVSWV9URVhUCQlVSU5UNjRDT05TVCgweEUwMDAwMDAwMDAwMDAwMDgpCiAjZGVmaW5l IFBBUkFMTEVMX0tFWV9KSVRfSU5TVFJVTUVOVEFUSU9OIFVJTlQ2NENPTlNUKDB4RTAwMDAwMDAw MDAwMDAwOSkKICNkZWZpbmUgUEFSQUxMRUxfS0VZX1dBTF9VU0FHRQkJCVVJTlQ2NENPTlNUKDB4 RTAwMDAwMDAwMDAwMDAwQSkKKyNkZWZpbmUgUEFSQUxMRUxfS0VZX1BBUlRJVElPTlBSVU5FUkVT VUxUCVVJTlQ2NENPTlNUKDB4RTAwMDAwMDAwMDAwMDAwQikKIAogI2RlZmluZSBQQVJBTExFTF9U VVBMRV9RVUVVRV9TSVpFCQk2NTUzNgogCkBAIC0xODIsNyArMTgzLDkgQEAgRXhlY1NlcmlhbGl6 ZVBsYW4oUGxhbiAqcGxhbiwgRVN0YXRlICplc3RhdGUpCiAJcHN0bXQtPnRyYW5zaWVudFBsYW4g PSBmYWxzZTsKIAlwc3RtdC0+ZGVwZW5kc09uUm9sZSA9IGZhbHNlOwogCXBzdG10LT5wYXJhbGxl bE1vZGVOZWVkZWQgPSBmYWxzZTsKKwlwc3RtdC0+Y29udGFpbnNJbml0aWFsUHJ1bmluZyA9IGZh bHNlOwogCXBzdG10LT5wbGFuVHJlZSA9IHBsYW47CisJcHN0bXQtPnBhcnRQcnVuZUluZm9zID0g ZXN0YXRlLT5lc19wYXJ0X3BydW5lX2luZm9zOwogCXBzdG10LT5ydGFibGUgPSBlc3RhdGUtPmVz X3JhbmdlX3RhYmxlOwogCXBzdG10LT5yZXN1bHRSZWxhdGlvbnMgPSBOSUw7CiAJcHN0bXQtPmFw cGVuZFJlbGF0aW9ucyA9IE5JTDsKQEAgLTU5NiwxMiArNTk5LDE1IEBAIEV4ZWNJbml0UGFyYWxs ZWxQbGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwKIAlGaXhlZFBhcmFs bGVsRXhlY3V0b3JTdGF0ZSAqZnBlczsKIAljaGFyCSAgICpwc3RtdF9kYXRhOwogCWNoYXIJICAg KnBzdG10X3NwYWNlOworCWNoYXIJICAgKnBhcnRfcHJ1bmVfcmVzdWx0X2RhdGE7CisJY2hhcgkg ICAqcGFydF9wcnVuZV9yZXN1bHRfc3BhY2U7CiAJY2hhcgkgICAqcGFyYW1saXN0aW5mb19zcGFj ZTsKIAlCdWZmZXJVc2FnZSAqYnVmdXNhZ2Vfc3BhY2U7CiAJV2FsVXNhZ2UgICAqd2FsdXNhZ2Vf c3BhY2U7CiAJU2hhcmVkRXhlY3V0b3JJbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnRhdGlvbiA9 IE5VTEw7CiAJU2hhcmVkSml0SW5zdHJ1bWVudGF0aW9uICpqaXRfaW5zdHJ1bWVudGF0aW9uID0g TlVMTDsKIAlpbnQJCQlwc3RtdF9sZW47CisJaW50CQkJcGFydF9wcnVuZV9yZXN1bHRfbGVuOwog CWludAkJCXBhcmFtbGlzdGluZm9fbGVuOwogCWludAkJCWluc3RydW1lbnRhdGlvbl9sZW4gPSAw OwogCWludAkJCWppdF9pbnN0cnVtZW50YXRpb25fbGVuID0gMDsKQEAgLTYzMCw2ICs2MzYsNyBA QCBFeGVjSW5pdFBhcmFsbGVsUGxhbihQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRVN0YXRlICplc3Rh dGUsCiAKIAkvKiBGaXggdXAgYW5kIHNlcmlhbGl6ZSBwbGFuIHRvIGJlIHNlbnQgdG8gd29ya2Vy cy4gKi8KIAlwc3RtdF9kYXRhID0gRXhlY1NlcmlhbGl6ZVBsYW4ocGxhbnN0YXRlLT5wbGFuLCBl c3RhdGUpOworCXBhcnRfcHJ1bmVfcmVzdWx0X2RhdGEgPSBub2RlVG9TdHJpbmcoZXN0YXRlLT5l c19wYXJ0X3BydW5lX3Jlc3VsdCk7CiAKIAkvKiBDcmVhdGUgYSBwYXJhbGxlbCBjb250ZXh0LiAq LwogCXBjeHQgPSBDcmVhdGVQYXJhbGxlbENvbnRleHQoInBvc3RncmVzIiwgIlBhcmFsbGVsUXVl cnlNYWluIiwgbndvcmtlcnMpOwpAQCAtNjU2LDYgKzY2MywxMSBAQCBFeGVjSW5pdFBhcmFsbGVs UGxhbihQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRVN0YXRlICplc3RhdGUsCiAJc2htX3RvY19lc3Rp bWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBwc3RtdF9sZW4pOwogCXNobV90b2NfZXN0aW1h dGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsKIAorCS8qIEVzdGltYXRlIHNwYWNlIGZvciBz ZXJpYWxpemVkIFBhcnRpdGlvblBydW5lUmVzdWx0LiAqLworCXBhcnRfcHJ1bmVfcmVzdWx0X2xl biA9IHN0cmxlbihwYXJ0X3BydW5lX3Jlc3VsdF9kYXRhKSArIDE7CisJc2htX3RvY19lc3RpbWF0 ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBwYXJ0X3BydW5lX3Jlc3VsdF9sZW4pOworCXNobV90 b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsKKwogCS8qIEVzdGltYXRlIHNw YWNlIGZvciBzZXJpYWxpemVkIFBhcmFtTGlzdEluZm8uICovCiAJcGFyYW1saXN0aW5mb19sZW4g PSBFc3RpbWF0ZVBhcmFtTGlzdFNwYWNlKGVzdGF0ZS0+ZXNfcGFyYW1fbGlzdF9pbmZvKTsKIAlz aG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIHBhcmFtbGlzdGluZm9fbGVu KTsKQEAgLTc1MCw2ICs3NjIsMTIgQEAgRXhlY0luaXRQYXJhbGxlbFBsYW4oUGxhblN0YXRlICpw bGFuc3RhdGUsIEVTdGF0ZSAqZXN0YXRlLAogCW1lbWNweShwc3RtdF9zcGFjZSwgcHN0bXRfZGF0 YSwgcHN0bXRfbGVuKTsKIAlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIFBBUkFMTEVMX0tFWV9Q TEFOTkVEU1RNVCwgcHN0bXRfc3BhY2UpOwogCisJLyogU3RvcmUgc2VyaWFsaXplZCBQYXJ0aXRp b25QcnVuZVJlc3VsdCAqLworCXBhcnRfcHJ1bmVfcmVzdWx0X3NwYWNlID0gc2htX3RvY19hbGxv Y2F0ZShwY3h0LT50b2MsIHBhcnRfcHJ1bmVfcmVzdWx0X2xlbik7CisJbWVtY3B5KHBhcnRfcHJ1 bmVfcmVzdWx0X3NwYWNlLCBwYXJ0X3BydW5lX3Jlc3VsdF9kYXRhLCBwYXJ0X3BydW5lX3Jlc3Vs dF9sZW4pOworCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgUEFSQUxMRUxfS0VZX1BBUlRJVElP TlBSVU5FUkVTVUxULAorCQkJCSAgIHBhcnRfcHJ1bmVfcmVzdWx0X3NwYWNlKTsKKwogCS8qIFN0 b3JlIHNlcmlhbGl6ZWQgUGFyYW1MaXN0SW5mby4gKi8KIAlwYXJhbWxpc3RpbmZvX3NwYWNlID0g c2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHBhcmFtbGlzdGluZm9fbGVuKTsKIAlzaG1fdG9j X2luc2VydChwY3h0LT50b2MsIFBBUkFMTEVMX0tFWV9QQVJBTUxJU1RJTkZPLCBwYXJhbWxpc3Rp bmZvX3NwYWNlKTsKQEAgLTEyMzEsOCArMTI0OSwxMCBAQCBFeGVjUGFyYWxsZWxHZXRRdWVyeURl c2Moc2htX3RvYyAqdG9jLCBEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyLAogCQkJCQkJIGludCBpbnN0 cnVtZW50X29wdGlvbnMpCiB7CiAJY2hhcgkgICAqcHN0bXRzcGFjZTsKKwljaGFyCSAgICpwYXJ0 X3BydW5lX3Jlc3VsdF9zcGFjZTsKIAljaGFyCSAgICpwYXJhbXNwYWNlOwogCVBsYW5uZWRTdG10 ICpwc3RtdDsKKwlQYXJ0aXRpb25QcnVuZVJlc3VsdCAqcGFydF9wcnVuZV9yZXN1bHQ7CiAJUGFy YW1MaXN0SW5mbyBwYXJhbUxJOwogCWNoYXIJICAgKnF1ZXJ5U3RyaW5nOwogCkBAIC0xMjQzLDEy ICsxMjYzLDE4IEBAIEV4ZWNQYXJhbGxlbEdldFF1ZXJ5RGVzYyhzaG1fdG9jICp0b2MsIERlc3RS ZWNlaXZlciAqcmVjZWl2ZXIsCiAJcHN0bXRzcGFjZSA9IHNobV90b2NfbG9va3VwKHRvYywgUEFS QUxMRUxfS0VZX1BMQU5ORURTVE1ULCBmYWxzZSk7CiAJcHN0bXQgPSAoUGxhbm5lZFN0bXQgKikg c3RyaW5nVG9Ob2RlKHBzdG10c3BhY2UpOwogCisJLyogUmVjb25zdHJ1Y3QgbGVhZGVyLXN1cHBs aWVkIFBhcnRpdGlvblBydW5lUmVzdWx0LiAqLworCXBhcnRfcHJ1bmVfcmVzdWx0X3NwYWNlID0K KwkJc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlfUEFSVElUSU9OUFJVTkVSRVNVTFQs IGZhbHNlKTsKKwlwYXJ0X3BydW5lX3Jlc3VsdCA9IChQYXJ0aXRpb25QcnVuZVJlc3VsdCAqKQor CQlzdHJpbmdUb05vZGUocGFydF9wcnVuZV9yZXN1bHRfc3BhY2UpOworCiAJLyogUmVjb25zdHJ1 Y3QgUGFyYW1MaXN0SW5mby4gKi8KIAlwYXJhbXNwYWNlID0gc2htX3RvY19sb29rdXAodG9jLCBQ QVJBTExFTF9LRVlfUEFSQU1MSVNUSU5GTywgZmFsc2UpOwogCXBhcmFtTEkgPSBSZXN0b3JlUGFy YW1MaXN0KCZwYXJhbXNwYWNlKTsKIAogCS8qIENyZWF0ZSBhIFF1ZXJ5RGVzYyBmb3IgdGhlIHF1 ZXJ5LiAqLwotCXJldHVybiBDcmVhdGVRdWVyeURlc2MocHN0bXQsCisJcmV0dXJuIENyZWF0ZVF1 ZXJ5RGVzYyhwc3RtdCwgcGFydF9wcnVuZV9yZXN1bHQsCiAJCQkJCQkgICBxdWVyeVN0cmluZywK IAkJCQkJCSAgIEdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJCSAg IHJlY2VpdmVyLCBwYXJhbUxJLCBOVUxMLCBpbnN0cnVtZW50X29wdGlvbnMpOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY1BhcnRpdGlvbi5jCmluZGV4IDYxNWJkODA5NzMuLjMwMzc3NDJiOGQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYworKysgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRl ICJtYi9wZ193Y2hhci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVz L21ha2VmdW5jcy5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKICNpbmNsdWRlICJw YXJ0aXRpb25pbmcvcGFydGJvdW5kcy5oIgogI2luY2x1ZGUgInBhcnRpdGlvbmluZy9wYXJ0ZGVz Yy5oIgogI2luY2x1ZGUgInBhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuaCIKQEAgLTE4NSw3ICsxODYs MTEgQEAgc3RhdGljIGNoYXIgKkV4ZWNCdWlsZFNsb3RQYXJ0aXRpb25LZXlEZXNjcmlwdGlvbihS ZWxhdGlvbiByZWwsCiBzdGF0aWMgTGlzdCAqYWRqdXN0X3BhcnRpdGlvbl9jb2xub3MoTGlzdCAq Y29sbm9zLCBSZXN1bHRSZWxJbmZvICpsZWFmX3BhcnRfcnJpKTsKIHN0YXRpYyBMaXN0ICphZGp1 c3RfcGFydGl0aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29sbm9zLCBBdHRyTWFwICphdHRy TWFwKTsKIHN0YXRpYyBQYXJ0aXRpb25QcnVuZVN0YXRlICpDcmVhdGVQYXJ0aXRpb25QcnVuZVN0 YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAotCQkJCQkJCQkJCQkJCSAgUGFydGl0aW9uUHJ1bmVJ bmZvICpwcnVuZWluZm8pOworCQkJCQkJCQkJCQkJCSAgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVu ZWluZm8sCisJCQkJCQkJCQkJCQkJICBib29sIGNvbnNpZGVyX2luaXRpYWxfc3RlcHMsCisJCQkJ CQkJCQkJCQkJICBib29sIGNvbnNpZGVyX2V4ZWNfc3RlcHMsCisJCQkJCQkJCQkJCQkJICBMaXN0 ICpydGFibGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwKKwkJCQkJCQkJCQkJCQkgIFBhcnRpdGlv bkRpcmVjdG9yeSBwYXJ0ZGlyKTsKIHN0YXRpYyB2b2lkIEluaXRQYXJ0aXRpb25QcnVuZUNvbnRl eHQoUGFydGl0aW9uUHJ1bmVDb250ZXh0ICpjb250ZXh0LAogCQkJCQkJCQkJICBMaXN0ICpwcnVu aW5nX3N0ZXBzLAogCQkJCQkJCQkJICBQYXJ0aXRpb25EZXNjIHBhcnRkZXNjLApAQCAtMTk4LDcg KzIwMyw4IEBAIHN0YXRpYyB2b2lkIFBhcnRpdGlvblBydW5lRml4U3ViUGxhbk1hcChQYXJ0aXRp b25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAogc3RhdGljIHZvaWQgZmluZF9tYXRjaGluZ19zdWJw bGFuc19yZWN1cnNlKFBhcnRpdGlvblBydW5pbmdEYXRhICpwcnVuZWRhdGEsCiAJCQkJCQkJCQkJ ICAgUGFydGl0aW9uZWRSZWxQcnVuaW5nRGF0YSAqcHBydW5lLAogCQkJCQkJCQkJCSAgIGJvb2wg aW5pdGlhbF9wcnVuZSwKLQkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKip2YWxpZHN1YnBsYW5zKTsK KwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKip2YWxpZHN1YnBsYW5zLAorCQkJCQkJCQkJCSAgIEJp dG1hcHNldCAqKnNjYW5fbGVhZnBhcnRfcnRpcyk7CiAKIAogLyoKQEAgLTE1ODcsOCArMTU5Mywx MCBAQCBhZGp1c3RfcGFydGl0aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29sbm9zLCBBdHRy TWFwICphdHRyTWFwKQogICogY29uc2lkZXJlZCB0byBiZSBhIHN0YWJsZSBleHByZXNzaW9uLCBp dCBjYW4gY2hhbmdlIHZhbHVlIGZyb20gb25lIHBsYW4KICAqIG5vZGUgc2NhbiB0byB0aGUgbmV4 dCBkdXJpbmcgcXVlcnkgZXhlY3V0aW9uLiAgU3RhYmxlIGNvbXBhcmlzb24KICAqIGV4cHJlc3Np b25zIHRoYXQgZG9uJ3QgaW52b2x2ZSBzdWNoIFBhcmFtcyBhbGxvdyBwYXJ0aXRpb24gcHJ1bmlu ZyB0byBiZQotICogZG9uZSBvbmNlIGR1cmluZyBleGVjdXRvciBzdGFydHVwLiAgRXhwcmVzc2lv bnMgdGhhdCBkbyBpbnZvbHZlIHN1Y2ggUGFyYW1zCi0gKiByZXF1aXJlIHVzIHRvIHBydW5lIHNl cGFyYXRlbHkgZm9yIGVhY2ggc2NhbiBvZiB0aGUgcGFyZW50IHBsYW4gbm9kZS4KKyAqIGRvbmUg b25jZSBkdXJpbmcgZXhlY3V0b3Igc3RhcnR1cCBvciBkdXJpbmcgRXhlY3V0b3JEb0luaXRpYWxQ cnVuaW5nKCkgdGhhdAorICogcnVucyBhcyBwYXJ0IG9mIHBlcmZvcm1pbmcgQWNxdWlyZUV4ZWN1 dG9yTG9ja3MoKSBvbiBhIGdpdmVuIHBsYW4gdHJlZS4KKyAqIEV4cHJlc3Npb25zIHRoYXQgZG8g aW52b2x2ZSBzdWNoIFBhcmFtcyByZXF1aXJlIHVzIHRvIHBydW5lIHNlcGFyYXRlbHkgZm9yCisg KiBlYWNoIHNjYW4gb2YgdGhlIHBhcmVudCBwbGFuIG5vZGUuCiAgKgogICogTm90ZSB0aGF0IHBy dW5pbmcgYXdheSB1bm5lZWRlZCBzdWJwbGFucyBkdXJpbmcgZXhlY3V0b3Igc3RhcnR1cCBoYXMg dGhlCiAgKiBhZGRlZCBiZW5lZml0IG9mIG5vdCBoYXZpbmcgdG8gaW5pdGlhbGl6ZSB0aGUgdW5u ZWVkZWQgc3VicGxhbnMgYXQgYWxsLgpAQCAtMTYwNSw2ICsxNjEzLDEzIEBAIGFkanVzdF9wYXJ0 aXRpb25fY29sbm9zX3VzaW5nX21hcChMaXN0ICpjb2xub3MsIEF0dHJNYXAgKmF0dHJNYXApCiAg KgkJYWNjb3VudCBmb3IgaW5pdGlhbCBwcnVuaW5nIHBvc3NpYmx5IGhhdmluZyBlbGltaW5hdGVk IHNvbWUgb2YgdGhlCiAgKgkJc3VicGxhbnMuCiAgKgorICogRXhlY1BhcnRpdGlvbkRvSW5pdGlh bFBydW5pbmc6CisgKgkJRG8gaW5pdGlhbCBwcnVuaW5nIHdpdGggdGhlIGluZm9ybWF0aW9uIGNv bnRhaW5lZCBpbiBhIGdpdmVuCisgKgkJUGFydGl0aW9uUHJ1bmVJbmZvIHRvIGRldGVybWluZSB0 aGUgbWluaW1hbCBzZXQgb2YgY2hpbGQgc3VicGxhbnMKKyAqCQl0byBiZSBleGVjdXRlZCBvZiB0 aGUgcGFyZW50IHBsYW4gbm9kZSB0byB3aGljaCB0aGUgUGFydGl0aW9uUHJ1bmVJbmZvCisgKgkJ YmVsb25ncyBhbmQgYWxzbyB0aGUgc2V0IG9mIHRoZSBSVCBpbmRleGVzIG9mIGxlYWYgcGFydGl0 aW9ucyB0aGF0IHdpbGwKKyAqCQliZSBzY2FubmVkIHdpdGggdGhvc2Ugc3VicGxhbnMuCisgKgog ICogRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zOgogICoJCVJldHVybnMgaW5kZXhlcyBvZiBtYXRj aGluZyBzdWJwbGFucyBhZnRlciBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9ucwogICoJCXRoYXQg YXJlIHNhZmUgdG8gZXZhbHVhdGUgYXQgYSBnaXZlbiBwb2ludC4gIFRoaXMgZnVuY3Rpb24gaXMg Zmlyc3QKQEAgLTE2MjIsOCArMTYzNyw5IEBAIGFkanVzdF9wYXJ0aXRpb25fY29sbm9zX3VzaW5n X21hcChMaXN0ICpjb2xub3MsIEF0dHJNYXAgKmF0dHJNYXApCiAgKgogICogT24gcmV0dXJuLCAq aW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zIGlzIGFzc2lnbmVkIHRoZSBzZXQgb2YgaW5kZXhlcyBv ZgogICogY2hpbGQgc3VicGxhbnMgdGhhdCBtdXN0IGJlIGluaXRpYWxpemVkIGFsb25nIHdpdGgg dGhlIHBhcmVudCBwbGFuIG5vZGUuCi0gKiBJbml0aWFsIHBydW5pbmcgaXMgcGVyZm9ybWVkIGhl cmUgaWYgbmVlZGVkIGFuZCBpbiB0aGF0IGNhc2Ugb25seSB0aGUKLSAqIHN1cnZpdmluZyBzdWJw bGFucycgaW5kZXhlcyBhcmUgYWRkZWQuCisgKiBJbml0aWFsIHBydW5pbmcgaXMgcGVyZm9ybWVk IGhlcmUgaWYgbmVlZGVkICh1bmxlc3MgaXQgaGFzIGFscmVhZHkgYmVlbiBkb25lCisgKiBieSBF eGVjRG9Jbml0aWFsUHJ1bmluZygpKSwgYW5kIGluIHRoYXQgY2FzZSBvbmx5IHRoZSBzdXJ2aXZp bmcgc3VicGxhbnMnCisgKiBpbmRleGVzIGFyZSBhZGRlZC4KICAqCiAgKiBJZiBzdWJwbGFucyBh cmUgaW5kZWVkIHBydW5lZCwgc3VicGxhbl9tYXAgYXJyYXlzIGNvbnRhaW5lZCBpbiB0aGUgcmV0 dXJuZWQKICAqIFBhcnRpdGlvblBydW5lU3RhdGUgYXJlIHJlLXNlcXVlbmNlZCB0byBub3QgY291 bnQgdGhvc2UsIHRob3VnaCBvbmx5IGlmIHRoZQpAQCAtMTYzMiwyMyArMTY0OCw1OSBAQCBhZGp1 c3RfcGFydGl0aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29sbm9zLCBBdHRyTWFwICphdHRy TWFwKQogUGFydGl0aW9uUHJ1bmVTdGF0ZSAqCiBFeGVjSW5pdFBhcnRpdGlvblBydW5pbmcoUGxh blN0YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkgaW50IG5fdG90YWxfc3VicGxhbnMsCi0JCQkJCQkg UGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCisJCQkJCQkgaW50IHBhcnRfcHJ1bmVfaW5k ZXgsCiAJCQkJCQkgQml0bWFwc2V0ICoqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zKQogewotCVBh cnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7CiAJRVN0YXRlCSAgICplc3RhdGUgPSBwbGFu c3RhdGUtPnN0YXRlOworCVBhcnRpdGlvblBydW5lSW5mbyAgKnBydW5laW5mbyA9IGxpc3RfbnRo KGVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9pbmZvcywKKwkJCQkJCQkJCQkJICBwYXJ0X3BydW5lX2lu ZGV4KTsKKwlQYXJ0aXRpb25QcnVuZVJlc3VsdCAqcHJ1bmVyZXN1bHQgPSBlc3RhdGUtPmVzX3Bh cnRfcHJ1bmVfcmVzdWx0OworCVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7CisJYm9v bAlkb19wcnVuaW5nID0gKHBydW5laW5mby0+bmVlZHNfaW5pdF9wcnVuaW5nIHx8CisJCQkJCQkg IHBydW5laW5mby0+bmVlZHNfZXhlY19wcnVuaW5nKTsKIAotCS8qIFdlIG1heSBuZWVkIGFuIGV4 cHJlc3Npb24gY29udGV4dCB0byBldmFsdWF0ZSBwYXJ0aXRpb24gZXhwcnMgKi8KLQlFeGVjQXNz aWduRXhwckNvbnRleHQoZXN0YXRlLCBwbGFuc3RhdGUpOworCS8qCisJICogTm8gbmVlZCB0byBk byBpbml0aWFsIHBydW5pbmcgaWYgaXQgd2FzIGRvbmUgYWxyZWFkeSBieQorCSAqIEV4ZWN1dG9y RG9Jbml0aWFsUHJ1bmluZygpLCB3aGljaCBpdCB3b3VsZCBiZSBpZiBlc19wYXJ0X3BydW5lX3Jl c3VsdAorCSAqIGhhcyBiZWVuIHNldC4KKwkgKi8KKwlpZiAocHJ1bmVyZXN1bHQpCisJCWRvX3By dW5pbmcgPSBwcnVuZWluZm8tPm5lZWRzX2V4ZWNfcHJ1bmluZzsKKworCXBydW5lc3RhdGUgPSBO VUxMOworCWlmIChkb19wcnVuaW5nKQorCXsKKwkJLyogV2UgbWF5IG5lZWQgYW4gZXhwcmVzc2lv biBjb250ZXh0IHRvIGV2YWx1YXRlIHBhcnRpdGlvbiBleHBycyAqLworCQlFeGVjQXNzaWduRXhw ckNvbnRleHQoZXN0YXRlLCBwbGFuc3RhdGUpOwogCi0JLyogQ3JlYXRlIHRoZSB3b3JraW5nIGRh dGEgc3RydWN0dXJlIGZvciBwcnVuaW5nICovCi0JcHJ1bmVzdGF0ZSA9IENyZWF0ZVBhcnRpdGlv blBydW5lU3RhdGUocGxhbnN0YXRlLCBwcnVuZWluZm8pOworCQkvKiBGb3IgZGF0YSByZWFkaW5n LCBleGVjdXRvciBhbHdheXMgb21pdHMgZGV0YWNoZWQgcGFydGl0aW9ucyAqLworCQlpZiAoZXN0 YXRlLT5lc19wYXJ0aXRpb25fZGlyZWN0b3J5ID09IE5VTEwpCisJCQllc3RhdGUtPmVzX3BhcnRp dGlvbl9kaXJlY3RvcnkgPQorCQkJCUNyZWF0ZVBhcnRpdGlvbkRpcmVjdG9yeShlc3RhdGUtPmVz X3F1ZXJ5X2N4dCwgZmFsc2UpOworCisJCS8qCisJCSAqIENyZWF0ZSB0aGUgd29ya2luZyBkYXRh IHN0cnVjdHVyZSBmb3IgcHJ1bmluZy4gIE5vIG5lZWQgdG8gY29uc2lkZXIKKwkJICogaW5pdGlh bCBwcnVuaW5nIHN0ZXBzIGlmIHdlIGhhdmUgYSBQYXJ0aXRpb25QcnVuZVJlc3VsdC4KKwkJICov CisJCXBydW5lc3RhdGUgPSBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKHBsYW5zdGF0ZSwgcHJ1 bmVpbmZvLAorCQkJCQkJCQkJCQkgICBwcnVuZXJlc3VsdCA9PSBOVUxMLCB0cnVlLAorCQkJCQkJ CQkJCQkgICBOSUwsIHBsYW5zdGF0ZS0+cHNfRXhwckNvbnRleHQsCisJCQkJCQkJCQkJCSAgIGVz dGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSk7CisJfQogCiAJLyoKIAkgKiBQZXJmb3JtIGFu IGluaXRpYWwgcGFydGl0aW9uIHBydW5lIHBhc3MsIGlmIHJlcXVpcmVkLgogCSAqLwotCWlmIChw cnVuZXN0YXRlLT5kb19pbml0aWFsX3BydW5lKQotCQkqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5z ID0gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKHBydW5lc3RhdGUsIHRydWUpOworCWlmIChwcnVu ZXJlc3VsdCkKKwl7CisJCSppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMgPQorCQkJbGlzdF9udGgo cHJ1bmVyZXN1bHQtPnZhbGlkX3N1YnBsYW5fb2Zmc19saXN0LCBwYXJ0X3BydW5lX2luZGV4KTsK Kwl9CisJZWxzZSBpZiAocHJ1bmVzdGF0ZSAmJiBwcnVuZXN0YXRlLT5kb19pbml0aWFsX3BydW5l KQorCXsKKwkJKmluaXRpYWxseV92YWxpZF9zdWJwbGFucyA9IEV4ZWNGaW5kTWF0Y2hpbmdTdWJQ bGFucyhwcnVuZXN0YXRlLCB0cnVlLAorCQkJCQkJCQkJCQkJCQkJIE5VTEwpOworCX0KIAllbHNl CiAJewogCQkvKiBObyBwcnVuaW5nLCBzbyB3ZSdsbCBuZWVkIHRvIGluaXRpYWxpemUgYWxsIHN1 YnBsYW5zICovCkBAIC0xNjY5LDcgKzE3MjEsNyBAQCBFeGVjSW5pdFBhcnRpdGlvblBydW5pbmco UGxhblN0YXRlICpwbGFuc3RhdGUsCiAJCSAqIGxlYXZlcyBpbnZhbGlkIGRhdGEgaW4gcHJ1bmVz dGF0ZSwgYmVjYXVzZSB0aGF0IGRhdGEgd29uJ3QgYmUKIAkJICogY29uc3VsdGVkIGFnYWluIChj ZiBpbml0aWFsIEFzc2VydCBpbiBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMpLgogCQkgKi8KLQkJ aWYgKHBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUpCisJCWlmIChwcnVuZXN0YXRlICYmIHBydW5l c3RhdGUtPmRvX2V4ZWNfcHJ1bmUpCiAJCQlQYXJ0aXRpb25QcnVuZUZpeFN1YlBsYW5NYXAocHJ1 bmVzdGF0ZSwKIAkJCQkJCQkJCQkqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zLAogCQkJCQkJCQkJ CW5fdG90YWxfc3VicGxhbnMpOwpAQCAtMTY3OCwxMSArMTczMCw3MiBAQCBFeGVjSW5pdFBhcnRp dGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJcmV0dXJuIHBydW5lc3RhdGU7CiB9 CiAKKy8qCisgKiBFeGVjUGFydGl0aW9uRG9Jbml0aWFsUHJ1bmluZworICoJCVBlcmZvcm0gaW5p dGlhbCBwcnVuaW5nIHVzaW5nIGdpdmVuIFBhcnRpdGlvblBydW5lSW5mbyB0byBkZXRlcm1pbmUK KyAqCQl0aGUgbWluaW1hbCBzZXQgb2YgY2hpbGQgc3VicGxhbnMgdG8gYmUgZXhlY3V0ZWQgb2Yg dGhlIHBhcmVudCBwbGFuCisgKgkJbm9kZSB0byB3aGljaCB0aGUgUGFydGl0aW9uUHJ1bmVJbmZv IGJlbG9uZ3MgYW5kIGFsc28gdGhlIHNldCBvZiBSVAorICoJCWluZGV4ZXMgb2YgbGVhZiBwYXJ0 aXRpb25zIHRoYXQgd2lsbCBzY2FubmVkIHdpdGggdGhvc2Ugc3VicGxhbnMuCisgKi8KK0JpdG1h cHNldCAqCitFeGVjUGFydGl0aW9uRG9Jbml0aWFsUHJ1bmluZyhQbGFubmVkU3RtdCAqcGxhbm5l ZHN0bXQsIFBhcmFtTGlzdEluZm8gcGFyYW1zLAorCQkJCQkJCSAgUGFydGl0aW9uUHJ1bmVJbmZv ICpwcnVuZWluZm8sCisJCQkJCQkJICBCaXRtYXBzZXQgKipzY2FuX2xlYWZwYXJ0X3J0aXMpCit7 CisJTGlzdAkJICpydGFibGUgPSBwbGFubmVkc3RtdC0+cnRhYmxlOworCUV4cHJDb250ZXh0CSAq ZWNvbnRleHQ7CisJUGFydGl0aW9uRGlyZWN0b3J5IHBkaXI7CisJTWVtb3J5Q29udGV4dCBvbGRj b250ZXh0LAorCQkJCSAgdG1wY29udGV4dDsKKwlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0 YXRlOworCUJpdG1hcHNldAkgKnZhbGlkX3N1YnBsYW5fb2ZmczsKKworCS8qCisJICogQSB0ZW1w b3JhcnkgY29udGV4dCB0byBhbGxvY2F0ZSBzdHVmZiBuZWVkZGVkIHRvIHJ1biB0aGUgcHJ1bmlu ZyBzdGVwcy4KKwkgKi8KKwl0bXBjb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJl bnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJICAgImluaXRpYWwgcHJ1bmluZyB3b3JraW5nIGRh dGEiLAorCQkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJb2xkY29udGV4dCA9 IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyh0bXBjb250ZXh0KTsKKworCS8qCisJICogUGFydGl0aW9u RGlyZWN0b3J5IHRvIGxvb2sgdXAgcGFydGl0aW9uIGRlc2NyaXB0b3JzLCB3aGljaCBvbWl0cwor CSAqIGRldGFjaGVkIHBhcnRpdGlvbnMsIGp1c3QgbGlrZSBpbiB0aGUgZXhlY3V0b3IgcHJvcGVy LgorCSAqLworCXBkaXIgPSBDcmVhdGVQYXJ0aXRpb25EaXJlY3RvcnkoQ3VycmVudE1lbW9yeUNv bnRleHQsIGZhbHNlKTsKKworCS8qCisJICogV2UgZG9uJ3QgeWV0IGhhdmUgYSBQbGFuU3RhdGUg Zm9yIHRoZSBwYXJlbnQgcGxhbiBub2RlLCBzbyBtdXN0IGNyZWF0ZQorCSAqIGEgc3RhbmRhbG9u ZSBFeHByQ29udGV4dCB0byBldmFsdWF0ZSBwcnVuaW5nIGV4cHJlc3Npb25zLCBlcXVpcHBlZCB3 aXRoCisJICogdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBFWFRFUk4gcGFyYW1ldGVycyB0aGF0 IHRoZSBjYWxsZXIgcGFzc2VkIHVzLgorCSAqIE5vdGUgdGhhdCB0aGF0J3Mgb2theSBiZWNhdXNl IHRoZSBpbml0aWFsIHBydW5pbmcgc3RlcHMgZG8gbm90IGNvbnRhaW4KKwkgKiBhbnl0aGluZyB0 aGF0IHJlcXVpcmVzIHRoZSBleGVjdXRpb24gdG8gaGF2ZSBzdGFydGVkLgorCSAqLworCWVjb250 ZXh0ID0gQ3JlYXRlU3RhbmRhbG9uZUV4cHJDb250ZXh0KCk7CisJZWNvbnRleHQtPmVjeHRfcGFy YW1fbGlzdF9pbmZvID0gcGFyYW1zOworCXBydW5lc3RhdGUgPSBDcmVhdGVQYXJ0aXRpb25QcnVu ZVN0YXRlKE5VTEwsIHBydW5laW5mbywgdHJ1ZSwgZmFsc2UsCisJCQkJCQkJCQkJICAgcnRhYmxl LCBlY29udGV4dCwgcGRpcik7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwor CisJLyogRG8gdGhlIGluaXRpYWwgcHJ1bmluZy4gKi8KKwl2YWxpZF9zdWJwbGFuX29mZnMgPSBF eGVjRmluZE1hdGNoaW5nU3ViUGxhbnMocHJ1bmVzdGF0ZSwgdHJ1ZSwKKwkJCQkJCQkJCQkJCSAg c2Nhbl9sZWFmcGFydF9ydGlzKTsKKworCUZyZWVFeHByQ29udGV4dChlY29udGV4dCwgdHJ1ZSk7 CisJRGVzdHJveVBhcnRpdGlvbkRpcmVjdG9yeShwZGlyKTsKKwlNZW1vcnlDb250ZXh0RGVsZXRl KHRtcGNvbnRleHQpOworCisJcmV0dXJuIHZhbGlkX3N1YnBsYW5fb2ZmczsKK30KKwogLyoKICAq IENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUKICAqCQlCdWlsZCB0aGUgZGF0YSBzdHJ1Y3R1cmUg cmVxdWlyZWQgZm9yIGNhbGxpbmcgRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zCiAgKgotICogJ3Bs YW5zdGF0ZScgaXMgdGhlIHBhcmVudCBwbGFuIG5vZGUncyBleGVjdXRpb24gc3RhdGUuCisgKiAn cGxhbnN0YXRlJywgaWYgbm90IE5VTEwsIGlzIHRoZSBwYXJlbnQgcGxhbiBub2RlJ3MgZXhlY3V0 aW9uIHN0YXRlLiAgSXQKKyAqIGNhbiBiZSBOVUxMIGlmIGJlaW5nIGNhbGxlZCBiZWZvcmUgRXhl Y3V0b3JTdGFydCgpLCBpbiB3aGljaCBjYXNlLAorICogJ3J0YWJsZScgKHJhbmdlIHRhYmxlKSwg J2Vjb250ZXh0JywgYW5kICdwYXJ0ZGlyJyBtdXN0IGJlIGV4cGxpY2l0bHkKKyAqIHByb3ZpZGVk LgogICoKICAqICdwcnVuZWluZm8nIGlzIGEgUGFydGl0aW9uUHJ1bmVJbmZvIGFzIGdlbmVyYXRl ZCBieQogICogbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvLiAgSGVyZSB3ZSBidWlsZCBhIFBhcnRp dGlvblBydW5lU3RhdGUgY29udGFpbmluZyBhCkBAIC0xNjk2LDE5ICsxODA5LDIxIEBAIEV4ZWNJ bml0UGFydGl0aW9uUHJ1bmluZyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKICAqIFBhcnRpdGlvbmVk UmVsUHJ1bmVJbmZvLgogICovCiBzdGF0aWMgUGFydGl0aW9uUHJ1bmVTdGF0ZSAqCi1DcmVhdGVQ YXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBQYXJ0aXRpb25QcnVuZUlu Zm8gKnBydW5laW5mbykKK0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFu c3RhdGUsCisJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvLAorCQkJCQkJICBi b29sIGNvbnNpZGVyX2luaXRpYWxfc3RlcHMsCisJCQkJCQkgIGJvb2wgY29uc2lkZXJfZXhlY19z dGVwcywKKwkJCQkJCSAgTGlzdCAqcnRhYmxlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsCisJCQkJ CQkgIFBhcnRpdGlvbkRpcmVjdG9yeSBwYXJ0ZGlyKQogewotCUVTdGF0ZQkgICAqZXN0YXRlID0g cGxhbnN0YXRlLT5zdGF0ZTsKKwlFU3RhdGUJICAgKmVzdGF0ZSA9IHBsYW5zdGF0ZSA/IHBsYW5z dGF0ZS0+c3RhdGUgOiBOVUxMOwogCVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7CiAJ aW50CQkJbl9wYXJ0X2hpZXJhcmNoaWVzOwogCUxpc3RDZWxsICAgKmxjOwogCWludAkJCWk7Ci0J RXhwckNvbnRleHQgKmVjb250ZXh0ID0gcGxhbnN0YXRlLT5wc19FeHByQ29udGV4dDsKIAotCS8q IEZvciBkYXRhIHJlYWRpbmcsIGV4ZWN1dG9yIGFsd2F5cyBvbWl0cyBkZXRhY2hlZCBwYXJ0aXRp b25zICovCi0JaWYgKGVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSA9PSBOVUxMKQotCQll c3RhdGUtPmVzX3BhcnRpdGlvbl9kaXJlY3RvcnkgPQotCQkJQ3JlYXRlUGFydGl0aW9uRGlyZWN0 b3J5KGVzdGF0ZS0+ZXNfcXVlcnlfY3h0LCBmYWxzZSk7CisJQXNzZXJ0KChlc3RhdGUgIT0gTlVM TCkgfHwKKwkJCShwYXJ0ZGlyICE9IE5VTEwgJiYgZWNvbnRleHQgIT0gTlVMTCAmJiBydGFibGUg IT0gTklMKSk7CiAKIAluX3BhcnRfaGllcmFyY2hpZXMgPSBsaXN0X2xlbmd0aChwcnVuZWluZm8t PnBydW5lX2luZm9zKTsKIAlBc3NlcnQobl9wYXJ0X2hpZXJhcmNoaWVzID4gMCk7CkBAIC0xNzU5 LDE5ICsxODc0LDQ4IEBAIENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFu c3RhdGUsIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKQogCQkJUGFydGl0aW9uZWRSZWxQ cnVuZUluZm8gKnBpbmZvID0gbGZpcnN0X25vZGUoUGFydGl0aW9uZWRSZWxQcnVuZUluZm8sIGxj Mik7CiAJCQlQYXJ0aXRpb25lZFJlbFBydW5pbmdEYXRhICpwcHJ1bmUgPSAmcHJ1bmVkYXRhLT5w YXJ0cmVscHJ1bmVkYXRhW2pdOwogCQkJUmVsYXRpb24JcGFydHJlbDsKKwkJCWJvb2wJCWNsb3Nl X3BhcnRyZWwgPSBmYWxzZTsKIAkJCVBhcnRpdGlvbkRlc2MgcGFydGRlc2M7CiAJCQlQYXJ0aXRp b25LZXkgcGFydGtleTsKIAogCQkJLyoKLQkJCSAqIFdlIGNhbiByZWx5IG9uIHRoZSBjb3BpZXMg b2YgdGhlIHBhcnRpdGlvbmVkIHRhYmxlJ3MgcGFydGl0aW9uCi0JCQkgKiBrZXkgYW5kIHBhcnRp dGlvbiBkZXNjcmlwdG9yIGFwcGVhcmluZyBpbiBpdHMgcmVsY2FjaGUgZW50cnksCi0JCQkgKiBi ZWNhdXNlIHRoYXQgZW50cnkgd2lsbCBiZSBoZWxkIG9wZW4gYW5kIGxvY2tlZCBmb3IgdGhlCi0J CQkgKiBkdXJhdGlvbiBvZiB0aGlzIGV4ZWN1dG9yIHJ1bi4KKwkJCSAqIE11c3Qgb3BlbiB0aGUg cmVsYXRpb24gYnkgb3Vyc2VsdmVzIHdoZW4gY2FsbGVkIGJlZm9yZSB0aGUKKwkJCSAqIGV4ZWN1 dGlvbiBoYXMgc3RhcnRlZCwgc3VjaCBhcywgd2hlbiBjYWxsZWQgZHVyaW5nCisJCQkgKiBFeGVj dXRvckRvSW5pdGlhbFBydW5pbmcoKSBvbiBhIGNhY2hlZCBwbGFuLiAgSW4gdGhhdCBjYXNlLAor CQkJICogc3ViLXBhcnRpdGlvbnMgbXVzdCBiZSBsb2NrZWQsIGJlY2F1c2UgQWNxdWlyZVBsYW5u ZXJMb2NrcygpCisJCQkgKiB3b3VsZCBub3QgaGF2ZSBzZWVuIHRoZW0uICgxc3QgcmVsYXRpb24g aW4gYSBwYXJ0cmVscHJ1bmVpbmZvcworCQkJICogbGlzdCBpcyBhbHdheXMgdGhlIHJvb3QgcGFy dGl0aW9uZWQgdGFibGUgYXBwZWFyaW5nIGluIHRoZQorCQkJICogcXVlcnksIHdoaWNoIEFjcXVp cmVQbGFubmVyTG9ja3MoKSB3b3VsZCBoYXZlIGxvY2tlZDsgdGhlCisJCQkgKiBBc3NlcnQgaW4g cmVsYXRpb25fb3BlbigpIGd1YXJkcyB0aGF0IGFzc3VtcHRpb24uKQorCQkJICovCisJCQlpZiAo ZXN0YXRlID09IE5VTEwpCisJCQl7CisJCQkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0Y2go cGluZm8tPnJ0aW5kZXgsIHJ0YWJsZSk7CisJCQkJaW50CQlsb2NrbW9kZSA9IChqID09IDApID8g Tm9Mb2NrIDogcnRlLT5yZWxsb2NrbW9kZTsKKworCQkJCXBhcnRyZWwgPSB0YWJsZV9vcGVuKHJ0 ZS0+cmVsaWQsIGxvY2ttb2RlKTsKKwkJCQljbG9zZV9wYXJ0cmVsID0gdHJ1ZTsKKwkJCX0KKwkJ CWVsc2UKKwkJCQlwYXJ0cmVsID0gRXhlY0dldFJhbmdlVGFibGVSZWxhdGlvbihlc3RhdGUsIHBp bmZvLT5ydGluZGV4KTsKKworCQkJLyoKKwkJCSAqIFdlIGNhbiByZWx5IG9uIHRoZSBjb3B5IG9m IHRoZSBwYXJ0aXRpb25lZCB0YWJsZSdzIHBhcnRpdGlvbgorCQkJICoga2V5IGZyb20gaW4gaXRz IHJlbGNhY2hlIGVudHJ5LCBiZWNhdXNlIGl0IGNhbid0IGNoYW5nZSAob3IKKwkJCSAqIGdldCBk ZXN0cm95ZWQpIGFzIGxvbmcgYXMgdGhlIHJlbGF0aW9uIGlzIGxvY2tlZC4gIFBhcnRpdGlvbgor CQkJICogZGVzY3JpcHRvciBpcyB0YWtlbiBmcm9tIHRoZSBQYXJ0aXRpb25EaXJlY3RvcnkgYXNz b2NpYXRlZCB3aXRoCisJCQkgKiB0aGUgdGFibGUgdGhhdCBpcyBoZWxkIG9wZW4gbG9uZyBlbm91 Z2ggZm9yIHRoZSBkZXNjcmlwdG9yIHRvCisJCQkgKiByZW1haW4gdmFsaWQgd2hpbGUgaXQncyB1 c2VkIHRvIHBlcmZvcm0gdGhlIHBydW5pbmcgc3RlcHMuCiAJCQkgKi8KLQkJCXBhcnRyZWwgPSBF eGVjR2V0UmFuZ2VUYWJsZVJlbGF0aW9uKGVzdGF0ZSwgcGluZm8tPnJ0aW5kZXgpOwogCQkJcGFy dGtleSA9IFJlbGF0aW9uR2V0UGFydGl0aW9uS2V5KHBhcnRyZWwpOwotCQkJcGFydGRlc2MgPSBQ YXJ0aXRpb25EaXJlY3RvcnlMb29rdXAoZXN0YXRlLT5lc19wYXJ0aXRpb25fZGlyZWN0b3J5LAot CQkJCQkJCQkJCQkJcGFydHJlbCk7CisJCQlwYXJ0ZGVzYyA9IFBhcnRpdGlvbkRpcmVjdG9yeUxv b2t1cChwYXJ0ZGlyLCBwYXJ0cmVsKTsKKworCQkJLyoKKwkJCSAqIE11c3QgY2xvc2UgcGFydHJl bCwga2VlcGluZyB0aGUgbG9jayB0YWtlbiwgaWYgd2UncmUgbm90IHVzaW5nCisJCQkgKiBFU3Rh dGUncyBlbnRyeS4KKwkJCSAqLworCQkJaWYgKGNsb3NlX3BhcnRyZWwpCisJCQkJdGFibGVfY2xv c2UocGFydHJlbCwgTm9Mb2NrKTsKIAogCQkJLyoKIAkJCSAqIEluaXRpYWxpemUgdGhlIHN1YnBs YW5fbWFwIGFuZCBzdWJwYXJ0X21hcC4KQEAgLTE3ODUsNiArMTkyOSw3IEBAIENyZWF0ZVBhcnRp dGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIFBhcnRpdGlvblBydW5lSW5mbyAq cHJ1bmVpbmZvKQogCQkJQXNzZXJ0KHBhcnRkZXNjLT5ucGFydHMgPj0gcGluZm8tPm5wYXJ0cyk7 CiAJCQlwcHJ1bmUtPm5wYXJ0cyA9IHBhcnRkZXNjLT5ucGFydHM7CiAJCQlwcHJ1bmUtPnN1YnBs YW5fbWFwID0gcGFsbG9jKHNpemVvZihpbnQpICogcGFydGRlc2MtPm5wYXJ0cyk7CisJCQlwcHJ1 bmUtPnJ0aV9tYXAgPSBwYWxsb2Moc2l6ZW9mKEluZGV4KSAqIHBhcnRkZXNjLT5ucGFydHMpOwog CQkJaWYgKHBhcnRkZXNjLT5ucGFydHMgPT0gcGluZm8tPm5wYXJ0cykKIAkJCXsKIAkJCQkvKgpA QCAtMTc5NSw2ICsxOTQwLDggQEAgQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUg KnBsYW5zdGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8pCiAJCQkJcHBydW5lLT5z dWJwYXJ0X21hcCA9IHBpbmZvLT5zdWJwYXJ0X21hcDsKIAkJCQltZW1jcHkocHBydW5lLT5zdWJw bGFuX21hcCwgcGluZm8tPnN1YnBsYW5fbWFwLAogCQkJCQkgICBzaXplb2YoaW50KSAqIHBpbmZv LT5ucGFydHMpOworCQkJCW1lbWNweShwcHJ1bmUtPnJ0aV9tYXAsIHBpbmZvLT5ydGlfbWFwLAor CQkJCQkgICBzaXplb2YoaW50KSAqIHBpbmZvLT5ucGFydHMpOwogCiAJCQkJLyoKIAkJCQkgKiBE b3VibGUtY2hlY2sgdGhhdCB0aGUgbGlzdCBvZiB1bnBydW5lZCByZWxhdGlvbnMgaGFzIG5vdApA QCAtMTg0NSw2ICsxOTkyLDggQEAgQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUg KnBsYW5zdGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8pCiAJCQkJCQkJcGluZm8t PnN1YnBsYW5fbWFwW3BkX2lkeF07CiAJCQkJCQlwcHJ1bmUtPnN1YnBhcnRfbWFwW3BwX2lkeF0g PQogCQkJCQkJCXBpbmZvLT5zdWJwYXJ0X21hcFtwZF9pZHhdOworCQkJCQkJcHBydW5lLT5ydGlf bWFwW3BwX2lkeF0gPQorCQkJCQkJCXBpbmZvLT5ydGlfbWFwW3BkX2lkeF07CiAJCQkJCQlwZF9p ZHgrKzsKIAkJCQkJfQogCQkJCQllbHNlCkBAIC0xODUyLDYgKzIwMDEsNyBAQCBDcmVhdGVQYXJ0 aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBQYXJ0aXRpb25QcnVuZUluZm8g KnBydW5laW5mbykKIAkJCQkJCS8qIHRoaXMgcGFydGRlc2MgZW50cnkgaXMgbm90IGluIHRoZSBw bGFuICovCiAJCQkJCQlwcHJ1bmUtPnN1YnBsYW5fbWFwW3BwX2lkeF0gPSAtMTsKIAkJCQkJCXBw cnVuZS0+c3VicGFydF9tYXBbcHBfaWR4XSA9IC0xOworCQkJCQkJcHBydW5lLT5ydGlfbWFwW3Bw X2lkeF0gPSAwOwogCQkJCQl9CiAJCQkJfQogCkBAIC0xODczLDcgKzIwMjMsNyBAQCBDcmVhdGVQ YXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBQYXJ0aXRpb25QcnVuZUlu Zm8gKnBydW5laW5mbykKIAkJCSAqIEluaXRpYWxpemUgcHJ1bmluZyBjb250ZXh0cyBhcyBuZWVk ZWQuCiAJCQkgKi8KIAkJCXBwcnVuZS0+aW5pdGlhbF9wcnVuaW5nX3N0ZXBzID0gcGluZm8tPmlu aXRpYWxfcHJ1bmluZ19zdGVwczsKLQkJCWlmIChwaW5mby0+aW5pdGlhbF9wcnVuaW5nX3N0ZXBz KQorCQkJaWYgKGNvbnNpZGVyX2luaXRpYWxfc3RlcHMgJiYgcGluZm8tPmluaXRpYWxfcHJ1bmlu Z19zdGVwcykKIAkJCXsKIAkJCQlJbml0UGFydGl0aW9uUHJ1bmVDb250ZXh0KCZwcHJ1bmUtPmlu aXRpYWxfY29udGV4dCwKIAkJCQkJCQkJCQkgIHBpbmZvLT5pbml0aWFsX3BydW5pbmdfc3RlcHMs CkBAIC0xODgzLDcgKzIwMzMsNyBAQCBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0 ZSAqcGxhbnN0YXRlLCBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykKIAkJCQlwcnVuZXN0 YXRlLT5kb19pbml0aWFsX3BydW5lID0gdHJ1ZTsKIAkJCX0KIAkJCXBwcnVuZS0+ZXhlY19wcnVu aW5nX3N0ZXBzID0gcGluZm8tPmV4ZWNfcHJ1bmluZ19zdGVwczsKLQkJCWlmIChwaW5mby0+ZXhl Y19wcnVuaW5nX3N0ZXBzKQorCQkJaWYgKGNvbnNpZGVyX2V4ZWNfc3RlcHMgJiYgcGluZm8tPmV4 ZWNfcHJ1bmluZ19zdGVwcykKIAkJCXsKIAkJCQlJbml0UGFydGl0aW9uUHJ1bmVDb250ZXh0KCZw cHJ1bmUtPmV4ZWNfY29udGV4dCwKIAkJCQkJCQkJCQkgIHBpbmZvLT5leGVjX3BydW5pbmdfc3Rl cHMsCkBAIC0yMTExLDEwICsyMjYxLDE0IEBAIFBhcnRpdGlvblBydW5lRml4U3ViUGxhbk1hcChQ YXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAogICogUGFzcyBpbml0aWFsX3BydW5lIGlm IFBBUkFNX0VYRUMgUGFyYW1zIGNhbm5vdCB5ZXQgYmUgZXZhbHVhdGVkLiAgVGhpcwogICogZGlm ZmVyZW50aWF0ZXMgdGhlIGluaXRpYWwgZXhlY3V0b3ItdGltZSBwcnVuaW5nIHN0ZXAgZnJvbSBs YXRlcgogICogcnVudGltZSBwcnVuaW5nLgorICoKKyAqIFJUIGluZGV4ZXMgb2YgbGVhZiBwYXJ0 aXRpb25zIHNjYW5uZWQgYnkgdGhlIGNob3NlbiBzdWJwbGFucyBhcmUgYWRkZWQgdG8KKyAqICpz Y2FuX2xlYWZwYXJ0X3J0aXMgaWYgdGhlIHBvaW50ZXIgaXMgbm9uLU5VTEwuCiAgKi8KIEJpdG1h cHNldCAqCiBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1 bmVzdGF0ZSwKLQkJCQkJCSBib29sIGluaXRpYWxfcHJ1bmUpCisJCQkJCQkgYm9vbCBpbml0aWFs X3BydW5lLAorCQkJCQkJIEJpdG1hcHNldCAqKnNjYW5fbGVhZnBhcnRfcnRpcykKIHsKIAlCaXRt YXBzZXQgICpyZXN1bHQgPSBOVUxMOwogCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKQEAgLTIx NDksNyArMjMwMyw3IEBAIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0 YXRlICpwcnVuZXN0YXRlLAogCQkgKi8KIAkJcHBydW5lID0gJnBydW5lZGF0YS0+cGFydHJlbHBy dW5lZGF0YVswXTsKIAkJZmluZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKHBydW5lZGF0YSwg cHBydW5lLCBpbml0aWFsX3BydW5lLAotCQkJCQkJCQkJICAgJnJlc3VsdCk7CisJCQkJCQkJCQkg ICAmcmVzdWx0LCBzY2FuX2xlYWZwYXJ0X3J0aXMpOwogCiAJCS8qIEV4cHJlc3Npb24gZXZhbCBt YXkgaGF2ZSB1c2VkIHNwYWNlIGluIEV4cHJDb250ZXh0IHRvbyAqLwogCQlpZiAocHBydW5lLT5l eGVjX3BydW5pbmdfc3RlcHMpCkBAIC0yMTYzLDYgKzIzMTcsOCBAQCBFeGVjRmluZE1hdGNoaW5n U3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSwKIAogCS8qIENvcHkgcmVz dWx0IG91dCBvZiB0aGUgdGVtcCBjb250ZXh0IGJlZm9yZSB3ZSByZXNldCBpdCAqLwogCXJlc3Vs dCA9IGJtc19jb3B5KHJlc3VsdCk7CisJaWYgKHNjYW5fbGVhZnBhcnRfcnRpcykKKwkJKnNjYW5f bGVhZnBhcnRfcnRpcyA9IGJtc19jb3B5KCpzY2FuX2xlYWZwYXJ0X3J0aXMpOwogCiAJTWVtb3J5 Q29udGV4dFJlc2V0KHBydW5lc3RhdGUtPnBydW5lX2NvbnRleHQpOwogCkBAIC0yMTczLDEzICsy MzI5LDE1IEBAIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpw cnVuZXN0YXRlLAogICogZmluZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNlCiAgKgkJUmVjdXJz aXZlIHdvcmtlciBmdW5jdGlvbiBmb3IgRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zCiAgKgotICog QWRkcyB2YWxpZCAobm9uLXBydW5hYmxlKSBzdWJwbGFuIElEcyB0byAqdmFsaWRzdWJwbGFucwor ICogQWRkcyB2YWxpZCAobm9uLXBydW5hYmxlKSBzdWJwbGFuIElEcyB0byAqdmFsaWRzdWJwbGFu cyBhbmQgUlQgaW5kZXhlcyBvZgorICogb2YgdGhlIGNvcnJlc3BvbmRpbmcgbGVhZiBwYXJ0aXRp b25zIHRvICpzY2FuX2xlYWZwYXJ0X3J0aXMgKGlmIGFza2VkIGZvcikuCiAgKi8KIHN0YXRpYyB2 b2lkCiBmaW5kX21hdGNoaW5nX3N1YnBsYW5zX3JlY3Vyc2UoUGFydGl0aW9uUHJ1bmluZ0RhdGEg KnBydW5lZGF0YSwKIAkJCQkJCQkgICBQYXJ0aXRpb25lZFJlbFBydW5pbmdEYXRhICpwcHJ1bmUs CiAJCQkJCQkJICAgYm9vbCBpbml0aWFsX3BydW5lLAotCQkJCQkJCSAgIEJpdG1hcHNldCAqKnZh bGlkc3VicGxhbnMpCisJCQkJCQkJICAgQml0bWFwc2V0ICoqdmFsaWRzdWJwbGFucywKKwkJCQkJ CQkgICBCaXRtYXBzZXQgKipzY2FuX2xlYWZwYXJ0X3J0aXMpCiB7CiAJQml0bWFwc2V0ICAqcGFy dHNldDsKIAlpbnQJCQlpOwpAQCAtMjIwNiw4ICsyMzY0LDEzIEBAIGZpbmRfbWF0Y2hpbmdfc3Vi cGxhbnNfcmVjdXJzZShQYXJ0aXRpb25QcnVuaW5nRGF0YSAqcHJ1bmVkYXRhLAogCXdoaWxlICgo aSA9IGJtc19uZXh0X21lbWJlcihwYXJ0c2V0LCBpKSkgPj0gMCkKIAl7CiAJCWlmIChwcHJ1bmUt PnN1YnBsYW5fbWFwW2ldID49IDApCisJCXsKIAkJCSp2YWxpZHN1YnBsYW5zID0gYm1zX2FkZF9t ZW1iZXIoKnZhbGlkc3VicGxhbnMsCiAJCQkJCQkJCQkJCXBwcnVuZS0+c3VicGxhbl9tYXBbaV0p OworCQkJaWYgKHNjYW5fbGVhZnBhcnRfcnRpcyAmJiBwcHJ1bmUtPnJ0aV9tYXBbaV0gPiAwKQor CQkJCSpzY2FuX2xlYWZwYXJ0X3J0aXMgPSBibXNfYWRkX21lbWJlcigqc2Nhbl9sZWFmcGFydF9y dGlzLAorCQkJCQkJCQkJCQkJCSBwcHJ1bmUtPnJ0aV9tYXBbaV0pOworCQl9CiAJCWVsc2UKIAkJ ewogCQkJaW50CQkJcGFydGlkeCA9IHBwcnVuZS0+c3VicGFydF9tYXBbaV07CkBAIC0yMjE1LDcg KzIzNzgsOCBAQCBmaW5kX21hdGNoaW5nX3N1YnBsYW5zX3JlY3Vyc2UoUGFydGl0aW9uUHJ1bmlu Z0RhdGEgKnBydW5lZGF0YSwKIAkJCWlmIChwYXJ0aWR4ID49IDApCiAJCQkJZmluZF9tYXRjaGlu Z19zdWJwbGFuc19yZWN1cnNlKHBydW5lZGF0YSwKIAkJCQkJCQkJCQkJICAgJnBydW5lZGF0YS0+ cGFydHJlbHBydW5lZGF0YVtwYXJ0aWR4XSwKLQkJCQkJCQkJCQkJICAgaW5pdGlhbF9wcnVuZSwg dmFsaWRzdWJwbGFucyk7CisJCQkJCQkJCQkJCSAgIGluaXRpYWxfcHJ1bmUsIHZhbGlkc3VicGxh bnMsCisJCQkJCQkJCQkJCSAgIHNjYW5fbGVhZnBhcnRfcnRpcyk7CiAJCQllbHNlCiAJCQl7CiAJ CQkJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMKaW5kZXggOWRmMWY4MWVhOC4uNjM5MTQ1YWJl OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMKQEAgLTExOSw2ICsxMTksNyBAQCBDcmVhdGVF eGVjdXRvclN0YXRlKHZvaWQpCiAJZXN0YXRlLT5lc19yZWxhdGlvbnMgPSBOVUxMOwogCWVzdGF0 ZS0+ZXNfcm93bWFya3MgPSBOVUxMOwogCWVzdGF0ZS0+ZXNfcGxhbm5lZHN0bXQgPSBOVUxMOwor CWVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9yZXN1bHQgPSBOVUxMOwogCiAJZXN0YXRlLT5lc19qdW5r RmlsdGVyID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rp b25zLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYwppbmRleCBmOTQ2MGFlNTA2 Li5hMjE4MmE2YjFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMu YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYwpAQCAtODQ0LDcgKzg0NCw3 IEBAIHBvc3RxdWVsX3N0YXJ0KGV4ZWN1dGlvbl9zdGF0ZSAqZXMsIFNRTEZ1bmN0aW9uQ2FjaGVQ dHIgZmNhY2hlKQogCWVsc2UKIAkJZGVzdCA9IE5vbmVfUmVjZWl2ZXI7CiAKLQllcy0+cWQgPSBD cmVhdGVRdWVyeURlc2MoZXMtPnN0bXQsCisJZXMtPnFkID0gQ3JlYXRlUXVlcnlEZXNjKGVzLT5z dG10LCBOVUxMLAogCQkJCQkJCSBmY2FjaGUtPnNyYywKIAkJCQkJCQkgR2V0QWN0aXZlU25hcHNo b3QoKSwKIAkJCQkJCQkgSW52YWxpZFNuYXBzaG90LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUFwcGVuZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5j CmluZGV4IDM1N2UxMGExZDcuLjA5ZjI2NjU4ZTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVBcHBlbmQuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5k LmMKQEAgLTk0LDYgKzk0LDcgQEAgc3RhdGljIGJvb2wgRXhlY0FwcGVuZEFzeW5jUmVxdWVzdChB cHBlbmRTdGF0ZSAqbm9kZSwgVHVwbGVUYWJsZVNsb3QgKipyZXN1bHQpOwogc3RhdGljIHZvaWQg RXhlY0FwcGVuZEFzeW5jRXZlbnRXYWl0KEFwcGVuZFN0YXRlICpub2RlKTsKIHN0YXRpYyB2b2lk IGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKEFwcGVuZFN0YXRlICpub2RlKTsKIAorCiAvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAgKgkJRXhlY0luaXRBcHBlbmQKICAqCkBAIC0xMzQsNyArMTM1LDcgQEAgRXhlY0lu aXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlhcHBl bmRzdGF0ZS0+YXNfYmVndW4gPSBmYWxzZTsKIAogCS8qIElmIHJ1bi10aW1lIHBhcnRpdGlvbiBw cnVuaW5nIGlzIGVuYWJsZWQsIHRoZW4gc2V0IHRoYXQgdXAgbm93ICovCi0JaWYgKG5vZGUtPnBh cnRfcHJ1bmVfaW5mbyAhPSBOVUxMKQorCWlmIChub2RlLT5wYXJ0X3BydW5lX2luZGV4ID49IDAp CiAJewogCQlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOwogCkBAIC0xNDUsNyArMTQ2 LDcgQEAgRXhlY0luaXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVm bGFncykKIAkJICovCiAJCXBydW5lc3RhdGUgPSBFeGVjSW5pdFBhcnRpdGlvblBydW5pbmcoJmFw cGVuZHN0YXRlLT5wcywKIAkJCQkJCQkJCQkJICBsaXN0X2xlbmd0aChub2RlLT5hcHBlbmRwbGFu cyksCi0JCQkJCQkJCQkJCSAgbm9kZS0+cGFydF9wcnVuZV9pbmZvLAorCQkJCQkJCQkJCQkgIG5v ZGUtPnBhcnRfcHJ1bmVfaW5kZXgsCiAJCQkJCQkJCQkJCSAgJnZhbGlkc3VicGxhbnMpOwogCQlh cHBlbmRzdGF0ZS0+YXNfcHJ1bmVfc3RhdGUgPSBwcnVuZXN0YXRlOwogCQlucGxhbnMgPSBibXNf bnVtX21lbWJlcnModmFsaWRzdWJwbGFucyk7CkBAIC0xNTUsNyArMTU2LDggQEAgRXhlY0luaXRB cHBlbmQoQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJICogc3Vi cGxhbiwgd2UgY2FuIGZpbGwgYXNfdmFsaWRfc3VicGxhbnMgaW1tZWRpYXRlbHksIHByZXZlbnRp bmcKIAkJICogbGF0ZXIgY2FsbHMgdG8gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zLgogCQkgKi8K LQkJaWYgKCFwcnVuZXN0YXRlLT5kb19leGVjX3BydW5lICYmIG5wbGFucyA+IDApCisJCWlmIChh cHBlbmRzdGF0ZS0+YXNfcHJ1bmVfc3RhdGUgPT0gTlVMTCB8fAorCQkJKCFhcHBlbmRzdGF0ZS0+ YXNfcHJ1bmVfc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgbnBsYW5zID4gMCkpCiAJCQlhcHBlbmRz dGF0ZS0+YXNfdmFsaWRfc3VicGxhbnMgPSBibXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAt IDEpOwogCX0KIAllbHNlCkBAIC01NzcsNyArNTc5LDcgQEAgY2hvb3NlX25leHRfc3VicGxhbl9s b2NhbGx5KEFwcGVuZFN0YXRlICpub2RlKQogCQl9CiAJCWVsc2UgaWYgKG5vZGUtPmFzX3ZhbGlk X3N1YnBsYW5zID09IE5VTEwpCiAJCQlub2RlLT5hc192YWxpZF9zdWJwbGFucyA9Ci0JCQkJRXhl Y0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSk7CisJCQkJ RXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSwgTlVM TCk7CiAKIAkJd2hpY2hwbGFuID0gLTE7CiAJfQpAQCAtNjQyLDcgKzY0NCw3IEBAIGNob29zZV9u ZXh0X3N1YnBsYW5fZm9yX2xlYWRlcihBcHBlbmRTdGF0ZSAqbm9kZSkKIAkJaWYgKG5vZGUtPmFz X3ZhbGlkX3N1YnBsYW5zID09IE5VTEwpCiAJCXsKIAkJCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5z ID0KLQkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNfcHJ1bmVfc3RhdGUsIGZh bHNlKTsKKwkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNfcHJ1bmVfc3RhdGUs IGZhbHNlLCBOVUxMKTsKIAogCQkJLyoKIAkJCSAqIE1hcmsgZWFjaCBpbnZhbGlkIHBsYW4gYXMg ZmluaXNoZWQgdG8gYWxsb3cgdGhlIGxvb3AgYmVsb3cgdG8KQEAgLTcxNyw3ICs3MTksNyBAQCBj aG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl93b3JrZXIoQXBwZW5kU3RhdGUgKm5vZGUpCiAJZWxzZSBp ZiAobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMgPT0gTlVMTCkKIAl7CiAJCW5vZGUtPmFzX3ZhbGlk X3N1YnBsYW5zID0KLQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hc19wcnVuZV9z dGF0ZSwgZmFsc2UpOworCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5l X3N0YXRlLCBmYWxzZSwgTlVMTCk7CiAJCW1hcmtfaW52YWxpZF9zdWJwbGFuc19hc19maW5pc2hl ZChub2RlKTsKIAl9CiAKQEAgLTg2OCw3ICs4NzAsNyBAQCBFeGVjQXBwZW5kQXN5bmNCZWdpbihB cHBlbmRTdGF0ZSAqbm9kZSkKIAlpZiAobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMgPT0gTlVMTCkK IAl7CiAJCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0KLQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQ bGFucyhub2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UpOworCQkJRXhlY0ZpbmRNYXRjaGluZ1N1 YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CiAKIAkJY2xhc3NpZnlf bWF0Y2hpbmdfc3VicGxhbnMobm9kZSk7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VB cHBlbmQuYwppbmRleCBlY2Y5MDUyZTAzLi43NzA4Y2ZmZmRhIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlTWVyZ2VBcHBlbmQuYwpAQCAtODIsNyArODIsNyBAQCBFeGVjSW5pdE1lcmdlQXBwZW5k KE1lcmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAltZXJnZXN0 YXRlLT5wcy5FeGVjUHJvY05vZGUgPSBFeGVjTWVyZ2VBcHBlbmQ7CiAKIAkvKiBJZiBydW4tdGlt ZSBwYXJ0aXRpb24gcHJ1bmluZyBpcyBlbmFibGVkLCB0aGVuIHNldCB0aGF0IHVwIG5vdyAqLwot CWlmIChub2RlLT5wYXJ0X3BydW5lX2luZm8gIT0gTlVMTCkKKwlpZiAobm9kZS0+cGFydF9wcnVu ZV9pbmRleCA+PSAwKQogCXsKIAkJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZTsKIApA QCAtOTMsNyArOTMsNyBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBF U3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJICovCiAJCXBydW5lc3RhdGUgPSBFeGVjSW5p dFBhcnRpdGlvblBydW5pbmcoJm1lcmdlc3RhdGUtPnBzLAogCQkJCQkJCQkJCQkgIGxpc3RfbGVu Z3RoKG5vZGUtPm1lcmdlcGxhbnMpLAotCQkJCQkJCQkJCQkgIG5vZGUtPnBhcnRfcHJ1bmVfaW5m bywKKwkJCQkJCQkJCQkJICBub2RlLT5wYXJ0X3BydW5lX2luZGV4LAogCQkJCQkJCQkJCQkgICZ2 YWxpZHN1YnBsYW5zKTsKIAkJbWVyZ2VzdGF0ZS0+bXNfcHJ1bmVfc3RhdGUgPSBwcnVuZXN0YXRl OwogCQlucGxhbnMgPSBibXNfbnVtX21lbWJlcnModmFsaWRzdWJwbGFucyk7CkBAIC0xMDMsNyAr MTAzLDggQEAgRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRlICpl c3RhdGUsIGludCBlZmxhZ3MpCiAJCSAqIHN1YnBsYW4sIHdlIGNhbiBmaWxsIGFzX3ZhbGlkX3N1 YnBsYW5zIGltbWVkaWF0ZWx5LCBwcmV2ZW50aW5nCiAJCSAqIGxhdGVyIGNhbGxzIHRvIEV4ZWNG aW5kTWF0Y2hpbmdTdWJQbGFucy4KIAkJICovCi0JCWlmICghcHJ1bmVzdGF0ZS0+ZG9fZXhlY19w cnVuZSAmJiBucGxhbnMgPiAwKQorCQlpZiAobWVyZ2VzdGF0ZS0+bXNfcHJ1bmVfc3RhdGUgPT0g TlVMTCB8fAorCQkJKCFtZXJnZXN0YXRlLT5tc19wcnVuZV9zdGF0ZS0+ZG9fZXhlY19wcnVuZSAm JiBucGxhbnMgPiAwKSkKIAkJCW1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0gYm1zX2Fk ZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsKIAl9CiAJZWxzZQpAQCAtMjE4LDcgKzIxOSw3 IEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJICovCiAJCWlmIChub2Rl LT5tc192YWxpZF9zdWJwbGFucyA9PSBOVUxMKQogCQkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnMg PQotCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5tc19wcnVuZV9zdGF0ZSwgZmFs c2UpOworCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5tc19wcnVuZV9zdGF0ZSwg ZmFsc2UsIE5VTEwpOwogCiAJCS8qCiAJCSAqIEZpcnN0IHRpbWUgdGhyb3VnaDogcHVsbCB0aGUg Zmlyc3QgdHVwbGUgZnJvbSBlYWNoIHZhbGlkIHN1YnBsYW4sCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9leGVjdXRvci9zcGkuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jCmluZGV4IDA0 MmE1ZjhiMGEuLjcyOWUyZmQ3YjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3Nw aS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jCkBAIC0xNTc4LDYgKzE1NzgsNyBA QCBTUElfY3Vyc29yX29wZW5faW50ZXJuYWwoY29uc3QgY2hhciAqbmFtZSwgU1BJUGxhblB0ciBw bGFuLAogCUNhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2U7CiAJQ2FjaGVkUGxhbiAqY3BsYW47 CiAJTGlzdAkgICAqc3RtdF9saXN0OworCUxpc3QJICAgKnBhcnRfcHJ1bmVfcmVzdWx0X2xpc3Q7 CiAJY2hhcgkgICAqcXVlcnlfc3RyaW5nOwogCVNuYXBzaG90CXNuYXBzaG90OwogCU1lbW9yeUNv bnRleHQgb2xkY29udGV4dDsKQEAgLTE2NTcsNyArMTY1OCwxMCBAQCBTUElfY3Vyc29yX29wZW5f aW50ZXJuYWwoY29uc3QgY2hhciAqbmFtZSwgU1BJUGxhblB0ciBwbGFuLAogCSAqLwogCiAJLyog UmVwbGFuIGlmIG5lZWRlZCwgYW5kIGluY3JlbWVudCBwbGFuIHJlZmNvdW50IGZvciBwb3J0YWwg Ki8KLQljcGxhbiA9IEdldENhY2hlZFBsYW4ocGxhbnNvdXJjZSwgcGFyYW1MSSwgTlVMTCwgX1NQ SV9jdXJyZW50LT5xdWVyeUVudik7CisJY3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBsYW5zb3VyY2Us IHBhcmFtTEksIE5VTEwsIF9TUElfY3VycmVudC0+cXVlcnlFbnYsCisJCQkJCQkgICZwYXJ0X3By dW5lX3Jlc3VsdF9saXN0KTsKKwlBc3NlcnQobGlzdF9sZW5ndGgoY3BsYW4tPnN0bXRfbGlzdCkg PT0KKwkJICAgbGlzdF9sZW5ndGgocGFydF9wcnVuZV9yZXN1bHRfbGlzdCkpOwogCXN0bXRfbGlz dCA9IGNwbGFuLT5zdG10X2xpc3Q7CiAKIAlpZiAoIXBsYW4tPnNhdmVkKQpAQCAtMTY4NSw2ICsx Njg5LDkgQEAgU1BJX2N1cnNvcl9vcGVuX2ludGVybmFsKGNvbnN0IGNoYXIgKm5hbWUsIFNQSVBs YW5QdHIgcGxhbiwKIAkJCQkJICBzdG10X2xpc3QsCiAJCQkJCSAgY3BsYW4pOwogCisJLyogQ29w eSBQYXJ0aXRpb25QcnVuZVJlc3VsdHMgaW50byB0aGUgcG9ydGFsJ3MgY29udGV4dC4gKi8KKwlQ b3J0YWxTdG9yZVBhcnRpdGlvblBydW5lUmVzdWx0cyhwb3J0YWwsIHBhcnRfcHJ1bmVfcmVzdWx0 X2xpc3QpOworCiAJLyoKIAkgKiBTZXQgdXAgb3B0aW9ucyBmb3IgcG9ydGFsLiAgRGVmYXVsdCBT Q1JPTEwgdHlwZSBpcyBjaG9zZW4gdGhlIHNhbWUgd2F5CiAJICogYXMgUGVyZm9ybUN1cnNvck9w ZW4gZG9lcyBpdC4KQEAgLTIwOTIsNyArMjA5OSw4IEBAIFNQSV9wbGFuX2dldF9jYWNoZWRfcGxh bihTUElQbGFuUHRyIHBsYW4pCiAJLyogR2V0IHRoZSBnZW5lcmljIHBsYW4gZm9yIHRoZSBxdWVy eSAqLwogCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihwbGFuc291cmNlLCBOVUxMLAogCQkJCQkJICBw bGFuLT5zYXZlZCA/IEN1cnJlbnRSZXNvdXJjZU93bmVyIDogTlVMTCwKLQkJCQkJCSAgX1NQSV9j dXJyZW50LT5xdWVyeUVudik7CisJCQkJCQkgIF9TUElfY3VycmVudC0+cXVlcnlFbnYsCisJCQkJ CQkgIE5VTEwgLyogTm90IGludGVyZXN0ZWQgaW4gUGFydGl0aW9uUHJ1bmVSZXN1bHRzICovKTsK IAlBc3NlcnQoY3BsYW4gPT0gcGxhbnNvdXJjZS0+Z3BsYW4pOwogCiAJLyogUG9wIHRoZSBlcnJv ciBjb250ZXh0IHN0YWNrICovCkBAIC0yNDczLDcgKzI0ODEsOSBAQCBfU1BJX2V4ZWN1dGVfcGxh bihTUElQbGFuUHRyIHBsYW4sIGNvbnN0IFNQSUV4ZWN1dGVPcHRpb25zICpvcHRpb25zLAogCXsK IAkJQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSA9IChDYWNoZWRQbGFuU291cmNlICopIGxm aXJzdChsYzEpOwogCQlMaXN0CSAgICpzdG10X2xpc3Q7Ci0JCUxpc3RDZWxsICAgKmxjMjsKKwkJ TGlzdAkgICAqcGFydF9wcnVuZV9yZXN1bHRfbGlzdDsKKwkJTGlzdENlbGwgICAqbGMyLAorCQkJ CSAgICpsYzM7CiAKIAkJc3BpY2FsbGJhY2thcmcucXVlcnkgPSBwbGFuc291cmNlLT5xdWVyeV9z dHJpbmc7CiAKQEAgLTI1NDksOCArMjU1OSwxMCBAQCBfU1BJX2V4ZWN1dGVfcGxhbihTUElQbGFu UHRyIHBsYW4sIGNvbnN0IFNQSUV4ZWN1dGVPcHRpb25zICpvcHRpb25zLAogCQkgKiBwbGFuLCB0 aGUgcmVmY291bnQgbXVzdCBiZSBiYWNrZWQgYnkgdGhlIHBsYW5fb3duZXIuCiAJCSAqLwogCQlj cGxhbiA9IEdldENhY2hlZFBsYW4ocGxhbnNvdXJjZSwgb3B0aW9ucy0+cGFyYW1zLAotCQkJCQkJ CSAgcGxhbl9vd25lciwgX1NQSV9jdXJyZW50LT5xdWVyeUVudik7Ci0KKwkJCQkJCQkgIHBsYW5f b3duZXIsIF9TUElfY3VycmVudC0+cXVlcnlFbnYsCisJCQkJCQkJICZwYXJ0X3BydW5lX3Jlc3Vs dF9saXN0KTsKKwkJQXNzZXJ0KGxpc3RfbGVuZ3RoKGNwbGFuLT5zdG10X2xpc3QpID09CisJCQkg ICBsaXN0X2xlbmd0aChwYXJ0X3BydW5lX3Jlc3VsdF9saXN0KSk7CiAJCXN0bXRfbGlzdCA9IGNw bGFuLT5zdG10X2xpc3Q7CiAKIAkJLyoKQEAgLTI1ODksOSArMjYwMSwxMCBAQCBfU1BJX2V4ZWN1 dGVfcGxhbihTUElQbGFuUHRyIHBsYW4sIGNvbnN0IFNQSUV4ZWN1dGVPcHRpb25zICpvcHRpb25z LAogCQkJfQogCQl9CiAKLQkJZm9yZWFjaChsYzIsIHN0bXRfbGlzdCkKKwkJZm9yYm90aChsYzIs IHN0bXRfbGlzdCwgbGMzLCBwYXJ0X3BydW5lX3Jlc3VsdF9saXN0KQogCQl7CiAJCQlQbGFubmVk U3RtdCAqc3RtdCA9IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10LCBsYzIpOworCQkJUGFydGl0aW9u UHJ1bmVSZXN1bHQgKnBhcnRfcHJ1bmVfcmVzdWx0ID0gbGZpcnN0X25vZGUoUGFydGl0aW9uUHJ1 bmVSZXN1bHQsIGxjMyk7CiAJCQlib29sCQljYW5TZXRUYWcgPSBzdG10LT5jYW5TZXRUYWc7CiAJ CQlEZXN0UmVjZWl2ZXIgKmRlc3Q7CiAKQEAgLTI2NjMsNyArMjY3Niw3IEBAIF9TUElfZXhlY3V0 ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlvbnMs CiAJCQkJZWxzZQogCQkJCQlzbmFwID0gSW52YWxpZFNuYXBzaG90OwogCi0JCQkJcWRlc2MgPSBD cmVhdGVRdWVyeURlc2Moc3RtdCwKKwkJCQlxZGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhzdG10LCBw YXJ0X3BydW5lX3Jlc3VsdCwKIAkJCQkJCQkJCQlwbGFuc291cmNlLT5xdWVyeV9zdHJpbmcsCiAJ CQkJCQkJCQkJc25hcCwgY3Jvc3NjaGVja19zbmFwc2hvdCwKIAkJCQkJCQkJCQlkZXN0LApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rl cy9jb3B5ZnVuY3MuYwppbmRleCA0NmExOTQzZDk3Li45NjQyZTc0ZWYxIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5 ZnVuY3MuYwpAQCAtOTYsNyArOTYsMTAgQEAgX2NvcHlQbGFubmVkU3RtdChjb25zdCBQbGFubmVk U3RtdCAqZnJvbSkKIAlDT1BZX1NDQUxBUl9GSUVMRChwYXJhbGxlbE1vZGVOZWVkZWQpOwogCUNP UFlfU0NBTEFSX0ZJRUxEKGppdEZsYWdzKTsKIAlDT1BZX05PREVfRklFTEQocGxhblRyZWUpOwor CUNPUFlfTk9ERV9GSUVMRChwYXJ0UHJ1bmVJbmZvcyk7CisJQ09QWV9TQ0FMQVJfRklFTEQoY29u dGFpbnNJbml0aWFsUHJ1bmluZyk7CiAJQ09QWV9OT0RFX0ZJRUxEKHJ0YWJsZSk7CisJQ09QWV9C SVRNQVBTRVRfRklFTEQobWluTG9ja1JlbGlkcyk7CiAJQ09QWV9OT0RFX0ZJRUxEKHJlc3VsdFJl bGF0aW9ucyk7CiAJQ09QWV9OT0RFX0ZJRUxEKGFwcGVuZFJlbGF0aW9ucyk7CiAJQ09QWV9OT0RF X0ZJRUxEKHN1YnBsYW5zKTsKQEAgLTI1Myw3ICsyNTYsNyBAQCBfY29weUFwcGVuZChjb25zdCBB cHBlbmQgKmZyb20pCiAJQ09QWV9OT0RFX0ZJRUxEKGFwcGVuZHBsYW5zKTsKIAlDT1BZX1NDQUxB Ul9GSUVMRChuYXN5bmNwbGFucyk7CiAJQ09QWV9TQ0FMQVJfRklFTEQoZmlyc3RfcGFydGlhbF9w bGFuKTsKLQlDT1BZX05PREVfRklFTEQocGFydF9wcnVuZV9pbmZvKTsKKwlDT1BZX1NDQUxBUl9G SUVMRChwYXJ0X3BydW5lX2luZGV4KTsKIAogCXJldHVybiBuZXdub2RlOwogfQpAQCAtMjgxLDcg KzI4NCw3IEBAIF9jb3B5TWVyZ2VBcHBlbmQoY29uc3QgTWVyZ2VBcHBlbmQgKmZyb20pCiAJQ09Q WV9QT0lOVEVSX0ZJRUxEKHNvcnRPcGVyYXRvcnMsIGZyb20tPm51bUNvbHMgKiBzaXplb2YoT2lk KSk7CiAJQ09QWV9QT0lOVEVSX0ZJRUxEKGNvbGxhdGlvbnMsIGZyb20tPm51bUNvbHMgKiBzaXpl b2YoT2lkKSk7CiAJQ09QWV9QT0lOVEVSX0ZJRUxEKG51bGxzRmlyc3QsIGZyb20tPm51bUNvbHMg KiBzaXplb2YoYm9vbCkpOwotCUNPUFlfTk9ERV9GSUVMRChwYXJ0X3BydW5lX2luZm8pOworCUNP UFlfU0NBTEFSX0ZJRUxEKHBhcnRfcHJ1bmVfaW5kZXgpOwogCiAJcmV0dXJuIG5ld25vZGU7CiB9 CkBAIC0xMjgwLDYgKzEyODMsOCBAQCBfY29weVBhcnRpdGlvblBydW5lSW5mbyhjb25zdCBQYXJ0 aXRpb25QcnVuZUluZm8gKmZyb20pCiAJUGFydGl0aW9uUHJ1bmVJbmZvICpuZXdub2RlID0gbWFr ZU5vZGUoUGFydGl0aW9uUHJ1bmVJbmZvKTsKIAogCUNPUFlfTk9ERV9GSUVMRChwcnVuZV9pbmZv cyk7CisJQ09QWV9TQ0FMQVJfRklFTEQobmVlZHNfaW5pdF9wcnVuaW5nKTsKKwlDT1BZX1NDQUxB Ul9GSUVMRChuZWVkc19leGVjX3BydW5pbmcpOwogCUNPUFlfQklUTUFQU0VUX0ZJRUxEKG90aGVy X3N1YnBsYW5zKTsKIAogCXJldHVybiBuZXdub2RlOwpAQCAtMTI5Niw2ICsxMzAxLDcgQEAgX2Nv cHlQYXJ0aXRpb25lZFJlbFBydW5lSW5mbyhjb25zdCBQYXJ0aXRpb25lZFJlbFBydW5lSW5mbyAq ZnJvbSkKIAlDT1BZX1BPSU5URVJfRklFTEQoc3VicGxhbl9tYXAsIGZyb20tPm5wYXJ0cyAqIHNp emVvZihpbnQpKTsKIAlDT1BZX1BPSU5URVJfRklFTEQoc3VicGFydF9tYXAsIGZyb20tPm5wYXJ0 cyAqIHNpemVvZihpbnQpKTsKIAlDT1BZX1BPSU5URVJfRklFTEQocmVsaWRfbWFwLCBmcm9tLT5u cGFydHMgKiBzaXplb2YoT2lkKSk7CisJQ09QWV9QT0lOVEVSX0ZJRUxEKHJ0aV9tYXAsIGZyb20t Pm5wYXJ0cyAqIHNpemVvZihJbmRleCkpOwogCUNPUFlfTk9ERV9GSUVMRChpbml0aWFsX3BydW5p bmdfc3RlcHMpOwogCUNPUFlfTk9ERV9GSUVMRChleGVjX3BydW5pbmdfc3RlcHMpOwogCUNPUFlf QklUTUFQU0VUX0ZJRUxEKGV4ZWNwYXJhbWlkcyk7CkBAIC01NDY5LDYgKzU0NzUsMjEgQEAgX2Nv cHlFeHRlbnNpYmxlTm9kZShjb25zdCBFeHRlbnNpYmxlTm9kZSAqZnJvbSkKIAlyZXR1cm4gbmV3 bm9kZTsKIH0KIAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgorICoJCQkJCWV4ZWNub2Rlcy5oIGNvcHkgZnVuY3Rpb25z CisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisgKi8KK3N0YXRpYyBQYXJ0aXRpb25QcnVuZVJlc3VsdCAqCitfY29weVBh cnRpdGlvblBydW5lUmVzdWx0KGNvbnN0IFBhcnRpdGlvblBydW5lUmVzdWx0ICpmcm9tKQorewor CVBhcnRpdGlvblBydW5lUmVzdWx0ICpuZXdub2RlID0gbWFrZU5vZGUoUGFydGl0aW9uUHJ1bmVS ZXN1bHQpOworCisJQ09QWV9OT0RFX0ZJRUxEKHZhbGlkX3N1YnBsYW5fb2Zmc19saXN0KTsKKwlD T1BZX0JJVE1BUFNFVF9GSUVMRChzY2FuX2xlYWZwYXJ0X3J0aXMpOworCisJcmV0dXJuIG5ld25v ZGU7Cit9CisKIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKICAqCQkJCQl2YWx1ZS5oIGNvcHkgZnVuY3Rpb25zCiAgKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCkBAIC01NTIzLDcgKzU1NDQsNiBAQCBfY29weUJpdFN0cmluZyhjb25zdCBCaXRTdHJp bmcgKmZyb20pCiAJcmV0dXJuIG5ld25vZGU7CiB9CiAKLQogc3RhdGljIEZvcmVpZ25LZXlDYWNo ZUluZm8gKgogX2NvcHlGb3JlaWduS2V5Q2FjaGVJbmZvKGNvbnN0IEZvcmVpZ25LZXlDYWNoZUlu Zm8gKmZyb20pCiB7CkBAIC02NTY1LDYgKzY1ODUsMTMgQEAgY29weU9iamVjdEltcGwoY29uc3Qg dm9pZCAqZnJvbSkKIAkJCXJldHZhbCA9IF9jb3B5UHVibGljYXRpb25UYWJsZShmcm9tKTsKIAkJ CWJyZWFrOwogCisJCQkvKgorCQkJICogRVhFQ1VUSU9OIE5PREVTCisJCQkgKi8KKwkJY2FzZSBU X1BhcnRpdGlvblBydW5lUmVzdWx0OgorCQkJcmV0dmFsID0gX2NvcHlQYXJ0aXRpb25QcnVuZVJl c3VsdChmcm9tKTsKKwkJCWJyZWFrOworCiAJCQkvKgogCQkJICogTUlTQ0VMTEFORU9VUyBOT0RF UwogCQkJICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jIGIvc3Jj L2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwppbmRleCAxM2UxNjQzNTMwLi4wY2JjYmM4ZWQ0IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5k L25vZGVzL291dGZ1bmNzLmMKQEAgLTMxNCw3ICszMTQsMTAgQEAgX291dFBsYW5uZWRTdG10KFN0 cmluZ0luZm8gc3RyLCBjb25zdCBQbGFubmVkU3RtdCAqbm9kZSkKIAlXUklURV9CT09MX0ZJRUxE KHBhcmFsbGVsTW9kZU5lZWRlZCk7CiAJV1JJVEVfSU5UX0ZJRUxEKGppdEZsYWdzKTsKIAlXUklU RV9OT0RFX0ZJRUxEKHBsYW5UcmVlKTsKKwlXUklURV9OT0RFX0ZJRUxEKHBhcnRQcnVuZUluZm9z KTsKKwlXUklURV9CT09MX0ZJRUxEKGNvbnRhaW5zSW5pdGlhbFBydW5pbmcpOwogCVdSSVRFX05P REVfRklFTEQocnRhYmxlKTsKKwlXUklURV9CSVRNQVBTRVRfRklFTEQobWluTG9ja1JlbGlkcyk7 CiAJV1JJVEVfTk9ERV9GSUVMRChyZXN1bHRSZWxhdGlvbnMpOwogCVdSSVRFX05PREVfRklFTEQo YXBwZW5kUmVsYXRpb25zKTsKIAlXUklURV9OT0RFX0ZJRUxEKHN1YnBsYW5zKTsKQEAgLTQ0Myw3 ICs0NDYsNyBAQCBfb3V0QXBwZW5kKFN0cmluZ0luZm8gc3RyLCBjb25zdCBBcHBlbmQgKm5vZGUp CiAJV1JJVEVfTk9ERV9GSUVMRChhcHBlbmRwbGFucyk7CiAJV1JJVEVfSU5UX0ZJRUxEKG5hc3lu Y3BsYW5zKTsKIAlXUklURV9JTlRfRklFTEQoZmlyc3RfcGFydGlhbF9wbGFuKTsKLQlXUklURV9O T0RFX0ZJRUxEKHBhcnRfcHJ1bmVfaW5mbyk7CisJV1JJVEVfSU5UX0ZJRUxEKHBhcnRfcHJ1bmVf aW5kZXgpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNDYwLDcgKzQ2Myw3IEBAIF9vdXRNZXJnZUFw cGVuZChTdHJpbmdJbmZvIHN0ciwgY29uc3QgTWVyZ2VBcHBlbmQgKm5vZGUpCiAJV1JJVEVfT0lE X0FSUkFZKHNvcnRPcGVyYXRvcnMsIG5vZGUtPm51bUNvbHMpOwogCVdSSVRFX09JRF9BUlJBWShj b2xsYXRpb25zLCBub2RlLT5udW1Db2xzKTsKIAlXUklURV9CT09MX0FSUkFZKG51bGxzRmlyc3Qs IG5vZGUtPm51bUNvbHMpOwotCVdSSVRFX05PREVfRklFTEQocGFydF9wcnVuZV9pbmZvKTsKKwlX UklURV9JTlRfRklFTEQocGFydF9wcnVuZV9pbmRleCk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0x MDA2LDYgKzEwMDksOCBAQCBfb3V0UGFydGl0aW9uUHJ1bmVJbmZvKFN0cmluZ0luZm8gc3RyLCBj b25zdCBQYXJ0aXRpb25QcnVuZUluZm8gKm5vZGUpCiAJV1JJVEVfTk9ERV9UWVBFKCJQQVJUSVRJ T05QUlVORUlORk8iKTsKIAogCVdSSVRFX05PREVfRklFTEQocHJ1bmVfaW5mb3MpOworCVdSSVRF X0JPT0xfRklFTEQobmVlZHNfaW5pdF9wcnVuaW5nKTsKKwlXUklURV9CT09MX0ZJRUxEKG5lZWRz X2V4ZWNfcHJ1bmluZyk7CiAJV1JJVEVfQklUTUFQU0VUX0ZJRUxEKG90aGVyX3N1YnBsYW5zKTsK IH0KIApAQCAtMTAyMCw2ICsxMDI1LDcgQEAgX291dFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvKFN0 cmluZ0luZm8gc3RyLCBjb25zdCBQYXJ0aXRpb25lZFJlbFBydW5lSW5mbyAqbm9kZSkKIAlXUklU RV9JTlRfQVJSQVkoc3VicGxhbl9tYXAsIG5vZGUtPm5wYXJ0cyk7CiAJV1JJVEVfSU5UX0FSUkFZ KHN1YnBhcnRfbWFwLCBub2RlLT5ucGFydHMpOwogCVdSSVRFX09JRF9BUlJBWShyZWxpZF9tYXAs IG5vZGUtPm5wYXJ0cyk7CisJV1JJVEVfSU5ERVhfQVJSQVkocnRpX21hcCwgbm9kZS0+bnBhcnRz KTsKIAlXUklURV9OT0RFX0ZJRUxEKGluaXRpYWxfcHJ1bmluZ19zdGVwcyk7CiAJV1JJVEVfTk9E RV9GSUVMRChleGVjX3BydW5pbmdfc3RlcHMpOwogCVdSSVRFX0JJVE1BUFNFVF9GSUVMRChleGVj cGFyYW1pZHMpOwpAQCAtMjQyMCw2ICsyNDI2LDkgQEAgX291dFBsYW5uZXJHbG9iYWwoU3RyaW5n SW5mbyBzdHIsIGNvbnN0IFBsYW5uZXJHbG9iYWwgKm5vZGUpCiAJV1JJVEVfTk9ERV9GSUVMRChm aW5hbHJvd21hcmtzKTsKIAlXUklURV9OT0RFX0ZJRUxEKHJlc3VsdFJlbGF0aW9ucyk7CiAJV1JJ VEVfTk9ERV9GSUVMRChhcHBlbmRSZWxhdGlvbnMpOworCVdSSVRFX05PREVfRklFTEQocGFydFBy dW5lSW5mb3MpOworCVdSSVRFX0JPT0xfRklFTEQoY29udGFpbnNJbml0aWFsUHJ1bmluZyk7CisJ V1JJVEVfQklUTUFQU0VUX0ZJRUxEKG1pbkxvY2tSZWxpZHMpOwogCVdSSVRFX05PREVfRklFTEQo cmVsYXRpb25PaWRzKTsKIAlXUklURV9OT0RFX0ZJRUxEKGludmFsSXRlbXMpOwogCVdSSVRFX05P REVfRklFTEQocGFyYW1FeGVjVHlwZXMpOwpAQCAtMjQ4Nyw2ICsyNDk2LDcgQEAgX291dFBsYW5u ZXJJbmZvKFN0cmluZ0luZm8gc3RyLCBjb25zdCBQbGFubmVySW5mbyAqbm9kZSkKIAlXUklURV9C SVRNQVBTRVRfRklFTEQoY3VyT3V0ZXJSZWxzKTsKIAlXUklURV9OT0RFX0ZJRUxEKGN1ck91dGVy UGFyYW1zKTsKIAlXUklURV9CT09MX0ZJRUxEKHBhcnRDb2xzVXBkYXRlZCk7CisJV1JJVEVfTk9E RV9GSUVMRChwYXJ0UHJ1bmVJbmZvcyk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yODQwLDYgKzI4 NTAsMjEgQEAgX291dEV4dGVuc2libGVOb2RlKFN0cmluZ0luZm8gc3RyLCBjb25zdCBFeHRlbnNp YmxlTm9kZSAqbm9kZSkKIAltZXRob2RzLT5ub2RlT3V0KHN0ciwgbm9kZSk7CiB9CiAKKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgorICoKKyAqCVN0dWZmIGZyb20gZXhlY25vZGVzLmgKKyAqCisgKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkCitfb3V0UGFydGl0aW9uUHJ1bmVSZXN1 bHQoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFBhcnRpdGlvblBydW5lUmVzdWx0ICpub2RlKQorewor CVdSSVRFX05PREVfVFlQRSgiUEFSVElUSU9OUFJVTkVSRVNVTFQiKTsKKworCVdSSVRFX05PREVf RklFTEQodmFsaWRfc3VicGxhbl9vZmZzX2xpc3QpOworCVdSSVRFX0JJVE1BUFNFVF9GSUVMRChz Y2FuX2xlYWZwYXJ0X3J0aXMpOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKglT dHVmZiBmcm9tIHBhcnNlbm9kZXMuaC4KQEAgLTQ3NDgsNiArNDc3MywxMyBAQCBvdXROb2RlKFN0 cmluZ0luZm8gc3RyLCBjb25zdCB2b2lkICpvYmopCiAJCQkJX291dEpzb25UYWJsZVNpYmxpbmco c3RyLCBvYmopOwogCQkJCWJyZWFrOwogCisJCQkJLyoKKwkJCQkgKiBFWEVDVVRJT04gTk9ERVMK KwkJCQkgKi8KKwkJCWNhc2UgVF9QYXJ0aXRpb25QcnVuZVJlc3VsdDoKKwkJCQlfb3V0UGFydGl0 aW9uUHJ1bmVSZXN1bHQoc3RyLCBvYmopOworCQkJCWJyZWFrOworCiAJCQlkZWZhdWx0OgogCiAJ CQkJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jIGIvc3JjL2Jh Y2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKaW5kZXggNDhmNzIxNmM5ZS4uMjVlMWRmNzA2OCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQv bm9kZXMvcmVhZGZ1bmNzLmMKQEAgLTE2NCw2ICsxNjQsMTEgQEAKIAl0b2tlbiA9IHBnX3N0cnRv aygmbGVuZ3RoKTsJCS8qIHNraXAgOmZsZG5hbWUgKi8gXAogCWxvY2FsX25vZGUtPmZsZG5hbWUg PSByZWFkSW50Q29scyhsZW4pCiAKKy8qIFJlYWQgYW4gSW5kZXggYXJyYXkgKi8KKyNkZWZpbmUg UkVBRF9JTkRFWF9BUlJBWShmbGRuYW1lLCBsZW4pIFwKKwl0b2tlbiA9IHBnX3N0cnRvaygmbGVu Z3RoKTsJCS8qIHNraXAgOmZsZG5hbWUgKi8gXAorCWxvY2FsX25vZGUtPmZsZG5hbWUgPSByZWFk SW5kZXhDb2xzKGxlbikKKwogLyogUmVhZCBhIGJvb2wgYXJyYXkgKi8KICNkZWZpbmUgUkVBRF9C T09MX0FSUkFZKGZsZG5hbWUsIGxlbikgXAogCXRva2VuID0gcGdfc3RydG9rKCZsZW5ndGgpOwkJ Lyogc2tpcCA6ZmxkbmFtZSAqLyBcCkBAIC0xODE0LDcgKzE4MTksMTAgQEAgX3JlYWRQbGFubmVk U3RtdCh2b2lkKQogCVJFQURfQk9PTF9GSUVMRChwYXJhbGxlbE1vZGVOZWVkZWQpOwogCVJFQURf SU5UX0ZJRUxEKGppdEZsYWdzKTsKIAlSRUFEX05PREVfRklFTEQocGxhblRyZWUpOworCVJFQURf Tk9ERV9GSUVMRChwYXJ0UHJ1bmVJbmZvcyk7CisJUkVBRF9CT09MX0ZJRUxEKGNvbnRhaW5zSW5p dGlhbFBydW5pbmcpOwogCVJFQURfTk9ERV9GSUVMRChydGFibGUpOworCVJFQURfQklUTUFQU0VU X0ZJRUxEKG1pbkxvY2tSZWxpZHMpOwogCVJFQURfTk9ERV9GSUVMRChyZXN1bHRSZWxhdGlvbnMp OwogCVJFQURfTk9ERV9GSUVMRChhcHBlbmRSZWxhdGlvbnMpOwogCVJFQURfTk9ERV9GSUVMRChz dWJwbGFucyk7CkBAIC0xOTQ2LDcgKzE5NTQsNyBAQCBfcmVhZEFwcGVuZCh2b2lkKQogCVJFQURf Tk9ERV9GSUVMRChhcHBlbmRwbGFucyk7CiAJUkVBRF9JTlRfRklFTEQobmFzeW5jcGxhbnMpOwog CVJFQURfSU5UX0ZJRUxEKGZpcnN0X3BhcnRpYWxfcGxhbik7Ci0JUkVBRF9OT0RFX0ZJRUxEKHBh cnRfcHJ1bmVfaW5mbyk7CisJUkVBRF9JTlRfRklFTEQocGFydF9wcnVuZV9pbmRleCk7CiAKIAlS RUFEX0RPTkUoKTsKIH0KQEAgLTE5NjgsNyArMTk3Niw3IEBAIF9yZWFkTWVyZ2VBcHBlbmQodm9p ZCkKIAlSRUFEX09JRF9BUlJBWShzb3J0T3BlcmF0b3JzLCBsb2NhbF9ub2RlLT5udW1Db2xzKTsK IAlSRUFEX09JRF9BUlJBWShjb2xsYXRpb25zLCBsb2NhbF9ub2RlLT5udW1Db2xzKTsKIAlSRUFE X0JPT0xfQVJSQVkobnVsbHNGaXJzdCwgbG9jYWxfbm9kZS0+bnVtQ29scyk7Ci0JUkVBRF9OT0RF X0ZJRUxEKHBhcnRfcHJ1bmVfaW5mbyk7CisJUkVBRF9JTlRfRklFTEQocGFydF9wcnVuZV9pbmRl eCk7CiAKIAlSRUFEX0RPTkUoKTsKIH0KQEAgLTI3NjMsNiArMjc3MSw4IEBAIF9yZWFkUGFydGl0 aW9uUHJ1bmVJbmZvKHZvaWQpCiAJUkVBRF9MT0NBTFMoUGFydGl0aW9uUHJ1bmVJbmZvKTsKIAog CVJFQURfTk9ERV9GSUVMRChwcnVuZV9pbmZvcyk7CisJUkVBRF9CT09MX0ZJRUxEKG5lZWRzX2lu aXRfcHJ1bmluZyk7CisJUkVBRF9CT09MX0ZJRUxEKG5lZWRzX2V4ZWNfcHJ1bmluZyk7CiAJUkVB RF9CSVRNQVBTRVRfRklFTEQob3RoZXJfc3VicGxhbnMpOwogCiAJUkVBRF9ET05FKCk7CkBAIC0y Nzc5LDYgKzI3ODksNyBAQCBfcmVhZFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvKHZvaWQpCiAJUkVB RF9JTlRfQVJSQVkoc3VicGxhbl9tYXAsIGxvY2FsX25vZGUtPm5wYXJ0cyk7CiAJUkVBRF9JTlRf QVJSQVkoc3VicGFydF9tYXAsIGxvY2FsX25vZGUtPm5wYXJ0cyk7CiAJUkVBRF9PSURfQVJSQVko cmVsaWRfbWFwLCBsb2NhbF9ub2RlLT5ucGFydHMpOworCVJFQURfSU5ERVhfQVJSQVkocnRpX21h cCwgbG9jYWxfbm9kZS0+bnBhcnRzKTsKIAlSRUFEX05PREVfRklFTEQoaW5pdGlhbF9wcnVuaW5n X3N0ZXBzKTsKIAlSRUFEX05PREVfRklFTEQoZXhlY19wcnVuaW5nX3N0ZXBzKTsKIAlSRUFEX0JJ VE1BUFNFVF9GSUVMRChleGVjcGFyYW1pZHMpOwpAQCAtMjkzMiw2ICsyOTQzLDIxIEBAIF9yZWFk UGFydGl0aW9uUmFuZ2VEYXR1bSh2b2lkKQogCVJFQURfRE9ORSgpOwogfQogCisKKy8qCisgKiBf cmVhZFBhcnRpdGlvblBydW5lUmVzdWx0CisgKi8KK3N0YXRpYyBQYXJ0aXRpb25QcnVuZVJlc3Vs dCAqCitfcmVhZFBhcnRpdGlvblBydW5lUmVzdWx0KHZvaWQpCit7CisJUkVBRF9MT0NBTFMoUGFy dGl0aW9uUHJ1bmVSZXN1bHQpOworCisJUkVBRF9OT0RFX0ZJRUxEKHZhbGlkX3N1YnBsYW5fb2Zm c19saXN0KTsKKwlSRUFEX0JJVE1BUFNFVF9GSUVMRChzY2FuX2xlYWZwYXJ0X3J0aXMpOworCisJ UkVBRF9ET05FKCk7Cit9CisKIC8qCiAgKiBwYXJzZU5vZGVTdHJpbmcKICAqCkBAIC0zMjI5LDYg KzMyNTUsOCBAQCBwYXJzZU5vZGVTdHJpbmcodm9pZCkKIAkJcmV0dXJuX3ZhbHVlID0gX3JlYWRK c29uVGFibGVQYXJlbnQoKTsKIAllbHNlIGlmIChNQVRDSCgiSlNPTlRBQlNOT0RFIiwgMTIpKQog CQlyZXR1cm5fdmFsdWUgPSBfcmVhZEpzb25UYWJsZVNpYmxpbmcoKTsKKwllbHNlIGlmIChNQVRD SCgiUEFSVElUSU9OUFJVTkVSRVNVTFQiLCAyMCkpCisJCXJldHVybl92YWx1ZSA9IF9yZWFkUGFy dGl0aW9uUHJ1bmVSZXN1bHQoKTsKIAllbHNlCiAJewogCQllbG9nKEVSUk9SLCAiYmFkbHkgZm9y bWF0dGVkIG5vZGUgc3RyaW5nIFwiJS4zMnNcIi4uLiIsIHRva2VuKTsKQEAgLTMzNzIsNiArMzQw MCwzMCBAQCByZWFkSW50Q29scyhpbnQgbnVtQ29scykKIAlyZXR1cm4gaW50X3ZhbHM7CiB9CiAK Ky8qCisgKiByZWFkSW5kZXhDb2xzCisgKi8KK0luZGV4ICoKK3JlYWRJbmRleENvbHMoaW50IG51 bUNvbHMpCit7CisJaW50CQkJdG9rZW5MZW5ndGgsCisJCQkJaTsKKwljb25zdCBjaGFyICp0b2tl bjsKKwlJbmRleAkgICAqaW5kZXhfdmFsczsKKworCWlmIChudW1Db2xzIDw9IDApCisJCXJldHVy biBOVUxMOworCisJaW5kZXhfdmFscyA9IChJbmRleCAqKSBwYWxsb2MobnVtQ29scyAqIHNpemVv ZihJbmRleCkpOworCWZvciAoaSA9IDA7IGkgPCBudW1Db2xzOyBpKyspCisJeworCQl0b2tlbiA9 IHBnX3N0cnRvaygmdG9rZW5MZW5ndGgpOworCQlpbmRleF92YWxzW2ldID0gYXRvdWkodG9rZW4p OworCX0KKworCXJldHVybiBpbmRleF92YWxzOworfQorCiAvKgogICogcmVhZEJvb2xDb2xzCiAg Ki8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwppbmRleCA1MTU5MWJiODEy Li5lN2Y5NzdmYjk2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVh dGVwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCkBA IC0xMTgzLDcgKzExODMsNyBAQCBjcmVhdGVfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3Qs IEFwcGVuZFBhdGggKmJlc3RfcGF0aCwgaW50IGZsYWdzKQogCUxpc3RDZWxsICAgKnN1YnBhdGhz OwogCWludAkJCW5hc3luY3BsYW5zID0gMDsKIAlSZWxPcHRJbmZvICpyZWwgPSBiZXN0X3BhdGgt PnBhdGgucGFyZW50OwotCVBhcnRpdGlvblBydW5lSW5mbyAqcGFydHBydW5laW5mbyA9IE5VTEw7 CisJaW50CQkJcGFydF9wcnVuZV9pbmRleCA9IC0xOwogCWludAkJCW5vZGVudW1zb3J0a2V5cyA9 IDA7CiAJQXR0ck51bWJlciAqbm9kZVNvcnRDb2xJZHggPSBOVUxMOwogCU9pZAkJICAgKm5vZGVT b3J0T3BlcmF0b3JzID0gTlVMTDsKQEAgLTEzNTcsMTYgKzEzNTcsMTcgQEAgY3JlYXRlX2FwcGVu ZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFn cykKIAkJfQogCiAJCWlmIChwcnVuZXF1YWwgIT0gTklMKQotCQkJcGFydHBydW5laW5mbyA9Ci0J CQkJbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKHJvb3QsIHJlbCwKLQkJCQkJCQkJCQkgYmVzdF9w YXRoLT5zdWJwYXRocywKLQkJCQkJCQkJCQkgcHJ1bmVxdWFsKTsKKwkJCXBhcnRfcHJ1bmVfaW5k ZXg9IG1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhyb290LCByZWwsCisJCQkJCQkJCQkJCQkJICAg YmVzdF9wYXRoLT5zdWJwYXRocywKKwkJCQkJCQkJCQkJCQkgICBwcnVuZXF1YWwpOwogCX0KIAog CXBsYW4tPmFwcGVuZHBsYW5zID0gc3VicGxhbnM7CiAJcGxhbi0+bmFzeW5jcGxhbnMgPSBuYXN5 bmNwbGFuczsKIAlwbGFuLT5maXJzdF9wYXJ0aWFsX3BsYW4gPSBiZXN0X3BhdGgtPmZpcnN0X3Bh cnRpYWxfcGF0aDsKLQlwbGFuLT5wYXJ0X3BydW5lX2luZm8gPSBwYXJ0cHJ1bmVpbmZvOworCisJ LyogV2lsbCBiZSB1cGRhdGVkIGxhdGVyIGluIHNldF9wbGFuX3JlZmVyZW5jZXMoKS4gKi8KKwlw bGFuLT5wYXJ0X3BydW5lX2luZGV4ID0gcGFydF9wcnVuZV9pbmRleDsKIAogCWNvcHlfZ2VuZXJp Y19wYXRoX2luZm8oJnBsYW4tPnBsYW4sIChQYXRoICopIGJlc3RfcGF0aCk7CiAKQEAgLTE0MDYs NyArMTQwNyw3IEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwg TWVyZ2VBcHBlbmRQYXRoICpiZXN0X3BhdGgsCiAJTGlzdAkgICAqc3VicGxhbnMgPSBOSUw7CiAJ TGlzdENlbGwgICAqc3VicGF0aHM7CiAJUmVsT3B0SW5mbyAqcmVsID0gYmVzdF9wYXRoLT5wYXRo LnBhcmVudDsKLQlQYXJ0aXRpb25QcnVuZUluZm8gKnBhcnRwcnVuZWluZm8gPSBOVUxMOworCWlu dAkJCXBhcnRfcHJ1bmVfaW5kZXggPSAtMTsKIAogCS8qCiAJICogV2UgZG9uJ3QgaGF2ZSB0aGUg YWN0dWFsIGNyZWF0aW9uIG9mIHRoZSBNZXJnZUFwcGVuZCBub2RlIHNwbGl0IG91dApAQCAtMTUy MiwxMyArMTUyMywxNSBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJv b3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCQl9CiAKIAkJaWYgKHBydW5lcXVhbCAh PSBOSUwpCi0JCQlwYXJ0cHJ1bmVpbmZvID0gbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKHJvb3Qs IHJlbCwKLQkJCQkJCQkJCQkJCQkgYmVzdF9wYXRoLT5zdWJwYXRocywKLQkJCQkJCQkJCQkJCQkg cHJ1bmVxdWFsKTsKKwkJCXBhcnRfcHJ1bmVfaW5kZXg9IG1ha2VfcGFydGl0aW9uX3BydW5laW5m byhyb290LCByZWwsCisJCQkJCQkJCQkJCQkJICAgYmVzdF9wYXRoLT5zdWJwYXRocywKKwkJCQkJ CQkJCQkJCQkgICBwcnVuZXF1YWwpOwogCX0KIAogCW5vZGUtPm1lcmdlcGxhbnMgPSBzdWJwbGFu czsKLQlub2RlLT5wYXJ0X3BydW5lX2luZm8gPSBwYXJ0cHJ1bmVpbmZvOworCisJLyogV2lsbCBi ZSB1cGRhdGVkIGxhdGVyIGluIHNldF9wbGFuX3JlZmVyZW5jZXMoKS4gKi8KKwlub2RlLT5wYXJ0 X3BydW5lX2luZGV4ID0gcGFydF9wcnVuZV9pbmRleDsKIAogCS8qCiAJICogSWYgcHJlcGFyZV9z b3J0X2Zyb21fcGF0aGtleXMgYWRkZWQgc29ydCBjb2x1bW5zLCBidXQgd2Ugd2VyZSB0b2xkIHRv CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXggYjI1NjljNWQwYy4uMmFhMDUx ZDg2MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisr KyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNTE4LDcgKzUxOCwx MCBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hhciAqcXVlcnlfc3Ry aW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKIAlyZXN1bHQtPmRlcGVuZHNPblJvbGUgPSBnbG9iLT5k ZXBlbmRzT25Sb2xlOwogCXJlc3VsdC0+cGFyYWxsZWxNb2RlTmVlZGVkID0gZ2xvYi0+cGFyYWxs ZWxNb2RlTmVlZGVkOwogCXJlc3VsdC0+cGxhblRyZWUgPSB0b3BfcGxhbjsKKwlyZXN1bHQtPnBh cnRQcnVuZUluZm9zID0gZ2xvYi0+cGFydFBydW5lSW5mb3M7CisJcmVzdWx0LT5jb250YWluc0lu aXRpYWxQcnVuaW5nID0gZ2xvYi0+Y29udGFpbnNJbml0aWFsUHJ1bmluZzsKIAlyZXN1bHQtPnJ0 YWJsZSA9IGdsb2ItPmZpbmFscnRhYmxlOworCXJlc3VsdC0+bWluTG9ja1JlbGlkcyA9IGdsb2It Pm1pbkxvY2tSZWxpZHM7CiAJcmVzdWx0LT5yZXN1bHRSZWxhdGlvbnMgPSBnbG9iLT5yZXN1bHRS ZWxhdGlvbnM7CiAJcmVzdWx0LT5hcHBlbmRSZWxhdGlvbnMgPSBnbG9iLT5hcHBlbmRSZWxhdGlv bnM7CiAJcmVzdWx0LT5zdWJwbGFucyA9IGdsb2ItPnN1YnBsYW5zOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jCmluZGV4IDc1MTk3MjMwODEuLmZjNjY5ODZlMWMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTI1MSw3ICsyNTEsNyBAQCBzZXRfcGxhbl9yZWZl cmVuY2VzKFBsYW5uZXJJbmZvICpyb290LCBQbGFuICpwbGFuKQogCVBsYW4JICAgKnJlc3VsdDsK IAlQbGFubmVyR2xvYmFsICpnbG9iID0gcm9vdC0+Z2xvYjsKIAlpbnQJCQlydG9mZnNldCA9IGxp c3RfbGVuZ3RoKGdsb2ItPmZpbmFscnRhYmxlKTsKLQlMaXN0Q2VsbCAgICpsYzsKKwlMaXN0Q2Vs bCAqbGM7CiAKIAkvKgogCSAqIEFkZCBhbGwgdGhlIHF1ZXJ5J3MgUlRFcyB0byB0aGUgZmxhdHRl bmVkIHJhbmdldGFibGUuICBUaGUgbGl2ZSBvbmVzCkBAIC0yNjAsNiArMjYwLDE2IEBAIHNldF9w bGFuX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4pCiAJICovCiAJYWRk X3J0ZXNfdG9fZmxhdF9ydGFibGUocm9vdCwgZmFsc2UpOwogCisJLyoKKwkgKiBBZGQgdGhlIHF1 ZXJ5J3MgYWRqdXN0ZWQgcmFuZ2Ugb2YgUlQgaW5kZXhlcyB0byBnbG9iLT5taW5Mb2NrUmVsaWRz LgorCSAqIFRoZSBhZGp1c3RlZCBSVCBpbmRleGVzIG9mIHBydW5hYmxlIHJlbGF0aW9ucyB3aWxs IGJlIGRlbGV0ZWQgZnJvbSB0aGUKKwkgKiBzZXQgYmVsb3cgd2hlcmUgUGFydGl0aW9uUHJ1bmVJ bmZvcyBhcmUgcHJvY2Vzc2VkLgorCSAqLworCWdsb2ItPm1pbkxvY2tSZWxpZHMgPQorCQlibXNf YWRkX3JhbmdlKGdsb2ItPm1pbkxvY2tSZWxpZHMsCisJCQkJCSAgcnRvZmZzZXQgKyAxLAorCQkJ CQkgIHJ0b2Zmc2V0ICsgbGlzdF9sZW5ndGgocm9vdC0+cGFyc2UtPnJ0YWJsZSkpOworCiAJLyoK IAkgKiBBZGp1c3QgUlQgaW5kZXhlcyBvZiBQbGFuUm93TWFya3MgYW5kIGFkZCB0byBmaW5hbCBy b3dtYXJrcyBsaXN0CiAJICovCkBAIC0zMzgsNiArMzQ4LDU2IEBAIHNldF9wbGFuX3JlZmVyZW5j ZXMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4pCiAJCX0KIAl9CiAKKwkvKiBBbHNvIGZp eCB1cCB0aGUgaW5mb3JtYXRpb24gaW4gUGFydGl0aW9uUHJ1bmVJbmZvcy4gKi8KKwlmb3JlYWNo IChsYywgcm9vdC0+cGFydFBydW5lSW5mb3MpCisJeworCQlQYXJ0aXRpb25QcnVuZUluZm8gKnBy dW5laW5mbyA9IGxmaXJzdChsYyk7CisJCUJpdG1hcHNldCAqbGVhZnBhcnRfcnRpcyA9IE5VTEw7 CisJCUxpc3RDZWxsICAqbDsKKworCQlmb3JlYWNoKGwsIHBydW5laW5mby0+cHJ1bmVfaW5mb3Mp CisJCXsKKwkJCUxpc3QJICAgKnBydW5lX2luZm9zID0gbGZpcnN0KGwpOworCQkJTGlzdENlbGwg ICAqbDI7CisKKwkJCWZvcmVhY2gobDIsIHBydW5lX2luZm9zKQorCQkJeworCQkJCVBhcnRpdGlv bmVkUmVsUHJ1bmVJbmZvICpwaW5mbyA9IGxmaXJzdChsMik7CisJCQkJaW50CQlpOworCisJCQkJ LyogUlQgaW5kZXggb2YgdGhlIHBhcnRpdGlvbmUgdGFibGUuICovCisJCQkJcGluZm8tPnJ0aW5k ZXggKz0gcnRvZmZzZXQ7CisKKwkJCQkvKiBBbmQgYWxzbyB0aG9zZSBvZiB0aGUgbGVhZiBwYXJ0 aXRpb25zLiAqLworCQkJCWZvciAoaSA9IDA7IGkgPCBwaW5mby0+bnBhcnRzOyBpKyspCisJCQkJ eworCQkJCQlpZiAocGluZm8tPnJ0aV9tYXBbaV0gPiAwKQorCQkJCQl7CisJCQkJCQlwaW5mby0+ cnRpX21hcFtpXSArPSBydG9mZnNldDsKKwkJCQkJCWxlYWZwYXJ0X3J0aXMgPSBibXNfYWRkX21l bWJlcihsZWFmcGFydF9ydGlzLAorCQkJCQkJCQkJCQkJCSAgIHBpbmZvLT5ydGlfbWFwW2ldKTsK KwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmIChwcnVuZWluZm8tPm5lZWRzX2luaXRf cHJ1bmluZykKKwkJeworCQkJZ2xvYi0+Y29udGFpbnNJbml0aWFsUHJ1bmluZyA9IHRydWU7CisK KwkJCS8qCisJCQkgKiBEZWxldGUgdGhlIGxlYWYgcGFydGl0aW9uIFJUSXMgZnJvbSB0aGUgZ2xv YmFsIHNldCBvZiByZWxhdGlvbnMKKwkJCSAqIHRvIGJlIGxvY2tlZCBiZWZvcmUgZXhlY3V0aW5n IHRoZSBwbGFuLiAgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKQorCQkJICogd2lsbCBmaW5kIHRoZSBv bmVzIHRvIGFkZCB0byB0aGUgc2V0IGFmdGVyIHBlcmZvcm1pbmcgaW5pdGlhbAorCQkJICogcHJ1 bmluZy4KKwkJCSAqLworCQkJZ2xvYi0+bWluTG9ja1JlbGlkcyA9IGJtc19kZWxfbWVtYmVycyhn bG9iLT5taW5Mb2NrUmVsaWRzLAorCQkJCQkJCQkJCQkJICBsZWFmcGFydF9ydGlzKTsKKwkJfQor CisJCWdsb2ItPnBhcnRQcnVuZUluZm9zID0gbGFwcGVuZChnbG9iLT5wYXJ0UHJ1bmVJbmZvcywg cHJ1bmVpbmZvKTsKKwl9CisKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNjEwLDIxICsxNjcw LDEyIEBAIHNldF9hcHBlbmRfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwKIAogCWFwbGFu LT5hcHByZWxpZHMgPSBvZmZzZXRfcmVsaWRfc2V0KGFwbGFuLT5hcHByZWxpZHMsIHJ0b2Zmc2V0 KTsKIAotCWlmIChhcGxhbi0+cGFydF9wcnVuZV9pbmZvKQotCXsKLQkJZm9yZWFjaChsLCBhcGxh bi0+cGFydF9wcnVuZV9pbmZvLT5wcnVuZV9pbmZvcykKLQkJewotCQkJTGlzdAkgICAqcHJ1bmVf aW5mb3MgPSBsZmlyc3QobCk7Ci0JCQlMaXN0Q2VsbCAgICpsMjsKLQotCQkJZm9yZWFjaChsMiwg cHJ1bmVfaW5mb3MpCi0JCQl7Ci0JCQkJUGFydGl0aW9uZWRSZWxQcnVuZUluZm8gKnBpbmZvID0g bGZpcnN0KGwyKTsKLQotCQkJCXBpbmZvLT5ydGluZGV4ICs9IHJ0b2Zmc2V0OwotCQkJfQotCQl9 Ci0JfQorCS8qCisJICogUGFydGl0aW9uUHJ1bmVJbmZvcyB3aWxsIGJlIGFkZGVkIHRvIGEgbGlz dCBpbiBQbGFubmVyR2xvYmFsLCBzbyB1cGRhdGUKKwkgKiB0aGUgaW5kZXguCisJICovCisJaWYg KGFwbGFuLT5wYXJ0X3BydW5lX2luZGV4ID49IDApCisJCWFwbGFuLT5wYXJ0X3BydW5lX2luZGV4 ICs9IGxpc3RfbGVuZ3RoKHJvb3QtPmdsb2ItPnBhcnRQcnVuZUluZm9zKTsKIAogCS8qIFdlIGRv bid0IG5lZWQgdG8gcmVjdXJzZSB0byBsZWZ0dHJlZSBvciByaWdodHRyZWUgLi4uICovCiAJQXNz ZXJ0KGFwbGFuLT5wbGFuLmxlZnR0cmVlID09IE5VTEwpOwpAQCAtMTY4MiwyMSArMTczMywxMiBA QCBzZXRfbWVyZ2VhcHBlbmRfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwKIAogCW1wbGFu LT5hcHByZWxpZHMgPSBvZmZzZXRfcmVsaWRfc2V0KG1wbGFuLT5hcHByZWxpZHMsIHJ0b2Zmc2V0 KTsKIAotCWlmIChtcGxhbi0+cGFydF9wcnVuZV9pbmZvKQotCXsKLQkJZm9yZWFjaChsLCBtcGxh bi0+cGFydF9wcnVuZV9pbmZvLT5wcnVuZV9pbmZvcykKLQkJewotCQkJTGlzdAkgICAqcHJ1bmVf aW5mb3MgPSBsZmlyc3QobCk7Ci0JCQlMaXN0Q2VsbCAgICpsMjsKLQotCQkJZm9yZWFjaChsMiwg cHJ1bmVfaW5mb3MpCi0JCQl7Ci0JCQkJUGFydGl0aW9uZWRSZWxQcnVuZUluZm8gKnBpbmZvID0g bGZpcnN0KGwyKTsKLQotCQkJCXBpbmZvLT5ydGluZGV4ICs9IHJ0b2Zmc2V0OwotCQkJfQotCQl9 Ci0JfQorCS8qCisJICogUGFydGl0aW9uUHJ1bmVJbmZvcyB3aWxsIGJlIGFkZGVkIHRvIGEgbGlz dCBpbiBQbGFubmVyR2xvYmFsLCBzbyB1cGRhdGUKKwkgKiB0aGUgaW5kZXguCisJICovCisJaWYg KG1wbGFuLT5wYXJ0X3BydW5lX2luZGV4ID49IDApCisJCW1wbGFuLT5wYXJ0X3BydW5lX2luZGV4 ICs9IGxpc3RfbGVuZ3RoKHJvb3QtPmdsb2ItPnBhcnRQcnVuZUluZm9zKTsKIAogCS8qIFdlIGRv bid0IG5lZWQgdG8gcmVjdXJzZSB0byBsZWZ0dHJlZSBvciByaWdodHRyZWUgLi4uICovCiAJQXNz ZXJ0KG1wbGFuLT5wbGFuLmxlZnR0cmVlID09IE5VTEwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jIGIvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3Bh cnRwcnVuZS5jCmluZGV4IDlkM2MwNWFlZDMuLjVhNWY1ZGVlNDYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYworKysgYi9zcmMvYmFja2VuZC9wYXJ0aXRp b25pbmcvcGFydHBydW5lLmMKQEAgLTE0NCw3ICsxNDQsOSBAQCBzdGF0aWMgTGlzdCAqbWFrZV9w YXJ0aXRpb25lZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJICAg TGlzdCAqcHJ1bmVxdWFsLAogCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqcGFydHJlbGlkcywKIAkJ CQkJCQkJCQkgICBpbnQgKnJlbGlkX3N1YnBsYW5fbWFwLAotCQkJCQkJCQkJCSAgIEJpdG1hcHNl dCAqKm1hdGNoZWRzdWJwbGFucyk7CisJCQkJCQkJCQkJICAgQml0bWFwc2V0ICoqbWF0Y2hlZHN1 YnBsYW5zLAorCQkJCQkJCQkJCSAgIGJvb2wgKm5lZWRzX2luaXRfcHJ1bmluZywKKwkJCQkJCQkJ CQkgICBib29sICpuZWVkc19leGVjX3BydW5pbmcpOwogc3RhdGljIHZvaWQgZ2VuX3BhcnRwcnVu ZV9zdGVwcyhSZWxPcHRJbmZvICpyZWwsIExpc3QgKmNsYXVzZXMsCiAJCQkJCQkJCVBhcnRDbGF1 c2VUYXJnZXQgdGFyZ2V0LAogCQkJCQkJCQlHZW5lcmF0ZVBydW5pbmdTdGVwc0NvbnRleHQgKmNv bnRleHQpOwpAQCAtMjA5LDE2ICsyMTEsMjAgQEAgc3RhdGljIHZvaWQgcGFydGtleV9kYXR1bV9m cm9tX2V4cHIoUGFydGl0aW9uUHJ1bmVDb250ZXh0ICpjb250ZXh0LAogCiAvKgogICogbWFrZV9w YXJ0aXRpb25fcHJ1bmVpbmZvCi0gKgkJQnVpbGRzIGEgUGFydGl0aW9uUHJ1bmVJbmZvIHdoaWNo IGNhbiBiZSB1c2VkIGluIHRoZSBleGVjdXRvciB0byBhbGxvdwotICoJCWFkZGl0aW9uYWwgcGFy dGl0aW9uIHBydW5pbmcgdG8gdGFrZSBwbGFjZS4gIFJldHVybnMgTlVMTCB3aGVuCi0gKgkJcGFy dGl0aW9uIHBydW5pbmcgd291bGQgYmUgdXNlbGVzcy4KKyAqCQlDaGVja3MgaWYgdGhlIGdpdmVu IHNldCBvZiBxdWFscyBjYW4gYmUgdXNlZCB0byBidWlsZCBwcnVuaW5nIHN0ZXBzCisgKgkJdGhh dCB0aGUgZXhlY3V0b3Igd2lsbCB1c2UgdG8gcHJ1bmUgdXNlbGVzcyBvbmVzIGZyb20gZ2l2ZW4g c2V0IG9mCisgKgkJY2hpbGQgcGF0aHMsIGFuZCBpZiBzbyBidWlsZHMgYSBQYXJ0aXRpb25QcnVu ZUluZm8gdGhhdCB3aWxsIGFsbG93IHRoZQorICoJCWV4ZWN1dG9yIHRvIGRvIGRvIGFuZCBhcHBl bmQgaXQgdG8gcm9vdC0+cGFydFBydW5lSW5mb3MuCisgKgorICogUmV0dXJuIHZhbHVlIGlzIDAt YmFzZWQgaW5kZXggb2YgdGhlIGFkZGVkIFBhcnRpdGlvblBydW5lSW5mbyBvciAtMSBpZiBvbmUK KyAqIHdhcyBub3QgYnVpbHQgYWZ0ZXIgYWxsLgogICoKICAqICdwYXJlbnRyZWwnIGlzIHRoZSBS ZWxPcHRJbmZvIGZvciBhbiBhcHBlbmRyZWwsIGFuZCAnc3VicGF0aHMnIGlzIHRoZSBsaXN0CiAg KiBvZiBzY2FuIHBhdGhzIGZvciBpdHMgY2hpbGQgcmVscy4KICAqICdwcnVuZXF1YWwnIGlzIGEg bGlzdCBvZiBwb3RlbnRpYWwgcHJ1bmluZyBxdWFscyAoaS5lLiwgcmVzdHJpY3Rpb24KICAqIGNs YXVzZXMgdGhhdCBhcmUgYXBwbGljYWJsZSB0byB0aGUgYXBwZW5kcmVsKS4KICAqLwotUGFydGl0 aW9uUHJ1bmVJbmZvICoKK2ludAogbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCQkJCQkgTGlzdCAqc3VicGF0aHMsCiAJ CQkJCQkgTGlzdCAqcHJ1bmVxdWFsKQpAQCAtMjMwLDYgKzIzNiw4IEBAIG1ha2VfcGFydGl0aW9u X3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCWlu dAkJICAgKnJlbGlkX3N1YnBsYW5fbWFwOwogCUxpc3RDZWxsICAgKmxjOwogCWludAkJCWk7CisJ Ym9vbAkJbmVlZHNfaW5pdF9wcnVuaW5nID0gZmFsc2U7CisJYm9vbAkJbmVlZHNfZXhlY19wcnVu aW5nID0gZmFsc2U7CiAKIAkvKgogCSAqIFNjYW4gdGhlIHN1YnBhdGhzIHRvIHNlZSB3aGljaCBv bmVzIGFyZSBzY2FucyBvZiBwYXJ0aXRpb24gY2hpbGQKQEAgLTMwOSwxMiArMzE3LDE2IEBAIG1h a2VfcGFydGl0aW9uX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFy ZW50cmVsLAogCQlCaXRtYXBzZXQgICpwYXJ0cmVsaWRzID0gKEJpdG1hcHNldCAqKSBsZmlyc3Qo bGMpOwogCQlMaXN0CSAgICpwaW5mb2xpc3Q7CiAJCUJpdG1hcHNldCAgKm1hdGNoZWRzdWJwbGFu cyA9IE5VTEw7CisJCWJvb2wJCXBhcnRyZWxfbmVlZHNfaW5pdF9wcnVuaW5nOworCQlib29sCQlw YXJ0cmVsX25lZWRzX2V4ZWNfcHJ1bmluZzsKIAogCQlwaW5mb2xpc3QgPSBtYWtlX3BhcnRpdGlv bmVkcmVsX3BydW5laW5mbyhyb290LCBwYXJlbnRyZWwsCiAJCQkJCQkJCQkJCQkgIHBydW5lcXVh bCwKIAkJCQkJCQkJCQkJCSAgcGFydHJlbGlkcywKIAkJCQkJCQkJCQkJCSAgcmVsaWRfc3VicGxh bl9tYXAsCi0JCQkJCQkJCQkJCQkgICZtYXRjaGVkc3VicGxhbnMpOworCQkJCQkJCQkJCQkJICAm bWF0Y2hlZHN1YnBsYW5zLAorCQkJCQkJCQkJCQkJICAmcGFydHJlbF9uZWVkc19pbml0X3BydW5p bmcsCisJCQkJCQkJCQkJCQkgICZwYXJ0cmVsX25lZWRzX2V4ZWNfcHJ1bmluZyk7CiAKIAkJLyog V2hlbiBwcnVuaW5nIGlzIHBvc3NpYmxlLCByZWNvcmQgdGhlIG1hdGNoZWQgc3VicGxhbnMgKi8K IAkJaWYgKHBpbmZvbGlzdCAhPSBOSUwpCkBAIC0zMjMsNiArMzM1LDEwIEBAIG1ha2VfcGFydGl0 aW9uX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAog CQkJYWxsbWF0Y2hlZHN1YnBsYW5zID0gYm1zX2pvaW4obWF0Y2hlZHN1YnBsYW5zLAogCQkJCQkJ CQkJCSAgYWxsbWF0Y2hlZHN1YnBsYW5zKTsKIAkJfQorCQlpZiAoIW5lZWRzX2luaXRfcHJ1bmlu ZykKKwkJCW5lZWRzX2luaXRfcHJ1bmluZyA9IHBhcnRyZWxfbmVlZHNfaW5pdF9wcnVuaW5nOwor CQlpZiAoIW5lZWRzX2V4ZWNfcHJ1bmluZykKKwkJCW5lZWRzX2V4ZWNfcHJ1bmluZyA9IHBhcnRy ZWxfbmVlZHNfZXhlY19wcnVuaW5nOwogCX0KIAogCXBmcmVlKHJlbGlkX3N1YnBsYW5fbWFwKTsK QEAgLTMzMiwxMSArMzQ4LDEzIEBAIG1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCSAqIHF1YWxzLCB0aGVuIHdlIGNhbiBq dXN0IG5vdCBib3RoZXIgd2l0aCBydW4tdGltZSBwcnVuaW5nLgogCSAqLwogCWlmIChwcnVuZXJl bGluZm9zID09IE5JTCkKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiAtMTsKIAogCS8qIEVsc2Ug YnVpbGQgdGhlIHJlc3VsdCBkYXRhIHN0cnVjdHVyZSAqLwogCXBydW5laW5mbyA9IG1ha2VOb2Rl KFBhcnRpdGlvblBydW5lSW5mbyk7CiAJcHJ1bmVpbmZvLT5wcnVuZV9pbmZvcyA9IHBydW5lcmVs aW5mb3M7CisJcHJ1bmVpbmZvLT5uZWVkc19pbml0X3BydW5pbmcgPSBuZWVkc19pbml0X3BydW5p bmc7CisJcHJ1bmVpbmZvLT5uZWVkc19leGVjX3BydW5pbmcgPSBuZWVkc19leGVjX3BydW5pbmc7 CiAKIAkvKgogCSAqIFNvbWUgc3VicGxhbnMgbWF5IG5vdCBiZWxvbmcgdG8gYW55IG9mIHRoZSBp ZGVudGlmaWVkIHBhcnRpdGlvbmVkIHJlbHMuCkBAIC0zNTgsNyArMzc2LDkgQEAgbWFrZV9wYXJ0 aXRpb25fcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWws CiAJZWxzZQogCQlwcnVuZWluZm8tPm90aGVyX3N1YnBsYW5zID0gTlVMTDsKIAotCXJldHVybiBw cnVuZWluZm87CisJcm9vdC0+cGFydFBydW5lSW5mb3MgPSBsYXBwZW5kKHJvb3QtPnBhcnRQcnVu ZUluZm9zLCBwcnVuZWluZm8pOworCisJcmV0dXJuIGxpc3RfbGVuZ3RoKHJvb3QtPnBhcnRQcnVu ZUluZm9zKSAtIDE7CiB9CiAKIC8qCkBAIC00MzUsMTMgKzQ1NSwxOCBAQCBhZGRfcGFydF9yZWxp ZHMoTGlzdCAqYWxscGFydHJlbGlkcywgQml0bWFwc2V0ICpwYXJ0cmVsaWRzKQogICogSWYgd2Ug Y2Fubm90IGZpbmQgYW55IHVzZWZ1bCBydW4tdGltZSBwcnVuaW5nIHN0ZXBzLCByZXR1cm4gTklM LgogICogSG93ZXZlciwgb24gc3VjY2VzcywgZWFjaCByZWwgaWRlbnRpZmllZCBpbiBwYXJ0cmVs aWRzIHdpbGwgaGF2ZQogICogYW4gZWxlbWVudCBpbiB0aGUgcmVzdWx0IGxpc3QsIGV2ZW4gaWYg c29tZSBvZiB0aGVtIGFyZSB1c2VsZXNzLgorICogKm5lZWRzX2luaXRfcHJ1bmluZyBhbmQgKm5l ZWRzX2V4ZWNfcHJ1bmluZyBhcmUgc2V0IHRvIGluZGljYXRlIHRoYXQgdGhlCisgKiByZXR1cm5l ZCBQYXJ0aXRpb25lZFJlbFBydW5lSW5mb3MgY29udGFpbnMgcHJ1bmluZyBzdGVwcyB0aGF0IGNh biBiZQorICogcGVyZm9ybWVkIGJlZm9yZSBhbmQgYWZ0ZXIgZXhlY3V0aW9uIGJlZ2lucywgcmVz cGVjdGl2ZWx5LgogICovCiBzdGF0aWMgTGlzdCAqCiBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5l aW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQkJCQkJCSAg TGlzdCAqcHJ1bmVxdWFsLAogCQkJCQkJCSAgQml0bWFwc2V0ICpwYXJ0cmVsaWRzLAogCQkJCQkJ CSAgaW50ICpyZWxpZF9zdWJwbGFuX21hcCwKLQkJCQkJCQkgIEJpdG1hcHNldCAqKm1hdGNoZWRz dWJwbGFucykKKwkJCQkJCQkgIEJpdG1hcHNldCAqKm1hdGNoZWRzdWJwbGFucywKKwkJCQkJCQkg IGJvb2wgKm5lZWRzX2luaXRfcHJ1bmluZywKKwkJCQkJCQkgIGJvb2wgKm5lZWRzX2V4ZWNfcHJ1 bmluZykKIHsKIAlSZWxPcHRJbmZvICp0YXJnZXRwYXJ0ID0gTlVMTDsKIAlMaXN0CSAgICpwaW5m b2xpc3QgPSBOSUw7CkBAIC00NTIsNiArNDc3LDEwIEBAIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1 bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJaW50CQkJ cnRpOwogCWludAkJCWk7CiAKKwkvKiBXaWxsIGZpbmQgb3V0IGJlbG93LiAqLworCSpuZWVkc19p bml0X3BydW5pbmcgPSBmYWxzZTsKKwkqbmVlZHNfZXhlY19wcnVuaW5nID0gZmFsc2U7CisKIAkv KgogCSAqIEV4YW1pbmUgZWFjaCBwYXJ0aXRpb25lZCByZWwsIGNvbnN0cnVjdGluZyBhIHRlbXBv cmFyeSBhcnJheSB0byBtYXAKIAkgKiBmcm9tIHBsYW5uZXIgcmVsaWRzIHRvIGluZGV4IG9mIHRo ZSBwYXJ0aXRpb25lZCByZWwsIGFuZCBidWlsZGluZyBhCkBAIC01MzksNiArNTY4LDkgQEAgbWFr ZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KnBhcmVudHJlbCwKIAkJICogZXhlY3V0b3IgcGVyLXNjYW4gcHJ1bmluZyBzdGVwcy4gIFRoaXMg Zmlyc3QgcGFzcyBjcmVhdGVzIHN0YXJ0dXAKIAkJICogcHJ1bmluZyBzdGVwcyBhbmQgZGV0ZWN0 cyB3aGV0aGVyIHRoZXJlJ3MgYW55IHBvc3NpYmx5LXVzZWZ1bCBxdWFscwogCQkgKiB0aGF0IHdv dWxkIHJlcXVpcmUgcGVyLXNjYW4gcHJ1bmluZy4KKwkJICoKKwkJICogSW4gdGhlIGZpcnN0IHBh c3MsIHdlIG5vdGUgd2hldGhlciB0aGUgMm5kIHBhc3MgaXMgbmVjZXNzYXJ5IGJ5CisJCSAqIGJ5 IG5vdGluZyB0aGUgcHJlc2VuY2Ugb2YgRVhFQyBwYXJhbWV0ZXJzLgogCQkgKi8KIAkJZ2VuX3Bh cnRwcnVuZV9zdGVwcyhzdWJwYXJ0LCBwYXJ0cHJ1bmVxdWFsLCBQQVJUVEFSR0VUX0lOSVRJQUws CiAJCQkJCQkJJmNvbnRleHQpOwpAQCAtNjEzLDYgKzY0NSwxMSBAQCBtYWtlX3BhcnRpdGlvbmVk cmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAog CQlwaW5mby0+ZXhlY3BhcmFtaWRzID0gZXhlY3BhcmFtaWRzOwogCQkvKiBSZW1haW5pbmcgZmll bGRzIHdpbGwgYmUgZmlsbGVkIGluIHRoZSBuZXh0IGxvb3AgKi8KIAorCQlpZiAoISpuZWVkc19p bml0X3BydW5pbmcpCisJCQkqbmVlZHNfaW5pdF9wcnVuaW5nID0gKGluaXRpYWxfcHJ1bmluZ19z dGVwcyAhPSBOSUwpOworCQlpZiAoISpuZWVkc19leGVjX3BydW5pbmcpCisJCQkqbmVlZHNfZXhl Y19wcnVuaW5nID0gKGV4ZWNfcHJ1bmluZ19zdGVwcyAhPSBOSUwpOworCiAJCXBpbmZvbGlzdCA9 IGxhcHBlbmQocGluZm9saXN0LCBwaW5mbyk7CiAJfQogCkBAIC02NDAsNiArNjc3LDcgQEAgbWFr ZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KnBhcmVudHJlbCwKIAkJaW50CQkgICAqc3VicGxhbl9tYXA7CiAJCWludAkJICAgKnN1YnBhcnRf bWFwOwogCQlPaWQJCSAgICpyZWxpZF9tYXA7CisJCUluZGV4CSAgICpydGlfbWFwOwogCiAJCS8q CiAJCSAqIENvbnN0cnVjdCB0aGUgc3VicGxhbiBhbmQgc3VicGFydCBtYXBzIGZvciB0aGlzIHBh cnRpdGlvbmluZyBsZXZlbC4KQEAgLTY1Miw2ICs2OTAsNyBAQCBtYWtlX3BhcnRpdGlvbmVkcmVs X3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQlz dWJwYXJ0X21hcCA9IChpbnQgKikgcGFsbG9jKG5wYXJ0cyAqIHNpemVvZihpbnQpKTsKIAkJbWVt c2V0KHN1YnBhcnRfbWFwLCAtMSwgbnBhcnRzICogc2l6ZW9mKGludCkpOwogCQlyZWxpZF9tYXAg PSAoT2lkICopIHBhbGxvYzAobnBhcnRzICogc2l6ZW9mKE9pZCkpOworCQlydGlfbWFwID0gKElu ZGV4ICopIHBhbGxvYzAobnBhcnRzICogc2l6ZW9mKEluZGV4KSk7CiAJCXByZXNlbnRfcGFydHMg PSBOVUxMOwogCiAJCWkgPSAtMTsKQEAgLTY2Niw2ICs3MDUsNyBAQCBtYWtlX3BhcnRpdGlvbmVk cmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAog CQkJc3VicGxhbl9tYXBbaV0gPSBzdWJwbGFuaWR4ID0gcmVsaWRfc3VicGxhbl9tYXBbcGFydHJl bC0+cmVsaWRdIC0gMTsKIAkJCXN1YnBhcnRfbWFwW2ldID0gc3VicGFydGlkeCA9IHJlbGlkX3N1 YnBhcnRfbWFwW3BhcnRyZWwtPnJlbGlkXSAtIDE7CiAJCQlyZWxpZF9tYXBbaV0gPSBwbGFubmVy X3J0X2ZldGNoKHBhcnRyZWwtPnJlbGlkLCByb290KS0+cmVsaWQ7CisJCQlydGlfbWFwW2ldID0g cGFydHJlbC0+cmVsaWQ7CiAJCQlpZiAoc3VicGxhbmlkeCA+PSAwKQogCQkJewogCQkJCXByZXNl bnRfcGFydHMgPSBibXNfYWRkX21lbWJlcihwcmVzZW50X3BhcnRzLCBpKTsKQEAgLTY5MCw2ICs3 MzAsNyBAQCBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQlwaW5mby0+c3VicGxhbl9tYXAgPSBzdWJwbGFuX21h cDsKIAkJcGluZm8tPnN1YnBhcnRfbWFwID0gc3VicGFydF9tYXA7CiAJCXBpbmZvLT5yZWxpZF9t YXAgPSByZWxpZF9tYXA7CisJCXBpbmZvLT5ydGlfbWFwID0gcnRpX21hcDsKIAl9CiAKIAlwZnJl ZShyZWxpZF9zdWJwYXJ0X21hcCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3Bvc3Rn cmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXggOTVkYzJlMmM4My4uOGRj NTJhMTU4ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpAQCAtMTYwMyw2ICsxNjAzLDcgQEAgZXhlY19iaW5k X21lc3NhZ2UoU3RyaW5nSW5mbyBpbnB1dF9tZXNzYWdlKQogCWludDE2CSAgICpyZm9ybWF0cyA9 IE5VTEw7CiAJQ2FjaGVkUGxhblNvdXJjZSAqcHNyYzsKIAlDYWNoZWRQbGFuICpjcGxhbjsKKwlM aXN0CSAgICpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0OwogCVBvcnRhbAkJcG9ydGFsOwogCWNoYXIJ ICAgKnF1ZXJ5X3N0cmluZzsKIAljaGFyCSAgICpzYXZlZF9zdG10X25hbWU7CkBAIC0xOTc4LDcg KzE5NzksOSBAQCBleGVjX2JpbmRfbWVzc2FnZShTdHJpbmdJbmZvIGlucHV0X21lc3NhZ2UpCiAJ ICogd2lsbCBiZSBnZW5lcmF0ZWQgaW4gTWVzc2FnZUNvbnRleHQuICBUaGUgcGxhbiByZWZjb3Vu dCB3aWxsIGJlCiAJICogYXNzaWduZWQgdG8gdGhlIFBvcnRhbCwgc28gaXQgd2lsbCBiZSByZWxl YXNlZCBhdCBwb3J0YWwgZGVzdHJ1Y3Rpb24uCiAJICovCi0JY3BsYW4gPSBHZXRDYWNoZWRQbGFu KHBzcmMsIHBhcmFtcywgTlVMTCwgTlVMTCk7CisJY3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBzcmMs IHBhcmFtcywgTlVMTCwgTlVMTCwgJnBhcnRfcHJ1bmVfcmVzdWx0X2xpc3QpOworCUFzc2VydChs aXN0X2xlbmd0aChjcGxhbi0+c3RtdF9saXN0KSA9PQorCQkgICBsaXN0X2xlbmd0aChwYXJ0X3By dW5lX3Jlc3VsdF9saXN0KSk7CiAKIAkvKgogCSAqIE5vdyB3ZSBjYW4gZGVmaW5lIHRoZSBwb3J0 YWwuCkBAIC0xOTkzLDYgKzE5OTYsOSBAQCBleGVjX2JpbmRfbWVzc2FnZShTdHJpbmdJbmZvIGlu cHV0X21lc3NhZ2UpCiAJCQkJCSAgY3BsYW4tPnN0bXRfbGlzdCwKIAkJCQkJICBjcGxhbik7CiAK KwkvKiBDb3B5IFBhcnRpdGlvblBydW5lUmVzdWx0cyBpbnRvIHRoZSBwb3J0YWwncyBjb250ZXh0 LiAqLworCVBvcnRhbFN0b3JlUGFydGl0aW9uUHJ1bmVSZXN1bHRzKHBvcnRhbCwgcGFydF9wcnVu ZV9yZXN1bHRfbGlzdCk7CisKIAkvKiBEb25lIHdpdGggdGhlIHNuYXBzaG90IHVzZWQgZm9yIHBh cmFtZXRlciBJL08gYW5kIHBhcnNpbmcvcGxhbm5pbmcgKi8KIAlpZiAoc25hcHNob3Rfc2V0KQog CQlQb3BBY3RpdmVTbmFwc2hvdCgpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wcXVl cnkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMKaW5kZXggNWFhNWEzNTBmMy4uYTYyNzQ0 OGE1YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYworKysgYi9zcmMvYmFj a2VuZC90Y29wL3BxdWVyeS5jCkBAIC0zNSw3ICszNSw3IEBACiBQb3J0YWwJCUFjdGl2ZVBvcnRh bCA9IE5VTEw7CiAKIAotc3RhdGljIHZvaWQgUHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFu LAorc3RhdGljIHZvaWQgUHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLCBQYXJ0aXRpb25Q cnVuZVJlc3VsdCAqcGFydF9wcnVuZV9yZXN1bHQsCiAJCQkJCQkgY29uc3QgY2hhciAqc291cmNl VGV4dCwKIAkJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCQkJCSBRdWVyeUVudmlyb25t ZW50ICpxdWVyeUVudiwKQEAgLTY1LDYgKzY1LDcgQEAgc3RhdGljIHZvaWQgRG9Qb3J0YWxSZXdp bmQoUG9ydGFsIHBvcnRhbCk7CiAgKi8KIFF1ZXJ5RGVzYyAqCiBDcmVhdGVRdWVyeURlc2MoUGxh bm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCVBhcnRpdGlvblBydW5lUmVzdWx0ICpwYXJ0X3By dW5lX3Jlc3VsdCwKIAkJCQljb25zdCBjaGFyICpzb3VyY2VUZXh0LAogCQkJCVNuYXBzaG90IHNu YXBzaG90LAogCQkJCVNuYXBzaG90IGNyb3NzY2hlY2tfc25hcHNob3QsCkBAIC03Nyw2ICs3OCw4 IEBAIENyZWF0ZVF1ZXJ5RGVzYyhQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsCiAKIAlxZC0+b3Bl cmF0aW9uID0gcGxhbm5lZHN0bXQtPmNvbW1hbmRUeXBlOwkvKiBvcGVyYXRpb24gKi8KIAlxZC0+ cGxhbm5lZHN0bXQgPSBwbGFubmVkc3RtdDsJLyogcGxhbiAqLworCXFkLT5wYXJ0X3BydW5lX3Jl c3VsdCA9IHBhcnRfcHJ1bmVfcmVzdWx0OwkvKiBFeGVjdXRvckRvSW5pdGlhbFBydW5pbmcoKQor CQkJCQkJCQkJCQkJICogb3V0cHV0IGZvciBwbGFuICovCiAJcWQtPnNvdXJjZVRleHQgPSBzb3Vy Y2VUZXh0OwkvKiBxdWVyeSB0ZXh0ICovCiAJcWQtPnNuYXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hv dChzbmFwc2hvdCk7CS8qIHNuYXBzaG90ICovCiAJLyogUkkgY2hlY2sgc25hcHNob3QgKi8KQEAg LTEyMiw2ICsxMjUsNyBAQCBGcmVlUXVlcnlEZXNjKFF1ZXJ5RGVzYyAqcWRlc2MpCiAgKgkJUE9S VEFMX09ORV9SRVRVUk5JTkcsIG9yIFBPUlRBTF9PTkVfTU9EX1dJVEggcG9ydGFsCiAgKgogICoJ cGxhbjogdGhlIHBsYW4gdHJlZSBmb3IgdGhlIHF1ZXJ5CisgKglwYXJ0X3BydW5lX3Jlc3VsdDog RXhlY3V0b3JEb0luaXRpYWxQcnVuaW5nKCkgb3V0cHV0IGZvciB0aGUgcGxhbiB0cmVlCiAgKglz b3VyY2VUZXh0OiB0aGUgc291cmNlIHRleHQgb2YgdGhlIHF1ZXJ5CiAgKglwYXJhbXM6IGFueSBw YXJhbWV0ZXJzIG5lZWRlZAogICoJZGVzdDogd2hlcmUgdG8gc2VuZCByZXN1bHRzCkBAIC0xMzQs NiArMTM4LDcgQEAgRnJlZVF1ZXJ5RGVzYyhRdWVyeURlc2MgKnFkZXNjKQogICovCiBzdGF0aWMg dm9pZAogUHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLAorCQkJIFBhcnRpdGlvblBydW5l UmVzdWx0ICpwYXJ0X3BydW5lX3Jlc3VsdCwKIAkJCSBjb25zdCBjaGFyICpzb3VyY2VUZXh0LAog CQkJIFBhcmFtTGlzdEluZm8gcGFyYW1zLAogCQkJIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52 LApAQCAtMTQ1LDcgKzE1MCw3IEBAIFByb2Nlc3NRdWVyeShQbGFubmVkU3RtdCAqcGxhbiwKIAkv KgogCSAqIENyZWF0ZSB0aGUgUXVlcnlEZXNjIG9iamVjdAogCSAqLwotCXF1ZXJ5RGVzYyA9IENy ZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBzb3VyY2VUZXh0LAorCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5 RGVzYyhwbGFuLCBwYXJ0X3BydW5lX3Jlc3VsdCwgc291cmNlVGV4dCwKIAkJCQkJCQkJR2V0QWN0 aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJCQlkZXN0LCBwYXJhbXMsIHF1 ZXJ5RW52LCAwKTsKIApAQCAtNDkxLDggKzQ5NiwxMyBAQCBQb3J0YWxTdGFydChQb3J0YWwgcG9y dGFsLCBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCQkvKgogCQkJCSAqIENyZWF0ZSBRdWVyeURl c2MgaW4gcG9ydGFsJ3MgY29udGV4dDsgZm9yIHRoZSBtb21lbnQsIHNldAogCQkJCSAqIHRoZSBk ZXN0aW5hdGlvbiB0byBEZXN0Tm9uZS4KKwkJCQkgKgorCQkJCSAqIFRoZXJlIGlzIG5vIFBhcnRp dGlvblBydW5lUmVzdWx0IHVubGVzcyB0aGUgUGxhbm5lZFN0bXQgaXMKKwkJCQkgKiBmcm9tIGEg Q2FjaGVkUGxhbi4KIAkJCQkgKi8KIAkJCQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MobGlu aXRpYWxfbm9kZShQbGFubmVkU3RtdCwgcG9ydGFsLT5zdG10cyksCisJCQkJCQkJCQkJCXBvcnRh bC0+cGFydF9wcnVuZV9yZXN1bHRzID09IE5JTCA/IE5VTEwgOgorCQkJCQkJCQkJCQlsaW5pdGlh bChwb3J0YWwtPnBhcnRfcHJ1bmVfcmVzdWx0cyksCiAJCQkJCQkJCQkJCXBvcnRhbC0+c291cmNl VGV4dCwKIAkJCQkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwKIAkJCQkJCQkJCQkJSW52YWxp ZFNuYXBzaG90LApAQCAtMTE5NCw2ICsxMjA0LDcgQEAgUG9ydGFsUnVuTXVsdGkoUG9ydGFsIHBv cnRhbCwKIHsKIAlib29sCQlhY3RpdmVfc25hcHNob3Rfc2V0ID0gZmFsc2U7CiAJTGlzdENlbGwg ICAqc3RtdGxpc3RfaXRlbTsKKwlpbnQJCQlpOwogCiAJLyoKIAkgKiBJZiB0aGUgZGVzdGluYXRp b24gaXMgRGVzdFJlbW90ZUV4ZWN1dGUsIGNoYW5nZSB0byBEZXN0Tm9uZS4gIFRoZQpAQCAtMTIx NCw5ICsxMjI1LDE1IEBAIFBvcnRhbFJ1bk11bHRpKFBvcnRhbCBwb3J0YWwsCiAJICogTG9vcCB0 byBoYW5kbGUgdGhlIGluZGl2aWR1YWwgcXVlcmllcyBnZW5lcmF0ZWQgZnJvbSBhIHNpbmdsZSBw YXJzZXRyZWUKIAkgKiBieSBhbmFseXNpcyBhbmQgcmV3cml0ZS4KIAkgKi8KKwlpID0gMDsKIAlm b3JlYWNoKHN0bXRsaXN0X2l0ZW0sIHBvcnRhbC0+c3RtdHMpCiAJewogCQlQbGFubmVkU3RtdCAq cHN0bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgc3RtdGxpc3RfaXRlbSk7CisJCVBhcnRp dGlvblBydW5lUmVzdWx0ICpwYXJ0X3BydW5lX3Jlc3VsdCA9IHBvcnRhbC0+cGFydF9wcnVuZV9y ZXN1bHRzID8KKwkJCQkJCQkJCSAgbGlzdF9udGgocG9ydGFsLT5wYXJ0X3BydW5lX3Jlc3VsdHMs IGkpIDoKKwkJCQkJCQkJCSAgTlVMTDsKKworCQlpKys7CiAKIAkJLyoKIAkJICogSWYgd2UgZ290 IGEgY2FuY2VsIHNpZ25hbCBpbiBwcmlvciBjb21tYW5kLCBxdWl0CkBAIC0xMjc0LDcgKzEyOTEs NyBAQCBQb3J0YWxSdW5NdWx0aShQb3J0YWwgcG9ydGFsLAogCQkJaWYgKHBzdG10LT5jYW5TZXRU YWcpCiAJCQl7CiAJCQkJLyogc3RhdGVtZW50IGNhbiBzZXQgdGFnIHN0cmluZyAqLwotCQkJCVBy b2Nlc3NRdWVyeShwc3RtdCwKKwkJCQlQcm9jZXNzUXVlcnkocHN0bXQsIHBhcnRfcHJ1bmVfcmVz dWx0LAogCQkJCQkJCSBwb3J0YWwtPnNvdXJjZVRleHQsCiAJCQkJCQkJIHBvcnRhbC0+cG9ydGFs UGFyYW1zLAogCQkJCQkJCSBwb3J0YWwtPnF1ZXJ5RW52LApAQCAtMTI4Myw3ICsxMzAwLDcgQEAg UG9ydGFsUnVuTXVsdGkoUG9ydGFsIHBvcnRhbCwKIAkJCWVsc2UKIAkJCXsKIAkJCQkvKiBzdG10 IGFkZGVkIGJ5IHJld3JpdGUgY2Fubm90IHNldCB0YWcgKi8KLQkJCQlQcm9jZXNzUXVlcnkocHN0 bXQsCisJCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10LCBwYXJ0X3BydW5lX3Jlc3VsdCwKIAkJCQkJCQkg cG9ydGFsLT5zb3VyY2VUZXh0LAogCQkJCQkJCSBwb3J0YWwtPnBvcnRhbFBhcmFtcywKIAkJCQkJ CQkgcG9ydGFsLT5xdWVyeUVudiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hl L3BsYW5jYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKaW5kZXgg NGNmNmRiNTA0Zi4uNmNiNDczZjJmNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2Fj aGUvcGxhbmNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMK QEAgLTk5LDE0ICs5OSwxOSBAQCBzdGF0aWMgZGxpc3RfaGVhZCBjYWNoZWRfZXhwcmVzc2lvbl9s aXN0ID0gRExJU1RfU1RBVElDX0lOSVQoY2FjaGVkX2V4cHJlc3Npb25fbAogc3RhdGljIHZvaWQg UmVsZWFzZUdlbmVyaWNQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpOwogc3RhdGlj IExpc3QgKlJldmFsaWRhdGVDYWNoZWRRdWVyeShDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNl LAogCQkJCQkJCQkgICBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudik7Ci1zdGF0aWMgYm9vbCBD aGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSk7CitzdGF0aWMgYm9v bCBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgUGFyYW1MaXN0 SW5mbyBib3VuZFBhcmFtcywKKwkJCQkJCQlMaXN0ICoqcGFydF9wcnVuZV9yZXN1bHRfbGlzdCk7 CiBzdGF0aWMgQ2FjaGVkUGxhbiAqQnVpbGRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBs YW5zb3VyY2UsIExpc3QgKnFsaXN0LAotCQkJCQkJCQkgICBQYXJhbUxpc3RJbmZvIGJvdW5kUGFy YW1zLCBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudik7CisJCQkJCQkJCSAgIFBhcmFtTGlzdElu Zm8gYm91bmRQYXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LAorCQkJCQkJCQkgICBM aXN0ICoqcGFydF9wcnVuZV9yZXN1bHRfbGlzdCk7CiBzdGF0aWMgYm9vbCBjaG9vc2VfY3VzdG9t X3BsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKIAkJCQkJCQkgICBQYXJhbUxpc3RJ bmZvIGJvdW5kUGFyYW1zKTsKIHN0YXRpYyBkb3VibGUgY2FjaGVkX3BsYW5fY29zdChDYWNoZWRQ bGFuICpwbGFuLCBib29sIGluY2x1ZGVfcGxhbm5lcik7CiBzdGF0aWMgUXVlcnkgKlF1ZXJ5TGlz dEdldFByaW1hcnlTdG10KExpc3QgKnN0bXRzKTsKLXN0YXRpYyB2b2lkIEFjcXVpcmVFeGVjdXRv ckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJlKTsKK3N0YXRpYyB2b2lkIEFjcXVp cmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFt cywKKwkJCQkJCQkJIExpc3QgKipwYXJ0X3BydW5lX3Jlc3VsdF9saXN0LAorCQkJCQkJCQkgTGlz dCAqKmxvY2tlZFJlbGlkc19wZXJfc3RtdCk7CitzdGF0aWMgdm9pZCBSZWxlYXNlRXhlY3V0b3JM b2NrcyhMaXN0ICpzdG10X2xpc3QsIExpc3QgKmxvY2tlZFJlbGlkc19wZXJfc3RtdCk7CiBzdGF0 aWMgdm9pZCBBY3F1aXJlUGxhbm5lckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJl KTsKIHN0YXRpYyB2b2lkIFNjYW5RdWVyeUZvckxvY2tzKFF1ZXJ5ICpwYXJzZXRyZWUsIGJvb2wg YWNxdWlyZSk7CiBzdGF0aWMgYm9vbCBTY2FuUXVlcnlXYWxrZXIoTm9kZSAqbm9kZSwgYm9vbCAq YWNxdWlyZSk7CkBAIC03OTAsMTUgKzc5NSwyMCBAQCBSZXZhbGlkYXRlQ2FjaGVkUXVlcnkoQ2Fj aGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKICAqCiAgKiBPbiBhICJ0cnVlIiByZXR1cm4sIHdl IGhhdmUgYWNxdWlyZWQgdGhlIGxvY2tzIG5lZWRlZCB0byBydW4gdGhlIHBsYW4uCiAgKiAoV2Ug bXVzdCBkbyB0aGlzIGZvciB0aGUgInRydWUiIHJlc3VsdCB0byBiZSByYWNlLWNvbmRpdGlvbi1m cmVlLikKKyAqCisgKiBTZWUgR2V0Q2FjaGVkUGxhbigpJ3MgY29tbWVudCBmb3IgYSBkZXNjcmlw dGlvbiBvZiBwYXJ0X3BydW5lX3Jlc3VsdF9saXN0LgogICovCiBzdGF0aWMgYm9vbAotQ2hlY2tD YWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpCitDaGVja0NhY2hlZFBsYW4o Q2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywK KwkJCQlMaXN0ICoqcGFydF9wcnVuZV9yZXN1bHRfbGlzdCkKIHsKIAlDYWNoZWRQbGFuICpwbGFu ID0gcGxhbnNvdXJjZS0+Z3BsYW47CiAKIAkvKiBBc3NlcnQgdGhhdCBjYWxsZXIgY2hlY2tlZCB0 aGUgcXVlcnl0cmVlICovCiAJQXNzZXJ0KHBsYW5zb3VyY2UtPmlzX3ZhbGlkKTsKIAorCSpwYXJ0 X3BydW5lX3Jlc3VsdF9saXN0ID0gTklMOworCiAJLyogSWYgdGhlcmUncyBubyBnZW5lcmljIHBs YW4sIGp1c3Qgc2F5ICJmYWxzZSIgKi8KIAlpZiAoIXBsYW4pCiAJCXJldHVybiBmYWxzZTsKQEAg LTgyMCwxMyArODMwLDIxIEBAIENoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFu c291cmNlKQogCSAqLwogCWlmIChwbGFuLT5pc192YWxpZCkKIAl7CisJCUxpc3QgICAqbG9ja2Vk UmVsaWRzX3Blcl9zdG10OworCiAJCS8qCiAJCSAqIFBsYW4gbXVzdCBoYXZlIHBvc2l0aXZlIHJl ZmNvdW50IGJlY2F1c2UgaXQgaXMgcmVmZXJlbmNlZCBieQogCQkgKiBwbGFuc291cmNlOyBzbyBu byBuZWVkIHRvIGZlYXIgaXQgZGlzYXBwZWFycyB1bmRlciB1cyBoZXJlLgogCQkgKi8KIAkJQXNz ZXJ0KHBsYW4tPnJlZmNvdW50ID4gMCk7CiAKLQkJQWNxdWlyZUV4ZWN1dG9yTG9ja3MocGxhbi0+ c3RtdF9saXN0LCB0cnVlKTsKKwkJLyoKKwkJICogTG9jayByZWxhdGlvbnMgc2Nhbm5lZCBieSB0 aGUgcGxhbi4gIFRoaXMgaXMgd2hlcmUgdGhlIHBydW5pbmcKKwkJICogaGFwcGVucyBpZiBuZWVk ZWQuCisJCSAqLworCQlBY3F1aXJlRXhlY3V0b3JMb2NrcyhwbGFuLT5zdG10X2xpc3QsIGJvdW5k UGFyYW1zLAorCQkJCQkJCSBwYXJ0X3BydW5lX3Jlc3VsdF9saXN0LAorCQkJCQkJCSAmbG9ja2Vk UmVsaWRzX3Blcl9zdG10KTsKIAogCQkvKgogCQkgKiBJZiBwbGFuIHdhcyB0cmFuc2llbnQsIGNo ZWNrIHRvIHNlZSBpZiBUcmFuc2FjdGlvblhtaW4gaGFzCkBAIC04NDgsNyArODY2LDE0IEBAIENo ZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKQogCQl9CiAKIAkJLyog T29wcywgdGhlIHJhY2UgY2FzZSBoYXBwZW5lZC4gIFJlbGVhc2UgdXNlbGVzcyBsb2Nrcy4gKi8K LQkJQWNxdWlyZUV4ZWN1dG9yTG9ja3MocGxhbi0+c3RtdF9saXN0LCBmYWxzZSk7CisJCVJlbGVh c2VFeGVjdXRvckxvY2tzKHBsYW4tPnN0bXRfbGlzdCwgbG9ja2VkUmVsaWRzX3Blcl9zdG10KTsK KworCQkvKgorCQkgKiBUaGUgb3V0cHV0IGxpc3QgYW5kIGFueSBvYmplY3RzIHRoZXJlaW4gaGF2 ZSBiZWVuIGFsbG9jYXRlZCBpbiB0aGUKKwkJICogY2FsbGVyJ3MgaG9wZWZ1bGx5IHNob3J0LWxp dmVkIGNvbnRleHQsIHNvIHdpbGwgbm90IHJlbWFpbiBsZWFrZWQKKwkJICogZm9yIGxvbmcsIHRo b3VnaCByZXNldCB0byBhdm9pZCBpdHMgYWNjaWRlbnRhbGx5IGJlaW5nIGxvb2tlZCBhdC4KKwkJ ICovCisJCSpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0ID0gTklMOwogCX0KIAogCS8qCkBAIC04NzQs MTAgKzg5OSwxNSBAQCBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJj ZSkKICAqIFBsYW5uaW5nIHdvcmsgaXMgZG9uZSBpbiB0aGUgY2FsbGVyJ3MgbWVtb3J5IGNvbnRl eHQuICBUaGUgZmluaXNoZWQgcGxhbgogICogaXMgaW4gYSBjaGlsZCBtZW1vcnkgY29udGV4dCwg d2hpY2ggdHlwaWNhbGx5IHNob3VsZCBnZXQgcmVwYXJlbnRlZAogICogKHVubGVzcyB0aGlzIGlz IGEgb25lLXNob3QgcGxhbiwgaW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBjb3B5IHRoZSBwbGFuKS4K KyAqCisgKiBBIGxpc3Qgb2YgTlVMTHMgaXMgcmV0dXJuZWQgaW4gKnBhcnRfcHJ1bmVfcmVzdWx0 X2xpc3QsIG1lYW5pbmcgdGhhdCBubworICogUGFydGl0aW9uUHJ1bmVSZXN1bHQgbm9kZXMgaGF2 ZSB5ZXQgYmVlbiBjcmVhdGVkIGZvciB0aGUgcGxhbnMgaW4KKyAqIHN0bXRfbGlzdC4KICAqLwog c3RhdGljIENhY2hlZFBsYW4gKgogQnVpbGRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBs YW5zb3VyY2UsIExpc3QgKnFsaXN0LAotCQkJCVBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsIFF1 ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KQorCQkJCVBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMs IFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LAorCQkJCUxpc3QgKipwYXJ0X3BydW5lX3Jlc3Vs dF9saXN0KQogewogCUNhY2hlZFBsYW4gKnBsYW47CiAJTGlzdAkgICAqcGxpc3Q7CkBAIC0xMDA3 LDYgKzEwMzcsMTcgQEAgQnVpbGRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3Vy Y2UsIExpc3QgKnFsaXN0LAogCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CiAKKwkv KgorCSAqIE5vIGFjdHVhbCBQYXJ0aXRpb25QcnVuZVJlc3VsdHMgeWV0IHRvIGFkZCwgdGhvdWdo IG11c3QgaW5pdGlhbGl6ZQorCSAqIHRoZSBsaXN0IHRvIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9m IGVsZW1lbnRzIGFzIHRoZSBsaXN0IG9mCisJICogUGxhbm5lZFN0bXRzLgorCSAqLworCSpwYXJ0 X3BydW5lX3Jlc3VsdF9saXN0ID0gTklMOworCWZvcmVhY2gobGMsIHBsaXN0KQorCXsKKwkJKnBh cnRfcHJ1bmVfcmVzdWx0X2xpc3QgPSBsYXBwZW5kKCpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0LCBO VUxMKTsKKwl9CisKIAlyZXR1cm4gcGxhbjsKIH0KIApAQCAtMTEyNiw2ICsxMTY3LDE3IEBAIGNh Y2hlZF9wbGFuX2Nvc3QoQ2FjaGVkUGxhbiAqcGxhbiwgYm9vbCBpbmNsdWRlX3BsYW5uZXIpCiAg KiBwbGFuIG9yIGEgY3VzdG9tIHBsYW4gZm9yIHRoZSBnaXZlbiBwYXJhbWV0ZXJzOiB0aGUgY2Fs bGVyIGRvZXMgbm90IGtub3cKICAqIHdoaWNoIGl0IHdpbGwgZ2V0LgogICoKKyAqIEZvciBldmVy eSBQbGFubmVkU3RtdCBmb3VuZCBpbiB0aGUgcmV0dXJuZWQgQ2FjaGVkUGxhbiwgYW4gZWxlbWVu dCB0aGF0CisgKiBpcyBlaXRoZXIgYSBQYXJ0aXRpb25QcnVuZVJlc3VsdCBvciBhIE5VTEwgaXMg YWRkZWQgdG8KKyAqICpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0IGlmIG5lZWRlZC4gIFRoZSBmb3Jt ZXIgaWYgdGhlIFBsYW5uZWRTdG10IGlzIGZyb20KKyAqIHRoZSBleGlzdGluZyBDYWNoZWRQbGFu IHRoYXQgaXMgb3RoZXJ3aXNlIHZhbGlkIGFuZCBjb250YWlucyBhdCBsZWFzdCBvbmUKKyAqIFBh cnRpdGlvblBydW5lSW5mbyB0aGF0IGhhcyAiaW5pdGlhbCIgcHJ1bmluZyBzdGVwcy4gIFRob3Nl IHN0ZXBzIGFyZQorICogcGVyZm9ybWVkIGJ5IGNhbGxpbmcgRXhlY3V0b3JEb0luaXRpYWxQcnVu aW5nKCkgdG8gZGV0ZXJtaW5lIG9ubHkgdGhvc2UKKyAqIGxlYWYgcGFydGl0aW9ucyB0aGF0IG5l ZWQgdG8gYmUgbG9ja2VkIGJ5IEFjcXVpcmVFeGVjdXRvckxvY2tzKCkgYnkgcHJ1bmluZworICog YXdheSBzdWJwbGFucyB0aGF0IGRvbid0IG1hdGNoIHRoZSBwcnVuaW5nIGNvbmRpdGlvbnMuICBU aGUKKyAqIFBhcnRpdGlvblBydW5lUmVzdWx0IGNvbnRhaW5zIGEgbGlzdCBvZiBiaXRtYXBzZXRz IG9mIHRoZSBpbmRleGVzIG9mCisgKiBtYXRjaGluZyBzdWJwbGFucywgb25lIGZvciBlYWNoIFBh cnRpdGlvblBydW5lSW5mby4KKyAqCiAgKiBPbiByZXR1cm4sIHRoZSBwbGFuIGlzIHZhbGlkIGFu ZCB3ZSBoYXZlIHN1ZmZpY2llbnQgbG9ja3MgdG8gYmVnaW4KICAqIGV4ZWN1dGlvbi4KICAqCkBA IC0xMTM5LDExICsxMTkxLDEzIEBAIGNhY2hlZF9wbGFuX2Nvc3QoQ2FjaGVkUGxhbiAqcGxhbiwg Ym9vbCBpbmNsdWRlX3BsYW5uZXIpCiAgKi8KIENhY2hlZFBsYW4gKgogR2V0Q2FjaGVkUGxhbihD YWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zLAot CQkJICBSZXNvdXJjZU93bmVyIG93bmVyLCBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudikKKwkJ CSAgUmVzb3VyY2VPd25lciBvd25lciwgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCisJCQkg IExpc3QgKipwYXJ0X3BydW5lX3Jlc3VsdF9saXN0KQogewogCUNhY2hlZFBsYW4gKnBsYW4gPSBO VUxMOwogCUxpc3QJICAgKnFsaXN0OwogCWJvb2wJCWN1c3RvbXBsYW47CisJTGlzdAkgICAqbXlf cGFydF9wcnVuZV9yZXN1bHRfbGlzdDsKIAogCS8qIEFzc2VydCBjYWxsZXIgaXMgZG9pbmcgdGhp bmdzIGluIGEgc2FuZSBvcmRlciAqLwogCUFzc2VydChwbGFuc291cmNlLT5tYWdpYyA9PSBDQUNI RURQTEFOU09VUkNFX01BR0lDKTsKQEAgLTExNjAsNyArMTIxNCw4IEBAIEdldENhY2hlZFBsYW4o Q2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywK IAogCWlmICghY3VzdG9tcGxhbikKIAl7Ci0JCWlmIChDaGVja0NhY2hlZFBsYW4ocGxhbnNvdXJj ZSkpCisJCWlmIChDaGVja0NhY2hlZFBsYW4ocGxhbnNvdXJjZSwgYm91bmRQYXJhbXMsCisJCQkJ CQkJJm15X3BhcnRfcHJ1bmVfcmVzdWx0X2xpc3QpKQogCQl7CiAJCQkvKiBXZSB3YW50IGEgZ2Vu ZXJpYyBwbGFuLCBhbmQgd2UgYWxyZWFkeSBoYXZlIGEgdmFsaWQgb25lICovCiAJCQlwbGFuID0g cGxhbnNvdXJjZS0+Z3BsYW47CkBAIC0xMTY5LDcgKzEyMjQsOCBAQCBHZXRDYWNoZWRQbGFuKENh Y2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsCiAJ CWVsc2UKIAkJewogCQkJLyogQnVpbGQgYSBuZXcgZ2VuZXJpYyBwbGFuICovCi0JCQlwbGFuID0g QnVpbGRDYWNoZWRQbGFuKHBsYW5zb3VyY2UsIHFsaXN0LCBOVUxMLCBxdWVyeUVudik7CisJCQlw bGFuID0gQnVpbGRDYWNoZWRQbGFuKHBsYW5zb3VyY2UsIHFsaXN0LCBOVUxMLCBxdWVyeUVudiwK KwkJCQkJCQkJICAgJm15X3BhcnRfcHJ1bmVfcmVzdWx0X2xpc3QpOwogCQkJLyogSnVzdCBtYWtl IHJlYWwgc3VyZSBwbGFuc291cmNlLT5ncGxhbiBpcyBjbGVhciAqLwogCQkJUmVsZWFzZUdlbmVy aWNQbGFuKHBsYW5zb3VyY2UpOwogCQkJLyogTGluayB0aGUgbmV3IGdlbmVyaWMgcGxhbiBpbnRv IHRoZSBwbGFuc291cmNlICovCkBAIC0xMjE0LDcgKzEyNzAsOCBAQCBHZXRDYWNoZWRQbGFuKENh Y2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsCiAJ aWYgKGN1c3RvbXBsYW4pCiAJewogCQkvKiBCdWlsZCBhIGN1c3RvbSBwbGFuICovCi0JCXBsYW4g PSBCdWlsZENhY2hlZFBsYW4ocGxhbnNvdXJjZSwgcWxpc3QsIGJvdW5kUGFyYW1zLCBxdWVyeUVu dik7CisJCXBsYW4gPSBCdWlsZENhY2hlZFBsYW4ocGxhbnNvdXJjZSwgcWxpc3QsIGJvdW5kUGFy YW1zLCBxdWVyeUVudiwKKwkJCQkJCQkgICAmbXlfcGFydF9wcnVuZV9yZXN1bHRfbGlzdCk7CiAJ CS8qIEFjY3VtdWxhdGUgdG90YWwgY29zdHMgb2YgY3VzdG9tIHBsYW5zICovCiAJCXBsYW5zb3Vy Y2UtPnRvdGFsX2N1c3RvbV9jb3N0ICs9IGNhY2hlZF9wbGFuX2Nvc3QocGxhbiwgdHJ1ZSk7CiAK QEAgLTEyNDYsNiArMTMwMyw5IEBAIEdldENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxh bnNvdXJjZSwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywKIAkJcGxhbi0+aXNfc2F2ZWQgPSB0 cnVlOwogCX0KIAorCWlmIChwYXJ0X3BydW5lX3Jlc3VsdF9saXN0KQorCQkqcGFydF9wcnVuZV9y ZXN1bHRfbGlzdCA9IG15X3BhcnRfcHJ1bmVfcmVzdWx0X2xpc3Q7CisKIAlyZXR1cm4gcGxhbjsK IH0KIApAQCAtMTczNywxNyArMTc5NywyOSBAQCBRdWVyeUxpc3RHZXRQcmltYXJ5U3RtdChMaXN0 ICpzdG10cykKIAogLyoKICAqIEFjcXVpcmVFeGVjdXRvckxvY2tzOiBhY3F1aXJlIGxvY2tzIG5l ZWRlZCBmb3IgZXhlY3V0aW9uIG9mIGEgY2FjaGVkIHBsYW47Ci0gKiBvciByZWxlYXNlIHRoZW0g aWYgYWNxdWlyZSBpcyBmYWxzZS4KKyAqCisgKiBTZWUgR2V0Q2FjaGVkUGxhbigpJ3MgY29tbWVu dCBmb3IgYSBkZXNjcmlwdGlvbiBvZiBwYXJ0X3BydW5lX3Jlc3VsdF9saXN0LgorICoKKyAqIE9u IHJldHVybiwgKmxvY2tlZFJlbGlkc19wZXJfc3RtdCB3aWxsIGNvbnRhaW4gYSBiaXRtYXBzZXQg Zm9yIGV2ZXJ5CisgKiBQbGFubmVkU3RtdCBpbiBzdG10X2xpc3QsIGNvbnRhaW5pbmcgdGhlIFJU IGluZGV4ZXMgb2YgcmVsYXRpb24gZW50cmllcworICogaW4gaXRzIHJhbmdlIHRhYmxlIHRoYXQg d2VyZSBhY3R1YWxseSBsb2NrZWQsIG9yIE5VTEwgaWYgdGhlIFBsYW5uZWRTdG10CisgKiBjb250 YWlucyBhIHV0aWxpdHkgc3RhdGVtZW50LgogICovCiBzdGF0aWMgdm9pZAotQWNxdWlyZUV4ZWN1 dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpCitBY3F1aXJlRXhlY3V0b3JM b2NrcyhMaXN0ICpzdG10X2xpc3QsIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsCisJCQkJCSBM aXN0ICoqcGFydF9wcnVuZV9yZXN1bHRfbGlzdCwKKwkJCQkJIExpc3QgKipsb2NrZWRSZWxpZHNf cGVyX3N0bXQpCiB7CiAJTGlzdENlbGwgICAqbGMxOwogCisJKnBhcnRfcHJ1bmVfcmVzdWx0X2xp c3QgPSAqbG9ja2VkUmVsaWRzX3Blcl9zdG10ID0gTklMOwogCWZvcmVhY2gobGMxLCBzdG10X2xp c3QpCiAJewogCQlQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVk U3RtdCwgbGMxKTsKLQkJTGlzdENlbGwgICAqbGMyOworCQlQYXJ0aXRpb25QcnVuZVJlc3VsdCAq cGFydF9wcnVuZV9yZXN1bHQgPSBOVUxMOworCQlCaXRtYXBzZXQgICphbGxMb2NrUmVsaWRzOwor CQlCaXRtYXBzZXQgICpsb2NrZWRSZWxpZHMgPSBOVUxMOworCQlpbnQJCQlydGk7CiAKIAkJaWYg KHBsYW5uZWRzdG10LT5jb21tYW5kVHlwZSA9PSBDTURfVVRJTElUWSkKIAkJewpAQCAtMTc2MSwx MyArMTgzMywzNSBAQCBBY3F1aXJlRXhlY3V0b3JMb2NrcyhMaXN0ICpzdG10X2xpc3QsIGJvb2wg YWNxdWlyZSkKIAkJCVF1ZXJ5CSAgICpxdWVyeSA9IFV0aWxpdHlDb250YWluc1F1ZXJ5KHBsYW5u ZWRzdG10LT51dGlsaXR5U3RtdCk7CiAKIAkJCWlmIChxdWVyeSkKLQkJCQlTY2FuUXVlcnlGb3JM b2NrcyhxdWVyeSwgYWNxdWlyZSk7CisJCQkJU2NhblF1ZXJ5Rm9yTG9ja3MocXVlcnksIHRydWUp OworCQkJKnBhcnRfcHJ1bmVfcmVzdWx0X2xpc3QgPSBsYXBwZW5kKCpwYXJ0X3BydW5lX3Jlc3Vs dF9saXN0LCBOVUxMKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJZm9yZWFjaChsYzIsIHBsYW5u ZWRzdG10LT5ydGFibGUpCisJCS8qCisJCSAqIEZpZ3VyZSBvdXQgdGhlIHNldCBvZiByZWxhdGlv bnMgdGhhdCB3b3VsZCBuZWVkIHRvIGJlIGxvY2tlZAorCQkgKiBiZWZvcmUgZXhlY3V0aW5nIHRo ZSBwbGFuLgorCQkgKi8KKwkJaWYgKHBsYW5uZWRzdG10LT5jb250YWluc0luaXRpYWxQcnVuaW5n KQogCQl7Ci0JCQlSYW5nZVRibEVudHJ5ICpydGUgPSAoUmFuZ2VUYmxFbnRyeSAqKSBsZmlyc3Qo bGMyKTsKKwkJCS8qCisJCQkgKiBPYnRhaW4gdGhlIHNldCBvZiBwYXJ0aXRpb25zIHRvIGJlIGxv Y2tlZCBmcm9tIHRoZQorCQkJICogUGFydGl0aW9uUHJ1bmVJbmZvcyBieSBjb25zaWRlcmluZyB0 aGUgcmVzdWx0IG9mIHBlcmZvcm1pbmcKKwkJCSAqIGluaXRpYWwgcGFydGl0aW9uIHBydW5pbmcu CisJCQkgKi8KKwkJCVBhcnRpdGlvblBydW5lUmVzdWx0ICpwYXJ0X3BydW5lX3Jlc3VsdCA9CisJ CQkJRXhlY3V0b3JEb0luaXRpYWxQcnVuaW5nKHBsYW5uZWRzdG10LCBib3VuZFBhcmFtcyk7CisK KwkJCWFsbExvY2tSZWxpZHMgPSBibXNfdW5pb24ocGxhbm5lZHN0bXQtPm1pbkxvY2tSZWxpZHMs CisJCQkJCQkJCQkgIHBhcnRfcHJ1bmVfcmVzdWx0LT5zY2FuX2xlYWZwYXJ0X3J0aXMpOworCQl9 CisJCWVsc2UKKwkJCWFsbExvY2tSZWxpZHMgPSBwbGFubmVkc3RtdC0+bWluTG9ja1JlbGlkczsK KworCQlydGkgPSAtMTsKKwkJd2hpbGUgKChydGkgPSBibXNfbmV4dF9tZW1iZXIoYWxsTG9ja1Jl bGlkcywgcnRpKSkgPiAwKQorCQl7CisJCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChy dGksIHBsYW5uZWRzdG10LT5ydGFibGUpOwogCiAJCQlpZiAocnRlLT5ydGVraW5kICE9IFJURV9S RUxBVElPTikKIAkJCQljb250aW51ZTsKQEAgLTE3NzgsMTAgKzE4NzIsNTggQEAgQWNxdWlyZUV4 ZWN1dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpCiAJCQkgKiBmYWlsIGlm IGl0J3MgYmVlbiBkcm9wcGVkIGVudGlyZWx5IC0tLSB3ZSdsbCBqdXN0IHRyYW5zaWVudGx5CiAJ CQkgKiBhY3F1aXJlIGEgbm9uLWNvbmZsaWN0aW5nIGxvY2suCiAJCQkgKi8KLQkJCWlmIChhY3F1 aXJlKQotCQkJCUxvY2tSZWxhdGlvbk9pZChydGUtPnJlbGlkLCBydGUtPnJlbGxvY2ttb2RlKTsK LQkJCWVsc2UKLQkJCQlVbmxvY2tSZWxhdGlvbk9pZChydGUtPnJlbGlkLCBydGUtPnJlbGxvY2tt b2RlKTsKKwkJCUxvY2tSZWxhdGlvbk9pZChydGUtPnJlbGlkLCBydGUtPnJlbGxvY2ttb2RlKTsK KwkJCWxvY2tlZFJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKGxvY2tlZFJlbGlkcywgcnRpKTsKKwkJ fQorCisJCSpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0ID0gbGFwcGVuZCgqcGFydF9wcnVuZV9yZXN1 bHRfbGlzdCwKKwkJCQkJCQkJCQkgIHBhcnRfcHJ1bmVfcmVzdWx0KTsKKwkJKmxvY2tlZFJlbGlk c19wZXJfc3RtdCA9IGxhcHBlbmQoKmxvY2tlZFJlbGlkc19wZXJfc3RtdCwgbG9ja2VkUmVsaWRz KTsKKwl9Cit9CisKKy8qCisgKiBSZWxlYXNlRXhlY3V0b3JMb2NrcworICogCQlSZWxlYXNlIGxv Y2tzIHRoYXQgd291bGQndmUgYmVlbiBhY3F1aXJlZCBieSBhbiBlYXJsaWVyIGNhbGwgdG8KKyAq IAkJQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKQorICovCitzdGF0aWMgdm9pZAorUmVsZWFzZUV4ZWN1 dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBMaXN0ICpsb2NrZWRSZWxpZHNfcGVyX3N0bXQpCit7 CisJTGlzdENlbGwgICAqbGMxLAorCQkJICAgKmxjMjsKKworCWZvcmJvdGgobGMxLCBzdG10X2xp c3QsIGxjMiwgbG9ja2VkUmVsaWRzX3Blcl9zdG10KQorCXsKKwkJUGxhbm5lZFN0bXQgKnBsYW5u ZWRzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQsIGxjMSk7CisJCUJpdG1hcHNldCAgKmxv Y2tlZFJlbGlkcyA9IGxmaXJzdChsYzIpOworCQlpbnQJCQlydGk7CisKKwkJaWYgKHBsYW5uZWRz dG10LT5jb21tYW5kVHlwZSA9PSBDTURfVVRJTElUWSkKKwkJeworCQkJLyoKKwkJCSAqIElnbm9y ZSB1dGlsaXR5IHN0YXRlbWVudHMsIGV4Y2VwdCB0aG9zZSAoc3VjaCBhcyBFWFBMQUlOKSB0aGF0 CisJCQkgKiBjb250YWluIGEgcGFyc2VkLWJ1dC1ub3QtcGxhbm5lZCBxdWVyeS4gIE5vdGU6IGl0 J3Mgb2theSB0byB1c2UKKwkJCSAqIFNjYW5RdWVyeUZvckxvY2tzLCBldmVuIHRob3VnaCB0aGUg cXVlcnkgaGFzbid0IGJlZW4gdGhyb3VnaAorCQkJICogcnVsZSByZXdyaXRpbmcsIGJlY2F1c2Ug cmV3cml0aW5nIGRvZXNuJ3QgY2hhbmdlIHRoZSBxdWVyeQorCQkJICogcmVwcmVzZW50YXRpb24u CisJCQkgKi8KKwkJCVF1ZXJ5CSAgICpxdWVyeSA9IFV0aWxpdHlDb250YWluc1F1ZXJ5KHBsYW5u ZWRzdG10LT51dGlsaXR5U3RtdCk7CisKKwkJCWlmIChxdWVyeSkKKwkJCQlTY2FuUXVlcnlGb3JM b2NrcyhxdWVyeSwgZmFsc2UpOworCQkJY29udGludWU7CisJCX0KKworCQlydGkgPSAtMTsKKwkJ d2hpbGUgKChydGkgPSBibXNfbmV4dF9tZW1iZXIobG9ja2VkUmVsaWRzLCBydGkpKSA+PSAwKQor CQl7CisJCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHBsYW5uZWRzdG10LT5y dGFibGUpOworCisJCQlBc3NlcnQocnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTik7CisKKwkJ CS8qIFNlZSB0aGUgY29tbWVudCBpbiBBY3F1aXJlRXhlY3V0b3JMb2NrcygpLiAqLworCQkJVW5s b2NrUmVsYXRpb25PaWQocnRlLT5yZWxpZCwgcnRlLT5yZWxsb2NrbW9kZSk7CiAJCX0KIAl9CiB9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL3BvcnRhbG1lbS5jIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0uYwppbmRleCBkNTQ5ZjY2ZDRhLi4xYmJlNmI3MDRi IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL3BvcnRhbG1lbS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMKQEAgLTMwMyw2ICszMDMsMjUgQEAgUG9y dGFsRGVmaW5lUXVlcnkoUG9ydGFsIHBvcnRhbCwKIAlwb3J0YWwtPnN0YXR1cyA9IFBPUlRBTF9E RUZJTkVEOwogfQogCisvKgorICogUG9ydGFsU3RvcmVQYXJ0aXRpb25QcnVuZVJlc3VsdHMKKyAq CQlDb3B5IHRoZSBnaXZlbiBsaXN0IG9mIFBhcnRpdGlvblBydW5lUmVzdWx0cyBpbnRvIHRoZSBw b3J0YWwncworICoJCWNvbnRleHQKKyAqCisgKiBUaGlzIGFsbG93cyB0aGUgY2FsbGVyIHRvIGVu c3VyZSB0aGF0IHRoZSBsaXN0IGV4aXN0cyBhcyBsb25nIGFzIHRoZSBwb3J0YWwKKyAqIGRvZXMu CisgKi8KK3ZvaWQKK1BvcnRhbFN0b3JlUGFydGl0aW9uUHJ1bmVSZXN1bHRzKFBvcnRhbCBwb3J0 YWwsIExpc3QgKnBhcnRfcHJ1bmVfcmVzdWx0cykKK3sKKwlNZW1vcnlDb250ZXh0CW9sZGN4dDsK KworCUFzc2VydEFyZyhQb3J0YWxJc1ZhbGlkKHBvcnRhbCkpOworCW9sZGN4dCA9IE1lbW9yeUNv bnRleHRTd2l0Y2hUbyhwb3J0YWwtPnBvcnRhbENvbnRleHQpOworCXBvcnRhbC0+cGFydF9wcnVu ZV9yZXN1bHRzID0gY29weU9iamVjdChwYXJ0X3BydW5lX3Jlc3VsdHMpOworCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjeHQpOworfQorCiAvKgogICogUG9ydGFsUmVsZWFzZUNhY2hlZFBsYW4K ICAqCQlSZWxlYXNlIGEgcG9ydGFsJ3MgcmVmZXJlbmNlIHRvIGl0cyBjYWNoZWQgcGxhbiwgaWYg YW55LgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oIGIvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCmluZGV4IDY2Njk3N2ZiMWYuLjM0OTc1YzY5ZWUgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaAorKysgYi9zcmMvaW5jbHVk ZS9jb21tYW5kcy9leHBsYWluLmgKQEAgLTg3LDcgKzg3LDggQEAgZXh0ZXJuIHZvaWQgRXhwbGFp bk9uZVV0aWxpdHkoTm9kZSAqdXRpbGl0eVN0bXQsIEludG9DbGF1c2UgKmludG8sCiAJCQkJCQkJ ICBFeHBsYWluU3RhdGUgKmVzLCBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKIAkJCQkJCQkgIFBh cmFtTGlzdEluZm8gcGFyYW1zLCBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudik7CiAKLWV4dGVy biB2b2lkIEV4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVz ZSAqaW50bywKK2V4dGVybiB2b2lkIEV4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVk c3RtdCwgUGFydGl0aW9uUHJ1bmVSZXN1bHQgKnBhcnRfcHJ1bmVfcmVzdWwsCisJCQkJCQkgICBJ bnRvQ2xhdXNlICppbnRvLAogCQkJCQkJICAgRXhwbGFpblN0YXRlICplcywgY29uc3QgY2hhciAq cXVlcnlTdHJpbmcsCiAJCQkJCQkgICBQYXJhbUxpc3RJbmZvIHBhcmFtcywgUXVlcnlFbnZpcm9u bWVudCAqcXVlcnlFbnYsCiAJCQkJCQkgICBjb25zdCBpbnN0cl90aW1lICpwbGFuZHVyYXRpb24s CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmggYi9zcmMv aW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKaW5kZXggNzA4NDM1ZTk1Mi4uYmQ4Nzc2 NDAyZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oCisr KyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaApAQCAtNDUsNiArNDUsNyBA QCBleHRlcm4gdm9pZCBFeGVjQ2xlYW51cFR1cGxlUm91dGluZyhNb2RpZnlUYWJsZVN0YXRlICpt dHN0YXRlLAogICogbnBhcnRzCQkJCQkJTGVuZ3RoIG9mIHN1YnBsYW5fbWFwW10gYW5kIHN1YnBh cnRfbWFwW10uCiAgKiBzdWJwbGFuX21hcAkJCQkJU3VicGxhbiBpbmRleCBieSBwYXJ0aXRpb24g aW5kZXgsIG9yIC0xLgogICogc3VicGFydF9tYXAJCQkJCVN1YnBhcnQgaW5kZXggYnkgcGFydGl0 aW9uIGluZGV4LCBvciAtMS4KKyAqIHJ0aV9tYXAJCQkJCQlSYW5nZSB0YWJsZSBpbmRleCBieSBw YXJ0aXRpb24gaW5kZXgsIG9yIDAuCiAgKiBwcmVzZW50X3BhcnRzCQkJCUEgQml0bWFwc2V0IG9m IHRoZSBwYXJ0aXRpb24gaW5kZXhlcyB0aGF0IHdlCiAgKgkJCQkJCQkJaGF2ZSBzdWJwbGFucyBv ciBzdWJwYXJ0cyBmb3IuCiAgKiBpbml0aWFsX3BydW5pbmdfc3RlcHMJCUxpc3Qgb2YgUGFydGl0 aW9uUHJ1bmVTdGVwcyB1c2VkIHRvCkBAIC02MSw2ICs2Miw3IEBAIHR5cGVkZWYgc3RydWN0IFBh cnRpdGlvbmVkUmVsUHJ1bmluZ0RhdGEKIAlpbnQJCQlucGFydHM7CiAJaW50CQkgICAqc3VicGxh bl9tYXA7CiAJaW50CQkgICAqc3VicGFydF9tYXA7CisJSW5kZXgJICAgKnJ0aV9tYXA7CiAJQml0 bWFwc2V0ICAqcHJlc2VudF9wYXJ0czsKIAlMaXN0CSAgICppbml0aWFsX3BydW5pbmdfc3RlcHM7 CiAJTGlzdAkgICAqZXhlY19wcnVuaW5nX3N0ZXBzOwpAQCAtMTIzLDkgKzEyNSwxMyBAQCB0eXBl ZGVmIHN0cnVjdCBQYXJ0aXRpb25QcnVuZVN0YXRlCiAKIGV4dGVybiBQYXJ0aXRpb25QcnVuZVN0 YXRlICpFeGVjSW5pdFBhcnRpdGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkJ CQkJCQkJCQkJIGludCBuX3RvdGFsX3N1YnBsYW5zLAotCQkJCQkJCQkJCQkJCSBQYXJ0aXRpb25Q cnVuZUluZm8gKnBydW5laW5mbywKKwkJCQkJCQkJCQkJCQkgaW50IHBhcnRfcHJ1bmVfaW5kZXgs CiAJCQkJCQkJCQkJCQkJIEJpdG1hcHNldCAqKmluaXRpYWxseV92YWxpZF9zdWJwbGFucyk7CiBl eHRlcm4gQml0bWFwc2V0ICpFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVT dGF0ZSAqcHJ1bmVzdGF0ZSwKLQkJCQkJCQkJCQkgICBib29sIGluaXRpYWxfcHJ1bmUpOwotCisJ CQkJCQkJCQkJICAgYm9vbCBpbml0aWFsX3BydW5lLAorCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAq KnNjYW5fbGVhZnBhcnRfcnRpcyk7CitleHRlcm4gQml0bWFwc2V0ICpFeGVjUGFydGl0aW9uRG9J bml0aWFsUHJ1bmluZyhQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsCisJCQkJCQkJCVBhcmFtTGlz dEluZm8gcGFyYW1zLAorCQkJCQkJCQlQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbywKKwkJ CQkJCQkJQml0bWFwc2V0ICoqc2Nhbl9sZWFmcGFydF9ydGlzKTsKICNlbmRpZgkJCQkJCQkvKiBF WEVDUEFSVElUSU9OX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNk ZXNjLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oCmluZGV4IGU3OWUyYzAwMWYu LjYwZDU2NDQ5MDggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNkZXNjLmgK KysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaApAQCAtMzUsNiArMzUsOCBAQCB0 eXBlZGVmIHN0cnVjdCBRdWVyeURlc2MKIAkvKiBUaGVzZSBmaWVsZHMgYXJlIHByb3ZpZGVkIGJ5 IENyZWF0ZVF1ZXJ5RGVzYyAqLwogCUNtZFR5cGUJCW9wZXJhdGlvbjsJCS8qIENNRF9TRUxFQ1Qs IENNRF9VUERBVEUsIGV0Yy4gKi8KIAlQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQ7CS8qIHBsYW5u ZXIncyBvdXRwdXQgKGNvdWxkIGJlIHV0aWxpdHksIHRvbykgKi8KKwlQYXJ0aXRpb25QcnVuZVJl c3VsdCAqcGFydF9wcnVuZV9yZXN1bHQ7IC8qIEV4ZWN1dG9yRG9Jbml0aWFsUHJ1bmluZygpJ3MK KwkJCQkJCQkJCQkJICAqIG91dHB1dCBmb3IgcGxhbm5lZHN0bXQgKi8KIAljb25zdCBjaGFyICpz b3VyY2VUZXh0OwkJLyogc291cmNlIHRleHQgb2YgdGhlIHF1ZXJ5ICovCiAJU25hcHNob3QJc25h cHNob3Q7CQkvKiBzbmFwc2hvdCB0byB1c2UgZm9yIHF1ZXJ5ICovCiAJU25hcHNob3QJY3Jvc3Nj aGVja19zbmFwc2hvdDsJLyogY3Jvc3NjaGVjayBmb3IgUkkgdXBkYXRlL2RlbGV0ZSAqLwpAQCAt NTcsNiArNTksNyBAQCB0eXBlZGVmIHN0cnVjdCBRdWVyeURlc2MKIAogLyogaW4gcHF1ZXJ5LmMg Ki8KIGV4dGVybiBRdWVyeURlc2MgKkNyZWF0ZVF1ZXJ5RGVzYyhQbGFubmVkU3RtdCAqcGxhbm5l ZHN0bXQsCisJCQkJCQkJCSAgUGFydGl0aW9uUHJ1bmVSZXN1bHQgKnBhcnRfcHJ1bmVfcmVzdWx0 LAogCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsCiAJCQkJCQkJCSAgU25hcHNob3Qg c25hcHNob3QsCiAJCQkJCQkJCSAgU25hcHNob3QgY3Jvc3NjaGVja19zbmFwc2hvdCwKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggYi9zcmMvaW5jbHVkZS9leGVj dXRvci9leGVjdXRvci5oCmluZGV4IDg3Mzc3MmYxODguLjU3ZGMwZTgwNzcgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY3V0b3IuaApAQCAtMTg1LDYgKzE4NSw4IEBAIEV4ZWNHZXRKdW5rQXR0cmlidXRlKFR1 cGxlVGFibGVTbG90ICpzbG90LCBBdHRyTnVtYmVyIGF0dG5vLCBib29sICppc051bGwpCiAvKgog ICogcHJvdG90eXBlcyBmcm9tIGZ1bmN0aW9ucyBpbiBleGVjTWFpbi5jCiAgKi8KK2V4dGVybiBQ YXJ0aXRpb25QcnVuZVJlc3VsdCAqRXhlY3V0b3JEb0luaXRpYWxQcnVuaW5nKFBsYW5uZWRTdG10 ICpwbGFubmVkc3RtdCwKKwkJCQkJCQkJCQkJCQkgIFBhcmFtTGlzdEluZm8gcGFyYW1zKTsKIGV4 dGVybiB2b2lkIEV4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3Mp OwogZXh0ZXJuIHZvaWQgc3RhbmRhcmRfRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVz YywgaW50IGVmbGFncyk7CiBleHRlcm4gdm9pZCBFeGVjdXRvclJ1bihRdWVyeURlc2MgKnF1ZXJ5 RGVzYywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggY2JiY2ZmODFkMi4uM2RlNGRmMWIwNSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUv bm9kZXMvZXhlY25vZGVzLmgKQEAgLTU5Niw2ICs1OTYsOCBAQCB0eXBlZGVmIHN0cnVjdCBFU3Rh dGUKIAlzdHJ1Y3QgRXhlY1Jvd01hcmsgKiplc19yb3dtYXJrczsJLyogQXJyYXkgb2YgcGVyLXJh bmdlLXRhYmxlLWVudHJ5CiAJCQkJCQkJCQkJICogRXhlY1Jvd01hcmtzLCBvciBOVUxMIGlmIG5v bmUgKi8KIAlQbGFubmVkU3RtdCAqZXNfcGxhbm5lZHN0bXQ7CS8qIGxpbmsgdG8gdG9wIG9mIHBs YW4gdHJlZSAqLworCUxpc3QJCSplc19wYXJ0X3BydW5lX2luZm9zOwkvKiBQbGFubmVkU3RtdC5w YXJ0UHJ1bmVJbmZvcyAqLworCXN0cnVjdCBQYXJ0aXRpb25QcnVuZVJlc3VsdCAqZXNfcGFydF9w cnVuZV9yZXN1bHQ7IC8qIFF1ZXJ5RGVzYy5wYXJ0X3BydW5lX3Jlc3VsdCAqLwogCWNvbnN0IGNo YXIgKmVzX3NvdXJjZVRleHQ7CS8qIFNvdXJjZSB0ZXh0IGZyb20gUXVlcnlEZXNjICovCiAKIAlK dW5rRmlsdGVyICplc19qdW5rRmlsdGVyOwkvKiB0b3AtbGV2ZWwganVuayBmaWx0ZXIsIGlmIGFu eSAqLwpAQCAtOTg0LDYgKzk4NiwzNCBAQCB0eXBlZGVmIHN0cnVjdCBEb21haW5Db25zdHJhaW50 U3RhdGUKICAqLwogdHlwZWRlZiBUdXBsZVRhYmxlU2xvdCAqKCpFeGVjUHJvY05vZGVNdGQpIChz dHJ1Y3QgUGxhblN0YXRlICpwc3RhdGUpOwogCisvKi0tLS0tLS0tLS0tLS0tLS0KKyAqIFBhcnRp dGlvblBydW5lUmVzdWx0CisgKgorICogVGhlIHJlc3VsdCBvZiBwZXJmb3JtaW5nIEV4ZWN1dG9y RG9Jbml0aWFsUHJ1bmluZygpIGludm9jYXRpb24gb24gYSBnaXZlbgorICogUGxhbm5lZFN0bXQu CisgKgorICogQ29udGFpbnMgYSBsaXN0IG9mIEJpdG1hcHNldCBvZiB0aGUgaW5kZXhlcyBvZiB0 aGUgc3VicGxhbnMgcmVtYWluaW5nIGFmdGVyCisgKiBwZXJmb3JtaW5nIGluaXRpYWwgcHJ1bmlu ZyBieSBjYWxsaW5nIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucygpIGZvciBldmVyeQorICogUGFy dGl0aW9uUHJ1bmVJbmZvcyBmb3VuZCBpbiBQbGFubmVkU3RtdC5wYXJ0UHJ1bmVJbmZvcy4gIFJU IGluZGV4ZXMgb2YgdGhlCisgKiBsZWFmIHBhcnRpdGlvbnMgc2Nhbm5lZCBieSB0aG9zZSBzdWJw bGFucyBhY3Jvc3MgYWxsIFBhcnRpdGlvblBydW5lSW5mb3MKKyAqIGFyZSBhZGRlZCBpbnRvIHNj YW5fbGVhZnBhcnRfcnRpcy4KKyAqCisgKiBUaGlzIGlzIHVzZWQgYnkgR2V0Q2FjaGVkUGxhbigp IHRvIGluZm9ybSBpdHMgY2FsbGVycyBvZiB0aGUgcHJ1bmluZworICogZGVjaXNpb25zIG1hZGUg d2hlbiBwZXJmb3JtaW5nIEFjcXVpcmVFeGVjdXRvckxvY2tzKCkgb24gYSBnaXZlbiBjYWNoZWQK KyAqIFBsYW5uZWRTdG10LCB3aGljaCB0aGUgY2FsbGVycyB0aGVuIHBhc3MgdGhhdCBvbiB0byB0 aGUgZXhlY3V0b3IuICBUaGUKKyAqIGV4ZWN1dG9yIHJlZmVycyB0byB0aGlzIG5vZGUgd2hlbiBt YWRlIGF2YWlsYWJsZSB3aGVuIGluaXRpYWxpemluZyB0aGUgcGxhbgorICogbm9kZXMgdG8gd2hp Y2ggdGhvc2UgUGFydGl0aW9uUHJ1bmVJbmZvcyBhcHBseSBzbyB0aGF0IHRoZSBzYW1lIHNldCBv ZgorICogcXVhbGlmeWluZyBzdWJwbGFucyBhcmUgaW5pdGlhbGl6ZWQsIHJhdGhlciB0aGFuIGRl cml2aW5nIHRoYXQgc2V0IGFnYWluIGJ5CisgKiByZWRvaW5nIGluaXRpYWwgcHJ1bmluZy4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVSZXN1bHQKK3sKKwlOb2RlVGFnCQl0eXBl OworCisJTGlzdAkJICAgKnZhbGlkX3N1YnBsYW5fb2Zmc19saXN0OworCUJpdG1hcHNldAkgICAq c2Nhbl9sZWFmcGFydF9ydGlzOworfSBQYXJ0aXRpb25QcnVuZVJlc3VsdDsKKwogLyogLS0tLS0t LS0tLS0tLS0tLQogICoJCVBsYW5TdGF0ZSBub2RlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvbm9kZXMvbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKaW5kZXggMzAwODI0 MjU4ZS4uZGUzMTJiOTIxNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAor KysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCkBAIC05Nyw2ICs5Nyw5IEBAIHR5cGVkZWYg ZW51bSBOb2RlVGFnCiAJVF9QYXJ0aXRpb25QcnVuZVN0ZXBDb21iaW5lLAogCVRfUGxhbkludmFs SXRlbSwKIAorCS8qIFRBR1MgRk9SIEVYRUNVVE9SIFBSRVAgTk9ERVMgKGV4ZWNub2Rlcy5oKSAq LworCVRfUGFydGl0aW9uUHJ1bmVSZXN1bHQsCisKIAkvKgogCSAqIFRBR1MgRk9SIFBMQU4gU1RB VEUgTk9ERVMgKGV4ZWNub2Rlcy5oKQogCSAqCkBAIC02NzMsNiArNjc2LDcgQEAgZXh0ZXJuIHN0 cnVjdCBCaXRtYXBzZXQgKnJlYWRCaXRtYXBzZXQodm9pZCk7CiBleHRlcm4gdWludHB0cl90IHJl YWREYXR1bShib29sIHR5cGJ5dmFsKTsKIGV4dGVybiBib29sICpyZWFkQm9vbENvbHMoaW50IG51 bUNvbHMpOwogZXh0ZXJuIGludCAqcmVhZEludENvbHMoaW50IG51bUNvbHMpOworZXh0ZXJuIElu ZGV4ICpyZWFkSW5kZXhDb2xzKGludCBudW1Db2xzKTsKIGV4dGVybiBPaWQgKnJlYWRPaWRDb2xz KGludCBudW1Db2xzKTsKIGV4dGVybiBpbnQxNiAqcmVhZEF0dHJOdW1iZXJDb2xzKGludCBudW1D b2xzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCA2Y2JjYjY3YmRmLi5kOWM0ODJlMDhiIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVk ZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTA3LDYgKzEwNywxOCBAQCB0eXBlZGVmIHN0cnVjdCBQ bGFubmVyR2xvYmFsCiAKIAlMaXN0CSAgICphcHBlbmRSZWxhdGlvbnM7CS8qICJmbGF0IiBsaXN0 IG9mIEFwcGVuZFJlbEluZm9zICovCiAKKwlMaXN0CSAgICpwYXJ0UHJ1bmVJbmZvczsJCS8qIExp c3Qgb2YgUGFydGl0aW9uUHJ1bmVJbmZvIGNvbnRhaW5lZCBpbgorCQkJCQkJCQkJICogdGhlIHBs YW4gKi8KKworCWJvb2wJCWNvbnRhaW5zSW5pdGlhbFBydW5pbmc7CS8qIERvIGFueSBvZiB0aG9z ZSBQYXJ0aXRpb25QcnVuZUluZm9zCisJCQkJCQkJCQkJICogaGF2ZSBpbml0aWFsIChwcmUtZXhl YykgcHJ1bmluZworCQkJCQkJCQkJCSAqIHN0ZXBzIGluIHRoZW0/ICovCisKKwlCaXRtYXBzZXQg ICptaW5Mb2NrUmVsaWRzOwkvKiBJbmRleGVzIG9mIGFsbCByYW5nZSB0YWJsZSBlbnRyaWVzIG1p bnVzCisJCQkJCQkJCSAqIGluZGV4ZXMgb2YgcmFuZ2UgdGFibGUgZW50cmllcyBvZiB0aGUgbGVh ZgorCQkJCQkJCQkgKiBwYXJ0aXRpb25zIHNjYW5uZWQgYnkgcHJ1bmFibGUgc3VicGxhbnM7CisJ CQkJCQkJCSAqIHNlZSBBY3F1aXJlRXhlY3V0b3JMb2NrcygpICovCisKIAlMaXN0CSAgICpyZWxh dGlvbk9pZHM7CS8qIE9JRHMgb2YgcmVsYXRpb25zIHRoZSBwbGFuIGRlcGVuZHMgb24gKi8KIAog CUxpc3QJICAgKmludmFsSXRlbXM7CQkvKiBvdGhlciBkZXBlbmRlbmNpZXMsIGFzIFBsYW5JbnZh bEl0ZW1zICovCkBAIC0zNzcsNiArMzg5LDkgQEAgc3RydWN0IFBsYW5uZXJJbmZvCiAKIAkvKiBE b2VzIHRoaXMgcXVlcnkgbW9kaWZ5IGFueSBwYXJ0aXRpb24ga2V5IGNvbHVtbnM/ICovCiAJYm9v bAkJcGFydENvbHNVcGRhdGVkOworCisJLyogUGFydGl0aW9uUHJ1bmVJbmZvcyBhZGRlZCBpbiB0 aGlzIHF1ZXJ5J3MgcGxhbi4gKi8KKwlMaXN0CSAgICpwYXJ0UHJ1bmVJbmZvczsKIH07CiAKIApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5jbHVkZS9u b2Rlcy9wbGFubm9kZXMuaAppbmRleCAxMGRkMzVmMDExLi40NDk5N2Q1OTVkIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9w bGFubm9kZXMuaApAQCAtNjQsOCArNjQsMjAgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhbm5lZFN0bXQK IAogCXN0cnVjdCBQbGFuICpwbGFuVHJlZTsJCS8qIHRyZWUgb2YgUGxhbiBub2RlcyAqLwogCisJ TGlzdAkgICAqcGFydFBydW5lSW5mb3M7CS8qIExpc3Qgb2YgUGFydGl0aW9uUHJ1bmVJbmZvIGNv bnRhaW5lZCBpbgorCQkJCQkJCQkgKiB0aGUgcGxhbiAqLworCisJYm9vbAkJY29udGFpbnNJbml0 aWFsUHJ1bmluZzsJLyogRG8gYW55IG9mIHRob3NlIFBhcnRpdGlvblBydW5lSW5mb3MKKwkJCQkJ CQkJCQkgKiBoYXZlIGluaXRpYWwgKHByZS1leGVjKSBwcnVuaW5nCisJCQkJCQkJCQkJICogc3Rl cHMgaW4gdGhlbT8gKi8KKwogCUxpc3QJICAgKnJ0YWJsZTsJCQkvKiBsaXN0IG9mIFJhbmdlVGJs RW50cnkgbm9kZXMgKi8KIAorCUJpdG1hcHNldCAgKm1pbkxvY2tSZWxpZHM7CS8qIEluZGV4ZXMg b2YgYWxsIHJhbmdlIHRhYmxlIGVudHJpZXMgbWludXMKKwkJCQkJCQkJICogaW5kZXhlcyBvZiBy YW5nZSB0YWJsZSBlbnRyaWVzIG9mIHRoZSBsZWFmCisJCQkJCQkJCSAqIHBhcnRpdGlvbnMgc2Nh bm5lZCBieSBwcnVuYWJsZSBzdWJwbGFuczsKKwkJCQkJCQkJICogc2VlIEFjcXVpcmVFeGVjdXRv ckxvY2tzKCkgKi8KKwogCS8qIHJ0YWJsZSBpbmRleGVzIG9mIHRhcmdldCByZWxhdGlvbnMgZm9y IElOU0VSVC9VUERBVEUvREVMRVRFICovCiAJTGlzdAkgICAqcmVzdWx0UmVsYXRpb25zOwkvKiBp bnRlZ2VyIGxpc3Qgb2YgUlQgaW5kZXhlcywgb3IgTklMICovCiAKQEAgLTI2Miw4ICsyNzQsMTIg QEAgdHlwZWRlZiBzdHJ1Y3QgQXBwZW5kCiAJICovCiAJaW50CQkJZmlyc3RfcGFydGlhbF9wbGFu OwogCi0JLyogSW5mbyBmb3IgcnVuLXRpbWUgc3VicGxhbiBwcnVuaW5nOyBOVUxMIGlmIHdlJ3Jl IG5vdCBkb2luZyB0aGF0ICovCi0Jc3RydWN0IFBhcnRpdGlvblBydW5lSW5mbyAqcGFydF9wcnVu ZV9pbmZvOworCS8qCisJICogSW5kZXggb2YgdGhpcyBwbGFuJ3MgUGFydGl0aW9uUHJ1bmVJbmZv IGluIFBsYW5uZWRTdG10LnBhcnRQcnVuZUluZm9zCisJICogdG8gYmUgdXNlZCBmb3IgcnVuLXRp bWUgc3VicGxhbiBwcnVuaW5nOyAtMSBpZiBydW4tdGltZSBwcnVuaW5nIGlzCisJICogbm90IG5l ZWRlZC4KKwkgKi8KKwlpbnQJCQlwYXJ0X3BydW5lX2luZGV4OwogfSBBcHBlbmQ7CiAKIC8qIC0t LS0tLS0tLS0tLS0tLS0KQEAgLTI4Miw4ICsyOTgsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VB cHBlbmQKIAlPaWQJCSAgICpzb3J0T3BlcmF0b3JzOwkvKiBPSURzIG9mIG9wZXJhdG9ycyB0byBz b3J0IHRoZW0gYnkgKi8KIAlPaWQJCSAgICpjb2xsYXRpb25zOwkJLyogT0lEcyBvZiBjb2xsYXRp b25zICovCiAJYm9vbAkgICAqbnVsbHNGaXJzdDsJCS8qIE5VTExTIEZJUlNUL0xBU1QgZGlyZWN0 aW9ucyAqLwotCS8qIEluZm8gZm9yIHJ1bi10aW1lIHN1YnBsYW4gcHJ1bmluZzsgTlVMTCBpZiB3 ZSdyZSBub3QgZG9pbmcgdGhhdCAqLwotCXN0cnVjdCBQYXJ0aXRpb25QcnVuZUluZm8gKnBhcnRf cHJ1bmVfaW5mbzsKKworCS8qCisJICogSW5kZXggb2YgdGhpcyBwbGFuJ3MgUGFydGl0aW9uUHJ1 bmVJbmZvIGluIFBsYW5uZWRTdG10LnBhcnRQcnVuZUluZm9zCisJICogdG8gYmUgdXNlZCBmb3Ig cnVuLXRpbWUgc3VicGxhbiBwcnVuaW5nOyAtMSBpZiBydW4tdGltZSBwcnVuaW5nIGlzCisJICog bm90IG5lZWRlZC4KKwkgKi8KKwlpbnQJCQlwYXJ0X3BydW5lX2luZGV4OwogfSBNZXJnZUFwcGVu ZDsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTE4Nyw2ICsxMjA4LDEzIEBAIHR5cGVkZWYg c3RydWN0IFBsYW5Sb3dNYXJrCiAgKiBwcnVuZV9pbmZvcwkJCUxpc3Qgb2YgTGlzdHMgY29udGFp bmluZyBQYXJ0aXRpb25lZFJlbFBydW5lSW5mbyBub2RlcywKICAqCQkJCQkJb25lIHN1Ymxpc3Qg cGVyIHJ1bi10aW1lLXBydW5hYmxlIHBhcnRpdGlvbiBoaWVyYXJjaHkKICAqCQkJCQkJYXBwZWFy aW5nIGluIHRoZSBwYXJlbnQgcGxhbiBub2RlJ3Mgc3VicGxhbnMuCisgKgorICogbmVlZHNfaW5p dF9wcnVuaW5nCURvZXMgYW55IG9mIHRoZSBQYXJ0aXRpb25lZFJlbFBydW5lSW5mb3MgaW4KKyAq CQkJCQkJcHJ1bmVfaW5mb3MgaGF2ZSBpdHMgaW5pdGlhbF9wcnVuaW5nX3N0ZXBzIHNldD8KKyAq CisgKiBuZWVkc19leGVjX3BydW5pbmcJRG9lcyBhbnkgb2YgdGhlIFBhcnRpdGlvbmVkUmVsUHJ1 bmVJbmZvcyBpbgorICoJCQkJCQlwcnVuZV9pbmZvcyBoYXZlIGl0cyBleGVjX3BydW5pbmdfc3Rl cHMgc2V0PworICoKICAqIG90aGVyX3N1YnBsYW5zCQlJbmRleGVzIG9mIGFueSBzdWJwbGFucyB0 aGF0IGFyZSBub3QgYWNjb3VudGVkIGZvcgogICoJCQkJCQlieSBhbnkgb2YgdGhlIFBhcnRpdGlv bmVkUmVsUHJ1bmVJbmZvIG5vZGVzIGluCiAgKgkJCQkJCSJwcnVuZV9pbmZvcyIuICBUaGVzZSBz dWJwbGFucyBtdXN0IG5vdCBiZSBwcnVuZWQuCkBAIC0xMTk1LDYgKzEyMjMsOCBAQCB0eXBlZGVm IHN0cnVjdCBQYXJ0aXRpb25QcnVuZUluZm8KIHsKIAlOb2RlVGFnCQl0eXBlOwogCUxpc3QJICAg KnBydW5lX2luZm9zOworCWJvb2wJCW5lZWRzX2luaXRfcHJ1bmluZzsKKwlib29sCQluZWVkc19l eGVjX3BydW5pbmc7CiAJQml0bWFwc2V0ICAqb3RoZXJfc3VicGxhbnM7CiB9IFBhcnRpdGlvblBy dW5lSW5mbzsKIApAQCAtMTIyNSw2ICsxMjU1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9u ZWRSZWxQcnVuZUluZm8KIAlpbnQJCSAgICpzdWJwbGFuX21hcDsJLyogc3VicGxhbiBpbmRleCBi eSBwYXJ0aXRpb24gaW5kZXgsIG9yIC0xICovCiAJaW50CQkgICAqc3VicGFydF9tYXA7CS8qIHN1 YnBhcnQgaW5kZXggYnkgcGFydGl0aW9uIGluZGV4LCBvciAtMSAqLwogCU9pZAkJICAgKnJlbGlk X21hcDsJCS8qIHJlbGF0aW9uIE9JRCBieSBwYXJ0aXRpb24gaW5kZXgsIG9yIDAgKi8KKwlJbmRl eAkgICAqcnRpX21hcDsJCS8qIFJhbmdlIHRhYmxlIGluZGV4IGJ5IHBhcnRpdGlvbiBpbmRleCwg MC4gKi8KIAogCS8qCiAJICogaW5pdGlhbF9wcnVuaW5nX3N0ZXBzIHNob3dzIGhvdyB0byBwcnVu ZSBkdXJpbmcgZXhlY3V0b3Igc3RhcnR1cCAoaS5lLiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuaCBiL3NyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0 cHJ1bmUuaAppbmRleCA5MDY4NGVmYTI1Li5lYmYwZGNmZjhjIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmgKKysrIGIvc3JjL2luY2x1ZGUvcGFydGl0aW9u aW5nL3BhcnRwcnVuZS5oCkBAIC03MCwxMCArNzAsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0 aW9uUHJ1bmVDb250ZXh0CiAjZGVmaW5lIFBydW5lQ3h0U3RhdGVJZHgocGFydG5hdHRzLCBzdGVw X2lkLCBrZXlubykgXAogCSgocGFydG5hdHRzKSAqIChzdGVwX2lkKSArIChrZXlubykpCiAKLWV4 dGVybiBQYXJ0aXRpb25QcnVuZUluZm8gKm1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhzdHJ1Y3Qg UGxhbm5lckluZm8gKnJvb3QsCi0JCQkJCQkJCQkJCQkJc3RydWN0IFJlbE9wdEluZm8gKnBhcmVu dHJlbCwKLQkJCQkJCQkJCQkJCQlMaXN0ICpzdWJwYXRocywKLQkJCQkJCQkJCQkJCQlMaXN0ICpw cnVuZXF1YWwpOworZXh0ZXJuIGludCBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8oc3RydWN0IFBs YW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJc3RydWN0IFJlbE9wdEluZm8gKnBhcmVudHJlbCwK KwkJCQkJCQkJCUxpc3QgKnN1YnBhdGhzLAorCQkJCQkJCQkJTGlzdCAqcHJ1bmVxdWFsKTsKIGV4 dGVybiBCaXRtYXBzZXQgKnBydW5lX2FwcGVuZF9yZWxfcGFydGl0aW9ucyhzdHJ1Y3QgUmVsT3B0 SW5mbyAqcmVsKTsKIGV4dGVybiBCaXRtYXBzZXQgKmdldF9tYXRjaGluZ19wYXJ0aXRpb25zKFBh cnRpdGlvblBydW5lQ29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJCQkgIExpc3QgKnBydW5pbmdf c3RlcHMpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmggYi9zcmMv aW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaAppbmRleCA5NWI5OWUzZDI1Li40NDkyMDBiOTQ5IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaAorKysgYi9zcmMvaW5jbHVk ZS91dGlscy9wbGFuY2FjaGUuaApAQCAtMjIwLDcgKzIyMCw4IEBAIGV4dGVybiBMaXN0ICpDYWNo ZWRQbGFuR2V0VGFyZ2V0TGlzdChDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLAogZXh0ZXJu IENhY2hlZFBsYW4gKkdldENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwK IAkJCQkJCQkJIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsCiAJCQkJCQkJCSBSZXNvdXJjZU93 bmVyIG93bmVyLAotCQkJCQkJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpOworCQkJCQkJ CQkgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCisJCQkJCQkJCSBMaXN0ICoqcGFydF9wcnVu ZV9yZXN1bHRfbGlzdCk7CiBleHRlcm4gdm9pZCBSZWxlYXNlQ2FjaGVkUGxhbihDYWNoZWRQbGFu ICpwbGFuLCBSZXNvdXJjZU93bmVyIG93bmVyKTsKIAogZXh0ZXJuIGJvb2wgQ2FjaGVkUGxhbkFs bG93c1NpbXBsZVZhbGlkaXR5Q2hlY2soQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3BvcnRhbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMv cG9ydGFsLmgKaW5kZXggYWVkZGJkYWZlNS4uOWY3NzI3YTgzNyAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvdXRpbHMvcG9ydGFsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmgKQEAg LTEzOCw2ICsxMzgsNyBAQCB0eXBlZGVmIHN0cnVjdCBQb3J0YWxEYXRhCiAJUXVlcnlDb21wbGV0 aW9uIHFjOwkJCS8qIGNvbW1hbmQgY29tcGxldGlvbiBkYXRhIGZvciBleGVjdXRlZCBxdWVyeSAq LwogCUxpc3QJICAgKnN0bXRzOwkJCS8qIGxpc3Qgb2YgUGxhbm5lZFN0bXRzICovCiAJQ2FjaGVk UGxhbiAqY3BsYW47CQkJLyogQ2FjaGVkUGxhbiwgaWYgc3RtdHMgYXJlIGZyb20gb25lICovCisJ TGlzdAkgICAqcGFydF9wcnVuZV9yZXN1bHRzOwkvKiBsaXN0IG9mIFBhcnRpdGlvblBydW5lUmVz dWx0cyAqLwogCiAJUGFyYW1MaXN0SW5mbyBwb3J0YWxQYXJhbXM7IC8qIHBhcmFtcyB0byBwYXNz IHRvIHF1ZXJ5ICovCiAJUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnY7IC8qIGVudmlyb25tZW50 IGZvciBxdWVyeSAqLwpAQCAtMjQyLDYgKzI0Myw4IEBAIGV4dGVybiB2b2lkIFBvcnRhbERlZmlu ZVF1ZXJ5KFBvcnRhbCBwb3J0YWwsCiAJCQkJCQkJICBDb21tYW5kVGFnIGNvbW1hbmRUYWcsCiAJ CQkJCQkJICBMaXN0ICpzdG10cywKIAkJCQkJCQkgIENhY2hlZFBsYW4gKmNwbGFuKTsKK2V4dGVy biB2b2lkIFBvcnRhbFN0b3JlUGFydGl0aW9uUHJ1bmVSZXN1bHRzKFBvcnRhbCBwb3J0YWwsCisJ CQkJCQkJCQkJCSBMaXN0ICpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0KTsKIGV4dGVybiBQbGFubmVk U3RtdCAqUG9ydGFsR2V0UHJpbWFyeVN0bXQoUG9ydGFsIHBvcnRhbCk7CiBleHRlcm4gdm9pZCBQ b3J0YWxDcmVhdGVIb2xkU3RvcmUoUG9ydGFsIHBvcnRhbCk7CiBleHRlcm4gdm9pZCBQb3J0YWxI YXNoVGFibGVEZWxldGVBbGwodm9pZCk7Ci0tIAoyLjI0LjEKCg== --0000000000000c302505dc1e2a07--