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 1pNvhJ-0005yd-9g for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Feb 2023 13:01:45 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pNvhH-0000P2-QK for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Feb 2023 13:01:43 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pNvhG-0000GX-TT for pgsql-hackers@lists.postgresql.org; Fri, 03 Feb 2023 13:01:43 +0000 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pNvhE-00030l-3o for pgsql-hackers@postgresql.org; Fri, 03 Feb 2023 13:01:41 +0000 Received: by mail-pg1-x529.google.com with SMTP id 7so3586815pga.1 for ; Fri, 03 Feb 2023 05:01:39 -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=Vc6loBxD+HKurrHPp/0nFXkpYNIhs7il8ABFedzDU+o=; b=pma3WV1GnkXeCfL/0K75qUoWafAE0NJLL/9/Fjsm1jDFOccdexV+4v5li7azjD5u6E WZ9zPcMcn3UvOyZZOKWoim0GVV29cNyVBWHWx7DmbJIFbiDIIoe0ekp2kTUi1pdACJec 6Vf7p5wPiuyvgqLKxwz4MjQR/wQtygeKHq9hqwYKqdFKkJai/ncjaEAdlCIoQs+RmXlW aXgJNf0Dh+jmiMMoOdmfbA700BIK/goNV8rYttIWPcFX9Wds3tO1Byn5JONCNgo5lJEI QU2mw1LOgAhrgU6vMXMTym1Y0Zlk7O0YGsBnU8g2ZAOCOXGeDNtLb5dHNs2P85xXgM3t 1Isw== 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=Vc6loBxD+HKurrHPp/0nFXkpYNIhs7il8ABFedzDU+o=; b=yP3gLfCWV3Oy8+ooMDuYqBTOkbyZm+q1To1Va3bL6XDj4YpDNp20xpE57HI8y3Dr1k IP4Qg6/L1px0bb3/1nAN0C4mVo2CVHuS/93b92j8BQyo9FUllHZ8l3846vVZBzcxgF5V s2/w9jiljMQQP96EaV3tpxJywxeHGRmHCMenUKR+m8GhL+HXR9Zh8fIyiDq2FAHu3y0B LI/oaw3hLXOHk6cERck/VG5Ix4ojmUEaAS+LWw2zRWwUlbry+CnIMGIS6u/SQ8LeehJK t+AMs710n5GabrxJ7Ss4wRcyJHicTJcONN+QzPUoB5X04AyFJwEISHkNycF/lYScY1GJ V41A== X-Gm-Message-State: AO0yUKWEL4qiqlREkWZgEQFrljvcdjoCwisgErtNfILazwddOLOdZGb/ /LnQ6oa08oRLDvH3zMngwenK8Be5wwYthJjS3EQ= X-Google-Smtp-Source: AK7set/me5Vvuzrh8HnDTyZo1hHNiv7RdYBgK/549A8RHCWfbJk1ZV/G1By9sgGDeJec5em4O8kNRQlNc9+W3TNb6BU= X-Received: by 2002:a05:6a00:1f18:b0:592:501a:9cd7 with SMTP id be24-20020a056a001f1800b00592501a9cd7mr2385627pfb.5.1675429298518; Fri, 03 Feb 2023 05:01:38 -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: Fri, 3 Feb 2023 22:01:09 +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="0000000000002ff08f05f3cb48f8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002ff08f05f3cb48f8 Content-Type: text/plain; charset="UTF-8" On Thu, Feb 2, 2023 at 11:49 PM Amit Langote wrote: > On Fri, Jan 27, 2023 at 4:01 PM Amit Langote wrote: > > 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. In the attached updated patch, I've made the functions that check ExecPlanStillValid() to return NULL (if returning something) instead of returning partially initialized structs. Those partially initialized structs were not being subsequently looked at anyway. > 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? I've added a test case under src/modules/delay_execution by adding a new ExecutorStart_hook that works similarly as delay_execution_planner(). The test works by allowing a concurrent session to drop an object being referenced in a cached plan being initialized while the ExecutorStart_hook waits to get an advisory lock. The concurrent drop of the referenced object is detected during ExecInitNode() and thus triggers replanning of the cached plan. I also fixed a bug in the ExplainExecuteQuery() while testing and some comments. -- Thanks, Amit Langote EDB: http://www.enterprisedb.com --0000000000002ff08f05f3cb48f8 Content-Type: application/octet-stream; name="v33-0001-Move-AcquireExecutorLocks-s-responsibility-into-.patch" Content-Disposition: attachment; filename="v33-0001-Move-AcquireExecutorLocks-s-responsibility-into-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ldojb86w0 RnJvbSA0YThlMmI2YzRkODdlMGFlODFiZWNkNzRiNGExZTRkNTIxN2ViMDVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogRnJpLCAyMCBKYW4gMjAyMyAxNjo1MjozMSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjMzXSBN b3ZlIEFjcXVpcmVFeGVjdXRvckxvY2tzKCkncyByZXNwb25zaWJpbGl0eSBpbnRvIHRoZQogZXhl Y3V0b3IKCi0tLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgICAgICAgICAg IHwgICA0ICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jICAgICAgICAgICAgICAgICB8 ICAgNCArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyAgICAgICAgICAgICAgIHwg ICAyICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgICAgICAgICAgICAgICAgfCAx NDIgKysrKysrLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYyAgICAgICAgICAg ICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jICAgICAgICAgICAgICAg IHwgICAyICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9wb3J0YWxjbWRzLmMgICAgICAgICAgICAg fCAgMTYgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYyAgICAgICAgICAgICAgICB8 ICAzMCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyAgICAgICAgICAgICAgIHwg MTA1ICsrKysrKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jICAgICAgICAg ICB8ICAgNyArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jICAgICAgICAg IHwgICA0ICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jICAgICAgICAgICB8 ICAgNSArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjVXRpbHMuYyAgICAgICAgICAgICAgfCAg IDUgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jICAgICAgICAgICAgICB8ICAg MSArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQWdnLmMgICAgICAgICAgICAgICAgfCAgIDIg Kwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jICAgICAgICAgICAgIHwgICA0ICsK IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBBbmQuYyAgICAgICAgICB8ICAgMiArCiBz cmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSGVhcHNjYW4uYyAgICAgfCAgIDQgKwogc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcE9yLmMgICAgICAgICAgIHwgICAyICsKIHNyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVDdXN0b20uYyAgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlRm9yZWlnbnNjYW4uYyAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUdhdGhlci5jICAgICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVHYXRoZXJNZXJnZS5jICAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlR3JvdXAuYyAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUhhc2guYyAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVIYXNoam9pbi5jICAgICAgICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlSW5jcmVtZW50YWxTb3J0LmMgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUluZGV4b25seXNjYW4uYyAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVJbmRleHNjYW4uYyAgICAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl TGltaXQuYyAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUxv Y2tSb3dzLmMgICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNYXRl cmlhbC5jICAgICAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVtb2l6 ZS5jICAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBw ZW5kLmMgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZWpvaW4u YyAgICAgICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUu YyAgICAgICAgfCAgIDcgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU5lc3Rsb29wLmMgICAg ICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVQcm9qZWN0U2V0LmMgICAg ICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlUmVjdXJzaXZldW5pb24uYyAg ICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVJlc3VsdC5jICAgICAgICAgICAg IHwgICAyICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTYW1wbGVzY2FuLmMgICAgICAgICB8 ICAgMiArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5jICAgICAgICAgICAgfCAg IDIgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNldE9wLmMgICAgICAgICAgICAgIHwgICAy ICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTb3J0LmMgICAgICAgICAgICAgICB8ICAgMiAr CiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU3VicXVlcnlzY2FuLmMgICAgICAgfCAgIDIgKwog c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRpZHJhbmdlc2Nhbi5jICAgICAgIHwgICAyICsKIHNy Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVUaWRzY2FuLmMgICAgICAgICAgICB8ICAgMiArCiBzcmMv YmFja2VuZC9leGVjdXRvci9ub2RlVW5pcXVlLmMgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNr ZW5kL2V4ZWN1dG9yL3NwaS5jICAgICAgICAgICAgICAgICAgICB8ICA0NCArKy0KIHNyYy9iYWNr ZW5kL25vZGVzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2Vu ZC9ub2Rlcy9nZW5fbm9kZV9zdXBwb3J0LnBsICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL3NldHJlZnMuYyAgICAgICAgICB8ICAgNSArCiBzcmMvYmFja2VuZC9yZXdy aXRlL3Jld3JpdGVIYW5kbGVyLmMgICAgICAgICAgfCAgIDcgKy0KIHNyYy9iYWNrZW5kL3N0b3Jh Z2UvbG1nci9sbWdyLmMgICAgICAgICAgICAgICB8ICA0NSArKysKIHNyYy9iYWNrZW5kL3Rjb3Av cG9zdGdyZXMuYyAgICAgICAgICAgICAgICAgICB8ICAgOCArCiBzcmMvYmFja2VuZC90Y29wL3Bx dWVyeS5jICAgICAgICAgICAgICAgICAgICAgfCAyOTEgKysrKysrKysrLS0tLS0tLS0tCiBzcmMv YmFja2VuZC91dGlscy9jYWNoZS9sc3lzY2FjaGUuYyAgICAgICAgICAgfCAgMjEgKysKIHNyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jICAgICAgICAgICB8IDEzNCArKystLS0tLQog c3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0uYyAgICAgICAgICAgIHwgICA2ICsKIHNy Yy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaCAgICAgICAgICAgICAgICB8ICAgNyArLQogc3Jj L2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaCAgICAgICAgICAgICAgIHwgICA1ICsKIHNyYy9p bmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggICAgICAgICAgICAgICB8ICAxMiArCiBzcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1 ZGUvbm9kZXMvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRl L25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS9u b2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvc3Rv cmFnZS9sbWdyLmggICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxz L2xzeXNjYWNoZS5oICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS91dGlscy9w bGFuY2FjaGUuaCAgICAgICAgICAgICAgICAgfCAgMTUgKwogc3JjL2luY2x1ZGUvdXRpbHMvcG9y dGFsLmggICAgICAgICAgICAgICAgICAgIHwgICA0ICsKIHNyYy90ZXN0L21vZHVsZXMvZGVsYXlf ZXhlY3V0aW9uL01ha2VmaWxlICAgICB8ICAgMyArLQogLi4uL21vZHVsZXMvZGVsYXlfZXhlY3V0 aW9uL2RlbGF5X2V4ZWN1dGlvbi5jIHwgIDYzICsrKy0KIC4uLi9leHBlY3RlZC9jYWNoZWQtcGxh bi1yZXBsYW4ub3V0ICAgICAgICAgICB8ICA0MyArKysKIC4uLi9zcGVjcy9jYWNoZWQtcGxhbi1y ZXBsYW4uc3BlYyAgICAgICAgICAgICB8ICAzOSArKysKIDc2IGZpbGVzIGNoYW5nZWQsIDg0NiBp bnNlcnRpb25zKCspLCAzNDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvbW9kdWxlcy9kZWxheV9leGVjdXRpb24vZXhwZWN0ZWQvY2FjaGVkLXBsYW4tcmVwbGFuLm91 dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvZGVsYXlfZXhlY3V0aW9uL3Nw ZWNzL2NhY2hlZC1wbGFuLXJlcGxhbi5zcGVjCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jl c19mZHcvcG9zdGdyZXNfZmR3LmMgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcu YwppbmRleCBmNTkyNmFiODlkLi45M2YzZjhiNWQxIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3Rn cmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYworKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jl c19mZHcuYwpAQCAtMjY1OSw3ICsyNjU5LDExIEBAIHBvc3RncmVzQmVnaW5EaXJlY3RNb2RpZnko Rm9yZWlnblNjYW5TdGF0ZSAqbm9kZSwgaW50IGVmbGFncykKIAkvKiBHZXQgaW5mbyBhYm91dCBm b3JlaWduIHRhYmxlLiAqLwogCXJ0aW5kZXggPSBub2RlLT5yZXN1bHRSZWxJbmZvLT5yaV9SYW5n ZVRhYmxlSW5kZXg7CiAJaWYgKGZzcGxhbi0+c2Nhbi5zY2FucmVsaWQgPT0gMCkKKwl7CiAJCWRt c3RhdGUtPnJlbCA9IEV4ZWNPcGVuU2NhblJlbGF0aW9uKGVzdGF0ZSwgcnRpbmRleCwgZWZsYWdz KTsKKwkJaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0YXRlKSkKKwkJCXJldHVybjsKKwl9CiAJ ZWxzZQogCQlkbXN0YXRlLT5yZWwgPSBub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb247CiAJdGFi bGUgPSBHZXRGb3JlaWduVGFibGUoUmVsYXRpb25HZXRSZWxpZChkbXN0YXRlLT5yZWwpKTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvY29weXRvLmMKaW5kZXggODA0M2I0ZTliMS4uYTQzOGM1NDdlOCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv Y29weXRvLmMKQEAgLTU1OCw3ICs1NTgsOCBAQCBCZWdpbkNvcHlUbyhQYXJzZVN0YXRlICpwc3Rh dGUsCiAJCSgoRFJfY29weSAqKSBkZXN0KS0+Y3N0YXRlID0gY3N0YXRlOwogCiAJCS8qIENyZWF0 ZSBhIFF1ZXJ5RGVzYyByZXF1ZXN0aW5nIG5vIG91dHB1dCAqLwotCQljc3RhdGUtPnF1ZXJ5RGVz YyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBwc3RhdGUtPnBfc291cmNldGV4dCwKKwkJY3N0YXRl LT5xdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgTlVMTCwKKwkJCQkJCQkJCQkJcHN0 YXRlLT5wX3NvdXJjZXRleHQsCiAJCQkJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksCiAJCQkJ CQkJCQkJCUludmFsaWRTbmFwc2hvdCwKIAkJCQkJCQkJCQkJZGVzdCwgTlVMTCwgTlVMTCwgMCk7 CkBAIC01NjksNiArNTcwLDcgQEAgQmVnaW5Db3B5VG8oUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkg KiBFeGVjdXRvclN0YXJ0IGNvbXB1dGVzIGEgcmVzdWx0IHR1cGRlc2MgZm9yIHVzCiAJCSAqLwog CQlFeGVjdXRvclN0YXJ0KGNzdGF0ZS0+cXVlcnlEZXNjLCAwKTsKKwkJQXNzZXJ0KGNzdGF0ZS0+ cXVlcnlEZXNjLT5wbGFuX3ZhbGlkKTsKIAogCQl0dXBEZXNjID0gY3N0YXRlLT5xdWVyeURlc2Mt PnR1cERlc2M7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMu YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKaW5kZXggZDZjNmQ1MTRmMy4uYTU1 Yjg1MTU3NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCkBAIC0zMjUsNyArMzI1LDcgQEAgRXhl Y0NyZWF0ZVRhYmxlQXMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVUYWJsZUFzU3RtdCAqc3Rt dCwKIAkJVXBkYXRlQWN0aXZlU25hcHNob3RDb21tYW5kSWQoKTsKIAogCQkvKiBDcmVhdGUgYSBR dWVyeURlc2MsIHJlZGlyZWN0aW5nIG91dHB1dCB0byBvdXIgdHVwbGUgcmVjZWl2ZXIgKi8KLQkJ cXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAor CQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgTlVMTCwgcHN0YXRlLT5wX3NvdXJj ZXRleHQsCiAJCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpLCBJbnZhbGlkU25hcHNob3QsCiAJ CQkJCQkJCQlkZXN0LCBwYXJhbXMsIHF1ZXJ5RW52LCAwKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5j CmluZGV4IGZiYmYyOGNmMDYuLjhmZGM5NjZhNzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAg LTM4NCw2ICszODQsNyBAQCBFeHBsYWluT25lUXVlcnkoUXVlcnkgKnF1ZXJ5LCBpbnQgY3Vyc29y T3B0aW9ucywKIAllbHNlCiAJewogCQlQbGFubmVkU3RtdCAqcGxhbjsKKwkJUXVlcnlEZXNjICAg KnF1ZXJ5RGVzYzsKIAkJaW5zdHJfdGltZQlwbGFuc3RhcnQsCiAJCQkJCXBsYW5kdXJhdGlvbjsK IAkJQnVmZmVyVXNhZ2UgYnVmdXNhZ2Vfc3RhcnQsCkBAIC00MDYsMTIgKzQwNyw4OSBAQCBFeHBs YWluT25lUXVlcnkoUXVlcnkgKnF1ZXJ5LCBpbnQgY3Vyc29yT3B0aW9ucywKIAkJCUJ1ZmZlclVz YWdlQWNjdW1EaWZmKCZidWZ1c2FnZSwgJnBnQnVmZmVyVXNhZ2UsICZidWZ1c2FnZV9zdGFydCk7 CiAJCX0KIAorCQlxdWVyeURlc2MgPSBFeHBsYWluUXVlcnlEZXNjKHBsYW4sIE5VTEwsIHF1ZXJ5 U3RyaW5nLCBpbnRvLCBlcywKKwkJCQkJCQkJCSBwYXJhbXMsIHF1ZXJ5RW52KTsKKwkJQXNzZXJ0 KHF1ZXJ5RGVzYyk7CisKIAkJLyogcnVuIGl0IChpZiBuZWVkZWQpIGFuZCBwcm9kdWNlIG91dHB1 dCAqLwotCQlFeHBsYWluT25lUGxhbihwbGFuLCBpbnRvLCBlcywgcXVlcnlTdHJpbmcsIHBhcmFt cywgcXVlcnlFbnYsCisJCUV4cGxhaW5PbmVQbGFuKHF1ZXJ5RGVzYywgaW50bywgZXMsIHF1ZXJ5 U3RyaW5nLCBwYXJhbXMsIHF1ZXJ5RW52LAogCQkJCQkgICAmcGxhbmR1cmF0aW9uLCAoZXMtPmJ1 ZmZlcnMgPyAmYnVmdXNhZ2UgOiBOVUxMKSk7CiAJfQogfQogCisvKgorICogRXhwbGFpblF1ZXJ5 RGVzYworICoJCVNldCB1cCBRdWVyeURlc2MgZm9yIEVYUExBSU5pbmcgYSBnaXZlbiBwbGFuCisg KgorICogVGhpcyByZXR1cm5zIE5VTEwgaWYgY3BsYW4gaXMgZm91bmQgdG8gaGF2ZSBiZWVuIGlu dmFsaWRhdGVkIHNpbmNlIGl0cworICogY3JlYXRpb24uCisgKi8KK1F1ZXJ5RGVzYyAqCitFeHBs YWluUXVlcnlEZXNjKFBsYW5uZWRTdG10ICpzdG10LCBDYWNoZWRQbGFuICpjcGxhbiwKKwkJCQkg Y29uc3QgY2hhciAqcXVlcnlTdHJpbmcsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAq ZXMsCisJCQkJIFBhcmFtTGlzdEluZm8gcGFyYW1zLCBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVu dikKK3sKKwlRdWVyeURlc2MgICpxdWVyeURlc2M7CisJRGVzdFJlY2VpdmVyICpkZXN0OworCWlu dAkJCWVmbGFnczsKKwlpbnQJCQlpbnN0cnVtZW50X29wdGlvbiA9IDA7CisKKwkvKgorCSAqIE5v cm1hbGx5IHdlIGRpc2NhcmQgdGhlIHF1ZXJ5J3Mgb3V0cHV0LCBidXQgaWYgZXhwbGFpbmluZyBD UkVBVEUgVEFCTEUKKwkgKiBBUywgd2UnZCBiZXR0ZXIgdXNlIHRoZSBhcHByb3ByaWF0ZSB0dXBs ZSByZWNlaXZlci4KKwkgKi8KKwlpZiAoaW50bykKKwkJZGVzdCA9IENyZWF0ZUludG9SZWxEZXN0 UmVjZWl2ZXIoaW50byk7CisJZWxzZQorCQlkZXN0ID0gTm9uZV9SZWNlaXZlcjsKKworCWlmIChl cy0+YW5hbHl6ZSAmJiBlcy0+dGltaW5nKQorCQlpbnN0cnVtZW50X29wdGlvbiB8PSBJTlNUUlVN RU5UX1RJTUVSOworCWVsc2UgaWYgKGVzLT5hbmFseXplKQorCQlpbnN0cnVtZW50X29wdGlvbiB8 PSBJTlNUUlVNRU5UX1JPV1M7CisKKwlpZiAoZXMtPmJ1ZmZlcnMpCisJCWluc3RydW1lbnRfb3B0 aW9uIHw9IElOU1RSVU1FTlRfQlVGRkVSUzsKKwlpZiAoZXMtPndhbCkKKwkJaW5zdHJ1bWVudF9v cHRpb24gfD0gSU5TVFJVTUVOVF9XQUw7CisKKwkvKgorCSAqIFVzZSBhIHNuYXBzaG90IHdpdGgg YW4gdXBkYXRlZCBjb21tYW5kIElEIHRvIGVuc3VyZSB0aGlzIHF1ZXJ5IHNlZXMKKwkgKiByZXN1 bHRzIG9mIGFueSBwcmV2aW91c2x5IGV4ZWN1dGVkIHF1ZXJpZXMuCisJICovCisJUHVzaENvcGll ZFNuYXBzaG90KEdldEFjdGl2ZVNuYXBzaG90KCkpOworCVVwZGF0ZUFjdGl2ZVNuYXBzaG90Q29t bWFuZElkKCk7CisKKwkvKiBDcmVhdGUgYSBRdWVyeURlc2MgZm9yIHRoZSBxdWVyeSAqLworCXF1 ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhzdG10LCBjcGxhbiwgcXVlcnlTdHJpbmcsCisJCQkJ CQkJCUdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKKwkJCQkJCQkJZGVzdCwg cGFyYW1zLCBxdWVyeUVudiwgaW5zdHJ1bWVudF9vcHRpb24pOworCisJLyogU2VsZWN0IGV4ZWN1 dGlvbiBvcHRpb25zICovCisJaWYgKGVzLT5hbmFseXplKQorCQllZmxhZ3MgPSAwOwkJCQkvKiBk ZWZhdWx0IHJ1bi10by1jb21wbGV0aW9uIGZsYWdzICovCisJZWxzZQorCQllZmxhZ3MgPSBFWEVD X0ZMQUdfRVhQTEFJTl9PTkxZOworCWlmIChpbnRvKQorCQllZmxhZ3MgfD0gR2V0SW50b1JlbEVG bGFncyhpbnRvKTsKKworCS8qCisJICogQ2FsbCBFeGVjdXRvclN0YXJ0IHRvIHByZXBhcmUgdGhl IHBsYW4gZm9yIGV4ZWN1dGlvbi4gIEEgY2FjaGVkIHBsYW4KKwkgKiBtYXkgZ2V0IGludmFsaWRh dGVkIGFzIHdlJ3JlIGRvaW5nIHRoYXQuCisJICovCisJRXhlY3V0b3JTdGFydChxdWVyeURlc2Ms IGVmbGFncyk7CisJaWYgKCFxdWVyeURlc2MtPnBsYW5fdmFsaWQpCisJeworCQkvKiBDbGVhbiB1 cC4gKi8KKwkJRXhlY3V0b3JFbmQocXVlcnlEZXNjKTsKKwkJRnJlZVF1ZXJ5RGVzYyhxdWVyeURl c2MpOworCQlQb3BBY3RpdmVTbmFwc2hvdCgpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1 cm4gcXVlcnlEZXNjOworfQorCiAvKgogICogRXhwbGFpbk9uZVV0aWxpdHkgLQogICoJICBwcmlu dCBvdXQgdGhlIGV4ZWN1dGlvbiBwbGFuIGZvciBvbmUgdXRpbGl0eSBzdGF0ZW1lbnQKQEAgLTUx NSwyOSArNTkzLDE2IEBAIEV4cGxhaW5PbmVVdGlsaXR5KE5vZGUgKnV0aWxpdHlTdG10LCBJbnRv Q2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogICogdG8gY2FsbCBpdC4KICAqLwogdm9p ZAotRXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNlICpp bnRvLCBFeHBsYWluU3RhdGUgKmVzLAorRXhwbGFpbk9uZVBsYW4oUXVlcnlEZXNjICpxdWVyeURl c2MsCisJCQkgICBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCQkJICAgY29u c3QgY2hhciAqcXVlcnlTdHJpbmcsIFBhcmFtTGlzdEluZm8gcGFyYW1zLAogCQkJICAgUXVlcnlF bnZpcm9ubWVudCAqcXVlcnlFbnYsIGNvbnN0IGluc3RyX3RpbWUgKnBsYW5kdXJhdGlvbiwKIAkJ CSAgIGNvbnN0IEJ1ZmZlclVzYWdlICpidWZ1c2FnZSkKIHsKLQlEZXN0UmVjZWl2ZXIgKmRlc3Q7 Ci0JUXVlcnlEZXNjICAqcXVlcnlEZXNjOwogCWluc3RyX3RpbWUJc3RhcnR0aW1lOwogCWRvdWJs ZQkJdG90YWx0aW1lID0gMDsKLQlpbnQJCQllZmxhZ3M7Ci0JaW50CQkJaW5zdHJ1bWVudF9vcHRp b24gPSAwOwotCi0JQXNzZXJ0KHBsYW5uZWRzdG10LT5jb21tYW5kVHlwZSAhPSBDTURfVVRJTElU WSk7CiAKLQlpZiAoZXMtPmFuYWx5emUgJiYgZXMtPnRpbWluZykKLQkJaW5zdHJ1bWVudF9vcHRp b24gfD0gSU5TVFJVTUVOVF9USU1FUjsKLQllbHNlIGlmIChlcy0+YW5hbHl6ZSkKLQkJaW5zdHJ1 bWVudF9vcHRpb24gfD0gSU5TVFJVTUVOVF9ST1dTOwotCi0JaWYgKGVzLT5idWZmZXJzKQotCQlp bnN0cnVtZW50X29wdGlvbiB8PSBJTlNUUlVNRU5UX0JVRkZFUlM7Ci0JaWYgKGVzLT53YWwpCi0J CWluc3RydW1lbnRfb3B0aW9uIHw9IElOU1RSVU1FTlRfV0FMOworCUFzc2VydChxdWVyeURlc2Mt PnBsYW5uZWRzdG10LT5jb21tYW5kVHlwZSAhPSBDTURfVVRJTElUWSk7CiAKIAkvKgogCSAqIFdl IGFsd2F5cyBjb2xsZWN0IHRpbWluZyBmb3IgdGhlIGVudGlyZSBzdGF0ZW1lbnQsIGV2ZW4gd2hl biBub2RlLWxldmVsCkBAIC01NDYsMzggKzYxMSw2IEBAIEV4cGxhaW5PbmVQbGFuKFBsYW5uZWRT dG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAkg Ki8KIAlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHN0YXJ0dGltZSk7CiAKLQkvKgotCSAqIFVzZSBh IHNuYXBzaG90IHdpdGggYW4gdXBkYXRlZCBjb21tYW5kIElEIHRvIGVuc3VyZSB0aGlzIHF1ZXJ5 IHNlZXMKLQkgKiByZXN1bHRzIG9mIGFueSBwcmV2aW91c2x5IGV4ZWN1dGVkIHF1ZXJpZXMuCi0J ICovCi0JUHVzaENvcGllZFNuYXBzaG90KEdldEFjdGl2ZVNuYXBzaG90KCkpOwotCVVwZGF0ZUFj dGl2ZVNuYXBzaG90Q29tbWFuZElkKCk7Ci0KLQkvKgotCSAqIE5vcm1hbGx5IHdlIGRpc2NhcmQg dGhlIHF1ZXJ5J3Mgb3V0cHV0LCBidXQgaWYgZXhwbGFpbmluZyBDUkVBVEUgVEFCTEUKLQkgKiBB Uywgd2UnZCBiZXR0ZXIgdXNlIHRoZSBhcHByb3ByaWF0ZSB0dXBsZSByZWNlaXZlci4KLQkgKi8K LQlpZiAoaW50bykKLQkJZGVzdCA9IENyZWF0ZUludG9SZWxEZXN0UmVjZWl2ZXIoaW50byk7Ci0J ZWxzZQotCQlkZXN0ID0gTm9uZV9SZWNlaXZlcjsKLQotCS8qIENyZWF0ZSBhIFF1ZXJ5RGVzYyBm b3IgdGhlIHF1ZXJ5ICovCi0JcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW5uZWRzdG10 LCBxdWVyeVN0cmluZywKLQkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBz aG90LAotCQkJCQkJCQlkZXN0LCBwYXJhbXMsIHF1ZXJ5RW52LCBpbnN0cnVtZW50X29wdGlvbik7 Ci0KLQkvKiBTZWxlY3QgZXhlY3V0aW9uIG9wdGlvbnMgKi8KLQlpZiAoZXMtPmFuYWx5emUpCi0J CWVmbGFncyA9IDA7CQkJCS8qIGRlZmF1bHQgcnVuLXRvLWNvbXBsZXRpb24gZmxhZ3MgKi8KLQll bHNlCi0JCWVmbGFncyA9IEVYRUNfRkxBR19FWFBMQUlOX09OTFk7Ci0JaWYgKGludG8pCi0JCWVm bGFncyB8PSBHZXRJbnRvUmVsRUZsYWdzKGludG8pOwotCi0JLyogY2FsbCBFeGVjdXRvclN0YXJ0 IHRvIHByZXBhcmUgdGhlIHBsYW4gZm9yIGV4ZWN1dGlvbiAqLwotCUV4ZWN1dG9yU3RhcnQocXVl cnlEZXNjLCBlZmxhZ3MpOwotCiAJLyogRXhlY3V0ZSB0aGUgcGxhbiBmb3Igc3RhdGlzdGljcyBp ZiBhc2tlZCBmb3IgKi8KIAlpZiAoZXMtPmFuYWx5emUpCiAJewpAQCAtNDg1MSw2ICs0ODg0LDE3 IEBAIEV4cGxhaW5EdW1teUdyb3VwKGNvbnN0IGNoYXIgKm9ianR5cGUsIGNvbnN0IGNoYXIgKmxh YmVsbmFtZSwgRXhwbGFpblN0YXRlICplcykKIAl9CiB9CiAKKy8qCisgKiBEaXNjYXJkIG91dHB1 dCBidWZmZXIgZm9yIGEgZnJlc2ggcmVzdGFydC4KKyAqLwordm9pZAorRXhwbGFpblJlc2V0T3V0 cHV0KEV4cGxhaW5TdGF0ZSAqZXMpCit7CisJQXNzZXJ0KGVzLT5zdHIpOworCXJlc2V0U3RyaW5n SW5mbyhlcy0+c3RyKTsKKwlFeHBsYWluQmVnaW5PdXRwdXQoZXMpOworfQorCiAvKgogICogRW1p dCB0aGUgc3RhcnQtb2Ytb3V0cHV0IGJvaWxlcnBsYXRlLgogICoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5z aW9uLmMKaW5kZXggYjE1MDljYzUwNS4uZTJmNzljYzdhNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5z aW9uLmMKQEAgLTc4MCw2ICs3ODAsNyBAQCBleGVjdXRlX3NxbF9zdHJpbmcoY29uc3QgY2hhciAq c3FsKQogCQkJCVF1ZXJ5RGVzYyAgKnFkZXNjOwogCiAJCQkJcWRlc2MgPSBDcmVhdGVRdWVyeURl c2Moc3RtdCwKKwkJCQkJCQkJCQlOVUxMLAogCQkJCQkJCQkJCXNxbCwKIAkJCQkJCQkJCQlHZXRB Y3RpdmVTbmFwc2hvdCgpLCBOVUxMLAogCQkJCQkJCQkJCWRlc3QsIE5VTEwsIE5VTEwsIDApOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvbWF0dmlldy5jCmluZGV4IGZiMzBkMjU5NWMuLjE3ZDQ1N2NjZmIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9tYXR2aWV3LmMKQEAgLTQwOSw3ICs0MDksNyBAQCByZWZyZXNoX21hdHZpZXdfZGF0YWZp bGwoRGVzdFJlY2VpdmVyICpkZXN0LCBRdWVyeSAqcXVlcnksCiAJVXBkYXRlQWN0aXZlU25hcHNo b3RDb21tYW5kSWQoKTsKIAogCS8qIENyZWF0ZSBhIFF1ZXJ5RGVzYywgcmVkaXJlY3Rpbmcgb3V0 cHV0IHRvIG91ciB0dXBsZSByZWNlaXZlciAqLwotCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVz YyhwbGFuLCBxdWVyeVN0cmluZywKKwlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwg TlVMTCwgcXVlcnlTdHJpbmcsCiAJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRT bmFwc2hvdCwKIAkJCQkJCQkJZGVzdCwgTlVMTCwgTlVMTCwgMCk7CiAKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3BvcnRhbGNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3Bv cnRhbGNtZHMuYwppbmRleCA4YTNjZjk4Y2NlLi4zYzM0YWI0MzUxIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9wb3J0YWxjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv cG9ydGFsY21kcy5jCkBAIC0xNDYsNiArMTQ2LDcgQEAgUGVyZm9ybUN1cnNvck9wZW4oUGFyc2VT dGF0ZSAqcHN0YXRlLCBEZWNsYXJlQ3Vyc29yU3RtdCAqY3N0bXQsIFBhcmFtTGlzdEluZm8gcGEK IAlQb3J0YWxTdGFydChwb3J0YWwsIHBhcmFtcywgMCwgR2V0QWN0aXZlU25hcHNob3QoKSk7CiAK IAlBc3NlcnQocG9ydGFsLT5zdHJhdGVneSA9PSBQT1JUQUxfT05FX1NFTEVDVCk7CisJQXNzZXJ0 KHBvcnRhbC0+cGxhbl92YWxpZCk7CiAKIAkvKgogCSAqIFdlJ3JlIGRvbmU7IHRoZSBxdWVyeSB3 b24ndCBhY3R1YWxseSBiZSBydW4gdW50aWwgUGVyZm9ybVBvcnRhbEZldGNoIGlzCkBAIC0yNDks NiArMjUwLDE3IEBAIFBlcmZvcm1Qb3J0YWxDbG9zZShjb25zdCBjaGFyICpuYW1lKQogCVBvcnRh bERyb3AocG9ydGFsLCBmYWxzZSk7CiB9CiAKKy8qCisgKiBSZWxlYXNlIGEgcG9ydGFsJ3MgUXVl cnlEZXNjLgorICovCit2b2lkCitQb3J0YWxRdWVyeUZpbmlzaChRdWVyeURlc2MgKnF1ZXJ5RGVz YykKK3sKKwlFeGVjdXRvckZpbmlzaChxdWVyeURlc2MpOworCUV4ZWN1dG9yRW5kKHF1ZXJ5RGVz Yyk7CisJRnJlZVF1ZXJ5RGVzYyhxdWVyeURlc2MpOworfQorCiAvKgogICogUG9ydGFsQ2xlYW51 cAogICoKQEAgLTI5NSw5ICszMDcsNyBAQCBQb3J0YWxDbGVhbnVwKFBvcnRhbCBwb3J0YWwpCiAJ CQlpZiAocG9ydGFsLT5yZXNvd25lcikKIAkJCQlDdXJyZW50UmVzb3VyY2VPd25lciA9IHBvcnRh bC0+cmVzb3duZXI7CiAKLQkJCUV4ZWN1dG9yRmluaXNoKHF1ZXJ5RGVzYyk7Ci0JCQlFeGVjdXRv ckVuZChxdWVyeURlc2MpOwotCQkJRnJlZVF1ZXJ5RGVzYyhxdWVyeURlc2MpOworCQkJUG9ydGFs UXVlcnlGaW5pc2gocXVlcnlEZXNjKTsKIAogCQkJQ3VycmVudFJlc291cmNlT3duZXIgPSBzYXZl UmVzb3VyY2VPd25lcjsKIAkJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJl cGFyZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCmluZGV4IDE4ZjcwMzE5ZmMu LjMwOTk1MzZhNTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMKQEAgLTE4Myw2ICsxODMsNyBAQCBF eGVjdXRlUXVlcnkoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQlwYXJhbUxJID0gRXZhbHVhdGVQYXJh bXMocHN0YXRlLCBlbnRyeSwgc3RtdC0+cGFyYW1zLCBlc3RhdGUpOwogCX0KIAorcmVwbGFuOgog CS8qIENyZWF0ZSBhIG5ldyBwb3J0YWwgdG8gcnVuIHRoZSBxdWVyeSBpbiAqLwogCXBvcnRhbCA9 IENyZWF0ZU5ld1BvcnRhbCgpOwogCS8qIERvbid0IGRpc3BsYXkgdGhlIHBvcnRhbCBpbiBwZ19j dXJzb3JzLCBpdCBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgKi8KQEAgLTI1MSwxMCArMjUyLDE3 IEBAIEV4ZWN1dGVRdWVyeShQYXJzZVN0YXRlICpwc3RhdGUsCiAJfQogCiAJLyoKLQkgKiBSdW4g dGhlIHBvcnRhbCBhcyBhcHByb3ByaWF0ZS4KKwkgKiBSdW4gdGhlIHBvcnRhbCBhcyBhcHByb3By aWF0ZS4gIElmIHRoZSBwb3J0YWwgY29udGFpbnMgYSBjYWNoZWQgcGxhbiwKKwkgKiBpdCBtdXN0 IGJlIHJlY3JlYXRlZCBpZiAqcmVwbGFuIGlzIHNldC4KIAkgKi8KIAlQb3J0YWxTdGFydChwb3J0 YWwsIHBhcmFtTEksIGVmbGFncywgR2V0QWN0aXZlU25hcHNob3QoKSk7CiAKKwlpZiAoIXBvcnRh bC0+cGxhbl92YWxpZCkKKwl7CisJCVBvcnRhbERyb3AocG9ydGFsLCBmYWxzZSk7CisJCWdvdG8g cmVwbGFuOworCX0KKwogCSh2b2lkKSBQb3J0YWxSdW4ocG9ydGFsLCBjb3VudCwgZmFsc2UsIHRy dWUsIGRlc3QsIGRlc3QsIHFjKTsKIAogCVBvcnRhbERyb3AocG9ydGFsLCBmYWxzZSk7CkBAIC01 NzQsNyArNTgyLDcgQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShFeGVjdXRlU3RtdCAqZXhlY3N0bXQs IEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiB7CiAJUHJlcGFyZWRTdGF0ZW1l bnQgKmVudHJ5OwogCWNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZzsKLQlDYWNoZWRQbGFuICpjcGxh bjsKKwlDYWNoZWRQbGFuICpjcGxhbiA9IE5VTEw7CiAJTGlzdAkgICAqcGxhbl9saXN0OwogCUxp c3RDZWxsICAgKnA7CiAJUGFyYW1MaXN0SW5mbyBwYXJhbUxJID0gTlVMTDsKQEAgLTYxOCw2ICs2 MjYsNyBAQCBFeHBsYWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10ICpleGVjc3RtdCwgSW50b0Ns YXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAl9CiAKIAkvKiBSZXBsYW4gaWYgbmVlZGVk LCBhbmQgYWNxdWlyZSBhIHRyYW5zaWVudCByZWZjb3VudCAqLworcmVwbGFuOgogCWNwbGFuID0g R2V0Q2FjaGVkUGxhbihlbnRyeS0+cGxhbnNvdXJjZSwgcGFyYW1MSSwKIAkJCQkJCSAgQ3VycmVu dFJlc291cmNlT3duZXIsIHF1ZXJ5RW52KTsKIApAQCAtNjM5LDggKzY0OCwyMSBAQCBFeHBsYWlu RXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10ICpleGVjc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhw bGFpblN0YXRlICplcywKIAkJUGxhbm5lZFN0bXQgKnBzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5l ZFN0bXQsIHApOwogCiAJCWlmIChwc3RtdC0+Y29tbWFuZFR5cGUgIT0gQ01EX1VUSUxJVFkpCi0J CQlFeHBsYWluT25lUGxhbihwc3RtdCwgaW50bywgZXMsIHF1ZXJ5X3N0cmluZywgcGFyYW1MSSwg cXVlcnlFbnYsCi0JCQkJCQkgICAmcGxhbmR1cmF0aW9uLCAoZXMtPmJ1ZmZlcnMgPyAmYnVmdXNh Z2UgOiBOVUxMKSk7CisJCXsKKwkJCVF1ZXJ5RGVzYyAqcXVlcnlEZXNjOworCisJCQlxdWVyeURl c2MgPSBFeHBsYWluUXVlcnlEZXNjKHBzdG10LCBjcGxhbiwgcXVlcnlTdHJpbmcsCisJCQkJCQkJ CQkJIGludG8sIGVzLCBwYXJhbUxJLCBxdWVyeUVudik7CisJCQlpZiAocXVlcnlEZXNjID09IE5V TEwpCisJCQl7CisJCQkJRXhwbGFpblJlc2V0T3V0cHV0KGVzKTsKKwkJCQlSZWxlYXNlQ2FjaGVk UGxhbihjcGxhbiwgQ3VycmVudFJlc291cmNlT3duZXIpOworCQkJCWdvdG8gcmVwbGFuOworCQkJ fQorCQkJRXhwbGFpbk9uZVBsYW4ocXVlcnlEZXNjLCBpbnRvLCBlcywgcXVlcnlfc3RyaW5nLCBw YXJhbUxJLAorCQkJCQkJICAgcXVlcnlFbnYsICZwbGFuZHVyYXRpb24sCisJCQkJCQkgICAoZXMt PmJ1ZmZlcnMgPyAmYnVmdXNhZ2UgOiBOVUxMKSk7CisJCX0KIAkJZWxzZQogCQkJRXhwbGFpbk9u ZVV0aWxpdHkocHN0bXQtPnV0aWxpdHlTdG10LCBpbnRvLCBlcywgcXVlcnlfc3RyaW5nLAogCQkJ CQkJCSAgcGFyYW1MSSwgcXVlcnlFbnYpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY01haW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKaW5kZXggYTUx MTViOWMxZi4uZDk3YzlkZTQwOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y01haW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCkBAIC0xMjYsMTEg KzEyNiwyNyBAQCBzdGF0aWMgdm9pZCBFdmFsUGxhblF1YWxTdGFydChFUFFTdGF0ZSAqZXBxc3Rh dGUsIFBsYW4gKnBsYW5UcmVlKTsKICAqIGdldCBjb250cm9sIHdoZW4gRXhlY3V0b3JTdGFydCBp cyBjYWxsZWQuICBTdWNoIGEgcGx1Z2luIHdvdWxkCiAgKiBub3JtYWxseSBjYWxsIHN0YW5kYXJk X0V4ZWN1dG9yU3RhcnQoKS4KICAqCisgKiBOb3JtYWxseSwgdGhlIHBsYW4gdHJlZSBnaXZlbiBp biBxdWVyeURlc2MtPnBsYW5uZWRzdG10IGlzIGtub3duIHRvIGJlCisgKiB2YWxpZCBpbiB0aGF0 ICphbGwqIHJlbGF0aW9ucyBjb250YWluZWQgaW4gcGxhbm5lZHN0bXQtPnJlbGF0aW9uT2lkcyBo YXZlCisgKiBhbHJlYWR5IGJlZW4gbG9ja2VkLiAgVGhhdCBtYXkgbm90IGJlIHRoZSBjYXNlIGhv d2V2ZXIgaWYgdGhlIHBsYW5uZWRzdG10CisgKiBjb21lcyBmcm9tIGEgQ2FjaGVkUGxhbiwgb25l IGdpdmVuIGluIHF1ZXJ5RGVzYy0+Y3BsYW4uICBMb2NrcyBuZWNlc3NhcnkKKyAqIHRvIHZhbGlk YXRlIHN1Y2ggYSBwbGFuIHRyZWUgbXVzdCBiZSB0YWtlbiB3aGVuIGluaXRpYWxpemluZyB0aGUg cGxhbiB0cmVlCisgKiBpbiBJbml0UGxhbigpLCBzbyB0aGlzIHNldHMgdGhlIGVmbGFnIEVYRUNf RkxBR19HRVRfTE9DS1MuICBJZiB0aGUKKyAqIENhY2hlZFBsYW4gZ2V0cyBpbnZhbGlkYXRlZCBh cyB0aGVzZSBsb2NrcyBhcmUgdGFrZW4sIEluaXRQbGFuIHJldHVybnMKKyAqIHdpdGhvdXQgc2V0 dGluZyBxdWVyeURlc2MtPnBsYW5zdGF0ZSBhbmQgc2V0cyBxdWVyeURlc2MtPnBsYW5fdmFsaWQg dG8KKyAqIGZhbHNlLiAgQ2FsbGVyIG11c3QgcmV0cnkgdGhlIGV4ZWN1dGlvbiB3aXRoIGEgZnJl c2hseSBjcmVhdGVkIENhY2hlZFBsYW4KKyAqIGluIHRoYXQgY2FzZS4KICAqIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAq Lwogdm9pZAogRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncykK IHsKKwkvKiBUYWtlIGxvY2tzIGlmIHRoZSBwbGFuIHRyZWUgY29tZXMgZnJvbSBhIENhY2hlZFBs YW4uICovCisJQXNzZXJ0KHF1ZXJ5RGVzYy0+Y3BsYW4gPT0gTlVMTCB8fAorCQkgICBDYWNoZWRQ bGFuU3RpbGxWYWxpZChxdWVyeURlc2MtPmNwbGFuKSk7CisJaWYgKHF1ZXJ5RGVzYy0+Y3BsYW4p CisJCWVmbGFncyB8PSBFWEVDX0ZMQUdfR0VUX0xPQ0tTOworCiAJLyoKIAkgKiBJbiBzb21lIGNh c2VzIChlLmcuIGFuIEVYRUNVVEUgc3RhdGVtZW50KSBhIHF1ZXJ5IGV4ZWN1dGlvbiB3aWxsIHNr aXAKIAkgKiBwYXJzZSBhbmFseXNpcywgd2hpY2ggbWVhbnMgdGhhdCB0aGUgcXVlcnlfaWQgd29u J3QgYmUgcmVwb3J0ZWQuICBOb3RlCkBAIC01ODIsNiArNTk4LDE2IEBAIEV4ZWNDaGVja1Blcm1p c3Npb25zKExpc3QgKnJhbmdlVGFibGUsIExpc3QgKnJ0ZXBlcm1pbmZvcywKIAkJUlRFUGVybWlz c2lvbkluZm8gKnBlcm1pbmZvID0gbGZpcnN0X25vZGUoUlRFUGVybWlzc2lvbkluZm8sIGwpOwog CiAJCUFzc2VydChPaWRJc1ZhbGlkKHBlcm1pbmZvLT5yZWxpZCkpOworCisJCS8qCisJCSAqIFJl bGF0aW9ucyB3aG9zZSBwZXJtaXNzaW9ucyBuZWVkIHRvIGJlIGNoZWNrZWQgbXVzdCBhbHJlYWR5 IGhhdmUKKwkJICogYmVlbiBsb2NrZWQgYnkgdGhlIHBhcnNlciBvciBieSBBY3F1aXJlUGxhbm5l ckxvY2tzKCkgaWYgYQorCQkgKiBjYWNoZWQgcGxhbiBpcyBiZWluZyBleGVjdXRlZC4KKwkJICog WFhYIHNob3VsZG4ndCB3ZSBza2lwIGNhbGxpbmcgRXhlY0NoZWNrUGVybWlzc2lvbnMgZnJvbSBJ bml0UGxhbgorCQkgKiBpbiBhIHBhcmFsbGVsIHdvcmtlcj8KKwkJICovCisJCUFzc2VydChDaGVj a1JlbExvY2tlZEJ5TWUocGVybWluZm8tPnJlbGlkLCBBY2Nlc3NTaGFyZUxvY2ssIHRydWUpIHx8 CisJCQkgICBJc1BhcmFsbGVsV29ya2VyKCkpOwogCQlyZXN1bHQgPSBFeGVjQ2hlY2tPbmVSZWxQ ZXJtcyhwZXJtaW5mbyk7CiAJCWlmICghcmVzdWx0KQogCQl7CkBAIC03ODUsMTIgKzgxMSw0MyBA QCBFeGVjQ2hlY2tYYWN0UmVhZE9ubHkoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10KQogCQlQcmV2 ZW50Q29tbWFuZElmUGFyYWxsZWxNb2RlKENyZWF0ZUNvbW1hbmROYW1lKChOb2RlICopIHBsYW5u ZWRzdG10KSk7CiB9CiAKKy8qCisgKiBMb2NrIHZpZXcgcmVsYXRpb25zIGluIGEgZ2l2ZW4gcXVl cnkncyByYW5nZSB0YWJsZS4KKyAqLworc3RhdGljIHZvaWQKK0V4ZWNMb2NrVmlld1JlbGF0aW9u cyhMaXN0ICp2aWV3UmVsYXRpb25zLCBFU3RhdGUgKmVzdGF0ZSwgYm9vbCBhY3F1aXJlKQorewor CUxpc3RDZWxsICpsYzsKKworCWZvcmVhY2gobGMsIHZpZXdSZWxhdGlvbnMpCisJeworCQlJbmRl eAlydGkgPSBsZmlyc3RfaW50KGxjKTsKKwkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gZXhlY19ydF9m ZXRjaChydGksIGVzdGF0ZSk7CisKKwkJQXNzZXJ0KE9pZElzVmFsaWQocnRlLT5yZWxpZCkpOwor CQlBc3NlcnQocnRlLT5yZWxraW5kID09IFJFTEtJTkRfVklFVyk7CisJCUFzc2VydChydGUtPnJl bGxvY2ttb2RlICE9IE5vTG9jayk7CisKKwkJaWYgKGFjcXVpcmUpCisJCQlMb2NrUmVsYXRpb25P aWQocnRlLT5yZWxpZCwgcnRlLT5yZWxsb2NrbW9kZSk7CisJCWVsc2UKKwkJCVVubG9ja1JlbGF0 aW9uT2lkKHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOworCX0KK30KIAogLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogICoJCUluaXRQbGFuCiAgKgogICoJCUluaXRpYWxpemVzIHRoZSBxdWVyeSBwbGFuOiBvcGVu IGZpbGVzLCBhbGxvY2F0ZSBzdG9yYWdlCiAgKgkJYW5kIHN0YXJ0IHVwIHRoZSBydWxlIG1hbmFn ZXIKKyAqCisgKgkJSWYgcXVlcnlEZXNjIGNvbnRhaW5zIGEgQ2FjaGVkUGxhbiwgdGhpcyB0YWtl cyBsb2NrcyBvbiByZWxhdGlvbnMuCisgKgkJSWYgYW55IG9mIHRob3NlIHJlbGF0aW9ucyBoYXZl IHVuZGVyZ29uZSBjb25jdXJyZW50IHNjaGVtYSBjaGFuZ2VzCisgKgkJYmV0d2VlbiBzdWNjZXNz ZnVsbHkgcGVyZm9ybWluZyBSZXZhbGlkYXRlQ2FjaGVkUXVlcnkoKSBvbiB0aGUKKyAqCQljb250 YWluaW5nIENhY2hlZFBsYW5Tb3VyY2UgYW5kIGhlcmUsIGxvY2tpbmcgdGhvc2UgcmVsYXRpb25z IHdvdWxkCisgKgkJaW52YWxpZGF0ZSB0aGUgQ2FjaGVkUGxhbiBieSB3YXkgb2YgUGxhbkNhY2hl UmVsQ2FsbGJhY2soKS4gIEluIHRoYXQKKyAqCQljYXNlLCBxdWVyeURlc2MtPnBsYW5fdmFsaWQg d291bGQgYmUgc2V0IHRvIGZhbHNlIHRvIHRlbGwgdGhlIGNhbGxlcgorICoJCXRvIHJldHJ5IGFm dGVyIGNyZWF0aW5nIGEgbmV3IENhY2hlZFBsYW4uCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHN0YXRpYyB2 b2lkCkBAIC04MDcsMTcgKzg2NCwyMSBAQCBJbml0UGxhbihRdWVyeURlc2MgKnF1ZXJ5RGVzYywg aW50IGVmbGFncykKIAlpbnQJCQlpOwogCiAJLyoKLQkgKiBEbyBwZXJtaXNzaW9ucyBjaGVja3Mg YW5kIHNhdmUgdGhlIGxpc3QgZm9yIGxhdGVyIHVzZS4KKwkgKiBpbml0aWFsaXplIHRoZSBub2Rl J3MgZXhlY3V0aW9uIHN0YXRlCiAJICovCi0JRXhlY0NoZWNrUGVybWlzc2lvbnMocmFuZ2VUYWJs ZSwgcGxhbm5lZHN0bXQtPnBlcm1JbmZvcywgdHJ1ZSk7Ci0JZXN0YXRlLT5lc19ydGVwZXJtaW5m b3MgPSBwbGFubmVkc3RtdC0+cGVybUluZm9zOworCUV4ZWNJbml0UmFuZ2VUYWJsZShlc3RhdGUs IHJhbmdlVGFibGUpOworCisJaWYgKGVmbGFncyAmIEVYRUNfRkxBR19HRVRfTE9DS1MpCisJCUV4 ZWNMb2NrVmlld1JlbGF0aW9ucyhwbGFubmVkc3RtdC0+dmlld1JlbGF0aW9ucywgZXN0YXRlLCB0 cnVlKTsKIAogCS8qCi0JICogaW5pdGlhbGl6ZSB0aGUgbm9kZSdzIGV4ZWN1dGlvbiBzdGF0ZQor CSAqIERvIHBlcm1pc3Npb25zIGNoZWNrcyBhbmQgc2F2ZSB0aGUgbGlzdCBmb3IgbGF0ZXIgdXNl LgogCSAqLwotCUV4ZWNJbml0UmFuZ2VUYWJsZShlc3RhdGUsIHJhbmdlVGFibGUpOworCUV4ZWND aGVja1Blcm1pc3Npb25zKHJhbmdlVGFibGUsIHBsYW5uZWRzdG10LT5wZXJtSW5mb3MsIHRydWUp OworCWVzdGF0ZS0+ZXNfcnRlcGVybWluZm9zID0gcGxhbm5lZHN0bXQtPnBlcm1JbmZvczsKIAog CWVzdGF0ZS0+ZXNfcGxhbm5lZHN0bXQgPSBwbGFubmVkc3RtdDsKKwllc3RhdGUtPmVzX2NhY2hl ZHBsYW4gPSBxdWVyeURlc2MtPmNwbGFuOwogCWVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9pbmZvcyA9 IHBsYW5uZWRzdG10LT5wYXJ0UHJ1bmVJbmZvczsKIAogCS8qCkBAIC04NTAsNiArOTExLDggQEAg SW5pdFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpCiAJCQkJY2FzZSBST1df TUFSS19LRVlTSEFSRToKIAkJCQljYXNlIFJPV19NQVJLX1JFRkVSRU5DRToKIAkJCQkJcmVsYXRp b24gPSBFeGVjR2V0UmFuZ2VUYWJsZVJlbGF0aW9uKGVzdGF0ZSwgcmMtPnJ0aSk7CisJCQkJCWlm ICghRXhlY1BsYW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJCQkJCQlnb3RvIGZhaWxlZDsKIAkJCQkJ YnJlYWs7CiAJCQkJY2FzZSBST1dfTUFSS19DT1BZOgogCQkJCQkvKiBubyBwaHlzaWNhbCB0YWJs ZSBhY2Nlc3MgaXMgcmVxdWlyZWQgKi8KQEAgLTkxNyw2ICs5ODAsOCBAQCBJbml0UGxhbihRdWVy eURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncykKIAkJCXNwX2VmbGFncyB8PSBFWEVDX0ZMQUdf UkVXSU5EOwogCiAJCXN1YnBsYW5zdGF0ZSA9IEV4ZWNJbml0Tm9kZShzdWJwbGFuLCBlc3RhdGUs IHNwX2VmbGFncyk7CisJCWlmICghRXhlY1BsYW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJCQlnb3Rv IGZhaWxlZDsKIAogCQllc3RhdGUtPmVzX3N1YnBsYW5zdGF0ZXMgPSBsYXBwZW5kKGVzdGF0ZS0+ ZXNfc3VicGxhbnN0YXRlcywKIAkJCQkJCQkJCQkgICBzdWJwbGFuc3RhdGUpOwpAQCAtOTMwLDYg Kzk5NSw4IEBAIEluaXRQbGFuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogCSAq IHByb2Nlc3NpbmcgdHVwbGVzLgogCSAqLwogCXBsYW5zdGF0ZSA9IEV4ZWNJbml0Tm9kZShwbGFu LCBlc3RhdGUsIGVmbGFncyk7CisJaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0YXRlKSkKKwkJ Z290byBmYWlsZWQ7CiAKIAkvKgogCSAqIEdldCB0aGUgdHVwbGUgZGVzY3JpcHRvciBkZXNjcmli aW5nIHRoZSB0eXBlIG9mIHR1cGxlcyB0byByZXR1cm4uCkBAIC05NzMsNiArMTA0MCwxOSBAQCBJ bml0UGxhbihRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncykKIAogCXF1ZXJ5RGVzYy0+ dHVwRGVzYyA9IHR1cFR5cGU7CiAJcXVlcnlEZXNjLT5wbGFuc3RhdGUgPSBwbGFuc3RhdGU7CisJ cXVlcnlEZXNjLT5wbGFuX3ZhbGlkID0gdHJ1ZTsKKwlyZXR1cm47CisKK2ZhaWxlZDoKKwkvKgor CSAqIFBsYW4gaW5pdGlhbGl6YXRpb24gZmFpbGVkLiAgTWFyayBRdWVyeURlc2MgYXMgc3VjaCBh bmQgcmVsZWFzZSB1c2VsZXNzCisJICogbG9ja3MuCisJICovCisJcXVlcnlEZXNjLT5wbGFuX3Zh bGlkID0gZmFsc2U7CisJaWYgKGVmbGFncyAmIEVYRUNfRkxBR19HRVRfTE9DS1MpCisJCUV4ZWNM b2NrVmlld1JlbGF0aW9ucyhwbGFubmVkc3RtdC0+dmlld1JlbGF0aW9ucywgZXN0YXRlLCBmYWxz ZSk7CisJLyogQWxzbyBhc2sgRXhlY0Nsb3NlUmFuZ2VUYWJsZVJlbGF0aW9ucygpIHRvIHJlbGVh c2UgbG9ja3MuICovCisJZXN0YXRlLT5lc190b3BfZWZsYWdzIHw9IEVYRUNfRkxBR19SRUxfTE9D S1M7CiB9CiAKIC8qCkBAIC0xMzg5LDcgKzE0NjksNyBAQCBFeGVjR2V0QW5jZXN0b3JSZXN1bHRS ZWxzKEVTdGF0ZSAqZXN0YXRlLCBSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvKQogCiAJCQkv KgogCQkJICogQWxsIGFuY2VzdG9ycyB1cCB0byB0aGUgcm9vdCB0YXJnZXQgcmVsYXRpb24gbXVz dCBoYXZlIGJlZW4KLQkJCSAqIGxvY2tlZCBieSB0aGUgcGxhbm5lciBvciBBY3F1aXJlRXhlY3V0 b3JMb2NrcygpLgorCQkJICogbG9ja2VkLgogCQkJICovCiAJCQlhbmNSZWwgPSB0YWJsZV9vcGVu KGFuY09pZCwgTm9Mb2NrKTsKIAkJCXJJbmZvID0gbWFrZU5vZGUoUmVzdWx0UmVsSW5mbyk7CkBA IC0xNTU4LDcgKzE2MzgsOCBAQCBFeGVjQ2xvc2VSZXN1bHRSZWxhdGlvbnMoRVN0YXRlICplc3Rh dGUpCiAvKgogICogQ2xvc2UgYWxsIHJlbGF0aW9ucyBvcGVuZWQgYnkgRXhlY0dldFJhbmdlVGFi bGVSZWxhdGlvbigpLgogICoKLSAqIFdlIGRvIG5vdCByZWxlYXNlIGFueSBsb2NrcyB3ZSBtaWdo dCBob2xkIG9uIHRob3NlIHJlbHMuCisgKiBXZSBkbyBub3QgcmVsZWFzZSBhbnkgbG9ja3Mgd2Ug bWlnaHQgaG9sZCBvbiB0aG9zZSByZWxzLCB1bmxlc3MKKyAqIHRoZSBjYWxsZXIgYXNrZWQgb3Ro ZXJ3aXNlLgogICovCiB2b2lkCiBFeGVjQ2xvc2VSYW5nZVRhYmxlUmVsYXRpb25zKEVTdGF0ZSAq ZXN0YXRlKQpAQCAtMTU2Nyw4ICsxNjQ4LDEyIEBAIEV4ZWNDbG9zZVJhbmdlVGFibGVSZWxhdGlv bnMoRVN0YXRlICplc3RhdGUpCiAKIAlmb3IgKGkgPSAwOyBpIDwgZXN0YXRlLT5lc19yYW5nZV90 YWJsZV9zaXplOyBpKyspCiAJeworCQlpbnQJCWxvY2ttb2RlID0gTm9Mb2NrOworCisJCWlmIChl c3RhdGUtPmVzX3RvcF9lZmxhZ3MgJiBFWEVDX0ZMQUdfUkVMX0xPQ0tTKQorCQkJbG9ja21vZGUg PSBleGVjX3J0X2ZldGNoKGkrMSwgZXN0YXRlKS0+cmVsbG9ja21vZGU7CiAJCWlmIChlc3RhdGUt PmVzX3JlbGF0aW9uc1tpXSkKLQkJCXRhYmxlX2Nsb3NlKGVzdGF0ZS0+ZXNfcmVsYXRpb25zW2ld LCBOb0xvY2spOworCQkJdGFibGVfY2xvc2UoZXN0YXRlLT5lc19yZWxhdGlvbnNbaV0sIGxvY2tt b2RlKTsKIAl9CiB9CiAKQEAgLTI3OTcsNyArMjg4Miw4IEBAIEV2YWxQbGFuUXVhbFN0YXJ0KEVQ UVN0YXRlICplcHFzdGF0ZSwgUGxhbiAqcGxhblRyZWUpCiAJICogQ2hpbGQgRVBRIEVTdGF0ZXMg c2hhcmUgdGhlIHBhcmVudCdzIGNvcHkgb2YgdW5jaGFuZ2luZyBzdGF0ZSBzdWNoIGFzCiAJICog dGhlIHNuYXBzaG90LCByYW5nZXRhYmxlLCBhbmQgZXh0ZXJuYWwgUGFyYW0gaW5mby4gIFRoZXkg bmVlZCB0aGVpciBvd24KIAkgKiBjb3BpZXMgb2YgbG9jYWwgc3RhdGUsIGluY2x1ZGluZyBhIHR1 cGxlIHRhYmxlLCBlc19wYXJhbV9leGVjX3ZhbHMsCi0JICogcmVzdWx0LXJlbCBpbmZvLCBldGMu CisJICogcmVzdWx0LXJlbCBpbmZvLCBldGMuICBBbHNvLCB3ZSBkb24ndCBwYXNzIHRoZSBwYXJl bnQndCBjb3B5IG9mIHRoZQorCSAqIENhY2hlZFBsYW4sIGJlY2F1c2Ugbm8gbmV3IGxvY2tzIHdp bGwgYmUgdGFrZW4gZm9yIEV2YWxQbGFuUXVhbCgpLgogCSAqLwogCXJjZXN0YXRlLT5lc19kaXJl Y3Rpb24gPSBGb3J3YXJkU2NhbkRpcmVjdGlvbjsKIAlyY2VzdGF0ZS0+ZXNfc25hcHNob3QgPSBw YXJlbnRlc3RhdGUtPmVzX3NuYXBzaG90OwpAQCAtMjg4Myw2ICsyOTY5LDcgQEAgRXZhbFBsYW5R dWFsU3RhcnQoRVBRU3RhdGUgKmVwcXN0YXRlLCBQbGFuICpwbGFuVHJlZSkKIAkJUGxhblN0YXRl ICAqc3VicGxhbnN0YXRlOwogCiAJCXN1YnBsYW5zdGF0ZSA9IEV4ZWNJbml0Tm9kZShzdWJwbGFu LCByY2VzdGF0ZSwgMCk7CisJCUFzc2VydChFeGVjUGxhblN0aWxsVmFsaWQocmNlc3RhdGUpKTsK IAkJcmNlc3RhdGUtPmVzX3N1YnBsYW5zdGF0ZXMgPSBsYXBwZW5kKHJjZXN0YXRlLT5lc19zdWJw bGFuc3RhdGVzLAogCQkJCQkJCQkJCQkgc3VicGxhbnN0YXRlKTsKIAl9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNQYXJhbGxlbC5jCmluZGV4IGFhM2YyODM0NTMuLmZlMWQxNzM1MDEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCkBAIC0xMjQ5LDggKzEyNDksMTMgQEAgRXhlY1BhcmFsbGVs R2V0UXVlcnlEZXNjKHNobV90b2MgKnRvYywgRGVzdFJlY2VpdmVyICpyZWNlaXZlciwKIAlwYXJh bXNwYWNlID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlfUEFSQU1MSVNUSU5GTywg ZmFsc2UpOwogCXBhcmFtTEkgPSBSZXN0b3JlUGFyYW1MaXN0KCZwYXJhbXNwYWNlKTsKIAotCS8q IENyZWF0ZSBhIFF1ZXJ5RGVzYyBmb3IgdGhlIHF1ZXJ5LiAqLworCS8qCisJICogQ3JlYXRlIGEg UXVlcnlEZXNjIGZvciB0aGUgcXVlcnkuICBOb3RlIHRoYXQgbm8gQ2FjaGVkUGxhbiBpcyBhdmFp bGFibGUKKwkgKiBoZXJlIGV2ZW4gaWYgdGhlIGNvbnRhaW5pbmcgcGxhbiB0cmVlIG1heSBoYXZl IGNvbWUgZnJvbSBvbmUgaW4gdGhlCisJICogbGVhZGVyLgorCSAqLwogCXJldHVybiBDcmVhdGVR dWVyeURlc2MocHN0bXQsCisJCQkJCQkgICBOVUxMLAogCQkJCQkJICAgcXVlcnlTdHJpbmcsCiAJ CQkJCQkgICBHZXRBY3RpdmVTbmFwc2hvdCgpLCBJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkgICBy ZWNlaXZlciwgcGFyYW1MSSwgTlVMTCwgaW5zdHJ1bWVudF9vcHRpb25zKTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNQYXJ0aXRpb24uYwppbmRleCA2NTFhZDI0ZmMxLi5hMWJiMWFjNTBmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKKysrIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCkBAIC0xODEzLDYgKzE4MTMsOCBAQCBFeGVjSW5p dFBhcnRpdGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAKIAkvKiBDcmVhdGUgdGhl IHdvcmtpbmcgZGF0YSBzdHJ1Y3R1cmUgZm9yIHBydW5pbmcgKi8KIAlwcnVuZXN0YXRlID0gQ3Jl YXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShwbGFuc3RhdGUsIHBydW5laW5mbyk7CisJaWYgKCFFeGVj UGxhblN0aWxsVmFsaWQoZXN0YXRlKSkKKwkJcmV0dXJuIE5VTEw7CiAKIAkvKgogCSAqIFBlcmZv cm0gYW4gaW5pdGlhbCBwYXJ0aXRpb24gcHJ1bmUgcGFzcywgaWYgcmVxdWlyZWQuCkBAIC0xOTM5 LDYgKzE5NDEsOCBAQCBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0 YXRlLCBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykKIAkJCSAqIGR1cmF0aW9uIG9mIHRo aXMgZXhlY3V0b3IgcnVuLgogCQkJICovCiAJCQlwYXJ0cmVsID0gRXhlY0dldFJhbmdlVGFibGVS ZWxhdGlvbihlc3RhdGUsIHBpbmZvLT5ydGluZGV4KTsKKwkJCWlmICghRXhlY1BsYW5TdGlsbFZh bGlkKGVzdGF0ZSkpCisJCQkJcmV0dXJuIE5VTEw7CiAJCQlwYXJ0a2V5ID0gUmVsYXRpb25HZXRQ YXJ0aXRpb25LZXkocGFydHJlbCk7CiAJCQlwYXJ0ZGVzYyA9IFBhcnRpdGlvbkRpcmVjdG9yeUxv b2t1cChlc3RhdGUtPmVzX3BhcnRpdGlvbl9kaXJlY3RvcnksCiAJCQkJCQkJCQkJCQlwYXJ0cmVs KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMKaW5kZXggNGQyODhiYzhkNC4uYmQwYzJj YmE5MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMKQEAgLTM4OCw2ICszODgsOSBA QCBFeGVjSW5pdE5vZGUoUGxhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJ CQlicmVhazsKIAl9CiAKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQlyZXR1 cm4gTlVMTDsKKwogCUV4ZWNTZXRFeGVjUHJvY05vZGUocmVzdWx0LCByZXN1bHQtPkV4ZWNQcm9j Tm9kZSk7CiAKIAkvKgpAQCAtNDAyLDYgKzQwNSw4IEBAIEV4ZWNJbml0Tm9kZShQbGFuICpub2Rl LCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAogCQlBc3NlcnQoSXNBKHN1YnBsYW4sIFN1 YlBsYW4pKTsKIAkJc3N0YXRlID0gRXhlY0luaXRTdWJQbGFuKHN1YnBsYW4sIHJlc3VsdCk7CisJ CWlmICghRXhlY1BsYW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJCQlyZXR1cm4gTlVMTDsKIAkJc3Vi cHMgPSBsYXBwZW5kKHN1YnBzLCBzc3RhdGUpOwogCX0KIAlyZXN1bHQtPmluaXRQbGFuID0gc3Vi cHM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVXRpbHMuYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jCmluZGV4IGMzM2EzYzBiZWMuLmQ1YmQyNjg1MTQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jCisrKyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jCkBAIC04MDAsNyArODAwLDggQEAgRXhlY0dldFJh bmdlVGFibGVSZWxhdGlvbihFU3RhdGUgKmVzdGF0ZSwgSW5kZXggcnRpKQogCiAJCUFzc2VydChy dGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OKTsKIAotCQlpZiAoIUlzUGFyYWxsZWxXb3JrZXIo KSkKKwkJaWYgKCFJc1BhcmFsbGVsV29ya2VyKCkgJiYKKwkJCShlc3RhdGUtPmVzX3RvcF9lZmxh Z3MgJiBFWEVDX0ZMQUdfR0VUX0xPQ0tTKSA9PSAwKQogCQl7CiAJCQkvKgogCQkJICogSW4gYSBu b3JtYWwgcXVlcnksIHdlIHNob3VsZCBhbHJlYWR5IGhhdmUgdGhlIGFwcHJvcHJpYXRlIGxvY2ss CkBAIC04NDQsNiArODQ1LDggQEAgRXhlY0luaXRSZXN1bHRSZWxhdGlvbihFU3RhdGUgKmVzdGF0 ZSwgUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAlSZWxhdGlvbglyZXN1bHRSZWxhdGlv bkRlc2M7CiAKIAlyZXN1bHRSZWxhdGlvbkRlc2MgPSBFeGVjR2V0UmFuZ2VUYWJsZVJlbGF0aW9u KGVzdGF0ZSwgcnRpKTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQlyZXR1 cm47CiAJSW5pdFJlc3VsdFJlbEluZm8ocmVzdWx0UmVsSW5mbywKIAkJCQkJICByZXN1bHRSZWxh dGlvbkRlc2MsCiAJCQkJCSAgcnRpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZnVuY3Rpb25zLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYwppbmRleCA1MGUw NmVjNjkzLi45NDliZGZjODM3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5j dGlvbnMuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYwpAQCAtODQzLDYg Kzg0Myw3IEBAIHBvc3RxdWVsX3N0YXJ0KGV4ZWN1dGlvbl9zdGF0ZSAqZXMsIFNRTEZ1bmN0aW9u Q2FjaGVQdHIgZmNhY2hlKQogCQlkZXN0ID0gTm9uZV9SZWNlaXZlcjsKIAogCWVzLT5xZCA9IENy ZWF0ZVF1ZXJ5RGVzYyhlcy0+c3RtdCwKKwkJCQkJCQkgTlVMTCwJLyogZm1ncl9zcWwoKSBkb2Vz bid0IHVzZSBDYWNoZWRQbGFucyAqLwogCQkJCQkJCSBmY2FjaGUtPnNyYywKIAkJCQkJCQkgR2V0 QWN0aXZlU25hcHNob3QoKSwKIAkJCQkJCQkgSW52YWxpZFNuYXBzaG90LApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFnZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZUFnZy5jCmluZGV4IDIwZDIzNjk2YTUuLmY5YjY2OGRjMDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVBZ2cuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQWdn LmMKQEAgLTMyOTUsNiArMzI5NSw4IEBAIEV4ZWNJbml0QWdnKEFnZyAqbm9kZSwgRVN0YXRlICpl c3RhdGUsIGludCBlZmxhZ3MpCiAJCWVmbGFncyAmPSB+RVhFQ19GTEFHX1JFV0lORDsKIAlvdXRl clBsYW4gPSBvdXRlclBsYW4obm9kZSk7CiAJb3V0ZXJQbGFuU3RhdGUoYWdnc3RhdGUpID0gRXhl Y0luaXROb2RlKG91dGVyUGxhbiwgZXN0YXRlLCBlZmxhZ3MpOworCWlmICghRXhlY1BsYW5TdGls bFZhbGlkKGVzdGF0ZSkpCisJCXJldHVybiBOVUxMOwogCiAJLyoKIAkgKiBpbml0aWFsaXplIHNv dXJjZSB0dXBsZSB0eXBlLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFw cGVuZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCmluZGV4IGNiMjU0OTli M2YuLmZkMGFkOTg2MjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBl bmQuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKQEAgLTE0OCw2ICsx NDgsOCBAQCBFeGVjSW5pdEFwcGVuZChBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQg ZWZsYWdzKQogCQkJCQkJCQkJCQkgIG5vZGUtPnBhcnRfcHJ1bmVfaW5kZXgsCiAJCQkJCQkJCQkJ CSAgbm9kZS0+YXBwcmVsaWRzLAogCQkJCQkJCQkJCQkgICZ2YWxpZHN1YnBsYW5zKTsKKwkJaWYg KCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0YXRlKSkKKwkJCXJldHVybiBOVUxMOwogCQlhcHBlbmRz dGF0ZS0+YXNfcHJ1bmVfc3RhdGUgPSBwcnVuZXN0YXRlOwogCQlucGxhbnMgPSBibXNfbnVtX21l bWJlcnModmFsaWRzdWJwbGFucyk7CiAKQEAgLTIxOCw2ICsyMjAsOCBAQCBFeGVjSW5pdEFwcGVu ZChBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkJZmlyc3R2YWxp ZCA9IGo7CiAKIAkJYXBwZW5kcGxhbnN0YXRlc1tqKytdID0gRXhlY0luaXROb2RlKGluaXROb2Rl LCBlc3RhdGUsIGVmbGFncyk7CisJCWlmICghRXhlY1BsYW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJ CQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlhcHBlbmRzdGF0ZS0+YXNfZmlyc3RfcGFydGlhbF9wbGFu ID0gZmlyc3R2YWxpZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRt YXBBbmQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBBbmQuYwppbmRleCA0YzVl YjJiMjNiLi45OGNiZWIyNTAyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl Qml0bWFwQW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEFuZC5jCkBA IC04OSw2ICs4OSw4IEBAIEV4ZWNJbml0Qml0bWFwQW5kKEJpdG1hcEFuZCAqbm9kZSwgRVN0YXRl ICplc3RhdGUsIGludCBlZmxhZ3MpCiAJewogCQlpbml0Tm9kZSA9IChQbGFuICopIGxmaXJzdChs KTsKIAkJYml0bWFwcGxhbnN0YXRlc1tpXSA9IEV4ZWNJbml0Tm9kZShpbml0Tm9kZSwgZXN0YXRl LCBlZmxhZ3MpOworCQlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQkJcmV0dXJu IE5VTEw7CiAJCWkrKzsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVCaXRtYXBIZWFwc2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEhlYXBz Y2FuLmMKaW5kZXggZjM1ZGYwYjhiZi4uMTIxYjFhZmE1ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEhlYXBzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZUJpdG1hcEhlYXBzY2FuLmMKQEAgLTc2MywxMSArNzYzLDE1IEBAIEV4ZWNJbml0Qml0 bWFwSGVhcFNjYW4oQml0bWFwSGVhcFNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZs YWdzKQogCSAqIG9wZW4gdGhlIHNjYW4gcmVsYXRpb24KIAkgKi8KIAljdXJyZW50UmVsYXRpb24g PSBFeGVjT3BlblNjYW5SZWxhdGlvbihlc3RhdGUsIG5vZGUtPnNjYW4uc2NhbnJlbGlkLCBlZmxh Z3MpOworCWlmICghRXhlY1BsYW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJCXJldHVybiBOVUxMOwog CiAJLyoKIAkgKiBpbml0aWFsaXplIGNoaWxkIG5vZGVzCiAJICovCiAJb3V0ZXJQbGFuU3RhdGUo c2NhbnN0YXRlKSA9IEV4ZWNJbml0Tm9kZShvdXRlclBsYW4obm9kZSksIGVzdGF0ZSwgZWZsYWdz KTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQlyZXR1cm4gTlVMTDsKIAog CS8qCiAJICogZ2V0IHRoZSBzY2FuIHR5cGUgZnJvbSB0aGUgcmVsYXRpb24gZGVzY3JpcHRvci4K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBPci5jIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcE9yLmMKaW5kZXggMGJmOGFmOTY1Mi4uYmU3MzY5NDZm MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcE9yLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcE9yLmMKQEAgLTkwLDYgKzkwLDggQEAgRXhl Y0luaXRCaXRtYXBPcihCaXRtYXBPciAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3Mp CiAJewogCQlpbml0Tm9kZSA9IChQbGFuICopIGxmaXJzdChsKTsKIAkJYml0bWFwcGxhbnN0YXRl c1tpXSA9IEV4ZWNJbml0Tm9kZShpbml0Tm9kZSwgZXN0YXRlLCBlZmxhZ3MpOworCQlpZiAoIUV4 ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQkJcmV0dXJuIE5VTEw7CiAJCWkrKzsKIAl9CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVDdXN0b20uYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVDdXN0b20uYwppbmRleCBiZDQyYzY1YjI5Li45MTIzOWNjNTAwIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQ3VzdG9tLmMKKysrIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZUN1c3RvbS5jCkBAIC02MSw2ICs2MSw4IEBAIEV4ZWNJbml0Q3Vz dG9tU2NhbihDdXN0b21TY2FuICpjc2NhbiwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJ aWYgKHNjYW5yZWxpZCA+IDApCiAJewogCQlzY2FuX3JlbCA9IEV4ZWNPcGVuU2NhblJlbGF0aW9u KGVzdGF0ZSwgc2NhbnJlbGlkLCBlZmxhZ3MpOworCQlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChl c3RhdGUpKQorCQkJcmV0dXJuIE5VTEw7CiAJCWNzcy0+c3Muc3NfY3VycmVudFJlbGF0aW9uID0g c2Nhbl9yZWw7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlRm9y ZWlnbnNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVGb3JlaWduc2Nhbi5jCmluZGV4 IGMyMTM5YWNjYTAuLmYxMzBkNTg2M2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVGb3JlaWduc2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVGb3JlaWdu c2Nhbi5jCkBAIC0xNzMsNiArMTczLDggQEAgRXhlY0luaXRGb3JlaWduU2NhbihGb3JlaWduU2Nh biAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJaWYgKHNjYW5yZWxpZCA+IDAp CiAJewogCQljdXJyZW50UmVsYXRpb24gPSBFeGVjT3BlblNjYW5SZWxhdGlvbihlc3RhdGUsIHNj YW5yZWxpZCwgZWZsYWdzKTsKKwkJaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0YXRlKSkKKwkJ CXJldHVybiBOVUxMOwogCQlzY2Fuc3RhdGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiA9IGN1cnJl bnRSZWxhdGlvbjsKIAkJZmR3cm91dGluZSA9IEdldEZkd1JvdXRpbmVGb3JSZWxhdGlvbihjdXJy ZW50UmVsYXRpb24sIHRydWUpOwogCX0KQEAgLTI2NCw2ICsyNjYsOCBAQCBFeGVjSW5pdEZvcmVp Z25TY2FuKEZvcmVpZ25TY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlp ZiAob3V0ZXJQbGFuKG5vZGUpKQogCQlvdXRlclBsYW5TdGF0ZShzY2Fuc3RhdGUpID0KIAkJCUV4 ZWNJbml0Tm9kZShvdXRlclBsYW4obm9kZSksIGVzdGF0ZSwgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQ bGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQlyZXR1cm4gTlVMTDsKIAogCS8qCiAJICogVGVsbCB0 aGUgRkRXIHRvIGluaXRpYWxpemUgdGhlIHNjYW4uCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlR2F0aGVyLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlR2F0aGVyLmMK aW5kZXggMzA3ZmMxMGVlYS4uNGE3NzE1YjhjYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUdhdGhlci5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVHYXRoZXIu YwpAQCAtODksNiArODksOCBAQCBFeGVjSW5pdEdhdGhlcihHYXRoZXIgKm5vZGUsIEVTdGF0ZSAq ZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAqLwogCW91dGVyTm9kZSA9IG91dGVyUGxhbihub2RlKTsK IAlvdXRlclBsYW5TdGF0ZShnYXRoZXJzdGF0ZSkgPSBFeGVjSW5pdE5vZGUob3V0ZXJOb2RlLCBl c3RhdGUsIGVmbGFncyk7CisJaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0YXRlKSkKKwkJcmV0 dXJuIE5VTEw7CiAJdHVwRGVzYyA9IEV4ZWNHZXRSZXN1bHRUeXBlKG91dGVyUGxhblN0YXRlKGdh dGhlcnN0YXRlKSk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZUdhdGhlck1lcmdlLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlR2F0aGVyTWVyZ2UuYwpp bmRleCA5ZDVlMWE0NmU5Li45ZTM4M2M5NmZmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlR2F0aGVyTWVyZ2UuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlR2F0 aGVyTWVyZ2UuYwpAQCAtMTA4LDYgKzEwOCw4IEBAIEV4ZWNJbml0R2F0aGVyTWVyZ2UoR2F0aGVy TWVyZ2UgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAqLwogCW91dGVyTm9k ZSA9IG91dGVyUGxhbihub2RlKTsKIAlvdXRlclBsYW5TdGF0ZShnbV9zdGF0ZSkgPSBFeGVjSW5p dE5vZGUob3V0ZXJOb2RlLCBlc3RhdGUsIGVmbGFncyk7CisJaWYgKCFFeGVjUGxhblN0aWxsVmFs aWQoZXN0YXRlKSkKKwkJcmV0dXJuIE5VTEw7CiAKIAkvKgogCSAqIExlYWRlciBtYXkgYWNjZXNz IEV4ZWNQcm9jTm9kZSByZXN1bHQgZGlyZWN0bHkgKGlmCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlR3JvdXAuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVHcm91cC5j CmluZGV4IDI1YTE2MTg5NTIuLjg3YWYyYTkyZjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVHcm91cC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVHcm91cC5j CkBAIC0xODUsNiArMTg1LDggQEAgRXhlY0luaXRHcm91cChHcm91cCAqbm9kZSwgRVN0YXRlICpl c3RhdGUsIGludCBlZmxhZ3MpCiAJICogaW5pdGlhbGl6ZSBjaGlsZCBub2RlcwogCSAqLwogCW91 dGVyUGxhblN0YXRlKGdycHN0YXRlKSA9IEV4ZWNJbml0Tm9kZShvdXRlclBsYW4obm9kZSksIGVz dGF0ZSwgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQlyZXR1 cm4gTlVMTDsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSBzY2FuIHNsb3QgYW5kIHR5cGUuCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSGFzaC5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUhhc2guYwppbmRleCBlY2VlZTk5Mzc0Li5jOGZlZGVlNzc3IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVIYXNoLmMKQEAgLTM3OSw2ICszNzksOCBAQCBFeGVjSW5pdEhhc2goSGFzaCAqbm9k ZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICogaW5pdGlhbGl6ZSBjaGlsZCBub2Rl cwogCSAqLwogCW91dGVyUGxhblN0YXRlKGhhc2hzdGF0ZSkgPSBFeGVjSW5pdE5vZGUob3V0ZXJQ bGFuKG5vZGUpLCBlc3RhdGUsIGVmbGFncyk7CisJaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0 YXRlKSkKKwkJcmV0dXJuIE5VTEw7CiAKIAkvKgogCSAqIGluaXRpYWxpemUgb3VyIHJlc3VsdCBz bG90IGFuZCB0eXBlLiBObyBuZWVkIHRvIGJ1aWxkIHByb2plY3Rpb24KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVIYXNoam9pbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUhhc2hqb2luLmMKaW5kZXggYjIxNWUzZjU5YS4uODY0MjBlOGYxNyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2hqb2luLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUhhc2hqb2luLmMKQEAgLTY1OSw4ICs2NTksMTIgQEAgRXhlY0luaXRIYXNoSm9p bihIYXNoSm9pbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJaGFzaE5vZGUg PSAoSGFzaCAqKSBpbm5lclBsYW4obm9kZSk7CiAKIAlvdXRlclBsYW5TdGF0ZShoanN0YXRlKSA9 IEV4ZWNJbml0Tm9kZShvdXRlck5vZGUsIGVzdGF0ZSwgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQbGFu U3RpbGxWYWxpZChlc3RhdGUpKQorCQlyZXR1cm4gTlVMTDsKIAlvdXRlckRlc2MgPSBFeGVjR2V0 UmVzdWx0VHlwZShvdXRlclBsYW5TdGF0ZShoanN0YXRlKSk7CiAJaW5uZXJQbGFuU3RhdGUoaGpz dGF0ZSkgPSBFeGVjSW5pdE5vZGUoKFBsYW4gKikgaGFzaE5vZGUsIGVzdGF0ZSwgZWZsYWdzKTsK KwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQlyZXR1cm4gTlVMTDsKIAlpbm5l ckRlc2MgPSBFeGVjR2V0UmVzdWx0VHlwZShpbm5lclBsYW5TdGF0ZShoanN0YXRlKSk7CiAKIAkv KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluY3JlbWVudGFsU29ydC5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluY3JlbWVudGFsU29ydC5jCmluZGV4IDEyYmMy MmYzM2MuLjA0NTZhZDc3OWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmNyZW1lbnRhbFNvcnQuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5jcmVtZW50 YWxTb3J0LmMKQEAgLTEwNDEsNiArMTA0MSw4IEBAIEV4ZWNJbml0SW5jcmVtZW50YWxTb3J0KElu Y3JlbWVudGFsU29ydCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICogbm9k ZXMgbWF5IGJlIGFibGUgdG8gZG8gc29tZXRoaW5nIG1vcmUgdXNlZnVsLgogCSAqLwogCW91dGVy UGxhblN0YXRlKGluY3Jzb3J0c3RhdGUpID0gRXhlY0luaXROb2RlKG91dGVyUGxhbihub2RlKSwg ZXN0YXRlLCBlZmxhZ3MpOworCWlmICghRXhlY1BsYW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJCXJl dHVybiBOVUxMOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHNjYW4gc2xvdCBhbmQgdHlwZS4KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCmluZGV4IDBiNDNhOWI5NjkuLmUw YWFlYjVlYmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlz Y2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpAQCAt NTEyLDYgKzUxMiw4IEBAIEV4ZWNJbml0SW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2FuICpub2Rl LCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkgKiBvcGVuIHRoZSBzY2FuIHJlbGF0aW9u CiAJICovCiAJY3VycmVudFJlbGF0aW9uID0gRXhlY09wZW5TY2FuUmVsYXRpb24oZXN0YXRlLCBu b2RlLT5zY2FuLnNjYW5yZWxpZCwgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChl c3RhdGUpKQorCQlyZXR1cm4gTlVMTDsKIAogCWluZGV4c3RhdGUtPnNzLnNzX2N1cnJlbnRSZWxh dGlvbiA9IGN1cnJlbnRSZWxhdGlvbjsKIAlpbmRleHN0YXRlLT5zcy5zc19jdXJyZW50U2NhbkRl c2MgPSBOVUxMOwkvKiBubyBoZWFwIHNjYW4gaGVyZSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUlu ZGV4c2Nhbi5jCmluZGV4IDQ1NDBjNzc4MWQuLjUwOTBlZTM5ZTAgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlSW5kZXhzY2FuLmMKQEAgLTkyNSw2ICs5MjUsOCBAQCBFeGVjSW5pdEluZGV4U2NhbihJ bmRleFNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAqIG9wZW4gdGhl IHNjYW4gcmVsYXRpb24KIAkgKi8KIAljdXJyZW50UmVsYXRpb24gPSBFeGVjT3BlblNjYW5SZWxh dGlvbihlc3RhdGUsIG5vZGUtPnNjYW4uc2NhbnJlbGlkLCBlZmxhZ3MpOworCWlmICghRXhlY1Bs YW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJCXJldHVybiBOVUxMOwogCiAJaW5kZXhzdGF0ZS0+c3Mu c3NfY3VycmVudFJlbGF0aW9uID0gY3VycmVudFJlbGF0aW9uOwogCWluZGV4c3RhdGUtPnNzLnNz X2N1cnJlbnRTY2FuRGVzYyA9IE5VTEw7CS8qIG5vIGhlYXAgc2NhbiBoZXJlICovCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTGltaXQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVMaW1pdC5jCmluZGV4IDQyNWZiZmM0MDUuLmQ4Nzg5NTUzZTEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVMaW1pdC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVMaW1pdC5jCkBAIC00NzYsNiArNDc2LDggQEAgRXhlY0luaXRMaW1pdChMaW1pdCAq bm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICovCiAJb3V0ZXJQbGFuID0gb3V0 ZXJQbGFuKG5vZGUpOwogCW91dGVyUGxhblN0YXRlKGxpbWl0c3RhdGUpID0gRXhlY0luaXROb2Rl KG91dGVyUGxhbiwgZXN0YXRlLCBlZmxhZ3MpOworCWlmICghRXhlY1BsYW5TdGlsbFZhbGlkKGVz dGF0ZSkpCisJCXJldHVybiBOVUxMOwogCiAJLyoKIAkgKiBpbml0aWFsaXplIGNoaWxkIGV4cHJl c3Npb25zCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTG9ja1Jvd3MuYyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVMb2NrUm93cy5jCmluZGV4IDQwNzQxNGZjMGMuLjkx MDQ5NTRiYjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVMb2NrUm93cy5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVMb2NrUm93cy5jCkBAIC0zMjMsNiArMzIz LDggQEAgRXhlY0luaXRMb2NrUm93cyhMb2NrUm93cyAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGlu dCBlZmxhZ3MpCiAJICogdGhlbiBpbml0aWFsaXplIG91dGVyIHBsYW4KIAkgKi8KIAlvdXRlclBs YW5TdGF0ZShscnN0YXRlKSA9IEV4ZWNJbml0Tm9kZShvdXRlclBsYW4sIGVzdGF0ZSwgZWZsYWdz KTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQlyZXR1cm4gTlVMTDsKIAog CS8qIG5vZGUgcmV0dXJucyB1bm1vZGlmaWVkIHNsb3RzIGZyb20gdGhlIG91dGVyIHBsYW4gKi8K IAlscnN0YXRlLT5wcy5yZXN1bHRvcHNzZXQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZU1hdGVyaWFsLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWF0 ZXJpYWwuYwppbmRleCAwOTYzMjY3OGIwLi42ZWY1MGQzOTYwIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlTWF0ZXJpYWwuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlTWF0ZXJpYWwuYwpAQCAtMjE0LDYgKzIxNCw4IEBAIEV4ZWNJbml0TWF0ZXJpYWwoTWF0ZXJp YWwgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCiAJb3V0ZXJQbGFuID0gb3V0 ZXJQbGFuKG5vZGUpOwogCW91dGVyUGxhblN0YXRlKG1hdHN0YXRlKSA9IEV4ZWNJbml0Tm9kZShv dXRlclBsYW4sIGVzdGF0ZSwgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3Rh dGUpKQorCQlyZXR1cm4gTlVMTDsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSByZXN1bHQgdHlwZSBh bmQgc2xvdC4gTm8gbmVlZCB0byBpbml0aWFsaXplIHByb2plY3Rpb24gaW5mbwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lbW9pemUuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVNZW1vaXplLmMKaW5kZXggNzRmN2QyMWJjOC4uNGVjYzYwYTIzOCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lbW9pemUuYworKysgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlTWVtb2l6ZS5jCkBAIC05MzEsNiArOTMxLDggQEAgRXhlY0luaXRNZW1vaXpl KE1lbW9pemUgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCiAJb3V0ZXJOb2Rl ID0gb3V0ZXJQbGFuKG5vZGUpOwogCW91dGVyUGxhblN0YXRlKG1zdGF0ZSkgPSBFeGVjSW5pdE5v ZGUob3V0ZXJOb2RlLCBlc3RhdGUsIGVmbGFncyk7CisJaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQo ZXN0YXRlKSkKKwkJcmV0dXJuIE5VTEw7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgcmV0dXJuIHNs b3QgYW5kIHR5cGUuIE5vIG5lZWQgdG8gaW5pdGlhbGl6ZSBwcm9qZWN0aW9uIGluZm8KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKaW5kZXggMzk5YjM5YzU5OC4uYjEyYTAyYzAy OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKQEAgLTk2LDYgKzk2LDgg QEAgRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUs IGludCBlZmxhZ3MpCiAJCQkJCQkJCQkJCSAgbm9kZS0+cGFydF9wcnVuZV9pbmRleCwKIAkJCQkJ CQkJCQkJICBub2RlLT5hcHByZWxpZHMsCiAJCQkJCQkJCQkJCSAgJnZhbGlkc3VicGxhbnMpOwor CQlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQkJcmV0dXJuIE5VTEw7CiAJCW1l cmdlc3RhdGUtPm1zX3BydW5lX3N0YXRlID0gcHJ1bmVzdGF0ZTsKIAkJbnBsYW5zID0gYm1zX251 bV9tZW1iZXJzKHZhbGlkc3VicGxhbnMpOwogCkBAIC0xNTIsNiArMTU0LDggQEAgRXhlY0luaXRN ZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3Mp CiAJCVBsYW4JICAgKmluaXROb2RlID0gKFBsYW4gKikgbGlzdF9udGgobm9kZS0+bWVyZ2VwbGFu cywgaSk7CiAKIAkJbWVyZ2VwbGFuc3RhdGVzW2orK10gPSBFeGVjSW5pdE5vZGUoaW5pdE5vZGUs IGVzdGF0ZSwgZWZsYWdzKTsKKwkJaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0YXRlKSkKKwkJ CXJldHVybiBOVUxMOwogCX0KIAogCW1lcmdlc3RhdGUtPnBzLnBzX1Byb2pJbmZvID0gTlVMTDsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZWpvaW4uYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZWpvaW4uYwppbmRleCA4MDlhYTIxNWM2Li4wMTU3YTdm ZjNjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jCkBAIC0xNDgyLDExICsxNDgy LDE1IEBAIEV4ZWNJbml0TWVyZ2VKb2luKE1lcmdlSm9pbiAqbm9kZSwgRVN0YXRlICplc3RhdGUs IGludCBlZmxhZ3MpCiAJbWVyZ2VzdGF0ZS0+bWpfU2tpcE1hcmtSZXN0b3JlID0gbm9kZS0+c2tp cF9tYXJrX3Jlc3RvcmU7CiAKIAlvdXRlclBsYW5TdGF0ZShtZXJnZXN0YXRlKSA9IEV4ZWNJbml0 Tm9kZShvdXRlclBsYW4obm9kZSksIGVzdGF0ZSwgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQbGFuU3Rp bGxWYWxpZChlc3RhdGUpKQorCQlyZXR1cm4gTlVMTDsKIAlvdXRlckRlc2MgPSBFeGVjR2V0UmVz dWx0VHlwZShvdXRlclBsYW5TdGF0ZShtZXJnZXN0YXRlKSk7CiAJaW5uZXJQbGFuU3RhdGUobWVy Z2VzdGF0ZSkgPSBFeGVjSW5pdE5vZGUoaW5uZXJQbGFuKG5vZGUpLCBlc3RhdGUsCiAJCQkJCQkJ CQkJCSAgbWVyZ2VzdGF0ZS0+bWpfU2tpcE1hcmtSZXN0b3JlID8KIAkJCQkJCQkJCQkJICBlZmxh Z3MgOgogCQkJCQkJCQkJCQkgIChlZmxhZ3MgfCBFWEVDX0ZMQUdfTUFSSykpOworCWlmICghRXhl Y1BsYW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJCXJldHVybiBOVUxMOwogCWlubmVyRGVzYyA9IEV4 ZWNHZXRSZXN1bHRUeXBlKGlubmVyUGxhblN0YXRlKG1lcmdlc3RhdGUpKTsKIAogCS8qCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCmluZGV4IDFhYzY1MTcyZTQuLjM1NTk2NGQx MDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCkBAIC00MDEwLDYgKzQw MTAsOSBAQCBFeGVjSW5pdE1vZGlmeVRhYmxlKE1vZGlmeVRhYmxlICpub2RlLCBFU3RhdGUgKmVz dGF0ZSwgaW50IGVmbGFncykKIAkJCQkJCQkgICBsaW5pdGlhbF9pbnQobm9kZS0+cmVzdWx0UmVs YXRpb25zKSk7CiAJfQogCisJaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0YXRlKSkKKwkJcmV0 dXJuIE5VTEw7CisKIAkvKiBzZXQgdXAgZXBxc3RhdGUgd2l0aCBkdW1teSBzdWJwbGFuIGRhdGEg Zm9yIHRoZSBtb21lbnQgKi8KIAlFdmFsUGxhblF1YWxJbml0KCZtdHN0YXRlLT5tdF9lcHFzdGF0 ZSwgZXN0YXRlLCBOVUxMLCBOSUwsIG5vZGUtPmVwcVBhcmFtKTsKIAltdHN0YXRlLT5maXJlQlNU cmlnZ2VycyA9IHRydWU7CkBAIC00MDM2LDYgKzQwMzksOCBAQCBFeGVjSW5pdE1vZGlmeVRhYmxl KE1vZGlmeVRhYmxlICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJaWYgKHJl c3VsdFJlbEluZm8gIT0gbXRzdGF0ZS0+cm9vdFJlc3VsdFJlbEluZm8pCiAJCXsKIAkJCUV4ZWNJ bml0UmVzdWx0UmVsYXRpb24oZXN0YXRlLCByZXN1bHRSZWxJbmZvLCByZXN1bHRSZWxhdGlvbik7 CisJCQlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQkJCXJldHVybiBOVUxMOwog CiAJCQkvKgogCQkJICogRm9yIGNoaWxkIHJlc3VsdCByZWxhdGlvbnMsIHN0b3JlIHRoZSByb290 IHJlc3VsdCByZWxhdGlvbgpAQCAtNDA2Myw2ICs0MDY4LDggQEAgRXhlY0luaXRNb2RpZnlUYWJs ZShNb2RpZnlUYWJsZSAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICogTm93 IHdlIG1heSBpbml0aWFsaXplIHRoZSBzdWJwbGFuLgogCSAqLwogCW91dGVyUGxhblN0YXRlKG10 c3RhdGUpID0gRXhlY0luaXROb2RlKHN1YnBsYW4sIGVzdGF0ZSwgZWZsYWdzKTsKKwlpZiAoIUV4 ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQlyZXR1cm4gTlVMTDsKIAogCS8qCiAJICogRG8g YWRkaXRpb25hbCBwZXItcmVzdWx0LXJlbGF0aW9uIGluaXRpYWxpemF0aW9uLgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU5lc3Rsb29wLmMgYi9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlTmVzdGxvb3AuYwppbmRleCBiM2Q1MmU2OWVjLi5lNDMxOWY1YzkwIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTmVzdGxvb3AuYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlTmVzdGxvb3AuYwpAQCAtMjk1LDExICsyOTUsMTUgQEAgRXhlY0luaXRO ZXN0TG9vcChOZXN0TG9vcCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICog dmFsdWVzLgogCSAqLwogCW91dGVyUGxhblN0YXRlKG5sc3RhdGUpID0gRXhlY0luaXROb2RlKG91 dGVyUGxhbihub2RlKSwgZXN0YXRlLCBlZmxhZ3MpOworCWlmICghRXhlY1BsYW5TdGlsbFZhbGlk KGVzdGF0ZSkpCisJCXJldHVybiBOVUxMOwogCWlmIChub2RlLT5uZXN0UGFyYW1zID09IE5JTCkK IAkJZWZsYWdzIHw9IEVYRUNfRkxBR19SRVdJTkQ7CiAJZWxzZQogCQllZmxhZ3MgJj0gfkVYRUNf RkxBR19SRVdJTkQ7CiAJaW5uZXJQbGFuU3RhdGUobmxzdGF0ZSkgPSBFeGVjSW5pdE5vZGUoaW5u ZXJQbGFuKG5vZGUpLCBlc3RhdGUsIGVmbGFncyk7CisJaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQo ZXN0YXRlKSkKKwkJcmV0dXJuIE5VTEw7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgcmVzdWx0IHNs b3QsIHR5cGUgYW5kIHByb2plY3Rpb24uCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlUHJvamVjdFNldC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVByb2plY3RTZXQu YwppbmRleCBmNmZmM2RjNDRjLi5hMTY4Y2Q2OGY2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlUHJvamVjdFNldC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVQ cm9qZWN0U2V0LmMKQEAgLTI0Nyw2ICsyNDcsOCBAQCBFeGVjSW5pdFByb2plY3RTZXQoUHJvamVj dFNldCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICogaW5pdGlhbGl6ZSBj aGlsZCBub2RlcwogCSAqLwogCW91dGVyUGxhblN0YXRlKHN0YXRlKSA9IEV4ZWNJbml0Tm9kZShv dXRlclBsYW4obm9kZSksIGVzdGF0ZSwgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxp ZChlc3RhdGUpKQorCQlyZXR1cm4gTlVMTDsKIAogCS8qCiAJICogd2UgZG9uJ3QgdXNlIGlubmVy IHBsYW4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVSZWN1cnNpdmV1bmlv bi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVJlY3Vyc2l2ZXVuaW9uLmMKaW5kZXggZTc4 MTAwMzkzNC4uM2RhZTliMTQ5NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZVJlY3Vyc2l2ZXVuaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVJlY3Vyc2l2 ZXVuaW9uLmMKQEAgLTI0NCw3ICsyNDQsMTEgQEAgRXhlY0luaXRSZWN1cnNpdmVVbmlvbihSZWN1 cnNpdmVVbmlvbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICogaW5pdGlh bGl6ZSBjaGlsZCBub2RlcwogCSAqLwogCW91dGVyUGxhblN0YXRlKHJ1c3RhdGUpID0gRXhlY0lu aXROb2RlKG91dGVyUGxhbihub2RlKSwgZXN0YXRlLCBlZmxhZ3MpOworCWlmICghRXhlY1BsYW5T dGlsbFZhbGlkKGVzdGF0ZSkpCisJCXJldHVybiBOVUxMOwogCWlubmVyUGxhblN0YXRlKHJ1c3Rh dGUpID0gRXhlY0luaXROb2RlKGlubmVyUGxhbihub2RlKSwgZXN0YXRlLCBlZmxhZ3MpOworCWlm ICghRXhlY1BsYW5TdGlsbFZhbGlkKGVzdGF0ZSkpCisJCXJldHVybiBOVUxMOwogCiAJLyoKIAkg KiBJZiBoYXNoaW5nLCBwcmVjb21wdXRlIGZtZ3IgbG9va3VwIGRhdGEgZm9yIGlubmVyIGxvb3As IGFuZCBjcmVhdGUgdGhlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlUmVz dWx0LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlUmVzdWx0LmMKaW5kZXggNDIxOTcxMmQz MC4uOWRhNDU2YmU0YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVJlc3Vs dC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVSZXN1bHQuYwpAQCAtMjA4LDYgKzIw OCw4IEBAIEV4ZWNJbml0UmVzdWx0KFJlc3VsdCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBl ZmxhZ3MpCiAJICogaW5pdGlhbGl6ZSBjaGlsZCBub2RlcwogCSAqLwogCW91dGVyUGxhblN0YXRl KHJlc3N0YXRlKSA9IEV4ZWNJbml0Tm9kZShvdXRlclBsYW4obm9kZSksIGVzdGF0ZSwgZWZsYWdz KTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQlyZXR1cm4gTlVMTDsKIAog CS8qCiAJICogd2UgZG9uJ3QgdXNlIGlubmVyIHBsYW4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVTYW1wbGVzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Ft cGxlc2Nhbi5jCmluZGV4IGQ3ZTIyYjFkYmIuLjIyMzU3ZTdhMGUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVTYW1wbGVzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZVNhbXBsZXNjYW4uYwpAQCAtMTI1LDYgKzEyNSw4IEBAIEV4ZWNJbml0U2FtcGxlU2Nh bihTYW1wbGVTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJRXhlY09w ZW5TY2FuUmVsYXRpb24oZXN0YXRlLAogCQkJCQkJCSBub2RlLT5zY2FuLnNjYW5yZWxpZCwKIAkJ CQkJCQkgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQlyZXR1 cm4gTlVMTDsKIAogCS8qIHdlIHdvbid0IHNldCB1cCB0aGUgSGVhcFNjYW5EZXNjIHRpbGwgbGF0 ZXIgKi8KIAlzY2Fuc3RhdGUtPnNzLnNzX2N1cnJlbnRTY2FuRGVzYyA9IE5VTEw7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZVNlcXNjYW4uYwppbmRleCA0ZGEwZjI4ZjdiLi5iMGIzNGNkMTRlIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMKQEAgLTE1Myw2ICsxNTMsOCBAQCBFeGVjSW5pdFNlcVNj YW4oU2VxU2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCUV4ZWNPcGVu U2NhblJlbGF0aW9uKGVzdGF0ZSwKIAkJCQkJCQkgbm9kZS0+c2Nhbi5zY2FucmVsaWQsCiAJCQkJ CQkJIGVmbGFncyk7CisJaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0YXRlKSkKKwkJcmV0dXJu IE5VTEw7CiAKIAkvKiBhbmQgY3JlYXRlIHNsb3Qgd2l0aCB0aGUgYXBwcm9wcmlhdGUgcm93dHlw ZSAqLwogCUV4ZWNJbml0U2NhblR1cGxlU2xvdChlc3RhdGUsICZzY2Fuc3RhdGUtPnNzLApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNldE9wLmMgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlU2V0T3AuYwppbmRleCA0YmMyNDA2Yjg5Li4yYzM1MGU2YzI0IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2V0T3AuYworKysgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlU2V0T3AuYwpAQCAtNTI4LDYgKzUyOCw4IEBAIEV4ZWNJbml0U2V0T3AoU2V0 T3AgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWlmIChub2RlLT5zdHJhdGVn eSA9PSBTRVRPUF9IQVNIRUQpCiAJCWVmbGFncyAmPSB+RVhFQ19GTEFHX1JFV0lORDsKIAlvdXRl clBsYW5TdGF0ZShzZXRvcHN0YXRlKSA9IEV4ZWNJbml0Tm9kZShvdXRlclBsYW4obm9kZSksIGVz dGF0ZSwgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQorCQlyZXR1 cm4gTlVMTDsKIAlvdXRlckRlc2MgPSBFeGVjR2V0UmVzdWx0VHlwZShvdXRlclBsYW5TdGF0ZShz ZXRvcHN0YXRlKSk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZVNvcnQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTb3J0LmMKaW5kZXggYzZjNzJjNmU2 Ny4uMjE2YTVhZmI0MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNvcnQu YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU29ydC5jCkBAIC0yNjMsNiArMjYzLDgg QEAgRXhlY0luaXRTb3J0KFNvcnQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQog CWVmbGFncyAmPSB+KEVYRUNfRkxBR19SRVdJTkQgfCBFWEVDX0ZMQUdfQkFDS1dBUkQgfCBFWEVD X0ZMQUdfTUFSSyk7CiAKIAlvdXRlclBsYW5TdGF0ZShzb3J0c3RhdGUpID0gRXhlY0luaXROb2Rl KG91dGVyUGxhbihub2RlKSwgZXN0YXRlLCBlZmxhZ3MpOworCWlmICghRXhlY1BsYW5TdGlsbFZh bGlkKGVzdGF0ZSkpCisJCXJldHVybiBOVUxMOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHNjYW4g c2xvdCBhbmQgdHlwZS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTdWJx dWVyeXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTdWJxdWVyeXNjYW4uYwppbmRl eCA0MjQ3MWJmYzA0Li4zNGFmZTE0YmVhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlU3VicXVlcnlzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVN1YnF1 ZXJ5c2Nhbi5jCkBAIC0xMjQsNiArMTI0LDggQEAgRXhlY0luaXRTdWJxdWVyeVNjYW4oU3VicXVl cnlTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkgKiBpbml0aWFsaXpl IHN1YnF1ZXJ5CiAJICovCiAJc3VicXVlcnlzdGF0ZS0+c3VicGxhbiA9IEV4ZWNJbml0Tm9kZShu b2RlLT5zdWJwbGFuLCBlc3RhdGUsIGVmbGFncyk7CisJaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQo ZXN0YXRlKSkKKwkJcmV0dXJuIE5VTEw7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgc2NhbiBzbG90 IGFuZCB0eXBlIChuZWVkZWQgYnkgRXhlY0Fzc2lnblNjYW5Qcm9qZWN0aW9uSW5mbykKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVUaWRyYW5nZXNjYW4uYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVUaWRyYW5nZXNjYW4uYwppbmRleCAyMTI0YzU1ZWY1Li42MTNiMzc3 YzdjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlVGlkcmFuZ2VzY2FuLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRpZHJhbmdlc2Nhbi5jCkBAIC0zODYsNiAr Mzg2LDggQEAgRXhlY0luaXRUaWRSYW5nZVNjYW4oVGlkUmFuZ2VTY2FuICpub2RlLCBFU3RhdGUg KmVzdGF0ZSwgaW50IGVmbGFncykKIAkgKiBvcGVuIHRoZSBzY2FuIHJlbGF0aW9uCiAJICovCiAJ Y3VycmVudFJlbGF0aW9uID0gRXhlY09wZW5TY2FuUmVsYXRpb24oZXN0YXRlLCBub2RlLT5zY2Fu LnNjYW5yZWxpZCwgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChlc3RhdGUpKQor CQlyZXR1cm4gTlVMTDsKIAogCXRpZHJhbmdlc3RhdGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiA9 IGN1cnJlbnRSZWxhdGlvbjsKIAl0aWRyYW5nZXN0YXRlLT5zcy5zc19jdXJyZW50U2NhbkRlc2Mg PSBOVUxMOwkvKiBubyB0YWJsZSBzY2FuIGhlcmUgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVUaWRzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlVGlkc2Nh bi5jCmluZGV4IGZlNmE5NjRlZTEuLjIzNzgyYWFkODkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVUaWRzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRp ZHNjYW4uYwpAQCAtNTI5LDYgKzUyOSw4IEBAIEV4ZWNJbml0VGlkU2NhbihUaWRTY2FuICpub2Rl LCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkgKiBvcGVuIHRoZSBzY2FuIHJlbGF0aW9u CiAJICovCiAJY3VycmVudFJlbGF0aW9uID0gRXhlY09wZW5TY2FuUmVsYXRpb24oZXN0YXRlLCBu b2RlLT5zY2FuLnNjYW5yZWxpZCwgZWZsYWdzKTsKKwlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChl c3RhdGUpKQorCQlyZXR1cm4gTlVMTDsKIAogCXRpZHN0YXRlLT5zcy5zc19jdXJyZW50UmVsYXRp b24gPSBjdXJyZW50UmVsYXRpb247CiAJdGlkc3RhdGUtPnNzLnNzX2N1cnJlbnRTY2FuRGVzYyA9 IE5VTEw7IC8qIG5vIGhlYXAgc2NhbiBoZXJlICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlVW5pcXVlLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlVW5pcXVlLmMK aW5kZXggNDUwMzVkNzRmYS4uMDYyNTdlOWU1MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZVVuaXF1ZS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVVbmlxdWUu YwpAQCAtMTM2LDYgKzEzNiw4IEBAIEV4ZWNJbml0VW5pcXVlKFVuaXF1ZSAqbm9kZSwgRVN0YXRl ICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICogdGhlbiBpbml0aWFsaXplIG91dGVyIHBsYW4KIAkg Ki8KIAlvdXRlclBsYW5TdGF0ZSh1bmlxdWVzdGF0ZSkgPSBFeGVjSW5pdE5vZGUob3V0ZXJQbGFu KG5vZGUpLCBlc3RhdGUsIGVmbGFncyk7CisJaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0YXRl KSkKKwkJcmV0dXJuIE5VTEw7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgcmVzdWx0IHNsb3QgYW5k IHR5cGUuIFVuaXF1ZSBub2RlcyBkbyBubyBwcm9qZWN0aW9ucywgc28KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVXaW5kb3dBZ2cuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVXaW5kb3dBZ2cuYwppbmRleCBkNjFkNTdlOWE4Li5kOGE5ZjFlOTRlIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jCkBAIC0yNDUwLDYgKzI0NTAsOCBAQCBFeGVjSW5pdFdp bmRvd0FnZyhXaW5kb3dBZ2cgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAq LwogCW91dGVyUGxhbiA9IG91dGVyUGxhbihub2RlKTsKIAlvdXRlclBsYW5TdGF0ZSh3aW5zdGF0 ZSkgPSBFeGVjSW5pdE5vZGUob3V0ZXJQbGFuLCBlc3RhdGUsIGVmbGFncyk7CisJaWYgKCFFeGVj UGxhblN0aWxsVmFsaWQoZXN0YXRlKSkKKwkJcmV0dXJuIE5VTEw7CiAKIAkvKgogCSAqIGluaXRp YWxpemUgc291cmNlIHR1cGxlIHR5cGUgKHdoaWNoIGlzIGFsc28gdGhlIHR1cGxlIHR5cGUgdGhh dCB3ZSdsbApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9zcGkuYwppbmRleCA2MWYwM2UzOTk5Li4zOGQ3NmM2NzE5IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9zcGkuYwpAQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgaW50CV9TUElfZXhlY3V0ZV9wbGFuKFNQ SVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlvbnMsCiBzdGF0aWMg UGFyYW1MaXN0SW5mbyBfU1BJX2NvbnZlcnRfcGFyYW1zKGludCBuYXJncywgT2lkICphcmd0eXBl cywKIAkJCQkJCQkJCQkgRGF0dW0gKlZhbHVlcywgY29uc3QgY2hhciAqTnVsbHMpOwogCi1zdGF0 aWMgaW50CV9TUElfcHF1ZXJ5KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBib29sIGZpcmVfdHJpZ2dl cnMsIHVpbnQ2NCB0Y291bnQpOworc3RhdGljIGludAlfU1BJX3BxdWVyeShRdWVyeURlc2MgKnF1 ZXJ5RGVzYywgdWludDY0IHRjb3VudCk7CiAKIHN0YXRpYyB2b2lkIF9TUElfZXJyb3JfY2FsbGJh Y2sodm9pZCAqYXJnKTsKIApAQCAtMTYyMyw2ICsxNjIzLDcgQEAgU1BJX2N1cnNvcl9vcGVuX2lu dGVybmFsKGNvbnN0IGNoYXIgKm5hbWUsIFNQSVBsYW5QdHIgcGxhbiwKIAlfU1BJX2N1cnJlbnQt PnByb2Nlc3NlZCA9IDA7CiAJX1NQSV9jdXJyZW50LT50dXB0YWJsZSA9IE5VTEw7CiAKK3JlcGxh bjoKIAkvKiBDcmVhdGUgdGhlIHBvcnRhbCAqLwogCWlmIChuYW1lID09IE5VTEwgfHwgbmFtZVsw XSA9PSAnXDAnKQogCXsKQEAgLTE3NjYsNyArMTc2Nyw4IEBAIFNQSV9jdXJzb3Jfb3Blbl9pbnRl cm5hbChjb25zdCBjaGFyICpuYW1lLCBTUElQbGFuUHRyIHBsYW4sCiAJfQogCiAJLyoKLQkgKiBT dGFydCBwb3J0YWwgZXhlY3V0aW9uLgorCSAqIFN0YXJ0IHBvcnRhbCBleGVjdXRpb24uICBJZiB0 aGUgcG9ydGFsIGNvbnRhaW5zIGEgY2FjaGVkIHBsYW4sIGl0IG11c3QKKwkgKiBiZSByZWNyZWF0 ZWQgaWYgKnJlcGxhbiBpcyBzZXQuCiAJICovCiAJUG9ydGFsU3RhcnQocG9ydGFsLCBwYXJhbUxJ LCAwLCBzbmFwc2hvdCk7CiAKQEAgLTE3NzUsNiArMTc3NywxMiBAQCBTUElfY3Vyc29yX29wZW5f aW50ZXJuYWwoY29uc3QgY2hhciAqbmFtZSwgU1BJUGxhblB0ciBwbGFuLAogCS8qIFBvcCB0aGUg ZXJyb3IgY29udGV4dCBzdGFjayAqLwogCWVycm9yX2NvbnRleHRfc3RhY2sgPSBzcGllcnJjb250 ZXh0LnByZXZpb3VzOwogCisJaWYgKCFwb3J0YWwtPnBsYW5fdmFsaWQpCisJeworCQlQb3J0YWxE cm9wKHBvcnRhbCwgZmFsc2UpOworCQlnb3RvIHJlcGxhbjsKKwl9CisKIAkvKiBQb3AgdGhlIFNQ SSBzdGFjayAqLwogCV9TUElfZW5kX2NhbGwodHJ1ZSk7CiAKQEAgLTI1NDgsNiArMjU1Niw3IEBA IF9TUElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlv bnMgKm9wdGlvbnMsCiAJCSAqIFJlcGxhbiBpZiBuZWVkZWQsIGFuZCBpbmNyZW1lbnQgcGxhbiBy ZWZjb3VudC4gIElmIGl0J3MgYSBzYXZlZAogCQkgKiBwbGFuLCB0aGUgcmVmY291bnQgbXVzdCBi ZSBiYWNrZWQgYnkgdGhlIHBsYW5fb3duZXIuCiAJCSAqLworcmVwbGFuOgogCQljcGxhbiA9IEdl dENhY2hlZFBsYW4ocGxhbnNvdXJjZSwgb3B0aW9ucy0+cGFyYW1zLAogCQkJCQkJCSAgcGxhbl9v d25lciwgX1NQSV9jdXJyZW50LT5xdWVyeUVudik7CiAKQEAgLTI2NTcsNiArMjY2Niw3IEBAIF9T UElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMg Km9wdGlvbnMsCiAJCQl7CiAJCQkJUXVlcnlEZXNjICAqcWRlc2M7CiAJCQkJU25hcHNob3QJc25h cDsKKwkJCQlpbnQJCQllZmxhZ3M7CiAKIAkJCQlpZiAoQWN0aXZlU25hcHNob3RTZXQoKSkKIAkJ CQkJc25hcCA9IEdldEFjdGl2ZVNuYXBzaG90KCk7CkBAIC0yNjY0LDE0ICsyNjc0LDI5IEBAIF9T UElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMg Km9wdGlvbnMsCiAJCQkJCXNuYXAgPSBJbnZhbGlkU25hcHNob3Q7CiAKIAkJCQlxZGVzYyA9IENy ZWF0ZVF1ZXJ5RGVzYyhzdG10LAorCQkJCQkJCQkJCWNwbGFuLAogCQkJCQkJCQkJCXBsYW5zb3Vy Y2UtPnF1ZXJ5X3N0cmluZywKIAkJCQkJCQkJCQlzbmFwLCBjcm9zc2NoZWNrX3NuYXBzaG90LAog CQkJCQkJCQkJCWRlc3QsCiAJCQkJCQkJCQkJb3B0aW9ucy0+cGFyYW1zLAogCQkJCQkJCQkJCV9T UElfY3VycmVudC0+cXVlcnlFbnYsCiAJCQkJCQkJCQkJMCk7Ci0JCQkJcmVzID0gX1NQSV9wcXVl cnkocWRlc2MsIGZpcmVfdHJpZ2dlcnMsCi0JCQkJCQkJCSAgY2FuU2V0VGFnID8gb3B0aW9ucy0+ dGNvdW50IDogMCk7CisKKwkJCQkvKiBTZWxlY3QgZXhlY3V0aW9uIG9wdGlvbnMgKi8KKwkJCQlp ZiAoZmlyZV90cmlnZ2VycykKKwkJCQkJZWZsYWdzID0gMDsJCQkJLyogZGVmYXVsdCBydW4tdG8t Y29tcGxldGlvbiBmbGFncyAqLworCQkJCWVsc2UKKwkJCQkJZWZsYWdzID0gRVhFQ19GTEFHX1NL SVBfVFJJR0dFUlM7CisJCQkJRXhlY3V0b3JTdGFydChxZGVzYywgZWZsYWdzKTsKKwkJCQlpZiAo IXFkZXNjLT5wbGFuX3ZhbGlkKQorCQkJCXsKKwkJCQkJRXhlY3V0b3JGaW5pc2gocWRlc2MpOwor CQkJCQlFeGVjdXRvckVuZChxZGVzYyk7CisJCQkJCUZyZWVRdWVyeURlc2MocWRlc2MpOworCQkJ CQlnb3RvIHJlcGxhbjsKKwkJCQl9CisKKwkJCQlyZXMgPSBfU1BJX3BxdWVyeShxZGVzYywgY2Fu U2V0VGFnID8gb3B0aW9ucy0+dGNvdW50IDogMCk7CiAJCQkJRnJlZVF1ZXJ5RGVzYyhxZGVzYyk7 CiAJCQl9CiAJCQllbHNlCkBAIC0yODQ2LDEwICsyODcxLDkgQEAgX1NQSV9jb252ZXJ0X3BhcmFt cyhpbnQgbmFyZ3MsIE9pZCAqYXJndHlwZXMsCiB9CiAKIHN0YXRpYyBpbnQKLV9TUElfcHF1ZXJ5 KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBib29sIGZpcmVfdHJpZ2dlcnMsIHVpbnQ2NCB0Y291bnQp CitfU1BJX3BxdWVyeShRdWVyeURlc2MgKnF1ZXJ5RGVzYywgdWludDY0IHRjb3VudCkKIHsKIAlp bnQJCQlvcGVyYXRpb24gPSBxdWVyeURlc2MtPm9wZXJhdGlvbjsKLQlpbnQJCQllZmxhZ3M7CiAJ aW50CQkJcmVzOwogCiAJc3dpdGNoIChvcGVyYXRpb24pCkBAIC0yODkzLDE0ICsyOTE3LDYgQEAg X1NQSV9wcXVlcnkoUXVlcnlEZXNjICpxdWVyeURlc2MsIGJvb2wgZmlyZV90cmlnZ2VycywgdWlu dDY0IHRjb3VudCkKIAkJUmVzZXRVc2FnZSgpOwogI2VuZGlmCiAKLQkvKiBTZWxlY3QgZXhlY3V0 aW9uIG9wdGlvbnMgKi8KLQlpZiAoZmlyZV90cmlnZ2VycykKLQkJZWZsYWdzID0gMDsJCQkJLyog ZGVmYXVsdCBydW4tdG8tY29tcGxldGlvbiBmbGFncyAqLwotCWVsc2UKLQkJZWZsYWdzID0gRVhF Q19GTEFHX1NLSVBfVFJJR0dFUlM7Ci0KLQlFeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgZWZsYWdz KTsKLQogCUV4ZWN1dG9yUnVuKHF1ZXJ5RGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHRjb3Vu dCwgdHJ1ZSk7CiAKIAlfU1BJX2N1cnJlbnQtPnByb2Nlc3NlZCA9IHF1ZXJ5RGVzYy0+ZXN0YXRl LT5lc19wcm9jZXNzZWQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9NYWtlZmlsZSBi L3NyYy9iYWNrZW5kL25vZGVzL01ha2VmaWxlCmluZGV4IGFmMTJjNjQ4NzguLjdmYjBkMmQyMDIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5k L25vZGVzL01ha2VmaWxlCkBAIC01Miw2ICs1Miw3IEBAIG5vZGVfaGVhZGVycyA9IFwKIAlhY2Nl c3MvdHNtYXBpLmggXAogCWNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCBcCiAJY29tbWFuZHMvdHJp Z2dlci5oIFwKKwlleGVjdXRvci9leGVjZGVzYy5oIFwKIAlleGVjdXRvci90dXB0YWJsZS5oIFwK IAlmb3JlaWduL2Zkd2FwaS5oIFwKIAlub2Rlcy9iaXRtYXBzZXQuaCBcCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9ub2Rlcy9nZW5fbm9kZV9zdXBwb3J0LnBsIGIvc3JjL2JhY2tlbmQvbm9kZXMv Z2VuX25vZGVfc3VwcG9ydC5wbAppbmRleCAxOWVkMjk2NTdjLi42OWU2MDIwNmJhIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9nZW5fbm9kZV9zdXBwb3J0LnBsCisrKyBiL3NyYy9iYWNr ZW5kL25vZGVzL2dlbl9ub2RlX3N1cHBvcnQucGwKQEAgLTYzLDYgKzYzLDcgQEAgbXkgQGFsbF9p bnB1dF9maWxlcyA9IHF3KAogICBhY2Nlc3MvdHNtYXBpLmgKICAgY29tbWFuZHMvZXZlbnRfdHJp Z2dlci5oCiAgIGNvbW1hbmRzL3RyaWdnZXIuaAorICBleGVjdXRvci9leGVjZGVzYy5oCiAgIGV4 ZWN1dG9yL3R1cHRhYmxlLmgKICAgZm9yZWlnbi9mZHdhcGkuaAogICBub2Rlcy9iaXRtYXBzZXQu aApAQCAtODcsNiArODgsNyBAQCBteSBAbm9kZXRhZ19vbmx5X2ZpbGVzID0gcXcoCiAgIGFjY2Vz cy90c21hcGkuaAogICBjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKICAgY29tbWFuZHMvdHJpZ2dl ci5oCisgIGV4ZWN1dG9yL2V4ZWNkZXNjLmgKICAgZXhlY3V0b3IvdHVwdGFibGUuaAogICBmb3Jl aWduL2Zkd2FwaS5oCiAgIG5vZGVzL2xvY2tvcHRpb25zLmgKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYwppbmRleCBkYjVmZjZmZGNhLi42NzBlYmEzYTNhIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vcGxhbm5lci5jCkBAIC01MjcsNiArNTI3LDcgQEAgc3RhbmRhcmRfcGxhbm5lcihR dWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMs CiAJcmVzdWx0LT5wYXJ0UHJ1bmVJbmZvcyA9IGdsb2ItPnBhcnRQcnVuZUluZm9zOwogCXJlc3Vs dC0+cnRhYmxlID0gZ2xvYi0+ZmluYWxydGFibGU7CiAJcmVzdWx0LT5wZXJtSW5mb3MgPSBnbG9i LT5maW5hbHJ0ZXBlcm1pbmZvczsKKwlyZXN1bHQtPnZpZXdSZWxhdGlvbnMgPSBnbG9iLT52aWV3 UmVsYXRpb25zOwogCXJlc3VsdC0+cmVzdWx0UmVsYXRpb25zID0gZ2xvYi0+cmVzdWx0UmVsYXRp b25zOwogCXJlc3VsdC0+YXBwZW5kUmVsYXRpb25zID0gZ2xvYi0+YXBwZW5kUmVsYXRpb25zOwog CXJlc3VsdC0+c3VicGxhbnMgPSBnbG9iLT5zdWJwbGFuczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3NldHJlZnMuYwppbmRleCAxODZmYzgwMTRiLi40NTRlMzBlMGNhIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vc2V0cmVmcy5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSAicG9zdGdyZXMu aCIKIAogI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19j bGFzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgIm5vZGVzL21h a2VmdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgpAQCAtNTk5LDYgKzYwMCwx MCBAQCBhZGRfcnRlX3RvX2ZsYXRfcnRhYmxlKFBsYW5uZXJHbG9iYWwgKmdsb2IsIExpc3QgKnJ0 ZXBlcm1pbmZvcywKIAkJKG5ld3J0ZS0+cnRla2luZCA9PSBSVEVfU1VCUVVFUlkgJiYgT2lkSXNW YWxpZChuZXdydGUtPnJlbGlkKSkpCiAJCWdsb2ItPnJlbGF0aW9uT2lkcyA9IGxhcHBlbmRfb2lk KGdsb2ItPnJlbGF0aW9uT2lkcywgbmV3cnRlLT5yZWxpZCk7CiAKKwlpZiAobmV3cnRlLT5yZWxr aW5kID09IFJFTEtJTkRfVklFVykKKwkJZ2xvYi0+dmlld1JlbGF0aW9ucyA9IGxhcHBlbmRfaW50 KGdsb2ItPnZpZXdSZWxhdGlvbnMsCisJCQkJCQkJCQkJICBsaXN0X2xlbmd0aChnbG9iLT5maW5h bHJ0YWJsZSkpOworCiAJLyoKIAkgKiBBZGQgYSBjb3B5IG9mIHRoZSBSVEVQZXJtaXNzaW9uSW5m bywgaWYgYW55LCBjb3JyZXNwb25kaW5nIHRvIHRoaXMgUlRFCiAJICogdG8gdGhlIGZsYXR0ZW5l ZCBnbG9iYWwgbGlzdC4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZUhh bmRsZXIuYyBiL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZUhhbmRsZXIuYwppbmRleCBjNzRi YWMyMGIxLi4yOWQxM2U5NWRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3Jp dGVIYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlSGFuZGxlci5jCkBA IC0xODM0LDExICsxODM0LDEwIEBAIEFwcGx5UmV0cmlldmVSdWxlKFF1ZXJ5ICpwYXJzZXRyZWUs CiAKIAkvKgogCSAqIENsZWFyIGZpZWxkcyB0aGF0IHNob3VsZCBub3QgYmUgc2V0IGluIGEgc3Vi cXVlcnkgUlRFLiAgTm90ZSB0aGF0IHdlCi0JICogbGVhdmUgdGhlIHJlbGlkLCByZWxsb2NrbW9k ZSwgYW5kIHBlcm1pbmZvaW5kZXggZmllbGRzIHNldCwgc28gdGhhdCB0aGUKLQkgKiB2aWV3IHJl bGF0aW9uIGNhbiBiZSBhcHByb3ByaWF0ZWx5IGxvY2tlZCBiZWZvcmUgZXhlY3V0aW9uIGFuZCBp dHMKLQkgKiBwZXJtaXNzaW9ucyBjaGVja2VkLgorCSAqIGxlYXZlIHRoZSByZWxpZCwgcmVsa2lu ZCwgcmVsbG9ja21vZGUsIGFuZCBwZXJtaW5mb2luZGV4IGZpZWxkcyBzZXQsCisJICogc28gdGhh dCB0aGUgdmlldyByZWxhdGlvbiBjYW4gYmUgYXBwcm9wcmlhdGVseSBsb2NrZWQgYmVmb3JlIGV4 ZWN1dGlvbgorCSAqIGFuZCBpdHMgcGVybWlzc2lvbnMgY2hlY2tlZC4KIAkgKi8KLQlydGUtPnJl bGtpbmQgPSAwOwogCXJ0ZS0+dGFibGVzYW1wbGUgPSBOVUxMOwogCXJ0ZS0+aW5oID0gZmFsc2U7 CQkJLyogbXVzdCBub3QgYmUgc2V0IGZvciBhIHN1YnF1ZXJ5ICovCiAKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3Iv bG1nci5jCmluZGV4IGVlOWI4OWE2NzIuLmM4MDdlOWNkY2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvbG1nci9sbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xt Z3IuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCiAj aW5jbHVkZSAic3RvcmFnZS9zaW52YWxhZHQuaCIKICNpbmNsdWRlICJ1dGlscy9pbnZhbC5oIgor I2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogCiAKIC8qCkBAIC0zNjQsNiArMzY1LDUwIEBA IENoZWNrUmVsYXRpb25Mb2NrZWRCeU1lKFJlbGF0aW9uIHJlbGF0aW9uLCBMT0NLTU9ERSBsb2Nr bW9kZSwgYm9vbCBvcnN0cm9uZ2VyKQogCXJldHVybiBmYWxzZTsKIH0KIAorLyoKKyAqCQlDaGVj a1JlbExvY2tlZEJ5TWUKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgY3VycmVudCB0cmFuc2FjdGlv biBob2xkcyBhIGxvY2sgb24gdGhlIGdpdmVuIHJlbGF0aW9uIG9mCisgKiBtb2RlICdsb2NrbW9k ZScuICBJZiAnb3JzdHJvbmdlcicgaXMgdHJ1ZSwgYSBzdHJvbmdlciBsb2NrbW9kZSBpcyBhbHNv IE9LLgorICogKCJTdHJvbmdlciIgaXMgZGVmaW5lZCBhcyAibnVtZXJpY2FsbHkgaGlnaGVyIiwg d2hpY2ggaXMgYSBiaXQKKyAqIHNlbWFudGljYWxseSBkdWJpb3VzIGJ1dCBpcyBPSyBmb3IgdGhl IHB1cnBvc2VzIHdlIHVzZSB0aGlzIGZvci4pCisgKi8KK2Jvb2wKK0NoZWNrUmVsTG9ja2VkQnlN ZShPaWQgcmVsaWQsIExPQ0tNT0RFIGxvY2ttb2RlLCBib29sIG9yc3Ryb25nZXIpCit7CisJT2lk CQkJZGJJZCA9IGdldF9yZWxfcmVsaXNzaGFyZWQocmVsaWQpID8gSW52YWxpZE9pZCA6IE15RGF0 YWJhc2VJZDsKKwlMT0NLVEFHCQl0YWc7CisKKwlTRVRfTE9DS1RBR19SRUxBVElPTih0YWcsIGRi SWQsIHJlbGlkKTsKKworCWlmIChMb2NrSGVsZEJ5TWUoJnRhZywgbG9ja21vZGUpKQorCQlyZXR1 cm4gdHJ1ZTsKKworCWlmIChvcnN0cm9uZ2VyKQorCXsKKwkJTE9DS01PREUJc2xvY2ttb2RlOwor CisJCWZvciAoc2xvY2ttb2RlID0gbG9ja21vZGUgKyAxOworCQkJIHNsb2NrbW9kZSA8PSBNYXhM b2NrTW9kZTsKKwkJCSBzbG9ja21vZGUrKykKKwkJeworCQkJaWYgKExvY2tIZWxkQnlNZSgmdGFn LCBzbG9ja21vZGUpKQorCQkJeworI2lmZGVmIE5PVF9VU0VECisJCQkJLyogU29tZXRpbWVzIHRo aXMgbWlnaHQgYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgKi8KKwkJCQllbG9nKFdB Uk5JTkcsICJsb2NrIG1vZGUgJXMgc3Vic3RpdHV0ZWQgZm9yICVzIG9uIHJlbGF0aW9uICVzIiwK KwkJCQkJIEdldExvY2ttb2RlTmFtZSh0YWcubG9ja3RhZ19sb2NrbWV0aG9kaWQsIHNsb2NrbW9k ZSksCisJCQkJCSBHZXRMb2NrbW9kZU5hbWUodGFnLmxvY2t0YWdfbG9ja21ldGhvZGlkLCBsb2Nr bW9kZSksCisJCQkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpOworI2VuZGlm CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisK IC8qCiAgKgkJTG9ja0hhc1dhaXRlcnNSZWxhdGlvbgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRleCA0 NzBiNzM0ZTllLi4zNGQzZjRmZjhkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3Rn cmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC0xMTk2LDYgKzExOTYs NyBAQCBleGVjX3NpbXBsZV9xdWVyeShjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcpCiAJCSAqIFN0 YXJ0IHRoZSBwb3J0YWwuICBObyBwYXJhbWV0ZXJzIGhlcmUuCiAJCSAqLwogCQlQb3J0YWxTdGFy dChwb3J0YWwsIE5VTEwsIDAsIEludmFsaWRTbmFwc2hvdCk7CisJCUFzc2VydChwb3J0YWwtPnBs YW5fdmFsaWQpOwogCiAJCS8qCiAJCSAqIFNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgb3V0cHV0IGZv cm1hdDogdGV4dCB1bmxlc3Mgd2UgYXJlIGRvaW5nIGEKQEAgLTE3MDAsNiArMTcwMSw3IEBAIGV4 ZWNfYmluZF9tZXNzYWdlKFN0cmluZ0luZm8gaW5wdXRfbWVzc2FnZSkKIAkJCQkJCSJjb21tYW5k cyBpZ25vcmVkIHVudGlsIGVuZCBvZiB0cmFuc2FjdGlvbiBibG9jayIpLAogCQkJCSBlcnJkZXRh aWxfYWJvcnQoKSkpOwogCityZXBsYW46CiAJLyoKIAkgKiBDcmVhdGUgdGhlIHBvcnRhbC4gIEFs bG93IHNpbGVudCByZXBsYWNlbWVudCBvZiBhbiBleGlzdGluZyBwb3J0YWwgb25seQogCSAqIGlm IHRoZSB1bm5hbWVkIHBvcnRhbCBpcyBzcGVjaWZpZWQuCkBAIC0xOTk1LDYgKzE5OTcsMTIgQEAg ZXhlY19iaW5kX21lc3NhZ2UoU3RyaW5nSW5mbyBpbnB1dF9tZXNzYWdlKQogCSAqLwogCVBvcnRh bFN0YXJ0KHBvcnRhbCwgcGFyYW1zLCAwLCBJbnZhbGlkU25hcHNob3QpOwogCisJaWYgKCFwb3J0 YWwtPnBsYW5fdmFsaWQpCisJeworCQlQb3J0YWxEcm9wKHBvcnRhbCwgZmFsc2UpOworCQlnb3Rv IHJlcGxhbjsKKwl9CisKIAkvKgogCSAqIEFwcGx5IHRoZSByZXN1bHQgZm9ybWF0IHJlcXVlc3Rz IHRvIHRoZSBwb3J0YWwuCiAJICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3BxdWVy eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYwppbmRleCA1ZjAyNDhhY2M1Li5jZjNhOTc5 MGQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3BxdWVyeS5jCisrKyBiL3NyYy9iYWNr ZW5kL3Rjb3AvcHF1ZXJ5LmMKQEAgLTE5LDYgKzE5LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy94 YWN0LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgorI2luY2x1ZGUgImV4ZWN1dG9y L2V4ZWNkZXNjLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvdHN0b3JlUmVjZWl2ZXIuaCIKICNpbmNs dWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ190cmFjZS5oIgpAQCAtMzUsMTIgKzM2LDYg QEAKIFBvcnRhbAkJQWN0aXZlUG9ydGFsID0gTlVMTDsKIAogCi1zdGF0aWMgdm9pZCBQcm9jZXNz UXVlcnkoUGxhbm5lZFN0bXQgKnBsYW4sCi0JCQkJCQkgY29uc3QgY2hhciAqc291cmNlVGV4dCwK LQkJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKLQkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpx dWVyeUVudiwKLQkJCQkJCSBEZXN0UmVjZWl2ZXIgKmRlc3QsCi0JCQkJCQkgUXVlcnlDb21wbGV0 aW9uICpxYyk7CiBzdGF0aWMgdm9pZCBGaWxsUG9ydGFsU3RvcmUoUG9ydGFsIHBvcnRhbCwgYm9v bCBpc1RvcExldmVsKTsKIHN0YXRpYyB1aW50NjQgUnVuRnJvbVN0b3JlKFBvcnRhbCBwb3J0YWws IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCB1aW50NjQgY291bnQsCiAJCQkJCQkgICBEZXN0UmVj ZWl2ZXIgKmRlc3QpOwpAQCAtNjUsNiArNjAsNyBAQCBzdGF0aWMgdm9pZCBEb1BvcnRhbFJld2lu ZChQb3J0YWwgcG9ydGFsKTsKICAqLwogUXVlcnlEZXNjICoKIENyZWF0ZVF1ZXJ5RGVzYyhQbGFu bmVkU3RtdCAqcGxhbm5lZHN0bXQsCisJCQkJQ2FjaGVkUGxhbiAqY3BsYW4sCiAJCQkJY29uc3Qg Y2hhciAqc291cmNlVGV4dCwKIAkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQlTbmFwc2hvdCBj cm9zc2NoZWNrX3NuYXBzaG90LApAQCAtNzUsOCArNzEsMTAgQEAgQ3JlYXRlUXVlcnlEZXNjKFBs YW5uZWRTdG10ICpwbGFubmVkc3RtdCwKIHsKIAlRdWVyeURlc2MgICpxZCA9IChRdWVyeURlc2Mg KikgcGFsbG9jKHNpemVvZihRdWVyeURlc2MpKTsKIAorCXFkLT50eXBlID0gVF9RdWVyeURlc2M7 CiAJcWQtPm9wZXJhdGlvbiA9IHBsYW5uZWRzdG10LT5jb21tYW5kVHlwZTsJLyogb3BlcmF0aW9u ICovCiAJcWQtPnBsYW5uZWRzdG10ID0gcGxhbm5lZHN0bXQ7CS8qIHBsYW4gKi8KKwlxZC0+Y3Bs YW4gPSBjcGxhbjsJCQkJLyogQ2FjaGVkUGxhbiwgaWYgcGxhbiBpcyBmcm9tIG9uZSAqLwogCXFk LT5zb3VyY2VUZXh0ID0gc291cmNlVGV4dDsJLyogcXVlcnkgdGV4dCAqLwogCXFkLT5zbmFwc2hv dCA9IFJlZ2lzdGVyU25hcHNob3Qoc25hcHNob3QpOwkvKiBzbmFwc2hvdCAqLwogCS8qIFJJIGNo ZWNrIHNuYXBzaG90ICovCkBAIC0xMTYsODYgKzExNCw2IEBAIEZyZWVRdWVyeURlc2MoUXVlcnlE ZXNjICpxZGVzYykKIH0KIAogCi0vKgotICogUHJvY2Vzc1F1ZXJ5Ci0gKgkJRXhlY3V0ZSBhIHNp bmdsZSBwbGFubmFibGUgcXVlcnkgd2l0aGluIGEgUE9SVEFMX01VTFRJX1FVRVJZLAotICoJCVBP UlRBTF9PTkVfUkVUVVJOSU5HLCBvciBQT1JUQUxfT05FX01PRF9XSVRIIHBvcnRhbAotICoKLSAq CXBsYW46IHRoZSBwbGFuIHRyZWUgZm9yIHRoZSBxdWVyeQotICoJc291cmNlVGV4dDogdGhlIHNv dXJjZSB0ZXh0IG9mIHRoZSBxdWVyeQotICoJcGFyYW1zOiBhbnkgcGFyYW1ldGVycyBuZWVkZWQK LSAqCWRlc3Q6IHdoZXJlIHRvIHNlbmQgcmVzdWx0cwotICoJcWM6IHdoZXJlIHRvIHN0b3JlIHRo ZSBjb21tYW5kIGNvbXBsZXRpb24gc3RhdHVzIGRhdGEuCi0gKgotICogcWMgbWF5IGJlIE5VTEwg aWYgY2FsbGVyIGRvZXNuJ3Qgd2FudCBhIHN0YXR1cyBzdHJpbmcuCi0gKgotICogTXVzdCBiZSBj YWxsZWQgaW4gYSBtZW1vcnkgY29udGV4dCB0aGF0IHdpbGwgYmUgcmVzZXQgb3IgZGVsZXRlZCBv bgotICogZXJyb3I7IG90aGVyd2lzZSB0aGUgZXhlY3V0b3IncyBtZW1vcnkgdXNhZ2Ugd2lsbCBi ZSBsZWFrZWQuCi0gKi8KLXN0YXRpYyB2b2lkCi1Qcm9jZXNzUXVlcnkoUGxhbm5lZFN0bXQgKnBs YW4sCi0JCQkgY29uc3QgY2hhciAqc291cmNlVGV4dCwKLQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFt cywKLQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKLQkJCSBEZXN0UmVjZWl2ZXIgKmRl c3QsCi0JCQkgUXVlcnlDb21wbGV0aW9uICpxYykKLXsKLQlRdWVyeURlc2MgICpxdWVyeURlc2M7 Ci0KLQkvKgotCSAqIENyZWF0ZSB0aGUgUXVlcnlEZXNjIG9iamVjdAotCSAqLwotCXF1ZXJ5RGVz YyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBzb3VyY2VUZXh0LAotCQkJCQkJCQlHZXRBY3RpdmVT bmFwc2hvdCgpLCBJbnZhbGlkU25hcHNob3QsCi0JCQkJCQkJCWRlc3QsIHBhcmFtcywgcXVlcnlF bnYsIDApOwotCi0JLyoKLQkgKiBDYWxsIEV4ZWN1dG9yU3RhcnQgdG8gcHJlcGFyZSB0aGUgcGxh biBmb3IgZXhlY3V0aW9uCi0JICovCi0JRXhlY3V0b3JTdGFydChxdWVyeURlc2MsIDApOwotCi0J LyoKLQkgKiBSdW4gdGhlIHBsYW4gdG8gY29tcGxldGlvbi4KLQkgKi8KLQlFeGVjdXRvclJ1bihx dWVyeURlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCAwTCwgdHJ1ZSk7Ci0KLQkvKgotCSAqIEJ1 aWxkIGNvbW1hbmQgY29tcGxldGlvbiBzdGF0dXMgZGF0YSwgaWYgY2FsbGVyIHdhbnRzIG9uZS4K LQkgKi8KLQlpZiAocWMpCi0JewotCQlzd2l0Y2ggKHF1ZXJ5RGVzYy0+b3BlcmF0aW9uKQotCQl7 Ci0JCQljYXNlIENNRF9TRUxFQ1Q6Ci0JCQkJU2V0UXVlcnlDb21wbGV0aW9uKHFjLCBDTURUQUdf U0VMRUNULCBxdWVyeURlc2MtPmVzdGF0ZS0+ZXNfcHJvY2Vzc2VkKTsKLQkJCQlicmVhazsKLQkJ CWNhc2UgQ01EX0lOU0VSVDoKLQkJCQlTZXRRdWVyeUNvbXBsZXRpb24ocWMsIENNRFRBR19JTlNF UlQsIHF1ZXJ5RGVzYy0+ZXN0YXRlLT5lc19wcm9jZXNzZWQpOwotCQkJCWJyZWFrOwotCQkJY2Fz ZSBDTURfVVBEQVRFOgotCQkJCVNldFF1ZXJ5Q29tcGxldGlvbihxYywgQ01EVEFHX1VQREFURSwg cXVlcnlEZXNjLT5lc3RhdGUtPmVzX3Byb2Nlc3NlZCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIENN RF9ERUxFVEU6Ci0JCQkJU2V0UXVlcnlDb21wbGV0aW9uKHFjLCBDTURUQUdfREVMRVRFLCBxdWVy eURlc2MtPmVzdGF0ZS0+ZXNfcHJvY2Vzc2VkKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQ01EX01F UkdFOgotCQkJCVNldFF1ZXJ5Q29tcGxldGlvbihxYywgQ01EVEFHX01FUkdFLCBxdWVyeURlc2Mt PmVzdGF0ZS0+ZXNfcHJvY2Vzc2VkKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJU2V0 UXVlcnlDb21wbGV0aW9uKHFjLCBDTURUQUdfVU5LTk9XTiwgcXVlcnlEZXNjLT5lc3RhdGUtPmVz X3Byb2Nlc3NlZCk7Ci0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIE5vdywgd2UgY2xv c2UgZG93biBhbGwgdGhlIHNjYW5zIGFuZCBmcmVlIGFsbG9jYXRlZCByZXNvdXJjZXMuCi0JICov Ci0JRXhlY3V0b3JGaW5pc2gocXVlcnlEZXNjKTsKLQlFeGVjdXRvckVuZChxdWVyeURlc2MpOwot Ci0JRnJlZVF1ZXJ5RGVzYyhxdWVyeURlc2MpOwotfQotCiAvKgogICogQ2hvb3NlUG9ydGFsU3Ry YXRlZ3kKICAqCQlTZWxlY3QgcG9ydGFsIGV4ZWN1dGlvbiBzdHJhdGVneSBnaXZlbiB0aGUgaW50 ZW5kZWQgc3RhdGVtZW50IGxpc3QuCkBAIC00MjcsNyArMzQ1LDggQEAgRmV0Y2hTdGF0ZW1lbnRU YXJnZXRMaXN0KE5vZGUgKnN0bXQpCiAgKiB0byBiZSB1c2VkIGZvciBjdXJzb3JzKS4KICAqCiAg KiBPbiByZXR1cm4sIHBvcnRhbCBpcyByZWFkeSB0byBhY2NlcHQgUG9ydGFsUnVuKCkgY2FsbHMs IGFuZCB0aGUgcmVzdWx0Ci0gKiB0dXBkZXNjIChpZiBhbnkpIGlzIGtub3duLgorICogdHVwZGVz YyAoaWYgYW55KSBpcyBrbm93biwgdW5sZXNzIHBvcnRhbC0+cGxhbl92YWxpZCBpcyBzZXQgdG8g ZmFsc2UsIGluCisgKiB3aGljaCBjYXNlLCB0aGUgY2FsbGVyIG11c3QgcmV0cnkgYWZ0ZXIgZ2Vu ZXJhdGluZyBhIG5ldyBDYWNoZWRQbGFuLgogICovCiB2b2lkCiBQb3J0YWxTdGFydChQb3J0YWwg cG9ydGFsLCBQYXJhbUxpc3RJbmZvIHBhcmFtcywKQEAgLTQzNSw3ICszNTQsNiBAQCBQb3J0YWxT dGFydChQb3J0YWwgcG9ydGFsLCBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIHsKIAlQb3J0YWwJCXNh dmVBY3RpdmVQb3J0YWw7CiAJUmVzb3VyY2VPd25lciBzYXZlUmVzb3VyY2VPd25lcjsKLQlNZW1v cnlDb250ZXh0IHNhdmVQb3J0YWxDb250ZXh0OwogCU1lbW9yeUNvbnRleHQgb2xkQ29udGV4dDsK IAlRdWVyeURlc2MgICpxdWVyeURlc2M7CiAJaW50CQkJbXllZmxhZ3M7CkBAIC00NDgsMTUgKzM2 NiwxMyBAQCBQb3J0YWxTdGFydChQb3J0YWwgcG9ydGFsLCBQYXJhbUxpc3RJbmZvIHBhcmFtcywK IAkgKi8KIAlzYXZlQWN0aXZlUG9ydGFsID0gQWN0aXZlUG9ydGFsOwogCXNhdmVSZXNvdXJjZU93 bmVyID0gQ3VycmVudFJlc291cmNlT3duZXI7Ci0Jc2F2ZVBvcnRhbENvbnRleHQgPSBQb3J0YWxD b250ZXh0OwogCVBHX1RSWSgpOwogCXsKIAkJQWN0aXZlUG9ydGFsID0gcG9ydGFsOwogCQlpZiAo cG9ydGFsLT5yZXNvd25lcikKIAkJCUN1cnJlbnRSZXNvdXJjZU93bmVyID0gcG9ydGFsLT5yZXNv d25lcjsKLQkJUG9ydGFsQ29udGV4dCA9IHBvcnRhbC0+cG9ydGFsQ29udGV4dDsKIAotCQlvbGRD b250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFBvcnRhbENvbnRleHQpOworCQlvbGRDb250 ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBvcnRhbC0+cXVlcnlDb250ZXh0KTsKIAogCQkv KiBNdXN0IHJlbWVtYmVyIHBvcnRhbCBwYXJhbSBsaXN0LCBpZiBhbnkgKi8KIAkJcG9ydGFsLT5w b3J0YWxQYXJhbXMgPSBwYXJhbXM7CkBAIC00NzIsNiArMzg4LDggQEAgUG9ydGFsU3RhcnQoUG9y dGFsIHBvcnRhbCwgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCiAJCXN3aXRjaCAocG9ydGFsLT5zdHJh dGVneSkKIAkJewogCQkJY2FzZSBQT1JUQUxfT05FX1NFTEVDVDoKKwkJCWNhc2UgUE9SVEFMX09O RV9SRVRVUk5JTkc6CisJCQljYXNlIFBPUlRBTF9PTkVfTU9EX1dJVEg6CiAKIAkJCQkvKiBNdXN0 IHNldCBzbmFwc2hvdCBiZWZvcmUgc3RhcnRpbmcgZXhlY3V0b3IuICovCiAJCQkJaWYgKHNuYXBz aG90KQpAQCAtNDkzLDYgKzQxMSw3IEBAIFBvcnRhbFN0YXJ0KFBvcnRhbCBwb3J0YWwsIFBhcmFt TGlzdEluZm8gcGFyYW1zLAogCQkJCSAqIHRoZSBkZXN0aW5hdGlvbiB0byBEZXN0Tm9uZS4KIAkJ CQkgKi8KIAkJCQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MobGluaXRpYWxfbm9kZShQbGFu bmVkU3RtdCwgcG9ydGFsLT5zdG10cyksCisJCQkJCQkJCQkJCXBvcnRhbC0+Y3BsYW4sCiAJCQkJ CQkJCQkJCXBvcnRhbC0+c291cmNlVGV4dCwKIAkJCQkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3Qo KSwKIAkJCQkJCQkJCQkJSW52YWxpZFNuYXBzaG90LApAQCAtNTAxLDMwICs0MjAsNTAgQEAgUG9y dGFsU3RhcnQoUG9ydGFsIHBvcnRhbCwgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCiAJCQkJCQkJCQkJ CXBvcnRhbC0+cXVlcnlFbnYsCiAJCQkJCQkJCQkJCTApOwogCisJCQkJLyogUmVtZW1iZXIgZm9y IFBvcnRhbFJ1bk11bHRpKCkgKi8KKwkJCQlwb3J0YWwtPnFkZXNjcyA9IGxhcHBlbmQocG9ydGFs LT5xZGVzY3MsIHF1ZXJ5RGVzYyk7CisKIAkJCQkvKgogCQkJCSAqIElmIGl0J3MgYSBzY3JvbGxh YmxlIGN1cnNvciwgZXhlY3V0b3IgbmVlZHMgdG8gc3VwcG9ydAogCQkJCSAqIFJFV0lORCBhbmQg YmFja3dhcmRzIHNjYW4sIGFzIHdlbGwgYXMgd2hhdGV2ZXIgdGhlIGNhbGxlcgogCQkJCSAqIG1p Z2h0J3ZlIGFza2VkIGZvci4KIAkJCQkgKi8KLQkJCQlpZiAocG9ydGFsLT5jdXJzb3JPcHRpb25z ICYgQ1VSU09SX09QVF9TQ1JPTEwpCisJCQkJaWYgKHBvcnRhbC0+c3RyYXRlZ3kgPT0gUE9SVEFM X09ORV9TRUxFQ1QgJiYKKwkJCQkJKHBvcnRhbC0+Y3Vyc29yT3B0aW9ucyAmIENVUlNPUl9PUFRf U0NST0xMKSkKIAkJCQkJbXllZmxhZ3MgPSBlZmxhZ3MgfCBFWEVDX0ZMQUdfUkVXSU5EIHwgRVhF Q19GTEFHX0JBQ0tXQVJEOwogCQkJCWVsc2UKIAkJCQkJbXllZmxhZ3MgPSBlZmxhZ3M7CiAKIAkJ CQkvKgotCQkJCSAqIENhbGwgRXhlY3V0b3JTdGFydCB0byBwcmVwYXJlIHRoZSBwbGFuIGZvciBl eGVjdXRpb24KKwkJCQkgKiBDYWxsIEV4ZWN1dG9yU3RhcnQgdG8gcHJlcGFyZSB0aGUgcGxhbiBm b3IgZXhlY3V0aW9uLiAgQQorCQkJCSAqIGNhY2hlZCBwbGFuIG1heSBnZXQgaW52YWxpZGF0ZWQg YXMgd2UncmUgZG9pbmcgdGhhdC4KIAkJCQkgKi8KIAkJCQlFeGVjdXRvclN0YXJ0KHF1ZXJ5RGVz YywgbXllZmxhZ3MpOworCQkJCWlmICghcXVlcnlEZXNjLT5wbGFuX3ZhbGlkKQorCQkJCXsKKwkJ CQkJQXNzZXJ0KHF1ZXJ5RGVzYy0+Y3BsYW4pOworCQkJCQlQb3J0YWxRdWVyeUZpbmlzaChxdWVy eURlc2MpOworCQkJCQlQb3BBY3RpdmVTbmFwc2hvdCgpOworCQkJCQlwb3J0YWwtPnBsYW5fdmFs aWQgPSBmYWxzZTsKKwkJCQkJZ290byBlYXJseV9leGl0OworCQkJCX0KIAogCQkJCS8qCi0JCQkJ ICogVGhpcyB0ZWxscyBQb3J0YWxDbGVhbnVwIHRvIHNodXQgZG93biB0aGUgZXhlY3V0b3IKKwkJ CQkgKiBUaGlzIHRlbGxzIFBvcnRhbENsZWFudXAgdG8gc2h1dCBkb3duIHRoZSBleGVjdXRvciwg dGhvdWdoCisJCQkJICogbm90IG5lZWRlZCBmb3IgcXVlcmllcyBoYW5kbGVkIGJ5IFBvcnRhbFJ1 bk11bHRpKCkuCiAJCQkJICovCi0JCQkJcG9ydGFsLT5xdWVyeURlc2MgPSBxdWVyeURlc2M7CisJ CQkJaWYgKHBvcnRhbC0+c3RyYXRlZ3kgPT0gUE9SVEFMX09ORV9TRUxFQ1QpCisJCQkJCXBvcnRh bC0+cXVlcnlEZXNjID0gcXVlcnlEZXNjOwogCiAJCQkJLyoKLQkJCQkgKiBSZW1lbWJlciB0dXBs ZSBkZXNjcmlwdG9yIChjb21wdXRlZCBieSBFeGVjdXRvclN0YXJ0KQorCQkJCSAqIFJlbWVtYmVy IHR1cGxlIGRlc2NyaXB0b3IgKGNvbXB1dGVkIGJ5IEV4ZWN1dG9yU3RhcnQpLAorCQkJCSAqIHRo b3VnaCBtYWtlIGl0IGluZGVwZW5kZW50IG9mIFF1ZXJ5RGVzYyBmb3IgcXVlcmllcyBoYW5kbGVk CisJCQkJICogYnkgUG9ydGFsUnVuTXVsdGkoKS4KIAkJCQkgKi8KLQkJCQlwb3J0YWwtPnR1cERl c2MgPSBxdWVyeURlc2MtPnR1cERlc2M7CisJCQkJaWYgKHBvcnRhbC0+c3RyYXRlZ3kgIT0gUE9S VEFMX09ORV9TRUxFQ1QpCisJCQkJCXBvcnRhbC0+dHVwRGVzYyA9IENyZWF0ZVR1cGxlRGVzY0Nv cHkocXVlcnlEZXNjLT50dXBEZXNjKTsKKwkJCQllbHNlCisJCQkJCXBvcnRhbC0+dHVwRGVzYyA9 IHF1ZXJ5RGVzYy0+dHVwRGVzYzsKIAogCQkJCS8qCiAJCQkJICogUmVzZXQgY3Vyc29yIHBvc2l0 aW9uIGRhdGEgdG8gInN0YXJ0IG9mIHF1ZXJ5IgpAQCAtNTMyLDMzICs0NzEsMTEgQEAgUG9ydGFs U3RhcnQoUG9ydGFsIHBvcnRhbCwgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCiAJCQkJcG9ydGFsLT5h dFN0YXJ0ID0gdHJ1ZTsKIAkJCQlwb3J0YWwtPmF0RW5kID0gZmFsc2U7CS8qIGFsbG93IGZldGNo ZXMgKi8KIAkJCQlwb3J0YWwtPnBvcnRhbFBvcyA9IDA7CisJCQkJcG9ydGFsLT5wbGFuX3ZhbGlk ID0gdHJ1ZTsKIAogCQkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiAJCQkJYnJlYWs7CiAKLQkJCWNh c2UgUE9SVEFMX09ORV9SRVRVUk5JTkc6Ci0JCQljYXNlIFBPUlRBTF9PTkVfTU9EX1dJVEg6Ci0K LQkJCQkvKgotCQkJCSAqIFdlIGRvbid0IHN0YXJ0IHRoZSBleGVjdXRvciB1bnRpbCB3ZSBhcmUg dG9sZCB0byBydW4gdGhlCi0JCQkJICogcG9ydGFsLiAgV2UgZG8gbmVlZCB0byBzZXQgdXAgdGhl IHJlc3VsdCB0dXBkZXNjLgotCQkJCSAqLwotCQkJCXsKLQkJCQkJUGxhbm5lZFN0bXQgKnBzdG10 OwotCi0JCQkJCXBzdG10ID0gUG9ydGFsR2V0UHJpbWFyeVN0bXQocG9ydGFsKTsKLQkJCQkJcG9y dGFsLT50dXBEZXNjID0KLQkJCQkJCUV4ZWNDbGVhblR5cGVGcm9tVEwocHN0bXQtPnBsYW5UcmVl LT50YXJnZXRsaXN0KTsKLQkJCQl9Ci0KLQkJCQkvKgotCQkJCSAqIFJlc2V0IGN1cnNvciBwb3Np dGlvbiBkYXRhIHRvICJzdGFydCBvZiBxdWVyeSIKLQkJCQkgKi8KLQkJCQlwb3J0YWwtPmF0U3Rh cnQgPSB0cnVlOwotCQkJCXBvcnRhbC0+YXRFbmQgPSBmYWxzZTsJLyogYWxsb3cgZmV0Y2hlcyAq LwotCQkJCXBvcnRhbC0+cG9ydGFsUG9zID0gMDsKLQkJCQlicmVhazsKLQogCQkJY2FzZSBQT1JU QUxfVVRJTF9TRUxFQ1Q6CiAKIAkJCQkvKgpAQCAtNTc4LDExICs0OTUsNjkgQEAgUG9ydGFsU3Rh cnQoUG9ydGFsIHBvcnRhbCwgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCiAJCQkJcG9ydGFsLT5hdFN0 YXJ0ID0gdHJ1ZTsKIAkJCQlwb3J0YWwtPmF0RW5kID0gZmFsc2U7CS8qIGFsbG93IGZldGNoZXMg Ki8KIAkJCQlwb3J0YWwtPnBvcnRhbFBvcyA9IDA7CisJCQkJcG9ydGFsLT5wbGFuX3ZhbGlkID0g dHJ1ZTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBQT1JUQUxfTVVMVElfUVVFUlk6Ci0JCQkJLyog TmVlZCBkbyBub3RoaW5nIG5vdyAqLworCQkJCXsKKwkJCQkJTGlzdENlbGwgICAqbGM7CisJCQkJ CWJvb2wJCXB1c2hlZF9hY3RpdmVfc25hcHNob3QgPSBmYWxzZTsKKworCQkJCQlmb3JlYWNoKGxj LCBwb3J0YWwtPnN0bXRzKQorCQkJCQl7CisJCQkJCQlQbGFubmVkU3RtdCAqcGxhbiA9IGxmaXJz dF9ub2RlKFBsYW5uZWRTdG10LCBsYyk7CisJCQkJCQlib29sCQlpc191dGlsaXR5ID0gKHBsYW4t PnV0aWxpdHlTdG10ICE9IE5VTEwpOworCisJCQkJCQkvKiBNdXN0IHNldCBzbmFwc2hvdCBiZWZv cmUgc3RhcnRpbmcgZXhlY3V0b3IuICovCisJCQkJCQlpZiAoIXB1c2hlZF9hY3RpdmVfc25hcHNo b3QgJiYgIWlzX3V0aWxpdHkpCisJCQkJCQl7CisJCQkJCQkJUHVzaEFjdGl2ZVNuYXBzaG90KEdl dFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJCQkJCQkJcHVzaGVkX2FjdGl2ZV9zbmFwc2hvdCA9 IHRydWU7CisJCQkJCQl9CisKKwkJCQkJCS8qCisJCQkJCQkgKiBDcmVhdGUgdGhlIFF1ZXJ5RGVz YyBvYmplY3QuICBEZXN0UmVjZWl2ZXIgd2lsbAorCQkJCQkJICogYmUgc2V0IGluIFBvcnRhbFJ1 bk11bHRpKCkuCisJCQkJCQkgKi8KKwkJCQkJCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhw bGFuLCBwb3J0YWwtPmNwbGFuLAorCQkJCQkJCQkJCQkJCXBvcnRhbC0+c291cmNlVGV4dCwKKwkJ CQkJCQkJCQkJCQlwdXNoZWRfYWN0aXZlX3NuYXBzaG90ID8KKwkJCQkJCQkJCQkJCQlHZXRBY3Rp dmVTbmFwc2hvdCgpIDoKKwkJCQkJCQkJCQkJCQlJbnZhbGlkU25hcHNob3QsCisJCQkJCQkJCQkJ CQkJSW52YWxpZFNuYXBzaG90LAorCQkJCQkJCQkJCQkJCU5VTEwsCisJCQkJCQkJCQkJCQkJcGFy YW1zLAorCQkJCQkJCQkJCQkJCXBvcnRhbC0+cXVlcnlFbnYsIDApOworCisJCQkJCQkvKiBSZW1l bWJlciBmb3IgUG9ydGFsTXVsdGlSdW4oKSAqLworCQkJCQkJcG9ydGFsLT5xZGVzY3MgPSBsYXBw ZW5kKHBvcnRhbC0+cWRlc2NzLCBxdWVyeURlc2MpOworCisJCQkJCQkvKgorCQkJCQkJICogQ2Fs bCBFeGVjdXRvclN0YXJ0IHRvIHByZXBhcmUgdGhlIHBsYW4gZm9yCisJCQkJCQkgKiBleGVjdXRp b24uICBBIGNhY2hlZCBwbGFuIG1heSBnZXQgaW52YWxpZGF0ZWQgYXMKKwkJCQkJCSAqIHdlJ3Jl IGRvaW5nIHRoYXQuCisJCQkJCQkgKi8KKwkJCQkJCWlmICghaXNfdXRpbGl0eSkKKwkJCQkJCXsK KwkJCQkJCQlFeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgMCk7CisJCQkJCQkJaWYgKCFxdWVyeURl c2MtPnBsYW5fdmFsaWQpCisJCQkJCQkJeworCQkJCQkJCQlBc3NlcnQocXVlcnlEZXNjLT5jcGxh bik7CisJCQkJCQkJCVBvcnRhbFF1ZXJ5RmluaXNoKHF1ZXJ5RGVzYyk7CisJCQkJCQkJCWlmIChw dXNoZWRfYWN0aXZlX3NuYXBzaG90KQorCQkJCQkJCQkJUG9wQWN0aXZlU25hcHNob3QoKTsKKwkJ CQkJCQkJcG9ydGFsLT5wbGFuX3ZhbGlkID0gZmFsc2U7CisJCQkJCQkJCWdvdG8gZWFybHlfZXhp dDsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlpZiAocHVzaGVkX2FjdGl2ZV9z bmFwc2hvdCkKKwkJCQkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisJCQkJfQorCiAJCQkJcG9ydGFs LT50dXBEZXNjID0gTlVMTDsKKwkJCQlwb3J0YWwtPnBsYW5fdmFsaWQgPSB0cnVlOwogCQkJCWJy ZWFrOwogCQl9CiAJfQpAQCAtNTk0LDE5ICs1NjksMTggQEAgUG9ydGFsU3RhcnQoUG9ydGFsIHBv cnRhbCwgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCiAJCS8qIFJlc3RvcmUgZ2xvYmFsIHZhcnMgYW5k IHByb3BhZ2F0ZSBlcnJvciAqLwogCQlBY3RpdmVQb3J0YWwgPSBzYXZlQWN0aXZlUG9ydGFsOwog CQlDdXJyZW50UmVzb3VyY2VPd25lciA9IHNhdmVSZXNvdXJjZU93bmVyOwotCQlQb3J0YWxDb250 ZXh0ID0gc2F2ZVBvcnRhbENvbnRleHQ7CiAKIAkJUEdfUkVfVEhST1coKTsKIAl9CiAJUEdfRU5E X1RSWSgpOwogCisJcG9ydGFsLT5zdGF0dXMgPSBQT1JUQUxfUkVBRFk7CisKK2Vhcmx5X2V4aXQ6 CiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZENvbnRleHQpOwogCiAJQWN0aXZlUG9ydGFsID0g c2F2ZUFjdGl2ZVBvcnRhbDsKIAlDdXJyZW50UmVzb3VyY2VPd25lciA9IHNhdmVSZXNvdXJjZU93 bmVyOwotCVBvcnRhbENvbnRleHQgPSBzYXZlUG9ydGFsQ29udGV4dDsKLQotCXBvcnRhbC0+c3Rh dHVzID0gUE9SVEFMX1JFQURZOwogfQogCiAvKgpAQCAtMTE5Myw3ICsxMTY3LDcgQEAgUG9ydGFs UnVuTXVsdGkoUG9ydGFsIHBvcnRhbCwKIAkJCSAgIFF1ZXJ5Q29tcGxldGlvbiAqcWMpCiB7CiAJ Ym9vbAkJYWN0aXZlX3NuYXBzaG90X3NldCA9IGZhbHNlOwotCUxpc3RDZWxsICAgKnN0bXRsaXN0 X2l0ZW07CisJTGlzdENlbGwgICAqcWRlc2NfaXRlbTsKIAogCS8qCiAJICogSWYgdGhlIGRlc3Rp bmF0aW9uIGlzIERlc3RSZW1vdGVFeGVjdXRlLCBjaGFuZ2UgdG8gRGVzdE5vbmUuICBUaGUKQEAg LTEyMTQsOSArMTE4OCwxMCBAQCBQb3J0YWxSdW5NdWx0aShQb3J0YWwgcG9ydGFsLAogCSAqIExv b3AgdG8gaGFuZGxlIHRoZSBpbmRpdmlkdWFsIHF1ZXJpZXMgZ2VuZXJhdGVkIGZyb20gYSBzaW5n bGUgcGFyc2V0cmVlCiAJICogYnkgYW5hbHlzaXMgYW5kIHJld3JpdGUuCiAJICovCi0JZm9yZWFj aChzdG10bGlzdF9pdGVtLCBwb3J0YWwtPnN0bXRzKQorCWZvcmVhY2gocWRlc2NfaXRlbSwgcG9y dGFsLT5xZGVzY3MpCiAJewotCQlQbGFubmVkU3RtdCAqcHN0bXQgPSBsZmlyc3Rfbm9kZShQbGFu bmVkU3RtdCwgc3RtdGxpc3RfaXRlbSk7CisJCVF1ZXJ5RGVzYyAqcWRlc2MgPSBsZmlyc3Rfbm9k ZShRdWVyeURlc2MsIHFkZXNjX2l0ZW0pOworCQlQbGFubmVkU3RtdCAqcHN0bXQgPSBxZGVzYy0+ cGxhbm5lZHN0bXQ7CiAKIAkJLyoKIAkJICogSWYgd2UgZ290IGEgY2FuY2VsIHNpZ25hbCBpbiBw cmlvciBjb21tYW5kLCBxdWl0CkBAIC0xMjQxLDcgKzEyMTYsNyBAQCBQb3J0YWxSdW5NdWx0aShQ b3J0YWwgcG9ydGFsLAogCQkJICovCiAJCQlpZiAoIWFjdGl2ZV9zbmFwc2hvdF9zZXQpCiAJCQl7 Ci0JCQkJU25hcHNob3QJc25hcHNob3QgPSBHZXRUcmFuc2FjdGlvblNuYXBzaG90KCk7CisJCQkJ U25hcHNob3QgICAgc25hcHNob3QgPSBxZGVzYy0+c25hcHNob3Q7CiAKIAkJCQkvKiBJZiB0b2xk IHRvLCByZWdpc3RlciB0aGUgc25hcHNob3QgYW5kIHNhdmUgaW4gcG9ydGFsICovCiAJCQkJaWYg KHNldEhvbGRTbmFwc2hvdCkKQEAgLTEyNzEsMjMgKzEyNDYsMzggQEAgUG9ydGFsUnVuTXVsdGko UG9ydGFsIHBvcnRhbCwKIAkJCWVsc2UKIAkJCQlVcGRhdGVBY3RpdmVTbmFwc2hvdENvbW1hbmRJ ZCgpOwogCisJCQkvKgorCQkJICogUnVuIHRoZSBwbGFuIHRvIGNvbXBsZXRpb24uCisJCQkgKi8K KwkJCXFkZXNjLT5kZXN0ID0gZGVzdDsKKwkJCUV4ZWN1dG9yUnVuKHFkZXNjLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbiwgMEwsIHRydWUpOworCisJCQkvKgorCQkJICogQnVpbGQgY29tbWFuZCBjb21w bGV0aW9uIHN0YXR1cyBkYXRhIGlmIG5lZWRlZC4KKwkJCSAqLwogCQkJaWYgKHBzdG10LT5jYW5T ZXRUYWcpCiAJCQl7Ci0JCQkJLyogc3RhdGVtZW50IGNhbiBzZXQgdGFnIHN0cmluZyAqLwotCQkJ CVByb2Nlc3NRdWVyeShwc3RtdCwKLQkJCQkJCQkgcG9ydGFsLT5zb3VyY2VUZXh0LAotCQkJCQkJ CSBwb3J0YWwtPnBvcnRhbFBhcmFtcywKLQkJCQkJCQkgcG9ydGFsLT5xdWVyeUVudiwKLQkJCQkJ CQkgZGVzdCwgcWMpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qIHN0bXQgYWRkZWQgYnkg cmV3cml0ZSBjYW5ub3Qgc2V0IHRhZyAqLwotCQkJCVByb2Nlc3NRdWVyeShwc3RtdCwKLQkJCQkJ CQkgcG9ydGFsLT5zb3VyY2VUZXh0LAotCQkJCQkJCSBwb3J0YWwtPnBvcnRhbFBhcmFtcywKLQkJ CQkJCQkgcG9ydGFsLT5xdWVyeUVudiwKLQkJCQkJCQkgYWx0ZGVzdCwgTlVMTCk7CisJCQkJc3dp dGNoIChxZGVzYy0+b3BlcmF0aW9uKQorCQkJCXsKKwkJCQkJY2FzZSBDTURfU0VMRUNUOgorCQkJ CQkJU2V0UXVlcnlDb21wbGV0aW9uKHFjLCBDTURUQUdfU0VMRUNULCBxZGVzYy0+ZXN0YXRlLT5l c19wcm9jZXNzZWQpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgQ01EX0lOU0VSVDoKKwkJCQkJ CVNldFF1ZXJ5Q29tcGxldGlvbihxYywgQ01EVEFHX0lOU0VSVCwgcWRlc2MtPmVzdGF0ZS0+ZXNf cHJvY2Vzc2VkKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIENNRF9VUERBVEU6CisJCQkJCQlT ZXRRdWVyeUNvbXBsZXRpb24ocWMsIENNRFRBR19VUERBVEUsIHFkZXNjLT5lc3RhdGUtPmVzX3By b2Nlc3NlZCk7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBDTURfREVMRVRFOgorCQkJCQkJU2V0 UXVlcnlDb21wbGV0aW9uKHFjLCBDTURUQUdfREVMRVRFLCBxZGVzYy0+ZXN0YXRlLT5lc19wcm9j ZXNzZWQpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgQ01EX01FUkdFOgorCQkJCQkJU2V0UXVl cnlDb21wbGV0aW9uKHFjLCBDTURUQUdfTUVSR0UsIHFkZXNjLT5lc3RhdGUtPmVzX3Byb2Nlc3Nl ZCk7CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCVNldFF1ZXJ5Q29tcGxldGlv bihxYywgQ01EVEFHX1VOS05PV04sIHFkZXNjLT5lc3RhdGUtPmVzX3Byb2Nlc3NlZCk7CisJCQkJ CQlicmVhazsKKwkJCQl9CiAJCQl9CiAKIAkJCWlmIChsb2dfZXhlY3V0b3Jfc3RhdHMpCkBAIC0x MzQ2LDggKzEzMzYsMTkgQEAgUG9ydGFsUnVuTXVsdGkoUG9ydGFsIHBvcnRhbCwKIAkJICogSW5j cmVtZW50IGNvbW1hbmQgY291bnRlciBiZXR3ZWVuIHF1ZXJpZXMsIGJ1dCBub3QgYWZ0ZXIgdGhl IGxhc3QKIAkJICogb25lLgogCQkgKi8KLQkJaWYgKGxuZXh0KHBvcnRhbC0+c3RtdHMsIHN0bXRs aXN0X2l0ZW0pICE9IE5VTEwpCisJCWlmIChsbmV4dChwb3J0YWwtPnFkZXNjcywgcWRlc2NfaXRl bSkgIT0gTlVMTCkKIAkJCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CisKKwkJLyogcG9ydGFs LT5xdWVyeURlc2MgaXMgZnJlZSdkIGJ5IFBvcnRhbENsZWFudXAoKS4gKi8KKwkJaWYgKHFkZXNj ICE9IHBvcnRhbC0+cXVlcnlEZXNjKQorCQl7CisJCQlpZiAocWRlc2MtPmVzdGF0ZSkKKwkJCXsK KwkJCQlFeGVjdXRvckZpbmlzaChxZGVzYyk7CisJCQkJRXhlY3V0b3JFbmQocWRlc2MpOworCQkJ fQorCQkJRnJlZVF1ZXJ5RGVzYyhxZGVzYyk7CisJCX0KIAl9CiAKIAkvKiBQb3AgdGhlIHNuYXBz aG90IGlmIHdlIHB1c2hlZCBvbmUuICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9sc3lzY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2xzeXNjYWNoZS5jCmlu ZGV4IGMwNzM4MjA1MWQuLjM4YWU0M2UyNGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL2xzeXNjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2xzeXNjYWNo ZS5jCkBAIC0yMDczLDYgKzIwNzMsMjcgQEAgZ2V0X3JlbF9wZXJzaXN0ZW5jZShPaWQgcmVsaWQp CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorLyoKKyAqIGdldF9yZWxfcmVsaXNzaGFyZWQKKyAqCisg KgkJUmV0dXJucyBpZiB0aGUgZ2l2ZW4gcmVsYXRpb24gaXMgc2hhcmVkIG9yIG5vdAorICovCiti b29sCitnZXRfcmVsX3JlbGlzc2hhcmVkKE9pZCByZWxpZCkKK3sKKwlIZWFwVHVwbGUJdHA7CisJ Rm9ybV9wZ19jbGFzcyByZWx0dXA7CisJYm9vbAkJcmVzdWx0OworCisJdHAgPSBTZWFyY2hTeXND YWNoZTEoUkVMT0lELCBPYmplY3RJZEdldERhdHVtKHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKHRwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJlbGF0 aW9uICV1IiwgcmVsaWQpOworCXJlbHR1cCA9IChGb3JtX3BnX2NsYXNzKSBHRVRTVFJVQ1QodHAp OworCXJlc3VsdCA9IHJlbHR1cC0+cmVsaXNzaGFyZWQ7CisJUmVsZWFzZVN5c0NhY2hlKHRwKTsK KworCXJldHVybiByZXN1bHQ7Cit9CiAKIC8qCQkJCS0tLS0tLS0tLS0gVFJBTlNGT1JNIENBQ0hF IC0tLS0tLS0tLS0JCQkJCQkgKi8KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2Fj aGUvcGxhbmNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYwppbmRl eCA3N2MyYmEzZjhmLi40ZTQ1NWQ4MTVmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9wbGFuY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUu YwpAQCAtMTAwLDEzICsxMDAsMTMgQEAgc3RhdGljIHZvaWQgUmVsZWFzZUdlbmVyaWNQbGFuKENh Y2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpOwogc3RhdGljIExpc3QgKlJldmFsaWRhdGVDYWNo ZWRRdWVyeShDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLAogCQkJCQkJCQkgICBRdWVyeUVu dmlyb25tZW50ICpxdWVyeUVudik7CiBzdGF0aWMgYm9vbCBDaGVja0NhY2hlZFBsYW4oQ2FjaGVk UGxhblNvdXJjZSAqcGxhbnNvdXJjZSk7CitzdGF0aWMgYm9vbCBHZW5lcmljUGxhbklzVmFsaWQo Q2FjaGVkUGxhbiAqY3BsYW4pOwogc3RhdGljIENhY2hlZFBsYW4gKkJ1aWxkQ2FjaGVkUGxhbihD YWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBMaXN0ICpxbGlzdCwKIAkJCQkJCQkJICAgUGFy YW1MaXN0SW5mbyBib3VuZFBhcmFtcywgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpOwogc3Rh dGljIGJvb2wgY2hvb3NlX2N1c3RvbV9wbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2Us CiAJCQkJCQkJICAgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcyk7CiBzdGF0aWMgZG91YmxlIGNh Y2hlZF9wbGFuX2Nvc3QoQ2FjaGVkUGxhbiAqcGxhbiwgYm9vbCBpbmNsdWRlX3BsYW5uZXIpOwog c3RhdGljIFF1ZXJ5ICpRdWVyeUxpc3RHZXRQcmltYXJ5U3RtdChMaXN0ICpzdG10cyk7Ci1zdGF0 aWMgdm9pZCBBY3F1aXJlRXhlY3V0b3JMb2NrcyhMaXN0ICpzdG10X2xpc3QsIGJvb2wgYWNxdWly ZSk7CiBzdGF0aWMgdm9pZCBBY3F1aXJlUGxhbm5lckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9v bCBhY3F1aXJlKTsKIHN0YXRpYyB2b2lkIFNjYW5RdWVyeUZvckxvY2tzKFF1ZXJ5ICpwYXJzZXRy ZWUsIGJvb2wgYWNxdWlyZSk7CiBzdGF0aWMgYm9vbCBTY2FuUXVlcnlXYWxrZXIoTm9kZSAqbm9k ZSwgYm9vbCAqYWNxdWlyZSk7CkBAIC03ODcsOSArNzg3LDYgQEAgUmV2YWxpZGF0ZUNhY2hlZFF1 ZXJ5KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCiAgKgogICogQ2FsbGVyIG11c3QgaGF2 ZSBhbHJlYWR5IGNhbGxlZCBSZXZhbGlkYXRlQ2FjaGVkUXVlcnkgdG8gdmVyaWZ5IHRoYXQgdGhl CiAgKiBxdWVyeXRyZWUgaXMgdXAgdG8gZGF0ZS4KLSAqCi0gKiBPbiBhICJ0cnVlIiByZXR1cm4s IHdlIGhhdmUgYWNxdWlyZWQgdGhlIGxvY2tzIG5lZWRlZCB0byBydW4gdGhlIHBsYW4uCi0gKiAo V2UgbXVzdCBkbyB0aGlzIGZvciB0aGUgInRydWUiIHJlc3VsdCB0byBiZSByYWNlLWNvbmRpdGlv bi1mcmVlLikKICAqLwogc3RhdGljIGJvb2wKIENoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291 cmNlICpwbGFuc291cmNlKQpAQCAtODAzLDYwICs4MDAsNTYgQEAgQ2hlY2tDYWNoZWRQbGFuKENh Y2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpCiAJaWYgKCFwbGFuKQogCQlyZXR1cm4gZmFsc2U7 CiAKLQlBc3NlcnQocGxhbi0+bWFnaWMgPT0gQ0FDSEVEUExBTl9NQUdJQyk7Ci0JLyogR2VuZXJp YyBwbGFucyBhcmUgbmV2ZXIgb25lLXNob3QgKi8KLQlBc3NlcnQoIXBsYW4tPmlzX29uZXNob3Qp OworCWlmIChHZW5lcmljUGxhbklzVmFsaWQocGxhbikpCisJCXJldHVybiB0cnVlOwogCiAJLyoK LQkgKiBJZiBwbGFuIGlzbid0IHZhbGlkIGZvciBjdXJyZW50IHJvbGUsIHdlIGNhbid0IHVzZSBp dC4KKwkgKiBQbGFuIGhhcyBiZWVuIGludmFsaWRhdGVkLCBzbyB1bmxpbmsgaXQgZnJvbSB0aGUg cGFyZW50IGFuZCByZWxlYXNlIGl0LgogCSAqLwotCWlmIChwbGFuLT5pc192YWxpZCAmJiBwbGFu LT5kZXBlbmRzT25Sb2xlICYmCi0JCXBsYW4tPnBsYW5Sb2xlSWQgIT0gR2V0VXNlcklkKCkpCi0J CXBsYW4tPmlzX3ZhbGlkID0gZmFsc2U7CisJUmVsZWFzZUdlbmVyaWNQbGFuKHBsYW5zb3VyY2Up OwogCi0JLyoKLQkgKiBJZiBpdCBhcHBlYXJzIHZhbGlkLCBhY3F1aXJlIGxvY2tzIGFuZCByZWNo ZWNrOyB0aGlzIGlzIG11Y2ggdGhlIHNhbWUKLQkgKiBsb2dpYyBhcyBpbiBSZXZhbGlkYXRlQ2Fj aGVkUXVlcnksIGJ1dCBmb3IgYSBwbGFuLgotCSAqLwotCWlmIChwbGFuLT5pc192YWxpZCkKKwly ZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBHZW5lcmljUGxhbklzVmFsaWQKKyAqCQlJcyBhIGdl bmVyaWMgcGxhbiBzdGlsbCB2YWxpZD8KKyAqCisgKiBJdCBtYXkgaGF2ZSBnb25lIHN0YWxlIGR1 ZSB0byBjb25jdXJyZW50IHNjaGVtYSBtb2RpZmljYXRpb25zIG9mIHJlbGF0aW9ucworICogbWVu dGlvbmVkIGluIHRoZSBwbGFuIG9yIGEgY291cGxlIG9mIG90aGVyIHRoaW5ncyBtZW50aW9uZWQg YmVsb3cuCisgKi8KK3N0YXRpYyBib29sCitHZW5lcmljUGxhbklzVmFsaWQoQ2FjaGVkUGxhbiAq Y3BsYW4pCit7CisJQXNzZXJ0KGNwbGFuICE9IE5VTEwpOworCUFzc2VydChjcGxhbi0+bWFnaWMg PT0gQ0FDSEVEUExBTl9NQUdJQyk7CisJLyogR2VuZXJpYyBwbGFucyBhcmUgbmV2ZXIgb25lLXNo b3QgKi8KKwlBc3NlcnQoIWNwbGFuLT5pc19vbmVzaG90KTsKKworCWlmIChjcGxhbi0+aXNfdmFs aWQpCiAJewogCQkvKgogCQkgKiBQbGFuIG11c3QgaGF2ZSBwb3NpdGl2ZSByZWZjb3VudCBiZWNh dXNlIGl0IGlzIHJlZmVyZW5jZWQgYnkKIAkJICogcGxhbnNvdXJjZTsgc28gbm8gbmVlZCB0byBm ZWFyIGl0IGRpc2FwcGVhcnMgdW5kZXIgdXMgaGVyZS4KIAkJICovCi0JCUFzc2VydChwbGFuLT5y ZWZjb3VudCA+IDApOwotCi0JCUFjcXVpcmVFeGVjdXRvckxvY2tzKHBsYW4tPnN0bXRfbGlzdCwg dHJ1ZSk7CisJCUFzc2VydChjcGxhbi0+cmVmY291bnQgPiAwKTsKIAogCQkvKgotCQkgKiBJZiBw bGFuIHdhcyB0cmFuc2llbnQsIGNoZWNrIHRvIHNlZSBpZiBUcmFuc2FjdGlvblhtaW4gaGFzCi0J CSAqIGFkdmFuY2VkLCBhbmQgaWYgc28gaW52YWxpZGF0ZSBpdC4KKwkJICogSWYgcGxhbiBpc24n dCB2YWxpZCBmb3IgY3VycmVudCByb2xlLCB3ZSBjYW4ndCB1c2UgaXQuCiAJCSAqLwotCQlpZiAo cGxhbi0+aXNfdmFsaWQgJiYKLQkJCVRyYW5zYWN0aW9uSWRJc1ZhbGlkKHBsYW4tPnNhdmVkX3ht aW4pICYmCi0JCQkhVHJhbnNhY3Rpb25JZEVxdWFscyhwbGFuLT5zYXZlZF94bWluLCBUcmFuc2Fj dGlvblhtaW4pKQotCQkJcGxhbi0+aXNfdmFsaWQgPSBmYWxzZTsKKwkJaWYgKGNwbGFuLT5kZXBl bmRzT25Sb2xlICYmIGNwbGFuLT5wbGFuUm9sZUlkICE9IEdldFVzZXJJZCgpKQorCQkJY3BsYW4t PmlzX3ZhbGlkID0gZmFsc2U7CiAKIAkJLyoKLQkJICogQnkgbm93LCBpZiBhbnkgaW52YWxpZGF0 aW9uIGhhcyBoYXBwZW5lZCwgdGhlIGludmFsIGNhbGxiYWNrCi0JCSAqIGZ1bmN0aW9ucyB3aWxs IGhhdmUgbWFya2VkIHRoZSBwbGFuIGludmFsaWQuCisJCSAqIElmIHBsYW4gd2FzIHRyYW5zaWVu dCwgY2hlY2sgdG8gc2VlIGlmIFRyYW5zYWN0aW9uWG1pbiBoYXMKKwkJICogYWR2YW5jZWQsIGFu ZCBpZiBzbyBpbnZhbGlkYXRlIGl0LgogCQkgKi8KLQkJaWYgKHBsYW4tPmlzX3ZhbGlkKQotCQl7 Ci0JCQkvKiBTdWNjZXNzZnVsbHkgcmV2YWxpZGF0ZWQgYW5kIGxvY2tlZCB0aGUgcXVlcnkuICov Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCS8qIE9vcHMsIHRoZSByYWNlIGNhc2UgaGFwcGVu ZWQuICBSZWxlYXNlIHVzZWxlc3MgbG9ja3MuICovCi0JCUFjcXVpcmVFeGVjdXRvckxvY2tzKHBs YW4tPnN0bXRfbGlzdCwgZmFsc2UpOworCQlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQoY3BsYW4t PnNhdmVkX3htaW4pICYmCisJCQkhVHJhbnNhY3Rpb25JZEVxdWFscyhjcGxhbi0+c2F2ZWRfeG1p biwgVHJhbnNhY3Rpb25YbWluKSkKKwkJCWNwbGFuLT5pc192YWxpZCA9IGZhbHNlOwogCX0KIAot CS8qCi0JICogUGxhbiBoYXMgYmVlbiBpbnZhbGlkYXRlZCwgc28gdW5saW5rIGl0IGZyb20gdGhl IHBhcmVudCBhbmQgcmVsZWFzZSBpdC4KLQkgKi8KLQlSZWxlYXNlR2VuZXJpY1BsYW4ocGxhbnNv dXJjZSk7Ci0KLQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIGNwbGFuLT5pc192YWxpZDsKIH0KIAog LyoKQEAgLTExMjYsOSArMTExOSw2IEBAIGNhY2hlZF9wbGFuX2Nvc3QoQ2FjaGVkUGxhbiAqcGxh biwgYm9vbCBpbmNsdWRlX3BsYW5uZXIpCiAgKiBwbGFuIG9yIGEgY3VzdG9tIHBsYW4gZm9yIHRo ZSBnaXZlbiBwYXJhbWV0ZXJzOiB0aGUgY2FsbGVyIGRvZXMgbm90IGtub3cKICAqIHdoaWNoIGl0 IHdpbGwgZ2V0LgogICoKLSAqIE9uIHJldHVybiwgdGhlIHBsYW4gaXMgdmFsaWQgYW5kIHdlIGhh dmUgc3VmZmljaWVudCBsb2NrcyB0byBiZWdpbgotICogZXhlY3V0aW9uLgotICoKICAqIE9uIHJl dHVybiwgdGhlIHJlZmNvdW50IG9mIHRoZSBwbGFuIGhhcyBiZWVuIGluY3JlbWVudGVkOyBhIGxh dGVyCiAgKiBSZWxlYXNlQ2FjaGVkUGxhbigpIGNhbGwgaXMgZXhwZWN0ZWQuICBJZiAib3duZXIi IGlzIG5vdCBOVUxMIHRoZW4KICAqIHRoZSByZWZjb3VudCBoYXMgYmVlbiByZXBvcnRlZCB0byB0 aGF0IFJlc291cmNlT3duZXIgKG5vdGUgdGhhdCB0aGlzCkBAIC0xMzYwLDggKzEzNTAsOCBAQCBD YWNoZWRQbGFuQWxsb3dzU2ltcGxlVmFsaWRpdHlDaGVjayhDYWNoZWRQbGFuU291cmNlICpwbGFu c291cmNlLAogCX0KIAogCS8qCi0JICogUmVqZWN0IGlmIEFjcXVpcmVFeGVjdXRvckxvY2tzIHdv dWxkIGhhdmUgYW55dGhpbmcgdG8gZG8uICBUaGlzIGlzCi0JICogcHJvYmFibHkgdW5uZWNlc3Nh cnkgZ2l2ZW4gdGhlIHByZXZpb3VzIGNoZWNrLCBidXQgbGV0J3MgYmUgc2FmZS4KKwkgKiBSZWpl Y3QgaWYgdGhlIGV4ZWN1dG9yIHdvdWxkIG5lZWQgdG8gdGFrZSBhZGRpdGlvbmFsIGxvY2tzLCB0 aGF0IGlzLCBpbgorCSAqIGFkZGl0aW9uIHRvIHRob3NlIHRha2VuIGJ5IEFjcXVpcmVQbGFubmVy TG9ja3MoKSBvbiBhIGdpdmVuIHF1ZXJ5LgogCSAqLwogCWZvcmVhY2gobGMsIHBsYW4tPnN0bXRf bGlzdCkKIAl7CkBAIC0xNzM1LDU4ICsxNzI1LDYgQEAgUXVlcnlMaXN0R2V0UHJpbWFyeVN0bXQo TGlzdCAqc3RtdHMpCiAJcmV0dXJuIE5VTEw7CiB9CiAKLS8qCi0gKiBBY3F1aXJlRXhlY3V0b3JM b2NrczogYWNxdWlyZSBsb2NrcyBuZWVkZWQgZm9yIGV4ZWN1dGlvbiBvZiBhIGNhY2hlZCBwbGFu OwotICogb3IgcmVsZWFzZSB0aGVtIGlmIGFjcXVpcmUgaXMgZmFsc2UuCi0gKi8KLXN0YXRpYyB2 b2lkCi1BY3F1aXJlRXhlY3V0b3JMb2NrcyhMaXN0ICpzdG10X2xpc3QsIGJvb2wgYWNxdWlyZSkK LXsKLQlMaXN0Q2VsbCAgICpsYzE7Ci0KLQlmb3JlYWNoKGxjMSwgc3RtdF9saXN0KQotCXsKLQkJ UGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQsIGxjMSk7 Ci0JCUxpc3RDZWxsICAgKmxjMjsKLQotCQlpZiAocGxhbm5lZHN0bXQtPmNvbW1hbmRUeXBlID09 IENNRF9VVElMSVRZKQotCQl7Ci0JCQkvKgotCQkJICogSWdub3JlIHV0aWxpdHkgc3RhdGVtZW50 cywgZXhjZXB0IHRob3NlIChzdWNoIGFzIEVYUExBSU4pIHRoYXQKLQkJCSAqIGNvbnRhaW4gYSBw YXJzZWQtYnV0LW5vdC1wbGFubmVkIHF1ZXJ5LiAgTm90ZTogaXQncyBva2F5IHRvIHVzZQotCQkJ ICogU2NhblF1ZXJ5Rm9yTG9ja3MsIGV2ZW4gdGhvdWdoIHRoZSBxdWVyeSBoYXNuJ3QgYmVlbiB0 aHJvdWdoCi0JCQkgKiBydWxlIHJld3JpdGluZywgYmVjYXVzZSByZXdyaXRpbmcgZG9lc24ndCBj aGFuZ2UgdGhlIHF1ZXJ5Ci0JCQkgKiByZXByZXNlbnRhdGlvbi4KLQkJCSAqLwotCQkJUXVlcnkJ ICAgKnF1ZXJ5ID0gVXRpbGl0eUNvbnRhaW5zUXVlcnkocGxhbm5lZHN0bXQtPnV0aWxpdHlTdG10 KTsKLQotCQkJaWYgKHF1ZXJ5KQotCQkJCVNjYW5RdWVyeUZvckxvY2tzKHF1ZXJ5LCBhY3F1aXJl KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJZm9yZWFjaChsYzIsIHBsYW5uZWRzdG10LT5ydGFi bGUpCi0JCXsKLQkJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IChSYW5nZVRibEVudHJ5ICopIGxmaXJz dChsYzIpOwotCi0JCQlpZiAoIShydGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OIHx8Ci0JCQkJ ICAocnRlLT5ydGVraW5kID09IFJURV9TVUJRVUVSWSAmJiBPaWRJc1ZhbGlkKHJ0ZS0+cmVsaWQp KSkpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qCi0JCQkgKiBBY3F1aXJlIHRoZSBhcHByb3ByaWF0 ZSB0eXBlIG9mIGxvY2sgb24gZWFjaCByZWxhdGlvbiBPSUQuIE5vdGUKLQkJCSAqIHRoYXQgd2Ug ZG9uJ3QgYWN0dWFsbHkgdHJ5IHRvIG9wZW4gdGhlIHJlbCwgYW5kIGhlbmNlIHdpbGwgbm90Ci0J CQkgKiBmYWlsIGlmIGl0J3MgYmVlbiBkcm9wcGVkIGVudGlyZWx5IC0tLSB3ZSdsbCBqdXN0IHRy YW5zaWVudGx5Ci0JCQkgKiBhY3F1aXJlIGEgbm9uLWNvbmZsaWN0aW5nIGxvY2suCi0JCQkgKi8K LQkJCWlmIChhY3F1aXJlKQotCQkJCUxvY2tSZWxhdGlvbk9pZChydGUtPnJlbGlkLCBydGUtPnJl bGxvY2ttb2RlKTsKLQkJCWVsc2UKLQkJCQlVbmxvY2tSZWxhdGlvbk9pZChydGUtPnJlbGlkLCBy dGUtPnJlbGxvY2ttb2RlKTsKLQkJfQotCX0KLX0KLQogLyoKICAqIEFjcXVpcmVQbGFubmVyTG9j a3M6IGFjcXVpcmUgbG9ja3MgbmVlZGVkIGZvciBwbGFubmluZyBvZiBhIHF1ZXJ5dHJlZSBsaXN0 OwogICogb3IgcmVsZWFzZSB0aGVtIGlmIGFjcXVpcmUgaXMgZmFsc2UuCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9tbWdyL3BvcnRhbG1lbS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1n ci9wb3J0YWxtZW0uYwppbmRleCAwNmRmYTg1ZjA0Li4zYWQ4MGM3ZWNiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9tbWdyL3BvcnRhbG1lbS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L21tZ3IvcG9ydGFsbWVtLmMKQEAgLTIwMSw2ICsyMDEsMTAgQEAgQ3JlYXRlUG9ydGFsKGNvbnN0 IGNoYXIgKm5hbWUsIGJvb2wgYWxsb3dEdXAsIGJvb2wgZHVwU2lsZW50KQogCXBvcnRhbC0+cG9y dGFsQ29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BQb3J0YWxDb250ZXh0LAogCQkJ CQkJCQkJCQkJICAiUG9ydGFsQ29udGV4dCIsCiAJCQkJCQkJCQkJCQkgIEFMTE9DU0VUX1NNQUxM X1NJWkVTKTsKKwkvKiBpbml0aWFsaXplIHBvcnRhbCdzIHF1ZXJ5IGNvbnRleHQgdG8gc3RvcmUg UXVlcnlEZXNjcyAqLworCXBvcnRhbC0+cXVlcnlDb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3Jl YXRlKFRvcFBvcnRhbENvbnRleHQsCisJCQkJCQkJCQkJCQkgIlBvcnRhbFF1ZXJ5Q29udGV4dCIs CisJCQkJCQkJCQkJCQkgQUxMT0NTRVRfU01BTExfU0laRVMpOwogCiAJLyogY3JlYXRlIGEgcmVz b3VyY2Ugb3duZXIgZm9yIHRoZSBwb3J0YWwgKi8KIAlwb3J0YWwtPnJlc293bmVyID0gUmVzb3Vy Y2VPd25lckNyZWF0ZShDdXJUcmFuc2FjdGlvblJlc291cmNlT3duZXIsCkBAIC0yMjQsNiArMjI4 LDcgQEAgQ3JlYXRlUG9ydGFsKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgYWxsb3dEdXAsIGJvb2wg ZHVwU2lsZW50KQogCiAJLyogZm9yIG5hbWVkIHBvcnRhbHMgcmV1c2UgcG9ydGFsLT5uYW1lIGNv cHkgKi8KIAlNZW1vcnlDb250ZXh0U2V0SWRlbnRpZmllcihwb3J0YWwtPnBvcnRhbENvbnRleHQs IHBvcnRhbC0+bmFtZVswXSA/IHBvcnRhbC0+bmFtZSA6ICI8dW5uYW1lZD4iKTsKKwlNZW1vcnlD b250ZXh0U2V0SWRlbnRpZmllcihwb3J0YWwtPnF1ZXJ5Q29udGV4dCwgcG9ydGFsLT5uYW1lWzBd ID8gcG9ydGFsLT5uYW1lIDogIjx1bm5hbWVkPiIpOwogCiAJcmV0dXJuIHBvcnRhbDsKIH0KQEAg LTU5NCw2ICs1OTksNyBAQCBQb3J0YWxEcm9wKFBvcnRhbCBwb3J0YWwsIGJvb2wgaXNUb3BDb21t aXQpCiAKIAkvKiByZWxlYXNlIHN1YnNpZGlhcnkgc3RvcmFnZSAqLwogCU1lbW9yeUNvbnRleHRE ZWxldGUocG9ydGFsLT5wb3J0YWxDb250ZXh0KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHBvcnRh bC0+cXVlcnlDb250ZXh0KTsKIAogCS8qIHJlbGVhc2UgcG9ydGFsIHN0cnVjdCAoaXQncyBpbiBU b3BQb3J0YWxDb250ZXh0KSAqLwogCXBmcmVlKHBvcnRhbCk7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jb21tYW5kcy9leHBsYWluLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgK aW5kZXggN2MxMDcxZGRkMS4uZGEzOWIyZTRmZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29t bWFuZHMvZXhwbGFpbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaApAQCAt ODcsNyArODcsMTEgQEAgZXh0ZXJuIHZvaWQgRXhwbGFpbk9uZVV0aWxpdHkoTm9kZSAqdXRpbGl0 eVN0bXQsIEludG9DbGF1c2UgKmludG8sCiAJCQkJCQkJICBFeHBsYWluU3RhdGUgKmVzLCBjb25z dCBjaGFyICpxdWVyeVN0cmluZywKIAkJCQkJCQkgIFBhcmFtTGlzdEluZm8gcGFyYW1zLCBRdWVy eUVudmlyb25tZW50ICpxdWVyeUVudik7CiAKLWV4dGVybiB2b2lkIEV4cGxhaW5PbmVQbGFuKFBs YW5uZWRTdG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywKK2V4dGVybiBRdWVyeURl c2MgKkV4cGxhaW5RdWVyeURlc2MoUGxhbm5lZFN0bXQgKnN0bXQsIHN0cnVjdCBDYWNoZWRQbGFu ICpjcGxhbiwKKwkJCQkgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsIEludG9DbGF1c2UgKmludG8s IEV4cGxhaW5TdGF0ZSAqZXMsCisJCQkJIFBhcmFtTGlzdEluZm8gcGFyYW1zLCBRdWVyeUVudmly b25tZW50ICpxdWVyeUVudik7CitleHRlcm4gdm9pZCBFeHBsYWluT25lUGxhbihRdWVyeURlc2Mg KnF1ZXJ5RGVzYywKKwkJCQkJCSAgIEludG9DbGF1c2UgKmludG8sCiAJCQkJCQkgICBFeHBsYWlu U3RhdGUgKmVzLCBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKIAkJCQkJCSAgIFBhcmFtTGlzdElu Zm8gcGFyYW1zLCBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKIAkJCQkJCSAgIGNvbnN0IGlu c3RyX3RpbWUgKnBsYW5kdXJhdGlvbiwKQEAgLTEwMyw2ICsxMDcsNyBAQCBleHRlcm4gdm9pZCBF eHBsYWluUXVlcnlQYXJhbWV0ZXJzKEV4cGxhaW5TdGF0ZSAqZXMsIFBhcmFtTGlzdEluZm8gcGFy YW1zLCBpbnQgbQogCiBleHRlcm4gdm9pZCBFeHBsYWluQmVnaW5PdXRwdXQoRXhwbGFpblN0YXRl ICplcyk7CiBleHRlcm4gdm9pZCBFeHBsYWluRW5kT3V0cHV0KEV4cGxhaW5TdGF0ZSAqZXMpOwor ZXh0ZXJuIHZvaWQgRXhwbGFpblJlc2V0T3V0cHV0KEV4cGxhaW5TdGF0ZSAqZXMpOwogZXh0ZXJu IHZvaWQgRXhwbGFpblNlcGFyYXRlUGxhbnMoRXhwbGFpblN0YXRlICplcyk7CiAKIGV4dGVybiB2 b2lkIEV4cGxhaW5Qcm9wZXJ0eUxpc3QoY29uc3QgY2hhciAqcWxhYmVsLCBMaXN0ICpkYXRhLApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaCBiL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWNkZXNjLmgKaW5kZXggYWYyYmYzNmRmYi4uYzM2YzI1YjQ5NyAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaAorKysgYi9zcmMvaW5jbHVkZS9l eGVjdXRvci9leGVjZGVzYy5oCkBAIC0zMiw5ICszMiwxMiBAQAogICovCiB0eXBlZGVmIHN0cnVj dCBRdWVyeURlc2MKIHsKKwlOb2RlVGFnCQl0eXBlOworCiAJLyogVGhlc2UgZmllbGRzIGFyZSBw cm92aWRlZCBieSBDcmVhdGVRdWVyeURlc2MgKi8KIAlDbWRUeXBlCQlvcGVyYXRpb247CQkvKiBD TURfU0VMRUNULCBDTURfVVBEQVRFLCBldGMuICovCiAJUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10 OwkvKiBwbGFubmVyJ3Mgb3V0cHV0IChjb3VsZCBiZSB1dGlsaXR5LCB0b28pICovCisJc3RydWN0 IENhY2hlZFBsYW4gKmNwbGFuOwkvKiBDYWNoZWRQbGFuLCBpZiBwbGFubmVkc3RtdCBpcyBmcm9t IG9uZSAqLwogCWNvbnN0IGNoYXIgKnNvdXJjZVRleHQ7CQkvKiBzb3VyY2UgdGV4dCBvZiB0aGUg cXVlcnkgKi8KIAlTbmFwc2hvdAlzbmFwc2hvdDsJCS8qIHNuYXBzaG90IHRvIHVzZSBmb3IgcXVl cnkgKi8KIAlTbmFwc2hvdAljcm9zc2NoZWNrX3NuYXBzaG90OwkvKiBjcm9zc2NoZWNrIGZvciBS SSB1cGRhdGUvZGVsZXRlICovCkBAIC00Nyw2ICs1MCw3IEBAIHR5cGVkZWYgc3RydWN0IFF1ZXJ5 RGVzYwogCVR1cGxlRGVzYwl0dXBEZXNjOwkJLyogZGVzY3JpcHRvciBmb3IgcmVzdWx0IHR1cGxl cyAqLwogCUVTdGF0ZQkgICAqZXN0YXRlOwkJCS8qIGV4ZWN1dG9yJ3MgcXVlcnktd2lkZSBzdGF0 ZSAqLwogCVBsYW5TdGF0ZSAgKnBsYW5zdGF0ZTsJCS8qIHRyZWUgb2YgcGVyLXBsYW4tbm9kZSBz dGF0ZSAqLworCWJvb2wJCXBsYW5fdmFsaWQ7CQkvKiBpcyBwbGFuc3RhdGUgdHJlZSBmdWxseSB2 YWxpZD8gKi8KIAogCS8qIFRoaXMgZmllbGQgaXMgc2V0IGJ5IEV4ZWN1dG9yUnVuICovCiAJYm9v bAkJYWxyZWFkeV9leGVjdXRlZDsJLyogdHJ1ZSBpZiBwcmV2aW91c2x5IGV4ZWN1dGVkICovCkBA IC01Nyw2ICs2MSw3IEBAIHR5cGVkZWYgc3RydWN0IFF1ZXJ5RGVzYwogCiAvKiBpbiBwcXVlcnku YyAqLwogZXh0ZXJuIFF1ZXJ5RGVzYyAqQ3JlYXRlUXVlcnlEZXNjKFBsYW5uZWRTdG10ICpwbGFu bmVkc3RtdCwKKwkJCQkJCQkJICBzdHJ1Y3QgQ2FjaGVkUGxhbiAqY3BsYW4sCiAJCQkJCQkJCSAg Y29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKIAkJ CQkJCQkJICBTbmFwc2hvdCBjcm9zc2NoZWNrX3NuYXBzaG90LApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9y LmgKaW5kZXggZTdlMjVjMDU3ZS4uOGM2ODAzNThlOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv ZXhlY3V0b3IvZXhlY3V0b3IuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5o CkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSAibm9kZXMvbG9ja29wdGlvbnMuaCIKICNpbmNs dWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNp bmNsdWRlICJ1dGlscy9wbGFuY2FjaGUuaCIKIAogCiAvKgpAQCAtNTksNiArNjAsMTAgQEAKICNk ZWZpbmUgRVhFQ19GTEFHX01BUksJCQkweDAwMDgJLyogbmVlZCBtYXJrL3Jlc3RvcmUgKi8KICNk ZWZpbmUgRVhFQ19GTEFHX1NLSVBfVFJJR0dFUlMgMHgwMDEwCS8qIHNraXAgQWZ0ZXJUcmlnZ2Vy IGNhbGxzICovCiAjZGVmaW5lIEVYRUNfRkxBR19XSVRIX05PX0RBVEEJMHgwMDIwCS8qIHJlbCBz Y2FubmFiaWxpdHkgZG9lc24ndCBtYXR0ZXIgKi8KKyNkZWZpbmUgRVhFQ19GTEFHX0dFVF9MT0NL UwkJMHgwNDAwCS8qIHNob3VsZCBFeGVjR2V0UmFuZ2VUYWJsZVJlbGF0aW9uCisJCQkJCQkJCQkJ ICogbG9jayByZWxhdGlvbnM/ICovCisjZGVmaW5lIEVYRUNfRkxBR19SRUxfTE9DS1MJCTB4ODAw MAkvKiBzaG91bGQgRXhlY0Nsb3NlUmFuZ2VUYWJsZVJlbGF0aW9ucworCQkJCQkJCQkJCSAqIHJl bGVhc2UgbG9ja3M/ICovCiAKIAogLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBp biBFeGVjdXRvclN0YXJ0KCkgKi8KQEAgLTI0NSw2ICsyNTAsMTMgQEAgZXh0ZXJuIHZvaWQgRXhl Y0VuZE5vZGUoUGxhblN0YXRlICpub2RlKTsKIGV4dGVybiB2b2lkIEV4ZWNTaHV0ZG93bk5vZGUo UGxhblN0YXRlICpub2RlKTsKIGV4dGVybiB2b2lkIEV4ZWNTZXRUdXBsZUJvdW5kKGludDY0IHR1 cGxlc19uZWVkZWQsIFBsYW5TdGF0ZSAqY2hpbGRfbm9kZSk7CiAKKy8qIElzIHRoZSBjYWNoZWQg cGxhbiovCitzdGF0aWMgaW5saW5lIGJvb2wKK0V4ZWNQbGFuU3RpbGxWYWxpZChFU3RhdGUgKmVz dGF0ZSkKK3sKKwlyZXR1cm4gZXN0YXRlLT5lc19jYWNoZWRwbGFuID09IE5VTEwgPyB0cnVlIDoK KwkJQ2FjaGVkUGxhblN0aWxsVmFsaWQoZXN0YXRlLT5lc19jYWNoZWRwbGFuKTsKK30KIAogLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogICoJCUV4ZWNQcm9jTm9kZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCAyMGY0Yzhi MzVmLi44OWY1YTYyN2M4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtNjE5LDYgKzYxOSw4IEBA IHR5cGVkZWYgc3RydWN0IEVTdGF0ZQogCQkJCQkJCQkJCSAqIEV4ZWNSb3dNYXJrcywgb3IgTlVM TCBpZiBub25lICovCiAJTGlzdAkgICAqZXNfcnRlcGVybWluZm9zOwkvKiBMaXN0IG9mIFJURVBl cm1pc3Npb25JbmZvICovCiAJUGxhbm5lZFN0bXQgKmVzX3BsYW5uZWRzdG10OwkvKiBsaW5rIHRv IHRvcCBvZiBwbGFuIHRyZWUgKi8KKwlzdHJ1Y3QgQ2FjaGVkUGxhbiAqZXNfY2FjaGVkcGxhbjsJ LyogQ2FjaGVkUGxhbiBpZiBwbGFubmVkc3RtdCBpcyBmcm9tCisJCQkJCQkJCQkJICogb25lICov CiAJTGlzdAkgICAqZXNfcGFydF9wcnVuZV9pbmZvczsJLyogUGxhbm5lZFN0bXQucGFydFBydW5l SW5mb3MgKi8KIAljb25zdCBjaGFyICplc19zb3VyY2VUZXh0OwkvKiBTb3VyY2UgdGV4dCBmcm9t IFF1ZXJ5RGVzYyAqLwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9tZXNvbi5idWls ZCBiL3NyYy9pbmNsdWRlL25vZGVzL21lc29uLmJ1aWxkCmluZGV4IGVmZTA4MzRhZmIuLmE4ZmRk OWUxNzYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL21lc29uLmJ1aWxkCisrKyBiL3Ny Yy9pbmNsdWRlL25vZGVzL21lc29uLmJ1aWxkCkBAIC0xMyw2ICsxMyw3IEBAIG5vZGVfc3VwcG9y dF9pbnB1dF9pID0gWwogICAnYWNjZXNzL3RzbWFwaS5oJywKICAgJ2NvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuaCcsCiAgICdjb21tYW5kcy90cmlnZ2VyLmgnLAorICAnZXhlY3V0b3IvZXhlY2Rlc2Mu aCcsCiAgICdleGVjdXRvci90dXB0YWJsZS5oJywKICAgJ2ZvcmVpZ24vZmR3YXBpLmgnLAogICAn bm9kZXMvYml0bWFwc2V0LmgnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCAwZDRiMWVjNGU0Li43 MTAwNGZlZTc1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTE2LDYgKzExNiw5IEBAIHR5cGVk ZWYgc3RydWN0IFBsYW5uZXJHbG9iYWwKIAkvKiAiZmxhdCIgbGlzdCBvZiBSVEVQZXJtaXNzaW9u SW5mb3MgKi8KIAlMaXN0CSAgICpmaW5hbHJ0ZXBlcm1pbmZvczsKIAorCS8qICJmbGF0IiBsaXN0 IG9mIGludGVnZXIgUlQgaW5kZXhlcyAqLworCUxpc3QJICAgKnZpZXdSZWxhdGlvbnM7CisKIAkv KiAiZmxhdCIgbGlzdCBvZiBQbGFuUm93TWFya3MgKi8KIAlMaXN0CSAgICpmaW5hbHJvd21hcmtz OwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCBiL3NyYy9pbmNs dWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IDQ3ODFhOWM2MzIuLmRhOWU3M2ZiMTYgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25v ZGVzL3BsYW5ub2Rlcy5oCkBAIC03OCw2ICs3OCw5IEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZWRT dG10CiAJTGlzdAkgICAqcGVybUluZm9zOwkJLyogbGlzdCBvZiBSVEVQZXJtaXNzaW9uSW5mbyBu b2RlcyBmb3IgcnRhYmxlCiAJCQkJCQkJCSAqIGVudHJpZXMgbmVlZGluZyBvbmUgKi8KIAorCUxp c3QJICAgKnZpZXdSZWxhdGlvbnM7CS8qIGludGVnZXIgbGlzdCBvZiBSVCBpbmRleGVzLCBvciBO SUwgaWYgbm8KKwkJCQkJCQkJICogdmlld3MgYXJlIHF1ZXJpZWQgKi8KKwogCS8qIHJ0YWJsZSBp bmRleGVzIG9mIHRhcmdldCByZWxhdGlvbnMgZm9yIElOU0VSVC9VUERBVEUvREVMRVRFL01FUkdF ICovCiAJTGlzdAkgICAqcmVzdWx0UmVsYXRpb25zOwkvKiBpbnRlZ2VyIGxpc3Qgb2YgUlQgaW5k ZXhlcywgb3IgTklMICovCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG1nci5o IGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sbWdyLmgKaW5kZXggNGVlOTFlM2NmOS4uNTk4YmYyNjg4 YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sbWdyLmgKKysrIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9sbWdyLmgKQEAgLTQ4LDYgKzQ4LDcgQEAgZXh0ZXJuIGJvb2wgQ29uZGl0aW9u YWxMb2NrUmVsYXRpb24oUmVsYXRpb24gcmVsYXRpb24sIExPQ0tNT0RFIGxvY2ttb2RlKTsKIGV4 dGVybiB2b2lkIFVubG9ja1JlbGF0aW9uKFJlbGF0aW9uIHJlbGF0aW9uLCBMT0NLTU9ERSBsb2Nr bW9kZSk7CiBleHRlcm4gYm9vbCBDaGVja1JlbGF0aW9uTG9ja2VkQnlNZShSZWxhdGlvbiByZWxh dGlvbiwgTE9DS01PREUgbG9ja21vZGUsCiAJCQkJCQkJCQlib29sIG9yc3Ryb25nZXIpOworZXh0 ZXJuIGJvb2wgQ2hlY2tSZWxMb2NrZWRCeU1lKE9pZCByZWxpZCwgTE9DS01PREUgbG9ja21vZGUs IGJvb2wgb3JzdHJvbmdlcik7CiBleHRlcm4gYm9vbCBMb2NrSGFzV2FpdGVyc1JlbGF0aW9uKFJl bGF0aW9uIHJlbGF0aW9uLCBMT0NLTU9ERSBsb2NrbW9kZSk7CiAKIGV4dGVybiB2b2lkIExvY2tS ZWxhdGlvbklkRm9yU2Vzc2lvbihMb2NrUmVsSWQgKnJlbGlkLCBMT0NLTU9ERSBsb2NrbW9kZSk7 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9sc3lzY2FjaGUuaCBiL3NyYy9pbmNsdWRl L3V0aWxzL2xzeXNjYWNoZS5oCmluZGV4IDRmNTQxOGI5NzIuLjMwNzRlNjA0ZGQgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3V0aWxzL2xzeXNjYWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxz L2xzeXNjYWNoZS5oCkBAIC0xMzksNiArMTM5LDcgQEAgZXh0ZXJuIGNoYXIgZ2V0X3JlbF9yZWxr aW5kKE9pZCByZWxpZCk7CiBleHRlcm4gYm9vbCBnZXRfcmVsX3JlbGlzcGFydGl0aW9uKE9pZCBy ZWxpZCk7CiBleHRlcm4gT2lkCWdldF9yZWxfdGFibGVzcGFjZShPaWQgcmVsaWQpOwogZXh0ZXJu IGNoYXIgZ2V0X3JlbF9wZXJzaXN0ZW5jZShPaWQgcmVsaWQpOworZXh0ZXJuIGJvb2wgZ2V0X3Jl bF9yZWxpc3NoYXJlZChPaWQgcmVsaWQpOwogZXh0ZXJuIE9pZAlnZXRfdHJhbnNmb3JtX2Zyb21z cWwoT2lkIHR5cGlkLCBPaWQgbGFuZ2lkLCBMaXN0ICp0cmZ0eXBlcyk7CiBleHRlcm4gT2lkCWdl dF90cmFuc2Zvcm1fdG9zcWwoT2lkIHR5cGlkLCBPaWQgbGFuZ2lkLCBMaXN0ICp0cmZ0eXBlcyk7 CiBleHRlcm4gYm9vbCBnZXRfdHlwaXNkZWZpbmVkKE9pZCB0eXBpZCk7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNo ZS5oCmluZGV4IGE0NDMxODFkNDEuLmMyZTQ4NWFjMmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3V0aWxzL3BsYW5jYWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oCkBA IC0yMjEsNiArMjIxLDIxIEBAIGV4dGVybiBDYWNoZWRQbGFuICpHZXRDYWNoZWRQbGFuKENhY2hl ZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCiAJCQkJCQkJCSBQYXJhbUxpc3RJbmZvIGJvdW5kUGFy YW1zLAogCQkJCQkJCQkgUmVzb3VyY2VPd25lciBvd25lciwKIAkJCQkJCQkJIFF1ZXJ5RW52aXJv bm1lbnQgKnF1ZXJ5RW52KTsKKworLyoKKyAqIENhY2hlZFBsYW5TdGlsbFZhbGlkCisgKgkJUmV0 dXJucyBpZiBhIGNhY2hlZCBnZW5lcmljIHBsYW4gaXMgc3RpbGwgdmFsaWQKKyAqCisgKiBDYWxs ZWQgYnkgdGhlIGV4ZWN1dG9yIGFmdGVyIGl0IGhhcyBmaW5pc2hlZCB0YWtpbmcgbG9ja3Mgb24g YSBwbGFuIHRyZWUKKyAqIGluIGEgQ2FjaGVkUGxhbi4KKyAqLworc3RhdGljIGlubGluZSBib29s CitDYWNoZWRQbGFuU3RpbGxWYWxpZChDYWNoZWRQbGFuICpjcGxhbikKK3sKKwlyZXR1cm4gY3Bs YW4tPmlzX3ZhbGlkOworfQorCitleHRlcm4gYm9vbCBDYWNoZWRQbGFuU3RpbGxWYWxpZChDYWNo ZWRQbGFuICpjcGxhbik7CiBleHRlcm4gdm9pZCBSZWxlYXNlQ2FjaGVkUGxhbihDYWNoZWRQbGFu ICpwbGFuLCBSZXNvdXJjZU93bmVyIG93bmVyKTsKIAogZXh0ZXJuIGJvb2wgQ2FjaGVkUGxhbkFs bG93c1NpbXBsZVZhbGlkaXR5Q2hlY2soQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3BvcnRhbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMv cG9ydGFsLmgKaW5kZXggYWEwOGIxZTBmYy4uMzMyYTA4Y2NiNCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvdXRpbHMvcG9ydGFsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmgKQEAg LTEzOCw2ICsxMzgsOSBAQCB0eXBlZGVmIHN0cnVjdCBQb3J0YWxEYXRhCiAJUXVlcnlDb21wbGV0 aW9uIHFjOwkJCS8qIGNvbW1hbmQgY29tcGxldGlvbiBkYXRhIGZvciBleGVjdXRlZCBxdWVyeSAq LwogCUxpc3QJICAgKnN0bXRzOwkJCS8qIGxpc3Qgb2YgUGxhbm5lZFN0bXRzICovCiAJQ2FjaGVk UGxhbiAqY3BsYW47CQkJLyogQ2FjaGVkUGxhbiwgaWYgc3RtdHMgYXJlIGZyb20gb25lICovCisJ TGlzdAkgICAqcWRlc2NzOwkJCS8qIGxpc3Qgb2YgUXVlcnlEZXNjcyAqLworCWJvb2wJCXBsYW5f dmFsaWQ7CQkvKiBhcmUgcGxhbihzKSByZWFkeSBmb3IgZXhlY3V0aW9uPyAqLworCU1lbW9yeUNv bnRleHQgcXVlcnlDb250ZXh0OwkvKiBtZW1vcnkgZm9yIFF1ZXJ5RGVzY3MgYW5kIGNoaWxkcmVu ICovCiAKIAlQYXJhbUxpc3RJbmZvIHBvcnRhbFBhcmFtczsgLyogcGFyYW1zIHRvIHBhc3MgdG8g cXVlcnkgKi8KIAlRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudjsgLyogZW52aXJvbm1lbnQgZm9y IHF1ZXJ5ICovCkBAIC0yNDIsNiArMjQ1LDcgQEAgZXh0ZXJuIHZvaWQgUG9ydGFsRGVmaW5lUXVl cnkoUG9ydGFsIHBvcnRhbCwKIAkJCQkJCQkgIENvbW1hbmRUYWcgY29tbWFuZFRhZywKIAkJCQkJ CQkgIExpc3QgKnN0bXRzLAogCQkJCQkJCSAgQ2FjaGVkUGxhbiAqY3BsYW4pOworZXh0ZXJuIHZv aWQgUG9ydGFsUXVlcnlGaW5pc2goUXVlcnlEZXNjICpxdWVyeURlc2MpOwogZXh0ZXJuIFBsYW5u ZWRTdG10ICpQb3J0YWxHZXRQcmltYXJ5U3RtdChQb3J0YWwgcG9ydGFsKTsKIGV4dGVybiB2b2lk IFBvcnRhbENyZWF0ZUhvbGRTdG9yZShQb3J0YWwgcG9ydGFsKTsKIGV4dGVybiB2b2lkIFBvcnRh bEhhc2hUYWJsZURlbGV0ZUFsbCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv ZGVsYXlfZXhlY3V0aW9uL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9kZWxheV9leGVjdXRp b24vTWFrZWZpbGUKaW5kZXggNzBmMjRlODQ2ZC4uMmZjYTg0ZDAyNyAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvbW9kdWxlcy9kZWxheV9leGVjdXRpb24vTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy9kZWxheV9leGVjdXRpb24vTWFrZWZpbGUKQEAgLTgsNyArOCw4IEBAIE9CSlMgPSBcCiAJ ZGVsYXlfZXhlY3V0aW9uLm8KIAogSVNPTEFUSU9OID0gcGFydGl0aW9uLWFkZGl0aW9uIFwKLQkg ICAgcGFydGl0aW9uLXJlbW92YWwtMQorCSAgICBwYXJ0aXRpb24tcmVtb3ZhbC0xIFwKKwkJY2Fj aGVkLXBsYW4tcmVwbGFuCiAKIGlmZGVmIFVTRV9QR1hTCiBQR19DT05GSUcgPSBwZ19jb25maWcK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvZGVsYXlfZXhlY3V0aW9uL2RlbGF5X2V4ZWN1 dGlvbi5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9kZWxheV9leGVjdXRpb24vZGVsYXlfZXhlY3V0aW9u LmMKaW5kZXggN2NkNzZlYjM0Yi4uNWQ3YTNlOTg1OCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9k dWxlcy9kZWxheV9leGVjdXRpb24vZGVsYXlfZXhlY3V0aW9uLmMKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy9kZWxheV9leGVjdXRpb24vZGVsYXlfZXhlY3V0aW9uLmMKQEAgLTEsMTQgKzEsMTggQEAK IC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIGRlbGF5X2V4ZWN1dGlvbi5jCi0gKgkJVGVzdCBt b2R1bGUgdG8gYWxsb3cgZGVsYXkgYmV0d2VlbiBwYXJzaW5nIGFuZCBleGVjdXRpb24gb2YgYSBx dWVyeS4KKyAqCQlUZXN0IG1vZHVsZSB0byBpbnRyb2R1Y2UgZGVsYXkgYXQgdmFyaW91cyBwb2lu dHMgZHVyaW5nIGV4ZWN1dGlvbiBvZiBhCisgKgkJcXVlcnkgdG8gdGVzdCB0aGF0IGV4ZWN1dGlv biBwcm9jZWVkcyBzYWZlbHkgaW4gbGlnaHQgb2YgY29uY3VycmVudAorICoJCWNoYW5nZXMuCiAg KgogICogVGhlIGRlbGF5IGlzIGltcGxlbWVudGVkIGJ5IHRha2luZyBhbmQgaW1tZWRpYXRlbHkg cmVsZWFzaW5nIGEgc3BlY2lmaWVkCiAgKiBhZHZpc29yeSBsb2NrLiAgSWYgYW5vdGhlciBwcm9j ZXNzIGhhcyBwcmV2aW91c2x5IHRha2VuIHRoYXQgbG9jaywgdGhlCiAgKiBjdXJyZW50IHByb2Nl c3Mgd2lsbCBiZSBibG9ja2VkIHVudGlsIHRoZSBsb2NrIGlzIHJlbGVhc2VkOyBvdGhlcndpc2Us CiAgKiB0aGVyZSdzIG5vIGVmZmVjdC4gIFRoaXMgYWxsb3dzIGFuIGlzb2xhdGlvbnRlc3RlciBz Y3JpcHQgdG8gcmVsaWFibHkKLSAqIHRlc3QgYmVoYXZpb3JzIHdoZXJlIHNvbWUgc3BlY2lmaWVk IGFjdGlvbiBoYXBwZW5zIGluIGFub3RoZXIgYmFja2VuZAotICogYmV0d2VlbiBwYXJzaW5nIGFu ZCBleGVjdXRpb24gb2YgYW55IGRlc2lyZWQgcXVlcnkuCisgKiB0ZXN0IGJlaGF2aW9ycyB3aGVy ZSBzb21lIHNwZWNpZmllZCBhY3Rpb24gaGFwcGVucyBpbiBhbm90aGVyIGJhY2tlbmQgaW4KKyAq IGEgY291cGxlIG9mIGNhc2VzOiAxKSBiZXR3ZWVuIHBhcnNpbmcgYW5kIGV4ZWN1dGlvbiBvZiBh bnkgZGVzaXJlZCBxdWVyeQorICogd2hlbiB1c2luZyB0aGUgcGxhbm5lcl9ob29rLCAyKSBiZXR3 ZWVuIFJldmFsaWRhdGVDYWNoZWRRdWVyeSgpIGFuZAorICogRXhlY3V0b3JTdGFydCgpIHdoZW4g dXNpbmcgdGhlIEV4ZWN1dG9yU3RhcnRfaG9vay4KICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMjAt MjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAqCkBAIC0yMiw2ICsy Niw3IEBACiAKICNpbmNsdWRlIDxsaW1pdHMuaD4KIAorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1 dG9yLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5uZXIuaCIKICNpbmNsdWRlICJ1dGlscy9i dWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgpAQCAtMzIsOSArMzcsMTEgQEAgUEdf TU9EVUxFX01BR0lDOwogCiAvKiBHVUM6IGFkdmlzb3J5IGxvY2sgSUQgdG8gdXNlLiAgWmVybyBk aXNhYmxlcyB0aGUgZmVhdHVyZS4gKi8KIHN0YXRpYyBpbnQJcG9zdF9wbGFubmluZ19sb2NrX2lk ID0gMDsKK3N0YXRpYyBpbnQJZXhlY3V0b3Jfc3RhcnRfbG9ja19pZCA9IDA7CiAKLS8qIFNhdmUg cHJldmlvdXMgcGxhbm5lciBob29rIHVzZXIgdG8gYmUgYSBnb29kIGNpdGl6ZW4gKi8KKy8qIFNh dmUgcHJldmlvdXMgaG9vayB1c2VycyB0byBiZSBhIGdvb2QgY2l0aXplbiAqLwogc3RhdGljIHBs YW5uZXJfaG9va190eXBlIHByZXZfcGxhbm5lcl9ob29rID0gTlVMTDsKK3N0YXRpYyBFeGVjdXRv clN0YXJ0X2hvb2tfdHlwZSBwcmV2X0V4ZWN1dG9yU3RhcnRfaG9vayA9IE5VTEw7CiAKIAogLyog cGxhbm5lcl9ob29rIGZ1bmN0aW9uIHRvIHByb3ZpZGUgdGhlIGRlc2lyZWQgZGVsYXkgKi8KQEAg LTcwLDExICs3Nyw0MSBAQCBkZWxheV9leGVjdXRpb25fcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNv bnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKIAlyZXR1cm4gcmVzdWx0OwogfQogCisvKiBwbGFubmVy X2hvb2sgZnVuY3Rpb24gdG8gcHJvdmlkZSB0aGUgZGVzaXJlZCBkZWxheSAqLworc3RhdGljIHZv aWQKK2RlbGF5X2V4ZWN1dGlvbl9FeGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBp bnQgZWZsYWdzKQoreworCS8qIElmIGVuYWJsZWQsIGRlbGF5IGJ5IHRha2luZyBhbmQgcmVsZWFz aW5nIHRoZSBzcGVjaWZpZWQgbG9jayAqLworCWlmIChleGVjdXRvcl9zdGFydF9sb2NrX2lkICE9 IDApCisJeworCQlEaXJlY3RGdW5jdGlvbkNhbGwxKHBnX2Fkdmlzb3J5X2xvY2tfaW50OCwKKwkJ CQkJCQlJbnQ2NEdldERhdHVtKChpbnQ2NCkgZXhlY3V0b3Jfc3RhcnRfbG9ja19pZCkpOworCQlE aXJlY3RGdW5jdGlvbkNhbGwxKHBnX2Fkdmlzb3J5X3VubG9ja19pbnQ4LAorCQkJCQkJCUludDY0 R2V0RGF0dW0oKGludDY0KSBleGVjdXRvcl9zdGFydF9sb2NrX2lkKSk7CisKKwkJLyoKKwkJICog RW5zdXJlIHRoYXQgd2Ugbm90aWNlIGFueSBwZW5kaW5nIGludmFsaWRhdGlvbnMsIHNpbmNlIHRo ZSBhZHZpc29yeQorCQkgKiBsb2NrIGZ1bmN0aW9ucyBkb24ndCBkbyB0aGlzLgorCQkgKi8KKwkJ QWNjZXB0SW52YWxpZGF0aW9uTWVzc2FnZXMoKTsKKwl9CisKKwkvKiBOb3cgc3RhcnQgdGhlIGV4 ZWN1dG9yLCBwb3NzaWJseSB2aWEgYSBwcmV2aW91cyBob29rIHVzZXIgKi8KKwlpZiAocHJldl9F eGVjdXRvclN0YXJ0X2hvb2spCisJCXByZXZfRXhlY3V0b3JTdGFydF9ob29rKHF1ZXJ5RGVzYywg ZWZsYWdzKTsKKwllbHNlCisJCXN0YW5kYXJkX0V4ZWN1dG9yU3RhcnQocXVlcnlEZXNjLCBlZmxh Z3MpOworCisJaWYgKGV4ZWN1dG9yX3N0YXJ0X2xvY2tfaWQgIT0gMCkKKwkJZWxvZyhOT1RJQ0Us ICJGaW5pc2hlZCBFeGVjdXRvclN0YXJ0KCk6IENhY2hlZFBsYW4gaXMgJXMiLAorCQkJIHF1ZXJ5 RGVzYy0+Y3BsYW4tPmlzX3ZhbGlkID8gInZhbGlkIiA6ICJub3QgdmFsaWQiKTsKK30KKwogLyog TW9kdWxlIGxvYWQgZnVuY3Rpb24gKi8KIHZvaWQKIF9QR19pbml0KHZvaWQpCiB7Ci0JLyogU2V0 IHVwIHRoZSBHVUMgdG8gY29udHJvbCB3aGljaCBsb2NrIGlzIHVzZWQgKi8KKwkvKiBTZXQgdXAg R1VDcyB0byBjb250cm9sIHdoaWNoIGxvY2sgaXMgdXNlZCAqLwogCURlZmluZUN1c3RvbUludFZh cmlhYmxlKCJkZWxheV9leGVjdXRpb24ucG9zdF9wbGFubmluZ19sb2NrX2lkIiwKIAkJCQkJCQki U2V0cyB0aGUgYWR2aXNvcnkgbG9jayBJRCB0byBiZSBsb2NrZWQvdW5sb2NrZWQgYWZ0ZXIgcGxh bm5pbmcuIiwKIAkJCQkJCQkiWmVybyBkaXNhYmxlcyB0aGUgZGVsYXkuIiwKQEAgLTg2LDEwICsx MjMsMjIgQEAgX1BHX2luaXQodm9pZCkKIAkJCQkJCQlOVUxMLAogCQkJCQkJCU5VTEwsCiAJCQkJ CQkJTlVMTCk7Ci0KKwlEZWZpbmVDdXN0b21JbnRWYXJpYWJsZSgiZGVsYXlfZXhlY3V0aW9uLmV4 ZWN1dG9yX3N0YXJ0X2xvY2tfaWQiLAorCQkJCQkJCSJTZXRzIHRoZSBhZHZpc29yeSBsb2NrIElE IHRvIGJlIGxvY2tlZC91bmxvY2tlZCBiZWZvcmUgc3RhcnRpbmcgZXhlY3V0aW9uLiIsCisJCQkJ CQkJIlplcm8gZGlzYWJsZXMgdGhlIGRlbGF5LiIsCisJCQkJCQkJJmV4ZWN1dG9yX3N0YXJ0X2xv Y2tfaWQsCisJCQkJCQkJMCwKKwkJCQkJCQkwLCBJTlRfTUFYLAorCQkJCQkJCVBHQ19VU0VSU0VU LAorCQkJCQkJCTAsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCU5VTEwpOwog CU1hcmtHVUNQcmVmaXhSZXNlcnZlZCgiZGVsYXlfZXhlY3V0aW9uIik7CiAKLQkvKiBJbnN0YWxs IG91ciBob29rICovCisJLyogSW5zdGFsbCBvdXIgaG9va3MuICovCiAJcHJldl9wbGFubmVyX2hv b2sgPSBwbGFubmVyX2hvb2s7CiAJcGxhbm5lcl9ob29rID0gZGVsYXlfZXhlY3V0aW9uX3BsYW5u ZXI7CisJcHJldl9FeGVjdXRvclN0YXJ0X2hvb2sgPSBFeGVjdXRvclN0YXJ0X2hvb2s7CisJRXhl Y3V0b3JTdGFydF9ob29rID0gZGVsYXlfZXhlY3V0aW9uX0V4ZWN1dG9yU3RhcnQ7CiB9CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2RlbGF5X2V4ZWN1dGlvbi9leHBlY3RlZC9jYWNoZWQt cGxhbi1yZXBsYW4ub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy9kZWxheV9leGVjdXRpb24vZXhwZWN0 ZWQvY2FjaGVkLXBsYW4tcmVwbGFuLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi5lYWFjNTUxMjJiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9k ZWxheV9leGVjdXRpb24vZXhwZWN0ZWQvY2FjaGVkLXBsYW4tcmVwbGFuLm91dApAQCAtMCwwICsx LDQzIEBACitQYXJzZWQgdGVzdCBzcGVjIHdpdGggMiBzZXNzaW9ucworCitzdGFydGluZyBwZXJt dXRhdGlvbjogczFwcmVwIHMybG9jayBzMWV4ZWMgczJkcm9waSBzMnVubG9jaworc3RlcCBzMXBy ZXA6IFNFVCBwbGFuX2NhY2hlX21vZGUgPSBmb3JjZV9nZW5lcmljX3BsYW47CisJCSAgUFJFUEFS RSBxIEFTIFNFTEVDVCAqIEZST00gZm9vdiBXSEVSRSBhID0gJDE7CisJCSAgRVhQTEFJTiAoQ09T VFMgT0ZGKSBFWEVDVVRFIHEgKDEpOworUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FwcGVuZCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBTdWJwbGFucyBSZW1vdmVkOiAxICAg ICAgICAgICAgICAgICAgCisgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIGZvbzEgZm9vXzEgICAK KyAgICAgICAgUmVjaGVjayBDb25kOiAoYSA9ICQxKSAgICAgICAgIAorICAgICAgICAtPiAgQml0 bWFwIEluZGV4IFNjYW4gb24gZm9vMV9hCisgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChhID0g JDEpICAgICAKKyg2IHJvd3MpCisKK3N0ZXAgczJsb2NrOiBTRUxFQ1QgcGdfYWR2aXNvcnlfbG9j aygxMjM0NSk7CitwZ19hZHZpc29yeV9sb2NrCistLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAg ICAgICAgCisoMSByb3cpCisKK3N0ZXAgczFleGVjOiBMT0FEICdkZWxheV9leGVjdXRpb24nOwor CQkgIFNFVCBkZWxheV9leGVjdXRpb24uZXhlY3V0b3Jfc3RhcnRfbG9ja19pZCA9IDEyMzQ1Owor CQkgIEVYUExBSU4gKENPU1RTIE9GRikgRVhFQ1VURSBxICgxKTsgPHdhaXRpbmcgLi4uPgorc3Rl cCBzMmRyb3BpOiBEUk9QIElOREVYIGZvbzFfYTsKK3N0ZXAgczJ1bmxvY2s6IFNFTEVDVCBwZ19h ZHZpc29yeV91bmxvY2soMTIzNDUpOworcGdfYWR2aXNvcnlfdW5sb2NrCistLS0tLS0tLS0tLS0t LS0tLS0KK3QgICAgICAgICAgICAgICAgIAorKDEgcm93KQorCitzdGVwIHMxZXhlYzogPC4uLiBj b21wbGV0ZWQ+CitzMTogTk9USUNFOiAgRmluaXNoZWQgRXhlY3V0b3JTdGFydCgpOiBDYWNoZWRQ bGFuIGlzIG5vdCB2YWxpZAorczE6IE5PVElDRTogIEZpbmlzaGVkIEV4ZWN1dG9yU3RhcnQoKTog Q2FjaGVkUGxhbiBpcyB2YWxpZAorUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQXBwZW5kICAgICAgICAgICAgICAgICAgICAgIAorICBT dWJwbGFucyBSZW1vdmVkOiAxICAgICAgIAorICAtPiAgU2VxIFNjYW4gb24gZm9vMSBmb29fMQor ICAgICAgICBGaWx0ZXI6IChhID0gJDEpICAgIAorKDQgcm93cykKKwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy9kZWxheV9leGVjdXRpb24vc3BlY3MvY2FjaGVkLXBsYW4tcmVwbGFuLnNw ZWMgYi9zcmMvdGVzdC9tb2R1bGVzL2RlbGF5X2V4ZWN1dGlvbi9zcGVjcy9jYWNoZWQtcGxhbi1y ZXBsYW4uc3BlYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi41YmQ1ZmRi ZjFjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9kZWxheV9leGVjdXRpb24v c3BlY3MvY2FjaGVkLXBsYW4tcmVwbGFuLnNwZWMKQEAgLTAsMCArMSwzOSBAQAorIyBUZXN0IHRv IGNoZWNrIHRoYXQgaW52YWxpZGF0aW9uIG9mIGEgY2FjaGVkIHBsYW4gZHVyaW5nIEV4ZWN1dG9y U3RhcnQKKyMgY29ycmVjdGx5IHRyaWdnZXJzIHJlcGxhbm5pbmcgYW5kIHJlLWV4ZWN1dGlvbi4K Kworc2V0dXAKK3sKKyAgQ1JFQVRFIFRBQkxFIGZvbyAoYSBpbnQsIGIgdGV4dCkgUEFSVElUSU9O IEJZIExJU1QoYSk7CisgIENSRUFURSBUQUJMRSBmb28xIFBBUlRJVElPTiBPRiBmb28gRk9SIFZB TFVFUyBJTiAoMSk7CisgIENSRUFURSBJTkRFWCBmb28xX2EgT04gZm9vMSAoYSk7CisgIENSRUFU RSBUQUJMRSBmb28yIFBBUlRJVElPTiBPRiBmb28gRk9SIFZBTFVFUyBJTiAoMik7CisgIENSRUFU RSBWSUVXIGZvb3YgQVMgU0VMRUNUICogRlJPTSBmb287Cit9CisKK3RlYXJkb3duCit7CisgIERS T1AgVklFVyBmb292OworICBEUk9QIFRBQkxFIGZvbzsKK30KKworc2Vzc2lvbiAiczEiCisjIENy ZWF0ZXMgYSBwcmVwYXJlZCBzdGF0ZW1lbnQgYW5kIGZvcmNlcyBjcmVhdGlvbiBvZiBhIGdlbmVy aWMgcGxhbgorc3RlcCAiczFwcmVwIiAgIHsgU0VUIHBsYW5fY2FjaGVfbW9kZSA9IGZvcmNlX2dl bmVyaWNfcGxhbjsKKwkJICBQUkVQQVJFIHEgQVMgU0VMRUNUICogRlJPTSBmb292IFdIRVJFIGEg PSAkMTsKKwkJICBFWFBMQUlOIChDT1NUUyBPRkYpIEVYRUNVVEUgcSAoMSk7IH0KKyMgRXhlY3V0 ZXMgYSBnZW5lcmljIHBsYW4KK3N0ZXAgInMxZXhlYyIJeyBMT0FEICdkZWxheV9leGVjdXRpb24n OworCQkgIFNFVCBkZWxheV9leGVjdXRpb24uZXhlY3V0b3Jfc3RhcnRfbG9ja19pZCA9IDEyMzQ1 OworCQkgIEVYUExBSU4gKENPU1RTIE9GRikgRVhFQ1VURSBxICgxKTsgfQorCitzZXNzaW9uICJz MiIKK3N0ZXAgInMybG9jayIJeyBTRUxFQ1QgcGdfYWR2aXNvcnlfbG9jaygxMjM0NSk7IH0KK3N0 ZXAgInMydW5sb2NrIgl7IFNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2soMTIzNDUpOyB9CitzdGVw ICJzMmRyb3BpIgl7IERST1AgSU5ERVggZm9vMV9hOyB9CisKKyMgV2hpbGUgInMxZXhlYyIgd2Fp dHMgdG8gYWNxdWlyZSB0aGUgYWR2aXNvcnkgbG9jaywgInMyZHJvcCIgaXMgYWJsZSB0byBkcm9w CisjIHRoZSBpbmRleCBiZWluZyB1c2VkIGluIHRoZSBjYWNoZWQgcGxhbiBmb3IgYHFgLCBzbyB3 aGVuICJzMWV4ZWMiIGlzIHRoZW4KKyMgdW5ibG9ja2VkIGFuZCBpbml0aWFsaXplcyB0aGUgY2Fj aGVkIHBsYW4gZm9yIGV4ZWN1dGlvbiwgaXQgZGV0ZWN0cyB0aGUKKyMgY29uY3VycmVudCBpbmRl eCBkcm9wIGFuZCBjYXVzZXMgdGhlIGNhY2hlZCBwbGFuIHRvIGJlIGRpc2NhcmRlZCBhbmQKKyMg cmVjcmVhdGVkIHdpdGhvdXQgdGhlIGluZGV4LgorcGVybXV0YXRpb24gInMxcHJlcCIgInMybG9j ayIgInMxZXhlYyIgInMyZHJvcGkiICJzMnVubG9jayIKLS0gCjIuMzUuMwoK --0000000000002ff08f05f3cb48f8--