Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r5sim-00FeMh-Lg for pgsql-hackers@arkaria.postgresql.org; Wed, 22 Nov 2023 19:17:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1r5sij-00C40Z-Fi for pgsql-hackers@arkaria.postgresql.org; Wed, 22 Nov 2023 19:17:09 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r5sih-00C40A-PC for pgsql-hackers@lists.postgresql.org; Wed, 22 Nov 2023 19:17:09 +0000 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1r5siZ-006qxI-CJ for pgsql-hackers@lists.postgresql.org; Wed, 22 Nov 2023 19:17:04 +0000 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-4083f613272so591675e9.1 for ; Wed, 22 Nov 2023 11:16:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1700680618; x=1701285418; darn=lists.postgresql.org; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=g/jgOtz2WM40yVJ5UDe9ogSlZzD6+3WNwu3uaSzm4SY=; b=Yy8QkWVRn49BOqfUoLCMxFZtP8GcaakLLEEZR2b3uFRPNg7p2C3cH7PgC+Q0tjbNz2 jRx4QdpbG1rUh8qMbSL5PptKJ+8KGUV1Ya/JvfG0dp+UUuZhVNHNfMLZlEaPyahd17GM 46+dhqnd3IYsNfyXueCdtP944MZhvG2XKQDH68IS9uy7JjLyOWa2/0Qg3AKBN61H2LiF Ej5Q4YyZjBuqEOtswi6iaixGrmLsVquQ8pQ/Y4typKGlk4wwqFZ2hM36H1sUmQNEuK5s +FzSfCMV8kp7dQxCKWPvt0ktgF2whfMP7G9srvjq2S9K9ei0RP/rHMKjOnPkxY0J7ne3 N5IA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700680618; x=1701285418; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=g/jgOtz2WM40yVJ5UDe9ogSlZzD6+3WNwu3uaSzm4SY=; b=KcKi1BDqem77xx7jMwW0PXA6cKcKLOpImqvch/f9l0TGySjMMigMryHpO1L3Dhd9zL F3bu1ND5Jw9dNDZbhjVVtE681ZDC7U7s7dB9aKqxOwVFigEYtiPl3OEDn9vv+Sx/dXLj +tYU3GoHlxN3VtF6HV/1GMCWLitKOvSvfpK+pSxBGWJF4LJOUIhjO9Jeo8yRRkKKutNO G47xLyYr+Ue5E9kcbvdScap6U0nNnlpND5hRipHVuBzKrgU5opOZwwWRiebZW3YeN5BT gKFoORZPr2wlGrlr2EwuKXmH2R5gVNY4zy02rx0H/Lq7I0eNqmxR7WgAjgVDay9mS8W6 /dnQ== X-Gm-Message-State: AOJu0Yys5buZleChRtPRQbRQwj79KkEfy6I3gEi36rf4tmqoj4vYDtvB H5ufb3v/tW8t9v7IZej7gW5Yq6Do9yxM8evxlNmQ+A== X-Google-Smtp-Source: AGHT+IF3aOoz++jl02Lkj48YdFbD537w8DMJI36GPvwUR4Nh9ZncTFwR066tv9e/1T4+QPmPQH/fJQ== X-Received: by 2002:adf:d1ef:0:b0:332:d518:d668 with SMTP id g15-20020adfd1ef000000b00332d518d668mr888185wrd.52.1700680617572; Wed, 22 Nov 2023 11:16:57 -0800 (PST) Received: from [10.137.0.17] (srv1.mobissw.com. [89.235.0.226]) by smtp.gmail.com with ESMTPSA id k4-20020a5d6e84000000b0032da87e32e2sm153759wrz.4.2023.11.22.11.16.56 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 22 Nov 2023 11:16:57 -0800 (PST) Content-Type: multipart/mixed; boundary="------------Vg0tEXT73Q0i0DvYi490fHYV" Message-ID: Date: Wed, 22 Nov 2023 20:16:55 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: Parallel CREATE INDEX for BRIN indexes Content-Language: en-US To: Matthias van de Meent Cc: PostgreSQL Hackers References: <2d7c64de-716e-346e-b01e-03db0c2bc5ac@enterprisedb.com> <2e86059f-4004-eec1-2bc1-9e7fd119c9e2@enterprisedb.com> From: Tomas Vondra In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------Vg0tEXT73Q0i0DvYi490fHYV Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 11/20/23 20:48, Matthias van de Meent wrote: > On Wed, 8 Nov 2023 at 12:03, Tomas Vondra wrote: >> >> Hi, >> >> here's an updated patch, addressing the review comments, and reworking >> how the work is divided between the workers & leader etc. >> >> 0001 is just v2, rebased to current master >> >> 0002 and 0003 address most of the issues, in particular it >> >> - removes the unnecessary spool >> - fixes bs_reltuples type to double >> - a couple comments are reworded to be clearer >> - changes loop/condition in brinbuildCallbackParallel >> - removes asserts added for debugging >> - fixes cast in comparetup_index_brin >> - 0003 then simplifies comparetup_index_brin >> - I haven't inlined the tuplesort_puttuple_common parameter >> (didn't seem worth it) > > OK, thanks > >> 0004 Reworks how the work is divided between workers and combined by the >> leader. It undoes the tableam.c changes that attempted to divide the >> relation into chunks matching the BRIN ranges, and instead merges the >> results in the leader (using the BRIN "union" function). > > That's OK. > >> I haven't done any indentation fixes yet. >> >> I did fairly extensive testing, using pageinspect to compare indexes >> built with/without parallelism. More testing is needed, but it seems to >> work fine (with other opclasses and so on). > > After code-only review, here are some comments: > >> +++ b/src/backend/access/brin/brin.c >> [...] >> +/* Magic numbers for parallel state sharing */ >> +#define PARALLEL_KEY_BRIN_SHARED UINT64CONST(0xA000000000000001) >> +#define PARALLEL_KEY_TUPLESORT UINT64CONST(0xA000000000000002) > > These shm keys use the same constants also in use in > access/nbtree/nbtsort.c. While this shouldn't be an issue in normal > operations, I'd prefer if we didn't actively introduce conflicting > identifiers when we still have significant amounts of unused values > remaining. > Hmmm. Is there some rule of thumb how to pick these key values? I see nbtsort.c uses 0xA prefix, execParallel.c uses 0xE, while parallel.c ended up using 0xFFFFFFFFFFFF as prefix. I've user 0xB, simply because BRIN also starts with B. >> +#define PARALLEL_KEY_QUERY_TEXT UINT64CONST(0xA000000000000003) > > This is the fourth definition of a PARALLEL%_KEY_QUERY_TEXT, the > others being in access/nbtree/nbtsort.c (value 0xA000000000000004, one > more than brin's), backend/executor/execParallel.c > (0xE000000000000008), and PARALLEL_VACUUM_KEY_QUERY_TEXT (0x3) (though > I've not checked that their uses are exactly the same, I'd expect at > least btree to match mostly, if not fully, 1:1). > I think we could probably benefit from a less ad-hoc sharing of query > texts. I don't think that needs to happen specifically in this patch, > but I think it's something to keep in mind in future efforts. > I'm afraid I don't quite get what you mean by "ad hoc sharing of query texts". Are you saying we shouldn't propagate the query text to the parallel workers? Why? Or what's the proper solution? >> +_brin_end_parallel(BrinLeader *brinleader, BrinBuildState *state) >> [...] >> + BrinSpool *spool = state->bs_spool; >> [...] >> + if (!state) >> + return; > > I think the assignment to spool should be moved to below this > condition, as _brin_begin_parallel calls this with state=NULL when it > can't launch parallel workers, which will cause issues here. > Good catch! I wonder if we have tests that might trigger this, say by setting max_parallel_maintenance_workers > 0 while no workers allowed. >> + state->bs_numtuples = brinshared->indtuples; > > My IDE complains about bs_numtuples being an integer. This is a > pre-existing issue, but still valid: we can hit an overflow on tables > with pages_per_range=1 and relsize >= 2^31 pages. Extremely unlikely, > but problematic nonetheless. > True. I think I've been hesitant to make this a double because it seems a bit weird to do +1 with a double, and at some point (d == d+1). But this seems safe, we're guaranteed to be far away from that threshold. >> + * FIXME This probably needs some memory management fixes - we're reading >> + * tuples from the tuplesort, we're allocating an emty tuple, and so on. >> + * Probably better to release this memory. > > This should probably be resolved. > AFAICS that comment is actually inaccurate/stale, sorry about that. The code actually allocates (and resets) a single memtuple, and also emptyTuple. So I think that's OK, I've removed the comment. > I also noticed that this is likely to execute `union_tuples` many > times when pages_per_range is coprime with the parallel table scan's > block stride (or when we for other reasons have many tuples returned > for each range); and this `union_tuples` internally allocates and > deletes its own memory context for its deserialization of the 'b' > tuple. I think we should just pass a scratch context instead, so that > we don't have the overhead of continously creating then deleting the > same memory context Perhaps. Looking at the code, isn't it a bit strange how union_tuples uses the context? It creates the context, calls brin_deform_tuple in that context, but then the rest of the function (including datumCopy and similar stuff) happens in the caller's context ... However, I don't think the number of union_tuples calls is likely to be very high, especially for large tables. Because we split the table into 2048 chunks, and then cap the chunk size by 8192. For large tables (where this matters) we're likely close to 8192. > >> +++ b/src/backend/catalog/index.c >> [...] >> - indexRelation->rd_rel->relam == BTREE_AM_OID) >> + (indexRelation->rd_rel->relam == BTREE_AM_OID || >> + indexRelation->rd_rel->relam == BRIN_AM_OID)) > > I think this needs some more effort. I imagine a new > IndexAmRoutine->amcanbuildparallel is more appropriate than this > hard-coded list - external indexes may want to utilize the parallel > index creation planner facility, too. > Good idea. I added the IndexAmRoutine flag and used it here. > > Some notes: > As a project PostgreSQL seems to be trying to move away from > hardcoding heap into everything in favour of the more AM-agnostic > 'table'. I suggest replacing all mentions of "heap" in the arguments > with "table", to reduce the work future maintainers need to do to fix > this. Even when this AM is mostly targetted towards the heap AM, other > AMs (such as those I've heard of that were developed internally at > EDB) use the same block-addressing that heap does, and should thus be > compatible with BRIN. Thus, "heap" is not a useful name here. > I'm not against doing that, but I'd prefer to do that in a separate patch. There's a bunch of preexisting heap references, so and I don't want to introduce inconsistency (patch using table, old code heap) nor do I want to tweak unrelated code. > There are 2 new mentions of "tuplestore" in the patch, while the > structure used is tuplesort: one on form_and_spill_tuple, and one on > brinbuildCallbackParallel. Please update those comments. > > That's it for code review. I'll do some performance comparisons and > testing soon, too. > Thanks! Attached is a patch squashing the previous version into a single v3 commit, with fixes for your review in a separate commit. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------Vg0tEXT73Q0i0DvYi490fHYV Content-Type: text/x-patch; charset=UTF-8; name="v4-0001-parallel-CREATE-INDEX-for-BRIN-v3.patch" Content-Disposition: attachment; filename="v4-0001-parallel-CREATE-INDEX-for-BRIN-v3.patch" Content-Transfer-Encoding: base64 RnJvbSBkYzU5MTY1MjAwODM0Y2U5YTk3NTYwNTVlN2RkN2Y0OTI5NzdlMjIzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVHVlLCA3IE5vdiAyMDIzIDE3OjA0OjI4ICswMTAwClN1Ympl Y3Q6IFtQQVRDSCB2NCAxLzJdIHBhcmFsbGVsIENSRUFURSBJTkRFWCBmb3IgQlJJTiB2MwoK LS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMgICAgICAgICAgICAgfCA4Njgg KysrKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9wYXJh bGxlbC5jICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jICAgICAg ICAgICAgICAgIHwgICAzICstCiBzcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydHZh cmlhbnRzLmMgfCAyMDcgKysrKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy9icmluLmggICAgICAg ICAgICAgICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS91dGlscy90dXBsZXNvcnQuaCAgICAg ICAgICAgICAgfCAgMTEgKwogNiBmaWxlcyBjaGFuZ2VkLCAxMDkxIGluc2VydGlvbnMoKyks IDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4v YnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCmluZGV4IGYwZWFjMDc4 ZTBiLi4wZDNkNzI4YzliZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4v YnJpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwpAQCAtMzMsNiAr MzMsNyBAQAogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgogI2luY2x1ZGUg InN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mcmVlc3BhY2UuaCIKKyNp bmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCQkvKiBwZ3JtaW5jbHVkZSBpZ25vcmUgKi8KICNp bmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2lu Y2x1ZGUgInV0aWxzL2RhdHVtLmgiCkBAIC00MCw3ICs0MSwxMTggQEAKICNpbmNsdWRlICJ1 dGlscy9pbmRleF9zZWxmdW5jcy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAj aW5jbHVkZSAidXRpbHMvcmVsLmgiCisjaW5jbHVkZSAidXRpbHMvdHVwbGVzb3J0LmgiCiAK Ky8qIE1hZ2ljIG51bWJlcnMgZm9yIHBhcmFsbGVsIHN0YXRlIHNoYXJpbmcgKi8KKyNkZWZp bmUgUEFSQUxMRUxfS0VZX0JSSU5fU0hBUkVECQlVSU5UNjRDT05TVCgweEEwMDAwMDAwMDAw MDAwMDEpCisjZGVmaW5lIFBBUkFMTEVMX0tFWV9UVVBMRVNPUlQJCQlVSU5UNjRDT05TVCgw eEEwMDAwMDAwMDAwMDAwMDIpCisjZGVmaW5lIFBBUkFMTEVMX0tFWV9RVUVSWV9URVhUCQkJ VUlOVDY0Q09OU1QoMHhBMDAwMDAwMDAwMDAwMDAzKQorI2RlZmluZSBQQVJBTExFTF9LRVlf V0FMX1VTQUdFCQkJVUlOVDY0Q09OU1QoMHhBMDAwMDAwMDAwMDAwMDA0KQorI2RlZmluZSBQ QVJBTExFTF9LRVlfQlVGRkVSX1VTQUdFCQlVSU5UNjRDT05TVCgweEEwMDAwMDAwMDAwMDAw MDUpCisKKy8qCisgKiBTdGF0dXMgcmVjb3JkIGZvciBzcG9vbGluZy9zb3J0aW5nIHBoYXNl LgorICovCit0eXBlZGVmIHN0cnVjdCBCcmluU3Bvb2wKK3sKKwlUdXBsZXNvcnRzdGF0ZSAq c29ydHN0YXRlOwkvKiBzdGF0ZSBkYXRhIGZvciB0dXBsZXNvcnQuYyAqLworCVJlbGF0aW9u CWhlYXA7CisJUmVsYXRpb24JaW5kZXg7Cit9IEJyaW5TcG9vbDsKKworLyoKKyAqIFN0YXR1 cyBmb3IgaW5kZXggYnVpbGRzIHBlcmZvcm1lZCBpbiBwYXJhbGxlbC4gIFRoaXMgaXMgYWxs b2NhdGVkIGluIGEKKyAqIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50LgorICovCit0 eXBlZGVmIHN0cnVjdCBCcmluU2hhcmVkCit7CisJLyoKKwkgKiBUaGVzZSBmaWVsZHMgYXJl IG5vdCBtb2RpZmllZCBkdXJpbmcgdGhlIGJ1aWxkLiAgVGhleSBwcmltYXJpbHkgZXhpc3Qg Zm9yCisJICogdGhlIGJlbmVmaXQgb2Ygd29ya2VyIHByb2Nlc3NlcyB0aGF0IG5lZWQgdG8g Y3JlYXRlIHN0YXRlIGNvcnJlc3BvbmRpbmcKKwkgKiB0byB0aGF0IHVzZWQgYnkgdGhlIGxl YWRlci4KKwkgKi8KKwlPaWQJCQloZWFwcmVsaWQ7CisJT2lkCQkJaW5kZXhyZWxpZDsKKwli b29sCQlpc2NvbmN1cnJlbnQ7CisJQmxvY2tOdW1iZXIJcGFnZXNQZXJSYW5nZTsKKwlpbnQJ CQlzY2FudHVwbGVzb3J0c3RhdGVzOworCisJLyoKKwkgKiB3b3JrZXJzZG9uZWN2IGlzIHVz ZWQgdG8gbW9uaXRvciB0aGUgcHJvZ3Jlc3Mgb2Ygd29ya2Vycy4gIEFsbCBwYXJhbGxlbAor CSAqIHBhcnRpY2lwYW50cyBtdXN0IGluZGljYXRlIHRoYXQgdGhleSBhcmUgZG9uZSBiZWZv cmUgbGVhZGVyIGNhbiB1c2UKKwkgKiByZXN1bHRzIGJ1aWx0IGJ5IHRoZSB3b3JrZXJzIChh bmQgYmVmb3JlIGxlYWRlciBjYW4gd3JpdGUgdGhlIGRhdGEgaW50bworCSAqIHRoZSBpbmRl eCkuCisJICovCisJQ29uZGl0aW9uVmFyaWFibGUgd29ya2Vyc2RvbmVjdjsKKworCS8qCisJ ICogbXV0ZXggcHJvdGVjdHMgYWxsIGZpZWxkcyBiZWZvcmUgaGVhcGRlc2MuCisJICoKKwkg KiBUaGVzZSBmaWVsZHMgY29udGFpbiBzdGF0dXMgaW5mb3JtYXRpb24gb2YgaW50ZXJlc3Qg dG8gQlJJTiBpbmRleAorCSAqIGJ1aWxkcyB0aGF0IG11c3Qgd29yayBqdXN0IHRoZSBzYW1l IHdoZW4gYW4gaW5kZXggaXMgYnVpbHQgaW4gcGFyYWxsZWwuCisJICovCisJc2xvY2tfdAkJ bXV0ZXg7CisKKwkvKgorCSAqIE11dGFibGUgc3RhdGUgdGhhdCBpcyBtYWludGFpbmVkIGJ5 IHdvcmtlcnMsIGFuZCByZXBvcnRlZCBiYWNrIHRvCisJICogbGVhZGVyIGF0IGVuZCBvZiB0 aGUgc2NhbnMuCisJICoKKwkgKiBucGFydGljaXBhbnRzZG9uZSBpcyBudW1iZXIgb2Ygd29y a2VyIHByb2Nlc3NlcyBmaW5pc2hlZC4KKwkgKgorCSAqIHJlbHR1cGxlcyBpcyB0aGUgdG90 YWwgbnVtYmVyIG9mIGlucHV0IGhlYXAgdHVwbGVzLgorCSAqCisJICogaW5kdHVwbGVzIGlz IHRoZSB0b3RhbCBudW1iZXIgb2YgdHVwbGVzIHRoYXQgbWFkZSBpdCBpbnRvIHRoZSBpbmRl eC4KKwkgKi8KKwlpbnQJCQlucGFydGljaXBhbnRzZG9uZTsKKwlkb3VibGUJCXJlbHR1cGxl czsKKwlkb3VibGUJCWluZHR1cGxlczsKKworCS8qCisJICogUGFyYWxsZWxUYWJsZVNjYW5E ZXNjRGF0YSBkYXRhIGZvbGxvd3MuIENhbid0IGRpcmVjdGx5IGVtYmVkIGhlcmUsIGFzCisJ ICogaW1wbGVtZW50YXRpb25zIG9mIHRoZSBwYXJhbGxlbCB0YWJsZSBzY2FuIGRlc2MgaW50 ZXJmYWNlIG1pZ2h0IG5lZWQKKwkgKiBzdHJvbmdlciBhbGlnbm1lbnQuCisJICovCit9IEJy aW5TaGFyZWQ7CisKKy8qCisgKiBSZXR1cm4gcG9pbnRlciB0byBhIEJyaW5TaGFyZWQncyBw YXJhbGxlbCB0YWJsZSBzY2FuLgorICoKKyAqIGMuZi4gc2htX3RvY19hbGxvY2F0ZSBhcyB0 byB3aHkgQlVGRkVSQUxJR04gaXMgdXNlZCwgcmF0aGVyIHRoYW4ganVzdAorICogTUFYQUxJ R04uCisgKi8KKyNkZWZpbmUgUGFyYWxsZWxUYWJsZVNjYW5Gcm9tQnJpblNoYXJlZChzaGFy ZWQpIFwKKwkoUGFyYWxsZWxUYWJsZVNjYW5EZXNjKSAoKGNoYXIgKikgKHNoYXJlZCkgKyBC VUZGRVJBTElHTihzaXplb2YoQnJpblNoYXJlZCkpKQorCisvKgorICogU3RhdHVzIGZvciBs ZWFkZXIgaW4gcGFyYWxsZWwgaW5kZXggYnVpbGQuCisgKi8KK3R5cGVkZWYgc3RydWN0IEJy aW5MZWFkZXIKK3sKKwkvKiBwYXJhbGxlbCBjb250ZXh0IGl0c2VsZiAqLworCVBhcmFsbGVs Q29udGV4dCAqcGN4dDsKKworCS8qCisJICogbnBhcnRpY2lwYW50dHVwbGVzb3J0cyBpcyB0 aGUgZXhhY3QgbnVtYmVyIG9mIHdvcmtlciBwcm9jZXNzZXMKKwkgKiBzdWNjZXNzZnVsbHkg bGF1bmNoZWQsIHBsdXMgb25lIGxlYWRlciBwcm9jZXNzIGlmIGl0IHBhcnRpY2lwYXRlcyBh cyBhCisJICogd29ya2VyIChvbmx5IERJU0FCTEVfTEVBREVSX1BBUlRJQ0lQQVRJT04gYnVp bGRzIGF2b2lkIGxlYWRlcgorCSAqIHBhcnRpY2lwYXRpbmcgYXMgYSB3b3JrZXIpLgorCSAq LworCWludAkJCW5wYXJ0aWNpcGFudHR1cGxlc29ydHM7CisKKwkvKgorCSAqIExlYWRlciBw cm9jZXNzIGNvbnZlbmllbmNlIHBvaW50ZXJzIHRvIHNoYXJlZCBzdGF0ZSAobGVhZGVyIGF2 b2lkcyBUT0MKKwkgKiBsb29rdXBzKS4KKwkgKgorCSAqIGJyaW5zaGFyZWQgaXMgdGhlIHNo YXJlZCBzdGF0ZSBmb3IgZW50aXJlIGJ1aWxkLiAgc2hhcmVkc29ydCBpcyB0aGUKKwkgKiBz aGFyZWQsIHR1cGxlc29ydC1tYW5hZ2VkIHN0YXRlIHBhc3NlZCB0byBlYWNoIHByb2Nlc3Mg dHVwbGVzb3J0LgorCSAqIHNuYXBzaG90IGlzIHRoZSBzbmFwc2hvdCB1c2VkIGJ5IHRoZSBz Y2FuIGlmZiBhbiBNVkNDIHNuYXBzaG90IGlzIHJlcXVpcmVkLgorCSAqLworCUJyaW5TaGFy ZWQJICAgKmJyaW5zaGFyZWQ7CisJU2hhcmVkc29ydCAqc2hhcmVkc29ydDsKKwlTbmFwc2hv dAlzbmFwc2hvdDsKKwlXYWxVc2FnZSAgICp3YWx1c2FnZTsKKwlCdWZmZXJVc2FnZSAqYnVm ZmVydXNhZ2U7Cit9IEJyaW5MZWFkZXI7CiAKIC8qCiAgKiBXZSB1c2UgYSBCcmluQnVpbGRT dGF0ZSBkdXJpbmcgaW5pdGlhbCBjb25zdHJ1Y3Rpb24gb2YgYSBCUklOIGluZGV4LgpAQCAt NTAsMTIgKzE2MiwyMiBAQCB0eXBlZGVmIHN0cnVjdCBCcmluQnVpbGRTdGF0ZQogewogCVJl bGF0aW9uCWJzX2lyZWw7CiAJaW50CQkJYnNfbnVtdHVwbGVzOworCWRvdWJsZQkJYnNfcmVs dHVwbGVzOwogCUJ1ZmZlcgkJYnNfY3VycmVudEluc2VydEJ1ZjsKIAlCbG9ja051bWJlciBi c19wYWdlc1BlclJhbmdlOwogCUJsb2NrTnVtYmVyIGJzX2N1cnJSYW5nZVN0YXJ0OwogCUJy aW5SZXZtYXAgKmJzX3JtQWNjZXNzOwogCUJyaW5EZXNjICAgKmJzX2JkZXNjOwogCUJyaW5N ZW1UdXBsZSAqYnNfZHR1cGxlOworCisJLyoKKwkgKiBic19sZWFkZXIgaXMgb25seSBwcmVz ZW50IHdoZW4gYSBwYXJhbGxlbCBpbmRleCBidWlsZCBpcyBwZXJmb3JtZWQsIGFuZAorCSAq IG9ubHkgaW4gdGhlIGxlYWRlciBwcm9jZXNzLiAoQWN0dWFsbHksIG9ubHkgdGhlIGxlYWRl ciBwcm9jZXNzIGhhcyBhCisJICogQnJpbkJ1aWxkU3RhdGUuKQorCSAqLworCUJyaW5MZWFk ZXIgKmJzX2xlYWRlcjsKKwlpbnQJCQlic193b3JrZXJfaWQ7CisJQnJpblNwb29sICAqYnNf c3Bvb2w7CiB9IEJyaW5CdWlsZFN0YXRlOwogCiAvKgpAQCAtNzYsNiArMTk4LDcgQEAgc3Rh dGljIHZvaWQgdGVybWluYXRlX2JyaW5fYnVpbGRzdGF0ZShCcmluQnVpbGRTdGF0ZSAqc3Rh dGUpOwogc3RhdGljIHZvaWQgYnJpbnN1bW1hcml6ZShSZWxhdGlvbiBpbmRleCwgUmVsYXRp b24gaGVhcFJlbCwgQmxvY2tOdW1iZXIgcGFnZVJhbmdlLAogCQkJCQkJICBib29sIGluY2x1 ZGVfcGFydGlhbCwgZG91YmxlICpudW1TdW1tYXJpemVkLCBkb3VibGUgKm51bUV4aXN0aW5n KTsKIHN0YXRpYyB2b2lkIGZvcm1fYW5kX2luc2VydF90dXBsZShCcmluQnVpbGRTdGF0ZSAq c3RhdGUpOworc3RhdGljIHZvaWQgZm9ybV9hbmRfc3BpbGxfdHVwbGUoQnJpbkJ1aWxkU3Rh dGUgKnN0YXRlKTsKIHN0YXRpYyB2b2lkIHVuaW9uX3R1cGxlcyhCcmluRGVzYyAqYmRlc2Ms IEJyaW5NZW1UdXBsZSAqYSwKIAkJCQkJCSBCcmluVHVwbGUgKmIpOwogc3RhdGljIHZvaWQg YnJpbl92YWN1dW1fc2NhbihSZWxhdGlvbiBpZHhyZWwsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5 IHN0cmF0ZWd5KTsKQEAgLTgzLDYgKzIwNiwyMCBAQCBzdGF0aWMgYm9vbCBhZGRfdmFsdWVz X3RvX3JhbmdlKFJlbGF0aW9uIGlkeFJlbCwgQnJpbkRlc2MgKmJkZXNjLAogCQkJCQkJCQlC cmluTWVtVHVwbGUgKmR0dXAsIGNvbnN0IERhdHVtICp2YWx1ZXMsIGNvbnN0IGJvb2wgKm51 bGxzKTsKIHN0YXRpYyBib29sIGNoZWNrX251bGxfa2V5cyhCcmluVmFsdWVzICpidmFsLCBT Y2FuS2V5ICpudWxsa2V5cywgaW50IG5udWxsa2V5cyk7CiAKKy8qIHBhcmFsbGVsIGluZGV4 IGJ1aWxkcyAqLworc3RhdGljIHZvaWQgX2JyaW5fYmVnaW5fcGFyYWxsZWwoQnJpbkJ1aWxk U3RhdGUgKmJ1aWxkc3RhdGUsIFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LAorCQkJ CQkJCQkgYm9vbCBpc2NvbmN1cnJlbnQsIGludCByZXF1ZXN0KTsKK3N0YXRpYyB2b2lkIF9i cmluX2VuZF9wYXJhbGxlbChCcmluTGVhZGVyICpidGxlYWRlciwgQnJpbkJ1aWxkU3RhdGUg KnN0YXRlKTsKK3N0YXRpYyBTaXplIF9icmluX3BhcmFsbGVsX2VzdGltYXRlX3NoYXJlZChS ZWxhdGlvbiBoZWFwLCBTbmFwc2hvdCBzbmFwc2hvdCk7CitzdGF0aWMgdm9pZCBfYnJpbl9s ZWFkZXJfcGFydGljaXBhdGVfYXNfd29ya2VyKEJyaW5CdWlsZFN0YXRlICpidWlsZHN0YXRl LAorCQkJCQkJCQkJCQkgICBSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCk7CitzdGF0 aWMgdm9pZCBfYnJpbl9wYXJhbGxlbF9zY2FuX2FuZF9idWlsZChCcmluQnVpbGRTdGF0ZSAq YnVpbGRzdGF0ZSwKKwkJCQkJCQkJCQkgIEJyaW5TcG9vbCAqYnJpbnNwb29sLAorCQkJCQkJ CQkJCSAgQnJpblNoYXJlZCAqYnJpbnNoYXJlZCwKKwkJCQkJCQkJCQkgIFNoYXJlZHNvcnQg KnNoYXJlZHNvcnQsCisJCQkJCQkJCQkJICBSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRl eCwKKwkJCQkJCQkJCQkgIGludCBzb3J0bWVtLCBib29sIHByb2dyZXNzKTsKKwogLyoKICAq IEJSSU4gaGFuZGxlciBmdW5jdGlvbjogcmV0dXJuIEluZGV4QW1Sb3V0aW5lIHdpdGggYWNj ZXNzIG1ldGhvZCBwYXJhbWV0ZXJzCiAgKiBhbmQgY2FsbGJhY2tzLgpAQCAtODIwLDYgKzk1 Nyw2MyBAQCBicmluYnVpbGRDYWxsYmFjayhSZWxhdGlvbiBpbmRleCwKIAkJCQkJCQkgICB2 YWx1ZXMsIGlzbnVsbCk7CiB9CiAKKy8qCisgKiBBIHZlcnNpb24gb2YgdGhlIGNhbGxiYWNr LCB1c2VkIGJ5IHBhcmFsbGVsIGluZGV4IGJ1aWxkcy4gVGhlIG1haW4gZGlmZmVyZW5jZQor ICogaXMgdGhhdCBpbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIEJSSU4gdHVwbGVzIGludG8gdGhl IGluZGV4LCB3ZSB3cml0ZSB0aGVtIGludG8KKyAqIGEgc2hhcmVkIHR1cGxlc3RvcmUsIGFu ZCBsZWF2ZSB0aGUgaW5zZXJ0aW9uIHVwIHRvIHRoZSBsZWFkZXIgKHdoaWNoIG1heQorICog cmVvcmRlciB0aGVtIGEgYml0IGV0Yy4pLiBUaGUgY2FsbGJhY2sgYWxzbyBkb2VzIG5vdCBn ZW5lcmF0ZSBlbXB0eSByYW5nZXMsCisgKiB0aG9zZSBtYXkgYmUgYWRkZWQgYnkgdGhlIGxl YWRlciB3aGVuIG1lcmdpbmcgcmVzdWx0cyBmcm9tIHdvcmtlcnMuCisgKi8KK3N0YXRpYyB2 b2lkCiticmluYnVpbGRDYWxsYmFja1BhcmFsbGVsKFJlbGF0aW9uIGluZGV4LAorCQkJCQkJ ICBJdGVtUG9pbnRlciB0aWQsCisJCQkJCQkgIERhdHVtICp2YWx1ZXMsCisJCQkJCQkgIGJv b2wgKmlzbnVsbCwKKwkJCQkJCSAgYm9vbCB0dXBsZUlzQWxpdmUsCisJCQkJCQkgIHZvaWQg KmJyc3RhdGUpCit7CisJQnJpbkJ1aWxkU3RhdGUgKnN0YXRlID0gKEJyaW5CdWlsZFN0YXRl ICopIGJyc3RhdGU7CisJQmxvY2tOdW1iZXIgdGhpc2Jsb2NrOworCisJdGhpc2Jsb2NrID0g SXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBp biBhIGJsb2NrIHRoYXQgYmVsb25ncyB0byBhIGZ1dHVyZSByYW5nZSwgc3VtbWFyaXplIHdo YXQKKwkgKiB3ZSd2ZSBnb3QgYW5kIHN0YXJ0IGFmcmVzaC4gIE5vdGUgdGhlIHNjYW4gbWln aHQgaGF2ZSBza2lwcGVkIG1hbnkKKwkgKiBwYWdlcywgaWYgdGhleSB3ZXJlIGRldm9pZCBv ZiBsaXZlIHR1cGxlczsgd2UgZG8gbm90IGNyZWF0ZSBlbXB0cnkKKwkgKiBCUklOIHJhbmdl cyBoZXJlIC0gdGhlIGxlYWRlciBpcyByZXNwb25zaWJsZSBmb3IgZmlsbGluZyB0aGVtIGlu LgorCSAqLworCWlmICh0aGlzYmxvY2sgPiBzdGF0ZS0+YnNfY3VyclJhbmdlU3RhcnQgKyBz dGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSAtIDEpCisJeworCisJCUJSSU5fZWxvZygoREVCVUcy LAorCQkJCSAgICJicmluYnVpbGRDYWxsYmFjazogY29tcGxldGVkIGEgcmFuZ2U6ICV1LS0l dSIsCisJCQkJICAgc3RhdGUtPmJzX2N1cnJSYW5nZVN0YXJ0LAorCQkJCSAgIHN0YXRlLT5i c19jdXJyUmFuZ2VTdGFydCArIHN0YXRlLT5ic19wYWdlc1BlclJhbmdlKSk7CisKKwkJLyog Y3JlYXRlIHRoZSBpbmRleCB0dXBsZSBhbmQgd3JpdGUgaXQgaW50byB0aGUgdHVwbGVzb3J0 ICovCisJCWZvcm1fYW5kX3NwaWxsX3R1cGxlKHN0YXRlKTsKKworCQkvKgorCQkgKiBTZXQg c3RhdGUgdG8gY29ycmVzcG9uZCB0byB0aGUgbmV4dCByYW5nZSAoZm9yIHRoaXMgYmxvY2sp LgorCQkgKgorCQkgKiBUaGlzIHNraXBzIHJhbmdlcyB0aGF0IGFyZSBlaXRoZXIgZW1wdHkg KGFuZCBzbyB3ZSBkb24ndCBnZXQgYW55CisJCSAqIHR1cGxlcyB0byBzdW1tYXJpemUpLCBv ciBwcm9jZXNzZXMgYnkgb3RoZXIgd29ya2Vycy4gV2UgY2FuJ3QKKwkJICogZGlmZmVyZW50 aWF0ZSB0aG9zZSBjYXNlcyBoZXJlIGVhc2lseSwgc28gd2UgbGVhdmUgaXQgdXAgdG8gdGhl CisJCSAqIGxlYWRlciB0byBmaWxsIGVtcHR5IHJhbmdlcyB3aGVyZSBuZWVkZWQuCisJCSAq LworCQlzdGF0ZS0+YnNfY3VyclJhbmdlU3RhcnQKKwkJCT0gc3RhdGUtPmJzX3BhZ2VzUGVy UmFuZ2UgKiAodGhpc2Jsb2NrIC8gc3RhdGUtPmJzX3BhZ2VzUGVyUmFuZ2UpOworCisJCS8q IHJlLWluaXRpYWxpemUgc3RhdGUgZm9yIGl0ICovCisJCWJyaW5fbWVtdHVwbGVfaW5pdGlh bGl6ZShzdGF0ZS0+YnNfZHR1cGxlLCBzdGF0ZS0+YnNfYmRlc2MpOworCX0KKworCS8qIEFj Y3VtdWxhdGUgdGhlIGN1cnJlbnQgdHVwbGUgaW50byB0aGUgcnVubmluZyBzdGF0ZSAqLwor CSh2b2lkKSBhZGRfdmFsdWVzX3RvX3JhbmdlKGluZGV4LCBzdGF0ZS0+YnNfYmRlc2MsIHN0 YXRlLT5ic19kdHVwbGUsCisJCQkJCQkJICAgdmFsdWVzLCBpc251bGwpOworfQorCiAvKgog ICogYnJpbmJ1aWxkKCkgLS0gYnVpbGQgYSBuZXcgQlJJTiBpbmRleC4KICAqLwpAQCAtODgx LDE4ICsxMDc1LDg5IEBAIGJyaW5idWlsZChSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRl eCwgSW5kZXhJbmZvICppbmRleEluZm8pCiAJcmV2bWFwID0gYnJpblJldm1hcEluaXRpYWxp emUoaW5kZXgsICZwYWdlc1BlclJhbmdlKTsKIAlzdGF0ZSA9IGluaXRpYWxpemVfYnJpbl9i dWlsZHN0YXRlKGluZGV4LCByZXZtYXAsIHBhZ2VzUGVyUmFuZ2UpOwogCisJc3RhdGUtPmJz X3Nwb29sID0gKEJyaW5TcG9vbCAqKSBwYWxsb2MwKHNpemVvZihCcmluU3Bvb2wpKTsKKwlz dGF0ZS0+YnNfc3Bvb2wtPmhlYXAgPSBoZWFwOworCXN0YXRlLT5ic19zcG9vbC0+aW5kZXgg PSBpbmRleDsKKworCS8qCisJICogQXR0ZW1wdCB0byBsYXVuY2ggcGFyYWxsZWwgd29ya2Vy IHNjYW4gd2hlbiByZXF1aXJlZAorCSAqCisJICogWFhYIHBsYW5fY3JlYXRlX2luZGV4X3dv cmtlcnMgbWFrZXMgdGhlIG51bWJlciBvZiB3b3JrZXJzIGRlcGVuZGVudCBvbgorCSAqIG1h aW50ZW5hbmNlX3dvcmtfbWVtLCByZXF1aXJpbmcgMzJNQiBmb3IgZWFjaCB3b3JrZXIuIFRo YXQgbWFrZXMgc2Vuc2UKKwkgKiBmb3IgYnRyZWUsIGJ1dCBub3QgZm9yIEJSSU4sIHdoaWNo IGNhbiBkbyBhd2F5IHdpdGggbXVjaCBsZXNzIG1lbW9yeS4KKwkgKiBTbyBtYXliZSBtYWtl IHRoYXQgc29tZWhvdyBsZXNzIHN0cmljdCwgb3B0aW9uYWxseT8KKwkgKi8KKwlpZiAoaW5k ZXhJbmZvLT5paV9QYXJhbGxlbFdvcmtlcnMgPiAwKQorCQlfYnJpbl9iZWdpbl9wYXJhbGxl bChzdGF0ZSwgaGVhcCwgaW5kZXgsIGluZGV4SW5mby0+aWlfQ29uY3VycmVudCwKKwkJCQkJ CQkgaW5kZXhJbmZvLT5paV9QYXJhbGxlbFdvcmtlcnMpOworCiAJLyoKIAkgKiBOb3cgc2Nh biB0aGUgcmVsYXRpb24uICBObyBzeW5jc2NhbiBhbGxvd2VkIGhlcmUgYmVjYXVzZSB3ZSB3 YW50IHRoZQogCSAqIGhlYXAgYmxvY2tzIGluIHBoeXNpY2FsIG9yZGVyLgogCSAqLwotCXJl bHR1cGxlcyA9IHRhYmxlX2luZGV4X2J1aWxkX3NjYW4oaGVhcCwgaW5kZXgsIGluZGV4SW5m bywgZmFsc2UsIHRydWUsCi0JCQkJCQkJCQkgICBicmluYnVpbGRDYWxsYmFjaywgKHZvaWQg Kikgc3RhdGUsIE5VTEwpOwogCi0JLyogcHJvY2VzcyB0aGUgZmluYWwgYmF0Y2ggKi8KLQlm b3JtX2FuZF9pbnNlcnRfdHVwbGUoc3RhdGUpOworCS8qCisJICogSWYgcGFyYWxsZWwgYnVp bGQgcmVxdWVzdGVkIGFuZCBhdCBsZWFzdCBvbmUgd29ya2VyIHByb2Nlc3Mgd2FzCisJICog c3VjY2Vzc2Z1bGx5IGxhdW5jaGVkLCBzZXQgdXAgY29vcmRpbmF0aW9uIHN0YXRlCisJICov CisJaWYgKHN0YXRlLT5ic19sZWFkZXIpCisJeworCQlTb3J0Q29vcmRpbmF0ZSBjb29yZGlu YXRlOworCisJCWNvb3JkaW5hdGUgPSAoU29ydENvb3JkaW5hdGUpIHBhbGxvYzAoc2l6ZW9m KFNvcnRDb29yZGluYXRlRGF0YSkpOworCQljb29yZGluYXRlLT5pc1dvcmtlciA9IGZhbHNl OworCQljb29yZGluYXRlLT5uUGFydGljaXBhbnRzID0KKwkJCXN0YXRlLT5ic19sZWFkZXIt Pm5wYXJ0aWNpcGFudHR1cGxlc29ydHM7CisJCWNvb3JkaW5hdGUtPnNoYXJlZHNvcnQgPSBz dGF0ZS0+YnNfbGVhZGVyLT5zaGFyZWRzb3J0OworCisKKwkJLyoKKwkJICogQmVnaW4gc2Vy aWFsL2xlYWRlciB0dXBsZXNvcnQuCisJCSAqCisJCSAqIEluIGNhc2VzIHdoZXJlIHBhcmFs bGVsaXNtIGlzIGludm9sdmVkLCB0aGUgbGVhZGVyIHJlY2VpdmVzIHRoZSBzYW1lCisJCSAq IHNoYXJlIG9mIG1haW50ZW5hbmNlX3dvcmtfbWVtIGFzIGEgc2VyaWFsIHNvcnQgKGl0IGlz IGdlbmVyYWxseSB0cmVhdGVkCisJCSAqIGluIHRoZSBzYW1lIHdheSBhcyBhIHNlcmlhbCBz b3J0IG9uY2Ugd2UgcmV0dXJuKS4gIFBhcmFsbGVsIHdvcmtlcgorCQkgKiBUdXBsZXNvcnRz dGF0ZXMgd2lsbCBoYXZlIHJlY2VpdmVkIG9ubHkgYSBmcmFjdGlvbiBvZgorCQkgKiBtYWlu dGVuYW5jZV93b3JrX21lbSwgdGhvdWdoLgorCQkgKgorCQkgKiBXZSByZWx5IG9uIHRoZSBs aWZldGltZSBvZiB0aGUgTGVhZGVyIFR1cGxlc29ydHN0YXRlIGFsbW9zdCBub3QKKwkJICog b3ZlcmxhcHBpbmcgd2l0aCBhbnkgd29ya2VyIFR1cGxlc29ydHN0YXRlJ3MgbGlmZXRpbWUu ICBUaGVyZSBtYXkgYmUKKwkJICogc29tZSBzbWFsbCBvdmVybGFwLCBidXQgdGhhdCdzIG9r YXkgYmVjYXVzZSB3ZSByZWx5IG9uIGxlYWRlcgorCQkgKiBUdXBsZXNvcnRzdGF0ZSBvbmx5 IGFsbG9jYXRpbmcgYSBzbWFsbCwgZml4ZWQgYW1vdW50IG9mIG1lbW9yeSBoZXJlLgorCQkg KiBXaGVuIGl0cyB0dXBsZXNvcnRfcGVyZm9ybXNvcnQoKSBpcyBjYWxsZWQgKGJ5IG91ciBj YWxsZXIpLCBhbmQKKwkJICogc2lnbmlmaWNhbnQgYW1vdW50cyBvZiBtZW1vcnkgYXJlIGxp a2VseSB0byBiZSB1c2VkLCBhbGwgd29ya2VycyBtdXN0CisJCSAqIGhhdmUgYWxyZWFkeSBm cmVlZCBhbG1vc3QgYWxsIG1lbW9yeSBoZWxkIGJ5IHRoZWlyIFR1cGxlc29ydHN0YXRlcwor CQkgKiAodGhleSBhcmUgYWJvdXQgdG8gZ28gYXdheSBjb21wbGV0ZWx5LCB0b28pLiAgVGhl IG92ZXJhbGwgZWZmZWN0IGlzCisJCSAqIHRoYXQgbWFpbnRlbmFuY2Vfd29ya19tZW0gYWx3 YXlzIHJlcHJlc2VudHMgYW4gYWJzb2x1dGUgaGlnaCB3YXRlcm1hcmsKKwkJICogb24gdGhl IGFtb3VudCBvZiBtZW1vcnkgdXNlZCBieSBhIENSRUFURSBJTkRFWCBvcGVyYXRpb24sIHJl Z2FyZGxlc3Mgb2YKKwkJICogdGhlIHVzZSBvZiBwYXJhbGxlbGlzbSBvciBhbnkgb3RoZXIg ZmFjdG9yLgorCQkgKi8KKwkJc3RhdGUtPmJzX3Nwb29sLT5zb3J0c3RhdGUgPQorCQkJdHVw bGVzb3J0X2JlZ2luX2luZGV4X2JyaW4oaGVhcCwgaW5kZXgsCisJCQkJCQkJCQkgICBtYWlu dGVuYW5jZV93b3JrX21lbSwgY29vcmRpbmF0ZSwKKwkJCQkJCQkJCSAgIFRVUExFU09SVF9O T05FKTsKKworCQkvKgorCQkgKiBJbiBwYXJhbGxlbCBtb2RlLCB3YWl0IGZvciB3b3JrZXJz IHRvIGNvbXBsZXRlLCBhbmQgdGhlbiByZWFkIGFsbAorCQkgKiB0dXBsZXMgZnJvbSB0aGUg c2hhcmVkIHR1cGxlc29ydCBhbmQgaW5zZXJ0IHRoZW0gaW50byB0aGUgaW5kZXguCisJCSAq LworCQlfYnJpbl9lbmRfcGFyYWxsZWwoc3RhdGUtPmJzX2xlYWRlciwgc3RhdGUpOworCX0K KwllbHNlCS8qIG5vIHBhcmFsbGVsIGluZGV4IGJ1aWxkLCBqdXN0IGRvIHRoZSB1c3VhbCB0 aGluZyAqLworCXsKKwkJcmVsdHVwbGVzID0gdGFibGVfaW5kZXhfYnVpbGRfc2NhbihoZWFw LCBpbmRleCwgaW5kZXhJbmZvLCBmYWxzZSwgdHJ1ZSwKKwkJCQkJCQkJCQkgICBicmluYnVp bGRDYWxsYmFjaywgKHZvaWQgKikgc3RhdGUsIE5VTEwpOworCisJCS8qIHByb2Nlc3MgdGhl IGZpbmFsIGJhdGNoICovCisJCWZvcm1fYW5kX2luc2VydF90dXBsZShzdGF0ZSk7CisKKwkJ LyogdHJhY2sgdGhlIG51bWJlciBvZiByZWxhdGlvbiB0dXBsZXMgKi8KKwkJc3RhdGUtPmJz X3JlbHR1cGxlcyA9IHJlbHR1cGxlczsKKwl9CiAKIAkvKiByZWxlYXNlIHJlc291cmNlcyAq LwogCWlkeHR1cGxlcyA9IHN0YXRlLT5ic19udW10dXBsZXM7CisJcmVsdHVwbGVzID0gc3Rh dGUtPmJzX3JlbHR1cGxlczsKIAlicmluUmV2bWFwVGVybWluYXRlKHN0YXRlLT5ic19ybUFj Y2Vzcyk7CiAJdGVybWluYXRlX2JyaW5fYnVpbGRzdGF0ZShzdGF0ZSk7CiAKQEAgLTEzMTIs MTIgKzE1NzcsMTYgQEAgaW5pdGlhbGl6ZV9icmluX2J1aWxkc3RhdGUoUmVsYXRpb24gaWR4 UmVsLCBCcmluUmV2bWFwICpyZXZtYXAsCiAKIAlzdGF0ZS0+YnNfaXJlbCA9IGlkeFJlbDsK IAlzdGF0ZS0+YnNfbnVtdHVwbGVzID0gMDsKKwlzdGF0ZS0+YnNfcmVsdHVwbGVzID0gMDsK IAlzdGF0ZS0+YnNfY3VycmVudEluc2VydEJ1ZiA9IEludmFsaWRCdWZmZXI7CiAJc3RhdGUt PmJzX3BhZ2VzUGVyUmFuZ2UgPSBwYWdlc1BlclJhbmdlOwogCXN0YXRlLT5ic19jdXJyUmFu Z2VTdGFydCA9IDA7CiAJc3RhdGUtPmJzX3JtQWNjZXNzID0gcmV2bWFwOwogCXN0YXRlLT5i c19iZGVzYyA9IGJyaW5fYnVpbGRfZGVzYyhpZHhSZWwpOwogCXN0YXRlLT5ic19kdHVwbGUg PSBicmluX25ld19tZW10dXBsZShzdGF0ZS0+YnNfYmRlc2MpOworCXN0YXRlLT5ic19sZWFk ZXIgPSBOVUxMOworCXN0YXRlLT5ic193b3JrZXJfaWQgPSAwOworCXN0YXRlLT5ic19zcG9v bCA9IE5VTEw7CiAKIAlyZXR1cm4gc3RhdGU7CiB9CkBAIC0xNjA5LDYgKzE4NzgsMzIgQEAg Zm9ybV9hbmRfaW5zZXJ0X3R1cGxlKEJyaW5CdWlsZFN0YXRlICpzdGF0ZSkKIAlwZnJlZSh0 dXApOwogfQogCisvKgorICogR2l2ZW4gYSBkZWZvcm1lZCB0dXBsZSBpbiB0aGUgYnVpbGQg c3RhdGUsIGNvbnZlcnQgaXQgaW50byB0aGUgb24tZGlzaworICogZm9ybWF0IGFuZCB3cml0 ZSBpdCB0byBhIChzaGFyZWQpIHR1cGxlc3RvcmUgKHRoZSBsZWFkZXIgd2lsbCBpbnNlcnQg aXQKKyAqIGludG8gdGhlIGluZGV4IGxhdGVyKS4KKyAqLworc3RhdGljIHZvaWQKK2Zvcm1f YW5kX3NwaWxsX3R1cGxlKEJyaW5CdWlsZFN0YXRlICpzdGF0ZSkKK3sKKwlCcmluVHVwbGUg ICp0dXA7CisJU2l6ZQkJc2l6ZTsKKworCS8qIGRvbid0IGluc2VydCBlbXB0eSB0dXBsZXMg aW4gcGFyYWxsZWwgYnVpbGQgKi8KKwlpZiAoc3RhdGUtPmJzX2R0dXBsZS0+YnRfZW1wdHlf cmFuZ2UpCisJCXJldHVybjsKKworCXR1cCA9IGJyaW5fZm9ybV90dXBsZShzdGF0ZS0+YnNf YmRlc2MsIHN0YXRlLT5ic19jdXJyUmFuZ2VTdGFydCwKKwkJCQkJCSAgc3RhdGUtPmJzX2R0 dXBsZSwgJnNpemUpOworCisJLyogd3JpdGUgdGhlIEJSSU4gdHVwbGUgdG8gdGhlIHR1cGxl c29ydCAqLworCXR1cGxlc29ydF9wdXRicmludHVwbGUoc3RhdGUtPmJzX3Nwb29sLT5zb3J0 c3RhdGUsIHR1cCwgc2l6ZSk7CisKKwlzdGF0ZS0+YnNfbnVtdHVwbGVzKys7CisKKwlwZnJl ZSh0dXApOworfQorCiAvKgogICogR2l2ZW4gdHdvIGRlZm9ybWVkIHR1cGxlcywgYWRqdXN0 IHRoZSBmaXJzdCBvbmUgc28gdGhhdCBpdCdzIGNvbnNpc3RlbnQKICAqIHdpdGggdGhlIHN1 bW1hcnkgdmFsdWVzIGluIGJvdGguCkBAIC0xOTI4LDMgKzIyMjMsNTY4IEBAIGNoZWNrX251 bGxfa2V5cyhCcmluVmFsdWVzICpidmFsLCBTY2FuS2V5ICpudWxsa2V5cywgaW50IG5udWxs a2V5cykKIAogCXJldHVybiB0cnVlOwogfQorCitzdGF0aWMgdm9pZAorX2JyaW5fYmVnaW5f cGFyYWxsZWwoQnJpbkJ1aWxkU3RhdGUgKmJ1aWxkc3RhdGUsIFJlbGF0aW9uIGhlYXAsIFJl bGF0aW9uIGluZGV4LAorCQkJCQkgYm9vbCBpc2NvbmN1cnJlbnQsIGludCByZXF1ZXN0KQor eworCVBhcmFsbGVsQ29udGV4dCAqcGN4dDsKKwlpbnQJCQlzY2FudHVwbGVzb3J0c3RhdGVz OworCVNuYXBzaG90CXNuYXBzaG90OworCVNpemUJCWVzdGJyaW5zaGFyZWQ7CisJU2l6ZQkJ ZXN0c29ydDsKKwlCcmluU2hhcmVkICAgKmJyaW5zaGFyZWQ7CisJU2hhcmVkc29ydCAgICpz aGFyZWRzb3J0OworCUJyaW5MZWFkZXIgICAqYnJpbmxlYWRlciA9IChCcmluTGVhZGVyICop IHBhbGxvYzAoc2l6ZW9mKEJyaW5MZWFkZXIpKTsKKwlXYWxVc2FnZSAgICp3YWx1c2FnZTsK KwlCdWZmZXJVc2FnZSAqYnVmZmVydXNhZ2U7CisJYm9vbAkJbGVhZGVycGFydGljaXBhdGVz ID0gdHJ1ZTsKKwlpbnQJCQlxdWVyeWxlbjsKKworI2lmZGVmIERJU0FCTEVfTEVBREVSX1BB UlRJQ0lQQVRJT04KKwlsZWFkZXJwYXJ0aWNpcGF0ZXMgPSBmYWxzZTsKKyNlbmRpZgorCisJ LyoKKwkgKiBFbnRlciBwYXJhbGxlbCBtb2RlLCBhbmQgY3JlYXRlIGNvbnRleHQgZm9yIHBh cmFsbGVsIGJ1aWxkIG9mIGJyaW4KKwkgKiBpbmRleAorCSAqLworCUVudGVyUGFyYWxsZWxN b2RlKCk7CisJQXNzZXJ0KHJlcXVlc3QgPiAwKTsKKwlwY3h0ID0gQ3JlYXRlUGFyYWxsZWxD b250ZXh0KCJwb3N0Z3JlcyIsICJfYnJpbl9wYXJhbGxlbF9idWlsZF9tYWluIiwKKwkJCQkJ CQkJIHJlcXVlc3QpOworCisJc2NhbnR1cGxlc29ydHN0YXRlcyA9IGxlYWRlcnBhcnRpY2lw YXRlcyA/IHJlcXVlc3QgKyAxIDogcmVxdWVzdDsKKworCS8qCisJICogUHJlcGFyZSBmb3Ig c2NhbiBvZiB0aGUgYmFzZSByZWxhdGlvbi4gIEluIGEgbm9ybWFsIGluZGV4IGJ1aWxkLCB3 ZSB1c2UKKwkgKiBTbmFwc2hvdEFueSBiZWNhdXNlIHdlIG11c3QgcmV0cmlldmUgYWxsIHR1 cGxlcyBhbmQgZG8gb3VyIG93biB0aW1lCisJICogcXVhbCBjaGVja3MgKGJlY2F1c2Ugd2Ug aGF2ZSB0byBpbmRleCBSRUNFTlRMWV9ERUFEIHR1cGxlcykuICBJbiBhCisJICogY29uY3Vy cmVudCBidWlsZCwgd2UgdGFrZSBhIHJlZ3VsYXIgTVZDQyBzbmFwc2hvdCBhbmQgaW5kZXgg d2hhdGV2ZXIncworCSAqIGxpdmUgYWNjb3JkaW5nIHRvIHRoYXQuCisJICovCisJaWYgKCFp c2NvbmN1cnJlbnQpCisJCXNuYXBzaG90ID0gU25hcHNob3RBbnk7CisJZWxzZQorCQlzbmFw c2hvdCA9IFJlZ2lzdGVyU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwor CS8qCisJICogRXN0aW1hdGUgc2l6ZSBmb3Igb3VyIG93biBQQVJBTExFTF9LRVlfQlJJTl9T SEFSRUQgd29ya3NwYWNlLgorCSAqLworCWVzdGJyaW5zaGFyZWQgPSBfYnJpbl9wYXJhbGxl bF9lc3RpbWF0ZV9zaGFyZWQoaGVhcCwgc25hcHNob3QpOworCXNobV90b2NfZXN0aW1hdGVf Y2h1bmsoJnBjeHQtPmVzdGltYXRvciwgZXN0YnJpbnNoYXJlZCk7CisJZXN0c29ydCA9IHR1 cGxlc29ydF9lc3RpbWF0ZV9zaGFyZWQoc2NhbnR1cGxlc29ydHN0YXRlcyk7CisJc2htX3Rv Y19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBlc3Rzb3J0KTsKKworCXNobV90 b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAyKTsKKworCS8qCisJICogRXN0 aW1hdGUgc3BhY2UgZm9yIFdhbFVzYWdlIGFuZCBCdWZmZXJVc2FnZSAtLSBQQVJBTExFTF9L RVlfV0FMX1VTQUdFCisJICogYW5kIFBBUkFMTEVMX0tFWV9CVUZGRVJfVVNBR0UuCisJICoK KwkgKiBJZiB0aGVyZSBhcmUgbm8gZXh0ZW5zaW9ucyBsb2FkZWQgdGhhdCBjYXJlLCB3ZSBj b3VsZCBza2lwIHRoaXMuICBXZQorCSAqIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgd2hldGhl ciBhbnlvbmUncyBsb29raW5nIGF0IHBnV2FsVXNhZ2Ugb3IKKwkgKiBwZ0J1ZmZlclVzYWdl LCBzbyBkbyBpdCB1bmNvbmRpdGlvbmFsbHkuCisJICovCisJc2htX3RvY19lc3RpbWF0ZV9j aHVuaygmcGN4dC0+ZXN0aW1hdG9yLAorCQkJCQkJICAgbXVsX3NpemUoc2l6ZW9mKFdhbFVz YWdlKSwgcGN4dC0+bndvcmtlcnMpKTsKKwlzaG1fdG9jX2VzdGltYXRlX2tleXMoJnBjeHQt PmVzdGltYXRvciwgMSk7CisJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1h dG9yLAorCQkJCQkJICAgbXVsX3NpemUoc2l6ZW9mKEJ1ZmZlclVzYWdlKSwgcGN4dC0+bndv cmtlcnMpKTsKKwlzaG1fdG9jX2VzdGltYXRlX2tleXMoJnBjeHQtPmVzdGltYXRvciwgMSk7 CisKKwkvKiBGaW5hbGx5LCBlc3RpbWF0ZSBQQVJBTExFTF9LRVlfUVVFUllfVEVYVCBzcGFj ZSAqLworCWlmIChkZWJ1Z19xdWVyeV9zdHJpbmcpCisJeworCQlxdWVyeWxlbiA9IHN0cmxl bihkZWJ1Z19xdWVyeV9zdHJpbmcpOworCQlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0 LT5lc3RpbWF0b3IsIHF1ZXJ5bGVuICsgMSk7CisJCXNobV90b2NfZXN0aW1hdGVfa2V5cygm cGN4dC0+ZXN0aW1hdG9yLCAxKTsKKwl9CisJZWxzZQorCQlxdWVyeWxlbiA9IDA7CQkJLyog a2VlcCBjb21waWxlciBxdWlldCAqLworCisJLyogRXZlcnlvbmUncyBoYWQgYSBjaGFuY2Ug dG8gYXNrIGZvciBzcGFjZSwgc28gbm93IGNyZWF0ZSB0aGUgRFNNICovCisJSW5pdGlhbGl6 ZVBhcmFsbGVsRFNNKHBjeHQpOworCisJLyogSWYgbm8gRFNNIHNlZ21lbnQgd2FzIGF2YWls YWJsZSwgYmFjayBvdXQgKGRvIHNlcmlhbCBidWlsZCkgKi8KKwlpZiAocGN4dC0+c2VnID09 IE5VTEwpCisJeworCQlpZiAoSXNNVkNDU25hcHNob3Qoc25hcHNob3QpKQorCQkJVW5yZWdp c3RlclNuYXBzaG90KHNuYXBzaG90KTsKKwkJRGVzdHJveVBhcmFsbGVsQ29udGV4dChwY3h0 KTsKKwkJRXhpdFBhcmFsbGVsTW9kZSgpOworCQlyZXR1cm47CisJfQorCisJLyogU3RvcmUg c2hhcmVkIGJ1aWxkIHN0YXRlLCBmb3Igd2hpY2ggd2UgcmVzZXJ2ZWQgc3BhY2UgKi8KKwli cmluc2hhcmVkID0gKEJyaW5TaGFyZWQgKikgc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2Ms IGVzdGJyaW5zaGFyZWQpOworCS8qIEluaXRpYWxpemUgaW1tdXRhYmxlIHN0YXRlICovCisJ YnJpbnNoYXJlZC0+aGVhcHJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChoZWFwKTsKKwlicmlu c2hhcmVkLT5pbmRleHJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChpbmRleCk7CisJYnJpbnNo YXJlZC0+aXNjb25jdXJyZW50ID0gaXNjb25jdXJyZW50OworCWJyaW5zaGFyZWQtPnNjYW50 dXBsZXNvcnRzdGF0ZXMgPSBzY2FudHVwbGVzb3J0c3RhdGVzOworCWJyaW5zaGFyZWQtPnBh Z2VzUGVyUmFuZ2UgPSBidWlsZHN0YXRlLT5ic19wYWdlc1BlclJhbmdlOworCUNvbmRpdGlv blZhcmlhYmxlSW5pdCgmYnJpbnNoYXJlZC0+d29ya2Vyc2RvbmVjdik7CisJU3BpbkxvY2tJ bml0KCZicmluc2hhcmVkLT5tdXRleCk7CisKKwkvKiBJbml0aWFsaXplIG11dGFibGUgc3Rh dGUgKi8KKwlicmluc2hhcmVkLT5ucGFydGljaXBhbnRzZG9uZSA9IDA7CisJYnJpbnNoYXJl ZC0+cmVsdHVwbGVzID0gMC4wOworCWJyaW5zaGFyZWQtPmluZHR1cGxlcyA9IDAuMDsKKwor CXRhYmxlX3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplKGhlYXAsCisJCQkJCQkJCSAgUGFyYWxs ZWxUYWJsZVNjYW5Gcm9tQnJpblNoYXJlZChicmluc2hhcmVkKSwKKwkJCQkJCQkJICBzbmFw c2hvdCk7CisKKwkvKgorCSAqIFN0b3JlIHNoYXJlZCB0dXBsZXNvcnQtcHJpdmF0ZSBzdGF0 ZSwgZm9yIHdoaWNoIHdlIHJlc2VydmVkIHNwYWNlLgorCSAqIFRoZW4sIGluaXRpYWxpemUg b3BhcXVlIHN0YXRlIHVzaW5nIHR1cGxlc29ydCByb3V0aW5lLgorCSAqLworCXNoYXJlZHNv cnQgPSAoU2hhcmVkc29ydCAqKSBzaG1fdG9jX2FsbG9jYXRlKHBjeHQtPnRvYywgZXN0c29y dCk7CisJdHVwbGVzb3J0X2luaXRpYWxpemVfc2hhcmVkKHNoYXJlZHNvcnQsIHNjYW50dXBs ZXNvcnRzdGF0ZXMsCisJCQkJCQkJCXBjeHQtPnNlZyk7CisKKwkvKgorCSAqIFN0b3JlIHNo YXJlZCB0dXBsZXNvcnQtcHJpdmF0ZSBzdGF0ZSwgZm9yIHdoaWNoIHdlIHJlc2VydmVkIHNw YWNlLgorCSAqIFRoZW4sIGluaXRpYWxpemUgb3BhcXVlIHN0YXRlIHVzaW5nIHR1cGxlc29y dCByb3V0aW5lLgorCSAqLworCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgUEFSQUxMRUxf S0VZX0JSSU5fU0hBUkVELCBicmluc2hhcmVkKTsKKwlzaG1fdG9jX2luc2VydChwY3h0LT50 b2MsIFBBUkFMTEVMX0tFWV9UVVBMRVNPUlQsIHNoYXJlZHNvcnQpOworCisJLyogU3RvcmUg cXVlcnkgc3RyaW5nIGZvciB3b3JrZXJzICovCisJaWYgKGRlYnVnX3F1ZXJ5X3N0cmluZykK Kwl7CisJCWNoYXIJICAgKnNoYXJlZHF1ZXJ5OworCisJCXNoYXJlZHF1ZXJ5ID0gKGNoYXIg Kikgc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHF1ZXJ5bGVuICsgMSk7CisJCW1lbWNw eShzaGFyZWRxdWVyeSwgZGVidWdfcXVlcnlfc3RyaW5nLCBxdWVyeWxlbiArIDEpOworCQlz aG1fdG9jX2luc2VydChwY3h0LT50b2MsIFBBUkFMTEVMX0tFWV9RVUVSWV9URVhULCBzaGFy ZWRxdWVyeSk7CisJfQorCisJLyoKKwkgKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZWFjaCB3b3Jr ZXIncyBXYWxVc2FnZSBhbmQgQnVmZmVyVXNhZ2U7IG5vIG5lZWQgdG8KKwkgKiBpbml0aWFs aXplLgorCSAqLworCXdhbHVzYWdlID0gc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsCisJ CQkJCQkJCW11bF9zaXplKHNpemVvZihXYWxVc2FnZSksIHBjeHQtPm53b3JrZXJzKSk7CisJ c2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBQQVJBTExFTF9LRVlfV0FMX1VTQUdFLCB3YWx1 c2FnZSk7CisJYnVmZmVydXNhZ2UgPSBzaG1fdG9jX2FsbG9jYXRlKHBjeHQtPnRvYywKKwkJ CQkJCQkJICAgbXVsX3NpemUoc2l6ZW9mKEJ1ZmZlclVzYWdlKSwgcGN4dC0+bndvcmtlcnMp KTsKKwlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIFBBUkFMTEVMX0tFWV9CVUZGRVJfVVNB R0UsIGJ1ZmZlcnVzYWdlKTsKKworCS8qIExhdW5jaCB3b3JrZXJzLCBzYXZpbmcgc3RhdHVz IGZvciBsZWFkZXIvY2FsbGVyICovCisJTGF1bmNoUGFyYWxsZWxXb3JrZXJzKHBjeHQpOwor CWJyaW5sZWFkZXItPnBjeHQgPSBwY3h0OworCWJyaW5sZWFkZXItPm5wYXJ0aWNpcGFudHR1 cGxlc29ydHMgPSBwY3h0LT5ud29ya2Vyc19sYXVuY2hlZDsKKwlpZiAobGVhZGVycGFydGlj aXBhdGVzKQorCQlicmlubGVhZGVyLT5ucGFydGljaXBhbnR0dXBsZXNvcnRzKys7CisJYnJp bmxlYWRlci0+YnJpbnNoYXJlZCA9IGJyaW5zaGFyZWQ7CisJYnJpbmxlYWRlci0+c2hhcmVk c29ydCA9IHNoYXJlZHNvcnQ7CisJYnJpbmxlYWRlci0+c25hcHNob3QgPSBzbmFwc2hvdDsK KwlicmlubGVhZGVyLT53YWx1c2FnZSA9IHdhbHVzYWdlOworCWJyaW5sZWFkZXItPmJ1ZmZl cnVzYWdlID0gYnVmZmVydXNhZ2U7CisKKwkvKiBJZiBubyB3b3JrZXJzIHdlcmUgc3VjY2Vz c2Z1bGx5IGxhdW5jaGVkLCBiYWNrIG91dCAoZG8gc2VyaWFsIGJ1aWxkKSAqLworCWlmIChw Y3h0LT5ud29ya2Vyc19sYXVuY2hlZCA9PSAwKQorCXsKKwkJX2JyaW5fZW5kX3BhcmFsbGVs KGJyaW5sZWFkZXIsIE5VTEwpOworCQlyZXR1cm47CisJfQorCisJLyogU2F2ZSBsZWFkZXIg c3RhdGUgbm93IHRoYXQgaXQncyBjbGVhciBidWlsZCB3aWxsIGJlIHBhcmFsbGVsICovCisJ YnVpbGRzdGF0ZS0+YnNfbGVhZGVyID0gYnJpbmxlYWRlcjsKKworCS8qIEpvaW4gaGVhcCBz Y2FuIG91cnNlbHZlcyAqLworCWlmIChsZWFkZXJwYXJ0aWNpcGF0ZXMpCisJCV9icmluX2xl YWRlcl9wYXJ0aWNpcGF0ZV9hc193b3JrZXIoYnVpbGRzdGF0ZSwgaGVhcCwgaW5kZXgpOwor CisJLyoKKwkgKiBDYWxsZXIgbmVlZHMgdG8gd2FpdCBmb3IgYWxsIGxhdW5jaGVkIHdvcmtl cnMgd2hlbiB3ZSByZXR1cm4uICBNYWtlCisJICogc3VyZSB0aGF0IHRoZSBmYWlsdXJlLXRv LXN0YXJ0IGNhc2Ugd2lsbCBub3QgaGFuZyBmb3JldmVyLgorCSAqLworCVdhaXRGb3JQYXJh bGxlbFdvcmtlcnNUb0F0dGFjaChwY3h0KTsKK30KKworLyoKKyAqIFNodXQgZG93biB3b3Jr ZXJzLCBkZXN0cm95IHBhcmFsbGVsIGNvbnRleHQsIGFuZCBlbmQgcGFyYWxsZWwgbW9kZS4K KyAqLworc3RhdGljIHZvaWQKK19icmluX2VuZF9wYXJhbGxlbChCcmluTGVhZGVyICpicmlu bGVhZGVyLCBCcmluQnVpbGRTdGF0ZSAqc3RhdGUpCit7CisJaW50CQkJaTsKKwlCcmluVHVw bGUgICpidHVwOworCUJyaW5NZW1UdXBsZSAqbWVtdHVwbGUgPSBOVUxMOworCVNpemUJCXR1 cGxlbjsKKwlCcmluU2hhcmVkICpicmluc2hhcmVkID0gYnJpbmxlYWRlci0+YnJpbnNoYXJl ZDsKKwlCbG9ja051bWJlcglwcmV2Ymxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJQnJp blR1cGxlICAqZW1wdHlUdXBsZSA9IE5VTEw7CisJU2l6ZQkJZW1wdHlTaXplOworCUJyaW5T cG9vbCAgKnNwb29sID0gc3RhdGUtPmJzX3Nwb29sOworCisJLyogU2h1dGRvd24gd29ya2Vy IHByb2Nlc3NlcyAqLworCVdhaXRGb3JQYXJhbGxlbFdvcmtlcnNUb0ZpbmlzaChicmlubGVh ZGVyLT5wY3h0KTsKKworCWlmICghc3RhdGUpCisJCXJldHVybjsKKworCS8qIGNvcHkgdGhl IGRhdGEgaW50byBsZWFkZXIgc3RhdGUgKHdlIGhhdmUgdG8gd2FpdCBmb3IgdGhlIHdvcmtl cnMgKSAqLworCXN0YXRlLT5ic19yZWx0dXBsZXMgPSBicmluc2hhcmVkLT5yZWx0dXBsZXM7 CisJc3RhdGUtPmJzX251bXR1cGxlcyA9IGJyaW5zaGFyZWQtPmluZHR1cGxlczsKKworCXR1 cGxlc29ydF9wZXJmb3Jtc29ydChzcG9vbC0+c29ydHN0YXRlKTsKKworCS8qCisJICogSW5p dGlhbGl6ZSBCcmluTWVtVHVwbGUgd2UnbGwgdXNlIHRvIHVuaW9uIHN1bW1hcmllcyBmcm9t IHdvcmtlcnMKKwkgKiAoaW4gY2FzZSB0aGV5IGhhcHBlbmVkIHRvIHByb2R1Y2UgcGFydHMg b2YgdGhlIHNhbWUgcGFnYSByYW5nZSkuCisJICovCisJbWVtdHVwbGUgPSBicmluX25ld19t ZW10dXBsZShzdGF0ZS0+YnNfYmRlc2MpOworCisJLyoKKwkgKiBSZWFkIHRoZSBCUklOIHR1 cGxlcyBmcm9tIHRoZSBzaGFyZWQgdHVwbGVzb3J0LCBzb3J0ZWQgYnkgYmxvY2sgbnVtYmVy LgorCSAqIFRoYXQgcHJvYmFibHkgZ2l2ZXMgdXMgYW4gaW5kZXggdGhhdCBpcyBjaGVhcGVy IHRvIHNjYW4sIHRoYW5rcyB0byBtb3N0bHkKKwkgKiBnZXR0aW5nIGRhdGEgZnJvbSB0aGUg c2FtZSBpbmRleCBwYWdlIGFzIGJlZm9yZS4KKwkgKgorCSAqIEZJWE1FIFRoaXMgcHJvYmFi bHkgbmVlZHMgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBmaXhlcyAtIHdlJ3JlIHJlYWRpbmcK KwkgKiB0dXBsZXMgZnJvbSB0aGUgdHVwbGVzb3J0LCB3ZSdyZSBhbGxvY2F0aW5nIGFuIGVt cHR5IHR1cGxlLCBhbmQgc28gb24uCisJICogUHJvYmFibHkgYmV0dGVyIHRvIHJlbGVhc2Ug dGhpcyBtZW1vcnkuCisJICoKKwkgKiBYWFggV2UgY2FuJ3QgcXVpdGUgZnJlZSB0aGUgQnJp blR1cGxlLCB0aG91Z2gsIGJlY2F1c2UgdGhhdCdzIGEgZmllbGQKKwkgKiBpbiBCcmluU29y dFR1cGxlLgorCSAqLworCXdoaWxlICgoYnR1cCA9IHR1cGxlc29ydF9nZXRicmludHVwbGUo c3Bvb2wtPnNvcnRzdGF0ZSwgJnR1cGxlbiwgdHJ1ZSkpICE9IE5VTEwpCisJeworCQkvKiBS YW5nZXMgc2hvdWxkIGJlIG11bHRpcGxlcyBvZiBwYWdlc19wZXJfcmFuZ2UgZm9yIHRoZSBp bmRleC4gKi8KKwkJQXNzZXJ0KGJ0dXAtPmJ0X2Jsa25vICUgYnJpbnNoYXJlZC0+cGFnZXNQ ZXJSYW5nZSA9PSAwKTsKKworCQkvKgorCQkgKiBEbyB3ZSBuZWVkIHRvIHVuaW9uIHN1bW1h cmllcyBmb3IgdGhlIHNhbWUgcGFnZSByYW5nZT8KKwkJICoKKwkJICogSWYgdGhpcyBpcyB0 aGUgZmlyc3QgYnJpbiB0dXBsZSB3ZSByZWFkLCB0aGVuIGp1c3QgZGVmb3JtIGl0IGludG8K KwkJICogdGhlIG1lbXR1cGxlLCBhbmQgY29udGludWUgd2l0aCB0aGUgbmV4dCBvbmUgZnJv bSB0dXBsZXNvcnQuIFdlCisJCSAqIGhvd2V2ZXIgbWF5IG5lZWQgdG8gaW5zZXJ0IGVtcHR5 IHN1bW1hcmllcyBpbnRvIHRoZSBpbmRleC4KKwkJICoKKwkJICogSWYgaXQncyB0aGUgc2Ft ZSBibG9jayBhcyB0aGUgbGFzdCB3ZSBzYXcsIHdlIHNpbXBseSB1bmlvbiB0aGUKKwkJICog YnJpbiB0dXBsZSBpbnRvIGl0LCBhbmQgd2UncmUgZG9uZSAtIHdlIGRvbid0IGV2ZW4gbmVl ZCB0byBpbnNlcnQKKwkJICogZW1wdHkgcmFuZ2VzLCBiZWNhdXNlIHRoYXQgd2FzIGRvbmUg ZWFybGllciB3aGVuIHdlIHNhdyB0aGUgZmlyc3QKKwkJICogYnJpbiB0dXBsZSAoZm9yIHRo aXMgcmFuZ2UpLgorCQkgKgorCQkgKiBGaW5hbGx5LCBpZiBpdCdzIG5vdCB0aGUgZmlyc3Qg YnJpbiB0dXBsZSwgYW5kIGl0J3Mgbm90IHRoZSBzYW1lCisJCSAqIHBhZ2UgcmFuZ2UsIHdl IG5lZWQgdG8gZG8gdGhlIGluc2VydCBhbmQgdGhlbiBkZWZvcm0gdGhlIHR1cGxlCisJCSAq IGludG8gdGhlIG1lbXR1cGxlLiBUaGVuIHdlJ2xsIGluc2VydCBlbXB0eSByYW5nZXMgYmVm b3JlIHRoZQorCQkgKiBuZXcgYnJpbiB0dXBsZSwgaWYgbmVlZGVkLgorCQkgKi8KKwkJaWYg KHByZXZibGtubyA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpCisJCXsKKwkJCS8qIEZpcnN0IGJy aW4gdHVwbGVzLCBqdXN0IGRlZm9ybSBpbnRvIG1lbXR1cGxlLiAqLworCQkJbWVtdHVwbGUg PSBicmluX2RlZm9ybV90dXBsZShzdGF0ZS0+YnNfYmRlc2MsIGJ0dXAsIG1lbXR1cGxlKTsK KworCQkJLyogY29udGludWUgdG8gaW5zZXJ0IGVtcHR5IHBhZ2VzIGJlZm9yZSB0aGlzYmxv Y2sgKi8KKwkJfQorCQllbHNlIGlmIChtZW10dXBsZS0+YnRfYmxrbm8gPT0gYnR1cC0+YnRf Ymxrbm8pCisJCXsKKwkJCS8qCisJCQkgKiBOb3QgdGhlIGZpcnN0IGJyaW4gdHVwbGUsIGJ1 dCBzYW1lIHBhZ2UgcmFuZ2UgYXMgdGhlIHByZXZpb3VzCisJCQkgKiBvbmUsIHNvIHdlIGNh biBtZXJnZSBpdCBpbnRvIHRoZSBtZW10dXBsZS4KKwkJCSAqLworCQkJdW5pb25fdHVwbGVz KHN0YXRlLT5ic19iZGVzYywgbWVtdHVwbGUsIGJ0dXApOworCQkJY29udGludWU7CisJCX0K KwkJZWxzZQorCQl7CisJCQlCcmluVHVwbGUgICp0bXA7CisJCQlTaXplCQlsZW47CisKKwkJ CS8qCisJCQkgKiBXZSBnb3QgYnJpbiB0dXBsZSBmb3IgYSBkaWZmZXJlbnQgcGFnZSByYW5n ZSwgc28gZm9ybSBhIGJyaW4KKwkJCSAqIHR1cGxlIGZyb20gdGhlIG1lbXR1cGxlLCBpbnNl cnQgaXQsIGFuZCByZS1pbml0IHRoZSBtZW10dXBsZQorCQkJICogZnJvbSB0aGUgbmV3IGJy aW4gdHVwbGUuCisJCQkgKi8KKwkJCXRtcCA9IGJyaW5fZm9ybV90dXBsZShzdGF0ZS0+YnNf YmRlc2MsIG1lbXR1cGxlLT5idF9ibGtubywKKwkJCQkJCQkJICBtZW10dXBsZSwgJmxlbik7 CisKKwkJCWJyaW5fZG9pbnNlcnQoc3RhdGUtPmJzX2lyZWwsIHN0YXRlLT5ic19wYWdlc1Bl clJhbmdlLCBzdGF0ZS0+YnNfcm1BY2Nlc3MsCisJCQkJCQkgICZzdGF0ZS0+YnNfY3VycmVu dEluc2VydEJ1ZiwgdG1wLT5idF9ibGtubywgdG1wLCBsZW4pOworCisJCQkvKiBmcmVlIHRo ZSBmb3JtZWQgb24tZGlzayB0dXBsZSAqLworCQkJcGZyZWUodG1wKTsKKworCQkJbWVtdHVw bGUgPSBicmluX2RlZm9ybV90dXBsZShzdGF0ZS0+YnNfYmRlc2MsIGJ0dXAsIG1lbXR1cGxl KTsKKworCQkJLyogY29udGludWUgdG8gaW5zZXJ0IGVtcHR5IHBhZ2VzIGJlZm9yZSB0aGlz YmxvY2sgKi8KKwkJfQorCisJCS8qIEZpbGwgZW1wdHkgcmFuZ2VzIGZvciBhbGwgcmFuZ2Vz IG1pc3NpbmcgaW4gdGhlIHR1cGxlc29ydC4gKi8KKwkJcHJldmJsa25vID0gKHByZXZibGtu byA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpID8gMCA6IHByZXZibGtubzsKKwkJd2hpbGUgKHBy ZXZibGtubyArIHN0YXRlLT5ic19wYWdlc1BlclJhbmdlIDwgYnR1cC0+YnRfYmxrbm8pCisJ CXsKKwkJCS8qIHRoZSBtaXNzaW5nIHJhbmdlICovCisJCQlwcmV2Ymxrbm8gKz0gc3RhdGUt PmJzX3BhZ2VzUGVyUmFuZ2U7CisKKwkJCS8qIERpZCB3ZSBhbHJlYWR5IGJ1aWxkIHRoZSBl bXB0eSByYW5nZT8gSWYgbm90LCBkbyBpdCBub3cuICovCisJCQlpZiAoZW1wdHlUdXBsZSA9 PSBOVUxMKQorCQkJeworCQkJCUJyaW5NZW1UdXBsZSAqZHR1cGxlID0gYnJpbl9uZXdfbWVt dHVwbGUoc3RhdGUtPmJzX2JkZXNjKTsKKworCQkJCWVtcHR5VHVwbGUgPSBicmluX2Zvcm1f dHVwbGUoc3RhdGUtPmJzX2JkZXNjLCBwcmV2Ymxrbm8sIGR0dXBsZSwgJmVtcHR5U2l6ZSk7 CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogd2UgYWxyZWFkeSBoYXZlIGFtICJlbXB0 eSByYW5nZSIgdHVwbGUsIGp1c3Qgc2V0IHRoZSBibG9jayAqLworCQkJCWVtcHR5VHVwbGUt PmJ0X2Jsa25vID0gcHJldmJsa25vOworCQkJfQorCisJCQlicmluX2RvaW5zZXJ0KHN0YXRl LT5ic19pcmVsLCBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSwgc3RhdGUtPmJzX3JtQWNjZXNz LAorCQkJCQkJICAmc3RhdGUtPmJzX2N1cnJlbnRJbnNlcnRCdWYsCisJCQkJCQkgIGVtcHR5 VHVwbGUtPmJ0X2Jsa25vLCBlbXB0eVR1cGxlLCBlbXB0eVNpemUpOworCQl9CisKKwkJcHJl dmJsa25vID0gYnR1cC0+YnRfYmxrbm87CisJfQorCisJdHVwbGVzb3J0X2VuZChzcG9vbC0+ c29ydHN0YXRlKTsKKworCS8qIEZpbGwgZW1wdHkgcmFuZ2VzIGZvciBhbGwgcmFuZ2VzIG1p c3NpbmcgaW4gdGhlIHR1cGxlc29ydC4gKi8KKwlwcmV2Ymxrbm8gPSAocHJldmJsa25vID09 IEludmFsaWRCbG9ja051bWJlcikgPyAwIDogcHJldmJsa25vOworCXdoaWxlIChwcmV2Ymxr bm8gKyBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSA8IG1lbXR1cGxlLT5idF9ibGtubykKKwl7 CisJCS8qIHRoZSBtaXNzaW5nIHJhbmdlICovCisJCXByZXZibGtubyArPSBzdGF0ZS0+YnNf cGFnZXNQZXJSYW5nZTsKKworCQkvKiBEaWQgd2UgYWxyZWFkeSBidWlsZCB0aGUgZW1wdHkg cmFuZ2U/IElmIG5vdCwgZG8gaXQgbm93LiAqLworCQlpZiAoZW1wdHlUdXBsZSA9PSBOVUxM KQorCQl7CisJCQlCcmluTWVtVHVwbGUgKmR0dXBsZSA9IGJyaW5fbmV3X21lbXR1cGxlKHN0 YXRlLT5ic19iZGVzYyk7CisKKwkJCWVtcHR5VHVwbGUgPSBicmluX2Zvcm1fdHVwbGUoc3Rh dGUtPmJzX2JkZXNjLCBwcmV2Ymxrbm8sIGR0dXBsZSwgJmVtcHR5U2l6ZSk7CisJCX0KKwkJ ZWxzZQorCQl7CisJCQkvKiB3ZSBhbHJlYWR5IGhhdmUgYW0gImVtcHR5IHJhbmdlIiB0dXBs ZSwganVzdCBzZXQgdGhlIGJsb2NrICovCisJCQllbXB0eVR1cGxlLT5idF9ibGtubyA9IHBy ZXZibGtubzsKKwkJfQorCisJCWJyaW5fZG9pbnNlcnQoc3RhdGUtPmJzX2lyZWwsIHN0YXRl LT5ic19wYWdlc1BlclJhbmdlLCBzdGF0ZS0+YnNfcm1BY2Nlc3MsCisJCQkJCSAgJnN0YXRl LT5ic19jdXJyZW50SW5zZXJ0QnVmLAorCQkJCQkgIGVtcHR5VHVwbGUtPmJ0X2Jsa25vLCBl bXB0eVR1cGxlLCBlbXB0eVNpemUpOworCX0KKworCS8qKi8KKwlpZiAocHJldmJsa25vICE9 IEludmFsaWRCbG9ja051bWJlcikKKwl7CisJCUJyaW5UdXBsZSAgKnRtcDsKKwkJU2l6ZQkJ bGVuOworCisJCXRtcCA9IGJyaW5fZm9ybV90dXBsZShzdGF0ZS0+YnNfYmRlc2MsIG1lbXR1 cGxlLT5idF9ibGtubywKKwkJCQkJCQkgIG1lbXR1cGxlLCAmbGVuKTsKKworCQlicmluX2Rv aW5zZXJ0KHN0YXRlLT5ic19pcmVsLCBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSwgc3RhdGUt PmJzX3JtQWNjZXNzLAorCQkJCQkgICZzdGF0ZS0+YnNfY3VycmVudEluc2VydEJ1ZiwgdG1w LT5idF9ibGtubywgdG1wLCBsZW4pOworCisJCXBmcmVlKHRtcCk7CisJfQorCisJLyoKKwkg KiBOZXh0LCBhY2N1bXVsYXRlIFdBTCB1c2FnZS4gIChUaGlzIG11c3Qgd2FpdCBmb3IgdGhl IHdvcmtlcnMgdG8gZmluaXNoLAorCSAqIG9yIHdlIG1pZ2h0IGdldCBpbmNvbXBsZXRlIGRh dGEuKQorCSAqLworCWZvciAoaSA9IDA7IGkgPCBicmlubGVhZGVyLT5wY3h0LT5ud29ya2Vy c19sYXVuY2hlZDsgaSsrKQorCQlJbnN0ckFjY3VtUGFyYWxsZWxRdWVyeSgmYnJpbmxlYWRl ci0+YnVmZmVydXNhZ2VbaV0sICZicmlubGVhZGVyLT53YWx1c2FnZVtpXSk7CisKKwkvKiBG cmVlIGxhc3QgcmVmZXJlbmNlIHRvIE1WQ0Mgc25hcHNob3QsIGlmIG9uZSB3YXMgdXNlZCAq LworCWlmIChJc01WQ0NTbmFwc2hvdChicmlubGVhZGVyLT5zbmFwc2hvdCkpCisJCVVucmVn aXN0ZXJTbmFwc2hvdChicmlubGVhZGVyLT5zbmFwc2hvdCk7CisJRGVzdHJveVBhcmFsbGVs Q29udGV4dChicmlubGVhZGVyLT5wY3h0KTsKKwlFeGl0UGFyYWxsZWxNb2RlKCk7Cit9CisK Ky8qCisgKiBSZXR1cm5zIHNpemUgb2Ygc2hhcmVkIG1lbW9yeSByZXF1aXJlZCB0byBzdG9y ZSBzdGF0ZSBmb3IgYSBwYXJhbGxlbAorICogYnJpbiBpbmRleCBidWlsZCBiYXNlZCBvbiB0 aGUgc25hcHNob3QgaXRzIHBhcmFsbGVsIHNjYW4gd2lsbCB1c2UuCisgKi8KK3N0YXRpYyBT aXplCitfYnJpbl9wYXJhbGxlbF9lc3RpbWF0ZV9zaGFyZWQoUmVsYXRpb24gaGVhcCwgU25h cHNob3Qgc25hcHNob3QpCit7CisJLyogYy5mLiBzaG1fdG9jX2FsbG9jYXRlIGFzIHRvIHdo eSBCVUZGRVJBTElHTiBpcyB1c2VkICovCisJcmV0dXJuIGFkZF9zaXplKEJVRkZFUkFMSUdO KHNpemVvZihCcmluU2hhcmVkKSksCisJCQkJCXRhYmxlX3BhcmFsbGVsc2Nhbl9lc3RpbWF0 ZShoZWFwLCBzbmFwc2hvdCkpOworfQorCisvKgorICogV2l0aGluIGxlYWRlciwgcGFydGlj aXBhdGUgYXMgYSBwYXJhbGxlbCB3b3JrZXIuCisgKi8KK3N0YXRpYyB2b2lkCitfYnJpbl9s ZWFkZXJfcGFydGljaXBhdGVfYXNfd29ya2VyKEJyaW5CdWlsZFN0YXRlICpidWlsZHN0YXRl LCBSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCkKK3sKKwlCcmluTGVhZGVyICpicmlu bGVhZGVyID0gYnVpbGRzdGF0ZS0+YnNfbGVhZGVyOworCWludAkJCXNvcnRtZW07CisKKwkv KiBBbGxvY2F0ZSBtZW1vcnkgYW5kIGluaXRpYWxpemUgcHJpdmF0ZSBzcG9vbCAqLworCWJ1 aWxkc3RhdGUtPmJzX3Nwb29sID0gKEJyaW5TcG9vbCAqKSBwYWxsb2MwKHNpemVvZihCcmlu U3Bvb2wpKTsKKwlidWlsZHN0YXRlLT5ic19zcG9vbC0+aGVhcCA9IGJ1aWxkc3RhdGUtPmJz X3Nwb29sLT5oZWFwOworCWJ1aWxkc3RhdGUtPmJzX3Nwb29sLT5pbmRleCA9IGJ1aWxkc3Rh dGUtPmJzX3Nwb29sLT5pbmRleDsKKworCS8qCisJICogTWlnaHQgYXMgd2VsbCB1c2UgcmVs aWFibGUgZmlndXJlIHdoZW4gZG9saW5nIG91dCBtYWludGVuYW5jZV93b3JrX21lbQorCSAq ICh3aGVuIHJlcXVlc3RlZCBudW1iZXIgb2Ygd29ya2VycyB3ZXJlIG5vdCBsYXVuY2hlZCwg dGhpcyB3aWxsIGJlCisJICogc29tZXdoYXQgaGlnaGVyIHRoYW4gaXQgaXMgZm9yIG90aGVy IHdvcmtlcnMpLgorCSAqLworCXNvcnRtZW0gPSBtYWludGVuYW5jZV93b3JrX21lbSAvIGJy aW5sZWFkZXItPm5wYXJ0aWNpcGFudHR1cGxlc29ydHM7CisKKwkvKiBQZXJmb3JtIHdvcmsg Y29tbW9uIHRvIGFsbCBwYXJ0aWNpcGFudHMgKi8KKwlfYnJpbl9wYXJhbGxlbF9zY2FuX2Fu ZF9idWlsZChidWlsZHN0YXRlLCBidWlsZHN0YXRlLT5ic19zcG9vbCwgYnJpbmxlYWRlci0+ YnJpbnNoYXJlZCwKKwkJCQkJCQkJICBicmlubGVhZGVyLT5zaGFyZWRzb3J0LCBoZWFwLCBp bmRleCwgc29ydG1lbSwgdHJ1ZSk7Cit9CisKKy8qCisgKiBQZXJmb3JtIGEgd29ya2VyJ3Mg cG9ydGlvbiBvZiBhIHBhcmFsbGVsIHNvcnQuCisgKgorICogVGhpcyBnZW5lcmF0ZXMgYSB0 dXBsZXNvcnQgZm9yIHBhc3NlZCBidHNwb29sLCBhbmQgYSBzZWNvbmQgdHVwbGVzb3J0Cisg KiBzdGF0ZSBpZiBhIHNlY29uZCBidHNwb29sIGlzIG5lZWQgKGkuZS4gZm9yIHVuaXF1ZSBp bmRleCBidWlsZHMpLiAgQWxsCisgKiBvdGhlciBzcG9vbCBmaWVsZHMgc2hvdWxkIGFscmVh ZHkgYmUgc2V0IHdoZW4gdGhpcyBpcyBjYWxsZWQuCisgKgorICogc29ydG1lbSBpcyB0aGUg YW1vdW50IG9mIHdvcmtpbmcgbWVtb3J5IHRvIHVzZSB3aXRoaW4gZWFjaCB3b3JrZXIsCisg KiBleHByZXNzZWQgaW4gS0JzLgorICoKKyAqIFdoZW4gdGhpcyByZXR1cm5zLCB3b3JrZXJz IGFyZSBkb25lLCBhbmQgbmVlZCBvbmx5IHJlbGVhc2UgcmVzb3VyY2VzLgorICovCitzdGF0 aWMgdm9pZAorX2JyaW5fcGFyYWxsZWxfc2Nhbl9hbmRfYnVpbGQoQnJpbkJ1aWxkU3RhdGUg KnN0YXRlLCBCcmluU3Bvb2wgKmJyaW5zcG9vbCwKKwkJCQkJCQkgIEJyaW5TaGFyZWQgKmJy aW5zaGFyZWQsIFNoYXJlZHNvcnQgKnNoYXJlZHNvcnQsCisJCQkJCQkJICBSZWxhdGlvbiBo ZWFwLCBSZWxhdGlvbiBpbmRleCwgaW50IHNvcnRtZW0sCisJCQkJCQkJICBib29sIHByb2dy ZXNzKQoreworCVNvcnRDb29yZGluYXRlIGNvb3JkaW5hdGU7CisJVGFibGVTY2FuRGVzYwlz Y2FuOworCWRvdWJsZQkJcmVsdHVwbGVzOworCUluZGV4SW5mbyAgKmluZGV4SW5mbzsKKwor CS8qIEluaXRpYWxpemUgbG9jYWwgdHVwbGVzb3J0IGNvb3JkaW5hdGlvbiBzdGF0ZSAqLwor CWNvb3JkaW5hdGUgPSBwYWxsb2MwKHNpemVvZihTb3J0Q29vcmRpbmF0ZURhdGEpKTsKKwlj b29yZGluYXRlLT5pc1dvcmtlciA9IHRydWU7CisJY29vcmRpbmF0ZS0+blBhcnRpY2lwYW50 cyA9IC0xOworCWNvb3JkaW5hdGUtPnNoYXJlZHNvcnQgPSBzaGFyZWRzb3J0OworCisJLyog QmVnaW4gInBhcnRpYWwiIHR1cGxlc29ydCAqLworCWJyaW5zcG9vbC0+c29ydHN0YXRlID0g dHVwbGVzb3J0X2JlZ2luX2luZGV4X2JyaW4oYnJpbnNwb29sLT5oZWFwLAorCQkJCQkJCQkJ CQkJCSAgYnJpbnNwb29sLT5pbmRleCwKKwkJCQkJCQkJCQkJCQkgIHNvcnRtZW0sIGNvb3Jk aW5hdGUsCisJCQkJCQkJCQkJCQkJICBUVVBMRVNPUlRfTk9ORSk7CisKKwkvKiBKb2luIHBh cmFsbGVsIHNjYW4gKi8KKwlpbmRleEluZm8gPSBCdWlsZEluZGV4SW5mbyhpbmRleCk7CisJ aW5kZXhJbmZvLT5paV9Db25jdXJyZW50ID0gYnJpbnNoYXJlZC0+aXNjb25jdXJyZW50Owor CisJc2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9wYXJhbGxlbChoZWFwLAorCQkJCQkJCQkJUGFy YWxsZWxUYWJsZVNjYW5Gcm9tQnJpblNoYXJlZChicmluc2hhcmVkKSk7CisKKwlyZWx0dXBs ZXMgPSB0YWJsZV9pbmRleF9idWlsZF9zY2FuKGhlYXAsIGluZGV4LCBpbmRleEluZm8sIHRy dWUsIHRydWUsCisJCQkJCQkJCQkgICBicmluYnVpbGRDYWxsYmFja1BhcmFsbGVsLCBzdGF0 ZSwgc2Nhbik7CisKKwkvKiBpbnNlcnQgdGhlIGxhc3QgaXRlbSAqLworCWZvcm1fYW5kX3Nw aWxsX3R1cGxlKHN0YXRlKTsKKworCS8qIHNvcnQgdGhlIEJSSU4gcmFuZ2VzIGJ1aWx0IGJ5 IHRoaXMgd29ya2VyICovCisJdHVwbGVzb3J0X3BlcmZvcm1zb3J0KGJyaW5zcG9vbC0+c29y dHN0YXRlKTsKKworCXN0YXRlLT5ic19yZWx0dXBsZXMgKz0gcmVsdHVwbGVzOworCisJLyoK KwkgKiBEb25lLiAgUmVjb3JkIGFtYnVpbGQgc3RhdGlzdGljcy4KKwkgKi8KKwlTcGluTG9j a0FjcXVpcmUoJmJyaW5zaGFyZWQtPm11dGV4KTsKKwlicmluc2hhcmVkLT5ucGFydGljaXBh bnRzZG9uZSsrOworCWJyaW5zaGFyZWQtPnJlbHR1cGxlcyArPSBzdGF0ZS0+YnNfcmVsdHVw bGVzOworCWJyaW5zaGFyZWQtPmluZHR1cGxlcyArPSBzdGF0ZS0+YnNfbnVtdHVwbGVzOwor CVNwaW5Mb2NrUmVsZWFzZSgmYnJpbnNoYXJlZC0+bXV0ZXgpOworCisJLyogTm90aWZ5IGxl YWRlciAqLworCUNvbmRpdGlvblZhcmlhYmxlU2lnbmFsKCZicmluc2hhcmVkLT53b3JrZXJz ZG9uZWN2KTsKKworCXR1cGxlc29ydF9lbmQoYnJpbnNwb29sLT5zb3J0c3RhdGUpOworfQor CisvKgorICogUGVyZm9ybSB3b3JrIHdpdGhpbiBhIGxhdW5jaGVkIHBhcmFsbGVsIHByb2Nl c3MuCisgKi8KK3ZvaWQKK19icmluX3BhcmFsbGVsX2J1aWxkX21haW4oZHNtX3NlZ21lbnQg KnNlZywgc2htX3RvYyAqdG9jKQoreworCWNoYXIJICAgKnNoYXJlZHF1ZXJ5OworCUJyaW5T aGFyZWQgKmJyaW5zaGFyZWQ7CisJU2hhcmVkc29ydCAqc2hhcmVkc29ydDsKKwlCcmluQnVp bGRTdGF0ZSAqYnVpbGRzdGF0ZTsKKwlSZWxhdGlvbgloZWFwUmVsOworCVJlbGF0aW9uCWlu ZGV4UmVsOworCUxPQ0tNT0RFCWhlYXBMb2NrbW9kZTsKKwlMT0NLTU9ERQlpbmRleExvY2tt b2RlOworCVdhbFVzYWdlICAgKndhbHVzYWdlOworCUJ1ZmZlclVzYWdlICpidWZmZXJ1c2Fn ZTsKKwlpbnQJCQlzb3J0bWVtOworCisJLyoKKwkgKiBUaGUgb25seSBwb3NzaWJsZSBzdGF0 dXMgZmxhZyB0aGF0IGNhbiBiZSBzZXQgdG8gdGhlIHBhcmFsbGVsIHdvcmtlciBpcworCSAq IFBST0NfSU5fU0FGRV9JQy4KKwkgKi8KKwlBc3NlcnQoKE15UHJvYy0+c3RhdHVzRmxhZ3Mg PT0gMCkgfHwKKwkJICAgKE15UHJvYy0+c3RhdHVzRmxhZ3MgPT0gUFJPQ19JTl9TQUZFX0lD KSk7CisKKwkvKiBTZXQgZGVidWdfcXVlcnlfc3RyaW5nIGZvciBpbmRpdmlkdWFsIHdvcmtl cnMgZmlyc3QgKi8KKwlzaGFyZWRxdWVyeSA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxM RUxfS0VZX1FVRVJZX1RFWFQsIHRydWUpOworCWRlYnVnX3F1ZXJ5X3N0cmluZyA9IHNoYXJl ZHF1ZXJ5OworCisJLyogUmVwb3J0IHRoZSBxdWVyeSBzdHJpbmcgZnJvbSBsZWFkZXIgKi8K KwlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX1JVTk5JTkcsIGRlYnVnX3F1ZXJ5X3N0 cmluZyk7CisKKwkvKiBMb29rIHVwIGJyaW4gc2hhcmVkIHN0YXRlICovCisJYnJpbnNoYXJl ZCA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfS0VZX0JSSU5fU0hBUkVELCBmYWxz ZSk7CisKKwkvKiBPcGVuIHJlbGF0aW9ucyB1c2luZyBsb2NrIG1vZGVzIGtub3duIHRvIGJl IG9idGFpbmVkIGJ5IGluZGV4LmMgKi8KKwlpZiAoIWJyaW5zaGFyZWQtPmlzY29uY3VycmVu dCkKKwl7CisJCWhlYXBMb2NrbW9kZSA9IFNoYXJlTG9jazsKKwkJaW5kZXhMb2NrbW9kZSA9 IEFjY2Vzc0V4Y2x1c2l2ZUxvY2s7CisJfQorCWVsc2UKKwl7CisJCWhlYXBMb2NrbW9kZSA9 IFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jazsKKwkJaW5kZXhMb2NrbW9kZSA9IFJvd0V4Y2x1 c2l2ZUxvY2s7CisJfQorCisJLyogT3BlbiByZWxhdGlvbnMgd2l0aGluIHdvcmtlciAqLwor CWhlYXBSZWwgPSB0YWJsZV9vcGVuKGJyaW5zaGFyZWQtPmhlYXByZWxpZCwgaGVhcExvY2tt b2RlKTsKKwlpbmRleFJlbCA9IGluZGV4X29wZW4oYnJpbnNoYXJlZC0+aW5kZXhyZWxpZCwg aW5kZXhMb2NrbW9kZSk7CisKKwlidWlsZHN0YXRlID0gaW5pdGlhbGl6ZV9icmluX2J1aWxk c3RhdGUoaW5kZXhSZWwsIE5VTEwsIGJyaW5zaGFyZWQtPnBhZ2VzUGVyUmFuZ2UpOworCisJ LyogSW5pdGlhbGl6ZSB3b3JrZXIncyBvd24gc3Bvb2wgKi8KKwlidWlsZHN0YXRlLT5ic19z cG9vbCA9IChCcmluU3Bvb2wgKikgcGFsbG9jMChzaXplb2YoQnJpblNwb29sKSk7CisJYnVp bGRzdGF0ZS0+YnNfc3Bvb2wtPmhlYXAgPSBoZWFwUmVsOworCWJ1aWxkc3RhdGUtPmJzX3Nw b29sLT5pbmRleCA9IGluZGV4UmVsOworCisJLyogTG9vayB1cCBzaGFyZWQgc3RhdGUgcHJp dmF0ZSB0byB0dXBsZXNvcnQuYyAqLworCXNoYXJlZHNvcnQgPSBzaG1fdG9jX2xvb2t1cCh0 b2MsIFBBUkFMTEVMX0tFWV9UVVBMRVNPUlQsIGZhbHNlKTsKKwl0dXBsZXNvcnRfYXR0YWNo X3NoYXJlZChzaGFyZWRzb3J0LCBzZWcpOworCisJLyogUHJlcGFyZSB0byB0cmFjayBidWZm ZXIgdXNhZ2UgZHVyaW5nIHBhcmFsbGVsIGV4ZWN1dGlvbiAqLworCUluc3RyU3RhcnRQYXJh bGxlbFF1ZXJ5KCk7CisKKwkvKgorCSAqIE1pZ2h0IGFzIHdlbGwgdXNlIHJlbGlhYmxlIGZp Z3VyZSB3aGVuIGRvbGluZyBvdXQgbWFpbnRlbmFuY2Vfd29ya19tZW0KKwkgKiAod2hlbiBy ZXF1ZXN0ZWQgbnVtYmVyIG9mIHdvcmtlcnMgd2VyZSBub3QgbGF1bmNoZWQsIHRoaXMgd2ls bCBiZQorCSAqIHNvbWV3aGF0IGhpZ2hlciB0aGFuIGl0IGlzIGZvciBvdGhlciB3b3JrZXJz KS4KKwkgKi8KKwlzb3J0bWVtID0gbWFpbnRlbmFuY2Vfd29ya19tZW0gLyBicmluc2hhcmVk LT5zY2FudHVwbGVzb3J0c3RhdGVzOworCisJX2JyaW5fcGFyYWxsZWxfc2Nhbl9hbmRfYnVp bGQoYnVpbGRzdGF0ZSwgYnVpbGRzdGF0ZS0+YnNfc3Bvb2wsCisJCQkJCQkJCSAgYnJpbnNo YXJlZCwgc2hhcmVkc29ydCwKKwkJCQkJCQkJICBoZWFwUmVsLCBpbmRleFJlbCwgc29ydG1l bSwgZmFsc2UpOworCisJLyogUmVwb3J0IFdBTC9idWZmZXIgdXNhZ2UgZHVyaW5nIHBhcmFs bGVsIGV4ZWN1dGlvbiAqLworCWJ1ZmZlcnVzYWdlID0gc2htX3RvY19sb29rdXAodG9jLCBQ QVJBTExFTF9LRVlfQlVGRkVSX1VTQUdFLCBmYWxzZSk7CisJd2FsdXNhZ2UgPSBzaG1fdG9j X2xvb2t1cCh0b2MsIFBBUkFMTEVMX0tFWV9XQUxfVVNBR0UsIGZhbHNlKTsKKwlJbnN0ckVu ZFBhcmFsbGVsUXVlcnkoJmJ1ZmZlcnVzYWdlW1BhcmFsbGVsV29ya2VyTnVtYmVyXSwKKwkJ CQkJCSAgJndhbHVzYWdlW1BhcmFsbGVsV29ya2VyTnVtYmVyXSk7CisKKwlpbmRleF9jbG9z ZShpbmRleFJlbCwgaW5kZXhMb2NrbW9kZSk7CisJdGFibGVfY2xvc2UoaGVhcFJlbCwgaGVh cExvY2ttb2RlKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3BhcmFsbGVsLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9wYXJhbGxlbC5jCmlu ZGV4IDE5NGExMjA3YmU2Li5kNzgzMTQwNjJlMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9wYXJhbGxlbC5jCkBAIC0xNCw2ICsxNCw3IEBACiAKICNpbmNsdWRlICJwb3N0Z3Jl cy5oIgogCisjaW5jbHVkZSAiYWNjZXNzL2JyaW4uaCIKICNpbmNsdWRlICJhY2Nlc3MvbmJ0 cmVlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCiAjaW5jbHVkZSAiYWNjZXNz L3Nlc3Npb24uaCIKQEAgLTE0NSw2ICsxNDYsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0CiAJ ewogCQkiX2J0X3BhcmFsbGVsX2J1aWxkX21haW4iLCBfYnRfcGFyYWxsZWxfYnVpbGRfbWFp bgogCX0sCisJeworCQkiX2JyaW5fcGFyYWxsZWxfYnVpbGRfbWFpbiIsIF9icmluX3BhcmFs bGVsX2J1aWxkX21haW4KKwl9LAogCXsKIAkJInBhcmFsbGVsX3ZhY3V1bV9tYWluIiwgcGFy YWxsZWxfdmFjdXVtX21haW4KIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9n L2luZGV4LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggMTQzZmFlMDFl YmQuLjM3ZTQzMDVkNTBhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4 LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC0yOTgyLDcgKzI5ODIs OCBAQCBpbmRleF9idWlsZChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJICogTm90ZSB0aGF0 IHBsYW5uZXIgY29uc2lkZXJzIHBhcmFsbGVsIHNhZmV0eSBmb3IgdXMuCiAJICovCiAJaWYg KHBhcmFsbGVsICYmIElzTm9ybWFsUHJvY2Vzc2luZ01vZGUoKSAmJgotCQlpbmRleFJlbGF0 aW9uLT5yZF9yZWwtPnJlbGFtID09IEJUUkVFX0FNX09JRCkKKwkJKGluZGV4UmVsYXRpb24t PnJkX3JlbC0+cmVsYW0gPT0gQlRSRUVfQU1fT0lEIHx8CisJCSBpbmRleFJlbGF0aW9uLT5y ZF9yZWwtPnJlbGFtID09IEJSSU5fQU1fT0lEKSkKIAkJaW5kZXhJbmZvLT5paV9QYXJhbGxl bFdvcmtlcnMgPQogCQkJcGxhbl9jcmVhdGVfaW5kZXhfd29ya2VycyhSZWxhdGlvbkdldFJl bGlkKGhlYXBSZWxhdGlvbiksCiAJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsaWQoaW5kZXhS ZWxhdGlvbikpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXNv cnR2YXJpYW50cy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXNvcnR2YXJpYW50 cy5jCmluZGV4IDJjZDUwOGU1MTMwLi45YjNhNzBlNmNjZiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvc29ydC90dXBsZXNvcnR2YXJpYW50cy5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL3NvcnQvdHVwbGVzb3J0dmFyaWFudHMuYwpAQCAtMTksNiArMTksNyBAQAogCiAj aW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9icmluX3R1cGxlLmgi CiAjaW5jbHVkZSAiYWNjZXNzL2hhc2guaCIKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRh aWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5oIgpAQCAtNDMsNiArNDQsOCBAQCBz dGF0aWMgdm9pZCByZW1vdmVhYmJyZXZfY2x1c3RlcihUdXBsZXNvcnRzdGF0ZSAqc3RhdGUs IFNvcnRUdXBsZSAqc3R1cHMsCiAJCQkJCQkJCSBpbnQgY291bnQpOwogc3RhdGljIHZvaWQg cmVtb3ZlYWJicmV2X2luZGV4KFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgU29ydFR1cGxlICpz dHVwcywKIAkJCQkJCQkgICBpbnQgY291bnQpOworc3RhdGljIHZvaWQgcmVtb3ZlYWJicmV2 X2luZGV4X2JyaW4oVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBTb3J0VHVwbGUgKnN0dXBzLAor CQkJCQkJCQkJaW50IGNvdW50KTsKIHN0YXRpYyB2b2lkIHJlbW92ZWFiYnJldl9kYXR1bShU dXBsZXNvcnRzdGF0ZSAqc3RhdGUsIFNvcnRUdXBsZSAqc3R1cHMsCiAJCQkJCQkJICAgaW50 IGNvdW50KTsKIHN0YXRpYyBpbnQJY29tcGFyZXR1cF9oZWFwKGNvbnN0IFNvcnRUdXBsZSAq YSwgY29uc3QgU29ydFR1cGxlICpiLApAQCAtNjksMTAgKzcyLDE2IEBAIHN0YXRpYyBpbnQJ Y29tcGFyZXR1cF9pbmRleF9oYXNoKGNvbnN0IFNvcnRUdXBsZSAqYSwgY29uc3QgU29ydFR1 cGxlICpiLAogCQkJCQkJCQkgIFR1cGxlc29ydHN0YXRlICpzdGF0ZSk7CiBzdGF0aWMgaW50 CWNvbXBhcmV0dXBfaW5kZXhfaGFzaF90aWVicmVhayhjb25zdCBTb3J0VHVwbGUgKmEsIGNv bnN0IFNvcnRUdXBsZSAqYiwKIAkJCQkJCQkJCQkgICBUdXBsZXNvcnRzdGF0ZSAqc3RhdGUp Oworc3RhdGljIGludAljb21wYXJldHVwX2luZGV4X2JyaW4oY29uc3QgU29ydFR1cGxlICph LCBjb25zdCBTb3J0VHVwbGUgKmIsCisJCQkJCQkJCSAgVHVwbGVzb3J0c3RhdGUgKnN0YXRl KTsKIHN0YXRpYyB2b2lkIHdyaXRldHVwX2luZGV4KFR1cGxlc29ydHN0YXRlICpzdGF0ZSwg TG9naWNhbFRhcGUgKnRhcGUsCiAJCQkJCQkgICBTb3J0VHVwbGUgKnN0dXApOwogc3RhdGlj IHZvaWQgcmVhZHR1cF9pbmRleChUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIFNvcnRUdXBsZSAq c3R1cCwKIAkJCQkJCSAgTG9naWNhbFRhcGUgKnRhcGUsIHVuc2lnbmVkIGludCBsZW4pOwor c3RhdGljIHZvaWQgd3JpdGV0dXBfaW5kZXhfYnJpbihUdXBsZXNvcnRzdGF0ZSAqc3RhdGUs IExvZ2ljYWxUYXBlICp0YXBlLAorCQkJCQkJCQlTb3J0VHVwbGUgKnN0dXApOworc3RhdGlj IHZvaWQgcmVhZHR1cF9pbmRleF9icmluKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgU29ydFR1 cGxlICpzdHVwLAorCQkJCQkJCSAgIExvZ2ljYWxUYXBlICp0YXBlLCB1bnNpZ25lZCBpbnQg bGVuKTsKIHN0YXRpYyBpbnQJY29tcGFyZXR1cF9kYXR1bShjb25zdCBTb3J0VHVwbGUgKmEs IGNvbnN0IFNvcnRUdXBsZSAqYiwKIAkJCQkJCQkgVHVwbGVzb3J0c3RhdGUgKnN0YXRlKTsK IHN0YXRpYyBpbnQJY29tcGFyZXR1cF9kYXR1bV90aWVicmVhayhjb25zdCBTb3J0VHVwbGUg KmEsIGNvbnN0IFNvcnRUdXBsZSAqYiwKQEAgLTEyOCw2ICsxMzcsMTYgQEAgdHlwZWRlZiBz dHJ1Y3QKIAl1aW50MzIJCW1heF9idWNrZXRzOwogfSBUdXBsZXNvcnRJbmRleEhhc2hBcmc7 CiAKKy8qCisgKiBEYXRhIHN0cnV0dXJlIHBvaW50ZWQgYnkgIlR1cGxlc29ydFB1YmxpYy5h cmciIGZvciB0aGUgaW5kZXhfYnJpbiBzdWJjYXNlLgorICovCit0eXBlZGVmIHN0cnVjdAor eworCVR1cGxlc29ydEluZGV4QXJnIGluZGV4OworCisJLyogWFhYIGRvIHdlIG5lZWQgc29t ZXRoaW5nIGhlcmU/ICovCit9IFR1cGxlc29ydEluZGV4QnJpbkFyZzsKKwogLyoKICAqIERh dGEgc3RydXR1cmUgcG9pbnRlZCBieSAiVHVwbGVzb3J0UHVibGljLmFyZyIgZm9yIHRoZSBE YXR1bSBjYXNlLgogICogU2V0IGJ5IHR1cGxlc29ydF9iZWdpbl9kYXR1bSBhbmQgdXNlZCBv bmx5IGJ5IHRoZSBEYXR1bVR1cGxlIHJvdXRpbmVzLgpAQCAtMTQwLDYgKzE1OSwyMSBAQCB0 eXBlZGVmIHN0cnVjdAogCWludAkJCWRhdHVtVHlwZUxlbjsKIH0gVHVwbGVzb3J0RGF0dW1B cmc7CiAKKy8qCisgKiBDb21wdXRpbmcgQnJpblR1cGxlIHNpemUgd2l0aCBvbmx5IHRoZSB0 dXBsZSBpcyBkaWZmaWN1bHQsIHNvIHdlIHdhbnQgdG8gdHJhY2sKKyAqIHRoZSBsZW5ndGgg cmVmZXJlbmNlZCBieSB0aGUgU29ydFR1cGxlLiBUaGF0J3Mgd2hhdCBCcmluU29ydFR1cGxl IGlzIG1lYW50CisgKiB0byBkbyAtIGl0J3MgZXNzZW50aWFsbHkgYSBCcmluVHVwbGUgcHJl Zml4ZWQgYnkgaXRzIGxlbmd0aC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQnJpblNvcnRUdXBs ZQoreworCVNpemUJCXR1cGxlbjsKKwlCcmluVHVwbGUJdHVwbGU7Cit9IEJyaW5Tb3J0VHVw bGU7CisKKy8qIFNpemUgb2YgdGhlIEJyaW5Tb3J0VHVwbGUsIGdpdmVuIGxlbmd0aCBvZiB0 aGUgQnJpblR1cGxlLiAqLworI2RlZmluZSBCUklOU09SVFRVUExFX1NJWkUobGVuKQkJKG9m ZnNldG9mKEJyaW5Tb3J0VHVwbGUsIHR1cGxlKSArIChsZW4pKQorCisKIFR1cGxlc29ydHN0 YXRlICoKIHR1cGxlc29ydF9iZWdpbl9oZWFwKFR1cGxlRGVzYyB0dXBEZXNjLAogCQkJCQkg aW50IG5rZXlzLCBBdHRyTnVtYmVyICphdHROdW1zLApAQCAtNTI3LDYgKzU2MSw0NyBAQCB0 dXBsZXNvcnRfYmVnaW5faW5kZXhfZ2lzdChSZWxhdGlvbiBoZWFwUmVsLAogCXJldHVybiBz dGF0ZTsKIH0KIAorVHVwbGVzb3J0c3RhdGUgKgordHVwbGVzb3J0X2JlZ2luX2luZGV4X2Jy aW4oUmVsYXRpb24gaGVhcFJlbCwKKwkJCQkJCSAgIFJlbGF0aW9uIGluZGV4UmVsLAorCQkJ CQkJICAgaW50IHdvcmtNZW0sCisJCQkJCQkgICBTb3J0Q29vcmRpbmF0ZSBjb29yZGluYXRl LAorCQkJCQkJICAgaW50IHNvcnRvcHQpCit7CisJVHVwbGVzb3J0c3RhdGUgKnN0YXRlID0g dHVwbGVzb3J0X2JlZ2luX2NvbW1vbih3b3JrTWVtLCBjb29yZGluYXRlLAorCQkJCQkJCQkJ CQkJICAgc29ydG9wdCk7CisJVHVwbGVzb3J0UHVibGljICpiYXNlID0gVHVwbGVzb3J0c3Rh dGVHZXRQdWJsaWMoc3RhdGUpOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlUdXBs ZXNvcnRJbmRleEJyaW5BcmcgKmFyZzsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8oYmFzZS0+bWFpbmNvbnRleHQpOworCWFyZyA9IChUdXBsZXNvcnRJbmRleEJy aW5BcmcgKikgcGFsbG9jKHNpemVvZihUdXBsZXNvcnRJbmRleEJyaW5BcmcpKTsKKworI2lm ZGVmIFRSQUNFX1NPUlQKKwlpZiAodHJhY2Vfc29ydCkKKwkJZWxvZyhMT0csCisJCQkgImJl Z2luIGluZGV4IHNvcnQ6IHdvcmtNZW0gPSAlZCwgcmFuZG9tQWNjZXNzID0gJWMiLAorCQkJ IHdvcmtNZW0sCisJCQkgc29ydG9wdCAmIFRVUExFU09SVF9SQU5ET01BQ0NFU1MgPyAndCcg OiAnZicpOworI2VuZGlmCisKKwliYXNlLT5uS2V5cyA9IDE7CQkJLyogT25seSBvbmUgc29y dCBjb2x1bW4sIHRoZSBibG9jayBudW1iZXIgKi8KKworCWJhc2UtPnJlbW92ZWFiYnJldiA9 IHJlbW92ZWFiYnJldl9pbmRleF9icmluOworCWJhc2UtPmNvbXBhcmV0dXAgPSBjb21wYXJl dHVwX2luZGV4X2JyaW47CisJYmFzZS0+d3JpdGV0dXAgPSB3cml0ZXR1cF9pbmRleF9icmlu OworCWJhc2UtPnJlYWR0dXAgPSByZWFkdHVwX2luZGV4X2JyaW47CisJYmFzZS0+aGF2ZURh dHVtMSA9IHRydWU7CisJYmFzZS0+YXJnID0gYXJnOworCisJYXJnLT5pbmRleC5oZWFwUmVs ID0gaGVhcFJlbDsKKwlhcmctPmluZGV4LmluZGV4UmVsID0gaW5kZXhSZWw7CisKKwlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisK IFR1cGxlc29ydHN0YXRlICoKIHR1cGxlc29ydF9iZWdpbl9kYXR1bShPaWQgZGF0dW1UeXBl LCBPaWQgc29ydE9wZXJhdG9yLCBPaWQgc29ydENvbGxhdGlvbiwKIAkJCQkJICBib29sIG51 bGxzRmlyc3RGbGFnLCBpbnQgd29ya01lbSwKQEAgLTcwNyw2ICs3ODIsMzUgQEAgdHVwbGVz b3J0X3B1dGluZGV4dHVwbGV2YWx1ZXMoVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBSZWxhdGlv biByZWwsCiAJCQkJCQkJICAhc3R1cC5pc251bGwxKTsKIH0KIAorLyoKKyAqIENvbGxlY3Qg b25lIEJSSU4gdHVwbGUgd2hpbGUgY29sbGVjdGluZyBpbnB1dCBkYXRhIGZvciBzb3J0Lgor ICovCit2b2lkCit0dXBsZXNvcnRfcHV0YnJpbnR1cGxlKFR1cGxlc29ydHN0YXRlICpzdGF0 ZSwgQnJpblR1cGxlICp0dXBsZSwgU2l6ZSBzaXplKQoreworCVNvcnRUdXBsZQlzdHVwOwor CUJyaW5Tb3J0VHVwbGUgKmJzdHVwOworCVR1cGxlc29ydFB1YmxpYyAqYmFzZSA9IFR1cGxl c29ydHN0YXRlR2V0UHVibGljKHN0YXRlKTsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oYmFzZS0+dHVwbGVjb250ZXh0KTsKKworCS8qIGFs bG9jYXRlIHNwYWNlIGZvciB0aGUgd2hvbGUgQlJJTiBzb3J0IHR1cGxlICovCisJYnN0dXAg PSBwYWxsb2MoQlJJTlNPUlRUVVBMRV9TSVpFKHNpemUpKTsKKworCWJzdHVwLT50dXBsZW4g PSBzaXplOworCW1lbWNweSgmYnN0dXAtPnR1cGxlLCB0dXBsZSwgc2l6ZSk7CisKKwlzdHVw LnR1cGxlID0gYnN0dXA7CisJc3R1cC5kYXR1bTEgPSB0dXBsZS0+YnRfYmxrbm87CisJc3R1 cC5pc251bGwxID0gZmFsc2U7CisKKwl0dXBsZXNvcnRfcHV0dHVwbGVfY29tbW9uKHN0YXRl LCAmc3R1cCwKKwkJCQkJCQkgIGJhc2UtPnNvcnRLZXlzICYmCisJCQkJCQkJICBiYXNlLT5z b3J0S2V5cy0+YWJicmV2X2NvbnZlcnRlciAmJgorCQkJCQkJCSAgIXN0dXAuaXNudWxsMSk7 CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Cit9CisKIC8qCiAgKiBB Y2NlcHQgb25lIERhdHVtIHdoaWxlIGNvbGxlY3RpbmcgaW5wdXQgZGF0YSBmb3Igc29ydC4K ICAqCkBAIC04NTAsNiArOTU0LDM1IEBAIHR1cGxlc29ydF9nZXRpbmRleHR1cGxlKFR1cGxl c29ydHN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkKQogCXJldHVybiAoSW5kZXhUdXBsZSkg c3R1cC50dXBsZTsKIH0KIAorLyoKKyAqIEZldGNoIHRoZSBuZXh0IEJSSU4gdHVwbGUgaW4g ZWl0aGVyIGZvcndhcmQgb3IgYmFjayBkaXJlY3Rpb24uCisgKiBSZXR1cm5zIE5VTEwgaWYg bm8gbW9yZSB0dXBsZXMuICBSZXR1cm5lZCB0dXBsZSBiZWxvbmdzIHRvIHR1cGxlc29ydCBt ZW1vcnkKKyAqIGNvbnRleHQsIGFuZCBtdXN0IG5vdCBiZSBmcmVlZCBieSBjYWxsZXIuICBD YWxsZXIgbWF5IG5vdCByZWx5IG9uIHR1cGxlCisgKiByZW1haW5pbmcgdmFsaWQgYWZ0ZXIg YW55IGZ1cnRoZXIgbWFuaXB1bGF0aW9uIG9mIHR1cGxlc29ydC4KKyAqLworQnJpblR1cGxl ICoKK3R1cGxlc29ydF9nZXRicmludHVwbGUoVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBTaXpl ICpsZW4sIGJvb2wgZm9yd2FyZCkKK3sKKwlUdXBsZXNvcnRQdWJsaWMgKmJhc2UgPSBUdXBs ZXNvcnRzdGF0ZUdldFB1YmxpYyhzdGF0ZSk7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGJhc2UtPnNvcnRjb250ZXh0KTsKKwlTb3J0VHVw bGUJCXN0dXA7CisJQnJpblNvcnRUdXBsZSAgKmJ0dXA7CisKKwlpZiAoIXR1cGxlc29ydF9n ZXR0dXBsZV9jb21tb24oc3RhdGUsIGZvcndhcmQsICZzdHVwKSkKKwkJc3R1cC50dXBsZSA9 IE5VTEw7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwlpZiAo IXN0dXAudHVwbGUpCisJCXJldHVybiBOVUxMOworCisJYnR1cCA9IChCcmluU29ydFR1cGxl ICopIHN0dXAudHVwbGU7CisKKwkqbGVuID0gYnR1cC0+dHVwbGVuOworCisJcmV0dXJuICZi dHVwLT50dXBsZTsKK30KKwogLyoKICAqIEZldGNoIHRoZSBuZXh0IERhdHVtIGluIGVpdGhl ciBmb3J3YXJkIG9yIGJhY2sgZGlyZWN0aW9uLgogICogUmV0dXJucyBmYWxzZSBpZiBubyBt b3JlIGRhdHVtcy4KQEAgLTE1NjQsNiArMTY5Nyw4MCBAQCByZWFkdHVwX2luZGV4KFR1cGxl c29ydHN0YXRlICpzdGF0ZSwgU29ydFR1cGxlICpzdHVwLAogCQkJCQkJCQkgJnN0dXAtPmlz bnVsbDEpOwogfQogCisvKgorICogUm91dGluZXMgc3BlY2lhbGl6ZWQgZm9yIEJyaW5UdXBs ZSBjYXNlCisgKi8KKworc3RhdGljIHZvaWQKK3JlbW92ZWFiYnJldl9pbmRleF9icmluKFR1 cGxlc29ydHN0YXRlICpzdGF0ZSwgU29ydFR1cGxlICpzdHVwcywgaW50IGNvdW50KQorewor CWludAkJCWk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwl7CisJCUJyaW5T b3J0VHVwbGUgICAqdHVwbGU7CisKKwkJdHVwbGUgPSBzdHVwc1tpXS50dXBsZTsKKwkJc3R1 cHNbaV0uZGF0dW0xID0gdHVwbGUtPnR1cGxlLmJ0X2Jsa25vOworCX0KK30KKworc3RhdGlj IGludAorY29tcGFyZXR1cF9pbmRleF9icmluKGNvbnN0IFNvcnRUdXBsZSAqYSwgY29uc3Qg U29ydFR1cGxlICpiLAorCQkJCQkgIFR1cGxlc29ydHN0YXRlICpzdGF0ZSkKK3sKKwlBc3Nl cnQoVHVwbGVzb3J0c3RhdGVHZXRQdWJsaWMoc3RhdGUpLT5oYXZlRGF0dW0xKTsKKworCWlm IChEYXR1bUdldFVJbnQzMihhLT5kYXR1bTEpID4gRGF0dW1HZXRVSW50MzIoYi0+ZGF0dW0x KSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoRGF0dW1HZXRVSW50MzIoYS0+ZGF0dW0xKSA8IERh dHVtR2V0VUludDMyKGItPmRhdHVtMSkpCisJCXJldHVybiAtMTsKKworCS8qIHNpbGVuY2Ug Y29tcGlsZXJzICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCit3cml0ZXR1cF9p bmRleF9icmluKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgTG9naWNhbFRhcGUgKnRhcGUsIFNv cnRUdXBsZSAqc3R1cCkKK3sKKwlUdXBsZXNvcnRQdWJsaWMgKmJhc2UgPSBUdXBsZXNvcnRz dGF0ZUdldFB1YmxpYyhzdGF0ZSk7CisJQnJpblNvcnRUdXBsZSAgKnR1cGxlID0gKEJyaW5T b3J0VHVwbGUgKikgc3R1cC0+dHVwbGU7CisJdW5zaWduZWQgaW50CXR1cGxlbiA9IHR1cGxl LT50dXBsZW47CisKKwl0dXBsZW4gPSB0dXBsZW4gKyBzaXplb2YodHVwbGVuKTsKKwlMb2dp Y2FsVGFwZVdyaXRlKHRhcGUsICZ0dXBsZW4sIHNpemVvZih0dXBsZW4pKTsKKwlMb2dpY2Fs VGFwZVdyaXRlKHRhcGUsICZ0dXBsZS0+dHVwbGUsIHR1cGxlLT50dXBsZW4pOworCWlmIChi YXNlLT5zb3J0b3B0ICYgVFVQTEVTT1JUX1JBTkRPTUFDQ0VTUykgLyogbmVlZCB0cmFpbGlu ZyBsZW5ndGggd29yZD8gKi8KKwkJTG9naWNhbFRhcGVXcml0ZSh0YXBlLCAmdHVwbGVuLCBz aXplb2YodHVwbGVuKSk7Cit9CisKK3N0YXRpYyB2b2lkCityZWFkdHVwX2luZGV4X2JyaW4o VHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBTb3J0VHVwbGUgKnN0dXAsCisJCQkJICAgTG9naWNh bFRhcGUgKnRhcGUsIHVuc2lnbmVkIGludCBsZW4pCit7CisJVHVwbGVzb3J0UHVibGljICpi YXNlID0gVHVwbGVzb3J0c3RhdGVHZXRQdWJsaWMoc3RhdGUpOworCXVuc2lnbmVkIGludCB0 dXBsZW4gPSBsZW4gLSBzaXplb2YodW5zaWduZWQgaW50KTsKKworCS8qCisJICogQWxsb2Nh dGUgc3BhY2UgZm9yIHRoZSBCUklOIHNvcnQgdHVwbGUsIHdoaWNoIGlzIEJyaW5UdXBsZSB3 aXRoIGFuCisJICogZXh0cmEgbGVuZ3RoIGZpZWxkLgorCSAqLworCUJyaW5Tb3J0VHVwbGUg KnR1cGxlCisJCT0gKEJyaW5Tb3J0VHVwbGUgKikgdHVwbGVzb3J0X3JlYWR0dXBfYWxsb2Mo c3RhdGUsCisJCQkJCQkJCQkJCQkJQlJJTlNPUlRUVVBMRV9TSVpFKHR1cGxlbikpOworCisJ dHVwbGUtPnR1cGxlbiA9IHR1cGxlbjsKKworCUxvZ2ljYWxUYXBlUmVhZEV4YWN0KHRhcGUs ICZ0dXBsZS0+dHVwbGUsIHR1cGxlbik7CisJaWYgKGJhc2UtPnNvcnRvcHQgJiBUVVBMRVNP UlRfUkFORE9NQUNDRVNTKSAvKiBuZWVkIHRyYWlsaW5nIGxlbmd0aCB3b3JkPyAqLworCQlM b2dpY2FsVGFwZVJlYWRFeGFjdCh0YXBlLCAmdHVwbGVuLCBzaXplb2YodHVwbGVuKSk7CisJ c3R1cC0+dHVwbGUgPSAodm9pZCAqKSB0dXBsZTsKKworCS8qIHNldCB1cCBmaXJzdC1jb2x1 bW4ga2V5IHZhbHVlLCB3aGljaCBpcyBibG9jayBudW1iZXIgKi8KKwlzdHVwLT5kYXR1bTEg PSB0dXBsZS0+dHVwbGUuYnRfYmxrbm87Cit9CisKIC8qCiAgKiBSb3V0aW5lcyBzcGVjaWFs aXplZCBmb3IgRGF0dW1UdXBsZSBjYXNlCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9icmluLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbi5oCmluZGV4IGVkNjZm MWIzZDUxLi4zNDUxZWNiMjExZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2Jy aW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbi5oCkBAIC0xMSw2ICsxMSw3IEBA CiAjZGVmaW5lIEJSSU5fSAogCiAjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgiCisjaW5j bHVkZSAic3RvcmFnZS9zaG1fdG9jLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIK IAogCkBAIC01Miw0ICs1Myw2IEBAIHR5cGVkZWYgc3RydWN0IEJyaW5TdGF0c0RhdGEKIAog ZXh0ZXJuIHZvaWQgYnJpbkdldFN0YXRzKFJlbGF0aW9uIGluZGV4LCBCcmluU3RhdHNEYXRh ICpzdGF0cyk7CiAKK2V4dGVybiB2b2lkIF9icmluX3BhcmFsbGVsX2J1aWxkX21haW4oZHNt X3NlZ21lbnQgKnNlZywgc2htX3RvYyAqdG9jKTsKKwogI2VuZGlmCQkJCQkJCS8qIEJSSU5f SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvdHVwbGVzb3J0LmggYi9zcmMv aW5jbHVkZS91dGlscy90dXBsZXNvcnQuaAppbmRleCA5ZWQyZGU3NmNkNi4uMzU3ZWIzNTMx MWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3R1cGxlc29ydC5oCisrKyBiL3Ny Yy9pbmNsdWRlL3V0aWxzL3R1cGxlc29ydC5oCkBAIC0yMSw2ICsyMSw3IEBACiAjaWZuZGVm IFRVUExFU09SVF9ICiAjZGVmaW5lIFRVUExFU09SVF9ICiAKKyNpbmNsdWRlICJhY2Nlc3Mv YnJpbl90dXBsZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9pdHVwLmgiCiAjaW5jbHVkZSAiZXhl Y3V0b3IvdHVwdGFibGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2RzbS5oIgpAQCAtMjgyLDYg KzI4Myw5IEBAIHR5cGVkZWYgc3RydWN0CiAgKiBUaGUgImluZGV4X2hhc2giIEFQSSBpcyBz aW1pbGFyIHRvIGluZGV4X2J0cmVlLCBidXQgdGhlIHR1cGxlcyBhcmUKICAqIGFjdHVhbGx5 IHNvcnRlZCBieSB0aGVpciBoYXNoIGNvZGVzIG5vdCB0aGUgcmF3IGRhdGEuCiAgKgorICog VGhlICJpbmRleF9icmluIiBBUEkgaXMgc2ltaWxhciB0byBpbmRleF9idHJlZSwgYnV0IHRo ZSB0dXBsZXMgYXJlCisgKiBCcmluVHVwbGUgYW5kIGFyZSBzb3J0ZWQgYnkgdGhlaXIgYmxv Y2sgbnVtYmVyIG5vdCB0aGUgcmF3IGRhdGEuCisgKgogICogUGFyYWxsZWwgc29ydCBjYWxs ZXJzIGFyZSByZXF1aXJlZCB0byBjb29yZGluYXRlIG11bHRpcGxlIHR1cGxlc29ydCBzdGF0 ZXMKICAqIGluIGEgbGVhZGVyIHByb2Nlc3MgYW5kIG9uZSBvciBtb3JlIHdvcmtlciBwcm9j ZXNzZXMuICBUaGUgbGVhZGVyIHByb2Nlc3MKICAqIG11c3QgbGF1bmNoIHdvcmtlcnMsIGFu ZCBoYXZlIGVhY2ggcGVyZm9ybSBhbiBpbmRlcGVuZGVudCAicGFydGlhbCIKQEAgLTQyNiw2 ICs0MzAsMTAgQEAgZXh0ZXJuIFR1cGxlc29ydHN0YXRlICp0dXBsZXNvcnRfYmVnaW5faW5k ZXhfZ2lzdChSZWxhdGlvbiBoZWFwUmVsLAogCQkJCQkJCQkJCQkJICBSZWxhdGlvbiBpbmRl eFJlbCwKIAkJCQkJCQkJCQkJCSAgaW50IHdvcmtNZW0sIFNvcnRDb29yZGluYXRlIGNvb3Jk aW5hdGUsCiAJCQkJCQkJCQkJCQkgIGludCBzb3J0b3B0KTsKK2V4dGVybiBUdXBsZXNvcnRz dGF0ZSAqdHVwbGVzb3J0X2JlZ2luX2luZGV4X2JyaW4oUmVsYXRpb24gaGVhcFJlbCwKKwkJ CQkJCQkJCQkJCSAgUmVsYXRpb24gaW5kZXhSZWwsCisJCQkJCQkJCQkJCQkgIGludCB3b3Jr TWVtLCBTb3J0Q29vcmRpbmF0ZSBjb29yZGluYXRlLAorCQkJCQkJCQkJCQkJICBpbnQgc29y dG9wdCk7CiBleHRlcm4gVHVwbGVzb3J0c3RhdGUgKnR1cGxlc29ydF9iZWdpbl9kYXR1bShP aWQgZGF0dW1UeXBlLAogCQkJCQkJCQkJCQkgT2lkIHNvcnRPcGVyYXRvciwgT2lkIHNvcnRD b2xsYXRpb24sCiAJCQkJCQkJCQkJCSBib29sIG51bGxzRmlyc3RGbGFnLApAQCAtNDM4LDYg KzQ0Niw3IEBAIGV4dGVybiB2b2lkIHR1cGxlc29ydF9wdXRoZWFwdHVwbGUoVHVwbGVzb3J0 c3RhdGUgKnN0YXRlLCBIZWFwVHVwbGUgdHVwKTsKIGV4dGVybiB2b2lkIHR1cGxlc29ydF9w dXRpbmRleHR1cGxldmFsdWVzKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwKIAkJCQkJCQkJCQkg IFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgc2VsZiwKIAkJCQkJCQkJCQkgIGNvbnN0IERh dHVtICp2YWx1ZXMsIGNvbnN0IGJvb2wgKmlzbnVsbCk7CitleHRlcm4gdm9pZCB0dXBsZXNv cnRfcHV0YnJpbnR1cGxlKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgQnJpblR1cGxlICp0dXAs IFNpemUgbGVuKTsKIGV4dGVybiB2b2lkIHR1cGxlc29ydF9wdXRkYXR1bShUdXBsZXNvcnRz dGF0ZSAqc3RhdGUsIERhdHVtIHZhbCwKIAkJCQkJCQkgICBib29sIGlzTnVsbCk7CiAKQEAg LTQ0NSw2ICs0NTQsOCBAQCBleHRlcm4gYm9vbCB0dXBsZXNvcnRfZ2V0dHVwbGVzbG90KFR1 cGxlc29ydHN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkLAogCQkJCQkJCQkgICBib29sIGNv cHksIFR1cGxlVGFibGVTbG90ICpzbG90LCBEYXR1bSAqYWJicmV2KTsKIGV4dGVybiBIZWFw VHVwbGUgdHVwbGVzb3J0X2dldGhlYXB0dXBsZShUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIGJv b2wgZm9yd2FyZCk7CiBleHRlcm4gSW5kZXhUdXBsZSB0dXBsZXNvcnRfZ2V0aW5kZXh0dXBs ZShUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIGJvb2wgZm9yd2FyZCk7CitleHRlcm4gQnJpblR1 cGxlICp0dXBsZXNvcnRfZ2V0YnJpbnR1cGxlKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgU2l6 ZSAqbGVuLAorCQkJCQkJCQkJCSBib29sIGZvcndhcmQpOwogZXh0ZXJuIGJvb2wgdHVwbGVz b3J0X2dldGRhdHVtKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkLCBib29s IGNvcHksCiAJCQkJCQkJICAgRGF0dW0gKnZhbCwgYm9vbCAqaXNOdWxsLCBEYXR1bSAqYWJi cmV2KTsKIAotLSAKMi40MS4wCgo= --------------Vg0tEXT73Q0i0DvYi490fHYV Content-Type: text/x-patch; charset=UTF-8; name="v4-0002-review-fixes.patch" Content-Disposition: attachment; filename="v4-0002-review-fixes.patch" Content-Transfer-Encoding: base64 RnJvbSA2MjU4ODBkZTY2MjE4MWZkNDMzZWI1ODNhMDBhZjBmMTZkNTdjNDIwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogV2VkLCAyMiBOb3YgMjAyMyAxOTo1ODoxMCArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggdjQgMi8yXSByZXZpZXcgZml4ZXMKCi0tLQogY29udHJpYi9ibG9vbS9i bHV0aWxzLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvYWNj ZXNzL2JyaW4vYnJpbi5jICAgICAgICAgICAgICAgIHwgMjggKysrKysrKystLS0tLS0tLS0t LQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgICAgICAgICAgICAgIHwgIDEg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jICAgICAgICAgICAgICAgIHwgIDEg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jICAgICAgICAgICAgICAgIHwgIDEg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyAgICAgICAgICAgIHwgIDEg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jICAgICAgICAgIHwgIDEg Kwogc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jICAgICAgICAgICAgICAgICAgIHwgIDMg Ky0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oICAgICAgICAgICAgICAgICAgICB8ICAy ICsrCiAuLi4vbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jICAgfCAg MSArCiAxMCBmaWxlcyBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9jb250cmliL2Jsb29tL2JsdXRpbHMuYyBiL2NvbnRyaWIvYmxv b20vYmx1dGlscy5jCmluZGV4IGYyM2ZiYjFkOWUwLi43NDUxZmIxYjNiYiAxMDA2NDQKLS0t IGEvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKKysrIGIvY29udHJpYi9ibG9vbS9ibHV0aWxz LmMKQEAgLTEyMiw2ICsxMjIsNyBAQCBibGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlh bXJvdXRpbmUtPmFtY2x1c3RlcmFibGUgPSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFtcHJlZGxv Y2tzID0gZmFsc2U7CiAJYW1yb3V0aW5lLT5hbWNhbnBhcmFsbGVsID0gZmFsc2U7CisJYW1y b3V0aW5lLT5hbWNhbmJ1aWxkcGFyYWxsZWwgPSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFtY2Fu aW5jbHVkZSA9IGZhbHNlOwogCWFtcm91dGluZS0+YW11c2VtYWludGVuYW5jZXdvcmttZW0g PSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFtcGFyYWxsZWx2YWN1dW1vcHRpb25zID0KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9icmluL2JyaW4uYwppbmRleCAwZDNkNzI4YzliZi4uZTgzNmNiYWFkMGIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvYnJpbi9icmluLmMKQEAgLTQ0LDExICs0NCwxMSBAQAogI2luY2x1ZGUgInV0 aWxzL3R1cGxlc29ydC5oIgogCiAvKiBNYWdpYyBudW1iZXJzIGZvciBwYXJhbGxlbCBzdGF0 ZSBzaGFyaW5nICovCi0jZGVmaW5lIFBBUkFMTEVMX0tFWV9CUklOX1NIQVJFRAkJVUlOVDY0 Q09OU1QoMHhBMDAwMDAwMDAwMDAwMDAxKQotI2RlZmluZSBQQVJBTExFTF9LRVlfVFVQTEVT T1JUCQkJVUlOVDY0Q09OU1QoMHhBMDAwMDAwMDAwMDAwMDAyKQotI2RlZmluZSBQQVJBTExF TF9LRVlfUVVFUllfVEVYVAkJCVVJTlQ2NENPTlNUKDB4QTAwMDAwMDAwMDAwMDAwMykKLSNk ZWZpbmUgUEFSQUxMRUxfS0VZX1dBTF9VU0FHRQkJCVVJTlQ2NENPTlNUKDB4QTAwMDAwMDAw MDAwMDAwNCkKLSNkZWZpbmUgUEFSQUxMRUxfS0VZX0JVRkZFUl9VU0FHRQkJVUlOVDY0Q09O U1QoMHhBMDAwMDAwMDAwMDAwMDA1KQorI2RlZmluZSBQQVJBTExFTF9LRVlfQlJJTl9TSEFS RUQJCVVJTlQ2NENPTlNUKDB4QjAwMDAwMDAwMDAwMDAwMSkKKyNkZWZpbmUgUEFSQUxMRUxf S0VZX1RVUExFU09SVAkJCVVJTlQ2NENPTlNUKDB4QjAwMDAwMDAwMDAwMDAwMikKKyNkZWZp bmUgUEFSQUxMRUxfS0VZX1FVRVJZX1RFWFQJCQlVSU5UNjRDT05TVCgweEIwMDAwMDAwMDAw MDAwMDMpCisjZGVmaW5lIFBBUkFMTEVMX0tFWV9XQUxfVVNBR0UJCQlVSU5UNjRDT05TVCgw eEIwMDAwMDAwMDAwMDAwMDQpCisjZGVmaW5lIFBBUkFMTEVMX0tFWV9CVUZGRVJfVVNBR0UJ CVVJTlQ2NENPTlNUKDB4QjAwMDAwMDAwMDAwMDAwNSkKIAogLyoKICAqIFN0YXR1cyByZWNv cmQgZm9yIHNwb29saW5nL3NvcnRpbmcgcGhhc2UuCkBAIC0xNjEsNyArMTYxLDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgQnJpbkxlYWRlcgogdHlwZWRlZiBzdHJ1Y3QgQnJpbkJ1aWxkU3RhdGUK IHsKIAlSZWxhdGlvbglic19pcmVsOwotCWludAkJCWJzX251bXR1cGxlczsKKwlkb3VibGUJ CWJzX251bXR1cGxlczsKIAlkb3VibGUJCWJzX3JlbHR1cGxlczsKIAlCdWZmZXIJCWJzX2N1 cnJlbnRJbnNlcnRCdWY7CiAJQmxvY2tOdW1iZXIgYnNfcGFnZXNQZXJSYW5nZTsKQEAgLTI0 NCw2ICsyNDQsNyBAQCBicmluaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGlu ZS0+YW1jbHVzdGVyYWJsZSA9IGZhbHNlOwogCWFtcm91dGluZS0+YW1wcmVkbG9ja3MgPSBm YWxzZTsKIAlhbXJvdXRpbmUtPmFtY2FucGFyYWxsZWwgPSBmYWxzZTsKKwlhbXJvdXRpbmUt PmFtY2FuYnVpbGRwYXJhbGxlbCA9IHRydWU7CiAJYW1yb3V0aW5lLT5hbWNhbmluY2x1ZGUg PSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFtdXNlbWFpbnRlbmFuY2V3b3JrbWVtID0gZmFsc2U7 CiAJYW1yb3V0aW5lLT5hbXN1bW1hcml6aW5nID0gdHJ1ZTsKQEAgLTk2MCw3ICs5NjEsNyBA QCBicmluYnVpbGRDYWxsYmFjayhSZWxhdGlvbiBpbmRleCwKIC8qCiAgKiBBIHZlcnNpb24g b2YgdGhlIGNhbGxiYWNrLCB1c2VkIGJ5IHBhcmFsbGVsIGluZGV4IGJ1aWxkcy4gVGhlIG1h aW4gZGlmZmVyZW5jZQogICogaXMgdGhhdCBpbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIEJSSU4g dHVwbGVzIGludG8gdGhlIGluZGV4LCB3ZSB3cml0ZSB0aGVtIGludG8KLSAqIGEgc2hhcmVk IHR1cGxlc3RvcmUsIGFuZCBsZWF2ZSB0aGUgaW5zZXJ0aW9uIHVwIHRvIHRoZSBsZWFkZXIg KHdoaWNoIG1heQorICogYSBzaGFyZWQgdHVwbGVzb3J0LCBhbmQgbGVhdmUgdGhlIGluc2Vy dGlvbiB1cCB0byB0aGUgbGVhZGVyICh3aGljaCBtYXkKICAqIHJlb3JkZXIgdGhlbSBhIGJp dCBldGMuKS4gVGhlIGNhbGxiYWNrIGFsc28gZG9lcyBub3QgZ2VuZXJhdGUgZW1wdHkgcmFu Z2VzLAogICogdGhvc2UgbWF5IGJlIGFkZGVkIGJ5IHRoZSBsZWFkZXIgd2hlbiBtZXJnaW5n IHJlc3VsdHMgZnJvbSB3b3JrZXJzLgogICovCkBAIC0xODgwLDcgKzE4ODEsNyBAQCBmb3Jt X2FuZF9pbnNlcnRfdHVwbGUoQnJpbkJ1aWxkU3RhdGUgKnN0YXRlKQogCiAvKgogICogR2l2 ZW4gYSBkZWZvcm1lZCB0dXBsZSBpbiB0aGUgYnVpbGQgc3RhdGUsIGNvbnZlcnQgaXQgaW50 byB0aGUgb24tZGlzawotICogZm9ybWF0IGFuZCB3cml0ZSBpdCB0byBhIChzaGFyZWQpIHR1 cGxlc3RvcmUgKHRoZSBsZWFkZXIgd2lsbCBpbnNlcnQgaXQKKyAqIGZvcm1hdCBhbmQgd3Jp dGUgaXQgdG8gYSAoc2hhcmVkKSB0dXBsZXNvcnQgKHRoZSBsZWFkZXIgd2lsbCBpbnNlcnQg aXQKICAqIGludG8gdGhlIGluZGV4IGxhdGVyKS4KICAqLwogc3RhdGljIHZvaWQKQEAgLTI0 MTksNyArMjQyMCw3IEBAIF9icmluX2VuZF9wYXJhbGxlbChCcmluTGVhZGVyICpicmlubGVh ZGVyLCBCcmluQnVpbGRTdGF0ZSAqc3RhdGUpCiAJQmxvY2tOdW1iZXIJcHJldmJsa25vID0g SW52YWxpZEJsb2NrTnVtYmVyOwogCUJyaW5UdXBsZSAgKmVtcHR5VHVwbGUgPSBOVUxMOwog CVNpemUJCWVtcHR5U2l6ZTsKLQlCcmluU3Bvb2wgICpzcG9vbCA9IHN0YXRlLT5ic19zcG9v bDsKKwlCcmluU3Bvb2wgICpzcG9vbDsKIAogCS8qIFNodXRkb3duIHdvcmtlciBwcm9jZXNz ZXMgKi8KIAlXYWl0Rm9yUGFyYWxsZWxXb3JrZXJzVG9GaW5pc2goYnJpbmxlYWRlci0+cGN4 dCk7CkBAIC0yNDMxLDYgKzI0MzIsOCBAQCBfYnJpbl9lbmRfcGFyYWxsZWwoQnJpbkxlYWRl ciAqYnJpbmxlYWRlciwgQnJpbkJ1aWxkU3RhdGUgKnN0YXRlKQogCXN0YXRlLT5ic19yZWx0 dXBsZXMgPSBicmluc2hhcmVkLT5yZWx0dXBsZXM7CiAJc3RhdGUtPmJzX251bXR1cGxlcyA9 IGJyaW5zaGFyZWQtPmluZHR1cGxlczsKIAorCS8qIGRvIHRoZSBhY3R1YWwgc29ydCBpbiB0 aGUgbGVhZGVyICovCisJc3Bvb2wgPSBzdGF0ZS0+YnNfc3Bvb2w7CiAJdHVwbGVzb3J0X3Bl cmZvcm1zb3J0KHNwb29sLT5zb3J0c3RhdGUpOwogCiAJLyoKQEAgLTI0NDMsMTMgKzI0NDYs NiBAQCBfYnJpbl9lbmRfcGFyYWxsZWwoQnJpbkxlYWRlciAqYnJpbmxlYWRlciwgQnJpbkJ1 aWxkU3RhdGUgKnN0YXRlKQogCSAqIFJlYWQgdGhlIEJSSU4gdHVwbGVzIGZyb20gdGhlIHNo YXJlZCB0dXBsZXNvcnQsIHNvcnRlZCBieSBibG9jayBudW1iZXIuCiAJICogVGhhdCBwcm9i YWJseSBnaXZlcyB1cyBhbiBpbmRleCB0aGF0IGlzIGNoZWFwZXIgdG8gc2NhbiwgdGhhbmtz IHRvIG1vc3RseQogCSAqIGdldHRpbmcgZGF0YSBmcm9tIHRoZSBzYW1lIGluZGV4IHBhZ2Ug YXMgYmVmb3JlLgotCSAqCi0JICogRklYTUUgVGhpcyBwcm9iYWJseSBuZWVkcyBzb21lIG1l bW9yeSBtYW5hZ2VtZW50IGZpeGVzIC0gd2UncmUgcmVhZGluZwotCSAqIHR1cGxlcyBmcm9t IHRoZSB0dXBsZXNvcnQsIHdlJ3JlIGFsbG9jYXRpbmcgYW4gZW1wdHkgdHVwbGUsIGFuZCBz byBvbi4KLQkgKiBQcm9iYWJseSBiZXR0ZXIgdG8gcmVsZWFzZSB0aGlzIG1lbW9yeS4KLQkg KgotCSAqIFhYWCBXZSBjYW4ndCBxdWl0ZSBmcmVlIHRoZSBCcmluVHVwbGUsIHRob3VnaCwg YmVjYXVzZSB0aGF0J3MgYSBmaWVsZAotCSAqIGluIEJyaW5Tb3J0VHVwbGUuCiAJICovCiAJ d2hpbGUgKChidHVwID0gdHVwbGVzb3J0X2dldGJyaW50dXBsZShzcG9vbC0+c29ydHN0YXRl LCAmdHVwbGVuLCB0cnVlKSkgIT0gTlVMTCkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRp bC5jCmluZGV4IDdhNGNkOTNmMzAxLi5kNGM5ZDY3ODIyMyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dp bi9naW51dGlsLmMKQEAgLTU0LDYgKzU0LDcgQEAgZ2luaGFuZGxlcihQR19GVU5DVElPTl9B UkdTKQogCWFtcm91dGluZS0+YW1jbHVzdGVyYWJsZSA9IGZhbHNlOwogCWFtcm91dGluZS0+ YW1wcmVkbG9ja3MgPSB0cnVlOwogCWFtcm91dGluZS0+YW1jYW5wYXJhbGxlbCA9IGZhbHNl OworCWFtcm91dGluZS0+YW1jYW5idWlsZHBhcmFsbGVsID0gZmFsc2U7CiAJYW1yb3V0aW5l LT5hbWNhbmluY2x1ZGUgPSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFtdXNlbWFpbnRlbmFuY2V3 b3JrbWVtID0gdHJ1ZTsKIAlhbXJvdXRpbmUtPmFtc3VtbWFyaXppbmcgPSBmYWxzZTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9naXN0L2dpc3QuYwppbmRleCA4ZWY1ZmEwMzI5MC4uYWNlYzQ5MDkxMmQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKQEAgLTc2LDYgKzc2LDcgQEAgZ2lzdGhhbmRsZXIo UEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtY2x1c3RlcmFibGUgPSB0cnVlOwog CWFtcm91dGluZS0+YW1wcmVkbG9ja3MgPSB0cnVlOwogCWFtcm91dGluZS0+YW1jYW5wYXJh bGxlbCA9IGZhbHNlOworCWFtcm91dGluZS0+YW1jYW5idWlsZHBhcmFsbGVsID0gZmFsc2U7 CiAJYW1yb3V0aW5lLT5hbWNhbmluY2x1ZGUgPSB0cnVlOwogCWFtcm91dGluZS0+YW11c2Vt YWludGVuYW5jZXdvcmttZW0gPSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFtc3VtbWFyaXppbmcg PSBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwppbmRleCA3YTAyNWYzM2NmZS4uNzQ1 OTJjN2Q0MjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKQEAgLTczLDYgKzczLDcgQEAg aGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtY2x1c3RlcmFi bGUgPSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFtcHJlZGxvY2tzID0gdHJ1ZTsKIAlhbXJvdXRp bmUtPmFtY2FucGFyYWxsZWwgPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtY2FuYnVpbGRwYXJh bGxlbCA9IGZhbHNlOwogCWFtcm91dGluZS0+YW1jYW5pbmNsdWRlID0gZmFsc2U7CiAJYW1y b3V0aW5lLT5hbXVzZW1haW50ZW5hbmNld29ya21lbSA9IGZhbHNlOwogCWFtcm91dGluZS0+ YW1zdW1tYXJpemluZyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMK aW5kZXggYTg4YjM2YTU4OWEuLjJhYmE2ZjViOTFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0cmVlLmMKQEAgLTExMiw2ICsxMTIsNyBAQCBidGhhbmRsZXIoUEdfRlVOQ1RJT05f QVJHUykKIAlhbXJvdXRpbmUtPmFtY2x1c3RlcmFibGUgPSB0cnVlOwogCWFtcm91dGluZS0+ YW1wcmVkbG9ja3MgPSB0cnVlOwogCWFtcm91dGluZS0+YW1jYW5wYXJhbGxlbCA9IHRydWU7 CisJYW1yb3V0aW5lLT5hbWNhbmJ1aWxkcGFyYWxsZWwgPSB0cnVlOwogCWFtcm91dGluZS0+ YW1jYW5pbmNsdWRlID0gdHJ1ZTsKIAlhbXJvdXRpbmUtPmFtdXNlbWFpbnRlbmFuY2V3b3Jr bWVtID0gZmFsc2U7CiAJYW1yb3V0aW5lLT5hbXN1bW1hcml6aW5nID0gZmFsc2U7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKaW5kZXggYzExMmUxZTVkZDQuLjc3YjZh ZjY5NGZiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxz LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCkBAIC02MCw2 ICs2MCw3IEBAIHNwZ2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFt Y2x1c3RlcmFibGUgPSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFtcHJlZGxvY2tzID0gZmFsc2U7 CiAJYW1yb3V0aW5lLT5hbWNhbnBhcmFsbGVsID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbWNh bmJ1aWxkcGFyYWxsZWwgPSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFtY2FuaW5jbHVkZSA9IHRy dWU7CiAJYW1yb3V0aW5lLT5hbXVzZW1haW50ZW5hbmNld29ya21lbSA9IGZhbHNlOwogCWFt cm91dGluZS0+YW1zdW1tYXJpemluZyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCmluZGV4 IDM3ZTQzMDVkNTBhLi40MGFiYmFmNDc2YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwpAQCAtMjk4 Miw4ICsyOTgyLDcgQEAgaW5kZXhfYnVpbGQoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCSAq IE5vdGUgdGhhdCBwbGFubmVyIGNvbnNpZGVycyBwYXJhbGxlbCBzYWZldHkgZm9yIHVzLgog CSAqLwogCWlmIChwYXJhbGxlbCAmJiBJc05vcm1hbFByb2Nlc3NpbmdNb2RlKCkgJiYKLQkJ KGluZGV4UmVsYXRpb24tPnJkX3JlbC0+cmVsYW0gPT0gQlRSRUVfQU1fT0lEIHx8Ci0JCSBp bmRleFJlbGF0aW9uLT5yZF9yZWwtPnJlbGFtID09IEJSSU5fQU1fT0lEKSkKKwkJaW5kZXhS ZWxhdGlvbi0+cmRfaW5kYW0tPmFtY2FuYnVpbGRwYXJhbGxlbCkKIAkJaW5kZXhJbmZvLT5p aV9QYXJhbGxlbFdvcmtlcnMgPQogCQkJcGxhbl9jcmVhdGVfaW5kZXhfd29ya2VycyhSZWxh dGlvbkdldFJlbGlkKGhlYXBSZWxhdGlvbiksCiAJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVs aWQoaW5kZXhSZWxhdGlvbikpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2Ft YXBpLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaAppbmRleCA5OTU3MjU1MDJhNi4u NDA4YmI3NTk1YmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCkBAIC0yNDAsNiArMjQwLDggQEAgdHlw ZWRlZiBzdHJ1Y3QgSW5kZXhBbVJvdXRpbmUKIAlib29sCQlhbXByZWRsb2NrczsKIAkvKiBk b2VzIEFNIHN1cHBvcnQgcGFyYWxsZWwgc2Nhbj8gKi8KIAlib29sCQlhbWNhbnBhcmFsbGVs OworCS8qIGRvZXMgQU0gc3VwcG9ydCBwYXJhbGxlbCBidWlsZD8gKi8KKwlib29sCQlhbWNh bmJ1aWxkcGFyYWxsZWw7CiAJLyogZG9lcyBBTSBzdXBwb3J0IGNvbHVtbnMgaW5jbHVkZWQg d2l0aCBjbGF1c2UgSU5DTFVERT8gKi8KIAlib29sCQlhbWNhbmluY2x1ZGU7CiAJLyogZG9l cyBBTSB1c2UgbWFpbnRlbmFuY2Vfd29ya19tZW0/ICovCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMgYi9zcmMvdGVzdC9t b2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKaW5kZXggY2JkYWU3YWI3 YTUuLmVhYTBjNDgzYjdlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2lu ZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9p bmRleF9hbS9kdW1teV9pbmRleF9hbS5jCkBAIC0yOTQsNiArMjk0LDcgQEAgZGloYW5kbGVy KFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbWNsdXN0ZXJhYmxlID0gZmFsc2U7 CiAJYW1yb3V0aW5lLT5hbXByZWRsb2NrcyA9IGZhbHNlOwogCWFtcm91dGluZS0+YW1jYW5w YXJhbGxlbCA9IGZhbHNlOworCWFtcm91dGluZS0+YW1jYW5idWlsZHBhcmFsbGVsID0gZmFs c2U7CiAJYW1yb3V0aW5lLT5hbWNhbmluY2x1ZGUgPSBmYWxzZTsKIAlhbXJvdXRpbmUtPmFt dXNlbWFpbnRlbmFuY2V3b3JrbWVtID0gZmFsc2U7CiAJYW1yb3V0aW5lLT5hbXN1bW1hcml6 aW5nID0gZmFsc2U7Ci0tIAoyLjQxLjAKCg== --------------Vg0tEXT73Q0i0DvYi490fHYV--