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 1pNaut-00073G-7p for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Feb 2023 14:50:23 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pNaus-0007XN-3W for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Feb 2023 14:50:22 +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 1pNaur-0007Wx-Jo for pgsql-hackers@lists.postgresql.org; Thu, 02 Feb 2023 14:50:21 +0000 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pNauo-0006zw-C7 for pgsql-hackers@postgresql.org; Thu, 02 Feb 2023 14:50:21 +0000 Received: by mail-pg1-x536.google.com with SMTP id q9so1486320pgq.5 for ; Thu, 02 Feb 2023 06:50:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=xPDf02BBrVMPRsoJJxM/xTHLeYMlBKjOcjjkL0t+HIw=; b=V/LXDxcaCGRCgKmC0fhPP+CDrPYOwbTdbdh6ppsIomJLf3hs6X+zYh2jfRtBF3lzwv d1pN8VlxyncCBJW3cl1+4Vbx/e8QlxjnESR3Huhv4/5GDIMyh8gZ23aAOCUD4o8JI8YQ E0Wyd79bHowRDu2HVmEqkhMBXgkY0+LRbkczsT2RIcVjIlObwl9aBJ6ftVZ9kECWfRiC uiuteKLO5H4HsZvVv8qTcz1Kx+sO3uGyqs4M05lrZZz86CHMHBabN2q8UP7dfW/HERi1 iSAwfDI5S1zbICWNVtmiLgglpRNPPfAAksabOAiNAohZ2XuWmw8F0Sf8nV8xvwQF0c3Z fEzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=xPDf02BBrVMPRsoJJxM/xTHLeYMlBKjOcjjkL0t+HIw=; b=HwTi9N0QoAjBhei5bF2RQSY1KlkKynJgGc/VvEVUFZTnXGoC22YsxmxFXiRzQ8Y1bO zpjiHEGMpWXXjvp3HjUIL565O9L1ZmP1Gp4RnuVJNK2BWAbLxa0gllH5h946M7N329m4 Q602CJareVs+TyMpdgSGt2QfWCvBtHKbcA43ZgTQ41iKoCDnJq3TtmgN6ODu/yXMLTe6 xb9OukEpd0W7B48iOj8h8gPaZRv7fxOY++/q4StPWbm2/9Wxq9FhR0QANawuvWgMTokK JFLMK1/fcSw8R6SdhXVXViKM+htvs9c8B6WDXZV1mymb6XRCzzGoSDPupzi8gngTdjAk 8cnw== X-Gm-Message-State: AO0yUKWvrDkW0PW8PxrusRvgdNw0LIY6LmRgixhj1GrHbo8eW5BnSQSu pIlFkwbyV0BmSi5s8sYlziyYxLGShS0cQieZdTE= X-Google-Smtp-Source: AK7set9XOdOwWXjPu95LrOmTKViFdse7aDN3+mfeg5qvN0gOtoQnwhwEMdzmDCjRa03CuH1vg4+GVdPFI+XrCPqLJmY= X-Received: by 2002:a05:6a00:18a2:b0:593:d1cd:36fc with SMTP id x34-20020a056a0018a200b00593d1cd36fcmr1595266pfh.20.1675349415030; Thu, 02 Feb 2023 06:50:15 -0800 (PST) MIME-Version: 1.0 References: <20221221101846.7zsi7lscnm5ediik@alvherre.pgsql> <1350682.1671635927@sss.pgh.pa.us> <4191508.1674157166@sss.pgh.pa.us> <349124.1674185509@sss.pgh.pa.us> In-Reply-To: From: Amit Langote Date: Thu, 2 Feb 2023 23:49:58 +0900 Message-ID: Subject: Re: generic plans and "initial" pruning To: Tom Lane Cc: Alvaro Herrera , Robert Haas , Jacob Champion , David Rowley , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000c29d0f05f3b8ae71" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c29d0f05f3b8ae71 Content-Type: text/plain; charset="UTF-8" On Fri, Jan 27, 2023 at 4:01 PM Amit Langote wrote: > On Fri, Jan 20, 2023 at 12:52 PM Amit Langote wrote: > > Alright, I'll try to get something out early next week. Thanks for > > all the pointers. > > Sorry for the delay. Attached is what I've come up with so far. > > I didn't actually go with calling the plancache on every lock taken on > a relation, that is, in ExecGetRangeTableRelation(). One thing about > doing it that way that I didn't quite like (or didn't see a clean > enough way to code) is the need to complicate the ExecInitNode() > traversal for handling the abrupt suspension of the ongoing setup of > the PlanState tree. OK, I gave this one more try and attached is what I came up with. This adds a ExecPlanStillValid(), which is called right after anything that may in turn call ExecGetRangeTableRelation() which has been taught to lock a relation if EXEC_FLAG_GET_LOCKS has been passed in EState.es_top_eflags. That includes all ExecInitNode() calls, and a few other functions that call ExecGetRangeTableRelation() directly, such as ExecOpenScanRelation(). If ExecPlanStillValid() returns false, that is, if EState.es_cachedplan is found to have been invalidated after a lock being taken by ExecGetRangeTableRelation(), whatever funcion called it must return immediately and so must its caller and so on. ExecEndPlan() seems to be able to clean up after a partially finished attempt of initializing a PlanState tree in this way. Maybe my preliminary testing didn't catch cases where pointers to resources that are normally put into the nodes of a PlanState tree are now left dangling, because a partially built PlanState tree is not accessible to ExecEndPlan; QueryDesc.planstate would remain NULL in such cases. Maybe there's only es_tupleTable and es_relations that needs to be explicitly released and the rest is taken care of by resetting the ExecutorState context. On testing, I'm afraid we're going to need something like src/test/modules/delay_execution to test that concurrent changes to relation(s) in PlannedStmt.relationOids that occur somewhere between RevalidateCachedQuery() and InitPlan() result in the latter to be aborted and that it is handled correctly. It seems like it is only the locking of partitions (that are not present in an unplanned Query and thus not protected by AcquirePlannerLocks()) that can trigger replanning of a CachedPlan, so any tests we write should involve partitions. Should this try to test as many plan shapes as possible though given the uncertainty around ExecEndPlan() robustness or should manual auditing suffice to be sure that nothing's broken? On possibly needing to move permission checking to occur *after* taking locks, I realized that we don't really need to, because no relation that needs its permissions should be unlocked by the time we get to ExecCheckPermissions(); note we only check permissions of tables that are present in the original parse tree and RevalidateCachedQuery() should have locked those. I found a couple of exceptions to that invariant in that views sometimes appear not to be in the set of relations that RevalidateCachedQuery() locks. So, I invented PlannedStmt.viewRelations, a list of RT indexes of view RTEs that is populated in setrefs.c. ExecLockViewRelations() called before ExecCheckPermissions() locks those. -- Thanks, Amit Langote EDB: http://www.enterprisedb.com --000000000000c29d0f05f3b8ae71 Content-Type: application/octet-stream; name="v32-0001-Move-AcquireExecutorLocks-s-responsibility-into-.patch" Content-Disposition: attachment; filename="v32-0001-Move-AcquireExecutorLocks-s-responsibility-into-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ldn7p75r0 RnJvbSBkNDhjYjZmZTA2ZjdkM2Q5OGFkYjM2Mjk5OTY2ZGFmZjdkZjI1YTNiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogRnJpLCAyMCBKYW4gMjAyMyAxNjo1MjozMSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjMyXSBN b3ZlIEFjcXVpcmVFeGVjdXRvckxvY2tzKCkncyByZXNwb25zaWJpbGl0eSBpbnRvIHRoZQogZXhl Y3V0b3IKCi0tLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgICAgICAgIHwg ICA0ICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jICAgICAgICAgICAgICB8ICAgNCAr LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyAgICAgICAgICAgIHwgICAyICstCiBz cmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgICAgICAgICAgICAgfCAxNDIgKysrKysrLS0t LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMgICAgICAgICAgIHwgICAxICsKIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYyAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvcG9ydGFsY21kcy5jICAgICAgICAgIHwgIDE2ICstCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy9wcmVwYXJlLmMgICAgICAgICAgICAgfCAgMjkgKy0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNNYWluLmMgICAgICAgICAgICB8ICA5OCArKysrKystCiBzcmMvYmFja2VuZC9l eGVjdXRvci9leGVjUGFyYWxsZWwuYyAgICAgICAgfCAgIDcgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNQYXJ0aXRpb24uYyAgICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC9leGVjdXRvci9l eGVjUHJvY25vZGUuYyAgICAgICAgfCAgIDUgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0 aWxzLmMgICAgICAgICAgIHwgICA1ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMu YyAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFnZy5jICAgICAg ICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYyAgICAgICAg ICB8ICAgNCArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwQW5kLmMgICAgICAgfCAg IDIgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEhlYXBzY2FuLmMgIHwgICA0ICsK IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBPci5jICAgICAgICB8ICAgMiArCiBzcmMv YmFja2VuZC9leGVjdXRvci9ub2RlQ3VzdG9tLmMgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUZvcmVpZ25zY2FuLmMgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVHYXRoZXIuYyAgICAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlR2F0aGVyTWVyZ2UuYyAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZUdyb3VwLmMgICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVIYXNo LmMgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSGFzaGpvaW4u YyAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluY3JlbWVudGFsU29y dC5jIHwgICAyICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgICB8 ICAgMiArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMgICAgICAgfCAgIDIg Kwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUxpbWl0LmMgICAgICAgICAgIHwgICAyICsKIHNy Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVMb2NrUm93cy5jICAgICAgICB8ICAgMiArCiBzcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlTWF0ZXJpYWwuYyAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZU1lbW9pemUuYyAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVNZXJnZUFwcGVuZC5jICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC9leGVjdXRvci9u b2RlTWVyZ2Vqb2luLmMgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1v ZGlmeVRhYmxlLmMgICAgIHwgICA3ICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVOZXN0bG9v cC5jICAgICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlUHJvamVjdFNldC5j ICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVJlY3Vyc2l2ZXVuaW9uLmMg IHwgICA0ICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVSZXN1bHQuYyAgICAgICAgICB8ICAg MiArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2FtcGxlc2Nhbi5jICAgICAgfCAgIDIgKwog c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYyAgICAgICAgIHwgICAyICsKIHNyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVTZXRPcC5jICAgICAgICAgICB8ICAgMiArCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlU29ydC5jICAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZVN1YnF1ZXJ5c2Nhbi5jICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVUaWRyYW5nZXNjYW4uYyAgICB8ICAgMiArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl VGlkc2Nhbi5jICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVVuaXF1 ZS5jICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVXaW5kb3dBZ2cu YyAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYyAgICAgICAgICAgICAg ICAgfCAgNDQgKysrLQogc3JjL2JhY2tlbmQvbm9kZXMvTWFrZWZpbGUgICAgICAgICAgICAgICAg IHwgICAxICsKIHNyYy9iYWNrZW5kL25vZGVzL2dlbl9ub2RlX3N1cHBvcnQucGwgICAgICB8ICAg MiArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAgICAgfCAgIDEgKwog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jICAgICAgIHwgICA1ICsKIHNyYy9i YWNrZW5kL3Jld3JpdGUvcmV3cml0ZUhhbmRsZXIuYyAgICAgICB8ICAgNyArLQogc3JjL2JhY2tl bmQvc3RvcmFnZS9sbWdyL2xtZ3IuYyAgICAgICAgICAgIHwgIDQ1ICsrKysKIHNyYy9iYWNrZW5k L3Rjb3AvcG9zdGdyZXMuYyAgICAgICAgICAgICAgICB8ICAgOCArCiBzcmMvYmFja2VuZC90Y29w L3BxdWVyeS5jICAgICAgICAgICAgICAgICAgfCAyOTEgKysrKysrKysrKystLS0tLS0tLS0tCiBz cmMvYmFja2VuZC91dGlscy9jYWNoZS9sc3lzY2FjaGUuYyAgICAgICAgfCAgMjEgKysKIHNyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jICAgICAgICB8IDEzNCArKystLS0tLS0tCiBz cmMvYmFja2VuZC91dGlscy9tbWdyL3BvcnRhbG1lbS5jICAgICAgICAgfCAgIDYgKwogc3JjL2lu Y2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oICAgICAgICAgICAgIHwgICA3ICstCiBzcmMvaW5jbHVk ZS9leGVjdXRvci9leGVjZGVzYy5oICAgICAgICAgICAgfCAgIDUgKwogc3JjL2luY2x1ZGUvZXhl Y3V0b3IvZXhlY3V0b3IuaCAgICAgICAgICAgIHwgIDEyICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4 ZWNub2Rlcy5oICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9ub2Rlcy9tZXNvbi5i dWlsZCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgg ICAgICAgICAgICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oICAgICAg ICAgICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2xtZ3IuaCAgICAgICAgICAgICAg ICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvbHN5c2NhY2hlLmggICAgICAgICAgICAgIHwg ICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oICAgICAgICAgICAgICB8ICAxNSAr Kwogc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmggICAgICAgICAgICAgICAgIHwgICA0ICsKIDcy IGZpbGVzIGNoYW5nZWQsIDY5OCBpbnNlcnRpb25zKCspLCAzMzIgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgYi9jb250cmliL3Bv c3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwppbmRleCBmNTkyNmFiODlkLi45M2YzZjhiNWQxIDEw MDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYworKysgYi9jb250 cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwpAQCAtMjY1OSw3ICsyNjU5LDExIEBAIHBv c3RncmVzQmVnaW5EaXJlY3RNb2RpZnkoRm9yZWlnblNjYW5TdGF0ZSAqbm9kZSwgaW50IGVmbGFn cykKIAkvKiBHZXQgaW5mbyBhYm91dCBmb3JlaWduIHRhYmxlLiAqLwogCXJ0aW5kZXggPSBub2Rl LT5yZXN1bHRSZWxJbmZvLT5yaV9SYW5nZVRhYmxlSW5kZXg7CiAJaWYgKGZzcGxhbi0+c2Nhbi5z Y2FucmVsaWQgPT0gMCkKKwl7CiAJCWRtc3RhdGUtPnJlbCA9IEV4ZWNPcGVuU2NhblJlbGF0aW9u KGVzdGF0ZSwgcnRpbmRleCwgZWZsYWdzKTsKKwkJaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0 YXRlKSkKKwkJCXJldHVybjsKKwl9CiAJZWxzZQogCQlkbXN0YXRlLT5yZWwgPSBub2RlLT5zcy5z c19jdXJyZW50UmVsYXRpb247CiAJdGFibGUgPSBHZXRGb3JlaWduVGFibGUoUmVsYXRpb25HZXRS ZWxpZChkbXN0YXRlLT5yZWwpKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Nv cHl0by5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKaW5kZXggODA0M2I0ZTliMS4u YTQzOGM1NDdlOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKQEAgLTU1OCw3ICs1NTgsOCBAQCBCZWdp bkNvcHlUbyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCSgoRFJfY29weSAqKSBkZXN0KS0+Y3N0YXRl ID0gY3N0YXRlOwogCiAJCS8qIENyZWF0ZSBhIFF1ZXJ5RGVzYyByZXF1ZXN0aW5nIG5vIG91dHB1 dCAqLwotCQljc3RhdGUtPnF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBwc3RhdGUt PnBfc291cmNldGV4dCwKKwkJY3N0YXRlLT5xdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxh biwgTlVMTCwKKwkJCQkJCQkJCQkJcHN0YXRlLT5wX3NvdXJjZXRleHQsCiAJCQkJCQkJCQkJCUdl dEFjdGl2ZVNuYXBzaG90KCksCiAJCQkJCQkJCQkJCUludmFsaWRTbmFwc2hvdCwKIAkJCQkJCQkJ CQkJZGVzdCwgTlVMTCwgTlVMTCwgMCk7CkBAIC01NjksNiArNTcwLDcgQEAgQmVnaW5Db3B5VG8o UGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkgKiBFeGVjdXRvclN0YXJ0IGNvbXB1dGVzIGEgcmVzdWx0 IHR1cGRlc2MgZm9yIHVzCiAJCSAqLwogCQlFeGVjdXRvclN0YXJ0KGNzdGF0ZS0+cXVlcnlEZXNj LCAwKTsKKwkJQXNzZXJ0KGNzdGF0ZS0+cXVlcnlEZXNjLT5wbGFuX3ZhbGlkKTsKIAogCQl0dXBE ZXNjID0gY3N0YXRlLT5xdWVyeURlc2MtPnR1cERlc2M7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFz LmMKaW5kZXggZDZjNmQ1MTRmMy4uYTU1Yjg1MTU3NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY3JlYXRlYXMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5j CkBAIC0zMjUsNyArMzI1LDcgQEAgRXhlY0NyZWF0ZVRhYmxlQXMoUGFyc2VTdGF0ZSAqcHN0YXRl LCBDcmVhdGVUYWJsZUFzU3RtdCAqc3RtdCwKIAkJVXBkYXRlQWN0aXZlU25hcHNob3RDb21tYW5k SWQoKTsKIAogCQkvKiBDcmVhdGUgYSBRdWVyeURlc2MsIHJlZGlyZWN0aW5nIG91dHB1dCB0byBv dXIgdHVwbGUgcmVjZWl2ZXIgKi8KLQkJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4s IHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAorCQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxh biwgTlVMTCwgcHN0YXRlLT5wX3NvdXJjZXRleHQsCiAJCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hv dCgpLCBJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkJCQlkZXN0LCBwYXJhbXMsIHF1ZXJ5RW52LCAw KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IGZiYmYyOGNmMDYuLjhmZGM5NjZhNzMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTM4NCw2ICszODQsNyBAQCBFeHBsYWluT25lUXVlcnko UXVlcnkgKnF1ZXJ5LCBpbnQgY3Vyc29yT3B0aW9ucywKIAllbHNlCiAJewogCQlQbGFubmVkU3Rt dCAqcGxhbjsKKwkJUXVlcnlEZXNjICAgKnF1ZXJ5RGVzYzsKIAkJaW5zdHJfdGltZQlwbGFuc3Rh cnQsCiAJCQkJCXBsYW5kdXJhdGlvbjsKIAkJQnVmZmVyVXNhZ2UgYnVmdXNhZ2Vfc3RhcnQsCkBA IC00MDYsMTIgKzQwNyw4OSBAQCBFeHBsYWluT25lUXVlcnkoUXVlcnkgKnF1ZXJ5LCBpbnQgY3Vy c29yT3B0aW9ucywKIAkJCUJ1ZmZlclVzYWdlQWNjdW1EaWZmKCZidWZ1c2FnZSwgJnBnQnVmZmVy VXNhZ2UsICZidWZ1c2FnZV9zdGFydCk7CiAJCX0KIAorCQlxdWVyeURlc2MgPSBFeHBsYWluUXVl cnlEZXNjKHBsYW4sIE5VTEwsIHF1ZXJ5U3RyaW5nLCBpbnRvLCBlcywKKwkJCQkJCQkJCSBwYXJh bXMsIHF1ZXJ5RW52KTsKKwkJQXNzZXJ0KHF1ZXJ5RGVzYyk7CisKIAkJLyogcnVuIGl0IChpZiBu ZWVkZWQpIGFuZCBwcm9kdWNlIG91dHB1dCAqLwotCQlFeHBsYWluT25lUGxhbihwbGFuLCBpbnRv LCBlcywgcXVlcnlTdHJpbmcsIHBhcmFtcywgcXVlcnlFbnYsCisJCUV4cGxhaW5PbmVQbGFuKHF1 ZXJ5RGVzYywgaW50bywgZXMsIHF1ZXJ5U3RyaW5nLCBwYXJhbXMsIHF1ZXJ5RW52LAogCQkJCQkg ICAmcGxhbmR1cmF0aW9uLCAoZXMtPmJ1ZmZlcnMgPyAmYnVmdXNhZ2UgOiBOVUxMKSk7CiAJfQog fQogCisvKgorICogRXhwbGFpblF1ZXJ5RGVzYworICoJCVNldCB1cCBRdWVyeURlc2MgZm9yIEVY UExBSU5pbmcgYSBnaXZlbiBwbGFuCisgKgorICogVGhpcyByZXR1cm5zIE5VTEwgaWYgY3BsYW4g aXMgZm91bmQgdG8gaGF2ZSBiZWVuIGludmFsaWRhdGVkIHNpbmNlIGl0cworICogY3JlYXRpb24u CisgKi8KK1F1ZXJ5RGVzYyAqCitFeHBsYWluUXVlcnlEZXNjKFBsYW5uZWRTdG10ICpzdG10LCBD YWNoZWRQbGFuICpjcGxhbiwKKwkJCQkgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsIEludG9DbGF1 c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCisJCQkJIFBhcmFtTGlzdEluZm8gcGFyYW1zLCBR dWVyeUVudmlyb25tZW50ICpxdWVyeUVudikKK3sKKwlRdWVyeURlc2MgICpxdWVyeURlc2M7CisJ RGVzdFJlY2VpdmVyICpkZXN0OworCWludAkJCWVmbGFnczsKKwlpbnQJCQlpbnN0cnVtZW50X29w dGlvbiA9IDA7CisKKwkvKgorCSAqIE5vcm1hbGx5IHdlIGRpc2NhcmQgdGhlIHF1ZXJ5J3Mgb3V0 cHV0LCBidXQgaWYgZXhwbGFpbmluZyBDUkVBVEUgVEFCTEUKKwkgKiBBUywgd2UnZCBiZXR0ZXIg dXNlIHRoZSBhcHByb3ByaWF0ZSB0dXBsZSByZWNlaXZlci4KKwkgKi8KKwlpZiAoaW50bykKKwkJ ZGVzdCA9IENyZWF0ZUludG9SZWxEZXN0UmVjZWl2ZXIoaW50byk7CisJZWxzZQorCQlkZXN0ID0g Tm9uZV9SZWNlaXZlcjsKKworCWlmIChlcy0+YW5hbHl6ZSAmJiBlcy0+dGltaW5nKQorCQlpbnN0 cnVtZW50X29wdGlvbiB8PSBJTlNUUlVNRU5UX1RJTUVSOworCWVsc2UgaWYgKGVzLT5hbmFseXpl KQorCQlpbnN0cnVtZW50X29wdGlvbiB8PSBJTlNUUlVNRU5UX1JPV1M7CisKKwlpZiAoZXMtPmJ1 ZmZlcnMpCisJCWluc3RydW1lbnRfb3B0aW9uIHw9IElOU1RSVU1FTlRfQlVGRkVSUzsKKwlpZiAo ZXMtPndhbCkKKwkJaW5zdHJ1bWVudF9vcHRpb24gfD0gSU5TVFJVTUVOVF9XQUw7CisKKwkvKgor CSAqIFVzZSBhIHNuYXBzaG90IHdpdGggYW4gdXBkYXRlZCBjb21tYW5kIElEIHRvIGVuc3VyZSB0 aGlzIHF1ZXJ5IHNlZXMKKwkgKiByZXN1bHRzIG9mIGFueSBwcmV2aW91c2x5IGV4ZWN1dGVkIHF1 ZXJpZXMuCisJICovCisJUHVzaENvcGllZFNuYXBzaG90KEdldEFjdGl2ZVNuYXBzaG90KCkpOwor CVVwZGF0ZUFjdGl2ZVNuYXBzaG90Q29tbWFuZElkKCk7CisKKwkvKiBDcmVhdGUgYSBRdWVyeURl c2MgZm9yIHRoZSBxdWVyeSAqLworCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhzdG10LCBj cGxhbiwgcXVlcnlTdHJpbmcsCisJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRT bmFwc2hvdCwKKwkJCQkJCQkJZGVzdCwgcGFyYW1zLCBxdWVyeUVudiwgaW5zdHJ1bWVudF9vcHRp b24pOworCisJLyogU2VsZWN0IGV4ZWN1dGlvbiBvcHRpb25zICovCisJaWYgKGVzLT5hbmFseXpl KQorCQllZmxhZ3MgPSAwOwkJCQkvKiBkZWZhdWx0IHJ1bi10by1jb21wbGV0aW9uIGZsYWdzICov CisJZWxzZQorCQllZmxhZ3MgPSBFWEVDX0ZMQUdfRVhQTEFJTl9PTkxZOworCWlmIChpbnRvKQor CQllZmxhZ3MgfD0gR2V0SW50b1JlbEVGbGFncyhpbnRvKTsKKworCS8qCisJICogQ2FsbCBFeGVj dXRvclN0YXJ0IHRvIHByZXBhcmUgdGhlIHBsYW4gZm9yIGV4ZWN1dGlvbi4gIEEgY2FjaGVkIHBs YW4KKwkgKiBtYXkgZ2V0IGludmFsaWRhdGVkIGFzIHdlJ3JlIGRvaW5nIHRoYXQuCisJICovCisJ RXhlY3V0b3JTdGFydChxdWVyeURlc2MsIGVmbGFncyk7CisJaWYgKCFxdWVyeURlc2MtPnBsYW5f dmFsaWQpCisJeworCQkvKiBDbGVhbiB1cC4gKi8KKwkJRXhlY3V0b3JFbmQocXVlcnlEZXNjKTsK KwkJRnJlZVF1ZXJ5RGVzYyhxdWVyeURlc2MpOworCQlQb3BBY3RpdmVTbmFwc2hvdCgpOworCQly ZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gcXVlcnlEZXNjOworfQorCiAvKgogICogRXhwbGFp bk9uZVV0aWxpdHkgLQogICoJICBwcmludCBvdXQgdGhlIGV4ZWN1dGlvbiBwbGFuIGZvciBvbmUg dXRpbGl0eSBzdGF0ZW1lbnQKQEAgLTUxNSwyOSArNTkzLDE2IEBAIEV4cGxhaW5PbmVVdGlsaXR5 KE5vZGUgKnV0aWxpdHlTdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAog ICogdG8gY2FsbCBpdC4KICAqLwogdm9pZAotRXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0bXQgKnBs YW5uZWRzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAorRXhwbGFpbk9u ZVBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsCisJCQkgICBJbnRvQ2xhdXNlICppbnRvLCBFeHBs YWluU3RhdGUgKmVzLAogCQkJICAgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsIFBhcmFtTGlzdElu Zm8gcGFyYW1zLAogCQkJICAgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsIGNvbnN0IGluc3Ry X3RpbWUgKnBsYW5kdXJhdGlvbiwKIAkJCSAgIGNvbnN0IEJ1ZmZlclVzYWdlICpidWZ1c2FnZSkK IHsKLQlEZXN0UmVjZWl2ZXIgKmRlc3Q7Ci0JUXVlcnlEZXNjICAqcXVlcnlEZXNjOwogCWluc3Ry X3RpbWUJc3RhcnR0aW1lOwogCWRvdWJsZQkJdG90YWx0aW1lID0gMDsKLQlpbnQJCQllZmxhZ3M7 Ci0JaW50CQkJaW5zdHJ1bWVudF9vcHRpb24gPSAwOwotCi0JQXNzZXJ0KHBsYW5uZWRzdG10LT5j b21tYW5kVHlwZSAhPSBDTURfVVRJTElUWSk7CiAKLQlpZiAoZXMtPmFuYWx5emUgJiYgZXMtPnRp bWluZykKLQkJaW5zdHJ1bWVudF9vcHRpb24gfD0gSU5TVFJVTUVOVF9USU1FUjsKLQllbHNlIGlm IChlcy0+YW5hbHl6ZSkKLQkJaW5zdHJ1bWVudF9vcHRpb24gfD0gSU5TVFJVTUVOVF9ST1dTOwot Ci0JaWYgKGVzLT5idWZmZXJzKQotCQlpbnN0cnVtZW50X29wdGlvbiB8PSBJTlNUUlVNRU5UX0JV RkZFUlM7Ci0JaWYgKGVzLT53YWwpCi0JCWluc3RydW1lbnRfb3B0aW9uIHw9IElOU1RSVU1FTlRf V0FMOworCUFzc2VydChxdWVyeURlc2MtPnBsYW5uZWRzdG10LT5jb21tYW5kVHlwZSAhPSBDTURf VVRJTElUWSk7CiAKIAkvKgogCSAqIFdlIGFsd2F5cyBjb2xsZWN0IHRpbWluZyBmb3IgdGhlIGVu dGlyZSBzdGF0ZW1lbnQsIGV2ZW4gd2hlbiBub2RlLWxldmVsCkBAIC01NDYsMzggKzYxMSw2IEBA IEV4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50 bywgRXhwbGFpblN0YXRlICplcywKIAkgKi8KIAlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHN0YXJ0 dGltZSk7CiAKLQkvKgotCSAqIFVzZSBhIHNuYXBzaG90IHdpdGggYW4gdXBkYXRlZCBjb21tYW5k IElEIHRvIGVuc3VyZSB0aGlzIHF1ZXJ5IHNlZXMKLQkgKiByZXN1bHRzIG9mIGFueSBwcmV2aW91 c2x5IGV4ZWN1dGVkIHF1ZXJpZXMuCi0JICovCi0JUHVzaENvcGllZFNuYXBzaG90KEdldEFjdGl2 ZVNuYXBzaG90KCkpOwotCVVwZGF0ZUFjdGl2ZVNuYXBzaG90Q29tbWFuZElkKCk7Ci0KLQkvKgot CSAqIE5vcm1hbGx5IHdlIGRpc2NhcmQgdGhlIHF1ZXJ5J3Mgb3V0cHV0LCBidXQgaWYgZXhwbGFp bmluZyBDUkVBVEUgVEFCTEUKLQkgKiBBUywgd2UnZCBiZXR0ZXIgdXNlIHRoZSBhcHByb3ByaWF0 ZSB0dXBsZSByZWNlaXZlci4KLQkgKi8KLQlpZiAoaW50bykKLQkJZGVzdCA9IENyZWF0ZUludG9S ZWxEZXN0UmVjZWl2ZXIoaW50byk7Ci0JZWxzZQotCQlkZXN0ID0gTm9uZV9SZWNlaXZlcjsKLQot CS8qIENyZWF0ZSBhIFF1ZXJ5RGVzYyBmb3IgdGhlIHF1ZXJ5ICovCi0JcXVlcnlEZXNjID0gQ3Jl YXRlUXVlcnlEZXNjKHBsYW5uZWRzdG10LCBxdWVyeVN0cmluZywKLQkJCQkJCQkJR2V0QWN0aXZl U25hcHNob3QoKSwgSW52YWxpZFNuYXBzaG90LAotCQkJCQkJCQlkZXN0LCBwYXJhbXMsIHF1ZXJ5 RW52LCBpbnN0cnVtZW50X29wdGlvbik7Ci0KLQkvKiBTZWxlY3QgZXhlY3V0aW9uIG9wdGlvbnMg Ki8KLQlpZiAoZXMtPmFuYWx5emUpCi0JCWVmbGFncyA9IDA7CQkJCS8qIGRlZmF1bHQgcnVuLXRv LWNvbXBsZXRpb24gZmxhZ3MgKi8KLQllbHNlCi0JCWVmbGFncyA9IEVYRUNfRkxBR19FWFBMQUlO X09OTFk7Ci0JaWYgKGludG8pCi0JCWVmbGFncyB8PSBHZXRJbnRvUmVsRUZsYWdzKGludG8pOwot Ci0JLyogY2FsbCBFeGVjdXRvclN0YXJ0IHRvIHByZXBhcmUgdGhlIHBsYW4gZm9yIGV4ZWN1dGlv biAqLwotCUV4ZWN1dG9yU3RhcnQocXVlcnlEZXNjLCBlZmxhZ3MpOwotCiAJLyogRXhlY3V0ZSB0 aGUgcGxhbiBmb3Igc3RhdGlzdGljcyBpZiBhc2tlZCBmb3IgKi8KIAlpZiAoZXMtPmFuYWx5emUp CiAJewpAQCAtNDg1MSw2ICs0ODg0LDE3IEBAIEV4cGxhaW5EdW1teUdyb3VwKGNvbnN0IGNoYXIg Km9ianR5cGUsIGNvbnN0IGNoYXIgKmxhYmVsbmFtZSwgRXhwbGFpblN0YXRlICplcykKIAl9CiB9 CiAKKy8qCisgKiBEaXNjYXJkIG91dHB1dCBidWZmZXIgZm9yIGEgZnJlc2ggcmVzdGFydC4KKyAq Lwordm9pZAorRXhwbGFpblJlc2V0T3V0cHV0KEV4cGxhaW5TdGF0ZSAqZXMpCit7CisJQXNzZXJ0 KGVzLT5zdHIpOworCXJlc2V0U3RyaW5nSW5mbyhlcy0+c3RyKTsKKwlFeHBsYWluQmVnaW5PdXRw dXQoZXMpOworfQorCiAvKgogICogRW1pdCB0aGUgc3RhcnQtb2Ytb3V0cHV0IGJvaWxlcnBsYXRl LgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMKaW5kZXggYjE1MDljYzUwNS4uZTJmNzljYzdh NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMKQEAgLTc4MCw2ICs3ODAsNyBAQCBleGVjdXRl X3NxbF9zdHJpbmcoY29uc3QgY2hhciAqc3FsKQogCQkJCVF1ZXJ5RGVzYyAgKnFkZXNjOwogCiAJ CQkJcWRlc2MgPSBDcmVhdGVRdWVyeURlc2Moc3RtdCwKKwkJCQkJCQkJCQlOVUxMLAogCQkJCQkJ CQkJCXNxbCwKIAkJCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpLCBOVUxMLAogCQkJCQkJCQkJ CWRlc3QsIE5VTEwsIE5VTEwsIDApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv bWF0dmlldy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCmluZGV4IGZiMzBkMjU5 NWMuLjE3ZDQ1N2NjZmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcu YworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKQEAgLTQwOSw3ICs0MDksNyBA QCByZWZyZXNoX21hdHZpZXdfZGF0YWZpbGwoRGVzdFJlY2VpdmVyICpkZXN0LCBRdWVyeSAqcXVl cnksCiAJVXBkYXRlQWN0aXZlU25hcHNob3RDb21tYW5kSWQoKTsKIAogCS8qIENyZWF0ZSBhIFF1 ZXJ5RGVzYywgcmVkaXJlY3Rpbmcgb3V0cHV0IHRvIG91ciB0dXBsZSByZWNlaXZlciAqLwotCXF1 ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBxdWVyeVN0cmluZywKKwlxdWVyeURlc2Mg PSBDcmVhdGVRdWVyeURlc2MocGxhbiwgTlVMTCwgcXVlcnlTdHJpbmcsCiAJCQkJCQkJCUdldEFj dGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJCQkJZGVzdCwgTlVMTCwgTlVM TCwgMCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3BvcnRhbGNtZHMuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3BvcnRhbGNtZHMuYwppbmRleCA4YTNjZjk4Y2NlLi4zYzM0 YWI0MzUxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wb3J0YWxjbWRzLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcG9ydGFsY21kcy5jCkBAIC0xNDYsNiArMTQ2LDcgQEAg UGVyZm9ybUN1cnNvck9wZW4oUGFyc2VTdGF0ZSAqcHN0YXRlLCBEZWNsYXJlQ3Vyc29yU3RtdCAq Y3N0bXQsIFBhcmFtTGlzdEluZm8gcGEKIAlQb3J0YWxTdGFydChwb3J0YWwsIHBhcmFtcywgMCwg R2V0QWN0aXZlU25hcHNob3QoKSk7CiAKIAlBc3NlcnQocG9ydGFsLT5zdHJhdGVneSA9PSBQT1JU QUxfT05FX1NFTEVDVCk7CisJQXNzZXJ0KHBvcnRhbC0+cGxhbl92YWxpZCk7CiAKIAkvKgogCSAq IFdlJ3JlIGRvbmU7IHRoZSBxdWVyeSB3b24ndCBhY3R1YWxseSBiZSBydW4gdW50aWwgUGVyZm9y bVBvcnRhbEZldGNoIGlzCkBAIC0yNDksNiArMjUwLDE3IEBAIFBlcmZvcm1Qb3J0YWxDbG9zZShj b25zdCBjaGFyICpuYW1lKQogCVBvcnRhbERyb3AocG9ydGFsLCBmYWxzZSk7CiB9CiAKKy8qCisg KiBSZWxlYXNlIGEgcG9ydGFsJ3MgUXVlcnlEZXNjLgorICovCit2b2lkCitQb3J0YWxRdWVyeUZp bmlzaChRdWVyeURlc2MgKnF1ZXJ5RGVzYykKK3sKKwlFeGVjdXRvckZpbmlzaChxdWVyeURlc2Mp OworCUV4ZWN1dG9yRW5kKHF1ZXJ5RGVzYyk7CisJRnJlZVF1ZXJ5RGVzYyhxdWVyeURlc2MpOwor fQorCiAvKgogICogUG9ydGFsQ2xlYW51cAogICoKQEAgLTI5NSw5ICszMDcsNyBAQCBQb3J0YWxD bGVhbnVwKFBvcnRhbCBwb3J0YWwpCiAJCQlpZiAocG9ydGFsLT5yZXNvd25lcikKIAkJCQlDdXJy ZW50UmVzb3VyY2VPd25lciA9IHBvcnRhbC0+cmVzb3duZXI7CiAKLQkJCUV4ZWN1dG9yRmluaXNo KHF1ZXJ5RGVzYyk7Ci0JCQlFeGVjdXRvckVuZChxdWVyeURlc2MpOwotCQkJRnJlZVF1ZXJ5RGVz YyhxdWVyeURlc2MpOworCQkJUG9ydGFsUXVlcnlGaW5pc2gocXVlcnlEZXNjKTsKIAogCQkJQ3Vy cmVudFJlc291cmNlT3duZXIgPSBzYXZlUmVzb3VyY2VPd25lcjsKIAkJfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJl cGFyZS5jCmluZGV4IDE4ZjcwMzE5ZmMuLjZjNzJiNDZmMDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3ByZXBhcmUuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJl LmMKQEAgLTE4Myw2ICsxODMsNyBAQCBFeGVjdXRlUXVlcnkoUGFyc2VTdGF0ZSAqcHN0YXRlLAog CQlwYXJhbUxJID0gRXZhbHVhdGVQYXJhbXMocHN0YXRlLCBlbnRyeSwgc3RtdC0+cGFyYW1zLCBl c3RhdGUpOwogCX0KIAorcmVwbGFuOgogCS8qIENyZWF0ZSBhIG5ldyBwb3J0YWwgdG8gcnVuIHRo ZSBxdWVyeSBpbiAqLwogCXBvcnRhbCA9IENyZWF0ZU5ld1BvcnRhbCgpOwogCS8qIERvbid0IGRp c3BsYXkgdGhlIHBvcnRhbCBpbiBwZ19jdXJzb3JzLCBpdCBpcyBmb3IgaW50ZXJuYWwgdXNlIG9u bHkgKi8KQEAgLTI1MSwxMCArMjUyLDE3IEBAIEV4ZWN1dGVRdWVyeShQYXJzZVN0YXRlICpwc3Rh dGUsCiAJfQogCiAJLyoKLQkgKiBSdW4gdGhlIHBvcnRhbCBhcyBhcHByb3ByaWF0ZS4KKwkgKiBS dW4gdGhlIHBvcnRhbCBhcyBhcHByb3ByaWF0ZS4gIElmIHRoZSBwb3J0YWwgY29udGFpbnMgYSBj YWNoZWQgcGxhbiwKKwkgKiBpdCBtdXN0IGJlIHJlY3JlYXRlZCBpZiAqcmVwbGFuIGlzIHNldC4K IAkgKi8KIAlQb3J0YWxTdGFydChwb3J0YWwsIHBhcmFtTEksIGVmbGFncywgR2V0QWN0aXZlU25h cHNob3QoKSk7CiAKKwlpZiAoIXBvcnRhbC0+cGxhbl92YWxpZCkKKwl7CisJCVBvcnRhbERyb3Ao cG9ydGFsLCBmYWxzZSk7CisJCWdvdG8gcmVwbGFuOworCX0KKwogCSh2b2lkKSBQb3J0YWxSdW4o cG9ydGFsLCBjb3VudCwgZmFsc2UsIHRydWUsIGRlc3QsIGRlc3QsIHFjKTsKIAogCVBvcnRhbERy b3AocG9ydGFsLCBmYWxzZSk7CkBAIC01NzQsNyArNTgyLDcgQEAgRXhwbGFpbkV4ZWN1dGVRdWVy eShFeGVjdXRlU3RtdCAqZXhlY3N0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAq ZXMsCiB7CiAJUHJlcGFyZWRTdGF0ZW1lbnQgKmVudHJ5OwogCWNvbnN0IGNoYXIgKnF1ZXJ5X3N0 cmluZzsKLQlDYWNoZWRQbGFuICpjcGxhbjsKKwlDYWNoZWRQbGFuICpjcGxhbiA9IE5VTEw7CiAJ TGlzdAkgICAqcGxhbl9saXN0OwogCUxpc3RDZWxsICAgKnA7CiAJUGFyYW1MaXN0SW5mbyBwYXJh bUxJID0gTlVMTDsKQEAgLTYxOCw2ICs2MjYsNyBAQCBFeHBsYWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1 dGVTdG10ICpleGVjc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAl9 CiAKIAkvKiBSZXBsYW4gaWYgbmVlZGVkLCBhbmQgYWNxdWlyZSBhIHRyYW5zaWVudCByZWZjb3Vu dCAqLworcmVwbGFuOgogCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihlbnRyeS0+cGxhbnNvdXJjZSwg cGFyYW1MSSwKIAkJCQkJCSAgQ3VycmVudFJlc291cmNlT3duZXIsIHF1ZXJ5RW52KTsKIApAQCAt NjM5LDggKzY0OCwyMCBAQCBFeHBsYWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10ICpleGVjc3Rt dCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAkJUGxhbm5lZFN0bXQgKnBz dG10ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQsIHApOwogCiAJCWlmIChwc3RtdC0+Y29tbWFu ZFR5cGUgIT0gQ01EX1VUSUxJVFkpCi0JCQlFeHBsYWluT25lUGxhbihwc3RtdCwgaW50bywgZXMs IHF1ZXJ5X3N0cmluZywgcGFyYW1MSSwgcXVlcnlFbnYsCi0JCQkJCQkgICAmcGxhbmR1cmF0aW9u LCAoZXMtPmJ1ZmZlcnMgPyAmYnVmdXNhZ2UgOiBOVUxMKSk7CisJCXsKKwkJCVF1ZXJ5RGVzYyAq cXVlcnlEZXNjOworCisJCQlxdWVyeURlc2MgPSBFeHBsYWluUXVlcnlEZXNjKHBzdG10LCBjcGxh biwgcXVlcnlTdHJpbmcsCisJCQkJCQkJCQkJIGludG8sIGVzLCBwYXJhbUxJLCBxdWVyeUVudik7 CisJCQlpZiAocXVlcnlEZXNjID09IE5VTEwpCisJCQl7CisJCQkJRXhwbGFpblJlc2V0T3V0cHV0 KGVzKTsKKwkJCQlnb3RvIHJlcGxhbjsKKwkJCX0KKwkJCUV4cGxhaW5PbmVQbGFuKHF1ZXJ5RGVz YywgaW50bywgZXMsIHF1ZXJ5X3N0cmluZywgcGFyYW1MSSwKKwkJCQkJCSAgIHF1ZXJ5RW52LCAm cGxhbmR1cmF0aW9uLAorCQkJCQkJICAgKGVzLT5idWZmZXJzID8gJmJ1ZnVzYWdlIDogTlVMTCkp OworCQl9CiAJCWVsc2UKIAkJCUV4cGxhaW5PbmVVdGlsaXR5KHBzdG10LT51dGlsaXR5U3RtdCwg aW50bywgZXMsIHF1ZXJ5X3N0cmluZywKIAkJCQkJCQkgIHBhcmFtTEksIHF1ZXJ5RW52KTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjTWFpbi5jCmluZGV4IGE1MTE1YjljMWYuLjQ3YmM2YTFmM2EgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY01haW4uYwpAQCAtMTE5LDYgKzExOSwxMSBAQCBzdGF0aWMgdm9pZCBFdmFsUGxh blF1YWxTdGFydChFUFFTdGF0ZSAqZXBxc3RhdGUsIFBsYW4gKnBsYW5UcmVlKTsKICAqCiAgKiBl ZmxhZ3MgY29udGFpbnMgZmxhZyBiaXRzIGFzIGRlc2NyaWJlZCBpbiBleGVjdXRvci5oLgogICoK KyAqIHJlcGxhbiBtdXN0IGJlIG5vbi1OVUxMIHdoZW4gZXhlY3V0aW5nIGEgY2FjaGVkIHF1ZXJ5 IHBsYW4uICBPbiByZXR1cm4sCisgKiAqcmVwbGFuIGlzIHNldCBpZiBxdWVyeURlc2MtPmNwbGFu IGlzIGZvdW5kIHRvIGhhdmUgYmVlbiBpbnZhbGlkYXRlZC4gIEluCisgKiB0aGF0IGNhc2UsIGNh bGxlcnMgbXVzdCByZWNyZWF0ZSB0aGUgQ2FjaGVkUGxhbiBiZWZvcmUgcmV0cnlpbmcgdGhlCisg KiBleGVjdXRpb24uCisgKgogICogTkI6IHRoZSBDdXJyZW50TWVtb3J5Q29udGV4dCB3aGVuIHRo aXMgaXMgY2FsbGVkIHdpbGwgYmVjb21lIHRoZSBwYXJlbnQKICAqIG9mIHRoZSBwZXItcXVlcnkg Y29udGV4dCB1c2VkIGZvciB0aGlzIEV4ZWN1dG9yIGludm9jYXRpb24uCiAgKgpAQCAtMTMxLDYg KzEzNiwxMCBAQCBzdGF0aWMgdm9pZCBFdmFsUGxhblF1YWxTdGFydChFUFFTdGF0ZSAqZXBxc3Rh dGUsIFBsYW4gKnBsYW5UcmVlKTsKIHZvaWQKIEV4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVy eURlc2MsIGludCBlZmxhZ3MpCiB7CisJLyogVGFrZSBsb2NrcyBpZiB0aGUgcGxhbiB0cmVlIGNv bWVzIGZyb20gYSBDYWNoZWRQbGFuLiAqLworCWlmIChxdWVyeURlc2MtPmNwbGFuKQorCQllZmxh Z3MgfD0gRVhFQ19GTEFHX0dFVF9MT0NLUzsKKwogCS8qCiAJICogSW4gc29tZSBjYXNlcyAoZS5n LiBhbiBFWEVDVVRFIHN0YXRlbWVudCkgYSBxdWVyeSBleGVjdXRpb24gd2lsbCBza2lwCiAJICog cGFyc2UgYW5hbHlzaXMsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHF1ZXJ5X2lkIHdvbid0IGJlIHJl cG9ydGVkLiAgTm90ZQpAQCAtNTgyLDYgKzU5MSwxNiBAQCBFeGVjQ2hlY2tQZXJtaXNzaW9ucyhM aXN0ICpyYW5nZVRhYmxlLCBMaXN0ICpydGVwZXJtaW5mb3MsCiAJCVJURVBlcm1pc3Npb25JbmZv ICpwZXJtaW5mbyA9IGxmaXJzdF9ub2RlKFJURVBlcm1pc3Npb25JbmZvLCBsKTsKIAogCQlBc3Nl cnQoT2lkSXNWYWxpZChwZXJtaW5mby0+cmVsaWQpKTsKKworCQkvKgorCQkgKiBSZWxhdGlvbnMg d2hvc2UgcGVybWlzc2lvbnMgbmVlZCB0byBiZSBjaGVja2VkIG11c3QgYWxyZWFkeSBoYXZlCisJ CSAqIGJlZW4gbG9ja2VkIGJ5IHRoZSBwYXJzZXIgb3IgYnkgQWNxdWlyZVBsYW5uZXJMb2Nrcygp IGlmIGEKKwkJICogY2FjaGVkIHBsYW4gaXMgYmVpbmcgZXhlY3V0ZWQuCisJCSAqIFhYWCBzaG91 bGRuJ3Qgd2Ugc2tpcCBjYWxsaW5nIEV4ZWNDaGVja1Blcm1pc3Npb25zIGZyb20gSW5pdFBsYW4K KwkJICogaW4gYSBwYXJhbGxlbCB3b3JrZXI/CisJCSAqLworCQlBc3NlcnQoQ2hlY2tSZWxMb2Nr ZWRCeU1lKHBlcm1pbmZvLT5yZWxpZCwgQWNjZXNzU2hhcmVMb2NrLCB0cnVlKSB8fAorCQkJICAg SXNQYXJhbGxlbFdvcmtlcigpKTsKIAkJcmVzdWx0ID0gRXhlY0NoZWNrT25lUmVsUGVybXMocGVy bWluZm8pOwogCQlpZiAoIXJlc3VsdCkKIAkJewpAQCAtNzg1LDEyICs4MDQsNDMgQEAgRXhlY0No ZWNrWGFjdFJlYWRPbmx5KFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCkKIAkJUHJldmVudENvbW1h bmRJZlBhcmFsbGVsTW9kZShDcmVhdGVDb21tYW5kTmFtZSgoTm9kZSAqKSBwbGFubmVkc3RtdCkp OwogfQogCisvKgorICogTG9jayB2aWV3IHJlbGF0aW9ucyBpbiBhIGdpdmVuIHF1ZXJ5J3MgcmFu Z2UgdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCitFeGVjTG9ja1ZpZXdSZWxhdGlvbnMoTGlzdCAq dmlld1JlbGF0aW9ucywgRVN0YXRlICplc3RhdGUsIGJvb2wgYWNxdWlyZSkKK3sKKwlMaXN0Q2Vs bCAqbGM7CisKKwlmb3JlYWNoKGxjLCB2aWV3UmVsYXRpb25zKQorCXsKKwkJSW5kZXgJcnRpID0g bGZpcnN0X2ludChsYyk7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IGV4ZWNfcnRfZmV0Y2gocnRp LCBlc3RhdGUpOworCisJCUFzc2VydChPaWRJc1ZhbGlkKHJ0ZS0+cmVsaWQpKTsKKwkJQXNzZXJ0 KHJ0ZS0+cmVsa2luZCA9PSBSRUxLSU5EX1ZJRVcpOworCQlBc3NlcnQocnRlLT5yZWxsb2NrbW9k ZSAhPSBOb0xvY2spOworCisJCWlmIChhY3F1aXJlKQorCQkJTG9ja1JlbGF0aW9uT2lkKHJ0ZS0+ cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOworCQllbHNlCisJCQlVbmxvY2tSZWxhdGlvbk9pZChy dGUtPnJlbGlkLCBydGUtPnJlbGxvY2ttb2RlKTsKKwl9Cit9CiAKIC8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlJ bml0UGxhbgogICoKICAqCQlJbml0aWFsaXplcyB0aGUgcXVlcnkgcGxhbjogb3BlbiBmaWxlcywg YWxsb2NhdGUgc3RvcmFnZQogICoJCWFuZCBzdGFydCB1cCB0aGUgcnVsZSBtYW5hZ2VyCisgKgor ICoJCUlmIHF1ZXJ5RGVzYyBjb250YWlucyBhIENhY2hlZFBsYW4sIHRoaXMgdGFrZXMgbG9ja3Mg b24gcmVsYXRpb25zLgorICoJCUlmIGFueSBvZiB0aG9zZSByZWxhdGlvbnMgaGF2ZSB1bmRlcmdv bmUgY29uY3VycmVudCBzY2hlbWEgY2hhbmdlcworICoJCWJldHdlZW4gc3VjY2Vzc2Z1bGx5IHBl cmZvcm1pbmcgUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5KCkgb24gdGhlCisgKgkJY29udGFpbmluZyBD YWNoZWRQbGFuU291cmNlIGFuZCBoZXJlLCBsb2NraW5nIHRob3NlIHJlbGF0aW9ucyB3b3VsZAor ICoJCWludmFsaWRhdGUgdGhlIENhY2hlZFBsYW4gYnkgd2F5IG9mIFBsYW5DYWNoZVJlbENhbGxi YWNrKCkuICBJbiB0aGF0CisgKgkJY2FzZSwgcXVlcnlEZXNjLT5wbGFuX3ZhbGlkIHdvdWxkIGJl IHNldCB0byBmYWxzZSB0byB0ZWxsIHRoZSBjYWxsZXIKKyAqCQl0byByZXRyeSBhZnRlciBjcmVh dGluZyBhIG5ldyBDYWNoZWRQbGFuLgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBzdGF0aWMgdm9pZApAQCAt ODA3LDE3ICs4NTcsMjEgQEAgSW5pdFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxh Z3MpCiAJaW50CQkJaTsKIAogCS8qCi0JICogRG8gcGVybWlzc2lvbnMgY2hlY2tzIGFuZCBzYXZl IHRoZSBsaXN0IGZvciBsYXRlciB1c2UuCisJICogaW5pdGlhbGl6ZSB0aGUgbm9kZSdzIGV4ZWN1 dGlvbiBzdGF0ZQogCSAqLwotCUV4ZWNDaGVja1Blcm1pc3Npb25zKHJhbmdlVGFibGUsIHBsYW5u ZWRzdG10LT5wZXJtSW5mb3MsIHRydWUpOwotCWVzdGF0ZS0+ZXNfcnRlcGVybWluZm9zID0gcGxh bm5lZHN0bXQtPnBlcm1JbmZvczsKKwlFeGVjSW5pdFJhbmdlVGFibGUoZXN0YXRlLCByYW5nZVRh YmxlKTsKKworCWlmIChlZmxhZ3MgJiBFWEVDX0ZMQUdfR0VUX0xPQ0tTKQorCQlFeGVjTG9ja1Zp ZXdSZWxhdGlvbnMocGxhbm5lZHN0bXQtPnZpZXdSZWxhdGlvbnMsIGVzdGF0ZSwgdHJ1ZSk7CiAK IAkvKgotCSAqIGluaXRpYWxpemUgdGhlIG5vZGUncyBleGVjdXRpb24gc3RhdGUKKwkgKiBEbyBw ZXJtaXNzaW9ucyBjaGVja3MgYW5kIHNhdmUgdGhlIGxpc3QgZm9yIGxhdGVyIHVzZS4KIAkgKi8K LQlFeGVjSW5pdFJhbmdlVGFibGUoZXN0YXRlLCByYW5nZVRhYmxlKTsKKwlFeGVjQ2hlY2tQZXJt aXNzaW9ucyhyYW5nZVRhYmxlLCBwbGFubmVkc3RtdC0+cGVybUluZm9zLCB0cnVlKTsKKwllc3Rh dGUtPmVzX3J0ZXBlcm1pbmZvcyA9IHBsYW5uZWRzdG10LT5wZXJtSW5mb3M7CiAKIAllc3RhdGUt PmVzX3BsYW5uZWRzdG10ID0gcGxhbm5lZHN0bXQ7CisJZXN0YXRlLT5lc19jYWNoZWRwbGFuID0g cXVlcnlEZXNjLT5jcGxhbjsKIAllc3RhdGUtPmVzX3BhcnRfcHJ1bmVfaW5mb3MgPSBwbGFubmVk c3RtdC0+cGFydFBydW5lSW5mb3M7CiAKIAkvKgpAQCAtODUwLDYgKzkwNCw4IEBAIEluaXRQbGFu KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogCQkJCWNhc2UgUk9XX01BUktfS0VZ U0hBUkU6CiAJCQkJY2FzZSBST1dfTUFSS19SRUZFUkVOQ0U6CiAJCQkJCXJlbGF0aW9uID0gRXhl Y0dldFJhbmdlVGFibGVSZWxhdGlvbihlc3RhdGUsIHJjLT5ydGkpOworCQkJCQlpZiAoIUV4ZWNQ bGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQkJCQkJZ290byBmYWlsZWQ7CiAJCQkJCWJyZWFrOwog CQkJCWNhc2UgUk9XX01BUktfQ09QWToKIAkJCQkJLyogbm8gcGh5c2ljYWwgdGFibGUgYWNjZXNz IGlzIHJlcXVpcmVkICovCkBAIC05MTcsNiArOTczLDggQEAgSW5pdFBsYW4oUXVlcnlEZXNjICpx dWVyeURlc2MsIGludCBlZmxhZ3MpCiAJCQlzcF9lZmxhZ3MgfD0gRVhFQ19GTEFHX1JFV0lORDsK IAogCQlzdWJwbGFuc3RhdGUgPSBFeGVjSW5pdE5vZGUoc3VicGxhbiwgZXN0YXRlLCBzcF9lZmxh Z3MpOworCQlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQkJZ290byBmYWlsZWQ7 CiAKIAkJZXN0YXRlLT5lc19zdWJwbGFuc3RhdGVzID0gbGFwcGVuZChlc3RhdGUtPmVzX3N1YnBs YW5zdGF0ZXMsCiAJCQkJCQkJCQkJICAgc3VicGxhbnN0YXRlKTsKQEAgLTkzMCw2ICs5ODgsOCBA QCBJbml0UGxhbihRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncykKIAkgKiBwcm9jZXNz aW5nIHR1cGxlcy4KIAkgKi8KIAlwbGFuc3RhdGUgPSBFeGVjSW5pdE5vZGUocGxhbiwgZXN0YXRl LCBlZmxhZ3MpOworCWlmICghRXhlY1BsYW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJCWdvdG8gZmFp bGVkOwogCiAJLyoKIAkgKiBHZXQgdGhlIHR1cGxlIGRlc2NyaXB0b3IgZGVzY3JpYmluZyB0aGUg dHlwZSBvZiB0dXBsZXMgdG8gcmV0dXJuLgpAQCAtOTczLDYgKzEwMzMsMTkgQEAgSW5pdFBsYW4o UXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpCiAKIAlxdWVyeURlc2MtPnR1cERlc2Mg PSB0dXBUeXBlOwogCXF1ZXJ5RGVzYy0+cGxhbnN0YXRlID0gcGxhbnN0YXRlOworCXF1ZXJ5RGVz Yy0+cGxhbl92YWxpZCA9IHRydWU7CisJcmV0dXJuOworCitmYWlsZWQ6CisJLyoKKwkgKiBQbGFu IGluaXRpYWxpemF0aW9uIGZhaWxlZC4gIE1hcmsgUXVlcnlEZXNjIGFzIHN1Y2ggYW5kIHJlbGVh c2UgdXNlbGVzcworCSAqIGxvY2tzLgorCSAqLworCXF1ZXJ5RGVzYy0+cGxhbl92YWxpZCA9IGZh bHNlOworCWlmIChlZmxhZ3MgJiBFWEVDX0ZMQUdfR0VUX0xPQ0tTKQorCQlFeGVjTG9ja1ZpZXdS ZWxhdGlvbnMocGxhbm5lZHN0bXQtPnZpZXdSZWxhdGlvbnMsIGVzdGF0ZSwgZmFsc2UpOworCS8q IEFsc28gYXNrIEV4ZWNDbG9zZVJhbmdlVGFibGVSZWxhdGlvbnMoKSB0byByZWxlYXNlIGxvY2tz LiAqLworCWVzdGF0ZS0+ZXNfdG9wX2VmbGFncyB8PSBFWEVDX0ZMQUdfUkVMX0xPQ0tTOwogfQog CiAvKgpAQCAtMTM4OSw3ICsxNDYyLDcgQEAgRXhlY0dldEFuY2VzdG9yUmVzdWx0UmVscyhFU3Rh dGUgKmVzdGF0ZSwgUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbykKIAogCQkJLyoKIAkJCSAq IEFsbCBhbmNlc3RvcnMgdXAgdG8gdGhlIHJvb3QgdGFyZ2V0IHJlbGF0aW9uIG11c3QgaGF2ZSBi ZWVuCi0JCQkgKiBsb2NrZWQgYnkgdGhlIHBsYW5uZXIgb3IgQWNxdWlyZUV4ZWN1dG9yTG9ja3Mo KS4KKwkJCSAqIGxvY2tlZC4KIAkJCSAqLwogCQkJYW5jUmVsID0gdGFibGVfb3BlbihhbmNPaWQs IE5vTG9jayk7CiAJCQlySW5mbyA9IG1ha2VOb2RlKFJlc3VsdFJlbEluZm8pOwpAQCAtMTU1OCw3 ICsxNjMxLDggQEAgRXhlY0Nsb3NlUmVzdWx0UmVsYXRpb25zKEVTdGF0ZSAqZXN0YXRlKQogLyoK ICAqIENsb3NlIGFsbCByZWxhdGlvbnMgb3BlbmVkIGJ5IEV4ZWNHZXRSYW5nZVRhYmxlUmVsYXRp b24oKS4KICAqCi0gKiBXZSBkbyBub3QgcmVsZWFzZSBhbnkgbG9ja3Mgd2UgbWlnaHQgaG9sZCBv biB0aG9zZSByZWxzLgorICogV2UgZG8gbm90IHJlbGVhc2UgYW55IGxvY2tzIHdlIG1pZ2h0IGhv bGQgb24gdGhvc2UgcmVscywgdW5sZXNzCisgKiB0aGUgY2FsbGVyIGFza2VkIG90aGVyd2lzZS4K ICAqLwogdm9pZAogRXhlY0Nsb3NlUmFuZ2VUYWJsZVJlbGF0aW9ucyhFU3RhdGUgKmVzdGF0ZSkK QEAgLTE1NjcsOCArMTY0MSwxMiBAQCBFeGVjQ2xvc2VSYW5nZVRhYmxlUmVsYXRpb25zKEVTdGF0 ZSAqZXN0YXRlKQogCiAJZm9yIChpID0gMDsgaSA8IGVzdGF0ZS0+ZXNfcmFuZ2VfdGFibGVfc2l6 ZTsgaSsrKQogCXsKKwkJaW50CQlsb2NrbW9kZSA9IE5vTG9jazsKKworCQlpZiAoZXN0YXRlLT5l c190b3BfZWZsYWdzICYgRVhFQ19GTEFHX1JFTF9MT0NLUykKKwkJCWxvY2ttb2RlID0gZXhlY19y dF9mZXRjaChpKzEsIGVzdGF0ZSktPnJlbGxvY2ttb2RlOwogCQlpZiAoZXN0YXRlLT5lc19yZWxh dGlvbnNbaV0pCi0JCQl0YWJsZV9jbG9zZShlc3RhdGUtPmVzX3JlbGF0aW9uc1tpXSwgTm9Mb2Nr KTsKKwkJCXRhYmxlX2Nsb3NlKGVzdGF0ZS0+ZXNfcmVsYXRpb25zW2ldLCBsb2NrbW9kZSk7CiAJ fQogfQogCkBAIC0yNzk3LDcgKzI4NzUsOCBAQCBFdmFsUGxhblF1YWxTdGFydChFUFFTdGF0ZSAq ZXBxc3RhdGUsIFBsYW4gKnBsYW5UcmVlKQogCSAqIENoaWxkIEVQUSBFU3RhdGVzIHNoYXJlIHRo ZSBwYXJlbnQncyBjb3B5IG9mIHVuY2hhbmdpbmcgc3RhdGUgc3VjaCBhcwogCSAqIHRoZSBzbmFw c2hvdCwgcmFuZ2V0YWJsZSwgYW5kIGV4dGVybmFsIFBhcmFtIGluZm8uICBUaGV5IG5lZWQgdGhl aXIgb3duCiAJICogY29waWVzIG9mIGxvY2FsIHN0YXRlLCBpbmNsdWRpbmcgYSB0dXBsZSB0YWJs ZSwgZXNfcGFyYW1fZXhlY192YWxzLAotCSAqIHJlc3VsdC1yZWwgaW5mbywgZXRjLgorCSAqIHJl c3VsdC1yZWwgaW5mbywgZXRjLiAgQWxzbywgd2UgZG9uJ3QgcGFzcyB0aGUgcGFyZW50J3QgY29w eSBvZiB0aGUKKwkgKiBDYWNoZWRQbGFuLCBiZWNhdXNlIG5vIG5ldyBsb2NrcyB3aWxsIGJlIHRh a2VuIGZvciBFdmFsUGxhblF1YWwoKS4KIAkgKi8KIAlyY2VzdGF0ZS0+ZXNfZGlyZWN0aW9uID0g Rm9yd2FyZFNjYW5EaXJlY3Rpb247CiAJcmNlc3RhdGUtPmVzX3NuYXBzaG90ID0gcGFyZW50ZXN0 YXRlLT5lc19zbmFwc2hvdDsKQEAgLTI4ODMsNiArMjk2Miw3IEBAIEV2YWxQbGFuUXVhbFN0YXJ0 KEVQUVN0YXRlICplcHFzdGF0ZSwgUGxhbiAqcGxhblRyZWUpCiAJCVBsYW5TdGF0ZSAgKnN1YnBs YW5zdGF0ZTsKIAogCQlzdWJwbGFuc3RhdGUgPSBFeGVjSW5pdE5vZGUoc3VicGxhbiwgcmNlc3Rh dGUsIDApOworCQlBc3NlcnQoRXhlY1BsYW5TdGlsbFZhbGlkKHJjZXN0YXRlKSk7CiAJCXJjZXN0 YXRlLT5lc19zdWJwbGFuc3RhdGVzID0gbGFwcGVuZChyY2VzdGF0ZS0+ZXNfc3VicGxhbnN0YXRl cywKIAkJCQkJCQkJCQkJIHN1YnBsYW5zdGF0ZSk7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFy YWxsZWwuYwppbmRleCBhYTNmMjgzNDUzLi5mZTFkMTczNTAxIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjUGFyYWxsZWwuYwpAQCAtMTI0OSw4ICsxMjQ5LDEzIEBAIEV4ZWNQYXJhbGxlbEdldFF1ZXJ5 RGVzYyhzaG1fdG9jICp0b2MsIERlc3RSZWNlaXZlciAqcmVjZWl2ZXIsCiAJcGFyYW1zcGFjZSA9 IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfS0VZX1BBUkFNTElTVElORk8sIGZhbHNlKTsK IAlwYXJhbUxJID0gUmVzdG9yZVBhcmFtTGlzdCgmcGFyYW1zcGFjZSk7CiAKLQkvKiBDcmVhdGUg YSBRdWVyeURlc2MgZm9yIHRoZSBxdWVyeS4gKi8KKwkvKgorCSAqIENyZWF0ZSBhIFF1ZXJ5RGVz YyBmb3IgdGhlIHF1ZXJ5LiAgTm90ZSB0aGF0IG5vIENhY2hlZFBsYW4gaXMgYXZhaWxhYmxlCisJ ICogaGVyZSBldmVuIGlmIHRoZSBjb250YWluaW5nIHBsYW4gdHJlZSBtYXkgaGF2ZSBjb21lIGZy b20gb25lIGluIHRoZQorCSAqIGxlYWRlci4KKwkgKi8KIAlyZXR1cm4gQ3JlYXRlUXVlcnlEZXNj KHBzdG10LAorCQkJCQkJICAgTlVMTCwKIAkJCQkJCSAgIHF1ZXJ5U3RyaW5nLAogCQkJCQkJICAg R2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJICAgcmVjZWl2ZXIs IHBhcmFtTEksIE5VTEwsIGluc3RydW1lbnRfb3B0aW9ucyk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj UGFydGl0aW9uLmMKaW5kZXggNjUxYWQyNGZjMS4uYTFiYjFhYzUwZiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNQYXJ0aXRpb24uYwpAQCAtMTgxMyw2ICsxODEzLDggQEAgRXhlY0luaXRQYXJ0aXRp b25QcnVuaW5nKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogCiAJLyogQ3JlYXRlIHRoZSB3b3JraW5n IGRhdGEgc3RydWN0dXJlIGZvciBwcnVuaW5nICovCiAJcHJ1bmVzdGF0ZSA9IENyZWF0ZVBhcnRp dGlvblBydW5lU3RhdGUocGxhbnN0YXRlLCBwcnVuZWluZm8pOworCWlmICghRXhlY1BsYW5TdGls bFZhbGlkKGVzdGF0ZSkpCisJCXJldHVybiBOVUxMOwogCiAJLyoKIAkgKiBQZXJmb3JtIGFuIGlu aXRpYWwgcGFydGl0aW9uIHBydW5lIHBhc3MsIGlmIHJlcXVpcmVkLgpAQCAtMTkzOSw2ICsxOTQx LDggQEAgQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgUGFy dGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8pCiAJCQkgKiBkdXJhdGlvbiBvZiB0aGlzIGV4ZWN1 dG9yIHJ1bi4KIAkJCSAqLwogCQkJcGFydHJlbCA9IEV4ZWNHZXRSYW5nZVRhYmxlUmVsYXRpb24o ZXN0YXRlLCBwaW5mby0+cnRpbmRleCk7CisJCQlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3Rh dGUpKQorCQkJCXJldHVybiBOVUxMOwogCQkJcGFydGtleSA9IFJlbGF0aW9uR2V0UGFydGl0aW9u S2V5KHBhcnRyZWwpOwogCQkJcGFydGRlc2MgPSBQYXJ0aXRpb25EaXJlY3RvcnlMb29rdXAoZXN0 YXRlLT5lc19wYXJ0aXRpb25fZGlyZWN0b3J5LAogCQkJCQkJCQkJCQkJcGFydHJlbCk7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUHJvY25vZGUuYyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jCmluZGV4IDRkMjg4YmM4ZDQuLmJmYzRiNmY4MWMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jCisrKyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jCkBAIC0zODgsNiArMzg4LDkgQEAgRXhlY0lu aXROb2RlKFBsYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkJYnJlYWs7 CiAJfQogCisJaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0YXRlKSkKKwkJcmV0dXJuIHJlc3Vs dDsKKwogCUV4ZWNTZXRFeGVjUHJvY05vZGUocmVzdWx0LCByZXN1bHQtPkV4ZWNQcm9jTm9kZSk7 CiAKIAkvKgpAQCAtNDAyLDYgKzQwNSw4IEBAIEV4ZWNJbml0Tm9kZShQbGFuICpub2RlLCBFU3Rh dGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAogCQlBc3NlcnQoSXNBKHN1YnBsYW4sIFN1YlBsYW4p KTsKIAkJc3N0YXRlID0gRXhlY0luaXRTdWJQbGFuKHN1YnBsYW4sIHJlc3VsdCk7CisJCWlmICgh RXhlY1BsYW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJCQlyZXR1cm4gcmVzdWx0OwogCQlzdWJwcyA9 IGxhcHBlbmQoc3VicHMsIHNzdGF0ZSk7CiAJfQogCXJlc3VsdC0+aW5pdFBsYW4gPSBzdWJwczsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMKaW5kZXggYzMzYTNjMGJlYy4uZDViZDI2ODUxNCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMKKysrIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMKQEAgLTgwMCw3ICs4MDAsOCBAQCBFeGVjR2V0UmFuZ2VU YWJsZVJlbGF0aW9uKEVTdGF0ZSAqZXN0YXRlLCBJbmRleCBydGkpCiAKIAkJQXNzZXJ0KHJ0ZS0+ cnRla2luZCA9PSBSVEVfUkVMQVRJT04pOwogCi0JCWlmICghSXNQYXJhbGxlbFdvcmtlcigpKQor CQlpZiAoIUlzUGFyYWxsZWxXb3JrZXIoKSAmJgorCQkJKGVzdGF0ZS0+ZXNfdG9wX2VmbGFncyAm IEVYRUNfRkxBR19HRVRfTE9DS1MpID09IDApCiAJCXsKIAkJCS8qCiAJCQkgKiBJbiBhIG5vcm1h bCBxdWVyeSwgd2Ugc2hvdWxkIGFscmVhZHkgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgbG9jaywKQEAg LTg0NCw2ICs4NDUsOCBAQCBFeGVjSW5pdFJlc3VsdFJlbGF0aW9uKEVTdGF0ZSAqZXN0YXRlLCBS ZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCVJlbGF0aW9uCXJlc3VsdFJlbGF0aW9uRGVz YzsKIAogCXJlc3VsdFJlbGF0aW9uRGVzYyA9IEV4ZWNHZXRSYW5nZVRhYmxlUmVsYXRpb24oZXN0 YXRlLCBydGkpOworCWlmICghRXhlY1BsYW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJCXJldHVybjsK IAlJbml0UmVzdWx0UmVsSW5mbyhyZXN1bHRSZWxJbmZvLAogCQkJCQkgIHJlc3VsdFJlbGF0aW9u RGVzYywKIAkJCQkJICBydGksCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5j dGlvbnMuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCmluZGV4IDUwZTA2ZWM2 OTMuLjk0OWJkZmM4MzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9u cy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCkBAIC04NDMsNiArODQz LDcgQEAgcG9zdHF1ZWxfc3RhcnQoZXhlY3V0aW9uX3N0YXRlICplcywgU1FMRnVuY3Rpb25DYWNo ZVB0ciBmY2FjaGUpCiAJCWRlc3QgPSBOb25lX1JlY2VpdmVyOwogCiAJZXMtPnFkID0gQ3JlYXRl UXVlcnlEZXNjKGVzLT5zdG10LAorCQkJCQkJCSBOVUxMLAkvKiBmbWdyX3NxbCgpIGRvZXNuJ3Qg dXNlIENhY2hlZFBsYW5zICovCiAJCQkJCQkJIGZjYWNoZS0+c3JjLAogCQkJCQkJCSBHZXRBY3Rp dmVTbmFwc2hvdCgpLAogCQkJCQkJCSBJbnZhbGlkU25hcHNob3QsCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlQWdnLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQWdn LmMKaW5kZXggMjBkMjM2OTZhNS4uOTRiN2QwOGM5MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUFnZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBZ2cuYwpA QCAtMzI5NSw2ICszMjk1LDggQEAgRXhlY0luaXRBZ2coQWdnICpub2RlLCBFU3RhdGUgKmVzdGF0 ZSwgaW50IGVmbGFncykKIAkJZWZsYWdzICY9IH5FWEVDX0ZMQUdfUkVXSU5EOwogCW91dGVyUGxh biA9IG91dGVyUGxhbihub2RlKTsKIAlvdXRlclBsYW5TdGF0ZShhZ2dzdGF0ZSkgPSBFeGVjSW5p dE5vZGUob3V0ZXJQbGFuLCBlc3RhdGUsIGVmbGFncyk7CisJaWYgKCFFeGVjUGxhblN0aWxsVmFs aWQoZXN0YXRlKSkKKwkJcmV0dXJuIGFnZ3N0YXRlOwogCiAJLyoKIAkgKiBpbml0aWFsaXplIHNv dXJjZSB0dXBsZSB0eXBlLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFw cGVuZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCmluZGV4IGNiMjU0OTli M2YuLjJlMGJmYmU4NWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBl bmQuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKQEAgLTE0OCw2ICsx NDgsOCBAQCBFeGVjSW5pdEFwcGVuZChBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQg ZWZsYWdzKQogCQkJCQkJCQkJCQkgIG5vZGUtPnBhcnRfcHJ1bmVfaW5kZXgsCiAJCQkJCQkJCQkJ CSAgbm9kZS0+YXBwcmVsaWRzLAogCQkJCQkJCQkJCQkgICZ2YWxpZHN1YnBsYW5zKTsKKwkJaWYg KCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0YXRlKSkKKwkJCXJldHVybiBhcHBlbmRzdGF0ZTsKIAkJ YXBwZW5kc3RhdGUtPmFzX3BydW5lX3N0YXRlID0gcHJ1bmVzdGF0ZTsKIAkJbnBsYW5zID0gYm1z X251bV9tZW1iZXJzKHZhbGlkc3VicGxhbnMpOwogCkBAIC0yMTgsNiArMjIwLDggQEAgRXhlY0lu aXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJCWZp cnN0dmFsaWQgPSBqOwogCiAJCWFwcGVuZHBsYW5zdGF0ZXNbaisrXSA9IEV4ZWNJbml0Tm9kZShp bml0Tm9kZSwgZXN0YXRlLCBlZmxhZ3MpOworCQlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3Rh dGUpKQorCQkJcmV0dXJuIGFwcGVuZHN0YXRlOwogCX0KIAogCWFwcGVuZHN0YXRlLT5hc19maXJz dF9wYXJ0aWFsX3BsYW4gPSBmaXJzdHZhbGlkOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUJpdG1hcEFuZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEFu ZC5jCmluZGV4IDRjNWViMmIyM2IuLjZiNTU5YmFlMmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVCaXRtYXBBbmQuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl Qml0bWFwQW5kLmMKQEAgLTg5LDYgKzg5LDggQEAgRXhlY0luaXRCaXRtYXBBbmQoQml0bWFwQW5k ICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAl7CiAJCWluaXROb2RlID0gKFBs YW4gKikgbGZpcnN0KGwpOwogCQliaXRtYXBwbGFuc3RhdGVzW2ldID0gRXhlY0luaXROb2RlKGlu aXROb2RlLCBlc3RhdGUsIGVmbGFncyk7CisJCWlmICghRXhlY1BsYW5TdGlsbFZhbGlkKGVzdGF0 ZSkpCisJCQlyZXR1cm4gYml0bWFwYW5kc3RhdGU7CiAJCWkrKzsKIAl9CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBIZWFwc2Nhbi5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUJpdG1hcEhlYXBzY2FuLmMKaW5kZXggZjM1ZGYwYjhiZi4uYTU0NTAxODcw MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEhlYXBzY2FuLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEhlYXBzY2FuLmMKQEAgLTc2Mywx MSArNzYzLDE1IEBAIEV4ZWNJbml0Qml0bWFwSGVhcFNjYW4oQml0bWFwSGVhcFNjYW4gKm5vZGUs IEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAqIG9wZW4gdGhlIHNjYW4gcmVsYXRpb24K IAkgKi8KIAljdXJyZW50UmVsYXRpb24gPSBFeGVjT3BlblNjYW5SZWxhdGlvbihlc3RhdGUsIG5v ZGUtPnNjYW4uc2NhbnJlbGlkLCBlZmxhZ3MpOworCWlmICghRXhlY1BsYW5TdGlsbFZhbGlkKGVz dGF0ZSkpCisJCXJldHVybiBzY2Fuc3RhdGU7CiAKIAkvKgogCSAqIGluaXRpYWxpemUgY2hpbGQg bm9kZXMKIAkgKi8KIAlvdXRlclBsYW5TdGF0ZShzY2Fuc3RhdGUpID0gRXhlY0luaXROb2RlKG91 dGVyUGxhbihub2RlKSwgZXN0YXRlLCBlZmxhZ3MpOworCWlmICghRXhlY1BsYW5TdGlsbFZhbGlk KGVzdGF0ZSkpCisJCXJldHVybiBzY2Fuc3RhdGU7CiAKIAkvKgogCSAqIGdldCB0aGUgc2NhbiB0 eXBlIGZyb20gdGhlIHJlbGF0aW9uIGRlc2NyaXB0b3IuCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlQml0bWFwT3IuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRt YXBPci5jCmluZGV4IDBiZjhhZjk2NTIuLjg3ZWI1ZGQ1ZDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBPci5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVCaXRtYXBPci5jCkBAIC05MCw2ICs5MCw4IEBAIEV4ZWNJbml0Qml0bWFwT3IoQml0bWFwT3Ig Km5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCXsKIAkJaW5pdE5vZGUgPSAoUGxh biAqKSBsZmlyc3QobCk7CiAJCWJpdG1hcHBsYW5zdGF0ZXNbaV0gPSBFeGVjSW5pdE5vZGUoaW5p dE5vZGUsIGVzdGF0ZSwgZWZsYWdzKTsKKwkJaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0YXRl KSkKKwkJCXJldHVybiBiaXRtYXBvcnN0YXRlOwogCQlpKys7CiAJfQogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlQ3VzdG9tLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlQ3VzdG9tLmMKaW5kZXggYmQ0MmM2NWIyOS4uZWZiOTRmOWM1OSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUN1c3RvbS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVDdXN0b20uYwpAQCAtNjEsNiArNjEsOCBAQCBFeGVjSW5pdEN1c3RvbVNjYW4oQ3VzdG9t U2NhbiAqY3NjYW4sIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWlmIChzY2FucmVsaWQg PiAwKQogCXsKIAkJc2Nhbl9yZWwgPSBFeGVjT3BlblNjYW5SZWxhdGlvbihlc3RhdGUsIHNjYW5y ZWxpZCwgZWZsYWdzKTsKKwkJaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0YXRlKSkKKwkJCXJl dHVybiBjc3M7CiAJCWNzcy0+c3Muc3NfY3VycmVudFJlbGF0aW9uID0gc2Nhbl9yZWw7CiAJfQog CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlRm9yZWlnbnNjYW4uYyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVGb3JlaWduc2Nhbi5jCmluZGV4IGMyMTM5YWNjYTAuLmM5 YTA3MmU5MTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVGb3JlaWduc2Nh bi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVGb3JlaWduc2Nhbi5jCkBAIC0xNzMs NiArMTczLDggQEAgRXhlY0luaXRGb3JlaWduU2NhbihGb3JlaWduU2NhbiAqbm9kZSwgRVN0YXRl ICplc3RhdGUsIGludCBlZmxhZ3MpCiAJaWYgKHNjYW5yZWxpZCA+IDApCiAJewogCQljdXJyZW50 UmVsYXRpb24gPSBFeGVjT3BlblNjYW5SZWxhdGlvbihlc3RhdGUsIHNjYW5yZWxpZCwgZWZsYWdz KTsKKwkJaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0YXRlKSkKKwkJCXJldHVybiBzY2Fuc3Rh dGU7CiAJCXNjYW5zdGF0ZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uID0gY3VycmVudFJlbGF0aW9u OwogCQlmZHdyb3V0aW5lID0gR2V0RmR3Um91dGluZUZvclJlbGF0aW9uKGN1cnJlbnRSZWxhdGlv biwgdHJ1ZSk7CiAJfQpAQCAtMjY0LDYgKzI2Niw4IEBAIEV4ZWNJbml0Rm9yZWlnblNjYW4oRm9y ZWlnblNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWlmIChvdXRlclBs YW4obm9kZSkpCiAJCW91dGVyUGxhblN0YXRlKHNjYW5zdGF0ZSkgPQogCQkJRXhlY0luaXROb2Rl KG91dGVyUGxhbihub2RlKSwgZXN0YXRlLCBlZmxhZ3MpOworCWlmICghRXhlY1BsYW5TdGlsbFZh bGlkKGVzdGF0ZSkpCisJCXJldHVybiBzY2Fuc3RhdGU7CiAKIAkvKgogCSAqIFRlbGwgdGhlIEZE VyB0byBpbml0aWFsaXplIHRoZSBzY2FuLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZUdhdGhlci5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUdhdGhlci5jCmluZGV4 IDMwN2ZjMTBlZWEuLjM2NWQzYWYzZTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVHYXRoZXIuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlR2F0aGVyLmMKQEAg LTg5LDYgKzg5LDggQEAgRXhlY0luaXRHYXRoZXIoR2F0aGVyICpub2RlLCBFU3RhdGUgKmVzdGF0 ZSwgaW50IGVmbGFncykKIAkgKi8KIAlvdXRlck5vZGUgPSBvdXRlclBsYW4obm9kZSk7CiAJb3V0 ZXJQbGFuU3RhdGUoZ2F0aGVyc3RhdGUpID0gRXhlY0luaXROb2RlKG91dGVyTm9kZSwgZXN0YXRl LCBlZmxhZ3MpOworCWlmICghRXhlY1BsYW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJCXJldHVybiBn YXRoZXJzdGF0ZTsKIAl0dXBEZXNjID0gRXhlY0dldFJlc3VsdFR5cGUob3V0ZXJQbGFuU3RhdGUo Z2F0aGVyc3RhdGUpKTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlR2F0aGVyTWVyZ2UuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVHYXRoZXJNZXJnZS5j CmluZGV4IDlkNWUxYTQ2ZTkuLjhkMjgwOWYwNzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVHYXRoZXJNZXJnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVH YXRoZXJNZXJnZS5jCkBAIC0xMDgsNiArMTA4LDggQEAgRXhlY0luaXRHYXRoZXJNZXJnZShHYXRo ZXJNZXJnZSAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICovCiAJb3V0ZXJO b2RlID0gb3V0ZXJQbGFuKG5vZGUpOwogCW91dGVyUGxhblN0YXRlKGdtX3N0YXRlKSA9IEV4ZWNJ bml0Tm9kZShvdXRlck5vZGUsIGVzdGF0ZSwgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxW YWxpZChlc3RhdGUpKQorCQlyZXR1cm4gZ21fc3RhdGU7CiAKIAkvKgogCSAqIExlYWRlciBtYXkg YWNjZXNzIEV4ZWNQcm9jTm9kZSByZXN1bHQgZGlyZWN0bHkgKGlmCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlR3JvdXAuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVH cm91cC5jCmluZGV4IDI1YTE2MTg5NTIuLmZhNmRhZDM5MzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVHcm91cC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVH cm91cC5jCkBAIC0xODUsNiArMTg1LDggQEAgRXhlY0luaXRHcm91cChHcm91cCAqbm9kZSwgRVN0 YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICogaW5pdGlhbGl6ZSBjaGlsZCBub2RlcwogCSAq LwogCW91dGVyUGxhblN0YXRlKGdycHN0YXRlKSA9IEV4ZWNJbml0Tm9kZShvdXRlclBsYW4obm9k ZSksIGVzdGF0ZSwgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQor CQlyZXR1cm4gZ3Jwc3RhdGU7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgc2NhbiBzbG90IGFuZCB0 eXBlLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2guYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVIYXNoLmMKaW5kZXggZWNlZWU5OTM3NC4uNmFmYzA0ZWRmMSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2guYworKysgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlSGFzaC5jCkBAIC0zNzksNiArMzc5LDggQEAgRXhlY0luaXRIYXNo KEhhc2ggKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAqIGluaXRpYWxpemUg Y2hpbGQgbm9kZXMKIAkgKi8KIAlvdXRlclBsYW5TdGF0ZShoYXNoc3RhdGUpID0gRXhlY0luaXRO b2RlKG91dGVyUGxhbihub2RlKSwgZXN0YXRlLCBlZmxhZ3MpOworCWlmICghRXhlY1BsYW5TdGls bFZhbGlkKGVzdGF0ZSkpCisJCXJldHVybiBoYXNoc3RhdGU7CiAKIAkvKgogCSAqIGluaXRpYWxp emUgb3VyIHJlc3VsdCBzbG90IGFuZCB0eXBlLiBObyBuZWVkIHRvIGJ1aWxkIHByb2plY3Rpb24K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVIYXNoam9pbi5jIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2hqb2luLmMKaW5kZXggYjIxNWUzZjU5YS4uMGUyZjkzMWVm YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2hqb2luLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2hqb2luLmMKQEAgLTY1OSw4ICs2NTksMTIgQEAg RXhlY0luaXRIYXNoSm9pbihIYXNoSm9pbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxh Z3MpCiAJaGFzaE5vZGUgPSAoSGFzaCAqKSBpbm5lclBsYW4obm9kZSk7CiAKIAlvdXRlclBsYW5T dGF0ZShoanN0YXRlKSA9IEV4ZWNJbml0Tm9kZShvdXRlck5vZGUsIGVzdGF0ZSwgZWZsYWdzKTsK KwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQlyZXR1cm4gaGpzdGF0ZTsKIAlv dXRlckRlc2MgPSBFeGVjR2V0UmVzdWx0VHlwZShvdXRlclBsYW5TdGF0ZShoanN0YXRlKSk7CiAJ aW5uZXJQbGFuU3RhdGUoaGpzdGF0ZSkgPSBFeGVjSW5pdE5vZGUoKFBsYW4gKikgaGFzaE5vZGUs IGVzdGF0ZSwgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQly ZXR1cm4gaGpzdGF0ZTsKIAlpbm5lckRlc2MgPSBFeGVjR2V0UmVzdWx0VHlwZShpbm5lclBsYW5T dGF0ZShoanN0YXRlKSk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUluY3JlbWVudGFsU29ydC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluY3JlbWVu dGFsU29ydC5jCmluZGV4IDEyYmMyMmYzM2MuLjA5M2MzM2Q4Y2EgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVJbmNyZW1lbnRhbFNvcnQuYworKysgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlSW5jcmVtZW50YWxTb3J0LmMKQEAgLTEwNDEsNiArMTA0MSw4IEBAIEV4ZWNJ bml0SW5jcmVtZW50YWxTb3J0KEluY3JlbWVudGFsU29ydCAqbm9kZSwgRVN0YXRlICplc3RhdGUs IGludCBlZmxhZ3MpCiAJICogbm9kZXMgbWF5IGJlIGFibGUgdG8gZG8gc29tZXRoaW5nIG1vcmUg dXNlZnVsLgogCSAqLwogCW91dGVyUGxhblN0YXRlKGluY3Jzb3J0c3RhdGUpID0gRXhlY0luaXRO b2RlKG91dGVyUGxhbihub2RlKSwgZXN0YXRlLCBlZmxhZ3MpOworCWlmICghRXhlY1BsYW5TdGls bFZhbGlkKGVzdGF0ZSkpCisJCXJldHVybiBpbmNyc29ydHN0YXRlOwogCiAJLyoKIAkgKiBJbml0 aWFsaXplIHNjYW4gc2xvdCBhbmQgdHlwZS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhv bmx5c2Nhbi5jCmluZGV4IDBiNDNhOWI5NjkuLmEzN2E0OGM5NGEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpAQCAtNTEyLDYgKzUxMiw4IEBAIEV4ZWNJbml0SW5k ZXhPbmx5U2NhbihJbmRleE9ubHlTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFn cykKIAkgKiBvcGVuIHRoZSBzY2FuIHJlbGF0aW9uCiAJICovCiAJY3VycmVudFJlbGF0aW9uID0g RXhlY09wZW5TY2FuUmVsYXRpb24oZXN0YXRlLCBub2RlLT5zY2FuLnNjYW5yZWxpZCwgZWZsYWdz KTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQlyZXR1cm4gaW5kZXhzdGF0 ZTsKIAogCWluZGV4c3RhdGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiA9IGN1cnJlbnRSZWxhdGlv bjsKIAlpbmRleHN0YXRlLT5zcy5zc19jdXJyZW50U2NhbkRlc2MgPSBOVUxMOwkvKiBubyBoZWFw IHNjYW4gaGVyZSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4 c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCmluZGV4IDQ1NDBj Nzc4MWQuLjAwZGNiODQyNGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKQEAg LTkyNSw2ICs5MjUsOCBAQCBFeGVjSW5pdEluZGV4U2NhbihJbmRleFNjYW4gKm5vZGUsIEVTdGF0 ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAqIG9wZW4gdGhlIHNjYW4gcmVsYXRpb24KIAkgKi8K IAljdXJyZW50UmVsYXRpb24gPSBFeGVjT3BlblNjYW5SZWxhdGlvbihlc3RhdGUsIG5vZGUtPnNj YW4uc2NhbnJlbGlkLCBlZmxhZ3MpOworCWlmICghRXhlY1BsYW5TdGlsbFZhbGlkKGVzdGF0ZSkp CisJCXJldHVybiBpbmRleHN0YXRlOwogCiAJaW5kZXhzdGF0ZS0+c3Muc3NfY3VycmVudFJlbGF0 aW9uID0gY3VycmVudFJlbGF0aW9uOwogCWluZGV4c3RhdGUtPnNzLnNzX2N1cnJlbnRTY2FuRGVz YyA9IE5VTEw7CS8qIG5vIGhlYXAgc2NhbiBoZXJlICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlTGltaXQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVMaW1pdC5j CmluZGV4IDQyNWZiZmM0MDUuLjJmY2JkZTc0ZWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVMaW1pdC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVMaW1pdC5j CkBAIC00NzYsNiArNDc2LDggQEAgRXhlY0luaXRMaW1pdChMaW1pdCAqbm9kZSwgRVN0YXRlICpl c3RhdGUsIGludCBlZmxhZ3MpCiAJICovCiAJb3V0ZXJQbGFuID0gb3V0ZXJQbGFuKG5vZGUpOwog CW91dGVyUGxhblN0YXRlKGxpbWl0c3RhdGUpID0gRXhlY0luaXROb2RlKG91dGVyUGxhbiwgZXN0 YXRlLCBlZmxhZ3MpOworCWlmICghRXhlY1BsYW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJCXJldHVy biBsaW1pdHN0YXRlOwogCiAJLyoKIAkgKiBpbml0aWFsaXplIGNoaWxkIGV4cHJlc3Npb25zCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTG9ja1Jvd3MuYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVMb2NrUm93cy5jCmluZGV4IDQwNzQxNGZjMGMuLjNhOGFhMmI1YTQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVMb2NrUm93cy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVMb2NrUm93cy5jCkBAIC0zMjMsNiArMzIzLDggQEAgRXhl Y0luaXRMb2NrUm93cyhMb2NrUm93cyAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3Mp CiAJICogdGhlbiBpbml0aWFsaXplIG91dGVyIHBsYW4KIAkgKi8KIAlvdXRlclBsYW5TdGF0ZShs cnN0YXRlKSA9IEV4ZWNJbml0Tm9kZShvdXRlclBsYW4sIGVzdGF0ZSwgZWZsYWdzKTsKKwlpZiAo IUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQlyZXR1cm4gbHJzdGF0ZTsKIAogCS8qIG5v ZGUgcmV0dXJucyB1bm1vZGlmaWVkIHNsb3RzIGZyb20gdGhlIG91dGVyIHBsYW4gKi8KIAlscnN0 YXRlLT5wcy5yZXN1bHRvcHNzZXQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZU1hdGVyaWFsLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWF0ZXJpYWwu YwppbmRleCAwOTYzMjY3OGIwLi4wOTk4MmZkMzhjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlTWF0ZXJpYWwuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWF0 ZXJpYWwuYwpAQCAtMjE0LDYgKzIxNCw4IEBAIEV4ZWNJbml0TWF0ZXJpYWwoTWF0ZXJpYWwgKm5v ZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCiAJb3V0ZXJQbGFuID0gb3V0ZXJQbGFu KG5vZGUpOwogCW91dGVyUGxhblN0YXRlKG1hdHN0YXRlKSA9IEV4ZWNJbml0Tm9kZShvdXRlclBs YW4sIGVzdGF0ZSwgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQor CQlyZXR1cm4gbWF0c3RhdGU7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgcmVzdWx0IHR5cGUgYW5k IHNsb3QuIE5vIG5lZWQgdG8gaW5pdGlhbGl6ZSBwcm9qZWN0aW9uIGluZm8KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZW1vaXplLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlTWVtb2l6ZS5jCmluZGV4IDc0ZjdkMjFiYzguLmFkN2ExZjZmZTAgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZW1vaXplLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZU1lbW9pemUuYwpAQCAtOTMxLDYgKzkzMSw4IEBAIEV4ZWNJbml0TWVtb2l6ZShN ZW1vaXplICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAogCW91dGVyTm9kZSA9 IG91dGVyUGxhbihub2RlKTsKIAlvdXRlclBsYW5TdGF0ZShtc3RhdGUpID0gRXhlY0luaXROb2Rl KG91dGVyTm9kZSwgZXN0YXRlLCBlZmxhZ3MpOworCWlmICghRXhlY1BsYW5TdGlsbFZhbGlkKGVz dGF0ZSkpCisJCXJldHVybiBtc3RhdGU7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgcmV0dXJuIHNs b3QgYW5kIHR5cGUuIE5vIG5lZWQgdG8gaW5pdGlhbGl6ZSBwcm9qZWN0aW9uIGluZm8KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKaW5kZXggMzk5YjM5YzU5OC4uYzNmZGRkZWNj NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKQEAgLTk2LDYgKzk2LDgg QEAgRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUs IGludCBlZmxhZ3MpCiAJCQkJCQkJCQkJCSAgbm9kZS0+cGFydF9wcnVuZV9pbmRleCwKIAkJCQkJ CQkJCQkJICBub2RlLT5hcHByZWxpZHMsCiAJCQkJCQkJCQkJCSAgJnZhbGlkc3VicGxhbnMpOwor CQlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQkJcmV0dXJuIG1lcmdlc3RhdGU7 CiAJCW1lcmdlc3RhdGUtPm1zX3BydW5lX3N0YXRlID0gcHJ1bmVzdGF0ZTsKIAkJbnBsYW5zID0g Ym1zX251bV9tZW1iZXJzKHZhbGlkc3VicGxhbnMpOwogCkBAIC0xNTIsNiArMTU0LDggQEAgRXhl Y0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBl ZmxhZ3MpCiAJCVBsYW4JICAgKmluaXROb2RlID0gKFBsYW4gKikgbGlzdF9udGgobm9kZS0+bWVy Z2VwbGFucywgaSk7CiAKIAkJbWVyZ2VwbGFuc3RhdGVzW2orK10gPSBFeGVjSW5pdE5vZGUoaW5p dE5vZGUsIGVzdGF0ZSwgZWZsYWdzKTsKKwkJaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0YXRl KSkKKwkJCXJldHVybiBtZXJnZXN0YXRlOwogCX0KIAogCW1lcmdlc3RhdGUtPnBzLnBzX1Byb2pJ bmZvID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZWpv aW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZWpvaW4uYwppbmRleCA4MDlhYTIx NWM2Li40ODljNjUxYTI1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVy Z2Vqb2luLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jCkBAIC0x NDgyLDExICsxNDgyLDE1IEBAIEV4ZWNJbml0TWVyZ2VKb2luKE1lcmdlSm9pbiAqbm9kZSwgRVN0 YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJbWVyZ2VzdGF0ZS0+bWpfU2tpcE1hcmtSZXN0b3Jl ID0gbm9kZS0+c2tpcF9tYXJrX3Jlc3RvcmU7CiAKIAlvdXRlclBsYW5TdGF0ZShtZXJnZXN0YXRl KSA9IEV4ZWNJbml0Tm9kZShvdXRlclBsYW4obm9kZSksIGVzdGF0ZSwgZWZsYWdzKTsKKwlpZiAo IUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQlyZXR1cm4gbWVyZ2VzdGF0ZTsKIAlvdXRl ckRlc2MgPSBFeGVjR2V0UmVzdWx0VHlwZShvdXRlclBsYW5TdGF0ZShtZXJnZXN0YXRlKSk7CiAJ aW5uZXJQbGFuU3RhdGUobWVyZ2VzdGF0ZSkgPSBFeGVjSW5pdE5vZGUoaW5uZXJQbGFuKG5vZGUp LCBlc3RhdGUsCiAJCQkJCQkJCQkJCSAgbWVyZ2VzdGF0ZS0+bWpfU2tpcE1hcmtSZXN0b3JlID8K IAkJCQkJCQkJCQkJICBlZmxhZ3MgOgogCQkJCQkJCQkJCQkgIChlZmxhZ3MgfCBFWEVDX0ZMQUdf TUFSSykpOworCWlmICghRXhlY1BsYW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJCXJldHVybiBtZXJn ZXN0YXRlOwogCWlubmVyRGVzYyA9IEV4ZWNHZXRSZXN1bHRUeXBlKGlubmVyUGxhblN0YXRlKG1l cmdlc3RhdGUpKTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl TW9kaWZ5VGFibGUuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCmlu ZGV4IDFhYzY1MTcyZTQuLjI3ZGRhNTdjM2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVNb2RpZnlUYWJsZS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2Rp ZnlUYWJsZS5jCkBAIC00MDEwLDYgKzQwMTAsOSBAQCBFeGVjSW5pdE1vZGlmeVRhYmxlKE1vZGlm eVRhYmxlICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJCQkJCQkgICBsaW5p dGlhbF9pbnQobm9kZS0+cmVzdWx0UmVsYXRpb25zKSk7CiAJfQogCisJaWYgKCFFeGVjUGxhblN0 aWxsVmFsaWQoZXN0YXRlKSkKKwkJcmV0dXJuIG10c3RhdGU7CisKIAkvKiBzZXQgdXAgZXBxc3Rh dGUgd2l0aCBkdW1teSBzdWJwbGFuIGRhdGEgZm9yIHRoZSBtb21lbnQgKi8KIAlFdmFsUGxhblF1 YWxJbml0KCZtdHN0YXRlLT5tdF9lcHFzdGF0ZSwgZXN0YXRlLCBOVUxMLCBOSUwsIG5vZGUtPmVw cVBhcmFtKTsKIAltdHN0YXRlLT5maXJlQlNUcmlnZ2VycyA9IHRydWU7CkBAIC00MDM2LDYgKzQw MzksOCBAQCBFeGVjSW5pdE1vZGlmeVRhYmxlKE1vZGlmeVRhYmxlICpub2RlLCBFU3RhdGUgKmVz dGF0ZSwgaW50IGVmbGFncykKIAkJaWYgKHJlc3VsdFJlbEluZm8gIT0gbXRzdGF0ZS0+cm9vdFJl c3VsdFJlbEluZm8pCiAJCXsKIAkJCUV4ZWNJbml0UmVzdWx0UmVsYXRpb24oZXN0YXRlLCByZXN1 bHRSZWxJbmZvLCByZXN1bHRSZWxhdGlvbik7CisJCQlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChl c3RhdGUpKQorCQkJCXJldHVybiBtdHN0YXRlOwogCiAJCQkvKgogCQkJICogRm9yIGNoaWxkIHJl c3VsdCByZWxhdGlvbnMsIHN0b3JlIHRoZSByb290IHJlc3VsdCByZWxhdGlvbgpAQCAtNDA2Myw2 ICs0MDY4LDggQEAgRXhlY0luaXRNb2RpZnlUYWJsZShNb2RpZnlUYWJsZSAqbm9kZSwgRVN0YXRl ICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICogTm93IHdlIG1heSBpbml0aWFsaXplIHRoZSBzdWJw bGFuLgogCSAqLwogCW91dGVyUGxhblN0YXRlKG10c3RhdGUpID0gRXhlY0luaXROb2RlKHN1YnBs YW4sIGVzdGF0ZSwgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQor CQlyZXR1cm4gbXRzdGF0ZTsKIAogCS8qCiAJICogRG8gYWRkaXRpb25hbCBwZXItcmVzdWx0LXJl bGF0aW9uIGluaXRpYWxpemF0aW9uLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZU5lc3Rsb29wLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTmVzdGxvb3AuYwppbmRl eCBiM2Q1MmU2OWVjLi4yOTlmNmIzYTU3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlTmVzdGxvb3AuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTmVzdGxvb3Au YwpAQCAtMjk1LDExICsyOTUsMTUgQEAgRXhlY0luaXROZXN0TG9vcChOZXN0TG9vcCAqbm9kZSwg RVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICogdmFsdWVzLgogCSAqLwogCW91dGVyUGxh blN0YXRlKG5sc3RhdGUpID0gRXhlY0luaXROb2RlKG91dGVyUGxhbihub2RlKSwgZXN0YXRlLCBl ZmxhZ3MpOworCWlmICghRXhlY1BsYW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJCXJldHVybiBubHN0 YXRlOwogCWlmIChub2RlLT5uZXN0UGFyYW1zID09IE5JTCkKIAkJZWZsYWdzIHw9IEVYRUNfRkxB R19SRVdJTkQ7CiAJZWxzZQogCQllZmxhZ3MgJj0gfkVYRUNfRkxBR19SRVdJTkQ7CiAJaW5uZXJQ bGFuU3RhdGUobmxzdGF0ZSkgPSBFeGVjSW5pdE5vZGUoaW5uZXJQbGFuKG5vZGUpLCBlc3RhdGUs IGVmbGFncyk7CisJaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0YXRlKSkKKwkJcmV0dXJuIG5s c3RhdGU7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgcmVzdWx0IHNsb3QsIHR5cGUgYW5kIHByb2pl Y3Rpb24uCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlUHJvamVjdFNldC5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVByb2plY3RTZXQuYwppbmRleCBmNmZmM2RjNDRj Li5iODViYTJjZjIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlUHJvamVj dFNldC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVQcm9qZWN0U2V0LmMKQEAgLTI0 Nyw2ICsyNDcsOCBAQCBFeGVjSW5pdFByb2plY3RTZXQoUHJvamVjdFNldCAqbm9kZSwgRVN0YXRl ICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICogaW5pdGlhbGl6ZSBjaGlsZCBub2RlcwogCSAqLwog CW91dGVyUGxhblN0YXRlKHN0YXRlKSA9IEV4ZWNJbml0Tm9kZShvdXRlclBsYW4obm9kZSksIGVz dGF0ZSwgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQlyZXR1 cm4gc3RhdGU7CiAKIAkvKgogCSAqIHdlIGRvbid0IHVzZSBpbm5lciBwbGFuCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlUmVjdXJzaXZldW5pb24uYyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVSZWN1cnNpdmV1bmlvbi5jCmluZGV4IGU3ODEwMDM5MzQuLjk2N2ZlNGYy ODcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVSZWN1cnNpdmV1bmlvbi5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVSZWN1cnNpdmV1bmlvbi5jCkBAIC0yNDQs NyArMjQ0LDExIEBAIEV4ZWNJbml0UmVjdXJzaXZlVW5pb24oUmVjdXJzaXZlVW5pb24gKm5vZGUs IEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAqIGluaXRpYWxpemUgY2hpbGQgbm9kZXMK IAkgKi8KIAlvdXRlclBsYW5TdGF0ZShydXN0YXRlKSA9IEV4ZWNJbml0Tm9kZShvdXRlclBsYW4o bm9kZSksIGVzdGF0ZSwgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUp KQorCQlyZXR1cm4gcnVzdGF0ZTsKIAlpbm5lclBsYW5TdGF0ZShydXN0YXRlKSA9IEV4ZWNJbml0 Tm9kZShpbm5lclBsYW4obm9kZSksIGVzdGF0ZSwgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQbGFuU3Rp bGxWYWxpZChlc3RhdGUpKQorCQlyZXR1cm4gcnVzdGF0ZTsKIAogCS8qCiAJICogSWYgaGFzaGlu ZywgcHJlY29tcHV0ZSBmbWdyIGxvb2t1cCBkYXRhIGZvciBpbm5lciBsb29wLCBhbmQgY3JlYXRl IHRoZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVJlc3VsdC5jIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVJlc3VsdC5jCmluZGV4IDQyMTk3MTJkMzAuLmE3OWQ0MDdm YTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVSZXN1bHQuYworKysgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlUmVzdWx0LmMKQEAgLTIwOCw2ICsyMDgsOCBAQCBFeGVj SW5pdFJlc3VsdChSZXN1bHQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAq IGluaXRpYWxpemUgY2hpbGQgbm9kZXMKIAkgKi8KIAlvdXRlclBsYW5TdGF0ZShyZXNzdGF0ZSkg PSBFeGVjSW5pdE5vZGUob3V0ZXJQbGFuKG5vZGUpLCBlc3RhdGUsIGVmbGFncyk7CisJaWYgKCFF eGVjUGxhblN0aWxsVmFsaWQoZXN0YXRlKSkKKwkJcmV0dXJuIHJlc3N0YXRlOwogCiAJLyoKIAkg KiB3ZSBkb24ndCB1c2UgaW5uZXIgcGxhbgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZVNhbXBsZXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTYW1wbGVzY2Fu LmMKaW5kZXggZDdlMjJiMWRiYi4uMzFhNjE0ODk3NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZVNhbXBsZXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl U2FtcGxlc2Nhbi5jCkBAIC0xMjUsNiArMTI1LDggQEAgRXhlY0luaXRTYW1wbGVTY2FuKFNhbXBs ZVNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQlFeGVjT3BlblNjYW5S ZWxhdGlvbihlc3RhdGUsCiAJCQkJCQkJIG5vZGUtPnNjYW4uc2NhbnJlbGlkLAogCQkJCQkJCSBl ZmxhZ3MpOworCWlmICghRXhlY1BsYW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJCXJldHVybiBzY2Fu c3RhdGU7CiAKIAkvKiB3ZSB3b24ndCBzZXQgdXAgdGhlIEhlYXBTY2FuRGVzYyB0aWxsIGxhdGVy ICovCiAJc2NhbnN0YXRlLT5zcy5zc19jdXJyZW50U2NhbkRlc2MgPSBOVUxMOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVTZXFzY2FuLmMKaW5kZXggNGRhMGYyOGY3Yi4uODhmZTRkNDBkNSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlU2Vxc2Nhbi5jCkBAIC0xNTMsNiArMTUzLDggQEAgRXhlY0luaXRTZXFTY2Fu KFNlcVNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQlFeGVjT3BlblNj YW5SZWxhdGlvbihlc3RhdGUsCiAJCQkJCQkJIG5vZGUtPnNjYW4uc2NhbnJlbGlkLAogCQkJCQkJ CSBlZmxhZ3MpOworCWlmICghRXhlY1BsYW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJCXJldHVybiBz Y2Fuc3RhdGU7CiAKIAkvKiBhbmQgY3JlYXRlIHNsb3Qgd2l0aCB0aGUgYXBwcm9wcmlhdGUgcm93 dHlwZSAqLwogCUV4ZWNJbml0U2NhblR1cGxlU2xvdChlc3RhdGUsICZzY2Fuc3RhdGUtPnNzLApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNldE9wLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlU2V0T3AuYwppbmRleCA0YmMyNDA2Yjg5Li42OTdkYzY5OWE1IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2V0T3AuYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlU2V0T3AuYwpAQCAtNTI4LDYgKzUyOCw4IEBAIEV4ZWNJbml0U2V0T3Ao U2V0T3AgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWlmIChub2RlLT5zdHJh dGVneSA9PSBTRVRPUF9IQVNIRUQpCiAJCWVmbGFncyAmPSB+RVhFQ19GTEFHX1JFV0lORDsKIAlv dXRlclBsYW5TdGF0ZShzZXRvcHN0YXRlKSA9IEV4ZWNJbml0Tm9kZShvdXRlclBsYW4obm9kZSks IGVzdGF0ZSwgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQly ZXR1cm4gc2V0b3BzdGF0ZTsKIAlvdXRlckRlc2MgPSBFeGVjR2V0UmVzdWx0VHlwZShvdXRlclBs YW5TdGF0ZShzZXRvcHN0YXRlKSk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZVNvcnQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTb3J0LmMKaW5kZXgg YzZjNzJjNmU2Ny4uYzhlZDUzNGYyOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZVNvcnQuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU29ydC5jCkBAIC0yNjMs NiArMjYzLDggQEAgRXhlY0luaXRTb3J0KFNvcnQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQg ZWZsYWdzKQogCWVmbGFncyAmPSB+KEVYRUNfRkxBR19SRVdJTkQgfCBFWEVDX0ZMQUdfQkFDS1dB UkQgfCBFWEVDX0ZMQUdfTUFSSyk7CiAKIAlvdXRlclBsYW5TdGF0ZShzb3J0c3RhdGUpID0gRXhl Y0luaXROb2RlKG91dGVyUGxhbihub2RlKSwgZXN0YXRlLCBlZmxhZ3MpOworCWlmICghRXhlY1Bs YW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJCXJldHVybiBzb3J0c3RhdGU7CiAKIAkvKgogCSAqIElu aXRpYWxpemUgc2NhbiBzbG90IGFuZCB0eXBlLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZVN1YnF1ZXJ5c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVN1YnF1 ZXJ5c2Nhbi5jCmluZGV4IDQyNDcxYmZjMDQuLjNiYjhiYmJiODQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVTdWJxdWVyeXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlU3VicXVlcnlzY2FuLmMKQEAgLTEyNCw2ICsxMjQsOCBAQCBFeGVjSW5pdFN1YnF1 ZXJ5U2NhbihTdWJxdWVyeVNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQog CSAqIGluaXRpYWxpemUgc3VicXVlcnkKIAkgKi8KIAlzdWJxdWVyeXN0YXRlLT5zdWJwbGFuID0g RXhlY0luaXROb2RlKG5vZGUtPnN1YnBsYW4sIGVzdGF0ZSwgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQ bGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQlyZXR1cm4gc3VicXVlcnlzdGF0ZTsKIAogCS8qCiAJ ICogSW5pdGlhbGl6ZSBzY2FuIHNsb3QgYW5kIHR5cGUgKG5lZWRlZCBieSBFeGVjQXNzaWduU2Nh blByb2plY3Rpb25JbmZvKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRp ZHJhbmdlc2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRpZHJhbmdlc2Nhbi5jCmlu ZGV4IDIxMjRjNTVlZjUuLmM1MjhhNjNjMzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVUaWRyYW5nZXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlVGlk cmFuZ2VzY2FuLmMKQEAgLTM4Niw2ICszODYsOCBAQCBFeGVjSW5pdFRpZFJhbmdlU2NhbihUaWRS YW5nZVNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAqIG9wZW4gdGhl IHNjYW4gcmVsYXRpb24KIAkgKi8KIAljdXJyZW50UmVsYXRpb24gPSBFeGVjT3BlblNjYW5SZWxh dGlvbihlc3RhdGUsIG5vZGUtPnNjYW4uc2NhbnJlbGlkLCBlZmxhZ3MpOworCWlmICghRXhlY1Bs YW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJCXJldHVybiB0aWRyYW5nZXN0YXRlOwogCiAJdGlkcmFu Z2VzdGF0ZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uID0gY3VycmVudFJlbGF0aW9uOwogCXRpZHJh bmdlc3RhdGUtPnNzLnNzX2N1cnJlbnRTY2FuRGVzYyA9IE5VTEw7CS8qIG5vIHRhYmxlIHNjYW4g aGVyZSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRpZHNjYW4uYyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVUaWRzY2FuLmMKaW5kZXggZmU2YTk2NGVlMS4uYThl NDQ5ZTcwYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRpZHNjYW4uYwor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlVGlkc2Nhbi5jCkBAIC01MjksNiArNTI5LDgg QEAgRXhlY0luaXRUaWRTY2FuKFRpZFNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZs YWdzKQogCSAqIG9wZW4gdGhlIHNjYW4gcmVsYXRpb24KIAkgKi8KIAljdXJyZW50UmVsYXRpb24g PSBFeGVjT3BlblNjYW5SZWxhdGlvbihlc3RhdGUsIG5vZGUtPnNjYW4uc2NhbnJlbGlkLCBlZmxh Z3MpOworCWlmICghRXhlY1BsYW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJCXJldHVybiB0aWRzdGF0 ZTsKIAogCXRpZHN0YXRlLT5zcy5zc19jdXJyZW50UmVsYXRpb24gPSBjdXJyZW50UmVsYXRpb247 CiAJdGlkc3RhdGUtPnNzLnNzX2N1cnJlbnRTY2FuRGVzYyA9IE5VTEw7IC8qIG5vIGhlYXAgc2Nh biBoZXJlICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlVW5pcXVlLmMg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlVW5pcXVlLmMKaW5kZXggNDUwMzVkNzRmYS4uNmIx ODNkNzMyNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVVuaXF1ZS5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVVbmlxdWUuYwpAQCAtMTM2LDYgKzEzNiw4IEBA IEV4ZWNJbml0VW5pcXVlKFVuaXF1ZSAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3Mp CiAJICogdGhlbiBpbml0aWFsaXplIG91dGVyIHBsYW4KIAkgKi8KIAlvdXRlclBsYW5TdGF0ZSh1 bmlxdWVzdGF0ZSkgPSBFeGVjSW5pdE5vZGUob3V0ZXJQbGFuKG5vZGUpLCBlc3RhdGUsIGVmbGFn cyk7CisJaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0YXRlKSkKKwkJcmV0dXJuIHVuaXF1ZXN0 YXRlOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHJlc3VsdCBzbG90IGFuZCB0eXBlLiBVbmlxdWUg bm9kZXMgZG8gbm8gcHJvamVjdGlvbnMsIHNvCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlV2luZG93QWdnLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdn LmMKaW5kZXggZDYxZDU3ZTlhOC4uMjM5YWQxNGRmYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVX aW5kb3dBZ2cuYwpAQCAtMjQ1MCw2ICsyNDUwLDggQEAgRXhlY0luaXRXaW5kb3dBZ2coV2luZG93 QWdnICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkgKi8KIAlvdXRlclBsYW4g PSBvdXRlclBsYW4obm9kZSk7CiAJb3V0ZXJQbGFuU3RhdGUod2luc3RhdGUpID0gRXhlY0luaXRO b2RlKG91dGVyUGxhbiwgZXN0YXRlLCBlZmxhZ3MpOworCWlmICghRXhlY1BsYW5TdGlsbFZhbGlk KGVzdGF0ZSkpCisJCXJldHVybiB3aW5zdGF0ZTsKIAogCS8qCiAJICogaW5pdGlhbGl6ZSBzb3Vy Y2UgdHVwbGUgdHlwZSAod2hpY2ggaXMgYWxzbyB0aGUgdHVwbGUgdHlwZSB0aGF0IHdlJ2xsCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL3NwaS5jCmluZGV4IDYxZjAzZTM5OTkuLjM4ZDc2YzY3MTkgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL3NwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jCkBA IC03MSw3ICs3MSw3IEBAIHN0YXRpYyBpbnQJX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxhblB0ciBw bGFuLCBjb25zdCBTUElFeGVjdXRlT3B0aW9ucyAqb3B0aW9ucywKIHN0YXRpYyBQYXJhbUxpc3RJ bmZvIF9TUElfY29udmVydF9wYXJhbXMoaW50IG5hcmdzLCBPaWQgKmFyZ3R5cGVzLAogCQkJCQkJ CQkJCSBEYXR1bSAqVmFsdWVzLCBjb25zdCBjaGFyICpOdWxscyk7CiAKLXN0YXRpYyBpbnQJX1NQ SV9wcXVlcnkoUXVlcnlEZXNjICpxdWVyeURlc2MsIGJvb2wgZmlyZV90cmlnZ2VycywgdWludDY0 IHRjb3VudCk7CitzdGF0aWMgaW50CV9TUElfcHF1ZXJ5KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCB1 aW50NjQgdGNvdW50KTsKIAogc3RhdGljIHZvaWQgX1NQSV9lcnJvcl9jYWxsYmFjayh2b2lkICph cmcpOwogCkBAIC0xNjIzLDYgKzE2MjMsNyBAQCBTUElfY3Vyc29yX29wZW5faW50ZXJuYWwoY29u c3QgY2hhciAqbmFtZSwgU1BJUGxhblB0ciBwbGFuLAogCV9TUElfY3VycmVudC0+cHJvY2Vzc2Vk ID0gMDsKIAlfU1BJX2N1cnJlbnQtPnR1cHRhYmxlID0gTlVMTDsKIAorcmVwbGFuOgogCS8qIENy ZWF0ZSB0aGUgcG9ydGFsICovCiAJaWYgKG5hbWUgPT0gTlVMTCB8fCBuYW1lWzBdID09ICdcMCcp CiAJewpAQCAtMTc2Niw3ICsxNzY3LDggQEAgU1BJX2N1cnNvcl9vcGVuX2ludGVybmFsKGNvbnN0 IGNoYXIgKm5hbWUsIFNQSVBsYW5QdHIgcGxhbiwKIAl9CiAKIAkvKgotCSAqIFN0YXJ0IHBvcnRh bCBleGVjdXRpb24uCisJICogU3RhcnQgcG9ydGFsIGV4ZWN1dGlvbi4gIElmIHRoZSBwb3J0YWwg Y29udGFpbnMgYSBjYWNoZWQgcGxhbiwgaXQgbXVzdAorCSAqIGJlIHJlY3JlYXRlZCBpZiAqcmVw bGFuIGlzIHNldC4KIAkgKi8KIAlQb3J0YWxTdGFydChwb3J0YWwsIHBhcmFtTEksIDAsIHNuYXBz aG90KTsKIApAQCAtMTc3NSw2ICsxNzc3LDEyIEBAIFNQSV9jdXJzb3Jfb3Blbl9pbnRlcm5hbChj b25zdCBjaGFyICpuYW1lLCBTUElQbGFuUHRyIHBsYW4sCiAJLyogUG9wIHRoZSBlcnJvciBjb250 ZXh0IHN0YWNrICovCiAJZXJyb3JfY29udGV4dF9zdGFjayA9IHNwaWVycmNvbnRleHQucHJldmlv dXM7CiAKKwlpZiAoIXBvcnRhbC0+cGxhbl92YWxpZCkKKwl7CisJCVBvcnRhbERyb3AocG9ydGFs LCBmYWxzZSk7CisJCWdvdG8gcmVwbGFuOworCX0KKwogCS8qIFBvcCB0aGUgU1BJIHN0YWNrICov CiAJX1NQSV9lbmRfY2FsbCh0cnVlKTsKIApAQCAtMjU0OCw2ICsyNTU2LDcgQEAgX1NQSV9leGVj dXRlX3BsYW4oU1BJUGxhblB0ciBwbGFuLCBjb25zdCBTUElFeGVjdXRlT3B0aW9ucyAqb3B0aW9u cywKIAkJICogUmVwbGFuIGlmIG5lZWRlZCwgYW5kIGluY3JlbWVudCBwbGFuIHJlZmNvdW50LiAg SWYgaXQncyBhIHNhdmVkCiAJCSAqIHBsYW4sIHRoZSByZWZjb3VudCBtdXN0IGJlIGJhY2tlZCBi eSB0aGUgcGxhbl9vd25lci4KIAkJICovCityZXBsYW46CiAJCWNwbGFuID0gR2V0Q2FjaGVkUGxh bihwbGFuc291cmNlLCBvcHRpb25zLT5wYXJhbXMsCiAJCQkJCQkJICBwbGFuX293bmVyLCBfU1BJ X2N1cnJlbnQtPnF1ZXJ5RW52KTsKIApAQCAtMjY1Nyw2ICsyNjY2LDcgQEAgX1NQSV9leGVjdXRl X3BsYW4oU1BJUGxhblB0ciBwbGFuLCBjb25zdCBTUElFeGVjdXRlT3B0aW9ucyAqb3B0aW9ucywK IAkJCXsKIAkJCQlRdWVyeURlc2MgICpxZGVzYzsKIAkJCQlTbmFwc2hvdAlzbmFwOworCQkJCWlu dAkJCWVmbGFnczsKIAogCQkJCWlmIChBY3RpdmVTbmFwc2hvdFNldCgpKQogCQkJCQlzbmFwID0g R2V0QWN0aXZlU25hcHNob3QoKTsKQEAgLTI2NjQsMTQgKzI2NzQsMjkgQEAgX1NQSV9leGVjdXRl X3BsYW4oU1BJUGxhblB0ciBwbGFuLCBjb25zdCBTUElFeGVjdXRlT3B0aW9ucyAqb3B0aW9ucywK IAkJCQkJc25hcCA9IEludmFsaWRTbmFwc2hvdDsKIAogCQkJCXFkZXNjID0gQ3JlYXRlUXVlcnlE ZXNjKHN0bXQsCisJCQkJCQkJCQkJY3BsYW4sCiAJCQkJCQkJCQkJcGxhbnNvdXJjZS0+cXVlcnlf c3RyaW5nLAogCQkJCQkJCQkJCXNuYXAsIGNyb3NzY2hlY2tfc25hcHNob3QsCiAJCQkJCQkJCQkJ ZGVzdCwKIAkJCQkJCQkJCQlvcHRpb25zLT5wYXJhbXMsCiAJCQkJCQkJCQkJX1NQSV9jdXJyZW50 LT5xdWVyeUVudiwKIAkJCQkJCQkJCQkwKTsKLQkJCQlyZXMgPSBfU1BJX3BxdWVyeShxZGVzYywg ZmlyZV90cmlnZ2VycywKLQkJCQkJCQkJICBjYW5TZXRUYWcgPyBvcHRpb25zLT50Y291bnQgOiAw KTsKKworCQkJCS8qIFNlbGVjdCBleGVjdXRpb24gb3B0aW9ucyAqLworCQkJCWlmIChmaXJlX3Ry aWdnZXJzKQorCQkJCQllZmxhZ3MgPSAwOwkJCQkvKiBkZWZhdWx0IHJ1bi10by1jb21wbGV0aW9u IGZsYWdzICovCisJCQkJZWxzZQorCQkJCQllZmxhZ3MgPSBFWEVDX0ZMQUdfU0tJUF9UUklHR0VS UzsKKwkJCQlFeGVjdXRvclN0YXJ0KHFkZXNjLCBlZmxhZ3MpOworCQkJCWlmICghcWRlc2MtPnBs YW5fdmFsaWQpCisJCQkJeworCQkJCQlFeGVjdXRvckZpbmlzaChxZGVzYyk7CisJCQkJCUV4ZWN1 dG9yRW5kKHFkZXNjKTsKKwkJCQkJRnJlZVF1ZXJ5RGVzYyhxZGVzYyk7CisJCQkJCWdvdG8gcmVw bGFuOworCQkJCX0KKworCQkJCXJlcyA9IF9TUElfcHF1ZXJ5KHFkZXNjLCBjYW5TZXRUYWcgPyBv cHRpb25zLT50Y291bnQgOiAwKTsKIAkJCQlGcmVlUXVlcnlEZXNjKHFkZXNjKTsKIAkJCX0KIAkJ CWVsc2UKQEAgLTI4NDYsMTAgKzI4NzEsOSBAQCBfU1BJX2NvbnZlcnRfcGFyYW1zKGludCBuYXJn cywgT2lkICphcmd0eXBlcywKIH0KIAogc3RhdGljIGludAotX1NQSV9wcXVlcnkoUXVlcnlEZXNj ICpxdWVyeURlc2MsIGJvb2wgZmlyZV90cmlnZ2VycywgdWludDY0IHRjb3VudCkKK19TUElfcHF1 ZXJ5KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCB1aW50NjQgdGNvdW50KQogewogCWludAkJCW9wZXJh dGlvbiA9IHF1ZXJ5RGVzYy0+b3BlcmF0aW9uOwotCWludAkJCWVmbGFnczsKIAlpbnQJCQlyZXM7 CiAKIAlzd2l0Y2ggKG9wZXJhdGlvbikKQEAgLTI4OTMsMTQgKzI5MTcsNiBAQCBfU1BJX3BxdWVy eShRdWVyeURlc2MgKnF1ZXJ5RGVzYywgYm9vbCBmaXJlX3RyaWdnZXJzLCB1aW50NjQgdGNvdW50 KQogCQlSZXNldFVzYWdlKCk7CiAjZW5kaWYKIAotCS8qIFNlbGVjdCBleGVjdXRpb24gb3B0aW9u cyAqLwotCWlmIChmaXJlX3RyaWdnZXJzKQotCQllZmxhZ3MgPSAwOwkJCQkvKiBkZWZhdWx0IHJ1 bi10by1jb21wbGV0aW9uIGZsYWdzICovCi0JZWxzZQotCQllZmxhZ3MgPSBFWEVDX0ZMQUdfU0tJ UF9UUklHR0VSUzsKLQotCUV4ZWN1dG9yU3RhcnQocXVlcnlEZXNjLCBlZmxhZ3MpOwotCiAJRXhl Y3V0b3JSdW4ocXVlcnlEZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgdGNvdW50LCB0cnVlKTsK IAogCV9TUElfY3VycmVudC0+cHJvY2Vzc2VkID0gcXVlcnlEZXNjLT5lc3RhdGUtPmVzX3Byb2Nl c3NlZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL01ha2VmaWxlIGIvc3JjL2JhY2tl bmQvbm9kZXMvTWFrZWZpbGUKaW5kZXggYWYxMmM2NDg3OC4uN2ZiMGQyZDIwMiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvbm9kZXMvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvTWFr ZWZpbGUKQEAgLTUyLDYgKzUyLDcgQEAgbm9kZV9oZWFkZXJzID0gXAogCWFjY2Vzcy90c21hcGku aCBcCiAJY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIFwKIAljb21tYW5kcy90cmlnZ2VyLmggXAor CWV4ZWN1dG9yL2V4ZWNkZXNjLmggXAogCWV4ZWN1dG9yL3R1cHRhYmxlLmggXAogCWZvcmVpZ24v ZmR3YXBpLmggXAogCW5vZGVzL2JpdG1hcHNldC5oIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L25vZGVzL2dlbl9ub2RlX3N1cHBvcnQucGwgYi9zcmMvYmFja2VuZC9ub2Rlcy9nZW5fbm9kZV9z dXBwb3J0LnBsCmluZGV4IDE5ZWQyOTY1N2MuLjY5ZTYwMjA2YmEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL25vZGVzL2dlbl9ub2RlX3N1cHBvcnQucGwKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMv Z2VuX25vZGVfc3VwcG9ydC5wbApAQCAtNjMsNiArNjMsNyBAQCBteSBAYWxsX2lucHV0X2ZpbGVz ID0gcXcoCiAgIGFjY2Vzcy90c21hcGkuaAogICBjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKICAg Y29tbWFuZHMvdHJpZ2dlci5oCisgIGV4ZWN1dG9yL2V4ZWNkZXNjLmgKICAgZXhlY3V0b3IvdHVw dGFibGUuaAogICBmb3JlaWduL2Zkd2FwaS5oCiAgIG5vZGVzL2JpdG1hcHNldC5oCkBAIC04Nyw2 ICs4OCw3IEBAIG15IEBub2RldGFnX29ubHlfZmlsZXMgPSBxdygKICAgYWNjZXNzL3RzbWFwaS5o CiAgIGNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAogICBjb21tYW5kcy90cmlnZ2VyLmgKKyAgZXhl Y3V0b3IvZXhlY2Rlc2MuaAogICBleGVjdXRvci90dXB0YWJsZS5oCiAgIGZvcmVpZ24vZmR3YXBp LmgKICAgbm9kZXMvbG9ja29wdGlvbnMuaApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5j CmluZGV4IGRiNWZmNmZkY2EuLjY3MGViYTNhM2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9w bGFubmVyLmMKQEAgLTUyNyw2ICs1MjcsNyBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJz ZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKIAlyZXN1bHQt PnBhcnRQcnVuZUluZm9zID0gZ2xvYi0+cGFydFBydW5lSW5mb3M7CiAJcmVzdWx0LT5ydGFibGUg PSBnbG9iLT5maW5hbHJ0YWJsZTsKIAlyZXN1bHQtPnBlcm1JbmZvcyA9IGdsb2ItPmZpbmFscnRl cGVybWluZm9zOworCXJlc3VsdC0+dmlld1JlbGF0aW9ucyA9IGdsb2ItPnZpZXdSZWxhdGlvbnM7 CiAJcmVzdWx0LT5yZXN1bHRSZWxhdGlvbnMgPSBnbG9iLT5yZXN1bHRSZWxhdGlvbnM7CiAJcmVz dWx0LT5hcHBlbmRSZWxhdGlvbnMgPSBnbG9iLT5hcHBlbmRSZWxhdGlvbnM7CiAJcmVzdWx0LT5z dWJwbGFucyA9IGdsb2ItPnN1YnBsYW5zOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vc2V0cmVmcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5j CmluZGV4IDE4NmZjODAxNGIuLjQ1NGUzMGUwY2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9z ZXRyZWZzLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5j bHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgi CiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCkBAIC01OTksNiArNjAwLDEwIEBAIGFkZF9y dGVfdG9fZmxhdF9ydGFibGUoUGxhbm5lckdsb2JhbCAqZ2xvYiwgTGlzdCAqcnRlcGVybWluZm9z LAogCQkobmV3cnRlLT5ydGVraW5kID09IFJURV9TVUJRVUVSWSAmJiBPaWRJc1ZhbGlkKG5ld3J0 ZS0+cmVsaWQpKSkKIAkJZ2xvYi0+cmVsYXRpb25PaWRzID0gbGFwcGVuZF9vaWQoZ2xvYi0+cmVs YXRpb25PaWRzLCBuZXdydGUtPnJlbGlkKTsKIAorCWlmIChuZXdydGUtPnJlbGtpbmQgPT0gUkVM S0lORF9WSUVXKQorCQlnbG9iLT52aWV3UmVsYXRpb25zID0gbGFwcGVuZF9pbnQoZ2xvYi0+dmll d1JlbGF0aW9ucywKKwkJCQkJCQkJCQkgIGxpc3RfbGVuZ3RoKGdsb2ItPmZpbmFscnRhYmxlKSk7 CisKIAkvKgogCSAqIEFkZCBhIGNvcHkgb2YgdGhlIFJURVBlcm1pc3Npb25JbmZvLCBpZiBhbnks IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBSVEUKIAkgKiB0byB0aGUgZmxhdHRlbmVkIGdsb2JhbCBs aXN0LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlSGFuZGxlci5jIGIv c3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlSGFuZGxlci5jCmluZGV4IGM3NGJhYzIwYjEuLjI5 ZDEzZTk1ZGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZUhhbmRsZXIu YworKysgYi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmMKQEAgLTE4MzQsMTEg KzE4MzQsMTAgQEAgQXBwbHlSZXRyaWV2ZVJ1bGUoUXVlcnkgKnBhcnNldHJlZSwKIAogCS8qCiAJ ICogQ2xlYXIgZmllbGRzIHRoYXQgc2hvdWxkIG5vdCBiZSBzZXQgaW4gYSBzdWJxdWVyeSBSVEUu ICBOb3RlIHRoYXQgd2UKLQkgKiBsZWF2ZSB0aGUgcmVsaWQsIHJlbGxvY2ttb2RlLCBhbmQgcGVy bWluZm9pbmRleCBmaWVsZHMgc2V0LCBzbyB0aGF0IHRoZQotCSAqIHZpZXcgcmVsYXRpb24gY2Fu IGJlIGFwcHJvcHJpYXRlbHkgbG9ja2VkIGJlZm9yZSBleGVjdXRpb24gYW5kIGl0cwotCSAqIHBl cm1pc3Npb25zIGNoZWNrZWQuCisJICogbGVhdmUgdGhlIHJlbGlkLCByZWxraW5kLCByZWxsb2Nr bW9kZSwgYW5kIHBlcm1pbmZvaW5kZXggZmllbGRzIHNldCwKKwkgKiBzbyB0aGF0IHRoZSB2aWV3 IHJlbGF0aW9uIGNhbiBiZSBhcHByb3ByaWF0ZWx5IGxvY2tlZCBiZWZvcmUgZXhlY3V0aW9uCisJ ICogYW5kIGl0cyBwZXJtaXNzaW9ucyBjaGVja2VkLgogCSAqLwotCXJ0ZS0+cmVsa2luZCA9IDA7 CiAJcnRlLT50YWJsZXNhbXBsZSA9IE5VTEw7CiAJcnRlLT5pbmggPSBmYWxzZTsJCQkvKiBtdXN0 IG5vdCBiZSBzZXQgZm9yIGEgc3VicXVlcnkgKi8KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9sbWdyL2xtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sbWdyLmMKaW5k ZXggZWU5Yjg5YTY3Mi4uYzgwN2U5Y2RjYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9sbWdyL2xtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG1nci5jCkBAIC0y Nyw2ICsyNyw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKICNpbmNsdWRlICJz dG9yYWdlL3NpbnZhbGFkdC5oIgogI2luY2x1ZGUgInV0aWxzL2ludmFsLmgiCisjaW5jbHVkZSAi dXRpbHMvbHN5c2NhY2hlLmgiCiAKIAogLyoKQEAgLTM2NCw2ICszNjUsNTAgQEAgQ2hlY2tSZWxh dGlvbkxvY2tlZEJ5TWUoUmVsYXRpb24gcmVsYXRpb24sIExPQ0tNT0RFIGxvY2ttb2RlLCBib29s IG9yc3Ryb25nZXIpCiAJcmV0dXJuIGZhbHNlOwogfQogCisvKgorICoJCUNoZWNrUmVsTG9ja2Vk QnlNZQorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBjdXJyZW50IHRyYW5zYWN0aW9uIGhvbGRzIGEg bG9jayBvbiB0aGUgZ2l2ZW4gcmVsYXRpb24gb2YKKyAqIG1vZGUgJ2xvY2ttb2RlJy4gIElmICdv cnN0cm9uZ2VyJyBpcyB0cnVlLCBhIHN0cm9uZ2VyIGxvY2ttb2RlIGlzIGFsc28gT0suCisgKiAo IlN0cm9uZ2VyIiBpcyBkZWZpbmVkIGFzICJudW1lcmljYWxseSBoaWdoZXIiLCB3aGljaCBpcyBh IGJpdAorICogc2VtYW50aWNhbGx5IGR1YmlvdXMgYnV0IGlzIE9LIGZvciB0aGUgcHVycG9zZXMg d2UgdXNlIHRoaXMgZm9yLikKKyAqLworYm9vbAorQ2hlY2tSZWxMb2NrZWRCeU1lKE9pZCByZWxp ZCwgTE9DS01PREUgbG9ja21vZGUsIGJvb2wgb3JzdHJvbmdlcikKK3sKKwlPaWQJCQlkYklkID0g Z2V0X3JlbF9yZWxpc3NoYXJlZChyZWxpZCkgPyBJbnZhbGlkT2lkIDogTXlEYXRhYmFzZUlkOwor CUxPQ0tUQUcJCXRhZzsKKworCVNFVF9MT0NLVEFHX1JFTEFUSU9OKHRhZywgZGJJZCwgcmVsaWQp OworCisJaWYgKExvY2tIZWxkQnlNZSgmdGFnLCBsb2NrbW9kZSkpCisJCXJldHVybiB0cnVlOwor CisJaWYgKG9yc3Ryb25nZXIpCisJeworCQlMT0NLTU9ERQlzbG9ja21vZGU7CisKKwkJZm9yIChz bG9ja21vZGUgPSBsb2NrbW9kZSArIDE7CisJCQkgc2xvY2ttb2RlIDw9IE1heExvY2tNb2RlOwor CQkJIHNsb2NrbW9kZSsrKQorCQl7CisJCQlpZiAoTG9ja0hlbGRCeU1lKCZ0YWcsIHNsb2NrbW9k ZSkpCisJCQl7CisjaWZkZWYgTk9UX1VTRUQKKwkJCQkvKiBTb21ldGltZXMgdGhpcyBtaWdodCBi ZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAqLworCQkJCWVsb2coV0FSTklORywgImxv Y2sgbW9kZSAlcyBzdWJzdGl0dXRlZCBmb3IgJXMgb24gcmVsYXRpb24gJXMiLAorCQkJCQkgR2V0 TG9ja21vZGVOYW1lKHRhZy5sb2NrdGFnX2xvY2ttZXRob2RpZCwgc2xvY2ttb2RlKSwKKwkJCQkJ IEdldExvY2ttb2RlTmFtZSh0YWcubG9ja3RhZ19sb2NrbWV0aG9kaWQsIGxvY2ttb2RlKSwKKwkJ CQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSk7CisjZW5kaWYKKwkJCQlyZXR1 cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBmYWxzZTsKK30KKwogLyoKICAqCQlM b2NrSGFzV2FpdGVyc1JlbGF0aW9uCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9w b3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IDQ3MGI3MzRlOWUu LjM0ZDNmNGZmOGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysg Yi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTExOTYsNiArMTE5Niw3IEBAIGV4ZWNf c2ltcGxlX3F1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZykKIAkJICogU3RhcnQgdGhlIHBv cnRhbC4gIE5vIHBhcmFtZXRlcnMgaGVyZS4KIAkJICovCiAJCVBvcnRhbFN0YXJ0KHBvcnRhbCwg TlVMTCwgMCwgSW52YWxpZFNuYXBzaG90KTsKKwkJQXNzZXJ0KHBvcnRhbC0+cGxhbl92YWxpZCk7 CiAKIAkJLyoKIAkJICogU2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBvdXRwdXQgZm9ybWF0OiB0ZXh0 IHVubGVzcyB3ZSBhcmUgZG9pbmcgYQpAQCAtMTcwMCw2ICsxNzAxLDcgQEAgZXhlY19iaW5kX21l c3NhZ2UoU3RyaW5nSW5mbyBpbnB1dF9tZXNzYWdlKQogCQkJCQkJImNvbW1hbmRzIGlnbm9yZWQg dW50aWwgZW5kIG9mIHRyYW5zYWN0aW9uIGJsb2NrIiksCiAJCQkJIGVycmRldGFpbF9hYm9ydCgp KSk7CiAKK3JlcGxhbjoKIAkvKgogCSAqIENyZWF0ZSB0aGUgcG9ydGFsLiAgQWxsb3cgc2lsZW50 IHJlcGxhY2VtZW50IG9mIGFuIGV4aXN0aW5nIHBvcnRhbCBvbmx5CiAJICogaWYgdGhlIHVubmFt ZWQgcG9ydGFsIGlzIHNwZWNpZmllZC4KQEAgLTE5OTUsNiArMTk5NywxMiBAQCBleGVjX2JpbmRf bWVzc2FnZShTdHJpbmdJbmZvIGlucHV0X21lc3NhZ2UpCiAJICovCiAJUG9ydGFsU3RhcnQocG9y dGFsLCBwYXJhbXMsIDAsIEludmFsaWRTbmFwc2hvdCk7CiAKKwlpZiAoIXBvcnRhbC0+cGxhbl92 YWxpZCkKKwl7CisJCVBvcnRhbERyb3AocG9ydGFsLCBmYWxzZSk7CisJCWdvdG8gcmVwbGFuOwor CX0KKwogCS8qCiAJICogQXBwbHkgdGhlIHJlc3VsdCBmb3JtYXQgcmVxdWVzdHMgdG8gdGhlIHBv cnRhbC4KIAkgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMgYi9zcmMv YmFja2VuZC90Y29wL3BxdWVyeS5jCmluZGV4IDVmMDI0OGFjYzUuLmNmM2E5NzkwZDYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9w cXVlcnkuYwpAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKICNp bmNsdWRlICJjb21tYW5kcy9wcmVwYXJlLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY2Rlc2Mu aCIKICNpbmNsdWRlICJleGVjdXRvci90c3RvcmVSZWNlaXZlci5oIgogI2luY2x1ZGUgIm1pc2Nh ZG1pbi5oIgogI2luY2x1ZGUgInBnX3RyYWNlLmgiCkBAIC0zNSwxMiArMzYsNiBAQAogUG9ydGFs CQlBY3RpdmVQb3J0YWwgPSBOVUxMOwogCiAKLXN0YXRpYyB2b2lkIFByb2Nlc3NRdWVyeShQbGFu bmVkU3RtdCAqcGxhbiwKLQkJCQkJCSBjb25zdCBjaGFyICpzb3VyY2VUZXh0LAotCQkJCQkJIFBh cmFtTGlzdEluZm8gcGFyYW1zLAotCQkJCQkJIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LAot CQkJCQkJIERlc3RSZWNlaXZlciAqZGVzdCwKLQkJCQkJCSBRdWVyeUNvbXBsZXRpb24gKnFjKTsK IHN0YXRpYyB2b2lkIEZpbGxQb3J0YWxTdG9yZShQb3J0YWwgcG9ydGFsLCBib29sIGlzVG9wTGV2 ZWwpOwogc3RhdGljIHVpbnQ2NCBSdW5Gcm9tU3RvcmUoUG9ydGFsIHBvcnRhbCwgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sIHVpbnQ2NCBjb3VudCwKIAkJCQkJCSAgIERlc3RSZWNlaXZlciAqZGVz dCk7CkBAIC02NSw2ICs2MCw3IEBAIHN0YXRpYyB2b2lkIERvUG9ydGFsUmV3aW5kKFBvcnRhbCBw b3J0YWwpOwogICovCiBRdWVyeURlc2MgKgogQ3JlYXRlUXVlcnlEZXNjKFBsYW5uZWRTdG10ICpw bGFubmVkc3RtdCwKKwkJCQlDYWNoZWRQbGFuICpjcGxhbiwKIAkJCQljb25zdCBjaGFyICpzb3Vy Y2VUZXh0LAogCQkJCVNuYXBzaG90IHNuYXBzaG90LAogCQkJCVNuYXBzaG90IGNyb3NzY2hlY2tf c25hcHNob3QsCkBAIC03NSw4ICs3MSwxMCBAQCBDcmVhdGVRdWVyeURlc2MoUGxhbm5lZFN0bXQg KnBsYW5uZWRzdG10LAogewogCVF1ZXJ5RGVzYyAgKnFkID0gKFF1ZXJ5RGVzYyAqKSBwYWxsb2Mo c2l6ZW9mKFF1ZXJ5RGVzYykpOwogCisJcWQtPnR5cGUgPSBUX1F1ZXJ5RGVzYzsKIAlxZC0+b3Bl cmF0aW9uID0gcGxhbm5lZHN0bXQtPmNvbW1hbmRUeXBlOwkvKiBvcGVyYXRpb24gKi8KIAlxZC0+ cGxhbm5lZHN0bXQgPSBwbGFubmVkc3RtdDsJLyogcGxhbiAqLworCXFkLT5jcGxhbiA9IGNwbGFu OwkJCQkvKiBDYWNoZWRQbGFuLCBpZiBwbGFuIGlzIGZyb20gb25lICovCiAJcWQtPnNvdXJjZVRl eHQgPSBzb3VyY2VUZXh0OwkvKiBxdWVyeSB0ZXh0ICovCiAJcWQtPnNuYXBzaG90ID0gUmVnaXN0 ZXJTbmFwc2hvdChzbmFwc2hvdCk7CS8qIHNuYXBzaG90ICovCiAJLyogUkkgY2hlY2sgc25hcHNo b3QgKi8KQEAgLTExNiw4NiArMTE0LDYgQEAgRnJlZVF1ZXJ5RGVzYyhRdWVyeURlc2MgKnFkZXNj KQogfQogCiAKLS8qCi0gKiBQcm9jZXNzUXVlcnkKLSAqCQlFeGVjdXRlIGEgc2luZ2xlIHBsYW5u YWJsZSBxdWVyeSB3aXRoaW4gYSBQT1JUQUxfTVVMVElfUVVFUlksCi0gKgkJUE9SVEFMX09ORV9S RVRVUk5JTkcsIG9yIFBPUlRBTF9PTkVfTU9EX1dJVEggcG9ydGFsCi0gKgotICoJcGxhbjogdGhl IHBsYW4gdHJlZSBmb3IgdGhlIHF1ZXJ5Ci0gKglzb3VyY2VUZXh0OiB0aGUgc291cmNlIHRleHQg b2YgdGhlIHF1ZXJ5Ci0gKglwYXJhbXM6IGFueSBwYXJhbWV0ZXJzIG5lZWRlZAotICoJZGVzdDog d2hlcmUgdG8gc2VuZCByZXN1bHRzCi0gKglxYzogd2hlcmUgdG8gc3RvcmUgdGhlIGNvbW1hbmQg Y29tcGxldGlvbiBzdGF0dXMgZGF0YS4KLSAqCi0gKiBxYyBtYXkgYmUgTlVMTCBpZiBjYWxsZXIg ZG9lc24ndCB3YW50IGEgc3RhdHVzIHN0cmluZy4KLSAqCi0gKiBNdXN0IGJlIGNhbGxlZCBpbiBh IG1lbW9yeSBjb250ZXh0IHRoYXQgd2lsbCBiZSByZXNldCBvciBkZWxldGVkIG9uCi0gKiBlcnJv cjsgb3RoZXJ3aXNlIHRoZSBleGVjdXRvcidzIG1lbW9yeSB1c2FnZSB3aWxsIGJlIGxlYWtlZC4K LSAqLwotc3RhdGljIHZvaWQKLVByb2Nlc3NRdWVyeShQbGFubmVkU3RtdCAqcGxhbiwKLQkJCSBj b25zdCBjaGFyICpzb3VyY2VUZXh0LAotCQkJIFBhcmFtTGlzdEluZm8gcGFyYW1zLAotCQkJIFF1 ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LAotCQkJIERlc3RSZWNlaXZlciAqZGVzdCwKLQkJCSBR dWVyeUNvbXBsZXRpb24gKnFjKQotewotCVF1ZXJ5RGVzYyAgKnF1ZXJ5RGVzYzsKLQotCS8qCi0J ICogQ3JlYXRlIHRoZSBRdWVyeURlc2Mgb2JqZWN0Ci0JICovCi0JcXVlcnlEZXNjID0gQ3JlYXRl UXVlcnlEZXNjKHBsYW4sIHNvdXJjZVRleHQsCi0JCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCks IEludmFsaWRTbmFwc2hvdCwKLQkJCQkJCQkJZGVzdCwgcGFyYW1zLCBxdWVyeUVudiwgMCk7Ci0K LQkvKgotCSAqIENhbGwgRXhlY3V0b3JTdGFydCB0byBwcmVwYXJlIHRoZSBwbGFuIGZvciBleGVj dXRpb24KLQkgKi8KLQlFeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgMCk7Ci0KLQkvKgotCSAqIFJ1 biB0aGUgcGxhbiB0byBjb21wbGV0aW9uLgotCSAqLwotCUV4ZWN1dG9yUnVuKHF1ZXJ5RGVzYywg Rm9yd2FyZFNjYW5EaXJlY3Rpb24sIDBMLCB0cnVlKTsKLQotCS8qCi0JICogQnVpbGQgY29tbWFu ZCBjb21wbGV0aW9uIHN0YXR1cyBkYXRhLCBpZiBjYWxsZXIgd2FudHMgb25lLgotCSAqLwotCWlm IChxYykKLQl7Ci0JCXN3aXRjaCAocXVlcnlEZXNjLT5vcGVyYXRpb24pCi0JCXsKLQkJCWNhc2Ug Q01EX1NFTEVDVDoKLQkJCQlTZXRRdWVyeUNvbXBsZXRpb24ocWMsIENNRFRBR19TRUxFQ1QsIHF1 ZXJ5RGVzYy0+ZXN0YXRlLT5lc19wcm9jZXNzZWQpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBDTURf SU5TRVJUOgotCQkJCVNldFF1ZXJ5Q29tcGxldGlvbihxYywgQ01EVEFHX0lOU0VSVCwgcXVlcnlE ZXNjLT5lc3RhdGUtPmVzX3Byb2Nlc3NlZCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIENNRF9VUERB VEU6Ci0JCQkJU2V0UXVlcnlDb21wbGV0aW9uKHFjLCBDTURUQUdfVVBEQVRFLCBxdWVyeURlc2Mt PmVzdGF0ZS0+ZXNfcHJvY2Vzc2VkKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQ01EX0RFTEVURToK LQkJCQlTZXRRdWVyeUNvbXBsZXRpb24ocWMsIENNRFRBR19ERUxFVEUsIHF1ZXJ5RGVzYy0+ZXN0 YXRlLT5lc19wcm9jZXNzZWQpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBDTURfTUVSR0U6Ci0JCQkJ U2V0UXVlcnlDb21wbGV0aW9uKHFjLCBDTURUQUdfTUVSR0UsIHF1ZXJ5RGVzYy0+ZXN0YXRlLT5l c19wcm9jZXNzZWQpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlTZXRRdWVyeUNvbXBs ZXRpb24ocWMsIENNRFRBR19VTktOT1dOLCBxdWVyeURlc2MtPmVzdGF0ZS0+ZXNfcHJvY2Vzc2Vk KTsKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCS8qCi0JICogTm93LCB3ZSBjbG9zZSBkb3duIGFs bCB0aGUgc2NhbnMgYW5kIGZyZWUgYWxsb2NhdGVkIHJlc291cmNlcy4KLQkgKi8KLQlFeGVjdXRv ckZpbmlzaChxdWVyeURlc2MpOwotCUV4ZWN1dG9yRW5kKHF1ZXJ5RGVzYyk7Ci0KLQlGcmVlUXVl cnlEZXNjKHF1ZXJ5RGVzYyk7Ci19Ci0KIC8qCiAgKiBDaG9vc2VQb3J0YWxTdHJhdGVneQogICoJ CVNlbGVjdCBwb3J0YWwgZXhlY3V0aW9uIHN0cmF0ZWd5IGdpdmVuIHRoZSBpbnRlbmRlZCBzdGF0 ZW1lbnQgbGlzdC4KQEAgLTQyNyw3ICszNDUsOCBAQCBGZXRjaFN0YXRlbWVudFRhcmdldExpc3Qo Tm9kZSAqc3RtdCkKICAqIHRvIGJlIHVzZWQgZm9yIGN1cnNvcnMpLgogICoKICAqIE9uIHJldHVy biwgcG9ydGFsIGlzIHJlYWR5IHRvIGFjY2VwdCBQb3J0YWxSdW4oKSBjYWxscywgYW5kIHRoZSBy ZXN1bHQKLSAqIHR1cGRlc2MgKGlmIGFueSkgaXMga25vd24uCisgKiB0dXBkZXNjIChpZiBhbnkp IGlzIGtub3duLCB1bmxlc3MgcG9ydGFsLT5wbGFuX3ZhbGlkIGlzIHNldCB0byBmYWxzZSwgaW4K KyAqIHdoaWNoIGNhc2UsIHRoZSBjYWxsZXIgbXVzdCByZXRyeSBhZnRlciBnZW5lcmF0aW5nIGEg bmV3IENhY2hlZFBsYW4uCiAgKi8KIHZvaWQKIFBvcnRhbFN0YXJ0KFBvcnRhbCBwb3J0YWwsIFBh cmFtTGlzdEluZm8gcGFyYW1zLApAQCAtNDM1LDcgKzM1NCw2IEBAIFBvcnRhbFN0YXJ0KFBvcnRh bCBwb3J0YWwsIFBhcmFtTGlzdEluZm8gcGFyYW1zLAogewogCVBvcnRhbAkJc2F2ZUFjdGl2ZVBv cnRhbDsKIAlSZXNvdXJjZU93bmVyIHNhdmVSZXNvdXJjZU93bmVyOwotCU1lbW9yeUNvbnRleHQg c2F2ZVBvcnRhbENvbnRleHQ7CiAJTWVtb3J5Q29udGV4dCBvbGRDb250ZXh0OwogCVF1ZXJ5RGVz YyAgKnF1ZXJ5RGVzYzsKIAlpbnQJCQlteWVmbGFnczsKQEAgLTQ0OCwxNSArMzY2LDEzIEBAIFBv cnRhbFN0YXJ0KFBvcnRhbCBwb3J0YWwsIFBhcmFtTGlzdEluZm8gcGFyYW1zLAogCSAqLwogCXNh dmVBY3RpdmVQb3J0YWwgPSBBY3RpdmVQb3J0YWw7CiAJc2F2ZVJlc291cmNlT3duZXIgPSBDdXJy ZW50UmVzb3VyY2VPd25lcjsKLQlzYXZlUG9ydGFsQ29udGV4dCA9IFBvcnRhbENvbnRleHQ7CiAJ UEdfVFJZKCk7CiAJewogCQlBY3RpdmVQb3J0YWwgPSBwb3J0YWw7CiAJCWlmIChwb3J0YWwtPnJl c293bmVyKQogCQkJQ3VycmVudFJlc291cmNlT3duZXIgPSBwb3J0YWwtPnJlc293bmVyOwotCQlQ b3J0YWxDb250ZXh0ID0gcG9ydGFsLT5wb3J0YWxDb250ZXh0OwogCi0JCW9sZENvbnRleHQgPSBN ZW1vcnlDb250ZXh0U3dpdGNoVG8oUG9ydGFsQ29udGV4dCk7CisJCW9sZENvbnRleHQgPSBNZW1v cnlDb250ZXh0U3dpdGNoVG8ocG9ydGFsLT5xdWVyeUNvbnRleHQpOwogCiAJCS8qIE11c3QgcmVt ZW1iZXIgcG9ydGFsIHBhcmFtIGxpc3QsIGlmIGFueSAqLwogCQlwb3J0YWwtPnBvcnRhbFBhcmFt cyA9IHBhcmFtczsKQEAgLTQ3Miw2ICszODgsOCBAQCBQb3J0YWxTdGFydChQb3J0YWwgcG9ydGFs LCBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJc3dpdGNoIChwb3J0YWwtPnN0cmF0ZWd5KQogCQl7 CiAJCQljYXNlIFBPUlRBTF9PTkVfU0VMRUNUOgorCQkJY2FzZSBQT1JUQUxfT05FX1JFVFVSTklO RzoKKwkJCWNhc2UgUE9SVEFMX09ORV9NT0RfV0lUSDoKIAogCQkJCS8qIE11c3Qgc2V0IHNuYXBz aG90IGJlZm9yZSBzdGFydGluZyBleGVjdXRvci4gKi8KIAkJCQlpZiAoc25hcHNob3QpCkBAIC00 OTMsNiArNDExLDcgQEAgUG9ydGFsU3RhcnQoUG9ydGFsIHBvcnRhbCwgUGFyYW1MaXN0SW5mbyBw YXJhbXMsCiAJCQkJICogdGhlIGRlc3RpbmF0aW9uIHRvIERlc3ROb25lLgogCQkJCSAqLwogCQkJ CXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhsaW5pdGlhbF9ub2RlKFBsYW5uZWRTdG10LCBw b3J0YWwtPnN0bXRzKSwKKwkJCQkJCQkJCQkJcG9ydGFsLT5jcGxhbiwKIAkJCQkJCQkJCQkJcG9y dGFsLT5zb3VyY2VUZXh0LAogCQkJCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpLAogCQkJCQkJ CQkJCQlJbnZhbGlkU25hcHNob3QsCkBAIC01MDEsMzAgKzQyMCw1MCBAQCBQb3J0YWxTdGFydChQ b3J0YWwgcG9ydGFsLCBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCQkJCQkJCQkJcG9ydGFsLT5x dWVyeUVudiwKIAkJCQkJCQkJCQkJMCk7CiAKKwkJCQkvKiBSZW1lbWJlciBmb3IgUG9ydGFsUnVu TXVsdGkoKSAqLworCQkJCXBvcnRhbC0+cWRlc2NzID0gbGFwcGVuZChwb3J0YWwtPnFkZXNjcywg cXVlcnlEZXNjKTsKKwogCQkJCS8qCiAJCQkJICogSWYgaXQncyBhIHNjcm9sbGFibGUgY3Vyc29y LCBleGVjdXRvciBuZWVkcyB0byBzdXBwb3J0CiAJCQkJICogUkVXSU5EIGFuZCBiYWNrd2FyZHMg c2NhbiwgYXMgd2VsbCBhcyB3aGF0ZXZlciB0aGUgY2FsbGVyCiAJCQkJICogbWlnaHQndmUgYXNr ZWQgZm9yLgogCQkJCSAqLwotCQkJCWlmIChwb3J0YWwtPmN1cnNvck9wdGlvbnMgJiBDVVJTT1Jf T1BUX1NDUk9MTCkKKwkJCQlpZiAocG9ydGFsLT5zdHJhdGVneSA9PSBQT1JUQUxfT05FX1NFTEVD VCAmJgorCQkJCQkocG9ydGFsLT5jdXJzb3JPcHRpb25zICYgQ1VSU09SX09QVF9TQ1JPTEwpKQog CQkJCQlteWVmbGFncyA9IGVmbGFncyB8IEVYRUNfRkxBR19SRVdJTkQgfCBFWEVDX0ZMQUdfQkFD S1dBUkQ7CiAJCQkJZWxzZQogCQkJCQlteWVmbGFncyA9IGVmbGFnczsKIAogCQkJCS8qCi0JCQkJ ICogQ2FsbCBFeGVjdXRvclN0YXJ0IHRvIHByZXBhcmUgdGhlIHBsYW4gZm9yIGV4ZWN1dGlvbgor CQkJCSAqIENhbGwgRXhlY3V0b3JTdGFydCB0byBwcmVwYXJlIHRoZSBwbGFuIGZvciBleGVjdXRp b24uICBBCisJCQkJICogY2FjaGVkIHBsYW4gbWF5IGdldCBpbnZhbGlkYXRlZCBhcyB3ZSdyZSBk b2luZyB0aGF0LgogCQkJCSAqLwogCQkJCUV4ZWN1dG9yU3RhcnQocXVlcnlEZXNjLCBteWVmbGFn cyk7CisJCQkJaWYgKCFxdWVyeURlc2MtPnBsYW5fdmFsaWQpCisJCQkJeworCQkJCQlBc3NlcnQo cXVlcnlEZXNjLT5jcGxhbik7CisJCQkJCVBvcnRhbFF1ZXJ5RmluaXNoKHF1ZXJ5RGVzYyk7CisJ CQkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisJCQkJCXBvcnRhbC0+cGxhbl92YWxpZCA9IGZhbHNl OworCQkJCQlnb3RvIGVhcmx5X2V4aXQ7CisJCQkJfQogCiAJCQkJLyoKLQkJCQkgKiBUaGlzIHRl bGxzIFBvcnRhbENsZWFudXAgdG8gc2h1dCBkb3duIHRoZSBleGVjdXRvcgorCQkJCSAqIFRoaXMg dGVsbHMgUG9ydGFsQ2xlYW51cCB0byBzaHV0IGRvd24gdGhlIGV4ZWN1dG9yLCB0aG91Z2gKKwkJ CQkgKiBub3QgbmVlZGVkIGZvciBxdWVyaWVzIGhhbmRsZWQgYnkgUG9ydGFsUnVuTXVsdGkoKS4K IAkJCQkgKi8KLQkJCQlwb3J0YWwtPnF1ZXJ5RGVzYyA9IHF1ZXJ5RGVzYzsKKwkJCQlpZiAocG9y dGFsLT5zdHJhdGVneSA9PSBQT1JUQUxfT05FX1NFTEVDVCkKKwkJCQkJcG9ydGFsLT5xdWVyeURl c2MgPSBxdWVyeURlc2M7CiAKIAkJCQkvKgotCQkJCSAqIFJlbWVtYmVyIHR1cGxlIGRlc2NyaXB0 b3IgKGNvbXB1dGVkIGJ5IEV4ZWN1dG9yU3RhcnQpCisJCQkJICogUmVtZW1iZXIgdHVwbGUgZGVz Y3JpcHRvciAoY29tcHV0ZWQgYnkgRXhlY3V0b3JTdGFydCksCisJCQkJICogdGhvdWdoIG1ha2Ug aXQgaW5kZXBlbmRlbnQgb2YgUXVlcnlEZXNjIGZvciBxdWVyaWVzIGhhbmRsZWQKKwkJCQkgKiBi eSBQb3J0YWxSdW5NdWx0aSgpLgogCQkJCSAqLwotCQkJCXBvcnRhbC0+dHVwRGVzYyA9IHF1ZXJ5 RGVzYy0+dHVwRGVzYzsKKwkJCQlpZiAocG9ydGFsLT5zdHJhdGVneSAhPSBQT1JUQUxfT05FX1NF TEVDVCkKKwkJCQkJcG9ydGFsLT50dXBEZXNjID0gQ3JlYXRlVHVwbGVEZXNjQ29weShxdWVyeURl c2MtPnR1cERlc2MpOworCQkJCWVsc2UKKwkJCQkJcG9ydGFsLT50dXBEZXNjID0gcXVlcnlEZXNj LT50dXBEZXNjOwogCiAJCQkJLyoKIAkJCQkgKiBSZXNldCBjdXJzb3IgcG9zaXRpb24gZGF0YSB0 byAic3RhcnQgb2YgcXVlcnkiCkBAIC01MzIsMzMgKzQ3MSwxMSBAQCBQb3J0YWxTdGFydChQb3J0 YWwgcG9ydGFsLCBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCQlwb3J0YWwtPmF0U3RhcnQgPSB0 cnVlOwogCQkJCXBvcnRhbC0+YXRFbmQgPSBmYWxzZTsJLyogYWxsb3cgZmV0Y2hlcyAqLwogCQkJ CXBvcnRhbC0+cG9ydGFsUG9zID0gMDsKKwkJCQlwb3J0YWwtPnBsYW5fdmFsaWQgPSB0cnVlOwog CiAJCQkJUG9wQWN0aXZlU25hcHNob3QoKTsKIAkJCQlicmVhazsKIAotCQkJY2FzZSBQT1JUQUxf T05FX1JFVFVSTklORzoKLQkJCWNhc2UgUE9SVEFMX09ORV9NT0RfV0lUSDoKLQotCQkJCS8qCi0J CQkJICogV2UgZG9uJ3Qgc3RhcnQgdGhlIGV4ZWN1dG9yIHVudGlsIHdlIGFyZSB0b2xkIHRvIHJ1 biB0aGUKLQkJCQkgKiBwb3J0YWwuICBXZSBkbyBuZWVkIHRvIHNldCB1cCB0aGUgcmVzdWx0IHR1 cGRlc2MuCi0JCQkJICovCi0JCQkJewotCQkJCQlQbGFubmVkU3RtdCAqcHN0bXQ7Ci0KLQkJCQkJ cHN0bXQgPSBQb3J0YWxHZXRQcmltYXJ5U3RtdChwb3J0YWwpOwotCQkJCQlwb3J0YWwtPnR1cERl c2MgPQotCQkJCQkJRXhlY0NsZWFuVHlwZUZyb21UTChwc3RtdC0+cGxhblRyZWUtPnRhcmdldGxp c3QpOwotCQkJCX0KLQotCQkJCS8qCi0JCQkJICogUmVzZXQgY3Vyc29yIHBvc2l0aW9uIGRhdGEg dG8gInN0YXJ0IG9mIHF1ZXJ5IgotCQkJCSAqLwotCQkJCXBvcnRhbC0+YXRTdGFydCA9IHRydWU7 Ci0JCQkJcG9ydGFsLT5hdEVuZCA9IGZhbHNlOwkvKiBhbGxvdyBmZXRjaGVzICovCi0JCQkJcG9y dGFsLT5wb3J0YWxQb3MgPSAwOwotCQkJCWJyZWFrOwotCiAJCQljYXNlIFBPUlRBTF9VVElMX1NF TEVDVDoKIAogCQkJCS8qCkBAIC01NzgsMTEgKzQ5NSw2OSBAQCBQb3J0YWxTdGFydChQb3J0YWwg cG9ydGFsLCBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCQlwb3J0YWwtPmF0U3RhcnQgPSB0cnVl OwogCQkJCXBvcnRhbC0+YXRFbmQgPSBmYWxzZTsJLyogYWxsb3cgZmV0Y2hlcyAqLwogCQkJCXBv cnRhbC0+cG9ydGFsUG9zID0gMDsKKwkJCQlwb3J0YWwtPnBsYW5fdmFsaWQgPSB0cnVlOwogCQkJ CWJyZWFrOwogCiAJCQljYXNlIFBPUlRBTF9NVUxUSV9RVUVSWToKLQkJCQkvKiBOZWVkIGRvIG5v dGhpbmcgbm93ICovCisJCQkJeworCQkJCQlMaXN0Q2VsbCAgICpsYzsKKwkJCQkJYm9vbAkJcHVz aGVkX2FjdGl2ZV9zbmFwc2hvdCA9IGZhbHNlOworCisJCQkJCWZvcmVhY2gobGMsIHBvcnRhbC0+ c3RtdHMpCisJCQkJCXsKKwkJCQkJCVBsYW5uZWRTdG10ICpwbGFuID0gbGZpcnN0X25vZGUoUGxh bm5lZFN0bXQsIGxjKTsKKwkJCQkJCWJvb2wJCWlzX3V0aWxpdHkgPSAocGxhbi0+dXRpbGl0eVN0 bXQgIT0gTlVMTCk7CisKKwkJCQkJCS8qIE11c3Qgc2V0IHNuYXBzaG90IGJlZm9yZSBzdGFydGlu ZyBleGVjdXRvci4gKi8KKwkJCQkJCWlmICghcHVzaGVkX2FjdGl2ZV9zbmFwc2hvdCAmJiAhaXNf dXRpbGl0eSkKKwkJCQkJCXsKKwkJCQkJCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rp b25TbmFwc2hvdCgpKTsKKwkJCQkJCQlwdXNoZWRfYWN0aXZlX3NuYXBzaG90ID0gdHJ1ZTsKKwkJ CQkJCX0KKworCQkJCQkJLyoKKwkJCQkJCSAqIENyZWF0ZSB0aGUgUXVlcnlEZXNjIG9iamVjdC4g IERlc3RSZWNlaXZlciB3aWxsCisJCQkJCQkgKiBiZSBzZXQgaW4gUG9ydGFsUnVuTXVsdGkoKS4K KwkJCQkJCSAqLworCQkJCQkJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIHBvcnRh bC0+Y3BsYW4sCisJCQkJCQkJCQkJCQkJcG9ydGFsLT5zb3VyY2VUZXh0LAorCQkJCQkJCQkJCQkJ CXB1c2hlZF9hY3RpdmVfc25hcHNob3QgPworCQkJCQkJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90 KCkgOgorCQkJCQkJCQkJCQkJCUludmFsaWRTbmFwc2hvdCwKKwkJCQkJCQkJCQkJCQlJbnZhbGlk U25hcHNob3QsCisJCQkJCQkJCQkJCQkJTlVMTCwKKwkJCQkJCQkJCQkJCQlwYXJhbXMsCisJCQkJ CQkJCQkJCQkJcG9ydGFsLT5xdWVyeUVudiwgMCk7CisKKwkJCQkJCS8qIFJlbWVtYmVyIGZvciBQ b3J0YWxNdWx0aVJ1bigpICovCisJCQkJCQlwb3J0YWwtPnFkZXNjcyA9IGxhcHBlbmQocG9ydGFs LT5xZGVzY3MsIHF1ZXJ5RGVzYyk7CisKKwkJCQkJCS8qCisJCQkJCQkgKiBDYWxsIEV4ZWN1dG9y U3RhcnQgdG8gcHJlcGFyZSB0aGUgcGxhbiBmb3IKKwkJCQkJCSAqIGV4ZWN1dGlvbi4gIEEgY2Fj aGVkIHBsYW4gbWF5IGdldCBpbnZhbGlkYXRlZCBhcworCQkJCQkJICogd2UncmUgZG9pbmcgdGhh dC4KKwkJCQkJCSAqLworCQkJCQkJaWYgKCFpc191dGlsaXR5KQorCQkJCQkJeworCQkJCQkJCUV4 ZWN1dG9yU3RhcnQocXVlcnlEZXNjLCAwKTsKKwkJCQkJCQlpZiAoIXF1ZXJ5RGVzYy0+cGxhbl92 YWxpZCkKKwkJCQkJCQl7CisJCQkJCQkJCUFzc2VydChxdWVyeURlc2MtPmNwbGFuKTsKKwkJCQkJ CQkJUG9ydGFsUXVlcnlGaW5pc2gocXVlcnlEZXNjKTsKKwkJCQkJCQkJaWYgKHB1c2hlZF9hY3Rp dmVfc25hcHNob3QpCisJCQkJCQkJCQlQb3BBY3RpdmVTbmFwc2hvdCgpOworCQkJCQkJCQlwb3J0 YWwtPnBsYW5fdmFsaWQgPSBmYWxzZTsKKwkJCQkJCQkJZ290byBlYXJseV9leGl0OworCQkJCQkJ CX0KKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWlmIChwdXNoZWRfYWN0aXZlX3NuYXBzaG90KQor CQkJCQkJUG9wQWN0aXZlU25hcHNob3QoKTsKKwkJCQl9CisKIAkJCQlwb3J0YWwtPnR1cERlc2Mg PSBOVUxMOworCQkJCXBvcnRhbC0+cGxhbl92YWxpZCA9IHRydWU7CiAJCQkJYnJlYWs7CiAJCX0K IAl9CkBAIC01OTQsMTkgKzU2OSwxOCBAQCBQb3J0YWxTdGFydChQb3J0YWwgcG9ydGFsLCBQYXJh bUxpc3RJbmZvIHBhcmFtcywKIAkJLyogUmVzdG9yZSBnbG9iYWwgdmFycyBhbmQgcHJvcGFnYXRl IGVycm9yICovCiAJCUFjdGl2ZVBvcnRhbCA9IHNhdmVBY3RpdmVQb3J0YWw7CiAJCUN1cnJlbnRS ZXNvdXJjZU93bmVyID0gc2F2ZVJlc291cmNlT3duZXI7Ci0JCVBvcnRhbENvbnRleHQgPSBzYXZl UG9ydGFsQ29udGV4dDsKIAogCQlQR19SRV9USFJPVygpOwogCX0KIAlQR19FTkRfVFJZKCk7CiAK Kwlwb3J0YWwtPnN0YXR1cyA9IFBPUlRBTF9SRUFEWTsKKworZWFybHlfZXhpdDoKIAlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkQ29udGV4dCk7CiAKIAlBY3RpdmVQb3J0YWwgPSBzYXZlQWN0aXZl UG9ydGFsOwogCUN1cnJlbnRSZXNvdXJjZU93bmVyID0gc2F2ZVJlc291cmNlT3duZXI7Ci0JUG9y dGFsQ29udGV4dCA9IHNhdmVQb3J0YWxDb250ZXh0OwotCi0JcG9ydGFsLT5zdGF0dXMgPSBQT1JU QUxfUkVBRFk7CiB9CiAKIC8qCkBAIC0xMTkzLDcgKzExNjcsNyBAQCBQb3J0YWxSdW5NdWx0aShQ b3J0YWwgcG9ydGFsLAogCQkJICAgUXVlcnlDb21wbGV0aW9uICpxYykKIHsKIAlib29sCQlhY3Rp dmVfc25hcHNob3Rfc2V0ID0gZmFsc2U7Ci0JTGlzdENlbGwgICAqc3RtdGxpc3RfaXRlbTsKKwlM aXN0Q2VsbCAgICpxZGVzY19pdGVtOwogCiAJLyoKIAkgKiBJZiB0aGUgZGVzdGluYXRpb24gaXMg RGVzdFJlbW90ZUV4ZWN1dGUsIGNoYW5nZSB0byBEZXN0Tm9uZS4gIFRoZQpAQCAtMTIxNCw5ICsx MTg4LDEwIEBAIFBvcnRhbFJ1bk11bHRpKFBvcnRhbCBwb3J0YWwsCiAJICogTG9vcCB0byBoYW5k bGUgdGhlIGluZGl2aWR1YWwgcXVlcmllcyBnZW5lcmF0ZWQgZnJvbSBhIHNpbmdsZSBwYXJzZXRy ZWUKIAkgKiBieSBhbmFseXNpcyBhbmQgcmV3cml0ZS4KIAkgKi8KLQlmb3JlYWNoKHN0bXRsaXN0 X2l0ZW0sIHBvcnRhbC0+c3RtdHMpCisJZm9yZWFjaChxZGVzY19pdGVtLCBwb3J0YWwtPnFkZXNj cykKIAl7Ci0JCVBsYW5uZWRTdG10ICpwc3RtdCA9IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10LCBz dG10bGlzdF9pdGVtKTsKKwkJUXVlcnlEZXNjICpxZGVzYyA9IGxmaXJzdF9ub2RlKFF1ZXJ5RGVz YywgcWRlc2NfaXRlbSk7CisJCVBsYW5uZWRTdG10ICpwc3RtdCA9IHFkZXNjLT5wbGFubmVkc3Rt dDsKIAogCQkvKgogCQkgKiBJZiB3ZSBnb3QgYSBjYW5jZWwgc2lnbmFsIGluIHByaW9yIGNvbW1h bmQsIHF1aXQKQEAgLTEyNDEsNyArMTIxNiw3IEBAIFBvcnRhbFJ1bk11bHRpKFBvcnRhbCBwb3J0 YWwsCiAJCQkgKi8KIAkJCWlmICghYWN0aXZlX3NuYXBzaG90X3NldCkKIAkJCXsKLQkJCQlTbmFw c2hvdAlzbmFwc2hvdCA9IEdldFRyYW5zYWN0aW9uU25hcHNob3QoKTsKKwkJCQlTbmFwc2hvdCAg ICBzbmFwc2hvdCA9IHFkZXNjLT5zbmFwc2hvdDsKIAogCQkJCS8qIElmIHRvbGQgdG8sIHJlZ2lz dGVyIHRoZSBzbmFwc2hvdCBhbmQgc2F2ZSBpbiBwb3J0YWwgKi8KIAkJCQlpZiAoc2V0SG9sZFNu YXBzaG90KQpAQCAtMTI3MSwyMyArMTI0NiwzOCBAQCBQb3J0YWxSdW5NdWx0aShQb3J0YWwgcG9y dGFsLAogCQkJZWxzZQogCQkJCVVwZGF0ZUFjdGl2ZVNuYXBzaG90Q29tbWFuZElkKCk7CiAKKwkJ CS8qCisJCQkgKiBSdW4gdGhlIHBsYW4gdG8gY29tcGxldGlvbi4KKwkJCSAqLworCQkJcWRlc2Mt PmRlc3QgPSBkZXN0OworCQkJRXhlY3V0b3JSdW4ocWRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9u LCAwTCwgdHJ1ZSk7CisKKwkJCS8qCisJCQkgKiBCdWlsZCBjb21tYW5kIGNvbXBsZXRpb24gc3Rh dHVzIGRhdGEgaWYgbmVlZGVkLgorCQkJICovCiAJCQlpZiAocHN0bXQtPmNhblNldFRhZykKIAkJ CXsKLQkJCQkvKiBzdGF0ZW1lbnQgY2FuIHNldCB0YWcgc3RyaW5nICovCi0JCQkJUHJvY2Vzc1F1 ZXJ5KHBzdG10LAotCQkJCQkJCSBwb3J0YWwtPnNvdXJjZVRleHQsCi0JCQkJCQkJIHBvcnRhbC0+ cG9ydGFsUGFyYW1zLAotCQkJCQkJCSBwb3J0YWwtPnF1ZXJ5RW52LAotCQkJCQkJCSBkZXN0LCBx Yyk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyogc3RtdCBhZGRlZCBieSByZXdyaXRlIGNh bm5vdCBzZXQgdGFnICovCi0JCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10LAotCQkJCQkJCSBwb3J0YWwt PnNvdXJjZVRleHQsCi0JCQkJCQkJIHBvcnRhbC0+cG9ydGFsUGFyYW1zLAotCQkJCQkJCSBwb3J0 YWwtPnF1ZXJ5RW52LAotCQkJCQkJCSBhbHRkZXN0LCBOVUxMKTsKKwkJCQlzd2l0Y2ggKHFkZXNj LT5vcGVyYXRpb24pCisJCQkJeworCQkJCQljYXNlIENNRF9TRUxFQ1Q6CisJCQkJCQlTZXRRdWVy eUNvbXBsZXRpb24ocWMsIENNRFRBR19TRUxFQ1QsIHFkZXNjLT5lc3RhdGUtPmVzX3Byb2Nlc3Nl ZCk7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBDTURfSU5TRVJUOgorCQkJCQkJU2V0UXVlcnlD b21wbGV0aW9uKHFjLCBDTURUQUdfSU5TRVJULCBxZGVzYy0+ZXN0YXRlLT5lc19wcm9jZXNzZWQp OworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgQ01EX1VQREFURToKKwkJCQkJCVNldFF1ZXJ5Q29t cGxldGlvbihxYywgQ01EVEFHX1VQREFURSwgcWRlc2MtPmVzdGF0ZS0+ZXNfcHJvY2Vzc2VkKTsK KwkJCQkJCWJyZWFrOworCQkJCQljYXNlIENNRF9ERUxFVEU6CisJCQkJCQlTZXRRdWVyeUNvbXBs ZXRpb24ocWMsIENNRFRBR19ERUxFVEUsIHFkZXNjLT5lc3RhdGUtPmVzX3Byb2Nlc3NlZCk7CisJ CQkJCQlicmVhazsKKwkJCQkJY2FzZSBDTURfTUVSR0U6CisJCQkJCQlTZXRRdWVyeUNvbXBsZXRp b24ocWMsIENNRFRBR19NRVJHRSwgcWRlc2MtPmVzdGF0ZS0+ZXNfcHJvY2Vzc2VkKTsKKwkJCQkJ CWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJU2V0UXVlcnlDb21wbGV0aW9uKHFjLCBDTURU QUdfVU5LTk9XTiwgcWRlc2MtPmVzdGF0ZS0+ZXNfcHJvY2Vzc2VkKTsKKwkJCQkJCWJyZWFrOwor CQkJCX0KIAkJCX0KIAogCQkJaWYgKGxvZ19leGVjdXRvcl9zdGF0cykKQEAgLTEzNDYsOCArMTMz NiwxOSBAQCBQb3J0YWxSdW5NdWx0aShQb3J0YWwgcG9ydGFsLAogCQkgKiBJbmNyZW1lbnQgY29t bWFuZCBjb3VudGVyIGJldHdlZW4gcXVlcmllcywgYnV0IG5vdCBhZnRlciB0aGUgbGFzdAogCQkg KiBvbmUuCiAJCSAqLwotCQlpZiAobG5leHQocG9ydGFsLT5zdG10cywgc3RtdGxpc3RfaXRlbSkg IT0gTlVMTCkKKwkJaWYgKGxuZXh0KHBvcnRhbC0+cWRlc2NzLCBxZGVzY19pdGVtKSAhPSBOVUxM KQogCQkJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKKworCQkvKiBwb3J0YWwtPnF1ZXJ5RGVz YyBpcyBmcmVlJ2QgYnkgUG9ydGFsQ2xlYW51cCgpLiAqLworCQlpZiAocWRlc2MgIT0gcG9ydGFs LT5xdWVyeURlc2MpCisJCXsKKwkJCWlmIChxZGVzYy0+ZXN0YXRlKQorCQkJeworCQkJCUV4ZWN1 dG9yRmluaXNoKHFkZXNjKTsKKwkJCQlFeGVjdXRvckVuZChxZGVzYyk7CisJCQl9CisJCQlGcmVl UXVlcnlEZXNjKHFkZXNjKTsKKwkJfQogCX0KIAogCS8qIFBvcCB0aGUgc25hcHNob3QgaWYgd2Ug cHVzaGVkIG9uZS4gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2xzeXNj YWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvbHN5c2NhY2hlLmMKaW5kZXggYzA3Mzgy MDUxZC4uMzhhZTQzZTI0YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvbHN5 c2NhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvbHN5c2NhY2hlLmMKQEAgLTIw NzMsNiArMjA3MywyNyBAQCBnZXRfcmVsX3BlcnNpc3RlbmNlKE9pZCByZWxpZCkKIAlyZXR1cm4g cmVzdWx0OwogfQogCisvKgorICogZ2V0X3JlbF9yZWxpc3NoYXJlZAorICoKKyAqCQlSZXR1cm5z IGlmIHRoZSBnaXZlbiByZWxhdGlvbiBpcyBzaGFyZWQgb3Igbm90CisgKi8KK2Jvb2wKK2dldF9y ZWxfcmVsaXNzaGFyZWQoT2lkIHJlbGlkKQoreworCUhlYXBUdXBsZQl0cDsKKwlGb3JtX3BnX2Ns YXNzIHJlbHR1cDsKKwlib29sCQlyZXN1bHQ7CisKKwl0cCA9IFNlYXJjaFN5c0NhY2hlMShSRUxP SUQsIE9iamVjdElkR2V0RGF0dW0ocmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRpb24gJXUiLCBy ZWxpZCk7CisJcmVsdHVwID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVCh0cCk7CisJcmVzdWx0 ID0gcmVsdHVwLT5yZWxpc3NoYXJlZDsKKwlSZWxlYXNlU3lzQ2FjaGUodHApOworCisJcmV0dXJu IHJlc3VsdDsKK30KIAogLyoJCQkJLS0tLS0tLS0tLSBUUkFOU0ZPUk0gQ0FDSEUgLS0tLS0tLS0t LQkJCQkJCSAqLwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2Fj aGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jCmluZGV4IDc3YzJiYTNm OGYuLjRlNDU1ZDgxNWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5j YWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jCkBAIC0xMDAs MTMgKzEwMCwxMyBAQCBzdGF0aWMgdm9pZCBSZWxlYXNlR2VuZXJpY1BsYW4oQ2FjaGVkUGxhblNv dXJjZSAqcGxhbnNvdXJjZSk7CiBzdGF0aWMgTGlzdCAqUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5KENh Y2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCiAJCQkJCQkJCSAgIFF1ZXJ5RW52aXJvbm1lbnQg KnF1ZXJ5RW52KTsKIHN0YXRpYyBib29sIENoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNl ICpwbGFuc291cmNlKTsKK3N0YXRpYyBib29sIEdlbmVyaWNQbGFuSXNWYWxpZChDYWNoZWRQbGFu ICpjcGxhbik7CiBzdGF0aWMgQ2FjaGVkUGxhbiAqQnVpbGRDYWNoZWRQbGFuKENhY2hlZFBsYW5T b3VyY2UgKnBsYW5zb3VyY2UsIExpc3QgKnFsaXN0LAogCQkJCQkJCQkgICBQYXJhbUxpc3RJbmZv IGJvdW5kUGFyYW1zLCBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudik7CiBzdGF0aWMgYm9vbCBj aG9vc2VfY3VzdG9tX3BsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKIAkJCQkJCQkg ICBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zKTsKIHN0YXRpYyBkb3VibGUgY2FjaGVkX3BsYW5f Y29zdChDYWNoZWRQbGFuICpwbGFuLCBib29sIGluY2x1ZGVfcGxhbm5lcik7CiBzdGF0aWMgUXVl cnkgKlF1ZXJ5TGlzdEdldFByaW1hcnlTdG10KExpc3QgKnN0bXRzKTsKLXN0YXRpYyB2b2lkIEFj cXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJlKTsKIHN0YXRp YyB2b2lkIEFjcXVpcmVQbGFubmVyTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUp Owogc3RhdGljIHZvaWQgU2NhblF1ZXJ5Rm9yTG9ja3MoUXVlcnkgKnBhcnNldHJlZSwgYm9vbCBh Y3F1aXJlKTsKIHN0YXRpYyBib29sIFNjYW5RdWVyeVdhbGtlcihOb2RlICpub2RlLCBib29sICph Y3F1aXJlKTsKQEAgLTc4Nyw5ICs3ODcsNiBAQCBSZXZhbGlkYXRlQ2FjaGVkUXVlcnkoQ2FjaGVk UGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKICAqCiAgKiBDYWxsZXIgbXVzdCBoYXZlIGFscmVhZHkg Y2FsbGVkIFJldmFsaWRhdGVDYWNoZWRRdWVyeSB0byB2ZXJpZnkgdGhhdCB0aGUKICAqIHF1ZXJ5 dHJlZSBpcyB1cCB0byBkYXRlLgotICoKLSAqIE9uIGEgInRydWUiIHJldHVybiwgd2UgaGF2ZSBh Y3F1aXJlZCB0aGUgbG9ja3MgbmVlZGVkIHRvIHJ1biB0aGUgcGxhbi4KLSAqIChXZSBtdXN0IGRv IHRoaXMgZm9yIHRoZSAidHJ1ZSIgcmVzdWx0IHRvIGJlIHJhY2UtY29uZGl0aW9uLWZyZWUuKQog ICovCiBzdGF0aWMgYm9vbAogQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5z b3VyY2UpCkBAIC04MDMsNjAgKzgwMCw1NiBAQCBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNv dXJjZSAqcGxhbnNvdXJjZSkKIAlpZiAoIXBsYW4pCiAJCXJldHVybiBmYWxzZTsKIAotCUFzc2Vy dChwbGFuLT5tYWdpYyA9PSBDQUNIRURQTEFOX01BR0lDKTsKLQkvKiBHZW5lcmljIHBsYW5zIGFy ZSBuZXZlciBvbmUtc2hvdCAqLwotCUFzc2VydCghcGxhbi0+aXNfb25lc2hvdCk7CisJaWYgKEdl bmVyaWNQbGFuSXNWYWxpZChwbGFuKSkKKwkJcmV0dXJuIHRydWU7CiAKIAkvKgotCSAqIElmIHBs YW4gaXNuJ3QgdmFsaWQgZm9yIGN1cnJlbnQgcm9sZSwgd2UgY2FuJ3QgdXNlIGl0LgorCSAqIFBs YW4gaGFzIGJlZW4gaW52YWxpZGF0ZWQsIHNvIHVubGluayBpdCBmcm9tIHRoZSBwYXJlbnQgYW5k IHJlbGVhc2UgaXQuCiAJICovCi0JaWYgKHBsYW4tPmlzX3ZhbGlkICYmIHBsYW4tPmRlcGVuZHNP blJvbGUgJiYKLQkJcGxhbi0+cGxhblJvbGVJZCAhPSBHZXRVc2VySWQoKSkKLQkJcGxhbi0+aXNf dmFsaWQgPSBmYWxzZTsKKwlSZWxlYXNlR2VuZXJpY1BsYW4ocGxhbnNvdXJjZSk7CiAKLQkvKgot CSAqIElmIGl0IGFwcGVhcnMgdmFsaWQsIGFjcXVpcmUgbG9ja3MgYW5kIHJlY2hlY2s7IHRoaXMg aXMgbXVjaCB0aGUgc2FtZQotCSAqIGxvZ2ljIGFzIGluIFJldmFsaWRhdGVDYWNoZWRRdWVyeSwg YnV0IGZvciBhIHBsYW4uCi0JICovCi0JaWYgKHBsYW4tPmlzX3ZhbGlkKQorCXJldHVybiBmYWxz ZTsKK30KKworLyoKKyAqIEdlbmVyaWNQbGFuSXNWYWxpZAorICoJCUlzIGEgZ2VuZXJpYyBwbGFu IHN0aWxsIHZhbGlkPworICoKKyAqIEl0IG1heSBoYXZlIGdvbmUgc3RhbGUgZHVlIHRvIGNvbmN1 cnJlbnQgc2NoZW1hIG1vZGlmaWNhdGlvbnMgb2YgcmVsYXRpb25zCisgKiBtZW50aW9uZWQgaW4g dGhlIHBsYW4gb3IgYSBjb3VwbGUgb2Ygb3RoZXIgdGhpbmdzIG1lbnRpb25lZCBiZWxvdy4KKyAq Lworc3RhdGljIGJvb2wKK0dlbmVyaWNQbGFuSXNWYWxpZChDYWNoZWRQbGFuICpjcGxhbikKK3sK KwlBc3NlcnQoY3BsYW4gIT0gTlVMTCk7CisJQXNzZXJ0KGNwbGFuLT5tYWdpYyA9PSBDQUNIRURQ TEFOX01BR0lDKTsKKwkvKiBHZW5lcmljIHBsYW5zIGFyZSBuZXZlciBvbmUtc2hvdCAqLworCUFz c2VydCghY3BsYW4tPmlzX29uZXNob3QpOworCisJaWYgKGNwbGFuLT5pc192YWxpZCkKIAl7CiAJ CS8qCiAJCSAqIFBsYW4gbXVzdCBoYXZlIHBvc2l0aXZlIHJlZmNvdW50IGJlY2F1c2UgaXQgaXMg cmVmZXJlbmNlZCBieQogCQkgKiBwbGFuc291cmNlOyBzbyBubyBuZWVkIHRvIGZlYXIgaXQgZGlz YXBwZWFycyB1bmRlciB1cyBoZXJlLgogCQkgKi8KLQkJQXNzZXJ0KHBsYW4tPnJlZmNvdW50ID4g MCk7Ci0KLQkJQWNxdWlyZUV4ZWN1dG9yTG9ja3MocGxhbi0+c3RtdF9saXN0LCB0cnVlKTsKKwkJ QXNzZXJ0KGNwbGFuLT5yZWZjb3VudCA+IDApOwogCiAJCS8qCi0JCSAqIElmIHBsYW4gd2FzIHRy YW5zaWVudCwgY2hlY2sgdG8gc2VlIGlmIFRyYW5zYWN0aW9uWG1pbiBoYXMKLQkJICogYWR2YW5j ZWQsIGFuZCBpZiBzbyBpbnZhbGlkYXRlIGl0LgorCQkgKiBJZiBwbGFuIGlzbid0IHZhbGlkIGZv ciBjdXJyZW50IHJvbGUsIHdlIGNhbid0IHVzZSBpdC4KIAkJICovCi0JCWlmIChwbGFuLT5pc192 YWxpZCAmJgotCQkJVHJhbnNhY3Rpb25JZElzVmFsaWQocGxhbi0+c2F2ZWRfeG1pbikgJiYKLQkJ CSFUcmFuc2FjdGlvbklkRXF1YWxzKHBsYW4tPnNhdmVkX3htaW4sIFRyYW5zYWN0aW9uWG1pbikp Ci0JCQlwbGFuLT5pc192YWxpZCA9IGZhbHNlOworCQlpZiAoY3BsYW4tPmRlcGVuZHNPblJvbGUg JiYgY3BsYW4tPnBsYW5Sb2xlSWQgIT0gR2V0VXNlcklkKCkpCisJCQljcGxhbi0+aXNfdmFsaWQg PSBmYWxzZTsKIAogCQkvKgotCQkgKiBCeSBub3csIGlmIGFueSBpbnZhbGlkYXRpb24gaGFzIGhh cHBlbmVkLCB0aGUgaW52YWwgY2FsbGJhY2sKLQkJICogZnVuY3Rpb25zIHdpbGwgaGF2ZSBtYXJr ZWQgdGhlIHBsYW4gaW52YWxpZC4KKwkJICogSWYgcGxhbiB3YXMgdHJhbnNpZW50LCBjaGVjayB0 byBzZWUgaWYgVHJhbnNhY3Rpb25YbWluIGhhcworCQkgKiBhZHZhbmNlZCwgYW5kIGlmIHNvIGlu dmFsaWRhdGUgaXQuCiAJCSAqLwotCQlpZiAocGxhbi0+aXNfdmFsaWQpCi0JCXsKLQkJCS8qIFN1 Y2Nlc3NmdWxseSByZXZhbGlkYXRlZCBhbmQgbG9ja2VkIHRoZSBxdWVyeS4gKi8KLQkJCXJldHVy biB0cnVlOwotCQl9Ci0KLQkJLyogT29wcywgdGhlIHJhY2UgY2FzZSBoYXBwZW5lZC4gIFJlbGVh c2UgdXNlbGVzcyBsb2Nrcy4gKi8KLQkJQWNxdWlyZUV4ZWN1dG9yTG9ja3MocGxhbi0+c3RtdF9s aXN0LCBmYWxzZSk7CisJCWlmIChUcmFuc2FjdGlvbklkSXNWYWxpZChjcGxhbi0+c2F2ZWRfeG1p bikgJiYKKwkJCSFUcmFuc2FjdGlvbklkRXF1YWxzKGNwbGFuLT5zYXZlZF94bWluLCBUcmFuc2Fj dGlvblhtaW4pKQorCQkJY3BsYW4tPmlzX3ZhbGlkID0gZmFsc2U7CiAJfQogCi0JLyoKLQkgKiBQ bGFuIGhhcyBiZWVuIGludmFsaWRhdGVkLCBzbyB1bmxpbmsgaXQgZnJvbSB0aGUgcGFyZW50IGFu ZCByZWxlYXNlIGl0LgotCSAqLwotCVJlbGVhc2VHZW5lcmljUGxhbihwbGFuc291cmNlKTsKLQot CXJldHVybiBmYWxzZTsKKwlyZXR1cm4gY3BsYW4tPmlzX3ZhbGlkOwogfQogCiAvKgpAQCAtMTEy Niw5ICsxMTE5LDYgQEAgY2FjaGVkX3BsYW5fY29zdChDYWNoZWRQbGFuICpwbGFuLCBib29sIGlu Y2x1ZGVfcGxhbm5lcikKICAqIHBsYW4gb3IgYSBjdXN0b20gcGxhbiBmb3IgdGhlIGdpdmVuIHBh cmFtZXRlcnM6IHRoZSBjYWxsZXIgZG9lcyBub3Qga25vdwogICogd2hpY2ggaXQgd2lsbCBnZXQu CiAgKgotICogT24gcmV0dXJuLCB0aGUgcGxhbiBpcyB2YWxpZCBhbmQgd2UgaGF2ZSBzdWZmaWNp ZW50IGxvY2tzIHRvIGJlZ2luCi0gKiBleGVjdXRpb24uCi0gKgogICogT24gcmV0dXJuLCB0aGUg cmVmY291bnQgb2YgdGhlIHBsYW4gaGFzIGJlZW4gaW5jcmVtZW50ZWQ7IGEgbGF0ZXIKICAqIFJl bGVhc2VDYWNoZWRQbGFuKCkgY2FsbCBpcyBleHBlY3RlZC4gIElmICJvd25lciIgaXMgbm90IE5V TEwgdGhlbgogICogdGhlIHJlZmNvdW50IGhhcyBiZWVuIHJlcG9ydGVkIHRvIHRoYXQgUmVzb3Vy Y2VPd25lciAobm90ZSB0aGF0IHRoaXMKQEAgLTEzNjAsOCArMTM1MCw4IEBAIENhY2hlZFBsYW5B bGxvd3NTaW1wbGVWYWxpZGl0eUNoZWNrKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCiAJ fQogCiAJLyoKLQkgKiBSZWplY3QgaWYgQWNxdWlyZUV4ZWN1dG9yTG9ja3Mgd291bGQgaGF2ZSBh bnl0aGluZyB0byBkby4gIFRoaXMgaXMKLQkgKiBwcm9iYWJseSB1bm5lY2Vzc2FyeSBnaXZlbiB0 aGUgcHJldmlvdXMgY2hlY2ssIGJ1dCBsZXQncyBiZSBzYWZlLgorCSAqIFJlamVjdCBpZiB0aGUg ZXhlY3V0b3Igd291bGQgbmVlZCB0byB0YWtlIGFkZGl0aW9uYWwgbG9ja3MsIHRoYXQgaXMsIGlu CisJICogYWRkaXRpb24gdG8gdGhvc2UgdGFrZW4gYnkgQWNxdWlyZVBsYW5uZXJMb2NrcygpIG9u IGEgZ2l2ZW4gcXVlcnkuCiAJICovCiAJZm9yZWFjaChsYywgcGxhbi0+c3RtdF9saXN0KQogCXsK QEAgLTE3MzUsNTggKzE3MjUsNiBAQCBRdWVyeUxpc3RHZXRQcmltYXJ5U3RtdChMaXN0ICpzdG10 cykKIAlyZXR1cm4gTlVMTDsKIH0KIAotLyoKLSAqIEFjcXVpcmVFeGVjdXRvckxvY2tzOiBhY3F1 aXJlIGxvY2tzIG5lZWRlZCBmb3IgZXhlY3V0aW9uIG9mIGEgY2FjaGVkIHBsYW47Ci0gKiBvciBy ZWxlYXNlIHRoZW0gaWYgYWNxdWlyZSBpcyBmYWxzZS4KLSAqLwotc3RhdGljIHZvaWQKLUFjcXVp cmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJlKQotewotCUxpc3RD ZWxsICAgKmxjMTsKLQotCWZvcmVhY2gobGMxLCBzdG10X2xpc3QpCi0JewotCQlQbGFubmVkU3Rt dCAqcGxhbm5lZHN0bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgbGMxKTsKLQkJTGlzdENl bGwgICAqbGMyOwotCi0JCWlmIChwbGFubmVkc3RtdC0+Y29tbWFuZFR5cGUgPT0gQ01EX1VUSUxJ VFkpCi0JCXsKLQkJCS8qCi0JCQkgKiBJZ25vcmUgdXRpbGl0eSBzdGF0ZW1lbnRzLCBleGNlcHQg dGhvc2UgKHN1Y2ggYXMgRVhQTEFJTikgdGhhdAotCQkJICogY29udGFpbiBhIHBhcnNlZC1idXQt bm90LXBsYW5uZWQgcXVlcnkuICBOb3RlOiBpdCdzIG9rYXkgdG8gdXNlCi0JCQkgKiBTY2FuUXVl cnlGb3JMb2NrcywgZXZlbiB0aG91Z2ggdGhlIHF1ZXJ5IGhhc24ndCBiZWVuIHRocm91Z2gKLQkJ CSAqIHJ1bGUgcmV3cml0aW5nLCBiZWNhdXNlIHJld3JpdGluZyBkb2Vzbid0IGNoYW5nZSB0aGUg cXVlcnkKLQkJCSAqIHJlcHJlc2VudGF0aW9uLgotCQkJICovCi0JCQlRdWVyeQkgICAqcXVlcnkg PSBVdGlsaXR5Q29udGFpbnNRdWVyeShwbGFubmVkc3RtdC0+dXRpbGl0eVN0bXQpOwotCi0JCQlp ZiAocXVlcnkpCi0JCQkJU2NhblF1ZXJ5Rm9yTG9ja3MocXVlcnksIGFjcXVpcmUpOwotCQkJY29u dGludWU7Ci0JCX0KLQotCQlmb3JlYWNoKGxjMiwgcGxhbm5lZHN0bXQtPnJ0YWJsZSkKLQkJewot CQkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gKFJhbmdlVGJsRW50cnkgKikgbGZpcnN0KGxjMik7Ci0K LQkJCWlmICghKHJ0ZS0+cnRla2luZCA9PSBSVEVfUkVMQVRJT04gfHwKLQkJCQkgIChydGUtPnJ0 ZWtpbmQgPT0gUlRFX1NVQlFVRVJZICYmIE9pZElzVmFsaWQocnRlLT5yZWxpZCkpKSkKLQkJCQlj b250aW51ZTsKLQotCQkJLyoKLQkJCSAqIEFjcXVpcmUgdGhlIGFwcHJvcHJpYXRlIHR5cGUgb2Yg bG9jayBvbiBlYWNoIHJlbGF0aW9uIE9JRC4gTm90ZQotCQkJICogdGhhdCB3ZSBkb24ndCBhY3R1 YWxseSB0cnkgdG8gb3BlbiB0aGUgcmVsLCBhbmQgaGVuY2Ugd2lsbCBub3QKLQkJCSAqIGZhaWwg aWYgaXQncyBiZWVuIGRyb3BwZWQgZW50aXJlbHkgLS0tIHdlJ2xsIGp1c3QgdHJhbnNpZW50bHkK LQkJCSAqIGFjcXVpcmUgYSBub24tY29uZmxpY3RpbmcgbG9jay4KLQkJCSAqLwotCQkJaWYgKGFj cXVpcmUpCi0JCQkJTG9ja1JlbGF0aW9uT2lkKHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUp OwotCQkJZWxzZQotCQkJCVVubG9ja1JlbGF0aW9uT2lkKHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9j a21vZGUpOwotCQl9Ci0JfQotfQotCiAvKgogICogQWNxdWlyZVBsYW5uZXJMb2NrczogYWNxdWly ZSBsb2NrcyBuZWVkZWQgZm9yIHBsYW5uaW5nIG9mIGEgcXVlcnl0cmVlIGxpc3Q7CiAgKiBvciBy ZWxlYXNlIHRoZW0gaWYgYWNxdWlyZSBpcyBmYWxzZS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMgYi9zcmMvYmFja2VuZC91dGlscy9tbWdyL3BvcnRhbG1l bS5jCmluZGV4IDA2ZGZhODVmMDQuLjNhZDgwYzdlY2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0 YWxtZW0uYwpAQCAtMjAxLDYgKzIwMSwxMCBAQCBDcmVhdGVQb3J0YWwoY29uc3QgY2hhciAqbmFt ZSwgYm9vbCBhbGxvd0R1cCwgYm9vbCBkdXBTaWxlbnQpCiAJcG9ydGFsLT5wb3J0YWxDb250ZXh0 ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRvcFBvcnRhbENvbnRleHQsCiAJCQkJCQkJCQkJCQkg ICJQb3J0YWxDb250ZXh0IiwKIAkJCQkJCQkJCQkJCSAgQUxMT0NTRVRfU01BTExfU0laRVMpOwor CS8qIGluaXRpYWxpemUgcG9ydGFsJ3MgcXVlcnkgY29udGV4dCB0byBzdG9yZSBRdWVyeURlc2Nz ICovCisJcG9ydGFsLT5xdWVyeUNvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9wUG9y dGFsQ29udGV4dCwKKwkJCQkJCQkJCQkJCSAiUG9ydGFsUXVlcnlDb250ZXh0IiwKKwkJCQkJCQkJ CQkJCSBBTExPQ1NFVF9TTUFMTF9TSVpFUyk7CiAKIAkvKiBjcmVhdGUgYSByZXNvdXJjZSBvd25l ciBmb3IgdGhlIHBvcnRhbCAqLwogCXBvcnRhbC0+cmVzb3duZXIgPSBSZXNvdXJjZU93bmVyQ3Jl YXRlKEN1clRyYW5zYWN0aW9uUmVzb3VyY2VPd25lciwKQEAgLTIyNCw2ICsyMjgsNyBAQCBDcmVh dGVQb3J0YWwoY29uc3QgY2hhciAqbmFtZSwgYm9vbCBhbGxvd0R1cCwgYm9vbCBkdXBTaWxlbnQp CiAKIAkvKiBmb3IgbmFtZWQgcG9ydGFscyByZXVzZSBwb3J0YWwtPm5hbWUgY29weSAqLwogCU1l bW9yeUNvbnRleHRTZXRJZGVudGlmaWVyKHBvcnRhbC0+cG9ydGFsQ29udGV4dCwgcG9ydGFsLT5u YW1lWzBdID8gcG9ydGFsLT5uYW1lIDogIjx1bm5hbWVkPiIpOworCU1lbW9yeUNvbnRleHRTZXRJ ZGVudGlmaWVyKHBvcnRhbC0+cXVlcnlDb250ZXh0LCBwb3J0YWwtPm5hbWVbMF0gPyBwb3J0YWwt Pm5hbWUgOiAiPHVubmFtZWQ+Iik7CiAKIAlyZXR1cm4gcG9ydGFsOwogfQpAQCAtNTk0LDYgKzU5 OSw3IEBAIFBvcnRhbERyb3AoUG9ydGFsIHBvcnRhbCwgYm9vbCBpc1RvcENvbW1pdCkKIAogCS8q IHJlbGVhc2Ugc3Vic2lkaWFyeSBzdG9yYWdlICovCiAJTWVtb3J5Q29udGV4dERlbGV0ZShwb3J0 YWwtPnBvcnRhbENvbnRleHQpOworCU1lbW9yeUNvbnRleHREZWxldGUocG9ydGFsLT5xdWVyeUNv bnRleHQpOwogCiAJLyogcmVsZWFzZSBwb3J0YWwgc3RydWN0IChpdCdzIGluIFRvcFBvcnRhbENv bnRleHQpICovCiAJcGZyZWUocG9ydGFsKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1h bmRzL2V4cGxhaW4uaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaAppbmRleCA3YzEw NzFkZGQxLi5kYTM5YjJlNGZmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBs YWluLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCkBAIC04Nyw3ICs4Nywx MSBAQCBleHRlcm4gdm9pZCBFeHBsYWluT25lVXRpbGl0eShOb2RlICp1dGlsaXR5U3RtdCwgSW50 b0NsYXVzZSAqaW50bywKIAkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMsIGNvbnN0IGNoYXIgKnF1 ZXJ5U3RyaW5nLAogCQkJCQkJCSAgUGFyYW1MaXN0SW5mbyBwYXJhbXMsIFF1ZXJ5RW52aXJvbm1l bnQgKnF1ZXJ5RW52KTsKIAotZXh0ZXJuIHZvaWQgRXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0bXQg KnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNlICppbnRvLAorZXh0ZXJuIFF1ZXJ5RGVzYyAqRXhwbGFp blF1ZXJ5RGVzYyhQbGFubmVkU3RtdCAqc3RtdCwgc3RydWN0IENhY2hlZFBsYW4gKmNwbGFuLAor CQkJCSBjb25zdCBjaGFyICpxdWVyeVN0cmluZywgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0 YXRlICplcywKKwkJCQkgUGFyYW1MaXN0SW5mbyBwYXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1 ZXJ5RW52KTsKK2V4dGVybiB2b2lkIEV4cGxhaW5PbmVQbGFuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNj LAorCQkJCQkJICAgSW50b0NsYXVzZSAqaW50bywKIAkJCQkJCSAgIEV4cGxhaW5TdGF0ZSAqZXMs IGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogCQkJCQkJICAgUGFyYW1MaXN0SW5mbyBwYXJhbXMs IFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LAogCQkJCQkJICAgY29uc3QgaW5zdHJfdGltZSAq cGxhbmR1cmF0aW9uLApAQCAtMTAzLDYgKzEwNyw3IEBAIGV4dGVybiB2b2lkIEV4cGxhaW5RdWVy eVBhcmFtZXRlcnMoRXhwbGFpblN0YXRlICplcywgUGFyYW1MaXN0SW5mbyBwYXJhbXMsIGludCBt CiAKIGV4dGVybiB2b2lkIEV4cGxhaW5CZWdpbk91dHB1dChFeHBsYWluU3RhdGUgKmVzKTsKIGV4 dGVybiB2b2lkIEV4cGxhaW5FbmRPdXRwdXQoRXhwbGFpblN0YXRlICplcyk7CitleHRlcm4gdm9p ZCBFeHBsYWluUmVzZXRPdXRwdXQoRXhwbGFpblN0YXRlICplcyk7CiBleHRlcm4gdm9pZCBFeHBs YWluU2VwYXJhdGVQbGFucyhFeHBsYWluU3RhdGUgKmVzKTsKIAogZXh0ZXJuIHZvaWQgRXhwbGFp blByb3BlcnR5TGlzdChjb25zdCBjaGFyICpxbGFiZWwsIExpc3QgKmRhdGEsCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY2Rlc2MuaAppbmRleCBhZjJiZjM2ZGZiLi5jMzZjMjViNDk3IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWNkZXNjLmgKQEAgLTMyLDkgKzMyLDEyIEBACiAgKi8KIHR5cGVkZWYgc3RydWN0IFF1ZXJ5RGVz YwogeworCU5vZGVUYWcJCXR5cGU7CisKIAkvKiBUaGVzZSBmaWVsZHMgYXJlIHByb3ZpZGVkIGJ5 IENyZWF0ZVF1ZXJ5RGVzYyAqLwogCUNtZFR5cGUJCW9wZXJhdGlvbjsJCS8qIENNRF9TRUxFQ1Qs IENNRF9VUERBVEUsIGV0Yy4gKi8KIAlQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQ7CS8qIHBsYW5u ZXIncyBvdXRwdXQgKGNvdWxkIGJlIHV0aWxpdHksIHRvbykgKi8KKwlzdHJ1Y3QgQ2FjaGVkUGxh biAqY3BsYW47CS8qIENhY2hlZFBsYW4sIGlmIHBsYW5uZWRzdG10IGlzIGZyb20gb25lICovCiAJ Y29uc3QgY2hhciAqc291cmNlVGV4dDsJCS8qIHNvdXJjZSB0ZXh0IG9mIHRoZSBxdWVyeSAqLwog CVNuYXBzaG90CXNuYXBzaG90OwkJLyogc25hcHNob3QgdG8gdXNlIGZvciBxdWVyeSAqLwogCVNu YXBzaG90CWNyb3NzY2hlY2tfc25hcHNob3Q7CS8qIGNyb3NzY2hlY2sgZm9yIFJJIHVwZGF0ZS9k ZWxldGUgKi8KQEAgLTQ3LDYgKzUwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUXVlcnlEZXNjCiAJVHVw bGVEZXNjCXR1cERlc2M7CQkvKiBkZXNjcmlwdG9yIGZvciByZXN1bHQgdHVwbGVzICovCiAJRVN0 YXRlCSAgICplc3RhdGU7CQkJLyogZXhlY3V0b3IncyBxdWVyeS13aWRlIHN0YXRlICovCiAJUGxh blN0YXRlICAqcGxhbnN0YXRlOwkJLyogdHJlZSBvZiBwZXItcGxhbi1ub2RlIHN0YXRlICovCisJ Ym9vbAkJcGxhbl92YWxpZDsJCS8qIGlzIHBsYW5zdGF0ZSB0cmVlIGZ1bGx5IHZhbGlkPyAqLwog CiAJLyogVGhpcyBmaWVsZCBpcyBzZXQgYnkgRXhlY3V0b3JSdW4gKi8KIAlib29sCQlhbHJlYWR5 X2V4ZWN1dGVkOwkvKiB0cnVlIGlmIHByZXZpb3VzbHkgZXhlY3V0ZWQgKi8KQEAgLTU3LDYgKzYx LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUXVlcnlEZXNjCiAKIC8qIGluIHBxdWVyeS5jICovCiBleHRl cm4gUXVlcnlEZXNjICpDcmVhdGVRdWVyeURlc2MoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAor CQkJCQkJCQkgIHN0cnVjdCBDYWNoZWRQbGFuICpjcGxhbiwKIAkJCQkJCQkJICBjb25zdCBjaGFy ICpzb3VyY2VUZXh0LAogCQkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAogCQkJCQkJCQkgIFNu YXBzaG90IGNyb3NzY2hlY2tfc25hcHNob3QsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVj dXRvci9leGVjdXRvci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAppbmRleCBl N2UyNWMwNTdlLi4xNWExYWJhYWNmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjdXRvci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKQEAgLTE5LDYg KzE5LDcgQEAKICNpbmNsdWRlICJub2Rlcy9sb2Nrb3B0aW9ucy5oIgogI2luY2x1ZGUgIm5vZGVz L3BhcnNlbm9kZXMuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0 aWxzL3BsYW5jYWNoZS5oIgogCiAKIC8qCkBAIC01OSw2ICs2MCwxMCBAQAogI2RlZmluZSBFWEVD X0ZMQUdfTUFSSwkJCTB4MDAwOAkvKiBuZWVkIG1hcmsvcmVzdG9yZSAqLwogI2RlZmluZSBFWEVD X0ZMQUdfU0tJUF9UUklHR0VSUyAweDAwMTAJLyogc2tpcCBBZnRlclRyaWdnZXIgY2FsbHMgKi8K ICNkZWZpbmUgRVhFQ19GTEFHX1dJVEhfTk9fREFUQQkweDAwMjAJLyogcmVsIHNjYW5uYWJpbGl0 eSBkb2Vzbid0IG1hdHRlciAqLworI2RlZmluZSBFWEVDX0ZMQUdfR0VUX0xPQ0tTCQkweDA0MDAJ Lyogc2hvdWxkIEV4ZWNHZXRSYW5nZVRhYmxlUmVsYXRpb24KKwkJCQkJCQkJCQkgKiBsb2NrIHJl bGF0aW9ucz8gKi8KKyNkZWZpbmUgRVhFQ19GTEFHX1JFTF9MT0NLUwkJMHg4MDAwCS8qIHNob3Vs ZCBFeGVjQ2xvc2VSYW5nZVRhYmxlUmVsYXRpb25zCisJCQkJCQkJCQkJICogcmVsZWFzZSBsb2Nr cz8gKi8KIAogCiAvKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGluIEV4ZWN1dG9y U3RhcnQoKSAqLwpAQCAtMjQ1LDYgKzI1MCwxMyBAQCBleHRlcm4gdm9pZCBFeGVjRW5kTm9kZShQ bGFuU3RhdGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQgRXhlY1NodXRkb3duTm9kZShQbGFuU3RhdGUg Km5vZGUpOwogZXh0ZXJuIHZvaWQgRXhlY1NldFR1cGxlQm91bmQoaW50NjQgdHVwbGVzX25lZWRl ZCwgUGxhblN0YXRlICpjaGlsZF9ub2RlKTsKIAorLyogSXMgdGhlIGNhY2hlZCBwbGFuKi8KK3N0 YXRpYyBpbmxpbmUgYm9vbAorRXhlY1BsYW5TdGlsbFZhbGlkKEVTdGF0ZSAqZXN0YXRlKQorewor CXJldHVybiBlc3RhdGUtPmVzX2NhY2hlZHBsYW4gPworCQlDYWNoZWRQbGFuU3RpbGxWYWxpZChl c3RhdGUtPmVzX2NhY2hlZHBsYW4pIDogdHJ1ZTsKK30KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCUV4ZWNQ cm9jTm9kZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMv aW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCAyMGY0YzhiMzVmLi44OWY1YTYyN2M4IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtNjE5LDYgKzYxOSw4IEBAIHR5cGVkZWYgc3RydWN0IEVT dGF0ZQogCQkJCQkJCQkJCSAqIEV4ZWNSb3dNYXJrcywgb3IgTlVMTCBpZiBub25lICovCiAJTGlz dAkgICAqZXNfcnRlcGVybWluZm9zOwkvKiBMaXN0IG9mIFJURVBlcm1pc3Npb25JbmZvICovCiAJ UGxhbm5lZFN0bXQgKmVzX3BsYW5uZWRzdG10OwkvKiBsaW5rIHRvIHRvcCBvZiBwbGFuIHRyZWUg Ki8KKwlzdHJ1Y3QgQ2FjaGVkUGxhbiAqZXNfY2FjaGVkcGxhbjsJLyogQ2FjaGVkUGxhbiBpZiBw bGFubmVkc3RtdCBpcyBmcm9tCisJCQkJCQkJCQkJICogb25lICovCiAJTGlzdAkgICAqZXNfcGFy dF9wcnVuZV9pbmZvczsJLyogUGxhbm5lZFN0bXQucGFydFBydW5lSW5mb3MgKi8KIAljb25zdCBj aGFyICplc19zb3VyY2VUZXh0OwkvKiBTb3VyY2UgdGV4dCBmcm9tIFF1ZXJ5RGVzYyAqLwogCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9tZXNvbi5idWlsZCBiL3NyYy9pbmNsdWRlL25v ZGVzL21lc29uLmJ1aWxkCmluZGV4IGVmZTA4MzRhZmIuLmE4ZmRkOWUxNzYgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL25vZGVzL21lc29uLmJ1aWxkCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL21l c29uLmJ1aWxkCkBAIC0xMyw2ICsxMyw3IEBAIG5vZGVfc3VwcG9ydF9pbnB1dF9pID0gWwogICAn YWNjZXNzL3RzbWFwaS5oJywKICAgJ2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCcsCiAgICdjb21t YW5kcy90cmlnZ2VyLmgnLAorICAnZXhlY3V0b3IvZXhlY2Rlc2MuaCcsCiAgICdleGVjdXRvci90 dXB0YWJsZS5oJywKICAgJ2ZvcmVpZ24vZmR3YXBpLmgnLAogICAnbm9kZXMvYml0bWFwc2V0Lmgn LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVk ZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCAwZDRiMWVjNGU0Li43MTAwNGZlZTc1IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rl cy9wYXRobm9kZXMuaApAQCAtMTE2LDYgKzExNiw5IEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZXJH bG9iYWwKIAkvKiAiZmxhdCIgbGlzdCBvZiBSVEVQZXJtaXNzaW9uSW5mb3MgKi8KIAlMaXN0CSAg ICpmaW5hbHJ0ZXBlcm1pbmZvczsKIAorCS8qICJmbGF0IiBsaXN0IG9mIGludGVnZXIgUlQgaW5k ZXhlcyAqLworCUxpc3QJICAgKnZpZXdSZWxhdGlvbnM7CisKIAkvKiAiZmxhdCIgbGlzdCBvZiBQ bGFuUm93TWFya3MgKi8KIAlMaXN0CSAgICpmaW5hbHJvd21hcmtzOwogCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rl cy5oCmluZGV4IDQ3ODFhOWM2MzIuLmRhOWU3M2ZiMTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBA IC03OCw2ICs3OCw5IEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZWRTdG10CiAJTGlzdAkgICAqcGVy bUluZm9zOwkJLyogbGlzdCBvZiBSVEVQZXJtaXNzaW9uSW5mbyBub2RlcyBmb3IgcnRhYmxlCiAJ CQkJCQkJCSAqIGVudHJpZXMgbmVlZGluZyBvbmUgKi8KIAorCUxpc3QJICAgKnZpZXdSZWxhdGlv bnM7CS8qIGludGVnZXIgbGlzdCBvZiBSVCBpbmRleGVzLCBvciBOSUwgaWYgbm8KKwkJCQkJCQkJ ICogdmlld3MgYXJlIHF1ZXJpZWQgKi8KKwogCS8qIHJ0YWJsZSBpbmRleGVzIG9mIHRhcmdldCBy ZWxhdGlvbnMgZm9yIElOU0VSVC9VUERBVEUvREVMRVRFL01FUkdFICovCiAJTGlzdAkgICAqcmVz dWx0UmVsYXRpb25zOwkvKiBpbnRlZ2VyIGxpc3Qgb2YgUlQgaW5kZXhlcywgb3IgTklMICovCiAK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG1nci5oIGIvc3JjL2luY2x1ZGUvc3Rv cmFnZS9sbWdyLmgKaW5kZXggNGVlOTFlM2NmOS4uNTk4YmYyNjg4YSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvc3RvcmFnZS9sbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sbWdyLmgK QEAgLTQ4LDYgKzQ4LDcgQEAgZXh0ZXJuIGJvb2wgQ29uZGl0aW9uYWxMb2NrUmVsYXRpb24oUmVs YXRpb24gcmVsYXRpb24sIExPQ0tNT0RFIGxvY2ttb2RlKTsKIGV4dGVybiB2b2lkIFVubG9ja1Jl bGF0aW9uKFJlbGF0aW9uIHJlbGF0aW9uLCBMT0NLTU9ERSBsb2NrbW9kZSk7CiBleHRlcm4gYm9v bCBDaGVja1JlbGF0aW9uTG9ja2VkQnlNZShSZWxhdGlvbiByZWxhdGlvbiwgTE9DS01PREUgbG9j a21vZGUsCiAJCQkJCQkJCQlib29sIG9yc3Ryb25nZXIpOworZXh0ZXJuIGJvb2wgQ2hlY2tSZWxM b2NrZWRCeU1lKE9pZCByZWxpZCwgTE9DS01PREUgbG9ja21vZGUsIGJvb2wgb3JzdHJvbmdlcik7 CiBleHRlcm4gYm9vbCBMb2NrSGFzV2FpdGVyc1JlbGF0aW9uKFJlbGF0aW9uIHJlbGF0aW9uLCBM T0NLTU9ERSBsb2NrbW9kZSk7CiAKIGV4dGVybiB2b2lkIExvY2tSZWxhdGlvbklkRm9yU2Vzc2lv bihMb2NrUmVsSWQgKnJlbGlkLCBMT0NLTU9ERSBsb2NrbW9kZSk7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS91dGlscy9sc3lzY2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2xzeXNjYWNoZS5o CmluZGV4IDRmNTQxOGI5NzIuLjMwNzRlNjA0ZGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0 aWxzL2xzeXNjYWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2xzeXNjYWNoZS5oCkBAIC0x MzksNiArMTM5LDcgQEAgZXh0ZXJuIGNoYXIgZ2V0X3JlbF9yZWxraW5kKE9pZCByZWxpZCk7CiBl eHRlcm4gYm9vbCBnZXRfcmVsX3JlbGlzcGFydGl0aW9uKE9pZCByZWxpZCk7CiBleHRlcm4gT2lk CWdldF9yZWxfdGFibGVzcGFjZShPaWQgcmVsaWQpOwogZXh0ZXJuIGNoYXIgZ2V0X3JlbF9wZXJz aXN0ZW5jZShPaWQgcmVsaWQpOworZXh0ZXJuIGJvb2wgZ2V0X3JlbF9yZWxpc3NoYXJlZChPaWQg cmVsaWQpOwogZXh0ZXJuIE9pZAlnZXRfdHJhbnNmb3JtX2Zyb21zcWwoT2lkIHR5cGlkLCBPaWQg bGFuZ2lkLCBMaXN0ICp0cmZ0eXBlcyk7CiBleHRlcm4gT2lkCWdldF90cmFuc2Zvcm1fdG9zcWwo T2lkIHR5cGlkLCBPaWQgbGFuZ2lkLCBMaXN0ICp0cmZ0eXBlcyk7CiBleHRlcm4gYm9vbCBnZXRf dHlwaXNkZWZpbmVkKE9pZCB0eXBpZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9w bGFuY2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oCmluZGV4IGE0NDMxODFk NDEuLmMyZTQ4NWFjMmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5o CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oCkBAIC0yMjEsNiArMjIxLDIxIEBA IGV4dGVybiBDYWNoZWRQbGFuICpHZXRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5z b3VyY2UsCiAJCQkJCQkJCSBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zLAogCQkJCQkJCQkgUmVz b3VyY2VPd25lciBvd25lciwKIAkJCQkJCQkJIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KTsK KworLyoKKyAqIENhY2hlZFBsYW5TdGlsbFZhbGlkCisgKgkJUmV0dXJucyBpZiBhIGNhY2hlZCBn ZW5lcmljIHBsYW4gaXMgc3RpbGwgdmFsaWQKKyAqCisgKiBDYWxsZWQgYnkgdGhlIGV4ZWN1dG9y IGFmdGVyIGl0IGhhcyBmaW5pc2hlZCB0YWtpbmcgbG9ja3Mgb24gYSBwbGFuIHRyZWUKKyAqIGlu IGEgQ2FjaGVkUGxhbi4KKyAqLworc3RhdGljIGlubGluZSBib29sCitDYWNoZWRQbGFuU3RpbGxW YWxpZChDYWNoZWRQbGFuICpjcGxhbikKK3sKKwlyZXR1cm4gY3BsYW4tPmlzX3ZhbGlkOworfQor CitleHRlcm4gYm9vbCBDYWNoZWRQbGFuU3RpbGxWYWxpZChDYWNoZWRQbGFuICpjcGxhbik7CiBl eHRlcm4gdm9pZCBSZWxlYXNlQ2FjaGVkUGxhbihDYWNoZWRQbGFuICpwbGFuLCBSZXNvdXJjZU93 bmVyIG93bmVyKTsKIAogZXh0ZXJuIGJvb2wgQ2FjaGVkUGxhbkFsbG93c1NpbXBsZVZhbGlkaXR5 Q2hlY2soQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3V0aWxzL3BvcnRhbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmgKaW5kZXggYWEw OGIxZTBmYy4uMzMyYTA4Y2NiNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFs LmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmgKQEAgLTEzOCw2ICsxMzgsOSBAQCB0 eXBlZGVmIHN0cnVjdCBQb3J0YWxEYXRhCiAJUXVlcnlDb21wbGV0aW9uIHFjOwkJCS8qIGNvbW1h bmQgY29tcGxldGlvbiBkYXRhIGZvciBleGVjdXRlZCBxdWVyeSAqLwogCUxpc3QJICAgKnN0bXRz OwkJCS8qIGxpc3Qgb2YgUGxhbm5lZFN0bXRzICovCiAJQ2FjaGVkUGxhbiAqY3BsYW47CQkJLyog Q2FjaGVkUGxhbiwgaWYgc3RtdHMgYXJlIGZyb20gb25lICovCisJTGlzdAkgICAqcWRlc2NzOwkJ CS8qIGxpc3Qgb2YgUXVlcnlEZXNjcyAqLworCWJvb2wJCXBsYW5fdmFsaWQ7CQkvKiBhcmUgcGxh bihzKSByZWFkeSBmb3IgZXhlY3V0aW9uPyAqLworCU1lbW9yeUNvbnRleHQgcXVlcnlDb250ZXh0 OwkvKiBtZW1vcnkgZm9yIFF1ZXJ5RGVzY3MgYW5kIGNoaWxkcmVuICovCiAKIAlQYXJhbUxpc3RJ bmZvIHBvcnRhbFBhcmFtczsgLyogcGFyYW1zIHRvIHBhc3MgdG8gcXVlcnkgKi8KIAlRdWVyeUVu dmlyb25tZW50ICpxdWVyeUVudjsgLyogZW52aXJvbm1lbnQgZm9yIHF1ZXJ5ICovCkBAIC0yNDIs NiArMjQ1LDcgQEAgZXh0ZXJuIHZvaWQgUG9ydGFsRGVmaW5lUXVlcnkoUG9ydGFsIHBvcnRhbCwK IAkJCQkJCQkgIENvbW1hbmRUYWcgY29tbWFuZFRhZywKIAkJCQkJCQkgIExpc3QgKnN0bXRzLAog CQkJCQkJCSAgQ2FjaGVkUGxhbiAqY3BsYW4pOworZXh0ZXJuIHZvaWQgUG9ydGFsUXVlcnlGaW5p c2goUXVlcnlEZXNjICpxdWVyeURlc2MpOwogZXh0ZXJuIFBsYW5uZWRTdG10ICpQb3J0YWxHZXRQ cmltYXJ5U3RtdChQb3J0YWwgcG9ydGFsKTsKIGV4dGVybiB2b2lkIFBvcnRhbENyZWF0ZUhvbGRT dG9yZShQb3J0YWwgcG9ydGFsKTsKIGV4dGVybiB2b2lkIFBvcnRhbEhhc2hUYWJsZURlbGV0ZUFs bCh2b2lkKTsKLS0gCjIuMzUuMwoK --000000000000c29d0f05f3b8ae71--